├── ARMA Model.ipynb ├── Anomaly Detection.ipynb ├── Augmented Dickey-Fuller Test.ipynb ├── GARCH Model.ipynb ├── GARCH Stock Modeling.ipynb ├── Gmail API Tutorial.ipynb ├── Google Vision API.ipynb ├── Granger Causality.ipynb ├── Investing.ipynb ├── MA Model.ipynb ├── Model Selection.ipynb ├── Multi Arm Bandit.ipynb ├── SARIMA Model.ipynb ├── STL Decomposition.ipynb ├── Stock Forecasting.ipynb ├── Time Series Data Preprocessing.ipynb ├── Time Series Data.ipynb ├── Undo Stationary Transformations.ipynb ├── VAR Model.ipynb ├── catfish.csv ├── ice_cream.csv ├── ice_cream_interest.csv ├── ice_cream_vs_heater.csv ├── original_series.csv └── series_tickers.p /GARCH Model.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": null, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "from random import gauss\n", 10 | "import matplotlib.pyplot as plt\n", 11 | "import numpy as np\n", 12 | "from arch import arch_model\n", 13 | "from statsmodels.graphics.tsaplots import plot_acf, plot_pacf" 14 | ] 15 | }, 16 | { 17 | "cell_type": "markdown", 18 | "metadata": {}, 19 | "source": [ 20 | "# GARCH(2,2) Model\n", 21 | "\n", 22 | "$$\n", 23 | "a_t = \\varepsilon_t \\sqrt{\\omega + \\alpha_1 a_{t-1}^2 + \\alpha_2 a_{t-2}^2 + \\beta_1 \\sigma_{t-1}^2 + \\beta_2 \\sigma_{t-2}^2}\n", 24 | "$$\n", 25 | "\n", 26 | "$$\n", 27 | "a_0, a_1 \\sim \\mathcal{N}(0,1)\n", 28 | "$$\n", 29 | "\n", 30 | "$$\n", 31 | "\\sigma_0 =1, \\sigma_1 = 1\n", 32 | "$$\n", 33 | "\n", 34 | "$$\n", 35 | "\\varepsilon_t \\sim \\mathcal{N}(0,1)\n", 36 | "$$" 37 | ] 38 | }, 39 | { 40 | "cell_type": "code", 41 | "execution_count": null, 42 | "metadata": {}, 43 | "outputs": [], 44 | "source": [ 45 | "# create dataset\n", 46 | "n = 1000\n", 47 | "omega = 0.5\n", 48 | "\n", 49 | "alpha_1 = 0.1\n", 50 | "alpha_2 = 0.2\n", 51 | "\n", 52 | "beta_1 = 0.3\n", 53 | "beta_2 = 0.4\n", 54 | "\n", 55 | "test_size = int(n*0.1)\n", 56 | "\n", 57 | "series = [gauss(0,1), gauss(0,1)]\n", 58 | "vols = [1, 1]\n", 59 | "\n", 60 | "for _ in range(n):\n", 61 | " new_vol = np.sqrt(omega + alpha_1*series[-1]**2 + alpha_2*series[-2]**2 + beta_1*vols[-1]**2 + beta_2*vols[-2]**2)\n", 62 | " new_val = gauss(0,1) * new_vol\n", 63 | " \n", 64 | " vols.append(new_vol)\n", 65 | " series.append(new_val)" 66 | ] 67 | }, 68 | { 69 | "cell_type": "code", 70 | "execution_count": null, 71 | "metadata": {}, 72 | "outputs": [], 73 | "source": [ 74 | "plt.figure(figsize=(10,4))\n", 75 | "plt.plot(series)\n", 76 | "plt.title('Simulated GARCH(2,2) Data', fontsize=20)" 77 | ] 78 | }, 79 | { 80 | "cell_type": "code", 81 | "execution_count": null, 82 | "metadata": {}, 83 | "outputs": [], 84 | "source": [ 85 | "plt.figure(figsize=(10,4))\n", 86 | "plt.plot(vols)\n", 87 | "plt.title('Data Volatility', fontsize=20)" 88 | ] 89 | }, 90 | { 91 | "cell_type": "code", 92 | "execution_count": null, 93 | "metadata": {}, 94 | "outputs": [], 95 | "source": [ 96 | "plt.figure(figsize=(10,4))\n", 97 | "plt.plot(series)\n", 98 | "plt.plot(vols, color='red')\n", 99 | "plt.title('Data and Volatility', fontsize=20)" 100 | ] 101 | }, 102 | { 103 | "cell_type": "markdown", 104 | "metadata": {}, 105 | "source": [ 106 | "# PACF Plot" 107 | ] 108 | }, 109 | { 110 | "cell_type": "code", 111 | "execution_count": null, 112 | "metadata": {}, 113 | "outputs": [], 114 | "source": [ 115 | "plot_pacf(np.array(series)**2)\n", 116 | "plt.show()" 117 | ] 118 | }, 119 | { 120 | "cell_type": "markdown", 121 | "metadata": {}, 122 | "source": [ 123 | "# Fit the GARCH Model" 124 | ] 125 | }, 126 | { 127 | "cell_type": "code", 128 | "execution_count": null, 129 | "metadata": {}, 130 | "outputs": [], 131 | "source": [ 132 | "train, test = series[:-test_size], series[-test_size:]" 133 | ] 134 | }, 135 | { 136 | "cell_type": "code", 137 | "execution_count": null, 138 | "metadata": {}, 139 | "outputs": [], 140 | "source": [ 141 | "model = arch_model(train, p=2, q=2)" 142 | ] 143 | }, 144 | { 145 | "cell_type": "code", 146 | "execution_count": null, 147 | "metadata": {}, 148 | "outputs": [], 149 | "source": [ 150 | "model_fit = model.fit()" 151 | ] 152 | }, 153 | { 154 | "cell_type": "code", 155 | "execution_count": null, 156 | "metadata": {}, 157 | "outputs": [], 158 | "source": [ 159 | "model_fit.summary()" 160 | ] 161 | }, 162 | { 163 | "cell_type": "markdown", 164 | "metadata": {}, 165 | "source": [ 166 | "# Predict" 167 | ] 168 | }, 169 | { 170 | "cell_type": "code", 171 | "execution_count": null, 172 | "metadata": {}, 173 | "outputs": [], 174 | "source": [ 175 | "predictions = model_fit.forecast(horizon=test_size)" 176 | ] 177 | }, 178 | { 179 | "cell_type": "code", 180 | "execution_count": null, 181 | "metadata": {}, 182 | "outputs": [], 183 | "source": [ 184 | "plt.figure(figsize=(10,4))\n", 185 | "true, = plt.plot(vols[-test_size:])\n", 186 | "preds, = plt.plot(np.sqrt(predictions.variance.values[-1, :]))\n", 187 | "plt.title('Volatility Prediction', fontsize=20)\n", 188 | "plt.legend(['True Volatility', 'Predicted Volatility'], fontsize=16)" 189 | ] 190 | }, 191 | { 192 | "cell_type": "code", 193 | "execution_count": null, 194 | "metadata": {}, 195 | "outputs": [], 196 | "source": [ 197 | "predictions_long_term = model_fit.forecast(horizon=1000)\n", 198 | "plt.figure(figsize=(10,4))\n", 199 | "true, = plt.plot(vols[-test_size:])\n", 200 | "preds, = plt.plot(np.sqrt(predictions_long_term.variance.values[-1, :]))\n", 201 | "plt.title('Long Term Volatility Prediction', fontsize=20)\n", 202 | "plt.legend(['True Volatility', 'Predicted Volatility'], fontsize=16)" 203 | ] 204 | }, 205 | { 206 | "cell_type": "markdown", 207 | "metadata": {}, 208 | "source": [ 209 | "# Rolling Forecast Origin" 210 | ] 211 | }, 212 | { 213 | "cell_type": "code", 214 | "execution_count": null, 215 | "metadata": {}, 216 | "outputs": [], 217 | "source": [ 218 | "rolling_predictions = []\n", 219 | "for i in range(test_size):\n", 220 | " train = series[:-(test_size-i)]\n", 221 | " model = arch_model(train, p=2, q=2)\n", 222 | " model_fit = model.fit(disp='off')\n", 223 | " pred = model_fit.forecast(horizon=1)\n", 224 | " rolling_predictions.append(np.sqrt(pred.variance.values[-1,:][0]))" 225 | ] 226 | }, 227 | { 228 | "cell_type": "code", 229 | "execution_count": null, 230 | "metadata": {}, 231 | "outputs": [], 232 | "source": [ 233 | "plt.figure(figsize=(10,4))\n", 234 | "true, = plt.plot(vols[-test_size:])\n", 235 | "preds, = plt.plot(rolling_predictions)\n", 236 | "plt.title('Volatility Prediction - Rolling Forecast', fontsize=20)\n", 237 | "plt.legend(['True Volatility', 'Predicted Volatility'], fontsize=16)" 238 | ] 239 | } 240 | ], 241 | "metadata": { 242 | "kernelspec": { 243 | "display_name": "Python 3", 244 | "language": "python", 245 | "name": "python3" 246 | }, 247 | "language_info": { 248 | "codemirror_mode": { 249 | "name": "ipython", 250 | "version": 3 251 | }, 252 | "file_extension": ".py", 253 | "mimetype": "text/x-python", 254 | "name": "python", 255 | "nbconvert_exporter": "python", 256 | "pygments_lexer": "ipython3", 257 | "version": "3.7.4" 258 | } 259 | }, 260 | "nbformat": 4, 261 | "nbformat_minor": 2 262 | } 263 | -------------------------------------------------------------------------------- /GARCH Stock Modeling.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# GARCH Stock Forecasting" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "## Read Data" 15 | ] 16 | }, 17 | { 18 | "cell_type": "code", 19 | "execution_count": null, 20 | "metadata": {}, 21 | "outputs": [], 22 | "source": [ 23 | "import pandas_datareader.data as web\n", 24 | "from datetime import datetime, timedelta\n", 25 | "import pandas as pd\n", 26 | "import matplotlib.pyplot as plt\n", 27 | "from arch import arch_model\n", 28 | "from statsmodels.graphics.tsaplots import plot_acf, plot_pacf\n", 29 | "import numpy as np" 30 | ] 31 | }, 32 | { 33 | "cell_type": "markdown", 34 | "metadata": {}, 35 | "source": [ 36 | "## DIS Volatility" 37 | ] 38 | }, 39 | { 40 | "cell_type": "code", 41 | "execution_count": null, 42 | "metadata": {}, 43 | "outputs": [], 44 | "source": [ 45 | "start = datetime(2015, 1, 1)\n", 46 | "end = datetime(2020, 6, 10)" 47 | ] 48 | }, 49 | { 50 | "cell_type": "code", 51 | "execution_count": null, 52 | "metadata": {}, 53 | "outputs": [], 54 | "source": [ 55 | "dis = web.DataReader('DIS', 'yahoo', start=start, end=end)" 56 | ] 57 | }, 58 | { 59 | "cell_type": "code", 60 | "execution_count": null, 61 | "metadata": {}, 62 | "outputs": [], 63 | "source": [ 64 | "returns = 100 * dis.Close.pct_change().dropna()" 65 | ] 66 | }, 67 | { 68 | "cell_type": "code", 69 | "execution_count": null, 70 | "metadata": {}, 71 | "outputs": [], 72 | "source": [ 73 | "plt.figure(figsize=(10,4))\n", 74 | "plt.plot(returns)\n", 75 | "plt.ylabel('Pct Return', fontsize=16)\n", 76 | "plt.title('DIS Returns', fontsize=20)" 77 | ] 78 | }, 79 | { 80 | "cell_type": "markdown", 81 | "metadata": {}, 82 | "source": [ 83 | "## PACF" 84 | ] 85 | }, 86 | { 87 | "cell_type": "code", 88 | "execution_count": null, 89 | "metadata": {}, 90 | "outputs": [], 91 | "source": [ 92 | "plot_pacf(returns**2)\n", 93 | "plt.show()" 94 | ] 95 | }, 96 | { 97 | "cell_type": "markdown", 98 | "metadata": {}, 99 | "source": [ 100 | "## Fit GARCH(3,3)" 101 | ] 102 | }, 103 | { 104 | "cell_type": "code", 105 | "execution_count": null, 106 | "metadata": {}, 107 | "outputs": [], 108 | "source": [ 109 | "model = arch_model(returns, p=3, q=3)" 110 | ] 111 | }, 112 | { 113 | "cell_type": "code", 114 | "execution_count": null, 115 | "metadata": {}, 116 | "outputs": [], 117 | "source": [ 118 | "model_fit = model.fit()" 119 | ] 120 | }, 121 | { 122 | "cell_type": "code", 123 | "execution_count": null, 124 | "metadata": { 125 | "scrolled": false 126 | }, 127 | "outputs": [], 128 | "source": [ 129 | "model_fit.summary()" 130 | ] 131 | }, 132 | { 133 | "cell_type": "markdown", 134 | "metadata": {}, 135 | "source": [ 136 | "## Try GARCH(3,0) = ARCH(3)" 137 | ] 138 | }, 139 | { 140 | "cell_type": "code", 141 | "execution_count": null, 142 | "metadata": {}, 143 | "outputs": [], 144 | "source": [ 145 | "model = arch_model(returns, p=3, q=0)" 146 | ] 147 | }, 148 | { 149 | "cell_type": "code", 150 | "execution_count": null, 151 | "metadata": {}, 152 | "outputs": [], 153 | "source": [ 154 | "model_fit = model.fit()" 155 | ] 156 | }, 157 | { 158 | "cell_type": "code", 159 | "execution_count": null, 160 | "metadata": {}, 161 | "outputs": [], 162 | "source": [ 163 | "model_fit.summary()" 164 | ] 165 | }, 166 | { 167 | "cell_type": "code", 168 | "execution_count": null, 169 | "metadata": {}, 170 | "outputs": [], 171 | "source": [ 172 | "rolling_predictions = []\n", 173 | "test_size = 365\n", 174 | "\n", 175 | "for i in range(test_size):\n", 176 | " train = returns[:-(test_size-i)]\n", 177 | " model = arch_model(train, p=3, q=0)\n", 178 | " model_fit = model.fit(disp='off')\n", 179 | " pred = model_fit.forecast(horizon=1)\n", 180 | " rolling_predictions.append(np.sqrt(pred.variance.values[-1,:][0]))" 181 | ] 182 | }, 183 | { 184 | "cell_type": "code", 185 | "execution_count": null, 186 | "metadata": {}, 187 | "outputs": [], 188 | "source": [ 189 | "rolling_predictions = pd.Series(rolling_predictions, index=returns.index[-365:])" 190 | ] 191 | }, 192 | { 193 | "cell_type": "code", 194 | "execution_count": null, 195 | "metadata": { 196 | "scrolled": true 197 | }, 198 | "outputs": [], 199 | "source": [ 200 | "plt.figure(figsize=(10,4))\n", 201 | "true, = plt.plot(returns[-365:])\n", 202 | "preds, = plt.plot(rolling_predictions)\n", 203 | "plt.title('Volatility Prediction - Rolling Forecast', fontsize=20)\n", 204 | "plt.legend(['True Returns', 'Predicted Volatility'], fontsize=16)" 205 | ] 206 | }, 207 | { 208 | "cell_type": "markdown", 209 | "metadata": {}, 210 | "source": [ 211 | "# S&P 500" 212 | ] 213 | }, 214 | { 215 | "cell_type": "code", 216 | "execution_count": null, 217 | "metadata": {}, 218 | "outputs": [], 219 | "source": [ 220 | "start = datetime(2000, 1, 1)\n", 221 | "end = datetime(2020, 6, 10)" 222 | ] 223 | }, 224 | { 225 | "cell_type": "code", 226 | "execution_count": null, 227 | "metadata": {}, 228 | "outputs": [], 229 | "source": [ 230 | "spy = web.DataReader('SPY', 'yahoo', start=start, end=end)" 231 | ] 232 | }, 233 | { 234 | "cell_type": "code", 235 | "execution_count": null, 236 | "metadata": {}, 237 | "outputs": [], 238 | "source": [ 239 | "returns = 100 * spy.Close.pct_change().dropna()" 240 | ] 241 | }, 242 | { 243 | "cell_type": "code", 244 | "execution_count": null, 245 | "metadata": {}, 246 | "outputs": [], 247 | "source": [ 248 | "plt.figure(figsize=(10,4))\n", 249 | "plt.plot(returns)\n", 250 | "plt.ylabel('Pct Return', fontsize=16)\n", 251 | "plt.title('SPY Returns', fontsize=20)" 252 | ] 253 | }, 254 | { 255 | "cell_type": "markdown", 256 | "metadata": {}, 257 | "source": [ 258 | "## PACF" 259 | ] 260 | }, 261 | { 262 | "cell_type": "code", 263 | "execution_count": null, 264 | "metadata": {}, 265 | "outputs": [], 266 | "source": [ 267 | "plot_pacf(returns**2)\n", 268 | "plt.show()" 269 | ] 270 | }, 271 | { 272 | "cell_type": "markdown", 273 | "metadata": {}, 274 | "source": [ 275 | "## Fit GARCH(2,2)" 276 | ] 277 | }, 278 | { 279 | "cell_type": "code", 280 | "execution_count": null, 281 | "metadata": {}, 282 | "outputs": [], 283 | "source": [ 284 | "model = arch_model(returns, p=2, q=2)" 285 | ] 286 | }, 287 | { 288 | "cell_type": "code", 289 | "execution_count": null, 290 | "metadata": {}, 291 | "outputs": [], 292 | "source": [ 293 | "model_fit = model.fit()" 294 | ] 295 | }, 296 | { 297 | "cell_type": "code", 298 | "execution_count": null, 299 | "metadata": { 300 | "scrolled": false 301 | }, 302 | "outputs": [], 303 | "source": [ 304 | "model_fit.summary()" 305 | ] 306 | }, 307 | { 308 | "cell_type": "markdown", 309 | "metadata": {}, 310 | "source": [ 311 | "## Rolling Forecast" 312 | ] 313 | }, 314 | { 315 | "cell_type": "code", 316 | "execution_count": null, 317 | "metadata": {}, 318 | "outputs": [], 319 | "source": [ 320 | "rolling_predictions = []\n", 321 | "test_size = 365*5\n", 322 | "\n", 323 | "for i in range(test_size):\n", 324 | " train = returns[:-(test_size-i)]\n", 325 | " model = arch_model(train, p=2, q=2)\n", 326 | " model_fit = model.fit(disp='off')\n", 327 | " pred = model_fit.forecast(horizon=1)\n", 328 | " rolling_predictions.append(np.sqrt(pred.variance.values[-1,:][0]))" 329 | ] 330 | }, 331 | { 332 | "cell_type": "code", 333 | "execution_count": null, 334 | "metadata": {}, 335 | "outputs": [], 336 | "source": [ 337 | "rolling_predictions = pd.Series(rolling_predictions, index=returns.index[-365*5:])" 338 | ] 339 | }, 340 | { 341 | "cell_type": "code", 342 | "execution_count": null, 343 | "metadata": { 344 | "scrolled": true 345 | }, 346 | "outputs": [], 347 | "source": [ 348 | "plt.figure(figsize=(10,4))\n", 349 | "true, = plt.plot(returns[-365*5:])\n", 350 | "preds, = plt.plot(rolling_predictions)\n", 351 | "plt.title('Volatility Prediction - Rolling Forecast', fontsize=20)\n", 352 | "plt.legend(['True Returns', 'Predicted Volatility'], fontsize=16)" 353 | ] 354 | }, 355 | { 356 | "cell_type": "markdown", 357 | "metadata": {}, 358 | "source": [ 359 | "# How to use the model" 360 | ] 361 | }, 362 | { 363 | "cell_type": "code", 364 | "execution_count": null, 365 | "metadata": {}, 366 | "outputs": [], 367 | "source": [ 368 | "train = returns\n", 369 | "model = arch_model(train, p=2, q=2)\n", 370 | "model_fit = model.fit(disp='off')" 371 | ] 372 | }, 373 | { 374 | "cell_type": "code", 375 | "execution_count": null, 376 | "metadata": {}, 377 | "outputs": [], 378 | "source": [ 379 | "pred = model_fit.forecast(horizon=7)\n", 380 | "future_dates = [returns.index[-1] + timedelta(days=i) for i in range(1,8)]\n", 381 | "pred = pd.Series(np.sqrt(pred.variance.values[-1,:]), index=future_dates)" 382 | ] 383 | }, 384 | { 385 | "cell_type": "code", 386 | "execution_count": null, 387 | "metadata": {}, 388 | "outputs": [], 389 | "source": [ 390 | "plt.figure(figsize=(10,4))\n", 391 | "plt.plot(pred)\n", 392 | "plt.title('Volatility Prediction - Next 7 Days', fontsize=20)" 393 | ] 394 | }, 395 | { 396 | "cell_type": "code", 397 | "execution_count": null, 398 | "metadata": {}, 399 | "outputs": [], 400 | "source": [] 401 | } 402 | ], 403 | "metadata": { 404 | "kernelspec": { 405 | "display_name": "Python 3", 406 | "language": "python", 407 | "name": "python3" 408 | }, 409 | "language_info": { 410 | "codemirror_mode": { 411 | "name": "ipython", 412 | "version": 3 413 | }, 414 | "file_extension": ".py", 415 | "mimetype": "text/x-python", 416 | "name": "python", 417 | "nbconvert_exporter": "python", 418 | "pygments_lexer": "ipython3", 419 | "version": "3.7.4" 420 | } 421 | }, 422 | "nbformat": 4, 423 | "nbformat_minor": 2 424 | } 425 | -------------------------------------------------------------------------------- /Gmail API Tutorial.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "raw", 5 | "metadata": {}, 6 | "source": [ 7 | "Relevant Links:\n", 8 | "\n", 9 | "1. Visit https://developers.google.com/gmail/api/quickstart/python\n", 10 | "\n", 11 | "2. Click \"Enable the GMail API\", follow the steps and finallly click \"DOWNLOAD CLIENT CONFIGURATION\". Save the \"credentials.json\" file to the current working directory\n", 12 | "\n", 13 | "3. Visit https://console.cloud.google.com/\n", 14 | "\n", 15 | "4. Create a new project\n", 16 | "\n", 17 | "5. Click \"Go to APIs Overview\"\n", 18 | "\n", 19 | "6. Click the \"Credentials\" tab on the left. Click \"+ CREATE CREDENTIALS\" at the top and choose \"Service Account\". Give the service account a name and click \"Create\"\n", 20 | "\n", 21 | "7. Click on the newly created service account, ensure it is enabled, and click \"ADD KEY\" -> \"Create new key\". Pick \"JSON\" and download the json file and store it in the current working directory.\n", 22 | "\n", 23 | "8. Run the cells in this notebook." 24 | ] 25 | }, 26 | { 27 | "cell_type": "code", 28 | "execution_count": null, 29 | "metadata": {}, 30 | "outputs": [], 31 | "source": [ 32 | "pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib" 33 | ] 34 | }, 35 | { 36 | "cell_type": "code", 37 | "execution_count": null, 38 | "metadata": {}, 39 | "outputs": [], 40 | "source": [ 41 | "from __future__ import print_function\n", 42 | "\n", 43 | "from random import random\n", 44 | "from datetime import datetime\n", 45 | "import sys\n", 46 | "\n", 47 | "import os\n", 48 | "import pickle\n", 49 | "import google.oauth2.credentials\n", 50 | "from email.mime.text import MIMEText\n", 51 | "import base64\n", 52 | "\n", 53 | "from googleapiclient.discovery import build\n", 54 | "from googleapiclient.errors import HttpError\n", 55 | "from google_auth_oauthlib.flow import InstalledAppFlow\n", 56 | "from google.auth.transport.requests import Request" 57 | ] 58 | }, 59 | { 60 | "cell_type": "code", 61 | "execution_count": null, 62 | "metadata": {}, 63 | "outputs": [], 64 | "source": [ 65 | "#set this to the name of the JSON file downloaded in step 7 above\n", 66 | "os.environ[\"GOOGLE_APPLICATION_CREDENTIALS\"]= \"\"" 67 | ] 68 | }, 69 | { 70 | "cell_type": "markdown", 71 | "metadata": {}, 72 | "source": [ 73 | "# Setup" 74 | ] 75 | }, 76 | { 77 | "cell_type": "code", 78 | "execution_count": null, 79 | "metadata": {}, 80 | "outputs": [], 81 | "source": [ 82 | "# If modifying these scopes, delete the file token_gmail.pickle.\n", 83 | "SCOPES = ['https://www.googleapis.com/auth/gmail.compose']\n", 84 | "\n", 85 | "def main():\n", 86 | " \"\"\"Shows basic usage of the Gmail API.\n", 87 | " Lists the user's Gmail labels.\n", 88 | " \"\"\"\n", 89 | " creds = None\n", 90 | " # The file token_gmail.pickle stores the user's access and refresh tokens, and is\n", 91 | " # created automatically when the authorization flow completes for the first\n", 92 | " # time.\n", 93 | " if os.path.exists('token_gmail.pickle'):\n", 94 | " with open('token_gmail.pickle', 'rb') as token:\n", 95 | " creds = pickle.load(token)\n", 96 | " # If there are no (valid) credentials available, let the user log in.\n", 97 | " if not creds or not creds.valid:\n", 98 | " if creds and creds.expired and creds.refresh_token:\n", 99 | " creds.refresh(Request())\n", 100 | " else:\n", 101 | " flow = InstalledAppFlow.from_client_secrets_file(\n", 102 | " 'credentials.json', SCOPES)\n", 103 | " creds = flow.run_local_server(port=0)\n", 104 | " # Save the credentials for the next run\n", 105 | " with open('token_gmail.pickle', 'wb') as token:\n", 106 | " pickle.dump(creds, token)\n", 107 | "\n", 108 | "if __name__ == '__main__':\n", 109 | " main()" 110 | ] 111 | }, 112 | { 113 | "cell_type": "code", 114 | "execution_count": null, 115 | "metadata": {}, 116 | "outputs": [], 117 | "source": [ 118 | "def get_authenticated_gmail_service():\n", 119 | " \"\"\"\n", 120 | " This function uses the token_gmail.pickle file to get an authenticated object used to talk to Gmail\n", 121 | " \"\"\"\n", 122 | "\n", 123 | " credentials = None\n", 124 | " API_SERVICE_NAME = 'gmail'\n", 125 | " API_VERSION = 'v1'\n", 126 | " \n", 127 | " if os.path.exists('token_gmail.pickle'):\n", 128 | " with open('token_gmail.pickle', 'rb') as token:\n", 129 | " credentials = pickle.load(token)\n", 130 | "\n", 131 | " return build(API_SERVICE_NAME, API_VERSION, credentials = credentials)" 132 | ] 133 | }, 134 | { 135 | "cell_type": "code", 136 | "execution_count": null, 137 | "metadata": {}, 138 | "outputs": [], 139 | "source": [ 140 | "service = get_authenticated_gmail_service() " 141 | ] 142 | }, 143 | { 144 | "cell_type": "markdown", 145 | "metadata": {}, 146 | "source": [ 147 | "# Core Functions" 148 | ] 149 | }, 150 | { 151 | "cell_type": "code", 152 | "execution_count": null, 153 | "metadata": {}, 154 | "outputs": [], 155 | "source": [ 156 | "def create_message(sender, to, subject, message_text):\n", 157 | " \"\"\"\n", 158 | " Create a message for an email.\n", 159 | "\n", 160 | " Args:\n", 161 | " sender: Email address of the sender.\n", 162 | " to: Email address of the receiver.\n", 163 | " subject: The subject of the email message.\n", 164 | " message_text: The text of the email message.\n", 165 | "\n", 166 | " Returns:\n", 167 | " An object containing a base64url encoded email object.\n", 168 | " \"\"\"\n", 169 | " message = MIMEText(message_text)\n", 170 | " message['to'] = to\n", 171 | " message['from'] = sender\n", 172 | " message['subject'] = subject\n", 173 | " return {'raw': base64.urlsafe_b64encode(message.as_string().encode()).decode()}" 174 | ] 175 | }, 176 | { 177 | "cell_type": "code", 178 | "execution_count": null, 179 | "metadata": {}, 180 | "outputs": [], 181 | "source": [ 182 | "def send_message(service, user_id, message):\n", 183 | " \"\"\"\n", 184 | " Send an email message.\n", 185 | "\n", 186 | " Args:\n", 187 | " service: Authorized Gmail API service instance.\n", 188 | " user_id: User's email address. The special value \"me\"\n", 189 | " can be used to indicate the authenticated user.\n", 190 | " message: Message to be sent.\n", 191 | "\n", 192 | " Returns:\n", 193 | " Sent Message.\n", 194 | " \"\"\"\n", 195 | " \n", 196 | " try:\n", 197 | " message = (service.users().messages().send(userId=user_id, body=message)\n", 198 | " .execute())\n", 199 | " print('Message Id: %s' % message['id'])\n", 200 | " return message\n", 201 | " except Exception as e:\n", 202 | " print('An error occurred: %s' % e)" 203 | ] 204 | }, 205 | { 206 | "cell_type": "markdown", 207 | "metadata": {}, 208 | "source": [ 209 | "# Run Code" 210 | ] 211 | }, 212 | { 213 | "cell_type": "code", 214 | "execution_count": null, 215 | "metadata": {}, 216 | "outputs": [], 217 | "source": [ 218 | "#create a message\n", 219 | "my_message = create_message('your_email_address', 'your_email_address', 'Subject', 'message text')" 220 | ] 221 | }, 222 | { 223 | "cell_type": "code", 224 | "execution_count": null, 225 | "metadata": {}, 226 | "outputs": [], 227 | "source": [ 228 | "#send the message\n", 229 | "send_message(service, 'me', my_message)" 230 | ] 231 | }, 232 | { 233 | "cell_type": "code", 234 | "execution_count": null, 235 | "metadata": {}, 236 | "outputs": [], 237 | "source": [] 238 | } 239 | ], 240 | "metadata": { 241 | "kernelspec": { 242 | "display_name": "Python 3", 243 | "language": "python", 244 | "name": "python3" 245 | }, 246 | "language_info": { 247 | "codemirror_mode": { 248 | "name": "ipython", 249 | "version": 3 250 | }, 251 | "file_extension": ".py", 252 | "mimetype": "text/x-python", 253 | "name": "python", 254 | "nbconvert_exporter": "python", 255 | "pygments_lexer": "ipython3", 256 | "version": "3.7.7" 257 | } 258 | }, 259 | "nbformat": 4, 260 | "nbformat_minor": 2 261 | } 262 | -------------------------------------------------------------------------------- /Google Vision API.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "raw", 5 | "metadata": {}, 6 | "source": [ 7 | "Steps:\n", 8 | " \n", 9 | "1. Visit https://console.cloud.google.com/\n", 10 | "\n", 11 | "2. Create a new project if none exist (otherwise you can use an existing one)\n", 12 | "\n", 13 | "3. Click \"Go to APIs Overview\" -> Click \"Enable APIs and Services\" -> Enable the \"Cloud Vision API\"\n", 14 | "\n", 15 | "4. Click the \"Credentials\" tab on the left. Click \"+ CREATE CREDENTIALS\" at the top and choose \"Service Account\". Give the service account a name and click \"Create\"\n", 16 | "\n", 17 | "5. Click on the newly created service account, ensure it is enabled, and click \"ADD KEY\" -> \"Create new key\". Pick \"JSON\" and download the json file and store it in the current working directory.\n", 18 | "\n", 19 | "6. Run the cells in this notebook." 20 | ] 21 | }, 22 | { 23 | "cell_type": "code", 24 | "execution_count": null, 25 | "metadata": {}, 26 | "outputs": [], 27 | "source": [ 28 | "pip install google-cloud-vision" 29 | ] 30 | }, 31 | { 32 | "cell_type": "code", 33 | "execution_count": null, 34 | "metadata": {}, 35 | "outputs": [], 36 | "source": [ 37 | "import os\n", 38 | "\n", 39 | "from google.cloud import vision\n", 40 | "from google.cloud.vision import types" 41 | ] 42 | }, 43 | { 44 | "cell_type": "code", 45 | "execution_count": null, 46 | "metadata": {}, 47 | "outputs": [], 48 | "source": [ 49 | "#the JSON file you downloaded in step 5 above\n", 50 | "os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = ''" 51 | ] 52 | }, 53 | { 54 | "cell_type": "code", 55 | "execution_count": null, 56 | "metadata": {}, 57 | "outputs": [], 58 | "source": [ 59 | "# Instantiates a client\n", 60 | "client = vision.ImageAnnotatorClient()" 61 | ] 62 | }, 63 | { 64 | "cell_type": "code", 65 | "execution_count": null, 66 | "metadata": {}, 67 | "outputs": [], 68 | "source": [ 69 | "#set this thumbnail as the url\n", 70 | "image = types.Image()\n", 71 | "image.source.image_uri = 'https://i.ytimg.com/vi/UQQHSbeIaB0/maxresdefault.jpg'" 72 | ] 73 | }, 74 | { 75 | "cell_type": "code", 76 | "execution_count": null, 77 | "metadata": {}, 78 | "outputs": [], 79 | "source": [ 80 | "#### LABEL DETECTION ######\n", 81 | "\n", 82 | "response_label = client.label_detection(image=image)\n", 83 | "\n", 84 | "for label in response_label.label_annotations:\n", 85 | " print({'label': label.description, 'score': label.score})" 86 | ] 87 | }, 88 | { 89 | "cell_type": "code", 90 | "execution_count": null, 91 | "metadata": {}, 92 | "outputs": [], 93 | "source": [ 94 | "#### FACE DETECTION ######\n", 95 | "\n", 96 | "response_face = client.face_detection(image=image)\n", 97 | "\n", 98 | "face_data = []\n", 99 | "\n", 100 | "for face_detection in response_face.face_annotations:\n", 101 | " d = {\n", 102 | " 'confidence': face_detection.detection_confidence,\n", 103 | " 'joy': face_detection.joy_likelihood,\n", 104 | " 'sorrow': face_detection.sorrow_likelihood,\n", 105 | " 'surprise': face_detection.surprise_likelihood,\n", 106 | " 'anger': face_detection.anger_likelihood\n", 107 | " }\n", 108 | " print(d)\n", 109 | " " 110 | ] 111 | }, 112 | { 113 | "cell_type": "code", 114 | "execution_count": null, 115 | "metadata": {}, 116 | "outputs": [], 117 | "source": [ 118 | "#### IMAGE PROPERTIES ######\n", 119 | "\n", 120 | "response_image = client.image_properties(image=image)\n", 121 | "\n", 122 | "image_data = []\n", 123 | "\n", 124 | "for c in response_image.image_properties_annotation.dominant_colors.colors[:3]:\n", 125 | " d = {\n", 126 | " 'color': c.color,\n", 127 | " 'score': c.score,\n", 128 | " 'pixel_fraction': c.pixel_fraction\n", 129 | " }\n", 130 | " print(d)" 131 | ] 132 | }, 133 | { 134 | "cell_type": "code", 135 | "execution_count": null, 136 | "metadata": {}, 137 | "outputs": [], 138 | "source": [ 139 | "#### TEXT DETECTION ######\n", 140 | "\n", 141 | "response_text = client.text_detection(image=image)\n", 142 | "\n", 143 | "for r in response_text.text_annotations:\n", 144 | " d = {\n", 145 | " 'text': r.description\n", 146 | " }\n", 147 | " print(d)" 148 | ] 149 | }, 150 | { 151 | "cell_type": "code", 152 | "execution_count": null, 153 | "metadata": {}, 154 | "outputs": [], 155 | "source": [] 156 | } 157 | ], 158 | "metadata": { 159 | "kernelspec": { 160 | "display_name": "Python 3", 161 | "language": "python", 162 | "name": "python3" 163 | }, 164 | "language_info": { 165 | "codemirror_mode": { 166 | "name": "ipython", 167 | "version": 3 168 | }, 169 | "file_extension": ".py", 170 | "mimetype": "text/x-python", 171 | "name": "python", 172 | "nbconvert_exporter": "python", 173 | "pygments_lexer": "ipython3", 174 | "version": "3.7.7" 175 | } 176 | }, 177 | "nbformat": 4, 178 | "nbformat_minor": 4 179 | } 180 | -------------------------------------------------------------------------------- /Granger Causality.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 152, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "from statsmodels.tsa.stattools import grangercausalitytests\n", 10 | "import numpy as np\n", 11 | "import pandas as pd\n", 12 | "import matplotlib.pyplot as plt" 13 | ] 14 | }, 15 | { 16 | "cell_type": "code", 17 | "execution_count": 153, 18 | "metadata": {}, 19 | "outputs": [], 20 | "source": [ 21 | "#build the time series, just a simple AR(1)\n", 22 | "t1 = [0.1*np.random.normal()]\n", 23 | "for _ in range(100):\n", 24 | " t1.append(0.5*t1[-1] + 0.1*np.random.normal())" 25 | ] 26 | }, 27 | { 28 | "cell_type": "code", 29 | "execution_count": 154, 30 | "metadata": {}, 31 | "outputs": [], 32 | "source": [ 33 | "#build the time series that is granger caused by t1\n", 34 | "t2 = [item + 0.1*np.random.normal() for item in t1]" 35 | ] 36 | }, 37 | { 38 | "cell_type": "code", 39 | "execution_count": 155, 40 | "metadata": {}, 41 | "outputs": [], 42 | "source": [ 43 | "#adjust t1 and t2\n", 44 | "t1 = t1[3:]\n", 45 | "t2 = t2[:-3]" 46 | ] 47 | }, 48 | { 49 | "cell_type": "code", 50 | "execution_count": 156, 51 | "metadata": {}, 52 | "outputs": [ 53 | { 54 | "data": { 55 | "text/plain": [ 56 | "" 57 | ] 58 | }, 59 | "execution_count": 156, 60 | "metadata": {}, 61 | "output_type": "execute_result" 62 | }, 63 | { 64 | "data": { 65 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlsAAAD4CAYAAADb0iMYAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOydeXxU1dnHf3eyr2QPWSEJEAiLCAFkE6TWra6t2rrbgopUrbVal1fUt2prq7VuFSt9VWxdcIPSqqBVoVQEEgRkCYEEAtkz2fdtct8/nntm7ty522zZON/Ph8+QWe7cucs5v/N7nvMcQRRFcDgcDofD4XD8g2Wod4DD4XA4HA5nNMPFFofD4XA4HI4f4WKLw+FwOBwOx49wscXhcDgcDofjR7jY4nA4HA6Hw/EjgUO9A3okJCSI48ePH+rd4HA4HA6HwzFkz5499aIoJiqfH9Zia/z48SgsLBzq3eBwOBwOh8MxRBCEk2rP8zAih8PhcDgcjh/hYovD4XA4HA7Hj3CxxeFwOBwOh+NHuNjicDgcDofD8SNcbHE4HA6Hw+H4ES62OBwOh8PhcPzIsC79wOFwOBwOZ3BoaWlBfX09ent7h3pXhhUBAQGIiopCXFwcQkJCPNoGF1scDmdk0t8PvPkmcNNNQEDAUO8NhzOi6e7uRm1tLdLT0xEWFgZBEIZ6l4YFoiiir68Pra2tOHXqFDIzMz0SXDyMyOFwRibbtwPLl9Mjh8PxCqvVisTERISHh3OhJUMQBAQHByMhIQGxsbFobGz0aDtcbHE4nJFJays9trQM7X5wOKOA7u5uREZGDvVuDGuio6PR1tbm0We52OJwOCOTjg7nRw6H4zH9/f0IDOSZRXoEBQXBZrN59Fkutjgczsiks5Me29uHdj84nFECDx/q483x4WKLw+GMTJijxcUWh8MZ5nCxxeFwRiY8jMjhcEYIXGxxOJyRCXe2OByOBhs3bsSzzz7r8vxDDz2E8847D/Hx8RAEAW+88cag7A8XWxwOZ2TCxRaHw9FAS2y9+OKL6OrqwsUXXzyo+8OnHnA4nJEJS5DnYUQOh2OSlpYWWCwWlJSU4M033xy07+XOFofDGZlwZ4vD4ahw8803Y926daisrIQgCBAEAePHjwcAWCxDI3u4s8XhcEYmXGxxOH7l7ruBffuGdh9mzgSee869z6xevRpWqxUFBQXYtGkTAHi8pqGv4GKLw+GMTLjY4nA4KuTk5CAxMRHBwcE466yzhnp3AHCxxeFwRiq89AOH41fcdZQ42vCcLQ6HMzLhFeQ5HM4IgYstDoczMuFhRA6HM0LgYovD4YxMeBiRw+FoEBISgq6urqHeDTs8Z4vD4YxM5M6WKAJ8EV0OhyORl5eHxsZGrFmzBvn5+QgNDcX06dOxbds2WK1W1NTUAAAKCwsRGRkJALjyyiv9tj+CKIp+27i35Ofni4WFhUO9GxwOZ7ghikBQEP3fZiPhFR4+tPvE4YxgioqKMGXKlKHeDZ/R0dGBFStWYPPmzWhubsa4ceNQVlaGpUuXYtu2baqfMaOHjI6TIAh7RFHMVz7PnS0OhzPy6OsjkZWSAlRXc7HF4XCciIiIwDvvvOPy/NatWwd/Z8BztjgczkiEhRCTkuiRJ8lzOJxhDBdbHA5n5MHEVnIyPXKxxeFwhjFcbHE4nJGH0tniMxI5HM4whostDocz8uDOFofDGUFwscXhcEYerHo8z9nicDgjAC62OBzOyIOHETkczgjCJ2JLEIQLBEEoFgShRBCEB3TeN0cQBJsgCP6rHMbhcEY/PIzI4XBGEF6LLUEQAgD8GcCFAPIAXCMIQp7G+34PYIu338nhcE5zuNjicDgjCF84W3MBlIiieFwUxV4A7wK4TOV9dwL4EECdD76Tw+GczrCcrcREeuRhRA6HM4zxhdhKA1Au+7tCes6OIAhpAK4A8IoPvo/D4ZzuMHEVHQ2EhXFni8PhDGt8IbbUVn9VLjD0HID7RVG0GW5MEG4VBKFQEIRCq9Xqg93jcDijDia2wsOBiAgutjgcjhMbN27Es88+6/RcYWEhbr31VkyePBnh4eHIzMzEddddhxMnTvh9f3whtioAZMj+TgdQpXhPPoB3BUEoA3AlgJcFQbhcbWOiKL4qimK+KIr5iSxEwOFwOHI6Omgh6qAgIDKSiy0Oh+OEmth69913cejQIdx111349NNP8dRTT+Hbb79Ffn4+ysvLNbbkG3yxEHUBgImCIGQBqATwEwDXyt8gimIW+78gCG8A+Jcoiht98N0cDud0pKODHC2AxBbP2eJwOAbcf//9UJo4CxcuRFZWFtauXYvf/OY3fvtur8WWKIr9giDcAZplGADgNVEUDwmCsFJ6nedpcTgc39LZ6RBbPIzI4XBk3HzzzVi3bh0AQBAo02ncuHEoKytzee+4ceOQmJiIyspKv+6TL5wtiKL4CYBPFM+piixRFG/2xXdyOJzTGKWzxcUWh+N77r4b2LdvaPdh5kzguefc+sjq1athtVpRUFCATZs2AQBCQkJU31tUVIS6ujpMmTLF613Vwydii8PhcAaVjg5KjgdIbNXXD+3+cDicYUNOTg4SExMRHByMs846S/N9/f39WLlyJRITE7F8+XK/7hMXWxwOZ+Qhd7Z4GJHD8Q9uOkojjTvuuAM7duzAxx9/jNjYWL9+F18bkcPhjDx4GJHD4XjBgw8+iFdffRWvvfYazjvvPL9/HxdbHA5n5CFPkOezETkcjhs8+eSTeOqpp/D888/jhhtuGJTv5GKLw+GMPJRhxI4OYGBgaPeJw+EMG0JCQtDV1eXy/AsvvICHH34YTz75JO68885B2x+es8XhcEYeygR5UQS6uhwCjMPhnNbk5eWhsbERa9asQX5+PkJDQ3Ho0CHcfffduOCCC7Bs2TLs3LnT/v7o6Gjk5eX5bX+42OJwOCMPZc6W8jkOh3Nas2LFCuzcuRMPPfQQmpubMW7cOCxduhSiKGLz5s3YvHmz0/uXLFmCrVu3+m1/uNjicDgjC1F0zdkCKEk+Kcn339feDkyYALz5JjAIibQcDsd7IiIi8M4777g8/8Ybbwz+zoDnbHE4nJFGdzcJLnnOFuC/GYmVlUBtLVBQ4J/tczicUQ8XWxwOZ2TBZh6qhRH9QXMzPVZX+2f7HA5n1MPFFofDGVkwUSVPkAf852y1tNBjVZV/ts/hcEY9XGxxOJyRhdLZ8ncYkTtbHA7HS7jY4nA4I4vBDiNyZ4szGjhwAEhN1b2ORVEcxB0aeXhzfLjY4nA4I4vOTnpUm43oD5izVVNDifmDzcqVwFVXDf73ckYX27aRO3vkiOrLQUFBqkVAOQ66uroQEhLi0We52OJwOCOLoQoj9vYCjY3++Q499uwB/vlPoKdn8L+bM3o4epQem5pUX05KSkJlZSU6Ozu5wyVDFEX09fWhsbERFRUViI+P92g7vM4Wh8PxP6IInDwJjBsHCIJ321ImyLNHf4cRAQrBeNjYekxDAwmtwkJg4cLB/W7O6MFAbEVHRwMAqqqq0NfXN1h7NSIIDAxEaGgoMjMzERoa6tk2fLxPHA6H44zVCqxaBXzwAfDZZ8D3v+/d9pTOVkAACS5/O1sAhWGmT/fP92hRX0+P//0vF1sczykupkf59awgOjraLro4voWHETmc0ciKFcAvfznUewH84x/AtGnAhx/S3xUV3m9TKbbY//0ptmJi6P+DnSTf0wO0tdH/t28f3O/mjB66u8lZBjSdLY5/4WKLwxmNbN9OuT5DRXMzcNNNwOWX0wyoL7+k530hiJQJ8gAlyfuzztbkyfT/wS7/0NBAjyEhwNdfAwMDg/v9nNFBSYljcgcXW0MCF1sczmjEavVfDpMRx49TqO2tt4DVq4Fdu4D58+k1XwgiZc4WQGLLnxXkU1KAMWOGTmyddx7tx8GDg/v9nNEBy9cSBC62hggutjic0UZfHzWozAEabDZtonDh1q3Ab34DBAfTv8BAF7H1zDPAjh1ubr+jAwgNBSyy5sufYcSWFhJaBjWK/ALL17riCnrkoUSOJ7B8rcmTh05sVVT47x4dAXCxxeGMNpgbMlTOltVKSesLFjieEwRyn1j+ESgi9sADwF//6ub2OzqcQ4iAf8OILGcrJcXY2RJF39biYmJr9mwgLY2LrdMYUQRuvpnmmLjN0aM0WMjIGDqxNX8+8NhjQ/PdwwAutjic0YbVSo9DKbYSEpydJ8BFENXVATYbcOqUm9vXElv++L02GwlEs2Lr/vuBpUt99/1MOCcmAosXk9jiNZBOS+rqgHXrgE8+8eDDxcXApElAbOzQiK2WFnK2iooG/7uHCVxscTijjbo6evSx+OjspAilIVYriQMlUVFOYotF5MrLPdgRpdjyVxixtZUe5WFEPbGzYwewd6/vvp85W/HxJLaqqoATJ3y3fc6I4dAhemSXhFscPQrk5g6d2Coro0c2I/I0hIstDme0wZytnh5yZnzEggXAffeZ/H41saVwtuRiyy2zZjDDiKwmEXO2enp06xShpIScMF/tS309idTgYBJbANXb4px2HD5Mj8zsNE1DA/1jzlZz8+C7o2yAcPLkaevMcrHF4Yw2mNgCfOZulZYC+/ebNFXq602JrcpKeuzqcrMDGcwwIqseHxNDzhagnSTf3g7U1tL/fTVrsb6eQrIAMHUqdZY8b+u0xGOxxWYiMmerv3/wUwxYw9Herj9YGcVwscXhjDb8ILZYUq4sv13/+5lAkKPhbAFuhhI7OpzLPgAkvjo6fF+HinUMY8aQswVoC6nSUsf/fSW2Ghocx9JioQryXGydljCx5XYYkc1EZM4W4LtQos0GHDtm/D75KM3tJM3RARdbHM5oww9ia8sWejQUW/39tFizG2FEwM32V8vZAnxf7kIZRgQGV2zV1zuvxbh4MXWeLC+Pc9pw9FAfDmAarq16xs0PHqWyK1lZvhdbH30ETJliPFoqK6N9AE7bvC0utjic0Ya8I/aB+OjrcxSAZ/nimshnzylRCSOmpdH/3XK21BLkmdjydXiEhRHlzpZWGLGkxPF/f4QRAZ63dZpitQJT6v+DaTiE1T3/g97vjpj/cHExkJNDYoctO+UrsVVaSu6WUbHdEyeA/Hz6P3e2OBzOqMDHztbOneRoJSSYcLbYd5t0tmbOpNxvt8OIarMRAd8nycudrchISlbXc7bi42lpHV8VP1WKrdmzgbAwHko8zTh8GLgCG9BjCUUHIoCVK80nmh89SiFEwPfOFhvYsVClGqJIYmvuXLo3uLPFcYvmZmDsWKqSzeEMJ6xWujYBn4itzz6jGqUXX+wjsSV1ElVVQHo6/fNZGNFfYis6mh71am2VlAATJtCx94Wz1dNDv0cutoKDgXnzuNg6zTh8SMTl2IjyKefj1/gDgr/ZBrz+uvEHWU5Vbi797WuxxSaEsCR8Nerr6Z7NzgYyM7mzxXGTEyfoQtu3b6j3hMNxxmoFxo+n//tIbM2bR8Wn29sNctBZ9q6W2BJFoLMTPT20m2lptF3TzpbNBnR3uybI+zOMGBnpyDfRW7KntJTEVmqqb8QWC8nKc7YAYNEiquVlarYCZzTQvrUQ6ahEz0VX4DX8DM0zFgP33mucu1deTqJ9KJ0tlhyflUViiztbHLdgDaHb83A5HD/S30/XpI/EVkMDUFBA6yBHRZnYJHO21GYjsg20t6Omhv6bmurmYLerix4H09lieS6AtrPV00MdW06OuUrzZmDCVXksFy8mxfvNN95/B2dEkLZ7A/oRgIEfXAIRFhQs/wtd67/8pf4HmQhizlZ0tG8Xo2ZiS8/ZYgVNs7KAceO4s8VxE9YQcrHFGU6w69FHYuuLL8iMOv98h1bSNVSY2FK6MYCTIGLmEFuurarKZP1V9nsGK2eLLULN0KoiX1ZGAmjCBBJbvsjZYudSKbbmz6cyEDxJ/rRhTsUGHE1ZgticOABAWdgU4MEHgbffdkwVVoOJIOZsWSw0ePBVrSsWRqyo0G5rmLM1fjyNrKqraXBymsHFlqdwZ4szHGFiJyuLHr0UW1u2UNucn++G2IqNBYKCXF+TiS1W0DQtjdpfm82kGaQltvwVRlRztrq6XKdlsrIPzNlqbna4cJ6i5WxFRQFnnsnztk4TmncewUTbEVTPu8I+hqmvB4mtSZOA22/XnnV89Ci5WcnJjud8tWTPwADd78w106q3deIEDb6iosjZAkicnWZwseUp3NniDEeY2PLW2dq2DWJXNz77DDj3XEpZMi221PK1AF1nCzAZXTASW4MRRgRclSEr+8BytgDYY6WeIl8XUcnixTRNtL/fu+/gDHuaX98AABCuuBxhYZSu2NAAIDQU+MtfSMw88YT6h9kC1ILgeM5XYquhgQQXK0eiFUo8ccIx+MvMpMfTMG/LJ2JLEIQLBEEoFgShRBCEB1Rev04QhO+kfzsEQTjDF987pHBnizMcYWIrNZUUkid1turqgHPOgfXXT6OigvK1AN+LreBg0hGs/TWVJM/ElloFeWnbPkUtjAi4hglLS+n3JSYa1+Myi57YmjqVJgq4vYo3Z6QR/tlG7MYcZJ+dDoAuB3sV+aVLgWuvBV54gYoJK2ELUMvxldhi+VoLF9KjVpK8XGwxZ+s0zNvyWmwJghAA4M8ALgSQB+AaQRDyFG87AWCJKIozADwO4FVvv3fI4c4WZzjCGsDERMcSNu5SXQ2IIoQP3wfgEFus+oGu2NJaFxFwCSOmptKA2y1ni4lHpbPFxNdQOlsTJtAPMqo0b5aGBjrowcGur+Xk0KO8aj1n9FFZiaSy3fg46Ar7oCQ+XtHt3H8/3eevvOL82a4uuqlYvhYjJsa3Ymv8eLqJ1ZytgQFysZjYSifByJ0tz5gLoEQUxeOiKPYCeBfAZfI3iKK4QxRFdnZ3Akj3wfcOLexqVxtNnIb09ADXXw8ccaOwMccPWK3U4cfHey62pEY0sfoALsgqtg9GTTtbajMRARdni5lEY8bQtt1ytpRiy2Lx/PdqIYrkbMnFFttppZAqLXUIIF+JLWVBUzlcbJ0ebNwIADg86XJYpN46IUEhtmbMoBksL7zgnHheUkLXsFJs+crZYsnxycnknqk5W9XVQG+vQ2yFhND9wZ0tj0gDIG8mK6TntFgO4FOtFwVBuFUQhEJBEAqt8krYww3mbHV0nJYzK5QUFQFvvQU8/vhQ78kw57nn/Dtl32oF4uIohBge7pn4kN13Px/7of3/hmJLFM05W21tTmILoFCiV2KLPedLZ6uzk3Ki5GHEqCj6HnmI0GYDjh93CKCEBDr+vhBbaiFEgGYWBAfT93JGLxs2oCQwF+Gzp9ifcgojMu67j8TP3//ueE5Z9oHBxJbZCvRaMGcrKYkE3dGjrtuUz0RknKa1tnwhtgSV51TPoiAI54DE1v1aGxNF8VVRFPNFUcxP1Gq0hwPyocVoCSW2tnq8lh7rn997z3crlYw6ioqoLs4LL/jvO+Q5U546PdLJPIJcLK77wP60odhqbiZxYjKMmCYbkmVkeJkgz7bvS7ElX6pHjrKOVkUFLSA5YQL9bbFQFXlf5GxpOVsBAeQWcGdr9NLYCHHrVrzffwXyZIk5Ls4WACxbRmtf/fGPjqrDLKw3caLze2NjyW3ydrZsbS1dh7GxJLZaWlyLrMoLmjJO01pbvhBbFQAyZH+nA3BpZQRBmAHgrwAuE0Vx5KuT+npHssloEVs/+AFwxx0efZSJrf5+miDDUYHlVBw65L/vqKvzXmzV1cEmBOB1ywqMKd1r79AjIihCqSm29JbqAWj2lMWCnoZ2tLV56WwpE+QBElu+DCPKF6GWo6wiz2YiMmcL8E1h04YGbbHFvs+XYqugAHh15KfTjhr+9S8INhs2wFlsxceTMeVUl04QyN0qKgI++YSeKy6mEQ0b5DB8VUW+ro5cLYvF4Z4p87ZYQVOWiwA4qhjrLkUx+vCF2CoAMFEQhCxBEIIB/ATAJvkbBEHIBPARgBtEUdQpNTtC6O6mRp1dYKNFbB075vHyQ6yfnT+fNMWoiKw+9hjw7ru+2VZHB/DGG9QoFhd7NmW/vx94+WUalWphtVIDCHjlbDUFJODUvKvo7w8plCgI1G5rii29pXrYBqKi0FlH7pNcbGVk0K4bDra1EuTZc+44Wx9/DNx5p/brZp0tJniYswX4ZskePWcLcIgtb8NBjN//Hli1ymN3m+NjNm5ER2waCpHvIrZEUUUrXXUV3UhPP01/yxeglsPElreFTZnYAhzfo8zbOnGC7oXQUMdz48bBvl7XaYTXYksUxX4AdwDYAqAIwHuiKB4SBGGlIAgrpbc9AiAewMuCIOwTBKHQ2+8dUpi4YhfYaBBbLN+G2b5uYrXSAOexx+gefO893+7eoHP4MPC//wusX++b7b39NoVpV6wgseSJI7F9O/DznwOfaqY8+iSM2FtlRXV/IqZfPA6YM8cutgAKJRo6W3oCITISXfUkiJRhRMBErcOODhJtUuPNzCe2bbfE1oYNJF61hK9ZsVVSQvlT8h/krbPFFqHWytkCSGy1takk8HhIQQHZJd9+65vtcTynsxPYvBl7My9HSKjFKeWJ3V4u3U5QEKUp/Oc/wO7dJHyU+VqA75yt2lpHsdRx4+geUDpb8rIPjNO01pZP6myJoviJKIqTRFHMEUXxSem5V0RRfEX6/wpRFGNFUZwp/cv3xfcOGaxxG01iq6WFGtrmZo9uQquV+oXvfx+YMgV4/nnfDbiHhGefBQDUlbQavNEEokid+vTpwK230nOHD7u/HTb7h4WtlNhsdC3KxZYHLkVvpRV1SKJ2+sorqeGWGsaoKNfi6XaMwogAEBmJ3kZXZ8t0ra2ODns8c+9emgtg1wbuhhHr6ymUwY6rEr0wYnu7Q3WWlgLZ2ZS/wkhJoe3ruZB6aC3VI8eXMxLr6hx5NLt2eb89jnfs2wd0deHfAedjyhTnS8upirySFSvoen3gAWrH9ZwtX4URAdrBCRPUnS25UgRO21pbvIK8J4xGZ0t+53rgbjFDRRCAu+4C9uyhAtcjkpoa4G9/AwBUHGnzPg1o1y5qPFetIiUKeJa3xZJPtcRWYyMJOx/kbFmRSEbNj35Ez330EQCTzpaB2LI1q4cRARPtLxNbAAoLFesxuxtGZNc8WztIiZ6zBTicq5IS53wt+Xs8rSKvtVSPHF+KrUIp2CAIo1tsiSLN2PO2ur+/kfqUPZVjnUKIgI6zBdANunIl8NVX9Lc/nS252GLfJXe2+vpo9OQvZ0sUafC6bZt32xkkuNjyBNYQZmRQOGM0iC15/NwLsQUAN9xAgyt/TrrzKy+9BLGvD3swC2H9bfjrX73c3ssvUyN43XUkCMaP98zZYudIq3OVT8UGPBZbQc1Wh9jKyaF1+D6gWYmGYisiAggL0954ZCTEtnZERTlmNwKOWoemnC0pOZ4txWbXre6GEdl9rDVrUM/ZAuzFX1Fa6pyvpXyPJ+hVj2dkZZE48oXYKiigPIALLxzdYuu776iBeu21od4TfSQhVFQb6yK22CWh2e3cdZdjbVI1Z4sNHrwRWx0d9E++5uKkSXQtsrB8RQWNhpRiKyaGbn5vna32dmDtWnvbNNzhYssT5Ba/SznfEYqPnC2A+tsVK+ge0DINhi3t7cDLL6N56RXYizMRLbThmWc8jwahvp7yvm680aEupk71zNliYkvL2VI6S6zOljvx3N5ehHQ2ox6JGDtWeu7KK4EdO4DKSmOxZVSuJTISlo42J1cLoDFLUpKJ9rez0+5sqYotDXG5fDlw8cWKHC8zzlZwsHNyL+C8HE9dHX2nlrPlrdjSc7ZCQylPzFdia8oU4Hvfo5Mw3J0fT3mfVkUY9vVppGLZjYjTFFuaqXqpqSQoIyNdQ3iAb8SWcmAHkLPV1+eYgahW9gGgAYIvam2xfWDfN8w5vcXWgQOezb5jV3lcHF35o6GKvA/FFkB53Dab6woSw57XXweamrDnnHvRhigkhLShosK5VqDb2+vtBW6/3fFcXh6V2nd3RiITUydPqqs/pdiKiKCRpTtTQ6XroCsqyT44locSdcWWXkFTRmQkArvbXcQWQEax6ZwtOIstUYQjR81pTjwdgvffp8mHZ58t9bM2m+O+1ep42VI9gqKUoFxIqZV9kL/H007dTM4W+15vxZYoktjKzwfmzaPndu/2bpvDEVF0zNwZ7mKrqQmiIKAFY1zEVmQkjQF0x/gvvki5HIGBrq8FBNAyUN6ILZbnKBdbzEVjoUQtsQX4ptYWa++42BoBXHMN8Mgj7n9OvmbZaHO2Jk50uyp1fz/dt/J+NisLuPRSqrnV3U3v2buXxNdPf0oJ9MOO/n7gT38CFizALst8tCEKwT1tOHOmiKeecunDjRkYANasoR5+6lTH81Onklhyt/o3a1zYemNar8vFFuBeKFHahpggO5m5ucC0acAHHxg7W0biIDISwX3tThP3GKZqbUlia2CAdE5kJN1+dXVw1BNSTAooK6N9vv56OuTz5wPHdjU6HD8tZ0u5CDVjzBgKlVZVqZd9ABz1h/wZRgR8I7bKy+kAzpkDzJpFHfRoDCV+9x0pdEEY/mKrsRFdwWMQGByA7Gznl9hqXLqTUMPD1UOIDG+X7GGukjyMyPLDWJL8iRMk7NJVVufztbM1AmZjnd5ia/p0crfcRV7/ZjSJrZAQOiZuOlvKvGzGXXdR/5ufT/3TrFlk8Pztb7Ssz7C7PzZsoN9+770oKQGEqCgIoojV93Tg2DGnCgjm2LKFtrdqlfPzbKjqbijRanU4JmqhRGXpBS/EVmCK4mReeSWwfTtShBqvwohiRCTCbNrO1qlTBteFJLbKy8mwu/BCevrQITjEluL3MvP6rrsol7anB7jxIllPZeRsKWGLTTNny2JxDdcEBFBH5I3Yio525N5okZ1NIT9vZnEUFNDjnDkkImfMGD5i649/JIfGF7z/Pp2XCy8c/mKrqQktAXGYPFndnPK62zEQWz09Boa4WhgxPp62K3e2MjLUf8C4cdRxeLPiA2vv2ttHRHSJiy027HWHhgbHiHM0ia2EBGq8y8rcqu6rNQntnHOASy6hPvCWW6jU1PHjtDxgQ8Mwy+cSRSoGOHEicOmlKCkBwpKjAQCXntOG3Fzgd07MttcAACAASURBVL9zUyCuWUMd7hVXOD/PZiS6myRfV0e2DKAuturqHOsiAp6JLakRDU5Pcn7+yisBUUR+xQb09FBqhgsmxFZXUBQi0Y7UFNcDmZlJ7aZTXpUSKUGehRAvv5weDx2C4/cqGvB9+0gPTZtGgn/HDmB8JImtvrAo/ZwtNbEFOMRWaSnteHCw9ns8waigKYOFL71ZI7GwkETdGWfQ3/PmkQAb6grfAwNUFf1Pf/J+WyyEuHQp/c7q6qH/fXo0NqK+3zU5nqG6ZI87xMZqFjX96itKBdSr96saRhQE5wWpy8rUQ4iAY0aiN6FE+dJAIyCUeHqLrWnT6NFdh0HpbDU2DkObxk1YCCgri4Y0bnQSWmJLEIBNm6gExHPPUdQ2K4smtwEeF6v3D9u3Uwdzzz1AQABKSoCoVEpoD+hswwMP0P5u3mxyezU1wL/+RTMFlB1xZCSN7Ny57vr76TqbNo0+rxY6UoodJj7cqLXVX00nMypbcTLz8oCcHEw6+TkAlfFJRweVfzcQWy39kQjAADISu11eY+UfdEOJUoI8E1tnn016yMnZUhFbkyc7JklmZwNrniCxtadnOkS92YhqYUTAsWSPWtkHRkqKdzlb7ogtb0KJBQU08AwJob/nzaNiakeOeL5NX9DSQu2qL1w2FkK8+mo6d/39visG6wds9Y2o7nVNjmcYhhGNUHG2RBF46SWqldjQAHz+uc7n6+ro3mDXDIMtSA2oFzRl+KLWlnwGPRdbw5zp0+nR3VBifb2zs2WzGQzHRwAsuZndHG6EEs2UV5IzYwY97t/vxv75m2eeoc7txhvR3k5aKTZTmj3Y2oprryUx8NvfmtxecTG1XkuWqL8+daqus1VSQhEUO2wYm5REHaxWGFFNbLnhbLWfsKIfAYjLiXV+QRCAM85AQh3ts4vYMnkRNPWRIEqPcQ0fmKq1JYURjx0j8ZSaSvrTKIw4c6bzZmL6qKf6duAMCM3N6oLUrLOlzNdSvscT3HW2PBVbAwPkbM2Z43hu7lx6HOpQInNeSkq8jx6wEOIVV3g/ecHPHDwI1BQ1oQmx9i5KiU+cLZnY6umh6MOddwIXXQSsXk36RXNFndpaZ1eLkZtLTnF9PV37Rs6WN3lbzMkHuNga9owbRx2Su2JLPuo0LHoyQpCHEQG/iq2oKOojho2z1dwM/POfVCAvPNzebyVmS2KrrQ3BwRTR+O9/yQQzhNkzTEEoYTMSNbLun34auPdeWSqC/CBPmOA3sdV9qg71SEBqukrTkJeH6LoSBKHXVWwZrYvI3tZNgig12lVsmaoiLxNbEydSeJBV0hDDXcOIDQ20PaXYYvt7AJLyV+t4jZyt1lb6Ai1nKzWVOgRP1sGUD+j0iIsjQeip2Copod8pF1u5ufS7h1psyZ0Xb2ZHykOIiYne10DzE/v3U7R++nQgpL0R48+MwyWXqL+XZa94HFCRia2aGmDZMuD//g/4n/8BNm4Ezj2X3sbS+Vyoq3NOjmewpHxmi6mVngDoHAQEqI+sKipoHVkjrFZqC2NiuNga9rBEjoMHzX+mt5eG9awhZMp6tIgtZu96ILbM9A2MmTOHkdhiOTuS5cZ0zNhJlLPFlMXy5dRWP/WUiW0aia2pU2k4qZJrI4qOcKU9LUEutnJy6PwohZqyorNU/NMdsWWrkRU0VZKXB8uADRNxTNvZMnBjajtIbCWFu4qtsWMp3UzT2erro38ysQXQoWxqcgg5udhi7qmq2IqIgJgjuVLKvK3eXnK79Jwthp6zJYraywHpYTaMCHg3I1GeHM+wWOjvoS7/IBdb3gg/FkK8SlpYnYmtYeJs1dRQ7uHMmaRRVj8sIj6gCfMujHNapkeO1wGV2Figqwu9bT1YsIDa4vXrgSeeoNM/axY9al4CyraGwWYkbtlCj1rOFpulqOZsrVpFU9aNkt7ZPowfz8XWiIDNSDQ7RFDWvxkNzhar3ZCQQIUSU1PdSri1WuneNZo4JWfmTBI17s5N8AusM5SqeDKxlZHncLYA0i5XX03rvBpeLqdOkRBn7pISVgpCJW+ruNghOOxii/2HOVu9vc6rNg8MOK+LCHiWIF+vL7YAIA+HPQ4jVreTIArucT3xAQGUmKvpbEm/wxZC7qNcbAHA0SrXMCIT9Cz32440uMhaSB1vb5mi42W9mBmxpZezBbjvoHR3k2AcDLFVWEjxWGVy0Lx5JFI8WFvTZzCxFRrqndh6/31SDj/8If3NqvUOE7H1yCM0uHrsMdIev7mvDYLN5lhWRwXdJXvMIF3Xx/c04cQJytW6+mrHy5GRdEloii35ItRyJkyglAMjsQWo19ratYuiDIDx+WFOPhdbI4Rp06jhNTv6VNa/YY8+mHpaXk7pEr/7HeUaDxps39kdnJ3ttrNlNoTIYE7Dd9+59zm/wKplS41HSQkNmCJTnMUWQG2H4Yw5gE6mlqsF6M5IZO0UIMuZUIYR2Y4yGhtJcHkptoKb61BvSVJv5ydNgigIXomtymb1JHaGbmFTqeNv7IlAf7+r2DpY5rrtffto7OAyCJfE1hkXkao89Y3C2dJaqochr12hLISkfI+W2NJ63mxBU0ZODvXSnoQrCwpoxopyev68eWSd2Ff5HgKY2FqyhHp9T2JmLIR4zjmOazMkhI6tn8XW4487dIMW7e3AO+/Q5KFHH5U0EPvdLGqigmEVeSOkG7ziAH0Xy6OVM3euxmHv76drVM3ZCgujfICaGjrO9mUoVFCrtfXII44iwnqDFFF0dbaG+SQ1LrZYBqLZUKIfna1XXqG276GHaPbUO+8M0vWjXBokK2vQxJbbSfKiCJx/vm/Xw1JxtiZMgGN5ndZW+1tNL5hsJLZ0ZiRu2eJoZ53CiKyaoVpStJrY8UBshbdb0R2Z6FI0HQAQFob+zGxtsRUURLWhdDjVaCy2NI+t9DuqWul3MbGVlESH5btS15wtteR4AHaxNf/8aHQgHHX7FB2v1iLUDOZajR3rSMzXeo9ap7F/P4VRPv1Ufd8A83H5nBzqAN2d2dXfT2JKHkJksEryQ5m3xc7BhRfSYEJrmSo9lCFEBptN6idEkSbT3HGHvgZev54u11tukT3JBr/+dLakbdcUkdhi95KcuXNp+y6mUX09/UA1sQU48rbGjydHUYtx4yh8zw7Q9u3AZ58Bt91Gf+udn9ZWSilgztYIqLXFxZa7MxKVwiQ2ljpBL8VWXx+t7HLxxcCXX1Jne+21VFZpxw6vNm28zpmyo87KohCVyQUBPRFbaWn0G93O26quphvS69WhZdTUUHkGycWwi63wcGosZMrCVBI3e4Oe2ALIp1c4W93dwNatDkvfSWyxGlrp6TRqlHc+7Bx6k7PV24uIvmb0xWifzIHJedpiKzHRdWkbBWX1+mIrM9Oxfq0L0u+oaHQWW4JA7ta+4jD6Q9p2dzdQVKQvtsbECGgISUNXqZvOVmwsnQOtECJATqlWtfIPP6Qf+e9/u77mibMFuB9KPHyYLHQ1scUcg6EUW01NdL0vW0Z/e7IvLISorHXnZ7HV0EDX36lT+uPCtWvJ5Gbl8wC45Wx5K7YaSpqQnKw+RmKTUl1CiWrV4+XIxZYemZnknlZVkXhbvZoGL48/Tq/rOVvyoqrse4Z5KJGLrcREOmFmxRa7utnVHhBAo18vxdbHH9O1dcst5HgXFpL4OnUKWLiQCoJ6xMaNNMLWK6CpFJDZ2XTxm5yW64nYEgRFkvyuXcBPfmIcCmG1f7Zto9bMF9TW0k0uCOjqos5+wgRpJxXr05iqxdfRQQ2mkdiaOtVlRuJ//0v938UXU3voFEZkB9lioXMkF1vynC6GxUK2vtm8G3YdaI1YAQRMz0MuitHWpDhPJtZF7O8HTtRLbqGOs9XXpxHVl8TWyfoIREU5t/VTpwIHD1sgRkTY33f4MH2nntgCgL6kVIQ0VDlrUiNnSxBILM+erfFrQU5fQoJ6p/GPf9Dj11+r7xvgf7GllhwvZ968oRdbMTF0nCMj3d8XeQhReU17UwPNBCydUhBoZrFahOLAAfpJt9yiGKOYcLZ8FUZsPdWsuarPtGmULqcptrTaCZYkr5evBTjX2vryS2rTH3qIrvvoaH2xJTcIuNga/rz3HomYpozp6Ck8YG69XjWL3wdV5NeupcHWRRfR3wEBwM03kwMeH09uh0c88ww9FhVpv0ctjAiYCiUODJhbf1iNmTOpwenvB8XO1q83DhWw6sTd3aRMfEFNjb3nZvMC7BPMFGJr7FjqQ3XFFrO9mDLTIi+PfodsMsKWLWSyLV1KbZmTsyU/yMqkaK2cKZn4MEKso20EjNU+mYHT8xCMPgSXKzp2E+si1tYCraKxswVoOIfS7zheE46JE507qGnTKLIwEBZh3zYT8i5iq7eX3iztb9iENKSKlc66x0hsAdQ5/OEP2q8DdFMrO42yMgpvxcVRGE+ZoOmu2EpLI5fN3SryBQXUqWnNppw7ly50I2fcXzQ1kSgICKA1v3budO/zBw+qhxABOi81NR4seGoOdv3+7Gd0irdtc33PX/9K9/oNNyheYGJLx9kaM4YOi7fOVldVk6bYCgqidD4XsaVWPV4O26CR2JLX2lq9mhx7Fk81qlEnF3xMtHGxNXx57DHguuuAN/ZMh+3AIYSFDiA5mWadatLQQKMseeVcL8VWeTnNRvnpT13zVCMi6Jr0aGmbPXscI2f5zDUlSgHphthqbqb2ylOx1d0tFRxm1rmeKARIbIWFUUsgzyT3BuZswaH1nMSWLGfLYjGYMQc4lJiKs/X227JJASyzW+Y6btkCLFpE591JbNXVOR9kVmuLDZm1Si+4IbY6ymgbYZk6J1OatRZdoXBKTdibVVVAF8IgykJ9SnSryEsOXXFFhEuOCTuUPYGRTmIrIkIl0qcI0yVMT0UqqvDVlzL7wSiMCNC1oaygrSQlBWJ1tbM437SJHh96iGw85dp/bP90OlsnLBYgKwu2o6V46SXT0X+yz/PztfNqWN7WUJWAYGKL7cv+/e652ey+WrDA9bXUVBopalbt9A7W3D74IN3HbMzL6O6mNWKvuEJFU5sII1os9LK3sxED2ppU87UYc+eSWHQKOBiFEWfNorZA7bjLYWLrL38BvvmGBFdoKD1n5DzKB5cxMSOi1tZpLbZ27aL78bxfTkM4uvD8XccxcSKwbp1O/6RW2dlLsfXaa3TfL1+u/npamodi6/nnSRgGBxuLLXnHkZpKYsbESNndgqZy2HT8/fvhaGCM1gssLiabetEiyt3yBTJnS1VsKRKUMjNNOlsKsVVcDFx/PeXi2WxwzEiUkuSrqsjpO/98elrX2ZowgcQHcx206m+Eh5sWW03HpKV6crTDiJg8GQAQW6MQxSbFFiBgIDzSUGypHl/pdxyr0hZb7UKk/X379tE15qIlFM5RcFYaQtGDPZ/LEmybmx1hZG9ISUFnSRXGjaPKA8ePg0KIU6YAN95I71EmZdbXk8hzp5ZKTg6a9pTizjsdWk6Xnh5S/VohRIA6zcDAoQslNjc7i62+PmDvXvOfZw6MvEwHw8+1tsrL6dCNH09J8h9/7Ny0ffQRNXlOifGMxkZqs9n6UhokJHgRRgwKgi08ErHQdrYAEludnYpmua7OKcfVhcREes+iRfr7EBFBfef27TTAl7scao6wHGXaxAgo/3Bai62oKGrzpv6EkuTvXHoA99xDZoFmny9fhJrhxRDDZqPKveedp+26pqV50CZUVwPvvksXsO58ergKyIAAunhNOFveiK3Jk+me3bcP7jlbubl0wL77zvsq0DYb/QiZsxUXJ0uX8FRsCQKUxaqeeYaurUOHgL//Xdp2Zqb9YmPakYmtxETp+NpsrlOtlXk6SueL4Y6zdZwasNhJOiczMhJVQZlIqpfdIL295AQZlX1gA4ZIbbEVF0f6UC+M2Ca6iq2EBDo8Lf0URhwYMJiJyD4E2Dveun1VDhOzuZk6E73ZVGZISUFoSy2iwm347DNg/uQm2L7ahp4LL6PjNXGiutgyG0Jk5OQgvLoUgKgasnJh/34SL3piKyyMagIMldhSOluAe/tSU0NtmZpD5GexVVHhKJJ+++10KJ991vH62rXU3p9zjsqHm5ponw0mm3ibvdIdFmsottjl4WRusqV6DPbPFCwE+MgjzoMLFkbUmo5vtVL7yZwwLrZGCPZCPQft9UY08+V97Gxt2UIdi+oIRyItja4tUzlljFdeIe/3zjtJbOk5W2quhMnyDyYLh6sSHCzNIpOLLT1nq7ubbigmtgD12Vzu0NBAYkbmbDmlsERHq4qtigqddI/yctqebAHqqirgzTeBlSspcrN6tRQRycuzO1ubN5PmY9dgUhLtXn+dtNC50tliOwxoO0tuiK2eCloXMXmydmIuAJyMyENqi+w8mVyqp6qKOh9LdKRmNVtB0Cn/IP2ODriKLYCupYYeEnJlZfQVpsSWJIrHDlQ6lmLSW6rHHVJTESDa8MOz63H0KPDYvE/p79cvJUd7/kISW/JORbFUzzffGM/faU3KQbitHYmwmhNbLDk+P1//ffPm0XtVp4f6GbnYSk2lnB53xVZysrpgHgRnKz2d/p+QQGPev/2NdunYMcrBXbFCQ8s3NuomxzO8XYy6PSAGsWjSnVDLVsNxElta1eM9YcYMunGvv975+ZQUymWUpXA4odwHo1pbXV1Dcw3L4GILoA4pOxs4cADZ2TSy1hVbSmcrPp5G6qaTJRysXUt91KWXar+HGSRGJk59vTRI7ukhsXXRRTRyTk83DiMq1ZKbYssTZwuQzUhkSaFHjmjfFCxHKTeXPpiQ4H0oUavGFkPF2crIIKGlmTesUvbhuedI+953H/D739NbXn4Z9hmJtl4bPv+cNCQbMCYl0c9tPqZykMeNI+XCnC0fiC1bjVV7XUQZVWPykNFe5FCbboitsWMBQcfZAqjdZJNOnZB+RyfCVUfjU6fSckBiR4d2cjzgOkKQOt7MgCp89ZX0Hr1FqN2gLZJCWIsnVCM1Fbg9bRP64pLQMnkeli8H/ufjBYDVis7vZBNDGhogJiTgyy9posSCBcAFF5ARpcV/KqjHvP37pThwwMTYr6CAzpfRJI45c6jD86TGlTeIomM2IsPd2ZFaVc4B/bIcPqCiwrkJ+OUv6fy99BJFMtgEKFWYs2WAt4tRNyIWKSFNdnNIDUGgUKLTGolai1B7wl/+QudUmaxstFi4sr0zqrX1hz/QNn01g90DuNhiSMv2sIVtNcWW2pplBlXkqwsqcOgD1/BYdTVVGL75ZicTxAU2CDPK23r2WWDxYqBpzbuk/H/xC3ohPZ0+rCVi1MRWdjb9Vq2RheyjgOdi64wzaFdtDU10ELq67CUn9u1TVOVgMxFzc2lI+P3v02Ji3oxYZNXje3rIUXERW4pjYFj+obzcqRNrbibte/XVdFiXLSNR9eSTQOd4mpF48J8n0NjoCCECjvastUSlrENQEAkuubOl1gDKxFZ7u+MQqmFpqENjQKJu4wsAdQl5CBW7HaVBTNqblZXStWwgtn7wAzL7XFYX6OyEzRKIyNhg1XqfU6dSGNHW3I59+xxLn7qgnBAi3WDzMiodYstHztahRuo0ZqdU0WDs008RdMUl2P61BR99BJxKpyTi+xbuwCOP0L3QVVGPzQUJ+N73yAVZsYL6nI0btb9nfSGJrWvmkfg2nKj7zTfUixqFgpjtYbIMjM9obycxL3d45s2jAaDZpPaaGu0K5kFBdD/5QWyJIokt5mwB1KZcfjkNsF5/na5x+SIETrjhbHmzGHVdbywSg5oM3zd3LrXB9goyWotQe0JwsPqSZkarL6g5W4B2KHHrVnItjBo3P8LFFmP6dGrZursxfbrGMjJ9fdQIa4ktjWHGict+gYCrrsD3v+88e/mNN6g9WbFCf9eYs2UktkpKgIEBET1PP0/hKbZ0e3o62SpaSxJpOVuAobtltVLf6ek1bHcempocNYukUOLDD9P27WERudgCSLHU1pqvkaaGzNkqKyPdZuRs6YotUaQXZMPaNWtoE7/+teNtTz1Fbeq6QgphH/noMASB9CODaauOkxr2IZuRqFd/IyLC3kreeCM1nFoOSXCLFe2hxqq5MVmx1JBJe7OqSrqWDcTWNddQX7huneKFjg50WdRDiACJrXZEYqCVxNbkyRo5xsoE9JAQID4eZyRUYe9eaczkI2drdzmJrUlR1XQht7YCl14KQaCZaG99OwX9kWNwacIOPPEEDb5ttfUo70rAn/9MxuUrr9Dt+OKL6t9RVQW8X5gFURAwAaUIDVUvNWCnrIymALP2QQ/d6aF+hKUVKMUWYN7dks0yVsVPhU1ZQVPlZOR776WfVVennzZi1tmKj6cghjtLnzJEEajoiEWsaCy25syhfmrvXjgvk+NPjNYVVXO2AHWx1d1NHe/SpT7cQffhYosxbRpdUUeOYPp0Opcu2oQ5V2phREBVbIkikFR7ABNQgkP7+jB/PnDJJTSddu1aWvZLL0ERMC+2Tp4EFuG/GFu1F+KddzlGreyuVwsldnXR3eqF2PLU1QLI2QpGDwJ6uhxThYuKsGsXzeABZCspFRfTwWDLozBl4k0oUeZsucxEBChnq6/PKWFOV2w1NZG4kY55dzdNCj3/fKpZwzjzTBIVj60n4dL09SH7jGkGa896yjXETE4OxNJSPHR7k3b9DcnZ2rYN2LCB+nqttLiIDiu6ooxPZlu652IrNRUkYHXEVkICFXV96y2FMOzoQLtKcjyDiS2hq0M7OR5QH1ykpSEruBKiSAuN+0psfXWEOo3wlmqahRgW5ixyLBYELpqP86N2oKgIuP8X3YhEB352XzxWraJBTEAAsGoVTdpSW97qgw+AHoSgf2w6Ak+W4qyzDMQWK5kit1G1SEujdmSwxRarcyYXW7Nn08EwI7YGBvTDiIDfxBY7VHJnC6DmbcECev6CC3Q2YNLZ8mbJHqsVqO2LRUR/s+F7nZLk29qoUfOVs6WFXhhRFF2dfL1aW7t30z5zsTVMkC3bo7mCj1axQR2xVXq4B+MHjiMQNhz7vAy//S1Z/LNnk4659VbjXYuNpUbXqF04eRK4N/B5NCIWe/JklfLYXa8mtrSWBmFiy6D8g7diKyYGmJEuja6ys+kmPnwYjz5Ku3TmmbLlA9lMREZaGvWwn32G9euBV1/1wFKvraUOMCpKXWyxqf8ydys6mv6p9j+Ksg/r1tFX3H+/61sffxxo7I9GfXgGIk8ddmmAWVvSX60RppswAUJTE7a+So5fm5orFREBsaMDv/qVQzs45V/IGNNbh/5Y4xFrYGIsqpACkc0cZes26ozGu7qoDzETRgQotF5b61xKzdbagVabttiKiwMskREI6utCZbnNPbGVmorY7iqEhYFCiT4II4oi8HVhCNpD4miktGkTDRDYMkqMhQuBQ4eQm9yM3/6K7sfAsc7797Of0WX60kuu37N+PeUZB+VSodslSygEr7lY+ubNNGKQynjoEhxM9+RwcLYiImhQbEZsNTWRm2/kbHk7m1kF1syqLSCxcSOJZmWKkp2+PmprTDpbgGdi69gxoAmxCO5p108GBOmejAyp3TCqHu8roqLofKudn+ZmOrfyjkev1tbWrdQ+LV7sr701BRdbjIkTqWHRm5GoXKqHoXPVH95UgkBQInFEdQkefJBE1iOPAJddRrV3jGBVBPScre5uIKT2JC6xbcDrAbfgtXdlDbqe2NJyJeLiSFH42dkCgLNyZUX88vLQtrsIW7ZQ2G3ePHK2xAHRVWwBFErcvh2/eaATt91GRQTdElxsxpIgoKSEfrJTP6yyGDWgU/5BJrZsNlqqY84c9UFVTg6tuVrYmYc88ZCL0RAXJ81W0qqhJanCs0Cx6RffU2kAw8MhdHdj7x4bXniBNqMmtvq7+hAjNkNIMj6ZUVHAYeRh4KDM2YqPJ9dBA5bwblZsXXghXVfyUGJHfSc6Ea5bhDEqhVzPCHToiy3lRZuWBktVJRYtAr76YoCUipfO1smTdGh641Ic044vu8z1jQsW0EW7c6fmgC4ujgowv/WWc2poeTlNivnxj0GDFUlsDQxo5G319QFffEGultmp+0alY/yBmtgCqEHYvds4T1PmWGuSmkqK3miJMDfRcrYA59VlVGGOnskEecCzGYlHj5LYcvpOHebMkZwto+rxvkIQtKvIawk+rXJFW7dSCMWEW+hPuNhiBAXRSO/AASQm0j3qC2erdptsWtWxYwCoDf/f/6VRjtlcp9RUfbF16hRwO9YAAE5e/HO8845s4kVCAglJtQZT6zcJgqkZib4QWzPHUcPaHRYLTJkCy5HDSEoUsWoVDWSbm4GaA1b6j1JsnX8+0NOD9LLtyMigmX6/+IUbOfOK6vETJij6IBVnCzAntj78kHJuHnhAu19bvRooDZyMSTiKs+Y5q0SLhU5LYJPGQZaSl+fjGwDA+i8T8dFHzm/pDaLk00VnduK662imv5rYshbRdRCUal5sCUWHSSQYrNfU2kpCITZWivwysaWjioOC6DObNjluq+6GDnQgQjfsHpvhEFusaK4LGs4Wamux7Ox+lB2S9s1LZ4sZMIEZKXQfCQJlRiuZO5dO9o4dukv13HEHOYSvveZ47v336fHqq0HXQ20tzprWjuBgjVDiN9/Qtawbx1IwlGJLKXjnzSMhrDfTA3CZZaxKaiqdZ61cVg+pqCDnyqNIm4l1ERneOFtHjwKtFuk7mswlyZeWAm2lBtXjfYmW2NIyCNRqbfX00DU/xCFEgIstZ6QZiYr/OtBytsLDKclW5arv/U4SW2FhXk2fNnK2Kkq6sRz/h4ZFl+GSn2eiuZlmOgKghlyr/IPeOmwGYouFzr0VW3ljqYEpaYjFseA8RNha8fiqakREOEqgnfq3IjmesXgxBoJCcB4+w5o1wD33UCLxbbeZXPZMUT3eZZk4DbGlWQtKKh0tJo/FU09RPp6amcFITgbmXj8J4uL9eQAAIABJREFUkehAUL1rw5KUBIS0ahQszc4G4BBbydMSsXKl82StL3aS2HpqdQcsFhqhHjjgOgO6/jA1omHjjEesTGxZOtrpmtJZF9Fmo9y0Y8eADz+URvuRkeQmGBSOu/lmmsD37rv0d39zh2aNLUbiePq9OUnt2oNvjZwtiCKu+14NsmNppF/b652ztXs3NQuRk6SZVfPnq3dSkZE08t6xQ7uNAb1l8WKa0cau7fXrqdD7hAmwi++wyhLMnashtrZsIQfye98z/0OY2PJ02psn6DlbgHEo0ayzBfg8b6u83FHQ1G1MLNXD8GYx6mPHgNAU98QWAJwqHJwwos0GtEamoK24Cg89RFWMZsyQikHrOVvKWlvDJF8L4GLLmWnTqPNobsb06ZQr5NRhqy1CDTjyVRRiq7MTiKkpQnO0lB/hA7Gl1d5ZPvoAiaiH7dZVWLaMOrU33pC9wROxlZ1NYkvjS9vbqb/0VmxNiKeb/UBFLNZ8RcnXN82hEBUTWy27NMRWeDjKsxbjfGzBrFlUpf3hh2mR15tuMhEhkJytvj66T13EVnQ0Pao4Ww0NsunQjFOngLQ0HDgcgL17qb6OUaM75zrJqlEZrSclUeK66kEOC0NLVBrSQSr82XUJaG4mBwSg/mbDZyQ+5s+gKUtz5tAxYXWoGK2lpNCic8w5W0WQJcnrKO777wc++YQEsL1aNpvgYBBKPOMM+sdCiQNtHegPjtA1nFIm0rbPnKix7c5OsofUnC0AGQFVeO9VElurn4lxWuvbXXbtIiFkSZOSffWK6S1YQB9gIkFDvN55J92Sn3xC1+vu3VIIEaDcL4sFePddLFlCSy661I7dvJlEnzuuXUYGnSvNJDA/wJZLYvcfY/JkugDNii09Z8uolpOHKGtsuYUbzlZsLB0iT52tMeOkwYQJsTV7Nn2X9aDkAnrb6Ouwfj0Zmv/3aSpQU42nn6a+TxBo0e7Xn9Zxtjo6nA/IMMnXArjYcoZlxh88iOnTqU12amwbGsjFUptPrlJFfs8eIFc8gt4JU6gXl8KInpCWRgJd677I3vIyijEJ8VctQ0AAXZSbN8tcWD2xJQjqN3dWFh0EDZvd24KmjIQA+lFr3o3F2/tpoeOQ40X2bScnA7aiYrIJVIowfhN5HqbhEFIGKiEIlHj+299Sfotm4UCAVIfVCiQn49Qp+tOss8V2wyW6IhU0ZWsLL1tm8OMBh4A8etTlpaQkILpXo4YWgKowaYfHjMG0WcF49FHgvffo36OPAs19Ug2bDofYAlxDiWwR6rhc82FEALpi6/XXgT/+kcTfypWyF0yKLYDOX0EBfY3Q1YGAaJWaPDLSp9C2Z+RozIfXGlzIpvxOSiZRUd83BuecY2qJUBf6+mjG8bx5cCTp6FmcCxfS8di6lf7WcDYuv5x29aWX6BwDwFVXSS+mp1M9ibVrcc5ZXbDZFCsB1dXRTrkTQgSGpvwDK2iqLLEeEEA9v9EaibW1lDqhl3fnR2dLLV/LFG44W4GB9PPcFVsDA9QVJUw072xFR5PObT9eR/vmzrqdblBZSVGJyZOBxVelIArtaK9uw/791J8+8ghwYhc5W3srVMQW4BxKZPlaZhd19yNcbMkxmpGot2aZitja+Y2IyTiCyPzJlIBfVmY480ML1heotgv79iGz4hu8M+Z2BIXQKb3pJrqp3npLeg8TW8pkpvp6uhDV7BeD8g++EltCM93sO4piEJiaDDEmxqk+wbRpQERFMR1Dlf38oFVauufzz+3PPfggdfJvvaVTNLi+nly7sWPVZyICugnygEooURJb335LmsJle2qkpZGAV3O2EgYQY2vQPMilgvQFkhi7/37qi1auJHdv2SWSOJEsuNRUGuwrxVZvBTVgcZPNhRHrkYie6ASavdDgun9ff02N5rnnAn/6k2IDboita6+lTmXdOiCwtxMhseG6749Mot97zSUa29YSW/KOV0oY/t2aGHR0kCNnYjEFJw4donHK3LmgAmc7dujP/mNlT7ZsoR5UozMLCqJz+9lnJLjmzlWsqXrnnUBjIxaefBsBAYpQonLxTbNojiz8iHypHiXZ2cZFVmUTXzRJSiIx50OxxQqaDoazBXi2GHVlJbWJKXnmxRYAnHUW0F9VBzHRPyFEUaQ2o6+PUgfyLyHnMaSRHIPAQMp1vu3yOrQIYzBvcTCee04WeFGKrZ4euu+WLPHL/roLF1tyMjJIwh88iLw8ug/dEluKCvJHv6pEJDoQfuZk6nX7+z2uxKxbRX7NGnRbwrBr8k32p3JzKVrwxhvSxZiRQVexsvqyXtKVlBPkNLQfGACeeAKYNAld3zrcJ69oakJ3UBRsCMRD/yNAyMtzEltTpwJjW4ohTsp1+Wh3N/CP49PRFpFM2dQymIuj2UcY1dgCdHO2AIXYGhiwt7R79lDZClPrGFssJCRVnK3MqCYEwob+WPWDfLhHqvAtnQQmTDo66FK+9hZnZ0sQ6LgoxdZALa2LaIk3buTZIWlJzSNVNTDgdBFUVJDBMn48uS8u09zdEFtJSZSv8cYbQNhAB8IS9Z0ttu1IuCm2kpJIyFdW2sVW7rwY/PvfdOqXLnXv1mVRrrlzQW74/Pn6H8jMpJu8s1M1X0vOLbc45rtcfbXixbPPBqZPR+jaF5E/W7Eo9ZYt9LtnzTL/Q4Ahc7bEmBgsXUolXZzIzKR7V2/pFaOCpoAji92H5R/q66mP99rZMim2PFmWlzUzGTPcE1tXXgnE9tWiPtA/yfF//zvVVvztb6X0Q40q8mnBVkRmJeGCCyhN4+WXpReUtbYKCoZNvhbAxZYzgkA2yoEDCA+njtdJbDU0aDeEiqteFIG23VIdoilTYM/q9TBvS7OwaUsL8Pe/4x/h1yAux/kGvekmGmHv2QPt8g96ApKNFNiwvr6eZlOtXg2cPImZj/8IEWj3idgS4uNw7bXA8uWg6veshhOA6ZP7kCUeR8tYV7F18CDQP2BB5fd/SlU7ZQtTGy6rI5uxVFJCfaJL+8yEgUJsqdZ6rKsD+vowkJaBffscBfFNkZurKrYyQshxagl2Pcg2G7C3TVKHspMwdSrwr3+R9oxOcRZbAImt4mJns87SaEVrULwpdcjSaOqT8hxunOz7P/yQNPxHH2n0GUytmRBbAIUS6+pERKADUWPNiS3NbWuJLYuFcniqqhy5SWPG4MwzqVJCSwtd+mbTlnbvpiaBjVcMEQSHu2Ww7FFyskNk2UOI8u3cdRewfz9uztmOggLJ1BwYILF13nkmRwAyxo4lYaJ5I/mBpiZ0BMdi2zZya530AOtU9cSfbOKLLj4ubKpXY8sUjY10g2kW4nLGG7E1cVoIOeomSj8AdOmkBtThaJPvna3qappFvnAhmbMAtKvI19UhYGwi/vEPur9Y5N2l1hbL1zr7bJ/vrydwsaVkxgwq09zf7zoj0UwYUfI0KyqAxEZpJuLkyQ7LxEOxpelsvfkm0NmJZ7tW2dsgxo9/TGlO69bBM7EVFkYN7YkTVANo1izgyy9p/ZBPP0V0TTHW4hYkJng5S6mxESFjY/HWW7S/mDKFemupY5wdexxB6MeJYFexxVI3gp94hKb+LV9uF0bseGg6Egpny6XsA0CNXni4i9gKDqa2wKn/kRr/CksmurrcNBAmTSIHUbGYeUogOZGNAa5iq7YWOGJzFVsAlVhYvBiOApoKsSWKsOeVAUBoSx3awsw1okwr1cTlOZ6UXUMVFXQe2eQGF9xwtgBpHbm4HgRgADGpBmIrwlVcOqE3IYTNQmGdj5REfuaZJCCLi+meMlOWadcuc0sPOmFSbAG0DuqWLRrrSF97LRAbi8tOvYi+Ppr5jn376J5yN18LIMcvNXVwna3mZtT0xLL/4g9/kL1meGPDnLMF+Fxs6dXYMoXJ6vEMT8KIR49Ss5CaCvouk85WYCCQFlSL/TVJHs2A1EIUaYUEVtbEPhbQEltS9XhBoDbWabKPvPzD1q3Unw+DfC2Aiy1Xli6lIf+ePZg+nbSRfcaZkbPV32/vlHfuBCbjCPqjYihEkZxMnYyHSfIhIXRjOYktUQTWrEHvzLnYbZvtIrZiYiic8/bbQE+SRihAT2wBlBDyz39Szx0YSDHw224Dli3D5kVP4Bq8i4jXVcpau4MyPyNP6sQld2uSSO7Jdz3qYis6Ghg/JYwyssvL7eXamftk6GzJxJYqKotRAyq1tqQ/vmuiY+2W2MrNJatKkRyUCBJbVriKrfJyoBQ59t+gior4yM+nR3koMaLLip5ocxYl00oVUVNkO+ocRkxP1xEaboqt4GDgxh/R/sdnmnS2tBZQr6+n1lwtcZp1vC0tNNCQrQ7/ve/RGpdbtpBxpFcFoa2NouCsSoFpFi6kRxNiKzGRnAZVwsOBW27B2J0bkCmUUyhx82Z6TfNDBnhYa+vhh6n5u+UWOnamU1abmlDWEov0dNKOzz8v63ONxJbNZn6x5OHmbJlcF5HhibN17Bi1dRYL3BJb6O1FeHcTqgeS8c477n2nHuvXU83J3/xGsXRdTAx1fMrzU+cohTNzJvXR9tudia3e3mGVrwX4SGwJgnCBIAjFgiCUCILwgMrrgiAIL0ivfycIgptJA4MImz72739j+nRqVA8fBgmppiZ9ZwuwX/k7dwJTLUWw5E2mXkcQHAsHe4hLra1t24CiIpy86HYAcBFbADVyjY3AQ39KpOxaubPFClLqNe45OTSS+MEPyAqRxcbez7ofn4deAuHeX0nDZw9Riq0pzmvvRVSQ2Pq6Xl1szZwpNRwLFlAQf80a4MsvERxMbamusxURAVtYJI4fNxBbLnPoVWptSZ3RzsoMhIW5VqnQhbUyilBinI3EVlW/q+tUXg60IRonn3qHBLAaKmIrIYE0NBNb7e30PbY4c2LLYqHNngiTOVsysVVZ6Qh7q+Km2AKAh++hEY9RgjzCwmhftO4zvQkhcmdLRYytWEGrGqxZA7zwgvYu7NlDtxarTWSamTPJTfO4p5axahUEUcSjyWtorcctW8ii87QYpYdi6+uvHbXSLriAzKbly+l5PcSmJhTVxGLJEppd3NdHjwAcSl5rFNXQQGFTM85WSopU5r/X+L0mkMrseV7z001nKz6ebm299DUlR4/KRI07Ykuys0LSk/Dmm9pv6+mh+8OMCLRaKWw4dy7VSHRCEFyXVBoYoP2QJgSxVSK++056nYmt3bvJKhsm+VqAD8SWIAgBAP4M4EIAeQCuEQQhT/G2CwFMlP7dCkilzocjiYl0BiWxBUgnkl2Qes4W4CS2pgUcgSVPNvr3Umy5DMJefhmIjcW3E6nQjlpIYdkyupiffc6C9jFpzmKrrY1aMT2xtXo1tZQbNrg0AnX1Fjw5aR01xFdf7Zp8bxal2MrIoN6c5W0VF6MpOAm7jzp3gDYbnRv5As94/HHKj1uxAmhv1670DthDDRUV1NZKNSFd0RBbmZmKWo/l5UBoKLYfjsfMmabTLgjW+ilmJEb30DEt73I9R+x3Rd3yE+0OWiOsJk+Sr6oCklAHIdl8LkZUFFA5kOKo16QII+qGUTTy4PSIgLT/EQbOliDQVG9766tAb3CRmkquVlWVZsmA3/2Olti65x7Ki1ODJcezCRqmCQ6m0gxqC2m6y7hxwGWX4cfNr6L0mzqIO3Z4FkJkZGTQiXWzsGlFBS29VFdHTciFF1LV+yVLdGZ4dnVB6OlBZWcsli6lvJzbbgPWrpWaT6NRlJkaWwyWn8E+4yUVFaTZ3U2Ls+Oms+XuYtR9fZSt4JHYkiIBZ5yXjMJC7QXtn36a8q9Wrzbe5K9+Ra7U669r1CNUVpFvbHSakMPElj2UyGptffgh/T1M8rUA3zhbcwGUiKJ4XBTFXgDvAlAWlLkMwJsisRNAjCAIKT74bv9w7rnAjh3ITu5AWJiUt6WX6wE4bpCGBvT2AscKW5DQV+083XviRLrSPVyLy8nZqq6m1utnP8Pxaqr7peZsAVTraMkSYH9DOtqOyMSWmdoNkyZRoopKTMhqlaoQf/ghHZ9rr6VW1d1K00qxZbHQcWN3c3ExmpJyUVTkfOiOHqUQr5PYCg+nwH9ZGfDggxg3zsDZSk6211LTdLaiozXFVne3LGeivBxiRgb27hPcnvCF2Fg6DwpnK6TVimaMQU1jsMtHystJe+gOhIODqRVTEVts7b6qk32IRTOCTSzVw4iKAtraBQr5RkdLyXZ06g2dLZZH5oazZd9/I7EFUJ7GwYPq95lOtXv7Th8+rFn002IB/vY3uuZ+8hPSRkp27ybhbiIa6Ep2tkOMesuddyKiuwEv9d4Cob/f/ZIPcjIyyLJwY0DFyiCkp5PhePnlNOPs229poLRhg8YHpc6/GTH2KNDDD9Ol/Mgj0nv0bmwz1eMZPq61JVV+8RwPnC3AvNgqK6NjbxdbMTHmxZZUuX3hD5MQEOC8bimjpIQmq4eGUjOsp2GPHKHr4Re/cGSOuKAUW+z6k5yt1FRqNp3EFkA1f2bMMJzZO5j4QmylAZD7yxXSc+6+BwAgCMKtgiAUCoJQaPXUKfGWc88FensR8M1/2eRE3WU0nJ5vaMD+/UBWryw5nsHKP3g4qyctzT7hjYoo9fcDK1fi5En6eq1+KCiIpuBbwzLQuL/c0V4qBGRNDfDpp2SY/frXNNMpPx+4/nr17dqrRsycCfz5zzQTMDmZdiQvj+bsr1qlsu6RjK4uUizK0Zx8RmJxMfqzc9Hb62wMsuR4J7EFAIsWUWLNSy9hqbAN5eUaayVKzpZm2QeGjrMFyE5neTm64jPQ1ub+7HoA1AIqnC3BWoemwETVPo417LpJ2IJA50NR6l5e3LShmK6DiPFuiq02UBEq2QmoryeXUFdssTikv8TWGWfQNaXmIhs5WwD1SDrFMMPDaaZnXBxdaq++6jy+YMnxQ87SpbBNmYbLsAk9IVHG5Sf08KD8Q2MjnQbltTBhAvWDRmJLiI2135NjxwJ33w28847UseqJLTPrIjJ8LLYMXV09RNFjZ8tswrp9JiJb8soDZysuNwkXXkhCSb7CiigCP/85iWKWn/fcc9qbe+IJEuH33afzncpwjmKpHkGg7sde45aJLat1WOVrAb4RW2pNvdLaMPMeelIUXxVFMV8UxfxEPy4JoMuiRXTFSKFEU86WTGyx5HgAjvwjwOsZidLybST0N2ygi2nCBJw8qe1qMZKSgLN+lI6x/RX48dUiDfql31RkTcB111F7etFFdMM8/zxFYjo7aZCgpg+d1h/+2c8oh+yFF4Dbb6ffXVNDPdGzz2rvmFZdmSlTqOWS7JfwMykB6tAhx1v27iVDRX6I7Tz5JJCTg6u/uBW9vaJ6EXyZsxUcrCMQNBLkXWptlZejJoQUmMdiS1n+wWpFa0iivY2Rc+qUyVF0RISLszVrFjVUBQWypXomuBdGbGsDHWf73GuH82rY4bDFqM3irrMF0KxiJXpiS34BGCxnk5pKomrRIgpxXXkliYvKSvrndnK8PxAEBNxN8+j3xixzSvh3Gw/EFstYULsWrriC8rbU7kuxiWaDZp4R6zSQuO8+aiYeegjU4JWXqy+A6omz5YNaW14XNO3spJGKmwnygHlnizUvTmHE1lZzC8myRig5GTfdRBroiy8cL7/3HtXNffJJit5deSUN3NUqSxw5QsL5jjsM6jSmpFBov6uL/laJxsycSUZ2Xx+cO8JhlK8F+EZsVQCQX17pAJTDBDPvGT5ERFCytSS26uqA1hPS1WwijLhzJzAn8ghZSvLyzmw44eGMRHsV+RM9dHVJI9VTp4zFFgCMzU9HCHpxYGs97r0X2LOFxNYPbk7AP/9JF/5//kMNRlcXmSws9P3JJ87b6u6mvtLpRjn7bEoQ++Mf6YPffkuuh96oUUtsMV/5H/8AACQuyoUg0M9m7N1LZdFUi21HRAD33IPYuqPIQLnrILivj1ooydnKztZZw9DA2Sovl7ZXVYXjvRkIDtYpe6BHbi51FHJhZ7WiM1xdbJWXa0z9V6IitqKiyHQtKAA6y6RFqDM9cLYUMLGl62wB+mJr61YS6fKpa8yZCzdIkAdIfQcGuuZtGU0IYR0voL/Mi0RKCk3ye/ppmrB7xhk0SAGGibMFANdfj+MJc7Cm62bv1pH2oIq8nvD+4Q/pdEi3txNVh6hNmDzfuU2IiaGVIT79FDjWk0nOvppIqq0ly4TVKNEjMZFufB84W4Nd0BRwX2wdO0abtwdo2HfJFZEo0gD5hhtoJHH33aRwN22i+GBkJC65hD7KQoktLfS22bMpmAEADzxAbcQalQxtFmq8916DHVaWf1BZhHrmTNKoR47AUWsLGFb5WoBvxFYBgImCIGQJghAM4CcANineswnAjdKsxLMAtIii6Luyvf7g3HOBffswK4OUdN1hjUWoGYGBNBpubMTOncDcqCISV/Is6bFjqbPwstZW+05Jxs+aBVGEKWcLgL0V+PU1FXj+eeDtF+k33fNkAsrLaVmVxYudEzwnTya9qBRbppfqUcbcleg5W4A91hAyIxfZ2Q6xJYoktlxCiHKkWNkcFLg6c7JRWmmpTnI8oKksEhKowTh1CtRYiyL2N2ZgxgwPlw5Tm5FotaJnTJJLGLGnh3SZqVF0eLhq3SmWJN9b5f66S1piS8/NcNmAlthavZoa+RkzHEswueNshYTQhasUW62t1EFria3oaMf2TYgtgO6Te++lybhhYSS8AgMdibtDTng4Pnt8N95svdxpyTi3YRe7m85WEHqRHt/l8tr06TTAUQslHt1FbcIZS11Fxx13UPu09jOd8g9mluphyIvZegk7NF4v1eOBs+VOGHHiRNmhUYotmw249VbKXN+6lQTW669TobPt2+2WeEgI5Sxu2EC31cMPk8Z95RXHoPXMM2lOxnPPOYwpgAbx77xDERRT/QfgOD+sIZT1w6wPsIcSs7JoFO5R0qT/8FpsiaLYD+AOAFsAFAF4TxTFQ4IgrBQEgS0/+wmA4wBKAKwFsMrb7/U7554LADij4UsAQHNpPbWmeiPr+Hh0Vzbg+HEgp/+Ia3yLlX/w0tkS9kpZubNno7GR+iFTYktqBX55ZTkefRS45fJ6iEFBuOPBKM2oiSBQaPGLL5ynF7sltvSyJLXEVnY2hT3+8x/qvbKyMG2aI4xYXk5tk67YmjEDYlAQ8lHo2iZL8Qsxeax+jS2AOuHOTherXRBktbaklvabigzPQoiAq9iSpjnb4lydLeYaeBpGBEhs1dUBTf/f3pnHR1Wf+//zTSb7BoGEZEISEALIUnYIBoEiXhW0ItQqt0Wt1/Zn1Vb6sq+61La3dWsv2tVbq6/a5V5bbLFurdhaEbBab2UpApFFtiRASAIJASFk/f7+eM4358zMOTPnnNnJ8369eE1mmMycnOV7Pt/P83yfZ2/kxNbRo3T/CpkuE8zZOniQNq67m+pCLVumH3g7YgvQixMbUXckq79TLTUHQoYR/Zk+nYzc228nnWjWqz5eqJCmWiXpCiFIQTsUW0/jdpR9doHpxy1bplfnN9Kwg8aEkVMDBW9WFuWTvlarDXhm+Q12C5oqIiS2bE80rHDYFxGgITIvz1kY0aeWlfqutjayh/793ykf+MEHad82NtIB6umh///73/t/9aabSETddx+l7N55p17DT3H//TTG/PKX+mu2XS0gMMzbHNgIe8wYOi/6k+SffJL+hgQjInW2pJTrpJRjpJSjpJSPaK/9XEr5c+1nKaW8U/v/SVLKLZH43qgyfTpQUICCzW+iuBjoOBKkoKliyBCcPnQSHnRjcOsB88azVVWuna2hQ+niyt67jW4GI0f2iwhb4SRtFPAcP4L//E9g3JAWiKFDQ84AlywhrWHss+ZIbLW0WFcztBJbHg9dRX19ZDulpWHiRBosOjuDJMcbyciA+MQnUO3ZEjgmawKwLX0Yzp4NIbYs+iMChlpb2k1o99kwxJYqYa/E1qlTNMgVFeHcOV+95GgWHURsAUB6ezP6RIqjGXUwZ0t1dwmKldjq6KAb3zXXkMB69FHKtlUlxO2KrcmTaScZk39D5V0C+ozGprNlJDeXQiZPhlnjN9JMmkQ3o//7vzA/KKCwXHCO1fdgmXgRYvP7pok7111Hw8Jrr+mvSQk071MJ8ubH4NZbgdODQjhbTsRWhAqbhu1sqXPVYcVzu1XkOzpoG03F1rFjtFz0D38ge/ahhwLvC2lpPjUtZs+mz3rqKdrdDz8c+J2XXkoZOatX07Het4+KbN9xh08k0Br/MKJJL9/UVDrH+8XWJZckSNKkL1xB3gqPh1Za/e1v+MQkCdkcovgnAAwZgq7jJzEudT9SenvMxdbo0TRzt5OQ6IeaeBc3bO23c9VYY8vZKi6mv0tNwXwy3K1ZsIAGa+Og6EhsAeaZsEDwPAWVt6VVB50wgXbb3r0ktoTQc6EtmTED0+UW1B32S1jRtufgORqUQ4YRgaC1ttRI24ByZz0RjWRk0GoatSJR28kerSSD0d1SA7vbnC2A9IjHQ1Xqz2YNdVQcKC/P1OwLXfZBYSW21Al90UW0P+6/n/bHihVAdbUzZwvwDSXaEVtqJu1CbCUqHg/NHcNytgDHhU0Lav+BAqnZViZfXl1NN+kXX9RfO3AASD1zCl2ZeZaKPTcXuOWuXJxEIU59ECSMaJcIia0jR0iP2BIRZrhwtgDyAOyILTXH71+JaPyuW2+lBMRnnrFpOdH4e8st9POPfmRuBgtBzlddHVWKf/hhuqyDrkA0MmQI7VSjs2Wyg6dOJbEVVl5ilGGxFYxFi4C6OiyoOIi0MychC0M7WyltJ3FFpclKREVVFUl8l+UfKkq7Ud66o3+5myOxpXqcGcWWjbh2VhYVR33tNf1kdiy2rPK2lNgyu7mp/aeJrYkT6emuXSS2xo2zce+dMQP5vafQt/+g7+uas7WnjQZlt85WRQX9ab2HG9CRUYAOT37/drrC2JBa28mZw4uMTwHop084zlZmJmmeg2RMAAAgAElEQVSSIrSgq8DZyl+rXtK2l77n5ppbYwe142RcWDJ8OE2H33vPviCcPJkenYotpRQdhhETndmz6ZoJq1B6eTmJEpsTxYsPrUOP8NAxM7HVUlLITHn9dT2nZ+NGYDDaIEIIjrvuAupFJRre9RNbhoUvtvF69ToVYdDQEIGCpoBjZ2vMGDrNQwkNVYHH57ak9nN7O11jX/iCo+/+6lfJeA5oiG5gyRIaux98kFa233mnA0EqhG+Y18TZAihHsq0ttr3SncJiKxha3tYne99EYd8JtKcHFybd+UOQc/4k5g/TxJZZv5Ywyz/MzN2NdNnZ3zanvp7SyGzXbjPOTm2KLYDytg4e1NPNWlr0NQFBCSW2WlvpQ8yWAvo5W2PH0nfW1tpIjldoSQTD6jf7vt7UBOTnY19DFlJSQojVEGJLSuD8R/U4nlaOCRNIxLhGlX+Qsl9d5Y40d7YKC+0tzjOrs6WYOZOqx/cNcTYdz8+nR/+KGGE7W0psXXSRo+0JoKSEzm12tgCQ2OrsNK+GYZvychJaNsskVLetwyHvXLrTWrTzuu46OjXfeIOeb9oElGS0wVMcXGwNGwaIykqkHqnzTQltaaFrx6mzBYRdRT6sGlsAjYUej+OitvPmkRY5eDD4+zZtoqHWZzJYUkL21KuvUsa7QzIzKa0yWCZKSorubmVk2DbOdIyLrCycrYBK8gkIi61gjBkDDB+Oaa1vYghO4qOTwRXNvpOFKMBpzMraSVed2UUTptiaBkqOl1N1Z6uy0t7CGwC0XQ6dLYDEFqCHElUh7pDfa8fZsprFzptH5S0uuwwA5auNGUODRkODTbE1YQJ6PBm4+NwWX2GghRr276f9F7QEkVIWFjlbANBX14ADXWGEEBVjxpAIaWzsF1uq/pW/2LIVQgQsnS2AShQUoQWpJe6cLeMu+fhjmiDbdrbMxNahQ2Slum4up6FizEZ1ceIEhSSClQSYMIGEfyT6EyYQ1dX0GFYo0UGtrTMfNmBi304cnbyYvvyf/zStLLxgAenal14ijbRxI1CZF9rZAoDK+ZWokHX46U8Mlo6TgqaKCBU2Dbt6vBoLbQ/mhKpwYMypNWPjRsqh8pnXpqTQasOrrnL0nU654QbyB+6918WlrcRWby+5libO1qRJtNtYbCUrQgCLFiHz3fUoRCu2HA4uTN7fT2KseP+75vlaAF3YWVnmKxLPnwcefzxoz7hx57biDHJxehgF3m2XfVAosdXbSzMpm2JrxAgymlQJCAs3NxB1ZbkRWyUl1LldVQUG3QtVE1tbYistDe0jpmAG/JLktRVLIcs+APrN2aSwqRI8qUdJbLlOjlcoN3Tfvn6xVTg20NmyXdAU0MWWSZxhxQpgRHYLBo8JX2zZrrEFkNjq7g6Max08SCFEhzccUyZPppizCnupyUWwz160iG66F5jYGj6c7lmxElsfr30dAHB2/mKaMJ06FdAdAaBJztVXk7Gybx8NTcXpbbacxcGTK5GLs1jz3636eRiioGl7O93wVXMKABERW8bWRK5pbXUcQgToVjN0KC3ctqKxkfZvvIqqezzAli3At7/t4peV2Dp5kna0ibOVk0NDZ3/5hwSExVYoFi0C2tqQAondLUMsm292dABv15LYEvX1FmXNoZd/MHO2fvITyhz89a8tN6e8ZRu2YwqONtKhcyy2ysv1ViZSOqpFsngxzZ7OnHEgttLS6DvciC0TjBa4LbEFoHvKTEzHVtQdMsysDc5W0HwtIORqxEx0IPvcCTQgAmLL2JC6uRnIy0NOYQZycnxzthzNorOzSXCYJOxkebqRca7NURNqIEJiCwh0tw4dCj+EqPjEJ+jCVNeaHSdXiDAynBMXISiUGNaKRAdiK/Wv63AYlcibPV631Sy+fNkyGga++116nt93yt6YoM10Bp2uw7PPaq8FcbYOHwZqamhh61e/avgP/1pOLmhpocsrIs6WQ4QgdyuY2FKuV4IVVbeH10tCS0VkLG48U6aws5XcaCEsADiJoVi71vxtb7wBHO00hBmtnC2AkuT9na32duB736OfX37Z/Pd6e1FYvx1bMR1Hj5JZceKEg3ASoE+91BTAQW2lJUvIjFi/3oHYAoIXNnUptioq7E8CM2pmIA8f4/QWQ7HQpiacH1yC1lYHzpaJ2MrOBiYNokHgqCjvz8t2jeraq5wtbScXF+vO1pkzZBQ4CiMC5qHEULWnLDDbJY7qDJll2EupO1uRwD9J3kHY/EJk9mzSnXZrMgVQUEDHLZTY6uzE4G1vYh0WY3i5oAnEoEGWYuuKK+iU/93v6DT0nLE5JmizzCsvrscPfqBVl7Fwtt57j0LmR49SSOuvfzW4IGrFWxhiK+waW4BrZwsgx+rQIetDs2kTHbqEKbbrBCWGVYa/xWRoyhQyH+y2eow1LLZCUVLSf4cvmWgttl54AejJtym2zMo/PPEEnSVLltCVoZYBG9m3D6nnz2EbpuHoUX3lheMwIqCPNA5uPjU1lL702msRFlsOBhjVBseuqwUABZdRknzKVi1JvrMTaGvDyVQbKxGBoDlbADB1qDbCVVbYS1gPRkoKifG9ey3FluN6PsHElu1lpb5ExdlqbaUPjJSzdfHFlKCi8rZYbAEA3n/f5QcIYa/8w9//jrTOs1iHxRShS0khd8siST47myqNA8DCS7shzp51JLY+O7cODQ1UWgBNTXRuGZYpr1lDVXzy82kTnn6afv7+97U3qCry6gR2Qdg1tgA6/104W4Cet2Xlbql8rZD17xIRJbbUdWwxVql7QliLQKIIiy07aKsSZ101BLW1CAgldnZSzsGMKwxiyyqMCNDdvatLnw41N1Mvqs98hoLavb2+Ra0UW7cCQL/YclT2QaHElvJbHdx80tJo5cmf/0zOiiOxZbbSR0rHA8yoUeQqGwzHkKSMH4dzIhsFH2m1dDXVcqzPRo0tgJbQpKWZ5mwBwIQ8Ur1DJkcoz0etSGxp6Z/FFRVFSWyZ9Bqzg5WzNXiwzRWSZmLLrOxDOGRmUiIHO1sAaGGuEBHI2wolttatQ3dqBnYO+aS+Mre6mvLnLCYs111Hj5fPcNAfcOhQICsL43PqMH48lWR7/0/HcTKtBE8+CaxdC3zjG1QUffZs+rvHjSOD7vbb6f8PHNA+a9o0ag1lVXw5GN3dGL36/2Es9oTnbDmceBqZNIn+LjOx1dREfQPjla8VNiqnTqkoi7FKGdmJmrfFYssOK1cCM2di/m1VEAIB7tabb9J9eNENmtjKzw++Gsa/IfVjj1FuyXe/S0s2ysrMQ4nbtgFZWWgaNM69s1VSQrN9F84WQHlbSjc5Flv+q5E6Okh0OhBbHg/lXtx1l+1fAVJTsT9/GryNmtjS/oBD58jZsmWkWJVMBzAqnW4+lTXhjLQGxo4l4XHsmI+zpUwoRwVNgeBiSzmOTlZvwdrZsuVqAbrYMn5ApMo+GJk8mcSWwwUhFyJ5eeQMx0Js7ShcgMJyQxG86mqaXFnYasuXk1havjBI3T1/hAAqKyHq6/DTn9Kh7a4/jt1tw/DlL9Pc9dFHgZtvpjQPY3mcVatoLHn8ce2FW24hVfKXv/S/Z/VqWkASkj17MOHdZ/AL8QUUF7msqtnbSzNYl85Waiowd675isSkztcCfJ0tISzrHA0bRm9N1LwtFlt2mDYNeP99lIzJx6WXBoqtF16gWcWCq3PJARk3LviKJ2P5h/p64Gc/o4t97FiytK+9li56Y/dOgMTW5MkoGe7BsWPkbHk8uvC3hSpsatLQ0w7GFcKOxFZPT2CyiIsu9wDtYqeL1Rq9M1D18b9oO7Qk2j2nSuD12ixKHkRsDZcNaEYRJs8Op8CWgTFjaPA1CSNKSaeMsY1fSNQfaFZrS3UndpT4R6ZRamqgs2V7Zm/mbB06RI+RcrYASpKvq6O/s69vQIstQHd47Fba/utfyWzpT2cqL6fJSmen+S8cOADs3Ys30xb7ngsqhmmRt5WdTcJokHQ4JlRWAnV1WLiQ5o81o5tQs6wETU2ksbdupcoGGRm+v1ZaSkPur36lzb0WL6aLTGvit3Yt9WB8/nkb0UUt73GufAcpa39vb7v9UQ0iXTpbADlXe/cGNuvYtIkut7AX78SLoiIabE5qLfPMajJqWCXJ9/aSuxdPWGw55Prr4RNK7OoiE+raa4H0DC2nIVSWtNdLd6v9+6kHFQB861v6/y9dSjfGN9/UX+vro9Fk2jSUlaE/jDh8eNBzzxw1CubkOO6YW1LSX0/VmdgCAvO2XIotN5wZNxNZsgPdH3zY72ztaBoWOoSoCOFsnRlcgVmzIrSxxuZlBrHV3U1jckMD7VJDL9bgBHO2Dh+mD3NYiVWIwF3iytnyDyMWFTku6hgUdS2+RQ3lB7rYqq6my86s8owZq1fT+9Xu649dWykQrTbMHzv8xNagQZRaYZG31Y/qoehQbPVz/DhEyTAUF1NoTetqZsrXvkbj949/DLqYbroJ+POfseutZtxyi55esGFDiG3QJq4n04bRh1rUtAuKytENQ2ypvC1Dr2gAJLbmzk3SfC2ADAi14CHETWfqVLo3G+cCDQ3UAaWmxjwVOlaw2HLI8uXwCSVu2EDjw/Ll2hveeENfVWhFSgq5W2+8QVOr22/3jQXOn09WmTGUeOAAxSr9xJZDQ4JQo6DDpGjFkiUOfz0BxJacTkny7eu39E/9tjQMC50cr8jPtxRbua31GDW/PLzK8UZMxJba183NDguaAqHFlqGOmROMYqu7m3Zr2M5WJEOIgN4jcf16ehzgYksZTHZCifv26btN1bYLWf5h3Tr0VY3B5rbRgedCdTU5W8FsNadjQmUlOUtnz/YvfLEbEq+qAj79aQostLcD+PzngZ4evLT8ORQWUv7TkCH6PrBEE1v/U/0UDcyPPWZv241EYCycNo0cQmMosaWFzIGkzddSKBs/RG7plCkUvKitpecvvEBDwLZtwA9/GJNbjSUsthxSWgqfUOILL9B949/+TXvDqFH2ZiejR9NS1owM4IEHfP8vPZ0Uzauv6isWt1HleEybBq+XbmwHDjjM11KoAdPljeeOO6ihaLAFlz4kgNgaPHM02pGPzn9sAY4fhxw0CHXHM5w5W2YJ8iqu50r1WlBYqB8bg7MF0ODpqKApoGesR1FsNTbSrgjb2YpkCBGgQXrIEN2eGOBia/x42vV2xNbTT5MbMnWqTbF17hywYQNO11C7iYBzYc4cCgX1Z6Wb4EZsqe1Riz0clCi/9166rJ9+GugaPR61ebOxvP1ZvPyShNdLqxjXrw+uD/taKIzYPOtq4HOfIzsw2N9oRgScrbQ04JJLfJPk1c9Jm6+lUPeQEDN8Vdri3XeB226jSFRVFQWFbropMrWS3cJiywUqlLhjB7WZuOYaF/3wVJL8qlXmg8PSpTRj+8c/6Pm2bSTCJkxAWRlFFRsbXYotNeV0eeMZNoxW+dhuuKpmmv5iKwIDjF0qRqRgK6YjYwc5W52DbJZ9UFiFEdvbSTBEuuK4crc0laXEVlOTi7YgVs5Wby8ptwiILUdlH4zbpMRWTw9tS6SdLdW2R92IXbq5FwqpqbQqMZTY6uig2srXXUdD0a5dWoQvmNjasAHo7ET9RBJbps4WEDyUGKwxvRlqklNX56pVz/TptNj8hz+kSeSPz9yK8fJDTO+jMjELF9KfGqy7Wkd9C1oxGGUj0qieRFoacM89trcBQMQmnvPn0xxeDa0bN9KlFnYbsXijxFYIZ2vUKJpM3H03pd898AAJL9vjfBRhseUCFUr8yldoovbpT7v4kMsvp1HPqivnlVeSuHrpJXq+bRslIaSn+9zQ4iG2HJOTQ3fmODpbFRXAFszAoPoPgPp6fJxjs+yDwkpsRaTAjgmqbY+fs7V7NzUAiIjYOnqURE4ExJbjoo6pqeS4KbF15AhtS6SdLUAPJQKOF4RciMyeTQu7zp+3fs/atXTD/tKXKN9HSk0jZWfT5MhMbK1bB2Rno3YIJQ8FnAvjx9NJE6yMfVsb5ZH6Z7RboQbAujp9mbTDlbX33Ue/+uyzQOmqG+j7tUR5VWImWCix+cMTOIGhlIDu9QLf/Cbwyit6d207RGjiOW8eHat33qHnmzZRrpLt/M5ERYURQ0yWUlJIcHq9lGf4yCOJ87ez2HKBCiVu2uRbkM8Rl18ObN5sLTTy8mjK9fLLdPVs29a/nCTpxBZgXti0rY1Ua0FB1L8+MxPYXzADnt4uYMsWnPCQs2VbbFnlbDmuw2CTmTPpOzWVpQ6VVmrN2ddZhRHVSkSXAse4Sxw7W4BvM+polH1QqCT57GybRcAubGbPphy7YPWInnqK9P6CBfT+1FS/UKK/2GpoIIW2aBEamkkoBZwLqalUxj2Ys+W0/IHXS59rdLYcdjpeuJDG8BtvBL71eAHNntesAc6dQ1UVDZf9CwRMaP+oBaczijBnjvbCqlVkpdx9t/26XRGaeM6aRXP0t9+mwMjOnRdAvhZg29kCKLXn0KHEC52y2HLJ9dfT45IlURy/ly6ls+ZPf6KZT6TEVpg5W64wK2za1kZCy3Y8MjyaK2fSD729ONZbgsJCB2ObsnH8kzdUsbNIO1tf/CIJEC0+nZ5OkRUlthx9XWoqfY6V2IqQs5WZ6XBibhRbquxDNMSWcrYGeL6WIlSS/PbtZD7dfjvNhXJyKBemX2xVVPiKrVOnqCZMZyfw8MM4coSEuKrF5kN1NeVfWK3Yc9of0OMhNWR0thyKLSHIlFuzRlvZfeutlMj10ksQgtytt94KLBMIUHQ6pbUFWRVFej5QRgbwox9RrYGf/9zeRrS20o5OT3e07f5kZtLxffttfVViookOV9jM2QJoHySKm2WExZZLrr+eRM9tt0XxS665hkYC1SpdC7wXFenLeF3d48vKyOpWijEWWDlbMVweklY1AqdSSA0c7nCwEhGgO0dfX2CtqoYGGqHVYBApUlMDQl7FxWFou5wca7Hl0pUzrhlQZR8cJaDm5upq7eBB+pvDKsFtwYQJJOhZbAEgM6i8nMSFfx9wgPRBZiYVA1XU1JA46+6Gr7PV2UmTwn37KOVh0qTg9dbmzKFcwS1bzP/fzZigyj8cP06TNxfLgn3O23nzyO01hBJPntQbERhZuxYYihMoneh3bi1ZQgrVqs+tP2H0RfRn/nwKhPzpTxQRnTEjIh8bX2bMoP05c2a8t8Q1LLZcMmwYzeb7VyFGg5ISGpy2b6cb0aRJAPRWXsXFjstkEUJQtXpjiYFoo8SW0RmKsdiqqBTYDBp59pwqsR9CBKybUTc0kMpwXOzMOcpBT0933F2HxJa/UDx8mO68dvNj/DCafY4Kmir8na3KyugUA8rMpHwhh7k8FzKPPUZ6Z+FCvb4xQOL5uecopGa8NGtqKGl++3aQ2GptpWN3002UT/HrX9OHIcS5EKK4aVhiq6kpMsc4JYXKQLz1FnDokPqzTPO21vxOokicQOFYE8fl0ktJofb0hP7OCI6F8+aRnn3uOTpuYZpliUFpKcW9XbrwiQCLrURn6VJ6nDDBZ8ZWURGdXOKoUVpKN3ujWAmjF5gbKiuB9/tIbO1udeFsAYFiy3EdBvcoB334cBeRVytnK4zBKy+P7iOdnQ4Lmir8c7aieUKvWUOhHQYA8NnPkhG1cyfdkFUU97e/pdPkS1/yfX9NDT2+8w70833lSuAPfwD+67+oAaHG0aNBxNbQoZTPFExs2V2JqKispC89csRxCNGSm2+mSelvfoOyMspf8xdbhw8Du/7RjjTZbR7euuQS2plmlpg/EXS25syhuV939wWSr3WBwGIr0VFiy6/XwpNPUhJr0mBWayuMLvduqKgA3gatlNonRztztvLz6dHM2YqR2FJulquvy86OitgCyA0JeoO1wt/Zika+lmLiRL3cCgMA+NSnqEnFiROkCz74gMaUadMCozVlZXSqvPsu9BPw5ZeBL3/ZZ0V1dzdd4kHPhTlzKEnerHiVm/6AlZUU4v/gg8i5lxUVtEDpd78DQKHEt9/2zXd//nkKIQIwD1Erhdqf7BaECDpbubl6qYcLIl/rAoHFVqJTVUWev1/n5SlTqNhg0mAmtmIcRqysBN7AFbjvhkPYh7HunC1jYdO+PppNR3ologVKbLn6On9nq6eHhGIExNbhw9T2xLWz9fHHlGkcTbHFmFJTQ4nUHg/lru/cSa6WWe5dTQ3pBnmRNktZtowKVBnefPy4jeK2l1xCIb99+3xf7+2lunVOxwR1QZw7F9lQ8cyZ5Lj29uKyy+jyMfbRXrMGWDhRi8GaOVvl5fRP1UoMRgSdLYBWVw4enNQpThccLLaSgfvuS/6qdP5iS8rY52xpY/LazSMAOCx0ZxZGbG4mlZEMzpa/2Aqzxhag75Ldu+nRtbMVjQbUjG0mTCA9MHIk3e9XrDB/X00NialDXWWUgd2/fE/HVr01lej6l7/4vq6aMbtxthSRCiMClM+oNYRfsIA0pQol7tpF0cFPzQkitgASljF2tgAqOr1nj+t0TCYKsNhiYoO/2Dp3jjz5GIqtwkLSHAcP0qOjJHMzsRWtGlsWRFRshVljC9B3yZ499OjY2crL8xVb7GzFjfJyKiuya5deA9cfn6jY1Kmmmde2xNZFF9HinNdf933dba0p4/UXSWdLFdJsbERhIYVXldhas4byJi+9OEgYEaCd1tBg3UsSoOqyHR0RdbZcLaJhogqLLSY2DBpE0ywltmJYPV4hhD4ujx7tsExBMLEVI2dLjf2u9JGV2Iqgs+UqjNjZqYeT2NmKK1lZwSuYTJhAqYvBjBpV3Daky3nVVdRLxrhC1u2YkJWlK4tIOltqZxw7BoAWW773Hl1Ga9ZQSldBlw1nCwgeSlR/dwwXCzGxh8UWExuEoFmnKjwYpwFGRRwcJccDeoK8MWcrWgVNLaipod7kl1/u4pfNxJYQYW270dlKSXFhKqhm1Dt30odxK52EJjWVcttVKxgzjhwh7RNSL6kiqBs36q857YtoRF3Y0XC2NLF12WVkxj/xBJmxK1aAVhdkZlpXtp48ma69YApVteqJ4cSTiT0stpjYYSxsGqcBRo3JjhuT5uSQOPF3trKyYiYShKA6t64K7vvX2Qqzxhagi639++ke57hElhJbO3ZQaMmR1cjEg7lzgdpaXRf5c+SIzeK28+fTtWMMJZ46RY9uxgR1YUfS2VLCTRuz5s6lyuSPPkqXzXXXgYqUFRVZ/8EeD9UWsyO22Nm6oGGxxcQOo9iKQxgR0MOIjp0tIXwrngN62YdkEAk5OZQXonqOhFn2AdDFVm+vy8LvSmx9+CGHEJMElbdl1d7QdnHbzEzgk5/0FVvhjAkjR9IsJJKJSunplIulOVs5OeTsdXYCV1+ttXRVYisYqq6GWbl+IG5jIRNbWGwxsSMBxJbrMCLg2wwQiGlB07BRYQ7lbkVQbAEu8rUAXWx1dXFyfJIwa5ZfU2o/HHUSuOoq4MAB4KOP6Hk4Y8KqVRRjj3S5dK+3X2wBFEoEDCs2T5wI3QaqpoZmJMa6EUbY2RoQsNhiYkdpKQ2o58/HTWxdfTXwwAMUEnBMfn6gsxWjlYhho5aYnT0bkRpbAEVIVLuosJwtgJ2tJCEnhxYimomtvj7SJY7EFqC7W21tJJbc9CDzeqkfYaTxen1qA952G3DvvRTOB2DP2aquJvfbSqGqFSbcu/OChsUWEzvU6p7jx2lgFUJPPI8RBQXAI4+4TFUydl5WpbKTxdkyiq0jR2imHYE+Y8rdCsvZAtjZSiJUU+quLt/XW1rosrB9LowaRUWbVb0t1aonkcLypaU+zpbXC3zvewYDzY7YGjRIL2bmz8mTVLZ/+XJfq5i54GCxxcQOY60tNbC6yvaOE8Yw4tGjVJg1GcVWBGpsKdT9gZ2tgUNNDZnT//qX7+u2amz5c9VVwIYNlE/oplVPtPF6qdp9b2/g/50/T3lYdhypmhpKdFM5k4rVq+kzvvOdyGwvk7Ak0Z2OSXqMYivC7SliglFsxbigadiYia1EcrYisC1MbJg/n5zhr3zFN6ruWmydPw9s2hTzjhK2MFSRD+CEVtA0lLMFkNhqb6elnIrmZuCnPwVuvJGcL+aChsUWEzv8na1EG1hDYSa2ktXZCrPGliIssaV+2et1l6fDxIXiYmrCvHUrsHQpaSXApdiaP59WJr7+emKOCX6FTX1oCVHQ1IhZcdPvf5923re/Hd42MkkBiy0mdhQVUdhQ5Wwl2sAaivx8PWcrxgVNw0aJrXPnSGyVlUVk5VZYYkttE4cQk46lS4Ff/Qp46y0yZnp6KLLu8TisvpCVpZeASMQxwdCyJ4ATIVr1GLnoIqoBppLkjx0DfvYzYOVKYOzYyGwrk9CEJbaEEIVCiL8JIT7SHgOuFCFEuRBigxBitxCiVghxdzjfySQxqak0El8oztbgwb6hsERGlX5QzlaEwnZ5ebQbrApoB8XjIVeDk+OTkpUrKQr2yivArbfS/MPrdZGGeeWVVP7h8OHEGxP8qsj74MTZEsK3KfVjj9Fqgm9+MzLbySQ84Tpb9wFYL6WsArBee+5PD4B7pJQXA6gGcKcQYnyY38skK6rWVrKKra4u+pdMNbaAwDBihMTWypXA/feH8QFf+xpw000R2RYm9tx1F/DQQ8D//i/w+9+7XCihSkD09rpr1RNNVEV6M7HlxNkCKG/r4EFg82bgmWeAz3/eZcE/Jhlx2mDDn2sBLNB+/g2AjQDuNb5BStkIoFH7+YwQYjeAMgAfhvndTDKS7GILIHcrmWpsAbrYam+n5JoIia0lS8Isb/TQQxHZDiZ+fOMbtJDwiSdchpOrqkh0HDiQeGNCejo5V2ZhxJYWsvHsLvRR5fdXrKCVzA8+GLntZBKecJ2tYZqYUqIqaLReCDECwFQA/wzyni8KIbYIIba0mK0AYZKb0lJqptfTk5yrEQFdbCWjs7V3b8RqbDEMQBGy1asp3/vOO11+iHxoxnQAAAlbSURBVHK3Ek1sAQG1tvppaaG+qHbjplOn0jLOAweAL3xBb2fBDAhCniVCiDeFELtM/l3r5IuEELkA/ghglZTytNX7pJTPSClnSClnFNmJhTPJRWmpnveUiANrMFQBVlW6IpnEVkYG3RR27aLnnJTORBAhgK9/nRYXumLxYnpMxDHfr2VPP3Za9RjJyABmzqTHBx6I3PYxSUHIMKKUcpHV/wkhmoQQpVLKRiFEKYBmi/elgYTWb6WUL7reWib5UUupgeQTW8rZUu01kimMKAS5W6rODztbTCJx5ZWU9HXFFfHekkC8XmDHjsDX7VSP9+eJJ6hIqqt4K5PMhBtGfBXAzdrPNwN4xf8NQggB4FkAu6WUPwjz+5hk50IQW0qwJJOzBZDYam8nh8tVJjPDRAkhgM98JvKNpCNBaSmVq/GvIu9GbM2aZWisyAwkwhVb3wNwuRDiIwCXa88hhPAKIdZp76kBsBLAQiHEdu3f4jC/l0lWLgSx9aG2tiOZnC1Az9uKUI0thhkQeL3UZsc/h9hpGJEZ0IS1GlFKeRLAZSavHwOwWPv5HQAJ1FmUiSvJLLZUzlZtLc3Eky0UoIphcQiRYexjrLVVUkI/9/VRE+lEzDFjEhKuIM/EFjVYAckntpSz1dBAf0daWny3xynK2WKxxTD2MWvZ09ZGgovFFmMTFltMbMnIIJGVmqo7RcmCEltA8oUQARZbDOMGs5Y9KqTIYUTGJuEWNWUY55SWUpK2SLLosmovc/588iXHAyy2GMYNyo03OltOWvUwDFhsMfGgtJRa3iQjeXnJL7a4xhbD2CctjUSVUWw5bdXDDHhYbDGx5447gGbTkmyJT34+zWo5jMgwAwev1zyMyM4WYxMWW0zsWbYs3lvgHpW3lYzOVm4u19hiGDf4V5HnnC3GISy2GMYJySy2/uM/gIkTk28VJcPEm9JSYPt2/fmJEzR5ycyM3zYxSQWLLYZxghJbyRhGnDiR/jEM4wyvl9rs9PbSSmo31eOZAQ2XfmAYJ+TlkTNUXBzvLWEYJlaoKvIq15TFFuMQdrYYxgkzZwKnT1PuE8MwAwNjYdPSUgojGgs0M0wI+I7BME645x5g3brQ72MY5sLBv7ApO1uMQ1hsMQzDMEwwjP0RAXK2WGwxDmCxxTAMwzDBGDaMOl40NgJnzwIdHVz2gXEEiy2GYRiGCYaxijwXNGVcwGKLYRiGYUKhCptyqx7GBSy2GIZhGCYUpaUURmRni3EBiy2GYRiGCYVytlhsMS5gscUwDMMwoVBV5Jua6DmHERkHsNhiGIZhmFCUllIV+dpaSpgvKIj3FjFJBIsthmEYhgmFqrW1Ywe5WkLEd3uYpILFFsMwDMOEQrXsqa3lECLjGBZbDMMwDBMK5Wx1dXFyPOMYFlsMwzAMEwpVRR5gscU4hsUWwzAMw4RCVZEHOIzIOIbFFsMwDMPYQYUS2dliHMJii2EYhmHsoMQWO1uMQ1hsMQzDMIwd1IpEdrYYh7DYYhiGYRg7cBiRcQmLLYZhGIaxA4cRGZd44r0BDMMwDJMULF0K1NUB48fHe0uYJIPFFsMwDMPYoaQEeOyxeG8Fk4RwGJFhGIZhGCaKsNhiGIZhGIaJIiy2GIZhGIZhogiLLYZhGIZhmCjCYothGIZhGCaKsNhiGIZhGIaJIiy2GIZhGIZhogiLLYZhGIZhmCgipJTx3gZLhBAtAOqi/DVDAZyI8ncw4cHHKLHh45P48DFKbPj4JD52j1GllDKgeWZCi61YIITYIqWcEe/tYKzhY5TY8PFJfPgYJTZ8fBKfcI8RhxEZhmEYhmGiCIsthmEYhmGYKMJiC3gm3hvAhISPUWLDxyfx4WOU2PDxSXzCOkYDPmeLYRiGYRgmmrCzxTAMwzAME0VYbDEMwzAMw0SRASu2hBBXCiH2CiH2CyHui/f2MIAQolwIsUEIsVsIUSuEuFt7vVAI8TchxEfa4+B4b+tARgiRKoT4lxDiz9pzPj4JhBBikBDiBSHEHu1amsPHKLEQQnxVG+N2CSHWCCEy+RjFDyHEL4UQzUKIXYbXLI+HEOJ+TTvsFUJcYec7BqTYEkKkAvhvAFcBGA9ghRBifHy3igHQA+AeKeXFAKoB3Kkdl/sArJdSVgFYrz1n4sfdAHYbnvPxSSx+DOAvUspxACaDjhUfowRBCFEG4CsAZkgpJwJIBXAj+BjFk18DuNLvNdPjod2TbgQwQfudn2maIigDUmwBmAVgv5TyoJSyC8DzAK6N8zYNeKSUjVLKbdrPZ0A3iTLQsfmN9rbfAFgany1khBDDASwB8AvDy3x8EgQhRD6AeQCeBQApZZeU8hT4GCUaHgBZQggPgGwAx8DHKG5IKd8G0Or3stXxuBbA81LKTinlIQD7QZoiKANVbJUBaDA8P6K9xiQIQogRAKYC+CeAYVLKRoAEGYDi+G3ZgOdHAL4OoM/wGh+fxOEiAC0AfqWFen8hhMgBH6OEQUp5FMDjAOoBNAJol1K+AT5GiYbV8XClHwaq2BImr3ENjARBCJEL4I8AVkkpT8d7exhCCHE1gGYp5dZ4bwtjiQfANABPSSmnAjgLDkclFFruz7UARgLwAsgRQnwuvlvFOMCVfhioYusIgHLD8+EgG5eJM0KINJDQ+q2U8kXt5SYhRKn2/6UAmuO1fQOcGgCfEkIcBoXeFwohngMfn0TiCIAjUsp/as9fAIkvPkaJwyIAh6SULVLKbgAvArgEfIwSDavj4Uo/DFSxtRlAlRBipBAiHZTs9mqct2nAI4QQoFyT3VLKHxj+61UAN2s/3wzglVhvGwNIKe+XUg6XUo4AXTNvSSk/Bz4+CYOU8jiABiHEWO2lywB8CD5GiUQ9gGohRLY25l0Gyk/lY5RYWB2PVwHcKITIEEKMBFAF4P1QHzZgK8gLIRaD8k9SAfxSSvlInDdpwCOEmAvg7wB2Qs8JegCUt/UHABWggep6KaV/MiMTQ4QQCwB8TUp5tRBiCPj4JAxCiCmgBQzpAA4C+DxoYs3HKEEQQnwHwA2gFdj/AnAbgFzwMYoLQog1ABYAGAqgCcC3AbwMi+MhhPgGgFtBx2+VlPL1kN8xUMUWwzAMwzBMLBioYUSGYRiGYZiYwGKLYRiGYRgmirDYYhiGYRiGiSIsthiGYRiGYaIIiy2GYRiGYZgowmKLYRiGYRgmirDYYhiGYRiGiSL/H77cc69FBKOSAAAAAElFTkSuQmCC\n", 66 | "text/plain": [ 67 | "
" 68 | ] 69 | }, 70 | "metadata": { 71 | "needs_background": "light" 72 | }, 73 | "output_type": "display_data" 74 | } 75 | ], 76 | "source": [ 77 | "plt.figure(figsize=(10,4))\n", 78 | "plt.plot(t1, color='b')\n", 79 | "plt.plot(t2, color='r')\n", 80 | "\n", 81 | "plt.legend(['t1', 't2'], fontsize=16)" 82 | ] 83 | }, 84 | { 85 | "cell_type": "code", 86 | "execution_count": 157, 87 | "metadata": {}, 88 | "outputs": [], 89 | "source": [ 90 | "ts_df = pd.DataFrame(columns=['t2', 't1'], data=zip(t2,t1))" 91 | ] 92 | }, 93 | { 94 | "cell_type": "code", 95 | "execution_count": 158, 96 | "metadata": {}, 97 | "outputs": [ 98 | { 99 | "data": { 100 | "text/html": [ 101 | "
\n", 102 | "\n", 115 | "\n", 116 | " \n", 117 | " \n", 118 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | " \n", 167 | " \n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | " \n", 176 | " \n", 177 | " \n", 178 | " \n", 179 | " \n", 180 | "
t2t1
00.1554160.098322
10.0220860.095749
2-0.065441-0.036119
30.239062-0.105903
4-0.076154-0.034917
.........
930.1300000.042752
94-0.1055300.047093
950.1712630.030124
96-0.014759-0.093222
970.078611-0.076502
\n", 181 | "

