diff --git a/.github/workflows/dependency-audit.yml b/.github/workflows/dependency-audit.yml index ec2e8db36..8426493b8 100644 --- a/.github/workflows/dependency-audit.yml +++ b/.github/workflows/dependency-audit.yml @@ -48,7 +48,7 @@ jobs: run: poetry run python -m pip install pip-audit - name: Vulnerability audit - run: poetry run pip-audit + run: poetry run pip-audit --skip-editable - name: Geemap folium import guard run: | diff --git a/.github/workflows/draft-pdf.yml b/.github/workflows/draft-pdf.yml deleted file mode 100644 index 645ff1990..000000000 --- a/.github/workflows/draft-pdf.yml +++ /dev/null @@ -1,30 +0,0 @@ -on: - push: - branches-ignore: ['main', 'dev', 'gh-pages'] - paths: ['docs/paper/**'] - -jobs: - paper: - runs-on: ubuntu-latest - name: Paper Draft - steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Build draft PDF - uses: openjournals/openjournals-draft-action@master - with: - journal: joss - # This should be the path to the paper within your repo. - paper-path: docs/paper/paper.md - - name: Upload - uses: actions/upload-artifact@v1 - with: - name: paper - # This is the output path where Pandoc will write the compiled - # PDF. Note, this should be the same directory as the input - # paper.md - path: docs/paper/paper.pdf - - name: save pdf to repo - uses: stefanzweifel/git-auto-commit-action@v4 - with: - commit_message: Saved new PDF of paper diff --git a/.github/workflows/main_workflow.yml b/.github/workflows/main_workflow.yml index 033cf147d..b6ae6b7b5 100644 --- a/.github/workflows/main_workflow.yml +++ b/.github/workflows/main_workflow.yml @@ -323,6 +323,7 @@ jobs: strategy: matrix: test_file: + - tests/test_module_sanity.py - tests/test_qc.py - tests/test_obstypes.py - tests/test_gf.py diff --git a/deployment/develop_pipeline.sh b/deployment/develop_pipeline.sh index 0629a1edb..debeab98a 100755 --- a/deployment/develop_pipeline.sh +++ b/deployment/develop_pipeline.sh @@ -46,7 +46,7 @@ poetry update poetry show poetry build #poetry install --all-extras --no-root -poetry install --all-extras +poetry install --all-extras --no-cache echo "" @@ -75,24 +75,36 @@ BLACK_LOG=${DEPLOY_DIR}/black_log.log rm -f ${BLACK_LOG} #clean start touch ${BLACK_LOG} cd $REPODIR -poetry run black . 2>&1 | tee -a ${BLACK_LOG} +poetry run black src/metobs_toolkit 2>&1 | tee -a ${BLACK_LOG} +# poetry run black . 2>&1 | tee -a ${BLACK_LOG} echo "" -#3. Run tests +#3. Run module sanity checks (embedded __main__ tests) echo "=========================================" -echo "Step 3: Running test suite..." +echo "Step 3: Running module sanity checks..." +echo "=========================================" +SANITY_LOG=${DEPLOY_DIR}/pytest_sanity_log.log +rm -f ${SANITY_LOG} #clean start +touch ${SANITY_LOG} +cd ${REPODIR} #Run from repo root +poetry run pytest tests/test_module_sanity.py -v 2>&1 | tee -a ${SANITY_LOG} +echo "" + +#4. Run tests +echo "=========================================" +echo "Step 4: Running test suite..." echo "=========================================" TEST_LOG=${DEPLOY_DIR}/pytest_tests_log.log rm -f ${TEST_LOG} #clean start touch ${TEST_LOG} -cd ${REPODIR}/tests -poetry run pytest . --mpl --mpl-generate-summary=html 2>&1 | tee -a ${TEST_LOG} +cd ${REPODIR} #Run from repo root +poetry run pytest tests/. --ignore=tests/test_module_sanity.py --mpl --mpl-generate-summary=html 2>&1 | tee -a ${TEST_LOG} echo "" -#4. Run notebook example as tests +#5. Run notebook example as tests echo "=========================================" -echo "Step 4: Running notebook examples as tests..." +echo "Step 5: Running notebook examples as tests..." echo "=========================================" NB_LOG=${DEPLOY_DIR}/pytest_on_doc_notebooks_log.log rm -f ${NB_LOG} #clean start @@ -104,9 +116,9 @@ poetry run pytest . --nbval-lax 2>&1 | tee -a ${NB_LOG} echo "" -#5. Build documentation +#6. Build documentation echo "=========================================" -echo "Step 5: Building documentation..." +echo "Step 6: Building documentation..." echo "=========================================" DOCS_LOG=${DEPLOY_DIR}/build_doc_log.log rm -f ${DOCS_LOG} #clean start @@ -117,15 +129,15 @@ poetry run ./build_doc 2>&1 | tee -a ${DOCS_LOG} echo "" -#6. Create a big log file +#7. Create a big log file echo "=========================================" -echo "Step 6: Creating combined log file..." +echo "Step 7: Creating combined log file..." echo "=========================================" BIG_LOG=${DEPLOY_DIR}/dev_pipeline_full_log.log rm -f ${BIG_LOG} # clean start touch ${BIG_LOG} -cat ${BLACK_LOG} ${TEST_LOG} ${NB_LOG} ${DOCS_LOG} >> ${BIG_LOG} +cat ${BLACK_LOG} ${SANITY_LOG} ${TEST_LOG} ${NB_LOG} ${DOCS_LOG} >> ${BIG_LOG} echo "Opening logs in default text viewer..." diff --git a/docs/examples/filling_example.ipynb b/docs/examples/filling_example.ipynb index 8c6930b40..015b90a4e 100644 --- a/docs/examples/filling_example.ipynb +++ b/docs/examples/filling_example.ipynb @@ -33,9 +33,9 @@ "Luchtdruk_Zeeniveau is present in the datafile, but not found in the template! This column will be ignored.\n", "Globe Temperatuur is present in the datafile, but not found in the template! This column will be ignored.\n", "The following columns are present in the data file, but not in the template! They are skipped!\n", - " ['Neerslagintensiteit', 'Luchtdruk', 'Neerslagsom', 'Luchtdruk_Zeeniveau', 'Rukwind', 'Globe Temperatuur']\n", + " ['Neerslagintensiteit', 'Neerslagsom', 'Rukwind', 'Luchtdruk_Zeeniveau', 'Globe Temperatuur', 'Luchtdruk']\n", "The following columns are found in the metadata, but not in the template and are therefore ignored: \n", - "['sponsor', 'Network', 'stad', 'benaming']\n" + "['benaming', 'sponsor', 'Network', 'stad']\n" ] } ], @@ -185,72 +185,122 @@ "name": "stderr", "output_type": "stream", "text": [ - "WARNING::The present gaps are removed, new gaps are constructed for wind_speed data of station vlinder02..\n", - "WARNING::The present gaps are removed, new gaps are constructed for humidity data of station vlinder02..\n", "WARNING::The present gaps are removed, new gaps are constructed for wind_direction data of station vlinder02..\n", "WARNING::The present gaps are removed, new gaps are constructed for temp data of station vlinder02..\n", - "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/repetitions_check.py:78: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", - " groups.get_group(\n", - "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/repetitions_check.py:78: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", + "WARNING::The present gaps are removed, new gaps are constructed for humidity data of station vlinder02..\n", + "WARNING::The present gaps are removed, new gaps are constructed for wind_speed data of station vlinder02..\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/sensordata.py:524: FutureWarning: The behavior of array concatenation with empty entries is deprecated. In a future version, this will no longer exclude empty items when determining the result dtype. To retain the old behavior, exclude the empty entries before the concat operation.\n", + " self.outliers_values_bin = pd.concat([self.outliers_values_bin,\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/sensordata.py:524: FutureWarning: The behavior of array concatenation with empty entries is deprecated. In a future version, this will no longer exclude empty items when determining the result dtype. To retain the old behavior, exclude the empty entries before the concat operation.\n", + " self.outliers_values_bin = pd.concat([self.outliers_values_bin,\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/sensordata.py:524: FutureWarning: The behavior of array concatenation with empty entries is deprecated. In a future version, this will no longer exclude empty items when determining the result dtype. To retain the old behavior, exclude the empty entries before the concat operation.\n", + " self.outliers_values_bin = pd.concat([self.outliers_values_bin,\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/sensordata.py:524: FutureWarning: The behavior of array concatenation with empty entries is deprecated. In a future version, this will no longer exclude empty items when determining the result dtype. To retain the old behavior, exclude the empty entries before the concat operation.\n", + " self.outliers_values_bin = pd.concat([self.outliers_values_bin,\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/sensordata.py:524: FutureWarning: The behavior of array concatenation with empty entries is deprecated. In a future version, this will no longer exclude empty items when determining the result dtype. To retain the old behavior, exclude the empty entries before the concat operation.\n", + " self.outliers_values_bin = pd.concat([self.outliers_values_bin,\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/sensordata.py:524: FutureWarning: The behavior of array concatenation with empty entries is deprecated. In a future version, this will no longer exclude empty items when determining the result dtype. To retain the old behavior, exclude the empty entries before the concat operation.\n", + " self.outliers_values_bin = pd.concat([self.outliers_values_bin,\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/sensordata.py:524: FutureWarning: The behavior of array concatenation with empty entries is deprecated. In a future version, this will no longer exclude empty items when determining the result dtype. To retain the old behavior, exclude the empty entries before the concat operation.\n", + " self.outliers_values_bin = pd.concat([self.outliers_values_bin,\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/sensordata.py:524: FutureWarning: The behavior of array concatenation with empty entries is deprecated. In a future version, this will no longer exclude empty items when determining the result dtype. To retain the old behavior, exclude the empty entries before the concat operation.\n", + " self.outliers_values_bin = pd.concat([self.outliers_values_bin,\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/sensordata.py:524: FutureWarning: The behavior of array concatenation with empty entries is deprecated. In a future version, this will no longer exclude empty items when determining the result dtype. To retain the old behavior, exclude the empty entries before the concat operation.\n", + " self.outliers_values_bin = pd.concat([self.outliers_values_bin,\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/sensordata.py:524: FutureWarning: The behavior of array concatenation with empty entries is deprecated. In a future version, this will no longer exclude empty items when determining the result dtype. To retain the old behavior, exclude the empty entries before the concat operation.\n", + " self.outliers_values_bin = pd.concat([self.outliers_values_bin,\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/sensordata.py:524: FutureWarning: The behavior of array concatenation with empty entries is deprecated. In a future version, this will no longer exclude empty items when determining the result dtype. To retain the old behavior, exclude the empty entries before the concat operation.\n", + " self.outliers_values_bin = pd.concat([self.outliers_values_bin,\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/sensordata.py:524: FutureWarning: The behavior of array concatenation with empty entries is deprecated. In a future version, this will no longer exclude empty items when determining the result dtype. To retain the old behavior, exclude the empty entries before the concat operation.\n", + " self.outliers_values_bin = pd.concat([self.outliers_values_bin,\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/sensordata.py:524: FutureWarning: The behavior of array concatenation with empty entries is deprecated. In a future version, this will no longer exclude empty items when determining the result dtype. To retain the old behavior, exclude the empty entries before the concat operation.\n", + " self.outliers_values_bin = pd.concat([self.outliers_values_bin,\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/sensordata.py:524: FutureWarning: The behavior of array concatenation with empty entries is deprecated. In a future version, this will no longer exclude empty items when determining the result dtype. To retain the old behavior, exclude the empty entries before the concat operation.\n", + " self.outliers_values_bin = pd.concat([self.outliers_values_bin,\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/sensordata.py:524: FutureWarning: The behavior of array concatenation with empty entries is deprecated. In a future version, this will no longer exclude empty items when determining the result dtype. To retain the old behavior, exclude the empty entries before the concat operation.\n", + " self.outliers_values_bin = pd.concat([self.outliers_values_bin,\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/sensordata.py:524: FutureWarning: The behavior of array concatenation with empty entries is deprecated. In a future version, this will no longer exclude empty items when determining the result dtype. To retain the old behavior, exclude the empty entries before the concat operation.\n", + " self.outliers_values_bin = pd.concat([self.outliers_values_bin,\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/sensordata.py:524: FutureWarning: The behavior of array concatenation with empty entries is deprecated. In a future version, this will no longer exclude empty items when determining the result dtype. To retain the old behavior, exclude the empty entries before the concat operation.\n", + " self.outliers_values_bin = pd.concat([self.outliers_values_bin,\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/sensordata.py:524: FutureWarning: The behavior of array concatenation with empty entries is deprecated. In a future version, this will no longer exclude empty items when determining the result dtype. To retain the old behavior, exclude the empty entries before the concat operation.\n", + " self.outliers_values_bin = pd.concat([self.outliers_values_bin,\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/sensordata.py:524: FutureWarning: The behavior of array concatenation with empty entries is deprecated. In a future version, this will no longer exclude empty items when determining the result dtype. To retain the old behavior, exclude the empty entries before the concat operation.\n", + " self.outliers_values_bin = pd.concat([self.outliers_values_bin,\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/sensordata.py:524: FutureWarning: The behavior of array concatenation with empty entries is deprecated. In a future version, this will no longer exclude empty items when determining the result dtype. To retain the old behavior, exclude the empty entries before the concat operation.\n", + " self.outliers_values_bin = pd.concat([self.outliers_values_bin,\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/sensordata.py:524: FutureWarning: The behavior of array concatenation with empty entries is deprecated. In a future version, this will no longer exclude empty items when determining the result dtype. To retain the old behavior, exclude the empty entries before the concat operation.\n", + " self.outliers_values_bin = pd.concat([self.outliers_values_bin,\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/sensordata.py:524: FutureWarning: The behavior of array concatenation with empty entries is deprecated. In a future version, this will no longer exclude empty items when determining the result dtype. To retain the old behavior, exclude the empty entries before the concat operation.\n", + " self.outliers_values_bin = pd.concat([self.outliers_values_bin,\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/sensordata.py:524: FutureWarning: The behavior of array concatenation with empty entries is deprecated. In a future version, this will no longer exclude empty items when determining the result dtype. To retain the old behavior, exclude the empty entries before the concat operation.\n", + " self.outliers_values_bin = pd.concat([self.outliers_values_bin,\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/sensordata.py:524: FutureWarning: The behavior of array concatenation with empty entries is deprecated. In a future version, this will no longer exclude empty items when determining the result dtype. To retain the old behavior, exclude the empty entries before the concat operation.\n", + " self.outliers_values_bin = pd.concat([self.outliers_values_bin,\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/sensordata.py:524: FutureWarning: The behavior of array concatenation with empty entries is deprecated. In a future version, this will no longer exclude empty items when determining the result dtype. To retain the old behavior, exclude the empty entries before the concat operation.\n", + " self.outliers_values_bin = pd.concat([self.outliers_values_bin,\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/sensordata.py:524: FutureWarning: The behavior of array concatenation with empty entries is deprecated. In a future version, this will no longer exclude empty items when determining the result dtype. To retain the old behavior, exclude the empty entries before the concat operation.\n", + " self.outliers_values_bin = pd.concat([self.outliers_values_bin,\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/sensordata.py:524: FutureWarning: The behavior of array concatenation with empty entries is deprecated. In a future version, this will no longer exclude empty items when determining the result dtype. To retain the old behavior, exclude the empty entries before the concat operation.\n", + " self.outliers_values_bin = pd.concat([self.outliers_values_bin,\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/sensordata.py:524: FutureWarning: The behavior of array concatenation with empty entries is deprecated. In a future version, this will no longer exclude empty items when determining the result dtype. To retain the old behavior, exclude the empty entries before the concat operation.\n", + " self.outliers_values_bin = pd.concat([self.outliers_values_bin,\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/checks/repetitions_check.py:88: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", " groups.get_group(\n", - "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/repetitions_check.py:78: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/checks/repetitions_check.py:88: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", " groups.get_group(\n", - "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/repetitions_check.py:78: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/checks/repetitions_check.py:88: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", " groups.get_group(\n", - "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/repetitions_check.py:78: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/checks/repetitions_check.py:88: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", " groups.get_group(\n", - "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/repetitions_check.py:78: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/checks/repetitions_check.py:88: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", " groups.get_group(\n", - "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/repetitions_check.py:78: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/checks/repetitions_check.py:88: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", " groups.get_group(\n", - "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/repetitions_check.py:78: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/checks/repetitions_check.py:88: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", " groups.get_group(\n", - "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/repetitions_check.py:78: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/checks/repetitions_check.py:88: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", " groups.get_group(\n", - "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/repetitions_check.py:78: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/checks/repetitions_check.py:88: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", " groups.get_group(\n", - "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/repetitions_check.py:78: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/checks/repetitions_check.py:88: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", " groups.get_group(\n", - "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/repetitions_check.py:78: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/checks/repetitions_check.py:88: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", " groups.get_group(\n", - "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/repetitions_check.py:78: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/checks/repetitions_check.py:88: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", " groups.get_group(\n", - "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/repetitions_check.py:78: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/checks/repetitions_check.py:88: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", " groups.get_group(\n", - "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/repetitions_check.py:78: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/checks/repetitions_check.py:88: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", " groups.get_group(\n", - "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/repetitions_check.py:78: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/checks/repetitions_check.py:88: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", " groups.get_group(\n", - "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/repetitions_check.py:78: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/checks/repetitions_check.py:88: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", " groups.get_group(\n", - "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/repetitions_check.py:78: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/checks/repetitions_check.py:88: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", " groups.get_group(\n", - "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/repetitions_check.py:78: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/checks/repetitions_check.py:88: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", " groups.get_group(\n", - "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/repetitions_check.py:78: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/checks/repetitions_check.py:88: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", " groups.get_group(\n", - "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/repetitions_check.py:78: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/checks/repetitions_check.py:88: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", " groups.get_group(\n", - "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/repetitions_check.py:78: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/checks/repetitions_check.py:88: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", " groups.get_group(\n", - "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/repetitions_check.py:78: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/checks/repetitions_check.py:88: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", " groups.get_group(\n", - "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/repetitions_check.py:78: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/checks/repetitions_check.py:88: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", " groups.get_group(\n", - "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/repetitions_check.py:78: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/checks/repetitions_check.py:88: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", " groups.get_group(\n", - "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/repetitions_check.py:78: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/checks/repetitions_check.py:88: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", " groups.get_group(\n", - "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/repetitions_check.py:78: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/checks/repetitions_check.py:88: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", " groups.get_group(\n", - "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/repetitions_check.py:78: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/checks/repetitions_check.py:88: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", " groups.get_group(\n", - "/home/thoverga/.cache/pypoetry/virtualenvs/metobs-toolkit-o8p8H99O-py3.11/lib/python3.11/site-packages/numpy/_core/fromnumeric.py:57: FutureWarning: 'DataFrame.swapaxes' is deprecated and will be removed in a future version. Please use 'DataFrame.transpose' instead.\n", - " return bound(*args, **kwds)\n", - "/home/thoverga/.cache/pypoetry/virtualenvs/metobs-toolkit-o8p8H99O-py3.11/lib/python3.11/site-packages/numpy/_core/fromnumeric.py:57: FutureWarning: 'DataFrame.swapaxes' is deprecated and will be removed in a future version. Please use 'DataFrame.transpose' instead.\n", - " return bound(*args, **kwds)\n", - "/home/thoverga/.cache/pypoetry/virtualenvs/metobs-toolkit-o8p8H99O-py3.11/lib/python3.11/site-packages/numpy/_core/fromnumeric.py:57: FutureWarning: 'DataFrame.swapaxes' is deprecated and will be removed in a future version. Please use 'DataFrame.transpose' instead.\n", - " return bound(*args, **kwds)\n" + "/home/thoverga/Documents/VLINDER_github/MetObs_toolkit/src/metobs_toolkit/qc_collection/checks/repetitions_check.py:88: FutureWarning: When grouping with a length-1 list-like, you will need to pass a length-1 tuple to get_group in a future version of pandas. Pass `(name,)` instead of `name` to silence this warning.\n", + " groups.get_group(\n" ] }, { @@ -265,7 +315,7 @@ }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABdEAAAHpCAYAAABtM3XZAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3XecE3X+x/HXJNlkdylLWXoVUJBmwQaooHKKFdvZfiKopyiI7c7z9DyVu/M89SxnR+/EE1GxYwVFkTspFiy4KlV6X2AL27LJfH9/TJJNdrO7ybKw7f18PJRkMuWbySSbfOYzn49ljDGIiIiIiIiIiIiIiEgFrroegIiIiIiIiIiIiIhIfaUguoiIiIiIiIiIiIhIJRREFxERERERERERERGphILoIiIiIiIiIiIiIiKVUBBdRERERERERERERKQSCqKLiIiIiIiIiIiIiFRCQXQRERERERERERERkUooiC4iIiIiIiIiIiIiUgkF0UVEREREREREREREKqEguoiIiDQJ06dPp1+/fqSkpNCqVau6Hk6dsCyLu+++O3L/+eefx7Is1q5dW2djaqg+++wzLMvis88+q+uhSBMwcuRIBg4cWNfDqBMjR45k5MiRdT0MERERaeIURBcREZEG78knn8SyLI4++ui4jy9btozx48fTu3dvnn32WZ555hkKCwu5++67FQQt58knn+T555+v62HUioULF3L33XeTk5NT10PZ5z744IOYEyRSpjEd043VTz/9xN13360TeiIiIlJvKYguIiIiDd6MGTPo2bMnX375JatWrarw+GeffYZt2/zzn/9k/PjxXHDBBRQWFjJlypQmHUQfO3YsRUVF9OjRIzKtMQUcFy5cyJQpU5pMEH3KlCl1PYx6qTEd043VTz/9xJQpU+IG0T/66CM++uij/T8oERERkSgKoouIiEiDtmbNGhYuXMhDDz1Eu3btmDFjRoV5tm/fDrBfyrgUFBTs823UFrfbTWpqKpZl1fVQ6pxt2xQXF9f1MKQaxhiKiorqehj1Zhz7W3FxMbZt79dter1evF7vft2miIiISHkKoouIiEiDNmPGDFq3bs3pp5/O+eefXyGI3rNnT+666y4A2rVrh2VZjB8/nnbt2gEwZcoULMuqUC982bJlnH/++bRp04bU1FSOOOII3nnnnZh1h2uKz58/n4kTJ9K+fXu6du1a5Xg3btzI2WefTbNmzWjfvj033XQTc+bMqVBfu2fPnowfP77C8uXrA/v9fu68806GDBlCRkYGzZo147jjjmPevHnV7rvyNdF79uzJjz/+yPz58yP7ZOTIkfzyyy9YlsXDDz9cYR0LFy7EsixefvnlKrdVXFzM3XffzUEHHURqaiqdOnXi3HPPZfXq1ZF5CgoK+O1vf0u3bt3w+Xz07duXf/zjHxhjYtZlWRbXXXcdb7/9NgMHDsTn8zFgwABmz54dmefuu+/mlltuAeCAAw6IPJ/wcw2vY8aMGQwYMACfzxdZ/ttvv+XUU0+lZcuWNG/enJNOOonFixdXuz8rk8j6wq/FggULuPnmm2nXrh3NmjXjnHPOYceOHVWuf/z48TzxxBOR5xX+L8y2bR555BEGDBhAamoqHTp0YMKECezevTtmPT179uSMM87gs88+44gjjiAtLY1BgwZFjss333yTQYMGkZqaypAhQ/j2228rjKN58+b88ssvnHLKKTRr1ozOnTvz5z//ucJrmOyY5syZExnT1KlTAZg2bRonnngi7du3x+fz0b9/f5566qkKy8c7psE5RuKdQIrXK6CqceTk5HDjjTdGjts+ffpw3333JRxsfvLJJyPHYOfOnZk0aVKlV08sWbKEYcOGkZaWxgEHHMDTTz9dYZ7HHnuMAQMGkJ6eTuvWrTniiCN46aWXYubZtGkTV1xxBR06dIi8f5577rmYecJ1/1955RXuuOMOunTpQnp6Ot988w2WZfGf//ynwrbDn2XvvfceAOvWrWPixIn07duXtLQ02rZty69//euYffv888/z61//GoATTjgh8jqFj7t4NdG3b9/OlVdeSYcOHUhNTeWQQw6pMJ61a9diWRb/+Mc/eOaZZ+jduzc+n48jjzySr776KmberVu3cvnll9O1a1d8Ph+dOnVizJgxKi8jIiIiEZ66HoCIiIjI3pgxYwbnnnsuXq+Xiy++mKeeeoqvvvqKI488EoBHHnmEF154gbfeeounnnqK5s2bM2jQII455hiuvfZazjnnHM4991wABg8eDMCPP/7I8OHD6dKlC3/4wx9o1qwZr776KmeffTZvvPEG55xzTswYJk6cSLt27bjzzjurzEQvKiripJNOYv369Vx//fV07tyZ6dOn8+mnn9b4+efl5fGvf/2Liy++mKuuuor8/Hz+/e9/c8opp/Dll19y6KGHJryuRx55hMmTJ9O8eXP++Mc/AtChQwd69erF8OHDmTFjBjfddFPMMjNmzKBFixaMGTOm0vUGg0HOOOMMPvnkEy666CJuuOEG8vPz+fjjj8nKyqJ3794YYzjrrLOYN28eV155JYceeihz5szhlltuYdOmTRUC+J9//jlvvvkmEydOpEWLFjz66KOcd955rF+/nrZt23LuueeyYsUKXn75ZR5++GEyMzMBIidPAD799FNeffVVrrvuOjIzMyMB1+OOO46WLVvy+9//npSUFKZOncrIkSOZP39+pXX3K5Ps+iZPnkzr1q256667WLt2LY888gjXXXcdM2fOrHQbEyZMYPPmzXz88cdMnz497uPPP/88l19+Oddffz1r1qzh8ccf59tvv2XBggWkpKRE5l21ahWXXHIJEyZM4NJLL+Uf//gHZ555Jk8//TS33347EydOBODee+/lggsuYPny5bhcZXk5wWCQ0aNHc8wxx3D//fcze/Zs7rrrLgKBAH/+859rNKbly5dz8cUXM2HCBK666ir69u0LwFNPPcWAAQM466yz8Hg8vPvuu0ycOBHbtpk0aRJQ+TFdE/HGUVhYyIgRI9i0aRMTJkyge/fuLFy4kNtuu40tW7bwyCOPVLnOu+++mylTpjBq1CiuvfZali9fHvkMK78fdu/ezWmnncYFF1zAxRdfzKuvvsq1116L1+vliiuuAODZZ5/l+uuv5/zzz+eGG26guLiYpUuX8sUXX3DJJZcAsG3bNo455pjIiaR27drx4YcfcuWVV5KXl8eNN94YM8a//OUveL1efve731FSUkL//v3p1asXr776KuPGjYuZd+bMmbRu3ZpTTjkFgK+++oqFCxdy0UUX0bVrV9auXctTTz3FyJEj+emnn0hPT+f444/n+uuv59FHH+X222/n4IMPBoj8W15RUREjR45k1apVXHfddRxwwAG89tprjB8/npycHG644YaY+V966SXy8/OZMGEClmVx//33c+655/LLL79E9u95553Hjz/+yOTJk+nZsyfbt2/n448/Zv369fTs2bPK11BERESaCCMiIiLSQH399dcGMB9//LExxhjbtk3Xrl3NDTfcEDPfXXfdZQCzY8eOyLQdO3YYwNx1110V1nvSSSeZQYMGmeLi4sg027bNsGHDzIEHHhiZNm3aNAOYY489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WRannnpqjZ4LVHyNK+N2uzn55JOZNWtWpDwGwLZt23jppZc49thjadmyZcLbr+31VaWy53rBBRcQDAb5y1/+UmGZQCCQ8L5JRvRraIzh8ccfJyUlhZNOOqnWxhTvuM/NzWXatGkV5q3smA7X1I+uW15QUMB//vOfarcfdsEFF7Bo0SLmzJlT4bGcnBwCgUCly44aNQqv18ujjz4a8zz+/e9/k5uby+mnnx4zfyAQYOrUqZH7fr+fqVOn0q5dO4YMGQLAzp07Y5bxer30798fYwylpaW43W7OO+883njjDbKysiqMKZnPt4MPPphBgwYxc+ZMZs6cSadOnTj++ONj5nG73RWuVnjssccqZPsn81497bTT2Lp1a0wpmUAgwGOPPUbz5s0ZMWJEws8BnM/g4uLimGm9e/emRYsWlJSURKZt2bKFZcuWUVpamtT6RUREpHFQJrqIiIg0OO+88w75+fmcddZZcR8/5phjIhnT0U3uoqWlpdG/f39mzpzJQQcdRJs2bRg4cCADBw7kiSee4Nhjj2XQoEFcddVV9OrVi23btrFo0SI2btzI999/X6NxX3XVVTz++ONcdtllLFmyhE6dOjF9+vRIQD/ab37zG15//XVGjx7NBRdcwOrVq3nxxRdjmmkCnHHGGbz55pucc845nH766axZs4ann36a/v37s2fPnqTHOGTIEJ566in++te/0qdPH9q3bx9T4/iyyy7j0UcfZd68edx3330JrfOyyy7jhRde4Oabb+bLL7/kuOOOo6CggLlz5zJx4kTGjBnDmWeeyQknnMAf//hH1q5dyyGHHMJHH33ErFmzuPHGGys870SfC8Af//hHLrroIlJSUjjzzDMr1JWO9te//pWPP/6YY489lokTJ+LxeJg6dSolJSXcf//9SY+httdXmfBzvf766znllFNwu91cdNFFjBgxggkTJnDvvffy3XffcfLJJ5OSksLKlSt57bXX+Oc//xnT6HZvpaamMnv2bMaNG8fRRx/Nhx9+yPvvv8/tt98eKdNSG2M6+eST8Xq9nHnmmUyYMIE9e/bw7LPP0r59+wonvyo7pk8++WS6d+/OlVdeyS233ILb7ea5556jXbt2rF+/PqHne8stt/DOO+9wxhlnMH78eIYMGUJBQQE//PADr7/+OmvXriUzMzPusu3ateO2225jypQpjB49mrPOOovly5fz5JNPcuSRR1Zo2Nu5c2fuu+8+1q5dy0EHHcTMmTP57rvveOaZZyJXeJx88sl07NiR4cOH06FDB37++Wcef/xxTj/99MgVHn//+9+ZN28eRx99NFdddRX9+/dn165dfPPNN8ydO5ddu3Yl9NzByUa/8847SU1N5corr6xQ2umMM85g+vTpZGRk0L9/fxYtWsTcuXNp27ZtzHyHHnoobreb++67j9zcXHw+HyeeeCLt27evsM2rr76aqVOnMn78eJYsWULPnj15/fXXWbBgAY888kiFvgrVWbFiBSeddBIXXHAB/fv3x+Px8NZbb7Ft27aYzPrbbruN//znP6xZsyYm819ERESaCCMiIiLSwJx55pkmNTXVFBQUVDrP+PHjTUpKisnOzjZ33XWXAcyOHTti5lm4cKEZMmSI8Xq9BjB33XVX5LHVq1ebyy67zHTs2NGkpKSYLl26mDPOOMO8/vrrkXmmTZtmAPPVV18lPPZ169aZs846y6Snp5vMzExzww03mNmzZxvAzJs3L2beBx980HTp0sX4fD4zfPhw8/XXX5sRI0aYESNGROaxbdv87W9/Mz169DA+n88cdthh5r333jPjxo0zPXr0iFlf+ecYHv+aNWsi07Zu3WpOP/1006JFCwPEbCtswIABxuVymY0bNyb8vAsLC80f//hHc8ABB5iUlBTTsWNHc/7555vVq1dH5snPzzc33XST6dy5s0lJSTEHHnigeeCBB4xt2xWex6RJkypso0ePHmbcuHEx0/7yl7+YLl26GJfLFfNcK1uHMcZ888035pRTTjHNmzc36enp5oQTTjALFy6MmWfevHlxX7Oarq+yYynR7QQCATN58mTTrl07Y1mWKf81/5lnnjFDhgwxaWlppkWLFmbQoEHm97//vdm8eXNknh49epjTTz+9wrrj7as1a9YYwDzwwAORaePGjTPNmjUzq1evNieffLJJT083HTp0MHfddZcJBoMV1rs3YzLGmHfeeccMHjzYpKammp49e5r77rvPPPfcc0kd00uWLDFHH3208Xq9pnv37uahhx6K+76oahz5+fnmtttuM3369DFer9dkZmaaYcOGmX/84x/G7/fHXSba448/bvr162dSUlJMhw4dzLXXXmt2794dM8+IESPMgAEDzNdff22GDh1qUlNTTY8ePczjjz8eM9/UqVPN8ccfb9q2bWt8Pp/p3bu3ueWWW0xubm7MfNu2bTOTJk0y3bp1i7wfTzrpJPPMM89E5gkfe6+99lqlY1+5cqUBDGA+//zzCo/v3r3bXH755SYzM9M0b97cnHLKKWbZsmVx36vPPvus6dWrl3G73THHfPnPvPD4w+v1er1m0KBBZtq0aTHzxDtGw6I/C7Ozs82kSZNMv379TLNmzUxGRoY5+uijzauvvhqzzLhx4yocFyIiItJ0WMbUsEuRiIiIiNSKzz77jBNOOIF58+YxcuTIuh5OtQ477DDatGnDJ598UtdDkXpk/PjxvP766zW6AkJEREREpD5TTXQRERERSdjXX3/Nd999x2WXXVbXQxEREREREdkvVBNdRERERKqVlZXFkiVLePDBB+nUqVOlteZFREREREQaG2Wii4iIiEi1Xn/9dS6//HJKS0t5+eWXSU1NreshiYiIiIiI7BeqiS4iIiIiIiIiIiIiUglloouIiIiIiIiIiIiIVKLR10S3bZvNmzfTokULLMuq6+GIiIiIiIiIiIiISD1gjCE/P5/OnTvjclWeb97og+ibN2+mW7dudT0MEREREREREREREamHNmzYQNeuXSt9vNEH0Vu0aAE4O6Jly5Z1PBoRERERERERERERqQ/y8vLo1q1bJIZcmUYfRA+XcGnZsqWC6CIiIiIiIiIiIiISo7oy4GosKiIiIiIiIiIiIiJSCQXRRUREREREREREREQqoSC6iIiIiIiIiIiIiEglFEQXEREREREREREREamEgugiIiIiIiIiIiIiIpVQEF1EREREREREREREpBIKoouIiIiIiIiIiIiIVEJBdBERERERERERERGRSiiILiIiIiIiIiIiIiJSCQXRRUREREREREREREQqoSC6iIiIiIiIiIiIiEglFEQXEREREREREREREamEgugiIiISESSLQm4lSFZdD0VERERERESkXvDU9QBERESk/ihhOgFmA5DOfXU8GhERkdpT8si3mDw/VksvvhsPq+vhiIiISAOiILqIiIhE+Bgb86+IiEhjUfLPbzGbCrC6NFMQXURERJKiILqIiIhEuBmoDHQRERERERGRKKqJLiIiIiIiIiIiIiJSCQXRRUREREREREREREQqoSC6iIiIiIiIiIiIiEglFEQXEREREREREREREamEgugiIiIiIiIiIiIiIpXw1PUAREREpO4E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AJfFNeiFHveEcSS6B0eiE1EBU0blg3masYgSN1BR8svp5uQJDKKTRYpIrtim/Sanm0FERERERESUKVvJBt1UbbDfcAzTU/Kh+0recIUz/sFjbDf8gWviNgCgmOSRk00lIsoRAzXdc7oJeQrTuRARERERERFRvvODdiaidPvgLXkCAKwkKwxQdwUAdE/6DHsNhwEAZSSfnGoiERHlEQyiExEREREREVG+pJKUYY8Bmq6wgTUA4JK4CgDwV5XM9nYREVHewiA6ERERERERERUIbpILvraaqFjmx5HoRESUCeZEJyIiIiIionxPNzQQIi4RkqM2p5tCOay7+l3EiXiMT16AxqpaKAJOLEpERBmThBAipxuRleLi4uDk5ITY2Fg4OjrmdHOIiIiIiIiIiIiIKBewNHbMdC5ERERERERERERERGYwiE5EREREREREREREZAaD6EREREREREREREREZjCITkRERERERERERERkBoPoRERERERERERERERmMIhORERERERERERERGQGg+hERERERERERERERGYwiE5EREREREREREREZAaD6EREREREREREREREZjCITkRERERERERERERkBoPoRERERERERERERERmMIhORERERERERERERGQGg+hERERERERERERERGZocroBWU0IAQCIi4vL4ZYQERERERERERERUW5hihmbYsjm5Psg+pMnTwAAXl5eOdwSIiIiIiIiIiIiIsptnjx5AicnJ7PrJZFZmD2PMxgMuHPnDhwcHCBJUk43J0fExcXBy8sLN2/ehKOjY043hyhD7K+U17DPUl7C/kp5Dfss5TXss5SXsL9SXsM+S1lBCIEnT56gaNGiUKnMZz7P9yPRVSoVihcvntPNyBUcHR15kKE8g/2V8hr2WcpL2F8pr2GfpbyGfZbyEvZXymvYZ+lNy2gEugknFiUiIiIiIiIiIiIiMoNBdCIiIiIiIiIiIiIiMxhELwB0Oh0mTZoEnU6X000hyhT7K+U17LOUl7C/Ul7DPkt5Dfss5SXsr5TXsM9STsr3E4sSEREREREREREREf1bHIlORERERERERERERGQGg+hERERERERERERERGYwiE5EREREREREREREZAaD6EREREREREREREREZjCI/gbNnDkTNWrUgIODA4oUKYJ27dohIiJCUebFixcYNGgQXF1d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afGPcHrzCmp/FcI4ojM0NFS0adNGNGrUSP6NlZppWbVq1US3bt1EaGgozwlyGPus+T779ddfi507d4rLly+Ly5cvixUrVggHBwcxfvx4S3YtZRH2WfN9dsGCBWL79u0iMjJSnD17VgwdOlSoVCrxxx9/WLJrKQ9jEP0NApDu36pVq+Qyz58/FwMHDhSFChUStra2on379iImJkZeP2nSpHTrSH0VtmHDhumW6dWrV4btMxgMYsKECcLd3V3odDrRtGlTERERoSjTo0cP4eLiIrRarahcubJYu3atRa89PDxc1K9fX+h0OlGsWDExa9Ysxfro6Oh028yRvTmH/dV8fx0/frzw9fUV1tbWolChQqJOnTpi06ZNFtVNWYd91nyfHTZsmPD29hZarVa4u7uLt99+W5w+fdqiuilrsL+a769CvByp9Pvvv1tUJ2U99lnzfTY4OFiUK1dO6HQ64erqKnr06CFu375tUd2UNQpyfy1RokS6bcps/3BUb85inzXfZxcvXiwqVKggbG1thaOjowgMDBRLly4Ver3eovopa7DPmu+zs2fPFqVLlxbW1tbCxcVFNGrUSPz5558W1U15mySEECAiIiIiIiIiIiIiojQ4pTwRERERERERERERkRkMohMRERERERERERERmcEgOhERERERERERERGRGQyiExERERERERERERGZwSA6EREREREREREREZEZDKITEREREREREREREZnBIDoRERERERERERERkRkMohMRERERERERERERmcEgOhEREREVOL1790a7du1yuhl5XmJiInx9fXHkyBEAwLVr1yBJEsLCwnK2Ya9h2bJlaNOmTU43g4iIiIhyMQbRiYiIiChfkSQpw7/Jkydj0aJFWL16dY62Mz8E8pctW4aSJUuibt26AAAvLy/ExMSgYsWK/7rOjALxjRo1wrBhwxAcHJzp+xwcHAwA2Lp1Kxo1agQnJyfY29ujcuXKmDp1Kh4+fAgA+Oijj3D69GkcPHjwX7eZiIiIiPI3BtGJiIiIKF+JiYmR/xYuXAhHR0fFspEjR8LJyQnOzs453dQ8TQiBr7/+Gn369JGXqdVqeHh4QKPRZOm269atq3hPO3fujJYtWyqW1a1bF+PHj8f777+PGjVq4Ndff8W5c+cwb948hIeHY926dQAArVaLbt26YfHixVnaZiIiIiLKuxhE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WQlPT0/Rvn17cebMGbnMgAEDhKurqwAgJk2aJIRI+77t3LlT+Pr6Co1GI/ebVydI0+v1YvLkyaJYsWLCyspKBAQEiF9//VVen97EiY8ePZL7mxBCDB48WJQuXVrodDrh5uYmevToIR48eGB237Hv513pTSz66v4KCAiQ++SrMjump/e+CiFETEyM6Nmzp/ydX6pUKdGvXz8RGxsrhHg5kefEiROFq6ursLe3F/369RMvXrzI8PVk9N0khBC3b98WLVq0EHZ2dqJMmTJi9+7dikkehRBi+fLlwsvLS6hUKvl7IaOJRYXI/DNubvLg9OzYsUP4+voKnU4nGjVqJE8yaZp40lxdb+Jz+G/3e0FlyfHfkj539OhRERAQILRarahSpYrYunVrmuP0//3f/8n94q233hI//PBDmuOhEELs27dPAJAnlM2IXq8XX375pShRooT8mZkxY4YQwrLvCiEyPwY/f/5cDB8+XHh6egqtVit8fX3FDz/8IIT4d+f3Gf1eMPn555+Fr6+vsLGxEa1btxbff/+9YmLRFy9eiPfee084OzsLAPJ7gQwmFhXCsvOB9M4jiIhygiTEK8mtiIiI6I15+vQpihUrhnnz5qW5A4CI0teoUSNUqVIFCxcuzOmmEOUbvXv3xuPHj7F9+/acbkqOmz59OpYtW5YtE3tyv+d969atw/Dhw3Hnzp08ndaKiIj+m9x/PyMREVEeEhoaikuXLqFmzZqIjY3F1KlTAUC+9ZuIiIiy19KlS1GjRg24urri8OHD+Oqrr/J8iiLKes+ePUNMTAxmzZqFjz/+mAF0IqICLm8kYSMiIspD5s6di4CAADRr1gxPnz7FwYMHUbhw4ZxuFhERUYEUGRmJtm3bonz58pg2bRo+++wzTJ48OaebRbncnDlzULZsWXh4eGDcuHE53RwiIsphTOdCRERERERERERERGQGR6ITEREREREREREREZnBIDoRERERERERERERkRkMohMRERERERERERERmcEgOhERERERERERERGRGQyiExERERERERERERGZwSA6EREREREREREREZEZDKITERHlA5MnT0aVKlVyuhl5yqv7rHfv3mjXrl2OtYeIiIiIiIhyJwbRiYiI8oGRI0di3759FpUtiAF3SZKwffv2DMssWrQIq1evzpb2EBERERERUd6hyekGEBERUcb0ej0k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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAABdEAAAHpCAYAAABtM3XZAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3Xd4VGX2wPHvOzOZJEASeu+gKE0FFBERUBQUseHafrsUXURAXXV1V9S17OraFSsCK2DB3isICihNuohK772mkDYz976/PyYzmcn0ZJJMkvN5Hh4md255Z3JnMnPuec9RWmuNEEIIIYQQQgghhBBCCCECWCp7AEIIIYQQQgghhBBCCCFEopIguhBCCCGEEEIIIYQQQggRggTRhRBCCCGEEEIIIYQQQogQJIguhBBCCCGEEEIIIYQQQoQgQXQhhBBCCCGEEEIIIYQQIgQJogshhBBCCCGEEEIIIYQQIUgQXQghhBBCCCGEEEIIIYQIQYLoQgghhBBCCCGEEEIIIUQIEkQXQgghhBBCCCGEEEIIIUKQILoQQgghaoS33nqLU045haSkJOrWrVvZw6kUSikefvhh788zZ85EKcWOHTsqbUxV1YIFC1BKsWDBgsoeiqgBBgwYQNeuXSt7GJViwIABDBgwoLKHIYQQQogaToLoQgghhKjyXn31VZRS9O7dO+j9GzZsYNSoUXTo0IFp06YxdepU8vLyePjhhyUIWsKrr77KzJkzK3sYcbFkyRIefvhhMjMzK3so5e6bb77xu0AiilWnc7q6+v3333n44Yflgp4QQgghEpYE0YUQQghR5c2aNYu2bduyfPlytmzZEnD/ggULME2TF154gVGjRnHNNdeQl5fHI488UqOD6H/5y1/Iz8+nTZs23mXVKeC4ZMkSHnnkkRoTRH/kkUcqexgJqTqd09XV77//ziOPPBI0iP7dd9/x3XffVfyghBBCCCF8SBBdCCGEEFXa9u3bWbJkCc899xyNGjVi1qxZAescOnQIoELKuOTm5pb7MeLFarWSkpKCUqqyh1LpTNOkoKCgsochItBak5+fX9nDSJhxVLSCggJM06zQY9rtdux2e4UeUwghhBCiJAmiCyGEEKJKmzVrFvXq1WPo0KFcffXVAUH0tm3b8tBDDwHQqFEjlFKMGjWKRo0aAfDII4+glAqoF75hwwauvvpq6tevT0pKCr169eKLL77w27enpvjChQsZP348jRs3pmXLlmHHu2fPHq644gpq165N48aNufPOO5kzZ05Afe22bdsyatSogO1L1gd2OBw8+OCD9OzZk4yMDGrXrk2/fv2YP39+xOeuZE30tm3b8ttvv7Fw4ULvczJgwAC2bduGUornn38+YB9LlixBKcW7774b9lgFBQU8/PDDnHzyyaSkpNCsWTOuuuoqtm7d6l0nNzeXv//977Rq1Yrk5GQ6derEM888g9bab19KKW699VY+++wzunbtSnJyMl26dGH27NnedR5++GHuueceANq1a+d9PJ7H6tnHrFmz6NKlC8nJyd7t16xZw8UXX0x6ejp16tThggsuYNmyZRGfz1Ci2Z/nd7F48WLuuusuGjVqRO3atbnyyis5fPhw2P2PGjWKV155xfu4PP88TNNk0qRJdOnShZSUFJo0acLYsWM5fvy4337atm3LpZdeyoIFC+jVqxepqal069bNe15+8skndOvWjZSUFHr27MmaNWsCxlGnTh22bdvG4MGDqV27Ns2bN+ff//53wO8w1jHNmTPHO6YpU6YAMGPGDM4//3waN25McnIynTt3ZvLkyQHbBzunwX2OBLuAFKxXQLhxZGZmcscdd3jP244dO/Lkk09GHWx+9dVXvedg8+bNmTBhQsjZE6tWreKcc84hNTWVdu3a8dprrwWs89JLL9GlSxdq1apFvXr16NWrF++8847fOnv37uXGG2+kSZMm3tfP9OnT/dbx1P1/7733eOCBB2jRogW1atVi9erVKKV44403Ao7teS/76quvANi5cyfjx4+nU6dOpKam0qBBA/70pz/5PbczZ87kT3/6EwADBw70/p48512wmuiHDh3ipptuokmTJqSkpHDaaacFjGfHjh0opXjmmWeYOnUqHTp0IDk5mTPPPJMVK1b4rXvgwAFGjx5Ny5YtSU5OplmzZlx++eVSXkYIIYQQXrbKHoAQQgghRFnMmjWLq666CrvdzvXXX8/kyZNZsWIFZ555JgCTJk3izTff5NNPP2Xy5MnUqVOHbt26cfbZZzNu3DiuvPJKrrrqKgC6d+8OwG+//Ubfvn1p0aIF9957L7Vr1+aDDz7giiuu4OOPP+bKK6/0G8P48eNp1KgRDz74YNhM9Pz8fC644AJ27drF7bffTvPmzXnrrbf44YcfSv34s7Oz+d///sf111/PmDFjyMnJ4fXXX2fw4MEsX76c008/Pep9TZo0idtuu406depw//33A9CkSRPat29P3759mTVrFnfeeaffNrNmzSItLY3LL7885H4Nw+DSSy/l+++/57rrruNvf/sbOTk5zJ07l/Xr19OhQwe01lx22WXMnz+fm266idNPP505c+Zwzz33sHfv3oAA/qJFi/jkk08YP348aWlpvPjiiwwfPpxdu3bRoEEDrrrqKjZt2sS7777L888/T8OGDQG8F08AfvjhBz744ANuvfVWGjZs6A249uvXj/T0dP7xj3+QlJTElClTGDBgAAsXLgxZdz+UWPd32223Ua9ePR566CF27NjBpEmTuPXWW3n//fdDHmPs2LHs27ePuXPn8tZbbwW9f+bMmYwePZrbb7+d7du38/LLL7NmzRoWL15MUlKSd90tW7Zwww03MHbsWP785z/zzDPPMGzYMF577TXuu+8+xo8fD8Djjz/ONddcw8aNG7FYivNyDMNgyJAhnH322Tz11FPMnj2bhx56CJfLxb///e9SjWnjxo1cf/31jB07ljFjxtCpUycAJk+eTJcuXbjsssuw2Wx8+eWXjB8/HtM0mTBhAhD6nC6NYOPIy8ujf//+7N27l7Fjx9K6dWuWLFnCxIkT2b9/P5MmTQq7z4cffphHHnmEQYMGMW7cODZu3Oh9Dyv5PBw/fpxLLrmEa665huuvv54PPviAcePGYbfbufHGGwGYNm0at99+O1dffTV/+9vfKCgoYN26dfz888/ccMMNABw8eJCzzz7beyGpUaNGfPvtt9x0001kZ2dzxx13+I3xP//5D3a7nbvvvpvCwkI6d+5M+/bt+eCDDxg5cqTfuu+//z716tVj8ODBAKxYsYIlS5Zw3XXX0bJlS3bs2MHkyZMZMGAAv//+O7Vq1eK8887j9ttv58UXX+S+++7j1FNPBfD+X1J+fj4DBgxgy5Yt3HrrrbRr144PP/yQUaNGkZmZyd/+9je/9d955x1ycnIYO3YsSimeeuoprrrqKrZt2+Z9focPH85vv/3GbbfdRtu2bTl06BBz585l165dtG3bNuzvUAghhBA1hBZCCCGEqKJWrlypAT137lyttdamaeqWLVvqv/3tb37rPfTQQxrQhw8f9i47fPiwBvRDDz0UsN8LLrhAd+vWTRcUFHiXmaapzznnHH3SSSd5l82YMUMD+txzz9UulyvieCdNmqQB/cEHH3iX5ebm6o4dO2pAz58/37u8TZs2euTIkQH76N+/v+7fv7/3Z5fLpQsLC/3WOX78uG7SpIm+8cYb/ZaXfLye8W/fvt27rEuXLn7795gyZYoG9B9//OFd5nA4dMOGDYOO09f06dM1oJ977rmA+0zT1Fpr/dlnn2lAP/roo373X3311Voppbds2eL3OOx2u9+yX375RQP6pZde8i57+umnAx6f7z4sFov+7bff/JZfccUV2m63661bt3qX7du3T6elpenzzjvPu2z+/PkBv7Ngot2f53cxaNAg73OitdZ33nmntlqtOjMzM+xxJkyYoIN9tP/pp580oGfNmuW3fPbs2QHL27RpowG9ZMkS77I5c+ZoQKempuqdO3d6l3vOB9/HP3LkSA3o2267zbvMNE09dOhQbbfbva+/0oxp9uzZAY8tLy8vYNngwYN1+/bt/ZaFOqc97wslBXtdhBrHf/7zH127dm29adMmv+X33nuvtlqteteuXQH79zh06JC22+36oosu0oZheJe//PLLGtDTp0/3Luvfv78G9LPPPutdVlhYqE8//XTduHFj7XA4tNZaX3755bpLly4hj6m11jfddJNu1qyZPnLkiN/y6667TmdkZHifV8853r59+4DneuLEiTopKUkfO3bMbzx169b1e98J9jtaunSpBvSbb77pXfbhhx+GfD2VfM/zvI++/fbb3mUOh0P36dNH16lTR2dnZ2uttd6+fbsGdIMGDfzG+fnnn2tAf/nll1pr9/sloJ9++umQz5kQQgghhJRzEUIIIUSVNWvWLJo0acLAgQMBdymLa6+9lvfeew/DMEq1z2PHjvHDDz9wzTXXkJOTw5EjRzhy5AhHjx5l8ODBbN68mb179/ptM2bMGKxWa8R9f/PNNzRr1oyrr77au6xWrVrcfPPNpRoruOuae+oFm6bJsWPHcLlc9OrVi9WrV5d6vyVdc801pKSk+JXLmTNnDkeOHOHPf/5z2G0//vhjGjZsyG233RZwn6ecxjfffIPVauX222/3u//vf/87Wmu+/fZbv+WDBg2iQ4cO3p+7d+9Oeno627Zti/ox9e/fn86dO3t/NgyD7777jiuuuIL27dt7lzdr1owbbriBRYsWkZ2dHfX+S7O/m2++2a/ESL9+/TAMg507d0Z9XF8ffvghGRkZXHjhhd5z+ciRI/Ts2ZM6deoElP3p3Lkzffr08f7syZQ///zzad26dcDyYM/3rbfe6r3tyXZ2OBzMmzevVGNq166dN7PZV2pqqvd2VlYWR44coX///mzbto2srKyon6NoBRvHhx9+SL9+/ahXr57fYxk0aBCGYfDjjz+G3N+8efNwOBzccccdftn8Y8aMIT09na+//tpvfZvNxtixY70/2+12xo4dy6FDh1i1ahXg7vuwZ8+egHIlHlprPv74Y4YNG4bW2m/MgwcPJisrK+B9Y+TIkX7PNcC1116L0+nkk08+8S777rvvyMzM5Nprr/Uu893O6XRy9OhROnbsSN26dUv9/vTNN9/QtGlTrr/+eu+ypKQkbr/9dk6cOMHChQsDxlqvXj3vz/369QOKz93U1FTsdjsLFiwIKCckhBBCCOEhQXQhhBBCVEmGYfDee+8xcOBAtm/fzpYtW9iyZQu9e/fm4MGDfP/996Xa75YtW9Ba869//YtGjRr5/fPUVvc0KvVo165dVPveuXMnHTt2DKjD7ClPUVpvvPEG3bt3JyUlhQYNGtCoUSO+/vrruAYS69aty7Bhw/xqK8+aNYsWLVpw/vnnh91269atdOrUCZstdCXBnTt30rx5c9LS0vyWe0o6lAwi+wZ0PerVqxdTEKzk7+3w4cPk5eUF/X2ceuqpmKbJ7t27o95/afZX8nF5gn+lDe5t3ryZrKwsGjduHHA+nzhxIuBcLnn8jIwMAFq1ahV0eclxWSwWvwsGACeffDKAt750rGMK9fpavHgxgwYNonbt2tStW5dGjRpx3333AZRbEL2kzZs3M3v27IDHMWjQICDwvcKX55wueX7Y7Xbat28fcM43b96c2rVr+y0r+dz+85//pE6dOpx11lmcdNJJTJgwgcWLF3vXP3z4MJmZmUydOjVgzKNHjw465mCP+7TTTuOUU07xKzP0/vvv07BhQ7/3g/z8fB588EFvvfiGDRvSqFEjMjMzS/072rlzJyeddJLfhQeI/r2i5GsqOTmZJ598km+//ZYmTZpw3nnn8dRTT3HgwIFSjU8IIYQQ1ZPURBdCCCFElfTDDz+wf/9+3nvvPd57772A+2fNmsVFF10U8349zQDvvvvuoNmvAB07dvT7uWSWZjwEa3gI7osHvlnvb7/9NqNGjeKKK67gnnvuoXHjxlitVh5//HG/pp3xMGLECD788EOWLFlCt27d+OKLLxg/fnxAMKsihMr81yUaWIZTHr+3sorH4/JlmiaNGzcOaLjr4VsjPtzx4zmuWMcU7Pe0detWLrjgAk455RSee+45WrVqhd1u55tvvuH555+PqqlnuNdYMMHGYZomF154If/4xz+CbuMJcleUU089lY0bN/LVV18xe/ZsPv74Y1599VUefPBBHnnkEe/z8uc//zmgnrmHpzeER6jXybXXXstjjz3GkSNHSEtL44svvuD666/3u1h22223MWPGDO644w769OlDRkYGSimuu+66qBuvllU05+4dd9zBsGHD+Oyzz5gzZw7/+te/ePzxx/nhhx8444wzKmScQgghhEhsEkQXQgghRJU0a9YsGjduzCuvvBJw3yeffMKnn37Ka6+9FjIAFCqA5smiTUpK8maTxkubNm1Yv349Wmu/42/cuDFg3Xr16pGZmRmwfOfOnX6Zvh999BHt27fnk08+8dunJ2s+VqGeF4AhQ4bQqFEjZs2aRe/evcnLy+Mvf/lLxH126NCBn3/+GafT6dco0VebNm2YN28eOTk5ftnoGzZs8N4fq3CPJZhGjRpRq1atoL+PDRs2YLFYAjKyK3J/4YR6rB06dGDevHn07du3Qi4amKbJtm3b/ILHmzZtAvA2aIzHmL788ksKCwv54osv/DKNS5aCgdDPjScjOTMzk7p163qXx1I6p0OHDpw4caJU7xWec3rjxo1+r2mHw8H27dsD9rlv3z5yc3P9stFLPrcAtWvX5tprr+Xaa6/F4XBw1VVX8dhjjzFx4kQaNWpEWloahmGU+f3t2muv5ZFHHuHjjz+mSZMmZGdnc9111/mt89FHHzFy5EieffZZ77KCgoKA97ZYXqtt2rRh3bp1mKbpdwGvLO8V4P5d/v3vf+fvf/87mzdv5vTTT+fZZ5/l7bffLtX+hBBCCFG9SDkXIYQQQlQ5+fn5fPLJJ1x66aVcffXVAf9uvfVWcnJy+OKLL0Luo1atWgABwZzGjRszYMAApkyZwv79+wO2O3z4cKnHfckll7Bv3z4++ugj77K8vDymTp0asG6HDh1YtmwZDofDu+yrr74KKP/hybL0zar8+eefWbp0aanGWLt27aDBe3DXZL7++uv54IMPmDlzJt26dQvIWg1m+PDhHDlyhJdffjngPs+4L7nkEgzDCFjn+eef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iIiISAaT6EREREREREREREREMphEJyIiIiIiIiIiIiKSwSQ6EREREREREREREZEMJtGJiIiIiIiIiIiIiGQwiU5EREREREREREREJINJdCIiIiIiIiIiIiIiGfol3YDiJoQAAKSmppZwS4iIiIiIiIiIiIiotMjJGefkkOW89Un0R48eAQCcnJxKuCVEREREREREREREVNo8evQIFhYWsvMVorA0exmn0Wjw559/wszMDAqFoqSbUyJSU1Ph5OSEGzduwNzcvKSbQ1QgxiuVNYxZKksYr1TWMGaprGHMUlnCeKWyhjFLxUEIgUePHqFChQpQKuV7Pn/r70RXKpWoWLFiSTejVDA3N+dJhsoMxiuVNYxZKksYr1TWMGaprGHMUlnCeKWyhjFLRa2gO9BzcGBRIiIiIiIiIiIiIiIZTKITEREREREREREREclgEv0doFKpMH36dKhUqpJuClGhGK9U1jBmqSxhvFJZw5ilsoYxS2UJ45XKGsYslaS3fmBRIiIiIiIiIiIiIqJXxTvRiYiIiIiIiIiIiIhkMIlORERERERERERERCSDSXQiIiIiIiIiIiIiIhlMohMRERERERERERERyWASvQjNmTMH9evXh5mZGcqXL49OnTohISFBq8yzZ88wYsQIWFtbw9TUFF27dsVff/0lzY+JiUGvXr3g5OQEtVqNatWqYcmSJVp17NixA35+frC1tYW5uTkaN26MX375pdD2CSEwbdo0ODg4QK1Wo1WrVkhMTNQqc+bMGfj5+cHS0hLW1tb49NNPkZaWVmjdsbGx+OCDD2BkZAQnJyfMnz9fa358fDy6du0KV1dXKBQKLF68uNA6qXgxXuXjdceOHahXrx4sLS1hYmKC2rVrY8OGDYXWS8WLMSsfs+vWrYNCodD6MzIyKrReKj6MV/l49fX1zROvCoUC7dq1K7RuKj6MWfmYzczMxMyZM1GlShUYGRnB09MT+/fvL7ReKj7varw+e/YMAwcORM2aNaGvr49OnTrlKZOSkoLevXvD3d0dSqUSo0ePLrS9VPwYs/Ixe/jwYfj4+MDa2hpqtRrvvfceFi1aVGibqXgxZuVjNiIiIt9r2du3bxfabirjBBUZf39/ERoaKuLi4sTZs2fFhx9+KJydnUVaWppUZtiwYcLJyUmEh4eLU6dOiUaNGglvb29p/po1a8TIkSNFRESESEpKEhs2bBBqtVosW7ZMKjNq1Cgxb948ERUVJS5duiQmT54sDAwMxJkzZwps39y5c4WFhYXYtWuXiImJER999JGoVKmSePr0qRBCiFu3boly5cqJYcOGiYsXL4qoqCjh7e0tunbtWmC9Dx8+FHZ2dqJPnz4iLi5ObN68WajVavH9999LZaKiokRgYKDYvHmzsLe3F4sWLXqZTUvFgPEqH68HDx4UO3bsEOfPnxeXL18WixcvFnp6emL//v0vtY2paDFm5WM2NDRUmJubi5SUFOnv9u3bL7V9qWgxXuXj9Z9//tGK1bi4OKGnpydCQ0NfZhNTEWPMysfshAkTRIUKFcTevXtFUlKSWLFihTAyMiq0zVR83tV4TUtLE8OGDRP/+c9/hL+/v+jYsWOeMsnJyWLkyJEiLCxM1K5dW4waNUqHLUrFjTErH7NnzpwRmzZtEnFxcSI5OVls2LBBGBsba52H6c1jzMrH7MGDBwUAkZCQoHVNm5WVpcumpTKMSfRidOfOHQFAHDp0SAghxIMHD4SBgYH48ccfpTIXLlwQAMSxY8dk6xk+fLho3rx5geuqXr26mDFjhux8jUYj7O3txTfffCNNe/DggVCpVGLz5s1CCCG+//57Ub58ea0DPzY2VgAQiYmJsnWvWLFClCtXTqSnp0vTJk6cKDw8PPIt7+LiwiR6KcR4zT9ec3h5eYmvvvqqwDL0ZjFm/43Z0NBQYWFhUeB7oJLFeJU/xy5atEiYmZlpfSmjkseY/TdmHRwcxPLly7WW69Kli+jTp0+B74venHclXnMbMGBAvsmd3Jo1a8YkeinFmC1Y586dRd++fXUqS28GY/ZfOUn0+/fv61QPvT3YnUsxevjwIQDAysoKAHD69GlkZmaiVatWUpn33nsPzs7OOHbsWIH15NSRH41Gg0ePHhVYJjk5Gbdv39Zat4WFBRo2bCitOz09HYaGhlAq/w0LtVoNIPsRKznHjh1D06ZNYWhoKE3z9/dHQkIC7t+/L7sclS6M1/zjVQiB8PBwJCQkoGnTprL10pvHmNWO2bS0NLi4uMDJyQkdO3ZEfHy8bJ305jFe5a8J1qxZg549e8LExES2XnrzGLP/xmx6enqeLrLUanWB9dKb9a7EK709GLPyoqOjcfToUTRr1qxI66XXw5jNq3bt2nBwcICfnx+OHDlSJHVS6cYkejHRaDQYPXo0fHx88P777wMAbt++DUNDQ1haWmqVtbOzk+076ejRo9i6dSs+/fRT2XUtWLAAaWlp6N69u2yZnPrt7Oxk192iRQvcvn0b33zzDTIyMnD//n1MmjQJQHbfegXVnV+9uddLpRvjNW+8Pnz4EKampjA0NES7du2wbNky+Pn5ydZLbxZjVjtmPTw8sHbtWuzevRv//e9/odFo4O3tjZs3b8rWS28O41X+miAqKgpxcXEYMmSIbJ305jFmtWPW398fCxcuRGJiIjQaDQ4cOIAdO3YUWC+9Oe9SvNLbgTGbv4oVK0KlUqFevXoYMWIErw1KEcasNgcHB6xcuRLbt2/H9u3b4eTkBF9fX5w5c+a16qXSj0n0YjJixAjExcVhy5Ytr1xHXFwcOnbsiOnTp6N169b5ltm0aRNmzJiBH374AeXLlwcAbNy4EaamptJfZGSkTuurUaMGwsLCEBISAmNjY9jb26NSpUqws7OTfr2rUaOGVG/btm1f+b1R6cJ4zcvMzAxnz57FyZMnMWvWLIwdOxYREREvVQcVH8astsaNG6N///6oXbs2mjVrhh07dsDW1hbff/+9znVQ8WG8yluzZg1q1qyJBg0avNLyVDwYs9qWLFmCqlWr4r333oOhoSECAgLwySefaN3dRiWH8UplDWM2f5GRkTh16hRWrlyJxYsXY/PmzS9dBxUPxqw2Dw8PfPbZZ6hbty68vb2xdu1aeHt7c0Dcd0FJ9yfzNhoxYoSoWLGiuHLlitb08PDwfPtNcnZ2FgsXLtSaFh8fL8qXLy++/PJL2fXkDHz0008/aU1PTU0ViYmJ0t+TJ09EUlKSACCio6O1yjZt2lSMHDkyT923b98Wjx49EmlpaUKpVIoffvhBCCHE1atXpXpv3rwphBCiX79+efqJ+v333wUAce/evTx1s0/00oXxWnC85hg8eLBo3bq17Hx6cxizusVst27dRM+ePWXn05vBeJWP17S0NGFubi4WL14s+77ozWPMysfs06dPxc2bN4VGoxETJkwQ1atXl31/9Ga8a/GaG/tEL5sYsx1l25xbcHCwcHd316ksFS/GbEfZNucWGBgoGjVqpFNZKruYRC9CGo1GjBgxQlSoUEFcunQpz/ycgRe2bdsmTbt48WKegRfi4uJE+fLlxfjx42XXtWnTJmFkZCR27dqlc9vs7e3FggULpGkPHz7UGnghP2vWrBHGxsYFDpiQMyBTRkaGNG3y5MkcWLSUY7zqFq85PvnkE9GsWTOd2k/FgzGre8w+f/5ceHh4iDFjxujUfip6jNfC4zU0NFSoVCpx9+5dndpNxYsxq/s5NiMjQ1SpUkVMnjxZp/ZT0XtX4zU3JtHLFsbsyyUkZ8yYIVxcXHQqS8WDMftyMduqVSvRuXNnncpS2cUkehH6/PPPhYWFhYiIiBApKSnS35MnT6Qyw4YNE87OzuL3338Xp06dEo0bNxaNGzeW5p87d07Y2tqKvn37atVx584dqczGjRuFvr6++Pbbb7XKPHjwoMD2zZ07V1haWordu3eL2NhY0bFjR1GpUiXx9OlTqcyyZcvE6dOnRUJCgli+fLlQq9ViyZIlBdb74MEDYWdnJ/r16yfi4uLEli1bhLGxsfj++++lMunp6SI6OlpER0cLBwcHERgYKKKjo3UeFZmKHuNVPl5nz54tfv31V5GUlCTOnz8vFixYIPT19cWqVat03r5U9Biz8jE7Y8YM8csvv4ikpCRx+vRp0bNnT2FkZCTi4+N13r5UtBiv8vGao0mTJqJHjx6Fbkt6Mxiz8jF7/PhxsX37dpGUlCT++OMP0aJFC1GpUiWdv4RT0XtX41WI7Ds6o6OjRYcOHYSvr6/0HSu3nGl169YVvXv3FtHR0bwmKGGMWfmYXb58udizZ4+4dOmSuHTpkli9erUwMzMTU6ZM0WXTUjFhzMrH7KJFi8SuXbtEYmKiOHfunBg1apRQKpXit99+02XTUhnGJHoRApDvX2hoqFTm6dOnYvjw4aJcuXLC2NhYdO7cWaSkpEjzp0+fnm8duX+FbdasWb5lBgwYUGD7NBqNmDp1qrCzsxMqlUq0bNlSJCQkaJXp16+fsLKyEoaGhqJWrVpi/fr1Or33mJgY0aRJE6FSqYSjo6OYO3eu1vzk5OR828w7e0sO41U+XqdMmSLc3NyEkZGRKFeunGjcuLHYsmWLTnVT8WHMysfs6NGjhbOzszA0NBR2dnbiww8/FGfOnNGpbioejFf5eBXi3zuVfv31V53qpOLHmJWP2YiICFGtWjWhUqmEtbW16Nevn7h165ZOdVPxeJfj1cXFJd82FbZ9eFdvyWLMysfs0qVLRY0aNYSxsbEwNzcXXl5eYsWKFSIrK0un+ql4MGblY3bevHmiSpUqwsjISFhZWQlfX1/x+++/61Q3lW0KIYQAERERERERERERERHlwSHliYiIiIiIiIiIiIhkMIlORERERERERERERCSDSXQiIiIiIiIiIiIiIhlMohMRERERERERERERyWASnYiIiIiIiIiIiIhIBpPoREREREREREREREQymEQnIiIiIiIiIiIiIpLBJDoRERERERERERERkQwm0YmIiIjonTNw4EB06tSppJtR5mVkZMDNzQ1Hjx4FAFy9ehUKhQJnz54t2Ya9hJUrV6JDhw4l3QwiIiIiKsWYRCciIiKit4pCoSjwLygoCEuWLMG6detKtJ1vQyJ/5cqVqFSpEry9vQEATk5OSElJwfvvv//KdRaUiPf19cXo0aMRERFR6H6OiIgAAGzfvh2+vr6wsLCAqakpatWqhZkzZ+LevXsAgEGDBuHMmTOIjIx85TYTERER0duNSXQiIiIiequkpKRIf4sXL4a5ubnWtMDAQFhYWMDS0rKkm1qmCSGwfPlyDB48WJqmp6cHe3t76OvrF+u6vb29tfZp9+7d0aZNG61p3t7emDJlCnr06IH69etj3759iIuLQ0hICGJiYrBhwwYAgKGhIXr37o2lS5cWa5uJiIiIqOxiEp2IiIiI3ir29vbSn4WFBRQKhdY0U1PTPHeB+/r64osvvsDo0aNRrlw52NnZYdWqVXj8+DE++eQTmJmZwc3NDfv27dNaV1xcHNq2bQtTU1PY2dmhX79+uHv3rjR/27ZtqFmzJtRqNaytrdGqVSs8fvwYQUFBCAsLw+7du/PcOT1x4kS4u7vD2NgYlStXxtSpU5GZmSnVGRQUhNq1a2Pt2rVwdnaGqakphg8fjqysLMyfPx/29vYoX748Zs2apdVWhUKB7777Dm3btoVarUblypWxbds2aX5GRgYCAgLg4OAAIyMjuLi4YM6cObLb+fTp00hKSkK7du2kaS/eRZ5zx3h4eDjq1asHY2NjeHt7IyEhQef9mR9DQ0OtfapWq6FSqbSmnT17FrNnz0ZISAi++eYbeHt7w9XVFX5+fti+fTsGDBgg1dehQwfs2bMHT58+fa12EREREdHbiUl0IiIiIiIAYWFhsLGxQVRUFL744gt8/vnn+Pjjj+Ht7Y0zZ86gdevW6NevH548eQIAePDgAVq0aAEvLy+cOnUK+/fvx19//YXu3bsDyL4jvlevXhg0aBAuXLiAiIgIdOnSBUIIBAYG5rl7OqdLFDMzM6xbtw7nz5/HkiVLsGrVKixatEirrUlJSdi3bx/279+PzZs3Y82aNWjXrh1u3ryJQ4cOYd68efjqq69w4sQJreWmTp2Krl27IiYmBn369EHPnj1x4cIFAMDSpUuxZ88e/PDDD0hISMDGjRvh6uoqu70iIyPh7u4OMzOzQrftlClTEBISglOnTkFfXx+DBg3Seb+8qo0bN0o/MOQn95MI9erVw/Pnz/NsLyIiIiIiACje5yyJiIiIiMoIT09PfPXVVwCAyZMnY+7cubCxscHQoUMBANOmTcN3332H2NhYNGrUCMuXL4eXlxdmz54t1bF27Vo4OTnh0qVLSEtLw/Pnz9GlSxe4uLgAAGrWrCmVVavVSE9Ph729vVY7ctoAAK6urggMDMSWLVswYcIEabpGo8HatWthZmaG6tWro3nz5khISMDPP/8MpVIJDw8PzJs3DwcPHkTDhg2l5T7++GMMGTIEABAcHIwDBw5g2bJlWLFiBa5fv46qVauiSZMmUCgUUpvlXLt2DRUqVNBp286aNQvNmjUDAEyaNAnt2rXDs2fPYGRkpNPyryIxMRGVK1eGgYFBoWWNjY1hYWGBa9euFVt7iIiIiKjsYhKdiIiIiAhArVq1pP/19PRgbW2tlfS2s7MDANy5cwcAEBMTg4MHD8LU1DRPXUlJSWjdujVatmyJmjVrwt/fH61bt0a3bt1Qrly5AtuxdetWLF26FElJSVIi3tzcXKuMq6ur1h3gdnZ20NPTg1Kp1JqW09YcjRs3zvM6p+uVgQMHws/PDx4eHmjTpg3at2+P1q1by7bz6dOnOifBc29bBwcHANnb0dnZWaflX4UQ4qXKq9Vq6SkDIiIiIqLc2J0LERERERGQ545lhUKhNU2hUADIvgscANLS0tChQwecPXtW6y8xMRFNmzaFnp4eDhw4gH379qF69epYtmwZPDw8kJycLNuGY8eOoU+fPvjwww/x008/ITo6GlOmTEFGRsZLtTVnWk5bdVGnTh0kJycjODgYT58+Rffu3dGtWzfZ8jY2Nrh//75OdRe0HV+U84PBw4cP88x78OABLCwsdFqnu7s7rly5otWffEHu3bsHW1tbncoSERER0buFSXQiIiIioldQp04dxMfHw9XVFW5ublp/JiYmALITxj4+PpgxYwaio6NhaGiInTt3AsgeHDMrK0urzqNHj8LFxQVTpkxBvXr1ULVq1SLtYuT48eN5XlerVk16bW5ujh49emDVqlXYunUrtm/fjnv37uVbl5eXFy5evPjSd3wXxsrKCjY2Njh9+rTW9NTUVFy+fBnu7u461dO7d2+kpaVhxYoV+c5/8OCB9H9SUhKePXsGLy+vV243EREREb292J0LEREREdErGDFiBFatWoVevXphwoQJsLKywuXLl7FlyxasXr0ap06dQnh4OFq3bo3y5cvjxIkT+Pvvv6WktaurK3755RckJCTA2toaFhYWqFq1Kq5fv44tW7agfv362Lt3r5R0Lwo//vgj6tWrhyZNmmDjxo2IiorCmjVrAAALFy6Eg4MDvLy8oFQq8eOPP8Le3l5rAM7cmjdvjrS0NMTHx+P9998vsjYCwNixYzF79mzY2dmhUaNG+OeffxAcHAxbW1t06dJFpzoaNmyICRMmYNy4cbh16xY6d+6MChUq4PLly1i5ciWaNGmCUaNGAcgeJLVy5cqoUqVKkb4PIiIiIno7MIlORERERPQKKlSogCNHjmDixIlo3bo10tPT4eLigjZt2kCpVMLc3Bx//PEHFi9ejNTUVLi4uCAkJARt27YFAAwdOhQRERGoV68e0tLScPDgQXz00UcYM2YMAgICkJ6ejnbt2mHq1KkICgoqkjbPmDEDW7ZswfDhw+Hg4IDNmzejevXqAAAzMzPMnz8fiYmJ0NPTQ/369aWBSvNjbW2Nzp07Y+PGjZgzZ06RtC/HhAkTYGpqinnz5iEpKQlWVlbw8fHBwYMHoVarda5n3rx5qFu3Lr799lusXLkSGo0GVapUQbdu3TBgwACp3ObNm6UBZImIiIiIXqQQRf38JRERERERlToKhQI7d+5Ep06diqzO2NhY+Pn5ISkpKd8BVsuC+Ph4tGjRApcuXdK5v3UiIiIierewT3QiIiIiInoltWrVwrx58wocLLW0S0lJwfr165lAJyIiIiJZvBOdiIiIiOgdUBx3ohMRERERvQvYJzoRERER0TuA984QEREREb0adudCRERERERERERERCSDSXQiIiIiIiIiIiIiIhlMohMRERERERERERERyWASnYiIiIiIiIiIiIhIBpPoREREREREREREREQymEQnIiIiIiIiIiIiIpLBJDoRERERERERERERkQwm0YmIiIiIiIiIiIiI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fV/Q94UcO3fuFG5ubkKtVov27duL//znP1oDiz579kx07dpVWFpaCgDSvkABA4sKodv1QH7XEUREJUEhxAudWxEREVGRefz4MRwdHRESEpLnCQAiyp+vry9q166NxYsXl3RTiN4aAwcOxIMHD7Br166SbkqJmzVrFlauXPlGBvbkdi/7NmzYgDFjxuDPP/8ss91aERHR6yv9HQISERGVIdHR0bh48SIaNGiAhw8fYubMmQAgPfpNREREb9aKFStQv359WFtb48iRI/jmm2/KdBdF9GY8efIEKSkpmDt3Lj777DMm0ImI3nGlvxM2IiKiMmbBggXw9PREq1at8PjxY0RGRsLGxqakm0VERPROSkxMRMeOHVG9enUEBwdj3LhxCAoKKulmUSk3f/58vPfee7C3t8fkyZNLujlERFTC2J0LEREREREREREREZEM3olORERERERERERERCSDSXQiIiIiIiIiIiIiIhlMohMRERERERERERERyWASnYiIiIiIiIiIiIhIBpPoREREREREREREREQymEQnIiIiIiIiIiIiIpLBJDoREdFbICgoCLVr1y7pZpQpL26zgQMHolOnTiXWHiIiIiIiIiqdmEQnIiJ6CwQGBiI8PFynsu9iwl2hUGDXrl0FllmyZAnWrVv3RtpDREREREREZYd+STeAiIiICpaVlQWFQgGlUv63b1NTU5iamr7BVr19LCwsXmt5IQSysrKgr8/LKyIiIiIiorcJ70QnInqLPXr0CH369IGJiQkcHBywaNEi+Pr6YvTo0QCADRs2oF69ejAzM4O9vT169+6NO3fuSMtHRERAoVBg7969qFWrFoyMjNCoUSPExcWV0Dsq/Xx9fREQEICAgABYWFjAxsYGU6dOhRBCKpOeno7AwEA4OjrCxMQEDRs2REREhDR/3bp1sLS0xJ49e1C9enWoVCpcv34dERERaNCgAUxMTGBpaQkfHx9cu3YNQN67y+XKrlu3DjNmzEBMTAwUCgUUCoV09/WDBw8wZMgQ2NrawtzcHC1atEBMTIxUZ846NmzYAFdXV1hYWKBnz5549OiRVEaj0WD+/Plwc3ODSqWCs7MzZs2aJc2/ceMGunfvDktLS1hZWaFjx464evVqgdv00KFDaNCgAVQqFRwcHDBp0iQ8f/5cmu/q6orFixdrLVO7dm0EBQVJ8wGgc+fOUCgU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", "text/plain": [ "
" ] @@ -324,7 +374,7 @@ " N_iter=3, #Number of iterations\n", " instantaneous_tolerance='4min', #Max timestamp tolerance for 'at the same time'\n", " lapserate=None, #Specify the variation with altitude, if None no correction is applied\n", - " min_std=1.0, # Minimum standart deviation\n", + " min_sample_spread=1.0, # Minimum spread of the sample (in the same unit as the observations)\n", ")\n", "\n", "dataset.make_plot(obstype='temp', \n", @@ -386,122 +436,122 @@ "name": "stderr", "output_type": "stream", "text": [ - "WARNING::Outliers are flushed for wind_speed data of station vlinder01.!\n", - "WARNING::Outliers are flushed for humidity data of station vlinder01.!\n", "WARNING::Outliers are flushed for wind_direction data of station vlinder01.!\n", "WARNING::Outliers are flushed for temp data of station vlinder01.!\n", - "WARNING::Outliers are flushed for wind_speed data of station vlinder02.!\n", - "WARNING::Flushing current gaps for wind_speed data of station vlinder02.\n", - "WARNING::Outliers are flushed for humidity data of station vlinder02.!\n", - "WARNING::Flushing current gaps for humidity data of station vlinder02.\n", + "WARNING::Outliers are flushed for humidity data of station vlinder01.!\n", + "WARNING::Outliers are flushed for wind_speed data of station vlinder01.!\n", "WARNING::Outliers are flushed for wind_direction data of station vlinder02.!\n", "WARNING::Flushing current gaps for wind_direction data of station vlinder02.\n", "WARNING::Outliers are flushed for temp data of station vlinder02.!\n", "WARNING::Flushing current gaps for temp data of station vlinder02.\n", - "WARNING::Outliers are flushed for wind_speed data of station vlinder03.!\n", - "WARNING::Outliers are flushed for humidity data of station vlinder03.!\n", + "WARNING::Outliers are flushed for humidity data of station vlinder02.!\n", + "WARNING::Flushing current gaps for humidity data of station vlinder02.\n", + "WARNING::Outliers are flushed for wind_speed data of station vlinder02.!\n", + "WARNING::Flushing current gaps for wind_speed data of station vlinder02.\n", "WARNING::Outliers are flushed for wind_direction data of station vlinder03.!\n", "WARNING::Outliers are flushed for temp data of station vlinder03.!\n", - "WARNING::Outliers are flushed for wind_speed data of station vlinder04.!\n", - "WARNING::Outliers are flushed for humidity data of station vlinder04.!\n", + "WARNING::Outliers are flushed for humidity data of station vlinder03.!\n", + "WARNING::Outliers are flushed for wind_speed data of station vlinder03.!\n", "WARNING::Outliers are flushed for wind_direction data of station vlinder04.!\n", "WARNING::Outliers are flushed for temp data of station vlinder04.!\n", - "WARNING::Outliers are flushed for wind_speed data of station vlinder05.!\n", - "WARNING::Outliers are flushed for humidity data of station vlinder05.!\n", + "WARNING::Outliers are flushed for humidity data of station vlinder04.!\n", + "WARNING::Outliers are flushed for wind_speed data of station vlinder04.!\n", "WARNING::Outliers are flushed for wind_direction data of station vlinder05.!\n", "WARNING::Outliers are flushed for temp data of station vlinder05.!\n", - "WARNING::Outliers are flushed for wind_speed data of station vlinder06.!\n", - "WARNING::Outliers are flushed for humidity data of station vlinder06.!\n", + "WARNING::Outliers are flushed for humidity data of station vlinder05.!\n", + "WARNING::Outliers are flushed for wind_speed data of station vlinder05.!\n", "WARNING::Outliers are flushed for wind_direction data of station vlinder06.!\n", "WARNING::Outliers are flushed for temp data of station vlinder06.!\n", - "WARNING::Outliers are flushed for wind_speed data of station vlinder07.!\n", - "WARNING::Outliers are flushed for humidity data of station vlinder07.!\n", + "WARNING::Outliers are flushed for humidity data of station vlinder06.!\n", + "WARNING::Outliers are flushed for wind_speed data of station vlinder06.!\n", "WARNING::Outliers are flushed for wind_direction data of station vlinder07.!\n", "WARNING::Outliers are flushed for temp data of station vlinder07.!\n", - "WARNING::Outliers are flushed for wind_speed data of station vlinder08.!\n", - "WARNING::Outliers are flushed for humidity data of station vlinder08.!\n", + "WARNING::Outliers are flushed for humidity data of station vlinder07.!\n", + "WARNING::Outliers are flushed for wind_speed data of station vlinder07.!\n", "WARNING::Outliers are flushed for wind_direction data of station vlinder08.!\n", "WARNING::Outliers are flushed for temp data of station vlinder08.!\n", - "WARNING::Outliers are flushed for wind_speed data of station vlinder09.!\n", - "WARNING::Outliers are flushed for humidity data of station vlinder09.!\n", + "WARNING::Outliers are flushed for humidity data of station vlinder08.!\n", + "WARNING::Outliers are flushed for wind_speed data of station vlinder08.!\n", "WARNING::Outliers are flushed for wind_direction data of station vlinder09.!\n", "WARNING::Outliers are flushed for temp data of station vlinder09.!\n", - "WARNING::Outliers are flushed for wind_speed data of station vlinder10.!\n", - "WARNING::Outliers are flushed for humidity data of station vlinder10.!\n", + "WARNING::Outliers are flushed for humidity data of station vlinder09.!\n", + "WARNING::Outliers are flushed for wind_speed data of station vlinder09.!\n", "WARNING::Outliers are flushed for wind_direction data of station vlinder10.!\n", "WARNING::Outliers are flushed for temp data of station vlinder10.!\n", - "WARNING::Outliers are flushed for wind_speed data of station vlinder11.!\n", - "WARNING::Outliers are flushed for humidity data of station vlinder11.!\n", + "WARNING::Outliers are flushed for humidity data of station vlinder10.!\n", + "WARNING::Outliers are flushed for wind_speed data of station vlinder10.!\n", "WARNING::Outliers are flushed for wind_direction data of station vlinder11.!\n", "WARNING::Outliers are flushed for temp data of station vlinder11.!\n", - "WARNING::Outliers are flushed for wind_speed data of station vlinder12.!\n", - "WARNING::Outliers are flushed for humidity data of station vlinder12.!\n", + "WARNING::Outliers are flushed for humidity data of station vlinder11.!\n", + "WARNING::Outliers are flushed for wind_speed data of station vlinder11.!\n", "WARNING::Outliers are flushed for wind_direction data of station vlinder12.!\n", "WARNING::Outliers are flushed for temp data of station vlinder12.!\n", - "WARNING::Outliers are flushed for wind_speed data of station vlinder13.!\n", - "WARNING::Outliers are flushed for humidity data of station vlinder13.!\n", + "WARNING::Outliers are flushed for humidity data of station vlinder12.!\n", + "WARNING::Outliers are flushed for wind_speed data of station vlinder12.!\n", "WARNING::Outliers are flushed for wind_direction data of station vlinder13.!\n", "WARNING::Outliers are flushed for temp data of station vlinder13.!\n", - "WARNING::Outliers are flushed for wind_speed data of station vlinder14.!\n", - "WARNING::Outliers are flushed for humidity data of station vlinder14.!\n", + "WARNING::Outliers are flushed for humidity data of station vlinder13.!\n", + "WARNING::Outliers are flushed for wind_speed data of station vlinder13.!\n", "WARNING::Outliers are flushed for wind_direction data of station vlinder14.!\n", "WARNING::Outliers are flushed for temp data of station vlinder14.!\n", - "WARNING::Outliers are flushed for wind_speed data of station vlinder15.!\n", - "WARNING::Outliers are flushed for humidity data of station vlinder15.!\n", + "WARNING::Outliers are flushed for humidity data of station vlinder14.!\n", + "WARNING::Outliers are flushed for wind_speed data of station vlinder14.!\n", "WARNING::Outliers are flushed for wind_direction data of station vlinder15.!\n", "WARNING::Outliers are flushed for temp data of station vlinder15.!\n", - "WARNING::Outliers are flushed for wind_speed data of station vlinder16.!\n", - "WARNING::Outliers are flushed for humidity data of station vlinder16.!\n", + "WARNING::Outliers are flushed for humidity data of station vlinder15.!\n", + "WARNING::Outliers are flushed for wind_speed data of station vlinder15.!\n", "WARNING::Outliers are flushed for wind_direction data of station vlinder16.!\n", "WARNING::Outliers are flushed for temp data of station vlinder16.!\n", - "WARNING::Outliers are flushed for wind_speed data of station vlinder17.!\n", - "WARNING::Outliers are flushed for humidity data of station vlinder17.!\n", + "WARNING::Outliers are flushed for humidity data of station vlinder16.!\n", + "WARNING::Outliers are flushed for wind_speed data of station vlinder16.!\n", "WARNING::Outliers are flushed for wind_direction data of station vlinder17.!\n", "WARNING::Outliers are flushed for temp data of station vlinder17.!\n", - "WARNING::Outliers are flushed for wind_speed data of station vlinder18.!\n", - "WARNING::Outliers are flushed for humidity data of station vlinder18.!\n", + "WARNING::Outliers are flushed for humidity data of station vlinder17.!\n", + "WARNING::Outliers are flushed for wind_speed data of station vlinder17.!\n", "WARNING::Outliers are flushed for wind_direction data of station vlinder18.!\n", "WARNING::Outliers are flushed for temp data of station vlinder18.!\n", - "WARNING::Outliers are flushed for wind_speed data of station vlinder19.!\n", - "WARNING::Outliers are flushed for humidity data of station vlinder19.!\n", + "WARNING::Outliers are flushed for humidity data of station vlinder18.!\n", + "WARNING::Outliers are flushed for wind_speed data of station vlinder18.!\n", "WARNING::Outliers are flushed for wind_direction data of station vlinder19.!\n", "WARNING::Outliers are flushed for temp data of station vlinder19.!\n", - "WARNING::Outliers are flushed for wind_speed data of station vlinder20.!\n", - "WARNING::Outliers are flushed for humidity data of station vlinder20.!\n", + "WARNING::Outliers are flushed for humidity data of station vlinder19.!\n", + "WARNING::Outliers are flushed for wind_speed data of station vlinder19.!\n", "WARNING::Outliers are flushed for wind_direction data of station vlinder20.!\n", "WARNING::Outliers are flushed for temp data of station vlinder20.!\n", - "WARNING::Outliers are flushed for wind_speed data of station vlinder21.!\n", - "WARNING::Outliers are flushed for humidity data of station vlinder21.!\n", + "WARNING::Outliers are flushed for humidity data of station vlinder20.!\n", + "WARNING::Outliers are flushed for wind_speed data of station vlinder20.!\n", "WARNING::Outliers are flushed for wind_direction data of station vlinder21.!\n", "WARNING::Outliers are flushed for temp data of station vlinder21.!\n", - "WARNING::Outliers are flushed for wind_speed data of station vlinder22.!\n", - "WARNING::Outliers are flushed for humidity data of station vlinder22.!\n", + "WARNING::Outliers are flushed for humidity data of station vlinder21.!\n", + "WARNING::Outliers are flushed for wind_speed data of station vlinder21.!\n", "WARNING::Outliers are flushed for wind_direction data of station vlinder22.!\n", "WARNING::Outliers are flushed for temp data of station vlinder22.!\n", - "WARNING::Outliers are flushed for wind_speed data of station vlinder23.!\n", - "WARNING::Outliers are flushed for humidity data of station vlinder23.!\n", + "WARNING::Outliers are flushed for humidity data of station vlinder22.!\n", + "WARNING::Outliers are flushed for wind_speed data of station vlinder22.!\n", "WARNING::Outliers are flushed for wind_direction data of station vlinder23.!\n", "WARNING::Outliers are flushed for temp data of station vlinder23.!\n", - "WARNING::Outliers are flushed for wind_speed data of station vlinder24.!\n", - "WARNING::Outliers are flushed for humidity data of station vlinder24.!\n", + "WARNING::Outliers are flushed for humidity data of station vlinder23.!\n", + "WARNING::Outliers are flushed for wind_speed data of station vlinder23.!\n", "WARNING::Outliers are flushed for wind_direction data of station vlinder24.!\n", "WARNING::Outliers are flushed for temp data of station vlinder24.!\n", - "WARNING::Outliers are flushed for wind_speed data of station vlinder25.!\n", - "WARNING::Outliers are flushed for humidity data of station vlinder25.!\n", + "WARNING::Outliers are flushed for humidity data of station vlinder24.!\n", + "WARNING::Outliers are flushed for wind_speed data of station vlinder24.!\n", "WARNING::Outliers are flushed for wind_direction data of station vlinder25.!\n", "WARNING::Outliers are flushed for temp data of station vlinder25.!\n", - "WARNING::Outliers are flushed for wind_speed data of station vlinder26.!\n", - "WARNING::Outliers are flushed for humidity data of station vlinder26.!\n", + "WARNING::Outliers are flushed for humidity data of station vlinder25.!\n", + "WARNING::Outliers are flushed for wind_speed data of station vlinder25.!\n", "WARNING::Outliers are flushed for wind_direction data of station vlinder26.!\n", "WARNING::Outliers are flushed for temp data of station vlinder26.!\n", - "WARNING::Outliers are flushed for wind_speed data of station vlinder27.!\n", - "WARNING::Outliers are flushed for humidity data of station vlinder27.!\n", + "WARNING::Outliers are flushed for humidity data of station vlinder26.!\n", + "WARNING::Outliers are flushed for wind_speed data of station vlinder26.!\n", "WARNING::Outliers are flushed for wind_direction data of station vlinder27.!\n", "WARNING::Outliers are flushed for temp data of station vlinder27.!\n", - "WARNING::Outliers are flushed for wind_speed data of station vlinder28.!\n", - "WARNING::Outliers are flushed for humidity data of station vlinder28.!\n", + "WARNING::Outliers are flushed for humidity data of station vlinder27.!\n", + "WARNING::Outliers are flushed for wind_speed data of station vlinder27.!\n", "WARNING::Outliers are flushed for wind_direction data of station vlinder28.!\n", - "WARNING::Outliers are flushed for temp data of station vlinder28.!\n" + "WARNING::Outliers are flushed for temp data of station vlinder28.!\n", + "WARNING::Outliers are flushed for humidity data of station vlinder28.!\n", + "WARNING::Outliers are flushed for wind_speed data of station vlinder28.!\n" ] }, { @@ -516,7 +566,7 @@ }, { "data": { - "image/png": "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XnkF+/btw08//YSwsDBh2ePHj2PRokVYsmQJrr/+ejz33HNYsGABXn/9dfz1r3/FnXfeCQB46qmnsHDhQuTl5UGvd+sZnE4n5s6di0mTJuGZZ57Bhg0bsHz5cjgcDjz22GMdOqa8vDxce+21WLJkCW677TYMGzYMAPDaa69h1KhRuOSSS2A0GrFmzRrceeedcLlcWLp0KQDgpZdewt13343o6Gg89NBDAIC0tLQOnUep42htbcWMGTNQWlqKJUuWYMCAAdixYwcefPBBlJeXK/pAb9++HfX19fi///s/WeX4jTfeiHfffRdr1qzBxIkTsX37dtTV1WHZsmUwGAwd+h4Mw+CSSy7Bli1bcOutt2Ls2LH49ttvcf/996O0tBQvvviiX9u7/PLLkZ+fj08++QQvvvgikpOTAQApKSmat7F582ZcdNFFGDduHJYvXw69Xi8Mkvz4448+gwJXXXUVhgwZgn/84x9C4P+KK67A4cOHcffddyMnJwdVVVXYuHEjiouLPYK23mzcuBEnT57EzTffjPT0dBw+fBhvvvkmDh8+jJ9//tlnoEJq308++ST+/ve/Y+HChfj973+P6upq/Pvf/8b06dOxb98+RYubsrIyTJw4EQ0NDbj99tsxfPhwlJaW4vPPP0draytMJhMqKysxZcoUtLa24p577kFSUhLee+89XHLJJfj888/xu9/9zmOb//znP6HX63HffffBYrHgmWeewXXXXYddu3YBAK6++mr85z//wdq1a3HVVVcJ67W2tmLNmjVYvHixcH198MEHuOmmmzBnzhw8/fTTaG1txWuvvYZzzz0X+/bt8zi3DocDc+bMwbnnnovnnnsOUVFRSE9Ph8ViQUlJiXBtRUdHA2AH0y655BJs374dt99+O0aMGIGDBw/ixRdfRH5+Pr766ith27///e/x4YcfYtGiRZgyZQo2b96M+fPny55XnhEjRuCxxx7Dww8/jNtvvx3Tpk0DAMHuiH8OTZgwAU899RQqKyvx8ssv46efflL97UpLS3HeeedBp9PhwQcfhNlsxn//+1+Eh4f7LLtixQpER0fjT3/6E6Kjo7F582Y8/PDDaGxs9MhCAYD6+nrMmzcPCxcuxLXXXouVK1fiD3/4A0wmE2655RYAwFtvvYV77rkHV155Jf7v//4P7e3tOHDgAHbt2oVFixapnheCIAiCIPooDEEQBEEQBMEsXbqUETeNfvzxRwYA89FHH3kst2HDBp/p2dnZDABmx44dwrRvv/2WAcBERkYyp06dEqa/8cYbDABmy5YtwrSbbrqJAcDcfffdwjSXy8XMnz+fMZlMTHV1dYePacOGDT7ftbW11WfanDlzmIEDB3pMGzVqFDNjxgyfZZcvX85INSPfffddBgBTWFioehyPP/44Yzabmfz8fI/pf/nLXxiDwcAUFxf7bJ/npZdeYgAwq1atkl2mrq6OAcBcfvnlDMMwzMsvv6y6jhpfffUVA4B54oknPKZfeeWVjE6nY44fP84wDMMUFhYyAJh3333XZxsAmOXLlwufn332WZ9zxpOdnc3cdNNNwuctW7Z4XDsul4sZMmQIM2fOHMblcgnLtba2Mrm5ucyFF14oTON/s2uvvdZjH/X19QwA5tlnn9V4FtxIXUeffPIJA4D54YcfVPddVFTEGAwG5sknn/SYfvDgQcZoNPpM9+bGG29k9Ho9s2fPHp95/PlYtmwZA4D58ccfhXlNTU1Mbm4uk5OTwzidToZh3Od2xIgRjNVqFZblr5uDBw8K2+3Xrx9zxRVXeOxv5cqVHt+7qamJiY+PZ2677TaP5SoqKpi4uDiP6fz9/5e//MXne8yfP5/Jzs72mf7BBx8wer3e43sxDMO8/vrrDADmp59+YhiGYfbv388AYO68806P5RYtWuRzLUqxZ88eyWvZZrMxqampzOjRo5m2tjZh+jfffMMAYB5++GHF7d59992MTqdj9u3bJ0yrra1lEhMTfe4HqetsyZIlTFRUFNPe3i5MmzFjBgOAef7554VpVquVGTt2LJOamsrYbDaGYRjm0ksvZUaNGqV4fARBEARBEN6QnQtBEARBEIQEn332GeLi4nDhhReipqZG+Ddu3DhER0djy5YtHsuPHDkSkydPFj6fc845AIDzzz8fAwYM8Jl+8uRJn33eddddwt86nQ533XUXbDYbNm3a1KFjys3NxZw5c3z2I/Yjt1gsqKmpwYwZM3Dy5ElYLBbN50grUsfx2WefYdq0aUhISPD4LhdccAGcTid++OEH2e01NTUBAGJiYmSX4efxyzY2Nqquo8a6detgMBhwzz33eEy/9957wTAM1q9f3+Ftd4T9+/ejoKAAixYtQm1trXAOW1paMGvWLPzwww8+1jh33HGHx+fIyEiYTCZs3brVxxJIDfF11N7ejpqaGkyaNAkA8Ouvv/os773vL7/8Ei6XCwsXLvS4BtLT0zFkyBCf61mMy+XCV199hQULFmD8+PE+83kV/Lp16zBx4kQP+5jo6GjcfvvtKCoqwpEjRzzWu/nmmz0Kt/Lqa/5+1el0uOqqq7Bu3To0NzcLy3366afo16+fsJ+NGzeioaEB1157rcd3MxgMOOeccyS/2x/+8AfZ7+vNZ599hhEjRmD48OEe2z///PMBQNj+unXrAMDnmu1sodK9e/eiqqoKd955p4dP//z58zF8+HAfuxxvNmzYgMmTJ3sUK01MTMR1113ns6z4OmtqakJNTQ2mTZuG1tZWHDt2zGNZo9GIJUuWCJ9NJhOWLFmCqqoq/PLLLwCA+Ph4lJSUYM+ePX59Z4IgCIIg+jZk50IQBEEQBCFBQUEBLBYLUlNTJedXVVV5fBYHygEgLi4OAJCVlSU53TtgqdfrMXDgQI9pQ4cOBQDBH9jfY8rNzZVc7qeffsLy5cuxc+dOH29ni8UiHGOgkDqOgoICHDhwQNa6xPu7iPEOkEvBz+PPVWxsrOo6apw6dQqZmZk+gfgRI0YI87uTgoICAMBNN90ku4zFYkFCQoLw2fu3CA8Px9NPP417770XaWlpmDRpEi6++GLceOONSE9PV9x/XV0dHn30Ufzvf//z+b2kBmO8911QUACGYTBkyBDJ7Yutibyprq5GY2MjRo8erXiMp06dEgauxIh/M/E2vO9j/tyJ79err74aL730ElavXo1FixahubkZ69atw5IlS4TgPf/b8EFtb/jrkcdoNKJ///6K30VMQUEBjh49qnr/nDp1Cnq9HoMGDfKYz1s7dRT+WpfazvDhw7F9+3bV9cWDjjyDBw/2mXb48GH87W9/w+bNm4XBMB7v6ywzM9OnIKv4OTpp0iT8+c9/xqZNmzBx4kQMHjwYs2fPxqJFizB16lTFYyYIgiAIom9DQXSCIAiCIAgJXC4XUlNT8dFHH0nO9w5eyflsy01nvAqGdsUxiRWcPCdOnMCsWbMwfPhwvPDCC8jKyoLJZMK6devw4osvqhb1BCBZlBOAT6E/peNwuVy48MIL8cADD0iuwwe+pBg5ciQAtjDhZZddJrnMgQMHAEAYmBg+fDgA4ODBg7LrBAp/z09H4X+rZ5991kPRK4b30OaR+i2WLVuGBQsW4KuvvsK3336Lv//973jqqaewefNmnHXWWbL7X7hwIXbs2IH7778fY8eORXR0NFwuF+bOnSt5HXnv2+VyQafTYf369ZL3ifexdwda7tdJkyYhJycHK1euxKJFi7BmzRq0tbXh6quvFpbhv/8HH3wgORjh7eUfHh7uUSNBDZfLhTFjxuCFF16QnO89eBeqNDQ0YMaMGYiNjcVjjz2GQYMGISIiAr/++iv+/Oc/a3peeTNixAjk5eXhm2++wYYNG/DFF1/g1VdfxcMPP4xHH320C74FQRAEQRC9AQqiEwRBEARBSDBo0CBs2rQJU6dOlQw8BhqXy4WTJ096BI/z8/MBQChAGIhjWrNmDaxWK1avXu2hupWyl5ALBvPq3IaGBo/igf4osQcNGoTm5mZccMEFmtfhmTp1KuLj4/Hxxx/joYcekgx8vv/++wAgFH8899xzkZCQgE8++QR//etfO1RcNDs7G5s2bUJTU5OHGp23lMjOzgbgeX7ESJ0fuXOsBV5dHBsb26Hz6L2te++9F/feey8KCgowduxYPP/88/jwww8ll6+vr8f333+PRx99FA8//LAwnVdga90nwzDIzc1VHDSRIiUlBbGxsTh06JDictnZ2cjLy/OZ7v2b+cvChQvx8ssvo7GxEZ9++ilycnIEKxvA/dukpqZ26reRuz4GDRqE3377DbNmzVK8hrKzs+FyuXDixAkP1bjUOfFn//x5y8vL81Hb5+XlqZ7X7OxsHD9+3Ge697StW7eitrYWX375JaZPny5MLywslNxuWVkZWlpaPNTo3s9RADCbzbj66qtx9dVXw2az4fLLL8eTTz6JBx980MOehiAIgiAIgoc80QmCIAiCICRYuHAhnE4nHn/8cZ95DofDJ0AaCF555RXhb4Zh8MorryAsLAyzZs0K2DHxwWOxstZiseDdd9/1WdZsNktukw8Qin3LW1pa8N5776nun2fhwoXYuXMnvv32W595DQ0NcDgcsutGRUXhgQceQF5eHh566CGf+WvXrsWKFSuwYMECjBkzRljnz3/+M44ePYo///nPkpkAH374IXbv3i2733nz5sHpdHr8TgDw4osvQqfT4aKLLgLABrWTk5N9fN1fffVVn23ywb6OXE/jxo3DoEGD8Nxzz3n4c/NUV1erbqO1tRXt7e0e0wYNGoSYmBhYrVbZ9aSuIwB46aWXNBw5y+WXXw6DwYBHH33UZzsMw6C2tlZ2Xb1ej8suuwxr1qzB3r17febz25s3bx52796NnTt3CvNaWlrw5ptvIicnR8hq8Jerr74aVqsV7733HjZs2ICFCxd6zJ8zZw5iY2Pxj3/8A3a73Wd9Lb8NwF4fUtY4CxcuRGlpKd566y2feW1tbWhpaQEA4Zr817/+5bGM1t9J7vocP348UlNT8frrr3tcJ+vXr8fRo0cxf/58xe3OmTMHO3fuxP79+4VpdXV1Plk2UteZzWaTvJcA9jn4xhtveCz7xhtvICUlBePGjQMAn+vKZDJh5MiRYBhG+K14v/WamhrF70EQBEEQRN+BlOgEQRAEQRASzJgxA0uWLMFTTz2F/fv3Y/bs2QgLC0NBQQE+++wzvPzyy7jyyisDtr+IiAhs2LABN910E8455xysX78ea9euxV//+lfBpiUQxzR79myYTCYsWLAAS5YsQXNzM9566y2kpqaivLzcY9lx48bhtddewxNPPIHBgwcjNTUV559/PmbPno0BAwbg1ltvxf333w+DwYB33nkHKSkpKC4u1vR977//fqxevRoXX3wxFi9ejHHjxqGlpQUHDx7E559/jqKiIiQnJ8uu/8ADD2D//v14+umnsXPnTlxxxRWIjIzE9u3b8eGHH2LUqFFYsWKFzz4PHz6M559/Hlu2bMGVV16J9PR0VFRU4KuvvsLu3buxY8cO2X0uWLAA5513Hh566CEUFRXhzDPPxHfffYevv/4ay5Yt8/Cd/v3vf49//vOf+P3vf4/x48fjhx9+EBSx3ucYAB566CFcc801CAsLw4IFC3x8naXQ6/X473//i4suugijRo3CzTffjH79+qG0tBRbtmxBbGws1qxZo7iN/Px8zJo1CwsXLsTIkSNhNBqxatUqVFZW4pprrpFdLzY2FtOnT8czzzwDu92Ofv364bvvvpNVCEsxaNAgPPHEE3jwwQdRVFSEyy67DDExMSgsLMSqVatw++2347777pNd/x//+Ae+++47zJgxA7fffjtGjBiB8vJyfPbZZ9i+fTvi4+Pxl7/8BZ988gkuuugi3HPPPUhMTMR7772HwsJCfPHFF35ZqIg5++yzMXjwYDz00EOwWq0eVi78+Xnttddwww034Oyzz8Y111wj3B9r167F1KlTfQZjpBg3bhw+/fRT/OlPf8KECRMQHR2NBQsW4IYbbsDKlStxxx13YMuWLZg6dSqcTieOHTuGlStX4ttvv8X48eMxduxYXHvttXj11VdhsVgwZcoUfP/995IqcCkGDRqE+Ph4vP7664iJiYHZbMY555yD3NxcPP3007j55psxY8YMXHvttaisrMTLL7+MnJwc/PGPf1Tc7gMPPIAPP/wQF154Ie6++26YzWb897//xYABA1BXVyco4KdMmYKEhATcdNNNuOeee6DT6fDBBx/I2mFlZmbi6aefRlFREYYOHYpPP/0U+/fvx5tvvil47M+ePRvp6emYOnUq0tLScPToUbzyyiuYP3++kGGye/dunHfeeVi+fDkeeeQRTeeKIAiCIIheDkMQBEEQBEEwS5cuZaSaRm+++SYzbtw4JjIykomJiWHGjBnDPPDAA0xZWZmwTHZ2NjN//nyfdQEwS5cu9ZhWWFjIAGCeffZZYdpNN93EmM1m5sSJE8zs2bOZqKgoJi0tjVm+fDnjdDoDekwMwzCrV69mzjjjDCYiIoLJyclhnn76aeadd95hADCFhYXCchUVFcz8+fOZmJgYBgAzY8YMYd4vv/zCnHPOOYzJZGIGDBjAvPDCC8y7777rsw2l42hqamIefPBBZvDgwYzJZGKSk5OZKVOmMM899xxjs9kk1xHjcrmYFStWMFOnThWOEQBzwQUXMFarVXa9zz//nJk9ezaTmJjIGI1GJiMjg7n66quZrVu3qu6zqamJ+eMf/8hkZmYyYWFhzJAhQ5hnn32WcblcHsu1trYyt956KxMXF8fExMQwCxcuZKqqqhgAzPLlyz2Wffzxx5l+/foxer3e4/xlZ2czN910k7Dcli1bGADMli1bPNbft28fc/nllzNJSUlMeHg4k52dzSxcuJD5/vvvhWWWL1/OAGCqq6s91q2pqWGWLl3KDB8+nDGbzUxcXBxzzjnnMCtXrlQ9FyUlJczvfvc7Jj4+nomLi2OuuuoqpqyszOc7yu2b54svvmDOPfdcxmw2M2azmRk+fDizdOlSJi8vT/UYTp06xdx4441MSkoKEx4ezgwcOJBZunSpx+9/4sQJ5sorr2Ti4+OZiIgIZuLEicw333zjsR3+3H722Wce0/n79d133/XZ90MPPcQAYAYPHix7fFu2bGHmzJnDxMXFMREREcygQYOYxYsXM3v37hWW4e9/KZqbm5lFixYx8fHxDAAmOztbmGez2Zinn36aGTVqFBMeHs4kJCQw48aNYx599FHGYrEIy7W1tTH33HMPk5SUxJjNZmbBggXM6dOnJa9FKb7++mtm5MiRjNFo9DkXn376KXPWWWcx4eHhTGJiInPdddcxJSUlqttkGPa6nTZtGhMeHs7079+feeqpp5h//etfDACmoqJCWO6nn35iJk2axERGRjKZmZnMAw88wHz77bc+98KMGTOYUaNGMXv37mUmT57MREREMNnZ2cwrr7zisd833niDmT59unC/DBo0iLn//vs9zhl/PWg5PwRBEARB9A10DNOBqlYEQRAEQRBEwFi8eDE+//xzSUsOQjt2ux0LFizA999/jzVr1mDu3Lk9fUgEQfjBsmXL8MYbb6C5udnvugUzZ85ETU2Nqk8+QRAEQRBERyBPdIIgCIIgCKJXEBYWhi+++AJjx47FVVddhV9//bWnD4kgCBna2to8PtfW1uKDDz7Aueee26HCvwRBEARBEF0JeaITBEEQBEEQvQaz2Yw9e/b09GEQBKHC5MmTMXPmTIwYMQKVlZV4++230djYiL///e89fWgEQRAEQRA+UBCdIAiCIAiCIAiC6FbmzZuHzz//HG+++SZ0Oh3OPvtsvP3225g+fXpPHxpBEARBEIQP5IlOEARBEARBEARBEARBEARBEDKQJzpBEARBEARBEARBEARBEARByEBBdIIgCIIgCIIgCIIgCIIgCIKQgTzRJXC5XCgrK0NMTAx0Ol1PHw5BEARBEARBEARBEARBEAQRYBiGQVNTEzIzM6HXy+vNKYguQVlZGbKysnr6MAiCIAiCIAiCIAiCIAiCIIgu5vTp0+jfv7/sfAqiSxATEwOAPXmxsbE9fDQEQRAEQRAEQRAEQRAEQRBEoGlsbERWVpYQD5aDgugS8BYusbGxFEQnCIIgCIIgCIIgCIIgCILoxahZelNhUYIgCIIgCIIgCIIgCIIgCIKQgYLoBEEQBEEQBEEQBEEQBEEQBCEDBdEJgiAIgiAIgiAIgiAIgiAIQgYKohMEQRAEQRAEQRAEQRAEQRCEDBREJwiCIAiCIAiCIAiCIAiCIAgZKIhOEARBEARBEARBEARBEARBEDJQEJ0gCIIgCIIgCIIgCIIgCIIgZKAgOkEQBEEQBEEQBEEQBEEQBEHIQEF0giAIgiAIgiAIgiAIgiAIgpCBgugEQRAEQRAEQRAEQRAEQRAEIQMF0QmCIAiCIAiCIAiCIAiCIAhCBgqiEyEPwzA9fQghjdbzxzCMx7J03juP0jmkc+2L0jnRco4CtUxfQO08uFyuDq9LqJ+jzs4nCIIgCCK46UhbliAIguhZjD19AATRUZ53vIP/OD5EJMJRgVoADBgwMECPRCQgW5eJKw1zsNO1H8eZUwiDEcVMOUpQgTAYkYIkrDO9iecc7+AEU4x/h/0do/VDe/prdSvFTDkutC3GYAxAO2ODQadDG2w4zhThDAxDij4J7bDiGeMD+D/7E9jI/IQwhGEshqNNZ4WFacI9xhtxt/GGnv4qQcP7jq/wZ8eziIEZK00vY6x+hDBvheNLPOl4DSUohw56RCECRhhwjf5iXGW4CJfZ/wAzonCFfjbWuLbgPuMt+JvjRTSiBSaEgQGDcbrR+G/Ykxisz+7Bb9l9NDEtuNC2GFGIxHGmCDroMEw3EC64cJgpwFDkIkWfiG9cW3C74Wpcp78ED9lfQBFKEasz43rDpfi9YSEmWC/HKZQhHCZM1Y/D6rDXcKP9Aex07cObYU/gJ+dePO16CwyAmbqJSNOl4D3T0z399QPGHbbl2OjajkrUgAGQjHjM0k/BO6anJJdfaP8/HHEdR5IuHn83LsWFhqkAgPPbb8QO/AoA2Gv60uOZ+ZPrV/zT8QZydf1xhX4OnnG+BTvjQB1jgVVnw1z9NDwb9ucu/67Bhp2xY6bteuxnjiIcJrTDhnCEYUXY07jUcAHyXCeFZ0Y9Y8FR5iQAoA4WtMOKLKTjYsN5iEA41jt/gF3nwDm6M/G26R89/M0IgiAIgugo9zqeQj5ThN8bFuJ5+9vYg4OIgRmvhT2KKw1zheVOM+W4y/4YrLBhg+ntHjzi4OVH11685ViJZ8MeQJouuacPhyCIXgwF0QkfrC/tg/WtQ2Bq2wCrE3Bxo+JOBrC7AO9Bch0Ag479O0wP6HXudfQ66FKjoIs0grG7wJQ0CdMRbmD/DwAtdvd0F7cfr23p+scg7LaRcOicaP7nz/jtya0oW1Ql+R2a0IpTTCl+cOyRnG+HA2WoxN6rX8GeB/cib2Q9iq75EKNXPiYs03L5N3DsKAPaHJ7HxZ8L/jzw31/iuyv+LfEdZf+2udh9eqMDkBAOfboZYZcPhi7WxH6/707BubOcPXYAMOrdv5Fou5/efgCnHi+FrbQB5f1akFoehar0VgDANuwBuK87/NFG/HzHb0ACYIcde3BQ+P4H31gNyx8bJM9zSMOdLo/r3WyELjoMTHUbe24MOiDOBOh1MIxNAVPWgpWPf4T6Cy2ohwWlF76H1F9TEdViBKMD7rC8KWyKgQvNYM/1O22fYuztlWh6rwXNzhb89Mt3KB5XjVd/exWNo1oAADaw98jPzH4UznoTKfv7u68Pcxj7W7c65O9P/lprcwi/qyx8jpJeBzhkVDEGHWDSu5cTX7ctDpUdcPvQq983+YNqsX/7UUS0GdAe6QQAVDK17PfUAXscv8HFvcm+P7oBMx60YPsXv7ATGODQ2+vgvKcZp+vKAANghQ0/tu3CmssexJdffgcAuLHiHsz/OhfMLexqW5ndyDxthmXMK/LfsTP3s5Nh7+nOoAMQZUTE8klw/FAK5+FaMFWtvsdiZc/Z9/u+Q2l2k7B6JWqx+8gPsEz8NwDApWOgZ9iLvj6hHeuPb4UjzIUTTDGqrv4cltW/wmpyYkfNr8I2nnr/Abx6+yzhc/30Umz85ick1URg2h8a8P1nO5FUHYHalHaAARJ/bIdlbhT720caoUuNAlrtYOwu9rpUe8eIzy/3vVSvZW9MenZ9F6O+rpk9v+HLzkLL5d+w57i02f07hhskf19d/xgYhiXA8d0pwObClvNP45evDgMAWtEOAGiDFfl//BSW14/iydc2Y8N1Be79ctc2TzHK8arzY4/55Y1l+MfAFERfOATmLy8GAPcxFje53xc67p8/50kH39/AX6Sen4HaNhFcmPSAg7vAjH7cX70Nk0Q7y5/3gtLfUu92Kfj3qriNGop4n0u+LyK+puSeMeL5EQbp9wr3DvI4x/w7hQE7nZHYltbfS+p45dCBvUb47yt1vFqfm1y7oEv6IXLrK11rgewfORnPd29HrgkjdyxybQ05DDruPcq4+66duZ+57+gMBz77bRWqU9vQ/MNJ7Dm3AgDQhBbkP/A5LP92twvaU1rx7YkfoXMBNRn/RpjD0LHfUa4/2QPoRyYiZv91AORjD7r+MQi/bTTCl50FgOubf1/MLcNvCIBOhwvrX2c/v3sc/77jPPeOIgzQD4yDafFIdh/iWISLASKNME7JFNpS1pf2of3Rn6X7MiZ959vvoYp3v09LfzLQ8Pdwm7ObdywB/16Quqfk3jFS7wW+z632bJF75vHPvUD8Fnqwz0WDDvqhCcL9SfhCQXTCB+vL+8CUtmhfgYE70ObwfagxhY3S7RS1QJvXtpiCBizOehJfz88HlsDvh4XOCTAGz2kFw+phbgljD8fq+Z0d64rcDy8l+O8v8d1V6cg63vuus8JVZ4X1yG7o+pnZyd6/n8QL/+AZNXj6gV0AgJrkNgBAVVqr5G6ee/AX38YmF+hZc9lJLH57FEYdSurMNwk+pH76FgcY8XXrZIA6KwDgYNl+LPx6LZpibAAAo02PzFIzrlizBgfPrMGoA/Lnxxbuwh3vbWZ3qwf2n1UNACjr1+wRUEuqikBtajuaomye949SY6Ij1yd/uShd/06mc40YF7d9leMqT2Qbu2E2vRBEByCcE5fonmYAXPfFBkQ1G9Ea7UBUixE3vjsCekaHM/elYN949rzaTS6sXVAorFefZMW6+e7PAFDWrwV3//t7/PvO87V/p87ez/7AAGhxsM/r8lbf38rrWOrj2302cXy4BWmWN6B3AQs/Gorv5hfjrD0p2De+Co4wF/sb6YFHn/gZ81fnojLd8/mw5YLTHp8n/5SBhLpw1Ca3oyWavT4bEqzC/IZ47m8Xe+xMYaP279rRZ6w3/nR+uPMbvuws6feBQ/odtnbYPiz7z1Y0m+3QMzo4jKJ9iu7nN/9wEG/decjzvHoF0CVhgJYYO0YWvo/jWbfAzB+O1DEy8D+YFoj+tdw2gqPvTgQS8T3VV4MLgPx37873Av9eDXW0XEdqX5OBfBuFewdpRmlbnYWB+vfV+pNy7QK/6Mrrs6v6RzLvXtXz1NFjEQfIAngd/DKuAtWpbYhtMKEmpc1j3htLD2D9gkJ8fOVFiG0MR3JNJMJsethNLlTFNqNfabTnxrrzORMgXEfqhL/lYg9MQYPQDgNk2jkuQPzjn8rxalu2O+E6Uicf32hzstsVHYvsfdSX33Gd7fcFgkD1BQJBoN4x/CXVkXPbkTa+lmNxMB73J+ELeaITIcXX8/PdH/SAqV37JcyrLMUcHF0jBNEbY60+83szF2z/As0xrLrZHs49NZWCN97zuM/1SVbYw/pwo4Kj1exAdVobbNy5dJhc+O8dh3DwjBo4whgUeTfq5NBBeDK3RNk8zntuYSwAoDHWFsAjD24KhjYAgPw1Jjo/J4daALABdwB45o/TcNavqQCAp/80zWOdzV4B4Lo0r/tfB5wcbOn4gQcZbVEyjTkdOxBROLARdUntOHBmNeqSuXPBXYfNZht00KE8s9lj1bokKyxx7vNmdOox8/ssAMCRUTUwtengNLpbdw3xVlhNQdL47ULK+rXAkmCD08TAHu7yHLwVXa8V6S0ozmmCNcJ3cEgRbpmWaDsOjqkOxCETBEEQBNGN/MYJZqb+mAnoPF/+lZmt2DOpEl8sPA6nzoW8YfVIrYwCwAlsCFmiWkkjShBE10JBdCJkqEzzHT3mA5ZacBp8h+r2ja/C3gmVAIC8kfUdP7gQI5CBrBvfHoGhx+IDtr1QxR7GnlOX3n2dbZpTDIeJ/WxJ8j/wnVgf6fH517NZ+6KPbjza0cMMOT5YzH7X9ijt16wl0QadE7hwQ7Yw7ZVl+z2yV8qy1LNtKjL8yMgJYhwGF5xhClIFBtjFpRFXp/sq1lNq2I5beSZ7PoYdSWBn6IC1F3sq+Idz8/5172+wRXruszKzFd/PLu7QdwglyjVcN7H1Jti586PrxBjk7e9u6vjKBEEQBEH0CHwbs//paNll/vLCdvSrfwszd3+G0qxmbj3prOG+TFuEWygSxYnjCIIgugoKohMhw97xlZ4TXNCm2uORWLa8fysMTt4HuO8o0cv6B07FUNavBVFt1GCxSaj5i7OboOvEeEV1mmd6p4s7zT+eV9bxjYYYlf4Gsrm4LWMATg5qQGOMFTVJrVh9+Um/33iC/UiIU5SrkgWhk/mbI7E2AoA7iD7iSCIMdnbBr684ISzXEmWHgx+slHk2i5XrvZXSrCbVZfQu9wlixNclP+6gMbDunQJOEARBEETww7epMkuj0RZhl12O8Wq7khLdF7/7CgRBEJ2AguhEyLB7MhdE54IMsY2mgGy3OZZtuDTG9R2LjNokX7VpRykY1hCwbYUy1nCJegB64PG/TOmS/TF9wFzYqXfB4m8gWxS8vWjLVxh77COcdfSjDu2/LdJPb9Eg5fvZpzq1flKNZxA9o8wspBXvOLccLVHsM/THGaV49m97FbdVldr7g77fXFqouozsYIJaYTQvWuVsegiCIAiCCFr4NlVKZSQqMrWry/n1CDfiDMC+INYgCKJnoSA6ETIcHVXL/sEFGeLrwgO6/b7kiV6bFLhAVnF2o0caXV/FJmGRE2MJw+ExtRh+KCHg+wvkQEiwcjq7yaNwaEdoibHDFtExvwxnL0mwODJSoTgMF6xNqJUflOSV6Cc4j/icwlhkF8UAAGwRTmydxfrLJ3HLKXFKTRUf4jgMLthN6tcbo2bZqbF15jIyaGRIlUYQBEEQoULBkHohS/CHmSUe9WPUODmo99Tr6SxtEQ7smViBvGFuS9aa5HbkD62HS8dgy6zT+Pj6Y32iHg9BEN0HBdGJkCF/mKdneYQ1sIVDmmLlU+l6G3WdCMBevCrX4zOjpwYdIKNEhwuf3JiHY6MD77df3q/3K1HyezrLQQc0xIb+YEX+cPXr77yNA2TnJdWy3vx81smQvARklrk9PNdeUuixHABZO5Le/qxoiglQRpOSVZlXXzuPUVe+EwRBEATR8xQMqce5v6xEWX+2Hb/y+gK/1vfuD/dllv9jJy7e9DX++4dDwrQTQxowbe9KHBlVi5s/+g5/fHUbqfcJgggoFEQnQobaZM9gVn1CYINbrea+E0SvShWlDfrpCjKwIM5nWiA91kMVKSV6i7nrlA99oUF4bERtTx8CDp/R88fQWYqzFTy6uWCtwSUftU2sjcDhUbWCinxIXjwm/pwuzP9ubjFsYU5BsQ4AkW3Sg5y9Pc22tH833JdeP9VBZ17X75MgCIIgiE7z6aL8Tq1flNtIymoAtjAn3vv9EQBAwfAGYbqdq1H13q1HkF7OWg+WZ1I/lSCIwEFBdCIkcBhcQuHGxDo2UFOdHlhv3ZY+5C1bJlYx+1OcFYBL7xt17wsBXTWkLBxULRs6QUV67z/nB87kAtg92Fc4qmSFEgK4dAxq1DJPGKApVl5BnVQTgTve3QSADainVEfiom9yhPlNcTZsn1GKWItJUKC3837yXo+L5pjePVhZlNv9SvsNrh+6fZ8EQRAEQfjP3nMqO7U+Y+j9WX1a2DGtTHH+7kmVyCgzAwDK/fCcJwiCUIOC6ERIUJnWKgR77caO+RvLwgV5OmNxEmp0prJ7jURhQAqiQyiu2F309mBkVWor1lx+EgAQ1Rr40YhLvxiIs3enqC53fEhDwPfdnTTG2QCV0xduNSgWtYpqMSKfU/k8/pfJ0EGH9Aozxu9KE5ZZu6AQekaHCCtrYs/owT5bvQbpKtNbsfqyEx34JqGBourfizCrygimxlfdXuaQ+kIEQRAE0QE+ue4YVl7bOfU04SZvROftWArI0gX9i2Ow5JUxAICEGt+6PsdG1SHGwk4nJTpBEIGEguhESHBgbLXwt5JiskNwcYy+ZOdSkdGxEfkwm14yA0BcFb2vUpLVvQ20lujefb1+uPio8Hd0c2ArfOqdOrxx8wXIOh2rumyoB9Frk9UzdqIbwxTv4VJu0G3y9gxc+elQYfrs9dnC3+svLoJT70JKRZR7RYkYsTXSiQNn1mg48tCk1I/nAKPWAtOYJVSBGriYAA8uEwRBEH2eusR2LHttG+5+Ywvaw/tOxm5XUZPUFhDRVkFP1wwKAgYfj8djf52CytglqE+Wjg3YOdsbEnsRBBFIKIhOhAT7zq7q8n0wftqahCof3XAMB87uWBBr6rZM/Dre97foC0Uu1ejuQRgPX/teiDioG9FmCOi2XXoGf332J2yaXSy/EJehUjxAu7I4GKlLVO+sxTaEoTLd83r60z/PBgBklphRnMuegzG/JXssk1UcAwAw2nWoTWnH7kkVSK6JhBJGuw6zNmZpPv5Qo8KPAUVHmEpBCo3vJBdc2O76RfN+CYIgCEILlnh3HZO2PmR72VVoUZDrHEC/U2bFZai4KOuJvvTNzfh0kVJdGLYh1VHxGEEQhBQURCdCgsNjuqG4nw6wM71b3QsAf/rPtg6vu/XCEtQn+hYGJCW6V+eiG0Shh3pBwUslxEodW1iAT6gOeGfJYbTE2KF3ykQqucl1yaFt81Sj4fibYxw+AVu+MOiII4mC4mlIXrzHMkk1bH2KKC5TYO0lhcguilHd3+QdmarLhCqqmQtecXODPTCjt+87VwVkOwRBEATB0yzKemyLpCB6Z/l5crnqMowRKM1W7lflD6Ug+ic35OHzawpwz+tbZZdxcBawnbExJQiC8IaC6ERIoOTXG0gKmdJu2U9vwx/1ZW+lVdS5iGswweDo2tSGmpTAFtYNNmpFwV9Lgu/ATaBgvKOaXrSaQ7vTqCVtmB8A0okKuK7+HetbXpjbiM0XngYADM1L8FgvqZYNovMB+HULijB3bTaUcBpU1NchTIvZrp5i7T1Y0e5pWB9t0Whd5HUa17q2qV7LBEEQBOEPljh3+6uVlOid5ourCwKynbzhdXDq+7aN21eXH1ddhm/fkhKdIIhAQkF0IiSo7aain9ucu7tlPz2FS9c1QRZLgq3bC2sGG42x7o5GQl04IrugGKaYqtRWOAy9twEtDv62RzoVluwcjIpTjNPIwBbWdfvvalQ90V1Acxx774o9ug+OrYXOBZwcYgEAJNZGYPTBJI9VkzjrluZoG6KajSjNakZKdRSU6M22WYUDLXAaJZ6xCo/d6CbPoHnuSXUlP+A54AEA9bBoyjogCIIgCK2QnUvgcOpdOM61qTq9LVP312IKNnZMV1f1W+JYr/SKjJY+P+hAEETgoCA6ERI0xwS4mKgMX7s2dst+eoqu8O02WdnHSEUfL9pSJ7K5SWiIQLg1sD7e3rRHOTH+0Mdo6qZ7o7upEQV/VQswdiU64OSgwHR6egI1JfqHC+e6P3gFuPnzPuu7LOwZcy2im00e8xM5JbrLCEzb1g8AsO28Ep8Arze9VTHNd9Z8UBg48M6ySi+P1rQvqU1q8VolCIIgCK2I32tk59JxmqNtGFa0QlW44Q95I/ruO19rQLwqvRU6JyuIqUkiNTpBEIGBguhESNCVSlQxB5j8btlPT9EUE/ggelQLq6Ts677oLSLfyOgmE2pTul4VWt6vBXnDe18j2qVjPAtidqF62WhTfw0WZzd23QF0MbUK6uTIZgPsRvWOyPKHJvsE0AEg3GZAdCN7/w/OjwMArL20EDqlTep6b0dcrNjTQkJ1uM+06lRtNk0uiY54AXmkEgRBEAGElOiBYdUVJ9AUH9g+2NbzSwK6vVDBqXdh/bwi1eUMDh0aEqyIr2fbWuWpfVu5TxBE4KAgOhES2ANdWFCGatShnek6/+WepitUyxFtbDSnvF/fDqLbwt0DPTFNYQErGCgLd0v4G7gLBRoSrAFV64iZ4+XZPW2repHLwtzQDaIrKW/CHAYcHFvDfpARh9/9/FgM8/JCF8Or0f/zxwMAA5wYYoFLxcmo1wbR4/y7F+d/k+szrTxTYydP4vFycHSNX/snCIIgCCUs8e5+Q1+3bewMP84MfM2tbzUEknsjz/71F9z6sXrmeGwjK/6oT2bbZqf7hW5bniCI4IKC6ETQ0x7u8AwYdKETAAMGTzhe7bod9DDNHVSiZxabJafH14cjqTYCOSdj0UV26yGD3eQe6ImxhMEZ1sUnhLsnZC0kQhixCj2yObDR9CH58RiSFy98zhuprt4tGhS6DW+lYkqN8TZsnFvMfuCuJ6PNMzo7/Jh8AB0A+p9mPbz1Dp37Oa0yflQf3zu9u8XBBi1M3pGBmAZPT3R/tyFmw/yiXmuVQxAEQXQ/4sFhUqJ3nOLsJo/P8bW+mWj+UjKgGQ29UEijRH1cO979/SFNyzbGerantpxb1AVHRBBEX6RHg+hPPfUUJkyYgJiYGKSmpuKyyy5DXl6exzIzZ86ETqfz+HfHHXcobpdhGDz88MPIyMhAZGQkLrjgAhQUBKYaNtH9+Kj7uljg+5zzbex3He3anfQQHVWi/+nZcZLTl750JjafexV2jb0WV346tDOHFvKIsyW2zQq84sQHPojeCxvQ4mKYYfbABtGzTsXg/I1ZwmctHZBTIWznUpWi7AEpKNE5hhR4Bs2HqgTRh3EDElF+FNI9PLpW87KhhL/3YkZpNMJtnuetParj1mXV6W290t6JIAiC6Bk87Fx6aRZZd1Cb5GnVZjMFxqa0r9m4fTf3FBoS1fuyOhfrgz44L06Ytml6YVceGkEQfYgeDaJv27YNS5cuxc8//4yNGzfCbrdj9uzZaGnxtIW47bbbUF5eLvx75plnFLf7zDPP4F//+hdef/117Nq1C2azGXPmzEF7e+9Uv/V2jozs/oDL584N3b7P7kDs2+0Pb915UHK6WH3d13GIvKW9iwV2Jf5aSIQCtaJimC4NxYOGHonXvO3+JTF44B/jcfnKwQCA1mhRp1BGxBvKnuiWBP8GzkYeSgQA5JyIxZJXxmDMb8mKyw/hrF4MTu2jm8dG1vl1TKGCuBiuFjLKzX6dNy0cHdU7zy1BEATR/YiLk4uV6KeyG/H+4iOwhXVPzapQx7vIe2tMYAYk8oc1BGQ7wU4t04A3Hf/DY4/t1LQ8w0W49C53G6sypUVzQVKCIAgltEvHuoANGzwDlStWrEBqaip++eUXTJ8+XZgeFRWF9PR0TdtkGAYvvfQS/va3v+HSSy8FALz//vtIS0vDV199hWuuuSZwX4DoFt6+43C37/Mr1ybch7ldLXrvdppiO6ZEH1QQJ1kF3hogJUVvwGHomYZZYy+0cxEXw3Qa1e0pXlw6A/O3fC05z9xsRIsoUD6gKAbRzSa89vtZ+HlKOcr6iwZtZW747hwUCSTt4Q7YI7Rfl7PXDRDsgZa+fCZuXDFSdR3eGsehxb6IAaADCkPYHkeJynT/rpP0sig49b7nTedydwD9pWBY31KlEQRBEF2HWNTQKgqin//T52iOtaMtyoElr57RE4cWMlhNTjTHdo2ffF955z9gfwYfuVYDaf6tJ84SZvRAfYIVybWRAT46giD6GkHliW6xWAAAiYmJHtM/+ugjJCcnY/To0XjwwQfR2irfUS0sLERFRQUuuOACYVpcXBzOOecc7NwpPXpptVrR2Njo8Y8IHk4ObGD/6Car1zAYcZw51SvT4ps66Iku56ssLqbZ13EZesaLuDo1NAO8Sngon8zq19iTj+2WnScOoMfXhmNovtueZEi+slUJT7M5NItpeSufxOgcwBm/eqrM56/ORVk/trBlFud1rsZQTone6kfBsYrM3lmEuFbhfHtjatcjqi0M1ojApscf64XvLYIgCKJnkFOi80HhnVPLu/2YQonyjBbc8uF3Xbb9gj6iRP/ItbpD6/G1wMJsbMhLLNIhCILoKEETRHe5XFi2bBmmTp2K0aNHC9MXLVqEDz/8EFu2bMGDDz6IDz74ANdff73sdioqKgAAaWmeQ5VpaWnCPG+eeuopxMXFCf+ysrIklyN6hvqk7rWrGIocAMC280q6db/dQWMHrT9Kspolp1spiC7A9FDaQrlC4chQpdZPW4wd07R14tIqozw+Dz+iLYjOGIEWP4LEwUJNivx5HHQ8HgfO9vRDn7ElS1Ddp5dJFxP2Jq0iCjEWk1/K6WqF4wplavwY0IpuCoNT75Ic2OyoCh0ADo+uUV+IIAiCIDQgDjrynugtImFBUk1Etx9TKPHxjcewiS/g3gXkDe0bFm6DddkdWo+/fnlbl7qk3tn+JAiiewmaIPrSpUtx6NAh/O9///OYfvvtt2POnDkYM2YMrrvuOrz//vtYtWoVTpw4EbB9P/jgg7BYLMK/06dPB2zbROfpqI+3HPE1yhXRo8EG2npjsZbyDI0KUE5UbeBOfZWMTUGgCuP0BiSD6N0gTvcuVtQbUFJQdwZzS5jH51kbB2heNxTV00r3e7OXtZPeoUNcvUk49xnl2oLoOugwJD/er+OKtSg/g0MRBgzK/LhGMsrNqE+wamuF+fEc8ddShiAIgiCkaI20e6jP2yIdKBhSj/GHPhamObkszANnVuOydatx30s/gOmu1OEQQCpDTRdA98fT2c1ojQw9kYe/NDJNfq+TXBUpZAnzdatIiU4QRCAIiiD6XXfdhW+++QZbtmxB//79FZc955xzAADHjx+XnM97p1dWVnpMr6yslPVVDw8PR2xsrMc/IngQ+5kFAnNrmOL8drCNkd6YIlfWTyHII27zcgHhC79VHvm3hVOBFgGvIPqsDVndEkTvjUGzQDRy+xeqB4En7tBurqh5ACqIKFcI6laneg6+nPVrCqq4rIbIFiPiGkya95N70r93Zm+rNQGwllc2P/zn0yrMwnVucKicET9OWFu0E+3hgbWIIQiCIPoe3m2x5hgbvrryhIfQgf/7w5uOYee55fjglqM4MdjSrccZzLRE+9YtimoJYEk6vXy2cG/BFuZEFfxX3KeXcdmnjLu+UleJdAiC6Fv0aBCdYRjcddddWLVqFTZv3ozc3FzVdfbv3w8AyMjIkJyfm5uL9PR0fP/998K0xsZG7Nq1C5MnTw7IcRPdBwMGLgP3IUCRF7VUriawjZHeqESv8CMQeMM7I/D0smmKy5ASnWXpm5t9rs+//31St0QLe2Nh0Ro/7VykKMn1vdbFxXGv/WIdhpSuwEMPT9S0Pd4rPJQ4PrRBdp53wdblf50kDBRklJuh8+Pija/3L527OcDZRcFAvp/FvSLbDMK7KKAdasjXsCAIgiAIrXgHHJuj7bB42ULygXZxGykU20tdBW/ZNjgvTpjmCnD0pbcHhitS2OvJn3YpAES0s20rnai5W0NKdIIgAkCPBtGXLl2KDz/8EB9//DFiYmJQUVGBiooKtLWxHcsTJ07g8ccfxy+//IKioiKsXr0aN954I6ZPn44zznBXAh8+fDhWrVoFANDpdFi2bBmeeOIJrF69GgcPHsSNN96IzMxMXHbZZT3xNYlO0BhnC3ggUq1QYRmqALANw9rE3mWVoaRM9T7Pt74xGmlVUZKLRjeyan4KogMN8VZ8fk2Bz/S4xrBuCaLbTb0vG6A6hQsCBljJL7aG0rt0sJtciGwTBTAV9heKhYZP5Wgvkn10dB2Kctnl+xdH+7WfOAurWs86pW291hAt1KqEP+caANojnTidzXYMM8rkz1uYVaaZpnCt+jNYShAEQRBSNCR4Bsybo+3CIPis79j6YXwAVzx4y9dWIYCmGFboYo1w95faAlxQvLcH0RviOV9zPztV1SktSKqO8Kgz05DQu88VQRDdQ48G0V977TVYLBbMnDkTGRkZwr9PP/0UAGAymbBp0ybMnj0bw4cPx7333osrrrgCa9as8dhOXl4eLBZ36tgDDzyAu+++G7fffjsmTJiA5uZmbNiwARERVPwk1OiJhkE7rMhEKoDeZeliNTlRm6LxfDLAwBNx0EGHj6+4yGd2Qh17L5Gdi3TGwsWrcvH+LUe77Rh6m31DfWLXFxMekhcPADiV24ioZi6Q7t0+FwUqD42p7fJjCjQVflj9JNZECM+7IfnaCq7yxDWwHufjd6Xj6o+Gqi7fHtn7Bt/89cxvi3Ain3t2TPkpA4/+xZ0pN3ZPsvC3rLesQl+SHwwhCIIgiI7SEO8VRI+xoZlTVmcXsTZufF0eDyV6JinRefjzVSpW5xtkFu4ggcjeDGZ4z3eXn8qaUznNSK6O9JjWGzMhCYLofgKbQ+wnDKP8MMzKysK2bdv83o5Op8Njjz2Gxx57rFPHR/Q8PdUwSNElooypQv6wekzaKW0dFGoI6kQGqgppc7MR4TYD97evh3xCfThO5zTBSkp05EsMtCTWReDFP+/rngPQAfvHVmPSrt5xnbZFONAeFfjryuDQ4b83XCh8HpLHBooLhjUguToSxdHKRYuODw49JXqTitWPzgW3QkfvtiQZyg0waIX3T2+Mt2LcHgWfee650xufG+V+Wqj8dlY1yvqzneoheQkYeMLtK583okH422HyPx1j55RyXPPxML/XIwiCIAge3rolsTYCdUntaIq1o4krSp57grUnsSTYYImxeoh0QrEQe1fRzCnRXV0YcalVsSkNdVo55b5awdrkigjUpIvEYgZPKxfAPahBEATRGYKisChByFGdLBGY6IZijVFglda9SYnuT4p/nCVc+NvD7oIjvp6dbwvvfcEwfymQ8EJ+/9buU6EDwMpF+d26v67EI/skgHY4pYm3Yd5ad90NPlB8dGQd+p2WKUIq2n9Z/xa4vFvjQY5ayvCEn90B72azDcdGsoWb+AEGrfBKdEucDUk16hlfvdGCqNxPD9iWGDuKBrKK8SF58Uiqcaul2qJFv1sH7oEvFuardjYJgiAIQglLPBsAzixh20hiO5f+xdGIbGX7B4fPrPFYz99B5d5MdyifSwb0buV/W6T6OYxsNuLSVYN8ph8b5dlH4wc1CIIgOgMF0Ymg5nQPNQyaGLYBWNq/9zRMyvppD6JHN5mEv/lGspgErpCglYLoARlo0Ts1Rspk4mJ7J1Z2+hiChdouyj7xLkg06mASIluNqMxohbnFN9vCG1cYUJMSWmoftSC60+C+oIoGNuF0djNMVj3O3J+ssJYv/KBbY5zVIxgsv99eGETvRNBg0o4MJNYGzm7OHsFQcVGCIAiiwzgMLnx5FVvvx+Bg209NMTbB4zumyYT0crZu0v6zqj3WDbW2UlfS1A3K5+Js5UzKUObE4AbsmFCiupy5xYgz96WoLtdIQXSCIAIABdGJoIZXRnrQDcUai8C+sBULcYYYghJdw/kTWwtIKdET69igmT2s9wXD/CVfwhPdX8zNGvM8ZX67sl402FOb3LE6CElV/gUho9rCcP5GtjBWU6y2Tk6oPQ/UMkUcRvf9u28cW1B5xub+iG42ya0iCV9YtCHeBqjYtAGA09j7VNKVGjN9Emsi8MyyacLnV289H+E2gyYFvxpGu7tJd2RE6Hn4EwRBEMHB20sO4cgYtg/22zhWad5mdngE0TPKWIX64dHscslV7CB6V4khQg0GTLcon0OtbaoVBgym/Pop3rpR3R7TaNchtSpKdbnGuK6vuUQQRO+HguhEUHNshEQQXQkGMFp9I42zNmRh5sZ+GP1bEgDA1K6HQaFd0wxWxeePBUqw448S/aFHJgp/R7VIKNGFwqJ9W4neFuHA6QAoQHRM50aGWsy9x+OvIt3/ey73RCxGHWDv7f7F0Vjwhdu25ZbXR+GzBfMl15u3hl1Oq4qnPMSeBzYV73GxrcrRUeyzdv7qXLnFZdl9TgUAoCGhHUe4zrRk1gQ3zaXvXUF0u9GpuRhuRplZKGoLAEM565yotjBB7acZr9OoF/3cmy887d+2CIIgCILjjaUHJafzQeHopjAhiH5ysAUAMGlHOgCgLrFjYojeRqvZ4a4704X0Vk903n9fC21RTmQVx8jO59tXFo2iGYIgCCUoiE4ENeWZfqak64CFnwz1mfz93NP49IqLsf7838Fo18MW4UJqpYwPsojK9FY49b1DbV2Zru1cplRGYmh+ovBZyRO9NxYI9IdTOY1g9IDZ0rmKQY3xooZiB+KLLgNgie0dnZZyucEehfNy9t5UpFex9/PNb43C3x+ZBIC1yXn0ocmYvq2/5HqzNwyAwaFDeX9twXHZYwtCGDBwqrjUtIe77V6q09pgcOgwe3223/vaPr0MAGALd2HvBAVrIS5G3Mkxo6CjPkG7sslpYDA4P174PKggTvg7ukn+B9NpeA2JM4P2cgMbBEEQBBEoeHuSGFEQnRcYTNjFBtEtCTbYjX27fwAAJXyWaBfrBnprsUx/bPIsiTZUp8jXUdO72IZnix+BeYIgCDkoiE4ENZZ4/9Oufp1QJTm9OdoGk92AqT9mAgDCHCqXv5O1HahO7R0j/FrPZXZhrMfniHYpOxdSogNulUR0i3/2F95kn4gB+PhXRwKMOuDzawo6dQzBgqzaW+G8JNVEwsxlTHx8wzGc/9PnAIBzdqbDZDfIrhfbGC50AgUUOjuhpES3hjsVz5mpzYD2CM/7d/L2DCTVqXuae5NW6U6hPZXDFsvsDtutYMEfC6LmGBtSq6Pw1o0X4L2r5yCqzR045zN8pNBS05YRXeqncnqvRypBEATRtbTL1FTh3zPRTSakl3MFR7m28PCjCUKNH63ZWb2Zb+cVAQC6WovVG4u1A8D+s6X783Jsml3sO5Fri/I1gFojHVR4nSCITkNBdCKoaY9ULownBZ9W6A0fAOPtClpUKqZHtLMtxdMDekcwokEliB7Rwn7fQcfjPKbrJWSjsQ1s0NgW3jsbblrh1R/h7RofpTLttuFHEyWfxga79kjkd3MkGo8hiD+2Q7x9RXp5FIw29gSeGGpBM5euydu1KOETRFfg5CDpZ0sw0mpWfnamVkWiPdIziD5fw/mSIklUFLM2VUNAWde7sljqkrQH0a97bwQA4JKvBmHu+hyPef1PR8uuJ6neV3g8eGS3EARBEIRGWqLsqE2Rf6/pnTpEtRqRWcq2n9q4AfmUqigkcJmqNeSLju0z2Cw9VxdHWxg90BrZ+9Tojz7xs1/Lb54lb2Pn4oLozjCGFZkQBEF0AgqiE0FNRxoecoFdvvDK3LXZ0Lmg2EAE3EGLgqEN/h9EENIYpxxUsXPnbdTBJNVt8YUHe1MgrCPwXuTign6KyAS9eO/qlMpIRImKjIZp3S6AvBGdL3AaDPhTh8DFKaLO25Tlo6oGgHlrclS34U8Q/eio0CnW2KYyAJlebvYZpLzomw4G0Wvc6nXxfmMs8vYk9fG9p4OttYja5B8ycNdLZ8rOH3HEbaPlPeDG6H2nKeE0MqhP6B0WTwRBEET3IS5UGd7m2w6Ns5igg05Qojs4KzG9E0KRbH8Gl3sr+cO4dnk3ZOb1Rl90tX66N0fO0FZHramX2t8QBNF9UBCdCG462fC4+/mxmLGZ9UPm/YzTKs04c1+K6rp8elzBsN4RnFSzc+FT3Sb/lKG6rUwu8Gjv40H0Zi6bwejs3KO0mLNeGLcnDTGN7sCjPwUYa3qJ7ZA/1hgAMOpAEkYcSRTSiXmmbemH/iXyRYZ4+E6ggMIz51ROE1xafDWCALUgelZxtIcaJ6YxDBne50IjiSIlOv8cAeDh/e3Nd3N7R+YEoD1YcPnngxXthYYeSxD+lvRA9/N9uGNymX8rEARBEH0ePog+OD8O1gjfl1GshVWbCyIE7t20b1w1+pWwGVUHxtZ0/YEGMU0xtm6to1OS1dxt+wpaNHbFGjtgFUsQBCGGguhE0NIYbetUEP3Ze6bhwccnIKOM9esV+xmPOJwot5oAn/qVP6yh4wcRJDBgYFFRokPHpmiOOZAsu8g1HwzDoYE3IrrRbefSl73leEsgvmBNR+EtTIbkxcNkdQfZ/CnAaDe5UJsY+oH0tijtFk7h7QZ8efEC6KBDA1fcMbEmHDvPugYrrputaRt8OrIW6xx7uAul/UOjo6J2HrfPKIMzzH3vxjR23NefV54B8HhmmxQyKdZfXNTh/QUbWgd+5q1WVvoPzXMH0aVstDTD/az/uyGv49sgCIIg+iQVXBA9vj5Csh8WX29Ce7gDt77/ncf0xjgbLtzAFidft6Cwy48zmPErizkAzpjFVAdFM3WJlCVBEETnoCA6EbQUdtJ/eHBBPAwuPfqfZtWoRbmNwjwhWKHUcOEajqezQ79h0mp2COmWknCzUqoioZNoMV/1yRAYHDrc989xSKmJRFSr23KkLxcP4pXoLsb/FnBqubsYYxvnXz00PwHhdve59bdY0A8zS/0+jmCjNUp7mmV8fTjiG1hFFD9IFN1swsATcYLlkBr888Hg1Ba0LA6R54GaEr06zXPAxR/rIG/ESnQAMFq5bSkEgo8P7h0ZPgBQldaquoypTY9klaKtYw4kI7mSPZdOpSwUtXFL7rRvO78EdqMTrRF2VKS3kL0LQRAEocppTtVsbpa2ZItpNGHr+SX4dWK1x/Sa5Dacu60fACBveO95x3eE4uxG9YUCSG+p39VpNOi6avzMeCUIgvCGguhE0FKU27kgekQ7G4wckhcPACgQKcqH8DYDGu6AsszuS8frKixxXKBbpnHBWwfknoiVnP/vJefhROYtyOICjlGtRsEHfETRe312VL85mg3cOuUdGiT53aeDMH91js/0IXnxMNpEgUeluK7Eb/nVlcf9O5Agw2Fw+VWsVmytwl/jDr1/Aw/888ERpi2jorxfaCjRW8z+FZZs9SMDwJskryA6/7MoFW+u6KceeA4VyjX4+A86Ea+6jLklDLvPuBYGhy4grTNrpAufXJeHQeXv4Mz8DzHy5PtYd3HfVgcSBEEQ8jz47HY8/fc9AOSD6AfPrMG6BSd9ptcltSOlmh0sboy3wRbWdy0fy/3pO0q87xe/OaLr9teb0aCHIb9+giA6CwXRiaDlRCeV6OHtbGRzCKc6LxhaL1iPTNqRgeEaLF0AoCnOJhSQDFUaeP83mcYFw4mfR8tYueigQ2S70eNznMWt9F3bR9M2W6LZwKM9wjMAqVPpN1zz8TBEWEXn0wmM252KUQeTYLKpPJb5WK/Eb3nwzND2oPQudKlGdXobGDDIH1oveML7q94feCIOBodOsG9SoyRE7Fwa/PR8VCs8rERqZRT6nY4WPvO/QUWGRKCcO822CBfsxt7RwdbSeR37S4qm94i5zYTUyijlhcT3vspl+/K9+4QCvC4Dg1/GV6keA0EQBNE3eWfJYeHv5JoIyWUsCTbsO7vaZ3r+kHo0m23Qc5l99X1UYAN0IqjNAKN/S8IfXhkrfNZCRXrvESYAgLULa25pLQZPEAQhBwXRiaDlxJCGTq0fwXlLDzoeB71TB0uCDdVcoC2myYRtk6/CwII45Y1wMT0tSsNgRmuAbOLPaZq3GSVSqES2+ynF7iW0cEp0m8mzlRvXoGwlMnZfKsJEwfLINiPWXfA7mOwGGB0qj2WpgRBu92X9Wrq04dnVtPoZRAeAr644gWl7V8ISz/4WajYm3pjsBuQUSmdgSBEqKcr+Fmi1RjjRFtExNboOOqybdZl7AncJSxW7FQpm6oBdkys6tL9gQ0tn+ZOb8nDJhq81bc+n2G0nKMnxHPSxdvA3JgiCIPoWGSXRsvMKB/naleyZWokZuz5DfD1rs9eXbTM60m986t6pqIxbgu+nXYmcoliM/i1Jc22wyvTQ7qd6o8Umr6OQEp0giM5CQXQiaNkvoXLwB16JHmE1CoXvvF/KuSeVg2d82yXU0+SaY7Qp6Ucdki8q6g0j8uwVF8PsS7RwXuZ2L7/55Cpl7+NYiwkmu/uctUY7BOWwwdHxc8nogZOdzODoSVrN/gX4Prn8Ijzx6C6PaS3Rdr+L3Q44FaN52d/GVoVEMd2GeD+U5dy4S2Ncx+sbpKhc8zw6kU96Z+teBAO2MKePv7wP3OVy6MxaTdvki916E18XrrieXkNxXGt46A6yEQRBEF0LL/C45Y1RaI6VbxPYw13uQXERrdEORHD9r74crDw52P/2TY5Xn3TeN2wx8mFH4mFQeb/3tnPdmexINSq7MEBPEETfgILoRNByKse/oizeAYZwkf1IUg0b4PFWZw49lqC4TYaLZ5b3C+0gupZijUabzi9FrsPobj23R/bNwExzDNvIs3upv8XWN1LoGZ2HEh1g7YYAwKixwKUcBcNCQykthb8q8vM3DfAZIGIMyl7cUqSXaVf+nhjWiI9vyPNr+z1Box92LtEtbFaJX4F3Lwwuz+uZH8T0Hm8Q2dj3io6MMMCqNK7i5y3NK9HD29wDamf8moyRh5IUty1+diRWS6fhWyP65rOaIAiCUMalY4S2/R+fOVs1MKt3Sb/c+CLWfdk24+jIOr/XGczX6+KYt5oNohcOalQVezTFhrbtqDedslFV0bmEep+eIIieh4LoRFDi1Ltgj1B4C0rMSqvw9JGNEKmjE7nCd7VeDcIxMh7gAlz7MNTtXLQ0RgadiIfRqf2R4DC6f4RQ94zvKM1csNbmFURvjFEPRoZ7qffzucK3UnYukS0SQXnxPSDqx4gL6IYabR0obtkkOtd6B3siKv30hsz0I4gOAM//Za9fy/cEjbHaA+Ixjaz9UGeU6ADw7rWzMeIQW2tCGCTyUqoxoih6tYTdS6gh2I51buzLgwzuepz8U4Yw7bzvszDUq4PtjTgjZvJP6ZLLtFMQnSAIgpCg1WwHw726TwxuQEOCcpvAaZTup7WZ2fdMb1NHa6Ulyg6nxmL1AgyQWeZpnzP8aAJSKyJhC3epep639zKrtlYN/UqDw4+Gl+jn2Hd2FRwG/+onEQRBiKEgOhGUqI6oS7w3E+o9legRIhUfXxzHWxVx5q8pmo6nIsTtXPgCmEoMyYv3a5tOkRJdi9K9N8IPHnjbuZRkNamuG2b3DKLzNiwGiRiX3o+2Xn4fUaLP/zoXTr3LoxMX1coONvg76OWPEh0AqtLa4NIFt6VLg0pAPFbk2x/byCnRVTrMasxbm4sJu9i6Ckauc+P9qBYL1ut6QdGxfD8HrZwabmY+iC7OcJm0Ix2jDkoo0UUwokdKW5QDk7b7BtLJzoUgCIKQokmU2XfZt2tQl9i5NkFfDaJ3pB1ucOh8hEyncppQlc72W9tU+nHe/ZBQR4s4K9Lih/2l6PS0Rznx1RUnOnBUBEEQLBREJ4ISf1SUY/azgYW4BncQXe/UeSh6E+vYILp3gy6nKFZT5fOyUA+im9XP55B8ZWsbbxwGkRLdT/uM3gKvRHd6CcWdytbFAHzV6xbOfkPv8n0s++MVfni0Nt/lYESL8gQM8OiDk/H8PdN9PBOjuWK3/g56ZXD2GVL+nlLYTS7UpAS3irpBJUAtHgSLsbAX7AsP/Nrp/fKDQwantBJd3OrQWqshmOFtmLSixfqKD6JXZLQivpb9bVKqo3Dl/4YgvFVbsy1veD2m/pgpsf/epVYjCIIgAkNztGebas+kzhX/bvDDVq43cWBsjd/rnLcpC+suLsRNH3+Lr3/HBnjXLSgEAERJZaN6wei1DdKHCs0a+pXNSTLtGQmhndHLU/6bS0925LAIgiAAUBCdCFKaNAbRBxXEYdDxeACeSvTwdgN0orcoX1jUO4hudOrd3r0KhLoS3dvGRgp/lei3vjlK+LvFz4KQvQVh8MCPjMJLvxgEwPc3EQqLSniiM1JPapl9Fg6yhGxDuj5O/TodWBCHO/5zBhLqI4SBBx6+xkF5hn92Lv1Osym0/mjLD43xv5PUnVhU/M3bRMHc7CLWa/PXCVUo7dfcqf2aOBsX/jrWKdwbvcEGqijXv9odLRqydvhBnbLMFqSXszZltcltiGoLQ2qVtqyJisxWjNnna1dGSnSCIAhCCu8sYFfH69wD6NrikMHM8aENfq9z7QfDcPfrW7Dh4iIsfWszbGFO/DS9DABw26tj1Deg612DFk0abDH9wbve1K4pnRsgIgiib0NBdCIoaVSoCC9m3upcISgQX+8upBbh5TedWMsVFk1qxz//tgf3vfSDEGhM9/JSlyLUPdG1eA8PzfNPiX7vP8dhPGfd0BuCYf5SmdbitqPQGEQftzsVL941AwB8lMy8cljv1dDTScW8FKK9jjAGpwd0LhDaU2gp9pNSHSn8beE6aHqnDp9ffDHGcvZMZX4GgnNPxrEqdD/eiNeuWo+V1+b7tZ/uxFtR5o1LlEny4BMThL/XX1zUqf2GeQXRlfAnwyJY8S5WrYYW3//0Mvad1GZ2CBlW/KBbnMiGRwmngcFv46p9ppMnOkEQBCFFoAOXlj4aRK9I97/P+PA/d6KZG8Swm1z4aXoZ8rlMtxlb+sNkVW+g3vfyDyErohFTk9SGN5YeDOg2dYxnm7QuqR1tvcxHniCI7oOC6ERQotXOZf6aXNiEILqnEl0Mr+Y7NrIOLz7wKz645Si2cyP8Q4+qB4+rUltDumGiFkTXuVhVvz+Y7AYs+GogAI02HL2M9fOLPDyItXDOznSYW1jLkUUfDPOYV8/5UXtbbRtcEsFIlfjk3omhqbDQUhC0f7G78BKvuhl6LAHTfuiHtEpWpetvwcrIdiMGnIr1ax0A+M89v/m9TnfR6keR1vRyMx59cDIAYC2XPtxRTJydi56zc1FS97dEhX4H21/PVy2+/1FtYcL7LJLz+ef3Ix5EUkQHfL6wwGeyNZw6jQRBEIQvgbZmrEkObtu7rqKyA0H0Ui/xyxcLC3A6m62vNPRYAtLK1bPQ1l1ahB3nlvu972Djn3/fg+Jc9dpS/uCUKCRaGeICOYIgeg4KohNBidaG19I3N6OdD6KLPNENXsVZBhXEAwAKREXgNs49BQAYfkw9iM4Y1O0RgpnSDOXGSP/iGES1hfm9Xd6nry/auRTn+N/AG3o0Ufj7nJ8zsHv0tYLSnE971XsFzb2vZS10NhDaU1SlqQfRU6rcmSP8OYuzsOrcJJkCwlpQszOS8ks/ObgBDomGeTCgxXsbAKKajQhzGHDRNzkAgJ+nlqMmqeMdX0GJzl3HjKKdS2g/NxgwmoLo0Y1hbnW5xsENvtitibv/ecV7/9PRsusAQFaRe/7pXN+MDCsp0QmCIAgJtFppauXA2GrYwvreO6cj2aCTt2dg7azL8NGVFwEAvrzqOBg9kFAXjuSaCMHmTY3OZhMGA/nD/S/MqoaUNVGoZ5kTBNFzUBCdCEqq0zQGcXSQVKK79J76x4En4mBweEZz1i0oAgMGA4q0KVCLB/jnfRtM1KYoB3qG5sd3aLu8qrov2rmUZPnfSB59MMnjc3ZxLEyc9RCffeGtRDfa/X9M7zmn0u91goFqDcU6r/54qPC3JY5VovOWF3wQ/fSAJri8T6QKQ1WC6CYviyi9E7CFuzo0mNIdaPW+juOKimafisWY/clwGRh8d9GpDu83nDtPQuKOVxBd/BwO9YLETbE22E3qgyjn/pCJ2EZ2oEdrhkAWl3Hh5N5lvHXUYJVnNf978ngX0yJPdIIgCEIMAwbN0bbAeGqLXom2CBe2zDrd+W2GGDV+2rwBwLjdaRi/Jw0zNvdDXL0JTiP77h+SlwAddEKbQI284XV+7zvY8MdWyLuNIwd/PsWUabCQJAiCkIKC6ERQokWJvvSFM7F69qVCUCCmye0V6zR4vizDbQbkFHoGy0uzmnHwzBrNo/sHzwzuQoJKtEQrB26G+OmHzmNuZoPofdHOpSMKhsxS32st0sqq+ZtibWDAeBTEBYAwjQ1EMdVpbSjpH3qDPqr+0k5gmOha5QuLCkp0rvbB6exm/OHt7/3at9o9EMXZavDwqhbeszLYsBu1KeTjRBk889bkAuickimMs3PR8RkVXq0Mscd/qAd0tfqhDz+aKNiyaFWi8zUqeLU+X0NhmIr9mLddTEZJlOJ8giAIom/z5xe2Y3jRe9g51X8rkOhGryxWryZrb1BG+4Ml1gqbxkxAMbyYKcxhwJz1OcJ0PktSaz/NX4u5YESLtSPPhesHaFpOKiuygpToBEF0EAqiE0FJrQY7gXlrc5BcGykEYsQ+6P1KfEfsb3xnJOLqTcgQBTJLspox+kCypmM6OjI0R/cZMHCEKwfU1Kws5DC3hCGyxQiTzU9z8F6ArJeewqnm1ahiItrYc+c0MmyhRS+xRIfOrQ7497Lg9euWozFOWQWVWB8Og8v92to7kVXceyvRAeCrK08gb1i95lTiISoK30ivIDrP+nlFQWfp4tIxim/35Cr3eeIHIABg2rZMAMB3807hp3PLYDf63xE0cXYu3kWceBwiNZBTY6A/WKnV2FntVxKNyDYuiK4xiM0/k/n0+lM57KBYdrFy7YpTuZ6DZ82xnvsjOxeCIAhCzHu/PwK7yYX1C4r8Xtc789c7iM630/oCjbFWPLl8l/wCUgmS3LSz96QKk+atzhX+5gfU1bIlefwtdh5sMGDQkKAtI8Jo02HR+8O1bVgH6L0y0k8Osvh7eARBEAAoiE4EKVoKA2YVxwBwByXCRXYLl3450Gf5O/5zBvKzb8b+EdfjvE39AQDNMXZklJuRVRSjur+Tg0PzZfvZtb7F5bwZ2kEl+rQf+qEo41Z8Ne+SDq0fyvDK0PgaT/sEuaKfRrsOYQ7fgLh48McSZ/UJPnrbiGhlxe1HcPCM0MqeUPPIFvuhnxxkwbpLigC46yEk1EV4LD99z0q8dvcBTftWuweMDunX5f9uysN//i+4BiyaY2yy12FWUTTSRdk3YiW6+Bxcvm4NXr5vn9/7DhOC6DILGCB0Gl0h3gLRMtgLsAFxIYiuUYk+JJ/9Lcoz2cG6E0MscOkYNMQpd5AdYQz0ol3UJ1g9lIL+FJwlCIIgCCXU3mll/f23PgxVrv1iHd677aj8AlLtMh0w9Fg8hhS4218zN/dHJFdzihd4DM7XrkRnFEu6BzftEU5J6xUprvloGEYf0iaEA4CoNk8xzP+uy0dLVN/LpCYIovOEeBeW6K2oeSNHthqRVmmG3ehEWX82yJBZasbzd03HjW+PwK1vjFZcP5qzfuF9187em6J6TEW5oWePAQCfX60eRD97b6rqMoQbu9EpeOm3R3o1wGSCl9FNvip0AIhodzfqGuKtPqqecK8gOt+w1sLXvzuhedlgwBrBdcZk2s8ZXLFFp96FO97eJEz/3WeDAbC2Td7845HdmvYdZwkXCuVKwSh4rH+xUP0e604scfJ+ktHNJmEACPBUonv7aX9+dYHfnTHBzkVpNX6eHiHd2avM0JZyPCQvQchkaNXYYRt9IAnmpjDUJbcjzKpHW5QDpwc04eX79quum1ItsnDRAxN2pQkfXQYGTn1oZwAQBEEQgcGvd7DEooxKJKE1yhHS73l/2HtOVYfW4630eCLbjXjygam45oNhmL6lHwCgn4QdpBR2kyvgBWK7E7WMVDHz1+QisywaBps228twq2cb32FyoTg7OOsaEQQR3FAQnQhK1DzdFqxiGxxFuY1whLkQ1WxEv5JoXP/+CDz7x+kw2ZXVu9FNrDJPCKLvSVNaHIB/Hm3BgtXkxE/TShWXeXfRbBid9CjwhzCHAXe9NBYA0G7WFpBK9FJJ80SIlOiNcTafILp4PuDrza2Et7VDsCNYfci0hzM5m6aV1+bjt7NZlf0LS2dg8PF42W2esU+7SkVsB+NNS7QDEa3u30JcIDNvZD2OD27QvJ+upiFe/vkZ2WrwSPeN9Qqci89B4aBGnPKzcCpv56KETnTLhLIvOq8SV8LcFIbk2khEtXL1IzQqwSOsRsz6LguA2wbqxJAG7Bun3klPqPX8Te1hns+oUD7nBEEQROCwxPsRcPW/RA8YPVCfGICCpb2Y+atzfaZd98FwvLx0ppDBam4Og8mq0r7imtCh7IveoPF6NNr0OHcbO8Bw9q8yQjCvsRunhPVieb++kylBEETgoMgZEZS0xCir9S79YhAAIH84W9RvSH68T0FGJaK5gpjN0ex+zv5FXYneanbAagqt4ENtchscYcoKkI76ofd12iP8s0X428MTJad7K9G94RWsfAX6zGKzRxBSiX1nd0wV0xO4dIyqoimnMAblGS1Y9to2AEBSdQSu/HSIxzIfX3GRx2exXYkaaRVRsvMaEtqRUh0pfPZON123oFDzfrqacgWFdLjVALvJfQHFN3hmSKy8dD7+79mzkFbOnovKdP8KL4Vx2QAylug+89o7UIArWCgeoDDAwJ1ivnA1/85pirXh9aUHsHeCuk/sfE6dxqfLl2Q1e2QRyHFsdL1H5/GQl60T+aITBEEQQPcEXMsye3+gsj28Y1Zpg/PiMeY3dbGHDjok1USqLgcANSHsi25Rsazj6VdiFgRz/U/71kGTQqpdqtReJgiCkIOC6ERQotgYYYDzNrMKvcKBrNJ2kIISVYoYzlqjmUt5E3vRyaIDDoyt9ms/PY1q49gF5BTGds/B9DL8CURFthgw/xtfn37A0xO9Md7XyzqyjQ2+6V3sjDCXHubmMGihNKslZAZ+GuPkfbx5+pXG4PW73B7nq+dc6mPhMmvjAMz8vr/wuSVau99h/9PytRFcBsCqUKR07SXBE0RXykAIs7OvfV5J761EH30wGX99fKJQnFlr8UweE7d9n2JjYkQ/WWNM6CrUjg9tUF2m32kuiM6pyT++4RiWP7UT87//SnXdC74bAJNVzxYcBrBrcoVmr9AwUUZAQ6KnsqudgugEQRAE3LU9Euq0Cw785cio2i7bdrDQqGCjp8RLS2doFoEl1spnSwIQ2tBVaaEbGNZSEw3w7PcPPC5TcN3rtErFFkiJThBER6AgOhGUOBXcWHQMYOAq0tUmsy9bJQWpFDGNvCc6G2CLrw+HTkNc4ZtLTvq1n55GLQCWezJGstgloY4/SnRxQUxvxJ7nljhfT/SINs/fpy3CKWsN443LwGD7DGU7n2BBSoXvTUaZGady2ADxtC39ZG1cXv7DTFzxKeuT3mLWHkRXs36pyvRq3POCbgbYP64a/7l7v+Z9dRUMGLx836+y8w2cdRMfTI+vl+448521WgVFU11iO+576QccONM9uMgHb32C6DKx31C5PqUoUAqic62rbK52Aq9Er8jU3rmNbjZhxmb3gNAPM7WfK94CxhtTu94vSyiCIAii98L3E3JOxuHs3W5bjCX/HhOwfRw4K7SK3HcELW1YKdSK2otRshwUc3xIQ4eOJRio1DgAkF7m9ojPPSkRRJdoc9pMTg8rRgAo6U+e6ARB+A8F0YngROHK5IM/gDvAozo674W3nYsOOphb1NW9G+cW+7WfnkYpAAYA4/akd9OR9D78UaL3L5ZPNRTbuVgkCotGeBUWbY90CFYbWvhmQWgM/GgpJpRZZhZ8qJWKB6dXmIX5Wj2oAWAa56+oCSfczymuTf7Pv++BS7GiZtdz8MwaVKfJ3/f84fGZDbEW6WBrMtdZU8pmufF/G/DBLUdx80ffCdNMXGaA0+B1Hvh+i9fkTXNOy24/mGHAaMpyyCxl7/0YmcLCasxZlyP8XeVHXY4EmYE2l4HxKSBLEARB9E3qE7l+VF24x+BrZFvgBluPjKoL2LaCFYvWILqoDRTVbPTrfaxVQFMwrEHzNoMNrUKDwkEW4e+MMt+iqwanKFjOnXNGLxKOcNNODgyt2lEEQQQHFEQngg61INSZh9xFQHkFhVafOJ5oLqCx4eIinOAKAsY1qAc5TuU0hVSVeTU7lxGHE7vpSHof7X4U51OyzPFUott87BoiuI4MP9Ua7lS0HfHm48V5WPDt16hLDG6PxHqFYpg86aIgeqZEo1kMb3nT6oedy+gDSbKKaW9imnwH3WwRLpT279nU0ONDLIrzvb9evIxnPD8wKfcMYcBgzyTW17tkgPs784OcTqM24/5vLzqFib99glf+b7+m5YOF4gFNmoqs8Z07qetFi9XSqENJfh8b4FmQ2NzkDoY4whi0Rmq/JwhCitve3YizjnyIbeeV9PShEATRCZpi2ffB0RF12DvRXavjxCDltoQ/FAZwW8GKZjsXUbvBHxU6oL2vu3JRPo6MDD0LHZeOwcv379O0rEcQvdy3PyC2tBPOuU4kaND5bocgCEIrFEQngo6GOKticGLMMXe6YUeV6OKAxt+e3qF5Gw6TSwjihQK83Y0cYw50LEBD+KdEl/Xrg6ddiyXeCnuYZ/DRxAfZuXuiPdyhuD0AMNg9b6Ddkyvw+dUFmo+3J6hTyZqIrw9HmF0v+CVKKU/ERLWy93iL2Q6G+w8AnHr54K4eeo9BDSV4Sym9V2powbB6Tet3FWr7569bPuNBTgXFd9bkniHVogKX/URFnfjzZ5fz7vZ6tjtMLpzKbcSbdx5UPO5gY984bUV7eW/5GAl7FYuG7IuhXoWfE2sjsGCVdH0FMeKMlth6z337YylDEFLUJrejrH+L3zUTCIIILviM3LKsFjTHugdYTw8InEI32EUcgaAjdi5n7kvxa/lEP3zr1y8o8vNoeh6lej7eNMRbhXZ9ukR/wOiQDnHpvLoAVRltaI7umJ89QRB9FwqiE0HHb2cpF+8cvz9D+JtXSSZr9InjEad51Qi+6spBOZ6FX631a189iVoHN+s0FRXtKG1+qDnjGuUbvuFWt0q0Id4KS6xnQ5y/VvkMjfpkK9LKldUozjB3AC2hhg2grVsQPIUvpSjtpzw4lVFqRlVaK1wGBka7HsnVyufA3Mye1/ZIJy748Qtcv3IDXrvrN/Sv/S9u+eA7hfW0FW21cSriQQWeAxr5PZxGq+jTDbdays4pxeXsXNSU6OJ0YXF9gDDezkWjEv3Ol88Q9hNKWT4Hz1RQeYm+Bh8El7qutCjXoptNyCxh303P3zUdP45fKATmlSgUpSi3RHtaGpVnhM5AMBGc8Gq+plgKPhBEKNMcI30P7x8fOB9zqx+Zm6GKZjsXEcOO+adEj5PJHBQTU+8WkIQa/gxEtEc5hQKq5tYwhHvVj5Irbu8w+LZN1drNBEEQ3vRoEP2pp57ChAkTEBMTg9TUVFx22WXIy8sT5tfV1eHuu+/GsGHDEBkZiQEDBuCee+6BxaKcerN48WLodDqPf3Pnzu3qr0MEiGMjlJWUk35xF1rjq8pr9YnjmbDL7QXOdwL7lWoLoh8f2oA2P4pK9iQ/TylXnK+1SA3hS7NZ+zWg5LcfKWr4lfZvRnGOZ5Eb3mOa4Z7WjB4oztVuGdIYxzak959V3eN+3UqoFffJKDcLgcF+JdHQM8peGuJzfujMWmyaW4zX7j4Al4HB2ksLZTsYCRqVPu2R7O/PK9559p2lTaHcVZzOVj6PfPYOP9AiZ+fCPxv45V06xuOciRXv9YlW4doycXYutjBRp1khnp5eyvr7202ukArIKV6v3KUZYwlDaiX7/aQ80RsStHUYh+SzHW29S4fk2kjEyQx8iBEPYngHScr79azlEBH68N7JjSF0zxIEwFqR1Sf0fmW0Vppkguha7Mq0whi82gS9kN2TKtUXEmG06zwKh2tBi386n22opWZLsKHZEodDLFpJ8somb5fJFm6VaPuHsoc8QRA9Q48G0bdt24alS5fi559/xsaNG2G32zF79my0tLAqqbKyMpSVleG5557DoUOHsGLFCmzYsAG33nqr6rbnzp2L8vJy4d8nn3zS1V+HCBCns+XTuW76+Az0L2fV062RdiH10H87FxMODLkeAOtzbjU5kVqlrVgjowdODg5+D7WiXAvyRtbLezy75FWohDptfqg8lNTN4mDviSEWOLwUvNGcn7FYVeFP5oXTyMBgA9rMjh7361aipJ9y8De9zCwEbod4WVxIEW41wOBltVKZ4baxkFOepFXKPweW/HuM8LeLG/soGdCEl++YKUz/dULPBtHLVOymakQ2LHqnTvbaTKrl7Fy4NOy/Prcdo068j4NnsOq0YyPdhcJcBkYICPM+lA4TI6TN5p6Qz3ipS7IiissaUCuEHEzUJ2qxYkmAjotExDRKKdE1BtG5652//rWo0YwOPSJa2IvU5bXr8gyycyE6R4wQRPdffUkQPckry37D8FPvYd3FwZ2d1100x3RPsLUyrfe+d5x6FzbNLlZfUNQfe/WWWRh8PN6v/cTVq/fZ7OFsw6s1KjTEXmK0WNyJEYs5BhR51opyyVgK1qb67iN/aM/aMBIEEXr0aBB9w4YNWLx4MUaNGoUzzzwTK1asQHFxMX755RcAwOjRo/HFF19gwYIFGDRoEM4//3w8+eSTWLNmDRwO5ZdDeHg40tPThX8JCf6lTBE9R4VCqvmU3VkAgPqEdry95DAAILPE7K627QeplVGIbDXCZWBQ3q/Zr0B8fg/7HmtBCBLKqElMdr0Q4CH8py1SewM1qtUoP48LouudQFuUw0chzc8X/1SMiqA8tsHkbqzrgHBOzd7Tft1KlPVXsXMpi8L/rssH4OsTLYUOOve5k+CbS05KTk8rlw+iO4wuRIuCoWHtOtSmtCNDlMVS1oMDFXajE1Wpyh1Vu8mFhFr2eRlnMckq+nlVD++J/u5tR9AW5cDSNzeDAYPvLzjtsTzvecpnTthMTuhd7LZ5dboU5Rktbv/1EPJX1qIizy5yDx5EN0so0eNZ1ZVT78L2aaX4bu4pSW9OvvgYr7pSVKJz932r2YHB+dK1E8oyg3cwjQgNeCV6k5/KQYLoaZ54bBcA4Lb3NvXwkfQ8RTmN3fbePTm4oVv20xPUJ1i1PQu55pbBrsOF3w3wez9alOh8k67X2rmI+j8V6e727vCjiR3eLynRCYLwl6DyROdtWhIT5R+EFosFsbGxMBrlg1IAsHXrVqSmpmLYsGH4wx/+gNpaef9Sq9WKxsZGj39Ez1GVKl8MM7uUDQrc9Mm3QkN43prcDgWDddAhnQuYiQM5Wjg8Ovirnqv53mr1fiak8SeIrmTnwv8OfMCX8aprGSFR6LIuud2neKiYeWtyMXm7u3ZAazSb1nh4dJ3cKj1OvUrhqeZoO/aNZ1XeQ/K0DYpGK1zj/753P0olbC1SFDJSalLaMWddtvA5s5T1pt49pUJQCDnCGBwb1jPnuTK9VdNb/ZydrJ1VrEKHjLdzaY12eNhX5Y2sR8HQBhTnNiGizSAMOlRzwfswLmDO6CEE0Y12+WKtVemt7oB9knIh5GCiQYMdQKZocEVczJqH9/P86KZjuGLtN7hh5Qb88ZVtPsu5legNAJR/NzEzNmdJTi9WsfwhCDX4LDaycyFCFUeYtrodvZXCgRacc+AT7J5U0U37671968Z4/56Dw48kIKrN/z6YpuxhPojeB+xcxIXvJ/ycrrCkMsEsMCIIIjgJmiC6y+XCsmXLMHXqVIwePVpymZqaGjz++OO4/fbbFbc1d+5cvP/++/j+++/x9NNPY9u2bbjooovgdEr7Yz311FOIi4sT/mVlSXc8ie5BrpAdAIzKS0ZR/wbsmuJu9M1fndvhfWVwFb3LM1v9UqJvmF/U4X12F+UqhRoTyQ+9U7RFavd3VBqw4FXqvILXG73T9zFdldaKyDb5gcSWaDtmbPH1Wtw495TaofYYvDWTD5zqpFo0uDZ/jbZ7Xq1o09pLfNO5lQqWVqe24p4XzhI+8+myR0bVeqhgPr3OXdtjy6zTODmoe+yfylWsXHhGH0gGoOz/HtNoEqxZxB0VADh0BjuIOPRYAoYdZc/xyUFsB1l8Heu5orjiQs7e1CS3CUF0pWd/sKHFvz293B1ENzeHCeeTZ+ssVs1/QmQPljfctzPHDxoVZzeiLcKhnHklOtVmmQwYrTYyBCFHDHmiE0RI8+GNxwCwVn/dQW8evPVXQX3OzxnyyykgV8PGe/tAaCrRNdm5iNo44jbj9K395O1LVSjKbez1nv0EQQSWoAmiL126FIcOHcL//vc/yfmNjY2YP38+Ro4ciUceeURxW9dccw0uueQSjBkzBpdddhm++eYb7NmzB1u3bpVc/sEHH4TFYhH+nT59WnI5onuQHdFngHC7EdumePrO8arKjsAHOcozm/0qslkwvAEngjw1UU2Jnq5gW0Go0x7phye6BiU6r9r1plrCR7ImtU0xMF8f3y5pebJ7UoWq3UdPIVcEiIcP5D60fKKmlFYAHqpxMY/9ZTIAYMsFvs/61Cr5IHpdUjuGH0sUPLwbOF/sgmENGCoK2G+aw2538wXFuGbVOlyy4WtNx9tZylQGznh49XiyQvaNDjphYNFbQbZ9eikA9vnJF73klTziQDEfPJe7tgGgOKdJGLioSgsdJbqW4CE/SAt4nk+eH2eUoT3c4VHYTcoXPrkmAgl14UI9DkGNptJh/OSGPMnp/mTREIQUvJ1Ld/kpE0SgSK1wt31bovru9XtgbHW37q+sFxe01jQwLWoGnflrcof2o7XtC4SoJ7pGRT9fb0fcXkqtjoJelFySXKWxT8+wtaO6S+xCEETvICiC6HfddRe++eYbbNmyBf37+6onm5qaMHfuXMTExGDVqlUIC/MvBWrgwIFITk7G8ePHJeeHh4cjNjbW4x/Rc7TKdfC5gEFlirsh9sX8i2Fwdfwy5tPtyzNbfCp7q7Hu4qIO77c7qFBRpaZVmRXnE8pYw7WrFqJa5FXj7gC7dERs05zTPgUya5PaFRUpu6aUY9vMUs+JDGuxEaxZFGqp1XwxRK1WLgBw4zsj8ZfHJuDt6y/0mD7iMKsaL8nyVUYpKdHrOR/sBE4JzBdwKhzYiCki+5z8EfVY+sZmXPvlegBAdVobrKauV7kclymWKubt6y6EJYHtqKhl3/DzvVNdfzivBACQWWYW1P681UiY3TeIrpPxXQcAS5wNOYXsO/fEEPXjDxYcMkWrxIiV6IDv+XaEuXBykMUjEFmf2A6XznPbOuiE6z5/WL3mjvTpHOmgRVsfDhwRgSGWlOhEiGIUtafU2sm9GS3FsQPJqezea+di8dOGpH9JjPpCEkS1GGGUs3L0mhyKdi4WLYp+uDOhvLMXTe3uvlZ4u7yNoAfceSug4qIEQfhBjwbRGYbBXXfdhVWrVmHz5s3IzfVN0W9sbMTs2bNhMpmwevVqRET4b0FRUlKC2tpaZGR0LH2K6F5scsFJLq5Qm8iqFf/4zNk498d+ndpXRhnraVyS5V9hUUDaCiKYqJRQMIvJPUGDRZ3BGq7dT1OqqCAPb+fi0rsDZ4LfOQMcPqPWxw7j9IAmJFXLX6/2cAbv3XYEEN9K3CaC9bp1ybV3ueMuGsiqRIarWLSIMTr1+ONzZ+Pi1QPxwtIZANiGtWDjlOF7jygNTvAWHuLf02DTwRHmwsDjcR6DHZ9fW+CxbneoXNQKHutcwLxvclHHeY+rZd+kVbKKvd2TKj2mn85mg7PpZWYMKmDrVBTlsh1kHXSCGt3o4JoYCpVwdYAoQNygeDxBhYYyHFnF0R6fTSKV/siD7EBOwbAGNIuU6E4jI9mRHJwfD4BVogt2Lh2sC92mkvVBEGqQnQsRqjSLgotqGZu9GU3WGQFErXh8KKM1+MuTUd4xEZMOOs2D6M3m0Hs2a81WSKzjC997BtFjmtxBdH8z7nqzZz9BEIGnR4PoS5cuxYcffoiPP/4YMTExqKioQEVFBdra2A4+H0BvaWnB22+/jcbGRmEZsb/58OHDsWrVKgBAc3Mz7r//fvz8888oKirC999/j0svvRSDBw/GnDlzeuR7Ev5hl1Ok6gEGDOoStAWAtDCYCwAdH9qAMIcBMdDYsGGAfeOrJAsTBgtqBVrG7kvtpiPpndg0KosT6sIRLuN3DrjtXMTXfVItp4bmY+lewbLalHZNKos4iSJEW2eVYNrPK4Pq2m2JsisGBA0OHWwRLuSeiEXOyY4N/lz74TD8e8l52DbpKqED0xRnQ3O0533CN86laItywKVjPCxL9NyB//2fOzBA4di6unDR8cEN+OrKE4rLmKwG6Bmd0PFQGzicsZnNDFt1lXQWV0aZWdgG7wm6c0oZnNyAkKBEV/htGT0wqIA9bwVD68F01NSyG7EbtN37aZWe7xPxwNsZ+1MAsNdFs5diTMobvh+XNVWW2YzIdqNQyLYjtIeHXpo3EVzwlkJNfiowCaInYcB41LPoy0p0fwO/3kQ2a1T6Bmh/wYwWJbpYZJFe1vFMYK2CLy11W4KNkwO1iU34ml51ie24643NaItg2zTjd7vtXcU2edCgeSrPDJ4+EUEQwU+PBtFfe+01WCwWzJw5ExkZGcK/Tz/9FADw66+/YteuXTh48CAGDx7ssYzYtzwvLw8WC/vgNRgMOHDgAC655BIMHToUt956K8aNG4cff/wR4eHavcSInsEFl3wwTQdYTU7UCkF0edsFrfAKyMKBjbAbnUhHivpKDIRjXB/Eli5qCrF+JdGK8wllbCZtSnS1xjJv5yIOymeWmJFe5vbt5IOS4vhie5QokCcTd5QLcOSPrMfrS39TPK7uRK2gpJGzCJm/Ohe6Dspv9YwOCz8ZityTcYhuNiGGCwJ5K9GUniuMnu0IhtndnUd+8GP3lErENfoGNif/yGZAFXSxynrF7w+rLsMXo63lzrfaM3TeNzkeny/5cqDH4OWII4mCKsoSbwUDBq8s+w0uo+f1qhgW1wFmTtnfHGvv9hTzjlA40KKqAv/b8nN8pomzrAYdZwdwT+U0eXb24P59xPDPkYpMNnvC2ypGigvWSxdJbwtBr1QiuODtXJpibCEx8EUQANBqdoAR9XzL+mgQ3aVjVIU2akTKFK6WQ63uTSijpbCo08A+J03tephb/bOlFaNVQGaNcPlYwwU7Wtt/I44ksoFxHfDZtQX45rKTAIArVg4WlrGb3N/d6FDvN5zKISU6QRDa6XE7F6l/ixcvBgDMnDlTdpmcnByP7fDrREZG4ttvv0VVVRVsNhuKiorw5ptvIi0trfu/IOE3p3KaFIMTrVF2dxDdT/sVKTJLzTA3hcER5sJ9L/8Ig07DLSE6vrULgtQaQ8coqxBcwEAuiEN0DLu3Ep2R/lstbZP3S7dGunDfP8YBYAs+ir2/haCkKG7/63hPiw2pY5G1SAGw6soTQRP8kCqmKIY/1/PW+Fp+dZQMrrimd4pxrMWkGPWtS2r3sOUQPw/KJTrkfONdzWqls+QPbwAAmJvkO2etUXaceewDbJrLFmdWUzTlFHo+I164ewbWzboMb950Ab654FKcuT9FsL+xm1xoi3R4pOPauYEmtQ5mq9khFGsNBbXa0RF1ivNH/ZaEO/99ps90e5j7mcF779cmt6HJqzjj/S/96LMu/xwp49RSmRqUbINknvGtMU6cu+dTHDizewvLEb0H3s7FaWTQaqZBGSL4OTG4AbO3fukx7clHd/fJ4qLNMTaPwYSOUJfq37ua0QMOvXYbxFDCn8Kit7w5qlP70iwg04XegLnLoNwnSUI8ztqbiuV/m4Rwq7uDc9ebW3BkZC1SREWDoQfCrOxF7jCp93VO5lJhUYIgtBMUhUUJgufwmFrF+Y3RVsETPRB2LjrocPZe1tbkfzfk4Rhz0q/1f55ajhrOXziYaIm2KzaQE2pNiGz3T0VCuGHAKBcWFQVWtSrRAbcaPbkmAmMOJAFwpy0CgEHU/7BGKnRGNIi1q9PbcGBsjfqC3UBDgnIQ3WVgA75n/RI4C6JBBfEAgL0TPQcj9IwOSuKdqtRWDzsXMZWcx3p/kRd2XRLbuToyWvnZ1ln4okjtCj6QtgiXoGQGgOwi9eJWT//xXADAc3dPR0yTCTmFcbh01SBM4NJmo1qMQpqyJd7msf12LsWW0St3YBrjrEIw3t8CXT3B3nMUBrAATNiTJlnw+rG/TAEA3PXimcL7qzapHS1cEH3sr2wmVP7weji9gg0ZpV5KdA1B9OZoO3RSjwkdmxnxpYxND0GoEdXqvu8butlbmSA6wleXn8BxiYyw3ZMruv9gepiG+B54z+qAH70L3vcSyvopZzSI38PTt/Xv1L78qd/l3b4FENTqdIUa9ACAWjRg3/gq/DK+0qdt887th30KtsZYtCv+i0mJThCEH1AQnQgq8kbIqDVFRUXr4tmgtb+FQOX45IqLBLsIrfDV0V0GBt/OOxWQ4wgkgpWLTFtpWF5i9x1ML6TV7ACj0Q5STTEabjUIwYhTuU0A2Gt77tocbl9ulZTRLrNTiYan0eYuTipm2hZ3Md7ZP3yJqhTlArTdgZbidMOOJkCv1sL2gznrsgEA6y72zSbRu+T3U57ZChP/O3gHKLnVmmJs+PCKuQCAqnT2/OYPb8A7tx3q3EHL0BxtExT1TqP2DtKII+rPgZveHokDQ67H9e8Nl5yvg04IgFeltXpY81gjuBOk8rvdvmITKrgBiO4udtYRZN9THOIsEjHz1ubi4OAb8Lfl57gLYyW1C3Yub950AQD2vVKd6jk4yyvR65La0Rbh0FSY7LezapB5Wt62q6sthojeiw46xDSxavTLv1kDu7H3WjUQoc/nV+fjhQd+FT4nVkcIxZr7YnFRXjkd09Dx2hodYd3F/gmVQgXVdynXLNO5gKk/ZHZqX/5kYS/8ei3ufXmb8PnH6aUYWrwCK6/N79QxdAVqmbGjdUOFv6/9aj3azZ7vnPUXFyGlOhKxdb7CJC04wwAHE1rKfYIgeg4KohNBRXG29EgwP+J8ul8jHJwHcYJCAUB/CHMY8MhDk6QVe95w73hxUcd1lwSfpYvgsSvTJhl5iILoncGfQF/WKWW1rw46pFSx6ZlfX8EWhhxUEI/xu9OQUhmJ9kh3I1CwEdEQJ808beZ34MGog0ken9f8ruc7NVqC6EPy4gO6z5mbWb/oI6PrfAotKhVtLclqcg+6Sb1BGcCSYEN/LnhZndqGeK4I5KNP/NwlwabTWazFR3SjuurmubunI67ehKfunarJX14HHdIqzYrL8kUG+eCy8CzlV5FSPokmVWS2Cmm8oWDnUpLVpDhf6VpNrYqCDjokcynZ5f1aBNubhPpwQXHubQ0UV28SMiBqUtow4rD6M7wkqxlJCu/J/KFdazFE9G74othFgxtROJBUfETwsvStLXCI6tiEWw2Y8DNr89kXi4vyg9bhMll1XcUvE6u6dX/dQVuEQ7bvysOLbpKrIhFh7VwWsL8Csq+ucFs3/unf29AUZ8Pdb2zp1DF0BS1RdsUs2nZIZ6xO3ZaBMJseNaltqEpv9RAYNMf6FxQvZEr8Wp4giL4LBdGJoKI8U1oVG8UVYTmZzXb6w9sNAbUjue31MShKuxWX6S9QXpB7wbdEu1/M284rQYs5uDwV1aqy9ytVt3Eg5NFkOcEFCYdwaiclxMpVnQuYsy4HBpceF3kVdmyK136dNSZIL3tsBGsrwqvfg8HXX+16BYAh+dLq3o6SXh6F2AYTXAYGJwd5eiEmV8l7Th4dUefpie4N94xY9OV6oTjs6zfPAgC0Rzpx9ap1nTtwCSo4JV18vXLx7JTKSFz/3nDkZ9+MW94aHbD988VFj3Fe4WFemT0OP9TxdYnK1j7BQE2K8jEOlVGii+E7wvygMMAGJTPKpIPor91zQAi21yW14/xNWTCq3DYNCVZEcx75eonCWqezm9AWQcoromOIn4M2JXszgggywq16IUuwrynRGTC47vP1AACDQ6Et0wWuH8UDlAegQ5GTgy2sfaaG83V2ACwJNXuiczTH2oVBEy3CiZ6iOlHhPmSAcka6hkvW6RihxlfBsHokVYsGGfyMch1w5fm3AkEQfRYKohNBRXWqdBA9ppEPojcAcCsfA0mE1YjBumxtC+sAA2fpYje5urxooL808kFemfZShgY/XUIeTWpZ7txrCqKLlpm0IwMpXCP5ljc7HuhskKlyv2NaOSJaDYLtx85zy4U6Az0FXyxYiXlrcgK6Tx10wnn3TsUdoJA9UDjIgjA5Wx0RZf1bBLuUn6dWYMkrYwAAP80ow94Jyp7a/sIX84xuVlaiDzua0CWdqDjOzmXfOFZl5q3kd0oVi5I5DLG36OHRtahX8cvvCZQKKeqt7ACNGrEWk4eNWHpZFAwuvWwQ/bEndgl/1ya3IbrZhHPVvFX1gJELkkR4/Sbh7QYwetaChyD8gQGDPRMrPGJGQvYbQYQAJrtBqCuh5mfd2zgy2l0YO7tQQVDTBfHWlujgEhwFAqH/p+F8ie0UO4o/di7hbex7/8PFR3FkZK1HLTHvDMyepiy9WX6mDmiBdD+hLLNFEC7kD2vAk38513chjfVs9zFHtC1IEESfh4LoRFAhp0Lkg+a8Ep1XPgaaVF2S+kIciaI0+WDzllWzx6AgeueQtHORaECnVkQhtlH9Wh12zK1cnbcmV/h7xNFEaVV0Jzo3tgiXUKw0+2QMXAYGm2ef7vgGA4CaFcD4n1N9CgYFAj4D4PjQBo/pSkH0ioxWQcUvC9dgj+OU4esWFOKxv07BGfuSAQCXbljtUziyM/BK9Ig2mewcLtqVrsFHuyPEcb6qe7iCm1EtnsF8p1H7d+WDuofG1OD8HZ/jd2vXBOgoA4NLx8AeJv990lWsb3h00Hl0aPlrkX82F+XK3xO87/wlqwaq7odXupusns09/jcTe9gThBbWXHYSF2/6Whi8A4DmmN4XHCN6L0abXrB9qOhjSvSNc9g6TnO/yel2+zSXEWiN6F3PigI/RFRn/xoIJbr2ILqDa3s99+AvOO/nz4VsQQA+GZg9zamsBtl5YrvVGC/bworMFkEQc2R0LUYeSUJquajf5ILmaNdvrmPaFiQIos9DQXQiqGiUscng/c/3nlUOoGuU6ACQrNNuGcGIfH6DzVtWzR5DS1E6Qh6tna7Fb4/UtNylXw7CglUDcckXA3HNR0M95vG+nT50ItWW9wblvdiPjKrt+MYCQGl/5RTftMquuV4HFLPB8tJ+ngoYJR/7xjgbrBHS1gV6Jxc85d6shYMsCLPpkT+8AX/61zbc9cKZANjAZk1K4NT/fDq6UkFUAOhXKl9ksjOkVLHKa95uJMZLEd+uZvUgupb587LyGrbw1dHRdShRuT66k9MDmhRbTmf50Uket8e9LN8JnLCLvd/fXHpQSH33tgur5QLfY/er76uSG5TQeRV3jeUGoimITvjL+zcfBcAOyPI0URCd6EFcOgafXZOPohzfwcdms297OMyhRyb3PvTO+unt8Mr7UYcSUZHeRZlICu3ToyODq7/UWQq8RBhyGBw6jD6Q3On9KXqie513Z5jnhFaRFWmwib8qUuTvQ5PNnUl33XsjPOaVZ7Ri8vYMAMCn1+Xj6Ig6TPlRVLzV+1pU0HTkMT1fI4ogiNCAguhEUCHnz+qtnI5v6Bolegq0F9ysTW4XXsZ7JwbWnqGzqCnR00mJ3inWX1ykuozeCSx79ixN20uoj8B/b7oQb918oY9yfcX1c5BQy05LL3XbRKRURGgPpHstxw+yWLkgSH4PN6ZrUmTUULyCukzdHqMj8PeBd2Gx/iXyweb2SAdbAAmAThQbDm8zwNzsVoLrXMBvZ9fgnB3pAICPFh/D2suKhMKRgUwh5/0u7WHKwep+xV0TRPd+PguDnNzzUc0vecxv7gygei4b6dhIt2Jq23mlATjKwHBysLJ6a8FXuYrzxcxf7VaS89Y/F3w3QJj212e3AwCOD2nwWI+/drTcF6cHsANE3rVdYziv9NpkCqIT/iF1PzeTnQvRg3x04zHc9eYWTN73P595x0b4Bm0NDr3w/KxNaYfV1Hc8/fmB06SaSLR01eCXwnj+nkkVXbPPHuKESpuAb8dmFccg3KZuBaiGYhBd4ryf/22W5KL+KOi7g9IM+ew7PvsvEuF48ImJiKt3C+ma4mwY81uyUBPolo++w6zv3e0o/pwI7XWFyFcZqsAwXVAMgCCIXgcF0YmgoS3CAUbGjeDc7Zken7tKiX6O/kzNyzJ6IJVT8u6ZVCFt8dFDCEF0iQZVQk14QIuy9kWq0tRVxPF1ETC4AvOITatkO3vtokGmUYc7rmixcorhAi6DoqcVKbIBGK4t2/90FwV/Oe/q72efxov3/QqHgT0vSsp3p5GBlQsiRYjuI4NL51HwieF++gm70oRA+sY5p5Bawe4zkMXM+GdPs5zfKPccULKp6QzeQXTeI93AKfMdKnYuNpN7fmMs+x1s4e5pB86ULijVE3hnLXgza+MAxfliLv1yIO7959m4+/mxuGLlEABAdLMJt77O1kI4xVm6eHd2yzPZY0iscw+kSVrIMIBNJmvCzGULhEIhVyK4EN+vPMcHN3T/gRAEx9ZZrCWdS6L+Bv+8FOM0MnjrzoOCzVVfsnSpTWbbrzGWMDjCAhwwlNucaPp+rnZKb6Gsv3KbgP/uww9rF2kpEdUWhsgW7X24iT+nY+HHQ32m97R4xpuKVPl7kL+vx2AYIqxGbJ18Fe7/xzhEW9h2TE1KG56/ezoAVugwZl+SW3HOB9E12Ow54EQpgksURxBEcEJBdCJoqFRoxKaXm3HvP88WPsd1kRI9VhcNMyTUfTINw6RqNmjmCGOwcU5xlxxTR2iSscUBgKHHtFvWENI0ahgw6VcSOLU/r15uSHL/rlnFMR4+gYp4tR1dRgap5ZFoj2IDbMXZjbJZIN2BNVJm39xx55yM65L9ZojsTf758B6s+D1bVEitcFMrZ6/hbWsupWDfPakSX8+9BBmlZrRGO4QCj97q987A+5q2RCv/hgNPdNF5FAXRE2sjENPEDnIaueLLDpNyR91qch83X3hMHKw+MqZn7YbEKP5uDBDbpP3dFOYw4IF/TMDfHj0HZpGP/C1vjgLAFswCgDyvIHoll4Kvg04xG0X8fHB5SdGjWrnOZ3LPFhUmQg+bhGr3jbsP9sCREARLe6S8klyqePJvZ1fjxQf2CYO1fSuIzg6cWhJsAS8eGtWirrTOGx5cCujO0BbhQH2iSn+AO8dn/ZoSsP0m++GL/svESrz8h5k+0wuCzIa0NlG9LTLSMBgAkFkWjfv+OV6wKCwZ0IyLVw/E+RtZ1f32mWUwN3naCkoNsEmxx0XvMoIg1OlQEN1ut+P06dPIy8tDXV2d+goEoYEyuUYsA0zakSEUXgPcRdG6gsGQUBLKNDTFlebXXhI8XmpKdi5nB7Ah11fR4v+aVRwbsP1FN/te7xnlZg+fQM3wqpij7P1ksurB6NVtKroSKWUjAOG+G3VYe8Fff/CuDbBhXhEAeCjKpWjl7FzEiQatZgdyC3x/853nlqM2qR1jfmMzB3jf8gef/ylg6k1eid4q4f0qwHSlot99HofkxSPMzp6YcKu269Mqsofgz22r2R1YV+2kdiOlCjY83pYpHYU/n82xdjRH23wyRSpFQSE+UM6AgdEmHxGJavPsUApKdPJEJ/ykvpuLERKEGu3h0gPIr/zffvz1+R2q61/y3WocPKMm0IcVlPA1Nf72jPp58RcdIxNWEL2aSrJUlNshBD+ortfgBjT1h0z1hTSiaOnixfGhDdAzvm2DE0MseOuOg7hs3Wqs59q+PUljjPp7ZbjOs5j64IJ4AMDt727CCw/8gtGcNWDB0AYM4O0Lvb76uF2pOGOffCbvXfbH8PRdgb83CILoXWgOojc1NeG1117DjBkzEBsbi5ycHIwYMQIpKSnIzs7Gbbfdhj179nTlsRK9nFMSBYEAthJ3TJMJZ/3iLqI2+Hh8lx1Hgk4l+CkKlFRmuIMZP08NHp+/JgV/0vG707vxSHonfKBPiawA+k/zQUkx/U6bES1WWmhVpfNwjWq+4GB+D/ojOpUUIgyQdaprgr9xDSb0EwWWd0+uQIvZrtpBaeIsR5wGz5Pu8sqwNbXr4TIw2HNOJYbmxQNwW5wAbkV7Z7FwmSdtCmo8HQMY5Dq4nSSzxIxYbmBz3J5UhHGDO1Gt2lKO20SWI+3c32LrooYgCtqVZMkXOTU4AiPrM7eECeezPKNFCKKb2tnfT+xjbhI9G6Zs7+exHfHPbXR4/vbRnH+/aio6QYhgwChmDRJETyBV7NtudOLxx3cJn1MqlQfHl7y7KeDHFWy4dIxQd6Qr0NKmaexF9ROEou5OhXe/DgADjz5sZ0lWEXqIOT2gGe3hDvz+NdYm7oWlMxDeboA1wom/PbMDO88tx+OP/xywY+soUgWAvfG2XOULsjfG2/D03/YKVq8Fw+qRUyideVmfaMWa2ZcK7SlvalGP55f+TFZ3BEEooqlH/cILLyAnJwfvvvsuLrjgAnz11VfYv38/8vPzsXPnTixfvhwOhwOzZ8/G3LlzUVBQ0NXHTfRC5HyZJ+5kg745RbHYcukNWHXjVbjyf0O67DiipexcxIjaStYIJ3RcrKcuqR01ScGRGt+koESft0Z74TtCGrucclpETmHHlehXrF6DoafexY6pZQCA218dgwGFnn7W43alIU5UG0BKBauXCupxk/iOFJ+a31NFhhgwUIrthtn10HeR85gOOqy94DJ8eNVcpFZEwRrhxPcXFrPFnxTi+i1cR9Fp9FyoOdrzvuOLIRUMq3dn0uiAL+ZfjHevnY3sos5nK9jCnGjjVNtOBX9TqYGYQBFhNWLj9CvwyeUX4c9PTIDJxu5L1qPdi/YIB8Jb2XX461Gcnq9WKLk7USoIG9MYuAwpXo1+KrcJhQPZLJFxe9MAsM933r8/SmQDM/ZXeXVVQ4Jnh5DPtvAuWkoQSjA6YO7anJ4+DILwwCpR7Ja3veLhrdTkODGk57LxugtLvNWn3RJINI3TG4Dy9N4xeFvOKdF1EkpvMVmnomEMUI0kAEgv024X6Qhz4YfzSvHQIxPx/dQrcN0Hw5FU7SkUCYYC4+0qlpIzdBMxWX+WxzRxhjoAlHJZDvnDGpBdJF0DqDinETpGh7lrsxX3F2x2NwRBBBeanuh79uzBDz/8gN27d+Pvf/875syZgzFjxmDw4MGYOHEibrnlFrz77ruoqKjAZZddhh9//LGrj5vohRTlSivRhx1xvyRH5adg6p6sgBVslCIa/nlZ8+lkQPBUO5cNOrkgmdZHaKc1wq6po+DduPOH5hg7LAk2IaPgrF9T8fS953os4wxjEF8noZgW9Y8yS+Wv5cr0VsQ2mITvcipHXmHblbRHOBV9OSM1qpk7Ska5GRd+m42Fn7ADc2svKVRdh7ca8e6MVqeKBtEYgOH67AXDGjDmABvg/GV8Fc7em4p5a3MRZ+l8bQeLhhRYADBptFbpKDlFsTh/0wBEWI0Is7P7MmgM3NtNTsQ1sufCaWRgNzrhCHMPVFkjnbCFaciX7gaUvHMzSlUGYP1gMKew+vTaPDiNDKIbwzD2F/YaYvRun9/4Ovc15DMoowNia9ggu7cFFR9EP53djBYNmTUEAbDtB9lC0ATRQ0gp0cu96lf0K4nGCIXijt5Chd4IXz9F18Ov023nlfbsAQQIvvg3o1cemJi7Lieg+/W2IlRj74QKRLWFYfTBZDBgUJbleW80igbmewqrRK0NAQb4T9gjPpPP2ZmOcNHg2Klsth9Tk9omm1HqCGNQnN2I6z4YoXg8wVZ4lSCI4EJTD/eTTz7BqFGjVJcLDw/HHXfcgVtuuaXTB0b0PapTfIv/AMDgE/HdehxROu1ec4Cn76+cmr67kQuih8ukrxHaOT60gf1DRcyTfarjKmPer1hcKPL8TQOQl3WTsN+qtFbpApiigHSmglqlNrkdQ0WB/vIeStFXypoAgPguKiLsDZ+hsXFOsay/Ko9dFOA1OHSIaGHvqxNiX3nR73BoTDVGHkpE1qlotJkd2Hp+ScCO2xLLKojMTcqDDV09GCGGV6LHNomU2Qr9M6ceSKjhfmed9PPLolAsubtoi3CgOVY+4Dy4IHBFm+esZ1VSa353ktt2PFKq3UF6XhGfXu6ellLtm+K9+B227cZ4jaG8+/tDMHCFX0+QGp3wA7l2jtpzkyC6CnFhdIZrJFVwdotZnCI1vj4CyVWebSZxMLk6tU1Yt7fSwgkAusjZzY3Kadw9OXjsLzsDH2h1KGQBAsBlnw8O6H79UaIDwKEz3PXrLl+7xme+y8B4ikB6AIdRvpE4eU9/DNb71ivLOh2D/cOvxyu3nwcAKBxsESwalQRj//7jfszcnIUYS5jsMnkjqOYfQRDydPo12tjYiK+++gpHjx4NxPEQfRi54nH+jrh3FrNOQU0o0U5qj3Q33nvSV1pMk0zAqavVqH2BYi2KbQbIKOu4KtXMWTR4e6/HWyKEQoK1ye1IrXTvQ6q9yAfjpXCGMR5K9XIFm4quRC2InloROHWvEmf9koqMUjNaYuz4caaKSkr05kyqicSsjWzAszKzFWbOp14n6g8cHVWPmuR2IVC/Tkbt3hBvxf6zqnHUj8a7JZZ9bqr5j8cG0GpEjTAuiC727VQsvKUH0kTXck2yb2euMQh80dW8oAeekPbg7Aiz12fD4NAJwY6heQkeQXT+HInV55FtYR7KdABYd6n0tXZyaKNg/3N6QM9koRChR3u4A03R0s/sqlRpIQRBdDXFue5nGB+MK+vHWjvEcfUlwq0G/HaWZ/HQ6VvddSTazA40BsFgbVcitCm7OiFVZft7zukdQXRNlh8MMOpQUkD362+/+BjXpizp34Qd08oll+Hvl55CqTbS9J8HwMW4UMZU+cxLrIvAjM39AbAZtYOOs+0wpf7umktPYPfEckVxyfcXnsav46pgiev5tidBEMGH30H0hQsX4pVXXgEAtLW1Yfz48Vi4cCHOOOMMfPHFFwE/QKLvYJEJkvg74t5ZzFAo2CLxjhf7LgaDEp0B45O6zxNBQfROI/zeCp2EqBYjwhwdP9d8EL1FwlPa4OSKCya1IaVKdK1K2Z9LRdZFwUxxYdLyjJYeUWHxQWA5ck903jdcC3pGh4u+yQEArF1QqKqk4sksM+N3X7hVRlGt7O9+zk/uAr6MHvh2XhHmr2aD6N/NPSVpT7Lu4kLM2fYlnnhsl888OXg7l3CrchBdrVhqIDFxdi7igK7Rplx4K73cXeD1FBcQMdrd6wSDEr0sUzmIPpSzYAkECfURmPpDpvB5SF480kUDc7yH6bBjbnuCkn5NuPaDoR7bOT5M3ee3PJOCn4Q2IqxGbJlyleS86z/b0M1HQxDA51fne3zmrV146y2+PRVuNcDm5Z0+m7PZ4Ae9eyojr7uQalP2BCcGW3rcPqSzuHSMJh/9mEYTItsDmwmYoWDVKEV5vxbYjU5snFsMAMg97tuu9rY/6m5cUoWdOPqVx+A158cYaD0fn3nd7wCQUhWJuHoTXAYGyVxGXln/FqTLWOy1xjixYNNq1KTKe8GfHGLBRVtWYdaPX4T8tUoQRODxO4j+ww8/YNq0aQCAVatWgWEYNDQ04F//+heeeOKJgB8gEdrUJbbj84UF+Hxhgaq6si1KOhU4WSJFvSuJkfNEZyB5xzSLAtZbZ5UIPtY9RUuU3cNPWEyUgjKZ0EalBrVdUk3nApZRLWyDm0+9FWPkioXWJVqRrBIYFa4DcdtUFNsXB9l7SoVVlaacQjrqcGAVPErwQe5v55/SvE56mRkjD4p8Vrlz6t1pWndJIcbvTkNKZSQsCTbc//IPqPKysOILxTb4obpu5AYh1AqHipXeXQ2fAREpCuzrnQpBdD08BoROZ7FBdPF3khtk7U7UOpkjD8oX9uwI80VFoIfkJSCz1D3QUJfEdv7G7UkTpv0yoRKxTf7bH5Vn9o4ib0TX49Ix2DuxUnJe3sj6oKldQPQdjo707Fu0c4HymhT2GRnBvYuNdp1HwWoWBimVkULGD19wvbfCF0XvaZxhjLasziDm9IAmtEU5VP3l+5UEXgiW7Gcfw2VgUDiwEQfPYDMxxu9O81nGw46wm2EYRlGYlF4VjXsd/wQA3PXGZp/5OugwYTcrXOFrvBQMq4fV5373xKWgfgcAo02P0zlN2DlVWr1PEETfxe8gusViQWIiGzDYsGEDrrjiCkRFRWH+/PkoKCgI+AESoc3pAU1Y+t/NWPrfzfh2XpHist4KEZ5AFN/zB1k7F/4Fz3j+n9ED4W3uW+mhZ37qsmPTQiNfaFCibeDhUUx0iBoNvoHiYFdHkLNzAQCTjY2C1yW3IUFcWFSiAdpsZoPiOq9rlqch1vNaKRwoXdy3KynLVO5InflrSjcdCTBpRwYSayPYAKUfSvSH/7lT+Myr4PQuzx/kh5mlaIm2C2r3/12fj9ve3+ixTBzn/97oR/poYzRXKMylnD/tkbXQxfDfo11c7M2gfHzi53ypEER3j/gEQ0qtOOvIBwYYEkAlOgBc9E2OoJAclpfgkcLNB74HFrn3eWRUHSLa/Fe89bQCjQgdGhKsuPO/38vOPzmo5wIxRN+k1UuAw7+DaznLK75Gh0uix/vQ8zsweXuG8LkhvucznrqSVglhRk9xZGRtTx9Cp+Azj/Uqp3TY0cDVSuGJ7UC/+PCYWuGYx/zmHvCP5eyOCnrQjrQG9YpB9MyKaITB3baRsg6bx4lgCri6VflDG3DG/g72H7j2f0wj2xfbOFe7sIYgiL6B30H0rKws7Ny5Ey0tLdiwYQNmz54NAKivr0dERPelixOhQXRzGGZs7o8Zm/tjgEqhRYdRImrFAOG27rUgidYpqwZG/8YpY0Uv/BiR3/C6i4uUq4x3MUr2GPH13Tsg0Rup06BUGlTQOW9kJTsXXqVektUsGxg1cNYZpf3ZQJvBId06LRrUyAbpuNmb5nR/Q/FUtnIQPbcwcD7TahidesxZm+3XOkU5Fvww010olP/NIsRKdAawm1zYOKcYd700FlM4m46fp1agTKQC5gPJ/nTk+UEzl1453TS6mwbQLHFW/DiDPR/NMTahM6Lkdwl4Fj0u5jy6eW91AEHhVat07+tdgFEqStMJ0irNePpP0/CXxyZg4Ik4mFvCEN7Gvg8Pj2EDEGJFWtHARkS0e74vM0+bla10AJRnkJ0LoY3EugiMOiifHbRlVgn+tyiv1xdoJLqf1kg73r/5CH4dV4X3bz4iFBNti/SMYvJ1imq5bB2jg30u243udrk48BnV6s7QDIbaG11JsCjRAba46LbzSrA7RP3ReT90p1y3insEjpNQfXeWyHYjwqz+tTd2TSoXAuVTt2fi7ufHAnDXJepJO1Ipr3Mx8Q0RcIi8KDfML/JZZs66bOidOpwcyg7klgxowpP3T8E1Hw7Fnx8dp3wA3q8rrslUn8w+D7yzXQiCIPzu8S1btgzXXXcd+vfvj8zMTMycORMAa/MyZsyYQB8fEeIMOh6PlZfNx8rL5uNylerkTr1vp0slLtQlxEFZRTw0P8Gn8cKrO6KbwtAUZ8P2GSqFCbsQS6x8oCe5snutcXojDQnqnazOFhHi7TBaJTo88ZzKtySrWdbnOq6RXaYyg1Viufh7yyuWVjTQ4hGI33zB6U4dd0coy1JQwTLdq6AGRBYaUnFHibjQ5tklsEW4H1RObjDQbnQirSzSY1vrFhQi+1QsVl28ABN3sqmn6y8uEtaN5exc/FGi8/ZR1gjlgbvobrJyspqcWLXwBADOx5w7Zy6J57sYsXULX+TWJBpA9cfipqtQCuR31SDFTe+MxB+fO1v4zN/zu8+phEvHQCe6UBvjrL5KdJ16NtfxoQ2KfqQEIYZPm5fikad24v9e3yp47xJEoHj0yZ9x/8s/4qItq3D/yz/iqYd3A/BVV/N2LnwQ3cBZieUPdyttz/3BXVDULrIgCobaG11JVwfR1QZsxeycUo6FX6/Fgo1fC7Z0oYSq/Ql3Ks7qomxKf4vFb59eivpE9jwPPB6Hhx6diBiLSbAyOj64IcBHqJ0Sl/JASl1im8fA7PcX+vZVkmsjMWkH+26KajaC0QPtkU68fOd5mL96oPIBSFy2Iw66MwjyRvScSp8giODE7yD6nXfeiZ07d+Kdd97B9u3bodezmxg4cCB5ohOdQ+IlZrR3fyHMWJUgesHQBvzuM88BAb4Rn1bOWsEs+mI9ahPVbT+6Ar7QoBRZpztnM0Jos5UY+0tqp/YR1SrviZ5UwwZmKzJaENkmHRg9ay+3f+6ecsk4PLTEOJBc7bYvyhte3+0KwvJ0+SC63qWD0RlYda8a07b2Q3RjmOTb0eSH8qcyo9Wj6CPANvxbI9lOLO+//tfnfhIsEPgBkvZIJ9rDtaVd83Yu3int3kQ3d48SXdyxq0+0Qq8xiO4Qzee9bE0iJXowBDeUBtA6WwdBK4v/OxIA4DIy2DeOVW/xgXRHGCOoLnkaY20wOBSuWxdQld6K/WdXd80BE70OcdFkOQ5x3rsEESg+vfb/2bvq8LbNvXtkCDMnbdOUkjIzbGWGdR11zHzHcMe7u4NvHeMdM3ZQZoaVmQNN0jDHAccxf39IryzJkmwnpqY+z9OnsS3Lsiz4vec9v3P4gYKfP3gSr768D3vHlfGeJxPKdQIS/eQQunsnrFmFQUdtxCY3j8kfsjc8CY/YuXDm76/5NQuhTLdkUKt8vXRmgM3OZdOMi2/Srayzc1kiWdlxjhdqA0i9KIa0ojA70UcuE4KaUBWKMJ0aFCieBV1zlNFnmV5FKJN9vSyF37HKnRDjYjAzYRHJiBpyGOV9rzzXLXVSymxd6ZWpLT7POwsggAD8C21iJ4YPH46FCxciIsJGyM2ZMwfjxo1z24YFcGnBqDKLkuihWu+T6KJKdE4xcq5PHa75NZP/OsX7DwDw2YMn3L5tzkBDSF6R/dm5ONK7G9MB0eCEEr1HfjvtXGSU6EkVNOldH6eXJHWjG2zkuooQkRIcZkQTvSxlpovoCi9bO9TIBLVK2dB4EiF6FSZv7iL6GlGKO4Pirs1I4xTh0fVB0IWbsH0ybXUymxMa+cbztKIusjGI9cB21r6kKYJeziGJ3uQdJXqIXsUOnhuj9CyBa+VeykWOxSOcsEJCZARzrEn8gdyoj5Xu8unkpQnKcbvT2L93TqQ7nlivUAooT+VPSmkjjKiSOafJ3MW+sYHgrACcQ328E+ei1fvX7gA6NnQiBPBHjx1HVQpfsKIPNqE12ARtJFM/CY7FsbvTkFBj63Br5tjm+UP2hifhESU6595++bZOyCigrTsd+Xab1LZCgNzLLiYI77ViCGlReizXS86eU21S2k/sM2VCKqcuzcyOAQDWJs6Z7+QJXLDKk+i53WkyPBU0SV7YrVHUNrVXNk2Wkzqa9a23Uq7b34ytwCNvDWEfHxkubzkTQAABXFpwmUS//fbbZf8FEEBb0BwpXthFu0BauQuRlAjRzCF9jMEWlKc1szdpLspTW7Dwjx4AgHXzCj2zgQ7QGClN9CRXuz8l/lKCFVbUJMh7oitMVLu951lPdJEBT1wds24KksR4Y7SBJdiJTYbKSA8kKUHdGcoUz6TQJz6P3kJjjPSgjmvx4U30P5Eg+jz5XcQwfnsa73FdfCuiOcdBlyL6urJ2fgEAIL0oEs+/OAoAsGV6MVqDTVBYKZaod3YwT5ToxmAHnuhesnMBOMGiYWbbb8jlMUSO2+NDbcpVMiEQrLe1UBDfTl+CKBvFkFwlEUjtZsTX2sgf4m8aAttguVowKWV1cApZGALEH+xyArg4EN7sOLy20kdkTACXHhRmPkmuDzHbVOgmClaBVVV8bQiPSOTeaxs6eLCop+1cEqpDkcJ05HJtcsRAmYGp69MB+DbUsq2oSHMsOEkp99yYS46cr0lsRVqp+Gdf6NaI+etWYNaWZahIJdZ5dKHgq5DxIqv8JH5OD7proSfVFVENQbAorRh54he7IGuirCddvNzxTJLAzvT2z/rKfmZLhAkj99j87FdecV7+SwQQQACXFFxmKOrr63n/qqqqsHXrVvz999/QaDQe2MQALgU0ShAkcfXe9/COoBx/5pGRVUiuEJAmVkAbacQjS2j/2twsDWrivW/pIhcsGlcTCBZtD2oSWqEPlR8YJFeG8nyK24JwrbSdSyTHlqMlwsSbzFEyp1FtvJ71aCbjx0gJ/0Si9lUxZOe+cd5VpLaESA/qgrwcKkzQi1HnCCHnGy2mUqc4Cjiy/zfOvAADM7h84INBSCsJhzbSiJ2TSpn1MOGiTnQ8AECTjH0TF3ITAO5GjMa2L4JaRX5DkdPjQjdbu66B8bTlhmT6A4kua+dS7Z17FTcHIZshHmJhC+0uTXOuxTy8iU+EdvRAvQDcB1244+B0XykaA7j0oBSUSa3BZlQn0bV3fE2oXV5IqE7FI9ErU2xkqCbacXD8xQyP2LlwEFcbwgoGDA4m9q1K4PH/owMfczM1F1UYsS7EJDupTtArp31dqXKIlrFz0YWZMHK/uO1WY7QB+8dV4MiIKmyfQted5Leq8BGJXuxQiU4He0ZRERi5j/5eFWkt+O36bN5yvc/GQWmi0MRMhu0fUwEzE66WXMmfVEi/EIWhB2WsNyng4KhKJFTSNdeqK/ID2TEBBBAAC5dJ9GXLlvH+rV69Gvn5+bj22msxevRoT2xjAJcAylLFB/6xdd4nfUMg8pkC0mfz9CJkno0VXaaikxZdCuki0hfqCjkSPbIpQKK3B878nlnC46INCCNK9Ah7gjmcoyiuTWiFmuMbHaSnScfGGD177liUdNGXkU8fk1Yhp8nUhDXJ9KBzLSfo0hswiLRkEoSIEbBeQGa2+G+ok7FMMQbZDxj1Ibbl904oR5QmCA2xBuyZQA8YFFYKs1bTti5r5tEKddJ98+gnO5za1kYnfRq9ZecCADEaG9FLJoR4ECHRyXEK2NTTITrb7y810epNyFnseCsAN1oTxNockUDQrrB1QZxn2pcdoVd2LOtdCwCaDq7ADMB9mLe8O+Ag9H3DnAs4OjTQ/h6AeyBHXhmD+a+1hppQxpCBaWXhtnsHc8yGaVU8hXBFJw6J7uTk9cUKjyvRa0LRPY8mjo0ytR1BsE4BhZlCY4yBN5nh72A7bRxwqoOPtC8fSQ5yndoWhRUj9iVLvs5FSIuSnWgq8xGJXmiVt/MhJHoEwvHZnVMxdQPdwfDBk0cxd+Ny1MXRExqRTUEYszsVAG1RU52sw6LVqwEAGfmM2ID5zV5+Yx+OjJC/R+2YXIor/qK7yxtiDTg8olJ2+QACCODSgVt65RUKBR577DG899577lhdAJcg8jI1os8neqlFngtnSPTqRB36nRIPi8nJ0iCTaSnLdZLQcCeaw6XJEG9aOnREOFPk95OwAnEFRGFSH2evdOEqiuviWxGqsxFhRPncGGVgST2jih45Rjbbjmul0XZA52ZpkHWGIY2twNn+dXYtkp6EWYYn5343byKjIErUrqk53CDp066J0dvZ+GgEliyNDFFJCHPAFjC6YU4hTEoLhjChtLlZGlQmOx7QNEQ4p5wL96adC6fNOLSl7Z/LDc71NYluhVWWgEiu9M69igLFqtFbw8w4PLwSPZQ2D/+8ns6duxallTex0tjBvYADcB+czYb45u7THt6SjgmjyjH5eKlBTFAgBX2ImVXUppSFszk2JLA9VKdiLUcIFMwur4vr2NdBOSGAOxBbF4wRB2jylut5LoW8rAb0ZurP3ZdfPL7oVUyng6Om0+H7nSOy2wJuV5odKCDZSSuZ7udtavkDYyoA0JNWchkw7kYd5OuW2jh6f0dR4YhsCsLdnw5gXzs4uhLvP3GEfTxlE02wk0yivePLca53HfqcpsfsrojJTw6qwYx1Gezj/aMrnH9zAAEE0KHhNsPZ8+fPw2Ty7M05gI6Loq5Nos939lJYGxdBcEz6tIaZ8b+HT4q+lptZz4abnOvjfSV6S6j0YIMklgfQNhCbCTlk5bRfiZ7KFL/1cXroQvjX1QieEl3HIzQsTEpgS5iJbVc2MwOZnZNLWQVG+gWb739Z52ZsnrCIJo2ZAcG6OTaS1+OQuQuFedGChAuVWYEQEQK/NcKCzHPiv299vB6Xbe3Ee2793AuAyCGzbm4h27o8am8K4mtCUB+nx95x5XjrkQlsJ8s6J7oCNDHMQEdqYMA8H9HsvXOfe0yq2xEOyyX+fW3nogs1waySHn1xvco9jXhOKN7aeQXojnT2sTnIuRFiTlY9NBzCqMHJINsAAli6OMep0cOGWYUBQthFfPzwMfQs/RaHAopHHlxRUOuDzaydUFpZOJqYbi1iWXdqQC2CjEokcLqHglvp+31Ht7XSBzk5Tm+Da0V0fRDUJiWGHE4SFSGI4djQKsxcmwHA+12Q7UGtE1YuAND7nLjYyh3gWhKJoTFK77BjCADODKhj/951eSkaovWYt3EFel/4Hm8+d7C9m+kQWmsLzGKFsgiiQHMCQsvFg6Ns18sspkZX6xXozRDnlx/4Az1y6ckCu5wYmWPdGGxBc7gRYUwOyD+XydvOBBBAAJcOXCbRH3vsMd6/Rx99FNdddx2uvfZaXHvttZ7YxgAuAZR1Erdz6VogEvLpYVCUDOnjRGGZm6XB0EO0mnTb1GKv+/wJSVcuvGnp4CsYVWbsmFSCvJ4at6/boHZckV6+tXO7PydaE4RQRjUlDGjjEot18a2IqbepUYglhj7EhLQykQko5tAu7WI73/QhFmyacQELmJZFADg+pEb4Ts9B5nTz5fEaKfHZUi2ytQk63P/hIN41QhduQmoZX/GmNFKoTtaxAU4qswLT13YFQIeOUqBw21d04NF7Tx6BSSl9zFlgQVMEQ35KXWaY/evNLpQYjlen0uxCmSH4DhGcAENfK9HlrFwAILLRe/uXq0BbufB8mzIYWsPMPAuihg5OHgXgPoSJWTQJENyqREOsAX9cl+uFLbq4YaGsKOzWgOLOjfjvf/ejNdSMJ9/fCZPSgqJ0cYHJpQZXlOitAiU6CU1ujKWv4RvmXEBNvA7RnOwOxjbZaXu0ixU6B5k+LNow900mkpUWBTqVOCeA2jSziK2ZTwyudv1DfYTaBMd5VxENavvsLDfCUWjpoZGVSJTIakmqCAUlOBRCtSoYgyx47aUDOMSQ0u8+fQSn+9d6dBxbZnXe9iuCor+zcAKB66lPRGw5fTV44o1h7DLc3B0eHBzr7z91hB3TnxzoxbFRAAEE4NdwmUQ/evQo79+JEycAAO+88w7ef/99d29fAJcIKiRsMlIrvK9EBwCF1KnhRGGZnVWHKZu6IEivQH7PBmT39q4aXVKJbqUJu46Of7+zG9esWIMfbj/j9nU7UqIP35eElArnWijlQIFii0ShRyHXzqU6UcfzYjYzJLpJbUVyuXTxbgi2QGmgyIfh9l828VS2OZl1Eu90Lwxqs+w5FeXDzgmhNQsBsVshSGZIck2MHgNOJLDe8wSxjD94OEMIk9+Va/U0ZxVt6bJ+diEAYDbjk16R1oLnl/wjuY3f3XnGpqpxcG3y5oQEV4lOQp3agpAWG1nXHGVs17raiyYH5Io3lf4JNfQxpTJQKOnSjOfN7bfSCyjRA3AWZqVjQoV47D766Q6USogkAqDx3JJ/MOr4bxh+5lf2uZZwE+76fhNGnPoFW6YV+XDr/AMtLtiQcJXoKeVhdgS8Wq/A5fv/wPlMm4WENpJef2u4WXbi+mKHLtQ9HeORDfb1BHdyd/gB52xMcntrUNKZJjeLuzZDG+ZZz3Z3wZlQ0cyc2DZNcDuLtFL5scbpAXVsyCvvfcXhaI4w4j/PjQEAqPR0EWlmrB+/v5M/dpq8508su+q8OzZZFDnWQqeXjQL9nSlQ6Hcinn2+Kdrmqd+5OILNe/nmnlN4+tXhANquIj8+tIatn2uSdDApAt1VAQQQQBtI9G3btvH+bdmyBb/99hvuvvtuqFS+8a8N4OJHdZI4iR5fI+P55kFIkugcpBdEivoj1yXqYQiy4LJttLpi7XwvWmNARol+iYSKT9lIWxusnVfgdvWEXAgm4PzAwRmkMGRruZBE5yiKC3o08Lw9uUR4LIcE5iXQM4skCM6tVQvzEd5EX8PPDqh3yo+7vSjs1ij7eqST3ruegJSCqKQLnxCKq6P3o1UB1Mfq8eD7QxDMCUQl5Gs8owgiYak5nJDaMf/QQUhlnbWoj21Ft/xoDDxKe+vvGyPtwfjHYkblaYUsiR6kVyDI6L2Q1s6cgVtVsoxiS3h6Cr5DbQJ/oNoc6bsBtkMS3YuTFCQrpHOx+zq1Akr0AJyBUWXGvtGukREXMuSv85c6vrnH3jveEGTG2vmFAIAv7he3DryU4IqdizbcyF7PcjPrYRHc+qI1wahJkr4vOeo6upjR4iaS+qbv+tg9N/C4LQ8ovdD5e9O6eYWIr6brqHefOiJrSekvENYmYsgUWI64GykO7FwuZDRi0FH7jKayLlq0RJiQw2SRhbXQJ4ghWHry6JgHQ6KPWKQFTwozvyiMhE1Y9+0N03kWiqSmVlgp3PwtfXzuH1OBcTvo4PWdk0rQ/3Qib32JFaF2n8EDs0tawkyAla7zt0wvdvylAgjABdTG6bBjYonXnQsCaB86viw1gIsCUrP6ssEpHoRS7tRgbqohrUrMWpkhukhuZj0bGLhphndVRFIFqLMehRc7Jm7tjFCtCsVdm93uSa93oEQnBL47kMqQ4xVCOxeOEj03U4NUrm0Lpxbkku0z1nbFsy+PBAAEGehjW8UlVZn7drDeNhF61/eb27X9ziA3S/734dqCeBtdCqNEn989sRTBOtu+U5opxNbR21kX34qbvu/DnvvkOcAWkkoG6LmcMOWI5iB0YvIfyPNf3jINAJDfs0FUgd0QrcfRYczAxkHd5U2VNMAfPNYmtz2cqjiDab9lvp8vLV0cebJ7M2+CKNCkuiXaUofrQ8xoDQ7k2gQgD8pK4Ye7z8kuo2aUjbG19PHpTJZIAHwYOFZL3EnZSxWu2Llow43shOtHjx+3e73FASHfkScUW521c3GA0BY1L6AeAKav68r+LWonyAXnHrVlWjEyGQuOjx87hs8e9P9JI2eU6MRWxFOIrw2RHddVJ7dgGuc3EeIwk7tgCLGtZNQ/Kbxl+p6kPcXLUz0nqjljzZN8LbYumHf9i6VsdXnXC1H444q5mLk6AwCQx6mpX3l2LPqejINZZUVJl2Z0z4uGIdiCoSdTeev/9obpmLCDn2XEhZoZLxX0aEQ4o27/47ocp79bAAE4gxk7/sY1K9dg+SLPdXwE4H44RaIPHToU9fU02TFkyBAMHTpU8l8AAbQFzRHig3dfkegqiHRVkKKPOWvK07TodzrefjkAOVkaVpV8rk8dLK7EgbcTOgkSXSk3296BEKZTswEyb7x4AG+8cMBt63ZEBozemyr7uitg7Vw6CUl027FZkt6MuFoOkcb5ibnHXHlaMxtWSsI6eQNF5n11HHXNwVGVqI1z7PvYHpzrI28b0y1fnMj2BuIkCPyirk3onmfbrpZQI3udIj6Z43amsa9rmWtbXRy9b+uZMEfhBEKvnBgAwJJnDwEAuhRFIESnhD7EjGVX2w8ycrLqnbZyISS/t9DLDeG6AFCTyBx/zPfzJYnu6LO9qUQnXqhhOhXu/3AQstDNwTucg84Fy4QALk2ozAoo9fIXHGILYGUW0zvo4ArAHtzOl5DWQJevQyU6p8TWhhvQLCDduYQvsTSJZbrxour5E6Ad2dqqNcQ95+KxoVUwq628btyU0nDsH12O9bMKHaqk2ZrFSmfH3PK1Tdme7aAu9Ac4Q6KP3ylNzroDFCgE66Un2JqijJJjVAA4ywSKtoaaEcrYDe4fR3c+kt81h7EdrEgT7xaXQ15PDX6+6ZzD8W+BRVrZnVATitefGIdp27vhDuXVmKoYa7dMZ0aAUioYK5ExeHafevbvllAmZJghx7+4/ySGH+BbNHJhZCYYijOakFpKf87uy8sCiuEA3IrirnSH8/o5hb7dkABcglMk+oIFCxAcTA/Cr7jiCixYsEDyXwABtAWi5KQVCNH7ZvCggqAwEbFLaIoyYt6y7qLvz82qR7f8KKiMCrREmCSDUz0BKTsXtRftHHyN+BraOmPDnAv45GF7JVJboQ+SkX1Y4VbLDKIwt1OiCxSvUpMjB0dVsiqV/O6NLNEbwqiom6OkB6VqPQWL0ooNsy+0adudRQ7HF1wMfU5JDwA8DakJvKrkFvQ9Y9uu+jg9e7yRgdWMtRlsxwq5blSn6KDWK9gwR+F373uKVvzsmlSKM31robQoWCXT4x/utPNpdbTvuCDb5y3E1YUgpMW+08FVVCXzB27NPgx9q5Jp/w9uVXrVLodMsFWmtOClF8fg46CX2rU+0s7sLoIlgI6N8Bb5uszCjCzMzDXLKHffDEAUeo5iOFR36dRuUnDFE70l3GRHoodxjlmrEkisDMWtX/dllx++10akNUR3XCW6Qcru0UVsmUETn/1PxLM15Z0/bcL8jStxy+8boHexqylMq8bnt04BYF/z+iNqHZDo4U0qUSsVdyNU5lpsVUBSCNP7NF1vkjFCuCAs2qKwIuN8FEzMtbs8zfUx7LxNK/DYJzvwy03ynUslkLYsjK0Lxo0/9MHP9y3EJ+qXEErZ1+WkHqoQWF8SMUduVj16Md2RdTH070bGTSsX5SOtWL5rgkwwaJj31sfrcXJQIGA0APcjRBeYML+Y4NSv9dJLL4n+HUAA7oJFJKhKZfSd25DamVODolXCSiNgFogQz/atg9qkRPfzUcjprUFulgadS9znXysHXYg4ORrScum4N/U7FYcdU0vQPTcKM9Zl2L2e26se7z11BP1OxuOBDwc7vV45Jbq7s2ZSmcBKoSd6jIZPolNWcRL984dOIrxJBW2kCUeHVyG3F618Zn3TZcSExmB6mUc/3YEggxJXLe3Vlq/gEMVdmmRf97SnpBxixUh0K73/0kptRXdTFFeJThfZiTWh6FQSgdJ0/sCjU2kECrvT/sA1STrUx7Yitp5+730fDsKnD9NB3WvnF+DwiCo2oLM11IwDoysw9h9a4W5Qm/HYJztsK3agRPdmR8//PXcASxfnwqKwXdMpC01cuAqtoEPJl161NQnSJHpEs/dU6ACQxgkdtsJqf79yselIZaJgUFrR6qbQuQA6NoIMSgAyymDm+CP3Gkc2aJc8HGRaqA1KWGHFu08fQUZ+FBb94Zn7sT+D2Ll0LYhCU4QedYnSRLc23AStID8jvFmNpmjbc7pQE1YspDu8TEEWnqJXE9vxSPTPHjiBMK0KRuFYy8Gx5wiTtnTBPZ8MxP1fb+XZaZwYXOPc+pnXcrM0GLmPthIpb4Pq2dtwZPnTtSDKo6GiBBFNatTHS2/L8SE1SKwIRXWKrX559M2hiNEE46U39iK8WY3mKCMUFv740KoABhxPQGEPul4t7tqM44OrkX4hEu8+dQQ3f9MHvXKlOw4LujewopLHP96JuvhW/Ou9wXb7xKA2owbSto4x9Y5rV9KZJ7ScIeOHtfMLoWb4hPJUuibnTlLG14qITDjH7V2f9ceHTxxDE0d4tGZ+AQYeT7R/XwABuIhV820WLqEB67aLCi6zasXFxSgpKWEfHzhwAI888gi++OILlz/8jTfewIgRIxAZGYmkpCRcccUVyM7O5i3T2tqKBx54APHx8YiIiMCiRYtQWVkpu16r1YoXX3wRqampCA0NxdSpU5Gbm+vy9gXgPYjxgKEtvruYyJHoChOFcKZ1/7ebstGlyN5y4tRAuoDsfYae7T80Uv6YdSd0EkRIpJd9kX2JMXtosjGsRY2Xnx9j9/qbzx/CX9fm4ZVX96MixXnVi5y6Rq6tsi1gC0MBia42KRHNaT9uCZfeJvJaU7QRL7+xDwDQGMUpuEkdyahRiJctAFY97MhypT0o6yy/76MbfOeJLgxe5SKKE3hqUlvYQFauOmnoYfsWUeJhHc3Yq3CvC0nVYfjonkkAgO/uOIMnP9iJfy4vQ1oJfRys4QQUr3DRN8+bJPqpgbUoTW9mQ6riqkOkCXQXFeq+tHORa9+O8KIfOmALFNOFm1Ab34ogtI/EV5ro814ylDqAADjIdNLr18jYuhjVASW6HFQiAfVctIaacHJQDZY8dwj3f73Vq/aA/gJi5zJmd6p4wDRnF4p1LFWl8CdBm6OMyM+0Bd62cCZsz/dsaOfW+hfO99TgpTf24skPd9kLltrJ885Z2Q2L/uiFCdv41iU7JpUgSK9wev2HRlayNW9Fqtbv7TIckeg9c2O8sh2OauSTg2vsr9cU/bspTRTbkVqXoONl/QB0uDEXbz1zCHd/uxlfPHASd/y0SfZz184t4D1+7T8HcGpgrd1yf10jz80IRUNiIBkx5QI7l74n41kx3opF+QCAvIw6BLXSz6Uy74tqCJINuR+9JxVKE8Uj3veOK3e4XQEE4AiNUXrc+ZMtfyw4YN12UcFlEv3666/Htm3bAAAVFRWYOnUqDhw4gOeeew6vvPKKS+vasWMHHnjgAezbtw+bNm2C0WjE9OnTodXaLoSPPvooVq1ahT/++AM7duxAWVkZrrzyStn1LlmyBB9++CE+++wz7N+/H+Hh4ZgxYwZaW9secBaAhyFSaPmyrcWOlOBsX0p5GEbtpRUTf1+Th4lbO9u9vy5BD22YkQ2aFBYUnoJZYZFUfXnbF9mX6FRCK4WFRRUA3PfVFqxamM8+FlpGyEEnE8oUX+VeywyuZYMwWJKrnGiI0UuSkVaRK7w+1GILIxKQmzyygwJG/5OCmWszXNxy52CFFbWJ0upehdl3dk4AkCDzeyosnAsCZVPA1HLUyuN3pAnfxuYVJDPrvvGP9XjrmUPs69PWp0NlVKA6Wcf+dot/zAIALL8yDxP3/IGJe/7Ai2/sdem7xMtMCLgbRFlPrpkj9ydLL+ziAN5RuKcnoYmVrh8iG72rRA9tVaHLBfoal5epca5zSgZK5ngOeKIH4AwKuzU6Xgg2G5dAsKg8JJrJWGjDjTyf7uJ0+Q6ujgiiRA/Xqh3aA+0fY28PIdbtCoCtnbj7N7u3/3tyuwLepICbG1IHHKctSz6+ZxLeemgC/vMMLVo5NbgWnYud777dPqUEkQ30fVQfYmYzZPwRVlgd+uYPPSTts+1OxDmo7XKy6pHJ5O0QrJ6Xjy7FkVg2ex4eWTIEAGBSW+26afeP4RPF2ycXY+fkUgC0z/jC1atQJmHzQkQfc5fb8lrWzuOPg3N71eOR/+2AHKKcENKkcpTo3MmXpOow/D1nLkI5VjXGIAu7TtbaMsIgG9BaH9eKjAK+WK7EixatAXQ8lHRuRN/z36NXyXe8583KgODgYoLLt9NTp05h5MiRAIClS5diwIAB2LNnD37++Wd89913Lq1r/fr1uPXWW9GvXz8MGjQI3333HYqKinD48GEAQENDA77++mu8++67mDx5MoYNG4Zvv/0We/bswb59+0TXabVa8f777+P555/HggULMHDgQPzwww8oKyvD8uXLXf26AfgQjnw3PQk5ZV95Jy0W/5DFPq5OECdhz/fSYPr6rlCaKJwZUIeC7p5Xt8gpCRMrwzz++f4CQkDXJrTahZqVduYXP84EBBFIqfwBIKHOvSR6UmUYwppVMKusttZYBlxlcUWaFhTnK0ZqHBN6duS6gv9/UgX9XQ6MrkRXTvFohRUGtXsIkaYoA6tWFkOwDwl0AEiqEjlfGLKjRXAcVDLtx9xjSSxcs5ixd6E4JPzbzxxmbW1i60MwbX06+9qrT43FQ+8OQZBegZrkVpztX4ez/evoz3FBqBXvRSW60FtTbuLJVfhSia6RUZ55284FsB1fOZn1NhK9jeK9gCd6AK6grIuT3VvMZc4Q8ESXBdf6SgzacCNP+ZrrQh5GRwHxRFe3Ug4nHcxqFy6EzLq4+/eCk5NEFwvye0iMPdp4v3jq1eEAgCdfH8bac6RUhOPm7/ri3k8GYhwjIAjSO0cxUGZ6Aje7bz0rXmhLkKW30BJmgslBd82Y3fYiCk8guUJ+XHe2bx2658UAsIXr5vbRIK+nBqP2peKm72yBrroI/v1fE29Acrlt/cTmkWDPZWV45u1/7D6zPFWLwyOrQFmA158ch0/uojss1whI9M8fOOng2wHRDY6V6Kml4aAsdGdeTQJ/PDdqXyp+uG4G7zkrc71VMR14DbEGWbvBkwNr0e8knYNEPOgrL4JuiQD8Fy+9vg+1ifbcg1amszwA/4PLJLrRaGRDRjdv3oz58+cDAHr37o3y8va1tzQ00Df6uDjaAuPw4cMwGo2YOnUqu0zv3r2Rnp6OvXvFlXgFBQWsQp4gOjoao0aNknyPXq9HY2Mj718A3kNrkElUkRjrRfWkEEGU9I3bqqBvukQBkNtbI7rc8cE1iKsLwdhddDHlDTV6C6N0Fbu3J1WFe/zz/QWxdcEIZrzFhCFFrzwzFkvnz0H/43RRJCy65CDnGZxS5t5JCpVZgalMJ8Pq+QW47u81uPH3dbDCylMWl6e1IJTTAnb1b5ns32O3pzr9eVwlhibGwAkXLQQAfHfHaXQr/wZPfLizjd+Ij/JU+UFSmNbHJLrMpNPvN2TbgkNBK1UAmyc6IG6hQlrGs/vyPSDHHvkNHzx2FADwyV2T8decuVgz5Qrc/kU/hOhV7CDomf+MwNL5c/DRXZPoa6aT3JSo56OHEKblE8rHh1S3eV3rJl7Be/zafw7g3q83Y+jpnzH8xC8OPfXdCTnlWYQPrLJIUFZuVj3U7bRzIe4QAU/0AJzBqD0pLi0vtAUIwAYrrKIdY1wcHVbNu7fkZkp7CHdUEDuXzx452W4LEjFw8zaE3soXO9x1vHx+6xQcGLAYjy0Zih0jr8ajS4aKLjdnFa0+PtfXuc8lx39OVj0rgCnzY6UvO+EixaFagUHHPR8qCgA98qJlX69NaoXaQO/gEI7lJFGFR3Ks6H6+ciYmbeJ3VjvqCFg/txBDT/3Es4lcx4x1hxxOwt3fbcbBEZVQGRXI7luPVQvy0avoWyQ3fo4fbz/r8PtFaxwr0UP0KnS5QHc95GbZH3OX7eiM8dttkxrk9zMz3SnaCCO65dnbshIcH1yNGeu60g+Y39wUZHUYLhtAAFKQusfUJPrv5GEA9nCZRO/Xrx8+++wz7Nq1C5s2bcLMmTMBAGVlZYiPj2/zhlgsFjzyyCMYN24c+vfvD4C2iwkKCkJMTAxv2eTkZFRUiKc5k+eTk/kt5HLveeONNxAdHc3+69KlS5u/RwCuQ8qTmoSn+QIhkCdFvrvzNMbuognK0k7NUBBPS05RtXsC3fZGCkqup7GnwCrRRQYZyZeQEp0CJekpPvhoIi7f3hk9GGLSXUr0Th4Ijp3NHDv/e+g4tk0twaZZRSjrpOURtPndG3hKWK5yxMRRABIVihTCmXWoDQoYQsyYtoEuGo8MrwJA+8vrwk0oS3PPALPeQXEe6WWfaSGCTErJQVJJ12aejy0JIuMOOKQsVIgfIxeGYAs+fuQYWoNMCG9RY/yuThh+MBlKJuyJBCSZVVZcvr0zVGb6+SCDg1s4s/3cY8LTCBeQ6Jq4toe0dS2MsguYXnb1eZR2aUZxRhN2Tixt87pdRWO09PcIa/b+hE8vxuc0N1MDNdVeEp0o0QMkegCO0akowvFCHASCRaUhV1MQNMYYUM6xTSjKuPTsXMSs+dwJrkVMQ6zvOp48gaKu4seLnIWFGJIqw9D1Ah2Y2ftcHFufCDFvWXc6/8XZyQ5OuGgKU6v480QGO6Eu8f2UZsoroaIA0IfJ3ZLD+V4aAHzbKFLXh3PGDkOOJGHcLr6C3ijTLUpQmq7F2rmF7OOfbjkHgBaS7BtXge/uPoPhB2h7mzt/3ITGGM75JbV65nlnc5Eymc687D71MCktdrkRV/zVEwAQ3KqESc0PvG6I1svux7ysekxb3xUqowI6jlLY09ekADouiD2ZEKcG2OcGBOC/cJlEf/PNN/H5559j4sSJWLx4MQYNGgQAWLlyJWvz0hY88MADOHXqFH777bc2r6OteOaZZ9DQ0MD+Ky4u9vo2XMqQSmJP9SmJbn/j5lpmnBpUi7XzCgEA2igTEqrtCbMVV52HSWnBrNUZAIDDI6s8Xhi2hIlfmAEgqdp7alR/AAmbKZModAjJyfWxdgRdiPT+TfUAUTl1YzqC9AqYVbaCMDerHvE1tt+yuGsTIriezJzasYZ4jlv5Lc4KsXG7hX6dDCYrGa940jpOQngq3ESiO/Jf9gsPf5luTe6AxMIIfCpSbURHbL349ku13zbGGDB191+iLaK9GE/LJc8dQmG3BlZtI2eHw4WzQYDuQLgbrU1efn0fq6ISQ7kX1WrNEkUv4BsleiZHid7eYFFyzLnTeieAjgtX7S6MASW6JJy1qPrthhz2b3dNZF9MyOnlPfW9LsTUoawapGo2XraLExBOkEshqToMR3vfgF+unEU/4eSuzM2qR1opPUHnrjrTE3AUKhrqRSvS1DLHE5oHR9EB9ly7NlLXq8wK1jN839gKvPrKgTZtx19X0wGhL76+B6eZANEWTo2fkW+vmI9oVEuzUMwxE13vXG1FOvP+/e5udKr/EjO3/c3LkiL1EhGgALYA4sZoA/qdkBaBVie2IrJBjQmCnCMpP/gAAnCEqmRx3iEQwn5xwWUSfeLEiaipqUFNTQ2++eYb9vm7774bn332WZs24sEHH8Tq1auxbds2dO5sayVKSUmBwWCARqPhLV9ZWYmUFPF2UvJ8ZWWl0+8JDg5GVFQU718A3kNZmrhKgoRD+gKiJDrDmkUxN3ULh9hMIAQ1pya1KugE75SKcAxnwvXWedjSRY7kTajynT2OL5DOtPcVSnjRE59oVwKMmiKlid9Qnft9kSObgjDkMD+gKDdTgz5nOaQoZWtLBIDc3vXshE9xV8aDm3k5ggluCmm191BujjbxHp/pT4drHRhTAX2QmZ3UctdEkCMFXoIfTPpQMoM/MrHBVfhXJ7aiNZjxbjUpaTWWANpwo6RyObe3Bmf62YeakY4EAHj8g534fTFDqDgaA1NAZEMQq+7yBsKYAWRSue33C24RlBpODKopC90VIae296ZarSVc+toq9IH3BognekmXZhis8so4ALLWP6SdPqBED8AZCDMhHEEf8ESXRI1MuDYXXNWjPxOMnkBLqBEl6V4krBRAUQcKb5WadFGaXSTRXZggD9OpMXZ3Gq12F/sYkRqgpEsz20HqzxNFDTJdaYB3a1cxAZcQx4ZVQ2Hmh+sWdG+AQW1GY5SetU78myHCASAj3zkehIw1jg2jbfu2TKdFiFlnY1Hc1TbZKmbP2BwlXVORkFNnlei9BEKR40NrcHhEFfu4/8kEBLcqWVsoWG0dJw3RenQqleEbFMDJQdW4bBvf6qagR8D6N4C2gUzgCOEoHyUA/0KbcrqVSiViY/kXrIyMDCQluZZGbbVa8eCDD2LZsmXYunUrunXrxnt92LBhUKvV2LJlC/tcdnY2ioqKMGbMGNF1duvWDSkpKbz3NDY2Yv/+/ZLvCcC3yJMISUrwoo+vEKGUyI2bw6h9feM03ktqk/iptPzKPADAnJWMpcs8T5Po0oPb6IZLi0QnRVWOxPFF1Ny1LniiayVufABYD3Z3gygsCM70q8NUxmqFgNtieK6PLZyJqMoJSXb3/wYAAEwqi327LQXeY124iSXeHv9oB1KZwU1zlBFNMvvBWciRkoDjwCRvQI5EJ/uKNz5UAOd72iZtxHzRGyMNuOGH3gCAq3/tBQhEmmvm59u9p//JBLx/3+UAgN0Ty1DqAqHQKyfGa63FgM0TnUyCppWE4+1HLuMvRAn+F8GcFd3w7kOX29m5cOHN8DG9TOimL5TocXUhiGcG0OetRQ6XD5exnCGtz60BJXoATiC7r/1EnxwCSnRpuFJ/EPiz1YUnkN2nvo2j1TaAuecfGC1u/3mxoTnCIElWyt1bxRDmosI6tNXmVW0HkdqqtFMz20EqZUHjD3Bk99Op2HsCsOhG50hmC3d4YqVFILlZGly7bC0bcLjrctoe7/crZmP38GtkawYCNXMMNcYYUBunQwEjWvrm+umsiAcAvrn3tFPbSaBgisMoJ4JFAZvSnAuS5wTQXRSXbesEgLHf49Se9XF6dnwjhVdeOcB2hBKc6+3afTCAAADArLBIdhFzJ7oC8H84dQcdMmQIhg4d6tQ/V/DAAw/gp59+wi+//ILIyEhUVFSgoqICOh2tzIiOjsYdd9yBxx57DNu2bcPhw4dx2223YcyYMRg9ejS7nt69e2PZsmUAAIqi8Mgjj+DVV1/FypUrcfLkSdx8881IS0vDFVdc4dL2BeAd5GVqRJ/3BTFBEAp7Ap8UIY2xBgw7kIQQna0qkWrJXXHleVgoK2Yzli57x5ejNs55+xBXoQuVJiZ97THtbbDBexKhSoTgdMUTvUXGgoQb2uNOEO92gl9uOYfGKAP+88wYqAx0Jci1mqhOacFl2zuxj9UcD24y+DaEWDCM8ShUcZW+gvu3ilFZHxtajXCtGlGaIN562gNHakauZY2voBBRagXp+LdNk5q/0zbNuICfbj6Lgu4N6FJkP4A0hVhximl3HbUnFT0FwVB/XpNr9x4AmL+8B6atS7c94aS4c+Q+10IA2wuiVjMwfpMt4SYkV7puzZXA/P7BzHklNqDbPKMIB0d6h+wwqkR2OOnwaHJ/F4ozGL2HzuXYYhEPTedCtHWf2X7SVRFQogfgCFZYnbv0cC6LrQFPdEm4Un8QVCW3wKi6NPbp6X61eOvZQ17/3PYEYvsT5Go1hYsNIs7auXBBvKrtIHI7aokwIfMcvfzB0RVuEWt4AsTqUApihK6nEN6sdtouhwWz7+//YiuOjKhiHzfEGRBVr8bYXWlQm5R4+K0hCG1WIrRFhZAW8fGNIcR2EP335f0wq6yIaFRDG2H/2w086nzYKqlJ4uqcE3/1EjnOTgv8pYcyXb1CcUtht0akOLCPPTimEj3J78rs71MDa5zatgAC4IIbYi2EQX1p3Nc7CpyaVvYU+fy///0PAG0Rw8W3336LW2+9FQDw3nvvQaFQYNGiRdDr9ZgxYwY+/fRT3vLZ2dloaLCp/5566ilotVrcfffd0Gg0GD9+PNavX4+QkEtLiXuxoLiLuKqyLQWbuxBOyRN4JenNmLS5C9Yxvui8llwr2KKkKcaII8OrMPxgMvqdiMfpgbXYOOsCFv/c2yPbLUdM+oro8RWySPBelga6EBNCW/mXu7Z4osupUT2lRM8osLVVhmpV0IWbcNPv67FjzNWoTmzBx48d51mjNEUacdUfvfDXYroLItighJEpdAt6NCBEp0RrqBnjdqVhy4xiBOsVdAAp57glMAXT1WJB90YYVbSlS2OMAfk9GqQHR07CkSd6tJMKFE9CZVbAJJCKBxmUMITajz4pM2BVAm+8fBAAkHkuBpdt64wdk0vslt07vpxeJjsGPfJikJdlu39d6NGE8lStnTImXKvG57dNRY+yb+jOAidFZHNXdHO8kBtBrE1IaFNLmJH103cFUY307x/EkOhhWjUSqsJwoTu/hXbh2lU4nnkj4us8N+litpphlTm9fXWvmr2qG9YsKMAayzaHyzbFSE+wmpX08dzqok1HAJceKFCAi7e6ss4B71gplKe6uG+sdGfZhYwm9BRMsHc0mBUWTN77p3c/lBNy2RFQkSpN+FqFNYRIDciFmCWHI/TKjsHmGSKdUhKfE96sQs+cGORlarB5ehEWMoGQ/oRyB1YzQw4nemlLmOuxg99t4JF4nBhqH1h4rr+9kjqlIgJBRvoCv2HOBegizPjqpmnYNrkYP992TnT9KiMFk9qKX2/NBgD0zI3B6QH2604rjcCJIc4Rz+TYFOvmFEOMxqbIv+fjAfj8wZPIFQj0CFGuFAgKzvfSILlCvn7Uh5jRGG1AaIuKHbsU9AzYuQTgOhpkSHRjwPruooJTd8SXXnrJIx9utTqePg0JCcEnn3yCTz75xOn1UBSFV155Ba+88kq7t/FSg8VqwdL5Z7BubDY+uH+iV9TLVUniJGZbCjZ3IUxEic5FbqYGc1Z1Y0n0Jhlvt1ULzmP4wWTMWdUNpwfSgaQeI9FlPNEvNSV6Rn4UOhVHoLRLM3ZMKsHMdRm810lxVuuCEswg1pbOFLAhrZ45XmeuycDj/zcUww4moyKlBY99sgPn+tXhur/Wst0QXIJPH2xG/xM2xQfX9zI3S4P4mlCUdmlG/xPxUJooaInPu0QRTpkBk9qCgu6NGLMnFdl967Fp5gW7/ekqmkSUKlxEa3wfLKoyKSD0W7FKeNYJB6Q5vTW4+Zu+kuuOaFRj0NFEJFXa29a8/sIBfPDARCis/B8lL1NjP/CVgdJIYdjBZOff4AaEtdCEso6ZcDIEW5BY5TrBTchzMvlVH9fKBnYlVobilm/64u1nDsMYZEFh90aPkuhNkB80R7gxTNUVTNuQDrVBgbNB+aBA0WF4DgbUPDDLkkwFncwkYQABuARu8HLA51MU2nAjljznosqa2a+bZl5Az49j3L5N/oRqibEBF+FNKlsNI4FgnRJ6F62qKjqIZU6jjH+31oGQQQi1yXWhiNCr2hGKuzZh9soMfPjEMSy7Kg/F6U2oTWjFzDVdMWZPmuMVeAGOjo1BR7xHogO07aDcFdaVsUlOn3o8/fYuvPHkeBweSXuK3/njJjzw7iDJ9wS1KmFS246l8GY1PnjiKADasvCPxXR35fq5hU5vB0Dn+RBC3xl8e/10HB5Rifs+HITPHzyJkvRm7B9djlH76I49IkwxcMIbKQttY9cQbYBar4BRwmaDbP/Y3ams73tzpBE18TqfWs8GcPFB7ppsVAZI9IsJbXKZ02g0+Oqrr/DMM8+gro6ebTxy5AhKS0vdunEBeB8KSoH379mPNQsKsHm6Y59Vd6BJ4oIS5kslugMS/dCISkxb3xVKwllTkLRXWHb1eVhhxWzGF33H5BI0OyAQ2wq5sMbIS0yJToHCzDUZAIDtU4vtXid2EfVxetYTWA5WWGFSSS/nKSW6wkrhqddHYMqmdNzwY29cvpUOt9k2rRjr5hfaLW9WWelgI+Z4NHFsKGoTWxHNWLIYg6wYu0tkUGLl/00I+mPDqtljeN3cQphd7QUWwJHnpbOBQp6EWm9/i+QeAyQgNFinFCUuQ2U8RKduTEeIXsXvbmBWvfTGHPxw+xm79+Rm0dZEdl6mEodlfE2IHRHvaRA7F12YbUJPaaGgNLm4HczkeAhzXpnUVhR1o4+ZUJ0ST74xnA1sdqQMay8apUh0Zr+H++jaGt0QjAk7aOsmZTtMg1kS3UVSJYBLE07cLnkIqKvE8dfVudCFt23iattU+w6njgZnwj3VMsHTBG3paqtyMvDV39EUKZM945mSlQdXrU1+vSkbc1Z1B0AroV/7zwF89q8TuPebLQ7e6T2UdZKvNzqXSfjAewhCZbUQBd0b8e3i6QCAUAlbFi6+u/sMvr2T72F+apC9kh0AYAVaIk08W0hDsAmFTMfgjDUZeOvhCby3DDrinK1LvJMqdILZq7vhhZdGI6E2lM2F+tfn29nXSUdkE8d+lYiMjg+tcTjmWDOvADMZa1YCUpMHEICz0MRIk+hyHa8B+B9cHnWdOHECmZmZePPNN/H2229Do9EAAP7++28888wz7t6+AHyAOZt6AQDWejgEk6BVQv3mSzuXCIiHGhLSbPWCfEQ1BGHCTltad3Q9U6gL6pnK1Bac6VeH3mdj0T0vGvoQM7ZMsyd13QGdjBLdl5MS3sTyK/Nww9J1+O7206hJpFtZs0Vac2Pr6ILJorRCEyt9UyOoTGmRvWKGeIhEF2LJo+NtD8TIDAqwUlbWvoeotIh/OvGYfuuZQ5izim/1QVlgHzbK4F+fb8N3d55GRKMatYmt7Q7ecrTPCdnvSwSL+NxzuxGyGP9OI0fZ0iM3Gill9PVDJUMck7BhnicuZ/Gn39uNwgx+u2gO056aUCUYXEh8THphlPgLHgS5breEm1hP+ZYwk9MBUQTlnehzVyFyeyAq9VSmPdfTJHqTVdxygZCJvrxXzWbOYQtzMRDz8ZcCuyRzXQt4ogfgDFydl2uIdHx/vVRQF9eKJ9/biUMjKlGV0vZg5JxLgLzJ7uM4uM+kdjxBYxLLs3CABhmi42ICIQydssXwwHy7mFe1HHZdXopBRxPswjkr0lpQF+d6foAnIKtEt3o/z8tRQGx1kg6j96TSdpBhzk3avfQ6P2fldH8JGxYKmL08A8Ecwcnpfrbz9my/Wlb4Q9CpKMIpH3dnrVzE8MH9EwEAF7o1IrcXfa0kSnRu0C4Rxdz9/WaH3e/Zfevttqmj2D4F4D00yCjRoUC7BWoBeA8uk+iPPfYYbr31VuTm5vI8xmfPno2dO3e6deMC8A1mbKNVALsmltLt4R6GVBEc7qMWeQCIoMRJdOJP3RBnwOERlSwRBgAqi/TptGY+3W5PlLxr5ntmgqIlTJxEV5jgdUWqr3AhowmbZxZh3dwCrFiUD0B8MKY2KdmgzNp4x6ojyUErc4oE671jP5RREM2qLKQGPU1RRrugHFMQo+zV0dt5bFg1m1ZP4MgqZO38Qtarur3HsCZWfkDkD0r0UJ39b2pVAvHV9L3vli9puxYLR51upYDp67oCAPJ7NOLanzMB0K2pXPQ+EwcAqGE8+bvn2hPebz99mPeYqF6mbEy3W1YMvXJinFrOnSAdL61hZoQxSvyWcBPSL7imzsrvTvvEn+9l7zupMvFJdE+33mus4t6XhET3lZ0LAMxc2w0UKFiY1hPexI+D27fw5ZbwAIkegPtR1ingiU7w7lOH8cMdZzFny3JZRZooOKVyeSet3wYvugs5QoJK5Hqmd6LLwdCGTgiz2tohyAyiRO9a0LYJdRIo6UooJBcxmmD7SX8GlAif2xBjwPkeGsxelWH3Wm6m7yeOTEoLKpOl6w2lC5PY7kIQt2NS7J6voHMppmzqwnt67E66E/XGb3tj6IEk3mtcW5MgvQI1yfx6ndTAAKALN/EslVo4f6+ZX4guRbbaT2WgsPaKQnbs8vK/R0t+L5Jb1RZM3ZiOycz3XcvYrkY1BLHjiqQK+zGUM5NtZ/vwFfkHRnkn2D6AjgO5nArAlicVgP/DZRL94MGDuOeee+ye79SpEyoqAheTix0miwl3vbMGsNI2FzUJnp/5l+Kew2SsEDyNSESIPs9VU65akE/bhTD3XW24tAr8p5vpQBai/F2x6Dx+vUE8pKU9kPJEDxJR1HZUbJlG2xBtn2Kzl6pNbEW9CGlL2gXrRHzRN868gIWrV+FCV5pAk1IcUMzv7yk7FyFMSouspxoA9Dv/PYq7iRN/WWdtyiCLwspaYjgLonpZO6+wXZNsDTEOPNH9IFhUyo7l+ZdGYcPlV2LGhgz2uVhmUJHfowE7L6db7XOz6vHGE+Px65WzMHZXKm8ds7Yugz7IzHry3/FZf7vPWTevgDeQJ8fgrzc7d+1IrBKfDPQkYuqD2XOB/N8SZsTQQ0lyb7NDUdcmmBUWaOLsj3Wi8Cck+sePHseHjx5tz2bLosJSLf4CUaL7kERPrAnFOGoY+1iKsBCFYLzv6LoSQABtgSa2Y5O9rqCUE7K6afoF194sqJWFwXkdDY4s3wDIehgTtMjU5pKggE/+ddz19/kZmpmJlq6FbbMYmbY+HR/eOxHfL57R5m3IPCeuRqczZwSggHFHl7KdlICtjrCbVPEBqpN0sMgMTX0x1uJ1GUtw+DlZGrZrLbU0DH/PnodfF83CT1fPxCvPjMWvV87Cfe8PxOjdKXbvFSrJYQX6H4tjH+6+rEz0MykzcK5fHUYf+419joh5AGDWqgyM3mP/eQSu2rkIQURraxnBDwUKU3ZlAACqUmzCqXTm3FA7UPQDwNf3nkanIptA6Y/rc7Fw9SrXJ0QDuGThSPQTsL+7eOAyiR4cHIzGRntyJicnB4mJ3g3TCMD9UClUaIrUcxLqvTDzL3bTt4irQL2FSISLPt8UZaD9jwGsWpiPxKpQ9MyJBkCHk8RWixN/lZ1akN+jAUMOJ7Iz+G8+f8gpL25XoIkSn/QI0146JDrLOQqOq71jy+2WTaim1QhVyfZK9JuWrseey8rwyn/3AZA+FwiJHuolEv3wiEoYgi2Irg/CwqU9RJcxqa3QhzAbJjjEjoyoQua5GAC0t6NQnaI2yCtpmiONUBsUKO3SzCMEXIWsVyf8I1g0VKK7oDXUhMFHExFXF8IO8NJJYU0BhT3pwX9epgbhWjUmb05HpiBgqznKiE0zLqC0C70PZ63phuh6+juHMudrc5QR+8fQk9NGlRkFjM+kxclDLa7O+/uQAoUUpm2W+NW2hJmQdS5O7m12qEvQsd9XCNJNMZgT4PXuU0fcfj0lOG3NE32eWJH6UokOAFcop7B/p5WK37tEITjVG6IDZGcA7ocx2ILW4ECXAwCkldoEGuQ+0VYUSkyUdxRUpgjIBrHSxAnhr7P3SyHe/fdhj91TvAXSrdBWJXpqWQSu/SULaWXiwiJnkClp6SK9bzfNKEKP3GjE1Ybgup+yAAB7x4uTtd6EI+u48Gbvj1sjGx3XH7lZ9WwQeXmnFiRWhSJEr8K0DV0R3qJGTGMIXn5xDD65ezLvZ7n/g4G45tdM/sooII3j+y41kdUzlx4bXxBcp8iY6b6PBmLfWBHxJfP5ZHzWVsxckwHKAhwbWo2SzvS19poVfe2W63aePjec4RzqE/RIqeDXWHsuK8O2KZ6xaA2g4+H4EAlRDgN9UECJfrHAZRJ9/vz5eOWVV2A00gQIRVEoKirC008/jUWLFrl9AwPwLixWC7QcSxBP+31JtUuqDQqf2o/YBYsyN/XzvRqQzLSBlXXW4kz/Olz9G1NgUIBRLV0UrplLW7psH3M1ALod99hQ+Yupq5Dy2opsaN+M/sWER5YMFX1++SJ7IswZT+VKxrdUys6FEGnBrd4pnomNyvT1XfHB/ZPQ96QDcpICwppso8gTQ2pY1URFmpbXagnQgaM8CB7WJbSiawH9nvZcH5od+ORGNvpeiR4ioUTn2v8kl9Nqb4VZgelr+TYrOb01GHv4N9TFtSKLIdG5Lcx3/LQJFqUVKWVhGHXiV1YJzA2bW7huFZIbP0fnuq+c8n/lgoTnehupxBPezJDo4Ub0cjFgrDXUjOze4udcDDPBMvafNGwfRV9PdeEmu0kdC2XFopWrkFH+Nf6+SpwIdwbHrRLKf+bw8LYHqhDzlVPZv8vTOK2iLt5CA0r0ADwCCvjuDvug5EsRQU4EYToLT9tY+RqNPp7U04WbcXhEpU+3ob1oYvyf26rqjXZDHdYrW5xEl7MPzMvUYM2UK7B72DW46nc6p2vjzCIY1L4lmBydc4ntJH7bgshmx2KJ0/1rEdVoCyKXyjzrXBKJzkW2CZOl1+VgyKFELPqtJ2+5X2/JFn0/t7795K4pWDVtAZbPnIfVUxfgn6HX4ucrZ7K/e58zcdg5sdR+HcyYg4gx2orEmlCM3kN3gA478wsG5PyIzPPxdl2hGqYrViwDSQyHR1axf8fV0Pu+o1+LA3APjCozDo6Wv6dsnxyYkLlY4HI1984776C5uRlJSUnQ6XS4/PLL0bNnT0RGRuK1117zxDYG4EUoKAXCWmyz2gdHetaipyZBJzrQD/USISmFUIV4wdkaakZko61gOTS8Etf9ksUSjc0x0uraHVNoi4ekqjAs+ItWEK9xc3hrg4QSPb7W94Skt3D5js68Qo54Oq6fcwHneteisFsDa+1CijRhAdQYZSOTiMpUspWUOV2cLcDaAyusbPE7e2U3BBuUWPxTb/pFmbFFSzj/xeokmgQ+16cOkkIr8rzI+UlCn9oTbqaTCBQGgNBmJUvA+hJSypRyjqddjzxabVOc0YSrfucodjgTbyuuPI+BRxnVtEhwa0VaC4xBFt6g0h32QImVviLR6eODhLC2hJnQ/Xy0S+uwKqSLSe752udsHGtRdK5vHW+QXZXcgt0Ty6ALN2H1gnyXPp+LIqu8As4X6jMu0qlUxIBWUxV1b7u6VePAYimAANqKr+8+5etN8Ato3Zg70NG95pui2mDD4masvOK8rzehXSBK9FAHoYlSiKlvvwBHagLdpLSy3WoEJO+nNcyMpigj4utCMfxAMiIbgtAUbcD5ng3t3p72wJESPSPftTrHHXCmE+5MXzoXirU4kRl7duN8h5rkVvx5XR5roScJK9AzOxpWJU0sT9jWCQOPJ2Dk/hSM2ZOGEQdS0DMvBuEMv5BSFoYgvRJHhtsTimRMklrWPhIdAG76tg/7d1VKC7688SjmrqBz3xTMd8rvoaG/Qht0e4OYur6sU4BED8AxqpN0aA2Vnwj815fbvbMxAbQbLrMU0dHR2LRpE1avXo0PP/wQDz74INauXYsdO3YgPLz9F7wAfAuL1cISHwDt99US6rlCtljC8zDES9YYUgiGNOnM9U378ImjSKkI54WssOSjgJw8PNw2e00CSdcsyHdreGuThPdjfK1vyDRf4Lkle2DlHD6tTBq9PtSMyw/8iVHHf0P/vB9xcmANa30gLIC4CtjmCCMaovWoFrF84cIbnugnB9WguGszQrUqTGR8CtkAJpkCUNjwQcjaTx8+gQe+3MY8KXgTBaQVi1/TTw6mw3XO9Wk7iS7n+xbV5B+TPuESA89zfW1BtYOZIrouvpW1dlKYKd7vUZ3UgszsGHTPi5ZUX1EWYPnMeezjLhfa3j5NEKvxTQcKUaIT30lthBFJlWH0fnEB6+aID/SEA1kySL/xj/XILPoORen0faWWk3XQHqVQLTSSrwW3KqE2+d4uaw41sd3rCCjRA3AGKgeWX2IoymiCQRVoUy7s5j4S0FFA2cWOljDfk+jLrjrv1hrd2yCe6Gox/3EnQO7l7YHQyo4FxbdkA4B0Tt1D6iyFlULP3BgAXrIYlUGZAxJ9yCHv29pGOdEtUNalGfogM2txcnxoDYq7iI+/Uxlx0WVbadX6+rmF2DXRgZUOBfQ9FQ8AGLM7DX8smANKMCgxqsy4Yv0qAECP3BiMP7gUmgTpiXt3kOiL/uiFGWu6so+bww1svUg8+ZsY8ZtZ5fp5rmBakQNK9ACcgS4sYGvXkdBmqd+4ceNw//3346mnnsLUqVMdvyGAiwIKSoHOpXx7h40zXAw/cgFSBUmYjz1mQ4QkOqcW4Kavl6Q3w6QwoxvXb5Cyfw8AtISboImmSZ0pm7oguFWJgh6N+OL+kzwLnfagOVy8IPEVmeYLjOAGZUrURCa1BY9/uAM1jC0HtwCyUFa899QR9nFFqhYbZkqcA5z1e2Pih1i5TNnUBWE6+hzpXBJJD0RkruahOvvzKaRFiXBOeBPveGW+V/8TCaLrq2MCh7dNLW6zZ6ic6iPSD0JFAfC6crg4PbAWJiU9CTBiLx2MZFHSE2wKMwWLkr9PcjM1oECxKiAuiD+kVQGM2J8CtZ7eMXm9GhBfId2m64yyLNJHkxEkwIqguEszVGYFklxUxleninfW1Ca2QhtqxJm+tbDCimEHbee8LtyEFVfS6sHaBNvElyMFmRwaIf3ecK1v71UEiQop31nn0RpqDnhXB+AQVFskewpgzQL3dt5djHCnRWJ7rmkXA/Qy3WreQnWKDp8+dNxtNbq3QbJnlC5OYBOktsMLnSClPEy8FqeAUcJgSc61ZdtUWydaFpPj42mLUUdoipLv1hpy1LUAdXcgyol62ayy4p/LSnkWJ0+9twtr5xRg69QiHOP4NPc/QZPh2gj62DnVvwZlnR1fa1qZ83XrtGLoQu3riB9uP8v+PeB4AoozxEl8CzOWcQeJDgCvPTWO/fuveWfRg/FqNwi8p0kXo5D8ZyFyDBsZi8ULXRuxdWoRTverdcMWB9BRIXZeiOFinri9lOA0ib5161b07dtXNFS0oaEB/fr1w65du9y6cQH4BnVxfOLijZcOeuyzSiXaUcMlvIi9hRDIeMwJ7q8fP3IcI/YxhaDcdY8Crlq1GgDtoUsSz1/8v7144sOd7dhaG3QSXQORTb4PafQWpm5MR5CeubRRwEhBka5iOgmOD63Bx48fB8AfjP59dR62TLcV72VpWvyLqLUloDYooLR43n5kI0PmC0lKMXKWCyNTHKr1tm2krBRO9byJLSi5CGMI2tZQE0J04pMDQa2K9vn6y4zpYvwgVBQAwiUm81pDzfj4kWMAgN6cwMy8Xg3olm+bUFMy7aLECmjOKvvfiatMN6ot6J4XQz9QALUpfGWwgqn5E6pCWRsZOfhqMmLEgRTkdLmVfXyWGVgkVbZf1Ubw0WNHMWnfn/j4keOYvTqD91odMzlWx1GiV6a0SGZwOEIrRMh85lrPm4jyIRIo+jhML+RPgjtdizPL+dqHOAD/R1uzFn9fnOPeDbnIYKGsqEx2n3q8I6sfrbCyBJWv8cqr+/HIJ9t9vRltArFzaZNXBdxDZFKgWLGAEAoBp9QQY6t51szNZ0UaxFc9N1PT7u1pDxwpSXufcS1A3R1wtl4m9qFk/LB1ejFu+3UjFv+9DjN2/I2tU4sAALNW068fHVaNEK0SJmFOEmxZQFwcGFOOzkUR0IWbsH1yCe+13F71ePbtfwAAN3zX2/Y7S0yuKMyU2+rFLsWRWD9xIQDaWnDN/AK6NhYM2RxO2omcQqReOjm4Fov/XofJe//EkWFV9gsGEACcJ9GrE+U73wPwDzjN+rz//vu46667EBVln/AdHR2Ne+65B++++65bNy4A36BfNl99Wti9Ec1hnhlYn+kvPmsbW+db5XQwJV2UmFT8avCNlw8igyjRHdSpZ/rZbCAefWso0kroAnXd3EK3KF2krHci/ITo8QbyemmQwfFfNnI8kuOrQ7B81jwkC1pUy9O0sMKKDTML8duN/BBBs0xYLIE3rFyMKjNyemsAgFWSEMxxQKIbgvnHrNJIsYWuWOiTWUF/5/weDcg8J65wNYTQ62yLr78+yCx7rkT7SeeE3HlDwmHSSsOhNNJf5sDoCoxifpuQFiXbHprfUwOT0oLBRxKRQo49kcPqfC8N0gVBr1yQQUV8bQiPIJZCpA/P++iGYETX0yT+aeY6XyShPGoL3nv6KADg1Vf2I6MgGg+9PZh9jUxa1CbY9pFZZUVNGwpTs8ICk0zggDN+pN5APGIAAEEGwbXISe6EeJ5qYgKWLgHIwykS3Qo7a7tt04vxx3U5bZ7MuphR0rkJr72836l6wlmwBGkHRG18q8vByJ7EykX5eO3F/aI1tj7IjBULz9sJkPwBzYyvfJsmvqxAYpV7rCClMm6ODuOLMGoSdIhspO+plWk6HGFsMFMq6NqHG+ruC7SGyJBgVt+Eucc6GRq7bm4hzAoLrv0lE1M3pLPPE3uuP6/JxZq5+Xjsox1ILQ2DRWm1+z5jmFDO4QeS0PdkHGvRF9GggibOwNrzrJ3PHxesWGTLFrj70wHYMEe+wz22LtituUgDjyWw23pwVCV65cTYLUMITldUwDVMtyO3+3RZO0LsA+jYaHEyE6W0S8fOO+kocPoKdfz4ccycOVPy9enTp+Pw4cNu2agAfItBp5L5T1DA1/d6JhTq1IAa0efjfVCIcCHnia4TCYVYM985ItGstrKhlkMPJ+FI3xuQXhAJXZgJ26e0P5FZJ1Hg+QvR4w1sn1yCnL4238TyTlqsnroAAGAIsmDQ0URM2dSF9x59iBmbpxXh5qUbWO+/j+6ZhH5MW6MUiLrGG6GiBd0bYVJbEN6kZr3cCXrmxaAX0+4qCmYwamTIdAWjSlo7v8Au9ElhBvSMj3x1sg4j99mU/GEiAYpt8fV3RADH1vuHEj2yWfo6kJNJH2MUKHagcWJQDauKJgpztV4BQ7AFRRlNUFgpzFlJhxqJEQQ5WRpky/jMk8FSXE2wYxLd6p3jUg49mIEKyb4YzlgtKdzcpV+eqsVzr4zC37NpT3nS8i3cR23xEL7QWd7D2G/sXBglelvtWIi3Z0OARA/AAZwi5ChbJw4XD36xDb9ff+kp0u/5dgs+fvS4W9fZkf1VD4yq8PUm2OHDJ47ho8eO2T//+FHc/f1m3Pf1Fu9vlAyssLITLRaF6yx6aIvKbUSmMECU4NTAGl6HZGO0gSfcIAGYUQ10Tdjo4/DrFplzjrLaamtvIk6ORGfGKJSZtsE7MLoC0Q3BeP0Jm8UJUZpvnHkB932zFbsmlaK8E10rcdXZsbXBmLyZHjuFa4OwbdzVWLS0JwCg+/kY+uMo27q4Ie+rmTHyh/dORE2iDnXxrfR4QmJ3uXsyQmlR4IfrZgCg60NyjHHHNMS+xhWUc/K0SCju2nkFATuOAERR7mT32BlO7lYA/gun746VlZVQq6UHiyqVCtXVbWzrD8CvsGNskd1zb7xwEI1R7h9c18WLrzPOxySanSc6B0IfNQC4kGFvcySFrZNsZDkFirV4eODLbXjx9T0sOdcWiG0b4D/2GN5AlkA5XZvQimEHk5FUEYamaAMe/GIb1s0rtC3A1Dp/XctXD/TKjkFXoTWCACpGgRwhQ7a6CyRQqVdujKhn31wHanRuTUfapDfOvIDuHNU+AIRyfMD1IWYkldmK2fs+HGi32oIejXjn365NoHK9qsUQ5+NOFAI5q47irk3spBWxcCns0cj6c5PBBzn3yHkt1TVw1W+9kFoWxgvDFKIsjVYnRDSpHSa8U1YZb0cv4fJttGWVIdiCllAjZq7OQP/j8Yipc+/1aMu0Ivznv3txhrGNKeraCF2Iye4408S6fg/L7S5ezJIJNH+ZoEylaAVYW9WpFEOi+6OaMgB/g3PXFSni7tFPdzg9mOwIKO3UjEOjKt2+XkOwhc3m6Gg4NNL9+8sd+OK+k3ji/R145q3d+OvqXADAV4zIaPsU2sJi/+hy/HrDOZ8TafpgMxvgblW6vi1hTuSuOAspW8CGOAOvBrUqwRN2rJlPE5LRGrrGbvBx+LWcHQPpSPQ25Ahn0vSjZO7vRPC1bm4hACCpPAwL/uqO+KoQNMUY2bo1uIX+vaqTbDVU1tlYxDK1257xZfj44WPoztgKkjro8IhKJFaGoiHWgCn//Inn/+8fPPH+TpztXwelicK4nWm44c91AGhSXgqyEwNtBOm6ze/ZgHGMop7UPQCtEg6Fa5/LDSN98L1BCNWqUJLejBODxQWCAVzayOulcWq5nN4BEv1igNMkeqdOnXDqlLQa+cSJE0hNTZV8PYCLB2KkgVUJfPKQe1U0ANASLj7zG+1j0lfOE70qpQWRGj5xUuJC681XD5zkPSakmi7MhM8fPIl/v7PbhS3lwyxRKDsTPNNRMHs1n6Q0qi0oTm9iSeYVi86jPo5TiDM11PbJ/E6AXjkxqEmQJ5SCW+lBhjfscohFhVA5TjBveQ/nV0YBsTXBaIg1oEVgIyRsV907oZz926oUL3zfevYwqpKcV/nWOGjJjfaT4zVcJJCVwKoAjjNhTP2P0xZYVUktiK0LRny1fSFO1NGj9qawnv1EnXXNL5n45O7J6JUdC22ktBqmIZ4mSM/3YtTRMuNihcW3BDoALPi7O/t3VXILcnvX49SgWteCCZ3giB7/eCc+ffgEnn9rDyIb1LAq6IGS8PxtywA8p4d4MUsGp1K++d5GGkVP3gg9zRMqnRsUkl+k1sE1L4AAnOUGrTKNMF/ed1L6xQ6GnRNLHC/URnRUNXpBD/kOIEl4mLdujjLix9vP4Zt7TuOBL7fa1TJWWDF/40o88r8d2DBL3rLC02jkhGAa2uAvH9LqPhJd6j5pUQIj9/K7n3MYwQistJ3omX517JiwwcdK9FYZEt2d+8sVyAW2k6gmMqG5bm4hrLCyZPoj7wzBF7dNw/wV3Xnvs5IJUE6plnUuFhuZY7okvRn//e9+nBxIk8VlnZoR0ahGZZqOzQjL6a3Bl/efwo9MoOiEHZ2wdHEuKwBpDZMWgsTXuJ9E71IUgZBWJfQhZvQ+GweVUQFtFL/ejoaIcMrRNYU5tRpiDZi6kbbJaYvNZQAdH86GgVekuS87JQDPwWkSffbs2XjhhRfQ2mo/wNLpdHjppZcwd+5ct25cAN6HxWqx8/xmlbpXu9/nSx8sfhP1NYkuZucS2kyfLi3hJqiNtlNHZVDArLYiuZwuZGau7iq77rye/MEBUa4S7B1fjto4133/TDI+o5eSEt3O05cCnnxvJ558fTiee2kkHntzKB57cyjr7UdQn2B7X1izCuHNahQ56DAg6gtveE+P35mGx94cKhki2u9UPIJbZC7pAt5yAGNVc2ogXzFhVltZ70AA2Da9BJ0LIwDQg5tbvu4ruvrZm5fDqHLOp8ORCtHX5z9BkF7+FknUPKP20oMGY7AF1Uk6ZHJ85gkpSToJVGYFFv/Ym14+yILH3xiK//57LG8ZR3Yn+b0cd76IWSl4G1nZcewA40z/OkQzLdkqowst4hJfI1inwKTNne2eJ5+Rk1VvV7C2xe9bSomuNNHfwV+U6EmIg9JE2RGXPSUm3YQgbdjOeO0HcGnD6qrBMgU7IkKu46ajgVh0JVa40aKA2Z/OBpVdbHBnfkZ7IdU5ZVUAv96UzetwmrV1Ofs38YWuSNHiur/X4LafNrSr09RVED/0iEY1miNcJ5/VrtynHUBOWTxuZyovePTMgDp0vhDO3vvXzi9g7+sN0XqfKvzlzjdf1QIp5RLhrxawLI9FAYQ2K1GS3oz7vt6KA2Nou6RZjP3gU6+NwHMvjcSTrw1DYmUoDCEWhLTwi4nN04uxcTa/U33tgkKoDBQKezQhmfGtTxGEjj66ZCiefnU47visP9584SAAYMK2TqiX6XrzhBJdaVGgRwFte1eeqsWEHWl2y/DG/uQwc1BKExFVbmY9G9oq9IQP4NLB+lmFeOL9nWgNNsGktODpd3fh3q+34Ku7T+DPxblOreOf8WUo6tKIhz/ZjoMj/c/aLAAaTt8hn3/+edTV1SEzMxNLlizBihUrsGLFCrz55pvIyspCXV0dnnvuOU9uawBegIJSsKGCLJiHxd2akNdT49bPM6n8UzlNUZRdanwYx/uWq/gmBGpiFV04jBO5MXPRLGi3V1gp3PuRzSbDorRiw2zXFSwHR1VI3uyJn+ClgFyRQcquiWWIqwvBQ+8NwdOvjcDTr43Atb9kiq/ACrREmLB+diE9GyxTr0c10L99RJPnj9cRB1Lw9GsjMHuNtG1Lt/xoydcIFAy5GsbYtuwfW8m2aBL0OR3He1ySQXdaZPeux13/GyC6T4ozmliViiM4Ck2J9pPjNciBp/gaxvuw72mbd/653nVst0BcTTAbOEQ6CQC+pUtsXQg7yUWIg4RqJ8kWmeLenaFMbYXCSiGE2Yen+tewkyNKswsEv8Si+lALbv6yt93zZJB7YHQFKpjJmp6MN7tQpe0McnqIt+WqGBLdX5ToSkrJDmK5SKq2f04MRKnmyGopgADshBYEcvdKQfdeR1VQi4F0ITWMkyMAAQAASURBVFWnuPHcYq6Lch7NFysslBWF3Zy3SARsRHdoSzvUwBLHb2uICY+/MZT3HPFSfvWV/bznjzJBmACwY1IJLJQVraEmbJtagrXzC/Hu00favn0uglh7RTYFoayT6/ZJGQVRbtsWSaIXwL7xlTwf9NZQMwYdTWIf/zOhjLVzMausTofzeQLCzk0uYnxkQ2onkiLHMfcyTYENvV/GCOKGHkxCWhktkCHjoyfeHI5FS3sBsFeKl6aL1+2k7jjPCMS2Ti/GVzdOBQDMWpWBf786Ao8tGYa/rrURiIt/yIRFpryOr/VMLlpmPj22yc3SiAqSlKA3KqEmzOlg4zCdil3ntA3pUJgp5GZpUJl86ViWBWDDLb9vwI+3n8U3d5/G4RGV+O7OM1h2dR6ee3uv0+uoTtHhrh8247ebsjF38woPbm0A7YHTo+zk5GTs2bMH/fv3xzPPPIOFCxdi4cKFePbZZ9G/f3/s3r0bycnJjlcUgF/DYrXY3zc4R8nq+fnu/TwJ+xF/UE6rTII7PGXbM1zyP4S5gYYy/xdnNEMlFqLDvEWscHj2PyOxdP4cPPn6MAC0Z+jp/rUube+OSdItw/5ij+ENZPfmkOhkn6usuP37jbzlrv0lSzTsaPQeWlX8lRNhunF1dKHnN2rUKseEWTCjriYDrMJujfjstim8ZWauEe+myO2twY7JJYiv5p+fJBhqLddrXgYVDpToURr/OF5DZEh0lZFCcUYTTg2sRUZBFKukWr0gH71y6AFhsN42oM/NrGcVVKP3pLL7bM94m10OUUoLfert4ERntktqbw+CTIjmZTaw16HqZPeQSQdHVOHXK2fh47snYe3kK0BZ6PAsgA53Ikr0rLP076GJ0aMqsQVzNi3HiOO/4IU39siu3worzvYUvw6TiQB/uFcRpDIDYi4inZzgI/figBI9AEcgE0h2zxukWQch+VTS2X+Uxp4Ga0/hAXREJfrRYVWsitpZzF6Zgf/dPgWdiqXJ2raiNcyMm7/tizceo8MYY2uCcdtX/XjLpJbaf+5vC+eAstKT4rd+RXfwLbs6DzO3LnPJ/q6tsJHoauR3d21SAqAtDd0FOUJ+08wLGLUnhfeckWM/k51Vh1Cdiq3X29JR5i7oZLJo5GxVPIlQnUp8AkhQviZX8bfv+8UzRNf39KvD8dVN0zB3OZ9kfvH5Ufj47kl2y5cT6wnmtlDYvRHdz8dgxYz56HY+CiOO/4K7vtuEs0xY4rMvj8SvN2fLfidPKNEBoBdLotdj5poMu1raAvr3nbW1B0IFmQBxNeK1XhUzOZrfowGhLSqkX6AtYbjCmQA6NowqM276bT3efdI2SXp6QG27Ou6ODQvkTPo7XBpld+3aFWvXrkVNTQ3279+Pffv2oaamBmvXrkW3bvyLbUlJCSyWjhl405GhoBS8oA0CEqC4dVqx3WvtgVXiCPS1Eh2wb2U0ctRXXCUWUXyS5wq7NSJWTpFAAftHVcDMsV8JNihx+fbOrAIAAD578IRLbYsnB0kHmUT7OKjVm8jlFi6cQ3nN/ALogo3sfldYKXQu4pNOU9enYy7jDXiU3MBk1AgxjGI6stH3xysAxNY7LjyJVUtNYisiGtWwKK1IrAzjESDHhlVj7E7xjIv3njqCaRs4JLuVtjEB6KBSg9qxpUtVsvwA0l+IyWAZj0tyTq2ZXwCVWcFey36/PgeZjBKd+MtTFrq1uiKV/t5qowIDGB/140NtyjWilO6VHSNPlDtx53akovcWyGCopEsTOzlCjpf24pfbz2Hy5nRc/Vsmhh1KxqCjdLgmrLSnoFllBWXhK9F/uzEbh0ZVoqhbE7544KQsmVcfp4dOQvVGPOf9xXoIEA8Yc9ZblEzuXko2GwG0DQpK/KbInTQUwiQ4Tdhch0sAbVEBOwupXKGLGacHuCYgAegQ7Sv/7IkQmWPQiZVI4uTAGlzF1Of1CXoMPpLIvjZ2Vyp+Wzibt/wz/xmBPmfjQIFCRHMQ3nh8PHsfOjq8Cj/ffK7t2+kkmph8lcjGIJSmuzBpxdye3VmH9ciVFgaUdtFixH6+CO98Lw0imXFgXaIedXGtNl90H4aLynXQdC4W8dP2AihQPDsczgs0mGFkeaqWrceefH2YpOgmTKfGvBXdMW29rc4PblXijs/74+rfMpFxnp4QGfUPPfFhEekoX7nwPEbsT0ZLuBFF3Zqw8sp8ZPelJxPnLevO2snYgVmV7Bi6Heh/lu5w+Gd8ORKrQzF6r2DyBvTvm1IZgT6nY3mvpZTJTNBZaXvG0s7NbFdFrgcnTwPwL6ybW4iNsy+wdkUAPYm5U0bcGMDFjzZJ1WJjYzFixAiMHDkSsbGxosv07dsXhYWF7dm2AHyEqCbm5sW5L3ZlVAT7x1WgKtE9Cgo5ss0f7ByChCR6kG17zRyVBPGSrWd8EStStUgV3myt4BXo8zetQJrmS9z+I18d3S0/mp3pX3p9Doac/dnplrAL3aSL5Cg/IXm9gcffHIoVM+bbniA/lRLIqP4GnWu/wscPHwMAjNvJt9555j8jWCsTbaQRlAORF2np9YYnujOQbSdl9oMxiP6jLr6VVUyfz9SgS5FtALBjYgmmbOwCAEgp4xfauVkazF3Wzc4vMLRZicYYA/65rMzhdlYlySuR/WESDQDCZFrDiWJ3rSBAqDXMjPQCel/Wx9PXBKI6z8mqx46JJehe9g2OjKTJ8/LUFnayjCisYupDMOxAEtqDkFb/INETGDuR2sRWt0+OaGL59ixLr5hD/8G51iZVhiGeGTg2xOjZQC0Cue6Jr+6R7kYhvtDRftI1AQAhOvo35w6ooxqD8cibg51eRyBYNABHsEh4ooe7YKWhidH7VFHqLRjUZpjaEOroLOpkfIUvVjjlGy4YPlSmtGD4yZ9xapDrBLzUOrm446dNqElsZeuh1LJw7Bl6LdZOvgI/XzULvc/F4WSPm3Ckzw3YOvYqPPTuEN77FVYK6yctxOIfsgAA//fiQSQ3fo4v7/VcwG4zEywa0aTGuX7OE3rk9ulOG8guJfIEs0Jg8VbctQmZ52LYx30Lf2CFTQ0+VaJLDwrkJgo8DZVcBg7z0pn+9dg1/BpsGbcIj71Jdz3f/+UWTNn1J9u1wAV3HHv51s7sBNVD7w4GQPMBUnj/qaNI03yJ5Yvy0TPbtl+C9ApM3PMH9CHy18QID41ZJ+xLR2iLiu0iJR7mBFrQY5PcHnW8bCMA8vYuzGsVqVpWRJMbUKJfMqiPs78mbZ9cgm/vPuOW9bcGd7yOs44Aj/V7W62+C/4IoH3oURBD/8FN5ebMyP55rXPBCI6wY1KJ5E3JU61crkAtUHJy1edcT3RDEH1xI9YB5WlaO29qMdsQAFizoACF3fiKrIV/9EQ/JvSxvJMWy64679T2ShGTCj0QZPQPQs0biGoMRta5WDZYUdhiaVFa8dc19DE8fzknkd4KZObEsn7WgM2iRwoKKwkX9A8iTY58DmNaEw1M8doUZcDgo7QaesekEgzfb1NkmIKsqGRaFNUG+tgJ5pCypwfV2anvFVZ6f6+4wvHxWu2gldkfJtEAeX9Vq5Lu0MnuU4+cXpwBKkXv26EHbSS4gVFe52Zp8O1dp3nqZovKii3T6Q4fokSP0QRj5AG+QsblbXdw7HoLXZhuj/rY1vYNysVKCgr46o6TbKBtdEMwMvL5beNZZ2NZ8v5svzocG1YNygI89PZgAPaTIFz8foN0yzE5L/zlWAVsvzmXkKiL1+HG78XDgMXg6NwMIACrFJkgeOH/HhknvRIF3Z3S0eFp/+ayTvL5Ihcj1jOB3XIgE4bkvnBqYA2Ku7ZzX8iUyfoQM558dyc7Fto5qRQ98mIw7FAywnS0iCKpOgydSiPQ71Q8Ww9xEdkUhBdfHM177vkle5wOZHcVhBgVHY7LDNFJN7I7bSDFuqS4KOzRyJv8NQRb7Lq8CIFdk+ibiSMLZZXtout3IsGLW8MHrwtI4vpcm6hDQm0o+p9MgMJK4ULXRvx1bR5ODarFu08dhj6IfxwOOpaIxMpQqIwUbv62D/v8pC1dnPZ/18Tp0bkoEmo9k8XUrII+XPp4J/OznhImhevUbCD9mvkFdiS6BrTtUU73WvQSkOjOTFiWp2nZ93kzRDgA34J0HXOhl7F+chVlnQP++v4I/zBNDcCvMPCsvbd9dXILW7QuvyrPLZ8jSV5Y7NO9fYFgg9DOxYqIRvrGzrWh0YaboDYo2AtmTaIOXQv4qgvW+12kcF0rGDCozApsnrAIT702HADslJNSaIoSD82L1PqHStpbsFBWDDnzM8xMi2FPjq9jTC09KDjfqwFmhQWj/0nlKapNKgtvsoQN7ZIYhBiZbooIP1GiyxF6LZH8m3xriBkz1mQAoFvR5q7M4L1+th+t6NIxXrZBnPPh76tzMeYfPsmrZda/9IYcmBTyxYMjBaK/ePg7IqJ7n6G7FoRk64nBtVgz9Qo8858R9BPMrjvbtxbbptpbYt3w5zpUJbWwbcpRDUGIrbOfSBxwJN7uOSmEaf2DRO93kt7m5khj+5ToEgPD597bw/Oe5E6CAcD4nZ0QxXxudh96UDNqbwpu+YYmlveNLRftrsrrqUGJRJAWAFiVRInuhyQ6x5KtNqEVnUsiZEkTLsrTWiSVxgEEANi6MIQwK/kEU58z8terjujnLYTWw3YrxCKsI6HaQacaAKSSEGXmUkc6QT2J3ZPKsHNKKQA6VLwtiKsLwdYxV/Gem7dxZbu3TQzEzmXn1FL7F2Uv8fSLUW68tznqhn3rucO2iREGW2fQtdKIvfSYlIgMfDVx5Oh61TPPd0p0ua5JAqsC2Dy1iH28jjP2/PThE5izeTnPQtSoskAfZML4HWk8C8e0sgic7HkT9g+6jncc3f3xAAS32M9EbZ9Wgvs/GAwA0MQ7CHdnSXTPjQHmMMT52nkF6FIciW55kbzPBoDz3erpuomDirQW2W4VgL4ekyyBgBL90kFriGcmQglu/m29R9cfQNsQINEDsEO3ohi7504NrGV90E4MrkF1QvuD4Qolgm5iNEFQC0M9fYBgIYGmEG/Xa4k0oRuzb1RGClaFva2GWcQzbu4y+ka+Zn4B9EFmbJ9cjPWzCnFsSDUUVgqLf6TbPg+MqcDBkdJtcwCgDTOK+tIBQESDfxC83oLCSqFnbgz7uDOnjVQTb4DKqIA+xIzirk20Qp+z2yrSWpCXxekMYA5DMb9BtZ6CNoIuqv3FE521lnCme5yiCceY+mDUJrbiQkYTgvS2W0JhN/r8rI/TQ2mk0MQJ+sruqxH/zlb6WN8wu8j+NQ7kwplUBgrhfhLUKqdEB2wBoJtm8r/vlulFUFgpzFvRnff8mX51aA01I0SnxHXM+U2wZn4BT4ku1l5bk6QT974Ugb90Rww/QA+AzSor9ox1bPXTFmyafoH9m7TgDj2QhDG7U3HLN33RSRD6Nn5nJ3QuicTgI4nolh8tSpbLKdQBwMBMtvnLhA8AhLSKkOjxraBAsZ05cqAsgEltQY0b7u8BdFxYFOK1RpBAeGBSyl+sPD3w9Ac0RXqW3K10ENJ9saE12IRWJxR8I/bxJ/GJiEXl7JyFC/OECrMtF8qqAGAGTg+stesidRb9Tsfjhu96s49PDayxO1e0YUZsmVaEHZNK7BTCzkKshnAGJB+jDyMScAcinbhPCuO4SK1zcmANMs5HsmIkR8H0noIjEj26yXcT6hFOks6fPXiCtQgVCrRODq7BqYG1MKjN2DGxBE+/txONsUZsn1pKd45zEGRUIqMgmh1zJJWHYsHf3aEPEz9Wf7spm7U1lAM5BDxJok9b3xUqowLZfeqR11ODa37O5H04BQr6YLN9/U8BE3aIZ0UR7B1bhjgmh6YytQWNUR3fsiwAoFFCxOguNER7dv0BtA0BEj0AO3QptU9R10WYWUsQqwLYMLuw3Z9TJ6EcSSmXCe/wIkKFoYKUdFFJPONJISOpuuAUiVUptILo0KhKPP7RDly7fC1u+X0DZuz4GwdHViCtLIK1hJi7eQW0YdKjgxKZ0KC4et8kxvsSvTjq81SBpzfxJ83J0uBMvzreVbA8VYvcTI3d+sTop3CtmiU9I/yE9CVKdGetPAq6N2DGWlph8uKbe3kDueIuzVCaKJhVVoxiBqxX/NGDff0UE/7VI8c2sUSycuUsnyyUFWa19Ag2oSYUlKz5oPcQ3iL/u8bWBoOygA1MIjg8nPY771oQxbNyyuupAQDE14SyvokEa+YVsAr96IZg1IoQmeWdWqStFASI9JPJs/4n4lnC4v5vt3rkM769+zT7N1Gih2vVWD57PmI0wejBmVTjLvP7FXOwZ+i1GHrY3n/eUQdQKzOg9iclOvHB53KcxOPcmWsCObYq0joWMReAe2GRGDk0R/BrlHIHgZqtl4ASvTrJs9YT1R0sw6DOyWBjkrXBRahWBZOztz1JSyKRRc1Aafzd6HKBVqaGM11ewi5SV/DuQ5ejIupuhDWrYAyysKIFgueW/IPr/1qHa1aswftPHmnTZzS3ldihgL4n45BRaD8WbCucyWXSh5l5+5+QmK3hZltoOOhuKV/A0fUqxIcWes5O5u+aXIoZ25ehNlaHg6PsxVlr5hfg40eP4ZqVa7BmQSH7/DUr1th1kFphhZEZT8XWh+DRT3dIfm5laotTgfLk3uLJ7t7ohmBM2EHnYa2dV4B5K3vwXlexvk72F4l5y3vITsCtn3cBd/64ic1OEBtPBtDxIDZeay/SCyJxYMBiAG2fEA3As/AYiU5R/kGCBOA6oprFSYGWUNsAaa2TFiNyaJRIWE8r8Q8SXdhaCIomvwi4jhUkSZyQGMQvlwvhLHx273oMZxLp/1hMk45EwU580J95ZQS7/PYp9jYQBJunSSt/Y/zIs9db4HrZkS4BIX698Rz+WJzDe648TYvCDHt1kVAhAwDRDSEo6E4vyw3l9CVIIa02OXdpf+r93ehywbbtFu4YQGmb0BpwjPZ6zO/RgKBWet3ZTFBVPCe/gJBwaxcUoDBDvNOkJkEne+fxhzwEArtrgACaWD1G7bX3Lq9KaUFtnA4qswLdOS2+jXF0IRRfE8KGuhLsmlSKyiSadIpqCLJZlHALdgry4UYcJFf63hILANRmJbrluW8wLoaKtBZUJbZg6eIcnBxUAwDI6W2b2AhvUbMECGC7PsRogkUnbEo6N+HYsGrZwZIpmLFz8SclOjOIpzgXLEJKOdUtw7ytzAGJrg034s9rctuskAzg4kaQSH0D2EKrCS5I3AMILgUlepWHMwY0XrAx8QassGLtnAJkZznnIxxiUNplDenc4D8v5lRkDqIV8kMP0ZOt2ij6c/7z2r52/b4UKFbwsX5OIT574ARODqzBN3edwq832yzi3n36CIrbkB9A7FxE4aBEHL1XXnHrKtQmpVPqf7ZjygK0RNh+z2BORtWyq/OgE/Eg9jRklehWsMGnvoDdZL7Mvi7vpMWX951kbUmDW5Xomk+PA3685Sx2XSZi/wPg3+/swqf/Oo59Y8qxbFEe3njhIPsbZfetR05vjf2bBNsRTshxKT6d+fk9bZE5eyXdCf7afw4gqjGI16lnBP2dtnA6HAlWLcyHA7dKnBpUy3ZNlDmYSA7g4oY23IjlV+Z5RHhiUJvZ80AXbsIf1+S4xQUiAPchECwagB2iJFrSuN6LOyeWtnsALVQtEXQp9g9CMkxEhcpLkOdIQoOYAo+8ronTI6mCT2IJSYyGWAOmrU+3fV6zCm8/dBkAenbcQllx2Y7OuO/DgQDklZHbpkkT7DH1/kNKegt9Tts6Bo4NrWHV0kqj7TdbO78Q/3voBO995WlabJvKb1sEIHqljG4IQnUyfUPjKt99CVJI23nWSlyO83s14O1nD0uuL7aOXl9CdSgoC3BiaA0bTEpQnqbFe/fRxy03K+Du7zaJrrNYpmsC4E9U+RpKi4J3zAiRm6mxCyYCAFDA//5FH1uZgnAigPZFzTzHPM/5beoSaUIkuFWJIyMq2XWJwir4XwCujZGvcfdnAzz7ARTwxf0n8fn9J/D1vbQqvTK1hUdwcC2eejjwLiVeoZJ2PswpoDBTTrdRewNkEpd7+lcntsAKK3suOwNHgY//fmc3HvhqK15/6UCbtjOAixtSxxJRJRIUZTTJWos1h3d8dVVtomcHvZ5QwPkC39x9Grf9uhEv/t8ep5bPOhvLCztvD85m3AIFw49SEq1ee8eV0xk6Avz7nd3t+mxSH/z3v/vx0ht7MXX3X3jmnX/slrvhj3Uur7s96kVhtog74IwVHfH2Jr8C+Y2LuvLvST/fcs6dm+YUdGHyxL0vOyhjBRaiCgf7+r1/H2X/nr2qG0YzGUc1yTrsuayct2xSOT2GXHb1efzntX1YsGEl7v12Cz548igcggIGHKOzMaLrg/DkG8MAyAeHKk2U0920bcVMJg8KAF56fZ+oeOf7O8/aLDIZ7BlfjiiN45qvihkbdsTg5wBsWPLsIdzz3RZx3qCd0IeYebacD361DdesWO32zwmg7WgziZ6Xl4cNGzZAp6MvFELS/MyZM+jatavYWwPwY1isFrz5L/sCDqCD4QBAYaIVR0SF21boQsVJ9NSyCNHnvY1wkWA+fTCniOIwFaR44nr2dS7mfw+1CBmXzAlQnbohHdPWpyO8SY3yTlocG1oNAJjDzJj/dW2eqELAQllxZFi15PeIEwko7OiYurELq5j+7u4zGHCcVlKb1VYkVfBJWgXnMCxLa0JxV+cUPyS4Ma0k3G/8p4mdi5DMcKq2Fym6G6JoFetrrxxA5ll7MhhWoLhrM84MqLMjc48PrUFJZ/t9eXyI9LEK+N/xKqW6BID8ng246ds+mLi5s91rHz1+DNXxLaiLs29P14Yb8ee1ObTKgPvbUEBMXTByMzWsLykAJJeHIqzZvjMGgCSJLtWB4QvMWi0y0eBmNEcYMG1DVzb8GQCefH8nnnh/J55d8g9u/6Ifrv++Nz65czJC9PbXdgtlxfe3n8HYw7/h+SU0kSMVoEi8n2Prg6Fw1l/HCyADT5YIstJqvge+2Ir4GufPqz+vk7ZjMissWHo93cHz2b9O8ILIHGH75GL8eMtZp5cPwD+hl1CQC2269oyXz0BojvJs6KY/oNZJe5K2opHjlWpWWPDeE0fwxPs7sWxRnuz7frr5LLbJdDd6ExUpWjz7Nj3uyOmjcbj89LVdMX9ZD5s6uZ2arbi6ECRW0XUhqeGFePH/9uCfCfbH85oFBdg0w16x6iwm7Ogk+do3N0xj/87uW+/StRZwoETnQmS1vUQm/9sLZ0j0KKazi6uSBmirRVLTA8DJQfJ1pCfgz50zQhLY4uT8UlRDEPK7a/D7TdL3/LAWZnxj5Y9Z+x+Px8g9yXbLP/OfEbzHhd0aMfBoAkbtTcXLr+8DYOMTxBDRpPb4hERSdRiu+YX2Ql92dR7SC8VFJ1GCTkOz2gqtzLaHalW8bClf+fcH4B18fc8pj61bF2pCsEHJmyw+M6DOY58XgOtwmUSvra3F1KlTkZmZidmzZ6O8nJ6xvOOOO/D444+zy3Xp0gVKpe/DIQNwDQpKgd2jJQpr5mghA/T2JE+bFRYYQ8QLwrQyf7FzsSdamqNsJDq3SDExIXOkyCpP0yJNEGbXJDJg3Du+HIOO0ATv/OU9EKJXYcqmLgDABrkMO5iM+Gq6QHrk0+12hfThEZWyN/W42kvPzkVtUmLUHptqqKyzTQ1QlcIot5jdOGZPGvv3ngnlkgSB3WcwRJrQb9mXiK6nCz5ngrkAIJixK3nhhVEYzdiSRDTajvvidFsBWNjD1prfqZg5tpk698v7T4kS9WvnFdo9d6Z/rew2uUL2eQPcNmIhWsPMaAkzYa4gQJTgpTf24Z/L6YE3xflJDo6uxFvPHWYHErNW2SacKSuwTrDfZq7phrkr+L6NBCqz+G2ca9Pja6SWh6P/cfeFlInh9MBa/PvVETgwcDE7WF8/9wJ+vP0svr73FH65KRvv/etyXLW0l+j7FVYK391xGud72SaHWyVCsghZ7W/HKgkWZbl/5pz867o8JFQ53+FxdHg1qhLFbQqEHp/ZHNscObSEGnHt8rV44qOd2DPOMwGzAXgHhiAn2DAAxRnNsqMMT4dx+QM8bbfCzcrZMPsC/u/Fg/jx9rP41+fbJLtF948ux+Mf78R1y9bKZu14C0uePeTS8u88dBkUVopVLbsDaaXy4p2c3hqsXsh0gzLXV2JN8ewSceGRM5i+jg45FOKLW6Zizip+XcHtBnYGze1Qovf0QF2rcsJmUFjOkBDjss5adDtv6yDLacf4s62QU6JLzLd7DYlVbbPv0weZcXxYjewybO1PAeN2pbHPv/LMWDz5xnDesiP3puChd4fwnmuKNuLEkBpsnE1PNlEmfteqEJ4MFeWCa5d6eFSV6DIhwmw0AMZg6R/bGGTBNzdMZx/7yr8/AO+gtxvDl4Ug9nj+krkWgD1cJtEfffRRqFQqFBUVISzMdtG+9tprsX79erduXADeh8VqQbCISo8LojbKddK7UAxaCSsXAEjxFxJdZD/8fr14CyHxi29iBoXlaVq7gFSuvx/BnvHl+OK2qfjstimYu4JWaxLVNPH0VVgpfL94BgCgJL0Zd3+7Gfd+vQVXrlqF/3v+IOZuXiH7PWI0/kX0eAsDTsazf7ODdYG/9DU/Z+KD+yeyaoNz/Zw/ptUmmlztVOIfnRMAP7wpvsrx764yUvjw3om476OB7HE3bX2GTTGkBOb9TR+X3MmFF54f7dT2vPDmHtzz9WaYmd5So8qMH2+Xb8ON9yNPdMCxL3pOVp3k4OofTueIUoLsBugJyfAm+npTH6/Hsqv5KkKVkcLSG3LE3gqlWVyxE+tn5/2Vf9Dkdf9j8U4p0lzFgTGVGHrqZ9z93WaeqohMQG6bWuyQMJqy0Wavdfcn0hY0RBniT/79gL39DFHuDTqcKDlIlMKdP2zCxw8fw42/r8O/39mFnMx63Pv1FhwewV/PjB1/Qxsuv193TCpB/7wf2ccL163Cjb+7bk8QgH/AqHaPIrM9JN/FACussiHbzELtgjHYguf/7x9M+ucP3PbLRtvzQRa0SJyX6ziBmNum+laNvnl6EX6+1QlrDiuwfMY8LJ85D0kMYZhEcj/cIFrtziFoxcCqoK22zxt8hA67LOrW1ObJiNj6EPx+xWy88MIovPDCKPZ5YqeybfRV7HPjD/6Os32cVyI2tWOSKqHa/fc2ua4+AovAh4R0qxiDLYjh+H7nZmpcVua3Fy0ynugKiTrMW+DZhwp2S1iz/VhWZaC3V08EN4KaLL5aXHxlUlrw6lNj8cmdkzFudxrG7+yEUXtsuUApZWFQWClsuPxKLF0wB7EiIq4r/+gp+128ZZGX6gTXUC6iJO9zUrpLw6S28IQ3ASV6x4YwbNedMKutKOzWYHc+ePu6F4A0XCbRN27ciDfffBOdO/Pb13v16oULF9re0haAf0BBKZyeUd8/xj7Z21nIKZCcubF5AyEifotmwYSgggkjOdO/DkoTBbOK3nnF6U1OfY/SLk3ociESC//qybavkTZKruJvxIEUXLmULjxWLsrHsqvz8M/lZXjvqSMOP0Po6XapgNuOWplCqwGExzYF2oN/4lZ7Ow6HYNblL50TAE3sE3XU5Vvt24RVAkshbYQJV/+aCaVFwXpzNsboWUIdAI4OrcK9Hw3kva8pyoDkMueUrcuvPs+2QW+R8e4nxKo/eaIDcOjNeGxIjV3gVEgLfe2o4KhQTEEWJAqshMhApqhrk70ajXOsNsYYRJ8HpPmDMK1/qRdmrM0AAOT21vAGXe5EaXozdk8sQzknzKk2oRXp+ZFoDTU7JIyu+TUTKqMCvbJjeN0BQpCJZn87VoWqKUKq5/fUoKiba8F0+8dV4L//3Y9Ns4rw7V1nMOHQUiy7Og+PfbKDt1xrqBl/XSNPFL702l67bql9Y9tePwTgO5iUFqeV6I7QJCOm6AjI7l0vbVkj6BZpK0wqC768/5Rom7dYEKIVVl6H2MFRle3bgHbi5df2AqCvVUMOJkouF6JTYszeNLpzkIE7xgqLfqfr6p4Ocm3YLBjO71WTqGO7kc730rR5G8bv6oQHPxiMm77rA4DuKCSkft8z8aztRHOUET+7YIfltJ2LACEtClYk4k6QukgOcmpv7qRQU7TB41ZJQrTKkOjcYEpfIKVcWokutmUJwtpFUH7WJvLJwYRKevltU0tw8zd92Y4+hZXC57dNZScR+pyhxUuDjybi8m2dWfEEsdFcMWM+GqWIR+aa6C3lLQUKE7fIj/0SK+1rvMRqedU/V9hypl8tjCr/tQEKoO2wUFaPBIpy8f1tZxDZyD8f6uM6Rph4R4DLJLpWq+Up0Anq6uoQHHzp2UZ0NFisFjSHOade2DGpBOWpbQvNkCPR/YWUdKTIB8AqI3L7aHhp4mWdtaLhW1xPP4C2hBF6cGcyxXxepgYWDuu75NEJkoWacL1cEJ/sSw3csM/6eD2Sy8JgVQADjtoU6n9dk4fBZ3/CyivzXV4/aZX2l0kfAqKOHX7QnqgMbxTOAgElXehzmARd5mTVY8R+m89hSVctdkwsZpXSAPDkR7sw7ADfC3HKhi7s34t/yMLNX/dhH69ceB4A8M6/pdu2STivv6t704r5v/cXD560G/iFSxDYakE7853/6w8AMARb0BAnuCYyp/qIvcn4YzFNUt7z8QD8eM0MHpFuVojPeoplOvgS3fKjEKJTQh9ixkvPSXcyRDa0fwBlCLbg6p8ZtRNlu6fIhTMDQGZOLDaPX4Q/581FWWfp4jiE8bz0t2OVdE0QS3RC4Mn5j7YVE7d0xiQmC0Bqvx4dWoW+57/H2f40wffhvRPxy6JZ+PzWKfjg/svdvk0BeAfprlhFyYgy6mO9S4J5G3VyJJ+bxGRikQwkF0J4X9o3phw9Sr/FhW42a7aytGbsvLwEvQu/Q9fKr7DyivPu2TAnkJNZz9pCrpl6BRb/1Jt+QWSOpmeOvVK8pHPbxh8EaoMCbz9Eh6J3akMW0/meDeiZTW+XO+xFohuCsX/gYmy6bBGvE/b1J8dh8GF6gqHZhYknpzs9BMeQp5TA4TrH9/amGOnvV9CdPm6JGMTTBJYQYpNSBM6o7D2JTjJ2RFqRLmgiLHIWNck6wEpPXgw+9yPWzrXd81PLw7F5/CL8eM1MPPDBIN77bvihNz64dyKWz5yPTROuxOi9qcjNlMhTY66J3I4DT+N/d0zB6qkLWCtMIQp6NeLtBybwrtc1wrBowbWca3HXEGvAngn8oNYAOgZq41tZyxVP4et7TttN3ol1RwTgG7hMok+YMAE//PAD+5iiKFgsFixZsgSTJk1y68YF4H0oKIVdUJpCSkijAL6472SbPkeqzVDdSvlNSCM3HEQK3LYtYlFDyHTW/49zgw1rsS8i94/iK/K6FkQholENXZgJR4bbWucjm4LYgj9Uq8JDbw+mP69RLasMEyPzOzqssEJlVPDUvU1MABc7qWClW++4qlVXoGFmg4W2Pb4GsUNJLQu3IyTFBlXnmPbgPmfioDBTKO7ajIRqjvqCAs4OqIc2kn8jz+/JL4SLOJNBFzKasOTRCWxL8MqF+TjdtwYnBkn7oauZ38rffKbDBGQ0ZQWUHEV/eSctKpP4x1AQ57oQ3qxiVfbcduCwJhUe+Ggwb11iODjGphR8+rURmLahK6912CwWhGZ1rKD3NpQWBZsfUJ2sAwTinIQK916nFFCgey5NcJBBz6YZRZI+wQR9zsYhpSIc2yeXSC6jZn5ff7MeCmWU6GTylRwbcv6jbUVMfTBee2ocAGD7lBJRD/WPHzmG2kSaSJy7vBuu/SULUzalY9KWLrhsexu6fwLwOaQyGCQhc3mrS+jYJHqt3PfzkHD10SVDWSVni4BE//Sh42xHCJkcrkhrwdWr1qA+To/WUDPu+mGzZzZMBEQFP357GvqdioeJBKKLHGKZ2Xzv2frYVpwYIu/l7AhTN6QjjCF2ncm24QoJALq7LIUh39tjb8lFRmEUul7gh4JHNgXhqt9pRW9LuDSRy4VBbXY6G0cIT40ZIhrbMbaz2iaFyX2trI21e1shp5IPFulc9iZ4NbsUOIeDWE3QqTiCVYwTRGo4YwjmmlWXoMcHTxzlLdfvdDymr++KYMFkQr9T8bjulyz0yI/BwOP0RJCUxQlRcAvDPD2JuLoQjDiQgvcfmCi5zJkBdYjidHTbXdcF1/LCjAbe8bBmnrx4I4CLE9zJaE9BH2q2u87ZTeIE4DO4PLRasmQJvvjiC8yaNQsGgwFPPfUU+vfvj507d+LNN9/0xDYG4GWEtvKJN4vIURJbQxdZnz5yAscHu56S3hgtTqJHeXEG2hHEPNGFMATbqhIT4xVPSHQrRfvDcW+wFhHVqDBEUGVWYNoG2kpgreDmu/inLOwdch0ODrgez74yEnuGXouV0+fLnsmpbVDYXMzQhhkx4sSvmLVtGU9RTQYfuycyoXYU8MiSIfj0jsnSK5NSi1mBSibkyd+U6ITY08Tq7QIvhXZEAPDnNTnoU/A9dk4sxZjddBjrmy/YK8Zv+aovNo9dhP7HaSV/bUIrYjiDrdzeGvbvfePKURvfigV/0WrghlgDJu/7S/Y4JeG8/qbuFU7qNUcY7VphhSHL5RwVc2RDEKKZ6xpXEXzn5/2RVBVmF0AshZ0jrkG4Vo3qRB0sKtuBaRXz37KCtYfyJ5DukNMD6gDBmLMhlt43LWEm3nHVVmyYfYG1jSnq2oTk8jA0RRuwa2Kpg3fS4E5gCkEmMfztWCV2LlbmPuNUi7kczyLD10RrgtEjLwa9T9Pk1oDzP+KzB04AAB7/YAeSGz/H6ivo+9dbD0/AZ7dPYd/79d2n0bP023YF8gXgO8gFmbsCT/qJ+gNklejuujxTQGJFKE70uhEne9yEJ18fxk6gcpWz2jAjtk+hJwY/uXMyfls4GwBwaoA9EZ2T6R5CWA7bJxez1lC9z9LXkAaZ46GPIMBt84wiWEQmkBUu8MZNHFHBkMOJPKJMDNpIExsoTxDOTEYIA5fdDTLpIaeG5sKu+8iFzgdXQqhdQYyT5ChX/BHUypwozH/R9UEsAextv+nWEOl9HyoSQOlNRHP3rcS15bElQ2XXMXtVBp54nR8UKjoBbwWODa1Gaae2dYKQ810IIjzzphKdYPbqbpiwjbbAFNbOKxadR79Ttg5muesUABwbVsMTA62dV8DmQgXQcZDrhfskYD9x+vn9bROvBuB+uEyi9+/fHzk5ORg3bhwWLFgArVaLK6+8EkePHkWPHj08sY0BeBkplQLSVeSGPPRQEvv3Ty549BFI2bnE1/sPKeGMsqA+lr6Zci0fFBZ6h5V2acbs1d14yxtEVJAnB9oPYohP27Eh/AkKChS6n49GYk0oKFBQminUJcjf0OW88joiwlvUiKsLgVVh72cn9GTUhhtx+ZZOtMULd5DhYMBBWYGaJHo2ONVJEtRbID7NdfGt9l7vIufyiqvzURffin99tg23f9nPtijnUA1uVeKeTwdgwKkE1pu/OlmH0f+k8JZVMQNMi9KKb+8+jfnL+CS+HEhwqZ1Xo48RJ7gm6cJMdq3lpwdKK+wrOrWwRLmJ0zGyfNF5GNRmDD2ULPVWdr8u+KsHsrJjUROvw1aBr7xYO7+zuRbexpDD9H1jw5xCu9eMwfS+Maut7bd0sdKTSAOP0d7+hhALhh2kP/v3xdk43b9WdgDYFGlAQQ9plQmZ8Ems8q9rK7FzIUo9oX2QKORuczK8QCSjKrzjc9s14/P7TmD/qHL8dJstKDCpIgw3fteH57FLVJuX2r2po6DJTYGgbfVsvlhQE+9AMdaW67TIe4YeSERyZTiSqsOgtChshCtHOXuubx30IWYkVYRh0dKe6FxM1/ligffn+jofXslFbZwO9bGtqI3TITurnmdHKMTtP25i/yZ5LA0S4hrA3rP86FBx8Y6Y6EcKXGsUpUWBCdtpEi1GJAyRIF4QuElC3tylRJeC2MSIHOzGWC5M2niqu9LZSeeRnMwU4e/JdivA+0p0ueueWHinN6E2KXk1Ow9WoM+pODz4/mDZSfPFP/bG1E3p7HsAiGc6MMfSccH4tCFaj9P9a1GWJl1baWL0OCUy5gWAIKYb1ZtKdC7u+oy2VxQGN9YmtiLrbAz7uDVEfqYuN7MeicxEVJhWhepkHTbMDmQGdjQQ8dS4HWlst3Gb4GIdcHSYtMAnAO+iTU2+0dHReP7557F06VKsXbsWr776KlJTU929bQH4ABarBYVdNfwnRYovbrDGurmFLs+yStm5JDrTkuYlcK1axKAyUqwShhvYaFDTN9jyVC1mr+ST6Ppg+5uvmDcdGVQIFa5c/HzTOYw6/huuWr1achmF0TlFfUeCNsyI0/1pUnPlonx0KbT5t7aG2fb/3sHXojpZhyHnfsbJIbX845wS/C8AUaIG6RV+Z+lABip18a2szzkXJMxSCF2YCUMPJeHB92hPQ+73mrSpM3rkxQAAMvKZVmMKOMd4/1mZU4VLEr/9zGEY1Wa7gjikRfy2QxQv/mY/FFPP3x5DkAVZZ/j7lSgFpKxoxELfiro14Y4fNmHsLul7Z1iLGoVJd+CL26aiuEsThpz7CQ9/tt3hNruixvMmZq7JAECrmORQ3K19XrfkvFVabMc6GWCuXJSPyXv+xNCzP+Of8WWib988XVzlSEBUfqll/kUCEyU6a+MCphuqnVg9eQE+uZPfsUPsl27+ri/Odb0FlBkoS9di/qaVvOUODFxsZxFHVJvc8OcALh4UpNyBx96UVzU6A25QYEdEUYYH2r1Fbt86ARFOCFeufRg55zLPxYACheSKMN7Af86Kbpj/Fz3p3RZycu/YMvQt/AG9L3yPvoU/4LKDS/HS63tFl9WGG3ndDBkFdE0h15mQKbhWSKoAXSCLheOQ9CK6Vhy/I01scQCws07cN562Y8zv0QiT0nNqU7GJETk47YcugpRKz5DoiU4q3Mf8Y6uJTEH8+zDX37uki2th2e2FnAI5QsSq09sIlyLyKeCuT/sjXKdGEjPGDhbU4fd+NBD9TscjrTSczlRw4jzKEUwc7ZxYisl7/sSQcz9j/2hxH/BNMy+wXdtCqI309gtrbm/hsh1dJF/77m6OWJCCaG4DgSbWwE5E9WY6aG77ZSOK0r17vAbgWZDjf96K7jyLTYDPCbkbzt4DAvA82kSi79q1CzfeeCPGjh2L0lK6NfrHH3/E7t273bpxAXgfCkqBxBrBoFvkWrD6CiaI0UorUr+784xLnyOlRE/2I3/pIAckejSn5YzrS0yUPeWdtBjzTyo6F9mU/VaRVRqDLWiM5BdnxPagKqUFDdHihZsztgS+9unzBcJb1OhSZDuOijOaEKq17YewZhU+uHciYjQhWH7VeRhCLAjRKdkwLoBWD8jNLJO2w+TycL+zzSBEbm2Cjia+yfdgDlHhoIQFBXz42FH0ID7SSbZW9N2Xl7Fe0jPXdGXXdaF7I2sZoTJQfP9EAH9cl4snXx9GK9StNLnbLdc+IIwguj6Ip1j1B9i1liqA+DrxwWC8YJAoqQxisHHOBfQ+I00khmtVbJvwgdEVMARbEKRX8LsfRA4/bhaAPyGjMIq1A3IGLheigkO7PlbPdkccHlGF6WvTkVQRxp7rj328Q9QjXWijJfyMqmSaZPI3q6wQhjwzM4NUk9qCr26a3u71fvDEUTRG8e9DFoUVmhg9Vi3Ix+7LythgM5VBwe7fl58dzWtzr0jR4uDICpwcTCvRMgXq0gAuDqjMCl7901boHSj6LlZYKCv2jy5nPb8lIXF5U+ldu+6d6cvvhArT2geL/noT3R2SmUPfb9QmJfpyLAp65cQglam/hTYZlclarJ1bgNo4Wll/cmANjgyrQllaMxqj9Dg4sgJXrF9lt11/XpcrSixzlaoz1nRlbeQaJWpdAOhUwr/WyglMZMG5RwiVxcSaz6ySLv7qElt596ULXZugMlAwqS0uhzW6gjAyMRLm3MRTe7pFkis9MzlsN76TKEXtxkkSl4mdE0tlux3cjUYxVTYDYQC9L8BV+guzzNbOLwRg6+iwKsDb/30ZWzYKFDsGcIT/PXgC62cVQsfY3DRH2I65pYtzsH1yMdbOKWBfPzakGv9+W5onCjIRJbpvSPTQVhWSIF2fcseEcldoi8rK2rr25thQrbjSe6HNAXge5B7UKzuGrblZuHJZcnGYow8OkOj+ApdH2n/99RdmzJiB0NBQHDlyBHo9XfQ0NDTg9ddfd2ldO3fuxLx585CWlgaKorB8+XLe6xRFif576623JNf58ssv2y3fu3dvV7/mJQuL1YKqeAkVCuei0BxppB8zJ/+zb/+Dgu4SidsikCLRk/yoPT7EAYkeyUmw5w5WiCq1PFULlVmB7WOu5nnTqkUCS+/8fhPvcWRTEEuUEVW1EM74cUW0+EdIq7fBJYAB229FWehJjnG70rBxpq29rnNxJL68dSr7+NqfMmXD+IgvZpqf+aEDtkK6JqEVwQYlG+7pDL69+wwe/XQn7zmVgUJzlJGdtFFCiYV/0NZdViUwfB9tk2EKsuKna2bxjvXVCwpw25f9UJpwFyqj70F57D0ozpBWY8TV+ZeqH4AoWSTVpaJivvtlW+m2cKsSmLUqQ3b9y66RLqwjOUFcpGC75pdMHOtzI9JKpAekQUb/mojgYs4qfneOXICzlGJJEoJi9OjwKvRkBoQVnVvw1OsjcDLzJvx47UwAQGH3Rnz24Anee3QhJmyeXiT9EWbAEEpvl7/ZkYQJwmTNSiuGH0zCz1fNatd6N80uwv+9cBAKzrltVlhwIaMRd/64CXf+uAkl6TQxllATgvOdb0dl1D247+NB7PIWyoor1q3E3M0rANC/e9cCfoBeABcPQtwwQW8Q6czrCPj0oeOYv3Elzmc6XxNz4VSWAQc1yXoemRgqIFwPD6/EvnG0Yprbnca9Fmeei0UaMxFWnmYbA1hhxdUr1uC2Xzbi9p83YtdlpZi6+y/M2rYMczetwH1fb2XPaSHq4luxb6y9IpV4xWfkR+GHxTPZ+5UmRnxcENyi5E3GNUUa2hwIz71HVCXreJODhESvSWyVJUFiOXWKRWVllbPc/eZuiE2MyKFJhvB1BE/VYUlCJbrEPq6N17HWZAAkLccqU1twYnD7wmVdgaydix8o0dM4k/pCUn/npBK0BpswlLHUM4RYeOcC1y7JEOxcR4UmXo9bft+AN148AAtlxTtPH2FfWze3EO88fQS3/boRP95Gq7i/u+O0uD0MAyUTWh3tIzsXABiu6C/5GjcPwVFYO+nmsSgteOvhCQCANfMDAaMdBa3BJhR1pceyqaX24wCTynOTexYVRMU/AXgfLpPor776Kj777DN8+eWXUKttN41x48bhyJEjMu+0h1arxaBBg/DJJ5+Ivl5eXs77980334CiKCxatEh2vf369eO9L6CQdx4KSoH+Z5LEXxTW9YLHqxbkO/05TRLeh1J2CL6AIxU3t8gTu6FWMAV1ZFMQss7aBi5CRQ0AHBtmb28wllHnbJxFk71lac349F/HcWBUBSyUFed7OR6g+dP+9Cb6n0jgPSbel8QH9Ol3dvFsMfJ6alCa1owFf/bArFUZDr2OiZWBp7wj2wOiIiKqqOt+YiYR2yiYJ8c2N2H+iTds4UO5Wbbj8KHPtmHgUdu+10Ya8Z9X97GPTQoLmqNEBoFMzR7tIwWKHKJFwsZCJEKkyMDVorBi4R+0d/yuy0vRLU+aLFw7r8DOu5+gywWbFRGZNOvFKAl7ZcdIrjPUDwZ0Urj5676YvTIDI/fQXvCGYAuu/qUnxuxsvyVcp0L++bh+7gWWUAKAO3/YBIPajNF7Ulni4/AIvlp0x6QStESYJIkstdEWKupvVlk84gEAKFodNnFLZww45nwHABdkPzTEGnjrT6oORXizGmN2p2LM7lSM2JcMygxUpLUgt5f9BO+S5w7xfOYHH07CoZEOlLoBdGh4cqDpS/z3v/vbtwKRAHpZUMCZvjYykfXPZghXru3Cgr9t2VW3fEVfi6/4swdmrs1gJwW5ZPDnD5xEdl/6/fvGVfDsA0u7NGPzDP6E46AjCZi2Lh3jt9OWKNf/tQ47JpbwlqlNoEl0oUd2fZx4EKuwjuWGeKr0lE2Y4urhpACuWrmaDVIlJHpFaousJZpZ8Pto4mgi3pMkuque6O1Rosd7KJemc7Fzk6Zn+tXxah8eBL/xt3edwsGRFe3cMucgZ5ET3uz7mqt7nk1BbuEco6FaJQzBFpzv2YBxuwRWRcxi6YVRzEMrzvZ3LRPhtxuy8X/PH+AJZGoTW3FgDP27zGaEJD3yYtiwdzGQbXZHl1NbMUExXPI1k0yHihD5PTQAgPK0FsxckwHKQos62hrGGkD7YaGs+Onms/jp5rPtDno937MBFqUV0fVBKOks8pt6uBmY2/URgO/g8s+cnZ2Nyy67zO756OhoaDQal9Y1a9YsvPrqq1i4cKHo6ykpKbx/K1aswKRJk9C9u3xYnUql4r0vISFBdvkA+Bh7iAkjlClIEytsRRbxgnJllrUuRjxwKdaPlKjBDggSMmsuqaZIaEVLKE2qcZO9zSLtrQ0xBruZxTmMn/qaeQWwwooX/m8P/vPaPlyxbiXO9qtzSpGSLlWIdnAsnz0ffU8ybXRWm8UOIc62zOSHM0IBPPHxLjRHGfDdDTP4kxoivy8Jj03zs1BRAHZqsidft3nXCn0QnYGZITo2zClkW7N7no9BJEMu1yXaBr4Xujfh6Aj+hNCX95/C2T50Ub7k2UOiZL6aIeq4ljr+AjFi38zp6xx6wDbpSCYumqOM+PTOyUguD0NzlJEN1BRDVbIO1cm26yG3ZTSLoxo835OerCBWT93yBS23nOM0qtF/O1ASakPx7Y0zsGLWApagfXzJcHx56zTR5SV9PkVQmqFFWBN/+aPDbcdjYfdG/HTrWSisFL68me48EdoCrHVwHwtmJlD8LVAYoMPxuGopgFZEqcwKXPNrVpvWSVkohDB2WC2RtntObbwePfNisHz2fCyfPR+rp1+BSVtpT9G18wp56yjo3oD3nuKILKzAgbEVAWXWRYxmxs+8PYFaFoXVLsTtYodcqJ4kBLvA3IYJ73eePsz+zfpnM4QrUX5f9VsvnsqYXIs/v30qwrVqVuCR36MBFsqKihQtXnpD3NdcDPkpt2PjxEX46dpZbBeKPsSM6/9ah6pEm9VJLbM9QnKckOtCJAksJrkhntENIWwodYjO9frm+NAaPPjFVgA2UURFmlZWWawTWKqQjimPkugtrpHoze0I7XU2ANRV9DjvHIme3acOww9IBK4Lzo3fbszB3M0rUB8rfuy4Ew0SHdSAf5Do3HqRa5UVwdSDuVn1GL+jE4K5k+0UP9tpyzT+pBjXjlQKDbEGfPDkMdHXBh9JROcSehz6r/cHy3ZmEtsXOwtFL2K+Ygr9h8htyaISf14Mlal0TX++pwaJVaEYuY+ePFg3t7D9GxlAm7Dsqjw8/vFOPP7xTqyfU9iudZF7UK+cWDYXw5toT6dRAO6DyxVHSkoK8vLy7J7fvXu3Q3K7PaisrMSaNWtwxx13OFw2NzcXaWlp6N69O2644QYUFUm3ZgOAXq9HY2Mj79+ljNFHGBJdppCvTtEhtoa+0VmUVsBKq6lLOjsXnFGVKEGi+yhQRAxhWnnyhtzwxfYTSWonanFugJqobyIFfPLQMd5Tl2/tDJWRQlG3JuwbW47TA2hbF7PKisl7/gTgWGl+KQe3Lfq9F/0HBVy+mbbXYGeMrcDC33vizUfHY/h+W7G+ZXoxznevx0ZukrrI71vL2MWM39nJI9veHpAgwZokHfRBZoQY1WzhFyyhoHaEiCY1ahNasX+MrVgYeijR6ffP37gCdXE6fPjEUdHXSdcH1yLJXyAMRgVotW0UM4lA/PEBwMAMXJoiDVBYKbYDRSp8VmEGe3yR6w130LL7sjKcHEgrDMsYBUtnJvwsXMsftHHJLH8LZxWDwkph1B5afb5h1gVsmFXIe73PqVjc9E0fPPOfkS6tl0v0iuGbu07j0Y92QMuQgIXdGtkJTKPKjA3MuW+WUMkSG4tUP+xCAWy+6OScJy2nYsRIUrmI4pB8beZ4MgVZ0BpqL8sknVbne2rw5Hs78diHO9hsD+FEBLeL5Zav+rKeq2SSOYCLD3UM4cm9/rkMihYQdCSc6+uailMMdv6qTmD7VFtGTpgghJKQ047qxQHHExDRqEZ1sg7Pv7mHR/h8cwN/kvOmb/rg5q/74KZv+uDGb3vj1ytnIZxDPE/e1AXP/GcEADqbYdzh31lFem0CXf9z74tWWFEXLz4uEG53DkeJXptke09YG+0LT/evhUlpQQITumgMskh2hwGALkxcpr5uTgGqklrwzFu78d4TR9w6QcRa9IS3QYnuzGZwlvFUB2uK0P6QXDoE21eZouN17yoNdJGklMlIIR27nkSzDInuD7UrN6PFwuHJqxlCNzdLgyCjklWGEySXh7Ph3/vG8gnBkXtSkCRiWxfSIt6p/eYj49H5gm07Ms/G4Lfrs/H4BztwakANlt6QI7n9mhjG5smHNm89FOkYSGW1uXOXBUXX5CXpzTjTvw6zV9lEcQF4FlunFuHRj3Zg12WlMKjNeO3F/Xj40214l2M3dHKQuE2us+D6oW+RsX/0FLQRgdrZH+By9XvXXXfh4Ycfxv79+0FRFMrKyvDzzz/jiSeewH333eeJbQQAfP/994iMjMSVV14pu9yoUaPw3XffYf369fjf//6HgoICTJgwAU1N0uTuG2+8gejoaPZfly7SCc2XAlKqnSMH6hM4IUDMDcfZWVZu4cuFL9u4hHDkcVeXoLNLZCYgBRVpo+WGB0r5zb331BG0cgIjjgyvYhUur718ABdEvKQfXTLU7jkuBh67dLsw5nL8Pqdt6ArKwjlmKWDsP6m49et+6JHDV/Q+8cEup9Yf0ajGhO3+R6LH1YWwpDSZsCHKebbD08WxHbEO4SpH+56xdVewQVvMegmRT9AYbcBjH+6U9BEk9iMRfqDmEUJMFZOXqWG/Y2O03s7Xm9gHEaKV7H8huAMdci0Zvcdma3J6UC2e+GAntGFGNMTSAzjiw68X+AlzuxOTZAgAfwLx5P3qnlN4/BO+F//Z/vV4bMlQ3PZVP8S74OsvFuYa1Gr7fXJ7a/DLLefw4ht7EV0fBIvSihODabX6yUG10MTqES0zmUu8eYXHuL+AkPxK5ngq7WzzKheiKlUHpZAXYA7V158cZwslFjlvy5nwwVde2Y8f7jiLn289h0OjqwAAx4ZW8wKxyXVjySMTsOSxCex1yVlCKAD/Q1US/RsKOx9YOHmPKU/1nHrXF8hhBtdcIslViAXQO0JLuAlGFX3xIyR6CyHR48XtU4QI0aswY11XAMDX955i6/lnXx6JOau6456PBwAArlzaE28/chneevQyvP3IZXjn4csxeXM6b10KK4VH3hmKF58fBQBojDHgwS+2wUJZWWU81zakMdogmYEh3O79o+191gE6iLstMAVZcaFbI0JbVawAJqNQhsijxDsw9lxWjqm7/sI395zG/714EDsnldov1EaQ39QYZGF/Zzk0yRC+YuDa10hN+rcXSqvCueuCAohqtN2DiW2aWW3FhG3iNbc3yEnSfSMGMbGFt8GrVUUuy8S2aP6yHrznuYKAnN58K7b8ng0YdojppOT8dlM2ifMkB8ZUYPeIa1mRydIbcvHwZ9vx023ncOsvG3DGgVVMamm4zyckFiinSr/oArnOWmHOz2dJ9H3jylEjMVkYQPthVJlxxw+b8Mst53DPt5vx57W5+PCJY/jtxhzkcSZf83ppJNfhDMi5lH4hEicGei+XgaA6znMh1gE4D5dJ9H//+9+4/vrrMWXKFDQ3N+Oyyy7DnXfeiXvuuQf/+te/PLGNAIBvvvkGN9xwA0JC5G/us2bNwtVXX42BAwdixowZWLt2LTQaDZYuXSr5nmeeeQYNDQ3sv+LiYsllLwXE1beBgGFurn9cm+vU4vWxetHnfRkoIoRQ6QnwCRpNnEHULxmwFdhktnLc7jTbYJMS8a4FHfTCLbrP9rMVGwdHV9KKfw7eefAyFKfLK/+zzsXJvt6RkVEQzRZyB8ZU4OerZ+HZl0eyv81f19DHqtDy5iixcnFQ7PfMjUGwwf8CHClQtrZkhqAgx54El8tDgjD8CbYBwtp5BWyAGbfLgWJULKCAyRu74OerZuH2z/vRzzH7cZ3A4oEL0qrs6+JZDFEidi6F3RqRXkQPsuviW1mPfAKiyCXKq9Zgs0PbAxK4lFwRxiN9jw2rxqkBdJFGWYBrl63B0NM/Y+dE/gCd4lT3/mgzJIZZqzMAQDJsdu28QqjMCrx/70Sn12lV2ivWLEqr3f4v6taEQUfpbgrSDk4mPbvlSxMo5Hjghnj5E4gSXcUckxWpdLEtSaBR4heFNfML2ABdsXyQoq6NuOm39VgvMXFO9mVZWjOOjKgCZQFmrumK5Qvz2GNdG96xVMiXCmrjdPjjevr+qZZQolPOkugdzCOWZFfI+Sfbob2qR2YdJBCZ659dmNGI327KBuCc1/V/nhnL/k28pkk483Mvj8LHd0/CW49McHqz7vi8P157chwAoCqlBTsml+DzB08y22O7JhFinQsFM8fG3e7aOB0OjRLPUmh0sM8HHU7A5yRAXnB8EnU7IZBJt4wUuhaIWyVWptrIjdXznc+JcgRuUKRYZ5AQTS7auZD7I2X2gTWJWDcv5/vqOeIi3n3MBNzwHZ35s31Kicd9guWsdGL9QADmKFOIjEdnrcng2dGxgbrxOmyYQyv6yRj12PBqVCcwxzTnd9o3pgLPvUh3CSqNFCZso73WN84swqYZF6CwUFAb+D9scVfH13q5rB9v4QqFPYmuaMd8//IrzyO9KBIDjybAorS220okAHvoQky476stmLV1OWvfWpvYilf/Q+eTzFydgRdeGIXbvuwLgJ8T4iqys+qxchF9bW+INsDqg2ik954S7+oOwLtwiUQ3m83YtWsXHnjgAdTV1eHUqVPYt28fqqur8d///tdT24hdu3YhOzsbd955p8vvjYmJQWZmpqgFDUFwcDCioqJ4/y5ltIlEZ+6VJwfXOKWS0ErM6PuTEl1U1SJQ8gbpxUlULaOwIwOqiOYgTNzSmX2d9UUXFPLLr7Qdp9zwJCHu+rQ/Zq3OwJf3nZL+AvBfywFvYcBxWol/aGQlpmxKx8PvDsEQRlVxYEwlGqL1du3oughpmx4unnpdOoDG10hlVLLEAoQMqln1suC7KRjSsffpWD6ByByfuZkahDepUd5Ji2ND6UmGTFLsWml1FMHW6cWI0QTj1afHosuFCNtnyezPYEbJ7Z+e6PbEfmVKCzvIbo40gmJmJ4jHty7CDLPCwqrGq1JaJG0PhOTu0htyYAjhP7mCuS5YFcDhkVUo7dKMnD78IpAbJEU8KP0dnUojMGa3faDoZVtptdnecWUAgMY4kUlXGZLOLJhwNKmttCpI8J6aBJsi6JebzrE+h3JKfnKs27Wm+wlCGcKbEOBkotUoEYolZR2xZ0IZ9AxZow8xo+9x/oRsYY8m1vYqIz/KLjCM3L+ImnXE/hQkVYbhxf+zeSyTFvIALi78eNtZ9m+VUfy6JtV1JMTxwd5XcXkShCjS+MCm5tcbzwGwTfTVJuhw/1db2NedURgn1oSyeTKEjCA2EcEGJa7+LRMRzc5PdofoVbjz8/6Y/xdt9/nYRzvY10hINsC/FrPby9irJHIm9jfMvmBT6lv5wpaGOPl9Pm9Fd0zcKm5XuX8srW6Pr6U/q7ODPKGirs02yxeJCfK948UV821BsF7J1grO+KK7NIkDwMwMd0J0Kt6EvNvhZIZCa7CJzfAxBdnuUTUcb32ogNF7UpBWEg59iBln+smrnNsLrs+4ECE6HzBpAjgSoeX3bIBZYQEFCk9yxi9kQuiH223X9YV/9MQwJu+nkBMITlCb1IrY+mB0KYyEWW3FrV/1Q3J5GJqiDbjrx83QxOlhDHJyJhWAgqGjuNcEX6Ev1ROdyvjnv8XRzytzXJ/PbMD5nhpMX093+ewb577rQgA01izIx9/X5OGkoJ6oZTK7nnllBB78YDAefpvu3s/N0qA2rm0dAd/fcYb9W+OFLAYxHBgbOIb8AS6R6EqlEtOnT0d9fT2CgoLQt29fjBw5EhERnlVkff311xg2bBgGDRrk8nubm5tx/vx5pKbaD9QDEEdYq9rmd+ai7YNFaUVhN8ee8sYg8WLE0Uy6NyGmxhDOOHKJKy4Z1sQMoLihdf+7YzK7P9niQlCrrp9rC28krUfcdumZqzOwbtJCvPzcGGyYfcFOnc7fOEgq5S8FWCgre4MrT9OyKpWrltJe6RalFf1yf8AfiyU8+mR27fXfZ2HKpnTpBXwMmxK9Bf978DgbhKXnKJii6m3HBjnCbvy2D1/pwxyfZV20GLWXJslI2yxb7HKPYeYcWDuvEEqLAqumX4GbvunjcHtDGIsMVwbn3kJEk/11oCnSgKyzDNEQbmLb5rk+2toII0u0lnfSwioizVz4Rw/MZNTYBFXJ9oXd1/edsXtOCC4fSbxdLwZ8c+N0fHfdDPwxbw7uf38gAJvfH7l+5ohNKMqN86UqG8F7zgyoY1XWr7y6H7/eSCs2Y2TsXFqZLIxUEZ9QfwAZzJPukfweDdAHmbFw7SqX1iMkQaObpPfJyH0p+O76GXjuJZt/PVH6kOvFnJXdcKZfHU+pSZldboYMwA+wlmOdoHTQ3uSoA2dtB/OIZW2MfHBo75hUCgtlZZXjq68owOGRVezrziqMheKLVDdMGPY9Tdu/lXWmu+Nmr8zAtPW2Gqouzp6MINegnkyYNsA/XiKa1ZJWaWKYuLkLojVB7GT3h3dPZF9bPb8AVljZ+idSGyRbA1pUVqQz5COxzlKYgG+un4blM+cBAAq6NzolKnIGFChWjd4iYytCwPNEd2YXMft6jkzwozugFF4PJK4PFzKakJVt30mb11ODuBrbvWjtvEK23hWbiHEn5MZbwRKCKm9CToRGWehJgCKm668X55wi5C733Bp2MBlzVtIWJDVJ4kThEx/tQhVjzXbHz5sQKRFoH9qiRFpROHs+dSmw54yUzAGY6QdKdIqicOUausNhwNF4B0uTN8m/PG3HX8jvTmekCcPsA2g/SJ15zS+Z+PmqWXjw3cHsaz1yo9nQ3dTycAw4RncEjDn6G5uH5ApIbXvfhwMl8zE8DYsSMMM3nx2ADS6Xef3790d+vnta1Jqbm3Hs2DEcO3YMAFBQUIBjx47xgkAbGxvxxx9/SKrQp0yZgo8//ph9/MQTT2DHjh0oLCzEnj17sHDhQiiVSixevNgt23wpwAorYusZIk14Y+DUEFKDI2duECaJWd1IP1KiynqiM/uF60vMOlpwrmv5PRpYUjyyORippRziRaQe00aYsJeZpS7pQhc7T71qUwzsurwUfU/FQWVW2PypJa6jKiM8qyjxc5zvqcHpgbQyxaoANjOp87M4pKUxxIK8rAbxFcjsuikb/JdAB2x2HgU9GvDy6/ugJ8pmBRDMtGnGcVqpiRdpSddmdhAp9PsnpNyaBfmwwooYTbBd+NaAE7Ty/89r6YmJ1PJwPPXacEQ20OeSWie+U9VGEizqP+c/gdKiQGgzf4BkVQK9sm3t3haREMrGSAN65sYAoD2iuX6vGedptf/m6cW45+OBdu999Um6pf7pV53vduCS6ERNdzEgri4Es9Zm4LIdnTF7NT1oK+lCqznJ9TNX0HoZU+v8ZKuYR7rtRb66jKhWxCZOCKqZPA8S8OpvIBNSRHVa3kmLI8MreRNodnBispwEW4vh/g8GIa4uBHd92h+qVvpA3D+mHBfSG1g15vgdadgzvoz3vk4Xie1QADbUxulwtl8de161hJpYH+m24OSgGltIewdATaLv/G5bw804PKJSNFA+siEIg445FwYuJMPckbFBSAyCF18czatPNSLdRg0x9HOZHHXqCY7SMKY22KUQ1vTiSFCg2Bqn3+l49u/ijCac6V/HWsw0xOhZsl0KwslziwoYsycNo/ekIrxJDZPagoLujkVFzoKIDJqdCJVz1c6FgFiceQrCjjylRK7Uub516HPGnkSv7KRDHSePa928QvZ4FbMEcicsMoxJqB8o0YW+7CqOnYqCOZbPZdVBG2ZEv5PxSC4LQ98TcRh2MBkXujbSKl5CdBdHYMHffO90MehDzOy9IE9i7K8LMaMsXQtQQFJFKDuRxgU5i8WuXb7AnE09AQD5PRvR62yM4zc4GGprI01sV97xwdVuDR2+1KENM2LbVDq0+p5PBmDqxnQM4uTBzV7ZjXevWfxTFgCgIdaA9XMKXa4/yHhk7oruqPWVvz0FbJzl/UDTAPhwmUR/9dVX8cQTT2D16tUoLy9HY2Mj758rOHToEIYMGYIhQ4YAAB577DEMGTIEL774IrvMb7/9BqvVKkmCnz9/HjU1tqKqpKQEixcvRlZWFq655hrEx8dj3759SEz0bGHQkTB+9fco7yQe9hTWZCsUeEo1zv2Aa0kiCZEbTkSDGkq5KsXLCGlVSgaHErQwCl/KAvY7kVZTlYGCMciC/B42krb7+RjbmyVWvYzZfzUJdEE4f0V3nM24Baml4dBGGrFz0v+zd9XhUVxv96xkd+PuCUkghgd3d7eWCtCWOi2lLf3aX91dqHtpSxUoLe7uDgGCJSHu7tnN2vfHzB3bmZUQYAM5z8NDdnZ2d3Z25t73vu95z8lHrWcT9o2gJg1IECA8nFBf+nqiiMN4BIB/76DOa1iBBxJTrARqdsQ2Vk2nnACEmbNChGUfXEQtiAtEtGgvd6xg9EeFzOn0+CqotQpkdqjBJVpKRBjwKulA/UzPMjz/CWXQGlTqhhNd5+BAz9mizCKAld9wRk10APASYeEWhTWI6yTSpy25Zyk6pHvzWHQEue2oubLWuwmNHnoLGZtX3z+M9aOmYvGHvfDb7HH2HSRnPPGtuDbGYNcaEblUYrossBGaegX0KhMy21cjNbGKt1+Vv7inhhikFunW8O/t4nOYzEhJHCj1cqu66TcSZDEfVEQVbCv8G5ut/8gtVtR4i8sDnImdi450V4ZJCRg01A1wqm8ppm1dD5PCjMTzvhh16F+88sEh3mvJ792G1gP/Clec73APfqC1peu89Aix0pVhS9bFLKdkBm4WEMPVG4XJO9ZiybMneduiM7yQEjtP1CRbDEK5kJaIy7laxx1T/BCTwdccF0sM69UmqLUKtMuixgm90oiSYPb82vt9AEDVKGeSjCTGKffXIv4Se1wbp2YwSfXyAC2CbRQPLnaroOZ7GZh5/1SvEsggQxxdQL/csXljrxiIXEe1xFjMRY2X/XMkF8QA8VpBKIEp1UmQ0b7K7oTq3lHUWqg84BpLK1gJJTQiviHXG0qjnMfs5xrek0LP/325Dx0KfsbAU8tRHNaAS50r8c9dqUyCl4T9cZd9EZHnifcWD7L6mX0OB+FM/FxEZYrHQzITeJmmkpBG0cKXAQb6c32sf8nrhKQUSiao3lOP59/qDZ8KO8YaG2vHRncDFAYZzHJg0Xd7WuQ42wDsHZmHRjcD2mV6ovM5qnOAO3ZMEoxp9//QGeM2Ut0XDy/bgdj8X7Bpkn0dcTVeOhSFUXNQ/GWfa164s4YPXzh+wz67DRQcjowmTpyIM2fOYOrUqYiIiICvry98fX3h4+MDX1/HKojDhw+H2Wy2+Pfrr78y+zz88MNoaGiAt7e4yUtWVhZef/115vHy5ctRUFAAnU6HvLw8LF++HB062K6mtoFFeKH0wtZMJ7ssmEec4GKvPY70IsGIj5NJj8ggs9n+alBT50NsoUgS8DvHsNXCbsl0axh3shVMvDvGZ6PBVY9GWlfdr1wDvwoNE9xunJKJHWNz0KQ2wadc+pwFFjun3MC1hlFuwuGBBTg4hM963DMiD1q1AaUBjbjHmsSIHTk3DxHTWWdCWD7VLkmuIS5Il0mTm2UryZEBRUw3iPCaTulejp60RuImugsiXpAgrvJpwuA9lMHQ8rtTmQq/T5UaYQUeuNBZnM3aRHd0uDshEx2g2saFONe9DMHFIkxa+vo507MUMsgwdHe4xS5GF2DkNkqbdeOUTDz6VTfeOGBSmLF1MqU33SnF8XZS3wrnGkvtRWCJK+RGGYxKMzrT7f9fLE5GenyVTVkIKRgcYCqS36DaXzxJQRbKMRlecDHc+EWzGIghGDE+1WlMzAI5VIr5LTHmdTpv25h6+bzLyI2oxemeJTjTvZT3HJG2GEFLXwnHFK5UWRtaD7xq1OjEYYl6V7FFO1kzSOXEO6Y1otS/Ef/cnorvFpxFlVcjmtQSA1Uzx6/m4K/7LjOGiwAl8aTR2c+U5fq9PP6Z4zKaYmh/xRs9TgRBqZfjoW+78p6r8NMiM0ZQSKHPV9czAVRyEJTUGdfbQkpOEYBFXB2e78GwEUmivMJfix4ng5h9Nk3OQhAdNxeHNCD+ku3xj4ydJN7/cQFlmtrjJEXc2jMy1/Z72AkvJoluO0Fe3QxNfoVehvD8ayvP6mbhNSU+PxeG1zPn0F6IJbSaXIwobQGZF73SaN3XR3vjmegAnzSgNHJiFHqqLQvSwiwHkwg0Kcx44aODWDOD9d1xr3VBWL47LiVWwCjwUvGu5MeW57qXI7jUHW8839/iWAKLXTFiR6Tdx+5drUagk0gRys0yTKA7I7dPyMXktc0rLskF3SxkfFl5d2qLXJdtAE73pCTLhu2OYMb4uFQfDDgQipHbI5F0ij+OyCDD82/1gSc9nhpcTHjt3cOMaoA1EK+f4EI3eNWoW7Rw517r2JriUpeqFvvsNjQPDq9gdu/ezfzbtWsX8488bkPrR3yGdOBI2rZG7IiweC6giApMq/x0KAmUZuMYFCbRYMS72vnYk1yHeEkIYkCSRGxypQbkL55JZp7re4TW5rcSjBWHNeJk72IAVJKBtCpOpLUKt03MxroZVwAASloGQ2yBFnmNg2Fnxf+WHMD0Levx6f9O8bY3uRrx44Jz6J76O/6697J9byaRf3OzU1v0RsEaM7DeTTzL4VemRqO7wWo7+uk+VLDC6KLT1X4FTSLLjK3Gws+6I6TADY3uBuwZmce8ds+oXJgkTpuWZr6JJaudAWIM+UudKhjGvxiu0OxKYRs7AWkF3zw5C4s/7Il8v4dQ7PUIvnlgJABgI63RmpboeIKptTLRlUY5Ix3Q+1gwAMpoFQC62SlFwIDcuzJYFBsf/awr7v41weIlWYH3M2ZaYiAsb2dhS4mB8RfgFKR2j6Huw7A8K/IpImPdpU4V+L/3eln9vPdeO46Zm9Zj/J7VmLFlPe+9Gugi3sT10YykExdfcubGNrQuPMFh0qk45qLc0CY8xz65novX2BDwWuLHx85i4dLdeO2Dw+h3ZrlkbNecjpirQd8jrNFvVJZjHR9dzgWg2OsRFHs9gldftUyONQcKkxybR05HdtADmPM7m+Cv9WxCv+S/8ePjKfz96bXGRI5Gd2EY3SFLn8oLtFwfzCJEFsHpDuPEw0TqqiywkWVem4GLXSoYo9zC0HqHzhuRdNszOg+bJ2ZhAv2+mydnwShvmQoKYd4TmRtrqPFyPIkeWOJ6zSUgPQVdfRZNDvTcUeuhR/9DoTbN5rufCmDWP1nCQgyA5z7dj25pv+Nct6szMG4QIaRw4QxMdIAtogOwWzKk3lOP033YAnhcmg9kkGHRd7vx8oeHefu6CwhEWlcjGjR6FIVbrvm1GiOe/rCn3ccel+HnVBKkRBN+66QsjKeZy0JpRx5EDt2kNPPW51qNASEF1Pps8MkVMIl4JbXBMRAJ4XgO+1xplGPNxKn4e9ZE0Wuq0wV/XI66F3v73g4AyImpxUsfHbT9WXQSPe6yD8wwtygT3duKF5MYTEozUlsxAeFmgMNJ9GHDhln914bWj6JAS5kHAi2tqypmXMe05cmATZOlW2MaXMW1+pylAs2FMGAQhWB8jhJIfVT4a5miQicRjT+xiXfrRIqF6leuYSaA/odC4VeuQYW/FpumZgEAtHQiTi4yDweW3JpM9BE7LQs8BG+/eQxGpRkp3aX1fXmQiOfcrenlOwGEWpLBBey1kBslLrtFpBWYhaoItK5GwAic71aOpQ+lICKHWpgqOazcO9dsZrsmprH+GVqNUZKNRz4zIs855R3EFnL5EfWM9jxB+zS2YyonivI0iJdIol/qWAGfSjXKA7V46aODON6vCHkRtRi/KRqaRko257f5F/Dt42d5ryNsYrkViWuP+tbJRAeAUJpB3eVsAG/75DUx8C9xoDjAuXer/PgJhaWPpqDK1zIRsXr2FUxf1UGyeEaYKn2Ohojv4ARwpRfRHnUcg3AaHa0xy0XGugp/HTqdFXmN4PzkRNfCr0zN+Cww2qwyICLLA3/edxG13pbzfky6c97vbbANb47+rpKTROd6Mwg9M6Swc0zLsXWvN8Jy2eRslUQHCwD7zB3thR15l41TM/HTvDHodSwIb744oAU/vPmQQcawygnS46pQI8KaltHriYEHKFLKsX5F2DohS+qNJUF0oaM5chMM2zy4Ab2PBVPSV/R7EFProrB6C8kZe/Hkt7vR/VQgM79///g5VNmR+LYFr2qSRLedIK/3cDyJPmr7tff68REwmRmzThIbEllMF+Bip3L0PRIs/WZmSjqwAx13Cf246jya8Pc9l2FSmPHnvRev6rgrfawnyzROoIkOsAUiAKj1EV9r9zsUgshsT9z5ezyCaHlHyFi/pN5HqXMeVOzGJOUjszwgN8os9cxlVDy14m5WOlJmBFy0MtR6N+GtN44w2xUGGWPkLgZrBL4bgX6HQ+BfpkGlnw5KgwKe1So0ehjhonNsMCfrJACo9NehNx0/VvnqcLJPcYse860INonu49DrFCY5Ei/5YTidM1g9Kx1NLuILqyuxVciOqmH00ONTfVHr1QS9quVazAKa4WVll3xyG64ZHE6inz17VvTfuXPnkJaWBp3u6gOFNtxYbBp1RfI5Ex0nZNMO31yUBLMM1v9mp0m+xwmazSpESIHzmYzZknMRQ6NawFiQsUnxyGxPKPUiE7BgUbSH1vjz55g/Ko1yRscLAMJzPVDvTgVJJpG4JLjo1kyiD98ZCVd7OgiuAtf6/a8WHnUqJnAbcCAUHdLZxaCO7pBIPC/QM6cTIRunWdeGI6zDFz85iP9mUxO40OGctLhtG5/NBCWjt7UTn3HMVHJepZMz2qfOBmLoxUV5QCNCBWPWF48OZ/7OiaqBGWZJXc8q/yb0PUwF0788dAHTt6zH1K3r4FavxPCdVAvsc58fwL5RfHks4lcxYUOMuKGfmWpFba0ghYmywEYmuAWAfSPyUB6kFdehtwXB6dBrzNg0Lctit6e/2YtXPjwsmZSp8aLG22utG3s1IEx0g4sJ4zZHM9sVBhm6nXWQzS8DFvws0mEolnAP0OH3Oyj9fq2rgfmdZGZg+TxLbwYA6JwcILq9Dc4Pb44etZLTss5lBKd0L7cpYyIzAeeSylAYKl28dWbY0nwnMIqYT19L7B2ZhxE7I7Bp9AxEZzYvGXw9IPW7E6nEuFQfnO1eiinb1+KL/0u27005p5qYe3NZimTeLgqrp2UbopnnCMu7MLRe1M+Eiz6HxBO81b5N+PDlExi7mYrX33jnCO5Ys9G+Y7cCInlpi4lulJuYOM8RPPhtl2YdlyMQFvit3T+zNmzARGsyGvSwQwhYBQIvr33D2NhJq7bmMG4b2dHWPd80Oudgoofb4TPyzQMjkXQqEMvnpaIkhF23E/NxIl3ywpt9GeLcXX8mot9hPnlApaV+vN/nX8Tp3uy63qygYiwAODaITRIblWaekbsQcVfslC68TqDW3NEAqA7wsVuoIpNezRlg7LisYgTj74YZGRizmXqvTVPs0+JugziaXIzIbE91oDTXlPavWRMQWOyKat8mHBLIwAJUMW7IsZXoe+5vnOhbTH9Wy+uhE68OR/DvnW1J9BsJh5PoSUlJjBko919SUhISExPh7e2Ne++9F1rtjRPbb8PVwYtIF4jF/HTQUuPVhKG7w3nu31yDy+P9iyV1+6Q0AsOcMIlul5yLAJdFWpM3TqUYuQqTHF3O0IkD7vkVJCWyY6iAza+cz7zkGmSM2B7JmJiKIegW1UR30csRlcEJJFt47epWp2wVSco/b5uA2/+Ow1cPj+CxsAjkJjnv3JCFmRvdfdHprB+Gi8g2NWnYxdmu0TnUGCC4Do/2L0Snc36YuroD6jypxONPj/DbtQmIhm77dB8LlpqzwFNEq73KR2exqAgsYYOgat8mnOtehsAyV7zwRh8m4R3A2Sc8z50nH5IfWYfSwEZMXheD8FzrckyROZ6MIevNBCJD8Pe8Szjav4jZvn8EFdyaOEOyX6lj7Y9C8OYve6Cg2LXObCxMGHEr70zD4g96YsR26h42Ks0YtzEK3U4LEtc2LiGysBYDWUQDVDJ064RshOd4oEltYn6n/Ejp5Kh/VeuUHWoDP4ku2bmhMtv0DyFdCxcl/DKcHb2tyD8J4S5W9GwO7Bi2dBpjq2D4F4ZLjw9hee5I7lGKqVvXOfamnPOjd6HilThOQjyUlrsjCfyJnCR6YQi1rcHDwLxWCrGXvSXlRtbNuMKb25N7lqLM/+o0kL2InIsNY1ESczmK8IJrLwFpqYlOQyT0q/ZtQvtMb0b+Qgr1tNRKo5sBuRFssvtiF3YtxmWpa9UG/HbfBeSHS3ddC3Elzrr5sbMw0UOLRNbR9GVMCFzrp2dg/YwMy/1AsaaD6fdYN5Ml1M3+Kx4vvd4Xo7ZGMv4DZC2QHSMg1dHzgUJAGOt2ynrR3NmY6AC75v754fOYtqoDkgQ6/faosXjVqCyKyWeSKHmhjVOz7JbdaYMl6jz1mLy2PXoeD7LoDLYXCpOcKaRuFClqZEfVMkXwI4OoNcnA/WEoa2EjY5OYpIANZMXUQKtqDrOoDS0BhzMWq1evRlxcHH744QckJycjOTkZP/zwAxISEvDXX39h6dKl2LVrF15++eVrcbxtuA4ILaEDKaLOIhJH5rWrwT/TJmP2X/H8J0hnngLYPj5b9P1Tuotr0wlZnc4Au+RcwG9bvtSRo1FFn4/9w/IZRu70f2mjWysLIWJOFVjKDx6H7o5gzDBiL1tnFznj+bxeyOrABtLCoEcK7rX2BcFuTi7lQpB4yQ9fPTISEXme6ECzsbio9dLBl+M4T6rqOtoMVKNT4u9ZE3mt+hbv4a1n9LeJvIhbrRJF4Q34+Mmh+PipofCr0KDeXY+Pnz8p+h6ExehoK971hJhWu9bViJHbI3mJWJPczBsvN9IGrIuW9GDu94SLLFvi0OBCbBo9g2fWlJZQhduXx2P0Vuut1aEF7hamTzcDSDCbmliFRneDqJY2AWHsNxfNKUI0l+1yvUDu6dzoWigNcvw9ayLTQq3TGPHus4P4L7iKeiC3oGaWA1/8XzLy2/ETEyYuA1dwuk9KdKW1wfnhxZFzMXCTjYLriavRKwbS7ZcqkGJoLSgNsT8x6iHirXEtQeYfZ4YoE50eJzqk+WDuyi1olPBxsQW3WiVy6K5Z7rhNul5JAn/g/jCmyH2qbwn8S6mY5p3Xj1m9fnOia/HJE0Mttiv0MpQGN1rML6QjtbkgEkq2mOi1no5LuchM/Hv6WsFR35s9I/MwUiAzI4zVL3QtZ66ZFXPYrieiX0z9XckkKz979jSe/WI/pm5da/dx2GKiW5MpuZ6wSCSawWR6CCnr4xfEY3EAyGtXh8Vf7QXAsqS/eWAkInM90edYCP66fSIicqRJSj6VamYOMApM3d1FyChcxF1xviT6kD3hzHG/99pxbB0xE53OscdptmPZWOfRhAGHQnnbSkIboGySIzumBhe6WBLv2mAf/Co0+GH+aGweNeOq9PQnWfGwKBJInMam+iDhkm+LM9H3CrqO7YIM+PLp0y16HG2wHw4n0d955x18/vnneOCBB9C1a1d07doVDzzwAD799FN88sknmDNnDr788kusXr36WhxvG64DonJ9eI8ZrXMOSkK1mPf3Fqy+XdBKwtl10+Qs0feXCkasmfTdKHCTjNaKxdwAShg4ABQjK7M99b1nrorlv5eV9x20L4z/OU0KLLtrHJY8PgwXu3KYWyLvEWSnHunNBpVewTtvQv3++As+Fq958qMe+OG+0Zi3tCNUNoJhewsrzoSobEvmbHFwA0+Wps5Dj3aZnjC4UIngU31KUBRaz8gCuVez+3I11t1oBg6RkRhwkAoWZ2xaj3p3PcwwY+6KLfxkGgdKAzUNxdlonb6R8KgRWVzKgApfLUI4zJ/S4EZe98ovD57HW68fxfG+RYwx1cD9bDB9uVMl0mOrsG7cNGYb0dwroFlSXlXiC9vQAnfxJHArJ7VEZXvh64dGYP6PnXD/953x3fzRWPhpd9z/fWeLfTc5kCSScyQnyDkinTyuhB1nhs3zF+/E1ykAzFnWkfn7fNdyyCBj5tai0HpE5lw7ySRhwd1FJ+efd0EokRVtnd3XBueFD4eJThi7Mk7TAklK2tKCJuN/Wis1yGpwNTBawrZQ2wydannzSMUAgB1jc6AVygs6GZgEBWfcJddOYIkrGul588XX+9qUBhK+T2CpK/QqE9qneyOSo0scRjOuC0PrYYYZKr0CY7ZQ0it57eqYRGR6QhUCi6Tj6JRu5eh6zpJdS9YAFzvyuysWf70Xa2dcwYcvHmf8NRyBN8NEt35PNcdUVK1TXBdTRzGTdms4m1SG4buobio13flU78m5ps1UlxVJrG+gY4K8iFre+rTatwmlQVTBa/OkLGqfdvYz0YtCLY0zuXD0e10r8GRRzeDNuZW0D0ydl+WgMuW/GMoPBsDhwYWYvXojUhOroGySIblnCeYt38Ls2+EKS+ASFpl6HZXuzDk6qJD5WyZocNNAjcgC5+vwUzcp8MkiqlB2sUsFZq/ZiP+93ceh9zg0uBANIoVAA62nTTrV23DjMHB/GLwrVSgNbmSKSAQFnCT6/d93xpePjIAMMpRfZWdRS+Hjl07h5fcOtnU03AA4nEQ/d+4coqKiLLZHRUXh3LlzACjJl8LCQot92tA6kCDQJWPcowX357ZJ2Wh0l2713jkmR9REtFyiBaa5rTjXEvZqVOVF1VmVvwHY5FhwsTuf8WElbh1P67FxMehAGOb8noj9w1jtLk+RJJ+rtvUle1sKjGQOgJ3jcpi//Us0+OKxEQCoBA8AjN7SDi++1Rejt0fh46eHoucJ68z1FmvJvo4IKbRsh23SmFDAkVrQq0wMC5gwVjZPzmJeG3vFh9k38SLLxJAbqQvYpYk6n8QITKcx4rf5F3BkYCEODbXUmSOQyajXOzPD10ssiQ7g6KAiXpGmKLSBYuIAgJlauH21OBlfPX2G2Scyz5PXnrx/eD4SL/lh4ZIkACw7lyzapLwNQgvcIaYqZE97qbPjthXxeP+ZIXjv2cEYvaMdXnmtP957djAe+oav2ap1s0/n1KdCDZPSDC/C+BecN7kB7IJTajymz2uimDm0EyGwzBV3/p4AgJ1zIrOppNGFLhUILHGFwnBtkiVCfVu92iRZPAOkY4E2OD+4MQwjH8G5rAYcCEVklicMKlsDEvW80BSwtcCzTmVV8oiLBk/HEtoy09VpLdd76rFvRDPYbdcRF0TkDwkBxJUu0Pc6FkT5h0isWHkm25xrUNVEnbuJ62J4CeLQfHcoDDI0eBgY6cTbVsYxz59LKkcwHffITdLL5GrfJsboWwxbJlsyzx9etgOfPH8KK+8S94mwBhKH1FwDOZfm+D81B44mmy91rMCo7ZFQaxXQcTqfmPUW/bNqdNS1crFzBUoCG/DjAlY+kMSmqQnNL9RV+EnPVYomKtnqDAiQWLN6VrtAr2bPH+mgJBIvz7/dF9/fPxp9aCPXY7SU3sADYfjloQvYNjEbaXHU+YvjdI0Kk+iT17WXPDauFJ+r0PRc1gEKK/fajcSMf2Mxgpa23DsyD+tmXsH8HzrZ/Xq92oQzPUupByK1s41TslrgKNtwNVDpFZiwgWKjL5+bivTYKuY5Uuid93NHvPfsYPQ8SRWKWpqJfjX48fEUnOkhrvLQhmsHh0esxMREvP/++2hqYidxvV6P999/H4mJiQCA/Px8BAdbcdRug1Oj23l+JZksjB1deGvdjIxBJvNeMKNRIvHhjMaiQk1yAGwiRggbp4fbrkzYurbgXyau+WtQmFDIqY4KHe8BNnC81fDX3Ev4e94l5rFZzl67Aw+EocepIKwZPwX3LqWCIK52/L6hedISA3TQ3hqZ6GH5dmhdyoDOZ6kCWp0HtQh78eODcKEX8US2BeAnaptoNgV5zaVOFcz7vP7uEUzfsh6ApT6i8PXxTpxE5353Lo73K4InRxO1wl+L+Ev09+B83W2cNm7/MleE57G/B1nYjd5GSZNsm5ANvdLI3N9iDBYAVMs5/RkKzppafvMpvDB4+bV++G7+KHw3fxQ+f3Q43nx+AAbvCbP5OpJ0kJLA0rob0f9AiOhzQozcfnUSMtcDRBqJzDkjaNmb55ccwOXESmbMa5/WgoaD1q47iec6OXlBog3S4DLRL3SlEqHcol6dl571cLGSRzfQuZTWmkQ/2q/QglXZUjDLAZXu6or281ZuQXKSc8omZUXX4Hy3cur8ca4dA83k/vM+Ko6TmWSYsVlaF93Eycd5VrHzcVpiFQC+lxAAuGqVGHCAisFHHvgXDa56jNnSDmM3UbIh/Q6FoOdxah3kKdQ8F3gZuehkTMJdeJ2XhjTih3tGYcX0iXjqox6854QSAfaASAlKxQQEtQ4w0cm1e72Y1J4ikjHW1pZFoQ1waVJg6O5wAOLyogBQHkgntOTUNf/dE2cBANP+7cAYlF/NGFMeKM069ay7Om+WloTYmhUAPOqo8+5HrykNKjNgpu616AwvNKmMmLtiM/7v3V5Y8Hk3pgOkSWVE+3QqThh5aBXq3fW8WJ3E72SOH74rAiumT6Q6R6zAIOjYHicf4tgXvc749PHhmLkyFgCwYVom9g13rDip1NHXuJwtXAAAzMClzhXoful3PPP5XgspkdaM1PhK3PvXVly+iuLV9cTrL/dn/uYavhLJsVCBWoLdSXRHiU3NjCcud2yTBbrecDjL9vXXX2PDhg2IiIjA6NGjMXr0aERERGDDhg349ttvAQAZGRl47LHHWvxg23B9kHhF0J4oA5RNclGZElsQajIWhzSIXnUKvQz+EpP/jYR/meUxGWyYDUkhndOu/NC3NKNScEqFbcHrZoq3eV1OrGSkCOLP+4gy+pyFGXG9UeWrQ0koFfD2pI2dyO+4YXoGSgIbMOBQGLNm4/7Gr717mMfW4IHe3Fo00bkILnJjmPfWoHU1IqjIjcesK4ikWl65XRnc1tY6Wn+TjA//3J2G890sTeKk2NykpTHmivO1chKIjQMAxaLLi2RbgssDGtHvkPUCmU+lmudXQHQ7+x4JgX+pBlW+Ouwdno8yuvWYuyCOukJJcai1cpg4q0luJ4rcSc1ZWwIanRIz/o3FjH9jcedfCXjkm2745ElLTVohTLTsTUqSuHmhUWlGTKaNhLIMSLjgKyqN5GyIS6UWuUQiY8oalh321dPJjLxLl7P+li9uLqxddhI5kt5H7StctMH54F0tkjji/M41Xk0Ys8W6rwMA6GlTrAp/7VUbL94I+FVorBq8A5BcRIvOyZx9w3PdGTY1gbqRek1Asf3x8htvHbV73+uJowOpjmVeZ6aZMtjm4kyPUosuFwvQ563Wh8/CDs13R9Ipy+7CWTTzvN5Tj43TMiGDDBPpZLtLkxzDd1OJVwsTeRn/718fuoiOpBgog8VvfaFrBYbvisRz7/RGBEdSpjmSK8SUs8HdOtPcEU10cu69JWTjWhreIkl0o5VuJcgpssJtK6jfyyyHRdGFAf02yb1KmU0PftcFnVOoee7wIMsOeZOdrXuVPtIJM2u+LdcbPPlKbmGK9s/hybPSf85aGYt7/96K7RNy8MKSg2xBAsCRwUW43ImKI5rUJqyZeQW9jrEkSaa7Rg541LggtMAdw3dF4sklPdD/IGd+FyyrmOQ7ffqnK0Y7/mWvI0IL3fH1QyMRlekFncaIK/GOSdFxi6GkW9Wbox9fFNaAP+ZfwtEBRS12zDcaT3y/G1smZ2HiztYh7+xbqcFHi6hiDjd3lRNF+WqE5/LJaC1tLMqgmY2il1upJF5rhsOr7YEDByIzMxNvvvkmunXrhm7duuHNN99EZmYm+venqjjz5s3Ds88+2+IH24brg/ZZPmxwT09wMRnSiQMpZgAAbBufzRhqAsBFiUqZf5nmuujxOQpeYp8+PFssEClwTW4G7Q+nzpvgKzep+SXIR37difQO/IExP7wOs9dsYB4P2RuOBg/LY1JdRRtwa0ZJAJvgbVJR57M0qBEwUwH48CP/IC7nF/x+30UAlAP9gJPLEZ/9Cy50o65PTb0l+4u0VbdGORelUY5ex6W1CgnOdyvHRFrSZeA+KhlMjLkCyjQIy6WSb5c6V1ASGKBamldMm4iuydYTctbMwfzKNXBrdJ6FiBBSBb6c6FroVewAmB1Vy+hFutfwrxOibe5R68Lzf0hNpO5vhUnOyDf9N5vS8nTRyVDjwy6IH/quKwBKG/ViF3Zc4BZ2rBnB3oyIzvRG3CWRBLjI2phrhClEnUcTNo6ajg+fHCy5T6fzLZh0voYgTPQrcdUwyk2IyvbCkseHAQDWzsxAelwVAPGkwjWBxNS+dtaV6/P5bWhxCBOfQtR6NbH3i5XQTqsxMnJDaa2EscYFt6tIEiLJVQBwMViO1Sotuy0/sh4lIXwtZuL3UhbMWcCL5QE52872KHVKvdRUOiau9uEnfbkJc/caF3Fig/DrSFxj3ZIDLBPhAO78M4FhKC/8YTcuJVawxceEKkZertJfa9Vc9OWPDvGSK0IiKWE0KkxybBo1nelkKghvPhO90dUGE90BOReSVJXqtmtpeFc5ztpePz0D0/7rgInrogGw/jsWELkG4lJ9MHYzJUFLPALMnMR5la91fXmCGm/pc+pZ5xx66IAlW5aA6OiXBfETf1EZXlg1Ox05MVScnxFbjZV3U1JDs5bHMvt50B0Zi7/ei/dfOY7F77OdFaSToN5Dj7jcX1Dm34CMDtXID6+Hii76cbNNSr2MfSwDomTh6C5LbN4Xvo6Qm2XYMGYa/rh9PD54mooT5Xayhhs4OvTkN6j21eHJj5J4xbV1028efXTSZVvnpReV9nVGjN8YDZmJKsS9+u4hAGxcEpvmw9vXbia6o6ktYVhg59T96wPnHfygNlwtmrXa9vT0xKOPPoolS5ZgyZIleOSRR+Dpee3MqtpwfSGDDBGCilt4jvRCQZIhYgZqfJqwYyyrSb1rTI7orqFOKOUCSGiii3zfub/YDgDS4qsY1oPcLEOgiPGnWc4yjQjefJtlERkUJnz1dDJvAdXxgrgMxq2aRI/JZhNqlzpWoNexIOoapSey8kAtanyaGD3l7JhaZMRVo9qXXcjN/S3B4n1J8N8a5VwA4J6fbWv4pcVXYuI6io11ok8RJRlCoyygkdGMA/j6hl41aozdYumVQSb//vtDoLWiG8vVCHdGMOOAIJip8tUx7DCAYsyRtuh6L/5CV6uhHnvUuTD+DzIjUBzagGP9KPYJaTvfTY+TQUX8NvHhOyPgUeOCkpBGrJjDaqqqOfqS6lvwvp+7TOTadjBwPd2rBL2PB8O3UjqZEM/RAnVmRGZ70hqyRqYIdtcfCQgqcoPBxYRaWt6mNKQRbvVKuxeCLQ0xL482tA50SPdmCoNi5vM1Xk3wrVDDt9x60kyrNqBdJkXS4BINWguE2r5SECO8muTsRrc6BeIv+qDJVZCFFZxawsi1to9wW52XHue6infh3EgwRRNuyMs57n4HQ1AvYoIo3E8Mg/aGQa1V4Nn3eos+LzfL8O6zg5jH2yZkM+N7cWgDQvKpuTcvsg5DaCkRKTS4scfoxU0Sm4DUxCpGSzq42B13/kHFlkWhzUiiM0x060n0OgeY6IQFzmMwX0P4NCOJvvKuVJhlwMuv9wMAaG0UEQiSTgXCt1KDHieDEJrvjnpPPfYPz+dpylvTOueiUWMlie4kpqIA4FuhtpTHMUsTCJJOBSC7fY3oc1yyB9eMdNvEbAzeG87oqpNryCwHar31eO+VE/j9vgvIja7ljWc9jtMdIYKi1nT5aMYbydkRVOKGMVujcM/PnRCW586TkmoOTvcqxeOfd2cer7ktHSUBDc0yHnY2uHKKXXtG5lnZ03kQVOqG7qep6/Sfu9JQ46VDURhVyBbG/yXB1s2GrwZCyR97UO9p4JFW23Dt0awk+u+//47BgwcjLCwM2dmU1uunn36KtWvXtujBteHGoccJPmtVYZbhka+6Mo/DcgRJL7GYhh4D5v+9DVdok4bj/YpFPy8i1zmLMIy+nA2mzxNLkpAedh98KthgisvQlxuBRncDctvVMtu6nSEBBf9tZ62MQ2IKmxjfOikb/8xORVTxTwiv/BE/P8yvNmolgiP1LaqJPn4jm8w1qM148uMeONzjTnQ/zcoUBVtJ2vpUqFEcbNlW7ltBBf9urTSJPnNVLLwr+dcnWSiSa/DQ0EIElGrgXalCk6uZ19aZHVODdtni9+nlxAo89y7fsT4r6AE88hUlW3RkiPUWRSn2jLPAj7C0BHG+Tm2EmhMo5rWrhUet+PVBFjHu9SwTnUgiTNm+Fi9+eBCD94bDs1qFCn+KNeRXyf9cnyoNRm+jJBJ2jGcLkioDG8m7WmHN3ax49OtuGLPJinQEZ4yV0ubPi6rH6lnpVs0uGb17J4fCJEcHWu98/O7VMMMMuVnGdJlwMXN5LHIDHsKLrwo0TO0I3MW60HzK7U8oREqMJ21wfnjVqHGkx50AWLkkLmq9mrDouz2o9LfO9NRrzDg4nDKebo266BumZdreCeK3E5FYAIAGNyOef8u6jjAAdDkXiPMx97A63HZi6tY1TieXc95GYv/oINvSBlwJxOACVxR6P4wrYfPxz7RJuBh9L7qeDZB8bYd0H9z7E1WALQyrh1eNmjmvlQFa+FSqYZaDMZKTwvbxOYzBepW/jvmxCSt9E8c4kBTQC8L5kjX2wK2BTqK7WWd11njZx66Gme3WDCq5Tkn0CjuT6JwbpsHDgEk71qBDug8Sz/tZlfYhnaIjtkdgw+hpAKiCyQR67ts4JZPHIC0PsO+eMFppQHWmJLoMMosYVEGvz8XGDCLV8sz7PZEZfD9zPwCATmOZkCMa+tvH52DIHvHi0h/3X8Tq2yy7zBZ/2BNfPjycknDk/L7TFKOsfidnBHVNxdjeUQBhzHRwaAFmrIrFuA1U/Frpr0PXjN8x6OQKNGqa1/XuDCgNaOTF0pum2jdPOgP+nTIZAMU0H3FoFQDq3vGq4Y9d+c0Yw+0Fr6PY3lSOHPjj3ovX5HjaIA6Hs2zffvstFi9ejAkTJqCyshJGIzWi+vr64rPPPmvp42vDDUBOWDU8iGQFnW+4EluN+5Z2ZvYRmoLIbSy433rjKMwwIztGvOIdaYXpfiMRRhjyInkXLrMoqMQNnnVqxF8WN0oj7Ydco1VilCN87x3jcvEYpzINAP/7dL8okze4wBV7RotXeG9VJnpwsTviL/owj893rUD7K9549MtuzLbikAYL/XmCKh8d9opUzQnD11MiSerskEHGMxg1yzm6tpxr8NsnzmHEDkvzxNT4KkTQci7CjMCqO9KQH16HhUuo6zYyywOuWiXu+aWzpJ44AEYnMTTfuZPoPpVqZpHMg4wvU1PvbmCMWKXgUevCFCO44+bfcy/BJDdjzFY2Gaxp5K/cvKtVmLROJHDnDEatUbO/JdDhio/0k1xSB/lbJAH8/kvHrbZoimnrOiuI5m+Vrw5/zbsMvdLIdJkAbJCe2qkSSqMc09a257+BHcQwsWRGFaejByYgsNgVg/ZSEhRCA8b+h9s00Vsz/Mtd2W4ZAcxyYP00O1rTOdfZ5cTWZ4wllmgShci9wouj5cBOumtTboBkEUunMaDGpwmPfdFdfAcJNHoY8dp7h1HlY2eC9TrAGhubsFytwb9EzVw+MhPwxosDIDfL4FGngsIkh7sdc2HiRV/escTRbMP9wwqYv0ML3KFu4PyAgt+mzlOPuIveFs8TluqmqZkwycw4160M3lUqKAwy5EbVYdOkTBzvW4Q6D/uY42Rub1KbrDJVeWOwDRBt6lB7zOdbAIGldhZ/BOf4VJ8SrJ1xhUeSEe6jbJKhnpa2PDKoCHqOfxWJm9ZPz+Dds5V2yrlYy5a41zlXzOUnkOYhp4kUreUGGWRG4LHPuuEyLSd430+d4dboglde64ekk4G4Z2lHUbk34v/w7ZNnMfCgtKl7YXg9L8bqkOqFdtle+PS509QG+sZVGGToL0ty+Ds6A+b90tFiW3CB9WIUN2ZSNypgVJrx7cKzeP7tvrwxL6t9DZY9cKHFjvV6Y8/oXN5jobSvM8OjTsVIzOW1oxLlXF8hgFIFKLNiNtwscMYzGSzjZXvw7qvHcKJPMVLjKrF2+hWc6F3Uas57a4TDSfQvv/wSP/74I1566SUolewCv3fv3jh37lyLHlwbbgxu//lf/PbgJd62orB6tL/ijWhaG50YNxKYJGKIyaupwGXzlCz8PfeyhfYhQWihcybRPepUCMsTT/CRZIy6Uc7oOcdx2n24HWukvY5rVjFRpIotMwElIQ1U8p4TgNR7sok6rj7j4P3hPEYqF0JDqlsJZOID2JbhqCyOrr+cbaVmdP/M7HM1ItepwkQNl83RdHQWCLUkGcd4DtbMSkffI5bJrRrfJjzw5w7qATGapy/LA8ML0PfMX5i+qgO1QIyuQ1Z0DWLTfXCh/b147i3xlmrCkHF2JrrcLGM6EYSo55p8yYBKK2w/tVYBF4MC8bTeaoW/Dmnh9yE81wMNHgbsHZHHS5Kf7l3C/B1Q4gqVXoFR2y0Z100cXfZbNYlOJMFsSZOY6NZj10aFxSI8K7YGZ7qWiLwKUDUqEJHXepjTCz9PwthNVMJh8dd78b8lBzDwAGt62+MEVRBon+4DgNKWjxbzPhEm82wx1OX8v6f/24HXPs9F37YkeqtHnIjEEbkHG23ITghxNqnMKbW7reH9Z4a02HsRJr5nrYqZY9Vafhx3qlcJBpxejtfeO4xYbuLWDqy6Mw3j9vwHo1C4+wag3lVvQcbhIsyOpK5ZRpmhKwwy5AY8iBn/iUjd2EBIAWGGU0l0Mje//+pxRNBJx9yoWsxcxb63hTSPDFDp2d+JSX7IAJiA5J6lePmDQxh94F+M370GfY5Qxozz/96GyTvW4rZ1G+06Vq50nDVz0XI7JUpkBnY+lFrntDTE5Fx47FzyN2ceId1NDy/bgYxY2tDRDLYAR/8eRGrRs1qFRjcD9g3PZ96j/6FQ+JVreLIkgHis7yg8a5wr5goQdBWQxO2J/lQn+AM/dEaR7yO4bWU8zHKKJBJIv8azVoWtI2Zi8tr2ON/NeqfIO28c4z3mkpcAML/P+Zh7cKj3Xfhu4Vn296MRXOgGuax1dk13vOiH7+/js+hrSEHMjmlMRxPjPn/2NKp9dHjgB6pzt8sZykvktfcOI6VrWcsd8HXERtoL4qmPeiCw2BXVvk04NKTgBh+V/SD+GADQ61gQ3vnfIN7zJcENtg3FHQVnOa5TmTDj3w7UZgem61ofPSbtXIMhJ1fi4d92YNKutXj2s/0tfKBtIHB45MrMzESPHj0stqvVatTXO67x1gbnQ/wVSza1VmNEk9KAWStiRV4hjZzoWibp++3CM5Iu7M6qiQ6wQbUFmCS6UnxfzoCopZkPB4cUoNKXCnAjcz0ZsxYhK3LnuFy0z7BcIIXnePAY6bUeEoG0GaJmSrcKQjjMZmJmK9RbJWZVF7rQ7Df6dAUWi0v4kMU9w95uhWCkPujvViXSaq9Xm/DF4tPSb8I5L1xddIPKjL/uvYzup6j26c2T2YLRpc7iDEMXWoYkOlPauNhZIKWV3Shorc5qXyu6H8Au8ryr1QyDMz2+GhPXRwMAnvtsPwbtDWMWQdwkA2kDd693wSuv9INvGXsdco3XPFqh8W1LIIq+htSN4t9fIRgqjQpgACepTLB9onhRMsRB+QRnwBOfJjF/n+lRCheDAp8+NgxjNrfDUx9TcdzWSVkwKEwoCqlHgpi/hnAacXBa+fHRFJxLohaCwkVHrQPavW1wTsSn+lhsk5K0sgoz1cpuS+LD2eDe4AL5VXimcf2GSMFfQ8t2+JdpEFTMH3cyOrBJKEclXQCK4fjdwrPNOVQGx/sWXZU0TKWvFq+9d0jy+fBcdxSG2V5PVgRS8YtvhZqJJRwFKeATJvpdf7B+OK50ASMtvgqdUlhTabHQuiCMIm6oGxUwcy5/F7rjZ+mjKQCAek89up8ORKdzfmif7g25UYbTvUsY3XRrUOsUTEdcgxWj9mo72dVKjpfB9eoG1mgti9cKjsGuUqTjr85Tz3SO7h2Rh3aZnvx5iP6bMMyJcegFzliiNMoxjstip2FPZ4atopMzybkAQLtsfjwtnHcJUYMYP8Zd9oFMMLEn9yx16DO7JvsjtWMVf6MMcKtTIqCcimcDS1zRPt0bfiVs7NotWVpuqTVg9LZ2UOnY67fRy0gZhToYJy38fjeM9HXL9d367/b0FjnO64nzncuxmZawmrq6A09KqbWg3yGW4CHW/dscY2gpuIms2UxKM9PhcrWqAsvnXcbukbm2d2yDw3A4iR4TE4Pk5GSL7Vu2bEHHjpatLW1ofYjLECTR6Yr/kUFFmLSuvehrpHC2RxnWjaV06VI7VUnuF+bEcg48ppVIDcCFY+ISJ7KgBAC9yoTE874wuJiwncMcD8+jAldXOvFDGAPbx+dAp7YMkvM5DOvQXDccG1AoelxiJla3EqI5QWR6QiW0agPS46os9vOtUCM/gq9rVhoszuIhBSCvaucKmB0BYaK70Hr5UoylonDWMGXC2mjec2Q9IaYr//Mj55FCs1e4XRcZ7ast9gVYLd04qUKVE8G7Svx31wra+c9ZYY64c5JLZFxJ6VrGBGnFoQ34btFZUfNarsnTws+TGBNSAGjkGG3dqmaNJJlnkGhdNAminSaNER8v5LBI6evaJFGD6JwiLtXlzOh7NAS7Bt4GAExS6u4/EvHHHRMwfFck/Ms0qPTT4fCgQqQmVGLr5Oxmfc4jX3Zli49CWIky1820Q+6jDU4NsbFbqB1qCz7lLPN6m0RnnTPjaszl6j3ZDHylH5XQU9Hzc0iBO4IFcjlcBnJWh2q7TccAMCavb759lJeMdwQbpmZg8o61eGzprma9HgCe/Ww/fr//kuTz+ZH1vMKwLdzxl6URvL0ga4+S4EbUu+vR7Uwgpv5Lr3PoazI1oQpJpzjJPpEEWXkQ9dtpBJ0DepXl97jcqRK7B92Owz3vxPBdEQD4uulSkEFml7lotZ2SPXo1e/EEl1yfNZgMMgvSEPd0CudpgCJofDd/FAJKKEZrd4nEq9bVCJVWzrDNUwUeC9yYiaDG2/a5KglstJoU9XAyORciUSQG/1IN02l6hV4TxYqsW4vsKGJxcS6JivuF8o0uHG3nl97sh8M97+Rp+k+j2batFR51Kgyj72ECYkzpCPKi6vDT41ShLaNDNX64ZzQAah3VmrqzjHITZmxaB4AitnRK8WPuu+2taG7nJs7FVAOaYwwtBZ58L+enNtJTCfceai7u/nczDE7QgXazweFfZvHixXj88cexYsUKmM1mHDt2DO+88w5eeOEFPPfcc9fiGNtwnRF/xV90+zeLzsCnUoUQOnkmVj0TQ52nHq+/2B9xwlYvDkKcWM6BZ3oqMpeZ5Wx0FZHjabkfXYToSZu1PvH9bobFQzR2hW7zGR2qkB9pfZDueSoIty+PR4dUb4sAT3YLs9ABtkUXAPQqM/aNyEcBSZZzfhsXrVy6nVPQKqpTU8k5sXbU1gLSFUIMc7Vu0toXhPF0WcAiJ4uceb+KF02Jgebx/sV4640j+O+2dEnDuCZ6oSwWxDsbpDoQmgSL5Audy+FaLz42cpPjg/dRnghbJ2aj/6FQdKMX6Z89exo5UZbeEcJunTKOIRaXldaa5YauBlGZXlDp5FRiQHSctty2eUomVFrqCaWE4ShB1zOOL4ycAeS6KQ/UQqdi73eKmRcNALjv76345cHzYi9nYWUdd6FLBeQGxwP9mEzH5Cja4HwYtI+vi/vi633hW2HFB0MERoWZ6YJYfVs6UrqWYdn9F/D8J87fhnxoQH4zVlIsqkRYw1611BgeWuAOb0HRvp6TPM2ParA5bnFR68F+1rwVWyx0tc0w4497LuKdV4/ioxdOIDeS31W1floGHvhjOwCI+saIQa80YtXsNEzetgZvv3YU77x6FNsmSBTr6DGGy+yU2gcAXOupeEZMUsheBBW7IeaKF0wKM3aOoZI88XQrP+n0zIitYggvBO61gjmelm6p9hXIOciAzmf9MHprOzz2OeXLs2dUHraOzwIAxqfCXuM9ItdmzVy0OR0+JCa8HlAI2OZGjjmMmEkxAHz4ynF0OkcVsplknMiu3ATm2e58NvWQPeEWXkj2MNF3j7HO4vRwMia6NXb3qO3tGGnKfJpN2y6HL1O38q5U/PyweDxgIdlCI+GiLyavicHPd49Fr2OsEW+NVxOqOYWKZz7fC60HPe6YgZE7Lf2XWhteeKsvNA3sdaVVOdiaJLiOS4Mb4dqggKZRgaz2Nbgg0cnrjDjer5gZA9/+30DIIEOv45R8VWF4Pe9acGbEpfnijRcG4O3nBiJGRBXAnk4pezHzH1bhgUuAXHn3ZQB83y2rsBKjmxRmPPXNnmYcXRusweHQ78EHH8QHH3yAl19+GQ0NDbj77rvx7bff4vPPP8edd955LY6xDdcZjJwLJwgEgN1j8jBh9xoUhVEsVXvlQtISKrHgq+7odF48OQ8zLNg2zgQeS17kK5PkKmDdiJTrSv/V08kAKJ0+gE7wcNYz9jCbOp33x9vPD7LQuQZYtvCtijBBwnHjlExm0uNqypeE2dGSLKMSyvX0gupmYKJHkqDZygwQXOAKlyY5MmIFCV362u53OIRZ1Ejhq6fPYMHPOxntPzFE5HjYZQB2oyH1uwsXfVntaySZSdztRMJl//B8GBVmJF5kz6VZDnhVusCdU6gUdutwne+5Qdb1XAw7E5RGORPs8nTRufq0Arz99nG0v0K9xtaYG0trh7c2+FaoGV1lIXtmMp3AqfPUY9O0LOtvZGW63z8iH8Wc7hWvKuo6Jx0vAKAUWTs5c/G8DfYh4ZIvwnOpBGNgsSueXNLD4W6YWh89Hv66KwAgtWMl/rdkP57/5AB+eeiCRSLX2fDu68db/D2JuXFYvrtFUVTIQBbrWpKCgfNW6fFV+OfOVN7zB4YW4Jmv9uGL/0vGxy+cxMsfsJIrme2r8eDv23n7l/vZjp8URjneePsIjvcvxpfPJOOL/0u2acaqV1oGsHLS8Un/p2ySwZWOZyQlF+2ADDKMp4uJ+4dRGtqkqF8c0gC3OiWa1CaUBWp5SQpu3M8eJO+NGTS4GfDn7RPw2isDkECzhB/9eSeaXIzMZyf3LLXrfLrRUj/W5FxqvRxLontXqnia7tcaKoH0jlTiHAAUtNnixc6V2D+C+n20rkaqiCEyJ3FlMLOja1DPKTac617GxqL0R0r5dXBBrgspOFv3X4+TQZLPcc3FC8MpYlEoJ7Y81asET3y/m/eaoCI3fP3gSABAcJE7PKotxxyDwoSl94xFcIkbTvZlfWXMCmD7eKpolhpXiT/m8ztQfKpbf7zaOcUf01axXfoHh1oasopCkGPh4tPnTmM4XWCwt8DmDCAdyLP/isfYLZR8kmetirnGiIRQa8CjX3fDQ991FX2upZLoMhPQIcOH6VKWc5QNDC5m+FSoJWWQLd9MfDPJPf1zdxqyoi0JWm1oPprFn5gzZw7S0tJQV1eHoqIi5OXl4YEHHmjpY2vDDUK3C8GUiZ7IDVkcyi6U6zztq7aSlrrLHcUHT5cm2XUN4BwFjwEqck4a3PUMo8ezVsWTbOCiLEiLgfuppPn5LlTr27DdbBuYmKQNl5EjNwITOdIa8ZeoYFysLVdusp+ddDOiSbAI2zopCwX0pOdvR5Kx4xn+oiyo2BU19MKkNTN9XekFWGCppYO8QpDkKoxssGDtcHH/79vxyqv98L83e2PKv+0tnh+9JZIXnEtBSgLJ2WDRgSARAFf66yxZajS4SfT4y75wrVdCpzHiuU/2Y+UcfkJDbpaDexsP3cNvGc2L5MgQcfaz5/q+WcHIYzVwzr+NKCeglDpfJhuBamvQ7ReDDDImWS0M/Eduj0TX0/ZpkkZlSJiqipy2BrrDhavlaBCZFp1Zxq0N9kEGGX6ZMxYLvuiGH++lWtC9mpFUqvJmi4In+pQgsJiaozY5uY5qeI67Q5Iq9qCQZoh2SPexYKIXhPPl5xxNmHKxYVom0uIq8dCv29Ez5U/ctmEDAFanffv4bEzdsha9z/2J8btWW7z+0Z934uPnT8AMM1bNTsN3j5+1kB6Qm2UYzOlWaJdpxZyZJiyIGbaR8fmO3+IwbGc4Hv2qGyr8dfCtUDdLPoELUnwtCaaS2BF0UagwrJ6Zd2dsWg+1lp1MDCr7f/TM2Brc/c8m1Hk04auHRwAAGjwMODi0AIFlrojMpj5PqmOPC1bOxQoTXcorSQJD9oY7tP/VgltcBUDFLxIG1kaVmekWM8uBqCvUPOwisWb0qHXBS6/2hWe1CgaVGbtHUyzyGi8dpmxby/9MACvmpOLPedLSQgCQ2856Ic/Z5Fy8a9SsuS2N117ohyWPD8P4TawufCG9nq/y0eHhX3Zg4fe7sGGapcRacJEbMw7VeOvQ4yR7v0XS9zPxbvCsVuHhr7vi4a+7YtbyWDz+WXd0Ox0Io9yE29Zv4L2va4PzrvsdRXghO65p3Y145p2etl8kXKabgKBCKh491bcEjRrqPnYWLfHf7ruAB5dtx0O/bsemSZbHZIaZma8nCnTESaFT6E3WWtGSTHQAeO6d3gBYJnpkFnU9dTnrj7uX2SFXZmU64na7cb3K2nD1uCqhHTc3NwQFSVc829A6wW3zbgmc7FsMo9yELAldZDcJ6QNngS22nFkOnq52qHB/eqJM6VqGF9/oC4BiAQFAeL4HAkqoSVMsEAvkuKybFGDYgjIT0O1MAMwwi7b63OpJdA0neSM3UFqjZGEammfbQKnvMb7hYHChGyP70pqT6ISJzksy0lCI6F3UeVNBXES25Tmr9WnC3as2Y/HHvTB7RbzF893OBPIWz1KTfGvQQwcAL6EmutgtRks3STHt3Dn3uNwsQ2yaDwDgTxF92Co/HRpp1qHcIGOknwhKQhosXgPcukx0gGVU8Yy+hL+T4Dos92eTdwor0ggReVaSP06OdnRALjRtlEGGcDsT2dntaxmJJ8GbsKBrlwZG4ohzskWizTYm+s2B7smBeP3lARhwiBrvfST8I6zhz3s4Y6AcKAmmxrctk7Ja4hCvGTpe8rNtIse5DayNMULEpfpYSONkCuJo0kEjTJrZg30j8lAW2Ih1MzN4fjuVflr4l2pgVJpxdGARcqPqUEXrtX+ycCimrKaK5vtG5uOjF09i8+QsPP7TLrz23mGc6l1i8TlzliUCAHwq1ciJsZ6QlCzWgZLc+nzhCKycMRmNdKFu3MZoKI1XpxlLdJxJBwAZl4rC6pnvWu+pt0jcuokUy1WN4seyc1wufr/3IrqdCcS9P3UCwCbH4mj5GHtYmqycizQT3RbTX4ipq6+vLrVaxChP2Omn4iTauQSGdjmeUOrlzPUoRHp8NRZ91gPzfqWuOcKM/fWBC4yk21hOIhkAFn+916qsC5c8JgbP5hgpX2MI19VNKiPm/J7IMxAluue/PngBa2ddwT93pPG8jAj8KjQILKGS5FkxNdg/sgAANea88VJ/AEBeu1qYYUZAuSveemEg3nphIL55eBRefbU/4lN9sWNsDorpLnYyHoblXx8z2+sBEmMRLHvoAmLSHSReyIGFnyYx52fv6HzIjTJc7FLRbA+LlkKdRxP+9+kBrJ+RgXUzM/D0N3uhV/LHmbNJZchrVwfXeiXj9UCQSMu1nehbfN2O+VqCGElfLcxyQKcyMh1GRhfqx3/2vV4AgLJALT5YPAQyW+oCAvlZ4XNJJyiyjNj9bYbZpnlyG8RhV+TRo0cP9OzZ065/bbg5IGbAomySITTPHeG5ji18k3uWYuPkTGglJB18qpw76RNc5GZhhCNEOqe6ymPfcga01I6VTNtzQUQ96jyopGzXM9TgVikSFCokDCVWTpuE6Exvqv1TZE2maIY+7c2E+3/ozJx7EjiThcWo7bY1+HaP4hugBHGKGc1h2TkLXGlmeWkQ3TbMuT6F2t5c5EXRAYNgF7MCWHH3ZdGq/KXESl6CXCoIuBo90+sJe7TwlfTCrzRQ3LBVWCgLKrbsCBBDVLYnTz4rP6wORokWaPeG1nt9Xi1IAVOttcJwEoyX6fHs4iQu1Uey2ONfYd9v5YwYuYMa8178+CBe/PAgRu1fhREH/8Ezn+9FRiz1/blyY1Kw1nYPwOLcCk13hQgpdF4ZtzY0H8HNKI5kJPLbjAkb+dDgwmZpPF8vnOhlmTS2AOe+WPhpd8z9OdGu94677IsO6Xw91lq6sO1R48Ibq4SMdXvQpDbhqa/3WGxv8DBYJBUH7Q3Dg992wfppV7B1fBZUWjlC86jfef5f25j9Ju5ag+Dq7xFe9iO2jcnGix8exCvvH0L0FS8EF9geQzM7SLebz1wZBxlk2D4uG0sfpUz4xNYqjoIUnstpn5HgIjfITJQp6NA94eh/kDJiNMn541+Dp2Uiu8lVOo56/b0juO+PrRi/kUri/n7/RWyanMnEQA4x0SWS6DqVkUnE2IP+B0MwdbVlJ+G1hNB8FaAkQ7jg6vVrOdI5FzuXM+QMlUinJClETCRmhuNy8Nkzp/DOG8cAAGM2t8Mvc8Zi4afdea/LD5dOilX6isdzBM4m5wIA/uX8ey1FUEBvcNUzDNUs+p6LTfNGVvsaqBsVeOu5Aeh1lCJJ+pdp0PWMP/xLNazmP6gx+qmv90CtVSA3qg7nupfxPiOjQzVGHPwHIw7+g8Vf7QMAngxPr6PBLfeFbzCG7+KvK8uCtFBzCmoyiZqXUObu1Q+P8BLyfrQZ9KYbzCBOi6+CSWGGT6Ua/mUaVPnqcGgIX7aGFAVHb2vHSG0RjNrWDgBVFL8ZErb5ES3HRK/21qGaJumZ5dRauTd9b2TEVkFukuG9ZwazL5AY3l10MosYnHSTJ/em7s3j/YtRHMwe+5/zLmHwiZVY+ogNT6Q2iMKuTNv06dMxbdo0TJs2DePGjcOVK1egVqsxfPhwDB8+HBqNBleuXMG4ceOu9fG24TohsMgVKm6gY6baFwsj6pEfWQ/XOsfasH62coMGlDh3ckKlV9hky3NblLgGRNzEocHFjNO9S5hE+pGBRQCAAQeogLDcX8sMnAQVtO6xgqOT9fOcMRi6l6ry7h0urtWnNNjPdroZ4VulQVgeFZRzCdb+pRqL4FIIjxolctrzA2ov2lTSrU4JdVPrbUEkTHSiLcmbcG3MBi5NctF9Fn23h2kxJ6bDAHBgWD7vepa6Iq9Gz/R6glwD1trmPOkkuUEtHiS6C5Lo1goXXORH1DFFNwDYNSaXf0I5x6SxIsFzs4MYCisdKCLqOb/V5cRK26zSVogpa9gkydJHU5DSvRwXulbgj/mXkJpYBQD45qGRttkutiA4d9aSOZoGBTQ65+5Ca0PzwOvGa47UCfc1MmDlHamSu95oNHjYafpFo++xUDy5pCfvXpMZKZZ2eK4H7viT6uoKy3NHRK6HZKdWnZeed79V+TWv0JDVgcMMNwEzV1ImZ9x716PGBX/ePgEPftsFe0bno8nVhCaNCYVSiQQZ1Y0y798tWPpoCi50rUBWhxqk0WMN9/MYkI+zMnQTM/MPXjrBbBu6++qlSPzLqJiQMNFVegUCaMm7orB6fP7YcAD2G7x5VPPHNa9Kdt7fPDULBqWJKfS+/8pxdE6h/KKODLStpWzLWNRR474lTwzjsZOvB9xEdPz9S/lkKhPnFNb4NkFOn/qyIC3GbKEScu4i67LC8HpkRdeg1/FgBBe6oda7CafpQpdbnRKfPj4cSqMc9/3UmXf9FUnIM5hhRp0NeRxhXOcMEBrRH+/HZwAXCVjhAJCeQBXUx2+KxsPfdcNAem3qX6aBwiTHjFWxEKLGVw8PmokvZLlq1QZc6FqBC10rUEYTd2aujGOe73sspBnfzDkRWujOM1QFOOQjUN40YjCIbM7j+ICQ5KoYg/h6ghT4OqVQJsmA5Xh1lH5Mnudi4IFQ+FSqUR6oxbH+Rdf2YK8xSgMaeb9Rs8C572q8+ea7QcVuiMn0hleVCk1qE073KsH8pZ2pwjkguUYxiiz9iJk1ACant3lyFrOt3kOP9PgqbJqSiXK/Rguz8TZYh10rzddee435V1paikWLFuHw4cNYsmQJlixZgkOHDuGpp55CcfHN0aZxK8NgMiD26FcYv281mrgsMsFN61MpGPltdA8eHiIdHEbmOn+bvJcN93VuGyZX41khSGavvCMV4zZTLBRStU06RTHRTUozkk7yJRvqvKjgzUUvx+5+t2Hb0JkMwwIAHvt1l+jxuEgw2G8VFAfXwyCSwInM8cRzn++XfN20le3hXmf5W2saqWA9rKB1tx+S79EckGuKmcg5KKQNCyetZa/NGp8muBjkeOP5AQAAk/CSpH+e1sJEJ0w/rnu6kF0iFSgT/PzwecQULMW5bmUW+8df9JF8XZPahP6nlzMBztmkUuY5F50cgcXsAlTIALmVQJJ3oqZvVtD7MLX4EdPiBQAFWndhIjLXkzEGA6jrbsQOtt3WtV6JETsisb/PbGweMQNL5465+g+1kW/Suhrx9mtHr/5z2uB04HbjDTgQamVPEdCSWC+/2AdKWvpk9ey0Fjy6lkV7Qct+UJH1In1ogTva5Xhi8Qds5653jRr7e8/GtqEz8eFTQ7B6whRsGzqLJ/llD0Tllqxg9JZI3P1rIiIzPfDO/w3EXX/EY/PETKi0Cnhy5vnn3+qNzhnL0P/scpvyWGJw0cmh0MsszZsljDjFEFjsit7HgpEdVYNzSdT8ubv/bS1SiCNM9CofHTPHkiRkQVg9ojO90fmsP0vIkMoz0NtVAqJFjS8/CTvvn634a9YEAJRX1NYJ2ZAbZTjbowzRRUsxb/kWC215AsZY1F18gK22IksihMwExFzxtr1jC0MsiS6VjSDFJqIlDwAvfXQIMAOVAeLfdfPkTMjNMkzcEA2AIoCsnDoJe/vPRiBdMInM9cTnjw9jXpMvIc9Q6aeTjAsIPG2sD28EiK4/QVF4AwwcBjCJ2YX3nVudEp89Rp0XYl6/a3QuoouWYsfYbNHPqvCj9iN62LtG56BTxjI88AdlRByV4YVf7xiLvX1vR1kga547fNf11eK/1phE64ATzf86L/YerQi0/740KdmxXK8yQWYCTvUpaTEJEUdR46VjzGbjLvui43k/AJb65kyinX6eCxeDAuNoGaUbXRC4WmydmGVzTHAE1T46nsFxaKE75GYZxtDFiMk71uLFDw9if5/Z+Ob+kfCqFB9vTAozVk6eBCUn//Pp86cZT4kmFbUuevGjg4guWorooqUIzaeIb4cHFaLLld9xaHBBy32xWwAOZ9r++ecf3HPPPRbb586di3///bdFDqoNNw5KuRIuBunRoe+hELjWK1EY2YCEC7alGuxBVJbzJ9EtdLAF8S23DZObFBQOtDvH5jJ6fFsnZcGgMCE6iw1iq3zE2wa1rkZU+uvQ5aw/OKoODDtDCKVBjtzIWh579VbC94+fQ0lIo8V2rcZ6Zudcz3JoRdhGSjqg4TKtWyPE2mi5UGkFUwLnOiftwxE5loWEnCiqKt/9TCDPDPfQoAJW/ka4SJZRDJfWIpPBaI1zzolbLf98kpZkhUEGmRGMkTADGcVc/PGRcwD4WptEVkOIoELq/JQGN2LXmFyUBjTiEsek2a3RBQaOKeatzEQnybtaH8fGvZN9SywKnlyo4HxMM0cx859YdD5LMR7nLEvEgi+6M/P26G3tIDfLEJfmi54ngzBpXYykQbYkhHUL+jJ0rVFI6jRqRLRx29D6wWWidznr71h8SN+G+0cVIOkUVdw62acElxMqblgSwRoiBB4rld7WpR9Icrb9FR9mm1eVCkGlbggod4VGp8TAg2FMss+93sVC6kIK3g5q0ad0KcNf911CbkwdjvcvxprbMtDoYUSTxohaLzbxu+yBi6jnMO57HguCWw0RY6c3mgFNvfiSUq82OSQxwgXxIpm4PgZys4xh0Q3aG4ZOF/yb9Z5C+NKkILMcqKQlLggZhrArR+zgyDVIrZzpc1ERqMOQXdaLR6tnpmPqf1SH0MZpmRhJyww2uhmwbWI2ygLEryPiZyMl51Jtbe4T/ATu9S48mbjrBTH/pxovyySjW72SKVxoXU3wLeesw+jDdtFZ/hinepegJKgB/WgZnkNDCzF4Xxja5fDXmjNXxjHx6qk+4rJMWTHS8kIEzphEJzr7DOTg+RUUSsjXvPvsIKh1CphkZqYz40p8NRrdDPyuFRrBhW7MOjc1sQo1Xjr8d3s6ygO0TEzr2qjEhM0xSLzkxxBAZCYgMrd1mrVLgRkjuPMd+dvB28ynUsXcr2TtsXzO9e/IMihM+HFBCvN40L4wxNJj46VO1Jxc7a1DmX8jU3TpIFH4JWajm6ZkSRYJWwPEfD+uBtU+Op75J+movfs3Vvbt1wfPQ6NTYtaqOHQ9FyD+RjLAu0aF25bzO0aaNCbqOpRT46VRSXnpNboZ4KpVIuGiLyCjkvCbWnmB43rD4SS6q6srDh48aLH94MGD0GicW9u6DfZh6CHLVhyCgDINoyk9fkMUFHScbb6KHMONYEI4CiHDVGaRRK9kJoV4TvBCdIuJLpVeY4JRYYJvhRrlAVRbU2SOJ1N1PjbAss3JlW5ZnLlpPToU/IIJu1bDJDPDDLNkG6ZeaULv83/hkV92NuPbtn4QZoQQ2dHiLVh3LUuASidHRmy16CKEJClvdib6jJUCgyn68vKpUDN/+4mwrfPaUec1pMAdj33Oak2umHsZ//fFPsnPay0sdID97blrznpffuaQdNUYlWasnjAFs/+yNFwFKCaGGWaGDeRVrRLtnACA+T91wZjN1Jg8b+UWdMn4Dck92SDOvdEFTRzmtaaNiW49kQBYJBPMCsuuIS40aL1mwgRyswzbhs3Emfi5ePm1fhi2JwIXY+7FyU5348d7R/P2lUHG66iygNilKsyH06czrNBdcgH5ywNtOow3I7hSApPWx6BdtgPJEnooO9a/GDP/oRaDJgUw9Pg/+HJxcgseZctA6D+jd5VODiib5EwsydUwt+W38cx7ln5TRA6kwyU2fhbz1WEgclhFESzRYM1tV9DoZhA1yyQyLOPXUwSQU31L0OBF/VA+lWo88llXQAZo3amM0Wv/64d7f+hk9TvZBTMYQ3eifU5YjC2hhU6gNLK/C9FFn7CBfB6V8Em85MsckyQ449z+kdalWf544BIisz0Yeccd43NwKOkORt5SKsnJMNGl5FysMdEF47Bf2Y1Zs4sZcZYHaOEpKAJxtcbTEiox4KBlYcKjzvJ6XTczA13Tf8ejv+6CzARmrSWESq9g5JJOSXgbpNlh9urhhMaiPU4EWmw7MIyV/ywUmKX+NWsCUtrfgzFbotDj4p+4+99NKAqVkGvioIb2qyAEnLT4Kgtt/0nrowFQCdki+nOdUQLnahGb5gOFQQa9hpNFt5Vlk2iarPLW4cd5owCAkRP64JXj2Ds8rwWO1D6YZGZM2LUaH9LyWVP+i8FjS3dh4fdUB3xaQhV6XPoTiVnLMHo/RaKNzPaAe4P4bztsdwTc6pTIj6zD2aQy0X1aA+yRo7ElAcxFlU8TajhyLmF0/DR4fzgut7sPgcWuMCrN2Dae6gTpdloiiQ5g5sYN+PTxYXhv8SDedtJJrlebMGRXOKIyqJhs7ootvOLkpslZMAkTXG2QhMNJ9KeeegoLFizAokWL8Mcff+CPP/7AE088gccffxxPP/30tTjGNlxnPPybtEFstZcOQ/dQbeDnksrRhVsRa+Z950i76o0C0UwUhZlavBDmSGS2Jzsx0kEraUsGgJRu5RhEG+OcTSqD3CxDIB0450RZBs5aV5Zx0uhmQHKvUpzsU4xTPUthVIqfdIWJ+jxHmUk3C8hCSIhGd4Podfrce73x0LddqYWpyPM6msHe2pnorjaY6Cvu4bTNc84Dl8F/OaHSwrgxN6oOMhPQ8bwfpq5hE/EZsTWS1ygASb1XZwTz21uZNWu8mhjmyfoZGfCuFk+O1HnrUeGnRSHNrAzLkzbEjL/sg2ff683b1sQJ0r1q1dC7sI+vRrKntcO3Qs2cQ0Zqx855qUltgtwgY1pxee8L5++WsgdKoxwhRe5M8dW3UoOIPE/RYmyv45amX4QVChnsPq+Z7enCpcj+rcUPoQ2OIbDEFVNWt8fYTVHoeySEYc/aBQUAMzVXE+NKgtR42wmt642IPPGxwa/McuwPK2DvPa4kopcNU1A3rWVSIv6SDwCgjtMGLuqTYRZ5TgQuTXKodHL4l0skVs3A3lGWHjxVvjr8uJBiKsqNgLJJhiY3EwYcDLXLrNgq6GPudygEA/eHIqVrGUM0mUBLdbQUwuiOguxoink8ckckNI0KZMfUYNv4bCZWcairQmRfb04r/ndPnMNzb/diHqfHVyGcvuaTe5ZavBZgpVCk5FyqHNBE73KuZZj8jkLseq/xbrIw0eXOGWkJVXjllf7MY89q6jwweuUSvwthsksl7QbSclOXO1eKGhinCiQrhNA0KqA0Op98Zq8TQRbbknuw11R2FNv5qNTLEJbnjssdK/Dl4mQUhzZg9+g8XOZ0PP48Zwzap3vDp4L/2zXSHSqECLZjTA4udGRNTMNzPXDnHxSjdvWsdKYjJTrj5mKhA1RRJjpT+nuJym1JLMlMLoBZJkNQkRt0rmym/cunk3FgSD7Ody6/KjZ3YWg9DgzJx4Eh+TjXrQynepUgO6oGxcH1qPTV4kKncny9KBlne1D3TUCJK072LoHBxYQqf/o+MVPfyaQwM/4YXM17IVy1SvQ7QnWHnO3eOpPoZpiRbmNMAKj53cta/oVzKZQGNaAkiM1ZBHJ8An2q1Jj/U2cAwEcvnkCTi9FqzqzeU4+PXjiJwfvCeXknrvfT/pH5jGyZWQHmPndpkqM4tAFfLD6NM0ni808b+HB45H/++eexbNkynDx5EosWLcKiRYtw6tQp/PLLL3j++eevxTG24TojOtdH8rn0hGqGPXqsfxHO9GQHQhehFASNqHTrCYiES86/kA4gSXR6zhLrgCSMBaVRjiCBWSo3EX6pUwXTapdGLwq7JdPFCDkQlstP1JrllgzhTVMy8fc9lySPV0aS6BJJvJsdJyVaMwGILiYr/LV49dX+uBhzr+jzNV5U0MAzTGuFaG6CVetGB3FmoDxYxxg7cdH3SAiCSt3QKcUPQ3aE2fW+VtmuTga3RhfeAlgMWydnM63KWydlW02OXO5YCb2aGlAudabGAZ3GkpYSUuiG7smBeOt/A0XfJ6jUHQYlGyDZKpTczJBBxrBgGR8LseQRZ1uns77Mtvk/dUJPEQZXBBzUdb4JQPQ9uaj1YpMM9sqwmazIOMxvCbZqG5wOMsjw071j8Pud46EwyRGe79i8SSSp/rsjndFfBYDUROdLoheGW7I1vapUeP7NvhbbwzjnwYsTm9lioosV9vrRrNziUHHCABnj5HYkfVUNcnRK8YPcJENutIRkjkzaWNNEF8pNCsCgMuO9147j0WU7UeWrg1fV1TFO33hhANaNnwa9iwmjDlJsx57Hg1q8K5DEIsRo2b3eBcN3Ul2396zcyhBSHNLCFVkSVfuyY6hRacaRQUV48NsuAIBNUzMRQseYz36+H/kibHRbTPS8SPslj7hdg9cTPpWWhRqdxoguZ/hJfa7ZXmp8JdpnemN3/9sAAPXu1PfXq81w0ckszrVKJ8f/vccWKA5KaP1O5phu37Zug8XzFzuXW2zjwmHZs+sEzzq1hdznZc74+e8d6czffY6EYMLuNZi1cQO+e+Iss53c78+81xOT1rfH4Z534rc7x4t+ntadil2XvHAKTa7UoONap8CWETPQLscTV2KrGF1tABi69+bSQyeIt5LPuPP3eGk/BRG8/eYRRtef4MCwfMzauAEjD6/C7tG5zTrGGi8dhh1ZiVkbN2DWxg0YfeBfTNi9Gn3P/Y1uaX9g5MFVGHFkFd5+6xjzmrKgRhS0E8x1MuC/iVPYhybgrj8TrH42KUba0+HhjKjw07LeGGKgw12vajWG74ywsiOg1FGTdFFoPc/YWEjaJDI4ee3q8Po7R2yST5a8cApDTqwU7W6W0x23+RzCZqU/Nc6Szp/3XjuOlz60VBxpgyWaVT6dPXs2Dh48iIqKClRUVODgwYOYPXt2Sx9bG24QfGrUkgZFxaENCKUZmXWe/CDOLEHRyGlfC99SiUWCmWJSOjuChZqUMsu/uS1sYYX8AN/IibPOdylnChFnkkrx57xLmPdLR+Z5hVFuwXZZPyMDg/ewiclvnjyLrRPETV4AQM4M5LceE90kMzOabfaCtGftEglKvCpdUBJMLVRD81u5nAtH6kPtoHZ2aB4ry9BeyBgCoFUbsPRBipHGDaSCC6S7OFobEzXEjiKK3oVaTORH1Fm0rMZeZs9bRgeWCRSR7Y6AEg2iMtnEJGmPNdI385xliZj2bwf0PMZnGIUVefAM29S3sJwLwEpJ9Bdp/RZDpZ8OmgbqBLro5Uy7MRdB8hvD2LuR6HM0GHK6psPItnEiRqKvDoA5f1YhElIM2W99kdGGmwPvPjsIw3dGYPyGKLv2J4nCC53LMYuj71kS0iiqnXwj4dqggEuTHMomOe79sSM6nfPD6y8NwGSRIlR0Bjv++3BYal3OSrdnA1RCVwghY1wuIQtgYegtgiY3E870LINbnRIKvXjsz5UdUOhlooxsYjrOjAcyoMaHs06wRZwUeb7n8SCkdC3Dm28fYbb93/u9LHe8SsSLJHcWLUli/n73tWOIyG75+O/vey4zkhjL56aikiNFeKJvscX+bg3Wmehc9rA1yIxAn+Mhjh5ui0Cs28EsB3ok82MbkpgFgNyoWjRqDOh4wQ8xV7xg4oQ5XQkJiXP9jNsYhXuXskXai13Ek+FcfeHkXqXI4jC0z3Urw85x1hOVXk6oh04gHDdyo2phlJvQqDEw14/cKENJcINkgQwAZv/NyhLmRopLYlrADDR6GPHCRweQFV2DtTOv8ApQw3fcnHP/A993QfdT4uP58jmpLGGOC4nEek5MHdpx1gQeNS68GOyIiPyrECldy/Db/AvYM5K6jgtD63HvX9tQ7dsEtzqlaHd1QYRtGR+Cf+9IZTqOzHJg7YwrVvcnuQ+h5E9rQEaHavz6wAW79nWvV6K7FdkVgCVn5kbWMnryAOUVxkXiRV8m/7PmtnTEXGl+F4fJSmd4k8qAnseDkHDBF+2yb47u22sNu5LoZnObPs6tBIVJzhjtiKEsQEu1dNGxNtGSNUh1gcohbSrUSi4tYlhnrSU2lRN8h3KZV4IJMrN9DdPKltK9HIu/3otvF52FjI4Xc6PrLCqdBhczorK8kBFyP8PSKhFJ9jAwW7YM3yqQm2VYN2EaI5FhDUT/k0zoO8bmWOwTUujOaAO2diY6t6jS56ilXAMPMvCuXW7CuzSwkWcgCgBnepXhxSUHsfLuVHQ7y7J5JZlyaF2a6ACrVWcNOpqFY5azbCmCl17vx/ydTNrlzMCWEbNwPvZeHO1+F/N8VBY1RpBr073BBT/MH40pHOYUAHjUq3jjki3z2JsdjHFfhmWhRwylQY3oSBvU9TscitJAy+s1UNa6ij0tAZVewRSNjCJ1mV4n2PHDq1rFJNDshunWnJ9uRURnemPFjEkYeMC+DqWKACpRXhzSgEkb+OPduW7WmaHXG/OXdkFewEPID3gIHz4zFLsH3Y45vyfCv8IVE9dF8/aN58x3XLP6sZutFxfIfSLnTCc7xwqSe1KxtAOGdhM2xUjH6iQvbgJOd5qD25db+n0seWIYAE7nmqPHInh+9YQpmLlpPUYd/Be/PEQlLx75qitGbZf2bWouCIP0XDe2u7bXiWC89hIlIbJuZgbyuHKLLbB2IR0GK+emMu93oXMF87xYZxrR2pViome2r7Lrs9U30NQ5oFScWBF70YdhSvJgpuKpK3FVkEFm0SVloOXsZJzTdb5rOYJK3HDPUoqgVBjawEgYcOFe74JITnHkg5cp/Wej3ITb1lsy04Xg6rY7G4SdyEYXM84mleHAkHzmXgss1OBKPFU44JLnpv5Lj7tmIDqLjaW2TJYmb/FAv9WGGZmYsm0tNk6hvAzIb5Rw2U/iha0bQ/aFY9vwWbjvJ06XHX1vm1zMONuzzHLskAOzVsRCDG++fRRfPTAcAKCk740ex6liky02d727HtM2r8Ozn+/Hb/MvAgCuxFbh0FCqK+Ohb7ti2V3inQVCSPkn/H7/JVRxvDj+vSNNdD8Cso5M6VreqrS3TTIzbl+7AR++Qo0Ptsb/otB6UbIZF2Stkkt7ipHCtDCJLoMMK2ZMYrz0UhOreJIvzQXx3yCErTovA5bdOQ77+s/GNw+Nuur3vxVgVxK9c+fOWL58OZqarJt1paWlYcGCBXj//fdb5ODacOMgvIm5SI+vgm8F9bxKJ0d7O4xBaySM3qyZuTkT7KnK/bQghWFJ8ZKtgq+oV5vwvyX7ARPL7Ds8uJBXpY8mlUbOQL1xWiZUTXJeIk4KJpq96nWLyrkAQJKILIMQIYVUFZ5orV7iLGAIQgvdGSZ6mINt6c6GXseD8OiX3XDXbwl4/5nBNvfntoKXcXTmT/QrZgyxhPji6WTEpvlg7CZ6oStxi6t0coTntS5mf4gdSXQulj6awnvcLssTnnQh4/cHqaBWo1UgsMwVK+6+jDfePoLp/3TAoL2hjG9CenwV0mOr8NiPO7FlQhYq/CnGAklaqpv4Gc5bWRMdAAbQGqdS7dtCGFRmBBZT81l6XBUaPCwZWcGwzii5WZFwkZW64cK/VIPRW+n72wyUhDbCr8Ixk7qAUo2kMXYbbk44Kt9V76FH9BVPnn7u6lnp+OiFE3j97cP47JlT0KqlGZQ3Gj2P85m1cRzTeY1Oic8WDMMHTw9G5/PWO11I8dtVx47tJ/rzWcomBTBgv6D7xsEcxX+3pUFTTwWiUoz00Hx3vPL+YSRc8EHcJR/0OhqE7qcC0PtIENbMSucXxjmfLzMBg/aE2n1M/Q6G4OtFydCr+InPx6+RBEn/g6GQG2W40LUCy+5n2YZCOQUCJmFr5/dx0VmeT953o5+u82KT48f7FuH7x86iJJAlzDBMdJo5XBxcj2+eOINKXyouILGqLbjewDjBW6JD9kp8FR77ohtvm9wgY87Nu68ex3ePn8VDX3fl7XO2ZzlkRsDM+UoZcTXIblfDxAN6tQnPf7wfv82/gNffPoy3XzuKzPZU8vjt51gTvkNDqLjhlfcPo8rXdteLhxMbZAaUWs7JR/oX4s97aSlQM1BMmwtPXBeNMwlz8chXXbFh9DRMWUsl0WPT+Ov7jPYsU1/Mw0cMJSENSOleDrlRBrOCIs+EFLXutZQtENkS91qlpYeMyNDKldfhQQa88e5RyAxAlR+VRzlNy5XaYnPvHJPDjCc9aY18v3INJqyPxp1/xOPhb7qi++kAvPHCAMz5NZF5XWCxKzqkeuOepR3xxgsD0PNYECpoprSqUY7Yyz4IKhRP4qYmVuHFDw+i3E98HEo6FQj3WheUhDTgndePWj1+Z8LJPsXIa8cpokqFrvR2k4yVSZGaI4ivR2EYNb6TmoJfueW5VRrlGLeR2n/eii3of+DqJSYjcmkvLk5BtTV2CNxI2DWLfvnll/jf//6Hxx57DGPGjEHv3r0RFhYGjUaDyspKXLhwAQcOHMD58+excOFCLFiw4FofdxuuMShNpirR59ISqlBA60B61qrQ+Zw/e+OZ4RDzxRldzcUglGeRwtdPnsELb/XlJ9tEzse5HuXwrlCh2o9fXPCsckGtjx6Vvo2MYQcAuNcpUeWrw6HBhXj42674YcE55EZLt9WR10kFq7cCTvSzbIUVomOKHzLia5DSvRx6hRFpcVUW+/hUqmFSmKHUyyUZNK0FCpMcb7w0wO79uS2z57uXo0uyP1KSynEltlqyLSw9vgo5UbV49Kvu2DbRktlPEFLo3uqSaI52ImyamgWVVs4YgXrUq9DlnB8OD2bbMH0q1EjpWoZF3+3hvbYDbR6T3LMUPpVq/HtHOir9dEyXS2iBO9K8qixMrW51Jvr4jdF47rP9ONuzDK4NSqttygTEoGnrRHGWVbgsGEBeSx5mq0CPk0HYPcbye+tVJiRc8kWHNG9ciaMW1TlW5iMxJF68OZlobZBGgoO/uVkOJPcsw4x/YvHp/04BAFbflo46bzbR6Nbggoe/7Sr1FjcUQt3ueEHn1V1/JsIeEM30ekGBjze+yYB3nhuERlcDJu1a43AsDgCNHPkMwkh/4qMkfPl/ycx7FUTUY23kFaydZb1tnxwTgVkOTNoQg4PDC22+TNOowDPv98Ts9Zt423+5ayyCi69N8i2wzBX9D4bi0NACPP/JAcxY1QFeNWpEZ3rDt0KNSj9+QpUkbOVGfpzERY/jgTjdh+o4Uxrk0KstmeXelWpUSyRrf3uAKrQfGFqA32ktaoaJTstx3LN8K5J7lSKlWxm+eWgUT0fcGnrb6kS8hvCoE1+XJPcqxUdPD8V3T5xl9HzJWgYAdo7Lwc5xOYjM8cDvs8dj3sotzHNiWvXvvHEUiz9gpX9+f+ASANZL6lxSGVbMmITxm6Px2ov98ca7R1AU2oCj/QsZAkTSiQAk95Y2QfRwYjmXkAIPoBf/2LdOysbxflT8Sa5dtVaBn+eOhQwyvPki5b3z23yqkBQjIMmVBrNJ9+gML3zzFKWhLraeFcKvXI2yIC2j8XwzgxAQGCPpCjWq/HWQ0eQ5r0oX1PiKd5MIUSpRGMvoUI0qH52kp8bGqRT7f+Gn3bHw8yQAQKcL/vh1zjjefvN/7IzErF8BUGviPQNvZ54zwYTX3znMPG5yNeH3O8djy4QsvPHuEYhh6aMpyGpfjb9um2jxnEanxJit7bDmtiv46ukzuOfnTojKdn6T2f3DLU21rUFmBopC6OKnxDxMiupldPcrkeWUIrFOXheD5fMuo95TD4WE5LI1qBvlTKc0ACTTY0Mtp3CbllCJQXZ2DLbBTib6qFGjcOLECaxbtw5BQUH4888/sXDhQsyZMwevv/460tLScM899yAvLw8ffPABvL3ta6Nug/PCT6BZx9U/vJRYgSY6GIy97MMzfpLSZZSCf1nrYEqL6YZxQbQSyaRlj+yDnDb/DCx2xaKPk/C/t3tj6byxAIBqPz3c69nInCTONtHvn3TCOjOSGA162zCsullxz99bUGJFRoRg1I5I+JVrUOWrw4Zpmaj31FtUjQnzJ7jIDXIxR9lWjPscNPZLSaJa6a3pqkEGjN/9HzqkWQ+MwloZCx0QyDRxwIyPZsH/AC+A8qh1wWKBnmtIoTs2TKPu647n/OBPs4c0NOvwyIBCvPfacQDApLUxjHZeI21WzGOUmdDqChMtjaBSN/Q9Qmm9CplSUp1PVbTZm1Thzf8WlHMBgIe/7YqOKZaJzxrvJhSFNlzVYlhUG7QNNzXC8z0c9uJ4+NftODaATbySBDrR5N84NaPlDrCFEcqJA9VaBSKbqTMq9LZRNSqw8NPueOGNPrztqYmV6H0iGEq9zK4Eune5yiLekRkBvxI1s33jtAxRDyAxTFkdg4Wfdseij5N4zEaCFz8+ZPV4ZCYgMtMDnc/64+WP2H0XLknCO88OwvhN0Ta+0dXhkyeHAqASt7PWb2DkBtaPmYaPFg3BqsmTMWk1f8yzpjnPZdtyCxRcVPvqMGFtNG9bj+P8LsptnOKu0Fg0uReVpF8/nboPpLTShfj6wZF27XctIEWeOk/rlg/jGvKJXG9vvnUUy+++zPPl4IG+dtfOyoDCIENwIX/9Rl63Z1Qe/p5DJdX70TEDZMAjv+xk9g21Ead6OjERLDrTMgY/1r8IBhV1goKKqfMiRmgppI0Owzg+UGaYUUV3PERleeGpT3qiazJ1Lm0l0AGgyocq8Exaf/Mn0fscDYZbnZLxjqv3oP43yynZHHsT6NZgVJox55/NmLd8CyXRQ2P+H1sxb/kWhhQyUeJ861RGTNmyFu0LlzIdmFFZXjzfkae/3mchL/vzgym459eOGLGdvU+DivgEs51jczFnxSYs/HYX5i3fgsVf7GXkLV/nELkmb18LvdLBxNENQF4ExULve8i+4qNeaUJeO3FiCVkvutcroWlU8CTUZCZIyimP3tqO6axJS6xyWMmBm0DnHxD75yUnNG93ZjhkLDp48GB8+eWXSE5ORmVlJbRaLfLy8rB+/XosXLgQvr635kLzZoTQQI87iJ7sU8I8zo6uQeIFdpFtj4kRF8ElrSOR5tbowujFibW5Jlz0g9woQ1pCFYqD61kmOmeBomzin5xaLyroiMzxwEtv9sPiD3th2N4I3PFnPP08O8mSQXfT5CyYZGakJEkzIwCgSUVNSrcqE/2sjfND0Pl8IMZtpPRIV99Ot9MJfl4V3epkYS57E6DHqSDLjS0gU1cRoMP5ruWIyJG+vyMk5GCcGVJMdDdi4CQDlE38BEaTmg1cPGtVGLw/HN6V7H3pW6nBJlovMizfA+WB1CKlOKQB3U4H8BhW4zZFM3IudbQZmYueHVckvJ1vOYzbRN3TNd78hZ1RovhDzqkUfOH8TJlrAd9KDZ6hmXzudLIgPIe6BzZPzmQWwy5aByZ++ifwqL8156ZbHUHFVrq5RG7P3Og6HBxqyV7+7n5Ks/PogCKe3IUzgSsDGFDqCoWjATIN10Ylz4MkuMQVr7zWH9P/68Db7/AgSooizA4D9GG7IpAaMx8zVvK1eM0KoCJIx8xhGfE1ku9BPGUA4Je7x+Kne8fildf649n3emPJomG4e5l9THuCBV92w7gt0TjZrwSpiVUAgL9nTsArr/fDg993ueYkhvZXvPHsu9R4d7ZHGcM+jEvzxT2/dsKQfeFY9FkP9gVmWF1FV/hpGdM9axi9vR3PQNBTwG6WmdhuKULqIEV07mty2tVKa9pzEFLgBu+6G0ewkdIRT02shBlmPPyN9c6SrPY12Dg9E24NStGYh5tceu29w5j5D/8af+6d3oxE1HuvUgQFrtRUId1p/fmjw5EbZb3DypmZ6IkXLXMy3OuDyFmGipDECmkfKG4uICO2molnY654w7tajWff7W338RhUZsRc8bolCuganZKRvPOsdoGesw5QXqWMrX8Je++e6FeMbROzmWsWAHaMy8G2idlodDMgMssTPU6KrPMALH0kBccGFjFdHwCwZXIWo59eEtiA5XMvW7zupwUpUOkUOEnLygBUoVcoWbVjQi7+mZOGbROz8ed9l/A3/V6hhe746Mkh1GeENGDvSMdY3jcC5PyG59lXCNe6GpAeXy36HMkpaDVGpuOYwK9cIxknyCDD0rljAFCeD/EXfUT3cwTeJGFPX54p3ezLnbSBQvMiujbc9Bi5I5J9IIjJqmidJ5kJKApvgGeNig1aHLyifB3UUb2RIIsYMYONCv9GRGVRg2tqQhWPgURgEGg7EjYABAsDMXZfWsdquNYrURLSgJN9ipFDDI4k4mWd+tZmor/6Sn88+mVXC/NLIeJSfZhE0NZJ4lIOHnSCtLVLuYghlp7AyULky4eGw7eFukPu/m8Lhu2MkEzsit0jzg6pY1ZzCmTWrhN1kwJyswzrx05nth0dUIjLHSsBM7BzPCt/s3lSJvIjWA2+rx8agcAyV5TT2vTVdIKYFMwAQGG6tVnoBF3OUYs0biu4NVxJEA92CfxlPld7SK0WI3dEQtOoQL2nHh88ORj3/dQZALBxSiaSTgUiLM8deo0JAcUaBNvo2AJAsWTByhK04daCVbMtGSATEmlFunvGr4tCfKovkk4GwiwHhh/5BzqV87HZIjgL7jIRw2J7IYOM529D/g4qdoNXFZvE2zoxG2aYGf1bAOJGjQBGb6FifO9q+5i0iectE3INngYo9DI88E1nTNgQjRN9ijFh52rcvm4Dep/9C//ceRludTbuczo+GL49As++2xvT/+2ATxYOxScLh+KP28djBHctch2w8NMkxpSeFLe5aJ/OFlRt+eJldqjGqimTJfXlCTZPycKsf+KYxxcF3jxmOdAv+W/kRtby5Fx+WHCO2ac8QIs+KX9ZPyAad/yRYNd+1wpSOuK13nqcTSrD8D2RPJNQArkBWD5tIt5+jpIcOdmnBJ3PUHM9N87kJop3jstFZKYnJnLY/ntH5OG3Oyh5nOLQBlR763CibzGzXlj0cRKWzh2DMVvaIaWHdSNjZ2aiD+R6JIhcq2QcEZLmAKCIZqJzE+wbOfdDAL0OHrY7gjHIBYA/Z43H9iEzLdbJUZmeWPL4MCyfMemW6ZYka8taunuq0zmKcMgl1jQHFbS0VES2BzNWatUGDD6+AoOPr8D8Hzsz21dNmyRafDzfuRxvvMPKsbg2KJiO+7feOorO6csw/PBKppja6SxLljTLgdi8n3led5W+OrS/4mP1uNfMYHXf5yxLhCvdVXM50dKLzNlAikoqvX1JrlofPY4NYGU7P35iCPM36cRpdDMwa3AC4WMh/CtcmY7o7qdt+77ZAlk/EnmY9Piqq37PWwltSfQ2iGLInnCb+/jQFaxdY3J5bHRH4GcHS8NZQHT83Ostg6byAC1jJJKWUMkyVgVzV5dky/bDotB63uNhuyMQKMLWIrINq25PZYNEiSCeJOyF7uy3CmauisUbLw3ER3R7rhh8y9Vwr3fB0N0RFu2eXJAOAqHE0c2AxIu+UOrlTGdJbLov5HYEuIzxrQ38Of+SRSsgQYiVc+6siMgVZyEoOIGVmCkMALzxQn/m74TLvozxLWNkKTjtTRoTw0qXmYCxmyl2NWFNmxWAUi9HrQcbyDZHJ+9mBDG3aylmvi9uXYk693oXDN9JJbLKghsxdQ3Ffj08uBAVflrc/nc8/ZwWxWG2GcH+9P1xI43t2nDjkCDCjuQioEwwfsoE/wM4PoCSXbp9OXXtlQdqsWVCVgsdYcvijReo1vV3/2+QjT2tg6t7SzoMZZChfQY7NhWFNeBMjzJmrgCkpde+XXQWBoUJq6QM7ThwrVdixfRJcKu1lOIxupixejalj+5bqcapPiU42r8IudG10KvN1PxmJdlMZAvnLesIt0YX9DkWgrm/dcTc3zpizNao655w0+iU+GQRFTeSzk8uknuW2v1epYGN6HjBD9NWd7C6397huRi2k15zmWkNZMHcld2+Fsvuv8BIcJQHNOKbRWfsPhYu4m0kaq41hEx7Lo7Q0k1iXX8mJdDhig8e+q4r4i/5wKQwozddMDLL+fN9eDb7+o9fOoF2WWzstuyBCwgudmOSUakJlbjrv81McrNDug8mr2uPPaNs+6A4MxM9rMCDufdcmiwDcVKQEesKLSBJdM7vQORKAZagpdEpMWsFVQCKzvDCqO3t0O1MIL67fxTv93jy456Y83siorNuna6+0dva8R7nRtSwhMOr6Pg1KylJmLyoOozYGYm5v3WEe70KaQlVSEuoQp+j7BganSkeu36/8Czv8bBdESjixG9lQVqUB7GyLsK1BZEGuWtZAlya5CgP0iLWhnH4iX7FjOGowiTHws8ok+jUVmBmSYpKUkVpW8hqz3Z0+dB5mUZXA7oIJKniBL4pYiD7xDV3HOdce420/Beps1T661DraVuaqQ0U2pLobRCFukmBLx4ebnUfYrSz5rZ0jN7aPLaIxYLJiUGY5rUciQDCMKny1TGmUamJlXCvd+ExhMigFX/Jx+J9CyLrUcdJhLlqldg94HZsGDUNrhy2HnHH/vWRi+x7WrmDlXo5vKucN8C7Hrjjr3gs+ihJ9LlKfx1GHPwHg06sQIOrhD6dGdDSxl0BEmYfrRkedSoM2s+aiFT4a3lO3UKQAFBmAn64d7T1N5cKEunt4a1QE92nSg3/Es51QL4jJ67yrRS/5x75uhvv8bA9lJ7goL18l3Vu+/d9P3RCRI4HzHJgx9hcGOUmRlcSoCSGigPZIpzCTpbEzY7QAnd41LhIFnAchYes9RV8WhKEUfXRiydxObECXc74w6g0o9f5v/Dkxz2wecQM9Dwu3jIsRBAti9WWRL81IVw0CmFPsbo8UIsul5dh5spYDN5DzV8P/74D0YU/tcgxtiQe+borjna/E3f/7pi0iRBcXXRuh6HQhGzjlAzM/CcWU/5rz2wbsI8/xwCUQWhE2Y88k1YpNLob0D3tDzR4Uqw1lVaOOT+z36ciQIuQmh8w8NQKwCxi8mgl70DMUm0lYK4nBu8Nh2e1iun85CKNk/CxNb+YFcDULWux5PGh2DB6Gr6ZPwIKru8nHT/o1WZM37oePuUq9lzJgVl/xeKRL1hpky+fScaRQYXoeTwIZjl4Eg7C97SGkBvcBeguwUQHgINDKEmi4TsiRJ/Pi6SSUZE51HqsHScpy/098tux56YiQIfvnmRZ+0YXM+Xbk0olGCfvWMv7jA3TKH35i4nWWeiANKveGeBiUMCD7jTRC9jPMiMrd0cIYFwQcldwgTvuWL0R7Up+ovT36euLS9D68Okh2DB6GrYOn8kUvYbticCJLncjM/h+HOt6F+Zc5fjXGuFRp8LWYTOZx7W+BlZSkDMmulbb8AkRuadNCjN8KtTon/w3Pn7+BIbsCcea8VOwZvwURjeb4J1XjyK87AcEV32P0Mrv8ev953ldBQCwZbJ4JzYA/DRnNM53E2eLL597menc2TjdsnOH9zUUQJcrvyOs4gcs/mIvc92lOrkOd4Ornsl3SUlCSkFFSx1yC1C+dIzT4G6wUAsgZqPWQPYpD9AynZ22EJTvitjLdEFF5CXcrt3UeOf+PZwJN3TFvW/fPkyZMgVhYWGQyWRYs2YN7/n77rsPMpmM92/8+PE23/frr79GdHQ0NBoN+vXrh2PHjl2jb3BzY8xWms0ivOHIXExvz2tXh8lr2sMCdow1ASWtJ4meeIEeuDj6uaRNqt5Dj27JFLN074h8mGFGPDcwoc+VTzW/5V3dSN2C+4bxNcECy1zR53gIBu2Tdkm2NXj6lWtumbY5Kcggw+ADgq4KznV5oWsFcqNrUevDLiSF7ccltDP6zchEB4CR29kCWIW/1ip7l+jZZsbVICTfRmJR6tKjt0uxup0dCdz7miyCXUxMx4JLk2VAPOOfWIt7UauhkgdqLXu99TkSjB6n2BY9OWQMy2fTlEyUBjXyGFeROR4oCmYlX1wMbUl0gLrvyXg8/Z8OV8dINwMa3JodPQREYx4Afno0Bff+TBkSN7obsGFGBjXXcOd7qfNtBvIjqes1Iqd13v9tuDoknbZebOESCqyhNFSLnx9KwdxfOjLbTC1h6NHCkEGG6Ezvq9bz5nqycL1u/AVElFO9S6BTGzH/p05wq1Fi3Loo/J/AzDqALgRbJLtFIBfxqWzSmBhjSwtY+ZqeYtIxMgBmSo/cWaDSKzB2C8Ui5SY/AKrT1BGc7FeC7JhadDkbgGlrYjF5A2etJDhXwktk57hczP2tI2/bjwvOYZJA8jHxPNUJrLDTUDbyBo+9crMMLhJSi5c6Ucm6vkdDRJ9P7kFp9pJCgNbNgI7nRDqhbZyHzA41PLklLvaNyIMZZhwdVCT6PBdS+u7OghgRc1EAiMr2wpHB1PeLExSw9Eojqmmz9eLQeuwZlQedhiqgkViKW9RTNynQ51gIr1sGoOSs3BpdEJV967DPhUg6HYj+B8WvZYJGbyNT7BCFxLVc5atDk9qE7x4/h1rvJkTkeiI60xvFIQ2Mh0KTixG/zb9AycfKAZMC+N9nB1DnZbt4CgDh2R442a8EJoUZHjWWx2hWsDEdYOn9JoRJYYZRacZf91xiciFnk8pQ6Wvdl+hGocFVj20TqAJDUJEbciXMQgGIxr1T/6W6kDI7sEx0Mpc3uhqwWVDM6H7atl8AQ9hMqEKoHf4nAFAS2ojXXuonvQPnGvt77iVkRdcgO0raD6UNFG7oiru+vh7du3fH119/LbnP+PHjUVhYyPz7+++/rb7nihUrsHjxYrz22ms4deoUunfvjnHjxqGkpMTq69pgCb9KDWOmCQDqRjripq+ayRyXes86lWWiwo5gjrQmtgYwi37uXUOv2YxKM/ofCIZKJ0dGbDXS4qswYUO0xXuYZWamBRlgW6LWzLoi+pmzuIY4gvOrabC+ArpZk76OgtseJTcAqRH3Su4bk+YJnZqzapQBGR2qANy85zOec37K/RvR4C6yaqYRyWmJnbptneg+3OtS0yh9jfq30vPJY8zRY5xWY2Da0vUCbd7Zf8Th2wdGWrxPA93h0KSm9u9zOBjH+xdj92iqhTgqwxPv/d9ghgW8Y2wOsqKpoIZISsVd9kVeKBvUWesiuNUwkR5/19x+BQs+5xuVeTnYoSOT3drFSO9qNfb1mQ0AODi0AFPWtMesFdTctOi7Peh39m+c7EvFWF2TA3i6wVxEZLujIkAL3wo1+h22vrBsw80JrvyIGPKjLNm1YvrIAPDRyyfx6LKdzOPXXu0vvuNNAO68w9VHF8YlqYlVGHxiBWZu2oAGLwO2Ts3GrE0bePuUBWnx8x1jbBJdfrp7NC61uxejN7ezeG71neIxqxgWfZSEnseCGG1gIaIzvKDSO9fcRRLVG6dkMgkpALjcDNbka+8cRu+UvzBz43p89dBI/DSX38X36GfU/FTtxy8gVfnpUBhez+v6OzqgiMc0VWsV2DPgNhR6P4y/bptg81hcdPIbnkQHAI1WvBOpKJSSlBi2S5yJfrY7JadDZEYKQ+t5evKwUcwdt5EtCC+fx5omutcp8eM86jzrNCYsWLqLZ5woBWdmogNAeL74b13pp2XYp8IkejWn23rvcD7BixTeblWp0OZg9cSpNvexpyPIAnQBsta7CQNOL0fv838h6fIfGHl4FZ75Yh+MchOGHfkHVf7Nl+fIj6rDt4so6RcpFrbBxczkf4iUrKZBgfSw+bgQdQ9OdL6Ll4D3rFbBLAce+HM7Ei76wuBiws6xOWJvfUOxY2wOYop/xiO/UjHGhA3RyI6RTix3OcMv5t3/fWdkt+fv3yHVG4F04bskuAH7hxXwnu97xHZczEoHV9ndAQo5cM/KbXbt+vsDl9Dv7N8YduQf+977FkazkuhGoxGrVq3CW2+9hbfeegurVq2CwSCdeJHChAkT8Pbbb2PGjBmS+6jVaoSEhDD/fH2ttzosWbIEDz30EObPn49OnTrhu+++g5ubG37++WeHj68NgCdn4AsUsMb7HQlhApaLHSukgwkrgTppA2oNCBDROpaZwXy/7Og6xtDpbFIZhuy11JVv1BgxbLfl9m0TstHkYrlSnLwmhnl/YZW/wcO6kZawzfdWRWiBO9xqqYB9xqpYeNdq8PdMdrHRPt0bSScD4Vuhxp1/JsLowtdWJHpt/hJa160d3FbOrROyrSbReQGBxOyhdWOvS62r9DUqtYhydvQ+Hsw+IEl0NyO8aEaSzCzjLXJTupWLdoTUe1BBc6Mrdb5zo/gMByJ30S05ABE5Hmh0N+DDl04AoKSaAOoez25XzYwRbUl0FjM4Bcj0eH4g64gZWJvOPIWEy77odM4PRqUZ2yZkY9EnPRCe6wF3wbmsd9cjg3u+OfO/WU6dy3Ebo6E0tnVN3IpwMSgsk+I2krlmBVUAV9jIMwSUtR5ShqOI57R5c3XlhXFeSUgDcqPqbHbfrJ59hZlHAGqeef7NPojKZJNu2R2oLr3iUBHZEAdQHtiIU30tE5Kk4C7FOr6RGL4zEq4NSuTE1OLbJ86i3k2Pam8djvfjy7vYo5G7Z3QeyoIacXRgESADJq9rz+t4/Puey7zkLsP+lwELv9sFF60M7jXU/mY5UOelR8cUKmETWuAOGWSQm2VIjxcxyBbcWxF5HlfdFdESkFov6lyNqPTVIqzQQ9SQ9ayAiV4YXo/Zf7NJdBWHCesqQjTaOikbQYWWsXxovjv6H2bjtp2jc3gGpVJw9nVWVwn5rGraFDI03x1eNfy1JTGM9Kh1wTdPW+ruu9Upb3mpUEcgN8vw2YJhiL/kg5HNlL4FID5PyiiZTVeBUXtgiStefe8wMuJsjwkwi2yDpadQo5tBsgNeKG2lUxmx9OEUnO1ZhowONZiwPpr5LN9y6topC2pEZDY135ztXoYLncqxe1QuY+LZEqjy0SE30gp7XASXEivQ5GLEE9/v5m2fsro9CiKkj60onOpan/NLIhIu+GLx+z0Z/xaCZ97vxRiqnupdAoOLCUFFruh0zg9vPzcQCpPtuDj+EjX/50TVoHOK/X6Ejspbivn/tYEPh1cx58+fR3x8PO69916sXr0aq1evxn333Ye4uDikpKS0+AHu2bMHQUFBSEhIwIIFC1BeLq1R1tTUhJMnT2L0aLZqL5fLMXr0aBw+fFjydTqdDjU1Nbx/baAQytHOE95QIYXuUGupIOVsj1Jpc0Yr8VpwSetJoosxkfUqE7MQOd27hGcuKqbxmBNTw5N5IY7Xje4GHB1g2TqoMigxdhPFAmpSGTGGwwiSMowiaK1M35aGDDLEp1HnfOIGil00ckc7FHs9gmKvR3C4553YOmImLkXfxyxUZSb2oiXGGzcrEz08z4NprT08pJBp2xRDcWhj8z5E5FK1xlJ3ZozdHCXKjCTsnbKgRqyZOBWd6BbjzPbVPCYbQb07lREiRYsigSkjWeTIIMNEmo1+kGYtVNH6fKWB/N9DbaM75VZCQLkrtg+h9Cj3D8/HqM3s4oXbimwLal3rLPZcC5CuiK0TspF4yQ+nOs9BRvj9vASQcNHGTcoRU1zyPm24NWHNWFAKKr0CRitrOr9SDaauFpEVvEkQwzHzHrcpmvmbG5dwSS99bDDaDg0twG0r2UJj76PBePrjnjjW/W7c/31nAMBbbx3F0CMrcS7JtjY0QWi+O4q8Hkax1yNID5+PTxYOwZ/30YxfwTSooAtpE9c533jg3uCCEbQu9xvvHMHTX+/F9nE50KtMvDEtyB5JSs4aqDikATLI0J0j21bt1wRvjpdKl5QA5lyVhDZi/ort8Khjnz/Wr4gZQ8Py2TVUuh1atjHpziGbYy0JSzR5xWLuvAhKOiKsgGWiBxe7Y/2YaQAAFy2b1miUIBqJEUUq/XQILHFlutRqfO1j74YWOLe3zwQbc+1P94yx2EZ8d/Qu4pW4uFSfW14q1FHc9Wci9ve9A3/dPgEhBc0r9solCqNGpRn3/JzI+M0AwMbJmfhpgUROTvDTdUsOQGyq5bgglnSNttFJxrxWCbz3+nHcuXoTZq/byKxZIAPcG9h7v8KPiglP9i7ByEOrcOfqTRi9/19o1Y4Tc8Uwd+Vm9DvzN9Jjq+zaf83MdAw79g+e/XwfE68CwIdPDsaT3+2x+tqyIGo9tuizJOzrP5uS0OFArVVg1qo4hiB1pgfVVdPxgj92D7odD33H75iVQkCZBr4Vavr3aeZ9aIfy3acLhzXvvW8hOJxEf/DBB9G5c2fk5eXh1KlTOHXqFHJzc9GtWzc8/PDDLXpw48ePx2+//YadO3figw8+wN69ezFhwgQYjeITY1lZGYxGI4KDg3nbg4ODUVQkrW323nvvwdvbm/kXGXkVlcKbDFzdYqFmlX+ZK3wrqQr25cQqjN4aBUfh7UAy40ZDjHFgloPRgs3sUM20xaXFV4kyGNPiqxBc5MYwcDI5zN5kekAV4nZaE7nBwwAfCdNC0eO9SZO+zUEcR0PMGlJpvUuTnD/DaBoV6HjB/opva4LcLOPpohMom5ofJAuTzGKsuNbKRPet1DB621wQLd/8cGqR1+UspW3X6GFEaZBl8YGw9Is4rIu4yz4YtpPqVOE6pD/4XReL1yv1cpzvSic36J/KvbGNOcBF1zMBiMymWPzcVlSFA9rxHm1sDAb9DlFMPea6o/H+M4MxYnsET/5t+soOGL8hGpPWsonNRncD3GtdMFSkG6sNtw7aO5LIo29b0a4mzjTd+ZzfTZ3Y6XU8GPN/7ITXX+zPtIMDfE30rsmsnqoLTe4gjGehVm15oBbDt7OSGT8/ch6/33sRSx9OwbiN0cz2ei8qmSE2h3NjBJmRknz8v3d7Mr/D4UGF+PyZ08w+k9fEYMB+lu1b76mHa70SwyWkO240nvykJyJyqCTplklZWPoIlZQas5ld6xDDObmdagw5tKZuZC4/+XpocD5zjs8mlVnoDxdziuzfPHkGQ3aGY8rq9lj4WRKzvUQkzhDeEgMOWZrM3ggElEoXH072proWSBzOvfZ0rkbUeDQhPNcDcZd9GC393seCEVTkhnpvgwUrVwiuHjRZi5UHalHpp8OCr7pJvUwUIVLkMSdBp/N+THFNpbWMewhR7njfIqZ4UeNNXdNi3dEA4OJk0kutCTLIMJNTvORC1aigxnCJBKfJymk/PKgIb7w4AEknA/Hw112R346rUy6DS5NcnIEOytgzPYFPfpAi5Eh5GdjCvhH56H2Uys0RWUoASOlGdZac6F/MJO3Lghrx9ZPJzfocLho1BhzvXwyj0oxfHzxv12ueX3IAALB8biqzbfZf8eh2JpCn/W4NnnReK1Xgn0HIO8RMtIk2++VKztoDGWRMLJ7ZQaTTAABM4jJ4Kp0cbvVKu3Lv/85Oc+i4bkU4fDckJyfjvffe48mq+Pr64p133sHp06etvNJx3HnnnZg6dSq6du2K6dOnY8OGDTh+/Dj27NnTop/zwgsvoLq6mvmXm5vbou/fmsENEEoELFSNVsFMwBmxVRi2R2RhbBb8L3jO2U1ZuPCTkPMgrucF4fUMyzwtoRIn+hZb7Fsa3IhqnyZGF7TRg622rr5NfMAavzGGCSLXzbDufs0/3rYkOgG3Q8Aa0kiSXTAyDtsVcVO3Nk1ez2fwuTYoMWVth2a/n6aRfwKFBmbKJplTtBQ3F9P/s2Q8muh1W623HiVBDbyiy7nuZRb7E+39Sn8ds23urx3x+WMjAFCtk4TBHpXthaVz+YyhHicDkdybX3hzr22dhYlrBRlkmEB3n1QEsEXgFAeYlb7VbeMoAfFPyImq5TGFwgo8sHzWJAzeyxphj9rZDsvuHoeep/iajaO3tYOmjd1/SyNY6IVjbSqw87mcKMdatlsb5GYZ3n9mCBZ81Z23PYBD7ggsdYOClhchLfFdzlFyDkSrlotF3+3B+tGsXu//fbkPL358EM99vh+L3+/J21eMlchl2pkVVILzvzsorfQTfYoxb+UW5MRQiYfeR4Ow9N6xFu3wo7e1g6uTFtSTTgfiRJe70T7dGzqNEadojewZq9gkGOncU9kw1CP45klKHkPYtZ8X3cA7x3KRC//2v2hCjbsBszZvwDcPjsSo7Wx3anmA7U7BGf80P65rSXC7nIUg57nOk0p280JFGbD0kRQkXvLDgT534Kd7qbhIbpYxPlReIutKKXkjg4sJ4bnUsaTHVWHxh73s7lTzqFE6/Vwmgwyd6DGgSWN5EoKKXXEltgrTtqzD9M3r0ORiZLoquXH7g992YcaWbpxiXRscx+R14h1TTa5GLJ03BuE5jnfon0sqw6R1Mdg6YiY6pfihgZNbMKjMVMe8cEghcpQiBWqdm3gB5WK3CoePDWZqnCTFA27eQ3hNkk6QD18+ibQ4x/0nuLgSV8X8LdbpLwT32idYuCQJXz46AgeG0trldjC4SbI9TUDaI8XiAAEhk6tOYC9IJ5JQXoyBHJizLJF9TB93k9qE0VstPU7EsH1cTot1BNyscDiJHh8fj+Jiyx+tpKQEsbHi1bWWQvv27REQEID09HTR5wMCAqBQKCyOr7i4GCEh0q2NarUaXl5evH9toOBTyb/ZuYFIStcydEqhJufM9jXoICJfAhngWe0ivhAyo1Ul0kKK+As/oRZiYVgdU1HM6FDDY5kDYAaxtPhKniwLwfnuFVh5V6rFdpVegV7HqESEzorGtBBchtKtBJPMjCXPnsKCn3aixotKUJLfJS2+yupr0wTtsL2OBmH2X/F4+TUrrtY3AWaujOXJMXnUujDGWrYgZnBra2Hh1tC6CxI9TwRbff5SxwqeWdOWiVkW+zRq+MHJ3F8SMe/XjnCj9fKMSjOvnXb4jgiKTUKDsNu7XGBZ8W1MdEuQ6zidE1A7Av8K52aaXU8EFbvBq0oFk8KMK7GWDBiuTAsZcwccCOUtPOwdV9pw80Lo78IDfa241osz4Tqd8cOcnxMYKUESk2bH1Ep2893MiMpk1yunepUwHTfFtEHj7X/H8+SWuGhyNeH3+RcZWUGC7JgabJia0azjOTi0AB8/dwKTdq7hbR+0Lxz1bnoLY7aJTi7tJIMMnzwxFDP+icXUf9vjlVf6odeJIPhW8K9ho0wkuyKyacf4HBQH1WPVXdZZfjXelnIi+WEsE9LgYsKmKXxSTXFIg/AlPMiMQGSec6xvw/OkZVBSO1ZArzSy6x3BMvH9V44zkiNcxGRQ363KR2vxXGQW21XtUeOCPgepGM7gYoaBvmcOD6ISZbf/Hc++0ErSzK+VrLFIIU0MLgYF1k/LgFFpRnmgFgeHFqCac25dmuS4e1kiFi1Jwr6+s/Hol93wwlt9rsdh37ToeSKIkYoSYtOUTPw8Z6zD72mWA2WBDdgwNQNbJ2QjJt0LURmeCCykcjiNVryurjno+/ed14+KPk1yKSqdHH2PsGurBUt3Qa+UznlUe+uw4Ked+PT/TolKZnI7z8/2KLOpjV4c0sCY7U79tz3m/pKIBV9SnSk5UTW872INH7xMeVcR0t7oLe3w0Ddd8MYLAwBYEhwdZaIDwJgt7aDUy5GeUMUfozh/7xzLIQRzjjsvnDoP1nxT/Eo1eOD7zlblXdvQjCT6e++9h0WLFmHVqlXIy8tDXl4eVq1ahaeeegoffPDBNdUVz8vLQ3l5OUJDxdvRVCoVevXqhZ07dzLbTCYTdu7ciQEDBrT48dwKEMqtcJkS+4bno/cxasDTuRpR49XEGCZwUSvhOq0wtZ4EOkC14mg4Czti4qemWbeFoQ0Iz/OAW50SBhcTDg/muy6TQSw1oQoTN4hXop/4fjeuiGh3Pf55Eu+xd4VtpsStykSXm2X49cHz+G92OpM073iRWiSmJlYyWtRCmGRmiyT7/T92wZePjuCZet2MUBrlmPdLR+axR50LRu6IZIIbn3LppIdWhLGgk9BSJGjtrH5rLCqAYiBwDVt3j7TsbiIsKwAIz/XAJ08Og3u9C28M5Wp3XuxSAb3KBHe6PT+LLtL1P852ALnXtZ7OnuuFPkeD4V+m4TFzHEHQTWxW6ChkkDHFoQyRJPp4jgwE2S+g3JUpDCn1cowSkY5qw60Fq0xPOk7iyX1xFoYXulegXa4Xdg+8jXqKxKRyiMZONzsCS10Z6Y/caDZJQIyrO6f447e7xjMePV4CLeqVc9IQwEkGEm3u1E5VzT6mT587ZbEtPtWHZQbSv6dKJ8fobc4/Hgw8GIbvHhiFH+ePwcLPkyCDjDG2JNC72UFRpHHv31sln1v0URICJHTWDw0v5JEWvng6mfd8foR1uQE3J4q7AqwkoPPD63nxkQXkwDdPWBpeku4LnSsdf3J+kqKwekbLvs5Ljx6nAxmJI1JwIjJlD4nI54khuKiVJNHP8JnjkVlUAcOzmroeuMWYjVMyeWzc2FQffPrEMAQXuyM23QdvvDTAwoi0DY5BBhl+vWscY5wbf8GHeW7TlCwknQ3C3J8tWcS2UO9uwOFBhdg8NQuZsTXIbl+L0lDLgtKNQr2neAxO/N2a1CZUca69c0llWPqItAxLakIl/pudjt/uvyAq5SbsPN8zMs/q8RWGUeNHu0xP/Dh/DD55chgCaAUC8pw92DEuB0Uh9Uil8wnTVnfA288Pgn8F9V5CgmNcM5jovpUaDOF0fjLgXCuFpOtLcP2c6l2K0Dx3q0ajMgAvvdkP3tVt97o1OJxEnzx5Mi5cuIDZs2cjKioKUVFRmD17NlJSUjBlyhT4+vrCx8eHJ/cihbq6OiQnJyM5ORkAkJmZieTkZOTk5KCurg7PPvssjhw5gqysLOzcuRPTpk1DbGwsxo0bx7zHqFGj8NVXXzGPFy9ejB9//BHLli3DxYsXsWDBAtTX12P+/PmOftU2ALwbyEXQrrhhRiYy27ML6fSEKtGKGtfQjQsx53VnhgwyhHNMZEj7JmHr13o18ZIM+4bnAwBctPzvmZZQiU4pfkxr3KKPknjPbxSwSwBg/KZoDNvJVq7tYZk7u2v8tYSQeR6d4YWoTC/oNEbsGi0u11QQXocGDwOvOuvaSs0vmwOucZnexQT3ehf0oM2vInP4rCF1A3XtKwzi93CDl/WEpUU7fytDSKH1JPrFTuWIzPFg2JK5UXVocOUvCms9WbZPwiV2vnTRy5nz2ujKnkdiNBpzxRuvvtwPT3/YE6+/2B9DD7NdLe61zrNIdhYoTHJGn97iOTvmoMDy1n2ttjTCaS3fgnDLhE1IkTv+nTQZ/06azDPCI7rM7/7fIN72NtyasMpEp8E194agJvv+K8cxet+/mLg2Bk991APDd0Rg9JZ2SLx4c/qWWIMMMkYXmsCrSsUUI9579Ri+e/wsFr/fEx1T/BCeZzl37RtJxareFWrEXvbBI191RfQV64xloWa3b7ma0VwWGqoBQOxlHzz5zR7etq8fHNlqE3KhnBhAKg6SYi2e7sN2TLTjmJQCwNoZV/CzQLqNC62bkUn+nu9ejm8WUslkrUqPJhHJHi5CCp0n6ctbwwgulzpPPaPvLjVHb5pquU6aslZATpKx57dJY8JDX3elZC0A/LAwBX5l1LVHksnEqD0mwxu/3D0Wz79pnXEd2EoK7D1O8j18SPzd63gwljx7Cmd6snKDmydnIZ0joxF/6eYmEN0oaHRKprDJZYkfG1CEGRvW46FvurL3hfAWkEiqL/xhN44OKMLYTVEYvtOS6U7WbVKY9TdHTcL+mmCL4sQAvpKEmCwuAVnfx0mQ3ISkuNRE6/IwJFEeKrK+cySJDgCXO1YySXxhXoxLcPStUFvIu9iLD54eQv3BvT7EfmLh9aMAEi75iOzIojxQi5nr1jfruG4lOJxE3717N/Nv165d2LVrl+jjXbt22XyvEydOoEePHujRowcAKgHeo0cPvPrqq1AoFDh79iymTp2K+Ph4PPDAA+jVqxf2798PtZoNuq5cuYKyMnYCuOOOO/Dxxx/j1VdfRVJSEpKTk7FlyxYLs9E22Aeug3pUBhtUq+nk4p/3XmS2pSVU8iQMCKp9qWSRMMGjaoXmJFz2icJI3T4kWa1TU4xcMqCXBlMBWUgRPwGZllAFlV6BGFoXffCBcN65OTrQUrtLbpZhxipWy9BNhPEvhL+EhvutAMIcJ5OYDDKM2UIlG48MLBR9DdEWIx0GQOs1v2wOgovZa5uYWgaWUMF2UImAdUX7ACgdMGjkBmVCFldrg7pJwXSgiOFC5wooTHImSIYcuBLHZ+7WcZjR3EWODDKGjd7oxu5DfhPvKjUe/yIJz7/dBwu+6o46DzY579mWRBeFVLuka6Pt+9u75tYtRoqBLDC4hrhcDN4fjsH7+f4o9fS1Pmy3cxoItuH6wssOdlMDp2PMIocgp4zWN0/OxLPv9MaKmZPw5+wJ6JwiLVtwM6NTCr94EJPOxur7hxfgtfcO44VPDuBilwpc7CKeSPCqUqHaT4eT/Uuw8u5UZHWw3k0sVC+p9NdR+ra8eZ6KHzxqXGCUm3GhK62nK6NIOVLawK0BofmcGEbC88ke/HXbBN7j7A61iLvoI24+SL8nV9/+jXePAADWzcywKTXQ+YzzaFn7cztlRbSa94yiyC6eteJF17SEKpT78TXgex0Pho9AZseTU+w516MMc39lGb4qAxXrk27pi10qYFBQ53bihhjc83NHq+c0UKJjwNnQLpdfEKun48qLXSrwyf8o6Yl+h0LgXalCWVAj/rudlczte7Qtd3KtMIJOdBeGNsC9mo1FDw0twE+PpfCITTxIXJNnepbiXFIZDg8qxOsvDrCQ69C5iRfZSOfLrJVxNj/jeqPWy1LWioCbpBbT7ibGnhPWRwMA0m3IuZJEuRhJqjBcOonONfCMpdcax/sVMTkgYV6MS3CMzPZstiF6VLYXnnund7Nee9mGPxwgnotqAx8OJ9GHDRtm9z9bGD58OMxms8W/X3/9Fa6urti6dStKSkrQ1NSErKws/PDDDxbJ8KysLLz++uu8bQsXLkR2djZ0Oh2OHj2Kfv1ubj3jawkuEz09sQq9jlLa3Hf8SWnGlQeybMrU+ErRtpQTfSmTGOGArm6FLN8wkeRfGB1MmxVAhZ/WImETI2CaEAd0sl9qQiVj2AYABWHiLZncaquY/KIQbUx0viZaNK0dKkz+mGHGM5/vxeIv9wLgm6xo7Eiy3SzgVsdJKy3pthiyJww/3DMKgcVUsEVc4h3SS+PECQeG5uPHR89d3QHfYPhWsOdLLojfLnamkgXc4Eno1E70PjWNCiz8NIn3HNGM5zLRSRLdo46fKC/3ZXVQxQy12iBt3GNPEcinLYnOA5EyKgyzrr9L0ORiZJhWQnm4NtyasIeJzp2HzQqIJiXNCiC88kfEZ/+Kh3/Z0YJH2LogZOATgkbcJR90Okc9V+3bBKVejk8fGwZw5ys6LickEACo9KPi+h5HA+Bbzr9nvSpdIDOJyzT+37u98MrL/Rg9+34HQtDvYAjc61wwcc8aAGxXSkihW6vyRBKCy1Y0uohcnHZ8Ne9KFZ75ch+CCziMZhnQMfc3jNkkYv4mA7qcsSwU7RyVg/9uE/cK42LaGucpWthan/w95xIAmsglsd4pEsxBcrMM0//lG6ee784aIW6ckokX32DZ5Xf/lgDXeup6dK1XotJPh8ODWJJNRgdLyTIugotaBxnEvd4FHtVs3FgcUg+PGhcUhzQwXSM/zxmLcZujAfDNHruf5rPY29ByWPBld8BMFcXI7xBKdwr9fv9F+FZqIGuGCmGtdxMi8jzw85yxSLhAx76CeyjhnC+UTTLc+0NHROZQOQqdxoioDE/YA2WTnWO3HbkKmQEW3WYEe0blYd7yLYw2+qrZabjr300o829k1vcXOlcgqnQphh5dib3DKcmWZz/dh8udqDUX8eoRep4JQZLoYfn8+3rVHakoD5CWxfGuVKHncSo3FkV7LxBFgbA8d4vuSzeOd1XPk0FWj8kWJop5DHHOObl+hKSvwkjb8bvwPLTBEg4n0QFAq9Xi2LFj2LBhA9atW8f714abC96CxQ5jdiMDZvzDZ0ocHlSIdlkiAzB9lZnk/NHUw4n0+exFD86AZ6QZC2H5LNM8OanEImHD06MzAzkxtciNrGXMXg4NLkDPE+z75tHOziaZmWeWkXjRlxkcxfRoheAm+W41kGIOVxONTAjCtqyLnSrwx/xLoprJrV272xFwWTXEnMyFbn2FDJi2JpYxuHUIZlgESHVeeh6DujUiiCNJI0xiNHgYUOOl440FBwfn8/Yx0gY24zZG8YIqgGVIN7ix54ho3AqZWaUB7PXsWds6W+OvNTpbMdayhdYqN3CtwCbRrevvEnD1Va1qYbfhloHQlFEUIuxUqf2qfXUoDnGs3fpmAiFYuNe6QNOogJ5mKo/cEYn7f2D1ncdtisLdfyQipISdu0jnnZhp/el+Zaj05zMBa3z1klqqZUGNWPhlEj5+kiJRnepXgqODilDMSXZOpiU3YgQSNK0NwUXUOSSSbVJQNXAuXEFCqdq3CUcHFsG30vJ++Oy5U1TBQ4DJq9tDIyAgffPkGRwcWmCxrxADD4Xb3Od6wZZn08WuVOzuVaOGWid+wYlJLNy+PF5kTwp1Xnqc6l2KyWuoxJN7vQpv/28gAEBDJ5k2cgx1s2Ksr7NCClqHnAsAxKb7AKDkcSoCdeh3OIR57qmPeiCg3BW3/x1n8TopAkIbrh4hxe7MupSMv4UR9QijE+mn+pRg2uoOoq9VSBO0AQCpcRUYsSOCNXIWzJ+Xu1bCoDJj2cMX4V9K3YtFYfXof1jcc1AIMckuUdiRazcrIZ6NpNeN2yZm43QvSgLr8Z92YdeYXLzwyQFmfX+IHvsud6xkiJ8k6R2Z7YHRW9tBbpQhN6oOme2rRU1IASA7mjpXQtPjz585bfX4I/I8GcZ8V1o6knRdSUnNDN4TBtd6JRZ80d3qe9tC4kVftE8XdCxwzjkhXBrECr3WYAZy29WiJNA+ssytCoeT6Fu2bEG7du3Qv39/TJ06FdOnT2f+zZgx41ocYxtuIAhbgOiha2lmZHmAFpNIBYwe6MqCtUz7ihC/zR4Hg8Bs0NeKWaGz4v4fOuPnuym9wnqaXcdtS7xrzWZeC1Zsqg/6H2InJSWtnbhpSiajKbl5chZ8OEahNT5NODgoH7F5v6DnhT9RHEwFinIjOzJKGXQQeNS4QN3U+pj+LQXC7M+OrmXavEiLFjfwrvHSYcSRVZZvQF+qtxKbX8zoSUUvsInWZlSWFZ1UiTl61JYILJ8+0WK7xsbi09kRUsQuoEiHDtHYBIDLiZW8rpQVc9KgV1CBMjeISxDRnCRyLg1cORc6SBNKtpT7sgwJj7pbp3PCEXCLlACYa7XejkJOGxOdD0eZ6DU+FKvVs1oFhalZvI023GSwZcwMUDrTKTHz4CKRQHv6/Z748uER+GThUPx89xhWH/QWBJln9CojDva4g0kqjN8YjbnLErGn3+3YMnwGvn1gFABg6mqWkaxzNeLPmeMRf4EiaYzcGgm5SIOZvAnYMGoaNoyeBq9Kdg66Z2lHvPRaXwBgjNTGbG0HZROVtODBBKyckwoADOu1tYLEhiqdSBzDiYWaOIajcgGZgMgAXOpsyZC83KkKw3aFY+eAWbzt779+HL/cPZa37cDwAh57WBRmwM+JiDW2kugEnrUuUHHWMu41bIyT2c4yyd37eLBViYM712xCJm3KfjmxEuM2RUNmBCoDqPjqj3svwUD/UMet6DEDrUsyc9ymaACAD12w4RrYk7X80L0R2D5kJrPdr0zTZix4jbG/92wLklFBRD3ca6nfZ83tV0TXVkYVRNnb5HUT96xFdOnPvA4jKeyYkAOAMuaNv+hERRM527kk7ORdNzMD2TG1Fi/pfppKYr/0Rl9sHDUduwbdBt9KDQYcoPIw/ZOXo2PWMkYRgAsi98ItHKXFVSI1scrqYUZlejFjyswVcVBxYhYpKck/Zk/Ayc53I9ramtoOyCDDRBFZNDK3mOip2qg048FvOzvyxnj7fwMRVNp6CoU3Ag6vaJ544gncfvvtKCwshMlk4v0zGh1o7W9DqwBJEBNmC2GPVvhrMXwXrW/KuYpKg+iFtWDQP9+tnHkPgtbSCseFDDKM3hYFuVHG6BLWu+t5UjVXOlQj8Tw1CM//sTOjzw2w7NPTvUqZyqpZDpxNKud9zncLz6LeU4+CiHqsvu0K9Eojlj1wgV9htBIz38osdIBiCXtVqWBSmJmWTLJwLw5pgJEOko8O4Gt+9T4aRJlj0de0vYH+zQC5WcYwEoihElm86FXU2N492UprpwTjQOtmgkakoKNq5UWeLmdZdnMkrTlZ6cvKW22emIX+B0MZjU6DyoR/7kwDABQHNzDnK/GCpRkeYaLz5VyosddDINlS5cUm0YkMTBv4kJtleOm1vuzCkT73ZE5SNyoweE8YL/glaI0dU9cSxJSs1E6GShWdRG+TcmkDgT2eGCa5GYHlbjzGJBcp3Uoxe3k85v7WEZM2tEfipVvPVJQgMscT/mUaNKlN+PHxFFT66eBfqkG/wyGQQYaOF/3Q41QQQ6xIEHROfffEWaR2qgRkwK5xuYxcGxdvvzgIfY6HoM+xEMz/iWW3pyZUYfA+iuF8aGgByvwb4V2tRoLY70EPr/6lGl4ivzWCGGMSyTsA0kaANITn1WwjBDrdqxSdz/vzCDQAxRB0FEop89MbBI1OaZPFDwDudS5sRySAAftZUtK2yVmir3nk665on+5toY9OcLkjxRLdNyIPAWUadDrPXqt6tQlfP5WMkqAGHBnw/+ydd3gc1dXG39m+WvXeLcmW5F5wb7j3AgaD6TUh8AEJEEJL6AQCIQk1tIRQEno17tgYG9x7tyXZ6r2XVdn6/TFzp+zOqhjbklbn9zx6vDtNo/HMnXvPfc971OsnMSJ60fiABcrrBKumnPQ6cV18YSCaAvlJhD3jpDGRpYn6PuebwGYDrv1goNdya5ADAVZlf9ULlQiep0Whr6whNbIya5HZk4LogOhukJ1Zh4ro9vucTz48UfQX758TijF7YsRM0pv+PVhsR2vD2/DP3x5SqNJbjQ5kC/YwA2Q2nO/+5liH5xhZZYJD70JAkw4ZWaG4+Eep9s9IH3ZI5lYdImrOzSTcVf/zzr6JL/IOfi9cmdqlgrHfXnam4436OF0OopeXl+O+++6jQp19BEuTXtHRqRcGxDURrQhqNIhpRwzm2+vJhzed8GrMVa1fegFGm1b01waAsrhmRdD61o++R+rpYOQk3IxfvTUUyXlB0LXxjTe7BjnpdYoiF4cu4gPqrIHbsKhAXLd6aS6u/nItnhAKCAHAwKNhmLkhyec59qbO3fmAAyf6UbMXY3R5ADRODk6dG1VRfMYEq94dXca/zJZ80x8/j10BgFdqWPpYUFL0UhWuHRu8tAlBdM80t85QHdmqsHRgdGYA1ZNJKpDagBaLHYENesWgeO3SXERXBuBI+vXQCgPYe9/YgryUBhwfJk2aye2gGKzzLC8syiYwPT3R60KlIHpf8vDvKr/9xyjkxd6K+atSvNYFNejx5dIleP4ebzWrp9VOX4dNLDYHOtBi6tiwk1nAeVrDEX2XiGqT2Cb6ws0BDq0LDz89TlwWXyj1N79fUIgDoyrO2zn2JjRuDvNWpwDgA+IAr0L3lfnBlHY6O/9/8NOM9q1Ado5YgVtltjCPPD0OW8YtBwDsmlSqsOcZkvsB/nPrURwbXu11HFOLFgcGXouDA69DdEXvVrixdtChc+HAwGv5hWcRp54tFLxXC278+cld4MB5KdjXLswVP4/b3rmxeE9sf5m9F+ehv5NnQgQ1GqCXCS42LioUPx9RuccAILDJgB0XXYWTKTfiBZV3ukPvhrFZi6LkJhweWYUrP+KDUCzj+tkn9mBYzofi2MEXvUmJnnEqFAOyQkWrxpOyAsPXfLUGA/Pex/7RFVi3MF9cHlZDE98Xgr//dhqu+oC/BydvkSaJmi0OjN8W2+G7ctKWOMSU8vdifVgHPi+AmN0VXaq8f9ctycen155S3ae7nAMKBIuVN+8+jGHqbxCfAAC6+0lEQVQ5H/rc7kTKjbj99eE+1y/9pj9yEm/GX+6ZAgD4+IZTmHDwEzz23A4AwNVfrgXAW6Ixi51VS8/g3ds6DqKz/530rFBw4DB9kxREn71epbbFOSY9Owx3/22kYpnoViB7r7x/y/EuvaOOjKjyaX1D8HQ5iL58+XL8+OOP5+FUiJ4IB07sLGockpKiKpJVHVbOWtaHtLEdFZQkenvXpeX0Xk/EMbuljmtpghWxpcoBwdql+aKfsdalwSiP2cjszFpFB60ilr+eagVDd08sw08zlH7KDz89zqd1DgBRUdyX8fRF1zk1iBYKY5YIlbZZihjLEMg4FYqaCD4o2ZdU6AzJqoG/PkxlxRS7qgMxjwHekMMRism1mohW1aIsJrU06F6EvLDYmf4NGJAdqlifm9IAu84Jg12rUDZ8c3kOjg+SBn9yL3qG5IkuC6IHMTsX5cCmMVBSv5tbKYjeEWrpldVRrWgxOVCjcp+aWymILieowSAGG1hb2R6sT0BKdILBgRNtBdrZCBVRVly0N1q0u1Pcbxxw00frsX5+Hr5ano318/N8FmXvC9z69hAk5wYhrMaI5Nwg3PKO79TtIUciYGrRdsondfTuaKTmhnotH3gyAiP3R8GtAR5/dgeWfSp59z7/p73i54lbpUyCm98ZgviSQBjsvfvdD0h2LvVhNkRVmDGrHVFLe+wbV47EvEDV4MaZ/g348vJs8f+JTXpsnleMBd+l4OIfEvD4oxM69XuS8nueaMlXH5uTFZwNajCI/XNPaiPbUB3uexzEgcMVH6erZpgNEzIJn3x6JxYJdgh2nbIz6+rgldWb7B5524cU1XWHLqqC3eDCZau/w/GhUt/0r/d6e/IT54drPxwEvU2DqIoAxWTxrsllGLlXiB+4gaRcb9HN9mmlKI/z/RzI0Tgk0VhFXAuMVuWzsWFhgdc+xiaNWGxawQWIrzYHtu9wEVVuxm9fHNkpq6qmQBvWL8xTLNsyswi1Ya3YNYnPOln+abqoZv/4evUJBU+ODVX6n1/1v0xM2hqP3/11FMJqL0wb8X8e3up1YTYkFCrfK2uX5HXpmG7Ojap2CqoSZxFEf+211/DVV1/hpptuwt/+9je88sorih/C/2AdhVBZAK02vA0uzo2Mk6GKbbvywGVk96y0oa4gr4hcFmdVKNMZG+dKiokl38iKg7iBVrMTbSYndDZOocKQq/WXfTZArPgMAJFCAPjuv43E/LUpCm9vzwrekb1IIXG+YL7oWbLJCtEXPY6/dieEl1+dYMORfipMDPj2pg7yuYIF0VmBFWa5wjzRVa+J7J7NPB6GH6Ysx7y1/cRlNRGtqsENYy8P+MbJKpdnZ9Z6eZu7dUCeUNSnv2zCcM2SXJyQeaCG1Xlf04BmbyW65InuEUS3SL7engXHCG8yVQpluTXAxnkFqoXKzKTuVyCfWK+O7HjgVh9KSnTCm6jKjvsouyaUQePmsFQortYaoBxQlyU044bP1uOOd3/ADZ+tx47J7dsv+DNDj0Riz4hrcDLlJuwZcQ2GHon0ua2lWY/pm/igLyuy6Is1s33XumL94PWL8rFgTaro1V0bwfenvl6wBDsu5u0hxu6MwRN/mtj5P6iHE1pnVNgDyMcEXaE2vE2R8v+Xe6fwloIAwAH/958fxHXySY8fZxbik8sWIrGTGb1qY5TuJlLoT7o9JhCYWhrg6zu15+t8xcrV7f6OgBY9tl20wms5Gwtsm1aCzbMLMXJfFKABdLZOhkXcva9Q9qLvlBZK6R7j95YAB6pi+PHPuB2xPq0oiHPPmN0xOJ52A966dTaWfTlAsW7fhApEVpgADhi1P9rHETqHSwcU95PFDuRRVhfQZnJC36p8IANa9OoK5nPpEHWWAfnKmBbMWd+vw+1cnBtL16/E5rlFiuWn+9djzeI8OHVuDD4Sjhfu4zNXGoLbsHV6kdqhvNgzka+dwAQ6QY0GfL14CR6RZdGdb8JrTYgtlok5OaA4STnu7rBuhgccOLGNJtTpchD9448/xoYNG/Dll1/i1VdfxT/+8Q/x56WXXjoPp0h0N2zA3E/WCXNp3bAG2jFxm7KSc0Vcs1gIQk7K6WCvRjLtdO9Voo/fKalryuKaUa2iyGOV3bdNKVGqrmQvnvE74rx8plnB0Ynb4vDwU2MxYVssJv4cJwbWxu+MhU3vVCjR5Z6BQN8MAHvCZoWzZQVEWJpWWbwVZbFWHBRsdJw6N8xWHRKKAiUleh/0lWcZFu/831EUJzRJnuh6fhAT1oF6kF0zedEih96F3P7eBaCMvVyJ3j8nBEHCIOr40Bos+tZ7EM2yTeJKBPWIi1f9rF0spGO7JesWOWIQ3axi59KgVEZbLVL6pqmXT0xcCOavTsGs9d6qwd++uRlFSd5es2Tn4g17v6gp0XdMKsG/bzsqKgRJiU6oMfSw7yAv4507jmLTnALc+coIBNXzz2Fgne/nUT7pSLTPou9SMfBYOKZsicdN/xqM698dhBH7ImFs0SKi0oTpmxLx7byl7R7juvcGYs7aZFy0JxqhtUbMXp8sij30bRp8tTxb3PbBZ8ae17/nQqN1acT+UHVEq7d3fztBIU/Ri9zubuO8fJ+FsFNy5BZyTuwdV44/vPpTp843QcU2rrsR7QFVIhEawcJi8LEItLVjG3ZseDU+vyqr3d+T27/Ba9mqZbkIEtqSP7zyk5gZnVjYueukdXDKAGQvYMSBSIzfLt2n8cW+a1MkFfS8+8Wf0bg50b/71reGYtLWOESWm0VrI6vQ/195Oe9THdig73rgWWX7Votsgkp4DmPKlfdFbZSKCr0d2qvX5pMu/C3s+OzfW/67oUNrwX1jy5EnFP+MlGX/Ogwu3Pf6FgD8OxEAcgbU4eov18JmdCGsqvPijwwVgc6FpNN1YTp5rW16p2IMSnjT5SD6H//4Rzz55JOor69HXl4ecnNzxZ8zZ8iE3h9hvm9pp0MBSA1XQ7AN0zclQW+TOhKlcc2q1bwTir3TFXtz1e/wGhPCK/nztxtc2DVZKsaSeZxvSMvim1ET3orL1nyH3771o+pxFq9MxYxNyoAOU7Q2Bttw8ZZEfLvgEnyxZDHKBJVk+qkwlMcqC7jqPdQT4aREF5Xop9PrxUKiciX6lpn8LHNqjuQDrnFzolVRX7RzmfW9dC8+8NJP4n1lE5RAeoe23TR8psxhBS6ZqkdexIi1H709iK53aDFvjaSAePW+g14p3YdHVgGQDVaEx9QazHdMODdUB2JiYdEASWXOsiU8lejNZrkSnYLoHRHUaMBHVyz0Wt5scWDP+HKv5RRE94YV1fPMPKuMbMGl677DIy9uw18e3QNAqqMS3Ivf98S5Z/7qjtVj+yZW4IObTyAlN0Qs1jVOZqXniXzylmifKz5Ox5aJV+Dmfw/F8/dNxYv3XIwNMy5HQcyvcLz/jfh02SJM2BHX7jEiasz474oFWDtrGab9mAiDXYvNk5eDc/EFGj+89SQA4K5/jMBUofioP8GCMQX9GpCSGwytXfYubye+6va4TbddXAKzle8PbZxfiJ1TlAXv2bFevOdiDJQVwXzuT3uwgXlYdxAYiS3tuJjvhSapQEVFL/wdbILi8MhK2IxSVG7QUe9A0V1vbxYLWKuxaa63RQUADD0qFYf/akUOAKAouQmDj3QcjPIULvUGOHD4fOli8Xt0uaRcfffaOQrv7bgeOOnSV0goDsQfnxyPqpgWuLS80KbFIwvrrZtn4a+/8/b7bxfPNslHmyG3IDE1d32c1pVipqIdaBf2Ycef9gPfJ6iMacEbQi0QX6xZwguXLvtsAI4NuAFPPuydFbVwZSrccOOmj9djrzAWaLZ0EESWXcOMk90bRFf7/WYVkdboXR1kMwj/J069GxpX75oovNB0+S1gs9mwYsUKaDS97wVCnB0smGjyKATYEGyDpVmPO14ZKS5rDLEhqME76LDtYo/CRW5JbdlbyTzFd7TG7YgRPcYA4NRgXvlcGmdFbbis6J/sZbT4m1Tc/upwXP3hQC+PXqsQOGNe3gBQkNIIm9EFU4sWSQWBKItT2g5onaRE9yQpPwjGVi3aTE4U9uMVpqyIY2mCFYXJ/DIW+GXFNNm19fS57wsENhlwy9u8l2puWr2XnQugPrnAis6wiTEWzGBFMI/JCmmyl3JvLywKAENkg7A9E8rh8ihq8I8H9uOl3+9Hyhn1VGqWDu4Ju37ME92hdYnWMP3ypGM5NS40yQLtnm000TWqo1q9PP5Nbb37PXU+YBknnnYucr9JNoHEVJahZOdCyJiz1kcQ3WNgv25xHtbPz0NMGf8+/mGud4q1qVmL5Z8MQHIP9H3uqZwvFW10RQBe/r/puOLjdFzxcTpueXsI7vDwa/UXJm7nJxk2LMiH3qFF2mnle97Q0rlxskvn9vIsjyv0Dno/88QuvCgLnO24WGZf1MF/Z3uq4+4itsTjnNwQ/w6dEKRevSRXsUmc5z4C38/PV10OACcH16ou3zG5DLe8OVj8HlFpwqBjYaIKvr2JCUMvFYEYbVpc/UEmAL421KVfpOEPfx6Nhd+lIlGmPo/rgZMufYmIahMsjfz4SR7IjS+yYMT+SOyYVIrFK1NxxUfpXtmpnUL2rHni0Lnwm9eG4YqP0zFif8cZY53+fZ1d7vZWs0dUKMedpmYt/n7XNPH8vrv0NADgs6uz8Id/bMWr9xyEi3PDrnPirw/vxT9/xwfZF61MxUfXnUS/3CAMP6D82zg3h+f/tFfMIF7+UTrazO17sjPuf240BuSEdmrb88W0zYmK70l5gfj1G0O9tutIsa51AmarFmHVRlFAR6jT5Uj4jTfeiE8//fR8nAvRQ2GeSOxhYrOAzKP3nhdHKbZnKlStHe3S21LhPBl4gp/1G3YoCmN28Sly8oa/LN6KVlkDJFeQzl3XD0/+cSLMrToMPM43aCygxmxa5F7eWYIlSf/sUGhdGrEwJruEGo8XUV9UUXuidWnQP5tXmbNrGScExkvjrKIvOkuTyzzB/z8wX2TRgqOP8es3hgHgrxFTotv10o2tNkHDguUhdfw9zpTUFiu/3GGQblAWZ+7tSnRAUndZBAurn6fJJguFv/O5x/egIdjmuSsAQOdQfwVLSnS+85yf2gC7wQWzVadIN66MbgG03vsRHRNV5iNbR/ZfYmjTQOckwYAnLKB5ZoDSpmn7VOn+z0mvgxtumRKd7FwICZNNJxZKjCxvv79y7z+3oC5EUpoaW7VigAEArvg4A6/fNgtjd8eq7U5cYFZ8lInXfjMTr/1mJp67f4rf1uhZsCoFALBlRjEAYPAxZVDGZm7f10Aji0949gWe/OMErwndQ6MqMXZ3LK77z8Aunytrs3sSXoFa2ZDQrXHD1KJFUYrS1zeq3KwqPvAMtsuRWzp6/r7PrsnGB1fOA8BPoh8ZWY2jo6rVt5fRmwULzLZi27QSfLP8DH6cVQQOHIIbpHe054QQcWFJPROCXSOu9lpekmDFoYuq8NrvD+Gj60/htdtn4lj/G9oVJWmcHDSegup2wi95qQ146pFJePqhSdg1xTs7U46lkwH8IF/2M2qnzXmr2c0tOqlWBPj1EdUmfLpsEbQODseH1eCni4tx91ub8cGtJ/DMU7uwaW4Bvr7iNF58eB8AIKBJh5A6A+795xbc9MkGPPFHZVHmmz9aj388sB8AsOC7FHEs3C4cEFJrwP3Pje542/PM1B+V2V5l8VbM2pCs3MgFDFbJ5pHj1APH027EydSbRIshQp0ujw6dTideeOEFTJs2DXfffTfuu+8+xQ/hf7DU7aZAuyI1pEFQmFma9QqLBxbAjeuByodzyQzB+mLt4lxECL5Z8o5VcXwTmmVF/+QvgBJZAbtBx8MRWxIAl1CBnvmrZ2fwQQhA8lZmamnPAnie7yZSEfB4+qIz5UtZfDPK4nlLnHxB4TtzI///KQXR++Y1jC3hB1vNgQ44hXtSXthJbYKGqU23zCjCG3cdEpXUqgMNFkTvxYMQBlN3sfbPLlPsyy2W5BkpAMS0b18DsQBh8oH50WVl1AEABmTzlkMMcTJNoDcP7C40U7fEd7gNmxAmlFwsdNbXL8hXZF9URknK9KZgO0rjrWJhUVKiE55EC5PaVVGy9lFlcF8d2Ypjw/nMBo2Dw0eXL8BHly8Q11/7QdeDigTxSxl2kA+aF6Y0whpgx5OPqBdOnfizzBZH1ll3yV7XrMg9w25wI7JKOfkwbmcMfv/yFrE+VVfsizpTyPdCE9+OZUhzgAMzNnrXLnHq3ZiwzdtmaO2SPFVv9K+W56Ak0btgOKMp2I5X7j0gTmgE1xnw4DNjcP+fR7cbaOzNgoVJP8cr+t97JpTj0ee248hIfvLgtteGiYWHie4jqsqMZ++frFzIQbTdWb2Unzgytenwzg2zfR4noEkLl8rtOvRQhPdCAC0WB7695DQuWbuyw3O0BrWvlowtDsCYndG48qMMxBUJE3ln4Zle1K9JLIxpauYzzLfMKEJYrQmTt/J9+d/8Z6Nin9VLcrFqKW8zHVZjxNDDkVi+SipEfO0X6/CHP4/GQ0/y9TrktROevX8ylq9a1alzm7kxuUeIQo02LV64R8pUshvcyE3zqEem4WvxqdnZyBl85gPc+L91CrtQwpsuB9GPHDmCUaNGQaPR4OjRozhw4ID4c/DgwfNwikR3w4Jm1ZGtiuCsXF3JfMABwNTCv5zbm8E6q8ITPYxpmxMR0KRDSaJVDDY6ZFXlm4McODlI6hg3yIoHMSsRgC8oMmedLLVZA+jsHBpDbDg5iA/+MmsXVrhCbufCuZRKX8D/JzA6ywBBiZ4rFBSJF9TlJfFNKI7n/w/sBhfiii0YepjvUPRlOxeA94BmQWG3ECBjEw2ANJEjp0EIlGUNqsMTz+4UO+ieXv0AxIGJP9hkMCV6VVQrbnqHTwsOFArg2fUu3PsCn6WTnVkrpQiDHwgCQIiPwKKoRBeC6Hsm8B6pg44rFQSetk7kid55kgo6VlqRx7I6F29OhKlFi9IEq6JosGeh0ezMOrGwaHAdKdEJJUlFgoVFJ0YiOen8fWax6jBhexwm7IwTU7lLEpva25UgzgsRNWYxM+90eh3iSi2q1gpyAc2cNerBSU/l5YYF+aiKVtplHRhTif/efBJ/fmo3QmuNXSqk2xOzU5lgQ41Wk0NUTMvJzqhVLpcNfZ54ZqdY/4hf5cafn9gFwLsgu5y9EyvECY2GUBsu+3wAYjtQ7rMsy96IxarH9E1K64e37zwCgM++++3fRynEGkT3cevbQ8WMatYfderc4FzA/rEVKInn333z1qVg9rpkxXaMphD1duLoiGqfGZl/fPFn0Zq2XWS3idxTn/Hc/VOweu4yPPvgFNz+mmDr9QuTOy/5sj8AYI0wibDsiwEABDtG2fqvr8jBprmFAICvFi5Bjiy7H+Azfb+9/DTu/dtFGHJYmlAYtz0GuWn1aAxRzyD2ZNFK73aqu7ji43RFm7h1RhEMbcoLXtivEbe/PhyXfTbA53FaLA78OKuoV08WXgi6fCtv3rzZ588PP/xwPs6R6GZYJ7EmolXhYdcoC6KnnQ4RP1dE8wpfeZB9wk/KNFt/eEGb2nSYvZ5/aRULgzi7wYXQGilYcHSYFERvCpZm9LI9GnO5tzIAOIQg26XrVmL69s9xeASvwmL+6TsmS16IBpsWDp2kFOZc8FKw9FVYcRymLperrEsTmsXthhyNAAcOLs6NUkGh3p5Kxt9hkzCJRYHQ2TU4NagWOQPqAAC//8to/O6vMgsnlRS940P5+9XTqx8AWJ0Szxd7b4RNtLSZnEg9w7eBAazToQHeu+UYAODjG7Lg0nlfqAnb1e0H5J7obrhFxclcDx9hRUaKu3cWu+ouInwEFeRFxagDqY7RpsUAYTKNZUkA/EQ7ACQIlkNZmbWinUtvLiROnB+mbGmn2KRL+a9T44bGCTSG2JFQ+w5GH/mfWGD9d//8EaOO/xdrFvm2dCCI8wHrkzPLQHnGTcppfpJoq2D3AgBTtiqDl7749vLT4meWuSYvsMk5pQn7jtDZOQQ19LxJzPAak2rgDeCFQTPXJymKtXIu4NBFVRi5L0raULZ7VXSLojj4sWHVKErmx2a/UvEGlnPnSyOgF/qk4w99gvtf/and7QMbe28QHQBme9o8CKybcRmiaPzYo/hy8RIAfNCXuQGwSbdJ+z8V1cL//PVMrJu+DP9dPh83/msQgms7fubZuMWTyphW1eVy9B5jOKfHGGfO2mQsWJ0ifh/nabfWQTHkhAJ1MeCKj3lP/8+vysa8zV9h1vpkfHzZArx58yx8dPkCvHbbDIRXm9BqdsKhdyH1dDAGHQ/Hi7+dijdvnoX/Lee3AYCsgXWIr3kbWek14t+ze1I5LlvroUL3ca6mFq2Yxd4TkIvgAGDjvEKvotJZgihTEfxX+ftMLdoeobDvyZz1iDsnJwfr169HSws/U+52d/A0EL0WSYnegiSZH688SB4vC66zTku1LEXXaFPaDPgqqNfbYIqIE4OlYHlkhaRgOCMEHgGl0iQrs1a0agHgVVyUURfWhhNDa0RF+9AjkXDDjeNDJc8+S5NeoYDX27V+MUlxLmD3JQs2BrToESJ0LOrCJY9Vdv1rw1rhEPy/o8v7bkcyppy/h5uC7Bi3MwYAsHccPzgJaNEjQ65GV7nVVl3CBzM8ldIAxGCysbX3ByhNbTok5fNtok3PT2S1GiXVR21k+0qGS79UVwKw4G1zgAPHh9QgL61BtbMmV/5yrt5fZ+JCohZEv/Mfw2GS3ZekRPeNaJUldMjdcIv34/gd/GApK7MWZUKgsyfaCRDdy6wN7Qw+WX+JNWlapf1FUb8m0ZKtMcSOkkRrl5S5BHEuSD+lbAflwery2GYMORQOt+y+FX2nWZe9E0NnlrkmpynIjqaQzqXah9QZe2TfgIN3cF9n4+QbYLhgmRNSaxA/l8dZEVGpPgm+ctkZ8fM3l/ETEQtXpiCoSfl7EvNlIhkH8Idnx+Clu6Z1+tx9ZRH2FpZ+3d9rHH7N+wO9BF1E9xNXasEdrwwHwCuEOVkthZYAB76fXwCAFyqM2h+NKT8n4IX7LkbmqTC1wylIzj97sZjdqG4pMGJfJEJrjXjxdxcr2h2vLOYOmqTKyGavZY88MRbjd8TC1KKFU+fGwdGV+GpFNmZuTMayLwdg1vfJMNi1WPa5NLa67NN0nB5QjwWrUrHsywGYvSEZV3ySISrWnTo37Ga3z7+nvXOduC2ux2WlyD3PG0JtXtapTMSpZpclR28ne9CO6HIQvbq6GrNmzUJGRgYWLlyI0lJeEXvrrbfi97///Tk/QaL7YZ7odaFtSMuRZi0bgqUgpFyhztRBLbKK0vvHVCiOqfOhPuhtzN6QDEObBhXxUtplmCxtfevMYrXdUBfehqpIKQCWofKyC6o34LbXefWEWwtknghD2ukQHBpVpVCkBDbpRT91wD9sMs4Vkge6FMxVKxjKBkIsCBRSa4De0XdfIGL2SXgrBgoFV+XBsjvf2dzu/nn9easc+USaJyY/KCwKAHPXpgCAOLHVENb+wDbjeKj4OaFIvQMbYJUKi65bnAcAmL4pyauz1mqS2liNyz/a1AtFhIraasTBaDQFSRMfARRE90nGSb7NPDWoFsu/XYXZP32JNhM/upsoeNZunl2IFosDeptG9PElCEZHg3xjsxbggNG7ojs81qAjYT1KEUb0DVhgKFvIyHFrpL54i8WJB58Zi++nXoaZwoRRZUwLRu6PkoIyZ/naXrgqBVd9mAEA0KnZ5snoyZmpnoXqDTLB1fCs/4oiLrvBhcRCXtlfGt+MUXslNbrcquW9Xx2DCy6sXnIGr/7+IABe7NRqVk6wPfnQBGkCQwe8f8txXP5pOrZdtKJT5x1W07uD6KF1RpxMuVGxLMOHmIvofh57dIJom+vWAp8tWYg5a/lsApapyjg2pBqDT78Pq1CT7Y5XhmPVrEvRT8iMkdNmOPuJZ8WEl0BIrQHfLFyKXSOuRmyZUgEd1GhAUJ1yDONV8FSGLcB78vDZJ/ag1eTgC5UKeP79v31jM/59+1EAvFr+b4/sw7Rdn2Hkyf+iLFaKBTzzwERFceezYaCHxWZP4KGnxym+Zw+sAyAVsj48vBIAX89w9cxL+IUq76HARhr/dESXg+j33nsv9Ho9CgoKEBAgKW5XrFiBdevWndOTI3oGYcwfWaP02q6SFRGLlwUm3VpJac58gBs9FBP+MsMV2GTAmF3KFKXAxs6lTebIKsZHVZiRlCe94EJrDGgMsSFMppZcKKjev12WozhOcL0BcuG5vwQnzwVMiV4d2SoqhJMKvAOXrFAesyMIr+l5/pEXEjZwqYpsFVX6x4QgsXzy55fgD4VFAWD6D3x69okhteIzzJQieqGTyWpARFaYccerw8V9c2RWGHLknug56fw2TN0rp8Us9QC1fpLdc6FQ84g9079ekWFFSnTfpJ7hg+LfXH4aP80oxtERfPtgbtYh8wQ/2Cvsx2elpZ0OgU7F2ono2wQ2GRRqSJ1d2YaxDMaBJ8JVB+xybEYXwmr79nubuPBkeCjRf//caMX6TfMKMfxQlNhP+PDm47j4h3ZsjGQMPhzhs35UdUSrmJnhMLRfZCqqoucG0UWrAZU/wWFwoVoQtjRbHKJqvTTOyk9ECDQF27HsU1556tS58eQzO/G2EEQDgHlrUsT6MoyGMLuYRQgATz6zE4eHV8Jg0+CBZ8b4zhAQlkdU99xr2llC6o1Y8nUaAH4iYub36hYvRPejcXN48o9SMcjdk8pxqeAF/u3lp3FwVCXyUutxbEg17vjXJlRHteK4YCfr0rgxdk8MbntzuNdxt0xTF/p1Bs9abAAwek8MbyniI1Mj86Ry4pw7i6z5Fx7Zq7Cb2TOhHDsnlODYkGp8Pzcfn14rFRhm6nKH3g2Nk0O04AFfHN+Ir5efVmS3eeFGh+1AeifU/heaoUciEKHS5jObl6yBdaiI4sWuF+2L8fmOcfQsgX2PpMujmg0bNuD5559HYqLS1y09PR35+fnn7MSInoPOqRFn3eUp8J9emyX6n8eVKGccLYKS0peSz+hHgd5Mj9l7S1M7QXRZYyX3RefA4eexV4oNM1P5Me8qAJi7ph9ccOFftx9THDKoUa+YRTS3UMvHCK01ioGw4iQ+oOOp+v/o8gVIEhQuTImuplLtS7C/vyaiVewkbJ5ThK8vz0FpQsdF3K74b3q76zmX//h3s2f1zIA6zF/Ne5ZHC3Y4bg44lnoDcmNuxen4m3Eo8zrM+EEaqBQkN3gfELIgeoBDLEispnySK9EpiN411ILof3lsjziRBkBh7UIoYe98Zn/FCK82ebWfvuzKCGLaZimgeDr+FiTmySwDhYLVB0ZXICvpZuwbeA3WT10GqKjXBmSHnu9TJQgvWNt2pn8DHFoXFq9Mg7FFGt98u+w03HBjwSpeBFPYr0nh290ex4dX+7QKyMmoE4sKdkR4Vc+dXOqXr1TH2oxKaWhljGTpUBvOv5vL4q1Yt1gZb/h6RQ4iKvi/883fHsHOqXyW/K4RVyGo0YBmD6un6shWvPjbi8XvLp0bc3/+GmOPfowX/rS3wwyByB48MdEV3rlxNk7H34yTKTd2yv6D6D5mbErCQ0+NBQC8+PA+3PnvHxDQxPdR5235Cve8vgUzd3yBU0OUBUHfu/U4rBa7ZCUloyGyc5ZQneWyL3wXqwSAQceUdkHaDjJoo0q826637uaL4C7+JhWjd/NZare9vwkzd3yB677wLeYtTbTiP78+jvdvPo6LTn6Ex57fAYC3ldN4uCN8M3cpnvnDJJ/tgFa4bD0xe8PSrMeRjOuQeUz5PNuZLZgGWL+Qbz81bs5nvIPVMyJ80+UohtVqVSjQGTU1NTAae3d6E+EbFnAwtegw/ADvS+fUubF3LN8Z7J8dAlOz1HHUCwoiX8VX5Nv2djxnIrXtpAcZZGmX8gA5wNuwMMVIUyDfQjMVKsB3IN+54yhsJuUvMHkEzQMoiC7CgcOwQ/z9+uPMIgDKgI6pWYuLZYP4qkg+u0ItwNaXiJDVQZBPkN3+n00oVfE592RwByluplZdj/ToPBuSCgJhatHCZnRh9F7eP75c8Op16N0oi7di37gyHBxVAZ1Tg/oQqWOyZmkeNs4tQJtB+UwHNPPPcHOAHXXtFGaUpyjr/GRS4kLhmUbOsBuUVlmEOp7FihhDjkR4+c0z/3SC8OTvd03D+O2xeO22GTC16XDzv4d4bXNiSA1WLz2Dr6/MQWOIHdd+mOm1zZERVShKbLwQp0wQIvHFgdDbNHDoXSiPbYbGzSmsq+oi2lAZ3YLkgiDRfuHA6Apfh/M+fpEFMaUBCKlTBsDK4psV44P2YCKRnsjAY0JfUei+ODz834uTpf7m0WF8wfrs9Fox80nOQnmhPADDDkYiJZe3IG31GDedGlSDyAqTUmnamdJuQreVFZXv7XDgENjUt+0rexPXvTcIww9EIrosANFlARi/PQ7xRRYk5wYhtNaI6DLv+7LN7MSmOQUK26NzicbJZ5FlHg8TM+Z9MdTDc99mdLU7yad3+B7XLPwuVSyO2WpyiPXOGGyCQc4jf9uGB15WFg1utNjFWl2M6qhm/DCv0Ofvdgq/qqf2bbUuDe7/izIrSp6Ns0awwHFqXKLoVZEN5OYzmOy6X+h34+d0edQ9depUfPDBB+J3juPgcrnwwgsvYMaMGef05Iieg+iLHt6Gu14aKS5nampTmw5TtkrBSKeWfxqDfFibWKw9r1L82ZLhkZ4kt1jwxCCzsTkyvMpr/TChcE5BKj8YzB0gKVW/uiJHnDmVY/SokB3Yw4pcdDcLv0sBAGycxxdfkVcjv+69QYrOo6RE79tBdDaJUBPR6hVIzPZhQQIAi75NAQC4NOrFg1lKvqHNfwK+WpcGAwRfVI2TQ5RHQdqDoypx+erVuHz1atSGtIrKcoBPQ7z2i7V47d6Din1YBk+L2YEGIegeXO/dZsoHhu11NglvOjPZ6Fn0jJDwFURYtDIVIXVGaGXKHlKiE76ILwnEyvmX4IpPeH/nu14eiWk/KDNd3Rrg7nd+xDNP7cbyVasw7cckKfgmUJJoxa6JZRfsvAkC4JV8MULgihWwTzsdotiGCWY+XDEfCYWBaA3ofGCiMLkJu0ZcjbdumuW1rizBu/CeGj25/R16JNLnOs7jMhUn8dc3J6Nedfv40kA8/eAk8bs8oMeKDifn8hMKn1+djVk7v1JmRHZB1xFO1lFENxBVZcb30y7HkYzrcSTjenyyfCEODL4Oe0Zcg/eunYcjGdejNOQ2hHpkrm5YkH/eRCGv/3oWiiNuw9YJV3ZYZFPN/mTsDt81T0qSfbRxbmDWhmQsFDJ8moLsmLqFj0ExQVGzpXN+77sne/cbvr38DH7yZXUjxNujys0+bWt6AotXpiGkRhrDyG2/fppWjPqQNnx2dRbyhXhTQKPUFgY16LB9zFU0udYBXR51v/DCC3j77bexYMEC2Gw2PPDAAxg6dCi2bt2K559//nycI9EDCBeVqa2KlKBnn9gtzlQxbzUAqA/jA0VBKoEfAIqiEL2didviEF0qBc5qIlsxa716gSt5EQ9W7EHOjE384LEpyA64eK8/xlqhwKAnepuykQtq6rmNencw/CDvnZifwk9IjNsZiyQhZZwVzWQwKwdPJWVfg00i7JlQLnrJM3ZMKQEAhYc/I1joUDSE2FSDvjoh0Gv0s+K3rJDixvkF+PMDkxXrfpZ1xA6MqURdmHeK3L6xyvRuZkHUEuBAnWBpoNZZkyvRDX5kkXWhkA/S7/rHCPGzVvBmDvKRSUXwE+fyycb4Igsu/3QAln6dBo2bQ5isroRa4WyC8MWDz4xRFA70ZNUlZ/DEnyYgplg5kWNRUZ4RxPmGZeuxIHqwx/jms2uykN+vARw4jNnNZ6vpOygGCvC2dy0WB679fA0CfASnOnOcnqqWBNoP8BtkAe74IosY5LYG8eMizyB7VmYNrvpfBpZ+lYYF36XghncHoSa8FS/fdwBHh/KipbQzygkOp1AI1uKriJ4PdTpNsBM9FY2bw1/vmYohhyTV9+ERVXj3NskKVnG/dyYDQ4WAJh2u/ChDFKp1BsXzLvxeeZyj03DA//1rE76fm4/BR8Lh1Lmx6lJeXX35ZwPEbQC+HZUHkxmeFi4AX4gUANYsyYXd4EJolUo8pQf7ocvRuDks/SbNe4Wbz7j9fl4Bjg+tERfrndI9oaXgeafochB96NChyMrKwpQpU3DJJZfAarXisssuw4EDB9C/f//zcY5ED4ANlqsjWr06Dx9ffwoAsGhVqldj3BKgPhOo5s3VW9E5Ndgw/XLxe0lCE675cKDqtnajdIGqI1vF6tmMUfulGVmTrPCivk0jdhw9MXh0ooM7Wdi0rxAn2A6UxFvhhhsaNwe3cMk8/czIE51HXlX92cd3K9YdE166noMRAAgX1A91YW0IEYLowbJq7HYdPxPuL0VFGSylcP2CPCz8LgUPPjVGXPfTxVIQ/diwKlFZLifLQ93PPNGdOrdYwDlYxc6lRaZEN/nZNb0QyDOlHnlyHDTC64r5NLZb34JQpA6vn3YZ/vnrWaLCX5462j/bu60gCF+M3huDNbOWIcZHtsN3l5zBqH3ReOnOaYrlA7J79qCW8E88g+jM1o3x6bVZmLH9CwBSn1PjywtYNoZi/dRt00px+7ubFNk9DENrx8P4nujby4iqNHtNBEz+kRcltJkk5WSyqmhD+X7ePbEcwQ1GvHPTHLx37TxEVptRHdGCZ5/YjexBdQCAiEqlQIbZOHRV2BHcQGIlouey9Jv+eONXUvZKdkYd1i7JE79bg2SxmbN01jyWej1evZ23YessUZVmMVAdINiIHB3mbc3UGTbNK8SjL+zwcgO445URijZl+sZEZKXcjGWfKf3aPS1cAL4Qqb5NI9pKqcZThEMPPNHz+xtLv1bGZQ2tWvH/+4c5BeI7CwBaZfG6Jh/xJkJJl4PoBQUFCA4Oxh//+Ed89tlnWLNmDZ555hnExcWhoKDgfJwj0QMIl3kkM4WpRojf/OHln5DfrwFBjQYv374TQ/iAm96joydXqfkDcaUWaAWrisroFoRV8x0spmj0hac1xpjdMaKayqWVGvj+Od5BCIMQNMv0UFOHNPjXtf2lxJbwA/EWiwNfXJWNN+88jKJkviCTp0KnmjzRAfCWN4kFvFp//1ilf2dpIv/STcoP9NovroRfVhZnhUVIHZR79juFau4mP1NNj9sZi4hKE+rDbNg+tRSj9kmTYVWyKvKnBtWKynI5hSmN2DqtSPxulhVkZu1AaJ13Z04+SUlFMLtOiEzdr3VpECqkaLP4BinR2yddsDECgEiPiUf5pC/V6SC6isbNeQXJmR2YWwv84w/78cVV2Yr1W2YUgSAuNKw+RJlQL+a69wZ5Zduy9pCpF92cD/mnjyFDSZJVDBqz5wDw9vr2JKY0oEcHfDlwXuNBtXoboTUmpJyWvObH7ohBQomyD1qc1ITsdGWtqeAGA655XxI1fb9APU5RIyso3hk8/ZcJoqchzxRUCxj/EoYejEBAW9efAQ4cIiv5viKLF9WH25R+3B5kHm8/WP39fOUzfWhEBeyygvcpucEojbNC2zl3F9iN0r5tRt873fnyCJ/regoTt8UpMvTkNfUOjajEjkml4nf5pKXD4MLvXtt8YU6yF9PlIHpqaioqKyu9lldXVyM1tf2CAkTvhQ2Qq6JaRBU555Y6cs89tgcA0C8vWLmjcId5BnjC/SyIDkhF6OwGF4yt3oFwNfaPUdo4cODwzAO8p59N1pCPlKc2C4ttJidMLVpkeqhMwuv879r+EgJa9Ait5QcRd729GY8/x/vKR5Wbve7DmnCyc2E8/DRfBb6wX5O4LDlXGrSoFbVigfeyOKsYCDbYNOKk0pBD/ISPvynRtS4NFqxKAQCsXpKLsbtiVbfLTW2QPM49guJ/kBW7Mdi1MFulNpNzAYEqiohWk9TBkwfeic5x8Y+Ch6KgWmHFW5l3IKVst8917w8CwNu2adzK6M/cNf0AAP/38vALfl6EfzBzYzIu/UJSUjkMUn/qzbsP48urchTbnxxUA4K40CQU8f2ewmTeW1bn1CCxQL2YJ7MzcOiUUaP5nbBEqA3n+w7y58BpaH+M0ZP90Bme9TVaZXWlFn3DxxV+mlGMkfulcZBD71bNcFojU9sCQEy5Bf+4exoShL6pvCaNGkzBqlbTR05gM00MEz2bsFqjavbKueChP489633ji/lJMnkMKaSdvnZaB5mMcsFG5rEwPPDyz4rJyJIEK/724D58cU2Oyt4Seo9aXVHlZlRGq0+uLfo2FYlFPbdgM0Pv0GL+6n6q684MaEBVTItyoey15ClSILzpchDd7XaD47wfyqamJphMFHjyV1gnpyzOKgYWnDo3fvfXkQCA7+flo83gFIOSSbnKxkXu3Qv4l50LI7JaUuLZhSAMS8f0TCFkKZtfXOndSI3aJ6WCckKDJr9eOtlLMeNkGBweM8xhdX3bikSNuGJvZcus771965knel9XogNAbIn3NRt+SBrEFCU1Kaq9ax2cqAwqSbCKKX46pwbxxfzymZv4a26w+VcQHQAWCUWs1i7OQ0CLTszUkVMV1YJ6YRB32ecD8NptM/D5kkUAgLy0Bjz5tFQ4+J+/mil+dmvgFaQElO2q5TwVDfJn/vjEOGicHBwGF3LT6mFuUd6X56sQk78wbXMiPrtkEdbMutRr3d/uvhjv3DAbjz424cKfGOE3PP3gJFz1YYb43ZcCVOvg0GyhFGTiwsMyReWZpSE+6kH1zwmFxsnB5dEFmviz1O8Pr/ShHD+L2uG9oR5F6hlBfCWMd7IG1opZvA89NQZxxRZYg+yKejLZGbWYu847OLR66RnV3xHQrLzgb9w8Ex9ftsBru1F7o7HiwwxJAOUjBmlqIdEC0bPRujRIyQ3ueMMO0Mky6u/++0i8v2Ie5qxXD8x2BmZ/JRcBNVl8T26dGlSjVKoLnxPzA5F+MlSx7en0OrQJk3AsY2fLjCKsWcL7pXvWUZATVcHHTuavTAHAj9e8FPzMD12WhdnTueTLAd4L3erZCXpZllMYxUE6pNOv5Pvuuw/33XcfOI7Do48+Kn6/77778Lvf/Q4rVqzAyJEjz+OpEt2J5PnXjIBmnTi7eeO/hyC2JABNwXb8NL1YTB/K9PCokqfHAFAtOtjbiS+Sgo51Ya1iQ6+zc17XgzXEh0dVwe1hJJ92OkRKWxbaswKZGph5dQF8Q+758omuUvcR7csMORrhteyyz9O9llWTJ7pIfIm3XcsEoYAmAGidHOJlgXZDmxZxQrC8KqpFDCJzLinYywYe/ujfPWVLAoLqDaiIbca+seWqg6za8FbUhfIDwfjiQFzxSQYu3pKIyVviAQD/+fVxsT1YuDoV43bwivaL9qhXr28xyYPo/temnm8iasyYIlz7NYtzYfSwGQqi+hIdMm1zIjJUCtdFVwZg6Tf9VSd/CKKzRFcG4N6/jha/24zSKDjzWBiSBcGGU+dGKGXhEd0As2g5M6AeTg3f8WfWYHLccMNo06Kfir/31pkl4me1IuKemKydG773zwnt1HbdiVigT/iTipKbxJo7xf2sYpbfjzMlu6amYDtG71F6zwPAoYuqUJTY6LVcrm4HgK0zijFzY7JXRmBCcSAOjvbOtlfg5sUhBNHTST0tqbjv/pu3/UhAJ4pxs6LGgfV6/PGJcZi/NuUXnRPL3LEGOsQsZWc7epXCfk0wy90MWDvRrwnP/X4ywmqk9lKepcM+t1qcqI7ix/budoaeLIgeVWVGeLVJFEGq0dOLisqZtjlRrPck4qNbbpRd58qYFlRENZ+/E/MDOv0WOHDgAA4cOAC3240jR46I3w8cOICTJ09ixIgReO+9987jqRLdidzrGJCU0U1BdixcxSswVy/JFRW8FlZJvg9VNh9+KFL8fPCiStFPN7zahMgKWVDWDfHJsxtc+NtD+zD81Id4/M+8CtVo02LKFt5mgDV0pQlSEB2cpFBPPxWGKg8vv7jynp9idKF5/r4p+ODKefhk2UJ8sXgxvptzCaZtTlRs02y2o8XCv2nIzkXykpcTVmcUi73lpzUia2CduM5o0yKi2gS9TQO3BmgK5FWBbk76zIppeQYr/QGDXYu565IBAKuX5qpm2zQG2UU7F/lA+Z+/5lXnLQEOxDa8jenbP0d5jBUfXDUP76+Yhw+vnK/6O+We6MENpIw6G1gGweqludB6pHAHkic6QXQ7SQWBMLbwnaZ3r5mLYQf5SfGMrDAMOs5bhOltGtz0r8Hddo5E3yWpIBCmFi3aTE4UpPABXLVsxoF572PEyQ8VVm2XfJEGANg3Tqo9cya9ocPf2RrQjomwDLm4p6fCgmqMlgAHUs7w45irvl4jBtE9IxbNFgdiWD9VNtb0tHQBgBYhiH7nP/hA4sc3nMLsrV/C4uFdr3EBpwbXeu2v2KYDqxeC6Ck4ZbZRDz09FpHlynZp9J5ofHjFvHZtX2wG/tkZtT8a3NlWIZXBbH/bTE4xU2b8NnULTIAXYQZYhTEje86Ff5evXo0/3zsZQw95C+WGHfBepgZTpx8aXQWAzyZmwX1f9ORizZ6Y2nSirVd8gQXD9kd6byRcT2ZlCfC1/qIqSVDYHp0Oom/evBmbN2/GjTfeiLVr14rfN2/ejPXr1+Ott95Cerq3spPwD5idS5vJiZrwVgQJSvKGkDYsXMkHIdYvyhMLxHDu9lPhAvwwFS7ljDTj+9P0YjFQGFNqQYTMe1vn8bL66yP7UB7XjDfvPoxKobDlTf8eotimOLFJ8d2t4QPpU7bGo8pjpjDQ6n8TFL+UwCYD5q1LwYxNSZi6NQHjVDyrawQVuqFNQ8Ez8F7y8sI0AFAXaoOvelh6mwYaN4c0IbX5wFhBzSMLorN9jX5aBHPRSmlCMbHQW8nv0rlRJSgi5Nk4MWUBimryJ4bW4KX7DyCs1oT5a1MUVlFy2mRFYoJIiX5WTP+Bn0w7MqJK4dEIqPvQEwRxYdG6NBhylB/4nRhag2fvnwwA+G7ZGaxflA8AWPJNGtKze486jPAftC6N2O/JyuADsGpB9LrwNpTFN4uqSIAvSm5q0SqsSjpFJ2NZcSpFOnsaA7JDvZbJi4vGlAWoXs/SeCsGneAn0eTX49NrTnlt2yJkQ17zYSZSBPuYIyOr4NIrO7Ssr5p62rcNhj+KwAj/5HcvjgIA3PvCRdC5tIisUk46jTgQjbnrU5CU7y2+Y5N9bUIQfdYGbwvUsyGZ/S5Osg0ddCwcmnYC+ZyL1SpgC6R1L/5pH17/9UyvfX7zRufq8SjU6W6gKroFpfFWHyfC/9Nfpc3qyYzbyWeR10W04d6/jpJWsOZP+LtaA6QxZXmsFZVRHp7phIIu5yP95z//QXDwL/dYInoXBrtW9PUuTbCKKsqGEBsmbotDWI0R1ZGtqBdUltZASSGpUbGp9Ec/OXlnNSuzFjZhRi/zZJjCHqS9MkDrF+YB4JXQck/lKlbcQpgkfODpMTiUeR3G7o71KnxhoYI3Z4XcD/1czLb7AwM8fN/++Ndt4nXyhPmcz1+doliu5lXrj0p0AJi+KQnmZh0KUhsRVaFuq7R7YhkApRKdAwenRxHid39zDNN2fI5ms7rPrxtuRYqyhQK+Z0W8oIKzGV3iAJoRRJNpBNEjYGrUp57ZhT89vx1R5VKfKrYkAK/dNqObzowggHTB0io7sw4AEFnlHfRlNo31oVLAfPPsovMakIlTqW3T0xi9JxpBHorwPRPKRXVsfagN81SK431y9SnVwqlHR1Tjvpe3iN/dcItZe0GNBmyeuBzX/WcgAHj1Ta3C96gK3wpMlv1CED2didvjkZV0Ex748xgAssk9YYi7QBivXfXfDK99Bx/h73O3EK6ZtinRa5uzIapSGhtZhEB9RWwzfv/8RT73Yf7pLpXQ0Zn0eszf/LXX8pD2bLE8FO2jd0XzNb6E69Ic6Ol/IpGUH9jr4izjBWvQZosD/U+H4tnf80KEULUaM8I1cWl5Oz3CN2TqRXSa5Hx+8iQ3rUFUUdaFtkHn1GCe0BCfTq8HAFRGt4hecy6Vu8zkh0E0eWe1MdgOqxCQiagyKVQUTr3vMPqapXzxi60zipSFh4SGnanYL96SgJhy/vdVe8wUBrT0rsa9p1BDfuheqA1Q7Ab1NOI2wav26v9lKjzqmoLskrec23/tXAB+AmvGRr6jWZTU1O62nnUhXFrvduHkkBr8MKdQdf82o9Ljk5ToZ4fBrhXttspjpawejZOjtoAgegjLP00XA+eHRlchqUDK9Ln57SHQqnU0CeICwdL7szN5JXqESvaYpUkPnV2DVrNTFMkcGV6FOBXrvPHbvf2+u4rGybUbDO4paF0aTP0xQbHs5OBaDBEsGqojWnHr20MVhewBfpyk1kcFgP/dfFLM7LXrXWL/ytyiQ0CLHve9wNdZaAyWguh6mwYuIV0yrMa3peMwFesIguiphNQbxdo0cqvSwAY9LtrL11u66qOBSCwIxAN/HgOLIB7ZN6FCcZyBnrXdzhJ5PIQ9b9mZdRhyxMNmRDYkagpuv2g4s2JlXPZxf7x2z0HfO3DKf0fuj8Ltr3dOuZ6uUgOopxNbJsWn1izNxYQdvDK9zeg9nje0CX2p9hSfBAAKohNdQN5JDKmXlOiA5Ct74CK+0S2Ls2LQMWG2XiVe5pdK9GKZ4oPjC10BfFFFZoshrwydcSJU/MysHLZOL0ZDcBtK49RTiVihjAxZUYvaMKUy2OynVhnnm2qhw62WNtpXkXcWZnzffiofUwqkngnB8dQbsXP4VQCkyQmNkxMHMkY/LCzKYG1hQb/2fU3bVUnIWLs4T3W5Z6EszwEm0XnYBGiNLMuiX14QjDb/vU8JojcRXxKIwxnXY+lXvIf0/rFS8T/PATRBXGhYobkTg2sAqPcjW8wO0SZk7E5eGVge34yN870nym1aH57nzClT9vrnfGwaWWnuNZNLQw97+/QylXh1ZAuGHY7EK3dMV6xvDLWLYyetEGPT2qUs0vGHPoaLcytqx7CxZ0JxIEbui1IcL/N4GMoS+Il0T5GDnIxeVFSQIOTIg+jpWWFicD2u1IJ9Q6/F758fjfhi9ewVzTkKGcrPoV6wscpNa0CyZ8FlN7zsRjrLV1efxq5JZV7LAxp1mPG9t6I+sMkgWhN3hK+Ju55MiKw9W7cwD2k5IeBc6n0nuZWWy5d/KwGAguhEF2CdxKzMOjEAVCekJV68OQGWRj2qBWuRipgWpAtWEGodPJMfBnrDa0yqwcHy2BaxQy2v6C4vPGg3uJByJhh2gwvfzytAaYIPPy4AmSfCxEkMgC9WKMcfr+2FoJop0SmILrL421SM2B+JMbticNnnAxTrHv3TeMV3+UBF4+YQU86rq5hy3dKkF9XT/qpEB4A56/pBZ9egPsyGgcekwdawA8pBYmeD6Bvm58Omd3otbwyyKb4HNVEQ/WzpDSnvBNHX0bg53PXSSGQeD0OiTIn+0h8OYMuMom48M6KvM3YXrxw/PLIK5TFWr3oyAGAzu9Bf8E6vD7V5rZdzYHyl4rtYM0UIJsl9fN0+RvJqdVl6KmqBadanZEIMi9W7j8NEBk5h2CPP9LUG2bFvbLnoh845gV0TpMDavS8o7SOOjqzGmQH10Nk17Vq5zV+T0vEfRBA9EPnknq/imMMOeU9oqdkpnS0BVh2MLXwDVhbbjITCQDj0LuSm1SvVzxogobCLfXPPmK/H94v2RsMuH08J8antU0tQE9YiFSpu59jpvXASTT7ePDGkBnq7RnSX8ITVhNO4OBQnNF6Q8+utUBCd6DRs9i0nvU6c1WoQPNBNbTrM3pAMgC/84NK6xcCEQSVg5o9KVA4cYkq9G+CyeKtoCyBvz3U25eNXHsMrIL6fX+BTiQ5IxQsZzbKZRM7F2xMQXYcF0UmJLpFYFIQN0y/H6jmXiml/AP/83vXKSDz49FhxGcu8YAS06MXCNAAQ2KQXC2Ga/PD5Z4TUGzF1SzwAYJls4oGDUj0W7FGcihUmS84NQnnwb1AachuiywLQEGrDtotLvH6P3FcVAMxk43TWJKgob8RMKoIgegwjDkZh64QrsW/otchOvEkMLr7wyN5uPjOiLxNfEohRe6Ph1gDrFuX7tFHRC+OhkoT27d48setU1EgdiAR9KUp7InJ1Z78zvCKVZduxOjwWFaHAhkUFvFBLplTtfypE/PzdJWfQKgTR3Vpg+epV2DKdn3CbvzYFv359qNcxp2yNR4vZW7gAACs+yEC0j3o3BNHTkVsU+goGT/o5zmvZ3f8Yec7OgQMnTjKWxzWL9U42LMqH1qmUnGec+IUBaw8F+88zSvDz9FJpgRCG2TOuHA/9fRvK45vhE6G99TX50JORCy9tRhcKUhqRcTIUAGDwGI/XhfNjS0uTHolF3gVnCQkKohOdJqmAf5hKEpvEWa36EElNwYK7nItvtdhDq+b1a/bTIFpUpfSCMrTyj1dJvFVUNztkHeHq6FY8f+8ULPmaT09maTXbp5QgL1WygrA0SYHIKZvjcfPbQxS/s0VWeNDYpqOimGcJU7tEkg+yKim50qw1C4areXnK6Zcn7WOx6tEmWL74sxIdgJgW+NwTe8RlNRGtSM3lB3fXvzvQyyrkgxXzsPyTdHx8+UIAvOqSdS5XL8n1+h3ythfw74mJ883NbysH0ld+lIFn/zClm86GIIjOENxgxLN/mIypmxMUk7wE0R2wMdDqpblILArCw0+OxQv3TEVIrRTAODKqCgDQ0IESnTGABYTVRutCV99Sp/7ul6fl93TiZOfKguXNQvD7zbsPw8W5EeTDYoUp8cOq+et8OrNe9HV+6+4j+Oi6U4rtr1y5Ghvm5wMAQhq8MwKnbk4QrUo9mbWxfVtDgujJyOMJasFyAJj8s7I+wfXvDsKY3b+8RoMcJrKsimzFwpUpAIANC/K9/Lg3z/ORYebDwko1/KEy2Whu8mgzNXyB0nbRAJZGPUYciGp/ux5IcL1B4Qrx9wf2IUAQuentyotWGm/FkEMRmPV9kpjFQ6hDQXSi07BOTnVkq9gQy9WQs75PgqFNI6bTmYR0HbVChEY/tRyRq5htJv7vroxuRlC9oKCQPXGlcVbc9O8h+NeNc7D0yzRxeXlcs6IytFyhURHb4lUtmQU0ASDAT6/rhYA80dtH59QgVgias3/jOhikyWfsA5v0aBXsXNSyU/yJ+atToPFQVESXByBTUFWk5IZ47ZOeHYbXb5uJATmh4rKFQhBdrbiopxLdH+tMXCgyT4XhtteHAeAzAV69fUaH9zZBEN3PDf8ZjC8uWYynH57U3adC9HHY+3rb1BK0Gh24528X4cZ3ByOkjg/+6mwc8tIaoHV0Xuhy6RcDOlSc653q/aneZFMWXG8Qi63qHPxAqU2mBl91yRkY7O2HLAJkmY/ywNDLfzgAAIgqkwQyN368HoVJjaq2eicH14hWpZ4MOk5FRYnei7xfO2qf+sRz2ukQpJzhBVCWRj3+es/Ucy7OYwIrm8mJQcfDEVFpQm14G/R2pW2VT+RNQTvt48h9UQDnbSvcEuidaSIKPtWTUAAAMzcmwdTW+8ZaGjeHIFn28+dXZ+Pb5WcAAFaZm4HWzsGtAZ7//RS8dctsBFCGc7tQEJ3oNGE1RtGGhdWqkashA5sMivSgFrNDVAN44q+qSZYqxWwsdEKDVBduQ3CdUkXRFGwXfY1H7RdeZh4vA0ujHnNl/ntZg2rxlz/tUWxjk01SkB/62cOU6GpelgTPv6+fi1vfHIo3b5kFAIgrbt9zk9VFAPh72WZkdi7+fZ9GVwaI14iRmhOMaZv5gjZPP70Lb9x1CO4ORscjhXahOKnJywO9PsQjiO6nbeqF4tHHxuPxP07AR8sXdPepEARBEL2MtJwQBNUb4NC7cKa/pGo0C/0dpmD0tL5rj7E7YyQ/dB/URQh9A4/D9qYgOgcOliZ+jNQsZNe6tG5RXf6/G0/i8T/vUOyTnCuzGnADxcmSDWZduLeS3NSsxVMPTRSPvWZJrqoa93R6vaoSnXMp+7QE0duY9kMi/nLfFKybvkwsKqrG2zfNxq1vDsW/b5hzXrLb5fUaKmJaMH91CgDA1Y6SnHPxE5GMYQeECS1PnabwPb7QgrJYvk3wFYtSpZ2h1Kh9vU+FzmA2zJd+3h8j9/N/R1i1UREJNgtirHWL8i706fVKujWIvnXrVixZsgTx8fHgOA7ffPONuM5ut+PBBx/EsGHDYLFYEB8fjxtuuAElJd7esHKeeOIJcByn+Bk4cOB5/kv6Bhw4sVPmFGxJ6sKUgRx5B6M8rhnp2aFQw19Vk8y2hTVWrMJ7SUITwmuk4CybFWXe5+y6mT2uS2SlSXrZCC+Sl+7fj4ooybfLpZF6zr1xhrSnUBnNK9EjyM7FJ2P2xODZByZj4nbe8zuxqIMgumxSzWLtG4VFGZd83R93/22k+D0/rVG0ZwGAJ57diZ2TSr13lBFaZ0RUOX8/ZmfUKdZ5FibzbDuIrmGwa/F/r45AenbvKxpEEARBdC8cOLEvn51ZJy5nWbljz8IS4flH93asypROQAGz4OwthAsB8yqhLw4A9z83GgDw46wibFhUoNh+1oYkaeJA+NsD630Hy0oTrfjNP4fjz3+YDABYsyQXQ45EKIoUA8CpzFrUhLV67W9q0ZJdJtGr4cDh5n8NkYR7PhhxMArPPjAZMzadH/uiBJkAq7Bfo1islwmtFLBiyhww6KhUq0j06/Z8JIXIZkmSFWWCx3lTiB1qMNvdzpKe1XvHByzr5qqPMvHwU3w9szaP660RZjFWL83tUORFdHMQ3Wq1YsSIEXj99de91jU3N2P//v149NFHsX//fnz11Vc4deoUli5d2uFxhwwZgtLSUvHn559/Ph+n3ydhQfQ2Qf3M1LsMeYX10nir5Ofngb8G0ZiK2dzMB7SYbU1ZXLNC4cw8/ErjhSC6cN2cWheWf5Iubse5OQSwivSctO+cn76ETagw7VbMIlLqzdnghluc0CAbh85jseqhk6XNNgUqA7vy9sDSpEOrYD3kj4WF1ciQdbiyM2oRU6a0Yjo9oAMPPkhtw+3vblIs97RzsVjp2ScIgiCI7oJZ2GVn1orLWObd6D0xeO22GXjoybGYv6qfz2Po26RO/YkhNaqWmADatTEwW3W9TjUZW8b3vUVlPYDKqBZfm8NucCGgWSke8BUsAwCHwY1Vi8+IYoZdE8swf/PXmLJF6QFtDbajuJ934VfP/htBEGdHf5nAMie9DsMORQJQZtZ7wQFpudJ+P8wpQGiNof1IpmeA/RfGhXtjUVFGoFBrojHIhslb4xFSa1BYBwNAm9EBY6sWuf0bcHxITXecZq+iW4PoCxYswDPPPINly5Z5rQsJCcH333+PK6+8EpmZmZgwYQJee+017Nu3DwUFBSpHk9DpdIiNjRV/IiMjz9ef0OdghWpahXQ7zyC63L+7NN6K1DPeQXStnWs3jag3w/y0ma8Xm1UtjbeK6wIbpGBXRSw/S5qcH4SgegNsRpeikIPN4ESLrJG75S2+qGhZfDM2zSmEQ+NUvCRIiX52NAbbxJdJbAfFMgklDwkz2gCwca6ybU7LCRE7LTq7pk8p0QFZe+gG6sNsqIxuwV9/N1Vcn+OhLldj3C5evZaf2oDyGCld2bOwqNwPlCAIgiCIC8vgo7zFwA5ZlhkT0OSk1+OKTzJw798uwvvXzMfUzQmqx7AbpUBSi6Wdwm7tDKPG7ImG3tG7+lkxpVLfm1nY/DSj2Of2NRGtYhF3L3wEyx77yw4kFAdi0k9xcGuAg6Mr8cn1p3DJ52nqO8igLFWCODfIg9EnBtcgtjSAj410EJW0NPLjHM4FtJlcqrZN7eLRZrLadZ3B0KZBUn7vyu6RE9jIOyM0Bdqhd2hxyVf9vbZpM7tw0R4+S2FXB5nSRC/zRK+vrwfHcQgNDW13u+zsbMTHxyMtLQ3XXntth0H3trY2NDQ0KH4IdeKL+SB6YzAfRG8JcMAaIM38p3so0cNV/KUNHfj79WYiqvlOls7J/41skqE0vknsgMkLV1YL6zVuDrM3JAMAVl+SK663G1yKAjcX7YkWG7g1S3OxfYqykTP7udf0+aI0jp/MCKk1UCGNLnLnKyNx1YcZAIDVS3IV68ytOtHSqM3kFIvg9pkgOrO3EjpuWZm1uP4/g3Ddf3iLsayBteo7yvj9X0aLnz+6/pT4mZToBEEQBNFzmLeWV5jvmFKKmnC+fz97Pb9s7WJl/+jfN8zB+yvmnZtf7BE0Hnqo94nHImSWl8zyszjRWxHOKI1vxgN/HgMA4DxcIDgX8P6Kefh59JWK4HxxchOyMmoxek80LI06scjrio8zsXHS5Rizw7flTkJh+/aFBEF0jujyAJit/Djw28tOY9rOzxFV0fEkVauJn1RU1WF2pDL3XM8EXh4xKY1TfXYy9XQItK7eG78KEoLojcH8xMNTD0/Cb14b5rWdVvj75ZZkhDq95m5obW3Fgw8+iKuvvhrBwcE+txs/fjzee+89rFu3Dm+88QZyc3MxdepUNDY2+tznueeeQ0hIiPiTlHR+PKD8AaZEr4xqES0Z5Gr0tNMhYmemNN6KoYeFjpys8dLb/TeAFlnJvwRqw9qQeSJMZtvSLPqls5QaAKiOkFIVF6koKlrMDpQkSJ3IithmPP6nCQCA9Qvy8OWKbMX2pEQ/O0qFaxxXQp3krqJxc7jqf5kAgH3jKrzWBwsVwZstDlTE8JMVYTV9o3hrYJMB8UWSPVB2Zh04cLj2g0EAgF0TytBmaKcUPHiv7oAm/rn+y2NSUWF5uwBIFlIEQRAEQVx4UnJDMPhIOJw6N76fnw8AmCYozo8Nq4ZTIykfQ+qNmL82BWFVvFctCyr5pD3RpEfc56K97Xse90RSZJnLBsHSxlMsIKc0vgn9CoIx/EAk3FogtNqIlBw+PuDWAmlnQpCeHYbRHl70/7zrIN7+zRFYgxxikdfDIysx7GgkJuyM9fn7BmSr25MSBNE1OHBIO80/T60BTpwaXIvcATIBq4+AuFgbSi3OzfGTZ9M2Jarv7HHMkDp+bOqQWciYrTq4tOq/PPNE7/VDB4BAobhqUxAvfDW36vCrN72D6GziMiujY5FXX6dXBNHtdjuuvPJKuN1uvPHGG+1uu2DBAlxxxRUYPnw45s2bhzVr1qCurg6fffaZz30efvhh1NfXiz+FhYXn+k/wG5gnepnMnkQeRDfatEgW0l1azU60mr1TEf3ZD5kp9StimpFxIlRcXhZnFVM6DTbp75dfu5kbvSdvrIF2nJKpVUvjrRi7KwaRFWbUh9nwyfVZiu1NpEQ/KyQ/dLJyORsyT/LFXoqTmmC1KD0pmc1ITXgrCvrxk5nyAsT+jrwQTZbgkzpyfxRiSwLQFGzHT9N9pyuLqHQYs2QqAY2D69UKCYIgCILwBxZ9xwti1izOA8CLjzRODk6dG1UqHt+sdkqLpaMJdQ0WfpvSqXMYfCyi8yfcQ5i/RvKJbxb6kS1m39ekIqYFDq0LC4XrXRfRhhfumQqtUKfn22WnAQAjDipV+R/flIU2i3JG4i+P7UVxQlO7Ag9m1UMQxC9n2KF2ajZwgEbFyerIRdXtHjO8xoRn75+svtJjiJR5Itxrk5YA3/ZZmad6dxA9iAXRZbXLEgsDYfawAs3tz09mkBK9Y3r8qJsF0PPz8/H999+3q0JXIzQ0FBkZGcjJyfG5jdFoRHBwsOKHUEcMosdJQfTqSGWncMweadb/+BChweOkdDuTHwfRoyrM0Dr4znJ8iaRALUmwKmxcGNWRUhDdYtXjjleGQ+PkEFHBK1PcGuDkQKm4Q2m8FVqXBre/NlxMQ5RDSvSz40x/vsBjb/Y7607Ca0yIqOTvb6YUqIxsQWOQTZw0yhpYC5fWjZBaQ6fS9vwFuSKMXRuNm8PCVfzAz9MCRw2tQ/mqrg1rRVW01O7Ki7sSBEEQBNE9TPuBV0IeGlUJgLd3ZEUpSxKsXtsv+taHr7cHNqNLWWfKh1pTZ9MgJbf3jWNTckOQWMBng4rBc19dGzfg0rpRGd2CKz/OEBc/++RuUeH6wS3H4eLcYmAsqtysuGYDj4YhLVu6Tp9dfQoLVqaI3+X1qwAgtM54ln8ZQRCeMDEVJ5/Pkn0eeNw7yN0RliY9vl1+2mu5xmMuTmfnMHNjIpLyA2FqlsWkBDU7y/6VM2pf78vukSPauQRJQjeNm8MAWZFXAGKba7XY0Wz2XaiZ6OFBdBZAz87OxsaNGxER0fVZ4KamJpw+fRpxcXHn4Qz7HlIQvRnhQgqiPBAMKG1JnpPZDxgEG5cAP/bu1bo0iC7nO8thNVKgUD7pYJPZN1R5TEA88aeJKA27DUFNUmetJFHqdLMO+N0vjURJ+G14/JEJiv3NLRREPxvYjGtGL59p7k7YtcvOrEVjkA3Dcj7A+EMfg3Pxb+QmoY5CelYYuPYqYvkZC79LET/LPdAXCMvXL8qDQ9t+cRuNx+qc9DrFd6PNfycmCYIgCKK3wLLPShOsaAziVX/MCpNlPcq58d3Bon1JR7DjeRJSaxA/D8gOEesy9Ta+mb+U/9DJ0y9JaEJCcSC+XrAEAF8oNKGID8RXxLbg9d8eRLMQRF/xUQbKQ36DoQf5WMLJobU4k94g2uj887eHceNn6wHw13PYAWXMYa2QWUAQxC8nXSguOuhYOJ77Pa8e18sEQVO2xre7f3yBxWuZzq7Bd5ec8Vqu8YgFJ+UH4S+P7cWIA1HIj/0Vhh+QslXcGv44iv2dwJQt6oWgewsWwUqYeaIzfGWGNwXZ0RRIQfT26Na3bFNTEw4ePIiDBw8CAHJzc3Hw4EEUFBTAbrdj+fLl2Lt3L/73v//B6XSirKwMZWVlsNmkG2DWrFl47bXXxO/3338/tmzZgry8PGzfvh3Lli2DVqvF1VdffaH/PL8kutwMzsUXvAyp5wO95YLPMWP6JsmWpFUlPVHuCe6PsIkGuUdxm8kpesE3BNvEdWVxzd4HAMSCRAAUT+mZAfVwy6QURclKr38zKdHPCgqi/3JYhygroxYnB9XAreEn2I6MqlJsN26n78JN/siwQ5FIEDp75XHNaAjmPT4nbotDWI0R1ZGt2DWxTLFPs9mOH2YXiH7pelmHzqF1oTxW2W6QjRNBEARBdD+hdUZe9Qwp+4xZPZbFewfRTW063P7q8E4de+P8AukLB8SW8KKdkBopiD5/VcpZnHXPILEoUCz056keZRjaNKJaskyYlBi/IxamFkFM4JbUrW/deUS0EWQ1jx5/VBIfcS7JRqch1CaOBe7960WwBimtHah4O0GcO5iN1en0eozfztcicOik+Makn4SgtSx7JKzaiKR8/jm++r+ZWPplGkbulWxhclPrcWKolL3P9nV4GAGwQ26aU4iPrz2JEfuV1jINYcpAc1iNqdeLlYKE+mSegfF0Ie7BeYi19DYNoivJ4rY9ujWIvnfvXowaNQqjRo0CANx3330YNWoUHnvsMRQXF2PlypUoKirCyJEjERcXJ/5s375dPMbp06dRVSUFaYqKinD11VcjMzMTV155JSIiIrBz505ERbXjvUR0Gr1DKyqt2ayWZ3qipVmP4DqDYpnWzsGh45/QvhJEB5SNEvv7ayJakXImWPjs7Y9o1znREKpswDUO/lh1YW2olHkqFntcewqmdR2b3oncNN7OhQWCia7D1FfZmXWi8keNRSvTLtQp9Qg4cFgs+5s3zuEHwXqHFnPX8h6gm+YWKPb5w8s/4eqv1uLZx3fz28qqx++cVOqV/UMZKARBEATRM8g4yfeHjg7jx6dMiV6iEkQHgD8+NR5B9QbVdYBkLSLPTAWkPquVpei7gTs6GZDviXDg0C+Pt1V0+7CrkfuWs/Gn1qXBx5ctBMCLjZZ8w/e5KmNbsG5hHgDpWl28JRH/un4O/ztUoiAzNibijtdGoMlD9W+m8RVBnDOS84JgbNUKIkMNOBdfEJjRZrLzft2yxOXQWqNol2UzuvDOzXMweo9ks+L2fEQ5KO1aBOrCW5GUH4gWiwP3vLEFH19/UlynZpXrD1avzM7Fs13LENpFQ5vyOt3078EX5Lx6M90aRJ8+fTrcbrfXz3vvvYeUlBTVdW63G9OnTxePkZeXhyeeeEL8/sknn6CkpARtbW0oKirCJ598gv79+1/4P86PiRM6g8yepUwlPfGKT9IV3+OLLGIVdDYb5q+wznJVVAuS8yW/PVZktTnQgQGneM8+a5ADrUZlwLEu1Dtd09CmFRtxebEHz2sfVe2d3kS0T25aA5w6NwIb9IoJEKJrsBdxdmadomCuJ3KP8L7CHa+OED/LC4kOPcynEDKlFOOLq7IBAG/efRiAcqC3emkuqj2urzzrhSAIgiCI7mPKT7wVwYYF+QCAyEpeme45AS7n4s2+7QJmr01SXc6OVx/CjxuC6w0IbfBdHLM3wDJCvQJiAmE1kt2lfAzEFJWF/RpxzwsXSTsI/af9YypEwcz81f1E/3U5/XKD8MiT4wAAzWbl2MxEYgWCOGdoXRqk5fCxkLy0Rhg96uV9s/yMl193VVQLJuzg7Zm/n1+AT645hZ2TlZm8ngTLY07CxFxduA1PPTQJc9f0Q3RZABwGt+jH7tR5z96l5fS+GhOeMAGr3BMdABIL1ScIbnl7yHk/p95O7zRNI7qVWCHQyAntTKmKsoJVMdfZ+Bk9eTGcED8vzsLSNksTrBh8VCqMURLbJCpK5UV/PC1dGkJ5uwezrLCFWwNkCsoWVqwI4F8ocuLKvTuFRPtkZ/I+1QOyQ/uUV/e5hlU6z02rR65QqJXBgrxTNydA4+571ziu1IJBx/jrc3KwlGrIJm3U2lA5Ltmbeu3iPFRFKtsMSjMmCIIgiJ7Bgu/42lBbZxTDoXUhsooPbLcnMLjz5RE+15XGK9/5Zivfp2IT6g4DPyBj/YzeTGJh++OYgSekv1Hed4qsMiGiygS3hlfmX/bpAHGdsUWLvzy2B0vXrQTAZwKunn2p17H75QZj+CE+c73VrPSTMbX2bjsHguhpsOyQ7Ixa6BzKkOT+MRVeft1WiwNz1vWD1sHh5JAa/O7NH3FseHW7v0MrO67WwYlt56AT4fjwqvli5o7B5jskyuos9GaYgLUhpE2xnMWs2ox8e8fqHW6dUQyifSiITnSZeCHwYzPw03ZqASC2jbmFD+4MPC55TQf6ecBHXkDoscck772dU0vF4qKRVZLPVGl8k2J/pigJrzFiyGG+s+jUuTD9B16JIi9u0xCiVK3HUhC9y2SRH/o5Ia7UgswTYXDq3Pj0mixx+YPPjMGnSxfi8T9OwH+um9uNZ9i9sM5iYbL0vEuFmjsKokvKiNIEKz6/JluxPrDRv9tUgiAIgugtZJ4Mg7lZhzaTE/mpDWLfvzrS28KRMXpfjJcvLaM4UZmtlixYnpQzEY6gTZi5QV2x3puIL/Y9jnn6wUmYvzpF/C4ff3LgRKuHtYtzcfc/RorrXFq+D1UhqycTW2bBB1fOw4j9UlFBeaavzegRRCclOkGcU5gvelZmnTTOEdrAmvBWZAkiN4ZL58au8aXQOH2IsVQsoNizD/DWlyw+VRJvxZbpRXjvlmMApJiWGpHVvd8bPKaM/xvKY5sVtfUiK818IVUhItxs4TNw1izJu9Cn2OugIDrRZeKFGTlW4bciphlOjbLxYWr1NhP/MDLrF8D/VZNiYCzeirTTIZj0E596dGR4NSIENYrc0sbTI7FeUKKH1pnwmFAAx6F3ix29PePLUB5jhRtuWD0KRMRTEL3L5Anpnf2zQzrYkuiIeat5j++8tAYAwH3PX4T7XhiN8bvj8H+vjhA92foiY3bxBVWrI1rF9lIKojfDxfkwAAXg0CvbV8/Js758XQmCIAiiJ6Fxc2KfMiujTuz7t6dEB4AAqxSonSiMHQCgJlKpHmSZqZ7JkyMO9/76X0yIpMZtbwwTlZMAUJikFCGxAPtP00ow+HiEKDCwywJkVos0bpq3LgWTfuatd+DmRQpFwoSFXe+pRKcgOkGcS5i4KGtgLVpN/POmFR47u8GFoyMElblsCHT7fzbBbvQR8FaJrcvjJIENBjE+VRpvxR3/3oT8/sIEZTsR0Yjq3m2RBUhBdJvRpbAE1bg5cV1wvUHMwNk2tQS1Ye2/r/o6FEQnugzrGBYmN0Lr4ODUuVEZ7WErInSCbEJDJ0/Tsfh5YVH5LKcbbkwSvBFLEq2ilY28nc9PaVDsXy+k2oTUGxQTDvvHVmDU3mi4NcC6RfloCLEpvLs4FxBTSZ7eXYVNYiS0o34hOsfQI5GK7xFV5m46k57HQiG926Vz4+ov1+D6T9Zh67QicC4+SM6smdweUgo33F7V1D0J94MOHkEQBEH4C1Kx9VqEV3fsiQ4A4VXSu3zH1FIs+YrvNzQHKv25NyzMl77I4kksKNWbiSsRVJ8+4mRxJVJfvTC5Ec1mOzbNKcA1X6wRg0FHRlZh/MGP1YSpyEmvU3xnXupsYMYUmJ7eyKYWsnMhiHMJe/b2j62AS3jexKfOh9jcsy3siCaZB3hUpUmMT61blIvqqM4FiSOqev8Yy2DXIqqcfw+VJijFm0zQFV/E/zt/VT98uGIeZTl3AAXRiS7DPKpy0usQXcY/kCUeD2RorVFR7E4rS70J8PMieGyWs8XiQEOITawc7dK64dTxvcKmILtYRCNrkDJdqV4oLBpSZ1SkF61dnIdFK/kO9ZoluV4K9pB6I/QO6uR1FfYyiaWior8YzwFcQgfeln2JxKJA6Nv4V+6WWcXYsDAf97y5BdHl/KCPpSWzVDpGU5BdoUQPrZXVlBB6mzRZQRAEQRA9hyFH+NpQOydLVo51YW1waH3bBmjdymG5WA9FHlByK/262fhK6+D8wrs3oYi3qhETnIV+zp8eGw8AiC2VWStogNPp9bjmy7XYNLcQb9x1SFyVl9YAa5C3ACHbwyJirJAlyNg1sRQuzq2oRQMAAWTnQhDnlP45IV7WLC61uG1nSmn5TuYViSkLQJyQybJxXmEnDsrDxmm9HV91uNjykHp+fDkgKwwzNyZTTKkDKIhOdJmU3GDo7Bo0BzpEdYWnpy8HTtHR0bikFtDf7VzMrTox0FUaZ1X4+1UJKpTqyBaxU33Ko0MnV6LLPfl2TirFhO2xAICfLy5RFCgEAAvNGJ4VpcK9G09B9F9M/5xQxfeLtyR0z4n0QDhwGHo4wms5U06x+7DKwzP11EBl+1AXxrcPsUUBYscyupKC6ARBEATRU5i3hre32zS3EHO2fiH6nbdn6eL0CLDvH13hvZHw3h+9ixfosFrtobVGcJ2KNvVsEgsDYW7WwcVi1hzwz5tnioVXDXYtIiolZajcN7koWWnvokZWRp3ie0ZWGB59dLz4PTujDicH1XgF7sgTnSDOLaY2HZLzg8TvWoeP9qszzZqwTWSZb9V4aK0Jqy45AwBoCeikot0FpOX4h92rWLPPRxCdiTs9JxoJdSiITnQZvUOLIUf4gpdaITiuVlw0zkdQ0t/tXACIM52lCVYxdQiQ/M4roltEX7/Cfh6FRYVtguuNsAmefAFWHdwa4MiIKgw4GQqH3oX3bz2u2C+IguhdpjHIJipVSIn+yzHatJi+iS/sdPUHmX4/YdZVMk+Gey0Lquf9zFlGxI+zihTrj4yoUj3WFZ9kiJ/lA0qCIAiCILqXjKwwMfhSmtgsZufuHVcOAF61pADAIbcQcQOlSVbobdJQXSPoai7aE40pW3irSLdQkM8ffHsBpZ88+3vzUxugcUuRNLk4qaCfVHTVpXHj3hcugrFVC7NVGfRmkw57xvPXv9lsR0NwG5waF255awhMVj6AdGpwLXZOKvU6L/JEJ4hzjzyD2TM+pLF3fVKQCZPUaAyxIXeAZKFraO04DJpYEIiAFv8YyyYV8BMWean1iuUsXseKu8oLLBO+oSA6cVbMX83bijBVZEmC9+y/PIgu6/v4vZ0LIHnCl8ZZEVxvgLGZ75yxAhdl8VaknuY7iY0hNtSES8qUeqFoYGidUSyGw/y4Hv7bNuQMrAMA7Jii7OTJi5USnaMokb9vg+sMsDT7x0uyu/n4soXYP+ha/OOuad19Kj2ODBW/UoOdfw2Xxllx4KIKPPDST4r1+8d4K9F0dg2u+3Cg+D203j8GzwRBEAThLzA7R0DKyF2zJBf7xpSjf8l/8Oo9BxXbB8qDSMK4SV4Uc8F3Kdgz9Bp8N/cSNAoCEDa+Cqvxn34A85M3tPFjp2PDqxXr5ZnOZTIRl1PrxkPPjEVOws04nXAzXv3NDHEdC7Zvv7gEb/3fYQzP+i/Si95DfN07+PCWE5izPlnc9uG/b/M6J/JEJ4hzTwarSQBv8aVL2wmPFo+5SHkGvyeerglyy1wAeO3WGV7+55lZYfAX2Bg02yMbhynUW828Oj8vtQFtBt/XkeChIDpxVkzcxtuKsIJ3uWkNXtvElkidHKesIQyuN3pt628wVXNZvBUcODFdifkYlsRbMWq/1LnePEvy5qqIaQbAB87bhJdBdKlyZlVn58TUUEYwBdG7zNYZvOp3yFFvmw3i7NC4OSQUB/pFWvG5Jl2lM8YG1mXxVnx83Slxeb/cYADAV1fkeO0z7FAkms1SKiIrWEwQBEEQRM/ggT+PFYu1NQXz46XDI6uwdP1KtAQ48MxTuxTbv3bbTCTlB2LO2mSvYwHAsWHVSC4Igs6pQS2zhWFB9Gr/6QewYA/Ldj4wugKVMqs7ebBNXh+qIcSGnRNL4eYArUuDBatSxHWVsdL+Tz6zE42CYAkAHvvLDkzYHtfuOZESnSDOPfKJxslb4xFcL4tlaOCzwLBiGxll8c0+N60VhJ+e+5qFLJScgXUYdiBSsUn6Kf8Jog8Qahp6Ks2ZM8Le8RWwNOrh0rpxpn89iPahIDpxVrDq6I1BfCdEzT9JXuzOoZNawUg/qHLcEcxfu1hQ6GeeVDbCZfFWRefum8ukQBmbKY0rtsAuFBQMbVB2jh16NzzqD1EQ/SxYvyAfALDwu9RuPhOiL5Bx0rszxtLnCpOasGZJLgDgk2ULxfoHrKiozi498PHFFoWfX0g9PfsEQRAE0ZNILgjCgcHXYd7qfuKyU4NqFcXC5Yw8EIW9w67F7/42SnV9Xv9GFCbxiuriJKWqMtCPLB1Z4MoayPdzipOsGHf4IzFrl41BAaW6tDTBikvWr8Tdb20GAAQ1GlTt7pw6b4XrRzfwIgadDwsJMynRCeKcM31Tkvh5wo447B16jWK96Hrl0WR6FiRlNIZ4FxNmMLtcjcwOPaTWgL/9ls+cXrMkF4UyeyhAaTfT22Gq/4J+jWgKlCYR5ZOSzRb++uV4qNUJbyiITpwVLJXObuRbtTP9G2DXKVM/Qpk60g1YLVKjJg+u+yspgor0zAB+Ji/DQ4FaF9aGsBqjqNb/cWYxms38NSoVZlHjSi2wCek0epsW/71iPmZsTMRN/xqMzBNhyDwRBmOL9AiTnUvXcMON48P4FNGJ29pXoBDEuaBfXhCuf3eQYlDH0gm3X1yCypgWBNcZMHlrvJdH/+2vDhM/x5Za0CRrU/tCdg9BEARB9EYWCUINzwxSXwGa0XtiMPSQeobkmiW5qA1rxb6x5YrlnoXdezNq16U50IG1i/IAAHGyTOeClEavbX+YLWX3frR8oeixDgChNer9JRaMd+jdMLR4h0dIiU4Q5x5Lsx5/uW8Kln0+AAtWpSDEYzzDCgyzrF1xuafVSyecX+rD+MBxeLUUhwqvMWHO+mTobRpkDazD6QylAjvDj5ToURVmpJ4OhkvrVrSRyflBuOZ93iKUCTSLEzsu0tzXoSA6cVaY2nSib5SxWQuH3uXVkWHefpxbqkavcXB+pZbwBVNRZAkpM/J0IEMb/9iVJFgx5AjfSbaZndgxpRR2nROV0XwQPbbEInohGto0mLO+Hz65bBGev28qto6/ElvGXwGH7CUS2AcKtp5LqiJbURveBs4FRQebIM4XHDi8eM/FeOHeqeKyo8OVhUPnrE+Gwa5FYmGgYnmbSZqkTCwMRFWUlJpMSnSCIAiC6JnMXdsPWgfnlUHaLMsok6Nxc1g151LVdd/PK8CWGUVeaurUM/7Tj007rf63/DS9GAAQL1Oi13laNADQyVSqIw9EYfvoq/DfK+YDAFyCtJVZGzCqo1oRXskH8Gxm70wBcx+o50UQ3cHN/xqCN2+dBYPdd7aHImiuFjDvyEFUeKQNbRqF73lElRnBDUZc/GOCuCy4ThpTpXu0E70ZDpyYeb9pTqFi+T/unoa/3DdFXFYab/Xan1BCQXTirGFKyUihInyxR3HRACsf1HVzEL37LFZdn/BKZo1uVXQLasNaFQUFjUKhnJz0OsUM58lBNSiPbYZbA+htGkRWmUUlutqLpTKqBU6D9CYJaqRAWldgFkSJBUF+U3mb6B3MWdcPQQ38PceUEQxjqxY14a1Y+k1/DD4SLi6vDWvD7a8Ox1UfZmL5J+liMS2dXQO9g9KMCYIgCKInElZrwoDsUK/lzBJTDXOrDv++bg5+9cYQxfKjw6twYkiN1/ZpOf4TRDfYtXj9VzO9lpfH8v2elDN8tq8v9alNxS5nzO4YAEBDqB03/HsQ3rh1Jp55YBKefHgijK18H2r03hjV42mcHPR2CpkQxIXg8UcmeC/kID7vnqr0zsCy9WNLLIiUOSKECzGshSslW9drPxiIpV+m4ZkHJiGs1r8siJm9cHmcd5CctZEAUBJPSvSOoDcCcdYwDyWzECz3LOYgevhyQEU0r5oM7COBXotVLxYTys6oQ//sUHEW1GrhlSc5GXXIPCEF0bMy68SZv9jSAGjcnGj1oLd5P6qehSEspETvEodGVQLw9qsniPON0abFe1fNU1330Y2n0BBsQ0idQSxEDPDtxZN/nIiX75yO6MoAlMfy7a2pjdRRBEEQBNGTUbMoaQqyw92OD8HilWm45oNB/Bdhs9qINhxXCaLHlVm8lvVmln+WjvufG61YVhbH93uSCoJ4ZbiPWJo1yA6HVhlID6s1IbKCD55d8+FADD8UhV+/OQy3vz4csaX8tRu1L9rrWAAvbugLAjCC6AmM2cMHcz3tr9gjyGpJdYTc8jasls8yiSu1IKJarkTnP89bkwKdXQONk8Otbw3FOzfPwa/fHAZ/g00asPoScvpnh4ixqsJkb5ssQgkF0Ymzpr+gemBtmeesVXOg5NnLHtaQur7j3ZuexSxdamFu1SEpn08/ZClJ2Zm1mLY5Udx+zZIz+PdtxwBA7NDZBSW60aZUmrrhxj2v/6hYRp7onScroxZPPLsTADBzY1IHWxPEuWf8zliFimr694m44+XhuPOlEQhuMMDNAfc/N1qcaDs4uhKXrP0W9766BdXhLagU7FwCWiiIThAEQRA9mfQsb8GGS+v2aenCYEXE5RYEP84q9NouqsL/6k15TjwwJbrGzXVow9gQ4q3yZ1nBJwfV4LlHd2PNIr6YO/NYTzsdgqcemoir389U7GcmP3SCuGCwWJHP7I9OzGdp7Zyize2XFwQAiKw0I7xGFkQXgspRVWb874r5+OCqeUgqDDrLM+/5sLqE1ZHeQfSAFj2iy/m2sDiJlOgdQW8F4qxhPt/Mq7fMwz+pMUgKojM7l4jqPhREPxWKLTOLRMX44OMRKEyVGqWszDrElwQioSAQxclNaAi14+srcwAAccV8EL1NLCyqfJHkpNehIFU5S2ixkhK9s7xx92Hx84JVKd13IkSfRe/QIrBJj6YgO5Z/PACv/2aW1zaXf56OJd+kYcjpD9AQasPOyWXYObkMTYE2scp8oJUmzwiCIAiiJ+MZENY4Obi0bjQF2WBp9t1/bzUJQfRqExw6N+rD2mAz8nLBpPxAFPZrgqFN45dK6REHoxTfrRYHXJwbGjeHAdmhODqi2ue+9aFtimAZAAw8Ho7tU0vxyF+3oTmQv66FEb9Ccn4wdk4uw9Fh1Xj0ifFYvfgMPr7xlLifqYUs8wjiQsHqPDl0nVOcq2Fs0YJzS21iUAMffwqvNnl5ojOm/+D/ojqmRK+O8A6iA0B6dggq4ppRHdkKF3f2178vQEp04qxhM/r1wmx/aZzSzqUxWFIBsA5fSq7/ePZ1BPM7Z97bs9cnK9ZnZ9TBDTeMbd6PYZyoRBcKi3oo0U8NqvXahzp5nefUID4V9jevDVMUKCKICwlTUs1fneJzG4Ndi2/nL1V0+r5bdgY14XwQPbih70xMEgRBEERvhI0JguoN2DnyKgQ28oHzd24/2u5+zNbN1KLD4KNSnZSAJh1ii3jVYEKBf/ZjU8+E4P9eGi4t4PjsXgBIKGr/b65XUaLPXdcPAMQAOgBcunYlZn7PZwW/dt9BbJtSgsIkpUiJ1bIiCOL8EywE0V1aNzTtJ+qI6OzKScTwWpPogqBxAqG1/DEjqk0Ir/b2RO8rMOV9i8WBZrPda/3gI5EAgGmbEjttm9NXoSA6cdawNJk6IZiTn9KgWC8PojM8q6H7M0x1kpVRB0AIlDF/LzfQGGJDSXyTl5c8IPnN23wE0bM8/NABwETphp3CDTeyhf+TFf/LbH9jgjiPxAkTONVR6ooAxuDjEfhm/lLxu1sDZA/kB5KRNQHn7wQJgiAIgvjF9M8OAefi+/5B9QZonXzQ5427D6EhuM3nfkyJbmrVYfomyQIyJTcY+f35YG//06Hn78S7mYefHofgOinjbuv0IgCS7SUj0sPOhmXryZm8NR6xJco+075xFYgtkY714c0nkOMxxjLS+IogLhjmFh0MgsDwIh/FfuXElAYgwCMbP8CqRUUMH18ZuT8a1iBmi2XGkCPSZOTgY+HoSwQ26sVrW6OiRh8oWIi6dG7onBQmbg+6OsRZE15jQkSlNIN3ZkA9nBqpCgSrOj/je6nTN/BE3yniyOxuipIb0Wy2I7oyAMMP8jN8LOty+apVaLZ4T7PGlVhQF9qGfwsKFYOHnQtTt8sxtZJSojNUxDSjIdQGjZMTff0JojuIFwZuxQmSzVOz2Y7FG77B/S9tVWybkRWGAwOvxdTNCQAkdVrG6b7VASQIgiCI3kZAix6JBbzXbtbAWjj0/HjJYXBj49xCuOHGiq9XI6Xs3/jkGslKpNUsBNFbtBi7O1ZczrmBihi+NsqctcpMV3/CYNeKCnIAePSFHThwUYUoNmI8+chEbLtoBcbt4K/Rld+uxsa5BV7H2jR5Ob5esARbx16JNGEMcOn67/Dwk2MBACUJTfjwlpOK/UykRCeICwYHDsH1fJbtTf8a1OH2NRGt6Jer9DHPGlQPu+CCsOzz/qiO4NvK8GoTJm6Px8+jr8SOUVdh+KEor+P5Mxw4ydJFxRdddFEQxIaEbyiITvwi2MOms3FoMzlRkCKlwDFP9FF7pWrnQw9HXNgT7EYiq0wIqzHCrQFOp9cDAG77p7LSc25ag9quiCuxYOWlp8XvLSYp0O7UuPDTtGKvfYxtpJToDEzFn5wfBBNdM6IbyTjJt587J5eJy3ZOLsWeCeX48JYTiuA6AMSXBGLFxxmKZeF1/ldMjCAIgiD8jZEH+IDNd8vOoNks9evfuf0wqiJb8eOsIrQEOPDP3x0S1zHvWlOrDiMORiKogVdcHhteIwpypv6UcIH+gu5h0cpUxffLv1slBtHNVh2iys2YsTERA3JCESkTd137xVqvY0VWmzFpWzwyT4Xh2T9MFpe7Bf/fLBWRkpFESgRxQWG+6JFVAWKduDAfdfXsBpdXxr68RMT0H5JE1XWkYI2Znh2GtNN9U0gXJtSKqAvzztZJFxwjyuKsqnYvhAQF0YlfBLMsCRUqKWdlSJ0PZudilDVsoXV9x3uKAyeq0Vmn7IrPMjBlS7y4jVt4AqPKlYGw2FILKmIlmxf55/1jKlAZ04KAJmUAmDp5nYOp+D2LPBHEhWbeGl5dtWd8GSojeZVEXqo0sbZuUZ7XPnPW9YNOVrHeTGnGBEEQBNHjYfVP3r3tGJx6NzgheXf/uEr8/YH94nanBtUiL7UeZ/rX47G/7ADAK9EDmwxYNftSxTG1Dg79coMvxOl3G9M3JULjlL5bg+wIr+LHnXaDE/sHXYuIGn4c5Wnz0h4zNiUhtIY/zt6x5QCA2gjvwBLZZRLEhSVEiCu1GZ3YPfxqHMq4Dh+smO9z+xIP0ZGchOJAMYje1zzQ1WAxuzoVy6uwWhN+HH8FzsTdgoAW3wWvCQqiE7+Qfnl8x411MLIFlW9RYiMK+vGqdL1gRWJo08Bg71uBXhaozZb56w0+6q3Gv/gHpYokttSi8D2/7Z9SYZ3DI6sASEUJGZRu2DnY/wXLoiCI7iK+JBDpp0Lh1gDHhvPPtbytODyiymuf0Dojbn91uOgRGtREhUUJgiAIoqezYHUKRuyPRECTDiG1BkzbLNldbpuqzDAtSG7ES/dLgXU2YT7wZDgu/3QAjC18n79fbpDfe9cGtOgR71FIdM2SPERUmuDQu7Fzcqm4PL6480VWD42sFOt6aVy+ryGJlAjiwsKU6PVhbTDYtYgts4gWmGpURreoLjdbdbBY9WgQhJ3MJqYvwwq31oeo1+IYdCKcMvU7gX+/dYnzDkunE7LgkJ1Zi4LkRkzZ8xn2j60AAGiFzl1gk0H1GP6M5C0lKfTVFNCXfTFA8f3EkBrkpNcBAD64ch6GyALvTEkdUa1Ur5taqMHrDCcG1wAgJTrRMxALEAvB82zhuQfUax8AwKNPjBdT7oIbqUNIEARBED0di1WPDdMvR278rcjqdzMu+1zq+xf2a1RsWx9qQ5tRkl+bZX38f/56Fh55ahwAYMjRyPN81j2DVA/rhaef2YVJP/GZvWuW5orLg+s7p5606Z2Yu/Ur8XtpgtXntlRziiAuLEyJXh9iE5fFlAWI2TvidrV8bMlhcKseJ7kgCC7OjeZA3j7L0kTqaqZEb5BdW6LrUBCd+EWwIHqbULwhK7MOX16ZjRZZsUytizemCmzoew0XC3TJ1aVqCugRB6JEVQkAzNvyFU735/dJzlemaWYJxR5Y1WmGkZToHVIb1ordE3j/6Qk74rr5bAhCKkDMJtqKk6SUxOyMOmyaU4DPr8pCq1FZgJh1fkIbKIhOEARBEL0N9v6HG2KQh/HTtGIx8xQADB59fGYTycYZ/s68tf28lp0URDFrFufBJai5mJUoAEA9rgYAONO/XvH9yMgq3PeXixBXbEFinlLNTuMrgriwiEF0meWI3qFFVEWAYrv6sPYDwdFlZrQESG2rxUqCQ6ZEV7NzIToPBdGJX0Sc4D3HGrnsjDpsnVGkum1gH5z9Y4UDTw+oh9XCF2jwVEBrnBz+/MRutJmdiuWtFv67PH3JqXHhxFC+03h8WI1ie0o37JgNC/Lh1Lkx+Eg4Us/0zYIiRM8iQxgAHxlRDTfcKI2T1FANoTZc8+Va3PX2Znx0w0nFfkydEdxA/n4EQRAE0dvIYOMBznvd+786jjMDpECvXJUOSOKc9D5iTTj4GJ+Ra2mUxpLZA+sAN1Ae14x9gqd5fbAyqMaC656w6zdin6Tk//tD+7F1/BUYcTBKsS2NrwjiwhJaywfRS+KVGSKhdZKrwdTNHRdUPjOgAdYAPv7CuZQZPX2VkHpSop8LKIhO/CJimRLd5ATnBBpDbNg+tVSxDeu+9EU7l8TCQKScCYZD78IPswsBABE1ZoRXSYEvl8aNj284pbq/zsaJM4YA8PCL21AT0aroRDIo3bBjVi/hUz4XfZfazWdCEDxTtvCdwANjKvDubcfELJ7YEqXa4uG/bcObdx4WB4Rs4pKU6ARBEATR+whsMmDU3uhObdssCHEAwA23aPeW0UesCS/aGw2zVQdrkF25QpiAWCP075tC7Ip126eUwKZ34s07DyvU5+z6ZZ4KVxxu5s9f4qdpSn96KixKEBeW8TtjAQAf3XgSR4dJGTlZA+vEz5d9NsBzNy+Kk5rEYHGAVQ9Obcayj8FU/nVhpET/JVAQnfhFmFt1CBMqm/sq+KAR/Kv6ohKdA4cFq1IAAJtnFYrLBx0Ll2/kE4fOLTb4OQPq8P6vjgOQOs3hlXwwXuvgoG2nKA7Bq/i3Tuc7xvNXp3TvyRCEQGyZBWN2xQAAHnlxm7h82CFvn9PHn9uBPePL0Gp0oM3Eq9JCKIhOEARBEL2SJd90TtRhlQXRqyJbURveBs4F9M8OPU9n1rMwt+owe0MyAGDS1niv9auX5sENN3IG1CmWP/j3n/DqfQfx+HM7sGz1SnF5lqjkD8WUH6XjFaY0osHDIoJESgRxYWECIwB47Nkd4ucrP8oAAMxd0w/z1vaD3tZx7IPV6LNY+14cSg1WtLXBR2FRonNQ1I34xTA1ekypFERPyg/EqtmX4JNlCwFO8ERXUU/3BYYLaYFyX/QX7p2quq3F0zdeAzQEt6HF5MD8zV+Li9NyeCsSvYO/tno7PcodUZTUhBaLA4Y2DQYeD+94B4K4QCxa6T2IduhdKlsCpfFWUYWucXKwNPe9DB+CIAiC8AdueXso/vjYuA63a5bVmmIq6qT8IJj7kEp6oZBFuv3iEiSfCRKX6+wc8lMb8Kfnt3sVCM3JrMdfH9oLACiLb0Z5DL+e1aFJPxWG12+biScfnojfvjhS9feSJzpBXFiMNi0eemosAKAiVqoB9+QjE/HX303F2zfNRkSNGR+umI9Re6J8HQYAUJTEF20OaO47bWV7hNR6F20lug5F3ohfDFOgh9dIFiUDj4dj7O5YzNiUhKZA/iHtqxWRmWo8O7MWbsHcZkBOKK78X4bXttZgu9eyPePL8dUVOWgUGrtXbp+OsjjhhSIUbTXYqIPXEWwSIy0nFDonNX1Ez2GhkK3CWPplGm54dzAAIKheGSSvjmwVOz4h9QZo3JSaSBAEQRC9EXOrDr99aRSufW8gAEDfJvVPr393EAYd5UUfl3zZX1yen9IAAOh/um/V9pmzPln8PCAnFJxgEx9WzY8/373tmFfBUABwy4ZI+8ZWwMW5cTqd3y4jKxSxZRbc/vpw/PGp8YrrzI5v7EMTFQTRU2BZ49WRreKy8BoTbvjPYHHycMamJDz1yKR2j8N81ftqHMqTULJzOSdQJIn4xYhK9DLJw3fW91JHpymQDwz3RTsXgE+15FxAbXgbqmQvgn/cNQ2hghWOvk2D1381Aze9wwfOWKcZAPZfVIE1S3mvvwnbYnHFxxmi0sKt5YPyhjZ6lDuCqU76in8k0XtIyVUOhP9678VYsCoFXy9Ygg3TL1Osq4loFZXowfVk5UIQBEEQvZ2nH5qEz5cswjUfZIrL4kss+GbhUnyxeDGu+p+0nAWVoioCvI7jzwQ1GvDUQxMBAHlpDRgkZJVWRrcAAFxaN5w6fly09Ms01WPc/u9NmLT/E7QE8Jmp/XKDFeufeXCi+NksKFdJiU4QF54IoX5cbVgrnBr17FwAGLM7BtFlvttCFjMhOxeecGHSsSaitYMtifagyBvxi4mT2bgMPBaO0FojFn0r2RM0CZXS+2JhUYBXmQwQPAu3Ty0Rl5ckWFEXzgfD0s4EY/lnGbju/UEA+A5hjFBYcOvMYuweXwYAeObByeDcQGkc/0Jw6PiXCnXwOmabcO2HHIno5jMhCG+e+/1kAMDf7roYoXVGcOAwaVs8Us4EI6rcLG5XHdmCJqGwVpCn/RNBEARBEL0OS7MeF29JxMRtceKykfujEFpnxNStCYqss+pIPmjMgiF9iaVf80rx3LR6STWuAdKyJTFCUL0BN/9riOr+bWYncvvzSv7U0yHQOTViljAA1Mr80JnalTzRCeLCEybYjrg1QK0P1bQbbnBuiPXn5AQ08c9vSXwT/53sXABI7426sDbYdc5uPpveCwXRiV9MXDEfRC+Lt2LV3EuwfdQKRFdKM4JMid6XAz7zhJSk1YKiHADWLpY+p58KAyBdy6roFozfzlem3j2xDA2hNmicHDJOhqEhxIYWwRvRLvgmU+X49mkKtGHLzCIAVFSU6Jnc/M4Q7Bt8Da79YKBiucbNYduYFfj9Xy4CAFSHt6I5gG9TA5r7bptKEARBEP7GtB+TxM/jd8SpbsMUhEyp2ZeILQ1AYIMebg2wd1wZNE5+coH1iwBewT9pWzzue+6ido+VcSoMf/rLNow9/DGqw1tw/0tbcdVXq8X1zCrT1EJjLIK40OgdWoQKgXQ11bQbbqz4Zg2WbPgWC1TG9pd/PgCATIneRx0RPAmrNYIThP214WTpcrZQEJ34xSQV8MVd8lIbENRoQESNWbFesnPpm0p0AJixKREAcOCiCnHZgdGV4ueCfnzRi4hqk2jNIrfEAYCEQguMNq3o7RVaY4BVuLZmml1tl41zC2AzutA/OwSZJ8O6+3QIwgsOHBKLgsDB2+M8pN6I/kI2S3VkK1oC+Ek0UlUQBEEQhP8QXmNCRCUfHM/OqFPdhllD9kUlOgcOMzbxEw0/zi5Gch4/BmWWLgCQIfTzhx2ObPdY6VmheOf/jqIwpRFPPb0LH95yAiVJUmFSvZ0fj1G2L0F0D6yNY9k3cmrD27BlZhH2TChHYIMekRX8tgFNOvz6n0MRKQg6WaCY7Fx4tC4NwmqF60qWLmcNBdGJX0x6VigAPohu03unhbAgel+eAWQdusJ+jWgx8QEw5tHNf66Di3ODAyd6zCcWBSqO4RT8z8uEIHpkRQBcQr+OXgzts3oJr/pfuDJVNUhJED2dyCp+crI6shXNZr4NockzgiAIgvAvMoTs1OzMWtX1khLdrLre3/nXjXOQUBgIu8GFCCHI5tRLliyzNvBB9viSQNX9GWk5kgXMJ9ef8lqvc/DjBSPZuRBEt8CybeTFRRnM2hYAFm/6FiMPRAMA/u+VEXjmockIqVOKN0l4JNHe5ATROSiITvxi4kosCGzQw6lzq1ZFZ/69gY19N9AbVWlGaK0Rbg1wOr1OURleZ9egxeJAcSLv2cU85j1fGGx5i8mByAqz6BUGADGlfau4UFdoNTqwcV4BAGDRd6kdbE0QPZOEQn4wmJ/SgGbBzslMKcYEQRAE4VeknwoFAGRlqAfR2fggog8q0RlXfpwBAGgIljzM00+GYsqWeNE3ffDRcAw6Gg6dnVN4pjM6UvJzLj6IbiIlOkF0CwmCoDAvtcFrHRMVMthYnwXLQ+qMivWZJygTncEmJ6i46NnTrUH0rVu3YsmSJYiPjwfHcfjmm28U691uNx577DHExcXBbDZj9uzZyM7O7vC4r7/+OlJSUmAymTB+/Hjs3r37PP0FBMCn1rHCmdmZdV7rrYGssGjfDaJz4KROcWYdCpMbxcrw/QUlxPEh1QD4SQmAD5YFWKUg2ct3TAcALFydimMDbsAdr44Q12Vk0YvBF9unlqA50IH4IgtG7o/q7tMhiLMiJTcYehs/4cayWEiJThAEQRD+RXoWU6LXea1zw40qQT3Yl4Poi1byoph8WXAte2AdJv0cD4tQL8Zg1+LHSVegOOI2XPbZAK9j5KYqhV+3vzochlYpNMK5mRKd+loE0R20l5VT4hFEZzCBUWitMoi+YBUJ6RhsArEqipToZ0u3BtGtVitGjBiB119/XXX9Cy+8gFdeeQVvvvkmdu3aBYvFgnnz5qG11fesyaeffor77rsPjz/+OPbv348RI0Zg3rx5qKio8LkP8ctpr5EjT3SedNk1Yh3jtJxQTNzGFw7asCAfADBmdwwA4M9P7sZbN81GxolQ3PHycKRnKwPl8hlYFqAnvDk2tAYAMG5nLFm5EL0WnVODtNP8hNuhUVUAKDWRIAiCIPyNDKFPn51Zh6+W5+CTa07BoeUrwVVGt8AaZIfGyYkZan2RoYcjENCkg83oUizfPrkEP84sxHu3HkNDsFQ0b5QgouFkrqNfXC0J86ZvSsSv3hyKUEG9amzRwmbgNzaRnQtBdAtyAaInnkp0RoBgcTvtx0Qs+jYVo/ZG48FnxogZ/QQQU847GJTHNnfzmfReujWIvmDBAjzzzDNYtmyZ1zq3242XXnoJf/rTn3DJJZdg+PDh+OCDD1BSUuKlWJfz97//Hb/+9a9x8803Y/DgwXjzzTcREBCAd9999zz+JUR7jZwYRO/Ddi6ArFOcUScqSTNOhWKhoKZYuzgPTo0LC2WWI2uW5OKn8SvwxKMTvY5XktAkfk4nJbpP2MQOm+ghiN4Ka2ePjOSD6KREJwiCIAj/gtVRysmowx3vbsLv3vwRn1zLe3ZnCX3a5PwgmNr6bh+AAyfW5JL3hfZMKMeKb9bgwX/8jBce2SsurwvjA+puWTyc2Wou/TINny5bhKTCIDh0fFA+qTAQbSYWRO+715kguhPWFp4cVIM2g7LuHvNEH789VrGcKdEtVj3evX4u1s1chvteGH0Bzrb3EFfMTyiUxalPRBAd02M90XNzc1FWVobZs2eLy0JCQjB+/Hjs2LFDdR+bzYZ9+/Yp9tFoNJg9e7bPfQCgra0NDQ0Nih+ia4gqaw//Pjfckid6H7ZzAaRA93fLzuCJZ3cKy0Ix6ec4hNYaUR3Vit0TypBQHIj5q1IAAEdGVPk8ntwrMaqibxYXUsPFufHXh/fi1+99j4bgNnFih9T6RG8nsTBI8d3c0rfbVIIgCILwN+JLAr36rN8tOwNAsnihPq00rgpo0iHldDAAiIFvAHjn/47i0MhKAMBRIStVDvNTlytUrQF8zZmYMot4LCosShDdQ8apMMSUBqA50IGfpxUr1pUm8AHgIUciFMupXlTHsDbP0xLHarHjrrd+wON/3gGnxqW2KyHQY4PoZWVlAICYmBjF8piYGHGdJ1VVVXA6nV3aBwCee+45hISEiD9JSUm/8Oz7HhmCGuB0ej1cnFQhvTnAAZeW/97Xg+iDj4aD82iPMk+EQ+/QYt6afgCA1UtzAQCPPTYegPf1lHNqUJ34Obi+b1vlyNG4Ofz3xhNYedkZZGXWIVcodjtAuEcJorfC6iUwyM6FIAiCIPyPxd+mKb7/fHEJ6kPacGA0b0+aeZKyK4cdigQAVEe34pXbpyusWhj3vrYFbrixbkmu90rB4TG+mLfFccONNjN/kPgiC9qMQhCdCosSRLegcXNYKAgLV3s8w0yJ7plpTlm6HSMq0T2C6JXRzfj86my8f8txaF09NkzcI6CrA+Dhhx9GfX29+FNYWNjdp9Tr6JcbDEObBi0BDhQmN4rLrYKVC+eSPKr6KvElgXjv6nmKZRf/mAAAoqXLmiV5cMPt83oy1s/PQ34anzFhbNX26ZRONVhmxOGRlWIKZ2JR3/WOJPwDCqITBEEQhP9z10sj8OTDE/HGLbMw8Fg4HHoXMgrfw6fXZgEAZm1I7uYz7H6u/88g8XN2Zh1mC9dk0tY4/OfquQCAY8OrsX5BPnL7N8DQqsEDz4zBiP2RiuPElvL+wM0WhxhYTygIRIugSiclOkF0HyxGsk6wvWWwALBnVg6NjTqGjSdL45Se6NURfN3Jvly0urP02CB6bCzvb1ReXq5YXl5eLq7zJDIyElqttkv7AIDRaERwcLDih+gaOqcGqULRO3k1eWblYmnSQ+Omoo7z16bgf8sXAADmrumHsFq+kZq2OREBTToUJzXh0Kgq6Jwa0Qds90TvLIon/7xT/OxZfZqA6JO4dTqf+hXQpENQA6n1id6NZxCdUhYJgiAIwv8IbDLg9teH47IvBmDZF/2V6xr0GL/D97i2r2Bp1uPX/xwKgB97sqB6XloDFqxOwZQf4wEAd729GQAw/Yck/P6F0aKCncH6Vo1BNnFZUpFkn2cmT3SC6DYmbotDWI0R1ZGt2CXERFpMDtSG8yI5UqJ3nfjiQGgdHBpDbMhNqxeXV0cKQfQqCqJ3RI8NoqempiI2NhabNm0SlzU0NGDXrl2YONG7yCIAGAwGjB49WrGPy+XCpk2bfO5DnDsyVHzRmwL5Dklft3KRM3tDMtbMvBSv/WaGuMzcqhMVFKuX8L6Hc9fxFi9rFivTl7IyasViOAAQQlYuXrB7kQXR40sCwYEmcYjeTaxHZXnqKBIEQRCEf/N/r4yAoU0asq+acyml2guw/v6bdx9Gcn4wApp0KEm04uBFlVj0Ha9gbQzhx6KLBEVrnEdfivWtmoTsaYAv3MogJTpBdB9y29tla79DVUSLqEI3W3WIqjBDb5PawwASGHWIpVmPyVv5SUZ5nKkmnA+ih9dQEL0juvUN3NTUhIMHD+LgwYMA+GKiBw8eREFBATiOwz333INnnnkGK1euxJEjR3DDDTcgPj4el156qXiMWbNm4bXXXhO/33fffXjnnXfw/vvv48SJE7jjjjtgtVpx8803X+C/ru/BZvZ/vrhEXMY6JIFNFOiVM3pvDELqlQpylpq5dzyfScE6ez/MLkRTgKSOWHnZaQDAsIN8IY3gelKie8JSu6xCJkRsSUA3ng1BnBviSgJgtkqdQ1KiEwRBEIR/Y7Br8c2CpdDZNbjqw0wMOhHe3afUY5iwLU78/NENJzF7PRMk5WLxt2kIaOT7SSG1BsxbywfiYj2y+uKZP3Cc5A+cWMhbQHIuQG+nCQuC6E6u/ChT/Lx5TqHohx5fYgEHTiHWJIFR55j1Pd9W7hkvOXjUMDuXKnO3nFNvolvfCnv37sWoUaMwatQoAHwAfNSoUXjssccAAA888ADuvvtu3HbbbRg7diyampqwbt06mEzS7Mjp06dRVVUlfl+xYgVefPFFPPbYYxg5ciQOHjyIdevWeRUbJc4981enAAC2zigSU+KYnQsp0TtmoNApzhLscD695hQAoDXAibk/fQWnxoXv5+Xjr4/sAwAMOsoH0UPrKIjuiWdql6fqhCB6I3qHVsxYAYAAK3UUCYIgCMLfGb03Bgczr8Nf75na3afSo8jICsPz904BAKxdnCsWAf36ihwEWHWIquJVqk8/OEm00AyW2TvKFawnBtUAAHR2Dno7fxxTq44yWQmim5n8czwm/cRPmJXGWVGSwAfR2YSY3iZliwQ0U8ypMww6zsed5DbM1ZEtAIBw8kTvkG4Nok+fPh1ut9vr57333gMAcByHp556CmVlZWhtbcXGjRuRkZGhOEZeXh6eeOIJxbK77roL+fn5aGtrw65duzB+/PgL9Bf1bTJOhWJAVihsRhc2zi0AICnRLY3UoHUE8/Guim5BbVgr3r7zqLjudHo9vp9XgD89v11clprLe/cHk52LF1EVZoTUStdl4HFS7RD+wQ3vDoKhTYOY0gBx4o0gCIIgCP8mqsoMg52sRTy54uMMcC6gsF8TPr8mGwBQlNyEf/3mKPJTG2E3uPDiw/vg4txoNtsxencMknODYGzVwm5wYeck3md5j+C3HNhoQKtJKCraRtebIHoCY3bxgtjSeKuYNcJEcvJ6BhYSbnYKlrWfm1YPm94JQFZYlDzRO4Tyk4hzBgcOC1emAADWLcoDQJ7oXcFi1SNBSB/cNrXEa/2Nn65HXloDAGDLuCtgM/IVqskT3RsOHAZkh4rfFwhZEgTR27l4SyJyEm7B/sHXiqoqgiAIgiCIvoilWY/EgiCv5c89sUf8XJDaiPtf2op5W77Cku+/xebJy3H5p+kAgLWL8wAAuyfwtgZJ+YFoM/FBJVMLBdEJoicQX8LHSMrirCgVPNHjBCumFotD3E7jpsyRzhBXYkFggx5OnRu5QnyJ2bmQEr1jKIhOnFOm/JQAADg6vBoAYA0kO5euwNToa5ZIRR6MHh24Ff/LwMCT4aiIbgYARFWQ37cat7wzBPFFFlz9QSb654R29+kQxDnDaNNC56TXN0EQBEEQRIYwfmqP75adQdbAOhQnNeGFR/Zi0s+8PcTW6UUoim8Uvc8HnghHqxBEN7aRbR5B9ASYdUtJgiyITnatZ41ccJidWQsAaBCKMJNVcMfQKJw4p3imhjQG8w9jUCOppTsDu37fXM4XD52zNhkHBl0rru+XG4RX7pgBAGJlajYLSyhZ/mkGDgy+Di/dNb27T4UgCIIgCIIgiPNAxsmwDrdpCJUsH9666wh2TeDtW7IH1uHudzZjzjq+8GhciQVtRkGJ3kpKdILoCcQLQfTCfo3IS+WV03HCMq2DV5+P3x7bPSfXS2E15Fg9PmaLQ3G7jqEgOnFO8UwNYZ7ogeSJ3ilYY+bUuQEAk36OR0SNGZd8mQYAyE9txBPP7EBNeKtYmZpmYQmCIAiCIAiC6Itc/96gLu9zYEyF+Hn75FL8+3a+FlVEtRltzBOdgugE0SMYeDwcgQ16VEe24tjwanAuYPSeaADAt/OXYulXaXjj1lndfJa9CybefP7RPbDrnGgMprhdZ6EgOnFO8UwNEQuLNtGMVmcYdExZKHDhd6kAgLdvnoMJ2/jZ1Td+exh/fnwXSj0qUxMEQRAEQRAEQfQl+ueE4t4XLgLg7WPOuQC9zTvkcTq9TvoiWx1RbZLZuVAQnSB6AkabFrM3JIvfx+6KRUw5HwMZuzsW79w0BwnFgd11er2SQceluNN/bzop1TIkJXqHUBCdOOfIU0OagsgTvSuM2R2DR54Yh6s/yMTf75yGlLxgcd2z90/B4CN8Y/ftZWdQG94GQEpvIgiCIAiCIAiC6Gvc/9xoPProeKycdwneXzFPXJ5QFIglX6cptjW0adAS4FQ9TlC9AfUh/BgrpJ68gQmip7BoZarqZ+LsmLExCf1y+VjTykvPiHG7IFKidwhVyyDOOSw1JDuzViosSg9jp+DA4Xd/H6W6bsixCHx/8eUYceq/qIpuAQBEVJoQXE+zhQRBEARBEARB9E10Tg3uenkkAGDEwSgMPxCJw6OqcOfLI3DR3hh8tSJH3Da82oSy+GbV46SeCUFeGu+5TGMsgug5zPo+GZZGPVrNDixYldLdp9Pr0Tk1+HzpIow78jF2Ti6FS8vbCZMnesdQEJ045wwQKqRnZ9TBYuVvMVKinxt0Tg0+uWwhfpxZBACYsjUeHLhuPiuCIAiCIAiCIIiewX+unYtDoyqx8LtUcODw7rVz8PXy0/hu2Rno7Bro2zSwG12ILQ5AWQIfUL/5ncHIPBWGb5bzAfcQCqITRI/BYtXjq8VL0BxgR7/84I53IDqkX34whh2MxJGRVeIyC8XtOoSC6MQ5Z8jRCADAiSE1CK3l0+DYv8QvZ9jhSAw7HNndp0EQBEEQBEEQBNHjSCwKQmJRkPh90XdpGLsrFt8tO4Oifk0AeL/03/59FB752zYAwLLPBwAA6kN4b+CQOhq/EkRPYuSBqO4+Bb9j4XepYhDdbNVB5yTH746gK0Scc/rlByPzRBgcepdoO8KKjRIEQRAEQRAEQRDEhSSqwoyQWkldnlgQhDF7YqQNXPw/9aGCJzoF0QmC8HPk/vJk5dI5KIhOnBfkD2Nggx5xVPySIAiCIAiCIAiC6AY4cEjPChO/Z2SFYuDxcGjtvDVmq1BslBUWJU90giD8ncxTYWJNQ7Jg7hwURCfOC/Ig+oCcUPLtJgiCIAiCIAiCILoNFiziP4fBaNNiwvY4AEB5HO+NXh/K27mEkhKdIIg+wEIhdhfUQEH0zkBBdOK8MORIBKb8GA+NkxP95QiCIAiCIAiCIAiiO8g4JSnRR+3j/ZWTCgMBAKVxVgCkRCcIom9xzYcDkZQXhIXfpXa8MUGFRYnzAwcOXyxdDIfOBb1D292nQxAEQRAEQRAEQfRh4osli9HZG5IBALGl/LKipEYAMk/0elKiEwTh/6TkBWPv8Gu6+zR6DRREJ84bHDgKoBMEQRAEQRAEQRDdzrw1KZi7ph/G74hFYBOvNB+xn1ekb55VBKfGhaqoVgB8IVKCIAiCkENBdIIgCIIgCIIgCIIg/Bpzqw4fXjVfsWz6D4kwW3UoTGnE5tlFcOhd0Dg5RJcHdNNZEgRBED0V8kQnCIIgCIIgCIIgCKLPEdCix6zvkwAA136xFgAQXW6GzkmhEoIgCEIJvRkIgiAIgiAIgiAIguiTLFqZpvjOfNIJgiAIQg4F0QmCIAiCIAiCIAiC6JMs/ToN/bNDxO9xJRREJwiCILwhT3TCC+PvRqHtnaNwV7cAbU7A5eZXON2A3QW4PXbgAGg5/rNeA2g4aR8NBy46AJxZB7fdBXdRo7gcRi3/LwBY7dJyl/B7PI7FJQbB+OuhAIDWJ3cCVse5+6M5gItWFo/RLUyBY3sJ0OJQnhe7Fm5pX2g51b+93c8qf6PPzzYX/ztVzhthRmhiLdBfNgBcMF8gx74hH84dpfy5A4BOI/0fef6Oc3kd/Qnhcinud4sOXKAe7soWwAX+moYYAA0H7cgouEuscOXWAy3O83tOWuH5Yf+PFj3/f93s8P18snutxcGfe3uw6VUNBzhU7jt2DgaNtF1X7ymNsG1nngG7S/nMXSja+xt/yfPsdPPP9C+BAxCgg/F3o+DYWgznsWq4K5q9z6VNuBeN2p7zrGsAmHXgogOAZjvcdhd/X3b0jpFfX/Z3dfUyGjT8/i53x/ta+OsL8O8D57FquIubpP9H+TPo8a7SZobBsSH/l/8/d4BuYYris/NYNdwFjdL7ghN+unIaHH75s6bWfp6rYxM9C4MGcAg3mK4Lz5e/YVDpZ3XlvdDeZ7V3uxrsvdod78tziee1ZGMR+T3lq42Rrzdp1d8rwjtIcY3ZO8UNfrlb5Vid/f9SO19fcODvEfb3qp1vZ9tNoV9wXsYhZ9M3O5fjI6db+e49m3tCJ5yLj76GzqnBp5cuwphjHwEABmSF8iu0nPAedUtj11/yPHv+jZ3pl8v/RpO24+vV1fFkN6AZHC5+9hV7kI/9AWFsvqlA2IYdCADH+f67TFpo0kJguGkw/zvksQiXGzDroJsUrzgXn3EGg+a89+t6LJ5joq7ct+cK9gyfr3F2V2DPotoz5esdo/ZeYGPujtoWX20ea/fOxf+FBny7qOWgyQg7Bwf0Xzi3290zWtIeRENDA0JCQlBfX4/g4ODuPh2CIAiCIAiCIAiCIM4jm527kOPOxxXa+QjlKA5AEATRV+hsHJiU6ARBEARBEARBEARB9GlmaMdjBsZ392kQBEEQPRTyRCcIgiAIgiAIgiAIgiAIgiAIH1AQnSAIgiAIgiAIgiAIgiAIgiB8QEF0giAIgiAIgiAIgiAIgiAIgvABBdEJgiAIgiAIgiAIgiAIgiAIwgcURCcIgiAIgiAIgiAIgiAIgiAIH1AQnSAIgiAIgiAIgiAIgiAIgiB8QEF0giAIgiAIgiAIgiAIgiAIgvABBdEJgiAIgiAIgiAIgiAIgiAIwgcURCcIgiAIgiAIgiAIgiAIgiAIH1AQnSAIgiAIgiAIgiAIgiAIgiB8QEF0giAIgiAIgiAIgiAIgiAIgvABBdEJgiAIgiAIgiAIgiAIgiAIwgcURCcIgiAIgiAIgiAIgiAIgiAIH+i6+wR6Im63GwDQ0NDQzWdCEARBEARBEARBEARBEARBnA9Y/JfFg31BQXQVGhsbAQBJSUndfCYEQRAEQRAEQRAEQRAEQRDE+aSxsREhISE+13PujsLsfRCXy4WSkhIEBQWB47juPp0LTkNDA5KSklBYWIjg4ODuPh2C8Andq0Rvge5VordA9yrRW6B7legt0L1K9BboXiV6C3SvEucat9uNxsZGxMfHQ6Px7XxOSnQVNBoNEhMTu/s0up3g4GBqkIheAd2rRG+B7lWit0D3KtFboHuV6C3QvUr0FuheJXoLdK8S55L2FOgMKixKEARBEARBEARBEARBEARBED6gIDpBEARBEARBEARBEARBEARB+ICC6IQXRqMRjz/+OIxGY3efCkG0C92rRG+B7lWit0D3KtFboHuV6C3QvUr0FuheJXoLdK8S3QUVFiUIgiAIgiAIgiAIgiAIgiAIH5ASnSAIgiAIgiAIgiAIgiAIgiB8QEF0giAIgiAIgiAIgiAIgiAIgvABBdEJgiAIgiAIgiAIgiAIgiAIwgcURCcIgiAIgiAIgiAIgiAIgiAIH1AQvRt57rnnMHbsWAQFBSE6OhqXXnopTp06pdimtbUVd955JyIiIhAYGIjLL78c5eXl4vpDhw7h6quvRlJSEsxmMwYNGoSXX35ZcYyvvvoKc+bMQVRUFIKDgzFx4kSsX7++w/Nzu9147LHHEBcXB7PZjNmzZyM7O1uxzf79+zFnzhyEhoYiIiICt912G5qamjo89uHDhzF16lSYTCYkJSXhhRdeUKz///buPbqmM//j+Ock5CYXSchFK4lr0FKpUMIilKSq6lqUGlrtjNKSdlRr1NRlVaN1p8qoWw2iGlXTDq1RaQ1al0Q0Lgmp1tLFmCIqaKg8vz8sp84kOw6/RBJ5v9Y6a8nez/nuZ+98Vtbxzc6z9+/fr169eikiIkI2m00zZ868aU2UHLJqndW1a9cqOjpaVatWVZUqVdS0aVMtX778pnVRMsiqdVaXLl0qm83m8PLw8LhpXZQMsmqd1djY2AJZtdls6tKly01ro/iRVeusXrlyRRMnTlSdOnXk4eGhBx54QBs3brxpXZSMiprVX3/9VYMHD1bjxo1VqVIlde/evcCYEydOqH///qpfv75cXFyUkJBw0/mi5JBV66z++9//VuvWrRUYGChPT081aNBAM2bMuOmcUTLIqnVWU1JSCv28evLkyZvOG+WYQamJj483S5YsMRkZGWbv3r3m0UcfNWFhYSY3N9c+ZujQoaZmzZpm8+bNZvfu3aZly5YmJibGvn/RokVmxIgRJiUlxWRnZ5vly5cbT09PM2fOHPuYkSNHmilTppidO3earKwsM2bMGFO5cmWTmppa5PwSExONn5+fWbdunUlPTzePP/64qVWrlrl06ZIxxpiffvrJ+Pv7m6FDh5pDhw6ZnTt3mpiYGNOrV68i6547d84EBwebAQMGmIyMDLNq1Srj6elpFixYYB+zc+dOM2rUKLNq1SoTEhJiZsyYcSuXFsWMrFpndcuWLWbt2rXmwIED5siRI2bmzJnG1dXVbNy48ZauMYoHWbXO6pIlS4yvr685ceKE/XXy5Mlbur4oPmTVOqunT592yGlGRoZxdXU1S5YsuZVLjGJCVq2zOnr0aFOjRg3z2WefmezsbDNv3jzj4eFx0zmjZFTUrObm5pqhQ4eav/3tbyY+Pt5069atwJijR4+aESNGmGXLlpmmTZuakSNHOnFFUVLIqnVWU1NTzcqVK01GRoY5evSoWb58ufHy8nL42Ys7h6xaZ3XLli1GksnMzHT43Hr16lVnLi3KKZroZcipU6eMJPPVV18ZY4zJyckxlStXNmvWrLGPOXjwoJFkduzYYVln2LBhpn379kUeq1GjRmbChAmW+/Pz801ISIh555137NtycnKMu7u7WbVqlTHGmAULFpigoCCHHxL79u0zkszhw4cta8+bN8/4+/ubvLw8+7ZXX33VREZGFjo+PDycJnoZQ1YLz+p1UVFR5vXXXy9yDO4Msvp7VpcsWWL8/PyKPAeUHrJq/XN1xowZxsfHx+E/bCg9ZPX3rIaGhpq5c+c6vK9nz55mwIABRZ4X7oyKktUbDRo0qNBmz43atWtHE72MIatF69Gjh3nqqaecGouSRVZ/d72JfvbsWafq4O7Aci5lyLlz5yRJAQEBkqQ9e/boypUr6tixo31MgwYNFBYWph07dhRZ53qNwuTn5+v8+fNFjjl69KhOnjzpcGw/Pz899NBD9mPn5eXJzc1NLi6/x8jT01PStT/DsrJjxw61bdtWbm5u9m3x8fHKzMzU2bNnLd+HsoOsFp5VY4w2b96szMxMtW3b1rIu7hyy6pjV3NxchYeHq2bNmurWrZv2799vWRN3Flm1/gywaNEi9evXT1WqVLGsizuHrP6e1by8vALLYnl6ehZZF3dORckqyj+yai0tLU3bt29Xu3btirUubg9ZLahp06YKDQ1Vp06dtG3btmKpibKLJnoZkZ+fr4SEBLVu3Vr333+/JOnkyZNyc3NT1apVHcYGBwdbrrO0fft2rV69Wn/84x8tjzV16lTl5uaqT58+lmOu1w8ODrY8docOHXTy5Em98847unz5ss6ePavXXntN0rV194qqXVjdG4+LsousFszquXPn5O3tLTc3N3Xp0kVz5sxRp06dLOviziCrjlmNjIzU4sWL9cknn+jvf/+78vPzFRMTo+PHj1vWxZ1BVq0/A+zcuVMZGRl69tlnLWviziGrjlmNj4/X9OnTdfjwYeXn52vTpk1au3ZtkXVxZ1SkrKJ8I6uFu/fee+Xu7q7o6GgNHz6czwFlAFl1FBoaqvnz5ys5OVnJycmqWbOmYmNjlZqa+v+qi7KNJnoZMXz4cGVkZCgpKem2a2RkZKhbt2564403FBcXV+iYlStXasKECfrwww8VFBQkSVqxYoW8vb3tr61btzp1vPvuu0/Lli3TtGnT5OXlpZCQENWqVUvBwcH23/Tdd9999rqdO3e+7XND2UFWC/Lx8dHevXu1a9cuvfnmm3r55ZeVkpJySzVQ/Miqo1atWukPf/iDmjZtqnbt2mnt2rWqXr26FixY4HQNlAyyam3RokVq3LixWrRocVvvR/Eiq45mzZqlevXqqUGDBnJzc9MLL7ygp59+2uGON5QOsorygqwWbuvWrdq9e7fmz5+vmTNnatWqVbdcA8WLrDqKjIzUn/70JzVr1kwxMTFavHixYmJieBDu3a6015OBMcOHDzf33nuv+f777x22b968udA1lsLCwsz06dMdtu3fv98EBQWZv/zlL5bHuf5ApE8//dRh+y+//GIOHz5sf128eNFkZ2cbSSYtLc1hbNu2bc2IESMK1D558qQ5f/68yc3NNS4uLubDDz80xhjzww8/2OseP37cGGPMwIEDC6wp9eWXXxpJ5syZMwVqsyZ62UFWi87qdUOGDDFxcXGW+1HyyKpzWe3du7fp16+f5X6UPLJqndXc3Fzj6+trZs6caXleuHPIqnVWL126ZI4fP27y8/PN6NGjTaNGjSzPDyWvomX1RqyJXr6Q1W6Wc77RpEmTTP369Z0ai5JBVrtZzvlGo0aNMi1btnRqLMonmuilKD8/3wwfPtzUqFHDZGVlFdh//SENH330kX3boUOHCjykISMjwwQFBZlXXnnF8lgrV640Hh4eZt26dU7PLSQkxEydOtW+7dy5cw4PaSjMokWLjJeXV5EPV7j+oKbLly/bt40ZM4YHi5ZhZNW5rF739NNPm3bt2jk1fxQvsup8Vn/77TcTGRlpXnrpJafmj+JFVm+e1SVLlhh3d3fz888/OzVvlAyy6vzP1cuXL5s6deqYMWPGODV/FK+KmtUb0UQvH8jqrTUmJ0yYYMLDw50ai+JFVm8tqx07djQ9evRwaizKJ5ropej55583fn5+JiUlxZw4ccL+unjxon3M0KFDTVhYmPnyyy/N7t27TatWrUyrVq3s+7/77jtTvXp189RTTznUOHXqlH3MihUrTKVKlcy7777rMCYnJ6fI+SUmJpqqVauaTz75xOzbt89069bN1KpVy1y6dMk+Zs6cOWbPnj0mMzPTzJ0713h6eppZs2YVWTcnJ8cEBwebgQMHmoyMDJOUlGS8vLzMggUL7GPy8vJMWlqaSUtLM6GhoWbUqFEmLS3N6Scoo3iRVeusTp482XzxxRcmOzvbHDhwwEydOtVUqlTJLFy40Onri+JDVq2zOmHCBPP555+b7Oxss2fPHtOvXz/j4eFh9u/f7/T1RfEhq9ZZva5Nmzamb9++N72WKFlk1Tqr33zzjUlOTjbZ2dnm66+/Nh06dDC1atVy+j/mKF4VNavGXLvDMy0tzXTt2tXExsba/x91o+vbmjVrZvr372/S0tL4DFBKyKp1VufOnWvWr19vsrKyTFZWlnn//feNj4+PGTt2rDOXFsWMrFpndcaMGWbdunXm8OHD5rvvvjMjR440Li4u5l//+pczlxblFE30UiSp0NeSJUvsYy5dumSGDRtm/P39jZeXl+nRo4c5ceKEff8bb7xRaI0bf1Pbrl27QscMGjSoyPnl5+ebcePGmeDgYOPu7m4efvhhk5mZ6TBm4MCBJiAgwLi5uZkmTZqYDz74wKlzT09PN23atDHu7u7mnnvuMYmJiQ77jx49Wuicubu3dJBV66yOHTvW1K1b13h4eBh/f3/TqlUrk5SU5FRtFD+yap3VhIQEExYWZtzc3ExwcLB59NFHTWpqqlO1UfzIqnVWjfn9LqYvvvjCqZooOWTVOqspKSmmYcOGxt3d3QQGBpqBAwean376yanaKH4VOavh4eGFzulm14e7e0sHWbXO6uzZs819991nvLy8jK+vr4mKijLz5s0zV69edao+ihdZtc7qlClTTJ06dYyHh4cJCAgwsbGx5ssvv3SqNsovmzHGCAAAAAAAAAAAFMCj4wEAAAAAAAAAsEATHQAAAAAAAAAACzTRAQAAAAAAAACwQBMdAAAAAAAAAAALNNEBAAAAAAAAALBAEx0AAAAAAAAAAAs00QEAAAAAAAAAsEATHQAAAAAAAAAACzTRAQAAgBsMHjxY3bt3L+1plHuXL19W3bp1tX37dknSDz/8IJvNpr1795buxG7B/Pnz1bVr19KeBgAAAEoZTXQAAABUGDabrcjX+PHjNWvWLC1durRU53k3NPLnz5+vWrVqKSYmRpJUs2ZNnThxQvfff/9t1yyqER8bG6uEhASlpKTc9PuckpIiSUpOTlZsbKz8/Pzk7e2tJk2aaOLEiTpz5owk6ZlnnlFqaqq2bt1623MGAABA+UcTHQAAABXGiRMn7K+ZM2fK19fXYduoUaPk5+enqlWrlvZUyzVjjObOnashQ4bYt7m6uiokJESVKlUq0WPHxMQ4fE/79OmjRx55xGFbTEyMxo4dq759+6p58+basGGDMjIyNG3aNKWnp2v58uWSJDc3N/Xv31+zZ88u0TkDAACgbKOJDgAAgAojJCTE/vLz85PNZnPY5u3tXeAu8NjYWL344otKSEiQv7+/goODtXDhQl24cEFPP/20fHx8VLduXW3YsMHhWBkZGercubO8vb0VHBysgQMH6ueff7bv/+ijj9S4cWN5enoqMDBQHTt21IULFzR+/HgtW7ZMn3zySYE7p1999VXVr19fXl5eql27tsaNG6crV67Ya44fP15NmzbV4sWLFRYWJm9vbw0bNkxXr17V22+/rZCQEAUFBenNN990mKvNZtN7772nzp07y9PTU7Vr19ZHH31k33/58mW98MILCg0NlYeHh8LDw/XWW29ZXuc9e/YoOztbXbp0sW/737vIr98x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", + "image/png": "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vPTSS9i3bx9++OEHRERECMseP34cixcvxtKlS3HDDTfg2WefxcKFC/Hqq6/iz3/+M+68804AwJNPPolFixahoKAAer07nsHpdGL+/PmYMmUKnn76aWzYsAErVqyAw+HAo48+2qljKigowHXXXYelS5fitttuw7BhwwAAr7zyCkaNGoVLL70URqMRa9euxZ133gmXy4Vly5YBAF544QXcfffdiI2NxYMPPggAyMjI6NR5lDqOtrY2zJo1C2VlZVi6dCkGDBiAHTt24IEHHkBFRYWiD/T27dvR0NCA//u//5ONHL/xxhvx1ltvYe3atZg0aRK2b9+O+vp6LF++HAaDoVPfg2EYXHrppdiyZQtuvfVWjBs3Dl9//TXuu+8+lJWV4R//+Idf27viiitQWFiIDz/8EP/4xz+QmpoKAEhLS9O8jc2bN+Oiiy7C+PHjsWLFCuj1emGQ5Pvvv/cZFLj66qsxZMgQ/O1vfxOE/yuvvBKHDx/G3Xffjby8PFRXV2Pjxo0oKSnxEG292bhxI06ePImbb74ZmZmZOHz4MF5//XUcPnwYu3bt8hmokNr3E088gb/+9a9YtGgRfvOb36Cmpgb/+te/MHPmTOzbt0/R4qa8vByTJk1CY2Mjbr/9dgwfPhxlZWX45JNP0NbWBpPJhKqqKkybNg1tbW245557kJKSgrfffhuXXnopPvnkE/zqV7/y2Obf//536PV6/OEPf4DFYsHTTz+N66+/Hj/++CMA4JprrsG///1vrFu3DldffbWwXltbG9auXYslS5YI19e7776Lm266CfPmzcNTTz2FtrY2vPLKKzj33HOxb98+j3PrcDgwb948nHvuuXj22WcRExODzMxMWCwWlJaWCtdWbGwsAHYw7dJLL8X27dtx++23Y8SIETh48CD+8Y9/oLCwEJ9//rmw7d/85jd47733sHjxYkybNg2bN2/GggULZM8rz4gRI/Doo4/ioYcewu23344ZM2YAgGB3xD+HJk6ciCeffBJVVVV48cUX8cMPP6j+dmVlZTjvvPOg0+nwwAMPwGw24z//+Q8iIyN9ll25ciViY2Px+9//HrGxsdi8eTMeeughNDU1eWShAEBDQwMuvvhiLFq0CNdddx1WrVqF3/72tzCZTLjlllsAAG+88QbuueceXHXVVfi///s/dHR04MCBA/jxxx+xePFi1fNCEARB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woX49a9/jVWrVuGOO+7Ali1bMH36dDidThw7dgyrVq3C119/jQkTJmDcuHG47rrr8PLLL8NisWDatGn49ttvJaPApRg0aBASExPx6quvIi4uDmazGZMnT0Z+fj6eeuop3HzzzZg1axauu+46VFVV4cUXX0ReXh5+97vfKW73/vvvx3vvvYcLL7wQd999N8xmM/7zn/9gwIABqK+vFyLgp02bhqSkJNx000245557oNPp8O6778raYWVnZ+Opp55CcXExhg4dio8++gj79+/H66+/Lnjsz507F5mZmZg+fToyMjJw9OhRvPTSS1iwYIGQYbJ7926cd955WLFiBR5++GFN54ogCIIgiDCHIQiCIAiCIJhly5YxUk2j119/nRk/fjwTHR3NxMXFMWPGjGHuv/9+pry8XFgmNzeXWbBggc+6AJhly5Z5TDt16hQDgHnmmWeEaTfddBNjNpuZEydOMHPnzmViYmKYjIwMZsWKFYzT6QzoMTEMw6xZs4Y566yzmKioKCYvL4956qmnmP/+978MAObUqVPCcpWVlcyCBQuYuLg4BgAza9YsYd5PP/3ETJ48mTGZTMyAAQOY559/nnnrrbd8tqF0HM3NzcwDDzzADB48mDGZTExqaiozbdo05tlnn2VsNpvkOmJcLhezcuVKZvr06cIxAmAuuOACxmq1yq73ySefMHPnzmWSk5MZo9HIZGVlMddccw2zdetW1X02Nzczv/vd75js7GwmIiKCGTJkCPPMM88wLpfLY7m2tjbm1ltvZRISEpi4uDhm0aJFTHV1NQOAWbFihceyjz32GNOvXz9Gr9d7nL/c3FzmpptuEpbbsmULA4DZsmWLx/r79u1jrrjiCiYlJYWJjIxkcnNzmUWLFjHffvutsMyKFSsYAExNTY3HurW1tcyyZcuY4cOHM2azmUlISGAmT57MrFq1SvVclJaWMr/61a+YxMREJiEhgbn66quZ8vJyn+8ot2+eTz/9lDn33HMZs9nMmM1mZvjw4cyyZcuYgoIC1WM4ffo0c+ONNzJpaWlMZGQkM3DgQGbZsmUev/+JEyeYq666iklMTGSioqKYSZMmMV9++aXHdvhz+/HHH3tM5+/Xt956y2ffDz74IAOAGTx4sOzxbdmyhZk3bx6TkJDAREVFMYMGDWKWLFnC7N27V1iGv/+laGlpYRYvXswkJiYyAJjc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", "text/plain": [ "
" ] @@ -774,7 +824,7 @@ "type": "string" } ], - "ref": "6529bea0-fb38-4564-9f24-c6d708900620", + "ref": "a866f6c2-bb85-4772-a82d-bcbbbb1d1fff", "rows": [ [ "(Timestamp('2022-09-01 20:10:00+0000', tz='UTC'), 'temp')", @@ -1312,12 +1362,12 @@ "type": "string" } ], - "ref": "3be18939-6c8f-4540-9bc8-392ebaa6e5b2", + "ref": "07c0e7db-14ff-42be-a749-3621ffddbaae", "rows": [ [ "(Timestamp('2022-09-01 00:00:00+0000', tz='UTC'), 'temp', 'vlinder05')", - "2022-09-01 05:20:00+00:00", - "0 days 05:20:00", + "2022-09-01 07:10:00+00:00", + "0 days 07:10:00", "unfilled", "unidetail gap: no details" ], @@ -1335,13 +1385,6 @@ "unfilled", "unidetail gap: no details" ], - [ - "(Timestamp('2022-09-01 05:50:00+0000', tz='UTC'), 'temp', 'vlinder05')", - "2022-09-01 07:10:00+00:00", - "0 days 01:20:00", - "unfilled", - "unidetail gap: no details" - ], [ "(Timestamp('2022-09-01 07:30:00+0000', tz='UTC'), 'temp', 'vlinder05')", "2022-09-01 10:20:00+00:00", @@ -1531,6 +1574,13 @@ "unfilled", "unidetail gap: no details" ], + [ + "(Timestamp('2022-09-02 06:00:00+0000', tz='UTC'), 'temp', 'vlinder28')", + "2022-09-02 06:50:00+00:00", + "0 days 00:50:00", + "unfilled", + "unidetail gap: no details" + ], [ "(Timestamp('2022-09-02 06:40:00+0000', tz='UTC'), 'temp', 'vlinder15')", "2022-09-02 06:40:00+00:00", @@ -1667,7 +1717,7 @@ ], "shape": { "columns": 4, - "rows": 639 + "rows": 647 } }, "text/html": [ @@ -1711,8 +1761,8 @@ " 2022-09-01 00:00:00+00:00\n", " temp\n", " vlinder05\n", - " 2022-09-01 05:20:00+00:00\n", - " 0 days 05:20:00\n", + " 2022-09-01 07:10:00+00:00\n", + " 0 days 07:10:00\n", " unfilled\n", " unidetail gap: no details\n", " \n", @@ -1735,20 +1785,20 @@ " unidetail gap: no details\n", " \n", " \n", - " 2022-09-01 05:50:00+00:00\n", + " 2022-09-01 07:30:00+00:00\n", " temp\n", " vlinder05\n", - " 2022-09-01 07:10:00+00:00\n", - " 0 days 01:20:00\n", + " 2022-09-01 10:20:00+00:00\n", + " 0 days 02:50:00\n", " unfilled\n", " unidetail gap: no details\n", " \n", " \n", - " 2022-09-01 07:30:00+00:00\n", + " 2022-09-01 11:10:00+00:00\n", " temp\n", - " vlinder05\n", - " 2022-09-01 10:20:00+00:00\n", - " 0 days 02:50:00\n", + " vlinder27\n", + " 2022-09-01 16:40:00+00:00\n", + " 0 days 05:30:00\n", " unfilled\n", " unidetail gap: no details\n", " \n", @@ -1808,17 +1858,17 @@ " \n", " \n", "\n", - "

639 rows × 4 columns

\n", + "

647 rows × 4 columns

\n", "" ], "text/plain": [ " gapend \\\n", "gapstart obstype name \n", - "2022-09-01 00:00:00+00:00 temp vlinder05 2022-09-01 05:20:00+00:00 \n", + "2022-09-01 00:00:00+00:00 temp vlinder05 2022-09-01 07:10:00+00:00 \n", "2022-09-01 01:40:00+00:00 temp vlinder25 2022-09-01 02:30:00+00:00 \n", "2022-09-01 02:10:00+00:00 temp vlinder19 2022-09-01 03:00:00+00:00 \n", - "2022-09-01 05:50:00+00:00 temp vlinder05 2022-09-01 07:10:00+00:00 \n", "2022-09-01 07:30:00+00:00 temp vlinder05 2022-09-01 10:20:00+00:00 \n", + "2022-09-01 11:10:00+00:00 temp vlinder27 2022-09-01 16:40:00+00:00 \n", "... ... \n", "2022-09-15 21:00:00+00:00 temp vlinder24 2022-09-15 21:50:00+00:00 \n", "2022-09-15 21:50:00+00:00 temp vlinder21 2022-09-15 22:40:00+00:00 \n", @@ -1828,11 +1878,11 @@ "\n", " gapsize label \\\n", "gapstart obstype name \n", - "2022-09-01 00:00:00+00:00 temp vlinder05 0 days 05:20:00 unfilled \n", + "2022-09-01 00:00:00+00:00 temp vlinder05 0 days 07:10:00 unfilled \n", "2022-09-01 01:40:00+00:00 temp vlinder25 0 days 00:50:00 unfilled \n", "2022-09-01 02:10:00+00:00 temp vlinder19 0 days 00:50:00 unfilled \n", - "2022-09-01 05:50:00+00:00 temp vlinder05 0 days 01:20:00 unfilled \n", "2022-09-01 07:30:00+00:00 temp vlinder05 0 days 02:50:00 unfilled \n", + "2022-09-01 11:10:00+00:00 temp vlinder27 0 days 05:30:00 unfilled \n", "... ... ... \n", "2022-09-15 21:00:00+00:00 temp vlinder24 0 days 00:50:00 unfilled \n", "2022-09-15 21:50:00+00:00 temp vlinder21 0 days 00:50:00 unfilled \n", @@ -1845,8 +1895,8 @@ "2022-09-01 00:00:00+00:00 temp vlinder05 unidetail gap: no details \n", "2022-09-01 01:40:00+00:00 temp vlinder25 unidetail gap: no details \n", "2022-09-01 02:10:00+00:00 temp vlinder19 unidetail gap: no details \n", - "2022-09-01 05:50:00+00:00 temp vlinder05 unidetail gap: no details \n", "2022-09-01 07:30:00+00:00 temp vlinder05 unidetail gap: no details \n", + "2022-09-01 11:10:00+00:00 temp vlinder27 unidetail gap: no details \n", "... ... \n", "2022-09-15 21:00:00+00:00 temp vlinder24 unidetail gap: no details \n", "2022-09-15 21:50:00+00:00 temp vlinder21 unidetail gap: no details \n", @@ -1854,7 +1904,7 @@ "2022-09-15 23:40:00+00:00 temp vlinder21 unidetail gap: no details \n", "2022-09-15 23:50:00+00:00 temp vlinder23 unidetail gap: no details \n", "\n", - "[639 rows x 4 columns]" + "[647 rows x 4 columns]" ] }, "execution_count": 8, @@ -2065,7 +2115,7 @@ "type": "string" } ], - "ref": "d33c3ed5-db0e-4712-9183-3a70a13b83bc", + "ref": "b1bdab12-7df4-485c-8387-39028167da53", "rows": [ [ "(Timestamp('2022-09-01 20:10:00+0000', tz='UTC'), 'temp')", @@ -3057,7 +3107,7 @@ "type": "string" } ], - "ref": "53b30ff0-9374-4584-9fa6-23b12df1b1dc", + "ref": "566101d8-4c95-4348-b8d2-c2e3de4eeb04", "rows": [ [ "2022-09-01 20:10:00+00:00", @@ -3595,7 +3645,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": ".venv", "language": "python", "name": "python3" }, diff --git a/docs/examples/introduction.ipynb b/docs/examples/introduction.ipynb index 8da666081..a65fe66b5 100644 --- a/docs/examples/introduction.ipynb +++ b/docs/examples/introduction.ipynb @@ -29,7 +29,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "1.0.0\n" + "1.0.0a13\n" ] } ], @@ -300,9 +300,9 @@ "Luchtdruk_Zeeniveau is present in the datafile, but not found in the template! This column will be ignored.\n", "Globe Temperatuur is present in the datafile, but not found in the template! This column will be ignored.\n", "The following columns are present in the data file, but not in the template! They are skipped!\n", - " ['Luchtdruk', 'Rukwind', 'Neerslagintensiteit', 'Globe Temperatuur', 'Neerslagsom', 'Luchtdruk_Zeeniveau']\n", + " ['Luchtdruk', 'Luchtdruk_Zeeniveau', 'Globe Temperatuur', 'Neerslagsom', 'Rukwind', 'Neerslagintensiteit']\n", "The following columns are found in the metadata, but not in the template and are therefore ignored: \n", - "['benaming', 'sponsor', 'Network', 'stad']\n" + "['stad', 'benaming', 'sponsor', 'Network']\n" ] } ], @@ -673,7 +673,7 @@ "type": "string" } ], - "ref": "fe581962-ceb3-4669-a128-6e9e519a5b57", + "ref": "0fd7e63c-a72d-4b6e-9ba0-3a7baa49320b", "rows": [ [ "(Timestamp('2022-09-01 00:00:00+0000', tz='UTC'), 'humidity', 'vlinder01')", @@ -1774,7 +1774,7 @@ "type": "string" } ], - "ref": "4cdc5bde-ca96-40b3-94dd-d15eae0c3853", + "ref": "067a9508-dad3-4ca4-91bc-2a30ba223e87", "rows": [ [ "(Timestamp('2022-09-01 00:00:00+0000', tz='UTC'), 'humidity')", @@ -2524,9 +2524,9 @@ "WARNING::Luchtdruk_Zeeniveau is present in the datafile, but not found in the template! This column will be ignored.\n", "WARNING::Globe Temperatuur is present in the datafile, but not found in the template! This column will be ignored.\n", "WARNING::The following columns are present in the data file, but not in the template! They are skipped!\n", - " ['Luchtdruk', 'Rukwind', 'Neerslagintensiteit', 'Globe Temperatuur', 'Neerslagsom', 'Luchtdruk_Zeeniveau']\n", + " ['Luchtdruk', 'Luchtdruk_Zeeniveau', 'Globe Temperatuur', 'Neerslagsom', 'Rukwind', 'Neerslagintensiteit']\n", "WARNING::The following columns are found in the metadata, but not in the template and are therefore ignored: \n", - "['benaming', 'sponsor', 'Network', 'stad']\n", + "['stad', 'benaming', 'sponsor', 'Network']\n", "WARNING::The present gaps are removed, new gaps are constructed for temp data of station vlinder02..\n", "WARNING::The present gaps are removed, new gaps are constructed for wind_direction data of station vlinder02..\n", "WARNING::The present gaps are removed, new gaps are constructed for wind_speed data of station vlinder02..\n", @@ -2664,7 +2664,7 @@ "type": "string" } ], - "ref": "f2037f0b-9f39-49c8-88b8-358da4c1a881", + "ref": "f7298a94-a5ce-49fa-8a09-15cae2be7452", "rows": [ [ "(Timestamp('2022-09-01 00:00:00+0000', tz='UTC'), 'vlinder01')", @@ -3387,7 +3387,7 @@ "type": "string" } ], - "ref": "227d9026-93b2-4afa-9d33-a10fb7108a81", + "ref": "2c87a318-3168-45e2-a08b-40de76b5c7c0", "rows": [ [ "2022-09-01 00:00:00+00:00", @@ -6987,7 +6987,7 @@ "type": "float" } ], - "ref": "7f515b41-645a-4081-89da-42b5ed3c7e34", + "ref": "d03b8774-254d-420b-b044-d54666e95dad", "rows": [ [ "2022-09-01 00:00:00+00:00", @@ -9177,6 +9177,7 @@ " min-width: 300px;\n", " max-width: 700px;\n", " line-height: 1.6;\n", + " padding-bottom: 4px;\n", "}\n", "\n", ".xr-text-repr-fallback {\n", @@ -9187,8 +9188,11 @@ ".xr-header {\n", " padding-top: 6px;\n", " padding-bottom: 6px;\n", - " margin-bottom: 4px;\n", + "}\n", + "\n", + ".xr-header {\n", " border-bottom: solid 1px var(--xr-border-color);\n", + " margin-bottom: 4px;\n", "}\n", "\n", ".xr-header > div,\n", @@ -9199,20 +9203,15 @@ "}\n", "\n", ".xr-obj-type,\n", - ".xr-obj-name,\n", - ".xr-group-name {\n", + ".xr-obj-name {\n", " margin-left: 2px;\n", " margin-right: 10px;\n", "}\n", "\n", - ".xr-group-name::before {\n", - " content: \"📁\";\n", - " padding-right: 0.3em;\n", - "}\n", - "\n", - ".xr-group-name,\n", - ".xr-obj-type {\n", + ".xr-obj-type,\n", + ".xr-group-box-contents > label {\n", " color: var(--xr-font-color2);\n", + " display: block;\n", "}\n", "\n", ".xr-sections {\n", @@ -9227,28 +9226,39 @@ " display: contents;\n", "}\n", "\n", - ".xr-section-item input {\n", - " display: inline-block;\n", + ".xr-section-item > input,\n", + ".xr-group-box-contents > input,\n", + ".xr-array-wrap > input {\n", + " display: block;\n", " opacity: 0;\n", " height: 0;\n", " margin: 0;\n", "}\n", "\n", - ".xr-section-item input + label {\n", + ".xr-section-item > input + label,\n", + ".xr-var-item > input + label {\n", " color: var(--xr-disabled-color);\n", - " border: 2px solid transparent !important;\n", "}\n", "\n", - ".xr-section-item input:enabled + label {\n", + ".xr-section-item > input:enabled + label,\n", + ".xr-var-item > input:enabled + label,\n", + ".xr-array-wrap > input:enabled + label,\n", + ".xr-group-box-contents > input:enabled + label {\n", " cursor: pointer;\n", " color: var(--xr-font-color2);\n", "}\n", "\n", - ".xr-section-item input:focus + label {\n", - " border: 2px solid var(--xr-font-color0) !important;\n", + ".xr-section-item > input:focus-visible + label,\n", + ".xr-var-item > input:focus-visible + label,\n", + ".xr-array-wrap > input:focus-visible + label,\n", + ".xr-group-box-contents > input:focus-visible + label {\n", + " outline: auto;\n", "}\n", "\n", - ".xr-section-item input:enabled + label:hover {\n", + ".xr-section-item > input:enabled + label:hover,\n", + ".xr-var-item > input:enabled + label:hover,\n", + ".xr-array-wrap > input:enabled + label:hover,\n", + ".xr-group-box-contents > input:enabled + label:hover {\n", " color: var(--xr-font-color0);\n", "}\n", "\n", @@ -9256,11 +9266,25 @@ " grid-column: 1;\n", " color: var(--xr-font-color2);\n", " font-weight: 500;\n", + " white-space: nowrap;\n", + "}\n", + "\n", + ".xr-section-summary > em {\n", + " font-weight: normal;\n", + "}\n", + "\n", + ".xr-span-grid {\n", + " grid-column-end: -1;\n", "}\n", "\n", ".xr-section-summary > span {\n", " display: inline-block;\n", - " padding-left: 0.5em;\n", + " padding-left: 0.3em;\n", + "}\n", + "\n", + ".xr-group-box-contents > input:checked + label > span {\n", + " display: inline-block;\n", + " padding-left: 0.6em;\n", "}\n", "\n", ".xr-section-summary-in:disabled + label {\n", @@ -9288,7 +9312,8 @@ "}\n", "\n", ".xr-section-summary,\n", - ".xr-section-inline-details {\n", + ".xr-section-inline-details,\n", + ".xr-group-box-contents > label {\n", " padding-top: 4px;\n", "}\n", "\n", @@ -9297,20 +9322,29 @@ "}\n", "\n", ".xr-section-details {\n", - " display: none;\n", " grid-column: 1 / -1;\n", " margin-top: 4px;\n", " margin-bottom: 5px;\n", "}\n", "\n", + ".xr-section-summary-in ~ .xr-section-details {\n", + " display: none;\n", + "}\n", + "\n", ".xr-section-summary-in:checked ~ .xr-section-details {\n", " display: contents;\n", "}\n", "\n", + ".xr-children {\n", + " display: inline-grid;\n", + " grid-template-columns: 100%;\n", + " grid-column: 1 / -1;\n", + " padding-top: 4px;\n", + "}\n", + "\n", ".xr-group-box {\n", " display: inline-grid;\n", - " grid-template-columns: 0px 20px auto;\n", - " width: 100%;\n", + " grid-template-columns: 0px 30px auto;\n", "}\n", "\n", ".xr-group-box-vline {\n", @@ -9324,13 +9358,43 @@ " grid-column-start: 2;\n", " grid-row-start: 1;\n", " height: 1em;\n", - " width: 20px;\n", + " width: 26px;\n", " border-bottom: 0.2em solid;\n", " border-color: var(--xr-border-color);\n", "}\n", "\n", ".xr-group-box-contents {\n", " grid-column-start: 3;\n", + " padding-bottom: 4px;\n", + "}\n", + "\n", + ".xr-group-box-contents > label::before {\n", + " content: \"📂\";\n", + " padding-right: 0.3em;\n", + "}\n", + "\n", + ".xr-group-box-contents > input:checked + label::before {\n", + " content: \"📁\";\n", + "}\n", + "\n", + ".xr-group-box-contents > input:checked + label {\n", + " padding-bottom: 0px;\n", + "}\n", + "\n", + ".xr-group-box-contents > input:checked ~ .xr-sections {\n", + " display: none;\n", + "}\n", + "\n", + ".xr-group-box-contents > input + label > span {\n", + " display: none;\n", + "}\n", + "\n", + ".xr-group-box-ellipsis {\n", + " font-size: 1.4em;\n", + " font-weight: 900;\n", + " color: var(--xr-font-color2);\n", + " letter-spacing: 0.15em;\n", + " cursor: default;\n", "}\n", "\n", ".xr-array-wrap {\n", @@ -9564,40 +9628,40 @@ "Dimensions: (name: 28, kind: 2, datetime: 4320)\n", "Coordinates:\n", " * name (name) <U9 1kB 'vlinder01' 'vlinder02' ... 'vlinder28'\n", - " * kind (kind) <U5 40B 'obs' 'label'\n", - " * datetime (datetime) datetime64[ns] 35kB 2022-09-01 ... 2022-09-15T...\n", " lat (name) float64 224B 50.98 51.02 51.32 ... 51.16 51.06 51.04\n", " lon (name) float64 224B 3.816 3.71 4.952 ... 4.998 3.728 3.77\n", + " school (name) <U29 3kB 'UGent' 'UGent' ... 'GO! Ath.'\n", + " * kind (kind) <U5 40B 'obs' 'label'\n", + " * datetime (datetime) datetime64[ns] 35kB 2022-09-01 ... 2022-09-15T...\n", " altitude float64 8B nan\n", " LCZ float64 8B nan\n", - " school (name) <U29 3kB 'UGent' 'UGent' ... 'GO! Ath.'\n", "Data variables:\n", " temp (name, kind, datetime) float64 2MB 18.8 18.8 ... 0.0 0.0\n", " wind_direction (name, kind, datetime) float64 2MB 65.0 75.0 ... 0.0 0.0\n", " wind_speed (name, kind, datetime) float64 2MB 1.556 1.528 ... 0.0 0.0\n", - " humidity (name, kind, datetime) float64 2MB 65.0 65.0 ... 0.0 0.0" ], "text/plain": [ " Size: 69kB\n", @@ -1347,7 +1477,7 @@ " obstype_name: temp\n", " obstype_desc: 2m - temperature\n", " obstype_unit: degree_Celsius\n", - " MetObs toolkit version: 1.0.0\n", + " MetObs toolkit version: 1.1.0a1\n", " QC checks: ['duplicated_timestamp', 'repetitions']\n", " QC:repetitions.max_N_repetitions: 200\n", " QC:repetitions.sensorwhiteset: 0 whitelisted timestamps\n", @@ -1504,6 +1634,7 @@ " min-width: 300px;\n", " max-width: 700px;\n", " line-height: 1.6;\n", + " padding-bottom: 4px;\n", "}\n", "\n", ".xr-text-repr-fallback {\n", @@ -1514,8 +1645,11 @@ ".xr-header {\n", " padding-top: 6px;\n", " padding-bottom: 6px;\n", - " margin-bottom: 4px;\n", + "}\n", + "\n", + ".xr-header {\n", " border-bottom: solid 1px var(--xr-border-color);\n", + " margin-bottom: 4px;\n", "}\n", "\n", ".xr-header > div,\n", @@ -1526,20 +1660,15 @@ "}\n", "\n", ".xr-obj-type,\n", - ".xr-obj-name,\n", - ".xr-group-name {\n", + ".xr-obj-name {\n", " margin-left: 2px;\n", " margin-right: 10px;\n", "}\n", "\n", - ".xr-group-name::before {\n", - " content: \"📁\";\n", - " padding-right: 0.3em;\n", - "}\n", - "\n", - ".xr-group-name,\n", - ".xr-obj-type {\n", + ".xr-obj-type,\n", + ".xr-group-box-contents > label {\n", " color: var(--xr-font-color2);\n", + " display: block;\n", "}\n", "\n", ".xr-sections {\n", @@ -1554,28 +1683,39 @@ " display: contents;\n", "}\n", "\n", - ".xr-section-item input {\n", - " display: inline-block;\n", + ".xr-section-item > input,\n", + ".xr-group-box-contents > input,\n", + ".xr-array-wrap > input {\n", + " display: block;\n", " opacity: 0;\n", " height: 0;\n", " margin: 0;\n", "}\n", "\n", - ".xr-section-item input + label {\n", + ".xr-section-item > input + label,\n", + ".xr-var-item > input + label {\n", " color: var(--xr-disabled-color);\n", - " border: 2px solid transparent !important;\n", "}\n", "\n", - ".xr-section-item input:enabled + label {\n", + ".xr-section-item > input:enabled + label,\n", + ".xr-var-item > input:enabled + label,\n", + ".xr-array-wrap > input:enabled + label,\n", + ".xr-group-box-contents > input:enabled + label {\n", " cursor: pointer;\n", " color: var(--xr-font-color2);\n", "}\n", "\n", - ".xr-section-item input:focus + label {\n", - " border: 2px solid var(--xr-font-color0) !important;\n", + ".xr-section-item > input:focus-visible + label,\n", + ".xr-var-item > input:focus-visible + label,\n", + ".xr-array-wrap > input:focus-visible + label,\n", + ".xr-group-box-contents > input:focus-visible + label {\n", + " outline: auto;\n", "}\n", "\n", - ".xr-section-item input:enabled + label:hover {\n", + ".xr-section-item > input:enabled + label:hover,\n", + ".xr-var-item > input:enabled + label:hover,\n", + ".xr-array-wrap > input:enabled + label:hover,\n", + ".xr-group-box-contents > input:enabled + label:hover {\n", " color: var(--xr-font-color0);\n", "}\n", "\n", @@ -1583,11 +1723,25 @@ " grid-column: 1;\n", " color: var(--xr-font-color2);\n", " font-weight: 500;\n", + " white-space: nowrap;\n", + "}\n", + "\n", + ".xr-section-summary > em {\n", + " font-weight: normal;\n", + "}\n", + "\n", + ".xr-span-grid {\n", + " grid-column-end: -1;\n", "}\n", "\n", ".xr-section-summary > span {\n", " display: inline-block;\n", - " padding-left: 0.5em;\n", + " padding-left: 0.3em;\n", + "}\n", + "\n", + ".xr-group-box-contents > input:checked + label > span {\n", + " display: inline-block;\n", + " padding-left: 0.6em;\n", "}\n", "\n", ".xr-section-summary-in:disabled + label {\n", @@ -1615,7 +1769,8 @@ "}\n", "\n", ".xr-section-summary,\n", - ".xr-section-inline-details {\n", + ".xr-section-inline-details,\n", + ".xr-group-box-contents > label {\n", " padding-top: 4px;\n", "}\n", "\n", @@ -1624,20 +1779,29 @@ "}\n", "\n", ".xr-section-details {\n", - " display: none;\n", " grid-column: 1 / -1;\n", " margin-top: 4px;\n", " margin-bottom: 5px;\n", "}\n", "\n", + ".xr-section-summary-in ~ .xr-section-details {\n", + " display: none;\n", + "}\n", + "\n", ".xr-section-summary-in:checked ~ .xr-section-details {\n", " display: contents;\n", "}\n", "\n", + ".xr-children {\n", + " display: inline-grid;\n", + " grid-template-columns: 100%;\n", + " grid-column: 1 / -1;\n", + " padding-top: 4px;\n", + "}\n", + "\n", ".xr-group-box {\n", " display: inline-grid;\n", - " grid-template-columns: 0px 20px auto;\n", - " width: 100%;\n", + " grid-template-columns: 0px 30px auto;\n", "}\n", "\n", ".xr-group-box-vline {\n", @@ -1651,13 +1815,43 @@ " grid-column-start: 2;\n", " grid-row-start: 1;\n", " height: 1em;\n", - " width: 20px;\n", + " width: 26px;\n", " border-bottom: 0.2em solid;\n", " border-color: var(--xr-border-color);\n", "}\n", "\n", ".xr-group-box-contents {\n", " grid-column-start: 3;\n", + " padding-bottom: 4px;\n", + "}\n", + "\n", + ".xr-group-box-contents > label::before {\n", + " content: \"📂\";\n", + " padding-right: 0.3em;\n", + "}\n", + "\n", + ".xr-group-box-contents > input:checked + label::before {\n", + " content: \"📁\";\n", + "}\n", + "\n", + ".xr-group-box-contents > input:checked + label {\n", + " padding-bottom: 0px;\n", + "}\n", + "\n", + ".xr-group-box-contents > input:checked ~ .xr-sections {\n", + " display: none;\n", + "}\n", + "\n", + ".xr-group-box-contents > input + label > span {\n", + " display: none;\n", + "}\n", + "\n", + ".xr-group-box-ellipsis {\n", + " font-size: 1.4em;\n", + " font-weight: 900;\n", + " color: var(--xr-font-color2);\n", + " letter-spacing: 0.15em;\n", + " cursor: default;\n", "}\n", "\n", ".xr-array-wrap {\n", @@ -1901,16 +2095,16 @@ " obstype_name: temp\n", " obstype_desc: 2m - temperature\n", " obstype_unit: degree_Celsius\n", - " MetObs toolkit version: 1.0.0\n", + " MetObs toolkit version: 1.1.0a1\n", " QC checks: ['duplicated_timestamp', 'repetitions']\n", " QC:repetitions.max_N_repetitions: 200\n", " QC:repetitions.sensorwhiteset: 0 whitelisted timestamps\n", " GF methods: []\n", " Label:ok: 0\n", - " Label:repetitions outlier: 5
  • obstype_name :
    temp
    obstype_desc :
    2m - temperature
    obstype_unit :
    degree_Celsius
    MetObs toolkit version :
    1.1.0a1
    QC checks :
    ['duplicated_timestamp', 'repetitions']
    QC:repetitions.max_N_repetitions :
    200
    QC:repetitions.sensorwhiteset :
    0 whitelisted timestamps
    GF methods :
    []
    Label:ok :
    0
    Label:repetitions outlier :
    5
  • " ], "text/plain": [ " Size: 35kB\n", @@ -1927,7 +2121,7 @@ " obstype_name: temp\n", " obstype_desc: 2m - temperature\n", " obstype_unit: degree_Celsius\n", - " MetObs toolkit version: 1.0.0\n", + " MetObs toolkit version: 1.1.0a1\n", " QC checks: ['duplicated_timestamp', 'repetitions']\n", " QC:repetitions.max_N_repetitions: 200\n", " QC:repetitions.sensorwhiteset: 0 whitelisted timestamps\n", @@ -2096,6 +2290,7 @@ " min-width: 300px;\n", " max-width: 700px;\n", " line-height: 1.6;\n", + " padding-bottom: 4px;\n", "}\n", "\n", ".xr-text-repr-fallback {\n", @@ -2106,8 +2301,11 @@ ".xr-header {\n", " padding-top: 6px;\n", " padding-bottom: 6px;\n", - " margin-bottom: 4px;\n", + "}\n", + "\n", + ".xr-header {\n", " border-bottom: solid 1px var(--xr-border-color);\n", + " margin-bottom: 4px;\n", "}\n", "\n", ".xr-header > div,\n", @@ -2118,20 +2316,15 @@ "}\n", "\n", ".xr-obj-type,\n", - ".xr-obj-name,\n", - ".xr-group-name {\n", + ".xr-obj-name {\n", " margin-left: 2px;\n", " margin-right: 10px;\n", "}\n", "\n", - ".xr-group-name::before {\n", - " content: \"📁\";\n", - " padding-right: 0.3em;\n", - "}\n", - "\n", - ".xr-group-name,\n", - ".xr-obj-type {\n", + ".xr-obj-type,\n", + ".xr-group-box-contents > label {\n", " color: var(--xr-font-color2);\n", + " display: block;\n", "}\n", "\n", ".xr-sections {\n", @@ -2146,28 +2339,39 @@ " display: contents;\n", "}\n", "\n", - ".xr-section-item input {\n", - " display: inline-block;\n", + ".xr-section-item > input,\n", + ".xr-group-box-contents > input,\n", + ".xr-array-wrap > input {\n", + " display: block;\n", " opacity: 0;\n", " height: 0;\n", " margin: 0;\n", "}\n", "\n", - ".xr-section-item input + label {\n", + ".xr-section-item > input + label,\n", + ".xr-var-item > input + label {\n", " color: var(--xr-disabled-color);\n", - " border: 2px solid transparent !important;\n", "}\n", "\n", - ".xr-section-item input:enabled + label {\n", + ".xr-section-item > input:enabled + label,\n", + ".xr-var-item > input:enabled + label,\n", + ".xr-array-wrap > input:enabled + label,\n", + ".xr-group-box-contents > input:enabled + label {\n", " cursor: pointer;\n", " color: var(--xr-font-color2);\n", "}\n", "\n", - ".xr-section-item input:focus + label {\n", - " border: 2px solid var(--xr-font-color0) !important;\n", + ".xr-section-item > input:focus-visible + label,\n", + ".xr-var-item > input:focus-visible + label,\n", + ".xr-array-wrap > input:focus-visible + label,\n", + ".xr-group-box-contents > input:focus-visible + label {\n", + " outline: auto;\n", "}\n", "\n", - ".xr-section-item input:enabled + label:hover {\n", + ".xr-section-item > input:enabled + label:hover,\n", + ".xr-var-item > input:enabled + label:hover,\n", + ".xr-array-wrap > input:enabled + label:hover,\n", + ".xr-group-box-contents > input:enabled + label:hover {\n", " color: var(--xr-font-color0);\n", "}\n", "\n", @@ -2175,11 +2379,25 @@ " grid-column: 1;\n", " color: var(--xr-font-color2);\n", " font-weight: 500;\n", + " white-space: nowrap;\n", + "}\n", + "\n", + ".xr-section-summary > em {\n", + " font-weight: normal;\n", + "}\n", + "\n", + ".xr-span-grid {\n", + " grid-column-end: -1;\n", "}\n", "\n", ".xr-section-summary > span {\n", " display: inline-block;\n", - " padding-left: 0.5em;\n", + " padding-left: 0.3em;\n", + "}\n", + "\n", + ".xr-group-box-contents > input:checked + label > span {\n", + " display: inline-block;\n", + " padding-left: 0.6em;\n", "}\n", "\n", ".xr-section-summary-in:disabled + label {\n", @@ -2207,7 +2425,8 @@ "}\n", "\n", ".xr-section-summary,\n", - ".xr-section-inline-details {\n", + ".xr-section-inline-details,\n", + ".xr-group-box-contents > label {\n", " padding-top: 4px;\n", "}\n", "\n", @@ -2216,20 +2435,29 @@ "}\n", "\n", ".xr-section-details {\n", - " display: none;\n", " grid-column: 1 / -1;\n", " margin-top: 4px;\n", " margin-bottom: 5px;\n", "}\n", "\n", + ".xr-section-summary-in ~ .xr-section-details {\n", + " display: none;\n", + "}\n", + "\n", ".xr-section-summary-in:checked ~ .xr-section-details {\n", " display: contents;\n", "}\n", "\n", + ".xr-children {\n", + " display: inline-grid;\n", + " grid-template-columns: 100%;\n", + " grid-column: 1 / -1;\n", + " padding-top: 4px;\n", + "}\n", + "\n", ".xr-group-box {\n", " display: inline-grid;\n", - " grid-template-columns: 0px 20px auto;\n", - " width: 100%;\n", + " grid-template-columns: 0px 30px auto;\n", "}\n", "\n", ".xr-group-box-vline {\n", @@ -2243,13 +2471,43 @@ " grid-column-start: 2;\n", " grid-row-start: 1;\n", " height: 1em;\n", - " width: 20px;\n", + " width: 26px;\n", " border-bottom: 0.2em solid;\n", " border-color: var(--xr-border-color);\n", "}\n", "\n", ".xr-group-box-contents {\n", " grid-column-start: 3;\n", + " padding-bottom: 4px;\n", + "}\n", + "\n", + ".xr-group-box-contents > label::before {\n", + " content: \"📂\";\n", + " padding-right: 0.3em;\n", + "}\n", + "\n", + ".xr-group-box-contents > input:checked + label::before {\n", + " content: \"📁\";\n", + "}\n", + "\n", + ".xr-group-box-contents > input:checked + label {\n", + " padding-bottom: 0px;\n", + "}\n", + "\n", + ".xr-group-box-contents > input:checked ~ .xr-sections {\n", + " display: none;\n", + "}\n", + "\n", + ".xr-group-box-contents > input + label > span {\n", + " display: none;\n", + "}\n", + "\n", + ".xr-group-box-ellipsis {\n", + " font-size: 1.4em;\n", + " font-weight: 900;\n", + " color: var(--xr-font-color2);\n", + " letter-spacing: 0.15em;\n", + " cursor: default;\n", "}\n", "\n", ".xr-array-wrap {\n", @@ -2495,18 +2753,18 @@ " obstype_name: temp\n", " obstype_desc: 2m - temperature\n", " obstype_unit: degree_Celsius\n", - " MetObs toolkit version: 1.0.0\n", + " MetObs toolkit version: 1.1.0a1\n", " QC checks: ['duplicated_timestamp', 'repetitions']\n", " QC:repetitions.max_N_repetitions: 200\n", " QC:repetitions.sensorwhiteset: 0 whitelisted timestamps\n", " GF methods: []\n", " Label:ok: 0\n", - " Label:repetitions outlier: 5
  • obstype_name :
    temp
    obstype_desc :
    2m - temperature
    obstype_unit :
    degree_Celsius
    MetObs toolkit version :
    1.1.0a1
    QC checks :
    ['duplicated_timestamp', 'repetitions']
    QC:repetitions.max_N_repetitions :
    200
    QC:repetitions.sensorwhiteset :
    0 whitelisted timestamps
    GF methods :
    []
    Label:ok :
    0
    Label:repetitions outlier :
    5
  • " ], "text/plain": [ " Size: 328kB\n", @@ -2525,7 +2783,7 @@ " obstype_name: temp\n", " obstype_desc: 2m - temperature\n", " obstype_unit: degree_Celsius\n", - " MetObs toolkit version: 1.0.0\n", + " MetObs toolkit version: 1.1.0a1\n", " QC checks: ['duplicated_timestamp', 'repetitions']\n", " QC:repetitions.max_N_repetitions: 200\n", " QC:repetitions.sensorwhiteset: 0 whitelisted timestamps\n", @@ -2697,6 +2955,7 @@ " min-width: 300px;\n", " max-width: 700px;\n", " line-height: 1.6;\n", + " padding-bottom: 4px;\n", "}\n", "\n", ".xr-text-repr-fallback {\n", @@ -2707,8 +2966,11 @@ ".xr-header {\n", " padding-top: 6px;\n", " padding-bottom: 6px;\n", - " margin-bottom: 4px;\n", + "}\n", + "\n", + ".xr-header {\n", " border-bottom: solid 1px var(--xr-border-color);\n", + " margin-bottom: 4px;\n", "}\n", "\n", ".xr-header > div,\n", @@ -2719,20 +2981,15 @@ "}\n", "\n", ".xr-obj-type,\n", - ".xr-obj-name,\n", - ".xr-group-name {\n", + ".xr-obj-name {\n", " margin-left: 2px;\n", " margin-right: 10px;\n", "}\n", "\n", - ".xr-group-name::before {\n", - " content: \"📁\";\n", - " padding-right: 0.3em;\n", - "}\n", - "\n", - ".xr-group-name,\n", - ".xr-obj-type {\n", + ".xr-obj-type,\n", + ".xr-group-box-contents > label {\n", " color: var(--xr-font-color2);\n", + " display: block;\n", "}\n", "\n", ".xr-sections {\n", @@ -2747,28 +3004,39 @@ " display: contents;\n", "}\n", "\n", - ".xr-section-item input {\n", - " display: inline-block;\n", + ".xr-section-item > input,\n", + ".xr-group-box-contents > input,\n", + ".xr-array-wrap > input {\n", + " display: block;\n", " opacity: 0;\n", " height: 0;\n", " margin: 0;\n", "}\n", "\n", - ".xr-section-item input + label {\n", + ".xr-section-item > input + label,\n", + ".xr-var-item > input + label {\n", " color: var(--xr-disabled-color);\n", - " border: 2px solid transparent !important;\n", "}\n", "\n", - ".xr-section-item input:enabled + label {\n", + ".xr-section-item > input:enabled + label,\n", + ".xr-var-item > input:enabled + label,\n", + ".xr-array-wrap > input:enabled + label,\n", + ".xr-group-box-contents > input:enabled + label {\n", " cursor: pointer;\n", " color: var(--xr-font-color2);\n", "}\n", "\n", - ".xr-section-item input:focus + label {\n", - " border: 2px solid var(--xr-font-color0) !important;\n", + ".xr-section-item > input:focus-visible + label,\n", + ".xr-var-item > input:focus-visible + label,\n", + ".xr-array-wrap > input:focus-visible + label,\n", + ".xr-group-box-contents > input:focus-visible + label {\n", + " outline: auto;\n", "}\n", "\n", - ".xr-section-item input:enabled + label:hover {\n", + ".xr-section-item > input:enabled + label:hover,\n", + ".xr-var-item > input:enabled + label:hover,\n", + ".xr-array-wrap > input:enabled + label:hover,\n", + ".xr-group-box-contents > input:enabled + label:hover {\n", " color: var(--xr-font-color0);\n", "}\n", "\n", @@ -2776,11 +3044,25 @@ " grid-column: 1;\n", " color: var(--xr-font-color2);\n", " font-weight: 500;\n", + " white-space: nowrap;\n", + "}\n", + "\n", + ".xr-section-summary > em {\n", + " font-weight: normal;\n", + "}\n", + "\n", + ".xr-span-grid {\n", + " grid-column-end: -1;\n", "}\n", "\n", ".xr-section-summary > span {\n", " display: inline-block;\n", - " padding-left: 0.5em;\n", + " padding-left: 0.3em;\n", + "}\n", + "\n", + ".xr-group-box-contents > input:checked + label > span {\n", + " display: inline-block;\n", + " padding-left: 0.6em;\n", "}\n", "\n", ".xr-section-summary-in:disabled + label {\n", @@ -2808,7 +3090,8 @@ "}\n", "\n", ".xr-section-summary,\n", - ".xr-section-inline-details {\n", + ".xr-section-inline-details,\n", + ".xr-group-box-contents > label {\n", " padding-top: 4px;\n", "}\n", "\n", @@ -2817,20 +3100,29 @@ "}\n", "\n", ".xr-section-details {\n", - " display: none;\n", " grid-column: 1 / -1;\n", " margin-top: 4px;\n", " margin-bottom: 5px;\n", "}\n", "\n", + ".xr-section-summary-in ~ .xr-section-details {\n", + " display: none;\n", + "}\n", + "\n", ".xr-section-summary-in:checked ~ .xr-section-details {\n", " display: contents;\n", "}\n", "\n", + ".xr-children {\n", + " display: inline-grid;\n", + " grid-template-columns: 100%;\n", + " grid-column: 1 / -1;\n", + " padding-top: 4px;\n", + "}\n", + "\n", ".xr-group-box {\n", " display: inline-grid;\n", - " grid-template-columns: 0px 20px auto;\n", - " width: 100%;\n", + " grid-template-columns: 0px 30px auto;\n", "}\n", "\n", ".xr-group-box-vline {\n", @@ -2844,13 +3136,43 @@ " grid-column-start: 2;\n", " grid-row-start: 1;\n", " height: 1em;\n", - " width: 20px;\n", + " width: 26px;\n", " border-bottom: 0.2em solid;\n", " border-color: var(--xr-border-color);\n", "}\n", "\n", ".xr-group-box-contents {\n", " grid-column-start: 3;\n", + " padding-bottom: 4px;\n", + "}\n", + "\n", + ".xr-group-box-contents > label::before {\n", + " content: \"📂\";\n", + " padding-right: 0.3em;\n", + "}\n", + "\n", + ".xr-group-box-contents > input:checked + label::before {\n", + " content: \"📁\";\n", + "}\n", + "\n", + ".xr-group-box-contents > input:checked + label {\n", + " padding-bottom: 0px;\n", + "}\n", + "\n", + ".xr-group-box-contents > input:checked ~ .xr-sections {\n", + " display: none;\n", + "}\n", + "\n", + ".xr-group-box-contents > input + label > span {\n", + " display: none;\n", + "}\n", + "\n", + ".xr-group-box-ellipsis {\n", + " font-size: 1.4em;\n", + " font-weight: 900;\n", + " color: var(--xr-font-color2);\n", + " letter-spacing: 0.15em;\n", + " cursor: default;\n", "}\n", "\n", ".xr-array-wrap {\n", @@ -3095,17 +3417,17 @@ " obstype_name: temp\n", " obstype_desc: 2m - temperature\n", " obstype_unit: degree_Celsius\n", - " MetObs toolkit version: 1.0.0\n", + " MetObs toolkit version: 1.1.0a1\n", " QC checks: ['duplicated_timestamp', 'repetitions']\n", " QC:repetitions.max_N_repetitions: 200\n", " QC:repetitions.sensorwhiteset: 0 whitelisted timestamps\n", " GF methods: []\n", " Label:ok: 0\n", - " Label:repetitions outlier: 5
  • obstype_name :
    temp
    obstype_desc :
    2m - temperature
    obstype_unit :
    degree_Celsius
    MetObs toolkit version :
    1.1.0a1
    QC checks :
    ['duplicated_timestamp', 'repetitions']
    QC:repetitions.max_N_repetitions :
    200
    QC:repetitions.sensorwhiteset :
    0 whitelisted timestamps
    GF methods :
    []
    Label:ok :
    0
    Label:repetitions outlier :
    5
  • " ], "text/plain": [ " Size: 35kB\n", @@ -3123,7 +3445,7 @@ " obstype_name: temp\n", " obstype_desc: 2m - temperature\n", " obstype_unit: degree_Celsius\n", - " MetObs toolkit version: 1.0.0\n", + " MetObs toolkit version: 1.1.0a1\n", " QC checks: ['duplicated_timestamp', 'repetitions']\n", " QC:repetitions.max_N_repetitions: 200\n", " QC:repetitions.sensorwhiteset: 0 whitelisted timestamps\n", @@ -3291,6 +3613,7 @@ " min-width: 300px;\n", " max-width: 700px;\n", " line-height: 1.6;\n", + " padding-bottom: 4px;\n", "}\n", "\n", ".xr-text-repr-fallback {\n", @@ -3301,8 +3624,11 @@ ".xr-header {\n", " padding-top: 6px;\n", " padding-bottom: 6px;\n", - " margin-bottom: 4px;\n", + "}\n", + "\n", + ".xr-header {\n", " border-bottom: solid 1px var(--xr-border-color);\n", + " margin-bottom: 4px;\n", "}\n", "\n", ".xr-header > div,\n", @@ -3313,20 +3639,15 @@ "}\n", "\n", ".xr-obj-type,\n", - ".xr-obj-name,\n", - ".xr-group-name {\n", + ".xr-obj-name {\n", " margin-left: 2px;\n", " margin-right: 10px;\n", "}\n", "\n", - ".xr-group-name::before {\n", - " content: \"📁\";\n", - " padding-right: 0.3em;\n", - "}\n", - "\n", - ".xr-group-name,\n", - ".xr-obj-type {\n", + ".xr-obj-type,\n", + ".xr-group-box-contents > label {\n", " color: var(--xr-font-color2);\n", + " display: block;\n", "}\n", "\n", ".xr-sections {\n", @@ -3341,28 +3662,39 @@ " display: contents;\n", "}\n", "\n", - ".xr-section-item input {\n", - " display: inline-block;\n", + ".xr-section-item > input,\n", + ".xr-group-box-contents > input,\n", + ".xr-array-wrap > input {\n", + " display: block;\n", " opacity: 0;\n", " height: 0;\n", " margin: 0;\n", "}\n", "\n", - ".xr-section-item input + label {\n", + ".xr-section-item > input + label,\n", + ".xr-var-item > input + label {\n", " color: var(--xr-disabled-color);\n", - " border: 2px solid transparent !important;\n", "}\n", "\n", - ".xr-section-item input:enabled + label {\n", + ".xr-section-item > input:enabled + label,\n", + ".xr-var-item > input:enabled + label,\n", + ".xr-array-wrap > input:enabled + label,\n", + ".xr-group-box-contents > input:enabled + label {\n", " cursor: pointer;\n", " color: var(--xr-font-color2);\n", "}\n", "\n", - ".xr-section-item input:focus + label {\n", - " border: 2px solid var(--xr-font-color0) !important;\n", + ".xr-section-item > input:focus-visible + label,\n", + ".xr-var-item > input:focus-visible + label,\n", + ".xr-array-wrap > input:focus-visible + label,\n", + ".xr-group-box-contents > input:focus-visible + label {\n", + " outline: auto;\n", "}\n", "\n", - ".xr-section-item input:enabled + label:hover {\n", + ".xr-section-item > input:enabled + label:hover,\n", + ".xr-var-item > input:enabled + label:hover,\n", + ".xr-array-wrap > input:enabled + label:hover,\n", + ".xr-group-box-contents > input:enabled + label:hover {\n", " color: var(--xr-font-color0);\n", "}\n", "\n", @@ -3370,11 +3702,25 @@ " grid-column: 1;\n", " color: var(--xr-font-color2);\n", " font-weight: 500;\n", + " white-space: nowrap;\n", + "}\n", + "\n", + ".xr-section-summary > em {\n", + " font-weight: normal;\n", + "}\n", + "\n", + ".xr-span-grid {\n", + " grid-column-end: -1;\n", "}\n", "\n", ".xr-section-summary > span {\n", " display: inline-block;\n", - " padding-left: 0.5em;\n", + " padding-left: 0.3em;\n", + "}\n", + "\n", + ".xr-group-box-contents > input:checked + label > span {\n", + " display: inline-block;\n", + " padding-left: 0.6em;\n", "}\n", "\n", ".xr-section-summary-in:disabled + label {\n", @@ -3402,7 +3748,8 @@ "}\n", "\n", ".xr-section-summary,\n", - ".xr-section-inline-details {\n", + ".xr-section-inline-details,\n", + ".xr-group-box-contents > label {\n", " padding-top: 4px;\n", "}\n", "\n", @@ -3411,20 +3758,29 @@ "}\n", "\n", ".xr-section-details {\n", - " display: none;\n", " grid-column: 1 / -1;\n", " margin-top: 4px;\n", " margin-bottom: 5px;\n", "}\n", "\n", + ".xr-section-summary-in ~ .xr-section-details {\n", + " display: none;\n", + "}\n", + "\n", ".xr-section-summary-in:checked ~ .xr-section-details {\n", " display: contents;\n", "}\n", "\n", + ".xr-children {\n", + " display: inline-grid;\n", + " grid-template-columns: 100%;\n", + " grid-column: 1 / -1;\n", + " padding-top: 4px;\n", + "}\n", + "\n", ".xr-group-box {\n", " display: inline-grid;\n", - " grid-template-columns: 0px 20px auto;\n", - " width: 100%;\n", + " grid-template-columns: 0px 30px auto;\n", "}\n", "\n", ".xr-group-box-vline {\n", @@ -3438,13 +3794,43 @@ " grid-column-start: 2;\n", " grid-row-start: 1;\n", " height: 1em;\n", - " width: 20px;\n", + " width: 26px;\n", " border-bottom: 0.2em solid;\n", " border-color: var(--xr-border-color);\n", "}\n", "\n", ".xr-group-box-contents {\n", " grid-column-start: 3;\n", + " padding-bottom: 4px;\n", + "}\n", + "\n", + ".xr-group-box-contents > label::before {\n", + " content: \"📂\";\n", + " padding-right: 0.3em;\n", + "}\n", + "\n", + ".xr-group-box-contents > input:checked + label::before {\n", + " content: \"📁\";\n", + "}\n", + "\n", + ".xr-group-box-contents > input:checked + label {\n", + " padding-bottom: 0px;\n", + "}\n", + "\n", + ".xr-group-box-contents > input:checked ~ .xr-sections {\n", + " display: none;\n", + "}\n", + "\n", + ".xr-group-box-contents > input + label > span {\n", + " display: none;\n", + "}\n", + "\n", + ".xr-group-box-ellipsis {\n", + " font-size: 1.4em;\n", + " font-weight: 900;\n", + " color: var(--xr-font-color2);\n", + " letter-spacing: 0.15em;\n", + " cursor: default;\n", "}\n", "\n", ".xr-array-wrap {\n", @@ -3678,88 +4064,40 @@ "Dimensions: (name: 28, kind: 2, datetime: 4320)\n", "Coordinates:\n", " * name (name) <U9 1kB 'vlinder01' 'vlinder02' ... 'vlinder28'\n", - " * kind (kind) <U5 40B 'obs' 'label'\n", - " * datetime (datetime) datetime64[ns] 35kB 2022-09-01 ... 2022-09-15T...\n", " lat (name) float64 224B 50.98 51.02 51.32 ... 51.16 51.06 51.04\n", " lon (name) float64 224B 3.816 3.71 4.952 ... 4.998 3.728 3.77\n", + " school (name) <U29 3kB 'UGent' 'UGent' ... 'GO! Ath.'\n", + " * kind (kind) <U5 40B 'obs' 'label'\n", + " * datetime (datetime) datetime64[ns] 35kB 2022-09-01 ... 2022-09-15T...\n", " altitude float64 8B nan\n", " LCZ float64 8B nan\n", - " school (name) <U29 3kB 'UGent' 'UGent' ... 'GO! Ath.'\n", "Data variables:\n", - " wind_speed (name, kind, datetime) float64 2MB 1.556 1.528 ... 0.0 0.0\n", - " wind_direction (name, kind, datetime) float64 2MB 65.0 75.0 ... 0.0 0.0\n", " humidity (name, kind, datetime) float64 2MB 65.0 65.0 ... 0.0 0.0\n", - " temp (name, kind, datetime) float64 2MB 18.8 18.8 ... 0.0 0.0" ], "text/plain": [ " Size: 8MB\n", "Dimensions: (name: 28, kind: 2, datetime: 4320)\n", "Coordinates:\n", " * name (name) div,\n", @@ -4000,20 +4390,15 @@ "}\n", "\n", ".xr-obj-type,\n", - ".xr-obj-name,\n", - ".xr-group-name {\n", + ".xr-obj-name {\n", " margin-left: 2px;\n", " margin-right: 10px;\n", "}\n", "\n", - ".xr-group-name::before {\n", - " content: \"📁\";\n", - " padding-right: 0.3em;\n", - "}\n", - "\n", - ".xr-group-name,\n", - ".xr-obj-type {\n", + ".xr-obj-type,\n", + ".xr-group-box-contents > label {\n", " color: var(--xr-font-color2);\n", + " display: block;\n", "}\n", "\n", ".xr-sections {\n", @@ -4028,28 +4413,39 @@ " display: contents;\n", "}\n", "\n", - ".xr-section-item input {\n", - " display: inline-block;\n", + ".xr-section-item > input,\n", + ".xr-group-box-contents > input,\n", + ".xr-array-wrap > input {\n", + " display: block;\n", " opacity: 0;\n", " height: 0;\n", " margin: 0;\n", "}\n", "\n", - ".xr-section-item input + label {\n", + ".xr-section-item > input + label,\n", + ".xr-var-item > input + label {\n", " color: var(--xr-disabled-color);\n", - " border: 2px solid transparent !important;\n", "}\n", "\n", - ".xr-section-item input:enabled + label {\n", + ".xr-section-item > input:enabled + label,\n", + ".xr-var-item > input:enabled + label,\n", + ".xr-array-wrap > input:enabled + label,\n", + ".xr-group-box-contents > input:enabled + label {\n", " cursor: pointer;\n", " color: var(--xr-font-color2);\n", "}\n", "\n", - ".xr-section-item input:focus + label {\n", - " border: 2px solid var(--xr-font-color0) !important;\n", + ".xr-section-item > input:focus-visible + label,\n", + ".xr-var-item > input:focus-visible + label,\n", + ".xr-array-wrap > input:focus-visible + label,\n", + ".xr-group-box-contents > input:focus-visible + label {\n", + " outline: auto;\n", "}\n", "\n", - ".xr-section-item input:enabled + label:hover {\n", + ".xr-section-item > input:enabled + label:hover,\n", + ".xr-var-item > input:enabled + label:hover,\n", + ".xr-array-wrap > input:enabled + label:hover,\n", + ".xr-group-box-contents > input:enabled + label:hover {\n", " color: var(--xr-font-color0);\n", "}\n", "\n", @@ -4057,11 +4453,25 @@ " grid-column: 1;\n", " color: var(--xr-font-color2);\n", " font-weight: 500;\n", + " white-space: nowrap;\n", + "}\n", + "\n", + ".xr-section-summary > em {\n", + " font-weight: normal;\n", + "}\n", + "\n", + ".xr-span-grid {\n", + " grid-column-end: -1;\n", "}\n", "\n", ".xr-section-summary > span {\n", " display: inline-block;\n", - " padding-left: 0.5em;\n", + " padding-left: 0.3em;\n", + "}\n", + "\n", + ".xr-group-box-contents > input:checked + label > span {\n", + " display: inline-block;\n", + " padding-left: 0.6em;\n", "}\n", "\n", ".xr-section-summary-in:disabled + label {\n", @@ -4089,7 +4499,8 @@ "}\n", "\n", ".xr-section-summary,\n", - ".xr-section-inline-details {\n", + ".xr-section-inline-details,\n", + ".xr-group-box-contents > label {\n", " padding-top: 4px;\n", "}\n", "\n", @@ -4098,20 +4509,29 @@ "}\n", "\n", ".xr-section-details {\n", - " display: none;\n", " grid-column: 1 / -1;\n", " margin-top: 4px;\n", " margin-bottom: 5px;\n", "}\n", "\n", + ".xr-section-summary-in ~ .xr-section-details {\n", + " display: none;\n", + "}\n", + "\n", ".xr-section-summary-in:checked ~ .xr-section-details {\n", " display: contents;\n", "}\n", "\n", + ".xr-children {\n", + " display: inline-grid;\n", + " grid-template-columns: 100%;\n", + " grid-column: 1 / -1;\n", + " padding-top: 4px;\n", + "}\n", + "\n", ".xr-group-box {\n", " display: inline-grid;\n", - " grid-template-columns: 0px 20px auto;\n", - " width: 100%;\n", + " grid-template-columns: 0px 30px auto;\n", "}\n", "\n", ".xr-group-box-vline {\n", @@ -4125,13 +4545,43 @@ " grid-column-start: 2;\n", " grid-row-start: 1;\n", " height: 1em;\n", - " width: 20px;\n", + " width: 26px;\n", " border-bottom: 0.2em solid;\n", " border-color: var(--xr-border-color);\n", "}\n", "\n", ".xr-group-box-contents {\n", " grid-column-start: 3;\n", + " padding-bottom: 4px;\n", + "}\n", + "\n", + ".xr-group-box-contents > label::before {\n", + " content: \"📂\";\n", + " padding-right: 0.3em;\n", + "}\n", + "\n", + ".xr-group-box-contents > input:checked + label::before {\n", + " content: \"📁\";\n", + "}\n", + "\n", + ".xr-group-box-contents > input:checked + label {\n", + " padding-bottom: 0px;\n", + "}\n", + "\n", + ".xr-group-box-contents > input:checked ~ .xr-sections {\n", + " display: none;\n", + "}\n", + "\n", + ".xr-group-box-contents > input + label > span {\n", + " display: none;\n", + "}\n", + "\n", + ".xr-group-box-ellipsis {\n", + " font-size: 1.4em;\n", + " font-weight: 900;\n", + " color: var(--xr-font-color2);\n", + " letter-spacing: 0.15em;\n", + " cursor: default;\n", "}\n", "\n", ".xr-array-wrap {\n", @@ -4379,16 +4829,16 @@ " obstype_name: temp\n", " obstype_desc: 2m - temperature\n", " obstype_unit: degree_Celsius\n", - " MetObs toolkit version: 1.0.0\n", + " MetObs toolkit version: 1.1.0a1\n", " QC checks: ['duplicated_timestamp']\n", " GF methods: []\n", - " Label:ok: 0
  • obstype_name :
    temp
    obstype_desc :
    2m - temperature
    obstype_unit :
    degree_Celsius
    MetObs toolkit version :
    1.1.0a1
    QC checks :
    ['duplicated_timestamp']
    GF methods :
    []
    Label:ok :
    0
  • " ], "text/plain": [ " Size: 69kB\n", @@ -4409,7 +4859,7 @@ " obstype_name: temp\n", " obstype_desc: 2m - temperature\n", " obstype_unit: degree_Celsius\n", - " MetObs toolkit version: 1.0.0\n", + " MetObs toolkit version: 1.1.0a1\n", " QC checks: ['duplicated_timestamp']\n", " GF methods: []\n", " Label:ok: 0" @@ -4453,7 +4903,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": ".venv", "language": "python", "name": "python3" }, diff --git a/pyproject.toml b/pyproject.toml index bdd3c2beb..b44809dbc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ requires = ["poetry-core"] [project] name = "MetObs-toolkit" -version = "1.0.3" +version = "1.1.0a1" license = "MIT" license-files = ["LICENSE"] authors = [{name = "Thomas Vergauwen", email = "thomas.vergauwen@ugent.be"}] @@ -45,9 +45,13 @@ dependencies=[ "xarray>=2022.3.0,<2027.0.0", "pyarrow>=21.0.0,<22.0.0", "netcdf4>=1.7.2,<2.0.0", - "pytz>=2024.1,<2027.1" + "pytz>=2024.1,<2027.1", + "scikit-learn>=1.3,<2.0" ] +[tool.poetry] +packages = [{include = "metobs_toolkit", from = "src"}] + [tool.poetry.group.dev.dependencies] jedi = "^0.19" nbconvert = "^7.16.6" @@ -59,9 +63,11 @@ pretty-errors = "^1.2.25" pytest = "^8.3.5" pytest-mpl = "^0.17.0" pytest-cov = "^6.1.1" +pytest-dependency = ">=0.6.0,<0.7.0" nbval = "^0.11.0" -black = "^25.1.0" +black = "^26.3.1" jupyter = "^1.1.1" +pylint = "^4.0.5" [tool.poetry.group.documentation.dependencies] ipykernel = "^6.29.5" diff --git a/pytest.ini b/pytest.ini index e73350086..8620ac8bc 100644 --- a/pytest.ini +++ b/pytest.ini @@ -4,6 +4,7 @@ testpaths = docs/examples docs/topics addopts = -v --tb=short --nbval-lax --mpl --mpl-generate-summary=html +mpl-baseline-path = tests/baseline markers = demo: mark test as a demo test --mpl: enable matplotlib image comparison tests diff --git a/src/metobs_toolkit/backend_collection/argumentcheckers.py b/src/metobs_toolkit/backend_collection/argumentcheckers.py index a53376b2f..62f163747 100644 --- a/src/metobs_toolkit/backend_collection/argumentcheckers.py +++ b/src/metobs_toolkit/backend_collection/argumentcheckers.py @@ -17,6 +17,29 @@ @log_entry def fmt_timedelta_arg(timedeltaarg, none_is_none=True) -> pd.Timedelta: + """Convert a timedelta-like argument to a :class:`pandas.Timedelta`. + + Parameters + ---------- + timedeltaarg : datetime.timedelta, str, pandas.Timedelta, or None + The timedelta value to convert. Accepted types are + :class:`datetime.timedelta`, :class:`str` (e.g. ``"1h"``), + and :class:`pandas.Timedelta`. ``None`` is accepted when + *none_is_none* is ``True``. + none_is_none : bool, optional + If ``True`` (default), return ``None`` when *timedeltaarg* is ``None``. + + Returns + ------- + pandas.Timedelta or None + The converted timedelta. ``None`` is returned when *timedeltaarg* is + ``None`` and *none_is_none* is ``True``. + + Raises + ------ + MetObsArgumentError + If *timedeltaarg* cannot be converted to a :class:`pandas.Timedelta`. + """ if (none_is_none) & (timedeltaarg is None): return None if isinstance(timedeltaarg, datetimemodule.timedelta): diff --git a/src/metobs_toolkit/backend_collection/decorators.py b/src/metobs_toolkit/backend_collection/decorators.py index 9b6ea4df0..0155d4b4a 100644 --- a/src/metobs_toolkit/backend_collection/decorators.py +++ b/src/metobs_toolkit/backend_collection/decorators.py @@ -5,8 +5,22 @@ def log_entry(func): + """Decorator that logs a DEBUG message each time the decorated function is entered. + + Parameters + ---------- + func : callable + The function to wrap. + + Returns + ------- + callable + Wrapped function that logs entry before delegating to the original. + """ + @wraps(func) def wrapper(*args, **kwargs): + """Call the original function after logging the entry.""" logger.debug(f"Entering {func.__name__}() in {func.__code__.co_filename}") return func(*args, **kwargs) diff --git a/src/metobs_toolkit/backend_collection/dev_collection.py b/src/metobs_toolkit/backend_collection/dev_collection.py index d254d7a0a..cb59838ce 100644 --- a/src/metobs_toolkit/backend_collection/dev_collection.py +++ b/src/metobs_toolkit/backend_collection/dev_collection.py @@ -59,6 +59,30 @@ def wrapped(func: Callable[P, T]) -> Callable[P, T]: def add_new_arg_in_docstr(docstr, newargstr, firstline_indent=8, description_indent=4): + """Insert a new parameter description into an existing numpy-style docstring. + + The new argument string is inserted immediately before the blank line that + closes the ``Parameters`` section. + + Parameters + ---------- + docstr : str + The original docstring in numpy format. + newargstr : str + The parameter description to insert (numpy-style, e.g. + ``"y : str\\n Another parameter."``). + firstline_indent : int, optional + Number of spaces used for the parameter name line indent. + Default is ``8``. + description_indent : int, optional + Additional spaces appended to *firstline_indent* for description + continuation lines. Default is ``4``. + + Returns + ------- + str + The docstring with the new parameter description injected. + """ newargstr = newargstr.lstrip() # drop leading spaces # Remove all leading spaces from each line in the newargstr newargstr = "\n".join(line.lstrip() for line in newargstr.splitlines()) diff --git a/src/metobs_toolkit/backend_collection/df_helpers.py b/src/metobs_toolkit/backend_collection/df_helpers.py index 33a6139d5..367101768 100644 --- a/src/metobs_toolkit/backend_collection/df_helpers.py +++ b/src/metobs_toolkit/backend_collection/df_helpers.py @@ -55,6 +55,23 @@ def convert_to_numeric_series( @log_entry def save_concat(targets, **kwargs): + """Concatenate a list of DataFrames, gracefully handling empty frames. + + If all frames are empty the function returns an empty DataFrame whose + columns and index are the union of those in *targets*. + + Parameters + ---------- + targets : list or iterable of pandas.DataFrame + DataFrames to concatenate. + **kwargs + Additional keyword arguments forwarded to :func:`pandas.concat`. + + Returns + ------- + pandas.DataFrame + Concatenated DataFrame, or an empty DataFrame when all inputs are empty. + """ if not isinstance(targets, list): targets = list(targets) diff --git a/src/metobs_toolkit/qc_collection/distancematrix_func.py b/src/metobs_toolkit/backend_collection/distancematrix_func.py similarity index 100% rename from src/metobs_toolkit/qc_collection/distancematrix_func.py rename to src/metobs_toolkit/backend_collection/distancematrix_func.py diff --git a/src/metobs_toolkit/backend_collection/errorclasses.py b/src/metobs_toolkit/backend_collection/errorclasses.py index 0f6910b2e..1dc8f96b9 100644 --- a/src/metobs_toolkit/backend_collection/errorclasses.py +++ b/src/metobs_toolkit/backend_collection/errorclasses.py @@ -11,6 +11,7 @@ class MetObsMissingFile(Exception): """ def __init__(self, *args, **kwargs) -> None: + """Initialize the exception with optional message arguments.""" super().__init__(*args, **kwargs) @@ -20,6 +21,7 @@ class MetObsSensorDataNotFound(Exception): """ def __init__(self, *args, **kwargs) -> None: + """Initialize the exception with optional message arguments.""" super().__init__(*args, **kwargs) @@ -29,6 +31,7 @@ class MetObsMetadataNotFound(Exception): """ def __init__(self, *args, **kwargs) -> None: + """Initialize the exception with optional message arguments.""" super().__init__(*args, **kwargs) @@ -38,6 +41,7 @@ class MetObsObstypeNotFound(Exception): """ def __init__(self, *args, **kwargs) -> None: + """Initialize the exception with optional message arguments.""" super().__init__(*args, **kwargs) @@ -47,6 +51,7 @@ class MetObsStationNotFound(Exception): """ def __init__(self, *args, **kwargs) -> None: + """Initialize the exception with optional message arguments.""" super().__init__(*args, **kwargs) @@ -56,6 +61,7 @@ class MetObsWrongType(Exception): """ def __init__(self, *args, **kwargs) -> None: + """Initialize the exception with optional message arguments.""" super().__init__(*args, **kwargs) @@ -65,6 +71,7 @@ class MetObsDataAlreadyPresent(Exception): """ def __init__(self, *args, **kwargs) -> None: + """Initialize the exception with optional message arguments.""" super().__init__(*args, **kwargs) @@ -74,6 +81,7 @@ class MetObsQualityControlError(Exception): """ def __init__(self, *args, **kwargs) -> None: + """Initialize the exception with optional message arguments.""" super().__init__(*args, **kwargs) @@ -83,6 +91,7 @@ class MetObsModelDataError(Exception): """ def __init__(self, *args, **kwargs) -> None: + """Initialize the exception with optional message arguments.""" super().__init__(*args, **kwargs) @@ -92,6 +101,7 @@ class MetObsTimeSimplifyError(Exception): """ def __init__(self, *args, **kwargs) -> None: + """Initialize the exception with optional message arguments.""" super().__init__(*args, **kwargs) @@ -101,6 +111,7 @@ class MetObsStationClassError(Exception): """ def __init__(self, *args, **kwargs) -> None: + """Initialize the exception with optional message arguments.""" super().__init__(*args, **kwargs) @@ -110,6 +121,7 @@ class MetObsMissingArgument(Exception): """ def __init__(self, *args, **kwargs) -> None: + """Initialize the exception with optional message arguments.""" super().__init__(*args, **kwargs) @@ -119,6 +131,7 @@ class MetObsGEEDatasetError(Exception): """ def __init__(self, *args, **kwargs) -> None: + """Initialize the exception with optional message arguments.""" super().__init__(*args, **kwargs) @@ -126,6 +139,7 @@ class MetObsUnitsIncompatible(Exception): """Raised when an incompatible unit is set.""" def __init__(self, *args, **kwargs) -> None: + """Initialize the exception with optional message arguments.""" super().__init__(*args, **kwargs) @@ -133,6 +147,7 @@ class MetObsUnitUnknown(Exception): """Raised when an invalid unit is set.""" def __init__(self, *args, **kwargs) -> None: + """Initialize the exception with optional message arguments.""" super().__init__(*args, **kwargs) @@ -142,6 +157,7 @@ class MetObsTemplateError(Exception): """ def __init__(self, *args, **kwargs) -> None: + """Initialize the exception with optional message arguments.""" super().__init__(*args, **kwargs) @@ -149,6 +165,7 @@ class MetObsArgumentError(Exception): """Raised when an argument could not be converted to a target type.""" def __init__(self, *args, **kwargs) -> None: + """Initialize the exception with optional message arguments.""" super().__init__(*args, **kwargs) @@ -156,6 +173,7 @@ class MetObsInconsistentStationName(Exception): """Special case only --> mismatch in data-metadata stationnames""" def __init__(self, *args, **kwargs) -> None: + """Initialize the exception with optional message arguments.""" super().__init__(*args, **kwargs) @@ -163,6 +181,7 @@ class MetObsAdditionError(Exception): """Raised when addition failed (often different _id())""" def __init__(self, *args, **kwargs) -> None: + """Initialize the exception with optional message arguments.""" super().__init__(*args, **kwargs) @@ -170,6 +189,15 @@ class MetObsNonUniqueIDs(Exception): """Raised when non-unique ID's are expected, but duplicates are found""" def __init__(self, *args, **kwargs) -> None: + """Initialize the exception with optional message arguments.""" + super().__init__(*args, **kwargs) + + +class MetObsInternalError(Exception): + """Raised when an internal error is detected.""" + + def __init__(self, *args, **kwargs) -> None: + """Initialize the exception with optional message arguments.""" super().__init__(*args, **kwargs) diff --git a/src/metobs_toolkit/backend_collection/printing_collection.py b/src/metobs_toolkit/backend_collection/printing_collection.py index b2a0b08f1..2d2fb0ad2 100644 --- a/src/metobs_toolkit/backend_collection/printing_collection.py +++ b/src/metobs_toolkit/backend_collection/printing_collection.py @@ -6,6 +6,18 @@ def print_fmt_title(title): + """Return a formatted title string surrounded by border characters. + + Parameters + ---------- + title : str + The title text to display. + + Returns + ------- + str + The formatted title string with border lines and centred title text. + """ retstr = title_char * max_n_chars + "\n" retstr += str(title).center(max_n_chars) + "\n" retstr += title_char * max_n_chars + "\n" @@ -14,6 +26,18 @@ def print_fmt_title(title): def print_fmt_section(section): + """Return a formatted section header string. + + Parameters + ---------- + section : str + The section name to display. + + Returns + ------- + str + The formatted section header string surrounded by dashes. + """ printsection = "--- " + str(section) + " ---" retstr = "\n" + printsection + "\n\n" return retstr diff --git a/src/metobs_toolkit/dataset.py b/src/metobs_toolkit/dataset.py index 92d5445b8..dd68a5256 100644 --- a/src/metobs_toolkit/dataset.py +++ b/src/metobs_toolkit/dataset.py @@ -12,9 +12,11 @@ import numpy as np import concurrent.futures + if TYPE_CHECKING: from matplotlib.pyplot import Axes from xarray import Dataset as xrDataset + from matplotlib.pyplot import Figure from metobs_toolkit.backend_collection.df_helpers import ( save_concat, @@ -35,12 +37,18 @@ fmt_timedelta_arg, fmt_datetime_arg, ) +from metobs_toolkit.backend_collection.distancematrix_func import ( + generate_distance_matrix, +) from metobs_toolkit.backend_collection.uniqueness import join_collections from metobs_toolkit.xrconversions import dataset_to_xr from metobs_toolkit.gf_collection.overview_df_constructors import ( dataset_gap_status_overview_df, ) +from metobs_toolkit.qc_collection.overview_df_constructor import ( + dataset_qc_overview_df, +) from metobs_toolkit.backend_collection.filter_modeldatadf import filter_modeldatadf from metobs_toolkit.timestampmatcher import simplify_time from metobs_toolkit.obstypes import tlk_obstypes @@ -372,6 +380,34 @@ def present_observations(self) -> list: allobs.update(sta.present_observations) return sorted(list(allobs)) + def create_distancematrix(self) -> pd.DataFrame: + """Compute pairwise great-circle distances between all stations. + + Calculates a symmetric distance matrix (in meters) between all stations + using the haversine formula. Stations that do not have coordinates + assigned are excluded and a warning is logged. + + Returns + ------- + pandas.DataFrame + Symmetric square DataFrame where both the index and columns are + station names. Each cell contains the great-circle distance in + meters between the corresponding pair of stations. The diagonal + contains zeros. + + """ + metadf = self.metadf + + exclude_stations = [ + sta.name for sta in self.stations if not sta.site.flag_has_coordinates() + ] + if exclude_stations: + logger.warning( + f"Excluding stations without coordinates from distance matrix: {exclude_stations}" + ) + metadf = metadf[~metadf.index.isin(exclude_stations)] + return generate_distance_matrix(metadf) + # ------------------------------------------ # Extracting data # ------------------------------------------ @@ -642,8 +678,7 @@ def sync_records( accros stations. Warning - ---------- - + ------- * Since the gaps depend on the record’s frequency and origin, all gaps are removed and re-located. All progress in gap(filling) will be lost. * Cumulative tolerance errors can be introduced when this method is called multiple times. @@ -932,8 +967,8 @@ def import_data_from_file( ) -> None: """Import observational data and metadata from files. - Importing data requires a ´Template´ which is constructed from a template file (JSON). - (Use ´´metobs_toolkit.build_template_prompt()´´ to create a template file). + Importing data requires a `Template` which is constructed from a template file (JSON). + (Use ``metobs_toolkit.build_template_prompt()`` to create a template file). If `input_data_file` is provided, the method reads the raw observational data (supported formats: CSV, Parquet). A basic quality control (duplicate timestamps @@ -942,14 +977,14 @@ def import_data_from_file( The method performs the following steps: - * Estimates the frequency of observations using the ´freq_estimation_method´. + * Estimates the frequency of observations using the `freq_estimation_method`. * Simplifies the estimated frequency and origin timestamps based on tolerances. - * Alligns the raw timestamps with target timestamps (by origin, and freq) using + * Aligns the raw timestamps with target timestamps (by origin, and freq) using a nearest merge, considering a specified timestamp tolerance. * Executes checks for duplicates and invalid input. * Identifies gaps in the data. - if `input_metadata_file` is provided, the method reads the metadata + If `input_metadata_file` is provided, the method reads the metadata (supported formats: CSV, Parquet). Parameters @@ -1816,7 +1851,13 @@ def gross_value_check( whiteset=whiteset, ) if use_mp: - with concurrent.futures.ProcessPoolExecutor() as executor: + num_cores = Settings.get("use_N_cores_for_MP") + logger.debug( + f"Distributing gross_value_check computations over {num_cores} cores." + ) + with concurrent.futures.ProcessPoolExecutor( + max_workers=num_cores + ) as executor: stationgenerator = executor.map( _qc_grossvalue_generatorfunc, func_feed_list ) @@ -1851,7 +1892,13 @@ def persistence_check( whiteset=whiteset, ) if use_mp: - with concurrent.futures.ProcessPoolExecutor() as executor: + num_cores = Settings.get("use_N_cores_for_MP") + logger.debug( + f"Distributing persistence_check computations over {num_cores} cores." + ) + with concurrent.futures.ProcessPoolExecutor( + max_workers=num_cores + ) as executor: stationgenerator = executor.map( _qc_persistence_generatorfunc, func_feed_list ) @@ -1883,7 +1930,13 @@ def repetitions_check( ) if use_mp: - with concurrent.futures.ProcessPoolExecutor() as executor: + num_cores = Settings.get("use_N_cores_for_MP") + logger.debug( + f"Distributing repetitions_check computations over {num_cores} cores." + ) + with concurrent.futures.ProcessPoolExecutor( + max_workers=num_cores + ) as executor: stationgenerator = executor.map( _qc_repetitions_generatorfunc, func_feed_list ) @@ -1917,7 +1970,13 @@ def step_check( ) if use_mp: - with concurrent.futures.ProcessPoolExecutor() as executor: + num_cores = Settings.get("use_N_cores_for_MP") + logger.debug( + f"Distributing step_check computations over {num_cores} cores." + ) + with concurrent.futures.ProcessPoolExecutor( + max_workers=num_cores + ) as executor: stationgenerator = executor.map(_qc_step_generatorfunc, func_feed_list) qced_stations = list(stationgenerator) else: @@ -1957,7 +2016,13 @@ def window_variation_check( ) if use_mp: - with concurrent.futures.ProcessPoolExecutor() as executor: + num_cores = Settings.get("use_N_cores_for_MP") + logger.debug( + f"Distributing window_variation_check computations over {num_cores} cores." + ) + with concurrent.futures.ProcessPoolExecutor( + max_workers=num_cores + ) as executor: stationgenerator = executor.map( _qc_window_var_generatorfunc, func_feed_list ) @@ -1973,87 +2038,117 @@ def buddy_check( obstype: str = "temp", spatial_buddy_radius: Union[int, float] = 10000, min_sample_size: int = 4, + max_sample_size: Union[int, None] = None, max_alt_diff: Union[int, float, None] = None, - min_std: Union[int, float] = 1.0, + min_sample_spread: Union[int, float] = 1.0, + min_buddy_distance: Union[int, float] = 0.0, spatial_z_threshold: Union[int, float] = 3.1, N_iter: int = 2, instantaneous_tolerance: Union[str, pd.Timedelta] = pd.Timedelta("4min"), lapserate: Union[float, None] = None, # -0.0065 for temperature (in °C) whiteset: WhiteSet = WhiteSet(), + use_z_robust_method: bool = True, use_mp: bool = True, + min_std=None, ): """Spatial buddy check. The buddy check compares an observation against its neighbors - (i.e. spatial buddies). The check loops over all the groups, which are stations - within a radius of each other. For each group, the z-value of the reference - observation is computed given the sample of spatial buddies. If one (or more) - exceeds the `spatial_z_threshold`, the most extreme (=baddest) observation of - that group is labeled as an outlier. + (i.e. spatial buddies). The check loops over all stations, treating + each as the center of a buddy group formed by nearby stations. For + each center station, the z-score is computed from the buddy sample. + If the z-score exceeds `spatial_z_threshold`, the center station's + observation is labeled as an outlier. - Multiple iterations of this checks can be done using the N_iter. + Multiple iterations of this check can be done using `N_iter`. A schematic step-by-step description of the buddy check: #. A distance matrix is constructed for all interdistances between the stations. This is done using the haversine approximation. #. Groups of spatial buddies (neighbours) are created by using the - `spatial_buddy_radius.` These groups are further filtered by: + `spatial_buddy_radius` and `min_buddy_distance`. Only stations within + the distance range [min_buddy_distance, spatial_buddy_radius] are + considered as buddies. These groups are further filtered by: - * removing stations from the groups that differ to much in altitude + * removing stations from the groups that differ too much in altitude (based on the `max_alt_diff`) * removing groups of buddies that are too small (based on the `min_sample_size`) #. Observations per group are synchronized in time (using the - `instantaneous_tolerance` for allignment). - #. If a `lapsrate` is specified, the observations are corrected for + `instantaneous_tolerance` for alignment). + #. If a `lapserate` is specified, the observations are corrected for altitude differences. - #. The following steps are repeated for `N-iter` iterations: - - #. The values of outliers flaged by a previous iteration are converted to - NaN's. Therefore they are not used in any following score or sample. - #. For each buddy group: - - * The mean, standard deviation (std), and sample size are computed. - * If the std is lower than the `minimum_std`, it is replaced by the - minimum std. - * Chi values are calculated for all records. - * For each timestamp the record with the highest Chi is tested if - it is larger then spatial_z_threshold. If so, that record is - flagged as an outlier. It will be ignored in the next iteration. + #. The following steps are repeated for `N_iter` iterations: + + #. The values of outliers flagged by a previous iteration are + converted to NaN's. Therefore they are not used in any following + score or sample. + #. For each center station: + + * The sample mean, spread (std or MAD depending on + `use_z_robust_method`), and sample size are computed from the + buddy stations (center station excluded). + * If the spread is lower than `min_sample_spread`, it is replaced + by `min_sample_spread`. + * The z-score of the center station is calculated. + * If the z-score exceeds `spatial_z_threshold`, the center + station's observation is flagged as an outlier. It will be + ignored in the next iteration. + #. If `whiteset` is provided, any outliers that match the white-listed timestamps are removed from the outlier set for the current iteration. White-listed records participate in all buddy check calculations but are not flagged as outliers in the final results. - Parameters ---------- obstype : str, optional The target observation to check. Default is "temp". - spatial_buddy_radius : int | float, optional + spatial_buddy_radius : int or float, optional The radius to define spatial neighbors in meters. Default is 10000. min_sample_size : int, optional The minimum sample size to calculate statistics on. Default is 4. - max_alt_diff : int | float | None, optional + max_sample_size : int or None, optional + The maximum number of spatial buddies to use per station. If not + None, the spatial buddies for each station are sorted by distance + and only the nearest ``max_sample_size`` are kept. Must be larger + than ``min_sample_size`` when specified. The default is None + (no limit). + max_alt_diff : int or float or None, optional The maximum altitude difference allowed for buddies. Default is None. - min_std : int | float, optional - The minimum standard deviation for sample statistics. Default is 1.0. - spatial_z_threshold : int | float, optional - The threshold (std units) for flagging observations as outliers. Default is 3.1. + min_sample_spread : int or float, optional + The minimum sample spread for sample statistics. When + `use_z_robust_method` is True, this is the minimum MAD to use + (avoids division by near-zero). When `use_z_robust_method` is + False, this is the minimum standard deviation. This parameter + helps represent the accuracy of the observations. Default is 1.0. + min_buddy_distance : int or float, optional + The minimum distance (in meters) required between a station and + its buddies. Stations closer than this distance will be excluded + from the buddy group. Default is 0.0 (no minimum distance). + spatial_z_threshold : int or float, optional + The threshold (in z-score units) for flagging observations as + outliers. Default is 3.1. N_iter : int, optional The number of iterations to perform the buddy check. Default is 2. - instantaneous_tolerance : str | pd.Timedelta, optional - The maximum time difference allowed for synchronizing observations. Default is pd.Timedelta("4min"). - lapserate : int | float | None, optional - Describe how the obstype changes with altitude (in meters). Default is None. + instantaneous_tolerance : str or pd.Timedelta, optional + The maximum time difference allowed for synchronizing observations. + Default is pd.Timedelta("4min"). + lapserate : float or None, optional + Describe how the obstype changes with altitude (in meters). + Default is None. whiteset : WhiteSet, optional - A WhiteSet instance containing timestamps that should be excluded from outlier detection. - The WhiteSet is used to create station-specific and obstype-specific whitelists before - applying the buddy check. White-listed records participate in all buddy check iterations - as regular records but are not flagged as outliers in the final results. - The default is an empty WhiteSet(). + A WhiteSet instance containing timestamps that should be excluded + from outlier detection. The WhiteSet is used to create + station-specific and obstype-specific whitelists before applying + the buddy check. White-listed records participate in all buddy + check iterations as regular records but are not flagged as + outliers in the final results. The default is an empty WhiteSet(). + use_z_robust_method : bool, optional + If True, the robust z-score method (median/MAD) is used. If False, + the classic z-score method (mean/std) is used. Default is True. use_mp : bool, optional Use multiprocessing to speed up the buddy check. Default is True. @@ -2062,97 +2157,72 @@ def buddy_check( None Notes - ------ - * This method modifies the outliers in place and does not return anything. - You can use the `outliersdf` property to view all flagged outliers. - * The altitude of the stations can be extracted from GEE by using the `Dataset.get_altitude()` method. - * White-listed records from the WhiteSet participate in all buddy check calculations but are not flagged as outliers in the final results. + ----- + * This method modifies the outliers in place and does not return + anything. You can use the `outliersdf` property to view all flagged + outliers. + * The altitude of the stations can be extracted from GEE by using the + `Dataset.get_altitude()` method. + * White-listed records participate in all buddy check calculations but + are not flagged as outliers in the final results. - """ + See Also + -------- + buddy_check_with_safetynets : Buddy check with configurable safety nets. - instantaneous_tolerance = fmt_timedelta_arg(instantaneous_tolerance) - if (lapserate is not None) | (max_alt_diff is not None): - if not all([sta.site.flag_has_altitude() for sta in self.stations]): - raise MetObsMetadataNotFound( - "Not all stations have altitude data, lapserate correction and max_alt_diff filtering could not be applied." - ) + Examples + -------- + Apply buddy check on temperature observations: - qc_kwargs = dict( + >>> dataset.buddy_check(obstype="temp") + + Apply buddy check with custom radius and threshold: + + >>> dataset.buddy_check( + ... obstype="temp", + ... spatial_buddy_radius=15000, + ... spatial_z_threshold=2.5, + ... N_iter=3, + ... ) + + """ + if min_std is not None: + raise DeprecationWarning( + "The min_std parameter is deprecated and replaced by the min_sample_spread parameter. The min_sample_spread serves as the minimum STD, if use_z_robust_method is False. Else it acts as the minimum MAD (median absolute deviation from median)." + ) + + # Delegate to buddy_check_with_safetynets with no safety nets + self.buddy_check_with_safetynets( obstype=obstype, spatial_buddy_radius=spatial_buddy_radius, - spatial_min_sample_size=min_sample_size, + safety_net_configs=None, + min_sample_size=min_sample_size, + max_sample_size=max_sample_size, max_alt_diff=max_alt_diff, - min_std=min_std, + min_sample_spread=min_sample_spread, + min_buddy_distance=min_buddy_distance, spatial_z_threshold=spatial_z_threshold, N_iter=N_iter, instantaneous_tolerance=instantaneous_tolerance, lapserate=lapserate, whiteset=whiteset, - safety_net_configs=None, # No safety nets for basic buddy_check - # technical + use_z_robust_method=use_z_robust_method, use_mp=use_mp, ) - # Locate stations with the obstype - target_stations, skip_stations = filter_to_stations_with_target_obstype( - stations=self.stations, obstype=obstype - ) - metadf = self.metadf.loc[[sta.name for sta in target_stations]] - - outlierslist, timestamp_map = toolkit_buddy_check( - target_stations=target_stations, metadf=metadf, **qc_kwargs - ) - # outlierslist is a list of tuples (stationname, datetime, msg) that are outliers - # timestamp_map is a dict with keys the stationname and values a series to map the syncronized - # timestamps to the original timestamps - - # convert to a dataframe - alloutliersdf = pd.DataFrame( - data=outlierslist, columns=["name", "datetime", "detail_msg"] - ) - - # Handle duplicates - # Note: duplicates can occur when a specific record was part of more than one - # outlier group, and is flagged by more than one group. If so, keep the - # first row, but concat the detail_msg's (since they describe the outlier group) - - if not alloutliersdf.empty: - # Group by name and datetime, concatenate detail_msg for duplicates - alloutliersdf = ( - alloutliersdf.groupby(["name", "datetime"], as_index=False) - .agg({"detail_msg": lambda x: " | ".join(x)}) - .reset_index(drop=True) - ) - - # update all the sensordata - for station in target_stations: - # Get the sensordata object - sensorddata = station.get_sensor(obstype) - - # get outlier datetimeindex - outldt = pd.DatetimeIndex( - alloutliersdf[alloutliersdf["name"] == station.name]["datetime"] - ) - - if not outldt.empty: - # convert to original timestamps - dtmap = timestamp_map[station.name] - outldt = outldt.map(dtmap) - - # update the sensordata - sensorddata._update_outliers( - qccheckname="buddy_check", - outliertimestamps=outldt, - check_kwargs=qc_kwargs, - extra_columns={ - "detail_msg": alloutliersdf[alloutliersdf["name"] == station.name][ - "detail_msg" - ].to_numpy() - }, - ) - @log_entry def buddy_check_with_LCZ_safety_net(*args): + """Deprecated alias for ``buddy_check_with_safetynets``. + + .. deprecated:: + ``buddy_check_with_LCZ_safety_net`` has been removed. Use + :meth:`buddy_check_with_safetynets` instead. + + Raises + ------ + DeprecationWarning + Always raised when this method is called. + """ raise DeprecationWarning( "buddy_check_with_LCZ_safety_net is deprecated. Please use buddy_check_with_safetynets instead." ) @@ -2164,23 +2234,27 @@ def buddy_check_with_safetynets( spatial_buddy_radius: Union[int, float] = 10000, safety_net_configs: List[Dict] = None, min_sample_size: int = 4, + max_sample_size: Union[int, None] = None, max_alt_diff: Union[int, float, None] = None, - min_std: Union[int, float] = 1.0, + min_sample_spread: Union[int, float] = 1.0, + min_buddy_distance: Union[int, float] = 0.0, spatial_z_threshold: Union[int, float] = 3.1, N_iter: int = 2, instantaneous_tolerance: Union[str, pd.Timedelta] = pd.Timedelta("4min"), lapserate: Union[float, None] = None, # -0.0065 for temperature (in °C) whiteset: WhiteSet = WhiteSet(), + use_z_robust_method: bool = True, use_mp: bool = True, + min_std=None, ): """Spatial buddy check with configurable safety nets. The buddy check compares an observation against its neighbors - (i.e. spatial buddies). The check loops over all the groups, which are - stations within a radius of each other. For each group, the z-value of - the reference observation is computed given the sample of spatial - buddies. If one (or more) exceeds the `spatial_z_threshold`, the most - extreme (=baddest) observation of that group is labeled as an outlier. + (i.e. spatial buddies). The check loops over all stations, treating + each as the center of a buddy group formed by nearby stations. For + each center station, the z-score is computed from the buddy sample. + If the z-score exceeds `spatial_z_threshold`, the center station's + observation is labeled as an outlier. Multiple iterations of this check can be done using `N_iter`. @@ -2199,44 +2273,56 @@ def buddy_check_with_safetynets( #. A distance matrix is constructed for all interdistances between the stations. This is done using the haversine approximation. #. Groups of spatial buddies (neighbours) are created by using the - `spatial_buddy_radius.` These groups are further filtered by: + `spatial_buddy_radius` and `min_buddy_distance`. Only stations within + the distance range [min_buddy_distance, spatial_buddy_radius] are + considered as buddies. These groups are further filtered by: - * removing stations from the groups that differ to much in altitude + * removing stations from the groups that differ too much in altitude (based on the `max_alt_diff`) * removing groups of buddies that are too small (based on the `min_sample_size`) #. Observations per group are synchronized in time (using the - `instantaneous_tolerance` for allignment). - #. If a `lapsrate` is specified, the observations are corrected for + `instantaneous_tolerance` for alignment). + #. If a `lapserate` is specified, the observations are corrected for altitude differences. - #. The following steps are repeated for `N-iter` iterations: + #. The following steps are repeated for `N_iter` iterations: #. The values of outliers flagged by a previous iteration are converted to NaN's. Therefore they are not used in any following score or sample. - #. For each buddy group: - - * The mean, standard deviation (std), and sample size are computed. - * If the std is lower than the `minimum_std`, it is replaced by - the minimum std. - * Chi values are calculated for all records. - * For each timestamp the record with the highest Chi is tested - if it is larger then spatial_z_threshold. - If so, that record is flagged as an outlier. It will be ignored - in the next iteration. + #. For each center station: + + * The sample mean, spread (std or MAD depending on + `use_z_robust_method`), and sample size are computed from the + buddy stations (center station excluded). + * If the spread is lower than `min_sample_spread`, it is replaced + by `min_sample_spread`. + * The z-score of the center station is calculated. + * If the z-score exceeds `spatial_z_threshold`, the center + station's observation is flagged as an outlier. It will be + ignored in the next iteration. #. For each safety net in `safety_net_configs` (in order): + * If `only_if_previous_had_no_buddies` is True for this + safety net, only outlier records where the previous safety + net had insufficient buddies are passed to this safety net. + All other records retain their status from the previous + safety net. * Category buddies (stations sharing the same category value - within the specified radius) are identified. + within the specified distance range) are identified. Like spatial + buddies, category buddies are filtered by distance range + [min_buddy_distance, buddy_radius]. * The category-buddy sample is tested in size (sample size must be at least `min_sample_size`). If the condition is not met, the safety net test is not applied. * The safety net test is applied: - * The mean and std are computed of the category-buddy sample. - If the std is smaller than `min_std`, the latter is used. + * The sample mean and spread (std or MAD depending on + `use_z_robust_method`) are computed of the category-buddy + sample. If the spread is smaller than `min_sample_spread`, + the latter is used. * The z-value is computed for the target record (= flagged outlier). * If the z-value is smaller than the safety net's `z_threshold`, the tested outlier is "saved" and removed from the set of @@ -2247,11 +2333,6 @@ def buddy_check_with_safetynets( White-listed records participate in all buddy check and safety net calculations but are not flagged as outliers in the final results. - #. If `whiteset` is provided, any outliers that match the white-listed - timestamps are removed from the outlier set for the current iteration. - White-listed records participate in all buddy check and safety net - calculations but are not flagged as outliers in the final results. - Parameters ---------- obstype : str, optional @@ -2269,6 +2350,22 @@ def buddy_check_with_safetynets( * 'z_threshold': int or float, z-value threshold for saving outliers * 'min_sample_size': int, minimum number of buddies required for the safety net test + * 'min_buddy_distance': int or float (optional), minimum distance + (in meters) required between a station and its category buddies. + Stations closer than this distance will be excluded from the + buddy group. Defaults to 0 (no minimum distance). + * 'max_sample_size': int or None (optional), maximum number of + category buddies to use per station. If not None, category + buddies are sorted by distance and only the nearest + ``max_sample_size`` are kept. Must be larger than + ``min_sample_size`` when specified. Defaults to None (no limit). + * 'only_if_previous_had_no_buddies': bool (optional), if True + this safety net is only applied to outlier records for which + the **previous** safety net could not be executed due to + insufficient buddies. Records that were successfully tested + by the previous safety net (passed or failed) are not + re-tested. This enables a cascading fallback strategy. + Cannot be True for the first safety net. Defaults to False. Example:: @@ -2283,7 +2380,8 @@ def buddy_check_with_safetynets( "category": "network", "buddy_radius": 50000, "z_threshold": 2.5, - "min_sample_size": 3 + "min_sample_size": 3, + "only_if_previous_had_no_buddies": True } ] @@ -2291,13 +2389,27 @@ def buddy_check_with_safetynets( min_sample_size : int, optional The minimum sample size to calculate statistics on. Used for spatial-buddy samples. Default is 4. + max_sample_size : int or None, optional + The maximum number of spatial buddies to use per station. If not + None, the spatial buddies for each station are sorted by distance + and only the nearest ``max_sample_size`` are kept. Must be larger + than ``min_sample_size`` when specified. The default is None + (no limit). max_alt_diff : int or float or None, optional The maximum altitude difference allowed for buddies. Default is None. - min_std : int or float, optional - The minimum standard deviation for sample statistics. This is used - in spatial and safety net samples. Default is 1.0. + min_sample_spread : int or float, optional + The minimum sample spread for sample statistics. When use_z_robust_method is True, + this is equal to the minimum MAD to use (avoids division by near-zero). When + use_z_robust_method is False, this is the standard deviation. This parameter helps + to represent the accuracy of the observations. This is used in spatial and + safety net samples. Default is 1.0. + min_buddy_distance : int or float, optional + The minimum distance (in meters) required between a station and its spatial buddies. + Stations closer than this distance will be excluded from the buddy group. This also + affects safety net buddy selection unless overridden in the safety_net_configs. + Default is 0.0 (no minimum distance). spatial_z_threshold : int or float, optional - The threshold, tested with z-scores, for flagging observations as + The z-score threshold for flagging observations as outliers. Default is 3.1. N_iter : int, optional The number of iterations to perform the buddy check. Default is 2. @@ -2315,6 +2427,9 @@ def buddy_check_with_safetynets( check and safety net iterations as regular records but are not flagged as outliers in the final results. The default is an empty WhiteSet(). + use_z_robust_method : bool, optional + If True, the robust z-score method (median/MAD) is used. If False, + the classic z-score method (mean/std) is used. Default is True. use_mp : bool, optional Use multiprocessing to speed up the buddy check. Default is True. @@ -2359,11 +2474,28 @@ def buddy_check_with_safetynets( ... ] ... ) + Apply cascading safety nets where the second safety net only tests + records that had insufficient buddies in the first: + + >>> dataset.buddy_check_with_safetynets( + ... obstype="temp", + ... safety_net_configs=[ + ... {"category": "LCZ", "buddy_radius": 40000, "z_threshold": 2.1, "min_sample_size": 4}, + ... {"category": "network", "buddy_radius": 50000, "z_threshold": 2.5, "min_sample_size": 3, "only_if_previous_had_no_buddies": True} + ... ] + ... ) + """ + if min_std is not None: + raise DeprecationWarning( + "The min_std parameter is deprecated and replaced by the min_sample_spread parameter. The min_sample_spread serves as the minimum STD, if use_z_robust_method is False. Else it acts as the minimum MAD (median absolute deviation from median)." + ) instantaneous_tolerance = fmt_timedelta_arg(instantaneous_tolerance) # Validate that the required metadata columns exist if safety_net_configs: + if not isinstance(safety_net_configs, list): + raise TypeError("safety_net_configs must be a list of dicts.") required_categories = set(cfg["category"] for cfg in safety_net_configs) for category in required_categories: if category == "LCZ": @@ -2390,15 +2522,19 @@ def buddy_check_with_safetynets( obstype=obstype, spatial_buddy_radius=spatial_buddy_radius, spatial_min_sample_size=min_sample_size, + spatial_max_sample_size=max_sample_size, max_alt_diff=max_alt_diff, - min_std=min_std, + min_sample_spread=min_sample_spread, spatial_z_threshold=spatial_z_threshold, N_iter=N_iter, instantaneous_tolerance=instantaneous_tolerance, + min_buddy_distance=min_buddy_distance, lapserate=lapserate, whiteset=whiteset, # Generalized safety net configuration safety_net_configs=safety_net_configs, + # statistical + use_z_robust_method=use_z_robust_method, # technical use_mp=use_mp, ) @@ -2409,82 +2545,116 @@ def buddy_check_with_safetynets( ) metadf = self.metadf.loc[[sta.name for sta in target_stations]] - outlierslist, timestamp_map = toolkit_buddy_check( + qcresuldict, detailsensors = toolkit_buddy_check( target_stations=target_stations, metadf=metadf, **qc_kwargs ) - # outlierslist is a list of tuples (stationname, datetime, msg) that are outliers - # timestamp_map is a dict with keys the stationname and values a series to map the syncronized - # timestamps to the original timestamps + for staname, qcres in qcresuldict.items(): + sensordata = self.get_station(staname).get_sensor(obstype) + sensordata._update_outliers(qcresult=qcres) + return detailsensors - # convert to a dataframe - alloutliersdf = pd.DataFrame( - data=outlierslist, columns=["name", "datetime", "detail_msg"] + @copy_doc(dataset_qc_overview_df) + @log_entry + def qc_overview_df( + self, + subset_stations: Union[list[str], None] = None, + subset_obstypes: Union[list[str], None] = None, + ) -> pd.DataFrame: + return dataset_qc_overview_df( + self, subset_stations=subset_stations, subset_obstypes=subset_obstypes ) - # Handle duplicates - # Note: duplicates can occur when a specific record was part of more than one - # outlier group, and is flagged by more than one group. If so, keep the - # first row, but concat the detail_msg's (since they describe the outlier group) + @log_entry + def get_qc_stats( + self, obstype: str = "temp", make_plot: bool = True + ) -> Union[dict[str, pd.Series], Figure]: + """ + Summarize QC label frequencies across all stations for a given observation type. + + This aggregates three series over every station that has the requested ``obstype``: - if not alloutliersdf.empty: - # Group by name and datetime, concatenate detail_msg for duplicates - alloutliersdf = ( - alloutliersdf.groupby(["name", "datetime"], as_index=False) - .agg({"detail_msg": lambda x: " | ".join(x)}) - .reset_index(drop=True) - ) + * final label counts from each ``SensorData.df['label'].value_counts()``; + * outlier-only label counts from ``SensorData.outliersdf['label'].value_counts()``; + * per-check outcome counts from ``SensorData.get_qc_freq_statistics()`` + (MultiIndex ``['checkname', 'flag']``). + + When ``make_plot`` is True, the aggregated counts are visualized with + ``plotting.qc_overview_pies``. When False, the aggregated series are returned for + programmatic use. + + Parameters + ---------- + obstype : str, optional + Observation type to evaluate, by default "temp". + make_plot : bool, optional + If True, return a figure with pie charts; if False, return the aggregated counts. + Default is True. + + Returns + ------- + matplotlib.figure.Figure or dict[str, pandas.Series] + Figure with QC overview pies when ``make_plot`` is True; otherwise a dictionary with + keys ``all_labels``, ``outlier_labels``, and ``per_check_labels``. Returns None when + no stations provide the requested ``obstype``. + """ - # update all the sensordata - for station in target_stations: - # Get the sensordata object - sensorddata = station.get_sensor(obstype) + # collect stations that actually have the target obstype + target_stations = [sta for sta in self.stations if obstype in sta.obsdata] - # get outlier datetimeindex - outldt = pd.DatetimeIndex( - alloutliersdf[alloutliersdf["name"] == station.name]["datetime"] + if not target_stations: + logger.warning("No stations with obstype '%s' found for QC stats.", obstype) + return None + + df, outliersdf = self.df, self.outliersdf + if df.empty: + logger.warning("Dataset is empty, cannot compute QC stats.") + return None + if obstype not in df.index.get_level_values("obstype"): + logger.warning( + "No data for obstype '%s' in dataset, cannot compute QC stats.", obstype ) + return None - if not outldt.empty: - # convert to original timestamps - dtmap = timestamp_map[station.name] - outldt = outldt.map(dtmap) + all_label_counts = df.xs(obstype, level="obstype")["label"].value_counts() + if obstype in outliersdf.index.get_level_values("obstype"): + outlier_label_counts = outliersdf.xs(obstype, level="obstype")[ + "label" + ].value_counts() + else: + outlier_label_counts = pd.Series( + index=pd.Index([], dtype=int, name="label"), dtype=int + ) - # update the sensordata - sensorddata._update_outliers( - qccheckname="buddy_check_with_safetynets", - outliertimestamps=outldt, - check_kwargs=qc_kwargs, - extra_columns={ - "detail_msg": alloutliersdf[alloutliersdf["name"] == station.name][ - "detail_msg" - ].to_numpy() - }, + per_check_counts = [] + for sta in target_stations: + sensor_counts = sta.get_sensor(obstype).get_qc_freq_statistics() + # add the name of the station as a index level + sensor_counts.index = pd.MultiIndex.from_frame( + sensor_counts.index.to_frame().assign(name=sta.name) ) - @copy_doc(Station.get_qc_stats) - @log_entry - def get_qc_stats( - self, obstype: str = "temp", make_plot: bool = True - ) -> Union[pd.DataFrame, None]: - freqdf_list = [ - sta.get_qc_stats(obstype=obstype, make_plot=False) for sta in self.stations - ] + per_check_counts.append(sensor_counts) - dfagg = ( - pd.concat(freqdf_list) - .reset_index() - .groupby(["qc_check"]) - .sum() - .drop(columns=["name"]) + per_check_counts = ( + pd.concat(per_check_counts).groupby(level=["checkname", "flag"]).sum() ) if make_plot: - fig = plotting.qc_overview_pies(df=dfagg) - fig.suptitle(f"QC frequency statistics of {obstype} on Dataset level.") + fig = plotting.qc_overview_pies( + end_labels_from_df=all_label_counts, + end_labels_from_outliers=outlier_label_counts, + per_check_labels=per_check_counts, + fig_title=f"QC frequency statistics of {obstype} on Dataset level.", + ) + return fig - else: - return dfagg + + return { + "all_labels": all_label_counts, + "outlier_labels": outlier_label_counts, + "per_check_labels": per_check_counts, + } # ------------------------------------------ # Other methods diff --git a/src/metobs_toolkit/gap.py b/src/metobs_toolkit/gap.py index 5cbeec523..785339d8e 100644 --- a/src/metobs_toolkit/gap.py +++ b/src/metobs_toolkit/gap.py @@ -440,14 +440,12 @@ def diurnal_debiased_model_gapfill( #. Clip filled values to the range [min_value, max_value] if specified. #. Update the `gap` attributes with the interpolated values, labels, and details. - Notes - -------- - Note that a suitable `min_debias_sample_size` depends on the sizes of the + A suitable `min_debias_sample_size` depends on the sizes of the leading- and trailing periods, and also on the time resolution gap (=time resolution of the corresponding SensorData). References - ----------- - Jacobs .A, et. al. (2024) `Filling gaps in urban temperature observations by debiasing ERA5 reanalysis data `_ + ---------- + Jacobs A, et. al. (2024) `Filling gaps in urban temperature observations by debiasing ERA5 reanalysis data `_ """ self._fillkwargs = { @@ -612,14 +610,12 @@ def weighted_diurnal_debiased_model_gapfill( #. Clip filled values to the range [min_value, max_value] if specified. #. Update the `gap` attributes with the interpolated values, labels, and details. - Notes - -------- - Note that a suitable `min_debias_sample_size` depends on the sizes of the + A suitable `min_debias_sample_size` depends on the sizes of the leading- and trailing periods, and also on the time resolution gap (=time resolution of the corresponding SensorData). References - ----------- - Jacobs .A, et. al. (2024) `Filling gaps in urban temperature observations by debiasing ERA5 reanalysis data `_ + ---------- + Jacobs A, et. al. (2024) `Filling gaps in urban temperature observations by debiasing ERA5 reanalysis data `_ """ @@ -1099,7 +1095,21 @@ def _setup_lead_and_trail_for_debias_gapfill( return lead_period, trail_period, True def test_if_gf_is_suitable_with_gapsize(self, max_gapsize) -> tuple[bool, str]: + """Check whether the gap duration is within the allowed limit for gap-filling. + Parameters + ---------- + max_gapsize : pandas.Timedelta + Maximum allowed gap duration. Gaps larger than this value cannot + be filled. + + Returns + ------- + tuple of (bool, str) + ``(True, '')`` when the gap is small enough, or + ``(False, detail_string)`` when the gap exceeds *max_gapsize* where + *detail_string* describes the reason. + """ if (self.end_datetime - self.start_datetime) > max_gapsize: detailstring = f"Gap is too large ({(self.end_datetime - self.start_datetime)} ) to be filled with max_gapsize={max_gapsize}." logger.warning( diff --git a/src/metobs_toolkit/gee_api.py b/src/metobs_toolkit/gee_api.py index d37cafdfe..468b9210c 100644 --- a/src/metobs_toolkit/gee_api.py +++ b/src/metobs_toolkit/gee_api.py @@ -91,7 +91,7 @@ def connect_to_gee(**kwargs) -> None: logger.warning(f"Failed to initialize GEE with default credentials: {e}") # Fall through to authentication - # If initialization failed, try to authenticate + # If initialization failed, authenticate and retry initialization. ee.Authenticate() ee.Initialize() return None diff --git a/src/metobs_toolkit/geedatasetmanagers.py b/src/metobs_toolkit/geedatasetmanagers.py index bf5946221..5015d1641 100644 --- a/src/metobs_toolkit/geedatasetmanagers.py +++ b/src/metobs_toolkit/geedatasetmanagers.py @@ -120,6 +120,7 @@ def __init__( # ------------------------------------------ def __str__(self): + """Return a human-readable string representation of this GEE dataset manager.""" return f"{self.__name__} representation of {self.name} " def __repr__(self): @@ -412,6 +413,7 @@ def extract_static_buffer_frac_data( @log_entry def rasterExtraction(image): + """Apply reduceRegions to a single GEE image and return feature collection.""" feature = image.reduceRegions( reducer=ee.Reducer.frequencyHistogram(), collection=ee_fc, @@ -1188,6 +1190,7 @@ def extract_timeseries_data( @log_entry def rasterExtraction(image): + """Apply sampleRegions to a single GEE image and return feature collection.""" feature = image.sampleRegions( collection=ee_fc, scale=self.scale, diff --git a/src/metobs_toolkit/gf_collection/overview_df_constructors.py b/src/metobs_toolkit/gf_collection/overview_df_constructors.py index 94a32e148..f4d0ed548 100644 --- a/src/metobs_toolkit/gf_collection/overview_df_constructors.py +++ b/src/metobs_toolkit/gf_collection/overview_df_constructors.py @@ -2,9 +2,14 @@ (sensordata, station, dataset) for overviews and summaries of Gaps.""" import pandas as pd +from typing import Union from metobs_toolkit.backend_collection.dev_collection import copy_doc from metobs_toolkit.backend_collection.df_helpers import save_concat +# =============================== +# Gap overiview +# =============================== + def sensordata_gap_status_overview_df(sensordata) -> pd.DataFrame: """ diff --git a/src/metobs_toolkit/io_collection/dataparser.py b/src/metobs_toolkit/io_collection/dataparser.py index b15e8086e..8ee062b3b 100644 --- a/src/metobs_toolkit/io_collection/dataparser.py +++ b/src/metobs_toolkit/io_collection/dataparser.py @@ -23,6 +23,16 @@ class DataParser: """ def __init__(self, datafilereader: FileReader, template: Template): + """Initialize the DataParser with a file reader and a template. + + Parameters + ---------- + datafilereader : FileReader + An instance of FileReader used to read the raw data file. + template : Template + An instance of Template that defines the expected structure and + column mappings for the data. + """ self.filereader = datafilereader self.template = template self.datadf = pd.DataFrame() # Metadata in formatted DataFrame style diff --git a/src/metobs_toolkit/modeltimeseries.py b/src/metobs_toolkit/modeltimeseries.py index 4ec357315..ae6fc7083 100644 --- a/src/metobs_toolkit/modeltimeseries.py +++ b/src/metobs_toolkit/modeltimeseries.py @@ -99,8 +99,42 @@ def __init__( modelvariable: str = None, _convert_to_standard_units: bool = True, ): - self.site = site + """Initialize a ModelTimeSeries with data and model metadata. + Parameters + ---------- + site : Site + The site object representing the measurement location. + datarecords : numpy.ndarray + Observation values in the model's native units. Automatically + converted to standard units unless *_convert_to_standard_units* is + ``False``. + timestamps : numpy.ndarray + Timestamps corresponding to *datarecords*. + modelobstype : ModelObstype + Observation type that carries unit-conversion and band information. + datadtype : type, optional + Numeric dtype for the stored series. Default is + :data:`numpy.float32`. + timezone : str, optional + Timezone of *timestamps*. Default is ``'UTC'``. + modelname : str, optional + Human-readable name of the model (e.g. ``'ERA5_land'``). + modelvariable : str, optional + Model variable / band name. + _convert_to_standard_units : bool, optional + If ``True`` (default), converts *datarecords* from model units to + standard units. Set to ``False`` when data are already in standard + units (e.g. during ``__add__``). + + Raises + ------ + TypeError + If *modelobstype* is not a :class:`ModelObstype` instance. + MetObsUnitUnknown + If the :attr:`model_unit` of *modelobstype* is ``None``. + """ + self.site = site # Testing the ModelObstype self.modelobstype = modelobstype if not isinstance(self.modelobstype, ModelObstype): @@ -142,6 +176,14 @@ def __init__( # Specials # ------------------------------------------ def __repr__(self): + """Return a string representation for debugging. + + Returns + ------- + str + String in the format + ``,modelobstype=)>``. + """ return ( f"" ) @@ -239,6 +281,19 @@ def to_xr(self) -> xrDataset: return modeltimeseries_to_xr(self, fmt_datetime_coordinate=True) def _get_info_core(self, nident_root=1) -> dict: + """Build a formatted info string with core model-timeseries attributes. + + Parameters + ---------- + nident_root : int, optional + Base indentation level for printed lines. Default is 1. + + Returns + ------- + str + Formatted string listing model name, variable, time range, + frequency, record count, and unit conversion details. + """ infostr = "" infostr += printing.print_fmt_line( f"Modelname {self.modelname} -> variable/band: {self.modelvariable}", diff --git a/src/metobs_toolkit/obstypes.py b/src/metobs_toolkit/obstypes.py index 380553978..a1e9b7115 100644 --- a/src/metobs_toolkit/obstypes.py +++ b/src/metobs_toolkit/obstypes.py @@ -80,7 +80,18 @@ class Obstype: """ def __init__(self, name: str, std_unit: Union[str, pint.Unit], description: str): - # set name + """Initialize an Obstype with a name, standard unit and description. + + Parameters + ---------- + name : str + Name of the observation type (e.g. ``'temp'``). + std_unit : str or pint.Unit + Standard unit for storing and reporting observations + (e.g. ``'degree_Celsius'``). + description : str + Human-readable description of the observation type. + """ self._name = str(name) # set standard unit self._std_unit = _fmtunit(std_unit) @@ -99,7 +110,24 @@ def _id(self) -> str: return f"{self.name}_{self.std_unit}" def __add__(self, other: Obstype) -> Obstype: - # This function is called when other instances, + """Combine two Obstype instances that share the same physical identity. + + Parameters + ---------- + other : Obstype + The Obstype instance to combine with. + + Returns + ------- + Obstype + A new :class:`Obstype` with merged description and original-name + attributes. + + Raises + ------ + MetObsAdditionError + If the two instances have different ``_id()`` values. + """ # that hold Obstype 's are joined. if self._id() == other._id(): @@ -252,6 +280,13 @@ def _get_plot_y_label(self) -> str: return f"{self.name} ({self.std_unit})" def _get_info_core(self) -> str: + """Build a formatted info string with core observation-type attributes. + + Returns + ------- + str + Formatted string listing the name, standard unit, and description. + """ infostr = "" infostr += printing.print_fmt_line(f"{self.name} observation with:", 0) infostr += printing.print_fmt_line(f"standard unit: {self.std_unit}") @@ -332,7 +367,25 @@ class ModelObstype(Obstype): def __init__( self, obstype: Obstype, model_unit: Union[str, pint.Unit], model_band: str ): - # set regular obstype + """Initialize a ModelObstype from a base Obstype plus model-specific metadata. + + Parameters + ---------- + obstype : Obstype + The base observation type that defines name, standard unit and + description. + model_unit : str or pint.Unit + The unit used by the gridded model for this variable + (e.g. ``'kelvin'``). Must be compatible with the standard unit. + model_band : str + Name of the model band / variable (e.g. ``'temperature_2m'``). + + Raises + ------ + MetObsUnitUnknown + If *model_unit* is not compatible with the standard unit of + *obstype*. + """ super().__init__( name=obstype.name, std_unit=obstype.std_unit, @@ -357,6 +410,24 @@ def _id(self) -> str: return f"{super()._id()}_{self.model_band}" def __add__(self, other: ModelObstype) -> ModelObstype: + """Combine two ModelObstype instances that share the same physical identity. + + Parameters + ---------- + other : ModelObstype + The ModelObstype instance to combine with. + + Returns + ------- + ModelObstype + A new :class:`ModelObstype` with merged attributes. Model unit + is taken from *self* when both differ. + + Raises + ------ + MetObsAdditionError + If the two instances have different ``_id()`` values. + """ if self._id() != other._id(): raise MetObsAdditionError( f"{self} + {other} could not be executes since they do not have the same id ({self._id()} != {other._id()})" @@ -398,6 +469,18 @@ def model_band(self) -> str: @model_unit.setter @log_entry def model_unit(self, value: Union[str, pint.Unit]): + """Set the model unit, validating compatibility with the standard unit. + + Parameters + ---------- + value : str or pint.Unit + The new model unit. + + Raises + ------ + MetObsUnitsIncompatible + If *value* is not compatible with the standard unit. + """ self._model_unit = _fmtunit(value) # test if it is a compatible unit wrt the standard unit if not self._model_unit.is_compatible_with(self._std_unit): @@ -408,6 +491,13 @@ def model_unit(self, value: Union[str, pint.Unit]): @model_band.setter @log_entry def model_band(self, value: str): + """Set the model band name. + + Parameters + ---------- + value : str + The new band name. + """ self._model_band = str(value) @log_entry @@ -471,6 +561,29 @@ def __init__( amplitude_obstype_name: str, direction_obstype_name: str, ): + """Initialize a ModelObstype_Vectorfield from a base Obstype plus vector-field model metadata. + + Parameters + ---------- + obstype : Obstype + The base observation type. + model_unit : str or pint.Unit + The unit used by the gridded model for both vector components. + Must be compatible with the standard unit of *obstype*. + model_band_u : str + Name of the U-component (east-west) band in the model. + model_band_v : str + Name of the V-component (north-south) band in the model. + amplitude_obstype_name : str + Name used for the derived amplitude observation type. + direction_obstype_name : str + Name used for the derived direction observation type. + + Raises + ------ + MetObsUnitUnknown + If *model_unit* is not compatible with the standard unit of *obstype*. + """ # set regular obstype super().__init__( name=obstype.name, @@ -499,6 +612,24 @@ def _id(self) -> str: return f"{super()._id()}_{self.model_band_u}_{self.model_band_v}" def __add__(self, other: ModelObstype_Vectorfield) -> ModelObstype_Vectorfield: + """Combine two ModelObstype_Vectorfield instances that share the same physical identity. + + Parameters + ---------- + other : ModelObstype_Vectorfield + The ModelObstype_Vectorfield instance to combine with. + + Returns + ------- + ModelObstype_Vectorfield + A new instance with merged attributes. Model unit is taken from + *self* when both differ. + + Raises + ------ + MetObsAdditionError + If the two instances have different ``_id()`` values. + """ if self._id() != other._id(): raise MetObsAdditionError( f"{self} + {other} could not be executes since they do not have the same id ({self._id()} != {other._id()})" diff --git a/src/metobs_toolkit/plot_collection/folium_spatial.py b/src/metobs_toolkit/plot_collection/folium_spatial.py index b3968b422..7d27ca72e 100644 --- a/src/metobs_toolkit/plot_collection/folium_spatial.py +++ b/src/metobs_toolkit/plot_collection/folium_spatial.py @@ -203,6 +203,24 @@ def make_folium_html_plot( # Map values to colors @log_entry def map_value_to_hex(series, vmin, vmax, cmapname="viridis"): + """Map numeric values to hex color strings using a matplotlib colormap. + + Parameters + ---------- + series : pandas.Series + Numeric values to convert to colors. + vmin : float + Minimum value for the colormap normalization. + vmax : float + Maximum value for the colormap normalization. + cmapname : str, optional + Name of the matplotlib colormap to use. Default is ``'viridis'``. + + Returns + ------- + pandas.Series + Series of hex color strings with the same index as ``series``. + """ norm = matplotlib.colors.Normalize(vmin=vmin, vmax=vmax, clip=True) mapper = matplotlib.cm.ScalarMappable( norm=norm, cmap=matplotlib.colormaps[cmapname] @@ -226,6 +244,24 @@ def map_value_to_hex(series, vmin, vmax, cmapname="viridis"): # Serialize data to features @log_entry def make_scatter_feature(row): + """Build a GeoJSON Feature dict for a single row of the station GeoDataFrame. + + The returned feature is suitable for use with + ``folium_plugins.TimestampedGeoJson``. + + Parameters + ---------- + row : pandas.Series + A single row from the station GeoDataFrame, expected to contain + ``'datetime'``, ``'geometry'``, ``'name'``, the variable column, + the label column, ``'value_color'``, and ``'label_color'``. + + Returns + ------- + dict + GeoJSON Feature dictionary with ``type``, ``geometry``, and + ``properties`` keys. + """ dtstring = pd.to_datetime([row["datetime"]]).strftime(dt_disp_fmt)[0] coords = [[row["geometry"].x, row["geometry"].y]] popup_str = f" {row['name']}
    {'{:.1f}'.format(row[variable_column])} {var_unit}
    {row[label_column]}" diff --git a/src/metobs_toolkit/plot_collection/qc_info_pies.py b/src/metobs_toolkit/plot_collection/qc_info_pies.py index 447a29ec3..7ad309589 100644 --- a/src/metobs_toolkit/plot_collection/qc_info_pies.py +++ b/src/metobs_toolkit/plot_collection/qc_info_pies.py @@ -14,27 +14,52 @@ logger = logging.getLogger("") +def autopct_format(pct): + """Format a pie chart percentage value for display. + + Parameters + ---------- + pct : float + The percentage value for a pie wedge. + + Returns + ------- + str + The formatted percentage string (e.g. ``'12.3%'``), or an empty + string if ``pct`` is zero or negative. + """ + return f"{pct:.1f}%" if pct > 0 else "" + + @log_entry def qc_overview_pies( - df: pd.DataFrame, + end_labels_from_df: pd.Series, + end_labels_from_outliers: pd.Series, + per_check_labels: pd.Series, + fig_title: str = "", ) -> plt.Figure: """ - Generate a quality control (QC) overview using pie charts. + Generate a QC overview figure with pie charts for label frequencies and per-check outcomes. Parameters ---------- - df : pandas.DataFrame - DataFrame containing QC data. Must include columns 'N_labeled', 'N_all', and 'N_checked'. + end_labels_from_df : pandas.Series + Counts of final labels for all records (index as labels), typically from + ``SensorData.df['label'].value_counts()``. + end_labels_from_outliers : pandas.Series + Counts limited to outlier records (index as labels), e.g. from + ``SensorData.outliersdf['label'].value_counts()``. If empty, a single slice + "No QC outliers" is drawn. + per_check_labels : pandas.Series + MultiIndex Series with index levels ``['checkname', 'flag']`` containing counts per + QC check outcome (flags such as ``flagged_cond``, ``pass_cond``, ``unmet_cond``, etc.), + as returned by ``SensorData.get_qc_freq_statistics()``. Returns ------- matplotlib.figure.Figure - The generated figure containing the QC overview pie charts. - - Raises - ------ - TypeError - If any of the arguments are not of the expected type. + Figure containing two large pies (all labels and outlier labels) and one small pie per + QC check showing the distribution of its outcomes. """ # Define layout @@ -48,97 +73,85 @@ def qc_overview_pies( ax_thr = fig.add_subplot(spec[0, 2:]) # top half right # Frequency with all - plotdf = df - colors = [Settings._get_color_from_label(label) for label in plotdf.index] - plotdf.plot( + colors = [ + Settings._get_color_from_label(label) for label in end_labels_from_df.index + ] + end_labels_from_df.plot( ax=ax_thl, kind="pie", - y="N_labeled", - autopct="%1.1f%%", + autopct=autopct_format, legend=False, colors=colors, radius=Settings.get("plotting_settings.pie_charts.radius_big"), - fontsize=Settings.get("plotting_settings.pie_charts.txt_size_big_pies"), + fontsize=Settings.get("plotting_settings.pie_charts.txt_label_size_big_pies"), + ) + ax_thl.set_title( + "Label frequencies", + **Settings.get("plotting_settings.pie_charts.big_pie_title_kwargs"), ) - ax_thl.set_title("Label frequencies") ax_thl.set_ylabel("") - # Outliers comparison - plotdf = df[ - ~df.index.isin( - [ - Settings.get("label_def.goodrecord.label"), - Settings.get("label_def.regular_gap.label"), - ] - ) - ] + # Only outliers - colors = [Settings._get_color_from_label(label) for label in plotdf.index] + colors = [ + Settings._get_color_from_label(label) + for label in end_labels_from_outliers.index + ] - if plotdf.empty: + if end_labels_from_outliers.empty: # No outliers --> full pie with "No QC outliers" in the color of 'ok' - plotdf = pd.DataFrame( - data={"N_labeled": [100]}, index=pd.Index(data=["No QC outliers"]) - ) - colors = [Settings.get("label_def.goodrecord.color")] + end_labels_from_outliers = pd.Series([100], index=["No QC outliers"]) + colors = [Settings._get_color_from_label("ok")] - plotdf.plot( + end_labels_from_outliers.plot( ax=ax_thr, kind="pie", - y="N_labeled", - autopct="%1.1f%%", + autopct=autopct_format, legend=False, colors=colors, radius=Settings.get("plotting_settings.pie_charts.radius_big"), - fontsize=Settings.get("plotting_settings.pie_charts.txt_size_big_pies"), + fontsize=Settings.get("plotting_settings.pie_charts.txt_label_size_big_pies"), + ) + ax_thr.set_title( + "Outlier specific frequencies", + **Settings.get("plotting_settings.pie_charts.big_pie_title_kwargs"), ) - ax_thr.set_title("Outlier specific frequencies") ax_thr.set_ylabel("") # Performance per check - plotdf = df[ - ~df.index.isin( - [ - Settings.get("label_def.goodrecord.label"), - Settings.get("label_def.regular_gap.label"), - ] - ) - ] - - # Label to QC check name map - label_too_qcname_map = Settings._label_to_qccheckmap() + per_qc_colmap = { + val["label"]: val["plotkwargs"]["color"] + for val in Settings.get("qc_status_labels_per_check").values() + } i = 0 - for idx, row in plotdf.iterrows(): - # Target a specific axes + for checkname in per_check_labels.index.get_level_values("checkname").unique(): subax = fig.add_subplot(spec[math.floor(i / ncol) + 1, i % ncol]) - # Construct a plot Series - plotseries = pd.Series( - { - Settings.get("label_def.uncheckedrecord.label"): row["N_all"] - - row["N_checked"], - Settings.get("label_def.goodrecord.label"): row["N_checked"] - - row["N_labeled"], - Settings.get("label_def.outlier.label"): row["N_labeled"], - } - ) - # Define colors - colors = [Settings._get_color_from_label(label) for label in plotseries.index] - plotseries.plot( + checkname_subset = per_check_labels.loc[checkname] + colors = [per_qc_colmap.get(label, "gray") for label in checkname_subset.index] + + checkname_subset.plot( ax=subax, kind="pie", - autopct="%1.1f%%", + autopct=autopct_format, legend=False, colors=colors, radius=Settings.get("plotting_settings.pie_charts.radius_small"), - fontsize=Settings.get("plotting_settings.pie_charts.txt_size_small_pies"), + fontsize=Settings.get( + "plotting_settings.pie_charts.txt_label_size_small_pies" + ), ) - subax.set_title(f"Effectiveness of {label_too_qcname_map[idx]}") + subax.set_title( + f"{checkname}", + **Settings.get("plotting_settings.pie_charts.small_pie_title_kwargs"), + ) subax.set_ylabel("") i += 1 - logger.debug("Exiting qc_overview_pies function.") + fig.suptitle( + fig_title, **Settings.get("plotting_settings.pie_charts.fig_title_kwargs") + ) return fig diff --git a/src/metobs_toolkit/plot_collection/timeseries_plotting.py b/src/metobs_toolkit/plot_collection/timeseries_plotting.py index fed06866f..5ad4a966b 100644 --- a/src/metobs_toolkit/plot_collection/timeseries_plotting.py +++ b/src/metobs_toolkit/plot_collection/timeseries_plotting.py @@ -14,6 +14,17 @@ def all_gap_labels() -> list[str]: + """Return a list of all gap and gap-fill label strings from Settings. + + The list includes the standard gap label, all successful gap-fill + labels, and all failed gap-fill labels as defined in + ``Settings.get('label_def.*')``. + + Returns + ------- + list of str + Ordered list of gap-related label strings. + """ return ( [Settings.get("label_def.regular_gap.label")] # 'gap' + [ @@ -28,6 +39,14 @@ def all_gap_labels() -> list[str]: def all_outlier_labels() -> list[str]: + """Return a list of all QC outlier label strings from Settings. + + Returns + ------- + list of str + List of label strings for all QC check categories as defined in + ``Settings.get('qc_label_group')``. + """ return [ Settings.get(f"label_def.{cat}.label") for cat in Settings.get("qc_label_group") ] diff --git a/src/metobs_toolkit/qc_collection/__init__.py b/src/metobs_toolkit/qc_collection/__init__.py index 5e668ee7e..aee60de3f 100644 --- a/src/metobs_toolkit/qc_collection/__init__.py +++ b/src/metobs_toolkit/qc_collection/__init__.py @@ -1,8 +1,12 @@ # flake8: noqa: F401 -from .grossvalue_check import gross_value_check -from .persistence_check import persistence_check -from .repetitions_check import repetitions_check -from .step_check import step_check -from .window_variation_check import window_variation_check -from .buddy_check import toolkit_buddy_check +from .checks.duplicated_timestamp import duplicated_timestamp_check +from .checks.invalid_check import drop_invalid_values +from .checks.grossvalue_check import gross_value_check +from .checks.persistence_check import persistence_check +from .checks.repetitions_check import repetitions_check +from .checks.step_check import step_check +from .checks.window_variation_check import window_variation_check + + +from .spatial_checks.buddy_check import toolkit_buddy_check diff --git a/src/metobs_toolkit/qc_collection/buddy_check.py b/src/metobs_toolkit/qc_collection/buddy_check.py deleted file mode 100644 index 92864a231..000000000 --- a/src/metobs_toolkit/qc_collection/buddy_check.py +++ /dev/null @@ -1,1127 +0,0 @@ -from __future__ import annotations - -import os -import logging -import concurrent.futures -from typing import Union, List, Dict, Tuple, TYPE_CHECKING - -import numpy as np -import pandas as pd - -from metobs_toolkit.backend_collection.datetime_collection import to_timedelta -from metobs_toolkit.backend_collection.decorators import log_entry -from metobs_toolkit.qc_collection.distancematrix_func import generate_distance_matrix -from .whitelist import WhiteSet - -if TYPE_CHECKING: - from metobs_toolkit.station import Station - -logger = logging.getLogger("") - - -@log_entry -def synchronize_series( - series_list: List[pd.Series], max_shift: pd.Timedelta -) -> Tuple[pd.DataFrame, Dict]: - """ - Synchronize a list of pandas Series with datetime indexes. - - The target timestamps are defined by: - - - * freq: the highest frequency present in the input series - * origin: the earliest timestamp found across all input series - * closing: the latest timestamp found across all input series. - - Parameters - ---------- - series_list : list of pandas.Series - List of pandas Series with datetime indexes. - max_shift : pandas.Timedelta - Maximum shift in time that can be applied to each timestamp - in synchronization. - - Returns - ------- - pandas.DataFrame - DataFrame with synchronized Series. - dict - Dictionary mapping each synchronized timestamp to its - original timestamp. - """ - - # find highest frequency - frequencies = [to_timedelta(s.index.inferred_freq) for s in series_list] - trg_freq = min(frequencies) - - # find origin and closing timestamp (earliest/latest) - origin = min([s.index.min() for s in series_list]) - closing = max([s.index.max() for s in series_list]) - - # Create target datetime axes - target_dt = pd.date_range(start=origin, end=closing, freq=trg_freq) - - # Synchronize (merge with tolerance) series to the common index - synchronized_series = [] - timestamp_mapping = {} - for s in series_list: - targetdf = ( - s.to_frame() - .assign(orig_datetime=s.index) - .reindex( - index=pd.DatetimeIndex(target_dt), - method="nearest", - tolerance=max_shift, - limit=1, - ) - ) - - # extract the mapping (new -> original) - orig_timestampseries = targetdf["orig_datetime"] - orig_timestampseries.name = "original_timestamp" - timestamp_mapping[s.name] = orig_timestampseries - - synchronized_series.append(s) - - return pd.concat(synchronized_series, axis=1), timestamp_mapping - - -def _validate_safety_net_configs(safety_net_configs: List[Dict]) -> None: - """ - Validate that all required keys are present in safety_net_configs. - - Parameters - ---------- - safety_net_configs : list of dict - List of safety net configuration dictionaries. - - Raises - ------ - ValueError - If safety_net_configs is not a list or contains non-dict elements. - KeyError - If any required key is missing from a safety net configuration. - """ - if safety_net_configs is None: - return None - - required_keys = {"category", "buddy_radius", "z_threshold", "min_sample_size"} - - if not isinstance(safety_net_configs, list): - raise ValueError( - f"safety_net_configs must be a list, got {type(safety_net_configs).__name__}" - ) - - for i, config in enumerate(safety_net_configs): - if not isinstance(config, dict): - raise ValueError( - f"Each safety net config must be a dict, but config at index {i} " - f"is {type(config).__name__}" - ) - - missing_keys = required_keys - set(config.keys()) - if missing_keys: - raise KeyError( - f"Safety net config at index {i} is missing required key(s): " - f"{', '.join(sorted(missing_keys))}. " - f"Required keys are: {', '.join(sorted(required_keys))}" - ) - - -def _find_buddies_by_distance( - distance_df: pd.DataFrame, buddy_radius: Union[int, float] -) -> Dict: - """ - Get neighbouring stations using buddy radius (distance only). - - This is the core distance-based buddy finding function used internally - by other buddy-finding functions. - - Parameters - ---------- - distance_df : pandas.DataFrame - DataFrame containing distances between stations. - buddy_radius : int or float - Maximum distance (in meters) to consider as a buddy. - - Returns - ------- - dict - Dictionary mapping each station to a list of its buddies within the radius. - """ - - buddies = {} - for refstation, distances in distance_df.iterrows(): - bud_stations = distances[distances <= buddy_radius].index.to_list() - bud_stations.remove(refstation) - buddies[refstation] = bud_stations - - return buddies - - -def _find_category_buddies( - metadf: pd.DataFrame, - category_column: str, - max_dist: Union[int, float], - distance_df: pd.DataFrame, -) -> Dict: - """ - Get neighbouring stations using a categorical column and spatial distance. - - This function identifies buddy stations that share the same categorical - value (e.g., LCZ, network, region) and are within a specified distance. - - Parameters - ---------- - metadf : pandas.DataFrame - DataFrame containing metadata for stations. Must include the specified - category column. - category_column : str - The name of the categorical column to group stations by (e.g., 'LCZ', - 'network', 'region'). - max_dist : int or float - Maximum distance (in meters) to consider as a category buddy. - distance_df : pandas.DataFrame - DataFrame containing distances between stations. - - Returns - ------- - dict - Dictionary mapping each station to a list of its category buddies that - are also within the specified distance. - - Notes - ----- - - Category buddies are stations with the same category value as the reference - station. - - The final buddies are the intersection of category buddies and spatial - buddies within `max_dist`. - - Stations with NaN values in the category column are handled: they will not - match with any other station (including other NaN stations). - """ - category_buddies = {} - # Find buddies by category - for refstation in metadf.index: - ref_category = metadf.loc[refstation, category_column] - # Handle NaN values - they should not match with anything - if pd.isna(ref_category): - logger.warning( - "Station %s has NaN value for category '%s' - no category buddies assigned", - refstation, - category_column, - ) - category_buddies[refstation] = [] - else: - ref_buddies = metadf.loc[ - metadf[category_column] == ref_category - ].index.to_list() - category_buddies[refstation] = ref_buddies - - # Find buddies by distance - spatial_buddies = _find_buddies_by_distance(distance_df, max_dist) - - # Intersection of both buddy definitions - final_buddies = {} - for refstation in category_buddies.keys(): - final_buddies[refstation] = list( - set(category_buddies[refstation]).intersection( - set(spatial_buddies[refstation]) - ) - ) - - return final_buddies - - -def _find_spatial_buddies( - distance_df: pd.DataFrame, - metadf: pd.DataFrame, - buddy_radius: Union[int, float], -) -> Dict: - """ - Get neighbouring stations using buddy radius (spatial distance only). - - This function is a wrapper around `_find_category_buddies` that finds - buddies based purely on spatial distance, without any categorical - constraints. It works by creating a dummy category column where all - stations have the same value. - - Parameters - ---------- - distance_df : pandas.DataFrame - DataFrame containing distances between stations. - metadf : pandas.DataFrame - DataFrame containing metadata for stations. The index should be - station names. - buddy_radius : int or float - Maximum distance (in meters) to consider as a buddy. - - Returns - ------- - dict - Dictionary mapping each station to a list of its buddies within - the specified radius. - - See Also - -------- - _find_category_buddies : Find buddies by category and distance. - _find_buddies_by_distance : Core distance-based buddy finding function. - """ - - # Create a temporary metadf with a dummy category column where all - # stations have the same value, so _find_category_buddies will not - # filter by category - temp_metadf = metadf.copy() - temp_metadf["_all_same_category"] = 1 - - return _find_category_buddies( - metadf=temp_metadf, - category_column="_all_same_category", - max_dist=buddy_radius, - distance_df=distance_df, - ) - - -def _filter_to_altitude_buddies( - buddies: Dict, altitudes: pd.Series, max_altitude_diff: Union[int, float] -) -> Dict: - """ - Filter neighbours by maximum altitude difference. - - Parameters - ---------- - buddies : dict - Dictionary mapping each station to a list of its spatial buddies. - altitudes : pandas.Series - Series containing altitudes for each station. - max_altitude_diff : int or float - Maximum allowed altitude difference. - - Returns - ------- - dict - Dictionary mapping each station to a list of altitude-filtered buddies. - """ - - alt_buddies_dict = {} - for refstation, buddylist in buddies.items(): - alt_diff = abs((altitudes.loc[buddylist]) - altitudes.loc[refstation]) - - alt_buddies = alt_diff[alt_diff <= max_altitude_diff].index.to_list() - alt_buddies_dict[refstation] = alt_buddies - return alt_buddies_dict - - -def _filter_to_minimum_samplesize(buddydict: Dict, min_sample_size: int) -> Dict: - """ - Filter stations that are too isolated using minimum sample size. - - Parameters - ---------- - buddydict : dict - Dictionary mapping each station to a list of its buddies. - min_sample_size : int - Minimum number of buddies required. - - Returns - ------- - dict - Dictionary mapping each station to a list of buddies meeting the - minimum sample size. - """ - - to_check_stations = {} - for refstation, buddies in buddydict.items(): - if len(buddies) < min_sample_size: - # not enough buddies - to_check_stations[refstation] = [] # remove buddies - else: - to_check_stations[refstation] = buddies - return to_check_stations - - -@log_entry -def create_groups_of_buddies(buddydict: Dict) -> List[Tuple]: - """ - Create unique groups of buddies from a buddy dictionary. - - Parameters - ---------- - buddydict : dict - Dictionary mapping each station to a list of its buddies. - - Returns - ------- - list of tuple - List of tuples, each containing a group of station names. - """ - - grouped_stations = [] - groups = [] - for refstation, buddies in buddydict.items(): - if not bool(buddies): - continue - if refstation in grouped_stations: - continue - group = tuple([refstation, *buddies]) - - grouped_stations.extend([*group]) - groups.append(group) - - return groups - - -@log_entry -def toolkit_buddy_check( - target_stations: list[Station], - metadf: pd.DataFrame, - obstype: str, - spatial_buddy_radius: Union[int, float], - spatial_min_sample_size: int, - max_alt_diff: Union[int, float, None], - min_std: Union[int, float], - spatial_z_threshold: Union[int, float], - N_iter: int, - instantaneous_tolerance: pd.Timedelta, - # Whitelist arguments - whiteset: WhiteSet, - # Safety nets - safety_net_configs: List[Dict] = None, - # Technical - lapserate: Union[float, None] = None, # -0.0065 for temperature - use_mp: bool = True, -) -> Tuple[list, dict]: - """ - Spatial buddy check. - - The buddy check compares an observation against its neighbors - (i.e. spatial buddies). The check loops over all the groups, which are stations - within a radius of each other. For each group, the z-value of the reference - observation is computed given the sample of spatial buddies. If one (or more) - exceeds the `spatial_z_threshold`, the most extreme (=baddest) observation of - that group is labeled as an outlier. - - Multiple iterations of this checks can be done using the N_iter. - - Optionally, one or more safety nets can be applied. A safety net tests - potential outliers against a sample of stations that share a categorical - attribute (e.g., LCZ, network). If the z-value computed using the safety - net sample is below the specified threshold, the outlier is "saved" and - removed from the outlier set for the current iteration. - - Safety nets are applied in the order they are specified, allowing for - multi-level filtering (e.g., first test against LCZ buddies, then against - network buddies). - - A schematic step-by-step description of the buddy check: - - #. A distance matrix is constructed for all interdistances between - the stations. This is done using the haversine approximation. - #. Groups of spatial buddies (neighbours) are created by using the - `spatial_buddy_radius.` These groups are further filtered by: - - * removing stations from the groups that differ to much in altitude - (based on the `max_alt_diff`) - * removing groups of buddies that are too small (based on the - `min_sample_size`) - - #. Observations per group are synchronized in time (using the - `instantaneous_tolerance` for allignment). - #. If a `lapsrate` is specified, the observations are corrected for - altitude differences. - #. The following steps are repeated for `N-iter` iterations: - - #. The values of outliers flagged by a previous iteration are converted to - NaN's. Therefore they are not used in any following score or sample. - #. For each buddy group: - - * The mean, standard deviation (std), and sample size are computed. - * If the std is lower than the `minimum_std`, it is replaced by the - minimum std. - * Chi values are calculated for all records. - * For each timestamp the record with the highest Chi is tested if - it is larger then spatial_z_threshold. - If so, that record is flagged as an outlier. It will be ignored - in the next iteration. - - #. If `safety_net_configs` is provided, the following steps are applied - on the outliers flagged by the current iteration, for each safety net - in order: - - * Category buddies (stations sharing the same category value within - the specified radius) are identified. - * The safety net sample is tested in size (sample size must be at - least `min_sample_size`). If the condition is not met, the safety - net test is not applied. - * The safety net test is applied: - - * The mean and std are computed of the category-buddy sample. If - the std is smaller than `min_std`, the latter is used. - * The z-value is computed for the target record (= flagged outlier). - * If the z-value is smaller than the safety net's `z_threshold`, - the tested outlier is "saved" and removed from the set of outliers - for the current iteration. - - #. If `whiteset` contains records, any outliers that match the white-listed - timestamps (and optionally station names) are removed from the outlier set - for the current iteration. White-listed records participate in all buddy - check calculations but are not flagged as outliers in the final results. - - Parameters - ---------- - target_stations : list[Station] - A list of Station objects to apply the buddy check on. These should be - stations that contain the target observation type. - metadf : pandas.DataFrame - DataFrame containing station metadata including coordinates (geometry) - and altitude information for all stations. - obstype : str - The observation type that has to be checked. - spatial_buddy_radius : int or float - The radius to define spatial neighbors in meters. - spatial_min_sample_size : int - The minimum sample size to calculate statistics on used by - spatial-buddy samples. - max_alt_diff : int, float, or None - The maximum altitude difference allowed for buddies. If None, - no altitude filter is applied. - min_std : int or float - The minimum standard deviation for sample statistics. This should - represent the accuracy of the observations. - spatial_z_threshold : int or float - The threshold, tested with z-scores, for flagging observations as outliers. - N_iter : int - The number of iterations to perform the buddy check. - instantaneous_tolerance : pandas.Timedelta - The maximum time difference allowed for synchronizing observations. - whiteset : WhiteSet - A WhiteSet instance containing records that should be excluded from - outlier detection. Records in the WhiteSet undergo the buddy check - iterations as regular records but are removed from the outlier set - at the end of each iteration. - safety_net_configs : list of dict, optional - List of safety net configurations to apply in order. Each dict must - contain: - - * 'category': str, the metadata column name to group by (e.g., 'LCZ', - 'network') - * 'buddy_radius': int or float, maximum distance for category buddies - (in meters) - * 'z_threshold': int or float, z-value threshold for saving outliers - * 'min_sample_size': int, minimum number of buddies required for the - safety net test - - The default is None. - lapserate : float or None, optional - Describes how the obstype changes with altitude (in meters). If - None, no altitude correction is applied. For temperature, a - common value is -0.0065. - use_mp : bool, optional - Use multiprocessing to speed up the buddy check. The default is True. - - Returns - ------- - list - A list of tuples containing the outlier station, timestamp, - and detail message. Each tuple is in the form (station_name, - timestamp, message). - dict - A dictionary mapping each synchronized timestamp to its original - timestamp. - - Notes - ----- - - * The altitude of the stations can be extracted from GEE by using the - `Dataset.get_altitude()` method. - * The LCZ of the stations can be extracted from GEE by using the - `Dataset.get_LCZ()` method. - - """ - - # Validate safety net configs if provided - _validate_safety_net_configs(safety_net_configs) - - # ----- Part 1: construct buddy groups ------ - # compute distance metric - logger.debug("Calculating distance matrix with Haversine formula") - dist_matrix = generate_distance_matrix(metadf) - - # find potential buddies by distance - logger.debug( - "Finding spatial buddies within radius of %s meters", spatial_buddy_radius - ) - spatial_buddies = _find_spatial_buddies( - distance_df=dist_matrix, metadf=metadf, buddy_radius=spatial_buddy_radius - ) - - # filter buddies by altitude difference - if max_alt_diff is not None: - logger.debug( - "Filtering buddies by maximum altitude difference of %s meters", - max_alt_diff, - ) - if metadf["altitude"].isna().any(): - raise ValueError( - "At least one station has a NaN \ -value for 'altitude'" - ) - # Filter by altitude difference - spatial_buddies = _filter_to_altitude_buddies( - buddies=spatial_buddies, - altitudes=metadf["altitude"], - max_altitude_diff=max_alt_diff, - ) - - # Filter by sample size (based on the number of buddy stations) - logger.debug( - "Filtering buddies by minimum sample size of %s", spatial_min_sample_size - ) - spatial_buddies = _filter_to_minimum_samplesize( - buddydict=spatial_buddies, min_sample_size=spatial_min_sample_size - ) - - # create unique groups of buddies (list of tuples) - logger.debug("Creating groups of buddies") - buddygroups = create_groups_of_buddies(spatial_buddies) - logger.debug("Number of buddy groups created: %s", len(buddygroups)) - - # ---- Part 2: Preparing the records ----- - - # construct a wide observation dataframe - logger.debug("Constructing wide observation DataFrame for obstype: %s", obstype) - concatlist = [] - for sta in target_stations: - if obstype in sta.sensordata.keys(): - records = sta.get_sensor(obstype).series - records.name = sta.name - concatlist.append(records) - - # synchronize the timestamps - logger.debug("Synchronizing timestamps") - combdf, timestamp_map = synchronize_series( - series_list=concatlist, max_shift=instantaneous_tolerance - ) - - # lapse rate correction - if lapserate is not None: - logger.debug("Applying lapse rate correction with rate: %s", lapserate) - # get altitude dataframe - altdict = {sta.name: sta.site.altitude for sta in target_stations} - altseries = pd.Series(altdict) - altcorrectionseries = (altseries - altseries.min()) * lapserate - combdf = combdf - altcorrectionseries # Correct for altitude - - # ---- Part 3 : Apply buddy check on each group, - # rejecting the most extreme outlier - - outliersbin = [] - for i in range(N_iter): - logger.debug("Starting iteration %s of %s", i + 1, N_iter) - # convert values to NaN, if they are labeled as outlier in - # previous iteration - if bool(outliersbin): - logger.debug("Converting previous-iteration outliers to NaN") - for outlier_station, outlier_time, _msg in outliersbin: - if outlier_station in combdf.columns: - combdf.loc[outlier_time, outlier_station] = np.nan - - if use_mp: - # Use multiprocessing generator (parallelization) - num_cpus = os.cpu_count() - # since this check is an instantaneous check --> - # perfect for splitting the dataset in chunks in time - chunks = np.array_split(combdf, num_cpus) - - # create inputargs for each buddygroup, and for each chunk in time - inputargs = [ - ( - buddygroup, - chunk, - spatial_min_sample_size, - min_std, - spatial_z_threshold, - ) - for buddygroup in buddygroups - for chunk in chunks - ] - - with concurrent.futures.ProcessPoolExecutor() as executor: - outliers = executor.map(find_buddy_group_outlier, inputargs) - outliers = list(outliers) - - else: - # create inputargs for each buddygroup, and for each chunk in time - inputargs = [ - ( - buddygroup, - combdf, - spatial_min_sample_size, - min_std, - spatial_z_threshold, - ) - for buddygroup in buddygroups - ] - - logger.debug("Finding outliers in each buddy group") - outliers = list(map(find_buddy_group_outlier, inputargs)) - - # unpack double nested list - outliers = [item for sublist in outliers for item in sublist] - - # Apply safety nets (if configured) - if safety_net_configs: - logger.debug( - "Applying %s safety net(s) to %s outliers", - len(safety_net_configs), - len(outliers), - ) - outliers = apply_safetynets( - outliers=outliers, - safety_net_configs=safety_net_configs, - wideobsds=combdf, - metadf=metadf, - distance_df=dist_matrix, - max_alt_diff=max_alt_diff, - min_std=min_std, - ) - # NOTE: Records saved by any safety net will be tested again in - # the following iteration. A different result can occur if the - # spatial/safety net sample changes in the next iteration. - - # Save white-listed records - outliers = save_whitelist_records( - outliers=outliers, - whiteset=whiteset, - obstype=obstype, - ) - # NOTE: The white-listed records are removed from the outliers at the end - # of each iteration, similar to the safety nets. They participate in - # the buddy check calculations but are not flagged as outliers. - - # Save white-listed records - outliers = save_whitelist_records( - outliers=outliers, - whiteset=whiteset, - obstype=obstype, - ) - # NOTE: The white-listed records are removed from the outliers at the end - # of each iteration, similar to the LCZ safety net. They participate in - # the buddy check calculations but are not flagged as outliers. - - # Add reference to the iteration in the msg of the outliers - outliers = [ - (station, timestamp, f"{msg} (iteration {i+1}/{N_iter})") - for station, timestamp, msg in outliers - ] - - outliersbin.extend(outliers) - i += 1 - - return outliersbin, timestamp_map - - -@log_entry -def apply_safety_net( - outliers: list, - category_buddies: dict, - wideobsds: pd.DataFrame, - safety_z_threshold: Union[int, float], - min_sample_size: int, - min_std: Union[int, float], - category_name: str, -) -> list: - """ - Apply a category-based safety net to outliers detected by the spatial buddy check. - - This function works with any categorical grouping (e.g., LCZ, network, region). - - For each outlier, this function checks whether the value can be "saved" by - comparison with its category buddies (stations with the same category value - and within a certain distance). If the outlier's value is within the specified - z-threshold when compared to its category buddies, it is not considered an - outlier for this iteration. - - Parameters - ---------- - outliers : list of tuple - List of detected outliers, each as a tuple (station_name, timestamp, message). - category_buddies : dict - Dictionary mapping each station to a list of its category buddies. - wideobsds : pandas.DataFrame - Wide-format DataFrame with stations as columns and timestamps as index. - safety_z_threshold : int or float - Z-value threshold for saving an outlier using the safety net. - min_sample_size : int - Minimum number of category buddies required to apply the safety net. - min_std : int or float - Minimum standard deviation to use for z-value calculation. - category_name : str - Name of the category being used (for logging and messages). - - Returns - ------- - list of tuple - List of outliers that were not saved by the safety net, each as a tuple - (station_name, timestamp, message). Outliers that are "saved" are not - included in the returned list. - - Notes - ----- - - The safety net is only applied if there are enough category buddies and - non-NaN values. - - Outliers from previous iterations are already set to NaN in `wideobsds` - and are not considered. - - The function appends a message to the outlier if the safety net is not - applied or not passed. - """ - checked_outliers = [] - for outl in outliers: - outlstation, outltimestamp, outl_msg = outl - - outl_value = wideobsds.loc[outltimestamp, outlstation] - outl_category_buddies = category_buddies.get(outlstation, []) - - # Check if sample size is sufficient - if len(outl_category_buddies) < min_sample_size: - msg = f"Too few {category_name} buddies to apply safety net ({len(outl_category_buddies)} < {min_sample_size})." - logger.debug( - "Skip %s safety net for %s: too few buddies (%s < %s).", - category_name, - outlstation, - len(outl_category_buddies), - min_sample_size, - ) - checked_outliers.append((outlstation, outltimestamp, outl_msg + msg)) - continue - - # Get safety net samples - # NOTE: The sample is constructed using wideobsds, thus outliers - # from the current iteration are not taken into account! - # Outliers from previous iterations are taken into account since - # wideobsdf is altered (NaNs placed at outlier records) at the beginning - # of each iteration. - safetynet_samples = wideobsds.loc[outltimestamp][outl_category_buddies] - - # Compute scores - sample_mean = safetynet_samples.mean() - sample_std = safetynet_samples.std() - sample_non_nan_count = safetynet_samples.notna().sum() - - # Instantaneous sample size check - if sample_non_nan_count < min_sample_size: - msg = f"Too few non-NaN {category_name} buddies ({sample_non_nan_count} < {min_sample_size})." - logger.debug( - "Skip %s safety net for %s: too few non-NaN buddies (%s < %s).", - category_name, - outlstation, - sample_non_nan_count, - min_sample_size, - ) - checked_outliers.append((outlstation, outltimestamp, outl_msg + msg)) - continue - - # Apply min std - if sample_std < min_std: - sample_std = min_std - - # Check if saved - z_value = abs((outl_value - sample_mean) / sample_std) - if z_value <= safety_z_threshold: - # Is saved - logger.debug( - "%s at %s is saved by %s safety net with z=%.2f.", - outlstation, - outltimestamp, - category_name, - z_value, - ) - # Do not append the current outl to checked (it's saved) - else: - # Not saved by the safety net - msg = f"{category_name} safety net applied but not saved (z={z_value:.2f} > {safety_z_threshold})." - checked_outliers.append((outlstation, outltimestamp, outl_msg + msg)) - continue - - n_saved = len(outliers) - len(checked_outliers) - logger.debug( - "A total of %s records are saved by the %s safety net.", n_saved, category_name - ) - return checked_outliers - - -@log_entry -def apply_safetynets( - outliers: list, - safety_net_configs: List[Dict], - wideobsds: pd.DataFrame, - metadf: pd.DataFrame, - distance_df: pd.DataFrame, - max_alt_diff: Union[int, float, None], - min_std: Union[int, float], -) -> list: - """ - Apply multiple safety nets in sequence to outliers. - - Each safety net is defined by a category column, buddy radius, z-threshold, - and minimum sample size. Outliers are tested against each safety net in order, - and if saved by any of them, they are removed from the outlier list. - - Parameters - ---------- - outliers : list of tuple - List of detected outliers, each as a tuple (station_name, timestamp, message). - safety_net_configs : list of dict - List of safety net configurations. Each dict must contain: - - 'category': str, the metadata column name to group by - - 'buddy_radius': int or float, maximum distance for category buddies - - 'z_threshold': int or float, z-value threshold for saving outliers - - 'min_sample_size': int, minimum number of buddies required - wideobsds : pandas.DataFrame - Wide-format DataFrame with stations as columns and timestamps as index. - metadf : pandas.DataFrame - DataFrame containing station metadata. - distance_df : pandas.DataFrame - DataFrame containing distances between stations. - max_alt_diff : int, float, or None - Maximum altitude difference allowed for buddies. If None, no altitude - filter is applied. - min_std : int or float - Minimum standard deviation for sample statistics. - - Returns - ------- - list of tuple - List of outliers that were not saved by any safety net. - """ - if not safety_net_configs: - return outliers - - current_outliers = outliers - - for config in safety_net_configs: - category = config["category"] - buddy_radius = config["buddy_radius"] - z_threshold = config["z_threshold"] - min_sample_size = config["min_sample_size"] - - logger.debug( - "Applying %s safety net (radius=%s, z_threshold=%s, min_sample=%s)", - category, - buddy_radius, - z_threshold, - min_sample_size, - ) - - # Find category buddies - category_buddies = _find_category_buddies( - metadf=metadf, - category_column=category, - max_dist=buddy_radius, - distance_df=distance_df, - ) - - # Filter by altitude difference if specified - if max_alt_diff is not None: - category_buddies = _filter_to_altitude_buddies( - buddies=category_buddies, - altitudes=metadf["altitude"], - max_altitude_diff=max_alt_diff, - ) - - # Apply the safety net - current_outliers = apply_safety_net( - outliers=current_outliers, - category_buddies=category_buddies, - wideobsds=wideobsds, - safety_z_threshold=z_threshold, - min_sample_size=min_sample_size, - min_std=min_std, - category_name=category, - ) - - return current_outliers - - -@log_entry -def save_whitelist_records( - outliers: list, - whiteset: WhiteSet, - obstype: str, -) -> list: - """Remove whitelisted records from the outlier list. - - This function filters out any outliers that are present in the WhiteSet. - Whitelisted records are known valid observations that should not be flagged - as outliers, even if they are detected by the buddy check. - - Parameters - ---------- - outliers : list of tuple - List of detected outliers, each as a tuple (station_name, timestamp, message). - whiteset : WhiteSet - A WhiteSet instance containing records that should be excluded from outlier - detection. The WhiteSet is converted to station-specific and obstype-specific - SensorWhiteSet instances for each station in the outliers list. - obstype : str - The observation type being checked. Used to filter the whiteset for the - target obstype. - - Returns - ------- - list of tuple - List of outliers excluding those that are whitelisted. Each tuple contains - (station_name, timestamp, message). - - Notes - ----- - * Whitelisted records undergo the buddy check iterations as if they are regular - records. - * Only at the end of each iteration are they filtered out from the outliers list. - * This allows whitelisted records to still influence the statistics of their - buddy groups. - * The function processes each station separately by creating a SensorWhiteSet - for each station-obstype combination. - """ - - outldf = pd.DataFrame(outliers, columns=["name", "datetime", "message"]) - - for outlsta in outldf["name"].unique(): - # Create a sensorwhiteset for each station - sensorwhiteset = whiteset.create_sensorwhitelist( - stationname=outlsta, obstype=obstype - ) - # get the white-listed datetimes for the station - outliers_dts = sensorwhiteset.catch_white_records( - outliers_idx=pd.DatetimeIndex( - data=outldf[outldf["name"] == outlsta]["datetime"], name="datetime" - ) - ) - - # subset to the saved outliers - outldf = outldf.drop( - outldf[ - (outldf["name"] == outlsta) & (~outldf["datetime"].isin(outliers_dts)) - ].index - ) - - # convert back to a list of tuples (name, datetime, message) - outliers = list(outldf.itertuples(index=False, name=None)) - return outliers - - -@log_entry -def find_buddy_group_outlier(inputarg: Tuple) -> List[Tuple]: - """ - Apply a buddy check on a group to identify outliers. - - Parameters - ---------- - inputarg : tuple - A tuple containing: - - * buddygroup : list - List of station names that form the buddy group. - * combdf : pandas.DataFrame - DataFrame containing the combined data for all stations. - * min_sample_size : int - Minimum number of non-NaN values required in the buddy group for a - valid comparison. - * min_std : float - Minimum standard deviation to use when calculating z-scores. - * outlier_threshold : float - Threshold for identifying outliers in terms of z-scores. - - Returns - ------- - list of tuple - Each tuple contains: - - * str : The station name of the most extreme outlier. - * pandas.Timestamp : The timestamp of the outlier. - * str : A detailed message describing the outlier. - - Notes - ----- - This function performs the following steps: - - 1. Subsets the data to the buddy group. - 2. Calculates the mean, standard deviation, and count of non-NaN values - for each timestamp. - 3. Filters out timestamps with insufficient data. - 4. Replaces standard deviations below the minimum threshold with the - minimum value. - 5. Converts station values to z-scores. - 6. Identifies timestamps with at least one outlier. - 7. Locates the most extreme outlier for each timestamp. - 8. Generates a detailed message for each outlier. - """ - - buddygroup, combdf = inputarg[0], inputarg[1] - min_sample_size, min_std, outlier_threshold = inputarg[2:] - - # subset to the buddies - buddydf = combdf[[*buddygroup]] - - # calculate std and mean row wise - buddydf["mean"] = buddydf[[*buddygroup]].mean(axis=1) - buddydf["std"] = buddydf[[*buddygroup]].std(axis=1) - buddydf["non_nan_count"] = buddydf[[*buddygroup]].notna().sum(axis=1) - - # subset to samples with enough members (check for each timestamp - - # specifically) - buddydf = buddydf.loc[buddydf["non_nan_count"] >= min_sample_size] - - # replace std by minimum, if needed - buddydf.loc[buddydf["std"] < min_std, "std"] = np.float32(min_std) - - # Convert values to sigmas - for station in buddygroup: - buddydf[station] = (buddydf[station] - buddydf["mean"]).abs() / buddydf["std"] - - # Drop rows for which all values are smaller than the threshold - # (speed up the last step) - buddydf["timestamp_with_outlier"] = buddydf[[*buddygroup]].apply( - lambda row: any(row > outlier_threshold), axis=1 - ) - buddydf = buddydf.loc[buddydf["timestamp_with_outlier"]] - - # locate the most extreme outlier per timestamp - buddydf["is_the_most_extreme_outlier"] = buddydf[[*buddygroup]].idxmax(axis=1) - - @log_entry - def msgcreator(row): - """ - Create a detailed message describing an outlier. - - Parameters - ---------- - row : pandas.Series - A row from the buddy DataFrame containing outlier information, - including 'is_the_most_extreme_outlier', 'mean', and 'std' columns. - - Returns - ------- - str - Formatted message describing the outlier with its z-score and - buddy group statistics. - """ - retstr = f"Outlier at {row['is_the_most_extreme_outlier']}" - retstr += f" with chi value \ -{row[row['is_the_most_extreme_outlier']]:.2f}," - retstr += ( - f" is part of {sorted(buddygroup)}, with mean: {row['mean']:.2f}, " - f"std: {row['std']:.2f}. " - ) - return retstr - - # detail info string - buddydf["detail_msg"] = buddydf.apply( - lambda row: msgcreator(row), axis=1, result_type="reduce" - ) - - return list( - zip( - buddydf["is_the_most_extreme_outlier"], buddydf.index, buddydf["detail_msg"] - ) - ) diff --git a/src/metobs_toolkit/qc_collection/checks/common_functions.py b/src/metobs_toolkit/qc_collection/checks/common_functions.py new file mode 100644 index 000000000..15910ee81 --- /dev/null +++ b/src/metobs_toolkit/qc_collection/checks/common_functions.py @@ -0,0 +1,100 @@ +import pandas as pd +import logging + +from metobs_toolkit.backend_collection.decorators import log_entry +from metobs_toolkit.qcresult import ( + pass_cond, + flagged_cond, + saved_cond, + unchecked_cond, + unmet_cond, +) + +logger = logging.getLogger("") + + +@log_entry +def test_moving_window_condition( + records: pd.Series, windowsize: pd.Timedelta, min_records_per_window: int +) -> bool: + """ + Test if the resolution of the records meets the window constraints. + + Parameters + ---------- + records : pd.Series + Series with a datetime-like index. + windowsize : pd.Timedelta + Size of the moving window. + min_records_per_window : int + Minimum number of records required per window. + + Returns + ------- + bool + True if the minimum window members condition is met, False otherwise. + + Raises + ------ + TypeError + If any argument is not of the expected type. + Exception + If the input records do not have a perfectly regular timestamp. + """ + + # Get frequency of records + freqstr = pd.infer_freq(records.index) + if freqstr is None: + raise Exception("The input records do not have a perfectly regular timestamp.") + # Convert to timedelta + # Note: sometimes 'h' is returned, and this gives issues, so add a 1 in front + if not freqstr[0].isdigit(): + freqstr = "1" + freqstr + + freq = pd.Timedelta(freqstr) + + # Test if minimum window members condition is met + ismet = (windowsize / freq) >= min_records_per_window + logger.debug("Exiting function test_moving_window_condition.") + return ismet + + +def create_qcresult_flags( + all_input_records: pd.Series, + unmet_cond_idx: pd.DatetimeIndex, + outliers_before_white_idx: pd.DatetimeIndex, + outliers_after_white_idx: pd.DatetimeIndex, +) -> pd.Series: + """Create quality control flags series for all input records. + + This function generates a pandas Series containing QC flags for all timestamps + in the input records. Records are categorized as: unchecked (NaN values), + passed (valid non-outliers), unmet condition, saved (whitelisted outliers), + or flagged (detected outliers). + + Parameters + ---------- + all_input_records : pd.Series + Complete series of records with datetime index to flag. + unmet_cond_idx : pd.DatetimeIndex + Timestamps where QC check conditions were not met. + outliers_before_white_idx : pd.DatetimeIndex + Timestamps of all detected outliers before whitelist filtering. + outliers_after_white_idx : pd.DatetimeIndex + Timestamps of outliers remaining after whitelist filtering. + + Returns + ------- + pd.Series + Series with same index as all_input_records containing QC flag strings: + 'unchecked', 'passed', 'condition_unmet', 'saved', or 'flagged'. + """ + flags = pd.Series(data=unchecked_cond, index=all_input_records.index) + flags.loc[all_input_records.dropna().index] = pass_cond + flags.loc[unmet_cond_idx] = unmet_cond + + saved_records_idx = outliers_before_white_idx.difference(outliers_after_white_idx) + flags.loc[saved_records_idx] = saved_cond + flags.loc[outliers_after_white_idx] = flagged_cond + + return flags diff --git a/src/metobs_toolkit/qc_collection/checks/duplicated_timestamp.py b/src/metobs_toolkit/qc_collection/checks/duplicated_timestamp.py new file mode 100644 index 000000000..0a86c8b7a --- /dev/null +++ b/src/metobs_toolkit/qc_collection/checks/duplicated_timestamp.py @@ -0,0 +1,72 @@ +import logging + +import pandas as pd + + +from .common_functions import create_qcresult_flags +from metobs_toolkit.backend_collection.decorators import log_entry +from metobs_toolkit.qcresult import QCresult + +logger = logging.getLogger("") + + +@log_entry +def duplicated_timestamp_check(records: pd.Series) -> QCresult: + """Check for duplicated timestamps in a time series. + + Identifies all records that share the same timestamp. All occurrences of + duplicated timestamps are flagged as outliers (not just subsequent ones). + This check is performed before invalid value checking. + + Parameters + ---------- + records : pd.Series + Series with a datetime-like index to check for duplicates. + + Returns + ------- + QCresult + Quality control result object containing flags, outliers, and details + for the duplicated timestamp check. + + Notes + ----- + * All records with duplicated timestamps are flagged, including the first occurrence. + * Values are coerced to numeric during this check to ensure compatibility with + downstream processing. + * Details include a list of all values sharing each duplicated timestamp. + """ + # find all duplicates + duplicates = records[records.index.duplicated(keep=False)] + + # Drop dulicates from series, they are a mess to take along + no_dup_records = records[~records.index.duplicated(keep="first")] + + # create flags (no duplicates in the index!) + flags = create_qcresult_flags( + all_input_records=no_dup_records, # NO duplicates here + unmet_cond_idx=pd.DatetimeIndex([]), + outliers_before_white_idx=duplicates.index.unique(), + outliers_after_white_idx=duplicates.index.unique(), + ) + + # Special case: this check is performed before the invalid check, so values + # must be cast to numeric to avoid issues when combining them in the outliersdf + duplicates = pd.to_numeric(duplicates, errors="coerce") + + qcresult = QCresult( + checkname="duplicated_timestamp", + checksettings={}, + flags=flags, + detail="no details", + ) + + # Create and add details + if not duplicates.empty: + # For each duplicated timestamp, join all values as a comma-separated string + details = duplicates.groupby(duplicates.index).apply( + lambda x: "duplicated timestamp with: " + ", ".join(map(str, x.values)) + ) + qcresult.add_details_by_series(detail_series=details) + + return qcresult diff --git a/src/metobs_toolkit/qc_collection/checks/grossvalue_check.py b/src/metobs_toolkit/qc_collection/checks/grossvalue_check.py new file mode 100644 index 000000000..cd122da50 --- /dev/null +++ b/src/metobs_toolkit/qc_collection/checks/grossvalue_check.py @@ -0,0 +1,88 @@ +import logging +from typing import Union +import pandas as pd + +from .common_functions import create_qcresult_flags + +from metobs_toolkit.backend_collection.decorators import log_entry +from metobs_toolkit.qcresult import QCresult +from metobs_toolkit.qc_collection.whitelist import SensorWhiteSet + +logger = logging.getLogger("") + + +@log_entry +def gross_value_check( + records: pd.Series, + lower_threshold: Union[int, float], + upper_threshold: Union[int, float], + sensorwhiteset: SensorWhiteSet, +) -> QCresult: + """ + Identify outliers in a time series based on lower and upper thresholds. + + Parameters + ---------- + records : pd.Series + Series with a datetime-like index to check. + lower_threshold : int or float + Threshold below which records are flagged as outliers. + upper_threshold : int or float + Threshold above which records are flagged as outliers. + sensorwhiteset : SensorWhiteSet + A SensorWhiteSet instance containing timestamps that should be excluded from outlier detection. + Records matching the whiteset criteria will not be flagged as outliers even if they fall + outside the threshold range. + + Returns + ------- + QCresult + Quality control result object containing flags, outliers, and details + for the gross value check. + """ + + # Drop NaN values + to_check_records = records.dropna() + # Identify outliers + outliers_idx = to_check_records[ + (to_check_records < lower_threshold) | (to_check_records > upper_threshold) + ].index + + # Exclude white records if provided + outliers_after_white_idx = sensorwhiteset.catch_white_records( + outliers_idx=outliers_idx + ) + + # Create QCresult flags + flags = create_qcresult_flags( + all_input_records=records, + unmet_cond_idx=pd.DatetimeIndex([]), + outliers_before_white_idx=outliers_idx, + outliers_after_white_idx=outliers_after_white_idx, + ) + + checksettings = { + "lower_threshold": lower_threshold, + "upper_threshold": upper_threshold, + "sensorwhiteset": sensorwhiteset, + } + + qcresult = QCresult( + checkname="gross_value", + checksettings=checksettings, + flags=flags, + detail="no details", + ) + + # Create and add details + if not outliers_after_white_idx.empty: + detailseries = pd.Series( + data="value outside gross value thresholds [" + + str(lower_threshold) + + ", " + + str(upper_threshold) + + "]", + index=outliers_after_white_idx, + ) + qcresult.add_details_by_series(detail_series=detailseries) + return qcresult diff --git a/src/metobs_toolkit/qc_collection/checks/invalid_check.py b/src/metobs_toolkit/qc_collection/checks/invalid_check.py new file mode 100644 index 000000000..d7f561354 --- /dev/null +++ b/src/metobs_toolkit/qc_collection/checks/invalid_check.py @@ -0,0 +1,63 @@ +import logging + +import pandas as pd + + +logger = logging.getLogger("") + + +def drop_invalid_values( + records: pd.Series, skip_records: pd.DatetimeIndex +) -> pd.Series: + """Remove invalid (non-numeric) values from a time series. + + Filters out values that could not be cast to numeric types. Invalid timestamps + are treated as gaps and removed from the series rather than being flagged as + outliers. This allows the gap detection mechanism to handle them appropriately. + + Parameters + ---------- + records : pd.Series + Series with a datetime-like index containing values to validate. + skip_records : pd.DatetimeIndex + Records to temporarily exclude from the check (typically duplicated timestamps). + These records are preserved regardless of validity and added back after filtering. + + Returns + ------- + pd.Series + Filtered series containing only records with valid numeric values, + plus all skipped records. + + Notes + ----- + * Invalid values are interpreted as missing data (gaps) rather than outliers. + * Skipped records are preserved to avoid interfering with prior QC checks. + * This function does not raise an error if the check was previously applied. + """ + skipped_data = records.loc[skip_records] + targets = records.drop(skip_records) + + # Option 1: Create a outlier label for these invalid inputs, + # and treat them as outliers + # outlier_timestamps = targets[~targets.notnull()] + + # self._update_outliers( + # qccheckname="invalid_input", + # outliertimestamps=outlier_timestamps.index, + # and treat them as outliers + # extra_columns={}, + # overwrite=False, + # ) + + # Option 2: Since there is not numeric value present, these timestamps are + # interpreted as gaps --> remove the timestamp, so that it is captured by the + # gap finder. + + # Note: do not treat the first/last timestamps differently. That is + # a philosiphycal choice. + + validrecords = targets[targets.notnull()] # subset to numerical casted values + # add the skipped records back + validrecords = pd.concat([validrecords, skipped_data]).sort_index() + return validrecords diff --git a/src/metobs_toolkit/qc_collection/checks/persistence_check.py b/src/metobs_toolkit/qc_collection/checks/persistence_check.py new file mode 100644 index 000000000..31bb1e872 --- /dev/null +++ b/src/metobs_toolkit/qc_collection/checks/persistence_check.py @@ -0,0 +1,163 @@ +import logging + +import numpy as np +import pandas as pd + +from .common_functions import test_moving_window_condition, create_qcresult_flags + +from metobs_toolkit.qcresult import ( + QCresult, + pass_cond, + flagged_cond, + unmet_cond, +) +from metobs_toolkit.backend_collection.decorators import log_entry +from metobs_toolkit.backend_collection.datetime_collection import ( + timestamps_to_datetimeindex, +) +from metobs_toolkit.qc_collection.whitelist import SensorWhiteSet + +logger = logging.getLogger("") + + +def _has_window_unique_values(window: pd.Series) -> bool: + """ + Check if all non-NaN values in the window are identical. + + Parameters + ---------- + window : pd.Series + A pandas Series representing the rolling window. + + Returns + ------- + bool + True if all non-NaN values are identical, False otherwise. + """ + a = window.values + a = a[~np.isnan(a)] + return (a[0] == a).all() if len(a) > 0 else False + + +@log_entry +def persistence_check( + records: pd.Series, + timewindow: pd.Timedelta, + min_records_per_window: int, + sensorwhiteset: SensorWhiteSet, +) -> QCresult: + """ + Check if values are not constant in a moving time window. + + Performs a persistence check on a time series to identify periods where observations remain constant + within a specified time window. If the values are constant, all records in the moving window are + flagged as outliers. + + Parameters + ---------- + records : pd.Series + A pandas Series containing the time series data to be checked. The index should be datetime-like. + timewindow : pd.Timedelta + The size of the rolling time window to check for persistence. + min_records_per_window : int + The minimum number of non-NaN records required within the time window for the check to be valid. + sensorwhiteset : SensorWhiteSet + A SensorWhiteSet instance containing timestamps that should be excluded from outlier detection. + Records matching the whiteset criteria will not be flagged as outliers even if they meet the + persistence criteria. + + Returns + ------- + QCresult + Quality control result object containing flags, outliers, and details + for the persistence check. + + Notes + ----- + + * The function uses a rolling window approach to check if all non-NaN values within the window + are identical. + * If the minimum number of records per window is locally not met, the function logs a warning and skips + the persistence check. + * This function can be computationally expensive for large datasets or small time windows. + + Warnings + -------- + If the minimum number of records per window is not met over the full time series, a warning is logged, and the function + returns an empty DatetimeIndex. + """ + checksettings = { + "timewindow": timewindow, + "min_records_per_window": min_records_per_window, + "sensorwhiteset": sensorwhiteset, + } + + to_check_records = records.dropna() # Exclude outliers and gaps + # Test if the conditions for the moving window are met by the records frequency + is_met = test_moving_window_condition( + records=records, # pass records, because freq is estimated + windowsize=timewindow, + min_records_per_window=min_records_per_window, + ) + if not is_met: + logger.warning( + "The minimum number of window members for the persistence check is not met!" + ) + flags = create_qcresult_flags( + all_input_records=records, + unmet_cond_idx=to_check_records.index, + outliers_before_white_idx=pd.DatetimeIndex([]), + outliers_after_white_idx=pd.DatetimeIndex([]), + ) + qcresult = QCresult( + checkname="persistence", + checksettings=checksettings, + flags=flags, + detail=f"Minimum number of records ({min_records_per_window}) per window ({timewindow}) not met.", + ) + return qcresult + + # This is very expensive if no coarsening is applied! Can we speed this up? + + window_flags = to_check_records.rolling( + window=timewindow, + closed="both", + center=True, + min_periods=min_records_per_window, + ).apply(_has_window_unique_values) + # The returns are numeric values (0 --> oke, NaN --> not checked (members/window condition not met), 1 --> outlier) + window_flags = window_flags.map( + {0.0: pass_cond, np.nan: unmet_cond, 1.0: flagged_cond} + ) + + outliers_idx = window_flags[window_flags == flagged_cond].index + + # Catch the white records + outliers_after_white_idx = sensorwhiteset.catch_white_records( + outliers_idx=outliers_idx + ) + + # Create flags + flags = create_qcresult_flags( + all_input_records=records, + unmet_cond_idx=window_flags[window_flags == unmet_cond].index, + outliers_before_white_idx=outliers_idx, + outliers_after_white_idx=outliers_after_white_idx, + ) + + qcresult = QCresult( + checkname="persistence", + checksettings=checksettings, + flags=flags, + detail="no details", + ) + + # Create and add details + if not outliers_after_white_idx.empty: + detailseries = pd.Series( + data="constant values in timewindow of " + str(timewindow), + index=outliers_after_white_idx, + ) + qcresult.add_details_by_series(detail_series=detailseries) + + return qcresult diff --git a/src/metobs_toolkit/qc_collection/repetitions_check.py b/src/metobs_toolkit/qc_collection/checks/repetitions_check.py similarity index 56% rename from src/metobs_toolkit/qc_collection/repetitions_check.py rename to src/metobs_toolkit/qc_collection/checks/repetitions_check.py index f511a840a..8c9a530f5 100644 --- a/src/metobs_toolkit/qc_collection/repetitions_check.py +++ b/src/metobs_toolkit/qc_collection/checks/repetitions_check.py @@ -1,11 +1,13 @@ import logging import pandas as pd +from metobs_toolkit.qcresult import QCresult +from .common_functions import create_qcresult_flags from metobs_toolkit.backend_collection.decorators import log_entry from metobs_toolkit.backend_collection.datetime_collection import ( timestamps_to_datetimeindex, ) -from .whitelist import SensorWhiteSet +from metobs_toolkit.qc_collection.whitelist import SensorWhiteSet logger = logging.getLogger("") @@ -15,7 +17,7 @@ def repetitions_check( records: pd.Series, max_N_repetitions: int, sensorwhiteset: SensorWhiteSet, -) -> pd.DatetimeIndex: +) -> QCresult: """ Test if an observation changes after a number of repetitions. @@ -33,15 +35,16 @@ def repetitions_check( max_N_repetitions : int The maximum number of repetitions allowed before the records are flagged as outliers. If the number of repetitions exceeds this value, all repeated records are flagged as outliers. - sensorwhiteset : SensorWhiteSet, optional + sensorwhiteset : SensorWhiteSet A SensorWhiteSet instance containing timestamps that should be excluded from outlier detection. Records matching the whiteset criteria will not be flagged as outliers even if they exceed the max_N_repetitions threshold. Returns ------- - pd.DatetimeIndex - Timestamps of outlier records. + QCresult + Quality control result object containing flags, outliers, and details + for the repetitions check. Notes ----- @@ -50,39 +53,67 @@ def repetitions_check( in contrast to the repetitions check whose thresholds are instrumentally based (e.g., the "window" is defined by a number of records). """ + checksettings = { + "max_N_repetitions": max_N_repetitions, + "sensorwhiteset": sensorwhiteset, + } # Drop outliers from the series (these are NaNs) - input_series = records.dropna() + to_check_records = records.dropna() # Create group definitions for repeating values that do not change - persistence_filter = ((input_series.shift() != input_series)).cumsum() + persistence_filter = ((to_check_records.shift() != to_check_records)).cumsum() persdf = pd.DataFrame( - data={"value": input_series, "persistgroup": persistence_filter}, - index=input_series.index, + data={"value": to_check_records, "persistgroup": persistence_filter}, + index=to_check_records.index, ) # Find outlier groups - groups = persdf.groupby(["persistgroup"]) + groups = persdf.groupby("persistgroup") # The above line groups the observations which have the same value and consecutive datetimes. group_sizes = groups.size() outlier_groups = group_sizes[group_sizes > max_N_repetitions] - # Combine all outlier groups if outlier_groups.empty: logger.debug("No outliers detected. Exiting repetitions_check function.") - return timestamps_to_datetimeindex( + outliers_idx = timestamps_to_datetimeindex( timestamps=[], name="datetime", current_tz=None ) + outliers = pd.Series(index=outliers_idx) + else: - outliers = pd.concat( - [ - groups.get_group( - outlgroup, - ) - for outlgroup in outlier_groups.index - ] - ) - logger.debug("Outliers detected. Exiting repetitions_check function.") + # Combine all outlier groups + outliers = pd.concat( + [ + groups.get_group( + outlgroup, + ) + for outlgroup in outlier_groups.index + ] + ) # Catch the white records - outliers_idx = sensorwhiteset.catch_white_records(outliers.index) - return outliers_idx + outliers_after_white_idx = sensorwhiteset.catch_white_records(outliers.index) + + # Create flags + flags = create_qcresult_flags( + all_input_records=records, + unmet_cond_idx=pd.DatetimeIndex([]), + outliers_before_white_idx=outliers.index, + outliers_after_white_idx=outliers_after_white_idx, + ) + + qcresult = QCresult( + checkname="repetitions", + checksettings=checksettings, + flags=flags, + ) + + # Create and add details + if not outliers_after_white_idx.empty: + detailseries = pd.Series( + data="More than " + str(max_N_repetitions) + " repeated values", + index=outliers_after_white_idx, + ) + qcresult.add_details_by_series(detail_series=detailseries) + + return qcresult diff --git a/src/metobs_toolkit/qc_collection/step_check.py b/src/metobs_toolkit/qc_collection/checks/step_check.py similarity index 62% rename from src/metobs_toolkit/qc_collection/step_check.py rename to src/metobs_toolkit/qc_collection/checks/step_check.py index 9c563cab3..025545079 100644 --- a/src/metobs_toolkit/qc_collection/step_check.py +++ b/src/metobs_toolkit/qc_collection/checks/step_check.py @@ -2,8 +2,11 @@ from typing import Union import pandas as pd -from .whitelist import SensorWhiteSet + +from .common_functions import create_qcresult_flags from metobs_toolkit.backend_collection.decorators import log_entry +from metobs_toolkit.qcresult import QCresult +from metobs_toolkit.qc_collection.whitelist import SensorWhiteSet logger = logging.getLogger("") @@ -14,7 +17,7 @@ def step_check( max_increase_per_second: Union[int, float], max_decrease_per_second: Union[int, float], sensorwhiteset: SensorWhiteSet, -) -> pd.DatetimeIndex: +) -> QCresult: """ Check for 'spikes' and 'dips' in a time series. @@ -35,15 +38,16 @@ def step_check( max_decrease_per_second : int or float The maximum allowed decrease (per second). This value is extrapolated to the time resolution of records. This value must be negative. - sensorwhiteset : SensorWhiteSet, optional + sensorwhiteset : SensorWhiteSet A SensorWhiteSet instance containing timestamps that should be excluded from outlier detection. Records matching the whiteset criteria will not be flagged as outliers even if they meet the step check criteria. Returns ------- - pd.DatetimeIndex - Timestamps of outlier records. + QCresult + Quality control result object containing flags, outliers, and details + for the step check. Notes ----- @@ -51,6 +55,11 @@ def step_check( threshold. This is because a temperature drop is meteorologically more common than a sudden increase, which is often the result of a radiation error. """ + checksettings = { + "max_increase_per_second": max_increase_per_second, + "max_decrease_per_second": max_decrease_per_second, + "sensorwhiteset": sensorwhiteset, + } # Validate argument values if max_decrease_per_second > 0: @@ -59,22 +68,22 @@ def step_check( raise ValueError("max_increase_per_second must be positive!") # Drop outliers from the series (these are NaNs) - input_series = records.dropna() + to_check_records = records.dropna() # Calculate timedelta between rows - time_diff = input_series.index.to_series().diff() + time_diff = to_check_records.index.to_series().diff() # Define filter step_filter = ( # Step increase ( - (input_series - input_series.shift(1)) + (to_check_records - to_check_records.shift(1)) > (float(max_increase_per_second) * time_diff.dt.total_seconds()) ) # or | # Step decrease ( - (input_series - input_series.shift(1)) + (to_check_records - to_check_records.shift(1)) < (max_decrease_per_second * time_diff.dt.total_seconds()) ) ) @@ -82,7 +91,24 @@ def step_check( outliers_idx = step_filter[step_filter].index # Catch the white records - outliers_idx = sensorwhiteset.catch_white_records(outliers_idx) + outliers_after_white_idx = sensorwhiteset.catch_white_records(outliers_idx) + + flags = create_qcresult_flags( + all_input_records=records, + unmet_cond_idx=pd.DatetimeIndex([]), + outliers_before_white_idx=outliers_idx, + outliers_after_white_idx=outliers_after_white_idx, + ) - logger.debug("Exiting function step_check") - return outliers_idx + qcresult = QCresult( + checkname="step", checksettings=checksettings, flags=flags, detail="no details" + ) + + # Create and add details + if not outliers_after_white_idx.empty: + detailseries = pd.Series( + data=f"step > {max_increase_per_second:.4g} per second or step < {max_decrease_per_second:.4g} per second", + index=outliers_after_white_idx, + ) + qcresult.add_details_by_series(detail_series=detailseries) + return qcresult diff --git a/src/metobs_toolkit/qc_collection/window_variation_check.py b/src/metobs_toolkit/qc_collection/checks/window_variation_check.py similarity index 66% rename from src/metobs_toolkit/qc_collection/window_variation_check.py rename to src/metobs_toolkit/qc_collection/checks/window_variation_check.py index 93f36b1cb..1f691baed 100644 --- a/src/metobs_toolkit/qc_collection/window_variation_check.py +++ b/src/metobs_toolkit/qc_collection/checks/window_variation_check.py @@ -1,13 +1,16 @@ import logging from typing import Union import pandas as pd +from numpy import nan -from .common_functions import test_moving_window_condition -from .whitelist import SensorWhiteSet +from .common_functions import test_moving_window_condition, create_qcresult_flags + +from metobs_toolkit.qcresult import QCresult from metobs_toolkit.backend_collection.decorators import log_entry from metobs_toolkit.backend_collection.datetime_collection import ( timestamps_to_datetimeindex, ) +from metobs_toolkit.qc_collection.whitelist import SensorWhiteSet logger = logging.getLogger("") @@ -20,11 +23,11 @@ def window_variation_check( max_increase_per_second: Union[int, float], max_decrease_per_second: Union[int, float], sensorwhiteset: SensorWhiteSet, -) -> pd.DatetimeIndex: +) -> QCresult: """ Test if the increase or decrease in a time window exceeds a threshold. - This function checks if the variation of observations in time does not exceed a threshold. + This function checks if the variation of observations in time exceeds a threshold. It applies a moving window over the time series, defined by a duration (`timewindow`), and tests if the window contains at least a minimum number of records (`min_records_per_window`). @@ -74,9 +77,20 @@ def window_variation_check( if max_increase_per_second < 0: raise ValueError("max_increase_per_second must be positive!") + checksettings = { + "timewindow": timewindow, + "min_records_per_window": min_records_per_window, + "max_increase_per_second": max_increase_per_second, + "max_decrease_per_second": max_decrease_per_second, + "sensorwhiteset": sensorwhiteset, + } + + # Drop outliers from the series (these are NaNs) + to_check_records = records.dropna() + # Test if the conditions for the moving window are met by the records frequency is_met = test_moving_window_condition( - records=records, + records=records, # pass records, because freq is estimated windowsize=timewindow, min_records_per_window=min_records_per_window, ) @@ -84,10 +98,20 @@ def window_variation_check( logger.warning( "The minimum number of window members for the window variation check is not met!" ) - return timestamps_to_datetimeindex(timestamps=[], name="datetime") + flags = create_qcresult_flags( + all_input_records=records, + unmet_cond_idx=to_check_records.index, + outliers_before_white_idx=pd.DatetimeIndex([]), + outliers_after_white_idx=pd.DatetimeIndex([]), + ) - # Drop outliers from the series (these are NaNs) - input_series = records.dropna() + qcresult = QCresult( + checkname="window_variation", + checksettings=checksettings, + flags=flags, + detail=f"Minimum number of records ({min_records_per_window}) per window ({timewindow}) not met.", + ) + return qcresult # Calculate window thresholds (by linear extrapolation) max_window_increase = ( @@ -126,17 +150,46 @@ def variation_test(window: pd.Series) -> int: return 0 # Apply rolling window - window_outliers = input_series.rolling( + window_flags = to_check_records.rolling( window=timewindow, closed="both", center=True, min_periods=min_records_per_window, ).apply(variation_test) - outliers_idx = window_outliers.loc[window_outliers == 1].index + # The returns are numeric values (0 --> oke, NaN --> not checked (members/window condition not met), 1 --> outlier) + window_flags = window_flags.map( + {0.0: "pass", nan: "unmet", 1.0: "flagged"} # Dummy label # Dummy label + ) # Dummy label + # Filter outliers + outliers_idx = window_flags.loc[window_flags == "flagged"].index # Catch the white records - outliers_idx = sensorwhiteset.catch_white_records(outliers_idx=outliers_idx) + outliers_after_white_idx = sensorwhiteset.catch_white_records( + outliers_idx=outliers_idx + ) + + # Create flags + flags = create_qcresult_flags( + all_input_records=records, + unmet_cond_idx=window_flags[window_flags == "unmet"].index, + outliers_before_white_idx=outliers_idx, + outliers_after_white_idx=outliers_after_white_idx, + ) + + qcresult = QCresult( + checkname="window_variation", + checksettings=checksettings, + flags=flags, + detail="no details", + ) + + # Create and add details + if not outliers_after_white_idx.empty: + detailseries = pd.Series( + data=f"Variation in {timewindow} window exceeds max increase of {max_window_increase} or max decrease of {max_window_decrease}.", + index=outliers_after_white_idx, + ) + qcresult.add_details_by_series(detail_series=detailseries) - logger.debug("Exiting function window_variation_check") - return outliers_idx + return qcresult diff --git a/src/metobs_toolkit/qc_collection/common_functions.py b/src/metobs_toolkit/qc_collection/common_functions.py deleted file mode 100644 index a9fed3019..000000000 --- a/src/metobs_toolkit/qc_collection/common_functions.py +++ /dev/null @@ -1,52 +0,0 @@ -import pandas as pd -import logging - -from metobs_toolkit.backend_collection.decorators import log_entry - -logger = logging.getLogger("") - - -@log_entry -def test_moving_window_condition( - records: pd.Series, windowsize: pd.Timedelta, min_records_per_window: int -) -> bool: - """ - Test if the resolution of the records meets the window constraints. - - Parameters - ---------- - records : pd.Series - Series with a datetime-like index. - windowsize : pd.Timedelta - Size of the moving window. - min_records_per_window : int - Minimum number of records required per window. - - Returns - ------- - bool - True if the minimum window members condition is met, False otherwise. - - Raises - ------ - TypeError - If any argument is not of the expected type. - Exception - If the input records do not have a perfectly regular timestamp. - """ - - # Get frequency of records - freqstr = pd.infer_freq(records.index) - if freqstr is None: - raise Exception("The input records do not have a perfectly regular timestamp.") - # Convert to timedelta - # Note: sometimes 'h' is returned, and this gives issues, so add a 1 in front - if not freqstr[0].isdigit(): - freqstr = "1" + freqstr - - freq = pd.Timedelta(freqstr) - - # Test if minimum window members condition is met - ismet = (windowsize / freq) >= min_records_per_window - logger.debug("Exiting function test_moving_window_condition.") - return ismet diff --git a/src/metobs_toolkit/qc_collection/grossvalue_check.py b/src/metobs_toolkit/qc_collection/grossvalue_check.py deleted file mode 100644 index ba22d4129..000000000 --- a/src/metobs_toolkit/qc_collection/grossvalue_check.py +++ /dev/null @@ -1,54 +0,0 @@ -import logging -from typing import Union -import pandas as pd - - -from .whitelist import SensorWhiteSet -from metobs_toolkit.backend_collection.decorators import log_entry - -logger = logging.getLogger("") - - -@log_entry -def gross_value_check( - records: pd.Series, - lower_threshold: Union[int, float], - upper_threshold: Union[int, float], - sensorwhiteset: SensorWhiteSet, -) -> pd.DatetimeIndex: - """ - Identify outliers in a time series based on lower and upper thresholds. - - Parameters - ---------- - records : pd.Series - Series with a datetime-like index to check. - lower_threshold : int or float - Threshold below which records are flagged as outliers. - upper_threshold : int or float - Threshold above which records are flagged as outliers. - sensorwhiteset : SensorWhiteSet - A SensorWhiteSet instance containing timestamps that should be excluded from outlier detection. - Records matching the whiteset criteria will not be flagged as outliers even if they fall - outside the threshold range. - - Returns - ------- - pd.DatetimeIndex - Timestamps of outlier records. - - - """ - - # Drop NaN values - records = records.dropna() - # Identify outliers - outliers_idx = records[ - (records < lower_threshold) | (records > upper_threshold) - ].index - - # Exclude white records if provided - outliers_idx = sensorwhiteset.catch_white_records(outliers_idx=outliers_idx) - - logger.debug("Exiting function gross_value_check.") - return outliers_idx diff --git a/src/metobs_toolkit/qc_collection/overview_df_constructor.py b/src/metobs_toolkit/qc_collection/overview_df_constructor.py new file mode 100644 index 000000000..88ccc9539 --- /dev/null +++ b/src/metobs_toolkit/qc_collection/overview_df_constructor.py @@ -0,0 +1,175 @@ +"""Collection of DF constructing functions on various levels +(sensordata, station, dataset) for overviews and summaries of QC checks.""" + +import pandas as pd +from typing import Union +from metobs_toolkit.backend_collection.dev_collection import copy_doc +from metobs_toolkit.backend_collection.df_helpers import save_concat + + +def sensordata_qc_overview_df(sensor) -> pd.DataFrame: + """Build a QC overview DataFrame for a single SensorData object. + + Parameters + ---------- + sensor : SensorData + The sensor whose QC results are to be summarised. + + Returns + ------- + pandas.DataFrame + Wide DataFrame with a DatetimeIndex. Columns follow the pattern + ``('label', checkname)`` and ``('details', checkname)`` for each + applied check, plus a ``'value'`` column with the raw observation + values. Missing checks are filled with ``'Not applied'``. + """ + # TODO rearange the order of qc columns to reflect the executeion order + possible_timestamps = sensor.series.index + qc_before_timecoarsening = ["duplicated_timestamp"] + + to_concat = [] + for qcresult in sensor.outliers: + checkdf = qcresult.create_outliersdf( + map_to_basic_labels=False, # get all flags (ok, outl, notchecked, unmet, saved) + subset_to_outliers=False, + ) # Get all flags + # add checkname to the index + checkdf["checkname"] = qcresult.checkname + if qcresult.checkname in qc_before_timecoarsening: + # Subset to coarsende timestmaps only + checkdf = checkdf.reindex(possible_timestamps) + + checkdf.set_index("checkname", append=True, inplace=True) + to_concat.append(checkdf) + + totaldf = save_concat(to_concat) + + if totaldf.empty: + return pd.DataFrame( + columns=["value", "label", "details"], + index=pd.DatetimeIndex([], name="datetime"), + ) + + # Unstack + totaldf = totaldf.unstack(level="checkname") + totaldf.fillna("Not applied", inplace=True) + + # add values + allvals = save_concat( + [sensor.series, sensor.outliers_values_bin] + ) # do not sort before removing the duplicates ! + allvals = allvals[~allvals.index.duplicated(keep="last")].sort_index() + totaldf["value"] = allvals.loc[totaldf.index] + + return totaldf[["value", "label", "details"]] + + +def station_qc_overview_df( + station, subset_obstypes: Union[list[str], None] = None +) -> pd.DataFrame: + """Build a QC overview DataFrame for all sensors of a Station. + + Parameters + ---------- + station : Station + The station whose QC results are to be summarised. + subset_obstypes : list of str or None, optional + If given, only these observation types are included. Unknown + types are silently ignored. Default is None (all sensors). + + Returns + ------- + pandas.DataFrame + Wide DataFrame indexed by ``(datetime, obstype)``. Column + structure mirrors :func:`sensordata_qc_overview_df`. + """ + if subset_obstypes is None: + sensortargets = station.sensordata.values() + else: + sensortargets = [] + for obstype in subset_obstypes: + if obstype in station.sensordata: + sensortargets.append(station.get_sensor(obstype)) + else: + # Log a warning? + pass + + to_concat = [] + for sensordata in sensortargets: + stadf = sensordata_qc_overview_df(sensordata).reset_index() + # add obstype to the index + if not stadf.empty: + stadf["obstype"] = sensordata.obstype.name + stadf = stadf.reset_index().set_index(["datetime", "obstype"]) + to_concat.append(stadf) + + totaldf = save_concat(to_concat) + totaldf.sort_index(inplace=True) + + if totaldf.empty: + return pd.DataFrame( + columns=["value", "label", "details"], + index=pd.MultiIndex( + levels=[[], []], codes=[[], []], names=["datetime", "obstype"] + ), + ) + + return totaldf[["value", "label", "details"]] + + +def dataset_qc_overview_df( + dataset, + subset_stations: Union[list[str], None] = None, + subset_obstypes: Union[list[str], None] = None, +) -> pd.DataFrame: + """Build a QC overview DataFrame for all stations in a Dataset. + + Parameters + ---------- + dataset : Dataset + The dataset whose QC results are to be summarised. + subset_stations : list of str or None, optional + If given, only these station names are included. Default is None + (all stations). + subset_obstypes : list of str or None, optional + If given, only these observation types are included. Default is + None (all observation types). + + Returns + ------- + pandas.DataFrame + Wide DataFrame indexed by ``(datetime, obstype, name)``. Column + structure mirrors :func:`sensordata_qc_overview_df`. + """ + if subset_stations is None: + stationtargets = dataset.stations + else: + stationtargets = [ + dataset.get_station(station_name) for station_name in subset_stations + ] + + to_concat = [] + for station in stationtargets: + stadf = station_qc_overview_df( + station, subset_obstypes=subset_obstypes + ).reset_index() + # add obstype to the index + if not stadf.empty: + stadf["name"] = station.name + stadf = stadf.reset_index().set_index(["datetime", "obstype", "name"]) + to_concat.append(stadf) + + totaldf = save_concat(to_concat) + totaldf.sort_index(inplace=True) + + if totaldf.empty: + return pd.DataFrame( + columns=["value", "label", "details"], + index=pd.MultiIndex( + levels=[[], [], []], + codes=[[], [], []], + names=["datetime", "obstype", "name"], + ), + ) + + return totaldf[["value", "label", "details"]] diff --git a/src/metobs_toolkit/qc_collection/persistence_check.py b/src/metobs_toolkit/qc_collection/persistence_check.py deleted file mode 100644 index 315c168de..000000000 --- a/src/metobs_toolkit/qc_collection/persistence_check.py +++ /dev/null @@ -1,117 +0,0 @@ -import logging - -import numpy as np -import pandas as pd - -from .common_functions import test_moving_window_condition -from .whitelist import SensorWhiteSet -from metobs_toolkit.backend_collection.decorators import log_entry -from metobs_toolkit.backend_collection.datetime_collection import ( - timestamps_to_datetimeindex, -) - -logger = logging.getLogger("") - - -@log_entry -def persistence_check( - records: pd.Series, - timewindow: pd.Timedelta, - min_records_per_window: int, - sensorwhiteset: SensorWhiteSet, -) -> pd.DatetimeIndex: - """ - Check if values are not constant in a moving time window. - - Performs a persistence check on a time series to identify periods where observations remain constant - within a specified time window. If the values are constant, all records in the moving window are - flagged as outliers. - - Parameters - ---------- - records : pd.Series - A pandas Series containing the time series data to be checked. The index should be datetime-like. - timewindow : pd.Timedelta - The size of the rolling time window to check for persistence. - min_records_per_window : int - The minimum number of non-NaN records required within the time window for the check to be valid. - sensorwhiteset : SensorWhiteSet, optional - A SensorWhiteSet instance containing timestamps that should be excluded from outlier detection. - Records matching the whiteset criteria will not be flagged as outliers even if they meet the - persistence criteria. - - Returns - ------- - pd.DatetimeIndex - Timestamps of outlier records. - - Notes - ----- - - * The function uses a rolling window approach to check if all non-NaN values within the window - are identical. - * If the minimum number of records per window is locally not met, the function logs a warning and skips - the persistence check. - * This function can be computationally expensive for large datasets or small time windows. - - Warnings - -------- - If the minimum number of records per window is not met over the full time series, a warning is logged, and the function - returns an empty DatetimeIndex. - """ - - # Test if the conditions for the moving window are met by the records frequency - is_met = test_moving_window_condition( - records=records, - windowsize=timewindow, - min_records_per_window=min_records_per_window, - ) - if not is_met: - logger.warning( - "The minimum number of window members for the persistence check is not met!" - ) - return timestamps_to_datetimeindex( - name="datetime", timestamps=[], current_tz=None - ) - - # Apply persistence - @log_entry - def is_unique(window: pd.Series) -> bool: - """ - Check if all non-NaN values in the window are identical. - - Parameters - ---------- - window : pd.Series - A pandas Series representing the rolling window. - - Returns - ------- - bool - True if all non-NaN values are identical, False otherwise. - """ - a = window.values - a = a[~np.isnan(a)] - return (a[0] == a).all() if len(a) > 0 else False - - # This is very expensive if no coarsening is applied! Can we speed this up? - window_is_constant = ( - records.dropna() # Exclude outliers and gaps - .rolling( - window=timewindow, - closed="both", - center=True, - min_periods=min_records_per_window, - ) - .apply(is_unique) - ) - # The returns are numeric values (0 --> False, NaN --> not checked (members/window condition not met), 1 --> outlier) - window_is_constant = window_is_constant.map({0.0: False, np.nan: False, 1.0: True}) - - outliers_idx = window_is_constant[window_is_constant].index - - # Catch the white records - outliers_idx = sensorwhiteset.catch_white_records(outliers_idx=outliers_idx) - - logger.debug("Exiting function persistence_check") - return outliers_idx diff --git a/src/metobs_toolkit/qc_collection/spatial_checks/buddy_check.py b/src/metobs_toolkit/qc_collection/spatial_checks/buddy_check.py new file mode 100644 index 000000000..f9502a7de --- /dev/null +++ b/src/metobs_toolkit/qc_collection/spatial_checks/buddy_check.py @@ -0,0 +1,563 @@ +from __future__ import annotations + +import logging +from typing import Union, List, Dict, TYPE_CHECKING + +import numpy as np +from concurrent.futures import ProcessPoolExecutor +import pandas as pd + + +from metobs_toolkit.backend_collection.decorators import log_entry +from metobs_toolkit.backend_collection.distancematrix_func import ( + generate_distance_matrix, +) + +from metobs_toolkit.qcresult import QCresult, flagged_cond +from .buddywrapsensor import BuddyWrapSensor, to_qc_labels_map +from metobs_toolkit.settings_collection import Settings +from metobs_toolkit.qc_collection.whitelist import WhiteSet + +# Import methods +from . import methods as buddymethods + + +if TYPE_CHECKING: + from metobs_toolkit.station import Station + +logger = logging.getLogger("") + + +def _run_buddy_test(kwargs): + """Executor for multiprocessing - runs buddy test for a single station.""" + return buddymethods.buddy_test_a_station(**kwargs) + + +def _build_station_buddy_kwargs( + station: "BuddyWrapSensor", + widedf: pd.DataFrame, + buddygroupname: str, + min_sample_size: int, + min_sample_spread: float, + outlier_threshold: float, + iteration: int, + check_type: str, + use_z_robust_method: bool, +) -> dict: + """ + Build kwargs dictionary for buddy_test_a_station with a minimal widedf subset. + + This function creates a dictionary of keyword arguments to pass to + buddymethods.buddy_test_a_station, including a view of the widedf that + contains only the target station and its buddy stations. This enables + efficient parallelization by station rather than by time chunks. + + Parameters + ---------- + station : BuddyWrapSensor + The wrapped station (center station) to build kwargs for. + widedf : pd.DataFrame + The full wide observation DataFrame with stations as columns. + buddygroupname : str + Name of the buddy group to use for extracting buddies. + min_sample_size : int + Minimum sample size for statistics. + min_sample_spread : float + Minimum sample spread (MAD or std). + outlier_threshold : float + Z-score threshold for flagging outliers. + iteration : int + Current iteration number. + check_type : str + Type of check being performed ('spatial_check', 'safetynet_check:groupname'). + use_z_robust_method : bool + Whether to use robust z-score method. + + Returns + ------- + dict + Dictionary of kwargs to pass to buddymethods.buddy_test_a_station. + The 'widedf' key contains only the columns for the center station + and its buddies. + """ + # Get the center station name and its buddies + center_name = station.name + buddies = station.get_buddies(groupname=buddygroupname) + + # Build list of required columns: center station + all its buddies + required_columns = [center_name] + buddies + + # Create a subset (view) of widedf with only required columns + subset_widedf = widedf[required_columns] + + return { + "centerwrapsensor": station, + "buddygroupname": buddygroupname, + "widedf": subset_widedf, + "min_sample_size": min_sample_size, + "min_sample_spread": min_sample_spread, + "outlier_threshold": outlier_threshold, + "iteration": iteration, + "check_type": check_type, + "use_z_robust_method": use_z_robust_method, + } + + +@log_entry +def toolkit_buddy_check( + target_stations: list[Station], + metadf: pd.DataFrame, + obstype: str, + spatial_buddy_radius: Union[int, float], + spatial_min_sample_size: int, + spatial_max_sample_size: Union[int, None] = None, + max_alt_diff: Union[int, float, None] = None, + min_sample_spread: Union[int, float] = 1.0, + min_buddy_distance: Union[int, float] = 0, + spatial_z_threshold: Union[int, float] = 3.1, + N_iter: int = 2, + instantaneous_tolerance: pd.Timedelta = pd.Timedelta("4min"), + # Whitelist arguments + whiteset: WhiteSet = WhiteSet(), + # Safety nets + safety_net_configs: List[Dict] = None, + # Statistical + use_z_robust_method: bool = True, + # Technical + lapserate: Union[float, None] = None, # -0.0065 for temperature + use_mp: bool = True, +) -> List[QCresult]: + """Spatial buddy check. + + The buddy check compares an observation against its neighbors + (i.e. spatial buddies). The check loops over all stations, treating + each as the center of a buddy group formed by nearby stations. For + each center station, the z-score is computed from the buddy sample. + If the z-score exceeds `spatial_z_threshold`, the center station's + observation is labeled as an outlier. + + Multiple iterations of this check can be done using `N_iter`. + + Optionally, one or more safety nets can be applied. A safety net tests + potential outliers against a sample of stations that share a categorical + attribute (e.g., LCZ, network). If the z-value computed using the safety + net sample is below the specified threshold, the outlier is "saved" and + removed from the outlier set for the current iteration. + + Safety nets are applied in the order they are specified, allowing for + multi-level filtering (e.g., first test against LCZ buddies, then against + network buddies). + + A schematic step-by-step description of the buddy check: + + #. A distance matrix is constructed for all interdistances between + the stations. This is done using the haversine approximation. + #. Groups of spatial buddies (neighbours) are created by using the + `spatial_buddy_radius` and `min_buddy_distance`. Only stations within + the distance range [min_buddy_distance, spatial_buddy_radius] are + considered as buddies. These groups are further filtered by: + + * removing stations from the groups that differ too much in altitude + (based on the `max_alt_diff`) + * removing groups of buddies that are too small (based on the + `spatial_min_sample_size`) + + #. Observations per group are synchronized in time (using the + `instantaneous_tolerance` for alignment). + #. If a `lapserate` is specified, the observations are corrected for + altitude differences. + #. The following steps are repeated for `N_iter` iterations: + + #. The values of outliers flagged by a previous iteration are converted to + NaN's. Therefore they are not used in any following score or sample. + #. For each center station: + + * The sample mean, spread (std or MAD depending on + `use_z_robust_method`), and sample size are computed from the + buddy stations (center station excluded). + * If the spread is lower than `min_sample_spread`, it is replaced + by `min_sample_spread`. + * The z-score of the center station is calculated. + * If the z-score exceeds `spatial_z_threshold`, the center + station's observation is flagged as an outlier. It will be + ignored in the next iteration. + + #. If `safety_net_configs` is provided, the following steps are applied + on the outliers flagged by the current iteration, for each safety net + in order: + + * If `only_if_previous_had_no_buddies` is True for this safety net, + only outlier records where the previous safety net had insufficient + buddies (``BC_NO_BUDDIES`` flag) are passed to this safety net. + All other records retain their status from the previous safety net. + * Category buddies (stations sharing the same category value within + the specified distance range) are identified. Like spatial buddies, + category buddies are filtered by distance range [min_buddy_distance, + buddy_radius]. + * The safety net sample is tested in size (sample size must be at + least `min_sample_size`). If the condition is not met, the safety + net test is not applied. + * The safety net test is applied: + + * The sample mean and spread (std or MAD depending on + `use_z_robust_method`) are computed of the category-buddy sample. + If the spread is smaller than `min_sample_spread`, the latter is + used. + * The z-value is computed for the target record (= flagged outlier). + * If the z-value is smaller than the safety net's `z_threshold`, + the tested outlier is "saved" and removed from the set of outliers + for the current iteration. + + #. If `whiteset` contains records, any outliers that match the white-listed + timestamps (and optionally station names) are removed from the outlier set + for the current iteration. White-listed records participate in all buddy + check calculations but are not flagged as outliers in the final results. + + Parameters + ---------- + target_stations : list[Station] + A list of Station objects to apply the buddy check on. These should be + stations that contain the target observation type. + metadf : pandas.DataFrame + DataFrame containing station metadata including coordinates (geometry) + and altitude information for all stations. + obstype : str + The observation type that has to be checked. + spatial_buddy_radius : int or float + The radius to define spatial neighbors in meters. + spatial_min_sample_size : int + The minimum sample size to calculate statistics on used by + spatial-buddy samples. + spatial_max_sample_size : int or None, optional + The maximum number of spatial buddies to use per station. If not + None, the spatial buddies for each station are sorted by distance + and only the nearest ``spatial_max_sample_size`` buddies are kept. + Must be larger than ``spatial_min_sample_size`` when specified. + The default is None (no limit). + max_alt_diff : int, float, or None + The maximum altitude difference allowed for buddies. If None, + no altitude filter is applied. + min_sample_spread : int or float + The minimum sample spread for sample statistics. When use_z_robust_method is True, + this is equal to the minimum MAD to use (avoids division by near-zero). When + use_z_robust_method is False, this is the standard deviation. This parameter helps + to represent the accuracy of the observations. + min_buddy_distance : int or float, optional + The minimum distance (in meters) required between a station and its spatial buddies. + Stations closer than this distance will be excluded from the buddy group. This also + affects safety net buddy selection unless overridden in the safety_net_configs. + Default is 0.0 (no minimum distance). + spatial_z_threshold : int or float + The z-score threshold for flagging observations as outliers. + N_iter : int + The number of iterations to perform the buddy check. + instantaneous_tolerance : pandas.Timedelta + The maximum time difference allowed for synchronizing observations. + whiteset : WhiteSet + A WhiteSet instance containing records that should be excluded from + outlier detection. Records in the WhiteSet undergo the buddy check + iterations as regular records but are removed from the outlier set + at the end of each iteration. + safety_net_configs : list of dict, optional + List of safety net configurations to apply in order. Each dict must + contain: + + * 'category': str, the metadata column name to group by (e.g., 'LCZ', + 'network') + * 'buddy_radius': int or float, maximum distance for category buddies + (in meters) + * 'z_threshold': int or float, z-value threshold for saving outliers + * 'min_sample_size': int, minimum number of buddies required for the + safety net test + * 'min_buddy_distance': int or float (optional), minimum distance + (in meters) required between a station and its category buddies. + Stations closer than this distance will be excluded from the + buddy group. Defaults to 0 (no minimum distance). + * 'max_sample_size': int or None (optional), maximum number of category + buddies to use per station. If not None, category buddies are sorted + by distance and only the nearest ``max_sample_size`` are kept. Must + be larger than ``min_sample_size`` when specified. Defaults to None + (no limit). + * 'only_if_previous_had_no_buddies': bool (optional), if True this + safety net is only applied to outlier records for which the + **previous** safety net could not be executed due to insufficient + buddies (``BC_NO_BUDDIES`` flag). Records that were successfully + tested by the previous safety net (whether they passed or failed) + are not re-tested by this one. This enables a cascading fallback + strategy, e.g. first try LCZ buddies, then fall back to network + buddies only for records that had no LCZ buddies. Cannot be True + for the first safety net. Defaults to False. + + The default is None. + use_z_robust_method : bool, optional + If True, the robust z-score method (median/MAD) is used for both + spatial and safety net checks. If False, the classic z-score method + (mean/std) is used. The default is True. + lapserate : float or None, optional + Describes how the obstype changes with altitude (in meters). If + None, no altitude correction is applied. For temperature, a + common value is -0.0065. + use_mp : bool, optional + Use multiprocessing to speed up the buddy check. The default is True. + + Returns + ------- + dict + A dictionary mapping station names to :class:`QCresult` objects + containing the buddy check flags for each station. + list + A list of :class:`BuddyWrapSensor` objects containing detailed + tracking information (flags, details) for each station. + + Notes + ----- + + * The altitude of the stations can be extracted from GEE by using the + `Dataset.get_altitude()` method. + * The LCZ of the stations can be extracted from GEE by using the + `Dataset.get_LCZ()` method. + + """ + # Validate spatial_max_sample_size + if spatial_max_sample_size is not None: + if spatial_max_sample_size <= spatial_min_sample_size: + raise ValueError( + f"spatial_max_sample_size ({spatial_max_sample_size}) must be " + f"larger than spatial_min_sample_size ({spatial_min_sample_size})." + ) + + checksettings = { + "obstype": obstype, + "spatial_buddy_radius": spatial_buddy_radius, + "spatial_min_sample_size": spatial_min_sample_size, + "spatial_max_sample_size": spatial_max_sample_size, + "max_alt_diff": max_alt_diff, + "min_sample_spread": min_sample_spread, + "spatial_z_threshold": spatial_z_threshold, + "N_iter": N_iter, + "instantaneous_tolerance": instantaneous_tolerance, + "whiteset": whiteset, + "safety_net_configs": safety_net_configs, + "lapserate": lapserate, + } + + targets = [ + BuddyWrapSensor(sensor=sta.get_sensor(obstype), site=sta.site) + for sta in target_stations + ] + + # Validate safety net configs if provided + buddymethods.validate_safety_net_configs(safety_net_configs) + + # ----- Part 1: construct buddy groups ------ + # compute distance metric + logger.debug("Calculating distance matrix with Haversine formula") + dist_matrix = generate_distance_matrix(metadf) + + # find potential buddies by distance + logger.debug( + "Finding spatial buddies within radius of %s meters", spatial_buddy_radius + ) + + buddymethods.assign_spatial_buddies( + distance_df=dist_matrix, + metadf=metadf, + max_alt_diff=max_alt_diff, + buddy_radius=spatial_buddy_radius, + min_buddy_distance=min_buddy_distance, + wrappedsensors=targets, + ) + + # Subset spatial buddies to nearest N if spatial_max_sample_size is set + if spatial_max_sample_size is not None: + logger.debug( + "Subsetting spatial buddies to nearest %s stations", + spatial_max_sample_size, + ) + buddymethods.subset_buddies_to_nearest( + wrappedsensors=targets, + distance_df=dist_matrix, + max_sample_size=spatial_max_sample_size, + groupname="spatial", + ) + + # ---- Part 2: Preparing the records ----- + + # construct a wide observation dataframe + + widedf, timestamp_map = buddymethods.create_wide_obs_df( + wrappedsensors=targets, + instantaneous_tolerance=instantaneous_tolerance, + ) + + # lapse rate correction + widedf = buddymethods.correct_lapse_rate( + widedf=widedf, wrappedsensors=targets, lapserate=lapserate + ) + + # ---- Part 3 : Apply buddy check per stationcenter, + + # valid_targets = [budsta for budsta in targets if budsta.has_enough_buddies( + # groupname='spatial', min_buddies = spatial_min_sample_size)] + + outliersbin = [] + for i in range(N_iter): + logger.debug("Starting iteration %s of %s", i + 1, N_iter) + # convert values to NaN, if they are labeled as outlier in + # previous iteration + if bool(outliersbin): + logger.debug("Converting previous-iteration outliers to NaN") + for outlier_station, outlier_time in outliersbin: + if outlier_station in widedf.columns: + widedf.loc[outlier_time, outlier_station] = np.nan + + if use_mp: + num_cores = Settings.get("use_N_cores_for_MP") + num_workers = min(len(targets), num_cores) + + logger.info( + f"Running spatial buddy check with multiprocessing on {num_workers} cores" + ) + logger.info(f"Parallelizing by station: {len(targets)} stations to process") + + # Build kwargs for each station with subset widedf containing only + # the center station and its buddies + station_kwargs = [ + _build_station_buddy_kwargs( + station=sta, + widedf=widedf, + buddygroupname="spatial", + min_sample_size=spatial_min_sample_size, + min_sample_spread=min_sample_spread, + outlier_threshold=spatial_z_threshold, + iteration=i, + check_type="spatial_check", + use_z_robust_method=use_z_robust_method, + ) + for sta in targets + ] + + # Run in parallel - each task processes one center station + with ProcessPoolExecutor(max_workers=num_workers) as executor: + buddy_output = list(executor.map(_run_buddy_test, station_kwargs)) + + else: + # create inputargs for each buddygroup, and for each chunk in time + inputargs = [ + { + "centerwrapsensor": wrapsensor, + "buddygroupname": "spatial", + "widedf": widedf, + "min_sample_size": spatial_min_sample_size, + "min_sample_spread": min_sample_spread, + "outlier_threshold": spatial_z_threshold, + "iteration": i, + "check_type": "spatial_check", + "use_z_robust_method": use_z_robust_method, + } + for wrapsensor in targets + ] + + logger.debug("Finding outliers in each buddy group") + buddy_output = list( + map( + lambda kwargs: buddymethods.buddy_test_a_station(**kwargs), + inputargs, + ) + ) + + # buddy output is [(MultiIndex, BuddyWrapSensor), ...], that needs to be unpacked + outlier_indices, updated_stations = zip(*buddy_output) + # overload the BuddyWrapSensor + targets = list(updated_stations) + + # Concatenate all outlier MultiIndices + # Each element is a MultiIndex with (name, datetime) + spatial_outliers = buddymethods.concat_multiindices(list(outlier_indices)) + + # Start with spatial outliers for further processing + current_outliers_idx = spatial_outliers + + # Apply safety nets (if configured) + if safety_net_configs: + logger.debug( + "Applying %s safety net(s) to %s outliers", + len(safety_net_configs), + len(current_outliers_idx), + ) + previous_safetynet_category = None + for safety_net_config in safety_net_configs: + logger.info( + f"Applying safety net on category {safety_net_config['category']}" + ) + + current_outliers_idx = buddymethods.apply_safety_net( + outliers=current_outliers_idx, + buddychecksensors=targets, + buddygroupname=safety_net_config["category"], + metadf=metadf, + distance_df=dist_matrix, + max_distance=safety_net_config["buddy_radius"], + min_distance=safety_net_config.get("min_buddy_distance", 0), + max_alt_diff=max_alt_diff, # make this configurable? + wideobsds=widedf, + safety_z_threshold=safety_net_config["z_threshold"], + min_sample_size=safety_net_config["min_sample_size"], + min_sample_spread=min_sample_spread, # make this configurable? + use_z_robust_method=use_z_robust_method, + iteration=i, + max_sample_size=safety_net_config.get("max_sample_size", None), + only_if_previous_had_no_buddies=safety_net_config.get( + "only_if_previous_had_no_buddies", False + ), + previous_safetynet_category=previous_safetynet_category, + ) + previous_safetynet_category = safety_net_config["category"] + + # NOTE: Records saved by any safety net will be tested again in + # the following iteration. A different result can occur if the + # spatial/safety net sample changes in the next iteration. + + # Apply whitelist filtering + current_outliers_idx = buddymethods.save_whitelist_records( + outliers=current_outliers_idx, + wrappedsensors=targets, + whiteset=whiteset, + obstype=obstype, + iteration=i, + ) + + # NOTE: The white-listed records are removed from the outliers at the end + # of each iteration, similar to the safety nets. They participate in + # the buddy check calculations but are not flagged as outliers. + + # Convert MultiIndex to list of tuples for outliersbin + # Format: (station_name, timestamp, message) + for name, dt in current_outliers_idx: + outliersbin.append((name, dt)) + + # Prepare for output + return_results = {} + for wrapsta in targets: + logger.debug(f"Preparing QCresult for station {wrapsta.name}") + # 1. Map timestamps back to original timestamps + wrapsta.map_timestamps(timestamp_map=timestamp_map[wrapsta.name]) + + # 2. Create final QC labels (specific for buddy check) + final_labels = wrapsta.get_final_labels() + + # 3 Convert these flags to default qc flags + qcflags = final_labels.map(to_qc_labels_map) + + # 4 Create QCresult object + qcres = QCresult( + checkname="buddy_check", + checksettings=checksettings, + flags=qcflags, + detail="", + ) + + qcres.add_details_by_series(detail_series=wrapsta.get_final_details()) + return_results[wrapsta.name] = qcres + + return return_results, targets diff --git a/src/metobs_toolkit/qc_collection/spatial_checks/buddywrapsensor.py b/src/metobs_toolkit/qc_collection/spatial_checks/buddywrapsensor.py new file mode 100644 index 000000000..0f248dca5 --- /dev/null +++ b/src/metobs_toolkit/qc_collection/spatial_checks/buddywrapsensor.py @@ -0,0 +1,887 @@ +from __future__ import annotations +import logging + +from typing import Union, List, Dict, TYPE_CHECKING +from collections import defaultdict + +from metobs_toolkit.qcresult import ( + unchecked_cond, + unmet_cond, + pass_cond, + flagged_cond, + saved_cond, +) + +import pandas as pd + +if TYPE_CHECKING: + from metobs_toolkit.sensordata import SensorData + from metobs_toolkit.site import Site + +logger = logging.getLogger("") + +# =============================== +# Labels +# =============================== +# Constants for buddy check status labels +BC_NOT_TESTED = "not_tested" # Value was NaN, not tested +BC_NO_BUDDIES = "no_buddies" # Not enough buddies to test +BC_PASSED = "passed" # Tested and passed +BC_FLAGGED = "flagged" # Tested and flagged as outlier +BC_SAFETYNET_SAVED = "safetynet_saved" # Flagged but saved by safetynet +BC_SAFETYNET_OUTLIER = "safetynet_outlier" # Flagged but not saved by safetynet +BC_WHITELIST_SAVED = "whitelist_saved" # Flagged but saved by whitelist +BC_WHITELIST_NOT_SAVED = "whitelist_not_saved" # Flagged but not saved by whitelist +BC_CHECK_SKIPPED = "skipped" # This check was skipped, e.g. due to arugments of the user (not whitelist, not safetynets etc) + + +to_qc_labels_map = { + BC_NOT_TESTED: unchecked_cond, # Value was NaN, not tested + BC_NO_BUDDIES: unmet_cond, # Not enough buddies to test + BC_PASSED: pass_cond, # Tested and passed + BC_FLAGGED: flagged_cond, # Tested and flagged as outlier + BC_SAFETYNET_SAVED: pass_cond, # IMPORTANT !!! + # BC_SAFETYNET_OUTLIER : flagged_cond # Flagged but not saved by safetynet + BC_WHITELIST_SAVED: saved_cond, # Flagged but saved by whitelist + # BC_WHITELIST_NOT_SAVED : flagged_cond +} + +# =============================== +# Buddy wrap sensor class +# =============================== + + +class BuddyWrapSensor: + """Wrapper for a Sensor with buddy check-specific details. + + This class wraps a sensor object and adds information about how it is + handled during the buddy check process, including buddy assignment, + filtering steps, and participation in buddy groups. + + Attributes + ---------- + sensor : SensorData + The wrapped Sensor object. + _buddy_groups : dict + Dictionary mapping group names to lists of buddy sensor names. + flag_lapsrate_corrections : bool + Whether lapse rate corrections have been applied. + cor_term : float + The correction term applied for lapse rate. + flags : pandas.DataFrame + DataFrame with MultiIndex (datetime, iteration) containing flag values. + Columns are added via `add_flags` method for different check types. + details : dict + Dictionary storing iteration-wise detail information. Structure: + { + 'spatial_check': { + iteration_int: Series(index=DatetimeIndex, data=detail_strings), + ... + }, + 'safetynet_check': { + groupname_str: { + iteration_int: Series(index=DatetimeIndex, data=detail_strings), + ... + }, + ... + }, + 'whitelist_check': { + iteration_int: Series(index=DatetimeIndex, data=detail_strings), + ... + }, + } + """ + + def __init__(self, sensor: SensorData, site: Site): + """Initialize with a SensorData object and its associated Site. + + Parameters + ---------- + sensor : SensorData + The sensor whose observations will be buddy-checked. + site : Site + Spatial metadata for the station (coordinates, altitude, etc.). + """ + self._sensor = sensor + self._site = site + # Initialize instance-specific attributes (NOT class attributes!) + self._buddy_groups: Dict[str, List[str]] = { + "spatial": [], + } + + # Value corrections + self.flag_lapsrate_corrections: bool = False + self.cor_term: float = 0.0 + + # Flags DataFrame with MultiIndex (datetime, iteration) + self._flags: pd.DataFrame = pd.DataFrame() + + # Details dictionary structure + self.details: Dict[ + str, Union[Dict[int, pd.Series], Dict[str, Dict[int, pd.Series]]] + ] = { + "spatial_check": {}, + "safetynet_check": {}, # Dict of groupname -> Dict of iteration -> Series + "whitelist_check": {}, + } + + @property + def sensor(self) -> SensorData: + """Get the wrapped SensorData object.""" + return self._sensor + + @property + def site(self) -> Site: + """Get the wrapped Site object.""" + return self._site + + @property + def name(self) -> str: + """Get the station name.""" + return self.sensor.stationname + + @property + def flags(self) -> pd.DataFrame: + """Get the flags DataFrame.""" + if self._flags.empty: + return pd.DataFrame( + index=pd.MultiIndex( + levels=[[], []], codes=[[], []], names=["datetime", "iteration"] + ) + ) + + return self._flags + + @flags.setter + def flags(self, flags: pd.DataFrame) -> None: + """Set the flags DataFrame after validating its structure. + + Parameters + ---------- + flags : pandas.DataFrame + DataFrame with a MultiIndex whose levels are + ``['datetime', 'iteration']``. + + Raises + ------ + ValueError + If ``flags`` is not a DataFrame, does not have a MultiIndex, or + the MultiIndex levels are not ``['datetime', 'iteration']``. + """ + if not isinstance(flags, pd.DataFrame): + raise ValueError("flags must be a pandas DataFrame") + + if not flags.empty: + if not isinstance(flags.index, pd.MultiIndex): + raise ValueError("flags DataFrame must have a MultiIndex") + if flags.index.names != ["datetime", "iteration"]: + raise ValueError( + "flags DataFrame MultiIndex must have levels ['datetime', 'iteration']" + ) + + # Preserve column order: existing columns first, new columns at the end + if not self._flags.empty and not flags.empty: + existing_cols = [col for col in self._flags.columns if col in flags.columns] + new_cols = [col for col in flags.columns if col not in self._flags.columns] + ordered_cols = existing_cols + new_cols + flags = flags[ordered_cols] + + self._flags = flags + + def add_flags( + self, iteration: int, flag_series: pd.Series, column_name: str + ) -> None: + """Add flags to the flags DataFrame for a specific iteration. + + Parameters + ---------- + iteration : int + The iteration number. + flag_series : pd.Series + Series with DatetimeIndex containing flag values. + column_name : str + The name of the column to add/update (e.g., 'spatial_check', + 'safetynet_check:groupname', 'whitelist_check'). + """ + if flag_series.empty: + return + + # Subset flag_series to only include indices present in self.sensor.series.index + # edgcase: this can be caused because of the wideobds desing, that creates empty rows + # for timestamps where no observations are present. + valid_index = flag_series.index.intersection(self.sensor.series.index) + flag_series = flag_series.loc[valid_index] + # Remove duplicates (keep first occurrence) + flag_series = flag_series[~flag_series.index.duplicated(keep="first")] + + # Create a DataFrame with MultiIndex for the new flags + new_flags = pd.DataFrame( + {column_name: flag_series.values}, + index=pd.MultiIndex.from_arrays( + [flag_series.index, [iteration] * len(flag_series)], + names=["datetime", "iteration"], + ), + ) + + if self.flags.empty: + self.flags = new_flags + else: + # Merge new flags with existing flags + # Use combine_first to keep existing values and add new ones + self.flags = self.flags.combine_first(new_flags) + + # If the column already exists, update with new values (not NaN) + if column_name in self.flags.columns: + # For indices that exist in both, update from new_flags + common_idx = self.flags.index.intersection(new_flags.index) + if not common_idx.empty: + self.flags.loc[common_idx, column_name] = new_flags.loc[ + common_idx, column_name + ] + + self.flags = self.flags.sort_index() + + def filter_buddies(self, filteredbuddies: List[str], groupname: str) -> None: + """Store a filtered version of a buddy group. + + The filtered buddies are saved under ``'{groupname}_filtered'`` and + will be returned by :meth:`get_buddies` instead of the base group. + + Parameters + ---------- + filteredbuddies : list of str + Station names remaining after filtering. + groupname : str + The base buddy group name (e.g. ``'spatial'``). + """ + self.set_buddies(filteredbuddies, groupname=f"{groupname}_filtered") + + def set_buddies(self, buddies: List[str], groupname: str) -> None: + """Add or overwrite a buddy group entry. + + Parameters + ---------- + buddies : list of str + Station names to assign to the group. + groupname : str + Key under which the buddies are stored in ``_buddy_groups``. + """ + self._buddy_groups.update({groupname: buddies}) + + def get_buddies(self, groupname: str) -> List[str]: + """Return the buddy list for the given group, preferring the filtered version. + + If a ``'{groupname}_filtered'`` entry exists it is returned; + otherwise the base ``groupname`` entry is returned. + + Parameters + ---------- + groupname : str + The name of the buddy group (e.g. ``'spatial'``). + + Returns + ------- + list of str + Station names in the (filtered) buddy group. + + Raises + ------ + ValueError + If neither the base nor the filtered group exists. + """ + if f"{groupname}_filtered" in self._buddy_groups: + return self._buddy_groups[f"{groupname}_filtered"] + if groupname in self._buddy_groups: + return self._buddy_groups[groupname] + raise ValueError(f"Unknown buddy group: {groupname}") + + def has_enough_buddies(self, groupname: str, min_buddies: int) -> bool: + """Check if the station has enough final buddies.""" + enough = len(self.get_buddies(groupname=groupname)) >= min_buddies + return enough + + def _update_details( + self, iteration: int, detail_series: pd.Series, groupname: str + ) -> None: + """Append or create detail strings for a given group and iteration. + + Parameters + ---------- + iteration : int + Iteration number to store details under. + detail_series : pandas.Series + Series with a DatetimeIndex containing human-readable detail + strings for each timestep. + groupname : str + Key in ``self.details`` dict (e.g. ``'spatial_check'``). + """ + # Handle empty input - still store an empty entry to ensure the iteration key exists + if detail_series.empty: + if iteration not in self.details[groupname]: + self.details[groupname][iteration] = pd.Series( + dtype=str, index=pd.DatetimeIndex([], name="datetime") + ) + return + + # Subset detail_series to only include indices present in self.sensor.series.index + # edgcase: this can be caused because of the wideobds desing, that creates empty rows + # for timestamps where no observations are present. + valid_index = detail_series.index.intersection(self.sensor.series.index) + detail_series = detail_series.loc[valid_index] + # Remove duplicates (keep first occurrence) + detail_series = detail_series[~detail_series.index.duplicated(keep="first")] + + # Store details in the details dictionary (even if now empty after filtering) + if iteration not in self.details[groupname]: + self.details[groupname][iteration] = detail_series + else: + # Append to existing series for this iteration + existing = self.details[groupname][iteration] + if existing.empty: + self.details[groupname][iteration] = detail_series + elif not detail_series.empty: + combined = pd.concat([existing, detail_series]) + # Remove duplicates keeping first + self.details[groupname][iteration] = combined[ + ~combined.index.duplicated(keep="first") + ].sort_index() + + def add_spatial_details(self, iteration: int, detail_series: pd.Series) -> None: + """Add spatial check detail information for an iteration. + + Parameters + ---------- + iteration : int + The iteration number. + detail_series : pd.Series + Series with DatetimeIndex containing detail messages. + """ + self._update_details( + iteration=iteration, detail_series=detail_series, groupname="spatial_check" + ) + + def add_safetynet_details( + self, iteration: int, safetynetname: str, detail_series: pd.Series + ) -> None: + """Store detail strings from a safety-net check for a specific iteration. + + Parameters + ---------- + iteration : int + Iteration number. + safetynetname : str + Name of the safety-net group (e.g. a LCZ category name). + detail_series : pandas.Series + Series with a DatetimeIndex containing detail messages for each + timestamp that was assessed by the safety net. + """ + if detail_series.empty: + return + # Remove duplicates (keep first occurrence) + detail_series = detail_series[~detail_series.index.duplicated(keep="first")] + + # check if the groupname entry exists + if safetynetname not in self.details["safetynet_check"]: + self.details["safetynet_check"][safetynetname] = {} + + # Store details in the details dictionary + if iteration not in self.details["safetynet_check"][safetynetname]: + self.details["safetynet_check"][safetynetname][iteration] = detail_series + else: + # Append to existing series for this iteration + existing = self.details["safetynet_check"][safetynetname][iteration] + combined = pd.concat([existing, detail_series]) + # Remove duplicates keeping first + self.details["safetynet_check"][safetynetname][iteration] = combined[ + ~combined.index.duplicated(keep="first") + ].sort_index() + + def update_whitelist_details( + self, whitelistseries: pd.Series, iteration: int, is_saved: bool = True + ) -> None: + """Update whitelist check saved information for an iteration. + + Parameters + ---------- + whitelistseries : pd.Series + Series with DatetimeIndex containing detail messages for whitelisted records. + iteration : int + The iteration number. + is_saved : bool, optional + Whether the records were saved by the whitelist (True) or not (False). + Default is True. + """ + # Remove duplicates (keep first occurrence) + whitelistseries = whitelistseries[ + ~whitelistseries.index.duplicated(keep="first") + ] + + if whitelistseries.empty: + return + + if is_saved: + flag = BC_WHITELIST_SAVED + else: + flag = BC_WHITELIST_NOT_SAVED + # Add flags to the flags DataFrame + flag_series = pd.Series(flag, index=whitelistseries.index) + self.add_flags( + iteration=iteration, flag_series=flag_series, column_name="whitelist_check" + ) + + # Store details in the details dictionary + if iteration not in self.details["whitelist_check"]: + self.details["whitelist_check"][iteration] = whitelistseries + else: + # Append to existing series for this iteration + existing = self.details["whitelist_check"][iteration] + combined = pd.concat([existing, whitelistseries]) + # Remove duplicates keeping first + self.details["whitelist_check"][iteration] = combined[ + ~combined.index.duplicated(keep="first") + ].sort_index() + + def _get_iterations(self) -> List[int]: + """Get all iterations that have been processed.""" + iterations = set() + + # From spatial_check + iterations.update(self.details["spatial_check"].keys()) + + # From safetynet_check (nested) + for groupname, iter_dict in self.details["safetynet_check"].items(): + iterations.update(iter_dict.keys()) + + # From whitelist_check + iterations.update(self.details["whitelist_check"].keys()) + + return sorted(iterations) + + def get_final_labels(self) -> pd.Series: + """Compute the final buddy-check label for each unique datetime. + + Applies :func:`final_label_logic` over the ``flags`` DataFrame + grouped by ``'datetime'``. + + Returns + ------- + pandas.Series + Series indexed by ``datetime`` with the final BC label string + for each timestep. Series name is ``'final_label'``. + """ + flags = self.flags + + # if no whitelist check has been performed, create an empyt column + if "whitelist_check" not in flags.columns: + flags["whitelist_check"] = BC_CHECK_SKIPPED #'skipped' + + final_labels = flags.groupby("datetime").apply(final_label_logic) + final_labels.name = "final_label" + return final_labels + + def get_final_details(self) -> pd.Series: + """Get detailed description strings for each timestamp based on final label logic. + + This method returns a Series with detailed description strings that illustrate + how the final label was determined. The details are extracted from the details + attribute and combined based on the check pipeline. + + Returns + ------- + pd.Series + Series with DatetimeIndex containing detailed description strings. + The series name is 'final_details'. + """ + # Handle edge case: if flags are empty, return empty series + if self.flags.empty: + return pd.Series(dtype=str, name="final_details") + + # The flags have a MultiIndex (datetime, iteration), but the detail + # Series stored in self.details use a plain DatetimeIndex. We must + # build the detail strings per-iteration using the DatetimeIndex so + # that reindexing can match properly, then combine the results back + # into a Series indexed by the original MultiIndex. + + # Get all datetimes (unique, from flags) + all_datetimes = self.flags.index.get_level_values("datetime").unique() + + def reindex_details( + detail_series: pd.Series, dt_index: pd.DatetimeIndex + ) -> pd.Series: + """Reindex a detail Series to match the given DatetimeIndex.""" + return detail_series.reindex(dt_index).fillna("NA").astype(str) + + # Get all iterations that have been processed (using the helper method) + iterations = self._get_iterations() + + # If no iterations found, try to infer from flags index + if not iterations: + # Fallback: get unique iterations from the flags MultiIndex + if isinstance(self.flags.index, pd.MultiIndex): + iterations = sorted( + self.flags.index.get_level_values("iteration").unique() + ) + else: + iterations = [0] # Default to iteration 0 + + # Build detail strings per datetime using all_datetimes as the index + detailstr = pd.Series("", index=all_datetimes) + + for iter_num in iterations: + # Check if this iteration exists in spatial_check details + if iter_num not in self.details["spatial_check"]: + # If iteration doesn't exist in spatial_check, add a placeholder message + detailstr = ( + detailstr + + f"iteration {iter_num}:[No spatial check details available" + ) + else: + detailstr = detailstr + f"iteration {iter_num}:[" + + # add spatial check details + if iter_num in self.details["spatial_check"]: + spatial_details = reindex_details( + self.details["spatial_check"][iter_num], all_datetimes + ) + detailstr = detailstr.str.cat(spatial_details, sep="") + # else: placeholder already added above + + detailstr = detailstr + " --> " + + # add safetynet details + if bool(self.details["safetynet_check"]): + + for safetynetkey in self.details["safetynet_check"].keys(): + if iter_num in self.details["safetynet_check"][safetynetkey].keys(): + + savedetails = reindex_details( + self.details["safetynet_check"][safetynetkey][iter_num], + all_datetimes, + ) + detailstr = detailstr.str.cat( + savedetails, sep=f"{safetynetkey}:" + ) + + else: + detailstr = detailstr + f"{safetynetkey}: NA " + + detailstr = detailstr + " --> " + else: + detailstr = detailstr + "NA " + " --> " + + # add whitelist details + if iter_num in self.details["whitelist_check"].keys(): + savedetails = reindex_details( + self.details["whitelist_check"][iter_num], all_datetimes + ) + detailstr = detailstr.str.cat(savedetails, sep="") + else: + detailstr = detailstr + "NA" + + detailstr = detailstr + "] \n" + + detailstr.name = "final_details" + return detailstr + + def get_iteration_summary(self, iteration: int) -> Dict[str, int]: + """Get a summary of record counts for a specific iteration. + + Parameters + ---------- + iteration : int + The iteration number to summarize. + + Returns + ------- + dict + Dictionary with check types as keys and record counts as values. + For safetynet_check, includes both total and per-group counts. + """ + # Count spatial_check + spatial_count = 0 + if iteration in self.details["spatial_check"]: + spatial_count = len(self.details["spatial_check"][iteration]) + + # Count safetynet_check per group + safetynet_per_group = {} + for groupname, iter_dict in self.details["safetynet_check"].items(): + if iteration in iter_dict: + safetynet_per_group[groupname] = len(iter_dict[iteration]) + safetynet_total = sum(safetynet_per_group.values()) + + # Count whitelist_check + whitelist_count = 0 + if iteration in self.details["whitelist_check"]: + whitelist_count = len(self.details["whitelist_check"][iteration]) + + return { + "spatial_check": spatial_count, + "safetynet_check": safetynet_per_group, + "safetynet_check_total": safetynet_total, + "whitelist_check": whitelist_count, + } + + def get_info(self) -> str: + """Get a summary of the BuddyWrapSensor status and attributes. + + Returns + ------- + str + Formatted string with overview of the station's buddy check status. + """ + lines = [] + lines.append("=" * 60) + lines.append(f"BuddyWrapSensor: {self.name}") + lines.append("=" * 60) + + # Buddy groups + lines.append("\n--- Buddy Groups ---") + if self._buddy_groups: + for groupname, buddies in self._buddy_groups.items(): + n_buddies = len(buddies) + buddies_str = ", ".join(buddies[:5]) + if n_buddies > 5: + buddies_str += f", ... (+{n_buddies - 5} more)" + lines.append(f" {groupname}: {n_buddies} buddies") + if buddies: + lines.append(f" [{buddies_str}]") + else: + lines.append(" No buddy groups assigned") + + # Corrections + lines.append("\n--- Value Corrections ---") + lines.append(f" Lapse rate correction: {self.flag_lapsrate_corrections}") + if self.flag_lapsrate_corrections: + lines.append(f" Correction term: {self.cor_term:.4f}") + + # Flags summary + lines.append("\n--- Flags ---") + if not self.flags.empty: + lines.append(f" Total flag entries: {len(self.flags)}") + lines.append(f" Flag columns: {list(self.flags.columns)}") + else: + lines.append(" No flags recorded") + + # Iteration status + iterations = self._get_iterations() + lines.append("\n--- Iteration Status ---") + if iterations: + lines.append(f" Iterations processed: {len(iterations)}") + + # Totals across all iterations + total_spatial = 0 + total_safetynet = 0 + total_whitelist = 0 + safetynet_groups_total: Dict[str, int] = {} + + for iteration in iterations: + summary = self.get_iteration_summary(iteration) + total_spatial += summary["spatial_check"] + total_safetynet += summary["safetynet_check_total"] + total_whitelist += summary["whitelist_check"] + + # Accumulate per-group safetynet totals + for groupname, count in summary["safetynet_check"].items(): + safetynet_groups_total[groupname] = ( + safetynet_groups_total.get(groupname, 0) + count + ) + + lines.append(f"\n Iteration {iteration}:") + lines.append(f" Spatial outliers: {summary['spatial_check']}") + if summary["safetynet_check"]: + lines.append( + f" Safetynet saved (total): {summary['safetynet_check_total']}" + ) + for groupname, count in summary["safetynet_check"].items(): + lines.append(f" - {groupname}: {count}") + else: + lines.append(f" Safetynet saved: 0") + lines.append(f" Whitelist saved: {summary['whitelist_check']}") + + lines.append(f"\n --- Totals ---") + lines.append(f" Total spatial outliers: {total_spatial}") + lines.append(f" Total safetynet saved: {total_safetynet}") + if safetynet_groups_total: + for groupname, count in safetynet_groups_total.items(): + lines.append(f" - {groupname}: {count}") + lines.append(f" Total whitelist saved: {total_whitelist}") + else: + lines.append(" No iterations processed") + + lines.append("=" * 60) + + info_str = "\n".join(lines) + print(info_str) + return info_str + + def map_timestamps(self, timestamp_map: Dict[str, pd.Series]) -> None: + """Map synchronized timestamps to original timestamps for this station. + + This function maps the synchronized timestamps (used during buddy check + processing) back to the original timestamps for this station's flags and + details attributes. + + Parameters + ---------- + timestamp_map : dict + Dictionary mapping station names to Series where index is synchronized + timestamp and value is original timestamp. + + Returns + ------- + None + Modifies the station in-place. + """ + + # ts_map = timestamp_map[self.name] + + # Revert flags DataFrame timestamps (MultiIndex: datetime, iteration) + if not self.flags.empty: + self.flags = _map_dt_index( + pdobj=self.flags, ts_map=timestamp_map, datetime_level="datetime" + ) + + # Revert details timestamps + # spatial_check: {iteration: Series} + for iteration, detail_series in self.details["spatial_check"].items(): + self.details["spatial_check"][iteration] = _map_dt_index( + pdobj=detail_series, ts_map=timestamp_map + ) + + # safetynet_check: {groupname: {iteration: Series}} + for groupname, iter_dict in self.details["safetynet_check"].items(): + for iteration, detail_series in iter_dict.items(): + self.details["safetynet_check"][groupname][iteration] = _map_dt_index( + pdobj=detail_series, ts_map=timestamp_map + ) + + # whitelist_check: {iteration: Series} + for iteration, detail_series in self.details["whitelist_check"].items(): + self.details["whitelist_check"][iteration] = _map_dt_index( + pdobj=detail_series, ts_map=timestamp_map + ) + + +# =============================== +# helpers for BCS +# =============================== + + +def final_label_logic(subset: pd.DataFrame) -> str: + """Determine the final buddy-check label for one datetime from all iteration flags. + + This module-level function is intended to be called via + ``groupby('datetime').apply(final_label_logic)`` on the ``flags`` + DataFrame of a :class:`BuddyWrapSensor`. + + Parameters + ---------- + subset : pandas.DataFrame + Subset of the flags DataFrame for a single ``datetime``. + Expected columns: ``'spatial_check'``, optional + ``'safetynet_check:'`` columns, and ``'whitelist_check'``. + + Returns + ------- + str + One of the ``BC_*`` status constants defined in this module. + + Raises + ------ + ValueError + If the combination of flags does not match any known outcome. + """ + # the flag not tested is present on ALL iterations ! + if subset["spatial_check"].apply(lambda x: x == "not_tested").all(): + return BC_NOT_TESTED + + # --- passed condition ---- + # 1a perfect pass (pass on last iteration of spatial check) + if subset["spatial_check"].iloc[-1] == BC_PASSED: + return BC_PASSED + + if subset["spatial_check"].iloc[-1] == BC_NO_BUDDIES: + # Choice made: it can happen that a record passed a previous iteration, + # but has not enough buddies in the last iteration. Applying the 'save' logic, + # it is best to label this as no_buddies + return BC_NO_BUDDIES + + # catched by safetynet + # if there is at least (there can only be one), pass in the last iteration of saftynets + saftynet_cols = [ + col for col in subset.columns if col.startswith("safetynet_check:") + ] + if any( + subset.iloc[-1][saftynet_cols] == BC_PASSED + ): # TODO not shure of this string + return BC_SAFETYNET_SAVED + + # catched by whitelist + if subset["whitelist_check"].iloc[-1] == BC_WHITELIST_SAVED: + return BC_WHITELIST_SAVED + + # --- failed condition ---- + + # fail in last iteration of spatial check + if ( + (subset["spatial_check"].iloc[-1] == BC_FLAGGED) + and all( + subset.iloc[-1][saftynet_cols] != BC_PASSED + ) # not passed is [nan, flagged, no-buddies] + and (subset["whitelist_check"].iloc[-1] != BC_WHITELIST_SAVED) + ): # not saved is [nan, skipped, not-saved] + return BC_FLAGGED + + # fail in any previous iteration of spatial check + if (any(subset["spatial_check"] == BC_FLAGGED)) and ( + subset["spatial_check"].iloc[-1] == BC_NOT_TESTED + ): + return BC_FLAGGED + + raise ValueError( + f"Unforeseen situation encountered in final label logic: \n {subset}" + ) + + +def _map_dt_index( + pdobj: pd.Series | pd.DataFrame, ts_map: pd.Series, datetime_level: str = "datetime" +) -> pd.DataFrame: + """Revert timestamps in a DataFrame with MultiIndex containing datetime level. + + Parameters + ---------- + df : pd.DataFrame + DataFrame with MultiIndex containing a datetime level. + ts_map : pd.Series + Series mapping synchronized timestamps (index) to original timestamps (values). + datetime_level : str + Name of the datetime level in the MultiIndex. + + Returns + ------- + pd.DataFrame + DataFrame with reverted timestamps in the MultiIndex. + """ + + if isinstance(pdobj, pd.Series): + df = pdobj.to_frame() + returnseries = True + else: + df = pdobj + returnseries = False + + # Get the current index + old_index = df.index + level_names = old_index.names + + df = df.reset_index() + df["_mapped_datetime"] = df[datetime_level].map( + lambda x: ts_map.get(x, x) if pd.notna(ts_map.get(x, pd.NaT)) else x + ) + df = df.drop(columns=[datetime_level]) + df = df.rename(columns={"_mapped_datetime": datetime_level}) + df = df.set_index(level_names) + df = df.sort_index() + if returnseries: + return df.iloc[:, 0] + return df diff --git a/src/metobs_toolkit/qc_collection/spatial_checks/methods/__init__.py b/src/metobs_toolkit/qc_collection/spatial_checks/methods/__init__.py new file mode 100644 index 000000000..eed131f38 --- /dev/null +++ b/src/metobs_toolkit/qc_collection/spatial_checks/methods/__init__.py @@ -0,0 +1,11 @@ +from .findbuddies import ( + assign_spatial_buddies, + filter_buddygroup_by_altitude, + subset_buddies_to_nearest, +) +from .pdmethods import create_wide_obs_df, concat_multiindices +from .lapsratecorrection import correct_lapse_rate +from .samplechecks import buddy_test_a_station + +from .safetynets import validate_safety_net_configs, apply_safety_net +from .whitesaving import save_whitelist_records diff --git a/src/metobs_toolkit/qc_collection/spatial_checks/methods/findbuddies.py b/src/metobs_toolkit/qc_collection/spatial_checks/methods/findbuddies.py new file mode 100644 index 000000000..39ebb4537 --- /dev/null +++ b/src/metobs_toolkit/qc_collection/spatial_checks/methods/findbuddies.py @@ -0,0 +1,184 @@ +from __future__ import annotations + +import logging +from typing import Union, List, Dict, TYPE_CHECKING + +import pandas as pd + + +logger = logging.getLogger("") + + +if TYPE_CHECKING: + from ..buddywrapsensor import BuddyWrapSensor + +# ------------------------------------------ +# Callables by buddy check +# ------------------------------------------ + + +def assign_spatial_buddies( + distance_df: pd.DataFrame, + metadf: pd.DataFrame, + buddy_radius: Union[int, float], + min_buddy_distance: Union[int, float], + wrappedsensors: List[BuddyWrapSensor], + max_alt_diff: Union[int, float, None] = None, +) -> None: + """Assign spatial buddy groups to all wrapped stations. + + Finds buddies for each station within ``buddy_radius`` using + :func:`_find_buddies_by_distance`, optionally further filters by + altitude difference, and stores the result on each + :class:`~buddywrapsensor.BuddyWrapSensor` via :meth:`set_buddies`. + + Parameters + ---------- + distance_df : pandas.DataFrame + Symmetric distance matrix (metres) with station names as index and + columns. + metadf : pandas.DataFrame + Station metadata; must contain an ``'altitude'`` column when + ``max_alt_diff`` is not None. + buddy_radius : int or float + Maximum distance (metres) from a station for another station to be + considered a buddy. + min_buddy_distance : int or float + Minimum distance (metres); stations closer than this are excluded. + wrappedsensors : list of BuddyWrapSensor + Wrapped sensor objects whose buddy groups are updated in-place. + max_alt_diff : int, float, or None, optional + If given, buddies with an altitude difference greater than this + value (metres) are removed. Default is None (no altitude filter). + """ + spatial_buddies = _find_buddies_by_distance( + distance_df=distance_df, + buddy_radius=buddy_radius, + min_buddy_distance=min_buddy_distance, + ) + + # update the wrapsensors + for wrapsensor in wrappedsensors: + wrapsensor.set_buddies(spatial_buddies[wrapsensor.name], groupname="spatial") + + if max_alt_diff is not None: + for wrapsensor in wrappedsensors: + filter_buddygroup_by_altitude( + wrappedsensor=wrapsensor, + groupname="spatial", + altitudes=metadf["altitude"], + max_altitude_diff=max_alt_diff, + ) + + +def filter_buddygroup_by_altitude( + wrappedsensor: BuddyWrapSensor, + groupname: str, + altitudes: pd.Series, + max_altitude_diff: Union[int, float], +): + """Remove buddies whose altitude differs too much from the station's altitude. + + The filtered buddy list is stored under ``'{groupname}_filtered'`` via + :meth:`~buddywrapsensor.BuddyWrapSensor.filter_buddies`. + + Parameters + ---------- + wrappedsensor : BuddyWrapSensor + The wrapped sensor whose buddy group is to be filtered. + groupname : str + The name of the buddy group to filter (e.g. ``'spatial'``). + altitudes : pandas.Series + Series mapping station names to altitude values (metres). Must + contain no NaN values. + max_altitude_diff : int or float + Maximum allowed absolute altitude difference (metres). + + Raises + ------ + ValueError + If ``altitudes`` contains any NaN values. + """ + if altitudes.isnull().any(): + raise ValueError( + "Altitude series contains NaN values. All stations must have valid altitude data for altitude filtering." + ) + + # update the filter flag + station_altitude = altitudes.loc[wrappedsensor.name] + alt_buddies = [] + for buddy_name in wrappedsensor.get_buddies(groupname=groupname): + buddy_altitude = altitudes.loc[buddy_name] + if abs(station_altitude - buddy_altitude) <= max_altitude_diff: + alt_buddies.append(buddy_name) + wrappedsensor.filter_buddies(groupname=groupname, filteredbuddies=alt_buddies) + + +def subset_buddies_to_nearest( + wrappedsensors: List, + distance_df: pd.DataFrame, + max_sample_size: int, + groupname: str, +) -> None: + """Subset buddy groups to the nearest N stations. + + For each wrapped station, the buddies in the specified group are sorted + by distance and only the closest ``max_sample_size`` buddies are kept. + + Parameters + ---------- + wrappedsensors : list of BuddyWrapSensor + The wrapped sensors whose buddy groups should be subsetted. + distance_df : pd.DataFrame + Symmetric distance matrix with station names as index and columns. + max_sample_size : int + Maximum number of buddies to keep per station. + groupname : str + The name of the buddy group to subset (e.g., 'spatial'). + """ + for wrapsta in wrappedsensors: + buddies = wrapsta.get_buddies(groupname=groupname) + if len(buddies) <= max_sample_size: + continue + # Sort buddies by distance and keep only the nearest N + buddy_distances = distance_df.loc[wrapsta.name, buddies] + nearest = buddy_distances.nsmallest(max_sample_size).index.to_list() + wrapsta.filter_buddies(groupname=groupname, filteredbuddies=nearest) + + +# ------------------------------------------ +# Help functions to find buddies +# ------------------------------------------ +def _find_buddies_by_distance( + distance_df: pd.DataFrame, + buddy_radius: Union[int, float], + min_buddy_distance: Union[int, float] = 0, +) -> Dict: + """Build a mapping from each station to its buddy stations within a distance range. + + Parameters + ---------- + distance_df : pandas.DataFrame + Symmetric distance matrix (metres) with station names as index and + columns. + buddy_radius : int or float + Maximum distance (metres) for buddy inclusion. + min_buddy_distance : int or float, optional + Minimum distance (metres) for buddy inclusion. Default is 0. + + Returns + ------- + dict + Dictionary ``{station_name: [buddy_names]}`` for every station in + ``distance_df``. + """ + buddies = {} + for refstation, distances in distance_df.iterrows(): + bud_stations = distances[ + (distances <= buddy_radius) & (distances >= min_buddy_distance) + ].index.to_list() + if refstation in bud_stations: + bud_stations.remove(refstation) + buddies[refstation] = bud_stations + + return buddies diff --git a/src/metobs_toolkit/qc_collection/spatial_checks/methods/lapsratecorrection.py b/src/metobs_toolkit/qc_collection/spatial_checks/methods/lapsratecorrection.py new file mode 100644 index 000000000..b7e9a59ae --- /dev/null +++ b/src/metobs_toolkit/qc_collection/spatial_checks/methods/lapsratecorrection.py @@ -0,0 +1,78 @@ +from __future__ import annotations + +import logging +from typing import List, TYPE_CHECKING + +import pandas as pd + + +logger = logging.getLogger("") + + +if TYPE_CHECKING: + from metobs_toolkit.qc_collection.spatial_checks.buddywrapsensor import ( + BuddyWrapSensor, + ) + + +def correct_lapse_rate( + widedf: pd.DataFrame, + wrappedsensors: List[BuddyWrapSensor], + lapserate: float | None = None, +) -> pd.DataFrame: + """Apply a lapse-rate altitude correction to the wide observations DataFrame. + + Each station's observations are shifted by + ``altitude * (-1) * lapserate`` so that all values are effectively + corrected to 0 m altitude before the buddy check is performed. + The correction term is also stored on each wrapped sensor. + + Parameters + ---------- + widedf : pandas.DataFrame + Wide-format DataFrame with station names as columns and timestamps + as index. + wrappedsensors : list of BuddyWrapSensor + Wrapped sensors whose ``cor_term`` and + ``flag_lapsrate_corrections`` attributes are updated in-place. + lapserate : float or None, optional + Lapse rate in units per metre (e.g. ``-0.0065`` K/m for + temperature). If None, no correction is applied. Default is + None. + + Returns + ------- + pandas.DataFrame + Updated wide observations DataFrame with corrections applied. + + Raises + ------ + ValueError + If ``lapserate`` is not None and at least one station has a + missing altitude value. + """ + if lapserate is None: + logger.debug("No lapse rate correction applied") + for wrapsens in wrappedsensors: + wrapsens.flag_lapsrate_corrections = False + else: + logger.debug("Applying lapse rate correction with rate: %s", lapserate) + # Test if all stations have altitude + has_alts = [budsta.site.flag_has_altitude() for budsta in wrappedsensors] + + if not all(has_alts): + raise ValueError( + "At least one station has a NaN value for 'altitude', not lapse rate correction possible" + ) + for budsta in wrappedsensors: + budsta.flag_lapsrate_corrections = True + + # Since buddy check works with relative differences, correct all + # stations to the 0m altitude + correction_term = budsta.site.altitude * (-1) * lapserate + budsta.cor_term = correction_term # update it in the buddy station + + # apply the correction on the wide dataframe + widedf[budsta.name] = widedf[budsta.name] + correction_term + + return widedf diff --git a/src/metobs_toolkit/qc_collection/spatial_checks/methods/pdmethods.py b/src/metobs_toolkit/qc_collection/spatial_checks/methods/pdmethods.py new file mode 100644 index 000000000..49fbb0f0e --- /dev/null +++ b/src/metobs_toolkit/qc_collection/spatial_checks/methods/pdmethods.py @@ -0,0 +1,350 @@ +from __future__ import annotations + +import logging +from typing import List, Dict, TYPE_CHECKING, Tuple + +import pandas as pd +from metobs_toolkit.backend_collection.datetime_collection import to_timedelta + +logger = logging.getLogger("") + + +if TYPE_CHECKING: + from ..buddywrapsensor import BuddyWrapSensor + + +def create_wide_obs_df( + wrappedsensors: List[BuddyWrapSensor], instantaneous_tolerance: pd.Timedelta +) -> Tuple[pd.DataFrame, Dict]: + """Build a wide-format observations DataFrame from wrapped sensors. + + Sensor time series are synchronised to a common regular datetime index + using :func:`_synchronize_series` before being combined column-wise. + + Parameters + ---------- + wrappedsensors : list of BuddyWrapSensor + Wrapped sensors to include. The station name is used as the column + label. + instantaneous_tolerance : pandas.Timedelta + Maximum time shift allowed when merging a sensor's timestamps onto + the common target index. + + Returns + ------- + pandas.DataFrame + Wide DataFrame with one column per station and a synchronised + DatetimeIndex. + dict + Timestamp mapping returned by :func:`_synchronize_series`; maps + each synchronised timestamp to the original timestamp for each + station. + """ + concatlist = [] + for wrapsens in wrappedsensors: + records = wrapsens.sensor.series + records.name = wrapsens.name + concatlist.append(records) + + # synchronize the timestamps + logger.debug("Synchronizing timestamps") + combdf, timestamp_map = _synchronize_series( + series_list=concatlist, max_shift=instantaneous_tolerance + ) + + return (combdf, timestamp_map) + + +def _synchronize_series( + series_list: List[pd.Series], max_shift: pd.Timedelta +) -> Tuple[pd.DataFrame, Dict]: + """ + Synchronize a list of pandas Series with datetime indexes. + + The target timestamps are defined by: + + + * freq: the highest frequency present in the input series + * origin: the earliest timestamp found, rounded down by the freq + * closing: the latest timestamp found, rounded up by the freq. + + Parameters + ---------- + series_list : list of pandas.Series + List of pandas Series with datetime indexes. + max_shift : pandas.Timedelta + Maximum shift in time that can be applied to each timestamp + in synchronization. + + Returns + ------- + pandas.DataFrame + DataFrame with synchronized Series. + dict + Dictionary mapping each synchronized timestamp to its + original timestamp. + """ + + # find highest frequency + frequencies = [to_timedelta(s.index.inferred_freq) for s in series_list] + trg_freq = min(frequencies) + + # find origin and closing timestamp (earliest/latest) + origin = min([s.index.min() for s in series_list]).floor(trg_freq) + closing = max([s.index.max() for s in series_list]).ceil(trg_freq) + + # Create target datetime axes + target_dt = pd.date_range(start=origin, end=closing, freq=trg_freq) + target_dt = target_dt.rename("datetime") + + # Synchronize (merge with tolerance) series to the common index + synchronized_series = [] + timestamp_mapping = {} + for s in series_list: + targetdf = ( + s.to_frame() + .assign(orig_datetime=s.index) + .reindex( + index=pd.DatetimeIndex(target_dt), + method="nearest", + tolerance=max_shift, + limit=1, + ) + ) + + # Ensure each original value is used at most once. + # When multiple target timestamps map to the same original, keep + # only the closest match and discard the rest. + orig_col = targetdf["orig_datetime"].dropna() + for orig_ts, group in orig_col.groupby(orig_col): + if len(group) > 1: + diffs = (group.index - orig_ts).to_series(index=group.index).abs() + keep = diffs.idxmin() + drop = group.index.drop(keep) + targetdf.loc[drop, s.name] = float("nan") + targetdf.loc[drop, "orig_datetime"] = pd.NaT + + # extract the mapping (new -> original) + orig_timestampseries = targetdf["orig_datetime"] + orig_timestampseries.name = "original_timestamp" + timestamp_mapping[s.name] = orig_timestampseries + + synchronized_series.append(targetdf[s.name]) + + return pd.concat(synchronized_series, axis=1), timestamp_mapping + + +def concat_multiindices(indices: List[pd.MultiIndex]) -> pd.MultiIndex: + """Concatenate a list of MultiIndex objects into a single MultiIndex. + + Parameters + ---------- + indices : list of pd.MultiIndex + List of MultiIndex objects to concatenate. + + Returns + ------- + pd.MultiIndex + Concatenated MultiIndex. + """ + if not indices: + return pd.MultiIndex.from_tuples([], names=["name", "datetime"]) + + concatenated = pd.MultiIndex.from_tuples( + [tup for idx in indices for tup in idx], names=indices[0].names + ) + + return concatenated + + +if __name__ == "__main__": + print("Running _synchronize_series sanity checks...") + + # ------------------------------------------------------------------ # + # Test 1: Same frequency, aligned timestamps + # ------------------------------------------------------------------ # + s1 = pd.Series( + [10.0, 11.0, 12.0], + index=pd.date_range("2024-01-01 00:00", periods=3, freq="5min"), + name="A", + ) + s2 = pd.Series( + [20.0, 21.0, 22.0], + index=pd.date_range("2024-01-01 00:00", periods=3, freq="5min"), + name="B", + ) + df, tmap = _synchronize_series([s1, s2], max_shift=pd.Timedelta("2min")) + + assert list(df.columns) == ["A", "B"] + assert df.index.freq is not None + assert len(df) == 3 + assert df["A"].tolist() == [10.0, 11.0, 12.0] + assert df["B"].tolist() == [20.0, 21.0, 22.0] + assert set(tmap.keys()) == {"A", "B"} + assert tmap["A"].index.equals(df.index) + + # ------------------------------------------------------------------ # + # Test 2: Same freq, overlapping but shifted timestamps + # ------------------------------------------------------------------ # + s1 = pd.Series( + [10.0, 11.0, 12.0, 13.0], + index=pd.date_range("2024-01-01 00:00", periods=4, freq="5min"), + name="A", + ) + s2 = pd.Series( + [20.0, 21.0, 22.0, 23.0], + index=pd.date_range("2024-01-01 00:10", periods=4, freq="5min"), + name="B", + ) + df, tmap = _synchronize_series([s1, s2], max_shift=pd.Timedelta("2min")) + + assert df.index.freq is not None + expected_idx = pd.date_range("2024-01-01 00:00", "2024-01-01 00:25", freq="5min") + assert df.index.equals(expected_idx) + assert df.loc["2024-01-01 00:00", "A"] == 10.0 + assert pd.isna(df.loc["2024-01-01 00:20", "A"]) + assert pd.isna(df.loc["2024-01-01 00:00", "B"]) + assert df.loc["2024-01-01 00:10", "B"] == 20.0 + + # ------------------------------------------------------------------ # + # Test 3: Different frequencies (5min vs 10min) + # ------------------------------------------------------------------ # + s1 = pd.Series( + [10.0, 11.0, 12.0, 13.0, 14.0], + index=pd.date_range("2024-01-01 00:00", periods=5, freq="5min"), + name="high", + ) + s2 = pd.Series( + [20.0, 21.0, 22.0], + index=pd.date_range("2024-01-01 00:00", periods=3, freq="10min"), + name="low", + ) + df, tmap = _synchronize_series([s1, s2], max_shift=pd.Timedelta("1min")) + + assert df.index.freq == pd.tseries.frequencies.to_offset("5min") + assert df.loc["2024-01-01 00:00", "low"] == 20.0 + assert df.loc["2024-01-01 00:10", "low"] == 21.0 + assert df.loc["2024-01-01 00:20", "low"] == 22.0 + assert pd.isna(df.loc["2024-01-01 00:05", "low"]) + assert pd.isna(df.loc["2024-01-01 00:15", "low"]) + + # ------------------------------------------------------------------ # + # Test 4: Slight time shifts within tolerance + # ------------------------------------------------------------------ # + s1 = pd.Series( + [10.0, 11.0, 12.0], + index=pd.to_datetime( + [ + "2024-01-01 00:00:00", + "2024-01-01 00:05:00", + "2024-01-01 00:10:00", + ] + ), + name="exact", + ) + s2 = pd.Series( + [20.0, 21.0, 22.0], + index=pd.to_datetime( + [ + "2024-01-01 00:00:30", + "2024-01-01 00:05:30", + "2024-01-01 00:10:30", + ] + ), + name="shifted", + ) + df, tmap = _synchronize_series([s1, s2], max_shift=pd.Timedelta("1min")) + + assert df["shifted"].notna().sum() == 3 + assert df.loc["2024-01-01 00:00", "shifted"] == 20.0 + orig = tmap["shifted"].loc[pd.Timestamp("2024-01-01 00:00")] + assert orig == pd.Timestamp("2024-01-01 00:00:30") + + # ------------------------------------------------------------------ # + # Test 5: Shifts exceed tolerance → NaN + # ------------------------------------------------------------------ # + s1 = pd.Series( + [10.0, 11.0, 12.0], + index=pd.date_range("2024-01-01 00:00", periods=3, freq="5min"), + name="base", + ) + s2 = pd.Series( + [20.0, 21.0, 22.0], + index=pd.to_datetime( + [ + "2024-01-01 00:02:00", + "2024-01-01 00:07:00", + "2024-01-01 00:12:00", + ] + ), + name="far", + ) + df, tmap = _synchronize_series([s1, s2], max_shift=pd.Timedelta("30s")) + + assert df["base"].notna().sum() == 3 + assert df["far"].notna().sum() == 0 + assert tmap["far"].isna().all() + + # ------------------------------------------------------------------ # + # Test 6: Each original value used at most once (deduplication) + # ------------------------------------------------------------------ # + s1 = pd.Series( + [1.0, 2.0, 3.0, 4.0, 5.0, 6.0], + index=pd.date_range("2024-01-01 00:00", periods=6, freq="5min"), + name="ref", + ) + s2 = pd.Series( + [40.0, 41.0, 42.0], + index=pd.to_datetime( + [ + "2024-01-01 00:02:00", + "2024-01-01 00:12:00", + "2024-01-01 00:22:00", + ] + ), + name="shifted10", + ) + df, tmap = _synchronize_series([s1, s2], max_shift=pd.Timedelta("3min")) + + assert df.loc["2024-01-01 00:00", "shifted10"] == 40.0 + assert pd.isna(df.loc["2024-01-01 00:05", "shifted10"]) + assert df.loc["2024-01-01 00:10", "shifted10"] == 41.0 + assert pd.isna(df.loc["2024-01-01 00:15", "shifted10"]) + for val in [40.0, 41.0, 42.0]: + assert (df["shifted10"] == val).sum() == 1 + + # ------------------------------------------------------------------ # + # Test 7: Single series + # ------------------------------------------------------------------ # + s1 = pd.Series( + [10.0, 11.0, 12.0], + index=pd.date_range("2024-01-01", periods=3, freq="1h"), + name="solo", + ) + df, tmap = _synchronize_series([s1], max_shift=pd.Timedelta("5min")) + + assert df.shape == (3, 1) + assert df.columns.tolist() == ["solo"] + assert df.index.freq is not None + + # ------------------------------------------------------------------ # + # Test 8: Returned index is a perfect DatetimeIndex with freq + # ------------------------------------------------------------------ # + s1 = pd.Series( + [1.0, 2.0, 3.0], + index=pd.date_range("2024-01-01 00:00", periods=3, freq="10min"), + name="X", + ) + s2 = pd.Series( + [4.0, 5.0, 6.0], + index=pd.date_range("2024-01-01 00:00", periods=3, freq="10min"), + name="Y", + ) + df, tmap = _synchronize_series([s1, s2], max_shift=pd.Timedelta("1min")) + + assert isinstance(df.index, pd.DatetimeIndex) + assert df.index.freq is not None + assert df.index[0] == pd.Timestamp("2024-01-01 00:00") + assert df.index[-1] == pd.Timestamp("2024-01-01 00:20") + + print("✓ All sanity checks passed") diff --git a/src/metobs_toolkit/qc_collection/spatial_checks/methods/safetynets.py b/src/metobs_toolkit/qc_collection/spatial_checks/methods/safetynets.py new file mode 100644 index 000000000..e46544b86 --- /dev/null +++ b/src/metobs_toolkit/qc_collection/spatial_checks/methods/safetynets.py @@ -0,0 +1,431 @@ +from __future__ import annotations + +import logging +from typing import Union, List, Dict, TYPE_CHECKING + +import pandas as pd + + +logger = logging.getLogger("") + +from .findbuddies import filter_buddygroup_by_altitude, subset_buddies_to_nearest +from .samplechecks import buddy_test_a_station +from ..buddywrapsensor import BC_PASSED, BC_NO_BUDDIES + +if TYPE_CHECKING: + from ..buddywrapsensor import BuddyWrapSensor + + +def validate_safety_net_configs(safety_net_configs: List[Dict]) -> None: + """ + Validate that all required keys are present in safety_net_configs. + + This function checks that each safety net configuration contains all required + keys and validates optional keys when present. Required keys are: 'category', + 'buddy_radius', 'z_threshold', and 'min_sample_size'. Optional keys include + 'max_sample_size' (must be larger than 'min_sample_size') and + 'only_if_previous_had_no_buddies' (boolean, cannot be True for first safety net). + + Parameters + ---------- + safety_net_configs : list of dict or None + List of safety net configuration dictionaries. If None, the function + returns without validation. + + Raises + ------ + ValueError + If safety_net_configs is not a list or contains non-dict elements, or + if validation fails for max_sample_size (must be > min_sample_size), + or if 'only_if_previous_had_no_buddies' is not a boolean or is True + for the first safety net. + KeyError + If any required key is missing from a safety net configuration. + """ + if safety_net_configs is None: + return None + + required_keys = {"category", "buddy_radius", "z_threshold", "min_sample_size"} + optional_keys = {"max_sample_size", "only_if_previous_had_no_buddies"} + + if not isinstance(safety_net_configs, list): + raise ValueError( + f"safety_net_configs must be a list, got {type(safety_net_configs).__name__}" + ) + + for i, config in enumerate(safety_net_configs): + if not isinstance(config, dict): + raise ValueError( + f"Each safety net config must be a dict, but config at index {i} " + f"is {type(config).__name__}" + ) + + missing_keys = required_keys - set(config.keys()) + if missing_keys: + raise KeyError( + f"Safety net config at index {i} is missing required key(s): " + f"{', '.join(sorted(missing_keys))}. " + f"Required keys are: {', '.join(sorted(required_keys))}" + ) + + # Validate optional max_sample_size + if "max_sample_size" in config: + max_ss = config["max_sample_size"] + if max_ss is not None: + min_ss = config["min_sample_size"] + if max_ss <= min_ss: + raise ValueError( + f"Safety net config at index {i}: 'max_sample_size' " + f"({max_ss}) must be larger than 'min_sample_size' " + f"({min_ss})." + ) + + # Validate optional only_if_previous_had_no_buddies + if "only_if_previous_had_no_buddies" in config: + val = config["only_if_previous_had_no_buddies"] + if not isinstance(val, bool): + raise ValueError( + f"Safety net config at index {i}: " + f"'only_if_previous_had_no_buddies' must be a bool, " + f"got {type(val).__name__}." + ) + if val and i == 0: + raise ValueError( + f"Safety net config at index {i}: " + f"'only_if_previous_had_no_buddies' cannot be True for " + f"the first safety net because there is no previous " + f"safety net to fall back from." + ) + + return None + + +def assign_safety_net_buddies( + wrapsta: BuddyWrapSensor, + metadf: pd.DataFrame, + distance_df: pd.DataFrame, + buddygroupname: str, + max_distance: Union[int, float], + min_distance: Union[int, float], + max_alt_diff: Union[int, float, None], + max_sample_size: Union[int, None], +) -> None: + """ + Assign category buddies to a wrapped station for safety net buddy checks. + + This function identifies buddies that share the same categorical attribute + (e.g., LCZ, network) with the reference station, within specified distance + constraints and altitude difference limits. + + The assigned buddy group is stored on the wrapped station and can be accessed + using ``wrapsta.get_buddies(groupname=buddygroupname)``. + + Parameters + ---------- + wrapsta : BuddyWrapSensor + The wrapped station for which buddies should be assigned. + metadf : pd.DataFrame + DataFrame containing station metadata. Must have the category column + specified by ``buddygroupname`` (e.g., 'LCZ', 'network') and an + 'altitude' column if ``max_alt_diff`` is not None. + distance_df : pd.DataFrame + Symmetric distance matrix with station names as index and columns. + Distances should be in meters. + buddygroupname : str + The name of the metadata column to group by (e.g., 'LCZ', 'network'). + This is also used as the buddy group identifier on the wrapped station. + max_distance : int or float + Maximum distance (in meters) for category buddies. Stations farther + than this distance will be excluded. + min_distance : int or float + Minimum distance (in meters) required between the station and its + category buddies. Stations closer than this distance will be excluded. + max_alt_diff : int, float, or None + Maximum altitude difference (in meters) allowed for buddies. If None, + no altitude filtering is applied. + max_sample_size : int or None + Maximum number of category buddies to keep per station. If not None, + buddies are sorted by distance and only the nearest ``max_sample_size`` + are retained. If None, no limit is applied. + + Returns + ------- + None + The function modifies ``wrapsta`` in place by assigning the buddy group. + + Notes + ----- + The function applies filters in the following order: + + 1. Category matching: Only stations with the same category value as the + reference station are considered. + 2. Distance filtering: Only stations within [min_distance, max_distance] + are kept. + 3. Altitude filtering (if max_alt_diff is not None): Only stations with + altitude difference <= max_alt_diff are kept. + 4. Sample size limiting (if max_sample_size is not None): Only the nearest + max_sample_size buddies are kept. + + If the reference station has a NaN value for the category, an empty buddy + list is assigned and a warning is logged. + + """ + + ref_category = metadf.loc[wrapsta.name, buddygroupname] + # Handle NaN values - they should not match with anything + if pd.isna(ref_category): + logger.warning( + "Station %s has NaN value for category '%s' - no category buddies assigned", + wrapsta.name, + buddygroupname, + ) + # Assign empty buddy list + wrapsta.set_buddies([], groupname=buddygroupname) + else: + # find potential candidates + buddy_candidates = metadf.loc[ + metadf[buddygroupname] == ref_category + ].index.to_list() + + # remove self from buddy candidates + buddy_candidates.remove(wrapsta.name) + + target_distances = distance_df.loc[wrapsta.name, buddy_candidates] + # filter by distance + ref_buddies = target_distances[ + (target_distances <= max_distance) & (target_distances >= min_distance) + ].index.to_list() + + # Assign the found buddies + wrapsta.set_buddies(ref_buddies, groupname=buddygroupname) + + # filter by altitude difference if needed + if max_alt_diff is not None: + filter_buddygroup_by_altitude( + wrappedsensor=wrapsta, + groupname=buddygroupname, + altitudes=metadf["altitude"], + max_altitude_diff=max_alt_diff, + ) + + # Subset category buddies to nearest N if max_sample_size is set + if max_sample_size is not None: + subset_buddies_to_nearest( + wrappedsensors=[wrapsta], + distance_df=distance_df, + max_sample_size=max_sample_size, + groupname=buddygroupname, + ) + + +def apply_safety_net( + outliers: pd.Index, + buddychecksensors: List[BuddyWrapSensor], + buddygroupname: str, + metadf: pd.DataFrame, + distance_df: pd.DataFrame, + max_distance: Union[int, float], + min_distance: Union[int, float], + max_alt_diff: Union[int, float, None], + wideobsds: pd.DataFrame, + safety_z_threshold: Union[int, float], + min_sample_size: int, + min_sample_spread: Union[int, float], + use_z_robust_method: bool, + iteration: int, + max_sample_size: Union[int, None] = None, + only_if_previous_had_no_buddies: bool = False, + previous_safetynet_category: Union[str, None] = None, +) -> pd.MultiIndex: + """Run a single safety-net buddy check on the flagged outlier records. + + For each outlier record, safety-net buddies are assigned (using a + possibly different radius/altitude filter), then the z-score buddy + test is applied. Records that pass the safety-net test are removed + from the outliers, and the remaining outliers are returned. Flags + and details are updated on the BuddyWrapSensor objects in-place. + + Parameters + ---------- + outliers : pandas.Index + MultiIndex ``('name', 'datetime')`` of records flagged as outliers + by the primary spatial check. + buddychecksensors : list of BuddyWrapSensor + All wrapped sensors involved in the buddy check. + buddygroupname : str + Name prefix for the safety-net buddy group (e.g. a LCZ category). + metadf : pandas.DataFrame + Station metadata with at least an ``'altitude'`` column and a column + matching ``buddygroupname`` for category grouping. + distance_df : pandas.DataFrame + Symmetric distance matrix (metres) with station names as index + and columns. + max_distance : int or float + Maximum buddy search radius (metres) for the safety net. + min_distance : int or float + Minimum buddy distance (metres). + max_alt_diff : int, float, or None + Altitude filter (metres). None disables altitude filtering. + wideobsds : pandas.DataFrame + Wide-format observations DataFrame used for z-score computation. + safety_z_threshold : int or float + Z-score threshold for the safety-net outlier test. + min_sample_size : int + Minimum number of valid buddy samples required. + min_sample_spread : int or float + Minimum sample spread (std or MAD) to avoid near-zero division. + use_z_robust_method : bool + If True, use the robust (median/MAD) z-score method. + iteration : int + Current iteration number. + max_sample_size : int or None, optional + Maximum number of buddies to use. None means no cap. + Default is None. + only_if_previous_had_no_buddies : bool, optional + If True, only apply the safety net for records that had + insufficient buddies in the previous safety-net layer. + Default is False. + previous_safetynet_category : str or None, optional + Category name of the preceding safety net, required when + ``only_if_previous_had_no_buddies`` is True. Default is None. + + Returns + ------- + pandas.MultiIndex + MultiIndex ``('name', 'datetime')`` of remaining outliers after + applying the safety net. This is the input ``outliers`` minus any + records that passed the safety-net test (i.e., were saved from + being flagged). + """ + # Track records that were saved (passed the safety net test) + saved_records = pd.MultiIndex.from_tuples([], names=["name", "datetime"]) + + # create a name map of the wrappedsensors + name_map = {wrapsens.name: wrapsens for wrapsens in buddychecksensors} + + # If only_if_previous_had_no_buddies is True, restrict outliers to only + # those records where the previous safety net had insufficient buddies + # (BC_NO_BUDDIES flag). This is determined by inspecting the flags + # already stored on each BuddyWrapSensor for the current iteration. + if only_if_previous_had_no_buddies: + if previous_safetynet_category is None: + raise ValueError( + "only_if_previous_had_no_buddies is True but " + "previous_safetynet_category is None. This should not " + "happen -- the first safety net cannot use this option." + ) + + prev_check_col = f"safetynet_check:{previous_safetynet_category}" + previous_no_buddies = pd.MultiIndex.from_tuples([], names=["name", "datetime"]) + + for station_name in outliers.get_level_values("name").unique(): + wrapsta = name_map[station_name] + if not wrapsta.flags.empty and prev_check_col in wrapsta.flags.columns: + iter_mask = ( + wrapsta.flags.index.get_level_values("iteration") == iteration + ) + iter_flags = wrapsta.flags.loc[iter_mask, prev_check_col] + nb_mask = iter_flags == BC_NO_BUDDIES + if nb_mask.any(): + nb_timestamps = iter_flags[nb_mask].index.get_level_values( + "datetime" + ) + station_nb = pd.MultiIndex.from_arrays( + [ + [station_name] * len(nb_timestamps), + nb_timestamps, + ], + names=["name", "datetime"], + ) + previous_no_buddies = previous_no_buddies.union(station_nb) + + if previous_no_buddies.empty: + logger.info( + "only_if_previous_had_no_buddies is True but no records " + "from the previous safety net ('%s') had insufficient " + "buddies. Skipping safety net '%s' entirely.", + previous_safetynet_category, + buddygroupname, + ) + return outliers + + outliers = outliers.intersection(previous_no_buddies) + logger.info( + "Filtering to %s outlier records that had insufficient " + "buddies in the previous safety net ('%s').", + len(outliers), + previous_safetynet_category, + ) + + if outliers.empty: + return outliers + + # find the categorical buddies (only for the outlier stations) + for outlstation in outliers.get_level_values("name").unique(): + wrapsta = name_map[outlstation] + assign_safety_net_buddies( + wrapsta=wrapsta, + metadf=metadf, + distance_df=distance_df, + buddygroupname=buddygroupname, + max_distance=max_distance, + min_distance=min_distance, + max_alt_diff=max_alt_diff, + max_sample_size=max_sample_size, + ) + + # find outliers in the new categorical group + # The buddy_test_a_station function updates flags/details directly + # and returns only the outlier MultiIndex (BC_FLAGGED records) + # We need to track BC_PASSED records to remove them from outliers + for outlstation in outliers.get_level_values("name").unique(): + wrapsta = name_map[outlstation] + + # Get the timestamps for this station from the original outliers + station_outlier_timestamps = outliers[ + outliers.get_level_values("name") == outlstation + ].get_level_values("datetime") + + # Subset wideobsds to only the outlier timestamps for this station + widedf_subset = wideobsds.loc[station_outlier_timestamps] + + # Run the buddy test - this updates flags/details directly on wrapsta + # and returns outliers (BC_FLAGGED records) + station_flagged = buddy_test_a_station( + centerwrapsensor=wrapsta, + buddygroupname=buddygroupname, + widedf=widedf_subset, + min_sample_size=min_sample_size, + min_sample_spread=min_sample_spread, + outlier_threshold=safety_z_threshold, + iteration=iteration, + check_type=f"safetynet_check:{buddygroupname}", + use_z_robust_method=use_z_robust_method, + ) + + # Get passed timestamps from the flags DataFrame + # These are records where the safetynet check passed (BC_PASSED) + check_col = f"safetynet_check:{buddygroupname}" + if not wrapsta.flags.empty and check_col in wrapsta.flags.columns: + # Get flags for this iteration + iter_mask = wrapsta.flags.index.get_level_values("iteration") == iteration + iter_flags = wrapsta.flags.loc[iter_mask, check_col] + + # Find passed timestamps + passed_mask = iter_flags == BC_PASSED + if passed_mask.any(): + passed_timestamps = iter_flags[passed_mask].index.get_level_values( + "datetime" + ) + + # Create MultiIndex for saved records + station_saved = pd.MultiIndex.from_arrays( + [[outlstation] * len(passed_timestamps), passed_timestamps], + names=["name", "datetime"], + ) + saved_records = saved_records.union(station_saved) + + # Return original outliers minus the saved records + remaining_outliers = outliers.difference(saved_records) + + return remaining_outliers.sort_values().unique() diff --git a/src/metobs_toolkit/qc_collection/spatial_checks/methods/samplechecks.py b/src/metobs_toolkit/qc_collection/spatial_checks/methods/samplechecks.py new file mode 100644 index 000000000..80d48a0f3 --- /dev/null +++ b/src/metobs_toolkit/qc_collection/spatial_checks/methods/samplechecks.py @@ -0,0 +1,376 @@ +from __future__ import annotations + +import logging +from typing import TYPE_CHECKING, Tuple +import numpy as np +import pandas as pd + +logger = logging.getLogger("") + + +if TYPE_CHECKING: + from ..buddywrapsensor import BuddyWrapSensor + +# Import constants from buddywrapsensor +from ..buddywrapsensor import BC_NO_BUDDIES, BC_PASSED, BC_FLAGGED, BC_NOT_TESTED + + +def buddy_test_a_station( + centerwrapsensor: BuddyWrapSensor, + buddygroupname: str, + widedf: pd.DataFrame, + min_sample_size: int, + min_sample_spread: float, + outlier_threshold: float, + iteration: int, + check_type: str = "spatial_check", + use_z_robust_method: bool = True, +) -> Tuple[pd.MultiIndex, BuddyWrapSensor]: + """Test a center station against its buddy group and update flags/details. + + This function tests whether the center station is an outlier compared to + its buddy stations using z-score analysis. The z-score is computed from + the buddy stations only (the center station's values are excluded from + the sample distribution). When ``use_z_robust_method`` is True, the + robust z-score (median/MAD) is used; otherwise the classic z-score + (mean/std) is used. + + Parameters + ---------- + centerwrapsensor : BuddyWrapSensor + The wrapped sensor at the center of the buddy group to be tested. + buddygroupname : str + The name of the buddy group to use. + widedf : pd.DataFrame + Wide-format DataFrame with stations as columns and timestamps as index. + min_sample_size : int + Minimum number of valid buddy samples required for z-score calculation. + min_sample_spread : float + When ``use_z_robust_method`` is True, this is the minimum MAD to use + (avoids division by near-zero). When False, this is the minimum + standard deviation. + outlier_threshold : float + Z-score threshold above which a record is flagged as outlier. + iteration : int + The current iteration number. + check_type : str, optional + The type of check being performed ('spatial_check', 'safetynet_check:groupname'). + Default is 'spatial_check'. + use_z_robust_method : bool, optional + If True, use the robust z-score method (median/MAD). If False, use + the classic z-score method (mean/std). Default is True. + + Returns + ------- + tuple of (pd.MultiIndex, BuddyWrapSensor) + A tuple containing: + + * A MultiIndex with levels ('name', 'datetime') of the outlier + records for the center station (empty if no outliers found). + * The updated ``centerwrapsensor`` with flags and details set for + this iteration. + """ + + # Get buddies (excluding center station) + buddies = centerwrapsensor.get_buddies(groupname=buddygroupname) + center_name = centerwrapsensor.name + + # Subset to buddies only (for sample distribution) and center station + buddydf = widedf[buddies] + center_series = widedf[center_name] + + # Count valid buddy samples per timestamp (center station NOT included) + buddy_sample_sizes = buddydf.notna().sum(axis=1) + + # Mark timestamps where center station has no data as NOT_TESTED + + # Edgecaase: If a station has fewer records than others, they are present as NaN in widedf + # But these timestamps do not ex + no_data = pd.Series(BC_NOT_TESTED, index=center_series[center_series.isna()].index) + centerwrapsensor.add_flags( + iteration=iteration, flag_series=no_data, column_name=check_type + ) + + # Find timestamps where center station has data + center_has_data = center_series.notna() + # TODO: pass the flag BC_NOT_TESTED for timestamps where center has no data + + # Separate timestamps by sample size condition (only where center has data) + sufficient_samples_mask = (buddy_sample_sizes >= min_sample_size) & center_has_data + insufficient_samples_mask = (buddy_sample_sizes < min_sample_size) & center_has_data + + timestamps_with_sufficient = widedf.index[sufficient_samples_mask] + timestamps_insufficient = widedf.index[insufficient_samples_mask] + + # ---- Handle timestamps with insufficient buddy samples (BC_NO_BUDDIES) ---- + if not timestamps_insufficient.empty: + # Create flags for NO_BUDDIES + no_buddies_flags = pd.Series(BC_NO_BUDDIES, index=timestamps_insufficient) + centerwrapsensor.add_flags( + iteration=iteration, flag_series=no_buddies_flags, column_name=check_type + ) + + # Create detail messages + no_buddies_details = pd.Series( + [ + f"Insufficient buddy sample size (n={int(buddy_sample_sizes.loc[ts])}, " + f"required={min_sample_size}) in {buddygroupname} buddy group " + f"centered on {center_name}" + for ts in timestamps_insufficient + ], + index=timestamps_insufficient, + ) + if check_type == "spatial_check": + centerwrapsensor.add_spatial_details( + iteration=iteration, detail_series=no_buddies_details + ) + else: + centerwrapsensor.add_safetynet_details( + iteration=iteration, + safetynetname=buddygroupname, + detail_series=no_buddies_details, + ) + + # ---- Handle timestamps with sufficient samples ---- + if timestamps_with_sufficient.empty: + # No timestamps to process, return empty MultiIndex + return ( + pd.MultiIndex.from_tuples([], names=["name", "datetime"]), + centerwrapsensor, + ) + + # Filter to rows with enough valid buddy samples + buddydf_filtered = buddydf.loc[timestamps_with_sufficient] + center_filtered = center_series.loc[timestamps_with_sufficient] + buddy_sample_sizes_filtered = buddy_sample_sizes.loc[timestamps_with_sufficient] + + # Compute z-scores for center station using buddy distribution + if use_z_robust_method: + results_df = _compute_robust_z_scores( + buddydf=buddydf_filtered, + center_values=center_filtered, + min_mad=min_sample_spread, + outlier_threshold=outlier_threshold, + ) + + else: + results_df = _compute_center_z_scores( + buddydf=buddydf_filtered, + center_values=center_filtered, + min_std=min_sample_spread, + outlier_threshold=outlier_threshold, + ) + + # Separate flagged (outliers) and passed + outlier_timestamps = results_df.index[results_df["flagged"]] + passed_timestamps = results_df.index[~results_df["flagged"]] + + # ---- Update PASSED flags and details ---- + if not passed_timestamps.empty: + passed_flags = pd.Series(BC_PASSED, index=passed_timestamps) + centerwrapsensor.add_flags( + iteration=iteration, flag_series=passed_flags, column_name=check_type + ) + + # Create detail messages for passed + passed_details = ( + f"Passed {buddygroupname} check: " + + results_df.loc[passed_timestamps, "details"] + ) + + if check_type == "spatial_check": + centerwrapsensor.add_spatial_details( + iteration=iteration, detail_series=passed_details + ) + else: + centerwrapsensor.add_safetynet_details( + iteration=iteration, + safetynetname=buddygroupname, + detail_series=passed_details, + ) + + # ---- Update FLAGGED (outlier) flags and details ---- + if not outlier_timestamps.empty: + flagged_flags = pd.Series(BC_FLAGGED, index=outlier_timestamps) + centerwrapsensor.add_flags( + iteration=iteration, flag_series=flagged_flags, column_name=check_type + ) + + # Create detail messages for outliers + outlier_details = ( + f"Outlier in {buddygroupname} buddy group centered on {center_name}: " + + results_df.loc[outlier_timestamps, "details"] + ) + + if check_type == "spatial_check": + centerwrapsensor.add_spatial_details( + iteration=iteration, detail_series=outlier_details + ) + else: + centerwrapsensor.add_safetynet_details( + iteration=iteration, + safetynetname=buddygroupname, + detail_series=outlier_details, + ) + + # ---- Return outliers as MultiIndex ---- + if not outlier_timestamps.empty: + outlier_multiindex = pd.MultiIndex.from_arrays( + [[center_name] * len(outlier_timestamps), outlier_timestamps], + names=["name", "datetime"], + ) + # Return the updated stations, this is needed when runned in multiprocessing + return (outlier_multiindex, centerwrapsensor) + else: + return ( + pd.MultiIndex.from_tuples([], names=["name", "datetime"]), + centerwrapsensor, + ) + + +# ------------------------------------------ +# Statistical sample scoring +# ------------------------------------------ + + +def _compute_robust_z_scores( + buddydf: pd.DataFrame, + center_values: pd.Series, + min_mad: float, + outlier_threshold: float, +) -> pd.DataFrame: + """Compute robust z-scores (MADFM-based) for outlier detection. + + Each centre-station value is compared against the median of its + buddy values using the Median Absolute Deviation (MAD) as a + robust measure of spread. + + Parameters + ---------- + buddydf : pandas.DataFrame + Wide DataFrame containing only the buddy stations' values + (centre station excluded). Rows are timestamps. + center_values : pandas.Series + Observations of the centre station, aligned to ``buddydf``'s index. + min_mad : float + Minimum MAD value to use in the denominator, preventing division + by near-zero values. + outlier_threshold : float + Robust z-score above which a record is flagged as an outlier. + + Returns + ------- + pandas.DataFrame + DataFrame with the same index as ``buddydf`` and three columns: + + ``'z_score'`` + Computed robust z-score for each timestamp. + ``'flagged'`` + Boolean; True when ``z_score > outlier_threshold``. + ``'details'`` + Human-readable string summarising the z-score calculation. + """ + buddy_not_na_counts = buddydf.notna().sum(axis=1) + + # Calculate MADFM (Median Absolute Deviation From Median) + def MAD(x): + "MEDIAN absolute deviation from median" + return (x - x.median()).abs().median() + + mad_series = buddydf.apply(MAD, axis=1) + # Replace std below minimum with the minimum (avoid division by near-zero) + mad_series.loc[mad_series < min_mad] = np.float32(min_mad) + + # Calculate robust z-score for center station + + robust_z_scores = (center_values - buddydf.median(axis=1)).abs() / ( + 1.4826 * mad_series + ) + + details = ( + "z (robust)=" + + robust_z_scores.map("{:.2f}".format) + + ", threshold=" + + str(outlier_threshold) + + ", n=" + + buddy_not_na_counts.map(str) + + ", MAD=" + + mad_series.map("{:.2f}".format) + + ", median=" + + buddydf.median(axis=1).map("{:.2f}".format) + ) + + # Build result DataFrame + result_df = pd.DataFrame( + index=buddydf.index, + data={ + "z_score": robust_z_scores, + "flagged": robust_z_scores > outlier_threshold, + "details": details, + }, + ) + return result_df + + +def _compute_center_z_scores( + buddydf: pd.DataFrame, + center_values: pd.Series, + min_std: float, + outlier_threshold: float, +) -> pd.DataFrame: + """Compute classic z-scores for center station using buddy distribution. + + The z-score is computed as the absolute deviation of the center station's + value from the mean of the buddy stations, divided by the standard + deviation of the buddy stations. The center station's values are NOT + included in the mean/std calculation. + + Parameters + ---------- + buddydf : pd.DataFrame + DataFrame with buddy stations as columns (center station excluded). + center_values : pd.Series + Series with the center station's values to test. + min_std : float + Minimum standard deviation to use (avoids division by near-zero). + outlier_threshold : float + Z-score threshold above which a record is flagged as outlier. + + Returns + ------- + pd.DataFrame + DataFrame with columns: 'z_score', 'flagged', 'details'. + """ + # Compute mean and std from buddies only (center station excluded) + buddy_mean_series = buddydf.mean(axis=1) + buddy_std_series = buddydf.std(axis=1) + buddy_not_na_counts = buddydf.notna().sum(axis=1) + # Replace std below minimum with the minimum (avoid division by near-zero) + buddy_std_series.loc[buddy_std_series < min_std] = np.float32(min_std) + + # Calculate z-score for center station + z_scores = (center_values - buddy_mean_series).abs() / buddy_std_series + + details = ( + "z=" + + z_scores.map("{:.2f}".format) + + ", threshold=" + + str(outlier_threshold) + + ", n=" + + buddy_not_na_counts.map(str) + + ", mean=" + + buddy_mean_series.map("{:.2f}".format) + + ", std=" + + buddy_std_series.map("{:.2f}".format) + ) + + # Build result DataFrame + result_df = pd.DataFrame( + index=buddydf.index, + data={ + "z_score": z_scores, + "flagged": z_scores > outlier_threshold, + "details": details, + }, + ) + return result_df diff --git a/src/metobs_toolkit/qc_collection/spatial_checks/methods/whitesaving.py b/src/metobs_toolkit/qc_collection/spatial_checks/methods/whitesaving.py new file mode 100644 index 000000000..c88965faa --- /dev/null +++ b/src/metobs_toolkit/qc_collection/spatial_checks/methods/whitesaving.py @@ -0,0 +1,128 @@ +from __future__ import annotations + +import logging +from typing import List, TYPE_CHECKING + +import pandas as pd + + +logger = logging.getLogger("") + +if TYPE_CHECKING: + from ..buddywrapsensor import BuddyWrapSensor + from ...whitelist import WhiteSet + + +def save_whitelist_records( + outliers: pd.MultiIndex, + wrappedsensors: List[BuddyWrapSensor], + whiteset: WhiteSet, + obstype: str, + iteration: int, +) -> pd.MultiIndex: + """Apply whitelist filtering to outliers and update station details. + + This function filters outlier records against a whitelist. Records that + match the whitelist are marked as 'saved' and removed from the outlier set. + Records that don't match the whitelist remain as outliers. + + Parameters + ---------- + outliers : pd.MultiIndex + MultiIndex with levels ('name', 'datetime') containing the current + outlier records to filter. + wrappedsensors : list of BuddyWrapSensor + List of wrapped sensor objects to update with whitelist details. + whiteset : WhiteSet + A WhiteSet instance containing records that should be excluded from + outlier detection. + obstype : str + The observation type being checked. + iteration : int + The current iteration number. + + Returns + ------- + pd.MultiIndex + MultiIndex with levels ('name', 'datetime') containing only the + outliers that were NOT saved by the whitelist. + """ + if outliers.empty: + logger.debug("No outliers to filter with whitelist") + return outliers + + if whiteset._flag_is_empty(): + logger.debug("Whitelist is empty, no records saved") + return outliers + + # Track which records are not saved + # saved_records = pd.MultiIndex.from_tuples([], names=['name', 'datetime']) + remaining_outliers = pd.MultiIndex.from_tuples([], names=["name", "datetime"]) + + # Process each station's outliers + for wrapsta in wrappedsensors: + if wrapsta.name not in outliers.get_level_values("name").unique(): + continue # No outliers for this station + + else: + + # Get the outlier datetimes for this station + sta_outlier_dts = pd.DatetimeIndex( + outliers[ + outliers.get_level_values("name") == wrapsta.name + ].get_level_values("datetime"), + name="datetime", + ) + + # Create a SensorWhiteSet for this station + sensorwhiteset = whiteset.create_sensorwhitelist( + stationname=wrapsta.name, obstype=obstype + ) + + # Filter to get remaining outliers (not whitelisted) + remaining_dts = sensorwhiteset.catch_white_records( + outliers_idx=sta_outlier_dts + ) + + # Saved records are those that were filtered out + saved_dts = sta_outlier_dts.difference(remaining_dts) + + # Build MultiIndex for saved and remaining + # if len(saved_dts) > 0: + # saved_idx = pd.MultiIndex.from_arrays( + # [[wrapsta.name] * len(saved_dts), saved_dts], + # names=['name', 'datetime'] + # ) + # saved_records = saved_records.union(saved_idx) + + # Update the wrapped station with saved details + + # Create detail messages for saved records + detail_series = pd.Series( + [f"Saved by whitelist at iteration {iteration}" for _ in saved_dts], + index=saved_dts, + ) + wrapsta.update_whitelist_details( + whitelistseries=detail_series, iteration=iteration, is_saved=True + ) + + # Create detail messages for records not saved by whitelist + detail_series = pd.Series( + [ + f"Not saved by whitelist at iteration {iteration}" + for _ in remaining_dts + ], + index=remaining_dts, + ) + wrapsta.update_whitelist_details( + whitelistseries=detail_series, iteration=iteration, is_saved=False + ) + + if len(remaining_dts) > 0: + remaining_idx = pd.MultiIndex.from_arrays( + [[wrapsta.name] * len(remaining_dts), remaining_dts], + names=["name", "datetime"], + ) + remaining_outliers = remaining_outliers.union(remaining_idx) + + return remaining_outliers.sort_values() diff --git a/src/metobs_toolkit/qc_collection/whitelist.py b/src/metobs_toolkit/qc_collection/whitelist.py index f9001672b..c89d78a88 100644 --- a/src/metobs_toolkit/qc_collection/whitelist.py +++ b/src/metobs_toolkit/qc_collection/whitelist.py @@ -37,7 +37,23 @@ class SensorWhiteSet: def __init__( self, white_timestamps: Union[None, List] = None, all_timestamps: bool = False ) -> None: + """Initialize the SensorWhiteSet with whitelisted timestamps. + Parameters + ---------- + white_timestamps : list or None, optional + List of datetime objects to whitelist for this sensor. + Default is None, which is treated as an empty list. + all_timestamps : bool, optional + If True, all timestamps are considered whitelisted. Cannot be + True when ``white_timestamps`` is non-empty. Default is False. + + Raises + ------ + MetObsArgumentError + If ``all_timestamps`` is True and ``white_timestamps`` is + non-empty. + """ if white_timestamps is None: # None as a default is more convenient white_timestamps = [] @@ -217,6 +233,16 @@ class WhiteSet: _target_tz: str = Settings.get("store_tz") def __init__(self, white_records: pd.Index = pd.Index([])) -> None: + """Initialize the WhiteSet with a collection of whitelisted records. + + Parameters + ---------- + white_records : pandas.Index, optional + Index (or MultiIndex) whose names are a subset of + ``['name', 'obstype', 'datetime']``. Records matching this + index are excluded from outlier detection. Default is an + empty :class:`pandas.Index`. + """ self.white_records = white_records # Validate white_records structure diff --git a/src/metobs_toolkit/qcresult.py b/src/metobs_toolkit/qcresult.py new file mode 100644 index 000000000..d549eedba --- /dev/null +++ b/src/metobs_toolkit/qcresult.py @@ -0,0 +1,237 @@ +from __future__ import annotations +import logging +import pandas as pd + +from metobs_toolkit.backend_collection.decorators import log_entry +from metobs_toolkit.settings_collection.settings import Settings + +logger = logging.getLogger("") + + +# Basic labels +pass_cond = Settings.get( + "qc_status_labels_per_check.pass.label" +) # checked and successfull pass +flagged_cond = Settings.get( + "qc_status_labels_per_check.flagged.label" +) # checked and flagged as outlier +unmet_cond = Settings.get( + "qc_status_labels_per_check.condition_unmet.label" +) # not checked due to unmet specific conditions +saved_cond = Settings.get( + "qc_status_labels_per_check.saved_whitelist.label" +) # checked and flagged but saved due to whitelist +unchecked_cond = Settings.get( + "qc_status_labels_per_check.unchecked.label" +) # not checked (was nan/gap before check) + + +class QCresult: + """Store results of a quality control check. + + This class encapsulates the results of a single QC check including flags, + detected outliers, and detailed information about the check outcome for + all timestamps. + + Parameters + ---------- + checkname : str + Name identifying the quality control check (e.g., 'gross_value', 'persistence'). + checksettings : dict + Dictionary of parameters and settings used for this QC check. + flags : pd.Series + Series with datetime index containing QC flag strings for all timestamps: + 'passed', 'flagged', 'condition_unmet', 'saved', or 'unchecked'. + outliers : pd.Series + Series with datetime index containing outlier values. Index should be + a subset of the flags index. + detail : str, optional + Default detail string for all timestamps. Can be updated for specific + timestamps using add_details_by_series. Default is empty string. + + Attributes + ---------- + checkname : str + Name of the QC check. + checksettings : dict + Settings used for the check. + flags : pd.Series + QC flags for all timestamps. + outliers : pd.Series + Detected outlier values. + details : pd.Series + Detailed information for each timestamp. + """ + + def __init__( + self, + checkname: str, + checksettings: dict, + flags: pd.Series, # index: timestamps, values: 'passed', 'flagged', 'condition_unmet', 'saved' + # outliers: pd.Series, # index: timestamps, values: outlier values + detail: str = "", + ): + """Initialize a QCresult with flags and settings for a single QC check. + + Parameters + ---------- + checkname : str + Name identifying the quality control check. + checksettings : dict + Dictionary of parameters used for this QC check. + flags : pandas.Series + Series with :class:`pandas.DatetimeIndex` containing QC flag + strings for all timestamps. + detail : str, optional + Default detail string stored for all timestamps. Can be updated + per-timestamp via :meth:`add_details_by_series`. Default is an + empty string. + + Raises + ------ + TypeError + If the index of *flags* is not a :class:`pandas.DatetimeIndex`. + """ + self.checkname = checkname + self.checksettings = checksettings + + if not isinstance(flags.index, pd.DatetimeIndex): + raise TypeError("The index of 'flags' must be a pandas.DatetimeIndex.") + self.flags = flags + + # if not isinstance(outliers.index, pd.DatetimeIndex): + # raise TypeError("The index of 'outliers' must be a pandas.DatetimeIndex.") + # self.outliers = outliers + + # Set details (Index is Flags thus includes all timestamps!) + self.details = pd.Series([detail] * len(flags), index=flags.index) + + def __repr__(self) -> str: + """Return a string representation for debugging. + + Returns + ------- + str + String representation of the QCresult. + """ + return f"QCresult(checkname={self.checkname})" + + @log_entry + def add_details_by_series(self, detail_series: pd.Series) -> None: + """Update the details attribute with values from a detail_series. + + This method updates the details attribute (a pandas Series with datetime + index) using index-value pairs from the provided detail_series. The + detail_series index must be a subset of the details attribute index. + + Parameters + ---------- + detail_series : pd.Series + A pandas Series with datetime index containing detail values to + update. The index should be a subset of the details attribute index. + + Raises + ------ + TypeError + If detail_series is not a pandas Series or if its index is not a + pandas DatetimeIndex. + """ + + # Update details using the index-value pairs from detail_series + self.details.update(detail_series) + + def get_outlier_timestamps(self) -> pd.DatetimeIndex: + """Return the timestamps of the outliers.""" + + return self.flags[self.flags == flagged_cond].index + # return self.outliers.index + + def remap_timestamps(self, mapping: dict) -> None: + """Remap the timestamps of flags, outliers, and details using a mapping dictionary. + + Timestamps not present in the mapping keys are removed from both + ``flags`` and ``details``, since they no longer exist in the target + time grid. + + Parameters + ---------- + mapping : dict + A dictionary where keys are original timestamps and values are the + new timestamps to map to. + """ + # Keep only timestamps that appear in the mapping + mapped_mask = self.flags.index.isin(mapping.keys()) + self.flags = self.flags[mapped_mask] + self.details = self.details[mapped_mask] + + # Remap the remaining timestamps + self.flags.index = self.flags.index.map(lambda ts: mapping[ts]) + self.details.index = self.details.index.map(lambda ts: mapping[ts]) + + def _flags_to_basic_labels(self) -> dict: + """Create mapping from QC flag values to display labels. + + Constructs a dictionary mapping internal flag values ('passed', 'flagged', etc.) + to user-facing label strings defined in Settings. Flagged records use the + check-specific label, while all other statuses use the 'goodrecord' label. + + Returns + ------- + dict + Mapping from flag strings to label strings. + """ + label_mapping = { + pass_cond: Settings.get("label_def.goodrecord.label"), + flagged_cond: Settings.get(f"label_def.{self.checkname}.label"), + unmet_cond: Settings.get("label_def.goodrecord.label"), + saved_cond: Settings.get("label_def.goodrecord.label"), + unchecked_cond: Settings.get("label_def.goodrecord.label"), + } + return label_mapping + + def create_outliersdf( + self, map_to_basic_labels=True, subset_to_outliers=True + ) -> pd.DataFrame: + """Create a DataFrame summarizing detected outliers. + + Constructs a DataFrame containing outlier values, their corresponding labels, + and detailed information for each outlier timestamp. This format is compatible + with the Dataset.outliersdf property. + + Returns + ------- + pd.DataFrame + DataFrame with datetime index and columns: + - 'value': outlier values + - 'label': human-readable QC check labels + - 'details': descriptive information about each outlier + Returns empty DataFrame with correct structure if no outliers exist. + """ + outl_timestamps = self.get_outlier_timestamps() + + if subset_to_outliers: + if outl_timestamps.empty: + # return empty dataframe + return pd.DataFrame( + columns=["label", "details"], + index=pd.DatetimeIndex([], name="datetime"), + ) + targets = self.flags.loc[outl_timestamps] + else: + targets = self.flags + + if map_to_basic_labels: + labels = targets.map(self._flags_to_basic_labels()) + else: + labels = targets + + outliers_df = pd.DataFrame( + { + "datetime": targets.index, + # 'value': self.outliers.values, + "label": labels.values, + "details": self.details.loc[targets.index].values, + } + ) + outliers_df.set_index("datetime", inplace=True) + return outliers_df diff --git a/src/metobs_toolkit/sensordata.py b/src/metobs_toolkit/sensordata.py index 0718f57e7..ed24542a9 100644 --- a/src/metobs_toolkit/sensordata.py +++ b/src/metobs_toolkit/sensordata.py @@ -22,6 +22,9 @@ from metobs_toolkit.gf_collection.overview_df_constructors import ( sensordata_gap_status_overview_df, ) +from metobs_toolkit.qc_collection.overview_df_constructor import ( + sensordata_qc_overview_df, +) from metobs_toolkit.settings_collection import Settings from metobs_toolkit.xrconversions import sensordata_to_xr from metobs_toolkit.timestampmatcher import TimestampMatcher @@ -33,6 +36,14 @@ MetObsAdditionError, MetObsInternalError, ) +from metobs_toolkit.qcresult import ( + QCresult, + pass_cond, + flagged_cond, + unmet_cond, + saved_cond, + unchecked_cond, +) from metobs_toolkit.plot_collection import sensordata_simple_pd_plot import metobs_toolkit.backend_collection.printing_collection as printing @@ -92,8 +103,28 @@ def __init__( timestamps_tz: Union[tzfile | tzinfo | str] = "UTC", **setupkwargs, ): + """Initialize SensorData for a single station and observation type. - # Set data + Parameters + ---------- + stationname : str + Name of the station this sensor belongs to. + datarecords : numpy.ndarray + Raw observation values. Will be stored after unit conversion + during setup. + timestamps : numpy.ndarray + Timestamps corresponding to *datarecords*. + obstype : Obstype + Observation type describing the measured variable and its units. + datadtype : type, optional + Numeric dtype for the stored series. Default is + :data:`numpy.float32`. + timestamps_tz : str or tzinfo, optional + Timezone of the provided *timestamps*. Default is ``'UTC'``. + **setupkwargs + Additional keyword arguments forwarded to :meth:`_setup` (e.g. + ``freq_estimation_method``, ``timestamp_tolerance``). + """ self._stationname = stationname self.obstype = obstype data = pd.Series( @@ -108,7 +139,10 @@ def __init__( self.series = data # datetime as index # outliers - self.outliers = [] # List of {'checkname': ..., 'df': ....., 'settings': } + self.outliers = [] # List of QCresult + self.outliers_values_bin = pd.Series( + dtype=datadtype + ) # Series of outlier values # gaps self.gaps = [] # list of Gap's @@ -143,6 +177,7 @@ def __str__(self) -> str: """Return a string representation of the SensorData object.""" return f"{self.obstype.name} data of station {self.stationname}." + # TODO: update this method to handle QCresult outliers + outliers_values_bin def __add__(self, other: "SensorData") -> "SensorData": """ Combine two SensorData objects for the same station and obstype. @@ -245,39 +280,19 @@ def df(self) -> pd.DataFrame: def to_xr(self) -> xrDataset: return sensordata_to_xr(self, fmt_datetime_coordinate=True) + # TODO: update this method to handle QCresult outliers @property def outliersdf(self) -> pd.DataFrame: """Return a DataFrame of the outlier records.""" logger.debug("Creating outliers DataFrame for %s", self.stationname) to_concat = [] - for outlierinfo in self.outliers: - checkname = outlierinfo["checkname"] - checkdf = outlierinfo["df"].copy() - checkdf["label"] = Settings.get(f"label_def.{checkname}.label") - - # Create details column from all columns except 'value' and 'label' - detail_cols = [ - col for col in checkdf.columns if col not in ["value", "label"] - ] - if detail_cols: - # Build details string for each row - details_list = [] - for _, row in checkdf.iterrows(): - parts = [ - f"{col}: {row[col]}" - for col in detail_cols - if pd.notna(row[col]) - ] - details_list.append(", ".join(parts)) - checkdf["details"] = details_list - # Drop the original detail columns - checkdf = checkdf.drop(columns=detail_cols) - else: - checkdf["details"] = "" - + for qcresult in self.outliers: + checkdf = qcresult.create_outliersdf(subset_to_outliers=True) to_concat.append(checkdf) totaldf = save_concat(to_concat) + # add the values column (values not stored in qcresult, only labels and details) + totaldf["value"] = self.outliers_values_bin.loc[totaldf.index] if totaldf.empty: # return empty dataframe @@ -285,11 +300,10 @@ def outliersdf(self) -> pd.DataFrame: columns=["value", "label", "details"], index=pd.DatetimeIndex([], name="datetime"), ) - else: - totaldf.sort_index(inplace=True) - logger.debug("Outliers DataFrame created successfully for %s", self.stationname) - return totaldf + totaldf.sort_index(inplace=True) + + return totaldf[["value", "label", "details"]] # fixed column order @property def gapsdf(self) -> pd.DataFrame: @@ -309,6 +323,10 @@ def gapsdf(self) -> pd.DataFrame: def gap_overview_df(self) -> pd.DataFrame: return sensordata_gap_status_overview_df(self) + @copy_doc(sensordata_qc_overview_df) + def qc_overview_df(self) -> pd.DataFrame: + return sensordata_qc_overview_df(self) + @property def stationname(self) -> str: """Return the name of the station this SensorData belongs to.""" @@ -401,10 +419,16 @@ def _setup( self.duplicated_timestamp_check() if apply_invalid_check: - # invalid check - self.invalid_value_check( - skip_records=self.outliers[0]["df"].index - ) # skip the records already labeled as duplicates + # get the records that are flagged by the + if self.outliers and self.outliers[0].checkname == "duplicated_timestamp": + dup_outl_ti = self.outliers[0].get_outlier_timestamps() + else: + dup_outl_ti = pd.DatetimeIndex([]) + # invalid check (no qcresult, these timestamps are removed, and catched by gapcheck) + valid_records = qc.drop_invalid_values( + records=self.series, skip_records=dup_outl_ti + ) + self.series = valid_records if apply_unit_conv: # convert units to standard units @@ -426,16 +450,18 @@ def _setup( self.series = timestamp_matcher.target_records # update the outliers (replace the raw timestamps with the new) - outl_datetime_map = timestamp_matcher.get_outlier_map() - for outlinfo in self.outliers: - outlinfo["df"]["new_datetime"] = outlinfo["df"].index.map(outl_datetime_map) - outlinfo["df"] = ( - outlinfo["df"] - .reset_index() - .rename( - columns={"datetime": "raw_timestamp", "new_datetime": "datetime"} - ) - .set_index("datetime") + raw_datetime_map = timestamp_matcher.get_raw_map() + for qcresult in self.outliers: + qcresult.remap_timestamps(mapping=raw_datetime_map) + + # remap the outliers_values_bin timestamps to match the new equispaced timestamps + if not self.outliers_values_bin.empty: + # Drop outlier values whose timestamps are not in the new time grid + self.outliers_values_bin = self.outliers_values_bin[ + self.outliers_values_bin.index.isin(raw_datetime_map.keys()) + ] + self.outliers_values_bin.index = self.outliers_values_bin.index.map( + lambda ts: raw_datetime_map[ts] ) # create gaps @@ -454,58 +480,55 @@ def _setup( def _update_outliers( self, - qccheckname: str, - outliertimestamps: pd.DatetimeIndex, - check_kwargs: dict, - extra_columns: dict = {}, - overwrite: bool = False, + qcresult: QCresult, ) -> None: - """ - Update the outliers attribute. + """Record a QCresult and mask the detected outlier timestamps as NaN. + + If a QCresult with the same ``checkname`` already exists, the new + results are merged into the existing one so that repeated application + of the same check does not create duplicate entries. Specifically: + + * Flags in the existing result are updated for timestamps where the + new result detected an outlier (``flagged``) that was previously + ``passed`` or ``unchecked``. + * Details are updated for newly flagged timestamps. + * Only genuinely new outlier timestamps (not already present in + :attr:`outliers_values_bin`) are added. Parameters ---------- - qccheckname : str - Name of the quality control check. - outliertimestamps : pd.DatetimeIndex - Datetime index of the outliers. - check_kwargs : dict - Additional arguments for the check. - extra_columns : dict, optional - Extra columns to add to the outliers DataFrame, by default {}. - overwrite : bool, optional - Whether to overwrite existing outliers, by default False. - - Raises - ------ - MetobsQualityControlError - If the check is already applied and overwrite is False. + qcresult : QCresult + Result object from a QC check containing flags and metadata. """ - logger.debug( - "Entering _update_outliers for %s with check %s", self, qccheckname - ) - - for applied_qc_info in self.outliers: - if qccheckname == applied_qc_info.keys(): - if overwrite: - self.outliers.remove(applied_qc_info) - else: - raise MetObsQualityControlError( - f"The {qccheckname} is already applied on {self}. Fix error or set overwrite=True" - ) - - outlier_values = self.series.loc[outliertimestamps] - outlier_values = outlier_values[~outlier_values.index.duplicated(keep="first")] - - datadict = {"value": outlier_values.to_numpy()} - datadict.update(extra_columns) - df = pd.DataFrame(data=datadict, index=outlier_values.index) + new_outlier_ts = qcresult.get_outlier_timestamps() + + # Check if a QCresult with the same checkname already exists + existing = None + for qc in self.outliers: + if qc.checkname == qcresult.checkname: + existing = qc + break + + if existing is not None: + # Merge: update the existing QCresult with newly flagged timestamps + newly_flagged = new_outlier_ts.difference(existing.get_outlier_timestamps()) + if not newly_flagged.empty: + existing.flags.loc[newly_flagged] = qcresult.flags.loc[newly_flagged] + existing.details.loc[newly_flagged] = qcresult.details.loc[ + newly_flagged + ] + else: + self.outliers.append(qcresult) - self.outliers.append( - {"checkname": qccheckname, "df": df, "settings": check_kwargs} - ) + # Only add values for outlier timestamps not already in the bin + truly_new_ts = new_outlier_ts.difference(self.outliers_values_bin.index) + if not truly_new_ts.empty: + self.outliers_values_bin = save_concat( + [self.outliers_values_bin, self.series.loc[truly_new_ts]] + ) - self.series.loc[outliertimestamps] = np.nan + # Convert the outlier timestamps to NaN in the series + self.series.loc[new_outlier_ts] = np.nan def _find_gaps(self, missingrecords: pd.Series, target_freq: pd.Timedelta) -> list: """ @@ -553,6 +576,7 @@ def _rename(self, trgname: str) -> None: gap.name = str(trgname) @log_entry + # TODO: update this method to handle QCresult outliers def convert_outliers_to_gaps(self) -> None: """ Convert all outliers to gaps. @@ -644,21 +668,21 @@ def resample( self.series = timestampmatcher.target_records # update the outliers (replace the raw timestamps with the new) - outl_datetime_map = timestampmatcher.get_outlier_map() + raw_datetime_map = ( + timestampmatcher.get_raw_map() + ) # mapping from original timestamps to new timestamps for outlinfo in self.outliers: - # add mapped timestamps - outlinfo["df"]["new_datetime"] = outlinfo["df"].index.map(outl_datetime_map) - # reformat the dataframe - outlinfo["df"] = ( - outlinfo["df"] - .reset_index() - .rename( - columns={"datetime": "raw_timestamp", "new_datetime": "datetime"} - ) - .set_index("datetime") + outlinfo.remap_timestamps(mapping=raw_datetime_map) + + # remap the outliers_values_bin timestamps to match the new equispaced timestamps + if not self.outliers_values_bin.empty: + # Drop outlier values whose timestamps are not in the new time grid + self.outliers_values_bin = self.outliers_values_bin[ + self.outliers_values_bin.index.isin(raw_datetime_map.keys()) + ] + self.outliers_values_bin.index = self.outliers_values_bin.index.map( + lambda ts: raw_datetime_map[ts] ) - # Drop references to NaT datetimes (when qc is applied before resampling) - outlinfo["df"] = outlinfo["df"].loc[outlinfo["df"].index.notnull()] # create gaps orig_gapsdf = self.gapsdf @@ -717,6 +741,19 @@ def get_info(self, printout: bool = True) -> Union[str, None]: return infostr def _get_info_core(self, nident_root=1) -> str: + """Build a formatted info string with core sensor-data attributes. + + Parameters + ---------- + nident_root : int, optional + Base indentation level for printed lines. Default is 1. + + Returns + ------- + str + Formatted string listing observation type, time range, resolution, + and outlier/gap counts. + """ infostr = "" infostr += printing.print_fmt_line( f"{self.obstype.name} observations in {self.obstype.std_unit}", nident_root @@ -784,50 +821,6 @@ def pd_plot(self, show_labels: list = ["ok"], **pdplotkwargs) -> Axes: # Quality Control (technical qc + value-based qc) # ------------------------------------------ - @log_entry - def invalid_value_check(self, skip_records: pd.DatetimeIndex) -> None: - """ - Check for invalid values in the series. - - Invalid values are those that could not be cast to numeric. - - Parameters - ---------- - skip_records : pd.DatetimeIndex - Records to skip during the check. - - Raises - ------ - MetobsQualityControlError - If the check is already applied. - """ - - skipped_data = self.series.loc[skip_records] - targets = self.series.drop(skip_records) - - # Option 1: Create a outlier label for these invalid inputs, - # and treath them as outliers - # outlier_timestamps = targets[~targets.notnull()] - - # self._update_outliers( - # qccheckname="invalid_input", - # outliertimestamps=outlier_timestamps.index, - # check_kwargs={}, - # extra_columns={}, - # overwrite=False, - # ) - - # Option 2: Since there is not numeric value present, these timestamps are - # interpreted as gaps --> remove the timestamp, so that it is captured by the - # gap finder. - - # Note: do not treat the first/last timestamps differently. That is - # a philosiphycal choice. - - self.series = targets[targets.notnull()] # subset to numerical casted values - # add the skipped records back - self.series = pd.concat([self.series, skipped_data]).sort_index() - @log_entry def duplicated_timestamp_check(self) -> None: """ @@ -838,23 +831,18 @@ def duplicated_timestamp_check(self) -> None: MetobsQualityControlError If the check is already applied. """ + qcresult = qc.duplicated_timestamp_check(records=self.series) - duplicates = pd.Series( - data=self.series.index.duplicated(keep=False), index=self.series.index - ) - duplicates = duplicates.loc[duplicates] - duplicates = duplicates[duplicates.index.duplicated(keep="first")] - - self._update_outliers( - qccheckname="duplicated_timestamp", - outliertimestamps=duplicates.index, - check_kwargs={}, - extra_columns={}, - overwrite=False, - ) - + # Drop duplicates from the series, keep only the first occurrence. + # After this, self.series has a unique index so _update_outliers can + # safely store values and set them to NaN. self.series = self.series[~self.series.index.duplicated(keep="first")] + # Store QCresult and move flagged values to outliers_values_bin. + # The timestamps are still raw (not yet remapped to perfect spacing); + # they will be remapped later in _setup via qcresult.remap_timestamps. + self._update_outliers(qcresult=qcresult) + @log_entry def gross_value_check(self, **qckwargs) -> None: """ @@ -866,14 +854,8 @@ def gross_value_check(self, **qckwargs) -> None: Additional keyword arguments for the check. """ - outlier_timestamps = qc.gross_value_check(records=self.series, **qckwargs) - self._update_outliers( - qccheckname="gross_value", - outliertimestamps=outlier_timestamps, - check_kwargs={**qckwargs}, - extra_columns={}, - overwrite=False, - ) + qcresult = qc.gross_value_check(records=self.series, **qckwargs) + self._update_outliers(qcresult=qcresult) @log_entry def persistence_check(self, **qckwargs) -> None: @@ -886,15 +868,8 @@ def persistence_check(self, **qckwargs) -> None: Additional keyword arguments for the check. """ - outlier_timestamps = qc.persistence_check(records=self.series, **qckwargs) - - self._update_outliers( - qccheckname="persistence", - outliertimestamps=outlier_timestamps, - check_kwargs={**qckwargs}, - extra_columns={}, - overwrite=False, - ) + qcresult = qc.persistence_check(records=self.series, **qckwargs) + self._update_outliers(qcresult=qcresult) @log_entry def repetitions_check(self, **qckwargs) -> None: @@ -907,15 +882,8 @@ def repetitions_check(self, **qckwargs) -> None: Additional keyword arguments for the check. """ - outlier_timestamps = qc.repetitions_check(records=self.series, **qckwargs) - - self._update_outliers( - qccheckname="repetitions", - outliertimestamps=outlier_timestamps, - check_kwargs={**qckwargs}, - extra_columns={}, - overwrite=False, - ) + qcresult = qc.repetitions_check(records=self.series, **qckwargs) + self._update_outliers(qcresult=qcresult) @log_entry def step_check(self, **qckwargs) -> None: @@ -928,15 +896,8 @@ def step_check(self, **qckwargs) -> None: Additional keyword arguments for the check. """ - outlier_timestamps = qc.step_check(records=self.series, **qckwargs) - - self._update_outliers( - qccheckname="step", - outliertimestamps=outlier_timestamps, - check_kwargs={**qckwargs}, - extra_columns={}, - overwrite=False, - ) + qcresult = qc.step_check(records=self.series, **qckwargs) + self._update_outliers(qcresult=qcresult) @log_entry def window_variation_check(self, **qckwargs) -> None: @@ -949,15 +910,8 @@ def window_variation_check(self, **qckwargs) -> None: Additional keyword arguments for the check. """ - outlier_timestamps = qc.window_variation_check(records=self.series, **qckwargs) - - self._update_outliers( - qccheckname="window_variation", - outliertimestamps=outlier_timestamps, - check_kwargs={**qckwargs}, - extra_columns={}, - overwrite=False, - ) + qcresult = qc.window_variation_check(records=self.series, **qckwargs) + self._update_outliers(qcresult=qcresult) @log_entry def get_qc_freq_statistics(self) -> pd.DataFrame: @@ -984,42 +938,26 @@ def get_qc_freq_statistics(self) -> pd.DataFrame: """ - infodict = {} # checkname : details - ntotal = self.series.shape[0] # gaps included !! - already_rejected = self.gapsdf.shape[0] # initial gap records - # add the 'ok' labels - infodict[Settings.get("label_def.goodrecord.label")] = { - "N_all": ntotal, - "N_labeled": self.series[self.series.notnull()].shape[0], - } - # add the 'gap' labels - # TODO: I think the filled and failed labels must be included as well - infodict[Settings.get("label_def.regular_gap.label")] = { - "N_all": ntotal, - "N_labeled": already_rejected, + empty_flags = { + flagged_cond: 0, + pass_cond: 0, + unmet_cond: 0, + saved_cond: 0, + unchecked_cond: 0, } - # add the qc check labels - for check in self.outliers: - n_outliers = check["df"].shape[0] - n_checked = ntotal - already_rejected - outlierlabel = Settings.get(f"label_def.{check['checkname']}.label") - infodict[outlierlabel] = { - "N_labeled": n_outliers, - "N_checked": n_checked, - "N_all": ntotal, - } + qcdict = {} + for qcres in self.outliers: + qcdict[qcres.checkname] = empty_flags | qcres.flags.value_counts().to_dict() - # remove the outliers of the previous check - already_rejected = already_rejected + n_outliers + # Convert to a pandas series with multiindex ['checkname', 'flag'] and the name is 'counts' - # Convert to a dataframe - checkdf = pd.DataFrame(infodict).transpose() - checkdf.index.name = "qc_check" - checkdf["name"] = self.stationname - checkdf = checkdf.reset_index().set_index(["name", "qc_check"]) - - return checkdf + qcdf = pd.DataFrame.from_dict(qcdict, orient="index") + qcdf.index.name = "checkname" + qcseries = qcdf.stack(future_stack=True) + qcseries.index = qcseries.index.set_names("flag", level=-1) + qcseries.name = "counts" + return qcseries # ------------------------------------------ # Gaps related @@ -1159,6 +1097,24 @@ def _format_timestamp_index( timestamps: np.ndarray, input_tz: Union[tzfile | tzinfo | str], ) -> pd.DatetimeIndex: + """Convert a raw timestamp array to a timezone-aware :class:`pandas.DatetimeIndex`. + + Localises *timestamps* to *input_tz* and then converts to the internal + storage timezone (``SensorData._target_tz``, default ``UTC``). + + Parameters + ---------- + timestamps : numpy.ndarray + Array of timestamp values (any format accepted by + :func:`timestamps_to_datetimeindex`). + input_tz : str or tzinfo + Timezone of the input *timestamps*. + + Returns + ------- + pandas.DatetimeIndex + Timezone-aware DatetimeIndex in the internal storage timezone. + """ # Localize the timestamps with the input timezone (to timezone aware) dt_index = timestamps_to_datetimeindex( diff --git a/src/metobs_toolkit/settings_collection/label_defenitions.py b/src/metobs_toolkit/settings_collection/label_defenitions.py index 8b2d0607f..da006feda 100644 --- a/src/metobs_toolkit/settings_collection/label_defenitions.py +++ b/src/metobs_toolkit/settings_collection/label_defenitions.py @@ -193,3 +193,16 @@ "buddy_check", "buddy_check_with_safetynets", ] + + +# ============================================================================ +# labels per QC check +# ============================================================================ + +per_check_possible_labels = { + "pass": {"label": "passed", "plotkwargs": {"color": "#00a824"}}, + "flagged": {"label": "flagged", "plotkwargs": {"color": "#f0051c"}}, + "condition_unmet": {"label": "condition_unmet", "plotkwargs": {"color": "#808080"}}, + "saved_whitelist": {"label": "saved", "plotkwargs": {"color": "#0000ff"}}, + "unchecked": {"label": "unchecked", "plotkwargs": {"color": "#f7cf07"}}, +} diff --git a/src/metobs_toolkit/settings_collection/plotting_defaults.py b/src/metobs_toolkit/settings_collection/plotting_defaults.py index ba0e7aa4c..fc806ac89 100644 --- a/src/metobs_toolkit/settings_collection/plotting_defaults.py +++ b/src/metobs_toolkit/settings_collection/plotting_defaults.py @@ -39,8 +39,11 @@ # "anchor_legend_small": (-3.5, 2.2), "radius_big": 1.0, "radius_small": 0.7, - "txt_size_big_pies": 7, - "txt_size_small_pies": 5, + "txt_label_size_big_pies": 7, + "txt_label_size_small_pies": 5, + "fig_title_kwargs": {"fontsize": 16}, + "big_pie_title_kwargs": {"fontsize": 14}, + "small_pie_title_kwargs": {"fontsize": 10}, } # ============================================================================= diff --git a/src/metobs_toolkit/settings_collection/settings.py b/src/metobs_toolkit/settings_collection/settings.py index 06bb67767..fccfc030a 100644 --- a/src/metobs_toolkit/settings_collection/settings.py +++ b/src/metobs_toolkit/settings_collection/settings.py @@ -14,6 +14,7 @@ import logging from typing import Dict, Any, Optional, Union from copy import deepcopy +import os # import settings modules @@ -26,7 +27,9 @@ scatter, line, vline, + per_check_possible_labels, ) + from metobs_toolkit.settings_collection.plotting_defaults import default_plot_settings logger = logging.getLogger("") @@ -36,6 +39,7 @@ class MetObsSettingsError(Exception): """Raised when an error occurs in the MetObsSettings.""" def __init__(self, *args, **kwargs) -> None: + """Initialize the exception with optional message arguments.""" super().__init__(*args, **kwargs) @@ -66,6 +70,12 @@ class Settings: _instance: Optional["Settings"] = None _initialized: bool = False + cpu_count = os.cpu_count() or 1 + if cpu_count < 2: + cpu_count = 1 # Default to 1 if only one core is available + else: + cpu_count -= 1 # keep one core free for other processes + # Default configuration values _defaults: Dict[str, Any] = { "version": __version__, @@ -74,6 +84,7 @@ class Settings: "gapfill_label_group": gapfill_label_group, "failed_gapfill_label_group": failed_gapfill_label_group, "qc_label_group": qc_label_group, + "qc_status_labels_per_check": per_check_possible_labels, # Logging defaults "log_level": "WARNING", "log_format": "LOG:: %(levelname)s - %(message)s", @@ -87,6 +98,8 @@ class Settings: }, # Plotting defaults "plotting_settings": default_plot_settings, + # Technical settings + "use_N_cores_for_MP": cpu_count, } _config: Dict[str, Any] = {} @@ -301,6 +314,19 @@ def _format_nested_dict(d: dict, indent_level: int = 1) -> str: # ------------------------------------------ @classmethod def _get_color_from_label(cls, label) -> str: + """Return the hex color string associated with a QC/gap label. + + Parameters + ---------- + label : str + A label string (e.g. ``'ok'``, ``'gross_value'``) as defined in + ``label_def``. + + Returns + ------- + str + Hex color code, or an empty string if ``label`` is not found. + """ cls() return { group["label"]: group["plotkwargs"]["color"] @@ -309,11 +335,30 @@ def _get_color_from_label(cls, label) -> str: @classmethod def _label_to_qccheckmap(cls) -> Dict[str, str]: + """Return a mapping from label string to its QC check key. + + Returns + ------- + dict + Dictionary ``{label: checkkey}`` built from ``label_def``. + """ cls() return {val["label"]: key for key, val in cls.get("label_def").items()} @classmethod def _flag_plot_as_scatter(cls, label: str) -> bool: + """Return True if the given label should be plotted as scatter points. + + Parameters + ---------- + label : str + A label string as defined in ``label_def``. + + Returns + ------- + bool + True if ``plot_as`` for this label is ``scatter``. + """ cls() labelmap = cls._label_to_qccheckmap() plot_as = cls.get(f"label_def.{labelmap[label]}.plot_as", None) @@ -324,6 +369,18 @@ def _flag_plot_as_scatter(cls, label: str) -> bool: @classmethod def _flag_plot_as_line(cls, label: str) -> bool: + """Return True if the given label should be plotted as a line. + + Parameters + ---------- + label : str + A label string as defined in ``label_def``. + + Returns + ------- + bool + True if ``plot_as`` for this label is ``line``. + """ cls() labelmap = cls._label_to_qccheckmap() plot_as = cls.get(f"label_def.{labelmap[label]}.plot_as", None) @@ -334,6 +391,18 @@ def _flag_plot_as_line(cls, label: str) -> bool: @classmethod def _flag_plot_as_vline(cls, label: str) -> bool: + """Return True if the given label should be plotted as vertical lines. + + Parameters + ---------- + label : str + A label string as defined in ``label_def``. + + Returns + ------- + bool + True if ``plot_as`` for this label is ``vline``. + """ cls() labelmap = cls._label_to_qccheckmap() plot_as = cls.get(f"label_def.{labelmap[label]}.plot_as", None) @@ -347,6 +416,13 @@ def _flag_plot_as_vline(cls, label: str) -> bool: # ------------------------------------------ @classmethod def _label_to_numericmap(cls) -> Dict[str, int]: + """Return a mapping from label string to its numeric integer code. + + Returns + ------- + dict + Dictionary ``{label: numeric_val}`` built from ``label_def``. + """ cls() return { val["label"]: int(val["numeric_val"]) diff --git a/src/metobs_toolkit/settings_collection/version.py b/src/metobs_toolkit/settings_collection/version.py index 976498ab9..b8d9ea00c 100644 --- a/src/metobs_toolkit/settings_collection/version.py +++ b/src/metobs_toolkit/settings_collection/version.py @@ -1 +1 @@ -__version__ = "1.0.3" +__version__ = "1.1.0a1" diff --git a/src/metobs_toolkit/site.py b/src/metobs_toolkit/site.py index 7f6439cd4..ff8d55d03 100644 --- a/src/metobs_toolkit/site.py +++ b/src/metobs_toolkit/site.py @@ -43,6 +43,20 @@ def __init__( longitude: float, extradata: dict | None = None, ): + """Initialize a Site with name, coordinates, and optional extra metadata. + + Parameters + ---------- + stationname : str + Name of the station this site belongs to. + latitude : float + Latitude of the station in decimal degrees. + longitude : float + Longitude of the station in decimal degrees. + extradata : dict, optional + Additional metadata for the site (e.g. ``{'altitude': 10.5, + 'LCZ': 'LCZ-4'}``). Default is ``None`` (treated as empty dict). + """ # Set data self._stationname = stationname self._lat = float(latitude) @@ -67,7 +81,12 @@ def __init__( self.setup() def setup(self): - # transfer altitude to attr + """Transfer commonly used attributes from extradata into dedicated properties. + + Reads ``'altitude'`` and ``'LCZ'`` keys from :attr:`extradata` and + assigns them to :attr:`_altitude` and :attr:`_LCZ` respectively. If a + key is not present the attribute is set to ``numpy.nan``. + """ if "altitude" in self.extradata.keys(): logger.debug( f'Setting altitude({float(self.extradata["altitude"])}) attribute for site {self.stationname} from extradata' @@ -123,6 +142,28 @@ def __eq__(self, other): ) def __add__(self, other: "Site") -> "Site": + """Merge two Site objects that represent the same physical location. + + The two sites must share the same station name, latitude and longitude. + Metadata from *other* (extradata, GEE data) is merged using a + dict-update strategy (values in *other* take precedence). Altitude and + LCZ are kept from whichever site has a non-NaN value. + + Parameters + ---------- + other : Site + The other Site instance to merge with. + + Returns + ------- + Site + A new Site containing the merged metadata. + + Raises + ------ + MetObsAdditionError + If the station names or coordinates differ between the two sites. + """ # We assume an outside merge on the same name, and same coordinates # lat, lon and name must be the same! diff --git a/src/metobs_toolkit/station.py b/src/metobs_toolkit/station.py index f3feb61d6..e2cdfb31b 100644 --- a/src/metobs_toolkit/station.py +++ b/src/metobs_toolkit/station.py @@ -36,6 +36,9 @@ from metobs_toolkit.gf_collection.overview_df_constructors import ( station_gap_status_overview_df, ) +from metobs_toolkit.qc_collection.overview_df_constructor import ( + station_qc_overview_df, +) from metobs_toolkit.backend_collection.filter_modeldatadf import filter_modeldatadf from metobs_toolkit.geedatasetmanagers import default_datasets as default_gee_datasets from metobs_toolkit.sensordata import SensorData @@ -46,7 +49,7 @@ from metobs_toolkit.io_collection.filewriters import fmt_output_filepath if TYPE_CHECKING: - from matplotlib.pyplot import Axes + from matplotlib.pyplot import Axes, Figure from os import PathLike from xarray import Dataset as xrDataset from metobs_toolkit.sensordata import SensorData @@ -70,7 +73,17 @@ class Station: """ def __init__(self, stationname: str, site: Site, all_sensor_data: list): - # dimension attributes + """Initialize a Station with its name, site metadata and sensor data. + + Parameters + ---------- + stationname : str + Unique name of the station. + site : Site + :class:`Site` instance carrying spatial metadata for this station. + all_sensor_data : list of SensorData + List of :class:`SensorData` instances (one per observed variable). + """ self._name = str(stationname) self._site = site self.obsdata = { @@ -895,8 +908,22 @@ def convert_outliers_to_gaps( self.get_sensor(obstype).convert_outliers_to_gaps() def _rename(self, targetname): - # Note: Not for users, one could accidentally rename to another station in the dataset. - # So --> only accessible as method in the dataset, that checks this possible error. + """Rename the station across all sub-objects. + + Updates the station name, the associated :class:`Site`, and every + :class:`SensorData` instance belonging to this station. + + Parameters + ---------- + targetname : str + The new station name. + + Notes + ----- + This method is intentionally not part of the public API. Use the + Dataset-level ``rename_stations()`` method instead, which validates + name uniqueness before calling this helper. + """ # rename all self._name = str(targetname) @@ -1384,7 +1411,6 @@ def persistence_check( Notes ----- - * This method modifies the outliers in place and does not return anything. You can use the `outliersdf` property to view all flagged outliers. * If the minimum number of records per window is locally not met, the function logs a warning and skips @@ -1394,7 +1420,7 @@ def persistence_check( The persistence check uses thresholds that are meteorologically based (i.e. the moving window is defined by a duration), in contrast to the repetitions check whose thresholds are instrumentally based (i.e. the "window" is defined by a number of records.) - Warnings + Warning ------- If the minimum number of records per window is not met over the full time series, a warning is logged, and the function returns an empty DatetimeIndex. @@ -1449,14 +1475,13 @@ def repetitions_check( Notes ----- - * This method modifies the outliers in place and does not return anything. You can use the `outliersdf` property to view all flagged outliers. * The repetitions check is similar to the persistence check, but not identical. The persistence check uses thresholds that are meteorologically based (i.e. the moving window is defined by a duration), in contrast to the repetitions check whose thresholds are instrumentally based (i.e. the "window" is defined by a number of records.) - Warnings + Warning ------- If the minimum number of records per window is not met over the full time series, a warning is logged, and the function returns an empty DatetimeIndex. @@ -1513,7 +1538,6 @@ def step_check( Notes ----- - * This method modifies the outliers in place and does not return anything. You can use the `outliersdf` property to view all flagged outliers. * In general, for temperatures, the decrease threshold is set less stringent than the increase @@ -1583,14 +1607,13 @@ def window_variation_check( Notes ----- - * This method modifies the outliers in place and does not return anything. You can use the `outliersdf` property to view all flagged outliers. * In general, for temperatures, the decrease threshold is set less stringent than the increase threshold. This is because a temperature drop is meteorologically more common than a sudden increase which is often the result of a radiation error. * A suitable value for the min_records_per_window depends on the time resolution of the records and the window size. - * This check is similar to the step check, but not identical. The step check a maximum allowed increase/decrease + * This check is similar to the step check, but not identical. The step check tests a maximum allowed increase/decrease with respect to the previous value. The window variation check uses a moving window to test the maximum allowed variation. """ @@ -1612,59 +1635,64 @@ def window_variation_check( # apply check on the sensordata self.get_sensor(obstype).window_variation_check(**qc_kwargs) + @copy_doc(station_qc_overview_df) + @log_entry + def qc_overview_df( + self, subset_obstypes: Union[list[str], None] = None + ) -> pd.DataFrame: + return station_qc_overview_df(self, subset_obstypes=subset_obstypes) + @log_entry def get_qc_stats( self, obstype: str = "temp", make_plot: bool = True - ) -> pd.DataFrame: + ) -> Union[dict[str, pd.Series], Figure]: """ - Generate quality control (QC) frequency statistics. - - This method calculates the frequency statistics for various QC checks - applied, and other labels. The order of checks is taken into - account. + Summarize QC label frequencies for one station and optionally plot pies. - Frequency of labels is computed based on the set of all labels (for all - records including gaps). The effectiveness of a check is shown by - the frequency of outliers with respect to the number of records that were given - to the check (thus taking into account the order of checks). - - The frequencies are returned in a dataframe, and can be plotted - as pie charts. + The method gathers: + * final label counts across all records (including gaps) from ``SensorData.df``; + * outlier-only label counts from ``SensorData.outliersdf``; + * per-check outcome counts (flags per QC check) via ``SensorData.get_qc_freq_statistics``. + When ``make_plot`` is True, these counts are visualized with + ``plotting.qc_overview_pies``. Parameters ---------- obstype : str, optional - The target observation type for which to compute frequency statistics, by default "temp". + Observation type to evaluate, by default "temp". make_plot : bool, optional - If True, a figure with pie charts representing the frequencies is generated. The default is True. + If True, return a figure with pie charts; if False, no figure is created. Default is True. Returns ------- - pandas.DataFrame - A DataFrame containing the QC frequency statistics. The DataFrame - has a multi-index with the station name and QC check label, and - includes the following columns: - - * `N_all`: Total number of records in the dataset (including gaps). - * `N_labeled`: Number of records with the specific label. - * `N_checked`: Number of records checked for the specific QC check. - + matplotlib.figure.Figure or dict[str, pandas.Series] + Figure with QC overview pies when ``make_plot`` is True; otherwise a dictionary with + keys ``all_labels``, ``outlier_labels``, and ``per_check_labels``. """ # argument checks self._obstype_is_known_check(obstype) # get freq statistics - qc_df = self.get_sensor(obstype).get_qc_freq_statistics() + qc_specific_counts = self.get_sensor(obstype).get_qc_freq_statistics() + qc_labels_from_df = self.get_sensor(obstype).df["label"].value_counts() + qc_labels_from_outliers = ( + self.get_sensor(obstype).outliersdf["label"].value_counts() + ) if make_plot: - plotdf = qc_df.reset_index().drop(columns=["name"]).set_index("qc_check") - - fig = plotting.qc_overview_pies(df=plotdf) - fig.suptitle( - f"QC frequency statistics of {obstype} on Station level: {self.name}." + fig = plotting.qc_overview_pies( + end_labels_from_df=qc_labels_from_df, + end_labels_from_outliers=qc_labels_from_outliers, + per_check_labels=qc_specific_counts, + fig_title=f"QC frequency statistics of {obstype} on Sensor level: {self.name}.", ) + return fig - else: - return qc_df + + return { + "all_labels": qc_labels_from_df, + "outlier_labels": qc_labels_from_outliers, + "per_check_labels": qc_specific_counts, + } @log_entry def make_plot_of_modeldata( @@ -2195,7 +2223,7 @@ def fill_gaps_with_diurnal_debiased_modeldata( The model variable to filter by when multiple model variables exist for the same observation type and model. If None, no filtering by model variable is applied. The default is None. - max_gap_duration_to_fill : str or pandas.Timedelta, optional + max_gap_duration_to_fill : str or pandas.Timedelta, optional The maximum gap duration of to fill with interpolation. The result is independent on the time-resolution of the gap. Defaults to 12 hours. min_value : float, optional @@ -2225,9 +2253,7 @@ def fill_gaps_with_diurnal_debiased_modeldata( #. Clip filled values to the range [min_value, max_value] if specified. #. Update the `gap` attributes with the interpolated values, labels, and details. - Notes - ----- - Note that a suitable `min_debias_sample_size` depends on the sizes of the + A suitable `min_debias_sample_size` depends on the sizes of the leading- and trailing periods, and also on the time resolution gap (=time resolution of the corresponding SensorData). References @@ -2316,7 +2342,7 @@ def fill_gaps_with_weighted_diurnal_debiased_modeldata( The model variable to filter by when multiple model variables exist for the same observation type and model. If None, no filtering by model variable is applied. The default is None. - max_gap_duration_to_fill : str or pandas.Timedelta, optional + max_gap_duration_to_fill : str or pandas.Timedelta, optional The maximum gap duration of to fill with interpolation. The result is independent on the time-resolution of the gap. Defaults to 12 hours. min_value : float, optional @@ -2455,9 +2481,6 @@ def interpolate_gaps( #. Interpolate the missing records using the specified method. #. Update the gap attributes with the interpolated values, labels, and details. - - Note - ----- If you want to use a higher-order method of interpolation, make sure to increase the `n_leading_anchors` and `n_trailing_anchors` accordingly. For example, for a cubic interpolation, you need at least 2 leading and 2 trailing anchors. diff --git a/src/metobs_toolkit/timestampmatcher.py b/src/metobs_toolkit/timestampmatcher.py index e4f743cbe..47302e775 100644 --- a/src/metobs_toolkit/timestampmatcher.py +++ b/src/metobs_toolkit/timestampmatcher.py @@ -93,14 +93,15 @@ def outlier_records(self) -> pd.Series: return outliersubset.set_index("datetime")[self.obsname] @log_entry - def get_outlier_map(self) -> dict: - """ - Get a mapping of outlier records. + def get_raw_map(self) -> dict: + """Get a mapping of all raw timestamps to their target timestamps. Returns ------- dict - Mapping of outlier records. + Mapping from raw timestamps to target timestamps for all records + that have a raw timestamp (i.e. observations and outliers, not + gap-inserted records). Raises ------ @@ -111,14 +112,11 @@ def get_outlier_map(self) -> dict: logger.error("No timestamp conversion has been applied yet.") raise ValueError("No timestamp conversion has been applied yet.") - outliersubset = self.conv_df[ - pd.isna(self.conv_df[self.obsname]) - & pd.notna(self.conv_df["datetimedummy_raw"]) - ] + has_raw = self.conv_df[pd.notna(self.conv_df["datetimedummy_raw"])] return dict( zip( - outliersubset["datetimedummy_raw"], - outliersubset["datetimedummy_target"], + has_raw["datetimedummy_raw"], + has_raw["datetimedummy_target"], ) ) diff --git a/src/metobs_toolkit/xrconversions.py b/src/metobs_toolkit/xrconversions.py index 1d17a66df..78374273e 100644 --- a/src/metobs_toolkit/xrconversions.py +++ b/src/metobs_toolkit/xrconversions.py @@ -397,12 +397,12 @@ def construct_QC_attr(sensordata: Sensordata) -> Dict: 'QC:{checkname}.{setting}' key-value pairs. """ returndict = {"QC checks": []} - for qcdict in sensordata.outliers: + for qcresult in sensordata.outliers: # add name to the list - returndict["QC checks"].append(qcdict["checkname"]) + returndict["QC checks"].append(qcresult.checkname) # add details as flat dict items - for key, value in qcdict["settings"].items(): - returndict[f"QC:{qcdict['checkname']}.{key}"] = fmt_attr_value( + for key, value in qcresult.checksettings.items(): + returndict[f"QC:{qcresult.checkname}.{key}"] = fmt_attr_value( value ) # NO NESTED DICT! diff --git a/tests/baseline/test_dataset_color_by_label_and_modeldata_timeseries_plot.png b/tests/baseline/test_dataset_color_by_label_and_modeldata_timeseries_plot.png index e5774fc56..57e3eb48c 100644 Binary files a/tests/baseline/test_dataset_color_by_label_and_modeldata_timeseries_plot.png and b/tests/baseline/test_dataset_color_by_label_and_modeldata_timeseries_plot.png differ diff --git a/tests/baseline/test_dataset_color_by_station_and_modeldata_timeseries_plot.png b/tests/baseline/test_dataset_color_by_station_and_modeldata_timeseries_plot.png index 41f87ba54..fb7adc50b 100644 Binary files a/tests/baseline/test_dataset_color_by_station_and_modeldata_timeseries_plot.png and b/tests/baseline/test_dataset_color_by_station_and_modeldata_timeseries_plot.png differ diff --git a/tests/baseline/test_dataset_modeldata_timeseries_plot.png b/tests/baseline/test_dataset_modeldata_timeseries_plot.png index d2f0f9b73..6dcd82659 100644 Binary files a/tests/baseline/test_dataset_modeldata_timeseries_plot.png and b/tests/baseline/test_dataset_modeldata_timeseries_plot.png differ diff --git a/tests/baseline/test_dataset_plot_humidity_with_modelvariable.png b/tests/baseline/test_dataset_plot_humidity_with_modelvariable.png index d4a1b79dc..b41e9f648 100644 Binary files a/tests/baseline/test_dataset_plot_humidity_with_modelvariable.png and b/tests/baseline/test_dataset_plot_humidity_with_modelvariable.png differ diff --git a/tests/baseline/test_dataset_plot_of_modeldata_with_modelname.png b/tests/baseline/test_dataset_plot_of_modeldata_with_modelname.png index d2f0f9b73..6dcd82659 100644 Binary files a/tests/baseline/test_dataset_plot_of_modeldata_with_modelname.png and b/tests/baseline/test_dataset_plot_of_modeldata_with_modelname.png differ diff --git a/tests/baseline/test_dataset_test_show_gaps_labelby_labels.png b/tests/baseline/test_dataset_test_show_gaps_labelby_labels.png index 14cac0587..dd449341d 100644 Binary files a/tests/baseline/test_dataset_test_show_gaps_labelby_labels.png and b/tests/baseline/test_dataset_test_show_gaps_labelby_labels.png differ diff --git a/tests/baseline/test_dataset_test_show_outliers_labelby_labels.png b/tests/baseline/test_dataset_test_show_outliers_labelby_labels.png index d03ca70a4..6f44bf531 100644 Binary files a/tests/baseline/test_dataset_test_show_outliers_labelby_labels.png and b/tests/baseline/test_dataset_test_show_outliers_labelby_labels.png differ diff --git a/tests/baseline/test_dataset_test_show_outliers_labelby_station.png b/tests/baseline/test_dataset_test_show_outliers_labelby_station.png index 23a624b85..2333072f2 100644 Binary files a/tests/baseline/test_dataset_test_show_outliers_labelby_station.png and b/tests/baseline/test_dataset_test_show_outliers_labelby_station.png differ diff --git a/tests/baseline/test_dataset_timeseries_plotting_by_label.png b/tests/baseline/test_dataset_timeseries_plotting_by_label.png index a8b943cf9..e3d4f81d1 100644 Binary files a/tests/baseline/test_dataset_timeseries_plotting_by_label.png and b/tests/baseline/test_dataset_timeseries_plotting_by_label.png differ diff --git a/tests/baseline/test_dataset_timeseries_plotting_by_station.png b/tests/baseline/test_dataset_timeseries_plotting_by_station.png index aa3627899..03306984d 100644 Binary files a/tests/baseline/test_dataset_timeseries_plotting_by_station.png and b/tests/baseline/test_dataset_timeseries_plotting_by_station.png differ diff --git a/tests/baseline/test_debias_modeldata_gf_timeseries_plot.png b/tests/baseline/test_debias_modeldata_gf_timeseries_plot.png index b292dcd7e..607076616 100644 Binary files a/tests/baseline/test_debias_modeldata_gf_timeseries_plot.png and b/tests/baseline/test_debias_modeldata_gf_timeseries_plot.png differ diff --git a/tests/baseline/test_diurnal_cycle_plot.png b/tests/baseline/test_diurnal_cycle_plot.png index 11b8fccfb..8bc1b36a0 100644 Binary files a/tests/baseline/test_diurnal_cycle_plot.png and b/tests/baseline/test_diurnal_cycle_plot.png differ diff --git a/tests/baseline/test_diurnal_cycle_plot_with_reference.png b/tests/baseline/test_diurnal_cycle_plot_with_reference.png index 2f3682cf1..3f05dbeaa 100644 Binary files a/tests/baseline/test_diurnal_cycle_plot_with_reference.png and b/tests/baseline/test_diurnal_cycle_plot_with_reference.png differ diff --git a/tests/baseline/test_diurnal_debias_modeldata_gf_timeseries_plot.png b/tests/baseline/test_diurnal_debias_modeldata_gf_timeseries_plot.png index 766cde92d..475521dc6 100644 Binary files a/tests/baseline/test_diurnal_debias_modeldata_gf_timeseries_plot.png and b/tests/baseline/test_diurnal_debias_modeldata_gf_timeseries_plot.png differ diff --git a/tests/baseline/test_interpolated_timeseries_plot.png b/tests/baseline/test_interpolated_timeseries_plot.png index e259c0a94..0a6b33aab 100644 Binary files a/tests/baseline/test_interpolated_timeseries_plot.png and b/tests/baseline/test_interpolated_timeseries_plot.png differ diff --git a/tests/baseline/test_interpolation_on_dataset_plot.png b/tests/baseline/test_interpolation_on_dataset_plot.png new file mode 100644 index 000000000..0a6b33aab Binary files /dev/null and b/tests/baseline/test_interpolation_on_dataset_plot.png differ diff --git a/tests/baseline/test_modeldata_timeseries_plot.png b/tests/baseline/test_modeldata_timeseries_plot.png new file mode 100644 index 000000000..ccbeba845 Binary files /dev/null and b/tests/baseline/test_modeldata_timeseries_plot.png differ diff --git a/tests/baseline/test_modeldatatimeseries_timeseries.png b/tests/baseline/test_modeldatatimeseries_timeseries.png index f882868d9..c560edc4c 100644 Binary files a/tests/baseline/test_modeldatatimeseries_timeseries.png and b/tests/baseline/test_modeldatatimeseries_timeseries.png differ diff --git a/tests/baseline/test_modeltimeseries_pd_plot.png b/tests/baseline/test_modeltimeseries_pd_plot.png index 96eade284..993480c07 100644 Binary files a/tests/baseline/test_modeltimeseries_pd_plot.png and b/tests/baseline/test_modeltimeseries_pd_plot.png differ diff --git a/tests/baseline/test_raw_modeldata_gf_timeseries_plot.png b/tests/baseline/test_raw_modeldata_gf_timeseries_plot.png index 74063d08b..0a751e560 100644 Binary files a/tests/baseline/test_raw_modeldata_gf_timeseries_plot.png and b/tests/baseline/test_raw_modeldata_gf_timeseries_plot.png differ diff --git a/tests/baseline/test_sensordata_pd_plot.png b/tests/baseline/test_sensordata_pd_plot.png index 0e6f03850..bb7598c87 100644 Binary files a/tests/baseline/test_sensordata_pd_plot.png and b/tests/baseline/test_sensordata_pd_plot.png differ diff --git a/tests/baseline/test_sensordata_pd_plot_with_filters.png b/tests/baseline/test_sensordata_pd_plot_with_filters.png index 03fa62e39..0c6765894 100644 Binary files a/tests/baseline/test_sensordata_pd_plot_with_filters.png and b/tests/baseline/test_sensordata_pd_plot_with_filters.png differ diff --git a/tests/baseline/test_station_modeldata_timeseries.png b/tests/baseline/test_station_modeldata_timeseries.png index bdfade645..04cd4bc14 100644 Binary files a/tests/baseline/test_station_modeldata_timeseries.png and b/tests/baseline/test_station_modeldata_timeseries.png differ diff --git a/tests/baseline/test_station_plot_humidity_with_temp_modeldata.png b/tests/baseline/test_station_plot_humidity_with_temp_modeldata.png index 5fc12ea6d..965995b83 100644 Binary files a/tests/baseline/test_station_plot_humidity_with_temp_modeldata.png and b/tests/baseline/test_station_plot_humidity_with_temp_modeldata.png differ diff --git a/tests/baseline/test_station_plot_of_modeldata_with_modelname.png b/tests/baseline/test_station_plot_of_modeldata_with_modelname.png index bdfade645..04cd4bc14 100644 Binary files a/tests/baseline/test_station_plot_of_modeldata_with_modelname.png and b/tests/baseline/test_station_plot_of_modeldata_with_modelname.png differ diff --git a/tests/baseline/test_station_plot_temp_with_modeldata_kwargs.png b/tests/baseline/test_station_plot_temp_with_modeldata_kwargs.png index 30535409f..6af8459fa 100644 Binary files a/tests/baseline/test_station_plot_temp_with_modeldata_kwargs.png and b/tests/baseline/test_station_plot_temp_with_modeldata_kwargs.png differ diff --git a/tests/baseline/test_station_timeseries_plotting_existing_ax.png b/tests/baseline/test_station_timeseries_plotting_existing_ax.png index 71c56e8ed..f978caae5 100644 Binary files a/tests/baseline/test_station_timeseries_plotting_existing_ax.png and b/tests/baseline/test_station_timeseries_plotting_existing_ax.png differ diff --git a/tests/baseline/test_station_timeseries_with_modeldata.png b/tests/baseline/test_station_timeseries_with_modeldata.png index 30535409f..6af8459fa 100644 Binary files a/tests/baseline/test_station_timeseries_with_modeldata.png and b/tests/baseline/test_station_timeseries_with_modeldata.png differ diff --git a/tests/baseline/test_timeseries_plotting.png b/tests/baseline/test_timeseries_plotting.png deleted file mode 100644 index 4c98adfe5..000000000 Binary files a/tests/baseline/test_timeseries_plotting.png and /dev/null differ diff --git a/tests/baseline/test_weighted_diurnal_debias_modeldata_gf_timeseries_plot.png b/tests/baseline/test_weighted_diurnal_debias_modeldata_gf_timeseries_plot.png deleted file mode 100644 index 84ce4d183..000000000 Binary files a/tests/baseline/test_weighted_diurnal_debias_modeldata_gf_timeseries_plot.png and /dev/null differ diff --git a/tests/data/random_belgian_temp_data.csv b/tests/data/random_belgian_temp_data.csv new file mode 100644 index 000000000..a5835e01c --- /dev/null +++ b/tests/data/random_belgian_temp_data.csv @@ -0,0 +1,3841 @@ +datetime,value,station_id +2020-08-04 10:00:00,19.4,gkbid +2020-08-04 10:00:00,19.2,nfxow +2020-08-04 10:00:00,20.7,gnjnq +2020-08-04 10:00:00,19.8,plcis +2020-08-04 10:00:00,20.7,mijak +2020-08-04 10:00:00,19.6,vylxf +2020-08-04 10:00:00,19.8,qnrpm +2020-08-04 10:00:00,20.3,woteb +2020-08-04 10:00:00,18.8,eqfly +2020-08-04 10:00:00,19.6,doxbb +2020-08-04 10:00:00,20.0,ybdno +2020-08-04 10:00:00,19.4,savmq +2020-08-04 10:00:00,20.2,ezrwe +2020-08-04 10:00:00,19.1,tykui +2020-08-04 10:00:00,20.9,dejab +2020-08-04 10:00:00,19.9,wccjf +2020-08-04 10:00:00,19.3,ckjnn +2020-08-04 10:00:00,19.9,gzoye +2020-08-04 10:00:00,21.5,evobf +2020-08-04 10:00:00,20.3,kcymm +2020-08-04 10:00:00,19.9,sqrbg +2020-08-04 10:00:00,20.4,cbhsb +2020-08-04 10:00:00,20.8,lncdv +2020-08-04 10:00:00,21.1,qdekv +2020-08-04 10:00:00,19.7,gklox +2020-08-04 10:00:00,19.8,deobj +2020-08-04 10:00:00,20.1,zdpci +2020-08-04 10:00:00,20.0,bhpmz +2020-08-04 10:00:00,20.5,papaf +2020-08-04 10:00:00,20.3,lfagh +2020-08-04 10:00:00,20.0,gxcgu +2020-08-04 10:00:00,20.4,ifuxm +2020-08-04 10:00:00,19.9,zxslr +2020-08-04 10:00:00,21.0,bjszo +2020-08-04 10:00:00,19.6,owydy +2020-08-04 10:00:00,20.1,hgrlx +2020-08-04 10:00:00,20.3,kdowy +2020-08-04 10:00:00,18.2,pdbhy +2020-08-04 10:00:00,20.2,hipjh +2020-08-04 10:00:00,18.8,vmryv +2020-08-04 10:00:00,17.8,xokqh +2020-08-04 10:00:00,20.4,tnfna +2020-08-04 10:00:00,19.5,tkfhq +2020-08-04 10:00:00,19.6,kctnv +2020-08-04 10:00:00,19.9,snbhs +2020-08-04 10:00:00,20.5,prtwa +2020-08-04 10:00:00,18.7,vjstu +2020-08-04 10:00:00,19.4,vpdsa +2020-08-04 10:00:00,19.6,efnlc +2020-08-04 10:00:00,19.6,wwuyi +2020-08-04 10:00:00,19.6,blpnl +2020-08-04 10:00:00,19.9,arpjv +2020-08-04 10:00:00,18.4,vpgiu +2020-08-04 10:00:00,18.3,jzcps +2020-08-04 10:00:00,19.3,iewqh +2020-08-04 10:00:00,20.44444,sqdlj +2020-08-04 10:00:00,20.22222,bkanc +2020-08-04 10:00:00,21.11111,nqlto +2020-08-04 10:00:00,19.05556,mikqn +2020-08-04 10:00:00,20.16667,ldaup +2020-08-04 10:00:00,19.88889,bzpyt +2020-08-04 10:00:00,20.55556,lzhen +2020-08-04 10:00:00,20.77778,tqfkn +2020-08-04 10:00:00,20.05556,rrnhm +2020-08-04 10:00:00,21.27778,wgxpj +2020-08-04 10:00:00,21.22222,lgsvl +2020-08-04 10:00:00,20.5,hvful +2020-08-04 10:00:00,20.44444,zyfvs +2020-08-04 10:00:00,20.55556,kzwzn +2020-08-04 10:00:00,21.72222,blmxa +2020-08-04 10:00:00,21.44444,ovxxj +2020-08-04 10:00:00,20.77778,uxbrj +2020-08-04 10:00:00,20.33333,krvqc +2020-08-04 10:00:00,19.38889,fcplm +2020-08-04 10:00:00,19.38889,ilwqw +2020-08-04 10:00:00,21.38889,ntpqk +2020-08-04 10:00:00,21.72222,wmerb +2020-08-04 10:00:00,21.83333,mrsle +2020-08-04 10:00:00,20.38889,czljd +2020-08-04 10:00:00,21.27778,owdub +2020-08-04 10:00:00,21.44444,kjnyi +2020-08-04 10:00:00,20.55556,ruzsu +2020-08-04 10:00:00,20.0,dnlqg +2020-08-04 10:00:00,19.61111,indfm +2020-08-04 10:00:00,21.77778,tgzxw +2020-08-04 10:00:00,20.5,wkkho +2020-08-04 10:00:00,20.33333,hlrpq +2020-08-04 10:00:00,18.61111,ssjlf +2020-08-04 10:00:00,20.77778,pfnsl +2020-08-04 10:00:00,22.22222,dkaac +2020-08-04 10:00:00,19.83333,cifvp +2020-08-04 10:00:00,20.22222,pvqjy +2020-08-04 10:00:00,21.05556,sszbf +2020-08-04 10:00:00,21.0,fgwmk +2020-08-04 10:00:00,18.72222,knnxf +2020-08-04 10:00:00,21.38889,jpbqw +2020-08-04 10:00:00,21.27778,xpizq +2020-08-04 10:00:00,20.83333,zvyyj +2020-08-04 10:00:00,21.88889,qrytb +2020-08-04 10:00:00,21.77778,uobqf +2020-08-04 10:00:00,19.0,rmwdd +2020-08-04 10:00:00,20.61111,cgaaj +2020-08-04 10:00:00,21.27778,qaeee +2020-08-04 10:00:00,21.83333,almmh +2020-08-04 10:00:00,21.05556,jayci +2020-08-04 10:00:00,19.77778,wppgj +2020-08-04 10:00:00,20.11111,jhwop +2020-08-04 10:00:00,19.61111,ahwef +2020-08-04 10:00:00,20.55556,ivehw +2020-08-04 10:00:00,20.22222,gxlyb +2020-08-04 10:00:00,20.38889,ofcyo +2020-08-04 10:00:00,20.61111,nadmj +2020-08-04 10:00:00,20.88889,rrblt +2020-08-04 10:00:00,19.38889,ehael +2020-08-04 10:00:00,20.05556,rzbao +2020-08-04 10:00:00,20.61111,dolqy +2020-08-04 10:00:00,17.77778,jgflx +2020-08-04 10:00:00,20.44361,sboyq +2020-08-04 10:00:00,19.72222,jpeej +2020-08-04 10:00:00,19.88889,eyhqb +2020-08-04 10:00:00,20.61111,xtwrj +2020-08-04 10:00:00,19.88889,babhc +2020-08-04 10:00:00,19.77778,ihrrd +2020-08-04 10:00:00,20.5,wvnwv +2020-08-04 10:00:00,21.0,brgfy +2020-08-04 10:00:00,19.0,kzqna +2020-08-04 10:00:00,18.72222,lojzd +2020-08-04 10:00:00,19.27778,psvsy +2020-08-04 10:00:00,20.72222,muwpb +2020-08-04 10:00:00,19.27778,xadne +2020-08-04 10:00:00,20.61111,aebcr +2020-08-04 10:00:00,21.27778,lrpdu +2020-08-04 10:00:00,19.77778,cnixu +2020-08-04 10:00:00,20.22222,oyamr +2020-08-04 10:00:00,19.52778,xtoxr +2020-08-04 10:00:00,21.5,kpmly +2020-08-04 10:00:00,19.77778,khcvi +2020-08-04 10:00:00,20.38889,cdvwy +2020-08-04 10:00:00,20.22222,oxhol +2020-08-04 10:00:00,20.38889,xcimd +2020-08-04 10:00:00,19.77778,bgdiq +2020-08-04 10:00:00,20.61111,cqati +2020-08-04 10:00:00,19.27778,oszcp +2020-08-04 10:00:00,21.27778,eprel +2020-08-04 10:00:00,19.27778,rjkik +2020-08-04 10:00:00,20.72222,fpmbd +2020-08-04 10:00:00,21.11111,fpyxg +2020-08-04 10:00:00,20.61111,rpkjp +2020-08-04 10:00:00,19.3,fiqlz +2020-08-04 10:00:00,19.77778,ujcyx +2020-08-04 10:00:00,20.27778,nzfbp +2020-08-04 10:00:00,21.22222,dypjk +2020-08-04 10:00:00,20.5,hbrkp +2020-08-04 10:00:00,20.61111,gffdv +2020-08-04 10:00:00,20.72222,hnleb +2020-08-04 10:00:00,21.38889,crxzy +2020-08-04 10:00:00,22.5,dhzaj +2020-08-04 10:00:00,21.22222,wgnku +2020-08-04 10:00:00,17.38889,lezly +2020-08-04 10:00:00,20.72222,ibagr +2020-08-04 10:00:00,21.0,qvcca +2020-08-04 10:00:00,21.61111,fgiws +2020-08-04 10:00:00,21.0,ljhka +2020-08-04 10:00:00,19.27778,ussxj +2020-08-04 10:00:00,21.27778,kjgbf +2020-08-04 10:00:00,20.27778,zhkbc +2020-08-04 10:00:00,20.5,eopzi +2020-08-04 10:00:00,21.0,oftqd +2020-08-04 10:00:00,21.11111,dipko +2020-08-04 10:00:00,19.38889,fbmhp +2020-08-04 10:00:00,20.27778,dzvyy +2020-08-04 10:00:00,20.22222,zislb +2020-08-04 10:00:00,20.0,hogxc +2020-08-04 10:00:00,21.22222,xlaob +2020-08-04 10:00:00,19.38889,urzzk +2020-08-04 10:00:00,20.5,qayib +2020-08-04 10:00:00,20.27778,xiybo +2020-08-04 10:00:00,19.27778,kelro +2020-08-04 10:00:00,19.38889,uekqb +2020-08-04 10:00:00,22.16667,qxppc +2020-08-04 10:00:00,21.05556,nnyuc +2020-08-04 10:00:00,21.5,ztmms +2020-08-04 10:00:00,19.77778,amvul +2020-08-04 10:00:00,20.5,ayiea +2020-08-04 10:00:00,17.72222,qdlmf +2020-08-04 10:00:00,17.5,ufldd +2020-08-04 10:00:00,19.88889,bnhjf +2020-08-04 10:00:00,19.72222,vsegj +2020-08-04 10:00:00,20.11111,dacwi +2020-08-04 10:00:00,20.77778,kvmjf +2020-08-04 10:00:00,19.88889,vpelr +2020-08-04 10:00:00,20.38889,sdvmr +2020-08-04 10:00:00,21.27778,bmwbn +2020-08-04 10:00:00,19.0,hugfh +2020-08-04 10:00:00,20.61111,moxrx +2020-08-04 10:00:00,21.61111,rdbaf +2020-08-04 10:00:00,20.77778,altqr +2020-08-04 10:00:00,20.5,ounrl +2020-08-04 10:00:00,20.72222,sdaqv +2020-08-04 10:00:00,20.38889,fbrxd +2020-08-04 10:00:00,20.22222,brnhd +2020-08-04 10:00:00,19.61111,jodzb +2020-08-04 10:00:00,20.72222,nnjle +2020-08-04 10:00:00,19.38889,xsbps +2020-08-04 10:00:00,21.0,dsczo +2020-08-04 10:00:00,19.77778,qidgd +2020-08-04 10:00:00,21.22222,uvcyf +2020-08-04 10:00:00,20.5,mmbpn +2020-08-04 10:00:00,19.3,pbfcx +2020-08-04 10:00:00,18.8,utryj +2020-08-04 10:00:00,18.1,uyhkr +2020-08-04 10:00:00,18.8,fwtoy +2020-08-04 10:00:00,18.6,bxidy +2020-08-04 10:00:00,19.7,begvh +2020-08-04 10:00:00,21.1,rlkjk +2020-08-04 10:00:00,21.7,hooqf +2020-08-04 10:00:00,20.6,cgghn +2020-08-04 10:00:00,19.8,ckdbs +2020-08-04 10:00:00,21.0,yhvwz +2020-08-04 10:00:00,19.5,nbutu +2020-08-04 10:00:00,21.2,fcukz +2020-08-04 10:00:00,21.0,kpolf +2020-08-04 10:00:00,19.8,frlga +2020-08-04 10:00:00,19.8,slxyr +2020-08-04 10:00:00,21.5,hcydv +2020-08-04 10:00:00,21.7,ezebq +2020-08-04 10:00:00,17.7,ypjjc +2020-08-04 10:00:00,19.8,kpphy +2020-08-04 10:00:00,19.4,peypk +2020-08-04 10:00:00,19.0,teeno +2020-08-04 10:00:00,20.2,kcxms +2020-08-04 10:00:00,19.7,ezrfg +2020-08-04 10:00:00,21.1,ieysd +2020-08-04 10:00:00,17.7,zcagk +2020-08-04 10:00:00,18.0,kokia +2020-08-04 10:00:00,19.3,jcjim +2020-08-04 10:00:00,18.4,lshyu +2020-08-04 10:00:00,18.8,peory +2020-08-04 10:00:00,19.4,bsypp +2020-08-04 10:00:00,20.1,ierzq +2020-08-04 10:00:00,19.8,chiez +2020-08-04 10:00:00,21.3,bgwme +2020-08-04 10:00:00,20.6,zhneg +2020-08-04 10:00:00,19.7,evahb +2020-08-04 10:00:00,20.9,rjnqu +2020-08-04 10:00:00,20.7,loycv +2020-08-04 10:00:00,19.0,dkinp +2020-08-04 10:00:00,19.4,rycdc +2020-08-04 10:00:00,15.9,yfrtn +2020-08-04 10:00:00,19.1,woeit +2020-08-04 10:00:00,22.6,iwmhh +2020-08-04 10:00:00,20.5,lczyo +2020-08-04 10:00:00,21.4,drzch +2020-08-04 10:00:00,19.1,cyjkp +2020-08-04 10:00:00,18.1,itjfr +2020-08-04 10:00:00,18.9,yfsun +2020-08-04 10:00:00,19.2,piqev +2020-08-04 10:00:00,20.1,wfkqc +2020-08-04 10:00:00,20.3,mbunu +2020-08-04 10:00:00,20.2,wmowo +2020-08-04 10:00:00,18.6,lajyk +2020-08-04 10:00:00,20.0,glwbi +2020-08-04 10:00:00,18.9,nzavz +2020-08-04 10:00:00,19.9,fislm +2020-08-04 10:00:00,20.4,xxkrz +2020-08-04 10:00:00,19.4,eabad +2020-08-04 10:00:00,18.6,qmeqk +2020-08-04 10:00:00,20.4,otbbb +2020-08-04 10:00:00,19.3,fvify +2020-08-04 10:00:00,17.6,qaeyo +2020-08-04 10:00:00,19.4,pmfnb +2020-08-04 10:00:00,20.5,zmiyq +2020-08-04 10:00:00,20.2,egpmm +2020-08-04 10:00:00,18.8,auahq +2020-08-04 10:00:00,19.2,fiokc +2020-08-04 10:00:00,20.2,djapy +2020-08-04 10:00:00,19.6,ptinq +2020-08-04 10:00:00,17.9,rgxtf +2020-08-04 10:00:00,21.5,smmgt +2020-08-04 10:00:00,15.9,yhpqj +2020-08-04 10:00:00,20.9,qmcjn +2020-08-04 10:00:00,19.7,nzqbn +2020-08-04 10:00:00,19.4,vyupo +2020-08-04 10:00:00,16.8,ihmij +2020-08-04 10:00:00,18.3,imjov +2020-08-04 10:00:00,18.6,gncic +2020-08-04 10:00:00,19.1,ktcei +2020-08-04 10:00:00,18.2,pfdzl +2020-08-04 10:00:00,22.7,rsmae +2020-08-04 10:00:00,18.6,tdslf +2020-08-04 10:00:00,20.6,nbkja +2020-08-04 10:00:00,20.9,znrow +2020-08-04 10:00:00,20.8,pcjst +2020-08-04 10:00:00,21.6,fccef +2020-08-04 10:00:00,19.4,bazjf +2020-08-04 10:00:00,18.5,ldnly +2020-08-04 10:00:00,20.8,pqjez +2020-08-04 10:00:00,18.0,gwkuq +2020-08-04 10:00:00,19.0,erulv +2020-08-04 10:00:00,20.5,dwtik +2020-08-04 10:00:00,19.6,atqhc +2020-08-04 10:00:00,18.9,phmya +2020-08-04 10:00:00,22.6,ngmnm +2020-08-04 10:00:00,16.7,ztkxe +2020-08-04 10:00:00,17.9,xdywu +2020-08-04 10:00:00,20.3,bbije +2020-08-04 10:00:00,16.5,rikpg +2020-08-04 10:00:00,18.0,kavwb +2020-08-04 10:00:00,21.1,dtunu +2020-08-04 10:00:00,19.2,jpeyd +2020-08-04 10:00:00,20.7,mkplm +2020-08-04 10:00:00,22.7,gzfmr +2020-08-04 10:00:00,21.1,drlil +2020-08-04 10:00:00,19.6,oolbj +2020-08-04 10:00:00,19.5,grqqe +2020-08-04 10:00:00,21.4,pnlct +2020-08-04 10:00:00,19.2,ldzmh +2020-08-04 10:00:00,21.1,vkmls +2020-08-04 10:00:00,19.3,tflni +2020-08-04 10:00:00,19.0,waoya +2020-08-04 10:00:00,19.6,pjlfa +2020-08-04 10:00:00,17.5,kdwaa +2020-08-04 10:00:00,20.2,pfwnb +2020-08-04 10:00:00,18.5,tqjbl +2020-08-04 10:00:00,21.9,lydbu +2020-08-04 10:00:00,20.0,qkblc +2020-08-04 10:00:00,21.3,cikgj +2020-08-04 10:00:00,19.2,hganh +2020-08-04 10:00:00,21.0,xfhpx +2020-08-04 10:00:00,17.9,kzssz +2020-08-04 10:00:00,19.5,qqwil +2020-08-04 10:00:00,19.3,yhbkq +2020-08-04 10:00:00,18.5,fhyhy +2020-08-04 10:00:00,19.9,vmaxs +2020-08-04 10:00:00,19.8,xakyo +2020-08-04 10:00:00,20.7,tnqcp +2020-08-04 10:00:00,17.6,bddyz +2020-08-04 10:00:00,18.1,txryf +2020-08-04 10:00:00,19.8,giakp +2020-08-04 10:00:00,20.9,ahzhl +2020-08-04 10:00:00,19.8,rcimk +2020-08-04 10:00:00,20.2,cdeyn +2020-08-04 10:00:00,21.3,xxkgx +2020-08-04 10:00:00,18.4,qmpvs +2020-08-04 10:00:00,21.0,fxtyo +2020-08-04 10:00:00,20.5,mhjwb +2020-08-04 10:00:00,18.0,cotha +2020-08-04 10:00:00,20.3,rzdnc +2020-08-04 10:00:00,19.2,ggxnz +2020-08-04 10:00:00,19.5,bpbxb +2020-08-04 10:00:00,18.9,ztxqk +2020-08-04 10:00:00,19.2,ooeaf +2020-08-04 10:00:00,22.0,jmpwu +2020-08-04 10:00:00,19.7,stszj +2020-08-04 10:00:00,18.2,hvouk +2020-08-04 10:00:00,21.0,nxfem +2020-08-04 10:00:00,19.5,plodv +2020-08-04 10:00:00,19.9,xrkmq +2020-08-04 10:00:00,18.3,pcbtj +2020-08-04 10:00:00,17.5,ndute +2020-08-04 10:00:00,18.7,lywjv +2020-08-04 10:00:00,19.9,hiehy +2020-08-04 10:00:00,20.3,kjbdx +2020-08-04 10:00:00,19.0,oflot +2020-08-04 10:00:00,19.4,vxtor +2020-08-04 10:00:00,19.8,isizb +2020-08-04 10:00:00,18.9,otvrh +2020-08-04 10:00:00,17.2,yhocf +2020-08-04 10:00:00,19.9,mqpjl +2020-08-04 10:00:00,19.9,wiiyu +2020-08-04 10:00:00,18.6,qavrb +2020-08-04 10:00:00,21.3,ihown +2020-08-04 10:00:00,19.9,zuejk +2020-08-04 10:00:00,18.1,edqjm +2020-08-04 10:00:00,21.8,jofxa +2020-08-04 10:00:00,19.0,syndc +2020-08-04 10:00:00,19.7,wguaq +2020-08-04 10:00:00,21.0,hnxwu +2020-08-04 10:00:00,20.6,ywiqb +2020-08-04 10:00:00,21.9,wpsoy +2020-08-04 10:00:00,17.6,svdum +2020-08-04 10:00:00,19.8,acogf +2020-08-04 10:00:00,20.4,wwdah +2020-08-04 10:00:00,21.4,rdtis +2020-08-04 10:00:00,21.1,nfrzt +2020-08-04 10:00:00,18.0,gcjrh +2020-08-04 10:00:00,20.5,xpvwh +2020-08-04 10:00:00,19.1,wfvrm +2020-08-04 10:00:00,20.4,vysdp +2020-08-04 10:00:00,19.9,qpvdo +2020-08-04 10:00:00,20.4,pcofv +2020-08-04 10:00:00,21.1,dlwrl +2020-08-04 10:00:00,19.0,zichl +2020-08-04 10:00:00,19.1,wrmic +2020-08-04 10:00:00,18.8,uotkk +2020-08-04 10:00:00,19.2,kbpjv +2020-08-04 10:00:00,18.2,jqare +2020-08-04 10:00:00,18.2,uakik +2020-08-04 10:00:00,18.4,ckorf +2020-08-04 10:00:00,19.3,slrzo +2020-08-04 10:00:00,19.7,tlawu +2020-08-04 10:00:00,19.7,lybxy +2020-08-04 10:00:00,18.5,bwzzs +2020-08-04 10:00:00,19.3,reose +2020-08-04 10:00:00,20.9,yasgp +2020-08-04 10:00:00,21.2,aksdd +2020-08-04 10:00:00,17.7,ohryf +2020-08-04 10:00:00,20.0,qyxbu +2020-08-04 10:00:00,19.3,fiyly +2020-08-04 10:00:00,21.3,htvkq +2020-08-04 10:00:00,19.8,rkoeu +2020-08-04 10:00:00,18.3,btvwv +2020-08-04 10:00:00,19.2,qzgcp +2020-08-04 10:00:00,21.7,lfofy +2020-08-04 10:00:00,20.6,vnvbx +2020-08-04 10:00:00,21.1,tihag +2020-08-04 10:00:00,18.5,iogus +2020-08-04 10:00:00,19.2,oqyss +2020-08-04 10:00:00,20.2,zplai +2020-08-04 10:00:00,20.6,kvmrm +2020-08-04 10:00:00,21.0,evglv +2020-08-04 10:00:00,19.2,ttgwc +2020-08-04 10:00:00,20.2,haptn +2020-08-04 10:00:00,21.5,cmtwl +2020-08-04 10:00:00,20.5,acdos +2020-08-04 10:00:00,19.8,ucjbd +2020-08-04 10:00:00,19.5,dldrv +2020-08-04 10:00:00,20.1,koeci +2020-08-04 10:00:00,20.0,ipesq +2020-08-04 10:00:00,19.3,iucem +2020-08-04 10:00:00,16.9,vbdzv +2020-08-04 10:00:00,18.9,rhqvm +2020-08-04 10:00:00,18.8,xbxbe +2020-08-04 10:00:00,18.1,rmdgs +2020-08-04 10:00:00,19.2,jzptm +2020-08-04 10:00:00,18.3,kcvas +2020-08-04 10:00:00,19.1,mvgcb +2020-08-04 10:00:00,20.8,ndvqc +2020-08-04 10:00:00,19.1,xhztq +2020-08-04 10:00:00,21.2,mktph +2020-08-04 10:00:00,17.9,jfnoh +2020-08-04 10:00:00,18.6,prmvg +2020-08-04 10:00:00,21.2,ytuuu +2020-08-04 10:00:00,19.2,leety +2020-08-04 10:00:00,20.8,iiaah +2020-08-04 10:00:00,20.0,cnvzb +2020-08-04 10:00:00,22.2,otwdf +2020-08-04 10:00:00,19.5,dsslb +2020-08-04 10:00:00,20.5,tcfkw +2020-08-04 10:00:00,21.0,bvlsj +2020-08-04 10:00:00,20.9,hgatb +2020-08-04 10:00:00,16.6,zwknj +2020-08-04 10:00:00,23.4,yuxlt +2020-08-04 10:00:00,17.1,jhdpi +2020-08-04 10:00:00,19.9,qttbn +2020-08-04 10:00:00,18.5,gqmws +2020-08-04 10:00:00,20.7,qivsx +2020-08-04 10:00:00,19.8,mtqnc +2020-08-04 10:00:00,21.4,ltfms +2020-08-04 10:00:00,21.7,rwvtt +2020-08-04 10:00:00,19.1,pidkl +2020-08-04 10:00:00,18.4,rvfml +2020-08-04 10:00:00,0.0,ejfoz +2020-08-04 10:00:00,42.1,viely +2020-08-04 10:00:00,20.0,bpvyz +2020-08-04 10:00:00,17.6,jdnkd +2020-08-04 10:00:00,19.2,dpmek +2020-08-04 10:00:00,24.83333,vleon +2020-08-04 10:00:00,22.38889,alybz +2020-08-04 10:00:00,24.33333,bttyj +2020-08-04 10:00:00,22.22222,nuzsv +2020-08-04 10:00:00,21.11111,mqzft +2020-08-04 10:00:00,21.55556,jwgjj +2020-08-04 10:00:00,23.83333,fzckm +2020-08-04 10:00:00,22.22222,uuhcx +2020-08-04 10:00:00,24.11111,dwsvq +2020-08-04 10:00:00,22.27778,mnywm +2020-08-04 10:00:00,17.61111,tckyu +2020-08-04 10:00:00,22.27778,crehv +2020-08-04 10:00:00,24.05556,fpkpz +2020-08-04 10:00:00,24.72222,okamk +2020-08-04 10:00:00,22.16667,xlski +2020-08-04 10:00:00,25.83333,hivjq +2020-08-04 10:00:00,21.94444,kfksc +2020-08-04 10:00:00,23.0,noubl +2020-08-04 10:00:00,20.55556,psxfe +2020-08-04 10:00:00,21.72222,kanab +2020-08-04 10:00:00,23.22222,gyqkn +2020-08-04 10:00:00,23.83333,zdrio +2020-08-04 10:00:00,20.61111,cicho +2020-08-04 10:00:00,21.77778,sqdbm +2020-08-04 10:00:00,21.77778,jzkgm +2020-08-04 10:00:00,21.61111,tjquy +2020-08-04 10:00:00,21.72222,jvrao +2020-08-04 10:00:00,22.88889,nrvjb +2020-08-04 10:00:00,22.0,suooc +2020-08-04 10:00:00,22.27778,muaeg +2020-08-04 10:00:00,20.0,wdwen +2020-08-04 10:00:00,24.5,khlfx +2020-08-04 10:00:00,22.61111,ipijg +2020-08-04 10:00:00,20.22222,vyect +2020-08-04 10:00:00,19.38889,imjpm +2020-08-04 10:00:00,25.77778,fkyme +2020-08-04 10:00:00,22.72222,qomek +2020-08-04 10:00:00,23.72222,kqjds +2020-08-04 10:00:00,21.5,mfwnz +2020-08-04 10:00:00,18.61111,oapgx +2020-08-04 10:00:00,22.0,mjbzs +2020-08-04 10:00:00,22.2,yiywu +2020-08-04 10:00:00,24.1,ecvym +2020-08-04 10:00:00,28.0,oaqph +2020-08-04 10:00:00,26.8,fecem +2020-08-04 10:00:00,17.5,nbitj +2020-08-04 10:00:00,23.2,igbxx +2020-08-04 10:00:00,24.5,pbklv +2020-08-04 10:00:00,21.5,ljfve +2020-08-04 10:00:00,22.5,yjeoj +2020-08-04 10:00:00,25.7,lctcs +2020-08-04 10:00:00,22.3,ijzkb +2020-08-04 10:00:00,22.8,cotxr +2020-08-04 10:00:00,23.5,bsxux +2020-08-04 10:00:00,33.1,cwavf +2020-08-04 10:00:00,25.7,xtwil +2020-08-04 10:00:00,27.6,mjtko +2020-08-04 10:00:00,24.1,klykn +2020-08-04 10:00:00,34.6,ihhmy +2020-08-04 10:00:00,24.7,mxwwj +2020-08-04 10:00:00,20.1,wrrrc +2020-08-04 10:00:00,30.0,pahze +2020-08-04 10:00:00,20.9,mnczw +2020-08-04 10:00:00,26.9,cczvb +2020-08-04 10:00:00,23.8,tjsch +2020-08-04 10:00:00,28.2,tywrl +2020-08-04 10:00:00,24.5,svxom +2020-08-04 10:00:00,24.2,nxits +2020-08-04 10:00:00,22.2,agneq +2020-08-04 10:00:00,26.2,ggxsj +2020-08-04 10:00:00,24.4,wvcip +2020-08-04 10:00:00,26.6,ixmaf +2020-08-04 10:00:00,27.4,oqelg +2020-08-04 10:00:00,17.3,wznvv +2020-08-04 10:00:00,29.6,ejrdd +2020-08-04 10:00:00,26.2,mbdop +2020-08-04 10:00:00,21.7,wcuan +2020-08-04 10:00:00,25.2,fyzuj +2020-08-04 10:00:00,24.8,kqsdd +2020-08-04 10:00:00,23.2,iysis +2020-08-04 10:00:00,22.8,wgaiu +2020-08-04 10:00:00,21.4,rzzfn +2020-08-04 10:00:00,26.4,lyhqc +2020-08-04 10:00:00,36.1,ztgfu +2020-08-04 10:00:00,23.7,fahhr +2020-08-04 10:00:00,22.7,jyvth +2020-08-04 10:00:00,33.9,byetq +2020-08-04 10:00:00,17.0,jqjxq +2020-08-04 10:00:00,30.9,owtyy +2020-08-04 10:00:00,21.9,lpbsn +2020-08-04 10:00:00,23.5,ipaod +2020-08-04 10:00:00,24.3,hxidk +2020-08-04 10:00:00,22.1,axeow +2020-08-04 10:00:00,24.9,jtxeg +2020-08-04 10:00:00,23.3,sifce +2020-08-04 10:00:00,22.0,tggup +2020-08-04 10:00:00,25.5,ahobs +2020-08-04 10:00:00,24.0,ynbjr +2020-08-04 10:00:00,23.6,zjnnm +2020-08-04 10:00:00,33.9,pxbit +2020-08-04 10:00:00,17.0,ginpe +2020-08-04 10:00:00,27.8,kddvu +2020-08-04 10:00:00,31.1,uetgx +2020-08-04 10:00:00,25.5,uutbi +2020-08-04 10:00:00,20.5,usdwm +2020-08-04 10:00:00,25.2,oytin +2020-08-04 10:00:00,25.4,zqmdp +2020-08-04 10:00:00,22.7,lfvqk +2020-08-04 10:00:00,24.9,zxtht +2020-08-04 10:00:00,26.3,ypvib +2020-08-04 10:00:00,24.4,mjxzf +2020-08-04 10:00:00,16.4,knzsr +2020-08-04 10:00:00,28.7,uujoy +2020-08-04 10:00:00,23.1,jbgdo +2020-08-04 10:00:00,24.6,irzil +2020-08-04 10:00:00,24.7,dyfil +2020-08-04 10:00:00,23.2,vvtws +2020-08-04 10:00:00,32.3,gkwvp +2020-08-04 10:00:00,22.3,yrsxm +2020-08-04 10:00:00,23.8,bjsta +2020-08-04 10:00:00,24.4,dbibg +2020-08-04 10:00:00,17.8,pfcaa +2020-08-04 10:00:00,16.6,kimee +2020-08-04 10:00:00,19.9,qwcnk +2020-08-04 10:00:00,22.2,ivkvr +2020-08-04 10:00:00,24.8,mblxl +2020-08-04 10:00:00,23.3,adykq +2020-08-04 10:00:00,24.5,bduku +2020-08-04 10:00:00,21.4,dhvfr +2020-08-04 10:00:00,22.1,igylq +2020-08-04 10:00:00,20.6,mugrd +2020-08-04 10:00:00,23.3,ayahb +2020-08-04 10:00:00,18.9,ioqjw +2020-08-04 10:00:00,24.4,xqytl +2020-08-04 10:00:00,21.4,aqcyr +2020-08-04 10:00:00,22.1,ymhhf +2020-08-04 10:00:00,23.4,vpzqo +2020-08-04 10:00:00,24.8,ljwns +2020-08-04 10:00:00,25.5,gntwd +2020-08-04 10:00:00,22.2,kojsr +2020-08-04 10:00:00,23.6,fsnbh +2020-08-04 10:00:00,21.7,hwwfq +2020-08-04 10:00:00,27.3,xuuro +2020-08-04 10:00:00,17.8,apctj +2020-08-04 10:00:00,18.7,ycbiy +2020-08-04 10:00:00,21.9,zrgnz +2020-08-04 10:00:00,25.0,mocpf +2020-08-04 10:00:00,23.8,vudfc +2020-08-04 10:00:00,23.9,cwviz +2020-08-04 10:00:00,25.7,cysqv +2020-08-04 10:00:00,34.2,bytpr +2020-08-04 10:00:00,23.1,vbfow +2020-08-04 10:00:00,24.0,ffybf +2020-08-04 10:00:00,22.0,dvhqy +2020-08-04 10:00:00,22.3,vtpem +2020-08-04 10:00:00,23.5,dgwvq +2020-08-04 10:00:00,17.2,ejghf +2020-08-04 10:00:00,27.6,llziw +2020-08-04 10:00:00,17.6,vycbk +2020-08-04 10:00:00,30.0,jvkyi +2020-08-04 10:00:00,22.0,noagn +2020-08-04 10:00:00,22.9,mztnu +2020-08-04 10:00:00,25.8,okuny +2020-08-04 10:00:00,27.9,wuguf +2020-08-04 10:00:00,37.7,vlvrq +2020-08-04 10:00:00,24.4,aiint +2020-08-04 10:00:00,25.6,eptar +2020-08-04 10:00:00,24.3,iwcxs +2020-08-04 10:00:00,22.6,umzkd +2020-08-04 10:00:00,18.1,yejug +2020-08-04 10:00:00,34.3,fwvpu +2020-08-04 10:00:00,20.4,urexq +2020-08-04 10:00:00,26.0,tjduz +2020-08-04 10:00:00,21.4,qtxsp +2020-08-04 10:00:00,22.1,hcitm +2020-08-04 10:00:00,20.5,nsqtr +2020-08-04 10:00:00,21.5,thrud +2020-08-04 10:00:00,25.9,tcblk +2020-08-04 10:00:00,25.2,hbwiu +2020-08-04 10:00:00,22.7,ouhci +2020-08-04 10:00:00,23.1,qnknt +2020-08-04 10:00:00,25.4,nksxy +2020-08-04 10:00:00,21.7,cdxbb +2020-08-04 10:00:00,40.2,npwwe +2020-08-04 10:00:00,21.9,joszi +2020-08-04 10:00:00,24.2,ipyve +2020-08-04 10:00:00,21.7,lrhew +2020-08-04 10:00:00,25.0,drbeo +2020-08-04 10:00:00,23.4,iqocu +2020-08-04 10:00:00,24.2,gunnj +2020-08-04 10:00:00,15.7,adwmg +2020-08-04 10:00:00,25.0,cywuc +2020-08-04 10:00:00,29.6,wquxs +2020-08-04 10:00:00,26.9,whfxy +2020-08-04 10:00:00,23.3,nncsb +2020-08-04 10:00:00,23.7,vhcmj +2020-08-04 10:00:00,26.4,kretn +2020-08-04 10:00:00,29.5,rkkaw +2020-08-04 10:00:00,19.2,rbaay +2020-08-04 10:00:00,22.8,kultx +2020-08-04 10:00:00,26.1,rfzya +2020-08-04 10:00:00,25.6,eafjs +2020-08-04 10:00:00,23.8,llmmm +2020-08-04 10:00:00,22.3,mmbcs +2020-08-04 10:00:00,24.0,usevc +2020-08-04 10:00:00,23.2,gecot +2020-08-04 10:00:00,22.8,haxap +2020-08-04 10:00:00,25.1,wlvza +2020-08-04 10:00:00,37.1,pduvn +2020-08-04 10:00:00,31.4,gmdsg +2020-08-04 10:00:00,22.2,awktm +2020-08-04 10:00:00,23.3,fynse +2020-08-04 10:00:00,26.0,wssfq +2020-08-04 10:00:00,28.2,ojthh +2020-08-04 10:00:00,24.9,ojeut +2020-08-04 10:00:00,31.8,dwqax +2020-08-04 10:00:00,29.4,hphlh +2020-08-04 10:00:00,23.2,kjmfs +2020-08-04 10:00:00,23.4,lsify +2020-08-04 10:00:00,23.4,fkgmp +2020-08-04 10:00:00,23.6,drmxk +2020-08-04 10:00:00,23.8,deaco +2020-08-04 10:00:00,23.6,btxrm +2020-08-04 10:00:00,18.3,tffmg +2020-08-04 10:00:00,32.7,husmx +2020-08-04 10:00:00,24.4,wgefq +2020-08-04 10:00:00,31.3,lvmjm +2020-08-04 10:00:00,23.0,tqrcb +2020-08-04 10:00:00,28.9,muuvq +2020-08-04 10:00:00,26.7,nggxz +2020-08-04 10:00:00,25.8,tegfb +2020-08-04 10:00:00,21.8,pwjcp +2020-08-04 10:00:00,17.7,copbg +2020-08-04 10:00:00,26.0,aryhl +2020-08-04 10:00:00,26.4,yymxg +2020-08-04 10:00:00,24.3,vdwsy +2020-08-04 10:00:00,37.3,hmxwa +2020-08-04 10:00:00,21.9,vlwwz +2020-08-04 10:00:00,21.5,dqtai +2020-08-04 10:00:00,22.0,oaumt +2020-08-04 10:00:00,22.55556,kenrf +2020-08-04 10:00:00,22.5,gmdwp +2020-08-04 10:00:00,22.22222,hjdlp +2020-08-04 10:00:00,22.27778,gdpxw +2020-08-04 10:00:00,22.33333,djtgy +2020-08-04 10:00:00,23.61111,kbvuy +2020-08-04 10:00:00,22.77778,lxbic +2020-08-04 10:00:00,22.66667,aioiq +2020-08-04 10:00:00,23.0,vlcim +2020-08-04 10:00:00,22.27778,fnnnx +2020-08-04 10:00:00,22.44444,hbhhs +2020-08-04 10:00:00,22.27778,hcdwa +2020-08-04 10:00:00,22.27778,zkvzt +2020-08-04 10:00:00,22.55556,krnzm +2020-08-04 10:00:00,22.27778,hzsnb +2020-08-04 10:00:00,18.0,bkahv +2020-08-04 10:00:00,21.1,dveuq +2020-08-04 10:00:00,22.8,xataf +2020-08-04 10:00:00,22.7,zjubp +2020-08-04 10:00:00,22.5,hriee +2020-08-04 10:00:00,22.1,gvjom +2020-08-04 10:00:00,23.9,elcuv +2020-08-04 10:00:00,17.7,uwinc +2020-08-04 10:00:00,18.3,kbdhf +2020-08-04 10:00:00,22.2,asbca +2020-08-04 10:00:00,22.5,abfvc +2020-08-04 10:00:00,17.8,wczxz +2020-08-04 10:00:00,16.7,uyudz +2020-08-04 10:00:00,22.2,xsdlo +2020-08-04 10:00:00,23.4,jbaja +2020-08-04 10:00:00,22.3,notnn +2020-08-04 10:00:00,21.8,penwy +2020-08-04 10:00:00,22.3,ymbqc +2020-08-04 10:00:00,23.7,evrst +2020-08-04 10:00:00,21.3,bbllv +2020-08-04 10:00:00,17.9,xhmud +2020-08-04 10:00:00,17.9,boqsj +2020-08-04 10:00:00,21.6,ylfcv +2020-08-04 10:00:00,17.7,vpptw +2020-08-04 10:00:00,23.5,ghtvu +2020-08-04 10:00:00,22.4,yhphj +2020-08-04 10:00:00,18.0,zdern +2020-08-04 10:00:00,24.3,ivelx +2020-08-04 10:00:00,21.9,gjmcu +2020-08-04 10:00:00,21.8,kkndj +2020-08-04 10:00:00,22.5,fsyde +2020-08-04 10:00:00,21.9,ndjub +2020-08-04 10:00:00,22.1,jgick +2020-08-04 10:00:00,18.2,mzjgq +2020-08-04 10:00:00,24.0,nzkwk +2020-08-04 10:00:00,22.0,fnzdy +2020-08-04 10:00:00,22.9,phrpb +2020-08-04 10:00:00,21.6,frktv +2020-08-04 10:00:00,21.9,iiusu +2020-08-04 10:00:00,22.5,kxnqi +2020-08-04 10:00:00,17.6,qubeg +2020-08-04 10:00:00,23.0,zmila +2020-08-04 10:00:00,22.6,zkzik +2020-08-04 10:00:00,18.6,qbcne +2020-08-04 10:00:00,16.8,cnpjv +2020-08-04 10:00:00,19.5,estrc +2020-08-04 10:00:00,18.77778,sfmjs +2020-08-04 10:00:00,19.72222,ogagf +2020-08-04 10:00:00,20.72222,awcmx +2020-08-04 09:00:00,18.0,gkbid +2020-08-04 09:00:00,18.7,nfxow +2020-08-04 09:00:00,19.5,gnjnq +2020-08-04 09:00:00,18.5,plcis +2020-08-04 09:00:00,19.3,mijak +2020-08-04 09:00:00,18.2,vylxf +2020-08-04 09:00:00,18.1,qnrpm +2020-08-04 09:00:00,18.6,woteb +2020-08-04 09:00:00,17.7,eqfly +2020-08-04 09:00:00,19.3,ybdno +2020-08-04 09:00:00,18.3,savmq +2020-08-04 09:00:00,18.3,ezrwe +2020-08-04 09:00:00,18.8,dejab +2020-08-04 09:00:00,18.5,wccjf +2020-08-04 09:00:00,18.9,ckjnn +2020-08-04 09:00:00,18.5,gzoye +2020-08-04 09:00:00,19.8,kcymm +2020-08-04 09:00:00,19.2,sqrbg +2020-08-04 09:00:00,18.6,cbhsb +2020-08-04 09:00:00,19.0,lncdv +2020-08-04 09:00:00,19.4,qdekv +2020-08-04 09:00:00,18.7,gklox +2020-08-04 09:00:00,18.7,deobj +2020-08-04 09:00:00,18.7,zdpci +2020-08-04 09:00:00,19.1,bhpmz +2020-08-04 09:00:00,19.3,papaf +2020-08-04 09:00:00,18.8,lfagh +2020-08-04 09:00:00,19.3,gxcgu +2020-08-04 09:00:00,19.1,ifuxm +2020-08-04 09:00:00,19.0,zxslr +2020-08-04 09:00:00,19.4,bjszo +2020-08-04 09:00:00,17.6,owydy +2020-08-04 09:00:00,18.5,hgrlx +2020-08-04 09:00:00,18.0,kdowy +2020-08-04 09:00:00,16.7,pdbhy +2020-08-04 09:00:00,19.7,hipjh +2020-08-04 09:00:00,17.2,vmryv +2020-08-04 09:00:00,19.3,tnfna +2020-08-04 09:00:00,18.6,tkfhq +2020-08-04 09:00:00,19.1,kctnv +2020-08-04 09:00:00,19.7,snbhs +2020-08-04 09:00:00,18.4,bpvyz +2020-08-04 09:00:00,17.9,prtwa +2020-08-04 09:00:00,18.7,vjstu +2020-08-04 09:00:00,19.0,vpdsa +2020-08-04 09:00:00,19.3,efnlc +2020-08-04 09:00:00,18.3,wwuyi +2020-08-04 09:00:00,18.8,blpnl +2020-08-04 09:00:00,17.9,arpjv +2020-08-04 09:00:00,17.6,jdnkd +2020-08-04 09:00:00,14.7,cnpjv +2020-08-04 09:00:00,17.4,vpgiu +2020-08-04 09:00:00,18.4,dpmek +2020-08-04 09:00:00,16.9,jzcps +2020-08-04 09:00:00,17.6,iewqh +2020-08-04 09:00:00,19.27778,sqdlj +2020-08-04 09:00:00,17.0,bkanc +2020-08-04 09:00:00,20.0,dqtai +2020-08-04 09:00:00,19.55556,nqlto +2020-08-04 09:00:00,19.38889,ldaup +2020-08-04 09:00:00,18.61111,bzpyt +2020-08-04 09:00:00,19.77778,alybz +2020-08-04 09:00:00,19.05556,lzhen +2020-08-04 09:00:00,19.77778,tqfkn +2020-08-04 09:00:00,19.66667,rrnhm +2020-08-04 09:00:00,20.38889,oaumt +2020-08-04 09:00:00,20.22222,lgsvl +2020-08-04 09:00:00,20.22222,zyfvs +2020-08-04 09:00:00,18.38889,kzwzn +2020-08-04 09:00:00,18.72222,ovxxj +2020-08-04 09:00:00,19.77778,gmdwp +2020-08-04 09:00:00,18.66667,uxbrj +2020-08-04 09:00:00,19.77778,hjdlp +2020-08-04 09:00:00,19.66667,krvqc +2020-08-04 09:00:00,18.22222,fcplm +2020-08-04 09:00:00,17.33333,ilwqw +2020-08-04 09:00:00,20.5,ntpqk +2020-08-04 09:00:00,20.11111,wmerb +2020-08-04 09:00:00,19.61111,czljd +2020-08-04 09:00:00,19.83333,gdpxw +2020-08-04 09:00:00,20.11111,kjnyi +2020-08-04 09:00:00,20.55556,djtgy +2020-08-04 09:00:00,20.61111,uuhcx +2020-08-04 09:00:00,18.38889,ruzsu +2020-08-04 09:00:00,18.55556,dnlqg +2020-08-04 09:00:00,19.38889,indfm +2020-08-04 09:00:00,17.0,wkkho +2020-08-04 09:00:00,19.27778,hlrpq +2020-08-04 09:00:00,20.0,aioiq +2020-08-04 09:00:00,19.83333,pfnsl +2020-08-04 09:00:00,17.72222,cifvp +2020-08-04 09:00:00,19.38889,pvqjy +2020-08-04 09:00:00,18.94444,fgwmk +2020-08-04 09:00:00,17.72222,knnxf +2020-08-04 09:00:00,19.77778,jpbqw +2020-08-04 09:00:00,20.5,crehv +2020-08-04 09:00:00,20.11111,xpizq +2020-08-04 09:00:00,19.72222,uobqf +2020-08-04 09:00:00,18.83333,rmwdd +2020-08-04 09:00:00,20.61111,cgaaj +2020-08-04 09:00:00,20.22222,qaeee +2020-08-04 09:00:00,20.0,almmh +2020-08-04 09:00:00,17.22222,wppgj +2020-08-04 09:00:00,18.5,jhwop +2020-08-04 09:00:00,18.77778,hzsnb +2020-08-04 09:00:00,18.77778,ahwef +2020-08-04 09:00:00,19.5,ivehw +2020-08-04 09:00:00,17.72222,gxlyb +2020-08-04 09:00:00,19.38889,ofcyo +2020-08-04 09:00:00,18.11111,nadmj +2020-08-04 09:00:00,19.61111,rrblt +2020-08-04 09:00:00,19.27778,ehael +2020-08-04 09:00:00,21.0,kanab +2020-08-04 09:00:00,18.22222,rzbao +2020-08-04 09:00:00,19.88889,dolqy +2020-08-04 09:00:00,16.88889,jgflx +2020-08-04 09:00:00,19.32906,sboyq +2020-08-04 09:00:00,18.27778,jpeej +2020-08-04 09:00:00,19.88889,eyhqb +2020-08-04 09:00:00,19.38889,xtwrj +2020-08-04 09:00:00,18.61111,babhc +2020-08-04 09:00:00,19.0,ihrrd +2020-08-04 09:00:00,19.0,wvnwv +2020-08-04 09:00:00,21.61111,gyqkn +2020-08-04 09:00:00,20.61111,brgfy +2020-08-04 09:00:00,19.22222,kzqna +2020-08-04 09:00:00,17.27778,lojzd +2020-08-04 09:00:00,19.11111,cicho +2020-08-04 09:00:00,18.05556,psvsy +2020-08-04 09:00:00,17.77778,muwpb +2020-08-04 09:00:00,17.77778,xadne +2020-08-04 09:00:00,18.61111,sqdbm +2020-08-04 09:00:00,19.22222,aebcr +2020-08-04 09:00:00,20.0,lrpdu +2020-08-04 09:00:00,18.77778,cnixu +2020-08-04 09:00:00,20.72222,oyamr +2020-08-04 09:00:00,18.28889,xtoxr +2020-08-04 09:00:00,19.5,khcvi +2020-08-04 09:00:00,19.38889,cdvwy +2020-08-04 09:00:00,20.27778,oxhol +2020-08-04 09:00:00,19.61111,xcimd +2020-08-04 09:00:00,18.61111,bgdiq +2020-08-04 09:00:00,19.72222,jvrao +2020-08-04 09:00:00,19.5,oszcp +2020-08-04 09:00:00,20.27778,eprel +2020-08-04 09:00:00,18.0,rjkik +2020-08-04 09:00:00,19.27778,fpmbd +2020-08-04 09:00:00,20.27778,fpyxg +2020-08-04 09:00:00,20.11111,rpkjp +2020-08-04 09:00:00,18.2,fiqlz +2020-08-04 09:00:00,18.5,ujcyx +2020-08-04 09:00:00,19.0,nzfbp +2020-08-04 09:00:00,19.88889,dypjk +2020-08-04 09:00:00,19.72222,hbrkp +2020-08-04 09:00:00,19.27778,gffdv +2020-08-04 09:00:00,20.5,hnleb +2020-08-04 09:00:00,19.38889,crxzy +2020-08-04 09:00:00,20.22222,dhzaj +2020-08-04 09:00:00,16.44444,lezly +2020-08-04 09:00:00,19.11111,ibagr +2020-08-04 09:00:00,18.22222,estrc +2020-08-04 09:00:00,20.22222,fgiws +2020-08-04 09:00:00,19.38889,ljhka +2020-08-04 09:00:00,16.61111,ussxj +2020-08-04 09:00:00,19.77778,zhkbc +2020-08-04 09:00:00,19.72222,eopzi +2020-08-04 09:00:00,19.61111,oftqd +2020-08-04 09:00:00,19.72222,nrvjb +2020-08-04 09:00:00,20.11111,suooc +2020-08-04 09:00:00,19.61111,dipko +2020-08-04 09:00:00,18.27778,fbmhp +2020-08-04 09:00:00,19.11111,dzvyy +2020-08-04 09:00:00,19.77778,zislb +2020-08-04 09:00:00,20.38889,hogxc +2020-08-04 09:00:00,19.22222,xlaob +2020-08-04 09:00:00,19.11111,urzzk +2020-08-04 09:00:00,20.0,qayib +2020-08-04 09:00:00,18.77778,xiybo +2020-08-04 09:00:00,18.61111,kelro +2020-08-04 09:00:00,18.27778,uekqb +2020-08-04 09:00:00,20.83333,qxppc +2020-08-04 09:00:00,18.88889,nnyuc +2020-08-04 09:00:00,19.5,ztmms +2020-08-04 09:00:00,18.61111,amvul +2020-08-04 09:00:00,19.61111,ayiea +2020-08-04 09:00:00,17.0,qdlmf +2020-08-04 09:00:00,17.61111,ufldd +2020-08-04 09:00:00,18.38889,bnhjf +2020-08-04 09:00:00,18.88889,vsegj +2020-08-04 09:00:00,18.72222,dacwi +2020-08-04 09:00:00,20.11111,kvmjf +2020-08-04 09:00:00,20.22222,ipijg +2020-08-04 09:00:00,19.22222,vpelr +2020-08-04 09:00:00,19.0,sdvmr +2020-08-04 09:00:00,20.22222,bmwbn +2020-08-04 09:00:00,20.0,moxrx +2020-08-04 09:00:00,20.88889,rdbaf +2020-08-04 09:00:00,19.22222,altqr +2020-08-04 09:00:00,19.33333,ounrl +2020-08-04 09:00:00,19.72222,sdaqv +2020-08-04 09:00:00,18.11111,fbrxd +2020-08-04 09:00:00,18.88889,brnhd +2020-08-04 09:00:00,19.11111,jodzb +2020-08-04 09:00:00,18.72222,ogagf +2020-08-04 09:00:00,19.88889,nnjle +2020-08-04 09:00:00,18.72222,xsbps +2020-08-04 09:00:00,19.88889,mfwnz +2020-08-04 09:00:00,18.77778,qidgd +2020-08-04 09:00:00,20.0,uvcyf +2020-08-04 09:00:00,20.77778,awcmx +2020-08-04 09:00:00,19.38889,mmbpn +2020-08-04 09:00:00,20.2,pbfcx +2020-08-04 09:00:00,16.5,utryj +2020-08-04 09:00:00,16.6,uyhkr +2020-08-04 09:00:00,19.1,zjubp +2020-08-04 09:00:00,18.0,fwtoy +2020-08-04 09:00:00,17.0,bxidy +2020-08-04 09:00:00,18.0,begvh +2020-08-04 09:00:00,19.2,rlkjk +2020-08-04 09:00:00,19.9,hooqf +2020-08-04 09:00:00,18.2,ckdbs +2020-08-04 09:00:00,18.6,yhvwz +2020-08-04 09:00:00,18.1,nbutu +2020-08-04 09:00:00,18.3,kpolf +2020-08-04 09:00:00,18.3,frlga +2020-08-04 09:00:00,17.2,slxyr +2020-08-04 09:00:00,19.9,hcydv +2020-08-04 09:00:00,17.2,uwinc +2020-08-04 09:00:00,17.4,kbdhf +2020-08-04 09:00:00,19.5,wrrrc +2020-08-04 09:00:00,16.3,ypjjc +2020-08-04 09:00:00,17.6,kpphy +2020-08-04 09:00:00,18.2,peypk +2020-08-04 09:00:00,17.4,teeno +2020-08-04 09:00:00,19.5,kcxms +2020-08-04 09:00:00,18.0,ezrfg +2020-08-04 09:00:00,19.2,ieysd +2020-08-04 09:00:00,16.7,zcagk +2020-08-04 09:00:00,17.1,kokia +2020-08-04 09:00:00,18.0,jcjim +2020-08-04 09:00:00,17.5,lshyu +2020-08-04 09:00:00,18.7,bsypp +2020-08-04 09:00:00,19.0,ierzq +2020-08-04 09:00:00,18.1,chiez +2020-08-04 09:00:00,18.9,bgwme +2020-08-04 09:00:00,19.4,zhneg +2020-08-04 09:00:00,18.0,evahb +2020-08-04 09:00:00,19.1,rjnqu +2020-08-04 09:00:00,18.6,loycv +2020-08-04 09:00:00,18.6,dkinp +2020-08-04 09:00:00,18.3,rycdc +2020-08-04 09:00:00,14.9,yfrtn +2020-08-04 09:00:00,18.2,woeit +2020-08-04 09:00:00,21.5,iwmhh +2020-08-04 09:00:00,19.3,lczyo +2020-08-04 09:00:00,20.7,drzch +2020-08-04 09:00:00,17.1,cyjkp +2020-08-04 09:00:00,17.2,itjfr +2020-08-04 09:00:00,19.6,rzzfn +2020-08-04 09:00:00,17.9,yfsun +2020-08-04 09:00:00,17.8,piqev +2020-08-04 09:00:00,18.4,wfkqc +2020-08-04 09:00:00,19.9,wmowo +2020-08-04 09:00:00,18.7,glwbi +2020-08-04 09:00:00,17.4,nzavz +2020-08-04 09:00:00,19.4,xxkrz +2020-08-04 09:00:00,18.2,eabad +2020-08-04 09:00:00,17.4,qmeqk +2020-08-04 09:00:00,18.3,otbbb +2020-08-04 09:00:00,18.1,fvify +2020-08-04 09:00:00,16.6,qaeyo +2020-08-04 09:00:00,17.8,zmiyq +2020-08-04 09:00:00,18.8,egpmm +2020-08-04 09:00:00,18.4,fiokc +2020-08-04 09:00:00,18.9,djapy +2020-08-04 09:00:00,18.5,ptinq +2020-08-04 09:00:00,17.0,rgxtf +2020-08-04 09:00:00,20.6,smmgt +2020-08-04 09:00:00,14.9,yhpqj +2020-08-04 09:00:00,18.4,nzqbn +2020-08-04 09:00:00,17.7,vyupo +2020-08-04 09:00:00,16.0,ihmij +2020-08-04 09:00:00,17.0,imjov +2020-08-04 09:00:00,17.2,gncic +2020-08-04 09:00:00,17.9,notnn +2020-08-04 09:00:00,17.0,pfdzl +2020-08-04 09:00:00,17.8,tdslf +2020-08-04 09:00:00,19.2,nbkja +2020-08-04 09:00:00,17.1,znrow +2020-08-04 09:00:00,18.3,bazjf +2020-08-04 09:00:00,17.7,ldnly +2020-08-04 09:00:00,18.3,pqjez +2020-08-04 09:00:00,16.4,gwkuq +2020-08-04 09:00:00,17.8,erulv +2020-08-04 09:00:00,17.8,dwtik +2020-08-04 09:00:00,19.1,atqhc +2020-08-04 09:00:00,17.4,phmya +2020-08-04 09:00:00,16.9,boqsj +2020-08-04 09:00:00,17.5,yrsxm +2020-08-04 09:00:00,15.3,ztkxe +2020-08-04 09:00:00,17.3,xdywu +2020-08-04 09:00:00,19.3,bbije +2020-08-04 09:00:00,15.2,rikpg +2020-08-04 09:00:00,16.9,kavwb +2020-08-04 09:00:00,17.0,dtunu +2020-08-04 09:00:00,18.9,mkplm +2020-08-04 09:00:00,19.1,qwcnk +2020-08-04 09:00:00,19.5,drlil +2020-08-04 09:00:00,18.7,oolbj +2020-08-04 09:00:00,18.9,grqqe +2020-08-04 09:00:00,21.4,adykq +2020-08-04 09:00:00,20.1,pnlct +2020-08-04 09:00:00,21.4,ayahb +2020-08-04 09:00:00,17.4,ldzmh +2020-08-04 09:00:00,19.0,tflni +2020-08-04 09:00:00,16.6,waoya +2020-08-04 09:00:00,17.5,ioqjw +2020-08-04 09:00:00,18.6,pjlfa +2020-08-04 09:00:00,16.2,kdwaa +2020-08-04 09:00:00,19.3,pfwnb +2020-08-04 09:00:00,17.3,tqjbl +2020-08-04 09:00:00,19.9,lydbu +2020-08-04 09:00:00,19.6,aqcyr +2020-08-04 09:00:00,19.1,qkblc +2020-08-04 09:00:00,17.1,hwwfq +2020-08-04 09:00:00,18.1,hganh +2020-08-04 09:00:00,19.9,xfhpx +2020-08-04 09:00:00,17.7,ghtvu +2020-08-04 09:00:00,17.1,kzssz +2020-08-04 09:00:00,18.7,qqwil +2020-08-04 09:00:00,17.6,yhbkq +2020-08-04 09:00:00,18.2,fhyhy +2020-08-04 09:00:00,18.3,vmaxs +2020-08-04 09:00:00,18.5,xakyo +2020-08-04 09:00:00,20.5,tnqcp +2020-08-04 09:00:00,17.2,bddyz +2020-08-04 09:00:00,17.2,txryf +2020-08-04 09:00:00,18.8,giakp +2020-08-04 09:00:00,19.6,ahzhl +2020-08-04 09:00:00,19.1,rcimk +2020-08-04 09:00:00,18.5,cdeyn +2020-08-04 09:00:00,20.0,xxkgx +2020-08-04 09:00:00,16.6,qmpvs +2020-08-04 09:00:00,19.4,fxtyo +2020-08-04 09:00:00,18.6,mhjwb +2020-08-04 09:00:00,18.0,vtpem +2020-08-04 09:00:00,22.0,llziw +2020-08-04 09:00:00,19.1,noagn +2020-08-04 09:00:00,17.1,cotha +2020-08-04 09:00:00,19.0,rzdnc +2020-08-04 09:00:00,18.8,ggxnz +2020-08-04 09:00:00,18.4,bpbxb +2020-08-04 09:00:00,17.9,ztxqk +2020-08-04 09:00:00,18.3,ooeaf +2020-08-04 09:00:00,18.2,stszj +2020-08-04 09:00:00,17.0,hvouk +2020-08-04 09:00:00,19.5,nxfem +2020-08-04 09:00:00,18.5,plodv +2020-08-04 09:00:00,19.2,xrkmq +2020-08-04 09:00:00,16.6,yejug +2020-08-04 09:00:00,17.0,pcbtj +2020-08-04 09:00:00,17.9,urexq +2020-08-04 09:00:00,15.5,ndute +2020-08-04 09:00:00,17.3,lywjv +2020-08-04 09:00:00,18.3,hiehy +2020-08-04 09:00:00,17.6,kjbdx +2020-08-04 09:00:00,20.0,gjmcu +2020-08-04 09:00:00,16.9,oflot +2020-08-04 09:00:00,19.1,thrud +2020-08-04 09:00:00,18.4,vxtor +2020-08-04 09:00:00,18.1,isizb +2020-08-04 09:00:00,17.6,otvrh +2020-08-04 09:00:00,16.5,yhocf +2020-08-04 09:00:00,19.8,fsyde +2020-08-04 09:00:00,20.0,mqpjl +2020-08-04 09:00:00,17.5,wiiyu +2020-08-04 09:00:00,17.0,qavrb +2020-08-04 09:00:00,18.8,ihown +2020-08-04 09:00:00,18.7,zuejk +2020-08-04 09:00:00,16.7,edqjm +2020-08-04 09:00:00,19.6,jofxa +2020-08-04 09:00:00,17.7,syndc +2020-08-04 09:00:00,19.3,cdxbb +2020-08-04 09:00:00,18.5,wguaq +2020-08-04 09:00:00,19.7,hnxwu +2020-08-04 09:00:00,19.6,ywiqb +2020-08-04 09:00:00,19.8,wpsoy +2020-08-04 09:00:00,15.9,svdum +2020-08-04 09:00:00,18.2,acogf +2020-08-04 09:00:00,17.4,mzjgq +2020-08-04 09:00:00,19.1,wwdah +2020-08-04 09:00:00,19.2,rdtis +2020-08-04 09:00:00,19.5,nfrzt +2020-08-04 09:00:00,16.4,gcjrh +2020-08-04 09:00:00,19.8,xpvwh +2020-08-04 09:00:00,17.7,wfvrm +2020-08-04 09:00:00,18.8,vysdp +2020-08-04 09:00:00,19.2,qpvdo +2020-08-04 09:00:00,19.4,pcofv +2020-08-04 09:00:00,19.3,dlwrl +2020-08-04 09:00:00,17.6,zichl +2020-08-04 09:00:00,18.7,wrmic +2020-08-04 09:00:00,17.5,uotkk +2020-08-04 09:00:00,17.6,kbpjv +2020-08-04 09:00:00,17.8,jqare +2020-08-04 09:00:00,17.6,ckorf +2020-08-04 09:00:00,18.1,slrzo +2020-08-04 09:00:00,18.2,tlawu +2020-08-04 09:00:00,18.1,lybxy +2020-08-04 09:00:00,17.3,bwzzs +2020-08-04 09:00:00,18.1,reose +2020-08-04 09:00:00,17.1,rbaay +2020-08-04 09:00:00,19.0,yasgp +2020-08-04 09:00:00,19.1,aksdd +2020-08-04 09:00:00,16.2,ohryf +2020-08-04 09:00:00,17.1,qyxbu +2020-08-04 09:00:00,17.4,fiyly +2020-08-04 09:00:00,18.6,rkoeu +2020-08-04 09:00:00,19.8,frktv +2020-08-04 09:00:00,18.0,qzgcp +2020-08-04 09:00:00,19.6,lfofy +2020-08-04 09:00:00,18.0,vnvbx +2020-08-04 09:00:00,19.6,tihag +2020-08-04 09:00:00,18.3,iogus +2020-08-04 09:00:00,18.6,oqyss +2020-08-04 09:00:00,17.4,zplai +2020-08-04 09:00:00,19.4,kvmrm +2020-08-04 09:00:00,18.0,ttgwc +2020-08-04 09:00:00,18.6,haptn +2020-08-04 09:00:00,19.8,acdos +2020-08-04 09:00:00,19.1,ucjbd +2020-08-04 09:00:00,17.7,dldrv +2020-08-04 09:00:00,19.1,koeci +2020-08-04 09:00:00,19.2,ipesq +2020-08-04 09:00:00,18.3,iucem +2020-08-04 09:00:00,16.8,vbdzv +2020-08-04 09:00:00,16.8,qubeg +2020-08-04 09:00:00,18.0,rhqvm +2020-08-04 09:00:00,17.7,xbxbe +2020-08-04 09:00:00,16.6,rmdgs +2020-08-04 09:00:00,18.9,jzptm +2020-08-04 09:00:00,17.5,kcvas +2020-08-04 09:00:00,18.1,mvgcb +2020-08-04 09:00:00,18.4,xhztq +2020-08-04 09:00:00,19.1,mktph +2020-08-04 09:00:00,17.0,jfnoh +2020-08-04 09:00:00,17.7,prmvg +2020-08-04 09:00:00,20.5,ytuuu +2020-08-04 09:00:00,17.7,leety +2020-08-04 09:00:00,20.0,zmila +2020-08-04 09:00:00,18.4,iiaah +2020-08-04 09:00:00,17.2,tffmg +2020-08-04 09:00:00,18.5,cnvzb +2020-08-04 09:00:00,20.5,otwdf +2020-08-04 09:00:00,18.9,dsslb +2020-08-04 09:00:00,19.7,bvlsj +2020-08-04 09:00:00,20.0,hgatb +2020-08-04 09:00:00,16.2,zwknj +2020-08-04 09:00:00,22.6,yuxlt +2020-08-04 09:00:00,16.3,jhdpi +2020-08-04 09:00:00,18.3,qttbn +2020-08-04 09:00:00,17.4,gqmws +2020-08-04 09:00:00,19.6,qivsx +2020-08-04 09:00:00,18.5,muuvq +2020-08-04 09:00:00,18.2,mtqnc +2020-08-04 09:00:00,17.3,copbg +2020-08-04 09:00:00,22.1,zkzik +2020-08-04 09:00:00,17.2,qbcne +2020-08-04 09:00:00,17.4,pidkl +2020-08-04 09:00:00,18.1,rvfml +2020-08-04 09:00:00,0.0,ejfoz +2020-08-04 09:00:00,20.5,vlwwz +2020-08-04 09:00:00,18.4,doxbb +2020-08-04 09:00:00,25.1,tykui +2020-08-04 09:00:00,20.1,evobf +2020-08-04 09:00:00,16.3,xokqh +2020-08-04 09:00:00,18.77778,mikqn +2020-08-04 09:00:00,26.27778,vleon +2020-08-04 09:00:00,21.38889,bttyj +2020-08-04 09:00:00,20.0,wgxpj +2020-08-04 09:00:00,21.11111,nuzsv +2020-08-04 09:00:00,20.11111,mqzft +2020-08-04 09:00:00,16.05556,hvful +2020-08-04 09:00:00,22.11111,kenrf +2020-08-04 09:00:00,20.61111,jwgjj +2020-08-04 09:00:00,21.72222,mrsle +2020-08-04 09:00:00,23.11111,fzckm +2020-08-04 09:00:00,17.66667,ssjlf +2020-08-04 09:00:00,13.38889,sszbf +2020-08-04 09:00:00,24.33333,fpkpz +2020-08-04 09:00:00,20.11111,zvyyj +2020-08-04 09:00:00,22.72222,okamk +2020-08-04 09:00:00,20.55556,xlski +2020-08-04 09:00:00,23.88889,hivjq +2020-08-04 09:00:00,21.38889,kfksc +2020-08-04 09:00:00,22.5,noubl +2020-08-04 09:00:00,21.5,jayci +2020-08-04 09:00:00,20.05556,psxfe +2020-08-04 09:00:00,23.22222,zdrio +2020-08-04 09:00:00,20.88889,jzkgm +2020-08-04 09:00:00,20.61111,tjquy +2020-08-04 09:00:00,21.22222,cqati +2020-08-04 09:00:00,20.72222,wgnku +2020-08-04 09:00:00,21.72222,qvcca +2020-08-04 09:00:00,20.88889,muaeg +2020-08-04 09:00:00,19.22222,wdwen +2020-08-04 09:00:00,23.22222,khlfx +2020-08-04 09:00:00,17.88889,vyect +2020-08-04 09:00:00,19.27778,hugfh +2020-08-04 09:00:00,19.88889,imjpm +2020-08-04 09:00:00,26.55556,fkyme +2020-08-04 09:00:00,21.38889,qomek +2020-08-04 09:00:00,20.88889,kqjds +2020-08-04 09:00:00,16.77778,oapgx +2020-08-04 09:00:00,19.61111,dsczo +2020-08-04 09:00:00,21.72222,mjbzs +2020-08-04 09:00:00,20.4,yiywu +2020-08-04 09:00:00,21.7,dveuq +2020-08-04 09:00:00,25.1,ecvym +2020-08-04 09:00:00,23.7,oaqph +2020-08-04 09:00:00,23.3,fecem +2020-08-04 09:00:00,16.3,nbitj +2020-08-04 09:00:00,18.9,cgghn +2020-08-04 09:00:00,24.5,pbklv +2020-08-04 09:00:00,20.6,ljfve +2020-08-04 09:00:00,22.6,yjeoj +2020-08-04 09:00:00,26.5,hriee +2020-08-04 09:00:00,24.9,lctcs +2020-08-04 09:00:00,20.9,ijzkb +2020-08-04 09:00:00,21.5,cotxr +2020-08-04 09:00:00,22.0,bsxux +2020-08-04 09:00:00,33.1,cwavf +2020-08-04 09:00:00,20.9,xtwil +2020-08-04 09:00:00,32.1,mjtko +2020-08-04 09:00:00,24.2,fcukz +2020-08-04 09:00:00,22.5,elcuv +2020-08-04 09:00:00,20.8,ezebq +2020-08-04 09:00:00,22.9,klykn +2020-08-04 09:00:00,28.4,ihhmy +2020-08-04 09:00:00,23.6,mxwwj +2020-08-04 09:00:00,35.5,pahze +2020-08-04 09:00:00,24.9,cczvb +2020-08-04 09:00:00,22.9,tjsch +2020-08-04 09:00:00,26.4,tywrl +2020-08-04 09:00:00,39.7,viely +2020-08-04 09:00:00,24.7,svxom +2020-08-04 09:00:00,25.2,abfvc +2020-08-04 09:00:00,23.9,nxits +2020-08-04 09:00:00,16.8,peory +2020-08-04 09:00:00,19.7,agneq +2020-08-04 09:00:00,23.3,ggxsj +2020-08-04 09:00:00,21.8,wvcip +2020-08-04 09:00:00,23.1,ixmaf +2020-08-04 09:00:00,29.1,oqelg +2020-08-04 09:00:00,27.7,ejrdd +2020-08-04 09:00:00,27.3,mbdop +2020-08-04 09:00:00,20.8,wcuan +2020-08-04 09:00:00,23.6,fyzuj +2020-08-04 09:00:00,23.5,kqsdd +2020-08-04 09:00:00,21.8,iysis +2020-08-04 09:00:00,21.2,wgaiu +2020-08-04 09:00:00,19.9,mbunu +2020-08-04 09:00:00,24.1,lyhqc +2020-08-04 09:00:00,37.0,ztgfu +2020-08-04 09:00:00,21.8,fahhr +2020-08-04 09:00:00,18.8,fislm +2020-08-04 09:00:00,23.7,jyvth +2020-08-04 09:00:00,31.4,byetq +2020-08-04 09:00:00,16.3,jqjxq +2020-08-04 09:00:00,28.2,owtyy +2020-08-04 09:00:00,21.7,lpbsn +2020-08-04 09:00:00,21.8,ipaod +2020-08-04 09:00:00,20.9,axeow +2020-08-04 09:00:00,24.1,jtxeg +2020-08-04 09:00:00,21.8,sifce +2020-08-04 09:00:00,20.1,tggup +2020-08-04 09:00:00,25.2,ahobs +2020-08-04 09:00:00,19.5,pmfnb +2020-08-04 09:00:00,23.2,ynbjr +2020-08-04 09:00:00,22.3,zjnnm +2020-08-04 09:00:00,28.9,pxbit +2020-08-04 09:00:00,15.6,ginpe +2020-08-04 09:00:00,17.8,auahq +2020-08-04 09:00:00,24.9,kddvu +2020-08-04 09:00:00,22.1,jbaja +2020-08-04 09:00:00,32.8,uetgx +2020-08-04 09:00:00,23.2,uutbi +2020-08-04 09:00:00,19.4,usdwm +2020-08-04 09:00:00,16.8,ktcei +2020-08-04 09:00:00,22.6,oytin +2020-08-04 09:00:00,22.1,lfvqk +2020-08-04 09:00:00,23.7,zxtht +2020-08-04 09:00:00,29.7,ypvib +2020-08-04 09:00:00,21.4,penwy +2020-08-04 09:00:00,19.6,pcjst +2020-08-04 09:00:00,23.3,mjxzf +2020-08-04 09:00:00,21.5,fccef +2020-08-04 09:00:00,23.4,ymbqc +2020-08-04 09:00:00,15.6,knzsr +2020-08-04 09:00:00,30.5,uujoy +2020-08-04 09:00:00,22.1,jbgdo +2020-08-04 09:00:00,24.7,irzil +2020-08-04 09:00:00,24.8,dyfil +2020-08-04 09:00:00,20.9,bbllv +2020-08-04 09:00:00,23.6,vvtws +2020-08-04 09:00:00,22.0,ngmnm +2020-08-04 09:00:00,29.1,gkwvp +2020-08-04 09:00:00,23.6,bjsta +2020-08-04 09:00:00,21.6,dbibg +2020-08-04 09:00:00,16.6,pfcaa +2020-08-04 09:00:00,18.5,jpeyd +2020-08-04 09:00:00,15.1,kimee +2020-08-04 09:00:00,22.1,gzfmr +2020-08-04 09:00:00,21.8,ivkvr +2020-08-04 09:00:00,24.0,mblxl +2020-08-04 09:00:00,24.1,bduku +2020-08-04 09:00:00,19.8,dhvfr +2020-08-04 09:00:00,20.9,igylq +2020-08-04 09:00:00,19.0,mugrd +2020-08-04 09:00:00,20.1,ymhhf +2020-08-04 09:00:00,24.3,ljwns +2020-08-04 09:00:00,25.3,gntwd +2020-08-04 09:00:00,22.9,kojsr +2020-08-04 09:00:00,22.7,fsnbh +2020-08-04 09:00:00,22.4,xuuro +2020-08-04 09:00:00,16.4,apctj +2020-08-04 09:00:00,17.5,ycbiy +2020-08-04 09:00:00,20.6,zrgnz +2020-08-04 09:00:00,24.6,mocpf +2020-08-04 09:00:00,27.2,vudfc +2020-08-04 09:00:00,22.7,cwviz +2020-08-04 09:00:00,24.3,cysqv +2020-08-04 09:00:00,33.7,bytpr +2020-08-04 09:00:00,22.1,vbfow +2020-08-04 09:00:00,20.6,dvhqy +2020-08-04 09:00:00,21.6,dgwvq +2020-08-04 09:00:00,16.0,ejghf +2020-08-04 09:00:00,15.7,vycbk +2020-08-04 09:00:00,29.1,jvkyi +2020-08-04 09:00:00,20.1,mztnu +2020-08-04 09:00:00,24.6,okuny +2020-08-04 09:00:00,28.1,wuguf +2020-08-04 09:00:00,35.8,vlvrq +2020-08-04 09:00:00,21.4,aiint +2020-08-04 09:00:00,29.3,eptar +2020-08-04 09:00:00,22.4,iwcxs +2020-08-04 09:00:00,20.0,umzkd +2020-08-04 09:00:00,20.7,jmpwu +2020-08-04 09:00:00,22.8,ivelx +2020-08-04 09:00:00,29.1,fwvpu +2020-08-04 09:00:00,22.5,tjduz +2020-08-04 09:00:00,20.3,qtxsp +2020-08-04 09:00:00,21.1,hcitm +2020-08-04 09:00:00,19.9,nsqtr +2020-08-04 09:00:00,24.0,hbwiu +2020-08-04 09:00:00,21.6,ouhci +2020-08-04 09:00:00,20.1,qnknt +2020-08-04 09:00:00,25.2,nksxy +2020-08-04 09:00:00,21.1,ndjub +2020-08-04 09:00:00,39.1,npwwe +2020-08-04 09:00:00,22.1,joszi +2020-08-04 09:00:00,22.5,ipyve +2020-08-04 09:00:00,20.8,jgick +2020-08-04 09:00:00,19.5,lrhew +2020-08-04 09:00:00,25.0,drbeo +2020-08-04 09:00:00,21.4,iqocu +2020-08-04 09:00:00,22.6,nzkwk +2020-08-04 09:00:00,22.3,gunnj +2020-08-04 09:00:00,22.0,cywuc +2020-08-04 09:00:00,16.5,uakik +2020-08-04 09:00:00,27.0,wquxs +2020-08-04 09:00:00,24.7,whfxy +2020-08-04 09:00:00,20.1,nncsb +2020-08-04 09:00:00,21.9,vhcmj +2020-08-04 09:00:00,25.2,kretn +2020-08-04 09:00:00,28.7,rkkaw +2020-08-04 09:00:00,21.1,kultx +2020-08-04 09:00:00,25.3,rfzya +2020-08-04 09:00:00,25.4,eafjs +2020-08-04 09:00:00,21.0,htvkq +2020-08-04 09:00:00,20.6,haxap +2020-08-04 09:00:00,22.1,wlvza +2020-08-04 09:00:00,33.2,pduvn +2020-08-04 09:00:00,21.7,iiusu +2020-08-04 09:00:00,24.4,gmdsg +2020-08-04 09:00:00,22.1,awktm +2020-08-04 09:00:00,22.8,fynse +2020-08-04 09:00:00,24.6,wssfq +2020-08-04 09:00:00,26.2,ojthh +2020-08-04 09:00:00,24.3,ojeut +2020-08-04 09:00:00,27.6,dwqax +2020-08-04 09:00:00,27.1,hphlh +2020-08-04 09:00:00,22.5,kjmfs +2020-08-04 09:00:00,21.6,lsify +2020-08-04 09:00:00,20.7,fkgmp +2020-08-04 09:00:00,22.9,drmxk +2020-08-04 09:00:00,21.4,deaco +2020-08-04 09:00:00,22.3,btxrm +2020-08-04 09:00:00,29.1,husmx +2020-08-04 09:00:00,20.8,tcfkw +2020-08-04 09:00:00,26.1,wgefq +2020-08-04 09:00:00,25.9,lvmjm +2020-08-04 09:00:00,22.2,tqrcb +2020-08-04 09:00:00,24.3,nggxz +2020-08-04 09:00:00,25.7,tegfb +2020-08-04 09:00:00,21.8,pwjcp +2020-08-04 09:00:00,19.1,ltfms +2020-08-04 09:00:00,24.8,aryhl +2020-08-04 09:00:00,29.7,yymxg +2020-08-04 09:00:00,27.3,vdwsy +2020-08-04 09:00:00,21.7,rwvtt +2020-08-04 09:00:00,36.2,hmxwa +2020-08-04 09:00:00,20.72222,blmxa +2020-08-04 09:00:00,20.88889,owdub +2020-08-04 09:00:00,22.16667,dwsvq +2020-08-04 09:00:00,21.77778,kbvuy +2020-08-04 09:00:00,20.61111,tgzxw +2020-08-04 09:00:00,21.33333,lxbic +2020-08-04 09:00:00,20.94444,vlcim +2020-08-04 09:00:00,20.77778,mnywm +2020-08-04 09:00:00,21.27778,dkaac +2020-08-04 09:00:00,21.11111,fnnnx +2020-08-04 09:00:00,20.88889,hbhhs +2020-08-04 09:00:00,20.77778,qrytb +2020-08-04 09:00:00,21.72222,hcdwa +2020-08-04 09:00:00,21.33333,zkvzt +2020-08-04 09:00:00,21.88889,krnzm +2020-08-04 09:00:00,17.11111,bkahv +2020-08-04 09:00:00,20.88889,kpmly +2020-08-04 09:00:00,20.38889,kjgbf +2020-08-04 09:00:00,22.1,xataf +2020-08-04 09:00:00,20.2,igbxx +2020-08-04 09:00:00,21.2,gvjom +2020-08-04 09:00:00,20.3,mnczw +2020-08-04 09:00:00,20.6,asbca +2020-08-04 09:00:00,15.9,wznvv +2020-08-04 09:00:00,16.2,lajyk +2020-08-04 09:00:00,16.4,wczxz +2020-08-04 09:00:00,21.3,hxidk +2020-08-04 09:00:00,15.4,uyudz +2020-08-04 09:00:00,20.3,xsdlo +2020-08-04 09:00:00,21.2,qmcjn +2020-08-04 09:00:00,19.9,zqmdp +2020-08-04 09:00:00,21.6,rsmae +2020-08-04 09:00:00,22.0,evrst +2020-08-04 09:00:00,16.8,xhmud +2020-08-04 09:00:00,20.2,ylfcv +2020-08-04 09:00:00,16.4,vpptw +2020-08-04 09:00:00,20.2,vkmls +2020-08-04 09:00:00,22.3,xqytl +2020-08-04 09:00:00,21.6,cikgj +2020-08-04 09:00:00,21.3,vpzqo +2020-08-04 09:00:00,20.9,yhphj +2020-08-04 09:00:00,20.3,ffybf +2020-08-04 09:00:00,17.2,zdern +2020-08-04 09:00:00,20.5,tcblk +2020-08-04 09:00:00,15.2,adwmg +2020-08-04 09:00:00,20.8,fnzdy +2020-08-04 09:00:00,20.1,phrpb +2020-08-04 09:00:00,20.4,llmmm +2020-08-04 09:00:00,20.7,mmbcs +2020-08-04 09:00:00,16.0,btvwv +2020-08-04 09:00:00,21.7,usevc +2020-08-04 09:00:00,19.7,gecot +2020-08-04 09:00:00,20.7,evglv +2020-08-04 09:00:00,20.8,cmtwl +2020-08-04 09:00:00,20.3,ndvqc +2020-08-04 09:00:00,17.61111,sfmjs +2020-08-04 08:00:00,16.9,gkbid +2020-08-04 08:00:00,17.7,nfxow +2020-08-04 08:00:00,18.4,vlwwz +2020-08-04 08:00:00,16.7,gnjnq +2020-08-04 08:00:00,17.2,plcis +2020-08-04 08:00:00,17.4,mijak +2020-08-04 08:00:00,17.1,vylxf +2020-08-04 08:00:00,17.7,qnrpm +2020-08-04 08:00:00,16.8,woteb +2020-08-04 08:00:00,17.1,eqfly +2020-08-04 08:00:00,17.3,doxbb +2020-08-04 08:00:00,17.9,ybdno +2020-08-04 08:00:00,16.9,savmq +2020-08-04 08:00:00,17.1,ezrwe +2020-08-04 08:00:00,18.1,dejab +2020-08-04 08:00:00,16.7,wccjf +2020-08-04 08:00:00,17.8,ckjnn +2020-08-04 08:00:00,17.6,gzoye +2020-08-04 08:00:00,18.2,evobf +2020-08-04 08:00:00,17.5,sqrbg +2020-08-04 08:00:00,17.6,cbhsb +2020-08-04 08:00:00,18.8,lncdv +2020-08-04 08:00:00,18.6,qdekv +2020-08-04 08:00:00,17.9,gklox +2020-08-04 08:00:00,17.6,deobj +2020-08-04 08:00:00,18.0,zdpci +2020-08-04 08:00:00,17.8,bhpmz +2020-08-04 08:00:00,19.0,papaf +2020-08-04 08:00:00,18.0,lfagh +2020-08-04 08:00:00,17.7,gxcgu +2020-08-04 08:00:00,18.3,ifuxm +2020-08-04 08:00:00,17.9,zxslr +2020-08-04 08:00:00,17.5,bjszo +2020-08-04 08:00:00,17.4,owydy +2020-08-04 08:00:00,17.6,hgrlx +2020-08-04 08:00:00,17.3,kdowy +2020-08-04 08:00:00,14.8,pdbhy +2020-08-04 08:00:00,17.7,hipjh +2020-08-04 08:00:00,15.5,vmryv +2020-08-04 08:00:00,13.5,xokqh +2020-08-04 08:00:00,18.7,tnfna +2020-08-04 08:00:00,18.1,kctnv +2020-08-04 08:00:00,18.5,snbhs +2020-08-04 08:00:00,17.3,bpvyz +2020-08-04 08:00:00,17.2,prtwa +2020-08-04 08:00:00,17.0,vjstu +2020-08-04 08:00:00,17.3,vpdsa +2020-08-04 08:00:00,17.8,efnlc +2020-08-04 08:00:00,17.3,wwuyi +2020-08-04 08:00:00,18.3,blpnl +2020-08-04 08:00:00,17.1,arpjv +2020-08-04 08:00:00,14.7,jdnkd +2020-08-04 08:00:00,13.6,cnpjv +2020-08-04 08:00:00,15.9,vpgiu +2020-08-04 08:00:00,16.7,dpmek +2020-08-04 08:00:00,15.2,jzcps +2020-08-04 08:00:00,18.22222,sqdlj +2020-08-04 08:00:00,18.16667,dqtai +2020-08-04 08:00:00,17.38889,nqlto +2020-08-04 08:00:00,18.66667,mikqn +2020-08-04 08:00:00,18.55556,ldaup +2020-08-04 08:00:00,17.72222,bzpyt +2020-08-04 08:00:00,18.83333,alybz +2020-08-04 08:00:00,16.27778,lzhen +2020-08-04 08:00:00,18.38889,tqfkn +2020-08-04 08:00:00,16.72222,wgxpj +2020-08-04 08:00:00,19.0,lgsvl +2020-08-04 08:00:00,18.5,zyfvs +2020-08-04 08:00:00,17.05556,kzwzn +2020-08-04 08:00:00,18.77778,blmxa +2020-08-04 08:00:00,16.66667,ovxxj +2020-08-04 08:00:00,16.05556,uxbrj +2020-08-04 08:00:00,18.16667,krvqc +2020-08-04 08:00:00,17.38889,fcplm +2020-08-04 08:00:00,16.38889,ilwqw +2020-08-04 08:00:00,18.88889,wmerb +2020-08-04 08:00:00,17.61111,czljd +2020-08-04 08:00:00,18.11111,owdub +2020-08-04 08:00:00,17.05556,ruzsu +2020-08-04 08:00:00,16.77778,dnlqg +2020-08-04 08:00:00,17.61111,tgzxw +2020-08-04 08:00:00,16.77778,wkkho +2020-08-04 08:00:00,17.88889,hlrpq +2020-08-04 08:00:00,16.44444,ssjlf +2020-08-04 08:00:00,17.05556,pfnsl +2020-08-04 08:00:00,18.88889,vlcim +2020-08-04 08:00:00,19.0,dkaac +2020-08-04 08:00:00,15.88889,cifvp +2020-08-04 08:00:00,18.88889,fnnnx +2020-08-04 08:00:00,17.61111,pvqjy +2020-08-04 08:00:00,17.5,tckyu +2020-08-04 08:00:00,16.83333,knnxf +2020-08-04 08:00:00,18.33333,jpbqw +2020-08-04 08:00:00,17.27778,xpizq +2020-08-04 08:00:00,18.27778,zvyyj +2020-08-04 08:00:00,17.05556,rmwdd +2020-08-04 08:00:00,18.61111,okamk +2020-08-04 08:00:00,18.55556,almmh +2020-08-04 08:00:00,15.22222,wppgj +2020-08-04 08:00:00,17.22222,hzsnb +2020-08-04 08:00:00,18.38889,ahwef +2020-08-04 08:00:00,17.77778,ivehw +2020-08-04 08:00:00,15.77778,gxlyb +2020-08-04 08:00:00,17.88889,ofcyo +2020-08-04 08:00:00,18.22222,nadmj +2020-08-04 08:00:00,18.0,rrblt +2020-08-04 08:00:00,17.88889,ehael +2020-08-04 08:00:00,17.77778,kanab +2020-08-04 08:00:00,17.61111,rzbao +2020-08-04 08:00:00,18.22222,dolqy +2020-08-04 08:00:00,15.61111,jgflx +2020-08-04 08:00:00,17.38022,sboyq +2020-08-04 08:00:00,17.38889,jpeej +2020-08-04 08:00:00,18.38889,eyhqb +2020-08-04 08:00:00,18.22222,xtwrj +2020-08-04 08:00:00,18.88889,babhc +2020-08-04 08:00:00,16.77778,ihrrd +2020-08-04 08:00:00,17.38889,wvnwv +2020-08-04 08:00:00,17.27778,gyqkn +2020-08-04 08:00:00,16.11111,kzqna +2020-08-04 08:00:00,16.22222,lojzd +2020-08-04 08:00:00,18.11111,zdrio +2020-08-04 08:00:00,16.88889,cicho +2020-08-04 08:00:00,16.83333,psvsy +2020-08-04 08:00:00,14.44444,muwpb +2020-08-04 08:00:00,16.77778,xadne +2020-08-04 08:00:00,16.5,sqdbm +2020-08-04 08:00:00,18.27778,aebcr +2020-08-04 08:00:00,17.5,lrpdu +2020-08-04 08:00:00,17.11111,cnixu +2020-08-04 08:00:00,19.22222,oyamr +2020-08-04 08:00:00,17.12778,xtoxr +2020-08-04 08:00:00,17.77778,kpmly +2020-08-04 08:00:00,17.72222,khcvi +2020-08-04 08:00:00,18.0,cdvwy +2020-08-04 08:00:00,18.22222,oxhol +2020-08-04 08:00:00,17.77778,xcimd +2020-08-04 08:00:00,17.77778,bgdiq +2020-08-04 08:00:00,17.22222,jvrao +2020-08-04 08:00:00,18.22222,eprel +2020-08-04 08:00:00,16.27778,rjkik +2020-08-04 08:00:00,18.11111,fpmbd +2020-08-04 08:00:00,18.72222,rpkjp +2020-08-04 08:00:00,17.0,fiqlz +2020-08-04 08:00:00,17.61111,ujcyx +2020-08-04 08:00:00,17.72222,nzfbp +2020-08-04 08:00:00,18.0,dypjk +2020-08-04 08:00:00,17.27778,hbrkp +2020-08-04 08:00:00,18.0,gffdv +2020-08-04 08:00:00,18.77778,crxzy +2020-08-04 08:00:00,18.72222,wgnku +2020-08-04 08:00:00,14.27778,lezly +2020-08-04 08:00:00,18.22222,ibagr +2020-08-04 08:00:00,16.38889,ussxj +2020-08-04 08:00:00,18.27778,zhkbc +2020-08-04 08:00:00,18.72222,eopzi +2020-08-04 08:00:00,18.0,nrvjb +2020-08-04 08:00:00,18.22222,dipko +2020-08-04 08:00:00,16.72222,fbmhp +2020-08-04 08:00:00,16.72222,dzvyy +2020-08-04 08:00:00,16.77778,zislb +2020-08-04 08:00:00,18.22222,hogxc +2020-08-04 08:00:00,18.38889,xlaob +2020-08-04 08:00:00,17.72222,urzzk +2020-08-04 08:00:00,18.88889,qayib +2020-08-04 08:00:00,17.72222,xiybo +2020-08-04 08:00:00,17.77778,kelro +2020-08-04 08:00:00,17.22222,uekqb +2020-08-04 08:00:00,18.61111,qxppc +2020-08-04 08:00:00,18.27778,ztmms +2020-08-04 08:00:00,18.33333,muaeg +2020-08-04 08:00:00,17.77778,amvul +2020-08-04 08:00:00,18.27778,ayiea +2020-08-04 08:00:00,15.77778,qdlmf +2020-08-04 08:00:00,15.22222,ufldd +2020-08-04 08:00:00,17.5,bnhjf +2020-08-04 08:00:00,17.88889,vsegj +2020-08-04 08:00:00,17.11111,dacwi +2020-08-04 08:00:00,17.05556,ipijg +2020-08-04 08:00:00,17.11111,vpelr +2020-08-04 08:00:00,17.88889,bmwbn +2020-08-04 08:00:00,16.77778,hugfh +2020-08-04 08:00:00,18.66667,moxrx +2020-08-04 08:00:00,17.72222,altqr +2020-08-04 08:00:00,18.0,ounrl +2020-08-04 08:00:00,18.38889,sdaqv +2020-08-04 08:00:00,16.72222,fbrxd +2020-08-04 08:00:00,17.0,brnhd +2020-08-04 08:00:00,17.38889,jodzb +2020-08-04 08:00:00,17.72222,nnjle +2020-08-04 08:00:00,17.88889,kqjds +2020-08-04 08:00:00,17.11111,xsbps +2020-08-04 08:00:00,18.0,mfwnz +2020-08-04 08:00:00,17.11111,qidgd +2020-08-04 08:00:00,18.61111,uvcyf +2020-08-04 08:00:00,17.11111,mmbpn +2020-08-04 08:00:00,17.7,pbfcx +2020-08-04 08:00:00,15.4,utryj +2020-08-04 08:00:00,18.4,yiywu +2020-08-04 08:00:00,15.9,uyhkr +2020-08-04 08:00:00,16.7,zjubp +2020-08-04 08:00:00,17.0,fwtoy +2020-08-04 08:00:00,15.9,bxidy +2020-08-04 08:00:00,16.1,begvh +2020-08-04 08:00:00,17.5,rlkjk +2020-08-04 08:00:00,18.0,hooqf +2020-08-04 08:00:00,17.0,cgghn +2020-08-04 08:00:00,16.4,ckdbs +2020-08-04 08:00:00,17.4,yhvwz +2020-08-04 08:00:00,17.1,nbutu +2020-08-04 08:00:00,18.5,bsxux +2020-08-04 08:00:00,17.4,xtwil +2020-08-04 08:00:00,16.8,kpolf +2020-08-04 08:00:00,16.9,frlga +2020-08-04 08:00:00,14.9,slxyr +2020-08-04 08:00:00,18.4,hcydv +2020-08-04 08:00:00,16.5,uwinc +2020-08-04 08:00:00,16.3,kbdhf +2020-08-04 08:00:00,16.0,ypjjc +2020-08-04 08:00:00,15.7,kpphy +2020-08-04 08:00:00,17.4,peypk +2020-08-04 08:00:00,17.8,mnczw +2020-08-04 08:00:00,15.9,teeno +2020-08-04 08:00:00,18.8,kcxms +2020-08-04 08:00:00,16.0,ezrfg +2020-08-04 08:00:00,17.9,ieysd +2020-08-04 08:00:00,18.0,asbca +2020-08-04 08:00:00,15.7,zcagk +2020-08-04 08:00:00,15.7,kokia +2020-08-04 08:00:00,16.5,jcjim +2020-08-04 08:00:00,16.6,lshyu +2020-08-04 08:00:00,16.1,peory +2020-08-04 08:00:00,14.9,agneq +2020-08-04 08:00:00,18.9,bsypp +2020-08-04 08:00:00,17.0,ierzq +2020-08-04 08:00:00,16.2,chiez +2020-08-04 08:00:00,16.7,bgwme +2020-08-04 08:00:00,18.0,zhneg +2020-08-04 08:00:00,16.8,evahb +2020-08-04 08:00:00,17.3,rjnqu +2020-08-04 08:00:00,16.7,loycv +2020-08-04 08:00:00,18.1,dkinp +2020-08-04 08:00:00,17.0,rycdc +2020-08-04 08:00:00,13.6,yfrtn +2020-08-04 08:00:00,17.0,woeit +2020-08-04 08:00:00,20.7,iwmhh +2020-08-04 08:00:00,18.0,lczyo +2020-08-04 08:00:00,16.2,cyjkp +2020-08-04 08:00:00,15.8,itjfr +2020-08-04 08:00:00,17.3,rzzfn +2020-08-04 08:00:00,16.9,yfsun +2020-08-04 08:00:00,16.7,piqev +2020-08-04 08:00:00,16.8,wfkqc +2020-08-04 08:00:00,15.5,lajyk +2020-08-04 08:00:00,17.1,glwbi +2020-08-04 08:00:00,16.1,nzavz +2020-08-04 08:00:00,16.0,fislm +2020-08-04 08:00:00,18.1,xxkrz +2020-08-04 08:00:00,15.1,wczxz +2020-08-04 08:00:00,15.8,jqjxq +2020-08-04 08:00:00,17.7,eabad +2020-08-04 08:00:00,16.8,qmeqk +2020-08-04 08:00:00,16.9,otbbb +2020-08-04 08:00:00,14.7,uyudz +2020-08-04 08:00:00,17.6,fvify +2020-08-04 08:00:00,15.9,qaeyo +2020-08-04 08:00:00,16.9,pmfnb +2020-08-04 08:00:00,15.6,zmiyq +2020-08-04 08:00:00,17.2,egpmm +2020-08-04 08:00:00,14.9,ginpe +2020-08-04 08:00:00,16.4,auahq +2020-08-04 08:00:00,16.7,fiokc +2020-08-04 08:00:00,17.4,djapy +2020-08-04 08:00:00,18.1,ptinq +2020-08-04 08:00:00,15.7,rgxtf +2020-08-04 08:00:00,13.6,yhpqj +2020-08-04 08:00:00,16.8,nzqbn +2020-08-04 08:00:00,16.5,vyupo +2020-08-04 08:00:00,14.3,ihmij +2020-08-04 08:00:00,15.7,imjov +2020-08-04 08:00:00,16.2,gncic +2020-08-04 08:00:00,18.3,oytin +2020-08-04 08:00:00,17.2,zqmdp +2020-08-04 08:00:00,16.1,notnn +2020-08-04 08:00:00,15.6,pfdzl +2020-08-04 08:00:00,17.2,tdslf +2020-08-04 08:00:00,16.3,ypvib +2020-08-04 08:00:00,15.8,znrow +2020-08-04 08:00:00,18.3,pcjst +2020-08-04 08:00:00,17.0,bazjf +2020-08-04 08:00:00,16.4,ldnly +2020-08-04 08:00:00,15.4,gwkuq +2020-08-04 08:00:00,17.1,erulv +2020-08-04 08:00:00,16.3,dwtik +2020-08-04 08:00:00,15.9,phmya +2020-08-04 08:00:00,16.0,boqsj +2020-08-04 08:00:00,15.5,yrsxm +2020-08-04 08:00:00,14.4,ztkxe +2020-08-04 08:00:00,16.5,xdywu +2020-08-04 08:00:00,18.3,bbije +2020-08-04 08:00:00,13.4,rikpg +2020-08-04 08:00:00,15.9,kavwb +2020-08-04 08:00:00,15.6,pfcaa +2020-08-04 08:00:00,15.6,dtunu +2020-08-04 08:00:00,16.8,mkplm +2020-08-04 08:00:00,18.3,qwcnk +2020-08-04 08:00:00,18.0,drlil +2020-08-04 08:00:00,18.2,oolbj +2020-08-04 08:00:00,17.6,mblxl +2020-08-04 08:00:00,17.4,grqqe +2020-08-04 08:00:00,15.1,vpptw +2020-08-04 08:00:00,18.3,dhvfr +2020-08-04 08:00:00,17.9,pnlct +2020-08-04 08:00:00,17.1,mugrd +2020-08-04 08:00:00,18.9,ayahb +2020-08-04 08:00:00,16.5,ldzmh +2020-08-04 08:00:00,15.8,tflni +2020-08-04 08:00:00,15.5,waoya +2020-08-04 08:00:00,16.2,ioqjw +2020-08-04 08:00:00,18.6,pjlfa +2020-08-04 08:00:00,18.4,pfwnb +2020-08-04 08:00:00,15.3,tqjbl +2020-08-04 08:00:00,18.1,lydbu +2020-08-04 08:00:00,17.4,aqcyr +2020-08-04 08:00:00,17.9,qkblc +2020-08-04 08:00:00,17.5,ymhhf +2020-08-04 08:00:00,15.7,hwwfq +2020-08-04 08:00:00,17.7,hganh +2020-08-04 08:00:00,18.4,xuuro +2020-08-04 08:00:00,16.0,ghtvu +2020-08-04 08:00:00,15.9,kzssz +2020-08-04 08:00:00,17.9,qqwil +2020-08-04 08:00:00,16.4,yhbkq +2020-08-04 08:00:00,16.3,vmaxs +2020-08-04 08:00:00,17.1,xakyo +2020-08-04 08:00:00,18.5,tnqcp +2020-08-04 08:00:00,16.2,txryf +2020-08-04 08:00:00,17.8,giakp +2020-08-04 08:00:00,17.7,ahzhl +2020-08-04 08:00:00,18.8,rcimk +2020-08-04 08:00:00,18.1,yhphj +2020-08-04 08:00:00,16.8,cdeyn +2020-08-04 08:00:00,18.8,xxkgx +2020-08-04 08:00:00,15.5,qmpvs +2020-08-04 08:00:00,17.9,fxtyo +2020-08-04 08:00:00,17.1,mhjwb +2020-08-04 08:00:00,18.5,dvhqy +2020-08-04 08:00:00,16.4,vtpem +2020-08-04 08:00:00,18.5,dgwvq +2020-08-04 08:00:00,17.8,llziw +2020-08-04 08:00:00,17.7,noagn +2020-08-04 08:00:00,16.1,cotha +2020-08-04 08:00:00,17.0,rzdnc +2020-08-04 08:00:00,18.4,aiint +2020-08-04 08:00:00,15.8,zdern +2020-08-04 08:00:00,17.5,bpbxb +2020-08-04 08:00:00,15.8,ztxqk +2020-08-04 08:00:00,17.9,umzkd +2020-08-04 08:00:00,17.1,ooeaf +2020-08-04 08:00:00,17.3,stszj +2020-08-04 08:00:00,16.0,hvouk +2020-08-04 08:00:00,17.4,nxfem +2020-08-04 08:00:00,17.8,plodv +2020-08-04 08:00:00,19.0,xrkmq +2020-08-04 08:00:00,15.8,yejug +2020-08-04 08:00:00,15.8,pcbtj +2020-08-04 08:00:00,17.4,urexq +2020-08-04 08:00:00,14.3,ndute +2020-08-04 08:00:00,16.6,lywjv +2020-08-04 08:00:00,16.4,hiehy +2020-08-04 08:00:00,15.8,kjbdx +2020-08-04 08:00:00,17.6,gjmcu +2020-08-04 08:00:00,18.9,hcitm +2020-08-04 08:00:00,16.5,oflot +2020-08-04 08:00:00,16.5,thrud +2020-08-04 08:00:00,16.2,tcblk +2020-08-04 08:00:00,16.7,vxtor +2020-08-04 08:00:00,16.7,isizb +2020-08-04 08:00:00,17.0,otvrh +2020-08-04 08:00:00,15.2,yhocf +2020-08-04 08:00:00,18.2,fsyde +2020-08-04 08:00:00,18.1,mqpjl +2020-08-04 08:00:00,17.2,wiiyu +2020-08-04 08:00:00,15.8,qavrb +2020-08-04 08:00:00,16.5,ihown +2020-08-04 08:00:00,17.2,zuejk +2020-08-04 08:00:00,15.5,edqjm +2020-08-04 08:00:00,18.3,jofxa +2020-08-04 08:00:00,16.6,syndc +2020-08-04 08:00:00,17.1,cdxbb +2020-08-04 08:00:00,16.6,wguaq +2020-08-04 08:00:00,18.2,hnxwu +2020-08-04 08:00:00,17.4,ywiqb +2020-08-04 08:00:00,18.0,wpsoy +2020-08-04 08:00:00,14.9,svdum +2020-08-04 08:00:00,16.0,acogf +2020-08-04 08:00:00,16.0,mzjgq +2020-08-04 08:00:00,16.7,wwdah +2020-08-04 08:00:00,17.2,lrhew +2020-08-04 08:00:00,17.7,rdtis +2020-08-04 08:00:00,17.9,nfrzt +2020-08-04 08:00:00,15.3,gcjrh +2020-08-04 08:00:00,17.5,xpvwh +2020-08-04 08:00:00,16.5,wfvrm +2020-08-04 08:00:00,16.8,vysdp +2020-08-04 08:00:00,17.7,qpvdo +2020-08-04 08:00:00,17.9,pcofv +2020-08-04 08:00:00,17.6,gunnj +2020-08-04 08:00:00,16.6,dlwrl +2020-08-04 08:00:00,17.5,zichl +2020-08-04 08:00:00,18.5,wrmic +2020-08-04 08:00:00,16.1,uotkk +2020-08-04 08:00:00,16.4,kbpjv +2020-08-04 08:00:00,17.5,jqare +2020-08-04 08:00:00,15.0,uakik +2020-08-04 08:00:00,16.9,ckorf +2020-08-04 08:00:00,19.0,fnzdy +2020-08-04 08:00:00,17.1,slrzo +2020-08-04 08:00:00,17.6,tlawu +2020-08-04 08:00:00,16.9,lybxy +2020-08-04 08:00:00,16.9,nncsb +2020-08-04 08:00:00,15.4,bwzzs +2020-08-04 08:00:00,17.0,reose +2020-08-04 08:00:00,14.6,rbaay +2020-08-04 08:00:00,17.8,phrpb +2020-08-04 08:00:00,17.7,aksdd +2020-08-04 08:00:00,14.9,ohryf +2020-08-04 08:00:00,15.7,qyxbu +2020-08-04 08:00:00,17.8,kultx +2020-08-04 08:00:00,16.3,fiyly +2020-08-04 08:00:00,16.9,rkoeu +2020-08-04 08:00:00,17.8,frktv +2020-08-04 08:00:00,17.9,llmmm +2020-08-04 08:00:00,18.7,mmbcs +2020-08-04 08:00:00,14.9,btvwv +2020-08-04 08:00:00,17.0,qzgcp +2020-08-04 08:00:00,17.8,gecot +2020-08-04 08:00:00,17.1,lfofy +2020-08-04 08:00:00,16.3,vnvbx +2020-08-04 08:00:00,17.4,tihag +2020-08-04 08:00:00,17.5,oqyss +2020-08-04 08:00:00,17.2,zplai +2020-08-04 08:00:00,18.2,kvmrm +2020-08-04 08:00:00,16.9,ttgwc +2020-08-04 08:00:00,17.0,wlvza +2020-08-04 08:00:00,16.9,haptn +2020-08-04 08:00:00,18.4,ucjbd +2020-08-04 08:00:00,15.7,dldrv +2020-08-04 08:00:00,17.8,koeci +2020-08-04 08:00:00,16.3,iucem +2020-08-04 08:00:00,15.3,vbdzv +2020-08-04 08:00:00,15.9,qubeg +2020-08-04 08:00:00,17.8,rhqvm +2020-08-04 08:00:00,16.7,xbxbe +2020-08-04 08:00:00,18.5,jzptm +2020-08-04 08:00:00,16.8,kcvas +2020-08-04 08:00:00,16.9,mvgcb +2020-08-04 08:00:00,18.0,xhztq +2020-08-04 08:00:00,17.8,mktph +2020-08-04 08:00:00,15.9,jfnoh +2020-08-04 08:00:00,16.5,prmvg +2020-08-04 08:00:00,18.8,ytuuu +2020-08-04 08:00:00,16.6,leety +2020-08-04 08:00:00,16.6,zmila +2020-08-04 08:00:00,16.6,iiaah +2020-08-04 08:00:00,18.1,btxrm +2020-08-04 08:00:00,16.2,tffmg +2020-08-04 08:00:00,17.0,cnvzb +2020-08-04 08:00:00,18.7,otwdf +2020-08-04 08:00:00,16.7,husmx +2020-08-04 08:00:00,16.2,tcfkw +2020-08-04 08:00:00,18.4,bvlsj +2020-08-04 08:00:00,14.7,zwknj +2020-08-04 08:00:00,15.2,jhdpi +2020-08-04 08:00:00,17.3,qttbn +2020-08-04 08:00:00,17.0,lvmjm +2020-08-04 08:00:00,17.7,qivsx +2020-08-04 08:00:00,17.5,muuvq +2020-08-04 08:00:00,15.6,mtqnc +2020-08-04 08:00:00,17.3,ltfms +2020-08-04 08:00:00,16.6,copbg +2020-08-04 08:00:00,16.2,qbcne +2020-08-04 08:00:00,16.1,pidkl +2020-08-04 08:00:00,17.7,rvfml +2020-08-04 08:00:00,0.0,ejfoz +2020-08-04 08:00:00,34.2,tykui +2020-08-04 08:00:00,19.0,kcymm +2020-08-04 08:00:00,16.6,tkfhq +2020-08-04 08:00:00,26.27778,vleon +2020-08-04 08:00:00,20.11111,rrnhm +2020-08-04 08:00:00,21.38889,bttyj +2020-08-04 08:00:00,21.0,oaumt +2020-08-04 08:00:00,19.22222,nuzsv +2020-08-04 08:00:00,19.0,mqzft +2020-08-04 08:00:00,13.88889,hvful +2020-08-04 08:00:00,19.38889,gmdwp +2020-08-04 08:00:00,19.88889,jwgjj +2020-08-04 08:00:00,19.66667,mrsle +2020-08-04 08:00:00,22.27778,fzckm +2020-08-04 08:00:00,19.72222,gdpxw +2020-08-04 08:00:00,19.11111,djtgy +2020-08-04 08:00:00,20.44444,lxbic +2020-08-04 08:00:00,20.0,aioiq +2020-08-04 08:00:00,12.44444,sszbf +2020-08-04 08:00:00,13.88889,fgwmk +2020-08-04 08:00:00,19.94444,crehv +2020-08-04 08:00:00,20.05556,fpkpz +2020-08-04 08:00:00,20.5,qrytb +2020-08-04 08:00:00,19.72222,xlski +2020-08-04 08:00:00,22.44444,hivjq +2020-08-04 08:00:00,18.88889,kfksc +2020-08-04 08:00:00,20.05556,noubl +2020-08-04 08:00:00,21.22222,jayci +2020-08-04 08:00:00,18.05556,psxfe +2020-08-04 08:00:00,15.5,bkahv +2020-08-04 08:00:00,19.27778,brgfy +2020-08-04 08:00:00,19.22222,tjquy +2020-08-04 08:00:00,19.22222,cqati +2020-08-04 08:00:00,19.22222,dhzaj +2020-08-04 08:00:00,20.27778,qvcca +2020-08-04 08:00:00,18.61111,fgiws +2020-08-04 08:00:00,18.27778,oftqd +2020-08-04 08:00:00,19.88889,suooc +2020-08-04 08:00:00,17.72222,wdwen +2020-08-04 08:00:00,20.77778,khlfx +2020-08-04 08:00:00,18.77778,kvmjf +2020-08-04 08:00:00,16.38889,vyect +2020-08-04 08:00:00,19.0,imjpm +2020-08-04 08:00:00,24.77778,fkyme +2020-08-04 08:00:00,20.88889,qomek +2020-08-04 08:00:00,17.38889,ogagf +2020-08-04 08:00:00,15.33333,oapgx +2020-08-04 08:00:00,18.5,dsczo +2020-08-04 08:00:00,19.5,awcmx +2020-08-04 08:00:00,21.0,mjbzs +2020-08-04 08:00:00,19.8,dveuq +2020-08-04 08:00:00,23.1,ecvym +2020-08-04 08:00:00,24.7,oaqph +2020-08-04 08:00:00,20.9,igbxx +2020-08-04 08:00:00,24.3,pbklv +2020-08-04 08:00:00,21.2,ljfve +2020-08-04 08:00:00,23.4,yjeoj +2020-08-04 08:00:00,21.7,lctcs +2020-08-04 08:00:00,19.2,ijzkb +2020-08-04 08:00:00,19.2,cotxr +2020-08-04 08:00:00,25.5,cwavf +2020-08-04 08:00:00,26.5,mjtko +2020-08-04 08:00:00,23.9,fcukz +2020-08-04 08:00:00,20.7,elcuv +2020-08-04 08:00:00,21.6,klykn +2020-08-04 08:00:00,22.6,ihhmy +2020-08-04 08:00:00,22.5,mxwwj +2020-08-04 08:00:00,33.4,pahze +2020-08-04 08:00:00,20.9,tjsch +2020-08-04 08:00:00,23.5,tywrl +2020-08-04 08:00:00,34.7,viely +2020-08-04 08:00:00,25.6,svxom +2020-08-04 08:00:00,23.2,abfvc +2020-08-04 08:00:00,27.6,nxits +2020-08-04 08:00:00,20.2,ggxsj +2020-08-04 08:00:00,20.8,wvcip +2020-08-04 08:00:00,22.9,ixmaf +2020-08-04 08:00:00,26.5,oqelg +2020-08-04 08:00:00,23.9,ejrdd +2020-08-04 08:00:00,28.3,mbdop +2020-08-04 08:00:00,24.6,fyzuj +2020-08-04 08:00:00,20.7,kqsdd +2020-08-04 08:00:00,20.3,drzch +2020-08-04 08:00:00,19.8,wgaiu +2020-08-04 08:00:00,19.3,mbunu +2020-08-04 08:00:00,25.1,lyhqc +2020-08-04 08:00:00,20.7,wmowo +2020-08-04 08:00:00,34.1,ztgfu +2020-08-04 08:00:00,19.3,fahhr +2020-08-04 08:00:00,19.0,jyvth +2020-08-04 08:00:00,27.5,byetq +2020-08-04 08:00:00,23.6,owtyy +2020-08-04 08:00:00,18.9,lpbsn +2020-08-04 08:00:00,19.7,hxidk +2020-08-04 08:00:00,18.9,axeow +2020-08-04 08:00:00,25.6,jtxeg +2020-08-04 08:00:00,18.2,tggup +2020-08-04 08:00:00,24.8,ahobs +2020-08-04 08:00:00,23.7,ynbjr +2020-08-04 08:00:00,21.0,zjnnm +2020-08-04 08:00:00,25.7,pxbit +2020-08-04 08:00:00,20.9,smmgt +2020-08-04 08:00:00,20.1,kddvu +2020-08-04 08:00:00,24.7,qmcjn +2020-08-04 08:00:00,28.5,uetgx +2020-08-04 08:00:00,20.3,uutbi +2020-08-04 08:00:00,17.9,usdwm +2020-08-04 08:00:00,21.2,lfvqk +2020-08-04 08:00:00,23.1,zxtht +2020-08-04 08:00:00,18.1,nbkja +2020-08-04 08:00:00,20.8,penwy +2020-08-04 08:00:00,21.4,mjxzf +2020-08-04 08:00:00,21.8,fccef +2020-08-04 08:00:00,23.9,ymbqc +2020-08-04 08:00:00,20.6,evrst +2020-08-04 08:00:00,29.4,uujoy +2020-08-04 08:00:00,20.7,jbgdo +2020-08-04 08:00:00,24.4,irzil +2020-08-04 08:00:00,28.8,dyfil +2020-08-04 08:00:00,21.5,atqhc +2020-08-04 08:00:00,19.3,bbllv +2020-08-04 08:00:00,24.3,vvtws +2020-08-04 08:00:00,22.3,ngmnm +2020-08-04 08:00:00,24.5,gkwvp +2020-08-04 08:00:00,21.9,bjsta +2020-08-04 08:00:00,19.5,dbibg +2020-08-04 08:00:00,13.2,kimee +2020-08-04 08:00:00,20.6,gzfmr +2020-08-04 08:00:00,23.8,ivkvr +2020-08-04 08:00:00,19.8,adykq +2020-08-04 08:00:00,22.2,bduku +2020-08-04 08:00:00,20.0,xqytl +2020-08-04 08:00:00,23.1,cikgj +2020-08-04 08:00:00,21.2,vpzqo +2020-08-04 08:00:00,23.9,ljwns +2020-08-04 08:00:00,22.4,gntwd +2020-08-04 08:00:00,21.0,kojsr +2020-08-04 08:00:00,21.4,fsnbh +2020-08-04 08:00:00,18.9,xfhpx +2020-08-04 08:00:00,15.4,apctj +2020-08-04 08:00:00,16.0,ycbiy +2020-08-04 08:00:00,19.6,zrgnz +2020-08-04 08:00:00,23.2,mocpf +2020-08-04 08:00:00,20.8,vudfc +2020-08-04 08:00:00,18.0,fhyhy +2020-08-04 08:00:00,22.7,cwviz +2020-08-04 08:00:00,18.0,bddyz +2020-08-04 08:00:00,22.8,cysqv +2020-08-04 08:00:00,31.2,bytpr +2020-08-04 08:00:00,21.2,vbfow +2020-08-04 08:00:00,13.7,vycbk +2020-08-04 08:00:00,19.5,jvkyi +2020-08-04 08:00:00,25.1,okuny +2020-08-04 08:00:00,25.4,wuguf +2020-08-04 08:00:00,31.2,vlvrq +2020-08-04 08:00:00,19.3,ggxnz +2020-08-04 08:00:00,29.4,eptar +2020-08-04 08:00:00,24.6,fwvpu +2020-08-04 08:00:00,15.0,tjduz +2020-08-04 08:00:00,21.9,nsqtr +2020-08-04 08:00:00,19.6,hbwiu +2020-08-04 08:00:00,18.6,qnknt +2020-08-04 08:00:00,24.9,nksxy +2020-08-04 08:00:00,20.0,ndjub +2020-08-04 08:00:00,30.6,npwwe +2020-08-04 08:00:00,20.9,joszi +2020-08-04 08:00:00,18.8,jgick +2020-08-04 08:00:00,25.0,drbeo +2020-08-04 08:00:00,18.9,iqocu +2020-08-04 08:00:00,20.0,nzkwk +2020-08-04 08:00:00,22.3,wquxs +2020-08-04 08:00:00,23.0,whfxy +2020-08-04 08:00:00,20.2,vhcmj +2020-08-04 08:00:00,23.1,kretn +2020-08-04 08:00:00,26.4,rkkaw +2020-08-04 08:00:00,23.2,rfzya +2020-08-04 08:00:00,25.3,eafjs +2020-08-04 08:00:00,19.6,htvkq +2020-08-04 08:00:00,19.5,iogus +2020-08-04 08:00:00,18.4,haxap +2020-08-04 08:00:00,20.7,evglv +2020-08-04 08:00:00,30.7,pduvn +2020-08-04 08:00:00,20.7,iiusu +2020-08-04 08:00:00,22.0,awktm +2020-08-04 08:00:00,21.0,fynse +2020-08-04 08:00:00,21.1,cmtwl +2020-08-04 08:00:00,23.6,wssfq +2020-08-04 08:00:00,23.3,ojthh +2020-08-04 08:00:00,21.6,ojeut +2020-08-04 08:00:00,19.9,dwqax +2020-08-04 08:00:00,18.2,ipesq +2020-08-04 08:00:00,26.8,hphlh +2020-08-04 08:00:00,20.7,kjmfs +2020-08-04 08:00:00,15.3,rmdgs +2020-08-04 08:00:00,18.8,fkgmp +2020-08-04 08:00:00,21.9,drmxk +2020-08-04 08:00:00,18.6,deaco +2020-08-04 08:00:00,18.4,dsslb +2020-08-04 08:00:00,21.2,hgatb +2020-08-04 08:00:00,21.3,yuxlt +2020-08-04 08:00:00,17.6,gqmws +2020-08-04 08:00:00,29.2,wgefq +2020-08-04 08:00:00,21.8,tqrcb +2020-08-04 08:00:00,20.5,nggxz +2020-08-04 08:00:00,26.0,tegfb +2020-08-04 08:00:00,22.3,aryhl +2020-08-04 08:00:00,25.3,yymxg +2020-08-04 08:00:00,28.5,vdwsy +2020-08-04 08:00:00,22.4,zkzik +2020-08-04 08:00:00,21.4,rwvtt +2020-08-04 08:00:00,33.2,hmxwa +2020-08-04 08:00:00,15.4,iewqh +2020-08-04 08:00:00,14.61111,bkanc +2020-08-04 08:00:00,20.5,kenrf +2020-08-04 08:00:00,19.66667,hjdlp +2020-08-04 08:00:00,19.5,ntpqk +2020-08-04 08:00:00,19.16667,kjnyi +2020-08-04 08:00:00,19.5,uuhcx +2020-08-04 08:00:00,20.38889,dwsvq +2020-08-04 08:00:00,20.22222,kbvuy +2020-08-04 08:00:00,19.44444,indfm +2020-08-04 08:00:00,19.88889,mnywm +2020-08-04 08:00:00,19.16667,hbhhs +2020-08-04 08:00:00,19.61111,uobqf +2020-08-04 08:00:00,19.27778,hcdwa +2020-08-04 08:00:00,20.27778,zkvzt +2020-08-04 08:00:00,19.33333,cgaaj +2020-08-04 08:00:00,19.22222,qaeee +2020-08-04 08:00:00,20.38889,krnzm +2020-08-04 08:00:00,15.11111,jhwop +2020-08-04 08:00:00,19.22222,jzkgm +2020-08-04 08:00:00,19.5,oszcp +2020-08-04 08:00:00,19.22222,fpyxg +2020-08-04 08:00:00,19.27778,hnleb +2020-08-04 08:00:00,19.61111,ljhka +2020-08-04 08:00:00,19.27778,kjgbf +2020-08-04 08:00:00,19.22222,nnyuc +2020-08-04 08:00:00,19.0,sdvmr +2020-08-04 08:00:00,21.0,rdbaf +2020-08-04 08:00:00,20.3,xataf +2020-08-04 08:00:00,19.4,fecem +2020-08-04 08:00:00,15.1,nbitj +2020-08-04 08:00:00,19.4,gvjom +2020-08-04 08:00:00,19.4,ezebq +2020-08-04 08:00:00,19.8,wrrrc +2020-08-04 08:00:00,20.0,cczvb +2020-08-04 08:00:00,14.1,wznvv +2020-08-04 08:00:00,18.9,wcuan +2020-08-04 08:00:00,19.5,iysis +2020-08-04 08:00:00,19.4,ipaod +2020-08-04 08:00:00,19.4,sifce +2020-08-04 08:00:00,18.3,xsdlo +2020-08-04 08:00:00,19.7,jbaja +2020-08-04 08:00:00,15.0,ktcei +2020-08-04 08:00:00,20.8,rsmae +2020-08-04 08:00:00,14.8,knzsr +2020-08-04 08:00:00,15.4,xhmud +2020-08-04 08:00:00,18.9,ylfcv +2020-08-04 08:00:00,17.1,jpeyd +2020-08-04 08:00:00,19.2,igylq +2020-08-04 08:00:00,19.1,vkmls +2020-08-04 08:00:00,14.8,kdwaa +2020-08-04 08:00:00,19.0,ffybf +2020-08-04 08:00:00,15.0,ejghf +2020-08-04 08:00:00,18.4,mztnu +2020-08-04 08:00:00,18.8,ptqge +2020-08-04 08:00:00,19.3,iwcxs +2020-08-04 08:00:00,19.1,jmpwu +2020-08-04 08:00:00,19.6,ivelx +2020-08-04 08:00:00,18.9,qtxsp +2020-08-04 08:00:00,18.9,kkndj +2020-08-04 08:00:00,19.3,ouhci +2020-08-04 08:00:00,19.2,ipyve +2020-08-04 08:00:00,14.5,adwmg +2020-08-04 08:00:00,19.0,cywuc +2020-08-04 08:00:00,18.4,yasgp +2020-08-04 08:00:00,19.2,usevc +2020-08-04 08:00:00,19.3,gmdsg +2020-08-04 08:00:00,19.3,acdos +2020-08-04 08:00:00,19.5,lsify +2020-08-04 08:00:00,19.2,ndvqc +2020-08-04 08:00:00,19.8,pwjcp +2020-08-04 08:00:00,17.27778,estrc +2020-08-04 08:00:00,17.0,sfmjs +2020-08-04 06:00:00,11.9,gkbid +2020-08-04 06:00:00,13.8,nfxow +2020-08-04 06:00:00,14.0,vlwwz +2020-08-04 06:00:00,14.9,gnjnq +2020-08-04 06:00:00,15.0,plcis +2020-08-04 06:00:00,13.8,mijak +2020-08-04 06:00:00,12.4,vylxf +2020-08-04 06:00:00,12.4,qnrpm +2020-08-04 06:00:00,13.2,woteb +2020-08-04 06:00:00,13.8,eqfly +2020-08-04 06:00:00,13.4,doxbb +2020-08-04 06:00:00,13.2,ybdno +2020-08-04 06:00:00,14.2,savmq +2020-08-04 06:00:00,14.9,ezrwe +2020-08-04 06:00:00,14.7,dejab +2020-08-04 06:00:00,11.2,wccjf +2020-08-04 06:00:00,12.2,ckjnn +2020-08-04 06:00:00,14.0,gzoye +2020-08-04 06:00:00,13.8,sqrbg +2020-08-04 06:00:00,12.8,cbhsb +2020-08-04 06:00:00,14.5,lncdv +2020-08-04 06:00:00,13.7,qdekv +2020-08-04 06:00:00,13.7,gklox +2020-08-04 06:00:00,12.2,deobj +2020-08-04 06:00:00,13.0,zdpci +2020-08-04 06:00:00,13.6,bhpmz +2020-08-04 06:00:00,12.4,papaf +2020-08-04 06:00:00,14.2,lfagh +2020-08-04 06:00:00,14.0,gxcgu +2020-08-04 06:00:00,15.5,ifuxm +2020-08-04 06:00:00,14.0,zxslr +2020-08-04 06:00:00,13.9,bjszo +2020-08-04 06:00:00,12.4,owydy +2020-08-04 06:00:00,12.4,hgrlx +2020-08-04 06:00:00,13.2,kdowy +2020-08-04 06:00:00,12.9,pdbhy +2020-08-04 06:00:00,11.5,hipjh +2020-08-04 06:00:00,12.5,vmryv +2020-08-04 06:00:00,11.9,xokqh +2020-08-04 06:00:00,13.7,tnfna +2020-08-04 06:00:00,14.4,tkfhq +2020-08-04 06:00:00,13.6,kctnv +2020-08-04 06:00:00,13.1,bpvyz +2020-08-04 06:00:00,14.0,prtwa +2020-08-04 06:00:00,12.7,vjstu +2020-08-04 06:00:00,13.1,vpdsa +2020-08-04 06:00:00,12.5,efnlc +2020-08-04 06:00:00,13.0,wwuyi +2020-08-04 06:00:00,14.1,blpnl +2020-08-04 06:00:00,13.9,arpjv +2020-08-04 06:00:00,10.4,jdnkd +2020-08-04 06:00:00,11.6,cnpjv +2020-08-04 06:00:00,12.7,vpgiu +2020-08-04 06:00:00,11.7,dpmek +2020-08-04 06:00:00,13.5,jzcps +2020-08-04 06:00:00,12.94444,sqdlj +2020-08-04 06:00:00,11.77778,bkanc +2020-08-04 06:00:00,12.44444,nqlto +2020-08-04 06:00:00,11.83333,ldaup +2020-08-04 06:00:00,12.38889,bzpyt +2020-08-04 06:00:00,14.22222,alybz +2020-08-04 06:00:00,12.94444,lzhen +2020-08-04 06:00:00,13.0,tqfkn +2020-08-04 06:00:00,12.33333,wgxpj +2020-08-04 06:00:00,11.94444,mqzft +2020-08-04 06:00:00,12.22222,hvful +2020-08-04 06:00:00,12.77778,zyfvs +2020-08-04 06:00:00,13.61111,kzwzn +2020-08-04 06:00:00,13.11111,kenrf +2020-08-04 06:00:00,12.5,gmdwp +2020-08-04 06:00:00,14.94444,jwgjj +2020-08-04 06:00:00,11.66667,uxbrj +2020-08-04 06:00:00,13.66667,krvqc +2020-08-04 06:00:00,14.05556,fcplm +2020-08-04 06:00:00,13.72222,ilwqw +2020-08-04 06:00:00,12.11111,wmerb +2020-08-04 06:00:00,13.38889,mrsle +2020-08-04 06:00:00,13.55556,fzckm +2020-08-04 06:00:00,13.0,czljd +2020-08-04 06:00:00,12.61111,gdpxw +2020-08-04 06:00:00,13.22222,owdub +2020-08-04 06:00:00,11.88889,djtgy +2020-08-04 06:00:00,13.61111,ruzsu +2020-08-04 06:00:00,12.5,dnlqg +2020-08-04 06:00:00,12.38889,kbvuy +2020-08-04 06:00:00,14.44444,indfm +2020-08-04 06:00:00,12.05556,tgzxw +2020-08-04 06:00:00,13.77778,wkkho +2020-08-04 06:00:00,12.27778,lxbic +2020-08-04 06:00:00,13.22222,ssjlf +2020-08-04 06:00:00,12.33333,pfnsl +2020-08-04 06:00:00,12.5,vlcim +2020-08-04 06:00:00,13.83333,dkaac +2020-08-04 06:00:00,12.27778,cifvp +2020-08-04 06:00:00,13.22222,pvqjy +2020-08-04 06:00:00,14.16667,tckyu +2020-08-04 06:00:00,12.11111,sszbf +2020-08-04 06:00:00,13.27778,fgwmk +2020-08-04 06:00:00,13.77778,knnxf +2020-08-04 06:00:00,12.61111,jpbqw +2020-08-04 06:00:00,13.22222,crehv +2020-08-04 06:00:00,13.55556,fpkpz +2020-08-04 06:00:00,14.38889,zvyyj +2020-08-04 06:00:00,14.27778,qrytb +2020-08-04 06:00:00,12.27778,uobqf +2020-08-04 06:00:00,12.38889,rmwdd +2020-08-04 06:00:00,14.94444,hcdwa +2020-08-04 06:00:00,12.66667,okamk +2020-08-04 06:00:00,12.61111,zkvzt +2020-08-04 06:00:00,12.77778,cgaaj +2020-08-04 06:00:00,14.27778,xlski +2020-08-04 06:00:00,13.61111,hivjq +2020-08-04 06:00:00,12.61111,noubl +2020-08-04 06:00:00,14.66667,jayci +2020-08-04 06:00:00,15.05556,krnzm +2020-08-04 06:00:00,11.44444,psxfe +2020-08-04 06:00:00,11.72222,wppgj +2020-08-04 06:00:00,11.38889,jhwop +2020-08-04 06:00:00,13.38889,hzsnb +2020-08-04 06:00:00,13.22222,ivehw +2020-08-04 06:00:00,12.83333,ofcyo +2020-08-04 06:00:00,13.61111,nadmj +2020-08-04 06:00:00,12.61111,rrblt +2020-08-04 06:00:00,14.61111,ehael +2020-08-04 06:00:00,10.72222,kanab +2020-08-04 06:00:00,13.27778,rzbao +2020-08-04 06:00:00,12.88889,dolqy +2020-08-04 06:00:00,13.22222,jgflx +2020-08-04 06:00:00,11.42467,sboyq +2020-08-04 06:00:00,14.5,jpeej +2020-08-04 06:00:00,11.77778,eyhqb +2020-08-04 06:00:00,13.5,xtwrj +2020-08-04 06:00:00,14.38889,babhc +2020-08-04 06:00:00,12.77778,ihrrd +2020-08-04 06:00:00,13.77778,wvnwv +2020-08-04 06:00:00,13.0,brgfy +2020-08-04 06:00:00,11.72222,lojzd +2020-08-04 06:00:00,12.11111,cicho +2020-08-04 06:00:00,12.27778,psvsy +2020-08-04 06:00:00,12.11111,xadne +2020-08-04 06:00:00,13.0,aebcr +2020-08-04 06:00:00,13.27778,lrpdu +2020-08-04 06:00:00,11.72222,cnixu +2020-08-04 06:00:00,12.88889,jzkgm +2020-08-04 06:00:00,13.61111,oyamr +2020-08-04 06:00:00,13.77778,kpmly +2020-08-04 06:00:00,13.77778,khcvi +2020-08-04 06:00:00,15.27778,cdvwy +2020-08-04 06:00:00,14.22222,oxhol +2020-08-04 06:00:00,12.11111,xcimd +2020-08-04 06:00:00,14.22222,bgdiq +2020-08-04 06:00:00,15.38889,cqati +2020-08-04 06:00:00,13.72222,eprel +2020-08-04 06:00:00,12.27778,rjkik +2020-08-04 06:00:00,11.72222,fpmbd +2020-08-04 06:00:00,13.22222,fpyxg +2020-08-04 06:00:00,12.38889,rpkjp +2020-08-04 06:00:00,14.6,fiqlz +2020-08-04 06:00:00,11.61111,ujcyx +2020-08-04 06:00:00,15.22222,nzfbp +2020-08-04 06:00:00,12.0,dypjk +2020-08-04 06:00:00,12.22222,hbrkp +2020-08-04 06:00:00,13.11111,gffdv +2020-08-04 06:00:00,13.27778,hnleb +2020-08-04 06:00:00,13.27778,crxzy +2020-08-04 06:00:00,12.27778,dhzaj +2020-08-04 06:00:00,11.33333,lezly +2020-08-04 06:00:00,13.38889,ibagr +2020-08-04 06:00:00,13.0,estrc +2020-08-04 06:00:00,13.22222,qvcca +2020-08-04 06:00:00,11.27778,fgiws +2020-08-04 06:00:00,12.38889,ussxj +2020-08-04 06:00:00,12.72222,eopzi +2020-08-04 06:00:00,13.27778,oftqd +2020-08-04 06:00:00,13.5,nrvjb +2020-08-04 06:00:00,13.22222,suooc +2020-08-04 06:00:00,12.11111,dipko +2020-08-04 06:00:00,12.88889,fbmhp +2020-08-04 06:00:00,14.0,dzvyy +2020-08-04 06:00:00,14.88889,zislb +2020-08-04 06:00:00,13.5,hogxc +2020-08-04 06:00:00,11.72222,xlaob +2020-08-04 06:00:00,14.5,urzzk +2020-08-04 06:00:00,13.77778,xiybo +2020-08-04 06:00:00,12.77778,uekqb +2020-08-04 06:00:00,13.5,ztmms +2020-08-04 06:00:00,14.05556,muaeg +2020-08-04 06:00:00,14.22222,amvul +2020-08-04 06:00:00,12.72222,ayiea +2020-08-04 06:00:00,13.11111,wdwen +2020-08-04 06:00:00,12.38889,khlfx +2020-08-04 06:00:00,12.72222,qdlmf +2020-08-04 06:00:00,12.61111,ufldd +2020-08-04 06:00:00,14.38889,bnhjf +2020-08-04 06:00:00,13.22222,vsegj +2020-08-04 06:00:00,12.72222,dacwi +2020-08-04 06:00:00,12.38889,kvmjf +2020-08-04 06:00:00,12.22222,ipijg +2020-08-04 06:00:00,12.77778,vpelr +2020-08-04 06:00:00,13.22222,vyect +2020-08-04 06:00:00,12.88889,bmwbn +2020-08-04 06:00:00,12.77778,hugfh +2020-08-04 06:00:00,13.38889,moxrx +2020-08-04 06:00:00,12.61111,altqr +2020-08-04 06:00:00,12.83333,ounrl +2020-08-04 06:00:00,13.77778,fbrxd +2020-08-04 06:00:00,14.11111,qomek +2020-08-04 06:00:00,10.88889,brnhd +2020-08-04 06:00:00,12.88889,jodzb +2020-08-04 06:00:00,14.72222,ogagf +2020-08-04 06:00:00,14.11111,nnjle +2020-08-04 06:00:00,12.11111,kqjds +2020-08-04 06:00:00,15.72222,xsbps +2020-08-04 06:00:00,12.38889,mfwnz +2020-08-04 06:00:00,11.88889,qidgd +2020-08-04 06:00:00,12.77778,uvcyf +2020-08-04 06:00:00,15.27778,awcmx +2020-08-04 06:00:00,13.0,mmbpn +2020-08-04 06:00:00,14.11111,mjbzs +2020-08-04 06:00:00,13.6,pbfcx +2020-08-04 06:00:00,12.7,utryj +2020-08-04 06:00:00,13.9,yiywu +2020-08-04 06:00:00,13.2,uyhkr +2020-08-04 06:00:00,13.5,ecvym +2020-08-04 06:00:00,15.0,fwtoy +2020-08-04 06:00:00,12.6,bxidy +2020-08-04 06:00:00,13.8,fecem +2020-08-04 06:00:00,14.1,begvh +2020-08-04 06:00:00,13.0,rlkjk +2020-08-04 06:00:00,12.7,nbitj +2020-08-04 06:00:00,12.6,cgghn +2020-08-04 06:00:00,14.0,igbxx +2020-08-04 06:00:00,11.9,ckdbs +2020-08-04 06:00:00,14.0,yhvwz +2020-08-04 06:00:00,12.7,ljfve +2020-08-04 06:00:00,13.9,yjeoj +2020-08-04 06:00:00,14.3,nbutu +2020-08-04 06:00:00,13.7,ijzkb +2020-08-04 06:00:00,15.2,gvjom +2020-08-04 06:00:00,15.5,cotxr +2020-08-04 06:00:00,12.9,bsxux +2020-08-04 06:00:00,14.2,cwavf +2020-08-04 06:00:00,13.0,xtwil +2020-08-04 06:00:00,13.1,mjtko +2020-08-04 06:00:00,14.0,kpolf +2020-08-04 06:00:00,12.1,elcuv +2020-08-04 06:00:00,15.3,frlga +2020-08-04 06:00:00,15.1,klykn +2020-08-04 06:00:00,12.4,uwinc +2020-08-04 06:00:00,13.8,kbdhf +2020-08-04 06:00:00,13.1,wrrrc +2020-08-04 06:00:00,11.8,ypjjc +2020-08-04 06:00:00,11.9,kpphy +2020-08-04 06:00:00,13.0,mnczw +2020-08-04 06:00:00,13.8,teeno +2020-08-04 06:00:00,13.9,cczvb +2020-08-04 06:00:00,11.9,ezrfg +2020-08-04 06:00:00,14.8,ieysd +2020-08-04 06:00:00,12.6,asbca +2020-08-04 06:00:00,14.0,tywrl +2020-08-04 06:00:00,13.3,viely +2020-08-04 06:00:00,13.2,zcagk +2020-08-04 06:00:00,13.9,kokia +2020-08-04 06:00:00,14.3,jcjim +2020-08-04 06:00:00,14.0,lshyu +2020-08-04 06:00:00,13.5,nxits +2020-08-04 06:00:00,12.7,peory +2020-08-04 06:00:00,12.1,agneq +2020-08-04 06:00:00,15.5,bsypp +2020-08-04 06:00:00,11.9,chiez +2020-08-04 06:00:00,11.6,bgwme +2020-08-04 06:00:00,14.4,ggxsj +2020-08-04 06:00:00,13.9,zhneg +2020-08-04 06:00:00,13.9,evahb +2020-08-04 06:00:00,11.4,rjnqu +2020-08-04 06:00:00,12.5,oqelg +2020-08-04 06:00:00,11.8,loycv +2020-08-04 06:00:00,13.9,rycdc +2020-08-04 06:00:00,11.8,yfrtn +2020-08-04 06:00:00,11.6,woeit +2020-08-04 06:00:00,11.9,wznvv +2020-08-04 06:00:00,12.5,ejrdd +2020-08-04 06:00:00,15.7,iwmhh +2020-08-04 06:00:00,15.4,lczyo +2020-08-04 06:00:00,15.7,wcuan +2020-08-04 06:00:00,14.2,fyzuj +2020-08-04 06:00:00,11.9,kqsdd +2020-08-04 06:00:00,12.5,iysis +2020-08-04 06:00:00,12.4,wgaiu +2020-08-04 06:00:00,13.9,cyjkp +2020-08-04 06:00:00,11.3,itjfr +2020-08-04 06:00:00,12.7,rzzfn +2020-08-04 06:00:00,14.3,yfsun +2020-08-04 06:00:00,14.3,piqev +2020-08-04 06:00:00,13.8,wfkqc +2020-08-04 06:00:00,14.1,mbunu +2020-08-04 06:00:00,12.6,wmowo +2020-08-04 06:00:00,11.5,ztgfu +2020-08-04 06:00:00,11.6,fahhr +2020-08-04 06:00:00,13.5,lajyk +2020-08-04 06:00:00,12.3,glwbi +2020-08-04 06:00:00,13.8,nzavz +2020-08-04 06:00:00,10.7,fislm +2020-08-04 06:00:00,11.8,jyvth +2020-08-04 06:00:00,14.2,byetq +2020-08-04 06:00:00,13.5,xxkrz +2020-08-04 06:00:00,13.3,lpbsn +2020-08-04 06:00:00,14.2,eabad +2020-08-04 06:00:00,12.4,hxidk +2020-08-04 06:00:00,15.3,qmeqk +2020-08-04 06:00:00,15.1,axeow +2020-08-04 06:00:00,13.3,jtxeg +2020-08-04 06:00:00,14.3,otbbb +2020-08-04 06:00:00,13.2,uyudz +2020-08-04 06:00:00,11.6,tggup +2020-08-04 06:00:00,13.8,xsdlo +2020-08-04 06:00:00,13.1,pmfnb +2020-08-04 06:00:00,11.9,zmiyq +2020-08-04 06:00:00,11.3,egpmm +2020-08-04 06:00:00,14.2,pxbit +2020-08-04 06:00:00,13.1,auahq +2020-08-04 06:00:00,14.0,fiokc +2020-08-04 06:00:00,13.1,djapy +2020-08-04 06:00:00,16.3,ptinq +2020-08-04 06:00:00,14.4,rgxtf +2020-08-04 06:00:00,12.1,kddvu +2020-08-04 06:00:00,13.8,jbaja +2020-08-04 06:00:00,11.9,yhpqj +2020-08-04 06:00:00,12.9,nzqbn +2020-08-04 06:00:00,14.2,vyupo +2020-08-04 06:00:00,10.5,ihmij +2020-08-04 06:00:00,12.7,imjov +2020-08-04 06:00:00,14.4,uetgx +2020-08-04 06:00:00,14.6,uutbi +2020-08-04 06:00:00,12.8,usdwm +2020-08-04 06:00:00,13.2,oytin +2020-08-04 06:00:00,14.4,zqmdp +2020-08-04 06:00:00,12.3,notnn +2020-08-04 06:00:00,14.7,lfvqk +2020-08-04 06:00:00,12.1,pfdzl +2020-08-04 06:00:00,13.6,tdslf +2020-08-04 06:00:00,12.6,nbkja +2020-08-04 06:00:00,12.4,ypvib +2020-08-04 06:00:00,13.9,penwy +2020-08-04 06:00:00,12.2,znrow +2020-08-04 06:00:00,12.9,pcjst +2020-08-04 06:00:00,14.1,mjxzf +2020-08-04 06:00:00,13.9,bazjf +2020-08-04 06:00:00,12.3,knzsr +2020-08-04 06:00:00,14.0,ldnly +2020-08-04 06:00:00,14.4,evrst +2020-08-04 06:00:00,13.4,gwkuq +2020-08-04 06:00:00,13.9,erulv +2020-08-04 06:00:00,12.8,dwtik +2020-08-04 06:00:00,13.0,phmya +2020-08-04 06:00:00,11.4,bbllv +2020-08-04 06:00:00,12.1,xhmud +2020-08-04 06:00:00,16.9,gkwvp +2020-08-04 06:00:00,12.5,boqsj +2020-08-04 06:00:00,13.2,yrsxm +2020-08-04 06:00:00,11.9,ztkxe +2020-08-04 06:00:00,11.3,dbibg +2020-08-04 06:00:00,11.7,rikpg +2020-08-04 06:00:00,13.8,kavwb +2020-08-04 06:00:00,12.3,ylfcv +2020-08-04 06:00:00,13.8,pfcaa +2020-08-04 06:00:00,12.4,jpeyd +2020-08-04 06:00:00,13.6,mkplm +2020-08-04 06:00:00,12.1,qwcnk +2020-08-04 06:00:00,13.4,gzfmr +2020-08-04 06:00:00,13.5,drlil +2020-08-04 06:00:00,13.4,mblxl +2020-08-04 06:00:00,12.8,grqqe +2020-08-04 06:00:00,15.2,bduku +2020-08-04 06:00:00,11.3,vpptw +2020-08-04 06:00:00,13.6,dhvfr +2020-08-04 06:00:00,13.2,pnlct +2020-08-04 06:00:00,13.0,mugrd +2020-08-04 06:00:00,11.2,ayahb +2020-08-04 06:00:00,12.0,ldzmh +2020-08-04 06:00:00,12.6,tflni +2020-08-04 06:00:00,12.7,waoya +2020-08-04 06:00:00,12.0,ioqjw +2020-08-04 06:00:00,11.6,kdwaa +2020-08-04 06:00:00,16.7,pfwnb +2020-08-04 06:00:00,9.6,tqjbl +2020-08-04 06:00:00,11.6,lydbu +2020-08-04 06:00:00,11.0,ymhhf +2020-08-04 06:00:00,12.7,vpzqo +2020-08-04 06:00:00,13.3,gntwd +2020-08-04 06:00:00,12.1,fsnbh +2020-08-04 06:00:00,13.1,hwwfq +2020-08-04 06:00:00,14.2,xuuro +2020-08-04 06:00:00,13.1,ghtvu +2020-08-04 06:00:00,14.0,kzssz +2020-08-04 06:00:00,16.1,qqwil +2020-08-04 06:00:00,12.2,ycbiy +2020-08-04 06:00:00,14.6,yhbkq +2020-08-04 06:00:00,12.1,vmaxs +2020-08-04 06:00:00,14.5,xakyo +2020-08-04 06:00:00,13.6,tnqcp +2020-08-04 06:00:00,13.5,txryf +2020-08-04 06:00:00,14.0,giakp +2020-08-04 06:00:00,15.2,ahzhl +2020-08-04 06:00:00,14.7,bytpr +2020-08-04 06:00:00,12.1,yhphj +2020-08-04 06:00:00,15.3,cdeyn +2020-08-04 06:00:00,16.6,xxkgx +2020-08-04 06:00:00,13.7,qmpvs +2020-08-04 06:00:00,12.9,fxtyo +2020-08-04 06:00:00,13.8,mhjwb +2020-08-04 06:00:00,11.5,dvhqy +2020-08-04 06:00:00,12.8,vtpem +2020-08-04 06:00:00,12.8,ejghf +2020-08-04 06:00:00,11.0,vycbk +2020-08-04 06:00:00,14.8,jvkyi +2020-08-04 06:00:00,12.8,noagn +2020-08-04 06:00:00,14.4,mztnu +2020-08-04 06:00:00,13.7,ptqge +2020-08-04 06:00:00,13.5,wuguf +2020-08-04 06:00:00,13.9,cotha +2020-08-04 06:00:00,13.0,rzdnc +2020-08-04 06:00:00,12.7,aiint +2020-08-04 06:00:00,15.3,ggxnz +2020-08-04 06:00:00,12.6,zdern +2020-08-04 06:00:00,13.5,bpbxb +2020-08-04 06:00:00,12.6,iwcxs +2020-08-04 06:00:00,11.8,ztxqk +2020-08-04 06:00:00,13.1,umzkd +2020-08-04 06:00:00,13.6,ooeaf +2020-08-04 06:00:00,13.7,stszj +2020-08-04 06:00:00,12.4,ivelx +2020-08-04 06:00:00,13.6,hvouk +2020-08-04 06:00:00,13.3,nxfem +2020-08-04 06:00:00,15.5,plodv +2020-08-04 06:00:00,14.0,yejug +2020-08-04 06:00:00,13.4,pcbtj +2020-08-04 06:00:00,12.2,urexq +2020-08-04 06:00:00,12.1,ndute +2020-08-04 06:00:00,14.0,lywjv +2020-08-04 06:00:00,13.0,hiehy +2020-08-04 06:00:00,14.6,qtxsp +2020-08-04 06:00:00,12.9,gjmcu +2020-08-04 06:00:00,12.3,hcitm +2020-08-04 06:00:00,14.4,nsqtr +2020-08-04 06:00:00,13.0,oflot +2020-08-04 06:00:00,13.6,tcblk +2020-08-04 06:00:00,13.8,vxtor +2020-08-04 06:00:00,15.5,hbwiu +2020-08-04 06:00:00,14.3,ouhci +2020-08-04 06:00:00,12.0,yhocf +2020-08-04 06:00:00,15.7,fsyde +2020-08-04 06:00:00,12.3,qnknt +2020-08-04 06:00:00,12.9,mqpjl +2020-08-04 06:00:00,14.0,wiiyu +2020-08-04 06:00:00,12.7,qavrb +2020-08-04 06:00:00,11.8,ihown +2020-08-04 06:00:00,12.6,zuejk +2020-08-04 06:00:00,13.5,edqjm +2020-08-04 06:00:00,13.7,syndc +2020-08-04 06:00:00,13.6,cdxbb +2020-08-04 06:00:00,11.8,wguaq +2020-08-04 06:00:00,13.8,hnxwu +2020-08-04 06:00:00,15.3,ywiqb +2020-08-04 06:00:00,13.8,svdum +2020-08-04 06:00:00,14.7,acogf +2020-08-04 06:00:00,13.0,mzjgq +2020-08-04 06:00:00,12.0,wwdah +2020-08-04 06:00:00,10.8,lrhew +2020-08-04 06:00:00,15.1,rdtis +2020-08-04 06:00:00,14.2,nfrzt +2020-08-04 06:00:00,13.4,gcjrh +2020-08-04 06:00:00,14.1,xpvwh +2020-08-04 06:00:00,12.7,iqocu +2020-08-04 06:00:00,12.6,wfvrm +2020-08-04 06:00:00,12.8,vysdp +2020-08-04 06:00:00,11.7,nzkwk +2020-08-04 06:00:00,13.2,pcofv +2020-08-04 06:00:00,14.5,gunnj +2020-08-04 06:00:00,13.3,adwmg +2020-08-04 06:00:00,14.6,zichl +2020-08-04 06:00:00,13.7,cywuc +2020-08-04 06:00:00,13.4,uotkk +2020-08-04 06:00:00,14.1,kbpjv +2020-08-04 06:00:00,12.9,uakik +2020-08-04 06:00:00,15.4,wquxs +2020-08-04 06:00:00,16.3,fnzdy +2020-08-04 06:00:00,15.2,slrzo +2020-08-04 06:00:00,14.4,tlawu +2020-08-04 06:00:00,13.8,lybxy +2020-08-04 06:00:00,15.3,nncsb +2020-08-04 06:00:00,14.1,kretn +2020-08-04 06:00:00,13.7,reose +2020-08-04 06:00:00,12.1,rbaay +2020-08-04 06:00:00,13.0,yasgp +2020-08-04 06:00:00,13.0,aksdd +2020-08-04 06:00:00,11.5,ohryf +2020-08-04 06:00:00,13.5,qyxbu +2020-08-04 06:00:00,12.6,kultx +2020-08-04 06:00:00,14.3,fiyly +2020-08-04 06:00:00,15.2,rfzya +2020-08-04 06:00:00,13.4,rkoeu +2020-08-04 06:00:00,14.4,frktv +2020-08-04 06:00:00,13.6,llmmm +2020-08-04 06:00:00,13.1,btvwv +2020-08-04 06:00:00,15.2,qzgcp +2020-08-04 06:00:00,12.3,usevc +2020-08-04 06:00:00,13.6,gecot +2020-08-04 06:00:00,13.4,lfofy +2020-08-04 06:00:00,13.5,vnvbx +2020-08-04 06:00:00,13.5,tihag +2020-08-04 06:00:00,15.6,oqyss +2020-08-04 06:00:00,11.6,haxap +2020-08-04 06:00:00,14.2,zplai +2020-08-04 06:00:00,13.2,kvmrm +2020-08-04 06:00:00,14.4,ttgwc +2020-08-04 06:00:00,13.4,wlvza +2020-08-04 06:00:00,12.6,haptn +2020-08-04 06:00:00,15.0,kxnqi +2020-08-04 06:00:00,16.2,gmdsg +2020-08-04 06:00:00,13.4,cmtwl +2020-08-04 06:00:00,12.6,wssfq +2020-08-04 06:00:00,12.5,dldrv +2020-08-04 06:00:00,13.8,koeci +2020-08-04 06:00:00,11.1,ojeut +2020-08-04 06:00:00,15.5,dwqax +2020-08-04 06:00:00,12.4,ipesq +2020-08-04 06:00:00,15.2,hphlh +2020-08-04 06:00:00,11.7,iucem +2020-08-04 06:00:00,13.1,vbdzv +2020-08-04 06:00:00,14.4,qubeg +2020-08-04 06:00:00,15.4,rhqvm +2020-08-04 06:00:00,12.6,xbxbe +2020-08-04 06:00:00,13.5,rmdgs +2020-08-04 06:00:00,14.0,kcvas +2020-08-04 06:00:00,12.2,lsify +2020-08-04 06:00:00,13.0,fkgmp +2020-08-04 06:00:00,14.0,mvgcb +2020-08-04 06:00:00,13.2,drmxk +2020-08-04 06:00:00,13.8,mktph +2020-08-04 06:00:00,13.4,jfnoh +2020-08-04 06:00:00,14.4,prmvg +2020-08-04 06:00:00,13.9,ytuuu +2020-08-04 06:00:00,14.5,leety +2020-08-04 06:00:00,11.3,deaco +2020-08-04 06:00:00,14.9,btxrm +2020-08-04 06:00:00,14.2,tffmg +2020-08-04 06:00:00,12.6,cnvzb +2020-08-04 06:00:00,14.3,dsslb +2020-08-04 06:00:00,12.3,husmx +2020-08-04 06:00:00,15.3,tcfkw +2020-08-04 06:00:00,11.9,bvlsj +2020-08-04 06:00:00,13.6,zwknj +2020-08-04 06:00:00,13.9,jhdpi +2020-08-04 06:00:00,15.8,qttbn +2020-08-04 06:00:00,11.8,lvmjm +2020-08-04 06:00:00,14.5,qivsx +2020-08-04 06:00:00,14.6,nggxz +2020-08-04 06:00:00,13.7,pwjcp +2020-08-04 06:00:00,12.0,mtqnc +2020-08-04 06:00:00,12.1,ltfms +2020-08-04 06:00:00,12.4,yymxg +2020-08-04 06:00:00,12.3,vdwsy +2020-08-04 06:00:00,13.6,pidkl +2020-08-04 06:00:00,17.0,rvfml +2020-08-04 06:00:00,47.3,tykui +2020-08-04 06:00:00,0.0,ejfoz +2020-08-04 06:00:00,14.5,evobf +2020-08-04 06:00:00,14.7,kcymm +2020-08-04 06:00:00,17.72222,vleon +2020-08-04 06:00:00,14.5,rrnhm +2020-08-04 06:00:00,17.22222,bttyj +2020-08-04 06:00:00,16.16667,oaumt +2020-08-04 06:00:00,15.27778,hjdlp +2020-08-04 06:00:00,14.83333,ntpqk +2020-08-04 06:00:00,14.5,kjnyi +2020-08-04 06:00:00,15.44444,dwsvq +2020-08-04 06:00:00,15.55556,hlrpq +2020-08-04 06:00:00,17.11111,mnywm +2020-08-04 06:00:00,14.55556,fnnnx +2020-08-04 06:00:00,11.88889,ahwef +2020-08-04 06:00:00,12.11111,bkahv +2020-08-04 06:00:00,12.14444,xtoxr +2020-08-04 06:00:00,14.38889,jvrao +2020-08-04 06:00:00,16.11111,oszcp +2020-08-04 06:00:00,15.11111,ljhka +2020-08-04 06:00:00,15.72222,zhkbc +2020-08-04 06:00:00,14.61111,sfmjs +2020-08-04 06:00:00,14.5,nnyuc +2020-08-04 06:00:00,13.5,sdvmr +2020-08-04 06:00:00,14.44444,imjpm +2020-08-04 06:00:00,20.88889,rdbaf +2020-08-04 06:00:00,19.22222,fkyme +2020-08-04 06:00:00,16.77778,sdaqv +2020-08-04 06:00:00,12.27778,oapgx +2020-08-04 06:00:00,14.38889,dsczo +2020-08-04 06:00:00,18.4,xataf +2020-08-04 06:00:00,18.9,oaqph +2020-08-04 06:00:00,15.1,hooqf +2020-08-04 06:00:00,23.7,pbklv +2020-08-04 06:00:00,18.8,lctcs +2020-08-04 06:00:00,15.6,fcukz +2020-08-04 06:00:00,12.9,hcydv +2020-08-04 06:00:00,19.5,ezebq +2020-08-04 06:00:00,15.7,ihhmy +2020-08-04 06:00:00,16.1,mxwwj +2020-08-04 06:00:00,25.0,pahze +2020-08-04 06:00:00,17.6,kcxms +2020-08-04 06:00:00,18.7,tjsch +2020-08-04 06:00:00,15.5,svxom +2020-08-04 06:00:00,18.6,abfvc +2020-08-04 06:00:00,16.4,ierzq +2020-08-04 06:00:00,16.4,wvcip +2020-08-04 06:00:00,17.0,ixmaf +2020-08-04 06:00:00,23.3,mbdop +2020-08-04 06:00:00,20.1,drzch +2020-08-04 06:00:00,20.7,lyhqc +2020-08-04 06:00:00,17.1,owtyy +2020-08-04 06:00:00,16.7,fvify +2020-08-04 06:00:00,18.4,sifce +2020-08-04 06:00:00,14.2,qaeyo +2020-08-04 06:00:00,24.2,ahobs +2020-08-04 06:00:00,20.5,ynbjr +2020-08-04 06:00:00,17.1,zjnnm +2020-08-04 06:00:00,18.8,smmgt +2020-08-04 06:00:00,19.6,rsmae +2020-08-04 06:00:00,22.7,zxtht +2020-08-04 06:00:00,17.7,fccef +2020-08-04 06:00:00,17.5,uujoy +2020-08-04 06:00:00,15.5,jbgdo +2020-08-04 06:00:00,16.8,irzil +2020-08-04 06:00:00,23.8,dyfil +2020-08-04 06:00:00,18.6,atqhc +2020-08-04 06:00:00,24.4,vvtws +2020-08-04 06:00:00,17.9,ngmnm +2020-08-04 06:00:00,14.5,xdywu +2020-08-04 06:00:00,14.4,bjsta +2020-08-04 06:00:00,18.4,bbije +2020-08-04 06:00:00,16.9,oolbj +2020-08-04 06:00:00,17.6,ivkvr +2020-08-04 06:00:00,16.4,adykq +2020-08-04 06:00:00,22.6,vkmls +2020-08-04 06:00:00,19.8,pjlfa +2020-08-04 06:00:00,14.9,xqytl +2020-08-04 06:00:00,16.8,aqcyr +2020-08-04 06:00:00,17.3,cikgj +2020-08-04 06:00:00,23.5,ljwns +2020-08-04 06:00:00,12.0,kojsr +2020-08-04 06:00:00,17.9,xfhpx +2020-08-04 06:00:00,12.7,apctj +2020-08-04 06:00:00,20.8,mocpf +2020-08-04 06:00:00,17.4,vudfc +2020-08-04 06:00:00,18.3,fhyhy +2020-08-04 06:00:00,17.4,cwviz +2020-08-04 06:00:00,17.3,cysqv +2020-08-04 06:00:00,16.8,rcimk +2020-08-04 06:00:00,16.5,vbfow +2020-08-04 06:00:00,24.9,okuny +2020-08-04 06:00:00,20.0,vlvrq +2020-08-04 06:00:00,15.2,eptar +2020-08-04 06:00:00,18.7,xrkmq +2020-08-04 06:00:00,16.9,fwvpu +2020-08-04 06:00:00,14.3,kjbdx +2020-08-04 06:00:00,18.4,kkndj +2020-08-04 06:00:00,19.0,thrud +2020-08-04 06:00:00,14.7,otvrh +2020-08-04 06:00:00,25.5,nksxy +2020-08-04 06:00:00,15.0,jofxa +2020-08-04 06:00:00,17.1,ndjub +2020-08-04 06:00:00,21.1,npwwe +2020-08-04 06:00:00,15.0,wpsoy +2020-08-04 06:00:00,24.9,drbeo +2020-08-04 06:00:00,15.4,qpvdo +2020-08-04 06:00:00,17.8,wrmic +2020-08-04 06:00:00,16.6,jqare +2020-08-04 06:00:00,15.5,ckorf +2020-08-04 06:00:00,20.0,whfxy +2020-08-04 06:00:00,15.8,vhcmj +2020-08-04 06:00:00,17.4,rkkaw +2020-08-04 06:00:00,16.2,phrpb +2020-08-04 06:00:00,25.1,eafjs +2020-08-04 06:00:00,21.3,htvkq +2020-08-04 06:00:00,15.2,mmbcs +2020-08-04 06:00:00,18.9,iogus +2020-08-04 06:00:00,21.2,evglv +2020-08-04 06:00:00,15.7,iiusu +2020-08-04 06:00:00,21.8,awktm +2020-08-04 06:00:00,18.1,fynse +2020-08-04 06:00:00,16.6,ojthh +2020-08-04 06:00:00,16.7,ucjbd +2020-08-04 06:00:00,9.9,kjmfs +2020-08-04 06:00:00,14.5,ndvqc +2020-08-04 06:00:00,17.0,xhztq +2020-08-04 06:00:00,16.8,otwdf +2020-08-04 06:00:00,23.4,hgatb +2020-08-04 06:00:00,16.8,yuxlt +2020-08-04 06:00:00,15.1,gqmws +2020-08-04 06:00:00,14.6,wgefq +2020-08-04 06:00:00,18.0,tqrcb +2020-08-04 06:00:00,15.5,muuvq +2020-08-04 06:00:00,24.9,tegfb +2020-08-04 06:00:00,15.2,copbg +2020-08-04 06:00:00,15.7,aryhl +2020-08-04 06:00:00,17.3,zkzik +2020-08-04 06:00:00,15.7,rwvtt +2020-08-04 06:00:00,16.0,snbhs +2020-08-04 06:00:00,12.2,iewqh +2020-08-04 06:00:00,11.72222,dqtai +2020-08-04 06:00:00,11.33333,nuzsv +2020-08-04 06:00:00,11.55556,lgsvl +2020-08-04 06:00:00,11.44444,blmxa +2020-08-04 06:00:00,11.55556,ovxxj +2020-08-04 06:00:00,11.88889,uuhcx +2020-08-04 06:00:00,11.72222,aioiq +2020-08-04 06:00:00,10.88889,xpizq +2020-08-04 06:00:00,11.22222,hbhhs +2020-08-04 06:00:00,11.0,kfksc +2020-08-04 06:00:00,10.27778,qaeee +2020-08-04 06:00:00,10.77778,almmh +2020-08-04 06:00:00,11.61111,gxlyb +2020-08-04 06:00:00,11.5,gyqkn +2020-08-04 06:00:00,10.77778,kzqna +2020-08-04 06:00:00,9.61111,zdrio +2020-08-04 06:00:00,10.66667,muwpb +2020-08-04 06:00:00,11.88889,sqdbm +2020-08-04 06:00:00,11.27778,tjquy +2020-08-04 06:00:00,14.77778,wgnku +2020-08-04 06:00:00,15.72222,kjgbf +2020-08-04 06:00:00,15.22222,qayib +2020-08-04 06:00:00,10.55556,qxppc +2020-08-04 06:00:00,15.3,dveuq +2020-08-04 06:00:00,11.6,zjubp +2020-08-04 06:00:00,10.7,slxyr +2020-08-04 06:00:00,15.9,peypk +2020-08-04 06:00:00,16.8,dkinp +2020-08-04 06:00:00,10.1,wczxz +2020-08-04 06:00:00,14.1,jqjxq +2020-08-04 06:00:00,16.1,ipaod +2020-08-04 06:00:00,11.0,ginpe +2020-08-04 06:00:00,16.1,qmcjn +2020-08-04 06:00:00,12.4,gncic +2020-08-04 06:00:00,9.2,ktcei +2020-08-04 06:00:00,15.1,ymbqc +2020-08-04 06:00:00,11.4,dtunu +2020-08-04 06:00:00,10.9,kimee +2020-08-04 06:00:00,16.4,igylq +2020-08-04 06:00:00,15.9,qkblc +2020-08-04 06:00:00,15.6,zrgnz +2020-08-04 06:00:00,11.7,ffybf +2020-08-04 06:00:00,10.5,dgwvq +2020-08-04 06:00:00,10.1,llziw +2020-08-04 06:00:00,14.8,jmpwu +2020-08-04 06:00:00,10.4,tjduz +2020-08-04 06:00:00,14.7,isizb +2020-08-04 06:00:00,10.8,ipyve +2020-08-04 06:00:00,10.7,jgick +2020-08-04 06:00:00,10.8,dlwrl +2020-08-04 06:00:00,11.3,bwzzs +2020-08-04 06:00:00,16.0,pduvn +2020-08-04 06:00:00,16.4,acdos +2020-08-04 06:00:00,17.0,jzptm +2020-08-04 06:00:00,10.6,zmila +2020-08-04 06:00:00,11.3,iiaah +2020-08-04 06:00:00,10.0,qbcne +2020-08-04 06:00:00,15.0,hmxwa +2020-08-04 06:00:00,13.22222,mikqn +2020-08-04 06:00:00,16.22222,kelro +2020-08-04 07:00:00,14.6,gkbid +2020-08-04 07:00:00,15.3,nfxow +2020-08-04 07:00:00,16.7,vlwwz +2020-08-04 07:00:00,17.1,gnjnq +2020-08-04 07:00:00,15.7,plcis +2020-08-04 07:00:00,15.8,mijak +2020-08-04 07:00:00,15.0,vylxf +2020-08-04 07:00:00,16.0,qnrpm +2020-08-04 07:00:00,16.1,woteb +2020-08-04 07:00:00,15.6,eqfly +2020-08-04 07:00:00,16.1,doxbb +2020-08-04 07:00:00,16.3,ybdno +2020-08-04 07:00:00,15.6,savmq +2020-08-04 07:00:00,16.4,ezrwe +2020-08-04 07:00:00,16.0,dejab +2020-08-04 07:00:00,14.1,wccjf +2020-08-04 07:00:00,15.1,ckjnn +2020-08-04 07:00:00,16.8,gzoye +2020-08-04 07:00:00,17.0,evobf +2020-08-04 07:00:00,16.3,cbhsb +2020-08-04 07:00:00,16.5,qdekv +2020-08-04 07:00:00,16.4,gklox +2020-08-04 07:00:00,16.0,deobj +2020-08-04 07:00:00,15.7,zdpci +2020-08-04 07:00:00,16.6,bhpmz +2020-08-04 07:00:00,15.4,papaf +2020-08-04 07:00:00,16.0,lfagh +2020-08-04 07:00:00,16.7,gxcgu +2020-08-04 07:00:00,16.9,zxslr +2020-08-04 07:00:00,16.1,hgrlx +2020-08-04 07:00:00,15.2,kdowy +2020-08-04 07:00:00,14.6,pdbhy +2020-08-04 07:00:00,14.9,hipjh +2020-08-04 07:00:00,13.9,vmryv +2020-08-04 07:00:00,12.6,xokqh +2020-08-04 07:00:00,16.0,tnfna +2020-08-04 07:00:00,15.8,tkfhq +2020-08-04 07:00:00,16.4,kctnv +2020-08-04 07:00:00,15.8,bpvyz +2020-08-04 07:00:00,15.8,prtwa +2020-08-04 07:00:00,16.0,vjstu +2020-08-04 07:00:00,15.9,vpdsa +2020-08-04 07:00:00,16.3,efnlc +2020-08-04 07:00:00,15.8,wwuyi +2020-08-04 07:00:00,15.2,arpjv +2020-08-04 07:00:00,13.2,jdnkd +2020-08-04 07:00:00,12.7,cnpjv +2020-08-04 07:00:00,13.6,vpgiu +2020-08-04 07:00:00,14.8,dpmek +2020-08-04 07:00:00,14.5,jzcps +2020-08-04 07:00:00,13.8,iewqh +2020-08-04 07:00:00,16.55556,sqdlj +2020-08-04 07:00:00,15.44444,dqtai +2020-08-04 07:00:00,16.11111,nqlto +2020-08-04 07:00:00,16.11111,ldaup +2020-08-04 07:00:00,15.38889,bzpyt +2020-08-04 07:00:00,16.33333,alybz +2020-08-04 07:00:00,14.33333,lzhen +2020-08-04 07:00:00,15.77778,tqfkn +2020-08-04 07:00:00,13.88889,wgxpj +2020-08-04 07:00:00,16.5,nuzsv +2020-08-04 07:00:00,15.5,mqzft +2020-08-04 07:00:00,15.33333,lgsvl +2020-08-04 07:00:00,15.16667,zyfvs +2020-08-04 07:00:00,15.61111,kzwzn +2020-08-04 07:00:00,16.55556,kenrf +2020-08-04 07:00:00,15.94444,blmxa +2020-08-04 07:00:00,14.11111,ovxxj +2020-08-04 07:00:00,14.94444,gmdwp +2020-08-04 07:00:00,15.55556,krvqc +2020-08-04 07:00:00,15.94444,fcplm +2020-08-04 07:00:00,15.83333,ilwqw +2020-08-04 07:00:00,14.88889,wmerb +2020-08-04 07:00:00,16.94444,mrsle +2020-08-04 07:00:00,14.22222,czljd +2020-08-04 07:00:00,15.72222,owdub +2020-08-04 07:00:00,16.94444,kjnyi +2020-08-04 07:00:00,16.27778,djtgy +2020-08-04 07:00:00,16.88889,uuhcx +2020-08-04 07:00:00,15.61111,ruzsu +2020-08-04 07:00:00,14.88889,dnlqg +2020-08-04 07:00:00,16.0,kbvuy +2020-08-04 07:00:00,14.38889,tgzxw +2020-08-04 07:00:00,16.22222,wkkho +2020-08-04 07:00:00,16.38889,hlrpq +2020-08-04 07:00:00,15.16667,ssjlf +2020-08-04 07:00:00,16.22222,pfnsl +2020-08-04 07:00:00,17.27778,vlcim +2020-08-04 07:00:00,16.38889,pvqjy +2020-08-04 07:00:00,17.44444,tckyu +2020-08-04 07:00:00,15.61111,knnxf +2020-08-04 07:00:00,16.05556,jpbqw +2020-08-04 07:00:00,14.88889,xpizq +2020-08-04 07:00:00,16.5,uobqf +2020-08-04 07:00:00,14.66667,rmwdd +2020-08-04 07:00:00,14.72222,okamk +2020-08-04 07:00:00,16.0,zkvzt +2020-08-04 07:00:00,16.16667,hivjq +2020-08-04 07:00:00,16.61111,kfksc +2020-08-04 07:00:00,17.22222,qaeee +2020-08-04 07:00:00,14.5,almmh +2020-08-04 07:00:00,16.16667,noubl +2020-08-04 07:00:00,14.88889,psxfe +2020-08-04 07:00:00,13.77778,wppgj +2020-08-04 07:00:00,13.38889,jhwop +2020-08-04 07:00:00,15.22222,hzsnb +2020-08-04 07:00:00,16.72222,ahwef +2020-08-04 07:00:00,16.16667,ivehw +2020-08-04 07:00:00,15.33333,ofcyo +2020-08-04 07:00:00,15.5,nadmj +2020-08-04 07:00:00,15.88889,rrblt +2020-08-04 07:00:00,17.27778,ehael +2020-08-04 07:00:00,13.88889,kanab +2020-08-04 07:00:00,15.33333,rzbao +2020-08-04 07:00:00,15.11111,dolqy +2020-08-04 07:00:00,14.38889,jgflx +2020-08-04 07:00:00,14.01806,sboyq +2020-08-04 07:00:00,15.77778,jpeej +2020-08-04 07:00:00,14.61111,eyhqb +2020-08-04 07:00:00,16.61111,xtwrj +2020-08-04 07:00:00,15.77778,babhc +2020-08-04 07:00:00,16.22222,wvnwv +2020-08-04 07:00:00,13.77778,kzqna +2020-08-04 07:00:00,14.11111,lojzd +2020-08-04 07:00:00,13.22222,cicho +2020-08-04 07:00:00,13.61111,psvsy +2020-08-04 07:00:00,14.72222,xadne +2020-08-04 07:00:00,14.11111,sqdbm +2020-08-04 07:00:00,16.61111,aebcr +2020-08-04 07:00:00,16.22222,cnixu +2020-08-04 07:00:00,15.88889,jzkgm +2020-08-04 07:00:00,16.0,oyamr +2020-08-04 07:00:00,15.48333,xtoxr +2020-08-04 07:00:00,16.77778,kpmly +2020-08-04 07:00:00,16.27778,khcvi +2020-08-04 07:00:00,16.72222,cdvwy +2020-08-04 07:00:00,16.11111,tjquy +2020-08-04 07:00:00,16.5,oxhol +2020-08-04 07:00:00,14.0,xcimd +2020-08-04 07:00:00,16.0,bgdiq +2020-08-04 07:00:00,16.61111,jvrao +2020-08-04 07:00:00,16.11111,eprel +2020-08-04 07:00:00,14.72222,rjkik +2020-08-04 07:00:00,16.61111,fpyxg +2020-08-04 07:00:00,17.0,rpkjp +2020-08-04 07:00:00,16.1,fiqlz +2020-08-04 07:00:00,15.72222,ujcyx +2020-08-04 07:00:00,16.61111,nzfbp +2020-08-04 07:00:00,15.61111,dypjk +2020-08-04 07:00:00,14.22222,hbrkp +2020-08-04 07:00:00,16.27778,gffdv +2020-08-04 07:00:00,16.61111,crxzy +2020-08-04 07:00:00,15.38889,dhzaj +2020-08-04 07:00:00,12.77778,lezly +2020-08-04 07:00:00,16.38889,ibagr +2020-08-04 07:00:00,16.0,estrc +2020-08-04 07:00:00,15.0,fgiws +2020-08-04 07:00:00,14.88889,ussxj +2020-08-04 07:00:00,15.88889,nrvjb +2020-08-04 07:00:00,17.0,suooc +2020-08-04 07:00:00,14.88889,dipko +2020-08-04 07:00:00,16.38889,fbmhp +2020-08-04 07:00:00,15.27778,dzvyy +2020-08-04 07:00:00,16.27778,sfmjs +2020-08-04 07:00:00,16.11111,zislb +2020-08-04 07:00:00,17.77778,hogxc +2020-08-04 07:00:00,15.27778,xlaob +2020-08-04 07:00:00,15.77778,urzzk +2020-08-04 07:00:00,15.77778,xiybo +2020-08-04 07:00:00,16.88889,kelro +2020-08-04 07:00:00,14.88889,uekqb +2020-08-04 07:00:00,16.22222,ztmms +2020-08-04 07:00:00,15.27778,muaeg +2020-08-04 07:00:00,15.72222,amvul +2020-08-04 07:00:00,15.72222,ayiea +2020-08-04 07:00:00,16.27778,wdwen +2020-08-04 07:00:00,15.11111,khlfx +2020-08-04 07:00:00,14.22222,qdlmf +2020-08-04 07:00:00,13.38889,ufldd +2020-08-04 07:00:00,15.72222,bnhjf +2020-08-04 07:00:00,15.72222,vsegj +2020-08-04 07:00:00,14.77778,dacwi +2020-08-04 07:00:00,15.77778,kvmjf +2020-08-04 07:00:00,14.83333,ipijg +2020-08-04 07:00:00,16.77778,vpelr +2020-08-04 07:00:00,16.77778,bmwbn +2020-08-04 07:00:00,14.77778,hugfh +2020-08-04 07:00:00,16.66667,moxrx +2020-08-04 07:00:00,16.22222,altqr +2020-08-04 07:00:00,15.33333,ounrl +2020-08-04 07:00:00,17.0,sdaqv +2020-08-04 07:00:00,15.22222,fbrxd +2020-08-04 07:00:00,13.72222,brnhd +2020-08-04 07:00:00,15.77778,jodzb +2020-08-04 07:00:00,15.77778,nnjle +2020-08-04 07:00:00,15.61111,kqjds +2020-08-04 07:00:00,16.22222,xsbps +2020-08-04 07:00:00,15.72222,mfwnz +2020-08-04 07:00:00,15.88889,dsczo +2020-08-04 07:00:00,14.77778,qidgd +2020-08-04 07:00:00,16.61111,uvcyf +2020-08-04 07:00:00,15.0,mmbpn +2020-08-04 07:00:00,14.9,pbfcx +2020-08-04 07:00:00,13.6,utryj +2020-08-04 07:00:00,16.0,yiywu +2020-08-04 07:00:00,14.6,uyhkr +2020-08-04 07:00:00,14.3,zjubp +2020-08-04 07:00:00,16.0,fwtoy +2020-08-04 07:00:00,14.3,bxidy +2020-08-04 07:00:00,15.9,fecem +2020-08-04 07:00:00,14.9,begvh +2020-08-04 07:00:00,15.2,rlkjk +2020-08-04 07:00:00,13.8,nbitj +2020-08-04 07:00:00,16.1,hooqf +2020-08-04 07:00:00,14.6,cgghn +2020-08-04 07:00:00,14.1,ckdbs +2020-08-04 07:00:00,15.9,yhvwz +2020-08-04 07:00:00,16.1,nbutu +2020-08-04 07:00:00,16.8,ijzkb +2020-08-04 07:00:00,17.0,cotxr +2020-08-04 07:00:00,15.4,bsxux +2020-08-04 07:00:00,15.0,xtwil +2020-08-04 07:00:00,15.5,kpolf +2020-08-04 07:00:00,15.9,frlga +2020-08-04 07:00:00,16.1,hcydv +2020-08-04 07:00:00,14.8,uwinc +2020-08-04 07:00:00,15.1,kbdhf +2020-08-04 07:00:00,13.7,ypjjc +2020-08-04 07:00:00,14.0,kpphy +2020-08-04 07:00:00,16.6,peypk +2020-08-04 07:00:00,14.5,mnczw +2020-08-04 07:00:00,14.7,teeno +2020-08-04 07:00:00,15.4,cczvb +2020-08-04 07:00:00,13.7,ezrfg +2020-08-04 07:00:00,14.5,asbca +2020-08-04 07:00:00,13.7,zcagk +2020-08-04 07:00:00,14.7,kokia +2020-08-04 07:00:00,15.1,jcjim +2020-08-04 07:00:00,15.4,lshyu +2020-08-04 07:00:00,14.8,peory +2020-08-04 07:00:00,13.7,agneq +2020-08-04 07:00:00,17.2,bsypp +2020-08-04 07:00:00,16.4,ierzq +2020-08-04 07:00:00,14.2,chiez +2020-08-04 07:00:00,13.3,bgwme +2020-08-04 07:00:00,16.9,ggxsj +2020-08-04 07:00:00,15.4,evahb +2020-08-04 07:00:00,14.8,rjnqu +2020-08-04 07:00:00,14.0,loycv +2020-08-04 07:00:00,17.3,dkinp +2020-08-04 07:00:00,15.3,rycdc +2020-08-04 07:00:00,12.8,yfrtn +2020-08-04 07:00:00,14.7,woeit +2020-08-04 07:00:00,15.9,lczyo +2020-08-04 07:00:00,15.0,iysis +2020-08-04 07:00:00,14.1,wgaiu +2020-08-04 07:00:00,14.7,cyjkp +2020-08-04 07:00:00,14.0,itjfr +2020-08-04 07:00:00,14.0,rzzfn +2020-08-04 07:00:00,15.4,yfsun +2020-08-04 07:00:00,14.9,piqev +2020-08-04 07:00:00,15.2,wfkqc +2020-08-04 07:00:00,16.8,ztgfu +2020-08-04 07:00:00,15.1,fahhr +2020-08-04 07:00:00,15.0,lajyk +2020-08-04 07:00:00,14.8,glwbi +2020-08-04 07:00:00,14.9,nzavz +2020-08-04 07:00:00,12.8,fislm +2020-08-04 07:00:00,16.6,byetq +2020-08-04 07:00:00,16.0,xxkrz +2020-08-04 07:00:00,14.8,jqjxq +2020-08-04 07:00:00,16.9,lpbsn +2020-08-04 07:00:00,17.7,ipaod +2020-08-04 07:00:00,15.2,eabad +2020-08-04 07:00:00,16.6,hxidk +2020-08-04 07:00:00,16.0,qmeqk +2020-08-04 07:00:00,15.4,otbbb +2020-08-04 07:00:00,13.9,uyudz +2020-08-04 07:00:00,16.7,fvify +2020-08-04 07:00:00,15.1,tggup +2020-08-04 07:00:00,14.8,qaeyo +2020-08-04 07:00:00,15.2,xsdlo +2020-08-04 07:00:00,14.5,pmfnb +2020-08-04 07:00:00,14.9,egpmm +2020-08-04 07:00:00,14.2,auahq +2020-08-04 07:00:00,15.2,fiokc +2020-08-04 07:00:00,15.1,djapy +2020-08-04 07:00:00,16.9,ptinq +2020-08-04 07:00:00,14.7,rgxtf +2020-08-04 07:00:00,15.5,kddvu +2020-08-04 07:00:00,12.8,yhpqj +2020-08-04 07:00:00,14.9,nzqbn +2020-08-04 07:00:00,14.8,vyupo +2020-08-04 07:00:00,12.6,ihmij +2020-08-04 07:00:00,14.1,imjov +2020-08-04 07:00:00,14.2,gncic +2020-08-04 07:00:00,15.5,usdwm +2020-08-04 07:00:00,15.0,oytin +2020-08-04 07:00:00,15.2,zqmdp +2020-08-04 07:00:00,14.3,notnn +2020-08-04 07:00:00,14.1,pfdzl +2020-08-04 07:00:00,15.0,tdslf +2020-08-04 07:00:00,14.6,ypvib +2020-08-04 07:00:00,14.0,znrow +2020-08-04 07:00:00,15.7,pcjst +2020-08-04 07:00:00,15.2,bazjf +2020-08-04 07:00:00,13.5,knzsr +2020-08-04 07:00:00,15.2,ldnly +2020-08-04 07:00:00,14.0,gwkuq +2020-08-04 07:00:00,15.2,erulv +2020-08-04 07:00:00,14.7,dwtik +2020-08-04 07:00:00,14.4,phmya +2020-08-04 07:00:00,15.2,bbllv +2020-08-04 07:00:00,13.9,xhmud +2020-08-04 07:00:00,14.2,boqsj +2020-08-04 07:00:00,14.5,yrsxm +2020-08-04 07:00:00,13.5,ztkxe +2020-08-04 07:00:00,15.6,xdywu +2020-08-04 07:00:00,15.8,dbibg +2020-08-04 07:00:00,12.7,rikpg +2020-08-04 07:00:00,14.7,kavwb +2020-08-04 07:00:00,16.9,ylfcv +2020-08-04 07:00:00,14.4,pfcaa +2020-08-04 07:00:00,14.6,mkplm +2020-08-04 07:00:00,15.2,qwcnk +2020-08-04 07:00:00,16.1,drlil +2020-08-04 07:00:00,14.9,mblxl +2020-08-04 07:00:00,15.9,grqqe +2020-08-04 07:00:00,15.3,dhvfr +2020-08-04 07:00:00,15.7,pnlct +2020-08-04 07:00:00,14.6,mugrd +2020-08-04 07:00:00,15.2,ayahb +2020-08-04 07:00:00,14.2,ldzmh +2020-08-04 07:00:00,13.9,tflni +2020-08-04 07:00:00,14.0,waoya +2020-08-04 07:00:00,14.5,ioqjw +2020-08-04 07:00:00,13.3,kdwaa +2020-08-04 07:00:00,17.7,pfwnb +2020-08-04 07:00:00,15.2,lydbu +2020-08-04 07:00:00,16.6,aqcyr +2020-08-04 07:00:00,16.9,qkblc +2020-08-04 07:00:00,14.6,ymhhf +2020-08-04 07:00:00,17.0,vpzqo +2020-08-04 07:00:00,14.7,kojsr +2020-08-04 07:00:00,17.0,fsnbh +2020-08-04 07:00:00,15.2,hwwfq +2020-08-04 07:00:00,16.4,xuuro +2020-08-04 07:00:00,16.5,xfhpx +2020-08-04 07:00:00,14.2,ghtvu +2020-08-04 07:00:00,14.1,apctj +2020-08-04 07:00:00,14.8,kzssz +2020-08-04 07:00:00,16.6,qqwil +2020-08-04 07:00:00,13.5,ycbiy +2020-08-04 07:00:00,15.2,yhbkq +2020-08-04 07:00:00,14.2,vmaxs +2020-08-04 07:00:00,15.8,xakyo +2020-08-04 07:00:00,16.6,tnqcp +2020-08-04 07:00:00,14.9,txryf +2020-08-04 07:00:00,16.8,giakp +2020-08-04 07:00:00,16.3,ahzhl +2020-08-04 07:00:00,14.1,yhphj +2020-08-04 07:00:00,15.8,cdeyn +2020-08-04 07:00:00,17.6,xxkgx +2020-08-04 07:00:00,14.1,qmpvs +2020-08-04 07:00:00,15.6,fxtyo +2020-08-04 07:00:00,15.6,ffybf +2020-08-04 07:00:00,15.6,mhjwb +2020-08-04 07:00:00,15.8,dvhqy +2020-08-04 07:00:00,14.3,vtpem +2020-08-04 07:00:00,14.2,dgwvq +2020-08-04 07:00:00,13.9,ejghf +2020-08-04 07:00:00,15.5,noagn +2020-08-04 07:00:00,15.8,mztnu +2020-08-04 07:00:00,15.0,cotha +2020-08-04 07:00:00,15.2,rzdnc +2020-08-04 07:00:00,14.8,aiint +2020-08-04 07:00:00,14.0,zdern +2020-08-04 07:00:00,15.7,bpbxb +2020-08-04 07:00:00,16.0,iwcxs +2020-08-04 07:00:00,13.5,ztxqk +2020-08-04 07:00:00,14.9,umzkd +2020-08-04 07:00:00,15.6,ooeaf +2020-08-04 07:00:00,17.0,jmpwu +2020-08-04 07:00:00,16.0,stszj +2020-08-04 07:00:00,15.2,ivelx +2020-08-04 07:00:00,14.8,hvouk +2020-08-04 07:00:00,15.5,nxfem +2020-08-04 07:00:00,16.0,plodv +2020-08-04 07:00:00,14.9,yejug +2020-08-04 07:00:00,14.4,pcbtj +2020-08-04 07:00:00,14.7,urexq +2020-08-04 07:00:00,13.1,ndute +2020-08-04 07:00:00,15.2,lywjv +2020-08-04 07:00:00,14.6,hiehy +2020-08-04 07:00:00,14.8,kjbdx +2020-08-04 07:00:00,14.6,gjmcu +2020-08-04 07:00:00,16.1,hcitm +2020-08-04 07:00:00,16.2,nsqtr +2020-08-04 07:00:00,15.1,oflot +2020-08-04 07:00:00,14.8,tcblk +2020-08-04 07:00:00,15.1,vxtor +2020-08-04 07:00:00,16.3,hbwiu +2020-08-04 07:00:00,15.3,isizb +2020-08-04 07:00:00,15.8,otvrh +2020-08-04 07:00:00,14.8,yhocf +2020-08-04 07:00:00,16.7,fsyde +2020-08-04 07:00:00,14.2,qnknt +2020-08-04 07:00:00,15.3,mqpjl +2020-08-04 07:00:00,15.5,wiiyu +2020-08-04 07:00:00,14.0,qavrb +2020-08-04 07:00:00,14.6,ihown +2020-08-04 07:00:00,15.0,zuejk +2020-08-04 07:00:00,14.4,edqjm +2020-08-04 07:00:00,14.9,syndc +2020-08-04 07:00:00,15.8,cdxbb +2020-08-04 07:00:00,14.4,wguaq +2020-08-04 07:00:00,13.6,ipyve +2020-08-04 07:00:00,16.1,hnxwu +2020-08-04 07:00:00,17.7,ywiqb +2020-08-04 07:00:00,14.0,jgick +2020-08-04 07:00:00,16.3,wpsoy +2020-08-04 07:00:00,14.6,svdum +2020-08-04 07:00:00,15.5,acogf +2020-08-04 07:00:00,14.5,mzjgq +2020-08-04 07:00:00,14.8,wwdah +2020-08-04 07:00:00,13.5,lrhew +2020-08-04 07:00:00,16.3,rdtis +2020-08-04 07:00:00,16.1,nfrzt +2020-08-04 07:00:00,13.9,gcjrh +2020-08-04 07:00:00,15.5,xpvwh +2020-08-04 07:00:00,15.2,iqocu +2020-08-04 07:00:00,14.5,wfvrm +2020-08-04 07:00:00,15.0,vysdp +2020-08-04 07:00:00,15.4,nzkwk +2020-08-04 07:00:00,16.5,qpvdo +2020-08-04 07:00:00,15.9,pcofv +2020-08-04 07:00:00,15.7,gunnj +2020-08-04 07:00:00,13.4,dlwrl +2020-08-04 07:00:00,13.7,adwmg +2020-08-04 07:00:00,15.8,zichl +2020-08-04 07:00:00,16.3,cywuc +2020-08-04 07:00:00,14.8,uotkk +2020-08-04 07:00:00,14.8,kbpjv +2020-08-04 07:00:00,16.9,jqare +2020-08-04 07:00:00,13.9,uakik +2020-08-04 07:00:00,16.4,wquxs +2020-08-04 07:00:00,16.9,fnzdy +2020-08-04 07:00:00,16.2,slrzo +2020-08-04 07:00:00,15.9,tlawu +2020-08-04 07:00:00,15.1,lybxy +2020-08-04 07:00:00,15.9,nncsb +2020-08-04 07:00:00,15.2,reose +2020-08-04 07:00:00,13.2,rbaay +2020-08-04 07:00:00,14.2,yasgp +2020-08-04 07:00:00,14.6,aksdd +2020-08-04 07:00:00,13.4,ohryf +2020-08-04 07:00:00,14.5,qyxbu +2020-08-04 07:00:00,15.1,kultx +2020-08-04 07:00:00,15.5,fiyly +2020-08-04 07:00:00,14.7,rkoeu +2020-08-04 07:00:00,15.8,frktv +2020-08-04 07:00:00,15.8,llmmm +2020-08-04 07:00:00,16.9,mmbcs +2020-08-04 07:00:00,13.9,btvwv +2020-08-04 07:00:00,16.0,qzgcp +2020-08-04 07:00:00,15.1,usevc +2020-08-04 07:00:00,15.4,gecot +2020-08-04 07:00:00,14.7,lfofy +2020-08-04 07:00:00,14.8,vnvbx +2020-08-04 07:00:00,15.3,tihag +2020-08-04 07:00:00,16.5,oqyss +2020-08-04 07:00:00,15.2,haxap +2020-08-04 07:00:00,15.4,zplai +2020-08-04 07:00:00,16.1,kvmrm +2020-08-04 07:00:00,16.0,ttgwc +2020-08-04 07:00:00,14.8,wlvza +2020-08-04 07:00:00,14.6,haptn +2020-08-04 07:00:00,17.4,ucjbd +2020-08-04 07:00:00,16.3,koeci +2020-08-04 07:00:00,15.8,ojeut +2020-08-04 07:00:00,16.9,dwqax +2020-08-04 07:00:00,15.8,ipesq +2020-08-04 07:00:00,14.1,iucem +2020-08-04 07:00:00,14.3,vbdzv +2020-08-04 07:00:00,15.0,qubeg +2020-08-04 07:00:00,16.1,rhqvm +2020-08-04 07:00:00,15.0,xbxbe +2020-08-04 07:00:00,14.7,rmdgs +2020-08-04 07:00:00,14.6,kcvas +2020-08-04 07:00:00,16.0,lsify +2020-08-04 07:00:00,15.6,fkgmp +2020-08-04 07:00:00,15.1,mvgcb +2020-08-04 07:00:00,17.5,xhztq +2020-08-04 07:00:00,15.5,mktph +2020-08-04 07:00:00,14.8,jfnoh +2020-08-04 07:00:00,15.4,prmvg +2020-08-04 07:00:00,16.4,ytuuu +2020-08-04 07:00:00,15.4,leety +2020-08-04 07:00:00,14.1,deaco +2020-08-04 07:00:00,15.3,tffmg +2020-08-04 07:00:00,14.5,cnvzb +2020-08-04 07:00:00,17.2,otwdf +2020-08-04 07:00:00,15.6,dsslb +2020-08-04 07:00:00,15.5,tcfkw +2020-08-04 07:00:00,15.5,bvlsj +2020-08-04 07:00:00,14.1,zwknj +2020-08-04 07:00:00,14.5,jhdpi +2020-08-04 07:00:00,16.4,qttbn +2020-08-04 07:00:00,13.9,lvmjm +2020-08-04 07:00:00,16.7,qivsx +2020-08-04 07:00:00,16.3,muuvq +2020-08-04 07:00:00,13.6,mtqnc +2020-08-04 07:00:00,14.5,ltfms +2020-08-04 07:00:00,15.8,copbg +2020-08-04 07:00:00,14.7,pidkl +2020-08-04 07:00:00,17.3,rvfml +2020-08-04 07:00:00,0.0,ejfoz +2020-08-04 07:00:00,39.6,tykui +2020-08-04 07:00:00,17.5,kcymm +2020-08-04 07:00:00,17.0,sqrbg +2020-08-04 07:00:00,18.1,lncdv +2020-08-04 07:00:00,17.1,ifuxm +2020-08-04 07:00:00,18.0,bjszo +2020-08-04 07:00:00,15.7,owydy +2020-08-04 07:00:00,17.1,blpnl +2020-08-04 07:00:00,16.16667,mikqn +2020-08-04 07:00:00,24.44444,vleon +2020-08-04 07:00:00,16.33333,rrnhm +2020-08-04 07:00:00,20.77778,bttyj +2020-08-04 07:00:00,21.88889,oaumt +2020-08-04 07:00:00,18.77778,jwgjj +2020-08-04 07:00:00,19.0,hjdlp +2020-08-04 07:00:00,18.33333,ntpqk +2020-08-04 07:00:00,20.11111,fzckm +2020-08-04 07:00:00,18.11111,gdpxw +2020-08-04 07:00:00,19.66667,dwsvq +2020-08-04 07:00:00,17.66667,lxbic +2020-08-04 07:00:00,17.72222,aioiq +2020-08-04 07:00:00,18.61111,mnywm +2020-08-04 07:00:00,13.94444,cifvp +2020-08-04 07:00:00,19.5,fnnnx +2020-08-04 07:00:00,12.22222,sszbf +2020-08-04 07:00:00,18.94444,crehv +2020-08-04 07:00:00,21.11111,fpkpz +2020-08-04 07:00:00,18.55556,zvyyj +2020-08-04 07:00:00,17.94444,qrytb +2020-08-04 07:00:00,18.61111,xlski +2020-08-04 07:00:00,19.5,jayci +2020-08-04 07:00:00,19.27778,krnzm +2020-08-04 07:00:00,12.61111,bkahv +2020-08-04 07:00:00,15.27778,ihrrd +2020-08-04 07:00:00,18.22222,cqati +2020-08-04 07:00:00,17.5,hnleb +2020-08-04 07:00:00,19.38889,qvcca +2020-08-04 07:00:00,19.0,ljhka +2020-08-04 07:00:00,17.0,zhkbc +2020-08-04 07:00:00,17.88889,eopzi +2020-08-04 07:00:00,17.61111,oftqd +2020-08-04 07:00:00,13.0,qxppc +2020-08-04 07:00:00,17.05556,nnyuc +2020-08-04 07:00:00,15.11111,vyect +2020-08-04 07:00:00,16.88889,sdvmr +2020-08-04 07:00:00,17.11111,imjpm +2020-08-04 07:00:00,24.27778,rdbaf +2020-08-04 07:00:00,21.0,fkyme +2020-08-04 07:00:00,17.61111,qomek +2020-08-04 07:00:00,15.61111,ogagf +2020-08-04 07:00:00,13.5,oapgx +2020-08-04 07:00:00,18.27778,awcmx +2020-08-04 07:00:00,18.61111,mjbzs +2020-08-04 07:00:00,18.3,dveuq +2020-08-04 07:00:00,18.8,ecvym +2020-08-04 07:00:00,21.8,xataf +2020-08-04 07:00:00,20.2,oaqph +2020-08-04 07:00:00,18.4,igbxx +2020-08-04 07:00:00,24.1,pbklv +2020-08-04 07:00:00,19.2,ljfve +2020-08-04 07:00:00,23.6,yjeoj +2020-08-04 07:00:00,19.6,lctcs +2020-08-04 07:00:00,20.0,gvjom +2020-08-04 07:00:00,19.3,mjtko +2020-08-04 07:00:00,19.0,fcukz +2020-08-04 07:00:00,19.2,elcuv +2020-08-04 07:00:00,19.4,ezebq +2020-08-04 07:00:00,19.8,klykn +2020-08-04 07:00:00,18.5,ihhmy +2020-08-04 07:00:00,20.6,mxwwj +2020-08-04 07:00:00,17.9,wrrrc +2020-08-04 07:00:00,31.1,pahze +2020-08-04 07:00:00,18.1,kcxms +2020-08-04 07:00:00,20.5,tjsch +2020-08-04 07:00:00,19.8,tywrl +2020-08-04 07:00:00,23.6,viely +2020-08-04 07:00:00,19.0,svxom +2020-08-04 07:00:00,20.9,abfvc +2020-08-04 07:00:00,18.9,nxits +2020-08-04 07:00:00,19.5,wvcip +2020-08-04 07:00:00,20.9,ixmaf +2020-08-04 07:00:00,19.6,oqelg +2020-08-04 07:00:00,18.0,ejrdd +2020-08-04 07:00:00,28.2,mbdop +2020-08-04 07:00:00,19.2,iwmhh +2020-08-04 07:00:00,24.2,fyzuj +2020-08-04 07:00:00,17.5,kqsdd +2020-08-04 07:00:00,20.3,drzch +2020-08-04 07:00:00,18.4,mbunu +2020-08-04 07:00:00,28.5,lyhqc +2020-08-04 07:00:00,20.6,wmowo +2020-08-04 07:00:00,18.0,jyvth +2020-08-04 07:00:00,22.2,owtyy +2020-08-04 07:00:00,17.1,axeow +2020-08-04 07:00:00,24.4,jtxeg +2020-08-04 07:00:00,18.4,sifce +2020-08-04 07:00:00,24.5,ahobs +2020-08-04 07:00:00,26.8,ynbjr +2020-08-04 07:00:00,19.4,zjnnm +2020-08-04 07:00:00,23.0,pxbit +2020-08-04 07:00:00,24.3,smmgt +2020-08-04 07:00:00,19.7,jbaja +2020-08-04 07:00:00,20.9,qmcjn +2020-08-04 07:00:00,23.2,uetgx +2020-08-04 07:00:00,18.8,uutbi +2020-08-04 07:00:00,21.1,lfvqk +2020-08-04 07:00:00,22.9,rsmae +2020-08-04 07:00:00,22.6,zxtht +2020-08-04 07:00:00,17.1,nbkja +2020-08-04 07:00:00,18.7,penwy +2020-08-04 07:00:00,21.3,fccef +2020-08-04 07:00:00,20.1,ymbqc +2020-08-04 07:00:00,19.0,evrst +2020-08-04 07:00:00,23.6,uujoy +2020-08-04 07:00:00,18.4,jbgdo +2020-08-04 07:00:00,23.0,irzil +2020-08-04 07:00:00,31.0,dyfil +2020-08-04 07:00:00,22.2,atqhc +2020-08-04 07:00:00,27.5,vvtws +2020-08-04 07:00:00,23.4,ngmnm +2020-08-04 07:00:00,18.9,bjsta +2020-08-04 07:00:00,11.9,kimee +2020-08-04 07:00:00,18.3,gzfmr +2020-08-04 07:00:00,17.6,oolbj +2020-08-04 07:00:00,27.1,ivkvr +2020-08-04 07:00:00,17.8,adykq +2020-08-04 07:00:00,18.9,bduku +2020-08-04 07:00:00,18.4,igylq +2020-08-04 07:00:00,19.1,vkmls +2020-08-04 07:00:00,17.8,xqytl +2020-08-04 07:00:00,29.1,cikgj +2020-08-04 07:00:00,23.7,ljwns +2020-08-04 07:00:00,21.4,gntwd +2020-08-04 07:00:00,18.2,zrgnz +2020-08-04 07:00:00,20.6,mocpf +2020-08-04 07:00:00,23.6,vudfc +2020-08-04 07:00:00,18.2,fhyhy +2020-08-04 07:00:00,19.1,cwviz +2020-08-04 07:00:00,20.4,cysqv +2020-08-04 07:00:00,19.7,bytpr +2020-08-04 07:00:00,20.0,vbfow +2020-08-04 07:00:00,17.7,jvkyi +2020-08-04 07:00:00,17.7,ptqge +2020-08-04 07:00:00,27.2,okuny +2020-08-04 07:00:00,20.1,wuguf +2020-08-04 07:00:00,27.0,vlvrq +2020-08-04 07:00:00,18.1,ggxnz +2020-08-04 07:00:00,23.4,eptar +2020-08-04 07:00:00,20.5,xrkmq +2020-08-04 07:00:00,16.8,fwvpu +2020-08-04 07:00:00,16.3,qtxsp +2020-08-04 07:00:00,19.5,kkndj +2020-08-04 07:00:00,22.1,thrud +2020-08-04 07:00:00,17.3,ouhci +2020-08-04 07:00:00,28.2,nksxy +2020-08-04 07:00:00,16.8,jofxa +2020-08-04 07:00:00,18.3,ndjub +2020-08-04 07:00:00,30.4,npwwe +2020-08-04 07:00:00,19.3,joszi +2020-08-04 07:00:00,24.9,drbeo +2020-08-04 07:00:00,16.1,ckorf +2020-08-04 07:00:00,20.6,whfxy +2020-08-04 07:00:00,18.1,vhcmj +2020-08-04 07:00:00,18.9,kretn +2020-08-04 07:00:00,26.6,rkkaw +2020-08-04 07:00:00,18.8,phrpb +2020-08-04 07:00:00,20.1,rfzya +2020-08-04 07:00:00,25.1,eafjs +2020-08-04 07:00:00,22.9,htvkq +2020-08-04 07:00:00,25.0,iogus +2020-08-04 07:00:00,20.7,evglv +2020-08-04 07:00:00,19.9,pduvn +2020-08-04 07:00:00,18.3,iiusu +2020-08-04 07:00:00,21.9,awktm +2020-08-04 07:00:00,19.8,fynse +2020-08-04 07:00:00,18.7,cmtwl +2020-08-04 07:00:00,18.4,acdos +2020-08-04 07:00:00,20.8,wssfq +2020-08-04 07:00:00,17.9,ojthh +2020-08-04 07:00:00,15.5,dldrv +2020-08-04 07:00:00,21.7,hphlh +2020-08-04 07:00:00,17.0,kjmfs +2020-08-04 07:00:00,20.3,drmxk +2020-08-04 07:00:00,16.9,ndvqc +2020-08-04 07:00:00,18.0,btxrm +2020-08-04 07:00:00,29.2,hgatb +2020-08-04 07:00:00,19.7,yuxlt +2020-08-04 07:00:00,15.9,gqmws +2020-08-04 07:00:00,23.7,wgefq +2020-08-04 07:00:00,23.8,tqrcb +2020-08-04 07:00:00,25.5,tegfb +2020-08-04 07:00:00,18.8,aryhl +2020-08-04 07:00:00,19.1,yymxg +2020-08-04 07:00:00,25.0,vdwsy +2020-08-04 07:00:00,22.7,zkzik +2020-08-04 07:00:00,19.6,rwvtt +2020-08-04 07:00:00,12.7,qbcne +2020-08-04 07:00:00,26.8,hmxwa +2020-08-04 07:00:00,17.3,snbhs +2020-08-04 07:00:00,12.94444,bkanc +2020-08-04 07:00:00,12.94444,hvful +2020-08-04 07:00:00,13.55556,uxbrj +2020-08-04 07:00:00,17.88889,indfm +2020-08-04 07:00:00,17.61111,dkaac +2020-08-04 07:00:00,13.44444,fgwmk +2020-08-04 07:00:00,17.72222,hbhhs +2020-08-04 07:00:00,17.77778,hcdwa +2020-08-04 07:00:00,17.88889,cgaaj +2020-08-04 07:00:00,13.38889,gxlyb +2020-08-04 07:00:00,13.27778,gyqkn +2020-08-04 07:00:00,17.22222,brgfy +2020-08-04 07:00:00,12.44444,zdrio +2020-08-04 07:00:00,12.22222,muwpb +2020-08-04 07:00:00,16.88889,lrpdu +2020-08-04 07:00:00,17.77778,oszcp +2020-08-04 07:00:00,17.11111,fpmbd +2020-08-04 07:00:00,16.88889,wgnku +2020-08-04 07:00:00,17.61111,kjgbf +2020-08-04 07:00:00,16.72222,qayib +2020-08-04 07:00:00,12.3,slxyr +2020-08-04 07:00:00,16.5,zhneg +2020-08-04 07:00:00,12.4,wznvv +2020-08-04 07:00:00,17.5,wcuan +2020-08-04 07:00:00,12.8,wczxz +2020-08-04 07:00:00,13.2,zmiyq +2020-08-04 07:00:00,12.8,ginpe +2020-08-04 07:00:00,12.5,ktcei +2020-08-04 07:00:00,17.3,mjxzf +2020-08-04 07:00:00,18.2,gkwvp +2020-08-04 07:00:00,17.8,bbije +2020-08-04 07:00:00,13.5,dtunu +2020-08-04 07:00:00,15.0,jpeyd +2020-08-04 07:00:00,12.9,vpptw +2020-08-04 07:00:00,17.5,pjlfa +2020-08-04 07:00:00,12.7,tqjbl +2020-08-04 07:00:00,17.8,rcimk +2020-08-04 07:00:00,13.0,llziw +2020-08-04 07:00:00,12.4,vycbk +2020-08-04 07:00:00,12.8,tjduz +2020-08-04 07:00:00,18.2,wrmic +2020-08-04 07:00:00,12.8,bwzzs +2020-08-04 07:00:00,17.7,gmdsg +2020-08-04 07:00:00,17.8,jzptm +2020-08-04 07:00:00,13.1,zmila +2020-08-04 07:00:00,13.2,iiaah +2020-08-04 07:00:00,13.7,husmx +2020-08-04 07:00:00,17.8,nggxz +2020-08-04 07:00:00,17.7,pwjcp diff --git a/tests/data/random_belgian_temp_metadata.csv b/tests/data/random_belgian_temp_metadata.csv new file mode 100644 index 000000000..b4bc7845a --- /dev/null +++ b/tests/data/random_belgian_temp_metadata.csv @@ -0,0 +1,4662 @@ +station_id,lat,lon,elev,LCZ +gkbid,50.47517728296281,4.175969715310146,110.54124,LCZ-6 +nfxow,50.403105504236734,4.434866066094739,101.35877,LCZ-3 +vlwwz,50.423770550376986,4.546615877095684,104.9362,LCZ-6 +gnjnq,50.460294215807785,4.872076169905301,83.19508,LCZ-6 +plcis,50.62989425394851,5.568323494060223,71.08944,LCZ-6 +mijak,50.522964427949695,5.1910952926912595,76.17905,LCZ-6 +vylxf,50.517827038485635,4.366508648921354,125.97093,LCZ-6 +qnrpm,50.69017771197474,4.568566879521683,63.10252,LCZ-6 +woteb,50.753209335482865,5.078917353407693,82.5767,LCZ-6 +eqfly,50.69785196162776,5.261330302892876,118.44945,LCZ-6 +doxbb,50.81986081031053,5.196908227698949,40.34938,LCZ-B +ybdno,50.92578843925514,5.302672277041526,37.76761,LCZ-8 +savmq,51.21614805508079,5.447008323156433,40.88293,LCZ-6 +ezrwe,50.895167378015614,4.709877530715191,21.48733,LCZ-3 +tykui,49.57996550489162,5.829524223689976,297.8414,LCZ-B +dejab,50.609044932060144,3.4045734721690333,21.52219,LCZ-3 +wccjf,50.764555711177564,3.8672156905226736,22.72087,LCZ-6 +ckjnn,50.842467319739015,3.5948109080887938,13.45092,LCZ-6 +gzoye,51.18425350502545,4.168344017422592,12.92413,LCZ-6 +evobf,51.28319654185557,4.416782180490399,0.86924,LCZ-6 +kcymm,51.18346441679097,3.794021883970159,1.67545,LCZ-6 +sqrbg,51.11354329806012,4.01117259975353,3.85052,LCZ-6 +cbhsb,51.03706596986453,3.7052551257588324,7.34486,LCZ-3 +lncdv,50.760682987273405,3.231628694609154,38.07038,LCZ-6 +qdekv,50.81931691522969,3.266678769813457,18.48326,LCZ-8 +gklox,50.989193654255345,4.816344527433745,13.83553,LCZ-8 +deobj,50.85543923569545,2.8813714685716967,22.29978,LCZ-6 +zdpci,51.04113763731414,2.8794639172164933,7.18975,LCZ-6 +bhpmz,51.01663904699039,3.1253711478377046,26.75429,LCZ-6 +papaf,51.08551670981841,2.5932345970365613,1.291,LCZ-6 +lfagh,50.83226595014139,4.325104170476893,23.15571,LCZ-2 +gxcgu,51.12733761615233,4.558568863266702,6.298,LCZ-6 +ifuxm,50.90026937988813,4.400035890040616,14.20778,LCZ-6 +zxslr,51.01865798866586,4.484703870651071,12.83667,LCZ-8 +bjszo,50.897245188530896,4.060833052900402,15.6456,LCZ-6 +owydy,50.09119017652806,4.524980906465747,159.57857,LCZ-6 +hgrlx,51.19009206042225,3.2115879132826906,5.86207,LCZ-8 +kdowy,50.61065806460141,4.137005747910289,95.36521,LCZ-6 +pdbhy,50.24430609992549,5.197222871367739,314.08133,LCZ-6 +hipjh,50.53010644546953,3.9068207428827613,73.31111,LCZ-6 +vmryv,50.086054926258534,5.270643990613403,249.15059,LCZ-D +xokqh,49.97982344336403,4.974777891108829,397.2832,LCZ-6 +tnfna,51.31790119206807,4.925739318646758,29.17231,LCZ-6 +tkfhq,50.909973922271675,4.42441311246885,11.94037,LCZ-8 +kctnv,51.32425722041731,3.195930593888178,3.10422,LCZ-8 +snbhs,51.18589441724422,4.4504542658920245,10.57903,LCZ-6 +bpvyz,50.62820521735634,3.780241439921999,33.85368,LCZ-6 +prtwa,50.46042819179975,3.9324429005400776,32.56249,LCZ-3 +vjstu,50.866546901940005,3.8182215599347757,62.64354,LCZ-6 +vpdsa,51.22305562286099,2.9450298571678633,4.20916,LCZ-8 +efnlc,50.44690727104475,3.8250707024669306,27.94225,LCZ-6 +wwuyi,50.68703499803822,4.0777025542888135,65.51702,LCZ-6 +blpnl,51.46390272943938,4.446160679353879,11.30021,LCZ-6 +arpjv,50.7855009287879,5.464268307942749,96.63463,LCZ-6 +jdnkd,50.377002959001345,5.878876268768516,272.59552,LCZ-6 +cnpjv,50.18929993145644,5.945404079438382,471.53082,LCZ-6 +vpgiu,50.48142262457704,5.861763391715076,253.53006,LCZ-6 +dpmek,50.293698846265,4.113361257594156,127.63465,LCZ-6 +jzcps,50.18289532069929,4.545732850432365,278.14569,LCZ-6 +iewqh,50.49345089452247,5.581445615509629,111.34598,LCZ-9 +sqdlj,50.8909656770173,2.6551710934820023,13.73094,LCZ-D +bkanc,50.75257791569848,4.20699700697614,70.11761,LCZ-D +dqtai,50.832783069700056,4.262923630909416,54.58395,LCZ-6 +nqlto,50.929574168979464,3.1908064542283316,17.36851,LCZ-6 +mikqn,51.52938573521878,3.8218733893222323,0.69311,LCZ-6 +ldaup,50.82513651540037,3.5332283892615264,18.8431,LCZ-D +bzpyt,51.15392798301356,4.119026977101903,17.27732,LCZ-6 +vleon,51.03668630198532,3.4608155741214452,14.62795,LCZ-9 +alybz,51.12763308966298,4.565591411061112,9.57367,LCZ-3 +lzhen,50.70232681201121,5.685726748341791,136.00072,LCZ-6 +tqfkn,50.99831094183088,4.363949524677801,9.15077,LCZ-6 +rrnhm,51.165286167741094,3.725094940444621,1.15131,LCZ-D +bttyj,50.883229381116436,4.719070280265667,21.26155,LCZ-6 +oaumt,51.05330341842897,4.2213476982069,5.27332,LCZ-D +wgxpj,51.29048464496052,4.423770604207217,3.45416,LCZ-3 +nuzsv,50.902116293336434,4.73588357250993,20.56385,LCZ-6 +mqzft,50.797179799437544,4.358915498049125,102.70999,LCZ-9 +lgsvl,50.86766628590252,4.707853975636649,31.23471,LCZ-6 +hvful,50.87465232783579,4.704727738942117,38.47456,LCZ-6 +zyfvs,50.87074986101769,4.701053816998096,26.0919,LCZ-6 +kzwzn,50.88975320275576,4.708423852846346,22.21501,LCZ-3 +kenrf,50.89828994475448,4.686198859475812,33.74742,LCZ-6 +blmxa,50.84856895083543,4.763217467708235,47.59852,LCZ-6 +ovxxj,50.86238273565911,4.714388787641269,30.68453,LCZ-6 +gmdwp,50.87928642681089,4.720481134613324,29.75186,LCZ-3 +jwgjj,50.88058024804152,4.693435234776214,24.87591,LCZ-6 +uxbrj,50.88219959793407,4.736128796361052,67.03172,LCZ-6 +hjdlp,50.867852346458996,4.7142121744788446,36.3934,LCZ-6 +krvqc,50.86098038771803,4.716528104805453,27.62188,LCZ-6 +fcplm,50.87300493013046,4.693060848083102,33.052,LCZ-2 +ilwqw,50.883434000873244,4.679824764713516,68.8903,LCZ-6 +ntpqk,50.87509975679199,4.6904329602564,31.70008,LCZ-6 +wmerb,50.87576121419407,4.727768391744403,40.25512,LCZ-6 +mrsle,50.88657706989875,4.69952739605619,33.02599,LCZ-2 +fzckm,50.88119237657565,4.695699840466576,20.99578,LCZ-3 +czljd,50.871417142374945,4.71008446399102,36.36182,LCZ-3 +gdpxw,50.87122036410198,4.711776487835727,43.19535,LCZ-6 +owdub,50.88696612482092,4.702893486917423,22.50729,LCZ-3 +kjnyi,50.853771665209855,4.798407379486893,56.48086,LCZ-6 +djtgy,50.88485292207715,4.72127378334697,31.33994,LCZ-6 +uuhcx,50.91823679690744,4.720747622093786,14.05217,LCZ-6 +ruzsu,50.874034280740496,4.705102602556164,21.89713,LCZ-3 +dnlqg,50.87988797526625,4.728847082833501,31.55071,LCZ-6 +dwsvq,50.88022973183299,4.690980169458488,34.36841,LCZ-6 +kbvuy,50.87427053342815,4.716372224291432,38.83795,LCZ-6 +indfm,50.89474510458489,4.6717709588804155,64.66951,LCZ-6 +tgzxw,50.87191592799127,4.711504127804863,40.88739,LCZ-3 +wkkho,50.88176713241719,4.72906642169186,25.25064,LCZ-6 +hlrpq,50.891164215001446,4.710768812700555,29.02229,LCZ-2 +lxbic,50.86878370189683,4.699590533761322,49.31386,LCZ-6 +ssjlf,50.88575077540373,4.69470113293928,21.01089,LCZ-3 +qfbez,50.866181703305614,4.698219018403782,40.78851,LCZ-3 +aioiq,50.8749227959155,4.720511178189109,31.55285,LCZ-6 +pfnsl,50.85243424772913,4.701150853359188,49.98249,LCZ-6 +vlcim,50.87966047234165,4.679956483294679,34.40568,LCZ-6 +mnywm,50.89309919050042,4.652003469213889,74.52251,LCZ-6 +dkaac,50.87006157807386,4.694178419529061,19.79376,LCZ-6 +cifvp,50.89262851089461,4.690196299494784,39.33413,LCZ-6 +fnnnx,50.865447414612284,4.654767296923648,31.07481,LCZ-6 +pvqjy,50.845798894418124,4.7416906035052175,64.44727,LCZ-6 +tckyu,50.88792517824961,4.703680926890073,24.88483,LCZ-2 +sszbf,50.87282989868413,4.715987730741953,39.9417,LCZ-3 +fgwmk,50.88441860297963,4.672292160436266,56.96785,LCZ-2 +knnxf,50.882469957205394,4.701103258037126,37.76968,LCZ-2 +jpbqw,50.91429221290617,4.714790684541921,13.65499,LCZ-6 +crehv,50.886611637546025,4.7054295418877725,32.24991,LCZ-3 +xpizq,50.869540714461984,4.7445585819961815,59.51448,LCZ-D +fpkpz,50.87111825527138,4.7293208226093455,43.8322,LCZ-6 +hbhhs,50.88156646403025,4.689564659252158,37.82389,LCZ-6 +zvyyj,50.89261697540712,4.70970380215916,19.65914,LCZ-3 +qrytb,50.90970760899742,4.694113032111586,21.90727,LCZ-6 +uobqf,50.881796139614515,4.697345323313182,21.15441,LCZ-3 +rmwdd,50.874154842725005,4.702503625487165,37.36481,LCZ-3 +hcdwa,50.8834244446286,4.681572101650698,47.80595,LCZ-6 +okamk,50.89965114696753,4.686564601880543,50.1777,LCZ-6 +zkvzt,50.88676617577085,4.695330710518327,27.50681,LCZ-6 +cgaaj,50.875578146719775,4.6887641363914945,19.44704,LCZ-6 +xlski,50.882214930332225,4.717449259487941,21.01368,LCZ-6 +hivjq,50.885578900079864,4.70616925420066,23.17948,LCZ-3 +kfksc,50.9005413891153,4.742607445841574,30.66157,LCZ-6 +qaeee,50.84663202315433,4.6670983577029395,34.70068,LCZ-6 +almmh,50.87867063806103,4.6719452734408,53.01683,LCZ-6 +noubl,50.92951655080917,4.714138551749759,13.49735,LCZ-6 +jayci,50.92667919078444,4.686446529002433,15.69172,LCZ-6 +krnzm,50.88267802451178,4.690688319249326,46.02,LCZ-6 +psxfe,50.99010260074303,3.5952738250020255,6.83305,LCZ-D +wppgj,50.60125987170138,4.644009535389795,141.36699,LCZ-6 +jhwop,50.4351524532451,3.7663684623475246,31.93528,LCZ-6 +hzsnb,50.93880718164024,4.199985053322756,52.01104,LCZ-D +ahwef,51.4615112707162,3.5559485445525643,0.41296,LCZ-6 +ivehw,50.745821977236446,4.523574182718837,101.40323,LCZ-6 +gxlyb,50.69765263003092,4.031625028557003,49.67607,LCZ-6 +ofcyo,51.26919967548747,5.577110467058068,32.4018,LCZ-6 +nadmj,51.238749979633454,5.95285156347367,25.39535,LCZ-6 +rrblt,50.99154476211038,4.3107797879057665,12.38032,LCZ-6 +ehael,51.48766696760041,3.619710804300655,2.30727,LCZ-6 +kanab,50.73740331769121,2.919875930317833,18.33001,LCZ-D +rzbao,50.89027570897205,5.339493857427449,40.42614,LCZ-6 +dolqy,50.93866216002264,4.728333100204008,12.23907,LCZ-D +jgflx,51.46447126051906,5.574905110657442,17.64614,LCZ-6 +sboyq,50.98420028109536,3.6868569185931306,8.99926,LCZ-6 +jpeej,50.84948493316615,5.718109349500359,48.4101,LCZ-6 +eyhqb,51.217694014315754,3.7956247883914287,2.1171,LCZ-6 +bkahv,51.451272026732816,3.5570773286462947,1.95848,LCZ-6 +xtwrj,51.18644050667381,5.222611370080714,35.66763,LCZ-6 +babhc,51.13702928744173,5.961403046216903,28.15155,LCZ-D +ihrrd,50.8230767932102,3.7484024804355323,95.45734,LCZ-D +wvnwv,51.50069098770982,5.519101190390158,12.66614,LCZ-6 +gyqkn,50.82492246340115,5.113225439055034,31.5137,LCZ-6 +brgfy,51.19880088241595,3.6399501935791374,6.23076,LCZ-9 +kzqna,50.57271312724286,4.71247530900487,149.65698,LCZ-D +lojzd,50.87256655152528,5.971936855673005,104.29858,LCZ-6 +zdrio,51.02364556216441,4.5495026818065165,7.299,LCZ-6 +cicho,50.365375026071135,3.9443247517504467,118.49173,LCZ-D +psvsy,50.52674030539751,5.607668194970502,241.27652,LCZ-D +muwpb,50.348023832717075,4.267776606133272,156.64009,LCZ-6 +xadne,50.30223616101553,4.548959970492905,249.81116,LCZ-6 +sqdbm,51.13383905864504,5.591770590188266,50.09245,LCZ-6 +aebcr,51.14926581142544,2.958320220847414,1.61749,LCZ-6 +lrpdu,51.10244271740759,3.6406722613624356,4.72617,LCZ-6 +cnixu,51.17952089196454,4.3154047869107295,6.64189,LCZ-6 +jzkgm,50.86481847086213,2.9964888542421195,56.48658,LCZ-6 +oyamr,51.51567014741069,3.6093318444375018,1.05573,LCZ-6 +xtoxr,51.481241821343886,3.6281088211719563,-0.16846,LCZ-6 +kpmly,51.04411799241544,4.513196200409065,3.25587,LCZ-6 +khcvi,51.31248371057157,4.921650933812779,28.40084,LCZ-6 +cdvwy,51.50691456534853,3.6163942328627403,5.96031,LCZ-3 +tjquy,50.925707193688936,4.081769594311853,19.06276,LCZ-6 +oxhol,51.12210896473301,4.194928451649504,23.54279,LCZ-6 +xcimd,51.25015543529983,5.937861056265261,29.2186,LCZ-A +bgdiq,51.12113809743221,5.962469542469755,26.94008,LCZ-6 +jvrao,51.425382453115915,5.385883112957001,21.65202,LCZ-6 +cqati,51.06161842383486,3.7209090745008107,14.87288,LCZ-2 +oszcp,51.174329355651224,4.439563047089715,15.68049,LCZ-6 +eprel,51.11770177583037,4.498186159031763,10.45231,LCZ-6 +rjkik,50.76511771473897,4.3011562386302105,67.51962,LCZ-B +fpmbd,50.64772939401611,3.2980249183270556,26.55443,LCZ-6 +fpyxg,50.97010171373772,3.06498970258192,47.75338,LCZ-6 +rpkjp,51.40065644912988,5.386104189391596,22.9694,LCZ-6 +fiqlz,50.400528000141655,4.438457647211308,107.93654,LCZ-3 +ujcyx,51.114961721784546,3.058838453773708,14.18313,LCZ-D +nzfbp,50.850325046048944,4.430955625505636,77.31596,LCZ-3 +dypjk,51.163283743688275,4.643392577894287,6.07772,LCZ-6 +hbrkp,50.52516145716347,4.144067413112618,115.96053,LCZ-6 +gffdv,50.92790125560163,3.281009623246491,14.81266,LCZ-D +hnleb,51.172493815227035,3.307060705613161,4.75979,LCZ-D +crxzy,50.93456418009412,4.0086140910442,16.525,LCZ-6 +dhzaj,51.02196037333345,3.1152503703642243,22.12567,LCZ-6 +wgnku,50.98618235892497,3.3512737798651613,32.44307,LCZ-6 +lezly,49.80232384768318,5.767086218818717,486.09067,LCZ-6 +ibagr,51.04652609166897,5.587682671740718,77.78654,LCZ-6 +estrc,51.359164148392026,5.371562286331019,28.03881,LCZ-D +qvcca,51.00614909323938,3.4833581878168496,20.10639,LCZ-6 +fgiws,51.42050053520098,4.480992909413523,14.54929,LCZ-D +ljhka,50.86409635627676,3.281994685292875,15.88887,LCZ-6 +ussxj,50.347205495998885,4.954835903443496,284.18903,LCZ-A +kjgbf,51.204542339666546,4.430902574738165,6.17348,LCZ-3 +zhkbc,50.63427090845255,3.5495944472121184,80.08292,LCZ-D +eopzi,50.86258008366078,3.2490700839701505,16.05755,LCZ-8 +oftqd,50.820317548735446,3.2022852930750956,17.43567,LCZ-B +nrvjb,50.85583301419156,4.697204377897527,47.76883,LCZ-6 +suooc,51.188339319967575,4.896297855611982,14.14585,LCZ-6 +dipko,51.05784634867584,3.7773130590057913,11.34113,LCZ-9 +fbmhp,51.06470723242549,4.851669751811991,15.53693,LCZ-9 +dzvyy,50.86698348987241,6.025601260412771,150.89919,LCZ-6 +sfmjs,51.43772368259636,5.629791013902846,22.60472,LCZ-6 +zislb,50.8830649741993,4.889853572854637,82.93414,LCZ-D +hogxc,51.00914875706171,3.2256847263303245,34.21259,LCZ-B +xlaob,50.83673482193585,4.003640475417675,26.2281,LCZ-6 +urzzk,51.12886758116688,5.942392368447739,33.18228,LCZ-6 +qayib,51.00143612394301,3.273677757042881,32.06741,LCZ-6 +xiybo,50.207316409389605,4.984007529467845,199.38866,LCZ-D +kelro,51.442577104176884,3.5755677902635816,4.74975,LCZ-8 +uekqb,50.664312365294386,4.498957458587788,131.55971,LCZ-D +qxppc,50.64336826287968,3.379051161476321,20.65663,LCZ-6 +nnyuc,50.68529192167777,4.368187325243547,111.36951,LCZ-6 +ztmms,51.01990555396463,4.134760953893829,3.77597,LCZ-6 +muaeg,51.11956686218428,5.888711926844106,29.57201,LCZ-6 +amvul,51.14944976491471,5.94274118421947,28.37324,LCZ-6 +ayiea,51.236355713559604,3.7688994492236967,1.11007,LCZ-6 +wdwen,51.472684245760135,5.456030797610119,22.55448,LCZ-6 +khlfx,51.48891398240828,5.468007842417715,16.71523,LCZ-6 +nvtxg,50.71438714008714,5.023144759019532,93.502,LCZ-6 +qdlmf,50.829652587212976,6.0736917295994575,170.42224,LCZ-6 +ufldd,50.453614992401185,5.597625714253566,236.7955,LCZ-9 +bnhjf,50.80640655621616,5.713104557385535,50.71035,LCZ-8 +vsegj,51.06795638230779,4.696950290811216,16.2202,LCZ-6 +dacwi,50.86841033280365,3.5205079542007813,62.94338,LCZ-D +kvmjf,51.183769259177474,4.097295288122722,6.42349,LCZ-B +ipijg,51.52405325428171,5.490867453527856,20.701,LCZ-9 +vpelr,51.04185956788923,4.92683752880025,19.85312,LCZ-B +vyect,51.531802508159714,4.467832610858681,6.0875,LCZ-6 +ejfoz,50.91357908600844,3.9944836160821677,40.06264,LCZ-6 +sdvmr,51.10572989430543,3.7165121959401124,8.12482,LCZ-6 +bmwbn,50.97924836988034,4.640991634126971,12.18279,LCZ-6 +hugfh,50.83599254283201,4.131527401311861,74.60551,LCZ-B +imjpm,51.54583993362284,3.6654853313819213,-1.5,LCZ-G +moxrx,51.198337123228875,2.9776395861281477,0.41741,LCZ-6 +rdbaf,50.83503757230555,3.2047831519974115,17.61749,LCZ-6 +fkyme,51.56259699675762,4.637574041491453,8.67629,LCZ-6 +altqr,50.862097819901216,5.030367545710313,47.0457,LCZ-D +ounrl,51.010200215644105,3.106326783876597,24.27493,LCZ-D +sdaqv,50.92053026461142,4.724983020251944,14.28051,LCZ-6 +fbrxd,50.848504650203125,5.657504425653166,84.93011,LCZ-6 +qomek,51.52904301587119,4.4579244616122224,5.69495,LCZ-6 +brnhd,51.18046337542918,3.1335035907994335,12.6566,LCZ-6 +jodzb,50.77355087053059,3.8779532907379766,39.67389,LCZ-6 +ogagf,51.579913527076165,5.590446187730771,11.75896,LCZ-B +nnjle,50.907145650465154,4.686109482742192,24.2407,LCZ-6 +kqjds,50.67365119925038,4.583844665718672,115.78188,LCZ-6 +xsbps,50.892607130881615,4.7093601151892,20.84362,LCZ-3 +mfwnz,50.76992291957258,3.8888167612827704,20.16751,LCZ-3 +oapgx,51.5834736893728,4.651815055906134,8.33302,LCZ-6 +dsczo,50.81384646396778,4.5577673215674706,78.83805,LCZ-B +qidgd,51.43528928267223,4.310399226044387,6.49911,LCZ-6 +uvcyf,51.13099440060842,4.223072477745022,13.39842,LCZ-6 +awcmx,51.58666226650202,5.535796478524201,10.36151,LCZ-B +mmbpn,50.86250027069372,6.071902492852405,153.08907,LCZ-6 +sskwl,50.89474909727366,4.7494119741914025,31.97703,LCZ-6 +mjbzs,51.15051055864641,3.6132403561551873,7.78368,LCZ-6 +kwcbu,50.95125387386685,3.6306963377814037,9.39074,LCZ-6 +uoutn,50.91894214856506,4.715900058465514,14.28668,LCZ-6 +upolh,51.50904074075765,3.6488606996775177,-2.63421,LCZ-D +jnhwr,51.01371907448352,3.7184549489733785,7.17353,LCZ-6 +khfsh,51.34649324925831,4.848341070133342,24.27926,LCZ-6 +pbfcx,50.62474175850272,5.4681271725089,154.95995,LCZ-6 +utryj,50.65432980487543,5.819429645903217,326.5304,LCZ-6 +yiywu,51.23267089243796,2.953111285744198,0.94238,LCZ-6 +dveuq,50.7471251647457,5.030695833713379,88.65435,LCZ-9 +uyhkr,50.66774968174669,4.605064257623531,138.6351,LCZ-6 +ecvym,50.89954316924342,4.871478953412224,46.4263,LCZ-6 +xataf,51.14427401604777,4.765007599648815,11.04614,LCZ-6 +zjubp,50.85191073081065,4.758265521741673,46.63497,LCZ-6 +fwtoy,50.67295256609028,4.291430978699289,115.83727,LCZ-6 +oaqph,50.93226414775229,5.722210794485319,41.6511,LCZ-D +bxidy,50.99912143432965,3.308959370388196,46.23449,LCZ-6 +fecem,50.92470086490555,4.393068203577403,42.38038,LCZ-B +begvh,50.491085599565906,5.248108956201802,220.78326,LCZ-B +rlkjk,50.8591738241332,2.7412178914918,21.50667,LCZ-6 +nbitj,50.69726754663122,3.583068979614277,55.47221,LCZ-6 +hooqf,51.1099162087303,2.623357329338925,13.29039,LCZ-6 +cgghn,51.10157524732782,4.114184397997462,2.36157,LCZ-6 +igbxx,50.271542425393505,4.960150344174057,243.84456,LCZ-D +ckdbs,51.145093323821456,2.711119408282035,3.03761,LCZ-6 +yhvwz,50.856624578902235,4.491562548938959,53.12802,LCZ-6 +pbklv,50.646902738697364,5.269566791895502,156.05856,LCZ-9 +ljfve,49.70793029961872,5.579920954829966,361.44098,LCZ-B +yjeoj,50.63956308238124,4.778476545065427,143.41423,LCZ-6 +hriee,51.13817607715087,2.7325253330480117,1.20652,LCZ-6 +nbutu,49.54894695106828,5.790763228064893,272.35617,LCZ-D +miqep,50.835565358308294,3.312026881837617,16.80977,LCZ-6 +lctcs,49.6942785048072,5.31734343877124,358.53979,LCZ-6 +ijzkb,51.11641042711232,4.398141171343242,20.72493,LCZ-6 +gvjom,50.886440827920566,4.426764853153659,22.43369,LCZ-6 +cotxr,50.81171167237226,4.34392577809717,101.88197,LCZ-3 +bsxux,51.073230385327065,4.785685482736612,7.89171,LCZ-6 +cwavf,49.57052181612984,5.525983271680768,233.63315,LCZ-6 +xtwil,49.665867795631385,5.785514375039889,379.80429,LCZ-6 +mjtko,50.447749982808915,4.202961280037944,104.05127,LCZ-6 +fcukz,51.17744721475662,4.442318996263694,17.03161,LCZ-6 +kpolf,50.835761938686936,4.460026652846711,86.97354,LCZ-6 +elcuv,50.608719582886735,3.815411405289538,38.87598,LCZ-6 +frlga,50.96825771367782,5.506239400808974,82.3408,LCZ-6 +slxyr,49.58294177508465,5.565728170933766,235.01273,LCZ-6 +hcydv,50.63281648143148,5.575719134696112,71.51469,LCZ-3 +ezebq,50.435814776741545,3.952576046885609,43.00922,LCZ-6 +klykn,51.14322504681471,5.809138798993498,32.9171,LCZ-6 +xcybn,51.02633997749117,4.428996240088512,8.91888,LCZ-6 +uwinc,51.20861461442959,4.257722389862908,5.90334,LCZ-8 +kbdhf,50.4422454579449,3.977513735327846,40.35307,LCZ-6 +ihhmy,50.62785533530328,5.830678174939064,286.23254,LCZ-6 +mxwwj,51.19929243192778,4.857000591456672,20.39212,LCZ-6 +wrrrc,50.6869347057378,3.3205124084306106,18.25311,LCZ-D +pahze,51.20904755463269,4.4019721734390735,12.12137,LCZ-2 +ypjjc,50.579194940527465,4.7811323003058375,158.90891,LCZ-6 +kpphy,51.311185239552636,4.494151529458304,13.29754,LCZ-9 +peypk,51.10185836715155,5.6830548221359996,41.35649,LCZ-6 +mnczw,50.628544750890946,5.762335815022466,265.42188,LCZ-6 +teeno,50.41817880891618,5.286344474592466,239.52347,LCZ-B +kcxms,50.74897771234228,5.2726313317493645,101.34854,LCZ-D +cczvb,50.41893450716585,3.963200630612585,42.73274,LCZ-6 +tjsch,50.63610959594255,5.472907954983025,126.30073,LCZ-6 +ezrfg,49.57439410309164,5.665449566738608,247.98895,LCZ-6 +ieysd,50.965073002705935,5.709382478688646,40.09935,LCZ-6 +asbca,50.92479049983688,4.560388441070424,15.1483,LCZ-9 +tywrl,50.96032946781338,3.128666342023614,21.34252,LCZ-6 +viely,50.53082412706221,3.8561777311240633,70.76899,LCZ-D +zcagk,50.63121335287406,6.057649276074931,312.85361,LCZ-6 +kokia,50.186739970696394,4.39547425696688,215.07222,LCZ-D +jcjim,50.74158875047337,4.317602158309342,112.78002,LCZ-6 +svxom,50.85756624983139,4.298359805253087,59.6481,LCZ-6 +abfvc,51.186768812233815,4.574730253549316,9.13575,LCZ-B +lshyu,51.02900676474282,4.499892477952314,2.21816,LCZ-6 +nxits,51.21698023895686,3.227762493630274,4.39668,LCZ-8 +peory,51.40004870400011,4.796532300605775,20.17195,LCZ-6 +agneq,50.30699024455223,4.541451833510523,229.36319,LCZ-9 +bsypp,50.844101408821494,4.383357031208079,66.95951,LCZ-3 +ierzq,50.563502273641035,5.464120392075074,241.8824,LCZ-A +chiez,51.10894917459289,2.6149451104722945,9.72601,LCZ-6 +bgwme,50.93598218180185,3.7354468656928255,47.46019,LCZ-D +ggxsj,50.9356273616033,4.436231097876676,19.05068,LCZ-6 +wvcip,50.20146630941656,4.5620165988538774,284.04187,LCZ-9 +zhneg,50.89687707377102,3.539572427615382,58.41069,LCZ-6 +evahb,51.1635201534722,2.7899811027793135,1.48739,LCZ-6 +rjnqu,50.85238105306434,2.899622324637719,16.69586,LCZ-6 +ixmaf,50.66849863525156,4.614845796901633,117.73084,LCZ-6 +oqelg,50.98866488838455,3.7821901411459486,31.37609,LCZ-6 +loycv,50.62797334299105,3.393870032874992,22.76637,LCZ-6 +dkinp,50.82775858236548,4.370954457489943,78.27441,LCZ-3 +rycdc,50.97929260460917,4.5250593560895735,12.6896,LCZ-9 +yfrtn,50.40693853933896,6.0785207861859325,503.13568,LCZ-D +woeit,51.03043485912329,3.19746492043808,28.1557,LCZ-B +wznvv,50.733889920232706,4.558107398222924,94.7639,LCZ-6 +ejrdd,50.59225720206984,3.850444716699587,57.51714,LCZ-6 +mbdop,50.83095122185963,3.2441305342763767,13.40414,LCZ-6 +iwmhh,51.42433632799438,4.7651445773061285,18.4248,LCZ-6 +gccon,51.339995833917826,4.643419866728229,25.02765,LCZ-6 +lczyo,50.785166492763985,5.629753180662497,90.83051,LCZ-6 +wcuan,50.70373822403632,5.412983819268207,136.14781,LCZ-6 +fyzuj,51.13551587309272,5.485605481994875,59.43295,LCZ-D +kqsdd,50.80021359905076,4.5884375155244355,66.42033,LCZ-6 +drzch,51.115563299345894,4.077716108334096,5.48887,LCZ-6 +iysis,50.428831792809355,3.950815406619991,47.41229,LCZ-6 +wgaiu,50.542920303242774,4.734609049521764,163.63837,LCZ-9 +cyjkp,50.954579469020885,5.404715045062471,45.16371,LCZ-9 +itjfr,51.253541737120386,4.581979252868891,11.79063,LCZ-9 +rzzfn,50.30937713969565,4.112470015239938,133.36037,LCZ-6 +yfsun,50.768916013726944,5.003466506572455,54.11468,LCZ-D +piqev,50.53225550110023,5.630499163521638,232.44438,LCZ-6 +wfkqc,50.97936788445055,3.2236619071649515,26.73793,LCZ-6 +mbunu,51.14688434574653,4.386188377784948,9.01346,LCZ-8 +lyhqc,50.41716067675646,4.630929917380602,134.16939,LCZ-6 +wmowo,50.54751890379508,4.0500716149187985,99.72424,LCZ-D +ztgfu,51.1215039925091,2.7402327359953387,7.41841,LCZ-6 +fahhr,51.18537978668352,3.177364937276594,15.50528,LCZ-6 +lajyk,51.280736486150936,4.45791030092179,7.83224,LCZ-6 +glwbi,51.25111938683502,4.925446416187121,18.201,LCZ-A +nzavz,50.7404917939125,3.222494728870647,57.4451,LCZ-6 +fislm,51.30979044768578,4.490256214598375,13.79991,LCZ-9 +jyvth,51.16690158266411,4.0467992206557035,6.13154,LCZ-6 +byetq,50.92012574127996,4.531097659477567,17.66782,LCZ-6 +xxkrz,50.86403498933916,4.4809237047599035,55.62653,LCZ-6 +wczxz,51.30484267812069,4.592606186178525,19.48374,LCZ-6 +jqjxq,50.844155619206454,3.8359992977978967,77.11886,LCZ-D +owtyy,50.42113254170541,4.273787659678975,177.30243,LCZ-D +lpbsn,50.70426615253383,4.5642126051375564,66.47397,LCZ-6 +ipaod,50.920063423604795,4.442205299182753,16.15249,LCZ-8 +eabad,51.20754095322902,3.4960833102591575,9.07454,LCZ-6 +hxidk,51.085736061006145,5.168171135090547,34.45737,LCZ-D +qmeqk,50.94663821396315,4.0251697728695115,17.18134,LCZ-3 +axeow,50.66176031395594,5.0781805746053355,139.72217,LCZ-6 +jtxeg,51.14375954234003,3.875291662015963,4.82062,LCZ-6 +otbbb,50.52886611413715,4.2638962428855365,121.03611,LCZ-6 +uyudz,50.17775704805275,4.532117957691036,259.40936,LCZ-D +fvify,50.70870649883841,5.839461908173894,227.05887,LCZ-6 +sifce,51.04039301583525,4.484758455305367,4.55394,LCZ-6 +tggup,51.085073976730875,2.992181245097821,15.42033,LCZ-6 +qaeyo,50.13104027430473,4.19386618603056,250.99323,LCZ-B +ahobs,50.647164581227294,3.6771336289900085,87.46452,LCZ-9 +xsdlo,50.413880553099006,4.3190857840649794,145.33041,LCZ-6 +pmfnb,50.39729694062241,5.731674386973958,385.78302,LCZ-D +zmiyq,51.2116510498277,3.176478749548121,5.01694,LCZ-6 +ynbjr,50.980486013083826,3.9262342633422587,21.28812,LCZ-6 +zjnnm,51.08102187519616,2.6726311240057736,6.92668,LCZ-3 +egpmm,51.20104421487957,4.1181892535619475,6.07278,LCZ-B +pxbit,50.5420665463798,4.775431058583052,183.14864,LCZ-D +ginpe,50.72778313936189,4.388032523701639,119.88289,LCZ-6 +auahq,50.46380076180988,4.234508770690555,93.70364,LCZ-6 +fiokc,51.13586059796461,4.395191327587478,12.79504,LCZ-6 +djapy,50.4661022229128,5.662486156004265,120.60908,LCZ-6 +ptinq,50.52419597288696,5.225087508097909,65.96054,LCZ-G +rgxtf,50.60352956691808,5.689926126505354,263.10687,LCZ-6 +smmgt,51.259058657431304,3.6158208491774055,1.32618,LCZ-D +uapcf,50.85225915173673,4.347800350115625,32.03478,LCZ-2 +kddvu,51.04478666941661,3.7358746931880167,5.69865,LCZ-3 +jbaja,50.903828897460734,4.678068953897525,34.14597,LCZ-6 +yhpqj,49.789309738382435,5.549651932003705,420.09885,LCZ-D +qmcjn,50.88802136330527,4.683008810133959,34.96685,LCZ-6 +nzqbn,51.2398918963492,2.978985483072825,0.94299,LCZ-6 +dcatx,50.89530643345669,2.765687900341093,12.61592,LCZ-D +vyupo,50.50918121427062,5.620379903865842,264.13922,LCZ-D +ihmij,50.558430784942864,3.5064670087423195,41.56094,LCZ-B +imjov,51.039531650350355,3.8185168078176255,5.47409,LCZ-D +kzmhn,49.874678285658206,5.673689514803041,405.3335,LCZ-D +uetgx,50.56177873685343,5.273129815881663,179.51109,LCZ-D +uutbi,50.49452248659749,4.923238159706628,204.96236,LCZ-9 +gncic,50.56205618842138,5.1609371774229285,100.54462,LCZ-6 +usdwm,50.96818667497085,3.420528788752986,12.04739,LCZ-B +ktcei,51.11111483797969,3.476894563855077,7.28659,LCZ-D +oytin,50.79052436869197,4.334254069007414,53.53369,LCZ-6 +zqmdp,50.571920347187465,5.49916035849151,220.34001,LCZ-6 +notnn,50.9026932702978,4.78275229028467,68.55444,LCZ-6 +lfvqk,50.494029937436096,5.096296155487986,107.94017,LCZ-6 +pfdzl,50.992938183154365,4.516674200731872,6.54244,LCZ-9 +rsmae,50.68001556809618,3.3088952696307183,19.40275,LCZ-6 +tdslf,51.18943502974453,4.342347467293735,2.03516,LCZ-6 +zxtht,50.845212219232394,4.32946429276911,22.94609,LCZ-3 +nbkja,49.609254567808556,5.7714602912748925,325.30508,LCZ-B +ypvib,51.28144325183473,4.4555459977663,3.49442,LCZ-6 +penwy,50.88914758456271,4.070656837655193,14.50992,LCZ-6 +znrow,51.272998615155444,4.678853356119907,19.25898,LCZ-9 +pcjst,51.22677945339711,4.236490540052472,9.20173,LCZ-6 +mjxzf,50.82990005667995,4.746356898641374,56.818,LCZ-6 +fccef,50.89283619063128,5.0997434033583895,30.55902,LCZ-B +ymbqc,51.18441891445708,3.8585028789912403,5.09338,LCZ-6 +bazjf,50.74560215666366,3.22760259223535,45.74132,LCZ-3 +knzsr,51.25168132838224,3.333614308218527,1.69447,LCZ-6 +ldnly,50.55754464826558,5.862197628618975,322.46982,LCZ-6 +evrst,50.9242804431908,3.3262018285457624,17.39746,LCZ-6 +uujoy,50.65934532250545,4.6150970039389225,126.67815,LCZ-6 +jbgdo,50.639485031606114,3.270011727875952,28.96765,LCZ-6 +pqjez,51.23198170316629,4.548604663527016,9.24303,LCZ-9 +irzil,51.06708617446528,3.3433742526527674,17.58462,LCZ-6 +dyfil,50.84245885882876,2.7249342397989724,21.72156,LCZ-6 +gwkuq,50.50967005412999,5.453795006536815,243.61641,LCZ-B +erulv,50.911059363816115,4.605460023977934,26.17328,LCZ-6 +dwtik,51.00193307528547,4.644312980656084,14.36657,LCZ-9 +atqhc,50.81588945793493,4.424894601758063,60.0976,LCZ-6 +phmya,51.15132445843164,4.455823531795432,19.51303,LCZ-6 +bbllv,50.577337185643515,4.552256573930651,150.76784,LCZ-6 +xhmud,50.95986084498879,4.392416774973693,17.11337,LCZ-6 +vvtws,51.185602315611646,2.9387913651434725,3.213,LCZ-6 +ngmnm,50.692625023045586,3.309875608750805,15.76808,LCZ-D +gkwvp,51.216387708602696,4.401657691618722,11.12065,LCZ-2 +boqsj,51.08425581434205,3.8057577003046443,5.2343,LCZ-6 +yrsxm,50.79312262484279,4.4998516377049755,104.60587,LCZ-6 +ztkxe,49.72025712160459,5.517639427276575,358.75891,LCZ-D +xdywu,50.83617674474059,4.093457063461895,62.14578,LCZ-6 +bjsta,50.819165144334946,3.610621323523382,11.651,LCZ-6 +skevf,50.878783562972615,4.3791926456543795,34.68821,LCZ-3 +bbije,50.743129273492464,5.6581168622278595,83.14943,LCZ-B +dbibg,50.46880332051169,3.706007702007742,23.50395,LCZ-B +rikpg,49.77786627706393,5.6236824433235615,459.53183,LCZ-B +kavwb,49.69090946139248,5.812250632761646,427.92654,LCZ-5 +ylfcv,50.9145717022411,3.9947871916359126,27.69278,LCZ-6 +pfcaa,50.821745007605216,5.162005762620448,55.15776,LCZ-6 +dtunu,51.01797040449383,4.224469040649305,6.65236,LCZ-6 +jpeyd,49.86014658663704,5.667980449567934,462.94147,LCZ-D +kimee,50.987693061933,4.769148510663824,16.22601,LCZ-D +mkplm,50.69183914158731,3.2657349253668504,18.90613,LCZ-6 +qwcnk,50.60985318668432,3.6442672947196675,65.69232,LCZ-6 +gzfmr,50.99591593456072,3.123698598805169,33.48593,LCZ-6 +drlil,50.67456640842711,3.781783976334442,29.37278,LCZ-D +oolbj,50.667251264061115,5.718365043281758,229.08229,LCZ-6 +bswbj,50.44507298280806,3.9550682453700547,60.44878,LCZ-2 +ivkvr,51.18807360192227,3.5702373652779924,6.24845,LCZ-6 +mblxl,50.73807424380836,3.5886387796782433,34.11265,LCZ-6 +iqkrm,50.55609851453564,4.148970239065067,119.67216,LCZ-B +grqqe,51.072969208786894,4.47275112051854,3.12051,LCZ-B +adykq,50.80953607697218,5.179222153117385,55.30198,LCZ-3 +bduku,51.22112155710239,4.456139287324117,3.66131,LCZ-3 +vpptw,50.99772943493288,3.88175938553677,17.65702,LCZ-6 +dhvfr,50.78878270094929,4.332503873012047,74.60805,LCZ-6 +pnlct,50.929472002769714,4.4607019960523235,20.40944,LCZ-6 +igylq,50.85305184865353,4.4042771257394895,65.83016,LCZ-6 +mugrd,50.124224238521826,4.545173799801903,189.8775,LCZ-B +ayahb,50.84134502284108,2.7193861160495203,19.36121,LCZ-6 +ldzmh,50.81758231987374,4.429704911196171,57.70604,LCZ-5 +vkmls,50.84179418910156,4.4011967542993595,76.03146,LCZ-3 +tflni,51.19022795754137,5.095767503087783,29.17898,LCZ-6 +waoya,50.23333931282053,4.414710587609956,216.11465,LCZ-B +ioqjw,51.096145499192474,4.517835136762819,6.05751,LCZ-6 +pjlfa,50.84429321516582,4.417463184214266,62.04822,LCZ-6 +kdwaa,50.686534402648064,4.681163746514663,109.6981,LCZ-9 +pfwnb,51.21593134531961,4.435520802142824,6.93516,LCZ-2 +tqjbl,51.14815926079803,5.053822512724518,23.36992,LCZ-A +xqytl,50.731999364790234,3.3238662562124337,16.82487,LCZ-6 +lydbu,50.83977797945782,3.286763826573365,14.24571,LCZ-6 +aqcyr,50.75184787943923,4.5091635308255364,93.51208,LCZ-6 +qkblc,51.222510159345426,4.407588965875861,9.3003,LCZ-8 +ymhhf,51.30815936821689,4.454260309175491,9.09595,LCZ-6 +cikgj,50.925927953104754,3.4551235027368987,14.29835,LCZ-6 +vpzqo,50.74097998316812,4.342963194715902,75.52134,LCZ-6 +ljwns,51.21367110572353,4.383157030926014,9.02347,LCZ-2 +gntwd,50.856054114432105,5.309720686170003,42.53023,LCZ-D +kojsr,51.306298735401214,3.1244042913593044,2.00702,LCZ-8 +fsnbh,50.6081803525688,3.370824359381863,19.48722,LCZ-6 +hwwfq,50.62280866633382,5.796633884171138,260.74158,LCZ-D +hganh,50.850704165742876,4.407974443816218,97.83381,LCZ-5 +xuuro,50.82620595000372,4.418711894305471,93.68304,LCZ-6 +xfhpx,50.830111510539034,4.339723391153291,30.22188,LCZ-3 +bzsqi,50.67371532034534,6.103550570533917,297.06409,LCZ-6 +ghtvu,50.445129142815134,4.602687693865196,117.57755,LCZ-6 +apctj,50.641783263392355,5.57134686951804,60.95547,LCZ-2 +kzssz,51.21167385561034,4.258506579817354,7.22244,LCZ-6 +qqwil,51.33898190548303,3.2346875577069567,6.43315,LCZ-8 +ycbiy,49.95600350618296,5.700155806670652,466.05045,LCZ-D +zrgnz,51.23214479499164,5.301464475942505,46.50784,LCZ-6 +ycuet,50.573305881399754,5.51828893098716,229.56137,LCZ-6 +mocpf,50.71294835232471,4.159947116718192,60.68285,LCZ-6 +vudfc,51.029444844314305,3.6368772467234014,4.8115,LCZ-6 +yhbkq,50.91221041027306,3.2156324619624557,18.88718,LCZ-3 +fhyhy,50.561511669296785,5.548402422845645,258.46875,LCZ-6 +vmaxs,51.08107796990547,3.6924590690892436,5.34038,LCZ-6 +xakyo,50.82366788119947,4.049211738755821,26.31032,LCZ-6 +cwviz,50.823350232913924,4.4198444014444185,80.9339,LCZ-6 +tnqcp,51.18954587757254,5.572600110394469,37.15075,LCZ-6 +bddyz,50.56279723927457,5.622294442336952,268.73694,LCZ-6 +txryf,51.35324142009312,4.858079017340811,26.83383,LCZ-6 +giakp,50.579507621858475,3.3859888953125754,25.89353,LCZ-D +ahzhl,50.86693631475174,4.315971860334127,42.51047,LCZ-6 +cysqv,51.147017811819474,4.462812186085125,15.41738,LCZ-6 +rcimk,51.21998843716778,4.485632901987402,5.99302,LCZ-3 +bytpr,50.925721778519204,4.031356465640615,19.15219,LCZ-5 +yhphj,50.70266213279756,4.36931733703028,110.72803,LCZ-6 +cdeyn,50.99133118220501,4.043172087636665,7.78172,LCZ-6 +xxkgx,50.60631061804263,5.627719016040448,76.21434,LCZ-6 +vbfow,50.76239868106549,4.739023721654621,74.29852,LCZ-9 +qmpvs,50.50683818466985,5.9002771901513045,360.99838,LCZ-B +fxtyo,51.14949489508831,4.849595936947561,18.82881,LCZ-6 +ffybf,50.94916411006168,4.3147843958934695,42.59725,LCZ-6 +mhjwb,51.00896197438496,4.514950087670915,6.87452,LCZ-6 +dvhqy,50.560085857688385,3.538248110890321,52.11407,LCZ-6 +vtpem,50.53454924112346,5.932246620102875,296.83157,LCZ-D +dgwvq,50.57816042658595,3.4193515500748624,47.75818,LCZ-D +ejghf,51.10867707558602,3.6232626698149595,7.13915,LCZ-6 +hrwlj,51.19447063776283,3.250538178718676,4.15303,LCZ-6 +llziw,50.78558512528616,3.007872469221951,18.62403,LCZ-6 +vycbk,50.94792392251963,3.025095747664495,27.68992,LCZ-D +jvkyi,50.482507805394434,5.497450391523377,262.50729,LCZ-B +rqmsu,50.424560968622444,5.6675457024456675,348.67853,LCZ-B +noagn,49.55979503073151,5.556604265397,221.31447,LCZ-6 +mztnu,50.54093463788387,4.781846820698991,183.59235,LCZ-6 +ptqge,50.582690543359014,4.927831488668017,161.42038,LCZ-D +okuny,51.08105117069994,4.4324011720963155,7.32735,LCZ-6 +wuguf,50.93695301100104,4.0250164716310515,10.76487,LCZ-6 +cotha,51.11487937145729,3.9881185555139096,4.90009,LCZ-6 +rzdnc,50.71863793560883,4.478431056093773,91.44676,LCZ-6 +vlvrq,51.200455894230835,4.4957974878998614,9.27048,LCZ-6 +aiint,50.923422520883165,4.375345074457385,32.50134,LCZ-6 +ggxnz,51.21243473627301,2.9113240557836817,5.18,LCZ-8 +zdern,51.03069590324679,4.965579869749159,17.77394,LCZ-6 +bpbxb,50.84944054423712,4.345075767715338,28.85177,LCZ-2 +eptar,51.14636019780954,4.468011270972686,18.26848,LCZ-6 +nsptp,50.80973688219487,4.3350918346847065,57.04501,LCZ-6 +iwcxs,51.1290645970756,4.460367776706586,20.97426,LCZ-6 +ztxqk,51.02885472433527,3.709240693855906,7.40952,LCZ-6 +umzkd,50.68783328617945,5.845931442276246,215.80386,LCZ-B +ooeaf,50.857595465307355,3.621945361677382,11.34278,LCZ-6 +jmpwu,51.15877572497532,2.779890812692364,4.08288,LCZ-6 +stszj,50.952403995491544,4.087099870627193,28.78861,LCZ-D +ivelx,50.70182097232559,4.392961219819897,120.02664,LCZ-6 +hvouk,51.31793892998051,4.409386626022334,4.68421,LCZ-3 +nxfem,50.68925673027688,4.560032033321753,98.19626,LCZ-6 +plodv,50.83982672121087,4.413048665616855,72.05634,LCZ-3 +xrkmq,50.83820819681545,3.2859182800361477,12.28633,LCZ-3 +yejug,50.717358041360136,4.339645181586201,122.0382,LCZ-6 +fwvpu,50.63239824448153,5.742730712075597,277.20703,LCZ-6 +pcbtj,51.1340703367076,4.383752639922501,8.24396,LCZ-6 +urexq,51.08347519393437,3.8291208780218016,6.67526,LCZ-6 +ndute,49.79311265802565,5.635849186832867,461.35242,LCZ-D +lywjv,50.87826680274349,4.784279793288173,100.37517,LCZ-6 +tjduz,50.9722510747733,3.138162576155853,20.37824,LCZ-6 +hiehy,50.58542140491857,5.275044904164452,176.19852,LCZ-D +qtxsp,50.504504985380045,5.793427778120488,319.55768,LCZ-D +kjbdx,50.90056376958666,4.757683940701548,68.87293,LCZ-B +gjmcu,50.921964626559095,5.333324426580087,49.25282,LCZ-6 +hcitm,51.159864068966755,4.436802921537556,13.67979,LCZ-6 +nsqtr,50.66249400825477,5.99549786061804,271.89386,LCZ-B +oflot,50.81497208558522,4.488911893421232,117.91393,LCZ-9 +kkndj,50.82852240369757,4.519612525671635,85.95338,LCZ-6 +thrud,51.18172998730749,3.769587392444624,5.42608,LCZ-6 +tcblk,50.62022182813181,4.810734159710583,152.42453,LCZ-6 +vxtor,50.94876500896636,5.654240635152886,49.05139,LCZ-6 +hbwiu,50.83945540996888,4.332430527446463,31.0219,LCZ-2 +ouhci,50.81729269007057,4.41882834536147,90.09913,LCZ-6 +isizb,50.65924154332908,4.288014516612398,136.66032,LCZ-D +otvrh,50.359081064991,4.387173985443532,149.71844,LCZ-9 +yhocf,49.66146489404251,5.492970810969578,359.81085,LCZ-D +fsyde,50.597208636773004,5.621941564739907,155.87225,LCZ-6 +qnknt,50.71450373418765,4.552775764628931,101.86462,LCZ-6 +mqpjl,50.44724581211596,4.009242700521096,44.69318,LCZ-6 +wiiyu,50.703616713656146,4.5927051153561536,69.25068,LCZ-D +qavrb,50.88500886009672,3.4128265989178246,15.40218,LCZ-6 +ihown,50.92946699101186,3.9744662576439387,24.08062,LCZ-6 +zuejk,51.19291154824681,3.092229064547408,2.51448,LCZ-6 +nksxy,50.44493995742801,3.874799294495212,36.44002,LCZ-6 +edqjm,50.54708629429098,4.4573888168090265,159.60562,LCZ-6 +jofxa,51.085597951115105,4.519605420658789,7.84918,LCZ-6 +ndjub,51.19691357760194,4.470630672068078,8.82431,LCZ-6 +syndc,51.17449250222036,4.35022772309804,11.33127,LCZ-6 +cdxbb,50.48667375815273,4.226589341448734,158.74088,LCZ-6 +npwwe,50.83706255176789,4.3931265904936,68.09406,LCZ-3 +wguaq,51.111479777897955,3.7710868521412717,6.19434,LCZ-6 +joszi,50.893664991366705,5.429457227395442,54.02036,LCZ-6 +ipyve,50.79030533736686,3.9448336094544247,21.68288,LCZ-6 +hnxwu,51.12556345277525,4.480708650286474,14.22534,LCZ-6 +ywiqb,50.62441587867913,5.613007783986138,100.07239,LCZ-6 +jgick,50.74585362898377,4.270498156787022,28.79739,LCZ-B +wpsoy,50.79351362793092,2.7885471472345658,60.79556,LCZ-D +svdum,50.06026790121065,4.329325030657185,238.72974,LCZ-6 +acogf,50.55054947476005,5.479762774627715,259.05716,LCZ-A +mzjgq,50.44319711408269,3.884672170281459,30.09382,LCZ-6 +wwdah,50.874285530798794,5.006763990249774,31.7954,LCZ-D +lrhew,51.333205059639056,4.453428316525501,15.13665,LCZ-A +rdtis,50.60415910833444,5.510772805671114,66.00601,LCZ-3 +nfrzt,50.989464083680375,4.124249793473184,6.52226,LCZ-6 +drbeo,51.21215137475855,2.9105259789341966,6.55823,LCZ-5 +gcjrh,50.65328139031685,6.036037362635941,298.11035,LCZ-D +xpvwh,50.872665152906045,4.390551913198785,21.85242,LCZ-3 +iqocu,50.85794549988708,4.540152686959166,99.44106,LCZ-6 +wfvrm,51.09695152084444,4.6072920567677915,8.11057,LCZ-6 +vysdp,51.25823860866837,4.718980041963451,15.10053,LCZ-6 +nzkwk,50.91412002650386,3.3079132157202698,14.57909,LCZ-6 +qpvdo,51.17292953964218,4.897508931892075,17.13002,LCZ-6 +hiqjf,50.928200461658676,2.7383422074398363,5.79058,LCZ-6 +rfqrj,50.15454342414939,5.260039065531536,222.17125,LCZ-6 +pcofv,51.131295069738336,2.6560941112346232,9.97579,LCZ-B +gunnj,50.56595798116258,4.6817606904067,160.17468,LCZ-6 +dlwrl,51.025083449446086,3.1381337135469822,20.06247,LCZ-6 +adwmg,50.98956551860501,3.5367416358960675,8.43799,LCZ-3 +zichl,50.82896430178405,4.392753569032486,88.62534,LCZ-3 +cywuc,50.44892135696904,4.755626008965427,127.8462,LCZ-6 +wrmic,50.82633285235743,4.445670804986997,70.70632,LCZ-6 +uotkk,50.881265352771436,4.710911296551815,20.94062,LCZ-3 +kbpjv,50.55362946759827,5.891763942403667,303.13089,LCZ-D +jqare,50.74631032131789,5.754024666360899,96.68144,LCZ-B +uakik,49.6442706668652,5.864098159089609,322.96722,LCZ-6 +wquxs,51.411238520914154,4.759851173451035,17.63181,LCZ-6 +ckorf,50.818808134917255,4.612859863681182,81.45548,LCZ-D +mkutw,50.848312178067346,4.489308797126583,75.2629,LCZ-6 +fnzdy,50.627454992867825,5.545538609197589,121.68364,LCZ-6 +slrzo,51.11590412547582,4.547626839789226,8.11192,LCZ-6 +tlawu,50.98971488701893,5.685950935117635,43.92472,LCZ-9 +whfxy,50.716282950749836,6.01555415866772,202.64795,LCZ-6 +lybxy,50.95523633329984,3.8196344779108826,38.81781,LCZ-6 +nncsb,50.49786808896794,5.733102146482974,221.02266,LCZ-6 +vhcmj,51.31033373857495,4.945059044805981,25.70882,LCZ-3 +kretn,50.858064946579006,4.051309780042174,13.40231,LCZ-6 +rkkaw,50.70478529972666,5.216189819301652,125.30289,LCZ-D +bwzzs,50.621472880167666,4.606435823631261,109.52042,LCZ-6 +reose,50.93557594838606,4.3497425984106135,27.59223,LCZ-6 +rbaay,50.44627719305184,6.064231619931841,524.66693,LCZ-9 +yasgp,50.50846809628526,4.099969236757896,140.313,LCZ-6 +phrpb,50.46360307537288,4.621926846035975,169.87086,LCZ-6 +aksdd,50.32147599531024,4.890065486616492,175.56795,LCZ-B +ohryf,50.51840955659447,4.954830507641331,158.10988,LCZ-9 +qyxbu,50.626545560434046,5.704898156831452,256.4043,LCZ-D +kultx,50.77836913592008,4.944626001073227,51.22627,LCZ-6 +fiyly,50.518277513730744,5.399253961408554,264.10535,LCZ-9 +rfzya,51.02153724664622,5.465854541533643,77.5595,LCZ-6 +eafjs,50.87887284608105,4.749712384563271,38.07265,LCZ-6 +htvkq,50.94632183146086,5.353457450016257,34.79668,LCZ-6 +rkoeu,50.91869174515933,5.318875838450704,38.83237,LCZ-6 +frktv,50.387843738451686,4.3298843127905835,152.03581,LCZ-6 +llmmm,50.87513801234707,4.4536909786553895,54.40382,LCZ-6 +mmbcs,51.13113103595921,4.460095699088381,18.79434,LCZ-6 +btvwv,50.420666752696654,4.26061416396729,168.1461,LCZ-6 +qzgcp,51.041025601513695,3.7275984462483174,12.74024,LCZ-2 +usevc,50.980018947112235,4.573015534952611,9.24866,LCZ-6 +igweg,50.936461028511516,4.056114971916581,15.11187,LCZ-3 +gecot,50.61206768057993,5.792761458449202,281.03918,LCZ-B +lfofy,50.955105389940286,3.1254034134218416,21.21518,LCZ-6 +vnvbx,51.28670548365473,3.552659977525817,0.87971,LCZ-D +tihag,50.452052693060025,4.085548523321845,58.0218,LCZ-6 +iogus,51.01888822491027,3.995340782536426,3.01428,LCZ-6 +oqyss,50.86322609273757,4.390817184255489,37.04736,LCZ-6 +haxap,50.580214671719,3.367828790594155,34.45544,LCZ-6 +zplai,50.32558771730802,4.915005539617741,252.21379,LCZ-6 +kvmrm,51.18091848730486,4.241110632523145,19.06173,LCZ-6 +evglv,50.47931733760276,4.617181094958551,155.3905,LCZ-D +ttgwc,50.83176807893476,4.473890410317561,78.17652,LCZ-6 +wlvza,50.64475701264369,4.609328801509274,115.01432,LCZ-9 +pduvn,50.812970545735126,4.384464821265991,91.81896,LCZ-6 +haptn,51.07718053385692,2.6518940275937406,8.09272,LCZ-6 +iiusu,50.77238839954066,4.2752099069632505,26.61798,LCZ-6 +kxnqi,51.2264660830902,4.3642909181989165,3.09038,LCZ-8 +gmdsg,50.84326868170099,4.396899078882944,65.14105,LCZ-3 +awktm,50.835371445596316,4.469744349214685,81.31177,LCZ-6 +fynse,50.56090581198313,5.282853865689131,126.80857,LCZ-D +woocg,50.82179995663921,4.279737180140115,31.57551,LCZ-6 +cmtwl,51.10821992786298,2.617279488033125,10.18124,LCZ-6 +acdos,50.499485059927366,5.1100895620042275,118.19199,LCZ-6 +wssfq,50.94886708400581,4.24571666485747,27.93046,LCZ-6 +ojthh,51.142489917056146,4.347689647903926,9.18779,LCZ-6 +ucjbd,50.8011818120225,5.666077408007576,71.12904,LCZ-D +dldrv,50.332386832905186,4.282830385161269,172.93533,LCZ-D +koeci,51.230650869427045,4.821152840920541,18.3534,LCZ-6 +ojeut,50.922690453475695,2.6252651241687435,5.95332,LCZ-6 +dwqax,50.84685461483809,4.405336948959544,93.54029,LCZ-5 +ipesq,49.62722061389089,5.436767324130565,302.95508,LCZ-B +hphlh,50.85120094905896,4.42720991383172,66.89392,LCZ-3 +kjmfs,50.5576005061054,4.485801374703481,142.22127,LCZ-D +iucem,50.89956044456114,4.096827545292132,33.12384,LCZ-9 +vbdzv,50.00663250753605,5.706944294111981,516.81549,LCZ-6 +qubeg,50.788174354358645,4.35008345966063,59.62502,LCZ-6 +rhqvm,50.85344060427107,4.388108426284522,92.23458,LCZ-3 +xbxbe,51.169730594572705,4.643994719140235,4.84913,LCZ-6 +rmdgs,50.51816203431452,5.690513975471046,230.54791,LCZ-B +jzptm,50.63569744176206,5.604860533227491,128.51016,LCZ-6 +kcvas,50.630877104338474,6.050883531296083,302.72821,LCZ-6 +lsify,51.07222772170999,2.5975863496905616,1.27222,LCZ-6 +fkgmp,51.019185987510035,4.673070252869971,7.73077,LCZ-6 +mvgcb,50.50863172602241,5.568418631119958,160.13062,LCZ-A +drmxk,50.95118826937864,3.133241822111275,21.44421,LCZ-6 +ndvqc,50.78461141249153,3.9461721609336804,15.33224,LCZ-B +xhztq,50.8542680117444,4.414117187747894,69.2086,LCZ-3 +mktph,51.025719415642996,4.940406018232121,20.50132,LCZ-6 +jfnoh,50.6879251469709,4.678069798097981,115.63564,LCZ-6 +prmvg,50.69036544110145,4.234978634130806,58.61287,LCZ-6 +ytuuu,50.82319118153082,4.892202459468111,73.77735,LCZ-6 +leety,50.910736484745755,5.29764620411053,42.70924,LCZ-B +deaco,49.729006453008594,5.654596673989765,402.27884,LCZ-9 +zmila,50.680079719232985,3.8179419842144715,23.61351,LCZ-D +iiaah,51.058857930213264,4.5844757487811165,17.29603,LCZ-6 +btxrm,50.42857825929261,5.253426898464232,223.99815,LCZ-B +tffmg,51.1822371713054,4.84402382735102,17.54094,LCZ-6 +cnvzb,50.82152606389408,4.426144091911234,85.91684,LCZ-6 +otwdf,50.82570498163523,3.2552796826248094,13.06671,LCZ-8 +dsslb,50.56858786388775,5.585243005638353,176.52216,LCZ-B +husmx,50.8037386430708,4.280626893166155,28.08236,LCZ-6 +tcfkw,50.60273610687389,5.583479679700065,236.84175,LCZ-A +bvlsj,50.862753149885634,2.888104195509271,16.6974,LCZ-6 +hgatb,50.76476300570773,3.4388104540806292,13.61784,LCZ-D +zwknj,50.44658030129512,6.058032919928457,533.65259,LCZ-9 +yuxlt,50.76664820679845,3.18393220342521,20.891,LCZ-B +jhdpi,50.484117383995816,5.186598331509044,224.14049,LCZ-D +qttbn,50.6246219128138,5.592496182953959,116.20403,LCZ-6 +gqmws,50.49321515640029,5.863271239400372,268.66556,LCZ-6 +wgefq,50.605047325234516,4.4544181745845295,110.64413,LCZ-6 +lvmjm,50.67098389583704,4.36557769099289,97.19189,LCZ-6 +tqrcb,51.18543190424104,3.483446803067759,10.07576,LCZ-6 +qivsx,50.719807353302265,5.517980921386496,153.25142,LCZ-6 +muuvq,51.064283618539214,3.703069533383299,8.87722,LCZ-3 +nggxz,50.89236323678317,4.473404972860857,42.72839,LCZ-3 +tegfb,50.47676564239504,4.009568548632924,46.23321,LCZ-6 +pwjcp,51.1495932161095,5.3932387539356546,60.57164,LCZ-6 +mtqnc,50.40504213808715,4.26627274691694,184.37421,LCZ-6 +ltfms,51.30269277151753,4.479823973061425,9.17729,LCZ-6 +copbg,50.6437516193225,4.569432844375382,98.02193,LCZ-A +aryhl,50.83927872951117,4.22631677841744,66.68056,LCZ-6 +wvktg,51.18750127294618,4.385485116829849,11.33758,LCZ-3 +yymxg,50.7768120828035,4.714193287807628,67.76896,LCZ-6 +vdwsy,51.11438946577417,3.220914757651876,12.5095,LCZ-6 +zkzik,50.83313463197383,5.201182792058033,44.81353,LCZ-6 +rwvtt,51.06949689025107,4.530490266101269,7.298,LCZ-6 +qbcne,50.73793254970518,3.8455305605888994,28.81276,LCZ-D +pidkl,50.857394829531636,4.538246745621705,87.56987,LCZ-6 +rvfml,51.34570638970544,3.271313499015261,11.40797,LCZ-E +hmxwa,50.625895455420014,3.761690820553026,38.21447,LCZ-6 +xaduw,51.15583738279348,4.8451870764329215,13.30248,LCZ-6 +xihaz,51.05147860463429,3.148054450029519,20.97836,LCZ-D +mfkpt,50.670824619207814,4.443113970465678,111.00163,LCZ-9 +oxdlh,51.343459038036784,4.765217197391485,24.40508,LCZ-6 +tmtsi,51.02366796078278,4.470557693438842,5.33793,LCZ-3 +fsxkb,50.9721643804108,3.5858049709553392,9.83474,LCZ-B +tpnkd,50.888844715975246,4.570343601948404,47.55724,LCZ-6 +sqbqa,50.801269244836305,4.437606773136843,89.68566,LCZ-6 +bpybd,50.5956854130164,3.3341653818330563,48.05099,LCZ-D +tqwde,50.67036703895282,5.5553686291707045,191.46642,LCZ-6 +fntgb,50.842101145440225,4.2480145854895985,83.6655,LCZ-6 +fdgch,50.55283584518474,5.626271721458454,261.19327,LCZ-A +ttyzd,51.23314498396164,5.0583377320334275,25.90064,LCZ-A +cegky,51.152693777708,3.258083670385935,4.31972,LCZ-6 +xuzsp,50.829880036595966,4.355306222134723,81.24126,LCZ-3 +gecpz,50.7691524298689,3.480138758989523,21.56834,LCZ-6 +cucyq,50.719876444609454,4.053824954048432,50.22947,LCZ-6 +duqqb,51.053169394207714,5.743465481280913,33.6719,LCZ-6 +dtdvp,50.52390088135186,4.906183603266185,191.6123,LCZ-D +esvsw,51.34447401683471,4.640489890847731,22.12652,LCZ-6 +uvhxe,50.66483989217879,5.244400602886809,138.10019,LCZ-D +bdbow,50.6769742551751,4.380982864746114,117.81129,LCZ-6 +fnnxy,50.545889940980736,3.757068784351402,57.20781,LCZ-6 +izmck,51.19427895846869,4.415627881846486,12.21862,LCZ-3 +fdvva,51.29435839206214,4.433787223616448,6.332,LCZ-6 +xqdfq,50.805679753673026,4.339734568926931,79.34605,LCZ-6 +jpnfe,50.6753883863703,4.717467582015003,137.84348,LCZ-6 +vqlzr,51.2279505109755,4.275057982744263,5.69343,LCZ-6 +rwhpu,51.04625225087316,3.741914611403847,7.09761,LCZ-3 +omyiq,50.805242864180705,4.329011839268104,76.12054,LCZ-6 +elaqm,50.898936830044256,5.316494412467311,46.7537,LCZ-6 +osxqm,51.00222522877255,4.950624405235699,16.90402,LCZ-6 +coeyv,50.75951683070933,3.403298991775688,24.25996,LCZ-6 +zzivj,51.14270521704482,4.139954799167192,21.54927,LCZ-6 +mjlnr,51.054793294267185,3.7833448318729017,3.11566,LCZ-D +ouvul,50.359955347972466,3.902917343539361,136.57428,LCZ-D +plbpf,49.923875367002196,5.367967437200635,496.20288,LCZ-6 +cogbo,50.5329406267997,5.825869490343827,198.6722,LCZ-9 +kxyun,50.81527861066238,3.1639273129495717,18.65513,LCZ-6 +hmhye,51.01348125320112,5.293933808520672,37.57069,LCZ-6 +umdni,51.062444538212056,4.502279766649892,3.44186,LCZ-8 +gznsx,51.071592894989486,5.765767802513927,32.754,LCZ-6 +ypmkj,51.02230378649591,4.189205638373282,6.50902,LCZ-6 +vkfsd,50.87063242619478,4.335988470770673,37.22827,LCZ-2 +xbyac,50.96292478498705,4.6418405872519495,9.728,LCZ-6 +kgskr,50.929619570247,4.751265156249209,20.18014,LCZ-6 +oiqls,50.46750200684825,4.9336782596726545,85.79064,LCZ-6 +gslje,51.04566863001597,5.343138620455698,55.69939,LCZ-6 +obuht,50.635718229491616,5.596357952312132,81.2336,LCZ-3 +cfeem,50.927182136573904,4.387214309467335,28.46345,LCZ-6 +uhbwl,50.725854474568656,4.348060639646754,107.0552,LCZ-9 +kokal,50.694676867264384,4.490238742073101,108.69045,LCZ-6 +nnrto,51.08163352679329,4.2990195669552875,3.10896,LCZ-6 +kwmpe,50.40436224974486,5.923772488525026,445.36505,LCZ-B +byhhg,50.43817452627013,5.455849486032732,277.41104,LCZ-B +exbkz,50.480673002861444,4.1285484308559015,78.40649,LCZ-6 +vwiab,49.834078185130714,5.430819626304339,442.94943,LCZ-9 +jsxtn,51.09826810335706,3.863042340317427,6.73851,LCZ-6 +frbkd,50.86606032514938,4.756183980483815,46.00397,LCZ-6 +zuvhw,50.541560464101124,5.647757174422928,291.90427,LCZ-A +tewxi,50.90137011008954,5.628865845646745,75.49833,LCZ-6 +oipqe,50.82047608964066,3.2927928883964097,23.10741,LCZ-6 +ruvii,50.915050927370324,4.235632956209353,43.98648,LCZ-6 +vrwuv,50.89737263572339,4.67112761529007,35.73973,LCZ-6 +ureui,50.57994585880766,3.630726821881193,60.12385,LCZ-6 +lwttc,51.05979335669066,5.298538063992147,51.14348,LCZ-6 +lfdjo,50.72299215303406,4.622358467374846,62.31157,LCZ-6 +lnfzc,50.79201353388262,3.9622184625734604,26.8418,LCZ-D +iisau,51.01360563406974,4.6584275649346445,12.92136,LCZ-9 +dnwzy,51.20147896378711,5.158303283012953,31.13967,LCZ-6 +ztdxi,51.05004248646816,3.466490853058724,17.81035,LCZ-6 +dyelf,51.03354388461374,4.763528142756642,11.01858,LCZ-6 +hudid,50.88337148240576,3.605306850121199,19.48612,LCZ-D +qmxct,51.03717238479483,3.337656217657434,21.84131,LCZ-D +kqunn,50.81152113224417,4.4207967495581535,79.82565,LCZ-6 +jmujj,50.82254067142846,2.8243499968243815,26.94394,LCZ-D +lmdqh,50.66652459962803,4.599273480315735,130.29469,LCZ-6 +oylsg,50.35462882853736,4.866396025409636,86.23232,LCZ-6 +wkxxq,50.79234732552891,5.666564815588176,68.06335,LCZ-D +nekrk,50.67808441894625,4.143077803431563,83.79691,LCZ-9 +pproh,50.876491397235206,4.403290825871842,54.92869,LCZ-6 +cvxuk,50.87105632384986,3.309211355777764,15.23942,LCZ-6 +bobfk,50.60310395803975,3.370454824470967,27.63971,LCZ-6 +ypgbh,51.34636249265879,4.481695809594265,25.58124,LCZ-9 +zdsiv,50.90201162963074,4.432716390562278,25.10355,LCZ-6 +kokxo,51.202769392155595,3.287687892749044,6.78974,LCZ-6 +idcvp,50.566113454297565,5.645348010775404,279.33926,LCZ-6 +aymqr,51.09200862726916,4.599683249977135,11.44816,LCZ-6 +rcijt,50.893991020513226,4.813613815021061,56.71134,LCZ-D +bzzbo,51.14890408514815,4.991714093666811,21.85195,LCZ-6 +epcvx,50.84873896831613,4.11773253983017,41.95394,LCZ-D +vgbvc,50.63291850820141,6.06685508153915,326.55801,LCZ-D +shjyl,50.80847063635037,3.9504040338982613,16.98563,LCZ-D +ofcqh,50.31658196082263,4.672726600255656,246.89293,LCZ-6 +tpfbp,51.26981800188562,5.088024861647465,23.5021,LCZ-6 +crtdd,50.9387324474992,5.4417851413699605,41.81222,LCZ-6 +tefgz,50.50648929661464,4.6829566113914165,114.96606,LCZ-6 +ecfmm,50.39804286590152,4.167521944110839,111.73102,LCZ-6 +coqrq,50.3184379297612,5.598836111988873,282.20892,LCZ-B +qnzfj,51.3491160275054,4.767260808227659,24.98204,LCZ-6 +irplc,50.25316609154941,5.746390194707472,577.36353,LCZ-B +ouaoc,51.20846895229771,4.3123134986505205,5.79162,LCZ-6 +yzobc,50.71595225919016,4.311937559894228,66.08136,LCZ-6 +vemjg,50.69281805479268,4.380702561343877,95.92953,LCZ-6 +bifmh,50.354570812069475,4.508374242342147,197.84668,LCZ-9 +twhow,50.845388046712884,4.420265716590511,59.36821,LCZ-6 +hcswx,50.63388374262243,4.231552055931167,58.42463,LCZ-B +enjnk,50.579843570011775,5.363328875258766,189.56569,LCZ-6 +skziu,51.0895820679761,3.8451308048477455,6.30348,LCZ-B +dtwse,51.352819717173176,4.872589658857994,27.87729,LCZ-6 +yihhn,50.603181826050196,5.739580817885214,191.19666,LCZ-D +bmzda,51.22419100509626,4.690323463080953,7.9263,LCZ-6 +hjrdq,51.01755912444541,4.477265866837516,8.06486,LCZ-3 +prwld,50.97182462900925,5.272562286904638,34.90855,LCZ-6 +iprwh,50.839736750317165,4.326422397007384,22.99425,LCZ-8 +iuhwz,50.79632045587366,4.329708902453251,69.45423,LCZ-6 +tamdy,51.14816735918131,4.483022632052918,19.6549,LCZ-6 +cxcvk,50.97998423649722,4.643017401574887,11.55748,LCZ-6 +notji,51.262732017998474,5.532394229156254,33.54921,LCZ-6 +sestz,50.411458806017635,4.068229141405713,91.41209,LCZ-D +xgjap,50.891429816474194,4.079652063590794,16.27268,LCZ-6 +ojcqv,50.82502063289821,4.332696839739879,100.89254,LCZ-3 +gbztb,50.80077366703008,3.935000394415666,18.83498,LCZ-6 +whcyz,50.88839481204767,3.7035060571504657,35.27617,LCZ-B +xhmxh,50.497435606373514,4.376515980771674,142.30994,LCZ-D +kzyib,50.35624014313488,4.173434735437824,168.43733,LCZ-9 +yrmrv,50.54968688022195,4.795555646215587,167.08244,LCZ-D +nvmky,50.815520840062156,3.4124542673005065,45.32107,LCZ-D +cjkiu,50.8470621607172,4.50733107162862,70.9895,LCZ-6 +efxgf,50.60059350787574,3.9473077463175574,94.13414,LCZ-9 +nnvyl,50.99756420681625,5.409506511908578,52.08212,LCZ-6 +zyrsh,50.38635441324709,4.659521966266852,199.40968,LCZ-D +rgkds,50.56850429003102,5.533156052716044,241.25002,LCZ-6 +gauty,50.90376297544302,4.380701175626398,59.0022,LCZ-6 +jftjq,51.17348982776794,3.209544532459152,3.08775,LCZ-6 +efttr,51.13633299496474,2.7041216233770795,13.77392,LCZ-8 +amove,50.655896294814056,3.270316155644076,27.92744,LCZ-6 +arkrz,50.96958619031301,2.9061752469960953,9.41979,LCZ-6 +rrvjb,50.911083758928,4.51836805773918,31.11239,LCZ-6 +fvujz,50.82054008431942,4.409022801086676,90.81774,LCZ-6 +nkkqb,50.68880218313357,6.012781077754767,247.63107,LCZ-D +ognqk,50.70280988322183,4.292427058786567,107.26733,LCZ-9 +uibrm,50.92491041337814,4.343811973488266,40.42923,LCZ-6 +thtxm,50.669724171726045,5.0765033362682175,137.78802,LCZ-6 +swbun,50.834139827437646,5.18423473694442,43.71377,LCZ-6 +ybqhx,50.385043390504194,4.577467113954094,170.19101,LCZ-6 +ljxdn,50.7006627272748,5.492168109353835,141.91725,LCZ-D +sncas,51.159144584820766,5.149162704655626,27.384,LCZ-6 +qvrta,50.69894761425914,3.8162500868718774,47.31713,LCZ-D +qbhkz,50.62695104892792,4.608791731039878,86.95562,LCZ-6 +otreu,50.380355698553885,4.9661901099464,270.366,LCZ-B +abrej,50.69523672481628,4.633287859707025,88.08373,LCZ-6 +tknyi,50.94223038689752,5.332166605550547,34.11748,LCZ-3 +mjqaa,50.72957072974982,4.622248838867953,46.06175,LCZ-6 +kacxu,50.87403697665323,4.115834419001244,17.19295,LCZ-6 +ttrog,50.41006765329693,3.813488868633356,57.86068,LCZ-D +ixyla,50.771197610998534,4.951475250681118,81.18253,LCZ-6 +grgvp,50.850992643407224,3.279140336959779,14.58887,LCZ-6 +rsuow,50.93519475383389,4.025213808637876,15.66202,LCZ-6 +nomgg,50.97831747101737,3.5686746699957954,10.75903,LCZ-D +tbmtf,51.138095692748145,4.562132273628541,6.67902,LCZ-6 +svxqq,50.80851954672465,4.507777928417616,89.98822,LCZ-9 +dnjqm,50.83312396006225,4.368143045238684,80.70821,LCZ-2 +swrcd,51.044682316217155,3.65416233502384,7.81711,LCZ-6 +arsfp,50.65568798264038,4.351445294831561,104.47821,LCZ-6 +hrnoq,50.83125102111676,4.37720570881132,77.16335,LCZ-3 +cyhdk,51.09454037464474,4.493309570440342,7.87462,LCZ-6 +tfwiy,51.180557642895906,4.401600961660955,10.57178,LCZ-6 +ccybe,51.256664669813794,5.543197658841462,32.91777,LCZ-6 +yvuxf,50.1705219801276,5.889272598443584,400.6694,LCZ-D +ebbks,50.59651117012096,4.151115839880855,114.0041,LCZ-D +ntumf,50.931620487903594,3.1874729340490875,17.38247,LCZ-6 +ikjfh,50.87315308773218,4.331142701712877,41.5474,LCZ-2 +qzxpo,50.37693344820933,4.37481820263372,133.48174,LCZ-6 +hxmgq,50.98008688657795,3.5742301509008745,9.30881,LCZ-6 +ifklq,50.98168272388626,5.280594050041727,33.73078,LCZ-6 +yprsq,50.9622193877162,5.367498167605782,39.95934,LCZ-6 +axqdt,50.813700715227824,4.368899013244517,86.98942,LCZ-3 +lmsvh,50.67941534933276,4.59007117316996,61.68415,LCZ-6 +fqrer,51.18019219600074,3.5681983263658106,10.97375,LCZ-3 +lmcku,50.419289075724265,5.683273408968958,373.32959,LCZ-A +dtjpg,50.70450385170342,6.035977710100672,266.97449,LCZ-B +fujwe,50.699259530450924,4.6015659488519844,117.34526,LCZ-9 +fpkme,50.846027872799034,3.0297262169823838,40.98385,LCZ-6 +gzqju,50.68996755782574,4.391825386434286,107.38371,LCZ-6 +mmyrw,51.057079338382316,3.740395415891078,8.9823,LCZ-3 +eeztu,50.30032947267605,4.616831654460897,240.58588,LCZ-D +pkyzh,50.19479176831163,4.760280349324062,217.71008,LCZ-D +fjgkh,50.73972825458841,5.611117161525062,140.30086,LCZ-D +cuqzz,51.08872972118518,3.6119729479046105,5.99454,LCZ-6 +qibbp,51.276559964945974,4.663986750908831,18.84498,LCZ-9 +hondn,50.872687995030354,4.6293375942522905,48.02751,LCZ-6 +clkgu,50.516867058332984,3.675615224965576,55.77113,LCZ-6 +oxrwn,50.809418085335565,4.920359815286904,51.85733,LCZ-D +mappg,50.89532746536654,4.257102458976305,73.52851,LCZ-6 +uabnu,50.269489785254024,5.6572763360818366,418.12646,LCZ-B +uuoxe,50.8014255550266,4.382918552095498,100.90823,LCZ-6 +sglmk,50.25013854209481,5.381470661632534,203.45316,LCZ-9 +qtmkw,50.89700076686698,5.491113880534533,49.36375,LCZ-A +btaah,50.819138733138224,2.76269582939363,34.36777,LCZ-6 +ulnvh,49.6840763348136,5.766093541153913,370.9512,LCZ-6 +tsqcu,50.60730611189901,5.7231570257201545,237.13481,LCZ-6 +wkhan,50.38085998946139,4.532233869157788,167.97191,LCZ-6 +erpuv,51.27474723096269,4.645606896186493,19.32524,LCZ-9 +ubbkq,50.231128608619905,4.400530837631977,202.07738,LCZ-D +dhflh,51.28068261541442,4.439129326043427,3.97922,LCZ-6 +ttqyl,51.110625873912355,4.907558753722417,16.28351,LCZ-6 +tgtfp,50.57866337255976,5.902429216130929,317.37561,LCZ-6 +fsdii,51.38854461139694,4.578208055150291,19.20805,LCZ-6 +ixbqn,50.83976156814084,4.310173737533058,45.14466,LCZ-3 +gxbnx,51.20647906713602,4.4171450536277925,10.46872,LCZ-2 +npwig,51.44191162187219,4.740615484348404,14.85806,LCZ-6 +ckbhe,50.611928755494944,4.886484772428522,148.64282,LCZ-9 +bgecq,50.80729151244938,4.342200069468834,101.92461,LCZ-3 +jnxxx,50.842240717160905,4.392670274107182,82.09564,LCZ-3 +wezrr,50.623391013411414,5.7602424323780825,285.00549,LCZ-D +rpqol,50.8185970738167,3.075333654766761,19.34627,LCZ-6 +wlxwt,50.72633501358521,5.393253640714191,117.34299,LCZ-6 +kkkrg,50.815790432782784,4.844138887885738,75.38728,LCZ-6 +emmsx,50.52716858492239,5.450942712055061,262.0531,LCZ-9 +slsud,51.2591923251932,4.534190991703916,11.96894,LCZ-9 +vypxn,50.24554276043795,4.598894128381649,272.53873,LCZ-9 +svrrr,50.490307629332065,5.741683708639562,312.931,LCZ-B +ncisj,51.244676605959675,4.452608201503529,6.79475,LCZ-6 +wybjs,50.55627608326439,4.32100304366307,139.79208,LCZ-D +jkqtq,49.57744809387681,5.5819203285519645,237.34886,LCZ-9 +ablij,50.427609335476696,3.8526242290961585,38.70795,LCZ-6 +rdrcg,50.85881738870861,4.748192229631957,44.76301,LCZ-6 +reprt,49.678918865429516,5.807606861270015,380.97818,LCZ-6 +prwqx,50.57716441769077,5.869187306209598,248.89133,LCZ-6 +dnibw,50.42016990685767,4.191198544610828,95.64841,LCZ-6 +ygawe,50.53998056291203,5.487623439364219,258.85098,LCZ-D +bocul,51.12079463860231,3.0456756363776143,8.2575,LCZ-D +zllhl,50.640370808159126,5.584553804779745,128.05498,LCZ-6 +ahrfd,51.17811044720513,4.34955930482952,3.10416,LCZ-6 +snqtw,51.15723885968617,4.352126930301844,14.7518,LCZ-6 +pmizw,50.608397289751146,4.329829330534258,110.18548,LCZ-3 +sjwbf,50.917540757658514,3.2151085023596746,17.55148,LCZ-6 +qfjdq,50.4782686436729,4.3862865710090855,155.09175,LCZ-D +vnaxs,50.580406490561735,3.805292366236944,55.36384,LCZ-D +xizyp,50.812615173794036,5.208267519802604,48.68988,LCZ-6 +adgfw,50.826110262675336,4.373369378884414,92.67447,LCZ-2 +ukgrv,50.50335785293961,3.9946589331593074,91.62339,LCZ-9 +ikysh,50.633975745808,4.645896338737503,133.78004,LCZ-6 +wejtl,51.28418189512076,4.437599526273751,3.19364,LCZ-6 +vajxd,51.282675110008114,4.560690910098212,17.64374,LCZ-6 +xowds,51.36636349641681,4.537368226386985,21.34321,LCZ-6 +nhxjh,50.16014742855398,5.386407682724092,345.37717,LCZ-D +ipqjp,50.68410510569431,4.742738044457474,142.93608,LCZ-D +pvjwr,50.5033340684662,4.215675741757646,156.05104,LCZ-D +itily,50.81936285846137,4.341927201672408,77.57375,LCZ-3 +ebefw,50.88349359283386,4.066378251180811,12.82626,LCZ-6 +mntue,50.18759868800227,5.16169819618327,165.13379,LCZ-D +jzlin,50.955651399172275,5.675028783988716,45.73737,LCZ-6 +vghhv,50.223926820719115,4.286527664296817,211.79211,LCZ-D +ulioe,50.854626055766836,3.608286473231351,12.35773,LCZ-6 +ixcpg,51.034042268979846,5.058799049285063,22.83085,LCZ-6 +fzmyt,51.07738398730168,3.108646745710508,34.9175,LCZ-D +csjkg,50.776366237065666,4.052912314530442,60.3008,LCZ-6 +fzakl,50.890659252754155,3.8007702950569375,49.93154,LCZ-B +wewei,51.13603986725833,4.3372850981435604,13.31151,LCZ-6 +snbwt,51.16669222807371,4.703761758475537,7.33846,LCZ-6 +mruhc,50.56833972158177,5.542135740122005,248.54083,LCZ-6 +yfkul,51.225086597181615,4.2996126603014835,5.83873,LCZ-6 +kaprz,50.45482409329614,4.098870366333194,67.30919,LCZ-6 +oszzc,51.03948400771275,4.472071421223492,4.74252,LCZ-6 +ehaur,49.82357163342908,5.746252814629931,391.98059,LCZ-D +lqgxx,50.734566229799256,4.488418755744238,68.43806,LCZ-9 +gmxna,51.03006758035779,3.801536108624999,11.45004,LCZ-6 +wgjic,51.13949802681199,3.6815334185624793,5.95586,LCZ-6 +pqcpd,50.85628658704723,4.350477332940921,22.04246,LCZ-2 +hvqnu,50.688579634034795,4.4115763666263135,120.0185,LCZ-6 +yzvjx,51.04104540726056,4.4907158312127695,2.325,LCZ-6 +bkpaq,50.55366982911585,5.526576286790556,252.40573,LCZ-9 +foaux,49.91777455293395,5.4057466275888455,479.51718,LCZ-B +nrfgl,50.722066962663405,4.537307649874896,94.94084,LCZ-6 +brmzt,51.26432122749256,4.098943641897863,3.33937,LCZ-B +tqwmb,50.92346027237534,5.149483353525212,34.25789,LCZ-6 +ubgtk,51.22852839267785,4.409962894326393,15.40558,LCZ-2 +hqycn,49.74542998226998,5.769938541470169,313.28311,LCZ-B +tusiz,51.13498369600869,4.455982364166815,14.64861,LCZ-6 +iiyyp,50.97336375489421,5.112650392438541,36.66249,LCZ-6 +faabh,50.69793317204691,5.107880239367711,130.1949,LCZ-9 +irlyz,51.24325341279359,3.4819628342106963,2.21458,LCZ-D +ztkiq,49.565904054623005,5.556143945198221,214.13916,LCZ-6 +pywsm,50.99561936944483,3.7970078415098856,15.84364,LCZ-6 +rslpl,51.2090512214529,4.453992389277798,2.55912,LCZ-3 +oocrk,49.64619159148216,5.763438938194257,335.23734,LCZ-D +xxucr,50.69225876747313,4.371559855752865,92.58097,LCZ-6 +edvfs,51.05067488535777,3.854305640451908,7.27563,LCZ-B +oowda,51.03997187936759,4.464796858598005,4.51829,LCZ-6 +nhtdz,50.755150917572394,5.797683645712144,150.41315,LCZ-D +rdgzc,51.035393125546754,3.736643678404024,9.63723,LCZ-3 +qounf,50.95803489049701,5.226227954829133,27.15767,LCZ-6 +lsojk,50.85135257649506,5.157394378773514,30.42132,LCZ-6 +dmwex,50.52623437433298,4.292740272425756,120.588,LCZ-9 +xbdqo,50.247332442943126,4.908164919016538,105.67483,LCZ-A +xkziw,50.709553466945174,4.606881128711251,86.34028,LCZ-6 +dvppc,51.147003629520185,4.683377923480439,6.71723,LCZ-6 +vhjwz,50.768878990977946,3.2991522671546902,45.58432,LCZ-6 +qiueo,51.335184620880085,4.457129130980284,22.25477,LCZ-9 +afves,50.451767587577635,4.897262706162941,141.87901,LCZ-6 +psnjy,50.26357079638282,5.185985581565663,317.06894,LCZ-A +wiurn,50.91626577644609,4.717141524694644,19.15701,LCZ-6 +aqtrz,49.6301145018956,5.798306172617421,324.66693,LCZ-D +oipye,50.48537993341135,4.761088765965365,171.87,LCZ-6 +vnsri,50.754126671610884,4.461950597827834,100.65332,LCZ-9 +lnyea,50.91086523608439,4.319452755571095,47.46293,LCZ-6 +pxvzd,50.71881200539665,3.5647624241559477,32.50576,LCZ-B +aefrm,50.603964186694206,3.4107828373641595,25.36887,LCZ-6 +bwpua,50.53439941775948,4.781905489927641,176.1866,LCZ-D +lhavt,51.14462048069157,3.3902867574691884,11.91902,LCZ-B +ipcyr,51.33815721567957,3.274789214694714,13.58712,LCZ-6 +nzslj,51.17944742568609,2.9894827745007735,2.70342,LCZ-6 +pnowj,50.46772239240401,4.415763049792403,136.63795,LCZ-6 +nxcbw,51.24472373206334,4.0382932642358895,7.12839,LCZ-6 +ryjmi,51.17572430612431,3.345705465545502,18.01785,LCZ-6 +rgzkn,50.47453825724184,3.8469716066822626,53.63066,LCZ-6 +pkhjx,50.80506252379827,5.358428414261864,106.92937,LCZ-6 +bmruh,51.16683069054992,3.1813142713350366,11.54262,LCZ-A +hobhu,50.84973664582112,3.2518108681411513,17.21508,LCZ-8 +kdpip,51.075867492794906,3.0811529749686897,36.297,LCZ-D +ycjxt,51.083435152910766,3.4988462516121492,10.71778,LCZ-6 +itjof,51.002213303930276,4.593372702106035,7.19727,LCZ-6 +xzqfi,50.83927178787893,5.338992663222047,41.83093,LCZ-6 +bgxah,51.21375077854698,2.939738332506181,2.65262,LCZ-6 +wexkg,49.549804616538054,5.688774507035187,242.01671,LCZ-6 +anfnz,50.96708958062355,4.736879238671139,15.38919,LCZ-6 +cppch,51.10603417601593,2.631507098154737,12.832,LCZ-6 +fvihs,50.93339472051537,5.4187814077909335,34.64892,LCZ-6 +eobuk,50.578180156252124,4.554424290223117,132.1882,LCZ-B +yytwl,51.11019863008963,3.720730943586057,8.6423,LCZ-6 +extmg,50.804417256737416,5.578833663121201,101.98447,LCZ-6 +csdue,50.451055046435,6.071697470118435,512.41541,LCZ-D +rpakt,50.64320204001356,4.852483088335418,127.75658,LCZ-D +dgldl,50.8194954795013,4.4104108714126085,100.98648,LCZ-6 +xywmf,50.56027526110854,4.682090420843093,160.66685,LCZ-6 +orzdr,50.87033459132011,4.70186018943157,24.49098,LCZ-6 +ebbun,50.837653413839995,4.308422638641098,43.60923,LCZ-3 +vzehx,51.17834175089242,3.698112988774902,5.08009,LCZ-6 +mbpmr,51.23518189906009,4.47627738134059,3.97004,LCZ-8 +cdgew,51.38977353569395,4.508672426415256,20.49193,LCZ-6 +nmfrd,50.683649613788106,4.397468137161583,114.03686,LCZ-6 +jgsgd,50.8554643251237,3.3432131323830503,16.58622,LCZ-6 +kkjsz,51.26643306348772,4.631153924912743,15.4761,LCZ-6 +lyeyi,50.87346682900602,4.2889322763510265,42.79606,LCZ-6 +lrzck,50.80507823170766,4.371434097466103,118.90856,LCZ-9 +eonlk,51.292369051529846,4.537250830919816,18.09624,LCZ-A +lbdhw,50.58875710971276,4.324277975844413,96.47804,LCZ-6 +vabdb,51.17994564118316,3.0386343574507384,6.9614,LCZ-D +qwjbe,50.372253139738895,4.345635182393542,123.02023,LCZ-6 +cfilk,51.03488325286058,5.042579104677657,21.51219,LCZ-D +fihlz,51.22722402804494,2.907701885781499,4.44381,LCZ-8 +oamsm,50.464528569479185,4.473019826048489,179.34813,LCZ-6 +zglxn,51.050939973077455,3.7226875851505783,7.39134,LCZ-2 +fejso,50.91504676929888,5.337812909473903,45.26622,LCZ-6 +yurrw,51.21793712906936,4.910111103006045,28.95885,LCZ-9 +pskze,50.53654204026274,4.072152964806358,104.52853,LCZ-D +owmqe,50.38942850193284,5.602507229762249,313.91162,LCZ-D +xlemh,50.79788649098882,4.3296133249285536,54.93398,LCZ-3 +qrkna,50.801288650272625,4.333992692475555,62.585,LCZ-3 +okaxq,51.28715439633707,4.478176622267768,10.68851,LCZ-9 +ndcic,51.21659795167041,4.395080708631052,8.72393,LCZ-2 +wjjfj,51.06145945926595,4.482658066399991,3.10614,LCZ-6 +vdaes,50.50885855282114,4.52666285345986,145.80806,LCZ-6 +rdghd,50.53283551836874,5.429520981852177,266.31244,LCZ-D +hvoac,50.739596299662175,3.263977917094931,36.10287,LCZ-6 +wfkkd,50.81585881418252,3.1809691242618268,16.70655,LCZ-6 +tcghk,50.54217842935206,4.855858660212883,177.59634,LCZ-D +cilcg,50.58811435857302,3.540062325215341,59.90086,LCZ-6 +kbkjb,51.0562898620666,4.431962802056815,5.333,LCZ-6 +mdshx,50.651846100741594,3.3790315692629687,24.71246,LCZ-6 +ngefn,50.96274334226783,5.169818484296594,24.23339,LCZ-6 +hokei,51.194274790281774,3.222855146684924,7.11328,LCZ-3 +ndrur,50.711613598746425,6.06410334577412,245.23007,LCZ-B +xpswj,50.81241000998408,4.398832434357333,84.1015,LCZ-6 +iboec,51.28256884326859,4.621042391625775,19.99362,LCZ-9 +fkszk,50.922979141518034,4.114892241826176,41.02503,LCZ-6 +abxfk,51.343419544834504,3.2710304110241486,20.74769,LCZ-6 +qqamh,50.97677761559219,4.536945202180498,11.15959,LCZ-A +skmsa,50.68069641557885,4.098329226011434,67.76,LCZ-D +yhwzg,51.179246934612515,4.42791597289735,13.46368,LCZ-6 +uynkh,50.752947846048,5.535045869689428,85.26398,LCZ-6 +xfbcj,51.134119547155144,4.46877724067483,12.46339,LCZ-6 +oqjov,50.95571216422777,4.458577716624785,10.62347,LCZ-6 +ftsud,50.85316460569424,4.382929447261164,62.6502,LCZ-3 +bvgvd,51.063944801634065,3.7598603213454838,8.07138,LCZ-6 +hvhis,50.995599902119636,3.8744960280241614,16.56745,LCZ-6 +kwdan,51.3025919856718,4.578137284032243,24.08645,LCZ-9 +ypxeh,50.723431996979116,6.062626316276614,266.41989,LCZ-A +cefpe,50.13693377752184,4.292137230547553,229.94499,LCZ-B +edyce,50.709011993844,6.0177817015089925,218.26112,LCZ-6 +kfgrd,50.55755693440339,5.904269987033934,311.84885,LCZ-D +idalh,50.8826112993609,3.3666264861733035,16.60565,LCZ-D +hqnnx,50.600075396852816,3.408329170140557,23.05654,LCZ-6 +faial,50.63845401329665,5.787265273169396,289.83133,LCZ-6 +mzxkk,50.86991265281631,4.831289205533093,68.69331,LCZ-6 +xvefh,50.67738805979523,3.3577425209477774,21.19124,LCZ-D +ujlyr,50.77260065116769,3.2892739532545208,41.91768,LCZ-6 +sxklo,51.05097484731043,5.593175913991247,76.85008,LCZ-6 +qfgvz,50.804443494930645,4.386663195500434,82.87386,LCZ-6 +iskug,51.20171999829542,4.394419516984067,7.075,LCZ-2 +mjzek,51.20747679364258,2.9191657262113955,3.08542,LCZ-6 +swpph,50.98566623347748,5.10548698076681,32.49554,LCZ-6 +iemqu,50.34630009750695,5.459462919152723,244.24785,LCZ-A +fjkej,50.88024898953156,4.385346670545652,47.89748,LCZ-3 +moglx,50.45713511684244,4.632856412588164,165.55219,LCZ-6 +vxiia,50.84681455287454,3.2303628199058934,18.86665,LCZ-6 +wobra,50.98846293318901,4.869716513069299,24.44576,LCZ-6 +xsdcp,50.42441704271931,4.639531879389628,111.9221,LCZ-6 +tfblw,50.56741327356744,3.5447023636677772,45.90113,LCZ-6 +kgloz,51.275167648062734,4.661435821313712,14.79357,LCZ-6 +pmbyk,50.92106220031375,3.9367222347234088,53.22672,LCZ-D +gywfs,50.81052823321527,4.360817967286749,102.28883,LCZ-3 +qozpq,50.573900004366465,4.759153338053245,162.52979,LCZ-6 +ahwgf,50.61089840884429,5.580116817734235,176.31696,LCZ-A +nzsxo,50.93653822011263,3.0894700398713812,26.09558,LCZ-D +eifto,51.011315642471615,4.483782692923023,12.65837,LCZ-8 +lfnbm,50.66941429006279,4.471766274211782,98.44057,LCZ-9 +vbbao,50.59393667811906,5.22894221957969,175.81532,LCZ-D +wwobi,50.653491502130045,6.09340123825267,327.59656,LCZ-D +ukmcq,50.96613198890411,5.369506609695874,41.27144,LCZ-B +wvjwq,50.4910647911443,5.899125584288759,383.13214,LCZ-B +mtdti,50.80438668984114,3.4876399426051736,14.72221,LCZ-D +urqch,50.72691748671005,4.710364873115841,94.6676,LCZ-B +anysu,51.24787795899085,5.439234222122762,36.27761,LCZ-6 +mkppp,50.685143440972936,4.813527656119935,108.68067,LCZ-6 +ezltq,50.94122095742341,5.314821460154199,38.39872,LCZ-8 +nmirq,50.562956553898864,5.54901528482159,272.41187,LCZ-A +hlqat,50.42627857986568,5.00328361184006,169.8725,LCZ-9 +pdiui,51.17772819472372,4.445612354824332,16.50662,LCZ-6 +gmnyc,49.627691114432594,5.795090945483241,301.92041,LCZ-B +kpcyw,50.475674848666735,5.299415806117117,260.9632,LCZ-9 +yedna,51.214394945836595,4.756231629711019,15.18315,LCZ-6 +sbemf,50.903948674166976,5.430335165237728,50.59242,LCZ-6 +issfz,51.171084420562615,3.917528611401026,2.27259,LCZ-6 +zbcyk,50.70918888533096,4.873614501672847,78.95377,LCZ-6 +rmcyn,50.39245368870218,4.858624194075776,214.49701,LCZ-6 +cznkn,50.43538908635538,4.617573015923284,98.7049,LCZ-6 +rglrg,50.90252599706478,5.312927672984004,47.82525,LCZ-6 +hmryr,50.55641975749155,5.4719106715217025,258.17767,LCZ-A +wgncy,50.804285942058,5.664070496716897,71.82377,LCZ-D +awskj,51.208085408496814,4.4070165971000135,14.58466,LCZ-2 +qszwn,51.11030110555415,4.5106045570272,5.09813,LCZ-6 +xqrmy,50.59713152022952,4.3384974660079765,128.22383,LCZ-6 +jljmf,50.77224242632479,2.796253145640533,56.96932,LCZ-D +mijdu,51.100373477881845,3.9754414164366096,5.99674,LCZ-3 +likfa,51.16624115498959,4.126120774109721,15.88963,LCZ-8 +ttasa,50.84634190687009,4.335782294335713,21.55459,LCZ-2 +evcfs,49.60653818209262,5.850209303862321,351.21597,LCZ-6 +ccqfc,51.335031067241644,4.328737501523495,2.08556,LCZ-6 +qjrzv,50.676699448144205,5.553742725939483,185.60374,LCZ-6 +nkqvf,50.64597343155725,3.88875196230026,56.18725,LCZ-D +lgthn,51.224925527489866,5.335284312703848,45.46095,LCZ-6 +xdtby,50.918724786505585,4.374548891141619,41.87648,LCZ-6 +aujvm,50.730727857523405,4.988402955397393,53.91121,LCZ-6 +zcahu,50.59432819680601,3.5418832871000663,56.78986,LCZ-6 +uixjs,50.8230133549223,4.351390197893263,72.22435,LCZ-3 +vnuzk,50.407775468818855,4.181562926973179,98.81691,LCZ-6 +dpnsk,50.70689223631315,4.231817058415495,41.24504,LCZ-B +dfdgp,50.84959238807991,4.465604781642784,71.66265,LCZ-6 +vxjmt,51.16056612746229,4.73050732723413,11.69979,LCZ-6 +xfjxr,51.07554527820224,4.515855172987138,8.0464,LCZ-6 +hoaol,50.67518815212185,5.820468042349006,211.32915,LCZ-D +eibdi,50.96122423569352,5.507538787064605,80.91509,LCZ-6 +lcbha,50.47882888196762,4.1760749383043105,115.11265,LCZ-6 +xvtmt,51.002683751340584,3.8282407897737447,5.06203,LCZ-6 +fhftc,50.76977010138631,5.520900981093428,86.6955,LCZ-6 +jtgfo,50.63372470300301,4.975166532708857,134.40698,LCZ-9 +rqpxa,50.976306216722044,4.976706955224387,63.8109,LCZ-6 +tqlix,50.705417035851696,4.39292019782467,111.10755,LCZ-6 +bbhpt,50.58575624696619,5.12373147364865,125.60912,LCZ-A +rhhjm,49.89752735184304,4.961384538999274,374.26352,LCZ-B +pzqxs,50.58674896766115,5.620771374878272,178.50021,LCZ-6 +ivlda,51.29713449065588,4.723906303091095,23.62965,LCZ-3 +jixlr,50.93416062490616,3.888303296317781,48.314,LCZ-A +byknk,50.85517888962447,4.439561859894516,67.59595,LCZ-6 +ztxky,49.995161260137756,5.210410363373881,419.73209,LCZ-D +qyang,51.284470100369,4.755821615870266,26.90378,LCZ-A +kbqvl,51.16513369923526,4.3445173772826795,8.29912,LCZ-8 +zejel,50.712995471988236,4.380171965853202,101.64729,LCZ-6 +yojom,51.12297174323826,4.1217702193864465,32.42445,LCZ-9 +jkwwj,50.58416119372738,5.017215596387834,166.43785,LCZ-6 +lddcq,50.34797851249337,4.438206585905307,216.07115,LCZ-6 +iupga,50.407940001400235,4.606554576748881,157.89967,LCZ-B +iqpix,50.82450227763589,4.359210461981547,95.82396,LCZ-3 +vwwdt,51.04972138890923,4.934259205447902,22.393,LCZ-6 +shofg,50.61739511243224,4.193574743513021,117.63992,LCZ-B +ihafo,50.953098595485464,4.115648030735952,25.18627,LCZ-6 +hqkqv,50.59318438277888,4.772151859297503,167.82895,LCZ-6 +zmkjj,50.8327784398538,4.935135954983973,68.06904,LCZ-D +dlfap,50.910462737706474,4.829767820156495,50.03206,LCZ-D +iewei,50.80549733985751,3.329963258511577,19.29699,LCZ-6 +vwuyd,50.77359053563251,4.249361789317878,49.39734,LCZ-6 +ymxec,51.15903779860971,4.10448478210302,13.29365,LCZ-6 +xzinb,51.337498981315775,4.9678791777255205,29.23277,LCZ-6 +ikihu,50.71289205816934,4.50494873064926,110.70858,LCZ-6 +xvmhc,50.82191841747088,4.096407260446564,54.70943,LCZ-B +mzums,51.18843759296779,3.0873509607160092,1.90895,LCZ-D +nhrjm,50.68128011368507,5.5091406631013475,164.39684,LCZ-6 +laiqn,51.039463061851784,3.726218628008319,10.77956,LCZ-2 +jvzxu,51.12227763874358,4.474794996224795,14.89916,LCZ-6 +xtdgu,51.052577833058606,3.6997246286009258,9.12446,LCZ-3 +gfsgi,50.67137816870546,4.568699941039144,85.76991,LCZ-6 +tioyo,50.694694418825264,4.072788112048363,70.46013,LCZ-D +jnffj,50.92028989268729,4.365813326674181,44.87572,LCZ-6 +nmmok,50.63762719785996,5.696343379864288,209.27092,LCZ-B +upvkk,50.32373175331885,5.4879730389446735,218.86952,LCZ-A +ujxts,50.583770827197014,3.3768010275595692,32.35855,LCZ-6 +qojzn,50.94598210904337,4.055955127105975,14.48828,LCZ-6 +kincx,50.80887014041915,4.971611482554575,49.82035,LCZ-6 +dcdkd,51.19663863822379,4.413991670902503,9.8084,LCZ-2 +iwtqg,50.000376711787126,5.163112969440963,378.6749,LCZ-D +gwjbv,50.89980073432608,3.415626935215139,13.88992,LCZ-6 +dyywy,50.76291080426012,4.54906453434413,84.96623,LCZ-6 +vgphd,50.888131668835975,3.962033077465392,54.15317,LCZ-6 +krcxk,49.68239899871553,5.72195369828734,357.93768,LCZ-6 +dmnrd,49.648197872450496,5.881446362477837,326.02179,LCZ-6 +huosr,51.00803993667246,5.033824229072085,47.47441,LCZ-6 +melhf,50.92585002438293,4.701782874099231,16.74374,LCZ-D +crwrl,50.62713460478552,4.326449829480774,138.77766,LCZ-6 +gojrt,50.616253999548825,4.721053818929816,161.40936,LCZ-D +qowcf,50.55954033774998,3.5998645051240445,54.68496,LCZ-D +daicc,50.82961315661054,4.45249497285726,83.66532,LCZ-6 +bwxpl,50.86399364483167,4.600933028018451,71.63597,LCZ-6 +aebls,51.237313634637026,2.918427758413837,13.38392,LCZ-8 +zyobz,50.461266226849375,4.36602835196038,125.53008,LCZ-6 +lhnbn,51.30679552037015,4.985371641405084,20.85848,LCZ-6 +tvnkv,50.462629769313615,4.357305312273836,163.85646,LCZ-D +uvniv,50.42310131675239,6.072170322249723,504.53836,LCZ-D +jrfex,51.11018872197766,4.322008068993854,8.07854,LCZ-3 +xhnne,50.744685375092494,4.724015064684428,58.83808,LCZ-D +yjquj,50.517153429031225,6.203481048717155,508.95386,LCZ-B +bejwo,51.14208232965714,3.759100462150256,6.75459,LCZ-6 +twehl,50.69568355741682,5.641363749788376,124.27636,LCZ-6 +wizyc,51.021443091328145,4.968551025721477,19.36925,LCZ-6 +lnuxc,50.85908123654565,4.376663472592482,40.75269,LCZ-6 +pcwyr,51.29758138503118,4.170019981304862,4.62265,LCZ-6 +yeouy,50.70309841169774,4.564904544021958,103.31208,LCZ-6 +dwmrz,50.85195502809866,4.388263995778234,85.83389,LCZ-2 +sqqhp,51.06010522450234,3.1105339835884633,18.56757,LCZ-6 +wzbvi,50.89228486117753,5.477491380759909,43.92234,LCZ-6 +yopbx,51.04677480789949,3.7484192855525422,6.7757,LCZ-3 +vzkqn,51.25438253733342,4.525552722738494,13.00933,LCZ-9 +ktntz,51.19660324310737,5.067779180210853,25.8383,LCZ-6 +iokcb,51.30812570814783,5.021932911538668,29.37219,LCZ-A +muuiv,50.48295998030871,5.098978605337755,83.3308,LCZ-6 +tqywo,51.24818050718898,4.487850753484743,6.27596,LCZ-6 +skqas,50.464290442348734,4.874079148112708,87.25608,LCZ-6 +nqytk,51.059641337164926,4.591147769936151,18.82363,LCZ-6 +drhas,50.31425058511972,4.892572353628408,182.97546,LCZ-A +aqpha,50.6715895082653,5.6129248500285325,131.75163,LCZ-6 +znwhu,51.2318806658393,2.913605022421862,12.11466,LCZ-8 +rdlfv,50.41049892864869,3.808542633247609,98.74636,LCZ-6 +iyxxz,50.62251931700081,4.088853153910603,68.71642,LCZ-D +srokd,50.68016144189608,5.621502176055978,78.26131,LCZ-6 +hjrjq,51.18825954808963,4.105295430854049,7.0215,LCZ-6 +ifbqa,50.988703491214395,4.537882755154124,9.94706,LCZ-6 +dyieb,51.010289975203904,2.6160425784184027,5.94548,LCZ-6 +zegon,50.70858359888489,4.5957165434884875,76.55225,LCZ-6 +fpxxj,50.85606609623453,3.0962128236172433,18.70521,LCZ-6 +gtdrt,50.75849289902218,5.305536947019547,73.96287,LCZ-6 +mgpaz,50.686778995551805,5.094256668251224,116.53543,LCZ-6 +pepnr,51.33532018276392,4.76641865103222,25.8263,LCZ-D +zdtiz,51.13734427253338,4.8439297725047075,22.36223,LCZ-6 +bycdk,51.3572651612883,3.317388439310853,8.52822,LCZ-6 +iszvk,51.155798663883346,3.6710026774300943,4.22513,LCZ-6 +dwszd,51.09579141574783,4.378641700500316,14.75,LCZ-6 +emljw,51.028009070548784,5.496477968955288,77.01425,LCZ-6 +shlch,50.5015816777164,4.86089870926192,164.64705,LCZ-6 +crowo,50.45872834111683,4.866708578616826,82.91905,LCZ-6 +tsyfa,50.57056727533492,3.7458563507565046,53.84768,LCZ-6 +hrgio,51.34772804087278,4.734270740262385,24.19653,LCZ-6 +vgjuk,51.273688045733856,4.662145608264355,21.18637,LCZ-9 +xpvac,50.95821680908239,3.408299762143265,10.71218,LCZ-6 +txrbz,51.1212547404692,4.306711335709591,7.72951,LCZ-6 +agxdf,51.27532442339769,5.152992485273884,29.11792,LCZ-9 +jgnmf,50.42850656524743,4.879824650460622,84.60632,LCZ-A +tgrkr,50.79519405724568,4.402665702203847,91.57044,LCZ-9 +vxfoz,49.65971399600882,5.57545033297903,344.62692,LCZ-6 +fqoeh,50.74670774852244,4.3434236725373685,106.89452,LCZ-9 +jryzt,50.41873454174596,4.457225007537334,141.92075,LCZ-3 +gurqp,50.801254159390126,4.327392288770212,41.7093,LCZ-6 +fujhv,50.33173310906195,4.985853145419451,267.04568,LCZ-6 +grlbf,49.674728533618875,5.8326949950053235,411.61319,LCZ-6 +ufcoz,50.56482315028904,5.62228338348441,263.37436,LCZ-6 +nifer,50.52939348905577,5.703738050310315,246.68687,LCZ-D +xkoay,50.80613046254616,4.398755488787964,80.96988,LCZ-6 +gsowi,50.86053691617008,5.296909461553968,46.62703,LCZ-D +jvneo,50.69820748486174,5.409883835634401,141.86108,LCZ-D +wmewd,51.17279321355626,4.4207448699924825,14.42966,LCZ-3 +biuax,50.47908125075421,5.570974284841732,123.85007,LCZ-6 +fuvfh,50.45362422126623,3.8075688897554643,23.04788,LCZ-B +eikia,51.16529637105019,4.95265779591044,19.4546,LCZ-6 +yrevl,50.90543017915973,5.658991732539651,56.43452,LCZ-6 +ixmty,50.63046008263628,5.735466239390885,259.5123,LCZ-6 +vomdh,50.87331367800585,5.510091838798474,54.40099,LCZ-6 +vzare,51.23894730027438,2.94159662102578,4.15509,LCZ-6 +prayi,50.95696473464021,3.279636217420942,16.17011,LCZ-6 +zaaky,50.797478916006,4.823805240902858,82.35733,LCZ-D +wcmsn,50.7775790105618,4.353653562776042,92.15559,LCZ-9 +jwcup,51.17461827599696,5.267986019903366,42.61214,LCZ-9 +eqvpq,50.62015744793653,4.4493375985579835,127.33326,LCZ-9 +jhsce,51.26318396000234,4.489344922513835,8.25168,LCZ-3 +epckq,50.89057686967335,4.689066477434591,39.95356,LCZ-6 +egssc,50.812494648562435,4.339088005284976,97.36556,LCZ-3 +jfyma,51.127493467678065,3.7163032354280334,6.231,LCZ-6 +dvzux,50.839856754762344,4.377839232654293,68.66089,LCZ-3 +wouox,50.998901246999324,4.860881192695183,18.07982,LCZ-6 +yblxs,50.58805027352236,4.532430371341582,144.39926,LCZ-9 +dupzs,51.007459349615516,4.87966970313932,23.08069,LCZ-6 +spmtc,50.63980712420082,5.925174346095122,247.93236,LCZ-D +jgoyb,50.47043424000283,4.8254528488060515,115.467,LCZ-6 +kiykg,51.114438892327556,4.322513746859156,2.88731,LCZ-6 +qiskb,50.76983640842573,3.7865657580366854,91.15707,LCZ-9 +hwzyg,50.78972638543635,4.334871307399796,76.68451,LCZ-6 +ggcev,50.41467185040833,4.91715789644606,188.17892,LCZ-6 +axwyl,50.848664858858484,2.9701992856929693,46.44669,LCZ-D +hknoc,50.66722947272787,3.896998913603794,56.52011,LCZ-D +cgklw,50.55975939873855,5.264236861480323,194.77086,LCZ-6 +huizk,50.44849400262,3.8621538824420445,34.79463,LCZ-6 +bigbw,50.7541165022586,3.2090765091133866,59.79655,LCZ-6 +xkggg,50.5906683595639,4.491771987663857,115.24201,LCZ-6 +nfhjt,50.67430779081754,4.24115149422983,92.58878,LCZ-A +rcxjg,51.01006029752172,3.99786659310492,9.52779,LCZ-6 +qbrfh,51.291272186184386,4.451478052030205,8.8749,LCZ-6 +iordd,51.38032894598548,4.4712326927650805,24.29918,LCZ-6 +huyuc,51.319476425382206,3.129099410439919,8.90753,LCZ-8 +wrwlw,50.453979966890856,4.166217305906204,69.50025,LCZ-D +yzokj,51.119473520753616,3.721136957342795,5.24,LCZ-6 +gfyqi,50.854651392604076,4.301713286517103,61.40912,LCZ-6 +qelhd,50.92707997293103,3.444194575954049,14.63445,LCZ-6 +gjtbw,51.003192538012506,5.506979244601277,78.50541,LCZ-6 +cdqkb,51.09997359982044,3.617192725002561,5.96865,LCZ-6 +bzggo,50.91516099176486,4.3957558819056795,27.60386,LCZ-6 +vnaao,50.01781451275875,4.316815680765842,262.1301,LCZ-B +stmnz,51.188405153738586,4.452692480747662,13.57934,LCZ-6 +yrrog,51.081058261822776,3.8233885755496764,5.55884,LCZ-6 +vznph,50.467032343633406,4.042658183476008,51.11821,LCZ-6 +asyum,50.1542131222802,4.608865004184567,185.14436,LCZ-A +svvlo,50.75999258943499,4.263503163054357,32.18665,LCZ-6 +tnbhx,50.905862181277044,3.227040094616636,17.76888,LCZ-6 +adfrw,50.873296786366126,4.304056184214377,59.52517,LCZ-6 +jshhl,50.74557953698059,4.273693170251459,59.47965,LCZ-6 +ibssq,50.84081587910431,4.2687372097916905,63.10983,LCZ-6 +glgkg,51.17219920126207,4.29151942773575,10.88535,LCZ-D +tsnfm,51.07752445658598,3.6806307931252564,9.34219,LCZ-6 +fgdlg,50.61067247440851,5.60853297264078,82.68591,LCZ-6 +vjqee,51.08835104455907,3.7236645436248725,6.28472,LCZ-6 +ubgqj,50.78904807272994,3.0385599072764733,18.27297,LCZ-6 +srijj,50.93320474868007,4.398566799833535,23.07299,LCZ-D +crybb,50.3960030006682,3.8625440325110163,113.66293,LCZ-6 +xrqwl,50.05833464326537,5.142245982087563,211.93906,LCZ-A +uewuq,50.93066875694803,5.4443170184423035,38.83326,LCZ-B +wzpjd,51.09691108316186,3.832663999197161,4.16358,LCZ-6 +ufcsk,51.109900452433145,3.628182498563836,6.52855,LCZ-6 +axnzo,51.2035958426665,4.427209113036191,14.27187,LCZ-3 +jvbiq,51.3662677663718,4.455092705799485,29.21893,LCZ-9 +gsibf,50.25420800334665,4.450125824791646,223.53999,LCZ-6 +opimw,51.18074089742898,4.425579891078687,14.25713,LCZ-3 +srcqw,50.6870060010308,5.7637535298197715,227.02458,LCZ-9 +bcbwd,50.51249245203623,5.3544882307561545,205.58226,LCZ-D +cfcoe,50.686395634176684,4.367702293585346,113.83897,LCZ-6 +xyfbu,50.8948266186506,4.355406767185847,61.32188,LCZ-6 +ijdvl,51.19586650471657,5.132842242664971,27.7331,LCZ-6 +dovbs,50.447602598538275,3.8106981742947768,27.38914,LCZ-6 +zfucf,50.78081290281453,4.241589788524421,47.42203,LCZ-B +tpqql,50.527667608270754,4.7869240834215345,180.58563,LCZ-D +jcwum,50.12026241360419,5.203457314795588,163.81627,LCZ-B +kgsss,50.643329388629006,4.772673616957841,138.33032,LCZ-D +tyunm,51.23863252811412,2.9382537857474613,7.94329,LCZ-8 +ozofg,50.67080631525813,4.564414479608584,71.50993,LCZ-6 +rhzna,50.408222351391785,4.439043220575882,129.04556,LCZ-6 +qccir,50.48953285438096,5.884868315291318,298.82462,LCZ-A +brzgf,51.35994414424254,4.447145267701172,25.21053,LCZ-A +dxqik,51.11153763196797,5.181921453714626,43.20671,LCZ-6 +jpwly,50.611821011884345,5.509681060919921,61.58979,LCZ-3 +vohsd,50.9194106332798,4.801704732545371,22.60989,LCZ-6 +kvxju,50.839029802082166,3.319117384574391,14.731,LCZ-6 +pcuvq,50.65513385606822,3.5796364568759875,64.34097,LCZ-D +xnjbe,50.862313506569095,4.430684921106981,71.23878,LCZ-6 +phbhf,51.032278875364206,5.343453398532359,54.23229,LCZ-6 +icdsd,50.63593318506918,5.580769373530157,67.38828,LCZ-2 +ishtv,51.22629898514675,2.9300992765642646,8.02774,LCZ-6 +htnsb,51.05516519194952,3.7170388296786894,11.37825,LCZ-3 +wzvup,50.67692107552738,4.797451577326008,117.87711,LCZ-9 +plqqc,50.389180163283406,5.240670367726178,278.32333,LCZ-D +yrdle,50.707956836920296,5.30295748379905,126.16142,LCZ-D +jjuql,50.716217189264455,4.582787044228477,96.44629,LCZ-6 +zapak,50.76905207160102,4.6479570938826305,42.64101,LCZ-6 +janrv,51.2583381809763,4.084279218154447,5.24541,LCZ-6 +pvyze,50.717884185037015,4.48515348335703,92.13357,LCZ-9 +mksnh,51.18799723656296,3.153826321341754,16.70684,LCZ-6 +fmoba,51.300076527753085,4.545072450361384,16.7281,LCZ-9 +uskaj,51.171129700728464,3.2092479015474114,3.03262,LCZ-6 +zcknz,50.50639293511017,4.096265321477207,124.51169,LCZ-6 +juhpn,51.26233311334638,4.647829252252629,13.95433,LCZ-6 +rmjsb,51.006694291151334,4.331655286394032,11.02134,LCZ-6 +kqktz,50.43764555831229,4.523852077881702,170.42606,LCZ-6 +sdgch,50.67094195201896,4.916089694751785,124.55656,LCZ-9 +imerh,50.666302130591056,4.614882400646762,133.35966,LCZ-6 +pluvx,51.247429193057464,4.428341286407219,0.72164,LCZ-6 +aplyc,50.02918632716917,5.3882373499212814,466.2428,LCZ-6 +ihibx,49.916349909190295,5.394887087134562,481.0058,LCZ-B +jqcmw,50.953267401125515,4.579975202855533,10.41502,LCZ-6 +axblb,51.212614759499786,3.2249210017219503,2.96179,LCZ-6 +euscp,50.41332896250128,4.028222763590099,55.91306,LCZ-6 +ehrio,50.65486903519756,4.612986771183126,117.0397,LCZ-6 +ssyad,51.09291751172316,3.4477488454254157,20.34859,LCZ-6 +snddq,50.975377315816765,4.964244724515731,73.63872,LCZ-D +cmjhd,50.62515294552372,3.39387501345506,25.44217,LCZ-6 +ykctx,50.55382818845358,5.8196635474162886,160.37961,LCZ-6 +xbyfa,50.60811802221553,3.3747583319912944,19.75433,LCZ-6 +xxsdg,49.68222147632525,5.529304142709348,351.37494,LCZ-D +relyn,50.77001363426565,5.470008644125198,89.86368,LCZ-6 +rzfpj,50.677201616620536,4.495461694382644,117.65359,LCZ-B +jasoq,50.82546599691093,3.1808780859936334,17.03524,LCZ-6 +zxhqs,51.31399317179466,4.418870780245415,5.99275,LCZ-6 +qqqkv,50.5606286408705,4.1529050123358076,107.35165,LCZ-9 +kjzpe,51.00069172555729,4.434107931550175,8.69667,LCZ-6 +fsspd,51.17334328396763,5.160660407920538,35.67011,LCZ-6 +ktwmr,50.95585399074681,3.1548032199486067,21.65976,LCZ-6 +mggtj,51.29100789134536,3.189666712565456,0.99129,LCZ-6 +mjprn,50.888672222004296,4.703874735271456,30.0241,LCZ-3 +ldiae,51.122129167087756,4.232710373741916,12.17414,LCZ-6 +nijwb,51.06893036497185,4.666344920642204,16.95828,LCZ-B +pwipu,49.648206517634506,5.857286897654785,324.13843,LCZ-6 +ibezs,50.24570520758339,4.8302773917769795,265.85693,LCZ-D +elqpq,50.80866124304269,4.347255996570043,98.16074,LCZ-3 +tnemw,50.82558668469725,3.901627926564621,23.04238,LCZ-A +fmynq,50.924372632859225,4.5037394374758435,19.33598,LCZ-D +mcfol,51.19588321463915,4.430129159965036,10.47399,LCZ-3 +zyhqb,49.687562924402975,5.832124950645216,401.33163,LCZ-6 +ejkfm,50.643127161827955,4.00076199980858,106.28592,LCZ-9 +imnpq,50.513614895054474,4.007652105017973,87.48185,LCZ-6 +gxwwv,50.11121727497157,5.496040988657825,453.15472,LCZ-D +dqgdt,51.15292349433748,4.41123967218212,13.61276,LCZ-6 +nwcjw,50.8553154589991,4.333596658195798,21.74959,LCZ-2 +kvcly,50.20928936190935,5.334004613741689,311.58548,LCZ-6 +kcfpr,50.84082720492823,3.4407414058285104,21.10075,LCZ-6 +xoycf,51.08949443258596,5.53331519426129,70.90735,LCZ-6 +bvlaq,50.755258528645015,3.5635894301072515,40.15632,LCZ-D +bgevo,50.972436951844074,4.565057221270249,7.98017,LCZ-6 +ulxvf,50.92866538946776,4.333439187083303,51.02059,LCZ-6 +kmxna,50.07465635502401,5.211952939834663,261.62378,LCZ-6 +ozzki,51.15120776480408,4.893753338616576,23.11777,LCZ-6 +nggqy,50.281936590705186,4.951027104744709,180.79506,LCZ-A +ozeem,49.73638200179364,5.334269306156764,361.15695,LCZ-B +qqfya,50.829032288750966,4.367743420562048,81.19201,LCZ-2 +bqeye,50.78945921507739,5.664916034051062,80.04324,LCZ-6 +qpcji,50.62236258010462,5.593236261746226,66.98453,LCZ-3 +jrawi,51.33381536600078,4.32938052456717,2.42911,LCZ-6 +bypvw,50.69367168766857,4.41389334543147,126.41523,LCZ-6 +detzt,51.005298365068356,3.8824445019106855,14.77627,LCZ-3 +kwbfe,51.00344938109714,4.353826431212419,8.80614,LCZ-6 +vmhnw,51.09608415011323,3.3003135855727694,30.01048,LCZ-A +dpaoc,50.851651944757705,4.349128017655319,28.41327,LCZ-2 +gvakj,50.54299204879849,5.334808790230579,68.72636,LCZ-6 +cirak,51.17093609476828,4.488196088432616,17.65378,LCZ-6 +zhoaq,50.85409892003981,4.326189828949413,38.85364,LCZ-2 +lftef,50.90656473965456,5.023056789633632,29.1835,LCZ-9 +blvxm,50.72383142555939,4.713291671521099,112.3943,LCZ-B +ivzbe,50.882445390026824,4.711297750360299,31.95824,LCZ-2 +fuzdg,50.78005278974714,4.339544777039043,72.40034,LCZ-6 +fltxd,50.63237635108056,3.4935963213819776,53.36305,LCZ-6 +talwj,51.080141860554036,3.6433584406695676,7.12782,LCZ-6 +bidvg,51.22045860833388,3.6192146449940514,5.3697,LCZ-6 +kklnv,50.68614911352304,6.007328727286101,237.28645,LCZ-D +jprrd,50.36379957171607,3.9744120709240334,93.92548,LCZ-9 +jocbr,50.407647144503095,4.530445393611404,102.54398,LCZ-3 +ugihj,50.441657817742545,5.484144786671627,280.38275,LCZ-D +qppol,50.90233413752503,2.80179168814498,16.61194,LCZ-6 +bujqq,51.2147619124997,4.473335654214024,7.31316,LCZ-3 +zfygv,50.72534632232916,4.970554080558853,68.57887,LCZ-D +ijgvn,51.18802741569579,3.764968891831055,8.87233,LCZ-6 +fpino,50.908180847940926,4.112242405365102,44.36352,LCZ-6 +ayuzl,51.12307263275746,4.848135331686135,22.94278,LCZ-9 +agsar,50.84308788594804,4.549863782303452,76.09308,LCZ-6 +obnns,50.7441714057938,5.263872737102448,84.50423,LCZ-6 +segyl,51.029511413254994,3.6298733512287735,16.52858,LCZ-9 +tvupr,50.92408535457401,5.585654450980203,93.50678,LCZ-6 +ifusa,50.69889358310897,4.382651426870641,122.99995,LCZ-6 +nndhi,50.78036440692925,4.686479441244006,46.33069,LCZ-9 +ddgny,50.81221448718338,4.391587484673764,87.69511,LCZ-3 +wqsvn,50.490089533036084,5.765501604527092,361.32999,LCZ-B +yzifq,50.84065818168344,4.415237951608784,74.67903,LCZ-6 +tczhy,49.67683502820842,5.83344939315178,397.47311,LCZ-6 +vvgvr,50.97344987930858,4.092649611598637,9.91069,LCZ-6 +zcxmi,50.64889823133008,5.427427431359486,167.46144,LCZ-6 +liwqj,50.58548518513747,5.415231460704003,136.82179,LCZ-6 +zbxqy,51.08884630972008,3.4663614395227054,12.20214,LCZ-6 +vovfe,50.94463338814975,5.557451044676844,87.20363,LCZ-6 +iflqe,50.608623331527156,4.693331050603581,157.1057,LCZ-D +zomfz,50.55144249127855,5.015477900317771,180.41397,LCZ-9 +qikhc,50.807475262240075,3.914760279927786,19.61859,LCZ-6 +fmocy,51.130364917534024,3.294988708667266,6.80963,LCZ-6 +fxkcy,50.78409836850077,4.887933638139943,54.39705,LCZ-6 +jdsod,50.7014405286851,4.427383517495126,108.55785,LCZ-9 +cutii,50.50222433656442,4.472474595433901,143.13229,LCZ-6 +yvbgv,50.905766370413545,4.350876620427274,50.05647,LCZ-3 +xqtxd,51.217194237886176,3.2472705052309037,3.6702,LCZ-6 +uzdwc,51.201312797166594,4.519857797990629,8.31021,LCZ-6 +gryvw,50.662998253013704,4.677013586549659,120.32827,LCZ-6 +spshs,50.42275830604267,3.8018163883464506,39.12009,LCZ-6 +vkqev,51.214844483114526,3.2838120517903553,2.166,LCZ-6 +avaoo,50.877998541182805,4.314445799607043,31.5052,LCZ-6 +opvju,50.72475583807977,4.379725905581301,121.34036,LCZ-6 +afsct,50.34837621985854,5.441896625624109,154.79875,LCZ-B +mjska,50.86635408453882,4.304583119777028,58.00882,LCZ-6 +tginu,50.84504233072438,4.484952178074426,79.2664,LCZ-6 +rznia,51.289919854255466,5.088454688879401,22.87717,LCZ-6 +xcgsj,50.45425319081529,4.705852037029709,103.77905,LCZ-6 +dbmdn,50.97063112596275,5.508070597281889,76.43843,LCZ-9 +dnkoz,50.90891901223712,4.070547471847749,27.18995,LCZ-6 +aalca,50.640203136576496,3.9333827876933416,94.7924,LCZ-D +qzlez,51.22594335189287,2.918187165318311,15.11002,LCZ-8 +psijb,50.58921820048017,4.406446761588062,145.26965,LCZ-6 +uiito,50.607555694577286,4.34452853583858,126.0153,LCZ-6 +pcres,50.831078872088554,4.484417519369768,95.8289,LCZ-6 +nqxmm,50.99349462332148,3.9166809061869916,8.04387,LCZ-6 +dtxbm,51.221693928441255,4.512631925283444,7.58809,LCZ-3 +gcmem,50.74373066206244,3.4110594950773505,17.35504,LCZ-D +ruict,51.171612800099034,3.786423191314968,6.80279,LCZ-6 +jxgxr,50.70975864093647,4.701971789986573,68.14117,LCZ-9 +drtxc,50.64639749462354,4.2685141940493345,104.68193,LCZ-D +xhuxg,50.551288272889906,3.4618114997931344,19.30723,LCZ-6 +bmjat,50.450017476630784,4.860489617335617,82.88405,LCZ-6 +vgill,50.97947602453253,4.830332776314968,18.03731,LCZ-3 +mmfqn,50.58100330181142,4.710799659445041,147.35191,LCZ-D +ouztc,50.5833238572307,5.068269027594026,170.33319,LCZ-6 +qcxrm,50.52569909590079,4.785481457848653,182.67393,LCZ-D +nuwok,51.31052078971158,4.9548994836574085,26.10187,LCZ-3 +clkre,50.98588499399647,5.032070233468847,20.6439,LCZ-B +ozpbc,50.85734093039019,3.302199951571374,11.66028,LCZ-6 +zhauh,51.023372547164804,4.472119935450185,6.07281,LCZ-6 +yuixe,50.68667059396674,5.949553409216631,253.91264,LCZ-D +mnojq,51.09763091965402,3.710220007686013,4.99291,LCZ-6 +uqcxt,50.62188047529408,5.889261335341036,281.86292,LCZ-6 +ogjqd,51.25918191112472,3.0955175234169885,-0.18497,LCZ-D +btyut,50.84921100708465,4.459396383048504,68.05747,LCZ-6 +udxke,50.62454112304966,5.5741111413596185,65.00964,LCZ-3 +hydeh,50.73615113854217,4.346557157989201,109.69192,LCZ-9 +hukmj,50.700513191251495,5.271427600819557,117.60192,LCZ-6 +olulw,50.62465958818754,3.7867054651823326,36.27112,LCZ-6 +uyulm,50.67504269714799,4.091821653003411,67.87647,LCZ-D +eefua,51.26946400521492,5.1366132545331,30.799,LCZ-9 +zjlrh,50.69518593816283,4.997900102482845,68.58463,LCZ-6 +klrva,50.979847844696955,4.566861738052387,8.35473,LCZ-6 +wzfzn,50.51787923129141,4.570100142797675,142.50575,LCZ-6 +dzsft,50.74984461671522,3.194585289529759,50.65744,LCZ-6 +pgbeo,50.78032771468804,3.2897199123895815,43.04104,LCZ-6 +vccys,50.80857217113227,4.354481981359818,101.90204,LCZ-3 +gabrl,50.47571147612519,4.836348317551872,138.69418,LCZ-6 +gzvyh,51.01131713855137,4.488043751939991,7.3395,LCZ-6 +qqxwx,50.971478817300365,4.57553425209557,8.35277,LCZ-6 +ulgot,51.32190710278985,4.435470247753552,10.24221,LCZ-6 +iodnv,51.3177482794737,4.881990399552733,27.98343,LCZ-6 +tvqoh,50.705302105496905,4.7737423402956205,123.22746,LCZ-D +xqhew,51.06337151478542,4.119586388008669,2.69678,LCZ-D +byerb,51.1978746273584,4.770183634509696,15.96901,LCZ-6 +mxjqt,50.6765862429522,4.30232949901063,75.61649,LCZ-6 +bfavg,51.00366428133761,4.642041549547733,15.87124,LCZ-9 +vhqpt,50.968975122516234,5.340379152948454,34.75293,LCZ-6 +gwgrd,50.55846969163131,5.467699408630851,224.1162,LCZ-6 +ahayl,50.508354249331205,5.566172866195628,197.79936,LCZ-D +keiha,49.99940991145849,5.157661324949594,280.22501,LCZ-A +dyvzm,50.84945408388615,3.2749201901331446,16.77507,LCZ-6 +ekhia,51.147219105231414,4.341835891158633,20.02315,LCZ-6 +lwtbm,50.963777621611996,4.842208917024336,43.88791,LCZ-6 +qqago,51.30059654306579,4.895967140601512,23.10644,LCZ-6 +chaxy,50.76798157530675,4.13459828387542,56.15941,LCZ-D +lchog,50.47702329454449,4.844434510043733,135.22803,LCZ-6 +fdugp,50.709861651958306,4.524516822446821,102.76697,LCZ-6 +kdhvq,49.885514025750105,5.527418178108465,478.19617,LCZ-A +bsvam,50.635992923451475,6.030380078528759,284.28647,LCZ-6 +ujqcv,50.43276694430791,3.8556607188501406,58.69105,LCZ-6 +yrpym,51.11071890279567,5.098535678960798,23.45221,LCZ-6 +lhwuz,50.79282557767089,4.245405975119566,29.27578,LCZ-6 +hltop,51.18168608867685,5.078710330797996,26.82393,LCZ-6 +vsogn,50.420652711015414,4.85464732868726,139.55919,LCZ-6 +ojcrj,51.198412498329425,3.1579785896093653,16.364,LCZ-6 +gshal,50.57504765298092,4.0709788208349895,89.65029,LCZ-6 +qgfqz,50.524103405908036,4.363392194076343,134.32722,LCZ-6 +rniaw,51.19850794847054,3.275513554036441,6.45981,LCZ-6 +tpyvu,50.65710548066168,4.592700111282276,119.83384,LCZ-A +kljby,50.77397731374765,4.622146664483651,69.87666,LCZ-6 +izcah,51.00378493709808,4.855121706862508,15.90019,LCZ-6 +bajhu,50.64452248639758,5.546648721990921,137.27182,LCZ-6 +jmaco,51.0929831418175,4.662918379422668,12.76329,LCZ-6 +vyfkr,50.66943165987897,4.554651168306101,91.0221,LCZ-6 +gluyk,50.51121845589708,4.612159523938366,127.41428,LCZ-D +zuttw,50.8294692395609,4.354200664905599,91.16415,LCZ-3 +lzntp,50.87607628640751,4.800738712194461,94.18366,LCZ-6 +kaqlo,50.70866876791736,3.902079593080552,56.31845,LCZ-D +fbnfx,50.76957744347336,4.539512204355602,80.45311,LCZ-6 +cofvb,50.50807078445551,4.665492622494904,128.0199,LCZ-9 +omcby,50.670112013830746,4.356326507160282,121.02931,LCZ-D +cqmfb,50.956888182070024,4.73631218669135,55.83252,LCZ-9 +xitir,51.26096943179906,4.097789588974935,4.55406,LCZ-6 +mwakk,51.32901963305061,4.9559274503483035,29.55341,LCZ-3 +aypym,51.05069674752297,4.3554858670058705,4.48838,LCZ-3 +gsrmt,51.09142909734945,5.433829605355154,72.0081,LCZ-6 +nmgsd,51.32746971902479,4.794069301084454,31.0448,LCZ-9 +msjvz,50.71577219686317,4.393391044429967,110.93182,LCZ-9 +tdzql,51.13825157643829,5.81328726994875,31.46351,LCZ-D +rgbyu,51.29471130230798,4.473847235298942,11.1787,LCZ-9 +oofdm,50.84300132321945,4.263227963748737,64.76202,LCZ-6 +qoeyo,51.20720831544231,4.247780858635643,11.27293,LCZ-6 +fkhxh,50.83109574374236,4.495034292354064,79.17873,LCZ-6 +qsktw,50.6905040321405,5.661235162365423,60.30669,LCZ-6 +zvuzg,50.76731111883302,2.890617801379802,58.24271,LCZ-D +pokuk,49.56236773052908,5.636541716480809,270.82657,LCZ-9 +kmvkh,50.96922562286779,5.155144456546815,42.26772,LCZ-6 +foluv,50.2336245149723,5.80259256283298,569.05878,LCZ-D +mhydw,50.89484131672805,4.630968362038587,60.22216,LCZ-6 +bwjlj,51.16711242493679,5.057014988546961,25.37071,LCZ-6 +hbuqq,50.95365885672527,4.710233331643805,12.03243,LCZ-6 +rcsnh,50.52965223151462,5.050297835805614,209.73375,LCZ-6 +lfobj,50.62595192431352,5.606379980285642,71.52219,LCZ-6 +amyzp,50.25006559037192,5.670341646333127,428.76602,LCZ-D +maemz,50.96940357740251,3.6473360138910995,8.17853,LCZ-6 +kqdai,51.17098448571009,4.586682601118862,9.09942,LCZ-6 +rclrh,50.656189063350965,4.19433325498211,71.39203,LCZ-D +cegfy,50.375807743372214,4.863202174220962,151.61874,LCZ-A +ccooe,51.104445501407035,3.961713434341235,5.35983,LCZ-6 +anmuh,50.6827538439856,4.393240120360281,106.38693,LCZ-6 +qfarh,50.71201044600959,4.6456392510431295,83.31994,LCZ-6 +hsqsm,50.8034426440198,4.937552841156275,43.87027,LCZ-3 +bjwzn,50.70238083860741,5.644063903853471,135.76199,LCZ-6 +kgdja,50.94212464186561,4.403000340226065,13.6464,LCZ-6 +rwgqi,51.16040524273064,2.715518316259508,13.08289,LCZ-8 +einyr,50.39439960147735,5.658756568591295,402.05542,LCZ-D +ptqry,50.805868277255314,4.529136028539828,96.53896,LCZ-9 +ochjs,51.02304107459963,3.788247966050371,17.37263,LCZ-6 +jrrqr,49.642911558429525,5.835133006629178,327.98468,LCZ-6 +xxkvp,50.75198595983822,3.253083362444235,33.45969,LCZ-D +epxik,50.68397850485082,4.604873765868117,128.01581,LCZ-6 +tvvds,50.59955487263435,4.161716930079483,103.09293,LCZ-D +ljitd,50.83714730413436,4.453594654306904,68.50265,LCZ-6 +tiwmd,50.397031688572476,4.408070685672605,151.95631,LCZ-6 +mogev,50.80549200835775,5.182408394906763,54.08618,LCZ-3 +ahhog,50.15022657388359,4.339752375558497,265.77985,LCZ-D +fydxn,51.38454129530524,4.548362615642757,24.19321,LCZ-A +ykdhc,51.095409320395355,4.121307114334699,6.37792,LCZ-6 +igbwq,51.14606800718831,4.294790996518672,8.34009,LCZ-6 +efxvq,50.56767561876578,4.464584402147256,155.57201,LCZ-6 +knvdi,50.126579352307104,4.222669296594222,236.87227,LCZ-B +aqisx,50.64872103479532,4.212206358875767,95.71573,LCZ-D +ugjzc,50.97738305612734,5.07249092504956,29.95026,LCZ-6 +cwcjj,50.894817265637556,3.398956694905711,12.90253,LCZ-6 +nerdv,50.51227390704937,4.995699737748986,190.7285,LCZ-D +tqdre,49.67765891705333,5.780381080476845,378.93271,LCZ-6 +odqit,50.85010476605439,4.426034002630216,56.82335,LCZ-6 +goeki,50.878052993806726,4.3989162567769196,44.38834,LCZ-6 +waeia,51.13308440529452,4.5699028650825655,6.34416,LCZ-3 +gozyj,51.15044551810657,3.1726741436135306,10.2845,LCZ-B +zhgpl,50.616519539741105,5.837376758178779,248.62827,LCZ-6 +kitbb,50.925216170071636,3.4843809012709714,10.50114,LCZ-D +smsvv,50.83836640289792,4.318976495401898,22.36765,LCZ-3 +kgtat,50.699447988913946,5.274610533941099,117.29985,LCZ-D +yqhcg,51.22629614301423,4.425803274331959,14.60444,LCZ-2 +pdivk,50.89274467135567,3.375498164512253,8.20179,LCZ-8 +ykbjg,50.67754081461594,4.575092586853454,61.63698,LCZ-6 +axufg,50.721528227478125,3.904813525618182,45.60386,LCZ-D +pbbfv,51.21368072109038,2.893946501904328,4.22154,LCZ-8 +cxyuj,51.08553353147088,3.0928700067930834,36.27125,LCZ-6 +mrefb,50.812233245055594,4.363119748831673,88.95921,LCZ-2 +dykif,50.660077961118,5.971515915466779,259.79858,LCZ-6 +nfkwj,50.41137209874091,5.36315608562855,266.43027,LCZ-D +kqjqi,51.16599671187019,4.440131622035104,15.75389,LCZ-3 +imgcn,50.646893324028895,5.670984713795698,230.15904,LCZ-6 +vfvwd,50.927470574618326,3.9159597903076504,58.24699,LCZ-D +wnhsz,51.31887091179139,4.532132086038842,23.39731,LCZ-9 +hszfs,51.196710109162616,3.1891051427026764,5.87364,LCZ-6 +bidwn,50.805996594861604,3.993143289218784,20.42993,LCZ-6 +brxih,51.34621227019084,3.2984766514835684,11.1781,LCZ-8 +bmpfk,50.855735776989604,2.91681075972568,23.6384,LCZ-D +nnuva,50.6966327753299,4.317231176121813,89.49981,LCZ-A +vjahd,50.74481261503826,2.8599087474160054,18.73386,LCZ-D +izcgf,50.7753281608589,5.461400805508409,100.31676,LCZ-6 +hnhtp,50.86269999686717,3.548779010757793,59.36351,LCZ-D +zwsqp,50.461335546581466,3.9996201221600582,58.89933,LCZ-6 +uqhrs,50.579903516303276,5.29397050225586,175.56091,LCZ-D +dhmqi,51.13126401758807,4.741715666046701,8.33,LCZ-6 +rtxnd,50.52144015911615,3.877675923496632,69.52503,LCZ-6 +rdoyp,50.60420956550481,4.486842119602208,118.54548,LCZ-B +yygrc,50.69695704073572,4.372118720012397,96.82211,LCZ-6 +zwqgu,51.26413981522776,3.2277914829609147,3.92825,LCZ-6 +yztpb,50.07276842287581,4.375089693244815,235.35384,LCZ-B +qlmaq,50.76403707585349,4.879378402037529,52.523,LCZ-D +jvvqu,51.03655889465872,4.537532678609656,6.73102,LCZ-6 +oaego,50.616711513150605,5.5657616517910435,120.3856,LCZ-6 +dfjij,51.188991113733046,4.142117228431336,11.59419,LCZ-D +egwgx,50.73159426143364,4.609084907718542,102.83102,LCZ-D +ixszq,50.59341385888237,5.513937386213048,96.53517,LCZ-6 +dtzvl,51.09520626507844,4.6330606371641165,8.34467,LCZ-D +wzmwl,51.08189973628056,4.473131241773851,5.89657,LCZ-B +usqsa,50.837467806698385,4.368859157897484,87.74918,LCZ-3 +znrty,50.37167868314431,3.870742911871581,139.79378,LCZ-6 +vhyrt,50.85623884885535,3.327918947619051,14.76899,LCZ-6 +nnhhf,50.70411759723266,5.8832650110909634,222.5881,LCZ-D +gybbf,50.7231703354004,4.491696509459123,78.59078,LCZ-9 +xzwxq,50.449539903012635,4.242113320087245,99.68098,LCZ-6 +fekmi,50.75396449900137,5.074932007260875,73.44993,LCZ-6 +nhhkc,50.44257880416526,4.884639499391234,137.2506,LCZ-6 +iwyxp,51.06315561888779,3.7063041013253786,9.74606,LCZ-3 +ncpia,50.3866126553714,4.0385204279807505,57.38496,LCZ-6 +rfnli,51.0918995082083,3.597896167637722,7.68875,LCZ-6 +gwwwn,50.75709006065657,5.096002217772038,58.20759,LCZ-6 +awecx,51.202034085301946,3.4418419387636017,8.90055,LCZ-6 +xycra,50.82582198843121,5.59350662120944,83.78297,LCZ-6 +lgxun,50.85192460811812,4.4034948694666,87.93549,LCZ-2 +eaeye,51.27166522769086,4.40769447456037,1.85992,LCZ-6 +ayjvu,51.328871113794314,4.950009946608528,27.37121,LCZ-6 +vpasr,50.874229137104464,4.7024953212060145,20.94676,LCZ-3 +bkjff,50.84251863770222,4.431574527079517,78.05771,LCZ-6 +jwchc,50.84449600079734,4.219418817783128,70.24949,LCZ-6 +vbfcn,50.81132192654793,3.331035271415859,17.21361,LCZ-6 +zyfww,50.780228796773805,4.03450355192586,40.7841,LCZ-D +atqub,50.97202747308418,5.401067729160478,47.46473,LCZ-6 +wzacz,50.37521286108488,4.679327351244643,254.19673,LCZ-6 +zwzjn,51.07323317817915,4.538445726281952,6.45639,LCZ-6 +mllqd,50.42598146236761,4.754796834722804,103.08617,LCZ-6 +dzpqd,50.82335883083093,4.461614560564221,86.46416,LCZ-6 +emkjm,50.69795533841648,4.538260826896913,82.54077,LCZ-6 +mivhn,51.036623858344946,4.485755140428765,7.05651,LCZ-3 +ucagv,51.08381160927114,5.586648568708591,78.04715,LCZ-6 +vzfln,50.69275126849083,4.3751286213396705,98.86731,LCZ-6 +ktylk,50.873177867517754,4.21374989535416,42.80717,LCZ-D +vjegd,50.75461451465735,4.984628698728407,47.34406,LCZ-6 +huogy,51.25248648307581,4.461297363877442,6.3314,LCZ-3 +yvrps,51.30421446714454,4.516173933160054,14.57077,LCZ-6 +jjiqj,51.018195344240226,4.610510437115282,16.39773,LCZ-9 +tfxng,51.05382853252084,3.446920153984515,10.94402,LCZ-D +zzorf,50.868101350807244,3.360324598560263,14.59124,LCZ-6 +cwvjf,51.0831502215315,3.784722137957268,6.60798,LCZ-6 +amvdd,50.84864986603625,4.43905700378416,67.10426,LCZ-6 +mrwas,51.10455607560029,4.424872805105542,22.13843,LCZ-6 +xvkbb,50.56432599924982,4.693655431116071,157.67883,LCZ-6 +chrdj,49.602297620273404,5.7782882172425785,321.62494,LCZ-B +dgkpp,50.74066085421334,3.8582014473547024,25.90627,LCZ-6 +jlopj,50.40015368909379,4.852069535818405,206.36194,LCZ-6 +ugpfm,50.340771417595356,3.7429736539602665,101.02544,LCZ-D +ibywy,50.69979466281158,4.095806112469481,60.15304,LCZ-6 +btciy,50.515805454754286,4.022913912625462,91.19173,LCZ-B +eapur,50.79761053090791,4.409937501678035,89.42448,LCZ-6 +qhtuk,50.86238247431518,4.537846982758574,82.99558,LCZ-6 +hanws,50.86705109600086,4.374248143480397,35.66109,LCZ-3 +ndhht,50.20040336162146,4.560454764477266,275.13022,LCZ-6 +vdwog,50.58587930592072,4.053075439079338,92.29885,LCZ-6 +gdkqt,50.90263443882831,5.279559340076417,38.2824,LCZ-6 +ttejh,51.32617244438547,4.854235962033386,30.87236,LCZ-6 +waczw,50.72207036708028,4.917176236236456,89.26893,LCZ-9 +kgvtx,50.70869082187172,4.254566528830598,66.70636,LCZ-B +lairq,50.68189444569502,3.577600823209712,44.64113,LCZ-D +gnnhq,51.204209576269314,3.229290471267762,4.70898,LCZ-3 +rjfes,51.292285559511896,4.581745862732753,20.65306,LCZ-6 +afldk,51.24673748238521,4.611990701657693,10.67219,LCZ-9 +qrdgo,50.51133522889144,4.741770963161461,177.11752,LCZ-D +ydpkz,50.33992212343319,4.536938684027193,187.17197,LCZ-6 +pqwpg,51.094869580626174,3.8485325322409243,7.24715,LCZ-6 +xtwic,49.903224740605324,5.3254264774984374,475.76523,LCZ-D +aqedk,50.802565828940594,5.221863720281717,55.11152,LCZ-6 +cyzib,51.09234940129819,4.483445736917278,3.38472,LCZ-6 +zimnw,51.11163515366774,4.583954104196913,4.97511,LCZ-B +gipbr,50.59264535020089,5.726582074864109,202.01384,LCZ-9 +ngxyy,51.04812364554738,3.7087564027307383,9.89078,LCZ-3 +tslxq,50.72322470141791,5.0839511225858285,103.39689,LCZ-6 +agnla,51.13347635977274,4.553601500833329,6.26147,LCZ-6 +iqcjs,50.8576203447564,4.097397957442097,30.82571,LCZ-6 +btqkg,50.55293591389061,4.009357163336227,84.69572,LCZ-D +pcqoo,51.12211248702261,4.21142164703047,6.44022,LCZ-6 +yauqv,50.561325833892504,5.537466827519056,261.47189,LCZ-6 +ujbdg,51.18882666607739,3.185208231965246,12.7498,LCZ-6 +oxfwf,50.55192160026315,5.668058132969155,207.89622,LCZ-6 +qvftm,50.99120793594088,3.740549455596531,25.67198,LCZ-6 +usgyl,50.43437968235112,5.358960130592249,260.02307,LCZ-D +vmssb,50.429548261349716,4.842436875584981,163.49484,LCZ-B +qtsns,51.146371576652214,3.186546633587277,3.31937,LCZ-B +axthm,50.64763975058396,4.556488799985264,74.11519,LCZ-6 +hydsu,50.558764524070625,5.080679850545705,196.94966,LCZ-D +hwoiz,51.189229398094916,5.083022538624084,26.01948,LCZ-6 +ircwt,50.868206478598275,5.618329072102821,81.77639,LCZ-D +osukl,50.38849859013647,5.115799685878441,287.55801,LCZ-D +uotpl,50.850390498256864,4.4967400594746945,65.75154,LCZ-6 +rmgri,51.07301262990556,3.127979830742147,28.53142,LCZ-6 +bosnz,50.850610340519815,4.347507399545529,21.8222,LCZ-2 +kabxf,50.53013951628898,5.507339974908712,251.60132,LCZ-D +ilfrv,50.636806418440116,4.35646041778222,133.01974,LCZ-D +ptcjz,50.52033990525306,3.94578233150451,93.20866,LCZ-B +vpakq,50.470158010250024,4.865698264234828,85.68573,LCZ-3 +slmkf,51.10002781922421,2.610029944707372,6.15795,LCZ-6 +zzmjk,51.025761613495284,3.540052475708589,8.50415,LCZ-6 +orwfn,50.709828126837444,4.636183112325645,108.65269,LCZ-6 +oywxj,50.69201397062181,5.706498629095747,150.62335,LCZ-6 +rlwep,51.21994100137268,5.114904104249446,24.41383,LCZ-6 +jdnfr,51.13722107839574,5.46561948406692,63.7488,LCZ-6 +njwam,50.84021534720373,3.6051009027895766,14.9212,LCZ-3 +surpp,51.09809443306127,3.5442081419997855,4.0402,LCZ-D +vhqzr,50.38206455045938,5.121505918293506,282.89276,LCZ-D +qpakr,50.309429009219706,4.946542906229443,266.25671,LCZ-9 +tjkaz,49.56770369542834,5.562314812200967,209.80444,LCZ-9 +mygev,51.11630482385058,4.3368873170624385,4.10259,LCZ-6 +mmdla,50.67741319052159,5.092127856879396,138.10942,LCZ-6 +vnkjs,50.91324587808891,3.452964308196122,11.97254,LCZ-6 +mgovg,51.1136511719666,5.228751360816619,45.59562,LCZ-6 +zhbkt,50.81918993158426,4.349755022485852,95.00418,LCZ-3 +uijip,50.15331926315885,4.324116142500339,232.80032,LCZ-6 +wcujw,50.46473023625902,4.2655655408871676,169.01012,LCZ-6 +ybyyp,50.871150171872486,4.4955544486692185,66.69911,LCZ-6 +ddfiz,50.88827060970403,3.315786774883098,18.25669,LCZ-6 +vcxgt,51.102655067695764,3.9196757611793163,4.67194,LCZ-6 +whzzm,50.57415555472912,4.023172242223985,82.60242,LCZ-9 +xdfen,51.1227517297663,2.7596089393388663,3.15444,LCZ-6 +loixs,51.170946963988484,5.1558106332426945,31.33728,LCZ-6 +rnmuy,51.06712073043038,4.593021187423697,17.65856,LCZ-6 +tyqxw,50.818333642662715,3.822881220675905,51.49863,LCZ-D +bpfww,50.64401551399498,5.971373500024388,246.53427,LCZ-B +rzuil,50.730018106477026,4.646080496001988,64.52268,LCZ-D +osbbx,50.9258891786707,4.723239241155249,13.99478,LCZ-6 +qhqsc,49.5260671108691,5.500869565685032,199.47913,LCZ-6 +prwik,51.30787656467017,4.456312685381665,9.85099,LCZ-9 +aqptw,51.218561594542166,3.5970250977170752,2.37354,LCZ-D +lprgh,50.81615815072298,3.1194601123527743,16.91654,LCZ-6 +qabjf,50.4843824877607,4.80430725229294,165.58766,LCZ-D +jkaef,50.768692912378704,2.9981204919389803,23.14105,LCZ-6 +ihekk,50.586523806033036,4.679076360503357,155.20613,LCZ-D +qefhc,51.13122822278925,4.387978718816597,13.08203,LCZ-6 +twytk,51.16460168962679,4.759343952553649,9.9176,LCZ-6 +garnl,50.30118004021001,4.562695509817858,257.35416,LCZ-9 +ilquc,50.86106826972849,2.720979044224227,22.45884,LCZ-6 +jcrgc,50.228926896784166,4.736494440787875,287.07352,LCZ-D +sjbmi,51.20126970697423,4.549454310761128,13.50311,LCZ-6 +gojgk,50.9133773119655,4.242049583901121,52.71007,LCZ-6 +gajdi,50.621421756015714,3.7841753452671547,37.05385,LCZ-6 +vnzhp,50.90168621378639,3.8627823182401317,46.94172,LCZ-B +ozixo,51.100021781748715,4.40871224150365,25.59402,LCZ-6 +puwkm,51.334698761919704,3.2389086644086724,7.16395,LCZ-8 +bykpg,51.053694376221785,5.361041807810155,68.9457,LCZ-6 +aixvg,50.9478601198227,3.1368318808528404,20.54934,LCZ-6 +mvkpa,50.712694135089414,4.526737148282749,108.7984,LCZ-6 +lnlwh,50.25850631591648,4.531548729156399,261.51904,LCZ-9 +dcurs,51.11437036153928,2.656438607009319,4.5328,LCZ-6 +tfhqr,50.82576996196212,4.312186872178625,30.58592,LCZ-3 +vpulx,50.6999067780326,4.492061278864509,97.50909,LCZ-9 +oioup,50.736816248760825,4.4929430444872045,88.5535,LCZ-9 +ifirn,49.68163653360576,5.429867689141539,348.54565,LCZ-6 +inkzo,50.58445637467046,4.05087072763715,90.7946,LCZ-D +rzcbc,50.47656995211474,4.811502290049238,134.3535,LCZ-6 +gcmhr,51.0520573646185,3.7369152511816957,7.69163,LCZ-3 +lsgrf,49.978917269267605,5.273260146180779,419.5596,LCZ-9 +naacv,50.68321286432781,4.407782716773271,116.59145,LCZ-6 +jtlmx,51.054997297427676,4.69746504872722,14.70596,LCZ-6 +ewuif,51.03275555176277,4.490259167160565,8.76105,LCZ-3 +rxyyg,50.434251091982624,4.300772560914206,175.28395,LCZ-6 +omulv,51.05068135383252,4.892061277806861,24.28638,LCZ-6 +dossk,51.06508117904008,3.801621745528901,5.07178,LCZ-6 +tpgrl,50.95331814653104,5.2976254778581575,27.96964,LCZ-6 +bfgwp,51.01534151811059,4.386282671283415,7.46298,LCZ-D +nnzil,50.59337201632702,5.875232714489904,243.56847,LCZ-6 +rdvnf,50.803860694760594,4.333604092373632,40.04389,LCZ-6 +pvmlr,51.04692568592581,3.720576125596474,13.3076,LCZ-3 +ajyri,50.58417735002138,5.515212727840113,153.54599,LCZ-6 +jmmfi,51.034610858501395,3.5518927535575715,8.97531,LCZ-6 +vkcsv,51.24119134711998,4.455188223893058,4.59017,LCZ-6 +ngxxm,50.46023409845362,4.076643375256185,56.17639,LCZ-D +evvwn,51.21115166824771,4.471084690269497,8.62372,LCZ-3 +altvm,50.87110301923165,5.083980933077218,28.394,LCZ-D +cdlmr,51.04078490602385,4.731788232800787,11.8484,LCZ-6 +otwff,50.832733886840785,4.439141654792034,59.77312,LCZ-3 +tdjcv,50.816480089886404,3.808013806948525,63.998,LCZ-6 +umcwk,50.39989270805825,5.599742289192867,288.67078,LCZ-A +wclze,50.89135953992697,4.637911067033692,39.89589,LCZ-D +iazcs,50.844495424990015,4.3673460366291295,84.70045,LCZ-2 +ekhvy,50.348665193950005,4.593563747034778,208.51927,LCZ-B +oweot,50.7325604519307,4.965107592459417,75.94994,LCZ-9 +hzvsx,50.87079640518088,5.514880273729931,55.57755,LCZ-3 +absfi,50.58782934560757,5.609721271147209,131.18149,LCZ-6 +egffq,51.13147412304423,2.6932214751320087,5.27454,LCZ-6 +niedw,50.8373062195308,4.315591605488308,27.85039,LCZ-3 +lqkuu,51.025135132485985,5.304699596140538,36.32184,LCZ-6 +csotm,50.44644447765329,4.879069131079931,147.72331,LCZ-6 +yqjsf,50.71273429406074,5.956173174633845,208.94601,LCZ-6 +viwhd,51.358795975120884,4.455279231675366,24.96592,LCZ-9 +cmupx,51.14278221648208,2.7538536078695937,4.96106,LCZ-6 +rldyv,49.61174164924498,5.653315868244281,276.39056,LCZ-B +lknxc,50.93609547508036,3.808283940399376,42.99139,LCZ-D +baffw,50.8052948309306,4.364785775610683,109.65041,LCZ-6 +couim,50.67810810826944,6.122871144375778,280.26239,LCZ-D +avojz,50.99123623581333,5.049749949967315,32.23035,LCZ-3 +xojxd,51.11112773056602,3.66420743648558,6.21603,LCZ-6 +wbdei,50.3661006230227,5.634853006350696,366.02582,LCZ-D +lecyg,50.62246202403598,5.610578972521347,128.59908,LCZ-6 +brvbr,49.886358354144825,5.396247419326415,437.57272,LCZ-B +mmvtr,51.06807647182035,4.787407551113898,12.306,LCZ-6 +xqjef,51.09728744018346,3.6709214328638136,5.06747,LCZ-6 +bdlwj,50.841436541705285,4.418855823953348,68.18551,LCZ-6 +sutav,50.71014102923417,4.403170250523203,111.03228,LCZ-6 +kvvjm,51.14046031641319,5.393926545751983,59.16398,LCZ-D +ezzuw,51.18643540400828,3.9664046527902954,5.46846,LCZ-6 +soowf,50.744421646508926,5.0883815983242515,77.66685,LCZ-6 +oebav,50.912238648055805,4.705386422126761,19.91829,LCZ-6 +eimjr,50.97260689698744,5.49137500222913,79.22021,LCZ-6 +duqeb,51.00083395792167,4.863721530570767,31.56828,LCZ-6 +sozfz,50.62452326909819,5.026122342696672,138.3259,LCZ-9 +fjgim,51.07159094348308,4.0893499568054406,3.59691,LCZ-B +dovvv,51.22842499935925,2.9040251818863756,9.91908,LCZ-8 +egtyc,50.80890650905334,3.067287499482179,20.79363,LCZ-6 +qpuuq,51.31960925938858,4.865453272132222,29.08913,LCZ-6 +wxbjm,50.681185872824535,4.848430892356872,109.30041,LCZ-D +imvvc,50.788121102226484,3.5051517412947506,13.13056,LCZ-6 +jcecg,50.918729104630536,4.340002854512043,29.09958,LCZ-6 +yxrvu,50.97507574738124,4.903071372286956,20.25755,LCZ-6 +uevdk,50.33165947197095,4.47098560742026,229.38893,LCZ-6 +rjtvh,50.66917750506498,5.4118079666697545,158.40164,LCZ-6 +xohnb,51.30516528233587,4.891596903266013,25.44151,LCZ-6 +memgv,50.440918500641004,4.929949752976351,199.4633,LCZ-6 +qqosd,50.9860628623447,4.138382498513165,9.13755,LCZ-6 +wiodv,50.89767763072424,4.690850276399403,50.62481,LCZ-6 +ewiop,50.828747981587725,4.363726290546926,83.80939,LCZ-3 +fcogf,50.64283783800209,6.039256874087648,276.52399,LCZ-6 +rjdte,50.82445454575197,4.4658515432734305,79.5434,LCZ-6 +swqzi,50.8837081355655,4.696914319626392,22.16441,LCZ-3 +buxwu,51.07088080287612,5.216956689259597,39.95294,LCZ-6 +yjbgm,50.803302129154666,4.594903306809194,45.84612,LCZ-9 +lmxbh,51.06905882966854,4.720232139795744,22.01044,LCZ-6 +ltkrn,50.89970873650176,4.360922441422771,56.01172,LCZ-6 +kpsns,51.244173948653206,2.9405939774993897,4.97169,LCZ-8 +pfpaj,50.84164224550001,2.8698314659644444,22.86108,LCZ-6 +hyudm,50.681694358657126,4.381086449497291,117.8974,LCZ-6 +tjsyc,51.26256954468981,4.492706927988975,7.5801,LCZ-6 +slona,50.70327997077494,5.668203022596819,56.91244,LCZ-6 +ptbtf,50.992667131695924,4.529996814617289,9.14024,LCZ-6 +gngdz,50.93670063385818,3.8259879543855226,39.66151,LCZ-6 +fhitk,50.830338492574406,5.43053307795407,99.01769,LCZ-6 +gmnvm,50.56773430148497,4.686587855597153,148.32977,LCZ-6 +aoxbz,50.33810944379515,4.490863729385174,228.06628,LCZ-B +exxfx,51.21507035226206,3.2649291688884348,5.64469,LCZ-6 +qmxde,50.846852371172346,4.363716464371601,59.50556,LCZ-2 +wahbb,50.55914875179307,4.7068121201874105,161.48819,LCZ-6 +fapls,51.08887773745816,3.9121053599416076,4.47922,LCZ-6 +lqret,50.791487811781515,4.7369182033291,68.99084,LCZ-6 +mmbee,51.14345405189371,3.184121617605971,5.88747,LCZ-6 +bjtgl,50.512236907242745,4.811986760789641,146.87189,LCZ-6 +ooteu,51.11756729652429,4.546156759555247,6.98882,LCZ-6 +nlspb,51.114105326008485,3.6139440401016922,5.61346,LCZ-6 +hrnwy,50.54039160047159,4.381740209197703,149.09944,LCZ-D +aenvq,50.86831617246866,4.792160582128879,98.37916,LCZ-6 +enrbi,50.9489541087446,5.329026836551779,30.94653,LCZ-6 +wpbmx,50.53419943210601,5.8188119338018645,165.66385,LCZ-6 +pevmu,50.58420440502695,4.058573564240442,86.27699,LCZ-6 +tvqve,50.91994278177295,5.4748002603808565,42.57056,LCZ-6 +imses,50.63265035405401,4.201807497903345,133.35007,LCZ-A +posmr,50.73075663153881,3.2077307130630124,38.25015,LCZ-6 +affxb,50.89135990126142,3.23350707124824,38.64151,LCZ-6 +uojhw,50.9090603716383,4.880065739805965,46.49028,LCZ-6 +dcqyi,50.75109231904877,5.296949765176955,90.33136,LCZ-6 +uaxcc,50.95877322343818,5.4342261137792445,58.41204,LCZ-A +nfnqd,50.75326190680643,3.6005377704551984,42.17365,LCZ-6 +grtng,49.693058423394724,5.813394966108659,404.29288,LCZ-6 +nhdsr,50.925197173086126,4.246228834126692,72.93533,LCZ-B +isczr,50.31495395258358,4.445695834914838,212.61418,LCZ-A +hhhvr,51.00713626292557,4.15420209695919,5.57342,LCZ-6 +bnmsg,51.043537475618905,3.659059029631369,10.75466,LCZ-6 +pingc,50.088611112447694,5.105102585286859,244.58722,LCZ-6 +pizbp,50.65647726509031,4.652307147842641,132.34233,LCZ-6 +dlenh,49.97295575056725,4.928918806623673,327.11035,LCZ-A +fsanp,50.86312503481011,4.547546754242953,88.55028,LCZ-6 +fpxdv,50.63474007129487,4.67200103649789,145.10487,LCZ-D +nzrhk,51.012159606923184,4.5632467599978375,9.79121,LCZ-9 +qgvgv,50.80267425607318,4.318554522235171,51.07251,LCZ-6 +yfweb,50.42169175017977,3.8989289145862935,86.77448,LCZ-6 +bweiz,51.03305353466094,3.765630077536618,2.98935,LCZ-B +elaat,51.1967036058423,3.241799281367963,4.14816,LCZ-6 +ojcey,50.64614823836478,4.542743126060447,109.67435,LCZ-6 +kynpn,51.003721596322904,3.610375091405897,19.11703,LCZ-9 +ijtvd,49.60600126423213,5.4754886892422725,240.51567,LCZ-6 +izelt,50.010211256934156,5.709409520957032,507.77591,LCZ-6 +yfpow,50.89142464308475,4.369332802481243,50.2147,LCZ-6 +myndi,51.031990218837684,4.798773576546674,11.39136,LCZ-6 +azrta,50.685407148442266,4.086264553045961,67.81388,LCZ-D +msmcj,50.97208561015758,3.6442302994499167,9.43379,LCZ-6 +daqto,51.00448151651992,5.039013301980166,64.03482,LCZ-A +cbanc,50.82343549830141,4.5136969287181845,77.47128,LCZ-9 +jbiyi,50.52264097257929,3.9882875258605814,101.6262,LCZ-6 +xrxbk,50.50201823123412,3.4129745169833945,20.93174,LCZ-6 +mhroc,50.84081944505941,4.373979733864999,78.03663,LCZ-3 +kuibu,50.88144886649657,4.326266339416388,35.44134,LCZ-6 +mbckm,51.076764578053385,3.482300813546026,19.42413,LCZ-9 +efnng,50.41794751704588,3.755547300565715,47.41045,LCZ-6 +nobfj,50.60708955575924,4.458302435828674,109.43127,LCZ-B +yivsq,50.602427811594964,5.4876608045827275,61.948,LCZ-G +pektc,50.85959700198704,4.519030546882218,61.03268,LCZ-6 +mqcum,50.662544660888734,4.541794168117553,101.70637,LCZ-6 +hltsi,50.23434281666802,5.619743926080553,484.68991,LCZ-B +usgkz,50.857974665201816,3.59855826609267,25.43629,LCZ-6 +jjtmp,50.295897312781825,4.42364367637772,191.13524,LCZ-6 +gcotw,50.47292996921275,6.148922389768713,563.48346,LCZ-9 +rkjkg,51.16969573561171,4.43961079180752,14.64118,LCZ-6 +kkkma,50.894376454085716,4.747187947488891,30.49165,LCZ-6 +zrjiu,50.35103489715414,5.488329431954311,175.37202,LCZ-D +uxmyk,50.77523852533543,4.5473527621882415,97.74664,LCZ-6 +czkew,50.832477513384845,3.2678778599048903,22.25857,LCZ-2 +dzuar,50.677296981981435,4.261641229299311,60.65453,LCZ-6 +xlaea,50.47982869672388,5.654707180972723,216.43071,LCZ-A +ouyyg,50.52615109954401,5.049956310995243,205.58426,LCZ-D +olcdz,50.6421070295745,5.7165403752336905,263.80679,LCZ-B +plham,50.409110064795726,3.77363504712661,61.24575,LCZ-6 +ijvqx,50.750674653727906,4.212514210811018,56.32141,LCZ-6 +aefeu,51.29473167103508,4.437092996861061,3.18117,LCZ-6 +hbtac,50.199414077535906,4.819653298074679,106.11931,LCZ-9 +ecvmu,50.66916061190254,5.7220397374598875,206.78319,LCZ-B +ijtkv,49.64141681110046,5.56064064181646,323.43451,LCZ-B +qhjrv,50.86277272969589,4.47833617004057,52.34267,LCZ-6 +jjzyr,50.82039225345913,4.392514002597809,81.01064,LCZ-3 +fpfcc,50.898216434732724,5.426947838909781,52.15168,LCZ-D +idulk,51.02587480168982,2.9367318767166495,9.452,LCZ-D +gohov,50.588629766373174,5.34789967088274,198.47047,LCZ-6 +rbwkv,50.78712590618989,4.118869137610681,56.33332,LCZ-6 +knnrv,51.26950743857651,4.709913342389329,19.86649,LCZ-6 +pmzsw,50.58428870374871,5.892324639496941,243.95734,LCZ-B +fkiwq,51.08439009400055,3.4454868097672,21.66005,LCZ-6 +rtnjq,50.86442101844857,4.391607286546491,64.14122,LCZ-6 +kabvn,51.16432598870999,5.040461177084473,22.30993,LCZ-9 +qrcbq,49.954963995687066,5.072941966687497,345.56055,LCZ-B +krxhm,50.65573922685854,5.86599384597734,273.87119,LCZ-D +vgine,50.71611880846071,4.396505569015827,109.30807,LCZ-6 +udcwz,50.01938268884425,5.272469840324836,399.95862,LCZ-D +yiamb,51.198128966158784,5.4008032852105075,50.28712,LCZ-6 +ifmfa,50.89903761939902,4.3033104715229875,65.0202,LCZ-6 +qqezs,50.902882702501806,4.818891018508668,72.33176,LCZ-D +egpcu,50.444980370728544,5.663279978115243,234.18236,LCZ-A +vzkhv,51.12214368277987,4.458681613440459,22.07816,LCZ-6 +uqimw,51.31020591023807,3.0756952632753287,7.93253,LCZ-8 +fbrsm,50.82350982929708,3.272140601834356,24.1813,LCZ-2 +igkid,50.5192874035451,3.8650717483306627,72.82469,LCZ-6 +pivhc,50.61806401784043,5.521320397107205,103.17297,LCZ-6 +aanoh,51.02947878404364,4.348149963435487,6.51004,LCZ-6 +sgtmu,51.22780708765216,4.977175208588628,19.12361,LCZ-6 +lnffm,51.18072750037183,2.8200279823535683,0.12584,LCZ-6 +zursf,51.39956078068022,4.7559622826459265,18.53779,LCZ-6 +rcktd,50.67403061015927,4.168438294248836,71.30577,LCZ-9 +vdxqb,51.22976351098583,4.517544550322202,7.43526,LCZ-6 +cqzpa,50.82758583869322,4.317759845052911,40.49695,LCZ-3 +sfcow,50.831258937771786,4.021233843120568,21.80876,LCZ-6 +fclay,50.57304081449989,5.294222149291728,184.40807,LCZ-D +xxkcg,51.07879964305915,3.4959227472853995,9.17931,LCZ-6 +zemjq,51.18266077972476,4.389705638878882,13.70968,LCZ-6 +gjrhd,50.92876785134757,5.456385413303693,40.86924,LCZ-6 +boidy,50.99948151597738,4.8467940730517665,17.24441,LCZ-6 +bukwj,50.4983946548828,3.6601251665007557,42.3894,LCZ-6 +dsxlw,50.40963012474434,4.1800521590556725,127.11958,LCZ-6 +vcvlt,50.46047950714269,4.633017698839979,178.18159,LCZ-6 +bwryw,50.947416486431095,5.403013336462131,45.40257,LCZ-9 +slqxb,50.62954806709413,4.373691602188082,139.7731,LCZ-6 +fpfkv,51.001357782519996,3.8676478406348473,8.5259,LCZ-6 +cberc,51.049004322467226,3.7206726112339723,28.72812,LCZ-2 +hkpzz,51.01770532356814,4.58810031566974,14.08532,LCZ-9 +lgsbh,50.581080221996665,5.902296375606048,243.68889,LCZ-6 +smupa,50.54083102178909,5.7351322038820625,301.21976,LCZ-9 +rpoco,51.00092089658684,3.682828394930645,7.96987,LCZ-9 +hwknz,50.375123991176444,4.788590492385911,257.90726,LCZ-9 +eulne,51.11605348413793,3.471221979895732,7.29466,LCZ-D +elrxi,50.6373428787231,5.611067443693439,128.75606,LCZ-6 +frfnj,50.8618777213548,5.50013026151798,69.93597,LCZ-6 +xejbv,50.878761404236315,3.9489780393471308,54.83872,LCZ-D +wvsbd,50.98694054998301,5.187419151585988,54.79458,LCZ-6 +uadfz,50.88471759385756,4.717221444948083,34.20445,LCZ-6 +cjdgy,51.0767200094821,3.0907332962549847,19.42628,LCZ-6 +kjctc,51.29310626751505,4.418856999129528,2.98,LCZ-3 +birjp,50.612353396937195,3.3899138000216515,13.757,LCZ-3 +ddvak,50.93227380278136,4.4000746376467506,35.86504,LCZ-6 +qysfk,50.6792073779627,4.194572683977281,39.16306,LCZ-D +hdsdb,50.39599390341987,4.695185060457416,192.6514,LCZ-6 +irnwr,50.68904431863144,4.401933879065476,119.76058,LCZ-6 +cqjgw,51.17090549831708,4.4372936957485996,13.98109,LCZ-6 +itonl,51.00299206918634,5.077703749388553,22.04461,LCZ-6 +mrcku,50.90935203809166,4.190256215147282,76.87397,LCZ-D +jscqi,50.69871273958814,4.505291602251857,103.50056,LCZ-B +gzyjf,50.9895563807475,4.620496837642714,14.1253,LCZ-B +bonle,50.88460770578115,4.720980228629796,30.20407,LCZ-3 +ypnvk,51.25930874353986,4.63485376793973,12.71876,LCZ-6 +vkkbv,51.10235966766576,4.001274064998636,5.71048,LCZ-3 +nszbn,50.697216735126545,4.239712341494672,83.30216,LCZ-6 +ilnut,50.73318156923017,3.3086572647517314,28.55083,LCZ-6 +cgxwo,50.86677688310366,4.762578380391226,91.63121,LCZ-6 +tyfxe,50.53287991359172,4.294636740828489,123.19985,LCZ-A +cabrl,50.31754525438496,4.276865174616382,179.23828,LCZ-D +fvzid,50.541512355387354,4.60632543386039,148.28378,LCZ-6 +uqeme,51.13709241798566,4.440964331877822,19.37299,LCZ-6 +pfnhz,49.851178952600826,5.7462300370589805,367.53741,LCZ-B +zrzpr,50.922244041777816,4.081385544949593,19.10018,LCZ-6 +hizek,50.932399536048855,4.40395635013506,37.35173,LCZ-6 +pcklu,50.64551828917571,4.3681120068841714,145.0201,LCZ-6 +tkqlp,50.74590298309534,4.222324608445883,42.43841,LCZ-6 +tbuob,51.123923556937974,4.206184387785658,17.20896,LCZ-6 +eruwm,50.44036349854075,3.994047529382729,46.402,LCZ-D +jykyr,50.82319380108315,4.415730190126935,79.58763,LCZ-3 +cjowl,50.233374412796536,4.811688688366756,184.66805,LCZ-A +ewmap,50.51624110811736,4.082864227495792,116.32443,LCZ-D +vnxue,50.62347882261955,5.012500206578763,129.18521,LCZ-9 +zlltd,50.977628803478794,2.995766662617221,17.58434,LCZ-D +gkvyg,51.02249037716126,3.8588562940222815,9.36468,LCZ-6 +aamxa,51.04336989592857,4.474144532149862,2.99731,LCZ-6 +hrbjr,49.57831228901494,5.831193111451525,288.39334,LCZ-B +rwujf,50.46421074899237,4.427419795893458,167.15317,LCZ-6 +wtmov,50.62975430762727,3.3870093395823813,22.47714,LCZ-6 +tcoea,50.91967487836919,5.435782764329747,36.41164,LCZ-6 +jbpzc,50.749182681239894,4.366039630652235,123.24945,LCZ-9 +deuoq,50.67412686396326,4.379008594356045,107.11685,LCZ-6 +fawaq,50.423975721014585,3.9629164098119225,39.154,LCZ-6 +ivbxo,50.82225936315079,3.2930244881121515,23.03188,LCZ-6 +acdbf,49.84381978998701,5.423682631882904,431.65585,LCZ-9 +sitmq,51.22788661196135,4.416178053112609,11.19235,LCZ-2 +iutoa,51.34967944829446,4.970565269512644,29.9694,LCZ-6 +aqaiw,50.535453742673,4.642140772317057,170.5522,LCZ-D +aqxvi,51.18764145705821,4.513234110105291,10.10429,LCZ-6 +igpjk,50.949554049578225,3.6235596974854682,7.50646,LCZ-6 +jkhzy,50.439949555492504,4.927782902752489,190.43205,LCZ-D +deeok,50.821663150451215,4.401055970225222,87.70511,LCZ-3 +oyafr,50.95288421524137,5.09473284818262,26.0356,LCZ-6 +ulafo,50.47861473003701,5.841784379467834,363.66046,LCZ-B +sbpxb,50.86799045837109,3.7191522560127845,26.97857,LCZ-D +ylsez,51.058372972605056,3.2845661623793365,15.49883,LCZ-6 +vydlk,50.540984738239416,5.250891987944308,117.2401,LCZ-D +zfups,50.86477372672432,4.286069404950049,50.02703,LCZ-6 +nobdo,50.20526855196293,5.353463268077234,300.12268,LCZ-B +xkfjk,50.83229209181118,4.380888018291651,76.19839,LCZ-3 +bxydu,51.35233551459873,4.855111086539042,25.83433,LCZ-6 +zgibh,51.1885471406134,4.431127576629423,9.59762,LCZ-3 +xlamr,50.66926235013589,5.174824430103295,123.07246,LCZ-6 +xqhjd,51.182253545089395,3.8475559232652756,6.73825,LCZ-D +gvpaj,50.80321245416933,3.287708924632404,48.11974,LCZ-9 +wfsri,51.02766190631972,5.716118253734348,42.41176,LCZ-A +jdfzg,50.78588921316518,3.1408002019769303,16.73423,LCZ-6 +jrqbk,50.46857415401796,4.359954884756785,174.8512,LCZ-6 +rdusz,50.946084860390606,4.5638564104326385,13.899,LCZ-6 +sjcsm,50.64374778715768,5.737661144458652,241.57869,LCZ-D +rivlm,50.69036753513899,4.04809601558288,60.54463,LCZ-6 +fyliz,50.19569011506145,5.321583105830547,282.02728,LCZ-6 +iepxe,50.85256734863252,4.5759003521897705,55.50576,LCZ-D +yvipp,51.21935306894266,4.511577775367733,4.35477,LCZ-8 +bauqg,50.895659355571475,4.587262553843781,32.84671,LCZ-6 +nohzj,50.79199158266157,4.284672260465273,24.14661,LCZ-6 +vlrwz,50.866840794188946,4.686263878365898,35.96476,LCZ-6 +ayelq,50.89304017898474,4.638232534160135,41.19783,LCZ-6 +erwny,50.50943350180494,4.238912021025937,122.97845,LCZ-6 +dycvr,50.26556018713338,4.62457559521934,281.43777,LCZ-A +mkvqm,50.635444165644714,4.201584272161544,146.81438,LCZ-9 +jrzgg,50.96732698428661,5.119778179702772,23.31169,LCZ-6 +bnzna,51.038591754050984,3.1257744924261197,20.62345,LCZ-6 +riwox,50.58712223114797,5.307078962652634,193.61499,LCZ-6 +wixzf,50.833657685210646,4.407042837992063,90.08343,LCZ-6 +vhksm,50.687421804062005,5.341769894019062,134.25635,LCZ-6 +xolqv,50.86481909729641,4.355623593638676,21.22039,LCZ-2 +bluzv,50.76216524718051,4.733925735703767,81.31927,LCZ-9 +xutnt,50.84727825783611,4.419406310944102,72.21908,LCZ-6 +edxnu,50.711498340117146,4.609694463017633,97.66772,LCZ-6 +kzwum,51.185269328576865,2.8229074515090145,3.76848,LCZ-8 +tbbxs,49.72242171470182,5.617834926862429,375.73318,LCZ-D +pztzb,50.83088750500686,4.712966105943311,65.36797,LCZ-6 +bythg,50.81440211571805,4.923906018259162,47.36951,LCZ-8 +adjpg,50.475769626208816,4.71813221758126,189.92595,LCZ-D +ggadx,50.84748156498243,4.261918023008045,64.8522,LCZ-6 +lddzh,51.022064939091294,5.543181966237108,83.53461,LCZ-6 +jbamy,50.92878878031452,4.760449392255557,25.51367,LCZ-6 +eempb,50.82871462733391,4.643720951319796,27.39005,LCZ-B +yhfca,50.5063786824154,4.826014034183949,154.26125,LCZ-D +sahje,50.55339566877863,5.658966398714343,286.69904,LCZ-9 +ojlnq,50.02945519894713,4.913194117309508,254.6884,LCZ-B +iivag,49.99940931003015,5.2545039547901675,436.77411,LCZ-D +uumip,50.31045642785203,5.068060626667321,281.23788,LCZ-A +zyvvb,50.62315107625572,4.721899008646305,153.60736,LCZ-9 +ochhv,50.837166337746076,5.5736306778537745,115.37247,LCZ-6 +izhow,50.41621836592937,3.6869093329655143,29.16833,LCZ-6 +oeayb,50.032871150556396,4.351119415371301,258.74005,LCZ-B +yvufu,51.168875661255505,2.7776261437530234,11.56366,LCZ-8 +mhtpr,50.87041606639379,4.346375940081005,23.20041,LCZ-2 +iphtg,50.53303294280736,4.669633182029886,154.77115,LCZ-9 +nipxd,50.9437313218078,4.299761092126537,37.81329,LCZ-B +ebips,51.06534688072154,5.0762213502580416,37.73307,LCZ-6 +wzsua,50.1678864887404,5.3342537259459935,278.93405,LCZ-D +xwape,50.57353594407253,4.07576827929162,89.3141,LCZ-6 +bvtbr,50.60851380400952,4.718105936439074,155.97531,LCZ-D +jgbxq,50.70747727621679,4.540158453212439,106.35591,LCZ-6 +hvzmo,50.5623443658817,5.610524183498132,219.08408,LCZ-A +nzsqm,50.33180171055973,4.428606469518175,218.56744,LCZ-D +gwepl,50.60630816542954,3.325682861024548,41.6027,LCZ-B +qufkq,49.85281953377843,5.466744730271572,418.12476,LCZ-B +anggz,50.85637971622243,5.172972915407015,31.0326,LCZ-6 +ewbon,50.96096665935277,3.617950198221785,8.37651,LCZ-6 +cfkob,50.15758864724947,5.117235334754955,148.70001,LCZ-6 +hmoji,50.563198324005555,5.311115926774288,175.77147,LCZ-6 +iycon,50.83421160002812,4.082951149082747,48.02231,LCZ-6 +omnmv,51.00790055593171,5.6078300543726405,88.36294,LCZ-6 +figck,51.130459675681486,2.9890987299173823,2.99322,LCZ-D +jkzcn,51.082179686432376,5.118505250694226,26.46068,LCZ-6 +xqenc,50.49723482056406,3.9297676488601336,48.638,LCZ-6 +ljlsl,51.06801660667842,3.726434872930072,8.65158,LCZ-3 +thgbj,51.278121503622856,4.62731153699291,22.66917,LCZ-9 +lphhp,50.86527284806863,4.094294249197278,27.87664,LCZ-6 +pkufz,51.02810179475628,3.775379830055886,10.06945,LCZ-6 +xjtlc,50.17860529487977,5.942046731218425,459.78842,LCZ-B +huvkp,49.694950685210955,5.769071153688614,370.19434,LCZ-6 +utgsm,50.918768779445074,3.1728132109902316,18.41474,LCZ-8 +mkptt,50.77526237702526,5.322700386807093,61.80988,LCZ-9 +bumvy,50.6528522622453,3.3531129699843447,15.63751,LCZ-B +mrvfc,50.629729181929456,5.8109526558659805,266.88602,LCZ-B +wsdym,50.39106687248587,4.5468563655882495,132.14186,LCZ-6 +tjcuq,50.47180182541106,4.206358454619496,158.27733,LCZ-6 +hcwsk,50.68851504132409,4.64755575236202,75.98907,LCZ-6 +ssqvd,50.65503131271721,4.561563686395109,84.77596,LCZ-6 +rlstq,50.61056608844256,4.165802275005017,112.50275,LCZ-6 +ihcow,50.490552033659505,5.673855094386854,213.8634,LCZ-9 +nejgp,50.738008182478985,5.702948722188692,109.61885,LCZ-6 +airck,50.302338881959066,5.592793007979228,348.83377,LCZ-B +vpjma,50.48695230475382,4.198579551290613,136.15094,LCZ-6 +etmfv,51.174196060305725,4.679506603237577,7.37724,LCZ-6 +mylzu,51.14516737868994,2.721963254055342,7.22094,LCZ-6 +chukf,51.09306356657641,5.81986946472285,26.18382,LCZ-6 +xgnay,50.84935450895091,4.384763642780773,62.63052,LCZ-3 +ttnlt,51.12436147115264,4.518889996470666,6.73234,LCZ-6 +agsak,49.68765448387204,5.814543474200905,366.39108,LCZ-6 +wvfcy,50.795066487098644,4.931130475253162,41.61068,LCZ-3 +mpqqh,50.70195413493874,4.963010441222587,85.78307,LCZ-D +qmhie,50.83863982649793,3.240293208088186,13.04206,LCZ-6 +bmard,50.97423433921047,4.512892594805458,9.08093,LCZ-6 +xzuvr,50.75724161283024,4.37002939364182,108.97343,LCZ-9 +senss,50.83750744242465,5.108830760880659,29.71568,LCZ-6 +mtmtz,50.86555117229164,4.505103027120895,70.19894,LCZ-6 +xucsk,50.94035007920761,4.084851157437004,19.63508,LCZ-6 +qkdvi,51.16784979194137,4.4611768790081765,19.24477,LCZ-6 +sthxy,50.87613307237276,4.688706576669792,20.5957,LCZ-3 +gfjyc,50.25358416807772,4.985123426942764,267.44778,LCZ-9 +sbcbz,50.52519101531505,5.171607176813193,122.43295,LCZ-D +pjown,50.67197411504227,5.657613311192038,58.13284,LCZ-6 +snnmi,50.47558404318669,4.406551657222208,156.63629,LCZ-6 +olfuf,50.884829080087336,4.401792995962501,51.0323,LCZ-6 +mmmav,50.547602638148504,4.688837162847844,170.4826,LCZ-6 +ebnqs,50.62854395885362,3.7851944605853207,38.36758,LCZ-6 +tcdxj,51.03321730106988,4.687289293018606,8.92878,LCZ-D +fygom,50.86574332772897,4.5375341009835175,81.62293,LCZ-6 +xtimb,50.790582060679355,4.568488839279035,52.07782,LCZ-G +thtnh,50.452271529839415,5.2706624104275415,202.04861,LCZ-D +hhbsu,51.04320826356446,4.650787416583402,13.05643,LCZ-6 +rzksx,50.799656411461775,4.931237029326155,47.66612,LCZ-6 +kuhfj,50.91387114570739,5.681387053837304,47.97147,LCZ-6 +suhnn,51.25448190281336,4.170023239246299,1.2719,LCZ-6 +npuoc,50.6685655118178,3.564252320057885,33.77158,LCZ-D +uoebx,50.47355375266061,4.817572718846068,155.81433,LCZ-6 +veqdx,49.690368280907954,5.818025909927802,418.74734,LCZ-6 +lgurt,51.31877062502316,5.007466856467407,21.53966,LCZ-9 +rpbjd,51.02553623645565,3.841323456798285,5.3711,LCZ-6 +tttbl,51.21178400868942,4.331117643056696,4.32016,LCZ-6 +jasbc,50.634422296288314,5.58782249745353,61.84326,LCZ-3 +sojsk,50.861254582349474,5.471733135586569,93.9231,LCZ-6 +txknh,50.934190727020194,4.3973183977665755,20.14049,LCZ-D +bpiyf,50.99491721611697,4.531584306962141,8.21649,LCZ-6 +hdtpi,50.83161842826479,4.357125702785292,79.72304,LCZ-3 +jhpcv,50.832136960984286,4.462572293792447,70.78338,LCZ-6 +oteti,50.86528589860493,3.927343403823141,79.32079,LCZ-6 +mubjj,50.82900703627924,4.410571386805415,80.69635,LCZ-3 +imwxx,51.02459044142322,3.946501468612401,6.05546,LCZ-6 +zjgdj,49.80216487782228,5.485307020775813,420.83463,LCZ-D +zathq,50.939811880673986,4.066691774059712,15.88758,LCZ-6 +vcaqu,51.02722745466561,4.7478897386001355,11.44555,LCZ-6 +xjnqm,50.84984143899996,4.499468515132873,66.27947,LCZ-6 +hdjru,50.448946235130414,5.409415658504319,284.02808,LCZ-9 +njjrn,49.6860287334019,5.600088210228884,343.00867,LCZ-9 +yneik,51.20540088042986,4.450539587940366,3.8944,LCZ-3 +elitz,50.74176767202492,4.241622111449735,39.58762,LCZ-3 +cyltn,51.10631360108796,2.6436460075127943,9.68312,LCZ-6 +gbqln,51.099120499020614,3.822365805783797,6.41067,LCZ-6 +hdwjj,50.2629157519608,5.0248381521575,246.81998,LCZ-B +vnzrz,50.88148101796408,4.730645887978935,25.58456,LCZ-6 +qfpcr,50.56393497598018,5.406665816660308,204.31854,LCZ-B +psgqt,50.84842452951299,4.276104875425941,80.53438,LCZ-6 +ojvyw,50.44243350337003,3.940532547705671,50.06137,LCZ-6 +vrveo,50.47310613109878,4.849231216979344,87.78047,LCZ-3 +lagzn,50.431273804325734,4.896221319717278,173.21846,LCZ-6 +poxap,51.05812061993621,3.71648198383773,9.30349,LCZ-3 +nddqp,50.536269661869255,3.3813575052399956,34.07351,LCZ-6 +grmek,50.53749348846026,4.151661195721285,115.06969,LCZ-6 +haiyp,50.83790259262616,4.399707452345967,86.22827,LCZ-6 +enlzo,50.748515469260795,4.222115226576867,59.91216,LCZ-6 +gtxqy,50.727957583958016,4.328986942160978,67.17547,LCZ-6 +ytwyx,50.4344966764565,4.8743153357777,83.9425,LCZ-6 +wkkqj,49.91734626426298,4.928221852718758,377.84549,LCZ-9 +huirf,50.21352134120976,5.023323139981533,259.35001,LCZ-D +caqha,50.663399455156394,4.501790367953684,121.96466,LCZ-9 +vsdbi,50.996801183731684,5.390501726709623,54.47742,LCZ-6 +qmabq,50.456774641384484,4.848594492459788,186.56912,LCZ-6 +oybnp,50.85811725915853,2.864430002139623,22.22641,LCZ-6 +fseuw,50.75438757199682,4.21612061340101,69.60834,LCZ-B +ijuia,50.824496965995074,4.372821948329014,79.14722,LCZ-3 +lqppy,50.924134884092844,3.2549597572064752,15.83255,LCZ-6 +fousn,49.87255064797743,5.487928021809974,423.51645,LCZ-B +fayfs,50.8919482898526,3.839218264983806,61.23499,LCZ-6 +aospm,50.81216777460495,5.161646365979917,45.95494,LCZ-8 +ebisl,50.85572263011096,4.427830472713454,82.35922,LCZ-6 +bdbvb,50.63844561456916,4.527079243752938,110.48746,LCZ-9 +ekmyo,50.66206628878886,4.4616348274414985,102.98154,LCZ-A +znfkn,51.197250483838744,2.816329216107498,12.93538,LCZ-E +vcnlo,50.81082763607707,3.3247378629136835,21.72807,LCZ-6 +hykbs,50.71171805072101,4.518345718448031,105.67584,LCZ-9 +suwdl,51.05207378835942,4.565965288611125,10.66048,LCZ-6 +rbrvi,50.904980791405436,5.307958555414054,35.64466,LCZ-6 +wuliz,51.22215316725514,3.1831141633485394,0.61364,LCZ-6 +kxqgq,50.86920983997071,5.190836820413318,52.20152,LCZ-6 +dhlvh,50.28521040677949,4.459533182542075,190.32495,LCZ-D +oaehd,50.69709237144807,4.517917984192395,111.80579,LCZ-9 +ydhxk,50.963696118602314,3.1228088328167734,20.34722,LCZ-8 +kvgfc,51.216489600919765,2.9182458339519086,6.33278,LCZ-5 +tgtld,51.36671944685112,4.860446023687003,23.66809,LCZ-6 +nhema,50.66939435284306,4.562946580461435,95.92915,LCZ-6 +hzugw,50.9412142691003,3.1001740277710197,22.46161,LCZ-6 +zsxpf,51.26039121247731,5.145056040344156,27.58952,LCZ-6 +rwwzr,51.21782640138313,5.337505485824594,48.04448,LCZ-6 +pxxmx,50.764669165264344,4.533482796102807,57.89178,LCZ-6 +lzfdb,50.70640778468047,4.399460941306239,120.08077,LCZ-6 +fqove,50.88306721921247,4.193304529028571,27.06016,LCZ-6 +msrqn,50.61911372082565,5.077255360792997,122.52683,LCZ-D +ncfwl,49.853322457531355,5.38056804917959,395.53052,LCZ-B +nueom,50.84096538539022,4.304695381769189,48.13524,LCZ-6 +fwseu,50.601341573311956,4.341074914106265,119.06708,LCZ-6 +eyahx,50.89769477875207,4.925967955801905,79.65315,LCZ-D +buddg,51.1856500800429,3.250369141729568,4.59601,LCZ-6 +gbodf,50.82034796237662,4.371325802293627,105.60702,LCZ-6 +ymnmx,50.93852981737992,5.321838316840594,37.10635,LCZ-3 +gavgp,50.21785332063792,4.836833256287219,119.24801,LCZ-A +mmryk,50.68932885610211,4.572579842753472,62.30354,LCZ-6 +ygvli,50.45333490260573,4.757141108338693,124.42241,LCZ-D +mhlfc,50.86456547823041,4.7004802927738645,41.88926,LCZ-3 +puaxw,51.16114375611626,4.389666467021365,9.8465,LCZ-6 +aoxwl,49.69877332457013,5.5513641798140645,339.71619,LCZ-9 +xutkh,50.58102658954491,5.619125853198579,184.99002,LCZ-6 +wuhqf,50.532055519819295,4.7463951789202925,172.95763,LCZ-6 +mtjgc,50.45935559716841,5.658940285373398,226.56577,LCZ-B +aoena,50.729201448291775,4.75017554789349,87.64305,LCZ-9 +xhgbt,50.90482927839543,4.280770592502202,55.6156,LCZ-6 +tpfbc,50.71576915048295,4.398151302963979,116.41716,LCZ-6 +upqnn,50.45755347792376,3.9727386733161576,47.28101,LCZ-6 +vprzk,50.70638199340404,4.4785356483644305,115.52792,LCZ-9 +lgwfj,51.11143591479903,2.6746322219196093,4.6673,LCZ-6 +ztjll,50.35448479920853,3.7434910693544388,103.46102,LCZ-D +ydrup,50.17422115281636,4.700819471794821,228.1499,LCZ-D +fnaxh,50.77916858871489,4.1072460113003615,95.42399,LCZ-B +kkeix,51.277978874659155,4.613191601878846,20.21806,LCZ-9 +shkjz,50.94010091486105,5.332010799733604,28.95892,LCZ-6 +tbelp,50.800150929512085,4.361994198671011,97.40157,LCZ-6 +cucno,50.65284626492882,6.110688581896366,360.26556,LCZ-B +oiiiw,50.51988879541451,3.722579384362315,58.86846,LCZ-B +ooruz,50.98798666999668,2.9512191403048256,22.83864,LCZ-6 +zxddy,50.81173814862831,4.3584783883459375,100.55085,LCZ-3 +eyyce,50.89535458052059,4.271067179492169,71.28369,LCZ-6 +awkag,50.991418861219465,4.670208310518236,15.60047,LCZ-9 +vlphk,50.88582904575434,4.418350073812947,23.9474,LCZ-6 +tysxw,50.891329756124975,4.075969692365967,19.8103,LCZ-6 +cryot,51.04528998609927,5.222588415488159,32.68137,LCZ-6 +qhawg,50.331895529679485,4.275247096513082,121.27497,LCZ-6 +sowkh,51.08426571745878,4.714003252671153,24.15394,LCZ-6 +rhtjf,50.87923523628792,3.7762654413142136,48.94316,LCZ-6 +kiouk,50.888817159210674,4.329850012975981,37.24348,LCZ-6 +eugme,50.312062924875605,4.297839738596666,165.72473,LCZ-B +siazh,49.72679309453998,5.84623217851872,391.50186,LCZ-D +bwsck,50.59080741438576,4.642284573750158,144.95068,LCZ-D +ylvbn,50.71853263022452,4.391315630967914,110.01097,LCZ-6 +puvgy,50.689262760002286,4.6942419491885365,91.1255,LCZ-6 +iptxo,50.43935896232823,5.26415612783553,205.51514,LCZ-B +rebcl,51.15699595491061,5.380360949053026,61.06423,LCZ-6 +mvddt,50.07865644360288,5.140624001827917,216.81807,LCZ-D +czxhv,50.77154200503662,4.755768884850688,74.22356,LCZ-6 +rsusb,51.15946068249129,5.514303405898565,57.39489,LCZ-6 +vmmoa,51.301606395052055,4.879632113789562,24.62162,LCZ-6 +tdxed,50.71042531388648,4.4257997852454265,102.48565,LCZ-9 +olwkd,50.8390767790827,5.190504582320261,34.76927,LCZ-D +rrwrt,50.80473015783449,4.336709680334393,70.97263,LCZ-6 +evcrr,50.92936678469029,5.35741310750143,42.65236,LCZ-6 +tonik,50.68212530854923,5.658612606815233,65.07717,LCZ-6 +ufeqc,50.814812734577885,4.839143096792253,81.45306,LCZ-D +eiuio,50.94293967494139,5.342045095484234,29.96327,LCZ-8 +srdeg,50.80482432114296,5.249860813836933,63.1609,LCZ-6 +qksva,50.027131357186846,5.547733639827253,389.27472,LCZ-B +opuhe,50.8899931813513,5.528277766352052,54.9717,LCZ-6 +ngajg,51.01060219959152,3.096784055359337,16.30586,LCZ-6 +neiie,50.50532062110206,4.803924870174813,150.31697,LCZ-6 +csvpg,50.941933752556025,4.051307807541246,17.95971,LCZ-6 +lnzjd,50.68454842442601,5.545399122266895,170.14926,LCZ-6 +bcmxy,51.1612116577156,4.3700278813662745,21.77474,LCZ-A +pliil,50.685453981968365,4.498321647728029,117.17429,LCZ-9 +uifet,50.650384264417255,4.772082837980233,146.41,LCZ-D +zimio,50.940284543612904,4.339941039588825,45.76082,LCZ-6 +wazdu,51.181408982245564,2.9961756054412545,3.49744,LCZ-6 +seemx,50.36426253960713,5.739417907545704,371.07999,LCZ-A +oujuv,50.63506167020738,3.9197115609695428,84.57432,LCZ-B +vlevl,51.2340079112304,4.634264736743699,14.6692,LCZ-9 +hyydx,50.71535257920944,5.6020364000970115,141.28,LCZ-D +mcgmq,50.67834642779868,5.372542603737358,139.67105,LCZ-9 +lehxk,50.72945737815986,4.563843101010702,97.49316,LCZ-9 +zhewt,51.25765778112617,5.539552927443244,34.98929,LCZ-6 +apucr,50.42321705885981,4.846470024354829,184.60693,LCZ-B +tyfqu,51.32864125790641,4.5256585113593175,22.31055,LCZ-9 +munku,50.697933559712816,4.50394178206519,99.30591,LCZ-9 +ahckk,51.127136840380615,5.3558685587873125,62.92172,LCZ-A +ogigb,50.683643561608015,4.99066388831743,77.1095,LCZ-9 +vbloq,50.860142064964855,5.473533602294031,94.34814,LCZ-6 +yhrng,51.15445795644652,2.7123835545405064,12.61216,LCZ-8 +tqgsw,51.09838050527627,3.4804498353290394,9.08094,LCZ-6 +czijh,50.48785424185248,4.850750828402367,183.7672,LCZ-6 +qboly,50.73506974227647,3.335796876340436,15.70294,LCZ-D +bkmyz,51.11828802978015,4.969669510577262,18.9959,LCZ-6 +uzycz,51.02894310693326,3.744813449753037,12.59462,LCZ-3 +typzs,50.67415658321296,4.3867344284152585,120.50155,LCZ-6 +skzah,50.72076123894051,5.730734068849624,125.94837,LCZ-B +wkigy,51.17207874526666,3.3075864389045972,4.2,LCZ-D +smegc,50.67133169843247,4.55293849592241,105.74638,LCZ-6 +wrbyi,50.90228144387663,4.105965816867377,35.51545,LCZ-B +gnxzr,50.751758634881085,3.2563001245076877,39.3168,LCZ-D +dduvr,50.846459317857956,4.475880561730722,81.67526,LCZ-6 +jcbjs,50.72105304010727,4.357555453422393,123.49699,LCZ-6 +clllc,50.635863817715645,4.554511260911692,101.74193,LCZ-6 +gemfa,50.64320262293235,4.67784521052201,138.20448,LCZ-B +jwpqp,50.975525582193676,4.866724694241946,16.88493,LCZ-6 +cfgrw,50.71129745533591,3.9790997006399857,63.7785,LCZ-D +hbmke,50.45631128106862,4.335452122075703,162.03,LCZ-6 +gksfj,50.54626714459049,3.4211164453038667,21.87916,LCZ-6 +hoebd,50.74513420493622,3.30963395987827,17.33749,LCZ-6 +rfjub,50.7250680134664,4.402013544552373,125.65424,LCZ-6 +koeqb,50.56769292005272,4.6083565232914925,143.79738,LCZ-6 +yngxs,51.30285985187609,3.114947331027316,4.06914,LCZ-8 +fjzue,51.23065490722323,5.289278905651707,49.77229,LCZ-6 +vspvd,51.12614151094762,4.0955603275527315,23.49242,LCZ-6 +ujcjm,51.18255624956072,5.113865336995275,27.382,LCZ-6 +tonpt,50.343219831659425,4.705817639264347,232.77628,LCZ-9 +blyvp,50.91991778135583,5.261834474774832,33.30882,LCZ-6 +tyxln,50.521535194731996,4.14313463429604,110.9147,LCZ-6 +uxehk,51.06169808561286,3.078182872323195,19.27417,LCZ-6 +waqjp,51.14226108845828,4.12427691524924,23.34301,LCZ-6 +idkqc,50.457075136946806,6.073344428898649,520.4917,LCZ-9 +eqdih,50.834052970364546,3.4315927252356384,31.08093,LCZ-6 +rfgsw,50.50783766061621,3.939714217717447,92.02193,LCZ-6 +wiiim,50.93126958662586,3.1913562664790884,13.11319,LCZ-6 +ktzlf,50.45631725237313,4.642151261708284,119.13584,LCZ-D +jsoil,50.95029507136895,3.1630067519341716,19.65315,LCZ-D +xtmhr,50.776514386588154,4.517311706468254,99.16652,LCZ-D +izpbo,50.92055548062219,4.241359111388323,40.36174,LCZ-6 +lbnib,50.70522512118224,5.518665284644096,151.68964,LCZ-6 +nwxfe,51.23938807926053,4.643505674949851,13.56311,LCZ-6 +qxdaw,51.35772728895529,4.31926645241907,2.68087,LCZ-6 +wszal,50.77630961918101,3.451491669662786,16.68804,LCZ-6 +cjxld,50.4905459932512,4.420006747130985,152.33417,LCZ-6 +qfjfe,51.35256930137916,3.2885197166478624,8.18671,LCZ-8 +bmmaq,50.562113450396886,5.535153900733999,237.57487,LCZ-6 +vmorj,51.20229641022065,3.2595566086621157,5.46191,LCZ-6 +umoeb,51.01105051051959,5.657560288488016,91.13673,LCZ-6 +yihnp,50.5709503951485,4.544764126663591,143.3167,LCZ-9 +etxgx,51.01770003906457,4.479363055743411,9.22681,LCZ-3 +ggccy,49.55795329510869,5.522764153412954,219.19949,LCZ-B +cwwfm,50.84872135847476,4.347639257552139,28.77179,LCZ-2 +anoqh,50.72421177271125,5.714748689867367,96.7839,LCZ-B +usoub,49.675782968357765,5.836916559661423,384.65213,LCZ-6 +youov,50.86689249433092,4.330266438106853,30.28142,LCZ-3 +yrdjn,51.26890029869122,4.7866057752874305,18.62579,LCZ-6 +vivko,51.35631226840047,4.322976761007163,4.26966,LCZ-6 +bnlcd,50.94416989224825,4.707347469114646,13.30926,LCZ-6 +omkip,50.762084704420346,4.2740163478307815,59.90012,LCZ-6 +ggbsi,50.289598587529916,5.098913614455333,244.7049,LCZ-6 +odkgy,50.899701841796755,5.15456521947709,25.83925,LCZ-D +ttvch,49.76603922535873,5.618111587115791,450.63962,LCZ-B +katmf,50.751256282685674,4.487302686115641,110.37871,LCZ-6 +eljme,50.52686280186251,4.062939022559677,101.32018,LCZ-D +txujh,51.1337556996924,4.271713259612488,4.92926,LCZ-6 +hejlp,50.78734399505932,4.3375904861516705,53.90347,LCZ-6 +icotl,51.26883699422781,4.635089458133181,16.25292,LCZ-6 +zxcqo,50.94679022132179,5.28947537917565,34.36626,LCZ-6 +kywef,49.61207267457458,5.850790313266898,360.70776,LCZ-9 +yzdbg,51.235347064306865,4.59543205797965,9.01729,LCZ-6 +udkyy,51.122725328143005,5.2662816401653725,48.47143,LCZ-6 +suwkl,50.349919276387695,5.4043284259077184,216.36961,LCZ-B +jjnmn,51.247995565243585,3.352744837190781,1.6078,LCZ-6 +ydawy,50.471491617724645,4.913059650194608,150.97836,LCZ-6 +suzwr,51.22884026027902,2.9755243006657404,1.1076,LCZ-B +bczya,50.68918974260778,3.2916193168974526,16.33758,LCZ-D +nqhlk,50.377032530446705,4.805742329102957,259.64923,LCZ-D +pkfju,50.64835236234333,4.414965448065014,134.77817,LCZ-9 +ugkmp,50.845152132888536,4.426222955126136,89.07938,LCZ-5 +vghai,51.13012959769399,4.202343130818959,7.83364,LCZ-6 +ailea,50.99471428104494,4.23830779729391,28.15745,LCZ-6 +uceti,50.79815964085271,4.927053743772154,63.33326,LCZ-D +hqsri,50.730202821913906,4.242379587014126,33.1366,LCZ-6 +tmddl,51.114972061700186,4.2813142942937095,2.72011,LCZ-9 +hjwps,50.553553800299184,4.4917243751843605,129.63422,LCZ-6 +rpzzk,50.344615422852186,3.7357530533101935,107.95886,LCZ-B +ztdrl,50.83539723544419,4.45081606966946,83.50629,LCZ-6 +scaga,51.04725998416201,4.504777779935615,3.02202,LCZ-6 +idmtu,50.60298074166939,4.121820339026869,97.85699,LCZ-D +bvwha,50.71234663740746,4.686641186218151,115.17765,LCZ-B +nzywb,49.998982458987555,5.76015069571635,519.50079,LCZ-D +mdlje,51.1535403983585,4.469587325796057,20.22104,LCZ-6 +nvyog,50.93638086268579,4.649842411631786,14.45377,LCZ-6 +godgt,50.479674042366774,5.662553571126103,182.03304,LCZ-9 +nozfo,50.886737345107434,4.178450927224953,22.30525,LCZ-6 +mpcxw,50.46593403112288,4.793493869551824,179.22754,LCZ-6 +voanh,50.90826809313988,3.7268742352066675,48.54172,LCZ-D +eblzn,50.63663404780536,3.7547606003788605,36.18718,LCZ-6 +paldw,50.58924130900291,5.228500679030194,160.78714,LCZ-6 +hjdhw,50.40587014141213,4.451209709455662,108.20565,LCZ-6 +bxqmu,50.44928547997911,4.217231123750205,97.40976,LCZ-6 +jxtot,51.1581393563178,3.191518923698193,4.39287,LCZ-6 +onevy,50.6327178092683,5.499879504939487,142.27769,LCZ-6 +pvwhr,50.91573245180091,3.2547083942728325,15.15022,LCZ-6 +urlcb,51.12008547297956,5.370391765283173,63.77661,LCZ-6 +jjunn,50.768111195031324,4.491274576111846,100.78725,LCZ-6 +qcgws,50.435778073623794,4.238622134394965,161.04716,LCZ-6 +sawvj,50.74171789750309,4.701193171356543,60.1312,LCZ-6 +muhxn,51.12720281049186,4.510348305336141,7.79838,LCZ-D +bqbbp,50.8901919020752,2.779602136939602,18.08815,LCZ-D +dmrog,51.09798533246889,3.362748964728828,19.18276,LCZ-6 +edyjd,51.2143045724462,4.429139919952625,9.41162,LCZ-2 +vxmgo,50.459356393485834,5.80090639307772,385.63794,LCZ-A +qnkmp,49.727062628753345,5.652918311210962,401.10403,LCZ-9 +ntxll,51.04842620167165,4.0342204290372905,3.19844,LCZ-6 +okgnp,50.921628090466825,4.3012913872860095,46.26457,LCZ-D +sqmdm,50.93125278198921,5.346923054866272,42.57541,LCZ-3 +hidew,51.00554248815189,5.285818162426451,35.00646,LCZ-6 +fiqag,50.83354316641725,4.429185707605971,83.51566,LCZ-6 +utiki,50.6478020551827,5.567147588611351,74.58608,LCZ-2 +nusza,51.14422316955164,4.347473190825368,17.96861,LCZ-6 +siynm,50.57493078079793,4.769147637424007,163.46158,LCZ-6 +hdnij,50.86225647926406,3.14948590561924,20.42249,LCZ-D +zckjt,50.48915027337184,4.855631855456987,119.16914,LCZ-6 +kuixu,51.09229709556651,4.918282931308857,17.30691,LCZ-6 +nkbcz,50.311568807214805,4.9953295948614,220.42709,LCZ-D +etasj,49.67778042876687,5.811158745838306,378.97638,LCZ-6 +fiqlb,50.32218110048582,4.919666689448204,252.25446,LCZ-6 +kmtdi,50.66732113369538,4.282416609758836,115.96435,LCZ-6 +gmhti,50.86105669303728,4.2557165441606335,58.46275,LCZ-6 +vvrhb,50.84324728906675,3.6058337200336927,9.25786,LCZ-6 +ftlss,50.57763193527034,3.4974540137960646,44.74433,LCZ-D +eelow,51.12392905521956,4.864665102347773,16.28216,LCZ-6 +kviki,50.492536436666825,4.261932705165582,130.3634,LCZ-6 +oojlw,51.25098388161017,4.580364388027594,12.92131,LCZ-9 +skatm,50.380254153004586,5.4532490341253474,271.90326,LCZ-D +ajnim,50.827443502157,4.36795353713576,69.56387,LCZ-3 +lefdf,51.11995586719092,5.562241381157871,71.03667,LCZ-6 +lcjcl,50.90883299864873,3.5215658017489417,45.24889,LCZ-6 +bvuop,49.72779870286643,5.556053993277472,371.64786,LCZ-D +ifmpw,50.67982382929411,3.688516724826677,81.41531,LCZ-D +wemte,50.838979496878956,4.444987044091062,75.78384,LCZ-6 +euszj,50.8840890790237,5.633209224147629,65.58784,LCZ-6 +moeok,50.64492283076843,3.368608822072914,19.67311,LCZ-6 +zhggr,50.9130166874565,5.685997958759881,50.00794,LCZ-6 +oowxa,51.113092966715115,5.6938981483770545,36.34048,LCZ-6 +rxgmp,51.021310243093595,3.7677489198233176,11.37547,LCZ-6 +midxl,50.79721094350037,4.35165995271951,90.93186,LCZ-6 +oybav,50.83584407141097,4.397506487407729,79.96648,LCZ-3 +xdrvr,50.81935847939844,4.807782503408567,75.72244,LCZ-D +pjbor,50.58005028528329,4.996472654968264,170.0663,LCZ-6 +fwjwp,50.80781965555999,4.150390438360747,64.99955,LCZ-6 +mtunb,50.42967341612015,4.804150943686761,173.38791,LCZ-B +zpeek,50.937384266194265,4.066110497480478,12.83613,LCZ-6 +doxvv,51.186151433724596,3.173803387072844,13.39602,LCZ-6 +jqjlo,50.86020891029977,3.2080671642314935,20.29186,LCZ-D +hreal,51.16830639764954,4.532176807872934,11.4383,LCZ-6 +vzqzr,50.715069785511965,4.565093717723948,113.39334,LCZ-6 +tgvys,50.85004880831964,3.815602327173447,86.53522,LCZ-6 +xdjdp,50.82118024518458,4.352593517290252,104.72343,LCZ-6 +lxsct,50.84291182437672,4.4972785215646,67.59845,LCZ-6 +cnele,51.22853708623984,4.405540659581606,12.43206,LCZ-2 +ohlue,51.17910823510245,4.4384092127483905,14.61578,LCZ-6 +ndgjw,50.667622271557335,4.615736329592453,145.01112,LCZ-6 +krlhb,49.703489964962145,5.721436363407451,355.34952,LCZ-9 +prkhc,50.56068538244771,3.4456979294235066,13.8335,LCZ-8 +bsoch,51.39628904379656,4.646699051513406,15.22694,LCZ-6 +mnutd,51.140819640236984,4.899213015655964,23.68703,LCZ-6 +gwsof,50.70145940903738,6.109397108689542,284.57614,LCZ-A +raduc,50.80925110885612,3.2477690640913894,22.40299,LCZ-6 +ihqhj,51.20181535943106,3.2298623432344464,6.85214,LCZ-6 +ziegq,50.70052604544351,5.704041198118581,120.12329,LCZ-D +sydey,50.94054485151523,3.6232803272163556,7.81752,LCZ-D +bviya,51.17158114970121,4.435975854129244,16.8794,LCZ-6 +oturx,50.86078200911666,4.366457523452747,27.44436,LCZ-3 +kcypb,50.35964971093384,4.365223674176057,206.795,LCZ-6 +uzssg,50.820643480826014,3.2783170312434518,21.89411,LCZ-6 +yyuul,50.519953105625696,4.19645408517789,128.99084,LCZ-B +izmbe,50.560952333234944,5.159233642940924,161.26202,LCZ-B +aocop,50.60560560422781,4.327771083876757,101.92915,LCZ-3 +fgidt,51.05196480425123,5.209257458847587,31.38639,LCZ-6 +fnkhv,50.78848857603064,4.867574182319285,98.05164,LCZ-D +mpkaf,50.73455817002014,4.150665244198116,47.33467,LCZ-D +vmbby,50.543008607471386,3.3664264638973966,38.25458,LCZ-D +zzjjo,50.41259847481772,3.9595375301299267,56.51289,LCZ-6 +feory,50.69943822465641,4.363626982619729,94.87551,LCZ-6 +feedq,50.805234890776205,4.356758585341527,105.08183,LCZ-6 +knhnb,51.14407385779672,4.449449615198,12.41669,LCZ-6 +eyduf,50.62496813324418,3.285974132689807,26.77348,LCZ-D +vwlfl,50.71406487523531,4.542943177331582,103.68486,LCZ-6 +hdurq,50.9363987187186,4.132768146856274,34.89272,LCZ-6 +ntxfu,50.86409901189132,5.2881125080565905,44.95465,LCZ-6 +yhusx,50.805156287873075,5.219829272154359,58.23321,LCZ-6 +pvvyt,51.26491667000353,4.175644795352102,0.99324,LCZ-6 +ovpfc,50.678996225386676,3.290359221304273,21.84888,LCZ-6 +ywciw,50.468726529433276,4.234341264646088,170.73163,LCZ-6 +gxbff,51.252971523374974,4.5631103806304125,12.88373,LCZ-9 +wotrg,50.784615267372494,3.175181673875181,19.01842,LCZ-D +jjbgc,51.20370256733746,4.418596271192997,7.5119,LCZ-2 +lroxv,50.63300669848642,5.835433054237656,257.33463,LCZ-9 +phknc,49.576437483591555,5.536370678322185,234.03366,LCZ-6 +cdnaj,50.86622814371706,4.356387844466347,25.33102,LCZ-2 +wzwgi,50.3283772250608,4.538099057028131,220.76033,LCZ-9 +fjxxh,50.43690403816351,5.030294622751227,187.34166,LCZ-9 +jfztn,51.31191030074023,4.890744896456665,25.05784,LCZ-6 +fhkgr,51.02071652099456,3.9996198749431167,3.17696,LCZ-6 +plhex,49.68412684155347,5.805185570218206,390.61838,LCZ-6 +dvlrq,50.92742262069249,2.7211423445573084,6.24274,LCZ-D +wbtbk,50.85067671338763,4.420769616146898,52.68065,LCZ-6 +vrwuf,50.81418354732927,4.331545121613799,83.29975,LCZ-6 +muizz,51.33514495609066,4.368340114262131,3.31247,LCZ-6 +myefr,50.9136883934024,5.67318402322508,44.77881,LCZ-6 +agksj,50.94162022168374,4.3680302283422865,25.50528,LCZ-6 +kaenu,50.59360557925736,5.57959435296506,199.64531,LCZ-6 +ecrqe,50.356641888082926,5.55173486598028,254.04439,LCZ-6 +mhzyc,50.57684030980733,5.90861619865869,251.24335,LCZ-B +ncpir,51.141100526509504,4.57569968673253,6.29351,LCZ-6 +dlrkg,50.707687405572315,5.400309141224431,115.73725,LCZ-6 +drptu,50.68133140696472,4.2669835684758715,62.37893,LCZ-6 +otfal,50.525732652121796,3.66520882915585,50.78156,LCZ-6 +eoekz,50.99665809658849,4.44454818961839,8.99053,LCZ-6 +iewxh,50.700474350628376,4.565552979326825,103.15289,LCZ-6 +rovus,50.8369406153012,4.384479059007756,57.85904,LCZ-3 +awoiq,50.71658525488029,4.436699667011845,109.14922,LCZ-B +oyxtb,51.13716479495971,4.857133775946483,16.14134,LCZ-6 +hdipu,50.69935909580026,4.501393489419034,107.50021,LCZ-9 +lgrse,49.56041854819432,5.518904658911694,227.1205,LCZ-B +pjaxw,51.22379254794349,4.420407534472327,10.16417,LCZ-2 +sprdm,51.01768578172778,3.6690394259387675,7.16892,LCZ-9 +xcupn,50.64274227877259,3.3609349777305844,32.92084,LCZ-6 +irwnf,50.58484759448568,4.321869390241474,126.76472,LCZ-6 +uljpe,50.622919974799835,5.588556291953509,109.8471,LCZ-6 +sfykd,50.56303278905811,4.184783103204125,96.60426,LCZ-6 +duowy,50.6913175620696,5.751243802153473,199.71286,LCZ-6 +puory,50.628140134828385,4.187551955466088,147.33205,LCZ-A +diosn,49.994887622732506,5.035606951245657,356.34335,LCZ-D +tdgzw,50.12270149499199,5.8533719408451175,442.76138,LCZ-D +ynrfg,50.900913347016115,3.1638763829546566,22.60144,LCZ-D +aaxdm,50.55801146108827,4.797049679515814,173.20956,LCZ-D +wtppq,50.79381770653853,5.6371133187872156,89.07599,LCZ-6 +ewnwj,51.35472516851738,4.413367701793908,12.44453,LCZ-6 +tihya,51.29045759522058,3.1815629050235086,0.47062,LCZ-D +ktwoi,50.03113462340192,4.8673470694010765,352.31436,LCZ-B +yxsum,50.93294211003165,4.902006075412553,33.04832,LCZ-6 +dhzrm,51.09980702547651,3.070854459194395,39.71619,LCZ-6 +knnuw,50.62201863797642,4.1357879393014185,88.46352,LCZ-D +hldic,50.822293065075264,3.3277527008785572,22.80252,LCZ-6 +wuwkq,51.35465957730686,4.410152920239083,11.91079,LCZ-6 +rpsng,50.860630984311115,4.707713447946545,38.67831,LCZ-6 +eywtn,50.929199367564664,3.1707154954814065,16.18842,LCZ-6 +ajcje,50.66498679504889,6.0711351021954485,308.0239,LCZ-D +vznyq,50.855626145275636,4.699797986710145,28.90413,LCZ-3 +sahfz,50.77474294476246,4.61865050128557,50.76258,LCZ-9 +mkcso,50.55628211474968,4.6843476028804645,147.76212,LCZ-6 +brkya,49.71028963203698,5.5759470893554175,356.05814,LCZ-6 +rykxx,50.367251061688236,3.6873013080648844,38.35681,LCZ-6 +gekyl,51.12349055344286,4.320558795508786,4.345,LCZ-6 +nzohx,49.5694158436631,5.674820765878383,264.48755,LCZ-D +gvhpo,50.85582541368615,2.620493942990445,19.68919,LCZ-D +lhjcd,51.01826779342152,4.5063734069566,13.80747,LCZ-6 +satqr,50.62912332960558,4.617031700922705,89.74178,LCZ-6 +xvfxl,51.27649710022639,4.455120120702498,9.27552,LCZ-9 +bdgqj,51.15415318798289,3.225764927809945,10.7374,LCZ-6 +omxva,51.45834576445865,4.4517744261425,14.5791,LCZ-6 +mqfut,50.146521871263516,5.234503765425283,254.4317,LCZ-D +dcxvb,50.757337581487135,4.584593472599941,90.84636,LCZ-D +qrhzx,50.56154986144236,4.257946514852816,104.76063,LCZ-6 +hupjr,50.83744214570912,4.426718591116068,54.87161,LCZ-3 +ezueh,50.70135207759787,4.534945575866372,94.04642,LCZ-6 +lrhcz,51.002577107370534,4.8659384672460915,16.65161,LCZ-6 +ihjkb,50.90469113918465,4.724631050752055,18.28337,LCZ-6 +uwivr,51.17212377140454,4.3867701985598995,16.64,LCZ-3 +occzb,50.90771071250935,4.31564815111989,45.99911,LCZ-6 +snsax,50.61772581618398,4.36691964596389,130.21999,LCZ-6 +dxcpz,51.16169120685274,4.21417525271967,17.28155,LCZ-6 +rqjio,51.260619935713876,4.151774715017957,0.8952,LCZ-D +askyt,50.34040904452921,4.418196638247245,205.08253,LCZ-A +wflho,50.450536805292494,5.5370377941797715,144.55586,LCZ-B +plyef,50.53692196032981,5.7854723244102715,244.5778,LCZ-B +pemrr,50.42247512370806,3.98896067094277,42.29316,LCZ-6 +faffs,50.54039324082001,4.937079127094567,184.7202,LCZ-D +itfpr,49.67447357880568,5.837643343284383,364.18491,LCZ-6 +zvkqh,50.729341035590615,3.2024456441248828,36.38911,LCZ-6 +sgvxq,51.018344491483745,5.31243946625967,46.36834,LCZ-6 +faocu,50.47769301922089,4.238157891697032,172.22697,LCZ-6 +vpowf,51.00991105872542,5.137386976751945,30.3255,LCZ-6 +xcrfc,51.00249236061621,4.19356328215879,13.51544,LCZ-B +cfqvq,50.8938415597158,4.645393669917187,31.45356,LCZ-6 +bmlzk,50.88047573104046,4.192680447233672,26.00869,LCZ-D +wejvd,51.11564196210448,2.9422904729191566,4.17515,LCZ-D +fayqm,50.86020217503862,4.319400553197293,32.80231,LCZ-2 +skpko,51.237046214772455,5.322484948466631,49.04487,LCZ-6 +kfcch,50.618454510114326,5.989853761988902,294.35928,LCZ-D +ctbbf,50.85345906844985,4.375717954805908,45.23091,LCZ-3 +lorhd,49.56604700575644,5.815606168264031,279.32092,LCZ-6 +twiwo,50.99142539148237,4.205079719613278,23.17902,LCZ-A +faqsu,50.89602935098274,4.376012288880012,67.36861,LCZ-6 +cjzto,51.20618182722212,5.038353789320075,26.43523,LCZ-9 +mlvto,51.00309460296238,3.7196933785140134,8.0437,LCZ-6 +yaekc,50.836664471372465,4.131883462118383,94.5102,LCZ-6 +xbhcf,50.902108124208006,4.368463427123644,43.0564,LCZ-6 +akkes,50.87572346063627,4.522205616927826,67.93285,LCZ-6 +byhfa,50.90841413785374,4.098632072790031,55.9749,LCZ-6 +nkmni,50.505474943689585,4.5770941839744355,139.9509,LCZ-6 +itgyg,51.010339793520515,4.107025520176372,2.80937,LCZ-6 +ztqes,51.21414136951485,4.3887262796404345,9.25866,LCZ-2 +watkf,50.61758551405797,5.088139146103448,129.09908,LCZ-9 +xztdt,50.71006215745367,4.492571330822504,77.52948,LCZ-9 +umvrf,50.934732850656744,5.322998869734643,30.37639,LCZ-8 +wxcou,50.58498821441636,5.545617815320718,222.72696,LCZ-A +ashin,50.72391680903297,4.499827916062763,64.28524,LCZ-6 +jurcj,50.62796486061304,5.630039370581462,151.07448,LCZ-6 +bifgb,50.7471884365634,4.388338247394196,92.59618,LCZ-G +bxzxj,50.55396375961683,5.601702409338429,256.02457,LCZ-9 +qsijd,50.16357406862133,4.166516111774686,233.72157,LCZ-B +dlmva,51.06144347389317,4.94713047642678,15.53572,LCZ-D +dsctl,50.588947633260055,4.477798669153948,115.18621,LCZ-9 +etslv,50.7058224218656,4.383871463986532,123.32926,LCZ-6 +bvsej,50.91979051819293,4.758511595375178,21.78049,LCZ-6 +jcexm,50.78761579349614,4.130277527904656,51.3097,LCZ-D +osxgd,51.16747761538396,4.079399045209967,6.98909,LCZ-6 +agnpz,50.14071794543156,4.210851311292751,212.89496,LCZ-B +spbdk,50.510248883548954,4.00783199704522,82.56129,LCZ-6 +kditc,51.25008197985983,4.43528687570622,1.57607,LCZ-6 +zmycy,50.13444626193456,4.569105856605623,231.33972,LCZ-B +npiig,50.74586817759663,5.968024254710002,219.24245,LCZ-6 +ityrj,50.68169344461884,4.034423508234782,59.31595,LCZ-6 +nafeu,50.4364781169478,4.476659267561073,141.02579,LCZ-6 +upeoz,49.60830441652482,5.84278398535524,361.49475,LCZ-D +srvoy,50.645006489042856,3.64270529299651,53.48566,LCZ-D +csbbp,51.24806947605144,3.7913540743767298,0.34541,LCZ-D +llmzo,51.0987142074818,4.496648696111569,5.11594,LCZ-6 +dzypc,50.42095402830589,4.2625524191189035,168.19049,LCZ-6 +srhwb,49.99021450970055,5.259780927561336,399.108,LCZ-6 +juxsm,50.56904752744042,4.94949925294317,153.19688,LCZ-D +tffsn,51.0334997359258,4.631701121973992,6.30397,LCZ-D +mtazk,50.981099162414054,5.677849589761531,49.02631,LCZ-A +wylqu,50.71381564904464,4.5203775821541035,104.54981,LCZ-9 +zrjps,50.65230287773423,4.527656036870785,112.67371,LCZ-B +iolhq,50.81534344926897,5.1871330540860106,62.71464,LCZ-6 +nyfvu,50.91694351303482,4.596218465851295,23.66353,LCZ-9 +ogciy,51.06958075066222,4.140868326125721,2.47437,LCZ-6 +ytghi,51.2285429525168,3.2309245692191833,5.34769,LCZ-6 +pmgra,50.59581599661219,4.338845451716854,115.42361,LCZ-6 +mzcbq,51.06729230902134,4.48678820525763,4.86483,LCZ-6 +urpsh,49.55255011750633,5.758812968251584,289.9418,LCZ-B +wwqbv,51.261301258759715,4.419208058195407,4.83583,LCZ-8 +aicgm,51.00140896344215,5.050249522548536,24.43334,LCZ-9 +fclst,51.08063287221933,2.5978596542792607,2.97692,LCZ-6 +kuyfk,51.207209277884,4.583153759864802,9.69584,LCZ-6 +drprw,50.96699972436185,5.508903799954573,79.71456,LCZ-6 +dmyek,50.852053052768845,4.379965583841976,52.6529,LCZ-3 +bbsso,50.53910746404109,4.874053934407603,185.99742,LCZ-6 +kqict,50.92994183791929,4.401451888845298,35.40604,LCZ-6 +lxlbn,50.942700040288884,4.023007313824774,17.10703,LCZ-3 +iosix,49.83009645123715,5.727918310407934,365.802,LCZ-6 +ipxxo,50.928341610925706,4.638495392377747,16.46892,LCZ-D +yjgsn,50.49151008560629,4.256719251250888,148.45155,LCZ-6 +zckgn,50.511873427426124,3.382268058637471,43.2028,LCZ-6 +svmod,51.08709615674429,3.7835666880302665,6.5034,LCZ-6 +mrvws,50.734687581692064,3.609710061083775,39.85781,LCZ-6 +ycetp,50.672279279380724,5.623196540420523,110.98874,LCZ-6 +itqxe,50.82991634158905,4.5520946982523975,69.47877,LCZ-B +onrit,50.827570957123356,4.22281880933277,51.9168,LCZ-6 +uybky,49.69473561728117,5.81111616291093,389.9176,LCZ-D +xvchz,50.78205610040261,3.1739394252049373,21.21248,LCZ-6 +ftngc,50.709735868092444,4.640683191285905,91.31613,LCZ-6 +xpogx,50.954401752995516,4.101256409103043,30.15489,LCZ-6 +snbvw,49.719055661176334,5.793791169337114,401.51468,LCZ-A +yqaeo,50.42715043006257,4.764719858885237,113.08459,LCZ-6 +zsuwi,50.89602346547365,4.348589846759172,73.05804,LCZ-6 +dawjw,50.77974375374937,4.514050884327591,100.3207,LCZ-6 +kprum,50.7100078204926,4.161150605139121,66.82586,LCZ-6 +mbkwe,50.90715298475571,5.299634261448444,46.54901,LCZ-6 +eckvq,51.069054011070335,3.111018706480268,20.20112,LCZ-6 +qmpyf,50.660025996857904,5.538242100327124,184.4528,LCZ-6 +pewwv,50.401833118225625,4.166754958389218,105.54492,LCZ-6 +afoxd,50.8643729480559,4.682981110857601,47.70034,LCZ-6 +axpwc,49.68691434788317,5.663763671413501,358.77347,LCZ-D +jrpzs,50.90672681388777,4.311170236428247,59.06559,LCZ-6 +hydid,50.71776296836275,5.317039933147207,106.32609,LCZ-6 +pwjyy,50.4474138171936,4.970792020745238,181.86928,LCZ-D +ziknz,50.50477786495689,3.9867720686071877,86.38068,LCZ-6 +rbuel,51.254175776843475,4.5143603827931305,9.47608,LCZ-6 +frqwa,50.73846412396399,3.952007253490422,31.79496,LCZ-D +qyswp,51.24043376070708,4.461396123168679,6.16641,LCZ-3 +tfepm,50.77311431745485,4.509809777352754,102.51837,LCZ-A +avlgu,50.47943187246074,4.010587373923342,47.70668,LCZ-6 +ajqjo,51.140051779464194,5.580024114497705,65.05893,LCZ-6 +gkvpv,50.427653756193266,4.392546123537645,122.81619,LCZ-6 +rhefl,51.07527509170284,2.584299849838523,1.7708,LCZ-D +imfxx,49.99977552914827,5.661270426763108,532.2746,LCZ-B +oziex,50.576552273631926,4.163484820883652,100.93473,LCZ-6 +aswnt,51.23673842360861,4.968510223063868,21.77269,LCZ-6 +saluq,51.20557553346536,2.924741139715644,2.97481,LCZ-6 +fysgr,50.68965891910664,4.582952711014289,108.11674,LCZ-9 +updjo,50.87672052087654,4.750242787740472,46.4093,LCZ-6 +hveid,50.6329676923833,5.612143381759789,82.17915,LCZ-6 +wlrhg,50.21960389515214,5.646298253032542,545.27545,LCZ-D +jebvr,50.81038441838641,3.0207034742338306,42.82564,LCZ-D +lbyhc,51.02121641110644,5.573458031475553,80.71705,LCZ-6 +bzhuq,50.67555620463263,4.79297198263875,125.86671,LCZ-D +wxsma,50.779712953395446,3.8798728165133407,26.46205,LCZ-3 +bbujg,51.20450171381434,4.4682480958892175,10.37663,LCZ-6 +yrsng,51.18491472854531,3.4864158730437382,18.88568,LCZ-D +atizn,50.24163207356387,4.646688358822035,285.15036,LCZ-D +otsgx,50.905857945458216,4.5183524202754715,49.51623,LCZ-D +aphrx,50.98872831952778,3.821542072313647,13.20048,LCZ-D +hedtt,50.9959750248076,5.058711853401947,46.31184,LCZ-B +qxpjb,51.33166137362342,4.354154189206479,0.31464,LCZ-D +wpxfv,50.48816033104033,6.186050460761336,562.95703,LCZ-D +wyyuk,50.57263507079641,4.687661648125471,157.60634,LCZ-D +tchil,50.78718627221204,4.3535518668522855,101.74461,LCZ-9 +jffab,50.9058394529952,3.1169885792336203,22.69974,LCZ-D +tkmxb,49.63375593353458,6.239699513949271,368.45218,LCZ-D +pdzmt,51.17000555616689,5.472572256632181,55.14767,LCZ-D +kgeth,50.6361900010587,5.465777048278558,180.12891,LCZ-D +wcndf,50.0996785214378,4.603550908702557,228.5403,LCZ-D +deurn,51.21621907146401,5.024736351106976,20.28696,LCZ-B +ewquq,50.18509985272558,5.249950245650867,292.37289,LCZ-D +pivjc,50.90965346960742,5.445414053438121,39.46157,LCZ-D +gsrif,49.630106239136786,5.58445743849937,322.39615,LCZ-D +nbqkx,50.47578284035692,5.9027051444473635,474.72284,LCZ-B +vlarv,50.944600195210406,3.6708480502770713,33.34453,LCZ-D +fkuhg,50.578934901827466,3.839707677321288,58.92179,LCZ-D +pkgef,51.35575560553433,3.208894736504023,0.0,LCZ-G +ibvex,51.0773535590629,4.5339891907794,4.79458,LCZ-D +ewdek,50.51266591569233,6.075672391123477,671.18475,LCZ-D +giawv,51.196969143248516,2.884603621333793,-0.11889,LCZ-D +cvjcr,50.03046831199815,5.39382527323465,554.34021,LCZ-D +mjfbr,50.44948691794571,4.434685413122815,182.74496,LCZ-6 +xnoor,51.19917844422501,4.454479101733967,5.27876,LCZ-8 +gszdy,50.75405422766921,4.755503186013429,117.9337,LCZ-D +rbapl,51.441214021662454,3.590605895241672,0.0,LCZ-G +ivfiu,51.22894303655465,3.8676659222532015,0.67564,LCZ-D +jxyrp,51.18797016266573,5.760719160109377,29.91892,LCZ-D +rbvmf,51.50579980083568,6.190712711270682,17.36626,LCZ-G +qqjzd,51.44069897748707,4.345353946000226,16.91967,LCZ-B +udvfs,51.56388348493605,4.941501998139239,13.23153,LCZ-D +oyyxc,51.442402838314344,5.367190903869832,19.30608,LCZ-D +utiaa,51.65489121879166,5.711505654007299,20.35987,LCZ-D +vnncy,50.8999456474722,5.769887849419205,112.38621,LCZ-D +lfcxb,51.384320672087185,3.195687019672858,0.0,LCZ-G +xzeha,51.33502973777261,3.212500637226341,3.09784,LCZ-8 +hynef,51.3589182956297,3.1622119261185233,0.0,LCZ-G +jveps,51.0260866230507,3.7275928784002335,21.1274,LCZ-6 +vykgg,51.056025500091735,3.731471016719741,10.87716,LCZ-2 +gbjrc,51.05892319996133,3.724649649961795,12.01894,LCZ-2 +nebbu,51.07807202142071,3.7003409116989756,9.43759,LCZ-6 +khmrz,51.11871178683183,3.7587445777341055,5.31252,LCZ-8 +dfrov,50.96782563570011,4.840047300405632,57.06332,LCZ-6 +qyobp,50.61293205235597,5.616532214513949,66.03291,LCZ-6 +quxol,51.208422278279244,4.423922169102026,6.65101,LCZ-2 +svtme,51.21364523619268,4.356743054750232,4.91877,LCZ-B +qivsq,51.16900280048404,4.418178084055492,15.1706,LCZ-6 +oefhm,51.230430745580364,4.432209587195075,6.14511,LCZ-6 +fccgx,51.20982231976427,4.238467338123195,6.2171,LCZ-B +lkuaj,51.08543404001527,4.3847365342655085,16.89747,LCZ-6 +rvqza,51.235937225818276,5.161737776205985,25.97937,LCZ-G +pyjtt,51.06713895185951,3.778134397746215,8.67028,LCZ-6 +anamm,51.12219873711124,3.7322232021455513,4.95787,LCZ-6 +gmqhx,51.05170065198585,3.7254799403561183,11.42533,LCZ-3 +qpekh,51.044697514199754,3.7275133526943773,12.87739,LCZ-3 +mdhkt,51.0155093675312,2.5735778256856485,-1.03394,LCZ-D +vonhh,50.618431984491835,5.522429515896589,67.5443,LCZ-6 +pbukx,50.618075442892255,5.542848619864278,170.39581,LCZ-6 +jhjai,50.65925650945244,5.628808155606468,59.77528,LCZ-8 +lcwke,51.246461764355615,3.3600596854059934,-0.81771,LCZ-D +fynii,50.84517819683196,4.326498446930748,22.20301,LCZ-5 +bjyym,50.93835682382869,3.159433010184449,12.75729,LCZ-6 +jcsyv,50.036437896145266,5.583819962224933,506.51553,LCZ-D +hcmvx,51.15398248871543,3.811578338132232,3.44483,LCZ-B +hvusw,50.94186567531769,4.42825148601566,10.85299,LCZ-6 +yfnlz,50.721424767957394,5.109771325562637,122.59566,LCZ-D +qydnj,51.19029223192,3.817943388813024,6.63113,LCZ-6 +vonqn,50.81887737514851,3.3180491923252333,21.61602,LCZ-6 +yaeeq,51.2787160540578,3.731663795022959,0.01788,LCZ-D +gkhtx,51.15667353765738,4.854954024239522,14.81781,LCZ-6 +zecyn,51.205584645072086,5.4454959614560785,41.73306,LCZ-D +rhtoj,51.028849851310866,2.9740948742191797,-0.54387,LCZ-D +jnfno,51.24634504130562,4.269112911948335,-0.02903,LCZ-D +mxsvy,50.743558855656524,5.134843471710989,85.81363,LCZ-B +osofy,51.21411613632462,4.541824216854036,6.256,LCZ-6 +djglc,51.06582315435886,2.883379476472186,4.19348,LCZ-6 +fgfdb,50.72056269133625,5.091306626856505,114.61673,LCZ-D +ddcfe,51.119780783140385,3.333373302697261,16.78126,LCZ-A +xyfpu,51.23527487858242,4.247633522494445,3.01809,LCZ-D +pfzyv,51.1753623809159,4.482504840951694,14.52128,LCZ-B +uxxmz,51.05361592819363,2.5701785801287915,-0.79559,LCZ-D +lecbe,51.05431678029243,3.8281644846951406,8.39438,LCZ-6 +fgsnp,51.089158429364225,3.6493530270755867,2.034,LCZ-9 +hkzei,50.98626633510184,5.550605909903331,81.20567,LCZ-A +qjvhs,50.73023574940489,5.325871773374317,109.39569,LCZ-D +qbsin,51.07884294426121,4.715066498362978,19.27864,LCZ-6 +ldgiy,50.889114960518164,4.271830845781435,65.21661,LCZ-6 +fjlbs,50.77919621220204,3.2433136403278757,30.38243,LCZ-6 +msnqh,50.86918288061569,4.650612914536624,49.06245,LCZ-D +rsvfc,51.002622666921646,5.224670649836836,29.76274,LCZ-D +dxmww,51.445825401598036,4.72796070669395,14.2945,LCZ-6 +kxuvg,51.210593776002156,5.162001336422842,25.29937,LCZ-A +ykvxf,51.11297176754583,3.180022891177349,16.93682,LCZ-D +dhljs,51.373813655356294,4.306807158482483,3.55967,LCZ-D +ksmrn,50.82376008246296,5.637193772692855,78.61063,LCZ-6 +jqcuk,50.78681955500632,3.8109338879503833,71.44347,LCZ-D +twlso,50.86640657672214,2.6691209211019786,28.48675,LCZ-D +zecjz,51.2068480070712,3.469065053080177,2.25999,LCZ-D +wcmdl,50.704126200713574,3.298377817998766,16.68337,LCZ-D +bqnkh,50.436229737062924,4.098486409598048,67.34921,LCZ-D +odydt,50.44613342291565,4.525606090452958,170.56557,LCZ-6 +srnre,49.91875971878096,5.695541777027591,503.10742,LCZ-D +iqtqe,50.38672768957106,4.672159899733975,179.77414,LCZ-D +txxsu,50.67533171795972,4.814343371205715,133.36958,LCZ-D +oisno,50.22973242882801,5.1820609197650525,325.72501,LCZ-D +xqkyv,50.20636918492311,5.386864780014428,300.24402,LCZ-B +qqfhz,50.15217333425223,5.789750075805397,439.45166,LCZ-D +ybjcb,50.585498660075295,5.564195999718215,246.05385,LCZ-B +scmyp,50.08416413730974,4.51255100711101,156.41234,LCZ-D +oxztz,49.62623033419282,5.444363387062671,315.06522,LCZ-D +zgzvt,50.50664468314425,5.2824554900026275,251.48695,LCZ-D +tpcxb,50.6601652753207,4.647154798243534,143.53786,LCZ-D +ccnat,49.88040320119977,5.49224485160824,441.75571,LCZ-D +wbyvl,50.68250278412783,3.808922535325307,36.47556,LCZ-D +bufbt,50.00629420348444,4.967474757880235,369.21658,LCZ-D +tzfgn,50.57927180073501,3.5595283814967558,66.7796,LCZ-6 +fxjwq,50.6613613242166,4.423064413385277,129.00697,LCZ-D +dpppz,49.90809832411947,5.31617464587126,478.63577,LCZ-D +ybfvy,50.232884949957224,4.705103578278131,270.03729,LCZ-D +qrpdw,50.591068483562836,4.728168476199495,157.36868,LCZ-D +thcfy,50.47199008546222,5.91718846232122,567.66888,LCZ-D +uodfk,50.14943211280562,5.077647762814246,150.27049,LCZ-D +fzxig,50.382713846530926,5.681042165272732,430.87283,LCZ-D +dxeer,50.34511737581179,5.071653423435923,280.15607,LCZ-D +atcxw,50.248848257387564,5.7372984956846445,641.14215,LCZ-D +pjsji,49.657189297319675,5.811601940486737,372.01001,LCZ-6 +vulnb,50.248600035292384,4.233330485419868,226.67413,LCZ-D +mxukt,50.46410409955125,4.913007612753728,74.38075,LCZ-G +opczz,50.69003966596365,5.193314353254441,128.09456,LCZ-D +olege,50.84117391350074,4.400665079741162,80.62476,LCZ-6 +cfyzs,50.43979169277959,4.328381029831344,186.24969,LCZ-D +rhvye,50.376535336831,4.975901764031579,257.79187,LCZ-D +khdhi,51.030166426611466,3.7072780085005994,7.83473,LCZ-6 +ngkeg,51.32816433439471,4.942255482251331,29.38851,LCZ-3 +dhyvo,51.039147647005684,3.716814161438941,13.08573,LCZ-2 +tobpr,51.052119770694226,4.460624211460539,3.28912,LCZ-6 +hofbr,51.03619969796011,4.472732324073878,7.09557,LCZ-3 +bgtxk,50.93912513998988,4.03939182209916,11.74067,LCZ-3 +qrtjz,51.23021163528123,4.377141312416164,7.30288,LCZ-6 +hgyei,51.22053847798457,4.417960653086579,10.14221,LCZ-2 +dlpju,51.205374402131376,4.395430913512789,10.28441,LCZ-2 +himav,50.879132900411626,4.296994258861437,31.38176,LCZ-6 +byykv,51.27173317003178,4.294002935366001,-1.0,LCZ-8 +ufdah,51.05905932849996,5.612952913595491,83.73402,LCZ-D +aqemv,51.12990671572541,5.666222806471557,34.4341,LCZ-D +pihzh,50.84308613997075,4.361166114136095,69.64122,LCZ-2 +imtxd,50.8567634297742,4.352755396131161,45.32451,LCZ-2 +nqmgk,50.982727077244306,2.866025682399438,3.00785,LCZ-D +azpeb,51.26971110506307,3.575504980625859,-1.7,LCZ-D +nbziu,51.169728370129135,3.565377039959175,11.27714,LCZ-A +hndil,51.15757252805249,3.7166863050550147,6.8133,LCZ-D +ktlsh,51.15978779531729,4.992512009741133,23.68012,LCZ-3 +bisec,51.05037465157453,3.7292413591715707,10.80553,LCZ-3 +snmhe,51.03782013867221,3.7893705104058077,4.54673,LCZ-D +zolhg,51.079287103269614,3.7812510585459473,7.3845,LCZ-8 +evyes,51.23446966677389,4.421980726098458,6.63048,LCZ-8 +sebcp,51.04484855355001,4.694290113156138,11.67842,LCZ-D +grpyp,51.074941522680085,4.72932192260585,20.86215,LCZ-6 +icbqn,50.99927229433341,4.657636936143508,13.34941,LCZ-6 +rfuem,50.87159247749185,4.316440201208356,50.98798,LCZ-5 +yqeix,51.14459672198963,4.452507607377805,18.83138,LCZ-6 +oyyrz,51.11993890378603,4.570568720825948,4.54904,LCZ-3 +jywjk,51.21336250026569,5.356594276959323,59.22699,LCZ-A +idipf,51.030032004942974,4.2623841961879005,13.8842,LCZ-A +wszjp,51.10985052860301,5.814304001539459,24.96165,LCZ-6 +gjaga,51.202599854258324,3.454747635538759,8.14146,LCZ-6 +mrijd,50.80682288329495,3.124618036030619,18.71,LCZ-6 +xfuiv,51.130578131519826,2.7479615726127555,8.03124,LCZ-6 +ofqzk,51.21473409836339,5.388022023303859,44.95687,LCZ-8 +oofst,51.235563296781876,4.126946754743295,2.12995,LCZ-D +ebafn,51.16009179206903,4.1438950428516055,19.82307,LCZ-3 +javkk,50.82123672316149,5.178643741186957,53.29567,LCZ-3 +qzawt,50.74875432665005,5.229696804291612,104.17061,LCZ-D +beine,50.992509520986715,3.3221996867926267,48.75647,LCZ-6 +vfryf,50.982748976857344,3.36595351397567,38.34383,LCZ-D +jiejs,50.814986235118795,4.937828365014344,49.09978,LCZ-3 +crqdy,51.08559237603466,2.559044441592078,6.35888,LCZ-B +cwzey,51.19641786378349,4.779960960957763,12.49223,LCZ-6 +txapw,51.20297858685703,3.807918756079182,6.13281,LCZ-3 +zridk,51.19861699947482,3.8044623048072834,0.78199,LCZ-G +ixbbi,50.837474168362924,2.8867911591414286,21.13327,LCZ-8 +ppfbz,50.983554708314685,3.814853658873267,12.72616,LCZ-D +ylszp,51.21259607865509,4.4396435612133685,6.11911,LCZ-2 +faorx,50.98137607664043,3.8145859991254714,12.72616,LCZ-D +osfqs,50.979038861732114,3.8200634940340703,12.72616,LCZ-D +wrawv,50.92540911822792,5.447501212801841,39.51929,LCZ-D +anblu,50.851745587997236,4.355574730960591,32.03478,LCZ-2 +ehnms,50.84908849107441,4.354309224954207,32.03478,LCZ-2 +euzqg,50.85502876182518,4.3478270912277965,32.03478,LCZ-2 +uftie,50.89669731461615,3.5263532649049214,57.67729,LCZ-6 +pvibv,51.14410760166758,3.6118013526518147,7.06497,LCZ-6 +heakn,50.894633414107126,4.699070250366606,26.06414,LCZ-6 +mnknz,50.80113231132507,4.396296143625918,84.24806,LCZ-6 +ggtru,50.740216586114464,4.3774893919428095,116.34447,LCZ-6 +paxzi,50.75240477075039,4.326700457521473,111.84206,LCZ-6 +cuvin,50.596426064007524,4.332463670668863,110.18548,LCZ-3 +nxvmw,50.851613866686975,4.350765518432727,32.03478,LCZ-2 +ghwmc,50.74707068213675,5.542518635336229,85.26398,LCZ-6 +fsbaq,50.70093161664228,4.1118376753980606,70.75988,LCZ-9 +qnkuw,50.845853619543924,4.350765524811461,32.03478,LCZ-2 +tzhwl,50.88486087757556,4.439022099958844,22.43369,LCZ-6 +yirrm,50.85390530091403,4.343181890896364,32.03478,LCZ-2 +squlc,50.69634660235042,4.574307477482862,99.68143,LCZ-6 +jrovx,51.17570917744956,3.1429305769100635,12.6566,LCZ-6 +mprlc,50.772301312155555,4.122736589739317,68.77878,LCZ-6 +vcbgg,50.839351670214185,4.274053461522381,63.10983,LCZ-6 +ffsdb,51.06065087151391,3.6947059188816733,9.06268,LCZ-6 +gkpqm,50.76847158238562,3.8868345742105452,20.49227,LCZ-3 +okkog,50.96600656736855,5.181035349945446,24.23339,LCZ-6 +mjtwo,50.84590264271178,4.356116206449744,28.85177,LCZ-2 +nivtz,51.281682163692665,4.659240792474075,17.93663,LCZ-9 +hqaop,51.164172311113646,4.281581893591437,10.88535,LCZ-D +rlcyv,50.81594382813073,5.2030306914832085,44.50074,LCZ-6 +oybwz,50.63001470042773,5.565180066591601,68.13187,LCZ-3 +arkph,51.12458765895599,4.219521082629717,12.95172,LCZ-6 +wpgzg,50.74721519382985,3.592783628346989,34.11265,LCZ-6 +sedqh,50.8557726696612,4.346744878449854,32.03478,LCZ-2 +ilpik,50.73497440950221,3.5856178862293526,34.11265,LCZ-6 +wdqql,50.41215556029151,4.433207918923117,107.93654,LCZ-3 +obdmm,50.40924627526872,4.615365751130087,157.89967,LCZ-B +uijwu,50.85595703547646,4.359051355634101,32.03478,LCZ-2 +yipqe,51.30702888162283,4.397826007609395,4.21229,LCZ-3 +pohgo,50.61742299384604,5.616652244294503,82.68591,LCZ-6 +awdti,50.85493118436188,4.350589411366213,28.85177,LCZ-2 +ugjdc,50.842230224201856,4.343393748636784,28.85177,LCZ-2 +yrchf,50.0191777946541,4.322217013525966,262.1301,LCZ-B +uvrzt,51.312093730220454,4.396791182410073,4.21229,LCZ-3 +viiuj,50.901730750170046,4.429479228914629,25.10355,LCZ-6 +aiujd,50.72813483314443,4.674946412604073,104.27724,LCZ-9 +erpnx,50.698608133110916,6.07090211828022,243.45152,LCZ-B +rsobq,50.85919284329487,4.3567527736233265,28.85177,LCZ-2 +tlbed,50.20337579715118,4.813728180583387,98.68593,LCZ-9 +sgozl,50.71230863241383,4.237977696824799,40.35085,LCZ-B +hidte,50.59405370832202,4.335568831796396,110.18548,LCZ-3 +qbukm,49.57039933033533,5.528018536321304,220.95662,LCZ-6 +jdowy,50.45217611773736,3.982328871108119,58.89561,LCZ-6 +zipng,50.793341057757694,4.506151872058275,104.6617,LCZ-6 +qyqnc,50.59441431303609,4.946916501078398,145.41347,LCZ-9 +ojpez,50.882574273431686,4.699010548084986,20.94676,LCZ-3 +sojqs,51.21100186636949,4.420690302101216,14.60444,LCZ-2 +cfofg,50.56201210430824,5.669608853183379,288.73386,LCZ-A +qhwii,50.19422894197344,4.764256162335029,217.71008,LCZ-D +zkbzw,50.64640003956797,4.370553000225859,144.92601,LCZ-6 +xeaqb,51.21090900452521,4.41718109444679,14.60444,LCZ-2 +vxqrc,50.85413937104862,4.358402439189872,28.85177,LCZ-2 +mnoax,50.35215420156653,3.933881321585772,118.49173,LCZ-D +tqzch,51.09977183313885,4.072055018002174,5.48887,LCZ-6 +bebhm,50.94003454889971,4.0237138482883665,15.66202,LCZ-6 +fcghx,50.848760296429866,4.3515330591477035,32.03478,LCZ-2 +qgyoz,51.212746171289844,4.4128896192728035,14.60444,LCZ-2 +ylyep,50.25917948930242,4.617103759409794,281.43777,LCZ-A +nlffx,50.58358904464468,5.611959029260833,178.50021,LCZ-6 +ynpgx,50.647143785770126,5.568415961080169,71.51469,LCZ-3 +knkys,50.71598368682511,4.386530761881877,122.53891,LCZ-6 +kttgj,51.01051423087688,4.442286323867248,8.69667,LCZ-6 +ainex,51.2009356676295,4.254006854573978,10.97585,LCZ-6 +tycbs,50.85149916379806,5.166249180373931,30.4646,LCZ-6 +fmscy,50.82382141632627,4.338640300407192,99.86845,LCZ-6 +pqawq,51.23724123053052,2.9232153656232938,13.38392,LCZ-8 +omnwp,50.06779373989385,4.362258587505321,235.35384,LCZ-B +irkre,51.001847321769546,3.346966694990773,33.36039,LCZ-6 +fgmzr,50.959553500241995,3.62978819605362,9.51281,LCZ-6 +kgarj,50.4994138739371,5.779879407934753,361.32999,LCZ-B +afvsr,50.827162803435016,4.331677740131611,24.01413,LCZ-2 +nvzfd,50.81773284721274,4.293870448048675,31.02719,LCZ-6 +euces,50.85633363464405,4.4859962361002195,53.12802,LCZ-6 +xxtof,50.77738355144829,4.511426186649322,104.6617,LCZ-6 +vsfee,51.20445635090269,3.228333237662341,13.11306,LCZ-3 +ipxxb,50.84339013384265,3.208722566626022,17.798,LCZ-6 +mdbwq,50.8537510270743,3.607600492890573,14.9212,LCZ-3 +ptnyn,51.191405785776915,2.8051901196451063,12.89822,LCZ-8 +fiajb,50.409518765098085,4.43220346097405,129.04556,LCZ-6 +atuvb,51.009408228644986,3.6674971350273506,9.92827,LCZ-6 +yjtbl,50.638676052477166,5.572458994288404,71.51469,LCZ-3 +ujwff,50.85555104437202,4.2721668069265615,80.53438,LCZ-6 +wzljh,50.4241987186248,4.440917859486388,129.04556,LCZ-6 +cyzyv,49.55706691733026,5.724642433065742,271.31583,LCZ-D +myihj,51.33992413644584,3.317199966791762,5.47416,LCZ-6 +draip,49.693361715758094,5.753174641685951,354.32626,LCZ-9 +rwupx,49.93494517994993,5.3575083896691975,464.53677,LCZ-D +fuvfv,51.18325600337467,4.846384481136535,18.42229,LCZ-6 +piyap,50.18247982738505,5.004515991192965,122.47042,LCZ-9 +mckng,49.89157484472218,5.1138484662586645,415.59833,LCZ-6 +vdlxo,50.70089256562937,3.0935923057346306,30.27151,LCZ-6 +sadpc,51.528597446538654,4.27381567054023,7.29401,LCZ-6 +jdfew,51.3749456814995,4.019033399480191,0.18536,LCZ-6 +hvjir,51.36174321861443,6.0524694171896565,30.28256,LCZ-D +ebwjl,51.48253432681647,4.049592478672729,1.29832,LCZ-6 +alkne,51.18407415815183,5.5273622895316254,45.39788,LCZ-6 +veklk,51.31794313859884,4.815775907320533,25.80798,LCZ-6 +cyojj,50.999579263826796,4.662414677467401,11.78037,LCZ-9 +ohrta,51.105894362387104,3.8542887072764684,5.63259,LCZ-6 +wbweh,50.96282985879923,5.816754470415454,69.99586,LCZ-6 +mzdfb,51.390262562838025,5.137360793540122,30.44408,LCZ-6 +dxzhf,51.53476412205951,5.704211670043422,19.11567,LCZ-6 +wklqu,51.404086650379824,5.29845114689735,26.13484,LCZ-D +cytjv,51.59115313855589,5.314159375254262,8.78638,LCZ-6 +mjikl,51.12190414859643,5.200187079706574,41.39651,LCZ-6 +zryon,51.441910224962896,6.569641224467744,34.08578,LCZ-6 +yltta,51.58514374643525,5.010135820215203,7.3308,LCZ-3 +uhqcj,51.57940282857489,5.152384362045098,14.75877,LCZ-6 +ttyfu,51.13272761482637,6.459303591885045,85.38336,LCZ-6 +qjhpo,50.82168538173776,6.496476728821395,133.30647,LCZ-6 +mnkkp,51.41161258837852,5.390783365914396,23.63967,LCZ-6 +wshgu,51.45796774409294,5.7871538570842285,27.05341,LCZ-6 +pencx,51.35282396317069,5.636667368230281,26.90741,LCZ-D +voqwq,50.79614501584197,5.912315166031481,104.66268,LCZ-6 +chamb,51.50877679994804,5.303654252238987,18.65162,LCZ-6 +meisa,49.95882993717616,6.010055992413349,258.60031,LCZ-9 +gueio,51.00799983206591,5.890787944993498,51.14238,LCZ-6 +lejfr,50.78561425681258,3.237047724073112,47.02913,LCZ-6 +qzzaf,51.28730341192647,5.333383839837629,35.90356,LCZ-6 +flpbv,51.545688973233275,5.0810771541157616,14.88661,LCZ-3 +bcmxx,51.32265823371743,6.585533034403195,35.88554,LCZ-8 +yziwk,50.96634825151857,2.434642360035379,18.10925,LCZ-6 +rjjiv,51.25525914588957,5.417868682405774,34.76201,LCZ-6 +yeudb,50.861629002563504,6.4978142224281115,124.76102,LCZ-6 +mjzyb,51.568128648480055,3.4886747466550796,1.26037,LCZ-6 +xncbn,51.380422035607545,5.843954444793241,30.6893,LCZ-A +ypjqc,50.56672749522644,4.5477890798643,134.91534,LCZ-B +tpeph,51.12730049506871,5.611213225867342,46.01534,LCZ-6 +ghwnb,51.32158886072856,5.9935252603630484,37.14279,LCZ-6 +qdqzx,49.51635611072248,6.391532545215527,186.21298,LCZ-6 +xbnnq,51.05097237936984,4.686796813675034,12.01439,LCZ-B +izffr,51.41497356905957,3.914787626711147,2.68059,LCZ-D +fdmmq,51.396573311034096,5.571648881809127,23.88996,LCZ-6 +vynny,49.58306946218778,5.550287630526096,218.16228,LCZ-A +lcjrc,50.86117908574461,4.7377947642735325,45.28492,LCZ-6 +uctdq,51.22071512475085,4.466211764949658,8.04389,LCZ-3 +jowic,50.11982098436512,4.9616587826926395,186.14674,LCZ-6 +mzvax,50.200860378850315,4.810800356129835,98.68593,LCZ-9 +admkc,51.09268939601237,4.120881998172733,5.38595,LCZ-6 +gtrpd,50.78891248447855,4.201574529948775,38.74043,LCZ-D +tyohr,51.09540526407009,3.8332530027960328,6.51626,LCZ-6 +soqoj,50.87467347315467,3.4481255612681605,13.11501,LCZ-6 +yxcmn,50.43973350108242,5.130719235590898,256.60385,LCZ-D +drlez,50.82748474669362,4.438452582009325,58.61251,LCZ-6 +vbvdj,50.84984529967937,4.6927456136795875,49.34712,LCZ-6 +eyolo,51.080243279312015,3.5363668573051994,6.348,LCZ-6 +mgqmz,50.936932026472874,4.362536382750449,29.91735,LCZ-6 +wlzdp,51.347558986657006,3.316291392653314,4.60958,LCZ-6 +qvkpw,51.139364037820435,4.4553206426274325,17.94421,LCZ-6 +gznxo,50.89630238553448,4.55739938635632,42.29419,LCZ-B +eqfyt,50.61078876855565,4.336310671694404,102.8449,LCZ-3 +azrvj,50.706868150603206,6.1269306600845805,277.88599,LCZ-6 +ujfms,50.73225440928662,4.33839711784662,78.15952,LCZ-6 +grqry,50.63733769105779,3.8884185190573897,48.82486,LCZ-D +uscgj,50.5491191904802,5.446938081408391,217.69745,LCZ-6 +bqlyc,50.61541803305193,5.556771053058849,166.11035,LCZ-6 +ngdep,50.88547739864956,4.401936662108535,47.92352,LCZ-6 +hwhnt,50.8237875368788,4.33951771471432,41.15401,LCZ-3 +oqeby,51.1579334876321,3.3261503142611137,8.69859,LCZ-6 +gtivv,50.23688308347569,5.173873089874069,300.5509,LCZ-D +huayc,50.763976275598175,4.271823481448694,26.95838,LCZ-6 +wnuvm,51.054007555793454,4.358697353003483,2.99762,LCZ-3 +atgnd,50.80616961405263,4.398571058925771,83.7654,LCZ-6 +hhdvq,51.252445488648746,4.60762646075826,13.22724,LCZ-9 +jqtnz,50.60136813078127,4.614544609338847,123.69785,LCZ-9 +rbnuy,50.69059644538168,4.262573691390501,58.57709,LCZ-6 +wfbpy,50.97195914553902,5.473979247753319,62.28629,LCZ-6 +andtc,50.573782122817015,5.8643821006635335,239.0674,LCZ-6 +aeojt,50.51183389749829,3.4046731605555576,22.88941,LCZ-6 +grckk,51.222334821343686,5.375861904927035,46.61794,LCZ-6 +jtfva,50.395009872269945,3.8928860237386647,123.62174,LCZ-6 +foncu,51.118169369737224,5.232402568006326,44.27399,LCZ-6 +qclul,50.71137385576667,4.385319163966841,117.03821,LCZ-6 +djbms,51.076758820443324,4.2759813405636695,7.26685,LCZ-6 +unqvh,50.506434304338384,4.574763648325259,139.31619,LCZ-6 +wuwry,50.79694695860525,4.094813736336132,37.28571,LCZ-6 +zzqzf,50.744502344536755,4.686807529523211,61.48406,LCZ-6 +tbcoi,50.99074727397571,5.301538767400494,38.48067,LCZ-A +qmcyh,50.61790163527477,4.985431370787494,133.08328,LCZ-D +crdbs,50.899691991436626,4.661281128459828,40.34404,LCZ-6 +jscau,50.58554683357842,4.94970721138952,145.41347,LCZ-9 +khoek,50.830658757205484,3.1676468209558735,17.43694,LCZ-6 +juvuy,50.356946443224196,6.290013897622018,594.49976,LCZ-B +fmkqy,50.49539818209116,5.081792042046938,77.45088,LCZ-6 +uameq,50.927244184723115,4.530192921897792,17.69314,LCZ-6 +nhedm,51.165206160206935,3.1837887588066986,5.37238,LCZ-6 +icksw,50.69239630782061,5.4533284351737406,147.36159,LCZ-6 +drgfz,50.978809302086646,4.153314041956869,10.31863,LCZ-6 +uxqjv,51.10206406844725,5.564405218401285,64.665,LCZ-D +zwufj,51.050369826675194,4.3352366305784855,6.6504,LCZ-6 +xhyxu,50.73208603555859,4.475453335799232,87.70395,LCZ-A +pnssc,51.05957580206908,4.310125691756671,2.39999,LCZ-D +rsrwq,51.16168888281164,4.995972387762464,25.26192,LCZ-3 +clwqh,50.542174169171055,4.7171059445198935,161.35759,LCZ-6 +uozah,50.84345362389836,4.347154236058514,36.00411,LCZ-2 +gbqyb,51.41248903432511,4.8838904417471225,25.13157,LCZ-6 +gtfzk,50.546351679248545,5.8405518135774805,276.36871,LCZ-B +rqvqb,50.84469842699726,4.371419034907476,57.0001,LCZ-2 +rjnlv,49.73362831828455,5.649913360125779,404.3063,LCZ-9 +zeuvf,50.75010700914609,4.5050604057855415,93.57709,LCZ-6 +axghu,50.675429312962784,4.57870953031569,70.33791,LCZ-6 +savzi,51.18754713921194,4.441381816080709,8.41138,LCZ-6 +soapp,51.1062819652576,3.7742724944146118,7.20818,LCZ-6 +pxigb,50.782770161133634,4.51168719643877,109.15986,LCZ-9 +enscz,50.06543393038233,5.63390858197942,397.36264,LCZ-D +gnwdj,50.12820354383179,5.71621926072948,428.6347,LCZ-D +znrkh,50.943571689597874,3.3078567433051633,31.88497,LCZ-D +xjvkq,50.85592913831303,4.62586317583544,46.73101,LCZ-6 +txcze,50.761122658365956,5.342715961641416,77.88718,LCZ-6 +nsfxu,50.80328121165905,4.326547634448387,54.85419,LCZ-6 +kyteg,50.83627580314492,4.379734519754066,78.9392,LCZ-2 +rwnxe,50.613379234808356,4.456079671590827,117.48662,LCZ-6 +fkeew,49.726017350785185,5.799689531089657,350.99277,LCZ-D +clxlq,51.229852401506875,2.966447676492968,2.3479,LCZ-8 +rfjgi,49.75280277599253,5.774078546607991,345.12894,LCZ-D +wsuuv,50.858887407916,4.38441933858098,44.19719,LCZ-3 +ciufk,51.01961434190335,3.6182092287456373,16.91874,LCZ-9 +riqll,51.1761829037537,4.423302532923169,14.44006,LCZ-6 +obgwe,50.68634294819752,5.369115086519755,139.01497,LCZ-9 +qyixa,51.19394140019265,4.479416790545002,7.57235,LCZ-6 +tvfhx,50.65713402459701,5.510832667831496,176.33426,LCZ-6 +nellq,51.0625908688126,4.459436327468737,4.0788,LCZ-6 +vekwl,50.76177829810657,4.257102379221414,32.50531,LCZ-8 +rmqol,51.13222100888686,4.384746505175773,9.67129,LCZ-6 +zxiyo,50.9241004358002,4.050736349210868,11.66001,LCZ-3 +qpotq,50.584130632063754,4.064769692683262,85.68549,LCZ-6 +tbscn,50.45633262601193,4.880345873718021,84.92107,LCZ-6 +zcqqg,50.38210228364613,4.5094997253414855,141.49342,LCZ-D +nuekt,50.584605186506,5.863829239216613,210.55496,LCZ-6 +ivugr,51.03263398949819,4.769395510891325,10.84656,LCZ-6 +iklix,50.94990167723701,3.9128795785899606,36.82136,LCZ-6 +kdmuy,51.32858475826351,4.910585738751904,28.43159,LCZ-6 +qarob,50.63958516584202,4.567566791049186,70.48499,LCZ-9 +rnqii,51.18025779129407,4.3797346954013054,6.34455,LCZ-3 +ptnbq,51.0307595296108,4.521264821508984,4.19249,LCZ-6 +uzqqm,50.4787185613282,4.127843760393291,87.97012,LCZ-6 +pwfxk,51.08901768505206,4.50634847370643,7.31992,LCZ-6 +xsbhq,51.14926911270116,4.348028039176465,17.76819,LCZ-6 +xomfi,50.371102675887556,5.069164277992952,292.02866,LCZ-D +pbrpz,50.693886179023565,4.839355457860346,107.18033,LCZ-D +wacwe,51.20836365431056,3.230543564577107,13.11306,LCZ-3 +lndwr,50.774433346019705,3.4415633219682293,15.07602,LCZ-6 +rifxo,50.70941734148097,4.568626220419267,99.68143,LCZ-6 +epkgp,51.00415578010097,3.72178746421614,9.66971,LCZ-6 +mmwzz,50.6218435200565,5.478427476293114,146.09819,LCZ-6 +gcnoe,50.88890427560754,4.467402927611044,43.58911,LCZ-3 +nlijd,50.45076370678799,4.690504070401847,95.39731,LCZ-6 +ntshh,50.65051007332268,5.543298222792529,133.89322,LCZ-6 +ogpyh,51.181026224860894,4.443718657766608,14.26918,LCZ-6 +anwgs,51.0701541855362,5.099017334006885,24.12691,LCZ-6 +qtjre,50.98158007167994,5.186980224014895,24.91658,LCZ-B +pvfsj,51.00383644538881,3.336626424315038,38.55428,LCZ-6 +fqwzp,51.23917749268997,2.9423604728049653,4.4418,LCZ-6 +blbwl,50.59188678148977,3.7999594428511294,52.02409,LCZ-D +jdsio,50.72565312057275,4.396622351242588,125.89205,LCZ-6 +loibk,50.72842760939918,3.2002836360903224,41.54321,LCZ-6 +xhbwd,50.80498804971431,4.915116024957784,46.24239,LCZ-6 +pesit,51.18596386499181,4.398250513442118,12.16441,LCZ-6 +yvauq,51.11982012342051,4.577778057713173,4.55667,LCZ-3 +zvlgi,51.42141800642533,4.764776612936437,17.05978,LCZ-6 +qyyub,50.41577035142469,3.8903328795790975,79.27261,LCZ-D +vvawm,50.957265283164425,5.495712788793573,79.19494,LCZ-6 +hrppm,50.79769081689966,4.411423803492684,91.46694,LCZ-6 +bvclo,49.556064488033876,5.731633481853687,271.31583,LCZ-D +zmvtl,50.78561412361495,4.495167760871863,106.54388,LCZ-9 +vwbce,50.79576744289814,4.295766401773823,32.65575,LCZ-6 +fwohx,50.44169132806988,3.959140556056091,33.71073,LCZ-3 +hmqmp,50.84953537052403,4.420523234508041,64.70406,LCZ-6 +yqvbi,50.699609695142925,4.371069966699718,92.20408,LCZ-6 +tezeq,50.45696663446659,4.638736336100102,95.58823,LCZ-6 +kysfq,49.67501113414678,5.7982602344943315,382.84949,LCZ-6 +mqrjg,50.225709534631925,5.338116441621409,209.89615,LCZ-6 +gpmpy,50.688796241652135,5.166065129149847,133.09673,LCZ-D +htrsb,50.720848452171616,4.49091110472068,102.54851,LCZ-6 +vftoq,50.988967828999286,3.926206845088817,14.02963,LCZ-6 +dfwhm,49.87547830909119,4.910531429551156,247.02058,LCZ-A +rfjgr,51.004319428585504,4.5101210732724395,6.49583,LCZ-6 +fgxpr,51.07695654079994,3.693648470821168,9.06268,LCZ-6 +darcb,51.15366503932007,3.8988966369774607,7.52558,LCZ-B +sbjke,50.750776213184736,4.290769376945777,57.43977,LCZ-6 +oxzrm,51.20616048186872,4.4040161395829145,10.04623,LCZ-2 +tzabt,50.8639345843794,3.231904756409013,16.69909,LCZ-D +meifo,50.8338997663621,3.3154233290667405,16.68248,LCZ-6 +dfpsw,51.09274154144971,2.9417920635701353,11.25577,LCZ-D +aimsw,50.94953719646969,3.1548513885167373,22.28742,LCZ-6 +junpj,49.57028519285479,5.530209305404568,220.95662,LCZ-6 +eddmt,50.716337757651665,5.651686262006759,127.62804,LCZ-6 +qbybi,50.86519264050172,3.134296950389036,19.76898,LCZ-6 +jisnk,50.79833650282232,4.346725080162574,71.86732,LCZ-6 +hmfjv,51.30255142062073,4.4136965432534465,4.21229,LCZ-3 +ictgr,50.61794627436988,3.391632730508588,23.13953,LCZ-6 +vjydh,51.063124707077876,4.216381304903087,4.47198,LCZ-6 +waqhz,51.325303999292835,4.850187111025161,31.94157,LCZ-6 +agvzu,51.094431590884184,4.360636147453721,8.11366,LCZ-6 +cilhz,50.7966784041567,4.83305240163004,68.52018,LCZ-D +fqeek,51.268861666118106,4.4653614001327755,4.89521,LCZ-6 +kpiqp,50.96498748588397,3.9489789359009855,19.01046,LCZ-B +wlgcx,50.806967922970756,4.403065205222581,84.21047,LCZ-6 +dxxxa,51.22900231138742,4.47502766533068,4.65827,LCZ-3 +yycjy,51.33944994796938,3.3016994517219085,3.31467,LCZ-6 +stqvr,50.840091314300416,4.384973938969183,62.31625,LCZ-3 +sjokn,51.156214710819384,3.241978752079041,11.4654,LCZ-6 +mqfvy,49.65469418230052,5.898060122277899,323.0249,LCZ-B +ftyko,50.82163048976698,4.383787620869242,74.62086,LCZ-3 +pcokf,51.44609140768482,4.444621465704181,15.14919,LCZ-6 +ckegj,50.9119315492447,5.360397578835466,49.89268,LCZ-6 +qkxgd,50.2793836592694,4.441306684937378,182.03198,LCZ-9 +ikoxs,50.823932374187464,4.331304078624732,34.22663,LCZ-3 +rksch,50.47766975921868,4.234788015346273,129.85825,LCZ-6 +kyqpn,51.12152564407297,4.400394011618055,15.68998,LCZ-D +zwbzv,50.55133228903623,4.697290639393954,167.86966,LCZ-6 +onier,51.43351671679024,5.069841222922615,28.73177,LCZ-D +fgjdx,51.18407046903551,4.435326341197053,10.28876,LCZ-3 +gurbb,50.852439014825435,4.177312779474529,38.76658,LCZ-6 +elsfm,49.68486942283095,5.825110552702813,419.68024,LCZ-6 +gvfhb,50.8671040390244,4.294522513738288,45.07621,LCZ-6 +rdjqu,50.845305157171886,4.4313489759965226,71.02767,LCZ-6 +zlell,50.866141622462564,4.103150253751036,39.43568,LCZ-6 +ilaau,51.013252657397196,4.480470683593629,10.92895,LCZ-3 +oxzqm,50.6741437340357,4.326547587488959,99.21615,LCZ-A +ecinp,51.19070848032186,4.4141343948959,15.04787,LCZ-2 +onwfs,51.1878787165473,4.4302278595401505,15.95753,LCZ-6 +iukma,50.97468414992376,5.266578797471337,31.8643,LCZ-6 +tnsic,50.840325840036705,4.769511233216997,64.89221,LCZ-D +awhms,50.718269451441685,4.527734652793439,79.12785,LCZ-6 +vbosl,50.50561407603396,5.123483331416795,87.6306,LCZ-6 +zpaid,49.88927125900722,5.07674313553971,426.50537,LCZ-D +ysany,50.29461018921211,5.30157075728335,240.59641,LCZ-A +gilyy,50.41187666502982,4.1440455898087425,80.96974,LCZ-6 +gubiu,50.58567824620789,4.32255988480787,116.97978,LCZ-9 +ywkxr,50.630761185925664,4.625404139893068,104.14696,LCZ-6 +aakwf,50.96550940105915,3.95753781797422,19.70362,LCZ-D +szwjt,51.096331656421846,4.231671225595184,6.59532,LCZ-6 +bcoog,50.33313117761433,4.316733754990826,163.88179,LCZ-9 +goksk,50.79262388143593,3.247265804836489,31.41175,LCZ-6 +kqaea,51.07415194117432,3.7684219782653927,6.75295,LCZ-6 +ialya,50.50082899639618,4.385629132613421,139.55946,LCZ-B +cacxq,51.17500485757357,5.167548511580352,32.43399,LCZ-6 +mnhsf,51.02102443575302,4.114965723334779,3.04979,LCZ-6 +hxiqo,50.22899813015309,6.182716473928109,391.64456,LCZ-B +yeiuc,50.78176978082782,3.511155206334899,15.23645,LCZ-6 +zpwwl,51.07892937027778,3.7063818996082634,7.53629,LCZ-6 +pvgdo,51.156077603598504,4.444065900985064,16.30824,LCZ-6 +ltwom,51.056569748713855,4.271199959513423,7.14165,LCZ-6 +ollly,51.0919059505865,4.922892591432342,15.13798,LCZ-9 +mnqjb,51.26973085895713,4.654428475122198,17.93663,LCZ-9 +qxiqs,49.82701067341487,5.489604625099534,444.06735,LCZ-D +qclqr,50.769710645106414,2.775700710234216,79.79443,LCZ-9 +ztrwe,51.190808759084845,2.814892570328572,12.89822,LCZ-8 +uobeb,50.780190905322854,3.4362778903674247,14.7858,LCZ-D +xtrrn,51.31978914240094,5.079056152934744,21.60693,LCZ-6 +abgie,50.84038600211149,4.339498431477224,24.01413,LCZ-2 +adaiq,51.03689000013028,4.473175632264428,4.40185,LCZ-3 +syoqb,51.07257316182061,5.573092605373952,76.41054,LCZ-6 +phypt,49.94344340049457,5.021204731051368,391.20215,LCZ-9 +wzqtz,50.84464319118456,4.432420000524693,69.0673,LCZ-6 +cujdk,49.83723463885641,5.272876169448985,417.7355,LCZ-D +pfktf,50.824139894593436,4.46671847162726,85.89485,LCZ-6 +cbmss,50.60968272179261,4.904122666245081,141.60529,LCZ-D +nemoo,51.21110916312028,4.350559156396495,7.3887,LCZ-6 +drauw,50.47122202095886,4.188096442933469,130.51576,LCZ-3 +mooqy,50.94623816956526,3.1012922247870183,23.41461,LCZ-6 +mbqjh,50.725658704024106,4.50741499177969,66.7634,LCZ-6 +sjgxl,50.55168631289665,5.022004354820712,186.46376,LCZ-6 +vbamm,50.220193589727046,5.392052311660447,316.69156,LCZ-D +tjwqi,51.12905921231859,4.992721528289118,19.23678,LCZ-6 +vdddy,51.107305292973464,4.7075786696051045,11.15767,LCZ-6 +uijmi,50.35947956349049,5.656439001417045,435.71011,LCZ-D +xewuu,51.381772766269506,5.009830751359873,29.98043,LCZ-6 +atgeu,51.34339472050892,3.2501869360240656,8.30923,LCZ-E +fwuwf,50.54483491239889,5.397355518314272,233.30426,LCZ-D +dkjok,50.83981631921443,4.408343056150065,80.25073,LCZ-3 +mhyik,51.14531633006349,4.488510347414647,11.73695,LCZ-6 +fpsqe,50.6276466962567,4.682714798202145,150.41751,LCZ-D +llcbj,49.552808825951274,5.558047117907034,217.11812,LCZ-B +qnzjk,49.85127330755769,5.618531247391943,460.21817,LCZ-6 +orbdy,49.72892722874879,5.552189994957005,363.48166,LCZ-D +cxitm,50.82441889702275,4.3565226332942455,85.33129,LCZ-3 +skaoe,50.97595945570994,4.298456481563869,18.07457,LCZ-D +lwvfw,50.791383924158374,5.602538332042637,93.74622,LCZ-6 +ibcdb,50.412063243676705,3.8436060096388345,85.54547,LCZ-6 +agood,50.678631070964144,6.120759890613264,292.50656,LCZ-6 +gvdac,51.1425727340102,3.1477309998966803,7.79082,LCZ-6 +dazwf,50.262687695133685,4.154832059184212,162.80196,LCZ-9 +iemyl,51.02164649860562,4.131720593548152,3.37571,LCZ-6 +wcxou,50.81593759086407,3.9676913450143085,23.45722,LCZ-6 +rfoku,51.039038154862276,3.7290225963030683,10.43509,LCZ-3 +dipvw,50.9392329777431,4.070267028903548,11.17415,LCZ-6 +lyxbu,50.89468885334033,5.5217683207681,46.537,LCZ-6 +aufvk,50.38121502383933,4.870391491986746,111.83167,LCZ-B +mratu,51.12725212634359,5.617856986084305,43.24898,LCZ-D +sakod,51.149374095488284,3.240879116267308,7.84573,LCZ-6 +dnson,50.60238418146761,4.313489023202197,113.96484,LCZ-6 +jpajm,50.82403634796803,4.384642771200099,94.42239,LCZ-3 +uvlas,50.71845415045929,5.980225517473108,182.44867,LCZ-B +tpkks,51.11227629833137,5.156065989492837,31.67905,LCZ-B +ocxpm,50.73491684262523,4.490032320248135,83.07719,LCZ-9 +lzvoh,50.949009136600964,4.043275974863934,13.55061,LCZ-6 +kylap,51.1262038402615,4.458327787608871,15.40225,LCZ-6 +rqidt,50.31663893719568,5.223253688749428,310.27759,LCZ-B +jwppz,50.729067775484765,4.680965625531768,104.27724,LCZ-9 +znbrz,50.9826014867854,4.205779612945122,26.24422,LCZ-6 +obhpx,50.65168788635656,3.9169159859020537,72.6701,LCZ-B +pmitq,50.60984697007296,4.645577389539156,136.24442,LCZ-6 +doqfk,49.777004344693644,5.230523690068167,304.95517,LCZ-9 +yxome,49.709110778342996,5.567545658966201,340.75119,LCZ-9 +obsbt,51.13027648439672,3.977208887601172,5.20826,LCZ-6 +nvpsx,50.93271881853211,5.344862815069492,42.86072,LCZ-3 +bhgvs,50.63886362646717,3.70773390722493,62.35646,LCZ-D +ejmau,50.68555917016392,4.692070496250885,86.97816,LCZ-6 +lcjqq,50.39993530509778,6.164403985106728,529.3725,LCZ-D +uabae,50.83484531992964,4.3582573966405596,78.38552,LCZ-2 +xeqtt,50.007015993713665,4.158245517588911,252.58524,LCZ-D +sqiuc,50.878275424755465,4.3418832179630185,41.93203,LCZ-6 +wubdi,50.66425351704338,3.8694446258064477,38.29267,LCZ-B +xfdcq,51.04428437257582,4.46098793462824,3.46391,LCZ-6 +znwxx,50.47664897659597,3.833158229934271,32.3414,LCZ-6 +ivxpy,50.29118225272025,5.588116413838413,350.66141,LCZ-B +nygay,50.684800921423175,5.455648940038352,150.51389,LCZ-6 +kjqke,51.400496998556044,4.4763244325882265,19.53846,LCZ-6 +nukbw,50.84309206708338,4.378580342524808,43.11984,LCZ-3 +fjbka,50.94062586745226,4.371993668346489,31.60181,LCZ-6 +wkakh,50.80802165232286,4.2632000771121135,28.15834,LCZ-6 +idwns,51.25429646607241,3.703836682895036,0.98902,LCZ-B +nkjcu,51.107796639600025,3.9246038488136064,4.92611,LCZ-6 +twfrr,50.736709981606374,3.7050414259152213,108.62086,LCZ-D +xddtb,50.47296635258777,4.189530569033906,119.75233,LCZ-6 +fkwyf,50.890222060364216,4.276202046897553,53.61729,LCZ-6 +deill,51.26815853222773,3.04724968358739,2.51182,LCZ-6 +osmzn,51.17433928498975,4.302306366115235,4.71416,LCZ-6 +tquoe,50.343842984651324,6.173591864032517,465.68732,LCZ-D +ycwch,50.66594384742061,5.603625282601466,138.55112,LCZ-6 +qavdk,50.99979649779857,3.3332891038042423,47.63321,LCZ-6 +zppwp,50.513822693796584,4.359191461305061,136.73108,LCZ-6 +garui,49.994868009063936,5.014084226787298,434.94507,LCZ-9 +kekcz,50.63567269812561,4.518297130405811,99.61752,LCZ-9 +moxzt,50.84532174278571,4.288481658753395,70.62675,LCZ-6 +bglmi,51.20125585698924,4.428013770840003,7.44719,LCZ-2 +dpzpc,50.83787659432378,4.415573106000323,79.72537,LCZ-6 +pcghx,50.39307220804086,3.7994803246226283,102.23879,LCZ-6 +tmbzd,50.61141968076996,4.844743227233106,144.85393,LCZ-D +jhira,50.982194957838644,5.686661328254185,44.5278,LCZ-6 +wlsnc,50.25731501150824,4.919410926504671,222.99937,LCZ-B +egrsb,50.845261468176496,4.374588622595371,63.42935,LCZ-2 +mdwox,50.956275899232004,2.8728483643605625,3.57823,LCZ-6 +uauwq,50.82300829637931,4.117016414904854,48.79057,LCZ-6 +asknt,49.68201748243264,5.765617100937335,369.08362,LCZ-6 +nxvze,50.68671654992206,4.844043046094432,118.86751,LCZ-D +jxdgx,50.86550027970677,4.456978561064742,50.38394,LCZ-B +rmpud,51.23022482166967,3.67758413521523,2.42071,LCZ-9 +roqwn,50.24275989571449,5.939940685520762,479.38992,LCZ-B +ccezo,51.01849599028325,4.058367571199234,3.472,LCZ-B +vshoq,51.114002698351875,4.1173282380149425,12.83727,LCZ-6 +mbkju,51.1315112067402,2.7643634859954904,0.3963,LCZ-D +gkgcy,50.40176361689208,6.134384519468555,525.2663,LCZ-D +ppzkz,50.60687674337941,5.74099202638381,193.21823,LCZ-D +hmtnp,50.703753717128585,4.788839440850319,128.36623,LCZ-D +rauik,50.93359939349497,5.450414341923367,41.45914,LCZ-6 +lnpdu,50.62636021697296,5.565369783001408,70.37767,LCZ-3 +ifazy,50.79224803767707,4.371071600085185,100.91038,LCZ-9 +opkgd,51.16816666541668,5.1731646012720836,34.407,LCZ-6 +bmfuw,51.36303033974378,4.484235308142906,30.641,LCZ-A +jgpnn,50.65997027844321,5.076715666222766,136.06512,LCZ-6 +ymnoq,50.777755511570234,3.27647128939734,55.387,LCZ-6 +oktfc,51.18028109216123,3.191160476365851,23.55655,LCZ-A +faesi,50.29454452020441,5.78962091906244,421.20731,LCZ-D +asfte,51.01908169239032,4.471392975292823,9.45967,LCZ-3 +pjvqq,51.33317200372712,3.254226119783818,5.24456,LCZ-6 +wszyy,50.8540718009454,2.8919458659375117,22.03731,LCZ-6 +xzrfg,50.13111142938978,4.711417196605821,193.11095,LCZ-6 +azvfa,50.949938760132,5.315474881639001,32.90834,LCZ-6 +ypqio,50.82068019634251,3.161502007439273,16.9912,LCZ-6 +ysofx,51.19848039886944,4.460734216074003,8.47231,LCZ-6 +hcdbv,50.82677483748682,4.407233495321149,92.17682,LCZ-2 +jejfk,50.2267188844373,5.108954095001616,278.78595,LCZ-D +qzlqi,51.17348795460778,5.091190323837558,27.40685,LCZ-6 +pnyhi,50.98697660112087,4.625923018275503,8.84399,LCZ-9 +vkire,50.22689240773683,5.344964214347486,209.75272,LCZ-6 +mwzoq,50.848829454492716,4.396327970475595,77.06729,LCZ-3 +ybtgn,49.616011914003494,5.841281510545308,358.4231,LCZ-6 +cgjcf,50.72581615328784,3.8438820944223036,22.61106,LCZ-6 +nkmdw,50.822355660793335,4.358571580611741,94.81876,LCZ-3 +cvedy,51.17143253259736,4.339691943810545,5.97688,LCZ-8 +jmulc,50.93996638407052,2.9245527837603817,18.28073,LCZ-D +rcafz,49.678898512486846,5.559482194132645,343.72174,LCZ-B +mtxeg,50.43101698046617,3.943661214990765,48.02711,LCZ-6 +dcihe,51.19974287580449,3.435315006533444,10.03181,LCZ-6 +wryyr,50.97821440573964,4.308707969083617,19.28515,LCZ-D +wdtfh,51.05240847088958,4.338211095780412,4.52028,LCZ-6 +jwyle,50.56434482893305,5.6749860710468925,288.73386,LCZ-A +ymsai,51.128906836857084,5.533628785102782,58.99854,LCZ-6 +dctbg,51.233898661249896,2.946595812807371,1.54168,LCZ-6 +adcbi,50.6704872627175,4.1268322770709664,66.67336,LCZ-6 +qggot,50.80700150097358,4.368281434500914,108.47688,LCZ-2 +oyuul,51.27124234668228,4.524316272841511,10.78651,LCZ-9 +xhxet,51.18957732087307,4.472996070492477,9.64603,LCZ-6 +mwsad,50.831328985185074,3.2971392565447353,16.35708,LCZ-6 +kvpgv,50.982551371047684,4.552985658586925,7.89842,LCZ-6 +coxdz,50.60198504620994,4.143222361243989,95.24992,LCZ-6 +vlmrl,50.84233606699784,2.854802951673327,20.51326,LCZ-6 +lnzls,50.81631130877892,4.346065130142602,98.37556,LCZ-3 +itizy,50.855321489227755,4.3557406252948665,40.42514,LCZ-2 +bcpim,50.889895925407764,3.878107416786481,54.10969,LCZ-B +qqfwa,50.71769235537003,5.540054136724165,148.36824,LCZ-6 +pxybi,50.91155806627623,4.6611212962689255,29.27959,LCZ-6 +xfrtd,51.18136662013949,3.332539112606146,12.98788,LCZ-6 +vrhqv,50.44931118536485,5.306018786374217,234.88866,LCZ-D +gokkm,50.82405893452907,4.421888424202425,86.39481,LCZ-6 +hkxow,50.83626464477943,4.37240416527901,74.60323,LCZ-3 +drdyk,51.229511888551755,4.4990030197291375,5.3831,LCZ-6 +tokjo,50.44352289948405,3.876911731420319,42.43235,LCZ-6 +kkxpn,50.70523979900627,5.85608221940375,249.23138,LCZ-6 +kusyh,51.27472257687751,4.881143974950952,17.96137,LCZ-D +axqot,51.1616539396421,4.460918553078265,20.26915,LCZ-6 +ycmlv,50.66204788376322,4.520755310440145,133.45412,LCZ-B +peqoz,50.92901826183405,4.028066422773041,23.02462,LCZ-6 +qvnfr,50.755525599887406,4.338118964381783,116.4574,LCZ-9 +ylmfg,51.31304096930005,4.94569550644299,26.14913,LCZ-3 +yrxgh,50.83242136612475,4.461064871141722,63.4841,LCZ-6 +eljph,51.01925354669495,4.477728572800739,9.72867,LCZ-3 +mxcxk,50.84514846935378,3.26611153243063,17.98617,LCZ-6 +xychh,50.66709531671392,5.076620734012951,139.61183,LCZ-6 +csnmm,50.71976904270639,3.614871607681957,39.37679,LCZ-D +ohvdu,50.73679091899674,4.011944473679907,35.47158,LCZ-6 +dhsrp,49.56246945957443,5.7960520312792445,283.34921,LCZ-6 +gjfwu,50.80120232107179,4.9357769830367495,52.09893,LCZ-6 +nknrh,50.29695759708586,5.70610880394391,405.72134,LCZ-D +eqowg,51.15184792657015,3.616736051395253,5.37293,LCZ-6 +wsego,50.89512842597136,5.6479476376932185,64.79716,LCZ-6 +fstkg,50.31715697464045,5.409597196991046,188.8313,LCZ-B +fqcun,50.84506631672478,4.426666312865379,67.00096,LCZ-3 +gvdot,50.675382139609326,4.472379202853652,115.45211,LCZ-9 +ndjqx,49.61790303827713,5.664032137706931,283.22638,LCZ-9 +qnqvz,50.30736445393818,4.87480981257967,91.53733,LCZ-6 +nnnbj,50.85059227302471,4.507874766373712,73.84481,LCZ-6 +pcuvf,51.04581621093491,5.748924705366672,36.85342,LCZ-6 +lqeqa,51.2345081544586,3.2200217544018357,1.81606,LCZ-6 +pcdcj,50.8301956769415,4.398268275040012,86.53653,LCZ-3 +ljndm,50.69343131382909,4.214568207384868,65.38511,LCZ-6 +udnxl,51.05374854343754,4.8943157179357435,21.4571,LCZ-6 +khfmi,50.66142150828939,4.562649265866872,65.52623,LCZ-9 +aeiny,50.85792669580397,4.3899137747508705,85.95498,LCZ-5 +iatti,50.79539802678744,4.360498058910897,72.07535,LCZ-6 +vuoqc,50.57700472519629,3.456235963429131,34.19788,LCZ-6 +jkfbh,51.02531992412571,5.247900678398843,33.52127,LCZ-6 +opfvn,50.49975700733457,5.4076872652080334,263.88818,LCZ-B +mtorj,50.749164615150285,4.696102497286004,51.09061,LCZ-6 +arkqe,50.9469995679148,4.558864413339572,14.21605,LCZ-6 +kqcml,51.22788307407665,4.803781949507004,19.53339,LCZ-9 +acccu,51.25050131199371,3.64063575525552,1.32558,LCZ-D +lfegp,50.09343914643167,5.565144588160439,408.13293,LCZ-D +oyoae,50.85542505784055,4.3036930023299,56.42081,LCZ-6 +vnhyp,51.19187741601759,3.1939141858487647,10.43412,LCZ-6 +xwmcz,50.80056404469938,4.837947537610739,68.50774,LCZ-D +wsshp,50.93781367697819,4.028373121272242,15.31654,LCZ-3 +uwikx,50.753608700594306,3.461961098236455,30.73613,LCZ-D +gjtsz,50.81836611491991,3.272066672103933,19.85358,LCZ-6 +zgztb,50.642724662066954,5.705720208475761,235.87332,LCZ-6 +rlqot,51.23483722281948,4.524008663674382,9.2373,LCZ-6 +rsijr,51.20262920430581,5.0608413684816025,24.18479,LCZ-B +kfsxs,50.085900456602204,4.629811256759442,153.90886,LCZ-A +qqssf,50.68480513693058,5.619862602128101,107.38479,LCZ-6 +hebsg,50.91830453082441,3.098797848399095,22.45804,LCZ-D +rgxlt,50.77889089361232,3.881359712054224,25.13878,LCZ-3 +pibsf,50.80366068943795,4.339648206092797,87.77562,LCZ-6 +hstyg,51.051778105848214,3.2827978988287203,23.84002,LCZ-6 +jzhhn,50.34668236523495,5.564663973243357,268.36038,LCZ-B +jsaao,51.26883878529603,3.0210234364856228,7.85303,LCZ-6 +fbhdd,51.33330518188926,3.25799012185435,3.96022,LCZ-6 +bpjvx,51.245293253955026,4.434135211741569,1.43842,LCZ-3 +eofov,51.06306307351693,3.691025822149874,7.71249,LCZ-6 +slrak,50.415411037623365,4.340740516372163,128.97514,LCZ-6 +vpsun,50.52565421689305,5.687020627265844,252.20857,LCZ-B +dbtcf,50.765328401934575,4.507026264910187,103.91595,LCZ-9 +cmpbo,50.80516733653374,4.430729328601082,61.83117,LCZ-6 +ohutr,50.22525836954105,5.519930538742052,192.51471,LCZ-D +kumdm,50.96460148364632,4.229683081569552,26.33558,LCZ-6 +vlowg,51.113393180702,3.97976615770309,5.85304,LCZ-6 +vwcng,50.840345076112335,4.458609849382889,60.03744,LCZ-6 +wvxvf,51.14411210731211,4.432221890446505,11.37167,LCZ-6 +phjgw,51.04083612653325,4.0363254068261405,2.65583,LCZ-B +mnhhk,51.02444937792653,4.690666602135845,8.37034,LCZ-D +zueza,51.061681875861055,3.7050253111741696,8.44552,LCZ-6 +jwrns,51.22089891287765,4.2518576687094045,9.33,LCZ-3 +zpuxh,50.84280645640523,4.560881801023187,67.69125,LCZ-6 +gtfyg,50.76987009803524,4.789196174806248,99.62121,LCZ-6 +sqbaa,50.81680568147867,4.404142034835337,86.31078,LCZ-6 +fhsad,50.87064949475349,4.459237943538115,45.65728,LCZ-6 +qvwpp,50.696841030159696,4.581425143548632,90.0406,LCZ-9 +dzdph,49.693805032902866,5.726640104012491,348.11887,LCZ-D +ovfpj,50.84166562526679,4.358634950107652,57.98363,LCZ-2 +khlfq,51.30880168241989,3.300730390274756,3.63225,LCZ-6 +detuk,50.55010411494389,5.479030249574427,267.64679,LCZ-6 +kdouh,50.8404301844305,4.44106756833585,58.64347,LCZ-6 +otcfj,50.55170780167887,4.402808470499434,151.64192,LCZ-D +erjlp,51.18203094626319,4.818616854031108,15.04149,LCZ-6 +iuynf,50.41155399515736,5.519649219507862,134.39099,LCZ-A +msdvm,50.74280075518952,5.883220455682097,175.75848,LCZ-A +yvgfl,50.77115129356542,4.588746551738399,96.42476,LCZ-D +vpbhi,50.82009294856794,5.5758408137975515,119.21877,LCZ-6 +bkfyw,50.76275702955722,4.538250696118158,81.30097,LCZ-B +gmdge,50.89450663410796,4.320744296821588,65.40157,LCZ-6 +rfobn,50.83436390691194,4.323598121377033,21.0009,LCZ-3 +rldps,50.88920631173179,3.872776697548671,57.33431,LCZ-D +uukfa,51.173905816585574,2.8081366783761617,3.87407,LCZ-6 +pnkhj,50.39624712055105,4.8461341292603475,216.72128,LCZ-6 +grzcq,51.20705651849012,4.4105527624834675,12.33315,LCZ-3 +inyiw,50.667090217006034,4.475163368784558,109.7127,LCZ-9 +pikuv,51.03452901071952,3.90698090527032,5.14529,LCZ-6 +ccqvs,51.33476486361765,4.91744212994768,28.78959,LCZ-6 +xclwy,51.09744704335108,4.261562291700644,5.61214,LCZ-6 +loqda,50.88963326140941,4.271406996309347,59.18735,LCZ-6 +vbozt,50.24347878951958,4.614734431817832,260.59784,LCZ-6 +vkjgz,50.72187668470088,4.496242125551935,84.28438,LCZ-6 +nsldh,50.81010278426167,4.379943318689753,97.25956,LCZ-6 +oqfbf,50.64891800313291,5.429073124476391,163.60524,LCZ-6 +kular,50.85170498839298,4.500977429540714,80.01144,LCZ-6 +suana,50.70700129839547,5.847675675152101,227.54695,LCZ-6 +vwljg,50.91284950606094,3.6494800742836015,8.38338,LCZ-6 +goiha,50.612655304126974,4.919748671065469,138.13551,LCZ-D +ewccl,50.727364318327346,5.067363971551391,86.93781,LCZ-D +kvbhr,51.029015588174296,4.278664761181702,6.451,LCZ-9 +gldxv,51.05063053939405,3.8692552124043664,9.79294,LCZ-B +qhthb,50.98646139715599,4.470769179473536,9.23939,LCZ-6 +wmgwy,50.91863244082467,4.299863533628551,50.08483,LCZ-6 +swmjz,50.33149043094189,6.12354425749682,474.89877,LCZ-D +jnbnm,50.754242446142435,4.946412774179106,80.74072,LCZ-D +tzemt,51.1427708649241,4.452954310275712,17.16204,LCZ-6 +xexwy,50.874087702789716,4.47664424312169,64.65629,LCZ-6 +pigau,50.86373711712757,4.434517166831024,48.44597,LCZ-6 +rcbbz,50.3390348651863,4.653444100808111,250.92018,LCZ-D +nmfed,50.420800017114544,4.61622243589945,152.05371,LCZ-6 +vycrx,51.10922239885721,3.956818924147122,5.14095,LCZ-6 +tvqoe,50.79345607979939,4.424974808051144,85.1981,LCZ-A +pknyx,50.89936986767111,4.35582815693015,71.67943,LCZ-6 +tdoez,50.86329047994812,4.390170268350195,44.84069,LCZ-6 +witij,51.173679680923925,4.397015272099946,16.21731,LCZ-6 +afypf,50.7212380362007,3.920895653644107,58.19754,LCZ-9 +wnngc,51.21869372480626,4.42830219235335,5.57813,LCZ-8 +yenhw,50.82493007955054,4.315583078040777,30.06013,LCZ-8 +bumym,50.28917194381751,5.106149750233135,266.8541,LCZ-6 +pojdu,50.72364437461972,4.384060810154227,129.01434,LCZ-9 +vvrld,50.87796322340091,3.7911717484545804,49.51802,LCZ-6 +kpard,50.88362486608631,4.69865170926321,21.97933,LCZ-3 +trupw,51.21460385838055,5.237958868154418,39.33947,LCZ-6 +sppls,50.69352952164581,4.402456873682057,117.12424,LCZ-6 +rdpoj,50.88638762913841,4.541142409468973,46.77116,LCZ-6 +tedyb,51.23917072509133,3.7544465498487924,2.5591,LCZ-6 +smoik,50.768581900328414,4.660581963753162,89.42857,LCZ-D +louro,50.551447874474945,5.406383081155375,208.98672,LCZ-9 +udmuw,50.49291540343607,4.44623422748681,135.87138,LCZ-D +fndqz,51.240452999368166,4.519305529552001,12.30238,LCZ-9 +slern,51.03389320235598,4.468060422727583,4.41189,LCZ-3 +ipzxv,51.21503602876531,4.851698655027932,12.43885,LCZ-D +ryevl,50.08817977751737,5.184056041576872,200.97017,LCZ-B +xqjpj,50.397973762306044,4.26863802146453,196.40666,LCZ-6 +xtryi,50.78450229542004,4.727068690685938,66.51328,LCZ-6 +ejowp,50.6796387941001,4.283114645891328,66.82462,LCZ-6 +zbodu,51.352514891060096,3.2783715314959485,8.62745,LCZ-8 +drryr,49.69418133636801,5.839077291163396,391.9447,LCZ-D +snzsq,51.115992131231444,4.915992229332141,18.15289,LCZ-6 +gcwli,51.06473073180406,4.048670202717704,7.00819,LCZ-6 +qcfwr,50.83229561882286,4.384635559424194,63.34046,LCZ-2 +cozaf,50.09130411975455,5.673352535332659,413.84018,LCZ-6 +dimlu,51.22045314266622,5.408458602406383,43.58883,LCZ-6 +gmoyr,51.07633554392735,4.797220050019801,13.09691,LCZ-6 +jbnys,51.16365442751548,4.044788240301069,4.71361,LCZ-6 +xdwkw,50.880235293519526,4.551456049733002,46.7087,LCZ-6 +wnzrr,50.07500245985046,5.083366091500408,256.19376,LCZ-D +vqvgb,50.8177529814909,4.3422249755894535,94.29604,LCZ-3 +jncst,50.41493328712975,6.256704833624121,570.37543,LCZ-D +ssrjc,50.81741569859785,4.369947725644516,75.42684,LCZ-3 +mkvhn,50.807096276236564,4.593730775578521,50.09923,LCZ-6 +ctvzj,50.99915558813023,4.818783355640021,15.92369,LCZ-6 +wgxck,50.8402563363525,4.426478514430589,65.25574,LCZ-3 +udvoj,50.579578673783274,3.7802837115159993,51.53199,LCZ-D +augvb,50.926083352348925,3.527380356373498,39.41595,LCZ-6 +gnbsb,50.909857016513,4.119059050716369,74.5324,LCZ-6 +lboft,50.42269617401508,6.079956865264584,496.43094,LCZ-D +piloz,50.98781020831366,5.417727771995436,55.95488,LCZ-6 +wgqbl,50.95341429045127,3.7700387536606486,23.80228,LCZ-6 +ikdzg,50.83987083051662,4.449051513665007,73.43532,LCZ-6 +umclh,51.175860154862434,5.166032218571583,30.89829,LCZ-6 +ycmhx,50.61078233419494,4.2839788590308565,104.94589,LCZ-A +jmmlw,50.883844325589585,4.5014732713474706,63.96227,LCZ-6 +adbhj,50.87177194100159,4.424759044186451,77.18215,LCZ-6 +rsgnr,50.71659136145523,5.973353881286326,202.17413,LCZ-D +kyqnx,50.470558175513546,4.861189009424926,101.38302,LCZ-6 +dymwy,50.88177700887761,4.705122210079955,24.54637,LCZ-6 +rbqtx,51.0536520090716,4.872284834454488,14.52981,LCZ-A +mnxji,50.7888014154457,4.274607766627793,30.04208,LCZ-6 +qmisx,51.02601551383756,4.679878145081023,11.74491,LCZ-6 +ikifh,51.271511675059195,4.671148179979822,19.48511,LCZ-9 +qodbd,51.234426251799235,5.419390714808521,39.587,LCZ-6 +bjlaf,49.69190556843432,5.815927856380053,402.90091,LCZ-6 +guibr,50.78438185668389,4.513107652827272,103.21214,LCZ-9 +kqpxf,50.72876652531088,4.386001915097792,121.90278,LCZ-6 +qdvre,50.81729305842673,4.338024610557617,102.31146,LCZ-3 +wquid,50.68661665166431,5.707010852640873,145.29102,LCZ-6 +ivlsp,50.72534747366608,5.059886234312747,94.45105,LCZ-6 +yindp,51.00367806200045,3.894161330019355,21.95779,LCZ-6 +mxaqq,50.34323952481615,5.055041821173302,262.91425,LCZ-D +nnejt,50.96027714439764,3.744604449010311,30.72424,LCZ-6 +umloi,50.93770658438848,5.32916626028179,41.6962,LCZ-2 +yudks,50.97314703124883,4.6361053707370035,10.31537,LCZ-6 +nlmhu,51.23769555345258,2.962223041684008,4.82387,LCZ-8 +uexgr,50.61527757103263,5.849998436311867,265.28275,LCZ-6 +nzvgt,50.83887749062113,4.029326688449206,12.44954,LCZ-8 +fxbuc,51.161170817777695,4.130352445516776,18.07738,LCZ-6 +wavuc,50.84401056410219,4.346890298295569,30.06787,LCZ-2 +kafqj,50.70315445310363,4.612527175469647,65.84211,LCZ-6 +yfhlh,51.0262706306669,4.484083662739758,9.37595,LCZ-3 +akluc,50.98311222802273,4.669780681755342,11.00243,LCZ-6 +phckh,51.02093515419054,4.790825456167311,14.80965,LCZ-6 +acbuz,50.59767420498495,3.3902602745793717,39.82399,LCZ-6 +foces,50.92247423674812,4.115871889794408,56.18313,LCZ-6 +ponct,51.313388725489084,4.909047940850507,22.26979,LCZ-6 +tblqr,51.16921514587645,4.998552301794405,21.34523,LCZ-6 +pwnhc,50.81338860109403,4.428823001382618,68.32813,LCZ-6 +plsvx,51.319169016345484,3.3073262360855216,2.81621,LCZ-6 +hvoxj,50.447136450073145,4.8981134987895265,171.60713,LCZ-6 +afhya,51.18843756934411,5.379304027872864,51.81599,LCZ-6 +ycwje,51.242013166598475,2.9087790440123737,9.36325,LCZ-8 +zvzbu,51.018418256872415,3.2707926723668113,39.45436,LCZ-6 +rduym,50.60023031917629,4.450730824988285,131.8638,LCZ-6 +iokjp,50.31978152629068,6.04830805677424,459.23309,LCZ-B +omhfv,51.26260771555993,4.190127271333058,0.00248,LCZ-6 +jgdhg,50.73365104651796,5.782166054980813,138.73553,LCZ-9 +ivlgk,51.274375636979244,4.642859107675966,15.24796,LCZ-6 +viarg,50.974270212914256,4.708730562205501,10.91971,LCZ-6 +dsbey,51.177332881067,4.098313093015499,12.22747,LCZ-9 +qbnii,50.88343890252273,4.709255964699393,21.26742,LCZ-3 +xnfrp,50.638608366919584,5.565791648860673,68.66223,LCZ-3 +tngcp,50.806178337790335,3.260925056804177,21.96898,LCZ-6 +hifok,51.31133070657558,4.945782036579479,25.232,LCZ-6 +zujgf,51.04065011629243,4.354244636624478,7.20471,LCZ-6 +pufcw,50.75191853466731,4.4701158050897,110.74471,LCZ-9 +oohsi,51.162953476323736,4.818651671987229,10.43578,LCZ-6 +kwehp,51.17224500383532,4.841223157370313,16.9698,LCZ-6 +ckjhd,50.829946446354,4.307421311092935,33.97295,LCZ-3 +skcfk,51.019945115249826,3.6537082350534504,9.92827,LCZ-6 +ynpsp,50.46610478289283,4.005027645491005,59.46035,LCZ-6 +ijbaj,51.23062991630963,5.298115332586496,52.11947,LCZ-6 +wmdlt,50.993787248283134,5.023549720763428,26.15152,LCZ-6 +hbqwx,50.756894174898356,4.566652689871539,53.3679,LCZ-6 +czgfs,51.0319173901839,2.8570288070925396,4.46334,LCZ-6 +fwbmm,51.186576750311595,3.7473387406413963,7.17017,LCZ-6 +haptd,50.521466964736035,3.926802091077503,80.7783,LCZ-D +mbncl,50.053022188041645,4.443424779862887,236.68192,LCZ-B +zkykc,49.62232123375342,5.675600524470799,298.14972,LCZ-A +rthsf,50.730485690294586,4.506947875338866,99.26279,LCZ-6 +ymyfg,50.545199362868914,5.530081432429383,213.92339,LCZ-9 +tqmpj,51.1866398672996,3.724501150505424,7.5601,LCZ-6 +iybax,50.811247101935905,4.412117658158931,91.11338,LCZ-6 +dgmam,51.25348548658165,4.516388482758728,13.16081,LCZ-9 +xnvbz,50.808272302579425,4.344484706863201,86.99055,LCZ-3 +kpjva,50.82209312123545,3.1741305329147695,19.672,LCZ-6 +eigho,50.638477094338675,6.022583034968954,281.71436,LCZ-6 +jaqrp,50.86381197156722,4.3912808290606815,74.68445,LCZ-3 +thsny,51.22569498842522,4.473286797848426,5.10961,LCZ-3 +eowfr,50.52978135476903,5.6371600257696475,246.62582,LCZ-B +ixriy,50.06966962458967,5.766843539732476,448.79694,LCZ-D +ptuof,50.51572922993519,4.088631266517781,120.46045,LCZ-6 +iuczg,51.30860480589776,4.56817741471347,30.56141,LCZ-9 +vtivl,51.06712057384336,4.026013112716021,7.03139,LCZ-6 +wnbkf,51.00377936293834,4.477224081442552,7.65807,LCZ-3 +plulc,50.42884529687215,4.422797380395901,148.34798,LCZ-6 +ujomp,50.02577784109342,4.5153690841850445,237.35625,LCZ-A +jmmbq,50.36622035704874,4.241005845658406,197.4249,LCZ-D +lntej,50.913576825356365,3.969045639137464,35.2805,LCZ-6 +mlpss,50.321654621506035,5.490593036132315,217.21867,LCZ-A +fifjv,51.20889291048804,3.3240926397218016,7.69098,LCZ-6 +dlzod,51.18742341860033,5.267935759492556,40.98025,LCZ-A +bnejg,50.40206853199948,5.890868186361896,488.04251,LCZ-B +htxmz,50.80200240773203,4.397566870658963,80.88951,LCZ-6 +qnubb,49.86387079245211,5.158220786481138,378.71155,LCZ-D +agosm,50.50011094670541,5.671898924979345,300.31244,LCZ-D +uvzck,50.9042975806596,4.663174821021299,72.31458,LCZ-9 +gsoun,50.338862056676476,5.18418305064571,288.72897,LCZ-D +xbjrw,51.046326052220905,4.8898686749425515,25.82333,LCZ-6 +cfsmi,50.98347473021195,4.038543155373827,8.61494,LCZ-6 +ejcxs,51.25314143563213,4.647812993367215,13.65619,LCZ-9 +qceba,51.02480021545398,4.356842094925336,5.54214,LCZ-6 +roaqg,50.27793706393751,4.413203502056006,166.66672,LCZ-B +pzjbc,50.92574194207141,5.3301804368125625,43.98873,LCZ-3 +qmmzp,51.31685598659194,3.2846384960843746,2.9013,LCZ-8 +owium,51.27304856299489,4.665531644129455,18.71143,LCZ-9 +shkzm,50.83765998935738,4.086608325054968,52.27604,LCZ-6 +usibs,50.94188414909824,3.2908109987779484,19.22111,LCZ-6 +oehfd,50.55531600375078,4.096615866564509,96.24896,LCZ-6 +mntlf,50.94243757433304,5.327162490015792,32.13548,LCZ-6 +qfjcf,50.90615557173897,4.723859649928916,22.52515,LCZ-6 +xlpyv,50.32209445269106,4.654481888267927,240.68549,LCZ-D +ctzoh,50.48225871542877,4.908136966690201,156.69774,LCZ-6 +qwpzq,50.297688154395765,5.322853737871542,216.77826,LCZ-A +teeyg,51.02214799406235,5.248246299126445,33.20015,LCZ-6 +thexf,50.158294882413394,5.6831537569764015,410.91809,LCZ-D +hrycq,51.21318757541801,5.436489442273226,45.55665,LCZ-6 +zjthh,50.76284626983749,4.464695560664909,90.21281,LCZ-6 +cennl,51.301335719021026,4.506202985082668,11.06093,LCZ-6 +vmfws,49.79453065960032,5.543777479322143,401.02142,LCZ-6 +umxgg,50.11706500789822,5.715215135148169,431.87616,LCZ-D +hnviu,50.61530550092901,5.590322068474515,67.12279,LCZ-3 +zougb,50.61405783629415,4.348074661138291,133.43155,LCZ-6 +vscfq,51.26855182426947,5.471015081071765,31.31106,LCZ-6 +ifnec,50.77703317062195,4.372824338174167,123.64989,LCZ-9 +joruc,50.60369510437917,3.6171956787988373,48.78571,LCZ-6 +ghmbv,50.89730725621831,4.814635300458111,59.85232,LCZ-6 +ksrwc,51.026970853395795,5.208809209253273,28.39402,LCZ-6 +uohpi,51.053571611073785,3.7576000043588236,7.90196,LCZ-3 +eowbi,50.81319638487212,4.395451360985562,105.47956,LCZ-3 +vvzjt,50.930258687446184,4.692443031200544,15.43338,LCZ-6 +rntzc,50.66056387947145,5.510106027973155,170.72284,LCZ-6 +avxnt,50.829053513159785,4.4925849779002185,96.79379,LCZ-9 +vzhpm,50.84159834072648,4.452237364628268,70.35679,LCZ-6 +lkvcu,50.940760360146946,5.205921888899817,28.63737,LCZ-6 +sksti,50.86805822928121,3.34369490673161,16.2608,LCZ-6 +nxmml,50.52607344581732,4.196952378662115,117.4441,LCZ-D +aibse,50.68716306795015,5.337728827862443,132.39897,LCZ-D +ekowv,51.2330996651647,2.9333916886843734,4.5776,LCZ-8 +vjhno,51.41147203805946,3.293169009591267,0.0,LCZ-G +ofgsl,51.395857486795315,2.431861448532178,0.0,LCZ-G +ntzna,51.20211840288329,4.420318536761207,7.76627,LCZ-2 +amlkf,51.2518391087307,4.499990634132832,8.32506,LCZ-6 +ecvsg,50.85524181820437,3.4157319170334914,10.81151,LCZ-B +zrmsg,50.88087356293659,4.090113000130222,5.10355,LCZ-B +xtmkp,51.11903259406151,5.338713360361583,68.85416,LCZ-A +zbwvt,51.31201692908812,5.197139292896476,38.22908,LCZ-A +aniiq,49.751679771627565,5.1426216170606525,398.82706,LCZ-A +efmum,50.416312031906465,5.537342975380135,165.40395,LCZ-A +friic,50.51799388755159,5.058990308760302,202.82961,LCZ-D +ksiqk,50.362984244610345,6.022168201488993,367.10837,LCZ-D +aphfd,49.99603128635414,4.236593180930519,303.90341,LCZ-B +eendu,50.26936955972058,5.867409290522622,423.36533,LCZ-D +dinna,50.765074503943495,2.9534596581487063,20.89262,LCZ-D +gojzk,50.64313758613626,3.769954859495468,42.46886,LCZ-D +nzjlh,51.32838015931607,4.929156745621782,25.95067,LCZ-D +raeex,51.27484860085382,3.0151572100218282,8.14811,LCZ-D +ntshi,50.852997203069336,2.8793718738749234,20.53285,LCZ-8 +aufcm,50.837730337467534,3.586625143768024,4.173,LCZ-B +klzaf,49.559441591775055,5.521048605014901,206.25136,LCZ-6 +dripq,50.391551805006074,4.987769279378095,276.28329,LCZ-9 +iskrf,50.71564141993524,5.954132940775794,212.60124,LCZ-6 +phdem,50.56276555617169,5.816778868313496,144.44427,LCZ-6 +psrif,50.96270179706036,3.590724602065553,10.8182,LCZ-6 +bmtyn,50.88577426956234,4.766795815844665,49.24343,LCZ-6 +ewpdp,50.876534787752874,4.751491822071263,57.66836,LCZ-6 +gzafu,50.89761882477616,4.711702119227893,23.73233,LCZ-6 +coeai,50.94058109627522,4.6795050648012,16.60208,LCZ-D +fcvhy,50.8713587785827,4.739624112630371,34.57358,LCZ-6 +qzurc,50.84142344099475,4.6997302166269685,56.28834,LCZ-6 +lzzbv,50.89173338040435,4.746432148993671,31.81824,LCZ-6 +jkjqn,50.84427209730534,4.856543035375666,52.55945,LCZ-6 +inlcz,50.74945570627741,4.3708898116395085,98.41355,LCZ-9 +rgabz,50.728762027786104,5.753653335666306,107.65039,LCZ-6 +bygxi,50.93175599251101,4.5414810173783176,19.16189,LCZ-6 +xeuuy,50.781504792429025,2.8357025291482345,57.97281,LCZ-6 +bqeyf,51.12730597726849,3.8807319945273395,4.30066,LCZ-6 +uxurs,50.74607704412764,4.82822321526363,102.6031,LCZ-6 +orwdj,50.850720347829615,4.7958891325100135,53.45566,LCZ-6 +ypqcm,50.99094193337743,3.9866222052221985,8.69532,LCZ-B +jcicw,50.80894582852265,3.929107215818274,23.14584,LCZ-6 +euuzf,51.23605854667768,3.7775843072224426,1.39634,LCZ-D +gimlp,51.03860402541571,4.103380913062918,6.60412,LCZ-3 +eygwu,50.99212815539825,5.262812128133127,33.461,LCZ-6 +prpnp,51.33012383661292,4.488493594302754,22.03012,LCZ-9 +whldk,50.81944313577082,4.342116820039922,95.13332,LCZ-3 +jlsmw,50.31762692216913,4.180499572005098,134.48251,LCZ-6 +lsuuy,50.958588278208566,3.7498055969830633,30.94039,LCZ-6 +tydpp,50.896902260789005,4.721453218083198,23.96953,LCZ-6 +hopcp,51.33322982301762,4.977193654122197,30.32384,LCZ-6 +jbyld,50.524562048086565,5.244572217258616,75.09016,LCZ-3 +bijsh,50.78504863204509,4.11991960940178,68.77878,LCZ-6 +mdhjj,50.813210951424104,4.340063041518799,100.64822,LCZ-6 +bwpbr,50.602886750021234,5.572912681490225,76.07445,LCZ-6 +icayk,50.797660077816154,4.382865030868428,96.95101,LCZ-9 +prsei,50.904530072954024,5.351937266007384,56.72629,LCZ-6 +xmgbb,50.89934168782031,3.6220797880248994,17.07583,LCZ-D +zbnxh,50.82964734914544,4.348827533192948,86.55132,LCZ-3 +xvdmn,50.72691283671649,4.498850950019312,64.96143,LCZ-6 +gwrwb,50.96274404564342,5.508721517224191,89.46696,LCZ-6 +dkrwm,51.056917179513704,3.733931969788268,10.41406,LCZ-3 +zhjrb,50.69372763529735,3.3420235498601323,22.1672,LCZ-6 +kqhjd,50.86792987645592,4.316739550329559,52.6701,LCZ-6 +qavod,50.89428131235563,4.438677764893979,30.65092,LCZ-6 +vhbtf,50.545925369456896,5.636335061196591,235.17757,LCZ-6 +icfil,50.50304644047511,3.7901306127918524,66.84704,LCZ-6 +ipxdk,50.818752765828144,4.3745810939768,98.40566,LCZ-3 +idbha,50.73306498331292,5.752546991142362,135.67853,LCZ-6 +dejdd,51.05314956159225,3.690608998296591,7.20406,LCZ-3 +ajmnv,50.57199385938739,5.8127230962520615,153.61076,LCZ-B +zalzf,50.96874634600267,5.470710028759123,73.79927,LCZ-6 +suttl,50.537707025906975,5.063852475969294,202.95224,LCZ-D +zvrrv,50.638148004254816,5.566489451101957,68.13187,LCZ-3 +mjhnu,50.59668936518015,3.3875165985117985,47.47719,LCZ-6 +nmkkn,50.86257308077213,4.303996405591261,61.73229,LCZ-6 +guhaa,51.12709867371201,5.354441234565753,62.95356,LCZ-6 +exqct,51.06825825395212,4.48948222872047,4.51489,LCZ-6 +ztsqt,50.887972469738216,4.535366074062037,48.18033,LCZ-6 +xsttl,50.97842316862546,4.338956684009071,14.83003,LCZ-B +gmqhv,51.21907323110862,4.254117970206306,10.97585,LCZ-6 +hsqhs,50.78247315291059,4.315471623198862,37.05918,LCZ-6 +vtpqq,51.08982864374573,4.509310757416401,7.86818,LCZ-6 +smomj,50.53614654419719,5.438992958021294,262.97092,LCZ-A +eeegl,50.71587379458725,4.497396682221787,99.85784,LCZ-6 +cgggy,50.87289611336225,3.1799779213499666,18.8568,LCZ-6 +uctrp,50.94308492151595,5.2793386403007645,37.7631,LCZ-6 +zuivg,50.96716771078595,4.532162509185854,8.37703,LCZ-B +auyoj,50.566943914153825,5.692249514833295,124.4946,LCZ-A +ciwuv,50.73330392115675,3.2102069307753758,55.29951,LCZ-6 +mtdfu,50.84977623420101,4.268358181827053,66.05974,LCZ-6 +zwmkt,51.04289732199684,3.7208498757943884,7.37191,LCZ-3 +mksmg,50.5937592362748,5.521171640213678,127.38804,LCZ-6 +akhxt,50.79024134121671,4.37229082942126,113.76492,LCZ-9 +pklxc,50.662117714588064,5.183891897522319,124.57402,LCZ-D +drzqe,50.94930174973529,4.361584767785958,35.86171,LCZ-6 +tanlc,50.70774359827049,4.094448599621368,70.75988,LCZ-9 +avrdc,50.67444800431086,4.467588164232658,102.74695,LCZ-A +isjrh,50.72320580522053,4.787627202389678,135.9821,LCZ-9 +iwzto,50.83426937996842,4.822890721240273,59.52865,LCZ-6 +xuctp,50.88324755073741,4.749755464214227,90.40956,LCZ-6 +gdzzh,51.0325456196974,5.7088171757517685,39.05702,LCZ-6 +iepwt,50.91953409545567,4.934359686023651,54.99408,LCZ-6 +xuifv,50.66335961956011,5.601090576533055,65.70415,LCZ-6 +bqkyh,50.86179782599567,4.8954769349471245,64.96222,LCZ-6 +emltp,50.74614602706097,4.3666543520995456,116.34447,LCZ-6 +fxsoz,51.213790079985664,4.499519845013186,7.02309,LCZ-B +urhpe,50.56653213718775,5.799199852125456,215.3382,LCZ-6 +wurjq,50.6924829130091,4.3861278326450215,99.2152,LCZ-6 +wyrtk,51.13786060753544,4.602739889597784,7.31747,LCZ-6 +xblku,50.69841106602269,5.492992838805096,142.1179,LCZ-D +ufxwc,50.747653685763645,4.382140919533725,114.77185,LCZ-9 +zkjpt,51.04832158583042,4.912922380756391,20.65514,LCZ-9 +eutrh,51.342372485809854,4.978081386767659,28.28973,LCZ-6 +mthjq,51.001093972865284,4.524451588802713,4.15321,LCZ-6 +jagwl,51.127099433938945,2.6319743173571224,11.50708,LCZ-8 +ktoay,50.900812514647924,4.373107258196673,50.12902,LCZ-6 +utjgo,50.68625770977094,4.373641553190321,107.75399,LCZ-3 +gkynw,50.66564511564774,5.274392420134045,130.94466,LCZ-D +qlkhu,50.85766716103801,5.471049812518152,99.57113,LCZ-6 +jdogr,50.56812766432704,4.068945363236655,90.29243,LCZ-6 +snwtg,49.688411129091435,5.763507428624637,372.20886,LCZ-6 +kpdrx,50.59597357306136,4.49880778213164,110.16909,LCZ-9 +drhtv,51.04865245583544,3.739415290265351,6.71678,LCZ-2 +xqglc,50.641372572466054,4.625519325903341,118.19618,LCZ-6 +frotk,51.087300264095624,4.922133474721457,17.91475,LCZ-6 +ubynb,50.37620797194702,5.05157353054009,264.1524,LCZ-D +wamgo,50.82852349491228,4.499508687635162,79.8621,LCZ-9 +icnqc,50.84497470366924,3.09445395591856,23.73878,LCZ-6 +nwjbx,50.60122583891369,4.930938736871455,145.57007,LCZ-9 +noqdh,51.00718780065612,4.66696047039321,14.27336,LCZ-9 +kgpjs,50.804858473690885,4.329470471301714,44.07685,LCZ-6 +toybw,50.375621830051465,4.4169598259599265,173.43581,LCZ-6 +ilreb,50.99424429667406,5.523240829813725,80.7904,LCZ-6 +tqpjp,50.825281301971835,4.4066508856002615,87.72942,LCZ-6 +tattb,50.72028589840885,6.038706402542577,270.46942,LCZ-6 +dobzr,49.61694075092916,5.650996693388142,268.68118,LCZ-6 +wwicn,50.91010826938578,4.28410428064395,54.22973,LCZ-6 +xjxsc,51.322392025078976,4.872471717116512,24.80732,LCZ-6 +xwsku,50.60554177194059,4.325167770922048,114.15691,LCZ-6 +bwhxc,50.867900785870155,3.749901229064271,20.61645,LCZ-D +zlpca,51.08238265658013,4.317462015245672,2.04516,LCZ-6 +ijuao,50.60455321440763,5.125713985093318,147.82973,LCZ-D +jliia,50.41710375337358,4.782221337630609,182.00311,LCZ-9 +dxmfn,50.93047201386669,4.560558334002224,15.81256,LCZ-9 +wwqti,50.83817905308704,4.467406153882838,101.82658,LCZ-9 +gjols,51.19977830981736,4.526420992586361,7.27741,LCZ-6 +sfetn,50.586652959003004,5.834042488754364,212.95978,LCZ-6 +hxmqx,50.40835176253996,4.684412497965406,169.29424,LCZ-6 +gsmnh,50.82313649703912,4.405412947658612,79.07747,LCZ-6 +kbikd,50.81407066473935,3.7937598255792997,44.25017,LCZ-D +pyydi,50.701894409392324,6.075996675461857,243.45152,LCZ-B +sssle,50.57468232526417,4.165105917965028,103.19185,LCZ-6 +unkkm,51.30972374743315,4.827356906496735,25.33533,LCZ-6 +dszdr,50.70173145373285,5.607455000928735,144.8067,LCZ-6 +enzqq,50.833716319898954,5.208016596441763,44.50074,LCZ-6 +sabmv,51.21107390586414,4.395193580191638,8.36857,LCZ-2 +gvrkq,50.618167995854755,4.32075609791372,130.03525,LCZ-6 +yarsh,50.87011038047604,4.497444672403931,56.74232,LCZ-6 +acpxg,50.71891040410545,6.103964940580757,271.44485,LCZ-D +vgbwn,50.960373202349075,5.476322512439782,54.66203,LCZ-6 +nvpjg,50.530137159325605,5.227280637493631,144.27475,LCZ-6 +woili,51.219422572659774,4.384823386868277,8.7731,LCZ-2 +pvjoy,50.488356701803745,5.1243595961366,135.21518,LCZ-9 +xpfwq,50.330036987327674,4.396138409830514,144.26805,LCZ-6 +wvipp,50.82818074440325,4.25216684066227,64.70288,LCZ-6 +fjdro,49.77376356945328,5.524426379853421,390.29309,LCZ-6 +ueznu,50.98780625288107,4.818586901929564,15.64682,LCZ-3 +fqdkz,50.49788690862171,3.7895951374623937,69.15012,LCZ-B +egfuy,51.32398128899184,4.967452570444522,22.373,LCZ-6 +zwevx,51.08467117122802,5.712035854590738,35.52993,LCZ-6 +gsplq,50.87794782724626,3.187382778677762,27.84301,LCZ-D +htjdt,50.69219293802234,4.82874442257883,86.27957,LCZ-9 +mxupm,50.44823485982157,5.056726462518112,146.63321,LCZ-9 +casox,50.70089554011339,4.547637795534271,105.73702,LCZ-6 +cxaok,50.72321317511254,4.3945944047843675,130.83937,LCZ-9 +hdklq,51.19102577868962,4.443531101699982,8.80479,LCZ-3 +pipbn,51.26901247835041,4.4103144333559845,3.63578,LCZ-B +jedvo,50.69318412272227,6.091265057032952,270.3689,LCZ-B +bwuac,51.195598563801205,4.8446746703254995,13.335,LCZ-6 +kttvu,49.94528277093232,5.681566248616028,494.66174,LCZ-D +dmcok,50.672843802219774,3.35070036518573,15.88251,LCZ-D +ghkmh,50.5987392479391,5.4843426154698305,76.61488,LCZ-6 +mnqnf,50.63727849188535,4.6591200201737735,139.67352,LCZ-6 +cxkqz,50.63398264306696,4.614126896980499,142.23174,LCZ-6 +avymg,50.441248819736394,4.8990485953665015,200.23006,LCZ-6 +wegsy,50.91390199948107,4.5289547690148835,20.01485,LCZ-6 +wfxcu,50.84267430391218,3.3155336190493867,14.30508,LCZ-6 +czids,50.50219227067927,5.382750185997535,249.49725,LCZ-9 +lbvvc,50.887673478930175,3.1977295693363446,25.79176,LCZ-D +gyysb,50.88542388026149,4.476363943675011,42.77913,LCZ-6 +qbbty,50.940299468532466,4.686543643824172,13.30758,LCZ-6 +xiarm,51.019249933164524,5.342254737317844,45.19523,LCZ-9 +kepkh,51.06210742029325,3.4448096789688742,17.89762,LCZ-D +pfebh,50.51081675991455,5.399846654356286,254.42001,LCZ-D +pzsqt,50.96917442166543,3.6155910323680516,7.89474,LCZ-6 +jvhpx,51.06948757983183,5.075438595372647,28.96151,LCZ-6 +dummz,50.670594127568926,4.036090930415929,60.06354,LCZ-D +wzfpr,50.995806643191244,5.192819365938819,26.50847,LCZ-6 +gxoow,50.84848700406074,4.49462666005533,67.48164,LCZ-6 +zvsyy,50.68167246717887,3.8256513090058624,23.61792,LCZ-D +vimab,50.715989581657134,3.215730241042168,23.56602,LCZ-6 +yhnbj,50.86105149857121,4.671611635701493,35.17916,LCZ-9 +zjqfe,51.10020908325961,4.041500377839647,1.74326,LCZ-D +ohiuu,51.18264086859181,4.559762150310097,10.8951,LCZ-6 +ouoyv,50.911202237784664,3.5177731152216167,46.0801,LCZ-6 +opsly,51.18585705083283,5.517480428888609,46.19236,LCZ-6 +oyisc,50.977547423515944,4.509103231950175,10.3325,LCZ-6 +uqbnl,50.86568822463986,3.2261182725440127,19.55807,LCZ-6 +syxtl,50.974093259199215,5.670063196100589,45.95153,LCZ-6 +ufrlc,50.91399257368186,4.805019892575401,40.32822,LCZ-6 +dkgum,50.87656871781647,3.4305086389958777,13.72068,LCZ-6 +wwncp,50.808581064025034,4.438175182466396,65.81878,LCZ-6 +dnfqw,51.289647517225625,4.5069195430998645,11.36627,LCZ-9 +zlkhv,51.02643890215917,3.6627982167062476,8.61038,LCZ-B +bfgcs,50.79248591015027,4.379241540566496,111.99115,LCZ-6 +icgpy,50.85960798932363,4.485435754165154,72.7957,LCZ-B +qwykj,51.219180816308395,4.2564605318520625,4.55062,LCZ-6 +dufxg,50.75399471037258,5.208510752128046,95.34641,LCZ-9 +vsstx,50.68895847113163,5.60113405379579,143.21432,LCZ-6 +ekhhu,50.84543796397545,4.475286513646461,67.02271,LCZ-6 +wxspn,50.76377503730878,4.382716027574197,126.58479,LCZ-9 +xuqlv,50.34576523865854,4.301394363999584,190.70229,LCZ-6 +edflc,50.96656686791889,4.749160812143065,11.9504,LCZ-B +yrlev,50.689694534527995,6.09727709726048,269.04248,LCZ-D +kspmz,50.599890488550884,4.062615785968418,80.36754,LCZ-D +bieeq,50.982310613260104,4.087194393102236,8.73226,LCZ-6 +rxnkm,50.94130885333209,5.388699686507814,39.35499,LCZ-B +ujnrf,50.77678274631878,4.364379158625092,100.14397,LCZ-9 +mfpvq,51.21392638848599,4.0871387482026345,4.11012,LCZ-6 +uesxy,50.89603224024885,3.996889998946341,59.99407,LCZ-6 +qqahw,51.133905587435414,3.978273993168882,3.0616,LCZ-6 +jwcem,50.577821221310344,5.779129243380963,198.40306,LCZ-B +fmabv,50.58455861761489,3.930871309131321,65.08855,LCZ-D +ohaie,50.823219808006286,4.433821851919428,79.16349,LCZ-6 +eqwfw,51.30525974274676,4.983320461904247,21.37726,LCZ-6 +hqkdq,51.01112112714781,4.651939706658992,13.34234,LCZ-6 +cacyt,50.34049154388967,4.3913117079217585,207.92638,LCZ-6 +jdkme,49.79642803014459,5.542792816143271,398.77988,LCZ-6 +kadho,50.85392413278558,4.208694224865449,32.39253,LCZ-6 +uhuia,50.715431174766366,5.602404267975824,132.06447,LCZ-6 +rjpeu,51.20849122160384,4.399379735904574,11.01596,LCZ-2 +dyzgi,50.794269490859286,4.491562098307465,124.12521,LCZ-9 +mgoag,50.568383905085206,5.792887477133965,136.41205,LCZ-6 +hxlfp,50.931764239146766,4.080937766893273,25.81283,LCZ-6 +mcdju,50.84595936577056,4.846779555669185,55.53519,LCZ-6 +kotml,51.13569822560141,2.6797721343323633,14.506,LCZ-8 +ahboo,50.79868499299311,3.2443962019198977,31.11772,LCZ-6 +rkvlo,50.29649083157077,5.45840259944449,204.61377,LCZ-A +twoex,51.17165852391729,4.44798182360767,15.28976,LCZ-6 +eamol,50.99608387095979,3.3281731666689125,47.63245,LCZ-6 +uztsx,51.147302571158626,4.463870744179546,22.29,LCZ-6 +lhcup,51.32507943635916,4.410990848032831,6.88014,LCZ-D +jswjc,50.9416570031898,4.732995863647972,14.00909,LCZ-6 +raqrc,50.75464907577244,4.324837774530473,96.25059,LCZ-9 +rkuan,50.7933991748713,4.36650737485731,97.10978,LCZ-6 +rhzif,50.86577289603381,4.246081228124013,42.57785,LCZ-6 +wtacm,50.71382346668564,5.286386802438429,106.01427,LCZ-B +yyntj,50.56960036301632,3.3525461711370568,41.86065,LCZ-D +qoytd,50.88796498727664,3.729582661409668,16.11808,LCZ-D +wxcdl,49.57603823225289,5.825872172678825,276.90063,LCZ-B +vcpij,50.79550370987694,4.415323197924231,78.40489,LCZ-6 +cvhjh,50.912684485526924,4.362122704374765,52.39486,LCZ-6 +hkadh,50.81297326602415,4.426659926299471,84.61983,LCZ-6 +vsnfj,50.73370131741615,5.729034651082568,77.08216,LCZ-D +zzbrd,51.19995051290854,5.508525359035649,46.04005,LCZ-6 +kptpt,50.93279227960449,3.778612360320447,34.39557,LCZ-6 +jyqyr,50.425939801702846,4.44686790293478,130.91512,LCZ-6 +xrpjd,51.12084386930821,4.2256670897505115,1.09653,LCZ-9 +wfyuf,49.84958861320583,5.530291935514195,473.69504,LCZ-B +vbebs,50.67976971002244,4.857753418501823,114.35666,LCZ-9 +ubnjw,50.78897837102289,3.2605403851580244,53.40121,LCZ-B +tbyqz,50.816232966751805,4.31887274899749,25.30851,LCZ-3 +pjjtf,50.52829919790657,4.784431038155816,179.35139,LCZ-D +xetws,51.0464254536464,3.6953674366903275,6.11267,LCZ-6 +svskc,50.92629565224529,3.963766962509115,34.44104,LCZ-6 +xtwpv,51.078526958140785,3.447258779955576,21.3241,LCZ-6 +egusn,50.48151967835454,5.724486878869948,175.00983,LCZ-9 +fygvc,50.580142570610825,5.786893230327933,281.84766,LCZ-D +pdjaw,51.00034573993825,4.721335212130549,16.21856,LCZ-9 +owyhz,50.9875482648467,3.9773939439639525,9.59423,LCZ-B +asgli,50.990889180105974,5.22412787552575,24.26031,LCZ-D +iwfnj,50.898242491517635,4.166402106670524,70.25581,LCZ-6 +unxlc,50.970235582886545,4.155531982502814,21.14553,LCZ-6 +rofba,51.17035810964787,4.482815874464227,15.72188,LCZ-6 +mmhvd,50.964425443586215,5.51303592502344,89.15073,LCZ-6 +bowfe,50.45478576888423,3.7723679987145906,23.79423,LCZ-6 +nqbes,50.77856609645505,4.329891712474029,84.94383,LCZ-9 +ncclz,50.58046709221742,5.5019846480621615,185.24446,LCZ-6 +gifdv,50.96014889726334,5.311926528448854,33.67572,LCZ-A +hnlvr,51.08355537007363,3.4556183352020886,19.70735,LCZ-6 +ufxre,50.68830319472512,4.623954876943768,111.14033,LCZ-6 +uucsb,50.85276499102421,4.346090743362759,34.64936,LCZ-3 +byvae,50.615700447415655,4.551109138886279,109.0084,LCZ-B +pxhzy,50.95420247100166,4.549463856903376,9.76677,LCZ-6 +optqm,51.00396799554885,3.752927261539776,12.20579,LCZ-6 +zlxsl,50.80722305003449,4.421678318052729,97.28025,LCZ-6 +chpvp,50.798865862636376,4.366748308135226,68.55898,LCZ-6 +uzqjt,50.783300085969415,4.370032261897972,100.36195,LCZ-9 +jcizg,50.62714095529703,5.629100939030104,184.6472,LCZ-6 +tkwoq,50.73545794934442,5.732308522900618,132.88542,LCZ-D +lwzcc,51.11494336331709,4.546429334247058,6.60477,LCZ-B +paved,50.67239660111194,4.386033424626841,117.59116,LCZ-6 +llaok,51.13740099566692,4.131556513862144,28.32769,LCZ-B +puecs,50.830091835316885,4.41596726947568,89.26367,LCZ-6 +zbwba,50.94351673703437,4.694584173224223,11.42854,LCZ-D +ljbal,50.58551782185778,5.341230698577,199.612,LCZ-D +vousr,51.20798009146132,4.447854896953897,-1.51282,LCZ-D +ucddf,50.42370368086273,4.466748393278316,129.9287,LCZ-6 +bcrdf,50.699566944953304,3.9320613136591342,67.23992,LCZ-9 +kuqmd,51.25877827309664,3.0102178543685025,6.64041,LCZ-D +jvery,50.74863368869236,5.687143215430833,57.43731,LCZ-D +rsiay,50.96676110292542,4.325066196521543,19.04053,LCZ-B +klpao,50.64498488849252,5.184104415096145,131.26247,LCZ-9 +yzoul,50.45708462608723,3.75649918609615,23.1481,LCZ-B +usjaw,50.709328863680994,6.099649297564748,253.37181,LCZ-D +hkqjf,50.775549239709434,5.6653556883668195,74.62965,LCZ-6 +wlmjd,50.50394365516254,5.615350156037625,171.51343,LCZ-A +sdzdl,51.02407412155068,4.510586712991573,1.50454,LCZ-B +pjvxk,50.92242654597704,4.080432897233515,16.90533,LCZ-D +shhwv,50.934335442468395,4.186382200471613,40.72015,LCZ-B +fevba,51.18798858232647,4.809134643148557,18.40393,LCZ-9 +vxzvj,50.82831433698157,3.5775780837820896,9.72586,LCZ-D +ieufd,51.37145127471276,6.124227369928835,22.28841,LCZ-6 +nadnl,51.51733370986383,6.091525364138036,18.68749,LCZ-6 +cjrnp,51.56781795361483,5.999710422576453,18.08219,LCZ-6 +jkvhg,50.900915773800406,6.056743412911652,110.2803,LCZ-6 +gictg,51.60531555956314,6.0008150788304,16.02503,LCZ-6 +jpmru,51.40970111328469,5.682627539588746,25.71001,LCZ-6 +cvmik,51.37698183928771,6.148642057364109,19.70084,LCZ-3 +ejmjx,51.589916426646965,4.77716323555808,6.41737,LCZ-3 +gsbpn,51.540871686360404,6.062367209660068,16.503,LCZ-6 +fmdjx,51.50303526841409,3.9070340978004396,0.09541,LCZ-6 +ruoic,51.5055345124006,3.8733204704143835,-0.00939,LCZ-6 +kyweo,51.58626220942366,4.793879113556897,3.83961,LCZ-6 +embrg,51.49481514027698,3.903518628614253,0.01538,LCZ-6 +hluue,51.365626243654745,6.1827535994595095,25.83452,LCZ-6 +izpij,51.3440304979027,6.134961533047904,19.95971,LCZ-6 +atqxa,49.80420149637954,5.043312814696646,229.4975,LCZ-A +bxfzz,49.802626984694896,5.0128731183537,393.72519,LCZ-D +txqab,50.563135981851914,4.70149208168007,175.66606,LCZ-6 +kzecm,50.879747137459454,4.695851081652553,50.27347,LCZ-6 +fatxa,50.87590169083848,4.713844983180829,39.44094,LCZ-3 +qblqh,50.967445809799564,4.710609504768542,11.47236,LCZ-6 +psheg,51.15370844014454,4.670691242431708,9.58886,LCZ-6 +oxetb,50.55555595136961,4.681913214766045,160.06194,LCZ-6 +vfppq,50.94391856123322,4.229726381052096,27.26778,LCZ-6 +iuobm,51.19751374182704,4.499756039710303,6.21342,LCZ-6 +dczcm,51.25329315225467,5.961138877756702,22.30448,LCZ-6 +bkpfn,51.11438693564814,3.9890438430513044,4.90009,LCZ-6 +hgxuc,49.91057972115141,5.512922698043619,540.5777,LCZ-A +jruyz,51.190740258564134,3.0719095644217274,0.0281,LCZ-D +kihbx,51.075172125267486,4.939935086775899,16.39189,LCZ-9 +dmavg,51.31996624763023,4.378823206488244,4.6737,LCZ-D +dnjph,51.06042966693869,3.732205566856147,12.57447,LCZ-2 +dydzj,51.14656779837957,5.527949919966569,58.99854,LCZ-6 +bmqbw,49.578913191386604,5.819234457900633,287.87982,LCZ-B +kqasg,50.611377904888926,3.7575378935604387,38.21447,LCZ-6 +zsrev,50.842400729418685,4.444914961738115,49.02462,LCZ-6 +avvyb,50.63555946736066,4.540643416988662,104.92221,LCZ-9 +wtoiz,50.73662081808562,4.3889892337389504,123.0416,LCZ-6 +wwdev,51.08046277413644,3.8101005055201433,5.57785,LCZ-6 +chzow,50.96286189103304,4.474078604122099,8.49009,LCZ-B +zlhaj,50.44047317591508,4.0592036060911925,63.13583,LCZ-6 +eessk,50.85484128767292,4.4269387896626595,66.53455,LCZ-6 +dgege,51.173765135968125,4.1688580154723125,16.13031,LCZ-6 +wosdi,50.82139992460873,4.339697706876826,50.16236,LCZ-3 +imrwx,49.678974159842944,5.361503478599564,328.21402,LCZ-D +wdfpj,50.859431198676724,4.735752386269075,40.42527,LCZ-6 +nekuw,51.18881673616361,3.102138234861163,4.94395,LCZ-6 +cauuf,50.89255913551921,4.44300829352538,52.82521,LCZ-6 +lzzzz,50.810218278859026,4.6569736190759725,61.96646,LCZ-9 +ifjub,50.596671494620146,3.2812308810850284,62.04235,LCZ-6 +phjqw,51.330023248902066,4.877054861986267,27.2957,LCZ-6 +yvaxm,51.24000173140352,4.40425094086403,10.01533,LCZ-8 +aqmna,50.93289668974225,5.3368863877747055,39.78773,LCZ-3 +eengu,50.9836692916135,2.8693159611839043,5.60786,LCZ-D +plmbp,50.806576375204244,5.669093048108502,68.98843,LCZ-D +tevmm,51.24696991100143,3.530781842937827,2.99154,LCZ-B +szafn,51.20542144974498,3.2069908582764337,5.05933,LCZ-6 +knhcu,50.72727730562438,3.853369527620411,26.52238,LCZ-6 +ffqxf,50.89753380247487,4.363748121298944,57.84351,LCZ-6 +cpfvo,51.191878604190755,3.234744186558096,5.74951,LCZ-6 +ynlkh,51.16910365251707,3.686572793735989,7.71794,LCZ-9 +famxn,51.20667030112635,4.425762936238936,7.78698,LCZ-2 +qfcnb,50.509413041171555,4.491643036224509,137.36093,LCZ-6 +qtrjt,50.76747606690855,4.7455061727661505,75.48774,LCZ-6 +qihfu,51.143345837618234,4.631619746995872,9.50073,LCZ-6 +uzewx,50.886888755177715,4.916336789006683,79.09625,LCZ-D +aomul,50.659661373200294,3.2570889243365753,27.23855,LCZ-D +gzunk,51.211057731511524,4.3925982900186975,10.43226,LCZ-2 +onzfg,51.23359931745558,2.960125981901122,2.74351,LCZ-6 +kflkl,50.769441939847596,4.2897276238086315,39.52665,LCZ-6 +wselt,50.84259941056633,5.183215180820281,35.81188,LCZ-D +pagzq,50.85270120596572,4.58636783863909,50.35449,LCZ-6 +efbgc,51.02212211479604,5.295979269651224,34.90376,LCZ-6 +osufq,49.6934045428168,5.801324483193279,398.36453,LCZ-6 +jqger,50.409944686403655,4.60864682935705,167.49323,LCZ-6 +hdalw,51.10252630036705,4.406506336557294,25.10822,LCZ-6 +yidxp,50.18931201312395,4.539675639002547,289.96304,LCZ-6 +qqypm,50.59670569041564,5.3041623448740385,179.72359,LCZ-D +dsxao,50.91542353254775,3.5243584741298677,46.6819,LCZ-6 +atbbu,51.17943324623217,4.157962500986613,17.67319,LCZ-3 +pqapt,50.85000101299503,4.4074189700058035,89.28056,LCZ-3 +xhkud,50.90710767197535,3.8338945731367757,56.46583,LCZ-6 +pvxbq,50.46308109946846,4.652521623253657,140.28038,LCZ-6 +qhfof,50.41200642099909,4.589521165962429,114.93621,LCZ-D +jxiwb,50.446957413532786,4.379516671437236,136.9937,LCZ-6 +dgouv,50.92782221102206,5.341885702591748,43.15369,LCZ-3 +hczdt,50.60159985584794,5.448853371380612,69.22528,LCZ-8 +vpfyh,50.82451205649767,4.388197111165723,81.74289,LCZ-3 +zuycg,50.97371183317089,5.289969221855956,36.40017,LCZ-6 +fdahw,51.16578787767616,4.1385742744871825,17.20603,LCZ-3 +nfggy,50.89316784126178,4.708000278415341,19.71251,LCZ-3 +iyuai,51.28824532213697,4.51790452744883,12.5451,LCZ-6 +zsral,51.218932681538256,4.434828978222009,4.99735,LCZ-3 +ujrxd,49.71641871655861,5.558830590344264,353.14609,LCZ-D +ghbjq,51.081458409549576,4.839768450564713,10.96371,LCZ-6 +jcyrm,50.79597314719813,4.3827561543075575,101.67497,LCZ-A +wgoxy,50.530166083613615,5.413197486531473,242.60527,LCZ-B +hcyjb,50.076711154644684,5.121626158540475,254.30412,LCZ-6 +nxtes,51.09286229530644,4.6827809917883005,7.6704,LCZ-B +gbsjw,50.82625819950165,3.168024184898194,18.47169,LCZ-6 +actud,49.57299629334982,5.835352977961086,295.95697,LCZ-D +gxrmv,50.89235819638719,4.733405033028794,31.06388,LCZ-6 +mksvo,50.69427980959171,4.58506670076536,108.17326,LCZ-9 +hihdl,51.18445306715246,4.152904364561523,16.15109,LCZ-6 +pfnoc,51.2960628007861,4.586568139746115,23.30702,LCZ-6 +dkdqv,50.461923131661266,4.1428441315227245,96.44567,LCZ-D +xsriy,50.484551505207335,5.019879202962762,132.28897,LCZ-9 +fshpa,51.11512022216585,3.6679092363122505,7.15507,LCZ-6 +eicsi,51.058021276354125,2.9101048818234565,9.88383,LCZ-D +bwkkf,51.144837314449454,3.311271639783714,7.39639,LCZ-D +eeovg,51.053356543740485,3.713074358727785,11.95826,LCZ-3 +vghoi,50.29180494570913,5.915347891735568,380.22379,LCZ-6 +nbzec,50.96716850464101,4.748752105235298,36.63037,LCZ-9 +dycgs,49.680479263449186,5.442054395041263,353.38864,LCZ-D +gtcvf,50.84309831986565,5.510523095379928,79.95599,LCZ-6 +kavte,50.7821975892887,4.896769328228086,55.47684,LCZ-6 +khuhc,50.86831461233491,4.319948108568406,51.27055,LCZ-3 +kyvgu,50.321182291192805,5.817604704046033,454.45221,LCZ-A +slizv,50.844823441698196,4.2595281141342305,80.93626,LCZ-6 +mhhvc,51.34358304942258,3.259588257866796,0.0,LCZ-G +fzocz,50.62993246250238,5.925509518271673,274.28186,LCZ-D +anmab,50.628975267452006,4.761719288833395,144.19337,LCZ-6 +ycwko,50.93189877668545,3.1589164518680417,17.89119,LCZ-6 +comnp,50.51044756118833,4.787098963016886,177.44743,LCZ-D +qcazm,50.79599027263816,4.3783204193647425,102.42307,LCZ-6 +sdlrp,51.06123047386828,3.076489097428321,19.76438,LCZ-6 +brbqh,50.6312385941214,5.5393081433915805,97.55558,LCZ-6 +odjab,50.79146882711025,4.167140829015372,43.15373,LCZ-6 +patza,51.202464501306814,4.391554421686247,6.47503,LCZ-8 +pflrl,50.97123141150161,3.6722351436430856,8.68797,LCZ-6 +mdqsf,50.86317886422593,4.364144292232681,19.69016,LCZ-3 +byvgt,50.829139301824945,4.346797919688248,77.60611,LCZ-3 +pylbd,51.187641094567844,3.150220542963256,13.26636,LCZ-6 +pkoik,51.113043955928305,4.212734455615608,8.45886,LCZ-6 +sqkse,50.37393981855835,4.4071476958215134,136.96208,LCZ-6 +noxah,50.993306549055866,4.680093309194861,13.71908,LCZ-9 +axvxf,50.812447760679696,4.376784063305424,89.94025,LCZ-2 +mxjby,50.82108836967143,4.840048628909839,70.28443,LCZ-6 +isfms,51.36065316304769,3.321244870391266,7.96994,LCZ-6 +sjhxx,50.88262630749546,4.332691660803026,38.76361,LCZ-2 +zvsis,50.462931243427256,4.948533879896257,168.64746,LCZ-D +zmtmt,50.84927054346014,4.405005219387323,86.88994,LCZ-3 +qenix,51.11780297931128,2.671360198904061,7.28358,LCZ-6 +wbcrm,50.49162717156932,5.648824051679346,255.68706,LCZ-9 +sbqna,50.81477467859392,4.371234779524081,94.55547,LCZ-3 +cgnur,50.901975870442676,4.144105592217948,31.92219,LCZ-6 +swmyu,50.92377524014726,4.501014592235801,22.81489,LCZ-6 +vtqqo,50.85417324147084,4.390242576664884,83.83592,LCZ-3 +wuukq,50.569738854551076,4.352925591308641,154.00685,LCZ-D +rngvq,51.05785504421469,3.7358840236688304,10.92517,LCZ-2 +vunar,50.86387852610051,2.73588920585453,22.15552,LCZ-6 +dplgc,50.673928954128854,4.380272568688669,105.30076,LCZ-6 +ietys,51.07411202843179,3.5327182229939464,8.06878,LCZ-6 +bpqcn,50.8285517215654,4.374243273777397,81.05747,LCZ-3 +zizty,50.93811341630438,4.368221263433105,21.98021,LCZ-6 +nplot,50.37691315460759,4.3916332121953765,148.8215,LCZ-6 +lvkft,50.87327638485073,3.410476006437254,15.37248,LCZ-6 +trvya,50.852998384051396,4.532657971933396,69.56419,LCZ-6 +jmppr,50.381280724455905,4.367548952683133,172.61269,LCZ-A +mpito,51.181557275049094,3.238364038409947,4.22222,LCZ-6 +avlrh,50.91773694236001,4.520301122955168,32.06785,LCZ-6 +ejyav,51.316628896678715,4.941702720780574,25.30268,LCZ-3 +kaugn,51.23508734522837,4.4024503977215605,4.79131,LCZ-8 +cxueo,50.82559583062839,4.427366868259889,62.29477,LCZ-6 +pnymz,51.05304197891723,4.518667482275547,7.63819,LCZ-B +olxib,51.239366476198406,4.5593782961798635,12.61393,LCZ-9 +ycrjw,51.13914788950687,3.23755525227815,13.74243,LCZ-6 +lqqll,51.221818083650646,4.429906885548216,8.71922,LCZ-2 +ustpb,50.68215560814998,4.272054877448181,86.4225,LCZ-6 +vwntn,51.15312685232607,4.690885190082912,9.46644,LCZ-6 +gekvp,50.4969171610125,5.871911910884753,262.6955,LCZ-6 +rgodc,50.72500488596654,4.200662191887187,66.19942,LCZ-6 +noqnl,51.12205778077561,4.581476568436704,4.79661,LCZ-3 +iqpaw,51.17948723923748,4.132351683084868,14.35597,LCZ-6 +vkhfs,50.68795586505588,4.295748931677105,61.99688,LCZ-6 +nhyxe,50.36766628610633,4.488588453582562,189.96104,LCZ-A +ycxir,50.8294435477472,4.364819866988493,76.88065,LCZ-2 +rcilb,51.07178740182775,3.6982184241693385,9.74606,LCZ-3 +rfgfe,50.924664225981616,5.329172333282491,43.01357,LCZ-3 +xebnu,50.632423474114525,5.582022842207739,71.53963,LCZ-8 +jsmyn,51.228739383855846,4.5002333601309035,7.4831,LCZ-6 +chngo,51.26103941548091,3.2777811196496294,3.06123,LCZ-B +zdrlf,51.19522627319486,3.2729163989805214,5.28663,LCZ-6 +ppimm,51.22086644749177,3.2453307997191536,2.333,LCZ-6 +vbxzg,49.73113908020483,5.6578148581157715,404.56064,LCZ-6 +yiywz,50.92577396926835,5.409551779533828,35.50022,LCZ-6 +hsffr,50.89674905697946,3.6305742302658293,12.73129,LCZ-D +defjb,50.843863763764396,3.6154478678343533,14.33379,LCZ-3 +gcgqy,49.72657107424203,5.6472487397966615,402.69775,LCZ-6 +tqvvc,51.37256737359798,4.4739409909087495,25.49661,LCZ-9 +jvtsn,50.60634066074019,4.729250820610502,155.48564,LCZ-D +eklgn,50.89335217834472,3.557903620293769,35.23128,LCZ-D +oshuj,50.673843774715074,5.512027536148378,171.6953,LCZ-6 +sgpll,51.21335821058123,4.426796252840308,7.40452,LCZ-2 +vqeqz,50.930366418391735,4.807408559224753,27.27031,LCZ-6 +tvugx,51.08982582426299,2.6462437570712036,1.3424,LCZ-D +wmirc,50.38401930478288,4.428389954994501,157.15314,LCZ-B +ynizp,49.587988268897504,5.8047660812792445,319.96823,LCZ-D +plqbt,50.1963795529855,5.249797763344398,292.31039,LCZ-D +libsz,50.772022694859466,4.286985062435982,26.61798,LCZ-6 +hqpnu,50.838284028159116,4.344423104864286,32.03478,LCZ-2 +fnjte,50.60745469681962,4.315135667515016,130.03525,LCZ-6 +qykli,50.60644774123597,4.648748418420177,141.54053,LCZ-6 +hpdxl,51.58783560950187,4.992307102523438,9.25639,LCZ-3 +xnods,51.18204523035448,4.429761025577322,13.52866,LCZ-6 +wgsql,50.544289637962656,4.362731258862413,136.52466,LCZ-6 +vuuwd,50.830035895125086,4.365491458878166,68.30311,LCZ-2 +xxqju,50.710198140696576,4.551572090274366,108.14658,LCZ-9 +kaebo,51.08262832167873,4.014894659788877,4.37429,LCZ-6 +sfqtu,50.56458434734701,5.626621959209444,266.40808,LCZ-6 +anakj,50.76091188283114,5.138012484392339,75.85721,LCZ-6 +cbqju,51.22914170586632,4.005584574354681,7.46681,LCZ-A +ghcfl,50.37955105876162,5.521875337781205,155.98744,LCZ-B +qyaar,50.906748313124304,4.46569947937843,27.17505,LCZ-6 +axywt,51.18363193781785,3.4956872425820382,11.81672,LCZ-6 +mnsof,50.563737828403255,4.178375478652297,98.74755,LCZ-6 +ksywb,50.76185527698667,5.185644464806306,75.05384,LCZ-9 +kvpvl,50.63282187771644,5.604394230521658,114.74205,LCZ-6 +muxwn,50.5177591060069,4.480539586021924,152.40799,LCZ-6 +zhdat,50.71201977017408,4.210063569593236,43.38221,LCZ-6 +suowf,51.167758728303184,4.391281098812044,16.94378,LCZ-3 +hddaj,50.760338958668186,4.339370213208049,96.06944,LCZ-6 +vpkzf,50.46166978427938,4.831465941150867,83.66517,LCZ-6 +lajxe,51.06449527989354,3.7231634070702126,10.35831,LCZ-3 +kbhgd,51.10352471989702,4.3382996666427145,9.36304,LCZ-6 +ympjc,50.60226649642615,4.4672638896257,124.0541,LCZ-9 +xbcmd,51.134403772908705,5.231708770863496,41.62652,LCZ-6 +htyez,50.863180015303065,4.340580737201003,30.39544,LCZ-3 +zmedt,50.71173128618979,4.506522808835158,104.11251,LCZ-9 +ifvfv,50.48542501372923,4.18104989161266,111.20602,LCZ-6 +jafnn,51.236278549208954,3.251721720790227,2.25237,LCZ-6 +eawui,50.90323273683484,4.371447194648673,49.70432,LCZ-6 +ptjip,50.45146183707479,4.428988784135982,164.6907,LCZ-6 +npksh,51.06443821061516,4.101859407493103,2.3252,LCZ-6 +fhalu,50.15443734080707,5.411132635260671,340.36444,LCZ-B +kdawe,50.40122802584814,4.440082605126546,107.38446,LCZ-6 +lfmrl,50.777900099526946,4.5188943898140455,110.91862,LCZ-6 +youns,50.87457072735232,4.381277109540307,35.20079,LCZ-6 +mtfuz,51.322498929596755,4.5011429065792905,14.57407,LCZ-9 +zehna,51.02721591868391,3.805337017349854,9.80428,LCZ-6 +vdhec,50.55491742222068,5.639679234211744,277.10162,LCZ-6 +bipos,50.653874413534815,5.043292980148922,133.03545,LCZ-D +hagti,51.10792763109716,3.9609488874921097,4.73098,LCZ-B +yjthz,50.85460621555752,4.478389621451197,73.90162,LCZ-6 +fobcb,50.828701496556654,4.367322417345507,76.97253,LCZ-3 +mokqw,50.83495472639337,4.347035172787107,66.57806,LCZ-3 +vrmwd,50.24228950642709,6.1765448423638825,475.04898,LCZ-D +nwfsv,51.1434223949995,2.718798401919342,2.243,LCZ-6 +chlid,51.39693622226203,4.759639058198753,16.82877,LCZ-6 +pzkjc,49.8339842461297,5.306015247746317,380.52014,LCZ-D +eovhr,50.46189939668208,4.204672005189838,111.60278,LCZ-6 +ldyrm,50.717373727017915,5.401253874687248,132.36099,LCZ-6 +molvm,50.269255815218735,5.5396099245926,288.00357,LCZ-B +wmwdj,50.69808916021006,4.622949429748494,102.28842,LCZ-6 +xlqyq,51.47688888224255,3.6077252315164805,1.06,LCZ-6 +xhfix,51.500559228735774,5.394675102330027,19.07461,LCZ-6 +fupbf,50.87048405263781,4.737006759425904,34.61102,LCZ-6 +tciuk,51.10292237607876,4.421248655740071,26.07523,LCZ-6 +algps,50.6702848908223,4.379722853224317,121.57639,LCZ-6 +zyjzy,50.26084801278761,5.442887850368991,178.42509,LCZ-6 +tvgco,51.023999408693676,4.902848306997223,17.46639,LCZ-6 +hqsvn,50.839510465064635,4.478059428238008,85.32159,LCZ-6 +hqkuw,50.30480062810192,4.718048851512711,212.76949,LCZ-B +rivpx,51.105061270085784,4.498651383498268,5.37442,LCZ-6 +dysxz,49.57593609533159,5.7747618697387715,325.81021,LCZ-B +kcvit,50.71678762373634,3.303164749835219,34.1313,LCZ-6 +hvmkj,50.074574457218986,5.22561697854906,259.09671,LCZ-B +nrxzi,50.79502746669621,4.314488990084612,30.01833,LCZ-6 +kwelm,51.21541055446209,4.296863647847772,5.83873,LCZ-6 +veceq,50.748140311829644,4.2724889184878325,65.53662,LCZ-6 +uvyro,50.91284066057701,4.476082542426303,26.06368,LCZ-6 +jogyg,51.29481401082303,4.470487038327516,11.39757,LCZ-9 +snztv,51.22943377741622,2.9100797309351916,6.41524,LCZ-6 +rjifo,51.16967109345361,4.451150866122275,16.09276,LCZ-6 +pkxsp,51.18241069197175,3.847428424359601,4.87371,LCZ-6 +spulz,50.79418064942204,4.416610282584427,78.40489,LCZ-6 +gfvwx,50.598129284503564,5.788622044268211,206.69479,LCZ-6 +jrpad,49.62476931858612,5.802421962694803,306.93387,LCZ-6 +hrqlu,51.148492346368386,4.446184088733574,19.31281,LCZ-6 +mgkbg,51.14722964855046,2.7069292060161385,7.12302,LCZ-6 +ioupu,50.92458397358798,3.157589140198077,23.25207,LCZ-6 +ycfxg,50.87661374660873,4.081220212881725,8.04661,LCZ-6 +ashel,50.83356523540545,4.467629629142505,96.00185,LCZ-6 +fulve,51.25562386471335,4.521209270593632,11.14989,LCZ-9 +tlaet,50.68557071016143,5.680046955482312,128.96152,LCZ-6 +nmobc,50.668293195849145,4.606554664637998,131.13503,LCZ-6 +eydxn,50.719025798158285,4.596132859360461,90.93047,LCZ-6 +ywjbh,50.43947082132301,4.831679050939227,211.27362,LCZ-A +nfyme,50.87876834246173,4.06588600315704,29.49566,LCZ-B +jworo,49.655492471772064,5.889951139573062,345.52417,LCZ-6 +dsgmk,50.215133882473765,4.27616859769057,201.98125,LCZ-6 +jgurt,51.0818526573951,3.695296201863019,7.23654,LCZ-6 +ulyoy,50.940895097854025,5.121096468058481,22.59161,LCZ-6 +lgiib,51.33016693043174,4.985565613374918,25.30968,LCZ-6 +ylcge,50.949303649028025,3.0719957957987316,26.87057,LCZ-6 +rcspk,50.61790411177879,4.620620775180131,120.43021,LCZ-9 +tbojp,50.685771525715694,4.341366648320454,120.69423,LCZ-9 +vqbyk,50.53850045999334,4.243608360186644,130.47188,LCZ-9 +kbwsm,50.83699494112758,3.41977422352394,33.43098,LCZ-6 +hjccw,50.5382627238402,4.571525810680264,154.52699,LCZ-D +kazyi,50.840882551918085,4.36057202130713,32.03478,LCZ-2 +fuukh,50.7852561028835,4.019269889806494,40.31602,LCZ-6 +mqhse,50.87571731862514,4.705998586826177,31.71821,LCZ-2 +qfaqe,50.152195582408226,5.381525525600436,341.48465,LCZ-D +npkpd,50.95606825587369,5.4997277964272335,66.90865,LCZ-3 +wpulm,51.29298113674448,4.442686524453645,8.2999,LCZ-9 +gngyz,51.092295660005085,2.5746525987683153,8.94491,LCZ-6 +rcozg,51.056769950342115,3.855183206135178,7.27563,LCZ-B +fmhia,50.41850977567646,4.863569753021849,176.83344,LCZ-A +swyyo,50.4505724328121,5.907205638140585,441.41519,LCZ-B +hsqxx,50.718541488834234,4.940322668728589,82.30028,LCZ-D +cikyl,50.73024433891875,4.661595121919195,57.94663,LCZ-6 +bujhg,51.20626213461335,3.4520564799944276,8.94035,LCZ-6 +qzzjl,50.71380315266725,5.652910142564328,128.34863,LCZ-6 +oceey,50.851238638314435,4.579596484463104,51.32494,LCZ-6 +jvlby,50.80321692700227,4.349917665576498,106.0872,LCZ-6 +qypth,51.249554413781105,4.456366847707382,4.91856,LCZ-3 +kglah,51.069171750385024,4.294030317962882,1.35573,LCZ-6 +zwclp,50.50262159392964,3.882670369902348,76.15023,LCZ-D +aeudw,50.663187442910484,5.576033489681623,197.49657,LCZ-6 +oxhag,50.671529893871075,4.947486135946531,96.51717,LCZ-6 +gbvcy,50.54743046584345,5.8113442970960385,159.82611,LCZ-6 +jvwut,51.35722537674792,4.478546673581547,28.8249,LCZ-9 +rhyrg,50.96430536212266,3.097459624600565,21.82525,LCZ-6 +ofuww,50.80960622680268,4.54520135201718,94.35415,LCZ-6 +frrqn,50.51561464121128,5.27256851766192,132.21063,LCZ-9 +kizka,51.03746496425014,3.8141420845014307,11.10009,LCZ-6 +gipmw,50.67859170280099,4.705847617745425,131.91801,LCZ-6 +whuyv,50.80105980729043,4.351846911181961,102.70999,LCZ-9 +vziih,50.72898173862041,4.482887079641759,87.70395,LCZ-A +eeonl,50.83819497355551,4.332938255176657,24.01413,LCZ-2 +bnedp,51.08679471550561,4.22271737703839,6.59532,LCZ-6 +bziiq,51.27719051358528,4.654612190402331,19.7159,LCZ-9 +vlirw,51.19089378323491,5.104095015088595,27.20191,LCZ-6 +fekmz,51.213928124048415,4.420721098239158,14.60444,LCZ-2 +redrz,50.55603235073863,4.8476302996657745,163.60222,LCZ-6 +mizat,50.8463594149961,4.382221875996655,44.93904,LCZ-3 +tnjlo,50.54889616506824,4.544728449518292,138.45488,LCZ-6 +yqfwh,51.09263044245131,3.8648302275633317,6.13311,LCZ-B +zbmsx,51.22325061212319,2.914463737427456,11.83596,LCZ-8 +swxlj,50.64996426867803,5.82001838418851,329.20889,LCZ-6 +nugtq,50.89656704141425,4.537801782103459,44.02984,LCZ-6 +pkjdh,50.68313100227374,6.006559197875098,231.35736,LCZ-B +nysmp,50.740375096684765,4.357079732748298,86.33088,LCZ-6 +xqnhf,50.711502584430484,5.6533512210349715,132.6062,LCZ-6 +yohtv,50.79364910677896,4.401266144638595,106.86,LCZ-6 +tkmnz,50.80464050522021,4.4225881453974765,76.26836,LCZ-6 +eeakv,50.641316966081305,5.538642468675632,121.84278,LCZ-6 +mtfnk,50.818061522971284,3.2575013727646316,14.93549,LCZ-6 +agney,50.99262076237673,4.643122698629459,15.87124,LCZ-9 +gdnxf,49.70055119752372,5.722400838339478,354.00702,LCZ-9 +lvrdl,50.49939857655336,4.012375807500794,95.47993,LCZ-A +xndyn,50.57280515558509,5.073447892306001,169.73956,LCZ-D +fhpws,50.26007148624994,5.557630242497382,299.7478,LCZ-B +purrd,50.81136063040938,4.401329066441719,70.83044,LCZ-6 +szkjm,50.79254171242725,4.30018510156439,22.74653,LCZ-6 +etprr,50.93142881896929,3.6688466050852933,14.98424,LCZ-6 +jaqyv,50.82127215725899,4.125330876343851,79.15649,LCZ-6 +rsrrr,50.85793275566967,4.412600587737752,83.74249,LCZ-3 +zeoez,50.85848748229829,4.517678236197628,76.74855,LCZ-6 +ujqne,51.35567906179346,3.2936149399737724,11.97654,LCZ-6 +fmegu,50.816911750718944,4.3450405177844145,103.71385,LCZ-3 +vubku,50.883111593183884,5.505716658207423,53.95971,LCZ-6 +owfcf,51.04447165717197,4.492636467010044,3.44802,LCZ-6 +jckag,51.12209142532145,4.581736493529081,4.53977,LCZ-3 +ewztd,51.23216218821087,3.242432692453823,-1.2183,LCZ-6 +odyph,50.46504140935771,4.334524793074302,164.08876,LCZ-6 +xgepo,50.651366157267034,4.71087478466009,148.11105,LCZ-6 +igrqy,50.83736317486633,4.4011304195523655,86.08469,LCZ-3 +fvofb,50.77447691756882,4.319058368610652,44.7837,LCZ-6 +nakge,51.12009112601371,2.6695754869221977,12.76459,LCZ-6 +zetkf,50.87944763693035,4.01865356008175,32.50079,LCZ-6 +ftkap,50.79883110022981,4.153389799799825,58.29725,LCZ-6 +dpppn,51.235122753253954,4.403938244499121,4.73219,LCZ-8 +cgvdp,50.802192631760434,3.313555332704148,25.34175,LCZ-6 +muaql,51.582669283953145,5.003887010460673,9.27203,LCZ-6 +tkals,51.19187480978242,3.2047824004777308,7.56927,LCZ-6 +pejev,51.39920713460299,4.459681941415398,20.50911,LCZ-6 +tkkgw,51.56903941629224,5.32564210052445,10.03276,LCZ-6 +ppmky,50.682919050290174,4.34378835582963,124.85674,LCZ-9 +oojpg,50.817085442930654,4.954229559496785,46.38263,LCZ-6 +hxdtx,50.8101451109838,4.435506248332906,63.0649,LCZ-3 +lrjcp,50.39968062675861,5.770974807704504,306.64139,LCZ-B +foqcv,50.558721964441844,4.091478317888012,95.42916,LCZ-6 +hsubx,50.623132704478486,5.375789866763806,160.71962,LCZ-D +kcyok,50.91065149409992,2.783955505412838,13.90774,LCZ-D +nyott,50.9877227315355,4.858230580910376,25.75906,LCZ-6 +axvtu,51.31487376126576,5.028484285269727,28.50438,LCZ-9 +ftxke,50.01373810269722,5.761273321974969,473.38962,LCZ-D +omhhy,50.733512060161864,4.5270339311333885,87.91926,LCZ-9 +biilm,50.9172381935566,3.191524937956267,17.54073,LCZ-6 +ljiad,50.85199785092922,4.354029155934276,32.03478,LCZ-2 +otaer,50.838723434666655,3.2863361715566977,17.79748,LCZ-3 +ngzsw,50.88661104946129,5.297060499886154,40.35832,LCZ-6 +uxudg,50.87723741575416,4.680800561085045,44.05465,LCZ-6 +bitfl,50.88651090979563,4.701699369628409,32.20154,LCZ-2 +awlnv,50.87261466079042,4.6955042993921925,34.09916,LCZ-3 +hdvrb,50.881595630383345,4.6828980163053,70.97444,LCZ-2 +uutkw,50.85877499549842,4.694769065235927,30.13222,LCZ-6 +okxeu,50.86713096712852,4.674286384267664,28.0813,LCZ-6 +ydphn,50.867046065058204,4.688279359105196,26.05877,LCZ-6 +owpen,50.859968929801234,4.688471198961036,23.95751,LCZ-6 +plovr,50.87759354481717,4.700390628889517,37.82785,LCZ-3 +bxwth,50.87283475501639,4.708177261964078,32.11557,LCZ-3 +oixfn,50.876585633968055,4.716067005005867,40.17608,LCZ-2 +rtoym,50.87979934639585,4.694672845104699,40.93184,LCZ-3 +iqmtf,50.885318217731715,4.688924617259743,26.20878,LCZ-3 +qphiq,50.88047450830645,4.705692724911566,39.79103,LCZ-3 +nwumn,50.7130414383684,6.0841787222376835,268.49631,LCZ-D +dmhur,50.61400373404594,5.761275284257185,252.13647,LCZ-D diff --git a/tests/data/template_random_belgium.json b/tests/data/template_random_belgium.json new file mode 100644 index 000000000..fe8a51beb --- /dev/null +++ b/tests/data/template_random_belgium.json @@ -0,0 +1,31 @@ +{ + "data_related": { + "structure": "long", + "timestamp": { + "datetime_column": "datetime", + "datetime_fmt": "%Y-%m-%d %H:%M:%S" , + "date_column": null, + "date_fmt": null, + "time_column": null, + "time_fmt": null, + "timezone": "Europe/Berlin" + }, + "name_column": "station_id", + "obstype_mapping": [ + { + "tlk_obstype": "temp", + "columnname": "value", + "unit": "degC", + "description": "2m-temperature" + } + ] + }, + "metadata_related": { + "name_column": "station_id", + "lat_column": "lat", + "lon_column": "lon", + "altitude_column": "elev", + "columns_to_include": ["LCZ"] + }, + "single_station_name": "dummy_station_name" +} diff --git a/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_aggregate_df_method.pkl b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_aggregate_df_method.pkl deleted file mode 100644 index 0836a2de6..000000000 Binary files a/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_aggregate_df_method.pkl and /dev/null differ diff --git a/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_aggregate_df_method/datatype.json b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_aggregate_df_method/datatype.json new file mode 100644 index 000000000..79b626922 --- /dev/null +++ b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_aggregate_df_method/datatype.json @@ -0,0 +1 @@ +{"class": "DataFrame"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_aggregate_df_method/solution_df.parquet b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_aggregate_df_method/solution_df.parquet new file mode 100644 index 000000000..046f8fa4b Binary files /dev/null and b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_aggregate_df_method/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_basic_analysis_method_calls/datatype.json b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_basic_analysis_method_calls/datatype.json new file mode 100644 index 000000000..79b626922 --- /dev/null +++ b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_basic_analysis_method_calls/datatype.json @@ -0,0 +1 @@ +{"class": "DataFrame"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_basic_analysis_method_calls/solution_df.parquet b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_basic_analysis_method_calls/solution_df.parquet new file mode 100644 index 000000000..4e5e2010a Binary files /dev/null and b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_basic_analysis_method_calls/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_filtering.pkl b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_filtering.pkl deleted file mode 100644 index f25d0e60a..000000000 Binary files a/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_filtering.pkl and /dev/null differ diff --git a/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_filtering/datatype.json b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_filtering/datatype.json new file mode 100644 index 000000000..803309758 --- /dev/null +++ b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_filtering/datatype.json @@ -0,0 +1 @@ +{"class": "Analysis"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_filtering/solution_df.parquet b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_filtering/solution_df.parquet new file mode 100644 index 000000000..a178402dc Binary files /dev/null and b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_filtering/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_filtering/solution_fulldf.parquet b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_filtering/solution_fulldf.parquet new file mode 100644 index 000000000..9c4bdaabf Binary files /dev/null and b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_filtering/solution_fulldf.parquet differ diff --git a/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_filtering/solution_metadf.parquet b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_filtering/solution_metadf.parquet new file mode 100644 index 000000000..2fe8bea04 Binary files /dev/null and b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_filtering/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_if_analysis_can_be_created_from_dataset.pkl b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_if_analysis_can_be_created_from_dataset.pkl deleted file mode 100644 index beb099641..000000000 Binary files a/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_if_analysis_can_be_created_from_dataset.pkl and /dev/null differ diff --git a/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_if_analysis_can_be_created_from_station.pkl b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_if_analysis_can_be_created_from_station.pkl deleted file mode 100644 index 31cdb1619..000000000 Binary files a/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_if_analysis_can_be_created_from_station.pkl and /dev/null differ diff --git a/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_if_analysis_can_be_created_from_station/datatype.json b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_if_analysis_can_be_created_from_station/datatype.json new file mode 100644 index 000000000..803309758 --- /dev/null +++ b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_if_analysis_can_be_created_from_station/datatype.json @@ -0,0 +1 @@ +{"class": "Analysis"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_if_analysis_can_be_created_from_station/solution_df.parquet b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_if_analysis_can_be_created_from_station/solution_df.parquet new file mode 100644 index 000000000..764fbd471 Binary files /dev/null and b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_if_analysis_can_be_created_from_station/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_if_analysis_can_be_created_from_station/solution_fulldf.parquet b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_if_analysis_can_be_created_from_station/solution_fulldf.parquet new file mode 100644 index 000000000..1d5967598 Binary files /dev/null and b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_if_analysis_can_be_created_from_station/solution_fulldf.parquet differ diff --git a/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_if_analysis_can_be_created_from_station/solution_metadf.parquet b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_if_analysis_can_be_created_from_station/solution_metadf.parquet new file mode 100644 index 000000000..dbff2d93b Binary files /dev/null and b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_if_analysis_can_be_created_from_station/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_import_data.pkl b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_import_data.pkl deleted file mode 100644 index cd9fa71df..000000000 Binary files a/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_import_data.pkl and /dev/null differ diff --git a/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_import_data/datatype.json b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_import_data/datatype.json new file mode 100644 index 000000000..803309758 --- /dev/null +++ b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_import_data/datatype.json @@ -0,0 +1 @@ +{"class": "Analysis"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_import_data/solution_df.parquet b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_import_data/solution_df.parquet new file mode 100644 index 000000000..4e5e2010a Binary files /dev/null and b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_import_data/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_import_data/solution_fulldf.parquet b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_import_data/solution_fulldf.parquet new file mode 100644 index 000000000..216b1b5e0 Binary files /dev/null and b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_import_data/solution_fulldf.parquet differ diff --git a/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_import_data/solution_metadf.parquet b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_import_data/solution_metadf.parquet new file mode 100644 index 000000000..7956d4ede Binary files /dev/null and b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_import_data/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_subsetting_time.pkl b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_subsetting_time.pkl deleted file mode 100644 index 733d0340e..000000000 Binary files a/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_subsetting_time.pkl and /dev/null differ diff --git a/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_subsetting_time/datatype.json b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_subsetting_time/datatype.json new file mode 100644 index 000000000..803309758 --- /dev/null +++ b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_subsetting_time/datatype.json @@ -0,0 +1 @@ +{"class": "Analysis"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_subsetting_time/solution_df.parquet b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_subsetting_time/solution_df.parquet new file mode 100644 index 000000000..d990ccba1 Binary files /dev/null and b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_subsetting_time/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_subsetting_time/solution_fulldf.parquet b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_subsetting_time/solution_fulldf.parquet new file mode 100644 index 000000000..698fe2d36 Binary files /dev/null and b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_subsetting_time/solution_fulldf.parquet differ diff --git a/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_subsetting_time/solution_metadf.parquet b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_subsetting_time/solution_metadf.parquet new file mode 100644 index 000000000..7956d4ede Binary files /dev/null and b/tests/pkled_solutions/test_analysis_solutions/testdemodata/test_subsetting_time/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction.pkl b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction.pkl deleted file mode 100644 index 371af7f06..000000000 Binary files a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction.pkl and /dev/null differ diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction/datatype.json b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction/datatype.json new file mode 100644 index 000000000..c1cc8e2ca --- /dev/null +++ b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction/datatype.json @@ -0,0 +1 @@ +{"class": "Dataset"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction/solution_df.parquet b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction/solution_df.parquet new file mode 100644 index 000000000..e7b817fd4 Binary files /dev/null and b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction/solution_gapsdf.parquet b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction/solution_gapsdf.parquet new file mode 100644 index 000000000..a2dec74de Binary files /dev/null and b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction/solution_gapsdf.parquet differ diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction/solution_metadf.parquet b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction/solution_metadf.parquet new file mode 100644 index 000000000..72b89b083 Binary files /dev/null and b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction/solution_modeldatadf.parquet b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction/solution_modeldatadf.parquet new file mode 100644 index 000000000..3b639f50f Binary files /dev/null and b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction/solution_modeldatadf.parquet differ diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction/solution_outliersdf.parquet b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction/solution_outliersdf.parquet new file mode 100644 index 000000000..b802b21c2 Binary files /dev/null and b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction/solution_outliersdf.parquet differ diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction_on_metadata_only.pkl b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction_on_metadata_only.pkl deleted file mode 100644 index f048a95d9..000000000 Binary files a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction_on_metadata_only.pkl and /dev/null differ diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction_on_metadata_only/datatype.json b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction_on_metadata_only/datatype.json new file mode 100644 index 000000000..c1cc8e2ca --- /dev/null +++ b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction_on_metadata_only/datatype.json @@ -0,0 +1 @@ +{"class": "Dataset"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction_on_metadata_only/solution_df.parquet b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction_on_metadata_only/solution_df.parquet new file mode 100644 index 000000000..cf1e51f2c Binary files /dev/null and b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction_on_metadata_only/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction_on_metadata_only/solution_gapsdf.parquet b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction_on_metadata_only/solution_gapsdf.parquet new file mode 100644 index 000000000..b802b21c2 Binary files /dev/null and b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction_on_metadata_only/solution_gapsdf.parquet differ diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction_on_metadata_only/solution_metadf.parquet b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction_on_metadata_only/solution_metadf.parquet new file mode 100644 index 000000000..72b89b083 Binary files /dev/null and b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction_on_metadata_only/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction_on_metadata_only/solution_modeldatadf.parquet b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction_on_metadata_only/solution_modeldatadf.parquet new file mode 100644 index 000000000..30d6b877c Binary files /dev/null and b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction_on_metadata_only/solution_modeldatadf.parquet differ diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction_on_metadata_only/solution_outliersdf.parquet b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction_on_metadata_only/solution_outliersdf.parquet new file mode 100644 index 000000000..b802b21c2 Binary files /dev/null and b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_ERA5_extraction_on_metadata_only/solution_outliersdf.parquet differ diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_LCZ_extraction.pkl b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_LCZ_extraction.pkl deleted file mode 100644 index a74cb96f7..000000000 Binary files a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_LCZ_extraction.pkl and /dev/null differ diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_LCZ_extraction/datatype.json b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_LCZ_extraction/datatype.json new file mode 100644 index 000000000..c1cc8e2ca --- /dev/null +++ b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_LCZ_extraction/datatype.json @@ -0,0 +1 @@ +{"class": "Dataset"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_LCZ_extraction/solution_df.parquet b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_LCZ_extraction/solution_df.parquet new file mode 100644 index 000000000..cf1e51f2c Binary files /dev/null and b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_LCZ_extraction/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_LCZ_extraction/solution_gapsdf.parquet b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_LCZ_extraction/solution_gapsdf.parquet new file mode 100644 index 000000000..b802b21c2 Binary files /dev/null and b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_LCZ_extraction/solution_gapsdf.parquet differ diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_LCZ_extraction/solution_metadf.parquet b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_LCZ_extraction/solution_metadf.parquet new file mode 100644 index 000000000..7956d4ede Binary files /dev/null and b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_LCZ_extraction/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_LCZ_extraction/solution_modeldatadf.parquet b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_LCZ_extraction/solution_modeldatadf.parquet new file mode 100644 index 000000000..5b68f8b54 Binary files /dev/null and b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_LCZ_extraction/solution_modeldatadf.parquet differ diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_LCZ_extraction/solution_outliersdf.parquet b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_LCZ_extraction/solution_outliersdf.parquet new file mode 100644 index 000000000..b802b21c2 Binary files /dev/null and b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_LCZ_extraction/solution_outliersdf.parquet differ diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_altitude_extraction.pkl b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_altitude_extraction.pkl deleted file mode 100644 index c73dd1a31..000000000 Binary files a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_altitude_extraction.pkl and /dev/null differ diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_altitude_extraction/datatype.json b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_altitude_extraction/datatype.json new file mode 100644 index 000000000..c1cc8e2ca --- /dev/null +++ b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_altitude_extraction/datatype.json @@ -0,0 +1 @@ +{"class": "Dataset"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_altitude_extraction/solution_df.parquet b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_altitude_extraction/solution_df.parquet new file mode 100644 index 000000000..cf1e51f2c Binary files /dev/null and b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_altitude_extraction/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_altitude_extraction/solution_gapsdf.parquet b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_altitude_extraction/solution_gapsdf.parquet new file mode 100644 index 000000000..b802b21c2 Binary files /dev/null and b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_altitude_extraction/solution_gapsdf.parquet differ diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_altitude_extraction/solution_metadf.parquet b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_altitude_extraction/solution_metadf.parquet new file mode 100644 index 000000000..be52e0e77 Binary files /dev/null and b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_altitude_extraction/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_altitude_extraction/solution_modeldatadf.parquet b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_altitude_extraction/solution_modeldatadf.parquet new file mode 100644 index 000000000..5b68f8b54 Binary files /dev/null and b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_altitude_extraction/solution_modeldatadf.parquet differ diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_altitude_extraction/solution_outliersdf.parquet b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_altitude_extraction/solution_outliersdf.parquet new file mode 100644 index 000000000..b802b21c2 Binary files /dev/null and b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_altitude_extraction/solution_outliersdf.parquet differ diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_import_demo_metadata.pkl b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_import_demo_metadata.pkl deleted file mode 100644 index e06a4e027..000000000 Binary files a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_import_demo_metadata.pkl and /dev/null differ diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_import_demo_metadata/datatype.json b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_import_demo_metadata/datatype.json new file mode 100644 index 000000000..c1cc8e2ca --- /dev/null +++ b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_import_demo_metadata/datatype.json @@ -0,0 +1 @@ +{"class": "Dataset"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_import_demo_metadata/solution_df.parquet b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_import_demo_metadata/solution_df.parquet new file mode 100644 index 000000000..cf1e51f2c Binary files /dev/null and b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_import_demo_metadata/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_import_demo_metadata/solution_gapsdf.parquet b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_import_demo_metadata/solution_gapsdf.parquet new file mode 100644 index 000000000..b802b21c2 Binary files /dev/null and b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_import_demo_metadata/solution_gapsdf.parquet differ diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_import_demo_metadata/solution_metadf.parquet b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_import_demo_metadata/solution_metadf.parquet new file mode 100644 index 000000000..72b89b083 Binary files /dev/null and b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_import_demo_metadata/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_import_demo_metadata/solution_modeldatadf.parquet b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_import_demo_metadata/solution_modeldatadf.parquet new file mode 100644 index 000000000..5b68f8b54 Binary files /dev/null and b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_import_demo_metadata/solution_modeldatadf.parquet differ diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_import_demo_metadata/solution_outliersdf.parquet b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_import_demo_metadata/solution_outliersdf.parquet new file mode 100644 index 000000000..b802b21c2 Binary files /dev/null and b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_import_demo_metadata/solution_outliersdf.parquet differ diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_landcover_frac_extraction.pkl b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_landcover_frac_extraction.pkl deleted file mode 100644 index 38d0a567a..000000000 Binary files a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_landcover_frac_extraction.pkl and /dev/null differ diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_landcover_frac_extraction/datatype.json b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_landcover_frac_extraction/datatype.json new file mode 100644 index 000000000..c1cc8e2ca --- /dev/null +++ b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_landcover_frac_extraction/datatype.json @@ -0,0 +1 @@ +{"class": "Dataset"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_landcover_frac_extraction/solution_df.parquet b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_landcover_frac_extraction/solution_df.parquet new file mode 100644 index 000000000..cf1e51f2c Binary files /dev/null and b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_landcover_frac_extraction/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_landcover_frac_extraction/solution_gapsdf.parquet b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_landcover_frac_extraction/solution_gapsdf.parquet new file mode 100644 index 000000000..b802b21c2 Binary files /dev/null and b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_landcover_frac_extraction/solution_gapsdf.parquet differ diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_landcover_frac_extraction/solution_metadf.parquet b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_landcover_frac_extraction/solution_metadf.parquet new file mode 100644 index 000000000..d31747e08 Binary files /dev/null and b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_landcover_frac_extraction/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_landcover_frac_extraction/solution_modeldatadf.parquet b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_landcover_frac_extraction/solution_modeldatadf.parquet new file mode 100644 index 000000000..5b68f8b54 Binary files /dev/null and b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_landcover_frac_extraction/solution_modeldatadf.parquet differ diff --git a/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_landcover_frac_extraction/solution_outliersdf.parquet b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_landcover_frac_extraction/solution_outliersdf.parquet new file mode 100644 index 000000000..b802b21c2 Binary files /dev/null and b/tests/pkled_solutions/test_gee_solutions/testdemodataset/test_landcover_frac_extraction/solution_outliersdf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_chaining_gapfill_methods.pkl b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_chaining_gapfill_methods.pkl deleted file mode 100644 index 3ccce3e20..000000000 Binary files a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_chaining_gapfill_methods.pkl and /dev/null differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_chaining_gapfill_methods/datatype.json b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_chaining_gapfill_methods/datatype.json new file mode 100644 index 000000000..c1cc8e2ca --- /dev/null +++ b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_chaining_gapfill_methods/datatype.json @@ -0,0 +1 @@ +{"class": "Dataset"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_chaining_gapfill_methods/solution_df.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_chaining_gapfill_methods/solution_df.parquet new file mode 100644 index 000000000..eadd5c958 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_chaining_gapfill_methods/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_chaining_gapfill_methods/solution_gapsdf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_chaining_gapfill_methods/solution_gapsdf.parquet new file mode 100644 index 000000000..e796b8629 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_chaining_gapfill_methods/solution_gapsdf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_chaining_gapfill_methods/solution_metadf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_chaining_gapfill_methods/solution_metadf.parquet new file mode 100644 index 000000000..3398eb6fe Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_chaining_gapfill_methods/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_chaining_gapfill_methods/solution_modeldatadf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_chaining_gapfill_methods/solution_modeldatadf.parquet new file mode 100644 index 000000000..75332a426 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_chaining_gapfill_methods/solution_modeldatadf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_chaining_gapfill_methods/solution_outliersdf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_chaining_gapfill_methods/solution_outliersdf.parquet new file mode 100644 index 000000000..b802b21c2 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_chaining_gapfill_methods/solution_outliersdf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_debias_modeldata_gapfill.pkl b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_debias_modeldata_gapfill.pkl deleted file mode 100644 index edb37f0b4..000000000 Binary files a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_debias_modeldata_gapfill.pkl and /dev/null differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_debias_modeldata_gapfill/datatype.json b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_debias_modeldata_gapfill/datatype.json new file mode 100644 index 000000000..c1cc8e2ca --- /dev/null +++ b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_debias_modeldata_gapfill/datatype.json @@ -0,0 +1 @@ +{"class": "Dataset"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_debias_modeldata_gapfill/solution_df.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_debias_modeldata_gapfill/solution_df.parquet new file mode 100644 index 000000000..c7ec3d862 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_debias_modeldata_gapfill/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_debias_modeldata_gapfill/solution_gapsdf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_debias_modeldata_gapfill/solution_gapsdf.parquet new file mode 100644 index 000000000..a19c20ba4 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_debias_modeldata_gapfill/solution_gapsdf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_debias_modeldata_gapfill/solution_metadf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_debias_modeldata_gapfill/solution_metadf.parquet new file mode 100644 index 000000000..3398eb6fe Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_debias_modeldata_gapfill/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_debias_modeldata_gapfill/solution_modeldatadf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_debias_modeldata_gapfill/solution_modeldatadf.parquet new file mode 100644 index 000000000..75332a426 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_debias_modeldata_gapfill/solution_modeldatadf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_debias_modeldata_gapfill/solution_outliersdf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_debias_modeldata_gapfill/solution_outliersdf.parquet new file mode 100644 index 000000000..b802b21c2 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_debias_modeldata_gapfill/solution_outliersdf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_diurnal_debias_modeldata_gapfill/datatype.json b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_diurnal_debias_modeldata_gapfill/datatype.json new file mode 100644 index 000000000..c1cc8e2ca --- /dev/null +++ b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_diurnal_debias_modeldata_gapfill/datatype.json @@ -0,0 +1 @@ +{"class": "Dataset"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_diurnal_debias_modeldata_gapfill/solution_df.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_diurnal_debias_modeldata_gapfill/solution_df.parquet new file mode 100644 index 000000000..b2f830702 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_diurnal_debias_modeldata_gapfill/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_diurnal_debias_modeldata_gapfill/solution_gapsdf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_diurnal_debias_modeldata_gapfill/solution_gapsdf.parquet new file mode 100644 index 000000000..be9edfc8a Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_diurnal_debias_modeldata_gapfill/solution_gapsdf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_diurnal_debias_modeldata_gapfill/solution_metadf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_diurnal_debias_modeldata_gapfill/solution_metadf.parquet new file mode 100644 index 000000000..3398eb6fe Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_diurnal_debias_modeldata_gapfill/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_diurnal_debias_modeldata_gapfill/solution_modeldatadf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_diurnal_debias_modeldata_gapfill/solution_modeldatadf.parquet new file mode 100644 index 000000000..75332a426 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_diurnal_debias_modeldata_gapfill/solution_modeldatadf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_diurnal_debias_modeldata_gapfill/solution_outliersdf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_diurnal_debias_modeldata_gapfill/solution_outliersdf.parquet new file mode 100644 index 000000000..b802b21c2 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_diurnal_debias_modeldata_gapfill/solution_outliersdf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_diurnal_debias_modeldata_gapfill_A.pkl b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_diurnal_debias_modeldata_gapfill_A.pkl deleted file mode 100644 index caa0c9a41..000000000 Binary files a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_diurnal_debias_modeldata_gapfill_A.pkl and /dev/null differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df.pkl b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df.pkl deleted file mode 100644 index aff3292e2..000000000 Binary files a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df.pkl and /dev/null differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/dataset_filled/datatype.json b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/dataset_filled/datatype.json new file mode 100644 index 000000000..79b626922 --- /dev/null +++ b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/dataset_filled/datatype.json @@ -0,0 +1 @@ +{"class": "DataFrame"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/dataset_filled/solution_df.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/dataset_filled/solution_df.parquet new file mode 100644 index 000000000..37167d000 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/dataset_filled/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/dataset_no_gaps/datatype.json b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/dataset_no_gaps/datatype.json new file mode 100644 index 000000000..79b626922 --- /dev/null +++ b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/dataset_no_gaps/datatype.json @@ -0,0 +1 @@ +{"class": "DataFrame"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/dataset_no_gaps/solution_df.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/dataset_no_gaps/solution_df.parquet new file mode 100644 index 000000000..af960d023 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/dataset_no_gaps/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/dataset_with_gaps/datatype.json b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/dataset_with_gaps/datatype.json new file mode 100644 index 000000000..79b626922 --- /dev/null +++ b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/dataset_with_gaps/datatype.json @@ -0,0 +1 @@ +{"class": "DataFrame"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/dataset_with_gaps/solution_df.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/dataset_with_gaps/solution_df.parquet new file mode 100644 index 000000000..af960d023 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/dataset_with_gaps/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/datatype.json b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/datatype.json new file mode 100644 index 000000000..f73490f07 --- /dev/null +++ b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/datatype.json @@ -0,0 +1 @@ +{"class": "Dict"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/sensordata_filled/datatype.json b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/sensordata_filled/datatype.json new file mode 100644 index 000000000..79b626922 --- /dev/null +++ b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/sensordata_filled/datatype.json @@ -0,0 +1 @@ +{"class": "DataFrame"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/sensordata_filled/solution_df.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/sensordata_filled/solution_df.parquet new file mode 100644 index 000000000..133ea6caf Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/sensordata_filled/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/sensordata_no_gaps/datatype.json b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/sensordata_no_gaps/datatype.json new file mode 100644 index 000000000..79b626922 --- /dev/null +++ b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/sensordata_no_gaps/datatype.json @@ -0,0 +1 @@ +{"class": "DataFrame"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/sensordata_no_gaps/solution_df.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/sensordata_no_gaps/solution_df.parquet new file mode 100644 index 000000000..d1cf44596 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/sensordata_no_gaps/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/sensordata_with_gaps/datatype.json b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/sensordata_with_gaps/datatype.json new file mode 100644 index 000000000..79b626922 --- /dev/null +++ b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/sensordata_with_gaps/datatype.json @@ -0,0 +1 @@ +{"class": "DataFrame"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/sensordata_with_gaps/solution_df.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/sensordata_with_gaps/solution_df.parquet new file mode 100644 index 000000000..d1cf44596 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/sensordata_with_gaps/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/station_filled/datatype.json b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/station_filled/datatype.json new file mode 100644 index 000000000..79b626922 --- /dev/null +++ b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/station_filled/datatype.json @@ -0,0 +1 @@ +{"class": "DataFrame"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/station_filled/solution_df.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/station_filled/solution_df.parquet new file mode 100644 index 000000000..bbf834f77 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/station_filled/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/station_no_gaps/datatype.json b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/station_no_gaps/datatype.json new file mode 100644 index 000000000..79b626922 --- /dev/null +++ b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/station_no_gaps/datatype.json @@ -0,0 +1 @@ +{"class": "DataFrame"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/station_no_gaps/solution_df.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/station_no_gaps/solution_df.parquet new file mode 100644 index 000000000..f5a1bf7ef Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/station_no_gaps/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/station_with_gaps/datatype.json b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/station_with_gaps/datatype.json new file mode 100644 index 000000000..79b626922 --- /dev/null +++ b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/station_with_gaps/datatype.json @@ -0,0 +1 @@ +{"class": "DataFrame"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/station_with_gaps/solution_df.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/station_with_gaps/solution_df.parquet new file mode 100644 index 000000000..f5a1bf7ef Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_gap_status_df/station_with_gaps/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_import_data.pkl b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_import_data.pkl deleted file mode 100644 index 9184fd51e..000000000 Binary files a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_import_data.pkl and /dev/null differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_import_data/datatype.json b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_import_data/datatype.json new file mode 100644 index 000000000..c1cc8e2ca --- /dev/null +++ b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_import_data/datatype.json @@ -0,0 +1 @@ +{"class": "Dataset"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_import_data/solution_df.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_import_data/solution_df.parquet new file mode 100644 index 000000000..fcbb237ea Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_import_data/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_import_data/solution_gapsdf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_import_data/solution_gapsdf.parquet new file mode 100644 index 000000000..82375d688 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_import_data/solution_gapsdf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_import_data/solution_metadf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_import_data/solution_metadf.parquet new file mode 100644 index 000000000..3398eb6fe Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_import_data/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_import_data/solution_modeldatadf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_import_data/solution_modeldatadf.parquet new file mode 100644 index 000000000..75332a426 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_import_data/solution_modeldatadf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_import_data/solution_outliersdf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_import_data/solution_outliersdf.parquet new file mode 100644 index 000000000..b802b21c2 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_import_data/solution_outliersdf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_chaining_on_dataset/datatype.json b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_chaining_on_dataset/datatype.json new file mode 100644 index 000000000..c1cc8e2ca --- /dev/null +++ b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_chaining_on_dataset/datatype.json @@ -0,0 +1 @@ +{"class": "Dataset"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_chaining_on_dataset/solution_df.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_chaining_on_dataset/solution_df.parquet new file mode 100644 index 000000000..cb66354b6 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_chaining_on_dataset/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_chaining_on_dataset/solution_gapsdf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_chaining_on_dataset/solution_gapsdf.parquet new file mode 100644 index 000000000..1a6c3eb5d Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_chaining_on_dataset/solution_gapsdf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_chaining_on_dataset/solution_metadf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_chaining_on_dataset/solution_metadf.parquet new file mode 100644 index 000000000..3398eb6fe Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_chaining_on_dataset/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_chaining_on_dataset/solution_modeldatadf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_chaining_on_dataset/solution_modeldatadf.parquet new file mode 100644 index 000000000..75332a426 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_chaining_on_dataset/solution_modeldatadf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_chaining_on_dataset/solution_outliersdf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_chaining_on_dataset/solution_outliersdf.parquet new file mode 100644 index 000000000..b802b21c2 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_chaining_on_dataset/solution_outliersdf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_dataset/datatype.json b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_dataset/datatype.json new file mode 100644 index 000000000..c1cc8e2ca --- /dev/null +++ b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_dataset/datatype.json @@ -0,0 +1 @@ +{"class": "Dataset"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_dataset/solution_df.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_dataset/solution_df.parquet new file mode 100644 index 000000000..7af418d77 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_dataset/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_dataset/solution_gapsdf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_dataset/solution_gapsdf.parquet new file mode 100644 index 000000000..27ef9cbb1 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_dataset/solution_gapsdf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_dataset/solution_metadf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_dataset/solution_metadf.parquet new file mode 100644 index 000000000..3398eb6fe Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_dataset/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_dataset/solution_modeldatadf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_dataset/solution_modeldatadf.parquet new file mode 100644 index 000000000..75332a426 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_dataset/solution_modeldatadf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_dataset/solution_outliersdf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_dataset/solution_outliersdf.parquet new file mode 100644 index 000000000..b802b21c2 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_dataset/solution_outliersdf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_dataset_A.pkl b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_dataset_A.pkl deleted file mode 100644 index 83f88238a..000000000 Binary files a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_dataset_A.pkl and /dev/null differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_dataset_B.pkl b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_dataset_B.pkl deleted file mode 100644 index ad3db3296..000000000 Binary files a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_dataset_B.pkl and /dev/null differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_station.pkl b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_station.pkl deleted file mode 100644 index 58335d48c..000000000 Binary files a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_station.pkl and /dev/null differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_station/datatype.json b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_station/datatype.json new file mode 100644 index 000000000..1a6897db3 --- /dev/null +++ b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_station/datatype.json @@ -0,0 +1 @@ +{"class": "Station"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_station/solution_df.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_station/solution_df.parquet new file mode 100644 index 000000000..3edcc3b61 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_station/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_station/solution_gapsdf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_station/solution_gapsdf.parquet new file mode 100644 index 000000000..4bf726333 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_station/solution_gapsdf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_station/solution_metadf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_station/solution_metadf.parquet new file mode 100644 index 000000000..ba9417867 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_station/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_station/solution_modeldatadf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_station/solution_modeldatadf.parquet new file mode 100644 index 000000000..052617e8d Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_station/solution_modeldatadf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_station/solution_outliersdf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_station/solution_outliersdf.parquet new file mode 100644 index 000000000..16d7551fb Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_interpolation_on_station/solution_outliersdf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_partially_filled_gaps.pkl b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_partially_filled_gaps.pkl deleted file mode 100644 index 1575dceeb..000000000 Binary files a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_partially_filled_gaps.pkl and /dev/null differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_partially_filled_gaps/datatype.json b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_partially_filled_gaps/datatype.json new file mode 100644 index 000000000..c1cc8e2ca --- /dev/null +++ b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_partially_filled_gaps/datatype.json @@ -0,0 +1 @@ +{"class": "Dataset"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_partially_filled_gaps/solution_df.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_partially_filled_gaps/solution_df.parquet new file mode 100644 index 000000000..7fdcf3a75 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_partially_filled_gaps/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_partially_filled_gaps/solution_gapsdf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_partially_filled_gaps/solution_gapsdf.parquet new file mode 100644 index 000000000..4df354a85 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_partially_filled_gaps/solution_gapsdf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_partially_filled_gaps/solution_metadf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_partially_filled_gaps/solution_metadf.parquet new file mode 100644 index 000000000..3398eb6fe Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_partially_filled_gaps/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_partially_filled_gaps/solution_modeldatadf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_partially_filled_gaps/solution_modeldatadf.parquet new file mode 100644 index 000000000..75332a426 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_partially_filled_gaps/solution_modeldatadf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_partially_filled_gaps/solution_outliersdf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_partially_filled_gaps/solution_outliersdf.parquet new file mode 100644 index 000000000..72f073288 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_partially_filled_gaps/solution_outliersdf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_raw_modeldata_gapfill/datatype.json b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_raw_modeldata_gapfill/datatype.json new file mode 100644 index 000000000..c1cc8e2ca --- /dev/null +++ b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_raw_modeldata_gapfill/datatype.json @@ -0,0 +1 @@ +{"class": "Dataset"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_raw_modeldata_gapfill/solution_df.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_raw_modeldata_gapfill/solution_df.parquet new file mode 100644 index 000000000..3c7b416b8 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_raw_modeldata_gapfill/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_raw_modeldata_gapfill/solution_gapsdf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_raw_modeldata_gapfill/solution_gapsdf.parquet new file mode 100644 index 000000000..65ef18e95 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_raw_modeldata_gapfill/solution_gapsdf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_raw_modeldata_gapfill/solution_metadf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_raw_modeldata_gapfill/solution_metadf.parquet new file mode 100644 index 000000000..3398eb6fe Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_raw_modeldata_gapfill/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_raw_modeldata_gapfill/solution_modeldatadf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_raw_modeldata_gapfill/solution_modeldatadf.parquet new file mode 100644 index 000000000..75332a426 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_raw_modeldata_gapfill/solution_modeldatadf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_raw_modeldata_gapfill/solution_outliersdf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_raw_modeldata_gapfill/solution_outliersdf.parquet new file mode 100644 index 000000000..b802b21c2 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_raw_modeldata_gapfill/solution_outliersdf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_raw_modeldata_gapfill_A.pkl b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_raw_modeldata_gapfill_A.pkl deleted file mode 100644 index ac57f35e8..000000000 Binary files a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_raw_modeldata_gapfill_A.pkl and /dev/null differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_weighted_diurnal_debias_gf_on_station/datatype.json b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_weighted_diurnal_debias_gf_on_station/datatype.json new file mode 100644 index 000000000..1a6897db3 --- /dev/null +++ b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_weighted_diurnal_debias_gf_on_station/datatype.json @@ -0,0 +1 @@ +{"class": "Station"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_weighted_diurnal_debias_gf_on_station/solution_df.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_weighted_diurnal_debias_gf_on_station/solution_df.parquet new file mode 100644 index 000000000..c8ed5644e Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_weighted_diurnal_debias_gf_on_station/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_weighted_diurnal_debias_gf_on_station/solution_gapsdf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_weighted_diurnal_debias_gf_on_station/solution_gapsdf.parquet new file mode 100644 index 000000000..e3d06668d Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_weighted_diurnal_debias_gf_on_station/solution_gapsdf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_weighted_diurnal_debias_gf_on_station/solution_metadf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_weighted_diurnal_debias_gf_on_station/solution_metadf.parquet new file mode 100644 index 000000000..ba9417867 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_weighted_diurnal_debias_gf_on_station/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_weighted_diurnal_debias_gf_on_station/solution_modeldatadf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_weighted_diurnal_debias_gf_on_station/solution_modeldatadf.parquet new file mode 100644 index 000000000..052617e8d Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_weighted_diurnal_debias_gf_on_station/solution_modeldatadf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_weighted_diurnal_debias_gf_on_station/solution_outliersdf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_weighted_diurnal_debias_gf_on_station/solution_outliersdf.parquet new file mode 100644 index 000000000..16d7551fb Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_weighted_diurnal_debias_gf_on_station/solution_outliersdf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_weighted_diurnal_debias_modeldata_gapfill/datatype.json b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_weighted_diurnal_debias_modeldata_gapfill/datatype.json new file mode 100644 index 000000000..c1cc8e2ca --- /dev/null +++ b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_weighted_diurnal_debias_modeldata_gapfill/datatype.json @@ -0,0 +1 @@ +{"class": "Dataset"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_weighted_diurnal_debias_modeldata_gapfill/solution_df.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_weighted_diurnal_debias_modeldata_gapfill/solution_df.parquet new file mode 100644 index 000000000..a8fb03675 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_weighted_diurnal_debias_modeldata_gapfill/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_weighted_diurnal_debias_modeldata_gapfill/solution_gapsdf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_weighted_diurnal_debias_modeldata_gapfill/solution_gapsdf.parquet new file mode 100644 index 000000000..77fd3ae10 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_weighted_diurnal_debias_modeldata_gapfill/solution_gapsdf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_weighted_diurnal_debias_modeldata_gapfill/solution_metadf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_weighted_diurnal_debias_modeldata_gapfill/solution_metadf.parquet new file mode 100644 index 000000000..3398eb6fe Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_weighted_diurnal_debias_modeldata_gapfill/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_weighted_diurnal_debias_modeldata_gapfill/solution_modeldatadf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_weighted_diurnal_debias_modeldata_gapfill/solution_modeldatadf.parquet new file mode 100644 index 000000000..75332a426 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_weighted_diurnal_debias_modeldata_gapfill/solution_modeldatadf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_weighted_diurnal_debias_modeldata_gapfill/solution_outliersdf.parquet b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_weighted_diurnal_debias_modeldata_gapfill/solution_outliersdf.parquet new file mode 100644 index 000000000..b802b21c2 Binary files /dev/null and b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_weighted_diurnal_debias_modeldata_gapfill/solution_outliersdf.parquet differ diff --git a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_weighted_diurnal_debias_modeldata_gapfill_A.pkl b/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_weighted_diurnal_debias_modeldata_gapfill_A.pkl deleted file mode 100644 index d644912d4..000000000 Binary files a/tests/pkled_solutions/test_gf_solutions/testdatawithgaps/test_weighted_diurnal_debias_modeldata_gapfill_A.pkl and /dev/null differ diff --git a/tests/pkled_solutions/test_importing_solutions/testdemodata/test_get_info/datatype.json b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_get_info/datatype.json new file mode 100644 index 000000000..e1f90f0e9 --- /dev/null +++ b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_get_info/datatype.json @@ -0,0 +1 @@ +{"class": "String"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_importing_solutions/testdemodata/test_get_info.pkl b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_get_info/solution_string.txt similarity index 89% rename from tests/pkled_solutions/test_importing_solutions/testdemodata/test_get_info.pkl rename to tests/pkled_solutions/test_importing_solutions/testdemodata/test_get_info/solution_string.txt index b727c7cae..224384c69 100644 Binary files a/tests/pkled_solutions/test_importing_solutions/testdemodata/test_get_info.pkl and b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_get_info/solution_string.txt differ diff --git a/tests/pkled_solutions/test_importing_solutions/testdemodata/test_get_station.pkl b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_get_station.pkl deleted file mode 100644 index c88f7744f..000000000 Binary files a/tests/pkled_solutions/test_importing_solutions/testdemodata/test_get_station.pkl and /dev/null differ diff --git a/tests/pkled_solutions/test_importing_solutions/testdemodata/test_get_station/datatype.json b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_get_station/datatype.json new file mode 100644 index 000000000..1a6897db3 --- /dev/null +++ b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_get_station/datatype.json @@ -0,0 +1 @@ +{"class": "Station"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_importing_solutions/testdemodata/test_get_station/solution_df.parquet b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_get_station/solution_df.parquet new file mode 100644 index 000000000..8020d4b99 Binary files /dev/null and b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_get_station/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_importing_solutions/testdemodata/test_get_station/solution_gapsdf.parquet b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_get_station/solution_gapsdf.parquet new file mode 100644 index 000000000..16d7551fb Binary files /dev/null and b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_get_station/solution_gapsdf.parquet differ diff --git a/tests/pkled_solutions/test_importing_solutions/testdemodata/test_get_station/solution_metadf.parquet b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_get_station/solution_metadf.parquet new file mode 100644 index 000000000..145fc0d7d Binary files /dev/null and b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_get_station/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_importing_solutions/testdemodata/test_get_station/solution_modeldatadf.parquet b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_get_station/solution_modeldatadf.parquet new file mode 100644 index 000000000..77d41827a Binary files /dev/null and b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_get_station/solution_modeldatadf.parquet differ diff --git a/tests/pkled_solutions/test_importing_solutions/testdemodata/test_get_station/solution_outliersdf.parquet b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_get_station/solution_outliersdf.parquet new file mode 100644 index 000000000..16d7551fb Binary files /dev/null and b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_get_station/solution_outliersdf.parquet differ diff --git a/tests/pkled_solutions/test_importing_solutions/testdemodata/test_import_demo_data.pkl b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_import_demo_data.pkl deleted file mode 100644 index 7ae56c206..000000000 Binary files a/tests/pkled_solutions/test_importing_solutions/testdemodata/test_import_demo_data.pkl and /dev/null differ diff --git a/tests/pkled_solutions/test_importing_solutions/testdemodata/test_import_demo_data/datatype.json b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_import_demo_data/datatype.json new file mode 100644 index 000000000..c1cc8e2ca --- /dev/null +++ b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_import_demo_data/datatype.json @@ -0,0 +1 @@ +{"class": "Dataset"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_importing_solutions/testdemodata/test_import_demo_data/solution_df.parquet b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_import_demo_data/solution_df.parquet new file mode 100644 index 000000000..28d6a75a9 Binary files /dev/null and b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_import_demo_data/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_importing_solutions/testdemodata/test_import_demo_data/solution_gapsdf.parquet b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_import_demo_data/solution_gapsdf.parquet new file mode 100644 index 000000000..0f99db71a Binary files /dev/null and b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_import_demo_data/solution_gapsdf.parquet differ diff --git a/tests/pkled_solutions/test_importing_solutions/testdemodata/test_import_demo_data/solution_metadf.parquet b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_import_demo_data/solution_metadf.parquet new file mode 100644 index 000000000..72b89b083 Binary files /dev/null and b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_import_demo_data/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_importing_solutions/testdemodata/test_import_demo_data/solution_modeldatadf.parquet b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_import_demo_data/solution_modeldatadf.parquet new file mode 100644 index 000000000..5b68f8b54 Binary files /dev/null and b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_import_demo_data/solution_modeldatadf.parquet differ diff --git a/tests/pkled_solutions/test_importing_solutions/testdemodata/test_import_demo_data/solution_outliersdf.parquet b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_import_demo_data/solution_outliersdf.parquet new file mode 100644 index 000000000..b802b21c2 Binary files /dev/null and b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_import_demo_data/solution_outliersdf.parquet differ diff --git a/tests/pkled_solutions/test_importing_solutions/testdemodata/test_import_wide_data.pkl b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_import_wide_data.pkl deleted file mode 100644 index 6c8448981..000000000 Binary files a/tests/pkled_solutions/test_importing_solutions/testdemodata/test_import_wide_data.pkl and /dev/null differ diff --git a/tests/pkled_solutions/test_importing_solutions/testdemodata/test_subset_by_stations.pkl b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_subset_by_stations.pkl deleted file mode 100644 index cdf8d98fa..000000000 Binary files a/tests/pkled_solutions/test_importing_solutions/testdemodata/test_subset_by_stations.pkl and /dev/null differ diff --git a/tests/pkled_solutions/test_importing_solutions/testdemodata/test_subset_by_stations/datatype.json b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_subset_by_stations/datatype.json new file mode 100644 index 000000000..c1cc8e2ca --- /dev/null +++ b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_subset_by_stations/datatype.json @@ -0,0 +1 @@ +{"class": "Dataset"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_importing_solutions/testdemodata/test_subset_by_stations/solution_df.parquet b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_subset_by_stations/solution_df.parquet new file mode 100644 index 000000000..349cf3494 Binary files /dev/null and b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_subset_by_stations/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_importing_solutions/testdemodata/test_subset_by_stations/solution_gapsdf.parquet b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_subset_by_stations/solution_gapsdf.parquet new file mode 100644 index 000000000..0f99db71a Binary files /dev/null and b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_subset_by_stations/solution_gapsdf.parquet differ diff --git a/tests/pkled_solutions/test_importing_solutions/testdemodata/test_subset_by_stations/solution_metadf.parquet b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_subset_by_stations/solution_metadf.parquet new file mode 100644 index 000000000..af5f7c5dd Binary files /dev/null and b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_subset_by_stations/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_importing_solutions/testdemodata/test_subset_by_stations/solution_modeldatadf.parquet b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_subset_by_stations/solution_modeldatadf.parquet new file mode 100644 index 000000000..5b68f8b54 Binary files /dev/null and b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_subset_by_stations/solution_modeldatadf.parquet differ diff --git a/tests/pkled_solutions/test_importing_solutions/testdemodata/test_subset_by_stations/solution_outliersdf.parquet b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_subset_by_stations/solution_outliersdf.parquet new file mode 100644 index 000000000..b802b21c2 Binary files /dev/null and b/tests/pkled_solutions/test_importing_solutions/testdemodata/test_subset_by_stations/solution_outliersdf.parquet differ diff --git a/tests/pkled_solutions/test_importing_solutions/testparquetdata/test_import_parquet_data.pkl b/tests/pkled_solutions/test_importing_solutions/testparquetdata/test_import_parquet_data.pkl deleted file mode 100644 index bf0ba0e9f..000000000 Binary files a/tests/pkled_solutions/test_importing_solutions/testparquetdata/test_import_parquet_data.pkl and /dev/null differ diff --git a/tests/pkled_solutions/test_importing_solutions/testwidedata/test_import_wide_data.pkl b/tests/pkled_solutions/test_importing_solutions/testwidedata/test_import_wide_data.pkl deleted file mode 100644 index b0243bd7e..000000000 Binary files a/tests/pkled_solutions/test_importing_solutions/testwidedata/test_import_wide_data.pkl and /dev/null differ diff --git a/tests/pkled_solutions/test_importing_solutions/testwidedata/test_import_wide_data/datatype.json b/tests/pkled_solutions/test_importing_solutions/testwidedata/test_import_wide_data/datatype.json new file mode 100644 index 000000000..c1cc8e2ca --- /dev/null +++ b/tests/pkled_solutions/test_importing_solutions/testwidedata/test_import_wide_data/datatype.json @@ -0,0 +1 @@ +{"class": "Dataset"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_importing_solutions/testwidedata/test_import_wide_data/solution_df.parquet b/tests/pkled_solutions/test_importing_solutions/testwidedata/test_import_wide_data/solution_df.parquet new file mode 100644 index 000000000..5b5be83e7 Binary files /dev/null and b/tests/pkled_solutions/test_importing_solutions/testwidedata/test_import_wide_data/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_importing_solutions/testwidedata/test_import_wide_data/solution_gapsdf.parquet b/tests/pkled_solutions/test_importing_solutions/testwidedata/test_import_wide_data/solution_gapsdf.parquet new file mode 100644 index 000000000..153e65edb Binary files /dev/null and b/tests/pkled_solutions/test_importing_solutions/testwidedata/test_import_wide_data/solution_gapsdf.parquet differ diff --git a/tests/pkled_solutions/test_importing_solutions/testwidedata/test_import_wide_data/solution_metadf.parquet b/tests/pkled_solutions/test_importing_solutions/testwidedata/test_import_wide_data/solution_metadf.parquet new file mode 100644 index 000000000..bf04432ee Binary files /dev/null and b/tests/pkled_solutions/test_importing_solutions/testwidedata/test_import_wide_data/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_importing_solutions/testwidedata/test_import_wide_data/solution_modeldatadf.parquet b/tests/pkled_solutions/test_importing_solutions/testwidedata/test_import_wide_data/solution_modeldatadf.parquet new file mode 100644 index 000000000..5b68f8b54 Binary files /dev/null and b/tests/pkled_solutions/test_importing_solutions/testwidedata/test_import_wide_data/solution_modeldatadf.parquet differ diff --git a/tests/pkled_solutions/test_importing_solutions/testwidedata/test_import_wide_data/solution_outliersdf.parquet b/tests/pkled_solutions/test_importing_solutions/testwidedata/test_import_wide_data/solution_outliersdf.parquet new file mode 100644 index 000000000..b802b21c2 Binary files /dev/null and b/tests/pkled_solutions/test_importing_solutions/testwidedata/test_import_wide_data/solution_outliersdf.parquet differ diff --git a/tests/pkled_solutions/test_importing_solutions/testwidedata/test_sync_wide_records.pkl b/tests/pkled_solutions/test_importing_solutions/testwidedata/test_sync_wide_records.pkl deleted file mode 100644 index 03b34e7cc..000000000 Binary files a/tests/pkled_solutions/test_importing_solutions/testwidedata/test_sync_wide_records.pkl and /dev/null differ diff --git a/tests/pkled_solutions/test_importing_solutions/testwidedata/test_sync_wide_records/datatype.json b/tests/pkled_solutions/test_importing_solutions/testwidedata/test_sync_wide_records/datatype.json new file mode 100644 index 000000000..c1cc8e2ca --- /dev/null +++ b/tests/pkled_solutions/test_importing_solutions/testwidedata/test_sync_wide_records/datatype.json @@ -0,0 +1 @@ +{"class": "Dataset"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_importing_solutions/testwidedata/test_sync_wide_records/solution_df.parquet b/tests/pkled_solutions/test_importing_solutions/testwidedata/test_sync_wide_records/solution_df.parquet new file mode 100644 index 000000000..247382b40 Binary files /dev/null and b/tests/pkled_solutions/test_importing_solutions/testwidedata/test_sync_wide_records/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_importing_solutions/testwidedata/test_sync_wide_records/solution_gapsdf.parquet b/tests/pkled_solutions/test_importing_solutions/testwidedata/test_sync_wide_records/solution_gapsdf.parquet new file mode 100644 index 000000000..153e65edb Binary files /dev/null and b/tests/pkled_solutions/test_importing_solutions/testwidedata/test_sync_wide_records/solution_gapsdf.parquet differ diff --git a/tests/pkled_solutions/test_importing_solutions/testwidedata/test_sync_wide_records/solution_metadf.parquet b/tests/pkled_solutions/test_importing_solutions/testwidedata/test_sync_wide_records/solution_metadf.parquet new file mode 100644 index 000000000..bf04432ee Binary files /dev/null and b/tests/pkled_solutions/test_importing_solutions/testwidedata/test_sync_wide_records/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_importing_solutions/testwidedata/test_sync_wide_records/solution_modeldatadf.parquet b/tests/pkled_solutions/test_importing_solutions/testwidedata/test_sync_wide_records/solution_modeldatadf.parquet new file mode 100644 index 000000000..5b68f8b54 Binary files /dev/null and b/tests/pkled_solutions/test_importing_solutions/testwidedata/test_sync_wide_records/solution_modeldatadf.parquet differ diff --git a/tests/pkled_solutions/test_importing_solutions/testwidedata/test_sync_wide_records/solution_outliersdf.parquet b/tests/pkled_solutions/test_importing_solutions/testwidedata/test_sync_wide_records/solution_outliersdf.parquet new file mode 100644 index 000000000..b802b21c2 Binary files /dev/null and b/tests/pkled_solutions/test_importing_solutions/testwidedata/test_sync_wide_records/solution_outliersdf.parquet differ diff --git a/tests/pkled_solutions/test_importing_solutions/testwidesinglestationdata/test_import_wide_data.pkl b/tests/pkled_solutions/test_importing_solutions/testwidesinglestationdata/test_import_wide_data.pkl deleted file mode 100644 index 5a155ba31..000000000 Binary files a/tests/pkled_solutions/test_importing_solutions/testwidesinglestationdata/test_import_wide_data.pkl and /dev/null differ diff --git a/tests/pkled_solutions/test_importing_solutions/testwidesinglestationdata/test_import_wide_data/datatype.json b/tests/pkled_solutions/test_importing_solutions/testwidesinglestationdata/test_import_wide_data/datatype.json new file mode 100644 index 000000000..c1cc8e2ca --- /dev/null +++ b/tests/pkled_solutions/test_importing_solutions/testwidesinglestationdata/test_import_wide_data/datatype.json @@ -0,0 +1 @@ +{"class": "Dataset"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_importing_solutions/testwidesinglestationdata/test_import_wide_data/solution_df.parquet b/tests/pkled_solutions/test_importing_solutions/testwidesinglestationdata/test_import_wide_data/solution_df.parquet new file mode 100644 index 000000000..b371a90dd Binary files /dev/null and b/tests/pkled_solutions/test_importing_solutions/testwidesinglestationdata/test_import_wide_data/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_importing_solutions/testwidesinglestationdata/test_import_wide_data/solution_gapsdf.parquet b/tests/pkled_solutions/test_importing_solutions/testwidesinglestationdata/test_import_wide_data/solution_gapsdf.parquet new file mode 100644 index 000000000..b802b21c2 Binary files /dev/null and b/tests/pkled_solutions/test_importing_solutions/testwidesinglestationdata/test_import_wide_data/solution_gapsdf.parquet differ diff --git a/tests/pkled_solutions/test_importing_solutions/testwidesinglestationdata/test_import_wide_data/solution_metadf.parquet b/tests/pkled_solutions/test_importing_solutions/testwidesinglestationdata/test_import_wide_data/solution_metadf.parquet new file mode 100644 index 000000000..5376eb018 Binary files /dev/null and b/tests/pkled_solutions/test_importing_solutions/testwidesinglestationdata/test_import_wide_data/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_importing_solutions/testwidesinglestationdata/test_import_wide_data/solution_modeldatadf.parquet b/tests/pkled_solutions/test_importing_solutions/testwidesinglestationdata/test_import_wide_data/solution_modeldatadf.parquet new file mode 100644 index 000000000..5b68f8b54 Binary files /dev/null and b/tests/pkled_solutions/test_importing_solutions/testwidesinglestationdata/test_import_wide_data/solution_modeldatadf.parquet differ diff --git a/tests/pkled_solutions/test_importing_solutions/testwidesinglestationdata/test_import_wide_data/solution_outliersdf.parquet b/tests/pkled_solutions/test_importing_solutions/testwidesinglestationdata/test_import_wide_data/solution_outliersdf.parquet new file mode 100644 index 000000000..b802b21c2 Binary files /dev/null and b/tests/pkled_solutions/test_importing_solutions/testwidesinglestationdata/test_import_wide_data/solution_outliersdf.parquet differ diff --git a/tests/pkled_solutions/test_obstypes_solutions/testobstypedata/test_import_demo_data.pkl b/tests/pkled_solutions/test_obstypes_solutions/testobstypedata/test_import_demo_data.pkl deleted file mode 100644 index 77e1351f5..000000000 Binary files a/tests/pkled_solutions/test_obstypes_solutions/testobstypedata/test_import_demo_data.pkl and /dev/null differ diff --git a/tests/pkled_solutions/test_obstypes_solutions/testobstypedata/test_import_demo_data/datatype.json b/tests/pkled_solutions/test_obstypes_solutions/testobstypedata/test_import_demo_data/datatype.json new file mode 100644 index 000000000..c1cc8e2ca --- /dev/null +++ b/tests/pkled_solutions/test_obstypes_solutions/testobstypedata/test_import_demo_data/datatype.json @@ -0,0 +1 @@ +{"class": "Dataset"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_obstypes_solutions/testobstypedata/test_import_demo_data/solution_df.parquet b/tests/pkled_solutions/test_obstypes_solutions/testobstypedata/test_import_demo_data/solution_df.parquet new file mode 100644 index 000000000..28d6a75a9 Binary files /dev/null and b/tests/pkled_solutions/test_obstypes_solutions/testobstypedata/test_import_demo_data/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_obstypes_solutions/testobstypedata/test_import_demo_data/solution_gapsdf.parquet b/tests/pkled_solutions/test_obstypes_solutions/testobstypedata/test_import_demo_data/solution_gapsdf.parquet new file mode 100644 index 000000000..0f99db71a Binary files /dev/null and b/tests/pkled_solutions/test_obstypes_solutions/testobstypedata/test_import_demo_data/solution_gapsdf.parquet differ diff --git a/tests/pkled_solutions/test_obstypes_solutions/testobstypedata/test_import_demo_data/solution_metadf.parquet b/tests/pkled_solutions/test_obstypes_solutions/testobstypedata/test_import_demo_data/solution_metadf.parquet new file mode 100644 index 000000000..72b89b083 Binary files /dev/null and b/tests/pkled_solutions/test_obstypes_solutions/testobstypedata/test_import_demo_data/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_obstypes_solutions/testobstypedata/test_import_demo_data/solution_modeldatadf.parquet b/tests/pkled_solutions/test_obstypes_solutions/testobstypedata/test_import_demo_data/solution_modeldatadf.parquet new file mode 100644 index 000000000..5b68f8b54 Binary files /dev/null and b/tests/pkled_solutions/test_obstypes_solutions/testobstypedata/test_import_demo_data/solution_modeldatadf.parquet differ diff --git a/tests/pkled_solutions/test_obstypes_solutions/testobstypedata/test_import_demo_data/solution_outliersdf.parquet b/tests/pkled_solutions/test_obstypes_solutions/testobstypedata/test_import_demo_data/solution_outliersdf.parquet new file mode 100644 index 000000000..b802b21c2 Binary files /dev/null and b/tests/pkled_solutions/test_obstypes_solutions/testobstypedata/test_import_demo_data/solution_outliersdf.parquet differ diff --git a/tests/pkled_solutions/test_plotting_solutions/testdemodata/test_import_data.pkl b/tests/pkled_solutions/test_plotting_solutions/testdemodata/test_import_data.pkl deleted file mode 100644 index 1a2f98cf5..000000000 Binary files a/tests/pkled_solutions/test_plotting_solutions/testdemodata/test_import_data.pkl and /dev/null differ diff --git a/tests/pkled_solutions/test_plotting_solutions/testdemodata/test_import_data/datatype.json b/tests/pkled_solutions/test_plotting_solutions/testdemodata/test_import_data/datatype.json new file mode 100644 index 000000000..c1cc8e2ca --- /dev/null +++ b/tests/pkled_solutions/test_plotting_solutions/testdemodata/test_import_data/datatype.json @@ -0,0 +1 @@ +{"class": "Dataset"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_plotting_solutions/testdemodata/test_import_data/solution_df.parquet b/tests/pkled_solutions/test_plotting_solutions/testdemodata/test_import_data/solution_df.parquet new file mode 100644 index 000000000..750d6a827 Binary files /dev/null and b/tests/pkled_solutions/test_plotting_solutions/testdemodata/test_import_data/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_plotting_solutions/testdemodata/test_import_data/solution_gapsdf.parquet b/tests/pkled_solutions/test_plotting_solutions/testdemodata/test_import_data/solution_gapsdf.parquet new file mode 100644 index 000000000..b802b21c2 Binary files /dev/null and b/tests/pkled_solutions/test_plotting_solutions/testdemodata/test_import_data/solution_gapsdf.parquet differ diff --git a/tests/pkled_solutions/test_plotting_solutions/testdemodata/test_import_data/solution_metadf.parquet b/tests/pkled_solutions/test_plotting_solutions/testdemodata/test_import_data/solution_metadf.parquet new file mode 100644 index 000000000..72b89b083 Binary files /dev/null and b/tests/pkled_solutions/test_plotting_solutions/testdemodata/test_import_data/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_plotting_solutions/testdemodata/test_import_data/solution_modeldatadf.parquet b/tests/pkled_solutions/test_plotting_solutions/testdemodata/test_import_data/solution_modeldatadf.parquet new file mode 100644 index 000000000..5b68f8b54 Binary files /dev/null and b/tests/pkled_solutions/test_plotting_solutions/testdemodata/test_import_data/solution_modeldatadf.parquet differ diff --git a/tests/pkled_solutions/test_plotting_solutions/testdemodata/test_import_data/solution_outliersdf.parquet b/tests/pkled_solutions/test_plotting_solutions/testdemodata/test_import_data/solution_outliersdf.parquet new file mode 100644 index 000000000..b802b21c2 Binary files /dev/null and b/tests/pkled_solutions/test_plotting_solutions/testdemodata/test_import_data/solution_outliersdf.parquet differ diff --git a/tests/pkled_solutions/test_plotting_solutions/testdemodata/test_import_data_with_era5/datatype.json b/tests/pkled_solutions/test_plotting_solutions/testdemodata/test_import_data_with_era5/datatype.json new file mode 100644 index 000000000..c1cc8e2ca --- /dev/null +++ b/tests/pkled_solutions/test_plotting_solutions/testdemodata/test_import_data_with_era5/datatype.json @@ -0,0 +1 @@ +{"class": "Dataset"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_plotting_solutions/testdemodata/test_import_data_with_era5/solution_df.parquet b/tests/pkled_solutions/test_plotting_solutions/testdemodata/test_import_data_with_era5/solution_df.parquet new file mode 100644 index 000000000..e7b817fd4 Binary files /dev/null and b/tests/pkled_solutions/test_plotting_solutions/testdemodata/test_import_data_with_era5/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_plotting_solutions/testdemodata/test_import_data_with_era5/solution_gapsdf.parquet b/tests/pkled_solutions/test_plotting_solutions/testdemodata/test_import_data_with_era5/solution_gapsdf.parquet new file mode 100644 index 000000000..a2dec74de Binary files /dev/null and b/tests/pkled_solutions/test_plotting_solutions/testdemodata/test_import_data_with_era5/solution_gapsdf.parquet differ diff --git a/tests/pkled_solutions/test_plotting_solutions/testdemodata/test_import_data_with_era5/solution_metadf.parquet b/tests/pkled_solutions/test_plotting_solutions/testdemodata/test_import_data_with_era5/solution_metadf.parquet new file mode 100644 index 000000000..72b89b083 Binary files /dev/null and b/tests/pkled_solutions/test_plotting_solutions/testdemodata/test_import_data_with_era5/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_plotting_solutions/testdemodata/test_import_data_with_era5/solution_modeldatadf.parquet b/tests/pkled_solutions/test_plotting_solutions/testdemodata/test_import_data_with_era5/solution_modeldatadf.parquet new file mode 100644 index 000000000..3b639f50f Binary files /dev/null and b/tests/pkled_solutions/test_plotting_solutions/testdemodata/test_import_data_with_era5/solution_modeldatadf.parquet differ diff --git a/tests/pkled_solutions/test_plotting_solutions/testdemodata/test_import_data_with_era5/solution_outliersdf.parquet b/tests/pkled_solutions/test_plotting_solutions/testdemodata/test_import_data_with_era5/solution_outliersdf.parquet new file mode 100644 index 000000000..b802b21c2 Binary files /dev/null and b/tests/pkled_solutions/test_plotting_solutions/testdemodata/test_import_data_with_era5/solution_outliersdf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_apply_qc.pkl b/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_apply_qc.pkl deleted file mode 100644 index 7f8f4ada7..000000000 Binary files a/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_apply_qc.pkl and /dev/null differ diff --git a/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_import_data.pkl b/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_import_data.pkl deleted file mode 100644 index 9737cd9fb..000000000 Binary files a/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_import_data.pkl and /dev/null differ diff --git a/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_statistics.pkl b/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_statistics.pkl deleted file mode 100644 index 772ec7078..000000000 Binary files a/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_statistics.pkl and /dev/null differ diff --git a/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_stats_check/all_labels/datatype.json b/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_stats_check/all_labels/datatype.json new file mode 100644 index 000000000..bbf7c5bc4 --- /dev/null +++ b/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_stats_check/all_labels/datatype.json @@ -0,0 +1 @@ +{"class": "Series"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_stats_check/all_labels/solution_series.parquet b/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_stats_check/all_labels/solution_series.parquet new file mode 100644 index 000000000..b68cee6e4 Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_stats_check/all_labels/solution_series.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_stats_check/datatype.json b/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_stats_check/datatype.json new file mode 100644 index 000000000..f73490f07 --- /dev/null +++ b/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_stats_check/datatype.json @@ -0,0 +1 @@ +{"class": "Dict"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_stats_check/outlier_labels/datatype.json b/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_stats_check/outlier_labels/datatype.json new file mode 100644 index 000000000..bbf7c5bc4 --- /dev/null +++ b/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_stats_check/outlier_labels/datatype.json @@ -0,0 +1 @@ +{"class": "Series"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_stats_check/outlier_labels/solution_series.parquet b/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_stats_check/outlier_labels/solution_series.parquet new file mode 100644 index 000000000..c39e6947e Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_stats_check/outlier_labels/solution_series.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_stats_check/per_check_labels/datatype.json b/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_stats_check/per_check_labels/datatype.json new file mode 100644 index 000000000..bbf7c5bc4 --- /dev/null +++ b/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_stats_check/per_check_labels/datatype.json @@ -0,0 +1 @@ +{"class": "Series"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_stats_check/per_check_labels/solution_series.parquet b/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_stats_check/per_check_labels/solution_series.parquet new file mode 100644 index 000000000..d7b2fac6b Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_stats_check/per_check_labels/solution_series.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_stats_check/solution_df.parquet b/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_stats_check/solution_df.parquet new file mode 100644 index 000000000..8280f6cbb Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_stats_check/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_with_solution/datatype.json b/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_with_solution/datatype.json new file mode 100644 index 000000000..c1cc8e2ca --- /dev/null +++ b/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_with_solution/datatype.json @@ -0,0 +1 @@ +{"class": "Dataset"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_with_solution/solution_df.parquet b/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_with_solution/solution_df.parquet new file mode 100644 index 000000000..19a4b94b5 Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_with_solution/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_with_solution/solution_gapsdf.parquet b/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_with_solution/solution_gapsdf.parquet new file mode 100644 index 000000000..dc544c56c Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_with_solution/solution_gapsdf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_with_solution/solution_metadf.parquet b/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_with_solution/solution_metadf.parquet new file mode 100644 index 000000000..c6ca8fc96 Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_with_solution/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_with_solution/solution_modeldatadf.parquet b/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_with_solution/solution_modeldatadf.parquet new file mode 100644 index 000000000..5b68f8b54 Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_with_solution/solution_modeldatadf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_with_solution/solution_outliersdf.parquet b/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_with_solution/solution_outliersdf.parquet new file mode 100644 index 000000000..dd6ba5044 Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testbreakingdata/test_qc_with_solution/solution_outliersdf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_more_iterations/datatype.json b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_more_iterations/datatype.json new file mode 100644 index 000000000..c1cc8e2ca --- /dev/null +++ b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_more_iterations/datatype.json @@ -0,0 +1 @@ +{"class": "Dataset"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_more_iterations/solution_df.parquet b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_more_iterations/solution_df.parquet new file mode 100644 index 000000000..0fb068d25 Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_more_iterations/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_more_iterations/solution_gapsdf.parquet b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_more_iterations/solution_gapsdf.parquet new file mode 100644 index 000000000..20c44537c Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_more_iterations/solution_gapsdf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_more_iterations/solution_metadf.parquet b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_more_iterations/solution_metadf.parquet new file mode 100644 index 000000000..dad1db34b Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_more_iterations/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_more_iterations/solution_modeldatadf.parquet b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_more_iterations/solution_modeldatadf.parquet new file mode 100644 index 000000000..5b68f8b54 Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_more_iterations/solution_modeldatadf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_more_iterations/solution_outliersdf.parquet b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_more_iterations/solution_outliersdf.parquet new file mode 100644 index 000000000..1556eef80 Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_more_iterations/solution_outliersdf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_one_iteration/datatype.json b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_one_iteration/datatype.json new file mode 100644 index 000000000..c1cc8e2ca --- /dev/null +++ b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_one_iteration/datatype.json @@ -0,0 +1 @@ +{"class": "Dataset"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_one_iteration/solution_df.parquet b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_one_iteration/solution_df.parquet new file mode 100644 index 000000000..33108dd16 Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_one_iteration/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_one_iteration/solution_gapsdf.parquet b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_one_iteration/solution_gapsdf.parquet new file mode 100644 index 000000000..20c44537c Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_one_iteration/solution_gapsdf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_one_iteration/solution_metadf.parquet b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_one_iteration/solution_metadf.parquet new file mode 100644 index 000000000..dad1db34b Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_one_iteration/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_one_iteration/solution_modeldatadf.parquet b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_one_iteration/solution_modeldatadf.parquet new file mode 100644 index 000000000..5b68f8b54 Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_one_iteration/solution_modeldatadf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_one_iteration/solution_outliersdf.parquet b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_one_iteration/solution_outliersdf.parquet new file mode 100644 index 000000000..ba4247031 Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_one_iteration/solution_outliersdf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_with_big_radius/datatype.json b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_with_big_radius/datatype.json new file mode 100644 index 000000000..c1cc8e2ca --- /dev/null +++ b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_with_big_radius/datatype.json @@ -0,0 +1 @@ +{"class": "Dataset"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_with_big_radius/solution_df.parquet b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_with_big_radius/solution_df.parquet new file mode 100644 index 000000000..f91d33e66 Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_with_big_radius/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_with_big_radius/solution_gapsdf.parquet b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_with_big_radius/solution_gapsdf.parquet new file mode 100644 index 000000000..20c44537c Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_with_big_radius/solution_gapsdf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_with_big_radius/solution_metadf.parquet b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_with_big_radius/solution_metadf.parquet new file mode 100644 index 000000000..dad1db34b Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_with_big_radius/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_with_big_radius/solution_modeldatadf.parquet b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_with_big_radius/solution_modeldatadf.parquet new file mode 100644 index 000000000..5b68f8b54 Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_with_big_radius/solution_modeldatadf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_with_big_radius/solution_outliersdf.parquet b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_with_big_radius/solution_outliersdf.parquet new file mode 100644 index 000000000..43465a04d Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_with_big_radius/solution_outliersdf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_with_safety_nets/datatype.json b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_with_safety_nets/datatype.json new file mode 100644 index 000000000..c1cc8e2ca --- /dev/null +++ b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_with_safety_nets/datatype.json @@ -0,0 +1 @@ +{"class": "Dataset"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_with_safety_nets/solution_df.parquet b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_with_safety_nets/solution_df.parquet new file mode 100644 index 000000000..1e20ae048 Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_with_safety_nets/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_with_safety_nets/solution_gapsdf.parquet b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_with_safety_nets/solution_gapsdf.parquet new file mode 100644 index 000000000..20c44537c Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_with_safety_nets/solution_gapsdf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_with_safety_nets/solution_metadf.parquet b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_with_safety_nets/solution_metadf.parquet new file mode 100644 index 000000000..dad1db34b Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_with_safety_nets/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_with_safety_nets/solution_modeldatadf.parquet b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_with_safety_nets/solution_modeldatadf.parquet new file mode 100644 index 000000000..5b68f8b54 Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_with_safety_nets/solution_modeldatadf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_with_safety_nets/solution_outliersdf.parquet b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_with_safety_nets/solution_outliersdf.parquet new file mode 100644 index 000000000..f89f134c0 Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_buddy_check_with_safety_nets/solution_outliersdf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_import_data/datatype.json b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_import_data/datatype.json new file mode 100644 index 000000000..c1cc8e2ca --- /dev/null +++ b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_import_data/datatype.json @@ -0,0 +1 @@ +{"class": "Dataset"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_import_data/solution_df.parquet b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_import_data/solution_df.parquet new file mode 100644 index 000000000..1ce4506ef Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_import_data/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_import_data/solution_gapsdf.parquet b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_import_data/solution_gapsdf.parquet new file mode 100644 index 000000000..20c44537c Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_import_data/solution_gapsdf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_import_data/solution_metadf.parquet b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_import_data/solution_metadf.parquet new file mode 100644 index 000000000..dad1db34b Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_import_data/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_import_data/solution_modeldatadf.parquet b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_import_data/solution_modeldatadf.parquet new file mode 100644 index 000000000..5b68f8b54 Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_import_data/solution_modeldatadf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_import_data/solution_outliersdf.parquet b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_import_data/solution_outliersdf.parquet new file mode 100644 index 000000000..b802b21c2 Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testbuddycheck/test_import_data/solution_outliersdf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testdemodata/test_buddy_check_1_iter.pkl b/tests/pkled_solutions/test_qc_solutions/testdemodata/test_buddy_check_1_iter.pkl deleted file mode 100644 index b1d26c06c..000000000 Binary files a/tests/pkled_solutions/test_qc_solutions/testdemodata/test_buddy_check_1_iter.pkl and /dev/null differ diff --git a/tests/pkled_solutions/test_qc_solutions/testdemodata/test_buddy_check_2_iter.pkl b/tests/pkled_solutions/test_qc_solutions/testdemodata/test_buddy_check_2_iter.pkl deleted file mode 100644 index 493dfdc67..000000000 Binary files a/tests/pkled_solutions/test_qc_solutions/testdemodata/test_buddy_check_2_iter.pkl and /dev/null differ diff --git a/tests/pkled_solutions/test_qc_solutions/testdemodata/test_import_data/datatype.json b/tests/pkled_solutions/test_qc_solutions/testdemodata/test_import_data/datatype.json new file mode 100644 index 000000000..c1cc8e2ca --- /dev/null +++ b/tests/pkled_solutions/test_qc_solutions/testdemodata/test_import_data/datatype.json @@ -0,0 +1 @@ +{"class": "Dataset"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_qc_solutions/testdemodata/test_import_data/solution_df.parquet b/tests/pkled_solutions/test_qc_solutions/testdemodata/test_import_data/solution_df.parquet new file mode 100644 index 000000000..750d6a827 Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testdemodata/test_import_data/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testdemodata/test_import_data/solution_gapsdf.parquet b/tests/pkled_solutions/test_qc_solutions/testdemodata/test_import_data/solution_gapsdf.parquet new file mode 100644 index 000000000..b802b21c2 Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testdemodata/test_import_data/solution_gapsdf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testdemodata/test_import_data/solution_metadf.parquet b/tests/pkled_solutions/test_qc_solutions/testdemodata/test_import_data/solution_metadf.parquet new file mode 100644 index 000000000..7956d4ede Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testdemodata/test_import_data/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testdemodata/test_import_data/solution_modeldatadf.parquet b/tests/pkled_solutions/test_qc_solutions/testdemodata/test_import_data/solution_modeldatadf.parquet new file mode 100644 index 000000000..5b68f8b54 Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testdemodata/test_import_data/solution_modeldatadf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testdemodata/test_import_data/solution_outliersdf.parquet b/tests/pkled_solutions/test_qc_solutions/testdemodata/test_import_data/solution_outliersdf.parquet new file mode 100644 index 000000000..b802b21c2 Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testdemodata/test_import_data/solution_outliersdf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_import_data/datatype.json b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_import_data/datatype.json new file mode 100644 index 000000000..c1cc8e2ca --- /dev/null +++ b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_import_data/datatype.json @@ -0,0 +1 @@ +{"class": "Dataset"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_import_data/solution_df.parquet b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_import_data/solution_df.parquet new file mode 100644 index 000000000..750d6a827 Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_import_data/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_import_data/solution_gapsdf.parquet b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_import_data/solution_gapsdf.parquet new file mode 100644 index 000000000..b802b21c2 Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_import_data/solution_gapsdf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_import_data/solution_metadf.parquet b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_import_data/solution_metadf.parquet new file mode 100644 index 000000000..7956d4ede Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_import_data/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_import_data/solution_modeldatadf.parquet b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_import_data/solution_modeldatadf.parquet new file mode 100644 index 000000000..5b68f8b54 Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_import_data/solution_modeldatadf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_import_data/solution_outliersdf.parquet b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_import_data/solution_outliersdf.parquet new file mode 100644 index 000000000..b802b21c2 Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_import_data/solution_outliersdf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_datetime_only/datatype.json b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_datetime_only/datatype.json new file mode 100644 index 000000000..c1cc8e2ca --- /dev/null +++ b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_datetime_only/datatype.json @@ -0,0 +1 @@ +{"class": "Dataset"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_datetime_only/solution_df.parquet b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_datetime_only/solution_df.parquet new file mode 100644 index 000000000..7fd5f1f24 Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_datetime_only/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_datetime_only/solution_gapsdf.parquet b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_datetime_only/solution_gapsdf.parquet new file mode 100644 index 000000000..b802b21c2 Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_datetime_only/solution_gapsdf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_datetime_only/solution_metadf.parquet b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_datetime_only/solution_metadf.parquet new file mode 100644 index 000000000..7956d4ede Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_datetime_only/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_datetime_only/solution_modeldatadf.parquet b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_datetime_only/solution_modeldatadf.parquet new file mode 100644 index 000000000..5b68f8b54 Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_datetime_only/solution_modeldatadf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_datetime_only/solution_outliersdf.parquet b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_datetime_only/solution_outliersdf.parquet new file mode 100644 index 000000000..8cb91c9fa Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_datetime_only/solution_outliersdf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_full_multiindex/datatype.json b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_full_multiindex/datatype.json new file mode 100644 index 000000000..c1cc8e2ca --- /dev/null +++ b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_full_multiindex/datatype.json @@ -0,0 +1 @@ +{"class": "Dataset"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_full_multiindex/solution_df.parquet b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_full_multiindex/solution_df.parquet new file mode 100644 index 000000000..c64b9bc7b Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_full_multiindex/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_full_multiindex/solution_gapsdf.parquet b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_full_multiindex/solution_gapsdf.parquet new file mode 100644 index 000000000..b802b21c2 Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_full_multiindex/solution_gapsdf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_full_multiindex/solution_metadf.parquet b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_full_multiindex/solution_metadf.parquet new file mode 100644 index 000000000..7956d4ede Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_full_multiindex/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_full_multiindex/solution_modeldatadf.parquet b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_full_multiindex/solution_modeldatadf.parquet new file mode 100644 index 000000000..5b68f8b54 Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_full_multiindex/solution_modeldatadf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_full_multiindex/solution_outliersdf.parquet b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_full_multiindex/solution_outliersdf.parquet new file mode 100644 index 000000000..9ec2671e2 Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_full_multiindex/solution_outliersdf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_name_and_datetime/datatype.json b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_name_and_datetime/datatype.json new file mode 100644 index 000000000..c1cc8e2ca --- /dev/null +++ b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_name_and_datetime/datatype.json @@ -0,0 +1 @@ +{"class": "Dataset"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_name_and_datetime/solution_df.parquet b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_name_and_datetime/solution_df.parquet new file mode 100644 index 000000000..d061a1858 Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_name_and_datetime/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_name_and_datetime/solution_gapsdf.parquet b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_name_and_datetime/solution_gapsdf.parquet new file mode 100644 index 000000000..b802b21c2 Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_name_and_datetime/solution_gapsdf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_name_and_datetime/solution_metadf.parquet b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_name_and_datetime/solution_metadf.parquet new file mode 100644 index 000000000..7956d4ede Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_name_and_datetime/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_name_and_datetime/solution_modeldatadf.parquet b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_name_and_datetime/solution_modeldatadf.parquet new file mode 100644 index 000000000..5b68f8b54 Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_name_and_datetime/solution_modeldatadf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_name_and_datetime/solution_outliersdf.parquet b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_name_and_datetime/solution_outliersdf.parquet new file mode 100644 index 000000000..87408c609 Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_name_and_datetime/solution_outliersdf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_name_only/datatype.json b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_name_only/datatype.json new file mode 100644 index 000000000..c1cc8e2ca --- /dev/null +++ b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_name_only/datatype.json @@ -0,0 +1 @@ +{"class": "Dataset"} \ No newline at end of file diff --git a/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_name_only/solution_df.parquet b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_name_only/solution_df.parquet new file mode 100644 index 000000000..9fbb7fa5a Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_name_only/solution_df.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_name_only/solution_gapsdf.parquet b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_name_only/solution_gapsdf.parquet new file mode 100644 index 000000000..b802b21c2 Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_name_only/solution_gapsdf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_name_only/solution_metadf.parquet b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_name_only/solution_metadf.parquet new file mode 100644 index 000000000..7956d4ede Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_name_only/solution_metadf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_name_only/solution_modeldatadf.parquet b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_name_only/solution_modeldatadf.parquet new file mode 100644 index 000000000..5b68f8b54 Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_name_only/solution_modeldatadf.parquet differ diff --git a/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_name_only/solution_outliersdf.parquet b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_name_only/solution_outliersdf.parquet new file mode 100644 index 000000000..8fa95f81b Binary files /dev/null and b/tests/pkled_solutions/test_qc_solutions/testwhiterecords/test_whiteset_name_only/solution_outliersdf.parquet differ diff --git a/tests/solutionclass.py b/tests/solutionclass.py index d3b704ca3..a6f050c17 100644 --- a/tests/solutionclass.py +++ b/tests/solutionclass.py @@ -1,184 +1,338 @@ +"""Solution management for test fixtures. + +This module provides utilities to store and retrieve test solutions as parquet files, +enabling reproducible testing without relying on pickled objects. +""" + from pathlib import Path -import pickle +from typing import Union +import geopandas as gpd +import json import pandas as pd -import pandas.testing -libfolder = Path(str(Path(__file__).resolve())).parent.parent -# testdatadir -datadir = libfolder.joinpath("tests").joinpath("data") +# Project paths +libfolder = Path(__file__).resolve().parent.parent +datadir = libfolder / "tests" / "data" + + +# ============================================================================= +# Exceptions +# ============================================================================= + + +class SolutionNotExisting(Exception): + """Raised when the solution file does not exist.""" + + +class UnforeseenDifference(Exception): + """Raised when encountering an unforeseen difference case.""" + + +# ============================================================================= +# Serialized Data Classes +# ============================================================================= + + +class SerializedDataset: + """Container for deserialized Dataset data for comparison.""" -class SolutionFixer: - def __init__(self, solutiondir): - self.solutiondir = Path(solutiondir) + def __init__(self, data: dict): + self.df = data.get("df") + self.metadf = _format_metadata(data.get("metadf")) + self.gapsdf = data.get("gapsdf") + self.modeldatadf = data.get("modeldatadf") + self.outliersdf = data.get("outliersdf") + + +class SerializedStation: + """Container for deserialized Station data for comparison.""" + + def __init__(self, data: dict): + self.df = data.get("df") + self.metadf = _format_metadata(data.get("metadf")) + self.gapsdf = data.get("gapsdf") + self.modeldatadf = data.get("modeldatadf") + self.outliersdf = data.get("outliersdf") + + +class SerializedAnalysis: + """Container for deserialized Analysis data for comparison.""" + + def __init__(self, data: dict): + self.fulldf = data.get("fulldf") + self.metadf = _format_metadata(data.get("metadf")) + + +# ============================================================================= +# Solution Fixer Class +# ============================================================================= + + +class SolutionFixer2: + """Store and retrieve test solutions as parquet files.""" + + def __init__(self, solutiondir: Path): + self.solutiondir = solutiondir + + def get_solution_dir(self, methodname: str, testfile: str, classname: str) -> Path: + """Get the directory path for a specific test solution.""" + testfile_stem = str(testfile).rstrip(".py") + solutiondir = ( + self.solutiondir + / f"{testfile_stem}_solutions" + / classname.lower() + / methodname + ) + solutiondir.mkdir(parents=True, exist_ok=True) + return solutiondir - def get_solution(self, testfile, classname, methodname): - basefoldername = f"{str(testfile).strip('.py')}_solutions" - subfoldername = f"{classname.lower()}" - trgfilename = f"{str(methodname)}.pkl" + def create_solution( + self, solution, methodname: str, testfile: str, classname: str + ) -> None: + """Save a solution object to disk.""" + base_path = self.get_solution_dir(methodname, testfile, classname) - solutionfile = ( - self.solutiondir.joinpath(basefoldername) - .joinpath(subfoldername) - .joinpath(trgfilename) + print( + f"!! OVERWRITING SOLUTION FOR {testfile} --> {classname}:{methodname} !!!" ) - if not solutionfile.exists(): - raise SolutionNotExisting( - f"The solution of {testfile} -->{classname}:{methodname} does not exist (at {solutionfile})!" + + classname_map = { + "Dataset": _store_dataset, + "Station": _store_station, + "Analysis": _store_analysis, + } + + obj_classname = solution.__class__.__name__ + if obj_classname in classname_map: + classname_map[obj_classname](solution, base_path) + elif isinstance(solution, pd.DataFrame): + _store_dataframe(solution, base_path) + elif isinstance(solution, dict): + _store_dict(solution, base_path) + elif isinstance(solution, str): + _store_string(solution, base_path) + else: + raise NotImplementedError( + f"create_solution does not support {obj_classname} objects." + ) + + def get_solution(self, methodname: str, testfile: str, classname: str) -> Union[ + SerializedDataset, + SerializedStation, + SerializedAnalysis, + pd.DataFrame, + dict, + str, + ]: + """Load a solution from disk.""" + base_path = self.get_solution_dir(methodname, testfile, classname) + + if not base_path.exists(): + raise SolutionNotExisting(f"The solution at {base_path} does not exist!") + + with open(base_path / "datatype.json", "r") as f: + metadata = json.load(f) + + solution_class = metadata.get("class") + + reader_map = { + "Dataset": _read_dataset, + "Station": _read_station, + "Analysis": _read_analysis, + "Dict": _read_dict, + "DataFrame": _read_dataframe, + "String": _read_string, + } + + if solution_class not in reader_map: + raise NotImplementedError( + f"get_solution does not support {solution_class} objects." ) - with open(solutionfile, "rb") as file: - solution_data = pickle.load(file) - return solution_data + return reader_map[solution_class](base_path) - def create_solution(self, solutiondata, testfile, classname, methodname): - # construct path - basefoldername = f"{str(testfile).strip('.py')}_solutions" - subfoldername = f"{classname.lower()}" - trgfilename = f"{str(methodname)}.pkl" - solutionfile = ( - self.solutiondir.joinpath(basefoldername) - .joinpath(subfoldername) - .joinpath(trgfilename) - ) - # clear previous solutions - if solutionfile.exists(): - print( - f"!! OVERWRITING SOLUTION FOR {testfile} --> {classname}:{methodname} !!! " +# ============================================================================= +# Storage Functions +# ============================================================================= + + +def _write_datatype(dir_path: Path, class_name: str) -> None: + """Write the datatype metadata file.""" + dir_path.mkdir(parents=True, exist_ok=True) + with open(dir_path / "datatype.json", "w") as f: + json.dump({"class": class_name}, f) + + +def _store_string(data_str: str, dir_path: Path) -> None: + """Store a string solution.""" + _write_datatype(dir_path, "String") + with open(dir_path / "solution_string.txt", "w") as f: + f.write(data_str) + + +def _store_dataframe(df: pd.DataFrame, dir_path: Path) -> None: + """Store a DataFrame solution.""" + _write_datatype(dir_path, "DataFrame") + df.to_parquet(dir_path / "solution_df.parquet") + +def _store_series(series: pd.Series, dir_path: Path) -> None: + """Store a Series solution.""" + _write_datatype(dir_path, "Series") + series.to_frame().to_parquet(dir_path / "solution_series.parquet") + + +def _store_dataset(dataset, dir_path: Path) -> None: + """Store a Dataset solution.""" + _write_datatype(dir_path, "Dataset") + dataset.df.to_parquet(dir_path / "solution_df.parquet") + dataset.metadf.to_parquet(dir_path / "solution_metadf.parquet") + dataset.gapsdf.to_parquet(dir_path / "solution_gapsdf.parquet") + dataset.modeldatadf.to_parquet(dir_path / "solution_modeldatadf.parquet") + dataset.outliersdf.to_parquet(dir_path / "solution_outliersdf.parquet") + + +def _store_station(station, dir_path: Path) -> None: + """Store a Station solution.""" + _write_datatype(dir_path, "Station") + station.df.to_parquet(dir_path / "solution_df.parquet") + station.metadf.to_parquet(dir_path / "solution_metadf.parquet") + station.gapsdf.to_parquet(dir_path / "solution_gapsdf.parquet") + station.modeldatadf.to_parquet(dir_path / "solution_modeldatadf.parquet") + station.outliersdf.to_parquet(dir_path / "solution_outliersdf.parquet") + + +def _store_analysis(analysis, dir_path: Path) -> None: + """Store an Analysis solution.""" + _write_datatype(dir_path, "Analysis") + analysis.df.to_parquet(dir_path / "solution_df.parquet") + analysis.fulldf.to_parquet(dir_path / "solution_fulldf.parquet") + analysis.metadf.to_parquet(dir_path / "solution_metadf.parquet") + + +def _store_dict(data_dict: dict, dir_path: Path) -> None: + """Store a dict solution containing Dataset, Station, or DataFrame values.""" + _write_datatype(dir_path, "Dict") + + for key, val in data_dict.items(): + key_dir = dir_path / str(key) + obj_classname = val.__class__.__name__ + + if obj_classname == "Dataset": + _store_dataset(val, key_dir) + elif obj_classname == "Station": + _store_station(val, key_dir) + elif isinstance(val, pd.DataFrame): + _store_dataframe(val, key_dir) + elif isinstance(val, pd.Series): + _store_series(val, key_dir) + else: + raise NotImplementedError( + f"store_dict does not support {obj_classname} objects." ) - # delete file - solutionfile.unlink() - # Create directory if it does not exist - solutionfile.parent.mkdir(parents=True, exist_ok=True) - # Pickle data object - with open(solutionfile, "wb") as file: - pickle.dump(solutiondata, file) +# ============================================================================= +# Reading Functions +# ============================================================================= -def assert_equality(to_check, solution): - """Returns some debug help when the to_check is not equalt to the solution +def _read_parquet_files(dir_path: Path) -> dict: + """Read all solution parquet files from a directory.""" + result = {} + for f in dir_path.glob("solution_*.parquet"): + attr_name = f.stem.replace("solution_", "") + result[attr_name] = pd.read_parquet(f) + return result - This output is used for developping to point in more details why a test - is failing. - The object retured can have differnt types, and is desined for the developper - to help in the debugging process. +def _read_string(dir_path: Path) -> str: + """Read a string solution.""" + with open(dir_path / "solution_string.txt", "r") as f: + return f.read() - """ - # type equal test - if type(to_check) != type(solution): - retstr = f"DIFF: to_check type is {type(to_check)}, while solution is of type {type(solution)} " - raise AssertionError(retstr) +def _read_dataframe(dir_path: Path) -> pd.DataFrame: + """Read a DataFrame solution.""" + return pd.read_parquet(dir_path / "solution_df.parquet") - # float test - elif isinstance(to_check, float): - if to_check != solution: - retstr = f"DIFF: to_check is not equal to solution {to_check} !== {solution} (float comparison)" - raise AssertionError(retstr) +def _read_series(dir_path: Path) -> pd.Series: + """Read a Series solution.""" + return pd.read_parquet(dir_path / "solution_series.parquet").iloc[:,0] - # int test - elif isinstance(to_check, int): - if to_check != solution: - retstr = f"DIFF: to_check is not equal to solution {to_check} !== {solution} (int comparison)" - raise AssertionError(retstr) - # sting test - elif isinstance(to_check, str): - if to_check != solution: - retstr = f"DIFF: to_check is not equal to solution (string comparison)" - retstr += f"to check: \n =================== \n{to_check}" - retstr += f"solution: \n =================== \n{solution}" - raise AssertionError(retstr) +def _read_dataset(dir_path: Path) -> SerializedDataset: + """Read a Dataset solution.""" + return SerializedDataset(_read_parquet_files(dir_path)) - # tuple comparison - elif isinstance(to_check, tuple): - if to_check != solution: - retstr = f"DIFF: to_check is not equal to solution {to_check} !== {solution} (tuple comparison)" - raise AssertionError(retstr) - # list test - elif isinstance(to_check, list): - if to_check != solution: - # length - if len(to_check) != len(solution): - retstr = f"DIFF: to_check length is {len(to_check)} !== {len(solution)} (list comparison)" - raise AssertionError(retstr) - # set check - if set(to_check) == set(solution): - retstr = f"DIFF: to_check list {len(to_check)}!== {len(solution)} (list comparison), BUT if converted to sets they are identical !! " - raise AssertionError(retstr) - else: - retstr = f"DIFF: to_check list {len(to_check)}!== {len(solution)} (list comparison), no hints found, debug further." - raise AssertionError(retstr) - # set test - elif isinstance(to_check, set): - if to_check != solution: - # length - if len(to_check) != len(solution): - retstr = f"DIFF: to_check length is {len(to_check)} !== {len(solution)} (set comparison)" - raise AssertionError(retstr) - else: - retstr = f"DIFF: to_check list {len(to_check)}!== {len(solution)} (set comparison), no hints found, debug further." - raise AssertionError(retstr) - - # pandas seriers - elif isinstance(to_check, pd.Series): - pd.testing.assert_series_equal( - left=to_check, - right=solution, - check_exact=False, - rtol=0.001, - ) +def _read_station(dir_path: Path) -> SerializedStation: + """Read a Station solution.""" + return SerializedStation(_read_parquet_files(dir_path)) - # pandas dataframes - elif isinstance(to_check, pd.DataFrame): - pd.testing.assert_frame_equal( - left=to_check, - right=solution, - check_exact=False, - rtol=0.001, + +def _read_analysis(dir_path: Path) -> SerializedAnalysis: + """Read an Analysis solution.""" + return SerializedAnalysis(_read_parquet_files(dir_path)) + + +def _read_dict(dir_path: Path) -> dict: + """Read a dict solution.""" + result = {} + for subdir in dir_path.iterdir(): + if not subdir.is_dir(): + continue + + with open(subdir / "datatype.json", "r") as f: + metadata = json.load(f) + + solution_class = metadata.get("class") + + if solution_class == "Dataset": + result[subdir.stem] = _read_dataset(subdir) + elif solution_class == "Station": + result[subdir.stem] = _read_station(subdir) + elif solution_class == "DataFrame": + result[subdir.stem] = _read_dataframe(subdir) + elif solution_class == "Series": + result[subdir.stem] = _read_series(subdir) + else: + raise NotImplementedError( + f"read_dict does not support {solution_class} objects." + ) + + return result + + +# ============================================================================= +# Utility Functions +# ============================================================================= + + +def _format_metadata(metadf: pd.DataFrame) -> pd.DataFrame: + """Convert metadata DataFrame to GeoDataFrame if geometry column exists.""" + if metadf is not None and "geometry" in metadf.columns: + metadf = gpd.GeoDataFrame( + metadf, geometry=gpd.points_from_xy(metadf["lon"], metadf["lat"]) ) + return metadf + + +# ============================================================================= +# Comparison Functions +# ============================================================================= - # metobs_toolkit.Dataset test - elif to_check.__class__.__name__ == "Dataset": - compare_df_attr(to_check, solution, "metadf") - compare_df_attr(to_check, solution, "gapsdf") - compare_df_attr(to_check, solution, "modeldatadf") - compare_df_attr(to_check, solution, "outliersdf", exclude_columns="details") - compare_df_attr(to_check, solution, "df") - assert ( - to_check.obstypes == solution.obstypes - ), "There is a mismatch in obstypes with the solution!" - - # metobs_toolkit.Station test - elif to_check.__class__.__name__ == "Station": - compare_df_attr(to_check, solution, "metadf") - compare_df_attr(to_check, solution, "gapsdf") - compare_df_attr(to_check, solution, "modeldatadf") - compare_df_attr(to_check, solution, "outliersdf", exclude_columns="details") - compare_df_attr(to_check, solution, "df") - # metobs_toolkit.Station test - elif to_check.__class__.__name__ == "Analysis": - compare_df_attr(to_check, solution, "metadf") - compare_df_attr(to_check, solution, "df") - - # Else - else: - retstr = f"DIFF: to_check list {to_check}!== {solution} (NotImplemented type comparison), no hints found, debug further." - raise AssertionError(retstr) - - -def compare_df_attr(testobj, solutionobj, attr, exclude_columns=None): + +def _compare_df_attr( + testobj, solutionobj, attr: str, exclude_columns: Union[str, list, None] = None +) -> None: + """Compare a DataFrame attribute between test and solution objects.""" try: left_df = getattr(testobj, attr) right_df = getattr(solutionobj, attr) - # Exclude specified columns if provided if exclude_columns: if isinstance(exclude_columns, str): exclude_columns = [exclude_columns] @@ -189,18 +343,123 @@ def compare_df_attr(testobj, solutionobj, attr, exclude_columns=None): columns=[c for c in exclude_columns if c in right_df.columns] ) - pd.testing.assert_frame_equal( - left=left_df, - right=right_df, - check_exact=False, - ) + pd.testing.assert_frame_equal(left=left_df, right=right_df, check_exact=False) except AssertionError as e: - raise AssertionError(f"DIFF in {attr}-attribute:\n " + str(e)) + raise AssertionError(f"DIFF in {attr}-attribute:\n {e}") -class UnforseenDifference(Exception): - """Raise when encountering an unforseen difference case""" +def _serialized_comparison(to_check, solution, **kwargs) -> None: + """Compare all attributes from a serialized solution.""" + for key in solution.__dict__.keys(): + _compare_df_attr(testobj=to_check, solutionobj=solution, attr=key, **kwargs) -class SolutionNotExisting(Exception): - """Raise when the solutionfile does not exist""" +def assert_equality(to_check, solution, **kwargs) -> None: + """Assert equality between a test result and a solution. + + Provides detailed debug information when differences are found. + Supports Dataset, Station, Analysis, DataFrame, Series, and primitive types. + """ + to_check_class = to_check.__class__.__name__ + solution_class = solution.__class__.__name__ + + # Dataset comparisons + if to_check_class == "Dataset" and solution_class == "SerializedDataset": + _serialized_comparison(to_check, solution, **kwargs) + return + + if to_check_class == "Dataset" and solution_class == "Dataset": + for attr in ["metadf", "gapsdf", "modeldatadf", "outliersdf", "df"]: + _compare_df_attr(to_check, solution, attr, **kwargs) + assert to_check.obstypes == solution.obstypes, "Mismatch in obstypes!" + return + + # Station comparisons + if to_check_class == "Station" and solution_class == "SerializedStation": + _serialized_comparison(to_check, solution, **kwargs) + return + + if to_check_class == "Station" and solution_class == "Station": + for attr in ["metadf", "gapsdf", "modeldatadf", "outliersdf", "df"]: + _compare_df_attr(to_check, solution, attr, **kwargs) + return + + # Analysis comparisons + if to_check_class == "Analysis" and solution_class == "SerializedAnalysis": + _serialized_comparison(to_check, solution, **kwargs) + return + + if to_check_class == "Analysis" and solution_class == "Analysis": + for attr in ["df", "fulldf", "metadf"]: + _compare_df_attr(to_check, solution, attr, **kwargs) + return + + # Type mismatch + if type(to_check) != type(solution): + raise AssertionError( + f"DIFF: to_check type is {type(to_check)}, " + f"while solution is of type {type(solution)}" + ) + + # Primitive type comparisons + if isinstance(to_check, (float, int)): + if to_check != solution: + raise AssertionError( + f"DIFF: {to_check} !== {solution} ({type(to_check).__name__} comparison)" + ) + return + + if isinstance(to_check, str): + if to_check != solution: + raise AssertionError( + f"DIFF: string mismatch\n" + f"to_check:\n===================\n{to_check}\n" + f"solution:\n===================\n{solution}" + ) + return + + if isinstance(to_check, tuple): + if to_check != solution: + raise AssertionError(f"DIFF: {to_check} !== {solution} (tuple comparison)") + return + + # Collection comparisons + if isinstance(to_check, list): + if to_check != solution: + if len(to_check) != len(solution): + raise AssertionError( + f"DIFF: list length {len(to_check)} !== {len(solution)}" + ) + if set(to_check) == set(solution): + raise AssertionError( + f"DIFF: lists differ but sets are identical (order mismatch?)" + ) + raise AssertionError("DIFF: lists differ, debug further.") + return + + if isinstance(to_check, set): + if to_check != solution: + if len(to_check) != len(solution): + raise AssertionError( + f"DIFF: set length {len(to_check)} !== {len(solution)}" + ) + raise AssertionError("DIFF: sets differ, debug further.") + return + + # Pandas comparisons + if isinstance(to_check, pd.Series): + pd.testing.assert_series_equal( + left=to_check, right=solution, check_exact=False, rtol=0.001 + ) + return + + if isinstance(to_check, pd.DataFrame): + pd.testing.assert_frame_equal( + left=to_check, right=solution, check_exact=False, rtol=0.001 + ) + return + + # Fallback + raise AssertionError( + f"DIFF: {to_check} !== {solution} (unsupported type comparison)" + ) diff --git a/tests/test_add.py b/tests/test_add.py index 81bac740e..23a1e9eba 100644 --- a/tests/test_add.py +++ b/tests/test_add.py @@ -12,7 +12,7 @@ import metobs_toolkit solutionsdir = libfolder.joinpath("tests").joinpath("pkled_solutions") -from solutionclass import SolutionFixer, assert_equality, datadir +from solutionclass import SolutionFixer2, assert_equality, datadir file_with_era5_data = ( libfolder @@ -22,32 +22,42 @@ ) -def get_demo_dataset(): - dataset = metobs_toolkit.Dataset() - dataset.import_data_from_file( - template_file=metobs_toolkit.demo_template, - input_metadata_file=metobs_toolkit.demo_metadatafile, - input_data_file=metobs_toolkit.demo_datafile, - ) - dataset.resample(target_freq="15min") - return dataset +class TestAddMethods: + solkwargs = {"testfile": Path(__file__).name, "classname": "testaddmethods"} + solutionfixer = SolutionFixer2(solutiondir=solutionsdir) + @pytest.fixture(scope="class") + def import_demodata(self): + dataset = metobs_toolkit.Dataset() + dataset.import_data_from_file( + template_file=metobs_toolkit.demo_template, + input_metadata_file=metobs_toolkit.demo_metadatafile, + input_data_file=metobs_toolkit.demo_datafile, + ) + dataset.resample(target_freq="15min") + return dataset -def get_demo_dataset_with_modeldata(): - dataset = get_demo_dataset() + @pytest.fixture(scope="class") + def import_demodata_with_era(self): - era5_manager = metobs_toolkit.default_GEE_datasets["ERA5-land"] - dataset.import_gee_data_from_file( - filepath=file_with_era5_data, gee_dynamic_manager=era5_manager - ) + dataset = metobs_toolkit.Dataset() + dataset.import_data_from_file( + template_file=metobs_toolkit.demo_template, + input_metadata_file=metobs_toolkit.demo_metadatafile, + input_data_file=metobs_toolkit.demo_datafile, + ) + dataset.resample(target_freq="15min") - return dataset + era5_manager = metobs_toolkit.default_GEE_datasets["ERA5-land"] + dataset.import_gee_data_from_file( + filepath=file_with_era5_data, gee_dynamic_manager=era5_manager + ) + return dataset -class TestAddMethods: - def test_add_sensordata(self): + def test_add_sensordata(self, import_demodata): # Get two SensorData objects with non-overlapping timestamps - ds = get_demo_dataset() + ds = copy.deepcopy(import_demodata) sta = ds.get_station("vlinder01") sd1 = copy.deepcopy(sta.get_sensor("temp")) @@ -75,8 +85,8 @@ def test_add_sensordata(self): n_records = int((sd_other.end_datetime - sd1.start_datetime) / sd1.freq) assert sd_sum.df.shape[0] == n_records + 1 - def test_add_sensordata_different_obstypes(self): - ds = get_demo_dataset() + def test_add_sensordata_different_obstypes(self, import_demodata): + ds = copy.deepcopy(import_demodata) sta = ds.get_station("vlinder01") sd1 = copy.deepcopy(sta.get_sensor("temp")) sd_other = copy.deepcopy(sta.get_sensor("temp")) @@ -117,8 +127,8 @@ def test_add_sensordata_different_obstypes(self): sd_sum.obstype.description != sd1.obstype.description ) # combination of both - def test_add_sensordata_different_timezones(self): - ds = get_demo_dataset() + def test_add_sensordata_different_timezones(self, import_demodata): + ds = copy.deepcopy(import_demodata) sta = ds.get_station("vlinder01") sd1 = copy.deepcopy(sta.get_sensor("temp")) sd_other = copy.deepcopy(sta.get_sensor("temp")) @@ -133,8 +143,8 @@ def test_add_sensordata_different_timezones(self): assert sd_sum.end_datetime == max_timestamp - def test_add_sensordata_with_qc(self): - ds = get_demo_dataset() + def test_add_sensordata_with_qc(self, import_demodata): + ds = copy.deepcopy(import_demodata) sta = ds.get_station("vlinder01") sd_other = copy.deepcopy(sta.get_sensor("temp")) sd_other.series.index = sd_other.series.index + pd.Timedelta("30D") @@ -149,8 +159,8 @@ def test_add_sensordata_with_qc(self): assert sd1.outliersdf.shape[0] != 0 assert sd_sum.outliersdf.shape[0] == 0 # outliers must be removed - def test_add_site_with_different_attributes(self): - ds = get_demo_dataset() + def test_add_site_with_different_attributes(self, import_demodata): + ds = copy.deepcopy(import_demodata) sta = ds.get_station("vlinder01") sta1 = copy.deepcopy(sta) sta1.get_landcover_fractions(buffers=[50]) @@ -175,8 +185,8 @@ def test_add_site_with_different_attributes(self): with pytest.raises(MetObsAdditionError): _ = site1 + site2 - def test_add_station_with_other_sensordata(self): - ds = get_demo_dataset() + def test_add_station_with_other_sensordata(self, import_demodata): + ds = copy.deepcopy(import_demodata) sta_orig = copy.deepcopy(ds.get_station("vlinder01")) sta1 = copy.deepcopy(ds.get_station("vlinder01")) sta2 = copy.deepcopy(ds.get_station("vlinder01")) @@ -207,8 +217,8 @@ def test_add_station_with_other_sensordata(self): with pytest.raises(MetObsAdditionError): _ = sta1 + sta2 - def test_add_dataset(self): - ds_orig = get_demo_dataset() + def test_add_dataset(self, import_demodata): + ds_orig = copy.deepcopy(import_demodata) # 1. Combine identical ds1 = copy.deepcopy(ds_orig) ds2 = copy.deepcopy(ds_orig) @@ -234,8 +244,8 @@ def test_add_dataset(self): assert_equality(combds.df, ds_orig.df) assert "altitude" in combds.metadf - def test_modeldata_addition(self): - ds_orig = get_demo_dataset_with_modeldata() + def test_modeldata_addition(self, import_demodata_with_era): + ds_orig = copy.deepcopy(import_demodata_with_era) ds1 = copy.deepcopy(ds_orig) # crop modeldata of a singel station @@ -268,8 +278,8 @@ def test_modeldata_addition(self): comb = ds1 + copy.deepcopy(ds_orig) assert "dummy" in comb.modeldatadf.index.get_level_values("obstype").unique() - def test_avoid_pointers(self): - ds_orig = get_demo_dataset_with_modeldata() + def test_avoid_pointers(self, import_demodata_with_era): + ds_orig = copy.deepcopy(import_demodata_with_era) # 1. Combine identical ds1 = copy.deepcopy(ds_orig) ds2 = copy.deepcopy(ds_orig) @@ -296,13 +306,17 @@ def test_avoid_pointers(self): if __name__ == "__main__": - t = TestAddMethods() - # t.test_add_sensordata() - # t.test_add_sensordata_different_obstypes() - # t.test_add_sensordata_different_timezones() - # t.test_add_sensordata_with_qc() - # t.test_add_site_with_different_attributes() - # t.test_add_station_with_other_sensordata() - # t.test_add_dataset() - # t.test_modeldata_addition() - # t.test_avoid_pointers() + tester = TestAddMethods() + + demodata = tester.import_demodata.__wrapped__(tester) + demodata_with_era = tester.import_demodata_with_era.__wrapped__(tester) + + tester.test_add_sensordata(demodata) + tester.test_add_sensordata_different_obstypes(demodata) + tester.test_add_sensordata_different_timezones(demodata) + tester.test_add_sensordata_with_qc(demodata) + tester.test_add_site_with_different_attributes(demodata) + tester.test_add_station_with_other_sensordata(demodata) + tester.test_add_dataset(demodata) + tester.test_modeldata_addition(demodata_with_era) + tester.test_avoid_pointers(demodata_with_era) diff --git a/tests/test_analysis.py b/tests/test_analysis.py index 66750f483..7d4dd13b2 100644 --- a/tests/test_analysis.py +++ b/tests/test_analysis.py @@ -1,5 +1,6 @@ import pytest import sys +import copy from pathlib import Path import pandas as pd @@ -11,21 +12,16 @@ # solutionfolder solutionsdir = libfolder.joinpath("tests").joinpath("pkled_solutions") -from solutionclass import SolutionFixer, assert_equality, datadir +from solutionclass import SolutionFixer2, assert_equality, datadir class TestDemoDataset: # to pass to the solutionfixer solkwargs = {"testfile": Path(__file__).name, "classname": "testdemodata"} - solutionfixer = SolutionFixer(solutiondir=solutionsdir) - - def test_import_data(self, overwrite_solution=False): - # 0. Get info of the current check - _method_name = sys._getframe().f_code.co_name # get the name of this method - - # 1. get_startpoint data - pass + solutionfixer = SolutionFixer2(solutiondir=solutionsdir) + @pytest.fixture(scope="class") + def import_analysis(self): # 2. apply a metobs manipulation dataset = metobs_toolkit.Dataset() dataset.import_data_from_file( @@ -38,10 +34,19 @@ def test_import_data(self, overwrite_solution=False): dataset.resample(target_freq="30min") ana = metobs_toolkit.Analysis(Dataholder=dataset) + return ana + + def test_import_data(self, import_analysis, overwrite_solution=False): + # 0. Get info of the current check + _method_name = sys._getframe().f_code.co_name # get the name of this method + + # 1. get_startpoint data + ana = copy.deepcopy(import_analysis) + # 3. overwrite solution? if overwrite_solution: TestDemoDataset.solutionfixer.create_solution( - solutiondata=ana, methodname=_method_name, **TestDemoDataset.solkwargs + solution=ana, methodname=_method_name, **TestDemoDataset.solkwargs ) # 4. Get solution @@ -50,7 +55,7 @@ def test_import_data(self, overwrite_solution=False): ) # 5. Construct the equlity tests - assert_equality(ana, solutionobj) # dataset comparison + assert_equality(ana, solutionobj) # analysis comparison def test_if_analysis_can_be_created_from_station(self, overwrite_solution=False): # 0. Get info of the current check @@ -74,7 +79,7 @@ def test_if_analysis_can_be_created_from_station(self, overwrite_solution=False) # 3. overwrite solution? if overwrite_solution: TestDemoDataset.solutionfixer.create_solution( - solutiondata=ana.df, # test dataframe + solution=ana, methodname=_method_name, **TestDemoDataset.solkwargs, ) @@ -85,27 +90,35 @@ def test_if_analysis_can_be_created_from_station(self, overwrite_solution=False) ) # 5. Construct the equlity tests - assert_equality(ana.df, solutionobj) # dataframe comparison + assert_equality(ana, solutionobj) - def test_basic_analysis_method_calls(self): + def test_basic_analysis_method_calls( + self, import_analysis, overwrite_solution=False + ): # 1. get_startpoint data - ana = TestDemoDataset.solutionfixer.get_solution( - **TestDemoDataset.solkwargs, methodname="test_import_data" - ) + ana = copy.deepcopy(import_analysis) # calls without value test ana.get_info() - ana.df + df = ana.df + + if overwrite_solution: + TestDemoDataset.solutionfixer.create_solution( + solution=df, + methodname=sys._getframe().f_code.co_name, + **TestDemoDataset.solkwargs, + ) + solutionobj = TestDemoDataset.solutionfixer.get_solution( + methodname=sys._getframe().f_code.co_name, **TestDemoDataset.solkwargs + ) + assert_equality(df, solutionobj) # dataframe comparison - def test_filtering(self, overwrite_solution=False): + def test_filtering(self, import_analysis, overwrite_solution=False): # 0. Get info of the current check _method_name = sys._getframe().f_code.co_name # 1. get_startpoint data - ana = TestDemoDataset.solutionfixer.get_solution( - **TestDemoDataset.solkwargs, methodname="test_import_data" - ) - + ana = copy.deepcopy(import_analysis) # filter data test ana.apply_filter_on_records("(wind_speed <= 2.5) & (hour > 12) & (hour < 20)") ana.apply_filter_on_records('season=="autumn" | season=="winter"') @@ -114,7 +127,7 @@ def test_filtering(self, overwrite_solution=False): # 3. overwrite solution? if overwrite_solution: TestDemoDataset.solutionfixer.create_solution( - solutiondata=ana.fulldf, + solution=ana, methodname=_method_name, **TestDemoDataset.solkwargs, ) @@ -125,16 +138,17 @@ def test_filtering(self, overwrite_solution=False): ) # 5. Construct the equlity tests - assert_equality(ana.fulldf, solutionobj) # dataframe comparison + assert_equality(ana, solutionobj) # dataframe comparison - def test_subsetting_time(self, overwrite_solution=False): + with pytest.raises(AssertionError): + assert_equality(ana, copy.deepcopy(import_analysis)) + + def test_subsetting_time(self, import_analysis, overwrite_solution=False): # 0. Get info of the current check _method_name = sys._getframe().f_code.co_name # 1. get_startpoint data - ana = TestDemoDataset.solutionfixer.get_solution( - **TestDemoDataset.solkwargs, methodname="test_import_data" - ) + ana = copy.deepcopy(import_analysis) # filter data test startstr = pd.Timestamp("2022-09-04 16:29:36") @@ -144,7 +158,7 @@ def test_subsetting_time(self, overwrite_solution=False): # 3. overwrite solution? if overwrite_solution: TestDemoDataset.solutionfixer.create_solution( - solutiondata=ana.fulldf, + solution=ana, methodname=_method_name, **TestDemoDataset.solkwargs, ) @@ -155,23 +169,24 @@ def test_subsetting_time(self, overwrite_solution=False): ) # 5. Construct the equlity tests - assert_equality(ana.fulldf, solutionobj) # dataframe comparison + assert_equality(ana, solutionobj) # dataframe comparison - def test_aggregate_df_method(self, overwrite_solution=False): + with pytest.raises(AssertionError): + assert_equality(ana, copy.deepcopy(import_analysis)) + + def test_aggregate_df_method(self, import_analysis, overwrite_solution=False): # 0. Get info of the current check _method_name = sys._getframe().f_code.co_name # 1. get_startpoint data - ana = TestDemoDataset.solutionfixer.get_solution( - **TestDemoDataset.solkwargs, methodname="test_import_data" - ) + ana = copy.deepcopy(import_analysis) aggdf = ana.aggregate_df(obstype="humidity", agg=["LCZ", "season", "hour"]) # 3. overwrite solution? if overwrite_solution: TestDemoDataset.solutionfixer.create_solution( - solutiondata=aggdf, methodname=_method_name, **TestDemoDataset.solkwargs + solution=aggdf, methodname=_method_name, **TestDemoDataset.solkwargs ) # 4. Get solution @@ -181,31 +196,29 @@ def test_aggregate_df_method(self, overwrite_solution=False): # 5. Construct the equlity tests assert_equality(aggdf, solutionobj) # dataframe comparison + assert_equality(ana, copy.deepcopy(import_analysis)) @pytest.mark.mpl_image_compare - def test_diurnal_cycle_plot(self): + def test_diurnal_cycle_plot(self, import_analysis): # 1. get_startpoint data - ana = TestDemoDataset.solutionfixer.get_solution( - **TestDemoDataset.solkwargs, methodname="test_import_data" - ) - + ana = copy.deepcopy(import_analysis) # 2. apply a metobs manipulation ax = ana.plot_diurnal_cycle(obstype="temp", colorby="LCZ") fig = ax.get_figure() + fig.set_size_inches(15, 5) return fig @pytest.mark.mpl_image_compare - def test_diurnal_cycle_plot_with_reference(self): + def test_diurnal_cycle_plot_with_reference(self, import_analysis): # 1. get_startpoint data - ana = TestDemoDataset.solutionfixer.get_solution( - **TestDemoDataset.solkwargs, methodname="test_import_data" - ) + ana = copy.deepcopy(import_analysis) # 2. apply a metobs manipulation ax = ana.plot_diurnal_cycle_with_reference_station( ref_station="vlinder02", obstype="temp", colorby="LCZ" ) fig = ax.get_figure() + fig.set_size_inches(15, 5) return fig @@ -218,10 +231,21 @@ def test_diurnal_cycle_plot_with_reference(self): "To checkout the differences, run: \n pytest test_plotting.py --mpl --mpl-generate-summary=html " ) + OVERWRITE_SOLUTION = False test = TestDemoDataset() - # test.test_import_data(overwrite_solution=False) - # test.test_if_analysis_can_be_created_from_station(overwrite_solution=False) - # test.test_aggregate_df_method(overwrite_solution=False) - # test.test_basic_analysis_method_calls() - # test.test_filtering(overwrite_solution=False) - # test.test_subsetting_time(overwrite_solution=False) + + analysis = test.import_analysis.__wrapped__(test) + + test.test_import_data(analysis, overwrite_solution=OVERWRITE_SOLUTION) + test.test_if_analysis_can_be_created_from_station( + overwrite_solution=OVERWRITE_SOLUTION + ) + test.test_aggregate_df_method(analysis, overwrite_solution=OVERWRITE_SOLUTION) + test.test_basic_analysis_method_calls( + analysis, overwrite_solution=OVERWRITE_SOLUTION + ) + test.test_filtering(analysis, overwrite_solution=OVERWRITE_SOLUTION) + test.test_subsetting_time(analysis, overwrite_solution=OVERWRITE_SOLUTION) + + test.test_diurnal_cycle_plot(analysis) + test.test_diurnal_cycle_plot_with_reference(analysis) diff --git a/tests/test_gee.py b/tests/test_gee.py index 29a0b989f..ea419fa5f 100644 --- a/tests/test_gee.py +++ b/tests/test_gee.py @@ -4,6 +4,7 @@ import sys from pathlib import Path import tempfile +import copy # import metobs_toolkit import pandas as pd @@ -18,27 +19,31 @@ # solutionfolder solutionsdir = libfolder.joinpath("tests").joinpath("pkled_solutions") -from solutionclass import SolutionFixer, assert_equality, datadir +from solutionclass import SolutionFixer2, assert_equality, datadir class TestDemoDataset: # to pass to the solutionfixer solkwargs = {"testfile": Path(__file__).name, "classname": "testdemodataset"} - solutionfixer = SolutionFixer(solutiondir=solutionsdir) + solutionfixer = SolutionFixer2(solutiondir=solutionsdir) - def test_import_demo_metadata(self, overwrite_solution=False): - # 0. Get info of the current check - _method_name = sys._getframe().f_code.co_name # get the name of this method - - # 1. get_startpoint data - pass - # 2. apply a metobs manipulation + @pytest.fixture(autouse=True) + def import_metaonly_dataset(self): dataset = metobs_toolkit.Dataset() dataset.import_data_from_file( template_file=metobs_toolkit.demo_template, input_metadata_file=metobs_toolkit.demo_metadatafile, ) - data_to_test = dataset + return dataset + + @pytest.mark.dependency() + def test_import_demo_metadata( + self, import_metaonly_dataset, overwrite_solution=False + ): + # 0. Get info of the current check + _method_name = sys._getframe().f_code.co_name # get the name of this method + # 2. apply a metobs manipulation + dataset = copy.deepcopy(import_metaonly_dataset) # test get info on metadata-only dataset dataset.get_info(printout=False) @@ -46,7 +51,7 @@ def test_import_demo_metadata(self, overwrite_solution=False): # 3. overwrite solution? if overwrite_solution: TestDemoDataset.solutionfixer.create_solution( - solutiondata=data_to_test, + solution=dataset, methodname=_method_name, **TestDemoDataset.solkwargs, ) @@ -56,27 +61,27 @@ def test_import_demo_metadata(self, overwrite_solution=False): methodname=_method_name, **TestDemoDataset.solkwargs ) - # DEBUG - test = dataset.modeldatadf + # sanity test + _ = dataset.get_info(printout=False) + # 5. Construct the equlity tests - assert_equality(data_to_test, solutionobj) + assert_equality(dataset, solutionobj) def test_gee_connect(self): metobs_toolkit.connect_to_gee() - def test_LCZ_extraction(self, overwrite_solution=False): + @pytest.mark.dependency(depends=["TestDemoDataset::test_import_demo_metadata"]) + def test_LCZ_extraction(self, import_metaonly_dataset, overwrite_solution=False): # 0. Get info of the current check _method_name = sys._getframe().f_code.co_name # get the name of this method # 1. get_startpoint data - dataset = TestDemoDataset.solutionfixer.get_solution( - **TestDemoDataset.solkwargs, methodname="test_import_demo_metadata" - ) + dataset = copy.deepcopy(import_metaonly_dataset) LCZ_data = dataset.get_LCZ() # 3. overwrite solution? if overwrite_solution: TestDemoDataset.solutionfixer.create_solution( - solutiondata=dataset, + solution=dataset, methodname=_method_name, **TestDemoDataset.solkwargs, ) @@ -89,16 +94,15 @@ def test_LCZ_extraction(self, overwrite_solution=False): # 5. Construct the equlity tests assert_equality(dataset, solutionobj) # dataset comparison - assert_equality(LCZ_data["LCZ"], solutionobj.metadf["LCZ"]) + assert_equality(LCZ_data["LCZ"], dataset.metadf["LCZ"]) # calling printoutlc _ = dataset.get_station("vlinder18").site.get_info(printout=False) assert isinstance(dataset.get_station("vlinder18").site.LCZ, str) - def test_lcz_seamask_fix(self): + @pytest.mark.dependency(depends=["TestDemoDataset::test_import_demo_metadata"]) + def test_lcz_seamask_fix(self, import_metaonly_dataset): # 1. get_startpoint data - dataset = TestDemoDataset.solutionfixer.get_solution( - **TestDemoDataset.solkwargs, methodname="test_import_demo_metadata" - ) + dataset = copy.deepcopy(import_metaonly_dataset) seastation = dataset.get_station("vlinder15") seastation.site._lat = 51.361852 @@ -121,19 +125,21 @@ def test_lcz_seamask_fix(self): assert lczdf["LCZ"].eq("Water (LCZ G)").any() assert dataset.stations[5].site.LCZ == "Water (LCZ G)" - def test_altitude_extraction(self, overwrite_solution=False): + @pytest.mark.dependency(depends=["TestDemoDataset::test_import_demo_metadata"]) + def test_altitude_extraction( + self, import_metaonly_dataset, overwrite_solution=False + ): # 0. Get info of the current check _method_name = sys._getframe().f_code.co_name # get the name of this method # 1. get_startpoint data - dataset = TestDemoDataset.solutionfixer.get_solution( - **TestDemoDataset.solkwargs, methodname="test_import_demo_metadata" - ) + dataset = copy.deepcopy(import_metaonly_dataset) + alt_data = dataset.get_altitude() # 3. overwrite solution? if overwrite_solution: TestDemoDataset.solutionfixer.create_solution( - solutiondata=dataset, + solution=dataset, methodname=_method_name, **TestDemoDataset.solkwargs, ) @@ -148,7 +154,7 @@ def test_altitude_extraction(self, overwrite_solution=False): assert_equality( alt_data["altitude"].astype("float64"), - solutionobj.metadf["altitude"].astype("float64"), + dataset.metadf["altitude"].astype("float64"), ) # calling printout _ = dataset.get_station("vlinder18").site.get_info(printout=False) @@ -162,21 +168,19 @@ def test_geemodeldata_getinfo_class(self): # Try calling all possible methods _ = model.get_info(printout=False) - def test_gee_static_plot(self): + @pytest.mark.dependency(depends=["TestDemoDataset::test_import_demo_metadata"]) + def test_gee_static_plot(self, import_metaonly_dataset): # 1. get_startpoint data - dataset = TestDemoDataset.solutionfixer.get_solution( - **TestDemoDataset.solkwargs, methodname="test_import_demo_metadata" - ) + dataset = copy.deepcopy(import_metaonly_dataset) for geemod in metobs_toolkit.default_GEE_datasets.values(): if not isinstance(geemod, metobs_toolkit.GEEStaticDatasetManager): continue mapret = dataset.make_gee_plot(gee_manager=geemod) assert type(mapret) == geemap.Map - def test_gee_dynamic_plot(self): - dataset = TestDemoDataset.solutionfixer.get_solution( - **TestDemoDataset.solkwargs, methodname="test_import_demo_metadata" - ) + @pytest.mark.dependency(depends=["TestDemoDataset::test_import_demo_metadata"]) + def test_gee_dynamic_plot(self, import_metaonly_dataset): + dataset = copy.deepcopy(import_metaonly_dataset) geemod = metobs_toolkit.default_GEE_datasets["ERA5-land"] @@ -206,13 +210,14 @@ def test_gee_dynamic_plot(self): assert type(mapret) == geemap.Map - def test_landcover_frac_extraction(self, overwrite_solution=False): + @pytest.mark.dependency(depends=["TestDemoDataset::test_import_demo_metadata"]) + def test_landcover_frac_extraction( + self, import_metaonly_dataset, overwrite_solution=False + ): # 0. Get info of the current check _method_name = sys._getframe().f_code.co_name # get the name of this method # 1. get_startpoint data - dataset = TestDemoDataset.solutionfixer.get_solution( - **TestDemoDataset.solkwargs, methodname="test_import_demo_metadata" - ) + dataset = copy.deepcopy(import_metaonly_dataset) landcover_data = dataset.get_landcover_fractions( buffers=[10, 100, 500], aggregate=False @@ -221,7 +226,7 @@ def test_landcover_frac_extraction(self, overwrite_solution=False): # 3. overwrite solution? if overwrite_solution: TestDemoDataset.solutionfixer.create_solution( - solutiondata=dataset, + solution=dataset, methodname=_method_name, **TestDemoDataset.solkwargs, ) @@ -245,21 +250,44 @@ def test_landcover_frac_extraction(self, overwrite_solution=False): dataset.get_station("vlinder18").site.buffered_fractions.keys() ) == set([10, 100, 500]) - def test_ERA5_extraction_on_metadata_only(self, overwrite_solution=False): + @pytest.fixture(autouse=True) + def import_metaonly_dataset_with_era5(self, import_metaonly_dataset): + dataset = copy.deepcopy(import_metaonly_dataset) + + era5_model = metobs_toolkit.default_GEE_datasets["ERA5-land"] + + startdt_utc = pd.Timestamp("2021-01-01 16:32:25") + enddt_utc = pd.Timestamp("2021-01-01 23:16:00") + era5_data = dataset.get_gee_timeseries_data( + gee_dynamic_manager=era5_model, + startdt_utc=startdt_utc, + enddt_utc=enddt_utc, + obstypes=["temp", "pressure", "wind"], + get_all_bands=False, + drive_filename=None, + drive_folder="gee_timeseries_data", + force_direct_transfer=False, + force_to_drive=False, + ) + # sanity check + assert era5_data.shape == (224, 4) + return dataset + + @pytest.mark.dependency() + def test_ERA5_extraction_on_metadata_only( + self, import_metaonly_dataset_with_era5, overwrite_solution=False + ): # 0. Get info of the current check _method_name = ( "test_ERA5_extraction_on_metadata_only" # get the name of this method ) # 1. get_startpoint data - dataset = TestDemoDataset.solutionfixer.get_solution( - **TestDemoDataset.solkwargs, methodname="test_import_demo_metadata" - ) - - era5_model = metobs_toolkit.default_GEE_datasets["ERA5-land"] + dataset = copy.deepcopy(import_metaonly_dataset_with_era5) from metobs_toolkit.backend_collection.errorclasses import MetObsMissingArgument with pytest.raises(MetObsMissingArgument): + era5_model = metobs_toolkit.default_GEE_datasets["ERA5-land"] era5_data = dataset.get_gee_timeseries_data( gee_dynamic_manager=era5_model, startdt_utc=None, # raises error in metadata-only case @@ -272,26 +300,10 @@ def test_ERA5_extraction_on_metadata_only(self, overwrite_solution=False): force_to_drive=False, ) - startdt_utc = pd.Timestamp("2021-01-01 16:32:25") - enddt_utc = pd.Timestamp("2021-01-01 23:16:00") - era5_data = dataset.get_gee_timeseries_data( - gee_dynamic_manager=era5_model, - startdt_utc=startdt_utc, - enddt_utc=enddt_utc, - obstypes=["temp", "pressure", "wind"], - get_all_bands=False, - drive_filename=None, - drive_folder="gee_timeseries_data", - force_direct_transfer=False, - force_to_drive=False, - ) - - assert era5_data.shape == (224, 4) - # 3. overwrite solution? if overwrite_solution: TestDemoDataset.solutionfixer.create_solution( - solutiondata=dataset, + solution=dataset, methodname=_method_name, **TestDemoDataset.solkwargs, ) @@ -304,19 +316,19 @@ def test_ERA5_extraction_on_metadata_only(self, overwrite_solution=False): # 5. Construct the equlity tests assert_equality(dataset, solutionobj) # dataset comparison - def test_get_info_on_modeltimeseries(self): + @pytest.mark.dependency( + depends=["TestDemoDataset::test_ERA5_extraction_on_metadata_only"] + ) + def test_get_info_on_modeltimeseries(self, import_metaonly_dataset_with_era5): # 1. get_startpoint data - dataset = TestDemoDataset.solutionfixer.get_solution( - **TestDemoDataset.solkwargs, methodname="test_ERA5_extraction" - ) + dataset = copy.deepcopy(import_metaonly_dataset_with_era5) # test get info on metadata-only dataset for modeltimeseries in dataset.get_station("vlinder18").modeldata: _ = modeltimeseries.get_info(printout=False) - def test_ERA5_extraction(self, overwrite_solution=False): - # 0. Get info of the current check - _method_name = "test_ERA5_extraction" # get the name of this method + @pytest.fixture(autouse=True) + def import_dataset_with_era5(self): dataset = metobs_toolkit.Dataset() dataset.import_data_from_file( template_file=metobs_toolkit.demo_template, @@ -342,11 +354,20 @@ def test_ERA5_extraction(self, overwrite_solution=False): ) assert era5_data.shape == (532, 1) + return dataset + + @pytest.mark.dependency() + def test_ERA5_extraction(self, import_dataset_with_era5, overwrite_solution=False): + # 0. Get info of the current check + _method_name = "test_ERA5_extraction" # get the name of this method + + dataset = copy.deepcopy(import_dataset_with_era5) + # assert era5_data.shape == (532, 1) # 3. overwrite solution? if overwrite_solution: TestDemoDataset.solutionfixer.create_solution( - solutiondata=dataset, + solution=dataset, methodname=_method_name, **TestDemoDataset.solkwargs, ) @@ -382,11 +403,10 @@ def test_station_timeseries_extraction(self): assert dataset.get_station("vlinder02").modeldatadf.shape == (361, 4) - def test_pickling(self): + @pytest.mark.dependency(depends=["TestDemoDataset::test_ERA5_extraction"]) + def test_pickling(self, import_dataset_with_era5): # 1. get_startpoint data - dataset = TestDemoDataset.solutionfixer.get_solution( - **TestDemoDataset.solkwargs, methodname="test_ERA5_extraction" - ) + dataset = copy.deepcopy(import_dataset_with_era5) with tempfile.TemporaryDirectory() as tmpdir: tmpdir = Path(tmpdir) trgfile = tmpdir / "deleteme.pkl" @@ -398,11 +418,10 @@ def test_pickling(self): assert_equality(dataset_pkled, dataset) - def test_era5_modeldata_interactions(self): + @pytest.mark.dependency(depends=["TestDemoDataset::test_ERA5_extraction"]) + def test_era5_modeldata_interactions(self, import_dataset_with_era5): # 1. get_startpoint data - dataset = TestDemoDataset.solutionfixer.get_solution( - **TestDemoDataset.solkwargs, methodname="test_ERA5_extraction" - ) + dataset = copy.deepcopy(import_dataset_with_era5) # testing the dataset (with modeldata) _ = dataset.get_station("vlinder02").get_info(printout=False) @@ -419,12 +438,12 @@ def test_era5_modeldata_interactions(self): "temp" ).series.shape == (19,) - def test_ERA5_google_drive_interface(self): + @pytest.mark.dependency(depends=["TestDemoDataset::test_import_demo_metadata"]) + def test_ERA5_google_drive_interface(self, import_metaonly_dataset): # 1. Test writing to drive file # Extract ERA5data and force the storing in drive - dataset = TestDemoDataset.solutionfixer.get_solution( - **TestDemoDataset.solkwargs, methodname="test_import_demo_metadata" - ) + dataset = copy.deepcopy(import_metaonly_dataset) + startdt_utc = pd.Timestamp("2021-01-01 16:32:25") enddt_utc = pd.Timestamp("2021-01-01 23:16:00") era5_model = metobs_toolkit.default_GEE_datasets["ERA5-land"] @@ -459,23 +478,54 @@ def test_ERA5_google_drive_interface(self): # test equality assert_equality(dataset, dataset_direct) - def test_modeldata_timeseries_plot(self): + # @pytest.mark.dependency(depends=["TestDemoDataset::test_ERA5_extraction"]) + @pytest.mark.mpl_image_compare + def test_modeldata_timeseries_plot(self, import_dataset_with_era5): # 1. get_startpoint data WITH records - dataset = TestDemoDataset.solutionfixer.get_solution( - **TestDemoDataset.solkwargs, methodname="test_ERA5_extraction" - ) - + dataset = copy.deepcopy(import_dataset_with_era5) station = dataset.get_station("vlinder05") - station.make_plot(show_modeldata=True) + ax = station.make_plot(show_modeldata=True) + fig = ax.get_figure() + fig.set_size_inches(15, 5) + return fig if __name__ == "__main__": - test = TestDemoDataset() - # test.test_ERA5_extraction_on_metadata_only(overwrite_solution=False) - # test.test_import_demo_metadata(overwrite_solution=False) - # test.test_LCZ_extraction(overwrite_solution=False) - # test.test_altitude_extraction(overwrite_solution=False) - # test.test_landcover_frac_extraction(overwrite_solution=False) - # test.test_ERA5_extraction_on_metadata_only(overwrite_solution=False) - # test.test_ERA5_extraction(overwrite_solution=False) - # test.test_ERA5_extraction(overwrite_solution=False) + print( + "To Overwrite the solutions, run: \n pytest test_gee.py --mpl --mpl-generate-path=baseline" + ) + print( + "To checkout the differences, run: \n pytest test_gee.py --mpl --mpl-generate-summary=html" + ) + + OVERWRITE_SOLUTION = False + + tester = TestDemoDataset() + + # Prepare fixtures + metaonly_dataset = tester.import_metaonly_dataset.__wrapped__(tester) + # metaonly_dataset_with_era5 = tester.import_metaonly_dataset_with_era5.__wrapped__(tester, metaonly_dataset) + # dataset_with_era5 = tester.import_dataset_with_era5.__wrapped__(tester) + + # Run tests + # tester.test_import_demo_metadata(metaonly_dataset, overwrite_solution=OVERWRITE_SOLUTION) + # tester.test_gee_connect() + # tester.test_LCZ_extraction(metaonly_dataset, overwrite_solution=OVERWRITE_SOLUTION) + tester.test_lcz_seamask_fix(metaonly_dataset) + tester.test_altitude_extraction( + metaonly_dataset, overwrite_solution=OVERWRITE_SOLUTION + ) + # tester.test_geemodeldata_getinfo_class() + # tester.test_gee_static_plot(metaonly_dataset) + # tester.test_gee_dynamic_plot(metaonly_dataset) + # tester.test_landcover_frac_extraction(metaonly_dataset, overwrite_solution=OVERWRITE_SOLUTION) + # tester.test_ERA5_extraction_on_metadata_only(metaonly_dataset_with_era5, overwrite_solution=OVERWRITE_SOLUTION) + # tester.test_get_info_on_modeltimeseries(metaonly_dataset_with_era5) + # tester.test_ERA5_extraction(dataset_with_era5, overwrite_solution=OVERWRITE_SOLUTION) + # tester.test_station_timeseries_extraction() + # tester.test_pickling(dataset_with_era5) + # tester.test_era5_modeldata_interactions(dataset_with_era5) + # tester.test_ERA5_google_drive_interface(metaonly_dataset) + + # Plotting tests + # tester.test_modeldata_timeseries_plot(dataset_with_era5) diff --git a/tests/test_gf.py b/tests/test_gf.py index 3e6802a76..ac3f5d7b7 100644 --- a/tests/test_gf.py +++ b/tests/test_gf.py @@ -16,62 +16,68 @@ # solutionfolder solutionsdir = libfolder.joinpath("tests").joinpath("pkled_solutions") -from solutionclass import SolutionFixer, assert_equality, datadir +from solutionclass import SolutionFixer2, assert_equality, datadir class TestDataWithGaps: # to pass to the solutionfixer solkwargs = {"testfile": Path(__file__).name, "classname": "testdatawithgaps"} - solutionfixer = SolutionFixer(solutiondir=solutionsdir) - - def test_import_data(self, overwrite_solution=False): + solutionfixer = SolutionFixer2(solutiondir=solutionsdir) + + @pytest.fixture(autouse=True) + def import_dataset_with_era5(self): + dataset = metobs_toolkit.Dataset() + dataset.import_data_from_file( + template_file=metobs_toolkit.demo_template, + input_metadata_file=metobs_toolkit.demo_metadatafile, + input_data_file=datadir.joinpath("testdata_with_gaps.csv"), + ) + dataset.resample(target_freq="15min") + + era5_model = metobs_toolkit.default_GEE_datasets["ERA5-land"] + + startdt_utc = pd.Timestamp("2022-08-31 18:32:25") + enddt_utc = pd.Timestamp("2022-09-01 12:16:00") + era5_data = dataset.get_gee_timeseries_data( + gee_dynamic_manager=era5_model, + startdt_utc=startdt_utc, + enddt_utc=enddt_utc, + obstypes=["temp"], + get_all_bands=False, + drive_filename=None, + drive_folder="gee_timeseries_data", + force_direct_transfer=True, + force_to_drive=False, + ) + + # To other resolution!! + dataset.resample(target_freq="15min") + + # extracting modeldata + era5_manager = metobs_toolkit.default_GEE_datasets["ERA5-land"] + era5_data = dataset.get_gee_timeseries_data( + gee_dynamic_manager=era5_manager, + startdt_utc=None, # raises error in metadata-only case + enddt_utc=None, + obstypes=["temp"], + get_all_bands=False, + drive_filename=None, + # drive_folder="gee_timeseries_data", + force_direct_transfer=True, + force_to_drive=False, + ) + return dataset + + @pytest.mark.dependency() + def test_import_data(self, import_dataset_with_era5, overwrite_solution=False): # 0. Get info of the current check _method_name = sys._getframe().f_code.co_name # get the name of this method + dataset = copy.deepcopy(import_dataset_with_era5) - # 1. get_startpoint data - if overwrite_solution: # GEE INTERACTION !! - dataset = metobs_toolkit.Dataset() - dataset.import_data_from_file( - template_file=metobs_toolkit.demo_template, - input_metadata_file=metobs_toolkit.demo_metadatafile, - input_data_file=datadir.joinpath("testdata_with_gaps.csv"), - ) - # To other resolution!! - dataset.resample(target_freq="15min") - - # extracting modeldata - era5_manager = metobs_toolkit.default_GEE_datasets["ERA5-land"] - era5_data = dataset.get_gee_timeseries_data( - gee_dynamic_manager=era5_manager, - startdt_utc=None, # raises error in metadata-only case - enddt_utc=None, - obstypes=["temp"], - get_all_bands=False, - drive_filename=None, - # drive_folder="gee_timeseries_data", - force_direct_transfer=True, - force_to_drive=False, - ) - - dataset.save_dataset_to_pkl( - target_folder=( - solutionsdir.joinpath("test_gf_solutions").joinpath( - "testdatawithgaps" - ) - ), - filename="test_import_data.pkl", - overwrite=True, - ) - else: - dataset = metobs_toolkit.import_dataset_from_pkl( - solutionsdir.joinpath("test_gf_solutions") - .joinpath("testdatawithgaps") - .joinpath("test_import_data.pkl") - ) # 3. overwrite solution? if overwrite_solution: TestDataWithGaps.solutionfixer.create_solution( - solutiondata=dataset, + solution=dataset, methodname=_method_name, **TestDataWithGaps.solkwargs, ) @@ -84,13 +90,13 @@ def test_import_data(self, overwrite_solution=False): # 5. Construct the equlity tests assert_equality(dataset, solutionobj) # dataset comparison - def test_interpolation_on_station(self, overwrite_solution=False): + @pytest.mark.dependency(depends=["TestDataWithGaps::test_import_data"]) + def test_interpolation_on_station( + self, import_dataset_with_era5, overwrite_solution=False + ): # 0. Get info of the current check _method_name = "test_interpolation_on_station" - # 1. get_startpoint data - dataset = TestDataWithGaps.solutionfixer.get_solution( - **TestDataWithGaps.solkwargs, methodname="test_import_data" - ) + dataset = copy.deepcopy(import_dataset_with_era5) sta = dataset.get_station("vlinder01") @@ -117,7 +123,7 @@ def test_interpolation_on_station(self, overwrite_solution=False): # 3. overwrite solution? if overwrite_solution: TestDataWithGaps.solutionfixer.create_solution( - solutiondata=sta, + solution=sta, **TestDataWithGaps.solkwargs, methodname=_method_name, ) @@ -133,14 +139,15 @@ def test_interpolation_on_station(self, overwrite_solution=False): # Test plotting _statsdf = sta.make_plot() - def test_interpolation_on_dataset(self, overwrite_solution=False): + @pytest.mark.dependency(depends=["TestDataWithGaps::test_import_data"]) + def test_interpolation_on_dataset( + self, import_dataset_with_era5, overwrite_solution=False + ): # 0. Get info of the current check _method_name = "test_interpolation_on_dataset" # 1. get_startpoint data - dataset = TestDataWithGaps.solutionfixer.get_solution( - **TestDataWithGaps.solkwargs, methodname="test_import_data" - ) + dataset = copy.deepcopy(import_dataset_with_era5) # ------------------------------------------ # A: Test higher order interpolation on dataset scale @@ -161,19 +168,46 @@ def test_interpolation_on_dataset(self, overwrite_solution=False): # overwrite solution? if overwrite_solution: TestDataWithGaps.solutionfixer.create_solution( - solutiondata=dataset, + solution=dataset, **TestDataWithGaps.solkwargs, - methodname=f"{_method_name}_A", + methodname=_method_name, ) # Get solution - solutionobj_A = TestDataWithGaps.solutionfixer.get_solution( - **TestDataWithGaps.solkwargs, methodname=f"{_method_name}_A" + solutionobj = TestDataWithGaps.solutionfixer.get_solution( + **TestDataWithGaps.solkwargs, methodname=_method_name ) # Construct the equlity tests on dataset level - assert_equality(dataset, solutionobj_A) + assert_equality(dataset, solutionobj) + + @pytest.mark.dependency(depends=["TestDataWithGaps::test_import_data"]) + def test_interpolation_chaining_on_dataset( + self, import_dataset_with_era5, overwrite_solution=False + ): + # 0. Get info of the current check + _method_name = "test_interpolation_chaining_on_dataset" + + # 1. get_startpoint data + dataset = copy.deepcopy(import_dataset_with_era5) + + # ------------------------------------------ + # A: Test higher order interpolation on dataset scale + # ------------------------------------------ + # test interpolation using higher order cubic spline + dataset.interpolate_gaps( + obstype="temp", + method="cubicspline", + max_gap_duration_to_fill=pd.Timedelta("5h"), + n_leading_anchors=3, + n_trailing_anchors=2, # only 1 is used + max_lead_to_gap_distance=pd.Timedelta("3h"), + max_trail_to_gap_distance=None, + overwrite_fill=False, + method_kwargs={"order": 3}, + ) + dataset_a = copy.deepcopy(dataset) # ------------------------------------------ # B: test overwrite_fill argument # ------------------------------------------ @@ -189,7 +223,7 @@ def test_interpolation_on_dataset(self, overwrite_solution=False): overwrite_fill=False, # This should not do anything, since gaps are already filled method_kwargs={"order": 2}, ) - assert_equality(dataset, solutionobj_A) # dataset comparison + assert_equality(dataset, dataset_a) # dataset comparison # regular interpolation iwht overwrite_fill == True -> should overwrite the data! dataset.interpolate_gaps( @@ -197,22 +231,21 @@ def test_interpolation_on_dataset(self, overwrite_solution=False): overwrite_fill=True, ) - assert dataset != solutionobj_A + assert dataset != dataset_a # 3. overwrite solution? if overwrite_solution: TestDataWithGaps.solutionfixer.create_solution( - solutiondata=dataset, + solution=dataset, **TestDataWithGaps.solkwargs, - methodname=f"{_method_name}_B", + methodname=_method_name, ) # 4. Get solution - solutionobj_B = TestDataWithGaps.solutionfixer.get_solution( - **TestDataWithGaps.solkwargs, methodname=f"{_method_name}_B" + solutionobj = TestDataWithGaps.solutionfixer.get_solution( + **TestDataWithGaps.solkwargs, methodname=_method_name ) - - assert_equality(dataset, solutionobj_B) # dataset comparison + assert_equality(dataset, solutionobj) # dataset comparison def test_interpolating_with_station_without_that_obstype(self): # goal is to test if metobs is able to interpolate on a dataset, @@ -242,13 +275,13 @@ def test_interpolating_with_station_without_that_obstype(self): dataset.convert_outliers_to_gaps() dataset.interpolate_gaps(obstype="temp", method="linear") - def test_raw_modeldata_gapfill(self, overwrite_solution=False): + @pytest.mark.dependency(depends=["TestDataWithGaps::test_import_data"]) + def test_raw_modeldata_gapfill( + self, import_dataset_with_era5, overwrite_solution=False + ): # 0. Get info of the current check _method_name = "test_raw_modeldata_gapfill" - # get_startpoint data - dataset = TestDataWithGaps.solutionfixer.get_solution( - **TestDataWithGaps.solkwargs, methodname="test_import_data" - ) + dataset = copy.deepcopy(import_dataset_with_era5) # test raw gapfill on dataset dataset.fill_gaps_with_raw_modeldata( @@ -260,17 +293,18 @@ def test_raw_modeldata_gapfill(self, overwrite_solution=False): # overwrite solution? if overwrite_solution: TestDataWithGaps.solutionfixer.create_solution( - solutiondata=dataset, + solution=dataset, **TestDataWithGaps.solkwargs, - methodname=f"{_method_name}_A", + methodname=_method_name, ) # Get solution - solutionobj_A = TestDataWithGaps.solutionfixer.get_solution( - **TestDataWithGaps.solkwargs, methodname=f"{_method_name}_A" + solutionobj = TestDataWithGaps.solutionfixer.get_solution( + **TestDataWithGaps.solkwargs, methodname=_method_name ) - assert_equality(dataset, solutionobj_A) # dataset comparison + assert_equality(dataset, solutionobj) # dataset comparison + valid_dataset = copy.deepcopy(dataset) from metobs_toolkit.backend_collection.errorclasses import MetObsModelDataError @@ -282,9 +316,7 @@ def test_raw_modeldata_gapfill(self, overwrite_solution=False): # test on station and dataset # get_startpoint data - dataset = TestDataWithGaps.solutionfixer.get_solution( - **TestDataWithGaps.solkwargs, methodname="test_import_data" - ) + dataset = copy.deepcopy(import_dataset_with_era5) sta = dataset.get_station("vlinder01") sta.fill_gaps_with_raw_modeldata( obstype="temp", @@ -293,13 +325,11 @@ def test_raw_modeldata_gapfill(self, overwrite_solution=False): ) assert_equality( - sta, solutionobj_A.get_station("vlinder01") + sta, valid_dataset.get_station("vlinder01") ) # station comparison # test the overwrite is true option - dataset = TestDataWithGaps.solutionfixer.get_solution( - **TestDataWithGaps.solkwargs, methodname="test_import_data" - ) + dataset = copy.deepcopy(import_dataset_with_era5) dataset.interpolate_gaps(obstype="temp", overwrite_fill=False) dataset.fill_gaps_with_raw_modeldata( obstype="temp", @@ -307,18 +337,19 @@ def test_raw_modeldata_gapfill(self, overwrite_solution=False): overwrite_fill=True, ) - assert_equality(dataset, solutionobj_A) # dataset comparison + assert_equality(dataset, solutionobj) # dataset comparison # test the plot dataset.make_plot() - def test_chaining_gapfill_methods(self, overwrite_solution=False): + @pytest.mark.dependency(depends=["TestDataWithGaps::test_import_data"]) + def test_chaining_gapfill_methods( + self, import_dataset_with_era5, overwrite_solution=False + ): # 0. Get info of the current check _method_name = "test_chaining_gapfill_methods" # get_startpoint data - dataset = TestDataWithGaps.solutionfixer.get_solution( - **TestDataWithGaps.solkwargs, methodname="test_import_data" - ) + dataset = copy.deepcopy(import_dataset_with_era5) dataset.interpolate_gaps( obstype="temp", @@ -338,26 +369,27 @@ def test_chaining_gapfill_methods(self, overwrite_solution=False): # overwrite solution? if overwrite_solution: TestDataWithGaps.solutionfixer.create_solution( - solutiondata=dataset, + solution=dataset, **TestDataWithGaps.solkwargs, methodname=f"{_method_name}", ) # Get solution - solutionobj_A = TestDataWithGaps.solutionfixer.get_solution( + solutionobj = TestDataWithGaps.solutionfixer.get_solution( **TestDataWithGaps.solkwargs, methodname=f"{_method_name}" ) - assert_equality(dataset, solutionobj_A) # dataset comparison + assert_equality(dataset, solutionobj) # dataset comparison - def test_debias_modeldata_gapfill(self, overwrite_solution=False): + @pytest.mark.dependency(depends=["TestDataWithGaps::test_import_data"]) + def test_debias_modeldata_gapfill( + self, import_dataset_with_era5, overwrite_solution=False + ): # 0. Get info of the current check _method_name = "test_debias_modeldata_gapfill" # get_startpoint data - dataset = TestDataWithGaps.solutionfixer.get_solution( - **TestDataWithGaps.solkwargs, methodname="test_import_data" - ) + dataset = copy.deepcopy(import_dataset_with_era5) # test debias gapfill on dataset dataset.fill_gaps_with_debiased_modeldata( @@ -373,23 +405,22 @@ def test_debias_modeldata_gapfill(self, overwrite_solution=False): # overwrite solution? if overwrite_solution: TestDataWithGaps.solutionfixer.create_solution( - solutiondata=dataset, + solution=dataset, **TestDataWithGaps.solkwargs, - methodname=f"{_method_name}", + methodname=_method_name, ) # Get solution solutionobj = TestDataWithGaps.solutionfixer.get_solution( - **TestDataWithGaps.solkwargs, methodname=f"{_method_name}" + **TestDataWithGaps.solkwargs, methodname=_method_name ) # test equality assert_equality(to_check=dataset, solution=solutionobj) + valid_dataset = copy.deepcopy(dataset) # test on station and dataset - dataset = TestDataWithGaps.solutionfixer.get_solution( - **TestDataWithGaps.solkwargs, methodname="test_import_data" - ) + dataset = copy.deepcopy(import_dataset_with_era5) sta = dataset.get_station("vlinder01") sta.fill_gaps_with_debiased_modeldata( obstype="temp", @@ -401,16 +432,17 @@ def test_debias_modeldata_gapfill(self, overwrite_solution=False): overwrite_fill=False, ) - assert_equality(sta, solutionobj.get_station("vlinder01")) + assert_equality(sta, valid_dataset.get_station("vlinder01")) - def test_diurnal_debias_modeldata_gapfill(self, overwrite_solution=False): + @pytest.mark.dependency(depends=["TestDataWithGaps::test_import_data"]) + def test_diurnal_debias_modeldata_gapfill( + self, import_dataset_with_era5, overwrite_solution=False + ): # 0. Get info of the current check _method_name = sys._getframe().f_code.co_name # get_startpoint data - dataset = TestDataWithGaps.solutionfixer.get_solution( - **TestDataWithGaps.solkwargs, methodname="test_import_data" - ) + dataset = copy.deepcopy(import_dataset_with_era5) # test diurnal debias gapfill on dataset dataset.fill_gaps_with_diurnal_debiased_modeldata( @@ -424,21 +456,20 @@ def test_diurnal_debias_modeldata_gapfill(self, overwrite_solution=False): # overwrite solution? if overwrite_solution: TestDataWithGaps.solutionfixer.create_solution( - solutiondata=dataset, + solution=dataset, **TestDataWithGaps.solkwargs, - methodname=f"{_method_name}_A", + methodname=_method_name, ) # Get solution - solutionobj_A = TestDataWithGaps.solutionfixer.get_solution( - **TestDataWithGaps.solkwargs, methodname=f"{_method_name}_A" + solutionobj = TestDataWithGaps.solutionfixer.get_solution( + **TestDataWithGaps.solkwargs, methodname=_method_name ) - assert_equality(dataset, solutionobj_A) # dataset comparison + assert_equality(dataset, solutionobj) # dataset comparison + valid_dataset = copy.deepcopy(dataset) # test on station and dataset - dataset = TestDataWithGaps.solutionfixer.get_solution( - **TestDataWithGaps.solkwargs, methodname="test_import_data" - ) + dataset = copy.deepcopy(import_dataset_with_era5) sta = dataset.get_station("vlinder01") sta.fill_gaps_with_diurnal_debiased_modeldata( obstype="temp", @@ -450,15 +481,13 @@ def test_diurnal_debias_modeldata_gapfill(self, overwrite_solution=False): ) assert_equality( - sta, solutionobj_A.get_station("vlinder01") + sta, valid_dataset.get_station("vlinder01") ) # station comparison - def test_get_info_on_objects(self): + @pytest.mark.dependency(depends=["TestDataWithGaps::test_import_data"]) + def test_get_info_on_objects(self, import_dataset_with_era5): # get_startpoint data - dataset_gf = TestDataWithGaps.solutionfixer.get_solution( - **TestDataWithGaps.solkwargs, - methodname="test_diurnal_debias_modeldata_gapfill_A", - ) + dataset_gf = copy.deepcopy(import_dataset_with_era5) # test on dataset with gapfilled data _ = dataset_gf.get_info(printout=False) @@ -471,43 +500,37 @@ def test_get_info_on_objects(self): .get_info(printout=False) ) - def test_weighted_diurnal_debias_modeldata_gapfill(self, overwrite_solution=False): + @pytest.mark.dependency(depends=["TestDataWithGaps::test_import_data"]) + def test_weighted_diurnal_debias_modeldata_gapfill( + self, apply_weighted_diurn_debias_gapfill, overwrite_solution=False + ): # 0. Get info of the current check _method_name = sys._getframe().f_code.co_name # get_startpoint data - dataset = TestDataWithGaps.solutionfixer.get_solution( - **TestDataWithGaps.solkwargs, methodname="test_import_data" - ) - - # test diurnal debias gapfill on dataset - dataset.fill_gaps_with_weighted_diurnal_debiased_modeldata( - obstype="temp", - leading_period_duration=pd.Timedelta("24h"), - trailing_period_duration=pd.Timedelta("24h"), - min_lead_debias_sample_size=1, - min_trail_debias_sample_size=0, # just testing - overwrite_fill=False, - ) + gf_dataset = copy.deepcopy(apply_weighted_diurn_debias_gapfill) # overwrite solution? if overwrite_solution: TestDataWithGaps.solutionfixer.create_solution( - solutiondata=dataset, + solution=gf_dataset, **TestDataWithGaps.solkwargs, - methodname=f"{_method_name}_A", + methodname=_method_name, ) # Get solution - solutionobj_A = TestDataWithGaps.solutionfixer.get_solution( - **TestDataWithGaps.solkwargs, methodname=f"{_method_name}_A" + solutionobj = TestDataWithGaps.solutionfixer.get_solution( + **TestDataWithGaps.solkwargs, methodname=_method_name ) - assert_equality(dataset, solutionobj_A) # dataset comparison + assert_equality(gf_dataset, solutionobj) # dataset comparison + @pytest.mark.dependency(depends=["TestDataWithGaps::test_import_data"]) + def test_weighted_diurnal_debias_gf_on_station( + self, import_dataset_with_era5, overwrite_solution=False + ): # test on station and dataset - dataset = TestDataWithGaps.solutionfixer.get_solution( - **TestDataWithGaps.solkwargs, methodname="test_import_data" - ) + _method_name = sys._getframe().f_code.co_name + dataset = copy.deepcopy(import_dataset_with_era5) sta = dataset.get_station("vlinder01") sta.fill_gaps_with_weighted_diurnal_debiased_modeldata( obstype="temp", @@ -518,18 +541,29 @@ def test_weighted_diurnal_debias_modeldata_gapfill(self, overwrite_solution=Fals overwrite_fill=False, ) - assert_equality( - sta, solutionobj_A.get_station("vlinder01") - ) # station comparison + # overwrite solution? + if overwrite_solution: + TestDataWithGaps.solutionfixer.create_solution( + solution=sta, + **TestDataWithGaps.solkwargs, + methodname=_method_name, + ) + + # Get solution + solutionobj = TestDataWithGaps.solutionfixer.get_solution( + **TestDataWithGaps.solkwargs, methodname=_method_name + ) + assert_equality(sta, solutionobj) # station comparison - def test_partially_filled_gaps(self, overwrite_solution=False): + @pytest.mark.dependency(depends=["TestDataWithGaps::test_import_data"]) + def test_partially_filled_gaps( + self, import_dataset_with_era5, overwrite_solution=False + ): # 0. Get info of the current check _method_name = "test_partially_filled_gaps" # get_startpoint data - dataset = TestDataWithGaps.solutionfixer.get_solution( - **TestDataWithGaps.solkwargs, methodname="test_import_data" - ) + dataset = copy.deepcopy(import_dataset_with_era5) # create outliers dataset.repetitions_check(max_N_repetitions=8) @@ -552,14 +586,14 @@ def test_partially_filled_gaps(self, overwrite_solution=False): if overwrite_solution: TestDataWithGaps.solutionfixer.create_solution( - solutiondata=dataset, + solution=dataset, **TestDataWithGaps.solkwargs, - methodname=f"{_method_name}", + methodname=_method_name, ) # Get solution solutionobj = TestDataWithGaps.solutionfixer.get_solution( - **TestDataWithGaps.solkwargs, methodname=f"{_method_name}" + **TestDataWithGaps.solkwargs, methodname=_method_name ) assert_equality(dataset, solutionobj) # dataset comparison @@ -575,35 +609,15 @@ def test_partially_filled_gaps(self, overwrite_solution=False): ) dataset.stations[0].make_plot(colorby="label") - def test_chaining_on_partially_filled_gaps(self): - - dataset = TestDataWithGaps.solutionfixer.get_solution( - **TestDataWithGaps.solkwargs, methodname="test_partially_filled_gaps" - ) assert ( - "partially successful gapfill" in dataset.gap_overview_df()["label"].values - ) - - # Test chaining after partially filled gaps: - # Choice: when force=False, a partially filled gap will BE filled again when chaining !! - - dataset.stations[0].interpolate_gaps( - obstype="temp", - max_gap_duration_to_fill=pd.Timedelta("25h"), - overwrite_fill=False, + "partially successful gapfill" + not in dataset.gap_overview_df()["label"].values ) - # dataset.stations[0].make_plot(colorby="label") - - assert not ( - "partially successful gapfill" in dataset.gap_overview_df()["label"].values - ) - - def test_add_modeldata_to_station(self): + @pytest.mark.dependency(depends=["TestDataWithGaps::test_import_data"]) + def test_add_modeldata_to_station(self, import_dataset_with_era5): # get_startpoint data - dataset = TestDataWithGaps.solutionfixer.get_solution( - **TestDataWithGaps.solkwargs, methodname="test_import_data" - ) + dataset = copy.deepcopy(import_dataset_with_era5) sta = dataset.get_station("vlinder02") # create a fake new modeltimesries @@ -635,15 +649,14 @@ def test_add_modeldata_to_station(self): assert len(sta.modeldata) == 3 - def test_gap_status_df(self, overwrite_solution=False): + @pytest.mark.dependency(depends=["TestDataWithGaps::test_import_data"]) + def test_gap_status_df(self, import_dataset_with_era5, overwrite_solution=False): """Test gap_overview_df methods on Dataset, Station, and SensorData classes.""" # 0. Get info of the current check _method_name = "test_gap_status_df" # 1. Get starting data without gaps/fills - dataset_original = TestDataWithGaps.solutionfixer.get_solution( - **TestDataWithGaps.solkwargs, methodname="test_import_data" - ) + dataset_original = copy.deepcopy(import_dataset_with_era5) # Test 1: Dataset without gaps (original data) gap_status_dataset_no_gaps = dataset_original.gap_overview_df() @@ -672,8 +685,17 @@ def test_gap_status_df(self, overwrite_solution=False): gap_status_sensordata_with_gaps = sensordata_with_gaps.gap_overview_df() # 3. Get data with gap filling applied - dataset_filled = TestDataWithGaps.solutionfixer.get_solution( - **TestDataWithGaps.solkwargs, methodname="test_interpolation_on_dataset_A" + dataset_filled = copy.deepcopy(import_dataset_with_era5) + dataset_filled.interpolate_gaps( + obstype="temp", + method="cubicspline", + max_gap_duration_to_fill=pd.Timedelta("5h"), + n_leading_anchors=3, + n_trailing_anchors=2, + max_lead_to_gap_distance=pd.Timedelta("3h"), + max_trail_to_gap_distance=None, + overwrite_fill=False, + method_kwargs={"order": 3}, ) # Test 7: Dataset with gap filling @@ -703,7 +725,7 @@ def test_gap_status_df(self, overwrite_solution=False): # 5. Overwrite solution if requested if overwrite_solution: TestDataWithGaps.solutionfixer.create_solution( - solutiondata=test_results, + solution=test_results, **TestDataWithGaps.solkwargs, methodname=_method_name, ) @@ -717,12 +739,11 @@ def test_gap_status_df(self, overwrite_solution=False): for key in test_results: assert_equality(test_results[key], solutionobj[key]) - def test_min_max_value_clipping(self): + @pytest.mark.dependency(depends=["TestDataWithGaps::test_import_data"]) + def test_min_max_value_clipping(self, import_dataset_with_era5): """Test that min_value and max_value parameters work for all model-based gap filling methods.""" # Get test data - dataset = TestDataWithGaps.solutionfixer.get_solution( - **TestDataWithGaps.solkwargs, methodname="test_import_data" - ) + dataset = copy.deepcopy(import_dataset_with_era5) # Test parameters obstype = "temp" @@ -825,28 +846,240 @@ def test_min_max_value_clipping(self): ) # ------------------------------------------ - # Plotting tests are present in the test_plotting.py + # data creators + # ------------------------------------------ + @pytest.fixture(autouse=True) + def apply_interpolation_on_dataset( + self, import_dataset_with_era5 + ) -> metobs_toolkit.Dataset: + # 1. get_startpoint data + dataset = copy.deepcopy(import_dataset_with_era5) + + # test interpolation using higher order cubic spline + dataset.interpolate_gaps( + obstype="temp", + method="cubicspline", + max_gap_duration_to_fill=pd.Timedelta("5h"), + n_leading_anchors=3, + n_trailing_anchors=2, # only 1 is used + max_lead_to_gap_distance=pd.Timedelta("3h"), + max_trail_to_gap_distance=None, + overwrite_fill=False, + method_kwargs={"order": 3}, + ) + # Will have unfilled gaps still + return dataset + + @pytest.fixture(autouse=True) + def apply_interpolation_chaining_on_dataset( + self, import_dataset_with_era5 + ) -> metobs_toolkit.Dataset: + # 1. get_startpoint data + dataset = copy.deepcopy(import_dataset_with_era5) + + # ------------------------------------------ + # A: Test higher order interpolation on dataset scale + # ------------------------------------------ + # test interpolation using higher order cubic spline + dataset.interpolate_gaps( + obstype="temp", + method="cubicspline", + max_gap_duration_to_fill=pd.Timedelta("5h"), + n_leading_anchors=3, + n_trailing_anchors=2, # only 1 is used + max_lead_to_gap_distance=pd.Timedelta("3h"), + max_trail_to_gap_distance=None, + overwrite_fill=False, + method_kwargs={"order": 3}, + ) + + # Now second fill with overwrite = False to only fill unfilled gaps + dataset.interpolate_gaps( + obstype="temp", + method="spline", + max_gap_duration_to_fill=pd.Timedelta("5h"), + n_leading_anchors=3, + n_trailing_anchors=2, # only 1 is used + max_lead_to_gap_distance=pd.Timedelta("3h"), + max_trail_to_gap_distance=None, + overwrite_fill=False, # This should not do anything, since gaps are already filled + method_kwargs={"order": 2}, + ) + return dataset + + @pytest.fixture(autouse=True) + def apply_raw_modeldata_gapfill( + self, import_dataset_with_era5 + ) -> metobs_toolkit.Dataset: + dataset = copy.deepcopy(import_dataset_with_era5) + + # test raw gapfill on dataset + dataset.fill_gaps_with_raw_modeldata( + obstype="temp", + max_gap_duration_to_fill=pd.Timedelta("6h"), + overwrite_fill=False, + ) + return dataset + + @pytest.fixture(autouse=True) + def apply_debias_modeldata_gapfill( + self, import_dataset_with_era5 + ) -> metobs_toolkit.Dataset: + # get_startpoint data + dataset = copy.deepcopy(import_dataset_with_era5) + + # test debias gapfill on dataset + dataset.fill_gaps_with_debiased_modeldata( + obstype="temp", + leading_period_duration=pd.Timedelta("6h"), + min_leading_records_total=5, + trailing_period_duration=pd.Timedelta("24h"), + min_trailing_records_total=8, + max_gap_duration_to_fill=pd.Timedelta("12h"), + overwrite_fill=False, + ) + return dataset + + @pytest.fixture(autouse=True) + def apply_diurnal_debias_modeldata_gapfill( + self, import_dataset_with_era5 + ) -> metobs_toolkit.Dataset: + # get_startpoint data + dataset = copy.deepcopy(import_dataset_with_era5) + + # test diurnal debias gapfill on dataset + dataset.fill_gaps_with_diurnal_debiased_modeldata( + obstype="temp", + leading_period_duration=pd.Timedelta("24h"), + trailing_period_duration=pd.Timedelta("24h"), + min_debias_sample_size=2, + overwrite_fill=False, + ) + + return dataset + + @pytest.fixture(autouse=True) + def apply_weighted_diurn_debias_gapfill( + self, import_dataset_with_era5 + ) -> metobs_toolkit.Dataset: + # get_startpoint data + dataset = copy.deepcopy(import_dataset_with_era5) + + # test diurnal debias gapfill on dataset + dataset.fill_gaps_with_weighted_diurnal_debiased_modeldata( + obstype="temp", + leading_period_duration=pd.Timedelta("24h"), + trailing_period_duration=pd.Timedelta("24h"), + min_lead_debias_sample_size=1, + min_trail_debias_sample_size=0, # just testing + overwrite_fill=False, + ) + + return dataset + + # ------------------------------------------ + # Plotting tests # ------------------------------------------ + @pytest.mark.mpl_image_compare + def test_interpolation_on_dataset_plot(self, apply_interpolation_on_dataset): + dataset_with_gf = copy.deepcopy(apply_interpolation_on_dataset) + ax = dataset_with_gf.make_plot(colorby="label") + fig = ax.get_figure() + fig.set_size_inches(15, 5) # width=1500px, height=500px at 100 dpi + return fig + + @pytest.mark.mpl_image_compare + def test_interpolated_timeseries_plot( + self, apply_interpolation_chaining_on_dataset + ): + dataset_with_gf = copy.deepcopy(apply_interpolation_chaining_on_dataset) + ax = dataset_with_gf.make_plot(colorby="label") + fig = ax.get_figure() + fig.set_size_inches(15, 5) + return fig + + @pytest.mark.mpl_image_compare + def test_debias_modeldata_gf_timeseries_plot(self, apply_debias_modeldata_gapfill): + dataset_with_gf = copy.deepcopy(apply_debias_modeldata_gapfill) + ax = dataset_with_gf.make_plot(colorby="label") + fig = ax.get_figure() + fig.set_size_inches(15, 5) + return fig + + @pytest.mark.mpl_image_compare + def test_diurnal_debias_modeldata_gf_timeseries_plot( + self, apply_diurnal_debias_modeldata_gapfill + ): + dataset_with_gf = copy.deepcopy(apply_diurnal_debias_modeldata_gapfill) + ax = dataset_with_gf.make_plot(colorby="label") + fig = ax.get_figure() + fig.set_size_inches(15, 5) + return fig + + @pytest.mark.mpl_image_compare + def test_dataset_test_show_gaps_labelby_labels( + self, apply_weighted_diurn_debias_gapfill + ): + # 1. get_startpoint data + dataset = copy.deepcopy(apply_weighted_diurn_debias_gapfill) + ax = dataset.make_plot(colorby="label", show_gaps=False) + fig = ax.get_figure() + fig.set_size_inches(15, 5) + return fig + + @pytest.mark.mpl_image_compare + def test_raw_modeldata_gf_timeseries_plot(self, apply_raw_modeldata_gapfill): + dataset_with_gf = copy.deepcopy(apply_raw_modeldata_gapfill) + ax = dataset_with_gf.make_plot(colorby="label") + fig = ax.get_figure() + fig.set_size_inches(15, 5) + return fig + if __name__ == "__main__": print( - "To Overwrite the solutions, run: \n pytest test_plotting.py --mpl --mpl-generate-path=baseline" + "To Overwrite the solutions, run: \n pytest test_plotting.py --mpl --mpl-generate-path=baseline " ) print( "To checkout the differences, run: \n pytest test_plotting.py --mpl --mpl-generate-summary=html " ) + OVERWRITE_SOLUTION = False + tester = TestDataWithGaps() - # tester.test_import_data(overwrite_solution=False) - # tester.test_interpolation_on_station(overwrite_solution=False) - # tester.test_interpolation_on_dataset(overwrite_solution=False) - # tester.test_raw_modeldata_gapfill(overwrite_solution=False) - # tester.test_partially_filled_gaps(overwrite_solution=False) - # tester.test_chaining_gapfill_methods(overwrite_solution=False) - # tester.test_debias_modeldata_gapfill(overwrite_solution=False) - # tester.test_diurnal_debias_modeldata_gapfill(overwrite_solution=False) - # tester.test_weighted_diurnal_debias_modeldata_gapfill(overwrite_solution=False) - # tester.test_gap_status_df(overwrite_solution=False) - # tester.test_min_max_value_clipping() + data_with_era5 = tester.import_dataset_with_era5.__wrapped__(tester) + + # tester.test_import_data(data_with_era5, overwrite_solution=OVERWRITE_SOLUTION) + # tester.test_interpolation_on_station(data_with_era5, overwrite_solution=OVERWRITE_SOLUTION) + # tester.test_interpolation_on_dataset(data_with_era5, overwrite_solution=OVERWRITE_SOLUTION) + # tester.test_interpolation_chaining_on_dataset(data_with_era5, overwrite_solution=OVERWRITE_SOLUTION) + # tester.test_interpolating_with_station_without_that_obstype() + # tester.test_raw_modeldata_gapfill(data_with_era5, overwrite_solution=OVERWRITE_SOLUTION) + # tester.test_chaining_gapfill_methods(data_with_era5, overwrite_solution=OVERWRITE_SOLUTION) + # tester.test_debias_modeldata_gapfill(data_with_era5, overwrite_solution=OVERWRITE_SOLUTION) + # tester.test_diurnal_debias_modeldata_gapfill(data_with_era5, overwrite_solution=OVERWRITE_SOLUTION) + # tester.test_get_info_on_objects(data_with_era5) + # tester.test_weighted_diurnal_debias_modeldata_gapfill(data_with_era5, overwrite_solution=OVERWRITE_SOLUTION) + # tester.test_weighted_diurnal_debias_gf_on_station(data_with_era5, overwrite_solution=OVERWRITE_SOLUTION) + # tester.test_partially_filled_gaps(data_with_era5, overwrite_solution=OVERWRITE_SOLUTION) + # tester.test_add_modeldata_to_station(data_with_era5) + # tester.test_gap_status_df(data_with_era5, overwrite_solution=OVERWRITE_SOLUTION) + # tester.test_min_max_value_clipping(data_with_era5) + + # Plotting tests - prepare fixtures + # interpolation_dataset = tester.apply_interpolation_on_dataset.__wrapped__(tester, data_with_era5) + # interpolation_chaining_dataset = tester.apply_interpolation_chaining_on_dataset.__wrapped__(tester, data_with_era5) + # raw_modeldata_dataset = tester.apply_raw_modeldata_gapfill.__wrapped__(tester, data_with_era5) + # debias_modeldata_dataset = tester.apply_debias_modeldata_gapfill.__wrapped__(tester, data_with_era5) + # diurnal_debias_dataset = tester.apply_diurnal_debias_modeldata_gapfill.__wrapped__(tester, data_with_era5) + # weighted_diurn_debias_dataset = tester.apply_weighted_diurn_debias_gapfill.__wrapped__(tester, data_with_era5) + + # # Run plotting tests + # tester.test_interpolation_on_dataset_plot(interpolation_dataset) + # tester.test_interpolated_timeseries_plot(interpolation_chaining_dataset) + # tester.test_debias_modeldata_gf_timeseries_plot(debias_modeldata_dataset) + # tester.test_diurnal_debias_modeldata_gf_timeseries_plot(diurnal_debias_dataset) + # tester.test_dataset_test_show_gaps_labelby_labels(weighted_diurn_debias_dataset) + # tester.test_raw_modeldata_gf_timeseries_plot(raw_modeldata_dataset) diff --git a/tests/test_importing.py b/tests/test_importing.py index 0619016e9..71dac6298 100644 --- a/tests/test_importing.py +++ b/tests/test_importing.py @@ -17,14 +17,24 @@ # solutionfolder solutionsdir = libfolder.joinpath("tests").joinpath("pkled_solutions") -from solutionclass import SolutionFixer, assert_equality, datadir -import shutil +from solutionclass import SolutionFixer2, assert_equality, datadir class TestDemoData: # to pass to the solutionfixer solkwargs = {"testfile": Path(__file__).name, "classname": "testdemodata"} - solutionfixer = SolutionFixer(solutiondir=solutionsdir) + solutionfixer = SolutionFixer2(solutiondir=solutionsdir) + + @pytest.fixture(scope="class") + def import_dataset(self): + """Import demo dataset fixture.""" + dataset = metobs_toolkit.Dataset() + dataset.import_data_from_file( + template_file=metobs_toolkit.demo_template, + input_metadata_file=metobs_toolkit.demo_metadatafile, + input_data_file=metobs_toolkit.demo_datafile, + ) + return dataset def test_version(self): # check if the local version is used @@ -40,26 +50,18 @@ def test_version(self): assert metobs_toolkit.__version__ == local_version assert isinstance(metobs_toolkit.__version__, str) - def test_import_demo_data(self, overwrite_solution=False): + @pytest.mark.dependency() + def test_import_demo_data(self, import_dataset, overwrite_solution=False): # 0. Get info of the current check _method_name = sys._getframe().f_code.co_name # get the name of this method # 1. get_startpoint data - pass - - # 2. apply a metobs manipulation - dataset = metobs_toolkit.Dataset() - dataset.import_data_from_file( - template_file=metobs_toolkit.demo_template, - input_metadata_file=metobs_toolkit.demo_metadatafile, - input_data_file=metobs_toolkit.demo_datafile, - ) - data_to_test = dataset + dataset = copy.deepcopy(import_dataset) # 3. overwrite solution? if overwrite_solution: TestDemoData.solutionfixer.create_solution( - solutiondata=data_to_test, + solution=dataset, methodname=_method_name, **TestDemoData.solkwargs, ) @@ -70,13 +72,12 @@ def test_import_demo_data(self, overwrite_solution=False): ) # 5. Construct the equlity tests - assert_equality(data_to_test, solutionobj) # dataset comparison + assert_equality(dataset, solutionobj) # dataset comparison - def test_calling_methods_without_solution_on_dataset(self): + @pytest.mark.dependency(depends=["TestDemoData::test_import_demo_data"]) + def test_calling_methods_without_solution_on_dataset(self, import_dataset): # 1. get_startpoint data - dataset = TestDemoData.solutionfixer.get_solution( - **TestDemoData.solkwargs, methodname="test_import_demo_data" - ) + dataset = copy.deepcopy(import_dataset) # run methods, and see if something breaks # testing specials @@ -100,11 +101,10 @@ def test_calling_methods_without_solution_on_dataset(self): renamedict={"vlinder01": "fakename", "vlider14": "fakename2"} ) - def test_calling_methods_without_solution_on_station(self): + @pytest.mark.dependency(depends=["TestDemoData::test_import_demo_data"]) + def test_calling_methods_without_solution_on_station(self, import_dataset): # 1. get_startpoint data - dataset = TestDemoData.solutionfixer.get_solution( - **TestDemoData.solkwargs, methodname="test_import_demo_data" - ) + dataset = copy.deepcopy(import_dataset) # run methods, and see if something breaks station = dataset.stations[0] @@ -125,14 +125,13 @@ def test_calling_methods_without_solution_on_station(self): # make plot station.make_plot() - def test_subset_by_stations(self, overwrite_solution=False): + @pytest.mark.dependency(depends=["TestDemoData::test_import_demo_data"]) + def test_subset_by_stations(self, import_dataset, overwrite_solution=False): # 0. Get info of the current check _method_name = sys._getframe().f_code.co_name # get the name of this method # 1. get_startpoint data - dataset = TestDemoData.solutionfixer.get_solution( - **TestDemoData.solkwargs, methodname="test_import_demo_data" - ) + dataset = copy.deepcopy(import_dataset) # 2. apply a metobs manipulation # Subset by valid stations @@ -143,7 +142,7 @@ def test_subset_by_stations(self, overwrite_solution=False): # 3. overwrite solution? if overwrite_solution: TestDemoData.solutionfixer.create_solution( - solutiondata=data_to_test, + solution=data_to_test, **TestDemoData.solkwargs, methodname=_method_name, ) @@ -156,11 +155,10 @@ def test_subset_by_stations(self, overwrite_solution=False): # 5. Construct the equality tests assert_equality(data_to_test, solutionobj) # Dataset comparison - def test_subset_by_stations_invalid(self, caplog): + @pytest.mark.dependency(depends=["TestDemoData::test_import_demo_data"]) + def test_subset_by_stations_invalid(self, import_dataset, caplog): # 1. get_startpoint data - dataset = TestDemoData.solutionfixer.get_solution( - **TestDemoData.solkwargs, methodname="test_import_demo_data" - ) + dataset = copy.deepcopy(import_dataset) # Test invalid input IDs with pytest.raises(ValueError): dataset.subset_by_stations(stationnames="vlinder01") @@ -174,21 +172,20 @@ def test_subset_by_stations_invalid(self, caplog): dataset.subset_by_stations(stationnames=["a", "b"]) assert "No stations matched the provided station names" in caplog.text - def test_get_info(self, overwrite_solution=False): + @pytest.mark.dependency(depends=["TestDemoData::test_import_demo_data"]) + def test_get_info(self, import_dataset, overwrite_solution=False): # 0. Get info of the current check _method_name = sys._getframe().f_code.co_name # get the name of this method # 1. get_startpoint data - dataset = TestDemoData.solutionfixer.get_solution( - **TestDemoData.solkwargs, methodname="test_import_demo_data" - ) + dataset = copy.deepcopy(import_dataset) # 2. apply a metobs manipulation data_to_test = dataset.get_info(printout=False) # 3. overwrite solution? if overwrite_solution: TestDemoData.solutionfixer.create_solution( - solutiondata=data_to_test, + solution=data_to_test, **TestDemoData.solkwargs, methodname=_method_name, ) @@ -200,21 +197,20 @@ def test_get_info(self, overwrite_solution=False): # 5. Construct the equlity tests assert_equality(data_to_test, solutionobj) # string comparison - def test_get_station(self, overwrite_solution=False): + @pytest.mark.dependency(depends=["TestDemoData::test_import_demo_data"]) + def test_get_station(self, import_dataset, overwrite_solution=False): # 0. Get info of the current check _method_name = sys._getframe().f_code.co_name # get the name of this method # 1. get_startpoint data - dataset = TestDemoData.solutionfixer.get_solution( - **TestDemoData.solkwargs, methodname="test_import_demo_data" - ) + dataset = copy.deepcopy(import_dataset) # 2. apply a metobs manipulation data_to_test = dataset.get_station("vlinder05") # 3. overwrite solution? if overwrite_solution: TestDemoData.solutionfixer.create_solution( - solutiondata=data_to_test, + solution=data_to_test, **TestDemoData.solkwargs, methodname=_method_name, ) @@ -227,14 +223,13 @@ def test_get_station(self, overwrite_solution=False): # 5. Construct the equlity tests assert_equality(data_to_test, solutionobj) # Station comparison - def test_pickling_dataset(self): + @pytest.mark.dependency(depends=["TestDemoData::test_import_demo_data"]) + def test_pickling_dataset(self, import_dataset): # 0. Get info of the current check # _method_name = sys._getframe().f_code.co_name #get the name of this method # 1. get_startpoint data - dataset = TestDemoData.solutionfixer.get_solution( - **TestDemoData.solkwargs, methodname="test_import_demo_data" - ) + dataset = copy.deepcopy(import_dataset) # Create a tmp dir with tempfile.TemporaryDirectory() as tmpdir: @@ -248,12 +243,11 @@ def test_pickling_dataset(self): # test if the pickled dataset is equal to the original assert_equality(dataset, dataset2) - def test_dataset_to_parquet(self): + @pytest.mark.dependency(depends=["TestDemoData::test_import_demo_data"]) + def test_dataset_to_parquet(self, import_dataset): """Test Dataset.to_parquet method""" # 1. get dataset data - dataset = TestDemoData.solutionfixer.get_solution( - **TestDemoData.solkwargs, methodname="test_import_demo_data" - ) + dataset = copy.deepcopy(import_dataset) with tempfile.TemporaryDirectory() as tmpdir: tmpdir = Path(tmpdir) # Save to parquet @@ -265,14 +259,13 @@ def test_dataset_to_parquet(self): df_read = pd.read_parquet(parquet_file) # Test if dataframes are equal - pd.testing.assert_frame_equal(df_original, df_read) + assert_equality(df_original, df_read) - def test_dataset_to_csv(self): + @pytest.mark.dependency(depends=["TestDemoData::test_import_demo_data"]) + def test_dataset_to_csv(self, import_dataset): """Test Dataset.to_csv method""" # 1. get dataset data - dataset = TestDemoData.solutionfixer.get_solution( - **TestDemoData.solkwargs, methodname="test_import_demo_data" - ) + dataset = copy.deepcopy(import_dataset) with tempfile.TemporaryDirectory() as tmpdir: tmpdir = Path(tmpdir) @@ -294,14 +287,13 @@ def test_dataset_to_csv(self): df_read["value"] = df_read["value"].astype("float32") # Test if dataframes are equal - pd.testing.assert_frame_equal(df_original, df_read) + assert_equality(df_original, df_read) - def test_station_to_parquet(self): + @pytest.mark.dependency(depends=["TestDemoData::test_import_demo_data"]) + def test_station_to_parquet(self, import_dataset): """Test Station.to_parquet method""" # 1. get dataset data - dataset = TestDemoData.solutionfixer.get_solution( - **TestDemoData.solkwargs, methodname="test_import_demo_data" - ) + dataset = copy.deepcopy(import_dataset) # Get a station station = dataset.get_station("vlinder05") @@ -318,14 +310,13 @@ def test_station_to_parquet(self): df_read = pd.read_parquet(parquet_file) # Test if dataframes are equal - pd.testing.assert_frame_equal(df_original, df_read) + assert_equality(df_original, df_read) - def test_station_to_csv(self): + @pytest.mark.dependency(depends=["TestDemoData::test_import_demo_data"]) + def test_station_to_csv(self, import_dataset): """Test Station.to_csv method""" # 1. get dataset data - dataset = TestDemoData.solutionfixer.get_solution( - **TestDemoData.solkwargs, methodname="test_import_demo_data" - ) + dataset = copy.deepcopy(import_dataset) # Get a station station = dataset.get_station("vlinder05") @@ -352,7 +343,37 @@ def test_station_to_csv(self): df_read["value"] = df_read["value"].astype("float32") # Test if dataframes are equal - pd.testing.assert_frame_equal(df_original, df_read) + assert_equality(df_original, df_read) + + @pytest.mark.dependency(depends=["TestDemoData::test_import_demo_data"]) + def test_create_distancematrix(self, import_dataset): + """Test Dataset.create_distancematrix returns a valid symmetric distance matrix.""" + dataset = copy.deepcopy(import_dataset) + + distmat = dataset.create_distancematrix() + + # Result is a DataFrame + assert isinstance(distmat, pd.DataFrame) + + # Square and station names are the index and columns + station_names = [sta.name for sta in dataset.stations] + assert set(distmat.index.tolist()) == set(station_names) + assert set(distmat.columns.tolist()) == set(station_names) + assert distmat.shape[0] == distmat.shape[1] + + # Diagonal is zero + assert (distmat.values.diagonal() == 0.0).all() + + # All distances are non-negative + assert (distmat.values >= 0).all() + + # Matrix is symmetric + pd.testing.assert_frame_equal(distmat, distmat.T) + + # Off-diagonal distances are positive (stations are not co-located) + n = distmat.shape[0] + off_diag = distmat.values[~np.eye(n, dtype=bool)] + assert (off_diag > 0).all() def test_importing_data_with_nans_for_single_station(self): # goal is to test if metobs is able to import a datafile, @@ -385,20 +406,15 @@ def test_importing_data_with_nans_for_single_station(self): class TestWideData: # to pass to the solutionfixer solkwargs = {"testfile": Path(__file__).name, "classname": "testwidedata"} - solutionfixer = SolutionFixer(solutiondir=solutionsdir) + solutionfixer = SolutionFixer2(solutiondir=solutionsdir) # paths to data datafile = datadir.joinpath("wide_test_data.csv") templatefile = datadir.joinpath("wide_test_template.json") - def test_import_wide_data(self, overwrite_solution=False): - # 0. Get info of the current check - _method_name = sys._getframe().f_code.co_name # get the name of this method - - # 1. get_startpoint data - pass - - # 2. apply a metobs manipulation + @pytest.fixture(scope="class") + def import_wide_dataset(self): + """Import wide format dataset fixture.""" dataset = metobs_toolkit.Dataset() dataset.import_data_from_file( template_file=TestWideData.templatefile, @@ -409,13 +425,20 @@ def test_import_wide_data(self, overwrite_solution=False): origin_simplify_tolerance="5min", timestamp_tolerance="4min", ) + return dataset - data_to_test = dataset + @pytest.mark.dependency() + def test_import_wide_data(self, import_wide_dataset, overwrite_solution=False): + # 0. Get info of the current check + _method_name = sys._getframe().f_code.co_name # get the name of this method + + # 1. get_startpoint data + dataset = copy.deepcopy(import_wide_dataset) # 3. overwrite solution? if overwrite_solution: TestWideData.solutionfixer.create_solution( - solutiondata=data_to_test, + solution=dataset, methodname=_method_name, **TestWideData.solkwargs, ) @@ -426,16 +449,15 @@ def test_import_wide_data(self, overwrite_solution=False): ) # 5. Construct the equlity tests - assert_equality(data_to_test, solutionobj) # dataset comparison + assert_equality(dataset, solutionobj) # dataset comparison - def test_sync_wide_records(self, overwrite_solution=False): + @pytest.mark.dependency(depends=["TestWideData::test_import_wide_data"]) + def test_sync_wide_records(self, import_wide_dataset, overwrite_solution=False): # 0. Get info of the current check _method_name = sys._getframe().f_code.co_name # get the name of this method # 1. get_startpoint data - dataset = TestWideData.solutionfixer.get_solution( - **TestWideData.solkwargs, methodname="test_import_wide_data" - ) + dataset = copy.deepcopy(import_wide_dataset) # 2. apply a metobs manipulation dataset.sync_records( timestamp_shift_tolerance="5min2s", freq_shift_tolerance="2min" @@ -444,7 +466,7 @@ def test_sync_wide_records(self, overwrite_solution=False): # 3. overwrite solution? if overwrite_solution: TestWideData.solutionfixer.create_solution( - solutiondata=dataset, **TestWideData.solkwargs, methodname=_method_name + solution=dataset, **TestWideData.solkwargs, methodname=_method_name ) # 4. Get solution solutionobj = TestWideData.solutionfixer.get_solution( @@ -462,34 +484,38 @@ class TestWideSingleStationData: "testfile": Path(__file__).name, "classname": "testwidesinglestationdata", } - solutionfixer = SolutionFixer(solutiondir=solutionsdir) + solutionfixer = SolutionFixer2(solutiondir=solutionsdir) # paths to data datafile = datadir.joinpath("single_station.csv") templatefile = datadir.joinpath("single_station_template.json") metadatfile = datadir.joinpath("single_station_metadata.csv") - def test_import_wide_data(self, overwrite_solution=False): - # 0. Get info of the current check - _method_name = sys._getframe().f_code.co_name # get the name of this method - - # 1. get_startpoint data - pass - - # 2. apply a metobs manipulation + @pytest.fixture(scope="class") + def import_single_station_dataset(self): + """Import single station dataset fixture.""" dataset = metobs_toolkit.Dataset() dataset.import_data_from_file( template_file=TestWideSingleStationData.templatefile, input_metadata_file=TestWideSingleStationData.metadatfile, input_data_file=TestWideSingleStationData.datafile, ) + return dataset - data_to_test = dataset + @pytest.mark.dependency() + def test_import_wide_data( + self, import_single_station_dataset, overwrite_solution=False + ): + # 0. Get info of the current check + _method_name = sys._getframe().f_code.co_name # get the name of this method + + # 1. get_startpoint data + dataset = copy.deepcopy(import_single_station_dataset) # 3. overwrite solution? if overwrite_solution: TestWideSingleStationData.solutionfixer.create_solution( - solutiondata=data_to_test, + solution=dataset, methodname=_method_name, **TestWideSingleStationData.solkwargs, ) @@ -500,15 +526,24 @@ def test_import_wide_data(self, overwrite_solution=False): ) # 5. Construct the equlity tests - assert_equality(data_to_test, solutionobj) # dataset comparison + assert_equality(dataset, solutionobj) # dataset comparison class TestStationAddMethods: - def test_station_add_sensordata_and_modeldata(self): - # Get a dataset and a station - dataset = TestDemoData.solutionfixer.get_solution( - **TestDemoData.solkwargs, methodname="test_import_demo_data" + @pytest.fixture(scope="class") + def import_dataset(self): + """Import demo dataset fixture.""" + dataset = metobs_toolkit.Dataset() + dataset.import_data_from_file( + template_file=metobs_toolkit.demo_template, + input_metadata_file=metobs_toolkit.demo_metadatafile, + input_data_file=metobs_toolkit.demo_datafile, ) + return dataset + + def test_station_add_sensordata_and_modeldata(self, import_dataset): + # Get a dataset and a station + dataset = copy.deepcopy(import_dataset) station = dataset.get_station("vlinder01") # --- Test add_to_sensordata --- @@ -535,7 +570,7 @@ def test_station_add_sensordata_and_modeldata(self): class TestParquetData: # to pass to the solutionfixer solkwargs = {"testfile": Path(__file__).name, "classname": "testparquetdata"} - solutionfixer = SolutionFixer(solutiondir=solutionsdir) + solutionfixer = SolutionFixer2(solutiondir=solutionsdir) def test_import_single_station(self): # 1. csv to parquet @@ -697,21 +732,68 @@ def test_import_with_timezone(self): if __name__ == "__main__": - # pytest.main([__file__]) - demo_tester = TestDemoData() - # demo_tester.test_version() - # demo_tester.test_import_demo_data(overwrite_solution=True) - # demo_tester.test_calling_methods_without_solution_on_dataset() - # demo_tester.test_calling_methods_without_solution_on_station() - # demo_tester.test_subset_by_stations(overwrite_solution=False) - # demo_tester.test_subset_by_stations_invalid() - # demo_tester.test_get_info(overwrite_solution=False) - # demo_tester.test_get_station(overwrite_solution=False) - # demo_tester.test_pickling_dataset() + print("To Overwrite the solutions, run: \n pytest test_importing.py -v") + OVERWRITE_SOLUTION = True + + # TestDemoData + demo_tester = TestDemoData() + demo_dataset = demo_tester.import_dataset.__wrapped__(demo_tester) + + demo_tester.test_version() + demo_tester.test_import_demo_data( + demo_dataset, overwrite_solution=OVERWRITE_SOLUTION + ) + demo_tester.test_calling_methods_without_solution_on_dataset(demo_dataset) + demo_tester.test_calling_methods_without_solution_on_station(demo_dataset) + demo_tester.test_subset_by_stations( + demo_dataset, overwrite_solution=OVERWRITE_SOLUTION + ) + # demo_tester.test_subset_by_stations_invalid(demo_dataset, caplog) # requires caplog fixture + demo_tester.test_get_info(demo_dataset, overwrite_solution=OVERWRITE_SOLUTION) + demo_tester.test_get_station(demo_dataset, overwrite_solution=OVERWRITE_SOLUTION) + demo_tester.test_pickling_dataset(demo_dataset) + demo_tester.test_dataset_to_parquet(demo_dataset) + demo_tester.test_dataset_to_csv(demo_dataset) + demo_tester.test_station_to_parquet(demo_dataset) + demo_tester.test_station_to_csv(demo_dataset) + demo_tester.test_importing_data_with_nans_for_single_station() + + # TestWideData wide_data_tester = TestWideData() - # wide_data_tester.test_import_wide_data(overwrite_solution=False) - # wide_data_tester.test_sync_wide_records(overwrite_solution=False) + wide_dataset = wide_data_tester.import_wide_dataset.__wrapped__(wide_data_tester) + wide_data_tester.test_import_wide_data( + wide_dataset, overwrite_solution=OVERWRITE_SOLUTION + ) + wide_data_tester.test_sync_wide_records( + wide_dataset, overwrite_solution=OVERWRITE_SOLUTION + ) + + # TestWideSingleStationData single_station_tester = TestWideSingleStationData() - # single_station_tester.test_import_wide_data(overwrite_solution=False) + single_station_dataset = ( + single_station_tester.import_single_station_dataset.__wrapped__( + single_station_tester + ) + ) + + single_station_tester.test_import_wide_data( + single_station_dataset, overwrite_solution=OVERWRITE_SOLUTION + ) + + # TestStationAddMethods + station_add_tester = TestStationAddMethods() + station_add_dataset = station_add_tester.import_dataset.__wrapped__( + station_add_tester + ) + + station_add_tester.test_station_add_sensordata_and_modeldata(station_add_dataset) + + # TestParquetData + parquet_tester = TestParquetData() + parquet_tester.test_import_single_station() + parquet_tester.test_import_demo_data() + parquet_tester.test_import_demo_metadata_only() + parquet_tester.test_import_wide_data() + parquet_tester.test_import_with_timezone() diff --git a/tests/test_logging.py b/tests/test_logging.py index 9c4404980..f25e88d3b 100644 --- a/tests/test_logging.py +++ b/tests/test_logging.py @@ -124,3 +124,33 @@ def test_clearlog_overwrites_file(self): content = logfile.read_text() assert "Existing content" not in content + + +if __name__ == "__main__": + print("Running logging tests directly...") + + # Cleanup handlers before tests + logger = logging.getLogger("") + logger.handlers.clear() + + # TestAddStreamHandler + stream_tester = TestAddStreamHandler() + stream_tester.test_add_stream_handler_default() + logger.handlers.clear() + stream_tester.test_add_stream_handler_custom_level() + logger.handlers.clear() + stream_tester.test_no_duplicate_stream_handler() + logger.handlers.clear() + + # TestAddFileHandler + file_tester = TestAddFileHandler() + file_tester.test_add_file_handler_creates_file() + logger.handlers.clear() + file_tester.test_add_file_handler_writes_logs() + logger.handlers.clear() + file_tester.test_add_file_handler_custom_level() + logger.handlers.clear() + file_tester.test_clearlog_overwrites_file() + logger.handlers.clear() + + print("All logging tests passed!") diff --git a/tests/test_modeldata.py b/tests/test_modeldata.py index 04ff510d9..7e853df1a 100644 --- a/tests/test_modeldata.py +++ b/tests/test_modeldata.py @@ -18,29 +18,8 @@ # solutionfolder solutionsdir = libfolder.joinpath("tests").joinpath("pkled_solutions") -from solutionclass import SolutionFixer, assert_equality, datadir - - -def create_dataset_with_modeldata(): - # 1. Create basic dataset with demo data - dataset = metobs_toolkit.Dataset() - dataset.import_data_from_file( - template_file=metobs_toolkit.demo_template, - input_metadata_file=metobs_toolkit.demo_metadatafile, - input_data_file=metobs_toolkit.demo_datafile, - ) - - # 2. Import ERA5 model data from CSV file - era5_manager = metobs_toolkit.default_GEE_datasets["ERA5-land"] - era5_file = datadir.joinpath( - "ERA5-land_timeseries_data_of_full_dataset_28_stations.csv" - ) - - # Import the model data - imported_df = dataset.import_gee_data_from_file( - filepath=era5_file, gee_dynamic_manager=era5_manager, force_update=True - ) - return dataset +from solutionclass import SolutionFixer2, assert_equality, datadir +import copy class TestModelDataImport: @@ -48,13 +27,39 @@ class TestModelDataImport: # to pass to the solutionfixer solkwargs = {"testfile": Path(__file__).name, "classname": "testmodeldataimport"} - solutionfixer = SolutionFixer(solutiondir=solutionsdir) + solutionfixer = SolutionFixer2(solutiondir=solutionsdir) + + @pytest.fixture(scope="class") + def dataset_with_modeldata(self): + """Create a dataset with ERA5 model data for the class.""" + # 1. Create basic dataset with demo data + dataset = metobs_toolkit.Dataset() + dataset.import_data_from_file( + template_file=metobs_toolkit.demo_template, + input_metadata_file=metobs_toolkit.demo_metadatafile, + input_data_file=metobs_toolkit.demo_datafile, + ) + + # 2. Import ERA5 model data from CSV file + era5_manager = metobs_toolkit.default_GEE_datasets["ERA5-land"] + era5_file = datadir.joinpath( + "ERA5-land_timeseries_data_of_full_dataset_28_stations.csv" + ) + + # Import the model data + imported_df = dataset.import_gee_data_from_file( + filepath=era5_file, gee_dynamic_manager=era5_manager, force_update=True + ) + assert ( + not imported_df.empty + ), "Imported model data DataFrame should not be empty" + return dataset - def test_import_era5_data_from_file(self): + def test_import_era5_data_from_file(self, dataset_with_modeldata): """Test importing ERA5 data from CSV file.""" # 1. Create basic dataset with demo data - dataset = create_dataset_with_modeldata() + dataset = copy.deepcopy(dataset_with_modeldata) # Verify model data was imported modeldatadf = dataset.modeldatadf @@ -89,10 +94,10 @@ def test_import_era5_data_from_file(self): "details" in sta_modeldf.columns ), "Model data DataFrame should have 'details' column" - def test_modeltimeseries_properties(self): + def test_modeltimeseries_properties(self, dataset_with_modeldata): """Test ModelTimeSeries data-related attributes and methods.""" # 1. Create basic dataset with demo data - dataset = create_dataset_with_modeldata() + dataset = copy.deepcopy(dataset_with_modeldata) station = dataset.get_station("vlinder04") # Test with temperature data obstype = "temp" @@ -186,7 +191,7 @@ class TestStationModelDataMethods: "testfile": Path(__file__).name, "classname": "teststationmodeldatamethods", } - solutionfixer = SolutionFixer(solutiondir=solutionsdir) + solutionfixer = SolutionFixer2(solutiondir=solutionsdir) def create_test_station_with_multiple_modeldata(self): """Create a station with multiple model data sources for testing.""" @@ -489,5 +494,29 @@ def test_modeldata_property_list_format(self): if __name__ == "__main__": - tester = TestStationModelDataMethods() - tester.test_add_to_modeldata_basic() + # test modeldata on dataset + tester = TestModelDataImport() + + dataset_era = tester.dataset_with_modeldata.__wrapped__(tester) + + tester.test_import_era5_data_from_file(dataset_era) + tester.test_modeltimeseries_properties(dataset_era) + + # test manager + manager_tester = TestModelDataManagers() + manager_tester.test_gee_dataset_managers_availability() + manager_tester.test_gee_manager_info_methods() + + # test station modeldata methods + station_tester = TestStationModelDataMethods() + station_tester.test_add_to_modeldata_basic() + station_tester.test_add_to_modeldata_force_update() + station_tester.test_add_to_modeldata_wrong_type() + station_tester.test_get_modeltimeseries_by_obstype_only() + station_tester.test_get_modeltimeseries_multiple_same_obstype() + station_tester.test_get_modeltimeseries_by_modelname() + station_tester.test_get_modeltimeseries_by_modelvariable() + station_tester.test_get_modeltimeseries_by_both_filters() + station_tester.test_get_modeltimeseries_no_match() + station_tester.test_get_modeltimeseries_no_modeldata() + station_tester.test_modeldata_property_list_format() diff --git a/tests/test_module_sanity.py b/tests/test_module_sanity.py new file mode 100644 index 000000000..7a915196d --- /dev/null +++ b/tests/test_module_sanity.py @@ -0,0 +1,68 @@ +"""Run sanity checks embedded in module ``__main__`` blocks. + +Any ``.py`` file under ``src/metobs_toolkit/`` that contains an +``if __name__ == "__main__":`` guard is automatically discovered and +executed as a subprocess. A non-zero exit code makes the test fail. + +This lets developers add quick self-tests inside a module while +keeping them part of the CI/CD pipeline. +""" + +from __future__ import annotations + +import subprocess +import sys +from pathlib import Path + +import pytest + +# --------------------------------------------------------------------------- # +# Discovery +# --------------------------------------------------------------------------- # + +_TOOLKIT_ROOT = Path(__file__).resolve().parent.parent / "src" / "metobs_toolkit" + + +def _discover_main_modules() -> list[Path]: + """Return every ``.py`` file under the toolkit that has a __main__ block.""" + modules: list[Path] = [] + for pyfile in sorted(_TOOLKIT_ROOT.rglob("*.py")): + try: + text = pyfile.read_text(encoding="utf-8") + except Exception: + continue + if 'if __name__ == "__main__"' in text or "if __name__ == '__main__'" in text: + modules.append(pyfile) + return modules + + +_DISCOVERED = _discover_main_modules() + + +# --------------------------------------------------------------------------- # +# Parametrised test +# --------------------------------------------------------------------------- # + + +@pytest.mark.parametrize( + "module_path", + _DISCOVERED, + ids=[str(p.relative_to(_TOOLKIT_ROOT)) for p in _DISCOVERED], +) +def test_module_main_block(module_path: Path) -> None: + """Execute a module's ``__main__`` block and assert it exits cleanly.""" + result = subprocess.run( + [sys.executable, str(module_path)], + capture_output=True, + text=True, + timeout=120, + ) + if result.returncode != 0: + # Show both stdout and stderr so failures are easy to diagnose + msg = ( + f"Module {module_path.relative_to(_TOOLKIT_ROOT)} exited with " + f"code {result.returncode}.\n" + f"--- stdout ---\n{result.stdout}\n" + f"--- stderr ---\n{result.stderr}" + ) + pytest.fail(msg) diff --git a/tests/test_obstypes.py b/tests/test_obstypes.py index 62c322fec..b8ad5ca9f 100644 --- a/tests/test_obstypes.py +++ b/tests/test_obstypes.py @@ -2,6 +2,7 @@ import pytest import sys +import copy from pathlib import Path # import metobs_toolkit @@ -15,22 +16,18 @@ # solutionfolder solutionsdir = libfolder.joinpath("tests").joinpath("pkled_solutions") -from solutionclass import SolutionFixer, assert_equality, datadir -import shutil +from solutionclass import SolutionFixer2, assert_equality, datadir + import pint class TestObstype: # to pass to the solutionfixer solkwargs = {"testfile": Path(__file__).name, "classname": "testobstypedata"} - solutionfixer = SolutionFixer(solutiondir=solutionsdir) - - def test_import_demo_data(self, overwrite_solution=False): - # 0. Get info of the current check - _method_name = sys._getframe().f_code.co_name # get the name of this method + solutionfixer = SolutionFixer2(solutiondir=solutionsdir) - # 1. get_startpoint data - pass + @pytest.fixture(scope="class") + def import_dataset(self): # 2. apply a metobs manipulation dataset = metobs_toolkit.Dataset() dataset.import_data_from_file( @@ -38,12 +35,19 @@ def test_import_demo_data(self, overwrite_solution=False): input_metadata_file=metobs_toolkit.demo_metadatafile, input_data_file=metobs_toolkit.demo_datafile, ) - data_to_test = dataset + return dataset + + @pytest.mark.dependency() + def test_import_demo_data(self, import_dataset, overwrite_solution=False): + # 0. Get info of the current check + _method_name = sys._getframe().f_code.co_name # get the name of this method + + dataset = copy.deepcopy(import_dataset) # 3. overwrite solution? if overwrite_solution: TestObstype.solutionfixer.create_solution( - solutiondata=data_to_test, + solution=dataset, methodname=_method_name, **TestObstype.solkwargs, ) @@ -54,13 +58,12 @@ def test_import_demo_data(self, overwrite_solution=False): ) # 5. Construct the equlity tests - assert_equality(data_to_test, solutionobj) # dataset comparison + assert_equality(dataset, solutionobj) # dataset comparison - def test_calling_methods_without_solution_on_obstypes(self): + @pytest.mark.dependency(depends=["TestObstype::test_import_demo_data"]) + def test_calling_methods_without_solution_on_obstypes(self, import_dataset): # 1. get_startpoint data - dataset = TestObstype.solutionfixer.get_solution( - **TestObstype.solkwargs, methodname="test_import_demo_data" - ) + dataset = copy.deepcopy(import_dataset) # run methods, and see if something breaks temp = dataset.obstypes["temp"] # testing specials @@ -85,11 +88,10 @@ def test_calling_methods_without_solution_on_obstypes(self): # Method calls on modelobstypes_vectorfields _ = era5_manager.modelobstypes["wind"].get_info(printout=False) - def test_units_io(self): + @pytest.mark.dependency(depends=["TestObstype::test_import_demo_data"]) + def test_units_io(self, import_dataset): # 1. get_startpoint data - dataset = TestObstype.solutionfixer.get_solution( - **TestObstype.solkwargs, methodname="test_import_demo_data" - ) + dataset = copy.deepcopy(import_dataset) # run methods, and see if something breaks temp = dataset.obstypes["temp"] @@ -105,7 +107,8 @@ def test_units_io(self): temp.description = None assert isinstance(temp.description, str) - def test_creating_new_obstypes(self): + @pytest.mark.dependency(depends=["TestObstype::test_import_demo_data"]) + def test_creating_new_obstypes(self, import_dataset): # 1. Create a new Obstype instance new_obstype = metobs_toolkit.obstypes.Obstype( name="new_temp", std_unit="°F", description="New temperature observation" @@ -134,9 +137,7 @@ def test_creating_new_obstypes(self): assert (in_farenheit.astype(int) == pd.Series([139, 67, 85])).all() # Test adding units to the dataset - dataset = TestObstype.solutionfixer.get_solution( - **TestObstype.solkwargs, methodname="test_import_demo_data" - ) + dataset = copy.deepcopy(import_dataset) dataset.add_new_observationtype(obstype=new_obstype) assert "new_temp" in dataset.obstypes.keys() @@ -222,6 +223,19 @@ def test_model_band_setter(self): if __name__ == "__main__": # pytest.main([__file__]) + OVERWRITE_SOLUTION = False testobstype = TestObstype() - testobstype.test_import_demo_data(overwrite_solution=True) + + demodata = testobstype.import_dataset.__wrapped__(testobstype) + testobstype.test_import_demo_data( + overwrite_solution=OVERWRITE_SOLUTION, import_dataset=demodata + ) + testobstype.test_calling_methods_without_solution_on_obstypes( + import_dataset=demodata + ) + testobstype.test_units_io(import_dataset=demodata) + testobstype.test_creating_new_obstypes(import_dataset=demodata) + testobstype.test_calling_methods_on_modelobstypes() + testobstype.test_model_unit_setter() + testobstype.test_model_band_setter() diff --git a/tests/test_plotting.py b/tests/test_plotting.py index 0a34de422..1a03d30cf 100644 --- a/tests/test_plotting.py +++ b/tests/test_plotting.py @@ -16,7 +16,7 @@ # solutionfolder solutionsdir = libfolder.joinpath("tests").joinpath("pkled_solutions") -from solutionclass import SolutionFixer, assert_equality, datadir +from solutionclass import SolutionFixer2, assert_equality, datadir import shutil @@ -39,16 +39,10 @@ def cleanup_figures(): class TestDemoDataset: # to pass to the solutionfixer solkwargs = {"testfile": Path(__file__).name, "classname": "testdemodata"} - solutionfixer = SolutionFixer(solutiondir=solutionsdir) + solutionfixer = SolutionFixer2(solutiondir=solutionsdir) - def test_import_data(self, overwrite_solution=False): - # 0. Get info of the current check - _method_name = sys._getframe().f_code.co_name # get the name of this method - - # 1. get_startpoint data - pass - - # 2. apply a metobs manipulation + @pytest.fixture(scope="class") + def import_dataset(self): dataset = metobs_toolkit.Dataset() dataset.import_data_from_file( template_file=metobs_toolkit.demo_template, @@ -57,11 +51,48 @@ def test_import_data(self, overwrite_solution=False): ) # To hourly !! dataset.resample(target_freq="1h") + return dataset + + @pytest.fixture(autouse=True) + def import_dataset_with_era5(self): + dataset = metobs_toolkit.Dataset() + dataset.import_data_from_file( + template_file=metobs_toolkit.demo_template, + input_data_file=metobs_toolkit.demo_datafile, + input_metadata_file=metobs_toolkit.demo_metadatafile, + ) + dataset.resample(target_freq="15min") + + era5_model = metobs_toolkit.default_GEE_datasets["ERA5-land"] + + startdt_utc = pd.Timestamp("2022-08-31 18:32:25") + enddt_utc = pd.Timestamp("2022-09-01 12:16:00") + era5_data = dataset.get_gee_timeseries_data( + gee_dynamic_manager=era5_model, + startdt_utc=startdt_utc, + enddt_utc=enddt_utc, + obstypes=["temp"], + get_all_bands=False, + drive_filename=None, + drive_folder="gee_timeseries_data", + force_direct_transfer=True, + force_to_drive=False, + ) + assert era5_data.shape == (532, 1) + return dataset + + @pytest.mark.dependency() + def test_import_data(self, import_dataset, overwrite_solution=False): + # 0. Get info of the current check + _method_name = sys._getframe().f_code.co_name # get the name of this method + + # 1. get_startpoint data + dataset = copy.deepcopy(import_dataset) # 3. overwrite solution? if overwrite_solution: TestDemoDataset.solutionfixer.create_solution( - solutiondata=dataset, + solution=dataset, methodname=_method_name, **TestDemoDataset.solkwargs, ) @@ -74,138 +105,158 @@ def test_import_data(self, overwrite_solution=False): # 5. Construct the equlity tests assert_equality(dataset, solutionobj) # dataset comparison - @pytest.mark.mpl_image_compare - def test_dataset_timeseries_plotting_by_label(self): - # 1. get_startpoint data - dataset = TestDemoDataset.solutionfixer.get_solution( - **TestDemoDataset.solkwargs, methodname="test_import_data" + @pytest.mark.dependency() + def test_import_data_with_era5( + self, import_dataset_with_era5, overwrite_solution=False + ): + # 0. Get info of the current check + _method_name = sys._getframe().f_code.co_name # get the name of this method + + # 1. get_startpoint data + dataset = copy.deepcopy(import_dataset_with_era5) + # 3. overwrite solution? + if overwrite_solution: + TestDemoDataset.solutionfixer.create_solution( + solution=dataset, + methodname=_method_name, + **TestDemoDataset.solkwargs, + ) + + # 4. Get solution + solutionobj = TestDemoDataset.solutionfixer.get_solution( + methodname=_method_name, **TestDemoDataset.solkwargs ) + # 5. Construct the equlity tests + assert_equality(dataset, solutionobj) # dataset comparison + + @pytest.mark.dependency(depends=["TestDemoDataset::test_import_data"]) + @pytest.mark.mpl_image_compare + def test_dataset_timeseries_plotting_by_label(self, import_dataset): + # 1. get_startpoint data + dataset = copy.deepcopy(import_dataset) # 2. apply a metobs manipulation - ax = dataset.make_plot(colorby="label", figkwargs={"figsize": (10, 5)}) - fig = ax.get_figure() + fig, ax = plt.subplots(figsize=(15, 5)) + ax = dataset.make_plot(colorby="label", figkwargs={"figsize": (10, 5)}, ax=ax) + fig.set_size_inches(15, 5) + fig.tight_layout() return fig + @pytest.mark.dependency(depends=["TestDemoDataset::test_import_data"]) @pytest.mark.mpl_image_compare - def test_dataset_timeseries_plotting_by_station(self): + def test_dataset_timeseries_plotting_by_station(self, import_dataset): # 1. get_startpoint data - dataset = TestDemoDataset.solutionfixer.get_solution( - **TestDemoDataset.solkwargs, methodname="test_import_data" - ) + dataset = copy.deepcopy(import_dataset) # 2. apply a metobs manipulation - ax = dataset.make_plot(colorby="station", figkwargs={"figsize": (10, 5)}) - fig = ax.get_figure() + fig, ax = plt.subplots(figsize=(15, 5)) + ax = dataset.make_plot(colorby="station", figkwargs={"figsize": (10, 5)}, ax=ax) + fig.set_size_inches(15, 5) + fig.tight_layout() return fig + @pytest.mark.dependency(depends=["TestDemoDataset::test_import_data"]) @pytest.mark.mpl_image_compare - def test_dataset_test_show_outliers_labelby_station(self): + def test_dataset_test_show_outliers_labelby_station(self, import_dataset): # 1. get_startpoint data - dataset = TestDemoDataset.solutionfixer.get_solution( - **TestDemoDataset.solkwargs, methodname="test_import_data" - ) - + dataset = copy.deepcopy(import_dataset) # 2. apply a metobs manipulation dataset.repetitions_check(max_N_repetitions=8) - ax = dataset.make_plot(colorby="station", show_outliers=False) - fig = ax.get_figure() + fig, ax = plt.subplots(figsize=(15, 5)) + ax = dataset.make_plot(colorby="station", show_outliers=False, ax=ax) + fig.set_size_inches(15, 5) + fig.tight_layout() return fig + @pytest.mark.dependency(depends=["TestDemoDataset::test_import_data"]) @pytest.mark.mpl_image_compare - def test_dataset_test_show_outliers_labelby_labels(self): + def test_dataset_test_show_outliers_labelby_labels(self, import_dataset): # 1. get_startpoint data - dataset = TestDemoDataset.solutionfixer.get_solution( - **TestDemoDataset.solkwargs, methodname="test_import_data" - ) + dataset = copy.deepcopy(import_dataset) # 2. apply a metobs manipulation dataset.repetitions_check(max_N_repetitions=8) - ax = dataset.make_plot(colorby="label", show_outliers=False) - fig = ax.get_figure() + fig, ax = plt.subplots(figsize=(15, 5)) + ax = dataset.make_plot(colorby="label", show_outliers=False, ax=ax) + fig.set_size_inches(15, 5) + fig.tight_layout() return fig + @pytest.mark.dependency(depends=["TestDemoDataset::test_import_data"]) @pytest.mark.mpl_image_compare - def test_station_timeseries_plotting_existing_ax(self): + def test_station_timeseries_plotting_existing_ax(self, import_dataset): # 1. get_startpoint data - dataset = TestDemoDataset.solutionfixer.get_solution( - **TestDemoDataset.solkwargs, methodname="test_import_data" - ) - + dataset = copy.deepcopy(import_dataset) sta = dataset.get_station("vlinder02") fig, ax = plt.subplots(figsize=(8, 4)) # 2. apply a metobs manipulation ax = sta.make_plot(colorby="label", show_outliers=False, ax=ax) fig = ax.get_figure() + fig.set_size_inches(15, 5) + fig.tight_layout() return fig + @pytest.mark.dependency(depends=["TestDemoDataset::test_import_data_with_era5"]) @pytest.mark.mpl_image_compare - def test_station_timeseries_with_modeldata(self): + def test_station_timeseries_with_modeldata(self, import_dataset_with_era5): # 1. get_startpoint data - dataset_with_era = TestDemoDataset.solutionfixer.get_solution( - testfile="test_gee", # OTHER TEST FILE! - classname="TestDemoDataset", - methodname="test_ERA5_extraction", - ) + dataset_with_era = copy.deepcopy(import_dataset_with_era5) station = dataset_with_era.get_station("vlinder05") - ax = station.make_plot(show_modeldata=True) - fig = ax.get_figure() + fig, ax = plt.subplots(figsize=(15, 5)) + ax = station.make_plot(show_modeldata=True, ax=ax) + fig.set_size_inches(15, 5) + fig.tight_layout() return fig + @pytest.mark.dependency(depends=["TestDemoDataset::test_import_data_with_era5"]) @pytest.mark.mpl_image_compare - def test_station_modeldata_timeseries(self): + def test_station_modeldata_timeseries(self, import_dataset_with_era5): # 1. get_startpoint data - dataset_with_era = TestDemoDataset.solutionfixer.get_solution( - testfile="test_gee", # OTHER TEST FILE! - classname="TestDemoDataset", - methodname="test_ERA5_extraction", - ) - + dataset_with_era = copy.deepcopy(import_dataset_with_era5) station = dataset_with_era.get_station("vlinder05") - ax = station.make_plot_of_modeldata(obstype="temp") - fig = ax.get_figure() + fig, ax = plt.subplots(figsize=(15, 5)) + ax = station.make_plot_of_modeldata(obstype="temp", ax=ax) + fig.set_size_inches(15, 5) + fig.tight_layout() return fig + @pytest.mark.dependency(depends=["TestDemoDataset::test_import_data_with_era5"]) @pytest.mark.mpl_image_compare - def test_station_plot_of_modeldata_with_modelname(self): + def test_station_plot_of_modeldata_with_modelname(self, import_dataset_with_era5): """Test station.make_plot_of_modeldata with modelname argument.""" - dataset_with_era = TestDemoDataset.solutionfixer.get_solution( - testfile="test_gee", # OTHER TEST FILE! - classname="TestDemoDataset", - methodname="test_ERA5_extraction", - ) + dataset_with_era = copy.deepcopy(import_dataset_with_era5) station = dataset_with_era.get_station("vlinder05") - ax = station.make_plot_of_modeldata(obstype="temp", modelname="ERA5-land") - fig = ax.get_figure() + fig, ax = plt.subplots(figsize=(15, 5)) + ax = station.make_plot_of_modeldata(obstype="temp", modelname="ERA5-land", ax=ax) + fig.set_size_inches(15, 5) + fig.tight_layout() return fig + @pytest.mark.dependency(depends=["TestDemoDataset::test_import_data_with_era5"]) @pytest.mark.mpl_image_compare - def test_dataset_plot_of_modeldata_with_modelname(self): + def test_dataset_plot_of_modeldata_with_modelname(self, import_dataset_with_era5): """Test Dataset.make_plot_of_modeldata with modelname argument.""" - dataset_with_era = TestDemoDataset.solutionfixer.get_solution( - testfile="test_gee", # OTHER TEST FILE! - classname="TestDemoDataset", - methodname="test_ERA5_extraction", - ) - + dataset_with_era = copy.deepcopy(import_dataset_with_era5) + fig, ax = plt.subplots(figsize=(15, 5)) ax = dataset_with_era.make_plot_of_modeldata( - obstype="temp", modelname="ERA5-land" + obstype="temp", modelname="ERA5-land", + ax=ax ) - fig = ax.get_figure() + fig.set_size_inches(15, 5) + fig.tight_layout() return fig + @pytest.mark.dependency(depends=["TestDemoDataset::test_import_data_with_era5"]) @pytest.mark.mpl_image_compare - def test_station_plot_humidity_with_temp_modeldata(self): + def test_station_plot_humidity_with_temp_modeldata(self, import_dataset_with_era5): """Test station.make_plot with humidity obstype and temp modeldata.""" - dataset_with_era = TestDemoDataset.solutionfixer.get_solution( - testfile="test_gee", # OTHER TEST FILE! - classname="TestDemoDataset", - methodname="test_ERA5_extraction", - ) + dataset_with_era = copy.deepcopy(import_dataset_with_era5) station = dataset_with_era.get_station("vlinder05") + fig, ax = plt.subplots(figsize=(15, 5)) ax = station.make_plot( obstype="humidity", modelobstype="temp", @@ -214,20 +265,20 @@ def test_station_plot_humidity_with_temp_modeldata(self): "modelname": "ERA5-land", "modelvariable": "temperature_2m", }, + ax=ax, ) - fig = ax.get_figure() + fig.set_size_inches(15, 5) + fig.tight_layout() return fig + @pytest.mark.dependency(depends=["TestDemoDataset::test_import_data_with_era5"]) @pytest.mark.mpl_image_compare - def test_station_plot_temp_with_modeldata_kwargs(self): + def test_station_plot_temp_with_modeldata_kwargs(self, import_dataset_with_era5): """Test station.make_plot with temp obstype and modeldata kwargs.""" - dataset_with_era = TestDemoDataset.solutionfixer.get_solution( - testfile="test_gee", # OTHER TEST FILE! - classname="TestDemoDataset", - methodname="test_ERA5_extraction", - ) + dataset_with_era = copy.deepcopy(import_dataset_with_era5) station = dataset_with_era.get_station("vlinder05") + fig, ax = plt.subplots(figsize=(15, 5)) ax = station.make_plot( obstype="temp", show_modeldata=True, @@ -235,19 +286,18 @@ def test_station_plot_temp_with_modeldata_kwargs(self): "modelname": "ERA5-land", "modelvariable": "temperature_2m", }, + ax=ax, ) - fig = ax.get_figure() + fig.set_size_inches(15, 5) + fig.tight_layout() return fig + @pytest.mark.dependency(depends=["TestDemoDataset::test_import_data_with_era5"]) @pytest.mark.mpl_image_compare - def test_dataset_plot_humidity_with_modelvariable(self): + def test_dataset_plot_humidity_with_modelvariable(self, import_dataset_with_era5): """Test dataset.make_plot with humidity obstype and modelvariable.""" - dataset_with_era = TestDemoDataset.solutionfixer.get_solution( - testfile="test_gee", # OTHER TEST FILE! - classname="TestDemoDataset", - methodname="test_ERA5_extraction", - ) - + dataset_with_era = copy.deepcopy(import_dataset_with_era5) + fig, ax = plt.subplots(figsize=(15, 5)) ax = dataset_with_era.make_plot( obstype="humidity", show_modeldata=True, @@ -255,75 +305,73 @@ def test_dataset_plot_humidity_with_modelvariable(self): modeldata_kwargs={ "modelvariable": "temperature_2m", }, + ax=ax, ) - fig = ax.get_figure() + fig.set_size_inches(15, 5) + fig.tight_layout() return fig + @pytest.mark.dependency(depends=["TestDemoDataset::test_import_data_with_era5"]) @pytest.mark.mpl_image_compare - def test_modeldatatimeseries_timeseries(self): + def test_modeldatatimeseries_timeseries(self, import_dataset_with_era5): # 1. get_startpoint data - dataset_with_era = TestDemoDataset.solutionfixer.get_solution( - testfile="test_gee", # OTHER TEST FILE! - classname="TestDemoDataset", - methodname="test_ERA5_extraction", - ) + dataset_with_era = copy.deepcopy(import_dataset_with_era5) modelseries = dataset_with_era.get_station("vlinder05").get_modeltimeseries( "temp" ) - ax = modelseries.make_plot() - fig = ax.get_figure() + fig, ax = plt.subplots(figsize=(15, 5)) + ax = modelseries.make_plot(ax=ax) + fig.set_size_inches(15, 5) + fig.tight_layout() return fig + @pytest.mark.dependency(depends=["TestDemoDataset::test_import_data_with_era5"]) @pytest.mark.mpl_image_compare - def test_dataset_modeldata_timeseries_plot(self): - dataset_with_era = TestDemoDataset.solutionfixer.get_solution( - testfile="test_gee", # OTHER TEST FILE! - classname="TestDemoDataset", - methodname="test_ERA5_extraction", - ) - - ax = dataset_with_era.make_plot_of_modeldata() - fig = ax.get_figure() + def test_dataset_modeldata_timeseries_plot(self, import_dataset_with_era5): + dataset_with_era = copy.deepcopy(import_dataset_with_era5) + fig, ax = plt.subplots(figsize=(10, 5)) + ax = dataset_with_era.make_plot_of_modeldata(ax=ax) + fig.set_size_inches(15, 5) + fig.tight_layout() return fig + @pytest.mark.dependency(depends=["TestDemoDataset::test_import_data_with_era5"]) @pytest.mark.mpl_image_compare - def test_dataset_color_by_station_and_modeldata_timeseries_plot(self): - dataset_with_era = TestDemoDataset.solutionfixer.get_solution( - testfile="test_gee", # OTHER TEST FILE! - classname="TestDemoDataset", - methodname="test_ERA5_extraction", - ) - - ax = dataset_with_era.make_plot(colorby="station", show_modeldata=True) - fig = ax.get_figure() + def test_dataset_color_by_station_and_modeldata_timeseries_plot( + self, import_dataset_with_era5 + ): + + dataset_with_era = copy.deepcopy(import_dataset_with_era5) + fig, ax = plt.subplots(figsize=(15, 5)) + ax = dataset_with_era.make_plot(colorby="station", show_modeldata=True, ax=ax) + fig.set_size_inches(15, 5) + fig.tight_layout() return fig + @pytest.mark.dependency(depends=["TestDemoDataset::test_import_data_with_era5"]) @pytest.mark.mpl_image_compare - def test_dataset_color_by_label_and_modeldata_timeseries_plot(self): - dataset_with_era = TestDemoDataset.solutionfixer.get_solution( - testfile="test_gee", # OTHER TEST FILE! - classname="TestDemoDataset", - methodname="test_ERA5_extraction", - ) - - ax = dataset_with_era.make_plot(colorby="label", show_modeldata=True) - fig = ax.get_figure() + def test_dataset_color_by_label_and_modeldata_timeseries_plot( + self, import_dataset_with_era5 + ): + fig, ax = plt.subplots(figsize=(15, 5)) + dataset_with_era = copy.deepcopy(import_dataset_with_era5) + ax = dataset_with_era.make_plot(colorby="label", show_modeldata=True, ax=ax) + fig.set_size_inches(15, 5) + fig.tight_layout() return fig + @pytest.mark.dependency(depends=["TestDemoDataset::test_import_data_with_era5"]) @pytest.mark.mpl_image_compare - def test_sensordata_pd_plot(self): + def test_sensordata_pd_plot(self, import_dataset_with_era5): """Test SensorData.pd_plot() method with specific pandas plot kwargs.""" - dataset_with_era = TestDemoDataset.solutionfixer.get_solution( - testfile="test_gee", # OTHER TEST FILE! - classname="TestDemoDataset", - methodname="test_ERA5_extraction", - ) + dataset_with_era = copy.deepcopy(import_dataset_with_era5) station = dataset_with_era.get_station("vlinder01") sensordata = station.get_sensor("temp") # Test with specific pandas plot kwargs + fig, ax = plt.subplots(figsize=(15, 5)) ax = sensordata.pd_plot( show_labels=["ok"], color="red", @@ -331,25 +379,25 @@ def test_sensordata_pd_plot(self): linestyle="-.", alpha=0.8, figsize=(10, 6), + ax=ax ) ax.legend() - fig = plt.gcf() + fig.set_size_inches(15, 5) + fig.tight_layout() return fig + @pytest.mark.dependency(depends=["TestDemoDataset::test_import_data_with_era5"]) @pytest.mark.mpl_image_compare - def test_sensordata_pd_plot_with_filters(self): + def test_sensordata_pd_plot_with_filters(self, import_dataset_with_era5): """Test SensorData.pd_plot() method with specific pandas plot kwargs.""" - dataset_with_era = TestDemoDataset.solutionfixer.get_solution( - testfile="test_gee", # OTHER TEST FILE! - classname="TestDemoDataset", - methodname="test_ERA5_extraction", - ) + dataset_with_era = copy.deepcopy(import_dataset_with_era5) station = dataset_with_era.get_station("vlinder01") station.repetitions_check() sensordata = station.get_sensor("temp") # Test with specific pandas plot kwargs + fig, ax = plt.subplots(figsize=(15, 5)) ax = sensordata.pd_plot( show_labels=["ok"], # outliers are not present color="red", @@ -357,24 +405,24 @@ def test_sensordata_pd_plot_with_filters(self): linestyle="-.", alpha=0.8, figsize=(10, 6), + ax=ax ) ax.legend() - fig = plt.gcf() + fig.set_size_inches(15, 5) + fig.tight_layout() return fig + @pytest.mark.dependency(depends=["TestDemoDataset::test_import_data_with_era5"]) @pytest.mark.mpl_image_compare - def test_modeltimeseries_pd_plot(self): + def test_modeltimeseries_pd_plot(self, import_dataset_with_era5): """Test ModelTimeSeries.pd_plot() method with specific pandas plot kwargs.""" - dataset_with_era = TestDemoDataset.solutionfixer.get_solution( - testfile="test_gee", # OTHER TEST FILE! - classname="TestDemoDataset", - methodname="test_ERA5_extraction", - ) + dataset_with_era = copy.deepcopy(import_dataset_with_era5) station = dataset_with_era.get_station("vlinder05") modeltimeseries = station.get_modeltimeseries("temp") # Test with specific pandas plot kwargs + fig, ax = plt.subplots(figsize=(15, 5)) ax = modeltimeseries.pd_plot( color="blue", linewidth=3, @@ -383,116 +431,56 @@ def test_modeltimeseries_pd_plot(self): markersize=4, alpha=0.7, figsize=(12, 8), + ax=ax ) ax.legend() - fig = plt.gcf() - return fig - - -# ------------------------------------------ -# test plotting timeseries with GF labels -# ------------------------------------------ - - -class TestDataWithGaps: - # to pass to the solutionfixer - solkwargs = {"testfile": Path(__file__).name, "classname": "testdatawithgaps"} - solutionfixer = SolutionFixer(solutiondir=solutionsdir) - - @pytest.mark.mpl_image_compare - def test_dataset_test_show_gaps_labelby_labels(self): - # 1. get_startpoint data - dataset = TestDataWithGaps.solutionfixer.get_solution( - testfile="test_gf", # OTHER TEST FILE! - classname="TestDataWithGaps", - methodname="test_weighted_diurnal_debias_modeldata_gapfill_A", - ) - - # 2. apply a metobs manipulation - ax = dataset.make_plot(colorby="label", show_gaps=False) - fig = ax.get_figure() - return fig - - @pytest.mark.mpl_image_compare - def test_interpolated_timeseries_plot(self): - dataset_with_gf = TestDataWithGaps.solutionfixer.get_solution( - testfile="test_gf", # OTHER TEST FILE! - classname="TestDataWithGaps", - methodname="test_interpolation_on_dataset_A", - ) - ax = dataset_with_gf.make_plot(colorby="label") - fig = ax.get_figure() - return fig - - @pytest.mark.mpl_image_compare - def test_raw_modeldata_gf_timeseries_plot(self): - dataset_with_gf = TestDataWithGaps.solutionfixer.get_solution( - testfile="test_gf", # OTHER TEST FILE! - classname="TestDataWithGaps", - methodname="test_raw_modeldata_gapfill_A", - ) - ax = dataset_with_gf.make_plot(colorby="label") - fig = ax.get_figure() - return fig - - @pytest.mark.mpl_image_compare - def test_debias_modeldata_gf_timeseries_plot(self): - dataset_with_gf = TestDataWithGaps.solutionfixer.get_solution( - testfile="test_gf", # OTHER TEST FILE! - classname="TestDataWithGaps", - methodname="test_debias_modeldata_gapfill", - ) - ax = dataset_with_gf.make_plot(colorby="label") - fig = ax.get_figure() - return fig - - @pytest.mark.mpl_image_compare - def test_diurnal_debias_modeldata_gf_timeseries_plot(self): - dataset_with_gf = TestDataWithGaps.solutionfixer.get_solution( - testfile="test_gf", # OTHER TEST FILE! - classname="TestDataWithGaps", - methodname="test_diurnal_debias_modeldata_gapfill_A", - ) - ax = dataset_with_gf.make_plot(colorby="label") - fig = ax.get_figure() - return fig - - @pytest.mark.mpl_image_compare - def test_weighted_diurnal_debias_modeldata_gf_timeseries_plot(self): - dataset_with_gf = TestDataWithGaps.solutionfixer.get_solution( - testfile="test_gf", # OTHER TEST FILE! - classname="TestDataWithGaps", - methodname="test_weighted_diurnal_debias_modeldata_gapfill_A", - ) - ax = dataset_with_gf.make_plot(colorby="label") - fig = ax.get_figure() + fig.set_size_inches(15, 5) + fig.tight_layout() return fig if __name__ == "__main__": print( - "To Overwrite the solutions, run: \n pytest test_plotting.py --mpl --mpl-generate-path=baseline" + "To Overwrite the solutions, run: \n pytest test_plotting.py --mpl --mpl-generate-path=baseline" ) print( - "To checkout the differences, run: \n pytest test_plotting.py --mpl --mpl-generate-summary=html " + "To checkout the differences, run: \n pytest test_plotting.py --mpl --mpl-generate-summary=html" + ) + + OVERWRITE_SOLUTION = False + + tester = TestDemoDataset() + + # Prepare fixtures + import_dataset = tester.import_dataset.__wrapped__(tester) + import_dataset_with_era5 = tester.import_dataset_with_era5.__wrapped__(tester) + + # Run tests with solutions + tester.test_import_data(import_dataset, overwrite_solution=OVERWRITE_SOLUTION) + tester.test_import_data_with_era5( + import_dataset_with_era5, overwrite_solution=OVERWRITE_SOLUTION ) - test = TestDemoDataset() - # test.test_import_data(overwrite_solution=True) - # test.test_import_data(overwrite_solution=True) - # test.test_dataset_timeseries_plotting_by_label() - # test.test_dataset_timeseries_plotting_by_station() - # test.test_station_timeseries_plotting_existing_ax() - # test.test_station_timeseries_with_modeldata() - # test.test_station_modeldata_timeseries() - # test.test_dataset_modeldata_timeseries_plot() - # test.test_dataset_color_by_station_and_modeldata_timeseries_plot() - # test.test_dataset_color_by_label_and_modeldata_timeseries_plot() - - # test_gaps = TestDataWithGaps() - # test_gaps.test_interpolated_timeseries_plot() - # test_gaps.test_raw_modeldata_gf_timeseries_plot() - # test_gaps.test_debias_modeldata_gf_timeseries_plot() - # test_gaps.test_diurnal_debias_modeldata_gf_timeseries_plot() - # test_gaps.test_weighted_diurnal_debias_modeldata_gf_timeseries_plot() + # # Run plotting tests (using import_dataset) + # tester.test_dataset_timeseries_plotting_by_label(import_dataset) + # tester.test_dataset_timeseries_plotting_by_station(import_dataset) + # tester.test_dataset_test_show_outliers_labelby_station(import_dataset) + # tester.test_dataset_test_show_outliers_labelby_labels(import_dataset) + # tester.test_station_timeseries_plotting_existing_ax(import_dataset) + + # # Run plotting tests (using import_dataset_with_era5) + # tester.test_station_timeseries_with_modeldata(import_dataset_with_era5) + # tester.test_station_modeldata_timeseries(import_dataset_with_era5) + # tester.test_station_plot_of_modeldata_with_modelname(import_dataset_with_era5) + # tester.test_dataset_plot_of_modeldata_with_modelname(import_dataset_with_era5) + # tester.test_station_plot_humidity_with_temp_modeldata(import_dataset_with_era5) + # tester.test_station_plot_temp_with_modeldata_kwargs(import_dataset_with_era5) + # tester.test_dataset_plot_humidity_with_modelvariable(import_dataset_with_era5) + # tester.test_modeldatatimeseries_timeseries(import_dataset_with_era5) + # tester.test_dataset_modeldata_timeseries_plot(import_dataset_with_era5) + # tester.test_dataset_color_by_station_and_modeldata_timeseries_plot(import_dataset_with_era5) + # tester.test_dataset_color_by_label_and_modeldata_timeseries_plot(import_dataset_with_era5) + # tester.test_sensordata_pd_plot(import_dataset_with_era5) + # tester.test_sensordata_pd_plot_with_filters(import_dataset_with_era5) + # tester.test_modeltimeseries_pd_plot(import_dataset_with_era5) diff --git a/tests/test_qc.py b/tests/test_qc.py index b9d9a7a1c..0e9fd9202 100644 --- a/tests/test_qc.py +++ b/tests/test_qc.py @@ -3,6 +3,7 @@ import copy +import numpy as np # import metobs_toolkit import pandas as pd @@ -15,7 +16,7 @@ # solutionfolder solutionsdir = libfolder.joinpath("tests").joinpath("pkled_solutions") -from solutionclass import SolutionFixer, assert_equality, datadir +from solutionclass import SolutionFixer2, assert_equality, datadir import pytest @@ -23,54 +24,26 @@ class TestBreakingDataset: # to pass to the solutionfixer solkwargs = {"testfile": Path(__file__).name, "classname": "testbreakingdata"} - solutionfixer = SolutionFixer(solutiondir=solutionsdir) + solutionfixer = SolutionFixer2(solutiondir=solutionsdir) # paths to data datafile = datadir.joinpath("testdata_breaking.csv") templatefile = datadir.joinpath("template_breaking.json") - def test_import_data(self, overwrite_solution=False): - # 0. Get info of the current check - _method_name = sys._getframe().f_code.co_name # get the name of this method - - # 1. get_startpoint data - pass - - # 2. apply a metobs manipulation + @pytest.fixture(scope="class") + def import_dataset(self): dataset = metobs_toolkit.Dataset() dataset.import_data_from_file( template_file=TestBreakingDataset.templatefile, # input_metadata_file=metobs_toolkit.demo_metadatafile, input_data_file=TestBreakingDataset.datafile, ) + return dataset - # 3. overwrite solution? - if overwrite_solution: - TestBreakingDataset.solutionfixer.create_solution( - solutiondata=dataset, - methodname=_method_name, - **TestBreakingDataset.solkwargs, - ) - - # 4. Get solution - solutionobj = TestBreakingDataset.solutionfixer.get_solution( - methodname=_method_name, **TestBreakingDataset.solkwargs - ) - - # 5. Construct the equlity tests - assert_equality(dataset, solutionobj) # dataset comparison - - def test_apply_qc(self, overwrite_solution=False): - # 0. Get info of the current check - _method_name = sys._getframe().f_code.co_name - - # 1. get_startpoint data - dataset = TestBreakingDataset.solutionfixer.get_solution( - **TestBreakingDataset.solkwargs, methodname="test_import_data" - ) + @pytest.fixture(scope="class") + def regular_qc_on_dataset(self, import_dataset): + dataset = copy.deepcopy(import_dataset) - # 2. apply a metobs manipulation - # apply QC dataset.gross_value_check( obstype="temp", lower_threshold=-15.0, @@ -108,22 +81,14 @@ def test_apply_qc(self, overwrite_solution=False): # use_mp=True, use_mp=False, ) + return dataset - # 3. overwrite solution? - if overwrite_solution: - TestBreakingDataset.solutionfixer.create_solution( - solutiondata=dataset, - **TestBreakingDataset.solkwargs, - methodname=_method_name, - ) - # 4. Get solution - solutionobj = TestBreakingDataset.solutionfixer.get_solution( - **TestBreakingDataset.solkwargs, methodname=_method_name - ) + def test_qc_labels(self, regular_qc_on_dataset): + dataset = copy.deepcopy(regular_qc_on_dataset) # reading manual labels man_df = pd.read_csv(TestBreakingDataset.datafile) - # create datetime coumn + # create datetime column man_df["datetime"] = man_df["date"] + " " + man_df["time"] man_df["datetime"] = pd.to_datetime(man_df["datetime"]) man_df["datetime"] = man_df["datetime"].dt.tz_localize("Europe/Berlin") @@ -149,261 +114,255 @@ def test_apply_qc(self, overwrite_solution=False): diff = compare.loc[compare["correct_labeled"] == False, :] assert diff.empty, f"Incorrect labels compared to the manual labels: \n {diff}" - # 5. Construct the equlity tests on dataset level + def test_qc_with_solution(self, regular_qc_on_dataset, overwrite_solution=False): + method_name = "test_qc_with_solution" - assert_equality(dataset, solutionobj) # dataset comparison - - def test_qc_statistics(self, overwrite_solution=False): - # 0. Get info of the current check - _method_name = sys._getframe().f_code.co_name - # 1. get_startpoint data - dataset = TestBreakingDataset.solutionfixer.get_solution( - **TestBreakingDataset.solkwargs, methodname="test_apply_qc" - ) + dataset = copy.deepcopy(regular_qc_on_dataset) - # 2. apply a metobs manipulation - # apply QC - statsdf = dataset.get_qc_stats(obstype="temp", make_plot=False) - # 3. overwrite solution? if overwrite_solution: TestBreakingDataset.solutionfixer.create_solution( - solutiondata=statsdf, + solution=dataset, + methodname=method_name, **TestBreakingDataset.solkwargs, - methodname=_method_name, ) - # 4. Get solution + solutionobj = TestBreakingDataset.solutionfixer.get_solution( - **TestBreakingDataset.solkwargs, methodname=_method_name + **TestBreakingDataset.solkwargs, methodname=method_name ) - # 5. Construct the equlity tests on dataset level - assert_equality(statsdf, solutionobj) + assert_equality(dataset, solutionobj, exclude_columns=['details'] ) # dataset comparison - # Test plotting - _statsdf = dataset.get_qc_stats(obstype="temp", make_plot=True) + def test_qc_stats_check(self, regular_qc_on_dataset, overwrite_solution=False): + method_name = "test_qc_stats_check" + dataset = copy.deepcopy(regular_qc_on_dataset) - @pytest.mark.mpl_image_compare - def test_make_plot_by_label_with_outliers(self): + countdicts = dataset.get_qc_stats(obstype="temp", make_plot=False) - # get data with outliers + if overwrite_solution: + TestBreakingDataset.solutionfixer.create_solution( + solution=countdicts, + methodname=method_name, + **TestBreakingDataset.solkwargs, + ) - solutionobj = TestBreakingDataset.solutionfixer.get_solution( - **TestBreakingDataset.solkwargs, methodname="test_apply_qc" + solutiondf = TestBreakingDataset.solutionfixer.get_solution( + methodname=method_name, **TestBreakingDataset.solkwargs ) + + for key, val in countdicts.items(): + assert_equality(val, solutiondf[key]) - # 2. apply a metobs manipulation - ax = solutionobj.make_plot(colorby="label", obstype="temp") + @pytest.mark.mpl_image_compare + def test_make_plot_by_label_with_outliers(self, regular_qc_on_dataset): + dataset = copy.deepcopy(regular_qc_on_dataset) + ax = dataset.make_plot(colorby="label", obstype="temp") fig = ax.get_figure() + fig.set_size_inches(15, 5) return fig - def test_get_info(self): + def test_get_info(self, regular_qc_on_dataset): # 1. get_startpoint data - dataset = TestBreakingDataset.solutionfixer.get_solution( - **TestBreakingDataset.solkwargs, methodname="test_apply_qc" - ) + dataset = copy.deepcopy(regular_qc_on_dataset) # call get info on dataset, station and sensor level _ = dataset.get_info(printout=True) _ = dataset.get_station("Fictional").get_info(printout=True) _ = dataset.get_station("Fictional").get_sensor("temp").get_info(printout=True) -class TestDemoDataset: +class TestBuddyCheck: # to pass to the solutionfixer - solkwargs = {"testfile": Path(__file__).name, "classname": "testdemodata"} - solutionfixer = SolutionFixer(solutiondir=solutionsdir) - - def test_import_data(self, overwrite_solution=False): - # 0. Get info of the current check - _method_name = sys._getframe().f_code.co_name # get the name of this method + solkwargs = {"testfile": Path(__file__).name, "classname": "testbuddycheck"} + solutionfixer = SolutionFixer2(solutiondir=solutionsdir) - # 1. get_startpoint data - pass - - # 2. apply a metobs manipulation + # paths to data + datafile = datadir.joinpath("random_belgian_temp_data.csv") + metadatafile = datadir.joinpath("random_belgian_temp_metadata.csv") + templatefile = datadir.joinpath("template_random_belgium.json") + + @pytest.fixture(scope="class") + def import_dataset(self): dataset = metobs_toolkit.Dataset() dataset.import_data_from_file( - template_file=metobs_toolkit.demo_template, - input_metadata_file=metobs_toolkit.demo_metadatafile, - input_data_file=metobs_toolkit.demo_datafile, + template_file=TestBuddyCheck.templatefile, + input_metadata_file=TestBuddyCheck.metadatafile, + input_data_file=TestBuddyCheck.datafile, ) # To hourly !! - dataset.resample(target_freq="1h") + # dataset.resample(target_freq="1h") + + dataset.stations= dataset.stations[:400] #to speedup the tests + # dataset.get_LCZ() + # dataset.get_altitude() + return dataset + + def test_import_data(self, import_dataset, overwrite_solution=False): + """Import demo dataset for QC testing.""" + _method_name = "test_import_data" + dataset = copy.deepcopy(import_dataset) - # 3. overwrite solution? if overwrite_solution: - TestDemoDataset.solutionfixer.create_solution( - solutiondata=dataset, + TestBuddyCheck.solutionfixer.create_solution( + solution=dataset, methodname=_method_name, - **TestDemoDataset.solkwargs, + **TestBuddyCheck.solkwargs, ) - # 4. Get solution - solutionobj = TestDemoDataset.solutionfixer.get_solution( - methodname=_method_name, **TestDemoDataset.solkwargs - ) - - # 5. Construct the equlity tests - assert_equality(dataset, solutionobj) # dataset comparison - - def test_qc_when_some_stations_missing_obs(self): - # 1. get_startpoint data - dataset = TestDemoDataset.solutionfixer.get_solution( - **TestDemoDataset.solkwargs, methodname="test_import_data" + solutionobj = TestBuddyCheck.solutionfixer.get_solution( + methodname=_method_name, **TestBuddyCheck.solkwargs ) - obstype = "temp" - - # Drop the temp of 2 random stations - orig_count = len(dataset.stations) - del dataset.stations[6].obsdata["temp"] - del dataset.stations[13].obsdata["temp"] - # See if qc pipeline still runs + assert_equality(dataset, solutionobj) - # Run all QC checks with default settings - dataset.gross_value_check(obstype=obstype) - dataset.persistence_check(obstype=obstype) - dataset.repetitions_check(obstype=obstype) - dataset.step_check(obstype=obstype) - dataset.window_variation_check(obstype=obstype) - dataset.buddy_check(obstype=obstype) - assert orig_count == len(dataset.stations) + - def test_buddy_check(self, overwrite_solution=False): + def test_buddy_check_one_iteration(self, import_dataset, overwrite_solution=False): # 0. Get info of the current check _method_name = sys._getframe().f_code.co_name + dataset = copy.deepcopy(import_dataset) - # 1. get_startpoint data - dataset = TestDemoDataset.solutionfixer.get_solution( - **TestDemoDataset.solkwargs, methodname="test_import_data" - ) - - # 2. apply a metobs manipulation - # Test if errors ar raised - - from metobs_toolkit.backend_collection.errorclasses import ( - MetObsMetadataNotFound, - ) - - with pytest.raises(MetObsMetadataNotFound): - # Should raise error because no altitude info is available and lapsrate is not none - dataset.buddy_check( - obstype="temp", - spatial_buddy_radius=17000, - min_sample_size=3, - max_alt_diff=150, - min_std=1.0, - spatial_z_threshold=2.4, - N_iter=1, - instantaneous_tolerance=pd.Timedelta("4min"), - lapserate=-0.0065, # -0.0065 - use_mp=False, - ) - - from metobs_toolkit.backend_collection.errorclasses import ( - MetObsMetadataNotFound, - ) - - with pytest.raises(MetObsMetadataNotFound): - # Should raise error because no altitude info is available and max_alt_diffis not none - dataset.buddy_check( - obstype="temp", - spatial_buddy_radius=17000, - min_sample_size=3, - max_alt_diff=150, - min_std=1.0, - spatial_z_threshold=2.4, - N_iter=1, - instantaneous_tolerance=pd.Timedelta("4min"), - lapserate=None, # -0.0065 - use_mp=False, - ) - - # Test that buddy check runs, with settings that does not create outliers + # test one iteration dataset.buddy_check( obstype="temp", spatial_buddy_radius=25000, min_sample_size=3, max_alt_diff=None, - min_std=1.0, - spatial_z_threshold=5.9, # this does noet create outliers - N_iter=1, + min_sample_spread=1.0, + spatial_z_threshold=2.1, + N_iter=1, # one iteration test instantaneous_tolerance=pd.Timedelta("4min"), lapserate=None, # -0.0065 use_mp=False, ) - assert dataset.outliersdf.empty + # overwrite solution? + if overwrite_solution: + TestBuddyCheck.solutionfixer.create_solution( + solution=dataset, + **TestBuddyCheck.solkwargs, + methodname=_method_name, + ) + + solutionobj = TestBuddyCheck.solutionfixer.get_solution( + **TestBuddyCheck.solkwargs, methodname=_method_name + ) - # Now create outliers with the buddy check + # validate expression + assert_equality( + dataset, solutionobj, exclude_columns=["details"] + ) # dataset comparison - dataset1 = copy.deepcopy(dataset) # used to test 1 iteration - dataset2 = copy.deepcopy(dataset) # use to test 2 iterations + def test_buddy_check_more_iterations( + self, import_dataset, overwrite_solution=False + ): + # 0. Get info of the current check + _method_name = sys._getframe().f_code.co_name + # test one iteration - dataset1.buddy_check( + dataset_1iter = copy.deepcopy(import_dataset) + dataset_1iter.buddy_check( obstype="temp", spatial_buddy_radius=25000, min_sample_size=3, max_alt_diff=None, - min_std=1.0, + min_sample_spread=1.0, spatial_z_threshold=2.1, N_iter=1, # one iteration test instantaneous_tolerance=pd.Timedelta("4min"), lapserate=None, # -0.0065 - use_mp=False, + use_mp=True, ) - - # outliersdf_1_iter = dataset1.outliersdf - - # test two iteration - dataset2.buddy_check( + + #Test 2 iterations + dataset_2iter = copy.deepcopy(import_dataset) + dataset_2iter.buddy_check( obstype="temp", spatial_buddy_radius=25000, min_sample_size=3, max_alt_diff=None, - min_std=1.0, + min_sample_spread=1.0, spatial_z_threshold=2.1, - N_iter=2, # one iteration test + N_iter=2, # two iteration test instantaneous_tolerance=pd.Timedelta("4min"), lapserate=None, # -0.0065 - use_mp=False, + use_mp=True, ) + + #apply relative tests + outl2 = dataset_2iter.outliersdf + outl1 = dataset_1iter.outliersdf + + #test if all oult indexes are in outl2 + assert outl1.index.isin(outl2.index).all() + assert outl2.shape[0] > outl1.shape[0] + + #absolute testings # overwrite solution? if overwrite_solution: - TestDemoDataset.solutionfixer.create_solution( - solutiondata=dataset1, - **TestDemoDataset.solkwargs, - methodname=_method_name + "_1_iter", - ) - TestDemoDataset.solutionfixer.create_solution( - solutiondata=dataset2, - **TestDemoDataset.solkwargs, - methodname=_method_name + "_2_iter", + TestBuddyCheck.solutionfixer.create_solution( + solution=dataset_2iter, + **TestBuddyCheck.solkwargs, + methodname=_method_name, ) - # 4. Get solution - solutionobj_1iter = TestDemoDataset.solutionfixer.get_solution( - **TestDemoDataset.solkwargs, methodname=_method_name + "_1_iter" - ) - solutionobj_2iter = TestDemoDataset.solutionfixer.get_solution( - **TestDemoDataset.solkwargs, methodname=_method_name + "_2_iter" + solutionobj = TestBuddyCheck.solutionfixer.get_solution( + **TestBuddyCheck.solkwargs, methodname=_method_name ) # validate expression - assert_equality(dataset1, solutionobj_1iter) # dataset comparison + assert_equality( + dataset_2iter, solutionobj, exclude_columns=["details"] + ) # dataset comparison - assert_equality(dataset2, solutionobj_2iter) # dataset comparison + def test_buddy_check_no_outliers(self, import_dataset): + + # 1. get_startpoint data + dataset = copy.deepcopy(import_dataset) + # Test that buddy check runs, with settings that does not create outliers + dataset.buddy_check( + obstype="temp", + spatial_buddy_radius=25000, + min_sample_size=3, + max_alt_diff=None, + min_sample_spread=1.0, + spatial_z_threshold=12.8, # this does noet create outliers + use_z_robust_method=True, + N_iter=1, + instantaneous_tolerance=pd.Timedelta("4min"), + lapserate=None, # -0.0065 + use_mp=False, + ) - def test_buddy_check_with_big_radius(self): + assert dataset.outliersdf.empty + + #Extra test, same settings with non-robust z-method will make outliers + dataset = copy.deepcopy(import_dataset) + dataset.buddy_check( + obstype="temp", + spatial_buddy_radius=25000, + min_sample_size=3, + max_alt_diff=None, + min_sample_spread=1.0, + spatial_z_threshold=7.4, # this does noet create outliers + N_iter=1, + instantaneous_tolerance=pd.Timedelta("4min"), + use_z_robust_method=False, + lapserate=None, # -0.0065 + use_mp=False, + ) + + assert not dataset.outliersdf.empty + + def test_buddy_check_with_big_radius( + self, import_dataset, overwrite_solution=False + ): # 0. Get info of the current check _method_name = sys._getframe().f_code.co_name # 1. get_startpoint data - dataset = TestDemoDataset.solutionfixer.get_solution( - **TestDemoDataset.solkwargs, methodname="test_import_data" - ) + dataset = copy.deepcopy(import_dataset) # Tricky thing is that with big radii, a station can appear in multiple # buddy groups, which can lead to edge cases. Here we test that the code @@ -419,23 +378,29 @@ def test_buddy_check_with_big_radius(self): use_mp=False, # Deterministic behavior ) - def test_buddy_check_with_safety_nets(self, overwrite_solution=False): + if overwrite_solution: + TestBuddyCheck.solutionfixer.create_solution( + solution=dataset, + **TestBuddyCheck.solkwargs, + methodname=_method_name, + ) + solutionobj = TestBuddyCheck.solutionfixer.get_solution( + **TestBuddyCheck.solkwargs, methodname=_method_name + ) + assert_equality(dataset, solutionobj, exclude_columns=["details"]) + + def test_buddy_check_with_safety_nets( + self, import_dataset, overwrite_solution=False + ): """Test the generalized buddy_check_with_safety_nets method.""" # 0. Get info of the current check _method_name = sys._getframe().f_code.co_name # 1. get_startpoint data - dataset = TestDemoDataset.solutionfixer.get_solution( - **TestDemoDataset.solkwargs, methodname="test_import_data" - ) - - # Ensure LCZ data is present for all stations - if not all(sta.site.flag_has_LCZ() for sta in dataset.stations): - dataset.get_LCZ() - + dataset_with_saftynet = copy.deepcopy(import_dataset) # Test 1: Using safety_net_configs with LCZ should match the LCZ safety net method - dataset1 = copy.deepcopy(dataset) - dataset1.buddy_check_with_safetynets( + dataset_with_saftynet = copy.deepcopy(dataset_with_saftynet) + dataset_with_saftynet.buddy_check_with_safetynets( obstype="temp", spatial_buddy_radius=25000, safety_net_configs=[ @@ -448,43 +413,60 @@ def test_buddy_check_with_safety_nets(self, overwrite_solution=False): ], min_sample_size=3, max_alt_diff=None, - min_std=1.0, + min_sample_spread=1.0, spatial_z_threshold=2.1, N_iter=1, instantaneous_tolerance=pd.Timedelta("4min"), lapserate=None, - use_mp=False, + use_mp=True, ) - assert ( - dataset1.outliersdf.shape[0] == 74 - ), f"Expected 74 outliers, got {dataset1.outliersdf.shape[0]}" + + #Use same settings without saftyenet to make a relative comparison + dataset_without_saftynet = copy.deepcopy(import_dataset) + dataset_without_saftynet.buddy_check_with_safetynets( + obstype="temp", + spatial_buddy_radius=25000, + safety_net_configs=[], # No safety nets + min_sample_size=3, + max_alt_diff=None, + min_sample_spread=1.0, + spatial_z_threshold=2.1, + N_iter=1, + instantaneous_tolerance=pd.Timedelta("4min"), + lapserate=None, + use_mp=True, + ) + + #Relative tests + oult_saftynet = dataset_with_saftynet.outliersdf + oult_without_saftynet = dataset_without_saftynet.outliersdf + + + assert oult_saftynet.index.isin(oult_without_saftynet.index).all() + assert oult_without_saftynet.shape[0] > oult_saftynet.shape[0] + + # overwrite solution? if overwrite_solution: - TestDemoDataset.solutionfixer.create_solution( - solutiondata=dataset1, - **TestDemoDataset.solkwargs, + TestBuddyCheck.solutionfixer.create_solution( + solution=dataset_with_saftynet, + **TestBuddyCheck.solkwargs, methodname=_method_name, ) # 4. Get solution - solutionobj = TestDemoDataset.solutionfixer.get_solution( - **TestDemoDataset.solkwargs, methodname=_method_name + solutionobj = TestBuddyCheck.solutionfixer.get_solution( + **TestBuddyCheck.solkwargs, methodname=_method_name ) # validate expression - assert_equality(dataset1, solutionobj) + assert_equality(dataset_with_saftynet, solutionobj, exclude_columns=["details"]) - def test_buddy_check_with_safety_nets_missing_min_sample_size(self): + def test_buddy_check_with_safety_nets_missing_min_sample_size(self, import_dataset): """Test that an error is raised when min_sample_size is missing from safety_net_configs.""" # Get dataset - dataset = TestDemoDataset.solutionfixer.get_solution( - **TestDemoDataset.solkwargs, methodname="test_import_data" - ) - - # Ensure LCZ data is present - if not all(sta.site.flag_has_LCZ() for sta in dataset.stations): - dataset.get_LCZ() + dataset = copy.deepcopy(import_dataset) # Test that missing min_sample_size raises an error with pytest.raises(KeyError): @@ -504,43 +486,750 @@ def test_buddy_check_with_safety_nets_missing_min_sample_size(self): use_mp=False, ) + def test_buddy_check_filter_args(self, import_dataset): + """Test buddy_check with max_alt_diff, max_sample_size and min_sample_size.""" + # Baseline: default run without filters + dataset_baseline = copy.deepcopy(import_dataset) + dataset_baseline.buddy_check( + obstype="temp", + spatial_buddy_radius=25000, + min_sample_size=3, + max_sample_size=None, + max_alt_diff=None, + min_sample_spread=1.0, + spatial_z_threshold=2.1, + N_iter=1, + use_mp=False, + ) + baseline_outliers = dataset_baseline.outliersdf + assert not baseline_outliers.empty, "Baseline run must produce outliers" -class TestWhiteRecords: - """Test white_records functionality for all QC checks on both Dataset and Station level.""" - - # to pass to the solutionfixer - solkwargs = {"testfile": Path(__file__).name, "classname": "testwhiterecords"} - solutionfixer = SolutionFixer(solutiondir=solutionsdir) + # Test 1: max_alt_diff filters buddies by altitude difference. + # With a very small max_alt_diff many buddy groups become too small, + # so fewer outliers are expected. + dataset_alt = copy.deepcopy(import_dataset) + dataset_alt.buddy_check( + obstype="temp", + spatial_buddy_radius=25000, + min_sample_size=3, + max_alt_diff=5, # very strict altitude filter + min_sample_spread=1.0, + spatial_z_threshold=2.1, + N_iter=1, + use_mp=False, + ) + alt_outliers = dataset_alt.outliersdf + # Strict altitude filter should produce fewer (or equal) outliers + assert len(alt_outliers) <= len(baseline_outliers) - def test_whiterecords_reprs(self): - """Test the WhiteSet and SensorWhiteSet classes.""" - # Create a WhiteSet with mixed levels - white_records = pd.date_range( - start="2023-01-01 00:00", - periods=10, - freq="h", - tz="UTC", + # Test 2: max_sample_size limits the number of buddies per station. + dataset_maxsample = copy.deepcopy(import_dataset) + dataset_maxsample.buddy_check( + obstype="temp", + spatial_buddy_radius=25000, + min_sample_size=2, + max_sample_size=3, # limit to 3 nearest buddies + min_sample_spread=1.0, + spatial_z_threshold=2.1, + N_iter=1, + use_mp=False, ) - multi_index = pd.MultiIndex.from_product( - [ - ["vlinder05", "vlinder06", "vlinder07"], - white_records, - ["temp", "humidity"], - ], - names=["name", "datetime", "obstype"], + # Should run without error and produce outliers + assert not dataset_maxsample.outliersdf.empty + assert not dataset_maxsample.outliersdf.index.equals(baseline_outliers.index) + + # Test 3: Raising min_sample_size high enough should reduce or eliminate outliers + # because buddy groups become too small. + dataset_highmin = copy.deepcopy(import_dataset) + dataset_highmin.buddy_check( + obstype="temp", + spatial_buddy_radius=25000, + min_sample_size=50, # very high: most groups won't meet this + min_sample_spread=1.0, + spatial_z_threshold=2.1, + N_iter=1, + use_mp=False, ) - whiteset = metobs_toolkit.WhiteSet(multi_index) + highmin_outliers = dataset_highmin.outliersdf + assert len(highmin_outliers) <= len(baseline_outliers) - # Check repr and str - repr_str = repr(whiteset) - str_str = str(whiteset) + def test_buddy_check_with_lapserate(self, import_dataset): + """Test buddy_check with lapserate altitude correction.""" + # The fixture already has altitude via get_altitude(), so lapserate can be used. - assert "WhiteSet" in repr_str - assert "n_records=" in repr_str - assert "levels=" in repr_str - assert str_str == repr_str + # Run without lapserate + dataset_no_lapse = copy.deepcopy(import_dataset) + dataset_no_lapse.buddy_check( + obstype="temp", + spatial_buddy_radius=25000, + min_sample_size=3, + min_sample_spread=1.0, + spatial_z_threshold=2.1, + N_iter=1, + lapserate=None, + use_mp=False, + ) + outliers_no_lapse = dataset_no_lapse.outliersdf + assert not outliers_no_lapse.empty - # Create a SensorWhiteSet + # Run with standard temperature lapserate (-6.5°C/km) + dataset_lapse = copy.deepcopy(import_dataset) + dataset_lapse.buddy_check( + obstype="temp", + spatial_buddy_radius=25000, + min_sample_size=3, + min_sample_spread=1.0, + spatial_z_threshold=2.1, + N_iter=1, + lapserate=-0.0065, + use_mp=False, + ) + outliers_lapse = dataset_lapse.outliersdf + assert not outliers_lapse.empty + + # Lapserate correction adjusts for altitude, so the outlier sets + # should differ (at least in number or composition). + differ_in_count = len(outliers_lapse) != len(outliers_no_lapse) + differ_in_index = not outliers_lapse.index.equals(outliers_no_lapse.index) + assert differ_in_count or differ_in_index, ( + "Lapserate correction should change the outlier set" + ) + + def test_buddy_check_only_if_previous_has_no_buddies(self, import_dataset): + """Test safety_net_configs with only_if_previous_had_no_buddies=True.""" + + # Setup: Two cascading safety nets. The second net with + # only_if_previous_had_no_buddies=True should only test records that + # had insufficient buddies in the first safety net. + dataset_cascade = copy.deepcopy(import_dataset) + dataset_cascade.buddy_check_with_safetynets( + obstype="temp", + spatial_buddy_radius=25000, + safety_net_configs=[ + { + "category": "LCZ", + "buddy_radius": 25000, # small radius: some stations won't have LCZ buddies + "z_threshold": 1.4, + "min_sample_size": 3, + }, + { + "category": "LCZ", + "buddy_radius": 100000, # larger radius fallback + "z_threshold": 1.8, + "min_sample_size": 2, + "only_if_previous_had_no_buddies": True, + }, + ], + min_sample_size=3, + min_sample_spread=1.0, + spatial_z_threshold=2.1, + N_iter=1, + use_mp=False, + ) + cascade_outliers = dataset_cascade.outliersdf + + # Compare against a single safety net (no cascade) + dataset_single = copy.deepcopy(import_dataset) + dataset_single.buddy_check_with_safetynets( + obstype="temp", + spatial_buddy_radius=25000, + safety_net_configs=[ + { + "category": "LCZ", + "buddy_radius": 25000, + "z_threshold": 1.4, + "min_sample_size": 3, + }, + ], + min_sample_size=3, + min_sample_spread=1.0, + spatial_z_threshold=2.1, + N_iter=1, + use_mp=False, + ) + single_outliers = dataset_single.outliersdf + + # The cascade fallback can only save additional outliers (or same), + # so cascade should have <= outliers than the single net. + assert len(cascade_outliers) <= len(single_outliers) + + def test_buddy_check_use_z_robust_method(self, import_dataset): + """Test that use_z_robust_method toggles between robust (MAD) and classic (std) z-scores.""" + # Run with robust method (default) + dataset_robust = copy.deepcopy(import_dataset) + dataset_robust.buddy_check( + obstype="temp", + spatial_buddy_radius=25000, + min_sample_size=3, + min_sample_spread=1.0, + spatial_z_threshold=2.1, + N_iter=1, + use_z_robust_method=True, + use_mp=False, + ) + outliers_robust = dataset_robust.outliersdf + assert not outliers_robust.empty + + # Run with classic std method + dataset_classic = copy.deepcopy(import_dataset) + dataset_classic.buddy_check( + obstype="temp", + spatial_buddy_radius=25000, + min_sample_size=3, + min_sample_spread=1.0, + spatial_z_threshold=2.1, + N_iter=1, + use_z_robust_method=False, + use_mp=False, + ) + outliers_classic = dataset_classic.outliersdf + assert not outliers_classic.empty + + # The two methods use different spread estimators (MAD vs std), + # so the outlier sets should differ in count or composition. + differ_in_count = len(outliers_robust) != len(outliers_classic) + differ_in_index = not outliers_robust.index.equals(outliers_classic.index) + assert differ_in_count or differ_in_index, ( + "Robust (MAD) and classic (std) z-score methods should produce different outlier sets" + ) + + +class TestDemoDataset: + # to pass to the solutionfixer + solkwargs = {"testfile": Path(__file__).name, "classname": "testdemodata"} + solutionfixer = SolutionFixer2(solutiondir=solutionsdir) + + @pytest.fixture(scope="class") + def import_dataset(self): + dataset = metobs_toolkit.Dataset() + dataset.import_data_from_file( + template_file=metobs_toolkit.demo_template, + input_metadata_file=metobs_toolkit.demo_metadatafile, + input_data_file=metobs_toolkit.demo_datafile, + ) + # To hourly !! + dataset.resample(target_freq="1h") + + dataset.get_LCZ() + return dataset + + def test_import_data(self, import_dataset, overwrite_solution=False): + """Import demo dataset for QC testing.""" + _method_name = "test_import_data" + dataset = copy.deepcopy(import_dataset) + + if overwrite_solution: + TestDemoDataset.solutionfixer.create_solution( + solution=dataset, + methodname=_method_name, + **TestDemoDataset.solkwargs, + ) + + solutionobj = TestDemoDataset.solutionfixer.get_solution( + methodname=_method_name, **TestDemoDataset.solkwargs + ) + + assert_equality(dataset, solutionobj) + + def test_buddy_check_raise_errors(self, import_dataset): + # 1. get_startpoint data + dataset = copy.deepcopy(import_dataset) + + from metobs_toolkit.backend_collection.errorclasses import ( + MetObsMetadataNotFound, + ) + + with pytest.raises(DeprecationWarning): + # Should raise error because no altitude info is available and lapsrate is not none + dataset.buddy_check( + obstype="temp", + spatial_buddy_radius=17000, + min_sample_size=3, + max_alt_diff=150, + min_std=1.0, #cause a deprecation warning + spatial_z_threshold=2.4, + N_iter=1, + instantaneous_tolerance=pd.Timedelta("4min"), + lapserate=-0.0065, # -0.0065 + use_mp=False, + ) + + + with pytest.raises(MetObsMetadataNotFound): + # Should raise error because no altitude info is available and lapsrate is not none + dataset.buddy_check( + obstype="temp", + spatial_buddy_radius=17000, + min_sample_size=3, + max_alt_diff=150, + min_sample_spread=1.0, + spatial_z_threshold=2.4, + N_iter=1, + instantaneous_tolerance=pd.Timedelta("4min"), + lapserate=-0.0065, # -0.0065 + use_mp=False, + ) + + from metobs_toolkit.backend_collection.errorclasses import ( + MetObsMetadataNotFound, + ) + + with pytest.raises(MetObsMetadataNotFound): + # Should raise error because no altitude info is available and max_alt_diffis not none + dataset.buddy_check( + obstype="temp", + spatial_buddy_radius=17000, + min_sample_size=3, + max_alt_diff=150, + min_sample_spread=1.0, + spatial_z_threshold=2.4, + N_iter=1, + instantaneous_tolerance=pd.Timedelta("4min"), + lapserate=None, # -0.0065 + use_mp=False, + ) + + def test_buddy_check_with_paralelism(self, import_dataset): + dataset = copy.deepcopy(import_dataset) + obstype = "temp" + + dataset.buddy_check(obstype=obstype, use_mp=True) + assert not dataset.outliersdf.empty + + def test_if_qc_can_be_chained(self, import_dataset): + + obstype = "temp" + + #Create solution + dataset = copy.deepcopy(import_dataset) + dataset.gross_value_check(obstype=obstype, + lower_threshold=14.6, + upper_threshold=26.9, + use_mp=False) + + + # Chain the same check + dataset_chain = copy.deepcopy(import_dataset) + dataset_chain.gross_value_check(obstype=obstype, + lower_threshold=11.6, + upper_threshold=28.9, + use_mp=False) + assert dataset.outliersdf.shape[0] > dataset_chain.outliersdf.shape[0] + + dataset_chain.gross_value_check(obstype=obstype, + lower_threshold=11.8, + upper_threshold=26.9, + use_mp=False) + dataset_chain.gross_value_check(obstype=obstype, + lower_threshold=14.6, + upper_threshold=31.9, + use_mp=False) + + assert_equality(dataset, dataset_chain, exclude_columns=['details']) + + #test gap related df constructions + _ = dataset_chain.get_qc_stats(obstype=obstype, make_plot=False) + _ = dataset_chain.qc_overview_df() + + def test_qc_when_some_stations_missing_obs(self, import_dataset): + # 1. get_startpoint data + dataset = copy.deepcopy(import_dataset) + obstype = "temp" + + # Drop the temp of 2 random stations + orig_count = len(dataset.stations) + del dataset.stations[6].obsdata["temp"] + del dataset.stations[13].obsdata["temp"] + + # See if qc pipeline still runs + + # Run all QC checks with default settings + dataset.gross_value_check(obstype=obstype) + dataset.persistence_check(obstype=obstype) + dataset.repetitions_check(obstype=obstype) + dataset.step_check(obstype=obstype) + dataset.window_variation_check(obstype=obstype) + dataset.buddy_check(obstype=obstype) + + assert orig_count == len(dataset.stations) + + #test if test_qc works if some stations are missing obstype + dataset.get_qc_stats(obstype=obstype) + + def test_persistence_check_unmet_window(self, import_dataset): + """Details mention unmet window condition when min_records_per_window is too large. + + When min_records_per_window exceeds the number of records that can fit + inside the timewindow (given the dataset frequency), the persistence check + sets all records to 'condition_unmet' instead of 'flagged'. These records + do NOT appear in outliersdf (which contains only flagged outliers), but the + unmet-condition details are visible via qc_overview_df. + """ + dataset = copy.deepcopy(import_dataset) + # Dataset is resampled to 1h. A min_records_per_window of 100 in a 1h + # window is impossible to satisfy, forcing the unmet-condition path. + dataset.persistence_check( + obstype="temp", + timewindow="1h", + min_records_per_window=100, + use_mp=False, + ) + + # Persistence produced no flagged outliers because condition was unmet + if not dataset.outliersdf.empty: + assert "persistence" not in dataset.outliersdf["label"].values, ( + "Persistence check should not flag any outliers when window " + "condition is not met" + ) + + # The unmet-condition details ARE accessible via qc_overview_df + overview = dataset.qc_overview_df(subset_obstypes=["temp"]) + assert not overview.empty + + # Extract details for the persistence checkname + persistence_details = overview[("details", "persistence")] + unique_details = persistence_details.dropna().unique() + # Every record should carry the "not met" detail message + assert len(unique_details) == 1, ( + "Expected a single uniform detail message when window condition is unmet" + ) + assert "not met" in unique_details[0].lower(), ( + f"Expected 'not met' in details, got: {unique_details[0]!r}" + ) + + def test_window_variation_check_unmet_window(self, import_dataset): + """Details mention unmet window condition when min_records_per_window is too large. + + When min_records_per_window exceeds the number of records that can fit + inside the timewindow (given the dataset frequency), the window_variation + check sets all records to 'condition_unmet' instead of 'flagged'. These + records do NOT appear in outliersdf, but the unmet-condition details are + visible via qc_overview_df. + """ + dataset = copy.deepcopy(import_dataset) + # Dataset is resampled to 1h. A min_records_per_window of 100 in a 1h + # window is impossible to satisfy, forcing the unmet-condition path. + dataset.window_variation_check( + obstype="temp", + timewindow="1h", + min_records_per_window=100, + max_increase_per_second=8.0 / 3600.0, + max_decrease_per_second=-10.0 / 3600.0, + use_mp=False, + ) + + # window_variation produced no flagged outliers because condition was unmet + if not dataset.outliersdf.empty: + assert "window_variation" not in dataset.outliersdf["label"].values, ( + "window_variation check should not flag any outliers when window " + "condition is not met" + ) + + # The unmet-condition details ARE accessible via qc_overview_df + overview = dataset.qc_overview_df(subset_obstypes=["temp"]) + assert not overview.empty + + # Extract details for the window_variation checkname + wv_details = overview[("details", "window_variation")] + unique_details = wv_details.dropna().unique() + # Every record should carry the "not met" detail message + assert len(unique_details) == 1, ( + "Expected a single uniform detail message when window condition is unmet" + ) + assert "not met" in unique_details[0].lower(), ( + f"Expected 'not met' in details, got: {unique_details[0]!r}" + ) + + + +class TestQcOverviewDf: + """Test qc_overview_df functions at sensor, station and dataset level.""" + + # ------------------------------------------------------------------ # + # fixtures + # ------------------------------------------------------------------ # + + @pytest.fixture(scope="class") + def breaking_import(self): + """Import the breaking testdata and return raw dataset.""" + datafile = datadir.joinpath("testdata_breaking.csv") + templatefile = datadir.joinpath("template_breaking.json") + dataset = metobs_toolkit.Dataset() + dataset.import_data_from_file( + template_file=templatefile, + input_data_file=datafile, + ) + return dataset + + @pytest.fixture(scope="class") + def breaking_with_qc(self, breaking_import): + """Run a typical QC pipeline on the breaking dataset.""" + dataset = copy.deepcopy(breaking_import) + dataset.gross_value_check( + obstype="temp", + lower_threshold=-15.0, + upper_threshold=29.0, + use_mp=False, + ) + dataset.gross_value_check( + obstype="humidity", + lower_threshold=5.0, + upper_threshold=10.0, + use_mp=False, + ) + dataset.persistence_check( + obstype="temp", timewindow="1h", min_records_per_window=3, use_mp=False, + ) + dataset.repetitions_check(obstype="temp", max_N_repetitions=5, use_mp=False) + dataset.step_check( + obstype="temp", + max_increase_per_second=8.0 / 3600.0, + max_decrease_per_second=-10.0 / 3600.0, + use_mp=False, + ) + dataset.window_variation_check( + obstype="temp", timewindow="1h", min_records_per_window=3, + max_increase_per_second=8.0 / 3600.0, max_decrease_per_second=-10.0 / 3600.0, + use_mp=False, + ) + return dataset + + # ------------------------------------------------------------------ # + # Sensordata level + # ------------------------------------------------------------------ # + + def test_sensor_overview_after_qc(self, breaking_with_qc): + """Sensor-level overview contains expected columns and index after QC.""" + dataset = copy.deepcopy(breaking_with_qc) + station = dataset.get_station("Fictional") + sensor = station.get_sensor("temp") + + df = sensor.qc_overview_df() + assert not df.empty, "Expected non-empty overview for checked sensor" + assert df.index.name == "datetime" + assert "value" in df.columns.get_level_values(0) + assert "label" in df.columns.get_level_values(0) + assert "details" in df.columns.get_level_values(0) + + def test_sensor_overview_no_explicit_qc(self, breaking_import): + """Sensor-level overview after import contains automatic import-time checks.""" + dataset = copy.deepcopy(breaking_import) + station = dataset.get_station("Fictional") + sensor = station.get_sensor("temp") + + df = sensor.qc_overview_df() + # Import-time checks (like duplicated_timestamp) make the overview non-empty + assert not df.empty + assert df.index.name == "datetime" + check_names = df.columns.get_level_values("checkname").unique().dropna() + assert "duplicated_timestamp" in check_names + + def test_sensor_overview_humidity(self, breaking_with_qc): + """Sensor-level overview works for non-temp obstypes that had QC.""" + dataset = copy.deepcopy(breaking_with_qc) + station = dataset.get_station("Fictional") + sensor = station.get_sensor("humidity") + + df = sensor.qc_overview_df() + # gross_value_check was applied to humidity + assert not df.empty, "Expected non-empty overview for humidity sensor" + + def test_sensor_overview_unchecked_obstype(self, breaking_with_qc): + """Sensor with no explicit QC still has import-time check results.""" + dataset = copy.deepcopy(breaking_with_qc) + station = dataset.get_station("Fictional") + sensor = station.get_sensor("wind_speed") + + df = sensor.qc_overview_df() + # Import-time checks run for every obstype + assert not df.empty + check_names = df.columns.get_level_values("checkname").unique().dropna() + assert "duplicated_timestamp" in check_names + # Explicit QC checks (like gross_value) should NOT be present + assert "gross_value" not in check_names + + # ------------------------------------------------------------------ # + # Station level + # ------------------------------------------------------------------ # + + def test_station_overview_after_qc(self, breaking_with_qc): + """Station-level overview has a (datetime, obstype) MultiIndex after QC.""" + dataset = copy.deepcopy(breaking_with_qc) + station = dataset.get_station("Fictional") + + df = station.qc_overview_df() + assert not df.empty + assert df.index.names == ["datetime", "obstype"] + assert "value" in df.columns.get_level_values(0) + assert "label" in df.columns.get_level_values(0) + assert "details" in df.columns.get_level_values(0) + + # Should contain at least temp and humidity (both had QC) + obstypes_present = df.index.get_level_values("obstype").unique() + assert "temp" in obstypes_present + assert "humidity" in obstypes_present + + def test_station_overview_no_explicit_qc(self, breaking_import): + """Station-level overview after import contains import-time check results.""" + dataset = copy.deepcopy(breaking_import) + station = dataset.get_station("Fictional") + + df = station.qc_overview_df() + assert not df.empty + assert list(df.index.names) == ["datetime", "obstype"] + check_names = df.columns.get_level_values("checkname").unique().dropna() + assert "duplicated_timestamp" in check_names + + def test_station_overview_subset_obstypes(self, breaking_with_qc): + """Station-level overview with subset_obstypes returns only requested types.""" + dataset = copy.deepcopy(breaking_with_qc) + station = dataset.get_station("Fictional") + + df = station.qc_overview_df(subset_obstypes=["temp"]) + assert not df.empty + obstypes_present = df.index.get_level_values("obstype").unique() + assert list(obstypes_present) == ["temp"] + + def test_station_overview_subset_obstypes_unknown(self, breaking_with_qc): + """Station-level overview silently ignores unknown obstype names.""" + dataset = copy.deepcopy(breaking_with_qc) + station = dataset.get_station("Fictional") + + df = station.qc_overview_df(subset_obstypes=["nonexistent_obstype"]) + assert df.empty + + def test_station_overview_subset_obstypes_mixed(self, breaking_with_qc): + """Subset with valid + unknown names returns only the valid one.""" + dataset = copy.deepcopy(breaking_with_qc) + station = dataset.get_station("Fictional") + + df = station.qc_overview_df(subset_obstypes=["temp", "fake_obstype"]) + assert not df.empty + obstypes_present = df.index.get_level_values("obstype").unique() + assert list(obstypes_present) == ["temp"] + + # ------------------------------------------------------------------ # + # Dataset level + # ------------------------------------------------------------------ # + + def test_dataset_overview_after_qc(self, breaking_with_qc): + """Dataset-level overview has (datetime, obstype, name) MultiIndex.""" + dataset = copy.deepcopy(breaking_with_qc) + + df = dataset.qc_overview_df() + assert not df.empty + assert df.index.names == ["datetime", "obstype", "name"] + assert "value" in df.columns.get_level_values(0) + assert "label" in df.columns.get_level_values(0) + assert "details" in df.columns.get_level_values(0) + + def test_dataset_overview_no_explicit_qc(self, breaking_import): + """Dataset-level overview after import contains import-time check results.""" + dataset = copy.deepcopy(breaking_import) + + df = dataset.qc_overview_df() + assert not df.empty + assert list(df.index.names) == ["datetime", "obstype", "name"] + check_names = df.columns.get_level_values("checkname").unique().dropna() + assert "duplicated_timestamp" in check_names + + def test_dataset_overview_subset_stations(self, breaking_with_qc): + """Dataset-level overview respects subset_stations filter.""" + dataset = copy.deepcopy(breaking_with_qc) + + df = dataset.qc_overview_df(subset_stations=["Fictional"]) + assert not df.empty + names = df.index.get_level_values("name").unique() + assert list(names) == ["Fictional"] + + def test_dataset_overview_subset_obstypes(self, breaking_with_qc): + """Dataset-level overview respects subset_obstypes filter.""" + dataset = copy.deepcopy(breaking_with_qc) + + df = dataset.qc_overview_df(subset_obstypes=["temp"]) + assert not df.empty + obstypes_present = df.index.get_level_values("obstype").unique() + assert list(obstypes_present) == ["temp"] + + def test_dataset_overview_both_subsets(self, breaking_with_qc): + """Dataset-level overview works with both subsets applied.""" + dataset = copy.deepcopy(breaking_with_qc) + + df = dataset.qc_overview_df( + subset_stations=["Fictional"], subset_obstypes=["temp"] + ) + assert not df.empty + assert list(df.index.get_level_values("name").unique()) == ["Fictional"] + assert list(df.index.get_level_values("obstype").unique()) == ["temp"] + + def test_dataset_overview_matches_station_overview(self, breaking_with_qc): + """Dataset-level overview for one station matches station-level overview.""" + dataset = copy.deepcopy(breaking_with_qc) + + ds_df = dataset.qc_overview_df( + subset_stations=["Fictional"], subset_obstypes=["temp"] + ) + sta_df = dataset.get_station("Fictional").qc_overview_df( + subset_obstypes=["temp"] + ) + + # After dropping the extra 'name' level from the dataset result, + # the two frames should have identical shapes and datetimes. + ds_df_dropped = ds_df.droplevel("name") + assert ds_df_dropped.shape == sta_df.shape + assert ds_df_dropped.index.equals(sta_df.index) + + +class TestWhiteRecords: + """Test white_records functionality for all QC checks on both Dataset and Station level.""" + + # to pass to the solutionfixer + solkwargs = {"testfile": Path(__file__).name, "classname": "testwhiterecords"} + solutionfixer = SolutionFixer2(solutiondir=solutionsdir) + + @pytest.fixture(scope="class") + def import_dataset(self): + dataset = metobs_toolkit.Dataset() + dataset.import_data_from_file( + template_file=metobs_toolkit.demo_template, + input_metadata_file=metobs_toolkit.demo_metadatafile, + input_data_file=metobs_toolkit.demo_datafile, + ) + # Resample to hourly for consistent testing + dataset.resample(target_freq="1h") + + dataset.get_LCZ() + return dataset + + def test_whiterecords_reprs(self): + """Test the WhiteSet and SensorWhiteSet classes.""" + # Create a WhiteSet with mixed levels + white_records = pd.date_range( + start="2023-01-01 00:00", + periods=10, + freq="h", + tz="UTC", + ) + multi_index = pd.MultiIndex.from_product( + [ + ["vlinder05", "vlinder06", "vlinder07"], + white_records, + ["temp", "humidity"], + ], + names=["name", "datetime", "obstype"], + ) + whiteset = metobs_toolkit.WhiteSet(multi_index) + + # Check repr and str + repr_str = repr(whiteset) + str_str = str(whiteset) + + assert "WhiteSet" in repr_str + assert "n_records=" in repr_str + assert "levels=" in repr_str + assert str_str == repr_str + + # Create a SensorWhiteSet sensor_whiteset = whiteset.create_sensorwhitelist( stationname="vlinder06", obstype="temp" ) @@ -552,22 +1241,14 @@ def test_whiterecords_reprs(self): assert "n_timestamps=" in repr_sensor assert str_sensor == repr_sensor - def test_import_data(self, overwrite_solution=False): + def test_import_data(self, import_dataset, overwrite_solution=False): """Import demo dataset for white_records testing.""" _method_name = sys._getframe().f_code.co_name - dataset = metobs_toolkit.Dataset() - dataset.import_data_from_file( - template_file=metobs_toolkit.demo_template, - input_metadata_file=metobs_toolkit.demo_metadatafile, - input_data_file=metobs_toolkit.demo_datafile, - ) - # Resample to hourly for consistent testing - dataset.resample(target_freq="1h") - + dataset = copy.deepcopy(import_dataset) if overwrite_solution: TestWhiteRecords.solutionfixer.create_solution( - solutiondata=dataset, + solution=dataset, methodname=_method_name, **TestWhiteRecords.solkwargs, ) @@ -578,16 +1259,10 @@ def test_import_data(self, overwrite_solution=False): assert_equality(dataset, solutionobj) - def test_white_records_input_combinations(self, overwrite_solution=False): - """Test white_records with gross_value_check on Dataset level.""" - _method_name = sys._getframe().f_code.co_name - - dataset = TestWhiteRecords.solutionfixer.get_solution( - **TestWhiteRecords.solkwargs, methodname="test_import_data" - ) - - # Get some timestamps that would be flagged as outliers - # First run without white_records to identify outliers + @pytest.fixture(scope="class") + def dataset_with_outliers(self, import_dataset): + """Run gross_value_check to identify outliers for white_records testing.""" + dataset = copy.deepcopy(import_dataset) test_dataset = copy.deepcopy(dataset) test_dataset.gross_value_check( obstype="temp", @@ -595,96 +1270,153 @@ def test_white_records_input_combinations(self, overwrite_solution=False): upper_threshold=20.0, use_mp=False, ) - - # Get outliers to use as white_records outliers = test_dataset.outliersdf if outliers.empty: pytest.skip("No outliers found for white_records testing") + return {"dataset": dataset, "outliers": outliers} + + def test_whiteset_datetime_only( + self, dataset_with_outliers, overwrite_solution=False + ): + """Test white_records with Index containing only datetimes.""" + _method_name = sys._getframe().f_code.co_name + + dataset = copy.deepcopy(dataset_with_outliers["dataset"]) + outliers = copy.deepcopy(dataset_with_outliers["outliers"]) - # Test 1a: Index with only datetimes - dataset1a = copy.deepcopy(dataset) white_dt_only = pd.Index( outliers.reset_index()["datetime"].head(20), name="datetime" ) - dataset1a.gross_value_check( + dataset.gross_value_check( obstype="temp", lower_threshold=10.0, upper_threshold=20.0, whiteset=metobs_toolkit.WhiteSet(white_dt_only), use_mp=False, ) - outliers1a = dataset1a.outliersdf + outliers_result = dataset.outliersdf + + # Verify that white-listed records are not in the outliers + for white_record in white_dt_only: + assert not any( + outliers_result.reset_index()["datetime"] == white_record + ), f"White-listed record {white_record} found in outliers (datetime only)" + + if overwrite_solution: + TestWhiteRecords.solutionfixer.create_solution( + solution=dataset, + methodname=_method_name, + **TestWhiteRecords.solkwargs, + ) + + solutionobj = TestWhiteRecords.solutionfixer.get_solution( + methodname=_method_name, **TestWhiteRecords.solkwargs + ) + + assert_equality(dataset, solutionobj, exclude_columns=['details'] ) + + def test_whiteset_name_only(self, dataset_with_outliers, overwrite_solution=False): + """Test white_records with Index containing only station names.""" + _method_name = sys._getframe().f_code.co_name + + dataset = copy.deepcopy(dataset_with_outliers["dataset"]) + + white_name_only = pd.Index( + data=["vlinder05", "vlinder05", "vlinder06", "fake"], name="name" + ) + dataset.gross_value_check( + obstype="temp", + lower_threshold=10.0, + upper_threshold=20.0, + whiteset=metobs_toolkit.WhiteSet(white_name_only), + use_mp=False, + ) + + if overwrite_solution: + TestWhiteRecords.solutionfixer.create_solution( + solution=dataset, + methodname=_method_name, + **TestWhiteRecords.solkwargs, + ) + + solutionobj = TestWhiteRecords.solutionfixer.get_solution( + methodname=_method_name, **TestWhiteRecords.solkwargs + ) + + assert_equality(dataset, solutionobj, exclude_columns=['details']) + + def test_whiteset_name_only_on_station(self, dataset_with_outliers): + """Test white_records with name-only Index on Station object.""" + dataset = copy.deepcopy(dataset_with_outliers["dataset"]) - # Test 1b: Index with only name - dataset1b = copy.deepcopy(dataset) white_name_only = pd.Index( data=["vlinder05", "vlinder05", "vlinder06", "fake"], name="name" ) - dataset1b.gross_value_check( + # Should not raise - test on station object + dataset.get_station("vlinder05").gross_value_check( obstype="temp", lower_threshold=10.0, upper_threshold=20.0, whiteset=metobs_toolkit.WhiteSet(white_name_only), - use_mp=False, ) - outliers1b = dataset1b.outliersdf + def test_whiteset_name_and_datetime( + self, dataset_with_outliers, overwrite_solution=False + ): + """Test white_records with MultiIndex containing name and datetime.""" + _method_name = sys._getframe().f_code.co_name - # test on station object - copy.deepcopy(dataset).get_station("vlinder05").gross_value_check( - obstype="temp", - lower_threshold=10.0, - upper_threshold=20.0, - whiteset=metobs_toolkit.WhiteSet(white_name_only), - ) + dataset = copy.deepcopy(dataset_with_outliers["dataset"]) + outliers = copy.deepcopy(dataset_with_outliers["outliers"]) - # Test 2: MultiIndex with name and datetime - dataset2 = copy.deepcopy(dataset) white_name_dt = ( outliers.head(20) .reset_index()[["name", "datetime"]] .set_index(["name", "datetime"]) .index ) - dataset2.gross_value_check( + dataset.gross_value_check( obstype="temp", lower_threshold=10.0, upper_threshold=20.0, whiteset=metobs_toolkit.WhiteSet(white_name_dt), use_mp=False, ) - outliers2 = dataset2.outliersdf - # Test 3: MultiIndex with obstype, name, and datetime - dataset3 = copy.deepcopy(dataset) + if overwrite_solution: + TestWhiteRecords.solutionfixer.create_solution( + solution=dataset, + methodname=_method_name, + **TestWhiteRecords.solkwargs, + ) + + solutionobj = TestWhiteRecords.solutionfixer.get_solution( + methodname=_method_name, **TestWhiteRecords.solkwargs + ) + + assert_equality(dataset, solutionobj, exclude_columns=['details']) + + def test_whiteset_full_multiindex( + self, dataset_with_outliers, overwrite_solution=False + ): + """Test white_records with full MultiIndex (obstype, name, datetime).""" + _method_name = sys._getframe().f_code.co_name + + dataset = copy.deepcopy(dataset_with_outliers["dataset"]) + outliers = copy.deepcopy(dataset_with_outliers["outliers"]) + white_full = outliers.head(25).index - dataset3.gross_value_check( + dataset.gross_value_check( obstype="temp", lower_threshold=10.0, upper_threshold=20.0, whiteset=metobs_toolkit.WhiteSet(white_full), use_mp=False, ) - outliers3 = dataset3.outliersdf - - # Quick Verify that white-listed records are not in the outliers - for white_record in white_dt_only: - assert not any( - outliers1a.reset_index()["datetime"] == white_record - ), f"White-listed record {white_record} found in outliers (datetime only)" - - # Store results - results = { - "outliers_no_white": outliers, - "outliers_dt_only": outliers1a, - "outliers_name_only": outliers1b, - "outliers_name_dt": outliers2, - "outliers_full": outliers3, - } if overwrite_solution: TestWhiteRecords.solutionfixer.create_solution( - solutiondata=results, + solution=dataset, methodname=_method_name, **TestWhiteRecords.solkwargs, ) @@ -693,35 +1425,12 @@ def test_white_records_input_combinations(self, overwrite_solution=False): methodname=_method_name, **TestWhiteRecords.solkwargs ) - for key in results: - # Drop 'details' column if present for comparison - df_to_compare = results[key].drop(columns=["details"], errors="ignore") - sol_to_compare = solutionobj[key].drop(columns=["details"], errors="ignore") - assert_equality(df_to_compare, sol_to_compare) - - def test_white_records_buddy_check_dataset(self): - """Test white_records with buddy_check on Dataset level.""" + assert_equality(dataset, solutionobj, exclude_columns=['details']) - dataset = TestWhiteRecords.solutionfixer.get_solution( - **TestWhiteRecords.solkwargs, methodname="test_import_data" - ) - - # First run without white_records - # test_dataset = copy.deepcopy(dataset) - # test_dataset.buddy_check( - # obstype="temp", - # spatial_buddy_radius=25000, - # min_sample_size=3, - # spatial_z_threshold=1.8, - # N_iter=2, - # use_mp=False, - # ) - - # outliers = test_dataset.outliersdf - # white_dt_only = pd.Index( - # outliers.reset_index()["datetime"].sample(n=33, random_state=42), - # name="datetime", - # ) + def test_white_dt_only_records_buddy_check( + self, import_dataset, + ): + white_dt_only = pd.DatetimeIndex( [ "2022-09-11 16:00:00+00:00", @@ -763,16 +1472,15 @@ def test_white_records_buddy_check_dataset(self): name="datetime", freq=None, ) - - # Test with different structures - dataset1 = copy.deepcopy(dataset) + # Test 1: see if there is overlap with the whites, if no whites are given + dataset1 = copy.deepcopy(import_dataset) dataset1.buddy_check( obstype="temp", spatial_buddy_radius=25000, min_sample_size=3, spatial_z_threshold=2.1, N_iter=2, - whiteset=metobs_toolkit.WhiteSet(white_dt_only), + whiteset=metobs_toolkit.WhiteSet(), #empty use_mp=False, ) outlier_timestamps = dataset1.outliersdf.index.get_level_values( @@ -780,18 +1488,35 @@ def test_white_records_buddy_check_dataset(self): ).unique() intersect = outlier_timestamps.intersection(white_dt_only) # Check if the white dt only timestamps are not in the outliers + assert not intersect.empty, "There must be overlap, else the test is bad designed" + assert not outlier_timestamps.empty, "not outliers found" + + + # Test 2: test that the white dt only records are not in the outliers after buddy check + dataset2 = copy.deepcopy(import_dataset) + dataset2.buddy_check( + obstype="temp", + spatial_buddy_radius=25000, + min_sample_size=3, + spatial_z_threshold=2.1, + N_iter=2, + whiteset=metobs_toolkit.WhiteSet(white_dt_only), + use_mp=False, + ) + outlier_timestamps = dataset2.outliersdf.index.get_level_values( + "datetime" + ).unique() + intersect = outlier_timestamps.intersection(white_dt_only) + # Check if the white dt only timestamps are not in the outliers assert intersect.empty, "outlier timestamps found in white dt only" assert not outlier_timestamps.empty, "not outliers found" - dataset2 = copy.deepcopy(dataset) - - # white_name_dt = ( - # outliers.sample(n=18, random_state=42) - # .reset_index()[["name", "datetime"]] - # .set_index(["name", "datetime"]) - # .index - # ) - + + def test_white_multi_idx_records_buddy_check( + self, import_dataset, + ): + """Test white_records with buddy_check on Dataset level.""" + white_name_dt = pd.MultiIndex.from_arrays( [ [ @@ -847,64 +1572,59 @@ def test_white_records_buddy_check_dataset(self): names=("name", "datetime"), ) - dataset2.buddy_check( + # Test 1: see if there is overlap with the whites, if no whites are given + dataset1 = copy.deepcopy(import_dataset) + dataset1.buddy_check( obstype="temp", spatial_buddy_radius=25000, min_sample_size=3, spatial_z_threshold=2.1, N_iter=2, - whiteset=metobs_toolkit.WhiteSet(white_name_dt), + whiteset=metobs_toolkit.WhiteSet(), #empty use_mp=False, ) + + #There must be overlap + assert not dataset1.outliersdf.empty, "No outliers found, test is bad designed" + outlier_name_dt = dataset1.outliersdf[ + dataset1.outliersdf.index.get_level_values("obstype") == "temp" + ].index.droplevel("obstype") - outlier_idxs = dataset2.outliersdf.index.get_level_values("datetime").unique() + outlier_name_dt = outlier_name_dt.reorder_levels(["name", "datetime"]) + intersect = outlier_name_dt.intersection(white_name_dt.reorder_levels(["name", "datetime"])) + assert not intersect.empty, "There must be overlap, else the test is bad designed" - intersect = outlier_idxs.intersection(white_name_dt) - # Check if the white dt only timestamps are not in the outliers + + + + # Test 2: test that the white dt only records are not in the outliers after buddy check + dataset2 = copy.deepcopy(import_dataset) + dataset2.buddy_check( + obstype="temp", + spatial_buddy_radius=25000, + min_sample_size=3, + spatial_z_threshold=2.1, + N_iter=2, + whiteset=metobs_toolkit.WhiteSet(white_name_dt), + use_mp=False, + ) + + + assert not dataset2.outliersdf.empty, "No outliers found, test is bad designed" + outlier_name_dt = dataset2.outliersdf[ + dataset2.outliersdf.index.get_level_values("obstype") == "temp" + ].index.droplevel("obstype") + outlier_name_dt = outlier_name_dt.reorder_levels(["name", "datetime"]) + intersect = outlier_name_dt.intersection(white_name_dt.reorder_levels(["name", "datetime"])) assert intersect.empty, "outlier timestamps found in white name dt" - assert not outlier_timestamps.empty, "not outliers found" - assert ( - dataset2.outliersdf.shape[0] > dataset1.outliersdf.shape[0] - ), "something wrong" + + - def test_white_records_buddy_check_with_safety_nets_dataset(self): + def test_white_dt_only_records_buddy_check_with_safety_nets( + self, import_dataset, + ): """Test white_records with buddy_check_with_safety_nets on Dataset level.""" - - dataset = TestWhiteRecords.solutionfixer.get_solution( - **TestWhiteRecords.solkwargs, methodname="test_import_data" - ) - - # Ensure LCZ data is present - if not all(sta.site.flag_has_LCZ() for sta in dataset.stations): - dataset.get_LCZ() - - # First run without whiteset - # test_dataset = copy.deepcopy(dataset) - # test_dataset.buddy_check_with_safetynets( - # obstype="temp", - # spatial_buddy_radius=25000, - # safety_net_configs=[ - # { - # "category": "LCZ", - # "buddy_radius": 40000, - # "z_threshold": 1.8, - # "min_sample_size": 3, - # } - # ], - # min_sample_size=3, - # spatial_z_threshold=1.8, - # N_iter=2, - # use_mp=False, - # ) - - # outliers = test_dataset.outliersdf - - # Test with different structures - - # white_dt_only = pd.Index( - # outliers.reset_index()["datetime"].sample(n=33, random_state=42), - # name="datetime", - # ) + white_dt_only = pd.DatetimeIndex( [ "2022-09-11 17:00:00+00:00", @@ -946,11 +1666,10 @@ def test_white_records_buddy_check_with_safety_nets_dataset(self): freq=None, ) - dataset1 = copy.deepcopy(dataset) - dataset1.buddy_check_with_safetynets( - obstype="temp", - spatial_buddy_radius=25000, - safety_net_configs=[ + args = { + "obstype": "temp", + "spatial_buddy_radius": 25000, + "safety_net_configs": [ { "category": "LCZ", "buddy_radius": 40000, @@ -958,28 +1677,50 @@ def test_white_records_buddy_check_with_safety_nets_dataset(self): "min_sample_size": 3, } ], - min_sample_size=3, - spatial_z_threshold=1.8, - N_iter=2, - whiteset=metobs_toolkit.WhiteSet(white_dt_only), - use_mp=False, - ) + "min_sample_size": 3, + "spatial_z_threshold": 1.8, + "N_iter": 2, + # "whiteset": metobs_toolkit.WhiteSet(white_dt_only), + "use_mp": False, + } + # Test 1: see if there is overlap with the whites, if no whites are given + dataset1 = copy.deepcopy(import_dataset) + dataset1.buddy_check_with_safetynets( + **args, + whiteset=metobs_toolkit.WhiteSet(), #empty + ) outlier_timestamps = dataset1.outliersdf.index.get_level_values( "datetime" ).unique() intersect = outlier_timestamps.intersection(white_dt_only) # Check if the white dt only timestamps are not in the outliers + assert not intersect.empty, "There must be overlap, else the test is bad designed" + assert not outlier_timestamps.empty, "not outliers found" + + + # Test 2: test that the white dt only records are not in the outliers after buddy check + dataset2 = copy.deepcopy(import_dataset) + dataset2.buddy_check_with_safetynets( + **args, + whiteset=metobs_toolkit.WhiteSet(white_dt_only), + ) + outlier_timestamps = dataset2.outliersdf.index.get_level_values( + "datetime" + ).unique() + intersect = outlier_timestamps.intersection(white_dt_only) + # Check if the white dt only timestamps are not in the outliers assert intersect.empty, "outlier timestamps found in white dt only" assert not outlier_timestamps.empty, "not outliers found" - assert dataset1.outliersdf.shape[0] >= 140, "something wrong with outlier count" - - # white_name_dt = ( - # outliers.sample(n=21, random_state=42) - # .reset_index()[["name", "datetime"]] - # .set_index(["name", "datetime"]) - # .index - # ) + + + + + def test_white_multi_idx_records_buddy_check_with_safety_nets( + self, import_dataset, + ): + """Test white_records with buddy_check_with_safety_nets on Dataset level.""" + white_name_dt = pd.MultiIndex.from_arrays( [ [ @@ -1041,11 +1782,10 @@ def test_white_records_buddy_check_with_safety_nets_dataset(self): names=("name", "datetime"), ) - dataset2 = copy.deepcopy(dataset) - dataset2.buddy_check_with_safetynets( - obstype="temp", - spatial_buddy_radius=25000, - safety_net_configs=[ + args = { + "obstype": "temp", + "spatial_buddy_radius": 25000, + "safety_net_configs": [ { "category": "LCZ", "buddy_radius": 40000, @@ -1053,23 +1793,49 @@ def test_white_records_buddy_check_with_safety_nets_dataset(self): "min_sample_size": 3, } ], - min_sample_size=3, - spatial_z_threshold=1.8, - N_iter=2, - whiteset=metobs_toolkit.WhiteSet(white_name_dt), - use_mp=False, + "min_sample_size": 3, + "spatial_z_threshold": 1.8, + "N_iter": 2, + # "whiteset": metobs_toolkit.WhiteSet(white_dt_only), + "use_mp": False, + } + + # Test 1: see if there is overlap with the whites, if no whites are given + dataset1 = copy.deepcopy(import_dataset) + dataset1.buddy_check_with_safetynets( + **args, + whiteset=metobs_toolkit.WhiteSet(), #empty ) + + #There must be overlap + assert not dataset1.outliersdf.empty, "No outliers found, test is bad designed" + outlier_name_dt = dataset1.outliersdf[ + dataset1.outliersdf.index.get_level_values("obstype") == "temp" + ].index.droplevel("obstype") - outlier_idxs = dataset2.outliersdf.index.get_level_values("datetime").unique() + outlier_name_dt = outlier_name_dt.reorder_levels(["name", "datetime"]) + intersect = outlier_name_dt.intersection(white_name_dt.reorder_levels(["name", "datetime"])) + assert not intersect.empty, "There must be overlap, else the test is bad designed" - intersect = outlier_idxs.intersection(white_name_dt) - # Check if the white dt only timestamps are not in the outliers + + + + # Test 2: test that the white dt only records are not in the outliers after buddy check + dataset2 = copy.deepcopy(import_dataset) + dataset2.buddy_check_with_safetynets( + **args, + whiteset=metobs_toolkit.WhiteSet(white_name_dt), + ) + + assert not dataset2.outliersdf.empty, "No outliers found, test is bad designed" + outlier_name_dt = dataset2.outliersdf[ + dataset2.outliersdf.index.get_level_values("obstype") == "temp" + ].index.droplevel("obstype") + outlier_name_dt = outlier_name_dt.reorder_levels(["name", "datetime"]) + intersect = outlier_name_dt.intersection(white_name_dt.reorder_levels(["name", "datetime"])) assert intersect.empty, "outlier timestamps found in white name dt" - assert not outlier_timestamps.empty, "not outliers found" - assert ( - dataset2.outliersdf.shape[0] > dataset1.outliersdf.shape[0] - ), "something wrong" - # extra sanity check to ensure the test is valid + + def test_whiterecords_get_info(self): """Test the WhiteSet and SensorWhiteSet classes.""" @@ -1091,151 +1857,7 @@ def test_whiterecords_get_info(self): whiteset = metobs_toolkit.WhiteSet(multi_index) _ = whiteset.get_info(printout=False) - def test_import_data(self, overwrite_solution=False): - """Import demo dataset for white_records testing.""" - _method_name = sys._getframe().f_code.co_name - - dataset = metobs_toolkit.Dataset() - dataset.import_data_from_file( - template_file=metobs_toolkit.demo_template, - input_metadata_file=metobs_toolkit.demo_metadatafile, - input_data_file=metobs_toolkit.demo_datafile, - ) - # Resample to hourly for consistent testing - dataset.resample(target_freq="1h") - - if overwrite_solution: - TestWhiteRecords.solutionfixer.create_solution( - solutiondata=dataset, - methodname=_method_name, - **TestWhiteRecords.solkwargs, - ) - - solutionobj = TestWhiteRecords.solutionfixer.get_solution( - methodname=_method_name, **TestWhiteRecords.solkwargs - ) - - assert_equality(dataset, solutionobj) - - def test_white_records_input_combinations(self, overwrite_solution=False): - """Test white_records with gross_value_check on Dataset level.""" - _method_name = sys._getframe().f_code.co_name - - dataset = TestWhiteRecords.solutionfixer.get_solution( - **TestWhiteRecords.solkwargs, methodname="test_import_data" - ) - - # Get some timestamps that would be flagged as outliers - # First run without white_records to identify outliers - test_dataset = copy.deepcopy(dataset) - test_dataset.gross_value_check( - obstype="temp", - lower_threshold=10.0, - upper_threshold=20.0, - use_mp=False, - ) - - # Get outliers to use as white_records - outliers = test_dataset.outliersdf - if outliers.empty: - pytest.skip("No outliers found for white_records testing") - - # Test 1a: Index with only datetimes - dataset1a = copy.deepcopy(dataset) - white_dt_only = pd.Index( - outliers.reset_index()["datetime"].head(20), name="datetime" - ) - dataset1a.gross_value_check( - obstype="temp", - lower_threshold=10.0, - upper_threshold=20.0, - whiteset=metobs_toolkit.WhiteSet(white_dt_only), - use_mp=False, - ) - outliers1a = dataset1a.outliersdf - - # Test 1b: Index with only name - dataset1b = copy.deepcopy(dataset) - white_name_only = pd.Index( - data=["vlinder05", "vlinder05", "vlinder06", "fake"], name="name" - ) - dataset1b.gross_value_check( - obstype="temp", - lower_threshold=10.0, - upper_threshold=20.0, - whiteset=metobs_toolkit.WhiteSet(white_name_only), - use_mp=False, - ) - - outliers1b = dataset1b.outliersdf - - # test on station object - copy.deepcopy(dataset).get_station("vlinder05").gross_value_check( - obstype="temp", - lower_threshold=10.0, - upper_threshold=20.0, - whiteset=metobs_toolkit.WhiteSet(white_name_only), - ) - - # Test 2: MultiIndex with name and datetime - dataset2 = copy.deepcopy(dataset) - white_name_dt = ( - outliers.head(20) - .reset_index()[["name", "datetime"]] - .set_index(["name", "datetime"]) - .index - ) - dataset2.gross_value_check( - obstype="temp", - lower_threshold=10.0, - upper_threshold=20.0, - whiteset=metobs_toolkit.WhiteSet(white_name_dt), - use_mp=False, - ) - outliers2 = dataset2.outliersdf - - # Test 3: MultiIndex with obstype, name, and datetime - dataset3 = copy.deepcopy(dataset) - white_full = outliers.head(25).index - dataset3.gross_value_check( - obstype="temp", - lower_threshold=10.0, - upper_threshold=20.0, - whiteset=metobs_toolkit.WhiteSet(white_full), - use_mp=False, - ) - outliers3 = dataset3.outliersdf - - # Quick Verify that white-listed records are not in the outliers - for white_record in white_dt_only: - assert not any( - outliers1a.reset_index()["datetime"] == white_record - ), f"White-listed record {white_record} found in outliers (datetime only)" - - # Store results - results = { - "outliers_no_white": outliers, - "outliers_dt_only": outliers1a, - "outliers_name_only": outliers1b, - "outliers_name_dt": outliers2, - "outliers_full": outliers3, - } - - if overwrite_solution: - TestWhiteRecords.solutionfixer.create_solution( - solutiondata=results, - methodname=_method_name, - **TestWhiteRecords.solkwargs, - ) - - solutionobj = TestWhiteRecords.solutionfixer.get_solution( - methodname=_method_name, **TestWhiteRecords.solkwargs - ) - - for key in results: - assert_equality(results[key], solutionobj[key]) - - def test_all_qc_methods_with_whiteset(self): + def test_all_qc_methods_with_whiteset(self, import_dataset): """Test all QC methods on Dataset and Station with non-default whiteset. This test ensures that all QC methods can accept and work with a WhiteSet @@ -1243,9 +1865,7 @@ def test_all_qc_methods_with_whiteset(self): only that the methods execute successfully. """ # Get dataset - dataset = TestWhiteRecords.solutionfixer.get_solution( - **TestWhiteRecords.solkwargs, methodname="test_import_data" - ) + dataset = copy.deepcopy(import_dataset) # Create a non-default whiteset with various index structures # Create timestamps to whitelist @@ -1379,25 +1999,263 @@ def test_all_qc_methods_with_whiteset(self): assert True -# if __name__ == "__main__": -# pytest.main([__file__]) -# Run all methods with overwrite_solution=False -# test_breaking_dataset = TestBreakingDataset() -# test_breaking_dataset.test_import_data(overwrite_solution=False) -# test_breaking_dataset.test_apply_qc(overwrite_solution=False) -# test_breaking_dataset.test_qc_statistics(overwrite_solution=False) - -# test_demo_dataset = TestDemoDataset() -# test_demo_dataset.test_import_data(overwrite_solution=True) -# test_demo_dataset.test_buddy_check(overwrite_solution=False) -# test_demo_dataset.test_buddy_check_with_safety_nets(overwrite_solution=False) -# test_demo_dataset.test_buddy_check_with_safety_nets(overwrite_solution=False) -# test_demo_dataset.test_buddy_check_with_LCZ_safety_net(overwrite_solution=False) - -# Run white_records tests -# test_white_records = TestWhiteRecords() -# test_white_records.test_import_data(overwrite_solution=False) -# test_white_records.test_white_records_input_combinations(overwrite_solution=False) -# test_white_records.test_white_records_buddy_check_dataset(overwrite_solution=True) -# test_white_records.test_white_records_buddy_check_with_safety_nets_dataset(overwrite_solution=False) -# test_white_records.test_white_records_buddy_check_with_LCZ_safety_net_dataset(overwrite_solution=True) +class TestQCresult: + """Tests for the QCresult class methods.""" + + def _make_qcresult(self): + """Helper to create a simple QCresult for testing.""" + from metobs_toolkit.qcresult import QCresult + + dt_index = pd.date_range("2022-09-01", periods=5, freq="h", tz="UTC") + flags = pd.Series( + ["passed", "flagged", "passed", "flagged", "passed"], index=dt_index + ) + return QCresult( + checkname="gross_value", + checksettings={"lower": -15, "upper": 35}, + flags=flags, + detail="test detail", + ) + + def test_repr(self): + """Test __repr__ returns expected string.""" + qcr = self._make_qcresult() + assert "gross_value" in repr(qcr) + + def test_get_outlier_timestamps(self): + """Test that get_outlier_timestamps returns flagged timestamps.""" + qcr = self._make_qcresult() + outlier_ts = qcr.get_outlier_timestamps() + assert len(outlier_ts) == 2 # two flagged entries + assert isinstance(outlier_ts, pd.DatetimeIndex) + + def test_add_details_by_series(self): + """Test updating details by series.""" + qcr = self._make_qcresult() + dt_index = qcr.flags.index + detail_update = pd.Series( + ["updated detail 1", "updated detail 2"], + index=dt_index[:2], + ) + qcr.add_details_by_series(detail_update) + assert qcr.details.iloc[0] == "updated detail 1" + assert qcr.details.iloc[1] == "updated detail 2" + # Unchanged entries still have the original detail + assert qcr.details.iloc[2] == "test detail" + + def test_remap_timestamps(self): + """Test remap_timestamps remaps and drops unmapped entries.""" + qcr = self._make_qcresult() + old_index = qcr.flags.index + new_ts = old_index + pd.Timedelta("30min") + # Only map the first 3 timestamps, the last 2 should be dropped + mapping = {old_index[i]: new_ts[i] for i in range(3)} + + qcr.remap_timestamps(mapping) + + assert len(qcr.flags) == 3 + assert len(qcr.details) == 3 + assert qcr.flags.index[0] == new_ts[0] + + def test_create_outliersdf_subset(self): + """Test create_outliersdf with subset_to_outliers=True.""" + qcr = self._make_qcresult() + df = qcr.create_outliersdf(subset_to_outliers=True) + assert len(df) == 2 # only the flagged entries + assert "label" in df.columns + assert "details" in df.columns + + def test_create_outliersdf_all(self): + """Test create_outliersdf with subset_to_outliers=False.""" + qcr = self._make_qcresult() + df = qcr.create_outliersdf(subset_to_outliers=False) + assert len(df) == 5 # all entries + + def test_create_outliersdf_empty(self): + """Test create_outliersdf returns empty df when no outliers.""" + from metobs_toolkit.qcresult import QCresult + + dt_index = pd.date_range("2022-09-01", periods=3, freq="h", tz="UTC") + flags = pd.Series(["passed", "passed", "passed"], index=dt_index) + qcr = QCresult( + checkname="gross_value", + checksettings={}, + flags=flags, + ) + df = qcr.create_outliersdf(subset_to_outliers=True) + assert df.empty + + def test_init_invalid_index_raises(self): + """Test that non-DatetimeIndex raises TypeError.""" + from metobs_toolkit.qcresult import QCresult + + flags = pd.Series(["passed", "flagged"], index=[0, 1]) + with pytest.raises(TypeError, match="DatetimeIndex"): + QCresult(checkname="test", checksettings={}, flags=flags) + + +class TestConvertOutliersToGaps: + """Test convert_outliers_to_gaps at Dataset and Station level.""" + + @pytest.fixture(scope="class") + def dataset_with_outliers(self): + dataset = metobs_toolkit.Dataset() + dataset.import_data_from_file( + template_file=metobs_toolkit.demo_template, + input_metadata_file=metobs_toolkit.demo_metadatafile, + input_data_file=metobs_toolkit.demo_datafile, + ) + dataset.resample(target_freq="1h") + dataset.gross_value_check( + obstype="temp", + lower_threshold=-15.0, + upper_threshold=29.0, + use_mp=False, + ) + return dataset + + def test_dataset_has_outliers_before(self, dataset_with_outliers): + """Verify fixture has outliers.""" + dataset = copy.deepcopy(dataset_with_outliers) + assert not dataset.outliersdf.empty + + def test_convert_outliers_to_gaps_dataset(self, dataset_with_outliers): + """Test converting outliers to gaps removes outliers and creates gaps.""" + dataset = copy.deepcopy(dataset_with_outliers) + n_outliers_before = len(dataset.outliersdf) + assert n_outliers_before > 0 + + dataset.convert_outliers_to_gaps(obstype="temp") + + # After conversion, outliers for temp should be empty + if not dataset.outliersdf.empty: + # If non-empty, temp should not be present + assert "temp" not in dataset.outliersdf.index.get_level_values( + "obstype" + ).unique() + + def test_convert_outliers_to_gaps_station(self, dataset_with_outliers): + """Test converting outliers at station level.""" + dataset = copy.deepcopy(dataset_with_outliers) + station = dataset.stations[0] + # Ensure station has outliers + sensor = station.get_sensor("temp") + if not sensor.outliersdf.empty: + station.convert_outliers_to_gaps(obstype="temp") + assert sensor.outliersdf.empty + + +class TestQCStats: + """Test get_qc_stats and get_qc_freq_statistics.""" + + @pytest.fixture(scope="class") + def dataset_after_qc(self): + dataset = metobs_toolkit.Dataset() + dataset.import_data_from_file( + template_file=metobs_toolkit.demo_template, + input_metadata_file=metobs_toolkit.demo_metadatafile, + input_data_file=metobs_toolkit.demo_datafile, + ) + dataset.resample(target_freq="1h") + dataset.gross_value_check( + obstype="temp", + lower_threshold=-15.0, + upper_threshold=29.0, + use_mp=False, + ) + dataset.persistence_check(obstype="temp", use_mp=False) + return dataset + + def test_get_qc_stats_dict(self, dataset_after_qc): + """Test get_qc_stats returns dict with expected keys when make_plot=False.""" + dataset = copy.deepcopy(dataset_after_qc) + result = dataset.get_qc_stats(obstype="temp", make_plot=False) + assert isinstance(result, dict) + assert "all_labels" in result + assert "outlier_labels" in result + assert "per_check_labels" in result + assert not result["all_labels"].empty + assert not result["per_check_labels"].empty + + def test_get_qc_freq_statistics_sensor(self, dataset_after_qc): + """Test SensorData.get_qc_freq_statistics returns expected structure.""" + dataset = copy.deepcopy(dataset_after_qc) + station = dataset.stations[0] + sensor = station.get_sensor("temp") + stats = sensor.get_qc_freq_statistics() + assert isinstance(stats, pd.Series) + assert stats.name == "counts" + # MultiIndex with checkname and flag levels + assert stats.index.names == ["checkname", "flag"] + # Should have entries for gross_value and persistence + checknames = stats.index.get_level_values("checkname").unique() + assert "gross_value" in checknames + assert "persistence" in checknames + + def test_get_qc_stats_missing_obstype(self, dataset_after_qc): + """Test get_qc_stats returns None for nonexistent obstype.""" + dataset = copy.deepcopy(dataset_after_qc) + result = dataset.get_qc_stats(obstype="nonexistent_obs", make_plot=False) + assert result is None + + + + +if __name__ == "__main__": + # When running outside pytest + OVERWRITE = False + # test_breaking_dataset = TestBreakingDataset() + # Manually call fixtures and pass results to tests + # Access the original unwrapped function via __wrapped__ + # imported_dataset = test_breaking_dataset.import_dataset.__wrapped__(test_breaking_dataset) + # qc_dataset = test_breaking_dataset.regular_qc_on_dataset.__wrapped__( + # test_breaking_dataset, imported_dataset + # ) + + # test_breaking_dataset.test_qc_labels(qc_dataset) + # test_breaking_dataset.test_qc_with_solution(qc_dataset, overwrite_solution=False) + # test_breaking_dataset.test_qc_stats_check(qc_dataset, overwrite_solution=OVERWRITE) + # test_breaking_dataset.test_make_plot_by_label_with_outliers(qc_dataset) + # test_breaking_dataset.test_get_info(qc_dataset) + + test_buddy_check = TestBuddyCheck() + buddycheckdataset = test_buddy_check.import_dataset.__wrapped__( + test_buddy_check + ) + # test_buddy_check.test_import_data(buddycheckdataset, overwrite_solution=OVERWRITE) + + # test_buddy_check.test_buddy_check_one_iteration(buddycheckdataset, overwrite_solution=OVERWRITE) + # test_buddy_check.test_buddy_check_more_iterations(buddycheckdataset, overwrite_solution=OVERWRITE) + # test_buddy_check.test_buddy_check_no_outliers(buddycheckdataset) + # test_buddy_check.test_buddy_check_with_big_radius( + # buddycheckdataset, overwrite_solution=OVERWRITE + # ) + # test_buddy_check.test_buddy_check_with_safety_nets(buddycheckdataset, overwrite_solution=OVERWRITE) + # test_buddy_check.test_buddy_check_with_safety_nets_missing_min_sample_size(buddycheckdataset) + + + # test_demo_dataset = TestDemoDataset() + # imported_demo_dataset = test_demo_dataset.import_dataset.__wrapped__( + # test_demo_dataset + # ) + # test_demo_dataset.test_import_data(imported_demo_dataset, overwrite_solution=OVERWRITE) + # test_demo_dataset.test_qc_when_some_stations_missing_obs(imported_demo_dataset) + + # Run white_records tests + # test_white_records = TestWhiteRecords() + # imported_wr_dataset = test_white_records.import_dataset.__wrapped__(test_white_records) + # dataset_with_outliers = test_white_records.dataset_with_outliers.__wrapped__(test_white_records, imported_wr_dataset) + + # test_white_records.test_whiterecords_reprs() + # test_white_records.test_import_data(imported_wr_dataset, overwrite_solution=OVERWRITE) + # test_white_records.test_whiteset_datetime_only(dataset_with_outliers, overwrite_solution=OVERWRITE) + # test_white_records.test_whiteset_name_only(dataset_with_outliers, overwrite_solution=OVERWRITE) + # test_white_records.test_whiteset_name_only_on_station(dataset_with_outliers) + # test_white_records.test_whiteset_name_and_datetime(dataset_with_outliers, overwrite_solution=OVERWRITE) + # test_white_records.test_whiteset_full_multiindex(dataset_with_outliers, overwrite_solution=OVERWRITE) + # test_white_records.test_white_dt_only_records_buddy_check(imported_wr_dataset, overwrite_solution=OVERWRITE) + # test_white_records.test_white_multi_idx_records_buddy_check(imported_wr_dataset, overwrite_solution=OVERWRITE) + # test_white_records.test_white_dt_only_records_buddy_check_with_safety_nets(imported_wr_dataset, overwrite_solution=OVERWRITE) + # test_white_records.test_white_multi_idx_records_buddy_check_with_safety_nets(imported_wr_dataset, overwrite_solution=OVERWRITE) + # test_white_records.test_whiterecords_get_info() + # test_white_records.test_all_qc_methods_with_whiteset(imported_wr_dataset) diff --git a/tests/test_to_xr.py b/tests/test_to_xr.py index 3cecc94f0..7e611b226 100644 --- a/tests/test_to_xr.py +++ b/tests/test_to_xr.py @@ -16,13 +16,13 @@ # solutionfolder solutionsdir = libfolder.joinpath("toolkit_tests").joinpath("pkled_solutions") -from solutionclass import SolutionFixer, assert_equality, datadir +from solutionclass import SolutionFixer2, assert_equality, datadir class TestDemoData: # to pass to the solutionfixer solkwargs = {"testfile": Path(__file__).name, "classname": "testdemodata"} - solutionfixer = SolutionFixer(solutiondir=solutionsdir) + solutionfixer = SolutionFixer2(solutiondir=solutionsdir) def test_to_xr_on_station(self): dataset = metobs_toolkit.Dataset()