diff --git a/figures/figure-1.png b/figures/figure-1.png new file mode 100644 index 0000000..b3188af Binary files /dev/null and b/figures/figure-1.png differ diff --git a/figures/figure-2.png b/figures/figure-2.png new file mode 100644 index 0000000..9ffd184 Binary files /dev/null and b/figures/figure-2.png differ diff --git a/figures/figure-3.png b/figures/figure-3.png new file mode 100644 index 0000000..860e66d Binary files /dev/null and b/figures/figure-3.png differ diff --git a/notebooks/.ipynb_checkpoints/portable-full-comparison-checkpoint.ipynb b/notebooks/.ipynb_checkpoints/portable-full-comparison-checkpoint.ipynb new file mode 100644 index 0000000..cc56db2 --- /dev/null +++ b/notebooks/.ipynb_checkpoints/portable-full-comparison-checkpoint.ipynb @@ -0,0 +1,1313 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "6c9b37e2-2daa-4283-a228-ea581498de0c", + "metadata": { + "tags": [], + "user_expressions": [] + }, + "source": [ + "## AB testing access time for ICESat-2 ATL03 HDF5 files in the cloud.\n", + "\n", + "This notebook requires that we have cloud optimized versions of an HDF5 file:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "3b78fb94-10ae-48cb-8e30-521b2c8b7822", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "import xarray as xr\n", + "import h5py\n", + "import fsspec\n", + "import s3fs\n", + "import logging\n", + "import re\n", + "import time\n", + "import numpy as np\n", + "import zarr\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "\n", + "\n", + "from h5coro import h5coro, s3driver, filedriver\n", + "driver = s3driver.S3Driver\n", + "\n", + "logger = logging.getLogger('fsspec')\n", + "logger.setLevel(logging.DEBUG)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "431d900d-0656-4b75-af6b-82f0f171d5f8", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "xarray v2024.6.0\n", + "h5py v3.11.0\n", + "fsspec v2024.6.0\n", + "h5coro v0.0.6\n", + "zarr v2.18.2\n" + ] + } + ], + "source": [ + "for library in (xr, h5py, fsspec, h5coro, zarr):\n", + " print(f'{library.__name__} v{library.__version__}')" + ] + }, + { + "cell_type": "markdown", + "id": "7998cd99-6034-4a1b-9ae5-d651bc265bff", + "metadata": { + "tags": [] + }, + "source": [ + "For listing available test files\n", + "\n", + "```bash\n", + "aws s3 ls s3://its-live-data/test-space/cloud-experiments/h5cloud/ --recursive\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "9850faac-f534-4bc2-9214-c8dababe0f52", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "test_dict = {\n", + " \"1GB\": {\n", + " \"links\": {\n", + " \"original\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01.h5\",\n", + " \"original-kerchunk\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01.json\",\n", + " \"page-only-4mb\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01-page-only-4mb.h5\",\n", + " \"page-only-8mb\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01-page-only-4mb.h5\",\n", + " \"rechunked-4mb\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01_rechunked-100k-page-4mb.h5\",\n", + " \"rechunked-8mb\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01_rechunked-100k-page-8mb.h5\",\n", + " \"rechunked-8mb-kerchunk\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01_rechunked-100k-page-8mb.json\",\n", + " \n", + " },\n", + " \"group\": \"/gt1l/heights\",\n", + " \"variable\": \"h_ph\"\n", + " },\n", + " \"7GB\": {\n", + " \"links\": {\n", + " \"original\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02.h5\",\n", + " \"original-kerchunk\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02.json\",\n", + " \"page-only-4mb\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-4mb.h5\",\n", + " \"page-only-8mb\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-8mb.h5\",\n", + " \"rechunked-4mb\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-4mb.h5\",\n", + " \"rechunked-8mb\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-8mb.h5\",\n", + " \"rechunked-8mb-kerchunk\": \"s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-8mb.json\",\n", + " },\n", + " \"group\": \"/gt1l/heights\",\n", + " \"variable\": \"h_ph\"\n", + " }\n", + "}\n", + "\n", + "# This will use the embedded credentials in the hub to access the s3://nasa-cryo-persistent bucket\n", + "fs = s3fs.S3FileSystem(anon=True)\n" + ] + }, + { + "cell_type": "markdown", + "id": "4d166627-6144-40bf-884d-2188e5c764ba", + "metadata": { + "tags": [], + "user_expressions": [] + }, + "source": [ + "## [h5coro](https://github.com/ICESat2-SlideRule/h5coro/)\n", + "\n", + "**h5coro** is optimized for reading HDF5 data in high-latency high-throughput environments. It accomplishes this through a few key design decisions:\n", + "* __All reads are concurrent.__ Each dataset and/or attribute read by **h5coro** is performed in its own thread.\n", + "* __Intelligent range gets__ are used to read as many dataset chunks as possible in each read operation. This drastically reduces the number of HTTP requests to S3 and means there is no longer a need to re-chunk the data (it actually works better on smaller chunk sizes due to the granularity of the request).\n", + "* __Block caching__ is used to minimize the number of GET requests made to S3. S3 has a large first-byte latency (we've measured it at ~60ms on our systems), which means there is a large penalty for each read operation performed. **h5coro** performs all reads to S3 as large block reads and then maintains data in a local cache for access to smaller amounts of data within those blocks.\n", + "* __The system is serverless__ and does not depend on any external services to read the data. This means it scales naturally as the user application scales, and it reduces overall system complexity.\n", + "* __No metadata repository is needed.__ The structure of the file are cached as they are read so that successive reads to other datasets in the same file will not have to re-read and re-build the directory structure of the file.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "efe41d4a-1947-438b-a3c3-7ab954d75e13", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Processing format: original, link: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01.h5\n", + "Skipping s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01.json\n", + "Processing format: page-only-4mb, link: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01-page-only-4mb.h5\n", + "Processing format: page-only-8mb, link: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01-page-only-4mb.h5\n", + "Processing format: rechunked-4mb, link: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01_rechunked-100k-page-4mb.h5\n", + "Processing format: rechunked-8mb, link: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01_rechunked-100k-page-8mb.h5\n", + "Skipping s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01_rechunked-100k-page-8mb.json\n", + "Processing format: original, link: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02.h5\n", + "Skipping s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02.json\n", + "Processing format: page-only-4mb, link: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-4mb.h5\n", + "Processing format: page-only-8mb, link: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-8mb.h5\n", + "Processing format: rechunked-4mb, link: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-4mb.h5\n", + "Processing format: rechunked-8mb, link: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-8mb.h5\n", + "Skipping s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-8mb.json\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", + " \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", + "
tooldatasetcloud-awareformatfiletimeshapemean
0h5coro1GBnooriginals3://its-live-data/test-space/cloud-experiment...15.046684(9720204,)386.067383
1h5coro1GBnopage-only-4mbs3://its-live-data/test-space/cloud-experiment...19.098737(9720204,)386.067383
2h5coro1GBnopage-only-8mbs3://its-live-data/test-space/cloud-experiment...9.906620(9720204,)386.067383
3h5coro1GBnorechunked-4mbs3://its-live-data/test-space/cloud-experiment...14.992573(9720204,)386.067383
4h5coro1GBnorechunked-8mbs3://its-live-data/test-space/cloud-experiment...17.416383(9720204,)386.067383
5h5coro7GBnooriginals3://its-live-data/test-space/cloud-experiment...53.325380(46484912,)1035.163086
6h5coro7GBnopage-only-4mbs3://its-live-data/test-space/cloud-experiment...61.361221(46484912,)1035.163086
7h5coro7GBnopage-only-8mbs3://its-live-data/test-space/cloud-experiment...53.559258(46484912,)1035.163086
8h5coro7GBnorechunked-4mbs3://its-live-data/test-space/cloud-experiment...52.564497(46484912,)1035.163086
9h5coro7GBnorechunked-8mbs3://its-live-data/test-space/cloud-experiment...59.514650(46484912,)1035.163086
\n", + "
" + ], + "text/plain": [ + " tool dataset cloud-aware format \\\n", + "0 h5coro 1GB no original \n", + "1 h5coro 1GB no page-only-4mb \n", + "2 h5coro 1GB no page-only-8mb \n", + "3 h5coro 1GB no rechunked-4mb \n", + "4 h5coro 1GB no rechunked-8mb \n", + "5 h5coro 7GB no original \n", + "6 h5coro 7GB no page-only-4mb \n", + "7 h5coro 7GB no page-only-8mb \n", + "8 h5coro 7GB no rechunked-4mb \n", + "9 h5coro 7GB no rechunked-8mb \n", + "\n", + " file time shape \\\n", + "0 s3://its-live-data/test-space/cloud-experiment... 15.046684 (9720204,) \n", + "1 s3://its-live-data/test-space/cloud-experiment... 19.098737 (9720204,) \n", + "2 s3://its-live-data/test-space/cloud-experiment... 9.906620 (9720204,) \n", + "3 s3://its-live-data/test-space/cloud-experiment... 14.992573 (9720204,) \n", + "4 s3://its-live-data/test-space/cloud-experiment... 17.416383 (9720204,) \n", + "5 s3://its-live-data/test-space/cloud-experiment... 53.325380 (46484912,) \n", + "6 s3://its-live-data/test-space/cloud-experiment... 61.361221 (46484912,) \n", + "7 s3://its-live-data/test-space/cloud-experiment... 53.559258 (46484912,) \n", + "8 s3://its-live-data/test-space/cloud-experiment... 52.564497 (46484912,) \n", + "9 s3://its-live-data/test-space/cloud-experiment... 59.514650 (46484912,) \n", + "\n", + " mean \n", + "0 386.067383 \n", + "1 386.067383 \n", + "2 386.067383 \n", + "3 386.067383 \n", + "4 386.067383 \n", + "5 1035.163086 \n", + "6 1035.163086 \n", + "7 1035.163086 \n", + "8 1035.163086 \n", + "9 1035.163086 " + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "h5coro_beanchmarks = []\n", + "\n", + "for key, dataset in test_dict.items():\n", + " for k, link in dataset[\"links\"].items():\n", + " if \"kerchunk\" in k or link.endswith(\".json\"):\n", + " print(f\"Skipping {link}\")\n", + " continue\n", + " print (f\"Processing format: {k}, link: {link}\")\n", + " group = dataset[\"group\"]\n", + " variable = dataset['variable'] \n", + " final_h5coro_array = []\n", + " start = time.time()\n", + " if link.startswith(\"s3://nasa-cryo-persistent/\"):\n", + " h5obj = h5coro.H5Coro(link.replace(\"s3://\", \"\"), s3driver.S3Driver)\n", + " else:\n", + " h5obj = h5coro.H5Coro(link.replace(\"s3://\", \"\"), s3driver.S3Driver, credentials={\"annon\": True})\n", + " ds = h5obj.readDatasets(datasets=[f'{group}/{variable}'], block=True)\n", + " data = ds[f'{group}/{variable}']\n", + " data_mean = np.mean(data)\n", + " elapsed = time.time() - start\n", + " \n", + " h5coro_beanchmarks.append({\"tool\": \"h5coro\",\n", + " \"dataset\": key,\n", + " \"cloud-aware\": \"no\",\n", + " \"format\": k,\n", + " \"file\": link,\n", + " \"time\": elapsed,\n", + " \"shape\": data.shape,\n", + " \"mean\": data_mean})\n", + "\n", + "df = pd.DataFrame.from_dict(h5coro_beanchmarks)\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "42821313-904d-4b1b-a139-9cc5b05021d1", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0oAAAIhCAYAAABwnkrAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABn4UlEQVR4nO3deVxU9f7H8ffIvgguKUuB4L5voeWSYqamZpaVpbmb173MVDRLyQVzS1JTs+tCmWk3l+vNrMx9ycQFc0uLMC1FLBV3UDi/P3wwP+cACgoOwuv5eMzjwXzP93zP5xxnGN98zzljMQzDEAAAAADAqpC9CwAAAACAvIagBAAAAAAmBCUAAAAAMCEoAQAAAIAJQQkAAAAATAhKAAAAAGBCUAIAAAAAE4ISAAAAAJgQlAAAAADAhKAEIEvCw8NlsVj0999/37FvaGioLBZLusfTTz99Hyq1D4vFovDwcLtsOzQ0VKGhofd9uydPnlR4eLhiYmLSLUt7veSk3BgzK7J6fIOCgvTMM89kuGzXrl2yWCxauHChtW3hwoU27w9XV1f5+vqqSZMmmjBhghISEtKNk3YMMnrMnDnTppaM+vTp0yfb+38/LF26VFWqVJGbm5ssFkuGrykAuN8c7V0AgPypdOnS+vzzz23aihQpYp9ikCtOnjyp9957T0FBQapZs6bNstdeey3Hg3FujJkXLFiwQBUrVtT169eVkJCgrVu3auLEiZoyZYqWLl2qp556Kt063377rby9vW3agoODbZ43aNBAU6ZMsWnz8fHJ+R24R2fOnFHnzp319NNPa9asWXJxcVH58uXtXRYAEJQA5A43Nzc9/vjjdq0hJSVFN27ckIuLi13rKIgeeeQRPfLII3l+zLygatWqCgkJsT5/4YUX9Oabb6phw4Zq166dfv3113QB59FHH9VDDz1023GLFCli9/fg7Vy9elWurq46evSorl+/rk6dOqlx48Y5MvaVK1fk7u6eI2MBKLg49Q5Atpw+fVodOnSQt7e3fHx81KNHDyUmJt71eH/99Zf+9a9/KSAgQM7OzvL399eLL76o06dPW/scP35cnTp1UsmSJeXi4qJKlSpp6tSpSk1NtfY5duyYLBaLJk2apHHjxik4OFguLi7asGGDJGnVqlWqV6+e3N3dVbhwYTVr1kw//vhjlmo8f/683nrrLZUuXVouLi4qWbKkWrVqpV9++eW26x04cEBt27ZV0aJF5erqqpo1ayoqKsqmT9rpV8eOHbNp37hxoywWizZu3GhtMwxDkyZNUqlSpeTq6qratWtrzZo1WdoHSbp27ZpGjBih4OBgOTs76+GHH1b//v11/vx5m35pp5CtWLFC1atXl6urq0qXLq3p06fb1FenTh1JUvfu3a2ndqWdfpjRaXJp43799deqVauW3NzcVKlSJX399dfWY1GpUiV5eHiobt262rVrl8365jHNp67d+rj1VDnDMDRr1izVrFlTbm5uKlq0qF588UX9/vvvNuPf6/HNSYGBgZo6daouXryojz/++L5uO+21t2jRIg0ePFi+vr5yc3NT48aNtXfv3nT9d+3apWeffVbFihWTq6uratWqpS+//NKmT9q/1ffff68ePXqoRIkScnd3V4cOHdSwYUNJ0ssvv5zu3y4r79u018WePXv04osvqmjRoipTpoyke3/N7dq1S6+88oqCgoLk5uamoKAgdejQQX/88UeG+7dhwwb17dtXDz30kIoXL6527drp5MmT6Y7Z4sWLVa9ePXl6esrT01M1a9bUvHnzbPr88MMPatq0qby8vOTu7q4GDRpo3bp1t/unA5DDCEoAsuWFF15Q+fLltWzZMg0fPlyLFy/Wm2++ma5fbGysihUrJkdHR5UpU0YjR47U1atXbfr89ddfqlOnjlasWKHBgwdrzZo1ioyMlLe3t86dOyfp5mk59evX1/fff6+xY8dq1apVeuqppzRkyBANGDAg3XanT5+u9evXa8qUKVqzZo0qVqyoxYsXq23btvLy8tIXX3yhefPm6dy5cwoNDdXWrVtvu78XL15Uw4YN9fHHH6t79+763//+pzlz5qh8+fI6depUpusdOXJE9evX18GDBzV9+nQtX75clStXVrdu3TRp0qSsHOp03nvvPYWFhalZs2ZauXKl+vbtq169eunIkSN3XNcwDD333HOaMmWKOnfurNWrV2vw4MGKiorSk08+qaSkJJv+MTExGjRokN58802tWLFC9evX1xtvvGE9lat27dpasGCBJOmdd97Rjz/+qB9//FGvvfbabevYt2+fRowYobCwMC1fvlze3t5q166dRo8erX//+9+KiIjQ559/rsTERD3zzDPpXjO3at26tXW7aY8PPvhAklSlShVrv969e2vQoEF66qmntHLl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VX3yyScqWrRouuVBQUEaN26cunTpIk9PT5UqVUr//e9/debMGbVt21aenp6qVq2adu3alW7dlStXqnz58nJ1dVWzZs104sSJ29YCAACABwdB6QEWFRUlR0dH/fTTT5o+fbqmTZumf//735Kk5ORkjR07Vvv27dPKlSsVFxenbt26Wdc9duyYXnzxRT333HOKiYlR7969NXLkSJvx9+/frxYtWqhdu3b6+eeftXTpUm3dulUDBgy4bV3Dhg3TsmXLFBUVpT179qhs2bJq0aKFzp49a9Nv5MiRmjp1qnbt2iVHR0f16NEjw/EaNWqk0qVL67PPPrO23bhxQ4sWLVL37t1vW0v//v3VunVrPfXUU5n2mTZtmho0aKC9e/eqdevW6ty5s7p06aJOnTpZ6+/SpYs1hErSlStXNH78eEVFRWnbtm26cOGCXnnlldvWAgAAgAcHN3N4gAUEBGjatGmyWCyqUKGC9u/fr2nTpqlXr142oaN06dKaPn266tatq0uXLsnT01Nz5sxRhQoVNHnyZElShQoVdODAAY0fP9663uTJk9WxY0frdT3lypXT9OnT1bhxY82ePVuurq7parp8+bJmz56thQsXqmXLlpKkTz75RGvXrtW8efM0dOhQa9/x48ercePGkqThw4erdevWunbtWobj9uzZUwsWLLCuv3r1al25ckXt27fP9PgsWbJEe/bssZnNykirVq3Uu3dvSdKoUaM0e/Zs1alTRy+99JIkKSwsTPXq1dPp06fl6+srSbp+/bpmzpypxx57TNLN0FqpUiXt3LlTdevWve32AAAAkPcxo/QAe/zxx2WxWKzP69Wrp19//VUpKSnau3ev2rZtq1KlSqlw4cIKDQ2VJB0/flySdOTIEdWpU8dmPPN/8Hfv3q2FCxfK09PT+mjRooVSU1MVFxeniIgIm2XHjx9XbGysrl+/rgYNGljHcXJyUt26dXX48GGb8W+9ZsjPz0+S0p0emKZbt2767bfftGPHDknS/Pnz1b59e3l4eGjLli02dXz++ec6ceKE3njjDS1atCjD4JVZHT4+PpKkatWqpWu7tTZHR0eFhIRYn1esWFFFihRJt48AAAB4MDGjlA9du3ZNzZs3V/PmzbVo0SKVKFFCx48fV4sWLZScnCxJMgzDJmSltd0qNTVVvXv31uuvv55uG4GBgerTp4/NjI6/v7/OnTsnSRmObW5zcnKy/py2LDU1NcN9KlmypNq0aaMFCxaodOnS+uabb7Rx40ZJUkhIiM1txH18fLRu3TolJCTo0UcftbanpKRo8+bNmjlzppKSkuTg4JBpHVmpzbw/mbUBAADgwUNQeoClza7c+rxcuXL65Zdf9Pfff+v9999XQECAJKW7GUHFihX1zTff2LSZ+9SuXVsHDx5U2bJlM9x+sWLFVKxYMZu2smXLytnZWVu3blXHjh0l3TxNbdeuXfd8a+7XXntNr7zyih555BGVKVPGOmvl5uaWrsamTZtq//79Nm3du3dXxYoVFRYWZg1Jd+vGjRvatWuXdRbuyJEjOn/+vCpWrHhP4wIAACBv4NS7B9iJEyc0ePBgHTlyRF988YVmzJihN954Q4GBgXJ2dtaMGTP0+++/a9WqVRo7dqzNur1799Yvv/yisLAwHT16VF9++aUWLlwo6f9nRcLCwvTjjz+qf//+iomJ0a+//qpVq1Zp4MCBmdbk4eGhvn37aujQofr222916NAh9erVS1euXFHPnj3vaX9btGghb29vjRs37o43cShcuLCqVq1q8/Dw8FDx4sVVtWrVe6pDujnjNHDgQP3000/as2ePunfvrscff5zrkwAAAPIJZpQyE55o7wruqEuXLrp69arq1q0rBwcHDRw4UP/6179ksVi0cOFCvf3225o+fbpq166tKVOm6Nlnn7WuGxwcrK+++kpvvfWWPvzwQ9WrV08jR45U37595eLiIunmtTubNm3SyJEj9cQTT8gwDJUpU0Yvv/zybet6//33lZqaqs6dO+vixYsKCQnRd999l+HtubOjUKFC6tatmyIiItSlS5d7Guteubu7KywsTB07dtSff/6phg0bav78+XatCQAAADnHYpgvTMlnLly4IG9vbyUmJsrLy8tm2bVr1xQXF6fg4OA7XvCf14SGhqpmzZqKjIzMsTHHjx+vOXPm5OnvA+rVq5dOnz6tVatW2buUe/Igv/YAIF8K97Z3BZl7AP54m9d81Ge9vUvIVP85T9q7hALtdtnAjBmlAmzWrFmqU6eOihcvrm3btmny5Ml3/I4ke0lMTFR0dLQ+//xz/fe//7V3OQAAAMjnCEoF2K+//qpx48bp7NmzCgwM1FtvvaURI0bYu6wMtW3bVjt37lTv3r3VrFkze5cDAACAfI6g9IBKuzX2vZg2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+rxbt2567rnnNGXKFPn5+al48eLq37+/rl+/num+LFiwQN7e3lq7dq0k3XE/Ll++rC5dusjT01N+fn6aOnVqlo/bvn379MEHH2j+/Pnplh07dkwWi0VffvmlnnjiCbm5ualOnTo6evSooqOjFRISIk9PTz399NM6c+ZMuvXfe+89lSxZUl5eXurduzfhFQAA4AFm96Dk6OgoX19f66NEiRKSbs4mRUZGauTIkWrXrp2qVq2qqKgoXblyRYsXL7Zz1XlDVFSUHB0dtW3bNr3//vtq3LixatasqV27dunbb7/V6dOn1b59e2v/ESNGaOLEiXr33Xd16NAhLV68WD4+PjZjjhw5UkOGDFFMTIzKly+vDh066MaNG9mqa8OGDYqNjdWGDRsUFRWlhQsXauHChRn2nTJlioYMGaLvvvtOzZo106lTp+64H0OHDtWGDRu0YsUKff/999q4caN27959x7quXLmiDh06aObMmTYzl2ajR4/WO++8oz179sjR0VEdOnTQsGHD9OGHH2rLli2KjY3VqFGjbNZZt26dDh8+rA0bNuiLL77QihUr9N5772XtgAEAACDPsfvNHH799Vf5+/vLxcVFjz32mCIiIlS6dGnFxcUpPj5ezZs3t/Z1cXFR48aNtX37dvXu3TvD8ZKSkpSUlGR9fuHChVzfB3spW7asJk2aJEkaNWqUateurYiICOvy+fPnKyAgQEePHpWfn58+/PBDzZw5U127dpUklSlTRg0bNrQZc8iQIWrdurWkmzMkVapU0W+//aaKFStmua6iRYtq5syZcnBwUMWKFdW6dWutW7dOvXr1suk3YsQIRUVFaePGjapWrZokafbs2bfdD39/f82bN0+ffvqpmjVrJulmYHzkkUfuWNebb76p+vXrq23btrftN2TIELVo0UKS9MYbb6hDhw5at26dGjRoIEnq2bNnuuDn7Oys+fPny93dXVWqVNGYMWM0dOhQjR07VoUK2f3vEQAAAMgmuwalxx57TJ9++qnKly+v06dPa9y4capfv74OHjyo+Ph4SUo34+Hj46M//vgj0zEnTJhQYP6SHxISYv159+7d2rBhgzw9PdP1i42N1fnz55WUlKSmTZvedszq1atbf/bz85MkJSQkZCsoValSRQ4ODjbj3HpKpSRNnTpVly9f1q5du1S6dOks78fVq1eVnJysevXqWduL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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pivot_df = df.pivot_table(index=['tool','dataset'], columns=['format'], values='time', aggfunc='mean')\n", + "\n", + "# Plotting\n", + "plt.style.use('fast')\n", + "# plt.xkcd()\n", + "pivot_df.plot(kind='bar', figsize=(10, 6))\n", + "plt.title('h5coro cloud optimized HDF5 performance')\n", + "plt.xlabel('Tool')\n", + "plt.ylabel('Mean Time')\n", + "plt.xticks(rotation=0)\n", + "plt.legend(title='Format')\n", + "plt.grid(False)\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "8f0ba64d-d89c-4879-b965-f00d70956360", + "metadata": { + "tags": [], + "user_expressions": [] + }, + "source": [ + "### Xarray + kerchunk, out of the box performance." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "ff56958f-8c1d-4fd7-b885-6efb81af8da7", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Processing format: original, link: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01.h5\n", + "Processing format: original-kerchunk, link: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01.json\n", + "Processing format: page-only-4mb, link: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01-page-only-4mb.h5\n", + "Processing format: page-only-8mb, link: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01-page-only-4mb.h5\n", + "Processing format: rechunked-4mb, link: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01_rechunked-100k-page-4mb.h5\n", + "Processing format: rechunked-8mb, link: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01_rechunked-100k-page-8mb.h5\n", + "Processing format: rechunked-8mb-kerchunk, link: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01_rechunked-100k-page-8mb.json\n", + "Processing format: original, link: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02.h5\n", + "Processing format: original-kerchunk, link: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02.json\n", + "Processing format: page-only-4mb, link: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-4mb.h5\n", + "Processing format: page-only-8mb, link: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-8mb.h5\n", + "Processing format: rechunked-4mb, link: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-4mb.h5\n", + "Processing format: rechunked-8mb, link: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-8mb.h5\n", + "Processing format: rechunked-8mb-kerchunk, link: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-8mb.json\n" + ] + }, + { + "data": { + "text/plain": [ + "[{'tool': 'kerchunk',\n", + " 'dataset': '1GB',\n", + " 'cloud-aware': 'no',\n", + " 'format': 'original-kerchunk',\n", + " 'file': 's3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01.json',\n", + " 'time': 5.335654020309448,\n", + " 'shape': (9720204,),\n", + " 'mean': Size: 4B\n", + " array(386.06738, dtype=float32)},\n", + " {'tool': 'kerchunk',\n", + " 'dataset': '1GB',\n", + " 'cloud-aware': 'no',\n", + " 'format': 'rechunked-8mb-kerchunk',\n", + " 'file': 's3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01_rechunked-100k-page-8mb.json',\n", + " 'time': 4.396910905838013,\n", + " 'shape': (9720204,),\n", + " 'mean': Size: 4B\n", + " array(386.06738, dtype=float32)},\n", + " {'tool': 'kerchunk',\n", + " 'dataset': '7GB',\n", + " 'cloud-aware': 'no',\n", + " 'format': 'original-kerchunk',\n", + " 'file': 's3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02.json',\n", + " 'time': 27.210114240646362,\n", + " 'shape': (46484912,),\n", + " 'mean': Size: 4B\n", + " array(1035.1631, dtype=float32)},\n", + " {'tool': 'kerchunk',\n", + " 'dataset': '7GB',\n", + " 'cloud-aware': 'no',\n", + " 'format': 'rechunked-8mb-kerchunk',\n", + " 'file': 's3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-8mb.json',\n", + " 'time': 17.314841270446777,\n", + " 'shape': (46484912,),\n", + " 'mean': Size: 4B\n", + " array(1035.1631, dtype=float32)}]" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# this is going to keep our numbers without modifying the i/o paramters\n", + "import ujson\n", + "regular_xarray_benchmarks = []\n", + "kerchunk_benchmarks = []\n", + "\n", + "fs = s3fs.S3FileSystem(anon=True)\n", + "\n", + "\n", + "def kerchunk_result(metadata: str, dataset: str, variable: str):\n", + " with fs.open(metadata) as f:\n", + " reference = ujson.load(f)\n", + "\n", + " ds = xr.open_dataset(\n", + " \"reference://\",\n", + " engine=\"zarr\",\n", + " backend_kwargs={\n", + " \"storage_options\": {\n", + " \"fo\": reference,\n", + " \"remote_protocol\": \"s3\",\n", + " \"remote_options\": {\"anon\": True}\n", + " },\n", + " \"consolidated\": False\n", + " },\n", + " group=dataset\n", + " )\n", + " return ds[variable]\n", + "\n", + "for key, dataset in test_dict.items():\n", + " for k, link in dataset[\"links\"].items():\n", + "\n", + " log_filename = f\"logs/fsspec-xarray-{key}-{k}-default.log\"\n", + "\n", + " \n", + " # Create a new FileHandler for each iteration\n", + " file_handler = logging.FileHandler(log_filename)\n", + " file_handler.setLevel(logging.DEBUG)\n", + "\n", + " # Add the handler to the root logger\n", + " logging.getLogger().addHandler(file_handler)\n", + " print (f\"Processing format: {k}, link: {link}\")\n", + " start = time.time()\n", + " if \"kerchunk\" in k or link.endswith(\".json\"):\n", + " ds = kerchunk_result(link, dataset[\"group\"], dataset[\"variable\"])\n", + " data_mean = ds.mean()\n", + " \n", + " elapsed = time.time() - start\n", + " kerchunk_benchmarks.append(\n", + " {\"tool\": \"kerchunk\",\n", + " \"dataset\": key,\n", + " \"cloud-aware\": \"no\",\n", + " \"format\": k,\n", + " \"file\": link,\n", + " \"time\": elapsed,\n", + " \"shape\": ds.values.shape,\n", + " \"mean\": data_mean}) \n", + " else:\n", + " fo = fs.open(link, mode='rb')\n", + " ds = xr.open_dataset(fo,\n", + " group=dataset[\"group\"],\n", + " engine=\"h5netcdf\")\n", + " # print(ds)\n", + " data_mean = ds[dataset[\"variable\"]].mean() \n", + " elapsed = time.time() - start\n", + " regular_xarray_benchmarks.append(\n", + " {\"tool\": \"xarray\",\n", + " \"dataset\": key,\n", + " \"cloud-aware\": \"no\",\n", + " \"format\": k,\n", + " \"file\": link,\n", + " \"time\": elapsed,\n", + " \"bytes_requested\": fo.cache.total_requested_bytes,\n", + " \"shape\": ds[dataset[\"variable\"]].values.shape,\n", + " \"mean\": data_mean})\n", + " logging.getLogger().removeHandler(file_handler)\n", + " file_handler.close()" + ] + }, + { + "cell_type": "markdown", + "id": "92a8e67d-026e-4c6b-aa7d-b19dc10f4afd", + "metadata": { + "tags": [] + }, + "source": [ + "### Plotting Results" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "id": "149d5972-c5b9-4f29-979a-cf46c9654a06", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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CtLbb7+tK1euWKaLjo7WoEGDVKpUKbm7u8vLy0uBgYFq3759mn6vpHScOXz4sNq3b295f3PlyqUKFSrovffeS/P6Snf+GDFq1Cj5+/srW7ZsCggI0Lhx41K8dHfdunVq1KiRcuXKJRcXFwUEBGjgwIFWx5shQ4aoVq1akqShQ4da/X4+ceJEmo4tknT8+HH997//lZ+fn1xcXOTr66t27drpr7/+SlJX4vz//POP2rVrp3z58sne3t7q2NG8eXNJ0qxZs9K1jYDUcOYIj53w8HDFx8erc+fOyps3b6rTuri43Le9yZMn65133pG3t7datWolNzc3/fTTT3r33Xe1fv16yw2+GRUREaH69evL3t5eLVq0UP78+RUREaFq1aopZ86c6W7vhx9+0Ouvvy5nZ2e1aNFCefLk0a+//qqhQ4dq5cqVWr16dZL1vnTpkqpVqyZfX1+9+eab+ueffzR//nzVqlVLv/zyi+UA9c477yg8PFx79uxRz549lSNHDknJX5qVnEmTJmnNmjVq0qSJXnjhBf3www/q2bOnsmfPrj179uj777/XSy+9pBdeeEHz5s1TmzZtVKRIEVWvXj3VdlM60/H9999r3759yp49u2XY0aNHLQfMunXrqmnTpjp79qx++OEH/fLLL4qIiLC6HyGz35+Hwd7eXh988IEiIiI0f/589e3b94HaW79+vbZt2yYHBwcFBgbqxRdfTNO+khZxcXFatmyZGjRoYDmbEh4eroSEBL355pup7rMffvihvv32W3355ZcaNmxYmpf52muv6ffff9drr72m2NhYfffdd+rYsaPOnDmjAQMGWE37/vvva9SoUSpQoIBeffVVeXp6at26derTp4+2bt2q77//Pkn733//vVauXKmXXnpJb7/9tq5evWr5PE6aNEnSnX1H+r99xRijFi1aaOHChSpevLi6du2qa9eu6bvvvtNLL72kyZMnq0ePHmla1t169eqlrVu3qlGjRnJwcNC8efPUqlUr5cyZU5988on++OMPNWjQQDdv3tS3336rxo0b68CBAypSpIiljc8//1w//fSTatasqQYNGuj69etas2aNBgwYoO3bt+uHH35IUldsbKzq1q2rixcv6pVXXtH169c1b948NW/eXCtWrFDdunUt0968eVNhYWFat26dAgIC1L59e7m4uOjw4cOaMWOG2rRpY9m3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1XMzjDF6//330x1AmjRpIi8vL82aNUt//vmnVXsDBgxQbGxsss9Zio+P1wcffGD1V761a9dq2bJl8vf3t/xlX/q/67MTL296HHz//fcaMmSIgoODU7xfRLpzv8Zzzz2nuXPnav78+UnGJyQkWL6YSpn//jwM586d03/+8x9FRESoVKlSeuuttzLUztWrV/X7778nGX7p0iV17NhR0oMFr1OnTmn37t1WD35NVLx4cfXs2VMXLlxQo0aNFBUVZTU+ISFBw4cP1zfffKNixYqpd+/e6Vr2yJEjrbq8PnPmjD7++GM5OjqqVatWluGJXWd36NAh2QdEnz59Wvv370/XslOSeLYjcb9M9M8//1hqe+ONNzJlWelRqFAhSUryHJ8///xTo0aNeuD2HR0d1blzZ0VHR6tnz55J9qHo6GjFxMRISv/+mprEMwrJhdHk5MuXT82bN9emTZs0bty4ZM+AbN261XI29Y8//kj2WTuJZwFdXV0l3XlOz759++47XXpt37491TOk6Wl3ypQpVse7mJgYS9f5bdq0sQx/++235ejoqO7duyf7h6LLly9b/VHwfseO1MY3adJEfn5++vjjj7Vu3bok42NjY5N99tT9xMbGavfu3apUqRKX1SHTcM8RHksjRozQzZs3NXHiRJUoUUIvvPCCypQpIycnJx0/fly//vqrLly4kGxguVuxYsU0ZswYvffeeypbtqyaN28uNzc3/fzzzzpw4ICaNGmi//znP5bpnZ2d1a1bN40ePVoVKlRQkyZNdPXqVf30008KCQmx/FU2kb29vT777DM1aNBAL774ouU5Or/99puioqJUtmzZZL+wpsTT01Off/65WrZsqeeee04tWrRQ7ty5FRERoR07dqhKlSpJ7veQ7lyOsWbNGlWtWlUvvPCC/v33X82bN09OTk76/PPPLZcLStILL7yg8ePHq3Pnznrttdfk5uYmPz8/qy+Zj1rbtm1ljFG5cuWS/QIXGhpqucl97ty5qlWrll5//XVNmjRJFStWVLZs2XTy5Elt3rxZ586ds3RekNnvz4MaP3683N3dlZCQoCtXrmjfvn1at26dbt26pWrVqmnevHkZPsBfuHBB5cqVU6VKlRQUFGS5n2758uW6cOGC6tSpo3fffTfDtSdeUpdcOJKksWPHKjo6Wl9++aUCAgLUsGFDFStWTFeuXNHKlSt1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Zs0yrq6ulu0TFxdngoODTdOmTY0xxkyfPt14eXmZEydOJLtMY5IPR9OmTTO1a9c2xhizcOFCI8ls2rQp2fmLFy9umjRpkmL7ISEhxt3d3fTs2dMcOHDAfPPNNyZ79uzms88+s0zzxRdfmGXLlpmjR4+azZs3m6pVq5r69esn2TZly5Y1K1euNEeOHDHnz583kZGRZsaMGeb33383hw4dMh988IHJli2b+euvvyzzJr5XM2bMMIcOHTJvvfWW8fDwMPXq1TPfffedOXjwoGnatKkpWbKk5XP4+++/G3d3dzNx4kRz6NAhs3HjRvPss8+adu3aGWPufK4LFChghg0bZvlspGW+xHo8PT3NuHHjzOHDh83hw4fNuHHjTMGCBc26devMiRMnzPr16823336b4jYFAFt56sPR2rVrzUsvvWR8fX2T/VKSFvPnzzflypUzrq6uxs/Pz4wdOzbzCwXwRNqyZUuqv1s+/vhjI8lyluB+4ej48eNGktm9e3eqy33//fdNiRIlrM5OfPLJJ8bd3d1yBmXixInJnjG626xZs4yXl1eS4YUKFTL/+c9/LK8TEhJMnjx5zPTp040xd77s37v8W7duGVdXV/PLL78ku6zEAHD3WZgLFy4YV1dXM3/+fGOMMa1atTJ16tSxmq9Pnz6mVKlSltdHjx41Hh4epl+/fiZ79uzmm2++SXUdkwtHderUMVOmTDHGGDN69GgjyVy6dCnZ+Rs3bmxKliyZYvshISFWwcMYY/r165fqPIkhODGMJm6bH3/8MdV1McaYUqVKmalTp1pe3/teRUVFGUnmww8/tAzbvHmzkWQJOa1btzZvvvmmVbvr16839vb25saNG5Z2J06caDVNWudLDK+Junfvbl544QWrbQQAj6On/p6ja9euqVy5cpo2bVqG5l++fLneeOMNdenSRX/88Yc+/fRTffzxxxluD0DWYv7/vSp2dnaZ2u7+/fsVHBxs1W61atUUExOjv//+O1OWUbZsWcv/7ezslC9fPp09e1aStHPnTh05ckQeHh5yd3eXu7u7vL29dfPmTR09ejTVdoODgy3/9/b2VokSJbR//37LelWrVs1q+mrVqunw4cOWjhGKFi2q8ePHa8yYMWrUqJHeeOONdK3XlStXtHbtWjVu3NhquEnhviJjzH3fv6pVq1pNExwcbFXz7t271aRJExUqVEgeHh4KDQ2VJJ08edKqnUqVKlm9vnbtmvr27atSpUopR44ccnd314EDB5LMd/d7lTdvXklSUFBQkmF3v3/h4eGW987d3V1hYWFKSEjQ8ePHU1zPtM5373q0a9dOkZGRKlGihHr06KGVK1emuAwAsKWn/u7c+vXrq379+imOv337tgYOHKg5c+bo8uXLKlOmjMaMGWM5cH399ddq2rSpunTpIunOQblfv34aM2aMunbtmulfeAA8Wfz9/WVnZ6d9+/apadOmScYfOHBAOXPmVK5cuSTdCRn3fgmPjY1N93KT+8Ke2UHMycnJ6rWdnZ0SEhIkSQkJCapYsaLmzJmTZL7cuXOne1mJNae2Xndbt26dHBwcdOLECcXFxaWrs4nly5erZMmSKlSokCSpePHiku4Es+effz7J9AcOHFCpUqXS3P69rl27prp166pu3br65ptvlDt3bp08eVJhYWFJOitwc3Ozet2nTx/98ssvGj9+vPz9/eXq6qpmzZolme/u9ypx+yU37O73r3PnzurRo0eSev38/FJcl7TOd+96VKhQQcePH9fy5cv166+/qnnz5nrxxRe1YMGCFJcFALbw1Iej+2nfvr1OnDihefPmKX/+/Fq0aJHq1aunvXv3KiAgQLdu3VL27Nmt5nF1ddXff/+tv/76S4ULF7ZN4QAeCz4+PqpTp44+/fRTvfvuu3J1dbWMO336tObMmaM2bdpYvpzmzp1bUVFRlmkOHz6s69evW147OztL0n27jy5VqpR++OEHqzCxadMmeXh46Jlnnklz/c7OzhnqqrpChQqaP3++8uTJI09Pz3TNu2XLFssX6UuXLunQoUMKDAyUdGe9NmzYYDX9pk2bVLx4cTk4OEiS5s+fr4ULF2rNmjVq0aKFhg8frqFDh6Z5+YsXL7Y6a1S3bl15e3trwoQJScLRkiVLdPjwYQ0fPvy+63Tv64CAADk4OOjAgQM6f/68Ro8erYIFC0qSduzYkaZa169fr3bt2unll1+WJMXExOjEiRNpmjc1FSpU0J9//il/f/8Up0nus5GW+VLi6empFi1aqEWLFmrWrJnq1aunixcvytvbO91tAcDD8tRfVpeao0ePau7cufr+++9Vo0YNFStWTL1791b16tU1a9YsSVJYWJgWLlyoiIgIJSQk6NChQ5bnPtz9BQdA1jVt2jTdunVLYWFhWrdunU6dOqUVK1aoTp06euaZZzRy5EjLtC+88IKmTZumXbt2aceOHerSpYvVX/jz5MkjV1dXrVixQmfOnFF0dHSyy3z77bd16tQpde/eXQcOHNDixYs1ePBg9erVS/b2af/VXrhwYcXExCgiIkLnz5+3CmqpeeONN5QrVy41adJE69ev1/Hjx7V27Vr17Nnzvpf1DRs2TBEREfrjjz/Url075cqVy3LW7b333lNERISGDx+uQ4cOafbs2Zo2bZp69+4tSfr777/11ltvacyYMapevbrCw8M1atSoJOEkJXFxcVq+fLmlC2/pzlmOmTNnavHixXrzzTf1+++/68SJE/riiy/Url07NWvWTM2bN0+13VOnTqlXr146ePCg5s6dq6lTp6pnz56S7pxRcXZ21tSpU3Xs2DEtWbLkvmErkb+/vxYuXKjIyEjt2bNHrVq1spz9eRD9+vXT5s2b1bVrV0VGRurw4cNasmSJunfvbpmmcOHCWrdunf755x+dP38+zfMlZ+LEiZo3b54OHDigQ4cO6fvvv1e+fPme+mdsAXgC2exuJxvQPTdCf/fdd0aScXNzs/pxdHQ0zZs3N8bcuQm5b9++Jlu2bMbBwcHkzJnTDBkyxEgyW7dutdGaAHjcnDhxwrRr187ky5fPODk5mYIFC5ru3btbdTltjDH//POPqVu3rnFzczMBAQFm2bJlVh0yGGPM559/bgoWLGjs7e0z3JW3MWnrkMEYY7p06WJ8fHySdOV978345cqVs4w35s6N/23atDG5cuUyLi4upmjRoqZTp04mOjo62eUkdjrw008/mdKlSxtnZ2dTuXJlExkZaTVdYlfeTk5Oxs/Pz4wbN84Yc+f3ce3atU1YWJjVjf3vvvuuKVasmKVzg3vd3SHDr7/+agoUKJDsdOvWrTP16tUzXl5extnZ2ZQqVcqMHz/exMXFpbTpjDF3OmR4++23TZcuXYynp6fJmTOn6d+/v1WN3377rSlcuLBxcXExwcHBli7CEzveSNw293YKcfz4cVOrVi3j6upqChYsaKZNm2ZCQkJMz549LdMk917de7xLrqOPbdu2mTp16hh3d3fj5uZmypYta0aOHGkZv3nzZkuX63d/XbjffMnV89lnn5ny5csbNzc34+npaWrXrm127dqV6nYFAFuwM+YRP9nOhuzs7LRo0SLLXyjnz5+vN954Q3/++afl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pkyZoq+++ko3b95MtqZr165p+vTpGjdunOrXr69SpUrp888/l6urq7744guraUeOHKmQkBCVKlVK/fv316ZNm1Jst2PHjpo1a5bl9dKlS3X9+nU1b948xe0zb9487dq1S6NGjUp1OzZo0ECdO3dWQECABg0apKtXr6py5cp67bXXVLx4cfXr10/79+/XmTNnLPPExsZq2rRpCg4OVsWKFTV79mxt2rRJ27ZtS3VZmc3m4UiSSpcuraioKMvP3r17bV0SAAAAspiqVavKzs7O8jo4OFiHDx9WfHy8du/erSZNmqhQoULy8PBQaGioJOnkyZOSpIMHD6py5cpW7VWpUsXq9c6dOxUeHi53d3fLT1hYmBISEnT8+HF99NFHVuNOnjypo0ePKjY2VtWqVbO04+TkpCpVqmj//v1W7d99D5Cvr68kJbn0L1G7du105MgRbdmyRZL05Zdfqnnz5nJzc9P69eut6pgzZ45OnTqlnj176ptvvlG2bNlS3Y5315E3b15JUlBQUJJhd9fm6OioSpUqWV4HBgYqR44cSdbxYXsseqtzdHTkbBEAAAAeSzdv3lTdunVVt25dffPNN8qdO7dOnjypsLAw3b59W5JkjLEKVonD7paQkKDOnTurR48eSZbh5+enLl26WJ25yZ8/vy5duiRJybZ97zAnJyfL/xPHJSQkJLtOefLkUaNGjTRr1iwVLVpUy5Yt05o1ayRJlSpVUmRkpGXavHnzKiIiQmfPnlXFihUtw+Pj47Vu3TpNmzZNt27dkoODQ4p1pKW2e9cnpWEP02MRjg4fPqz8+fPLxcVFzz33nD766CMVLVrU1mUBAAAgC0k8i3L364CAAB04cEDnz5/X6NGjVbBgQUlK0qFAYGCgli1bZjXs3mkqVKigP//8U/7+/sku39vbW97e3lbD/P395ezsrA0bNqhVq1aS7lyCtmPHDr3zzjvpXse7/fe//9Xrr7+uAgUKqFixYpazU66urklqrF27dpKru9q3b6/AwED169fPEowyKi4uTjt27LCcbTt48KAuX76swMDAB2o3vWwejp577jl99dVXKl68uM6cOaMRI0bo+eef159//ikfH580tZF4OV6ixGs/AQAAgLQ6deqUevXqpc6dO2vXrl2aOnWqJkyYID8/Pzk7O2vq1Knq0qWL/vjjDw0fPtxq3s6dO+vjjz9Wv379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siLCEZDFbN26VZ06dVLx4sX177//qmjRourZs6cqV64s6f9upo2JidGCBQv0559/ys3NTeXLl1ejRo3oiQgAngIzZ87UW2+9pQULFuiVV17RsmXL1LNnT40bN05Nmza1/J7nWICshnAEZDG//vqrPv/8c02cOFHbt2/XyJEjVbx4cauAFBsba3ng3734KyEAPNmOHj2qVq1aacCAAWratKkk6fLly6pZs6aCgoI0Z84cSUo1/HAswNOKcARkMbGxsTpx4oQCAgIkST/88IPGjBmTJCDdunVLLi4uVt27AgCeDv/884+lM4WEhATZ29vrxx9/VLt27bRw4UK98MILNq4QsA06ZACyGCcnJ0swku488bx///46ePCgJk+erJ07d+ratWtq1aqVduzYQTACgKdIYucJd/cyZ29/5+tg6dKlVbBgQW3cuNFqWiAr4cwRkIXdfVZo4cKFGjNmjAoVKqT9+/frxo0bOnDgANeTA0AWMnjwYE2dOlV79+6lm25kSZw5ArIwOzs7yzOOXnnlFcvNua6urtq/f78cHR0VHx9v4yoBAA9b4rGgbdu2KlKkiL766it+/yNL4k/CQBaXGJDOnTunmTNnqkKFCtq0aZMcHR3piQgAsojEqwiKFi0qd3d37d27lw4XkCXxrQeA7OzsdPz4cV28eFF//PEHwQgAsqDEjhl++uknubm52bocwCa45whAkh7pCEYAkDXdfTygu25kRYQj4Clyb8hJbzfcdNsNAE++Bz0WAFkZHTIAT5HEg9/HH3+s1atXp/tgyMETAJ58D3osALIywhHwlImOjtbKlSu1ePFiSdbPqbj3mRWcOAaApxPHAiBjCEfAU8bLy0u1atXS4sWLdfXqVdnb21sOfIkP+tu+fTuXWQDAU4xjAZAxhCPgCZbS08t79+4tb29vDR8+XJL15XKffPKJWrRooZMnT0riL4YA8KTjWABkHsIR8ARL/OvfzJkztXnzZp09e1bSnYNckyZNtGPHDl2/ft1qntdee02xsbGaO3euJO4zAoAnHccCIPPQWx3whLt27ZqqV6+u+Ph4ubi4qH///nrxxRdljJG/v79GjBihLl26SPq/Lrp/+OEH/fvvv+revbuNqwcAZAaOBUDmIBwBT5iUrg+PiIjQypUrNWvWLJUtW1Y1a9ZUdHS09u/fr6+//lo+Pj6Waa9evSoPD49H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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df = pd.DataFrame.from_dict(kerchunk_benchmarks + regular_xarray_benchmarks)\n", + "\n", + "pivot_df = df.pivot_table(index=['tool','dataset'], columns=['format'], values='bytes_requested', aggfunc='mean')\n", + "\n", + "# Plotting\n", + "pivot_df.plot(kind='bar', figsize=(10, 6))\n", + "\n", + "plt.title(\"Out of the box I/O parameters\", fontsize=10)\n", + "plt.suptitle('Cloud-optimized HDF5 I/O performance (less is better)', fontsize=14)\n", + "\n", + "plt.xlabel('Tool')\n", + "plt.ylabel('bytes')\n", + "# plt.xticks(rotation=90)\n", + "plt.legend(title='Format')\n", + "# plt.grid(True)\n", + "plt.xticks(rotation=45)\n", + "# plt.grid(True)\n", + "# plt.grid(axis='y', which='major', linestyle='-')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "a7aacf16-8276-4a50-b5af-3103056d73f4", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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FHR0dMTtampqWLhwIVasWAELCwuZxND7vvrqK+zduxfnzp1DvXr1MHDgQPj5+WHcuHEKxd68eXMMHDgQPXr0QOXKlTF79uxS7aejo4Njx47BysoK3377LRwdHTFgwABkZGSUOOJt5syZGDZsGBo2bIhHjx5h9+7d4sg+Z2dnbN26FZs3b0adOnUwYcIETJ48Gb6+vhAEAb6+vmjcuLH4VMx27dphyJAh+OGHH5Cenl5i3EePHoVUKkXDhg1lyrt3746oqCjcv38fbm5usLe3x7x58zB27Fhs3ry5xGm6ffv2RUZGBho3bozBgwcjICAAP//8M4B3oxrDw8Pxxx9/oFatWpg5cybmzp1bYqzAu0RVpUqV0Lx5c3Tu3Bmenp5wdnYu1b7FqVu3Lo4ePYqbN2+iZcuWaNCgAcaPHw9zc3OxzuTJk5GUlIQaNWqI04RLs19hpFIpZs2aBRcXFzRq1AhJSUnYu3evQslhIiIi+vQkQlGr2hIRERERFWHo0KHIycnB0qVLldamh4cH6tevj/nz5yutTSIiIqKywDXciIiIiEhhderUkXlKKhERERH9HybciIiIiEhh+dM8iYiIiEgep5QSEREREREREREpEVdXJSIiIiIiIiIiUiIm3IiIiIiIiIiIiJSICTciIiIiIiIiIiIl4kMTipGXl4d///0Xenp6kEgkZR0OERERERERERGVEUEQ8OrVK1hYWEBFpfgxbEy4FePff/+FpaVlWYdBRERERERERETlxP3791G1atVi6zDhVgw9PT0A706kvr5+GUdDRERERERERERlJS0tDZaWlmK+qDhMuBUjfxqpvr4+E25ERERERERERFSqZcf40AQiIiIiIiIiIiIlYsKNiIiIiIiIiIhIiZhwIyIiIiIiIiIiUiKu4faRsrOzkZOTU9ZhEH1xVFVVoa6uXqq580RERERERESfE0e4fYRXr17hzZs3ZR0G0RcpKysLT58+ZcKbiIiIiIiIyh2OcPtAeXl5yM7OhpGRUVmHQvTF0tXVxdOnT2FiYsKRbkRERERERFRucITbB8rOzoampmZZh0H0RZNIJNDW1kZ2dnZZh0JEREREREQkYsLtA+Xl5UFFhaePqKypqqoiNze3rMMgIiIiIiIiEjFjREREREREREREpERMuBERERERERERESkRE25ERERERERERERKxIQblXu+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4OXlhW3btiE+Ph5OTk4lxkZEREREREREnw+nlH5hbG1toaGhgRMnTohl2dnZiImJgaOjY6naMDAwgKmpqcw0x9zcXFy8ePGjYjt58iSsra0xduxYuLi4wM7ODnfv3i2yvra2NmxtbcXX+6PLatSogaioKOzatQsBAQFiubOzM27evIkqVarI7GtrawsDg6KfMFu3bl3ExcV91IMJKleujEePHonv09LScOfOnQ9qa+bMmejXrx/atGmD+Pj4D46JiIiIiIiIiJSPCbcvjK6uLn755RcEBgZi//79iI+Px08//YQ3b97Az8+v1O0EBARgxowZ2LVrF65fv45hw4bhxYsXcqPeFGFra4t79+5h8+bNSExMxMKFC7Fjx44Pbq9mzZqIiorCtm3bxKelfv/99zAxMYG3tzeOHz+OO3fu4OjRoxg2bBgePHhQZFu9evWCmZkZunbtipMnT+L27dvYtm0bTp8+Xep4WrdujXXr1uH48eO4cuUK+vXr91HTQefOnYvvv/8erVu3lnnwBBERERERERGVLU4p/QLNnDkTeXl56NOnD169egUXFxccOHAAlSpVKnUbwcHBSE5ORt++faGqqoqff/4Znp6eH5VA8vb2xogRIzBkyBBkZmbCy8sL48ePR0hIyAe3aW9vjyNHjsDDwwOqqqoIDQ3FsWPHEBwcjG+//RavXr3CV199hTZt2hS5VhwAaGho4ODBgxg5ciQ6deqEnJwc1KpVC0uWLCl1LGPGjMHt27fx9ddfw8DAAFOmTPngEW75wsLCkJubi9atWyM6Oho1a9b8qPaIiIiIiIiI6ONJhNIsvPWFSktLg4GBAVJTU+WSMRkZGQBKt7bXlyAvLw+Ojo7w8fHBlClTyjoc+oLwXiQiIiIiqlicIpS/DvXWGTlKbc8x4ZpS26P/huLyRAVxhBt9kLt37+LgwYNwd3dHZmYmFi9ejDt37qB3795lHRoRERERERERUZniGm70QVRUVBAeHo5GjRrB1dUVly9fxuHDh0v94AUiIiIiIiIiov8qjnCjD2JpaYmTJ0+WdRhEREREREREROUOR7gREREREREREREpERNuRERERERERERESsSEGxERERERERERkRIx4UZERERERERERKRETLgREREREREREREpERNuRERERERERERESsSEG/2nhISEoH79+mUdRqHCw8NhaGhY1mEQERERERER0SemVtYB/Nc4RTh91uNd7nf5sx7vSzNjxgz89ttvGDZsGObPn1/W4RARERERERFRBcARbkRFOH/+PH7//XfUrVu3rEMhIiIiIiIiogqECbcvjIeHB4YMGYIhQ4bA0NAQxsbGGDduHARBAACsX78eLi4u0NPTg5mZGXr37o2UlBSZNnbv3g07Oztoa2ujVatWiIiIgEQiwcuXL8U6p06dgpubG7S1tWFpaYmhQ4fi9evXxcaWmZmJoUOHokqVKtDS0kKLFi1w/vx5cXt0dDQkEgkiIyPh4uICHR0dNG/eHNevXy+0vWPHjkFdXR3Jycky5SNHjoSbm1uxsaSnp+P777/HypUrUalSJbntNjY2mDp1Kvr27QupVApra2vs2rULT548gbe3N6RSKZycnBATEyO3786dO1GzZk1oaWmhXbt2uH//frGxEBEREREREVHFwoTbFygiIgJqamo4e/YsFi5ciLCwMPzvf/8DAGRlZWHKlCm4dOkSdu7ciTt37sDX11fcNykpCd27d0fXrl0RFxcHf39/jB07Vqb9y5cvw9PTE99++y3++ecfbNmyBSdOnMCQIUOKjSsoKAjbtm1DREQEYmNjYWtrC09PTzx//lym3tixYxEaGoqYmBioqalhwIABhbbn5uaG6tWrY926dWJZTk4O1q9fj/79+xcby+DBg+Hl5YW2bdsWWScsLAyurq64ePEivLy80KdPH/Tt2xc//PCDGH/fvn3FZCYAvHnzBtOmTUNERAROnjyJtLQ09OzZs9hYiIiIiIiIiKhi4RpuXyBLS0uEhYVBIpHA3t4ely9fRlhYGH766SeZ5FX16tWxcOFCNG7cGOnp6ZBKpVi+fDns7e0xZ84cAIC9vT2uXLmCadOmifvNmTMHvXv3xvDhwwEAdnZ2WLhwIdzd3bFs2TJoaWnJxfT69WssW7YM4eHh6NixIwBg5cqVOHToEFatWoXAwECx7rRp0+Du7g4AGD16NLy8vPD27dtC2/Xz88OaNWvE/ffs2YM3b97Ax8enyPOzefNmxMbGyoyuK0ynTp3g7+8PAJgwYQKWLVuGRo0a4bvvvgMABAcHo1mzZnj8+DHMzMwAANnZ2Vi8eDGaNGkC4F3y09HREefOnUPjxo2LPR4RERERERERVQwc4fYFatq0KSQSifi+WbNmuHnzJnJzc3Hx4kV4e3vD2toaenp68PDwAADcu3cPAHD9+nU0atRIpr2CiaILFy4gPDwcUqlUfHl6eiIvLw937tzB9OnTZbbdu3cPiYmJyM7Ohqurq9iOuro6GjdujGvXrsm0//6aaubm5gAgN+01n6+vL27duoUzZ84AAFavXg0fHx/o6uri+PHjMnFs2LAB9+/fx7Bhw7B+/fpCE3hFxWFqagoAcHJykit7PzY1NTW4uLiI7x0cHGBoaCjXRyIiIiIiIiKquDjCjURv375F+/bt0b59e6xfvx6VK1fGvXv34OnpiaysLACAIAgyybr8svfl5eXB398fQ4cOlTuGlZUVBg4cKDPCzMLCAi9evACAQtsuWKauri7+nL8tLy+v0D5VqVIFnTt3xpo1a1C9enXs3bsX0dHRAAAXFxfExcWJdU1NTREZGYmUlBQ0bNhQLM/NzcWxY8ewePFiZGZmQlVVtcg4ShNbwf4UVUZEREREREREFVOZj3ALCQmBRCKReeVPvwPeJVxCQkJgYWEBbW1teHh44OrVqzJtZGZmIiAgACYmJtDV1UWXLl3w4MGDz92VCiN/tNf77+3s7JCQkICnT59i5syZaNmyJRwcHORGjjk4OMhNtSz4YABnZ2dcvXoVtra2ci8NDQ0YGRnJlKmpqYnbTpw4IbaTnZ2NmJgYODo6flR/f/zxR2zevBkrVqxAjRo1xFF02traMnHo6emhTZs2uHz5MuLi4sSXi4sLvv/+e8TFxYnJtg+Vk5Mjc76uX7+Oly9fwsHB4aPaJSIiIiIiIqLyo8wTbgBQu3ZtPHr0SHxdvnxZ3DZ79mzMmzcPixcvxvnz52FmZoZ27drh1atXYp3hw4djx44d2Lx5M06cOIH09HR8/fXXyM3NLYvulHv379/Hr7/+iuvXr2PTpk1YtGgRhg0bBisrK2hoaGDRokW4ffs2du/ejSlTpsjs6+/vj4SEBAQHB+PGjRvYunUrwsPDAfzfKK3g4GCcPn0agwcPRlxcHG7evIndu3cjICCgyJh0dXXxyy+/IDAwEPv370d8fDx++uknvHnzBn5+fh/VX09PTxgYGGDq1KklPixBT08PderUkXnp6urC2NgYderU+ag4gHcj4AICAnD27FnExsaif//+aNq0KddvIyIiIiIiIvoPKRcJNzU1NZiZmYmvypUrA3g3um3+/PkYO3Ysvv32W9SpUwcRERF48+YNNm7cCABITU3FqlWrEBoairZt26JBgwZYv349Ll++jMOHD5dlt8qtvn37IiMjA40bN8bgwYMREBCAn3/+GZUrV0Z4eDj++OMP1KpVCzNnzsTcuXNl9q1WrRr+/PNPbN++HXXr1sWyZcvEp5RqamoCeLe22dGjR3Hz5k20bNkSDRo0wPjx48X11ooyc+ZMdOvWDX369IGzszNu3bqFAwcOoFKlSh/VXxUVFfj6+iI3Nxd9+/b9qLY+lo6ODoKDg9G7d280a9YM2tra2Lx5c5nGRERERERERETKJREKLsD1mYWEhGDOnDkwMDCApqYmmjRpgunTp6N69eq4ffs2atSogdjYWDRo0EDcx9vbG4aGhoiIiMCRI0fQpk0bPH/+XCYxU69ePXTt2hWTJk364NjS0tJgYGCA1NRU6Ovry2zLyMgA8G5aYkXi4eGB+vXrY/78+Uprc9q0aVi+fDnu37+vtDaV7aeffsLjx4+xe/fusg6FlKyi3otERERERF8qpwinkispaOuMHKW255jAB9uRvOLyRAWV+UMTmjRpgrVr16JmzZp4/Pgxpk6diubNm+Pq1atITk4G8H9Pe8xnamqKu3fvAgCSk5OhoaEhNwrK1NRU3L+08qe05ktPT/+QLv3nLV26FI0aNYKxsTFOnjyJOXPmYMiQIWUdVqFSU1Nx/vx5bNiwAbt27SrrcIiIiIiIiIjoC1DmCbeOHTuKPzs5OaFZs2aoUaMGIiIi0LRpUwCle3JlQaWpU9CKFSs+akTcl+LmzZuYOnUqnj9/DisrK4wcORJjxowp67AK5e3tjXPnzsHf3x/t2rUr63CIiIiIiIiI6AtQ5gm3gnR1deHk5ISbN2+ia9euAN6NYnt//a+UlBRx1JuZmRmysrLw4sULmVFuKSkpaN68uULH9vf3R5cuXcT36enpcHd3/4jelD/R0dEf3UZYWBjCwsI+PpjPQBn9JSIiIiIiIiJSRLl4aML7MjMzce3aNZibm6NatWowMzPDoUOHxO1ZWVk4evSomExr2LAh1NXVZeo8evQIV65cUTjhZm5uDmdnZ/FVv359pfSJiIiIiIiIiIi+HGU+wm3UqFHo3LkzrKyskJKSgqlTpyItLQ39+vWDRCLB8OHDMX36dNjZ2cHOzg7Tp0+Hjo4OevfuDQAwMDCAn58fRo4cCWNjYxgZGWHUqFFwcnJC27Zty7h3RERERERERET0pSnzhNuDBw/Qq1cvPH36FJUrV0bTpk1x5swZWFtbAwCCgoKQkZGBQYMG4cWLF2jSpAkOHjwIPT09sY2wsDCoqanBx8cHGRkZaNOmDcLDw6GqqlpW3SIiIiIiIiIioi+URBAEoayDKK+Ke9xrRkYGAEBbW7ssQiOi/4/3IhERERFRxeIU4aT0NrfOyFFqe44J15TaHv03FJcnKqjcreFGRERERERERERUkTHhRkREREREREREpERMuNF/SkhISLl9umx4eDgMDQ3LOgwiIiIiIiIi+sTK/KEJ/zXXHBw/6/E4r1z5cnJyEBISgg0bNiA5ORnm5ubw9fXFuHHjoKLCHDURERERERERFY8JN6ICZs2aheXLlyMiIgK1a9dGTEwM+vfvDwMDAwwbNqyswyMiIiIiIiKico7Ddb4wHh4eGDJkCIYMGQJDQ0MYGxtj3LhxyH9Y7fr16+Hi4gI9PT2YmZmhd+/eSElJkWlj9+7dsLOzg7a2Nlq1aoWIiAhIJBK8fPlSrHPq1Cm4ublBW1sblpaWGDp0KF6/fl1sbJmZmRg6dCiqVKkCLS0ttGjRAufPnxe3R0dHQyKRIDIyEi4uLtDR0UHz5s1x/fr1Qts7duwY1NXVkZycLFM+cuRIuLm5FRnH6dOn4e3tDS8vL9jY2KB79+5o3749YmJixDo2NjaYOnUq+vbtC6lUCmtra+zatQtPnjyBt7c3pFIpnJycZPbJt3PnTtSsWRNaWlpo164d7t+/X+x5ISIiIiIiIqKKhQm3L1BERATU1NRw9uxZLFy4EGFhYfjf//4HAMjKysKUKVNw6dIl7Ny5E3fu3IGvr6+4b1JSErp3746uXbsiLi4O/v7+GDt2rEz7ly9fhqenJ7799lv8888/2LJlC06cOIEhQ4YUG1dQUBC2bduGiIgIxMbGwtbWFp6ennj+/LlMvbFjxyI0NBQxMTFQU1PDgAEDCm3Pzc0N1atXx7p168SynJwcrF+/Hv379y8yjhYtWiAyMhI3btwAAFy6dAknTpxAp06dZOqFhYXB1dUVFy9ehJeXF/r06YO+ffvihx9+EOPv27evmMwEgDdv3mDatGmIiIjAyZMnkZaWhp49exZ7XoiIiIiIiIioYuGU0i+QpaUlwsLCIJFIYG9vj8uXLyMsLAw//fSTTPKqevXqWLhwIRo3boz09HRIpVIsX74c9vb2mDNnDgDA3t4eV65cwbRp08T95syZg969e2P48OEAADs7OyxcuBDu7u5YtmwZtLS05GJ6/fo1li1bhvDwcHTs2BEAsHLlShw6dAirVq1CYGCgWHfatGlwd3cHAIwePRpeXl54+/Ztoe36+flhzZo14v579uzBmzdv4OPjU+T5CQ4ORmpqKhwcHKCqqorc3FxMmzYNvXr1kqnXqVMn+Pv7AwAmTJiAZcuWoVGjRvjuu+/Edpo1a4bHjx/DzMwMAJCdnY3FixejSZMmAN4lPx0dHXHu3Dk0bty4yJiIiIiIiIiIqOLgCLcvUNOmTSGRSMT3zZo1w82bN5Gbm4uLFy/C29sb1tbW0NPTg4eHBwDg3r17AIDr16+jUaNGMu0VTBRduHAB4eHhkEql4svT0xN5eXm4c+cOpk+fLrPt3r17SExMRHZ2NlxdXcV21NXV0bhxY1y7JvtgiLp164o/m5ubA4DctNd8vr6+uHXrFs6cOQMAWL16NXx8fKCrq4vjx4/LxLFhwwYAwJYtW7B+/Xps3LgRsbGxiIiIwNy5cxEREVFkHKampgAAJycnubL3Y1NTU4OLi4v43sHBAYaGhnJ9JCIiIiIiIqKKiyPcSPT27Vu0b98e7du3x/r161G5cmXcu3cPnp6eyMrKAgAIgiCTrMsve19eXh78/f0xdOhQuWNYWVlh4MCBMiPMLCws8OLFCwAotO2CZerq6uLP+dvy8vIK7VOVKlXQuXNnrFmzBtWrV8fevXsRHR0NAHBxcUFcXJxYNz9BFhgYiNGjR4tTPZ2cnHD37l3MmDED/fr1KzaO0sRWsD9FlRERERERERFRxcSE2xcof7TX++/t7OyQkJCAp0+fYubMmbC0tAQAuUX/HRwcsHfvXpmygnWcnZ1x9epV2NraFnp8IyMjGBkZyZTZ2tpCQ0MDJ06cQO/evQG8m34ZExMjTk39UD/++CN69uyJqlWrokaNGuIoOm1t7UJjfPPmDVRUZAd/qqqqFpnUU0ROTg5iYmLEUYHXr1/Hy5cv4eDg8NFtExEREREREVH5wCmlX6D79+/j119/xfXr17Fp0yYsWrQIw4YNg5WVFTQ0NLBo0SLcvn0bu3fvxpQpU2T29ff3R0JCAoKDg3Hjxg1s3boV4eHhAP5vlFZwcDBOnz6NwYMHIy4uDjdv3sTu3bsREBBQZEy6urr45ZdfEBgYiP379yM+Ph4//fQT3rx5Az8/v4/qr6enJwwMDDB16tRiH5aQr3Pnzpg2bRr27NmDpKQk7NixA/PmzcM333zzUXEA70bABQQE4OzZs4iNjUX//v3RtGlTrt9GRERERERE9B/ChNsXqG/fvsjIyEDjxo0xePBgBAQE4Oeff0blypURHh6OP/74A7Vq1cLMmTMxd+5cmX2rVauGP//8E9u3b0fdunWxbNky8SmlmpqaAN6tbXb06FHcvHkTLVu2RIMGDTB+/HhxvbWizJw5E926dUOfPn3g7OyMW7du4cCBA6hUqdJH9VdFRQW+vr7Izc1F3759S6y/aNEidO/eHYMGDYKjoyNGjRoFf39/ueTjh9DR0UFwcDB69+6NZs2aQVtbG5s3b/7odomIiIiIiIio/JAIBRfgIlFaWhoMDAyQmpoKfX19mW0ZGRkA3k1LrEg8PDxQv359zJ8/X2ltTps2DcuXL8f9+/eV1qay/fTTT3j8+DF2795d1qGQklXUe5GIiIiI6EvlFOFUciUFbZ2Ro9T2HBP4YDuSV1yeqCCu4UYKW7p0KRo1agRjY2OcPHkSc+bMwZAhQ8o6rEKlpqbi/Pnz2LBhA3bt2lXW4RARERERERHRF4AJN1LYzZs3MXXqVDx//hxWVlYYOXIkxowZU9ZhFcrb2xvnzp2Dv78/2rVrV9bhEBEREREREdEXgFNKi/FfnFJK9F/De5GIiIiIqGLhlFKqqBSZUsqHJhARERERERERESkRE25ERERERERERERKxIQbERERERERERGREjHhRkREREREREREpERMuBERERERERERESkRE25ERERERERERERKxIQbfZSkpCRIJBLExcV98mPZ2Nhg/vz5Sm3Tw8MDw4cPV2qbpeXr64uuXbuWybGJiIiIiIiI6NNRK+sA/muWDDzyWY83eHnrz3q8L5kgCOjUqRP279+PHTt2MFlGRERERERERIXiCLcvXFZWVlmHUGHMnz8fEomkrMMgIiIiIiIionKOCbcvjIeHB4YMGYJff/0VJiYmaNeuHeLj49GpUydIpVKYmpqiT58+ePr0qbhPXl4eZs2aBVtbW2hqasLKygrTpk2Taff27dto1aoVdHR0UK9ePZw+fVrcFhISgvr168vUnz9/PmxsbMT3+dMr586dC3NzcxgbG2Pw4MHIzs4usi9r1qyBgYEBDh06BAAl9uP169fo27cvpFIpzM3NERoaWurzdunSJcybNw+rV6+W25Y/rXbr1q1o2bIltLW10ahRI9y4cQPnz5+Hi4sLpFIpOnTogCdPnsjtP2nSJFSpUgX6+vrw9/dnEpSIiIiIiIiogmPC7QsUEREBNTU1nDx5EjNnzoS7uzvq16+PmJgY7N+/H48fP4aPj49Yf8yYMZg1axbGjx+P+Ph4bNy4EaampjJtjh07FqNGjUJcXBxq1qyJXr16IScnR6G4oqKikJiYiKioKERERCA8PBzh4eGF1p07dy5GjRqFAwcOoF27dnj06FGJ/QgMDERUVBR27NiBgwcPIjo6GhcuXCgxrjdv3qBXr15YvHgxzMzMiqw3ceJEjBs3DrGxsVBTU0OvXr0QFBSEBQsW4Pjx40hMTMSECRNk9omMjMS1a9cQFRWFTZs2YceOHZg0aVLpThgRERERERERlUtcw+0LZGtri9mzZwMAJkyYAGdnZ0yfPl3cvnr1alhaWuLGjRswNzfHggULsHjxYvTr1w8AUKNGDbRo0UKmzVGjRsHLywvAuxFbtWvXxq1bt+Dg4FDquCpVqoTFixdDVVUVDg4O8PLyQmRkJH766SeZemPGjEFERASio6Ph5OQEAFi2bFmx/bCwsMCqVauwdu1atGvXDsC7xGPVqlVLjGvEiBFo3rw5vL29i603atQoeHp6AgCGDRuGXr16ITIyEq6urgAAPz8/uQSihoYGVq9eDR0dHdSuXRuTJ09GYGAgpkyZAhUV5sOJiIiIiIiIKiIm3L5ALi4u4s8XLlxAVFQUpFKpXL3ExES8fPkSmZmZaNOmTbFt1q1bV/zZ3NwcAJCSkqJQwq127dpQVVWVaefy5csydUJDQ/H69WvExMSgevXqpe5HRkYGsrKy0KxZM7HcyMgI9vb24vvp06fLJOzi4+MRFxeHI0eO4OLFiyXG//45yB8BmJ8QzC9LSUmR2adevXrQ0dER3zdr1gzp6em4f/8+rK2tSzwmEREREREREZU/HELzBdLV1RV/zsvLQ+fOnREXFyfzunnzJtzc3KCtrV2qNtXV1cWf8x8skJeXBwBQUVGBIAgy9Qtbm+39NvLbyW8jX8uWLZGbm4utW7fKlJfUj4LHL8zAgQNl9rWwsMCRI0eQmJgIQ0NDqKmpQU3tXY66W7du8PDwKPEcFCwr2J+i8OEMRERERERERBUXR7h94ZydnbFt2zbY2NiIyaT32dnZQVtbG5GRkfjxxx8/6BiVK1dGcnIyBEEQE0lxcXEf1Fbjxo0REBAAT09PqKqqIjAwsFT9sLW1hbq6Os6cOQMrKysAwIsXL3Djxg24u7sDeDfizcjISGa/0aNHy/XbyckJYWFh6Ny58wf14X2XLl1CRkaGmNg8c+YMpFJpqaa6EhEREREREVH5xBFuX7jBgwfj+fPn6NWrF86dO4fbt2/j4MGDGDBgAHJzc6GlpYXg4GAEBQVh7dq1SExMxJkzZ7Bq1apSH8PDwwNPnjzB7NmzkZiYiCVLlmDfvn0fHHOzZs2wb98+TJ48GWFhYaXqh1QqhZ+fHwIDAxEZGYkrV67A19e3xHXSzMzMUKdOHZkXAFhZWaFatWof3Id8WVlZ8PPzQ3x8PPbt24eJEydiyJAhXL+NiIiIiIiIqALjX/VfOAsLC5w8eRK5ubnw9PREnTp1MGzYMBgYGIhJn/Hjx2PkyJGYMGECHB0d0aNHD7m1yIrj6OiIpUuXYsmSJahXrx7OnTuHUaNGfVTcrq6u2LNnD8aPH4+FCxeWqh9z5syBm5sbunTpgrZt26JFixZo2LDhR8Xxsdq0aQM7Ozu4ubnBx8cHnTt3RkhISJnGREREREREREQfRyKUZnGrL1RaWhoMDAyQmpoKfX19mW0ZGRkAUOo1zojo0+C9SERERERUsThFOJVcSUFbZ+QotT3HhGtKbY/+G4rLExXEEW5ERERERERERERKxIQbERERERERERGREjHhRkREREREREREpERKSbglJSXh8OHDeP78uTKaIyIiIiIiIiIiqrAUTriNHDkSw4cPF9/v2LED9vb2aN++Pezs7HDhwgVlxkdERERERERERFShKJxw27FjB1xcXMT3v/32Gzp16oR//vkHjRs3xrhx45QaIBERERERERERUUWicMLt0aNHsLKyAgAkJibi+vXrGDduHOrUqYOhQ4ciJiZG6UESERERERERERFVFAon3AwMDJCSkgIAOHToEIyMjNCwYUMAgIaGBjIyMpQbIRERERERERERUQWipugObm5umDBhAh4/foy5c+eia9eu4rbr16+Lo9+IiIiIiIiIiIi+RAqPcAsLC4OZmRlGjx4NKysrTJs2Tdy2bt06tGzZUqkBUvmWlJQEiUSCuLi4T34sGxsbzJ8/X6ltenh4yDwE5HPy9fWVSVgTERERERER0X+DwiPcvvrqKxw5cqTQbQcOHICWltZHB1WRhfb4+rMeb+SWvz/r8b5EycnJCAwMxKFDh/Dq1SvY29vjt99+Q/fu3cs6NCIiIiIiIiIqhxQe4VYcfX19aGhoKLNJ+sSysrLKOoRyr0+fPrh+/Tp2796Ny5cv49tvv0WPHj1w8eLFsg6NiIiIiIiIiMqhUiXcWrdurdCLyi8PDw8MGTIEv/76K0xMTNCuXTvEx8ejU6dOkEqlMDU1RZ8+ffD06VNxn7y8PMyaNQu2trbQ1NSUm0oMALdv30arVq2go6ODevXq4fTp0+K2kJAQ1K9fX6b+/PnzYWNjI77Pn145d+5cmJubw9jYGIMHD0Z2dnaRfVmzZg0MDAxw6NAhACixH69fv0bfvn0hlUphbm6O0NDQUp2z06dPIyAgAI0bN0b16tUxbtw4GBoaIjY2FsD/TavdunUrWrZsCW1tbTRq1Ag3btzA+fPn4eLiAqlUig4dOuDJkydy7U+aNAlVqlSBvr4+/P39mQQlIiIiIiIiquBKlXDT0dGBrq6u+Lp+/TqOHj2KZ8+eQU1NDc+ePcPRo0dx48YNSKXSTx0zfaSIiAioqanh5MmTmDlzJtzd3VG/fn3ExMRg//79ePz4MXx8fMT6Y8aMwaxZszB+/HjEx8dj48aNMDU1lWlz7NixGDVqFOLi4lCzZk306tULOTk5CsUVFRWFxMREREVFISIiAuHh4QgPDy+07ty5czFq1CgcOHAA7dq1w6NHj0rsR2BgIKKiorBjxw4cPHgQ0dHRuHDhQolxtWjRAlu2bMHz58+Rl5eHzZs3IzMzEx4eHjL1Jk6ciHHjxiE2NhZqamro1asXgoKCsGDBAhw/fhyJiYmYMGGCzD6RkZG4du0aoqKisGnTJuzYsQOTJk1S6LwRERERERERUflSqoTb33//jb/++gt//fUXfHx8oKenh2vXruHSpUs4ePAgLl26hPj4eOjp6aFbt24fHMyMGTMgkUhkFrEXBAEhISGwsLCAtrY2PDw8cPXqVZn9MjMzERAQABMTE+jq6qJLly548ODBB8fxX2dra4vZs2fD3t4e+/btg7OzM6ZPnw4HBwc0aNAAq1evRlRUFG7cuIFXr15hwYIFmD17Nvr164caNWqgRYsW+PHHH2XaHDVqFLy8vFCzZk1MmjQJd+/exa1btxSKq1KlSli8eDEcHBzw9ddfw8vLC5GRkXL1xowZg3nz5iE6OhpNmzYFACxbtqzYfqSnp2PVqlWYO3cu2rVrBycnJ0RERCA3N7fEuLZs2YKcnBwYGxtDU1MT/v7+2LFjB2rUqCF3Djw9PeHo6Ihhw4YhNjYW48ePh6urKxo0aAA/Pz9ERUXJ7KOhoYHVq1ejdu3a8PLywuTJk7Fw4ULk5eUpdO6IiIiIiIiIqPxQeA23yZMnY9q0aahZs6ZMub29PSZPnowpU6Z8UCDnz5/H77//jrp168qUz549G/PmzcPixYtx/vx5mJmZoV27dnj16pVYZ/jw4dixYwc2b96MEydOID09HV9//XWpkilfIhcXF/HnCxcuICoqClKpVHw5ODgAABITE3Ht2jVkZmaiTZs2xbb5/udmbm4OAEhJSVEortq1a0NVVVWmnYJthIaGYsWKFThx4gScnJxK3Y/ExERkZWWhWbNm4j5GRkawt7cX30+fPl1m/3v37gEAxo0bhxcvXuDw4cOIiYnBr7/+iu+++w6XL18u8hzkjwB8P0ZTU1O5/tSrVw86Ojri+2bNmiE9PR33798v5VkjIiIiIiIiovJG4aeUPnjwABKJpNBtKioqePjwocJBpKen4/vvv8fKlSsxdepUsVwQBMyfPx9jx47Ft99+C+DddEhTU1Ns3LgR/v7+SE1NxapVq7Bu3Tq0bdsWALB+/XpYWlri8OHD8PT0VDie/zpdXV3x57y8PHTu3BmzZs2Sq2dubo7bt2+Xqk11dXXx5/zrI3+UloqKCgRBkKlf2Nps77eR307BkV4tW7bEnj17sHXrVowePbrU/bh582aJfRg4cKDMFFQLCwskJiZi8eLFuHLlCmrXrg3gXZLs+PHjWLJkCZYvX15o/PnnoGBZaUeuFXWPEREREREREVH5p/AIt8aNG2PcuHFyiZjExESMGzcOTZo0UTiIwYMHw8vLS0yY5btz5w6Sk5PRvn17sUxTUxPu7u44deoUgHcjm7Kzs2XqWFhYoE6dOmKd0nr06BFiY2PFV1xcnMJ9qWicnZ1x9epV2NjYwNbWVualq6sLOzs7aGtrFzq1s7QqV66M5ORkmaTbh57bxo0bY//+/Zg+fTrmzJlT6n7Y2tpCXV0dZ86cEfd58eIFbty4Ib43MjKS2U9NTQ1v3rwB8C5p+D5VVVWlTPu8dOkSMjIyxPdnzpyBVCpF1apVP7ptIiIiIiIiIiobCifcVqxYgVevXsHe3h4NGjSAp6cnGjRoAAcHB7x69QrLli1TqL3NmzcjNjYWM2bMkNuWnJwMAHIL9JuamorbkpOToaGhgUqVKhVZp7RWrFiBhg0bii93d3eF9q+IBg8ejOfPn6NXr144d+4cbt++jYMHD2LAgAHIzc2FlpYWgoODERQUhLVr1yIxMRFnzpzBqlWrSn0MDw8PPHnyBLNnz0ZiYiKWLFmCffv2fXDMzZo1w759+zB58mSEhYWVqh9SqRR+fn4IDAxEZGQkrly5Al9fX7lEWkEODg6wtbWFv78/zp07h8TERISGhuLQoUPo2rXrB/chX1ZWFvz8/BAfH499+/Zh4sSJGDJkSIlxEREREREREVH5pfCUUgcHB9y6dQtr1qzBuXPn8OjRIzRo0AD+/v7w9fWFlpZWqdu6f/8+hg0bhoMHDxa7X8HpdYIglDjlrjR1CvL390eXLl3E9+np6f/5pJuFhQVOnjyJ4OBgeHp6IjMzE9bW1ujQoYOY9Bk/fjzU1NQwYcIE/PvvvzA3N8fAgQNLfQxHR0csXboU06dPx5QpU9CtWzeMGjUKv//++wfH7erqij179qBTp05QVVXF0KFDS+zHnDlzkJ6eji5dukBPTw8jR45EampqscdRV1fH3r17MXr0aHTu3Bnp6emwtbVFREQEOnXq9MHx52vTpg3s7Ozg5uaGzMxM9OzZEyEhIR/dLhERERERERGVHYlQcHGtz2jnzp345ptvZBbKz83NhUQigYqKCq5fvw5bW1vExsaiQYMGYh1vb28YGhoiIiICR44cQZs2bfD8+XOZUW716tVD165dMWnSpA+OLy0tDQYGBkhNTYW+vr7MtvxpgNra2h/cPhF9PN6LREREREQVi1OEU8mVFLR1Ro5S23NMuKbU9ui/obg8UUEfNW8tJSUF9+7dk3uVVps2bXD58mXExcWJLxcXF3z//feIi4tD9erVYWZmhkOHDon7ZGVl4ejRo2jevDkAoGHDhlBXV5ep8+jRI1y5ckWsQ0RERERERERE9LkoPKX02bNnCAgIwPbt2+WeNJk/jTM3N7dUbenp6aFOnToyZbq6ujA2NhbLhw8fjunTp8POzg52dnaYPn06dHR00Lt3bwCAgYEB/Pz8MHLkSBgbG8PIyAijRo2Ck5OT3EMYiIiIiIiIiIiIPjWFE24//vgjoqOjERgYiFq1akFDQ+NTxCUKCgpCRkYGBg0ahBcvXqBJkyY4ePAg9PT0xDphYWFQU1ODj48PMjIy0KZNG4SHh8tMVSUiIiIiIiIiIvocFF7DzdDQEAsXLkTfvn0/VUzlBtdwIyr/eC8SEREREVUsXMONKqpPuoaboaEhTExMPjg4IiIiIiIiIiKi/zKFE26BgYFYtGgRcnKUmz0mIiIiIiIiIiL6L1B4DbeEhATEx8ejRo0acHd3h6Ghocx2iUSCBQsWKCs+IiIiIiIiIiKiCkXhhNvff/8NFZV3A+OOHz8ut50JNyIiIiIiIiIi+pIpnHC7c+fOp4iDiIiIiIiIiIjoP0HhNdyI3peUlASJRIK4uLhPfiwbGxvMnz9fqW16eHhg+PDhSm2ztHx9fdG1a1eF9/sU56EkHxqrosLDw+WmqRMRERERERFVNAqPcAOAGzduYObMmTh+/DieP38OIyMjuLm5ITg4GDVr1lR2jBXKg9Hy02w/paozW37W432JkpOTERgYiEOHDuHVq1ewt7fHb7/9hu7du5d1aERERERERERUDimccLtw4QI8PDygqamJzp07w8zMDMnJydi9eze2bt2Ko0ePwtnZ+VPESp9AVlYWNDQ0yjqMcq1Pnz5ITU3F7t27YWJigo0bN6JHjx6IiYlBgwYNyjq8j8ZrgIiIiIiIiEi5FJ5SGhQUhHr16uHu3btYs2YNZsyYgTVr1iApKQn16tVDUFDQp4iTlMTDwwNDhgzBr7/+ChMTE7Rr1w7x8fHo1KkTpFIpTE1N0adPHzx9+lTcJy8vD7NmzYKtrS00NTVhZWWFadOmybR7+/ZttGrVCjo6OqhXrx5Onz4tbgsJCUH9+vVl6s+fPx82Njbi+/wpi3PnzoW5uTmMjY0xePBgZGdnF9mXNWvWwMDAAIcOHQKAEvvx+vVr9O3bF1KpFObm5ggNDS3VOTt9+jQCAgLQuHFjVK9eHePGjYOhoSFiY2MB/N+02q1bt6Jly5bQ1tZGo0aNcOPGDZw/fx4uLi6QSqXo0KEDnjx5Itf+pEmTUKVKFejr68Pf3x9ZWVmliutDz0Nh1wAAXL16FV5eXtDX14eenh5atmyJxMREmWMV9/lIJBLs3LlTpr6hoSHCw8NlztP27duLvFYKevbsGRo3bowuXbrg7du3Cp0XIiIiIiIiorKicMLtzJkzCA4Ohq6urky5rq4ugoKCcObMGaUFR59GREQE1NTUcPLkScycORPu7u6oX78+YmJisH//fjx+/Bg+Pj5i/TFjxmDWrFkYP3484uPjsXHjRpiamsq0OXbsWIwaNQpxcXGoWbMmevXqhZycHIXiioqKQmJiIqKiohAREYHw8HAxWVPQ3LlzMWrUKBw4cADt2rXDo0ePSuxHYGAgoqKisGPHDhw8eBDR0dG4cOFCiXG1aNECW7ZswfPnz5GXl4fNmzcjMzMTHh4eMvUmTpyIcePGITY2FmpqaujVqxeCgoKwYMECHD9+HImJiZgwYYLMPpGRkbh27RqioqKwadMm7NixA5MmTSr1OfuQ8wDIXgMrVqzAw4cP4ebmBi0tLRw5cgQXLlzAgAEDZD5DRT6f4pT2Wnnw4AFatmwJBwcHbN++HVpaWgofi4iIiIiIiKgsKDylVENDA69fvy502+vXr6Gurv7RQdGnZWtri9mzZwMAJkyYAGdnZ0yfPl3cvnr1alhaWuLGjRswNzfHggULsHjxYvTr1w8AUKNGDbRo0UKmzVGjRsHLywvAuxFbtWvXxq1bt+Dg4FDquCpVqoTFixdDVVUVDg4O8PLyQmRkJH766SeZemPGjEFERASio6Ph5OQEAFi2bFmx/bCwsMCqVauwdu1acURXREQEqlatWmJcW7ZsQY8ePWBsbAw1NTXo6Ohgx44dqFGjhtw58PT0BAAMGzYMvXr1QmRkJFxdXQEAfn5+cgkqDQ0NrF69Gjo6OqhduzYmT56MwMBATJkyBSoqxefDP+Q85K+x+P41AAC//fYbDAwMsHnzZvEeLrgeY2k/n5KU5lq5ceMG2rVrB29vbyxYsAASiUShYxARERERERGVJYUTbm3btsVvv/2G+vXry/yBnJCQgPHjx6N9+/ZKDZCUz8XFRfz5woULiIqKglQqlauXmJiIly9fIjMzE23atCm2zbp164o/m5ubAwBSUlIUSrjVrl0bqqqqMu1cvnxZpk5oaChev36NmJgYVK9evdT9yMjIQFZWFpo1ayaWGxkZwd7eXnw/ffp0mURVfHw8rKysMG7cOLx48QKHDx+GiYkJdu7cie+++w7Hjx8XE10Fz0H+CMD3t5uamiIlJUUmtnr16kFHR0d836xZM6Snp+P+/fs4ceIE/P39xW379u1Dy5YtP+o85CfR3r8GACAuLg4tW7YsNmFems+nNEq6VjIyMtCiRQv06tULCxYsULh9IiIiIiIiorKmcMJt3rx5cHNzQ506dVC7dm2YmZnh8ePHuHLlCqysrEq9LhaVnfenA+fl5aFz586YNWuWXD1zc3Pcvn27VG2+n6jJH42Ul5cHAFBRUYEgCDL1C1ubrWCyRyKRiG3ka9myJfbs2YOtW7di9OjRpe7HzZs3S+zDwIEDZaZeWlhYIDExEYsXL8aVK1dQu3ZtAO+SZMePH8eSJUuwfPnyQuPPPwcFywr2pygSiQRdunRBkyZNxLKvvvpK/PlDz0O+glPCtbW1S4yppM9HIpEo/DkXvFYAQFNTE23btsWePXsQGBhYqlGIREREREREROWJwgk3S0tLXL58GatXr8aJEyfw4sUL2Nvbw8/PD/379y90ZA2VX87Ozti2bRtsbGygpiZ/OdjZ2UFbWxuRkZH48ccfP+gYlStXRnJyMgRBEBMscXFxH9RW48aNERAQAE9PT6iqqiIwMLBU/bC1tYW6ujrOnDkDKysrAMCLFy9w48YNuLu7A3g34s3IyEhmvzdv3gCA3PROVVXVUifPinPp0iVkZGSICa8zZ85AKpWiatWqUFFRgZ6eXqH7feh5KErdunURERGB7OzsD54WXrlyZTx69Eh8f/PmTfH8KUJFRQXr1q1D79690bp1a0RHR8PCwuKDYiIiIiIiIiIqCwo/NAEApFIphg4diq1bt+LQoUPYsmULAgICmGyrgAYPHoznz5+jV69eOHfuHG7fvo2DBw9iwIAByM3NhZaWFoKDgxEUFIS1a9ciMTERZ86cwapVq0p9DA8PDzx58gSzZ89GYmIilixZgn379n1wzM2aNcO+ffswefJkhIWFlaofUqkUfn5+CAwMRGRkJK5cuQJfX98S10lzcHCAra0t/P39ce7cOSQmJiI0NBSHDh1C165dP7gP+bKysuDn54f4+Hjs27cPEydOxJAhQ0qM60PPQ1GGDBmCtLQ09OzZEzExMbh58ybWrVuH69evl7ovrVu3xuLFixEbG4uYmBgMHDjwg5N3qqqq2LBhA+rVq4fWrVsjOTn5g9ohIiIiIiIiKgsKJ9wuXbqEvXv3Frpt7969+Oeffz46KPp8LCwscPLkSeTm5sLT0xN16tTBsGHDYGBgICZ9xo8fj5EjR2LChAlwdHREjx495NYiK46joyOWLl2KJUuWoF69ejh37hxGjRr1UXG7urpiz549GD9+PBYuXFiqfsyZMwdubm7o0qUL2rZtixYtWqBhw4bFHkddXR179+5F5cqV0blzZ9StWxdr165FREQEOnXq9FF9AIA2bdrAzs4Obm5u8PHxQefOnRESElLq/T/kPBTG2NgYR44cQXp6Otzd3dGwYUOsXLlSoYRZaGgoLC0t4ebmht69e2PUqFEy69MpSk1NDZs2bULt2rXRunVrha45IiIiIiIiorIkEQouulSC1q1bw9XVFVOmTJHbFhISgpMnT+LQoUNKC7AspaWlwcDAAKmpqdDX15fZlpGRAaB0a18R0afDe5GIiIiIqGJxinAquZKCts7IUWp7jgnXlNoe/TcUlycqSOERbnFxcXB1dS10W7NmzRAbG6tok0RERERERERERP8ZCifcMjMzkZWVVeS2t2/ffnRQREREREREREREFZXCCbcGDRpg7dq1hW5bu3Yt6tWr99FBERERERERERERVVRqiu4wZswYdOnSBV5eXujfvz8sLCzw77//Ys2aNThw4AB27dr1KeIkIiIiIiIiIiKqEBROuHl5eWHjxo0IDAyEj48PJBIJBEFA1apVsXHjRnh5eX2KOImIiIiIiIiIiCoEhRNuANCjRw/06NED169fx7Nnz2BsbAx7e3tlx1auqaioICdHuU9BISLF5ebmQkNDo6zDICIiIiIiIhJ9UMIt35eWZHufuro6Xr9+DV1d3bIOheiLJQgCMjIyeB8SERERERFRufJBCberV69iypQpOH/+PB48eIDTp0/D2dkZY8eORYsWLdCxY0dlx1nuqKioQF1dHampqRxdQ1QGcnNzkZGRgUqVKkEikZR1OEREREREREQihZ9SeujQITRo0ABJSUno2bMnsrOzxW3q6upYunSpUgMsz/T09KCjo1PWYRB9kTQ0NGBiYgI1tY8aqEtERERERESkdB/0lNKePXti7dq1yMnJwYwZM8RtDRo0wP/+9z+lBljeqaurQ11dvazDICIiIiIiIiKickLhEW5XrlxBnz59AEBuGpehoSGePn2qnMiIiIiIiIiIiIgqIIVHuBkZGeHff/8tdNuNGzdgbm7+0UEREREREZHyOUU4Kb3Ny/0uK71NIiKiik7hEW5du3bFxIkTcf36dbFMIpEgOTkZc+fORbdu3ZQaIBERERERERERUUWi8Ai3GTNm4Pz586hbty6cnN79C9mAAQNw+/Zt2NvbIyQkRNkxEhERERFROXXNwVHpbTomXFN6m0RERJ+Twgk3AwMDnDp1CuvXr8ehQ4dgZGQEIyMjDB48GH379oWGhsaniJOIiIiIiIiIiKhCUDjhBrx7Mmf//v3Rv39/ZcdDRERERERERERUoSmccHv16hUyMzNhYmIilm3YsAHXrl1D69at0bp1a6UGSEREREREREREVJEo/NCEH374AePHjxffT548GX369MHy5cvRrl07bN26VakBEhERERERERERVSQKJ9zOnz+P9u3bAwAEQcCSJUvw22+/4enTpxg2bBjmzJmj9CCJiIiIiIiIiIgqCoUTbs+fPxenk164cAFPnz7FgAEDAABdunTB9evXlRshERERERERERFRBaLwGm5mZmaIj49Hy5YtsWfPHtjY2KB69eoAgNevX0NN7YOew0BEREREREREH8Fm9B6lt5k000vpbRJ9CRTOjn333XcICgrC4cOHsXfvXgQHB4vbLl68CDs7O6UGSEREREREREREVJEonHCbMWMG9PT0cP78eYwaNQpjxowRt124cAE+Pj5KDZCIiIiIiIiIiKgiUTjhpqamhgkTJhS6bceOHR8dEBERERERERERUUWm8EMTiIiIiIiIiIiIqGhMuBERERERERERESkRE25ERERERERERERKxIQbERERERERERGREjHhRkREREREREREpEQKP6U037///osHDx7g7du3ctvc3Nw+KigiIiIiIiIiIqKKSuGE2+3bt9GnTx+cOXMGACAIAgDg/7V372FV1fkexz9bFAREAlTAvB7BslBr0PDW4IXw0dTMM6MdzcmyxsbCvKWnyCesxMt4HWu8DQLlQahT5tjFk5bXzDSSSbM8Vl4LpBQVDAHhd/7wYR23oLF1ISDv1/PsJ9dav/3b32XxDT781loOh0PGGDkcDhUXF9tbJQAAAAAAAFBDuHxJ6RNPPKGjR49q+fLl2r59u3bv3q3du3dr165d1j9dsWTJEnXo0EENGzZUw4YN1bVrV3344YfWcWOM4uLi1LRpU3l6eqpnz576+uuvneYoKChQTEyMGjVqJG9vbw0aNEjHjx939dQAAAAAAACA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WKiUlBQ99thj13Xul2vcuLFuueUWffvtt077W7RooZCQEKcfWkv5+vpaPah79+5KSEjQwYMHlZaW5jTu1KlT9BjgKmpjLzLGaOXKlRo5cqTc3d2t/fQilIfADdXC3Xff7fSD7KVmzZqlRx55RH369LHGBAYG6tZbb9UPP/xgNanSV+vWra/4OT4+PmrVqpU+/vjja661cePGys3N1blz56x9pSs1XNWmTRtt2rRJa9euVUxMzDXXdCXR0dHy9/fX7Nmzr3kONzc3Xbhwwel/Wvv27VO9evXKPAYbqMnoQ9fXhxISEhQeHl7mKYL0IcB+V+pXaWlpeuedd7R582YdO3ZML7/8snXsiy++0IULFzRv3jx16dJFbdu21U8//XTNNXz66adq2bKlYmNj1alTJ4WGhpZ7T8XHH39cGzdu1N///ncVFRVpyJAh1/yZ5alTp46GDh2qVatW6ccff7ymOUpXLl+++mTfvn26++67r7tG4GZVG3vRli1b9N133zndr1aiF6F8XFKKaqFv37567rnnlJOTIz8/vzLH586dq+LiYvXu3VubN2/W7bffrri4OI0bN04NGzZUv379VFBQoC+++EI5OTmaOHHiFT8rLi5OTz75pJo0aaJ+/fopNzdXn376aYV/0IyIiJCXl5eef/55xcTEaNeuXUpKSrrWU1fbtm21adMm9ezZU3Xr1tXChQsr/N5Tp07p6NGj1v+kSleQBAUFKSgoSA0aNNA//vEPDRs2TPfff7/GjRun0NBQ5eXlaf369ZL+v7GXOnnypLKysnThwgXt3btXixYtUq9evZyWZW/btk333ntvhVfqADUBfeja+pAknT17Vm+99ZbmzZtX5hh9CLBfef3q+PHj+stf/qLZs2erR48eSkpK0v33369+/fqpS5cuatOmjS5cuKDFixdr4MCB+vTTT7V06dJrriEkJERHjx5VamqqOnfurPfff19r1qwpM65du3bq0qWLpk6dqscee+yavmZLf6GQl5enn3/+WRkZGXJ3d9cdd9whSYqPj9fmzZsVERGhl156SZ06dZK3t7e++uorffbZZwoLC3Oa79dff1VWVpaki5dxvfLKK6pfv76io6OtMYcPH9aPP/6oqKgol+sFaova1ouki79gjIiIKNNXJHoRylGld5ADLtGlSxezdOlSa7v0ZuU5OTnWvpiYGBMcHGwOHDhgjDHmv/7rv8xdd91l3N3djZ+fn/n9739v3nnnHWPMlR8kYIwxS5cuNbfddpupV6+eCQ4ONjExMdYxSWbNmjVO4319fU1iYqK1vWbNGhMSEmLq169vBgwYYJYvX17mZuUdO3Z0mmPBggWmZcuW1vblN/7dv3+/adKkiZk4caLT+V/tZp6lNxS9/PXiiy86jdu9e7f5wx/+YJo0aWLq1q1rAgICTN++fU1qaqr1eOrSv6/Sl5ubm2nWrJl54oknTHZ2ttN8bdu2NatXr75iXUBNRR9yvQ8ZY8yyZcuMp6enOX369BXH0IcAe13ar0pKSkyfPn1M3759ra8nY4yZMGGCadOmjcnNzTXGGDN//nwTHBxsPD09Td++fc3rr7/u1OPKeyCLMRdvVL5gwYIy+5999lkTEBBgGjRoYIYNG2YWLFhQ7vsTEhKMJLNr165y5778+5bLlfe9zqW9zBhjTp8+bZ577jlz++23Gw8PD+Pp6Wk6dOhgpk2bZk6ePGmNi4yMdJrHz8/PREZGlnloTHx8vOnbt+9V6wJQu3rR6dOnjaenp1m+fPlVx9CLUMphTCXcOAq4Bh988IEmT56sffv2WY+Mrs2SkpI0Y8YM7d+/v8x9mKrS+++/r2effVZfffWV6tZlkSxuLvQhZ/QhoPqqSf1qxowZSk1N1d69e5325+fny9/fXx988IF69epVRdWVVVBQoNDQUK1evVrdu3ev6nKAao1eVHnoRTUf36Wi2ujfv78OHjyoH3/8Uc2bN6/qcqrc+vXrFR8fX61+yJWkc+fOKTExkR9ycVOiDzmjDwHVV03oV3l5efrmm2+0ePFip3s4ldqyZYt69+5drX7AlS7e1D02NpYfcIEKoBdVHnpRzccKNwAAAAC2GzVqlFavXq3BgwcrJSWlzP0aAeBGoBehqhC4AQAAAAAAADaq3hdZAwAAAAAAADUMgRsAAAAAAABgIwI3AAAAAAAAwEYEbgAAAAAAAICNCNwAAABqCYfD8ZuvpKQk2z5r7ty5tswFAABQ09St6gIAAABwY3z22WdO2127dlVMTIyGDx9u7WvTps2NLgsAAOCmQ+AGAABQS3Tp0qXMvhYtWpS7HwAAANeOS0oBAAAgSSopKVF8fLxat24tDw8PhYaGauHChWXGbdu2TT169JCnp6cCAgI0cuRInThx4sYXDAAAUE0RuAEAAECS9Oyzz2ratGl6+OGHtW7dOg0ePFgTJkzQyy+/bI1JT09XVFSU6tevrzfffFPz58/Xxo0b1bt3b50/f74KqwcAAKg+uKQUAAAA+uWXX7R48WJNmjTJCtiio6N19uxZzZ49WxMmTFCDBg00Y8YMNWnSRB988IHc3d0lSW3btlW3bt2UmpqqUaNGVeFZAAAAVA+scAMAAIA+//xzFRUVadiwYU77/+M//kPnzp3Tnj17JF28nHTw4MFW2CZdfPhCy5YttW3bthtaMwAAQHVF4AYAAADl5ORIkoKCgpz2l26fOnXKGnf5mNJxpWMAAABqOwI3AAAAyN/fX5LKPPwgKyvL6bi/v3+5D0jIysqyxgAAANR2BG4AAADQPffco3r16unNN9902p+WliZvb2/97ne/kyT16NFD7777roqKiqwxn3/+uY4cOaJ77733htYMAABQXfHQBAAAAKhRo0YaN26c5s6dKw8PD3Xv3l0ff/yxli1bpunTp8vb21uSFBsbq27duql///565plndOrUKT333HO644479NBDD1XxWQAAAFQPBG4AAACQJM2ZM0d+fn5asWKFZs6cqRYtWmjevHmaMGGCNSY8PFwbNmzQc889pz/84Q/y8vJS//79NXfuXNWvX78KqwcAAKg+HMYYU9VFAAAAAAAAADcL7uEGAAAAAAAA2IjADQAAAAAAALARgRsAAAAAAABgIwI3AAAAAAAAwEYEbgAAAAAAAICNCNwAAAAAAAAAGxG4AQAAAAAAADYicAMAAAAAAABsROAGAAAAAAAA2IjADQAAAAAAALARgRsAAAAAAABgIwI3AAAAAAAAwEb/BzQgzxxXYQFOAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df = pd.DataFrame.from_dict(kerchunk_benchmarks + regular_xarray_benchmarks)\n", + "\n", + "pivot_df = df.pivot_table(index=['tool','dataset'], columns=['format'], values='time', aggfunc='mean')\n", + "\n", + "# Plotting\n", + "pivot_df.plot(kind='bar', figsize=(15, 5))\n", + "\n", + "plt.title(\"Out of the box I/O parameters\", fontsize=10)\n", + "plt.suptitle('Cloud-optimized HDF5 access performance (less is better)', fontsize=14)\n", + "\n", + "plt.xlabel('Tool')\n", + "plt.ylabel('Time in seconds')\n", + "# plt.xticks(rotation=90)\n", + "plt.legend(title='Format')\n", + "# plt.grid(True)\n", + "plt.xticks(rotation=0)\n", + "# plt.grid(True)\n", + "# plt.grid(axis='y', which='major', linestyle='-')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "fa6ac2b9-989c-4246-bb89-b54b711dd695", + "metadata": { + "tags": [], + "user_expressions": [] + }, + "source": [ + "## h5py out of the box performance." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "98c29558-de50-44af-87e9-074092fcd0ac", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01.h5\n", + "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01.json\n", + "Unable to synchronously open file (file signature not found)\n", + "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01-page-only-4mb.h5\n", + "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01-page-only-4mb.h5\n", + "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01_rechunked-100k-page-4mb.h5\n", + "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01_rechunked-100k-page-8mb.h5\n", + "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01_rechunked-100k-page-8mb.json\n", + "Unable to synchronously open file (file signature not found)\n", + "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02.h5\n", + "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02.json\n", + "Unable to synchronously open file (file signature not found)\n", + "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-4mb.h5\n", + "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-8mb.h5\n", + "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-4mb.h5\n", + "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-8mb.h5\n", + "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-8mb.json\n", + "Unable to synchronously open file (file signature not found)\n" + ] + } + ], + "source": [ + "regular_h5py_benchmarks = []\n", + "\n", + "for key, dataset in test_dict.items():\n", + " for k, link in dataset[\"links\"].items():\n", + " try:\n", + " if \"kerchunk\" in k or link.endswith(\".json\"):\n", + " continue \n", + " print (f\"Processing: {link}\")\n", + " log_filename = f\"logs/fsspec-h5py-{key}-{k}_default.log\"\n", + " \n", + " # Create a new FileHandler for each iteration\n", + " file_handler = logging.FileHandler(log_filename)\n", + " file_handler.setLevel(logging.DEBUG)\n", + "\n", + " # Add the handler to the root logger\n", + " logging.getLogger().addHandler(file_handler)\n", + " # this is mostly IO so no perf_counter is needed\n", + " start = time.time()\n", + " fo = fs.open(link, mode=\"rb\")\n", + " with h5py.File(fo) as f:\n", + " path = f\"{dataset['group']}/{dataset['variable']}\"\n", + " data = f[path][:]\n", + " data_mean = data.mean()\n", + " elapsed = time.time() - start\n", + " regular_h5py_benchmarks.append(\n", + " {\"tool\": \"h5py\",\n", + " \"dataset\": key,\n", + " \"cloud-aware\": \"no\",\n", + " \"format\": k,\n", + " \"file\": link,\n", + " \"time\": elapsed,\n", + " \"shape\": data.shape,\n", + " \"bytes_requested\": fo.cache.total_requested_bytes,\n", + " \"mean\": data_mean})\n", + "\n", + " logging.getLogger().removeHandler(file_handler) \n", + " file_handler.close()\n", + " \n", + " except Exception as e:\n", + " print(e)" + ] + }, + { + "cell_type": "markdown", + "id": "f4232e98-1159-45eb-ba11-0f0dbb905d83", + "metadata": { + "tags": [], + "user_expressions": [] + }, + "source": [ + "### Plotting Results" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "d8fa6dca-f408-4298-beca-f2839d4c3b67", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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Kfn4+ChPnjyqWLGiunfvrgsXLtj7xcXF6Y033lD58uXl6+srf39/lS1bVh07dszQ75W0PmcOHjyojh072n++efPmVdWqVfX6669neHul63+oGD9+vIKDg+Xt7a1SpUpp4sSJaR4OvH79erVo0UJ58+aVl5eXSpUqpWHDhjl83owcOVINGjSQJI0aNcrh9/PRo0cz9NkiSUeOHNHLL7+soKAgeXl5qVChQoqIiNAff/yRqq6U5Y8fP66IiAgVLFhQ2bJlc/jsaN26tSRp3rx5mXqOgPSwxwn3lcjISCUlJalr164qUKBAun29vLwsx3v33Xf12muvKU+ePGrXrp1y5Mihb7/9Vn379tWGDRvsJxvfqtWrV6tp06bKli2b2rRpo8KFC2v16tWqXbu2cufOnenxvvrqK73wwgvy9PRUmzZtlD9/fv34448aNWqUVq5cqTVr1qTa7r///lu1a9dWoUKF9Morr+j48eNavHixGjRooB9++MH+4fXaa68pMjJSu3btUp8+fZQrVy5Jzg/3cmbq1Klau3atWrVqpSeeeEJfffWV+vTpo+zZs2vXrl364osv9NRTT+mJJ57QokWL1L59exUvXlx16tRJd9y09pB88cUX2rNnj7Jnz25vi46Otn+YNm7cWE8//bROnTqlr776Sj/88INWr17tcP5DVv987oRs2bJp6NChWr16tRYvXqyBAwfe1ngbNmzQ1q1b5ebmprJly+rJJ5/M0HslIxITE7V8+XI1a9bMvhcmMjJSycnJeuWVV9J9zw4fPlyfffaZ5s6dq9GjR2d4nc8//7x+/fVXPf/887p27Zo+//xzde7cWSdPntSQIUMc+v7nP//R+PHjVaRIET377LPy8/PT+vXrNWDAAP3888/64osvUo3/xRdfaOXKlXrqqafUvXt3Xbx40f56nDp1qqTr7x3p/94rxhi1adNGS5YsUenSpdWjRw9dvnxZn3/+uZ566im9++676t27d4bWdaN+/frp559/VosWLeTm5qZFixapXbt2yp07t95//3399ttvatasma5evarPPvtMLVu21L59+1S8eHH7GB9++KG+/fZb1atXT82aNdOVK1e0du1aDRkyRNu2bdNXX32Vqq5r166pcePGOnfunP71r3/pypUrWrRokVq3bq0VK1aocePG9r5Xr15VeHi41q9fr1KlSqljx47y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x6Yav06dOipevLj++9//OlwXxBij//znP5kOJ61atZK/v7/mzZun33//3WG8IUOG6Nq1a06vI5WUlKShQ4c6/HVw3bp1Wr58uYKDg+17BKT/Ox485ZCpe8EXX3yhkSNHKjQ0NM3zU6Tr54c8/vjjWrhwoRYvXpzq8eTkZPuXVinrfz53wunTp/Xvf/9bq1evVvny5fXqq6/e0jgXL17Ur7/+mqr977//VufOnSXdXiiLiYnRzp07HS56m6J06dLq06ePzp49qxYtWig2Ntbh8eTkZI0ZM0affvqpSpYsqf79+2dq3ePGjXOYtvvkyZN655135O7urnbt2tnbU6b/7tSpk9OLY584cUJ79+7N1LrTkrKXJOV9meL48eP22l588cUsWVdmFC1aVJJSXafo999/1/jx4297fHd3d3Xt2lVxcXHq06dPqvdQXFycLl26JCnz79f0pOyJcBZUnSlYsKBat26tTZs2aeLEiU73nPz888/2vbC//fab02sJpew99PHxkXT9OkR79uyx7JdZ27ZtS3fPambGnTZtmsPn3aVLl+zT/7dv397e3r17d7m7u6tXr15O/4h0/vx5hz8YWn12pPd4q1atFBQUpHfeeUfr169P9fi1a9ecXlvLyrVr17Rz506FhIRwqB6yDOc44b4zduxYXb16VVOmTFGZMmX0xBNPqEKFCvLw8NCRI0f0448/6uzZs07DzI1KliypCRMm6PXXX1elSpXUunVr5ciRQ//973+1b98+tWrVSv/+97/t/T09PdWzZ0+99dZbqlq1qlq1aqWLFy/q22+/Vf369e1/zU2RLVs2zZ49W82aNdOTTz5pv07Q//73P8XGxqpSpUpOv8ymxc/PTx9++KHatm2rxx9/XG3atFG+fPm0evVqbd++XTVq1Eh1fol0/RCPtWvXqmbNmnriiSf0119/adGiRfLw8NCHH35oPwRRkp544glNmjRJXbt21fPPP68cOXIoKCjI4Qvo3dahQwcZY1S5cmWnX+7CwsLsJ9wvXLhQDRo00AsvvKCpU6eqWrVq8vb21rFjx7R582adPn3aPpFCVv98btekSZPk6+ur5ORkXbhwQXv27NH69esVHx+v2rVra9GiRbf84X/27FlVrlxZISEhqlixov38ve+//15nz55Vo0aN1Ldv31uuPeUwPWfBSZLefvttxcXFae7cuSpVqpSaN2+ukiVL6sKFC1q5cqUOHjyoUqVKafny5U4PYUtPiRIlVKFCBT377LP26zidOnVK48aNc7juS5MmTTR8+HCNGTNGwcHBatKkiYoWLaqzZ8/q0KFD2rBhg8aOHaty5crd8vOQ4qWXXtKSJUv0zTffqFKlSnrqqafs13E6e/asJk+enOqaNHdDjRo1VKNGDX3++eeKjY1VzZo1dezYMS1btkzNmzdP84K2mTF69Ght2bJFn3zyibZs2aKmTZvKy8tLhw8f1ooVK/TTTz/Z92xk5v2anoYNGypnzpz68ccf1a9fvwzVOWPGDO3fv18DBw7UJ598otDQUPn7+ysmJkY7duzQwYMHFRsbq+zZs+vHH3/U66+/rtq1a6ts2bIKCAjQ4cOHtWzZMvn4+Khnz56Srk8I9Mwzz6h69eqqUKGCChYsqOPHj+vrr7+Wm5tbpi9Wm2LBggWaMWOGwsLCFBwcLD8/P+3Zs0fLly9X3rx5M7WXtnr16qpcubLatGkjLy8vLVmyREePHlWXLl1Ur149e78KFSpoxowZevXVV1WmTBk1a9bM/p49fPiw1q1bp4iICPtkOGXLllXhwoXtv6eKFCkim82mV199Vf7+/ul+tnh5eenLL79U06ZNVb9+fTVs2NA+IcixY8e0YcMGBQQEZHoyipTfnzdPjAPcliybnw+4y7Zt22Y6depkgoODjY+Pj/Hy8jLFihUzbdu2TXVdkPSmuf7mm29M/fr1Tc6cOY2Xl5epWLGimTx5ssP1clIkJiaaN954wwQGBhpPT09TunRp8+6775rDhw87vVaIMcasX7/e1KtXz/j4+Jg8efKY559/3vzxxx/26ZQza/369aZp06YmV65c9hqGDx/ucA2XFPr/15L5448/zPPPP29y585tfHx8TL169VJdryXF22+/bUqVKmU8PDzsy6dIbzpyZ89telPQOtt+Z2Mpk9N7nzt3zgwbNsxUqFDB+Pj4GF9fX1OqVCnTrl07s2TJklR1ZMXPJ70pulMsXLgw3enIU27u7u4md+7cpnLlyqZTp05mxYoVDtfaulHRokWNl5eXZX1xcXGmR48eplq1aiZv3rzG3d3d+Pv7mzp16phZs2alex2UjGzrk08+6XRa7putWrXKPP/886Zw4cLGw8PD5MqVy4SGhprJkyc7XI8rI1KetytXrpj+/fubRx55xHh6eppHH33UfPTRR+nW0KJFC5MvXz7j4eFhChYsaEJDQ82YMWMcpipPmSJ83rx5aY6V1nTkxhhz7do1M2nSJFOxYkXj5eVlcubMaerXr2+++eabVH2t1pXZ91F69Z06dcp06tTJFC5c2Hh7e5uKFSua999/P83fYeltY1rrvnr1qpk0aZKpUqWK/T1Yvnx58/rrr5u///7boW9m369p6dq1q3F3d3eYrt+YtK/jZIwxV65cMW+//bapVq2ayZEjh/Hx8THFixc3Tz/9tPn444/tnwF79uwxffr0MY899pgJCAgwXl5epkSJEiYiIsLs2bPHPl5MTIwZPHiwqVmzpsmfP7/x9PQ0QUFB5rnnnsvQFPvGOJ/We8uWLaZr166mQoUKJleuXMbHx8eUKlXK9O7dO0PXPDPm/15Dhw4dMm+++aYpUaKE8fT0NCVLljQTJkxI83fA1q1bzQsvvGB/z+bNm9dUrVrVDB482Ozdu9eh75YtW+yfpSm/z258zab32WKMMX/++afp06ePKVWqlPHy8jJ+fn6mXLly5uWXXzarV6926Ots+ZtFREQYT09Ph2ufAbfLZkwWnd0H4J5js9lUv359p+dFAVkhLi5O+fLl06uvvqp33333rq03LCxM69aty7IT1HF/27t3rypWrKhx48Zp0KBBri4HLnb+/HkFBQXpueee09y5c11dDh4gnOMEALhly5cv17Vr11LNpgfcTeXKlVOnTp00efLkDE1hjgfblClTlJSUpDFjxri6FDxgOMcJAHDL2rZte0dm+wMya8yYMSpcuLCOHj2qRx991NXlwIVy586tjz/+OEPXFAMyg0P1gAcYh+rhQcWhegCAu43gBAAAAAAWOMcJAAAAACwQnAAAAADAAsEJAAAAACwQnAAAAADAAsEJAAAAACwQnAAAAADAAsEJAAAAACwQnAAAAADAAsEJAAAAACwQnAAAAADAAsEJAAAAACwQnAAAAADAAsEJAAAAACwQnAAAAADAAsEJAAAAACwQnAAAAADAAsEJAAAAACwQnAAAAADAAsEJAAAAACwQnAAAAADAAsEJAAAAACwQnADgIWWM0SuvvKI8efLIZrMpKioqw8sWK1ZMU6dOzdJ61q5dK5vNpvPnz2fpuAAAZAWCEwDcBTExMercubMKFy4sT09PFS1aVH369NHZs2czNc7Ro0czHXLSsmLF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njyZHgsA7oSH+lC99ERHR2vhwoX64osvVLduXZUsWVL9+/dXnTp1NG/ePElSeHi4lixZotWrVys5OVkHDhywX9Pixi8+AB5u06dPV3x8vMLDw7V+/XrFxMRoxYoVatSokR555BGNGzfO3veJJ57Q9OnT9csvv2j79u3q1q2bw56B/Pnzy8fHRytWrNDJkycVFxfndJ3du3dXTEyMevXqpX379umbb77RiBEj1K9fP2XLlvFf/cWKFdOlS5e0evVqnTlzxiHEpefFF19U3rx51apVK23YsEFHjhzRunXr1KdPH8tDBUePHq3Vq1frt99+U0REhPLmzWvfW/f6669r9erVGjNmjA4cOKD58+dr+vTp6t+/vyTpzz//1KuvvqoJEyaoTp06ioyM1Pjx41MFl7QkJibq+++/t09DLl3fO/LBBx/om2++0SuvvKJff/1VR48e1Zw5cxQREaHnnntOrVu3TnfcmJgY9evXT/v379fChQv13nvvqU+fPpKu74nx9PTUe++9p8OHD2vZsmWWQSxFcHCwlixZoqioKO3atUvt2rXL1OyBaRk0aJA2b96sHj16KCoqSgcPHtSyZcvUq1cve59ixYpp/fr1On78uM6cOZPh5ZyZMmWKFi1apH379unAgQP64osvVLBgwQf+GmIA7jMuO7vqHqObTsj+/PPPjSSTI0cOh5u7u7tp3bq1Meb6ydADBw403t7exs3NzeTOnduMHDnSSDI///yzi7YEwL3o6NGjJiIiwhQsWNB4eHiYwMBA06tXL3PmzBmHfsePHzeNGzc2OXLkMKVKlTLLly93mBzCGGM+/PBDExgYaLJly2bq16+f5jrXrl1rqlevbjw9PU3BggXNoEGDzLVr1+yPZ2RyCGOM6datmwkICDCS7LPyOZsYoHLlyvbHjbk+CUH79u1N3rx5jZeXlylRooTp0qWLiYuLc7qelAkQvv32W/Poo48aT09PU716dRMVFeXQ78svvzTly5c3Hh4eJigoyEycONEYc/13csOGDU14eLjDJAN9+/Y1JUuWtE+0cLMbJ4f48ccfTZEiRZz2W79+vWnSpInx9/c3np6epnz58mbSpEkmMTExrafOGHN9coju3bubbt26GT8/P5M7d24zePBghxo/++wzU6xYMePl5WVCQ0PNsmXLHCYBSXlubp6g4siRI6ZBgwbGx8fHBAYG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7t1bly9fTre2+Ph49e7dW/nz55e3t7fq1Kmjbdu22R9fu3atbDabVq9erZCQEGXPnl21atXS/v37nY63fv16eXh46MSJEw7tr7/+uurVq5duLZcuXdKLL76oDz/8ULlz5071eLFixTR27Fi1b99evr6+Klq0qL755hudPn1arVq1kq+vrypWrKjt27enWvbrr79W6dKl5e3trUaNGikmJibdWu4EghMAAABgYf78+XJ3d9fPP/+sadOmacqUKfroo48kSQkJCRozZox27dqlr7/+WkeOHFFERIR92aNHj+q5557T008/raioKHXt2lVDhw51GH/37t0KDw/Xv/71L/36669avHixfvrpJ/Xs2TPdugYOHKivvvpK8+fP1y+//KLg4GCFh4fr3LlzDv2GDh2qyZMna/v27XJ3d1enTp2cjlevXj2VKFFCn3zyib0tMTFRn376qTp27JhuLT169FDz5s315JNPptlnypQpql27tnbu3KnmzZvrpZdeUvv27fXvf//bXn/79u3toVSSrly5onHjxmn+/PnauHGjLly4oBdeeCHdWu4EznECAAAALAQGBmrKlCmy2WwqU6aMdu/erSlTpqhLly4OIaREiRKaNm2aatSooUuXLsnX11ezZs1SmTJlNHHiRElSmTJl9Ntvv2ncuHH25SZOnKh27drptddekySVKlVK06ZNU/369TVz5kx5e3unquny5cuaOXOmIiMj1bRpU0nShx9+qFWrVmnOnDkaMGCAve+4ceNUv359SdLgwYPVvHlzXb161em4nTt31rx58+zLf/fdd7py5Ypat26d5vOzaNEi/fLLLw57u5xp1qyZunbtKkl64403NHPmTFWvXl3PP/+8JGnQoEEKDQ3VyZMnVbBgQUnStWvXNH36dD3++OOSrofYcuXKaevWrapRo0a668tKBCcAAID7SMX5FV1dQpp2d9jt6hLumJo1a8pms9nvh4aGavLkyUpKStKvv/6qkSNHKioqSufOnVNycrIk6dixYypfvrz279+v6tWrO4x38xf+HTt26NChQ1qwYIG9zRij5ORkHTlyREuXLtWbb75pf2zPnj06f/68rl27ptq1a9vbPTw8VKNGDe3du9dh/BvPOSpUqJAk6dSpUwoKCkq1rRERERo2bJi2bNmimjVrau7cuWrdurVy5MihDRs22EOaJH3wwQeqV6+e+vTpo5UrVzoNYmnVUaBAAUlSxYoVU7WdOnXKHpzc3d0VEhJi71O2bFnlypVLe/fuJTgBAAAA94OrV6+qcePGaty4sT799FPly5dPx44dU3h4uBISEiRdD0A3hq6UthslJyera9eu6t27d6p1BAUFqVu3bg57fAoXLqy///5bkpyOfXObh4eH/f8pj6UEvJvlz59fLVq00Lx581SiRAktX75ca9eulSSFhIQoKirK3rdAgQJavXq1Tp06pWrVqtnbk5KStH79ek2fPl3x8fFyc3NLs46M1Hbz9qTVdicRnAAAAAALW7ZsSXW/VKlS2rdvn86cOaO33npLgYGBkpRqcoOyZctq+fLlDm0396latap+//13BQcHO11/njx5lCdPHoe24OBgeXp66qefflK7du0kXT+sbfv27fZD/m7Vyy+/rBdeeEFFihRRyZIl7Xu1fHx8UtXYsGFD7d7tuLexY8eOKlu2rAYNGmQPTbcqMTFR27dvt+9d2r9/v86fP6+yZcve1riZxeQQAAAAgIWYmBj169dP+/fv18KFC/Xee++pT58+CgoKkqenp9577z0dPnxYy5Yt05gxYxyW7dq1q/bt26dBgwbpwIED+vzzzxUZGSnp//aaDBo0SJs3b1aPHj0UFRWlgwcPatmyZerVq1eaNeXIkUOvvvqqBgwYoBUrVmjPnj3q0qWLrly5os6dO9/W9oaHh8vf319jx461nBQiZ86cqlChgsMtR44cCggIUIUKFW6rDun6HqlevXrp559/1i+//KKOHTuqZs2ad/UwPYngBAAAAFhq3769/vnnH9WoUUM9evRQr1699MorryhfvnyKjIzUF198ofLly+utt97SpEmTHJYtXry4vvzySy1ZskSVKlXSzJkz7bPqeXl5Sbp+7s+6det08OBB1a1bV4899piGDx9uPx8pLW+99ZaeffZZvfTSS6pataoOHTqkH374wel04JmRLVs2RUREKCkpSe3bt7+tsW5X9uzZNWjQILVr106hoaHy8fHRokWL7nodNnPzAZYPuAsXLsjf319xcXHy8/NzdTkAAOBeNdLf1RU4VbF46pP57xXpTQ5x9epVHTlyRMWLF7ecQOBeExYWpipVqmjq1KlZNua4ceM0a9Ysl1yPKKO6dOmikydPatmyZa4u5bak99rLTDbgHCcAAADgDpsxY4aqV6+u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ly+fTpw4IWOMPRDc6nWfatSooV69eik8PFxubm4aMGBAhrYjODhYHh4e2rJli4KCgiRJf//9tw4cOKD69etLur4HKk+ePA7LDR48ONV2V6xYUVOmTFGLFi1uaRtutGvXLv3zzz/2gLplyxb5+vpm6BDC28EeJwAAACATevTooXPnzqlt27baunWrDh8+rJUrV6pTp05KSkqSt7e3Bg0apIEDB+rjjz9WdHS0tmzZojlz5mR4HWFhYTp9+rTefvttRUdH6/3339f3339/yzWHhobq+++/1+jRozVlypQMbYevr686d+6sAQMGaPXq1frtt98UERFheR5RwYIFVaFCBYebJAUFBal48eK3vA0pEhIS1LlzZ+3Zs0fff/+9RowYoZ49e97R85skghMAAACQKYULF9bGjRuVlJSk8PBwVahQQX369JG/v7/9y/vw4cP1+uuv64033lC5cuXUpk2bVOfqpKdcuXKaMWOG3n//fVWuXFlbt25V//79b6vu2rVr67vvvtPw4cM1bdq0DG3HxIkTVa9ePbVs2VJPPvmk6tSpo2rVqt1WHberYcOGKlWqlOrVq6fWrVurRYsWGjly5B1fr81k5ODFB8iFCxfk7++vuLg4+fn5ubocAABwrxrp7+oKnKpYPMjVJaRpd4fdaT529epVHTlyRMWLF5e3t/ddrAoPu/Ree5nJBuxxAgAAAAALBCcAAAAAsEBwAgAAAAALBCcAAAAAsEBwAgAAAAALBCcAAAAAsEBwAgAAAAALBCcAAAAAsEBwAgAAAAALBCcAAADgLjp69KhsNpuioqLu+LqKFSumqVOnZumYYWFheu2117J0zIyKiIjQ008/7ZJ1u7tkrTeYMWOGJk6cqNjYWD366KOaOnWq6tatm2b/BQsW6O2339bBgwfl7++vJk2aaNKkSQoICLiLVQMAACCrvN/tf3d1fT1mPXFX1/cwOnHihAYMGKBVq1bp4sWLKlOmjP7zn//oueeec3Vpt8yle5wWL16s1157TUOHDtXOnTtVt25dNW3aVMeOHXPa/6efflL79u3VuXNn/f777/riiy+0bds2vfzyy3e5cgAAADysEhISXF3CPe+ll17S/v37tWzZMu3evVv/+te/1KZNG+3cudPVpd0ylwand955R507d9bLL7+scuXKaerUqQoMDNTMmTOd9t+yZYuKFSum3r17q3jx4qpTp466du2q7du33+XKAQAA8LAICwtTz5491a9fP+XNm1eNGjXSnj171KxZM/n6+qpAgQJ66aWXdObMGfsyycnJmjBhgoKDg+Xl5aWgoCCNGzfOYdzDhw+rQYMGyp49uypXrqzNmzfbHxs5cqSqVKni0H/q1KkqVqyY/X7KYWuTJk1SoUKFFBAQoB49eujatWtpbsu8efPk7++vVatWSZLldly+fFnt27eXr6+vChUqpMmTJ2foOdu8ebN69eqlGjVqqESJEho2bJhy5cqlX375RdL/Ha74+eefq27duvLx8VH16tV14MABbdu2TSEhIfL19VWTJk10+vTpVOOPGjVK+fPnl5+fn7p27XpXwqzLglNCQoJ27Nihxo0bO7Q3btxYmzZtcrpMrVq19Oeff2r58uUyxujkyZP68ssv1bx58zTXEx8frwsXLjjcAAAAgMyYP3++3N3dtXHjRr311luqX7++qlSpou3bt2vFihU6efKkWrdube8/ZMgQTZgwQcOHD9eePXv02WefqUCBAg5jDh06VP3791dUVJRKly6ttm3bKjExMVN1rVmzRtHR0VqzZo3mz5+vyMhIRUZGOu07adIk9e/fXz/88IMaNWqk2NhYy+0YMGCA1qxZo6VLl2rlypVau3atduzYYVlXnTp1tHjxYp07d07JyclatGiR4uPjFRYW5tBvxIgRGjZsmH755Re5u7urbdu2GjhwoN59911t2LBB0dHReuONNxyWWb16tfbu3as1a9Zo4cKFWrp0qUaNGpWp5+1WuOwcpzNnzigpKSnVC6hAgQI6ceKE02Vq1aqlBQsWqE2bNrp69aoSExPVsmVLvffee2muZ/z48XfliQQAAMCDKzg4WG+//bYk6Y033lDVqlX15ptv2h+fO3euAgMDdeDAARUqVEjvvvuupk+frg4dOkiSSpYsqTp16jiM2b9/f/sOgFGjRunRRx/VoUOHVLZs2QzXlTt3bk2fPl1ubm4qW7asmjdvrtWrV6tLly4O/YYMGaL58+dr7dq1qlixoiRp5syZ6W5H4cKFNWfOHH388cdq1KiRpOsBskiRIpZ1LV68WG3atFFAQIDc3d2VPXt2LV26VCVLlkz1HISHh0uS+vTpo7Zt22r16tWqXbu2JKlz586pgqCnp6fmzp2r7Nmz69FHH9Xo0aM1YMAAjRkzRtmy3bn9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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df = pd.DataFrame.from_dict(regular_h5py_benchmarks)\n", + "\n", + "pivot_df = df.pivot_table(index=['tool','dataset'], columns=['format'], values='bytes_requested', aggfunc='mean')\n", + "\n", + "# Plotting\n", + "pivot_df.plot(kind='bar', figsize=(10, 6))\n", + "plt.suptitle('Cloud-optimized HDF5 I/O performance (less is better)', fontsize=14)\n", + "plt.title(\"Out of the box I/O parameters\", fontsize=10)\n", + "\n", + "plt.xlabel('Tool')\n", + "plt.ylabel('bytes')\n", + "plt.xticks(rotation=45)\n", + "plt.legend(title='Format')\n", + "plt.grid(False)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "4529d908-89d1-4278-8493-b9f05ed921c9", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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JXLLCXp/KYQo5Kp4IioVFAoFvLy81F4TQUQlLyAgABEREUhISCj2dWf04Xrw4AEqVqwIf39/LFu2TNPhkIbl5OSgUqVKcHZ2xl9//aXpcEiDeI0UERERUSGsra0xfvx4/Pzzz6VmAhvSnF9//RWJiYmYP3++pkMhDeM1UkRERERFGDlyJHJycnD79m21N0enj4dCocDKlStRr149TYdCGsZEioiIiKgIhoaGmDp1qqbDoFJA3cy69HHiNVJEREREREQy8RopIiIiIiIimZhIERERERERycREioiIiIiISCYmUkRERERERDIxkSIiIiIiIpKJiRQREREREZFMTKSIiIiIiIhkYiJFREREREQkExMpIiIiIiIimZhIERERERERycREioiIiIiISCYmUkRERERERDIxkSIiIiIiIpKJiRQREREREZFMTKSIiIiIiIhkYiJFREREREQkExMpIiIiIiIimZhIERERERERycREioiIiIiISCYmUkRERERERDIxkSIiIiIiIpKJiRQREQEAhBD45ptvYGlpCYVCgZiYmGKv6+zsjNDQ0BKNJyoqCgqFAo8ePSrRdomIiEoCEykiIg1ISkpC//79YW9vDz09PTg5OWH48OH477//ZLWTmJgoO+kpyJ49exAeHo4///wTd+/eRY0aNVTqhIeHw8LC4o23VZoFBQWhdu3aast79OghPT9+/Djat2+PMmXKwMDAAO7u7li4cCFyc3PfYbSlx9tIpomISjMmUkRE79jNmzfh4eGBa9euYf369bhx4waWL1+OyMhING7cGA8fPtRIXPHx8bCzs0OTJk1ga2sLHR0djcRRWu3YsQN+fn4AgK1bt8LLywvly5fHwYMHERcXh+HDh2PWrFno0aMHhBDvNDYhBHJyct7pNt+W7OxsTYdARFQsTKSIiN6xIUOGQE9PD/v27YOXlxccHR3Rrl07HDhwAHfu3MGkSZOkugqFAtu2bVNa38LCAuHh4QAAFxcXAECdOnWgUCjg7e1d4HYPHTqEBg0aQF9fH3Z2dpgwYYL05TsgIACBgYG4ffs2FAoFnJ2dVdaPiopC3759kZaWBoVCAYVCgaCgIGn5kydP0K9fP5iamsLR0RErVqxQWv/OnTvo3r07ypQpAysrK/j5+SExMbHI43Xs2DHUqlULBgYGaNiwIS5evKi0fPPmzahevTr09fXh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c00q7hSHRERE9BHj9OclLi8vD9evX4e2tjbKli0LPT29QicMI3pTQghkZ2fj/v37yM3NhZubm8pNe4ubG2i0R4qIiIiIPl5aWlpwcXHB3bt38e+//2o6HPqIGBkZwdHRUSWJkoOJFBERERFpjJ6eHhwdHZGTk4Pc3FxNh0MfAW1tbejo6Lxx7ycTKSIiIiLSKIVCAV1dXejq6mo6FKJiK9XTnxMREREREZVGTKSIiIiIiIhkYiJFREREREQkExMpIiIiIiIimZhIERERERERycREioiIiIiISCYmUkRERERERDIxkSIiIiIiIpKJiRQREREREZFMTKSIiIiIiIhkYiJFREREREQkExMpIiIiIiIimZhIERERERERycREioiIiIiISCYmUkRERERERDLpaDoAIiIiInoz7hHumg6hQBf7XNR0CERvBXukiIiIiIiIZGIiRUREREREJBMTKSIiIiIiIpmYSBEREREREcnERIqIiIiIiEgmJlJEREREREQyMZEiIiIiIiKSiYkUERERERGRTEykiIiIiIiIZGIiRUREREREJBMTKSIiIiIiIpmYSBEREREREcnERIqIiIiIiEgmJlJEREREREQyMZEiIiIiIiKSiYkUERERERGRTEykiIiIiIiIZGIiRUREREREJBMTKSIiIiIiIpmYSBEREREREcnERIqIiIiIiEgmJlJEREREREQyMZEiIiIiIiKSiYkUERERERGRTEykiIiIiIiIZNKRU1kIgUOHDuHIkSNITEzEkydPULZsWdSpUwetW7eGg4PD24qTiIiIiIio1ChWj9TTp08RHBwMBwcHtGvXDjt37sSjR4+gra2NGzduYNq0aXBxcUH79u1x8uTJYm/88OHD6NixI+zt7aFQKLBt2zal5UIIBAUFwd7eHoaGhvD29sbly5eV6mRlZSEwMBDW1tYwNjZGp06d8M8//xQ7BiIiIiIiIrmKlUhVqlQJ586dw/Lly5Geno6TJ09i8+bNWLNmDXbt2oXbt28jPj4ezZo1Q/fu3bFy5cpibTwzMxO1atVCWFiY2uXz5s3DokWLEBYWhjNnzsDW1hY+Pj54/PixVGfEiBHYunUrNmzYgKNHjyIjIwOffvopcnNzixUDERERERGRXAohhCiq0qVLl1CjRo1iNZidnY1bt27Bzc1NXiAKBbZu3YrOnTsDeNEbZW9vjxEjRmD8+PEAXvQ+2djYYO7cuRg4cCDS0tJQtmxZ/Prrr+jevTsA4N9//4WDgwN27doFX1/fYm07PT0d5ubmSEtLg5mZmay4iYiI6CMRZK7pCArk7uKo6RAKdLHPRU2HQCRLcXODYvVIFTeJAgA9PT3ZSZQ6CQkJSE5ORps2baQyfX19eHl54fjx4wCAs2fP4vnz50p17O3tUaNGDamOOllZWUhPT1d6EBERERERFZfsWfv27NmDo0ePSs9/+OEH1K5dG/7+/khNTS2xwJKTkwEANjY2SuU2NjbSsuTkZOjp6aFMmTIF1lFn9uzZMDc3lx6cJIOIiIiIiOSQnUiNHTtW6sG5ePEiRo8ejfbt2+PmzZsYNWpUiQeoUCiUngshVMpeVVSdiRMnIi0tTXokJSWVSKxERERERPRxkDX9OfBiyF21atUAAJs3b8ann36K4OBgnDt3Du3bty+xwGxtbQG86HWys7OTylNSUqReKltbW2RnZyM1NVWpVyolJQVNmjQpsG19fX3o6+uXWKxERERERPRxkd0jpaenhydPngAADhw4IF2fZGlpWaLXGrm4uMDW1hb79++XyrKzs3Ho0CEpSapXrx50dXWV6ty9exeXLl0qNJEiIiIiIiJ6E7J7pJo2bYpRo0bB09MTp0+fxsaNGwEA165dQ/ny5WW1lZGRgRs3bkjPExISEBMTA0tLSzg6OmLEiBEIDg6Gm5sb3NzcEBwcDCMjI/j7+wMAzM3N0b9/f4wePRpWVlawtLTEmDFj4O7ujtatW8vdNSIiIiIiomKRnUiFhYVh8ODB+P3337Fs2TJ88sknAIDdu3ejbdu2stqKjo5GixYtpOf511j16dMH4eHhGDduHJ4+fYrBgwcjNTUVDRs2xL59+2BqaiqtExISAh0dHXTr1g1Pnz5Fq1atEB4eDm1tbbm7RkREREREVCzFuo/Uh473kSIiIqIi8T5Sr4X3kaL3TXFzg2L1SMm59omJCBERERERfeiKlUhZWFgUOeV4vtzc3DcKiIiIiIiIqLQrViJ18OBB6f+JiYmYMGECAgIC0LhxYwDAiRMnEBERgdmzZ7+dKImIiIiIiEqRYiVSXl5e0v9nzJiBRYsWoWfPnlJZp06d4O7ujhUrVqBPnz4lHyUREREREVEpIvs+UidOnICHh4dKuYeHB06fPl0iQREREREREZVmshMpBwcHLF++XKX8p59+goODQ4kERUREREREVJrJvo9USEgIPv/8c+zduxeNGjUCAJw8eRLx8fHYvHlziQdIRERERERU2sjukWrfvj2uX7+OTp064eHDh/jvv//g5+eHa9euoX379m8jRiIiIiIiolJFdo8UAJQvXx7BwcElHQsREREREdF74bUSqUePHuH06dNISUlBXl6e0rLevXuXSGBERERERESllexE6o8//sCXX36JzMxMmJqaKt2oV6FQMJEiIiIiIqIPnuxrpEaPHo1+/frh8ePHePToEVJTU6XHw4cP30aMREREREREpYrsROrOnTsYNmwYjIyM3kY8REREREREpZ7sRMrX1xfR0dFvIxYiIiIiIqL3guxrpDp06ICxY8ciNjYW7u7u0NXVVVreqVOnEguOiIiIiIioNJKdSA0YMAAAMGPGDJVlCoUCubm5bx4VERERERFRKSY7kXp1unMiIiIiIqKPjexrpIiIiIiIiD52r5VIHTp0CB07doSrqyvc3NzQqVMnHDlypKRjIyIiIiIiKpVkJ1Jr1qxB69atYWRkhGHDhmHo0KEwNDREq1atsG7durcRIxERERERUamiEEIIOStUrVoV33zzDUaOHKlUvmjRIqxcuRJXrlwp0QDfhfT0dJibmyMtLQ1mZmaaDoeIiIhKoyBzTUdQIHcXR02HUKCLfS5qOgQiWYqbG8jukbp58yY6duyoUt6pUyckJCTIbY6IiIiIiOi9IzuRcnBwQGRkpEp5ZGQkHBwcSiQoIiIiIiKi0kz29OejR4/GsGHDEBMTgyZNmkChUODo0aMIDw/H4sWL30aMREREREREpYrsROrbb7+Fra0tFi5ciE2bNgF4cd3Uxo0b4efnV+IBEhERERERlTayEykA6NKlC7p06VLSsRAREREREb0XZF8jdebMGZw6dUql/NSpU4iOji6RoIiIiIiIiEoz2YnUkCFDkJSUpFJ+584dDBkypESCIiIiIiIiKs1kJ1KxsbGoW7euSnmdOnUQGxtbIkERERERERGVZrITKX19fdy7d0+l/O7du9DRea1LroiIiIiIiN4rshMpHx8fTJw4EWlpaVLZo0eP8N1338HHx6dEgyMiIiIiIiqNZHchLVy4EM2bN4eTkxPq1KkDAIiJiYGNjQ1+/fXXEg+QiIiIiIiotJGdSH3yySf4+++/sXbtWly4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GxsbaZk6WVlZSE9PV3oQEREREREVV6ke2peXlwcPDw8EBwcDAOrUqYPLly9j2bJl6N27t1RPoVAorSeEUCl72ezZszF9+vS3EzQREREREX3wSnWPlJ2dHapVq6ZUVrVqVdy+fRsAYGtrCwAqvU8pKSkqvVQvmzhxItLS0qRHUlJSCUdOREREREQfslKdSHl6euLq1atKZdeuXYOTkxMAwMXFBba2tti/f7+0PDs7G4cOHUKTJk0KbFdfXx9mZmZKDyIiIiIiouIq1UP7Ro4ciSZNmiA4OBjdunXD6dOnsWLFCqxYsQLAiyF9I0aMQHBwMNzc3ODm5obg4GAYGRnB399fw9ETEREREdGHqlQnUvXr18fWrVsxceJEzJgxAy4uLggNDcWXX34p1Rk3bhyePn2KwYMHIzU1FQ0bNsS+fftgamqqwciJiIiIiOhDphBCCE0HoWnp6ekwNzdHWloah/kRERFpkPOEnZoOoUCJBqV3tIu7i6OmQyjQxT4XNR0CkSzFzQ1K9TVSREREREREpRETKSIiIiIiIpmYSBEREREREcnERIqIiIiIiEimUj1rHxERERG9365UqarpENSqGndF0yHQe449UkRERERERDIxkSIiIiIiIpKJiRQREREREZFMTKSIiIiIiIhkYiJFREREREQkE2ftIyIiIqKPzg+D/tJ0CAUasrylpkOgYmCPFBERERERkUxMpIiIiIiIiGRiIkVERERERCQTEykiIiIiIiKZmEgRERERERHJxESKiIiIiIhIJiZSREREREREMjGRIiIiIiIikomJFBERERERkUxMpIiIiIiIiGRiIkVERERERCQTEykiIiIiIiKZmEgRERERERHJxESKiIiIiIhIJiZSREREREREMjGRIiIiIiIikomJFBERERERkUxMpIiIiIiIiGRiIkVERERERCQTEykiIiIiIiKZmEgRERERERHJxESKiIiIiIhIJiZSREREREREMjGRIiIiIiIikomJFBERERERkUxMpIiIiIiIiGRiIkVERERERCQTEykiIiIiIiKZmEgRERERERHJxESKiIiIiIhIJiZSREREREREMjGRIiIiIiIikomJFBERERERkUxMpIiIiIiIiGR6rxKp2bNnQ6FQYMSIEVKZEAJBQUGwt7eHoaEhvL29cfnyZc0FSUREREREH7z3JpE6c+YMVqxYgZo1ayqVz5s3D4sWLUJYWBjOnDkDW1tb+Pj44PHjxxqKlIiIiIiIPnTvRSKVkZGBL7/8EitXrkSZMmWkciEEQkNDMWnSJHz22WeoUaMGIiIi8OTJE6xbt06DERMRERER0YfsvUikhgwZgg4dOqB169ZK5QkJCUhOTkabNm2kMn19fXh5eeH48eMFtpeVlYX09HSlBxERERERUXHpaDqAomzYsAHnzp3DmTNnVJYlJycDAGxsbJTKbWxscOvWrQLbnD17NqZPn16ygRIRERER0UejVPdIJSUlYfjw4VizZg0MDAwKrKdQKJSeCyFUyl42ceJEpKWlSY+kpKQSi5mIiIiIiD58pbpH6uzZs0hJSUG9evWkstzcXBw+fBhhYWG4evUqgBc9U3Z2dlKdlJQUlV6ql+nr60NfX//tBU5ERERERB+0Ut0j1apVK1y8eBExMTHSw8PDA19++SViYmJQoUIF2NraYv/+/dI62dnZOHToEJo0aaLByImIiIiI6ENWqnukTE1NUaNGDaUyY2NjWFlZSeUjRoxAcHAw3Nzc4ObmhuDgYBgZGcHf318TIRMRERER0UegVCdSxTFu3Dg8ffoUgwcPRmpqKho2bIh9+/bB1NRU06EREREREdEH6r1LpKKiopSeKxQKBAUFISgoSCPxEBERERHRx6dUXyNFRERERERUGjGRIiIiIiIikomJFBERERERkUxMpIiIiIiIiGRiIkVERERERCQTEykiIiIiIiKZmEgRERERERHJxESKiIiIiIhIJiZSREREREREMjGRIiIiIiIikomJFBERERERkUxMpIiIiIiIiGRiIkVERERERCQTEykiIiIiIiKZmEgRERERERHJxESKiIiIiIhIJiZSREREREREMjGRIiIiIiIikomJFBERERERkUxMpIiIiIiIiGRiIkVERERERCQTEykiIiIiIiKZmEgRERERERHJxESKiIiIiIhIJiZSREREREREMjGRIiIiIiIikomJFBERERERkUw6mg6AiF6fe4S7pkMo0MU+FzUdAhEREdFbwx4pIiIiIiIimZhIERERERERycREioiIiIiISCYmUkRERERERDIxkSIiIiIiIpKJiRQREREREZFMTKSIiIiIiIhkYiJFREREREQkE2/IS6WG84Sdmg6hQIlzOmg6BCIiIiIqRdgjRUREREREJBMTKSIi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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df = pd.DataFrame.from_dict(regular_h5py_benchmarks)\n", + "\n", + "pivot_df = df.pivot_table(index=['tool','dataset'], columns=['format'], values='time', aggfunc='mean')\n", + "\n", + "# Plotting\n", + "pivot_df.plot(kind='bar', figsize=(10, 6))\n", + "plt.suptitle('Cloud-optimized HDF5 access performance (less is better)', fontsize=14)\n", + "plt.title(\"Out of the box I/O parameters\", fontsize=10)\n", + "\n", + "plt.xlabel('Tool')\n", + "plt.ylabel('Time (seconds)')\n", + "plt.xticks(rotation=45)\n", + "plt.legend(title='Format')\n", + "plt.grid(False)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "b20b2032-9ab4-46e1-b1f8-2e62b656a265", + "metadata": { + "tags": [], + "user_expressions": [] + }, + "source": [ + "## Aggregated plot by tool and different file sizes" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "id": "64bcc5de-aae3-46aa-9474-1c90b9ff20a9", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "df = pd.DataFrame.from_dict(regular_h5py_benchmarks + kerchunk_benchmarks + regular_xarray_benchmarks + h5coro_beanchmarks)\n", + "\n", + "pivot_df = df.pivot_table(index=['tool','dataset'], columns=['format'], values='time', aggfunc='mean')\n", + "\n", + "# Plotting\n", + "pivot_df.plot(kind='bar', figsize=(15, 5))\n", + "plt.suptitle('Cloud-optimized HDF5 performance (less is better)', fontsize=14)\n", + "plt.title(\"Out of the box I/O parameters\", fontsize=10)\n", + "plt.xlabel('Tool')\n", + "plt.ylabel('Mean Time (S)')\n", + "plt.xticks(rotation=0)\n", + "plt.legend(title='Format')\n", + "plt.grid(False)\n", + "plt.savefig(\"stats.png\", transparent=None, dpi=150)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "8426a4e2-a2eb-441d-b1ed-009a16508b74", + "metadata": {}, + "outputs": [], + "source": [ + "df.to_csv(\"benchmarks.csv\")" + ] + }, + { + "cell_type": "markdown", + "id": "0ea67b0b-5e7f-4d1f-bca9-1f3cae7fe309", + "metadata": { + "tags": [], + "user_expressions": [] + }, + "source": [ + "## Now leet's run the tests with \"informed\" parameters, this is a I/O that aligns to the cloud-optimized granules chunking strategy and consolidated metadata.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "id": "8151834b-0b57-4a3d-98b5-8cfaffa37dc4", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01.h5\n", + "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01.json\n", + "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01-page-only-4mb.h5\n", + "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01-page-only-4mb.h5\n", + "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01_rechunked-100k-page-4mb.h5\n", + "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01_rechunked-100k-page-8mb.h5\n", + "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01_rechunked-100k-page-8mb.json\n", + "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02.h5\n", + "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02.json\n", + "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-4mb.h5\n", + "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-8mb.h5\n", + "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-4mb.h5\n", + "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-8mb.h5\n", + "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-8mb.json\n", + "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01.h5\n", + "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01-page-only-4mb.h5\n", + "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01-page-only-4mb.h5\n", + "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01_rechunked-100k-page-4mb.h5\n", + "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20230618223036_13681901_006_01_rechunked-100k-page-8mb.h5\n", + "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02.h5\n", + "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-4mb.h5\n", + "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02-page-only-8mb.h5\n", + "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-4mb.h5\n", + "Processing: s3://its-live-data/test-space/cloud-experiments/h5cloud/atl03/ATL03_20181120182818_08110112_006_02_rechunked-100k-page-8mb.h5\n" + ] + } + ], + "source": [ + "optimized_h5py_benchmarks = []\n", + "optimized_xarray_benchmarks = []\n", + "\n", + "for key, dataset in test_dict.items():\n", + " for k, link in dataset[\"links\"].items():\n", + " print(f\"Processing: {link}\")\n", + " try:\n", + " log_filename = f\"logs/fsspec-xarray-{key}-{k}.log\"\n", + " \n", + " # Create a new FileHandler for each iteration\n", + " file_handler = logging.FileHandler(log_filename)\n", + " file_handler.setLevel(logging.DEBUG)\n", + "\n", + " # Add the handler to the root logger\n", + " logging.getLogger().addHandler(file_handler)\n", + " \n", + " io_params = {\n", + " \"fsspec_params\": {},\n", + " \"h5py_params\": {}\n", + " }\n", + " \n", + " if \"rechunked\" in link or \"page\" in link:\n", + " io_params ={\n", + " \"fsspec_params\": {\n", + " \"cache_type\": \"blockcache\",\n", + " \"block_size\": 8*1024*1024\n", + " },\n", + " \"h5py_params\" : {\n", + " \"driver_kwds\": {\n", + " \"page_buf_size\": 32*1024*1024,\n", + " \"rdcc_nbytes\": 4*1024*1024\n", + " }\n", + "\n", + " }\n", + " }\n", + "\n", + " if \"kerchunk\" in k or link.endswith(\".json\"):\n", + " continue\n", + " \n", + " start = time.time()\n", + " fo = fs.open(link, mode='rb', **io_params[\"fsspec_params\"])\n", + " ds = xr.open_dataset(fo,\n", + " group=dataset[\"group\"],\n", + " **io_params[\"h5py_params\"],\n", + " engine=\"h5netcdf\",\n", + " decode_cf=False)\n", + " data_mean = ds[dataset[\"variable\"]].mean()\n", + " elapsed = time.time() - start\n", + " optimized_xarray_benchmarks.append(\n", + " {\"tool\": \"xarray\",\n", + " \"dataset\": key,\n", + " \"cloud-aware\": \"yes\",\n", + " \"format\": k,\n", + " \"file\": link,\n", + " \"time\": elapsed,\n", + " \"shape\": ds[dataset[\"variable\"]].values.shape,\n", + " \"bytes_requested\": fo.cache.total_requested_bytes,\n", + " \"mean\": data_mean})\n", + " \n", + " logging.getLogger().removeHandler(file_handler)\n", + " file_handler.close()\n", + "\n", + " except Exception as e:\n", + " print(e)\n", + " \n", + "for key, dataset in test_dict.items():\n", + " for k, link in dataset[\"links\"].items():\n", + " try:\n", + " if \"kerchunk\" in k or link.endswith(\".json\"):\n", + " continue \n", + " print (f\"Processing: {link}\")\n", + " log_filename = f\"logs/fsspec-h5py-{key}-{k}_default.log\"\n", + " \n", + " # Create a new FileHandler for each iteration\n", + " file_handler = logging.FileHandler(log_filename)\n", + " file_handler.setLevel(logging.DEBUG)\n", + "\n", + " # Add the handler to the root logger\n", + " logging.getLogger().addHandler(file_handler)\n", + " # this is mostly IO so no perf_counter is needed\n", + " start = time.time()\n", + " io_params = {\n", + " \"fsspec_params\": {},\n", + " \"h5py_params\": {}\n", + " }\n", + " \n", + " if \"rechunked\" in link or \"page\" in link:\n", + " io_params ={\n", + " \"fsspec_params\": {\n", + " \"cache_type\": \"blockcache\",\n", + " \"block_size\": 8*1024*1024\n", + " },\n", + " \"h5py_params\" : {\n", + " \"page_buf_size\": 32*1024*1024,\n", + " \"rdcc_nbytes\": 4*1024*1024\n", + " }\n", + " }\n", + " fo = fs.open(link, mode=\"rb\", **io_params[\"fsspec_params\"])\n", + " with h5py.File(fo, **io_params[\"h5py_params\"]) as f:\n", + " path = f\"{dataset['group']}/{dataset['variable']}\"\n", + " data = f[path][:]\n", + " data_mean = data.mean()\n", + " elapsed = time.time() - start\n", + " optimized_h5py_benchmarks.append(\n", + " {\"tool\": \"h5py\",\n", + " \"dataset\": key,\n", + " \"cloud-aware\": \"yes\",\n", + " \"format\": k,\n", + " \"file\": link,\n", + " \"time\": elapsed,\n", + " \"shape\": data.shape,\n", + " \"bytes_requested\": fo.cache.total_requested_bytes,\n", + " \"mean\": data_mean})\n", + "\n", + " logging.getLogger().removeHandler(file_handler) \n", + " file_handler.close()\n", + " \n", + "\n", + " except Exception as e:\n", + " print(e)" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "id": "46cf8da9-24f3-4444-841f-1d8aa8697eb6", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1QAAAKfCAYAAABpOYmeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAACX7klEQVR4nOzdd3xO9///8eclQyIhxIwSEYm9V6VGokaMEv2o2Y9R2tKatdVeRVGzRftFFEUVpTVKU7v2aLVGbaohFImddX5/+OX6uGTIdblI8Ljfbrlx3uec93mdK9dJrmfOOe9jMgzDEAAAAADAahnSugAAAAAAeF4RqAAAAADARgQqAAAAALARgQoAAAAAbESgAgAAAAAbEagAAAAAwEYEKgAAAACwEYEKAAAAAGxEoAIAAAAAGxGo8FIbPny4TCaTNm/enNalmAUFBclkMqV1GVbx8fGRj4/PU+s/PX2fnsfvD56t6OhoDR48WIUKFZKzs3O6ee++rL777juZTCbt3r3b3Hb27FmZTCa1b98+7QqzwubNm2UymTR8+HC79tu+fXuZTCadPXvWrv2mV0FBQXr11VdlGEZal4IXDIEKL5z9+/erY8eO8vf3l5ubm1xdXVWoUCG1adNGGzduTOvynksv2y9de0n4ENS5c+dkl1myZEmSH5QSglvCl5OTk7Jnz66yZcuqY8eOWr9+veLj45Ps08fHx2LdR78e/nCfEFaT+nJxcbHrvtarV0/58+dP1L5p0ya1aNFC+fPnV8aMGeXp6alq1app8uTJunfvXqprSC8mTpyoMWPGyNvbW/369dOwYcOe6h8ckLyYmBgNHDhQDRo00KuvvprW5bx0HhcEn/XvlmHDhmnPnj1asmTJM9keXh6OaV0AYC/x8fHq06ePJk+eLEdHR73++utq3LixnJycdPr0aa1Zs0YLFy7UyJEjNWTIkLQu94USFhb2VPvv2rWrWrZsKW9v76e6nfSod+/ecnd3V3x8vG7cuKGjR49q0aJFmjt3rl577TUtXrw4ydfFwcFBgwcPTrLPpD7ct2vXLlG7o6P9fkXcvHlTmzZt0nvvvWdui42NVZcuXfTll1/Kzc1N9evXl5+fnyIjI7Vhwwb16tVLs2bN0po1a+Tn52e3Wp62tWvXyt3dXRs2bJCTk1Nal/NSCw0N1cmTJ/XVV1+ldSlPpHLlyjp69Khy5MiR1qU812rWrKkKFSpo6NChatmyJVcbwG4IVHhhDB48WJMnT1bZsmX13XffqVChQhbz7969qxkzZujff/9NowpfXI++1vaWI0eOl/aDRJ8+fZQnTx6LtitXrqh79+5asmSJgoODtW/fPrm5uVks4+joaNXlQe3bt1dQUJAdKk7aunXrFB0drZCQEHPbwIED9eWXX6pSpUpauXKlXnnlFfO8uLg4jRw5UiNHjlT9+vW1f/9+ZcmS5anVZ0///POPsmfPTphKB2bNmiVvb28FBgamdSlPJFOmTCpatGhal/FC+O9//6uPPvpIYWFhql27dlqXgxcEl/zhhXDy5El9+umnyp49u9avX5/kB3xXV1f17dtXI0aMSFWfP/74o2rWrCkPDw+5urqqbNmymjJliuLi4iyWS+mShpSu09++fbsCAwPl5uam7Nmzq0WLFrpw4UKqakvKr7/+qoYNG8rT01MuLi4qWrSohg8frjt37iRa1mQyKSgoSBcuXFCLFi2UPXt2ubm5KSgoSL/++qvFsj4+Ppo/f74kqWDBgubLwR7+8J3UPVQP3/c0b948lSpVSq6uripYsKCmTZsmSTIMQ1OnTlXRokXl4uKiwoULa8GCBYnqTeoeqkcviXv069HvR0REhD766CP5+fkpY8aMypEjh5o2bao//vgjydfT3t8fe8qZM6cWLVqkWrVq6dixY/r888/TuqTHWrVqlbJkyWJ+35w4cUKfffaZPD099cMPP1iEKenBGbYRI0aodevWOnnypCZOnJiq7SS8L+7du6d+/fopf/78cnFxUalSpTR37twU66tVq5ayZcsmFxcXlSxZUhMnTkx0vIeGhspkMik0NFRr1qxR9erVlTlzZvn4+Jjfp2fOnNG5c+eSPFZiY2M1efJklSlTRq6urvLw8FDNmjW1Zs2aRDWltC3pf5dLnT59WhMnTlThwoXl6uqq4sWLmy9piomJ0dChQ1WwYEG5uLiodOnS+umnnxJta//+/eratatKlixp/plXqlQpjRs3TjExMYmWTzjmb9++rV69eumVV15RxowZVbp0aX333XdJvsbR0dGaOnWqKleurMyZM8vd3V3FixdXr169dP36dYtlrT1ek3L48GEdOHBATZs2tepMxM2bNzVs2DCVKFFCrq6uypo1q+rVq6ft27cnWjY8PFw9evSQv7+/XF1d5enp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V65cojYvLy9JUtmyZZOc9/DzYlLj8uXLatSokeLj47V69WrlzZvXPG/Xrl2SpEuXLiV5n9uxY8fM/5YsWdLq709qdOrUSbNmzUpy3pIlS9SqVSur+nuYkczzVDJmzJiqIccTLl9K4Ofnp8GDByt37tx6//33NXr06CQvebPG6tWrFRQUJA8PD5vWT9hHay6zTer7l9D28PG7a9cuubm5ac6cOUn24+rqan6PPKxy5cqpriXBwYMH5erqmuS6CcdvUj9bHret5I6x06dPJzrGHBwclCtXLl28eNGiPTo6WjNmzNCSJUt07Ngx3bp1y+K99c8//yTaRtasWS0uG0yQL18+7dy50zx97NgxRUVFqXbt2o+9ZNba4zUl//77rxwcHCx+7qVk7969iouL071795Lc9okTJ8zbfuONN1SjRg3lyZNHY8eO1aFDh9SwYUNVq1ZNpUqVsnivFitWTKVKldI333yjCxcuqEmTJqpevbrKly8vBweHVNWWlDfeeEMDBgxQly5dtHHjRtWrV0/VqlVT4cKFre7LmuNFktavX6+ff/450TpOTk5JHi+2SNjWsWPHkvx+XLp0SfHx8frrr79UsWJFc3vBggUfO4iRp6enJOnq1at2qRUgUOGFkCdPHh07dkwXL15UkSJFnqivhBuJk7uvI6kPI9aIjIw095OU3LlzJwpUjw6kUaBAAXOgely9efLk0fHjxxUVFWXxwSKl7T9c55NKamS2hOG4k5sXGxub6v7v3bunJk2a6MKFC1q2bJnKly9vMf/atWuSpDVr1iR543+C27dvS7L++5OW7t+/r2vXrsnBwcH8AcFe2rVrpw8//FA7dux4on4OHTqkc+fOqW/fvhbtCcfshQsXHnvM/v333+Z1Uiup719S7+1r164pNjY2xcFqEt4bSfVljaioqGTvlUnYt6SOu8dty5Zj7NGBJt566y398MMPKly4sPk+TCcnJ924cUNTp07V/fv3E/WTXEB2dHS0GMzgxo0bkpRo4JGkWHu8psTV1VVxcXGKiYlJ1YiLCdvesWNHiu/7hG17eHho586dGjZsmH744QetXbtW0oNAOXDgQH344YeSHrwev/zyi4YPH64VK1aYB4zIkSOHunXrpkGDBtkUrAoWLKidO3dqxIgRWrdunfkPH0WKFNGoUaPUrFmzVPeV1PGSK1cuZciQIdHxIklj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f/zxRwUFBSlz5szKlCmTKlWqpNDQ0GdXaDpDUAUA2xGoAOAldOrUKVWoUEH+/v7KlSuXTX3ExMTYuaqnIz4+XmvWrFFISIgkafr06QoJCdFrr72m3bt36/fff1fLli3VuXNn9enT55nXFxcXp/j4+Ge+3afheXlPAIA9EagA4AUTFBSk7t27q1+/fvL09FSePHk0fPhw83wfHx8tX75cX3/9tUwmk9q3by9JOn/+vEJCQuTu7q4sWbKoefPmunz5snm94cOHq2zZspo7d658fX2VMWNGGYYhk8mk2bNn64033lCmTJlUrFgx7dy5UydPnlRQUJDc3NwUEBCgU6dOWdT5ww8/qEKFCnJxcZGvr69GjBih2NhY8/wTJ06oRo0acnFxUfHixbVx40abXo8dO3YoQ4YMevXVV3XhwgX17t1bPXv21CeffKLixYvLz89PvXv31oQJEzRp0iTt3r072b58fHw0atQotW7dWu7u7sqbN6+mT59uscxnn32mUqVKyc3NTfnz59eHH36oW7dumeeHhoYqa9as+vHHH1W8eHFlzJhR586d0969e1WnTh3lyJFDHh4eCgwM1IEDByz6fhqvtY+PjyTpzTfflMlkMk8/br2EembNmqWQkBC5ublp9OjRun79ut5++23lzJlTrq6u8vf317x586z6ngHAc8UAADzX2rVrZ4SEhJinAwMDjSxZshjDhw83/vrrL2P+/PmGyWQyNmzYYBiGYURERBj16tUzmjdvboSHhxs3btww4uPjjXLlyhnVqlUz9u3bZ+zatcsoX768ERgYaO532LBhhpubmxEcHGwcOHDA+O2334z4+HhDkvHKK68YS5cuNY4fP240adLE8PHxMV5//XVj/fr1xpEjR4wqVaoY9erVM/e1fv16I0uWLEZoaKhx6tQpY8OGDYaPj48xfPhwwzAMIy4uzihZsqQRFBRkHDx40NiyZYtRrlw5Q5KxcuXKVL8WhmEYffr0MTp27GgYhmF89tlnhiTjn3/+SbTu/fv3DXd3d6NHjx7J9l+gQAEjc+bMxtixY43jx48b06ZNMxwcHMyvrWEYxuTJk41ffvnFOH36tBEWFmYUKVLE+OCDD8zz582bZzg5ORmvvfaasWPHDuPYsWPGrVu3jLCwMGPBggXGkSNHjCNHjhgdO3Y0cufObURFRZnXfRqvdUREhCHJmDdvnhEeHm5ERESkar2EenLlymXMmTPHOHXqlHH27FmjS5cuRtmyZY29e/caZ86cMTZu3GisXr062dcUAJ53BKokbNmyxXjjjTcMLy+vx/7yTs7SpUuNMmXKGK6uroa3t7fx6aef2r9QADCSDlTVqlWzWKZSpUpG//79zdMhISFGu3btzNMbNmwwHBwcjPPnz5vb/vzzT0OSsWfPHsMwHgQqJycn8wfuBJKMwYMHm6d37txpSDLmzJljblu8eLHh4uJinq5evbrxySefWPSzYMECw8vLyzAMw/jpp58MBwcH48KFC+b569atsylQFS5c2PyBvnPnzoaHh0ey65cuXdqoX79+svMLFChgEVYMwzBatGiR4jrffvutkT17dvP0vHnzDEnGoUOHkl3HMAwjNjbWyJw5s/HDDz+Y257Ga53Q76Ova2rX69mzp8UyjRo1Mt55550U9w0AXiSOz/6cWPp3+/ZtlSlTRu+8846aNm1q9frr1q3T22+/renTp6tu3bo6evSo3n33Xbm6uqpr165PoWIAsFS6dGmLaS8vL0VERCS7/NGjR5U/f37lz5/f3Fa8eHFlzZpVR48eVaVKlSRJBQoUUM6cOVPcXu7cuSVJpUqVsmi7d++eoqKilCVLFu3fv1979+7VmDFjzMvExcXp3r17unPnjo4ePSpvb2/ly5fPPD8gICC1u2+xX3///bdq166dquWN/38JY0oerSMgIEBTpkwxT2/atEmffPKJjhw5oqioKMXGxurevXu6ffu23NzcJEnOzs6JvkcREREaOnSofvnlF12+fFlxcXG6c+eOzp8/b7GcvV/rTJkyJbmfqV2vYsWKFut98MEHatq0qQ4cOKC6deuqSZMmeu2115J+MQHgBUCgSkL9+vVVv379ZOdHR0dr8ODBWrRokW7cuKGSJUtq/PjxCgoKkiQtWLBATZo0UefOnSVJvr6+6t+/v8aPH68uXbo89pc1ADwpJycni2mTyZTiwAfJBYlH2xMCQUrbS1g+qbaEGuLj4zVixAj95z//SdSXi4uLDMNI1G7Lz87Vq1erTp06cnV1lSQVLlxYkZGR+ueff5Q3b16LZaOjo3X69Gm9/vrrVm8nobZz586pQYMG6ty5s0aNGiVPT09t375dHTt2tBiwwdXVNdH+tG/fXleuXNGUKVNUoEABZcyYUQEBAYqOjrZYzt6vdXJSu96j74n69evr3LlzWrNmjX7++WfVqlVLXbp00cSJE5PdFgA8zwhUNnjnnXd09uxZLVmyRHnz5tXKlStVr149HT58WP7+/rp//36iv/i5urrq77//1rlz5yxu+AWA9KB48eI6f/68Lly4YD5LdeTIEUVGRqpYsWJ231758uV1/Phx+fn5pVjPw8Fn586dVm9n1apVevfdd83TTZs2Vb9+/TRp0iRNmjTJYtlZs2bp9u3batWqVYp97tq1K9F00aJFJUn79u1TbGysJk2apAwZHoz79O2336aq1m3btumLL75QgwYNJEkXLlzQ1atXU7VuSh73WksPAllcXJzV6yUnZ86cat++vdq3b6/q1aurb9++BCoALywClZVOnTqlxYsX6++//zb/ku/Tp4/Wr1+vefPm6ZNPPlFwcLA++ugjtW/fXjVr1tTJkyfNl4OEh4cTqACkO7Vr11bp0qX19ttva8qUKYqNjdWHH36owMDARJd02cPQoUP1xhtvKH/+/GrWrJkyZMig33//XYcPH9bo0aNVu3ZtFSlSRG3bttWkSZMUFRWlQYMGWbWNiIgI7d271+L5St7e3vr000/Vp08fubi4qE2bNnJyctKqVav08ccfq3fv3nr11VdT7HfHjh369NNP1aRJE23cuFHLli3TmjVrJEmFChVSbGyspk+frkaNGmnHjh2aNWtWqur18/PTggULVLFiRUVFRalv377mM2tP4nGvtfRgpL+wsDBVrVpVGTNmVLZs2VK1XnLbq1ChgkqUKKH79+/rxx9/fCqhHADSC4ZNt9KBAwdkGIYKFy4sd3d389eWLVvMw9S+99576tq1q9544w05OzurSpUqatmypSTJwcEhLcsHgCQlPNg1W7ZsqlGjhmrXri1fX18tXbr0qWwvODhYP/74ozZu3KhKlSqpSpUq+uyzz1SgQAFJUoYMGbRy5Urdv39flStX1rvvvmtxL09q/PDDD3r11VcTPWfro48+0sqVK7Vt2zZVrFhRJUuW1DfffKOZM2em6ixK7969tX//fpUrV06jRo3SpEmTFBwcLEkqW7asPvvsM40fP14lS5bUokWLNHbs2FTVO3fuXF2/fl3lypVTmzZt1L17d5ufEfawx73WkjRp0iRt3LhR+fPnV7ly5VK9XlKcnZ01cOBAlS5dWjVq1JCDg4OWLFnyxPsBAOmVyUjqQnWY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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df = pd.DataFrame.from_dict(optimized_h5py_benchmarks + optimized_xarray_benchmarks + kerchunk_benchmarks)\n", + "\n", + "pivot_df = df.pivot_table(index=['tool','dataset'], columns=['format'], values='bytes_requested', aggfunc='mean')\n", + "\n", + "# Plotting\n", + "pivot_df.plot(kind='bar', figsize=(10, 6))\n", + "\n", + "plt.suptitle('Cloud-optimized HDF5 I/O performance (less is better)', fontsize=14)\n", + "plt.title(\"Informed I/O parameters\", fontsize=10)\n", + "plt.xlabel('Tool')\n", + "plt.ylabel('Requested Bytes')\n", + "plt.xticks(rotation=90)\n", + "plt.legend(title='Format')\n", + "ax = plt.gca()\n", + "plt.grid(False)\n", + "# ax.yaxis.grid(True)\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "id": "b1aca433-177b-4849-932f-40bacb8f6668", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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BVdXV6iqqqJatWoy7Vfc8Zo0aYIGDRogKysL+/bt+yRJWyIiIvpy8CmlREREREWQSCTYvXs3qlWrhtatW6N9+/awtLTEtm3bPsnxPDw8sG/fPkRGRsLZ2RnNmzfHggULUKtWLQDvnvS5a9cuZGVloWnTpvjxxx8LPR2zNH/++SeaNWuGGjVqSJWPHj0au3btwsmTJ+Hk5AQ7Ozts3rwZK1askGkUVkBAAOLj49GoUSNMmzYNoaGh8PDwAAA4OjpiwYIFmDNnDuzs7LBp0ybMmjVLpnjXrl2LFy9eoFGjRujbty9GjBhRKPbyKO1cA0BoaCgiIyNhZmaGRo0aybxfUVRUVDBu3Dg4ODigdevWUFRUxNatWz+6H0RERPTlkghFLQhCRERERP853bp1Q8uWLREUFCS3Ni0sLDBq1CiMGjVKbm0SERERVXYc4UZERERURbRs2bLU9diIiIiI6ONxDTciIiKiKkKeI9uIiIiIqHicUkpERERERERERCRHnFJKREREREREREQkR0y4ERERERERERERyRETbkRERERERERERHLEhyaUID8/H//88w+0tbUhkUgqOhwiIiIiIiIiIqoggiDg1atXMDU1hYJCyWPYmHArwT///AMzM7OKDoOIiIiIiIiIiL4QDx8+RM2aNUusw4RbCbS1tQG8O5E6OjoVHA0REREREREREVWU9PR0mJmZifmikjDhVoKCaaQ6OjpMuBERERERERERkUzLjvGhCURERERERERERHLEhBsREREREREREZEcMeFGREREREREREQkR1zD7SPl5OQgNze3osMgqnIUFRWhrKws09x5IiIiIiIios+JI9w+wqtXr/DmzZuKDoOoSsrOzsazZ8+Y8CYiIiIiIqIvDke4lVN+fj5ycnKgr69f0aEQVVmampp49uwZDA0NOdKNiIiIiIiIvhgc4VZOOTk5UFVVregwiKo0iUQCdXV15OTkVHQoRERERERERCIm3MopPz8fCgo8fUQVTVFREXl5eRUdBhEREREREZGIGSMiIiIiIiIiIiI5YsKNiIiIiIiIiIhIjphwIyIiIiIiIiIikiMm3OiL5+vrC4lEUuh1+/btig5Nyr179yCRSJCYmFjRoRARERERERFRBVKq6ACIZNGpUyesW7dOqqx69eplbic7OxsqKiryCouIiIiIiIiIqBCOcKNKQVVVFcbGxlIvRUVFHD9+HE2bNoWqqipMTEwwduxY5Obmivu5u7tj2LBh+Pnnn2FoaIgOHTogJiYGEokEhw8fRqNGjaCuro62bdsiNTUVBw8eRL169aCjowMfHx+8efNGbOvQoUNo2bIl9PT0YGBggK+//hrJycni9tq1awMAGjVqBIlEAnd39892foiIiIiIiIjoy8GEG1Vajx49QpcuXeDs7IxLly5hxYoVWLNmDaZPny5VLyIiAkpKSjh9+jRWrVolloeEhGDp0qU4c+YMHj58CG9vbyxcuBCbN2/G/v37ERkZiSVLloj1MzIy8PPPPyM2NhZRUVFQUFDAN998g/z8fADAhQsXAABHjx7F48ePsXPnzs9wFoiIiIiIiIjoS8MppVQp7Nu3D1paWuL7zp07o27dujAzM8PSpUshkUhga2uLf/75B8HBwZg0aRIUFN7lk62srDB37lxx35SUFADA9OnT4erqCgDw8/PDuHHjkJycDEtLSwDAd999h+joaAQHBwMAevToIRXTmjVrUKNGDSQlJcHOzk6c4mpgYABjY+NPdCaIiIiIiIiovCzG7i/Xfvdme8o5Evqv4wg3qhTatGmDxMRE8bV48WJcu3YNLi4ukEgkYj1XV1e8fv0af//9t1jm5ORUZJsODg7iz0ZGRtDQ0BCTbQVlqamp4vvk5GT06dMHlpaW0NHREaeQPnjwQG79JCIiIiIiIqLKjyPcqFLQ1NSElZWVVJkgCFLJtoIyAFLlmpqaRbaprKws/iyRSKTeF5QVTBcFgK5du8LMzAyrV6+Gqakp8vPzYWdnh+zs7PJ1ioiIiIiIiIj+kzjCjSqt+vXr48yZM2KSDQDOnDkDbW1tfPXVV3I91r///otr165hwoQJaNeuHerVq4cXL15I1Sl4+mleXp5cj01ERERERERElQsTblRpDRkyBA8fPsTw4cNx/fp17NmzB5MnT8bPP/8srt8mL9WqVYOBgQF+/fVX3L59G8eOHcPPP/8sVadGjRpQV1fHoUOH8OTJE6Slpck1BiIiIiIiIiKqHJhwo0rrq6++woEDB3DhwgU0bNgQgwYNgp+fHyZMmCD3YykoKGDr1q2Ij4+HnZ0dRo8ejXnz5knVUVJSwuLFi7Fq1SqYmprCy8tL7nEQERERERER0ZdPIrw/H4+kpKenQ1dXF2lpadDR0ZHalpmZCQBQV1eviNCI6P/jvUhERERERLLiU0rpY5SUJ/oQR7gRERERERERERHJERNuREREREREREREcsSEGxERERERERERkRwx4UZERERERERERCRHTLgRERERERERERHJERNuREREREREREREcsSEGxERERERERERkRwx4UZERERERERERCRHTLiRTEJCQuDo6Fimfdzd3TFq1KgKj4OIiIiIiIiI6HNSqugAqHIYM2YMhg8fXqZ9du7cCWVl5U8UERERERERERHRl4kJNzmzGLv/sx7v3mzPT9q+IAjIy8uDlpYWtLS0yrSvvr7+J4qKiIiIiIiIiOjLxSmlVVBWVhZGjBiBGjVqQE1NDS1btkRsbCwAICYmBhKJBIcPH4aTkxNUVVVx8uTJQlM5c3NzMWLECOjp6cHAwADBwcHo378/unfvLtb5cEqphYUFZs6ciYEDB0JbWxvm5ub49ddfpWILDg5G3bp1oaGhAUtLS0ycOBE5OTmf8nQQEREREREREckVE25VUFBQEHbs2IGIiAgkJCTAysoKHh4eeP78uVSdWbNm4dq1a3BwcCjUxpw5c7Bp0yasW7cOp0+fRnp6Onbv3l3qsUNDQ+Hk5ISLFy9iyJAhGDx4MK5fvy5u19bWRnh4OJKSkrBo0SKsXr0aYWFhcuk3EREREREREdHnwIRbFZORkYEVK1Zg3rx56Ny5M+rXr4/Vq1dDXV0da9asEetNnToVHTp0QJ06dWBgYFConSVLlmDcuHH45ptvYGtri6VLl0JPT6/U43fp0gVDhgyBlZUVgoODYWhoiJiYGHH7hAkT0KJFC1hYWKBr164ICAjA9u3b5dF1IiIiIiIiIqLPgmu4VTHJycnIycmBq6urWKasrIymTZvi2rVrcHZ2BgA4OTkV20ZaWhqePHmCpk2bimWKiopo0qQJ8vPzSzz++6PlJBIJjI2NkZqaKpb98ccfWLhwIW7fvo3Xr18jNzcXOjo6Ze4nEREREREREVFF4Qi3KkYQBADvkl0flr9fpqmpWWpbRbVRmg+fWiqRSMQk3blz59C7d2907twZ+/btw8WLFzF+/HhkZ2eX2i4RERERERER0ZeCCbcqxsrKCioqKjh16pRYlpOTg7i4ONSrV0+mNnR1dWFkZIQLFy6IZXl5ebh48eJHxXb69GnUqlUL48ePh5OTE6ytrXH//v2PapOIiIiIiIiI6HPjlNIqRlNTE4MHD0ZgYCD09fVhbm6OuXPn4s2bN/Dz88OlS5dkamf48OGYNWsWrKysYGtriyVLluDFixeFRr2VhZWVFR48eICtW7fC2dkZ+/fvx65du8rdHhERERERERFRRfiiRrjNmjULEokEo0aNEssEQUBISAhMTU2hrq4Od3d3XL16VWq/rKwsDB8+HIaGhtDU1ES3bt3w999/f+boK4/Zs2ejR48e6Nu3Lxo3bozbt2/j8OHDqFatmsxtBAcHw8fHB/369YOLiwu0tLTg4eEBNTW1csfl5eWF0aNHY9iwYXB0dMSZM2cwceLEcrdHRERERERERFQRJIIsC299BrGxsfD29oaOjg7atGmDhQsXAgDmzJmDGTNmIDw8HHXr1sX06dNx4sQJ3LhxA9ra2gCAwYMH488//0R4eDgMDAwQEBCA58+fIz4+HoqKiuWOKT09Hbq6ukhLSyu0cH9mZiYAQF1dvdzt/5fk5+ejXr168Pb2xrRp0yo6HKpCeC8SEREREZGsLMbuL9d+92Z7yjkSqoxKyhN96IsY4fb69Wt8//33WL16tdQoK0EQsHDhQowfPx7ffvst7OzsEBERgTdv3mDz5s0A3j0xc82aNQgNDUX79u3RqFEjbNy4EZcvX8bRo0crqkv/effv38fq1atx8+ZNXL58GYMHD8bdu3fRp0+fig6NiIiIiIiIiKhCfREJt6FDh8LT0xPt27eXKr979y5SUlLQsWNHsUxVVRVubm44c+YMACA+Ph45OTlSdUxNTWFnZyfWIflTUFBAeHg4nJ2d4erqKiY4ZX3wAhERERERERHRf1WFPzRh69atSEhIQGxsbKFtKSkpAAAjIyOpciMjI/HplSkpKVBRUSm0/piRkZG4v6weP36Mx48fi+9fv35dpv2rEjMzM5w+fbqiwyAiIiIiIiIi+uJUaMLt4cOHGDlyJI4cOVLiYvsfPvlSEIRSn4YpS50PrVq1ClOmTCnTPkRERERERERERO+r0Cml8fHxSE1NRZMmTaCkpAQlJSUcP34cixcvhpKSkjiy7cORaqmpqeI2Y2NjZGdn48WLF8XWkZW/vz/i4+PF1/Hjxz+id0REREREREREVBVVaMKtXbt2uHz5MhITE8WXk5MTvv/+eyQmJsLS0hLGxsaIjIwU98nOzsbx48fRokULAECTJk2grKwsVefx48e4cuWKWEdWJiYmaNy4sfhydHSUSz+JiIiIiIiIiKjqqNAppdra2rCzs5Mq09TUhIGBgVg+atQozJw5E9bW1rC2tsbMmTOhoaEhPg1TV1cXfn5+CAgIgIGBAfT19TFmzBjY29sXeggDERERERERERHRp1bhD00oTVBQEDIzMzFkyBC8ePECzZo1w5EjR6CtrS3WCQsLg5KSEry9vZGZmYl27dohPDwcioqKFRg5ERERERERERFVRRJBEISKDuJLlZ6eDl1dXaSlpUFHR0dqW2ZmJgBAXV29IkIjov+P9yIREREREcnKYuz+cu13b7annCOhyqikPNGHKnQNN6o8QkJCyrymnbu7O0aNGvXZ4/gUxy1Nec5PecTExEAikeDly5ef/FhEREREREREVD5f/JRS+jKMGTMGw4cPL9M+O3fuhLKy8ieKiIiIiIiIiIjoy8SEm7yF6H7m46V90uYFQUBeXh60tLSgpaVVpn319fU/UVSfV3Z2NlRUVCo6DCIiIiIiIiKqJDiltArKysrCiBEjUKNGDaipqaFly5aIjY0F8H9TFg8fPgwnJyeoqqri5MmThaZM5ubmYsSIEdDT04OBgQGCg4PRv39/dO/eXazz4dROCwsLzJw5EwMHDoS2tjbMzc3x66+/SsUWHByMunXrQkNDA5aWlpg4cSJycnI+qr+HDh2Crq4u1q9fDwB49OgRevXqhWrVqsHAwABeXl64d++eWN/X1xfdu3fHrFmzYGpqirp16wIA/v77b/Tu3Rv6+vrQ1NSEk5MTzp8/L3WsDRs2wMLCArq6uujduzdevXol1f+FCxdK1Xd0dERISIj4XiKR4LfffsM333wDDQ0NWFtbY+/evcX2LTMzE56enmjevDmeP39ezjNERERERERERPLEhFsVFBQUhB07diAiIgIJCQmwsrKCh4eHVMImKCgIs2bNwrVr1+Dg4FCojTlz5mDTpk1Yt24dTp8+jfT0dOzevbvUY4eGhsLJyQkXL17EkCFDMHjwYFy/fl3crq2tjfDwcCQlJWHRokVYvXo1wsLCyt3XrVu3wtvbG+vXr0e/fv3w5s0btGnTBlpaWjhx4gROnToFLS0tdOrUCdnZ2eJ+UVFRuHbtGiIjI7Fv3z68fv0abm5u+Oeff7B3715cunQJQUFByM/PF/dJTk7G7t27sW/fPuzbtw/Hjx/H7NmzyxzzlClT4O3tjb/++gtdunTB999/X2QyLS0tDR07dkR2djaioqL+MyMKiYiIiIiIiCo7JtyqmIyMDKxYsQLz5s1D586dUb9+faxevRrq6upYs2aNWG/q1Kno0KED6tSpAwMDg0LtLFmyBOPGjcM333wDW1tbLF26FHp6eqUev0uXLhgyZAisrKwQHBwMQ0NDxMTEiNsnTJiAFi1awMLCAl27dkVAQAC2b99err4uX74cgwYNwp49e+Dl5QXgXQJOQUEBv/32G+zt7VGvXj2sW7cODx48kIpDU1MTv/32Gxo0aAA7Ozts3rwZT58+xe7du9GyZUtYWVnB29sbLi4u4j75+fkIDw+HnZ0dWrVqhb59+yIqKqrMcfv6+sLHxwdWVlaYOXMmMjIycOHCBak6T548gZubG2rUqIH9+/dDU1OzXOeIiIiIiIiIiOSPa7hVMcnJycjJyYGrq6tYpqysjKZNm+LatWtwdnYGADg5ORXbRlpaGp48eYKmTZuKZYqKimjSpInUiK+ivD9aTiKRwNjYGKmpqWLZH3/8gYULF+L27dt4/fo1cnNzi33U7smTJ9G5c2fx/apVq/D9998DAHbs2IEnT57g1KlTUnHGx8fj9u3b0NbWlmrr7du3SE5OFt/b29tLrduWmJiIRo0alTiKzMLCQqpdExMTqb7J6v1zpKmpCW1t7ULttG/fHs7Ozti+fTsUFRXLfAwiIiIiIiIi+nSYcKtiBEEA8C7Z9WH5+2WyjJgqqo3SfPjUUolEIibpzp07h969e2PKlCnw8PCArq4utm7ditDQ0CLbcnJyQmJiovjeyMhI/NnR0REJCQlYt24dnJ2dxVjz8/PRpEkTbNq0qVB71atXF3/+sP/q6uof1TcAUFBQKHSOilqfrrR2AMDT0xM7duxAUlIS7O3tS42NiIiIiIiIiD4fTimtYqysrKCiooJTp06JZTk5OYiLi0O9evVkakNXVxdGRkZS0xzz8vJw8eLFj4rt9OnTqFWrFsaPHw8nJydYW1vj/v37xdZXV1eHlZWV+Hp/dFmdOnUQHR2NPXv2YPjw4WJ548aNcevWLdSoUUNqXysrK+jqFv+EWQcHByQmJn7UgwmqV6+Ox48fi+/T09Nx9+7dcrU1e/Zs9O/fH+3atUNSUlK5YyIiIiIiIiIi+WPCrYrR1NTE4MGDERgYiEOHDiEpKQk//fQT3rx5Az8/P5nbGT58OGbNmoU9e/bgxo0bGDlyJF68eFFo1FtZWFlZ4cGDB9i6dSuSk5OxePFi7Nq1q9zt1a1bF9HR0dixY4f4tNTvv/8ehoaG8PLywsmTJ3H37l0cP34cI0eOxN9//11sWz4+PjA2Nkb37t1x+vRp3LlzBzt27MDZs2dljqdt27bYsGEDTp48iStXrqB///4fNR10/vz5+P7779G2bVupB08QERERERERUcXilNIqaPbs2cjPz0ffvn3x6tUrODk54fDhw6hWrZrMbQQHByMlJQX9+vWDoqIi/ve//8HDw+OjEkheXl4YPXo0hg0bhqysLHh6emLixIkICQkpd5s2NjY4duwY3N3doaioiNDQUJw4cQLBwcH49ttv8erVK3z11Vdo165dsWvFAYCKigqOHDmCgIAAdOnSBbm5uahfvz6WLVsmcyzjxo3DnTt38PXXX0NXVxfTpk0r9wi3AmFhYcjLy0Pbtm0RExODunXrflR7RERERERERPTxJIIsC29VUenp6dDV1UVaWlqhZExmZiYA2db2qgry8/NRr149eHt7Y9q0aRUdDlUhvBeJiIiIiEhWFmP3l2u/e7M95RwJVUYl5Yk+xBFuVC7379/HkSNH4ObmhqysLCxduhR3795Fnz59Kjo0IiIiIiIiIqIKxTXcqFwUFBQQHh4OZ2dnuLq64vLlyzh69KjMD14gIiIiIiIiIvqv4gg3KhczMzOcPn26osMgIiIiIiIiIvricIQbERERERERERGRHDHhRkREREREREREJEdMuBEREREREREREckRE25ERERERERERERyxIQbERERERERERGRHDHhRkREREREREREJEdMuNF/SkhICBwdHSs6jCKFh4dDT0+vosMgIiIiIiIiok9MqaID+K+xj7D/rMe73P/yZz1eVTNr1iz88ssvGDlyJBYuXFjR4RARERERERFRJcARbkTFiI2Nxa+//goHB4eKDoWIiIiIiIiIKhEm3KoYd3d3DBs2DMOGDYOenh4MDAwwYcIECIIAANi4cSOcnJygra0NY2Nj9OnTB6mpqVJt7N27F9bW1lBXV0ebNm0QEREBiUSCly9finXOnDmD1q1bQ11dHWZmZhgxYgQyMjJKjC0rKwsjRoxAjRo1oKamhpYtWyI2NlbcHhMTA4lEgqioKDg5OUFDQwMtWrTAjRs3imzv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wq2KiYmJ+eg2wsLCEBYW9vHBfAby6C8RERERERERUVnwoQlERERERERERERyxIQbERERERERERGRHDHhRkREREREREREJEdMuBEREREREREREckRE25ERERERERERERyxIQbERERERERERGRHDHhRv8pISEhcHR0rOgwihQeHg49Pb2KDoOIiIiIiIiIPjGlig7gv+aabb3Perx616991uNVBbm5uQgJCcGmTZuQkpICExMT+Pr6YsKECVBQYI6aiIiIiIiIiErGhBvRB+bMmYOVK1ciIiICDRo0QFxcHAYMGABdXV2MHDmyosMjIiIiIiIioi8ch+tUMe7u7hg2bBiGDRsGPT09GBgYYMKECRAEAQCwceNGODk5QVtbG8bGxujTpw9SU1Ol2ti7dy+sra2hrq6ONm3aICIiAhKJBC9fvhTrnDlzBq1bt4a6ujrMzMwwYsQIZGRklBhbVlYWRowYgRo1akBNTQ0tW7ZEbGysuD0mJgYSiQRRUVFwcnKChoYGWrRogRs3bhTZ3okTJ6CsrIyUlBSp8oCAALRu3brYOM6ePQsvLy94enrCwsIC3333HTp27Ii4uDixjoWFBaZPn45+/fpBS0sLtWrVwp49e/D06VN4eXlBS0sL9vb2UvsU2L17N+rWrQs1NTV06NABDx8+LPG8EBEREREREVHlwoRbFRQREQElJSWcP38eixcvRlhYGH777TcAQHZ2NqZNm4ZLly5h9+7duHv3Lnx9fcV97927h++++w7du3dHYmIi/P39MX78eKn2L1++DA8PD3z77bf466+/sG3bNpw6dQrDhg0rMa6goCDs2LEDERERSEhIgJWVFTw8PPD8+XOpeuPHj0doaCji4uKgpKSEgQMHFtle69atYWlpiQ0bNohlubm52LhxIwYMGFBsHC1btkRUVBRu3rwJALh06RJOnTqFLl26SNULCwuDq6srLl68CE9PT/Tt2xf9+vXDDz/8IMbfr18/MZkJAG/evMGMGTMQERGB06dPIz09Hb179y7xvBARERERERFR5cIppVWQmZkZwsLCIJFIYGNjg8uXLyMsLAw//fSTVPLK0tISixcvRtOmTfH69WtoaWlh5cqVsLGxwbx58wAANjY2uHLlCmbMmCHuN2/ePPTp0wejRo0CAFhbW2Px4sVwc3PDihUroKamViimjIwMrFixAuHh4ejc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flRQRERERERERERElVW5ppSOGzcO3bp1g6enJwYMGABTU1P8888/WLduHQ4fPow9e/bIO04iIiIiIiIiIqJKoVwJN09PT2zevBmBgYHw9vaGRCKBIAioWbMmNm/eDE9PT3nHSUREREREREREVCmU+/F+vXr1Qq9evXDjxg38+++/MDAwgI2NjTxjIyIiIiIiIiIiqnTKnXArwCQbERERERERERHR/ynXQxMA4OrVq+jduzfq1KkDVVVVJCQkAADGjx+PgwcPyi1AIiIiIiIiIiKiyqRcCbfIyEg0atQI9+7dQ+/evZGTkyNuU1ZWxvLly+UWIBERERERERERUWVSroTbuHHj0Lt3b5w7dw5TpkyR2taoUSNcvHhRLsERERERERERERFVNuVKuF25cgV9+/YFAEgkEqltenp6ePbs2cdHRkREREREREREVAmVK+Gmr6+Pf/75p8htN2/ehImJyUcFRUREREREREREVFmVK+HWvXt3TJ48GTdu3BDLJBIJUlJSMH/+fPTo0UNuARIREREREREREVUm5Uq4zZo1C9WrV4eDgwOaNWsGABg4cCBsbGygq6uLkJAQecZIRERERERERERUaSiVZyddXV2cOXMGGzduRGRkJPT19aGvr4+hQ4eiX79+UFFRkXecRERERERERERElUK5Em4AoKysjAEDBmDAgAHyjIeIiIiIiIiIiKhSK1fC7dWrV8jKyoKhoaFYtmnTJly7dg1t27ZF27Zt5RYgERERERERERFRZVKuNdx++OEHTJw4UXw/depU9O3bFytXrkSHDh2wfft2uQVIRERERERERERUmZQr4RYbG4uOHTsCAARBwLJly/DLL7/g2bNnGDlyJObNmyfXIImIiIiIiIiIiCqLciXcnj9/Lk4njY+Px7NnzzBw4EAAQLdu3XDjxg35RUhERERERERERFSJlCvhZmxsjKSkJADA/v37YWFhAUtLSwBARkYGlJTK/SwGIiIiIiIiIiKiSq1cmbGePXsiKCgIR48exYEDBxAcHCxuu3jxIqytreUWIBERERERERERUWVSroTbrFmzoK2tjdjYWIwZMwbjxo0Tt8XHx8Pb21tuARIREREREREREVUm5Uq4KSkpYdKkSUVu27Vr10cFREREREREREREVJnJvIZbTk5OuQ5Q3v2IiIiIiIiIiIgqI5kTbhYWFggLC8Pz589lqn/q1Cl88803mDNnTrmDIyIiIiIiIiIiqmxknlK6atUqTJgwAWPHjoWbmxtcXV1hb2+P6tWrQ1VVFS9fvsTdu3cRHx+PQ4cO4dmzZxg8eDAGDRr0KeMnIiIiIiIiIiL6osiccPv666/x9ddf49ixY1i/fj1+++03PHr0CAAgkUggCAJUVFTQpEkTjB49Gn379oWhoeEnC5yIiIiIiIiIiOhLVOaHJrRt2xZt27YFAKSkpODx48d4+/Yt9PX1Ubt2baioqMg9SCIiIiIiIiIiosqiXE8pLWBsbAxjY2N5xUJERERERERERFTpyfzQBCIiIiIiIiIiIiodE25ERERERERERERyVOEJt1mzZsHZ2Rna2tqoUaMGunfvjhs3bkjVEQQBISEhMDU1hbq6Otzd3XH16lWpOllZWRg+fDgMDQ2hqamJbt264e+///6cXSEiIiIiIiIiIqr4hNvx48cxdOhQnDt3DpGRkcjNzUXHjh2RkZEh1pk7dy4WLFiApUuXIjY2FsbGxujQoQNevXol1hk1ahR27dqFrVu34tSpU3j9+jW+/vpr5OXlVUS3iIiIiIiIiIioivqohybIw6FDh6Ter1u3DjVq1EB8fDxat24NQRCwcOFCjB8/Ht9++y0AICIiAkZGRti8eTP8/f2RlpaGNWvWYMOGDWjfvj0AYOPGjTAzM8PRo0fh4eHx2ftFRERERERERERVU7lHuOXk5GDlypXw8/NDx44dcevWLQDAtm3bcO3atXIHlJaWBgDQ19cHANy9excpKSno2LGjWEdVVRVubm44c+YMACA+Ph45OTlSdUxNTWFnZyfWkcXjx4+RkJAgvhITE8vdDyIiIiIiIiIiqprKNcLtzp07aN++PZ4+fYqGDRvi7Nmz4vTOEydO4NChQ1i3bl2Z2xUEAT///DNatmwJOzs7AEBKSgoAwMjISKqukZER7t+/L9ZRUVFBtWrVCtUp2F8Wq1atwpQpU8ocNxERERERERERUYFyJdxGjBiB6tWr48KFC9DT04OKioq4zc3NDePGjStXMMOGDcNff/2FU6dOFdomkUik3guCUKjsQ7LUeZ+/vz+6desmvn/9+jXc3Nxk3p+IiIiIiIiIiKhcCbeYmBhs2bIFhoaGhR5KYGxsjMePH5e5zeHDh2Pv3r04ceIEatasKdUe8G4Um4mJiViempoqjnozNjZGdnY2Xrx4ITXKLTU1FS1atJA5BhMTE6ljpKenl7kfRERERERERERUtZVrDTclJSUIglDktidPnkBLS0vmtgRBwLBhw7Bz504cO3YMtWvXltpeu3ZtGBsbIzIyUizLzs7G8ePHxWRakyZNoKysLFXn8ePHuHLlSpkSbkRERERERERERB+rXCPc3NzcEBoais6dO0NB4V3OTiKRQBAE/Prrr2jXrp3MbQ0dOhSbN2/Gnj17oK2tLa65pqurC3V1dUgkEowaNQozZ86EtbU1rK2tMXPmTGhoaKBPnz5iXT8/PwQEBMDAwAD6+voYM2YM7O3txaeWEhERERERERERfQ7lSrjNmTMHLVq0QL169eDl5QWJRIJly5bhypUruHXrFi5cuCBzWytWrAAAuLu7S5WvW7cOvr6+AICgoCBkZmZiyJAhePHiBZo1a4YjR45AW1tbrB8WFgYlJSV4e3sjMzMT7dq1Q3h4OBQVFcvTRSIiIiL6f+3deVxWZf7/8fctCiIKgRu4ACUupGaGhmblxuDDLa2Zkb6Zg7lky2hqVmPoV7FyKbcmLc1R0BqT+po26Uzf3Jcac0kazGXUUUPFTMUFXFC4fn/443y9YxFvD94sr+fjcT/yvs51nftzepwPHD73da4DAAAAlzhMQfeG3sShQ4c0fvx4rVq1SqdOnVJAQICioqIUHx+vBg0a2B2nW5w/f15+fn46d+6cfH193R0OAAAAALgs9E8rXRp3eHJ3myMB3Ic8wO24lTqRSzPcpOtrqy1cuNDV4QAAAAAAAECZ5NJDEwAAAAAAAADkz+UZbkuWLNFnn32m1NRUXb582Wmbw+HQDz/8cNvBAQAAAAAAAKWNSwW3119/XZMnT1ZERIQaNWokT09Pu+MCAAAAAAAASiWXCm7z58/XhAkTNGbMGLvjAQAAAAAAAEo1l9Zwq1ChgiIjI+2OBQAAAAAAACj1XCq4DRo0SIsXL7Y7FgAAAAAAAKDUc+mW0gkTJuill17SQw89pKioKN11111O2x0Oh0aMGGFHfAAAAAAAAECp4lLBbdWqVUpMTFRGRoa2bNmSZzsFNwAAAAAAAJRXLt1SOnToULVu3VopKSm6cuWKcnJynF7Z2dl2xwkAAAAAAACUCi7NcDt69KhmzZqlpk2b2h0PAAAAAAAAUKq5NMOtbdu2+ve//213LAAAAAAAAECp59IMt0mTJumZZ56Rp6enOnfunOehCZIUEBBwu7EBAAAAAAAApY5LBbfIyEhJ0pAhQ+RwOPLtwzpuAAAAAAAAKI9cKrgtWLCgwEIbAAAAAAAAUJ65VHDr37+/zWEAAAAAAAAAZYNLD00AAAAAAAAAkL8iz3C77777tHjxYjVr1kzNmzcv9JZSh8OhH374wZYAAQAAAAAAgNKkyAW3iIgI+fj4WP9mDTcAAAAAAAAgryIX3Dp27ChfX19JUmJiYnHFAwAAAAAAAJRqRV7D7ZlnntHBgweLMxYAAAAAAACg1Ctywc0YU5xxAAAAAAAAAGUCTykFAAAAAAAAbFTkNdwk6ZNPPtHmzZtv2s/hcGjEiBEuBwUAAAAAAACUVrdUcHv33XeL1I+CGwAAAAAAAMqrW7qldMuWLcrJybnpKzs7u7jiBQAAAAAAAEo01nADAAAAAAAAbETBDQAAAAAAALARBTcAAAAAAADARkV+aEJOTk5xxgEAAAAAAACUCcxwAwAAAAAAAGxEwQ0AAAAAAACwEQU3AAAAAAAAwEYU3AAAAAAAAAAbUXADAAAAAAAAbETBDQAAAAAAALARBTcAAAAAAADARhTcAAAAAAAAABtRcAMAAAAAAABsRMENAAAAAAAAsBEFNwAAAAAAAMBGFNwAAAAAAAAAG1FwAwAAAAAAAGxEwQ0AAAAAAACwEQU3AAAAAAAAwEYU3AAAAAAAAAAbUXADAAAAAAAAbETBDQAAAAAAALARBTcAAAAAAADARhTcAAAAAAAAABtRcAMAAAAAAABsRMENAAAAAAAAsBEFNwAAAAAAAMBGFNwAAAAAAAAAG1FwAwAAAAAAAGxEwQ0AAAAAAACwEQU3AAAAAAAAwEYU3AAAAAAAAAAbUXADAAAAAAAAbETBDQAAAAAAALARBTcAAAAAAADARhTcAAAAAAAAABtRcAMAAAAAAABsRMENAAAAAAAAsBEFNwAAAAAAAMBGFNwAAAAAAAAAG1FwAwAAAAAAAGxEwQ0AAAAAAACwEQU3AAAAAAAAwEYU3AAAAAAAAAAbUXADAAAAAAAAbETBDQAAAAAAALARBTcAAAAAAADARm4vuG3cuFE9e/ZUnTp15HA4tHz5cqftxhiNHz9ederUkbe3tzp06KAff/zRqc+VK1c0dOhQ1ahRQz4+Pnrsscd09OjRO3gUAAAAAAAAwHVuL7hlZmaqRYsWmjVrVr7b3377bU2fPl2zZs3Stm3bFBgYqN/85je6cOGC1Wf48OFatmyZlixZos2bNysjI0M9evRQdnb2nToMAAAAAAAAQJJU0d0BdO3aVV27ds13mzFGM2fOVFxcnJ544glJ0sKFC1W7dm0tXrxYQ4YM0blz5zR//nx99NFHioqKkiR9/PHHql+/vlavXq0uXbrcsWMBAAAAAAAA3D7DrTCHDh3SiRMnFB0dbbV5eXmpffv2+vbbbyVJO3bs0NWrV5361KlTR82aNbP6AAAAAAAAAHeK22e4FebEiROSpNq1azu1165dW0eOHLH6eHp6yt/fP0+f3PFFlZaWprS0NOt9RkaGK2EDAAAAAACgHCvRBbdcDofD6b0xJk/brxWlz6/NnTtX8fHxtxwfAAAAAAAAkKtE31IaGBgoSXlmqp08edKa9RYYGKisrCylp6cX2KeohgwZoh07dlivDRs23Eb0AAAAAAAAKI9KdMHt7rvvVmBgoFatWmW1ZWVlacOGDXrooYckSREREapUqZJTn7S0NO3atcvqU1RBQUF64IEHrNf9999vy3EAAAAAAACg/HD7LaUZGRk6cOCA9f7QoUNKTk5WQECAgoODNXz4cE2cOFENGzZUw4YNNXHiRFWpUkVPPfWUJMnPz08DBw7Uyy+/rOrVqysgIECjRo1S8+bNraeWAgAAAAAAAHeK2wtu27dvV8eOHa33I0eOlCTFxsYqMTFRr776qi5duqQXXnhB6enpioyM1Ndff61q1apZY2bMmKGKFSuqT58+unTpkjp37qzExER5eHjc8eMBAAAAAABA+eYwxhh3B1FSnT9/Xn5+fjp37px8fX3dHQ4AAAAAuCz0TytdGnd4cnebIwHchzzA7biVOlGJXsMNAAAAAAAAKG0ouAEAAAAAAAA2ouAGAAAAAAAA2MjtD00AAAAAAAAoi5ovbH7LY1JiU4ohEtxpzHADAAAAAAAAbETBDQAAAAAAALARBTcAAAAAAADARhTcAAAAAAAAABtRcAMAAAAAAABsxFNKAQAAAAAASog9TcJdGhe+d4/NkeB2MMMNAAAAAAAAsBEFNwAAAAAAAMBGFNwAAAAAAAAAG1FwAwAAAAAAAGxEwQ0AAAAAAACwEQU3AAAAAAAAwEYU3AAAAAAAAAAbUXADAAAAAAAAbFTR3QEAQFnTfGHzWx6TEptSDJEAAAAAANyBGW4AAAAAAACAjZjhBgAAAAAAUMrNfm6tS+NenNPJ5kggMcMNAAAAAAAAsBUFNwAAAAAAAMBG3FIKACXAnibhLo0L37vH5kgAAAAAALeLGW4AAAAAAACAjSi4AQAAAAAAADai4AYAAAAAAADYiIIbAAAAAAAAYCMKbgAAAAAAAICNKLgBAAAAAAAANqro7gAAAK6b/dxal8a9OKeTzZEAAAAAKI2mxfRwadzLSStsjqRsYYYbAAAAAAAAYCMKbgAAAAAAAICNKLgBAAAAAAAANqLgBgAAAAAAANiIghsAAAAAAABgIwpuAAAAAAAAgI0qujsAAChuoX9a6dK4w5O72xwJAAAAAKA8YIYbAAAAAAAAYCNmuAFAOTQtpodL415OWmFzJAAAAABQ9jDDDQAAAAAAALARBTcAAAAAAADARhTcAAAAAAAAABtRcAMAAAAAAABsRMENAAAAAAAAsBEFNwAAAAAAAMBGFNwAAAAAAAAAG1FwAwAAAAAAAGxEwQ0AAAAAAACwEQU3AAAAAAAAwEYU3AAAAAAAAAAbUXADAAAAAAAAbETBDQAAAAAAALARBTcAAAAAAADARhTcAAAAAAAAABtVdHcAAAAAQIk13s/FcefsjQNAsZgW08OlcS8nrbA5EgBlDQW3Mi70TytdGnd4cnebIwEAAABQnjRf2NylcSmxKTZHAgB3HreUAgAAAAAAADZihhsAAAAAoNSb/dxad4cAABZmuAEAAAAAAAA2YoYbAAAAAKDE2NMk3LWBHWbbGwgA3AYKbrAVC6MCAAAAAIDyjoIbSgRXv8UK37vH5kgAAAAAAABuDwU3AAAAAEV29E+bXBpXb/IjNkcCAEDJxUMTAAAAAAAAABsxww3lzrSYHi6Nezlphc2RAAAAAACAsogZbgAAAAAAAICNKLgBAAAAAAAANuKWUpRqs59b6+4QAAAAAAAAnDDDDQAAAAAAALARBTcAAAAAAADARhTcAAAAAAAAABtRcAMAAAAAAABsVKYemvD+++/rnXfeUVpampo2baqZM2fqkUcecXdYAACUXuP9XBhzzv44AAAAgFKkzBTckpKSNHz4cL3//vtq166d5s6dq65du2r37t0KDg52d3gAAKCMOPqnTS6NqzeZLwEBAADKizJzS+n06dM1cOBADRo0SOHh4Zo5c6bq16+vDz74wN2hAQAAAAAAoBwpEwW3rKws7dixQ9HR0U7t0dHR+vbbb90UFQAAAAAAAMqjMnFL6alTp5Sdna3atWs7tdeuXVsnTpwo8n7S0tKUlpZmvb9w4YIk6fz58/YE6gY5Vy66NM7VY86+lO3SuIxs18Zdysq85TFXrl516bNK83lQ3pWGPLiTOSCRB7gFV8ytjynj58mFK67lHflTSrmSA1KZzgNyoPQqDddEEn8boHiVhjzgb4OSK/eYjbn59YHDFKVXCXf8+HHVrVtX3377rdq2bWu1v/XWW/roo4+0d+/eIu1n/Pjxio+PL64wAQAAAAAAUMqlpqaqXr16hfYpEzPcatSoIQ8Pjzyz2U6ePJln1lthhgwZoscee8x6n5OTowoVKqhBgwZyOBy2xYuiS05OVvv27bVhwwbdf//97g4HuOPIAYA8ACTyAJDIA4AccD9jjC5cuKA6derctG+ZKLh5enoqIiJCq1at0uOPP261r1q1Sr169SryfoKCghQUFFQcIcJFVatWtf7r6+vr5miAO48cAMgDQCIPAIk8AMiBksHPz69I/cpEwU2SRo4cqX79+qlVq1Zq27atPvzwQ/3000967rnn3B0aAAAAAAAAypEyU3CLiYnR6dOnNWHCBKWlpalZs2b6+9//rpCQEHeHBgAAAAAAgHKkzBTcJOmFF17QCy+84O4wYKOgoCCNGzeOW31RbpEDAHkASOQBIJEHADlQupSJp5QCAAAAAAAAJUUFdwcAAAAAAAAAlCUU3AAAAAAAAAAbUXADAAAAAAAAbETBDQAAAAAAALARBTcAAAAAAADARhTcAAAAAAAAABtRcAMAAAAAAABsRMENAAAAAAAAsBEFN+j06dOqVauWDh8+LElav369HA6Hzp4969a4SrJZs2bpsccec3cYsBF5cOvIg5KppJzLDodDy5cvL/bP6dChg4YPH17sn2O3UaNGadiwYe4Oo8wiD0oH8sD9fp0rsE9KSorq1aunzMxMd4eCQpADxYccoOAGSZMmTVLPnj0VGhpa5DG5F66/fu3du7f4Ai3Axo0b1bNnT9WpU6fQC9sDBw5owIABCg4OlpeXl+rWravOnTvrr3/9q65du2b1u/F4KlasqODgYI0cOVJXrlyx+gwePFjbtm3T5s2bi/vwcIeU9jwIDQ3NN5YXX3zRqR95UPa5ci6Xd59//rm6dOmiGjVqyOFwKDk5Od9+O3fuVExMjIKCguTl5aWQkBD16NFDX375pYwxkqTDhw875Y+np6fCwsL05ptvWn0k6dVXX1VCQoIOHTp0Jw6x3CEPbl1+v0McDofeeecdp37kQdlSXnIlLS1NTz31lBo3bqwKFSoUWKA+f/68xo4dq6ZNm8rb21vVq1dX69at9fbbbys9Pd3q16FDB+v8rlChgmrXrq3f//73OnLkiNWnefPmevDBBzVjxoziPjzchvKSA/3798/3Z3zTpk2d+pED9qLgVs5dunRJ8+fP16BBg1wav2/fPqWlpVmvhg0b2hzhzWVmZqpFixaaNWtWgX22bt2qBx54QHv27NHs2bO1a9curVixQgMGDNCcOXP0448/OvVPSEhQWlqaDh06pPfff18fffSR3nzzTWu7l5eXnnrqKb333nvFdly4c8pCHmzbts0phlWrVkmSfv/731t9yIOy73bP5aK6evVqse7/TsvMzFS7du00efLkAvt88cUXatOmjTIyMrRw4ULt3r1bn332mXr37q0xY8bo3LlzTv1Xr16ttLQ07d+/X/Hx8Xrrrbe0YMECa3utWrUUHR2tOXPmFNtxlVfkgWtu/B2SlpamBQsWyOFw6Le//a3VhzwoW+5UrmRnZysnJydPe1ZWVrF+7o2uXLmimjVrKi4uTi1atMi3z5kzZ9SmTRslJCRo1KhR+u677/TNN99o3LhxSk5O1uLFi536Dx48WGlpaTp27Ji++OILpaam6umnn3bq88wzz+iDDz5QdnZ2sR0bXFeecuDdd991+hmfmpqqgIAAp78VyIFiYFCuLV261NSoUcOpbd26dUaSWb16tYmIiDDe3t6mbdu2Zu/evXn6pKenF7jv2NhY06tXLzN+/HhTs2ZNU61aNfPss8+aK1euGGOMWbhwoQkICDCXL192GvfEE0+Yfv36uXQ8ksyyZcuc2nJyckx4eLiJiIgw2dnZ+Y7LyckpdB8DBgww3bp1c2pbv3698fT0NBcvXnQpVpQcZS0PjDHmpZdeMg0aNLDObfKgfCjsXM49Ty9evGi6detmIiMjzenTp40xxixYsMA0adLEeHl5mcaNG5vZs2db4w8dOmQkmaSkJNO+fXvj5eVlFixYYIwxZv78+ebee+81np6eJjAw0Lz44ovWOElm3rx5pnfv3sbb29uEhYWZL774wtqekJBg/Pz8nGJdtmyZufHSZNy4caZFixZm0aJFJiQkxPj6+pqYmBhz/vx5q0/79u3NSy+9ZL3/xz/+YXx9fc3ChQtv+f9f7rHu3LnTqT0jI8NUr17dPP744wWOzc2fgvbRqVMn88ILLzi1JSYmmvr1699ynCgceXB7eZCrV69eplOnTtZ78qDsyS9X4uPjTVBQkDl16pTV1rNnT/PII49Y1w/Tpk0zzZo1M1WqVDH16tUzzz//vLlw4YLVP/e8/vLLL014eLjx8PAw//nPf0xISIh54403TGxsrPH19TV/+MMfjDHGvPrqq6Zhw4bG29vb3H333WbMmDEmKyvLGHP9XHI4HGbbtm1Ocf75z382wcHBTtcuRfXrfMk1ZMgQ4+PjY44ePZrvuBs/K799LFq0yFSpUsWp7cqVK8bLy8usWbPmluNE8SuvOWDM9d81DofDHD582GojB+zHDLdybuPGjWrVqlW+2+Li4jRt2jRt375dFStW1IABA/L0admypYKCgtS5c2etW7cuz/Y1a9Zoz549WrdunT755BMtW7ZM8fHxkq7PvMnOztbf/vY3q/+pU6e0YsUKPfPMMzYdoZScnKw9e/Zo1KhRqlAh/1Pe4XAUOP7f//631q1bp8jISKf2Vq1a6erVq9q6dattscI9yloeZGVl6eOPP9aAAQOsc5s8KB8KO5cl6dy5c4qOjlZWVpbWrFmjgIAAzZs3T3FxcXrrrbe0Z88eTZw4UWPHjtXChQudxr722msaNmyY9uzZoy5duuiDDz7Qiy++qGeffVYpKSn629/+prCwMKcx8fHx6tOnj/71r3+pW7du6tu3r86cOXNLx3Tw4EEtX75cK1as0IoVK7Rhw4YCZ6ItWbJEffr00aJFi/SHP/zhlj6nMF9//bVOnz6tV199tcA+heXP9u3b9f333+fJnwcffFCpqalOt1/g9pEHt58HP//8s1auXKmBAwdabeRB2ZNfrsTFxSk0NNSa8TNnzhxt3LhRH330kXX9UKFCBf35z3/Wrl27tHDhQq1duzbPeXHx4kVNmjRJf/nLX/Tjjz+qVq1akqR33nlHzZo1044dOzR27FhJUrVq1ZSYmKjdu3fr3Xff1bx586xb0EJDQxUVFaWEhASn/SckJFi3yNkhJydHSUlJevrpp1W3bt18+xT2WWfOnNFnn32W5/z29PRUixYttGnTJlvihL3Kcw7Mnz9fUVFRCgkJkUQOFBt3V/zgXr169TIDBgxwartxZk+ulStXGknm0qVLxhhj9u7daz788EOzY8cO8+2335rnn3/eOBwOs2HDBmtMbGysCQgIMJmZmVbbBx98YKpWrWp9O/D888+brl27Wttnzpxp7rnnHpcr9cpnVs6SJUuMJPP9999bbT///LPx8fGxXjd+iy3JVK5c2fj4+BgvLy8jyfTo0cP6luFG/v7+JjEx0aVYUXKUtTxISkoyHh4e5tixY1YbeVA+FHYu792717Ro0cI88cQT1gxLY4ypX7++Wbx4sdOYN954w7Rt29YY838zVWbOnOnUp06dOiYuLq7AWCSZMWPGWO8zMjKMw+Ew//jHP4wxRZ/ZU6VKFaeZPK+88oqJjIy03ud+wzp79mzj5+dn1q5dW2BMN1PQrJzJkycbSebMmTNW29atW53y58svv3Tah7e3t/Hx8TGVKlUyksyzzz6b5/POnTtnJJn169e7HDPyIg9uLw+MMWbKlCnG39/f+n1nDHlQFuWXK8YYc/DgQVOtWjXz2muvmSpVqpiPP/640P18+umnpnr16tb7hIQEI8kkJyc79QsJCTG9e/e+aVxvv/22iYiIsN4nJSUZf39/626A5ORk43A4zKFDh266r/zkNzPnxIkTRpKZPn26U/sDDzxgnd9PPvmk0z4qVapkfHx8TJUqVYwk06hRo3xjevzxx03//v1dihXFq7zmwPHjx42Hh4dJSkqy2siB4lGxuAt6KNkuXbqkypUr57vtvvvus/4dFBQkSTp58qSCg4PVuHFjNW7c2Nretm1bpaamaurUqXr00Uet9hYtWqhKlSpO/TIyMpSamqqQkBANHjxYrVu31rFjx1S3bl3bv6260Y37rF69urUodocOHfLcPz9jxgxFRUUpOztbBw4c0MiRI9WvXz8tWbLEqZ+3t7cuXrxoe6y4s8paHsyfP19du3ZVnTp18mwjD8q2ws7lqKgotW7dWp9++qk8PDwkSb/88otSU1M1cOBADR482Op77do1+fn5OY2/8RvgkydP6vjx4+rcuXOh8dyYPz4+PqpWrZpOnjx5S8cUGhqqatWqWe+DgoLy7GPp0qX6+eeftXnzZj344IO3tH9X3XfffVb+NGzY0OmhI5KUlJSk8PBwXb16VSkpKRo2bJj8/f2dZiV5e3tLEvljM/Lg9vNgwYIF6tu3b4H/H3ORB6VbQblyzz33aOrUqRoyZIhiYmLUt29fp+3r1q3TxIkTtXv3bp0/f17Xrl3T5cuXlZmZKR8fH0nXZ7XceO7nym/26f/8z/9o5syZOnDggDIyMnTt2jX5+vpa23v37q0//vGPWrZsmZ588kktWLBAHTt2LJZF7n997bVs2TJlZWXptdde06VLl5y29e3bV3FxcZKuzwqdOHGioqOjtWPHDqd85Tqp5CqvOZCYmKi77rpLvXv3zrONHLAXt5SWczVq1HB62siNKlWqZP07N/HyW+wxV5s2bbR///4ifW7u/lq2bKkWLVpo0aJF+v7775WSkqL+/fsXMfqiyV3A/sYnR3p4eCgsLExhYWGqWDFv3TkwMFBhYWFq3Lixunfvrvj4eCUlJenAgQNO/c6cOaOaNWvaGi/uvLKUB0eOHNHq1avzLP5KHpQPhZ3L3bt316ZNm7R7926rLfdcnjdvnpKTk63Xrl27tGXLFqfxuReQ0v/9gXwzN+aPdP2cz/3MChUqOD2tUMp/EfrC9pHr/vvvV82aNZWQkJBnn3bIzZ99+/ZZbV5eXlb+5Kd+/foKCwtTeHi4+vTpo+HDh2vatGm6fPmy1Sf3tkLyx17kwe3lwaZNm7Rv374Cf4+QB2VHYbmyceNGeXh46PDhw06F1CNHjqhbt25q1qyZli5dqh07dmj27NmSnM9db2/vfL84vDGHJGnLli168skn1bVrV61YsUI7d+5UXFyc05eAnp6e6tevnxISEpSVlaXFixfnu8TH7ahZs6buuuuuPE+aDw4OVlhYmFPxIJefn591/rdr107z58/X/v37lZSU5NSP66SSqzzmgDFGCxYsUL9+/eTp6Wm1kwPFg4JbOdeyZUuni87bsXPnTmsGUK4ffvjBqRK+ZcsWVa1aVfXq1bPaBg0apISEBC1YsEBRUVGqX7++LfHkatmypZo0aaKpU6cWWigpTO634Dcey8GDB3X58mW1bNnSljjhPmUpDxISElSrVi11797dqZ08KB8KO5cnT56s2NhYde7c2epTu3Zt1a1bV//5z3+sC6bc1913313g51SrVk2hoaFas2aNy7HWrFlTFy5cUGZmptWWO1PmVjVo0EDr1q3TF198oaFDh7ocU0Gio6MVEBCgKVOmuLwPDw8PXbt2zekCeteuXapUqZKaNm1qR5j4/8iD28uD+fPnKyIiIs+THMmDsqegXElKStLnn3+u9evXKzU1VW+88Ya1bfv27bp27ZqmTZumNm3aqFGjRjp+/LjLMXzzzTcKCQlRXFycWrVqpYYNG+a7nt+gQYO0evVqvf/++7p69aqeeOIJlz8zPxUqVFCfPn308ccf69ixYy7tI7/rJOn6Oc51UslUHnNgw4YNOnDggNManRI5UFy4pbSc69Kli0aPHq309HT5+/sXedzMmTMVGhqqpk2bWgu0L126VEuXLnXql5WVpYEDB2rMmDE6cuSIxo0bpz/+8Y9Oi7b37dtXo0aN0rx587Ro0aJbPoaMjAynGTeHDh1ScnKyAgICFBwcLIfDoYSEBP3mN79Ru3btNHr0aOv2ho0bN+qXX36xfjjkOnv2rE6cOKGcnBzt379fEyZMUKNGjRQeHm712bRpk+655x41aNDglmNGyVIW8kC6PksjISFBsbGxeWaskQflw83O5alTpyo7O1udOnXS+vXr1aRJE40fP17Dhg2Tr6+vunbtqitXrmj79u1KT0/XyJEjC/ys8ePH67nnnlOtWrXUtWtXXbhwQd98802R/9CPjIxUlSpV9Prrr2vo0KHaunWrEhMTXT10NWrUSOvWrVOHDh1UsWJFzZw5s8hjz5w5o59++sm6YM6dwRMYGKjAwEBVrVpVf/nLXxQTE6Pu3btr2LBhatiwoTIyMvTVV19JUp78OX36tE6cOKFr164pJSVF7777rjp27Oh0i8imTZv0yCOPFHmmFIqGPHAtDyTp/Pnz+uyzzzRt2rQ828iDsie/XDl69Kief/55TZkyRQ8//LASExPVvXt3de3aVW3atFGDBg107do1vffee+rZs6e++eYbzZkzx+UYwsLC9NNPP2nJkiVq3bq1Vq5cqWXLluXpFx4erjZt2ui1117TgAEDXDpfcovZGRkZ+uWXX5ScnCxPT0/de++9kqSJEydq/fr1ioyM1IQJE9SqVSv5+PjoX//6l/75z3+qWbNmTvu7ePGiTpw4Ien67XRvvvmmKleurOjoaKvP4cOHdezYMUVFRd1yvCh+5S0HpOtfqkRGRuY5nyVyoFi4dQU5lAht2rQxc+bMsd7nLiycnp5ute3cudNIshZBnDJlimnQoIGpXLmy8ff3Nw8//LBZuXKl035jY2NNr169zH//93+b6tWrm6pVq5pBgwZZiz3eqF+/fiYgICDPttxFd9etW1dg/Lnx/voVGxvr1G/fvn0mNjbW1KtXz1SsWNH4+fmZRx991MydO9dcvXrV6nfjPhwOhwkKCjIxMTHm4MGDTvuLjo42kyZNKjAulC6lPQ+MMeZ///d/jSSzb9++AvuQB2VfUc7loUOHmqCgIOtc+etf/2ruv/9+4+npafz9/c2jjz5qPv/8c2NMwQ8SMMaYOXPmmMaNG5tKlSqZoKAgM3ToUGub8nmIjZ+fn0lISLDeL1u2zISFhZnKlSubHj16mA8//DDPYvEtWrRw2seMGTNMSEiI9f7Xi1/v3r3b1KpVy4wcOdLp+AtbWDh3ceNfv8aNG+fUb9u2beZ3v/udqVWrlqlYsaKpXr266dKli1myZIn1kJPc/1+5Lw8PD1OvXj0zePBgc/LkSaf9NWrUyHzyyScFxgXXkQe3ngfGGDN37lzj7e1tzp49W2Af8qBsuTFXcnJyTOfOnU2XLl2cHtw0YsQI06BBA3PhwgVjjDHTp083QUFBxtvb23Tp0sUsWrTIKb/yexiIMdcXjJ8xY0ae9ldeecW6RoqJiTEzZszId/z8+fONJLN169Z89/3rn9m/lt/P+RvzyBhjzp49a0aPHm2aNGlivLy8jLe3t7nvvvvM2LFjzenTp61+7du3d9qPv7+/ad++fZ4HlkycONF06dKl0LjgXuUpB86ePWu8vb3Nhx9+WGgfcsA+FNxgVq5cacLDw60nJtolt9BQFFFRUU4XqLnWrVtn7rrrLqcnYpUEKSkpplatWoVekKJ0IQ9uHXlQMhXXuVxaJSQkmLCwsHyfsOtOK1asMOHh4U6FbtiHPHBGHqAgpSlX3nzzTdOsWbM87RcvXjSVK1e+7afz2u3y5cumfv36ZvPmze4OBYUgB4oPOcBTSiGpW7du2r9/v44dO2b7+mk3c+bMGX399ddau3atZs2alWf7V199pddff/2WbvO7E44fP65FixbleXoZSi/y4NaRByWTO8/lkuirr77SxIkT8yw6726ZmZlKSEjI94EluH3kgTPyAAUpDbmSkZGhPXv26L333nNaSyvXhg0b1KlTJ3Xs2NEN0RXsyJEjiouLU7t27dwdCgpBDhQfckByGFMMj/MCJPXv319nz57V8uXLC+wTGhqq9PR0jR07VqNGjbpzwQF3CHkAAADguv79++uTTz5R7969tXjx4jxrBQJlHTlQelFwAwAAAAAAAGxU4eZdAAAAAAAAABQVBTcAAAAAAADARhTcAAAAAAAAABtRcAMAAAAAAABsRMENAACgnHA4HDd9JSYm2vZZU6dOtWVfAAAApU1FdwcAAACAO+Of//yn0/u2bdtq6NCheuqpp6y2Bg0a3OmwAAAAyhwKbgAAAOVEmzZt8rQFBwfn2w4AAADXcUspAAAAJEk5OTmaOHGi7r77bnl5ealhw4aaOXNmnn6bNm3Sww8/LG9vb1WvXl39+vXTzz//fOcDBgAAKKEouAEAAECS9Morr2js2LF6+umn9eWXX6p3794aMWKE3njjDavPjh07FBUVpcqVK+vTTz/V9OnTtXr1anXq1EmXL192Y/QAAAAlB7eUAgAAQKdOndJ7772nl19+2SqwRUdH6/z585oyZYpGjBihqlWr6q233lKtWrX097//XZ6enpKkRo0a6aGHHtKSJUvUv39/Nx4FAABAycAMNwAAAOi7777T1atXFRMT49T+X//1X8rMzNTOnTslXb+dtHfv3laxTbr+8IWQkBBt2rTpjsYMAABQUlFwAwAAgNLT0yVJgYGBTu2578+cOWP1+3Wf3H65fQAAAMo7Cm4AAABQQECAJOV5+MGJEyectgcEBOT7gIQTJ05YfQAAAMo7Cm4AAADQgw8+qEqVKunTTz91ak9KSpKPj48eeOABSdLDDz+s5cuX6+rVq1af7777TkeOHNEjjzxyR2MGAAAoqXhoAgAAAFSjRg0NGzZMU6dOlZeXl9q1a6c1a9Zo7ty5io+Pl4+PjyQpLi5ODz30kLp166aXXnpJZ86c0ejRo3XvvffqySefdPNRAAAAlAwU3AAAACBJevvtt+Xv76958+Zp0qRJCg4O1rRp0zRixAirT0REhFatWqXRo0frd7/7napUqaJu3bpp6tSpqly5shujBwAAKDkcxhjj7iAAAAAAAACAsoI13AAAAAAAAAAbUXADAAAAAAAAbETBDQAAAAAAALARBTcAAAAAAADARhTcAAAAAAAAABtRcAMAAAAAAABsRMENAAAAAAAAsBEFNwAAAAAAAMBGFNwAAAAAAAAAG1FwAwAAAAAAAGxEwQ0AAAAAAACwEQU3AAAAAAAAwEb/Dz7Hqlc1O6gGAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df = pd.DataFrame.from_dict(optimized_h5py_benchmarks + optimized_xarray_benchmarks + kerchunk_benchmarks)\n", + "\n", + "pivot_df = df.pivot_table(index=['tool','dataset'], columns=['format'], values='time', aggfunc='mean')\n", + "\n", + "# Plotting\n", + "pivot_df.plot(kind='bar', figsize=(15, 5))\n", + "\n", + "plt.suptitle('Cloud-optimized HDF5 access performance (less is better)', fontsize=14)\n", + "plt.title(\"Informed I/O parameters\", fontsize=10)\n", + "plt.xlabel('Tool')\n", + "plt.ylabel('Time (seconds)')\n", + "plt.xticks(rotation=0)\n", + "plt.legend(title='Format')\n", + "ax = plt.gca()\n", + "plt.grid(False)\n", + "# ax.yaxis.grid(True)\n", + "\n", + "plt.savefig(\"stats.png\", transparent=None, dpi=150)\n", + "\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "id": "459c4535-bdd0-4341-92ff-1965c071528a", + "metadata": {}, + "outputs": [], + "source": [ + "df.to_csv(\"benchmarks-optimized.csv\")" + ] + }, + { + "cell_type": "markdown", + "id": "04414c2e-0666-4701-8ecc-7842727ede22", + "metadata": { + "tags": [], + "user_expressions": [] + }, + "source": [ + "## Plotting results" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "id": "2db2535a-8d3a-4e65-b21c-8db6b48074c8", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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pPl9GTVqlMX5uz8viYmJmjJliqpWrSpnZ2e5urqqXr16WrlyZbq40rbbOHbsmKZOnary5cvL3t7e4t++QoUKqUGDBlqyZIlu3LiRrXsEAAAA4J/FjHEAAADgCRYeHq6UlBSFhoaqaNGimda1t7d/YHvTp09X3759zUkKZ2dn/e9//9N7772nzZs3a8mSJTKZTDmONzIyUi+++KKsrKzUpk0beXl5KTIyUnXq1FGBAgWy3d7SpUvVtm1b2dnZqU2bNipSpIh++uknjRo1SuvWrdOGDRvSjfvKlSuqU6eOPD099Z///EdnzpzRt99+qwYNGmjt2rXmxHffvn0VHh6uvXv3qk+fPsqfP7+kjJfjzsi0adO0ceNGhYSEqGHDhlq6dKn69OkjJycn7d27V999951eeuklNWzYUIsWLVLHjh1VokSJB84ovN8M5++++04xMTFycnIyl8XGxpqTnC+88IJatWqlCxcuaOnSpVq7dq0iIyNVs2ZNc/1H/f48DlZWVhoyZIgiIyP17bffauDAgQ/V3ubNm7Vz505ZW1vLz89PjRs3ztJn5V5LlizR+vXr9frrr6tx48batGmTZs+erW3btmnbtm1ydHQ0192xY4eCg4N18+ZNtWjRQr6+vjpx4oTmz5+v1atXa9u2bSpZsqRF+5cuXVKtWrVUsGBBtWnTRomJiapYsaJGjBihjRs3atOmTRbLwqc9rzn5jGTUV758+XTt2jVz/BMmTFBwcLBCQ0O1YcMGzZo1S9euXVNISIg6deqkli1bqmbNmlq1apUmTpyofPnyaciQIeY+Dhw4oOHDh6tBgwZ6+eWX5ezsrIMHD2rBggVatWqV9uzZo+LFi6e7z5988olWr16tkJAQBQUFac2aNfr444916dIlzZ8/P13dXr16ydHRUS+//LKKFSumM2fOaMuWLVqyZIn5s2YYht58800tWLBAZcqUUfv27WVnZ6f169era9euiomJ0eTJkx/4DFy5ckW//fabmjZtKiurrM8z+O9//6uPPvpIzz77rF599VXly5dPv/zyiwYMGKAdO3bou+++M9cdPHiwJk6cqFKlSql9+/ZydXXVmTNntHnzZv3888+qX7++JGnWrFl699135enpqZdfflnu7u46e/asdu7cqeXLl+d4D/pOnTpp8eLFqlixot566y3Z29vr1KlT2rBhg4KDg+Xv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H5adnZ1cXV1169atbF33oPuW9n6k/e///ve/TN+XwMBAi3bunV2bFTn9jOSkr+waOXKkHBwctHv3bn333XeaNGmSRo0aZS5/WPnz55dhGDp79mym9dLGXq1atUzfjw0bNjywz7TtEe5d3v9B/bu7u2fa9/Hjx831bW1tNWDAAP3xxx86c+aMFixYoHr16umrr77SG2+8Ya5nMpn09ttvKyoqShcvXtSyZcv0yiuvaOXKlWrevLnFjwiyw9nZWWPHjtWxY8d07NgxzZkzR35+fpo+fbree++9LLeT1e/h7H6PPYy0vl599dVM+5o3b166ax/0mUl7Ju7eQgMAAADAk4fEOAAAAPAE69y5s6ytrfX555+bl3m9n4SEhEzPpy2PvHHjxnTndu7cqfj4eItlktOWC85oFnnaEs53S9tPefPmzenOnTx5UqdPn840vuzEe+bMGcXGxqpkyZIWM2Ez6ystrrvHmLaPbk6TSI/Lhx9+qIULF+qNN94wz9q8V82aNSVJ27Zty1Kbj/r9eVxSU1M1btw4SXqopdjv58iRI7py5Uq6fakfJKP79tdffyk2NlalSpUyP4fZfV8eRk4/I/+E2NhYlStXTqVLl7YoT7tnDyttaet169ZlWs/V1VXlypXTgQMHLJZizwl/f39Jd56hrKpZs6YuXbqUrWvSeHl5qV27dlqzZo1Kly6tn376KcPZ6u7u7mrVqpW+/fZbNWzYUAcOHNDRo0ez3d+9SpQooS5dumjTpk1ycXHRypUrs3zt1q1b022HEB8fr927d8vR0VFlypSRlLPPi7W19X2/szP7Ti9Xrpzy5cunqKgoi9UNHoVDhw5J+r9nBAAAAMCTicQ4AAAA8ATz9fXVwIED9ffff+vFF1+0mFmY5vbt25oyZUqG+7PerX379rKxsdGUKVP0119/mcuTkpL0wQcfSLqTiE9TtmxZczLk7hmS58+f15gxY9K1X7duXZUoUUI//PCDtmzZYi43DEP//e9/s518DgkJkZubm+bNm2ex7K1hGBo8eLCSkpIs4k2TkpKiIUOGWCRlNm3apB9//FG+vr6qXbu2uTxtme4///wzW7E9Tt99951GjhypWrVq3XdfYulOYrBmzZpauHChvv3223TnU1NTtWnTJvPxo35/HoeLFy/qzTffVGRkpJ577jm98847OWrn+vXr+v3339OVX7lyRV27dpWU/aT7+vXr063cMHToUCUlJVnMZg0JCVGxYsU0ZcoU/fLLL+naSUpKsrj/DyOnn5F/QvHixXX06FGL2ey3b9/WO++8k60tBe6ne/fusra21tChQ9Mty37vTPLevXvr1q1b6tatW4bLZB8/fjxL2wj4+/urYMGC5v3Ns6J3796S7qwAkbZH+d3OnTunAwcOSLrz46aff/45XUL55s2bun79umxtbc2J37Vr16a7j0lJSebv6rRl37Pj4sWLGY7typUrSkhIyFabhw4d0ty5cy3KJk2apIsXL6pdu3bmPcuz+z0m3fne/vvvv3X79u109TP7TrexsdE777yjkydPqn///hkmx/fv33/f2e6Z2bFjhySlWwkCAAAAwJOFPcYBAACAJ9yYMWN0+/ZtTZ06VWXLllXDhg1VoUIF2dra6vjx4/rpp5906dKlDJPVdytVqpQmTJigfv36qWLFimrdurWcnZ31ww8/6ODBgwoJCdGbb75prm9nZ6eePXtq/Pjxqlq1qkJCQnT9+nX973//U2BgYLpZn1ZWVvr888/VrFkzNW7cWG3atJGXl5d+/vlnnT17VhUrVswwWXk/+fLl0xdffKF27dqpZs2aatOmjQoXLqzIyEhFRUWpRo0aGjBgQLrrKlasqI0bN+r5559Xw4YN9ddff2nRokWytbXVF198YV4iXpIaNmyoyZMnKzQ0VK+//rqcnZ1VrFgxtW/fPstxPmqdOnWSYRiqVKmSPvroo3Tng4KCFBQUJElauHChGjRooLZt22ratGmqVq2aHBwcdOrUKW3btk0XL140J48e9fvzsCZPniwXFxelpqbq2rVriomJ0S+//KKEhATVqVNHixYtyvF+vZcuXVKlSpUUEBAgf39/FSlSRGfOnNHq1at16dIlNWnSJFvLQktS8+bN1axZM73++uvy9vbWpk2btG3bNlWqVEn9+/c317O3t9eSJUv04osvKjAwUI0aNVKFChUkSadOndLmzZvl7u6ugwcP5mhsd8vpZ+Sf0KtXL/Xq1UtVqlTRa6+9puTkZK1fv978bO/du/eh2vf399e0adPUu3dvlS9fXq1atVLx4sV17tw5/fLLL2revLmmTZsmSQoNDdX27dsVERGhrVu3qnHjxvLy8tL58+d18OBB7dixQwsWLHjgKgImk0ktW7bUV199pbNnzz5wf3NJatq0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V69ebUgyli1bluV7YRiGUaZMGWPlypWGYRhG9+7dDTc3t/teX7FiRePFF1+87/nixYsbTZs2tShr06ZNptcsXrzYcHd3Nx/PmzfPkGRER0ff9xrDMIzk5GTD1dXV+N///mcuexz3Oq3de+9rVq/r27evRZ0WLVoYb731VqZjAwAAAAA8mWxyLSMPAAAAAEAOVKxY0eLY09NTFy5cuG/9AwcOyNvbW97e3uay5557Tvnz59eBAwdUvXp1SVLx4sVVuHDhTPsrWrSoJMnf39+i7Pbt27p27Zry5cun3bt3a9euXRazj1NSUnT79m3dunVLBw4cULFixfTss8+az9eqVSurw7cY159//qnGjRtnqb7x/5eGz8y9cdSqVUvTpk0zH2/YsEHjxo1TTEyMrl27puTkZN2+fVs3b96Us7OzJMnOzi7de3ThwgUNHz5cP//8s86fP6+UlBTdunVLp06dsqj3qO+1k5NThuPM6nUBAQEW173zzjt69dVXtWfPHr3wwgtq1aqVateunfHNBAAAAAA8UUiMAwAAAAD+VWxtbS2OTSaTUlNT71v/fgnhe8vTEruZ9ZdWP6OytBhSU1M1atQovfLKK+nacnBwkGEY6coflLDOyMqVK9WkSRM5OjpKksqUKaO4uDj99ddf8vLysqibmJioY8eOqWHDhtnuJy22kydPqlmzZurevbtGjx6tggULasuWLeratauSkpLM9R0dHdONp3Pnzrp48aKmTZum4sWLy97eXrVq1VJiYqJFvUd9r+8nq9fd+0y8+OKLOnnypFatWqWffvpJjRo1Uo8ePTR58uT79gUAAAAAeDKQGAcAAAAA5GnPPfecTp06pdOnT5tnjcfExCguLk7lypV75P1VrVpVhw4dkq+vb6bx3J3A3rZtW7b7WbFihd5++23z8auvvqqBAwcqLCxMYWFhFnVnz56tmzdvql27dpm2uX379nTHfn5+kqSoqCglJycrLCxMVlZWkqTFixdnKdbNmzfr008/VbNmzSRJp0+f1t9//52lazPzoHst3Umsp6SkZPu6+ylcuLA6d+6szp07q169ehowYACJcQAAAAD4FyAxDgAAAADI0xo3bqyKFSvqjTfe0LRp05ScnKx3331XgYGB6ZbKfhSGDx+ul156Sd7e3nr99ddlZWWl33//Xfv27dOYMWPUuHFjlS1bVh07dlRY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xYsXl6urq4KCgiRJp06dkiQdOnRI1atXt2jv3oTu7t27FR4eLhcXF/MrODhYqampOn78uMaNG2dx7tSpU4qNjVVSUpLq1KljbsfW1lY1atTQgQMHLNqvWLGi+W9PT09JSrfce5rOnTvr6NGj2r59uyRp7ty5at26tZydnbV582aLOObPny9J+vbbb/XNN99owYIF2rNnjyIiIjR58mRFRETcN46iRYtKkvz9/dOV3R2bjY2NAgICzMd+fn7Knz9/ujECAAAAAAAAAAAAeHSYMQ6z27dv64UXXtALL7ygb775RoULF9apU6cUHBysxMRESZJhGBZJ9bSyu6Wmpio0NFS9e/dO10exYsXUvXt3ixnbXl5eunLliiRl2Pa9Zba2tua/086lpqZmOKYiRYqoRYsWmjdvnkqWLKkff/xRGzdulCQFBAQoOjraXDctkT1gwAB98MEH5iXO/f39dfLkSX300Ufq1KlTpnFkJbZ7x3O/MgAAAAAAAAAAAACPBonxp1Da7Om7j0uXLq2DBw/q77//1vjx4+Xt7S1JioqKsqjr5+enH3/80aLs3jpVq1bVH3/8IV9f3wz7L1iwoAoWLGhR5uvrKzs7O23ZskXt27eXdGfZ8aioKPOS7Dn19ttvq23btnr22WdVqlQp86x0R0fHDGO8deuWrKwsF1Owtra+b/I9O5KTkxUVFWWeZX/o0CFdvXpVfn5+D902AAAAAAAAAAAAgIyxlPpT6PTp03r//fd16NAhLVy4UB9//LH69OmjYsWKyc7OTh9//LGOHTumlStXavTo0RbXhoaG6uDBgxo0aJAOHz6sxYsXKzw8XNL/zXoeNGiQtm3bph49eig6OlpHjhzRypUr1atXr/vG5OzsrHfeeUcDBgzQmjVrFBMTo27duunWrVvq2rXrQ403ODhYbm5uGjNmjN56660H1m/RooXGjh2rVatW6cSJE1q2bJmmTJmil19++aHikO7MKO/Vq5d27NihPXv26K233tLzzz/P/uIAAAAAAAAAAADAY0Ri/CnUsWNHxcfHq0aNGurRo4d69eql//znPypcuLDCw8P13Xff6bnnntP48eM1efJki2tLlCihJUuW6Pvvv1fFihU1a9YsDRkyRJJkb28v6c7e25s2bdKRI0dUr149ValSRcOGDTPvB34/48eP16uvvqoOHTqoatWqOnr0qNau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BEEDVoogCsJ8f3hlvkzUHMrMrHHNfV8XV9jrfWf8bfP4zJ797LUWAAANS6GD8UVxyimnZO7cuTnqqKMyffr09OrVKyNGjEjLli2r91xxxRVp2rRp9txzz8ydOzd9+vTJTTfdlCZNmhSYHAAAAAAAAICGoKKqqqqq6BAN1axZs7LSSitl5syZWXHFFYuOAwAAAAAAwNfocXOPxdp/56++WOS9G7z6yuLGoQHqeNoDi7x30kW71GESatPizHMLvcc4AAAAAAAAANQ1g3EAAAAAAAAASs1gHAAAAAAAAIBSMxgHAAAAAAAAoNQMxgEAAAAAAAAotaZL8kUfffRRnnjiifzv//5vpk2blrlz52bVVVfN+uuvn2233Tabb755becEAAAAAAAAgCWyWIPxJ554Ir/5zW/y4IMPZv78+Vl77bWz2mqrpXnz5nn55Zfzxz/+MXPmzEnHjh0zYMCADBw4MCuuuGJdZQcAAAAAAACA/9MiX0p9xx13zG677ZaVVlopd999dz7++ONMmjQpo0ePzlNPPZXx48dn1qxZeemll3LEEUfk7rvvzjrrrJMHH3ywLvMDAAAAAAAAwH+0yGeMb7/99vnv//7vrLTSSt+4p6KiIhtuuGE23HDDnHLKKfnb3/6WWbNm1UpQAAAAAAAAAFgSizwYP+OMMxb7m2+33XaL/TUAAAAAAAAAUJsW+VLq/5dPP/00b775ZqqqqmrrWwIAAAAAAADAUluiwfill16ac889t/rxk08+mfbt22f99ddPly5dMmHChFoLCAAAAAAAAABLY4kG4zfccEPWXHPN6sfHH398Ntxww9x7771ZbbXV8otf/KLWAgIAAAAAAADA0ljke4z/qylTpqRz585JknfffTdjx47NyJEjs+222+aLL77IkUceWashAQAAAAAAAGBJLdEZ48stt1xmzZqVJHnsscfSokWLbL311kmSVq1aZebMmbWXEAAAAAAAAACWwhKdMb7lllvmoosuSmVlZS655JLstNNOadKkSZJkwoQJad++fa2GBAAAAAAAAIAltURnjF966aWZNm1afvCDH2T27Nm54IILqtfuuOOO6rPHAQAAAAAAAKBoS3TGeLdu3TJhwoR89NFHWXXVVWusXXbZZWnTpk2thAMAAAAAAACApbVEg/F/+veheJL06NFjab4lAAAAAAAAANSqRb6U+kkn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7Zbx48cnSS6++OJcfvnl+e1vf5vnnnsubdq0yQ477JBPPvmk+nscd9xxGT58eG6//fY89dRTmT17dnbdddcsWLBgSZ4eAAAAAAAAACWyRIPxt956K7/4xS+y7rrrLnWAH/zgB9l5552z3nrrZb311suFF16YFi1a5H/+539SVVWVK6+8MmeccUb22GOPdO/ePTfffHM+/fTT3HrrrUmSmTNn5sYbb8xll12Wvn37ZpNNNsmwYcPy0ksv5dFHH13qfAAAAAAAAAB8uy3RYHzTTTfNlClTajtLFixYkNtvvz1z5szJVlttlYkTJ2batGnZcccdq/csu+yy2X777fPMM88kScaMGZP58+fX2NOuXbt07969eg8AAAAAAAAAjdcS3WP82muvzf7775/27dunT58+adp0ib5NtZdeeilbbbVVPvvss7Ro0SLDhw9Pt27dqgfbrVu3rrG/devWefvtt5Mk06ZNyzLLLJOVV175K3umTZu2WDmmTp2aqVOnVj+ePXv2kjwdAAAAAAAAABqQJZpob7311pk/f3523nnnVFZWZrnllquxXlFRkZkzZy7y91t//fXzwgsvZMaMGfnTn/6UAw88MCNHjqzx/f5VVVXVV479u0XZ8++uv/76nHvuuYv1NQAAAAAAAAA0bEs0GD/xxBMXe+j8nyyzzDLp3LlzkmTzzTfPc889l9/85jc59dRTk3x5Vnjbtm2r97///vvVZ5G3adMm8+bNy/Tp02ucNf7+++9n6623Xqwchx9+ePr371/9ePbs2dl+++2X+HkBAAAAAAAAULwlGoyfc845tRyjpqqqqnz++efp1KlT2rRpk0ceeSSbbLJJkmTevHkZOXJkfv3rXydJNttsszRr1iyPPPJI9txzzyRfXhJ93Lhxufjiixfrn9u2bdsaA/hZs2bV0jMCAAAAAAAAoChLd3PwWvCLX/wiO+20U9Zaa6188sknuf322/PEE0/kL3/5SyoqKnLcccdl0KBB6dKlS7p06ZJBgwZl+eWXzz777JMkWWmllTJgwICceOKJWXXVVbPKKqvkpJNOSo8ePdK3b9+Cnx0AAAAAAAAARVviwfibb76Zm266Ka+//no+++yzr6zfd999i/R93nvvvey///6ZOnVqVlpppWy00Ub5y1/+kh122CFJcsopp2Tu3Lk56qijMn369PTq1SsjRoxIy5Yt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07179zz44IPp0KFD0dEapbZt2+bss892aXrqndqjKGqPoqg9iqL2KIraoyhqj6KoPYqi9iiK2qMoao+iqL36U1FVVVVVdAgAAAAAAAAAqCuluMc4AAAAAAAAAHwTg3EAAAAAAAAASs1gHAAAAAAAAIBSMxgHAAAAAAAAoNQMxgEAAAAAAAAoNYNxAAAAAAAAAErNYBwAAAAAAACAUjMYBwAAAAAAAKDUDMYBAAAAAAAAKLWmRQcAAGDJfP7551l22WWLjgFQb/Q96tuUKVMyadKkfPrpp1l99dWz4YYbqkHqhdoDGht9D2hs9L1iGIxTKz7//POMGjWqxn/Em2yySTp16lR0NEpO7VEUtUcRHn744dx222158sknM3ny5CxcuDDLL798Nt100+y44445+OCD065du6JjUlL6HkXQ9yjC22+/neuuuy633XZbpkyZkqqqquq1ZZZZJttuu21+9rOf5Uc/+lEqK12Ij9qj9ihSVVVVRo4cmSeffPIrr/f69u2btdZaq+iIlJC+R5H0PYqg7xWvoupf/63DYnrmmWdy9dVX55577sm8efPSqlWrLLfccvn444/z+eefZ5111snPfvazHHHEEWnZsmXRcSkRtUdR1B5FuOeee3Lqqadm5syZ2XnnnbPlllumffv21bU3bty4PPnkk3n22Wdz0EEH5fzzz8/qq69edGxKQt+jCPoeRTn22GMzdOjQ7Ljjjunfv/831t5tt92Wpk2bZujQodliiy2Kjk0JqD2KMnfu3FxxxRW59tpr89FHH6Vnz55fqb1//OMf2XHHHXPWWWflO9/5TtGRKQl9j6LoexRF32sYDMZZYrvttluee+657LPPPunfv38233zzLL/88tXrb731VvV/xC+++GL+8Ic/ZIcddigwMWWh9iiK2qMoW265Zc4888zssssu//HTou+++25+85vfpHXr1jnxxBPrMSFlpe9RFH2Popx88sk55ZRTFumDFg8++GA+/fTT/PjHP66HZJSd2qMoa621Vnr16pWDDjoo/fr1S7Nmzb6y5+23386tt96a6667Lr/85S9z2GGHFZCUstH3KIq+R1H0vYbBYJwlds011+Swww7LMsss83/uHT9+fP7xj394o5RaofYoitoDGht9DwCg3MaNG5fu3bsv0t558+bl7bffTpcuXeo4FUDd0fegcTMYBwD4FluwYEFeeumldOjQISuvvHLRcQDqnL5Hffvggw/y2muvpaKiIuutt57L9lNv1B7QWMydOzdVVVXVV6d6++23M3z48GywwQbp169fwekAap++VxyDcWrVmDFj8sorr6SioiIbbLBBNt1006Ij0UioPYqi9qhvxx13XHr06JEBAwZkwYIF2X777fPMM89k+eWXz5///Of07t276IiUnL5HfdP3KMqcOXMycODA3HLLLVmwYEGSpEmTJjnggANy9dVX17i1BNQmtUeRZsyYkRtvvLHG670BAwZkpZVWKjoaJbbjjjtmjz32yBFHHJEZM2aka9euadasWT788MNcfvnlOfLII4uOSInpexRB3yvON9+sDRbD+++/n+9973vZYostcswxx+Too4/O5ptvnj59+uSDDz4oOh4lpvYoitqjKHfddVd69uyZJLn//vszceLEvPrqqznuuONyxhlnFJyOMtP3KIq+R1FOOOGEjBw5Mvfdd19mzJiRGTNm5N57783IkSPd0546pfYoyujRo7PuuuvmiiuuyMcff5wPP/wwV1xxRdZdd92MHTu26HiU2NixY7Ptttsm+fK1X+vWrfP222/nD3/4Q6666qqC01Fm+h5F0feKYzBOrRg4cGBmzZqV8ePH5+OPP8706dMzbty4zJo1K8ccc0zR8SgxtUdR1B5F+fDDD9OmTZskyYMPPpif/OQnWW+99TJgwIC89NJLBaejzPQ9iqLvUZQ//elPufHGG7PTTjtlxRVXzIorrpidd945v//973PXXXcVHY8SU3sU5fjjj0///v0zadKk3H333Rk+fHgmTpyYXXfdNccdd1zR8SixTz/9NC1btkySjBgxInvssUcqKyvzne98J2+//XbB6SgzfY+i6HvFMRinVvzlL3/J4MGDs8EGG1Qf69atW6655po89NBDBSaj7NQeRVF7FKV169Z5+eWXs2DBgvzlL39J3759k3z5grpJkyYFp6PM9D2Kou9RlE8//TStW7f+yvE11lgjn376aQGJaCzUHkUZPXp0Tj311DRt2rT6WNOmTXPKKadk9OjRBSaj7Dp37px77rknU6ZMycMPP5wdd9wxyZdXrVpxxRULTkeZ6XsURd8rjsE4tWLhwoVp1qzZV443a9YsCxcuLCARjYXaoyhqj6IcfPDB2XPPPdO9e/dUVFRkhx12SJL87//+b7p27VpwOspM36Mo+h5F2WqrrXL22Wfns88+qz42d+7cnHvuudlqq60KTEbZqT2KsuKKK2by5MlfOT5lypTqs9qgLpx11lk56aST0rFjx2y55ZbVvW7EiBHZZJNNCk5Hmel7FEXfK05FVVVVVdEh+PbbbbfdMmPGjNx2221p165dkuTdd9/Nvvvum5VXXjnDhw8vOCFlpfYoitqjSHfddVemTJmSn/zkJ1lzzTWTJDfffHNatWqV3XbbreB0lJW+R5H0PYowbty4fP/7389nn32Wnj17pqKiIi+88EKaN2+ehx9+OBtuuGHRESkptUdRjjnmmAwfPjyXXnpptt5661RUVOSpp57KySefnB/96Ee58sori45IiU2bNi1Tp05Nz549U1n55fl8o0aNyoorrujDkNQZfY8i6XvFMBinVkyZMiW77bZbxo0bl7XWWisVFRWZPHlyevTokXvvvbf6zSuobWqPoqg9GoLPPvsszZs3LzoGjYS+R0Og71Hf5s6dm2HDhuXVV19NVVVVunXrln333TfLLbdc0dEoObVHEebNm5eTTz451113Xb744oskX14d6Mgjj8xFF12UZZddtuCElN2bb76ZCRMmZLvttstyyy2XqqqqVFRUFB2LEtP3KJq+V/8MxqlVjzzySI1f2v55/z+oa2qPoqg96tuCBQsyaNCgXHfddXnvvffy+uuvZ5111smZZ56Zjh07ZsCAAUVHpOT0PeqbvgcA9evTTz/NhAkTUlVVlc6dO2f55ZcvOhIl99FHH2XPPffM448/noqKirzxxhtZZ511MmDAgLRq1SqXXXZZ0REpOX2P+qbvFcdgHADgW+S8887LzTffnPPOOy+HHXZYxo0bl3XWWSd33nlnrrjiijz77LNFRwSoVfoeRXr99dfzxBNP5P3338/ChQtrrJ111lkFpaIxUHtAY3LAAQfk/fffzw033JANNtggL774YtZZZ52MGDEixx9/fMaPH190RIBape8Vx2CcWvPYY4/lscce+9pf2oYMGVJQKhoDtUdR1B5F6Ny5c66//vr06dMnLVu2rH7h/Oqrr2arrbbK9OnTi45Iiel7FEHfoyi///3vc+SRR2a11VZLmzZtalzSsKKiImPHji0wHWWm9ijKnDlzctFFF33j67233nqroGSUXZs2bfLwww+nZ8+eNV7vTZw4MT169Mjs2bOLjkhJ6XsURd8rTtOiA1AO5557bs4777xsvvnmadu2rXsgUG/UHkVRexTl3XffTefOnb9yfOHChZk/f34BiWgs9D2Kou9RlAsuuCAXXnhhTj311KKj0MioPYpy6KGHZuTIkdl///293qNezZkz52svXf3hhx+6xzN1St+jKPpecQzGqRXXXXddbrrppuy///5FR6GRUXsURe1RlA033DBPPvlkOnToUOP4f//3f2eTTTYpKBWNgb5HUfQ9ijJ9+vT85Cc/KToGjZDaoygPPfRQHnjggWyzzTZFR6GR2W677fKHP/wh559/fpIvr46xcOHCXHLJJfnud79bcDrKTN+jKPpecQzGqRXz5s3L1ltvXXQMGiG1R1HUHkU5++yzs//+++fdd9/NwoULc/fdd+e1117LH/7wh/z5z38uOh4lpu9RFH2PovzkJz/JiBEjcsQRRxQdhUZG7VGUlVdeOausskrRMWiELrnkkvTu3TujR4/OvHnzcsopp2T8+PH5+OOP8/TTTxcdjxLT9yiKvlcc9xinVpx66qlp0aJFzjzzzKKj0MioPYqi9ijSww8/nEGDBmXMmDFZuHBhNt1005x11lnZcccdi45Giel7FEnfowi/+tWvcvnll2eXXXZJjx490qxZsxrrxxxzTEHJKDu1R1GGDRuWe++9NzfffPPXXt4V6tK0adMyePDgGq/3fv7zn6dt27ZFR6PE9D2KpO8Vw2CcWnHsscfmD3/4QzbaaKNstNFGX/ml7fLLLy8oGWWn9iiK2gMaG30PaGw6der0jWsVFRV566236jENjYnaoyibbLJJJkyYkKqqqnTs2PErr/fGjh1bUDKAuqHvQePjUurUir///e/ZeOONkyTjxo2rsVZRUVFAIhoLtUdR1B5FOeigg3LIIYdku+22KzoKjYy+R1H0PYoyceLEoiPQSKk9irL77rsXHYFGqmPHjjnkkENy8MEHZ6211io6Do2IvkdR9L3iOGMcAOBb5Ec/+lEeeOCBrLXWWjn44INz4IEHpn379kXHAqgz+h4AQLldffXVuemmm/Liiy/mu9/9bgYMGJAf/vCHWXbZZYuOBlAn9L3iGIwDAHzLfPTRRxk2bFhuuummjBs3Ln379s2AAQOy2267feWyXwBloO8BAJTfiy++mCFDhuS2227LF198kX322SeHHHJINt1006KjAdQJfa/+GYwDAHyLPf/88xkyZEhuuOGGtGjRIvvtt1+OOuqodOnSpehoAHVC3wMAKLf58+fn2muvzamnnpr58+ene/fuOfbYY3PwwQe7jRNQSvpe/aksOgAAAEtm6tSpGTFiREaMGJEmTZpk5513zvjx49OtW7dcccUVRccDqHX6HgBAec2fPz933nln+vfvnxNPPDGbb755brjhhuy5554544wzsu+++xYdEaBW6Xv1zxnjAADfIvPnz899992XoUOHZsSIEdloo41y6KGHZt99903Lli2TJLfffnuOPPLITJ8+veC0AEtP3wMAKLexY8dm6NChue2229KkSZPsv//+OfTQQ9O1a9fqPc8991y22267zJ07t8CkALVD3ytO06IDAACw6Nq2bZuFCxdm7733zqhRo7Lxxht/ZU+/fv3SqlWres8GUBf0PRqiyZMnp3379mnSpEnRUWhk1B5QRltssUV22GGHDB48OLvvvnuaNWv2lT3dunXLXnvtVUA6gNqn7xXHGePUub/97W/p2bNnVlpppaKj0MioPYqi9qhLt9xyS37yk5+kefPmRUeBavoedUnfoyGqrKxMly5d8qtf/Sp77LFH0XFoRNQeRTnvvPPSu3fvbLfddkVHoYTefvvtdOjQoegYUIO+R13S94pjME6dq6yszMorr5xf/OIXOfHEE4uOQyOi9iiK2gMaG30PaGxGjhyZiRMnZsSIEbn11luLjkMjovYoSqdOnfLee++lT58+uf/++4uOA1Dn9D0oJ5dSp85NnDgxEydOzMMPP1x0FBoZtUdR1B7Q2Oh7QGOz/fbbZ/vtt89BBx1UdBQaGbVHUSZOnJjPPvssI0eOLDoKQL3Q96CcnDEOAAAA8H+YN29e5s2blxYtWhQdhUZG7QEAQO2oLDoA5fTWW29l/PjxWbhwYdFRaGTUHkVRe0Bjo+8BZTZ06NAMHDgwf/zjH5Mkp59+elq2bJmVVlopO+ywQz766KOCE1JWao+GYs6cORkyZEiuueaavPHGG0XHAahz+h40DgbjLJX58+fn7LPPzg9+8INceOGFWbBgQfbee+906dIlG220Ubp3755JkyYVHZMSUnsURe0BjY2+BzQ2F154YX7+85/nlVdeyTHHHJMjjzwyN910U84777xcdNFFefXVV/PLX/6y6JiUkNqjKJMnT87222+fli1bZocddsjkyZOz6aab5tBDD83AgQOz8cYb529/+1vRMQFqjb4HjZfBOEvltNNOy+DBg9O6desMGTIke+yxR55//vnceuutuf3229O0adOcccYZRcekhNQeRVF7NGR/+9vfMnPmzKJjUDL6Hg2ZvkdduOmmm3LjjTfm0UcfzcMPP5zf/e53ufrqq3Pqqafm5JNPzu9+97s8+OCDRcekhNQeRTnppJMyb968DB48OMsvv3z69euXLl26ZOrUqXnvvfey884755xzzik6Jo3UeeedZ0BJrdP3aMj0vbrlHuMslQ4dOmTw4MHZeeed8/rrr6dr16554IEHstNOOyVJRo4cmX333TfvvPNOwUkpG7VHUdQeDVllZWVWXnnl/OIXv8iJJ55YdBxKQt+jIdP3qAvLLrts3nzzzay11lrVj//+979n/fXXT5K8++676dSpU+bNm1dkTEpI7VGUNm3a5L777suWW26Zjz/+OKuttlqefvrpbLXVVkmSF198MX369MmHH35YcFIao06dOuW9995Lnz59cv/99xcdh5LQ92jI9L261bToAHy7/eMf/0jPnj2TJOutt16WXXbZdO7cuXp9vfXWy7Rp04qKR4mpPYqi9mjIJk6cmIkTJ+bhhx8uOgolou/RkOl71IX58+dn2WWXrX68zDLLpFmzZtWPmzZtmgULFhQRjZJTexTlgw8+SIcOHZIkq6yySpZffvm0bt26er1NmzaZPn16UfFo5CZOnJjPPvssI0eOLDoKJaLv0ZDpe3XLYJylsmDBgq/8ktakSZPqx5WVlXFRAuqC2qMoao+GrEOHDunQoUN69+5ddBRKRN+jIdP3qCsvv/xy9Yd+qqqq8uqrr2b27NlJ4swh6pTaowhVVVWpqKiofvyvf4eGoHnz5unXr1/RMSgRfY+GTt+rOwbjLLWHH344K620UpJk4cKFeeyxxzJu3LgkyYwZMwpMRtmpPYqi9mhI3nrrrcydOzcbbLBBKisri45DSel7NCT6HvWhT58+NT70s+uuuyb58k3Tf38jFWqT2qMoZ511VpZffvkkybx583LhhRdWv/779NNPi4xGIzNnzpzccccdmTt3bnbcccd06dKl6EiUlL5HQ6Hv1S/3GGepLMobURUVFS71Ra1TexRF7VGU+fPn54ILLsjYsWPzne98J6eddlr222+/3HnnnUmS9ddfPw8++GA6duxYbFBKR9+jKPoeRXn77bcXad8/L78JtUXtUZTevXsv0ocuHn/88XpIQ2MyefLk7L///tWv92688cbssMMOeeONN5Ikyy23XB566KFst912BSelbPQ9iqLvFc9gHADgW+DEE0/MLbfckv79++fxxx9P9+7d89prr+Xcc89NZWVlzj///PTo0SN//OMfi44KUCv0PQCActtzzz0zZcqU/PznP89///d/5/XXX8+6666bG2+8MZWVlTnqqKPy0Ucf5a9//WvRUQFqhb5XPINxAIBvgQ4dOmTw4MHZeeed8/rrr6dr16554IEHstNOOyVJRo4cmX333TfvvPNOwUkBaoe+R5FmzZqVFVdcMUny4IMP5osvvqhea9KkSXbZZZeiolFyag9oTNq0aZP77rsvW265ZT7++OOsttpqefrpp7PVVlslSV588cX06dMnH374YcFJAWqHvlc8g3GWyoIFC/Lyyy+nR48eSZLrrrsu8+bNq15v0qRJjjzySPf+o9apPYqi9ihKs2bNMmnSpLRv3z7Jl5dW+vvf/15936GpU6dmrbXWqvHmKdQGfY+i6HsU5c9//nPOPPPMPP/880mSli1bZs6cOdXrFRUVueOOO/LjH/+4qIiUlNqjKDNmzMhtt92WI488Mkmy7777Zu7cudXrTZo0ye9///u0atWqoISUVZMmTfKPf/wjrVu3TpK0aNEif//737POOuskSd577720a9fObZuodfoeRdH3ite06AB8u91xxx25/vrrM3LkyCTJySefnFatWqVp0y9L68MPP0zz5s0zYMCAImNSQmqPoqg9irJgwYI0a9as+nHTpk3TpEmT6seVlZXxeUfqgr5HUfQ9ivK73/0uRx99dI1jb775ZvWbVRdffHGGDBliOEmtU3sU5fe//31efPHF6gHRfffdl379+qVly5ZJkmeffTZXXnllzjnnnAJTUkZVVVU17vO8KPd8htqg71EUfa94BuMslaFDh+aII46ocWzkyJHVv7Rdd911GTZsmDdKqXVqj6KoPYr08MMPZ6WVVkqSLFy4MI899ljGjRuX5MtPO0Nd0Pcokr5HEf7+97/nrLPO+sb1nXbaKZdeemk9JqKxUHsU5a677srZZ59d49jFF19c/Xpv+PDhOe+88wyIqBNnnXVWll9++STJvHnzcuGFF1a//vv000+LjEaJ6XsUSd8rlsE4S+WVV15Jt27dvnF9++23zy9+8Yt6TERjofYoitqjSAceeGCNx4cffniNxz5lSl3Q9yiSvkcRpk2bllVXXbX68eOPP5611lqr+nGLFi0yc+bMIqJRcmqPokyYMCGdO3eufrz++utnmWWWqX7cs2fPvPHGG0VEo+S22267vPbaa9WPt95667z11ltf2QO1Td+jKPpe8QzGWSoffvhhWrRoUf34rbfeqvFLXLNmzWrcDwtqi9qjKGqPoixcuLDoCDRS+h5F0fcoyiqrrJIJEyakU6dOSZLNN9+8xvobb7yRVVZZpYholJzaoyiffvpp5s2bV/149OjRNdbnzJnj5zJ14oknnig6Ao2UvkdR9L3iVRYdgG+31q1b1/h0y+qrr57Kyv9fVq+88kratGlTRDRKTu1RFLUHNDb6HtDYbLfddrnqqqu+cf2qq65yFgd1Qu1RlHXWWSdjx479xvXRo0dXf2ADoAz0PWi8KqqqqqqKDsG31yGHHJLXXnstTz/99FfWqqqqss0226Rr164ZMmRIAekoM7VHUdQeRVmwYEFefvnl9OjRI8mX93X+1083N2nSJEceeWSNgSXUBn2Pouh7FOX555/PVlttlR/84Ac55ZRTst566yVJXnvttfz617/OAw88kGeeeSabbrppwUkpG7VHUc4888zcfPPNGTVq1Fc+8Dh16tT06tUrBxxwQC644IKCElJWM2bMyG233ZYjjzwySbLvvvtm7ty51etNmjTJ73//+7Rq1aqghJSVvkdR9L3iGYyzVCZMmJBNN900Xbt2zUknnZT11lsvFRUVefXVV3PppZfmtddey5gxY2rcrwNqg9qjKGqPotx66625/vrrM3LkyCRJy5Yt06pVqzRt+uWdcT788MNceeWVGTBgQJExKSF9j6LoexTp3nvvzaGHHpqPP/64xvGVV145N9xwQ3bfffdiglF6ao8ifPLJJ+nVq1feeeed7L///jVe7w0bNizt27fPqFGj0rJly6KjUjKXXHJJXnzxxQwbNizJl6/3+vXrV11rzz77bPbaa6+cc845BaakjPQ9iqLvFc9gnKU2atSoHHTQQXn11VdTUVGR5Muzh7p27ZqhQ4emV69eBSekrNQeRVF7FGGHHXbIIYcckr333jvJly+cX3zxxayzzjpJvjyT8o477sjjjz9eZExKSt+jCPoeRfv000/z8MMP54033kiSdOnSJTvuuGNWWGGFgpNRdmqPIkyfPj2nn3567rzzzsyYMSNJ0qpVq+y5554ZNGiQ+9tTJ3r16pWzzz47O++8c5Kvvt4bPnx4zjvvvDz//PNFxqSk9D2KoO8Vz2CcWvPCCy/k9ddfT/LlL22bbLJJwYloLNQeRVF71Kc111wzDzzwQHr27Jnkqy+cX3nllWyzzTZfObsIapO+R33S9wCg/lVVVeWDDz5Ikqy++urVH4qEurDaaqvlmWeeqb51xOabb5577rkna665ZpLkrbfeykYbbZTZs2cXGZOS0/eoT/pe8ZoWHYDy2HjjjbPxxhsXHYNGSO1RFLVHffrwww/TokWL6sdvvfVWVl111erHzZo1y5w5c4qIRiOi71Gf9D0aqvfeey/XX399zjrrrKKjUDKXXXZZfvzjH6dDhw5FR6ERq6ioyBprrFF0DBqJTz/9NPPmzat+PHr06Brrc+bMycKFC+s7Fo2Mvkd90veKV1l0AMptypQpOeSQQ4qOQQkNHDgwTz75ZNEx4Cv0PepK69at89prr1U/Xn311VNZ+f9fyr3yyitp06ZNEdEoOT9zKYq+R0M1bdq0nHvuuUXHoIROPvnkrLvuutlhhx1yxx131HjTFIr0yiuvVF+xBWrTOuusk7Fjx37j+ujRo9OpU6d6TERj0aNHj5x//vmZMmVK0VFoZPS94rmUOnXqxRdfzKabbpoFCxYUHYWSqaysTEVFRdZdd90MGDAgBx54oDdGaRD0PerKIYccktdeey1PP/30V9aqqqqyzTbbpGvXrhkyZEgB6SgzP3Mpir5HUf7+97//x/VXX301e++9t9d71LrKysoMGTIk99xzTx588MGsuOKK2W+//XLooYeme/fuRcejEfN7LnXlzDPPzM0335xRo0Z95XeMqVOnplevXjnggANywQUXFJSQsqqsrMwqq6ySGTNmpG/fvjnssMOy2267pWlTF1mmbul7xTMYZ6ncd999/3H9rbfeyoknnuiFM7WusrIyjzzySO6///788Y9/zMyZM7PTTjvlsMMOy84771zjbCKoTfoeRZkwYUI23XTTdO3aNSeddFLWW2+9VFRU5NVXX82ll16a1157LWPGjEnnzp2LjkrJ+JlLUfQ9ivLPDwR93dsl/zxeUVHh9R61rrKyMtOmTcsaa6yR999/PzfddFOGDh2a119/PZtttlkOO+yw7LXXXmnZsmXRUSmZE0444T+uf/DBB7n11lv1PWrdJ598kl69euWdd97J/vvvX+P13rBhw9K+ffuMGjVK36PWVVZW5p133smoUaMyZMiQPPTQQ1l55ZVzwAEHZMCAAdlggw2KjkhJ6XvFMxhnqfynNwz+yRsG1IV/fcNg/vz5GT58eIYMGZJHH300rVu3zkEHHZSDDz7YG6XUOn2PIo0aNSoHHXRQXn311VRUVCT58qzJrl27ZujQoenVq1fBCSkjP3Mpkr5HEVZfffX8+te/Tp8+fb52ffz48fnBD37g9R617l9/5v6rJ598MjfeeGPuuuuuJMns2bOLiEeJNWnSJBtvvHFWXHHFr12fPXt2xo4dq+9RJ6ZPn57TTz89d955Z2bMmJEkadWqVfbcc88MGjQoq6yySrEBKaV//5k7bdq0DB06NEOHDs2ECRPSq1evHHrooW6XSJ3Q94plMM5Sad++fa655prsvvvuX7v+wgsvZLPNNvPCmVr3TW8YTJ48OUOGDMlNN92UKVOmqD1qnb5HQ/DCCy/k9ddfT5J06dIlm2yyScGJKDM/c2kI9D3q0/e///3813/9V375y19+7fqLL76YTTbZJAsXLqznZJRdkyZNMnXq1K/8zP2nWbNm5Y477shhhx1Wz8kou65du+aXv/xl9ttvv69d93su9aGqqioffPBBki8/pPbPD0VCXfhPP3OfeOKJ3HjjjRk+fLgPo1Gn9L1iGIyzVPr375+NN94455133teue8OAuvJNb9L/U1VVVR599NHssMMO9ZyMstP3gMbGz1ygsRk+fHjmzJnzjQOi6dOn57777suBBx5Yz8kou//rZy7UlX333TdrrLFGrrjiiq9d93suUDaL8jN31qxZ33glDeDby2CcpfLkk09mzpw5+f73v/+163PmzMno0aOz/fbb13Myyq5Tp04ZPXp0Vl111aKj0MjoezRUU6ZMydlnn50hQ4YUHYWS8TOXogwcODB77rlntt1226KjAECpTZs2LZ9//nk6dOhQdBSo4ZVXXskuu+ySt956q+golMzBBx+cq666yn2cqXc9evTInnvumYMOOihrrbVW0XEaJYNxAIASePHFF7Ppppu6vCFQGpWVlamoqMi6666bAQMG5MADD0ybNm2KjgUAQD3xey5QNpWVlVlllVUyY8aM9O3bN4cddlh22223NG3atOhojYZ/0wAA3wL33Xfff1z3CXqgjEaMGJH7778/l156ac4888zstNNOOeyww7LzzjunsrKy6HgAACyFE0444T+u//PeuwBl8ve//z2jRo3KkCFDstdee2XllVfOAQcckAEDBmSDDTYoOl7pOWMcAOBb4J9nTv6nl24VFRU+SQ+Uxr/e92/+/PkZPnx4hgwZkkcffTStW7fOQQcdlIMPPjidO3cuOioAAEugSZMm2Xjjjb/xPs6zZ8/O2LFj/Z4LlMa/399+2rRpGTp0aIYOHZoJEyakV69eOfTQQ3PIIYcUnLS8DMYBAL4F2rdvn2uuuSa77777166/8MIL2WyzzbxhAJTGv79h8E+TJ0/OkCFDctNNN2XKlCn6HgDAt1TXrl3zy1/+Mvvtt9/Xrvs9FyibJk2aZOrUqV/5PTdJnnjiidx4440ZPnx4Zs+eXUC6xsG15wAAvgU222yzjB079hvX/6+zyQHKYu21184555yTiRMn5i9/+UvRcQAAWEKbbbZZxowZ843rfs8FyuY/9bTevXvnlltuyT/+8Y96TNT4uMc4AMC3wMknn5w5c+Z843rnzp3z+OOP12MigLrVoUOHNGnS5BvXKyoqssMOO9RjIvj/Jk+enPbt2//HGoW6oPaAMrnsssvy+eeff+N6z549s3DhwnpMBFC3DjzwwCy33HL/cc833V6C2uGMcerc3/72t8ycObPoGDRCao+iqD3qwrbbbpvvf//737i+wgorZPvtt6/HRPD/6XvUhYkTJ2bVVVctOgZ8rY4dO6Zbt265++67i45CI6P2KMp5552Xv/3tb0XHoGTatGmTDh06FB0Dvpa+R10YOnRoWrZsWXSMRs1gnDrXu3fvrLPOOrnsssuKjkIjo/YoitoDGht9D2hs/vrXv+b000/PXXfdVXQUGhm1R1GGDh2a73//+/nBD35QdBSAeqHvQTm5lDp1buLEiZk4cWIefvjhoqPQyKg9iqL2gMZG3wMam969eydJDjrooEJz0PioPYoyceLEfPbZZxk5cmTRUQDqhb4H5VRR9Z/u9A4AAADQCA0bNiz77bff166dfPLJueSSS+o5EY2F2gMAgLrhUurUqjFjxmTYsGH54x//mLFjxxYdh0ZE7VHfDjroIPcZAhoVfQ9obI4++uj8+c9//srx448/PsOGDSsgEY2F2qMoHTt2zHnnnZfJkycXHQWgXuh70PgYjFMr3n///Xzve9/LFltskWOOOSZHH310Nt988/Tp0ycffPBB0fEoMbVHUT755JPsuOOO6dKlSwYNGpR333236EgAdUrfAxqb22+/Pfvtt1+NDwUNHDgwd955Zx5//PECk1F2ao+inHjiibn33nuzzjrrZIcddsjtt9+ezz//vOhYAHVG34PGx2CcWjFw4MDMmjUr48ePz8cff5zp06dn3LhxmTVrVo455pii41Fiao+i/OlPf8q7776bo48+Ov/93/+djh07Zqeddspdd92V+fPnFx2PRupvf/tbZs6cWXQMSkrfoyHS96hL3//+93Pddddl9913z+jRo3PUUUfl7rvvzuOPP56uXbsWHY8SU3sUZeDAgRkzZkzGjBmTbt265Zhjjknbtm1z9NFHuzofhTnvvPNcuYo6o+/REOl7dcs9xqkVK620Uh599NFsscUWNY6PGjUqO+64Y2bMmFFMMEpP7dFQPP/88xkyZEhuuOGGtGjRIvvtt1+OOuqodOnSpehoNCKVlZVZeeWV84tf/CInnnhi0XEoOX2PhkDfoz4MHjw4xx9/fFZfffU8/vjj6dy5c9GRaCTUHkWbP39+rr322px66qmZP39+unfvnmOPPTYHH3xwKioqio5HI9GpU6e899576dOnT+6///6i41By+h4Ngb5Xt5oWHYByWLhwYZo1a/aV482aNcvChQsLSERjofZoCKZOnZoRI0ZkxIgRadKkSXbeeeeMHz8+3bp1y8UXX5zjjz++6Ig0EhMnTszEiRPz8MMPFx2FktP3aCj0PWrbCSec8LXH11hjjWyyySa59tprq49dfvnl9RWLRkDt0ZDMnz8/w4cPz9ChQ/PII4/kO9/5TgYMGJB//OMfOeOMM/Loo4/m1ltvLTomjcTEiRPz2WefZeTIkUVHocT0PRoSfa9uOWOcWrHbbrtlxowZue2229KuXbskybvvvpt99903K6+8coYPH15wQspK7VGU+fPn57777svQoUMzYsSIbLTRRjn00EOz7777pmXLlkm+vDfgkUcemenTpxecFmDp6XtAY/Dd7353kfZVVFTkr3/9ax2noTFRezQEY8eOzdChQ3PbbbelSZMm2X///XPooYfWuIT/c889l+222y5z584tMClA7dD3oPExGKdWTJkyJbvttlvGjRuXtdZaKxUVFZk8eXJ69OiRe++9N2uuuWbRESkptUdRVltttSxcuDB77713DjvssGy88cZf2TN9+vRsuummmThxYv0HpLQOOuigHHLIIdluu+2KjkIjo+9RFH0PAOpHkyZNssMOO2TAgAHZfffdv/YKfXPmzMnRRx+doUOHFpCQsurYsWMOOeSQHHTQQVl77bWLjkMjou9RFH2vOAbj1KpHHnkkr776aqqqqtKtW7f07du36Eg0EmqP+nbLLbfkJz/5SZo3b150FBqZH/3oR3nggQey1lpr5eCDD86BBx6Y9u3bFx2LRkDfoyj6HgDUj7fffjsdOnQoOgaN0NVXX52bbropL774Yr773e9mwIAB+eEPf5hll1226GiUnL5HUfS94hiMs9S++OKLNG/ePC+88EK6d+9edBwaEbVHQzFlypRUVFS4QgH15qOPPsqwYcNy0003Zdy4cenbt28GDBiQ3Xbb7Ws/3Qy1Td+jvul7FGHOnDm56KKL8thjj+X999/PwoULa6y/9dZbBSWj7NQe0Fi9+OKLGTJkSG677bZ88cUX2WeffXLIIYdk0003LToaQJ3Q9+qfwTi1Yt11183dd9+dnj17Fh2FRkbtUZQvvvgi5557bq666qrMnj07SdKiRYsMHDgwZ599tjfpqTfPP/98hgwZkhtuuCEtWrTIfvvtl6OOOipdunQpOholo+/RUOh71Je99947I0eOzP7775+2bdumoqKixvqxxx5bUDLKTu1RlAULFuSKK67InXfemcmTJ2fevHk11j/++OOCktHYzJ8/P9dee21OPfXUzJ8/P927d8+xxx6bgw8++Cs9EZaGvkdDoe/Vn6ZFB6AcfvnLX+b000/PsGHDssoqqxQdh0ZE7VGUo48+OsOHD8/FF1+crbbaKkny7LPP5pxzzsmHH36Y6667ruCENAZTp07NiBEjMmLEiDRp0iQ777xzxo8fn27duuXiiy/O8ccfX3RESkTfoyHQ96hPDz30UB544IFss802RUehkVF7FOXcc8/NDTfckBNOOCFnnnlmzjjjjEyaNCn33HNPzjrrrKLj0QjMnz8/w4cPz9ChQ/PII4/kO9/5TgYMGJB//OMfOeOMM/Loo4/m1ltvLTomJaLvUTR9r/45Y5xasckmm+TNN9/M/Pnz06FDh6ywwgo11seOHVtQMspO7VGUlVZaKbfffnt22mmnGscfeuih7LXXXpk5c2ZBySi7+fPn57777svQoUMzYsSIbLTRRjn00EOz7777pmXLlkmS22+/PUceeWSmT59ecFrKRN+jKPoeRenUqVMefPDBbLDBBkVHoZFRexRl3XXXzVVXXZVddtklLVu2zAsvvFB97H/+53+8MU+dGTt2bIYOHZrbbrstTZo0yf77759DDz00Xbt2rd7z3HPPZbvttsvcuXMLTErZ6HsURd8rjjPGqRW777570RFopNQeRWnevHk6duz4leMdO3bMMsssU/+BaDTatm2bhQsXZu+9986oUaOy8cYbf2VPv3790qpVq3rPRrnpexRF36Mo559/fs4666zcfPPNWX755YuOQyOi9ijKtGnT0qNHjyRf3jLnnx983HXXXXPmmWcWGY2S22KLLbLDDjtk8ODB2X333b/2Nk3dunXLXnvtVUA6ykzfoyj6XnGcMQ4AS+C8887Lq6++mqFDh2bZZZdNknz++ecZMGBAunTpkrPPPrvghJTVLbfckp/85Cdp3rx50VFoZPQ9iqLvUZRNNtkkEyZMSFVVVTp27PiVN6tcnYq6ovYoyvrrr58//OEP6dWrV7bddtvssssuOe2003LHHXdk4MCBef/994uOSEm9/fbb6dChQ9ExaIT0PYqi7xXHGePUqjFjxuSVV15JRUVFunXrlk022aToSDQSao/69vzzz+exxx7LmmuumZ49eyZJXnzxxcybNy99+vTJHnvsUb337rvvLiomJbT//vtX/33KlCmpqKjImmuuWWAiGgt9j6LoexTF1akoitqjKD/84Q/z2GOPpVevXjn22GOz995758Ybb8zkyZNz/PHHFx2PEjMcoij6HkXR94rjjHFqxfvvv5+99torTzzxRFq1apWqqqrMnDkz3/3ud3P77bdn9dVXLzoiJaX2KMrBBx+8yHuHDh1ah0lobL744ouce+65ueqqqzJ79uwkX17ua+DAgTn77LO/9tJLUBv0PYqi7wFAMf73f/83Tz/9dDp37pz+/fsXHYcSW7BgQa644orceeedmTx5cubNm1dj/eOPPy4oGY2Nvkd90feKYzBOrfjpT3+aCRMm5JZbbskGG2yQJHn55Zdz4IEHpnPnzrntttsKTkhZqT2gsTniiCMyfPjwnHfeedlqq62SJM8++2zOOeec7LbbbrnuuusKTghQu/Q9AKh78+fPz89+9rOceeaZWWeddYqOQyNz1lln5YYbbsgJJ5yQM888M2eccUYmTZqUe+65J2eddVaOOeaYoiNSQvoeRdL3imMwTq1YaaWV8uijj2aLLbaocXzUqFHZcccdM2PGjGKCUXpqD2hsVlpppdx+++3Zaaedahx/6KGHstdee2XmzJkFJQOoG/oeRamsrExFRcU3ri9YsKAe09CYqD2K0qpVq4wdO9aAiHq37rrr5qqrrsouu+ySli1b5oUXXqg+9j//8z+59dZbi45ISel7FEXfK457jFMrFi5c+LWXMGzWrFkWLlxYQCIaC7VHfXv99dfTpUuX6jeqnnrqqVx66aV544030rZt2wwcODC77bZbwSkps+bNm6djx45fOd6xY8css8wy9R+I0tP3KJq+R1GGDx9e4/H8+fPz/PPP5+abb865555bUCoaA7VHUX74wx/mnnvuyQknnFB0FBqZadOmpUePHkm+vGXOPz/4uOuuu+bMM88sMholp+9RFH2vOAbj1Irvfe97OfbYY3PbbbelXbt2SZJ33303xx9/fPr06VNwOspM7VHfNthgg0ydOjVrrLFGnnjiifTp0ye77LJL9t1334wdOzZ77LFHHnzwwfTr16/oqJTUz3/+85x//vkZOnRoll122STJ559/ngsvvDBHH310wekoI32Poul7FOXrPvTz4x//OBtuuGHuuOOODBgwoIBUNAZqj6J07tw5559/fp555plsttlmWWGFFWqsu6wrdWXNNdfM1KlTs/baa6dz584ZMWJENt100zz33HPVr/+gLuh7FEXfK45LqVMrpkyZkt122y3jxo3LWmutlYqKikyePDk9evTIvffemzXXXLPoiJSU2qO+VVZWZtq0aVljjTXSt2/frL/++rnmmmuq108//fQ888wzGTlyZIEpKbMf/vCHeeyxx7LsssumZ8+eSZIXX3wx8+bN+8oHgu6+++4iIlIy+h5F0/doaCZMmJCNNtooc+bMKToKjYzao6516tTpG9cqKiry1ltv1WMaGpPTTjstK664Yn7xi1/krrvuyt57752OHTtm8uTJOf7443PRRRcVHZGS0vcoir5XHINxatUjjzySV199NVVVVenWrVv69u1bdCQaCbVHffnXAVG7du0yfPjw9OrVq3r95ZdfznbbbZcPP/ywwJSU2cEHH7zIe4cOHVqHSWgs9D2Kpu/RkMydOzenn356Hnroobz22mtFx6ERUXvUtaqqqrz99ttZY401svzyyxcdh0buf//3f/P000+nc+fO6d+/f9FxKCl9j4ZE36s/BuMAsBgqKyvzxhtvZPXVV88mm2ySP/3pT9l4442r199888307NnTWRxAaeh7QGO18sorp6KiovpxVVVVPvnkkyy//PIZNmyYN6yoM2qPIixcuDDNmzfP+PHj06VLl6Lj0IjMnz8/P/vZz3LmmWdmnXXWKToOjYi+R1H0vWK5xzi14phjjknnzp2/cs+N3/72t3nzzTdz5ZVXFhOM0lN7FGG99dZL8uUbVGPGjKkxIBo/fnzat29fUDKAuqHvAY3Rv/8uUVlZmdVXXz29evXKyiuvXEwoGgW1RxEqKyvTpUuXfPTRRwZE1KtmzZpl+PDhOfPMM4uOQiOj71EUfa9YzhinVrRv3z733XdfNttssxrHx44dm/79++edd94pKBllp/aob/9+D922bdtWD4yS5De/+U3mzZuXk08+ub6jUXKvv/56unTpUn320FNPPZVLL700b7zxRtq2bZuBAwdmt912KzglZaTvURR9DwDq1wMPPJCLLroogwcPTvfu3YuOQyNy8MEHp0ePHjnhhBOKjkIjo+9RFH2vOAbj1IrmzZtn3Lhx6dy5c43jb775Zrp3757PPvusoGSUndoDGosmTZpk6tSpWWONNfLEE0+kT58+2WWXXfKd73wnY8eOzfDhw/Pggw+mX79+RUcFqBX6Hg3BjBkzMmrUqLz//vtZuHBhjbUDDjigoFQ0BmqPIqy88sr59NNP88UXX2SZZZbJcsstV2P9448/LigZZXfhhRfm0ksvTZ8+fbLZZptlhRVWqLH+71eKhNqi71EUfa84BuPUiu7du+eII47I0UcfXeP41VdfncGDB+fll18uKBllp/Yo2rx58772zaq11167oESUVWVlZaZNm5Y11lgjffv2zfrrr59rrrmmev3000/PM88885Wze6G26XvUF32Pot1///3Zd999M2fOnLRs2bLGPZ8rKiq8UUqdUXsU5eabb/6P6wceeGA9JaGx6dSp0zeuVVRU5K233qrHNDQm+h5F0feKYzBOrRgyZEiOPvronHzyyfne976XJHnsscdy2WWX5corr8xhhx1WcELKSu1RlNdffz0DBgzIM888U+N4VVVVKioqsmDBgoKSUVb/OiBq165dhg8fnl69elWvv/zyy9luu+3y4YcfFpiSMtP3qG/6HkVbb731svPOO2fQoEFZfvnli45DI6L2gMakqqoqb7/9dtZYYw09D2gU9L1iNS06AOVwyCGH5PPPP8+FF16Y888/P0nSsWPHDB482CW+qFNqj6IcfPDBadq0af785z+nbdu2Nc7igLryySefpHnz5lluueWy7LLL1lhbZpllMnfu3IKS0RjoexRB36NI7777bo455hhvVlHv1B4Nwdy5czN//vwax1ZcccWC0lBmVVVVWW+99TJ+/Ph06dKl6Dg0Yvoe9UXfK5bBOLXmyCOPzJFHHpkPPvggyy23XFq0aFF0JBoJtUcRXnjhhYwZMyZdu3YtOgqNyHrrrZfkyxfQY8aMycYbb1y9Nn78+LRv376gZDQG+h5F0PcoUr9+/TJ69Oiss846RUehkVF7FGXOnDk59dRTc+edd+ajjz76yrorBFEXKisr06VLl3z00UcGRNQ7fY8i6HvFMhin1q2++upFR6CRUnvUp27durl0K/Xq8ccfr/G4bdu2NR5PmjTJ7SOoU/oe9U3fowj33Xdf9d932WWXnHzyyXn55ZfTo0ePNGvWrMbe/v3713c8Skzt0RCccsopefzxx3PttdfmgAMOyDXXXJN33303119/fS666KKi41FiF198cU4++eQMHjw43bt3LzoOjYi+R1H0veK4xzhL5fXXX0+XLl2qL6X51FNP5dJLL80bb7yRtm3bZuDAgdltt90KTkkZqT2KMGvWrOq/jx49Or/85S8zaNCgr32zyqWWgDLQ94DGprKycpH2VVRUOIOIWqX2aAjWXnvt/OEPf0jv3r2z4oorZuzYsencuXNuueWW3HbbbXnwwQeLjkhJrbzyyvn000/zxRdfZJlllslyyy1XY/3jjz8uKBllp+9RFH2vOM4YZ6lssMEGmTp1atZYY4088cQT6dOnT3bZZZfsu+++GTt2bPbYY488+OCD6devX9FRKRm1RxFatWpV4566VVVV6dOnT409VVVV3qyiXsybNy/vv/9+Fi5cWOP42muvXVAiykjfoyHR96gP/15fUF/UHg3Bxx9/nE6dOiX58kOP/3xT/r/+679y5JFHFhmNkrvyyiuLjkAjpe9RFH2vOAbjLJV/veDABRdckCOOOCLXXHNN9bHTTz89gwYNMpyk1qk9ivDvl3SFIrz++usZMGBAnnnmmRrHDSepC/oeDYG+BwD1Y5111smkSZPSoUOHdOvWLXfeeWe23HLL3H///WnVqlXR8SixAw88sOgINFL6HkXR94rjUuoslcrKykybNi1rrLFG2rVrl+HDh6dXr17V6y+//HK2224796Ok1qk9oLHaZptt0rRp05x22mlp27ZtjbN5k6Rnz54FJQOoG/oeRTnmmGPSuXPnHHPMMTWO//a3v82bb77pLA/qjNqjKFdccUWaNGmSY445Jo8//nh22WWXLFiwIF988UUuv/zyHHvssUVHpBGYO3du5s+fX+OY2zZRV/Q9GgJ9r34ZjLNUKisr88Ybb2T11VfPJptskj/96U/ZeOONq9fffPPN9OzZM3PmzCkuJKWk9ijC5MmTF+tyre+++27at29fh4lojFZYYYWMGTMmXbt2LToKjYC+R0Og71GU9u3b57777stmm21W4/jYsWPTv3//vPPOOwUlo+zUHg3F5MmTM3r06Ky77ro+iEadmjNnTk499dTceeed+eijj76y7gpB1Bd9j/qi7xWnsugAfPutt956WXnllTNx4sSMGTOmxtr48eO9OUqdUXvUty222CKHHXZYRo0a9Y17Zs6cmd///vfp3r177r777npMR2PRrVs3V8Og3uh7NAT6HkX56KOPstJKK33l+IorrqgmqVNqj4Zi7bXXzh577JGePXvm008/LToOJXbKKafkr3/9a6699tosu+yyueGGG3LuueemXbt2+cMf/lB0PBoRfY/6ou8Vxz3GWSr/ft/Jtm3b1ng8adKkHHbYYfUZiUZC7VGEV155JYMGDcr3v//9NGvWLJtvvnnatWuX5s2bZ/r06Xn55Zczfvz4bL755rnkkkuy0047FR2Zkpg1a1b133/961/nlFNOyaBBg9KjR480a9asxl6XWqI26XsURd+jIejcuXP+8pe/5Oijj65x/KGHHso666xTUCoaA7VHUXr37p1hw4ZlzTXXrHF81KhR2W+//fL6668XlIyyu//++/OHP/whvXv3ziGHHJJtt902nTt3TocOHfLHP/4x++67b9ERKSl9j6Loe8VxKXUAWEyfffZZHnzwwTz55JOZNGlS5s6dm9VWWy2bbLJJ+vXrl+7duxcdkZKprKyscU/dqqqqr9xj95/HXGqJuqDvUd/0PRqCIUOG5Oijj87JJ5+c733ve0mSxx57LJdddlmuvPJKH8Slzqg9itK/f/889dRTufbaa7PXXntl4cKFOe+88/KrX/0qAwcOzKWXXlp0REqqRYsWGT9+fDp06JA111wzd999d7bccstMnDgxPXr0yOzZs4uOSEnpexRF3yuOM8apVfPmzcv777+fhQsX1ji+OPemhCWh9qhPzZs3zx577JE99tij6Cg0Ev9+lQyob/oe9U3foyE45JBD8vnnn+fCCy/M+eefnyTp2LFjBg8enAMOOKDgdJSZ2qMo9913X6677roceuihue+++zJp0qRMnjw5DzzwQPr27Vt0PEpsnXXWyaRJk9KhQ4d069Ytd955Z7bccsvcf//9adWqVdHxKDF9j6Loe8Vxxji14vXXX8+AAQPyzDPP1DjuLA7qmtoDAABq2xdffJE//vGP6devX9q0aZMPPvggyy23XFq0aFF0NEpO7dEQnH766fn1r3+dpk2b5oknnsjWW29ddCRK7oorrkiTJk1yzDHH5PHHH88uu+ySBQsW5Isvvsjll1+eY489tuiIlJy+R33T94pjME6t2GabbdK0adOcdtppadu27Vcuc9izZ8+CklF2ag9oDCZPnrxYV8B499130759+zpMBFC39D0aguWXXz6vvPJKOnToUHQUGhm1R1GmT5+eQw89NI899lguueSSjBw5Mvfcc08uvvjiHHXUUUXHoxGZPHlyRo8enXXXXdd7e9QpfY+GQt+rPwbj1IoVVlghY8aMSdeuXYuOQiOj9oDGoHXr1unfv38OO+ywbLnlll+7Z+bMmbnzzjvzm9/8JocffngGDhxYzykBao++R0Pw3e9+N8cee2x23333oqPQyKg9itK+fft06tQpt9xySzp16pQkueOOO3LUUUflO9/5Th544IGCE9IYffrpp1l++eWLjkFJ6Xs0RPpe3XKPcWpFt27d8uGHHxYdg0ZI7QGNwSuvvJJBgwbl+9//fpo1a5bNN9887dq1S/PmzTN9+vS8/PLLGT9+fDbffPNccskl2WmnnYqODLBU9D0agqOOOionnnhi3nnnnWy22WZZYYUVaqxvtNFGBSWj7NQeRTniiCNyxhlnpLKysvrYT3/602yzzTY5+OCDC0xG2fXu3TvDhg3LmmuuWeP4qFGjst9+++X1118vKBllp+9RFH2vOM4YZ4nNmjWr+u+jR4/OL3/5ywwaNCg9evRIs2bNauxdccUV6zseJab2gMbqs88+y4MPPpgnn3wykyZNyty5c7Paaqtlk002Sb9+/dK9e/eiIwLUKn2PIv3rG6T/VFFRkaqqqlRUVGTBggUFpKIxUHtAY9O/f/889dRTufbaa7PXXntl4cKFOe+88/KrX/0qAwcOzKWXXlp0RIBape8Vx2CcJVZZWVnjfs7//AXtX/mljbqg9gAAgLr29ttv/8d193+mrqg96tPkyZOz9tprL/L+d999N+3bt6/DRDRW1113XU466aT0798/kyZNyuTJk3PTTTelb9++RUejZPQ9Ggp9rxgG4yyxkSNHLvLe7bffvg6T0NioPQAAAICl17p16/Tv3z+HHXZYttxyy6/dM3PmzNx55535zW9+k8MPPzwDBw6s55Q0Fqeffnp+/etfp2nTpnniiSey9dZbFx2JEtL3aEj0vfpnMA4AAADwNW655ZZcd911mThxYp599tl06NAhV155ZTp16pTddtut6HiUmNqjvnz88ccZNGhQhgwZkmbNmmXzzTdPu3bt0rx580yfPj0vv/xyxo8fn8033zy//OUvs9NOOxUdmRKaPn16Dj300Dz22GO55JJLMnLkyNxzzz25+OKLc9RRRxUdj5LR92gI9L3ifPWmRbCIJk+evFj733333TpKQmOj9gAAgLo2ePDgnHDCCdl5550zY8aM6ts0tWrVKldeeWWx4Sg1tUd9WmWVVXLppZfmH//4RwYPHpz11lsvH374Yd54440kyb777psxY8bk6aefNhyiznTv3j3vvfdenn/++Rx22GEZNmxYbrzxxpx55pnZZZddio5Hyeh7NAT6XnGcMc4Sc8kRiqL2AACAutatW7cMGjQou+++e1q2bJkXX3wx66yzTsaNG5fevXvnww8/LDoiJaX2gMbm/PPPzxlnnJHKyprn8b3zzjs5+OCD88gjjxSUDKBu6HvFMRhnibnkCEVRewAAQF1bbrnl8uqrr6ZDhw41hpNvvPFGNtpoo8ydO7foiJSU2gMAgLrhUuosMZccoShqDwAAqGudOnXKCy+88JXjDz30ULp161b/gWg01B7QGLhVItDY6HsNQ9OiA/Dt17x58+yxxx7ZY489io5CI6P2AACAunLyySfn5z//eT777LNUVVVl1KhRue222/KrX/0qN9xwQ9HxKDG1BzQGW2yxhVslAo2KvtcwuJQ6AAAAwNf4/e9/nwsuuCBTpkxJkrRv3z7nnHNOBgwYUHAyyk7tAWXnVolAY6PvNQwG4wAAAAD/ZsaMGWnVqlWS5MMPP8zChQuzxhprJEnefPPNdO7cucB0lJnaAxqTzz77LA8++GCefPLJTJo0KXPnzs1qq62WTTbZJP369Uv37t2LjghQq/S9YhmMAwAAAPybrbfeOn/961/TvHnzGsdfe+219OnTJ++8805BySg7tQcAAHWjsugAAAAAAA3NyiuvnN133z1ffPFF9bFXXnklvXv3zo9+9KMCk1F2ag8AAOqGwTgAAADAv/nTn/6UOXPmZJ999klVVVXGjRuX3r17Z++9985vfvObouNRYmoPAADqhkupAwAAAHyNmTNnpnfv3ll33XXz5JNP5oADDsgll1xSdCwaAbUHAAC1z2AcAAAAIMmsWbO+cmzatGnp27dvdt1111x00UXVx1dcccX6jEbJqT0AAKh7BuMAAAAAyf9r7+5Bo8rCMAC/I8aMxsYYRCwiIlpIGjWKibER8SdVCsEfFGwsVQaxCGIhYkQdRbCSNJaaQgQhjYrFFBJBrNRWBcGAJCiIgaDZYknYrLssQiajd58HppgzHzPvhVPNy70nCxYsSKlU+mF9+q+TUqmUqamplEqlfPv2bb7jUWD2HgAA1N/CRgcAAAAA+BU8efKk0RH4n7L3AACg/twxDgAAAAAAAEChLWh0AAAAAIBfwbt3735q/v3793VKwv+NvQcAAPWnGAcAAABIsmXLlhw/fjzPnj3715lPnz5lcHAwHR0duXfv3jymo8jsPQAAqD9njAMAAAAkef36dQYGBrJ37940NTWls7Mzq1atSrlczvj4eF69epWXL1+ms7MzV69ezb59+xodmYKw9wAAoP6cMQ4AAADwFxMTExkeHk6tVsubN2/y9evXtLW1ZePGjdmzZ086OjoaHZGCsvcAAKB+FOMAAAAAAAAAFJozxgEAAAAAAAAoNMU4AAAAAAAAAIWmGAcAAAAAAACg0BTjAAAAAAAAABSaYhwAAAAAAACAQlOMAwAAwG+mVCr95+v27dtz9lvVanVOvgsAAAAaZWGjAwAAAAA/5+nTp7Ped3V15cSJEzl8+PDM2tq1a+c7FgAAAPyyFOMAAADwm9m2bdsPa+3t7f+4DgAAAHiUOgAAABTO9+/fMzAwkDVr1qS5uTnr1q3LjRs3fpir1Wrp6enJ4sWLs3z58hw9ejSjo6PzHxgAAADqTDEOAAAABXPmzJmcO3cuR44cyYMHD9LX15dKpZILFy7MzDx//jy7du1KuVzO0NBQrl+/nkePHmXnzp2ZmJhoYHoAAACYex6lDgAAAAXy8ePH3Lx5M6dPn54pwnfv3p3Pnz/n8uXLqVQqWbp0aS5evJgVK1ZkeHg4ixYtSpKsX78+3d3duXPnTo4dO9bAqwAAAIC55Y5xAAAAKJCRkZFMTk7mwIEDs9YPHTqUL1++5MWLF0n+fIx6X1/fTCmeJF1dXVm9enVqtdq8ZgYAAIB6U4wDAABAgYyPjydJVq5cOWt9+v3Y2NjM3N9npuemZwAAAKAoFOMAAABQIK2trUmS0dHRWesfPnyY9Xlra+sPM9Nz0zMAAABQFIpxAAAAKJCtW7emqakpQ0NDs9bv3r2blpaWbNq0KUnS09OT+/fvZ3JycmZmZGQkb9++zY4dO+Y1MwAAANTbwkYHAAAAAOZOW1tbTp48mWq1mubm5mzfvj2PHz/OrVu3cv78+bS0tCRJzp49m+7u7vT29ubUqVMZGxtLf39/NmzYkIMHDzb4KgAAAGBuKcYBAACgYK5cuZJly5ZlcHAwly5dSnt7e65du5ZKpTIzs3nz5jx8+DD9/f3Zv39/lixZkt7e3lSr1ZTL5QamBwAAgLlXmpqammp0CAAAAAAAAACoF2eMAwAAAAAAAFBoinEAAAAAAAAACk0xDgAAAAAAAEChKcYBAAAAAAAAKDTFOAAAAAAAAACFphgHAAAAAAAAoNAU4wAAAAAAAAAUmmIcAAAAAAAAgEJTjAMAAAAAAABQaIpxAAAAAAAAAApNMQ4AAAAAAABAoSnGAQAAAAAAACi0PwDtziZM1BIMHQAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib as mpl\n", + "mpl.rcParams.update(mpl.rcParamsDefault)\n", + "\n", + "df = pd.DataFrame.from_dict(optimized_h5py_benchmarks+h5coro_beanchmarks+ optimized_xarray_benchmarks+kerchunk_benchmarks +\n", + " regular_h5py_benchmarks + kerchunk_benchmarks + regular_xarray_benchmarks )\n", + "\n", + "# filtered_df = df[df['dataset'].str.contains(\"7GB\") | df['tool'].str.contains(\"xarray\") ]\n", + "\n", + "plt.figure(figsize=(20, 5)) \n", + "\n", + "\n", + "plt.style.use('seaborn-v0_8-notebook')\n", + "# plt.style.use('grayscale')\n", + "\n", + "pivot_df = df.pivot_table(index=['tool','dataset','cloud-aware'], columns=['format', ], values='time', aggfunc='mean')\n", + "\n", + "# Plotting\n", + "pivot_df.plot(kind='bar', figsize=(20, 8))\n", + "\n", + "plt.suptitle('Cloud-optimized HDF5 performance (less is better)', fontsize=14)\n", + "plt.title(\"Informed I/O parameters\", fontsize=10)\n", + "plt.xlabel('Tool')\n", + "plt.ylabel('Mean Time (s)')\n", + "plt.xticks(rotation=90)\n", + "plt.legend(title='Format')\n", + "plt.grid(False)\n", + "# ax.yaxis.grid(True)\n", + "plt.tight_layout()\n", + "plt.savefig(\"stats.png\", transparent=None, dpi=150)\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "id": "4f9fb337-d06f-4e89-8df9-4a4f96231da9", + "metadata": {}, + "outputs": [], + "source": [ + "df.to_csv(\"benchmarks.csv\")" + ] + }, + { + "cell_type": "markdown", + "id": "ea0db03e-5653-4908-ada1-16d723666e18", + "metadata": { + "tags": [], + "user_expressions": [] + }, + "source": [ + "## Pliting tool specific performance" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "id": "47444e8a-6d59-42c2-baff-a3c85c447eb2", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1gAAAJiCAYAAADaCWPXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAACBQUlEQVR4nOzdeVgVdf//8deRRVZRUFkUd1xKXHFPwduF3LvTTC23tLBcslxLUyyl1NzS0vJWocy0b+VSabmba66YW+5bJZplKoqAML8/vDi/jqCCDhzQ5+O6uPTMfM7nvGfOmTO8mJnPWAzDMAQAAAAAeGD57F0AAAAAADwsCFgAAAAAYBICFgAAAACYhIAFAAAAACYhYAEAAACASQhYAAAAAGASAhYAAAAAmISABQAAAAAmIWABAAAAgEkIWHgovfDCC8qfP7/27duXbt57770ni8Wib7/91g6VZZ9SpUopMjJSkhQWFqYePXqka3P+/HkNHz5cwcHB8vDwkIuLi4KCgvTqq6/q6NGj1naRkZGyWCw5VLmt9evXy2KxaP369XZ5/dwmLCxMYWFh1senTp2yWT8Wi0XR0dGZ7m/fvn2yWCxycnLSuXPnzC02FwoLC5PFYrH+uLq6qmrVqpo6dapSU1Oz1Ncff/yhyMhIxcbGppu3fPly6/aX26RtU2k/Dg4O8vX11TPPPKNDhw6Z/nojR45UiRIl5OjoqIIFC5re/6Po7bff1mOPPWbzmbVYLLnuM2fm93ePHj3k4eHx4EX9y4IFCzR16tR0069fv67IyMhs2++sWbNGHh4e+v3337Olf+Q+BCw8lKZOnSo/Pz91795dycnJ1un79u3T6NGj1aNHD7Vp08aOFea87du3Kzg4WHPmzFGHDh30zTff6IcfftDgwYO1e/du1a5d294lIgf873//kyTdvHlTn376qZ2ryRllypTR1q1btXXrVi1atEjFihXTa6+9pjfeeCNL/fzxxx8aM2bMHQPWmDFjTKo4e0RFRWnr1q1at26dhg0bplWrVqlBgwam/tK3dOlSjRs3Tt26ddOGDRu0evVq0/p+VP3xxx+aMGGC3n77beXLl7t/batRo4a2bt2qGjVq2LuUDN0tYI0ZMybbAlaTJk1Uu3Ztvfnmm9nSP3Kf3L2lAvepQIECmjNnjmJjYzV27FhJUnJysrp27SpfX98Mv2DvV0JCQobTk5OTdfPmTdNe50FcuXJF7dq1k4uLi/bs2aPRo0erefPmCgsLU0REhDZu3KjZs2fbu8yHyvXr1+1dQjqJiYn6/PPPVbVqVRUrVkxz5861d0k5wtXVVXXr1lXdunXVtm1bLV26VGXKlNGMGTNs/gCTG5n5OQoKClLdunXVqFEjvf7665o8ebIuXbqUpSOgd5JW5/79+yVJAwYMUIMGDRQSEmJa34+qadOmqWDBgnr66aftXco9FShQQHXr1lWBAgXsXUqu8O/fA/r27avPP/9cZ8+etXNVyAkELDy0mjZtqj59+igqKkq7du1SZGSk9u7dqzlz5sjLy8um7ZgxY1SnTh15e3urQIECqlGjhubMmSPDMGzalSpVSq1bt9Y333yj6tWry8XFxfpXL4vFos8++0yDBg1SsWLFlD9/fh07dkx//vmnXnnlFT322GPy8PBQ0aJF9Z///EcbN2609msYhoKCghQeHp5uOeLj4+Xl5aW+ffve97qYPXu24uLiNGHCBBUvXjzDNh06dLhrH6mpqZowYYIqVqyo/Pnzq2jRourWrZt+++03m3alSpXK8PTE2091k6Rff/1VTz75pNzc3FS4cGH16dNHV69ezfRy7dy5U506dVKpUqXk6uqqUqVKqXPnzjp9+rS1zZUrV+To6KiJEydap128eFH58uWTl5eXTQgeMGCAihQpYn3fV61apXbt2ql48eJycXFRuXLlFBERoYsXL9rUkXZK5e7du9WhQwcVKlRIZcuWlXTrvf3oo49UrVo1ubq6qlChQurQoYNOnDhh04dhGJowYYJKliwpFxcX1ahRQytWrMj0usiMJUuW6K+//lLv3r3VvXt3HTlyRJs2bUrXLjExUW+//bYqVaokFxcX+fj4qHHjxtqyZYu1TWpqqqZPn25droIFC6pu3bpatmyZTV+LFi1SvXr15O7uLg8PD4WHh2vPnj02bU6cOKFOnTopICBA+fPnl6+vr5o0aWJzpGjt2rUKCwuTj4+PXF1dVaJECbVv3/6+fvl2cnJSzZo1df36df355586duyYevbsqaCgILm5ualYsWJq06aNzSnG69evV61atSRJPXv2tJ5uFxkZqR49eujDDz+UJJtT8U6dOiUp85+BsLAwVa5cWT/99JPq168vNzc3vfDCC9bTQt9//31NnjxZpUuXloeHh+rVq6dt27ZlefnT1K1bV5JstpfMvF9pp27t27dPzZs3l6enp5o0aaJSpUpp5MiRkiRfX1+bU9gy+/1xr3UwceJEjR8/3rrNh4WF6ciRI0pOTtbw4cMVEBAgLy8v/fe//9WFCxds+l60aJGaN28uf39/ubq6qlKlSho+fLiuXbuW4fIdO3ZMLVu2lIeHhwIDAzVo0CAlJibatM3MtpLZ9z8jSUlJmjNnjrp06ZKpo1dxcXGKiIhQ8eLF5ezsrNKlS2vMmDHp/tg3c+ZMVa1aVR4eHvL09FTFihVtjq5cv35dgwcPVunSpeXi4iJvb2+FhIToiy++uOvrZ3SKYGa277s5cOCAmjRpInd3dxUpUkT9+vVLt91nZh2HhYXp+++/1+nTp9Ntp0WKFJF063eBtOn/3o8dPXpUXbp0UdGiRZU/f35VqlTJus3fvuwZ/R4gSW3atJGHhwd/zHxUGMBDLD4+3ihTpoxRqlQpw8HBwejTp0+G7Xr06GHMmTPHWLVqlbFq1SrjnXfeMVxdXY0xY8bYtCtZsqTh7+9vlClTxpg7d66xbt06Y/v27ca6desMSUaxYsWMDh06GMuWLTO+++4746+//jJ+/fVX4+WXXzYWLlxorF+/3vjuu++MXr16Gfny5TPWrVtn7XvatGmGxWIxjhw5YvOaH374oSHJOHDgwH2vh+bNmxsODg5GfHx8ptqPHj3auP3r4aWXXjIkGf369TN++OEHY9asWUaRIkWMwMBA488//7RZR927d0/XZ2hoqBEaGmp9HBcXZxQtWtQoVqyYMW/ePGP58uXGc889Z5QoUcKQZLNu7uT//u//jFGjRhmLFy82NmzYYCxcuNAIDQ01ihQpYlNT3bp1jebNm1sfL1y40HBxcTEsFouxefNm6/RKlSoZHTt2tD6eOXOm8e677xrLli0zNmzYYMTExBhVq1Y1KlSoYCQlJaVbXyVLljSGDRtmrFq1yliyZIlhGIbx4osvGk5OTsagQYOMH374wViwYIFRsWJFw9fX14iLi0vXR69evYwVK1YYn3zyiVGsWDHDz8/PZr09iGbNmhn58+c3/v77b+PYsWOGxWIxevToYdMmOTnZaNy4seHo6GgMHjzYWL58ubFs2TLjzTffNL744gtru65duxoWi8Xo3bu3sXTpUmPFihXGuHHjjGnTplnbjBs3zrBYLMYLL7xgfPfdd8Y333xj1KtXz3B3d7f5PFeoUMEoV66c8dlnnxkbNmwwvv76a2PQoEHWz8DJkycNFxcXo1mzZsaSJUuM9evXG59//rnRtWtX49KlS3dd5tDQUOPxxx9PN71GjRqGo6Ojcf36dWPDhg3GoEGDjK+++srYsGGDsXjxYuOpp54yXF1djV9//dUwDMO4fPmyMW/ePEOSMXLkSGPr1q3G1q1bjbNnzxrHjh0zOnToYEiyTt+6datx48YNwzAy/xkIDQ01vL29jcDAQGP69OnGunXrjA0bNhgnT540JBmlSpUynnzySWPJkiXGkiVLjODgYKNQoULGP//8c9d1kPb99H//938205cuXWpIMt58880svV/du3c3nJycjFKlShnvvvuusWbNGuPHH380du/ebfTq1cuQZPzwww/W9WMYmf/+uNc6KFmypNGmTRvju+++M+bPn2/4+voa5cuXN7p27Wq88MILxooVK4xZs2YZHh4eRps2bWyW95133jGmTJlifP/998b69euNWbNmGaVLlzYaN25s06579+6Gs7OzUalSJeP99983Vq9ebYwaNcqwWCw2+4TMbiuZff8z8tNPPxmSjOXLl6ebJ8kYPXq09fG5c+eMwMBAo2TJksbHH39srF692njnnXeM/Pnz22znX3zxhSHJ6N+/v7Fy5Upj9erVxqxZs4wBAwZY20RERBhubm7G5MmTjXXr1hnfffed8d577xnTp0+/a71pn7V/f3/fa/u+k7T3oUSJEsa4ceOMlStXGpGRkYajo6PRunVrm7aZWccHDhwwGjRoYPj5+aXbTn/44Qfr92/a9GPHjlmf5+XlZQQHBxuffvqpsXLlSmPQoEFGvnz5jMjIyHTLntHvAWlatGhh1KhR467LjYcDAQsPvQULFhiSDD8/P+Pq1av3bJ+SkmIkJycbb7/9tuHj42OkpqZa55UsWdJwcHAwDh8+bPOctC/WRo0a3bP/mzdvGsnJyUaTJk2M//73v9bpV65cMTw9PY1XX33Vpv1jjz2W7heArKpYsaLh5+eX6fa3B6xDhw4ZkoxXXnnFpt3PP/9s8wuaYWQ+YA0bNsywWCxGbGysTbtmzZplOmDd7ubNm0Z8fLzh7u5u84v+yJEjDVdXV+svvL179zaefPJJo0qVKtZfmH7//XdDkvHJJ59k2HdqaqqRnJxsnD592pBkLF261DovbX2NGjXK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8AhISkrSxYsXdfPmzQfuiyNYAAAAyFUMw9ClS5dUuHBhU44oAJnh7u6uixcvPvDnjiNYAAAAyFWSk5Pl6upKuEKOslgscnV1VXJy8gP1Q8ACAABArpKSkiIHBwd7l4FHkIODwwNf80fAAgAAAACTELAAAAAAwCQELAAAAAAwCQELAAAAyGE9evSQxWJJ93Ps2DF7l2bj1KlTslgsio2NtXcpeQbDtAMAAAB28OSTT2revHk204oUKZLlfpKSkuTs7GxWWXhAHMECAAAA7CB//vzy8/Oz+XFwcNCGDRtUu3Zt5c+fX/7+/ho+fLjNDXDDwsLUr18/vf766ypcuLCaNWum9evXy2Kx6Mcff1T16tXl6uqq//znP7pw4YJWrFihSpUqqUCBAurcubOuX79u7euHH37QE088oYIFC8rHx0etW7fW8ePHrfNLly4tSapevbosFovCwsJybP3kVQQsAAAAIJf4/fff1bJlS9WqVUt79+7VzJkzNWfOHI0dO9amXUxMjBwdHbV582Z9/PHH1umRkZGaMWOGtmzZorNnz6pjx46aOnWqFixYoO+//16rVq3S9OnTre2vXbum119/XTt27NCaNWuUL18+/fe//1Vqaqokafv27ZKk1atX69y5c/rmm29yYC3kbZwiCAAAANjBd999Jw8PD+vjFi1aqHz58goMDNSMGTNksVhUsWJF/fHHHxo2bJhGjRqlfPluHR8pV66cJkyYYH1uXFycJGns2LFq0KCBJKlXr1564403dPz4cZUpU0aS1KFDB61bt07Dhg2TJLVv396mpjlz5qho0aI6ePCgKleubD1l0cfHR35+ftm0Jh4uHMECAAAA7KBx48aKjY21/nzwwQc6dOiQ6tWrJ4vFYm3XoEEDxcfH67fffrNOCwkJybDPKlWqWP/v6+srNzc3a7hKm3bhwgXr4+PHj6tLly4qU6aMChQoYD0l8MyZM6Yt56OGI1gAAACAHbi7u6tcuXI20wzDsAlXadMk2Ux3d3fPsE8nJyfr/y0Wi83jtGlpp/9JUps2bRQYGKjZs2crICBAqampqly5spKSku5vocARLAAAACC3eOyxx7RlyxZrqJKkLVu2yNPTU8WKFTP1tf766y8dOnRII0eOVJMmTVSpUiVdunTJpk3a6IQpKSmmvvbDjCNYAADAboJjgk3tb1/3fab2B+S0V155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uGDTx7JlyxQUFCRXV1c1btxYMTExslgs+ueff6xttmzZokaNGsnV1VWBgYEaMGCArl27dtfaEhMTNWDAABUtWlQuLi564okntGPHDuv89evXy2KxaM2aNQoJCZGbm5vq16+vw4cPZ9jfTz/9JCcnJ8XFxdlMHzRokBo1anTHOrZu3ap27dqpVatWKlWqlDp06KDmzZtr586d1jalSpXS2LFj1a1bN3l4eKhkyZJaunSp/vzzT7Vr104eHh4KDg62eU6aJUuWqHz58nJxcVGzZs109uzZu64XsxGwAAAAABPFxMTI0dFRP//8sz744ANNmTJF//vf/yRJSUlJeuedd7R3714tWbJEJ0+eVI8ePazPPXXqlDp06KCnnnpKsbGxioiI0IgRI2z637dvn8LDw/X000/rl19+0aJFi7Rp0yb169fvrnUNHTpUX3/9tWJiYrR7926VK1dO4eHh+vvvv23ajRgxQpMmTdLOnTvl6OioF154IcP+GjVqpDJlyuizzz6zTrt586bmz5+vnj173rGOJ554QmvWrNGRI0ckSXv37tWmTZvUsmVLm3ZTpkxRgwYNtGfPHrVq1Updu3ZVt27d9Pzzz1vr79atmzW8StL169c1btw4xcTEaPPmzbpy5Yo6dep01/ViNk4RBAAAAEwUGBioKVOmyGKxqEKFCtq3b5+mTJmiF1980SaslClTRh988IFq166t+Ph4eXh4aNasWapQoYImTpwoSapQoYL279+vcePGWZ83ceJEdenSRQMHDpQkBQUF6YMPPlBoaKhmzpwpFxeXdDVdu3ZNM2fOVHR0tFq0aCFJmj17tlatWqU5c+ZoyJAh1rbjxo1TaGioJGn48OFq1aqVbty4kWG/vXr10rx586zP//7773X9+nV17Njxjutn2LBhunz5sipWrCgHBwelpKRo3Lhx6ty5s027li1bKiIiQpI0atQozZw5U7Vq1dIzzzxj7adevXo6f/68/Pz8JEnJycmaMWOG6tSpI+lW2K1UqZK2b9+u2rVr37EmM3EECwAAADBR3bp1ZbFYrI/r1auno0ePKiUlRXv27FG7du1UsmRJeXp6KiwsTJJ05swZSdLhw4dVq1Ytm/5uDwa7du1SdHS0PDw8rD/h4eFKTU3VyZMnFRUVZTPvzJkzOn78uJKTk9WgQQNrP05OTqpdu7YOHTpk03+VKlWs//f395ekdKcxpunRo4eOHTumbdu2SZLmzp2rjh07yt3dXRs3brSp4/PPP5ckLVq0SPPnz9eCBQu0e/duxcTE6P3331dMTMwd6/D19ZUkBQcHp5v279ocHR0VEhJifVyxYkUVLFgw3TJmJ45gAQAAADngxo0bat68uZo3b6758+erSJEiOnPmjMLDw5WUlCRJMgzDJpylTfu31NRURUREaMCAAeleo0SJEurTp4/NEaSAgABdunRJkjLs+/ZpTk5O1v+nzUtNTc1wmYoWLao2bdpo3rx5KlOmjJYvX67169dLkkJCQhQbG2ttmxaIhgwZouHDh1tP3QsODtbp06f17rvvqnv37netIzO13b48d5qWXQhYAAAAgInSjub8+3FQUJB+/fVXXbx4Ue+9954CAwMlKd0gDRUrVtTy5cttpt3epkaNGjpw4IDKlSuX4et7e3vL29vbZlq5cuXk7OysTZs2qUuXLpJunU63c+dO66mG96t3797q1KmTihcvrrJly1qPkrm6umZY4/Xr19MNx+7g4HDHEJcVN2/e1M6dO61H/Q4fPqx//vlHFStWfOC+M4tTBAEAAAATnT17Vq+//roOHz6sL774QtOnT9err76qEiVKyNnZWdOnT9eJEye0bNkyvfPOOzbPjYiI0K+//qphw4bpyJEj+vLLLxUdHS3p/x+FGTZsmLZu3aq+ffsqNjZWR48e1bJly9S/f/871uTu7q6XX35ZQ4YM0Q8//KCDBw/qxRdf1PXr19WrV68HWt7w8HB5eXlp7Nixdx3cIk2bNm00btw4ff/99zp16pQWL16syZMn67///e8D1SHdOsLVv39//fzzz9q9e7d69uypunXr5tj1VxJHsAAAAJBH5JUb/3br1k0JCQmqXbu2HBwc1L9/f7300kuyWCyKjo7Wm2++qQ8++EA1atTQ+++/r7Zt21qfW7p0aX311VcaNGiQpk2bpnr16mnEiBF6+eWXlT9/fkm3rk3asGGDRowYoYYNG8owDJUtW1bPPvvsXet67733lJqaqq5du+rq1asKCQnRjz/+qEKFCj3Q8ubLl089evRQVFSUunXrds/206dP11tvvaVXXnlFFy5cUEBAgCIiIjRq1KgHqkOS3NzcNGzYMHXp0kW//fabnnjiCc2dO/eB+80Ki3H7SZ2wunLliry8vHT58mUVKFDA3uUAAJA7RHqZ1lVw6RKm9SXlnV/AcXcJCQmSbp1ilteEhYWpWrVqmjp1qml9jhs3TrNmzcrx+zllxYsvvqjz589r2bJl9i7lgdzts5fZbMARLAAAACAX+eijj1SrVi35+Pho8+bNmjhx4j3vcWUvly9f1o4dO/T5559r6dKl9i4nVyBgAQAAALnI0aNHNXbsWP39998qUaKEBg0apDfeeMPeZWWoXbt22r59uyIiItSsWTN7l5MrcIrgXXCKIAAAGeAUQWSzvHyKIPI2M04RZBRBAAAAADAJAQsAAAAATELAAgAAAACTELAAAAAAwCQELAAAAAAwCQELAAAAAExCwAIAAAByqVOnTslisSg2NjbbX6tUqVKaOnWqqX2GhYVp4MCBpvaZWT169NBTTz2V46/LjYYBAACQJxyqWClHX6/Sr4dy9PUedYZhqGXLlvrhhx+0ePFiu4QjM3AECwAAAMgmSUlJ9i4hz5g6daosFou9y3hgBCwAAADAJGFhYerXr59ef/11FS5cWM2aNdPBgwfVsmVLeXh4yNfXV127dtXFixetz0lNTdX48eNVrlw55c+fXyVKlNC4ceNs+j1x4oQaN24sNzc3Va1aVVu3brXOi4yMVLVq1WzaT506VaVKlbI+Tjtd7v3335e/v798fHzUt29fJScn33FZ5s2bJy8vL61atUqS7rkc165dU7du3eTh4SF/f39NmjQp0+tt7969mjx5subOnZtuXtppkl9++aUaNmwoV1dX1apVS0eOHNGOHTsUEhIiDw8PPfnkk/rzzz/TPX/MmDEqWrSoChQooIiIiGwPvXYPWJGRkbJYLDY/fn5+1vmGYSgyMlIBAQFydXVVWFiYDhw4YNNHYmKi+vfvr8KFC8vd3V1t27bVb7/9ltOLAgAAACgmJkaOjo7avHmz3nvvPYWGhqpatWrauXOnfvjhB50/f14dO3a0tn/jjTc0fvx4vfXWWzp48KAWLFggX19fmz5HjBihwYMHKzY2VuXLl1fnzp118+bNLNW1bt06HT9+XOvWrVNMTIyio6MVHR2dYdv3339fgwcP1o8//qhmzZrp3Llz91yOIUOGaN26dVq8eLFWrlyp9evXa9euXfes6/r16+rcubNmzJhhkwNuN3r0aI0cOVK7d++Wo6OjOnfurKFDh2ratGnauHGjjh8/rlGjRtk8Z82aNTp06JDWrVunL774QosXL9aYMWMyt8LuU664Buvxxx/X6tWrrY8dHBys/58wYYImT56s6OholS9fXmPHjlWzZs10+PBheXp6SpIGDhyob7/9VgsXLpSPj48GDRqk1q1ba9euXTZ9AQAAANmtXLlymjBhgiRp1KhRqlGjhqKioqzz586dq8DAQB05ckT+/v6aNm2aZsyYoe7du0uSypYtqyeeeMKmz8GDB6tVq1aSbh2Refzxx3Xs2DFVrFgx03UVKlRIM2bMkIODgypWrKhWrVppzZo1evHFF23avfHGG4qJidH69esVHBwsSZo5c+ZdlyMgIEBz5szRp59+qmbNmkm6FTSLFy9+z7pee+011a9fX+3atbtru8GDBys8PFyS9Oqrr6pz585as2aNGjRoIEnq1atXusDo7OysuXPnys3NTY8//rjefvttDRkyRO+8847y5cueY025ImA5OjpmmFYNw9DUqVM1YsQIPf3005JuvVG+vr5asGCBIiIidPnyZc2ZM0efffaZmjZtKkmaP3++AgMDtXr1auubAAAAAOSEkJAQ6/937dqldevWycPDI12748eP659//lFiYqKaNGly1z6rVKli/b+/v78k6cKFC1kKWI8//rjNwQd/f3/t27fPps2kSZN07do17dy5U2XKlMn0ciQkJCgpKUn16tWzTvf29laFChWsj6OiomwC2sGDBxUbG6u1a9dqz54996z/3+sg7QhfWgBMm3bhwgWb51StWlVubm7Wx/Xq1VN8fLzOnj2rkiVL3vM174fdTxGUpKNHjyogIEClS5dWp06ddOLECUnSyZMnFRcXp+bNm1vb5s+fX6GhodqyZYukW292cnKyTZuAgABVrlzZ2iazzp07p927d1t/cmI4TAAAADxc3N3drf9PTU1VmzZtFBsba/Nz9OhRNWrUSK6urpnq08nJyfr/tIEgUlNTJUn58uWTYRg27TO6turffaT1k9ZHmoYNGyolJUVffvmlzfR7Lcftr5+RPn362Dw3ICBAa9eu1fHjx1WwYEE5OjrK0fHW8Z/27dsrLCzsnuvg9mm3L8+dZOdgGnY/glWnTh19+umnKl++vM6fP6+xY8eqfv36OnDggOLi4iQp3Tmovr6+On36tCQpLi5Ozs7OKlSoULo2ac/PrI8//jjbz8kEAADAo6NGjRr6+uuvVapUKWt4+LegoCC5urpqzZo16t279329RpEiRRQXFyfDMKzB4X4PFNSuXVv9+/dXeHi4HBwcNGTIkEwtR7ly5eTk5KRt27apRIkSkqRLly7pyJEjCg0NlXTriJa3t7fN84YPH55uuYODgzVlyhS1adPmvpbh3/bu3auEhARrkN22bZs8PDwyderi/bJ7wGrRooX1/8HBwapXr57Kli2rmJgY1a1bV1L6hPnvD8+dZKbN7SIiItS2bVvr4/j4eOsHAgAAAMiqvn37avbs2ercubOGDBmiwoUL69ixY1q4cKFmz54tFxcXDRs2TEOHDpWzs7MaNGigP//8UwcOHFCvXr0y9RphYWH6888/NWHCBHXo0EE//PCDVqxYoQIFCtxXzfXq1dOKFSv05JNPytHRUa+99to9l8PDw0O9evXSkCFD5OPjI19fX40YMeKe1zn5+flleKlQiRIlVLp06fuq/9+SkpLUq1cvjRw5UqdPn9bo0aPVr1+/bLv+SsoFAet27u7uCg4O1tGjR603F4uLi7OeayrdOt807aiWn5+fkpKSdOnSJZujWBcuXFD9+vWz9Nr+/v42r3PlypUHWBIAAACYKS/e+DcgIECbN2/WsGHDFB4ersTERJUsWVJPPvmk9Zf8t956S46Ojho1apT++OMP+fv7q0+fPpl+jUqVKumjjz5SVFSU3nnnHbVv316DBw/WJ598ct91N2jQQN9//71atmwpBwcHDRgw4J7LMXHiRMXHx6tt27by9PTUoEGDdPny5fuuwQxNmjRRUFCQGjVqpMTERHXq1EmRkZHZ+poWIzMnTOagxMRElS1bVi+99JLeeustBQQE6LXXXtPQoUMl3UqhRYsW1fjx462DXBQpUkTz58+3DhN57tw5FS9eXMuXL3+gQS6uXLkiLy8vXb58+b7/AgAAwEMn0su0roJLlzCtL0na133fvRsh10tISJCkTF+fBJjlbp+9zGYDux/BGjx4sNq0aaMSJUrowoULGjt2rK5cuaLu3bvLYrFo4MCBioqKUlBQkIKCghQVFSU3Nzd16dJFkuTl5aVevXpp0KBB8vHxkbe3twYPHqzg4GDrqIIAAAAAkBPsHrB+++03de7cWRcvXlSRIkVUt25dbdu2zTps4tChQ5WQkKBXXnlFly5dUp06dbRy5UrrPbAkacqUKXJ0dFTHjh2VkJCgJk2aKDo6mntgAQAAAMhRue4UwdyEUwQBAMgApwgim3GKIOzFjFMEc8V9sAAAAADgYUDAAgAAAACTELAAAAAAwCQELAAAAAAwCQELAAAAAExCwAIAAAAAkxCwAAAAgFzq1KlTslgsio2NzfbXKlWqlKZOnWpqn2FhYRo4cKCpfWZWjx499NRTT+X469r9RsMAAABAZnzYZ22Ovl7fWf/J0dd7VMXFxWnIkCFatWqVrl69qgoVKujNN99Uhw4d7F3afeEIFgAAAJBNkpKS7F1Crte1a1cdPnxYy5Yt0759+/T000/r2Wef1Z49e+xd2n0hYAEAAAAmCQsLU79+/fT666+rcOHCatasmQ4ePKiWLVvKw8NDvr6+6tq1qy5evGh9TmpqqsaPH69y5copf/78KlGihMaNG2fT74kTJ9S4cWO5ubmpatWq2rp1q3VeZGSkqlWrZtN+6tSpKlWqlPVx2uly77//vvz9/eXj46O+ffsqOTn5jssyb948eXl5adWqVZJ0z+W4du2aunXrJg8PD/n7+2vSpEmZWmdbt25V//79Vbt2bZUpU0YjR45UwYIFtXv3bkn//zTJL7/8Ug0bNpSrq6tq1aqlI0eOaMeOHQoJCZGHh4eefPJJ/fnnn+n6HzNmjIoWLaoCBQooIiIi20MvAQsAAAAwUUxMjBwdHbV582a99957Cg0NVbVq1bRz50798MMPOn/+vDp27Ght/8Ybb2j8+PF66623dPDgQS1YsEC+vr42fY4YMUKDBw9WbGysypcvr86dO+vmzZtZqmvdunU6fvy41q1bp5iYGEVHRys6OjrDtu+//74GDx6sH3/8Uc2aNdO5c+fuuRxDhgzRunXrtHjxYq1cuVLr16/Xrl277lnXE088oUWLFunvv/9WamqqFi5cqMTERIWFhdm0Gz16tEaOHKndu3fL0dFRnTt31tChQzVt2jRt3LhRx48f16hRo2yes2bNGh06dEjr1q3TF198ocWLF2vMmDFZWm9ZxTVYAAAAgInKlSunCRMmSJJGjRqlGjVqKCoqyjp/7ty5CgwM1JEjR+Tv769p06ZpxowZ6t69uySpbNmyeuKJJ2z6HDx4sFq1aiXp1hGZxx9/XMeOHVPFihUzXVehQoU0Y8YMOTg4qGLFimrVqpXWrFmjF1980abdG2+8oZiYGK1fv17BwcGSpJkzZ951OQICAjRnzhx9+umnatasmaRbQbN48eL3rGvRokV69tln5ePjI0dHR7m5uWnx4sUqW7ZsunUQHh4uSXr11VfVuXNnrVmzRg0aNJAk9erVK11gdHZ21ty5c+Xm5qbHH39cb7/9toYMGaJ33nlH+fJlz7EmAhYAAABgopCQEOv/d+3apXXr1snDwyNdu+PHj+uff/5RYmKimjRpctc+q1SpYv2/v7+/JOnChQtZCliPP/64HBwcbPrZt2+fTZtJkybp2rVr2rlzp8qUKZPp5UhISFBSUpLq1atnne7t7a0KFSpYH0dFRdkEtIMHD6pEiRIaOXKkLl26pNWrV6tw4cJasmSJnnnmGW3cuNEa8G5fB2lH+P4939fXVxcuXLCprWrVqnJzc7M+rlevnuLj43X27FmVLFnyLmvr/hGwAAAAABO5u7tb/5+amqo2bdpo/Pjx6dr5+/vrxIkTmerTycnJ+n+LxWLtW5Ly5csnwzBs2md0bdW/+0jrJ62PNA0bNtT333+vL7/8UsOHD8/0chw9evSey9CnTx+bUwoDAgJ0/PhxzZgxQ/v379fjjz8u6VYo2rhxoz788EPNmjUrw/rT1sHt025fnjtJe352IGABAAAA2aRGjRr6+uuvVapUKTk6pv/VOygoSK6urlqzZo169+59X69RpEgRxcXFyTAMa3C43/tm1a5dW/3791d4eLgcHBw0ZMiQTC1HuXLl5OTkpG3btqlEiRKSpEuXLunIkSMKDQ2VdOuIlre3t83zrl+/LknpTtdzcHDIdFi6m7179yohIUGurq6SpG3btsnDwyNTpy7eLwa5AAAAALJJ37599ffff6tz587avn27Tpw4oZUrV+qFF15QSkqKXFxcNGzYMA0dOlSffvqpjh8/rm3btmnOnDmZfo2wsDD9+eefmjBhgo4fP64PP/xQK1asuO+a69WrpxUrVujtt9/WlClTMrUcHh4e6tWrl4YMGaI1a9Zo//796tGjxz2vc6pYsaLKlSuniIgIbd++XcePH9ekSZO0atUqU24SnJSUpF69eungwYNasWKFRo8erX79+mXb9VcSR7AAAACQR+TFG/8GBARo8+bNGjZsmMLDw5WYmKiSJUvqySeftP6S/9Zbb8nR0VGjRo3SH3/8IX9/f/Xp0yfTr1GpUiV99NFHioqK0jvvvKP27dtr8ODB+uSTT+677gYNGuj7779Xy5Yt5eDgoAEDBtxzOSZOnKj4+Hi1bdtWnp6eGjRokC5fvnzX13FyctLy5cs1fPhwtWnTRvHx8SpXrpxiYmLUsmXL+64/TZMmTRQUFKRGjRopMTFRnTp1UmRk5AP3ezcW4/YTNmF15coVeXl56fLlyypQoIC9ywEAIHeI9DKtq+DSJUzrS5L2dd9370bI9RISEiTJeloXkFPu9tnLbDbgFEEAAAAAMAkBCwAAAABMQsACAAAAAJMQsAAAAADAJAQsAAAA5CoODg5KSUmxdxl4BKWkpMjBweGB+iBgAQAAIFdxcnJSQkKCGOwaOckwDCUkJMjJyemB+uE+WAAAAMhVLBaLChUqpIsXL8rV1fWBjygA95KSkqKEhAQVKlRIFovlgfoiYAEAACDXcXR0VOHChZWcnMzpgsh2zs7Ocnd3f+BwJRGwAAAAkEtZLBY5OzvbuwwgS7gGCwAAAABMQsACAAAAAJMQsAAAAADAJAQsAAAAADAJAQsAAAAATELAAgAAAACTELAAAAAAwCQELAAAAAAwCQELAAAAAExCwAIAAAAAkxCwAAAAAMAkBCwAAAAAMAkBCwAAAABM4mjvAgAAAIDsVmr496b2d+q9Vqb2h4cHR7AAAAAAwCQELAAAAAAwCQELAAAAAExCwAIAAAAAkxCwAAAAAMAkBCwAAAAAMAkBCwAAAABMQsACAAAAAJMQsAAAAADAJAQsAAAAADAJAQsAAAAATELAAgAAAACTELAAAAAAwCQELAAAAAAwCQELAAAAAExCwAIAAAAAkxCwAAAAAMAkBCwAAAAAMAkBCwAAAABMkqsC1rvvviuLxaKBAwdapxmGocjISAUEBMjV1VVhYWE6cOCAzfMSExPVv39/FS5cWO7u7mrbtq1+++23HK4eAAAAwKMu1wSsHTt26JNPPlGVKlVspk+YMEGTJ0/WjBkztGPHDvn5+alZs2a6evWqtc3AgQO1ePFiLVy4UJs2bVJ8fLxat26tlJSUnF4MAAAAAI+wXBGw4uPj9dxzz2n27NkqVKiQdbphGJo6dapGjBihp59+WpUrV1ZMTIyuX7+uBQsWSJIuX76sOXPmaNKkSWratKmqV6+u+fPna9++fVq9erW9FgkAAADAIyhXBKy+ffuqVatWatq0qc30kydPKi4uTs2bN7dOy58/v0JDQ7VlyxZJ0q5du5ScnGzTJiAgQJUrV7a2AQAAAICc4GjvAhYuXKjdu3drx44d6ebFxcVJknx9fW2m+/r66vTp09Y2zs7ONke+0tqkPT+zzp07p3Pnzlkfx8fHZ+n5AAAAAB5tdg1YZ8+e1auvvqqVK1fKxcXlju0sFovNY8Mw0k27XWba3O7jjz/WmDFjsvQcAAAAAEhj11MEd+3apQsXLqhmzZpydHSUo6OjNmzYoA8++ECOjo7WI1e3H4m6cOGCdZ6fn5+SkpJ06dKlO7bJrIiICO3atcv6s2HDhgdYOgAAAACPGrsGrCZNmmjfvn2KjY21/oSEhOi5555TbGysypQpIz8/P61atcr6nKSkJG3YsEH169eXJNWsWVNOTk42bc6dO6f9+/db22SWv7+/atSoYf2pVq2aKcsJAAAA4NFg11MEPT09VblyZZtp7u7u8vHxsU4fOHCgoqKiFBQUpKCgIEVFRcnNzU1dunSRJHl5ealXr14aNGiQfHx85O3trcGDBys4ODjdoBkAAAAAkJ3sPsjFvQwdOlQJCQl65ZVXdOnSJdWpU0crV66Up6entc2UKVPk6Oiojh07KiEhQU2aNFF0dLQcHBzsWDkAAACAR43FMAzD3kXkVleuXJGXl5cuX76sAgUK2LscAAByh0gv07oKLl3CtL4kaV/3fab2h4dHqeHfm9rfqfdamdofcr/MZoNccR8sAAAAAHgYELAAAAAAwCQELAAAAAAwCQELAAAAAExCwAIAAAAAkxCwAAAAAMAkBCwAAAAAMMl9B6xLly5p48aNWrBggS5duiRJunHjhlJTU00rDgAAAADykiwHrNTUVL355psKDAxUaGiounbtqpMnT0qSnn76ab3zzjumFwkAAAAAeUGWA9aoUaM0Y8YMTZw4UQcPHpRhGNZ5bdu21bfffmtqgQAAAACQVzhm9QnR0dGKiorSyy+/rJSUFJt5ZcuW1fHjx00rDgAAAADykiwfwfrrr79UqVKlDOelpqYqOTn5gYsCAAAAgLwoywGrfPnyWrVqVYbz1q1bp8qVKz9wUQAAAACQF2X5FMHXXntNL774opycnNShQwdJ0m+//aatW7fqgw8+UHR0tNk1AgAAAECekOWA1aNHD/3999+KjIxUVFSUJOmpp56Sm5ubxo4dq44dO5peJAAAAADkBVkOWJL0+uuv66WXXtLmzZv1119/ydvbW/Xr11eBAgXMrg8AAAAA8oz7CliS5OHhofDwcDNrAQAAAIA87b4C1vXr17VmzRqdPXtWN27csJlnsVj02muvmVIcAAAAAOQlWQ5Y69evV4cOHfT3339nOJ+ABQAAAOBRleVh2vv166cqVapo3759SkxMVGpqqs3P7TcfBgAAAIBHRZaPYJ0+fVpTp07V448/nh31AAAAAECeleUjWA0aNNDhw4ezoxYAAAAAyNOyfATr448/1jPPPCNnZ2c1adJEBQsWTNfG29vbjNoAAAAAIE/JcsDy8vJSYGCgIiIiZLFYMmzDdVgAcpNSw783ra9T77UyrS8AAPDwyXLA6tq1qzZv3qxBgwapfPnycnZ2zo66AAAAACDPyXLAWrt2rT7++GM9//zz2VEPAAAAAORZWR7kIiAgIMPrrgAAAADgUZflgBUZGan33ntP//zzTzaUAwAAAAB5V5ZPEVy4cKFOnTqlEiVKqFq1aumOZlksFi1dutSs+gAAAAAgz8hywIqPj1dQUJD18dWrV00tCAAAAADyqiwHrHXr1mVHHQAAAACQ52X5GiwAAAAAQMYydQRr8uTJeu655+Tr66vJkyffta3FYtFrr71mSnEAAAAAkJdkKmANHjxYTzzxhHx9fTV48OC7tiVgAQAAAHhUZSpgpaamZvh/AAAAAMD/l6mA5eDgoK1bt6p27drZXQ9yu0gvE/u6bF5fAAAAQC6QqUEuDMPI7joAAAAAIM9jFEEAAAAAMEmm74N15coV/f3335lq6+3tfd8F4dERHBNsWl/7uu8zrS8AAADgfmU6YIWHh2e605SUlPsqBgAAAADyskwHrBEjRqhs2bLZWQsAAAAA5GmZDlitW7dmFEEAAAAAuAsGuQAAAAAAkxCwAAAAAMAkmQpY8+bN4/orAAAAALiHTF2D1b179+yuAwAAAADyvEwPcgEAAPKuUsO/N62vUy6mdQUADx2uwQIAAAAAkxCwAAAAAMAkBCwAAAAAMMl9XYN16dIlrVixQr/99ptu3LhhM89iseitt94ypTgAAAAAyEuyHLBWrlypDh06KD4+Xs7OznJycrKZT8ACAAAA8KjK8imCgwYNUs2aNXX06FHduHFDV69etfm5cuVKdtQJAAAAALlelo9gnThxQpMnT+bGwwAAAABwmywfwapRo4bOnj2bHbUAAAAAQJ6W5YD10Ucf6YMPPtCPP/6omzdvZkdNAAAAAJAnZfkUwfr16ys5OVktW7ZUvnz55OrqajPfYrHo8uXLphUIAAAAAHlFlgPWoEGDZLFYsqMWAAAAAMjTshywIiMjs6EMAAAAAMj7snwNFgAAAAAgY1k+giVJx44dU3R0tI4cOaIbN26km79s2bIHLgwAAAAA8posH8HasWOHqlSpoq+//lpff/21zp49q/379+u7775TbGys4uPjs9TfzJkzVaVKFRUoUEAFChRQvXr1tGLFCut8wzAUGRmpgIAAubq6KiwsTAcOHLDpIzExUf3791fhwoXl7u6utm3b6rfffsvqogEAAADAA8lywBo6dKieeeYZ7d+/X4ZhaM6cOTpx4oQ2bdqkfPnyadiwYVnqr3jx4nrvvfe0c+dO7dy5U//5z3/Url07a4iaMGGCJk+erBkzZmjHjh3y8/NTs2bNdPXqVWsfAwcO1OLFi7Vw4UJt2rRJ8fHxat26tVJSUrK6eAAAAABw37IcsPbu3asuXbooX75bT007RbB+/foaPXq0hg8fnqX+2rRpo5YtW6p8+fIqX768xo0bJw8PD23btk2GYWjq1KkaMWKEnn76aVWuXFkxMTG6fv26FixYIEm6fPmy5syZo0mTJqlp06aqXr265s+fr3379mn16tVZXTwAAAAAuG9ZDlgWi0XOzs6yWCwqWrSoTp8+bZ1XvHhxHTly5L6LSUlJ0cKFC3Xt2jXVq1dPJ0+eVFxcnJo3b25tkz9/foWGhmrLli2SpF27dik5OdmmTUBAgCpXrmxtk1nnzp3T7t27rT+xsbH3vSwAAAAAHj1ZHuTiscce0/Hjx9W4cWPVq1dPkyZNUnBwsJycnPTee++pbNmyWS5i3759qlevnm7cuCEPDw8tXrxYjz32mDUg+fr62rT39fW1Bru4uDg5OzurUKFC6drExcVlqY6PP/5YY8aMyXL9AAAAACDdR8B66aWXrOEmKipKzZs3V9WqVSVJ7u7u+uqrr7JcRIUKFRQbG6t//vlHX3/9tbp3764NGzZY599+Y2PDMO55s+PMtLldRESE2rZta30cHx+v0NDQLPUBAAAA4NGV5YDVtWtX6/8rVaqkQ4cOaevWrUpISFDdunVVtGjRLBfh7OyscuXKSZJCQkK0Y8cOTZs2zTpgRlxcnPz9/a3tL1y4YD2q5efnp6SkJF26dMnmKNaFCxdUv379LNXh7+9v8zpXrlzJ8rIAAAAAeHTd132w/s3Dw0PNmjUzoxYrwzCUmJio0qVLy8/PT6tWrVL16tUlSUlJSdqwYYPGjx8vSapZs6acnJy0atUqdezYUdKta6n279+vCRMmmFpXXlRq+Pem9nfKxdTuAAAAgIfKfQWsixcv6v3339eOHTt09uxZLV68WI8//rimTZumOnXqqG7dupnu680331SLFi0UGBioq1evauHChVq/fr1++OEHWSwWDRw4UFFRUQoKClJQUJCioqLk5uamLl26SJK8vLzUq1cvDRo0SD4+PvL29tbgwYMVHByspk2b3s/iAQAAAMB9yXLA2r17t5o0aSJPT081bNhQ69evV2JioiTp999/15QpU7Ro0aJM93f+/Hl17dpV586dk5eXl6pUqaIffvjBelRs6NChSkhI0CuvvKJLly6pTp06WrlypTw9Pa19TJkyRY6OjurYsaMSEhLUpEkTRUdHy8HBIauLBwAAAAD3LcsB67XXXlO9evW0dOlSWSwWffHFF9Z5derUyVK4kqQ5c+bcdb7FYlFkZKQiIyPv2MbFxUXTp0/X9OnTs/TaAAAAAGCmLAesHTt26JtvvpGTk5NSUlJs5hUpUkQXLlwwrTgAAAAAyEuyfKNhd3f3O46ud+bMGfn4+DxwUQAAAACQF2U5YIWHh2vs2LH666+/rNMsFosSEhI0bdo0tWzZ0tQCAQAAACCvyHLAGj9+vK5cuaKgoCB17NhRFotFI0eO1GOPPaa//vpLY8eOzY46AQAAACDXy3LAKlasmGJjY9W/f3+dO3dOZcuW1V9//aXnnntOO3fuvK8bDQMAAADAw+C+7oNVsGBBjRkzRmPGjDG7HgAAAADIs7J8BAsAAAAAkLFMHcFq27Ztpju0WCxaunTpfRcEAAAAAHlVpgLWd999J09PT9WoUSO76wEAAACAPCtTAevJJ5/U6tWrderUKXXq1EldunRRcHBwdtcGAAAAAHlKpq7BWr58uc6dO6ehQ4dq06ZNql69uoKDgzV+/HidOXMmu2sEAAAAgDwh04Nc+Pj46OWXX9bGjRt1/PhxdenSRZ9//rlKly6thg0b6ptvvsnOOgEAAAAg17uvUQRLliypN954Q1u3btWQIUO0detWzZ8/3+zaAAAAACBPyfJ9sG7evKkVK1ZowYIF+vbbb+Xp6alXXnlFvXr1yo76AAAAACDPyHTAWr9+vRYsWKCvvvpKKSkpeuqpp/TNN9+oadOmypeP22kBAAAAQKYCVmBgoC5evKgWLVrok08+UZs2bZQ/f/7srg0AAAAA8pRMBazff/9dTk5OWrVqlVavXn3XthaLRZcvXzalOAAAAADISzIVsEaPHp3ddQAAAABAnkfAAgAAAACTMDoFAAAAAJiEgAUAAAAAJiFgAQAAAIBJCFgAAAAAYBICFgAAAACYhIAFAAAAACYhYAEAAACASQhYAAAAAGASAhYAAAAAmISABQAAAAAmIWABAAAAgEkIWAAAAABgEgIWAAAAAJiEgAUAAAAAJiFgAQAAAIBJCFgAAAAAYBICFgAAAACYhIAFAAAAACYhYAEAAACASRztXQAAAIBZDlWsZFpflX49ZFpfAB4dHMECAAAAAJMQsAAAAADAJAQsAAAAADAJAQsAAAAATELAAgAAAACTELAAAAAAwCQELAAAAAAwCQELAAAAAExCwAIAAAAAkxCwAAAAAMAkBCwAAAAAMAkBCwAAAABMQsACAAAAAJMQsAAAAADAJAQsAAAAADAJAQsAAAAATELAAgAAAACTELAAAAAAwCQELAAAAAAwCQELAAAAAExCwAIAAAAAk9g9YL377ruqVauWPD09VbRoUT311FM6fPiwTRvDMBQZGamAgAC5uroqLCxMBw4csGmTmJio/v37q3DhwnJ3d1fbtm3122+/5eSiAAAAAHjE2T1gbdiwQX379tW2bdu0atUq3bx5U82bN9e1a9esbSZMmKDJkydrxowZ2rFjh/z8/NSsWTNdvXrV2mbgwIFavHixFi5cqE2bNik+Pl6tW7dWSkqKPRYLAAAAwCPI0d4F/PDDDzaP582bp6JFi2rXrl1q1KiRDMPQ1KlTNWLECD399NOSpJiYGPn6+mrBggWKiIjQ5cuXNWfOHH322Wdq2rSpJGn+/PkKDAzU6tWrFR4enuPLBQAAAODRY/cjWLe7fPmyJMnb21uSdPLkScXFxal58+bWNvnz51doaKi2bNkiSdq1a5eSk5Nt2gQEBKhy5crWNplx7tw57d692/oTGxtrwhIBAAAAeFTY/QjWvxmGoddff11PPPGEKleuLEmKi4uTJPn6+tq09fX11enTp61tnJ2dVahQoXRt0p6fGR9//LHGjBnzIIsAAAAA4BGWqwJWv3799Msvv2jTpk3p5lksFpvHhmGkm3a7zLT5t4iICLVt29b6OD4+XqGhoZl+PgAAAIBHW64JWP3799eyZcv0008/qXjx4tbpfn5+km4dpfL397dOv3DhgvWolp+fn5KSknTp0iWbo1gXLlxQ/fr1M12Dv7+/zWtcuXLlvpcHAAAAwKPH7tdgGYahfv366ZtvvtHatWtVunRpm/mlS5eWn5+fVq1aZZ2WlJSkDRs2WMNTzZo15eTkZNPm3Llz2r9/f5YCFgAAAAA8CLsfwerbt68WLFigpUuXytPT03rNlJeXl1xdXWWxWDRw4EBFRUUpKChIQUFBioqKkpubm7p06WJt26tXLw0aNEg+Pj7y9vbW4MGDFRwcbB1VEAAAAACym90D1syZMyVJYWFhNtPnzZunHj16SJKGDh2qhIQEvfLKK7p06ZLq1KmjlStXytPT09p+ypQpcnR0VMeOHZWQkKAmTZooOjpaDg4OObUoAAAAAB5xdg9YhmHcs43FYlFkZKQiIyPv2MbFxUXTp0/X9OnTTawOAAAAADLP7tdgAQAAAMDDgoAFAAAAACYhYAEAAACASQhYAAAAAGASAhYAAAAAmISABQAAAAAmIWABAAAAgEkIWAAAAABgEgIWAAAAAJiEgAUAAAAAJiFgAQAAAIBJCFgAAAAAYBICFgAAAACYhIAFAAAAACYhYAEAAACASQhYAAAAAGASAhYAAAAAmISABQAAAAAmIWABAAAAgEkIWAAAAABgEgIWAAAAAJiEgAUAAAAAJiFgAQAAAIBJCFgAAAAAYBICFgAAAACYhIAFAAAAACYhYAEAAACASQhYAAAAAGASAhYAAAAAmISABQAAAAAmIWABAAAAgEkIWAAAAABgEgIWAAAAAJiEgAUAAAAAJiFgAQAAAIBJCFgAAAAAYBICFgAAAACYhIAFAAAAACYhYAEAAACASQhYAAAAAGASAhYAAAAAmISABQAAAAAmIWABAAAAgEkIWAAAAABgEgIWAAAAAJiEgAUAAAAAJiFgAQAAAIBJCFgAAAAAYBICFgAAAACYhIAFAAAAACYhYAEAAACASQhYAAAAAGASAhYAAAAAmISABQAAAAAmIWABAAAAgEkIWAAAAABgEgIWAAAAAJiEgAUAAAAAJiFgAQAAAIBJCFgAAAAAYBK7B6yffvpJbdq0UUBAgCwWi5YsWWIz3zAMRUZGKiAgQK6urgoLC9OBAwds2iQmJqp///4qXLiw3N3d1bZtW/322285uBQAAAAAkAsC1rVr11S1alXNmDEjw/kTJkzQ5MmTNWPGDO3YsUN+fn5q1qyZrl69am0zcOBALV68WAsXLtSmTZsUHx+v1q1bKyUlJacWAwAAAADkaO8CWrRooRYtWmQ4zzAMTZ06VSNGjNDTTz8tSYqJiZGvr68WLFigiIgIXb58WXPmzNFnn32mpk2bSpLmz5+vwMBArV69WuHh4Tm2LAAAAAAebXY/gnU3J0+eVFxcnJo3b26dlj9/foWGhmrLli2SpF27dik5OdmmTUBAgCpXrmxtAwAAAAA5we5HsO4mLi5OkuTr62sz3dfXV6dPn7a2cXZ2VqFChdK1SXt+Zp07d07nzp2zPo6Pj7+fsgEAAAA8onJ1wEpjsVhsHhuGkW7a7TLT5nYff/yxxowZk+X6AAAAAEDK5acI+vn5SVK6I1EXLlywHtXy8/NTUlKSLl26dMc2mRUREaFdu3ZZfzZs2PAA1QMAAAB41OTqgFW6dGn5+flp1apV1mlJSUnasGGD6tevL0mqWbOmnJycbNqcO3dO+/fvt7bJLH9/f9WoUcP6U61aNVOWAwAAAMCjwe6nCMbHx+vYsWPWxydPnlRsbKy8vb1VokQJDRw4UFFRUQoKClJQUJCioqLk5uamLl26SJK8vLzUq1cvDRo0SD4+PvL29tbgwYMVHBxsHVUQAAAAAHKC3QPWzp071bhxY+vj119/XZLUvXt3RUdHa+jQoUpISNArr7yiS5cuqU6dOlq5cqU8PT2tz5kyZYocHR3VsWNHJSQkqEmTJoqOjpaDg0OOLw8AAACAR5fdA1ZYWJgMw7jjfIvFosjISEVGRt6xjYuLi6ZPn67p06dnQ4UAAAAAkDm5+hosAAAAAMhLCFgAAAAAYBK7nyIIAAAA5DmRXib2ddm8vmB3HMECAAAAAJMQsAAAAADAJAQsAAAAADAJAQsAAAAATMIgFwAAABn4sM9aU/vrO+s/pvaHh0dwTLCp/e3rvs/U/pA1HMECAAAAAJMQsAAAAADAJAQsAAAAADAJAQsAAAAATELAAgAAAACTELAAAAAAwCQELAAAAAAwCQELAAAAAEzCjYYBAACAh8ihipVM66vSr4dM6+tRwREsAAAAADAJAQsAAAAATELAAgAAAACTELAAAAAAwCQELAAAAAAwCQELAAAAAExCwAIAAAAAkxCwAAAAAMAk3GgYAAAAQIY+7LPWtL76zvqPaX3lZhzBAgAAAACTELAAAAAAwCQELAAAAAAwCQELAAAAAExCwAIAAAAAkxCwAAAAAMAkBCwAAAAAMAkBCwAAAABMQsACAAAAAJMQsAAAAADAJAQsAAAAADAJAQsAAAAATELAAgAAAACTELAAAAAAwCQELAAAAAAwCQELAAAAAExCwAIAAAAAkxCwAAAAAMAkBCwAAAAAMAkBCwAAAABM4mjvAgAAuc+Hfdaa2l/fWf8xtT8AAHIrAhYAZEWkl8n9XTa3PwAAYFcELAB4SByqWMm8zsI+NK8vAAAeIVyDBQAAAAAm4QgWANhRcEywaX19aVpPAADgfhGw8FAw9dQoSZV+PWRqfwAAAHg0ELCADJg5ghqjpwEAADw6uAYLAAAAAExCwAIAAAAAkxCwAAAAAMAkBCwAAAAAMAkBCwAAAABMQsACAAAAAJMQsAAAAADAJAQsAAAAADDJQxWwPvroI5UuXVouLi6qWbOmNm7caO+SAAAAADxCHpqAtWjRIg0cOFAjRozQnj171LBhQ7Vo0UJnzpyxd2kAAAAAHhEPTcCaPHmyevXqpd69e6tSpUqaOnWqAgMDNXPmTHuXBgAAAOAR4WjvAsyQlJSkXbt2afjw4TbTmzdvri1btmS6n3PnzuncuXPWx1evXpUkXblyxZxC7SA18bqp/V2xGKb1lZKQYlpf8Snm9SVJCUnXTOsrL39+HhZmbgdmbgNS7t0OzNwGJLaD3CC3bgdmbgMS2wHu7FH5nUjKvdtBXt8G0uo3jLu/9xbjXi3ygD/++EPFihXT5s2bVb9+fev0qKgoxcTE6PDhw5nqJzIyUmPGjMmuMgEAAADkcWfPnlXx4sXvOP+hOIKVxmKx2Dw2DCPdtLuJiIhQ27ZtrY9TU1OVL18+lS1bNkv9wDyxsbEKDQ3Vhg0bVK1aNXuXA+Q4tgGA7QCQ2A5yA8MwdPXqVQUEBNy13UMRsAoXLiwHBwfFxcXZTL9w4YJ8fX0z3Y+/v7/8/f3NLg8PwMPDw/pvgQIF7FwNkPPYBgC2A0BiO8gtvLy87tnmoRjkwtnZWTVr1tSqVatspq9atcrmlEEAAAAAyE4PxREsSXr99dfVtWtXhYSEqF69evrkk0905swZ9enTx96lAQAAAHhEPDQB69lnn9Vff/2lt99+W+fOnVPlypW1fPlylSxZ0t6l4QH4+/tr9OjRnLqJRxbbAMB2AEhsB3nJQzGKIAAAAADkBg/FNVgAAAAAkBsQsAAAAADAJAQsAAAAADAJAQsAAAAATELAAgAAAACTELAAAAAAwCQELAAAAAAwCQELAAAAAExCwAIAAAAAkxCwAAAAAMAkjvYuAEhz+PBhffHFF9q4caNOnTql69evq0iRIqpevbrCw8PVvn175c+f395lAtnq1KlTGW4D9erVk4uLi73LA7Id+wLgFvYHeZfFMAzD3kXg0bZnzx4NHTpUGzduVP369VW7dm0VK1ZMrq6u+vvvv7V//35t3LhRV65c0dChQzVw4EB2rnjoLFiwQB988IG2b9+uokWL2mwDx48fl4uLi5577jkNGzZMJUuWtHe5gOnYFwC3sD/I+whYsLuSJUtqyJAh6tKli7y9ve/YbuvWrZoyZYqqVaumN998MwcrBLJXjRo1lC9fPvXo0UNt27ZViRIlbOYnJiZq69atWrhwob7++mt99NFHeuaZZ+xULZA92BcA7A8eFgQs2F1SUpKcnZ2zrT2Q233//fdq1apVptpevHhRJ0+eVK1atbK5KiBnsS8A2B88LAhYAAAAAGASRhFErrNhwwa1adNG5cqVU1BQkNq2bauNGzfauywgR+zevVv79u2zPl66dKmeeuopvfnmm0pKSrJjZUDOYl+ARx37g7yLgIVcZf78+WratKnc3Nw0YMAA9evXT66urmrSpIkWLFhg7/KAbBcREaEjR45Ikk6cOKFOnTrJzc1N//d//6ehQ4fauTogZ7AvANgf5GWcIohcpVKlSnrppZf02muv2UyfPHmyZs+erUOHDtmpMiBneHl5affu3SpbtqzGjx+vtWvX6scff9TmzZvVqVMnnT171t4lAtmOfQHA/iAv4wgWcpUTJ06oTZs26aa3bdtWJ0+etENFQM4yDEOpqamSpNWrV6tly5aSpMDAQF28eNGepQE5hn0BwP4gLyNgIVcJDAzUmjVr0k1fs2aNAgMD7VARkLNCQkI0duxYffbZZ9qwYYN1NKmTJ0/K19fXztUBOYN9AcD+IC9ztHcBwL8NGjRIAwYMUGxsrOrXry+LxaJNmzYpOjpa06ZNs3d5QLabOnWqnnvuOS1ZskQjRoxQuXLlJElfffWV6tevb+fqgJzBvgBgf5CXcQ0Wcp3Fixdr0qRJ1nPsK1WqpCFDhqhdu3Z2rgywnxs3bsjBwUFOTk72LgXIEewLgIyxP8j9CFgAkMv8888/+uqrr3T8+HENGTJE3t7e2r17t3x9fVWsWDF7lwcAyCHsD/ImAhZypaSkJF24cMF6cWeaEiVK2KkiIGf88ssvatKkiQoWLKhTp07p8OHDKlOmjN566y2dPn1an376qb1LBHIM+wI8ytgf5F0McoFc5ejRo2rYsKFcXV1VsmRJlS5dWqVLl1apUqVUunRpe5cHZLvXX39dPXv21NGjR+Xi4mKd3qJFC/300092rAzIOewLAPYHeRmDXCBX6dGjhxwdHfXdd9/J399fFovF3iUBOWrHjh36+OOP000vVqyY4uLi7FARkPPYFwDsD/IyAhZyldjYWO3atUsVK1a0dymAXbi4uOjKlSvpph8+fFhFihSxQ0VAzmNfALA/yMs4RRC5ymOPPcbN8/BIa9eund5++20lJydLkiwWi86cOaPhw4erffv2dq4OyBnsCwD2B3kZg1wgV1m7dq1GjhypqKgoBQcHpxuCtECBAnaqDMgZV65cUcuWLXXgwAFdvXpVAQEBiouLU7169bR8+XK5u7vbu0Qg27EvANgf5GUELOQq+fLdOqh6+/n2hmHIYrEoJSXFHmUBOW7t2rXavXu3UlNTVaNGDTVt2tTeJQE5hn0B8P+xP8h7CFjIVTZs2HDX+aGhoTlUCWAfJ0+eZJQ0PPLYFwDsD/IyAhYA5CIODg5q1KiRevXqpQ4dOtgMzQsAeHSwP8i7GOQCAHKRvXv3qnr16ho0aJD8/PwUERGhn3/+2d5lAQByGPuDvIsjWACQC928eVPffvutoqOjtWLFCgUFBalXr17q2rUrw/MCwCOE/UHeQ8ACgFwsMTFRH330kd544w0lJSXJyclJzz77rMaPHy9/f397lwcAyCHsD/IOThEEgFxo586deuWVV+Tv76/Jkydr8ODBOn78uNauXavff/9d7dq1s3eJAIAcwP4g7+EIFgDkIpMnT9a8efN0+PBhtWzZUr1791bLli2tw1ZL0rFjx1SxYkXdvHnTjpUCALIT+4O8i4CFPOM///mPGjdurEGDBsnNzc3e5QDZIigoSC+88IJ69uwpPz+/DNskJSXpiy++UPfu3XO4OsD+2BfgUcH+IO8iYCHP6Nmzp06dOqUTJ07o9OnT9i4HAGAH7AsA5HYELOQ58fHx8vDwsHcZAAA7Yl8AILciYAEAAACASRhFELnG1atXtWvXLsXHx0uSdu/erW7duumZZ57R559/bufqAAA5gX0BgLzO0d4FAJL0008/qXXr1oqPj1ehQoX0xRdfqEOHDipWrJgcHBz0zTff6Pr163rxxRftXSoAIJuwLwDwMOAIFnKFkSNH6plnntGZM2c0cOBAPfvss+rXr58OHTqk/fv3a8yYMfrwww/tXSYAIBuxLwDwMOAaLOQKBQsW1LZt21SxYkUlJSXJ1dVVu3fvVtWqVSXdus9D9erVdfXqVTtXCtgPw1PjYce+AMgc9ge5G0ewkCtcuXJF3t7ekiRnZ2e5ubnJ09PTOt/T01PXr1+3V3lArlCyZEmtXbtWlSpVsncpQLZgXwBkDvuD3I1rsJArWCwWWSyWOz4GIM2bN0+SrBf/Aw8b9gVA5rA/yN0IWMgVDMNQkyZN5Oh46yN5/fp1tWnTRs7OzpKkmzdv2rM8IFfh3j94WLEvALKG/UHuxDVYyBXGjBmTqXajR4/O5koA+7l69aqOHDmiChUqyMPDQ7t379bUqVOVkJCgp556Ss8995y9SwSyFfsC4Bb2B3kbAQsAcoF7DU996NAhzZo1i+GpAeAhx/4g72OQCwDIBRieGgAgsT94GHAEC7nC8ePHNW7cOM2dO1eSVKJECZsLNx0cHLRp0yZVqFDBXiUC2YrhqQH2BYDE/uBhwCAXyBWmT58uPz8/6+NLly5p1KhRKlq0qCRp0aJFmjJlimbNmmWvEoFsxfDUAPsCQGJ/8DAgYCFXWL16taZPn24zrX379ipTpowkqVSpUurdu7c9SgNyBMNTA+wLAIn9wcOAgIVc4fTp0ypdurT1ce/eveXl5WV9XKpUKf3222/2KA3IEQxPDbAvACT2Bw8DAhZyhXz58unChQsqVaqUJGnKlCk288+fPy8nJyc7VAbkjNuHnW7Xrl26Nu3bt8+pcgC7YF8AsD94GBCwkCs8/vjjWr16tWrXrp3h/B9//FGVK1fO4aqAnMN9fQD2BYDE/uBhwDDtyBV69uypcePG6fvvv08379tvv9V7772nnj172qEyAEBOYV8A4GHAMO3INTp37qxFixapYsWKqlChgiwWi3799VcdPnxY7du315dffmnvEoFsw/DUwC3sC/CoY3+Q9xGwkKssXLhQCxcu1JEjRyRJQUFB6ty5szp16mTnyoDsNXDgQLm5uSkqKkrSrWF4bx+eukSJEgxPjUcC+wI8ytgf5H0ELADIBSpXrqzp06ercePGkm7tUPfu3WsdnnrDhg3q3bu3jh49as8yAQDZjP1B3sc1WMgTkpOTdebMGXuXAWQbhqcGpIsXL9q7BMDu2B/kfQQs5AkHDx60+bIBHjZpw1OnmTJlinx8fKyPGZ4ajwJfX181adJECxYsUGJior3LAeyC/UHeR8ACgFwgbXjqO2F4ajwKDMOQs7OzevbsKX9/f/Xv31+xsbH2LgvIUewP8j7ug4VcoUaNGnedn5CQkEOVAPbRs2dPDRw4UFWrVlWrVq1s5qUNTz116lT7FAfkoJiYGOXLl08xMTGaN2+ePvroI1WrVk29e/dWly5dbE6VAh5G7A/yPga5QK7g4uKiTp063fE0wHPnzmn27NlKSUnJ4cqAnMPw1HjU5cuXT3FxcdbR0iRp69at+t///qf/+7//U0pKitq3b69PP/3UjlUC2Y/9Qd5GwEKuEBISol69eunll1/OcH5sbKxq1qxJwMJDj+Gp8ShzcHDQuXPnbAJWmmvXrmnhwoWaO3euNm/ebIfqgJzF/iDvImAhVxg4cKAk3fGQ9/Hjx9W7d2+tW7cu54oCAOSojI5gAUBeQ8ACgDwgOTlZ586dU4kSJexdCpBtYmJi1KlTJ+XPn9/epQB2c/HiRRUuXNjeZeABELAAIA/Yu3evatSowWmyAPCQc3BwUFhYmHr16qX27dvzB4c8iGHaYXdZvYHw77//nk2VAADshX0BcAu3K8j7CFiwu1q1aunFF1/U9u3b79jm8uXLmj17tipXrqxvvvkmB6sDckaNGjXu+sNFzXjYsS8A/r+YmBj9/vvvGjFihNatW6eaNWuqZs2amjlzpi5fvmzv8nAPnCIIu/v7778VFRWluXPnysnJSSEhIQoICJCLi4suXbqkgwcP6sCBAwoJCdHIkSPVokULe5cMmI5bFeBRx74AuIXbFeR9BCzkGjdu3NDy5cu1ceNGnTp1SgkJCSpcuLCqV6+u8PBw7lqOhxq3KgBuYV+ARx23K8j7CFgAkAtwqwIAgMTtCh4GBCwAAAAgl+B2BXkfAQsAAAAATMIoggBgZwxPDQCQ2B88LAhYAGBnDE8N/L/27tilyjaMA/BP+EzLFi3EyQixwdFAymwRiXByCDJR8B9IOUSDSENERnkMwUlcGsspCFqyySEcwrHZTUEUBCEQ8hvCA34FwceLnjzXBWd4n3Nzzv1ODz/O894HSOwHZ8U/p90AQK379u1bZmZmcvfu3T+Op56dnTWeGuCMsh+cDZ7BAqgSxlMDkNgP/nYCFgAAQEE8gwUAAFAQAQsAAKAgAhYAAEBBBCwAAICCCFgA1IS6uro/vt68eVPYd5XL5UI+C4C/i//BAqAmfPny5dj1zZs38/Dhw4yMjFTWOjo6TrotAM4YAQuAmnDjxo1f1trb23+7DgD/lyOCAJDkx48fmZmZydWrV9PQ0JDOzs7Mz8//Ure6upq+vr6cP38+ly5dytjYWLa2tk6+YQCqkoAFAEkeP36cJ0+eZHR0NB8+fMjQ0FBKpVKePXtWqfn69WsGBgbS2NiY5eXlvH79OisrK+nv78/3799PsXsAqoUjggDUvO3t7SwsLOTRo0eVQHXnzp3s7e3l5cuXKZVKuXjxYp4/f57W1tZ8/Pgx586dS5Jcu3Ytvb29efv2bcbHx0/xLgCoBn7BAqDmra2t5eDgIPfv3z+2/uDBg+zv72d9fT3Jz+OBQ0NDlXCV/ByWceXKlayurp5ozwBUJwELgJq3u7ubJGlrazu2fnS9s7NTqftvzVHdUQ0AtU3AAqDmtbS0JMkvwyo2NzePvd/S0vLbgRabm5uVGgBqm4AFQM3r6elJfX19lpeXj62/e/cuTU1N6e7uTpL09fXl/fv3OTg4qNSsra1lY2Mjt2/fPtGeAahOhlwAUPMuX76ciYmJlMvlNDQ05NatW/n8+XMWFxfz9OnTNDU1JUmmp6fT29ubwcHBTE5OZmdnJ1NTU+nq6srw8PAp3wUA1UDAAoAkr169SnNzc5aWlvLixYu0t7dnbm4upVKpUnP9+vV8+vQpU1NTuXfvXi5cuJDBwcGUy+U0NjaeYvcAVIu6w8PDw9NuAgAA4CzwDBYAAEBBBCwAAICCCFgAAAAFEbAAAAAKImABAAAURMACAAAoiIAFAABQEAELAACgIAIWAABAQQQsAACAgghYAAAABRGwAAAACvIvmzKnPINh1lwAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df = pd.DataFrame.from_dict(regular_xarray_benchmarks+optimized_xarray_benchmarks)\n", + "\n", + "pivot_df = df.pivot_table(index=['dataset','cloud-aware'], columns=['format'], values='time', aggfunc='mean')\n", + "\n", + "# Plotting\n", + "pivot_df.plot(kind='bar', figsize=(10, 6))\n", + "plt.title('Xarray \"Cloud-awared\" Access Pattern Performance (less is better)')\n", + "plt.xlabel('Tool')\n", + "plt.ylabel('Mean Time')\n", + "plt.xticks(rotation=90)\n", + "plt.legend(title='Format')\n", + "\n", + "plt.show()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/.ipynb_checkpoints/stats-checkpoint.png b/notebooks/.ipynb_checkpoints/stats-checkpoint.png new file mode 100644 index 0000000..860e66d Binary files /dev/null and b/notebooks/.ipynb_checkpoints/stats-checkpoint.png differ diff --git a/paper.qmd b/paper.qmd index 26fc167..674ec72 100644 --- a/paper.qmd +++ b/paper.qmd @@ -1,5 +1,5 @@ --- -title: "Cloud-Optimized HDF5 for NASA’s ICESat-2 Mission" +title: "Evaluating Cloud-Optimized HDF5 for NASA’s ICESat-2 Mission" format: agu-pdf: keep-tex: true @@ -39,6 +39,36 @@ author: postal-code: 80309 orcid: 0000-0002-3039-0260 url: "https://github.com/asteiker" + - name: "Aleksandar Jelenak" + affiliations: + - name: The HDF Group + city: Champaign + region: IL + country: USA + postal-code: 61820 + orcid: 0009-0001-2102-0559 + url: "https://github.com/ajelenak" + - name: "Lisa Kaser" + affiliations: + - name: National Snow and Ice Data Center, University of Colorado, Boulder. + department: CIRES + address: CIRES, 449 UCB + city: Boulder + region: CO + country: USA + postal-code: 80309 + url: "https://nsidc.org/about/about-nsidc/what-we-do/our-people/lisa_kaser" + - name: "Jeffrey E. Lee" + affiliations: + - name: NASA / KBR + department: NASA Goddard Space Flight Center + address: 8800 Greenbelt Rd + city: Greenbelt + region: MD + country: USA + postal-code: 20771 + url: "https://science.gsfc.nasa.gov/sci/bio/jeffrey.e.lee" + abstract: | The Hierarchical Data Format (HDF) is a common archival format for n-dimensional scientific data; it has been utilized to store valuable information from astrophysics to earth sciences and everything in between. As flexible and powerful as HDF can be, it comes with big tradeoffs when it’s accessed from remote storage systems, mainly because the file format and the client I/O libraries were designed for local and supercomputing workflows. As scientific data and workflows migrate to the cloud , efficient access to data stored in HDF format is a key factor that will accelerate or slow down “science in the cloud” across all disciplines. @@ -56,25 +86,116 @@ keep-tex: true date: last-modified --- -## Section Heading +## Problem + +Scientific data from NASA and other agencies are increasingly being distributed from the commercial cloud. Cloud storage enables large-scale workflows and should reduce local storage costs. It also allows the use of scalable on-demand cloud computing resources by individual scientists and the broader scientific community. However, the majority of this scientific data is stored in a format that was not designed for the cloud: The Hierarchical Data format or HDF. + +The most recent version of the Hierarchical Data Format is HDF5, a common archival format for n-dimensional scientific data; it has been utilized to store valuable information from astrophysics to earth sciences and everything in between. As flexible and powerful as HDF5 can be, it comes with big tradeoffs when it’s accessed from remote storage systems. + +HDF5 is a complex file format; we can think of it as a file system using a tree-like structure with multiple data types and native data structures. Because of this complexity, the most reliable way of accessing data stored in this format is using the HDF5 C API. Regardless of access pattern, nearly all tools ultimately rely on the HDF5-C library and this brings a couple issues that affect the efficiency of accessing this format over the network: + +--- + +#### **Metadata fragmentation** + +By default, file-level metadata associated with a dataset is stored in chunks of 4kb. This produces a lot of fragmentation across the file especially for data with many variables and nested groups. + +#### **Global API Lock** + +Because of the historical complexity of operations with the HDF5 format, there has been a necessity to make the library thread-safe and similarly to what happens in the Python language, the simplest mechanism to implement this is to have a global API lock. This global lock is not as big of an issue when we read data from local disk but it becomes a major bottleneck when we read data over the network because each read is sequential and latency in the cloud is exponentially bigger than local access. + +--- + +::: {#fig-1 fig-env="figure*"} + +![](figures/figure-1.png) + +shows how reads (Rn) are done in order to access file metadata, In the first read, R0, the HDF5 library verifies the file signature from the superblock, subsequent reads, R1, R2,...Rn, read file metadata, 4kb at the time. + +::: + +#### Background and data selection + +As a result of community feedback and “hack weeks” organized by NSIDC and UW eScience Institute in 2023, NSIDC started the Cloud Optimized Format Investigation (COFI) project to improve access to HDF5 from the ICESat-2 mission. A spaceborne lidar that retrieves surface topography of the Earth’s ice sheets, land and [oceans @NEUMANN2019111325]. Because of its complexity, large size and importance for cryospheric studies we targeted the ATL03 dataset. ATL03 core data are geolocated photon heights from the ICESat-2 ATLAS instrument. Each file contains 1003 geophysical variables in 6 data groups. Although our research was focused on this dataset, most of our findings are applicable to any dataset stored in HDF5 and NetCDF4. + +## Methodology + +We tested access times to original and cloud-optimized small (1 GB), medium (2 GB) and large (7 GB) HDF5 ATL03 files [list files tested] stored in AWS S3 buckets in region us-west-2, the region hosting NASA’s Earthdata Cloud archives. Files were accessed using Python tools commonly used by Earth scientists: h5py and Xarray. h5py is a Python wrapper around the HDF5 C API. xarray^[`h5py` is a dependency of Xarray] is a widely used Python package for working with n-dimensional data. We also tested access times using h5coro, a python package optimized for reading HDF5 files from S3 buckets and kerchunk, a tool that creates an efficient lookup table for file chunks to allow performant partial reads of files. + +HDF5 ATL03 files were originally cloud optimized by “repacking” them, using a relatively new feature in the HDF5 C API called “paged aggregation”. Page aggregation does 2 things: it collects file-level metadata from datasets and stores it on dedicated metadata blocks in the file; and it forces the library to write data using fixed-size blocks. Aggregation allows client libraries to read file metadata with only a few requests and uses the page size used in the aggregation as the minimal request size, overriding the 1 request per chunk behavior. + +::: {#fig-2 fig-env="figure*"} + +![](figures/figure-2.png) + +shows how file-level metadata and data gets internally packed once we use paged aggregation on a file. + +::: + + +## Results + + +::: {#fig-3 fig-env="figure*"} + +![](figures/figure-3.png) + +Benchmarks show that cloud optimizing ATL03 files improved access times at least an order of magnitude when used with aligned I/O patterns, this is telling the library about the cloud optimization and page size. + +::: + +## Recommendations + +We have split our recommendations for the ATL03 product into 3 main categories, creating the files, accessing the files, and future tool development. + +### Recommended cloud optimizations + +Based on our testing we recommend the following cloud optimizations for creating HDF5 files for the ATL03 product: +Create HDF5 files using paged aggregation by setting HDF5 library parameters: + +1. File page strategy: H5F_FSPACE_STRATEGY_PAGE +2. File page size: 8000000 + If repacking an existing file, h5repack contains the code to alter tese variables inside the file + ```bash + h5repack -S PAGE -G 8000000 input.h5 output.h5 + ``` +3. Avoid using unlimited dimensions when creating variables because the HDF5 API cannot support it inside bffered pages and representation of these variables is not supported by Kerchunk. + +#### Reasoning + +Based on the variable size of ATL03 it becomes really difficult to allocate a fixed metadata page, big files contain north of 30MB of metadata, but the median sized file is below 8MB. If we had +adopted user block we would have caused an increase in the file size and storage cost of approximate 30% (reference to our tests). Another consequence of using a dedicated fixed page for file-level metadata is +that metadata overflow will generate the same impact in access times, the library will fetch the metadata in one go but the rest will be using the predefined block size of 4kb. + +Paged aggregation is thus the simplest way of cloud optimizing an HDF5 file as the metadata will keep filling dedicated pages until all the file-level metadata is stored at the front of the file. +Chunk sizes cannot be larger than the page size and when chunk sizes are smaller we need to take into account how these chunks will fit on a page, in an ideal scenario all the space +will be filled but that is not the case and we will end up with unused space [See @fig-2]. -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum hendrerit facilisis velit sit amet malesuada. Phasellus ornare nibh augue, maximus sodales ex tristique vitae. Vivamus non sollicitudin orci, aliquam placerat metus. Maecenas volutpat orci felis, vel finibus urna consectetur sed. Integer in dui ac dui mollis imperdiet. Quisque sed dapibus nibh. Aenean non luctus leo. Phasellus luctus mauris id aliquet dictum. Aliquam fermentum semper massa, vel dignissim nibh dictum et. See @Hubbard2021. +### Recommended access patterns -Phasellus interdum tincidunt ex, a euismod massa pulvinar at. Ut fringilla ut nisi nec volutpat. Morbi imperdiet congue tincidunt. Vivamus eget rutrum purus. Etiam et pretium justo. Donec et egestas sem. Donec molestie ex sit amet viverra egestas. Nullam justo nulla, fringilla at iaculis in, posuere non mauris. Ut eget imperdiet elit. +Placeholder -In luctus mauris vitae imperdiet luctus. Morbi volutpat ligula ut tortor fermentum, eu ornare felis luctus. Donec semper diam vitae mattis posuere. Suspendisse facilisis purus nisi, sit amet egestas ex tempor ut. Cras tortor nulla, euismod at fermentum vel, dictum vel justo. Aenean commodo interdum diam nec placerat. Nunc vestibulum felis at est tincidunt, at euismod dui vestibulum. Nulla venenatis tortor at auctor iaculis. Donec consectetur neque ut sagittis ornare. Nullam pharetra felis tempor suscipit efficitur. Curabitur nibh ex, euismod at congue hendrerit, egestas id mi. Duis porttitor neque in commodo elementum. Fusce vitae fermentum nisi, euismod viverra augue. Curabitur at mi pretium, accumsan purus nec, tempus turpis. +### Recommended tooling development -Donec non semper dui, quis aliquet est. Quisque quis sapien at massa ultricies egestas. Duis consequat ultricies erat, a pulvinar nisl vestibulum id. Sed tristique turpis ligula, et tempor lectus iaculis at. Vivamus commodo sapien ac turpis vestibulum dapibus. Morbi tristique arcu metus, et laoreet nisi varius nec. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Fusce sit amet nisl at mauris suscipit aliquet. Nulla vitae dignissim urna. Suspendisse sit amet arcu vitae magna blandit mattis. Vivamus convallis efficitur pulvinar. Sed cursus elit nulla. Sed porta, arcu a euismod pretium, odio dui lacinia lacus, ac vulputate nulla augue eget ex. Nullam consequat ligula sit amet mattis aliquam. Nulla risus urna, ultrices vel ullamcorper id, ornare viverra nunc. +Placeholder -Nunc in lobortis lacus. Duis maximus urna leo, varius sodales arcu interdum nec. Pellentesque imperdiet dolor in leo eleifend dapibus. Ut dapibus, lectus non viverra gravida, ipsum ex faucibus tellus, quis iaculis risus tellus eget augue. Nullam a viverra est. Cras velit nisi, interdum in lacus at, vehicula mattis elit. Curabitur eu viverra purus. Proin pellentesque, metus vitae congue convallis, lorem metus feugiat mi, sit amet auctor purus ligula bibendum ante. Nam id justo scelerisque, rhoncus lectus in, fermentum libero. Donec tincidunt egestas ex ac eleifend. Cras faucibus ipsum a nunc faucibus fermentum. Integer et maximus lacus. Nam dictum nibh id viverra convallis. +### Mission implementation -## Acknowledgments +ATL03 is a complex science data product containing both segmented (20 meters along-track) and large, variable-rate photon datasets. ATL03 is created using pipeline-style processing where the science data and NetCDF-style metadata are written by independent software packages. The following steps were employed to create cloud-optimized Release 007 ATL03 products, while minimizing increases in file size: + +1. Set the "file space strategy" to H5F_FSPACE_STRATEGY_PAGE and enabled "free space tracking" within the HDF5 file creation property list. +2. Set the "file space page size" to 8MiB. +3. Changed all "COMPACT" dataset storage types to "CONTIGUOUS". +4. Increased the "chunk size" of the photon-rate datasets (from 10,000 to 100,000 elements), while making sure no "chunk sizes" exceeded the 8MiB "file space page size". +5. Introduced a new production step that executes the "h5repack" utility (with no options) to create a "defragmented" final product. -Phasellus interdum tincidunt ex, a euismod massa pulvinar at. Ut fringilla ut nisi nec volutpat. Morbi imperdiet congue tincidunt. Vivamus eget rutrum purus. Etiam et pretium justo. Donec et egestas sem. Donec molestie ex sit amet viverra egestas. Nullam justo nulla, fringilla at iaculis in, posuere non mauris. Ut eget imperdiet elit. +## Discussion -## Open research +1. Chunking shapes and sizes +2. Paged aggregation vs User block +3. Side effects on different access patterns, e.g. Kerchunk -Phasellus interdum tincidunt ex, a euismod massa pulvinar at. Ut fringilla ut nisi nec volutpat. Morbi imperdiet congue tincidunt. Vivamus eget rutrum purus. Etiam et pretium justo. Donec et egestas sem. Donec molestie ex sit amet viverra egestas. Nullam justo nulla, fringilla at iaculis in, posuere non mauris. Ut eget imperdiet elit. + ## References {.unnumbered} diff --git a/site_libs/quarto-contrib/glightbox/glightbox.min.css b/site_libs/quarto-contrib/glightbox/glightbox.min.css new file mode 100644 index 0000000..3c9ff87 --- /dev/null +++ b/site_libs/quarto-contrib/glightbox/glightbox.min.css @@ -0,0 +1 @@ +.glightbox-container{width:100%;height:100%;position:fixed;top:0;left:0;z-index:999999!important;overflow:hidden;-ms-touch-action:none;touch-action:none;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;-ms-text-size-adjust:100%;text-size-adjust:100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;outline:0}.glightbox-container.inactive{display:none}.glightbox-container .gcontainer{position:relative;width:100%;height:100%;z-index:9999;overflow:hidden}.glightbox-container .gslider{-webkit-transition:-webkit-transform .4s ease;transition:-webkit-transform .4s ease;transition:transform .4s ease;transition:transform .4s ease,-webkit-transform .4s ease;height:100%;left:0;top:0;width:100%;position:relative;overflow:hidden;display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.glightbox-container .gslide{width:100%;position:absolute;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;opacity:0}.glightbox-container .gslide.current{opacity:1;z-index:99999;position:relative}.glightbox-container .gslide.prev{opacity:1;z-index:9999}.glightbox-container .gslide-inner-content{width:100%}.glightbox-container .ginner-container{position:relative;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;max-width:100%;margin:auto;height:100vh}.glightbox-container .ginner-container.gvideo-container{width:100%}.glightbox-container .ginner-container.desc-bottom,.glightbox-container .ginner-container.desc-top{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.glightbox-container .ginner-container.desc-left,.glightbox-container .ginner-container.desc-right{max-width:100%!important}.gslide iframe,.gslide video{outline:0!important;border:none;min-height:165px;-webkit-overflow-scrolling:touch;-ms-touch-action:auto;touch-action:auto}.gslide:not(.current){pointer-events:none}.gslide-image{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.gslide-image img{max-height:100vh;display:block;padding:0;float:none;outline:0;border:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;max-width:100vw;width:auto;height:auto;-o-object-fit:cover;object-fit:cover;-ms-touch-action:none;touch-action:none;margin:auto;min-width:200px}.desc-bottom .gslide-image img,.desc-top .gslide-image img{width:auto}.desc-left .gslide-image img,.desc-right .gslide-image img{width:auto;max-width:100%}.gslide-image img.zoomable{position:relative}.gslide-image img.dragging{cursor:-webkit-grabbing!important;cursor:grabbing!important;-webkit-transition:none;transition:none}.gslide-video{position:relative;max-width:100vh;width:100%!important}.gslide-video .plyr__poster-enabled.plyr--loading .plyr__poster{display:none}.gslide-video .gvideo-wrapper{width:100%;margin:auto}.gslide-video::before{content:'';position:absolute;width:100%;height:100%;background:rgba(255,0,0,.34);display:none}.gslide-video.playing::before{display:none}.gslide-video.fullscreen{max-width:100%!important;min-width:100%;height:75vh}.gslide-video.fullscreen video{max-width:100%!important;width:100%!important}.gslide-inline{background:#fff;text-align:left;max-height:calc(100vh - 40px);overflow:auto;max-width:100%;margin:auto}.gslide-inline .ginlined-content{padding:20px;width:100%}.gslide-inline .dragging{cursor:-webkit-grabbing!important;cursor:grabbing!important;-webkit-transition:none;transition:none}.ginlined-content{overflow:auto;display:block!important;opacity:1}.gslide-external{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;min-width:100%;background:#fff;padding:0;overflow:auto;max-height:75vh;height:100%}.gslide-media{display:-webkit-box;display:-ms-flexbox;display:flex;width:auto}.zoomed .gslide-media{-webkit-box-shadow:none!important;box-shadow:none!important}.desc-bottom .gslide-media,.desc-top .gslide-media{margin:0 auto;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.gslide-description{position:relative;-webkit-box-flex:1;-ms-flex:1 0 100%;flex:1 0 100%}.gslide-description.description-left,.gslide-description.description-right{max-width:100%}.gslide-description.description-bottom,.gslide-description.description-top{margin:0 auto;width:100%}.gslide-description p{margin-bottom:12px}.gslide-description p:last-child{margin-bottom:0}.zoomed .gslide-description{display:none}.glightbox-button-hidden{display:none}.glightbox-mobile .glightbox-container .gslide-description{height:auto!important;width:100%;position:absolute;bottom:0;padding:19px 11px;max-width:100vw!important;-webkit-box-ordinal-group:3!important;-ms-flex-order:2!important;order:2!important;max-height:78vh;overflow:auto!important;background:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,0)),to(rgba(0,0,0,.75)));background:linear-gradient(to bottom,rgba(0,0,0,0) 0,rgba(0,0,0,.75) 100%);-webkit-transition:opacity .3s linear;transition:opacity .3s linear;padding-bottom:50px}.glightbox-mobile .glightbox-container .gslide-title{color:#fff;font-size:1em}.glightbox-mobile .glightbox-container .gslide-desc{color:#a1a1a1}.glightbox-mobile .glightbox-container .gslide-desc a{color:#fff;font-weight:700}.glightbox-mobile .glightbox-container .gslide-desc *{color:inherit}.glightbox-mobile .glightbox-container .gslide-desc .desc-more{color:#fff;opacity:.4}.gdesc-open .gslide-media{-webkit-transition:opacity .5s ease;transition:opacity .5s ease;opacity:.4}.gdesc-open .gdesc-inner{padding-bottom:30px}.gdesc-closed .gslide-media{-webkit-transition:opacity .5s ease;transition:opacity .5s ease;opacity:1}.greset{-webkit-transition:all .3s ease;transition:all .3s ease}.gabsolute{position:absolute}.grelative{position:relative}.glightbox-desc{display:none!important}.glightbox-open{overflow:hidden}.gloader{height:25px;width:25px;-webkit-animation:lightboxLoader .8s infinite linear;animation:lightboxLoader .8s infinite linear;border:2px solid #fff;border-right-color:transparent;border-radius:50%;position:absolute;display:block;z-index:9999;left:0;right:0;margin:0 auto;top:47%}.goverlay{width:100%;height:calc(100vh + 1px);position:fixed;top:-1px;left:0;background:#000;will-change:opacity}.glightbox-mobile .goverlay{background:#000}.gclose,.gnext,.gprev{z-index:99999;cursor:pointer;width:26px;height:44px;border:none;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.gclose svg,.gnext svg,.gprev svg{display:block;width:25px;height:auto;margin:0;padding:0}.gclose.disabled,.gnext.disabled,.gprev.disabled{opacity:.1}.gclose .garrow,.gnext .garrow,.gprev .garrow{stroke:#fff}.gbtn.focused{outline:2px solid #0f3d81}iframe.wait-autoplay{opacity:0}.glightbox-closing .gclose,.glightbox-closing .gnext,.glightbox-closing .gprev{opacity:0!important}.glightbox-clean .gslide-description{background:#fff}.glightbox-clean .gdesc-inner{padding:22px 20px}.glightbox-clean .gslide-title{font-size:1em;font-weight:400;font-family:arial;color:#000;margin-bottom:19px;line-height:1.4em}.glightbox-clean .gslide-desc{font-size:.86em;margin-bottom:0;font-family:arial;line-height:1.4em}.glightbox-clean .gslide-video{background:#000}.glightbox-clean .gclose,.glightbox-clean .gnext,.glightbox-clean .gprev{background-color:rgba(0,0,0,.75);border-radius:4px}.glightbox-clean .gclose path,.glightbox-clean .gnext path,.glightbox-clean .gprev path{fill:#fff}.glightbox-clean .gprev{position:absolute;top:-100%;left:30px;width:40px;height:50px}.glightbox-clean .gnext{position:absolute;top:-100%;right:30px;width:40px;height:50px}.glightbox-clean .gclose{width:35px;height:35px;top:15px;right:10px;position:absolute}.glightbox-clean .gclose svg{width:18px;height:auto}.glightbox-clean .gclose:hover{opacity:1}.gfadeIn{-webkit-animation:gfadeIn .5s ease;animation:gfadeIn .5s ease}.gfadeOut{-webkit-animation:gfadeOut .5s ease;animation:gfadeOut .5s ease}.gslideOutLeft{-webkit-animation:gslideOutLeft .3s ease;animation:gslideOutLeft .3s ease}.gslideInLeft{-webkit-animation:gslideInLeft .3s ease;animation:gslideInLeft .3s ease}.gslideOutRight{-webkit-animation:gslideOutRight .3s ease;animation:gslideOutRight .3s ease}.gslideInRight{-webkit-animation:gslideInRight .3s ease;animation:gslideInRight .3s ease}.gzoomIn{-webkit-animation:gzoomIn .5s ease;animation:gzoomIn .5s ease}.gzoomOut{-webkit-animation:gzoomOut .5s ease;animation:gzoomOut .5s ease}@-webkit-keyframes lightboxLoader{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes lightboxLoader{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes gfadeIn{from{opacity:0}to{opacity:1}}@keyframes gfadeIn{from{opacity:0}to{opacity:1}}@-webkit-keyframes gfadeOut{from{opacity:1}to{opacity:0}}@keyframes gfadeOut{from{opacity:1}to{opacity:0}}@-webkit-keyframes gslideInLeft{from{opacity:0;-webkit-transform:translate3d(-60%,0,0);transform:translate3d(-60%,0,0)}to{visibility:visible;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes gslideInLeft{from{opacity:0;-webkit-transform:translate3d(-60%,0,0);transform:translate3d(-60%,0,0)}to{visibility:visible;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@-webkit-keyframes gslideOutLeft{from{opacity:1;visibility:visible;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(-60%,0,0);transform:translate3d(-60%,0,0);opacity:0;visibility:hidden}}@keyframes gslideOutLeft{from{opacity:1;visibility:visible;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(-60%,0,0);transform:translate3d(-60%,0,0);opacity:0;visibility:hidden}}@-webkit-keyframes gslideInRight{from{opacity:0;visibility:visible;-webkit-transform:translate3d(60%,0,0);transform:translate3d(60%,0,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes gslideInRight{from{opacity:0;visibility:visible;-webkit-transform:translate3d(60%,0,0);transform:translate3d(60%,0,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@-webkit-keyframes gslideOutRight{from{opacity:1;visibility:visible;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(60%,0,0);transform:translate3d(60%,0,0);opacity:0}}@keyframes gslideOutRight{from{opacity:1;visibility:visible;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(60%,0,0);transform:translate3d(60%,0,0);opacity:0}}@-webkit-keyframes gzoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:1}}@keyframes gzoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:1}}@-webkit-keyframes gzoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes gzoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@media (min-width:769px){.glightbox-container .ginner-container{width:auto;height:auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.glightbox-container .ginner-container.desc-top .gslide-description{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.glightbox-container .ginner-container.desc-top .gslide-image,.glightbox-container .ginner-container.desc-top .gslide-image img{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.glightbox-container .ginner-container.desc-left .gslide-description{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.glightbox-container .ginner-container.desc-left .gslide-image{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.gslide-image img{max-height:97vh;max-width:100%}.gslide-image img.zoomable{cursor:-webkit-zoom-in;cursor:zoom-in}.zoomed .gslide-image img.zoomable{cursor:-webkit-grab;cursor:grab}.gslide-inline{max-height:95vh}.gslide-external{max-height:100vh}.gslide-description.description-left,.gslide-description.description-right{max-width:275px}.glightbox-open{height:auto}.goverlay{background:rgba(0,0,0,.92)}.glightbox-clean .gslide-media{-webkit-box-shadow:1px 2px 9px 0 rgba(0,0,0,.65);box-shadow:1px 2px 9px 0 rgba(0,0,0,.65)}.glightbox-clean .description-left .gdesc-inner,.glightbox-clean .description-right .gdesc-inner{position:absolute;height:100%;overflow-y:auto}.glightbox-clean .gclose,.glightbox-clean .gnext,.glightbox-clean .gprev{background-color:rgba(0,0,0,.32)}.glightbox-clean .gclose:hover,.glightbox-clean .gnext:hover,.glightbox-clean .gprev:hover{background-color:rgba(0,0,0,.7)}.glightbox-clean .gprev{top:45%}.glightbox-clean .gnext{top:45%}}@media (min-width:992px){.glightbox-clean .gclose{opacity:.7;right:20px}}@media screen and (max-height:420px){.goverlay{background:#000}} \ No newline at end of file diff --git a/site_libs/quarto-contrib/glightbox/glightbox.min.js b/site_libs/quarto-contrib/glightbox/glightbox.min.js new file mode 100644 index 0000000..997908b --- /dev/null +++ b/site_libs/quarto-contrib/glightbox/glightbox.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).GLightbox=t()}(this,(function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:null,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,n=e[s]=e[s]||[],l={all:n,evt:null,found:null};return t&&i&&P(n)>0&&o(n,(function(e,n){if(e.eventName==t&&e.fn.toString()==i.toString())return l.found=!0,l.evt=n,!1})),l}function a(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=t.onElement,n=t.withCallback,s=t.avoidDuplicate,l=void 0===s||s,a=t.once,h=void 0!==a&&a,d=t.useCapture,c=void 0!==d&&d,u=arguments.length>2?arguments[2]:void 0,g=i||[];function v(e){T(n)&&n.call(u,e,this),h&&v.destroy()}return C(g)&&(g=document.querySelectorAll(g)),v.destroy=function(){o(g,(function(t){var i=r(t,e,v);i.found&&i.all.splice(i.evt,1),t.removeEventListener&&t.removeEventListener(e,v,c)}))},o(g,(function(t){var i=r(t,e,v);(t.addEventListener&&l&&!i.found||!l)&&(t.addEventListener(e,v,c),i.all.push({eventName:e,fn:v}))})),v}function h(e,t){o(t.split(" "),(function(t){return e.classList.add(t)}))}function d(e,t){o(t.split(" "),(function(t){return e.classList.remove(t)}))}function c(e,t){return e.classList.contains(t)}function u(e,t){for(;e!==document.body;){if(!(e=e.parentElement))return!1;if("function"==typeof e.matches?e.matches(t):e.msMatchesSelector(t))return e}}function g(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!e||""===t)return!1;if("none"===t)return T(i)&&i(),!1;var n=x(),s=t.split(" ");o(s,(function(t){h(e,"g"+t)})),a(n,{onElement:e,avoidDuplicate:!1,once:!0,withCallback:function(e,t){o(s,(function(e){d(t,"g"+e)})),T(i)&&i()}})}function v(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(""===t)return e.style.webkitTransform="",e.style.MozTransform="",e.style.msTransform="",e.style.OTransform="",e.style.transform="",!1;e.style.webkitTransform=t,e.style.MozTransform=t,e.style.msTransform=t,e.style.OTransform=t,e.style.transform=t}function f(e){e.style.display="block"}function p(e){e.style.display="none"}function m(e){var t=document.createDocumentFragment(),i=document.createElement("div");for(i.innerHTML=e;i.firstChild;)t.appendChild(i.firstChild);return t}function y(){return{width:window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,height:window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight}}function x(){var e,t=document.createElement("fakeelement"),i={animation:"animationend",OAnimation:"oAnimationEnd",MozAnimation:"animationend",WebkitAnimation:"webkitAnimationEnd"};for(e in i)if(void 0!==t.style[e])return i[e]}function b(e,t,i,n){if(e())t();else{var s;i||(i=100);var l=setInterval((function(){e()&&(clearInterval(l),s&&clearTimeout(s),t())}),i);n&&(s=setTimeout((function(){clearInterval(l)}),n))}}function S(e,t,i){if(I(e))console.error("Inject assets error");else if(T(t)&&(i=t,t=!1),C(t)&&t in window)T(i)&&i();else{var n;if(-1!==e.indexOf(".css")){if((n=document.querySelectorAll('link[href="'+e+'"]'))&&n.length>0)return void(T(i)&&i());var s=document.getElementsByTagName("head")[0],l=s.querySelectorAll('link[rel="stylesheet"]'),o=document.createElement("link");return o.rel="stylesheet",o.type="text/css",o.href=e,o.media="all",l?s.insertBefore(o,l[0]):s.appendChild(o),void(T(i)&&i())}if((n=document.querySelectorAll('script[src="'+e+'"]'))&&n.length>0){if(T(i)){if(C(t))return b((function(){return void 0!==window[t]}),(function(){i()})),!1;i()}}else{var r=document.createElement("script");r.type="text/javascript",r.src=e,r.onload=function(){if(T(i)){if(C(t))return b((function(){return void 0!==window[t]}),(function(){i()})),!1;i()}},document.body.appendChild(r)}}}function w(){return"navigator"in window&&window.navigator.userAgent.match(/(iPad)|(iPhone)|(iPod)|(Android)|(PlayBook)|(BB10)|(BlackBerry)|(Opera Mini)|(IEMobile)|(webOS)|(MeeGo)/i)}function T(e){return"function"==typeof e}function C(e){return"string"==typeof e}function k(e){return!(!e||!e.nodeType||1!=e.nodeType)}function E(e){return Array.isArray(e)}function A(e){return e&&e.length&&isFinite(e.length)}function L(t){return"object"===e(t)&&null!=t&&!T(t)&&!E(t)}function I(e){return null==e}function O(e,t){return null!==e&&hasOwnProperty.call(e,t)}function P(e){if(L(e)){if(e.keys)return e.keys().length;var t=0;for(var i in e)O(e,i)&&t++;return t}return e.length}function M(e){return!isNaN(parseFloat(e))&&isFinite(e)}function z(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:-1,t=document.querySelectorAll(".gbtn[data-taborder]:not(.disabled)");if(!t.length)return!1;if(1==t.length)return t[0];"string"==typeof e&&(e=parseInt(e));var i=[];o(t,(function(e){i.push(e.getAttribute("data-taborder"))}));var n=Math.max.apply(Math,i.map((function(e){return parseInt(e)}))),s=e<0?1:e+1;s>n&&(s="1");var l=i.filter((function(e){return e>=parseInt(s)})),r=l.sort()[0];return document.querySelector('.gbtn[data-taborder="'.concat(r,'"]'))}function X(e){if(e.events.hasOwnProperty("keyboard"))return!1;e.events.keyboard=a("keydown",{onElement:window,withCallback:function(t,i){var n=(t=t||window.event).keyCode;if(9==n){var s=document.querySelector(".gbtn.focused");if(!s){var l=!(!document.activeElement||!document.activeElement.nodeName)&&document.activeElement.nodeName.toLocaleLowerCase();if("input"==l||"textarea"==l||"button"==l)return}t.preventDefault();var o=document.querySelectorAll(".gbtn[data-taborder]");if(!o||o.length<=0)return;if(!s){var r=z();return void(r&&(r.focus(),h(r,"focused")))}var a=z(s.getAttribute("data-taborder"));d(s,"focused"),a&&(a.focus(),h(a,"focused"))}39==n&&e.nextSlide(),37==n&&e.prevSlide(),27==n&&e.close()}})}function Y(e){return Math.sqrt(e.x*e.x+e.y*e.y)}function q(e,t){var i=function(e,t){var i=Y(e)*Y(t);if(0===i)return 0;var n=function(e,t){return e.x*t.x+e.y*t.y}(e,t)/i;return n>1&&(n=1),Math.acos(n)}(e,t);return function(e,t){return e.x*t.y-t.x*e.y}(e,t)>0&&(i*=-1),180*i/Math.PI}var N=function(){function e(i){t(this,e),this.handlers=[],this.el=i}return n(e,[{key:"add",value:function(e){this.handlers.push(e)}},{key:"del",value:function(e){e||(this.handlers=[]);for(var t=this.handlers.length;t>=0;t--)this.handlers[t]===e&&this.handlers.splice(t,1)}},{key:"dispatch",value:function(){for(var e=0,t=this.handlers.length;e=0)console.log("ignore drag for this touched element",e.target.nodeName.toLowerCase());else{this.now=Date.now(),this.x1=e.touches[0].pageX,this.y1=e.touches[0].pageY,this.delta=this.now-(this.last||this.now),this.touchStart.dispatch(e,this.element),null!==this.preTapPosition.x&&(this.isDoubleTap=this.delta>0&&this.delta<=250&&Math.abs(this.preTapPosition.x-this.x1)<30&&Math.abs(this.preTapPosition.y-this.y1)<30,this.isDoubleTap&&clearTimeout(this.singleTapTimeout)),this.preTapPosition.x=this.x1,this.preTapPosition.y=this.y1,this.last=this.now;var t=this.preV;if(e.touches.length>1){this._cancelLongTap(),this._cancelSingleTap();var i={x:e.touches[1].pageX-this.x1,y:e.touches[1].pageY-this.y1};t.x=i.x,t.y=i.y,this.pinchStartLen=Y(t),this.multipointStart.dispatch(e,this.element)}this._preventTap=!1,this.longTapTimeout=setTimeout(function(){this.longTap.dispatch(e,this.element),this._preventTap=!0}.bind(this),750)}}}},{key:"move",value:function(e){if(e.touches){var t=this.preV,i=e.touches.length,n=e.touches[0].pageX,s=e.touches[0].pageY;if(this.isDoubleTap=!1,i>1){var l=e.touches[1].pageX,o=e.touches[1].pageY,r={x:e.touches[1].pageX-n,y:e.touches[1].pageY-s};null!==t.x&&(this.pinchStartLen>0&&(e.zoom=Y(r)/this.pinchStartLen,this.pinch.dispatch(e,this.element)),e.angle=q(r,t),this.rotate.dispatch(e,this.element)),t.x=r.x,t.y=r.y,null!==this.x2&&null!==this.sx2?(e.deltaX=(n-this.x2+l-this.sx2)/2,e.deltaY=(s-this.y2+o-this.sy2)/2):(e.deltaX=0,e.deltaY=0),this.twoFingerPressMove.dispatch(e,this.element),this.sx2=l,this.sy2=o}else{if(null!==this.x2){e.deltaX=n-this.x2,e.deltaY=s-this.y2;var a=Math.abs(this.x1-this.x2),h=Math.abs(this.y1-this.y2);(a>10||h>10)&&(this._preventTap=!0)}else e.deltaX=0,e.deltaY=0;this.pressMove.dispatch(e,this.element)}this.touchMove.dispatch(e,this.element),this._cancelLongTap(),this.x2=n,this.y2=s,i>1&&e.preventDefault()}}},{key:"end",value:function(e){if(e.changedTouches){this._cancelLongTap();var t=this;e.touches.length<2&&(this.multipointEnd.dispatch(e,this.element),this.sx2=this.sy2=null),this.x2&&Math.abs(this.x1-this.x2)>30||this.y2&&Math.abs(this.y1-this.y2)>30?(e.direction=this._swipeDirection(this.x1,this.x2,this.y1,this.y2),this.swipeTimeout=setTimeout((function(){t.swipe.dispatch(e,t.element)}),0)):(this.tapTimeout=setTimeout((function(){t._preventTap||t.tap.dispatch(e,t.element),t.isDoubleTap&&(t.doubleTap.dispatch(e,t.element),t.isDoubleTap=!1)}),0),t.isDoubleTap||(t.singleTapTimeout=setTimeout((function(){t.singleTap.dispatch(e,t.element)}),250))),this.touchEnd.dispatch(e,this.element),this.preV.x=0,this.preV.y=0,this.zoom=1,this.pinchStartLen=null,this.x1=this.x2=this.y1=this.y2=null}}},{key:"cancelAll",value:function(){this._preventTap=!0,clearTimeout(this.singleTapTimeout),clearTimeout(this.tapTimeout),clearTimeout(this.longTapTimeout),clearTimeout(this.swipeTimeout)}},{key:"cancel",value:function(e){this.cancelAll(),this.touchCancel.dispatch(e,this.element)}},{key:"_cancelLongTap",value:function(){clearTimeout(this.longTapTimeout)}},{key:"_cancelSingleTap",value:function(){clearTimeout(this.singleTapTimeout)}},{key:"_swipeDirection",value:function(e,t,i,n){return Math.abs(e-t)>=Math.abs(i-n)?e-t>0?"Left":"Right":i-n>0?"Up":"Down"}},{key:"on",value:function(e,t){this[e]&&this[e].add(t)}},{key:"off",value:function(e,t){this[e]&&this[e].del(t)}},{key:"destroy",value:function(){return this.singleTapTimeout&&clearTimeout(this.singleTapTimeout),this.tapTimeout&&clearTimeout(this.tapTimeout),this.longTapTimeout&&clearTimeout(this.longTapTimeout),this.swipeTimeout&&clearTimeout(this.swipeTimeout),this.element.removeEventListener("touchstart",this.start),this.element.removeEventListener("touchmove",this.move),this.element.removeEventListener("touchend",this.end),this.element.removeEventListener("touchcancel",this.cancel),this.rotate.del(),this.touchStart.del(),this.multipointStart.del(),this.multipointEnd.del(),this.pinch.del(),this.swipe.del(),this.tap.del(),this.doubleTap.del(),this.longTap.del(),this.singleTap.del(),this.pressMove.del(),this.twoFingerPressMove.del(),this.touchMove.del(),this.touchEnd.del(),this.touchCancel.del(),this.preV=this.pinchStartLen=this.zoom=this.isDoubleTap=this.delta=this.last=this.now=this.tapTimeout=this.singleTapTimeout=this.longTapTimeout=this.swipeTimeout=this.x1=this.x2=this.y1=this.y2=this.preTapPosition=this.rotate=this.touchStart=this.multipointStart=this.multipointEnd=this.pinch=this.swipe=this.tap=this.doubleTap=this.longTap=this.singleTap=this.pressMove=this.touchMove=this.touchEnd=this.touchCancel=this.twoFingerPressMove=null,window.removeEventListener("scroll",this._cancelAllHandler),null}}]),e}();function W(e){var t=function(){var e,t=document.createElement("fakeelement"),i={transition:"transitionend",OTransition:"oTransitionEnd",MozTransition:"transitionend",WebkitTransition:"webkitTransitionEnd"};for(e in i)if(void 0!==t.style[e])return i[e]}(),i=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,n=c(e,"gslide-media")?e:e.querySelector(".gslide-media"),s=u(n,".ginner-container"),l=e.querySelector(".gslide-description");i>769&&(n=s),h(n,"greset"),v(n,"translate3d(0, 0, 0)"),a(t,{onElement:n,once:!0,withCallback:function(e,t){d(n,"greset")}}),n.style.opacity="",l&&(l.style.opacity="")}function B(e){if(e.events.hasOwnProperty("touch"))return!1;var t,i,n,s=y(),l=s.width,o=s.height,r=!1,a=null,g=null,f=null,p=!1,m=1,x=1,b=!1,S=!1,w=null,T=null,C=null,k=null,E=0,A=0,L=!1,I=!1,O={},P={},M=0,z=0,X=document.getElementById("glightbox-slider"),Y=document.querySelector(".goverlay"),q=new _(X,{touchStart:function(t){if(r=!0,(c(t.targetTouches[0].target,"ginner-container")||u(t.targetTouches[0].target,".gslide-desc")||"a"==t.targetTouches[0].target.nodeName.toLowerCase())&&(r=!1),u(t.targetTouches[0].target,".gslide-inline")&&!c(t.targetTouches[0].target.parentNode,"gslide-inline")&&(r=!1),r){if(P=t.targetTouches[0],O.pageX=t.targetTouches[0].pageX,O.pageY=t.targetTouches[0].pageY,M=t.targetTouches[0].clientX,z=t.targetTouches[0].clientY,a=e.activeSlide,g=a.querySelector(".gslide-media"),n=a.querySelector(".gslide-inline"),f=null,c(g,"gslide-image")&&(f=g.querySelector("img")),(window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth)>769&&(g=a.querySelector(".ginner-container")),d(Y,"greset"),t.pageX>20&&t.pageXo){var a=O.pageX-P.pageX;if(Math.abs(a)<=13)return!1}p=!0;var h,d=s.targetTouches[0].clientX,c=s.targetTouches[0].clientY,u=M-d,m=z-c;if(Math.abs(u)>Math.abs(m)?(L=!1,I=!0):(I=!1,L=!0),t=P.pageX-O.pageX,E=100*t/l,i=P.pageY-O.pageY,A=100*i/o,L&&f&&(h=1-Math.abs(i)/o,Y.style.opacity=h,e.settings.touchFollowAxis&&(E=0)),I&&(h=1-Math.abs(t)/l,g.style.opacity=h,e.settings.touchFollowAxis&&(A=0)),!f)return v(g,"translate3d(".concat(E,"%, 0, 0)"));v(g,"translate3d(".concat(E,"%, ").concat(A,"%, 0)"))}},touchEnd:function(){if(r){if(p=!1,S||b)return C=w,void(k=T);var t=Math.abs(parseInt(A)),i=Math.abs(parseInt(E));if(!(t>29&&f))return t<29&&i<25?(h(Y,"greset"),Y.style.opacity=1,W(g)):void 0;e.close()}},multipointEnd:function(){setTimeout((function(){b=!1}),50)},multipointStart:function(){b=!0,m=x||1},pinch:function(e){if(!f||p)return!1;b=!0,f.scaleX=f.scaleY=m*e.zoom;var t=m*e.zoom;if(S=!0,t<=1)return S=!1,t=1,k=null,C=null,w=null,T=null,void f.setAttribute("style","");t>4.5&&(t=4.5),f.style.transform="scale3d(".concat(t,", ").concat(t,", 1)"),x=t},pressMove:function(e){if(S&&!b){var t=P.pageX-O.pageX,i=P.pageY-O.pageY;C&&(t+=C),k&&(i+=k),w=t,T=i;var n="translate3d(".concat(t,"px, ").concat(i,"px, 0)");x&&(n+=" scale3d(".concat(x,", ").concat(x,", 1)")),v(f,n)}},swipe:function(t){if(!S)if(b)b=!1;else{if("Left"==t.direction){if(e.index==e.elements.length-1)return W(g);e.nextSlide()}if("Right"==t.direction){if(0==e.index)return W(g);e.prevSlide()}}}});e.events.touch=q}var H=function(){function e(i,n){var s=this,l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(t(this,e),this.img=i,this.slide=n,this.onclose=l,this.img.setZoomEvents)return!1;this.active=!1,this.zoomedIn=!1,this.dragging=!1,this.currentX=null,this.currentY=null,this.initialX=null,this.initialY=null,this.xOffset=0,this.yOffset=0,this.img.addEventListener("mousedown",(function(e){return s.dragStart(e)}),!1),this.img.addEventListener("mouseup",(function(e){return s.dragEnd(e)}),!1),this.img.addEventListener("mousemove",(function(e){return s.drag(e)}),!1),this.img.addEventListener("click",(function(e){return s.slide.classList.contains("dragging-nav")?(s.zoomOut(),!1):s.zoomedIn?void(s.zoomedIn&&!s.dragging&&s.zoomOut()):s.zoomIn()}),!1),this.img.setZoomEvents=!0}return n(e,[{key:"zoomIn",value:function(){var e=this.widowWidth();if(!(this.zoomedIn||e<=768)){var t=this.img;if(t.setAttribute("data-style",t.getAttribute("style")),t.style.maxWidth=t.naturalWidth+"px",t.style.maxHeight=t.naturalHeight+"px",t.naturalWidth>e){var i=e/2-t.naturalWidth/2;this.setTranslate(this.img.parentNode,i,0)}this.slide.classList.add("zoomed"),this.zoomedIn=!0}}},{key:"zoomOut",value:function(){this.img.parentNode.setAttribute("style",""),this.img.setAttribute("style",this.img.getAttribute("data-style")),this.slide.classList.remove("zoomed"),this.zoomedIn=!1,this.currentX=null,this.currentY=null,this.initialX=null,this.initialY=null,this.xOffset=0,this.yOffset=0,this.onclose&&"function"==typeof this.onclose&&this.onclose()}},{key:"dragStart",value:function(e){e.preventDefault(),this.zoomedIn?("touchstart"===e.type?(this.initialX=e.touches[0].clientX-this.xOffset,this.initialY=e.touches[0].clientY-this.yOffset):(this.initialX=e.clientX-this.xOffset,this.initialY=e.clientY-this.yOffset),e.target===this.img&&(this.active=!0,this.img.classList.add("dragging"))):this.active=!1}},{key:"dragEnd",value:function(e){var t=this;e.preventDefault(),this.initialX=this.currentX,this.initialY=this.currentY,this.active=!1,setTimeout((function(){t.dragging=!1,t.img.isDragging=!1,t.img.classList.remove("dragging")}),100)}},{key:"drag",value:function(e){this.active&&(e.preventDefault(),"touchmove"===e.type?(this.currentX=e.touches[0].clientX-this.initialX,this.currentY=e.touches[0].clientY-this.initialY):(this.currentX=e.clientX-this.initialX,this.currentY=e.clientY-this.initialY),this.xOffset=this.currentX,this.yOffset=this.currentY,this.img.isDragging=!0,this.dragging=!0,this.setTranslate(this.img,this.currentX,this.currentY))}},{key:"onMove",value:function(e){if(this.zoomedIn){var t=e.clientX-this.img.naturalWidth/2,i=e.clientY-this.img.naturalHeight/2;this.setTranslate(this.img,t,i)}}},{key:"setTranslate",value:function(e,t,i){e.style.transform="translate3d("+t+"px, "+i+"px, 0)"}},{key:"widowWidth",value:function(){return window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth}}]),e}(),V=function(){function e(){var i=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e);var s=n.dragEl,l=n.toleranceX,o=void 0===l?40:l,r=n.toleranceY,a=void 0===r?65:r,h=n.slide,d=void 0===h?null:h,c=n.instance,u=void 0===c?null:c;this.el=s,this.active=!1,this.dragging=!1,this.currentX=null,this.currentY=null,this.initialX=null,this.initialY=null,this.xOffset=0,this.yOffset=0,this.direction=null,this.lastDirection=null,this.toleranceX=o,this.toleranceY=a,this.toleranceReached=!1,this.dragContainer=this.el,this.slide=d,this.instance=u,this.el.addEventListener("mousedown",(function(e){return i.dragStart(e)}),!1),this.el.addEventListener("mouseup",(function(e){return i.dragEnd(e)}),!1),this.el.addEventListener("mousemove",(function(e){return i.drag(e)}),!1)}return n(e,[{key:"dragStart",value:function(e){if(this.slide.classList.contains("zoomed"))this.active=!1;else{"touchstart"===e.type?(this.initialX=e.touches[0].clientX-this.xOffset,this.initialY=e.touches[0].clientY-this.yOffset):(this.initialX=e.clientX-this.xOffset,this.initialY=e.clientY-this.yOffset);var t=e.target.nodeName.toLowerCase();e.target.classList.contains("nodrag")||u(e.target,".nodrag")||-1!==["input","select","textarea","button","a"].indexOf(t)?this.active=!1:(e.preventDefault(),(e.target===this.el||"img"!==t&&u(e.target,".gslide-inline"))&&(this.active=!0,this.el.classList.add("dragging"),this.dragContainer=u(e.target,".ginner-container")))}}},{key:"dragEnd",value:function(e){var t=this;e&&e.preventDefault(),this.initialX=0,this.initialY=0,this.currentX=null,this.currentY=null,this.initialX=null,this.initialY=null,this.xOffset=0,this.yOffset=0,this.active=!1,this.doSlideChange&&(this.instance.preventOutsideClick=!0,"right"==this.doSlideChange&&this.instance.prevSlide(),"left"==this.doSlideChange&&this.instance.nextSlide()),this.doSlideClose&&this.instance.close(),this.toleranceReached||this.setTranslate(this.dragContainer,0,0,!0),setTimeout((function(){t.instance.preventOutsideClick=!1,t.toleranceReached=!1,t.lastDirection=null,t.dragging=!1,t.el.isDragging=!1,t.el.classList.remove("dragging"),t.slide.classList.remove("dragging-nav"),t.dragContainer.style.transform="",t.dragContainer.style.transition=""}),100)}},{key:"drag",value:function(e){if(this.active){e.preventDefault(),this.slide.classList.add("dragging-nav"),"touchmove"===e.type?(this.currentX=e.touches[0].clientX-this.initialX,this.currentY=e.touches[0].clientY-this.initialY):(this.currentX=e.clientX-this.initialX,this.currentY=e.clientY-this.initialY),this.xOffset=this.currentX,this.yOffset=this.currentY,this.el.isDragging=!0,this.dragging=!0,this.doSlideChange=!1,this.doSlideClose=!1;var t=Math.abs(this.currentX),i=Math.abs(this.currentY);if(t>0&&t>=Math.abs(this.currentY)&&(!this.lastDirection||"x"==this.lastDirection)){this.yOffset=0,this.lastDirection="x",this.setTranslate(this.dragContainer,this.currentX,0);var n=this.shouldChange();if(!this.instance.settings.dragAutoSnap&&n&&(this.doSlideChange=n),this.instance.settings.dragAutoSnap&&n)return this.instance.preventOutsideClick=!0,this.toleranceReached=!0,this.active=!1,this.instance.preventOutsideClick=!0,this.dragEnd(null),"right"==n&&this.instance.prevSlide(),void("left"==n&&this.instance.nextSlide())}if(this.toleranceY>0&&i>0&&i>=t&&(!this.lastDirection||"y"==this.lastDirection)){this.xOffset=0,this.lastDirection="y",this.setTranslate(this.dragContainer,0,this.currentY);var s=this.shouldClose();return!this.instance.settings.dragAutoSnap&&s&&(this.doSlideClose=!0),void(this.instance.settings.dragAutoSnap&&s&&this.instance.close())}}}},{key:"shouldChange",value:function(){var e=!1;if(Math.abs(this.currentX)>=this.toleranceX){var t=this.currentX>0?"right":"left";("left"==t&&this.slide!==this.slide.parentNode.lastChild||"right"==t&&this.slide!==this.slide.parentNode.firstChild)&&(e=t)}return e}},{key:"shouldClose",value:function(){var e=!1;return Math.abs(this.currentY)>=this.toleranceY&&(e=!0),e}},{key:"setTranslate",value:function(e,t,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];e.style.transition=n?"all .2s ease":"",e.style.transform="translate3d(".concat(t,"px, ").concat(i,"px, 0)")}}]),e}();function j(e,t,i,n){var s=e.querySelector(".gslide-media"),l=new Image,o="gSlideTitle_"+i,r="gSlideDesc_"+i;l.addEventListener("load",(function(){T(n)&&n()}),!1),l.src=t.href,""!=t.sizes&&""!=t.srcset&&(l.sizes=t.sizes,l.srcset=t.srcset),l.alt="",I(t.alt)||""===t.alt||(l.alt=t.alt),""!==t.title&&l.setAttribute("aria-labelledby",o),""!==t.description&&l.setAttribute("aria-describedby",r),t.hasOwnProperty("_hasCustomWidth")&&t._hasCustomWidth&&(l.style.width=t.width),t.hasOwnProperty("_hasCustomHeight")&&t._hasCustomHeight&&(l.style.height=t.height),s.insertBefore(l,s.firstChild)}function F(e,t,i,n){var s=this,l=e.querySelector(".ginner-container"),o="gvideo"+i,r=e.querySelector(".gslide-media"),a=this.getAllPlayers();h(l,"gvideo-container"),r.insertBefore(m('
'),r.firstChild);var d=e.querySelector(".gvideo-wrapper");S(this.settings.plyr.css,"Plyr");var c=t.href,u=null==t?void 0:t.videoProvider,g=!1;r.style.maxWidth=t.width,S(this.settings.plyr.js,"Plyr",(function(){if(!u&&c.match(/vimeo\.com\/([0-9]*)/)&&(u="vimeo"),!u&&(c.match(/(youtube\.com|youtube-nocookie\.com)\/watch\?v=([a-zA-Z0-9\-_]+)/)||c.match(/youtu\.be\/([a-zA-Z0-9\-_]+)/)||c.match(/(youtube\.com|youtube-nocookie\.com)\/embed\/([a-zA-Z0-9\-_]+)/))&&(u="youtube"),"local"===u||!u){u="local";var l='")}var r=g||m('
'));h(d,"".concat(u,"-video gvideo")),d.appendChild(r),d.setAttribute("data-id",o),d.setAttribute("data-index",i);var v=O(s.settings.plyr,"config")?s.settings.plyr.config:{},f=new Plyr("#"+o,v);f.on("ready",(function(e){a[o]=e.detail.plyr,T(n)&&n()})),b((function(){return e.querySelector("iframe")&&"true"==e.querySelector("iframe").dataset.ready}),(function(){s.resize(e)})),f.on("enterfullscreen",R),f.on("exitfullscreen",R)}))}function R(e){var t=u(e.target,".gslide-media");"enterfullscreen"===e.type&&h(t,"fullscreen"),"exitfullscreen"===e.type&&d(t,"fullscreen")}function G(e,t,i,n){var s,l=this,o=e.querySelector(".gslide-media"),r=!(!O(t,"href")||!t.href)&&t.href.split("#").pop().trim(),d=!(!O(t,"content")||!t.content)&&t.content;if(d&&(C(d)&&(s=m('
'.concat(d,"
"))),k(d))){"none"==d.style.display&&(d.style.display="block");var c=document.createElement("div");c.className="ginlined-content",c.appendChild(d),s=c}if(r){var u=document.getElementById(r);if(!u)return!1;var g=u.cloneNode(!0);g.style.height=t.height,g.style.maxWidth=t.width,h(g,"ginlined-content"),s=g}if(!s)return console.error("Unable to append inline slide content",t),!1;o.style.height=t.height,o.style.width=t.width,o.appendChild(s),this.events["inlineclose"+r]=a("click",{onElement:o.querySelectorAll(".gtrigger-close"),withCallback:function(e){e.preventDefault(),l.close()}}),T(n)&&n()}function Z(e,t,i,n){var s=e.querySelector(".gslide-media"),l=function(e){var t=e.url,i=e.allow,n=e.callback,s=e.appendTo,l=document.createElement("iframe");return l.className="vimeo-video gvideo",l.src=t,l.style.width="100%",l.style.height="100%",i&&l.setAttribute("allow",i),l.onload=function(){l.onload=null,h(l,"node-ready"),T(n)&&n()},s&&s.appendChild(l),l}({url:t.href,callback:n});s.parentNode.style.maxWidth=t.width,s.parentNode.style.height=t.height,s.appendChild(l)}var U=function(){function e(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e),this.defaults={href:"",sizes:"",srcset:"",title:"",type:"",videoProvider:"",description:"",alt:"",descPosition:"bottom",effect:"",width:"",height:"",content:!1,zoomable:!0,draggable:!0},L(i)&&(this.defaults=l(this.defaults,i))}return n(e,[{key:"sourceType",value:function(e){var t=e;if(null!==(e=e.toLowerCase()).match(/\.(jpeg|jpg|jpe|gif|png|apn|webp|avif|svg)/))return"image";if(e.match(/(youtube\.com|youtube-nocookie\.com)\/watch\?v=([a-zA-Z0-9\-_]+)/)||e.match(/youtu\.be\/([a-zA-Z0-9\-_]+)/)||e.match(/(youtube\.com|youtube-nocookie\.com)\/embed\/([a-zA-Z0-9\-_]+)/))return"video";if(e.match(/vimeo\.com\/([0-9]*)/))return"video";if(null!==e.match(/\.(mp4|ogg|webm|mov)/))return"video";if(null!==e.match(/\.(mp3|wav|wma|aac|ogg)/))return"audio";if(e.indexOf("#")>-1&&""!==t.split("#").pop().trim())return"inline";return e.indexOf("goajax=true")>-1?"ajax":"external"}},{key:"parseConfig",value:function(e,t){var i=this,n=l({descPosition:t.descPosition},this.defaults);if(L(e)&&!k(e)){O(e,"type")||(O(e,"content")&&e.content?e.type="inline":O(e,"href")&&(e.type=this.sourceType(e.href)));var s=l(n,e);return this.setSize(s,t),s}var r="",a=e.getAttribute("data-glightbox"),h=e.nodeName.toLowerCase();if("a"===h&&(r=e.href),"img"===h&&(r=e.src,n.alt=e.alt),n.href=r,o(n,(function(s,l){O(t,l)&&"width"!==l&&(n[l]=t[l]);var o=e.dataset[l];I(o)||(n[l]=i.sanitizeValue(o))})),n.content&&(n.type="inline"),!n.type&&r&&(n.type=this.sourceType(r)),I(a)){if(!n.title&&"a"==h){var d=e.title;I(d)||""===d||(n.title=d)}if(!n.title&&"img"==h){var c=e.alt;I(c)||""===c||(n.title=c)}}else{var u=[];o(n,(function(e,t){u.push(";\\s?"+t)})),u=u.join("\\s?:|"),""!==a.trim()&&o(n,(function(e,t){var s=a,l=new RegExp("s?"+t+"s?:s?(.*?)("+u+"s?:|$)"),o=s.match(l);if(o&&o.length&&o[1]){var r=o[1].trim().replace(/;\s*$/,"");n[t]=i.sanitizeValue(r)}}))}if(n.description&&"."===n.description.substring(0,1)){var g;try{g=document.querySelector(n.description).innerHTML}catch(e){if(!(e instanceof DOMException))throw e}g&&(n.description=g)}if(!n.description){var v=e.querySelector(".glightbox-desc");v&&(n.description=v.innerHTML)}return this.setSize(n,t,e),this.slideConfig=n,n}},{key:"setSize",value:function(e,t){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,n="video"==e.type?this.checkSize(t.videosWidth):this.checkSize(t.width),s=this.checkSize(t.height);return e.width=O(e,"width")&&""!==e.width?this.checkSize(e.width):n,e.height=O(e,"height")&&""!==e.height?this.checkSize(e.height):s,i&&"image"==e.type&&(e._hasCustomWidth=!!i.dataset.width,e._hasCustomHeight=!!i.dataset.height),e}},{key:"checkSize",value:function(e){return M(e)?"".concat(e,"px"):e}},{key:"sanitizeValue",value:function(e){return"true"!==e&&"false"!==e?e:"true"===e}}]),e}(),$=function(){function e(i,n,s){t(this,e),this.element=i,this.instance=n,this.index=s}return n(e,[{key:"setContent",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(c(t,"loaded"))return!1;var n=this.instance.settings,s=this.slideConfig,l=w();T(n.beforeSlideLoad)&&n.beforeSlideLoad({index:this.index,slide:t,player:!1});var o=s.type,r=s.descPosition,a=t.querySelector(".gslide-media"),d=t.querySelector(".gslide-title"),u=t.querySelector(".gslide-desc"),g=t.querySelector(".gdesc-inner"),v=i,f="gSlideTitle_"+this.index,p="gSlideDesc_"+this.index;if(T(n.afterSlideLoad)&&(v=function(){T(i)&&i(),n.afterSlideLoad({index:e.index,slide:t,player:e.instance.getSlidePlayerInstance(e.index)})}),""==s.title&&""==s.description?g&&g.parentNode.parentNode.removeChild(g.parentNode):(d&&""!==s.title?(d.id=f,d.innerHTML=s.title):d.parentNode.removeChild(d),u&&""!==s.description?(u.id=p,l&&n.moreLength>0?(s.smallDescription=this.slideShortDesc(s.description,n.moreLength,n.moreText),u.innerHTML=s.smallDescription,this.descriptionEvents(u,s)):u.innerHTML=s.description):u.parentNode.removeChild(u),h(a.parentNode,"desc-".concat(r)),h(g.parentNode,"description-".concat(r))),h(a,"gslide-".concat(o)),h(t,"loaded"),"video"!==o){if("external"!==o)return"inline"===o?(G.apply(this.instance,[t,s,this.index,v]),void(s.draggable&&new V({dragEl:t.querySelector(".gslide-inline"),toleranceX:n.dragToleranceX,toleranceY:n.dragToleranceY,slide:t,instance:this.instance}))):void("image"!==o?T(v)&&v():j(t,s,this.index,(function(){var i=t.querySelector("img");s.draggable&&new V({dragEl:i,toleranceX:n.dragToleranceX,toleranceY:n.dragToleranceY,slide:t,instance:e.instance}),s.zoomable&&i.naturalWidth>i.offsetWidth&&(h(i,"zoomable"),new H(i,t,(function(){e.instance.resize()}))),T(v)&&v()})));Z.apply(this,[t,s,this.index,v])}else F.apply(this.instance,[t,s,this.index,v])}},{key:"slideShortDesc",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:50,i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=document.createElement("div");n.innerHTML=e;var s=n.innerText,l=i;if((e=s.trim()).length<=t)return e;var o=e.substr(0,t-1);return l?(n=null,o+'... '+i+""):o}},{key:"descriptionEvents",value:function(e,t){var i=this,n=e.querySelector(".desc-more");if(!n)return!1;a("click",{onElement:n,withCallback:function(e,n){e.preventDefault();var s=document.body,l=u(n,".gslide-desc");if(!l)return!1;l.innerHTML=t.description,h(s,"gdesc-open");var o=a("click",{onElement:[s,u(l,".gslide-description")],withCallback:function(e,n){"a"!==e.target.nodeName.toLowerCase()&&(d(s,"gdesc-open"),h(s,"gdesc-closed"),l.innerHTML=t.smallDescription,i.descriptionEvents(l,t),setTimeout((function(){d(s,"gdesc-closed")}),400),o.destroy())}})}})}},{key:"create",value:function(){return m(this.instance.settings.slideHTML)}},{key:"getConfig",value:function(){k(this.element)||this.element.hasOwnProperty("draggable")||(this.element.draggable=this.instance.settings.draggable);var e=new U(this.instance.settings.slideExtraAttributes);return this.slideConfig=e.parseConfig(this.element,this.instance.settings),this.slideConfig}}]),e}(),J=w(),K=null!==w()||void 0!==document.createTouch||"ontouchstart"in window||"onmsgesturechange"in window||navigator.msMaxTouchPoints,Q=document.getElementsByTagName("html")[0],ee={selector:".glightbox",elements:null,skin:"clean",theme:"clean",closeButton:!0,startAt:null,autoplayVideos:!0,autofocusVideos:!0,descPosition:"bottom",width:"900px",height:"506px",videosWidth:"960px",beforeSlideChange:null,afterSlideChange:null,beforeSlideLoad:null,afterSlideLoad:null,slideInserted:null,slideRemoved:null,slideExtraAttributes:null,onOpen:null,onClose:null,loop:!1,zoomable:!0,draggable:!0,dragAutoSnap:!1,dragToleranceX:40,dragToleranceY:65,preload:!0,oneSlidePerOpen:!1,touchNavigation:!0,touchFollowAxis:!0,keyboardNavigation:!0,closeOnOutsideClick:!0,plugins:!1,plyr:{css:"https://cdn.plyr.io/3.6.12/plyr.css",js:"https://cdn.plyr.io/3.6.12/plyr.js",config:{ratio:"16:9",fullscreen:{enabled:!0,iosNative:!0},youtube:{noCookie:!0,rel:0,showinfo:0,iv_load_policy:3},vimeo:{byline:!1,portrait:!1,title:!1,transparent:!1}}},openEffect:"zoom",closeEffect:"zoom",slideEffect:"slide",moreText:"See more",moreLength:60,cssEfects:{fade:{in:"fadeIn",out:"fadeOut"},zoom:{in:"zoomIn",out:"zoomOut"},slide:{in:"slideInRight",out:"slideOutLeft"},slideBack:{in:"slideInLeft",out:"slideOutRight"},none:{in:"none",out:"none"}},svg:{close:'',next:' ',prev:''},slideHTML:'
\n
\n
\n
\n
\n
\n
\n

\n
\n
\n
\n
\n
\n
',lightboxHTML:''},te=function(){function e(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e),this.customOptions=i,this.settings=l(ee,i),this.effectsClasses=this.getAnimationClasses(),this.videoPlayers={},this.apiEvents=[],this.fullElementsList=!1}return n(e,[{key:"init",value:function(){var e=this,t=this.getSelector();t&&(this.baseEvents=a("click",{onElement:t,withCallback:function(t,i){t.preventDefault(),e.open(i)}})),this.elements=this.getElements()}},{key:"open",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(0===this.elements.length)return!1;this.activeSlide=null,this.prevActiveSlideIndex=null,this.prevActiveSlide=null;var i=M(t)?t:this.settings.startAt;if(k(e)){var n=e.getAttribute("data-gallery");n&&(this.fullElementsList=this.elements,this.elements=this.getGalleryElements(this.elements,n)),I(i)&&(i=this.getElementIndex(e))<0&&(i=0)}M(i)||(i=0),this.build(),g(this.overlay,"none"===this.settings.openEffect?"none":this.settings.cssEfects.fade.in);var s=document.body,l=window.innerWidth-document.documentElement.clientWidth;if(l>0){var o=document.createElement("style");o.type="text/css",o.className="gcss-styles",o.innerText=".gscrollbar-fixer {margin-right: ".concat(l,"px}"),document.head.appendChild(o),h(s,"gscrollbar-fixer")}h(s,"glightbox-open"),h(Q,"glightbox-open"),J&&(h(document.body,"glightbox-mobile"),this.settings.slideEffect="slide"),this.showSlide(i,!0),1===this.elements.length?(h(this.prevButton,"glightbox-button-hidden"),h(this.nextButton,"glightbox-button-hidden")):(d(this.prevButton,"glightbox-button-hidden"),d(this.nextButton,"glightbox-button-hidden")),this.lightboxOpen=!0,this.trigger("open"),T(this.settings.onOpen)&&this.settings.onOpen(),K&&this.settings.touchNavigation&&B(this),this.settings.keyboardNavigation&&X(this)}},{key:"openAt",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;this.open(null,e)}},{key:"showSlide",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];f(this.loader),this.index=parseInt(t);var n=this.slidesContainer.querySelector(".current");n&&d(n,"current"),this.slideAnimateOut();var s=this.slidesContainer.querySelectorAll(".gslide")[t];if(c(s,"loaded"))this.slideAnimateIn(s,i),p(this.loader);else{f(this.loader);var l=this.elements[t],o={index:this.index,slide:s,slideNode:s,slideConfig:l.slideConfig,slideIndex:this.index,trigger:l.node,player:null};this.trigger("slide_before_load",o),l.instance.setContent(s,(function(){p(e.loader),e.resize(),e.slideAnimateIn(s,i),e.trigger("slide_after_load",o)}))}this.slideDescription=s.querySelector(".gslide-description"),this.slideDescriptionContained=this.slideDescription&&c(this.slideDescription.parentNode,"gslide-media"),this.settings.preload&&(this.preloadSlide(t+1),this.preloadSlide(t-1)),this.updateNavigationClasses(),this.activeSlide=s}},{key:"preloadSlide",value:function(e){var t=this;if(e<0||e>this.elements.length-1)return!1;if(I(this.elements[e]))return!1;var i=this.slidesContainer.querySelectorAll(".gslide")[e];if(c(i,"loaded"))return!1;var n=this.elements[e],s=n.type,l={index:e,slide:i,slideNode:i,slideConfig:n.slideConfig,slideIndex:e,trigger:n.node,player:null};this.trigger("slide_before_load",l),"video"===s||"external"===s?setTimeout((function(){n.instance.setContent(i,(function(){t.trigger("slide_after_load",l)}))}),200):n.instance.setContent(i,(function(){t.trigger("slide_after_load",l)}))}},{key:"prevSlide",value:function(){this.goToSlide(this.index-1)}},{key:"nextSlide",value:function(){this.goToSlide(this.index+1)}},{key:"goToSlide",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(this.prevActiveSlide=this.activeSlide,this.prevActiveSlideIndex=this.index,!this.loop()&&(e<0||e>this.elements.length-1))return!1;e<0?e=this.elements.length-1:e>=this.elements.length&&(e=0),this.showSlide(e)}},{key:"insertSlide",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1;t<0&&(t=this.elements.length);var i=new $(e,this,t),n=i.getConfig(),s=l({},n),o=i.create(),r=this.elements.length-1;s.index=t,s.node=!1,s.instance=i,s.slideConfig=n,this.elements.splice(t,0,s);var a=null,h=null;if(this.slidesContainer){if(t>r)this.slidesContainer.appendChild(o);else{var d=this.slidesContainer.querySelectorAll(".gslide")[t];this.slidesContainer.insertBefore(o,d)}(this.settings.preload&&0==this.index&&0==t||this.index-1==t||this.index+1==t)&&this.preloadSlide(t),0===this.index&&0===t&&(this.index=1),this.updateNavigationClasses(),a=this.slidesContainer.querySelectorAll(".gslide")[t],h=this.getSlidePlayerInstance(t),s.slideNode=a}this.trigger("slide_inserted",{index:t,slide:a,slideNode:a,slideConfig:n,slideIndex:t,trigger:null,player:h}),T(this.settings.slideInserted)&&this.settings.slideInserted({index:t,slide:a,player:h})}},{key:"removeSlide",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:-1;if(e<0||e>this.elements.length-1)return!1;var t=this.slidesContainer&&this.slidesContainer.querySelectorAll(".gslide")[e];t&&(this.getActiveSlideIndex()==e&&(e==this.elements.length-1?this.prevSlide():this.nextSlide()),t.parentNode.removeChild(t)),this.elements.splice(e,1),this.trigger("slide_removed",e),T(this.settings.slideRemoved)&&this.settings.slideRemoved(e)}},{key:"slideAnimateIn",value:function(e,t){var i=this,n=e.querySelector(".gslide-media"),s=e.querySelector(".gslide-description"),l={index:this.prevActiveSlideIndex,slide:this.prevActiveSlide,slideNode:this.prevActiveSlide,slideIndex:this.prevActiveSlide,slideConfig:I(this.prevActiveSlideIndex)?null:this.elements[this.prevActiveSlideIndex].slideConfig,trigger:I(this.prevActiveSlideIndex)?null:this.elements[this.prevActiveSlideIndex].node,player:this.getSlidePlayerInstance(this.prevActiveSlideIndex)},o={index:this.index,slide:this.activeSlide,slideNode:this.activeSlide,slideConfig:this.elements[this.index].slideConfig,slideIndex:this.index,trigger:this.elements[this.index].node,player:this.getSlidePlayerInstance(this.index)};if(n.offsetWidth>0&&s&&(p(s),s.style.display=""),d(e,this.effectsClasses),t)g(e,this.settings.cssEfects[this.settings.openEffect].in,(function(){i.settings.autoplayVideos&&i.slidePlayerPlay(e),i.trigger("slide_changed",{prev:l,current:o}),T(i.settings.afterSlideChange)&&i.settings.afterSlideChange.apply(i,[l,o])}));else{var r=this.settings.slideEffect,a="none"!==r?this.settings.cssEfects[r].in:r;this.prevActiveSlideIndex>this.index&&"slide"==this.settings.slideEffect&&(a=this.settings.cssEfects.slideBack.in),g(e,a,(function(){i.settings.autoplayVideos&&i.slidePlayerPlay(e),i.trigger("slide_changed",{prev:l,current:o}),T(i.settings.afterSlideChange)&&i.settings.afterSlideChange.apply(i,[l,o])}))}setTimeout((function(){i.resize(e)}),100),h(e,"current")}},{key:"slideAnimateOut",value:function(){if(!this.prevActiveSlide)return!1;var e=this.prevActiveSlide;d(e,this.effectsClasses),h(e,"prev");var t=this.settings.slideEffect,i="none"!==t?this.settings.cssEfects[t].out:t;this.slidePlayerPause(e),this.trigger("slide_before_change",{prev:{index:this.prevActiveSlideIndex,slide:this.prevActiveSlide,slideNode:this.prevActiveSlide,slideIndex:this.prevActiveSlideIndex,slideConfig:I(this.prevActiveSlideIndex)?null:this.elements[this.prevActiveSlideIndex].slideConfig,trigger:I(this.prevActiveSlideIndex)?null:this.elements[this.prevActiveSlideIndex].node,player:this.getSlidePlayerInstance(this.prevActiveSlideIndex)},current:{index:this.index,slide:this.activeSlide,slideNode:this.activeSlide,slideIndex:this.index,slideConfig:this.elements[this.index].slideConfig,trigger:this.elements[this.index].node,player:this.getSlidePlayerInstance(this.index)}}),T(this.settings.beforeSlideChange)&&this.settings.beforeSlideChange.apply(this,[{index:this.prevActiveSlideIndex,slide:this.prevActiveSlide,player:this.getSlidePlayerInstance(this.prevActiveSlideIndex)},{index:this.index,slide:this.activeSlide,player:this.getSlidePlayerInstance(this.index)}]),this.prevActiveSlideIndex>this.index&&"slide"==this.settings.slideEffect&&(i=this.settings.cssEfects.slideBack.out),g(e,i,(function(){var t=e.querySelector(".ginner-container"),i=e.querySelector(".gslide-media"),n=e.querySelector(".gslide-description");t.style.transform="",i.style.transform="",d(i,"greset"),i.style.opacity="",n&&(n.style.opacity=""),d(e,"prev")}))}},{key:"getAllPlayers",value:function(){return this.videoPlayers}},{key:"getSlidePlayerInstance",value:function(e){var t="gvideo"+e,i=this.getAllPlayers();return!(!O(i,t)||!i[t])&&i[t]}},{key:"stopSlideVideo",value:function(e){if(k(e)){var t=e.querySelector(".gvideo-wrapper");t&&(e=t.getAttribute("data-index"))}console.log("stopSlideVideo is deprecated, use slidePlayerPause");var i=this.getSlidePlayerInstance(e);i&&i.playing&&i.pause()}},{key:"slidePlayerPause",value:function(e){if(k(e)){var t=e.querySelector(".gvideo-wrapper");t&&(e=t.getAttribute("data-index"))}var i=this.getSlidePlayerInstance(e);i&&i.playing&&i.pause()}},{key:"playSlideVideo",value:function(e){if(k(e)){var t=e.querySelector(".gvideo-wrapper");t&&(e=t.getAttribute("data-index"))}console.log("playSlideVideo is deprecated, use slidePlayerPlay");var i=this.getSlidePlayerInstance(e);i&&!i.playing&&i.play()}},{key:"slidePlayerPlay",value:function(e){var t;if(!J||null!==(t=this.settings.plyr.config)&&void 0!==t&&t.muted){if(k(e)){var i=e.querySelector(".gvideo-wrapper");i&&(e=i.getAttribute("data-index"))}var n=this.getSlidePlayerInstance(e);n&&!n.playing&&(n.play(),this.settings.autofocusVideos&&n.elements.container.focus())}}},{key:"setElements",value:function(e){var t=this;this.settings.elements=!1;var i=[];e&&e.length&&o(e,(function(e,n){var s=new $(e,t,n),o=s.getConfig(),r=l({},o);r.slideConfig=o,r.instance=s,r.index=n,i.push(r)})),this.elements=i,this.lightboxOpen&&(this.slidesContainer.innerHTML="",this.elements.length&&(o(this.elements,(function(){var e=m(t.settings.slideHTML);t.slidesContainer.appendChild(e)})),this.showSlide(0,!0)))}},{key:"getElementIndex",value:function(e){var t=!1;return o(this.elements,(function(i,n){if(O(i,"node")&&i.node==e)return t=n,!0})),t}},{key:"getElements",value:function(){var e=this,t=[];this.elements=this.elements?this.elements:[],!I(this.settings.elements)&&E(this.settings.elements)&&this.settings.elements.length&&o(this.settings.elements,(function(i,n){var s=new $(i,e,n),o=s.getConfig(),r=l({},o);r.node=!1,r.index=n,r.instance=s,r.slideConfig=o,t.push(r)}));var i=!1;return this.getSelector()&&(i=document.querySelectorAll(this.getSelector())),i?(o(i,(function(i,n){var s=new $(i,e,n),o=s.getConfig(),r=l({},o);r.node=i,r.index=n,r.instance=s,r.slideConfig=o,r.gallery=i.getAttribute("data-gallery"),t.push(r)})),t):t}},{key:"getGalleryElements",value:function(e,t){return e.filter((function(e){return e.gallery==t}))}},{key:"getSelector",value:function(){return!this.settings.elements&&(this.settings.selector&&"data-"==this.settings.selector.substring(0,5)?"*[".concat(this.settings.selector,"]"):this.settings.selector)}},{key:"getActiveSlide",value:function(){return this.slidesContainer.querySelectorAll(".gslide")[this.index]}},{key:"getActiveSlideIndex",value:function(){return this.index}},{key:"getAnimationClasses",value:function(){var e=[];for(var t in this.settings.cssEfects)if(this.settings.cssEfects.hasOwnProperty(t)){var i=this.settings.cssEfects[t];e.push("g".concat(i.in)),e.push("g".concat(i.out))}return e.join(" ")}},{key:"build",value:function(){var e=this;if(this.built)return!1;var t=document.body.childNodes,i=[];o(t,(function(e){e.parentNode==document.body&&"#"!==e.nodeName.charAt(0)&&e.hasAttribute&&!e.hasAttribute("aria-hidden")&&(i.push(e),e.setAttribute("aria-hidden","true"))}));var n=O(this.settings.svg,"next")?this.settings.svg.next:"",s=O(this.settings.svg,"prev")?this.settings.svg.prev:"",l=O(this.settings.svg,"close")?this.settings.svg.close:"",r=this.settings.lightboxHTML;r=m(r=(r=(r=r.replace(/{nextSVG}/g,n)).replace(/{prevSVG}/g,s)).replace(/{closeSVG}/g,l)),document.body.appendChild(r);var d=document.getElementById("glightbox-body");this.modal=d;var g=d.querySelector(".gclose");this.prevButton=d.querySelector(".gprev"),this.nextButton=d.querySelector(".gnext"),this.overlay=d.querySelector(".goverlay"),this.loader=d.querySelector(".gloader"),this.slidesContainer=document.getElementById("glightbox-slider"),this.bodyHiddenChildElms=i,this.events={},h(this.modal,"glightbox-"+this.settings.skin),this.settings.closeButton&&g&&(this.events.close=a("click",{onElement:g,withCallback:function(t,i){t.preventDefault(),e.close()}})),g&&!this.settings.closeButton&&g.parentNode.removeChild(g),this.nextButton&&(this.events.next=a("click",{onElement:this.nextButton,withCallback:function(t,i){t.preventDefault(),e.nextSlide()}})),this.prevButton&&(this.events.prev=a("click",{onElement:this.prevButton,withCallback:function(t,i){t.preventDefault(),e.prevSlide()}})),this.settings.closeOnOutsideClick&&(this.events.outClose=a("click",{onElement:d,withCallback:function(t,i){e.preventOutsideClick||c(document.body,"glightbox-mobile")||u(t.target,".ginner-container")||u(t.target,".gbtn")||c(t.target,"gnext")||c(t.target,"gprev")||e.close()}})),o(this.elements,(function(t,i){e.slidesContainer.appendChild(t.instance.create()),t.slideNode=e.slidesContainer.querySelectorAll(".gslide")[i]})),K&&h(document.body,"glightbox-touch"),this.events.resize=a("resize",{onElement:window,withCallback:function(){e.resize()}}),this.built=!0}},{key:"resize",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;if((e=e||this.activeSlide)&&!c(e,"zoomed")){var t=y(),i=e.querySelector(".gvideo-wrapper"),n=e.querySelector(".gslide-image"),s=this.slideDescription,l=t.width,o=t.height;if(l<=768?h(document.body,"glightbox-mobile"):d(document.body,"glightbox-mobile"),i||n){var r=!1;if(s&&(c(s,"description-bottom")||c(s,"description-top"))&&!c(s,"gabsolute")&&(r=!0),n)if(l<=768)n.querySelector("img");else if(r){var a=s.offsetHeight,u=n.querySelector("img");u.setAttribute("style","max-height: calc(100vh - ".concat(a,"px)")),s.setAttribute("style","max-width: ".concat(u.offsetWidth,"px;"))}if(i){var g=O(this.settings.plyr.config,"ratio")?this.settings.plyr.config.ratio:"";if(!g){var v=i.clientWidth,f=i.clientHeight,p=v/f;g="".concat(v/p,":").concat(f/p)}var m=g.split(":"),x=this.settings.videosWidth,b=this.settings.videosWidth,S=(b=M(x)||-1!==x.indexOf("px")?parseInt(x):-1!==x.indexOf("vw")?l*parseInt(x)/100:-1!==x.indexOf("vh")?o*parseInt(x)/100:-1!==x.indexOf("%")?l*parseInt(x)/100:parseInt(i.clientWidth))/(parseInt(m[0])/parseInt(m[1]));if(S=Math.floor(S),r&&(o-=s.offsetHeight),b>l||S>o||ob){var w=i.offsetWidth,T=i.offsetHeight,C=o/T,k={width:w*C,height:T*C};i.parentNode.setAttribute("style","max-width: ".concat(k.width,"px")),r&&s.setAttribute("style","max-width: ".concat(k.width,"px;"))}else i.parentNode.style.maxWidth="".concat(x),r&&s.setAttribute("style","max-width: ".concat(x,";"))}}}}},{key:"reload",value:function(){this.init()}},{key:"updateNavigationClasses",value:function(){var e=this.loop();d(this.nextButton,"disabled"),d(this.prevButton,"disabled"),0==this.index&&this.elements.length-1==0?(h(this.prevButton,"disabled"),h(this.nextButton,"disabled")):0!==this.index||e?this.index!==this.elements.length-1||e||h(this.nextButton,"disabled"):h(this.prevButton,"disabled")}},{key:"loop",value:function(){var e=O(this.settings,"loopAtEnd")?this.settings.loopAtEnd:null;return e=O(this.settings,"loop")?this.settings.loop:e,e}},{key:"close",value:function(){var e=this;if(!this.lightboxOpen){if(this.events){for(var t in this.events)this.events.hasOwnProperty(t)&&this.events[t].destroy();this.events=null}return!1}if(this.closing)return!1;this.closing=!0,this.slidePlayerPause(this.activeSlide),this.fullElementsList&&(this.elements=this.fullElementsList),this.bodyHiddenChildElms.length&&o(this.bodyHiddenChildElms,(function(e){e.removeAttribute("aria-hidden")})),h(this.modal,"glightbox-closing"),g(this.overlay,"none"==this.settings.openEffect?"none":this.settings.cssEfects.fade.out),g(this.activeSlide,this.settings.cssEfects[this.settings.closeEffect].out,(function(){if(e.activeSlide=null,e.prevActiveSlideIndex=null,e.prevActiveSlide=null,e.built=!1,e.events){for(var t in e.events)e.events.hasOwnProperty(t)&&e.events[t].destroy();e.events=null}var i=document.body;d(Q,"glightbox-open"),d(i,"glightbox-open touching gdesc-open glightbox-touch glightbox-mobile gscrollbar-fixer"),e.modal.parentNode.removeChild(e.modal),e.trigger("close"),T(e.settings.onClose)&&e.settings.onClose();var n=document.querySelector(".gcss-styles");n&&n.parentNode.removeChild(n),e.lightboxOpen=!1,e.closing=null}))}},{key:"destroy",value:function(){this.close(),this.clearAllEvents(),this.baseEvents&&this.baseEvents.destroy()}},{key:"on",value:function(e,t){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!e||!T(t))throw new TypeError("Event name and callback must be defined");this.apiEvents.push({evt:e,once:i,callback:t})}},{key:"once",value:function(e,t){this.on(e,t,!0)}},{key:"trigger",value:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=[];o(this.apiEvents,(function(t,s){var l=t.evt,o=t.once,r=t.callback;l==e&&(r(i),o&&n.push(s))})),n.length&&o(n,(function(e){return t.apiEvents.splice(e,1)}))}},{key:"clearAllEvents",value:function(){this.apiEvents.splice(0,this.apiEvents.length)}},{key:"version",value:function(){return"3.1.0"}}]),e}();return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=new te(e);return t.init(),t}})); \ No newline at end of file diff --git a/site_libs/quarto-contrib/glightbox/lightbox.css b/site_libs/quarto-contrib/glightbox/lightbox.css new file mode 100644 index 0000000..46432d9 --- /dev/null +++ b/site_libs/quarto-contrib/glightbox/lightbox.css @@ -0,0 +1,26 @@ +body:not(.glightbox-mobile) div.gslide div.gslide-description, +body:not(.glightbox-mobile) div.gslide-description .gslide-title, +body:not(.glightbox-mobile) div.gslide-description .gslide-desc { + color: var(--quarto-body-color); + background-color: var(--quarto-body-bg); +} + +body:not(.glightbox-mobile) div.gslide-media { + background-color: var(--quarto-body-bg); +} + +.goverlay { + background: rgba(0, 0, 0, 0.7); +} + +div.gslide-description .gslide-title { + margin-top: 0.25em; + margin-bottom: 0.25em; + font-weight: 500; + font-family: inherit; +} + +div.gslide-description .gslide-desc { + padding-bottom: 0.5em; + font-family: inherit; +}