diff --git a/internal/weather_pred.ipynb b/internal/weather_pred.ipynb index ab87a14..b3619ce 100644 --- a/internal/weather_pred.ipynb +++ b/internal/weather_pred.ipynb @@ -415,6 +415,158 @@ "rmse = np.sqrt(mean_squared_error(y_test, y_pred))\n", "print(f\"Test RMSE: {rmse}\")" ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Code for the slides of the presentation\n", + "\n", + "Just code for a slide generating the idea of creating the training data. \n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA94AAAJOCAYAAABBfN/cAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAkVNJREFUeJzs3Xd0FOXbxvFrk02vkBAgCQSk9y4iLYDSlKKoYEFARFF/igWxC4iIBRF7QQEbYKUoCqhUpQgC0puhBkJIQjopuzvvH3mzsiaEJLDZBL6fcziHPPPszD2zs+XaeWbGZBiGIQAAAAAA4BRuri4AAAAAAIBLGcEbAAAAAAAnIngDAAAAAOBEBG8AAAAAAJyI4A0AAAAAgBMRvAEAAAAAcCKCNwAAAAAATkTwBgAAAADAiQjeAAAAAAA4EcEbAHDRzZ49WyaTSbNnz3ZoN5lMio6OdklNZWnlypUymUyaMGGCq0sp0vDhw2UymXTo0KEKNe9LDdsKAC59BG8AKCdWrFihwYMHq0aNGvLy8lLlypXVqVMnvfHGG8rKynJ1ebiM1apVSyaTqdj/KlqAzMzM1EsvvaTWrVvL399f3t7eioyMVOfOnfXUU0/pn3/+cXWJAIAKzuzqAgDgcmexWPTAAw/oo48+kp+fn/r06aO6desqJSVFy5Yt06OPPqoPPvhAixcvVt26dV1d7gXZvXu3fH19XV2G01155ZXavXu3QkNDXV3KRfHwww8rOTnZoW369OlKSUnR+PHjC/QPDg7WlClT9OSTTyoiIqKMqiydtLQ0derUSdu2bVPdunV1xx13KDg4WEePHtXOnTv18ssvq06dOqpTp47Taqgo2woAUHoEbwBwsaeeekofffSR2rVrp/nz5zt8+bZarXrhhRf0wgsvqE+fPvrrr78UGBjowmovTMOGDV1dQpnw9fW9pNb14YcfLtA2e/ZspaSknHM4fXBwsKpXr+7cwi6C6dOna9u2bRo5cqRmzJghk8nkMP3gwYPKzs52ag3Vq1evENsKAFB6DDUHABfav3+/pk2bpsqVK+uHH34ocMTL3d1dEydO1G233aYDBw5o6tSpDtNr1aqlWrVqKSMjQ48++qgiIiLk5eWl5s2b69tvvy10mTk5OZo2bZpat24tPz8/BQQEqHPnzlq0aFGJ609KStLo0aNVtWpV+fr62n88OJfCzvHOP781JiZGU6dOVf369eXj46PGjRtr3rx5kqTc3Fw9//zzql27try9vdW8eXMtXbq00GWkpaVp/PjxatKkiXx8fBQcHKzevXvr999/L9A3OjpaJpNJFotFkyZNUu3ateXl5aX69evrvffeK9A/KytLr7/+ulq0aKGgoCD5+/urTp06uvXWW7V9+3Z7v6LO8d65c6cGDx6ssLAweXl5qXbt2nrkkUeUlJRUoG9Jn999+/Zp3Lhxat26tUJCQuTt7a369evrySefVHp6eqHby1kKO2/57O2ydu1adevWTQEBAapSpYruv/9+nTlzRpK0ZMkSdezYUX5+fqpataqeeOIJWa3WQpezcOFC9ejRQ5UqVZK3t7eaNm2qqVOnnrP/f61bt06S9L///a9A6Jak2rVrF/ojSnx8vB555BHVrVtXXl5eCg0N1aBBg7Rjx44CffOfx+TkZD300EOqUaOGzGaz/RoIRZ3jvXr1avXr10+hoaHy8vJSvXr19OyzzyozM7NA3++++05du3ZVWFiYvL29VaNGDfXu3VsLFiwo1rYAADgPR7wBwIVmz54tm82me+65R1WrVj1nv+eee05z5szRzJkz9cILLzhMy83NVc+ePZWUlKQbb7xRmZmZmjdvnm655RYtWbJEPXv2tPfNzs5W7969tXLlSrVq1UojR45Ubm6uFi9erAEDBujtt9/W//73v2LVnpmZqejoaG3fvl0dOnRQ165ddfToUQ0ePNhhmcX16KOPasOGDerXr5/c3d01b9483XbbbapUqZLeffdd7dixQ3379lVWVpbmzJmj/v37a8+ePapdu7Z9HklJSerSpYt27typzp07q1evXkpJSdHChQvVrVs3ffPNNxo4cGCBZd96663asGGD+vTpI3d3d3399dd64IEH5OHhoVGjRtn7DRs2TF9//bWaN2+uESNGyMvLS0eOHNGKFSvUq1cvNWvWrMh1XLt2rXr27Kns7GzddNNNqlWrltavX6/p06dr8eLFWrdunUJCQhweU5Ln9/vvv9cnn3yibt26KTo6WjabTevXr9crr7yiVatWafXq1fLw8Cjxc3OxbdiwQa+88op69eqle++9VytWrND777+v1NRUDRgwQMOGDVP//v3Vvn17LV68WK+++qoCAwP1zDPPOMzn6aef1pQpUxQZGalBgwYpMDBQq1ev1uOPP64NGzbom2++OW8tlStXliQdOHBALVu2LFb9//zzj6KjoxUbG6uePXtq4MCBio+P13fffaelS5fqt99+U/v27R0ek52dre7duystLU39+vWTp6dnka95Sfrggw90//33q1KlSurXr5+qVKmijRs3avLkyVqxYoVWrFghT09PSdL777+v+++/X9WrV9cNN9ygkJAQnThxQn/++acWLFhQ6H4PAChDBgDAZaKjow1Jxi+//HLevuHh4YYk48iRI/a2qKgoQ5IxYMAAIzs7297+66+/GpKMXr16Oczj6aefNiQZEyZMMGw2m709NTXVaNu2reHp6WnExsYWq/bx48cbkoxRo0Y5tC9dutSQZEgyZs2a5TBNktG1a1eHtmHDhhmSjHr16hnx8fH29vXr1xuSjODgYKNTp05Genq6fdpXX31lSDIeeughh3nddttthiRj5syZDu1xcXFGjRo1jCpVqhhnzpyxt3ft2tWQZLRv395ISUmxt+/Zs8cwm81GgwYN7G3JycmGyWQy2rZta1gsFof5WywW4/Tp0/a/V6xYYUgyxo8fb2+zWq1GvXr1DEnGkiVLHB7/1FNPGZKMkSNHOrSX9Pk9duyYQ798EydONCQZX3zxhUN7/rY/ePBggcecT35t51LYvPO3iyRjwYIF9vacnByjefPmhslkMkJDQ40///zTPi01NdUICwszQkJCjNzcXHv7smXLDElGnz59jIyMDHu7zWYzRo8ebUgyvv322/Oux4IFCwxJRmBgoPHEE08Yv/32m5GUlFTkY66++mrDbDYby5Ytc2jfu3evERAQYDRr1syhPX9b9ezZ08jMzCwwv8K21c6dOw2z2Wy0atXKSExMdOg/ZcoUQ5IxdepUe1vr1q0NT09Ph9dQvoSEhCLXBwDgfARvAHChhg0bGpKMPXv2nLdv+/btDUnGhg0b7G35X+hjYmIK9I+KijIqV65s/9tqtRqVKlUy6tat6xC68y1atMiQZLz99tvFqr127dqGp6enceLEiQLTevToUeLgPXv27ALzueKKKwxJxqpVqxzaLRaL4eHh4TCvU6dOGe7u7kaPHj0Krfett94yJBk//PCDvS0/eC9fvrxA//xpqamphmEYRkpKiiHJ6NixY6HzP1thwXv16tX2oPhf6enpRkhIiOHj4+MQnEvy/BYlMTHRkGQMHz7cod1VwTs6OrpA/xdeeMGQZIwYMaLAtLvuuqvAvPr371/gh6h8+T+SDBo0qFjr8uqrrxr+/v72HwUkGXXq1DEeeOABY9++fQ59N2/eXOiPJPkeffRRQ5Kxfft2e1v+tvr7778LfUxh2+qhhx4yJBlr1qwp0N9qtRpVqlQx2rRpY29r3bq14efn5/ADEACg/GCoOQBUEIZhSFKB81CDg4Mdhlvni4yMtJ+/Kkl79+7V6dOnFR4erokTJxbof+rUKUnSnj17JElbt24tcG5orVq1NHz4cKWlpengwYNq3LixqlWrVmBenTt31m+//Vai9WvVqlWBturVqysmJqbAEGB3d3eFhYUpNjbW3rZx40ZZrVZlZWUVem71/v377et3/fXXO0xr3bp1gf6RkZGSpOTkZAUEBCgwMFC9e/fWkiVL1Lp1a910003q3Lmz2rdvbx/uW5QtW7ZIUqH3Mffz81Pbtm21dOlS7du3T02bNrVPK+7zK+XtI7NmzdLs2bO1Y8cOpaSkyGaz2acfP378vHWWhXM915IKHe6dPy02Nla1atWSJK1fv15+fn765JNPCl2Gj4+PfV8+n8cff1yjR4/WkiVLtHbtWm3atEkbNmzQu+++q08++URfffWV+vfvb1+uJMXFxRW6n+Uvc8+ePQ7Po7e393lPRThb/nKWLFmiX3/9tcB0Dw8Ph/W75ZZb9OSTT6pp06YaMmSIoqOj1alTJwUHBxd7mQAA5yF4A4ALVatWTXv27NHRo0fVoEGDIvseO3bM/pizBQUFFdrfbDY7hK78i3ft3LlTO3fuPOdyMjIyJOUF7/8G9K5du2r48OFKSUmRJIWFhRU6j/Odu1qYwq7Wbjabi5yWm5tr/zt//f744w/98ccf51xO/vqdrbBtmL/ssy/S9e233+qll17S3Llz7ecbBwQE6K677tJLL71U5K3SUlNTJZ172+Q/r/nbtqja8us7+/mVpIceekjvvPOOatSoof79+6t69ery8vKSJE2cONHpV+curtI815IKPN8Wi6XQH5HyFfZcn0tAQIBuvvlm3XzzzZLynoenn35a7733nkaOHKnY2Fh5enra97PFixdr8eLFxV52WFhYoRdvO5f85UyePLlY/ceNG6eQkBB98MEHmjZtml5//XWZzWb17dtX06dPL/THGwBA2eGq5gDgQldffbUknffo8J49e3T8+HFFRESoRo0apVpWfqAZNGiQjLxTjQr9N2vWLEl5V1r+77SVK1c6zCs+Pr7QZZ08ebJUNV6I/Joee+yxItevsPtOF5efn58mT56smJgYxcTE6JNPPlHDhg315ptv6pFHHilWfefaNvntpb1dXHx8vN599101b95ce/bs0ezZszVlyhRNmDBBo0ePLtU8y7PAwECFhIQU+VwfPHiw1PMPCgrSO++8o6ioKCUkJNivWp///Lz99ttFLnvYsGEO8ytJ6D57OampqUUu5+z533333dq0aZNOnTql+fPn68Ybb9SiRYt03XXXFfsq7wAA5yB4A4ALDRs2TG5ubpoxY4Z9qHdh8o963XXXXaVeVqNGjRQYGKhNmzY5HDksjcDAQNWuXVsHDhxQXFxcgelr1qy5oPmXRrt27WQymQoMv3aW2rVr66677tKqVavk7+9/3tux5Q+vzv/x4myZmZnatGmTfHx8zjvy4VxiYmJkGIauueaaAkfeXfF8OFv79u2VmJhoP4XAGUwmU4FtmX+1cmfvZ/nLyR9yXhIhISEaOHCgvvrqK3Xv3l27d+/WgQMHLnaJAIASIHgDgAvVr19fY8aMUWJiovr166cTJ044TLfZbJo0aZK++OIL1alTR2PHji31ssxms+677z4dPnxYY8eOLTR879ix45xHsf9r6NChysnJ0fPPP+/QvmzZshKf330xVKtWTbfccovWrl2r1157zeFoYL4NGzYUev/j4jh16pT+/PPPAu2nT59Wdna2fHx8inx8x44dVadOHf38888FztmdMmWKEhISdOuttxbrfPHCREVFScq7ZdnZQ9CPHTumJ598slTzLM8eeughSXk/RiUmJhaYHhcXp927d593Ph9++KE2btxY6LTvv/9ee/bsUXBwsP187SuvvFLt27fX3Llz9dVXXxV4jM1m06pVq0qyKoW6//77ZTab9eCDD+ro0aMFpicnJ9uvGyBJS5culcViceiTm5trH7J+vv0TAOBcnOMNAC726quvKiUlRTNnzlS9evV03XXXqU6dOkpNTdWyZcu0f/9+1atXTz/99FOphyHnmzhxojZv3qy33npLixcvVteuXVWlShXFxsZq+/bt+vvvv7Vu3bpznrt9tnHjxun777/XjBkztHPnTnXp0kVHjx7V119/reuuu67I81+d5b333tPevXs1btw4ff755+rQoYOCgoJ09OhR/fXXX9q/f79OnDhR5LnY5xIbG6v27durSZMmat26tSIiIpSYmKiFCxcqNzdX48aNK/Lxbm5umj17tnr16qW+ffvq5ptvVlRUlDZs2KDly5erTp06evnll0u76qpevboGDRqk7777Tm3btlWPHj108uRJ/fjjj+revbtiYmJKPe/yqHfv3nruuec0adIk1a1bV71791ZUVJQSExN14MABrVmzRi+++KIaNWpU5Hx+/vlnjR49WnXr1lXHjh0VHh6u9PR0bd26VWvWrJGbm5vee+89+7nykjR37lx169ZNQ4YM0fTp09WmTRt5e3vryJEjWrdunU6dOqWsrKwLWr+mTZvqvffe03333acGDRqob9++9veFmJgYrVq1SsOHD9cHH3wgSRo8eLB8fX3VqVMnRUVFKTc3V7/88ot27dqlwYMHq2bNmhdUDwDgwhC8AcDFzGazPvnkE91666366KOP9Pvvv2v+/Pny8/NTo0aNNHr0aN13330X5YiVl5eXfv75Z33yySf67LPP9O233yo7O1tVq1ZV48aNNXr06GJfednPz0+rVq3SU089pfnz52vz5s1q0qSJvvrqK6WkpLgkeFeuXFlr167VO++8o6+++kpffvmlbDabqlWrphYtWui5555TaGhoqeZdq1YtTZgwQcuXL9evv/6qxMREhYaGqnXr1nrkkUfUs2fP886jU6dOWr9+vV544QUtW7ZMKSkpCg8P10MPPXRBteWbPXu2atWqpe+++05vv/22atasqUcffVRPPPFEqY+kl2cvvPCCunTporfeeku//fabkpOTFRISotq1a2vChAm6/fbbzzuPV155RR07dtQvv/yi1atX20edREREaNiwYXrwwQfVpk0bh8fUrl1bW7Zs0bRp07RgwQLNnDlT7u7uql69urp06aKbbrrpoqzfqFGj1LJlS02bNk2rV6/WokWLFBQUpJo1a+qRRx5xOI98ypQpWrJkif7880/98MMP8vPzU926dfXhhx9e0CkqAICLw2QUNhYPAAAAAABcFJzjDQAAAACAExG8AQAAAABwIoI3AAAAAABORPAGAAAAAMCJCN4AAAAAADgRwRsAAAAAACcq1X28bTabjh8/roCAAJlMpotdEwAAAAAA5YphGEpLS1N4eLjc3Ep2DLtUwfv48eOqUaNGaR4KAAAAAECFdfToUUVGRpboMaUK3gEBAZKk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KXrsscckScHBwQX2s+TkZL355puKiooq8INOcHBwGVXqfEOHDtVTTz2l559/Xr/++qurywFQQgRvoAK6+uqr9ffff2vmzJkFgndOTo6+/PJL9e3bV4sWLXJRhf+qWbOm0+Z97bXXavTo0frggw/0yiuv6Omnn5YkZWdn684775TVatWnn34qHx+fYs3vp59+0pEjR/T88887rWbgUtWyZUu1bNnSoW327NlauHChoqOjz3l6woWOynG1K6+8UqtXr1bnzp0d2tesWaMePXrovvvu04ABA+Tl5eUw/Y477tAjjzyi3377Tddcc01Zllxh5ObmaubMmerYsaOuuOIKSXlB+r/70qFDh/Tmm2+qVq1al/RpMGazWUOGDNFbb72l/fv3q169eq4uCUAJMNQcqIB8fHw0ePBg/fDDD0pISHCYtmjRIiUkJGjEiBGFPvb48eMaP368rrrqKoWFhcnLy0u1atXS/fffr/j4eIe+tWrV0qeffipJql27tn3o3tlHrvL/jo2N1fDhw1WtWjW5ublp5cqVkgqe452VlaVmzZrJw8OjwLDtM2fOqHHjxvL09NTGjRuLtS1ee+01XXHFFZo4caK2bdsmKW8Y544dOzR27Fh16NChWPOR/h0qO2jQoGI/pjDz58/Xrbfeqrp168rX11dBQUHq3Lmzvvvuu3M+5sMPP1STJk3k7e2tGjVqaNy4ccrKyjrnubXbtm1T3759FRAQoKCgIPXt21c7duwocqjiwoUL1aNHD1WqVEne3t5q2rSppk6dWugpC2fOnNGTTz6pGjVq2PvOmDHjQjaL3dnniW/evFm9evWyr8cNN9xQaO352+Ho0aMaPHiwQkJC5Ofnp+jo6EKHXRZ1bYH/bqPhw4fbXy8jRoxwGKaa78SJExozZozq1asnHx8fVa5cWc2aNdP999+v1NTUC98oxXTw4EHdfffdqlmzpry8vFS9enUNHz5chw8fLtC3NPvhxx9/rKZNmxbYD53lXOd45z9/2dnZevrpp1WzZk35+PioTZs29iN9aWlpeuihhxQRESFvb2916NBBmzZtKnQ58fHxeuSRR1S3bl15eXkpNDRUgwYN0o4dOy54HW688cYCoVuSOnfurG7duikpKUnbt28vMD3/KPisWbOKvayZM2dqwIABqlWrlry9vVW5cmX16tVLK1asKNC3NK8zKe99ol27dvLx8VHVqlU1atQonT59utg1jh8/XiaTSd98802h09977z2ZTCa98cYb553XkiVLFBcXp5tvvrnYyz/bvn37NG7cOLVu3VohISHy9vZW/fr19eSTTyo9Pb1A/7P3u+eff15169aVh4eHQ5j//vvv1bZt2wLb51znwOfk5GjatGlq3bq1/Pz8FBAQoM6dOxf4Ybw4n7dS3n5jGEaZnxYD4MJxxBuooO666y599NFH+vLLLzVmzBh7+8yZMxUWFqbrr7++0MetXr1ar7/+unr06KH27dvLw8NDW7Zs0fvvv6+lS5dq8+bN9mGfDz/8sGbPnq2///5bY8aMsQ/Z+++Xi8TERHXo0EGVK1fW4MGDlZOTo8DAwEKX7+3trblz56pdu3a67bbbtHXrVnvfRx55RLt379aUKVPUrl27Ym0Hf39/zZo1S9HR0Ro2bJjefPNNTZ06VU2aNNELL7xQrHlIkmEYWrlypRo2bHjBQxOfeuopeXp6qlOnTqpevbpOnTqlRYsW6aabbtJbb72lBx980KH/888/r0mTJql69eq65557ZDab9c0332jPnj2Fzv/vv/9W586dlZmZqRtvvFF169bVX3/9pU6dOqlFixaFPubpp5/WlClTFBkZqUGDBikwMFCrV6/W448/rg0bNjh8SbbZbOrfv79+/fVXNWvWTLfddpsSExP1yCOPqFu3bhe0bc62adMmvfbaa4qOjta9996rLVu2aMGCBdq+fbt27Nghb29vh/6nT59Wx44d7dspNjZWX331lbp166alS5eW+uJfAwcOVHJyshYuXKgBAwYUOGqbmZmpjh076tChQ+rZs6duuOEG5eTkKCYmRrNnz9a4cePOub9fTBs2bFCvXr2UkZGhfv36qW7dujp06JC+/PJL/fzzz1q3bp39qKBU8v1w0qRJev755+1hwsPDQ1999ZV2797t9HU7l8GDB2v79u3q37+/zpw5oy+//FLXX3+91q5dq3vvvVdZWVm66aabdOrUKX311Vfq1auXDh486PB8/PPPP/YfB3v27KmBAwcqPj5e3333nZYuXarffvtN7du3t/efPXu2RowYoWHDhl1wuPHw8JCUd6Tyv8LDw1WzZs1CQ/O5PPDAA2rRooWuueYaValSRbGxsVqwYIGuueYaff/99xowYECBx5TkdfbZZ59p2LBhCgwM1NChQxUcHKwff/xR11xzjXJycuTp6XneGu+++25NnjxZM2bMKDQwf/zxx/L09NSdd9553nn99ttvkqSrrrrqvH0L8/333+uTTz5Rt27dFB0dLZvNpvXr1+uVV17RqlWrtHr1avtzdLYbb7xRf//9t3r16qXKlSvbX1czZ87UyJEjFRwcrDvvvFNBQUH66aefdO211yo3N7fAvLKzs9W7d2+tXLlSrVq10siRI5Wbm6vFixdrwIABevvtt/W///1PUvE/b9u0aSNPT08tX768VNsEgAsZACqMgwcPGpKMXr16GYZhGE2aNDGaN29un37s2DHD3d3deOyxxwzDMAxJRoMGDRzmcfLkSSMtLa3AvD/99FNDkvHiiy86tA8bNsyQZBw8eLDQmiQZkowRI0YYFoulwPSuXbsahb3VvPPOO4Yk47bbbjMMwzAWLFhgSDK6detmWK3WIrZC4R5++GFDkuHl5WWYzWZj06ZNJXr8zp07DUnG7bffXuj0/O2wbt26887rn3/+KdCWlpZmNGvWzAgKCjIyMjLs7Xv37jXc3d2NmjVrGgkJCQ79mzRpYkgyunbt6jCvTp06GZKMb775xqF9/Pjx9ufj7Odr2bJlhiSjT58+Dsu22WzG6NGjDUnGt99+a2+fNWuWIcno3bu3w3O6bds2w9PT05BkjB8//rzbwTD+ff5PnDhhb1uxYoW9znnz5jn0Hzp0qCHJmDt3rkN7fv+hQ4caNpvN3r5y5UrDZDIZdevWddhvzrXfGUbh+3T+Os+aNatA/0WLFhmSjEceeaTAtNTUVCM7O7vIbVCU/G1x7733FtkvJyfHqFWrlhEQEGBs3brVYdqaNWsMd3d34/rrr3doL8l+uH//fsNsNhsRERHGyZMn7e0pKSlGgwYNCt0PiyN/u55rf8l/Txs2bJhDe/7z17FjRyM9Pd3ePm/ePEOSERwcbNx8881Gbm6ufdorr7xiSDKmTZvmMK+rr77aMJvNxrJlyxza9+7dawQEBBjNmjUrtOb/1lRShw8fNry8vIxq1aoV+t5oGIZxww03GJKMmJiYYs2zsH7Hjx83wsPDjXr16jm0l/R1lpKSYgQGBhp+fn7G3r177e05OTlGly5dDElGVFRUseq87rrrDJPJVOBzY8uWLYYkY/DgwcWaT7t27Qw3N7fzvsby96P/7qPHjh0r9LETJ040JBlffPGFQ3v+fteyZUsjMTHRYdrp06cNf39/IyAgwOG1lZuba1xzzTWFbp+nn37akGRMmDDB4X0rNTXVaNu2reHp6WnExsba28/3eZuvVatWhoeHh5GVlVVkPwDlC0PNgQpsxIgR2rZtm/766y9JeUdqrFar7rrrrnM+JiwsTP7+/gXahw4dqsDAwFJdsMXT01Ovvvqqw8XNzueBBx5Qv379NGfOHL366qsaOXKkKleurM8++0xubiV/a5owYYK8vLyUnZ2t//3vf2rTpk2JHn/s2DFJUtWqVUu87P86+6hjPn9/fw0fPlwpKSkOw+jnzp0rq9Wqxx57TCEhIQ79n3322QLzOXz4sH7//Xe1atVKN910k8O0cePGqXLlygUe884770jKG87u6+trbzeZTHr55ZdlMpk0d+5ce/tnn30mSZo8ebLDc9qsWTMNHTr0vOtfXF26dNHgwYMd2vL33cJONXB3d9fkyZMdhoB37dpVffv21YEDB5x+pd/CrhUQEBBQrKOAF+rHH3/UoUOHNG7cuAKjGjp16qQBAwbop59+chj2XpL9cM6cObJYLHr00UcVFhZmbw8MDCx0PywrkydPlp+fn/3vm266SR4eHkpOTtbUqVMdjiTfeuutkvJGhOTbsmWL1q5dq2HDhunaa691mHf9+vU1atQo+5HffDfccIN95E1p5ebmaujQocrOzi7yvTH//Sb//ed8ateuXaCtevXqGjRokPbv31/oKQfFfZ0tWLBAqampuuuuu1S/fn17u4eHhyZPnlys+vLde++9MgxDM2fOdGjPP11l1KhRxZrPsWPHFBwcXOrXWERERKGPzT/KfK7Pu4kTJxZ4L124cKHS09N19913O7y2zGazJk2aVGAeNptN77//vurWravnn3/e4X0rICBAzz//vHJycvT999+XeL2qVq2q3NzcAqeHASjfGGoOVGD5VzidOXOm2rRpo9mzZ6t9+/Zq3LhxkY/7/vvv9eGHH2rz5s06ffq0wzm+x48fL3EdtWvXVmhoaIkfN3PmTDVv3lxPPPGEJOm7775TZGRkiecj5Z3rnZ2dLUn6+eefNWXKlAJDlYuSmJgoSapUqVKpln+2+Ph4vfzyy/r55591+PBhnTlzxmH62ds4PyRcffXVBeZTWFtR/X19fdWiRYsCQ1fXr18vPz8/ffLJJ4XW6+Pj4zCs/e+//5avr69at25doG/nzp3POZ+SKmz++c9/cnJygWlRUVGqUaNGoTUtXrxYW7duVadOnS5KbWfr0qWLqlWrpilTpmjr1q267rrr1KlTJzVr1qzMrkadfz2EPXv2FHrxqLi4ONlsNu3bt09t27aVVLr98FznKrtKq1atHP52d3dXWFiYMjIyCly4sXr16pLybu+VL3+7xcXFFbrd8vf7PXv2qGnTppLy7phwIVdZt9lsuuuuu7R69WqNGjWqyB+r8sPdf6/VcS4xMTGaMmWKli9frtjYWPt7Xr7jx48rKirKoa24r7Oi9oEOHToUOlz+XPr27avIyEjNmjVLEyZMkJubm7KysjRnzhxdccUV6t69e7Hmk5iYWOhrvrgMw9CsWbM0e/Zs7dixQykpKbLZbPbp5/q8K+yuFkW991555ZUFts/evXt1+vRphYeHa+LEiQUec+rUKUk65ylFRTl7v7mQ7QOgbBG8gQosLCxMffv21dy5c9W/f38dOHBAY8eOLfIxr7/+usaOHasqVaqoZ8+eioyMtB/Jmz59eoEvcsVR2qPEoaGh6ty5s77++mtFRUWpf//+pZrPxo0b9fLLL6tx48bq1auX3njjDT333HN67bXXij2P/G3w33BSUklJSWrXrp2OHDmijh076pprrlFwcLDc3d3tt1Y6exvnH6GsUqVKgXkVtl2L6n+uxyQlJclisRT65S9fRkaG/f8pKSnn/DJ3MUYE5Css3OR/eS3sgm9nH4ktrKaUlJSLVtvZgoKCtG7dOo0fP14//PCDfvrpJ0l54eWpp57S/fff75Tlni0pKUmS9OWXXxbZL/95LOl+mL/tCtvGF/M5L6nCzp03m81F7ju5ubn2tvzttnjxYi1evPicyzl7/78QhmFo1KhR+uKLL3THHXfogw8+KLJ//vvN2SNRzuXAgQO68sorlZqaqm7duqlfv34KDAy0X8xy1apVhb5/F/d1VtQ+4O7u7jAi53zc3d01cuRITZw4UUuWLFHfvn317bffKjk5WY8//nixf7Dy8fG5oPfkhx56SO+8845q1Kih/v37q3r16vary0+cOPGcn3clfe91c3Mr8ONz/r63c+dO7dy585w1lmbfK8l+A6D8IHgDFdxdd92lhQsXauTIkfLx8bEPtyyMxWLRpEmTFB4erq1btzp8gTAMQ6+++mqpaijtUb9vvvlGX3/9tUJCQnT48GGNHz++xEMas7KyNGzYMJlMJn366adq3ry5li1bpmnTpunGG28s9lXN87dF/pel0vrkk0905MgRvfjii3rmmWccpr388stauHChQ1t+sDh16lSBI1UnT54sMP+z+xfmXI8xmUzFPqoWFBR0ziGMhc2/rJyvprMDRv7pChaLpcCRqNIE9PwrDlutVm3fvl3Lli3TW2+9pQceeECVKlUq8nV3MeQ/7z/88MM5L5x4tpLuh/nbLj4+vlj7YUWRv93OvoiVs9hsNt19992aNWuWbr31Vs2ePfu8p83kv9+c64e0s73xxhs6ffq0vvjiC91+++0O00aPHq1Vq1aVvng57gP/ZbValZiYqIiIiGLP7+6779aLL76ojz/+WH379tXHH38ss9lc4Ar2RalSpUqxh+H/V3x8vN599101b95c69atcwipcXFxRf4QWdhnWlHvvTabTQkJCQ7bJ7//oEGD9O2335ZqHc6lJPsNgPKDc7yBCq5v376qVq2aYmNj7VerPpeEhASlpKToqquuKvCBvWnTpkKPLOSfm1jYEcgLceTIEd1zzz0KCwvT1q1b1bZtW7388ssl/vL4zDPPaPfu3XriiSfUtm1beXp62r/wjhgxoti3QmrSpInc3Ny0f//+0qyO3T///CNJhR69X7NmTYG2/PN1Czs/ubC2ovpnZmY6nN+ar3379kpMTCz2urVo0UKZmZnavHlzgWmFrUNZOXz4sI4ePVqgPb+ms69Gnn/KwNnDjqW8L8iFbaPi7ufu7u5q2bKlxo0bZz8v/r+3BXKG/Ktur1u3rlj9S7sfFjbNlc/5hSrpdiuts0P34MGD9fnnnxfrmhd79+6Vh4dHse5lfq7n1Gaz6Y8//ihd4Wcpah9Yt26dLBZLieYXGRmpPn366Mcff9Qff/yh1atXq2/fvgoPDy/2PJo1a6asrKxShe+YmBgZhqFrrrmmwJHh0uzTRb33/vnnnwW2T6NGjRQYGKhNmzY5jMIoSnHfh/bu3avw8PBCr+kBoPwieAMVnNls1qJFizR//vzzHi0OCwuTj4+PNm/erMzMTHv76dOnC9xaKF/+B3tpjzoUxmaz6Y477lBycrJmz56tyMhIzZkzRz4+Pho6dGix7xn7+++/a/r06WrevLmef/55e3vbtm01btw47d27t9gXhgoODlbz5s21adMmGYZRqvWSZD9a+Pvvvzu0z5kzxz5E+WxDhgyRm5ubpk2bZj/PXMobfljY8xkVFaWOHTtqy5YtBY6ivPbaa4UesX/ooYck5Y2OOHsZ+eLi4hxuGZV/Tuozzzzj8AVw+/bt+vzzzwuudBmxWq165plnHJ6fVatW6aefflLdunUdzr3MP8/5v7eDmjZtmg4ePFhg3kXt5zt27Cj0olX5R4LPvuha/n2pC7uf74UYMGCAatasqWnTpmn16tUFpufm5jrscyXdD2+77Ta5u7tr2rRpDkc8U1NT9eKLL16s1ShzV155pdq3b6+5c+fqq6++KjDdZrMV+LEvJSVFe/bs0YkTJ4q1DJvNppEjR2rWrFm6+eab9cUXXxQrdOfm5mrLli1q27ZtsYYMn+s5feWVVy7K/cgHDBigwMBAzZw5U/v27XOos7QX2Lv33nuVm5trv/d0cS+qlq9r166S8oJtSeVvr7Vr1zqc133s2DE9+eSTJZ7fgAED5O/vr48//tjhPcRisei5554r0N9sNuu+++7T4cOHNXbs2ELD944dOxxeb8X5vD1y5Iji4uLs2wZAxcFQc+AS0K5du2Ld99rNzU3333+/Xn/9dbVo0UL9+vVTamqqfv75Z0VFRRV6JKJ79+6aOnWq7r33Xt18883y8/NTzZo1ddttt5W63smTJ2vNmjV66KGH1KdPH0lSvXr19NZbb2nkyJG65557HO4rXZiMjAwNHz5c7u7u+vTTTwtcuTb/fNw33nhDN954Y6EXxPmvgQMHasKECdq4cWOhF9eR8u51fK7hfS+88IKGDh2qV155RQ8++KBWrFihqKgobdu2Tb/++qtuvPHGAlewbdCggZ588km99NJLatasmW6++WaZzWZ9//33atasmXbs2FFguOrbb7+tLl26aMiQIRo0aJDq1KmjzZs3a/369erSpYtWr17t8JjevXvrueee06RJk1S3bl317t1bUVFRSkxM1IEDB7RmzRq9+OKLatSokSRp2LBhmjNnjpYsWaJWrVqpT58+SkpK0ty5c9WzZ0/9+OOP592WztC8eXOtXLlSV111lbp3767jx49r3rx58vDw0IwZMxzWecSIEXr11Vc1YcIEbd26VXXq1NGmTZu0Y8cOde3atUDY6tChg3x8fDR9+nSlpqban+Mnn3xSv/76qx577DF17NhRDRs2VEhIiGJiYrRo0SL5+Pg4DGHO/4JfkgtRSdKKFSvOOQS3Z8+euu222/Ttt9+qT58+6tq1q3r06GG/GNiRI0e0Zs0ahYSE2C/UVNL9MP/Ky+PHj1fz5s11yy23yGw267vvvlOzZs20d+/eEq1PeTJ37lx169ZNQ4YM0fTp09WmTRt5e3vryJEjWrdunU6dOuUwMmb+/Pkluo/3Cy+8oNmzZ8vf31/169cv9IeKgQMHFrg//OrVq5Wdna2BAwcWaz1Gjx6tWbNm6cYbb9TgwYMVEhKi9evXa/PmzbruuuuKPIe9OIKCgvTWW29p+PDhateunYYMGaKgoCD9+OOP8vHxsV+8riT69u2rGjVq6OjRo4qIiLC/3xfXgAED9Mgjj9j325LIv9r7d999p7Zt26pHjx46efKkfvzxR3Xv3l0xMTElml9wcLCmTZume+65R61bt9bgwYPt9/H28vJSeHh4gffqiRMnavPmzXrrrbe0ePFide3a1X7/9e3bt+vvv//WunXr7OfVF+fz9pdffpGkYu83AMoR193JDEBJ/fc+3uejQu7jnZOTY0yePNmoV6+e4eXlZdSsWdN49NFHjbS0NCMqKqrQ+7S++uqrRr169QwPD48C90r979//9d/7Ka9bt84wm81G06ZNjTNnzhTof9NNNxmSjBkzZhS5bvfff78hyZg4ceI5+/z111+G2Ww26tevb2RmZhY5P8P49z7oDz74YIFp+fdXLerfli1bDMMwjK1btxo9e/Y0KlWqZAQEBBhdu3Y1fv311yLvFf3ee+8ZjRo1Mjw9PY3IyEhj7NixxtGjRw1JxoABAwr037Jli9GrVy/7fWX79OljbN++3bj++usNScbp06cLPOaXX34x+vXrZ1SpUsXw8PAwqlWrZnTo0MGYNGmSceTIEYe+GRkZxrhx44yIiAjDy8vLaNy4sfHhhx/a7w18Me7jXdg8znVf5/z97PDhw8bNN99sVKpUyfDx8TG6dOli/P7774Uue/PmzUaPHj0MX19fIzAw0BgwYICxf//+c94rd/HixUa7du0MHx8f+3NqGIaxa9cuY8yYMUarVq2MkJAQw8vLy7jiiiuM4cOHG7t27XKYx8KFCw1JxjPPPFOs7XP2vZbP9W/MmDH2/seOHTPGjBljf/0GBgYajRo1Mu6++27jt99+c5h3afbDGTNmGI0bN3bYDzMzM112H+/CnOt9yjDO/X6UlJRkPPvss0bTpk0NHx8fw9/f36hXr55x2223Gd9//32hNRf3Pt7FeW8obFsPHz7c8PT0NOLj44u1HMPI2186duxoBAQEGMHBwUbfvn2Nv/76yxg/frwhyVixYoVD35K+zgzDMObPn2+0adPG8PLyMsLCwoy7777bSEpKKnK7F+Wpp54yJBnPPvtsiR9rGIbRq1cvIyQkxMjJyTlnn3PdxzstLc147LHHjFq1ahleXl5GvXr1jEmTJhk5OTmF9i9qv8v3zTffGK1atXLYPomJiYa/v7/RokWLAv0tFovx4YcfGh07djQCAwPtn7u9e/c23n//fYf71BtG0Z+3hmEY0dHRRlhY2HnvbQ6g/DEZxgWMqQSAS8xtt92mZcuW6fDhww73D3aFX3/9Vddee63GjRunV1555bz9rVar6tSpozNnzlToC2IVxmQyqWvXrlq5cqWrSynS2LFj9f777+vw4cOlusUeLg/JycmqWbOmbrrppgL3ur7U9O3bV0uWLFFMTEypTsFYtmyZevXqpXnz5hW4H3l5ceDAAdWrV0+33HJLoac0XMzlNGjQQOPHj3c4vQpAxcA53gBwlsmTJys9PV3vvvtumS3z1KlTBS6mk5ycrKeeekpSwSGFFoul0CuUv/zyyzp8+DBDEF1ozZo1GjVqFKEbRXrjjTdktVo1adIkV5fiVDt37tSSJUvUu3fvUl/3oGfPnrr22ms1adIkh3O1XeH06dMFbkF25swZPfLII5KcP/x70qRJqlq1qh577DGnLgeAc3CONwCcpXbt2vr000+Lfeuti+HLL7/U1KlT1b17d4WHh+vEiRNasmSJ4uPjNXz48AK3REtPT1dERISuvfZa1a9fX7m5udqwYYM2btyo6tWra8KECWVWOxxt2LDB1SWgAqhUqZI+++yzEt2eqyKZM2eO9u7dq88++0ySCr34WEm8/fbbmjt3rk6cOOHSbbZq1SqNHDlSPXv2VM2aNZWQkKDly5fr0KFD6t69u1OPyFssFtWrV0933nmny0djASgdhpoDgIv9+eefmjx5sjZu3KikpCS5u7urUaNGGj58uO6///4CF+zJycnRww8/rOXLl+v48ePKyspS9erV1adPHz333HOX5Jf5ijLUHIAUHR2tNWvWKCoqSs8995xGjBjh6pIuiv379+u5557T2rVr7ffzrlu3rgYPHqyxY8fK29vbxRUCKM8I3gAAAAAAOBHneAMAAAAA4EQEbwAAAAAAnKhUF1ez2Ww6fvy4AgICZDKZLnZNAAAAAACUK4ZhKC0tTeHh4QWuwXM+pQrex48fV40aNUrzUAAAAAAAKqyjR48qMjKyRI8pVfAOCAiwLzAwMLA0swAqtH+2HtSjXce7ugzAJbLDfXXivqauLgNwidDAFA3puNbVZQBlzpJj04/T9ivILUv3jAuRpyejXnH5yUi36aarD9vzcEmUKnjnDy8PDAwkeOOy5O8fILPJw9VlAC5hdfOUG7fNwWXK7JMlH/9SfX0CKrTcbKvSEi2ymazy9TfJy4tLReHyVZrTrXnFAAAAAADgRARvAAAAAACciOANAAAAAIATEbwBAAAAAHAigjcAAAAAAE7EZTkBAAAAFM1kUkBlDwW6W2QStxIDSorgDQAAAKBIHp5uGvFSXdXzPOnqUoAKiaHmAAAAAAA4EcEbAAAAAAAnIngDAAAAKJIlx6Z5Uw7qnRcTlJtjuLocoMLhHG8AAAAARTIMQ/GHs5RhypXNMCQusAaUCEe8AQAAAABwIoI3AAAAAABORPAGAAAAAMCJCN4AAAAAADgRwRsAAAAAACfiquYAAAAAzsvbz12+7hy3A0qD4A0AAACgSB5e7rrn9fqq53nS1aUAFRI/WQEAAAAA4EQEbwAAAAAAnIjgDQAAAKBIlhybvnv9sD58NVG5OYarywEqHM7xBgAAAFAkwzAUuz9TyaYc2QxDksnVJQEVCsEbuATtNDbKoly1MF1dpsvdavyhNCUrV9kyy1OVFaZ6aiYvk0+Z1oHLW/y8ubJlnVG14XeV2TJzk5KU/OsvOnPggKxpqXIPDJJ/69aq1OMamcx81KJsffbkbp1Js+jed5uV6XKXfHBYO1Ym6tiedJk9TJq6sXOZLh8AyjO+DQC4aCqpimqroTzlrWyd0X5t0zatUzt1d3VpgFPlxsfLMAyFDrpJHqGhyok7oYRvv5GRk6OQfv1dXR5QJiw5NrXuXUW1WwZq3XcnXF0OAJQrBG/gMnTY2KfjOqQzypCHPFVF1VVXzWU2/fuWEGvEKEa7laschaiqghWqg9qtaNOAc843ylTf/n8f+amW0VB/a61shk1uJi4pgfIhedUqpW36U5bEJLn5+sivcRNVvu56uXl52fukbliv078sky0zUz71G8i79hVK/nWZak2aXOg8fRs2lG/Dhva/PUJClHvqlFLXrSV4o9z5bdZRrf8+TgnHzsg3yEPNuoVo4Ngr5O3372fAH18f10/vHVZGcq4ad6qsOm2C9PN7h4o8in39Q7UlSeu+J3QDF1PYd2m64sUEbVhfS4bXv0P8G90XJ6uPSfumVXVhdSgugjdwGTLJpAZqKR/56YwytEdbdEDb1FCtJUnJRoJ2a7PqqZlCFa4kxStGO0u0jFwjR3E6oiCFELpRrpjcTAodcIPMlSvJkpSkhO+/U9LiHxV64yBJUtbBg0r47ltV7nudfJs01Zn9+3R66ZISL8eWlSU3X9+LXT5wwUxu0s3P1FXlSG8lHsvSVxP3acHUGA0Zn/fj6T+bUzR3wj4NfOwKNeseqr3rTuvHNw+6uGrg8pVwnZ/qTExQyK8ZSrjOX5JkTrKq8vIM7Zgd7uLqUFx8GwYuQzVN9VTZFCYfk58qm8JUR010Usfs04/qgEJVTVGmBvIzBaiGqY5CVK1Y895vbNNyY75WaZGylKkWKtvzzIHzCercRT5168qjcoh86tZTpV59lP73Vvv0lD9+l2/DhgqO7ibPKlUUdHVH+TZoeO4ZFiI3IUEpf/yuwKs6XOTqgQvXfVgN1b+qkkIjfdTgqkq6fkxtbf453j591RfH1KRzZV0zsqaq1vZVl9si1LhLZRdWDFzebN5uih/gr6rfptnbwhamKbuaWSlXebuwMpQER7yBy1CSEa9D2qMMpcoiiwzZZJNNVsMid5NZGUpXmBx/QQ1UJSXo/MMHo9RA4aqtLGUqRru0UxvV0ugok4mrn6J8OHPggJKX/6qckydly86WrFYZFotsOdly8/RS7ql4+TV1vCiVV82ayty9q1jzt6Sk6MQnM+TfvLkC21/ljFUALsi+9ae19KMjOnEgQ1npVtmshnKzbcrOtMrL110nD55Ri2tCHR4T1SxQO1YmuqhilBdmT5M8+Dx3ibghgWo14Jg84yzKqWZW1W/SdHJQgMTzUWEQvIHLzBkjQ1v1uyJ0heqoiczyVLIStFt/ySab3CVJpb8/p6fJS57ykp8C5GcE6Hf9pBQlKVghF2sVgFLLPZ2kuE9mKKDD1arUq4/cfH2VdTBGCd98LcNqy+tkSAVuk2MU7zVhSUnRiQ/fl3fNKIUOuvmi1g5cDImxWXrv3u3qNCRc1z9US75BHvpnc4q+fGavrBabJHcZhsF3eRTg4eWu+99qqHqeJ11dymUpo4mX0ht5Kuz7NJ3u4iu/vTna+XF1V5eFEiB4A5eZVJ2WIUP11cJ+FPqkccyhj58ClKrTBR5XWjZZS/1Y4GLKPnpMhs2mkOv7yeSWd7ZVxlnDzCXJIyxM2UePOD7umONrpDCWlBSd+OA9eUZGqsrgIfb5A+XJkR1psloN3fhEHbm55X0GbF4S79Cn2hW+OrQtzaHt8A7HvwGUvZODAxX+SYq84ixK7uijnHCiXEXCswVcoizKVZqR7NDmIU/5yl+GjLzzuI3qSlGiYhXj0K+G6mqTVuqwsU9VVF1JOqVExRW5vBQjSalKUrBCZZaHzihDMdopH/lxtBtlzpaVpezYWIc2d19feYSESDabUv/4Xb6Nmyjr0EGlrl/n0C+oYycdf/9dJa9aJb/GjXXmwAFl7tld5HA+S0qKjn/wnszBwQq5vr+s6en2aebAwIu7ckAxnEmz6uhux7DsF+Sh0JreslkMrfoiVs26heifzSn6fd5xh35d74jUG3ds0W+zjqpZtxDtXZ+sXasTzzukNel4ljJScnX6RLZsVtmXX6Wmj8MV0wGUTvyAANV+KVHVvkrV3te5knlFw7sgcIk6rVPaoF8d2qorSk1M7VTPaK5D2qsD2qFKClVdNdVObbT3CzaFqpHRWjHarX+0UyGqqpqqp6P655zLc5e74hWrGO2SVRZ5ylshqqamukpuJnenrSdQmKx//lHs9GkObf5t2ipsyK2q3K+/kleuUNLPP8m79hWq3KevTs2ba+/nXbu2QgfdpNO/LNPppT/Lp34DBXXpqtQ/fj/n8s7s2ytLQoIsCQk68uILDtOueO31i7tyQDHs/zNZL9/wl0Nb+4FVdefLjTToyTr6ZcYRLZwWo7ptg9T/0Sv02RN77P3qtA7SrRPq66d3D+mHNw+qcafK6j68hlZ9GfvfxTj48a2D2rDg32HI+csf82kL1W9f6SKuHVzBkmPTwhlHFeKerjvuqyQPT85HKGvWADcl9PZT5RWZSrzWz9XloIRMhlHME9fOkpqaqqCgIKWkpCiQX/JxGdq/OUb3t33C1WWUqV3GX8pUqtqaurm6FLhYdoSfYsc0d3UZZerUN18r91S8wu//n6tLgYuFBSVraJc1ri6jzH353F6djMnUo1+2cnUpcJHcbKtmPbxDfqZsTXyvqry8OJ3GFZrecVyZdT0VMyH0/J1x0WWk2dSn+cFS5WBeMQAKddjYqzQjWZlGuo4YB3RCh1RdtVxdFlAmkleuUPbx43m3Bft9jdL+2iT/Nm1dXRZQZn795IiO7UlX/OFMrfz8mDYsiFP7gQxtBVzFnGxVlR/SFLzujE4M5cBnRcRQcwCFStFpHdI+WZUrH/mrgVoqwlTb1WUBZSL76FElr1wpIztL5pAQhQ4YyK3BcFk5tD1Nv3xyVNkZVoXU8NbNz9RVx5vDz/9AAE7R6vpjMqfadPCJEJ2p4+nqclAKBG8AhWpuImTg8lV16J2uLgFwqbunN3F1CQDOsvH3KFeXgAvEUHMAAAAAAJyI4A0AAAAAgBMRvAEAAAAAcCLO8QYAAABQJA8vdz30QSPV8zx5/s4ACuCINwAAAAAATkTwBgAAAADAiQjeAAAAAIpkybHpp4+O6Yv3Tys3x3B1OUCFQ/AGAAAAUCTDMHRgc5p2bMqSzSB4AyVF8AYAAAAAwIkI3oUYPny4TCaTTCaTzGazatasqfvuu0+nT58usxqysrI0fPhwNWvWTGazWQMHDiyzZQMAAAAALh5uJ3YOvXv31qxZs2SxWLRr1y7dddddSk5O1ty5c8tk+VarVT4+PnrooYf03XfflckyAVeLqFtNj8/+n4JCA5SenKnXRryrI7uPFejX+67uGvLEQJncTNqyfIfeun+GbFabJKn9da11z2t3yt3srpi/D+nV4e8qKyOrrFcFKLFawcF6rU9vVfLxUWp2tsYtWaIDiUmF9vV0d9eiO+9QVm6uBn4xx95+d9s2GtS0iSw2m7ItVk1cvlzb47j1DyqGII8I9aj+pLzdg5RtTdfyuFd0OudwgX4dqtyrKL+rZMiqLGuqVsRNVWrucYc+/SNfV4hXHc36Z2AZVQ9cGG9zlBqEviazeyVZbanal/CEMnMP/KeXSbUrPaFKPl1kMrkrNWuzDiQ+L0O5cjP5qnHYu/L3bCJJWn/0yrJfCRSJI97n4OXlpWrVqikyMlI9e/bU4MGDtWzZMvt0m82mF154QZGRkfLy8lLLli21ZMkS+/RBgwbpwQcftP/98MMPy2QyaefOnZIki8WigIAALV26tNDl+/n56f3339eoUaNUrVo1J60lUL6M+eBe/TTjV41oOEZfv7ZQj318X4E+1WqFafgLg/Vw5+c0rN6Dqlw1WH1Gdpckeft567GP79OEG17V8PoPKikuWbc9c2NZrwZQKi/2vEbztm3TNTNn6aONGzWlV89z9n2sc0dtOX7Coa1hlVDd2bqVBn05V/0++0Kfb9mqiT16OLts4KLpWvVR7Uz+UXMO3qktSfPUrdrjBfrU8u+ocJ8W+vrQ3frq0N06lrFZV4WOcujTLPgGpeXGlVXZwEVRL+RFnUifp79ir9WxlBmqFzKlQJ9q/rfIz7OhthwfoL9ie0mSwgOHSZIMw6JjKR9p+8lhZVo3io/gXQwxMTFasmSJPDw87G1vvvmmXn/9dU2dOlXbtm1Tr1691L9/f+3fv1+SFB0drZUrV9r7r1q1SqGhoVq1apUkaePGjcrKylLHjh3LdF2A8iq4SqDqta6tX79YLUla8916VasdpqpRVRz6db7pKv2x4E8lx6dIkn78cJm6DekkSbqyT0vt2xSjo3vzjnwsem+pug3hNYbyL8TXR03CwrRg125J0pJ9+1UjKEgRgYEF+raNiFCt4EpasGtXgWlmNzf5/P9nVaC3l+LS0pxbOHCR+LgHq4p3fe1L/UWSFJO+WoEe1RVgrlqgr7vJQ+4mT0mSp7uf0i2n7NOCPCJUN7C7NifNKfA4oLzycKssf68mik9fKElKyFwib49IeZkjHPr5eTZU8pk/ZChXkpR0ZqWq+g+UJBnKUXLWOllsqWVaO4qP4H0OP/74o/z9/eXj46M6depo165deuKJJ+zTp06dqieeeEJDhgxRgwYN9Morr6hly5aaPn26pLzgvXPnTiUkJOj06dPauXOnHn74YXsYX7lypdq0aSN/f38XrB1Q/lSpEarE46ftQ8YlKf5IgsJqhjr0C6sZqpOH//2SFXfolL1PWM1QnTzy77STh+IVGlFZJpPJydUDF6Z6QIBOZmTIetaVgo+npik8MMChn4+HWc91i9bzv/5WYB57TiVo5qa/tGrUSP1+7yiNaNNaE5evcHbpwEXhbw5ThiVBhv79DEjLPSl/D8fgfSh9rWIzt2h43e80vM53ivBtrT8TZv7/VJOiq43V6pPTZTMsZVg9cGG8zNWVY4mXZLW3ZVuOy8s93KFfWvY2Vfa9Ru4mP5nkoSp+18vLHFnG1aK0OMf7HLp166b3339fmZmZ+vjjj7Vv3z770PHU1FQdP368wNHqjh076u+//5YkNW3aVCEhIVq1apU8PDzUokUL9e/fX2+99ZakvODdtWvXsl0poJwz/nN7knPl5bO7FejDLU5QQRVn/3+yaxd9vnWrTqanq1alYIdp4YEB6lGnjrp9PFOnMjI0tFVLTbuuj27/6hsnVg04j0kFXwRVvOop2LOmPv3nZuXYMtWhyj3qUnWMlse9opaVB+t45jYlZv9T6JFyXBizp5vue7OB6nielKcnP2hfbIb++/2l4DaOz5gvb3OEmlebK6uRqeSstQr2vqpsCsQF44j3Ofj5+alu3bpq3ry53nrrLWVnZ2vixIkOff57FM0wDHubyWRSly5dtHLlSq1atUrR0dFq2rSprFartm/frrVr1yo6OrqsVgco904dTVCVyBC5uf/7tlSlRqjijyQ49Is/kqBqtf4dfl41qoq9T/yRBFWNCvt3Wq0wJcQmFQg0QHlzIi1N1QMC5H7W50r1gAAdT3UcKt42IkIPdrhKq0aN1JvXX6f6oaH6efidkqS+9etrX2KCTmVkSJK+3bFDV0ZGyo0RH6gA0i3x8jOHynTWV1N/jzCl5zpeHLBhUG/FntmqHFuGJEN7UpYqwrelJCncp7kaBvXSHVfM1Q0135aXu7/uuGKuvNwYXXgxmEwmeXi5ycvLjZFkF1m25YS8zNUkudvbvMzVlW09XqDvkZR3tOVEf22LG6Izuf8UcgE2lFcE72IaP368pk6dquPHjyswMFDh4eH6/fffHfqsXbtWjRo1sv+df573ypUrFR0dLZPJpM6dO2vq1Kk6c+YM53cDZ0k+laoDWw7qmju6SJI6D7pKJw/FOwwrl/LO/e448EoFhwVJkq6/t6dWfvWHJGnjkq2q366OajTIG5rV//5eWvnV2jJcC6B0EjPPaGd8vAY2zvsM6V2/no6lpCo21fFcves+/VxdZ3yirjM+0ZgfF2tfQoL6zP5MknQkJUVtIyLk+//nePe4oo4OJCbKxg9PqADOWJOVkH1A9QOvlSRd4d9FqblxSrM4Bu/U3BOK9G0tt/8PKLX8Oygp+5Ak6afYp/V5zBB9EXOr5h95UNnWdH0Rc6uybellui5ASeXakpSes0th/gMkSaG+vZVliVW2Jdahn8nkKXe3vFOQzG6VFBl0r46lzCjzelE6DDUvpujoaDVp0kQvvfSS3nnnHT3++OMaP3686tSpo5YtW2rWrFnaunWrvvzyS4fHjBkzRmazWZ07d7a3PfbYY2rdurUCC7loztl27dqlnJwcJSUlKS0tTVu3bpUktWzZ0lmrCbjU9NEf6fFZD+jWp25QZuoZvTr8HUnSozNGa92iTVr3wybFHYzXpxO+1vTfX5Sbm0lbV+zQz58slySdSc/SG6M+0IT54+RudtfB7Uf02v/PAyjvnl32q17t00v3tW+v9JxsPf5z3l0vXup5rX775x/99k9MkY9ftv+AmlerpgV33K4cq1UZOTl67Kefy6J04KJYFTdN3as/oTYhtyvHlqnfTrwsSYquOlaH0tfqUMZabU9eoEqeNTW41kzZlKsMS5JWxb3u4sovD9Zcm36Zc1xbzGm6cWiQzB4c9b6YDiQ8q/qhr6pG0H2y2tK1L2GcJKleyEtKzPxNSWd+k9kUoObV58gwbDKZ3BSbOltJZ5bb59Gq+kJ5uleR2S1IV0b+ruSs9dqXMNZVq4T/MBmlGIOZmpqqoKAgpaSknDc8VkTDhw9XcnKyFixY4NA+Z84cjRgxQgcOHFBERIRefPFFffTRR4qPj1fjxo318ssvq3fv3vb+hmGoatWqioqK0saNGyVJW7duVatWrTR27Fi99tprRdZRq1YtHT5c8P6VDJt1vf2bY3R/2yfO3xG4BGVH+Cl2THNXlwG4RFhQsoZ2WePqMoAyl5tt1ayHd8jPlK2J71WVlxcDZ3H5yUizqU/zg6XKwRzxLsTs2bMLbb/tttt022232f9+/vnn9fzzz59zPiaTSfHx8Q5tLVu2LHZwPnToULH6AQAAAADKL36qAgAAAADAiQjeAAAAAAA4EcEbAAAAAAAnIngDAAAAAOBEBG8AAAAAAJyIq5oDAAAAKJLZ0013v1ZPdTzi5enJPbyBkiJ4AwAAACiSyWSST4BZ/p7uri4FqJAYag4AAAAAgBMRvAEAAAAUyZpr04o5cVrwRYosuYarywEqHII3AAAAgCLZbIa2rz6t9SsyZbURvIGSIngDAAAAAOBEBG8AAAAAAJyI4A0AAAAAgBMRvAEAAAAAcCKCNwAAAAAATkTwBgAAAADAicyuLgAAAABA+Wb2dNPwyXV0hccpeXqaXF0OUOEQvIFSsgR7yurn4eoygDKXU8VHAT6Z8vHMcXUpQJmr7J8uf5NF3iabq0sBypxnFZPcrUE6nOnt6lIAlziTaZV0sFSPJXgDpXDGx01HH28lw4OzNXD5CfDJ1F3dVsjsTvDA5cffZNGQgJMyc8APl6HjWX66dvONyjGIELg82TKzJP1VqseSGoBScKvsQ+jGZcvHM4fQjcuWt8lG6MZlyWIxNHNuihKW/y3DanV1OUCFQ3IAAAAAUCSLxdBvv5xW5sZdMqz8+AqUFMEbAAAAAAAnIngDAAAAAOBEBG8AAAAAAJyI4A0AAAAAgBMRvAEAAAAAcCKCNwAAAAAATkTwBgAAAFAkLy+TnhlfS6F39ZPJw+zqcoAKh+ANAAAAoEgmk0nVw71kDg2WyWRydTlAhUPwBgAAAADAiQjeAAAAAIpksRha/EOC0n//W4bV6upygAqH4A0AAACgSBaLoZ9/TFT62m0yrDZXlwNUOARvAAAAAACciOANAAAAAIATEbwBAAAAAHAigjcAAAAAAE5E8AYAAAAAwIkI3gAAAAAAOBHBGwAAAECRPD1NevypKIUM7SOT2d3V5QAVjtnVBQAAAAAo39zcTIqq5S2PpFBXlwJUSBzxBgAAAADAiQjeAAAAAIpksRj6dWmSMv7cKcNqdXU5QIVD8AYAAABQJIvF0ILvTylt5WYZVpurywEqHII3AAAAAABORPAGAAAAAMCJCN4AAAAAADgRwRsAAAAAACcieAMAAAAA4EQEbwAAAAAAnIjgDQAAAKBInp4mPfRoDVUecq1MZndXlwNUOGZXFwAAAACgfHNzM6l+A195ZlRzdSlAhcQRbwAAAAAAnIjgDQAAAKBIFouh1StOK3PzXhlWq6vLASocgjcAAACAIlkshr6eF6/UX/+UYbW5uhygwiF4AwAAAADgRARvAAAAAACciOANAAAAAIATEbwBAAAAAHAigjcAAAAAAE5E8AYAAAAAwIkI3gAAAACK5OFh0ugHIhQ8qJtMZndXlwNUOGZXFwAAAACgfHN3N6lpc395WyJdXQpQIXHEGwAAAAAAJyJ4AwAAACiSxWJo/doUndn+jwyr1dXlABUOwRsAAABAkSwWQ198GqeUn9fKsNpcXQ5Q4RC8AQAAAABwIoJ3IYYPHy6TySSTySSz2ayaNWvqvvvu0+nTp8ushpUrV2rAgAGqXr26/Pz81LJlS3355ZdltnwAAAAAwMXBVc3PoXfv3po1a5YsFot27dqlu+66S8nJyZo7d26ZLH/t2rVq3ry5nnjiCVWtWlWLFy/WnXfeqcDAQPXr169MagDKWq3gYL3Wp7cq+fgoNTtb45Ys0YHEpEL7erq7a9GddygrN1cDv5hjb7+7bRsNatpEFptN2RarJi5fru1xJ8tqFYBSC/KIUI/qT8rbPUjZ1nQtj3tFp3MOF+jXocq9ivK7SoasyrKmakXcVKXmHnfo0z/ydYV41dGsfwaWUfXAhTEFPCt5d5fJPVK2hOsky/7CO/rcJJPfPZLcpJx1MlInSPr/8429omUKeFKSu2TZIyPlCcnILJP6gQtVy7+SXmvfX5W8fJSak61xf/6gA6kJBfrVD6qi8a17KdTbT24y6bVtK7Qsdq8kqVv1unqqZQ+ZTW7anRyvx/9cpExLblmvCs6BI97n4OXlpWrVqikyMlI9e/bU4MGDtWzZMvt0m82mF154QZGRkfLy8lLLli21ZMkS+/RBgwbpwQcftP/98MMPy2QyaefOnZIki8WigIAALV26tNDlP/3005o0aZKuvvpq1alTRw899JB69+6t+fPnO2mNAdd7sec1mrdtm66ZOUsfbdyoKb16nrPvY507asvxEw5tDauE6s7WrTToy7nq99kX+nzLVk3s0cPZZQMXRdeqj2pn8o+ac/BObUmap27VHi/Qp5Z/R4X7tNDXh+7WV4fu1rGMzboqdJRDn2bBNygtN66sygYuCiNriYzEW2VYj527k3ukTP5jZCTdKiPhGsktVPK5KW+ayVemwJdknL5fRsK1kvWUTH73lU3xwEXwYtu+mvfPFl3z0wf6aM86TWl3XYE+3u5mfdDpZk3bvlK9fv5QvZd8qE0JRyVJvmYPvXzldRr9+7fq/tP7is9K1/2NOpbxWqAoBO9iiImJ0ZIlS+Th4WFve/PNN/X6669r6tSp2rZtm3r16qX+/ftr//68X2ijo6O1cuVKe/9Vq1YpNDRUq1atkiRt3LhRWVlZ6tix+C+IlJQUVa5c+eKsFFDOhPj6qElYmBbs2i1JWrJvv2oEBSkiMLBA37YREaoVXEkLdu0qMM3s5iaf/3+tBnp7KS4tzbmFAxeBj3uwqnjX177UXyRJMemrFehRXQHmqgX6ups85G7ylCR5uvsp3XLKPi3II0J1A7trc9KcAo8DyrXcTZLtPKOTvHpJWb9KtkRJkpE5Tyaf6/OmeXaRcndI1pj/n/al5FMwuADlUYiXr5pUqqYFh7dLkpYc26MafsGK8A1y6Nc/qqm2JBzTXwl5P1BZDUNJ2XmjOrpWq6PtSXGKSct7fXx54C/1i2pShmuB8yF4n8OPP/4of39/+fj4qE6dOtq1a5eeeOIJ+/SpU6fqiSee0JAhQ9SgQQO98soratmypaZPny4pL3jv3LlTCQkJOn36tHbu3KmHH37YHsZXrlypNm3ayN/fv1j1fPvtt9q4caNGjBhxsVcVKBeqBwToZEaGrIZhbzuemqbwwACHfj4eZj3XLVrP//pbgXnsOZWgmZv+0qpRI/X7vaM0ok1rTVy+wtmlAxfM3xymDEuCDP17peC03JPy93AM3ofS1yo2c4uG1/1Ow+t8pwjf1vozYeb/TzUputpYrT45XTbDUobVA2XD5B4uwxb7b4P1mOQWnvd/93DJYVqs5FZVkqlMawRKo7pvoE6eSXP8DpSZqnA/x4MPdQNDlW2zakbnW/RDz7s1tX0/VfbylSSF+wUpNjPF3vdYRrKq+gTwCihHCN7n0K1bN23dulUbNmzQgw8+qF69etmHjqempur48eMFjlZ37NhRu3fnHa1r2rSpQkJCtGrVKq1Zs0YtWrRQ//797Ue8V65cqa5duxarlpUrV2r48OGaMWOGmjThlytcuoyzPnAkyVTIp8WTXbvo861bdTI9vcC08MAA9ahTR90+nqlOH87QrL82a9p1fZxVLuBUpkK+LlXxqqdgz5r69J+bNfufmxSbuVldqo6RJLWsPFjHM7cpMfufsi4VKDtnf07890PC8SMEF5mHh0l3jQpXcP/OMpndXV3OJee/u29h34E83NzUpdoVenbTz+q37GOdyEzThNa9/p2HwYugPCN4n4Ofn5/q1q2r5s2b66233lJ2drYmTpzo0Mf0n1eEYRj2NpPJpC5dumjlypVatWqVoqOj1bRpU1mtVm3fvl1r165VdHT0eetYtWqV+vXrp2nTpunOO++8aOsHlDcn0tJUPSBA7me9rqoHBOh4quNQ8bYREXqww1VaNWqk3rz+OtUPDdXPw/NeG33r19e+xASdysiQJH27Y4eujIyUW2GfXkA5km6Jl585VKazPpb9PcKUnus49LZhUG/FntmqHFuGJEN7UpYqwrelJCncp7kaBvXSHVfM1Q0135aXu7/uuGKuvNyKN7IKKO8M63GZ3CP/bXCLkGz/f2FB63HJPeLfae4R/z90nSBysbi7m9S6bYC8G9aSyY0IcTGdyExVdZ//fAfyCdTxjFSHfrEZKVoff0gnz+R9N1p4eIdahOSN+jiekaJIv2B730i/YJ08k8YroBzhVVNM48eP19SpU3X8+HEFBgYqPDxcv//+u0OftWvXqlGjRva/88/zXrlypaKjo2UymdS5c2dNnTpVZ86cOe/53StXrtR1112nl19+Wffcc49T1gsoLxIzz2hnfLwGNs57DfWuX0/HUlIVm+r4oXPdp5+r64xP1HXGJxrz42LtS0hQn9mfSZKOpKSobUSEfP//HO8eV9TRgcRE2fgFGOXcGWuyErIPqH7gtZKkK/y7KDU3TmkWx+CdmntCkb6t5aa8o021/DsoKfuQJOmn2Kf1ecwQfRFzq+YfeVDZ1nR9EXOrsm0FR4cAFVL2Msn7GsktRJJk8h0i48zivGk5aySPZpL7Ff8/7XbpzE+uqhQokcTsTO1MPqmBUc0kSb0jG+pYZorD0HFJWnx0t5pVDpe/Oe86H12qXaHdyfGSpNVxMWpeubquCMh7fdxet41+PFLwWjhwHW4nVkzR0dFq0qSJXnrpJb3zzjt6/PHHNX78eNWpU0ctW7bUrFmztHXrVod7bUdHR2vMmDEym83q3Lmzve2xxx5T69atFVjIRaPy5YfuMWPGaNCgQYqLy7tCraenJxdYwyXr2WW/6tU+vXRf+/ZKz8nW4z/nXfX/pZ7X6rd//tFv/8QU+fhl+w+oebVqWnDH7cqxWpWRk6PHfvq5LEoHLtiquGnqXv0JtQm5XTm2TP124mVJUnTVsTqUvlaHMtZqe/ICVfKsqcG1ZsqmXGVYkrQq7nUXVw5cOFPAeMm7h+QWKlOl2ZKRKSPhWpkCJ8vI/k3KXi5Zj8pIf1umyvOUdzux9dKZb/NmYGTISH1GpkrvKe92YvtkpIxz4RpdeqxWQ5s3pSlr3yF51a/JUe+L7NlNP+nVK/vpvsZXKz03R49vWCRJeqnddfotdp9+O75fJzJT9cHutfrmmuGyGjadzEzTM5vyfmDKsOToqY2L9UGnm2Q2uWlvyin7PFA+mIxSnAyQmpqqoKAgpaSkFBkeK6rhw4crOTlZCxYscGifM2eORowYoQMHDigiIkIvvviiPvroI8XHx6tx48Z6+eWX1bt3b3t/wzBUtWpVRUVFaePGjZKkrVu3qlWrVho7dqxee+21Imv49NNPC7R37drV4WrpcI0dJ09qwOdfnr8jcAkKC0rW0C5rXF0G4BKhbjm6KeDU+TsCl5isLJv63JWoTSlVFfbwELl5epz/QcAlxpaZpUN3vViqHEzwBkqB4I3LGcEblzOCNy5XBG/gwoI3Y0QAAAAAAHAigjcAAAAAAE5E8AYAAAAAwIkI3gAAAAAAOBHBGwAAAAAAJ+I+3gAAAACKZDabdMewatq/v4NM7hy7A0qK4A0AAACgSGazSVddHSQf7zquLgWokPi5CgAAAAAAJyJ4AwAAACiS1Wpox7Z0Zf1zTIbN5upygAqH4A0AAACgSLm5hj54N1bJ362QYbG6uhygwiF4AwAAAADgRARvAAAAAACciOANAAAAAIATEbwBAAAAAHAigjcAAAAAAE5E8AYAAAAAwInMri4AAAAAQPlmNpt0y5Aw7fvnSpncOXYHlBTBGyilAJ9M+XjmuLoMoMxV9k+Xv8kib5PN1aUAZS7YLVfZhqFcw9WVAGXMTbq6W4BqekYo7ZRJEp8BuPxYs0q/3xO8gVLw9kzXXd1WyOzOhw4uP/4mi4YEnJTZ5OpKgLKXbRj6K9sQuRuXo5TkHIV84K7gXIurSwFcwmK1al8pH8s4EaAUgnyshG5ctrxNNkI3Llu5hgjduCzZbIb2/G1VcmqCDINXAVBSBG8AAAAARcrNNTT3k1jtj10um2F1dTlAhUPwBgAAAADAiQjeAAAAAAA4EcEbAAAAAAAnIngDAAAAAOBEBG8AAAAAAJyI4A0AAAAAgBMRvAEAAAAUyd3dpOjeoYoIaSmTiQgBlBSvGgAAAABFMptNat+5kqpWaiQ3gjdQYrxqAAAAAABwIoI3AAAAgCLZbIZOHMtSRlaiDMNwdTlAhUPwBgAAAFCk3FxDn71/VHuPLZPNsLq6HKDCIXgDAAAAAOBEBG8AAAAAAJyI4A0AAAAAgBMRvAEAAAAAcCKCNwAAAAAATkTwBgAAAADAicyuLgAAAABA+ebublLH7pWVG9dUJhPH7oCS4lUDAAAAoEhms0mdeoSoeuVmciN4AyXGqwYAAAAAACcieAMAAAAokmEYSjiZrTM5KTIMw9XlABUOwRsAAABAkXJyDH3y1hHtPvKTbIbV1eUAFQ7BGwAAAAAAJyJ4AwAAAADgRARvAAAAAACciOANAAAAAIATEbwBAAAAAHAigjcAAAAAAE5kdnUBAAAAAMo3d3eTruxUSdnHG8pk4tgdUFK8agAAAAAUyWw2qVufUEWEtpIbwRsoMV41AAAAAAA4EcEbAAAAQJEMw1DK6Vxl52bIMAxXlwNUOARvAAAAAEXKyTH0wdRD2nl4kWyG1dXlABUOwRsAAAAAACcieAMAAAAA4EQEbwAAAAAAnIjgDQAAAACAExG8AQAAAABwIoI3AAAAAABORPAGAAAAUCR3N5NatQ9SlaB6MplMri4HqHAI3gAAAACKZPYwqWf/MNWo0lZuJndXlwNUOARvAAAAAACciOANAAAAoEiGYSgz3aJca5YMw3B1OUCFQ/AGAAAAUKScHENvTzmo7Qfny2ZYXV0OUOEQvAsxfPhwmUwmmUwmmc1m1axZU/fdd59Onz5dZjXs3btX3bp1U9WqVeXt7a0rrrhCzz77rHJzc8usBgAAAADAhTO7uoDyqnfv3po1a5YsFot27dqlu+66S8nJyZo7d26ZLN/Dw0N33nmnWrdureDgYP39998aNWqUbDabXnrppTKpAShrQR4R6lH9SXm7Bynbmq7lca/odM7hAv06VLlXUX5XyZBVWdZUrYibqtTc4w59+ke+rhCvOpr1z8Ayqh64MKaAZyXv7jK5R8qWcJ1k2V94R5+bZPK7R5KblLNORuoESf9/9MkrWqaAJyW5S5Y9MlKekIzMMqkfuFDe5ig1CH1NZvdKstpStS/hCWXmHvhPL5NqV/q/9u4/OMr6wOP459lNsglJdhFCAiEhBUEUI2CgtYBgEAU9KtKTFr3IgUN/igwx6DFIr1TqCWq8Q8vBlU4LvRYKrRZslUapTgKUoxfAFIytSNEGCBACZDcJ2d1k97k/ouulSMhGnn0Ieb9mmHn2+bF8nuHJsJ98n+e7i3RN0gQZhlM+/34dPvNdmWqWw+ihYen/qZSEGyVJe45+IfYnAXRSZnYvPf7kl+Xu2UON9X4Vf2+rqj443WafjH49tfB70zX4+n46XnVG82et/dT3WrFmtgZdl6GvTno2FtHRQYx4X4TL5VLfvn2VlZWlyZMna+bMmXrjjTci28PhsJYtW6asrCy5XC6NHDlSJSUlke333Xef5s+fH3ldWFgowzBUWVkpSWppaVFqaqpef/31T/37Bw0apIceekgjRoxQTk6Opk2bpoKCAu3cudOiMwbsd1tGkSrrXtXGD/5Zb5/dpIl9H79gn8+ljFNm0gj98sOvafOHX9Oxxv36YtrX2+xzU88vq775ZKxiA5eF6S+ReeYBmaFjF9/JmSUjZYHMsw/IrL1DcqRJSTNatxk9ZLiflnnuYZm1d0qh0zKSvx2b8MBlMKT3UzrRsEn7jt+pY94faUjv5Rfs0zflq0pOuF5vV9+rfcenSJIy3bMlSabZomPetTp4anZMcwOXw4Il92jbln2a+48/0C//+w969Lv3XrDP+caAfrrmLa1Y8tJF32fazFt0qrrOwqToLIp3Bxw5ckQlJSWKj4+PrHvhhRf0/PPPq7i4WAcOHNCUKVM0bdo0vf9+6whFfn6+SktLI/uXlZUpLS1NZWVlkqTy8nL5/X6NGzeuQxkOHz6skpIS3XbbbZfvxIArSJKzp/okXqdDvu2SpCMNO+SO76fUuIwL9nUa8XIaCZKkBGeyGlo++Y2wJ76/Brtv1/6zG2MTHLhcmvdK4VPt7+OaIvl/L4XPSJLM85tkJH2pdVvCBKn5HSl05KNtG6SkqVYmBi6beEcvpbhuVE3DK5Kk2vMlSozPkiuuf5v9khOuV13TH2Sq9dG7s02lykiZLkkyFVSd/3/UEvbFNDvwWXmuSdbg6/vpzW0HJEm73nxXfTN7KqNfzzb71fuaVFlRJX/Tpz96mpndS/mTc7V5PQN1VyKK90W8+uqrSklJUVJSkq699lq9++67WrRoUWR7cXGxFi1apPvvv19Dhw7VM888o5EjR2rlypWSWot3ZWWlamtrde7cOVVWVqqwsDBSxktLSzVq1CilpKS0m2Ps2LFKTEzUkCFDNH78eC1btsyqUwZslRKXrsaWWpkKR9bVN59SSnzb4v1hw24dP/+25gx+WXOufVn9e+Tpf2t/8tFWQ/l9H9OOUysVNltimB6IDcOZKTN8/JMVoWOSI7N12Zkptdl2XHJkSDJimhHoDFdcPwVbahR5bEJSoKVaLmdmm/3qAwfUq8cdchrJMhSvPslfkisuK8ZpgcurT4ZbZ07XKxz65DPQ6ZNe9enr6fB7GIahwu9M06pnXlOoJXzpAxBzFO+LmDhxoioqKvTHP/5R8+fP15QpUyK3jvt8PlVXV18wWj1u3Dj9+c9/liTl5uaqd+/eKisr086dOzVixAhNmzYtMuJdWlraodHrzZs3a//+/dq4caNee+01FRcXX+YzBa5cxqcUhj6uIeqZMEA//etXtP6vM3T8/H5NyFggSRrZa6aqzx/QmcBfYx0ViJ3//zU+xt/9jPANP+jCzAsu4Av/D6hp3KK6pp0a3vcXuqnvz3S++X2ZJhPP4ipwweUf3S9NZ8waq3fe/puOHOJRuysVk6tdRHJysgYPHixJevHFFzVx4kQ9+eST+v73vx/Zx/i7HwjTNCPrDMPQhAkTVFpaqoSEBOXn5ys3N1ehUEgHDx7U7t27VVhYeMkc2dnZkqRhw4YpFArpG9/4hhYuXCin03mZzhS4MjS01Cg5Lk2GHJFR75T4dDU0t7319nrPXTreVKFguFGS9Bfv6/pSVutzgJlJw9XbNUhDPZPlkFMuZ4oeHPQL/erDrysQbojtCQEWMEPVMpxZn3w+c/SXwh9NLBiqlhK++MnOzv4f3bpOG8eVL9ByQq64vpKc+njU2xXXT4FQ9QX7VnlXqcq7SpLUJ3nqp0zABis4HYZy89xqPDbwgs/A+GxOn/IpLcMth9MRGfXuk+HW6ZPeDr/HTXk5GjgkQ5OmjpDT6VBKapJ++ttCzfun/1JDvd+q6IgCI94dtHTpUhUXF6u6ulput1uZmZnatWtXm312796tG264IfL64+e8S0tLlZ+fL8MwNH78eBUXF6upqanDz3d/zDRNNTc3yzT5EIWrT1OoTrWBw7rOfackaVDKBPmaT6q+pW3x9jWfUFaPPDnU+sunz6WM0dnAh5Kkbcef0M+O3K+fH3lAW6rmKxBq0M+PPEDpxtUj8IaUeIfk6C1JMnrcL7PptdZtwZ1S/E2Sc9BH2wqkpm12JQWi0hw+q4bgu0pPaZ1QKq3HXfK3HFeg5Xib/QwjQU5HqiQpznGNsjzf1DHvj2KetzuKizc09b4M5aR/UQ6DAaDLyXuuUYf/ckKT/mG4JOnWScN06kSdTp2o6/B7fLdwo2ZN/Q/NvmelFs79iRrqmzT7npWU7isII94dlJ+frxtvvFFPP/20Vq1apccff1xLly7Vtddeq5EjR2rdunWqqKjQhg0b2hyzYMECxcXFafz48ZF1CxcuVF5entxu90X/vg0bNig+Pl433XSTXC6X9u3bp8WLF2vmzJmKi+OfDVenspP/rtv7LdKo3gUKhs/rzRMrJEn5GY/pw4bd+rBxtw7WbdU1CQM083M/UVjNamw5q7KTz9ucHPjsjNSlUuIkyZEm45r1knleZu2dMtz/JjPwphR4SwodldnwAxm9Nqn168T2SE0fzW5rNsr0LZFxzWq1fp3YIZnef7HxjIDoHK79jq5Le1bZnm8rFG7QodrW63dI76d15vybOtv0puKMVA3vt1GmGZZhOHTct15nm96KvMfN/V5RgrOP4hwefSFrl+r8e3So9jG7TgnosBef/q0Wfu/Luv+h8TrfGFDx0i2SpMJ/naY9Ze9pz473FB/v1LpXFig+IU7JKS79fFuR3tx2QOtW/d7m9OgIw+zE8KnP55PH45HX6223PHZVc+bMUV1dnbZu3dpm/caNG/XQQw/p8OHD6t+/v5566imtXbtWNTU1GjZsmFasWKG77rorsr9pmsrIyFBOTo7Ky8slSRUVFbr55pv12GOP6bnnnrtohs2bN+vZZ5/VoUOHZJqmcnJy9OCDD+rRRx9VYmKiJeeNjjvtP6Rf/e2bdscAbJHmCGpG6ulL7whchRrCpv4U5M4zdD+maarqvZ5av/guOQwnt5ujW2oJBfTWn57pVA+meAOdQPFGd0bxRndG8UZ3FQiEtWjOWVW9m64Rg74ip4M7MNH9fJbizTPeAAAAAABYiOINAAAAAICFKN4AAAAAAFiI4g0AAAAAgIUo3gAAAAAAWIjiDQAAAACAhSjeAAAAANrlMAwNzU3RNSnZMsR3eAPRongDAAAAaFd8gqHpD/TTwL63yuFw2h0H6HIo3gAAAAAAWIjiDQAAAACAhSjeAAAAANoVCIT1zJL3tf/wLxQKt9gdB+hyKN4AAAAAAFiI4g0AAAAAgIUo3gAAAAAAWIjiDQAAAACAhSjeAAAAAABYiOINAAAAAICFKN4AAAAA2uUwDA0amixPcqYMGXbHAbocijfQCYlOj5xGgt0xAFv4TYdaTD50oXuKN0TlQLcUn2Bo9rzeum7ArXI4nHbHAbocwzRNM9qDfD6fPB6PvF6v3G63FbmAK1598yn5Q167YwC2SJJfyU4+eKF78oeDCine7hiALc6djpe/PtXuGIAtGhrqlfeF6zvVg+MsygRc9VLjM5Qan2F3DABAjCXZHQCwUUqW3QkA+/h8vk4fy63mAAAAANrl9/s1Y8YMzZgxQ36/3+44QJfDiDcAAACASwoEAnZHALosRrwBAAAAALAQxRsAAAAAAAtRvAEAAAAAsBDFGwAAAAAAC1G8AQAAAACwELOaAwAAAGiXw+FQbm5uZBlAdAzTNM1oD/L5fPJ4PPJ6vXK73VbkAgAAAADgivFZejC/rgIAAAAAwEIUbwAAAAAALETxBgAAANAuv9+vgoICFRQUyO/32x0H6HKYXA0AAADAJfl8PrsjAF0WI94AAAAAAFiI4g0AAAAAgIUo3gAAAAAAWIjiDQAAAACAhSjeAAAAAABYiFnNAQAAALTL4XBoyJAhkWUA0TFM0zSjPcjn88nj8cjr9crtdluRCwAAAACAK8Zn6cH8ugoAAAAAAAtRvAEAAAAAsBDFGwAAAEC7AoGA5s6dq7lz5yoQCNgdB+hymFwNAAAAQLtM01RNTU1kGUB0GPEGAAAAAMBCFG8AAAAAACxE8QYAAAAAwEIUbwAAAAAALETxBgAAAADAQsxqDgAAAKBdhmEoOzs7sgwgOhRvAAAAAO1yuVxavXq13TGALotbzQEAAAAAsBDFGwAAAAAAC1G8AQAAALQrEAjo4Ycf1sMPP6xAIGB3HKDL4RlvAAAAAO0yTVNHjx6NLAOIDiPeAAAAAABYiOINAAAAAICFKN4AAAAAAFiI4g0AAAAAgIUo3gAAAAAAWIhZzQEAAAC0yzAMpaenR5YBRIfiDQAAAKBdLpdLP/7xj+2OAXRZ3GoOAAAAAICFKN4AAAAAAFiI4g0AAACgXcFgUEVFRSoqKlIwGLQ7DtDl8Iw3AAAAgHaFw2G9//77kWUA0WHEGwAAAAAAC1G8AQAAAACwEMUbAAAAAAALUbwBAAAAALAQxRsAAAAAAAsxqzkAAACAS3K73XZHALosijcAAACAdiUmJmrDhg12xwC6LG41BwAAAADAQhRvAAAAAAAsRPEGAAAA0K5gMKjFixdr8eLFCgaDdscBuhye8QYAAADQrnA4rHfeeSeyDCA6jHgDAAAAAGAhijcAAAAAABaieAMAAAAAYCGKNwAAAAAAFqJ4AwAAAABgIWY1BwAAAHBJLpfL7ghAl0XxBgAAANCuxMREvfTSS3bHALosbjUHAAAAAMBCFG8AAAAAACzEreYAAAAA2hUMBrV8+XJJ0uLFi5WQkGBzIqBroXgDAAAAaFc4HNbevXsjywCiw63mAAAAAABYiOINAAAAAICFKN4AAAAAAFiI4g0AAAAAgIUo3gAAAAAAWKhTs5qbpilJ8vl8lzUMAAAAgCuP3+9Xc3OzpNYOEAwGbU4ExN7H/ffjPhyNThXv+vp6SVJ2dnZnDgcAAADQRWVkZNgdAbDVmTNn5PF4ojrGMDtR18PhsKqrq5WamirDMKI9HOjyfD6fsrOzdfToUbndbrvjADHF9Y/ujOsf3RnXP7o7r9erAQMG6Ny5c+rZs2dUx3ZqxNvhcCgrK6szhwJXFbfbzX886La4/tGdcf2jO+P6R3fncEQ/VRqTqwEAAAAAYCGKNwAAAAAAFqJ4A53gcrm0dOlSuVwuu6MAMcf1j+6M6x/dGdc/urvP8jPQqcnVAAAAAABAxzDiDQAAAACAhSjeAAAAAABYiOINAAAAAICFKN4AAAAAAFiI4g1EafXq1Ro4cKASExM1atQo7dy50+5IQEzs2LFD99xzjzIzM2UYhrZu3Wp3JCBmli9frs9//vNKTU1Venq6pk+frvfee8/uWEBMrFmzRsOHD5fb7Zbb7daYMWP0u9/9zu5YgC2WL18uwzBUWFgY1XEUbyAKmzdvVmFhoZYsWaK3335b48eP1913362qqiq7owGWa2xs1IgRI7Rq1Sq7owAxV1ZWpnnz5mnPnj3avn27WlpaNHnyZDU2NtodDbBcVlaWVqxYob1792rv3r26/fbbde+996qystLuaEBMlZeXa+3atRo+fHjUx/J1YkAUbrnlFuXl5WnNmjWRdTfccIOmT5+u5cuX25gMiC3DMLRlyxZNnz7d7iiALU6fPq309HSVlZVpwoQJdscBYq5Xr1567rnnNHfuXLujADHR0NCgvLw8rV69Wk899ZRGjhyplStXdvh4RryBDgoGg9q3b58mT57cZv3kyZO1e/dum1IBAOzg9XoltZYPoDsJhULatGmTGhsbNWbMGLvjADEzb948TZ06VXfccUenjo+7zHmAq1Ztba1CoZAyMjLarM/IyNDJkydtSgUAiDXTNFVUVKRbb71Vubm5dscBYuLgwYMaM2aM/H6/UlJStGXLFg0bNszuWEBMbNq0Sfv371d5eXmn34PiDUTJMIw2r03TvGAdAODq9cgjj+jAgQPatWuX3VGAmBk6dKgqKipUV1enl19+WbNnz1ZZWRnlG1e9o0ePasGCBXrjjTeUmJjY6feheAMdlJaWJqfTecHodk1NzQWj4ACAq9P8+fP1m9/8Rjt27FBWVpbdcYCYSUhI0ODBgyVJo0ePVnl5uV544QX98Ic/tDkZYK19+/appqZGo0aNiqwLhULasWOHVq1apUAgIKfTecn34RlvoIMSEhI0atQobd++vc367du3a+zYsTalAgDEgmmaeuSRR/TrX/9ab731lgYOHGh3JMBWpmkqEAjYHQOw3KRJk3Tw4EFVVFRE/owePVoFBQWqqKjoUOmWGPEGolJUVKRZs2Zp9OjRGjNmjNauXauqqip961vfsjsaYLmGhgYdPnw48vqDDz5QRUWFevXqpQEDBtiYDLDevHnztHHjRr3yyitKTU2N3P3k8XiUlJRkczrAWk888YTuvvtuZWdnq76+Xps2bVJpaalKSkrsjgZYLjU19YL5PJKTk9W7d++o5vmgeANRmDlzps6cOaNly5bpxIkTys3N1bZt25STk2N3NMBye/fu1cSJEyOvi4qKJEmzZ8/W+vXrbUoFxMbHXyOZn5/fZv26des0Z86c2AcCYujUqVOaNWuWTpw4IY/Ho+HDh6ukpER33nmn3dGALoPv8QYAAAAAwEI84w0AAAAAgIUo3gAAAAAAWIjiDQAAAACAhSjeAAAAAABYiOINAAAAAICFKN4AAAAAAFiI4g0AAAAAgIUo3gAAAAAAWIjiDQAAAACAhSjeAAAAAABYiOINAAAAAICFKN4AAAAAAFjo/wCop69EdqffdAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "# ------------------------------\n", + "# 1) Generate synthetic data\n", + "# ------------------------------\n", + "time = np.arange(0, 7)\n", + "measurements = np.sin(0.5 * time) #+ 0.5 * np.random.randn(len(time))\n", + "\n", + "# Parameters\n", + "max_lag = 3\n", + "lead_time = 2\n", + "\n", + "# -------------------------------\n", + "# 2) Build a color map up front\n", + "# -------------------------------\n", + "# We'll use viridis, but we could use any colormap\n", + "# The important part: we store each measurement's color in an array,\n", + "# so we can reuse EXACTLY the same color in the bottom plot.\n", + "vmin = measurements.min()\n", + "vmax = measurements.max()\n", + "\n", + "def global_norm(val):\n", + " return val#(val - vmin) / (vmax - vmin)\n", + "\n", + "top_colors = []\n", + "for val in measurements:\n", + " # Convert measurement value to color once and store it\n", + " color = plt.cm.viridis(global_norm(val))\n", + " top_colors.append(color)\n", + "\n", + "# -----------------------------------------\n", + "# 3) Prepare X matrix and y vector\n", + "# -----------------------------------------\n", + "x_matrix = np.array([\n", + " measurements[i : i + max_lag] \n", + " for i in range(len(measurements) - max_lag - lead_time + 1)\n", + "])\n", + "y_values = measurements[max_lag + lead_time - 1 : ]\n", + "\n", + "# ---------------------------------------\n", + "# 4) Create figure and subplots\n", + "# ---------------------------------------\n", + "fig, axes = plt.subplots(2, 1, figsize=(10, 6),\n", + " gridspec_kw={'height_ratios': [1, 2]})\n", + "\n", + "##############################################################################\n", + "# (A) Top visualization: One-dimensional color-coded time series\n", + "##############################################################################\n", + "ax_top = axes[0]\n", + "\n", + "for i, val in enumerate(measurements):\n", + " # Already have the color in top_colors[i]\n", + " ax_top.add_patch(plt.Rectangle((i, 0), 1, 1, color=top_colors[i]))\n", + " ax_top.text(i + 0.5, 0.5, f\"{val:.2f}\",\n", + " ha='center', va='center', fontsize=8)\n", + "\n", + "ax_top.set_xlim(0, len(measurements))\n", + "ax_top.set_ylim(0, 1)\n", + "ax_top.set_yticks([])\n", + "ax_top.set_xticks(range(len(measurements)))\n", + "ax_top.set_title(\"One-dimensional Time Series\",\n", + " fontsize=14)\n", + "\n", + "##############################################################################\n", + "# (B) Bottom visualization: Matrix X (lagged inputs) and y (target)\n", + "##############################################################################\n", + "ax_bot = axes[1]\n", + "\n", + "# Show only first 3 rows for clarity\n", + "num_rows_to_show = 3\n", + "# Bottom visualization: Matrix X and y\n", + "# Bottom visualization: Matrix X and y\n", + "for i in range(num_rows_to_show):\n", + " # Offset row coloring to start from row 2 (align with correct lag indices)\n", + " row_start_index = i \n", + " \n", + " # Each row corresponds to indices [row_start_index, ..., row_start_index + max_lag - 1]\n", + " for j in range(max_lag):\n", + " x_index = row_start_index + j\n", + " color = top_colors[x_index] # Pick the EXACT same color as top row\n", + " ax_bot.add_patch(plt.Rectangle((j, -i), 1, 1, color=color))\n", + " ax_bot.text(j + 0.5, -i + 0.3, f\"{x_matrix[i, j]:.2f}\",\n", + " ha='center', va='center', fontsize=8, color='white')\n", + " \n", + " # Correctly map the target y's color from the top_colors\n", + " y_index = row_start_index + max_lag + lead_time - 1\n", + " y_color = top_colors[y_index] # Match the exact color of y\n", + " ax_bot.add_patch(plt.Rectangle((max_lag, -i), 1, 1, color=y_color))\n", + " ax_bot.text(max_lag + 0.5, -i + 0.3, f\"{y_values[i]:.2f}\",\n", + " ha='center', va='center', fontsize=8, color='white')\n", + "\n", + "# Label rows and columns\n", + "for i in range(num_rows_to_show):\n", + " ax_bot.text(-0.5, -i + 0.3, f\"Row {i+1}\",\n", + " ha='right', va='center', fontsize=10)\n", + "for j in range(max_lag):\n", + " ax_bot.text(j + 0.3, 0.5, f\"Lag {max_lag-j}\",\n", + " ha='center', va='bottom', fontsize=10, color='k')\n", + "# Label 'y' above the target column\n", + "ax_bot.text(max_lag + 0.5, 0.5, \"y\",\n", + " ha='center', va='bottom', fontsize=10, color='red')\n", + "\n", + "# Draw dashed line separating the last lag column from target\n", + "ax_bot.axvline(x=max_lag, color='black', linestyle='--', alpha=0.7)\n", + "\n", + "# Make sure we only show exactly what's needed\n", + "ax_bot.set_xlim(-1, max_lag + 1)\n", + "ax_bot.set_ylim(-num_rows_to_show, 1)\n", + "ax_bot.set_xticks(range(max_lag + 2))\n", + "ax_bot.set_yticks([])\n", + "ax_bot.set_title(\"Matrix X (Lagged Inputs, Lead Time: 2) and y (Target)\",\n", + " fontsize=14)\n", + "\n", + "plt.tight_layout()\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": {