{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "Save and load datasets stored in TFRecord file format\n", "=====================================================\n", "\n", "This example demonstrates how to load the data from a stored .tfrecord file and to build a \n", "data generator." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Save Dataset to TFRecord\n", "\n", "At first, a small temporary dataset compounding 5 source cases is created by utilizing the synthetic dataset `DatasetSynthetic`. The conventional beamforming map is included by specifying `sourcemap` as the desired feature. " ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|\u001b[38;2;31;119;180m██████████\u001b[0m| 5/5 [00:02<00:00, 2.08it/s]\n" ] } ], "source": [ "import tensorflow as tf\n", "from acoupipe.datasets.synthetic import DatasetSynthetic\n", "\n", "d1 = DatasetSynthetic() \n", "d1.save_tfrecord(features=[\"sourcemap\",\"loc\",\"f\"], f=2000, split=\"training\", size=5, name=\"/tmp/dataset.tfrecord\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Load Dataset from TFRecord File \n", "\n", "To parse the data from TFRecord files it is usually necessary to write a custom parser function that parses the file sequentially\n", "(see: TFRecord_ documentation for details).\n", "\n", "A potential parser function for the `'sourcemap'` feature can be similar to:\n" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "\n", "def tfrecord_parser(record):\n", " \"\"\" parser for tfrecord datasets with 'csmtriu' feature \"\"\"\n", " parsed = tf.io.parse_single_example(\n", " record, \n", " {\n", " 'sourcemap': tf.io.VarLenFeature(tf.float32),\n", " # and further features ...\n", " }\n", " )\n", " sourcemap = tf.reshape(tf.sparse.to_dense(parsed['sourcemap']),shape=(64,64))\n", " return {'sourcemap': sourcemap} # and further features ..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To ease the data retrieval process, the dataset itself provides a `get_tfrecord_parser` method to obtain a suitable parser function." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "parser = d1.get_tfrecord_parser(features=[\"sourcemap\",\"loc\",\"f\"], f=2000, num=0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "With the corresponding parser, one can load the Dataset with the TensorFlow Dataset API" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiQAAAHFCAYAAADCA+LKAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAACAuElEQVR4nO2deXhV1dX/v+eOGUgCBEigMmlRUHEoiIClOAGiOPFWVBRREKFoFXGoVFujrwWHSnmrBaulWBURq6i0WoQWB6yggGAd6vBTEARCZEpCpjuc/fuDcsvlrAX3cE9yE/L9PM99NCv77rP3PvscdvZe37UsY4wBIYQQQkgG8WW6AYQQQgghXJAQQgghJONwQUIIIYSQjMMFCSGEEEIyDhckhBBCCMk4XJAQQgghJONwQUIIIYSQjMMFCSGEEEIyDhckhBBCCMk4XJA0cp588klYlpX0adu2LU4//XT89a9/zXTzUuIf//gHevfujdzcXFiWhZdffjnTTQLw37Fdv359ppvS6Pnqq68QDoexfPnyJPtdd92FTp06IRAIoGXLlodcf0VFBX71q1/h9NNPR3FxMVq0aIGePXvigQceQG1traN8NBrFPffcgy5duiAcDqN79+545JFHHOXmzZuHH/3oRygqKkI4HEaHDh1w/vnn49133xXbsW3bNtx0002JeouKijB06FDs2LHjoH3Y/znd+7n//vvF8q+88goGDhyI/Px85Obm4rjjjsPjjz9+SGOyfv169frPPffcQdu+91lYtWqV+Pthw4ahS5cuB61nX3bu3ImWLVs2muedNH4CmW4ASY05c+age/fuMMagtLQUjz76KM4//3wsXLgQ559/fqabp2KMwYgRI3D00Udj4cKFyM3NxTHHHJPpZgEAzjvvPCxfvhzt27fPdFMaPbfeeisGDRqEfv36JWyvvPIKfvWrX+HOO+/E0KFDEQ6HD7n+DRs2YMaMGRg1ahQmT56MFi1aYNmyZSgpKcGSJUuwZMkSWJaVKD9x4kQ8/fTT+N///V+ccsopeP3113HTTTehsrISP//5zxPltm/fjtNOOw033XQT2rRpgy1btmD69On40Y9+hH/84x8YOHBgouzmzZsxYMAABAIB/OIXv0C3bt2wbds2vPHGG4hEIin148c//jFuueWWJFunTp0c5e6//37ceeedmDBhAqZMmYJgMIjPPvss6TpuxwQAfvrTn2LkyJFJtm7duqXUdq9p1aoVbr75Ztx2220499xzEQqFMtIO0oQwpFEzZ84cA8CsXLkyyV5dXW3C4bC5/PLLM9Sy1Pj2228NAPPAAw94Vmd1dbWxbduz+siB+fTTTw0As2jRoiT7fffdZwCYrVu3pn2N3bt3m927dzvsDz30kAFgli1blrB9/PHHxrIsM3Xq1KSy48aNM9nZ2Wb79u0HvNauXbtMMBg0o0aNSrJfeOGF5nvf+57ZsWPHIfUBgLn++usPWm7VqlXG5/Md9JlwMybr1q0zAMxDDz3kvuFGf8/s5bzzzjOdO3d2XW9paakJBAJm7ty5h9Qu0rzgkU0TJSsrC6FQCMFgMMkeiURw3333oXv37giHw2jbti2uueYafPfdd0nl5s+fj8GDB6N9+/bIzs5Gjx49cMcdd6Cqqiqp3NVXX40WLVrgs88+w5AhQ5Cbm4v27dsntqFXrFiBH/7wh8jNzcXRRx+NP/3pT4nvlpSU4IgjjgAA/OxnP4NlWUnbvu+88w7OOuss5OXlIScnB/3798err76adP29W8mLFy/GmDFj0LZtW+Tk5KCurg6nn346jj/+eCxfvhz9+/dHdnY2unTpgjlz5gAAXn31VfzgBz9ATk4OevbsiUWLFol173tks7fOlStXYsCAAcjJycGRRx6J+++/H7ZtJ33/k08+weDBg5GTk4O2bdvi+uuvx6uvvgrLsvDmm28e8P6VlJTAsiz861//wiWXXIKCggK0bt0akydPRiwWw+eff45zzjkHeXl56NKlCx588MGk79fW1uKWW27BSSedlPhuv3798MorrziuZVkWbrjhBvz+97/H0UcfjXA4jGOPPTalrXwAmDVrFoqLizFo0KCErUuXLrjrrrsAAEVFRbAsCyUlJSnVJ5Gbm4vc3FyHvU+fPgCAjRs3Jmwvv/wyjDG45pprkspec801qKmpcdzn/cnLy0NWVhYCgf9uEK9fvx4LFy7EuHHj0KpVq0PuRyo8+uijCIfD+OlPf3rAcm7GpKHZO3+lz9VXX50oV1RUhEGDBuGxxx7LWFtJ04ELkiZCPB5HLBZDNBrFt99+i0mTJqGqqippe9a2bVx44YW4//77MXLkSLz66qu4//77sWTJEpx++umoqalJlP3yyy9x7rnnYvbs2Vi0aBEmTZqE559/Xjz+iUajGD58OM477zy88sorGDp0KKZMmYKf//znGD16NMaMGYOXXnoJxxxzDK6++mqsXr0aAHDttddiwYIFAPZsJS9fvhwvvfQSAOCtt97CmWeeifLycsyePRvz5s1DXl4ezj//fMyfP9/RhjFjxiAYDOLpp5/GCy+8kFiIlZaW4pprrsG1116LV155BT179sSYMWNw7733YsqUKbj99tvx4osvokWLFrjooouwefPmg451aWkprrjiClx55ZVYuHBhor/PPPNMosyWLVswcOBAfP7555g1axaeeuopVFZW4oYbbkjldiYYMWIETjzxRLz44osYN24cfvOb3+Dmm2/GRRddhPPOOw8vvfQSzjzzTPzsZz9LjCUA1NXVYceOHbj11lvx8ssvY968efjhD3+I4cOH46mnnnJcZ+HChfjtb3+Le++9Fy+88AI6d+6Myy+/HC+88MJB2/jqq6/iRz/6EXy+/74uXnrpJYwdOxYAsGjRIixfvhzXXnstgD3zMBaLHfQTj8cPeu2lS5cCAI477riE7eOPP0bbtm1RXFycVPaEE05I/H5/4vE4otEo1q9fj5/85CcwxuD6669P/H7ZsmUwxqBDhw64/PLL0aJFC2RlZeH00093+M0ciGeffRbZ2dkIh8Po1atXYnG8L2+//TZ69OiBF198Eccccwz8fj+OOOII3HHHHSkdDUljspf7778foVAIOTk5+OEPf4iFCxem3Hbgv++Z/T9mv6Tw1157LZYvX570ue2228R2nX766fjnP/+JXbt2uWoLaYZkdoOGHIy9W6n7f8LhsJk5c2ZS2Xnz5hkA5sUXX0yyr1y50gBwlN+LbdsmGo2at956ywAwH374YeJ3o0ePdtQZjUZN27ZtDQDzwQcfJOzbt283fr/fTJ48OWHTtpL79u1r2rVrZyorKxO2WCxmjj/+eHPEEUckjmT29v+qq65ytHvgwIEGgFm1apWjDdnZ2WbTpk0J+9q1aw0A89vf/tYxtuvWrXPU+d577yVd69hjjzVDhgxJ/HzbbbcZy7LMJ598klRuyJAhBoB54403HO3dl7vvvtsAMA8//HCS/aSTTjIAzIIFCxK2veM9fPhwtb5YLGai0agZO3asOfnkk5N+B8BkZ2eb0tLSpPLdu3c33//+9w/Yzq1btxoA5v7771f78N133yXZ986Zg30GDhx4wGt/+OGHJjs721x88cVJ9kGDBpljjjlG/E4oFDLXXXedw37MMcckrtu+fXvzzjvvJP1+2rRpBoDJz883F154oVm0aJF58cUXzQknnGCysrKSngmNkSNHmrlz55q3337bvPDCC2bo0KEGgLnrrruSyoXDYZOXl2datWplHn30UbN06VJz5513Gr/fb0aOHHlIY7J582Yzbtw48/zzz5tly5aZuXPnmr59+xoA5oknnjho27X3zL6fAx3ZLFu2zGRlZZkrrrjCcZy6ZMkSA8D87W9/O2g7SPOGC5JGzt4XxVNPPWVWrlxpVq5caf72t7+Z6667zliWZR555JFE2SuuuMK0bNnSRCIRE41Gkz7FxcVmxIgRibJfffWVufzyy01RUZGxLCvpxfPcc88lyo0ePdpYlmVqamqS2tWvXz/Tvn17R3vbt29v/ud//ifxs7Qg2b17t7Esy0ycONHx/QceeMAAMP/+97+T+v/KK684yg4cOFBtQ79+/ZJsdXV1BoC55ZZbHGO7/4KkuLjYUedll11munfvnvi5T58+pmfPno5yTz75pKsFyeeff55kv/zyy9Xx7tWrV5Lt+eefN/379ze5ublJ9y8rKyupHAAzbNgwtQ0bN25U27lmzRoDwPzxj39Uv7//gmTdunWJuXqgz2effaZed926daZjx47m6KOPdviEDBo0KOle7EsoFDLjx4932D/++GPz3nvvmT//+c/mrLPOMnl5eUn36Fe/+pUBYI499lgTi8US9s2bN5ucnBxzxRVXqG09EMOGDTOBQMCUlZUlbMFg0AAw8+bNSyo7adIkA8B8+eWXYl0HGhOJSCRiTj75ZFNYWGii0egBy0rvmX0/P/zhD9UFyaeffmpatWplzjzzTFNXV+f4/YcffmgAmD/84Q8HbTNp3lBl00To0aMHevfunfj5nHPOwTfffIPbb78dV155JVq2bImtW7di165dqjf7tm3bAAC7d+/GgAEDkJWVhfvuuw9HH300cnJysHHjRgwfPjzpaAcAcnJykJWVlWQLhUJo3bq14xqhUEiUae7Lzp07YYwR1S0dOnQAsEcdsS+aEkZrw/72vWNysLYBQGFhocMWDoeTxmX79u3o2rWro1xRUdFB698XqZ3aeFdUVCR+XrBgAUaMGIFLLrkEt912G4qLixEIBDBr1iz88Y9/dFxn/+ONfW3bt29P+Prsz94+79+eA9GpUye1vn3ZXyGyl2+++QZnnHEGAoEA/vGPfzjGqLCwEGvXrnV8r6qqCpFIRJwTe48R+vTpg4suuggnn3wybrrpJnz44YeJOgHg7LPPht/vT3yvffv2OPHEE/HBBx8ctD8SV155Jf76179i1apVGDp0aOJapaWlGDJkSFLZoUOHYsaMGfjggw/w/e9/P+l3BxsTiWAwiEsvvRR33HEHvvzyS/To0eOg39n/PbOXgoIC0Wdl8+bNOOecc3DEEUdgwYIF4rtn79zZ/71CyP5wQdKEOeGEE/D666/jiy++QJ8+fdCmTRsUFhaqTn15eXkA9pxBb968GW+++WaS7LGhznhbtWoFn8+HLVu2OH6318ejTZs2SXbtH69MUVhYiK1btzrspaWlDXL9Z555Bl27dsX8+fOTxqaurk4sL7Vrr01agO1l731IJQ7HXsaMGZPk3KwxcOBAh/PvN998g9NPPx3GGLz55pviwqZnz5547rnnUFpamrTQ+uijjwAAxx9//AGvGwgE8IMf/ADPP/98wrbX/0TCGJPkP+MG8x/fi32/f8IJJ4j3QyoLpDYmbq7vFRUVFTj33HNh2zZee+01FBQUiOX2zp39n2lC9odOrU2YvX8ltm3bFsCe4EXbt29HPB5H7969HZ+98T/2/gO2f9yI3//+9w3S7tzcXJx66qlYsGBB0l9Ntm3jmWeewRFHHIGjjz66QdpyqAwcOBAff/wxPv300yR7qsqVdLEsC6FQKGkxUlpaKqpsgD3B6fZdQMXjccyfPx9HHXXUAf+B69y5M7Kzs/HVV1+l3LaSkhKsXLnyoJ/959uGDRtw+umnIx6PY+nSpejcubNY/4UXXgjLshyLnieffBLZ2dk455xzDti+2tparFixImkX4tRTT8URRxyBxYsXJznbbt68GR9++CH69u2bcv/35emnn0YwGESvXr0Stv/5n/8BAPztb39LKvvaa6/B5/PhlFNOSdhSHROJaDSK+fPno02bNo4dl3SJRCK4+OKLsX79evztb3874Bz6+uuvAQDHHnusp20ghx/cIWkifPzxx4jFYgD2bLEvWLAAS5YswcUXX5w4Orjsssswd+5cnHvuubjpppvQp08fBINBfPvtt3jjjTdw4YUX4uKLL0b//v3RqlUrTJgwAXfffTeCwSDmzp2b2L5uCKZNm4ZBgwbhjDPOwK233opQKISZM2fi448/xrx58xrdjsj+TJo0CX/84x8xdOhQ3HvvvSgqKsKzzz6Lzz77DED9/EW6L8OGDcOCBQswceJE/PjHP8bGjRvxv//7v2jfvj2+/PJLR/k2bdrgzDPPxC9+8Qvk5uZi5syZ+Oyzzw66gAqFQujXrx9WrFiRctu6dOniOqpnWVkZzjjjDGzZsgWzZ89GWVkZysrKEr8/4ogjEv/oHXfccRg7dizuvvtu+P1+nHLKKVi8eDEef/xx3HfffUnHGf3798cFF1yAHj16oKCgAOvXr8esWbPw1VdfJRRfwJ779Zvf/AYjRozAhRdeiJ/85CeoqqrC//7v/yIUCmHKlCmJsm+99RbOOuss/PKXv8Qvf/lLAMBDDz2ETz/9FGeddRaOOOIIlJWVYfbs2Vi8eDFKSkqSdgeuueYa/P73v8fEiROxbds2HHvssfj73/+O3/3ud5g4cWJi0eFmTCZPnoxoNIrTTjsNxcXF2LhxIx555BGsXbsWc+bMSTqG8oKbb74ZS5cuxdSpU7F79+6k+dG2bVscddRRiZ9XrFiBwsJC9OzZ09M2kMOQDPqvkBSQvN8LCgrMSSedZKZPn25qa2uTykejUfPrX//anHjiiSYrK8u0aNHCdO/e3YwfPz7JWe7dd981/fr1Mzk5OaZt27bm2muvNR988IEBYObMmZMoN3r0aJObm+to18CBA81xxx3nsHfu3Nmcd955iZ8PFLBp2bJl5swzzzS5ubkmOzvb9O3b1/zlL38R+y8FbEq1DXvBfoGrNKdWqc7Ro0c7nPo+/vhjc/bZZ5usrCzTunVrM3bsWPOnP/3JoVSSOJBCJdXxvv/++02XLl1MOBw2PXr0ME888USiXqnfM2fONEcddZQJBoOme/fuKQermj17tvH7/Wbz5s0p9eFQeOONNw6o8Lj77ruTykciEXP33XebTp06mVAoZI4++ugkBdVebrnlFnPiiSeagoICEwgETHFxsbn44ovNP//5T7EdL7/8sjnllFNMVlaWKSgoMBdccIFDSbW3rfu2aeHCheaHP/yhadu2rQkEAiYvL88MGDDA4bi6l+3bt5vx48eboqIiEwwGzdFHH20eeughE4/HD2lMZs+ebfr06WNat25tAoGAadWqlRkyZIh5/fXXDzLye3AbGG2vGk36jB49OlHOtm3TuXNn89Of/jSldpDmjWXMfgJzQsghc91112HevHnYvn17owmVbVkWrr/+ejz66KOH9P3a2lp06tQJt9xyC372s5953DpyOPOPf/wDgwcPxieffILu3btnujmkkcMjG0IOkXvvvRcdOnTAkUceid27d+Ovf/0r/vCHP+Cuu+5qNIsRL8jKysI999yDkpIS3HDDDWL0UEIk7rvvPowZM4aLEZISXJAQcogEg0E89NBD+PbbbxGLxdCtWzdMnz4dN910U6ab5jnXXXcddu3aha+//pq+ACQldu7ciYEDB2LixImZbgppIvDIhhBCCCEZh7JfQgghhGQcLkgIIYQQknG4ICGEEEJIxqFT60GwbRubN29GXl5eow/WRQghxIkxBpWVlejQoUO9BS2sra1FJBLxpK5QKOQqf9ThAhckB2Hz5s3o2LFjpptBCCEkTTZu3OgqF1Cq1NbWomvnFigtix+8cAoUFxdj3bp1zW5RwgXJQdibkO7Ei++CP5g8OVztl9iy2dLscVn85Is57b6oUlarIyJf1BeRHyZf1Gm3hHYAAFyKtoz014oW5dqrHSqpjUrdtl/+a8rOkhsZzZEfqWius55YtnzNuPIOigeVNgadNqOMoXH7x6EXQ+5Sxyc9E9pzotWtPldaWyS7R3VLz6wV08rKdr/yvFnasy/UY9lub4RsNj75F9Lcsv1KJco8NNp8czMPhW7Go7X48KX7Eu9zr4lEIigti+Ob1V2Qn5feDkxFpY3OvdYjEolwQUKS2XtM4w9mwR/ab0Hi4vlWX2Ka3ae8aISL+pQ3p1QWAHy2siCxlQWJYLeM0nBPFiTK2ycTC5KAsiAJyP/im6D8SJmgsx4TUvqjxVRTyltckKRcvl4XJIrdJzzLlnIftNMEv/Ysq8++09aYFiTaPFTnZ5oLkkQ19Xzs3iLPQou89K5he/LQNU24ICGEEEI8IG5sKBvTrupornBBQgghhHiADQPb7ZagUEdzhbJfQgghhGQc7pCkgeqAJeF26af5jIqHw0ph5czYUvw8tDNmK+bcQrQER9c9DXS3ureEg3fj8pxX648bjOIrgoDs0GELPiEAEA8rjqqC/4fkjAoAdkA5d9ecfQXc+jm4poH/iHPjr7XnC7LZ1TOrXVPzf1DH1nlRnzZnXYo0VL8VyZFWO0tw2U913gr+IppPiDrH3fqWCEhjYtsN45dhw9b0C67qaK5wQUIIIYR4QNwYxNP8Aynd7zdleGRDCCGEkIzDHRJCCCHEA+jUmh7cISGEEEI8wIZBPM2P2wVJLBbDXXfdha5duyI7OxtHHnkk7r33Xtj7xJsyxqCkpAQdOnRAdnY2Tj/9dHzyySdedz9tuCAhhBBCmigPPPAAHnvsMTz66KP497//jQcffBAPPfQQHnnkkUSZBx98ENOnT8ejjz6KlStXori4GIMGDUJlZWUGW+6ERzYpYhmn97brqJeNBcXbXlLTAAAke0yRAyhRYN2ob9Roipo6KO7OK91I4eD9YaWsFq49dTXNHrtQh0ulgaY0saRb4aYs3EdCFXEZDtyTqJwuxRNuQpOrig+tCqVucWiVhmhKGDWbgqayEULKaykjNLQ5bimRWiFFDNbGUOmQrXVUqkdVIgr1NpBwJRNHNsuXL8eFF16I8847DwDQpUsXzJs3D6tWrQKwZ3dkxowZuPPOOzF8+HAAwJ/+9CcUFRXh2Wefxfjx49Nqr5c01X9SCSGEkEbFXpVNuh8AqKioSPrU1dWJ1/zhD3+If/zjH/jiiy8AAB9++CHeeecdnHvuuQCAdevWobS0FIMHD058JxwOY+DAgXj33XfreUTcwR0SQgghpJGxf5b5u+++GyUlJY5yP/vZz1BeXo7u3bvD7/cjHo/jV7/6FS6//HIAQGlpKQCgqKgo6XtFRUX45ptv6qfxhwgXJIQQQogH2FATu7uqAwA2btyI/Pz8hD0clo+V58+fj2eeeQbPPvssjjvuOKxduxaTJk1Chw4dMHr06ES5/Y/CjTH1nmzQLVyQEEIIIR6wVymTbh0AkJ+fn7Qg0bjttttwxx134LLLLgMA9OzZE9988w2mTZuG0aNHo7i4GMCenZL27dsnvldWVubYNck0XJCkiBV3pgbX/DS9CE+tOjBKF3UZJlxNQ645u8YFT0jJhgM4mLqJPqiG1dacbmOyXVn9W1nOvzSMkvfdDsledvGwEjpecWqVwm27CQW/pxLZ7BO6Lzk17rGnXgcA1WlUcj50GwpfpT7/aHMTmtyFA6xah4IaZt6lY7CWNsEXdV7AX+cu3YOlTFCj3k8pdLzyPChzX3smpLFV35HS2DaQt2TcqK9RV3W4obq6Gr793l9+vz8h++3atSuKi4uxZMkSnHzyyQCASCSCt956Cw888EB6jfUYLkgIIYSQJsr555+PX/3qV+jUqROOO+44rFmzBtOnT8eYMWMA7DmqmTRpEqZOnYpu3bqhW7dumDp1KnJycjBy5MgMtz4ZLkgIIYQQD/DShyRVHnnkEfziF7/AxIkTUVZWhg4dOmD8+PH45S9/mShz++23o6amBhMnTsTOnTtx6qmnYvHixcjLy0uztd7CBQkhhBDiATYsxNM8c7Rdfj8vLw8zZszAjBkz1DKWZaGkpERU6TQmGIeEEEIIIRmHOySEEEKIB9hmzyfdOporXJCkiC9q4NtPEqN6hLvYcXMVDhyAJaghNNWMT1GlaCHiRTUNIKpbVKWOGzWNVl4JS280NY1m98k3SNLeu1XTxMKpq2kAJQS9ppxwEQ4cAAK1kk0JQR6R7dqcjWUp/RTscaWsFDYfgL4/KzRRfR4Uu89liHwx3LjydlTVUS5CzbsNna6pVTR8wjPuq1UkVprTghajIktppFRea7YbtROU/qsyR8HUQOE24h4c2aT7/aYMj2wIIYQQknG4Q0IIIYR4AHdI0oMLEkIIIcQDbGPBTvN8KN3vN2V4ZEMIIYSQjMMdEkIIIcQDeGSTHlyQpIi/zobfTnZHF5UTOIQcJQKSmgYAfDGnC7mmvrCEfBYHtCvqG8mbXfX6V5QtGqJaxyPdm+WXNwBN2CmFsbPlRyGe5TJnjabMkKpRuqndz2C1XD6023nfAtXyvbSDcrtrW8n3rbaVXD4qBHiMZ8vt1sZEQ1LC+OvkdvgFhREAoEY2a7l8pGtq28e2lsvGhfpGVegpeWKMX1NHKY0REqL4apWXiq089wF5BCx1kgvvCaV92qmE+l6RRDbKP9xWmsnt0iEOH+JpHjwoArFmARckhBBCiAcYD3xIDH1ICCGEEEIyB3dICCGEEA+gD0l6NLkdkpkzZ6Jr167IyspCr169sGzZspS+989//hOBQAAnnXRS/TaQEEJIsyRufJ58mitNqufz58/HpEmTcOedd2LNmjUYMGAAhg4dig0bNhzwe+Xl5bjqqqtw1llnNVBLCSGEEOKGJnVkM336dIwdOxbXXnstAGDGjBl4/fXXMWvWLEybNk393vjx4zFy5Ej4/X68/PLLh3TtQG0cgf1yrNiaykbwTnfrp6TmpxEUGL6I7Jft09Q0Ws4aLTeE5CnvU9ayirJFy4thpGsqdahDqLUlLCdRsbOc9piSnyPuRc4aBUkxBQABRSESrpDvW6jcqZ7Q+lPdVrEXye2uay23MZ4ntCWszMOAPA+NIlcxUef9jNXI7Q7slu99UJlvoQrRLD5XaqoURQmiKmdc/Nmn5bJxnVdH6n9UVtlYml1QowGAJSh4AD0vlxssZdAlRY1WVmqHF21LBRsW7DT/zrczqBLKNE1mhyQSiWD16tUYPHhwkn3w4MF499131e/NmTMHX331Fe6+++6UrlNXV4eKioqkDyGEEHIw9vqQpPtprjSZBcm2bdsQj8dRVFSUZC8qKkJpaan4nS+//BJ33HEH5s6di0Agtc2gadOmoaCgIPHp2LFj2m0nhBBCyIFpMguSveyfOt4YI6aTj8fjGDlyJO655x4cffTRKdc/ZcoUlJeXJz4bN25Mu82EEEIOf+jUmh5NxoekTZs28Pv9jt2QsrIyx64JAFRWVmLVqlVYs2YNbrjhBgCAbdswxiAQCGDx4sU488wzHd8Lh8MIh8P10wlCCCGHLXt8SNJMrteMj2yazIIkFAqhV69eWLJkCS6++OKEfcmSJbjwwgsd5fPz8/HRRx8l2WbOnImlS5fihRdeQNeuXV1d318Tgz+Q7Pzl00KTC058akhkBc2p1ZJCxytOrVZEcVbTQsRrBJ3TxARlbzrJoRfQ+y86oEWVaak5r2pOuiHZKS+e67THs+W6Y66dWmW7GJpcCWMuhYIHgPB2+QuSI21VsTyGuzsqoeOL5bkSKIiI9pa5zpjtWSG5fUGf3J+44uldXed0Oq6qlv9IiIZkx2VYcv/9ESUEfZ1Qheb7rUxDV46nSh1GqUOr21ZDzUux1hVnyYh837T3h09xapV8MTVnUul5APSxlRxYtTqktBtaKg7SuGgyCxIAmDx5MkaNGoXevXujX79+ePzxx7FhwwZMmDABwJ7jlk2bNuGpp56Cz+fD8ccfn/T9du3aISsry2EnhBBC0sX2IJdNc1bZNKkFyaWXXort27fj3nvvxZYtW3D88cfjtddeQ+fOnQEAW7ZsOWhMEkIIIaQ+8MIHJK7tZDUDmtSCBAAmTpyIiRMnir978sknD/jdkpISlJSUeN8oQgghzR4bPsYhSYPm685LCCGEkEZDk9shIYQQQhojcWOpztpu6miucEGSIr7aGHz+ZG90o6k+pNDxWph5JcS1GhZZUMhoqhm3ahrjV5QzgqLGzpKnjgm5U9lIu5O+qNwOnzKGVlSWQxgl9HU8x9n2WJbcblsRcdhB5X5qKgGhiZKyAwDCu2RJgL9aVrxUHpXnsFUdoahpOsiKihbtqkR7u7zdor1tttOeF5A75FPkEBFFOlIZdSpqtmW3EMuWBWV7jckR7f5a+ZpBoZuBarEo4JOfTTukpZIQbNrjoIWfV9Q0tl8JtS49K1r6BkVlo4eal++nlApBDTMfl9viZsteU0H5hTQAkGz1QNwDp9Y4j2wIIYQQQjIHd0gIIYQQD7CND3aaKhubKhtCCCGEpAOPbNKDRzaEEEIIyTjcISGEEEI8wEb6KhmXiT0OK7ggSRErEoO1nwrFUlQ2RvIgVxQslss9KtFr3XapptHareSnsbOd0ySuqGxsTWWjqAdElY2Wb0R5zn1auxV7POxsY1xRSGh2LbeIitDPQJ28NRuskNU08RxZ8rO7vbM/tcWyBEFT03RtvUO0d8rZKdqLw+XOuv3O/DYA4Fe2oGuVxC07o7kOW15QVvBYSrKUTYpSK1olz8/4Dqc9XK49V/KciGUpxaXbpuWy0fLkKM+PlstGtCsqG8QUNU2tPA+13Fk+QcniVwQ8Wj+Nlp9GypOjKHj8EafdNJDKxpvAaM334KL59pwQQgghjQbukBBCCCEe4E0um+a7T8AFCSGEEOIBNizYypGemzqaK1yQEEIIIR7AHZL0aL49J4QQQkijgTskqRK34RBk2UqeBggu8Uo+D6OtCTUvdMFTXlX7KAoEVWUTVtQqgl1Squwpq+V4ST2XjbZjqQyhih1UFBWCciYup71R1TSKQETV7Em5iSRVAqDn5qnpLOdnqW3nrCfQWla8fK/AqY4BgCNbbBPtR2V9J9qLgrsctnyffE2fMijVxpmzBgC2+535acI+WQkSVeQnu+vkure1kJVKsRznXNFUHEHlvkl1AEA8yznf1Jw12m69S1WOmMvGrxSOK7mgIorKpk7JtVTnvM9afh+tQ2ouKGEKSblztHZo+Xe8xpvAaM13n4ALEkIIIcQDbGPBTjcOSTPO9tt8l2KEEEIIaTRwh4QQQgjxANuDI5vmHBiNCxJCCCHEA7zJ9tt8FyTNt+eEEEIIaTRwhyRVLMuZC0JRjkhKGE3ZgoCW+yV1xyajqH1UlHZruV8ktYrmPa/m1lD6Ywltt2y5rDaEao4ODam4qlZQ7JoawEUzNJVAPFuW/NQUyheNtnQqCNrkV4tlO+buEu1dsmSVzZHhraK9rb/SYcu1ZPWFT8llU6cMbp6vRrRL7I7Laprvsp1KHQDYkevMkwMA8bBzzDVVV3C3rEqJ5Mn3R6zH5SOr+TmqKhvpGXf7nETkRDRWRLnPdc5x8StKNyuuqA410aHwrGgqNb/QDkvJ1+M1cViIpxnYLN3vN2W4ICGEEEI8gEc26dF8e04IIYSQRgN3SAghhBAPiCP9Ixf5QLB5wAUJIYQQ4gE8skkPLkhSJeAH/MlOeJLzKgAYwTnUKM5dUlkAMIpzqCs8CrUuOqSqTnZa3HflouIYKiHVlf74lFDrGm5C0KtOg2p/tPKp3894jvxYRvKVOnKdDnuts2Wn1qJwhWjvENwp2ov9cvm2fmdY8RyXTpO1Rnaa9FlVDltVQAkFH8wT7QVh2TE2FJadG+2Q5FwtFkVoZ51ory2U75sVr0cnRRfz0CgO9JZf8dzWiGqh453PoXrNmOLkrjj7SmH8JSdaAPDVOttn4vJc8xom10uP5ttzQgghhDQauENCCCGEeICBBTtNHxJD2S8hhBBC0oFHNunRfHtOCCGEkEYDd0gIIYQQD7CNBVv1eE+9juYKFyQpYgI+GH/yhpIWDl5S1Nhheag1ZYumspHmqhvP9D2VyGZXR5faNdUw9qmHjldDQgve8wDgr6gV7b6QPOb+fMFuK2oAlyG+3YyhtjMbz5J/Ec+SywcE5UiLoKwEaR1wKlgAoKVPVuW09DnVNABQ4HMqM3KskNxAhaCR644aZ3/yffI9buGX7bkBue5AQFZm1AlCEy20v79cVvD4ojmi3W2YeC+QovJrihdfTrZcSVweKzUNhu2UJfkich2qykZ5f0j1aCHsrTqn3ReXnweviXuQ7Tfd7zdlmm/PCSGEENJo4A4JIYQQ4gE8skkPLkgIIYQQD7Dhg53mwUO632/KNN+eE0LqBf+qavhXyz4p/tXV8K+Sf0cIad5wh4QQ4i0WEFi1x/Ez3uu/jp7+1dUIrKpBrLfiRElIEyduLMTTPHJJ9/tNGS5IUkRS2UBV2Thd3O2QopxQ7EbKH6NgGSX3i5JXxorJSTrUXDGSWkdLDaHmuFGKC3X76+SG+HcrnvJl20WzLxgU7YGWTrmKP6rkIXGZD8gL1BxJSsoRn9/ZyJBPVjcELdme5ZNvaFi5n0E4GxO0/mPrnQfb8iGwsgo+ywf0ygVWV8G3qgb2Kbnw9cqFD0CW8vqR2hi0ZEWF1h+fW2mLUFxTe1mRhsmLkg7SHLIV1ZkvV1kgCqoZADAh+bkS34cuFYBaXipJUSOpaQDI7Vb64jX0IUkPHtkQQrynV+6excfKKliPl8G3sgr2Kbl7FieEHKaY/2T7TedjXEZq7dKlCyzLcnyuv/56AMDVV1/t+F3fvn3ro/tpwx0SQkj90CsXZnUVLPs/O2RcjBDiOStXrkR8n5gxH3/8MQYNGoRLLrkkYTvnnHMwZ86cxM+hkLuYQQ0FFySEkPphn8WIZQNmdRUXJeSwJg4L8TST47n9ftu2bZN+vv/++3HUUUdh4MCBCVs4HEZxcXFa7WoIeGRDCPGe1VWJYxpzXbvE8Q1Wy5FiCTkcsM1//UgO/bOnroqKiqRPXd3Bo81GIhE888wzGDNmDKx9/IjefPNNtGvXDkcffTTGjRuHsrKy+hqCtOCChBDiLfssRhI7Ivv4lHBRQsjB6dixIwoKChKfadOmHfQ7L7/8Mnbt2oWrr746YRs6dCjmzp2LpUuX4uGHH8bKlStx5plnprTAaWh4ZJMqPsvhRW4ruSGk/DS2lptGUdPYQRcqG00do6lvlHp8caUiwfHdiitrWcUhS1OISN72Pk0FVCurG+LbZJWNRuB7bZzXjMpnqlZcUSp5kJ9EvW9Rpf+KqCBuC4qKNLeN/1uPeyzbyA6svXJh/+f3BkBcmZ/SNbX8HlFlYtXZ8qstFpPL+yLO8fLXKrlccuSkQuoz68Gffep8czEPtXeNyQnLdk3tpeXfEtSFmmBEz7OlvLO08hIB4R5bygvIY/Y6pqZbBwBs3LgR+fn5CXs4LN+nfZk9ezaGDh2KDh06JGyXXnpp4v+PP/549O7dG507d8arr76K4cOHp9VWr+GChBDiKeaUFvove+VmItccIQ2CDSvtPwb2fj8/Pz9pQXIwvvnmG/z973/HggULDliuffv26Ny5M7788su02lkf8MiGEEIIaeLMmTMH7dq1w3nnnXfActu3b8fGjRvRvn37BmpZ6nBBQgghhHjA3kit6X7cYts25syZg9GjRyMQ+O/Bx+7du3Hrrbdi+fLlWL9+Pd58802cf/75aNOmDS6++GIvu+4JPLIhhBBCPMBLHxI3/P3vf8eGDRswZsyYJLvf78dHH32Ep556Crt27UL79u1xxhlnYP78+cjLy0urnfUBFySEEEJIE2bw4MEwgkNwdnY2Xn/99Qy06NDggiRFDASPcSVXjBHskg3Q1SfuFsnaFp/isa5IJ6yY5uHu/IJWVvNY1HL5SLuT6lhly0oYf6tWcvlIRLYLNjVnjduUKKqESSir3PtgpawmClTL/a+tcz7G1TG5bGVcVohU27IHf5UtZ+bNkyQ/LiU51UbuZ5XtHKxKW253eSxHtFdE5fIRYawAILvGadPUTtE28jWj2YpiTrqkpj7Rnk1Z8AMlZREsW5i4isomnq3lptEUgFpiKsGm5bIxWkddqBEt5Z8voayJKwPlMTY8yGXjkUKuKcIFCSGEEOIBxgOVjeGChBBCCCHpwGy/6UGVDSGEEEIyDndICCGEEA/IlMrmcIELklTxWaqTV1q4rdKDJlhqeGYtZLkbb0XZU1Nz4JTCbUcD8rS0g3Km2EBOJ9Hui8qObJHWTofHeMil07FyH7R3SVzwMY2F5cL+atnZM2uHfN9273Y6JW6vkR0vy1rIUr+ymGzP8wnengD8ltOeY8lOxBqVgvMqAHxnO9teGm0pli2NyJEstf7blbIDZ6jcObbaPa4tlB2G41ku5pDm7Kk5r0blL/gjst0n2ZXH2CgpMIyS7kJ1ahXQnN/150f5hd85iJZPqVsKYR9X8i54DI9s0qP5LsUIIYQQ0mjgDgkhhBDiAV7msmmOcEFCCCGEeACPbNKDRzaEEEIIyTjcISGEEEI8gDsk6cEFSRp4Mm/U0MquiiuVKHWoYey18O5CKGYlFHw8S7ZHc5Ty4dTD7FuKKsPXSp7Gvrg8WpKiJioLeGDLggrYSrRtbc9REjBF8uV+xlrIF22xWVbfVGxzlt/WpoVYdkOOHGa/VUAOEe9XJmKt2eWw5bpU2VQo4eA3x5xt/Kq2nVh2fVWhaP9up6waCm2XZVOSginWQr7JdfnaXBbN4ntCe759yhD6a2V7sFqWzgRqnHIdTUWnPfe2EmpeVcII6j0lEryKNi7i5ZT22YJqyG6gwwAuSNKDRzaEEEIIyTjcISGEEEI8gDsk6dHkdkhmzpyJrl27IisrC7169cKyZcvUsgsWLMCgQYPQtm1b5Ofno1+/fk0qFTMhhJCmg8F/pb+H+nGZYPywokktSObPn49JkybhzjvvxJo1azBgwAAMHToUGzZsEMu//fbbGDRoEF577TWsXr0aZ5xxBs4//3ysWbOmgVtOCCHkcGfvDkm6n+ZKk1qQTJ8+HWPHjsW1116LHj16YMaMGejYsSNmzZollp8xYwZuv/12nHLKKejWrRumTp2Kbt264S9/+UsDt5wQQgghB6LJ+JBEIhGsXr0ad9xxR5J98ODBePfdd1Oqw7ZtVFZWonXr1mqZuro61NXVJX6uqKgAsEdpIqlNJKRcMZat5JxQUizY2qVcuK1r3vBaLgp1YS7UE1dUNtFcTWUjVy4pE7QcGqpsSMnRoY25NC5xWfCBuKKmsUNK3VruG2FY6lrK/ak6Qm5Mi42y1CJ3k7ORO1tni2XXZcmqlJBfTqJSZ8uviB0hp4onx1cnlATiyt89u5VB31TX0mH7andbsezX2+X+xLfK/S/YJJoRqnD2v65AvpnRFtpzJdct4ZMFUwjUyPMqXClP8vBOuSJ/hSDXUVQp8Wzl71IPcnfp7z0lb5aSfwpSeSUHj/j+VfJ3eQ19SNKjyeyQbNu2DfF4HEVFRUn2oqIilJaWplTHww8/jKqqKowYMUItM23aNBQUFCQ+HTt2TKvdhBBCmgc8skmPJrMg2Yu13w6BMcZhk5g3bx5KSkowf/58tGsnxzQAgClTpqC8vDzx2bhxY9ptJoQQQsiBaTJHNm3atIHf73fshpSVlTl2TfZn/vz5GDt2LP785z/j7LPPPmDZcDiMcFiJcEQIIYQo8MgmPZrMDkkoFEKvXr2wZMmSJPuSJUvQv39/9Xvz5s3D1VdfjWeffRbnnXdefTeTEEJIM8UYy5NPc6XJ7JAAwOTJkzFq1Cj07t0b/fr1w+OPP44NGzZgwoQJAPYct2zatAlPPfUUgD2Lkauuugr/93//h759+yZ2V7Kzs1FQUJCxfhBCCCEkmSa1ILn00kuxfft23HvvvdiyZQuOP/54vPbaa+jcuTMAYMuWLUkxSX7/+98jFovh+uuvx/XXX5+wjx49Gk8++aS7i/uslL3OJc9yX0z28rYV/xfVLSbgrEdX02i5HpTKLUV9I5ilfDAAEMtS7NlKW4S0LYqwQxXZqPmAVKmScE1FIWGUtmhqGq3tcnm54VXFSs6eqHyUmLvVqUyItJQbsiuYL9o/Vf4q25Uvq1XaZbd02LL9inREoTwq17212pmHZstOud2RLXISorx18hjmfyO3UVJ2qbmGFEWW9JwAgE8QjvhlQRKCVYrKZqcsxwtsrxHtVtRZ3s6TG67lhFFzXimPlU8QwlhRd2oaq06ZQ1IeHlt+CC1BfaPl8fGavcHN0q2judKkFiQAMHHiREycOFH83f6LjDfffLP+G0QIIYSAPiTp0mR8SAghhBBy+NLkdkgIIYSQxogXTql0aiWEEEJIWvDIJj24IEkRYzmduSzFmdLEhdDFSmHLUpy+fIqDqeDwpPh2qc5qannNiU0orzmBas6ukvMqIDuBquHXNV9ct/5qbqJIu404rdxnacyN4uiLVkrVyo3LKXMOQItv5UExlvzI766TVWdfFsqOkN/mtHTYwkHZIdG25blcG5EnUW2F03k38J1ctmCDPIYtv5bbooUyr2rjHJdobvoh4gHAEvxR/bVyO0JV8n0LVCn9icvOoSbL2ch4rtzwWLY8r9QUDtp7TxlbCUsJHQ/BGReQnXSN4kEuO7UqIek9hjsk6UEfEkIIIYRkHO6QEEIIIR5gPDiyac47JFyQEEIIIR5gAKSbWLhh8hI3TnhkQwghhJCMwx0SQgghxANsWLAYqfWQ4YIkVSzLGc9d2ZuzJJWN0aQgippGC0EuxJTX1DSxsBY6XqlbswtN1MNNy3VoiAoZZc/Sp4WIVxzofbLDPiBdU2m3JUc3V2P7a8e/JiSE/BfSAABALEeuo1Z5URm/s/HhnXLduVtke6BGHoC6HfIA1LZwqm+qhT4CugrKXyf3J6fcac8pVfqzVQkFr9zP6naKsqeV85ox5d5rdWv9lOanNje1uWwHZSWMXSiHzo/nOB/mWI7c8HhIeQdpIeKF99t/fuOsI6jUrfRHUxdKz5ummIKg4Gmo0PFU2aQHj2wIIYQQknG4Q0IIIYR4gG0sWAyMdshwQUIIIYR4gDEeqGyascyGRzaEEEIIyTjcISGEEEI8gE6t6cEFSar44NxPisl7az7By1vNw6Lkj9GQPPzjQXf5Y7TyWg4ZNyo0VWmgqQqE/Um3dfhloQUCSr4Qf51wAaWPkVwlD0tr2W4VKIqnFk6bHZTb51Z9I84JJadQsFKuI7hbU9/I5aX6bWVeqaop7b7VOL/gj8iV1BTKrzBtrKItlPsjpOzRngcth5WmkJHKa++DWLY8r+yA/DBrbZTujzYn3CrjfDGtHmlg3P0TE1DUa1adMFk04YygADQ+7eXmLVyQpAcXJIQQQogH0Kk1PehDQgghhJCMwx0SQgghxAOoskkPLkgIIYQQD9izIEnXh8SjxjRBeGRDCCGEkIzDHZI0kBQiAORcCmr+C0VpoQkWBA9yLTeNqr6R03noahqhiZpCwl+nqDUUxUtAKK/VYSmqJn9EdrcPVMmN9G/f7TTu2CVfM0+QxwCo+X5b0V7RWVZD1LZ1Dm40TyyKeNid+iYuKEqMco/jWfJNDtTIdl+dXI/PRX4WTcWhzcOIoAYxihpNq0PN16SUlxUiCorKREN6ltW+5yoqE+WFYCviEal+Lf+U+twrKhaf8hyKebaU3DQmIN+geFjukL/O2SHtfSC9U+NKWa+hyiY9uCAhhBBCPMBAVbm7qqO5wiMbQgghhGQc7pAQQgghHsAjm/TggoQQQgjxAp7ZpAUXJIQQQogXeLBDoioamgFckKSKDYfXuSWoaQDAigsSBNcJI5RmCHfMaIoCLX2D1hQt54jQHU01Ey6XxyRrh6J4EZQwdljuUKRAlibUtJHtdrFs93VxylJCFYVi2ayt1aI9+6ttoj1Q1VK0VxyZ7bBVF8s3ok6uAvFsTX0jlPXLZW1NqZOtqGwiclt8UaG89pedphhTlWSCTVPBKHNZfadrQhMpvZGL3DR7Lpr6NbW8P67UPtCVM9Lrxu0rSEkrA9uFHE9VR/nlxvjCcs3+qLO8FddyiTntsahyM0mjggsSQgghxAMYqTU9uCAhhBBCPIBOrelB2S8hhBBCMg53SAghhBAvMFb6TqnNeIeEC5IUsWzjDEmsOFVJzlaaQ5nq9BXQnMGE0PGK86prJzbF78svOLCGK2Tn1eytcqzxwG7ZO7KundPBtPII2Rm1ukgek2ie4sCphWAXxsUXkR+FQFWBaM/aJtvzNsnx01tscvbfH5XDzFtxxdm1tWhGLMfZTzuk9F1xGtQco7UQ7JbQTckx9IC4cXZ1u5ernMOrDqlSWVsJ4645uyr9F+0etA8AoKSekAbR9f1R26j9QqhCmT8x5b0nOdADQDws9Ud7/wrfj2oe/t5CH5L04JENIYQQQjIOd0gIIYQQL2BgtLTggoQQQgjxAKps0oNHNoQQQkgTpUuXLrAsy/G5/vrrAQDGGJSUlKBDhw7Izs7G6aefjk8++STDrZbhgoQQQgjxCpPmxyUrV67Eli1bEp8lS5YAAC655BIAwIMPPojp06fj0UcfxcqVK1FcXIxBgwahsrIyrW7WBzyySRXBfVrzNjdCzGUTkNd+dkixK6GlxdDxSvhoFcXb3heV+xOsFlQ2O2U1iS8iu8lXdWkh2su7OjtU1UEJb14oK3XCLWRlT25YDlfv8zkHIBaXvfBramXFz64KWa5S3UF+pPLWOevP+1ZuXwvlsTQ+ea6IYcI15ZUSOt4ooeb1+O5OkzoLXao7pHpcKw+08poSRpi2lnx74FPs/lrFXudsjF8LyS+EPQdwCP9QpX6DpPfVgcsrdjfh6rWw9PLjJl7T0hoi3ON4pGGOQTJxZNO2bdukn++//34cddRRGDhwIIwxmDFjBu68804MHz4cAPCnP/0JRUVFePbZZzF+/Pi02uo13CEhhBBCvCDd3ZF9dkkqKiqSPnV18h9e+xKJRPDMM89gzJgxsCwL69atQ2lpKQYPHpwoEw6HMXDgQLz77rseddo7uCAhhBBCGhkdO3ZEQUFB4jNt2rSDfufll1/Grl27cPXVVwMASktLAQBFRUVJ5YqKihK/a0zwyIYQQgjxBAsHOLx0UQewceNG5OfnJ6zhsBLVcB9mz56NoUOHokOHDsk17ncsZ4xx2BoDXJAQQgghXuBhHJL8/PykBcnB+Oabb/D3v/8dCxYsSNiKi4sB7Nkpad++fcJeVlbm2DVpDPDIhhBCCGnizJkzB+3atcN5552XsHXt2hXFxcUJ5Q2wx8/krbfeQv/+/TPRzAPCHZIUEXPZaK7/Ur6ZoCx7iIflNWFcUdlIuSHc5qzR8kX4FZ+pYJXTbd0XkeUK1d9z5qYBgF3fl/tf1cnZmGC7GrFsh5ayTK1djmwvCMqyh7DfqRCKKgmByqNZor20Sv7LpTRPtu/KynbYTECWFOSvl2UcOSH5cZWUWloOGiU9i6qc0PKf+ASRlU9RMkhlD4SkELI1FZDbfE0xpY2C6kV7HgLVsj1YpanUnIMYqJHL+pXnSsqPBej5XESRjQtVIHCAfFqKMjCW7bRLOWgAIB5S6tZUNtKccHHkEG+o44kMRWq1bRtz5szB6NGjEQj89+G3LAuTJk3C1KlT0a1bN3Tr1g1Tp05FTk4ORo4cmWZDvYcLEkIIIcQLMpTt9+9//zs2bNiAMWPGOH53++23o6amBhMnTsTOnTtx6qmnYvHixcjLy0uvnfUAFySEEEJIE2bw4MEwyg6YZVkoKSlBSUnJIde/fft2FBYWAtjjbPvEE0+gpqYGF1xwAQYMGHDI9e4PfUgIIYQQD9gbPzPdT2Pho48+QpcuXdCuXTt0794da9euxSmnnILf/OY3ePzxx3HGGWfg5Zdf9ux6XJAQQgghXuBhYLTGwO23346ePXvirbfewumnn45hw4bh3HPPRXl5OXbu3Inx48fj/vvv9+x6PLIhhBBCiIOVK1di6dKlOOGEE3DSSSfh8ccfx8SJE+H7TxqLn/70p+jbt69n1+OCJFVss+ezL4rntpS3xg67U9m4ymXjVmmgeOz7I4pdyMURzZenTmVHuZ/V35PVA+Fip2ShU+udYtmj8reJ9g7hXaK9VaBKtGcJSUqiSvKX8risGtqU1VK0/79QW9H+la+Nw1YRyxXLBqplqUHWLlkeVVfgnACxbGVuKjluLJ9y/hyV6/HXOu3KcCOg5HhRU5GEnDZNraGpibTYVJai+JEUNZpqJlyu2eX7E6hy2jXFi+1X8hVpihfFLuWl8tXJz2CgSpYTWRF5sLScSvE8Z+CuSEvhZgKI5skTMZqjzFspT46myJHKKspCz8mQU2t9sWPHjkQskxYtWiA3NxetW7dO/L5Vq1aeJulztSApLy/HSy+9hGXLlmH9+vWorq5G27ZtcfLJJ2PIkCGNUtdMCCGENASW2fNJt47GxP4RXeszwmtKC5ItW7bgl7/8JebOnYvi4mL06dMHJ510ErKzs7Fjxw688cYb+PWvf43OnTvj7rvvxqWXXlpvDSaEEEIaJRmKQ1KfXH311Ymw9bW1tZgwYQJyc/fs7qaS8M8NKS1ITjzxRFx11VV4//33cfzxx4tlampq8PLLL2P69OnYuHEjbr31Vk8bSgghhJCGY/To0Uk/X3nllY4yV111lWfXS2lB8sknn6BtW/lsfC/Z2dm4/PLLcfnll+O7777zpHGEEEJIk+Ew8yGZM2dOg14vpQXJwRYj6ZZvClhwnu2pIZeFMPFunVfjaghlobw2f5WtP0sLHS9HLBefj5pCeerUtFUuWihv7RW3rHDYNOfVo3PkdNkdgrITbKF/t2iXnVrl/lTYcuj4Ar8cP9ynHADXxZ31f604r1btkrN6BqvlGy2FIffXKXNTSRhqlJjyWth3v+CoGt6lOXvKzpTGJ1+zrkCyazHvZbNWXOuP5HgblKcPQpVKPH3FXNvGeZ/r8uX3QbSF8j7Q7pvi0C6F/JfuGQAEdzvTGgBA1i65Q1nfyc9yoNJpz4rJdfi0Din/JElzRcn2IDpuN9i/8YfhkU1Dckgqm02bNuGf//wnysrKYNvJE+7GG2/0pGGEEEIIyQyTJ09Ouez06dM9uabrBcmcOXMwYcIEhEIhFBYWJnncWpbFBQkhhJDmyWG0Q7JmzZqkn1evXo14PI5jjjkGAPDFF1/A7/ejV69enl3T9YLkl7/8JX75y19iypQpieAohBBCSLPnMFqQvPHGG4n/nz59OvLy8vCnP/0JrVq1AgDs3LkT11xzTWZz2VRXV+Oyyy7jYoQQQghpBjz88MOYNm1aYjEC7AmKdt999+Hhhx/27DquVxVjx47Fn//8Z88aQAghhBwW7FXZpPtpZFRUVGDr1q0Oe1lZWeYitQLAtGnTMGzYMCxatAg9e/ZEMJjsQe6Vc0ujwzZO13VlOScpYbTQz6qaRrkzkme56mmvqGkkD/w9FSnhrIWw3bISAojmy5XntpA984tynJNZCwWvqWk6BXaI9gKffM0sYQC0Iam0a0S7XxnEakXGsi2nhcO2tSBPLFvXSg63rSkzxC1ebdtX66gLtQYA+ARFVrBavmjWDlnaoinPYtnOya+INXQ0hZkaOl5QKgnh1wEgmiu3u7aV/EzUFjrtkZZyh+K5ykMb0m6E0lFJNRWR2+2vlu3BclnGkrVDTqeQs9U597O/k6V7/mr5RgTVEPnOtmhpA6R3bUNFPz0cI7UCwMUXX4xrrrkGDz/8cCJ3zYoVK3Dbbbdh+PDhnl3H9YJk6tSpeP311xOOLfs7tRJCCCHk8OGxxx7DrbfeiiuvvBLR6J5FZiAQwNixY/HQQw95dh3XRzbTp0/HH//4R/z73//Gm2++iTfeeCPxWbp0qWcN05g5cya6du2KrKws9OrVC8uWLTtg+bfeegu9evVCVlYWjjzySDz22GP13kZCCCHNEOPRp5GRk5ODmTNnYvv27VizZg0++OAD7NixAzNnzkyEkfcC1wuScDiM0047zbMGuGH+/PmYNGkS7rzzTqxZswYDBgzA0KFDsWHDBrH8unXrcO6552LAgAFYs2YNfv7zn+PGG2/Eiy++2MAtJ4QQQpo2ubm5OOGEE3DiiSd6uhDZi+sFyU033YRHHnnE84akwvTp0zF27Fhce+216NGjB2bMmIGOHTti1qxZYvnHHnsMnTp1wowZM9CjRw9ce+21GDNmDH796183cMsJIYQc7uyN6J3WJ9OdyCCufUjef/99LF26FH/9619x3HHHOZxaFyxY4Fnj9iUSiWD16tW44447kuyDBw/Gu+++K35n+fLlGDx4cJJtyJAhmD17NqLRqKPtwJ7shftmMKyocIY2J4QQQoi3uF6QtGzZ0lOv2lTZtm0b4vE4ioqKkuxFRUUoLZVznJSWlorlY7EYtm3bhvbt2zu+M23aNNxzzz0OuxWzYZlkT3cTUDaYBJWNrXiPa/k8NOWMuHyu5yV1PORsTEx2tIfJklUCueGIaC8IOlUsrQJVYtmWPjl/jKamaelTcnFYzv7ElYNbH2SVQJWR29I6ICdAaR1y9qlFltzu6hy53bFsWfUgKURUtLmipYpxUV4rq819Pb+TYFPylmhoSgUtl42kPormKKqZ1oq9nXzRWKFz7mcXyIllWmTLcyInKM9DS+lo3HaObW1Mft3vrpGVYbW7ZXuklSwNjOQ7b1IkT77HuVvlG2HF5P5Ic9wnqP8Aef6oykKvOcyS6zU0hxQ6PpPsr+QxxhxQ3SOVl+x7mTJlSlIM/4qKCnTs2PFQm0sIIaS5cBhFagWAn//857jooovQp0+fBrneISXXywRt2rSB3+937IaUlZU5dkH2UlxcLJYPBAIoLCwUvxMOhxEOa5koCSGEkObBli1bMGzYMPj9fpx//vm48MILcfbZZ9fbv5EpObWec845qp/GvlRWVuKBBx7A7373u7Qbtj+hUAi9evXCkiVLkuxLlixB//79xe/069fPUX7x4sXo3bu36D9CCCGEHDKHmex3zpw52Lp1K55//nm0bNkSt9xyC9q0aYPhw4fjySefxLZt2zy9Xko7JJdccglGjBiBvLw8XHDBBejduzc6dOiArKws7Ny5E59++ineeecdvPbaaxg2bJingVL2ZfLkyRg1ahR69+6Nfv364fHHH8eGDRswYcIEAHuOWzZt2oSnnnoKADBhwgQ8+uijmDx5MsaNG4fly5dj9uzZmDdvXr20jzRuZr93AXw+Gz/p85rzd++fh7jx4bpT/5KBlhFCDgcOx0itlmVhwIABGDBgAB588EH8+9//xl/+8hc88cQTGD9+PE499VRccMEFuPzyy/G9730vrWultCAZO3YsRo0ahRdeeAHz58/HE088gV27diUae+yxx2LIkCFYvXp1IoJrfXDppZdi+/btuPfee7FlyxYcf/zxeO2119C5c2cAe7aX9o1J0rVrV7z22mu4+eab8bvf/Q4dOnTAb3/7W/zP//xPvbWRNF58Pht/eO8iBGBhXJ9XE/Yn3j8Pv3/vQow/9eXMNY4QQpoAPXr0QI8ePXD77bfju+++w8KFC7Fw4UIAwK233ppW3Sn7kIRCIYwcORIjR44EAJSXl6OmpgaFhYUNevwxceJETJw4Ufzdk08+6bANHDgQH3zwQdrXtaJxWLaSZ2J/3Hh0q+oG5Rf16YCtXFPKGWE01YNfXt4HFMVLUHB/DypJeEKK3a/8SRHcrz/X9XkVfgCPvXcRLAu4rs9rePz9c/HYexdiwqmvYFyf17D/AOt1y21xY/crY6IepGpTwou/qLR5peZrctriiupBUl8AQCxLyWWTJeWCktuhjonLPE5S/XX5cuU1xUolxUq+plbOfE3FuXJCssKwrDDLDch1a/MtKtygqph87r+9Tg5w9V0L2b4t25mXCQCqw1kOmx2Ub5xmz94uj6103zTFlBV3PhCSrV44zJxaD0bbtm0xduxYjB071pP6DtmptaCgAAUFBZ40gpCGYmyfV+GzLMxacSH+8P65iNpB/KTvK7j2lFcP/mVCCDkQzWxB4jWuI7US0tS5rs9rCPqiiNpBBH1RXCf4lBBCCGlYuCAhzY7H/7MzsndR8vj752a6SYSQw4C0w8Z74BTblGkycUgI8YLZ/3Fg/UnfVxI+JLNWXAhjkOToSgghrmGk1rTggoQ0G/YsRi5KLEYAJP47a8WFALgoIYSkQTPxIfnoo4/wm9/8Brt27ULPnj1x7bXXehLR3PWC5Oqrr8aYMWPwox/9KO2LNykiUcCffMKlhZ+3bMHLW1PeKJPPMsovpNWz2wnsNm+JWFix20reEqXyqJC0R1IIAEBEsUt17LEnKxCitg/XnvoyrjnlVUT3af81p/wVcWMQNT5E9+tYVOmn1sZaKZEGgBo75LBFlNwiVkQeK3+tkm9HUBt4tu3rYhpKaizgAGqabLm8NITq3NSeH02BoeRKkRRCda3lsnYbOS9TUWs5EWfX/B0OW8ecnXIdQbmOFn45941fkfRJ87PSdqpgAGBbOE+054fyRXvILyt7tgiTrhbKTVZlU/JcCVUK71TlHWkJ76AGy2XTTPjxj3+MO++8Ez169MAHH3yACy64AL/+9a9x1llnpVWv6wVJZWUlBg8ejI4dO+Kaa67B6NGj0w6GQkhDMPbUhf/5P+cLawx3RgghaXI4BkaTKCgowFVXXQUAOOWUUzB8+HCcffbZ+PDDD9Oq17VT64svvohNmzbhhhtuwJ///Gd06dIFQ4cOxQsvvIBoVM5ISQghhBz2HGah4zWOPPJITJ8+PZGstnXr1sjKknfg3HBIKpvCwkLcdNNNWLNmDd5//318//vfx6hRo9ChQwfcfPPN+PLLL9NuGCGEEEIaH3V1dfjd736HTp064ZxzzsHxxx+Ps846C5s2bUqr3rScWrds2YLFixdj8eLF8Pv9OPfcc/HJJ5/g2GOPxYMPPoibb745rcYRQgghTQYvZLtNYIfkpZdeAgBUVVXhX//6V+Jz2WWXYfPmzfjqq68OqV7XC5JoNIqFCxdizpw5WLx4MU444QTcfPPNuOKKK5CXt8c56rnnnsNPfvKTw2pBYsVisOxkRzHjkzeYrKjT6UsLXexT7FZcc5iVjGJR9w+GizDcfjmSNayIPCZVdU6nTgAojzqd3nbG5JDVuwI5oj3Xlhvjg+wIGBIGMa50vlJwRgWA7XE5fPaOuNz2HRFn2yur5VDewUq5LVm7ZM+8eEhydHYxfwD93ivlpTmhhmXXws+7tEv4lBDx2vzUwo1HBb/OWJ7codx8eV61z5UdUrvkbHfYOoWdNgBoG5BDyuf5akS7Xxn0qOA0WmXL8y3PJ/dHC0tva07kcacjbWlMcVCvk+vwRbVJ4TT5Zd9i8b3XYH4ZzURls5dNmzbh1ltvxT//+U9P6nO9IGnfvj1s28bll1+O999/HyeddJKjzJAhQ9CyZUsPmkcIIYSQxkg0GsWKFSs8q8/1guQ3v/kNLrnkkgM6sLRq1Qrr1q1Lq2GEEEJIk6KZ7ZB4jesFyahRo+qjHYQQQkiT5nCT/U6YMAG9evXCySefjBNOOAGhkHyE7RWM1EoIIYQQB//6178wd+5cVFVVIRgM4thjj8UPfvAD9OrVCz/4wQ/gU/woDxUuSAghhBDi4N1334UxBp999hk++OCDxGfBggUoLy8HoEcsPxS4IEkV23k4aMVkL3Qr7vR890Vkb3if4oWuqQFs4ZJuw2praPUEIs6KgrvlygOV8oq5ukr2Odqa65Q3tA61FMvm+BS3eoUqX7Voz/I5A/hpoeB3KaqZzdFWov2bmjai/dvKlg5b3S55TFpulW9EzhZZDVHZWQnPLaGpZpTiPi2MvaBiUZUtipJMCte+p7xgVBoo3EoAQKBGU6/J5aWw9yYsD1aLLLmjhWF5vrUJ7nbYNDVN24Cs1Mm3FCWZsr8vpVPI8Sk3SEFS6gBATVhOj1CR7ZzPlTmysqeihVxHrFq+0bFayZ76C67B8tUdhj4klmWhR48e6NGjB6644oqE/auvvsLq1auxdu1az67FBQkhhBDiAYebD8mBOOqoo3DUUUdhxIgRntXp7QEQIYQQQsghwB0SQgghxCuayA5HY4QLEkIIIcQLDkMfkoaERzaEEEIIyTjcIUmVYADwJQ+X8Su5bARVgS+m5LKJanZFgRCQyrtzIdc8zrUcIpbtvGa4XG53ZIeSy6aFHFCnNJTvsIWUBCVxpeGVcVmt0jpQJdqDllPCpCkKyuOygmVzXUvR/mVFW9FeusPZz/AWWWlQ8LUsHfHVydIrSa2i3kvlry9LmW9avpBAtbOi0G53Ep5YlpJvR7j92l9O/jpF7aWpbLS/PiXpYkDuT9gvz89sZbAkdUuuonjJtbQ65HvvV/6cjkv9UW5PrZInJ88vP1ctAnLb84NOFVhOWO7P7my5P7FsWe0mzRXtHWkJ71o3+ZHSoTk5tdYHXJAQQgghXsAjm7TgkQ0hhBBCMg53SAghpAnz3Nc58FkGI7o6j15eWJcN2wAjjpSPZYi38MgmPbhDQgghTRifZfDculw8vy7Z3+mFddmYvy4HvoaKUkr+e2ST7qeZwh0SQghpwuzdGXluXW7i572LkUu7VuPHws4JIY0RLkhSxM7Ngu3fLy+D4rVu/M4/SSTlDQD46+RK/CH5zxo7INiVPT63nuVSu/fU47SHdstKg9wtct12QPaer7FyHLZ1cbkdu6OyUmdrtlPBAgD5IflFHBZUPDFlsMojSg6eamcOHgDYur1AtFsbnfW0/FK+9zlf7xTt1UfK+XOiLQSVjTzcqsTKUnLC+JV/y8KVgvJqp1yJppzwtVBUasKwaMowLTeNX8i/pNWt2m3lGWywxCips++i5IX1OYgZy7EY0RQ5fmVQfMoLLqgMelB4roI+pW6fog4SVYSALQjSpPxDAOAT7pv0DqsX6NSaFjyyIYSQw4ARXWsQsAxixkLAMtwZyQB7fUjS/TRXuCAhhJDDgOfXZScWIzFj4YV1LrJAE2+gD0la8MiGEEKaOM+vy8Zz63JxWdcqjOhag/nrcjB/3Z7jUO6UkKYCFySEENKE2X8xAvx3EcJFSQNDH5K04IIkReK5IViBZKdWKaS6ilFCxCsh5QOKs6sUrj4mhYmG7vSlhfLWyseE0OR+OXo0srfJDm+686HT4bGmKlcsu7kyLNq/ayE7mIazlBDswiGt5qhYWyM70sYqZHu4THbgLPh/TlvLTyrFstG2LUR7VbF8g6LCcGlOrdr5tBKZHIFa+QvBSucNDeyWw4TbIdkxWEO8FZpPoku76kReIwxYRD7RronKIf8rY3I/K22nvcqW57IUZh4A/Mq7JmjZiBgffty1Bhd0iaD2Pzc+DgvDukQQg4WI8aHW+FGrpEeoNXJ/tHQKUWVyRW2n3bUDsFZcuBWq076b+eMxjEOSHvQhIYSQJsyPu9ZieBdnHhkAuKhLHYZ3lX9HDh82bdqEK6+8EoWFhcjJycFJJ52E1atXJ35/9dVXw7KspE/fvn0z2GIZ7pAQQgghXpCBI5udO3fitNNOwxlnnIG//e1vaNeuHb766iu0bNkyqdw555yDOXPmJH4OheRd3kzCBQkhhBDiAZk4snnggQfQsWPHpMVGly5dHOXC4TCKi4vTa1w9wyMbQgghpJFRUVGR9Kmrk/2LFi5ciN69e+OSSy5Bu3btcPLJJ+OJJ55wlHvzzTfRrl07HH300Rg3bhzKysrquwuu4YKEEEII8QIP45B07NgRBQUFic+0adPES3799deYNWsWunXrhtdffx0TJkzAjTfeiKeeeipRZujQoZg7dy6WLl2Khx9+GCtXrsSZZ56pLnIyBY9sUiTWIggEkr3RLUUh44sLnvxKyGpfVAmtXCe7hfv9zmtq3uZGUd9oCgxVZZMlhMIXPOoBICSoLwAgt1RWYITLBZXNd3JDatooaoA82V6XnXpIfU0FFKyWx7DFDrl83reyXCV3vVNRE28hKy0qO8tqjUhLRU0ldF+bE5qaxqeFjlf8IQO1woApSjJbSUmgzTdpfmpl40qKBUkZBgCBarmekBAKP1Apz/HKakXtVSuro8pCztQGOT75edDCuEd9clu0MO62MAE0Nc2uuKxqK4870zoAQHlMDrhWHXPWXxeTb5ytpIewFLv2/mx0eOhDsnHjRuTn/3fuhMPyvLNtG71798bUqVMBACeffDI++eQTzJo1C1dddRUA4NJLL02UP/7449G7d2907twZr776KoYPH55mg72DOySEEEJIIyM/Pz/poy1I2rdvj2OPPTbJ1qNHD2zYsEGtu3379ujcuTO+/PJLT9ucLtwhIYQQQjzAQvohT9x+/7TTTsPnn3+eZPviiy/QuXNn9Tvbt2/Hxo0b0b59+0NoYf3BHRJCCCHECzKQy+bmm2/GihUrMHXqVPy///f/8Oyzz+Lxxx/H9ddfDwDYvXs3br31Vixfvhzr16/Hm2++ifPPPx9t2rTBxRdfnH6fPYQ7JIQQQogHZEL2e8opp+Cll17ClClTcO+996Jr166YMWMGrrjiCgCA3+/HRx99hKeeegq7du1C+/btccYZZ2D+/PnIy5OjXGcKLkgIIYSQJsywYcMwbNgw8XfZ2dl4/fXXG7hFhwYXJCkSy/IBweQTLl9UUXEIDvRazhotH46Wc0PO6SCfvBmffBoZVw7qFOEM4oIvlVa38cuVaOVDu5yDlbVVlkK0DMp1x3Jl9UAsW2mLMOu1exncLctSAjvlZGVWTL5vkXZOBUZVBzlSYl0r+QYpqVJcqYZUNY2i/gvUKfNWmM92WH6dxLPk/rhR2ShpVaClk4rlKHO/Wm5LqNJ530I75flT3VK+EVuy5b82cwLOOS7lUwL0PDEt/fIzoalsJLT8OeVxWTVTFnGqgwBgW52sJtpZ51TlVNXKc9yulW9oQFEXSuowF11vOJhcLy24ICGEEEK8ohkvKNKFTq2EEEIIyTjcISGEEEI8IBNOrYcTXJAQQgghXkAfkrTgkQ0hhBBCMg53SFLEDlqwg/t5gKsh9ZzrPMvI6gsrouXDSd2FXM9Z4y63CBSVjQk4y8c11YMseEEsrChkcpyKhVCFXEmwXMmHU7pbttfJ5SVlkwkoipxsWSUQK5CVCXWtlbw6Bc76I3lKHhZFTaMhKhAUkZZfFgchUK2ovSKpq73iQSVvyf7PzX9QczCJSjK5rDrfsuVrRhX1Tbjc2c+cUnlMYjlyP3cEU4/pUBtX8spky/OqZVC+cVmabEq6pjJYlcqE2xGRc9lsrZb7ub3KWb62Sn5+fFXy8+avVVQ2wqOszXFxh6GBdh14ZJMeXJAQQgghXsAjm7TgkQ0hhBBCMg53SAghhBAP4JFNenBBQgghhHgBj2zSggsSQgghxAu4IEkLLkhSxPgsRz4WLfeLJeXi0JQtCj4lJ4oVT322qvk//EruG0FNA8iKGi0PCbQ65DQaohqiLl+uw99Ovqg/IisTtPxB0gOvqziU/oTc9VMqrylENDRBhU8QZEmqBAAI1MhjEqpSVDa1Sr4mITeRHdJyKsltUXGhktDqjsviDkRz5fsWrHHac8vkPEbGL8/DSsgX3REtcNhq6uSy21vIypa8kJxsSMqToxFT8uTUxOSJWF4rq28qq2V77W5nn6xKJWdNpXwfAnLKHvgllU1jzGVD0oILEkIIIcQD6EOSHlyQEEIIIV7AI5u0oOyXEEIIIRmHOySEEEKIB1jGwDLpbXGk+/2mDBckKWKsPZ99USK2y6Gv3fm0wnLh1GrFlRjKluw4JzkkArrjrfEJodaVOjRnVzehv+NK2G81VLTtsrxYWDar983FvVcvqbx3fLL/InxRxfFUKB9QnFE1u79WmW/KPJTSDyg+k+oWtBTyHpCdd7W61fDzSvl4lnzjIi2cFWUrY5K/XnYk9SuOqlVVzkleWyk3cHO+7KDtz5U9moNB2bPT53O23bblwYrHZHusTn6YTY0S9n230x6sUpxXq0Qz/LWy3ZUDq3RJl+/fQ4ZHNmnRZI5sdu7ciVGjRqGgoAAFBQUYNWoUdu3apZaPRqP42c9+hp49eyI3NxcdOnTAVVddhc2bNzdcowkhhBCSEk1mQTJy5EisXbsWixYtwqJFi7B27VqMGjVKLV9dXY0PPvgAv/jFL/DBBx9gwYIF+OKLL3DBBRc0YKsJIYQ0F/aqbNL9NFeaxJHNv//9byxatAgrVqzAqaeeCgB44okn0K9fP3z++ec45phjHN8pKCjAkiVLkmyPPPII+vTpgw0bNqBTp04N0nZCCCHNBB7ZpEWT2CFZvnw5CgoKEosRAOjbty8KCgrw7rvvplxPeXk5LMtCy5Yt1TJ1dXWoqKhI+hBCCCGkfmkSC5LS0lK0a9fOYW/Xrh1KS0tTqqO2thZ33HEHRo4cifz8fLXctGnTEn4qBQUF6Nix4yG3mxBCSPOBRzbpkdEjm5KSEtxzzz0HLLNy5UoAgCVIWowxon1/otEoLrvsMti2jZkzZx6w7JQpUzB58uTEzxUVFejYsSMs28Cy95spbiZOCu1Mrluu3BcRpAmpR4/eU7WqKNGmg7Ru1TrvUn0jOOxrIflV3HrQu7hv6stBEzYpdklR4otoShi5jmC1XD642ylBCFTLsgRNNQNFYWUH5L9Z7KDTrimvfEq6A3+dpvYSyivPj62EiNfmuBauP5rrtPmi8kTMKZPHsOD/yXHPs7c5G1nVXn4gagvlBkbz5PIxOYq7OIbamPhiSjh9LVWBct+keasrxmS74x2b+IXTpKoFPVA5HjI8skmLjC5IbrjhBlx22WUHLNOlSxf861//wtatWx2/++6771BUVHTA70ejUYwYMQLr1q3D0qVLD7g7AgDhcBjhsJKQhBBCCFFg6Pj0yOiCpE2bNmjTps1By/Xr1w/l5eV4//330adPHwDAe++9h/LycvTv31/93t7FyJdffok33ngDhYWFnrWdEEIIId7RJHxIevTogXPOOQfjxo3DihUrsGLFCowbNw7Dhg1LUth0794dL730EgAgFovhxz/+MVatWoW5c+ciHo+jtLQUpaWliERcnnEQQgghB8N49GmmNIkFCQDMnTsXPXv2xODBgzF48GCccMIJePrpp5PKfP755ygvLwcAfPvtt1i4cCG+/fZbnHTSSWjfvn3i40aZQwghhKQKHVoPnSYRhwQAWrdujWeeeeaAZcw+jqBdunRJ+pkQQgghjZcmsyDJNJbtVFBoigrR7tXiKOZUT1hROSmIXygL6J7s2urcEiQyVlzJH6PkJ4mHFZWEICowLvPhuMkfo6HeSyWHhmbX1AP+OufgaqqZUKXcmPBO+agxsKvGaVTmhMmWZSmxPNmR21Zyv6h5awSkvgOAZcv99AlzSxvvmJL3yK36RpqfEcX/3TKyEib7O7l89hZn4pbsLXLZaCtZNlPbWr6mlIMHkPvj5p7t+YJs1lRTmvJMrkS5pJbzSsqd5KIOL94RKWFM+u/6ZvyHNBckhBBCiAdQZZMeTcaHhBBCCCGHL9whIYQQQryAgdHSggsSQgghxAMkX8NDqaO5wiMbQgghhGQc7pCkiC9m4NvP20hX2Tj33Fw7Kmm5b6T8DXFFTaOpbxS7FZXr8dU5FRj+PNnrP5Yjr3E1NUQ85LTHNYVEIPXcFYCuqJDuhaqaiSk5hVyoaQAgWCOobCrk+xDaKSez8W+vFO2myqmysbJk1YzJUexCbhoAMGqOm9SVML6o/KAEFJVRoNrZFn9Ebl9dXJlvOS7VN0I1MUVhpGH75WcinuWsPLRLnkBB5d5rdjtLfoXHs532eFiW2egKuNTvPQDEhfJa7iBbyzWkzDdJIaQqZ6QqGkxlAx7ZpAEXJIQQQogHUGWTHlyQEEIIIV7AOCRpQR8SQgghhGQc7pAQQgghHsAjm/TggoQQQgjxAjq1pgUXJCniixr4UpwpkvrG0vI/qJVoKhvhlM2vJKmIK1KQOjknik9R6wRrnOX9VXLOjXiuor7JladaLMfZds3rP6547Gs5OlSVjXB/NDWNP+LOHqhRFCVVTkWNv0q+D9ZuITcNoOanscJO6YjJUe5PtjyItkuVjdgOJUeSv04Zk91K/2PO8oEWsjzGF5PtdXF5UkRzRbOo9hLVGtDnp6b6iIeccz+SJ7cvUKv0U80HlPp7RX1OJOXeAexCaqs9dmFqqSobTTGntlEwKvdHeu61dwFpXHBBQgghhHgAj2zSgwsSQgghxAuoskkLqmwIIYQQknG4Q0IIIYR4AI9s0oMLkhSxbJOyY6pUTnU+U7bn1JDdgoOcus0VkD3ErJgS41sLQS84wWrh533VshdbYLfsrBfPcZaXwl4DQDzszvFSczKUHFh9UcUhs0YLp6/0P6KMreCoaWlbs4KTKgAYzR5wdtQOy2NoK+HDNQdGDdFxW0mloIWO91XVyXVXVDlsoV1yf3yxlnIdcdmpV/OatHKc90ILna7NKzfl43IEf/hicvt88nRTw/VLc8sojvJq6gXNwVSxS86ubp9NV+HgtaIu5qbnUGWTFjyyIYQQQkjG4Q4JIYQQ4gE8skkPLkgIIYQQL7DNnk+6dTRTuCAhhBBCvIA+JGlBHxJCCCGEZBzukKSIFTew9jvc0876JEWNmxDPwAFUD4JKIq6E/ba0uM2KukMK2Q0AVlRw5deUOrZShxB+HgD8QnlNleEPKQoRJQy1hiXUr6pmahV5g9Z/v6IEEtRRca0/QQ+UMKqKQYu3rc2J1C+pzR91CzoulzfVztD5pk5W5ASUOrLsVqLdsmX1jRRqPpotFlXDoWvzUFKOqOHalTeyKvDT3kGSXatDDcGu5V5QyqcZ3v2AuFDJSH1vKJWNpVzfbR3NFS5ICCGEEC9gpNa04JENIYQQQjIOd0gIIYQQD6DsNz24ICGEEEK8gCqbtOCRDSGEEEIyDndIUkTaitNy27jKZaOgeuELiho9R4VL9YmqtBD6oygqfKrSQrELbVc98DVnLzWfh2KX7oXSPC0XBwKy1EJS0wBAPEtQ2Wi5eYTcNAdCVHUJ90wrCwD+Om2wZLM059zOcQTlsbJynPIWE5FVWqa8QrQHlDxOGlLuG1+efB9iWbI9Hpb770WOF1V6oYqmUn/2tefEtRLGBeqxhPaacKEakuahUZ4Hr7GM0XNUuaijucIFCSGEEOIFNlxJlNU6mik8siGEEEJIxuGChBBCCPGAvUc26X7csmnTJlx55ZUoLCxETk4OTjrpJKxevTrxe2MMSkpK0KFDB2RnZ+P000/HJ5984mXXPYELEkIIIcQLjEcfF+zcuROnnXYagsEg/va3v+HTTz/Fww8/jJYtWybKPPjgg5g+fToeffRRrFy5EsXFxRg0aBAqKyvT6q7X0IeEEEII8YIMRGp94IEH0LFjR8yZMydh69Klyz7VGcyYMQN33nknhg8fDgD405/+hKKiIjz77LMYP358eu31EC5IUkVYueoqG8EryWUeCShKC1uwx0OKWkPz5NcECFrqCkHF4kZhBAA+F6oPtzk0VJQx98WFipTxtoyiplEUTLZyL6R7ZIdc9lPrjyBACSj5gHx1siRJU0dpSgsj5exxeX9sQXkEAL78XKfNp8zxWjnHjZQPBwD8O+R6wsIz64vIeW9iufIDFM3R1DfOgYmH5JupPZu2pvaqTyVMPTpXuj2WENuiqmyEolFXl2sUVFQkK8jC4TDC4bCj3MKFCzFkyBBccskleOutt/C9730PEydOxLhx4wAA69atQ2lpKQYPHpxU18CBA/Huu+82qgUJj2wIIYQQD9gbHiLdDwB07NgRBQUFic+0adPEa3799deYNWsWunXrhtdffx0TJkzAjTfeiKeeegoAUFpaCgAoKipK+l5RUVHid40F7pAQQgghXuDhkc3GjRuRn5+fMEu7IwBg2zZ69+6NqVOnAgBOPvlkfPLJJ5g1axauuuqqRDlrv51nY4zDlmm4Q0IIIYQ0MvLz85M+2oKkffv2OPbYY5NsPXr0wIYNGwAAxcXFAODYDSkrK3PsmmQaLkgIIYQQD7Bsbz5uOO200/D5558n2b744gt07twZANC1a1cUFxdjyZIlid9HIhG89dZb6N+/f9p99hIe2aSIpA/XQmVrYdUltDDhmmOnLYSO15wj7aBiDyjOrprfnNBN7aFRnVo1J9iYdD2PQicr1di2MOYur6mG9lecD6V7oToXK6iOwdL9UZxa/dVyCHar1p3Xnwk7Xx1a2Hw7KHfUKHY71/mXoOWXy1ph2enYqlP6Uyv3X3oKQ1p6hIj8l6ovKrclJji7xgRHV+BAz6ziBOs21LwbMhHBXHNUdfEOkupoMKfWDKhsbr75ZvTv3x9Tp07FiBEj8P777+Pxxx/H448/DmDPUc2kSZMwdepUdOvWDd26dcPUqVORk5ODkSNHptdWj+GChBBCCGminHLKKXjppZcwZcoU3HvvvejatStmzJiBK664IlHm9ttvR01NDSZOnIidO3fi1FNPxeLFi5GXl5fBljvhgoQQQgjxgkMIbCbW4ZJhw4Zh2LBh6u8ty0JJSQlKSkoOvV0NABckhBBCiAcw22960KmVEEIIIRmHOySEEEKIF2TAqfVwgguSdNBUNopdQiupqziEZiiqmbhblY2yXyZ7uGuh45W6Fbvld9Zj2UpZ7UF1EUIa0PrpTpagKWRUlY1UXlFSqfNHCx0vKGr8Soh4q6pWrqSySi6vtTEn22Gz85w2ALC0uawpzAT1jU8L4KSFVNdUOVFB1gUl3UONrMgJaGOizcOY0J9suX1xTTHn8plV1Tde4OJRUdNAeNEMF+8DoyjUPMcASDfkfvNdj3BBQgghhHgBfUjSgz4khBBCCMk43CEhhBBCvMDAAx8ST1rSJOGChBBCCPECOrWmBY9sCCGEEJJxuEOSBrqXt4sVrlZUcU6X1DeaskNXgmh1K3bBpqlpfEqHtCFxlUjKizrcookEtPvjRlSgDIrWHy2XjU/IuaLlcrGqakS7XblbtBtFreIT7GpeGU1N49dkXVJZZWCVfDgq2jWle6EpRLT7FpWVTX5FZSTWEdPGyt0z7gnqHE9d8WN8Wg4ed6qhdNEUUJ5jI/08QvX5PmvkcEFCCCGEeABVNunBIxtCCCGEZBzukBBCCCFeQKfWtOCChBBCCPECLkjSgkc2hBBCCMk43CGpDyQvaY+WfqInu1tveJcKEdFDXfMkd6mEsQRhgi+q5clR7GpCIBd/abhQDvznC6JVVxml7nqv9V8dFyGXjVUn52wxUVl9Y7QcL7Z840xMKK/VEVWUOpqKxU3+E+UeG59y45RcMWIdqrIl9Rw8AMRnX1VSCfcSAKCo2lSEfEiu1Wjae0LL1yTk27GVfFqaOshNzh71kZLs9ZdSJxnukKQFFySEEEKIF1D2mxZckBBCCCEeQNlvetCHhBBCCCEZp8ksSHbu3IlRo0ahoKAABQUFGDVqFHbt2pXy98ePHw/LsjBjxox6ayMhhJBmzF4fknQ/zZQmsyAZOXIk1q5di0WLFmHRokVYu3YtRo0aldJ3X375Zbz33nvo0KFDPbeSEEJIs8U23nyaKU3Ch+Tf//43Fi1ahBUrVuDUU08FADzxxBPo168fPv/8cxxzzDHqdzdt2oQbbrgBr7/+Os4777yGanKTRFerCGU11YzLPCz+iPMLvjq5Eq0OS8jlckAEFYeuqEhdUXDAelws/dWcNYoCwxcRpEpxOa+KhhVUXgVKLhuxjrhyH5QcL6rznjRWbh39tJQ1Wn+EfDt2UFPTyHZbU99IZhf5bfZUrswJTXkmzCHt/lgu/wG0ldxEVkgYW2Xi2yG5bku7b1IOL+2ZknIhNZTKhqRFk9ghWb58OQoKChKLEQDo27cvCgoK8O6776rfs20bo0aNwm233YbjjjuuIZpKCCGkucIjm7RoEjskpaWlaNeuncPerl07lJaWqt974IEHEAgEcOONN6Z8rbq6OtTV1SV+rqiocNdYQgghzRQvFhTNd0GS0R2SkpISWJZ1wM+qVasAAJa0zW6MaAeA1atX4//+7//w5JNPqmUkpk2blnCcLSgoQMeOHQ+tc4QQQghJmYzukNxwww247LLLDlimS5cu+Ne//oWtW7c6fvfdd9+hqKhI/N6yZctQVlaGTp06JWzxeBy33HILZsyYgfXr14vfmzJlCiZPnpz4uaKigosSQgghB4eRWtMiowuSNm3aoE2bNgct169fP5SXl+P9999Hnz59AADvvfceysvL0b9/f/E7o0aNwtlnn51kGzJkCEaNGoVrrrlGvVY4HEY4HHbYjWU5QrFrodk1xyy5sIuykJ1GNWdULcCOpXh4aY+BeE3FmU51yIwoTq21zsr9NXIIcp9itzQHTs0RUnA8NYqjnh2SHxFfSCmv1KM5u0pIDokA4BMcgPeUF0LHK46KmlOnJcx5AIDiqGkFg3J5iZh8fyzFLr2QVYdZLeR/QHFezVIuKdw3LUS8do9VJ1g37wPtWdbCuGvDIvxCc/6WUg8cCL/y7EtofVfvj1aP5KiqOAZL17RdPH9pYRukfeRClU3jpkePHjjnnHMwbtw4/P73vwcAXHfddRg2bFiSwqZ79+6YNm0aLr74YhQWFqKwsDCpnmAwiOLi4gOqcgghhBDS8DQJlQ0AzJ07Fz179sTgwYMxePBgnHDCCXj66aeTynz++ecoLy/PUAsJIYQ0a4ztzaeZ0iR2SACgdevWeOaZZw5Yxhzk7E3zGyGEEELShj4kadFkFiSEEEJIo4Y+JGnRZI5sCCGEEHL4wh2SFDE+wXtbC//sIu5JRlBVOYpdUtloIeIV4YSqvqlzfsFfHZXbUVUr22sj8kW1rU9BPWFCsmrECssxrk2W/OiI4bOhKzbEOrQw4XWKykgKza4prHxKO5R+IqC8IoRQ826VE6rKJuK8/0awHbBu5X5qmKAU9lxRKmmKFzVcvYv3gcs/jo3PpSxHKqo9J7b8kKtqPEF9pKeYUGpxE+PdxX1wpXRKBx7ZpAUXJIQQQogXGHiwIPGkJU0SHtkQQgghJONwh4QQQgjxAh7ZpAUXJIQQQogX2Db0ENFu6mie8MiGEEIIIRmHOySp4rMcqhrd2975C03B4okiR9viUxqotcWVg7vWH1Wpo6g+BLuoGgFgKUoLU1MjXzQmq1KkZEOamsaKynWYuJz7xYrJ6g4xV45275W/kCxBkQRAVKWof2UpuWy0nDVGUNMAEFU2esIVZVJo+Wmk3ER1dXLVEUVhFVLup6Iy8gn90fIYuZ37YlHlT0FNlaL+6agp/aTyWu4XLSeXckk1R5ZwP1U1jZqDR7moG6SGN5TwkUc2acEFCSGEEOIFXJCkBY9sCCGEEJJxuENCCCGEeAFDx6cFFySEEEKIBxhjw6SZrTfd7zdluCAhhBBCvMCY9Hc4mrEPCRckKWIsy6me0XJUCN7sxuUkdaN4aVS5c1wojzS7qEgBYKkKEcWuqXLigjJD+6tEUxTIpVXliCXlftHUDZpCRlH8iOojLU+MNle0MVRUNkZQoBhFwaL2R8ESVTaymsZo+WYUVY5PU2SFneooX0Tru9xPO6CppiSjy2fWbY4b4T6r803zJLTdqaYkhYwVT11dd2C70Jbm++/2YQsXJIQQQogXGA98SLhDQgghhJC0sO0DBJNJkWbsQ0LZLyGEEEIyDndICCGEEC/gkU1acEGSIsZyOppqTmKSXXMc05w91TDPgu+h6gCr+aS5LC/ZbcUH0lLsmsOfHXZ+IR6Xw35DcZDzaQ+w5sApOUhq26Ra+HnFyVILqy06mSr3WA23rTi1im3U2hFQHDW1+RaUb6hk15yRDeQ6LKW8ZJXCkgOAT7lvRnFoVp2OhbHVQvVbIbkOvzKGcalHynOioZ0CqE6jgl2dm16dEAjOy+p9iymOwcoU9wWcbTeK37aYukMp6zXGtmHSPLJpzrJfHtkQQgghJONwh4QQQgjxAh7ZpAUXJIQQQogX2Cb9lMXNeEHCIxtCCCGEZBzukBBCCCFeYAzS9hJuxjskXJCkigWn2sSFKkVV5Cjh51XVg1SP63Dtcnk3qhyfUthWZlQ8rFxSaoxxOS2VMbQCmrpDCHuuqGY09Y1RQrOrAcH9ggJBUwEpodaNpviRQq0rqOH3tbYo4eBtFyobbR/W8mu/cLbFp4U91+qorpXtGoIaRAxhD8AXle3asyy13SjqGA3tFMAXU1RDYn+0kO9K5W7/YRSaooaC1xRzMSUVgCQkU9+RgiJHqddrjG3E67uqgwsSQgghhKSFsZH+Dgllv4QQQgghGYM7JIQQQogH8MgmPbggIYQQQryARzZpwQXJQdi7Wo3FBCc5xbHRp9glbJ/sZBiPyvaY4DgYV5y7bM3xVAtbrXlkCgt2NWyz5pQW1cKhOx8+ozjqaU6dJi6HCbfidbLddtqNrYQa114OSi4AS42pL5R369RqK4Ou2aVmKN0xccVBULHHhTlutBNgzXdVmSu+uPM++7R7LNxLADC24qSsIDlfmrh8L23FITMek1+n0jOuOpYruHZqFew+LWy+YtfmoYaUIsAoIeK1sdLee3HBYTiuPIOSH208uuf9Xd+7DzFE046LFoPyLmoGcEFyECorKwEAK5dOy3BLCCGEpENlZSUKCgo8rzcUCqG4uBjvlL7mSX3FxcUIhZScXocxlmnOB1YpYNs2Nm/ejLy8PF2m2cBUVFSgY8eO2LhxI/Lz8zPdnEYLxyk1OE6pwXFKjcY4TsYYVFZWokOHDvApUvZ0qa2tRSTibmdOIxQKISsry5O6mhLcITkIPp8PRxxxRKabIZKfn99oHvjGDMcpNThOqcFxSo3GNk71sTOyL1lZWc1yEeEllP0SQgghJONwQUIIIYSQjMMFSRMkHA7j7rvvRjisxGMnADhOqcJxSg2OU2pwnMihQqdWQgghhGQc7pAQQgghJONwQUIIIYSQjMMFCSGEEEIyDhckhBBCCMk4XJA0EXbu3IlRo0ahoKAABQUFGDVqFHbt2pXy98ePHw/LsjBjxox6a2NjwO04RaNR/OxnP0PPnj2Rm5uLDh064KqrrsLmzZsbrtENwMyZM9G1a1dkZWWhV69eWLZs2QHLv/XWW+jVqxeysrJw5JFH4rHHHmuglmYWN+O0YMECDBo0CG3btkV+fj769euH119/vQFbmxnczqW9/POf/0QgEMBJJ51Uvw0kTRYuSJoII0eOxNq1a7Fo0SIsWrQIa9euxahRo1L67ssvv4z33nsPHTp0qOdWZh6341RdXY0PPvgAv/jFL/DBBx9gwYIF+OKLL3DBBRc0YKvrl/nz52PSpEm48847sWbNGgwYMABDhw7Fhg0bxPLr1q3DueeeiwEDBmDNmjX4+c9/jhtvvBEvvvhiA7e8YXE7Tm+//TYGDRqE1157DatXr8YZZ5yB888/H2vWrGngljccbsdoL+Xl5bjqqqtw1llnNVBLSZPEkEbPp59+agCYFStWJGzLly83AMxnn312wO9+++235nvf+575+OOPTefOnc1vfvObem5t5khnnPbl/fffNwDMN998Ux/NbHD69OljJkyYkGTr3r27ueOOO8Tyt99+u+nevXuSbfz48aZv37711sbGgNtxkjj22GPNPffc43XTGg2HOkaXXnqpueuuu8zdd99tTjzxxHpsIWnKcIekCbB8+XIUFBTg1FNPTdj69u2LgoICvPvuu+r3bNvGqFGjcNttt+G4445riKZmlEMdp/0pLy+HZVlo2bJlPbSyYYlEIli9ejUGDx6cZB88eLA6JsuXL3eUHzJkCFatWoVo9PBMjX4o47Q/tm2jsrISrVu3ro8mZpxDHaM5c+bgq6++wt13313fTSRNHCbXawKUlpaiXbt2Dnu7du1QWlqqfu+BBx5AIBDAjTfeWJ/NazQc6jjtS21tLe644w6MHDmyUSUGO1S2bduGeDyOoqKiJHtRUZE6JqWlpWL5WCyGbdu2oX379vXW3kxxKOO0Pw8//DCqqqowYsSI+mhixjmUMfryyy9xxx13YNmyZQgE+M8NOTDcIckgJSUlsCzrgJ9Vq1YBACzLcnzfGCPaAWD16tX4v//7Pzz55JNqmaZCfY7TvkSjUVx22WWwbRszZ870vB+ZZP/+H2xMpPKS/XDD7TjtZd68eSgpKcH8+fPFRfHhRKpjFI/HMXLkSNxzzz04+uijG6p5pAnDJWsGueGGG3DZZZcdsEyXLl3wr3/9C1u3bnX87rvvvnP8tbKXZcuWoaysDJ06dUrY4vE4brnlFsyYMQPr169Pq+0NSX2O016i0ShGjBiBdevWYenSpYfF7ggAtGnTBn6/3/EXbFlZmTomxcXFYvlAIIDCwsJ6a2smOZRx2sv8+fMxduxY/PnPf8bZZ59dn83MKG7HqLKyEqtWrcKaNWtwww03ANhzrGWMQSAQwOLFi3HmmWc2SNtJ04ALkgzSpk0btGnT5qDl+vXrh/Lycrz//vvo06cPAOC9995DeXk5+vfvL35n1KhRjpfjkCFDMGrUKFxzzTXpN74Bqc9xAv67GPnyyy/xxhtvHFb/6IZCIfTq1QtLlizBxRdfnLAvWbIEF154ofidfv364S9/+UuSbfHixejduzeCwWC9tjdTHMo4AXt2RsaMGYN58+bhvPPOa4imZgy3Y5Sfn4+PPvooyTZz5kwsXboUL7zwArp27VrvbSZNjAw61BIXnHPOOeaEE04wy5cvN8uXLzc9e/Y0w4YNSypzzDHHmAULFqh1HO4qG2Pcj1M0GjUXXHCBOeKII8zatWvNli1bEp+6urpMdMFznnvuORMMBs3s2bPNp59+aiZNmmRyc3PN+vXrjTHG3HHHHWbUqFGJ8l9//bXJyckxN998s/n000/N7NmzTTAYNC+88EKmutAguB2nZ5991gQCAfO73/0uad7s2rUrU12od9yO0f5QZUMOBBckTYTt27ebK664wuTl5Zm8vDxzxRVXmJ07dyaVAWDmzJmj1tEcFiRux2ndunUGgPh54403Grz99cXvfvc707lzZxMKhcwPfvAD89ZbbyV+N3r0aDNw4MCk8m+++aY5+eSTTSgUMl26dDGzZs1q4BZnBjfjNHDgQHHejB49uuEb3oC4nUv7wgUJORCWMf/xViOEEEIIyRBU2RBCCCEk43BBQgghhJCMwwUJIYQQQjIOFySEEEIIyThckBBCCCEk43BBQgghhJCMwwUJIYQQQjIOFySEEEIIyThckBDSDJk9ezYGDx6cVh1lZWVo27YtNm3a5FGrCCHNGUZqJaSZUVdXhyOPPBLPPfccBgwYkFZdkydPRkVFBf7whz941DpCSHOFOySENDNefPFFtGjRIu3FCABcc801mDt3Lnbu3OlBywghzRkuSAhponz33XcoLi7G1KlTE7b33nsPoVAIixcvVr/33HPP4YILLkiyXX311bjoooswdepUFBUVoWXLlrjnnnsQi8Vw2223oXXr1jjiiCPwxz/+Mel7PXv2RHFxMV566SVvO0cIaXZwQUJIE6Vt27b44x//iJKSEqxatQq7d+/GlVdeiYkTJx7QP2TZsmXo3bu3w7506VJs3rwZb7/9NqZPn46SkhIMGzYMrVq1wnvvvYcJEyZgwoQJ2LhxY9L3+vTpg2XLlnneP0JI84I+JIQ0ca6//nr8/e9/xymnnIIPP/wQK1euRFZWllh2165daNWqFd5+++2kI5urr74ab775Jr7++mv4fHv+TunevTvatWuHt99+GwAQj8dRUFCAP/zhD7jssssS3508eTLWrFmDN954ox57SQg53OEOCSFNnF//+teIxWJ4/vnnMXfuXHUxAgA1NTUAIJY57rjjEosRACgqKkLPnj0TP/v9fhQWFqKsrCzpe9nZ2aiurk63G4SQZg4XJIQ0cb7++mts3rwZtm3jm2++OWDZwsJCWJYlOqEGg8Gkny3LEm22bSfZduzYgbZt2x5i6wkhZA9ckBDShIlEIrjiiitw6aWX4r777sPYsWOxdetWtXwoFMKxxx6LTz/91LM2fPzxxzj55JM9q48Q0jzhgoSQJsydd96J8vJy/Pa3v8Xtt9+OHj16YOzYsQf8zpAhQ/DOO+94cv3q6mqsXr067SBrhBDCBQkhTZQ333wTM2bMwNNPP438/Hz4fD48/fTTeOeddzBr1iz1e+PGjcNrr72G8vLytNvwyiuvoFOnTp7ENCGENG+osiGkGTJixAicfPLJmDJlSlr19OnTB5MmTcLIkSM9ahkhpLnCHRJCmiEPPfQQWrRokVYdZWVl+PGPf4zLL7/co1YRQpoz3CEhhBBCSMbhDgkhhBBCMg4XJIQQQgjJOFyQEEIIISTjcEFCCCGEkIzDBQkhhBBCMg4XJIQQQgjJOFyQEEIIISTjcEFCCCGEkIzDBQkhhBBCMs7/B8E42cR0nY9fAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import acoular as ac\n", "import matplotlib.pyplot as plt\n", "\n", "dataset = tf.data.TFRecordDataset(\n", " filenames=[\"/tmp/dataset.tfrecord\"],).map(parser)\n", "\n", "# create an iterator from the dataset\n", "dataset_iter = iter(dataset)\n", "data = next(dataset_iter)\n", "\n", "sourcemap = ac.L_p(data['sourcemap']).T\n", "loc = data['loc']\n", "f = data['f'][0]\n", "extent = d1.config.grid.extend()\n", "\n", "plt.figure()\n", "plt.title(f\"Beamforming map (f={f} Hz)\")\n", "plt.imshow(sourcemap,extent=extent,origin='lower')\n", "for l in loc[:2].numpy().T:\n", " plt.plot(l[0],l[1],'x')\n", "plt.colorbar(label=r'$L_p$ / dB')\n", "plt.xlabel('x (m)')\n", "plt.ylabel('y (m)')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3.9.15 ('py39')", "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.9.15" }, "orig_nbformat": 4, "vscode": { "interpreter": { "hash": "8b84133aa5d27198834684dc5cf37286f31547fcb562f18c04d9e25d99e7281e" } } }, "nbformat": 4, "nbformat_minor": 2 }