98 rows × 2 columns

\n", 182 | "
" 183 | ], 184 | "text/plain": [ 185 | " t2 t1\n", 186 | "0 0.155416 0.098322\n", 187 | "1 0.022086 0.095749\n", 188 | "2 -0.065441 -0.036119\n", 189 | "3 0.239062 -0.105903\n", 190 | "4 -0.076154 -0.034917\n", 191 | ".. ... ...\n", 192 | "93 0.130000 0.042752\n", 193 | "94 -0.105530 0.047093\n", 194 | "95 0.171263 0.030124\n", 195 | "96 -0.014759 -0.093222\n", 196 | "97 0.078611 -0.076502\n", 197 | "\n", 198 | "[98 rows x 2 columns]" 199 | ] 200 | }, 201 | "execution_count": 158, 202 | "metadata": {}, 203 | "output_type": "execute_result" 204 | } 205 | ], 206 | "source": [ 207 | "ts_df" 208 | ] 209 | }, 210 | { 211 | "cell_type": "code", 212 | "execution_count": 159, 213 | "metadata": {}, 214 | "outputs": [ 215 | { 216 | "name": "stdout", 217 | "output_type": "stream", 218 | "text": [ 219 | "\n", 220 | "Granger Causality\n", 221 | "number of lags (no zero) 1\n", 222 | "ssr based F test: F=0.3711 , p=0.5439 , df_denom=94, df_num=1\n", 223 | "ssr based chi2 test: chi2=0.3830 , p=0.5360 , df=1\n", 224 | "likelihood ratio test: chi2=0.3822 , p=0.5364 , df=1\n", 225 | "parameter F test: F=0.3711 , p=0.5439 , df_denom=94, df_num=1\n", 226 | "\n", 227 | "Granger Causality\n", 228 | "number of lags (no zero) 2\n", 229 | "ssr based F test: F=0.7496 , p=0.4754 , df_denom=91, df_num=2\n", 230 | "ssr based chi2 test: chi2=1.5816 , p=0.4535 , df=2\n", 231 | "likelihood ratio test: chi2=1.5688 , p=0.4564 , df=2\n", 232 | "parameter F test: F=0.7496 , p=0.4754 , df_denom=91, df_num=2\n", 233 | "\n", 234 | "Granger Causality\n", 235 | "number of lags (no zero) 3\n", 236 | "ssr based F test: F=43.0289 , p=0.0000 , df_denom=88, df_num=3\n", 237 | "ssr based chi2 test: chi2=139.3549, p=0.0000 , df=3\n", 238 | "likelihood ratio test: chi2=85.7812 , p=0.0000 , df=3\n", 239 | "parameter F test: F=43.0289 , p=0.0000 , df_denom=88, df_num=3\n" 240 | ] 241 | } 242 | ], 243 | "source": [ 244 | "gc_res = grangercausalitytests(ts_df, 3)" 245 | ] 246 | }, 247 | { 248 | "cell_type": "code", 249 | "execution_count": null, 250 | "metadata": {}, 251 | "outputs": [], 252 | "source": [] 253 | } 254 | ], 255 | "metadata": { 256 | "kernelspec": { 257 | "display_name": "Python 3", 258 | "language": "python", 259 | "name": "python3" 260 | }, 261 | "language_info": { 262 | "codemirror_mode": { 263 | "name": "ipython", 264 | "version": 3 265 | }, 266 | "file_extension": ".py", 267 | "mimetype": "text/x-python", 268 | "name": "python", 269 | "nbconvert_exporter": "python", 270 | "pygments_lexer": "ipython3", 271 | "version": "3.7.7" 272 | } 273 | }, 274 | "nbformat": 4, 275 | "nbformat_minor": 4 276 | } 277 | -------------------------------------------------------------------------------- /Multi Arm Bandit.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 89, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import numpy as np\n", 10 | "from random import choice" 11 | ] 12 | }, 13 | { 14 | "cell_type": "code", 15 | "execution_count": 90, 16 | "metadata": {}, 17 | "outputs": [], 18 | "source": [ 19 | "class Restaurant:\n", 20 | " def __init__(self, mu, dev):\n", 21 | " self.mu = mu\n", 22 | " self.dev = dev\n", 23 | " def sample(self):\n", 24 | " return np.random.normal(self.mu, self.dev)" 25 | ] 26 | }, 27 | { 28 | "cell_type": "code", 29 | "execution_count": 91, 30 | "metadata": {}, 31 | "outputs": [], 32 | "source": [ 33 | "def explore_only(candidates, num_days):\n", 34 | " scores = []\n", 35 | " for _ in range(num_days):\n", 36 | " scores.append(choice(candidates).sample())\n", 37 | " return sum(scores)" 38 | ] 39 | }, 40 | { 41 | "cell_type": "code", 42 | "execution_count": 92, 43 | "metadata": {}, 44 | "outputs": [], 45 | "source": [ 46 | "def exploit_only(candidates, num_days):\n", 47 | " scores = [c.sample() for c in candidates]\n", 48 | " chosen = candidates[np.argmax(scores)]\n", 49 | " for _ in range(num_days - len(candidates)):\n", 50 | " scores.append(chosen.sample())\n", 51 | " return sum(scores)" 52 | ] 53 | }, 54 | { 55 | "cell_type": "code", 56 | "execution_count": 93, 57 | "metadata": {}, 58 | "outputs": [], 59 | "source": [ 60 | "def epsilon_greedy(candidates, num_days, epsilon=0.05):\n", 61 | " scores = []\n", 62 | " history = {idx: [c.sample()] for idx,c in enumerate(candidates)}\n", 63 | " for _ in range(num_days - len(candidates)):\n", 64 | " p = np.random.random()\n", 65 | " #explore\n", 66 | " if p < epsilon:\n", 67 | " chosen = choice(candidates)\n", 68 | " #exploit\n", 69 | " else:\n", 70 | " chosen = candidates[sorted(history.items(), key=lambda pair: np.mean(pair[1]))[-1][0]]\n", 71 | " score = chosen.sample()\n", 72 | " scores.append(score)\n", 73 | " history[candidates.index(chosen)].append(score)\n", 74 | " return sum(scores)" 75 | ] 76 | }, 77 | { 78 | "cell_type": "code", 79 | "execution_count": 94, 80 | "metadata": {}, 81 | "outputs": [], 82 | "source": [ 83 | "def ucb1(candidates, num_days):\n", 84 | " scores = []\n", 85 | " history = {idx: [c.sample()] for idx,c in enumerate(candidates)}\n", 86 | " for t in range(len(candidates), num_days):\n", 87 | " mu_plus_ucb = [np.mean(history[idx]) + np.sqrt(2*np.log(t) / len(history[idx])) for idx in range(len(candidates))]\n", 88 | " chosen = candidates[np.argmax(mu_plus_ucb)]\n", 89 | " \n", 90 | " score = chosen.sample()\n", 91 | " scores.append(score)\n", 92 | " history[candidates.index(chosen)].append(score)\n", 93 | " return sum(scores)" 94 | ] 95 | }, 96 | { 97 | "cell_type": "code", 98 | "execution_count": 171, 99 | "metadata": {}, 100 | "outputs": [], 101 | "source": [ 102 | "dev_factor = 0.5\n", 103 | "num_restaurants = 3\n", 104 | "\n", 105 | "mu_vals = [3*i for i in range(1,num_restaurants+1)]\n", 106 | "dev_vals = [mu*dev_factor for mu in mu_vals]\n", 107 | "mu_dev_pairs = zip(mu_vals, dev_vals)\n", 108 | "\n", 109 | "candidates = [Restaurant(mu,dev) for mu,dev in mu_dev_pairs]\n", 110 | "\n", 111 | "num_days = 300\n", 112 | "\n", 113 | "optimal_average = max(mu_vals)*num_days" 114 | ] 115 | }, 116 | { 117 | "cell_type": "code", 118 | "execution_count": 172, 119 | "metadata": {}, 120 | "outputs": [ 121 | { 122 | "name": "stdout", 123 | "output_type": "stream", 124 | "text": [ 125 | "Explore Only Mean Regret: 0.33400345242040025\n" 126 | ] 127 | } 128 | ], 129 | "source": [ 130 | "explore_only_vals = []\n", 131 | "for _ in range(1000):\n", 132 | " val = explore_only(candidates, num_days)\n", 133 | " explore_only_vals.append(val)\n", 134 | "print('Explore Only Mean Regret: %s'%((optimal_average - np.mean(explore_only_vals)) / optimal_average))" 135 | ] 136 | }, 137 | { 138 | "cell_type": "code", 139 | "execution_count": 173, 140 | "metadata": {}, 141 | "outputs": [ 142 | { 143 | "name": "stdout", 144 | "output_type": "stream", 145 | "text": [ 146 | "Exploit Only Mean Regret: 0.10974979914722435\n" 147 | ] 148 | } 149 | ], 150 | "source": [ 151 | "exploit_only_vals = []\n", 152 | "for _ in range(1000):\n", 153 | " val = exploit_only(candidates, num_days)\n", 154 | " exploit_only_vals.append(val)\n", 155 | "print('Exploit Only Mean Regret: %s'%((optimal_average - np.mean(exploit_only_vals)) / optimal_average))" 156 | ] 157 | }, 158 | { 159 | "cell_type": "code", 160 | "execution_count": 174, 161 | "metadata": {}, 162 | "outputs": [ 163 | { 164 | "name": "stdout", 165 | "output_type": "stream", 166 | "text": [ 167 | "Epsilon Greedy Mean Regret (10%): 0.061901290618584424\n" 168 | ] 169 | } 170 | ], 171 | "source": [ 172 | "epsilon_greedy_vals = []\n", 173 | "for _ in range(1000):\n", 174 | " val = epsilon_greedy(candidates, num_days, 0.1)\n", 175 | " epsilon_greedy_vals.append(val)\n", 176 | "print('Epsilon Greedy Mean Regret (10%%): %s'%((optimal_average - np.mean(epsilon_greedy_vals)) / optimal_average))" 177 | ] 178 | }, 179 | { 180 | "cell_type": "code", 181 | "execution_count": 175, 182 | "metadata": {}, 183 | "outputs": [ 184 | { 185 | "name": "stdout", 186 | "output_type": "stream", 187 | "text": [ 188 | "UCB1 Mean Regret: 0.05807450789812113\n" 189 | ] 190 | } 191 | ], 192 | "source": [ 193 | "ucb1_vals = []\n", 194 | "for _ in range(1000):\n", 195 | " val = ucb1(candidates, num_days)\n", 196 | " ucb1_vals.append(val)\n", 197 | "print('UCB1 Mean Regret: %s'%((optimal_average - np.mean(ucb1_vals)) / optimal_average))" 198 | ] 199 | }, 200 | { 201 | "cell_type": "code", 202 | "execution_count": null, 203 | "metadata": {}, 204 | "outputs": [], 205 | "source": [] 206 | }, 207 | { 208 | "cell_type": "code", 209 | "execution_count": null, 210 | "metadata": {}, 211 | "outputs": [], 212 | "source": [] 213 | } 214 | ], 215 | "metadata": { 216 | "kernelspec": { 217 | "display_name": "Python 3", 218 | "language": "python", 219 | "name": "python3" 220 | }, 221 | "language_info": { 222 | "codemirror_mode": { 223 | "name": "ipython", 224 | "version": 3 225 | }, 226 | "file_extension": ".py", 227 | "mimetype": "text/x-python", 228 | "name": "python", 229 | "nbconvert_exporter": "python", 230 | "pygments_lexer": "ipython3", 231 | "version": "3.7.7" 232 | } 233 | }, 234 | "nbformat": 4, 235 | "nbformat_minor": 4 236 | } 237 | -------------------------------------------------------------------------------- /Stock Forecasting.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Basic Stock Trading" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": 2, 13 | "metadata": {}, 14 | "outputs": [], 15 | "source": [ 16 | "import yfinance as yf\n", 17 | "import matplotlib.pyplot as plt\n", 18 | "import pandas as pd\n", 19 | "from datetime import datetime, timedelta" 20 | ] 21 | }, 22 | { 23 | "cell_type": "code", 24 | "execution_count": 87, 25 | "metadata": {}, 26 | "outputs": [], 27 | "source": [ 28 | "#define the ticker symbol\n", 29 | "tickerSymbol = 'JBLU'" 30 | ] 31 | }, 32 | { 33 | "cell_type": "code", 34 | "execution_count": 88, 35 | "metadata": {}, 36 | "outputs": [], 37 | "source": [ 38 | "#get data on this ticker\n", 39 | "tickerData = yf.Ticker(tickerSymbol)" 40 | ] 41 | }, 42 | { 43 | "cell_type": "code", 44 | "execution_count": 89, 45 | "metadata": {}, 46 | "outputs": [], 47 | "source": [ 48 | "#get the historical prices for this ticker\n", 49 | "tickerDf = tickerData.history(interval='1d', start='2019-1-1', end='2020-4-10')" 50 | ] 51 | }, 52 | { 53 | "cell_type": "code", 54 | "execution_count": 90, 55 | "metadata": {}, 56 | "outputs": [], 57 | "source": [ 58 | "priceData = tickerDf.Open" 59 | ] 60 | }, 61 | { 62 | "cell_type": "code", 63 | "execution_count": 91, 64 | "metadata": {}, 65 | "outputs": [], 66 | "source": [ 67 | "priceData = priceData.asfreq(pd.infer_freq(priceData.index))" 68 | ] 69 | }, 70 | { 71 | "cell_type": "code", 72 | "execution_count": 92, 73 | "metadata": {}, 74 | "outputs": [ 75 | { 76 | "data": { 77 | "text/plain": [ 78 | "Date\n", 79 | "2019-01-02 15.80\n", 80 | "2019-01-03 16.01\n", 81 | "2019-01-04 16.14\n", 82 | "2019-01-05 NaN\n", 83 | "2019-01-06 NaN\n", 84 | " ... \n", 85 | "2020-04-04 NaN\n", 86 | "2020-04-05 NaN\n", 87 | "2020-04-06 7.82\n", 88 | "2020-04-07 8.96\n", 89 | "2020-04-08 9.03\n", 90 | "Freq: D, Name: Open, Length: 463, dtype: float64" 91 | ] 92 | }, 93 | "execution_count": 92, 94 | "metadata": {}, 95 | "output_type": "execute_result" 96 | } 97 | ], 98 | "source": [ 99 | "priceData" 100 | ] 101 | }, 102 | { 103 | "cell_type": "code", 104 | "execution_count": 93, 105 | "metadata": {}, 106 | "outputs": [ 107 | { 108 | "data": { 109 | "text/plain": [ 110 | "Text(0.5, 1.0, 'JBLU Price Data')" 111 | ] 112 | }, 113 | "execution_count": 93, 114 | "metadata": {}, 115 | "output_type": "execute_result" 116 | }, 117 | { 118 | "data": { 119 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmQAAAENCAYAAAChAnmzAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzdd3jb1dXA8e+1LFneezu2kzh7D0IIgbDD3h1AKaXs0fEWKC/l7aB00AEtoy2lzFKgQIFCocywEiAhTsgiy1me8d5TtnTfP36SvOTYcmRr5HyeJ4/t35CuHNv36N5zz1Vaa4QQQgghhP+E+bsBQgghhBBHOgnIhBBCCCH8TAIyIYQQQgg/k4BMCCGEEMLPJCATQgghhPAzCciEEEIIIfxMAjIhRNBRSpUppfb4ux1CCOErEpAJEYCUUlopNahIoOv4gH9dSqkDSqmnlFIzPNxzgvO6D0fwvFc7r330ENec4rzmvRG+lgIPbe5RSlUqpV5XSq0cyeMEKqXULwa8NodSqtn5f/KGUuqHSqksHz6fBKNChKBwfzdACDEqd/X5PB5YAnwTuEgptVxrvck/zTqkBuAB5+dWYD5wFnCWUuomrfWfvXisFUCgVbX+APjY+Xk0kAUcC5wJ/Fwp9WOt9e/81TghRGCTgEyIIKS1/tnAY0qpB4Gbge8D3xrnJo1E/cB2K6WuAR4B7lFKPa617hzJA2mt945B+w7X+1rrX/Q9oJRSwMXAX4HfKqW01vr3fmmdECKgyZSlEKHjHefHVL+2wjuPAx1ALDAD+k2J/p9SaqlS6r9KqXrnsRznNUNO2ymlLlFKve+8p9M5dfisUmqhh2svU0p9qJRqdF67XSn1I6WUxRcvThteBL7mPHSXUiq9z/NHKKW+o5R6UylV7Jx+rldKvTtwKtf1fQGygckDpkkf7XPdhUqpZ5RSRUqpNqVUq1KqUCl1s1JK/uYLEaBkhEyI0HGK82OhX1vhPeX8OHAKcjnwE4xpwMeANKB7yAcxRqOeBi4DaoCXnR8nACcC24GNfa5/CmOatwT4F9AELAN+CZyklFqptbYf5mszXpjW7yql1gJLgfMxRszACJ7/CHwKvOtsbyZwLvCmUurbWusnndfuw5iq/gHQQ+/0L31fF/BboAtYC5RjTGmfDDwILAKu9MVrEkL4lgRkQgQhpdTP+nwZBxyFka/0OhBMU2JXYeSTtQA7BpxbCVyttX5shI91A0YwthZYqbVudp1QSpkwAjrX11djBGMvAt/sO1WqlLob+D/geuBP3r6gQ/gQIyBbQm9AVgvkaq3L+16olEoAPgN+p5R6TmvdpbXeB/zM2fZOT9PWTisHTuk6R8aeBr6llHpIa73BVy9KCOEbEpAJEZx+6uHYduA5rXXLeDdmhJL6BJKupH7XtNz/aq27Blxf6EUwBvAdjFG26/oGYwDOka6DfQ59D7BhBHwD89buwsjFuwzfBmSuoMs9pex87vKBF2qtG5VSTwC/wRjV+nSkT+Ipv05r7VBK3Q9civE9l4BMiAAjAZkQQUhr7ZrmQykVDcwC7gGeUUrN0lrf6bfGDS2R3kDSDtQD/wUe1Fq/5eH6z0f6wEqpeGA6UK613jLMtbHAbKAK+IEx0zlIJ86cNh/yODWrlJoD3IYxRZsFRAy4L9urJ1Eqxfl4ZwITMVZ8jvrxhBDjQwIyIYKc1roN+FwpdSFQBvxQKfWw1rp0FA/ncH48VPK365zjENd4sldrXeDF9ZVeXJvg/DhotMmDJOfHdDyPNLr0ePH8I+GqRVbjOqCUOhZ4D+N7ugp4FWP61gEsBM5hcIA2JKVUEkYOYR6wDvg7RuDbg/G6v+PN4wkhxo8EZEKECOc01y6MjnwhMJqArMn5MfkQ16Q4PzaO4vG94U2dMVdbRjL643qN67XWS7xr0mE50flxXZ9jP8aYvj1Oa72m78VKqR9jBGTeuBYjGPuxhxIcx2EEZEKIACRLoIUILYnOj6P93d7s/LjEmQjvyTEDrvU7rXUTsBPIUkrNHebaRmAXMMeZPD/mlFKnAUcDbcC/+5wqAKoHBmNOK4Z4ODsw1P+NawTyJS8eTwgRACQgEyJEKKXOx8gZ6saLJPC+tNZ7gE+ADOAOD88xD6NsQjfwzKgbOzYewMjT+qtSKq7vCaWUSSmV0efQfRgjU485888YcH2SUmrB4TZIGS4G/uk89GOtdU2fSw4AqUqpWQPuuw6jVIUndUCaUsrT1OMB58cTBjzeYuB2rxovhBhXMmUpRBAaUPYiGpgJnOH8+kda6yoPt01XSj05xEOWaK1/4vz828BHwN1KqXOB1RhJ7tOBszH+btyotT5wOK9hDDyMkRh/KVCklHoNI18rGzgJo9TELwC01o8opRZhTPGtUEq9g1GPLAmYBBwH/A1jteVInaSUcv1NjcTIGVsO5GN8/27VWv9hwD1/wAi8PlVKvQA0Y5TFOAZjlOsiD8+zClgAvKWUWo2xWvQLrfUbwJPALcCDSqlTgD3AVIz/t5foLVArhAgwEpAJEWD6TBUOWQSV/snodozA4z/AQ1rrd4e4Jx24YohzmzGKsKK13u0cCfsBxl6T1wNmjFWJrwB/1FqvHcFLGVdaa62U+gbwNnA18FXAglHu4kOMGm19r79OKfUGcB1wKsbCgDqgGKO46j+8bMKJzn8aY2qyHvgS+DPwD631wYE3aK3fUEqdB9wJfB0j+f5zjBGu6XgOyO7CqD13NkbgaMIonPuG1rrMmSt2D3A8cDpGfbfrMArsSkAmRIBSWgfa/rxCHNmUUplABUYJhxx/t0cIIcTYkxwyIQLPBc6Pn/m1FUIIIcaNTFkKESCUUj/HyPf5CsbU1b3+bZEQQojxIlOWQgQIpZTGKApaCNyttf7Az00SQggxTiQgE0IIIYTws3GdskxJSdH5+flj8tidncb+wFardUweXwghROiSPkR4smHDhlqtdep4PNewAZlSagLGfmgZGPurPaK1vl8p9TuMbT1swF7gSmcF7CHl5+dTWFh4+K32YPfu3QBMnTp1TB5fCCFE6JI+RHiilCoer+caySrLHuAWrfUMYClwk1JqJvAuMFtrPRfYjYeq3kIIIYQQYnjDjpA5ixkedH7eopTaAWRrrd/pc9la4OKxaeLIZGRkDH+REEII4YH0IcLfvMohU0rlY2zZsW7AqW8Dzw9xz7UY25OQm5vrdQNHKi4ubviLhBBCCA+kDxH+NuLCsEqpGIy90L6vtW7uc/xOjGlNjxsNa60f0Vov1lovTk0du7y49vZ22tvbx+zxhRBChC7pQ4S/jSggU0qZMYKxZ7TWL/c5fgXGfmqXaT/XzygrK6OsrMyfTRBCCBGkpA8R/jaSVZYKY+PaHVrr+/ocPx24HVihtZa3FUIIIYQQozSSHLJjgcuBrUqpTc5jPwIeACKAd42YjbVa6+vHpJVCCCGEECFsJKss1wDKw6n/+r45QgghhPBW4YF6Pt1bx1XLJxIdIdtUB6MRJ/ULIYQQIjCtLqrlD+/tJtzkafxEBIOQCaOzsrL83QQhhBBBKtj7kNKGdjLjrESEm/zdFDFKIROQxcTE+LsJQgghglSw9yGl9e1MSIrydzPEYQiZKcvW1lZaW1v93QwhhBBBKNj7kBIPAVmHzc6Jv/+QFwpL/dQq4Y2QCcgqKiqoqKjwdzOEEEIEoWDuQzq77VQ1d5E7ICB7dPU+9te28djq/X5qmfBGyARkQgghxJGorKEDoF9AVt3SyV8+2gtAfJTZL+0S3pGATAghhBgHL6wv5RuPrsPh8O3GNqX1Rm32vlOWMRHhXHf8ZOZPSKDcGbCJwCYBmRBCCDEOiqpb2FjSQFiYb0tTlDgDsr4jZFGWcL53yhSOm5JCZXMnPXaHT59T+J4EZEIIIcQ4aO7oIdbq++IGB+raiDSbSImxDDqXnRCJ3aE52NTp8+cVvhUyZS9ycnL83QQhhBBBajz6kObObuKsvs/nKqpqZUp6DM5tDPvJSTRGzcoaOqQsRoALmYAsKkp+0IQQQozOePQhzZ3dxEX6PiDbWdnCidNSPZ7LSYwEoLxR8sgCXchMWTY3N9Pc3OzvZgghhAhC49GHNHf0EDeKKcvKpk6+/eR6qlsGTzvWtXZR29rFtIxYj/dmJlgBY6/LrWVNXj+3GD8hE5BVVlZSWVnp72YIIYQIQuPRh4x2hOzWFzfz/s5qPtpVM+jcrsoWAKZnxHm8NyLcRHZCJP9cX8qv39zh9XOL8RMyU5ZCCCFEIGvu8D6HrLWrhzV7agFo6ewZdH6nMyAbaoQM4OFvLKK8sZ3JqcG9PVSok4BMCCGEGGNaa5o7e4iL9K7bfXtb76hdVfPgKctdlS0kRVs8rrB0mZMTz5yceK+eV4w/CciEEEKIMdZus2N3aK9HyNbsqSU52kKkxUSlh4BsZ1UL09JjPa6wFMElZHLIhBBCiEDV3NkN4DGHrLHdht1D9X6tNWv21LKsIIWs+EgqB9QSczg0RVUth5yuFMEjZAKy3NxccnNz/d0MIYQQQWis+5DmDiP/a+AI2c7KZub//F2e+vTAoHv2VLdS09LF8oJk0uOtg0bIShvaabfZmS4BWUgImYDMarVitVr93QwhhBBBaKz7kN4Rst5Mofo2G997bhMAa/fVDbrHlcy/bHIKGXERVDZ1onXvSNquEST0i+AxbECmlJqglPpAKbVDKfWlUup7zuNJSql3lVJFzo+JY9/coTU1NdHUJDVWhBBCeG+s+5DmDmdA5hwh217RzNkPrGZ/bRtg5JhVDdhz8pM9deQlRzEhKYr0OCtdPQ6anI8DvQHZ1HQJyELBSEbIeoBbtNYzgKXATUqpmcD/Aqu01lOAVc6v/aaqqoqqqip/NkEIIUSQGus+ZGAOWXKMhfR4Ky/dsIxz5mVRUt/OlU+s55q/FwLQY3ewdl8dxxakAJAZb1Tc77sn5c6qFiYkRRIdIevzQsGwAZnW+qDWeqPz8xZgB5ANnAc85bzsKeD8sWqkEEIIEcx6c8iM4Ck9zsrLNyxjTk48ExIjqWjsYHdVCzOzjAKvm8uaaO3q4djJRkCWER8B4M4j6+y2s3p3DYvzksb7pYgx4lUOmVIqH1gArAPStdYHwQjagDRfN04IIYQIBa4py9g+Sf2uUhW5SVH0ODQ9Ds3cnAQAPt1Ti1JwzORkwAjgwsMUTe3G47y1rZLmzh6+stj7TdG77Q721rQe1usRvjfigEwpFQO8BHxfaz3iDb+UUtcqpQqVUoU1NYO3fRBCCCFCXXNnN1ZzGJbwwd3uhKTejc3nOQOyuRMSuPGEySRFGwVfsxMi2f2LMzh/QTYAz68vJTcpiqUTk71uy/3vFbHyDx/T2W0fzUsRY2REAZlSyowRjD2jtX7ZebhKKZXpPJ8JVHu6V2v9iNZ6sdZ6cWqq593ohRBCiFDW2D70tkkTEo2ALDU2gvQ4Y2pyxdRUbls53X2NUoqwMGNEzeHQzMyK46rlE93HvDE7O44eh2bHwbHdTF14Z9hMQGWMqT4G7NBa39fn1GvAFcA9zo+vjkkLRyg/P9+fTy+EECGlpbO73/QawMMf7aWquZOfnjPLT60aO2Pdh5Q2tJOTGOnxXGaClTAF83LiR1RxPyxM8eOzZ466LbOzjW2UtpU3sSDXrwUSRB8jGSE7FrgcOEkptcn570yMQOxUpVQRcKrza7+xWCxYLEPv5SWEEGJkHluzn7l3vcNLG8rcx/bXtvH7t3fx3Ocl/UozhIqx7kNK6trJT472eM5sCuO6FZO57Oi8MXv+vrITIkmMMrO1XEpFBZJhR8i01muAoUL2k33bnNFraGgAIDFRon0RehwOzV8/3sc58zLJSYwa/oYg1WGzE2kx+bsZR7QPdlZz9+vbsYSHce87uzh7XiYR4SZ+8+ZOd+L5SxvLWF1Uy+mzMzh1ZjoR4cH/fzaWfUhnt52Kpk5yk4f+3b399OlDnvM1pRRzchLYWi5TloEkZCr119TUIIsGRKj6/EA9v3lrJy+sL/V3U4ZVXNc2qvu6euycfv/H/OmDPT5ukfDGXz7cS1a8lUcuX0RFUyfPritBa83i/EQuWWJsLfSz17bz+paD3PzsF5TWd9Da1cMtL2zmthc382VFcI66jGUfUlrfDjDkCJk/zMmOo6iqRRL7A0jIBGRChJq+Fblf3VQOwA5nZe5xb0t7Nzc9s5Hqls4hr9Fac+87uzjlvo/YWmZ0yp42TB7KU58eoLiu3b3KTIyvrh47j67ex+cH6rnquEmsmJrKradN5YRpaSiluPq4Sfzi/NlEWUx0dNu57OhcXr5xGQVpMe4ipq9uquAvH+7190sJOMV1RkB2qBGy8VaQFkOPQ1PR2OHvpggnCciECDBaax5cZSxLr2rupKvHzn+3VgLGRsT+sP5APW9sPcg7Xw5dyfwvH+3lwff3cNHCHGZkxtLS2c05D67hxcJS1u6rY98h6h51dtt58P09nDgtleVTUsbiJQgPunrslDs75Ife38Mv3tjB0klJfP2oCSiluPmkKUxM6R3VMYUpZjkLl541J5OFzoTwhCgLn/zvSZw3P4vVRbWHlWPWY3eEXJBwwDlqHEgjZAmRRr5c3zd+wr8kIBMiwDz+yQHufXc3ywqSSYq2sKuyha4eO0flJ1Ja30FLp2//gG4saeCM+1fzxpaDQ17j6rQ3ljR4PL+rsoU/vlvEmXMy+PWFcwg3hWHrcRAfaea2f23h64+s5eT7PuKh94s83r+nupWWzh6+snhCv+MdNplOGQu1rV38+r87WPqrVdzygrG59eXH5PHUt5fw3DVLD7kVzzGTU8hOiGTJxMEV4k+cnkZTRzebShs93tvU0c3lj61js4fzrk2zny8sZdk977O6yDfTh7WtXWworvfJY41WSX07sdZwEqM8l73wB9cWThKQBQ4JyIQIIFprnllXzFH5idz7lXmYTWHMzUmg8P9O5erjJgFw87Nf8PFu33RWOw4287W/fsaOg8089MEed6c4kCsg+6KkkbrWrn7n3vmykgv+/Akx1nDuOne2e9l+ckwET1+1hN9cNIf7vz6fk6al8dAHe9yVxvsqqnZtkhzjPnbTsxv55uPrfPI6Ra/6Nhtn3L+av63ex7LJKdx4QgEAabFWVkxNHbbswvdOnsKqW1YQbhrcfSyfkoIpTPH+To9lKfn7pwdYXVRLuKn/c/z439v47j+NwHBLqTHd/cN/bfH4s+KtW1/czNVPFVLdPPR0+1iyOzTr9tUzKTVmRCUtxku8BGQBJ2QCskmTJjFp0iR/N0OIw7LjYAv7ato4b352vz/eMRHhzHHWDvpodw2/fnOnT55vekYst58+ndtWTmPHwWa2DbHqyhWQ7a9t46hfvscjH/fmCd2/qoishEheu/lYUmMj+t0Xbgrja0flct78bG45bRqd3Q7+tbGMgYqqWgkPU+T1mdKZnBLNhuIGGtpsvnipAiPgv+s/X9LYbuOVG4/lT5ct5Pip3hXsNoUprGbPqyrjrGaWTkrizW2Vg4L71q4eHvtkPydPT2NWVny/c2ZTGG9vq6S5s9u9V6PZFEZF0+FPXf7fWTPo6LZz67+24DhETuNY9SEvbyxjV1ULVy2f6PPHPhyugKxZArKAETIBWXh4OOHhsuO9CG6vbirHFKY4Y3bGoHOZ8VYW5xk5O61dvvkj6krWvvyYPKzmMJ74ZL/H68obOohxTmM5NJw8Ix2Ag00dfFnRzMWLcoYtxzEzK44FuQk8s654UGe9p7qV/JRozH1GXU6ekY5Dwwe7PI+2CO/dv6qIVzdVcNOJBcybMDaLJ86em8X+2ja+rOgf3L+ysYzG9m5uOqlg8D3zMrHZHbz7ZRX7a9s4e24m79+yghmZcYfdnoK0WO48ayad3Xa2ljfx439vY1t506CfQV/0ISV17RzbZ7rV4dA8+P4e5k1I4Jy5mYf12L4mI2SBJ2QCsrq6Ourq6vzdDCFGbXtFM098coDTZ2eQHBMx6LxSin/dsIzvnzKFsoYOny5Xj7OauWJZPq9sKmebh2KR5Y0dnDYrnR+cOpX3fnA8k1ONqcVVO4xg6ZQZaSN6nh+unM7d583ud6y1q4c91a0UpMb0Oz4nO57U2AhWDTH9JQ7N7tC0dvW4v95a1sQf3yvi4kU5fPekKWP2vCtnZWAKU7yxtX9O4vOFpczMjGOBh0BwwYQEshMieeWLcsoa2pmUEu1xSvRQOrvt3PHyVkqcKxr7+sbRuTx3zVIO1LXxfGEpZz+4hg939Z/290UfsrGkgfLGDvf+k2FhimeuPprfXjQ3oKYrASzhYUSaTRKQBRAJyIQIEPe8tZO4SPOggGWgKWmxaA17D7FqcTRuPKGA+Ehzv7IFbV09vFhYSk1LF3lJ0Xz35CkUpMW6z7+/s5rcpCh3gDacYyYnc2xBirtzWl1Uw+yfvs2+2jYK0vo/RliY4sRpqazeXTNkbpsY2oPvF3HyvR+6v3dzcuKdOX1zR7X/4UglRVs4tiCF17dUuJ97W3kT28qb+fqSCR4DE6UUZ8/LZM2eWhwaJqb2X434lw/3sqe6t+RLu61n0BuHDcUNPPd5CU9+eoDH1+zvVw9NKYUpTHHe/GzW/+gUfnH+bJYV9N+U21cBWZTFxLT03t+RCUlRTMuIPcRd/hMfaZaALICETEAmRLDbXdnCiqmp7nfXQ3EFLnuqvQvIhgtq4iPNnDQtjXX769zXPr5mP7f9awsA2R724btgQTbfPXnKqN/9P76md4rUVU6hr3kTEmju7KGsIbTKIIw1rTUvbyynqrmL+j45eMdNScU0hsGYy9lzMymt72CLsx7drsoWEqLMnDcve8h7vtpnhW3f8hDVzZ089H4Rp/3hYx5dvY9XN5Vz/G8/4OqnCrH19JbXcK3sfGljGXe/sZ2XN5Z7fJ74KDPfWJpHRLiJdlsPVz+1nufXlwDwxCf7ufXFzaN+3RtLGpiXk+D16J6/SEAWWILjp0aIENfZbaeyuZO8ERSOzE+JwhSmvA7IHluzn+uf3nDIqc5F+YnUttrchSyvOb43yTkr3jro+nPmZXHxohyv2uFSWt/Oh7tr+M5JBfzn5uWc7iFvzpX8PTAfSRzalxXNlDirw1c0jv/qwpUzMzCbFK9vqQDgokU5rPvRycQfouzD5NQYjso3ciT71j5Li7Oy+vaTOGl6Or9+cyf/8/wmchKjeOjSBVjCe7uwL5wlWZo6uomzmvmOh1y1gSLNJvbVtvHqJqOdLR3d/HfrwUPWUdtc2tiv9IzDoWlq76bd1sOOgy0szAuewsbxkWYafbCSVfiGBGRCBADX1iojCcgiwk3kJUdRVDXygKy1q4c/f7iXNlvPkCvkABbnGbWlNhQbnZvVbOKlG45hUV7ioJVxh+vTvbWYlOKSJbnMyYn3OMo2PSOWMAXbg3Q7Hn9558tK9+flfiiyGh9l5rgpqbz9ZZV7tHUk+13etnI6Vy+fSEJU/1HipGgL931tHtkJkczOjufZa45mcX5vHTStNZtKGzljdgbZCZHcfvr0QY/hiVLGApp1++tpbLcxOyeedpud7Qc9vwGoau7kW098zg+do8ZdPXaufHI9K37/Aev212N3aHex3GAQJyNkAUWWJYqQdbCpg0/31GEJD+OceVn+bs4hubdWSRrZ1ipfWzzBvQn38+tL+MfaEl696ViPuUE/eH4TX1Y0U99m45bTph3ycaekxRBrDaewuIGLnCNfi/KSeOmGZd68nJG9hqNyOWl6+qBSGX1ZzSYmp8bICJmXiqpbSYmxUNtq81vV+x+fPZP4SLNX09lLJiZ5LDgLxsKTt79/PGaT6jcluLOymRcLy6httbGsIIW/fGORV+08Y3Ymf/pgL5/sqWXJxGSgmc/31zPXwxZet7+0hY5uu/v36M5XtvGRsybgXz7Yi1KwKC94ArL4SDPbKyQgCxQhE5AVFAw/PC2OHLWtXVzwp0+pbO4kMcoc+AGZe4RsZFurXLdisvtzq9nE1vImCosbPHZmcZFmrOYwvrUsn/nDlDoIC1MszE10T/+MtUMFYy6zsuJYt9+/ldaDTUO7jYkp0bR12f0yQgb9px19xfUmpK/iunae+vQABWkxnOBlTTUwfr5yEiPZ0RbF9xbMYsKqGgoPNHD1cf2vq2vt4sNdNXz/lCnuPM5rjpvEjMw4fvnGdj4/UM+c7PgRjcwFCskhCywhE5CFhcnsq+j1k1e30dBu49mrj2ZCn1Gnpo5uHlhVxGVH5zJphCsDx0NJXRuxEaPbWuWUGelYzWG8vqXCY0D2s3NnefV4vzh/9iFzfcbbnJwE/r2pgorGDrISjIUFLZ3dfPPxz7l4UQ6XHZ3n5xYGnsb2biYkRZGdGBly+0IOdNL0NHb94oxRL1ZQSvHklUvISYwkLCyMo/KT+GiXsbK37+jeVueqzr6/Y9MyYpmWEcsrX5Sxrbx50MrNQBcfaabNZqfb7uhXA1D4R8j8D9TU1FBT45vtZERw6+qx8/7Oai5ZksuygpR+Admv3tjBY2v2c+nf1lHWMLhekb8U17eTmxw1qtWK0RHhnDQ9bdhk5JGakBRFnDVwArJjJhmd3Gd7e0sSxESEU93cxerdtf5qVkBrbO8mMcpMVkLoB2RmU9hhrxwtSIuhpbGempoaLl2Sy0/OmYndWdW/qaObX/13h3s7qNnZg3Mpl+QbP6PLJqccVjvGW3ykMSYj1foDQ8gEZA0NDTQ0jM80iwhsX5Q00tnt4NiC/n8c1xTV8nxhKefNz6Kls5u7/rPdTy0crKSufUQJ/UO5aGEOta02nv28xIetCgzTM2JJirbwyd7e4EspxbLJyXy2r+6Q2+EcqRrabSREWchOsPptyjLYuPqQxflJnDc/252n9ss3tvPIx/v4+2fF5Cd7frNy8aIcTp+VwdFD5L8FKtdIuExbBoaQCcgCwbbyJl7d5Ln2jRg/n+6tI0zB0ZP6/3Gckh7DFcfk8ZuL5nLjiQW8u72q32o0f7r9jOl885j8Ud9/0vQ0ji1I5vdv76KutcunVfz9LSxMccykZD7bW9evltqygmSaOrqHXBF3pOqw2enqcZAQZSYrPpLaVltI/TyMpzVFtbxQWEac1RhJ8jQ6Bsa2YA9fvuiQK5gDkWyfFENZAfsAACAASURBVFgkIPOSq+ZMXxWNHVS3dPLz/2znthe3ePXHr7q5kw9kaxifWlNUw5ychEHvZNPjrNx13mysZhPfPnYiU9JiuPbpDdzjo426D8fKWRksnTT6/BOlFHedO4vWrh7ufn07J9/7UUi9OVg6OZmDTZ2U1veO9rimh9bskWnLvho7jEKwiVEW5ucmcNHCHAnIRmlaRixXHpvPE1ceBTDsophgE2UxAs0O+fkICBKQeWlfbRvzfv4O/9lc4T628o8fs+SXq/j8QD02u6Pflh2H8uneWs58YDVXPrmenZXGu3zZIubwfLq3lo0ljZw1Z3CR0b4iLSZeu3k51x0/iZkeKsSPh/UH6n063VaQFssFC3L496YKmju6mZ7hn9c1FuY7SxBsKW90H0uPszJ/QgKPrdk/6E3SkayhzfheJDprgd371XlBtfIvkKTGRvDTc2axKC+Jf990LN9YGloLSCKdI3oSsAeGYQMypdTjSqlqpdS2PsfmK6XWKqU2KaUKlVJLxraZgcO1PYdrbzKtNS2dPf2uKTzQP5etsd2GJ9srmomJMN6hrNpRTUtnN2c/uIYPdsmI2UhUN3dy7zu73BsoOxyaX76xg+yEyBFN/0VaTNxx5gzOHeeSGA6H5p43d/KVhz/zec7X/5w6haPyE3n48kUBu3/eaEzNiMFsUu6Vbi6/OH829W02fvTKVsklc3L9vYmPlCDMl+ZPSAi6KcnhuMqIdNgOfzGQOHwjKXvxJPAQ8Pc+x34L3KW1flMpdabz6xN83jovTJ06dVyeZ1NpA7ER4RQ4Syb0nXs/aXoa+2paKSxu4Drnsc2ljVz88Kd87+Qp1Ld1U1LfxrLJKXx7+USuWj6Ry47O46t//YxVO6pot/XwZUUzSfJudkRe33KQB9/fw6od1fzrhmPotmsy461cc9ykgP7D+UJhKQ9/tJdLluSOetuhoeQkRvHi9b4v4upvEeEmpmXEDtpQenZ2PLetnMY9b+4kLS6Cn5w9c9T7aoaKBudoYWJ04KyUDQbj1YcEEtcIWbutZ5grxXgYNiDTWn+slMofeBhwzYfEAxUcIb4oaWTuhHh3RXTXfnF/vXwRK2dlcMsLm/lwVzVaa7Q26mF12zW/f2c3AJNTo93FMJVSRFpMnDwjjftXFbGtvJnz5mcxb0CeQrutxz3XL3q5lvPvqW7li5JGji1I4dErjhr1tO8L60vZWt7E3efP9mUz++nqsfPAqiLmT0jgVxfMPuKDB2/MyU7gjS0Vg+pDXXf8JKqbu3j8k/0kR1u4+aQpfmyl/zW09+aQCXEorhEymbIMDKPNIfs+8DulVCnwe+COoS5USl3rnNYsHMs6YVVVVVRVVY3Z44OxemlnZUu/xE5XQOba8mbFtFSOyk+itauHtfvq2FzWxO2nTyc+0sylR+ey6pYT+PWFc/s97lcWT+CUGemcPjuDH505o9+5q59az3ee/WJMX1ewKqlvZ2p6DB//8MR+JS5GG+QcqGvj2c9LaO4cu3yk97ZXU9HUyQ9OnSrBmJfmZMfT3Nnj/p1zUUrxf2fN4IIF2by0sfyIf7fvGrV3raATIzMefUigcY2QSVJ/YBjtsMsNwP9orV9SSn0VeAw4xdOFWutHgEcAFi9ePGZJHk1NxlRGenr6WD0F2yqasDs08yf07lXm6hxcxUfPnZflzklaVpDC699ZzqysOL61LN/jth8A2QmR/O2biz2em5kZx4Mf7KGkzigcKnqV1LeTmxRFRrzVJ4+3Ymoqf/5wL3f/ZztvfVmJ1WziJ2fPHLTt0htbDmKz27lggffTjXtrjA3Bh9qvTwxtYV4CJ05LpatncL5LWJjitxfPpaVTRpMb2mxEmk0BPW0fiMajDwk0rp8RySELDKMdIbsCeNn5+YvAEZHUv925wfGcPrVoSuvbSY62uJPzB5qdHe+emhyNS4/OI0wp/rGueFT3hyqtNaX17f2q8B+uhXmJxESE8+KGMqOGU0Ik33nuC17f0jsj39lt5//+vZXfv717VM9RXNdORpxVOstRmJ4RxxNXLmFquufFCmZTGEnRMk3X4KzSL8RwTGEKS3iYjJAFiNEGZBXACufnJwFFvmlOYNtZ2UxilJn0uN4NkUvrO3waFAyUEW/l9FkZPL++lA6b/NK4NLR302azMyHRd997symMYyYbtcBuPW0a/7r+GH505nROmdH7jvm/Ww/S0N5NeWMHRVUtVDV3evUcJfVtMtIpxlSjs0q/ECMRaTbRcYRP8weKkZS9eA74DJimlCpTSl0FXAPcq5TaDPwKuHZsmzm+Pt5dw4Hatn7HbD0Oth9sYXpGXL/cnxIfj9J48s1j8mjq6O5X++xINzB3z1euOCafCxdkc/bcLMymMK49fjJWswmtNec9tIY7Xt6Kxbmlyi0vbua433zgVc5ZcV07eWP88yKObBVNnT6bxhehL8pikhGyADGSVZaXDHFqkY/bclh8lSDtcGh+8MImlk1O4YFLFgDw9GcHeGzNfqqau7hkSW6/6y9fmjfmIx5LJiYxLT2Wv63ex8pZGe79x45k7oDMx9/75VNSWD5l8AbBSilmZ8ezIDeR02dn8PVH1rKlrIkTpqW6dwSobOrkTx/s4WtHTfC4xUqHzU51S9dh7VkpxKForSmpawu6PRUDwZG6yCbSbKKjW3LIAkHIZL9OmeKbpe7bKpqobbVx4vTU3sdOj+VAnREATM/sn79yzfGTfPK8h6KU4taV07jxmQ2c9eBqnrtm6ZiPygW6fTWtKIVPpyyH88sL5rg/z0mMpKyhg/PnZ7uPWcLDeHptMRnxVo8BWW8QGT32jRVHpNpWG202uwT9o+CrPiTYWM0mSYcJELJ1kpPWmre2VfJCYSlKwfFTegOypZOSOXWmkUc0w0/b0Zw6M53nrzuGhbmJMh2BUXB3SlrMqBdLHK452fFEmk3unwuApGgL0zNiWbuvzuM9xXXGNLhMWY6Ptq7+eTF1rV0+35rM4dCcet9HPLp6n08fd7RK6p0/YxKQiRGKtJikDlmACJmA7ODBgxw8eHDU96/bX8/1/9jAP9aWMC8ngeSYiH7nf37eLG49bSqz/LTvIcDC3EQeuGQBZmcO0yd7ao/I7WK01mwqbWRBn/Ij4+3206fz5JVHET1gde3SSckUHmjA5qE0w87KFkA6y/GwakcVy3/zPnuqW93Hzrh/NXe8vNXrx3ptcwV3v77d4+/arqoWiqpb+ftnxQGxD21xnSu3UkZhvXW4fUiwMqYsJSALBCETkLW0tNDS0jLq+x/5eB+JUWYmpUTz1cUTBp3PjI/k5pOmuCv0+9uWskYue3QdX/nrZ+6K9cGq3dbjVWBZXNdOQ3s383MThr94jOSnRHP0pORBx5dOSqaj286WssZB597YcpDFeYmyAm4cuErTfO+fX2DrcVDX2kV1SxeTnVueAfTYHSNaJfvLN7bz2Jr93PPWzkHn1jlHQ0vq2/midPD/+VjZXdXCmfevpnpA+4vr2o2p/KTIcWtLqDjcPiRYWc0m2mXKMiCETEB2ON7aVsn7O6v51rKJvH/rCVx6dO7wN/nZnOx47v3KPHYebOb2l7YExLvz0frNmzs556E1dNtHllj6Ramxefv8Cf4LyIZy9MQkzCbFz1/fzp8/3MNrzpWxOw42s6uqhfPmj+9G5keqtDgrd58/my8rmvl4d417dHJGZu8I96/f3MkJv/tw2N8dhfEm7D+bK9wbd7us3VdPWmwElvAwXv2i3MevYmhvb6tk+8Fm3t1Rhb3Pm5mS+nYy46xEhEudOzEyUTJlGTCOyICsoc1GrTOf5NM9tXznuY0syE3g6uMm+rtpI6aU4qJFOdy2chqri2p5a1ulv5s0KtUtnTy3vpRZWXHuqdjhfFHSSLTFNGSBUH9KjLbwp0sXsr+mjd++tYt3txtbsfx7UznhYYqz5kpANl6OKzDyQPfXtrHjoFHUue+inKyESDq67TS2D122pK2rh8rmTv7nlKn85zvL+41uaq35/EA9x01J5eYTC1iUP34rGzeWGG9KXt98kFPv+4i3vzR+/4vrpM6d8E6kJPUHjJBZZemNP3+4h6fXFrPj56czMyuOCxfk8KOzZgzKBwoG31iax9/XFvPwR3s5Y06mv5vjtUdX76fH7uDGEwoAYxopTCk0RiHeGRlxg6aJP99fz8K8REwBMn080GmzMvj8zlTsWrt3cDh3XhZ5SdFSSX4cxUeZSYwys7+uDVuPg5SYCFL65IZmJxiLY8obO0j08P9S3dzJHudWV1PSY/rdC1BU3Up9m42jJyV5THPoq7a1a9D9I9XZbe+3s4PW2j09+tm+OsKUseoXYG5OAmlxo3secWSKlDpkASNkRshMJhMm08iG6etabSRHR6CUIiHKwm8unhu0G/GGm8L41rJ8Npc1sWkcc1iG02N3DDsMbndoXt5YxspZGeSnGEnI7+2oYvpP3mLRL97lrAfW8Lt3dvW7p6HNxs7KloCvsxRpMfXbTmtWVnxQTIWHmrzkaIrrjBGyGQNK1mTGG0HMwSbPeWSXPrqOa54qBGBS6uAkeddq2qUTB+cSFlW18Mw6I9F/TVEtx//2A97cOrqE8W88uo7rni50f72vto3G9m5OnGaMAF6+NI9ZWUbO3M/OneV+cyO8400fEkqsktQfMEImIJs8eTKTJ08e0bW1bTZSYkJnpOLChTnERITz908PuI9Vt3T6dRrzt2/vYvqP3+L+94qGzNEpPFBPbauNs+b2juxNSIriymX5nDIjnVNmpPHwR3v7lZFYf6AewGNCvRAD5SdHUVTVSlF1a7/8MTCmLAGPi2KqWzrZU91Km82OUpDvoXbcun31ZMVbByXQr91Xx4V/+ZQ7X9nGj17ZyrefWk9uUhRHOd9E7KlupWWI3R1K69v56avb3JvQ99gdbKtocrdVa82z60oAuG3ldO46dxa3nT7dm2+JGII3fUgoiTSbsPU4+uUiCv8ImYBsOJc/to5j73mff6wtpr6tK6SmjmIiwrloYTavbzlIbWsXAC+sL+X6f2xwf30o28qb+Mmr22jqGPkWQMNZU1QLwB/e280TnxzweM2b2yqJCA/jxGlp7mOzsuK548wZ/P4r83jgkgXMzIyjuqX3NXy+vx5LeBhzcwYXXhVioPyUaKpburD1OFg2uX8QnxxtwRIe5jEg23Cgwf15TmJkvynDxnYb73xZybr9dRw9KXlQhfePd9eQHmdl/oQEnvu8lOkZsfzz2qWkxETQYbNz6d/W8q0n1g+qkwZgszt46rNiNpUYo917alrp7Ha4f97ve3c3j63Zz9cWT2BGZixXLMvvNxIrhLciLUYYIKNk/hcyAVl5eTnl5Z5XORVVtbC6qJbyxg6eXVdiTFmOMp8jUF1+TD42u4Pn15cCcPxUYzpjdVHNsPf+5aO9/P2zYr7218/cZQAOp5SGw6E5UNfGFcfkcerMdH713x3uoqh9vb+zmuOmpAyZuxdlCee1m5dz7rzeRPhIi4nTZqbLKjIxIq6RrVhrOMsm998SKyxMkRVvpdxTQFbcQES4kQ5w1pz+CzG2lTdz7dMbqG21uTej7+vW06bxyo3LeOjSBdx04mT+cfXR7sUAkRYTd507i02ljfzk1S8H3ZuXFIXFFMbuKmNV6JbSJsDIDQMjF/GWU6dyz0VzjtitfsbKofqQUBZpMf7+SmK//4XMW6u2tsEdvsu/N5VjClOcOiOddfvraOuykxxCU5YABWkxLC9I4f2d1dx0YgGzs+JJirbw8e5aLliQM+R93XYHH++qYUFuAt12B6YwRWl9O6f+4SNOn5XBT8+Z5THh+VDKGztot9mZnhnHTScWsPy3H/CXD/dyz0Vz3dfUtHRRUt/O5UvzDvlYAxP3bzltmldtEUc2VxHeU2emYwkf/P4zKyHSYw5ZYXED83IS+Nm5swadW5iXwKs3HUt9m83jvqdhYYpYq5lYq5nbVg6eTjxjTibnba/iw13VaK37BVbhpjAmpUazu6qFX76xnTe2HCQ2IpyJzsBySnosUwJwdXEoOFQfEsoinaO/UvrC/0JmhGwoWmte3VTBsQUpzMmJp6G9G5vdQXIITVm63Pe1eTx/7VLA6BSWF6SwuqjmkEVX1++vp6Wrh+tXTOa1m5aTEhNBamwE1x43iTe2HuSsB1a7SwaMlKvm07SMWNLirHz9qAm8tLGs30iEa9n+wrzAqyUmQsf0jDiW5CcNGfhnJURS0dhBj93BM+uK6ey20213sLemlYV5nneCiLKEM29CAidOTxtxqZaBFucnUddmc++R29e0jFg+2VvH31bvp6Kpk9S4iIApSC1CjysgkylL/wv5gKyrx8HZc7O47OhcshJ694BMjg6tKUuAtFgr4X06iBVTU6lttbG1vMnj9Z/uqeWHL23BEh7GcVNS3H/0rWYTPzhtGi/fcCwd3Xb++N5ur9rhmm5x1Qm7fsVkzp6bhdYah0Nz7zu7eGVjOWaTcq8OE2IsRFpMvHD9MSzI9RxcZSVEUtXcydNri7nzlW18tLsGsymMjT8+lRtPHLsE78X5Rns2FDcMOjc1Pda99dbxU1O5/vgjL9FcjB93DplMWfpdyExZDsVqNvG/ZxjTBn1X64XalKUnJ01PI0zBu9urmOehqv2fP9xLV4+DRy5fRJRl8I/CnJx4TpyWxsdFNYOmVg5lV2ULOYmR7mTjrIRI/vC1+YCRm/bMuhLq22zkJkX1S5YWYrwtnZjEAxru+s92Fuclcppzs3izKWzUo18jUZAaQ5w1nA3F9Vy8qH9KwZQ0Y3uneRMS+Pu3l4xZG4QA3H+DZfsk/wuZETKz2YzZfOhaYlnxvcvTR1ukMZgkRls4Kj+Jt76s5IOd1fQM2JqorKGdJROTOKHPKseBFuUnUttqc29aPBL5yVGsnJXh8VxWQiRPX2V0Ml9ZNHRumxDjYVlBCrefPp2I8DDuPGvGuCXKh4UpFuYlUnhg8AiZqzzHqTOG/r0UvjeSPiQUSQ5Z4AiZEbKJE4ff9ig9PgKlQGtCquzFoZw2K4O7X9/OlU+u53cXz+UrzoriDoemorGTlbM9B04ui/OM2kkbihvcxVs9+XBXNUsmJhFlCecHwyTez8qKp+iXZ2CSVWIiANxwwmSuPDZ/3EdrF+cl8uGuGprau4mP6g0EJiRF8dS3l7BkHLdiEiPrQ0JRrNX42fNl2SMxOiEzQjYSEeEm98jYkRKQXbQwm8uX5hFrDXcXVQWoae3CZneQk3jofe+mpMUQaw3nXxvK2FPd6vGaz/fXc9VThdz3zshzzcymMElUFgHDH1PnrkUDrgUufa2YmkqkRabzxdjLiDdyq4fasUKMn5AJyEpLSyktLXV/7UqKHSgr3kpsRPgRk7uUEGXh7vNnsyQ/icI+CcRlDcYUZE5C5FC3AsbUyjXHTWL9gXqu/XvhoKr7HTY7Nz27kdykKL57yhTfvwAhQtT8CQmYwhSFxfXDXyzG3MA+5EgRExFOrDWcyqbR154UvjFsQKaUelwpVa2U2jbg+HeUUruUUl8qpX47dk0cmY6ODjo6jB+oPdUtLP/N+/2S+F3yU6LJ7LPa8kixKD+RfTVt1LfZAChrML5Xrk2JD+W7J0/hsztO5r6vzR+UY7Otoomali7uOGM6cdYjL/9CiNGKsoQzKyvOYx6ZGH99+5AjTVZ8JBUyQuZ3IxkhexI4ve8BpdSJwHnAXK31LOD3vm/a6Git+elrX9LZbafAuVqprzvPmsHD31jkh5b5lysXbKNzlMwVkGWPICADSI2NYL6HlZquGmVzZCsjIby2vCCFzw/U8/Hu4XfUEGKsZMRbqRwQkN3wjw1c8fjnfmrRkWnYgExr/TEwcEz9BuAerXWX85rqMWjbqHywq5pP9tRx68ppHldSpsVamZQ6OFALdXNz4omPNLv3hSxr6CA52uKx3IU3tlc0kxhlJiPuyBt1FOJw3XxSAVPTYvneP7+gullGKIR/ZCVYOdhnyrLb7uDNbZV8JG8UxtVoe+OpwHFKqV8CncCtWuv1ni5USl0LXAuQm5s7yqcbuX9+XkpKTASXLhn75womVrOJL358qjuRvryxY8SjY56U1LWTmxzFjoPNzMiMk331hBiFKEs4D1++iDe3HTwiSvGIwJQRF0ltq42uHjsR4SbW7+8dg/GmBqU4PKNN6g8HEoGlwG3AC2qI/zGt9SNa68Va68WpqamjfLrhRURE0GFXfLCrmvPnZ/WrWC8MfVc1TkyO4phJgzdGHoknPtnPKX/4iKKqFnZWtjDTWTdJCOG9iSnR3HhCgaw69rOIiAgiIo7MoNiVV13VZMygrNrZO+kl5TDGz2ijljLgZW34HHAAg3fZHUd5eXl8UR9Ot11zkRQcHdZd583mjjNnjOres+ZmYg0P41tPrKerx+EuZCmEEMEqLy+PvDzPe56Gukxn6YsK57Rl36nKGmeaixh7ow3I/g2cBKCUmgpYgFpfNWq0lk9J5Y4zpkuAMMbSYq387NxZlDd2cNrMdM6Yc+jiskIIIQJXpnMXG1di/0s3LOOeC+cAEpCNp2FzyJRSzwEnAClKqTLgp8DjwOPOUhg24Ao9sEDVOCsuLsYMXLdCNuIdDxcuzOHUmenuKs9CCBHMiouLAY7IUbLMeCu5Sb1FwuMjzSx27hRR0yoB2XgZNiDTWl8yxKlv+Lgth6WrS35oxpsEY0KIUHEk9yHREeF8/MMT+x1LjTXy6WSEbPxI5rsQQggh+omzhmMJD5OAbBxJQCaEEEKIfpRSpMZESEA2jiQgE0IIIcQgqbERkkM2jg6vTHsAiYwcfZFTIYQQRzbpQwZLjY2gtL7d3804YoRMQDZhwgR/N0EIIUSQkj5ksMx4K2v31uFwaClcPA5kylIIIYQQg8zNSaClq4ei6lZ/N+WIEDIB2f79+9m/f7+/myGEECIISR8y2OK8RAA2FDf4uSVHhpAJyLq7u+nulj23hBBCeE/6kMHykqNIjrZQWFw//MXisIVMQCaEEEII31FKsSgvUUbIxokEZEIIIYTwaGZWHMV17XTbHf5uSsiTgEwIIYQQHsVEGMUYOrrtfm5J6AuZshfR0dH+boIQQoggJX2IZ5EWEwDtXXbiZP/iMRUyAVl2dra/myCEECJISR/iWZQrILP1+LkloU+mLIUQQgjhUaTZGLdpt8mU5VgLmYBs79697N2719/NEEIIEYSkD/EsOsIYIZMcsrEXMlOWdrv8sAghhBgd6UM8652ylO/PWAuZETIhhBBC+JZryrJDcsjGnARkQgghhPBIRsjGjwRkQgghhPBIArLxM2xAppR6XClVrZTa5uHcrUoprZRKGZvmjVxsbCyxsbH+boYQQoggJH2IZ646ZB19AjKtNd997gs+2FXtr2aFpJGMkD0JnD7woFJqAnAqUOLjNo1KZmYmmZmZ/m6GEEKIICR9iGdRlsFlL5o6unltcwVXPrEeW49sqeQrwwZkWuuPAU9bvf8B+CGgfd0oIYQQQvifKUxhCQ+jvbs3qb+yudP9+Usby/zRrJA0qhwypdS5QLnWevMIrr1WKVWolCqsqakZzdONSFFREUVFRWP2+EIIIUKX9CFDi7KY+k1ZVjV3uT/fVNLojyaFJK8DMqVUFHAn8JORXK+1fkRrvVhrvTg1NdXbpxsxrTVay2CdEEII70kfMrQos6nflGVVkzFCFqagq0eS/X1lNCNkk4GJwGal1AEgB9iolMrwZcOEEEII4X+RA0bIXFOWuUlRdHZLDpmveF2pX2u9FUhzfe0MyhZrrWt92C4hhBBCBIDoiHDa+hSGrWruJDHKTKzVLCNkPjSSshfPAZ8B05RSZUqpq8a+WUIIIYQIBJEDpyybO0mPs2I1h8kImQ8NO0Kmtb5kmPP5PmvNYYiPj/d3E4QQQgQp6UOGFmUxUdtqc39d1dxFRryVHrvuN3ImDk/IbC6enp7u7yYIIYQIUtKHDC3KEk67rd39dWVzJzMz46hr66K+TUbIfEW2ThJCCCHEkPom9XfbHdS2dpEebyUi3ESn5JD5TMgEZLt372b37t3+boYQQoggJH3I0KIsJtq7jcCrtrULrSE9LoIIcxhdkkPmMyEzZSmEEEII34u09Cb1J0ZZ+Nf1xzAhKYpt5c2yytKHJCATQgghxJCizOHYehzYHRqr2cTi/CQArDJC5lMhM2UphBBCCN+LspgAaB+wolJyyHxLAjIhhBBCDCnSGZD1rdYPxghZt11jd8iWU74QMlOWiYmJ/m6CEEKIICV9yNCOn5LKXy5bSKzV3O94RLgRqHX12ImyhEw44Tch8x0cy43LhRBChDbpQ4aWmxxFbnLUoONWszHJ1tXtIMoy3q0KPSEzZelwOHA4JLlQCCGE96QP8Z7VbIyQSR6Zb4RMQLZnzx727Nnj72YIIYQIQtKHeC8ivHeETBy+kAnIhBBCCDF+ZITMtyQgE0IIIYTXZITMtyQgE0IIIYTX3CNk3TJC5gsSkAkhhBDCa+4Rsh4ZIfOFkCl7kZyc7O8mCCGECFLSh3hPRsh8SwIyIYQQRzzpQ7znGiF7eWM5rV09XLgwx88tCm4hM2XZ09NDT0/P8BcKIYQQA0gf4j3XCNlbX1byzLoSP7cm+IVMQLZv3z727dvn72YIIYQIQtKHeM81QgaQGW/1Y0tCw7ABmVLqcaVUtVJqW59jv1NK7VRKbVFKvaKUShjbZgohhBAikEQ4R8gAshIi/diS0DCSEbIngdMHHHsXmK21ngvsBu7wcbuEEEIIEcBkhMy3hg3ItNYfA/UDjr2jtXZNtq8FJJNPCCGEOIL0D8i8HyGra+3ilS/KfNmkoOaLHLJvA28OdVIpda1SqlApVVhTU+ODpxNCCCGEvyml3J9nJXg/QvbP9aX8z/ObaWiz+bJZQeuwyl4ope4EeoBnhrpGa/0I8AjA4sWL9eE836GkpqaO1UMLIYQIcdKHHJ6MUUxZ3ao0pgAAEdZJREFUFte1AdDS2UNitMXXTQo6ow7IlFJXAGcDJ2utxyzQGqnExER/N0EIIUSQkj7k8KRER3h9T2l9BwCtXVJuBEYZkCmlTgduB1Zordt926TRsdmMIU+LRaJsIYQQ3pE+5PCEhanhLxqgtMEIH9psEpDByMpePAd8BkxTSpUppa4CHgJigXeVUpuUUg+PcTuHdeDAAQ4cOODvZgghhAhC0oeMr267g4NNnQC0dkpABiMYIdNaX+Lh8GNj0BYhhBBCBJG7zp1FQpTZ6/sONnZidxjZTjJlaQiZvSyFEEIIMb6uWJY/qvtc05UgAZlLyGydJIQQQojgUFrfG5C1SUAGSEAmhBBCiHFW3tiBax1Ai+SQASE0ZZmenu7vJgghhAhS0oeMr7YuO1GWcBxaywiZU8gEZPHx8f5ughBCiCAlfcj46rY7MJsU4SaT5JA5hUxA1tlpLJ+1WmWDUyGEEN6RPmR89TgcmE1hxESES0DmFDI5ZCUlJZSUlPi7GUIIIYKQ9CHjy9ajMZvCiJaAzC1kAjIhhBBCBIduuwNLuDFCJjlkBgnIhBBCCDGuXDlk0RHhssrSSQIyIYQQQowrIyALI9YaLntZOklAJoQQQgif2VfTygV//oSmju4hr7HZXTlkJtnL0ilkVllmZGT4uwlCCCGClPQhvrOhuIEvShoprmtjbk6Cx2u6exxYTGHERJhp67KPcwsDU8gEZHFxcf5ughBCiCAlfYjvNLTbAOiwDR1oddsdRJjDiIkwYbM76OqxExFuGq8mBqSQmbJsb2+nvb19+AuFEEKIAaQP8Z2GdmOqsqP70AGZq+wFIKNkhFBAVlZWRllZmb+bIYQQIghJH+I7DW3GCFnnIQIyVw5ZjDMgkzyyEArIhBBCCOF/9c6AbLgRMospjLQ4K9MzYnFoPV7NC1ghk0MmhBBCCP/rzSFzDHmNqw7ZiqmprJiaOl5NC2gyQiaEEEIInxlRDlmPg3CThCB9yXdDCCGEED7jTQ6Z6DXslKVS6nHgbKBaaz3beSwJeB7IBw4AX9VaN4xdM4eXlZXlz6cXQggRxKQP8Q2HQ4+47IXFpMarWUFhJOHpk8DpA479L7BKaz0FWOX82q9iYmKIiYnxdzOEEEIEIelDfKO5sxuHMz9/JGUvRK9hvxta64+B+gGHzwOecn7+FHC+j9vltdbWVlpbW/3dDCGEEEFI+hDfcOWPwQgCsnAJyPoa7XcjXWt9EMD5MW2oC5VS1yqlCpVShTU1NaN8uuFVVFRQUVExZo8vhBAidEkf4huukhcAnUNMWWqt6ZYcskHG/LuhtX5Ea71Ya704NVWWtgohhBChqqFPQDbUCFm33ZjTlByy/kYbkFUppTIBnB+rfdckIYQQQgSjemdCf1K05RABmVGfTEbI+hvtd+M14Arn51cAr/qmOUIIIYQIVhHhYUxOjSYrwTrkKksJyDwb9ruhlHoO+AyYppQqU0pdBdwDnKqUKgJOdX4thBBCiCPYefOzWXXLCaTERAxZh8zmCsgkqb+fYeuQaa0vGeLUyT5uy2HJycnxdxOEEEIEKelDfCvSbKJCcsi8EjJ7WUZFRfm7CUIIIYKU9CG+FWk2DZ1D1iNTlp6EzHejubmZ5uZmfzdDCCFEEJI+xLesFtOQm4tLDplnIfPdqKyspLKy0t/NEEIIEYSkD/GtSLNpyBwy15TlwICsvs3Gj17Zymd768a8fYEoZKYshRBCCBEYXFOWWmuU6p8r5hohs4T3Px5lMfH65grau3o4ZnLyuLU1UITMCJkQQgghAkOkxYTdod2jYX0NNWVpNZs4Z14Wb31ZSUtn96D7Qp0EZEIIIYTwKavZBHiu1m87RA7ZhQtz6Ox28Oa2I2/6WAIyIYQQQvhUpDMg85RHNlQOGcDC3AQSosxsKm0c2wYGoJAJyHJzc8nNzfV3M4QQQgQh6UN8K9JihBeeqvW7yl5YPARkSinSYiOobeka8rGrmzu55JG1FFW1+Ki1gSFkkvqtVqu/myCEECJISR/iW5GHmLJ055CFey4MmxwdQW2r54Cssd3GBX/+lMZ2GzUtXUxJj/VRi/0vZEbImpqaaGpq8nczhBBCBCHpQ3xrtDlkACmxEdS12Tye21DcQHljBw9csoBlBSk+am1gCJkRsqqqKgDi4+P93BIhhBDBRvoQ33KPkHmasnRvnTREQBZjGXLKsrHdWH05OTXGF80MKCEzQiaEEEKIwBAdYYz3tHb1DDo3XKX+lJgI2mx2j8FcU4cRkCVEmX3V1IAhAZkQQgghfCo+0giYXAFUX70BmeccstSYCACPeWSNzseLtUpAJoQQQghxSPHOEaxmDwGZzbnKMnzIHDIL/9/evcfIVZZxHP8+u7Pb7tJuu912aUupZSn3iojlEgJEgYRComjEiEElSGL4gwBGEiHGQExIpBLB+IeGgFAjogkQY2IES6GCcpFSLrau0AsFSku73S5tl9J2t/v4x3mnc3Y6u93dnplzZub3SSYzOXPmnPf8dnbeZ97zzgxAT4mCbPenA7RNztHYULqYq2YqyERERCRRU5pzNNhII2RHmkMWRshKzCP7eO+BQ8VeramZSf0LFixIuwkiIlKl1Ickq6HBaGtpmtApy0MFWf/hn7Tc9ekA01uaE2xpdtTMCFlzczPNzbX5RxIRkfJSH5K8aaEg+2DnXvYPFiboDxwcwowRTzt2TIn+DiPNIcvPT6s1NVOQ9fX10dfXl3YzRESkCqkPSd60liZ29O/noqXP8euVGw4tP3BwiKbGBsxKF2STco20Tc7RW6Ig2/XpgE5ZZl1PTw8A7e3tKbdERESqjfqQ5E1raaJ7a/TzRnOntRxaPjDoI84fy5s7vYWNOz45bPmuvRohK8nMfmBma81sjZk9Zmb67QkRERGhLYyQAcyeVigPBg4OjTh/LO/8rg5e3bRz2KlOdw9zyFSQDWNmxwE3A4vdfRHQCFyTVMNERESkesVHsuZOLy7IRi8/Llw4k30DQ7z2XuE08icHDjI45DX5pbBw9HPIckCLmeWAVmDL0TdJREREql28IJsdO2V5YPDIBdl5XTNobDD+uW7HoWX5T2zqlGURd/8QuBd4H9gK7HL3vyfVMBEREale+cJp6uQcUyYVpqxv3bWPzrZJoz526uQmvjC/nWe6t+EefW/Zx3sPhO3W5qdhj+aUZTtwFXACMBc4xsy+XWK975vZKjNblZ80WQ5dXV10dXWVbfsiIlK71IckL1+QzZk2fHr5hp7+Mf04+JfPmss72/pZu2U3oBGy0VwGvOvuPe4+ADwJXFC8krs/4O6L3X3xrFmzjmJ3o8vlcuRyNfOhURERqSD1IckrFGSF05W79w2wfc/+sRVkZ86hubGBJ1ZvBqJPWEJt/rA4HF1B9j5wvpm1WvRlIpcC3ck0a/x6e3vp7e1Na/ciIlLF1IckL1+QxSf0b+yJvsrixFnHHPHx01ubuez0Tp5a8xFDQ46ZMa+9hfbW2jxlOeG3A+7+ipk9DqwGBoHXgQeSath45f+ROjo60mqCiIhUKfUhycsXZLPbCiNkG7b3A3Bi55FHyADuuOI0pk7O0dBgLFk0myWLZiff0Iw4qvFZd78TuDOhtoiIiEiN6GybRK7BWBgrvjb09JNrMObPaB3TNo4f43q1QCfMRUREJHGdUyfz7A+/yLz22AhZTz+f6Wg94tde1CMVZCIiIlIW8zuGj3CdMXcaJx87NaXWZJsKMhEREamImy89Ke0mZFbNFGQLFy5MuwkiIlKl1IdI2mqmIGto0PloERGZGPUhkraaeQb29PRQzl8CEBGR2qU+RNJWMwVZX18ffX19R15RRESkiPoQSVvNFGQiIiIi1UoFmYiIiEjKVJCJiIiIpEwFmYiIiEjKzN0rtzOzHuC9Mu5iJrCjjNuvBsqgQFkUKIvhlEeBsihQFhHlUHCKu1fkpwUq+j1k7j6rnNs3s1Xuvric+8g6ZVCgLAqUxXDKo0BZFCiLiHIoMLNVldqXTlmKiIiIpEwFmYiIiEjKaq0geyDtBmSAMihQFgXKYjjlUaAsCpRFRDkUVCyLik7qFxEREZHD1doImYiIiEjVUUEmIiIikrJUCzIzO97MnjOzbjNba2a3hOUzzGy5ma0L1+1h+alm9pKZ7Tez24q2dYuZrQnbuXWUfS4xs7fNbL2Z3R5bflNY5mY2s1zHXKI9WcrgITN708zeMrPHzWxKuY57hHZlKYtHzOxdM3sjXM4q13GP0K4sZfFCLIctZvbnch33KG3LUh6XmNnqsI1lZlbRrw9KKYvfmtl2M1tTtPwb4bFDZlbxr0mYQBbXhte3t8zsRTP7XGxbJf/eJfZ5XdjuOjO7Lrb8bjP7wMz6y3nMI7QpSzk8ZVE/stbMfmNmjeU89hLtylIWK8Pj86+fnaM23t1TuwBzgLPD7anAO8DpwFLg9rD8duCecLsTOAe4G7gttp1FwBqglei71Z4BTiqxv0ZgA9AFNANvAqeH+z4PLAA2ATPrNIO22Hq/yO+/TrN4BLha/xuHrfcE8N16zYPoTewHwMlhvZ8CN9RyFmHdi4GzgTVFy08DTgFWAour4HlxAdAebl8BvDLO5/8MYGO4bg+389s7P7Snv85zaAvXRvR6cU0dZzGu/4tUR8jcfau7rw639wDdwHHAVcCysNoy4Kthne3u/iowULSp04CX3X2vuw8C/wC+VmKX5wLr3X2jux8A/hj2hbu/7u6bkjy+schYBrsBzMyAFqCin/jIUhZpy2IWZjYVuASo+AhZhvLoAPa7+zthveXA1xM6zDFJIQvc/XlgZ4nl3e7+9tEf1cRMIIsX3b0vLH8ZmBduj/W14HJgubvvDNtZDiwJ237Z3bcmfYxjkbEcdod1ckSFTNb7kbJlMV6ZmUNmZguIRqleAY7NP7HD9ejDfNG7vIvNrMPMWoErgeNLrHcc0bvbvM1hWSZkIQMzexj4CDgV+NWEDiQBWcgCuDsMY99nZpMmdCAJyEgWEHXWK2IvuKlIOY8dQFPs9NzVIzy+IiqURVWYQBY3AH8Lt8faN2S6D4Fs5GBmTwPbgT3A4xM4jERkIQvg4XC68idhsGNEmSjILJqr9ARw60Re7N29G7iHqDJ9imhocbDUrko9fLz7K4esZODu1wNzid5VfHO87UhCRrK4g6goPYdoKPpH421HEjKSRd63gMfG24YkpZ2HuztwDXCfmf2bqMMp9fiyq2AWmTfeLMzsS0Sdb/7/eqx9Q2b7EMhODu5+OdGpw0lEo+oVl5EsrnX3zwIXhct3RmtD6gWZmTURhfaouz8ZFm8zsznh/jlElfao3P0hdz/b3S8mGlpfFyb35SfT3UhUucbfAc4DtiR5PBORtQzc/SDwJyp8Kgayk0UY9nZ33w88TDR8XVFZySLsq4Mog78mcWwTkZU83P0ld7/I3c8FngfWJXWMY1XhLDJtvFmY2ZnAg8BV7t4bFpf8e5vZebEsvjLSeuU4rvHKWg7uvg/4CylMA8lKFu7+YbjeA/yBI/UjXuHJh/ELUWX5O+D+ouU/Z/jku6VF999FbHJqWNYZrucD/yNMqitaJ0c04e4ECpP0zihaZxOVndSfiQxCOxbG2nQvcG+9Ph+AObE23Q/8rF6zCPffCCyrZAZZzSP2+EnACuCSWs4itu4Ciib1x+5bSTqT+seVRTjO9cAFY/17F603A3iXaPJ2e7g9o2idNCb1ZyIHYAqF184c0Rv7m+o0ixyhlgCaiE7d3jhq2yv9xCk6kAuJhvbeAt4IlyuJJs6uIHrnuSL/hAdmE1Wju4GPw+38JzpeAP4bQrt0lH1eSfSpiw3Aj2PLbw7bGySqbh+spwyIRkv/BfyHaG7Jo8Q+dVlPWYTlz8ay+D0wpV6zCPetBJZUMoOs5kH0wt4NvE10OqQesngM2Er0wYDNhE+WEs0r3AzsB7YBT2c8iweBvti6q8by/C/a5/eIOvD1wPWx5UtDFkPh+q56ywE4Fng1tGMt0TzkXD0+J4BjgNdiWfwSaByt7frpJBEREZGUpT6HTERERKTeqSATERERSZkKMhEREZGUqSATERERSZkKMhEREZGUqSATERERSZkKMhEREZGU/R9n3poF+F+f0wAAAABJRU5ErkJggg==\n", 120 | "text/plain": [ 121 | "
" 122 | ] 123 | }, 124 | "metadata": { 125 | "needs_background": "light" 126 | }, 127 | "output_type": "display_data" 128 | } 129 | ], 130 | "source": [ 131 | "plt.figure(figsize=(10,4))\n", 132 | "plt.plot(priceData)\n", 133 | "for year in range(priceData.index[0].year, priceData.index[-1].year+1):\n", 134 | " plt.axvline(datetime(year,1,1), color='k', linestyle='--', alpha=0.2)\n", 135 | "plt.title(\"%s Price Data\"%tickerSymbol, fontsize=20)" 136 | ] 137 | }, 138 | { 139 | "cell_type": "markdown", 140 | "metadata": {}, 141 | "source": [ 142 | "## Basic Buying Protocol:\n", 143 | "\n", 144 | "### - Buy if stock increasing for $b$ consecutive days" 145 | ] 146 | }, 147 | { 148 | "cell_type": "markdown", 149 | "metadata": {}, 150 | "source": [ 151 | "## Basic Selling Protocols:\n", 152 | "\n", 153 | "### - Sell if stock decreasing for $s$ consecutive days (and we've made a profit)" 154 | ] 155 | }, 156 | { 157 | "cell_type": "code", 158 | "execution_count": 94, 159 | "metadata": {}, 160 | "outputs": [], 161 | "source": [ 162 | "def get_buying_selling_days(price_data, b, s):\n", 163 | " \n", 164 | " #get the percent change day after day\n", 165 | " pct_change = price_data.pct_change()[1:]\n", 166 | " \n", 167 | " #this function checks the buying condition\n", 168 | " def buying_condition(sub_series):\n", 169 | " return (sub_series > 0).all()\n", 170 | " \n", 171 | " #this function checks the selling condition\n", 172 | " def selling_condition(sub_series):\n", 173 | " return (sub_series < 0).all()\n", 174 | " \n", 175 | " #get all buying days in the data\n", 176 | " buying_days = pct_change.rolling(b).apply(buying_condition)\n", 177 | " \n", 178 | " #get all potential selling days in the data\n", 179 | " potential_selling_days = pct_change.rolling(s).apply(selling_condition)\n", 180 | " \n", 181 | " #return a dictionary\n", 182 | " return {'buying_days': buying_days, 'potential_selling_days': potential_selling_days}" 183 | ] 184 | }, 185 | { 186 | "cell_type": "code", 187 | "execution_count": 105, 188 | "metadata": {}, 189 | "outputs": [], 190 | "source": [ 191 | "info_dict = get_buying_selling_days(priceData, 4, 1)" 192 | ] 193 | }, 194 | { 195 | "cell_type": "code", 196 | "execution_count": 106, 197 | "metadata": {}, 198 | "outputs": [], 199 | "source": [ 200 | "buying_days = info_dict['buying_days']\n", 201 | "potential_selling_days = info_dict['potential_selling_days']" 202 | ] 203 | }, 204 | { 205 | "cell_type": "code", 206 | "execution_count": 107, 207 | "metadata": {}, 208 | "outputs": [], 209 | "source": [ 210 | "#create dataframe to store information\n", 211 | "df_stocks = pd.DataFrame(index = buying_days.index)" 212 | ] 213 | }, 214 | { 215 | "cell_type": "code", 216 | "execution_count": 108, 217 | "metadata": {}, 218 | "outputs": [], 219 | "source": [ 220 | "#populate df with buying days, possible selling days, and price\n", 221 | "df_stocks['buying_day'] = (buying_days == 1)\n", 222 | "df_stocks['potential_selling_day'] = (potential_selling_days == 1)\n", 223 | "df_stocks['price'] = priceData\n", 224 | "\n", 225 | "#only keep days that are buying or possible selling days\n", 226 | "df_stocks = df_stocks[(df_stocks.buying_day | df_stocks.potential_selling_day)]" 227 | ] 228 | }, 229 | { 230 | "cell_type": "code", 231 | "execution_count": 109, 232 | "metadata": {}, 233 | "outputs": [ 234 | { 235 | "data": { 236 | "text/html": [ 237 | "
\n", 238 | "\n", 251 | "\n", 252 | " \n", 253 | " \n", 254 | " \n", 255 | " \n", 256 | " \n", 257 | " \n", 258 | " \n", 259 | " \n", 260 | " \n", 261 | " \n", 262 | " \n", 263 | " \n", 264 | " \n", 265 | " \n", 266 | " \n", 267 | " \n", 268 | " \n", 269 | " \n", 270 | " \n", 271 | " \n", 272 | " \n", 273 | " \n", 274 | " \n", 275 | " \n", 276 | " \n", 277 | " \n", 278 | " \n", 279 | " \n", 280 | " \n", 281 | " \n", 282 | " \n", 283 | " \n", 284 | " \n", 285 | " \n", 286 | " \n", 287 | " \n", 288 | " \n", 289 | " \n", 290 | " \n", 291 | " \n", 292 | " \n", 293 | " \n", 294 | " \n", 295 | " \n", 296 | " \n", 297 | " \n", 298 | "
buying_daypotential_selling_dayprice
Date
2019-01-09FalseTrue16.84
2019-01-10FalseTrue16.16
2019-01-17FalseTrue17.32
2019-01-22FalseTrue17.56
2019-01-23FalseTrue17.42
\n", 299 | "
" 300 | ], 301 | "text/plain": [ 302 | " buying_day potential_selling_day price\n", 303 | "Date \n", 304 | "2019-01-09 False True 16.84\n", 305 | "2019-01-10 False True 16.16\n", 306 | "2019-01-17 False True 17.32\n", 307 | "2019-01-22 False True 17.56\n", 308 | "2019-01-23 False True 17.42" 309 | ] 310 | }, 311 | "execution_count": 109, 312 | "metadata": {}, 313 | "output_type": "execute_result" 314 | } 315 | ], 316 | "source": [ 317 | "df_stocks.head()" 318 | ] 319 | }, 320 | { 321 | "cell_type": "code", 322 | "execution_count": 110, 323 | "metadata": {}, 324 | "outputs": [], 325 | "source": [ 326 | "def check_cumulative_percent_change(price_data, buy_date, potential_sell_date):\n", 327 | " \"\"\"\n", 328 | " This helper function will check if the cumulative percent change\n", 329 | " between a buying and potential selling day yields overall growth\n", 330 | " \"\"\"\n", 331 | " \n", 332 | " #get the percent change day after day\n", 333 | " pct_change = price_data.pct_change()[1:]\n", 334 | " \n", 335 | " sub_series = 1 + pct_change[buy_date + timedelta(hours=1): potential_sell_date]\n", 336 | "\n", 337 | " return sub_series.product() > 1" 338 | ] 339 | }, 340 | { 341 | "cell_type": "code", 342 | "execution_count": 111, 343 | "metadata": {}, 344 | "outputs": [], 345 | "source": [ 346 | "def get_investing_result(df_stocks, starting_funds, verbose=False):\n", 347 | " \n", 348 | " #get a copy of price data\n", 349 | " price_data = df_stocks.price\n", 350 | " \n", 351 | " #at start, not holding any shares\n", 352 | " holding = False\n", 353 | " \n", 354 | " #init vars\n", 355 | " current_funds = starting_funds\n", 356 | " current_shares = 0\n", 357 | " last_buy_date = None\n", 358 | " \n", 359 | " #init dict of buying and selling dates\n", 360 | " events_list = []\n", 361 | " \n", 362 | " #for each buying day and potential selling day...\n", 363 | " for date,data in df_stocks.iterrows():\n", 364 | " \n", 365 | " #if not currently holding shares, and this is a buying day...\n", 366 | " if (not holding) and data.buying_day:\n", 367 | " \n", 368 | " #calculate the number of shares we can buy\n", 369 | " num_shares_to_buy = int(current_funds / data.price)\n", 370 | " \n", 371 | " #update number of shares\n", 372 | " current_shares += num_shares_to_buy\n", 373 | " \n", 374 | " #decrease current funds\n", 375 | " current_funds -= num_shares_to_buy * data.price\n", 376 | " \n", 377 | " #set last buy date\n", 378 | " last_buy_date = date\n", 379 | " events_list.append(('b', date))\n", 380 | " \n", 381 | " #we are now holding shares\n", 382 | " holding = True\n", 383 | " \n", 384 | " if verbose:\n", 385 | " print('Bought %s shares at $%s on %s totaling $%s'%(num_shares_to_buy, data.price, date.date(), round(num_shares_to_buy*data.price,2)))\n", 386 | " \n", 387 | " #if you are holding shares, and this is a potential selling day...\n", 388 | " elif holding and data.potential_selling_day:\n", 389 | " \n", 390 | " #check to make sure we're making a profit\n", 391 | " if check_cumulative_percent_change(price_data, last_buy_date, date):\n", 392 | " #add to our current funds\n", 393 | " current_funds += current_shares * data.price\n", 394 | " \n", 395 | " if verbose:\n", 396 | " print('Sold %s shares at $%s on %s totaling $%s'%(current_shares, data.price, date.date(), round(num_shares_to_buy*data.price,2)))\n", 397 | " print('--------------------------------------')\n", 398 | " \n", 399 | " #reset current shares\n", 400 | " current_shares = 0\n", 401 | " \n", 402 | " #we are no longer holding shares\n", 403 | " holding = False\n", 404 | " \n", 405 | " events_list.append(('s', date))\n", 406 | " \n", 407 | " #get the stock price at the end of the time span\n", 408 | " final_stock_price = price_data[-1]\n", 409 | " \n", 410 | " #get the final total value of all assets (funds + stock value)\n", 411 | " final_value = current_funds + final_stock_price * current_shares\n", 412 | " \n", 413 | " #return the percent change in value\n", 414 | " return round((final_value - starting_funds) / starting_funds,2), events_list" 415 | ] 416 | }, 417 | { 418 | "cell_type": "code", 419 | "execution_count": 112, 420 | "metadata": {}, 421 | "outputs": [ 422 | { 423 | "name": "stdout", 424 | "output_type": "stream", 425 | "text": [ 426 | "Bought 535 shares at $18.66 on 2019-05-02 totaling $9983.1\n", 427 | "Sold 535 shares at $19.38 on 2019-06-17 totaling $10368.3\n", 428 | "--------------------------------------\n", 429 | "Bought 532 shares at $19.49 on 2019-07-26 totaling $10368.68\n", 430 | "Sold 532 shares at $19.56 on 2019-11-08 totaling $10405.92\n", 431 | "--------------------------------------\n", 432 | "Bought 493 shares at $21.1 on 2020-01-24 totaling $10402.3\n", 433 | "Sold 493 shares at $21.19 on 2020-02-18 totaling $10446.67\n", 434 | "--------------------------------------\n" 435 | ] 436 | } 437 | ], 438 | "source": [ 439 | "percent_change, events_list = get_investing_result(df_stocks, 10000, True)" 440 | ] 441 | }, 442 | { 443 | "cell_type": "code", 444 | "execution_count": 113, 445 | "metadata": {}, 446 | "outputs": [ 447 | { 448 | "name": "stdout", 449 | "output_type": "stream", 450 | "text": [ 451 | "0.05\n" 452 | ] 453 | } 454 | ], 455 | "source": [ 456 | "print(percent_change)" 457 | ] 458 | }, 459 | { 460 | "cell_type": "code", 461 | "execution_count": 114, 462 | "metadata": {}, 463 | "outputs": [ 464 | { 465 | "data": { 466 | "text/plain": [ 467 | "(7, 22)" 468 | ] 469 | }, 470 | "execution_count": 114, 471 | "metadata": {}, 472 | "output_type": "execute_result" 473 | }, 474 | { 475 | "data": { 476 | "image/png": "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\n", 477 | "text/plain": [ 478 | "
" 479 | ] 480 | }, 481 | "metadata": { 482 | "needs_background": "light" 483 | }, 484 | "output_type": "display_data" 485 | } 486 | ], 487 | "source": [ 488 | "plt.figure(figsize=(10,4))\n", 489 | "plt.plot(priceData)\n", 490 | "\n", 491 | "y_lims = (int(priceData.min()*.95), int(priceData.max()*1.05))\n", 492 | "shaded_y_lims = int(priceData.min()*.5), int(priceData.max()*1.5)\n", 493 | "\n", 494 | "for idx, event in enumerate(events_list):\n", 495 | " color = 'red' if event[0] == 'b' else 'blue'\n", 496 | " plt.axvline(event[1], color=color, linestyle='--', alpha=0.4)\n", 497 | " if event[0] == 's':\n", 498 | " plt.fill_betweenx(range(*shaded_y_lims), \n", 499 | " event[1], events_list[idx-1][1], color='k', alpha=0.1)\n", 500 | "\n", 501 | "plt.title(\"%s Price Data\"%tickerSymbol, fontsize=20)\n", 502 | "plt.ylim(*y_lims)" 503 | ] 504 | }, 505 | { 506 | "cell_type": "code", 507 | "execution_count": null, 508 | "metadata": {}, 509 | "outputs": [], 510 | "source": [] 511 | }, 512 | { 513 | "cell_type": "code", 514 | "execution_count": null, 515 | "metadata": {}, 516 | "outputs": [], 517 | "source": [] 518 | } 519 | ], 520 | "metadata": { 521 | "kernelspec": { 522 | "display_name": "Python 3", 523 | "language": "python", 524 | "name": "python3" 525 | }, 526 | "language_info": { 527 | "codemirror_mode": { 528 | "name": "ipython", 529 | "version": 3 530 | }, 531 | "file_extension": ".py", 532 | "mimetype": "text/x-python", 533 | "name": "python", 534 | "nbconvert_exporter": "python", 535 | "pygments_lexer": "ipython3", 536 | "version": "3.7.4" 537 | } 538 | }, 539 | "nbformat": 4, 540 | "nbformat_minor": 2 541 | } 542 | -------------------------------------------------------------------------------- /catfish.csv: -------------------------------------------------------------------------------- 1 | Date,Total 2 | 1986-1-01,9034 3 | 1986-2-01,9596 4 | 1986-3-01,10558 5 | 1986-4-01,9002 6 | 1986-5-01,9239 7 | 1986-6-01,8951 8 | 1986-7-01,9668 9 | 1986-8-01,10188 10 | 1986-9-01,9896 11 | 1986-10-01,10649 12 | 1986-11-01,8917 13 | 1986-12-01,8196 14 | 1987-1-01,10768 15 | 1987-2-01,12220 16 | 1987-3-01,14463 17 | 1987-4-01,12944 18 | 1987-5-01,11001 19 | 1987-6-01,11000 20 | 1987-7-01,11876 21 | 1987-8-01,13021 22 | 1987-9-01,13494 23 | 1987-10-01,14041 24 | 1987-11-01,11312 25 | 1987-12-01,10362 26 | 1988-1-01,12533 27 | 1988-2-01,14343 28 | 1988-3-01,14676 29 | 1988-4-01,12253 30 | 1988-5-01,11840 31 | 1988-6-01,12018 32 | 1988-7-01,11819 33 | 1988-8-01,12453 34 | 1988-9-01,12309 35 | 1988-10-01,13005 36 | 1988-11-01,11815 37 | 1988-12-01,10496 38 | 1989-1-01,13996 39 | 1989-2-01,15158 40 | 1989-3-01,15587 41 | 1989-4-01,14615 42 | 1989-5-01,14792 43 | 1989-6-01,14373 44 | 1989-7-01,14573 45 | 1989-8-01,14385 46 | 1989-9-01,15607 47 | 1989-10-01,15978 48 | 1989-11-01,14436 49 | 1989-12-01,12794 50 | 1990-1-01,15771 51 | 1990-2-01,16476 52 | 1990-3-01,16420 53 | 1990-4-01,15444 54 | 1990-5-01,16118 55 | 1990-6-01,15158 56 | 1990-7-01,15214 57 | 1990-8-01,16257 58 | 1990-9-01,15287 59 | 1990-10-01,15212 60 | 1990-11-01,13488 61 | 1990-12-01,12300 62 | 1991-1-01,15794 63 | 1991-2-01,17113 64 | 1991-3-01,17536 65 | 1991-4-01,15914 66 | 1991-5-01,16716 67 | 1991-6-01,15983 68 | 1991-7-01,16878 69 | 1991-8-01,17893 70 | 1991-9-01,16697 71 | 1991-10-01,18546 72 | 1991-11-01,15486 73 | 1991-12-01,15253 74 | 1992-1-01,18698 75 | 1992-2-01,21100 76 | 1992-3-01,22425 77 | 1992-4-01,19923 78 | 1992-5-01,19454 79 | 1992-6-01,18874 80 | 1992-7-01,19676 81 | 1992-8-01,19559 82 | 1992-9-01,19500 83 | 1992-10-01,19615 84 | 1992-11-01,16814 85 | 1992-12-01,15698 86 | 1993-1-01,20273 87 | 1993-2-01,20774 88 | 1993-3-01,21309 89 | 1993-4-01,19377 90 | 1993-5-01,19211 91 | 1993-6-01,19103 92 | 1993-7-01,20086 93 | 1993-8-01,19758 94 | 1993-9-01,19162 95 | 1993-10-01,19371 96 | 1993-11-01,17709 97 | 1993-12-01,17342 98 | 1994-1-01,18772 99 | 1994-2-01,19363 100 | 1994-3-01,20001 101 | 1994-4-01,17112 102 | 1994-5-01,18027 103 | 1994-6-01,17173 104 | 1994-7-01,18024 105 | 1994-8-01,18983 106 | 1994-9-01,17983 107 | 1994-10-01,19151 108 | 1994-11-01,16427 109 | 1994-12-01,15461 110 | 1995-1-01,19191 111 | 1995-2-01,20008 112 | 1995-3-01,21702 113 | 1995-4-01,18649 114 | 1995-5-01,19169 115 | 1995-6-01,18631 116 | 1995-7-01,18157 117 | 1995-8-01,20187 118 | 1995-9-01,18660 119 | 1995-10-01,19920 120 | 1995-11-01,16680 121 | 1995-12-01,16018 122 | 1996-1-01,20322 123 | 1996-2-01,20613 124 | 1996-3-01,22704 125 | 1996-4-01,20276 126 | 1996-5-01,20669 127 | 1996-6-01,18074 128 | 1996-7-01,18719 129 | 1996-8-01,20217 130 | 1996-9-01,19642 131 | 1996-10-01,20842 132 | 1996-11-01,18204 133 | 1996-12-01,16898 134 | 1997-1-01,20746 135 | 1997-2-01,23058 136 | 1997-3-01,24624 137 | 1997-4-01,22154 138 | 1997-5-01,22444 139 | 1997-6-01,21471 140 | 1997-7-01,21866 141 | 1997-8-01,22548 142 | 1997-9-01,21518 143 | 1997-10-01,23408 144 | 1997-11-01,19645 145 | 1997-12-01,18278 146 | 1998-1-01,23576 147 | 1998-2-01,26650 148 | 1998-3-01,26207 149 | 1998-4-01,23195 150 | 1998-5-01,22960 151 | 1998-6-01,23002 152 | 1998-7-01,22973 153 | 1998-8-01,24089 154 | 1998-9-01,22805 155 | 1998-10-01,23241 156 | 1998-11-01,21581 157 | 1998-12-01,21119 158 | 1999-1-01,23107 159 | 1999-2-01,25780 160 | 1999-3-01,28544 161 | 1999-4-01,23488 162 | 1999-5-01,23964 163 | 1999-6-01,23720 164 | 1999-7-01,25069 165 | 1999-8-01,24618 166 | 1999-9-01,24430 167 | 1999-10-01,25229 168 | 1999-11-01,22344 169 | 1999-12-01,22372 170 | 2000-1-01,25412 171 | 2000-2-01,25354 172 | 2000-3-01,29161 173 | 2000-4-01,24924 174 | 2000-5-01,24763 175 | 2000-6-01,25342 176 | 2000-7-01,24911 177 | 2000-8-01,25847 178 | 2000-9-01,23743 179 | 2000-10-01,25036 180 | 2000-11-01,21911 181 | 2000-12-01,20752 182 | 2001-1-01,24507 183 | 2001-2-01,25968 184 | 2001-3-01,28752 185 | 2001-4-01,25167 186 | 2001-5-01,24728 187 | 2001-6-01,23690 188 | 2001-7-01,24816 189 | 2001-8-01,26004 190 | 2001-9-01,24210 191 | 2001-10-01,25083 192 | 2001-11-01,21807 193 | 2001-12-01,21635 194 | 2002-1-01,27173 195 | 2002-2-01,29308 196 | 2002-3-01,28645 197 | 2002-4-01,25023 198 | 2002-5-01,27261 199 | 2002-6-01,24670 200 | 2002-7-01,26441 201 | 2002-8-01,27961 202 | 2002-9-01,26498 203 | 2002-10-01,27800 204 | 2002-11-01,23939 205 | 2002-12-01,22930 206 | 2003-1-01,27584 207 | 2003-2-01,27586 208 | 2003-3-01,30485 209 | 2003-4-01,26135 210 | 2003-5-01,27370 211 | 2003-6-01,25487 212 | 2003-7-01,26427 213 | 2003-8-01,27672 214 | 2003-9-01,26853 215 | 2003-10-01,27875 216 | 2003-11-01,23416 217 | 2003-12-01,22482 218 | 2004-1-01,27140 219 | 2004-2-01,28526 220 | 2004-3-01,28845 221 | 2004-4-01,25033 222 | 2004-5-01,24764 223 | 2004-6-01,24896 224 | 2004-7-01,24623 225 | 2004-8-01,26538 226 | 2004-9-01,24674 227 | 2004-10-01,25863 228 | 2004-11-01,23156 229 | 2004-12-01,22721 230 | 2005-1-01,26204 231 | 2005-2-01,26526 232 | 2005-3-01,27473 233 | 2005-4-01,24536 234 | 2005-5-01,25764 235 | 2005-6-01,25154 236 | 2005-7-01,23729 237 | 2005-8-01,25336 238 | 2005-9-01,24649 239 | 2005-10-01,25904 240 | 2005-11-01,22868 241 | 2005-12-01,21825 242 | 2006-1-01,26955 243 | 2006-2-01,27349 244 | 2006-3-01,29367 245 | 2006-4-01,24071 246 | 2006-5-01,23173 247 | 2006-6-01,21740 248 | 2006-7-01,22056 249 | 2006-8-01,23923 250 | 2006-9-01,22189 251 | 2006-10-01,22458 252 | 2006-11-01,19476 253 | 2006-12-01,21056 254 | 2007-1-01,22842 255 | 2007-2-01,22943 256 | 2007-3-01,23445 257 | 2007-4-01,19176 258 | 2007-5-01,22058 259 | 2007-6-01,19451 260 | 2007-7-01,20378 261 | 2007-8-01,21778 262 | 2007-9-01,20431 263 | 2007-10-01,22486 264 | 2007-11-01,18889 265 | 2007-12-01,18574 266 | 2008-1-01,24658 267 | 2008-2-01,24997 268 | 2008-3-01,23987 269 | 2008-4-01,21199 270 | 2008-5-01,21205 271 | 2008-6-01,21553 272 | 2008-7-01,21166 273 | 2008-8-01,20720 274 | 2008-9-01,18067 275 | 2008-10-01,21121 276 | 2008-11-01,16617 277 | 2008-12-01,15917 278 | 2009-1-01,19262 279 | 2009-2-01,20658 280 | 2009-3-01,22660 281 | 2009-4-01,20147 282 | 2009-5-01,18818 283 | 2009-6-01,19017 284 | 2009-7-01,19451 285 | 2009-8-01,18502 286 | 2009-9-01,18893 287 | 2009-10-01,19480 288 | 2009-11-01,15743 289 | 2009-12-01,16554 290 | 2010-1-01,19465 291 | 2010-2-01,22617 292 | 2010-3-01,22438 293 | 2010-4-01,18511 294 | 2010-5-01,19142 295 | 2010-6-01,19063 296 | 2010-7-01,18006 297 | 2010-8-01,20386 298 | 2010-9-01,20280 299 | 2010-10-01,18894 300 | 2010-11-01,15941 301 | 2010-12-01,16851 302 | 2011-1-01,18204 303 | 2011-2-01,15564 304 | 2011-3-01,17984 305 | 2011-4-01,13979 306 | 2011-5-01,12591 307 | 2011-6-01,12408 308 | 2011-7-01,12779 309 | 2011-8-01,14233 310 | 2011-9-01,13410 311 | 2011-10-01,12893 312 | 2011-11-01,11843 313 | 2011-12-01,11321 314 | 2012-1-01,13427 315 | 2012-2-01,14447 316 | 2012-3-01,14717 317 | 2012-4-01,11998 318 | 2012-5-01,13379 319 | 2012-6-01,12463 320 | 2012-7-01,13276 321 | 2012-8-01,14442 322 | 2012-9-01,13422 323 | 2012-10-01,13795 324 | 2012-11-01,13352 325 | 2012-12-01,12716 326 | -------------------------------------------------------------------------------- /ice_cream.csv: -------------------------------------------------------------------------------- 1 | DATE,IPN31152N 2 | 1972-01-01,59.9622 3 | 1972-02-01,67.0605 4 | 1972-03-01,74.2350 5 | 1972-04-01,78.1120 6 | 1972-05-01,84.7636 7 | 1972-06-01,100.5960 8 | 1972-07-01,100.1263 9 | 1972-08-01,96.3607 10 | 1972-09-01,85.8007 11 | 1972-10-01,70.3934 12 | 1972-11-01,60.8072 13 | 1972-12-01,58.6598 14 | 1973-01-01,61.0996 15 | 1973-02-01,72.2062 16 | 1973-03-01,80.0984 17 | 1973-04-01,83.9059 18 | 1973-05-01,87.3712 19 | 1973-06-01,109.7467 20 | 1973-07-01,107.3748 21 | 1973-08-01,99.6631 22 | 1973-09-01,91.6272 23 | 1973-10-01,75.3049 24 | 1973-11-01,65.9342 25 | 1973-12-01,61.5304 26 | 1974-01-01,62.9796 27 | 1974-02-01,75.3447 28 | 1974-03-01,84.2683 29 | 1974-04-01,84.5883 30 | 1974-05-01,90.5395 31 | 1974-06-01,109.9025 32 | 1974-07-01,103.8903 33 | 1974-08-01,101.0265 34 | 1974-09-01,89.4762 35 | 1974-10-01,73.6952 36 | 1974-11-01,66.1573 37 | 1974-12-01,61.0653 38 | 1975-01-01,64.2659 39 | 1975-02-01,75.4174 40 | 1975-03-01,85.1690 41 | 1975-04-01,85.0917 42 | 1975-05-01,97.3552 43 | 1975-06-01,113.5254 44 | 1975-07-01,108.1455 45 | 1975-08-01,104.8251 46 | 1975-09-01,90.1157 47 | 1975-10-01,75.7187 48 | 1975-11-01,70.2168 49 | 1975-12-01,62.7436 50 | 1976-01-01,61.9418 51 | 1976-02-01,74.0597 52 | 1976-03-01,86.9646 53 | 1976-04-01,90.1310 54 | 1976-05-01,94.1542 55 | 1976-06-01,110.0257 56 | 1976-07-01,107.4617 57 | 1976-08-01,103.8183 58 | 1976-09-01,92.2380 59 | 1976-10-01,75.1034 60 | 1976-11-01,67.5320 61 | 1976-12-01,62.4830 62 | 1977-01-01,63.7684 63 | 1977-02-01,75.0613 64 | 1977-03-01,90.0211 65 | 1977-04-01,92.6645 66 | 1977-05-01,99.1200 67 | 1977-06-01,114.7230 68 | 1977-07-01,112.3297 69 | 1977-08-01,106.4137 70 | 1977-09-01,91.7217 71 | 1977-10-01,76.0245 72 | 1977-11-01,67.3937 73 | 1977-12-01,61.4415 74 | 1978-01-01,61.8880 75 | 1978-02-01,72.8712 76 | 1978-03-01,83.9315 77 | 1978-04-01,89.0592 78 | 1978-05-01,92.4522 79 | 1978-06-01,111.3258 80 | 1978-07-01,106.9251 81 | 1978-08-01,103.6909 82 | 1978-09-01,90.6197 83 | 1978-10-01,79.1839 84 | 1978-11-01,67.8849 85 | 1978-12-01,62.4032 86 | 1979-01-01,63.0121 87 | 1979-02-01,73.9406 88 | 1979-03-01,86.4275 89 | 1979-04-01,91.2026 90 | 1979-05-01,94.7007 91 | 1979-06-01,110.1034 92 | 1979-07-01,107.1544 93 | 1979-08-01,106.7727 94 | 1979-09-01,95.3163 95 | 1979-10-01,79.5977 96 | 1979-11-01,67.8927 97 | 1979-12-01,63.2850 98 | 1980-01-01,66.9827 99 | 1980-02-01,76.4441 100 | 1980-03-01,85.8896 101 | 1980-04-01,87.9979 102 | 1980-05-01,92.1732 103 | 1980-06-01,108.4666 104 | 1980-07-01,107.8745 105 | 1980-08-01,107.8574 106 | 1980-09-01,90.6691 107 | 1980-10-01,76.2283 108 | 1980-11-01,66.4869 109 | 1980-12-01,63.8654 110 | 1981-01-01,60.5596 111 | 1981-02-01,76.4854 112 | 1981-03-01,86.6148 113 | 1981-04-01,89.0339 114 | 1981-05-01,93.6984 115 | 1981-06-01,110.6836 116 | 1981-07-01,110.7837 117 | 1981-08-01,106.1196 118 | 1981-09-01,91.4711 119 | 1981-10-01,76.9246 120 | 1981-11-01,71.0281 121 | 1981-12-01,66.5992 122 | 1982-01-01,62.0754 123 | 1982-02-01,77.0295 124 | 1982-03-01,88.5032 125 | 1982-04-01,86.2440 126 | 1982-05-01,93.3385 127 | 1982-06-01,106.9338 128 | 1982-07-01,101.1462 129 | 1982-08-01,98.2014 130 | 1982-09-01,86.1862 131 | 1982-10-01,72.0738 132 | 1982-11-01,66.0278 133 | 1982-12-01,61.4690 134 | 1983-01-01,63.5263 135 | 1983-02-01,74.3646 136 | 1983-03-01,86.6512 137 | 1983-04-01,83.5305 138 | 1983-05-01,94.3514 139 | 1983-06-01,110.2263 140 | 1983-07-01,107.5508 141 | 1983-08-01,105.2968 142 | 1983-09-01,95.8909 143 | 1983-10-01,79.0648 144 | 1983-11-01,70.3554 145 | 1983-12-01,65.5867 146 | 1984-01-01,67.0011 147 | 1984-02-01,85.6144 148 | 1984-03-01,96.7755 149 | 1984-04-01,101.8245 150 | 1984-05-01,108.3343 151 | 1984-06-01,128.8405 152 | 1984-07-01,125.1273 153 | 1984-08-01,116.6079 154 | 1984-09-01,106.8885 155 | 1984-10-01,88.2627 156 | 1984-11-01,80.3855 157 | 1984-12-01,73.9740 158 | 1985-01-01,76.1736 159 | 1985-02-01,86.6116 160 | 1985-03-01,101.2354 161 | 1985-04-01,104.8666 162 | 1985-05-01,114.3180 163 | 1985-06-01,130.5975 164 | 1985-07-01,124.5167 165 | 1985-08-01,117.4459 166 | 1985-09-01,104.0654 167 | 1985-10-01,86.2262 168 | 1985-11-01,74.6592 169 | 1985-12-01,70.6329 170 | 1986-01-01,73.6820 171 | 1986-02-01,88.9355 172 | 1986-03-01,100.0295 173 | 1986-04-01,104.3014 174 | 1986-05-01,113.2964 175 | 1986-06-01,127.3228 176 | 1986-07-01,121.3230 177 | 1986-08-01,119.0790 178 | 1986-09-01,96.8704 179 | 1986-10-01,86.4120 180 | 1986-11-01,76.9717 181 | 1986-12-01,70.6204 182 | 1987-01-01,73.9480 183 | 1987-02-01,94.5373 184 | 1987-03-01,103.6022 185 | 1987-04-01,106.8190 186 | 1987-05-01,116.8105 187 | 1987-06-01,132.0080 188 | 1987-07-01,127.4044 189 | 1987-08-01,123.6748 190 | 1987-09-01,106.7224 191 | 1987-10-01,89.4039 192 | 1987-11-01,84.6298 193 | 1987-12-01,79.7024 194 | 1988-01-01,79.9002 195 | 1988-02-01,98.0175 196 | 1988-03-01,115.0920 197 | 1988-04-01,119.3721 198 | 1988-05-01,130.0414 199 | 1988-06-01,150.9298 200 | 1988-07-01,145.4406 201 | 1988-08-01,140.7433 202 | 1988-09-01,117.3826 203 | 1988-10-01,100.0984 204 | 1988-11-01,87.7763 205 | 1988-12-01,83.0951 206 | 1989-01-01,87.6177 207 | 1989-02-01,104.3502 208 | 1989-03-01,115.4340 209 | 1989-04-01,121.1818 210 | 1989-05-01,126.1014 211 | 1989-06-01,140.4695 212 | 1989-07-01,135.0524 213 | 1989-08-01,128.2777 214 | 1989-09-01,110.4963 215 | 1989-10-01,97.4270 216 | 1989-11-01,90.7381 217 | 1989-12-01,86.0141 218 | 1990-01-01,82.5291 219 | 1990-02-01,103.7776 220 | 1990-03-01,117.2887 221 | 1990-04-01,121.9508 222 | 1990-05-01,126.5316 223 | 1990-06-01,141.2775 224 | 1990-07-01,143.6218 225 | 1990-08-01,129.0701 226 | 1990-09-01,114.4056 227 | 1990-10-01,98.3530 228 | 1990-11-01,87.9189 229 | 1990-12-01,85.7338 230 | 1991-01-01,85.2665 231 | 1991-02-01,104.8588 232 | 1991-03-01,118.1119 233 | 1991-04-01,123.0359 234 | 1991-05-01,127.9323 235 | 1991-06-01,157.4896 236 | 1991-07-01,140.6807 237 | 1991-08-01,135.6808 238 | 1991-09-01,120.9914 239 | 1991-10-01,103.7686 240 | 1991-11-01,91.8820 241 | 1991-12-01,89.0019 242 | 1992-01-01,90.2244 243 | 1992-02-01,110.4098 244 | 1992-03-01,131.4666 245 | 1992-04-01,135.2148 246 | 1992-05-01,142.7928 247 | 1992-06-01,158.2887 248 | 1992-07-01,147.0626 249 | 1992-08-01,143.9345 250 | 1992-09-01,127.0568 251 | 1992-10-01,109.5147 252 | 1992-11-01,99.3276 253 | 1992-12-01,92.9703 254 | 1993-01-01,95.3665 255 | 1993-02-01,123.4377 256 | 1993-03-01,133.6159 257 | 1993-04-01,140.7597 258 | 1993-05-01,150.5615 259 | 1993-06-01,165.0825 260 | 1993-07-01,159.3991 261 | 1993-08-01,152.2206 262 | 1993-09-01,128.2921 263 | 1993-10-01,109.5646 264 | 1993-11-01,96.3109 265 | 1993-12-01,90.5080 266 | 1994-01-01,99.4781 267 | 1994-02-01,119.7060 268 | 1994-03-01,134.2504 269 | 1994-04-01,141.2588 270 | 1994-05-01,144.7913 271 | 1994-06-01,159.2280 272 | 1994-07-01,155.8514 273 | 1994-08-01,143.5421 274 | 1994-09-01,121.3149 275 | 1994-10-01,109.9283 276 | 1994-11-01,102.0735 277 | 1994-12-01,94.1296 278 | 1995-01-01,104.9496 279 | 1995-02-01,122.5914 280 | 1995-03-01,138.8764 281 | 1995-04-01,150.0524 282 | 1995-05-01,148.7095 283 | 1995-06-01,174.4632 284 | 1995-07-01,173.0159 285 | 1995-08-01,164.7302 286 | 1995-09-01,137.9415 287 | 1995-10-01,127.0089 288 | 1995-11-01,108.0761 289 | 1995-12-01,95.7693 290 | 1996-01-01,108.7666 291 | 1996-02-01,129.4163 292 | 1996-03-01,145.4127 293 | 1996-04-01,151.9554 294 | 1996-05-01,156.9814 295 | 1996-06-01,184.1093 296 | 1996-07-01,169.3725 297 | 1996-08-01,152.8792 298 | 1996-09-01,136.2178 299 | 1996-10-01,113.1833 300 | 1996-11-01,97.4190 301 | 1996-12-01,94.4327 302 | 1997-01-01,103.5788 303 | 1997-02-01,127.1437 304 | 1997-03-01,138.0852 305 | 1997-04-01,137.5455 306 | 1997-05-01,141.6972 307 | 1997-06-01,158.4195 308 | 1997-07-01,146.3529 309 | 1997-08-01,137.5518 310 | 1997-09-01,116.5002 311 | 1997-10-01,105.4953 312 | 1997-11-01,94.5096 313 | 1997-12-01,83.5459 314 | 1998-01-01,96.5701 315 | 1998-02-01,118.2285 316 | 1998-03-01,129.3521 317 | 1998-04-01,134.3474 318 | 1998-05-01,140.5265 319 | 1998-06-01,149.2407 320 | 1998-07-01,139.2554 321 | 1998-08-01,129.8794 322 | 1998-09-01,114.7175 323 | 1998-10-01,96.5840 324 | 1998-11-01,82.2537 325 | 1998-12-01,78.6816 326 | 1999-01-01,86.3952 327 | 1999-02-01,100.6297 328 | 1999-03-01,106.4133 329 | 1999-04-01,112.6711 330 | 1999-05-01,116.2802 331 | 1999-06-01,128.8553 332 | 1999-07-01,122.1347 333 | 1999-08-01,119.6529 334 | 1999-09-01,103.5391 335 | 1999-10-01,92.1367 336 | 1999-11-01,84.3381 337 | 1999-12-01,79.5262 338 | 2000-01-01,93.3510 339 | 2000-02-01,111.2944 340 | 2000-03-01,125.0698 341 | 2000-04-01,136.5341 342 | 2000-05-01,135.6032 343 | 2000-06-01,150.1199 344 | 2000-07-01,145.4325 345 | 2000-08-01,131.8293 346 | 2000-09-01,117.1805 347 | 2000-10-01,113.7341 348 | 2000-11-01,92.6327 349 | 2000-12-01,88.5149 350 | 2001-01-01,101.3750 351 | 2001-02-01,115.9745 352 | 2001-03-01,122.6815 353 | 2001-04-01,134.3882 354 | 2001-05-01,131.9872 355 | 2001-06-01,148.4196 356 | 2001-07-01,141.4769 357 | 2001-08-01,134.7753 358 | 2001-09-01,128.6196 359 | 2001-10-01,115.1136 360 | 2001-11-01,105.0913 361 | 2001-12-01,104.6018 362 | 2002-01-01,120.9601 363 | 2002-02-01,143.6813 364 | 2002-03-01,155.2061 365 | 2002-04-01,169.2145 366 | 2002-05-01,165.2011 367 | 2002-06-01,188.8447 368 | 2002-07-01,173.2341 369 | 2002-08-01,163.2352 370 | 2002-09-01,150.6134 371 | 2002-10-01,136.7560 372 | 2002-11-01,114.5562 373 | 2002-12-01,105.6179 374 | 2003-01-01,125.2497 375 | 2003-02-01,142.3906 376 | 2003-03-01,144.6613 377 | 2003-04-01,151.4035 378 | 2003-05-01,147.3393 379 | 2003-06-01,162.8491 380 | 2003-07-01,146.1043 381 | 2003-08-01,141.1325 382 | 2003-09-01,126.7308 383 | 2003-10-01,115.8376 384 | 2003-11-01,106.6816 385 | 2003-12-01,93.5263 386 | 2004-01-01,104.1156 387 | 2004-02-01,126.0228 388 | 2004-03-01,140.4459 389 | 2004-04-01,148.6412 390 | 2004-05-01,150.4552 391 | 2004-06-01,169.0362 392 | 2004-07-01,157.2643 393 | 2004-08-01,153.5255 394 | 2004-09-01,144.4268 395 | 2004-10-01,139.5258 396 | 2004-11-01,120.5195 397 | 2004-12-01,111.2821 398 | 2005-01-01,130.2719 399 | 2005-02-01,148.1976 400 | 2005-03-01,159.2750 401 | 2005-04-01,171.8314 402 | 2005-05-01,169.9522 403 | 2005-06-01,196.1737 404 | 2005-07-01,190.2501 405 | 2005-08-01,179.2849 406 | 2005-09-01,153.7389 407 | 2005-10-01,144.2127 408 | 2005-11-01,122.2164 409 | 2005-12-01,106.9509 410 | 2006-01-01,130.8295 411 | 2006-02-01,144.3001 412 | 2006-03-01,156.3691 413 | 2006-04-01,167.7272 414 | 2006-05-01,159.9362 415 | 2006-06-01,182.6261 416 | 2006-07-01,176.0375 417 | 2006-08-01,164.2845 418 | 2006-09-01,146.4184 419 | 2006-10-01,127.9182 420 | 2006-11-01,111.0826 421 | 2006-12-01,102.3068 422 | 2007-01-01,126.2649 423 | 2007-02-01,139.0987 424 | 2007-03-01,153.0866 425 | 2007-04-01,169.9811 426 | 2007-05-01,167.3083 427 | 2007-06-01,180.0874 428 | 2007-07-01,167.2158 429 | 2007-08-01,149.2237 430 | 2007-09-01,141.9697 431 | 2007-10-01,126.3227 432 | 2007-11-01,104.0224 433 | 2007-12-01,99.4948 434 | 2008-01-01,107.9956 435 | 2008-02-01,124.8185 436 | 2008-03-01,139.8023 437 | 2008-04-01,141.8197 438 | 2008-05-01,143.6774 439 | 2008-06-01,169.4044 440 | 2008-07-01,145.0205 441 | 2008-08-01,139.7905 442 | 2008-09-01,124.0207 443 | 2008-10-01,108.9576 444 | 2008-11-01,102.4460 445 | 2008-12-01,83.7946 446 | 2009-01-01,94.1914 447 | 2009-02-01,115.2161 448 | 2009-03-01,129.6325 449 | 2009-04-01,133.0755 450 | 2009-05-01,137.9925 451 | 2009-06-01,150.3558 452 | 2009-07-01,134.4829 453 | 2009-08-01,132.5304 454 | 2009-09-01,119.4439 455 | 2009-10-01,106.7741 456 | 2009-11-01,87.8541 457 | 2009-12-01,77.7939 458 | 2010-01-01,91.2895 459 | 2010-02-01,110.4994 460 | 2010-03-01,127.0971 461 | 2010-04-01,132.6468 462 | 2010-05-01,134.5576 463 | 2010-06-01,143.9519 464 | 2010-07-01,128.8566 465 | 2010-08-01,125.5563 466 | 2010-09-01,116.0686 467 | 2010-10-01,97.7520 468 | 2010-11-01,81.0871 469 | 2010-12-01,72.7801 470 | 2011-01-01,92.6110 471 | 2011-02-01,106.1656 472 | 2011-03-01,114.2484 473 | 2011-04-01,116.6234 474 | 2011-05-01,116.1365 475 | 2011-06-01,120.7737 476 | 2011-07-01,116.2615 477 | 2011-08-01,115.0031 478 | 2011-09-01,101.7561 479 | 2011-10-01,91.1014 480 | 2011-11-01,76.5099 481 | 2011-12-01,71.4595 482 | 2012-01-01,85.3987 483 | 2012-02-01,99.5615 484 | 2012-03-01,112.4868 485 | 2012-04-01,114.8111 486 | 2012-05-01,114.5660 487 | 2012-06-01,124.3428 488 | 2012-07-01,112.3270 489 | 2012-08-01,107.6430 490 | 2012-09-01,96.3700 491 | 2012-10-01,88.8864 492 | 2012-11-01,74.8375 493 | 2012-12-01,68.7691 494 | 2013-01-01,78.1175 495 | 2013-02-01,98.0341 496 | 2013-03-01,107.8837 497 | 2013-04-01,107.9098 498 | 2013-05-01,110.9130 499 | 2013-06-01,128.6909 500 | 2013-07-01,112.3692 501 | 2013-08-01,106.0546 502 | 2013-09-01,98.1912 503 | 2013-10-01,90.9982 504 | 2013-11-01,80.0694 505 | 2013-12-01,67.8031 506 | 2014-01-01,86.3975 507 | 2014-02-01,101.7308 508 | 2014-03-01,113.7756 509 | 2014-04-01,119.3533 510 | 2014-05-01,116.6308 511 | 2014-06-01,131.0397 512 | 2014-07-01,117.2721 513 | 2014-08-01,111.4180 514 | 2014-09-01,100.6174 515 | 2014-10-01,91.2615 516 | 2014-11-01,86.5723 517 | 2014-12-01,75.3749 518 | 2015-01-01,85.5769 519 | 2015-02-01,100.5580 520 | 2015-03-01,109.5789 521 | 2015-04-01,108.3617 522 | 2015-05-01,106.0577 523 | 2015-06-01,116.1377 524 | 2015-07-01,108.3776 525 | 2015-08-01,112.2052 526 | 2015-09-01,100.3483 527 | 2015-10-01,93.9317 528 | 2015-11-01,85.8640 529 | 2015-12-01,76.9749 530 | 2016-01-01,92.8105 531 | 2016-02-01,101.9743 532 | 2016-03-01,116.1793 533 | 2016-04-01,124.2106 534 | 2016-05-01,121.5435 535 | 2016-06-01,132.9865 536 | 2016-07-01,124.8514 537 | 2016-08-01,121.3321 538 | 2016-09-01,108.0359 539 | 2016-10-01,101.3836 540 | 2016-11-01,86.6647 541 | 2016-12-01,81.2569 542 | 2017-01-01,94.2454 543 | 2017-02-01,112.3879 544 | 2017-03-01,119.6982 545 | 2017-04-01,123.2282 546 | 2017-05-01,116.0635 547 | 2017-06-01,123.0870 548 | 2017-07-01,116.2639 549 | 2017-08-01,113.1717 550 | 2017-09-01,97.9125 551 | 2017-10-01,90.4732 552 | 2017-11-01,77.4378 553 | 2017-12-01,75.8118 554 | 2018-01-01,83.4343 555 | 2018-02-01,99.4899 556 | 2018-03-01,107.3152 557 | 2018-04-01,112.4309 558 | 2018-05-01,110.3544 559 | 2018-06-01,124.5841 560 | 2018-07-01,117.2215 561 | 2018-08-01,112.6779 562 | 2018-09-01,103.3118 563 | 2018-10-01,92.1321 564 | 2018-11-01,82.4347 565 | 2018-12-01,76.7608 566 | 2019-01-01,86.9988 567 | 2019-02-01,98.1116 568 | 2019-03-01,116.1718 569 | 2019-04-01,114.9703 570 | 2019-05-01,114.5613 571 | 2019-06-01,124.9605 572 | 2019-07-01,110.2632 573 | 2019-08-01,102.6085 574 | 2019-09-01,100.1741 575 | 2019-10-01,90.1684 576 | 2019-11-01,79.7223 577 | 2019-12-01,75.7094 578 | 2020-01-01,83.6290 579 | -------------------------------------------------------------------------------- /ice_cream_interest.csv: -------------------------------------------------------------------------------- 1 | month,interest 2 | 2004-01,13 3 | 2004-02,15 4 | 2004-03,17 5 | 2004-04,19 6 | 2004-05,22 7 | 2004-06,25 8 | 2004-07,27 9 | 2004-08,21 10 | 2004-09,18 11 | 2004-10,14 12 | 2004-11,15 13 | 2004-12,15 14 | 2005-01,14 15 | 2005-02,16 16 | 2005-03,16 17 | 2005-04,19 18 | 2005-05,23 19 | 2005-06,28 20 | 2005-07,29 21 | 2005-08,22 22 | 2005-09,17 23 | 2005-10,14 24 | 2005-11,15 25 | 2005-12,15 26 | 2006-01,14 27 | 2006-02,15 28 | 2006-03,16 29 | 2006-04,20 30 | 2006-05,24 31 | 2006-06,27 32 | 2006-07,34 33 | 2006-08,24 34 | 2006-09,20 35 | 2006-10,17 36 | 2006-11,16 37 | 2006-12,17 38 | 2007-01,16 39 | 2007-02,17 40 | 2007-03,19 41 | 2007-04,21 42 | 2007-05,25 43 | 2007-06,29 44 | 2007-07,30 45 | 2007-08,23 46 | 2007-09,19 47 | 2007-10,16 48 | 2007-11,15 49 | 2007-12,16 50 | 2008-01,16 51 | 2008-02,16 52 | 2008-03,17 53 | 2008-04,20 54 | 2008-05,25 55 | 2008-06,28 56 | 2008-07,28 57 | 2008-08,23 58 | 2008-09,18 59 | 2008-10,15 60 | 2008-11,15 61 | 2008-12,15 62 | 2009-01,15 63 | 2009-02,17 64 | 2009-03,19 65 | 2009-04,22 66 | 2009-05,26 67 | 2009-06,33 68 | 2009-07,35 69 | 2009-08,30 70 | 2009-09,24 71 | 2009-10,19 72 | 2009-11,21 73 | 2009-12,19 74 | 2010-01,18 75 | 2010-02,19 76 | 2010-03,20 77 | 2010-04,23 78 | 2010-05,28 79 | 2010-06,30 80 | 2010-07,36 81 | 2010-08,29 82 | 2010-09,23 83 | 2010-10,18 84 | 2010-11,17 85 | 2010-12,17 86 | 2011-01,24 87 | 2011-02,25 88 | 2011-03,25 89 | 2011-04,45 90 | 2011-05,35 91 | 2011-06,42 92 | 2011-07,46 93 | 2011-08,35 94 | 2011-09,30 95 | 2011-10,31 96 | 2011-11,28 97 | 2011-12,30 98 | 2012-01,30 99 | 2012-02,30 100 | 2012-03,36 101 | 2012-04,40 102 | 2012-05,47 103 | 2012-06,54 104 | 2012-07,55 105 | 2012-08,42 106 | 2012-09,31 107 | 2012-10,24 108 | 2012-11,23 109 | 2012-12,23 110 | 2013-01,25 111 | 2013-02,25 112 | 2013-03,28 113 | 2013-04,31 114 | 2013-05,39 115 | 2013-06,45 116 | 2013-07,49 117 | 2013-08,38 118 | 2013-09,28 119 | 2013-10,22 120 | 2013-11,21 121 | 2013-12,21 122 | 2014-01,24 123 | 2014-02,24 124 | 2014-03,28 125 | 2014-04,32 126 | 2014-05,39 127 | 2014-06,44 128 | 2014-07,51 129 | 2014-08,40 130 | 2014-09,29 131 | 2014-10,23 132 | 2014-11,22 133 | 2014-12,22 134 | 2015-01,25 135 | 2015-02,26 136 | 2015-03,33 137 | 2015-04,40 138 | 2015-05,44 139 | 2015-06,49 140 | 2015-07,57 141 | 2015-08,46 142 | 2015-09,34 143 | 2015-10,26 144 | 2015-11,26 145 | 2015-12,25 146 | 2016-01,30 147 | 2016-02,32 148 | 2016-03,38 149 | 2016-04,45 150 | 2016-05,52 151 | 2016-06,61 152 | 2016-07,73 153 | 2016-08,54 154 | 2016-09,41 155 | 2016-10,38 156 | 2016-11,46 157 | 2016-12,66 158 | 2017-01,35 159 | 2017-02,39 160 | 2017-03,45 161 | 2017-04,55 162 | 2017-05,60 163 | 2017-06,75 164 | 2017-07,90 165 | 2017-08,64 166 | 2017-09,48 167 | 2017-10,40 168 | 2017-11,36 169 | 2017-12,36 170 | 2018-01,39 171 | 2018-02,42 172 | 2018-03,52 173 | 2018-04,56 174 | 2018-05,71 175 | 2018-06,80 176 | 2018-07,89 177 | 2018-08,67 178 | 2018-09,50 179 | 2018-10,38 180 | 2018-11,35 181 | 2018-12,35 182 | 2019-01,41 183 | 2019-02,43 184 | 2019-03,53 185 | 2019-04,58 186 | 2019-05,66 187 | 2019-06,80 188 | 2019-07,100 189 | 2019-08,71 190 | 2019-09,52 191 | 2019-10,41 192 | 2019-11,37 193 | 2019-12,36 194 | 2020-01,43 195 | 2020-02,45 196 | 2020-03,46 197 | 2020-04,55 198 | 2020-05,71 199 | 2020-06,81 200 | 2020-07,90 201 | 2020-08,76 202 | -------------------------------------------------------------------------------- /ice_cream_vs_heater.csv: -------------------------------------------------------------------------------- 1 | Month,heater,ice cream 2 | 2004-01,27,13 3 | 2004-02,18,15 4 | 2004-03,14,16 5 | 2004-04,13,19 6 | 2004-05,13,21 7 | 2004-06,13,24 8 | 2004-07,13,27 9 | 2004-08,14,20 10 | 2004-09,15,18 11 | 2004-10,20,15 12 | 2004-11,24,15 13 | 2004-12,29,14 14 | 2005-01,27,15 15 | 2005-02,17,15 16 | 2005-03,15,17 17 | 2005-04,14,19 18 | 2005-05,13,22 19 | 2005-06,13,28 20 | 2005-07,12,29 21 | 2005-08,13,21 22 | 2005-09,16,16 23 | 2005-10,25,14 24 | 2005-11,25,14 25 | 2005-12,31,14 26 | 2006-01,21,14 27 | 2006-02,20,15 28 | 2006-03,16,16 29 | 2006-04,14,19 30 | 2006-05,13,23 31 | 2006-06,13,27 32 | 2006-07,13,32 33 | 2006-08,13,24 34 | 2006-09,16,19 35 | 2006-10,22,16 36 | 2006-11,23,16 37 | 2006-12,25,17 38 | 2007-01,25,16 39 | 2007-02,23,17 40 | 2007-03,16,18 41 | 2007-04,14,20 42 | 2007-05,13,25 43 | 2007-06,13,30 44 | 2007-07,12,29 45 | 2007-08,12,23 46 | 2007-09,15,19 47 | 2007-10,20,15 48 | 2007-11,26,15 49 | 2007-12,29,16 50 | 2008-01,26,15 51 | 2008-02,20,17 52 | 2008-03,16,17 53 | 2008-04,15,20 54 | 2008-05,14,25 55 | 2008-06,14,28 56 | 2008-07,14,28 57 | 2008-08,14,23 58 | 2008-09,17,18 59 | 2008-10,26,15 60 | 2008-11,28,15 61 | 2008-12,31,14 62 | 2009-01,29,15 63 | 2009-02,21,17 64 | 2009-03,17,18 65 | 2009-04,15,22 66 | 2009-05,14,27 67 | 2009-06,14,32 68 | 2009-07,13,34 69 | 2009-08,13,30 70 | 2009-09,16,24 71 | 2009-10,24,19 72 | 2009-11,23,20 73 | 2009-12,33,18 74 | 2010-01,30,18 75 | 2010-02,22,19 76 | 2010-03,17,21 77 | 2010-04,15,23 78 | 2010-05,14,28 79 | 2010-06,12,30 80 | 2010-07,11,34 81 | 2010-08,12,28 82 | 2010-09,14,22 83 | 2010-10,21,18 84 | 2010-11,27,17 85 | 2010-12,32,16 86 | 2011-01,31,24 87 | 2011-02,24,24 88 | 2011-03,18,25 89 | 2011-04,15,45 90 | 2011-05,14,34 91 | 2011-06,14,41 92 | 2011-07,13,46 93 | 2011-08,14,35 94 | 2011-09,17,30 95 | 2011-10,25,30 96 | 2011-11,31,27 97 | 2011-12,32,29 98 | 2012-01,28,30 99 | 2012-02,21,30 100 | 2012-03,17,35 101 | 2012-04,15,39 102 | 2012-05,14,46 103 | 2012-06,13,53 104 | 2012-07,13,55 105 | 2012-08,13,41 106 | 2012-09,16,31 107 | 2012-10,25,24 108 | 2012-11,32,23 109 | 2012-12,29,23 110 | 2013-01,30,24 111 | 2013-02,23,25 112 | 2013-03,20,27 113 | 2013-04,16,31 114 | 2013-05,15,37 115 | 2013-06,14,44 116 | 2013-07,14,48 117 | 2013-08,14,37 118 | 2013-09,17,28 119 | 2013-10,27,22 120 | 2013-11,36,21 121 | 2013-12,39,21 122 | 2014-01,39,24 123 | 2014-02,28,24 124 | 2014-03,21,28 125 | 2014-04,17,32 126 | 2014-05,16,39 127 | 2014-06,15,45 128 | 2014-07,15,51 129 | 2014-08,16,40 130 | 2014-09,19,28 131 | 2014-10,26,23 132 | 2014-11,45,21 133 | 2014-12,32,22 134 | 2015-01,36,24 135 | 2015-02,32,26 136 | 2015-03,21,33 137 | 2015-04,17,40 138 | 2015-05,17,46 139 | 2015-06,17,49 140 | 2015-07,16,57 141 | 2015-08,17,45 142 | 2015-09,19,35 143 | 2015-10,29,27 144 | 2015-11,37,26 145 | 2015-12,35,25 146 | 2016-01,40,30 147 | 2016-02,28,32 148 | 2016-03,21,38 149 | 2016-04,20,45 150 | 2016-05,19,51 151 | 2016-06,18,61 152 | 2016-07,17,71 153 | 2016-08,17,52 154 | 2016-09,21,42 155 | 2016-10,29,39 156 | 2016-11,39,46 157 | 2016-12,52,66 158 | 2017-01,40,35 159 | 2017-02,27,39 160 | 2017-03,25,44 161 | 2017-04,20,55 162 | 2017-05,21,60 163 | 2017-06,20,74 164 | 2017-07,19,89 165 | 2017-08,19,64 166 | 2017-09,23,48 167 | 2017-10,33,40 168 | 2017-11,43,36 169 | 2017-12,56,35 170 | 2018-01,56,40 171 | 2018-02,33,42 172 | 2018-03,27,51 173 | 2018-04,24,56 174 | 2018-05,22,71 175 | 2018-06,21,79 176 | 2018-07,21,91 177 | 2018-08,21,66 178 | 2018-09,24,49 179 | 2018-10,39,39 180 | 2018-11,53,34 181 | 2018-12,48,36 182 | 2019-01,49,39 183 | 2019-02,39,42 184 | 2019-03,30,53 185 | 2019-04,24,57 186 | 2019-05,23,65 187 | 2019-06,22,82 188 | 2019-07,21,100 189 | 2019-08,21,68 190 | 2019-09,24,51 191 | 2019-10,40,40 192 | 2019-11,56,36 193 | 2019-12,46,36 194 | 2020-01,41,43 195 | 2020-02,34,45 196 | 2020-03,25,44 197 | 2020-04,25,53 198 | 2020-05,27,70 199 | 2020-06,24,74 200 | -------------------------------------------------------------------------------- /original_series.csv: -------------------------------------------------------------------------------- 1 | 0 2 | 956.4384859269076 3 | 7284.907174081934 4 | 11357.87016588201 5 | 13622.652007448385 6 | 17137.455304495303 7 | 16699.686334476788 8 | 17376.763139586616 9 | 20312.92984686392 10 | 21095.061248760623 11 | 23740.567368379987 12 | 23873.20093118598 13 | 26033.68711928224 14 | 24210.259939962358 15 | 26448.801878751856 16 | 27359.509397024372 17 | 27261.59469990661 18 | 27521.990343242625 19 | 29173.10218932381 20 | 29722.378633924614 21 | 28486.826610911183 22 | 30882.08377550196 23 | 31521.970507095266 24 | 30756.44836115877 25 | 32399.28999580888 26 | 32844.80945727306 27 | 32363.64765789484 28 | 33647.789176650746 29 | 33286.29097047546 30 | 33759.660869559324 31 | 33410.737019995846 32 | 34354.73254727021 33 | 35776.60605208929 34 | 34824.708706830446 35 | 34833.79098252604 36 | 35294.15492513818 37 | 36229.82375474308 38 | 36370.38659336087 39 | 36484.583766605996 40 | 36467.37559911101 41 | 36116.341115590076 42 | 36799.017113921 43 | 36454.00566988637 44 | 36896.11447180656 45 | 36999.899671579245 46 | 38210.4257018989 47 | 39225.63859904278 48 | 38026.24366603695 49 | 38381.37258042362 50 | 38901.91616854895 51 | 38995.06472283099 52 | 39225.99037686616 53 | 39179.5423663572 54 | 39790.21959270054 55 | 39454.75825126303 56 | 40239.58321031569 57 | 40009.05304321965 58 | 40191.59906288232 59 | 40528.67833806672 60 | 40542.23106005688 61 | 41236.377167535335 62 | 41155.40575595243 63 | 41080.804034785426 64 | 41316.39477762631 65 | 41588.930531877544 66 | 41754.56517605326 67 | 41972.22570526746 68 | 42056.981539721586 69 | 42204.33890537796 70 | 42368.64103900812 71 | 42564.98840108846 72 | 42606.29739925627 73 | 42710.43901113826 74 | -------------------------------------------------------------------------------- /series_tickers.p: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ritvikmath/Time-Series-Analysis/6bfd2daff661a21d47e518ebb66bb0bbfd8f2462/series_tickers.p --------------------------------------------------------------------------------