{ "cells": [ { "cell_type": "markdown", "id": "d8ba1d9a", "metadata": {}, "source": [ "\n", "# Getting Started: Daily & Monthly Flux Footprints\n", "\n", "This notebook shows how to use **`ffp_daily_monthly_helper.py`** to:\n", "1) load AmeriFlux half‑hourly data, \n", "2) compute an xarray-based footprint climatology, \n", "3) summarize to daily/monthly periods (optionally ET‑weighted), and \n", "4) export **80%** source‑area contours to a GeoPackage or rasters to GeoTIFF.\n", "\n", "References: `ffp_daily_monthly_helper.py`【8†source】 and `ffp_xr.py`【9†source】.\n" ] }, { "cell_type": "markdown", "id": "96c9ab5d", "metadata": {}, "source": [ "\n", "## Requirements\n", "\n", "This workflow uses: `numpy`, `pandas`, `xarray`, `matplotlib`, and for exports `geopandas`, `pyproj`, `shapely`, `rasterio`.\n" ] }, { "cell_type": "code", "execution_count": 1, "id": "04085113", "metadata": { "ExecuteTime": { "end_time": "2025-08-30T01:49:43.629173Z", "start_time": "2025-08-30T01:49:43.613147Z" } }, "outputs": [], "source": [ "\n", "# --- Imports ---\n", "import os\n", "from pathlib import Path\n", "import matplotlib.pyplot as plt\n", "import pandas as pd\n", "import numpy as np\n", "\n", "import xarray as xr\n", "import sys\n", "\n", "sys.path.append(\"../../src\")\n", "\n", "from fluxfootprints import (\n", " load_config,\n", " load_amf_df,\n", " build_climatology,\n", " summarize_periods,\n", " export_contours_gpkg,\n", " export_rasters_geotiff,\n", " export_contour_stats_csv,\n", ")" ] }, { "cell_type": "markdown", "id": "fbb533d5", "metadata": {}, "source": [ "\n", "## 1) Set Paths\n", "\n", "Update these to point at your AmeriFlux config (`.ini`) and half‑hourly `.csv`.\n" ] }, { "cell_type": "code", "execution_count": 2, "id": "9487e5ba", "metadata": { "ExecuteTime": { "end_time": "2025-08-30T01:35:58.080725Z", "start_time": "2025-08-30T01:35:58.054343Z" } }, "outputs": [], "source": [ "\n", "ini_path = Path(\"./input_data/US-UTE.ini\")\n", "csv_path = Path(\"./input_data/US-UTE_HH_202406241430_202409251400.csv\")\n", "\n", "assert ini_path.exists(), f\"Config not found: {ini_path}\"\n", "assert csv_path.exists(), f\"CSV not found: {csv_path}\"\n", "\n", "out_dir = Path(\"ffp_outputs\")\n", "out_dir.mkdir(parents=True, exist_ok=True)\n" ] }, { "cell_type": "markdown", "id": "3805d386", "metadata": {}, "source": [ "\n", "## 2) Load Configuration & Data\n", "`load_config` parses a minimal INI for site metadata and column mappings. \n", "`load_amf_df` reads the CSV, parses timestamps, sets the index to time, and replaces missing value sentinels【8†source】.\n" ] }, { "cell_type": "code", "execution_count": 3, "id": "c0cb0176", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'station_latitude': 37.7353,\n", " 'station_longitude': -111.5708,\n", " 'missing_data_value': -9999.0,\n", " 'skiprows': 0,\n", " 'date_parser': '%Y%m%d%H%M',\n", " 'ts_col': 'TIMESTAMP_START',\n", " 'wind_dir_col': 'WD',\n", " 'wind_spd_col': 'WS',\n", " 'ustar_col': 'USTAR',\n", " 'mo_length_col': 'MO_LENGTH',\n", " 'v_sigma_col': 'V_SIGMA'}" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\n", "cfg = load_config(str(ini_path))\n", "cfg\n" ] }, { "cell_type": "code", "execution_count": 4, "id": "0381143d", "metadata": {}, "outputs": [ { "data": { "application/vnd.microsoft.datawrangler.viewer.v0+json": { "columns": [ { "name": "TIMESTAMP_START", "rawType": "datetime64[ns]", "type": "datetime" }, { "name": "datetime_start", "rawType": "object", "type": "string" }, { "name": "TIMESTAMP_END", "rawType": "int64", "type": "integer" }, { "name": "CO2", "rawType": "float64", "type": "float" }, { "name": "CO2_SIGMA", "rawType": "float64", "type": "float" }, { "name": "H2O", "rawType": "float64", "type": "float" }, { "name": "H2O_SIGMA", "rawType": "float64", "type": "float" }, { "name": "FC", "rawType": "float64", "type": "float" }, { "name": "FC_SSITC_TEST", "rawType": "float64", "type": "float" }, { "name": "LE", "rawType": "float64", "type": "float" }, { "name": "LE_SSITC_TEST", "rawType": "float64", "type": "float" }, { "name": "ET", "rawType": "float64", "type": "float" }, { "name": "ET_SSITC_TEST", "rawType": "int64", "type": "integer" }, { "name": "H", "rawType": "float64", "type": "float" }, { "name": "H_SSITC_TEST", "rawType": "float64", "type": "float" }, { "name": "G", "rawType": "float64", "type": "float" }, { "name": "SG", "rawType": "float64", "type": "float" }, { "name": "FETCH_MAX", "rawType": "float64", "type": "float" }, { "name": "FETCH_90", "rawType": "float64", "type": "float" }, { "name": "FETCH_55", "rawType": "float64", "type": "float" }, { "name": "FETCH_40", "rawType": "float64", "type": "float" }, { "name": "WD", "rawType": "float64", "type": "float" }, { "name": "WS", "rawType": "float64", "type": "float" }, { "name": "WS_MAX", "rawType": "float64", "type": "float" }, { "name": "USTAR", "rawType": "float64", "type": "float" }, { "name": "ZL", "rawType": "float64", "type": "float" }, { "name": "TAU", "rawType": "float64", "type": "float" }, { "name": "TAU_SSITC_TEST", "rawType": "float64", "type": "float" }, { "name": "MO_LENGTH", "rawType": "float64", "type": "float" }, { "name": "U", "rawType": "float64", "type": "float" }, { "name": "U_SIGMA", "rawType": "float64", "type": "float" }, { "name": "V", "rawType": "float64", "type": "float" }, { "name": "V_SIGMA", "rawType": "float64", "type": "float" }, { "name": "W", "rawType": "float64", "type": "float" }, { "name": "W_SIGMA", "rawType": "float64", "type": "float" }, { "name": "PA", "rawType": "float64", "type": "float" }, { "name": "TA_1_1_1", "rawType": "float64", "type": "float" }, { "name": "RH_1_1_1", "rawType": "float64", "type": "float" }, { "name": "T_DP_1_1_1", "rawType": "float64", "type": "float" }, { "name": "VPD", "rawType": "float64", "type": "float" }, { "name": "T_SONIC", "rawType": "float64", "type": "float" }, { "name": "T_SONIC_SIGMA", "rawType": "float64", "type": "float" }, { "name": "TS_1_1_1", "rawType": "float64", "type": "float" }, { "name": "SWC_1_1_1", "rawType": "float64", "type": "float" }, { "name": "ALB", "rawType": "float64", "type": "float" }, { "name": "NETRAD", "rawType": "float64", "type": "float" }, { "name": "SW_IN", "rawType": "float64", "type": "float" }, { "name": "SW_OUT", "rawType": "float64", "type": "float" }, { "name": "LW_IN", "rawType": "float64", "type": "float" }, { "name": "LW_OUT", "rawType": "float64", "type": "float" }, { "name": "P", "rawType": "float64", "type": "float" }, { "name": "file_no", "rawType": "float64", "type": "float" }, { "name": "TA_1_2_1", "rawType": "float64", "type": "float" }, { "name": "RH_1_2_1", "rawType": "float64", "type": "float" }, { "name": "T_DP_1_2_1", "rawType": "float64", "type": "float" }, { "name": "TA_1_3_1", "rawType": "float64", "type": "float" }, { "name": "RH_1_3_1", "rawType": "float64", "type": "float" }, { "name": "T_DP_1_3_1", "rawType": "float64", "type": "float" }, { "name": "TA_1_4_1", "rawType": "float64", "type": "float" }, { "name": "PBLH_F", "rawType": "float64", "type": "float" }, { "name": "TS_2_1_1", "rawType": "float64", "type": "float" }, { "name": "SWC_2_1_1", "rawType": "float64", "type": "float" } ], "ref": "8fd1ea10-d44b-4776-91d3-de9c966699f7", "rows": [ [ "2024-06-24 14:30:00", "2024-06-24 14:30:00", "202406241500", "427.0199", "0.6281331", "17.26862", "1.01929", "0.0692101", null, "156.4085", null, "0.2317847", "1", "68.15252", null, "74.8003", "46.48377", "20.10258", "55.5867", "28.58118", "21.63193", "83.82242", "4.118659", "11.398", "0.2854266", "-0.1000675", "-0.07743155", null, "-21.72663", "3.943613", "1.289412", "0.0", "1.243537", "0.0", "0.5457488", "83.32956", "30.37961", "32.53116", "12.07391", "28.36929", "31.6011", "0.7804169", "22.91248", null, "30.47296", "535.9557", "901.6483", "279.5316", "404.7657", "490.9268", "0.0", "2.0", "29.95141", "33.26877", "12.0526", "30.32464", "33.45364", "12.46181", "30.06976", "1665.467", "25.72815", "22.44161" ], [ "2024-06-24 15:00:00", "2024-06-24 15:00:00", "202406241530", "425.9499", "1.019297", "15.18936", "0.7030515", "0.2854458", null, "138.3092", null, "0.20497", "1", "43.44571", null, "-11.26564", "-34.50821", "19.01147", "52.56938", "27.02798", "20.45655", "84.50763", "3.128728", "8.11528", "0.2287946", "-0.130162", "-0.04976684", null, "-16.70326", "2.949647", "1.087555", "0.0", "1.085609", "3.72529e-09", "0.4690718", "83.3021", "30.43124", "28.59812", "10.17519", "30.22208", "31.47819", "0.6128186", "22.98583", null, "31.01464", "404.8066", "711.1035", "227.3555", "407.2817", "486.2231", "0.0", "2.0", "30.02516", "29.22197", "10.15524", "30.35956", "29.77183", "10.72635", "30.13765", "1765.935", "25.52736", "22.41975" ], [ "2024-06-24 15:30:00", "2024-06-24 15:30:00", "202406241600", "426.4163", "1.965228", "14.87533", "0.8080265", "1.081928", null, "154.1153", null, "0.2284687", "2", "30.66234", null, "-41.83331", "-63.57699", "24.54221", "67.84465", "34.89815", "26.41252", "98.6839", "2.669845", "6.715653", "0.2784614", "-0.05601415", "-0.07362495", "1.0", "-38.81393", "2.517204", "0.9474617", "0.0", "0.9015959", "3.72529e-09", "0.4148929", "83.27771", "30.85518", "27.38244", "9.86806", "31.03824", "31.67058", "0.7545337", "23.08474", null, "29.70208", "292.8351", "546.4703", "175.4796", "408.3091", "486.4648", "0.0", "2.0", "30.24634", "28.28498", "9.838229", "30.69433", "28.63222", "10.41335", "30.40344", "1495.735", "25.12511", "22.32785" ], [ "2024-06-24 16:00:00", "2024-06-24 16:00:00", "202406241630", "426.0534", "2.665907", "15.6114", "1.002919", "0.5196642", null, "135.5618", null, "0.2010524", "2", "35.2179", null, "-35.91724", "-55.3435", "25.22658", "69.73144", "35.87147", "27.14916", "99.19427", "2.552504", "7.758736", "0.307955", "-0.04485384", "-0.08986875", null, "-48.47143", "2.415924", "0.9642583", "0.0", "0.8306037", "7.450581e-09", "0.4433303", "83.25893", "31.35262", "27.86196", "10.56774", "31.70765", "32.24849", "0.7409122", "23.06612", null, "31.21184", "331.988", "619.2519", "209.6434", "410.9713", "488.5918", "0.0", "2.0", "30.75179", "28.75255", "10.53822", "31.14621", "29.16225", "11.09066", "30.90061", "1491.062", "24.63557", "22.18172" ], [ "2024-06-24 16:30:00", "2024-06-24 16:30:00", "202406241700", "427.8476", "1.102921", "15.21034", "0.7030841", "1.147608", null, "95.06287", null, "0.1407727", "2", "-13.31553", null, "-56.61974", "-71.7462", "26.52178", "74.34869", "37.88823", "28.65891", "115.6484", "1.786293", "6.475121", "0.3013755", "0.007892104", "-0.08651999", null, "275.4816", "1.65628", "0.8001992", "0.0", "0.6585423", "-9.313226e-10", "0.4075378", "83.24686", "29.68962", "29.8947", "10.19186", "28.14444", "30.6135", "0.5463738", "22.7616", null, "28.93153", "79.40314", "209.7798", "67.09201", "404.4651", "467.7497", "0.0", "2.0", "29.16274", "30.77158", "10.16581", "29.57434", "30.96792", "10.63069", "29.3051", "341.9711", "24.14865", "22.03216" ] ], "shape": { "columns": 61, "rows": 5 } }, "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
datetime_startTIMESTAMP_ENDCO2CO2_SIGMAH2OH2O_SIGMAFCFC_SSITC_TESTLELE_SSITC_TEST...TA_1_2_1RH_1_2_1T_DP_1_2_1TA_1_3_1RH_1_3_1T_DP_1_3_1TA_1_4_1PBLH_FTS_2_1_1SWC_2_1_1
TIMESTAMP_START
2024-06-24 14:30:002024-06-24 14:30:00202406241500427.01990.62813317.268621.0192900.069210NaN156.40850NaN...29.9514133.2687712.05260030.3246433.4536412.4618130.069761665.467025.7281522.44161
2024-06-24 15:00:002024-06-24 15:00:00202406241530425.94991.01929715.189360.7030520.285446NaN138.30920NaN...30.0251629.2219710.15524030.3595629.7718310.7263530.137651765.935025.5273622.41975
2024-06-24 15:30:002024-06-24 15:30:00202406241600426.41631.96522814.875330.8080261.081928NaN154.11530NaN...30.2463428.284989.83822930.6943328.6322210.4133530.403441495.735025.1251122.32785
2024-06-24 16:00:002024-06-24 16:00:00202406241630426.05342.66590715.611401.0029190.519664NaN135.56180NaN...30.7517928.7525510.53822031.1462129.1622511.0906630.900611491.062024.6355722.18172
2024-06-24 16:30:002024-06-24 16:30:00202406241700427.84761.10292115.210340.7030841.147608NaN95.06287NaN...29.1627430.7715810.16581029.5743430.9679210.6306929.30510341.971124.1486522.03216
\n", "

5 rows × 61 columns

\n", "
" ], "text/plain": [ " datetime_start TIMESTAMP_END CO2 CO2_SIGMA \\\n", "TIMESTAMP_START \n", "2024-06-24 14:30:00 2024-06-24 14:30:00 202406241500 427.0199 0.628133 \n", "2024-06-24 15:00:00 2024-06-24 15:00:00 202406241530 425.9499 1.019297 \n", "2024-06-24 15:30:00 2024-06-24 15:30:00 202406241600 426.4163 1.965228 \n", "2024-06-24 16:00:00 2024-06-24 16:00:00 202406241630 426.0534 2.665907 \n", "2024-06-24 16:30:00 2024-06-24 16:30:00 202406241700 427.8476 1.102921 \n", "\n", " H2O H2O_SIGMA FC FC_SSITC_TEST LE \\\n", "TIMESTAMP_START \n", "2024-06-24 14:30:00 17.26862 1.019290 0.069210 NaN 156.40850 \n", "2024-06-24 15:00:00 15.18936 0.703052 0.285446 NaN 138.30920 \n", "2024-06-24 15:30:00 14.87533 0.808026 1.081928 NaN 154.11530 \n", "2024-06-24 16:00:00 15.61140 1.002919 0.519664 NaN 135.56180 \n", "2024-06-24 16:30:00 15.21034 0.703084 1.147608 NaN 95.06287 \n", "\n", " LE_SSITC_TEST ... TA_1_2_1 RH_1_2_1 T_DP_1_2_1 \\\n", "TIMESTAMP_START ... \n", "2024-06-24 14:30:00 NaN ... 29.95141 33.26877 12.052600 \n", "2024-06-24 15:00:00 NaN ... 30.02516 29.22197 10.155240 \n", "2024-06-24 15:30:00 NaN ... 30.24634 28.28498 9.838229 \n", "2024-06-24 16:00:00 NaN ... 30.75179 28.75255 10.538220 \n", "2024-06-24 16:30:00 NaN ... 29.16274 30.77158 10.165810 \n", "\n", " TA_1_3_1 RH_1_3_1 T_DP_1_3_1 TA_1_4_1 PBLH_F \\\n", "TIMESTAMP_START \n", "2024-06-24 14:30:00 30.32464 33.45364 12.46181 30.06976 1665.4670 \n", "2024-06-24 15:00:00 30.35956 29.77183 10.72635 30.13765 1765.9350 \n", "2024-06-24 15:30:00 30.69433 28.63222 10.41335 30.40344 1495.7350 \n", "2024-06-24 16:00:00 31.14621 29.16225 11.09066 30.90061 1491.0620 \n", "2024-06-24 16:30:00 29.57434 30.96792 10.63069 29.30510 341.9711 \n", "\n", " TS_2_1_1 SWC_2_1_1 \n", "TIMESTAMP_START \n", "2024-06-24 14:30:00 25.72815 22.44161 \n", "2024-06-24 15:00:00 25.52736 22.41975 \n", "2024-06-24 15:30:00 25.12511 22.32785 \n", "2024-06-24 16:00:00 24.63557 22.18172 \n", "2024-06-24 16:30:00 24.14865 22.03216 \n", "\n", "[5 rows x 61 columns]" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Time span: 2024-06-24 14:30:00 → 2024-08-31 23:30:00 | rows: 3283\n" ] } ], "source": [ "\n", "df = load_amf_df(str(csv_path), cfg)\n", "display(df.head())\n", "print(\"Time span:\", df.index.min(), \"→\", df.index.max(), \"| rows:\", len(df))\n" ] }, { "cell_type": "code", "execution_count": 5, "id": "987bc43d", "metadata": {}, "outputs": [], "source": [ "df.columns\n", "df = df.rename(columns={\"ET\": \"et\", \n", " \"WD\": \"wind_dir\",\n", " \"USTAR\": \"ustar\",\n", " \"V_SIMGA\": \"sigmav\",\n", " \"MO_LENGTH\": \"ol\",\n", " \"WS\": \"umean\"\n", " })\n", "\n" ] }, { "cell_type": "markdown", "id": "48ef2dd0", "metadata": {}, "source": [ "\n", "## 3) Build the Footprint Climatology\n", "`build_climatology` renames expected AMF columns (WD, WS, USTAR, MO_LENGTH, V_SIGMA) to the solver’s names and runs the **xarray-based** climatology (`ffp_xr.ffp_climatology_new.run()`), filling `clim.f_2d` with per‑timestep footprints【8†source】【9†source】.\n" ] }, { "cell_type": "code", "execution_count": 6, "id": "ab09093e", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/ink/Documents/github/footprints/.venv/lib/python3.13/site-packages/xarray/computation/apply_ufunc.py:818: RuntimeWarning: overflow encountered in exp\n", " result_data = func(*input_data)\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\n", "clim = build_climatology(\n", " df,\n", " model_type=\"ffp_xr\",\n", " crop_height=0.2,\n", " atm_bound_height=2000.0,\n", " inst_height=2.5,\n", " dx=2.0, dy=2.0,\n", " domain=(-100.0, 100.0, -100.0, 100.0), # smaller domain for a quick start\n", " smooth_data=True,\n", ")\n", "clim\n" ] }, { "cell_type": "code", "execution_count": 8, "id": "187818ee", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "clim\n" ] }, { "cell_type": "markdown", "id": "a4d51fb9", "metadata": {}, "source": [ "\n", "## 4) Summarize to Daily / Monthly\n", "- `summarize_periods` normalizes each time slice so that the sum over x,y = 1 (optional), then computes:\n", " - **Daily/Monthly means**, and\n", " - **ET‑weighted** versions using ET derived from LE (mm/hr = LE / 680.6)【8†source】.\n" ] }, { "cell_type": "code", "execution_count": 9, "id": "44b94593", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "SummaryResult(f_daily_mean= Size: 6MB\n", "array([[[1.22133275e-09, 1.54284671e-09, 2.10803775e-09, ...,\n", " 8.30898614e-06, 8.23275774e-06, 8.17979998e-06],\n", " [1.13776558e-09, 1.44334745e-09, 1.98239655e-09, ...,\n", " 8.57671304e-06, 8.49246235e-06, 8.43403378e-06],\n", " [1.01873923e-09, 1.30100859e-09, 1.80164122e-09, ...,\n", " 8.97548177e-06, 8.87883822e-06, 8.81196891e-06],\n", " ...,\n", " [3.25174404e-06, 3.35682780e-06, 3.51763315e-06, ...,\n", " 1.28070328e-06, 1.29398810e-06, 1.30347344e-06],\n", " [3.22486971e-06, 3.32879159e-06, 3.48793992e-06, ...,\n", " 1.16787147e-06, 1.18063667e-06, 1.18987328e-06],\n", " [3.20613849e-06, 3.30931687e-06, 3.46740295e-06, ...,\n", " 1.09475586e-06, 1.10703542e-06, 1.11601096e-06]],\n", "\n", " [[1.15103800e-06, 1.15059900e-06, 1.14934054e-06, ...,\n", " 7.97468280e-06, 7.77863838e-06, 7.64659174e-06],\n", " [1.19558707e-06, 1.19596863e-06, 1.19581237e-06, ...,\n", " 8.14070579e-06, 7.93939884e-06, 7.80403349e-06],\n", " [1.26191575e-06, 1.26368715e-06, 1.26541982e-06, ...,\n", " 8.39046570e-06, 8.18159272e-06, 8.04146537e-06],\n", "...\n", " 4.49748887e-10, 6.24456658e-10, 7.66454676e-10],\n", " [1.49880638e-06, 1.51095840e-06, 1.53495395e-06, ...,\n", " 2.42229213e-10, 3.40609554e-10, 4.21173368e-10],\n", " [1.42956370e-06, 1.44451855e-06, 1.47286339e-06, ...,\n", " 1.47767846e-10, 2.10100549e-10, 2.61476305e-10]],\n", "\n", " [[1.85041475e-06, 1.82331674e-06, 1.78287216e-06, ...,\n", " 2.03457640e-06, 2.05677485e-06, 2.07140741e-06],\n", " [1.96165874e-06, 1.93443774e-06, 1.89369404e-06, ...,\n", " 2.14374724e-06, 2.16451882e-06, 2.17787826e-06],\n", " [2.13177380e-06, 2.10453486e-06, 2.06358213e-06, ...,\n", " 2.30900867e-06, 2.32683089e-06, 2.33773728e-06],\n", " ...,\n", " [4.14635823e-06, 4.12749842e-06, 4.09849497e-06, ...,\n", " 3.16821632e-08, 3.41648714e-08, 3.58930493e-08],\n", " [3.87314374e-06, 3.85321783e-06, 3.82294380e-06, ...,\n", " 2.51107354e-08, 2.71938828e-08, 2.86483001e-08],\n", " [3.69373317e-06, 3.67331328e-06, 3.64250261e-06, ...,\n", " 2.11934315e-08, 2.30265031e-08, 2.43091856e-08]]],\n", " shape=(69, 101, 101))\n", "Coordinates:\n", " * x (x) float64 808B -100.0 -98.0 -96.0 -94.0 ... 94.0 96.0 98.0 100.0\n", " * y (y) float64 808B -100.0 -98.0 -96.0 -94.0 ... 94.0 96.0 98.0 100.0\n", " * time (time) datetime64[ns] 552B 2024-06-24 2024-06-25 ... 2024-08-31, f_monthly_mean= Size: 245kB\n", "array([[[4.43607514e-06, 4.49518980e-06, 4.58165723e-06, ...,\n", " 5.81028141e-06, 5.76453593e-06, 5.73259031e-06],\n", " [4.54609502e-06, 4.60817760e-06, 4.69903196e-06, ...,\n", " 6.00840881e-06, 5.95832909e-06, 5.92340676e-06],\n", " [4.71032468e-06, 4.77695915e-06, 4.87454549e-06, ...,\n", " 6.30695257e-06, 6.25011248e-06, 6.21055157e-06],\n", " ...,\n", " [2.90918228e-06, 2.97653543e-06, 3.07640164e-06, ...,\n", " 6.36071803e-07, 6.32400963e-07, 6.30301886e-07],\n", " [2.84637841e-06, 2.91039205e-06, 3.00526103e-06, ...,\n", " 5.89027009e-07, 5.85025653e-07, 5.82731887e-07],\n", " [2.80342139e-06, 2.86520802e-06, 2.95675311e-06, ...,\n", " 5.58839095e-07, 5.54574866e-07, 5.52121116e-07]],\n", "\n", " [[2.92733750e-06, 2.98460289e-06, 3.07054863e-06, ...,\n", " 7.08663925e-06, 7.02590296e-06, 6.98334456e-06],\n", " [2.98541001e-06, 3.04423288e-06, 3.13247651e-06, ...,\n", " 7.32587565e-06, 7.25975199e-06, 7.21350727e-06],\n", " [3.07188188e-06, 3.13311979e-06, 3.22492196e-06, ...,\n", " 7.68687270e-06, 7.61239700e-06, 7.56044403e-06],\n", "...\n", " 1.27437637e-06, 1.24770158e-06, 1.22948334e-06],\n", " [3.11748833e-06, 3.16669834e-06, 3.23859579e-06, ...,\n", " 1.22449029e-06, 1.19961939e-06, 1.18260980e-06],\n", " [3.04804148e-06, 3.09485012e-06, 3.16313815e-06, ...,\n", " 1.19140011e-06, 1.16771524e-06, 1.15150048e-06]],\n", "\n", " [[3.75125693e-06, 3.78804899e-06, 3.84239907e-06, ...,\n", " 6.13296950e-06, 6.03893913e-06, 5.97464821e-06],\n", " [3.85903608e-06, 3.89775561e-06, 3.95480995e-06, ...,\n", " 6.31270532e-06, 6.21364053e-06, 6.14597075e-06],\n", " [4.02049175e-06, 4.06242956e-06, 4.12395969e-06, ...,\n", " 6.58329052e-06, 6.47656758e-06, 6.40376026e-06],\n", " ...,\n", " [3.48856150e-06, 3.55186667e-06, 3.64437717e-06, ...,\n", " 5.85781305e-07, 5.76383706e-07, 5.70088220e-07],\n", " [3.38892620e-06, 3.44776165e-06, 3.53355783e-06, ...,\n", " 5.59046057e-07, 5.49984694e-07, 5.43914749e-07],\n", " [3.32117774e-06, 3.37704177e-06, 3.45838181e-06, ...,\n", " 5.41628486e-07, 5.32788279e-07, 5.26866593e-07]]],\n", " shape=(3, 101, 101))\n", "Coordinates:\n", " * x (x) float64 808B -100.0 -98.0 -96.0 -94.0 ... 94.0 96.0 98.0 100.0\n", " * y (y) float64 808B -100.0 -98.0 -96.0 -94.0 ... 94.0 96.0 98.0 100.0\n", " * time (time) datetime64[ns] 24B 2024-06-01 2024-07-01 2024-08-01, f_daily_et_weighted= Size: 6MB\n", "array([[[1.04215619e-09, 1.31650220e-09, 1.79877646e-09, ...,\n", " 1.13395051e-06, 1.09022634e-06, 1.06151641e-06],\n", " [9.70848810e-10, 1.23160006e-09, 1.69156755e-09, ...,\n", " 1.15568681e-06, 1.11117641e-06, 1.08195665e-06],\n", " [8.69284314e-10, 1.11014313e-09, 1.53733006e-09, ...,\n", " 1.18805533e-06, 1.14236111e-06, 1.11237337e-06],\n", " ...,\n", " [4.08983297e-06, 4.21855826e-06, 4.41573766e-06, ...,\n", " 1.65706753e-06, 1.65728200e-06, 1.65925195e-06],\n", " [4.05414158e-06, 4.18154790e-06, 4.37690139e-06, ...,\n", " 1.53008442e-06, 1.52883963e-06, 1.52996708e-06],\n", " [4.02935954e-06, 4.15593653e-06, 4.35014292e-06, ...,\n", " 1.44771187e-06, 1.44533047e-06, 1.44578339e-06]],\n", "\n", " [[8.49526946e-07, 8.81184920e-07, 9.28373607e-07, ...,\n", " 6.66743087e-06, 6.54603450e-06, 6.46342967e-06],\n", " [8.50445223e-07, 8.82703835e-07, 9.30826961e-07, ...,\n", " 6.85038471e-06, 6.72467546e-06, 6.63927935e-06],\n", " [8.51379768e-07, 8.84511025e-07, 9.33994498e-07, ...,\n", " 7.12755393e-06, 6.99540654e-06, 6.90583761e-06],\n", "...\n", " 9.73756514e-12, 1.29532070e-11, 1.55243001e-11],\n", " [3.22863476e-06, 3.23711326e-06, 3.26147135e-06, ...,\n", " 5.43276230e-12, 7.28609228e-12, 8.77624886e-12],\n", " [3.06754439e-06, 3.08180096e-06, 3.11521796e-06, ...,\n", " 3.42985430e-12, 4.63097538e-12, 5.60124004e-12]],\n", "\n", " [[3.82065711e-06, 3.76341982e-06, 3.67769912e-06, ...,\n", " 2.14109202e-06, 2.19948773e-06, 2.23774636e-06],\n", " [4.04841732e-06, 3.99096070e-06, 3.90468064e-06, ...,\n", " 2.27575169e-06, 2.33189689e-06, 2.36818241e-06],\n", " [4.39668243e-06, 4.33922673e-06, 4.25258186e-06, ...,\n", " 2.47827205e-06, 2.52986421e-06, 2.56239917e-06],\n", " ...,\n", " [9.91420533e-06, 9.85795432e-06, 9.77120886e-06, ...,\n", " 6.04961676e-09, 6.53249995e-09, 6.86930193e-09],\n", " [9.24718451e-06, 9.18811624e-06, 9.09796026e-06, ...,\n", " 4.78170423e-09, 5.18434365e-09, 5.46593111e-09],\n", " [8.80900561e-06, 8.74859402e-06, 8.65693137e-06, ...,\n", " 4.02825273e-09, 4.38110996e-09, 4.62838137e-09]]],\n", " shape=(69, 101, 101))\n", "Coordinates:\n", " * x (x) float64 808B -100.0 -98.0 -96.0 -94.0 ... 94.0 96.0 98.0 100.0\n", " * y (y) float64 808B -100.0 -98.0 -96.0 -94.0 ... 94.0 96.0 98.0 100.0\n", " * time (time) datetime64[ns] 552B 2024-06-24 2024-06-25 ... 2024-08-31, f_monthly_et_weighted= Size: 245kB\n", "array([[[5.71701015e-06, 5.75124590e-06, 5.79970701e-06, ...,\n", " 2.92244102e-06, 2.88312243e-06, 2.85601813e-06],\n", " [5.90230083e-06, 5.93966125e-06, 5.99263034e-06, ...,\n", " 3.01014340e-06, 2.96838532e-06, 2.93963425e-06],\n", " [6.18132713e-06, 6.22360325e-06, 6.28367225e-06, ...,\n", " 3.14211813e-06, 3.09662600e-06, 3.06535646e-06],\n", " ...,\n", " [6.53495391e-06, 6.68453713e-06, 6.90410127e-06, ...,\n", " 1.97318720e-07, 1.93995929e-07, 1.91975136e-07],\n", " [6.40117937e-06, 6.54133056e-06, 6.74674879e-06, ...,\n", " 1.84482028e-07, 1.81009211e-07, 1.78894237e-07],\n", " [6.30814374e-06, 6.44199311e-06, 6.63798497e-06, ...,\n", " 1.76272464e-07, 1.72690039e-07, 1.70505476e-07]],\n", "\n", " [[7.01504893e-06, 7.12363523e-06, 7.28453813e-06, ...,\n", " 4.66873040e-06, 4.60969362e-06, 4.56870717e-06],\n", " [7.17253267e-06, 7.28563178e-06, 7.45319727e-06, ...,\n", " 4.80928639e-06, 4.74573902e-06, 4.70168363e-06],\n", " [7.40659472e-06, 7.52661409e-06, 7.70439974e-06, ...,\n", " 5.01993112e-06, 4.94945312e-06, 4.90068828e-06],\n", "...\n", " 8.43878559e-07, 8.26200043e-07, 8.14286339e-07],\n", " [4.72055903e-06, 4.78426429e-06, 4.87721497e-06, ...,\n", " 8.11813070e-07, 7.94989144e-07, 7.83650212e-07],\n", " [4.60359914e-06, 4.66400659e-06, 4.75204260e-06, ...,\n", " 7.90621914e-07, 7.74355783e-07, 7.63391993e-07]],\n", "\n", " [[7.34098978e-06, 7.39969480e-06, 7.48456577e-06, ...,\n", " 4.19652136e-06, 4.08111290e-06, 4.00352823e-06],\n", " [7.56798852e-06, 7.63102101e-06, 7.72222056e-06, ...,\n", " 4.28052139e-06, 4.16141304e-06, 4.08136407e-06],\n", " [7.90871626e-06, 7.97847389e-06, 8.07951966e-06, ...,\n", " 4.40574082e-06, 4.28104778e-06, 4.19728015e-06],\n", " ...,\n", " [5.77960338e-06, 5.88767721e-06, 6.04642589e-06, ...,\n", " 4.12319660e-07, 4.00137268e-07, 3.91912917e-07],\n", " [5.61367176e-06, 5.71512781e-06, 5.86380147e-06, ...,\n", " 4.01068014e-07, 3.89541105e-07, 3.81755038e-07],\n", " [5.50158051e-06, 5.59859426e-06, 5.74051156e-06, ...,\n", " 3.93464815e-07, 3.82371657e-07, 3.74876022e-07]]],\n", " shape=(3, 101, 101))\n", "Coordinates:\n", " * x (x) float64 808B -100.0 -98.0 -96.0 -94.0 ... 94.0 96.0 98.0 100.0\n", " * y (y) float64 808B -100.0 -98.0 -96.0 -94.0 ... 94.0 96.0 98.0 100.0\n", " * time (time) datetime64[ns] 24B 2024-06-01 2024-07-01 2024-08-01)" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\n", "summaries = summarize_periods(\n", " clim,\n", " df,\n", " et_source=\"LE\", # use LE (W/m^2) to derive ET weights\n", " daily=True,\n", " monthly=True,\n", " normalize_each_time=True,\n", ")\n", "summaries\n" ] }, { "cell_type": "markdown", "id": "7780cea3", "metadata": {}, "source": [ "\n", "## 5) Quick Visualization\n", "\n", "Plot the first available **daily mean** footprint. \n", "(Uses `matplotlib`; ensure you keep a single plot per figure and default colors.)\n" ] }, { "cell_type": "code", "execution_count": 10, "id": "75fda4f4", "metadata": {}, "outputs": [ { "data": { "image/png": "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SXNB6SZat24tmjRpIo4//ngjIWih/C3SRnMttPs9Z84ccfTRR4uOHTvKeTz//PNaOyktKHK2Q4cO8u+Tavx9/fXXWp/ffvtNnHbaaTKXGX3+099zIk0IKFBIQwNSc9111zmTJ092Ro8e7TRv3txoj0ajTs+ePZ0BAwY4H330kfPKK684bdq0ccaOHZvs89133zmNGjWSY3zxxRfOPffc40QiEee1117L23VUVVU5K1as0LZzzz3X2W677Zx4PC77fP/996SlcmbOnKn1q66uduqSLl26OBMmTNDmtGHDhmT72rVrnW222cY57bTTnM8++8x54oknnIYNGzp///vf63Ter776qjN8+HDn9ddfd7799ltn+vTpTrt27ZzLL7882adQ7/mTTz7pVFRUOA8++KDz+eefOyNGjHBatGjh/Pzzz06hMHjwYGfq1KnyNV+0aJFzxBFHONtuu6323ujfv7+cu3pv6f1S14wbN87p0aOHNq/Vq1cn2y+44AKnc+fOzqxZs5wPP/zQ2WeffZz99tvPqWtWrVqlzXnGjBny/fvmm28W3P2mz+JrrrnGefbZZ+Ucn3vuOa395ptvlp/pzz//vPPxxx87xxxzjPw83Lx5c7LPYYcd5uy+++7OvHnznHfeecfZcccdnVNOOaUOrgakCwyaNKAPzlQGDf3RhMNhZ+XKlcnn7rvvPqdZs2bSiCCuuuoq+eGlMnToUPmBXFfQF2bbtm2locC/XMkwKyTIoLnjjjtc2++9916nZcuWyftNXH311c4uu+ziFBq33nqr/NAs9Hu+9957OyNHjkzux2Ixp2PHjs7EiROdQoW+bOlevv3228nn6Av20ksvdQoNMmjoizIVa9asccrLy52nn346+dyXX34pr23u3LlOIUH3docddkj+KCrU+80NGppv+/btnUmTJmn3vbKyUv4gIujHJx23YMEC7UdKKBRyfvrppzxfAUgXuJyyYO7cuWK33XbTKnhTkj4q1Pb5558n+9Bypgr1oefrihdeeEFWlz3rrLOMtmOOOUYu4R9wwAGyXyFALiZafqdkipMmTdJcenQfDzroIBnOqN5fcj/8/vvvotAK4aUqgldI95xcYgsXLtTes1Tnhvbr8j2bzr0l+P197LHHRJs2bUTPnj1lodlNmzaJQoDcG+QOoVp15NYg1zVB976mpka7/+SOogKKhXT/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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "from matplotlib import cm\n", "\n", "# pick the first day with data\n", "da = summaries.f_daily_mean.isel(time=0)\n", "\n", "plt.figure(figsize=(6, 5))\n", "\n", "# Mask the zero values\n", "masked_data = np.ma.masked_where(da < 0.00001, da)\n", "\n", "# Choose a colormap\n", "cmap = cm.viridis\n", "\n", "# Set the color for masked (bad) values (e.g., white or black)\n", "cmap.set_bad(color='white') # or 'black', or any other color\n", "\n", "# Plot the masked data\n", "im = plt.imshow(masked_data, cmap=cmap,\n", " origin=\"lower\",norm='log',\n", " extent=[float(clim.x.min()), float(clim.x.max()),\n", " float(clim.y.min()), float(clim.y.max())])\n", "\n", "\n", "plt.colorbar(im, label=\"Normalized footprint\")\n", "plt.title(\"Daily Mean Footprint (first day)\")\n", "plt.xlabel(\"x (m)\"); plt.ylabel(\"y (m)\")\n", "plt.show()\n" ] }, { "cell_type": "code", "execution_count": 11, "id": "248ab98d", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Found null values in column sigmav\n", "Found non-finite values in column sigmav\n", "Found null values in column ustar\n", "Found non-finite values in column ustar\n", "Found null values in column ol\n", "Found non-finite values in column ol\n", "Found null values in column wind_dir\n", "Found non-finite values in column wind_dir\n", "Found null values in column umean\n", "Found non-finite values in column umean\n", "/Users/ink/Documents/github/footprints/.venv/lib/python3.13/site-packages/xarray/computation/apply_ufunc.py:818: RuntimeWarning: invalid value encountered in sqrt\n", " result_data = func(*input_data)\n", "Only captured 27.4% of flux - consider increasing domain size\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Grid resolution: dx=5.0m, dy=5.0m\n", "Grid shape: (121, 121)\n", "Number of timesteps: 3270\n" ] }, { "data": { "image/png": "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2mtcOZczcf5sJ02aZL5Hfb3Geh1q/vvvv7u8j70/t4o9t0MvqHTp0sVsg65fy9vNmTPH4wVkvXBdqFAhE3PvueceGT9+vEvPeN1Hbaevt/fZ/lux46N+vv/617/McHr93LScmh7L+Hp85F5Wx16vJlf0vfS/C/2b0+MDLS3ny7YBAJKOnotfunRJZsyY4ZIYt5UoUcLEAk8SOuf/7rvvzLGFHmPoOrSnt9Lzqxo1aphjAI1VX3zxhcs69Txdz//0OW2jsUg75zkfT+gxhj6m9PjHjhvO26ElMu0YpcdKmug/f/78LT8PX+Kp0jzJc889Z877smTJYjrf6TmecxzUXu3eytUuWLDAPKcdEAEkD5Lj8JueROrJpZ482/SkWWuK66JlNvbs2ePynPYk1uCVED2x1JNxPbnTki36mhdffFE+++wzl0DToEED+fzzz83J18svvyxfffWV9O/fPyD71r59e3OrJ7O3olfPNTHfunVrU29NT4R1SHnNmjVNINft08c14OvJq55M2zTZqSfNeoKuJ/m6v3pgYX92mvR48803TVtNfPznP/8xiybPvXnqqadkyJAhUqVKFXn99dfNAceYMWPM1X53eiKqCQTt0afvrSVx9ERTk763Q0sF6PvqBRItteONDgnXAwE9AdaDEz140HrvR48eNc/rZ6UJb/0bsPddv2tnemCkyR7d5wEDBiS4XYcOHTLfk1680c9EE/h60GQnQ/zhy7Y50wM0TSZoL0l9765du5rkiP535H4Qpn8XWv9e/1vRAy39LPX70aGKAEKf9rzavn27S4z017PPPmtKWWnJre7du8unn35q4o0zHQ2l8UWTw6+99ppJBOtvi57U+RLbHnjgAfMbru+htZ71t0ovIG/ZskWSksamf//732YUkv5e6nGB/lsTrRpv9cKi7pdeZNDfVecL8Rq/NP7qyC+NCfrbqRcP9GKj84mnnpTqOvSEedq0aeb3W2PXjh07zPOa6LZ7wdu/8brY9HktE2fXWtU4ptunn68eGwUy9mjiWUusOS/2BW89HtIkg25bu3btzPesiWWN5bpdNj1h15NyPS7QY6yJEyeak3ndB+cSaLoePdG///77Hfus++pMP3PdJt0XHR2mIwO6devm0/FRQnS9egyg69V/a9zU78ifbQMABJ4eY2gnqkDOHaaxXc+DNQmuyXf9fdfz1UWLFplbjS86IlmPWfR81XlOMB15pyXqtJ3GoGeeeUZWr15t4qF9UVWPYfTcUmlHMTtu2CXe9DhAk+GaFNdjBT0vfeutt6RRo0bx4rgzX+Op0lisc8novmjJUU3kN2vWzKWNbrMm2fUYwp0+ph3eatWqdZufNgCfac1xwB979+7VS6PWyJEjzf0bN25YmTJlsubMmWPu582b14qJiTH/vnjxopUqVSqra9eujtevXbvWvF5vbXXr1jWPzZ071/HYtWvXrHz58lktW7Z0PDZp0iTT7r333nM8dvnyZatEiRLx1unJrFmzTLutW7d6bZMtWzarcuXKjvtDhw41r3Gm96Ojo81n4axLly5W/vz5rbNnz7o83qZNG7PeK1eumPszZ84065g4cWK894+LizO3Z86cMW30/d25b9OuXbvM/aeeesql3QsvvGAeX7NmjeOxIkWKmMfWr1/veOz06dNWunTprOeff97r5+K87z169PD6fK9evUybb7/91tw/fPiwua+fvfr999/N/ddeey3B9ylbtqz5u/D2HdapU8e6efOmx+f0Pd3394MPPnA8duHCBfM93ep79rZOb9vm/rd9/fp1K0+ePFa5cuWsP//809Fu6dKlpt2QIUMcj3Xs2NE8NmLECJd16jZWrVo1wc8KQGhYuXKliYm61KpVy+rfv7/1+eefm98Kd/rbpb8L7r9FDRs2dMQJ1adPH7O+8+fPm/snT560UqdObbVo0cJlfcOGDTOvd16n+2+WrrdkyZJW48aNXd5DY1exYsWshx56yOd9Xbx4sde4nNBv9YYNGxyP6Wejj2XIkMH6+eefHY+/9dZb8dbdoEEDq3z58tbVq1cdj+k+1K5d2+yTrWLFilazZs0S3HaNcZ7iwVdffWUenz9/vsvjK1asiPe4r7HHG32tp8WOpfbx0Lx58xyv0b8j/bvKnDmzOf5SS5YsMe1GjRrlsv7HH3/cioqKsn744QfHY3os5/z34R4fH330UZfH/+///s8l3id0fGQ/53xMY6/3ySefdGn3z3/+08qZM6fLY962DQCQNDRm6W908+bNfWrvftyS0Dn/ggULHI8dOHDAETs2bdoU7xjAjnvKPpd2tnHjxnh5BG/HIHrOmzZtWqtRo0ZWbGys4/Fp06aZ9nqObtN90X2y+RpPt2/fbtr17t3bpV2nTp3ixcGBAweac3D7GM7eRj2O85QDAJB06DkOv+lVV+3ZatcS1x5semXXvqKst/bwax0KpL1h7XrjCdEyEs61NXXyDi378dNPPzkeW758uRnSpVeRbTocy1PPpcTS7XC+Qu2N9urVIdI2Pe/TSUm0l5v+27mnl/Yo017hds80bafDrLQHoLvETE6mn4tyv2qtw76Uey043W7tgWXTnup65dv5s76dz095+wz1yrl+tzq0zX0Yuj+0B7avNWu1Z4D2wLfpkHCdUEaH5WuJl6Sybds2M+xde7k719zTngPa89xTjT7tAeFMv6dAfC8AUp72SNa4qD2PNHZqjymND1pGzL38hzca75zjhP5GaJzVocZKe1BpmS393XHmKd6427Vrl+ntrL23f/vtN0cM0xivo7bWr1/v0ls70DQ2OfeS0l5lSnuta+9u98ft38Zz586Z3sp2D2R7u3Uf9PPVfbJLWWnpDu1lro/5S0tkae9s/R6dY7yOANPYp0OkAxl7tNyY9jJ3XnR/7LivE7q2bdvW0V4nb9XecjoEXoem2+00Vtq96JyPD/RYxXl03q1oTztPf1P2MYi346Nb8RT39LtLaAQaACBp2b/BWhYkkDReOo9s1nNQjc2aY7Dju6dYr+w5wZT28tZYoaO09fX2eXZCdHS3zoPRu3dvl0lC9bxSY7S3+un+xFO7lJgvx2F6TKAjwuyyMkp70OtxXKjPOQKEGibkhN/0pFwT4PZJsibCtVaqBialz+lQZWUnyX1JjmupCvfEsJb70JpkNj351/dxb6dBNVD0pNK99qsnOjGpM635qkPPtQSGtzIY9oRrOiRctzlQk2rq56IB3v4ObHrirAcLdtLE5pxkcP6sbydZ7fz5JXQgpUPndHiZHkhonVQdBq9D6/TgQLfXV+6ff0I8/c1orXelNer8eV9/2J+7p79PTY67T16rCXS71nygvxcAweHee+81pZX05EwT5FryQ4fo6kVfTU7fKqno/vutvxHK/p2wf3fc44HW4bbbemMnjDt27Oi1jV7ovdV6Est93zQRrXTYsafH7X3Wcix6YqrzhujiLf7qRYgRI0aYpLPGAK17qkOjtaRahQoVbrl9+vno/ns7RnCfVPV2Y48eFzVs2NDjc/o9a7kc55N7ZQ8bt/8O9FaT9O4x2b2dL/T9nOmQb31/93k+/InPt/qb1mQFACD52b+/vnQa84enc36N67eK9XZJMS3BNWvWLHPR27nWt8bnxJ6bacctLR+TUEz0NZ7a5+XusdD9uMw+H9TjQi2jomVYlf5bz489tQeQdEiOI1E02a01yHbv3u2oN27Tf2vtLQ1YmvzTIKLB5la89QJ2n+AiKelknxpYfQlGzleuld2bTq/yekss+HLyfTt87XWelJ+11tLV9Sd0cqxX67WH/ZIlS0z9eE1m6IGO9vyrXLmyT+/j/vkn1WeXnJNh+toTHkDo0xMxPSHSRROmWrtaeyZrne+U+v2245jWr9ZJJBMaHZQUvO3brfbZ3m6dwNjuWe3Ojutai1QvUH/88cdmfpF3333XXJyYPn26mbsjIfo+mhj3VB9UuV/cDHfe4qa/8TkYjv8AAPGT43oefzvzpAQy1tu9rzUxrueSOtJME+gai7QnelKObEtK2kFM5x7TPIT2Ite5u+yOhgCSD8lxJIrdE1yT35oc1wBl0+HF2jtYy2bopJ06EUUgJzPTAK1B0vmk7ODBgwFZvz3plreT64ToSbFeSdZkqreeXs69rfSz0eFgOgzaE3/Kq+jnogcE2qvNvnqtdIJQ7c2uzycHnVBTh3LrwcqthuDpZ6C9x3XR7dZEjE6KMm/evESXl/HG7lXovM7vv//e3NoThdk91fTz0t72Nk89CHzdNvtz179PLQvgTB9Lru8FQHDTiTPViRMnbntd9u+K/u45X6TUoce3GoWiv8v2CfGt4lgwsS/Aazz1Zbu1F71ejNBFRztpwlwn6LKT495+4/Xz0SHZOhmnLwlgX2LP7XzPOrJOY79z7/EDBw44nrdvdZu1559zXHZv50ts01jt/Del+6fvf7v74otAHhMAAHyjo3t1RLSWhAuGySG1/Ih2QtNzRptOFK3nb77EDOdzM+fOezqa7/DhwwkeQ/gaT+3zcl2f84grjZmeaGJfS6P+97//NT3j9VhGJ7QGkLyoOY5En8hrCQjtPaU9xJ17jmtivEqVKhITE2PqlPpSUsVXmmg/fvy4S10unZnaWxkTf2iv5ZEjR5oTv3bt2vn9er3arbNdaz1xT1fYteyKTdtpnVJPV4Xtq+NaS125B3tP7AsQkyZNcnlcZ9FW7rNjJwWt+aq1T/XiwMsvv+y1nX5fehDjnnDQgwy9Wm7LlCmTT/vuC/2b0dIFzjX05s6daxLy9rB2Oymk5YJs+vc7Z86ceOvzddv0vxPtZag9Ep33TWvS7d+/P1m+FwDBQ2tSe+oNa9dsDkSJMK0NriW73nzzTZfHfemFpBe39bdw/PjxjhJZ3uJYMNHf2Xr16slbb73l8QKD83brRQL3nvDaq9w9/ij333mtaa4xTo8V3Gl9UPf2vsSexNK4r3XLtTap8zZMnTrV7JPW/bbb6Ta7f//aW16TB02bNvU5tulxnTN9L+W8jqQSyGMCAIBv+vfvb35/9eKxdrpypyOxJk+enGzbo+fb7sdRGovcR/p6i+Oa/NaRe1OmTHFZz4wZM8zo8YTOzXyNp3YnuzfeeCPednqi85Dpa7WDmOZWtNybPgYgedFzHLc1HPyrr74yyXA9oXamyXL7im4gk+M6WYYGJB1+tH37djM5p/b2thPJvtLkpF7l1RNJDfSaGNeJrvRKr06K5jx5oj/Gjh1rkh86gYhuq9aO1aSxThCiV5r130q3X0+Q9Srxli1bzORTmojVNjp5h9ZD1V5p+no98dUh99rTTeuj6uKuYsWK5iq6XiTQgwA9Kdb1amK3RYsWUr9+fQkk7fmmAVwPKvRkX+vmajkATaZoQl6DekKv1eSNJhl0/zSJo8kD/R6cJ2fRvylN7owaNcokLjT54d772lf6+Wkdt61bt5o65zNnzjTvp8PybI0aNTJ1T7WdlgXSgy9tpyMCtEe8M1+3Ta/8a3117Z2o34lePND31YNI7WnXp0+fRO0PgNCkw4H1AqFO0qh1JrWn0oYNG8zvvP4m6G/F7dLfOB2eqzFYJ/7U32P9jda4pydbCfXA1R7IWmZET9LKli1rtkfrdOtFcI1t2qNcS6oFI03c6vFG+fLlTfzVHmH6e6u93XSosn4GSuOOJtL1d1zjqk6crBfce/bs6ViXfUyjk27pSa7GA41P+jv+9NNPmzJgWh9e44b+zmuPao2B+tvuPGG4L7EnsXRiVr0Y0KlTJ3M8pH8/uh86mk8vlNu92rSEmR4D6EVrrQ2uxwtaTkbLyuioP/vCsL3fehyicVyH0mtnAefJ0bQXnP03pZ+rHgfo5K26zqR2q20DAASexogFCxaYnsw6OlnPYfVc1D5+0dincSg5e7Lrub+WU9F4rrFIY0POnDld2ulFaI3deh6mSW/NV+i5mp6zDRw4UIYPH25imcY07UWuiWzNbSQ0Caav8VTjlXaE01isF+S1friOrLZHjnk6DtPP1T5+8HQBHkAysIBEGjhwoF5utWrXrh3vuQ8//NA8lyVLFuvmzZsuz61du9Y8p7e2unXrWmXLlo23no4dO1pFihRxeeznn3+2Hn30UStjxoxWrly5rF69elkrVqyIt05PZs2aZdrZS9q0aa18+fJZDz30kDV58mTr4sWL8V4zdOhQ09aZ3u/Ro4fH9zh16pR5rlChQlaaNGnM+hs0aGC9/fbbLu2uXLlivfzyy1axYsUc7R5//HHrxx9/dLTZsGGDVbVqVbOd+p66Ld626caNG9bw4cMd69P31+/o6tWrLu3082zWrFm87dbvQJdbcf78oqOjrezZs1uVK1c238PevXvjtT98+LBpq5+9Onv2rPl8SpUqZWXKlMnKli2bVaNGDeu9995zed3JkyfNdurfkL7e3jb7O9y6dWu897Kf0/d039/PP//cqlChgpUuXTrz3osXL473+u3bt5tt0c+7cOHC1sSJEz2u09u2efrbVosWLTKfkb53jhw5rHbt2lm//PJLvL91/TzcefquAYSmzz77zHryySfNb1DmzJnNb02JEiWsZ5991sQOZ/rbpb8LNm+/fZ5+dzTuDh482MSVDBkyWA8++KC1f/9+K2fOnNYzzzyT4GvVzp07rccee8y0198t3ZZ//etf1urVq33eV/2N9RaXE/qtducp3tpx5bXXXnN5XONnhw4dzH5rHCxYsKD1j3/8w3r//fcdbUaNGmVVr17dxC79bPS7GD16tHX9+nWXz0+/k9y5c1tRUVHxfoM1nmts1tdrHChfvrzVv39/6/jx44mKPZ4kdJxh07+Zzp07m2Mh/VvS7bBjrbM//vjD6tOnj1WgQAHzuZQsWdJ8dnFxcS7tDhw4YD3wwANmv/T97b8/Ow7t27fPHKfoPt9xxx1Wz549rT///NPn7XY+jnFe75kzZ2759+Ft2wAASe/777+3unbtahUtWtTEG40D9913nzV16lTHuab7cYs/5/y+HgP8/vvvjrinx1GNGzc28cH9vdU777xjFS9e3EqVKlW87Zg2bZqJyRoT8+bNa3Xv3t2s+1Z5CF/j6eXLl81263mfbmeLFi2sgwcPmu0YO3ZsvP28du2aiat6XuweVwEkjyj9v+RIwgMAACBl6KginVtBR7wkVPoKgaE9ubV33dKlSyXUaT127WWn5WkY6g0AgP90xFnlypXNqCv3Eq46ml1HRWnvdC3xAiD5UXMcAAAgjOiETu7sOSm0pAgAAACS9zhMy9fpJODulixZYi5Aa3kVACmDmuMAAABhRGuYz54920wepZMzfv311/Lf//7X1Mi+7777UnrzAAAAwta4cePMfCBao1zn19J5X3TR+UIKFSrkaLd582b57rvvTJ1x7VVuT6YNIPmRHAcAAAgjFSpUMCdjenKmkybbk3RqSRUAAAAkndq1a8uqVatM0vvSpUtSuHBhU6LMvazdm2++acqs6ASi2qkBQMqh5jgAAAAAIEnExMTIa6+9JidPnpSKFSvK1KlTpXr16h7b7t27V4YMGWJ6Xf7888/y+uuvS+/evf1e59WrV+X555+XhQsXyrVr16Rx48byxhtvmIuFAAAAzqg5DgBAhNGeKtq7OGvWrGapVauWGe7pnFTo0aOH5MyZ05TlaNmypZw6dcplHUePHpVmzZpJxowZJU+ePNKvXz8zoRAAAM5lnvr27StDhw6VHTt2mES2JqpPnz7tsf2VK1ekePHiMnbsWMmXL1+i19mnTx/59NNPZfHixfLll1/K8ePH5bHHHpNwQzwHACSXmJgYM+l8+vTppUaNGrJly5YE22sMLlWqlGlfvnx5Wb58ucvz2ldbL4jnz59fMmTIIA0bNpRDhw65tBk9erQZjaExKnv27Am+32+//SZ33nmnREVFyfnz5/3aN5LjAABEGD1o0MSD9szbtm2bPPjgg9K8eXPTY8+XpEJsbKw5kb5+/bps2LBB5syZY4aD6sENAAC2iRMnSteuXaVz585SpkwZmT59ujnBnTlzpsf29957r+kR3qZNG0mXLl2i1nnhwgWZMWOGaafxrWrVqjJr1iwTrzZt2iThhHgOAAjGi90bNmyQtm3bSpcuXWTnzp3SokULs+zZs8fRRktATpkyxcRxrcGfKVMms069sGvT+NSqVSvp3r37LbdR30svGEdMWZW4uDgT2LNkyWKuCAAAkBQ0RP7xxx9SoEABM8N8OMuRI4dJSDz++OOSO3duWbBggfm3OnDggJQuXVo2btwoNWvWNL3S/vGPf5hYbA9R14OaF198Uc6cOSNp06b16T2J5wCQ/HFITzr1ZDOx2+P+e61JbE+JbH0PTVq///775oTY1rFjR9Oj6+OPP07wvbR3mpZUcS6r4ss616xZIw0aNJDff//dpZdZkSJFzLo0YRzOiOcAEBnnlLcTz/X3XXt0+6pGjRrmAva0adMcv/s6weyzzz4rAwYMiNe+devWcvnyZVm6dKnjMY07WmNf44x+Jvp5aAm0F154wXFxW2ORXqTVi+TO9DGN4d56hOtIKk3g68VdT8cAYTkhpwZe51l+AQBISseOHTO9s8KR9hrTHmV68KLDsbX32Y0bN8ywNpsOh9PJhOyTab3VoXHOtVv1Kr9e0dfeapUrV/bpvYnnAJC8cUhPpIsVySwnT8cm6vVamkMnmHOmvch0sjl3Z8+eNTHGvc633tckbWL4sk6tQ64n/e4nxdpGnwtXxHMAiJxzytuN51q67PDhwz4lyK9fv25iysCBAx2PaZJf44vGEU/0ce1p7kzjy5IlS8y/9b01JjvHqGzZspkkvL7WPTmekH379smIESNM7/OffvpJEiMkk+N6Rdr+w9LaagAAJIWLFy+akz077oST3bt3m5NnPbDSZMdHH31khqfv2rXrlkkFvfWUmLCf80YnRdPFZg9eKzR8kET70XMBACJF3NWrcmzoqIDFIT3B1RPpn7cXlaxZ/Ou9dvGPOClS9Ui8czBv5U8QefG8jjwsqSVNQPcPAELdTbkhX8vygJ5TBiKe6wVn93iezkNMT8zFbm/xxTn+2I95a+MLjUVavkVHTOnF34hKjttDteyJRwAASErhOET4nnvuMSfOOnxNh6frkHStR5qUxowZI8OHD4/3uCbGSY4DQPLFocxZoszijzjx7xwsV65ckipVqngTQOp9b5NtBmKdeqtJAx167ZwYvp33DWbBFM81MZ46iuQ4ALiwku6c8nbiufuIn6FeRoIFM+3NruXCnnjiidtaT3gXUAUAAB5pb7ISJUqYicr0JFcnVZk8ebJLUiGhxIOnxIT9XEIHL3rybi/a+xAAkPxirbhELf7GGY0xq1evdjymNUr1vvZ0Tgxf1qnPp0mTxqXNwYMH5ejRo4l+32BGPAeAyHU78Vx/u51/ywc6lU253Yvd3uKLc/yxH/N1nZ7oPCNaUix16tRm0Xrj9jZrst9XJMcBAIBJLuiwNF+SCnqrw7idZydftWqV6UmoQ7m90WF6do9DRn8BQMqJEytRi7+03ug777wjc+bMkf3795ta1loTu3Pnzub5Dh06uJyMazJXe0Hrov/+9ddfzb9/+OEHn9epNUu7dOli2q1du9bUSdXnNHZpne1wRzwHgMhxO/Hc/Xc8nZcyaYm52K2PO7e344vdvlixYiYJ7txGS5pq3XB/LmR/8MEH8u233zqOHd59913z+FdffSU9evQI77IqAAAg8TQR0bRpU1OXTWdOX7Bggaxbt04+//xzl6RCjhw5zIGSzkLunFRo1KiROWlu3769jBs3ztSFGzRokDkAofYsAAS/OPM//1/jr9atW8uZM2dkyJAhJlZUqlRJVqxY4agxqolandTLeWJH50kgx48fb5a6deuaOOXLOtXrr79u1tuyZUuTKNZJwN544w0JN8RzAIhsyRXP+/bta8p2VatWTapXry6TJk2Kd7G7YMGCZgST6tWrl4ndEyZMkGbNmsnChQtl27Zt8vbbbztKzPTu3VtGjRolJUuWNMnywYMHS4ECBaRFixaO99XjhHPnzplbrXuuCXClI6Z0no277rorXn10paVW3OfcSAjJcQAAIoz2ENMDmBMnTpiT5woVKpgT6YceesinpIIOq1u6dKnpracn2ZkyZTIHSzpLOAAg+MValln8fU1i9OzZ0yye2AlvW9GiRR2TOyZ2nSp9+vQSExNjlnBGPAeAyJZc8by1nxe7a9eubS7Y6gXXl156ySTAlyxZIuXKlXO06d+/v0mwd+vWzZQAq1OnjlmnxnCbvp+OFLPZF9B1ZFi9evUkUKIsX44+gox2tdfgrzVxGMIFAEgqxJvk+XyLvDqKCTkBwIO4q1fl5xcHBSwO2b+7Px8oIFmz+Fdh8+IfcVKk1HFiIrz+XdWT5kzICQBublo3ZJ18HND4STwPLGqOAwAAAAAAAAAiDmVVAAAAACCC6GRcsX5OsJmYCTkBAEDSIZ4HBslxAAAAAIggemLs78kxJ9MAAAQX4nlgkBwHAAAAgAiSnBNyAgCApEE8DwyS4wAAAAAQQeL+Wvx9DQAACB7E88AgOQ4AAAAAESQ2ETVK/W0PAACSFvE8MKIDtB4AAAAAAAAAAEIGPccBACGj6IBlPrc9MrZZkm4LAAChKtb63+LvawAAQPAgngcGyXEAAAAAiCDUKAUAIPQRzwOD5DgAAAAARJA4iZJYifL7NQAAIHgQzwOD5DgAAAAARJA463+Lv68BAADBg3geGCTHAQAAACCCxCaip5m/7QEAQNIingdGdIDWAwAAAAAAAABAyKDnOAAAAABEEHqaAQAQ+ojngUFyHAAAAAAiSJwVZRZ/XwMAAIIH8TwwSI4DAAAAQAShpxkAAKGPeB4YJMcBAAAAIILESrRZ/HsNAAAIJsTzwCA5DgAAAAARxErEMGx9DQAACB7E88AgOQ4AAAAAEYRh2AAAhD7ieWD41/ceAAAAAAAAAIAwQM9xAAAAAIggsVa0Wfx7TZJtDgAASATieWCQHAcAAACACBInURLn5yDiOOFsGgCAYEI8DwyS4wAAAAAQQahRCgBA6COeB4ZflxeKFi0qUVFR8ZYePXqY569evWr+nTNnTsmcObO0bNlSTp065bKOo0ePSrNmzSRjxoySJ08e6devn9y8eTNAuwMAAAAA8GUYtr8LAAAIHsTzFOg5vnXrVomNjXXc37Nnjzz00EPSqlUrc79Pnz6ybNkyWbx4sWTLlk169uwpjz32mHzzzTfmeX2tJsbz5csnGzZskBMnTkiHDh0kTZo08sorrwRolwAAAAAACQ/D9q/nmL/tAQBA0iKeB4Zflwty585tEtv2snTpUrnrrrukbt26cuHCBZkxY4ZMnDhRHnzwQalatarMmjXLJME3bdpkXr9y5UrZt2+fzJs3TypVqiRNmzaVkSNHSkxMjFy/fj1AuwQAAAAAAAAAQMIS3Zdek9ma5H7yySdNaZXt27fLjRs3pGHDho42pUqVksKFC8vGjRvNfb0tX7685M2b19GmcePGcvHiRdm7d29iNwUAAAAA4COdvCvWz8XfCb9s2hFKy3OmT59eatSoIVu2bEmwvY5C1vNIba/njsuXL3d53lOZT11ee+21BMuBjh07NlHbDwBAsErOeB7OEv2JLFmyRM6fPy+dOnUy90+ePClp06aV7Nmzu7TTRLg+Z7dxTozbz9vPeXPt2jWTQHdeAAAAAADBW6N00aJF0rdvXxk6dKjs2LFDKlasaDpHnT592mN7HXXctm1b6dKli+zcuVNatGhhFi3nadPSnM7LzJkzTfJb57tyNmLECJd2zz77bCI+KQAAghc1xwMj0Z+IllDRsigFChSQpDZmzBhTw9xeChUqlOTvCQAAAADhSHuNJWbxl5bc7Nq1q3Tu3FnKlCkj06dPl4wZM5qEtieTJ0+WJk2aSL9+/aR06dKmBGeVKlVk2rRpjjbOZT51+fjjj6V+/fpSvHhxl3VlyZLFpV2mTJkS8UkBABC8kiueh7tEfSI///yzfPHFF/LUU085HtMDDi21or3JnZ06dco8Z7fR++7P2895M3DgQFPT3F6OHTuWmM0GAAAAgIgXa0UlalHuI3p1lK8nem6opTedy25GR0eb+3bZTXf6uHN7pT3NvbXXc8lly5aZnubutIxKzpw5pXLlyqbkys2bN/36jAAACOd4jttMjutEm3ny5JFmzZo5HtMJONOkSSOrV692PHbw4EE5evSo1KpVy9zX2927d7sMo1u1apVkzZrV9CTwJl26dKaN8wIAAAAA8J+/9UntRekoXudRvTrK15OzZ89KbGysx7Ka3kpqeivD6a39nDlzTA/xxx57zOXx5557ThYuXChr166Vp59+Wl555RXp37+/X58RAADhHM/xt9Tip7i4OJMc79ixo6RO/ffL9cBIr9hrTbkcOXKYBLbWddOEeM2aNU2bRo0amSR4+/btZdy4ceYgZ9CgQdKjRw+TAAcAAAAABC8dxevcWSklz+O0PEu7du3M5J3O9JzUVqFCBTM3libJNZHPeScAALit5LiWU9He4E8++WS8515//XUzVE4nQ9HhdToE7o033nA8nypVKlm6dKl0797dJM217psm2XWyFAAAAABA0ouzos3i32ssc+vrSN5cuXKZ8z9PZTW9ldT0VobTU/uvvvrKjFTWST9vpUaNGqasypEjR+See+65ZXsAAMI9nuNvfvel197flmXJ3XffHe85vWIfExMj586dk8uXL8uHH34Y70CmSJEisnz5crly5YqcOXNGxo8f79IDHQAAAAAQ2sOwtbe2lt50Lrupo5D1vl12050+7tzeLsPpqf2MGTPM+itWrHjLbdm1a5fpxKWlQQEACBfJWVYlJiZGihYtanK/etF5y5YtCbZfvHixlCpVyrQvX768yQU709zykCFDJH/+/JIhQwYz58ihQ4dc2owePVpq165tJvPOnj17vPf49ttvpW3btqbkm65DJ/PWyb39RaEZAAAAAIggcYmYxEtf4y8tb/LOO++Y2uD79+83I4i1E1Xnzp3N8x06dJCBAwc62vfq1UtWrFghEyZMkAMHDsiwYcNk27Zt0rNnT5f16kSgetL91FNPxXtPnbxz0qRJ5oT5p59+kvnz50ufPn3kiSeekDvuuCMRewEAQGTH80WLFpmYPnToUNmxY4e5MK3VQpznlHS2YcMGk7TW8ts7d+6UFi1amGXPnj2ONlpue8qUKTJ9+nTZvHmzqS6i67x69arL5N6tWrUyxw+e6MTfeuF73rx5snfvXnn55ZfNccW0adP82j+6bAMAAABABImTaLP4+xp/tW7d2owW1p5hOt9UpUqVTPLbnnRTy3Vqj26b9g5bsGCBmZfqpZdekpIlS8qSJUukXLlyLuvVyTa1x5meeLvTmuL6vCbWtdRnsWLFTHLcuQ45AADhILni+cSJE6Vr166Oi9ua0F62bJmZ+2PAgAHx2mvv7SZNmki/fv3M/ZEjR5qRYJq01tdqDNcL2RrvmzdvbtrMnTvXHB9o3G/Tpo15bPjw4eZ29uzZHrfLveR38eLFzUVyrWTifmE9ISTHAQAAACCCxFrRZvH3NYmhJ6feTlDXrVsX7zHtIaZLQrp162YWT6pUqSKbNm1K1LYCABAp8VxHYblfXE7nYdJq7b2tPbSdR3rphW0tg6KJaE/0cfeL0torXBPf6vDhw+aiua7Dli1bNlOuRV9rJ8cT48KFC5IjRw6/XkNZFQAAAAAAAACIEFqnWxPS2f5axowZ47Hd2bNnJTY21jHqy6b3NcHtiT6eUHv71p91+kLLuWgJGG8X0L2h5zgAAAAARJA40ZqjUX6/BgAAhEc8P3bsmGTNmtXxuKde46FE65lriRati96oUSO/XkvPcQAAIoz2Crj33nslS5YsZgITnRzl4MGDLm10IpQePXpIzpw5JXPmzNKyZUs5deqUSxutFdusWTMze7iuR2vK3bx5M5n3BgCQ2GHY/i4ILsRzAIhstxPPNTHuvKTzkhzPlSuXpEqVKl7s0Pv58uXz+Bp9PKH29q0/60zIvn37pEGDBqbHuNYx9xdHOAAARJgvv/zSnChrTVadGOXGjRvm6vrly5cdbXTysk8//VQWL15s2h8/flwee+wxx/M6tE5PpLUGnQ5fmzNnjpkoRSddAwAEt1iJTtSC4EI8B4DIlhzxPG3atFK1alVZvXq147G4uDhzv1atWh5fo487t1cap+z2Olm2JsGd22gN9M2bN3tdpzd79+6V+vXrS8eOHWX06NGSGJRVAQAgwqxYscLlvp4Ea08xnWjlgQceMJOYzJgxQxYsWCAPPvigaTNr1iwpXbq0OQGvWbOmrFy50lyh/+KLL0xtuEqVKplZyF988UUZNmyYOYgCAASnOCvKLP6+BsGFeA4AkS254nnfvn1N8rlatWpSvXp1mTRpkrkQ27lzZ/N8hw4dpGDBgo665b169ZK6devKhAkTzAXYhQsXyrZt2+Ttt982z0dFRUnv3r1l1KhRUrJkSZMsHzx4sBQoUMCMgnIe2XTu3Dlzqxdzd+3aZR4vUaKEGQ2lpVQ0vulkn7qNdr1y7emeO3dun/ePy/8AAEQ4PXlW9qzeelKtvc+cZw8vVaqUFC5c2DEjud6WL1/eZRIVPSjRK/569R4AELziEtHLTF+D4EY8B4DIklzxvHXr1jJ+/HgzqkgvomqSWi/Q2rFDk9cnTpxwtK9du7a5MKvJ8IoVK8r7778vS5YskXLlyjna9O/fX5599llTCkVLhF26dMmsM3369I42+n6VK1c2dcT1ef23LppoV7reM2fOyLx58yR//vyORdfnD3qOAwAQwXRInF61v++++xwHK3rFXXuKZc+ePcEZxj3NLm4/58m1a9fMYtMTbwBA8ouzos3i72sQvIjnABB5kjOe9+zZ0yyerFu3Lt5jrVq1Mos32nt8xIgRZvFGR0Tp4o2OcNLldnGEAwBABNNapTocTYe6JTUdZpctWzbHUqhQoSR/TwAAIgHxHACAxCE5DgBAhNIr/0uXLpW1a9fKnXfe6XhcJ0fRibnOnz+f4AzjnmYXt5/zZODAgWbIt70cO3YsCfYKAHArsRKVqAXBiXgOAJGJeB4YJMcBAIgwlmWZE+mPPvpI1qxZYyZAcaazkadJk8Zl9vCDBw+aWnL27OF6u3v3bjl9+rTLDORZs2aVMmXKeHzfdOnSmeedFwBAyg3D9ndBcCGeA0BkI54HBjXHAQCIwKHXOkHKxx9/LFmyZHHUFNWh0RkyZDC3Xbp0MTN+66ReetKrk6XoCXTNmjVN20aNGpmT5vbt28u4cePMOgYNGmTWrSfNAIDgFftXbzN/X4PgQjwHgMhGPA8MkuMAAESYN99809zWq1fP5fFZs2ZJp06dzL9ff/11iY6OlpYtW5pJtxo3bixvvPGGo22qVKnMEO7u3bubk+xMmTJJx44dE5xQBQAQHJiQMzwQzwEgshHPA4PkOAAAETgM+1bSp08vMTExZvGmSJEisnz58gBvHQAgqcVa0Wbx9zUILsRzAIhsxPPA4BMBAAAAAAAAAEQceo4DAAAAQASxJEri/KxRqq8BAADBg3geGCTHAQAAACCCMAwbAIDQRzwPDJLjAAAAABBB4qwos/j7GgAAEDyI54FBchwAAAAAIkisRJvF39cAAIDgQTwPDJLjAAAAABBB6GkGAEDoI54HBpcLAAAAAAAAAAARh57jAAAAABBB4iTaLP6+BgAABA/ieWCQHAcAAACACBJrRZnF39cAAIDgQTwPDJLjAAAAABBBqFEKAEDoI54HBslxAAAAAIgglhUtcVa0368BAADBg3geGCTHAQAAACCCxEqUWfx9DQAACB7E88Dw+3LBr7/+Kk888YTkzJlTMmTIIOXLl5dt27Y5nrcsS4YMGSL58+c3zzds2FAOHTrkso5z585Ju3btJGvWrJI9e3bp0qWLXLp0KTB7BAAAAADwKs76eyi270tKbzUAAHBGPE+B5Pjvv/8u9913n6RJk0Y+++wz2bdvn0yYMEHuuOMOR5tx48bJlClTZPr06bJ582bJlCmTNG7cWK5evepoo4nxvXv3yqpVq2Tp0qWyfv166datW4B2CQAAAAAAAACAACbHX331VSlUqJDMmjVLqlevLsWKFZNGjRrJXXfd5eg1PmnSJBk0aJA0b95cKlSoIHPnzpXjx4/LkiVLTJv9+/fLihUr5N1335UaNWpInTp1ZOrUqbJw4ULTDgAAAACQdLQ+aWKWxIiJiZGiRYtK+vTpzfnfli1bEmy/ePFiKVWqlGmvo5SXL1/u8nynTp0kKirKZWnSpIlLG0YqAwAiQXLG83Dm1yfyySefSLVq1aRVq1aSJ08eqVy5srzzzjuO5w8fPiwnT540pVRs2bJlMwdBGzduNPf1Vg9QdD02bR8dHW16mnty7do1uXjxossCAAAAAPBfnEQlavHXokWLpG/fvjJ06FDZsWOHVKxY0YwqPn36tMf2GzZskLZt25pk9s6dO6VFixZm2bNnj0s7TYafOHHCsfz3v/91eZ6RygCASJBc8Tzc+ZUc/+mnn+TNN9+UkiVLyueffy7du3eX5557TubMmWOe18S4yps3r8vr9L79nN5qYt1Z6tSpJUeOHI427saMGWOS7PaivdcBAAAAAP6LtaIStfhr4sSJ0rVrV+ncubOUKVPGlN7MmDGjzJw502P7yZMnm8R3v379pHTp0jJy5EipUqWKTJs2zaVdunTpJF++fI7FucwnI5UBAJEiueJ5uPMrOR4XF2cOTl555RXTa1yvvuvBjh7kJKWBAwfKhQsXHMuxY8eS9P0AAAAAIFzdzjBs9xG9OsrXk+vXr8v27dtdRhXraGG9b48qdqePO7dX2tPcvf26detMh6t77rnHdNj67bffXNbh70hlAABCEWVVAsOvTyR//vzmir8zvaJ/9OhR82+9aq9OnTrl0kbv28/prfswups3b5q6cHYbd9ozQOvFOS8AAAAAAP+ZYdWWn8tfw7B1FK/zqF4d5evJ2bNnJTY2NsFRxe708Vu1157lOq/V6tWrzZxYX375pTRt2tS8V2JHKgMAEGnxHH9LLX6477775ODBgy6Pff/991KkSBHzb52gUxPceqBSqVIl85j2JtAr9HpFX9WqVUvOnz9vehFUrVrVPLZmzRrTK12HvQEAAAAAgpOO4nXurKQdmZJTmzZtHP/WCTsrVKggd911l+lN3qBBg2TdFgAAEGHJ8T59+kjt2rVNWZV//etfZqbxt99+2yxKZwrv3bu3jBo1ytQl12T54MGDpUCBAmYiFbunuV7tt8ux3LhxQ3r27GkOcrQdAAAAACDpWImYkEtfo3wdyZsrVy5JlSpVgqOK3enj/rRXxYsXN+/1ww8/mOR4YkYqAwAQafEciSyrcu+998pHH31kZgMvV66cmSBl0qRJZjZwW//+/eXZZ5819ci1/aVLl8yEKOnTp3e0mT9/vpQqVcocvDz88MNmkhQ7wQ4AAAAASDp+D8H+a/FH2rRpzUhhHVXseN+4OHNfRxN7oo87t1erVq3y2l798ssvpua4lgB1H6lsY6QyACAcJUc8jwR+9RxX//jHP8zijfYeHzFihFm80XpvCxYs8PetAQAAAAC3KTETciVmAq++fftKx44dzeSY1atXNx2rLl++LJ07dzbPd+jQQQoWLOioW96rVy+pW7euTJgwQZo1ayYLFy6Ubdu2OTpSacer4cOHS8uWLU0v8B9//NF0zipRooSZuFMxUhkAECmSK56HO7+T4wAAAACA0JWYnmOJ6WnWunVrOXPmjAwZMsRMhqnzUumoYnvSzaNHj0p09N8n6VrCUztRDRo0SF566SVTqnPJkiVm1LLSMi3fffedzJkzx/QO12R3o0aNzIhm59rnOlJZE+I6UlnXr8n0KVOm+L39AAAEs+SK5+GO5DgAAAAARJC4RNQo9be9TZPUuniik2i6a9WqlVk8yZAhg3z++ee3fE9GKgMAIkFyxvNwRl96AAAAAAAAAEDEITkOAAAAABGECbwAAAh9yRnPY2JipGjRopI+fXozwfWWLVsSbL948WIpVaqUaV++fHlZvny5y/OWZZmyazqhto4Ma9iwoRw6dMilzejRo03JtYwZM0r27Nk9vo+WaNN5SrRNnjx5pF+/fnLz5k2/9o3kOAAAAABEEJLjAACEvuSK54sWLTKTbA8dOlR27NghFStWNBNhnz592mP7DRs2SNu2baVLly6yc+dOadGihVn27NnjaDNu3DgzH4hOnr1582bJlCmTWefVq1cdba5fv25KrXXv3t3j+8TGxprEuLbT99Q5SWbPnm2S7v4gOQ4AAAAAEYTkOAAAoS+54vnEiROla9eu0rlzZylTpoxJaGtP7ZkzZ3psP3nyZGnSpInpxV26dGkzcXaVKlVk2rRpjl7jkyZNMhNwN2/eXCpUqCBz586V48ePm4m4bcOHD5c+ffqYnueerFy5Uvbt2yfz5s0zk343bdrUvJf2cteEua9IjgMAAABABCE5DgBAZMfzixcvuizXrl3z+B6aZN6+fbspe2KLjo429zdu3OjxNfq4c3ulvcLt9ocPH5aTJ0+6tMmWLZsp1+Jtnd7eRxPnefPmdXkf3Z+9e/f6vB6S4wAAAAAQQSw9oZYovxZ9DQAACI94XqhQIZOQzvbXMmbMGI/vcfbsWVO+xDkBrfS+Jrg90ccTam/f+rNOf97H+T18kdrnlgAAAAAAAACAkHbs2DHJmjWr4366dOkkUtFzHAAAAAAiCGVVAACI7HiuiXHnJZ2X5HiuXLkkVapUcurUKZfH9X6+fPk8vkYfT6i9fevPOv15H+f38AXJcQAAAACIICTHAQAIfckRz9OmTStVq1aV1atX//2+cXHmfq1atTy+Rh93bq9WrVrlaF+sWDGTvHZuo3XCN2/e7HWd3t5n9+7dcvr0aZf30WS/ThzqK8qqAAAAAEAESczJMclxAAAiM5737dtXOnbsKNWqVZPq1avLpEmT5PLly9K5c2fzfIcOHaRgwYKOuuW9evWSunXryoQJE6RZs2aycOFC2bZtm7z99tvm+aioKOndu7eMGjVKSpYsaZLlgwcPlgIFCkiLFi0c73v06FE5d+6cudW657t27TKPlyhRQjJnziyNGjUySfD27dvLuHHjTJ3xQYMGSY8ePfwqE0NyHAAAAAAiCMlxAABCX3LF89atW8uZM2dkyJAhJgFdqVIlWbFihWPyS01eR0f/XZykdu3asmDBApOofumll0wCfMmSJVKuXDlHm/79+5sEe7du3eT8+fNSp04ds8706dM72uj7zZkzx3G/cuXK5nbt2rVSr149U+5l6dKl0r17d9OLPFOmTCaJP2LECL/2j+Q4AAAAAEQQy4oyi7+vAQAAkRnPe/bsaRZP1q1bF++xVq1amcUb7T2uSeyEEtmzZ882S0KKFCkiy5cvl9tBchwAAAAAIkicRJnF39cAAIDgQTwPDCbkBAAAAAAAAABEHHqOAwAAAEAEoeY4AAChj3geGPQcBwAgwqxfv14eeeQRMxu41nrTyVGcWZZlJj/Jnz+/ZMiQQRo2bCiHDh1yaaOzhrdr106yZs0q2bNnly5dusilS5eSeU8AALdTo9TfBcGFeA4AkY14HhgkxwEAiDA6K3jFihUlJibG4/Pjxo2TKVOmyPTp02Xz5s1m1u/GjRvL1atXHW30RHrv3r2yatUqM0O4nqDrTOMAgNDpaebvguBCPAeAyEY8DwzKqgAAEGGaNm1qFk+0l9mkSZNk0KBB0rx5c/PY3LlzJW/evKZHWps2bWT//v2yYsUK2bp1q1SrVs20mTp1qjz88MMyfvx404MNABC8EtNzjJ5mwYd4DgCRjXgeGPQcBwAADocPH5aTJ0+aode2bNmySY0aNWTjxo3mvt7q0Gv7RFpp++joaNMzzZtr167JxYsXXRYAQPKzEtHLjJPp0EI8B4DwRzwPDJLjAADAQU+klfYsc6b37ef0Nk+ePC7Pp06dWnLkyOFo48mYMWPMibm9FCpUKEn2AQCASEc8BwDANyTHAQBAshg4cKBcuHDBsRw7diylNwkAIpJlepv5uaT0RiNoEM8BIDgQzwODmuMAAMAhX7585vbUqVOSP39+x+N6v1KlSo42p0+fdnndzZs35dy5c47Xe5IuXTqzAABSVpxEmf/5+xqEDuI5AIQ/4nlg0HMcAAA4FCtWzJwQr1692vGY1hLV2qO1atUy9/X2/Pnzsn37dkebNWvWSFxcnKllCgAIjQm8/F0QOojnABD+iOeBQc9xAAAizKVLl+SHH35wmbRr165dpsZo4cKFpXfv3jJq1CgpWbKkObkePHiwFChQQFq0aGHaly5dWpo0aSJdu3aV6dOny40bN6Rnz57Spk0b0w4AENx0Qq4oP0+O9TUILsRzAIhsxPPAIDkOAECE2bZtm9SvX99xv2/fvua2Y8eOMnv2bOnfv79cvnxZunXrZnqU1alTR1asWCHp06d3vGb+/PnmBLpBgwYSHR0tLVu2lClTpqTI/gAA/GPXHfX3NQguxHMAiGzE8xQoqzJs2DCJiopyWUqVKuV4/urVq9KjRw/JmTOnZM6c2QRWrWnm7OjRo9KsWTPJmDGjmRm7X79+pq4ZAABIHvXq1RPLsuIteiKtNL6PGDFCTp48aWL7F198IXfffbfLOrRX2oIFC+SPP/4wk3HNnDnTxH4AAJA8iOcAAKRAz/GyZcuaoOpYQeq/V9GnTx9ZtmyZLF68WLJly2auQD/22GPyzTffmOdjY2NNYlxrn23YsEFOnDghHTp0kDRp0sgrr7wSgN0BAAAAACQkMTVHqVEKAEBwIZ6n0IScmgzX5La95MqVyzyuV5lnzJghEydOlAcffFCqVq0qs2bNMknwTZs2mTYrV66Uffv2ybx588wM2U2bNpWRI0dKTEyMXL9+PUC7BAAAAAAIhgm89FyvaNGippSHTvK4ZcuWBNtrRysdnazty5cvL8uXL3c8pzWxX3zxRfN4pkyZTF1s7Wx1/Phxl3Xo+7mPeB47dmyith8AgGDFhJwplBw/dOiQOQgpXry4tGvXzpRJUTrDtR6sNGzY0NFWD2p0IpCNGzea+3qrBzJ58+Z1tGncuLGZNXvv3r2B2SMAAAAAQIKTcSVm8deiRYtMHeyhQ4fKjh07pGLFiub87/Tp0x7ba8eqtm3bSpcuXWTnzp1m4khd9uzZY56/cuWKWY9OLKm3H374oRw8eFAeffTReOvSciI6Utlenn322UR8UgAABK/kiufhzq+yKnqlX+uX3XPPPeYAY/jw4XL//febgxWtY5Y2bVrJnj27y2s0Ea7PKb11Tozbz9vPeXPt2jWz2DSZDgAAAAAI3gm8dFRx165dpXPnzub+9OnTTRlOrWs9YMCAeO0nT54sTZo0MfNSKR1lvGrVKpk2bZp5rZbu1PvO9Lnq1aubTlvaMcuWJUsWM9IZAIBwxYScKdBzXMugtGrVSipUqGCu+OsQN531+r333pOkNGbMGHMgZC+FChVK0vcDAAAAgPA+mfZ3GPbfHZWcF+dOTM60bKaOLnYeWRwdHW3u2yOL3enjzu2Vnnd6a2+X99SyKe6dtLSMSs6cOaVy5cry2muvyc2bN/35iAAACOt4jtsoq+JMD0B0tusffvjBXJXXAyBNljs7deqU44q93up99+ft57wZOHCgOeixl2PHjt3OZgMAAABAxLqdGqXaUcm545J2ZPLk7NmzEhsb63HksLdRw95GGntrf/XqVVODXEuxZM2a1fH4c889JwsXLpS1a9fK008/La+88or079/f788JAIBgRs3xFCir4u7SpUvy448/Svv27c0EnGnSpJHVq1dLy5YtzfNa/02Ht9WqVcvc19vRo0ebGnN58uQxj+mwOD2QKVOmjNf3SZcunVkAAAAAAClHOyo5J6JT6jxN57v617/+JZZlyZtvvunynNY5t+moZy3/qUlyTeRzXgkAABKdHH/hhRfkkUcekSJFipgZwXVilVSpUpkr9dprQCdO0QORHDlymAMmnfREE+I1a9Y0r2/UqJFJgmsyfdy4caYHwKBBg6RHjx4cpAAAAABAMtAR1f6Oqrbb63mec3Lcm1y5cplzRU8jh72NGvY20ti9vZ0Y//nnn2XNmjW33B6dO0vLqhw5csTMnwUAQKTHcySyrMovv/xiEuF6QKEHI1rDbdOmTZI7d27z/Ouvvy7/+Mc/TM/xBx54wBzE6AziNj04Wrp0qbnVpPkTTzwhHTp0MDOJAwAAAADCYxi29tbW0cU6stgWFxdn7tsji93p487t7ZHGzu3txPihQ4fkiy++MOekt7Jr1y5T79wevQwAQDigrEoK9BzXum0JSZ8+vcTExJjFG+11rhN5AgAAAADCt6uZjiru2LGjVKtWTapXry6TJk2Sy5cvS+fOnc3z2lGqYMGCjrrlvXr1krp168qECROkWbNm5vxz27Zt8vbbbzsS448//rjs2LHDdLrSmuZ2PXIdvawJeZ28c/PmzVK/fn3JkiWLud+nTx/TMeuOO+7wfycAAAhWdB1P+ZrjAAAAAIAQk5ieY4noada6dWs5c+aMDBkyxCSxK1WqJCtWrHBMuqnzU2mPblvt2rVlwYIFpvTmSy+9JCVLlpQlS5ZIuXLlzPO//vqrfPLJJ+bfui5nOvlmvXr1TLlOTaoPGzZMrl27JsWKFTPJcec65AAAhIVkiufhjuQ4AAAAAEQQy/rf4u9rEqNnz55m8WTdunXxHmvVqpVZPClatKiZgDMhVapUMaU/AQAId8kZz8OZXzXHAQAAAAAAAAAIB/QcBwAAAIAIkpgJuZjACwCA4EI8DwyS4wAAAAAQSfTEmBqlAACENuJ5QJAcBwAAAIAIQo1SAABCH/E8MEiOAwAAAEAk0RNjf0+OOZkGACC4EM8DguQ4AAAAAEQQapQCABD6iOeBER2g9QAAAAAAAAAAwkxMTIwULVpU0qdPLzVq1JAtW7Yk2H7x4sVSqlQp0758+fKyfPlyl+cty5IhQ4ZI/vz5JUOGDNKwYUM5dOiQS5tz585Ju3btJGvWrJI9e3bp0qWLXLp0yaXN559/LjVr1pQsWbJI7ty5pWXLlnLkyBG/9o3kOAAAAABE6lBsXxcAABCR8XzRokXSt29fGTp0qOzYsUMqVqwojRs3ltOnT3tsv2HDBmnbtq1JZu/cuVNatGhhlj179jjajBs3TqZMmSLTp0+XzZs3S6ZMmcw6r1696mijifG9e/fKqlWrZOnSpbJ+/Xrp1q2b4/nDhw9L8+bN5cEHH5Rdu3aZRPnZs2flscce82v/SI4DAAAAQAQOw/Z3AQAAkRfPJ06cKF27dpXOnTtLmTJlTEI7Y8aMMnPmTI/tJ0+eLE2aNJF+/fpJ6dKlZeTIkVKlShWZNm3aX9ttyaRJk2TQoEEmuV2hQgWZO3euHD9+XJYsWWLa7N+/X1asWCHvvvuu6alep04dmTp1qixcuNC0U9u3b5fY2FgZNWqU3HXXXeY9XnjhBZMov3Hjhs/7R3IcAAAAACKJv73M6D0OAEBExvPr16+bJLSWPbFFR0eb+xs3bvT4Gn3cub3SXuF2e+3xffLkSZc22bJlM0lwu43eaimVatWqOdpoe31v7Wmuqlatau7PmjXLJMkvXLgg//nPf0y7NGnS+LyPJMcBAAAAIKJEJXIBAADhEM8vXrzosly7ds3jO2iZEk08582b1+Vxva8Jbk/08YTa27e3apMnTx6X51OnTi05cuRwtClWrJisXLlSXnrpJUmXLp1Jpv/yyy/y3nvv+fUpkhwHAAAAgEhCz3EAACI6nhcqVMj01s721zJmzBgJNZok13IvHTt2lK1bt8qXX34padOmlccff9yUbvFV6iTdSgAAAAAAAABA0Dh27JhkzZrVcV97XnuSK1cuSZUqlZw6dcrlcb2fL18+j6/RxxNqb9/qY/nz53dpU6lSJUcb9wk/b968KefOnXO8PiYmxiT2dXJP27x580ziX0uv1KxZ06fPgp7jAAAAABBJ6DkOAEBEx3NNjDsv6bwkx7Unttb2Xr16teOxuLg4c79WrVoeX6OPO7dXq1atcrTXciia4HZuo6VdNKFtt9Hb8+fPm3rntjVr1pj31trk6sqVK6bmuDNN5Nvb6CuS4wAAAAAQSayoxC0AACDi4nnfvn3lnXfekTlz5sj+/fule/fucvnyZencubN5vkOHDjJw4EBH+169esmKFStkwoQJcuDAARk2bJhs27ZNevbsaZ6PioqS3r17y6hRo+STTz6R3bt3m3UUKFBAWrRoYdqULl1amjRpYsqmbNmyRb755hvz+jZt2ph2qlmzZqacyogRI+TQoUOyY8cOs01FihSRypUr+7x/lFUBACAF6FXwjz76SL766iv5+eefzVXv3LlzmyCuM3nXrl07pTcRABCmtAynH6U4Ha8BAACRF89bt24tZ86ckSFDhpg631r6RJPf9oSaR48edenBreeyCxYskEGDBpnJMkuWLClLliyRcuXKOdr079/fJNi7detmzo3r1Klj1pk+fXpHm/nz55uEeIMGDcz6W7ZsKVOmTHE8/+CDD5r30bIqumTMmNH0ONf1ZMiQwef9IzkOAEAyOn78uDmo0ECvV7yrV69uDi40eGv9tLVr18r48ePN1e6hQ4eaAxEAAAIqMWVSSI4DABCx8bxnz56Ont/u1q1bF++xVq1amcUb7T2uPb518SZHjhwm+Z0Q7Umuy+0gOQ4AQDLSnuE6m7bWTitTpozHNn/++ae5sj5p0iQzUcoLL7yQ7NsJAAhjiRlWTVkVAACCC/E8IEiOAwCQjPbt2yc5c+ZMsI32Im/btq1Zfvvtt2TbNgBAZIiy/rf4+xoAABA8iOeBwYScAAAko1slxm+3PQAAAAAA8A09xwEASOEa5F9//bWcPn1a4uLiXJ577rnnUmy7AABhjJrjAACEPuJ5QJAcBwAghcyePVuefvppSZs2rekhrpOS2PTfJMcBAEmCGqUAAIQ+4nlAkBwHACCFDB48WIYMGSIDBw6U6GgqnQEAkgk9zQAACH3E84AgOQ4AQAq5cuWKtGnThsQ4ACB5cTINAEhpUT6eA1mupSfhhHgeEJyNAwCQQrp06SKLFy9O6c0AAETqybS/CwAACB7E84Cg5zgAAClkzJgx8o9//ENWrFgh5cuXlzRp0rg8P3HixBTbNgAAAABIqt7i0Wn+Skmm9pKavHnT3FixsY6HrDinzC49yhEMPcfHjh1rJgzr3bu347GrV69Kjx49zMRimTNnlpYtW8qpU6dcXnf06FFp1qyZZMyYUfLkySP9+vWTm3/90QMAEEnJ8c8//9zEyd27d8vOnTsdy65du1J68wAA4T6Bl78LAAAIHsTzlE2Ob926Vd566y2pUKGCy+N9+vSRTz/91AwT//LLL+X48ePy2GOPOZ6PjY01ifHr16/Lhg0bZM6cOTJ79mwzIRkAAJFkwoQJMnPmTNm/f7+sW7dO1q5d61jWrFkjoSAmJkaKFi0q6dOnlxo1asiWLVtSepMAALcQZSVuSY44oeeRpUqVMu11VNXy5ctdnrcsy5w75s+fXzJkyCANGzaUQ4cOubQ5d+6ctGvXTrJmzSrZs2c3ZcwuXbqUuB2IEMRzAAg9yRnPw1mikuN6YKEHG++8847ccccdjscvXLggM2bMMMPAH3zwQalatarMmjXLJME3bdpk2qxcuVL27dsn8+bNk0qVKknTpk1l5MiRJhhrwhwAgEiRLl06ue+++yRULVq0SPr27StDhw6VHTt2SMWKFaVx48Zy+vTplN40AEAQ1Cj1N07oeWPbtm1NMltHUbVo0cIse/bscbQZN26cTJkyRaZPny6bN2+WTJkymXXqCGabnqvu3btXVq1aJUuXLpX169dLt27dEvdZRQDiOYDkEp0h/d/LnQXMYpW5y7FEFbvTsURnyWKWqFSpHAvcUHM85ZLjWjZFe3/rVXpn27dvlxs3brg8rlf9CxcuLBs3bjT39VZ7AOTNm9fRRgPvxYsXzQGMJ9euXTPPOy8AAIS6Xr16ydSpUyVU6cXwrl27SufOnaVMmTImUaEl07Q3PAAA/saJyZMnS5MmTUzZzdKlS5tOVFWqVJFp06Y5eo1PmjRJBg0aJM2bNzejmOfOnWtGKy9ZssS00dFYOpfHu+++a3pA16lTx8TahQsXmnaIj3gOAIhkfk/IqQcVejVZy6q4O3nypKRNm9YMXXOmiXB9zm7jnBi3n7ef81aTdfjw4f5uKgAAQU2HLGv5FO3VVrZs2XgTcn744YcSrHS0l14UHzhwoOOx6Ohoc4HcviAOAAhOWm3U32HVUckQJ/Rx7cHsTDtS2Ynvw4cPm3NG585Y2bJlM0lwfW2bNm3MrZ6PVqtWzdFG2+t7a0/zf/7zn37uSXgjngNIas49vqNz53T8+2TjAub292o3HI9l3pfF8e87V/z1j0uXk2U7Q1FyxPNI4Fdy/NixY6aXmw5P01pkyUUDtfNBkvYcL1SoULK9PwAASUFP3p3n5QglZ8+eNfOIeLrgfeDAAa8jwXSxMRIMAEKP+2+3lgjTJRBxwltHKueOVvZjCbXJkyePy/OpU6eWHDlyeO2MFcmI5wCASOdXclyvKGvdMR3aZtNAqjXcdKjb559/bq48nz9/3qX3+KlTpyRfvnzm33rrPrmHPm8/54m3Ay4AAEKZzssRSRgJBgBBwor63+Lva0TidVLSOtXDhg0L5NYhyBHPASD04zkSmRxv0KCB7N692+UxrUumdcVffPFFc6CkQ8JXr14tLVu2NM8fPHhQjh49KrVq1TL39Xb06NEmyW5f0dee6DqTuNY3AwAAwS9XrlySKlUqxwVuTxfE3TESDACCRGIm5LL+Hk2s5242b52YEhMn9PGE2tu3+lj+/Pld2lSqVMnRxn0iyZs3b8q5c+e8vm8kI54DSE5WloyOf/9+73Vz+1OTGY7HSmVp7/h37IYM5jY62imZa8Ulz4ZGQDxHIifkzJIli5QrV85l0dnBc+bMaf6t9d50ZnENlGvXrjU9zTV5rgnxmjVrmnU0atTIJMHbt28v3377reltrhOq6CSf9A4HAIQ7nWhs06ZNt2z3xx9/yKuvvioxMTESjHSOkapVq5oL4ra4uDhz374g7k7jvCZUnBcAQAqeTPu7iMT7Hfd2DpeYOKGPO7e3O1LZ7YsVK2YSts5tNDGrtcSdO2PpSGY9F7Xp/B763lqbHK6I5wAQmfEctzEh5628/vrrZgIP7Tmudch0ApU33njD8bxeldaJx7p3726CrSbXO3bsKCNGjAj0pgAAEHRatWplYqReUH7kkUfMhGEFChQwc3n8/vvvsm/fPvn6669l+fLl0qxZM3nttdckWOnFcI3hug/Vq1eXSZMmyeXLl82FcQBA8NLJu/yewMsKfJzo0KGDFCxY0JTpUDq/Vd26dWXChAkmBi5cuFC2bdsmb7/99v+2ISpKevfuLaNGjZKSJUuaZPngwYNNHG3RooVpU7p0aXMhumvXrjJ9+nS5ceOG9OzZ00zWqe0QH/EcQHKJuvL3fAUZD/1vcs56hZo7HrN+yOz4d/SV8//7RxzZ3JSO5+HutpPj69atc7mvJ/fayy2hnm5FihQxJ/0AAEQaHWH1xBNPyOLFi2XRokXmhP/ChQuOk34dXaUXlrdu3WpO8INZ69at5cyZMzJkyBAzyZkOaV+xYkW8Sb0AAJE5DPtWcULLb2rHKlvt2rVlwYIFZmTxSy+9ZBLgS5YsMaOUbf379zeJ227dupke4nXq1DHr1PNQ2/z5801CXMuC2h23pkyZ4v8ORAjiOQCEKMqqBESUZVkh97Ho0DntcafJBIZwAUDkKDpgmc9tj4xtFjLxRtf/559/mjJlOndHpLA/3yKvjpJop6QGAOB/4q5elZ9fHBSwOGT/7hYdOdrv313dliODX+YcDF7/rupJc0kdFTnHMQB8E5UqlePfqYr8PT/Bz63/N5on14PHHY+d2Pr3CJ/ii/7qOX7gJ8djcdeuSqi5ad2QdfJxQOMn8TzIy6oAAAD/6IGNLgAAAAAQTiynsijWb787/n3nqizm9sqBv0epFP797+R39Jn/tY2NjU2mLUWkIjkOAAAAABGEGqUAAIQ+4nlgkBwHAAAAgEhiRf1v8fc1AAD4y4pz/DPu8hXHv6N/OGZus5zI+HfbuL/bWn9civd6uCGeBwTJcQAAAACIJEzgBQBA6COeBwTJcQAAAACIIAzDBgAg9BHPAyM6QOsBAAB+6tixo6xfvz6lNwMAEKk9zfxdAAC4DVZs7N/LlStmifv9/N/LhYt/L1evmUUn9LQXuCGeBwTJcQAAUsiFCxekYcOGUrJkSXnllVfk119/TelNAgAAAAAgYpAcBwAghSxZssQkxLt37y6LFi2SokWLStOmTeX999+XGzdupPTmAQDC1V/DsP1Z6GkGALhtOrnmX4ujB/n1Gx4X57aOBa6I5wFBchwAgBSUO3du6du3r3z77beyefNmKVGihLRv314KFCggffr0kUOHDqX0JgIAwg3DsAEACH3E84AgOQ4AQBA4ceKErFq1yiypUqWShx9+WHbv3i1lypSR119/PaU3DwAQTjiZBgAg9BHPAyJ1YFYDAAD8paVTPvnkE5k1a5asXLlSKlSoIL1795Z///vfkjVrVtPmo48+kieffNL0IgcAIBAcQ6v9fA0AAIFiT7AZFf13uRQm3fQP8Tww6DkOAEAKyZ8/v3Tt2lWKFCkiW7ZskW3btskzzzzjSIyr+vXrS/bs2VN0OwEAAAAAkSsmJsbMkZU+fXqpUaOGOX9NyOLFi6VUqVKmffny5WX58uUuz1uWJUOGDDHnxBkyZJCGDRvGKyl67tw5adeunTk/1nPiLl26yKVLl+KtZ/z48XL33XdLunTppGDBgjJ69Gi/9o3kOAAAKUTLpRw/ftwcaFSqVMljGz0IOHz4cLJvGwAAAAAkGXtizjjLsSA4LVq0yMyTNXToUNmxY4dUrFhRGjduLKdPn/bYfsOGDdK2bVuTzN65c6e0aNHCLHv27HG0GTdunEyZMkWmT59u5t7KlCmTWefVq1cdbTQxvnfvXlN6dOnSpbJ+/Xrp1q2by3v16tVL3n33XZMgP3DggBmZXb16db/2j+Q4AAApRCfe1CvpAAAkK2qUAgAQ+pIpnk+cONGMeO7cubOZE0sT2hkzZpSZM2d6bD958mRp0qSJ9OvXT0qXLi0jR46UKlWqyLRp0/632ZYlkyZNkkGDBknz5s1NedG5c+eajmNLliwxbfbv3y8rVqwwiW/tqV6nTh2ZOnWqLFy40LSz27z55pvy8ccfy6OPPirFihWTqlWrykMPPeTX/pEcBwAAAIAIrFHq7wIAACIrnl+/fl22b99uyp7YoqOjzf2NGzd6fI0+7txeaa9wu72OjD558qRLm2zZspkkuN1Gb3UUdbVq1RxttL2+t/Y0V59++qkUL17c9CrXxLiWfXnqqadMORZ/MCEnACDFFR2wLKU3AQCAyEKyGwAQLOVVkOzx/OLFiy7306VLZxZ3Z8+eldjYWMmbN6/L43pfy5h4oolvT+31cft5+7GE2uTJk8fl+dSpU0uOHDkcbX766Sf5+eefTX1z7Xmu29mnTx95/PHHZc2aNT5/FvQcBwAAAIBIQlkVAAAiOp4XKlTI9NbO9tcyZswYCTVxcXFy7do1kxi///77pV69ejJjxgxZu3atHDx40Of10HMcAAAAACJIYoZVU1YFAIDwiefHjh2TrFmzOh731Gtc5cqVS1KlSiWnTp1yeVzv58uXz+Nr9PGE2tu3+lj+/Pld2lSqVMnRxn3Cz5s3b5qSKfbr9bXam/zuu+92tNEa5+ro0aNyzz333PoDoec4AAAAAEQYeo4DABDR8VwT485LOi/J8bRp05pJLlevXu3SY1vv16pVy+Nr9HHn9mrVqlWO9lofXBPczm20zIvWErfb6O358+dNvXOblkrR99ba5Oq+++4zCfMff/zR0eb77783t0WKFPH5Y6TnOAAAAAAAAAAgnr59+0rHjh3N5JjVq1eXSZMmyeXLl6Vz587m+Q4dOkjBggUdpVl69eoldevWlQkTJkizZs1k4cKFsm3bNnn77bfN81FRUdK7d28ZNWqUlCxZ0iTLBw8eLAUKFJAWLVo4eoA3adJEunbtKtOnT5cbN25Iz549pU2bNqadPUFnlSpV5MknnzTbpInzHj16yEMPPeTSm/xWSI4DAAAAQAShrAoAAKEvueJ569at5cyZMzJkyBAzGaaWPlmxYoVjQk0tYRId/Xdxktq1a8uCBQtk0KBB8tJLL5kE+JIlS6RcuXKONv379zcJ9m7dupke4nXq1DHrTJ8+vaPN/PnzTUK8QYMGZv0tW7aUKVOmOJ7Xxz799FN59tln5YEHHpBMmTJJ06ZNTVLeHyTHAQAAACCSJKZMCslxAAAiNp737NnTLJ6sW7cu3mOtWrUyizfae3zEiBFm8SZHjhwmyZ4Q7UX+wQcfyO0gOQ4AAAAAkYTkOAAAoY94HhAkxwEAAAAgglBWBQCA0Ec8DwyS4wAAAAAQSehpBgBA6COeB8Tf1dIBAAAAAAAAAIgQfiXH33zzTalQoYJkzZrVLLVq1ZLPPvvM8fzVq1elR48ekjNnTsmcObOZRfTUqVMu69AZTJs1ayYZM2aUPHnySL9+/eTmzZuB2yMAAAAAwK17mvm7AACA4EE8T/7k+J133iljx46V7du3y7Zt2+TBBx+U5s2by969e83zffr0kU8//VQWL14sX375pRw/flwee+wxx+tjY2NNYvz69euyYcMGmTNnjsyePVuGDBkSmL0BAAAAAPhUo9TfJSmdO3dO2rVrZzphZc+eXbp06SKXLl1K8DW36pz17bffStu2baVQoUKSIUMGKV26tEyePNllHevWrZOoqKh4y8mTJ5NsXwEACNd4HvY1xx955BGX+6NHjza9yTdt2mQS5zNmzJAFCxaYpLmaNWuWOQDR52vWrCkrV66Uffv2yRdffCF58+aVSpUqyciRI+XFF1+UYcOGSdq0aQO7dwAAAACAoK9RqonxEydOyKpVq+TGjRvSuXNn6datmzm/9EY7Zy1btsx0zsqWLZv07NnTdM765ptvzPPaqUtHK8+bN88kyLWDlq4zVapUpq2zgwcPmsS8TV8HAEBQC8J4HlETcmovcD0IuXz5simvogceehDTsGFDR5tSpUpJ4cKFZePGjSY5rrfly5c3iXFb48aNpXv37qb3eeXKlW9/jwAAAAAAXiWm51hS9jTbv3+/rFixQrZu3SrVqlUzj02dOlUefvhhGT9+vBQoUCDeay5cuHDLzllPPvmky2uKFy9uzkk//PDDeMlxTYZrj3UAAEJFsMXziJmQc/fu3WbIWrp06eSZZ56Rjz76SMqUKWOGnWnPb/cDCk2E20PS9NY5MW4/bz/nzbVr1+TixYsuCwAAAAAg9GuUasJazyPtxLjSTlfR0dGyefNmj6+5VecsbzSpniNHjniP66jm/Pnzy0MPPeToeQ4AQFALsngeMT3H77nnHtm1a5c5qHj//felY8eOpr54UhozZowMHz48Sd8DAAAAAJAw945K2mlKl9uhHaXcy5ikTp3aJLG9daLypXOWOy2rsmjRIlOKxaYJ8enTp5vEvHbKevfdd6VevXomKV+lSpXb2i8AABCGPcf1AKREiRJStWpVk7SuWLGimdQkX758ZqLN8+fPu7TXCVH0OaW3zhOk2M/bz3kzcOBAk4y3l2PHjvm72QAAAACA2+xpprW7tb63veg5oTcDBgzwONml83LgwIFk2eU9e/ZI8+bNZejQodKoUSOXzl9PP/20Ob+tXbu2zJw509y+/vrrybJdAAAkGj3HU7bmuC0uLs5cYdeDiTRp0sjq1avNLOH2pCZHjx41NcmV3uoknqdPn3b0DNAJV3TiEy3N4k0geiMAAAAAAESi/lr8fY3SjkrOE1cmdJ72/PPPS6dOnRJcr9YB145Seo7o7ObNm3Lu3DmvnaicO2c59x537pxl27dvnzRo0MBMxjlo0CC5lerVq8vXX399y3YAAIRqPEcik+Pag7tp06amjtsff/xhJj9Zt26dfP7556bXQJcuXaRv375m+JseMD377LMmIa6ToSi9Qq9J8Pbt28u4cePMcDc9OOnRowfJbwAAAABIDonpOfZXez3Pc06OJyR37txmuRU9Z9Qkt9YR105Xas2aNaYjVo0aNTy+xpfOWWrv3r1mwk4tB6odtXyhZUS13AoAAOEaz5HI5Lheze/QoYOcOHHCJMMrVKhgEuM6aYnSoWc6aYoenGhv8saNG8sbb7zheH2qVKlk6dKl0r17d3PAkilTJnOQMmLECH82AwAAAACQSFHW/xZ/X5NUSpcuLU2aNJGuXbua+t860WbPnj2lTZs2UqBAAdPm119/Nb2/586da3p2+9I5S0upaGJcz0u1nV2LXM9L7aT9pEmTpFixYlK2bFm5evWqqTmuifmVK1cm3Q4DABCG8TwikuMzZsxI8Pn06dNLTEyMWbwpUqSILF++3J+3BQAAAACEcU+z+fPnm4S4JsDtDldTpkxxPK8Jc+0ZfuXKFcdjt+qc9f7778uZM2dk3rx5ZnE+Jz1y5Ij5t5Zm0fIvmnzPmDGj6QD2xRdfSP369ZN2hwEACMN4HpE1xwEAAAAAuB3a+1vLdnpTtGhRsSzLr85Zw4YNM0tC+vfvbxYAABCZSI4DAAAAQKSh5xgAAKGPeH7bom9/FQAAIJTohGS1a9c2w8ezZ8/usY1OaNasWTPTJk+ePNKvXz+5efOmSxudlLtKlSpmUu0SJUrI7Nmzk2kPAACBqFHq74LgQjwHgMhGPA8MkuMAAEQYra/aqlUrM0G2J7GxseZEWttt2LBB5syZY06UhwwZ4mhz+PBh00Zrsu7atUt69+4tTz31lJmoGwAQIjVK/V0QVIjnABDhiOcBQVkVAAAizPDhw82tt55hK1eulH379pkJyfLmzSuVKlWSkSNHyosvvmhqt6ZNm1amT58uxYoVkwkTJpjXlC5dWr7++mszOZpOiAYACF6J6TlGT7PgQzwHgMhGPA8Meo4DAAAXGzdulPLly5sTaZueIF+8eFH27t3raNOwYUOX12kbfRwAEOToaRYRiOcAEOaI5wFBz3EAAODi5MmTLifSyr6vzyXURk+4//zzT8mQIUO89V67ds0sNm0LAEh+9DSLDMRzAAhvxPPAoOc4AABhYMCAARIVFZXgcuDAgRTdxjFjxki2bNkcS6FChVJ0ewAACDbEcwAAkhc9xwEACAPPP/+8dOrUKcE2xYsX92ld+fLlky1btrg8durUKcdz9q39mHObrFmzeuxlpgYOHCh9+/Z16WnGCTUApIDEDKump1myIJ4DAHxGPA8IkuMAAISB3LlzmyUQatWqJaNHj5bTp09Lnjx5zGOrVq0yJ8plypRxtFm+fLnL67SNPu5NunTpzAIASGGcTAct4jkAwGfE84CgrAoAABHm6NGjsmvXLnMbGxtr/q3LpUuXzPONGjUyJ83t27eXb7/9Vj7//HMZNGiQ9OjRw3Ey/Mwzz8hPP/0k/fv3N8O733jjDXnvvfekT58+Kbx3AABfa5T6uyC4EM8BILIRzwODnuMAAESYIUOGyJw5cxz3K1eubG7Xrl0r9erVk1SpUsnSpUule/fupudYpkyZpGPHjjJixAjHa4oVKybLli0zJ8+TJ0+WO++8U959911p3LhxiuwTAMAP9DQLC8RzAIhwxPOAIDkOAECEmT17tlkSUqRIkXjDrN3piffOnTsDvHUAgKQWZVlm8fc1CC7EcwCIbMTzwKCsCgAAAAAAAAAg4tBzHAAAAAAiCcOwAQAIfcTzgCA5DgAAAAARJDETcjGBFwAAwYV4HhgkxwEAAAAgktDTDACA0Ec8DwiS4wAAAAAQQehpBgBA6COeBwYTcgIAAABAJPY083cBAAARGc9jYmKkaNGikj59eqlRo4Zs2bIlwfaLFy+WUqVKmfbly5eX5cuXu266ZcmQIUMkf/78kiFDBmnYsKEcOnTIpc25c+ekXbt2kjVrVsmePbt06dJFLl265PH9fvjhB8mSJYtp5y+S4wAAAAAAAACAeBYtWiR9+/aVoUOHyo4dO6RixYrSuHFjOX36dPzGIrJhwwZp27atSWbv3LlTWrRoYZY9e/Y42owbN06mTJki06dPl82bN0umTJnMOq9evepoo4nxvXv3yqpVq2Tp0qWyfv166datW7z3u3Hjhnm/+++/XxKD5DgAAAAAROAwbH8XAAAQefF84sSJ0rVrV+ncubOUKVPGJLQzZswoM2fO9Nh+8uTJ0qRJE+nXr5+ULl1aRo4cKVWqVJFp06Y5eo1PmjRJBg0aJM2bN5cKFSrI3Llz5fjx47JkyRLTZv/+/bJixQp59913TU/1OnXqyNSpU2XhwoWmnTNdj/ZS/9e//pWYj5HkOAAAAABEFMqqAAAQ0fH84sWLLsu1a9c8vsX169dl+/btpuyJLTo62tzfuHGjx9fo487tlfYKt9sfPnxYTp486dImW7ZsJglut9FbLZFSrVo1Rxttr++tPc1ta9asMSVctOxLYpEcBwAAAIAIQ69xAAAiN54XKlTIJKSz/bWMGTPG4/rPnj0rsbGxkjdvXpfH9b4muD3RxxNqb9/eqk2ePHlcnk+dOrXkyJHD0ea3336TTp06yezZs01d8sRKnehXAgAAAABCj2X9b/H3NQAAICzi+bFjx1wSyunSpZNQo6Ve/v3vf8sDDzxwW+uh5zgAAAAARBBqjgMAENnxXBPjzks6L8nxXLlySapUqeTUqVMuj+v9fPnyeXyNPp5Qe/v2Vm3cJ/y8efOmnDt3ztFGS6qMHz/e9CjXRScAvXDhgvm3t3rontBzHACQJIoOWJbSmwAAADxJTA1xkuMAAERcPE+bNq1UrVpVVq9eLS1atDCPxcXFmfs9e/b0+JpatWqZ53v37u14bNWqVeZxVaxYMZPg1jaVKlUyj2ndc60l3r17d8c6zp8/b+qd6/vbyXB9b61Nbtcl15Ivto8//lheffVV2bBhgxQsWNDnfSQ57kcC58jYZkm+LQAAAAAAAAAQDPr27SsdO3Y0k2NWr15dJk2aJJcvX5bOnTub5zt06GCS0Xbd8l69ekndunVlwoQJ0qxZM1m4cKFs27ZN3n77bfN8VFSUSZyPGjVKSpYsaZLlgwcPlgIFCjgS8KVLl5YmTZqY0inTp0+XGzdumGR8mzZtTDu7jTN9D52ws1y5cklXVkV38t5775UsWbKYoui6wQcPHnRpc/XqVenRo4fkzJlTMmfOLC1btozXTf7o0aPmw8mYMaNZT79+/UzXeAAAAABA0oqKS9wCAAAiL563bt3alC8ZMmSI6em9a9cuWbFihWNCTc3znjhxwtG+du3asmDBApMMr1ixorz//vuyZMkSl6R1//795dlnn5Vu3bqZXPOlS5fMOtOnT+9oM3/+fClVqpQ0aNBAHn74YalTp44jwR5IfiXHv/zyS5P43rRpk+kOr1n7Ro0amasFtj59+sinn34qixcvNu2PHz8ujz32mON57e6uifHr16+bbu5z5swxs4rqBwwAAAAASKZh2P4uSUhriLZr187UPc2ePbupG6onygnxpWOW9k5zX7QHm7N169ZJlSpVTL3VEiVKmPNTAACCXjLG8549e8rPP/8s165dM+VP7NImdhx1j52tWrUyHaq1/Z49e0xy25nG4xEjRsjJkydNPP/iiy/k7rvvdmmTI0cOk2T/448/TC1xrSOu8d6bTp06mVIsSZoc1wy+vlHZsmVN5l93XK8OaP0XpRs6Y8YMmThxojz44IOmJsysWbNMElwT6mrlypWyb98+mTdvnrna0LRpUxk5cqTExMSYhDkAAAAAILIm5NTE+N69e00nrKVLl8r69etNb7KE3Kpjlk3PSbVHm73YQ7bV4cOHTeet+vXrm55wOsz7qaeeks8//zxJ9hMAgHCO56HIr+S4O02G25l8pUly7U3esGFDRxvt/l64cGFTJF3pbfny5R1d71Xjxo1N4XU9GAIAAAAAJCHLStySRPbv3286Yr377rumJ5oOm546darp4a0Jb0986Zhl057oOvGXvTgP2dY6plrrVOuiau1S7Rn3+OOPy+uvv55k+wsAQDjG84hLjuvsoHpV/b777nPUjNGu8DqLqR58ONNEuD5nt3FOjNvP2895ol3wNXnuvAAAAAAAQr+nmXag0nNInejLph2udFItHbrtiS8ds2xaeiVXrlxmEjEdkm05JQa0rfM67M5b7usAACDYBFs8D1WpE/tCPcDQmjFff/21JDWdCHT48OFJ/j4AAAAAAO/cOyppnW5dbod2ksqTJ4/LY6lTpzYjlL11oPKlY5bSeqbaszxjxoymxOf//d//mVrmzz33XIKdt3Q///zzT8mQIcNt7RsAAAjDnuM61EzrwK1du1buvPNOx+M6RE3rhrsXP9dJUfQ5u437JCn2fbuNu4EDB5phc/Zy7NixxGw2AAAAAOA2JvAqVKiQZMuWzbFoRyZvBgwY4HFCTOflwIEDSbqrgwcPNqOdK1euLC+++KL0799fXnvttSR9TwAAInWC7bDvOa7Dz5599ln56KOPzEykWpvNmdZ5S5MmjaxevdrMFK50ZlKdtLNWrVrmvt6OHj1aTp8+7egdoJOu6KzkZcqU8fi+geiNAAAAAABI3LBqu712VNJzN1tC52nPP/+8dOrUKcH1Fi9e3HSS0vNDZzdv3pRz58557UDl3DHLufe4c8csT7Sm+ciRI03pTt12b523dB/pNQ4ACNd4jkQmx7WUyoIFC+Tjjz+WLFmyOIaraY8BPXDQ2y5dukjfvn3NEDg9oNBkuibEa9asado2atTIJMHbt28v48aNM+sYNGiQWTcJcAAAAABIYomZkOuv9nqO55wcT0ju3LnNcit6vqhJbq0jrh2u1Jo1a8w8V5rM9sSXjlme7Nq1S+644w7Huae2Xb58uUsb7byV0DoAAAj1eI5EJsfffPNNc1uvXj2Xx3VWcLtHgM7qrROn6AGKXo3XyUzeeOMNR9tUqVKZkizdu3c3BxyZMmWSjh07mlpwAAAAAIDI6mlWunRpadKkiXTt2lWmT59uJtrUUp5t2rSRAgUKmDa//vqrNGjQQObOnWsm1vSlY9ann35qeoHr/fTp05uk9yuvvCIvvPCC472feeYZmTZtmim38uSTT5qk/HvvvSfLli1Luh0GACAM43nElFW5FT3oiImJMYs3RYoUiXd1HgAAAACQDBJTczSJT6bnz59vEuKaALc7W02ZMsXxvCbMtWf4lStXHI/dqmOW9izX89I+ffqYc9kSJUrIxIkTTRLepqVCNRGubSZPnmzm1Hr33XfNugAACGpBGM/DPjkOAAAAAECgae9vLeHpTdGiReN11rpVxyztja7LrejI6J07dyZiqwEAQKgjOQ4AAAAAEYRh2AAAhD7ieWCQHAcAAACASBJn/W/x9zUAACB4EM8DguQ4AAAAAEQSapQCABD6iOcBQXIcAAAAACJIVCKGVetrAABA8CCeBwbJcQAAAACIJDqxpdvklj69BgAABA/ieUCQHAcA+KXogGUpvQkAAAAAAAC3jeQ4AAAAAEQQHYLt9zBsOpoBABBUiOeBQXIcAAAAACIJE3gBABD6iOcBQXIcAAAAACJIlGWZxd/XAACA4EE8DwyS4wAAAAAQSeL+Wvx9DQAACB7E84AgOQ4AAAAAEYSeZgAAhD7ieWCQHAcAAACASEKNUgAAQh/xPCCiA7MaAAAAAAAAAABCBz3HAQAAACCS6JBqf4dVMwwbAIDgQjwPCHqOAwAQQY4cOSJdunSRYsWKSYYMGeSuu+6SoUOHyvXr113afffdd3L//fdL+vTppVChQjJu3Lh461q8eLGUKlXKtClfvrwsX748GfcEAJBYUVbiFgQP4jkAgHgeGCTHAQCIIAcOHJC4uDh56623ZO/evfL666/L9OnT5aWXXnK0uXjxojRq1EiKFCki27dvl9dee02GDRsmb7/9tqPNhg0bpG3btubEfOfOndKiRQuz7NmzJ4X2DADgd08zfxcEDeI5AIB4HhiUVQEAIII0adLELLbixYvLwYMH5c0335Tx48ebx+bPn296ns2cOVPSpk0rZcuWlV27dsnEiROlW7dups3kyZPNevr162fujxw5UlatWiXTpk0zJ+cAgOAVFfe/xd/XIHgQzwEAxPPAoOc4AAAR7sKFC5IjRw7H/Y0bN8oDDzxgTqRtjRs3Nifdv//+u6NNw4YNXdajbfRxb65du2Z6sTkvAIAUQE+zsEQ8B4AIQzwPCJLjAABEsB9++EGmTp0qTz/9tOOxkydPSt68eV3a2ff1uYTa2M97MmbMGMmWLZtj0dqnAADg9hHPAQBIHJLjAACEgQEDBkhUVFSCi9Yndfbrr7+aodStWrWSrl27Jvk2Dhw40PRqs5djx44l+XsCADywErkgyRHPAQA+I54HBDXHAQAIA88//7x06tQpwTZaj9R2/PhxqV+/vtSuXdtlYi6VL18+OXXqlMtj9n19LqE29vOepEuXziwAgJQVZVlm8fc1SHrEcwCAr4jngUFyHACAMJA7d26z+EJ7mOmJdNWqVWXWrFkSHe06kKxWrVry8ssvy40bNyRNmjTmMZ2c65577pE77rjD0Wb16tXSu3dvx+u0jT4OAAhyiak5ysl0siCeAwB8RjwPCMqqAAAQQfREul69elK4cGEZP368nDlzxtQVda4t+u9//9tM3tWlSxfZu3evLFq0SCZPnix9+/Z1tOnVq5esWLFCJkyYYIZ3Dxs2TLZt2yY9e/ZMoT0DAPhMz4vj/Fw4lw4qxHMAQHLG85iYGClatKikT59eatSoIVu2bEmw/eLFi6VUqVKmffny5WX58uWum25ZMmTIEMmfP79kyJDBTA596NAhlzbnzp2Tdu3aSdasWSV79uwmnl26dMnx/Lp166R58+ZmHZkyZZJKlSrJ/Pnz/d43kuMAAEQQ7Q2mk3ZpL7E777zTHEjYi00n11q5cqUcPnzY9EbTId564NKtWzdHGx2+vWDBAjOEu2LFivL+++/LkiVLpFy5cim0ZwAAf4dh+7sgeBDPAQDJFc8XLVpkLqwOHTpUduzYYeJF48aN5fTp0x7bb9iwQdq2bWuS2Tt37pQWLVqYZc+ePY4248aNkylTpsj06dNl8+bNJrmt67x69aqjjSbG9eKuxrylS5fK+vXrXWKYvk+FChXkgw8+kO+++046d+4sHTp0MG39/BxD7yjn4sWLJtDr5B969eB2FR2wzKd2R8Y2u+33AoBQ5+tvZkoLxG92oOMNPH++RV4dJdHp06f05gBA0Im7elV+fnFQwOKQ/bv7YOUBkjqVf7+7N2OvypqdY4mJ8Pp3VU+aS+qo/5VvAQD8z03rhqyTjwMaP5M7nteoUUPuvfdemTZtmrkfFxcnhQoVkmeffdZMJO2udevWcvnyZZckdc2aNU3Pbk2Gayq6QIEC5qLtCy+8YJ7X7cmbN6/Mnj1b2rRpI/v375cyZcrI1q1bpVq1aqaNjnR6+OGH5ZdffjGv96RZs2ZmPTNnzvT5M6HnOAAAAABEEsupTqnPS0pvNAAACFQ81wS783Lt2jWPb3H9+nXZvn27KXti0zku9P7GjRs9vkYfd26vtFe43V5HNGkZMOc2muzXJLzdRm+1lIqdGFfaXt9be5p7o0n2HDly+Pb52fvjV2sAAAAAQGjz+0Q6ERN+AQCAoI3n2vNbE9LZ/lrGjBnj8S3Onj0rsbGxpje2M73vPM+FM308ofb27a3a5MmTx+X51KlTm8S3t/d97733TE9zLa+SpMlxre/yyCOPmO7rUVFRph5ZoAuqAwAAAACSSFwilySUmHNErUvao0cPyZkzp2TOnFlatmwpp06dcjyvQ7P1nNXTYtdJ1cm8PD3v7cQbAIBwiOfHjh0zvawv/LUMHDhQQtnatWtNUvydd96RsmXLJm1yXGvGaOF1naXUk0AUVAcAAAAARM6EnIk5R+zTp498+umnsnjxYvnyyy/l+PHj8thjj7nUPD1x4oTLouemdevWjdcb7eDBgy7t3J8HACCc4rlejHZe0qVL5/E9cuXKJalSpXK5+Kz0fr58+Ty+Rh9PqL19e6s27hN+3rx501xMd39fPQbQjtyvv/66mZDTX34nx5s2bSqjRo2Sf/7zn/Ge017jkyZNkkGDBknz5s3NjKFz5841Byl2D3MtqK4F1N99911TS6ZOnToydepUWbhwoWkHAAAAAIicsiqJOUfUXm4zZsyQiRMnyoMPPihVq1aVWbNmyYYNG2TTpk2mjY5k1hNoe9GT+zVr1phe6e40Ge7cVmuaAgAQ6fE8bdq0JsauXr3a8ZhOyKn3a9Wq5fE1+rhze6UXv+32xYoVM7HWuY3WPddO1nYbvT1//rypd27TGK7vrccKNh0BppNwvvrqq4nueB3QiJ9UBdW1KLx7oXgAAAAAQOgnxxNzjqgnyzdu3HA59yxVqpQULlzY6wRh2nErY8aM8vjjj8d7rlKlSqY06EMPPSTffPNNQPYLAIBwiOd9+/Y15UrmzJljLmh3797dVBaxa3trb23nsiy9evUyF70nTJggBw4ckGHDhsm2bdukZ8+e5nktX9a7d2/T+fqTTz6R3bt3m3VoCe8WLVqYNqVLl5YmTZpI165dZcuWLSY26+vbtGlj2tmlVDQx/txzz5nSapqT1kV7l/sjtQRQUhVU16Lww4cPD+SmAgCcFB2wLKU3AQAAhAD3jko6DNvbUGxfJeYcUR/X3myaVPd1gjDtaf7vf//b9Ci3aUJcS4JqYl47ZWnv9Xr16pmkfJUqVW5rvwAACAetW7eWM2fOmDkmNcbqBWVNftv536NHj7qMuKpdu7YsWLDAVBZ56aWXpGTJkqaiSLly5Rxt+vfvbxLs2ttbe4jrqDFdZ/r06R1t5s+fbxLiDRo0MOvXBLiW8rZpsv7KlSsmb+w8oaiWT9Me5SmSHE8qevVBr1I4H5DprKoAAAAAAD8lpufYX+3dz8OGDh1qeoR5MmDAADPMOSHaAy05aG9yfa///Oc/Lo/fc889ZnE+of/xxx9N3VL3tgAAhEs891fPnj0dPb/deUpEt2rVyizeaO/xESNGmMUbvUiuSXZvdOJtXW5XQJPjzgXV9Qq8Te/rVQV/C6oHsjcCAAAAAECLhepZaSJeIyLHjh0zE3fZEjpPe/7556VTp04JrrZ48eKJOkfUx69fv256mzn3Hvc2QZj2CNdzUq2beivVq1eXr7/++pbtAAAI1XiOJEqOOxdUt5PhdkF1rUfjXlDdPjDxVFAdAAAAABB4UZZlFn9fozQx7pwcT0ju3LnNciuJOUfUdmnSpDHnnjrMWh08eNAM7XafIOzSpUvy3nvvuQy5TsiuXbtcOnsBABBu8Ry3kRzXA4sffvjBZRJOPXjQru46+YldUF3ryWiyfPDgwV4LqmttN51Exb2gOgAAAAAg9Idh+8KXc8Rff/3V1BzVSTW1Z3e2bNmkS5cupvymnotqwv7ZZ581ifGaNWu6rH/RokWmJ/oTTzwR770nTZpkzlvLli0rV69eNT3MNTG/cuXKJNtfAADCMZ5HTHJcZxetX7++475dC7xjx46mzksgCqoDiOwJH4+MbZak2wIAABDR4iztOub/a5LQrc4RNWGuPcN14i2b1gW32+pkmo0bN5Y33njD40Scjz32WLzJO5WWZtHyL5p8z5gxo1SoUEG++OILl3NeAACCUhDG84hIjuvM3VYCVxkCUVAdAAAAABA5bnWOWLRo0XjnodoBKyYmxiwJ2bBhg9fntHOXLgAAIDIFtOY4AAAAACDIMQwbAIDQRzwPCJLjAEK2BAvlVwJbzgYAAESKRJxM62sAAEAQIZ4HAslxIJmR+AUAAECKoqcZAAChj3geECTHgSCdRDJUJrCkZzIAAECIMZNxMYEXAAAhjXgeECTHEZFI6AIAACBiWXH/W/x9DQAACB7E84AgOQ5EkFDpjQ4AAAAAAAAkNZLjQICEW2/0cNsfAAAA/IUapQAAhD7ieUCQHAcAAACASEKNUgAAQh/xPCBIjgOICL72hKecDAAACHv0NAMAIPQRzwOC5DgAAAAARBLT0czfk+mk2hgAAJAoxPOAIDkOAE7oYQ4AAMIePc0AAAh9xPOAIDkOACGICVMBAAAAAABuD8lxACGLBDEAAEAixMXp/yXiNQAAIGgQzwOC5DgQBkgSAwAAwGcMwwYAIPQRzwOC5DjCBglihDr+hgEAQLLgZBoAgNBHPA8IkuMAkAgksgEAQMiK0xNjKxGvAQAAQYN4HhAkxwEAAAAgglhWnFn8fQ0AAAgexPPAIDmOoEcPXQAAACCAdEi1vz3HGIYNAEBwIZ4HRHRgVgMAAAAAAAAAQOig5zhSDD3CAQAAgBRgeo3R0wwAgJBGPA8IkuMAAAAAEEni4kSi/Kw5So1SAACCC/E8IEiOAwAAAEAkoacZAAChj3geECTHk6gMyJGxzZJ0WwAAAAAgMay4OLH87Glm0dMMAICgQjwPDJLjAAAAABBJ6GkGAEDoI54HRHRgVgMAAAAAAAAAQOig53gEl3+h9AsAAAAQgeIskSh6mgEAENKI5wFBcjwI6pOHQiI70PsDAEg5jz76qOzatUtOnz4td9xxhzRs2FBeffVVKVCggKPNd999Jz169JCtW7dK7ty55dlnn5X+/fu7rGfx4sUyePBgOXLkiJQsWdKs4+GHH06BPQIA+H9i7GfNUU6mgw7xHAAiHPE8tMuqxMTESNGiRSV9+vRSo0YN2bJlS0ptSkjQ5LSvS0quEwAQ/OrXry/vvfeeHDx4UD744AP58ccf5fHHH3c8f/HiRWnUqJEUKVJEtm/fLq+99poMGzZM3n77bUebDRs2SNu2baVLly6yc+dOadGihVn27NmTQnsFAPCVFWclaklK586dk3bt2knWrFkle/bsJr5cunQpwddoXKpXr555TVRUlJw/fz5R69UE8v3332/OTQsVKiTjxo2TUEA8B4DIlpzxPMbPPK5eeC1VqpRpX758eVm+fLnrtluWDBkyRPLnzy8ZMmQwF3gPHTqUIjE8RZLjixYtkr59+8rQoUNlx44dUrFiRWncuLG54g0AAJJWnz59pGbNmuZkuXbt2jJgwADZtGmT3Lhxwzw/f/58uX79usycOVPKli0rbdq0keeee04mTpzoWMfkyZOlSZMm0q9fPyldurSMHDlSqlSpItOmTUvBPQMA+MSKS9yShPTkd+/evbJq1SpZunSprF+/Xrp165bga65cuWJi0UsvvZTo9fqSQA5WxHMAiHDJFM8X+ZnH9eXCqyaxp0yZItOnT5fNmzdLpkyZzDqvXr2a7DE8RZLjGoy7du0qnTt3ljJlypgPImPGjCZoAwCA5KNX4/XkWU+q06RJYx7buHGjPPDAA5I2bVpHOz1Q0Z5pv//+u6ONXt13pm30cW+uXbtmDmCcFwBA8gu2nuP79++XFStWyLvvvmt6o9WpU0emTp0qCxculOPHj3t9Xe/evU1CWBPEiV2vLwnkUEA8B4DIk1zxfKKfedxbXXjVXuOTJk2SQYMGSfPmzaVChQoyd+5cE5uXLFmS7DE82ZPjutGazXcOwNHR0eZ+QgEYAAAEzosvvmiuzufMmVOOHj0qH3/8seO5kydPSt68eV3a2/f1uYTa2M97MmbMGMmWLZtj0WFvAADoeaAOl65WrZrjMT0/1PNE7U2WlOv1JYEczIjnAIBgy+NuvMWF18OHD5s449xG44kmwe02yRnDk31CzrNnz0psbKzHAHzgwAGvV6Z1sV24cMHcBuoKddy1KwFZDwAgeAQiRtjr0CvbwU57zukEWgnRq+9a903pVXwd5vbzzz/L8OHDpUOHDmaomtZsTSoDBw40w/Gc43nhwoUlzmnoHADgb/bvY6Dj0E3rmt/Dqm/KDY/xNV26dGa5HXqCnCdPHpfHUqdOLTly5EgwSRuI9eptsWLFvCaQdaLL5BTK8dz8jQT/IRMAJCs7fibFOWVyxPOzicjj3urCq317qzbJFcOTPTmeGHplWgO9O65QAwC8yTYpcOv6448/zJXsYPb8889Lp06dEmxTvHhxx79z5cpllrvvvtsMddOYqnVKa9WqJfny5ZNTp065vNa+r8/Zt57a2M974n7AZR+QHRs6yq99BYBIE6g4pD2r9Hf665Ouk2L5KnPmzPHOwbT+qNb3vJ1EL8Ijnn8tifu7AoBIEMhzyuSO5+Eu2ZPjGrhTpUrlVwB2vzIdFxdnaqrp0LHbvSKugVz/II4dO2ZmPw117E9wY3+CG/sT3FJif/Tqvh7EFChQQIJd7ty5zZIYGleVPUpLT6hffvllM6GXXbdUJ0G55557HFfftc3q1atNvVebttHHfaWf6759+0zdunD5Ow3n/wbDfb/Ced/Cdb/Ced/s/dIyGXq+E6g4lD59ejOUWYdIJzYuup9/JdRr3NdEr54Huk/qdfPmTXPOl1CS9lZ8Wa8vCeTkRDwPPuH+OxNu+xXO+xau+xXO+2bvl/5GBvKcMjnjea5E5HFvdeHVvtXH8ufP79KmUqVKyR7Dkz05rlc3qlatagKwzlRqB3G937NnT4+v8dS1X+vOBJL+xxdO/wGyP8GN/Qlu7E9wS+79CfYe4/7S+mxbt241E5roifGPP/4ogwcPlrvuustxIvzvf//bjNjSYdpay1RnFddJVV5//XXHenr16iV169aVCRMmSLNmzczEKNu2bfNrZnCtF1ewYMGw/Dt1Fq77Fq77Fc77Fq77Fc77pjEo0PulJ9S6BFOiV+PP+fPnTU1TPVdUa9asMeeJWn80sXxZry8J5GBEPE9+4bpv4bpf4bxv4bpf4bxv+hupv5WhGM/TJiKPe6sLr1oKRZPX2sZOhuuFBI1t3bt3T/4YbqWAhQsXWunSpbNmz55t7du3z+rWrZuVPXt26+TJk8m+LRcuXNCiP+Y2HLA/wY39CW7sT3ALt/1JKd99951Vv359K0eOHCYWFy1a1HrmmWesX375xaXdt99+a9WpU8e0KViwoDV27Nh463rvvfesu+++20qbNq1VtmxZa9myZX5vTzh/r+G6b+G6X+G8b+G6X+G8b+G6Xwlp0qSJVblyZWvz5s3W119/bZUsWdJq27at43mNU/fcc4953nbixAlr586d1jvvvGM+r/Xr15v7v/32m8/rPX/+vJU3b16rffv21p49e8y5asaMGa233nrLCmbE8+QTrvsWrvsVzvsWrvsVzvsWLvu18BZ5XI2hAwYMcLT/5ptvrNSpU1vjx4+39u/fbw0dOtRKkyaNtXv3bkcbjUe6jo8//tjEtObNm1vFihWz/vzzz2SP4SmSHFdTp061ChcubAJw9erVrU2bNqXIdoTLH6qN/Qlu7E9wY3+CW7jtD8L/ew3XfQvX/QrnfQvX/QrnfQvX/UqIJrT1hDdz5sxW1qxZrc6dO1t//PGH4/nDhw+bz2Tt2rWOx/RkWx9zX2bNmuXzen1NICNy/2bDdd/Cdb/Ced/Cdb/Ced/Cab+mJpDHrVu3rtWxY0e/LrzGxcVZgwcPNsltjb8NGjSwDh486NImuWJ4ik3IqV3vvXW/T05arkWLzt/uDOvBgv0JbuxPcGN/glu47Q/C/3sN130L1/0K530L1/0K530L1/1KSI4cOWTBggVeny9atKipkepMJw671eRht1qvqlChgnz11Vd+bjEi5W82XPctXPcrnPctXPcrnPctnParZwJ53HXr1sV7rFWrVmbxRmuejxgxwiwpHcOjNEN+W2sAAAAAAAAAACDEBLYaPAAAAAAAAAAAIYDkOAAAAAAAAAAg4pAcBwAAAAAAAABEnIhOjsfExJiJXdKnTy81atSQLVu2SCjQSWe0cL3zUqpUKcfzV69elR49ekjOnDklc+bM0rJlSzl16pQEi/Xr18sjjzwiBQoUMNu+ZMkSl+e1DP6QIUMkf/78kiFDBmnYsKEcOnTIpc25c+ekXbt2kjVrVsmePbt06dJFLl26JMG4P506dYr3fTVp0iRo92fMmDFy7733SpYsWSRPnjzSokULOXjwoEsbX/7Gjh49Ks2aNZOMGTOa9fTr109u3rwZlPtTr169eN/RM888E5T78+abb5oJJ/RvRZdatWrJZ599FpLfjS/7E0rfDW5NY6779zl27FiXNt99953cf//9JjYXKlRIxo0bF289ixcvNnFP25QvX16WL18uweDatWtSqVIls1+7du0Ki/169NFHpXDhwmabNC63b99ejh8/HtL7duTIERNnixUrZo4z7rrrLjNR0vXr10N6v2yjR4+W2rVrm99EPabwxJffTZ1YqUqVKmYCqRIlSsjs2bMl2ITisXy4HQcjMhHPQ2+/iOehs1824nnwIpaHIStCLVy40EqbNq01c+ZMa+/evVbXrl2t7NmzW6dOnbKC3dChQ62yZctaJ06ccCxnzpxxPP/MM89YhQoVslavXm1t27bNqlmzplW7dm0rWCxfvtx6+eWXrQ8//FAng7U++ugjl+fHjh1rZcuWzVqyZIn17bffWo8++qhVrFgx688//3S0adKkiVWxYkVr06ZN1ldffWWVKFHCatu2bVDuT8eOHc32On9f586dc2kTTPvTuHFja9asWdaePXusXbt2WQ8//LBVuHBh69KlSz7/jd28edMqV66c1bBhQ2vnzp3mM8qVK5c1cODAoNyfunXrmt8A5+/owoULQbk/n3zyibVs2TLr+++/tw4ePGi99NJLVpo0acz+hdp348v+hNJ3g1srUqSINWLECJfv0/m/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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "First few rows of input data:\n", " wind_dir ustar ol sigmav umean\n", "time \n", "2024-06-24 14:30:00 83.82242 0.285427 -21.72663 1.243537 4.118659\n", "2024-06-24 15:00:00 84.50763 0.228795 -16.70326 1.085609 3.128728\n", "2024-06-24 15:30:00 98.68390 0.278461 -38.81393 0.901596 2.669845\n", "2024-06-24 16:00:00 99.19427 0.307955 -48.47143 0.830604 2.552504\n", "2024-06-24 16:30:00 115.64840 0.301376 275.48160 0.658542 1.786293\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/ink/Documents/github/footprints/.venv/lib/python3.13/site-packages/xarray/computation/apply_ufunc.py:818: RuntimeWarning: invalid value encountered in sqrt\n", " result_data = func(*input_data)\n", "Only captured 27.4% of flux - consider increasing domain size\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "============================================================\n", "FOOTPRINT CALCULATION DIAGNOSTICS\n", "============================================================\n", "\n", "1. Input Data Check:\n", " Number of timesteps: 3270\n", " Wind dir range: [0.0, 360.0]°\n", " ustar range: [0.100, 0.873] m/s\n", " sigmav range: [0.151, 3.501] m/s\n", " umean range: [0.35, 7.94] m/s\n", " ol range: [-3682.3, 4255.9] m\n", "\n", "2. Height Parameters:\n", " Crop height: 0.20 m\n", " Instrument height: 2.50 m\n", " Displacement height (d): 0.145 m\n", " Measurement height (zm): 2.355 m\n", " Roughness length (z0): 0.025 m\n", " Boundary layer height: 2000.0 m\n", "\n", "3. Grid Parameters:\n", " Domain: x=[-500.0, 100.0], y=[-300.0, 300.0]\n", " Resolution: dx=5.0m, dy=5.0m\n", " Grid shape: 121 x 121 = 14641 cells\n", "\n", "4. Calculated Footprint Statistics:\n", " f_2d shape: (3270, 121, 121)\n", " f_2d min: 0.00e+00\n", " f_2d max: 9.16e-02\n", " f_2d mean: 7.48e-07\n", " f_2d non-zero count: 958032\n", "\n", " First timestep:\n", " min: 0.00e+00\n", " max: 0.00e+00\n", " sum: 0.00e+00\n", " non-zero: 0/14641\n", "\n", "5. Climatology Statistics:\n", " fclim_2d shape: (121, 121)\n", " fclim_2d min: 5.54e-24\n", " fclim_2d max: 1.41e-03\n", " fclim_2d sum: 1.09e-02\n", " fclim_2d non-zero: 14641/14641\n", " Total flux (should be ~1): 0.273708\n", "\n", "============================================================\n", "\n" ] } ], "source": [ "# Add these checks to your code:\n", "model = build_climatology(\n", " df,\n", " model_type=\"ffp\",\n", " crop_height=0.2,\n", " atm_bound_height=2000.0,\n", " inst_height=2.5,\n", " dx=5.0, dy=5.0,\n", " domain=(-500.0, 100.0, -300.0, 300.0), # smaller domain for a quick start\n", " smooth_data=True,\n", ")\n", "# 1. What grid resolution are you actually using?\n", "print(f\"Grid resolution: dx={model.dx}m, dy={model.dy}m\")\n", "print(f\"Grid shape: {model.fclim_2d.shape}\")\n", "\n", "# 2. How many timesteps?\n", "print(f\"Number of timesteps: {len(model.df)}\")\n", "\n", "# 3. What's the wind direction distribution?\n", "import matplotlib.pyplot as plt\n", "fig, axes = plt.subplots(1, 3, figsize=(15, 4))\n", "\n", "# Wind rose\n", "axes[0].hist(model.df['wind_dir'], bins=36, range=(0, 360))\n", "axes[0].set_xlabel('Wind Direction (degrees)')\n", "axes[0].set_title('Wind Direction Distribution')\n", "\n", "# Single timestep check\n", "if hasattr(model, 'f_2d') and model.f_2d is not None:\n", " single_fp = model.f_2d.isel(time=0)\n", " im = axes[1].pcolormesh(model.x, model.y, single_fp.T, shading='auto')\n", " plt.colorbar(im, ax=axes[1])\n", " axes[1].set_title('Single Timestep Footprint')\n", " axes[1].set_xlabel('x (m)')\n", " axes[1].set_ylabel('y (m)')\n", "\n", "# Climatology\n", "im = axes[2].pcolormesh(model.x, model.y, model.fclim_2d.T, shading='auto')\n", "plt.colorbar(im, ax=axes[2])\n", "axes[2].set_title('Climatology')\n", "plt.tight_layout()\n", "plt.show()\n", "\n", "# 4. Check a single valid footprint\n", "print(\"\\nFirst few rows of input data:\")\n", "print(model.df[['wind_dir', 'ustar', 'ol', 'sigmav', 'umean']].head())\n", "\n", "# Detailed diagnostic function\n", "def diagnose_footprint_calculation(model):\n", " \"\"\"Diagnose what's going wrong with footprint calculation.\"\"\"\n", " print(\"\\n\" + \"=\"*60)\n", " print(\"FOOTPRINT CALCULATION DIAGNOSTICS\")\n", " print(\"=\"*60)\n", " \n", " # Check input data\n", " print(\"\\n1. Input Data Check:\")\n", " print(f\" Number of timesteps: {len(model.df)}\")\n", " print(f\" Wind dir range: [{model.df['wind_dir'].min():.1f}, {model.df['wind_dir'].max():.1f}]°\")\n", " print(f\" ustar range: [{model.df['ustar'].min():.3f}, {model.df['ustar'].max():.3f}] m/s\")\n", " print(f\" sigmav range: [{model.df['sigmav'].min():.3f}, {model.df['sigmav'].max():.3f}] m/s\")\n", " print(f\" umean range: [{model.df['umean'].min():.2f}, {model.df['umean'].max():.2f}] m/s\")\n", " print(f\" ol range: [{model.df['ol'].min():.1f}, {model.df['ol'].max():.1f}] m\")\n", " \n", " # Check calculated heights\n", " print(\"\\n2. Height Parameters:\")\n", " print(f\" Crop height: {model.crop_height:.2f} m\")\n", " print(f\" Instrument height: {model.inst_height:.2f} m\")\n", " d = 10 ** (0.979 * np.log10(model.crop_height) - 0.154)\n", " zm = model.inst_height - d\n", " z0 = model.crop_height * 0.123\n", " print(f\" Displacement height (d): {d:.3f} m\")\n", " print(f\" Measurement height (zm): {zm:.3f} m\")\n", " print(f\" Roughness length (z0): {z0:.3f} m\")\n", " print(f\" Boundary layer height: {model.atm_bound_height:.1f} m\")\n", " \n", " # Check grid\n", " print(\"\\n3. Grid Parameters:\")\n", " print(f\" Domain: x=[{model.domain[0]}, {model.domain[1]}], y=[{model.domain[2]}, {model.domain[3]}]\")\n", " print(f\" Resolution: dx={model.dx}m, dy={model.dy}m\")\n", " print(f\" Grid shape: {len(model.x)} x {len(model.y)} = {len(model.x) * len(model.y)} cells\")\n", " \n", " # Check if model has been run\n", " if hasattr(model, 'f_2d') and model.f_2d is not None:\n", " print(\"\\n4. Calculated Footprint Statistics:\")\n", " print(f\" f_2d shape: {model.f_2d.shape}\")\n", " print(f\" f_2d min: {float(model.f_2d.min()):.2e}\")\n", " print(f\" f_2d max: {float(model.f_2d.max()):.2e}\")\n", " print(f\" f_2d mean: {float(model.f_2d.mean()):.2e}\")\n", " print(f\" f_2d non-zero count: {int((model.f_2d > 0).sum())}\")\n", " \n", " # Check first timestep in detail\n", " fp_0 = model.f_2d.isel(time=0)\n", " print(f\"\\n First timestep:\")\n", " print(f\" min: {float(fp_0.min()):.2e}\")\n", " print(f\" max: {float(fp_0.max()):.2e}\")\n", " print(f\" sum: {float(fp_0.sum()):.2e}\")\n", " print(f\" non-zero: {int((fp_0 > 0).sum())}/{fp_0.size}\")\n", " \n", " if hasattr(model, 'fclim_2d') and model.fclim_2d is not None:\n", " print(\"\\n5. Climatology Statistics:\")\n", " print(f\" fclim_2d shape: {model.fclim_2d.shape}\")\n", " print(f\" fclim_2d min: {float(model.fclim_2d.min()):.2e}\")\n", " print(f\" fclim_2d max: {float(model.fclim_2d.max()):.2e}\")\n", " print(f\" fclim_2d sum: {float(model.fclim_2d.sum()):.2e}\")\n", " print(f\" fclim_2d non-zero: {int((model.fclim_2d > 0).sum())}/{model.fclim_2d.size}\")\n", " \n", " # Check normalization\n", " total_flux = float(model.fclim_2d.sum() * model.dx * model.dy)\n", " print(f\" Total flux (should be ~1): {total_flux:.6f}\")\n", " \n", " print(\"\\n\" + \"=\"*60 + \"\\n\")\n", "\n", "# Run diagnostics\n", "model.run()\n", "diagnose_footprint_calculation(model)" ] }, { "cell_type": "code", "execution_count": 10, "id": "e0f69e76", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Domain: x=[-500.0, 100.0], y=[-300.0, 300.0]\n", "Estimated measurement height: 2.4m\n", "Recommended domain extent: ±235m\n" ] } ], "source": [ "# Check if footprint extends beyond domain\n", "print(f\"Domain: x=[{model.domain[0]}, {model.domain[1]}], y=[{model.domain[2]}, {model.domain[3]}]\")\n", "\n", "# Rule of thumb: domain should extend ~100x measurement height upwind\n", "# If zm = 2m, domain should be at least 200m upwind\n", "# If zm = 10m, domain should be ~1000m upwind\n", "\n", "zm_estimate = model.inst_height - 10**(0.979 * np.log10(model.crop_height) - 0.154)\n", "recommended_domain = zm_estimate * 100\n", "\n", "print(f\"Estimated measurement height: {zm_estimate:.1f}m\")\n", "print(f\"Recommended domain extent: ±{recommended_domain:.0f}m\")" ] }, { "cell_type": "code", "execution_count": 11, "id": "eeb40ad8", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['datetime_start', 'TIMESTAMP_END', 'CO2', 'CO2_SIGMA', 'H2O',\n", " 'H2O_SIGMA', 'FC', 'FC_SSITC_TEST', 'LE', 'LE_SSITC_TEST', 'et',\n", " 'ET_SSITC_TEST', 'H', 'H_SSITC_TEST', 'G', 'SG', 'FETCH_MAX',\n", " 'FETCH_90', 'FETCH_55', 'FETCH_40', 'wind_dir', 'umean', 'WS_MAX',\n", " 'ustar', 'ZL', 'TAU', 'TAU_SSITC_TEST', 'ol', 'U', 'U_SIGMA', 'V',\n", " 'V_SIGMA', 'W', 'W_SIGMA', 'PA', 'TA_1_1_1', 'RH_1_1_1', 'T_DP_1_1_1',\n", " 'VPD', 'T_SONIC', 'T_SONIC_SIGMA', 'TS_1_1_1', 'SWC_1_1_1', 'ALB',\n", " 'NETRAD', 'SW_IN', 'SW_OUT', 'LW_IN', 'LW_OUT', 'P', 'file_no',\n", " 'TA_1_2_1', 'RH_1_2_1', 'T_DP_1_2_1', 'TA_1_3_1', 'RH_1_3_1',\n", " 'T_DP_1_3_1', 'TA_1_4_1', 'PBLH_F', 'TS_2_1_1', 'SWC_2_1_1', 'zm',\n", " 'h_c', 'z0', 'h'],\n", " dtype='object')" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.columns" ] }, { "cell_type": "code", "execution_count": 12, "id": "7c609b35", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Near-zero sum, using uniform distribution\n", "Near-zero sum, using uniform distribution\n" ] }, { "data": { "image/png": "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tKT3Hggcm74u9PWh6/HEE09YOXPmtJo2bWoes3nz5ua19fDDD5vHveeeey7p+ba3oV4/adIkM+7cuXNbFStWtH7//Xczz9q1a63rr7/ezGe/pnQKXFd9DVSpUsV69tlnrXHjxllFixa1ypYtG/RYqTly5IjZTq1atbLOnDljXQp9r7dr187KkyeP1b9/f+ull14yY9bPpFtuuSVo3uSvsVDe98p+X+pYGzVqZJ6vkSNHmse88sorgx5D3586b8uWLc12GjBggFW4cGGrcuXKQa9j/ZzSzyW9XT/79LmrXr26lSNHDmvz5s0hfS7q55s+f/pa0ef/hRdeMM+lvi4C1//gwYNWsWLFzOtP11tff1WrVjWvZV22bstAP/74o7leXz+AWxDAIqwA9rPPPjOXZ8+eHTTf4sWLg66fP3++ufzll1+mumz9QNd59As4FPaXSkqT/YHcqVMn8+UfGMj9/PPP5gtLP+ht+sWn99Px2I4fP26CXf1CtwNiXf/kwZNNv5z0tokTJ/qv0y9lDUY0qLW/0O31rlSpkvXHH3+kOKbkAaxe98YbbwQtt2TJklbnzp3916W1binRwEjn13EG0kAsLi7OOn/+fKr3tYMfDZKSkpL81z/66KMmWDp27Jg/QNHnXwMM+zlU+kVr//hwIoDV51iDAftxAwPxUANYnfe9997zX5eQkGCWqUGLTX8E6Q+i77//Puj+GvzpuPfv35/qY4TyHrDHpsFG4FiGDh1qrtfg6ty5c/7ru3btap7f06dPh/V862tRX5Ma8J86dco/38KFC818w4cPT/NHa+C6ajB/9OhR//ULFiww1//nP/+x0qMBsgZVus76Aymt11xqNKDTgDPwvav0x4Wux+eff57qayzU9739vtQfG4GB9uTJk83133zzjbmst+nzoT8KArfTrFmzzHyBr2Mda/KgXX84aEB97733hvS5qD8y9YeWvf2Vvh/1R44GqMnHuWHDhot+PKQUwCrdJg8++GAKzziQOVFCgLDoLkjd/aW7nH799Vf/pLvFdHe9vTusYMGC5u/ChQvl3Llzjq6D7obTutzAqWTJknLhwgWzS7hTp05md56tVKlScscdd8iaNWvMbnv7QBXd1Xf11Vf759P1v//++81uPN19H4rs2bOb8gmb1rXq5SNHjpjSgkB333232Z0XCl2XwLpjXa6ur+7+vFS/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gi+++EJWrFghCxculNq1a190ENf7778vmdnZs2dN8fDQoUP912lLsLZt28q6desumv/MmTNmsiUmJkZtXQEAl1b7GigwC0stLJAxpk2bJq+88op07drVf93NN98s9erVk379+pkOBRENYPUIsltvvVXc6tdffzXn2y1RokTQ9Xp5x44dKR60pmePAAC4p/Y1OWphkSl4uAb23Llz0rhx44uu15Za58+fD3t5YQewM2fOFC/RTK3WywZmYMuVK5eh6wQACC37aiMLC2Ssu+66y2Rhk7dbffnll6Vbt26RD2DdrmjRopItWzY5fPhw0PV6uWTJkiketKYTAMCd2VcbWVhkOD3q3umWoz6fqw7iWrp0qTRt2tRc3rBhg+zfv1+6d+8elCwM5ZwCISWeO3ToIOvXr093vuPHj8uzzz5rWlRlVjlz5jTp6uXLl/uvS0pKMpebNWuWoesGALj8zgOpoSMBMpwvQpMLbNu2Ta644gopVqyY7N6920yaVNTr9LbNmzebacuWLc5lYLt06SKdO3eWAgUKmCPGtIahdOnSpgXC77//Lt99952sWbNGFi1aJB07djT9VTMzjfLvvvtuMw7t/fr888/LyZMnTVcCAEDWy77ayMICGWPlypWOLi+kALZnz55y5513mpYH2kNV6xUSEhL8TWi1FZX2Uf3yyy+lZs2aktnddttt8ssvv5i2DXoigwYNGphT4yY/sAsA4O7a1+SohUWG8nAJwb333iuTJ0+W/PnzB12vCUTtQhBuK1OfZZ8OIUwawJ46dUqKFClyUSutrEwP4tJMtI4/Li7ukpeTNK2N/99jHvrZobUDAG9lX1+R/WEFsLbSkkt6SXmysC7w5Iulzd+YB1dmiu/vy3ns359tLnGxzh5+lHj6vBQavDZDxhUOPf7o4MGDUrx48Yu6Q+kxSOF2IrjkZ1E3hE4AAGSEC2JJgoTffkclynlz/+wEsIg2j73kEhMTzaljddJjpbT81KZtTbX8NHlQGwrPdSEAAGQN2SVG7pfyclIuhH3fvJLN3B9AZOn5A7TcVKdq1apddLtefyn99glgAQCuVUBymAlwBQ/WwK5cudJkX6+99lp57733pHDhwkGdoSpUqGAaA4SLABYAAAARcc0115i/e/fuNSeCiolxZs8HASwAAEA0ePhUshUqVJBjx46Zkxls377dXFe7dm3TneBSjqkKe9jaP3X16tVhPxAAAICn2SUETk8usHHjRqlcubJMmjRJjh49aiY945Ze99VXX0U+gNU2DW3btpWqVavK008/LT/99FPYDwoAAADvePTRR+Xmm2+Wffv2yfvvv28mLSu48cYbpX///pEPYD/44AMTtD744IPmpAYVK1aUG264Qd599105d+5c2CsAAADgCR4+lezGjRtl8ODBkj37/1ev6r8HDRpkbotK5YSex1ZPx/r111/Lhg0bpEqVKnLXXXeZo8g0wt61a9elLBYAAABZUFxcnOzfv/+i6w8cOHDR2bkiXvqrZ1RYtmyZmfQMC3/5y1/km2++MaeW1RoHAAAA/I+Ha2Bvu+026dmzp9l7r0GrTnPnzpX77rtPunbtGvkuBFom8OGHH8rMmTNl6dKlUq9ePVO7cMcdd/hPYTZ//nxzVJlmYwEAAOBtEyZMMCct6N69u/+0sTly5DAlqc8880zkA9hSpUpJUlKSiZa/+OILadCgwUXztGnTxpx5AQAAAP8TiZpVn7iCnrRg8uTJMnbsWNm9e7e5TjsQ5MmT55KWF3YAq6UBXbp0CTqXbXIavOqRZQAAAIBNA9ZChQr5/32pwq6B1YO10gpeAQAAkAIP18AmJSXJ6NGjzUkL9KQGOmnCc8yYMea2cHEmLgAAgGjw8Jm4hg0bZs7CpfWuLVq0MNetWbNGRo4cKadPn5annnoqrOURwAIAACCiXn/9dXn11VfNyQxs2gigTJky8tBDD4UdwLokbgcAAHC5TFBCMHbsWGnSpInpvVq8eHHp1KmT7Ny5M837vPLKK9KyZUtTu6qTnpFVD+QPh546tkaNGhddr9fpbeEigAUAAPCITz/9VPr06SPr1683ffy1PWq7du3k5MmTqd5n1apVpvvUypUrZd26dVKuXDlzHz0za6jq168vL7zwwkXX63V6W7goIQAAAPBIG63FixcHXZ41a5bJxG7atElatWqV4n1mz54ddFlLAd577z1Zvny56esainHjxknHjh3lk08+kWbNmpnrNBjWExosWrQovEGQgQUAAHC/xMTEoOnMmTMh3S8hIcH8LVy4cMiP9ccff5jMbSj32bNnj1iWJddcc418//33cuutt8qxY8fMpP/W8gUtTwgXGVgAAIBoiETbK9+fy9Pd+oFGjBhhjvBPi7av0rOpaleAOnXqhPyQgwcPltKlS5ta2PRUrVpVDh48aLK8ep9du3bJiy++KCVKlJDLQQALAADgcgcOHJC4uDj/5Vy5cqV7H62F3bZtm2lnFSptgzV37lxTFxvKeQE0+xro448/TrPeNlQEsAAAAO5OwIoGr4EBbHr69u0rCxculNWrV0vZsmVDus+ECRNMAKt1rNoC61IkD2gvFQEsAACA2yPYMALIfv36yfz5800WNT4+PuSDsLRX65IlS6Rx48ahPpz4fD4zJb/uchHAAgAAeESfPn1kzpw5smDBAtML9tChQ+Z6PcVr7ty5zb+1s4CeYEB7xqpnn31Whg8fbu5XsWJF/33y5ctnpvQC5h49evhLGvSsW71795a8efMGzff++++HNQ4CWAAAAI+00Zo2bZr527p166DrZ86caQJNtX//fomJiQm6z9mzZ+Vvf/tb2AeK3X333UGX77zzTnECASwAAIBHWCHUoGppQaB9+/Zd8uNpYBwJBLAAAADRoLWfMRlbA5tVcCIDAAAAuAoZWAAAAI/UwGYVZGABAADgKmRgAQAAPNIHNqsggAUAAIgGSggcQwkBAAAAXIUMLAAAQDRQQuAYMrAAAABwFTKwAAAA0UANrGPIwAIAAMBVyMACAABEK23o9KlkY8STPDpsAAAAuBUZWAAAgGigBtYxBLAAAADRQBstx1BCAAAAAFchAwsAABANlBA4hgwsAAAAXIUMLAAAQDRQA+uYLJWBrVixovh8vqDpmWeeCZpn69at0rJlS4mNjZVy5crJuHHjMmx9AQAAEL4sl4EdPXq09OrVy385f/78/n8nJiZKu3btpG3btjJ9+nT55ptv5N5775WCBQvK/fffn0FrDAAAPIEaWMdkuQBWA9aSJUumeNvs2bPl7NmzMmPGDMmZM6fUrl1btmzZIs899xwBLAAAgEtkqRICpSUDRYoUkYYNG8r48ePl/Pnz/tvWrVsnrVq1MsGrrX379rJz5075/fffU1zemTNnTOY2cAIAAAibnkY2EpMHZakM7MMPPyxXXHGFFC5cWNauXStDhw6VgwcPmgyrOnTokMTHxwfdp0SJEv7bChUqdNEyx44dK6NGjYrSCAAAQJbFQVzeycAOGTLkogOzkk87duww8w4YMEBat24t9erVk969e8vEiRNlypQpJot6qTQITkhI8E8HDhxwcHQAAADIchnYgQMHSo8ePdKcp1KlSile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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Create synthetic test case matching Kljun et al. (2015) examples:\n", "test_data = pd.DataFrame({\n", " 'wind_dir': np.full(100, 270.0), # Constant west wind\n", " 'ustar': np.full(100, 0.3),\n", " 'umean': np.full(100, 10.0),\n", " 'ol': np.full(100, -50.0),\n", " 'sigmav': np.full(100, 0.6),\n", "})\n", "test_data.index = pd.date_range('2024-01-01', periods=100, freq='30min')\n", "\n", "model_test = build_climatology(\n", " df=test_data,\n", " domain=[-300.0, 100.0, -200.0, 200.0],\n", " dx=2.0,\n", " dy=2.0,\n", " crop_height=0.1,\n", " inst_height=3.0,\n", " atm_bound_height=1000.0,\n", " smooth_data=True\n", ")\n", "\n", "model_test.run()\n", "\n", "# This should show a clean, elongated footprint pointing west\n", "plt.figure(figsize=(8, 6))\n", "plt.pcolormesh(model_test.x, model_test.y, model_test.fclim_2d.T, \n", " shading='auto', cmap='YlOrRd')\n", "plt.colorbar(label='Footprint')\n", "plt.plot(0, 0, 'k^', markersize=10, label='Tower')\n", "plt.xlabel('x (m)')\n", "plt.ylabel('y (m)')\n", "plt.title('Test Footprint (should be smooth & elongated)')\n", "plt.axis('equal')\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "4bade2e5", "metadata": {}, "source": [ "\n", "## 6) Export 80% Contours to a GeoPackage\n", "\n", "Writes layers like: `daily_mean_r80`, `monthly_etw_r80`, etc. \n", "Contours are generated with a robust alternative to `plt.contour` that can use `skimage` or `rasterio`【8†source】.\n" ] }, { "cell_type": "code", "execution_count": 13, "id": "74a7c10e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "GeoPackage written to: ffp_outputs/footprints_80pct.gpkg\n" ] } ], "source": [ "\n", "gpkg_path = out_dir / \"footprints_80pct.gpkg\"\n", "gpkg_written = export_contours_gpkg(\n", " clim,\n", " summaries,\n", " df=df,\n", " station_lat=cfg[\"station_latitude\"],\n", " station_lon=cfg[\"station_longitude\"],\n", " gpkg_path=str(gpkg_path),\n", " crs_out=\"auto\", # chooses a suitable UTM\n", " levels=(0.8,), # export the 80% source-area contour\n", " contour_method=\"auto\",\n", ")\n", "print(\"GeoPackage written to:\", gpkg_written)\n" ] }, { "cell_type": "code", "execution_count": 14, "id": "4f0e2111", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/ink/Documents/github/footprints/.venv/lib/python3.13/site-packages/pyogrio/geopandas.py:275: UserWarning: More than one layer found in 'footprints_80pct.gpkg': 'daily_mean_r80' (default), 'monthly_mean_r80', 'daily_etw_r80', 'monthly_etw_r80'. Specify layer parameter to avoid this warning.\n", " result = read_func(\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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GxcvXizt2rWT66+/3nxc+G9/+1tzTw5/aKN+ZLk+r+ii9wLx5vz1HF544QXT/qpVq0psbKz5JFV/aeOCBQvM7dZr1qxpFj3/or9r/t7GotPDdfv9998fcG3Mzs42N7jTNujvrP7uFv3/ejXvq+XdvtmzZ0vLli3N66N3VdQPHjx//nypta/cOeVs69atTpMmTZzbbrvNeeqppy7Y/qc//cnp27evzqhwli1b5l7/7bffOpUrV3ZefPFFJz093Vm/fr0TGRnpPPPMM9bzn3zySadly5bOP//5T2f//v3O9u3bnc8+++yCn3P69GmnWbNmzt133+20a9fO2vbBBx+Yn/Xuu+86P/zwgzNq1CinRo0azvHjx/2mjffee68THR3trFmzxjlw4ICzadMm56uvvnJv37hxo3Pdddc5r776qrNz507n+eefdypVquR8//33ftFGbUtwcLDzxhtvmO0bNmxw2rRp4zzwwAN+0cazZ886mZmZ1tK6dWtn+PDhXp3/K6+84lSvXt1Zvny5891335nXvWnTps6PP/7oF2185JFHnLfeesv55ptvnF27djm/+c1vTHuOHDkSMG100d/Dm266ybn99tud++67z9rm723My8tzoqKinH79+pnfTW2rHkuPXxrvq+XdvsWLFzuhoaHmq7Zt9erVToMGDZwJEyaUSvt8QbmGA30Rmjdvbi5YPXr0uOBF1jcI/eXRF6foi5yQkGD+83lasWKFU6VKFScnJ8c81jfQkJAQZ/fu3Zc9l4ceesi82U6dOvWCcNClSxdn7Nix7sc///yz07BhQycxMdEv2rhq1SrzRnPy5MmL7jN48GCnf//+1joNE48//rhftPGPf/yjCXee5syZY36uP7SxKH0T0+P893//9xWff2FhoVO/fn3zb+GSnZ1t3sTef/99v2hjUQUFBc6NN97oJCUlBVQbtV0xMTHOO++8Yy46nuEgENo4d+5c8/v4008/XfQ8S/q+6gvtGzt2rHPXXXdZ+02cONHp1q3bVbfPV5TrsIJ2OfXv3990mRV17tw5eeSRR0y3THGf2aDd5NpV40m7d7RbJzU11Tz++OOPpVmzZuaWzfr5Dtq9ox8OderUKet5CxculP3795ubXxT1008/meN5nqN+toM+TklJ8Ys2rlixQqKiosznWWh3vHbv6edk/Pjjj+59tC1Fz7F3795+00a9Hbd+WIp2W2ro1U/7XLp0qfTr188v2ljUO++8Y14n7WK/0vM/cOCA+bwSz330HuranekvbSzu5+bn50utWrUCqo16y3j98LmRI0de8JxAaKO+5+jvpJ5LvXr15NZbb5WZM2fKzz//fNXvq77QvpiYGLO/a5hArx/63uN6v7na64YvKLdwoGNtX3/9tSQmJha7Xcdv9AW47777it2ub4qbNm2S999/3/yHO3r0qPszGjIzM90v2KFDh8w47V//+ldZtGiRecEGDhzoPo6O48XHx8t//dd/mXqDov73f//XHF//g3vSx/oL7A9t1H2++uor2bFjhyxbtsyMlemF83e/+517H22LP7exW7dupubgoYceksqVK5s3Bn1D1TcJf2ijJ32j0rYUvXBc7vxdX/25jUXpeLB+epzrTTYQ2qi/i3/5y19MfUVxAqGN+jur7zF6DL1oTpkyRV577TV56aWXrup91Vfa98gjj5jn6ecLVapUSW655Ra588475bnnnruq9klFDwf6F95TTz1l/tGLpjhX6ly3bp25iF2MfsLjH//4R3niiSfcxS6u1KYJTRUWFpqkqBcUTX364ukv5RdffCFpaWnmxdMX+cUXXzTPD8Q2uvbRgho9ly5duphj/OlPf5KkpCSr98Cf27hz505zLlrEpcEhOTlZDh48aI57Na5VGz1pgNOPVNUPJbsWfLWNWnCmFwPdt7jz8sc26mP9VFoNBnXq1JHS5CttdP3Oas/I/PnzpVOnTia0a0H0vHnzAqJ969evNz0hb7/9tgkr//jHP2TlypUyY8YMCRjlMZahY0D6o7W4yrXo46CgIPP9uHHj3N97bteCMx1j8qTjc0ePHnXOnTtnxqZ1Py1WUS+88IIZq/ak++k+WsymRYhFz0N/rmvd2rVrTWGNfu85bqWGDRtmioR8vY2uc73lllusfVzH2bNnj3kcERHhvP7669Y+emwt+PGHNg4dOtQZOHCgtY8WJeo+x44d8/k2etKxzPvvv/+C9Zc7/3379plj6pirpzvuuMMZP368X7TRRcfbtU5m27Zt1np/b6Oed3HvOa6fvXfvXr9vo+tce/XqZa379NNPzXH0PbUk76u+1L7u3bs7kyZNsta99957TtWqVU1tQUmvG76kXMKBFn5ohbXnokUi+gav32shSdHt+uK5KtEvZsqUKeYNVIt9lFaQ6vP0F65ocUlaWpp5EYv+nDFjxpiqeP0+NzfXXVii//Fc9Hla8HKpwhJfaaP685//bP7TaiGPi1ZB6y+N/nK4it1+/etfWz+ra9eulyzW86U2Pvjgg6YNnnRGhu6jbwK+3kYXfY6+wX388ccXPOdy5+8qZJs1a5Z7+5kzZy5byOZLbVR/+MMfnLCwMCclJeWCbf7eRp1tUPTnaDGiXoT0e72o+HsbXYV/jRs3Nu+VLrNnzzYV/S7evq/6Uvs6duzoPPvss9a6JUuWmPdZ13FKct3wJeU+ldGluKpTT0WrTpVO6fqf//kfZ8eOHc706dPNtC7PffTF0BdRU+zXX39tpr9pdfevfvWri/6c4mYr6JQU/cVctGiRSZmjR482U1KysrL8oo0aCm6++Wbzl7VOqfnyyy9Nte9jjz1mTZPTv871DUmnkOm/gzfT/Mq7jQsXLjTn//bbb5u/vHT6lL5x6C+oP7TRRWfMaEVz0TeqKz1/nQKn/zd1yqf+PL3weDMFrrzbqOev07+WLl1qTSXzDLb+3saiis5WCIQ2ZmRkmFkmenHUAP/JJ5844eHhzksvvVSq76vl1b6pU6ea9mlY0xChPZjaO+v5B0ppXTfKi1+Hg549e5quR52GohcL7bYqSv9q1L8qb7jhBqdevXpm3vSlpvQVFw7Um2++6TRq1Mi8cekFZ/PmzX7VRr2YxMbGmmSrQUGn3bh6DVw+/PBDp0WLFqaNeo+AlStX+lUbdeqizkfWNupfKHFxcdb8eF9vo4YgfW2ee+65ix77cuevf3XqX0L6b6RvTNq16+pd8Yc26l+beuyii/5eBkobryQcBEIbtedOn6/nr9MaX3755QsutFf7vlpe7cvPz3emTZtmAoEeR3sefve735mh6tJsX3niI5sBAIDv3T4ZAAD4DsIBAACwEA4AAICFcAAAACyEAwAAYCEcAAAAC+EAAABYCAcAAMBCOAAAABbCAQAAsBAOAACAhXAAAADE0/8BrewcP9ueuf4AAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import geopandas as gpd\n", "gdf = gpd.read_file(gpkg_written)\n", "gdf.plot()" ] }, { "cell_type": "markdown", "id": "7e59fc04", "metadata": {}, "source": [ "\n", "## 7) Export GeoTIFF Rasters\n", "\n", "Each time slice (daily/monthly) is written as a separate `.tif` with correct georeferencing around the tower origin【8†source】.\n" ] }, { "cell_type": "code", "execution_count": 16, "id": "053ea915", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "PosixPath('ffp_outputs/rasters')" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\n", "tif_dir = out_dir / \"rasters\"\n", "export_rasters_geotiff(\n", " clim,\n", " summaries,\n", " station_lat=cfg[\"station_latitude\"],\n", " station_lon=cfg[\"station_longitude\"],\n", " out_dir=str(tif_dir),\n", " which=(\"daily_mean\", \"monthly_etw\"),\n", " prefix=\"ffp\",\n", ")\n", "tif_dir\n" ] }, { "cell_type": "markdown", "id": "e5d6dd2e", "metadata": {}, "source": [ "\n", "## 8) Export Contour Stats to CSV\n", "\n", "Creates a compact CSV with area (ha) and centroid (lat/lon) for each contour and time slice【8†source】.\n" ] }, { "cell_type": "code", "execution_count": 17, "id": "faa48c12", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Stats CSV saved to: ffp_outputs/contour_stats.csv\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
layertimerarea_hacentroid_loncentroid_lat
0daily_mean2024-06-24T00:00:000.80.5904-111.57058737.735268
1daily_mean2024-06-25T00:00:000.80.6004-111.57060637.735296
2daily_mean2024-06-26T00:00:000.80.6028-111.57057037.735339
3daily_mean2024-06-27T00:00:000.80.5960-111.57071237.735303
4daily_mean2024-06-28T00:00:000.80.5828-111.57073037.735400
\n", "
" ], "text/plain": [ " layer time r area_ha centroid_lon centroid_lat\n", "0 daily_mean 2024-06-24T00:00:00 0.8 0.5904 -111.570587 37.735268\n", "1 daily_mean 2024-06-25T00:00:00 0.8 0.6004 -111.570606 37.735296\n", "2 daily_mean 2024-06-26T00:00:00 0.8 0.6028 -111.570570 37.735339\n", "3 daily_mean 2024-06-27T00:00:00 0.8 0.5960 -111.570712 37.735303\n", "4 daily_mean 2024-06-28T00:00:00 0.8 0.5828 -111.570730 37.735400" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\n", "csv_path = out_dir / \"contour_stats.csv\"\n", "export_contour_stats_csv(\n", " df,\n", " clim,\n", " summaries,\n", " station_lat=cfg[\"station_latitude\"],\n", " station_lon=cfg[\"station_longitude\"],\n", " csv_path=str(csv_path),\n", " levels=(0.8,),\n", ")\n", "print(\"Stats CSV saved to:\", csv_path)\n", "pd.read_csv(csv_path).head()\n" ] }, { "cell_type": "code", "execution_count": null, "id": "169437d0", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Found null values in column sigmav\n", "Found non-finite values in column sigmav\n", "Found null values in column ustar\n", "Found non-finite values in column ustar\n", "Found null values in column ol\n", "Found non-finite values in column ol\n", "Found null values in column wind_dir\n", "Found non-finite values in column wind_dir\n", "Found null values in column umean\n", "Found non-finite values in column umean\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "=== Running ffp model ===\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/ink/Documents/github/footprints/.venv/lib/python3.13/site-packages/xarray/computation/apply_ufunc.py:818: RuntimeWarning: overflow encountered in exp\n", " result_data = func(*input_data)\n", "/Users/ink/Documents/github/footprints/.venv/lib/python3.13/site-packages/xarray/computation/apply_ufunc.py:818: RuntimeWarning: invalid value encountered in sqrt\n", " result_data = func(*input_data)\n", "Model kormann-meixner failed: Missing required columns: ['z0']\n", "Failed to process timestep 2024-06-24 14:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-24 15:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-24 15:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-24 16:00:00: index 1 is out of bounds for axis 0 with size 0\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Footprint shape: (201, 201)\n", "Footprint sum: 0.003811\n", "Model ffp failed: name 'config' is not defined\n", "\n", "=== Running kormann-meixner model ===\n", "Model kormann-meixner failed: Missing required columns: ['z0']\n", "\n", "=== Running wang model ===\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Failed to process timestep 2024-06-24 17:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-24 20:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-24 21:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-25 08:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-25 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-25 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-25 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-25 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-25 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-25 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-25 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-25 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-25 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-25 15:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-25 15:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-25 16:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-25 17:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-25 19:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-26 07:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-26 08:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-26 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-26 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-26 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-26 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-26 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-26 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-26 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-26 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-26 22:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-27 07:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-27 07:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-27 08:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-27 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-27 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-27 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-27 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-27 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-27 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-27 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-27 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-27 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-27 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-27 13:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-27 14:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-27 14:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-27 15:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-27 16:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-27 16:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-27 17:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-27 22:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-27 23:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-27 23:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-28 00:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-28 00:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-28 01:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-28 06:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-28 07:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-28 07:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-28 08:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-28 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-28 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-28 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-28 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-28 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-28 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-28 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-28 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-28 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-28 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-28 13:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-28 14:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-28 14:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-28 15:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-28 15:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-28 16:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-28 16:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-28 17:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-28 17:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-28 22:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-29 07:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-29 07:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-29 08:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-29 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-29 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-29 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-29 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-29 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-29 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-29 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-29 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-29 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-29 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-29 13:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-29 14:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-29 14:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-29 15:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-29 15:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-29 16:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-29 16:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-29 17:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-29 17:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-30 02:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-30 07:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-30 07:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-30 08:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-30 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-30 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-30 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-30 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-30 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-30 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-30 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-30 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-30 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-30 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-30 13:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-30 14:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-30 14:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-30 15:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-30 15:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-30 17:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-30 17:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-06-30 22:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-01 00:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-01 04:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-01 06:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-01 07:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-01 07:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-01 08:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-01 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-01 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-01 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-01 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-01 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-01 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-01 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-01 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-01 13:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-01 14:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-01 15:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-01 15:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-01 18:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-02 07:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-02 07:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-02 08:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-02 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-02 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-02 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-02 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-02 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-02 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-02 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-02 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-02 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-02 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-02 13:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-02 14:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-02 14:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-02 15:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-02 15:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-02 16:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-02 21:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-02 22:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-03 07:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-03 08:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-03 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-03 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-03 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-03 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-03 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-03 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-03 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-03 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-03 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-03 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-03 13:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-03 14:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-03 14:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-03 15:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-03 15:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-03 16:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-03 22:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-04 07:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-04 08:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-04 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-04 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-04 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-04 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-04 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-04 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-04 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-04 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-04 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-04 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-04 13:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-04 14:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-04 14:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-04 15:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-04 15:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-04 16:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-04 16:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-04 23:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-05 00:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-05 03:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-05 04:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-05 07:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-05 07:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-05 08:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-05 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-05 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-05 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-05 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-05 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-05 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-05 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-05 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-05 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-05 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-05 13:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-05 14:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-05 14:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-05 15:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-05 15:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-05 16:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-05 16:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-05 17:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-06 08:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-06 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-06 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-06 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-06 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-06 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-06 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-06 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-06 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-06 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-06 13:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-06 14:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-06 14:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-06 15:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-06 15:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-06 19:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-06 21:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-07 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-07 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-07 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-07 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-07 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-07 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-07 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-07 13:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-07 20:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-07 21:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-07 21:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-07 23:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-07 23:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-08 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-08 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-08 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-08 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-08 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-08 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-08 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-08 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-08 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-08 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-08 13:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-08 14:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-08 14:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-08 15:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-08 15:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-08 16:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-08 16:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-08 17:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-08 17:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-08 20:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-09 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-09 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-09 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-09 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-09 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-09 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-09 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-09 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-09 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-09 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-09 13:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-09 14:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-09 14:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-10 08:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-10 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-10 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-10 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-10 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-10 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-10 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-10 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-10 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-10 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-10 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-10 13:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-10 14:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-10 14:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-10 15:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-10 15:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-10 16:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-10 18:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-10 19:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-10 19:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-11 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-11 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-11 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-11 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-11 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-11 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-11 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-11 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-11 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-11 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-11 19:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-11 21:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-12 04:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-12 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-12 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-12 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-12 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-12 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-12 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-12 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-12 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-12 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-12 13:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-12 19:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-12 21:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-13 00:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-13 07:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-13 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-13 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-13 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-13 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-13 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-13 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-13 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-13 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-13 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-13 13:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-13 14:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-13 14:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-13 15:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-13 16:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-14 08:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-14 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-14 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-14 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-14 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-14 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-14 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-15 00:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-15 02:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-15 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-15 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-15 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-15 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-15 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-15 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-15 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-15 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-15 13:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-15 14:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-15 16:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-15 20:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-15 22:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-16 04:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-16 05:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-16 07:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-16 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-16 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-16 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-16 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-16 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-16 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-16 14:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-16 16:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-17 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-17 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-17 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-17 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-17 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-17 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-17 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-17 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-17 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-18 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-18 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-18 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-18 14:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-18 15:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-19 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-19 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-19 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-19 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-19 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-19 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-19 17:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-19 17:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-19 23:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-20 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-20 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-20 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-20 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-20 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-20 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-20 15:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-20 18:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-20 21:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-21 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-21 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-21 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-21 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-21 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-21 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-21 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-21 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-21 13:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-21 19:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-21 20:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-21 21:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-22 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-22 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-22 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-22 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-22 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-22 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-22 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-22 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-22 13:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-22 14:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-22 14:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-22 16:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-22 16:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-22 19:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-23 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-23 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-23 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-23 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-23 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-23 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-23 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-23 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-23 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-23 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-24 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-24 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-24 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-24 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-24 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-24 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-24 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-24 13:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-24 14:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-25 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-25 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-25 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-25 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-25 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-25 14:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-26 07:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-26 07:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-26 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-26 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-26 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-26 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-26 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-26 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-26 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-26 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-26 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-26 14:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-26 14:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-26 15:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-26 15:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-26 16:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-26 16:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-26 17:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-27 07:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-27 07:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-27 08:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-28 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-28 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-28 23:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-29 07:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-29 08:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-29 21:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-30 02:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-30 02:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-30 03:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-30 03:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-30 04:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-30 04:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-30 07:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-30 07:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-30 08:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-30 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-31 02:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-31 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-31 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-31 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-31 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-31 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-31 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-31 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-31 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-31 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-07-31 14:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-01 07:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-01 08:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-01 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-01 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-01 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-01 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-01 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-01 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-01 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-01 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-01 13:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-01 14:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-01 14:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-01 15:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-01 16:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-01 16:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-01 20:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-01 20:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-02 00:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-02 07:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-02 07:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-02 08:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-02 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-02 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-02 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-02 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-02 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-02 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-02 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-02 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-02 13:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-02 14:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-02 14:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-02 15:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-02 15:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-02 23:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-03 07:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-03 08:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-03 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-03 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-03 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-03 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-03 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-03 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-03 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-03 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-03 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-03 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-03 13:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-03 14:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-03 14:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-03 15:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-03 15:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-03 16:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-03 16:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-03 17:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-03 17:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-04 07:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-04 08:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-04 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-04 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-04 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-04 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-04 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-04 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-04 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-04 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-04 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-04 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-04 15:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-04 15:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-04 16:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-04 19:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-05 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-05 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-05 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-05 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-05 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-05 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-05 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-05 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-05 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-05 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-05 14:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-05 15:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-05 15:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-05 16:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-05 19:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-05 20:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-05 20:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-06 07:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-06 08:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-06 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-06 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-06 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-06 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-06 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-06 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-06 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-06 13:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-06 14:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-06 14:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-06 15:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-06 15:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-06 19:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-06 20:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-06 21:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-07 02:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-07 03:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-07 03:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-07 06:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-07 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-07 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-07 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-07 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-07 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-07 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-07 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-07 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-07 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-07 22:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-08 00:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-08 07:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-08 08:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-08 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-08 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-08 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-08 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-08 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-08 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-08 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-08 22:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-09 01:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-09 07:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-09 08:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-09 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-09 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-09 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-09 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-09 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-09 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-09 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-09 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-09 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-09 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-09 13:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-09 14:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-09 14:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-09 16:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-09 16:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-09 17:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-10 07:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-10 08:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-10 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-10 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-10 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-10 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-10 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-10 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-10 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-10 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-10 15:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-10 16:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-11 08:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-11 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-11 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-11 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-11 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-11 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-11 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-11 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-11 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-11 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-11 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-11 13:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-11 15:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-11 23:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-12 07:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-12 08:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-12 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-12 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-12 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-12 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-12 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-12 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-12 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-12 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-12 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-12 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-12 13:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-12 14:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-12 15:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-12 16:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-12 16:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-12 17:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-13 07:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-13 08:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-13 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-13 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-13 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-13 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-13 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-13 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-13 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-13 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-13 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-13 13:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-13 14:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-13 15:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-13 15:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-13 16:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-13 16:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-13 17:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-13 17:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-13 18:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-13 21:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-13 23:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-14 07:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-14 08:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-14 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-14 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-14 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-14 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-14 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-14 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-14 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-14 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-14 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-14 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-15 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-15 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-15 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-15 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-15 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-16 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-17 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-17 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-17 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-17 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-17 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-17 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-17 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-17 14:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-18 07:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-18 07:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-18 08:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-18 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-18 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-18 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-18 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-18 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-18 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-18 13:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-18 15:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-18 19:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-18 20:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-18 22:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-19 07:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-19 08:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-19 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-19 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-19 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-19 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-19 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-19 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-19 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-19 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-19 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-19 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-19 13:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-19 14:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-19 14:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-19 15:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-19 15:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-19 19:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-20 07:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-20 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-20 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-20 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-20 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-20 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-20 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-20 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-20 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-20 13:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-22 01:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-22 01:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-22 02:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-22 05:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-22 05:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-22 06:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-22 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-22 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-22 23:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-23 06:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-23 06:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-23 07:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-23 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-23 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-23 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-23 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-23 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-23 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-23 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-23 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-23 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-23 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-23 14:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-23 15:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-23 15:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-23 16:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-23 16:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-23 17:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-24 08:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-24 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-24 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-24 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-24 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-24 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-25 07:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-25 08:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-25 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-25 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-25 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-25 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-25 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-25 21:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-26 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-26 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-26 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-26 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-26 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-26 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-26 15:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-27 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-27 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-27 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-27 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-27 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-27 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-27 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-27 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-27 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-27 14:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-28 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-28 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-28 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-29 04:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-29 07:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-29 08:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-29 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-29 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-29 14:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-29 22:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-30 09:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-30 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-30 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-30 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-30 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-30 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-30 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-30 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-30 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-30 14:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-30 14:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-30 15:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-30 19:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-31 09:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-31 10:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-31 10:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-31 11:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-31 11:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-31 12:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-31 12:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-31 13:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-31 13:30:00: index 1 is out of bounds for axis 0 with size 0\n", "Failed to process timestep 2024-08-31 14:00:00: index 1 is out of bounds for axis 0 with size 0\n", "Model wang failed: No valid footprints calculated\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Model wang failed: No valid footprints calculated\n" ] } ], "source": [ "# Try different models with same interface\n", "models_to_try = [\"ffp_xr\", \"kormann-meixner\", \"wang\"]\n", "\n", "for model_type in models_to_try:\n", " try:\n", " print(f\"\\n=== Running {model_type} model ===\")\n", " \n", " # Build climatology - same function for all models!\n", " model = build_climatology(\n", " df,\n", " model_type=model_type,\n", " crop_height=0.2,\n", " inst_height=2.5,\n", " atm_bound_height=2000.0,\n", " dx=10.0,\n", " dy=10.0,\n", " domain=(-1000, 1000, -1000, 1000),\n", " )\n", " \n", " # Get results - same interface for all models!\n", " fclim = model.get_footprint_climatology()\n", " x, y = model.get_coordinates()\n", " \n", " print(f\"Footprint shape: {fclim.shape}\")\n", " print(f\"Footprint sum: {float(fclim.sum()):.6f}\")\n", " \n", " # Export results - works with all models!\n", " export_contours_gpkg(\n", " model,\n", " None, # No summaries for this example\n", " df,\n", " config[\"station_latitude\"],\n", " config[\"station_longitude\"],\n", " f\"output_{model_type}.gpkg\",\n", " )\n", " \n", " except Exception as e:\n", " print(f\"Model {model_type} failed: {e}\")\n", " continue" ] }, { "cell_type": "markdown", "id": "18f51766", "metadata": {}, "source": [ "\n", "## Tips & Troubleshooting\n", "\n", "- If you see missing column errors, verify your CSV has the expected fields or update the INI to map the correct names. The helper expects AMF-like columns (e.g., `WD`, `WS`, `USTAR`, `MO_LENGTH`, `V_SIGMA`) and renames them internally【8†source】.\n", "- ET weighting converts LE (W/m²) to mm/hr using `LE / 680.6`【8†source】.\n", "- For exports, ensure `geopandas`, `shapely`, `pyproj`, and `rasterio` are installed.\n", "- To change source-area levels, pass `levels=(0.5, 0.8)` to the export functions.\n", "- To use a fixed CRS (instead of UTM auto), pass `crs_out=EPSG_CODE`.\n" ] } ], "metadata": { "kernelspec": { "display_name": "footprints", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.13.7" } }, "nbformat": 4, "nbformat_minor": 5 }