{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#
CS109A Introduction to Data Science\n",
"\n",
"## Standard Section 9: Feed Forward Neural Networks\n",
"\n",
"**Harvard University**
\n",
"**Fall 2020**
\n",
"**Instructors**: Pavlos Protopapas, Kevin Rader, and Chris Tanner
\n",
"**Section Leaders**: Marios Mattheakis, Henry Jin, Hayden Joy\n",
"
"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n"
],
"text/plain": [
""
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#RUN THIS CELL \n",
"import requests\n",
"from IPython.core.display import HTML\n",
"styles = requests.get(\"https://raw.githubusercontent.com/Harvard-IACS/2018-CS109A/master/content/styles/cs109.css\").text\n",
"HTML(styles)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The goal of this section is to become familiar with a basic Artificial Neural Network architecture, the Feed-Forward Neural Network (FFNN). \n",
"\n",
"Specifically, we will: \n",
" \n",
"1. Quickly review the FFNN *anatomy*.\n",
"2. Design a simple FFNN from scratch (using numpy) and fit toy datasets.\n",
"3. Quantify the prediction (fit) by using sklearn's mean square error metric.\n",
"4. FFNN is a *universal approximator*. Understand this property by inspecting the functions generated by an FFNN.\n",
"4. Forward propagation with TensorFlow and Keras: Design the previous and more complex architectures.\n",
"5. Back propagation with TensorFlow and Keras: Train the networks, that is, find the optimal weights.\n",
"6. Train an FFNN for image classification: MNIST and Iris datasets are explored."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Import packages and check the version of your TensorFlow, it should be the version 2+"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"import matplotlib\n",
"import matplotlib.pyplot as plt\n",
"# import seaborn as sns\n",
"\n",
"import tensorflow as tf\n",
"from sklearn.metrics import mean_squared_error\n",
"from sklearn.model_selection import train_test_split"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2.0.0\n"
]
}
],
"source": [
"print(tf.__version__)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### IMPORTANT: Unless you have the \"TF version 2.2\" or higher, try the following\n",
"```pip install --upgrade pip```\n",
"\n",
"```pip install tensorflow ```\n",
"\n",
"**OR**\n",
"\n",
"```conda install tensorflow```\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---------\n",
"## 1. Review of the ANN *anatomy* \n",
"\n",
"#### Input, Hidden, and Output layers\n",
"\n",
"The **forward** pass through an FFNN is a sequence of linear (affine) and nonlinear operations (activation). \n",
"\n",
"\n",
"\n",
"
\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 2. Design a Feed Forward neural network\n",
"\n",
"\n",
"Let's create a simple FFNN with *one input*, one hidden layer with arbitrary number of hidden neurons, and one linear neuron for the output layer. The purpose here is to become familiar with the forward propagation.\n",
"- Define the ReLU and Sigmoid nonlinear functions. These are two commonly used activation functions. \n",
"- Create an FFNN with one hidden neuron and become familiar with the activation function.\n",
"- **Break Room**: Load the toyDataSet_1.csv and fit (manually tuning the weights). This is a simple regression problem with one input and one output.\n",
"- Write a function for the forward pass of a single input/output FFNN with a single hidden layer of arbitrary number of neurons. Tune the weights randomly and inspect the generated functions. Is this network a *universal approximator*?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Define activation functions\n",
"*Rectified Linear Unit* (ReLU) function is defined as $$g(x)=\\max(0,x)$$\n",
"\n",
"*Sigmoid* function is defined as $$\\sigma(x)=\\frac{1}{1+e^{-z}}$$"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"def g(z: float) -> float :\n",
" return np.maximum(0, z)\n",
"# or \n",
"# g = lambda z: np.maximum(0, z)\n",
"\n",
"def sig(z: float) -> float : \n",
" return 1/(1 + np.exp(-z)) "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Build an FFNN with one hidden neuron. No training here\n",
"\n",
"#### ReLU activation"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# input vector\n",
"x_train = np.linspace(-1,1,100)\n",
"\n",
"# set the network parameters\n",
"w1, b1 = 1, 0. \n",
"w2, b2 = 1, 0 \n",
"\n",
"# affine operation (input layer)\n",
"l1 = w1*x_train + b1\n",
"\n",
"# RELU activation\n",
"h = g(l1)\n",
"\n",
"# output linear layer\n",
"y_train = w2*h+b2\n",
"\n",
"plt.plot(x_train, y_train,'-b' )\n",
"plt.title('ReLU Activation')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Sigmoid activation"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAEICAYAAABPgw/pAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3deZQU9bn/8ffDsAgBAQEVWdQoEkzcJ7jEBaNGwGswekUQlRijx0T03mw/Sa7mJjeb8cREvWAIKBHcQASBoEY0GjUiyOAVBASDIjIgOGwiiMAwz++Pb01omp6ZnpnuqV4+r3PqdHVVddUzNcWH73y7FnN3REQk/zWLuwAREckMBbqISIFQoIuIFAgFuohIgVCgi4gUCAW6iEiBUKBLxpnZMDObnWvbNbO/m9m3m6iWbWb2+Sys9ywzW57p9UphUKBLg5jZmWY2x8w+NrNNZvaqmX0ZwN0fcfevNXVNmdiumX3TzNzMBtfjM/v9R+Hubd39vcbUEq3bzezohPW+4u69G7teKUwKdKk3MzsQmAX8L3AQ0A34ObAzzroyZDiwKXoVySsKdGmIYwDc/TF33+PuO9x9trsvgn+1cv9RvbCZfc3Mlket+fvM7KXqFm207Ktm9gcz22Jm75nZGdH01Wb2kZkNT1hXezObaGYVZrbKzG4zs2Y1bPcCM1sWbXcUYLX9UGZ2OHAOcANwoZkdkjR/kJm9aWZbzexdM+tvZr8CzgJGRd0so6Jl3cyONrPTzGydmZUkrOcbZla9r/qa2WvRz/6hmY0ys5bRvJejjyyM1n2FmfUzs/KEdfWJ/kLYYmZLzOzrCfMeNLPRZvaUmX1iZvPM7Kg6f7uStxTo0hDvAHvMbIKZDTCzjjUtaGadgSeAHwOdgOXAGUmLnQosiuY/CkwCvgwcDVxFCMu20bL/C7QHPk8I32uAa2vY7lTgNqAz8C7wlTp+rmuAMnefCrwNDEtYX19gIvAjoANwNvC+u/8X8AowIupmGZG4QnefC2wHvpow+cro5wTYA3wvqvF04Dzgu9Fnz46WOSFa9+Skn7EF8BdgNnAwcDPwiJkldskMJfz11BFYAfyqjn0geUyBLvXm7luBMwEHxgEVZjYzuUUbGQgscfdp7l4J3AusS1pmpbv/2d33AJOBHsD/uPtOd58N7AKOjlq5VwA/dvdP3P194C7g6hq2u9Tdn3D33cDdKbab7Br2Bu2j7Nvtch0w3t2fc/cqd1/j7svqWF+1xwjBipm1i2p7DMDdF7j7XHevjH6ePxH+o0rHaUBb4A533+XuLxC6woYmLDPN3V+P9v0jwIlprlvykAJdGsTd33b3b7p7d+BLwGGE0Ex2GLA64XMOlCctsz5hfEe0XPK0toRWbEtgVcK8VYQ+/HS2uzrFcgCY2VeAIwl/HUAI9OPMrDoAexBa+Q3xKHCpmbUCLgXecPdV0XaPMbNZUbfMVuDXhJ8zHYcBq929KmFa8v5I/E/sU8J+lAKlQJdGi1qqDxKCPdmHQPfqN2Zmie/raQOwGzg8YVpPYE0N2+2RtN0eKZarNpzQx/6mma0D5kXTr4leVwM19T/XestSd19KCNoB7NvdAvBHYBnQy90PBH5CHX39CdYCPaq/Q4jUtD+kCCjQpd7M7Atm9gMz6x6970H4M39uisWfIrR0LzGz5sBNwKEN2W7UJfM48Cszaxd9ifl94OEatvtFM7s02u4tNW3XzA4ABhO+DD0xYbgZGBZ9/gHgWjM7z8yamVk3M/tCtIr1hD792jwa1XA2MCVhejtgK7AtWt93kj5X27rnEfrn/5+ZtTCzfsDF7P0rQ4qMAl0a4hPCF5nzzGw7IcgXAz9IXtDdNwCXA3cCG4FjgTIaforjzYQQew/4ByEox9ey3Tui7fYCXq1hnZcQunUmuvu66oEQ4iVAf3d/nfDl6x+Aj4GX2PuXwj3Av5vZZjO7t4ZtPAb0A16Iaqv2Q0Kr/RPC9xGTkz73M2BCdBbLPufGu/su4OuElv8G4D7gmnr07UuBMT3gQppS1D1QDgxz9xfjrkekkKiFLllnZheaWYfoS8HqPuJU3TMi0ggKdGkKpxPOENlA6OO9xN13xFuSSOFRl4uISIFQC11EpEA0j2vDnTt39iOOOCKuzYuI5KUFCxZscPcuqebFFuhHHHEEZWVlcW1eRCQvmdmqmuapy0VEpEAo0EVECoQCXUSkQCjQRUQKhAJdRKRA1BnoZjY+egzY4hrmm5nda2YrzGyRmZ2c+TJFRKQu6bTQHwT61zJ/AOFOdr0Itx/9Y+PLEhGR+qrzPHR3f9nMjqhlkUGE2446MDe6CVNXd/8wQzWKSIGqrITPPoOdO8Prrl1hfNcu2L1772tl5b7Dnj37D1VVe1+TB/d9x2saIP3xajXdPaW2Zc48E772tcbvv2SZuLCoG/s+2qs8mrZfoJvZDYRWPD179szApkUkLlVVUFEB69eH14oK2LgRNm8Ow8cfh2HrVvjkE9i2DbZvD8OOHfDppyGci4UlPIfq1ltzN9BTPS4r5f9Z7j4WGAtQWlqqu4KJ5DB3WLMGli+Hd96BlSth1aowrFkD69bVHMht2kCHDtC+PRx4ILRtC4ccEl7btAlD69ZhOOCAMLRsCa1ahaFlyzC0aAHNm4fXFi2gpCS8LylJPTRrFobqcbO906rHzWofIP3xapbuQwOzLBOBXs6+z2rsTnjWoYjkicpKWLQI5s2DhQvD8NZboTVdrWVL6NkTDj8czj8fDjsMunaFQw+FLl3C0KkTdOwYlpWml4lAnwmMMLNJhMeSfaz+c5HcVlkJ8+fD88/DCy/A66+HLhAIgXz88fCtb0GfPtC7N/TqBd26hRau5K46A93Mqp+F2NnMyoH/BloAuPsY4GlgILAC+JTw3EURyTE7dsBf/wpTp8KsWaF/2wxOOgm+/W04/XQ47bTQAs+VLgSpn3TOchlax3wnPMldRHKMO7z2GowbB1OmhC6UTp3g0kthwAA491zo3DnuKiVTYrt9rohkz86dMHEi3H03LF0avowcOhSGDIFzzglfLErh0a9VpIBs3w5/+hPcdResXQsnnwz33w9XXBFCXQqbAl2kAFRVwaOPwsiR4ZTCc8+FCRPgvPPUH15MFOgieW7BArjppnDKYWkpPPYYnHVW3FVJHHQSkkie2r0bfvYzOPXUcLHPgw+GUFeYFy+10EXy0LJlcNVVoXV+1VVw773h/HEpbgp0kTzzl7/AsGHhEvmpU8MpiCKgLheRvOEOv/kNDBoExxwD//d/CnPZl1roInmgshKuuy6cWz50KDzwQLixlUgitdBFctzu3XDllSHMf/5zeOQRhbmkpha6SA7buTNcFDRjRrhY6Pvfj7siyWUKdJEcVVkJl18evgQdNSqcay5SGwW6SA5yh5tvDmE+ejR897txVyT5QH3oIjnozjthzJhwKb/CXNKlQBfJMZMmhSAfMgR+9au4q5F8okAXySGLF8O114bL9x98UE8IkvrR4SKSI7Zvh8GDw4OVp0wJV4KK1Ie+FBXJETfdFO7R8txzcMghcVcj+UgtdJEcMGFCGG67LdzDXKQhFOgiMVu1KrTOzz4bfvrTuKuRfKZAF4mRO3znO2F84kQ961MaR4ePSIwmTYJnngkPcz788LirkXynFrpITDZsgFtugb59YcSIuKuRQqBAF4nJD34AW7bA/fdDSUnc1UghUKCLxGDOnNBnfuutcNxxcVcjhUKBLtLE3EPrvGtX+PGP465GCom+FBVpYlOmwNy54alDn/tc3NVIIVELXaQJ7dwZbrx1/PEwfHjc1UihUQtdpAmNGgUrV8Ls2foiVDJPLXSRJrJ5M/zyl9C/P1xwQdzVSCFSoIs0kXvvDacp/uY3cVcihSqtQDez/ma23MxWmNnIFPPbm9lfzGyhmS0xs2szX6pI/tq6NVwNOmgQnHhi3NVIoaoz0M2sBBgNDACOBYaa2bFJi90ELHX3E4B+wF1m1jLDtYrkrVGjQuv89tvjrkQKWTot9L7ACnd/z913AZOAQUnLONDOzAxoC2wCKjNaqUie2rYNfv97GDAATjkl7mqkkKUT6N2A1Qnvy6NpiUYBfYC1wFvAf7h7VfKKzOwGMyszs7KKiooGliySX8aMgY0b1TqX7Esn0C3FNE96fyHwJnAYcCIwyswO3O9D7mPdvdTdS7t06VLvYkXyzY4d8Lvfwfnnw+mnx12NFLp0Ar0c6JHwvjuhJZ7oWmCaByuAlcAXMlOiSP56+GFYvx5+8pO4K5FikE6gzwd6mdmR0RedQ4CZSct8AJwHYGaHAL2B9zJZqEi+cYd77glntfTrF3c1UgzqvFLU3SvNbATwLFACjHf3JWZ2YzR/DPAL4EEze4vQRXOru2/IYt0iOe9vf4MlS+DPfwZL1XEpkmHmntwd3jRKS0u9rKwslm2LNIV/+zeYPz88M/SAA+KuRgqFmS1w99JU83SlqEgW/POf8NRTcOONCnNpOgp0kSy4915o0WLvA6BFmoICXSTDPv4YHnwQhgyBQw+NuxopJgp0kQx7+OFwdegtt8RdiRQbBbpIBrnDuHFw0klQmvJrK5HsUaCLZFBZGSxcCNdfH3clUowU6CIZNG4ctGkDV14ZdyVSjBToIhmybRs89hgMHgzt28ddjRQjBbpIhkyeHEJd3S0SFwW6SIaMGwd9+uiuihIfBbpIBixeDPPmhda57tsicVGgi2TAhAnQvDlcfXXclUgxU6CLNNKePfDoozBwIHTuHHc1UswU6CKN9OKLsHYtXHVV3JVIsVOgizTSww/DgQeG2+WKxEmBLtIIn34KU6fC5ZdD69ZxVyPFToEu0ggzZoRzz9XdIrlAgS7SCA89BD16wNlnx12JiAJdpMHWr4fZs2HYMGimf0mSA3QYijTQ44+HUxaHDYu7EpFAgS7SQJMnw5e+FAaRXKBAF2mA8nJ49VW44oq4KxHZS4Eu0gBPPBFeL7883jpEEinQRRrg8cfhhBOgd++4KxHZS4EuUk8ffACvvabuFsk9CnSRepoyJbwOHhxvHSLJFOgi9fT443DKKXDUUXFXIrIvBbpIPaxcCa+/rta55CYFukg9VHe36OwWyUUKdJF6mDYtdLcceWTclYjsL61AN7P+ZrbczFaY2cgalulnZm+a2RIzeymzZYrEr7w8PDf00kvjrkQkteZ1LWBmJcBo4AKgHJhvZjPdfWnCMh2A+4D+7v6BmR2crYJF4jJ9eni97LJ46xCpSTot9L7ACnd/z913AZOAQUnLXAlMc/cPANz9o8yWKRK/adPg2GN1MZHkrnQCvRuwOuF9eTQt0TFARzP7u5ktMLNrUq3IzG4wszIzK6uoqGhYxSIx2LABXnpJ3S2S29IJdEsxzZPeNwdOAS4CLgRuN7Nj9vuQ+1h3L3X30i5dutS7WJG4zJgBVVUKdMltdfahE1rkPRLedwfWplhmg7tvB7ab2cvACcA7GalSJGbTpoUzW048Me5KRGqWTgt9PtDLzI40s5bAEGBm0jIzgLPMrLmZtQFOBd7ObKki8fj4Y3j++dA6t1R/r4rkiDpb6O5eaWYjgGeBEmC8uy8xsxuj+WPc/W0z+yuwCKgC7nf3xdksXKSpPP007Nql7hbJfeae3B3eNEpLS72srCyWbYvUx+DB8MorsGaNnh0q8TOzBe5emmqeDk+RWuzcCc88A4MGKcwl9+kQFanFCy/Atm0h0EVynQJdpBbTp0PbtvDVr8ZdiUjdFOgiNaiqgpkzYcAAaNUq7mpE6qZAF6nB66/DunVwySVxVyKSHgW6SA2mT4fmzWHgwLgrEUmPAl2kBtOnQ79+0KFD3JWIpEeBLpLCsmWwfLm6WyS/KNBFUpgxI7x+/evx1iFSHwp0kRSmTw+PmuvRo+5lRXKFAl0kybp14VFzuphI8o0CXSTJrFngrkCX/KNAF0kyYwYccQQcd1zclYjUjwJdJMH27eHe54MG6d7nkn8U6CIJZs+Gzz5Td4vkJwW6SIIZM6BjRzjrrLgrEak/BbpIpLIyfCF60UXhkn+RfKNAF4nMmQMbN6q7RfKXAl0kMmMGtGwJF14YdyUiDaNAFyGcdz5jBpx3HrRrF3c1Ig2jQBcBli6Fd9/VzbgkvynQRQj3bgG4+OJ46xBpDAW6CCHQTzsNunaNuxKRhlOgS9ErL4eyMnW3SP5ToEvRmzkzvOp0Rcl3CnQpetOnQ+/e8IUvxF2JSOMo0KWobdkCL76o7hYpDAp0KWrPPBMu+Vd3ixQCBboUtenT4ZBD4NRT465EpPEU6FK0PvsMnnoqtM6b6V+CFAAdxlK0nnsuPNDissvirkQkM9IKdDPrb2bLzWyFmY2sZbkvm9keM/v3zJUokh3TpkGHDtCvX9yViGRGnYFuZiXAaGAAcCww1MyOrWG53wLPZrpIkUzbvTucf37xxeEOiyKFIJ0Wel9ghbu/5+67gElAqnMCbgamAh9lsD6RrHj5Zdi0CS69NO5KRDInnUDvBqxOeF8eTfsXM+sGfAMYU9uKzOwGMyszs7KKior61iqSMdOmQZs2uve5FJZ0Aj3Vs8896f3dwK3uvqe2Fbn7WHcvdffSLl26pFujSEZVVcGTT8LAgdC6ddzViGROOk9OLAd6JLzvDqxNWqYUmGRmAJ2BgWZW6e7TM1KlSAbNnQsffqjuFik86QT6fKCXmR0JrAGGAFcmLuDuR1aPm9mDwCyFueSqadPCF6EXXRR3JSKZVWegu3ulmY0gnL1SAox39yVmdmM0v9Z+c5Fc4g5Tp8L558OBB8ZdjUhmpdNCx92fBp5OmpYyyN39m40vSyQ7ysrg/ffhv/877kpEMk9XikpRmTwZWrTQ3RWlMCnQpWi4w+OPh1MVO3SIuxqRzFOgS9GYNw9Wr4bBg+OuRCQ7FOhSNCZPhlatdO9zKVwKdCkKVVUwZQr076+zW6RwKdClKLz2GqxZo+4WKWwKdCkKkyfDAQeEuyuKFCoFuhS8PXtCd8uAAdCuXdzViGSPAl0K3gsvwLp1MGxY3JWIZJcCXQreQw9B+/a6d4sUPgW6FLTt28PNuAYPDn3oIoVMgS4Fbfr0EOpXXRV3JSLZp0CXgvbww9CzJ5x5ZtyViGSfAl0K1rp1MHt2aJ0305EuRUCHuRSsSZPCFaLqbpFioUCXgvXQQ3DKKdCnT9yViDQNBboUpIUL4Y034Oqr465EpOko0KUg3X9/eG6oulukmCjQpeDs2BHObrnsMujUKe5qRJqOAl0KzhNPwJYtcP31cVci0rQU6FJwxo2Do4+Gfv3irkSkaSnQpaAsWwavvALf/jaYxV2NSNNSoEtBeeABaN4chg+PuxKRpqdAl4KxcydMmBAeYnHooXFXI9L0FOhSMCZPhooKuPHGuCsRiYcCXQqCO9xzT7gq9IIL4q5GJB7N4y5AJBNefTVcGTpmjL4MleKlFroUhLvvho4ddam/FDcFuuS9VavgySfhhhugTZu4qxGJjwJd8t7o0aGb5aab4q5EJF5pBbqZ9Tez5Wa2wsxGppg/zMwWRcMcMzsh86WK7G/btnBl6GWXQY8ecVcjEq86A93MSoDRwADgWGComR2btNhK4Bx3Px74BTA204WKpDJmTLhvy/e/H3clIvFLp4XeF1jh7u+5+y5gEjAocQF3n+Pum6O3c4HumS1TZH+ffgq/+104TfHUU+OuRiR+6QR6N2B1wvvyaFpNrgOeSTXDzG4wszIzK6uoqEi/SpEUxo2D9evh9tvjrkQkN6QT6KnO6vWUC5qdSwj0W1PNd/ex7l7q7qVdunRJv0qRJJ99BnfeCeecA2edFXc1IrkhnQuLyoHEr5u6A2uTFzKz44H7gQHuvjEz5Ymk9uc/w9q14bmhIhKk00KfD/QysyPNrCUwBJiZuICZ9QSmAVe7+zuZL1Nkr1274I474Iwz4Nxz465GJHfU2UJ390ozGwE8C5QA4919iZndGM0fA/wU6ATcZ+G660p3L81e2VLM/vQn+OADGDtWl/mLJDL3lN3hWVdaWuplZWWxbFvy15Yt4WlEJ54Izz2nQJfiY2YLamow60pRySu//jVs2hROV1SYi+xLgS55Y+XKcIvc4cNDC11E9qVAl7zxk59ASQn88pdxVyKSmxTokhfmzIFJk+CHP4RutV3WJlLEFOiS83btguuvDzff+tGP4q5GJHfpiUWS8+64A5YuhVmzoF27uKsRyV1qoUtOW7o09JkPHQoXXRR3NSK5TYEuOauqKnS1tGsXHjEnIrVTl4vkrD/8IXwZOmECHHxw3NWI5D610CUnzZsHI0fCJZfowc8i6VKgS87ZvBmuuAK6d4fx43VFqEi61OUiOcUdrrsO1qyBf/wDOnaMuyKR/KFAl5xy113w5JPhXi16rJxI/ajLRXLGlCnhwqHLL9dDn0UaQoEuOeHVV8OXn1/5CkycqH5zkYZQoEvs3nkHBg2Cnj1hxgw44IC4KxLJTwp0idWyZdCvHzRrBs88A506xV2RSP5SoEtsFi+Gc84JV4S++CIcdVTcFYnkNwW6xGLBgtAyb94cXnoJvvjFuCsSyX8KdGlyjz8OZ50Fn/tcCPPeveOuSKQwKNClyVRVwW23hatATzoJXn89PPBZRDJDFxZJk1i7NlwB+te/htfRo6FVq7irEiksaqFL1k2aBF/6Uuheue8+GDdOYS6SDQp0yZr33oNLLw0PpzjmGHjzTfjOd3TRkEi2KNAl47ZuDbe+7dMHnn0Wfv3rcKOtY46JuzKRwqY+dMmYTZtg1Ci4554wfs01Icy7dYu7MpHioECXRlu2DMaODX3j27bBxRfD7bfDl78cd2UixUWBLg2yeXO478oDD4TulObNw10SR46E44+PuzqR4qRAl7S9/37oE3/ySfjb36CyEnr1gt/+FoYPh0MOibtCkeKmQJeU3GHFCnjttfCg5uefh3ffDfM+//lwv/LLLgvdKjprRSQ3KNCFjRvDLWyXLYNFi8KwcGGYDtCuXbiJ1i23wPnnh7NXFOIiuSetQDez/sA9QAlwv7vfkTTfovkDgU+Bb7r7GxmuVeqpqir0dVdUwEcfhas1164Nz+tctSp0oaxcGc5Iqda6NRx3HHzjG9C3L5x+egjwkpLYfgwRSVOdgW5mJcBo4AKgHJhvZjPdfWnCYgOAXtFwKvDH6FUi7rBnz96hsjK87t4dxnfvDsOuXXuHnTv3Dp99Bjt2hOHTT8OwbdveYevWMGzZEkJ806YwvmfP/rW0bg2HHx6G0tJwfnj1cNRRCm+RfJVOC70vsMLd3wMws0nAICAx0AcBE93dgblm1sHMurr7h5ku+Nln4Xvf2/vePfVyidNTjbvXPF7T/Oqhqmr/8aqq1EN1gNdUZ2OUlIQ7FrZtC+3bh6Fjx9DH3bEjHHQQdOkShoMPhsMOg65doUMHdZmIFKJ0Ar0bsDrhfTn7t75TLdMN2CfQzewG4AaAnj171rdWAA48MNwXZN/1pl42cXqqcbOax2uabxaerpM4Xv2+pGT/8WbNwniqoUWLcLpf8+ZhvHpo1QpatgyvrVqFR7K1agVt2oTWdevWYbxVKwWziOyVTqCniozk9mY6y+DuY4GxAKWlpQ1qs55+ehhERGRf6dzLpRzokfC+O7C2AcuIiEgWpRPo84FeZnakmbUEhgAzk5aZCVxjwWnAx9noPxcRkZrV2eXi7pVmNgJ4lnDa4nh3X2JmN0bzxwBPE05ZXEE4bfHa7JUsIiKppHUeurs/TQjtxGljEsYduCmzpYmISH3ofugiIgVCgS4iUiAU6CIiBUKBLiJSIMyzcU16Ohs2qwBWNfDjnYENGSwnU3K1Lsjd2lRX/aiu+inEug539y6pZsQW6I1hZmXuXhp3HclytS7I3dpUV/2orvoptrrU5SIiUiAU6CIiBSJfA31s3AXUIFfrgtytTXXVj+qqn6KqKy/70EVEZH/52kIXEZEkCnQRkQKRs4FuZpeb2RIzqzKzGk/vMbP+ZrbczFaY2ciE6QeZ2XNm9s/otWOG6qpzvWbW28zeTBi2mtl/RvN+ZmZrEuYNbKq6ouXeN7O3om2X1ffz2ajLzHqY2Ytm9nb0O/+PhHkZ3V81HS8J883M7o3mLzKzk9P9bJbrGhbVs8jM5pjZCQnzUv5Om6iufmb2ccLv56fpfjbLdf0ooabFZrbHzA6K5mVzf403s4/MbHEN87N7fLl7Tg5AH6A38HegtIZlSoB3gc8DLYGFwLHRvDuBkdH4SOC3GaqrXuuNalxHuBgA4GfAD7Owv9KqC3gf6NzYnyuTdQFdgZOj8XbAOwm/x4ztr9qOl4RlBgLPEJ7CdRowL93PZrmuM4CO0fiA6rpq+502UV39gFkN+Ww260pa/mLghWzvr2jdZwMnA4trmJ/V4ytnW+ju/ra7L69jsX89wNrddwHVD7Amep0QjU8ALslQafVd73nAu+7e0Kti09XYnze2/eXuH7r7G9H4J8DbhGfSZlptx0tivRM9mAt0MLOuaX42a3W5+xx33xy9nUt4Kli2NeZnjnV/JRkKPJahbdfK3V8GNtWySFaPr5wN9DTV9HBqgEM8empS9HpwhrZZ3/UOYf+DaUT059b4THVt1KMuB2ab2QILD+2u7+ezVRcAZnYEcBIwL2FypvZXbcdLXcuk89ls1pXoOkIrr1pNv9Omqut0M1toZs+Y2Rfr+dls1oWZtQH6A1MTJmdrf6Ujq8dXWg+4yBYzex44NMWs/3L3GemsIsW0Rp+HWVtd9VxPS+DrwI8TJv8R+AWhzl8AdwHfasK6vuLua83sYOA5M1sWtSoaLIP7qy3hH95/uvvWaHKD91eqTaSYlu4Dz7NyrNWxzf0XNDuXEOhnJkzO+O+0HnW9QehO3BZ9vzEd6JXmZ7NZV7WLgVfdPbHVnK39lY6sHl+xBrq7n9/IVdT2cOr1ZtbV3T+M/qT5KBN1mVl91jsAeMPd1yes+1/jZjYOmNWUdbn72uj1IzN7kvCn3svEvL/MrAUhzB9x92kJ627w/kqhMQ88b5nGZ7NZF2Z2PHA/MMDdN1ZPr+V3mvW6Ev7jxd2fNrP7zKxzOp/NZl0J9vsLOYv7Kx1ZPb7yvcultgdYzwSGR+PDgXRa/Omoz3r367uLQq3aN4CU3zVvcfYAAAEySURBVIZnoy4z+5yZtaseB76WsP3Y9peZGfAA8La7/z5pXib3V2MeeJ7OZ7NWl5n1BKYBV7v7OwnTa/udNkVdh0a/P8ysLyFTNqbz2WzWFdXTHjiHhGMuy/srHdk9vrLxTW8mBsI/3nJgJ7AeeDaafhjwdMJyAwlnRbxL6Kqpnt4J+Bvwz+j1oAzVlXK9KepqQziw2yd9/iHgLWBR9Avr2lR1Eb5BXxgNS3JlfxG6DzzaJ29Gw8Bs7K9UxwtwI3BjNG7A6Gj+WyScYVXTsZah/VRXXfcDmxP2T1ldv9MmqmtEtN2FhC9rz8iF/RW9/yYwKelz2d5fjwEfArsJ+XVdUx5fuvRfRKRA5HuXi4iIRBToIiIFQoEuIlIgFOgiIgVCgS4iUiAU6CIiBUKBLiJSIP4/tV74goDxnwwAAAAASUVORK5CYII=\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# input vector\n",
"x_train = np.linspace(-1,1,100)\n",
"\n",
"# set the network parameters\n",
"w1, b1 = 10, 0.\n",
"w2, b2 = 1, 0\n",
"\n",
"# affine operation (input layer)\n",
"l1 = w1*x_train + b1\n",
"\n",
"# Sigmoid activation\n",
"h = sig(l1)\n",
"\n",
"# output linear layer\n",
"y_train = w2*h+b2\n",
"\n",
"\n",
"plt.plot(x_train, y_train,'-b' )\n",
"plt.title('Sigmoid Activation')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Plot a few cases to become familiar with the activation"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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mgVjxxanBzo6oCQ1btas4hYW48cX11tdcklxNoCkankES1K/euQR+OQn4UMfgmWXheuvh5NOsrmSpEYtWACnnFIMvX7VVfCjH8FNN9lcSa3CI1iS+kUmnHFGcfrKiy/C975XDMM+dGjVySSpfUybVgy9fv318MEPFkOvr7tu1akk1fMIlqSmu/feYuj1/feHjTcuRgk8/HCbK0lq1H/+A0ceWdy+4u674cwz4corba6kVlRpgxURO0bEPRExIyIO6WT+ZyLijtp0fURsUjfvgYi4MyJuj4ib+ze5pEa88gocc0zRVN1+O5x2GkycCOutV3UyqXHWKlXt2muLxuroo+ETnygarH32caRVqVVVdopgRCwOnAxsD8wCJkfE+MycVrfYP4FtM/PpiNgJOA3Yom7+6Mx8ot9CS2rYtGnL8JWvwJ13wsc/XlxntdpqVaeSesZapSo9+ywcf/xILr4Y3vpWuPxy2HHHqlNJWpQqj2BtDszIzJmZORc4D9i1foHMvD4zn649vQFYs58zSuqh55+Hr34Vxo59F089BRddBH/8o82V2pa1SpW44IJi6PVLL12NAw+EqVNtrqR2EZlZzY4jPg7smJn7157vBWyRmWO7WP6bwPp1y/8TeBpI4FeZeVoX640BxgCstNJK7x43blzpP0uzzJkzh2HDhlUdo2Hmba52yPuPfwznxBNH8vjjS7Lzzg/yxS8+xNJLz686VsPa4T2u1255R48efUtmvqfqHD1hrVq0dvsctnrexx8fykknjeDaa1di3XXn8OUv38Y73+nv0WYxb3O1W97S6lRmVjIBuwO/qXu+F/DzLpYdDUwHVqh7bfXavysDU4BtFrXPkSNHZjuZOHFi1RF6xLzN1cp5H3kk81OfyoTMDTfMvO661s7blXbL3G55gZuzoprT28latWjt9jls1bzz52eeckrmsstmLrVU5nHHZc6d27p5u2Le5jJvc5VVp6o8RXAWsFbd8zWB2R0XioiNgd8Au2bmkwtfz8zZtX8fAy6kOI1DUj/KhN/+tjiN5YIL4LvfhVtvhfe9r+pkUmmsVWq6adNgm22Km69vthncdRd861swZEjVyST1RpUN1mRgRESsExFDgU8B4+sXiIi1gQuAvTLz3rrXl46IZRY+BnYA7uq35JKYMQO23x4+9znYaKNilMDvfAeWXLLqZFKprFVqmv/8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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"#weights and biases that we want to explore. weight1, bias1, weight2, bias2\n",
"weights1 = 1, 0, 1, 0\n",
"weights2 = 1, 0.5, 1, 0\n",
"weights3 = 1, 0.5, 1, -0.5\n",
"weights4 = 1, 0.5, 4, -.5\n",
"weights_list = [weights1, weights2, weights3, weights4]\n",
"\n",
"def simple_FFN(w1, b1, w2, b2, activation):\n",
" \"\"\"\n",
" Takes weights, biases, and an activation function and returns a simple prediction.\n",
" Arguments:\n",
" w1, w2: weights 1 and 2\n",
" b1, b2: biases 1 and 2\n",
" \"\"\"\n",
" # linear input layer\n",
" l1 = w1 * x_train + b1\n",
" #activation function + output linear layer\n",
" y_pred = w2 * activation(l1) + b2\n",
" return y_pred\n",
"\n",
"#make our plot\n",
"plt.figure(figsize=[12,8])\n",
"\n",
"for i, w_list in enumerate(weights_list):\n",
" \n",
" #make our weight dictionary then feed the dictionary as arguments to the FFN to get a prediction.\n",
" w_dict = dict(zip([\"w1\", \"b1\", \"w2\", \"b2\"], w_list))\n",
"# print(w_dict)\n",
" y_train_pred = simple_FFN(**w_dict, activation = g)\n",
" \n",
" #make the plot\n",
" plt.subplot(2, 2, i+1)\n",
" plt.plot(x_train, y_train_pred, 'b')\n",
" plt.ylim([-1,1])\n",
" plt.xlim([-1,1])\n",
" plt.title('w1, b1, w2, b2 = {}'.format(w_list))\n",
" plt.ylabel(\"y(x)\")\n",
" plt.xlabel(\"x\")\n",
" plt.grid('on')\n",
"plt.tight_layout()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Explore the sigmoid activation"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA1gAAAI4CAYAAAB3HEhGAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzdeZhcZZmw8fvJRiAJBEiAsBmQRdlFh02QIIusgqMooCC44Dj46aiMgw4qDiqOjusoAgICiiAuQNgMyiSA7AFZgmwBggTCHhI6+/J+f7zVpNJ0d6q7T9Wp6r5/1/VedarO9tTJyXn6OctbkVJCkiRJktR3g8oOQJIkSZL6CwssSZIkSSqIBZYkSZIkFcQCS5IkSZIKYoElSZIkSQWxwJIkSZKkglhgqSVExJSI+ETZcfRWs8QfEZ+KiB+VHUdZImL9iHgoIlYrOxZJ/U+zHOt7q1niN1eZq1qdBZYaJiJOj4gHImJpRJxW8LLPiYhHImJ5RBxf5LIry18vIi6JiGcjYk5E3BIRuxa07K0i4sqIeDEiXomISRGxdRHL7rCeYcCpwPeqPut2u0XE5yPiucp3Pr8nB/uI2DciHo6I+RExOSLe1IN5e72vRMRqlVjnVmL/Qvu4lNLzwGTgxJ4sU9LAYa7qctn9LldFxPiISBHRVtW+2oNYzVXqlAWWGmk68CXgmjos+z7gX4F76rBsgJHAXcDbgXWAC4FrImJkAcseDUwEtgbWB+4ErixguR0dDjycUnqm6rMut1tEvAc4BdgXGA9sDnyjlhVFxBjgj8BXydtrKvDbHsTal33lNGBL4E3APsCXIuLAqvEXA5/qxXIlDQzmqs71u1xVZXRKaWSlnd6D+cxV6pQFlvokIk6IiKuq3k+PiMuq3j8dETsBpJQuTCldB7zWy9W9OSLurJyhujIi1mkfkVL6WUrpBmBhPeJPKT2RUvpBSmlWSmlZSukcYBg50fQp/pTSnSml81JKr6SUlgA/BLaOiHV78l1qcBBwY/UHq9huHwXOSyk9mFKaDZwOHF/juv4ZeDCl9LuU0kJyItkxIt5Sy8x93FeOA05PKc1OKT0E/IKV474D2LwnV9QktTZzlbmqHsxV6ooFlvrqRmCviBgUEeOAocA7ASJic/LZtPsLWtdxwMeADYGlwE8KWGav4q8k4mHks1e1qjX+dwHPpZRe7mxkRJwSEa921bpZ//bAIz2Id1vyWcN29wHr15hMV5o3pTQPeLzyed1ExNrk7dsx7tfXm1JaSv5327GesUhqKuaq2g2kXNXuqYiYGRG/rNyBUVfmqv7PAkt9klJ6gnzmZidgb2AS8EzlSsXewM0ppeUFre5XKaVplT/Wvwp8MCIG92WBvYk/ItYEfgV8I6U0p8j4I2Jj4GfAFzpbQCXm76SURnfVuln/aHp2lm0kUP392odH9WLe9vlrmbcv2m+D6Rh3x/W+Rt4ekgYAc5W5qgsvAf9Evk3v7ZV5Lu7BunvLXNXPDSk7APULNwITgC0qw6+SD/i70+Eyfx89XTX8FPkM3hjg+T4ut+b4I2J14Crg9pTSGT1cT7fxR8RY4HrgzJTSJT3+Fqs2m54VOG3AmlXv24drSXwd522fv7e33NSqrWpdC6uGO653FPnfWdLAYa6qzYDJVSmlNvIzwgDPR8RngFkRsWZKaW4PYugpc1U/5xUsFaH9oL9XZfhG8kF/b4pNWptUDW8KLCGffeqrmuKv9Ep0BfAMvXvwtMv4K7cLXA9MTCl9q7uFRMRXOvR4tFLrZtb7ga16EO+DrHxrwo7A813dDtLdvBExAnhz5fO6qdx/P4s3xv36eiNiCPkPlPuQNJCYq2ozkHJVR6nyGr2Yt/aVmKv6PQssFeFGcg84q6eUZgI3AwcC6wJ/a58oIoZGxHDyfjckIoa333YQK7pKHd/Nej4SEdtExBrAfwG/Tyktq8w/rLLsAIZWlj2oMm5CRKSuF7vq+CNiKPB7YAFwXCe3YvQ6/sptHJOAW1JKp3QzPwAppW9X9Xb0htbNrNeSE3F13F1uN+Ai4OOVmNcmd5t7QdW8F0TEBXTucmC7iHh/ZflfA+5PKT1cmff4iJjRVaB93FcuAk6NiLUrt898sjpuYBdgRkrpqa7WL6lfMleZq1YSEbtGxNaRn21bl/y82ZT2WyrNVeq1lJLN1udGPhPzy6r3U4HrOkxzAfnsUHU7vjJuL2AGMLSL5U8BziB3CzuXfOvDmA7jOy57QmXcscCtfYmffLBPwHzypf32tldf4yf3gJSAeR2WvWnB/0ZDgX8AG9ay3Srjv0C+LWQu8EtgtapxNwCf7GZ9+wEPkxP9FGB81bivAhd3M29f9pXVgPMrMT8PfKHD+J8Bny37/4zNZmt8M1eZqzqs62jgycp3mkUuejaoGm+usvWqReUfUSpVRJwKvJhSOrsOyz4X+F1KaVLRy65aR93iL1JEnAhsk1L6tz4uZxj5toUdUu6ut6fzXw98LuWuaXs6b6+3dUSsRz4L/LaUu4+XpJqZqxrDXGWuanUWWJIkSZJUEJ/BkiRJkqSCWGBJkiRJUkEssCRJkiSpIP3yh4ZHjx6dtthii7LDqNm8efMYMWJE2WH0iDE3hjE3hjE3xt133/1SSmls2XE0g1bLU9Ca+5wxN4YxN4Yx119ReapfFljrr78+U6dOXfWETWLKlClMmDCh7DB6xJgbw5gbw5gbIyL8PZeKVstT0Jr7nDE3hjE3hjHXX1F5ylsEJUmSJKkgFliSJEmSVBALLEmSJEkqiAWWJEmSJBWk1AIrIs6PiBciYloX4ydExJyIuLfSvtboGCVJA5d5SpLUU2X3IngB8FPgom6muTmldGhjwpEkaSUXYJ6SJPVAqVewUko3Aa+UGYMkSV0xT0mSeipSSuUGEDEeuDqltF0n4yYAfwBmAs8CJ6eUHuxiOScCJwKMHTv27ZdddlmdIi5eW1sbI0eOLDuMHjHmxjDmxjDmxthnn33uTim9o+w4eso8lbXiPmfMjWHMjWHM9VdYnkopldqA8cC0LsatCYysDB8MPFbLMrfaaqvUSiZPnlx2CD1mzI1hzI1hzI0BTE0l55zeNPNU1or7nDE3hjE3hjHXX1F5qql7EUwpzU0ptVWGrwWGRsSYksOSJAkwT0mS3qipC6yI2CAiojK8Cznel8uNSpKkzDwlSeqo1F4EI+ISYAIwJiJmAl8HhgKklM4CPgB8OiKWAguAoyqX7yRJqjvzlCSpp0otsFJKR69i/E/J3eNKktRw5ilJUk819S2CkiRJktRKLLAkSZIkqSAWWJIkSZJUEAssSZIkSSqIBZYkSZIkFcQCS5IkSZIKYoElSZIkSQWxwJIkSZKkglhgSZIkSVJBLLAkSZIkqSAWWJIkSZJUEAssSZIkSSqIBZYkSZIkFcQCS5IkSZIKYoElSZIkSQWxwJIkSZKkglhgSZIkSVJBLLAkSZIkqSAWWJIkSZJUEAssSZIkSSqIBZYkSZIkFcQCS5IkSZIKYoElSZIkSQWxwJIkSZKkglhgSZIkSVJBLLAkSZIkqSAWWJIkSZJUEAssSZIkSSqIBZYkSZIkFcQCS5IkSZIKYoElSZIkSQWxwJIkSZKkglhgSZIkSVJBLLAkSZIkqSClFlgRcX5EvBAR07oYHxHxk4iYHhH3R8TOjY5RkjRwmackST1V9hWsC4ADuxl/ELBlpZ0I/LwBMUmS1O4CzFOSpB4YUubKU0o3RcT4biY5HLgopZSA2yNidESMSynNakiAkgaclGDJEli8eEVbsmRFW7r0jW3ZshWv7W358hVt2bK83OrP2lv75ynV3gAefXQj7rtvRcztn3d8rf5enQ139r6Icf2FeUrqmZTeePysPo4uXZpf24+bHY+d1cfQjsfS6mNmx+Nnx+NoZ8fV9vjgjcfQWl47Dnf2vohxXXniiU25/fa+L6eRnnhiU267rewoGq/UAqsGGwFPV72fWfnsDYkrIk4knz1k7NixTJkypRHxFaKtra2l4gVjbhRjXrVFiwbx6qtDee21obz22hBee20IbW1DmD9/CPPmDWb+/CHMnz+YBQtyW7hwMIsWDaq0wSxePIhFi3ZnyZKlLF48iCVLyr6wX6styw5A2YDIU+DxqFEaGXNKMH/+YF57bShz5gx5/Tg6b14+bra1DXn92Dl//hAWLhz0+jF04cJ8/Fy8eBALF+Zj6JIlg1i61GNo/WxedgC90Iox912zF1jRyWed1uoppXOAcwC23nrrNGHChDqGVawpU6bQSvGCMTfKQI55yRJ4+mn4xz/gqafy8LPPwqxZ+fX55+HFF2H+/O6Xs8YasOaaMGIEjByZX9dZB1ZffUWbPfsZNt98I1ZbDVZbDYYNy69Dh+bhoUNXDA8ZktvgwSuG2993bIMG5RbR+fuI3No/60n761//yl577UlUjpLtn7cPV7+2q37f3biOejuuo9VXr33aFjIg8hQM7ONRIxUV88KF+dj55JP5OPrMM/nY+cwz+fj5wgu5LV7c9TIi8nFz1KgVx88RI2DMmHxsbT+GvvxyPoYOH85Kx9H21n4MHTIkvw4evOK1q+Nn9TGzfbj9ONfx+NnxGNrdMbX9e3V2DK3lteNwZ++LGNeZm266iXe96119Xk4j3Xjjjey9995lh1Gz4cOLWU6zF1gzgU2q3m8MPFtSLJLq4NVXYdo0eOABePhhePTR3GbMyLd4VFtnHdhwQxg3DrbaCsaOXdHWWSe3tdeG0aNhrbXyHwRDajjKTZnyGBMmbFSX71cva621lHXWKTsKYZ5SyZ57Du67D/7+93wMfeSRfAyd1eEaagSstx5stFE+hu64Y34/diysu+6KY2j78bP9GDqohgtSHkMbY9iw5YUVAI0ybFhitdXKjqLxmr3Amgh8JiIuBXYF5nhfu9S62tpg6lS44w648848/I9/rBg/ciRsuSX80z/BMcfAZpvBm94Em24Km2xS3JklqUDmKTXMSy/l4+dtt8Fdd8G99+arUO3WWQfe8hZ4z3vgzW+G8eNz23TTXFQNHVpW5NLAUmqBFRGXABOAMRExE/g6MBQgpXQWcC1wMDAdmA+cUE6kknpjwQK4+WaYPDm3qVPzQ8uQk/8ee8CnPw3bb5/bJps0960OGnjMUyrT7NkwZQr85S9www356hTkW+S23x4OOSRfidpxR9huu3zrnqTyld2L4NGrGJ+AkxoUjqQCvPLKMM49F666Cv7851xkDRkCu+wCp5wCe+6Zr1Ctu27ZkUqrZp5Soz3zzHD+53/g8svh9tvzrdIjRsDee8MJJ8Buu8E73pE/k9Scmv0WQUktYO5c+OMf4Ve/gsmTdyelfGvfxz+ez7DuuWe+/U+S9EbPPgu//jVcfDHcf/9uALztbXDqqbD//vkE1bBhJQcpqWYWWJJ6JaV8dvWnP83F1cKFsMUWcNxxT/GFL4xn++293U+SurJ0KVx5JZx3HkyalK9U7bEHnHTSdE4+eQvGjy87Qkm91So/ViCpSSxaBBdemG/z22MPuPpq+NjH8kPXjz4Kxx8/gx12sLiSpM7MmQPf/34+IfWBD+QeVL/85Xz8vOUW+MAHZlpcSS3OK1iSarJoUT7TesYZMHMmbLMNnHkmHHust/9J0qq8/DJ897v5uNnWlp+p+vGP4dBDc6cVkvoPCyxJ3VqyBH7xixWF1TvfCeeeCwcc4FUqSVqVOXPgBz+AH/4wF1ZHHQUnnww771x2ZJLqxQJLUpcmTYLPfx4eeih3VHHBBfDud1tYSdKqLFsGZ5+dO6qYPTvfDnjaabDttmVHJqnefAZL0htMnw6HHQYHHpivYE2cCDfdBPvua3ElSaty++2557+TToKddoK774bf/c7iShooLLAkvW7Zsnwry/bbw4035ucFpk3LxZaFlSR1b+5c+NSnYPfd4bnn4NJL8w8EezugNLB4i6AkIPdgdcIJcOut+aHrs8+GDTcsOypJag033QQf/Sj84x/wxS/C178Oo0aVHZWkMngFSxrgUsrF1I47wt//DhddlG8JtLiSpFVbuDB3WjFhQu4N8Oab4X/+x+JKGsi8giUNYG1t+XaW3/wm9wr4y19aWElSrZ56Ct7//vyM1ac/nW+r9mcrJFlgSQPUtGlw5JH51sDTT4evfAUGeU1bkmoyaRIccwwsXQpXXAGHH152RJKahX9OSQPQxImw66656+C//CV3I2xxJUmrlhJ861tw0EGw0UYwdarFlaSV+SeVNICklHsJPOKI3F3w3/4G++xTdlSS1BoWL84dWZx6Khx9NNx2G2y5ZdlRSWo2FljSALFkSX5G4ItfzM8MTJkC48aVHZUktYZXX82/DfirX8E3vwm//jWMGFF2VJKakc9gSQPAggXwgQ/AtdfCKafk21u8JVCSavOPf+RbAh97LBdYH/lI2RFJamYWWFI/N3cuvPe9+Tdazjor9xooSarNo4/Cu9+de12dNMnbqiWtmgWW1I+9/HK+peXee3NX7EcdVXZEktQ6pk2D/faD5cvzSaoddig7IkmtwAJL6qeeey7/YfD447kL4UMOKTsiSWodf/sb7L8/DBsGkyfDW99adkSSWoUFltQPvfgi7Ltv/hHM666DCRPKjkiSWsfUqbm4WnNNuOEG2GKLsiOS1EossKR+5uWX85WrJ5/MnVpYXElS7e6/Hw44AEaPzr2tvulNZUckqdVYYEn9yKuv5j8MHnkErrrK4kqSeuLhh/OVqzXWgP/7P4srSb1jgSX1E/Pm5W6EH3ggP3O1//5lRyRJrePJJ/PVf8i3BW62WbnxSGpdFlhSP7BkSf6dqzvvhN//Hg4+uOyIJKl1PPdcfm51/vx8W+DWW5cdkaRWZoEltbjly+GEE+BPf4Jf/ALe976yI5Kk1jF3br76//zzubdAu2KX1FcWWFILSwlOPhkuvhi++U34xCfKjkiSWsfixfDP/5x/7+qqq2CXXcqOSFJ/YIEltbDvfx9++EP4f/8PvvKVsqORpNaxfDkcf3x+3urCC/OPsktSEQaVHYCk3vnd7+Df/x2OPBJ+9COIKDsiSWodp5wCl1wC3/kOHHdc2dFI6k8ssKQWdOutcOyxsMce+czrIP8nS1LNzj4bvvc9OOkk+NKXyo5GUn/jn2VSi3n8cTj8cNhkE7jySlh99bIjkqTWMWlSLqwOPtir/5LqwwJLaiGvvJL/KEgJrr0WxowpOyJJah3TpuXbqrfbDi69FIb4JLqkOvDQIrWI9t+6mjEjP5S95ZZlRyRJreO55+CQQ2DUKLj66vwqSfVggSW1gJTyLS2TJ8OvfgV77ll2RJLUOhYsgCOOgJdegptvho03LjsiSf2ZBZbUAn70o/wjwl/5CnzkI2VHI0mtIyX4+Mfhjjvgj3+EnXcuOyJJ/V2pz2BFxIER8UhETI+IUzoZPyEi5kTEvZX2tTLilMp0zTXwxS/C+98Pp59edjTSwGOuam3f+lbujv3b34b3va/saCQNBKVdwYqIwcDPgP2BmcBdETExpfT3DpPenFI6tOEBSk3gySdH8NnPwtveZnfsUhnMVa3txhvHctpp+cr/KW8ojSWpPsr8c20XYHpK6YmU0mLgUuDwEuORmsqLL8JXvrIdo0bl7thHjCg7ImlAMle1qLvvhjPOeAu7755vsbY7dkmNUmaBtRHwdNX7mZXPOto9Iu6LiOsiYtvGhCaVa/HifEvgK68M44orfCBbKpG5qgXNmpV/L3D06CVcfjkMH152RJIGkkgplbPiiCOB96SUPlF5fyywS0rp/1VNsyawPKXUFhEHAz9OKXXaOXVEnAicCDB27Ni3X3bZZXX/DkVpa2tj5MiRZYfRI8ZcPynB9763NdddN46TT76HQw6ZW3ZIPdIq27maMTfGPvvsc3dK6R1lx9ETReaqVs5T0Dr73KJFg/i3f9uJGTNG8N3v/pXtty/n75zeapXtXM2YG8OY66+wPJVSKqUBuwOTqt5/GfjyKuaZAYxZ1bK32mqr1EomT55cdgg9Zsz18/3vpwQpnXpq68RczZgboxVjBqamknJOb1u9clWr5amUWmOfW748paOOSikipSuuaI2YOzLmxjDmxmi1mIvKU2XeIngXsGVEbBYRw4CjgInVE0TEBhH5rumI2IV8S+PLDY9UapCrr4aTT863B37jG2VHIwlzVUs5/XS49NLcY+DhPiknqSSl9SKYUloaEZ8BJgGDgfNTSg9GxL9Uxp8FfAD4dEQsBRYAR1WqS6nfuf9+OPro/BstF11kj4FSMzBXtY7f/ha+/nU47jj4j/8oOxpJA1mpPzScUroWuLbDZ2dVDf8U+Gmj45Ia7fnn4bDDYM01c4+Ba6xRdkSS2pmrmt8dd8Dxx8Oee8I559hjoKRylVpgSYIFC+CII3K37DffDBt11j+ZJKlTTz0F730vbLghXH45rLZa2RFJGugssKQSLV+eb2e54w743e/g7W8vOyJJah1z5+ar/4sWwZQpMGZM2RFJkgWWVKovfxl+/3v4n//JHVtIkmqzZAkceST8/e9w3XXw1reWHZEkZRZYUknOOgu++13413+FL3yh7GgkqXWkBP/yL3D99XDeebD//mVHJEkr2E+ZVIJrr4WTToKDD4Yf/9gHsiWpJ775TTj/fPja1+BjHys7GklaWbdXsCJiOHAosBewIbn72WnANSmlB+sfntT/3HFHvq1lxx1zt8JDvI4s9Ym5amC58MJcWB13HJx2WtnRSNIbdfmnXUScBhwGTAHuAF4AhgNbAd+pJLQvppTur3+YUv/w8MNwyCEwblx+ZmDkyLIjklqbuWpgueoq+PjHYd994Re/8Oq/pObU3bnzu1JKp3Ux7gcRsR6wafEhSf3TzJlwwAH5itX118P665cdkdQvmKsGiJtugg9+MP8Y++WXw7BhZUckSZ3rssBKKV0D+daLlNLC6nERMSal9AL5TKGkVXj5ZXjPe2DOHLjxRth887IjkvoHc9XA8Le/5e7YN9ssP8M6alTZEUlS12rp5OKuiNit/U1EvB+4tX4hSf3Lq6/mK1ePPw5XXgk77VR2RFK/ZK7qpx59FA48EEaPzlf//a0rSc2ulsfrjwHOj4gp5IeH1wXeXc+gpP5i7tx85WraNLjiCpgwoeyIpH7LXNUPPfYY7LNP7pb9+uth443LjkiSVm2VBVZK6YGI+BbwK+A14F0ppZl1j0xqcW1tcNBBcM898Ic/5GFJ9WGu6n8eeyyflFqyBP7v/2DrrcuOSJJqs8oCKyLOA94M7EDulemqiPhpSuln9Q5OalVz5+bnBe64I3fF/t73lh2R1L+Zq/qX6dPzlavFi2HyZNhuu7IjkqTa1fIM1jRgn5TSkymlScBuwM71DUtqXS+/nLsQvuUWuPhieP/7y45IGhDMVf3EQw/lK1cLF+YrVxZXklpNLbcI/rDD+znAx+sWkdTCZs2C/ffPZ18vvzxfxZJUf+aq/uGOO+Dgg2Ho0Fxcbb992RFJUs91eQUrIq6KiMMiYmgn4zaPiP+KiI/VNzypdTz5JOy5Jzz1VP4RYYsrqf7MVf3H9dfnq/+jR+c7AHbYoeyIJKl3uruC9UngC8API2I28CIwHBgPPA78NKV0Zd0jlFrAbbfB4YfD0qXwl7/ArruWHZE0YJir+oFLLoGPfhTe+lb4059g3LiyI5Kk3uvuh4afA74UEU8DfyUnrAXAoyml+Q2KT2p6v/1t/sNg443hmmvs6UpqJHNVa1u+HL7+dfjmN2GvvWDixHwFS5JaWS2dXKwP/A74PLABOXFJA15K+Y+Co46CXXaB22+3uJJKZK5qMfPmwZFH5uPoCSfAn/9scSWpf1hlgZVSOhXYEjgPOB54LCK+HRFvrnNsUtOaPRuOOAK++lU49tj8h8GYMWVHJQ1c5qrW8sQT+ZnVK66AH/wAzjsPVlut7KgkqRi1XMEipZSA5yptKbA28PuI+G4dY5Oa0l13wc47544sfvxjuPBC/zCQmoG5qjX89rfwtrfBjBlw9dXw+c9DRNlRSVJxVllgRcRnI+Ju4LvALcD2KaVPA28H/IUfDRjLl8OPfgTvfGcevvlm+Oxn/cNAagbmquY3fz588pP5tuptt4V774WDDio7Kkkq3ip/BwsYA/xzSump6g9TSssj4tD6hCU1l+nT4WMfy0XVoYfCBRfAuuuWHZWkKuaqJvbXv8InPgGPPgpf/jJ84xv5t64kqT+q5Rmsr3VMWFXjHio+JKl5LF8OP/lJ/j2W++6D88/PvVxZXEnNxVzVnObOhZNOyj0ELlyYf+vq29+2uJLUv9X0DJY0EN16a+4d8HOfgwkT4MEHc09X3hIoSd1LCX7/+3wr4M9/no+j06bBfvuVHZkk1Z8FltTBzJnw4Q/nZ61mzYJf/zr/vtXGG5cdmSQ1vzvuyFesjjwyd7t+6635+dWRI8uOTJIawwJLqpg1K/dmteWW8Ic/wKmnwiOP5GLLq1aS1L2HHoJjjoHddsvPrZ5zDvztb/m9JA0ktXRyIfVrzzwD3/senH02LFmSf9fq61+H8ePLjkySmt899+Tnqv74R1h99Xxy6ktfglGjyo5MksphgaUBKSW45Rb43//NfxSkBMcdB//5n/Bmf5ZUkrq1dClcdRWceSb85S+w1lr5+PnZz8LYsWVHJ0nlssDSgPLCC3DppfDLX+bfYBk9Oj98fdJJsNlmZUcnSc3tiSfyj6ufey48+2x+NvXb34Z//ddcZEmSLLA0ALzyClx7Lfz0p9szdSosWwZve1u+JfDDH4YRI8qOUJKa1zPPwGWXwTnn7MzDD+dnUg88MPcOePDBMMS/JCRpJR4W1e+kBH//O0yalH+z6q9/zUXVeuuN4N//HT7ykdx1sCTpjZYtgzvvzL2nXntt7qgCYMstg+9+Fz70Idh003JjlKRmZoGllrd0af59ldtugylTcnvhhTxu++3hlFPgsMNg3rzbefe7J5QWpyQ1owULckcVN98MN92Un0+dOxcGD4Y99oAzzoD3vQ9mzbqbCRMmlB2uJDU9Cyy1lHnz8g/+PvBAbnffnduCBXn8RhvBAQfAPvvAvvvCm960Yt4pU0oJWZKaxosv5mPogw/mK1NTp+YTVMuW5fHbbJO7Wp8wIR9L1157xbyzZgz8dsgAACAASURBVJUSsiS1HAssNZWU8h8ATz0F//hHfn3ssRXt6afzNABrrAE77gif+hTssgvsumvuqMLfrJI0UC1dmguhp5/Ox9DHH8+/STV9ev5dvxdfXDHtuuvCO94Bhx6aX9/5TnsAlKQilFpgRcSBwI+BwcC5KaXvdBgflfEHA/OB41NK9zQ8UPXawoX5VpM5c3JnE7Nn5/biiyvaCy/kPwja2+LFKy9j7bVhq63gXe/Kr9tvn9tmm8EgfypbUp2VlatSgvnz8/Hz1Vdzmz0bXn4ZXnoptxdfhOeey23WrPzafjWq3YYb5p+fOOyw/Pxpe9toI09ISVI9lFZgRcRg4GfA/sBM4K6ImJhS+nvVZAcBW1barsDPK6+rtHTpGz9rv/LRle7GV4/rOF1X71Pqflz7a1vbEGbPXnn69uGObfnyzt8vX/7GtmzZiteOw0uXrnitbkuWrNwWL17RFi3KbeFCeOKJrTj//Hxr3vz5+XXevNza2nJ77bU3FkvVIvIZ1LFj8x8Ae+2VXzfaKN/a196qb1GRpEaqV656/vnhfPjD+djZfhxtP4bOm5dPTL32Wj5ud2XIEBgzBjbYAMaNyyeeNtwQNtkkd0KxySb5RJQ9pUpSY5V5BWsXYHpK6QmAiLgUOByoTlqHAxellBJwe0SMjohxKaVu7wR/9NFRDB1ar7DrYc+yA6jZ8OG5DRq0LmuuCauvnm/VW331XAhtsgmMHJkT+pprrmhrrZXHr7NOfl133Tw8eHDZ30iSulWXXNXWNoTbb8/Hzvbj6Hrr5WNn9fFz1Kj8uvbauY0enYuqMWPy516BkqTmU2aBtRHwdNX7mbzxjF9n02wEvCFpRcSJwIkAI0ZswYc+9GSnK41YxWWsblQnso5JravlRqx62sWLFzF8+GpAWmn6/Lris9xSJ8P5ddCgxKBBvD4ckRg8OI8fNKjjcHuj8rr89fdDhixnyJBUacsZOnQ5Q4fm6dtja2trY+TIkT3ehosWrbidpdHa2tqY0mI9XRhzYxizulFYrqrOU2PHjuW886b0OJgFC/LzVU8/veppi9aK+5wxN4YxN4Yxt44yC6zOzrt1rFJqmSZ/mNI5wDkAW2+9dTrvvM36Fl0DTZkypeW6vjXmxjDmxjBmdaOwXNUxT7Xav18r7nPG3BjG3BjG3DrK7CJgJrBJ1fuNgWd7MY0kSfVirpIk9UiZBdZdwJYRsVlEDAOOAiZ2mGYicFxkuwFzVvX8lSRJBTJXSZJ6pLRbBFNKSyPiM8Akcte356eUHoyIf6mMPwu4ltzt7XRy17cnlBWvJGngMVdJknqq1N/BSildS05M1Z+dVTWcgJMaHZckSe3MVZKknvBnWiVJkiSpIBZYkiRJklQQCyxJkiRJKogFliRJkiQVxAJLkiRJkgpigSVJkiRJBbHAkiRJkqSCWGBJkiRJUkEssCRJkiSpIBZYkiRJklQQCyxJkiRJKogFliRJkiQVxAJLkiRJkgpigSVJkiRJBbHAkiRJkqSCWGBJkiRJUkEssCRJkiSpIBZYkiRJklQQCyxJkiRJKogFliRJkiQVxAJLkiRJkgpigSVJkiRJBbHAkiRJkqSCWGBJkiRJUkEssCRJkiSpIBZYkiRJklQQCyxJkiRJKogFliRJkiQVxAJLkiRJkgpigSVJkiRJBbHAkiRJkqSCWGBJkiRJUkEssCRJkiSpIBZYkiRJklSQIWWsNCLWAX4LjAdmAB9MKc3uZLoZwGvAMmBpSukdjYtSkjSQmaskSb1R1hWsU4AbUkpbAjdU3ndln5TSTiYsSVKDmaskST1WVoF1OHBhZfhC4IiS4pAkqSvmKklSj0VKqfErjXg1pTS66v3slNLanUz3JDAbSMDZKaVzulnmicCJAGPHjn37ZZddVnzgddLW1sbIkSPLDqNHjLkxjLkxjLkx9tlnn7tb6QpP0bmqlfMUtOY+Z8yNYcyNYcz1V1ieSinVpQF/AaZ10g4HXu0w7ewulrFh5XU94D7gXbWse6uttkqtZPLkyWWH0GPG3BjG3BjG3BjA1FSnnNPbVlauarU8lVJr7nPG3BjG3BjGXH9F5am6dXKRUtqvq3ER8XxEjEspzYqIccALXSzj2crrCxFxObALcFNdApYkDTjmKklS0cp6Bmsi8NHK8EeBKztOEBEjImJU+zBwAPmsoiRJjWCukiT1WFkF1neA/SPiMWD/ynsiYsOIuLYyzfrAXyPiPuBO4JqU0p9KiVaSNBCZqyRJPVbK72CllF4G9u3k82eBgyvDTwA7Njg0SZIAc5UkqXfKuoIlSZIkSf2OBZYkSZIkFcQCS5IkSZIKYoElSZIkSQWxwJIkSZKkglhgSZIkSVJBLLAkSZIkqSAWWJIkSZJUEAssSZIkSSqIBZYkSZIkFcQCS5IkSZIKYoElSZIkSQWxwJIkSZKkglhgSZIkSVJBLLAkSZIkqSAWWJIkSZJUEAssSZIkSSqIBZYkSZIkFcQCS5IkSZIKYoElSZIkSQWxwJIkSZKkglhgSZIkSVJBLLAkSZIkqSAWWJIkSZJUEAssSZIkSSqIBZYkSZIkFcQCS5IkSZIKYoElSZIkSQWxwJIkSZKkglhgSZIkSVJBLLAkSZIkqSAWWJIkSZJUEAssSZIkSSqIBZYkSZIkFaSUAisijoyIByNieUS8o5vpDoyIRyJiekSc0sgYJUkDm7lKktQbZV3Bmgb8M3BTVxNExGDgZ8BBwDbA0RGxTWPCkyTJXCVJ6rkhZaw0pfQQQER0N9kuwPSU0hOVaS8FDgf+XvcAJUkDnrlKktQbpRRYNdoIeLrq/Uxg164mjogTgRMrbxdFxLQ6xla0McBLZQfRQ8bcGMbcGMbcGFuXHUAd1JyrWjxPQWvuc8bcGMbcGMZcf4XkqboVWBHxF2CDTkb9Z0rpyloW0clnqauJU0rnAOdU1j01pdTl/fLNptXiBWNuFGNuDGNujIiYWnYMHTUyV7VyngJjbhRjbgxjboxWi7moPFW3AiultF8fFzET2KTq/cbAs31cpiRJrzNXSZKK1szdtN8FbBkRm0XEMOAoYGLJMUmSVM1cJUlaSVndtL8vImYCuwPXRMSkyucbRsS1ACmlpcBngEnAQ8BlKaUHa1zFOXUIu55aLV4w5kYx5sYw5sZoqZjrnKtaaltUGHNjGHNjGHNjtFrMhcQbKXX5WJMkSZIkqQea+RZBSZIkSWopFliSJEmSVJCWLLAi4siIeDAilkdEl10/RsSBEfFIREyPiFOqPl8nIv4cEY9VXtduQMyrXGdEbB0R91a1uRHxb5Vxp0XEM1XjDm6GmCvTzYiIBypxTe3p/I2OOSI2iYjJEfFQZT/6XNW4hm3nrvbPqvERET+pjL8/Inaudd4SY/5wJdb7I+LWiNixalyn+0nJ8U6IiDlV/95fq3XeEmP+96p4p0XEsohYpzKu4du4st7zI+KF6OJ3nZpxX26EMFeZq/oQczRBrqrheNR0/7driLmp8lSNMZur+h5vY/NUSqnlGvBW8g+BTQHe0cU0g4HHgc2BYcB9wDaVcd8FTqkMnwL8dwNi7tE6K/E/B7yp8v404OQGb+eaYgZmAGP6+p0bFTMwDti5MjwKeLRq32jIdu5u/6ya5mDgOvLv7OwG3FHrvCXGvAewdmX4oPaYu9tPSo53AnB1b+YtK+YO0x8G/F9Z27hqve8CdgamdTG+qfblBm4Xc1VjtrO5qj4xmqcas/+aqxqznRuap1ryClZK6aGU0iOrmGwXYHpK6YmU0mLgUuDwyrjDgQsrwxcCR9Qn0pX0dJ37Ao+nlJ6qa1Td6+t2asrtnFKalVK6pzL8Grnnr40aEFu17vbPdocDF6XsdmB0RIyrcd5SYk4p3ZpSml15ezv5N4HK0pft1LTbuIOjgUsaEFe3Uko3Aa90M0mz7csNYa5qGHNVfZinGsNc1QCNzlMtWWDVaCPg6ar3M1lxYFo/pTQL8gEMWK8B8fR0nUfxxp3xM5XLluc34hYGao85AddHxN0RcWIv5i9Sj9YZEeOBtwF3VH3ciO3c3f65qmlqmbceerrej5PPBrXraj+pl1rj3T0i7ouI6yJi2x7OW7Sa1xsRawAHAn+o+rjR27hWzbYvNxNzVd+Zq+qznc1TjWGuag6F7stDCg2tQBHxF2CDTkb9Z0rpyloW0clnde2TvruYe7icYcB7gS9Xffxz4HTydzgd+D7wsd5FutK6ioj5nSmlZyNiPeDPEfFw5UxBXRS4nUeS/8P/W0ppbuXjumznzlbfyWcd98+upmn4vl1R83ojYh9y4tqz6uOG7ifUFu895Fub2irPMFwBbFnjvPXQk/UeBtySUqo+I9fobVyrZtuXC2OuMld1pR/kKvNUY46h5qrmyFWF7stNW2CllPbr4yJmAptUvd8YeLYy/HxEjEspzapc/nuhj+sCuo85InqyzoOAe1JKz1ct+/XhiPgFcHWzxJxSerby+kJEXE6+nHoTTbydI2IoOWFdnFL6Y9Wy67KdO9Hd/rmqaYbVMG891BIzEbEDcC5wUErp5fbPu9lPSou36o8VUkrXRsSZETGmlnnrpCfrfcOVgxK2ca2abV8ujLnKXFXPmEvOVeapxhxDzVXNkasK3Zf78y2CdwFbRsRmlbNsRwETK+MmAh+tDH8UqOUsY1/1ZJ1vuFe1cgBu9z6g015QCrbKmCNiRESMah8GDqiKrSm3c0QEcB7wUErpBx3GNWo7d7d/tpsIHBfZbsCcyq0ktcxbSswRsSnwR+DYlNKjVZ93t5+UGe8Glf2BiNiFfEx8uZZ5y4q5EutawN5U7d8lbeNaNdu+3EzMVX1nrqrPdjZPNWb/NVc1R64qdl9ODezBo6hGPpjMBBYBzwOTKp9vCFxbNd3B5F53HiffrtH++brADcBjldd1GhBzp+vsJOY1yP9p1uow/6+AB4D7K/+w45ohZnKvKvdV2oOtsJ3JtwOkyra8t9IObvR27mz/BP4F+JfKcAA/q4x/gKpeyLratxuwfVcV87nA7KrtOnVV+0nJ8X6mEs995Ied92j2bVx5fzxwaYf5StnGlXVfAswClpCPzR9v9n25QdvFXGWu6kvMpeeqVR2PmvH/dg0xN1WeqjFmc1Xf421onorKjJIkSZKkPurPtwhKkiRJUkNZYEmSJElSQSywJEmSJKkgFliSJEmSVBALLEmSJEkqiAWWJEmSJBXEAkuSJEmSCmKBJTWhiPiniLg/IoZXfvX8wYjYruy4JEkC85TUHX9oWGpSEfFNYDiwOjAzpXRGySFJkvQ685TUOQssqUlFxDDgLmAhsEdKaVnJIUmS9DrzlNQ5bxGUmtc6wEhgFPkMoSRJzcQ8JXXCK1hSk4qIicClwGbAuJTSZ0oOSZKk15mnpM4NKTsASW8UEccBS1NKv4mIwcCtEfHulNL/lR2bJEnmKalrXsGSJEmSpIL4DJYkSZIkFcQCS5IkSZIKYoElSZIkSQWxwJIkSZKkglhgSZIkSVJBLLAkSZIkqSAWWJIkSZJUEAssSZIkSSqIBZYkSZIkFcQCS5IkSZIKYoElSZIkSQWxwJIkSZKkglhgqSlExJSI+ETZcfRWs8QfEZ+KiB+VHUerioj3RsSlZcchqTk1y7G+t5olfnNV35irmp8FlgoTEadHxAMRsTQiTit42edExCMRsTwiji9y2ZXlrxcRl0TEsxExJyJuiYhdC1r2VhFxZUS8GBGvRMSkiNi6iGV3WM8w4FTge1WfdbvdIuLzEfFc5TufHxGr1biu8RGRIqKtqn21B7EWuq9ExDER8VREzIuIKyJinW6mnRERC6rivr59XEppIrBdROzQ15gkNSdzVZfLNletPG/h29pcNXBYYKlI04EvAdfUYdn3Af8K3FOHZQOMBO4C3g6sA1wIXBMRIwtY9mhgIrA1sD5wJ3BlAcvt6HDg4ZTSM1WfdbndIuI9wCnAvsB4YHPgGz1c5+iU0shKO70H8xW2r0TEtsDZwLHk7TsfOHMVsx1WFfcBHcZdApzY17gkNS1zVefMVSsrdFubqwYWCyx1KyJOiIirqt5Pj4jLqt4/HRE7AaSULkwpXQe81svVvTki7qycKbqy+sxOSulnKaUbgIX1iD+l9ERK6QcppVkppWUppXOAYeRE06f4U0p3ppTOSym9klJaAvwQ2Doi1u3Jd6nBQcCN1R+sYrt9FDgvpfRgSmk2cDpwfMExdaqAfaXah4GrUko3pZTagK8C/xwRo3q5vCnAIQXEJalBzFXmqqIVtK2rmasGEAssrcqNwF4RMSgixgFDgXcCRMTm5DM89xe0ruOAjwEbAkuBnxSwzF7FX0nEw8hnOmtVa/zvAp5LKb3c2ciIOCUiXu2qdbP+7YFHehDvtuSzhu3uA9bvYTJ9KiJmRsQvI2JMD+Yr0krfI6X0OLAY2KqbeS6u3AZzfUTs2GHcQ8D4iFiz+FAl1Ym5qnbmql7o5bauZq4aQCyw1K2U0hPks3w7AXsDk4BnIuItlfc3p5SWF7S6X6WUpqWU5pHP7HwwIgb3ZYG9ib9ysPoV8I2U0pwi44+IjYGfAV/oJubvpJRGd9W6Wf9oenZGdiRQ/f3ah2s5m/YS8E/Am8i3T4wCLu7BuovU8XtQed/V9/gw+TaTNwGTgUkRUb1d27dhd9taUhMxV5mrulBIrurDtq5mrhpALLBUixuBCeSzWTeSL0vvXWk3djlXzz1dNfwU+QxeEVdFao4/IlYHrgJuTymd0cP1dBt/RIwFrgfOTCld0sNl12I2tSWcdm1A9Zmv9uFVJr6UUltKaWpKaWlK6XngM8AB9T6TFhF7VT3w+2Dl447fg8r7Tr9HSumWlNKClNL8yr/xq8BeVZO0b8PuzsBKaj7mqtqYq3qQq3qzrc1VssBSLdoP+ntVhm+kPklrk6rhTYEl5LNPfVVT/JF7JboCeAb4VC/W02X8EbE2OWFNTCl9q7uFRMRXYuUej1Zq3cx6P93fatDRg0D1LQc7As93dTvIKqTKa/Ri3tpXktLNVQ/8blv5eKXvUbmdZjXg0VoXy8pxvxWYkVKaW0TMkhrGXFUbc1WNuaq329pcJQss1eJGYB9g9ZTSTOBm4EBgXeBv7RNFxNCIGE7er4ZExPD22w5iRVep47tZz0ciYpuIWAP4L+D3KaVllfmHVZYdwNDKsgdVxk2IiNT1Ylcdf0QMBX4PLACO6+RWjF7HXzlTNgm4JaV0SjfzA5BS+nbVgfkNrZtZryUn4uq4u9xuwEXAxysxr03uNveCqnkviIgL6ERE7BoRW1eeF1iXfA//lPZbJyLi+IiY0VWgBewr1S4GDqucMRxB3vZ/TCm94axgRGwaEe9s3y4R8e/kM7e3VE22N3BdjeuW1DzMVeaqlfQlVxW0rauZqwaSlJLNtsoGzAJ+WfV+KnBdh2kuIJ9hqW7HV8btBcwAhnax/CnAGeRuYeeSL8eP6TC+47InVMYdC9zal/jJB6pE7ja1rart1df4yT0gJWBeh2VvWvC/0VDgH8CGtWy3yvgvAM9XYv4lsFrVuBuAT3axrqOBJyvfaRY5AW5QNf6rwMXdxNrrfaWL5R1T+e7zyN0Kr1M17izgrMrwtuSzp/OAlyvf8R0dlvUAsGPZ/+dsNlvP26qO9ZXPen386e5YXzXeXNX9d2yJXNXXbd3FMs1VA6RF5R9JqquIOBV4MaV0dh2WfS7wu5TSpKKXXbWOusVfpIg4EdgmpfRvfVzOMHJvRzuk3F1vT+e/HvhcSumhXsxb2raOiMOAY1NKH2z0uiWVz1zVGOaqvjFXNT8LLEmSJEkqiM9gSZIkSVJBLLAkSZIkqSAWWJIkSZJUkCFlB1APo0ePTltssUXZYdRs3rx5jBgxouwwesSYG8OYG8OYG+Puu+9+KaU0tuw4mkGr5SlozX3OmBvDmBvDmOuvqDzVLwus9ddfn6lTp5YdRs2mTJnChAkTyg6jR4y5MYy5MYy5MSLiqbJjaBatlqegNfc5Y24MY24MY66/ovKUtwhKkiRJUkEssCRJkiSpIBZYkiRJklSQUgusiDg/Il6IiGldjJ8QEXMi4t5K+1qjY5QkDVzmKUlST5XdycUFwE+Bi7qZ5uaU0qGNCUeSpJVcgHlKktQDpRZYKaWbImJ8mTFIktQV85TUv6QEy5fDsmXBkiV5OKWuW/s81cOdva5qXGfvezru5ZeHMWvWqr9fM3nppWE8+2zX45st3qKUfQWrFrtHxH3As8DJKaUHyw5IkqQq5ikNaCnBa6/B3Lm5vfZabvPmrWjz58OCBSvaokWwcGF+XbQIFi9e0ZYsWdGWLl3R2t8vW9Z5W768vXhaMdxeULUPr7B3WZurD/YoO4BeaMWY+y5SyaVj5czg1Sml7ToZtyawPKXUFhEHAz9OKW3ZxXJOBE4EGDt27Nsvu+yy+gVdsLa2NkaOHFl2GD1izI1hzI1hzI2xzz773J1SekfZcfSUeSprxX3OmPsSx2BeeGE4L700jFdeGcYrr6zG7NlDmTNnRXvttaG0tQ2hrW0Iy5dHzcseOnQ5w4blNnRoe0sMHbqcwYPz65AhicGDc2sfHjQot/bPBw1ipc8i2t9DxBtf28cDLFmymOHDhwIQ0d5Sp++rP8tWTFf9uvJwesO4zt7XOg4SixYtYrXVVutuohqW01i1xNxM8X7/+28pJE81dYHVybQzgHeklF7qbrqtt946PfLII4XE1wit9iNsYMyNYsyNYcyNERH9rsDqZNoZ9MM8Ba25zxlz11KCZ5+FBx+E6dNze+wxePJJePrpfCWqoxEjYOzY3MaMgbXXzm3u3BnssMN41loLRo2CNdeEkSPz9O1tjTVg9dVh+HAY1AR9WLtvNEarxVxUnmrqWwQjYgPg+ZRSiohdyL0evlxyWJIkAeYptYZly+Dhh+Guu3K7/36YNg1efXXFNGusAVtskdu++8Kmm8Imm8CGG8K4cbD++rlo6syUKTOYMGF8Q76L1ApKLbAi4hJgAjAmImYCXweGAqSUzgI+AHw6IpYCC4CjUtmX3CRJA4Z5Sq1oyRK4+26YPDm3226DtrY8btQo2GknOPpo2G472HZb2Gor2GCD5rpVS2plZfciePQqxv+U3D2uJEkNZ55Sq3jlFbjmGpg4ESZNyp1MQC6iPvpR2GWX3Lbaqjlu0ZP6s6a+RVCSJEmda2uDP/4RLroIpkzJtwKOGwdHHQUHHAB7752fl5LUWBZYkiRJLeS22+Css+APf8hdoG++OZxyChx+OLz97V6hkspmgSVJktTkli7NV6t++EO4/fbcU98xx8Bxx8E73+nzU1IzscCSJElqUsuWwa9/DaedBjNmwJvfDP/7v3D88V336iepXF5EliRJajIpwZVXwg475GJq3XXh8svhkUfgM5+xuJKamQWWJElSE3n4YZgwAY44It8a+Lvf5d+vOuIIGDy47OgkrYq3CEqSJDWBRYvgwgvfxG9+k3/49+c/h098Aob415rUUvwvK0mSVLJ77oGPfAQeemgzjjoKfvQjWH/9sqOS1BveIihJklSSlODMM2H33WHuXDjjjPu55BKLK6mVWWBJkiSVYM4c+NCH4KSTYL/94N57YbfdXik7LEl95C2CkiRJDfb443DQQfDEE/Df/w0nn+wPBEv9hQWWJElSA915Jxx6KCxfDpMnw157lR2RpCJ5rkSSJKlBrr4a9tkn/47VrbdaXEn9kQWWJElSA1x4IRx+OGyzDdx2G2y1VdkRSaoHCyxJkqQ6+81v4IQTYN99822B9hIo9V8+gyVJklRHf/gDHHccTJgAV14Jq69edkSS6skrWJIkSXVy1VVw1FGw224wcaLFlTQQWGBJkiTVwV//Ch/4AOy0E1xzTe7YQlL/Z4ElSZJUsCefhPe9D8aPh0mTYK21yo5IUqNYYEmSJBVo7lw47DBYujTfIrjOOmVHJKmR7ORCkiSpIMuWwTHHwMMPw5/+ZFfs0kBkgSVJklSQL385P2915pmw335lRyOpDN4iKEmSVIBrroHvfQ8+/encJA1MFliSJEl9NGsWHH887Lgj/OAHZUcjqUwWWJIkSX2wfDkceyzMnw+XXgrDh5cdkaQy+QyWJElSH3zve3DDDXDuufCWt5QdjaSyeQVLkiSpl+66C049FT74QfjYx8qORlIzsMCSJEnqhcWL4YQTYNw4OPtsiCg7IknNwFsEJUmSeuG//xsefBCuvhpGjy47GknNwitYkiRJPfTQQ/DNb8JRR8Ehh5QdjaRmYoElSZLUA8uXwyc/CSNHwo9/XHY0kpqNtwhKkiT1wNlnwy23wAUXwHrrlR2NpGbjFSxJkqQaPfcc/Md/wH77wXHHlR2NpGZkgSVJklSj//xPWLgQzjzTXgMldc4CS5IkqQb33AO//CV87nOw5ZZlRyOpWZVaYEXE+RHxQkRM62J8RMRPImJ6RNwfETs3OkZJ0sBlnlK7lHJhNWZM/mFhSepK2VewLgAO7Gb8QcCW/7+9Ow+Toyz3Pv69yUII+xJWo4IGAigIIiqbAUV2eBWRiCIgGEEWUQMiHhFFBVRWiQQiIIosQVGB5BxEIAcjIiCHLYGQDcgGERKyEMjG8/7x9JAhzExmku6uXr6f66qrt+rpH0XN3Lm7nnqqtAwCrqxCJkmSWvwG65SAP/wBRo/OU7Ovu27RaSTVskIbrJTS/cCsDlY5DPhtyh4E1ouIzaqTTpLU7KxTAnj9dTjjDNhhBzj++KLTSKp1kVIqNkDEe4E7U0ofaOO1O4ELUkqjS4/vAb6TUnqkjXUHkb89pE+fPh8ePnx4JWOX1fz581lrrbWKjtElZq4OM1eHmatj7733/ndKaZeic3SVdSqrx32uXJlvuOHdXHPNVlx88WPstNOrZUjWvmbeztVk5uqot8zlqlO1fh2stubnabMjTCldDVwNsM0226QBAwZUMFZ5jRo1inrKC2auFjNXh5m1CpqiTkF9Q9up4AAAIABJREFU7nPlyDxrFtx6Kxx6KHzzmx8qT7AONOt2rjYzV0c9Zi6Hos/BWpGpQN9Wj98FTC8oiyRJy7NONbif/QzmzcvnXklSZ9R6g3U78OXSLE0fA+aklGYUHUqSpBLrVAN78UW4/HIYOBA++MGi00iqF4UOEYyIm4ABwEYRMRX4AdADIKU0FBgJHAhMABYAxxWTVJLUjKxTze3882HRIvjhD4tOIqmeFNpgpZS+sILXE3ByleJIkvQ21qnm9cILMHQoHHusFxWW1DW1PkRQkiSp6s47L9+ec06xOSTVHxssSZKkViZMgOuug699Dd797qLTSKo3NliSJEmtnH8+9OgBZ59ddBJJ9cgGS5IkqeSFF+C3v4UTToBNNy06jaR6ZIMlSZJU8otf5Nszzig2h6T6ZYMlSZIEzJwJw4bB0Ud77pWklWeDJUmSBFx6KSxcCGedVXQSSfXMBkuSJDW9V1+FIUPgiCNg662LTiOpntlgSZKkpjdkCMyd68yBkladDZYkSWpqCxbk4YEHHQQ77lh0Gkn1zgZLkiQ1td/+Fl5+Gb7znaKTSGoENliSJKlpvfkmXHIJfOQjsMceRaeR1Ai6Fx1AkiSpKHfeCc8+CzfdBBFFp5HUCDyCJUmSmtZFF+VrXn3uc0UnkdQobLAkSVJTeuQRuP9++MY3oLtjeiSViQ2WJElqShdfDOusAyecUHQSSY3EBkuSJDWdF16A4cPhq1/NTZYklYsNliRJajq//GW+Pe20YnNIajw2WJIkqanMnw/DhsHhh+cJLiSpnGywJElSU7nhBpgzx6NXkirDBkuSJDWNlPLwwJ13ht12KzqNpEbkpKSSJKlp3HsvjB0Lv/mNFxaWVBkewZIkSU3j8suhTx848siik0hqVDZYkiSpKUyaBHfcAV/7GvTqVXQaSY3KBkuSJDWFIUOgWzc48cSik0hqZDZYkiSp4b32GlxzTZ6afYstik4jqZHZYEmSpIbXMjX7qacWnURSo7PBkiRJDS2lPDzwQx9yanZJlec07ZIkqaGNHg1PPgnDhjk1u6TK8wiWJElqaEOGwHrrwVFHFZ1EUjOwwZIkSQ1rxgz44x/huOOgd++i00hqBjZYkiSpYQ0bBkuWwEknFZ1EUrOwwZIkSQ1pyZLgqqtgv/2gX7+i00hqFk5yIUmSGtI//rER06fD0KFFJ5HUTAo9ghUR+0fEuIiYEBFntfH6gIiYExGPlZZzisgpSWpe1qr69ec/b8573gMHHlh0EknNpLAjWBHRDRgC7AtMBR6OiNtTSmOXW/XvKaWDqx5QktT0rFX1a8wYeOyx9bngAujWreg0kppJkUMEdwUmpJQmAUTEzcBhwPJFS2o6S5fCG2/AnDndmTYNFi58+7JoESxevOx2yZJlty3L0qXLblsvb7657LZlaXmc0rLnWu63vm1vgWW306ZtzY03vvP51vfbeq29ddt73JGurvvSS9vy6193/j21oB4z1ylrVZ268kro0eNNjj/e080lVVeRDdYWwJRWj6cCH21jvY9HxOPAdGBwSmlMWz8sIgYBgwD69OnDqFGjypu2gubPn19XecHMHVm0KJgzpyezZ/dg7twezJ3bnXnzejBvXnfmz+/Oa6/lZcGCbrz++rLljTe68cYbq7FwYTcWL275B8EeFc8LEJGIgNVWy7ctj1s/13q99h5nG7DaagtLr7f9Wa1f6+iiny3rLnvclf+mzq+b0lqMHft6599QA+oxc50qW62q5zoF9fV3f8GCblx33cfZc88ZPPXUxKLjdEk9becWZq4OM9ePIhustv75s/z3zo8C70kpzY+IA4E/A23OA5RSuhq4GmCbbbZJAwYMKGPUyho1ahT1lBeaN/OiRfD88/DcczB5cr4/dSpMm5aXGTNgzpz237/66rDuunlZZx3YYANYa61lS+/esMYay5apU8fzwQ/2Y/XVeWvp2TMvPXosu+3RA7p3z0vL/W7d8tJyf7XVlj232mrLHucGqeXXsQtdSTuadd+otnrM3JWmt4aUrVbVc52C+trnrrwSFiyAww+fWTeZW9TTdm5h5uowc/0ossGaCvRt9fhd5G/+3pJSmtvq/siI+FVEbJRSerlKGdWkFi6EsWPh8cfhqafgmWdg3LjcVC1dumy97t1h883zsv328KlPwSabwMYbQ58+edlgg7ysv35ukLpi1KhpDBjg3MJSgaxVdSYlGDIEPvxh2HbbeUXHkdSEimywHgb6RcSWwDRgIHBU6xUiYlPgpZRSiohdybMevlL1pGpoKcGzz8I//5mXBx/MzdWSJfn1Xr1g661hp51g4EB4//thyy3zsvnmnjwtNThrVZ25//48wcU119TtUVNJda6wBiultCQiTgHuAroB16aUxkTEiaXXhwKfA06KiCXA68DAlLpy+rrUtilT4G9/W7bMnJmfX3dd+OhH4aCDYMcd4UMfyg2VTZTUnKxV9edXv8ojBgYOhIceKjqNpGZU6IWGU0ojgZHLPTe01f0rgCuqnUuNJyWYOHFN/vd/4U9/ykP/IA/n23dfGDAAdtsN+vfP5yZJUgtrVf2YMQNuuw1OOy2f0ypJRSi0wZIq7YUX4He/g+uvh/HjP0IE7L47/OIXsP/+sN12DiGRpEYxbFge3n3SSUUnkdTMbLDUcJYsgT//Ga66Cu65Jx+9GjAADjlkHGeeuQ2bbFJ0QklSuS1eDEOHwgEH5KHdklQUB0OpYcydC5dckgvrEUfA+PFwzjkwcSLcdx8ccsgMmytJalB/+lMeInjKKUUnkdTsPIKlujdnTm6sLrkkN1l77pnvH3qok1NIUrP45S9hq63y8G9JKpINlurWa6/lgvqzn8Hs2fDZz8LZZ+drn0iSmsdjj8Ho0XDRRU5UJKl4HTZYEdELOBjYE9icPP3sU8CIlNKYyseT3ikluOUW+Pa3Yfr0PN7+xz+GnXcuOpmkIlirNGQIrLEGHHdc0UkkqYMGKyLOBQ4BRgH/AmYCvYCtgQtKBe3bKaUnKh9TysaOzePr77svX/j3lltgjz2KTiWpKNYqzZoFv/89fOlL+fpXklS0jo5gPZxSOred1y6OiI2Bd5c/kvROixfDeefB+efDWmvlC0kOGuQ5VpKsVc3uuuvg9dfh5JOLTiJJWbsNVkppBOShFymlN1q/FhEbpZRmkr8plCpq7Fg4+mh49NH8DeXFF0OfPkWnklQLrFXNbenS/IXbnnvCjjsWnUaSss6cCvpwRHys5UFEHA48ULlIUpYSXHZZPrfqhRfgj3/MFw22uZLUBmtVExoxAiZNcmp2SbWlM7MIHgVcGxGjyCcPbwjsU8lQ0ty5+WTl226DQw6BYcPwGlaSOmKtakKXXgp9++ZZZCWpVqywwUopPRkRPwF+B8wD9kopTa14MjWtMWNysZw4MQ8HPP10iCg6laRaZq1qPo8/nic8uvBC6O5FZyTVkBX+SYqIa4D3ATuQZ2W6IyKuSCkNqXQ4NZ8//AGOPTZPZHHvvbDXXkUnklQPrFXN57LLoHdvOOGEopNI0tt15hysp4C9U0qTU0p3AR8DvOKQyiqlfMHgI46AHXbIE1rYXEnqAmtVE5k5M0/NfswxsMEGRaeRpLfrzBDBS5Z7PAc4vmKJ1HSWLIHTToMrr4Qjj4Tf/AZ69So6laR6Yq1qLkOHwqJFuXZIUq1p9whWRNwREYdERI82XtsqIn4UEV+pbDw1utdeg898JjdXZ54JN95ocyWp86xVzWfhwjw1+wEHQP/+RaeRpHfq6AjWV4FvAZdExGzgP0Av4L3AROCKlNJfKp5QDWvuXDj4YPjHP3KxPOmkohNJqkPWqiZzyy3w0kt5AiRJqkUdXWj4ReDMiJgCjCYXrNeBZ1NKC6qUTw1q9mzYf/98rtVNN8HnP190Ikn1yFrVXFLKs8tuuy3su2/RaSSpbZ2Z5GIT4Fbgm8Cm5MIlrbT//Af22QceeyzPGmhzJakMrFVN4O678/Tsgwd7+Q5JtWuFDVZK6b+AfsA1wLHA+Ij4aUS8r8LZ1ID+8x/Ye2945hm4/XY47LCiE0lqBNaq5nDhhbD55vDFLxadRJLa15kjWKSUEvBiaVkCrA/8ISJ+VsFsajCvvgr77ZcvIDxiRL4vSeVirWpsjzySr494+umw+upFp5Gk9nXmQsOnAccALwO/Bs5IKS2OiNWA8cCZlY2oRjB/Phx4IDz1VD5ytc8+RSeS1EisVY3v5z+HddaBQYOKTiJJHVthgwVsBHw2pfR86ydTSm9GxMGViaVG8vrrcOih8NBDcOuteXILSSoza1UDmzgxn7M7eDCsu27RaSSpY5250PA5Hbz2dHnjqNEsWZInsRg1Cm64IV/zSpLKzVrV2C66CLp3h298o+gkkrRinTmCJa2UlODEE+HOO/N1ro46quhEkqR6M3MmXHcdHH10nuBCkmpdpya5kFbGD34A11wD3/++FxGWJK2cSy6BhQvz8EBJqgc2WKqIoUPhvPPg+OPhhz8sOo0kqR698gpccUUeat6/f9FpJKlzbLBUdnfcASefDAcfnBstLwYpSVoZF18Mr72WR0JIUr2wwVJZPfooDBwIO+8MN9+cT0qWJKmrXnkFLr8cPvc52H77otNIUufZYKlspkzJR6022igfxVpzzaITSZLq1SWX5GsontPu/JCSVJs8vqCymDcvN1fz58MDD8CmmxadSJJUr2bNWnb06gMfKDqNJHWNDZZW2dKleVjgmDEwYoTFUJK0ai69NH9x59ErSfXIBkur7IwzYORIuPJK2G+/otNIkurZK6/AZZfB4YfDBz9YdBpJ6jrPwdIqGTYsj5M/7bR8UWFJklbFT36Sh5t7iQ9J9arQBisi9o+IcRExISLOauP1iIjLS68/ERE7F5FTbRs1Cr7+9XzU6qKLik4jSZVhraqeyZPzda+OO86ZAyXVr8IarIjoBgwBDgC2A74QEdstt9oBQL/SMgi4sqoh1a5p09bg8MOhXz+45RanY5fUmKxV1fVf/5XriUevJNWzIo9g7QpMSClNSiktAm4GDltuncOA36bsQWC9iNis2kH1dq++Cmef/QEi8nTs665bdCJJqhhrVZU8+ijceCOcfjpssUXRaSRp5RV53GELYEqrx1OBj3ZinS2AGcv/sIgYRP7mkD59+jBq1KhyZq2o+fPn103epUuD7373g0ybth6/+MX/MWXKHKZMWfH7akE9becWZq4OM6sDZatV9VynoLL7XEowePCOrLPOWuy224OMGrW0LD+3Hn9PzFwdZq6OesxcDkU2WNHGc2kl1slPpnQ1cDXANttskwYMGLBK4app1KhR1Eve00+Hhx+GwYPHcfrpOxUdp0vqaTu3MHN1mFkdKFutquc6BZXd5+66Kx/BuvRSOPjgPcv2c+vx98TM1WHm6qjHzOVQ5BDBqUDfVo/fBUxfiXVUJcOG5alzTz8dDjroHQcRJakRWasqbPFi+Na3YKutnI1WUmMossF6GOgXEVtGRE9gIHD7cuvcDny5NEPTx4A5KSX/ZV+A++5bNmPgz39edBpJqhprVYVdeimMHZtvV1+96DSStOoKGyKYUloSEacAdwHdgGtTSmMi4sTS60OBkcCBwARgAXBcUXmb2bPP5gs+br21MwZKai7WqsqaOjXPGHjIIXmRpEZQ6D+VU0ojyYWp9XNDW91PwMnVzqVlZs2Cgw+Gbt3gzjudMVBS87FWVc63vgVLl+bh55LUKDwWoXYtWpSPXD3/PNx7L2y5ZdGJJEmN4q9/hVtvhfPOs75Iaiw2WGpTSnDSSTBqFNxwA+y+e9GJJEmNYuFCOPVUeP/7YfDgotNIUnnZYKlNP/4xXHstnHMOfPGLRaeRJDWSH/0on9/7P/8DvXoVnUaSyqvIWQRVo66/PjdWX/4ynHtu0WkkSY3kX/+CCy6Ar3wlz0wrSY3GBktvc889cMIJsM8++bpX0dblMyVJWgkLFuQv7971LrjkkqLTSFJlOERQb3niCfjsZ6F/f7jtNujZs+hEkqRGcvbZeWjg3/4G66xTdBpJqgyPYAmAiRPh05+GtdeGkSOdjl2SVF733ZenYz/lFPjkJ4tOI0mV4xEsMWMG7LsvLF6cp2Pv27foRJKkRvLyy3DMMdCvH1x4YdFpJKmybLCa3OzZ+cjVzJm5udpuu6ITSZIaydKleTbal16C0aOhd++iE0lSZdlgNbF58+Cgg/J4+BEjYNddi04kSWo0P/xhvqjwVVfBRz5SdBpJqjwbrCY1bx4ccAA89BDccgt86lNFJ5IkNZoRI+C88+DYY+GrXy06jSRVh5NcNKH58/ORqwcfhJtugsMPLzqRJKnRTJ4MRx8NH/oQ/OpXXvZDUvOwwWoyLc3VAw/A738PRxxRdCJJUqN55RU48EBICf74R1hjjaITSVL1OESwicyeDYccAv/8J9x4Ixx5ZNGJJEmNZsGCXGsmT87nXm21VdGJJKm6bLCaxIwZsN9+8Mwz+Zyrz32u6ESSpEazZAl84Qt5CPqtt8JeexWdSJKqzwarCUyYsGwq9pEjndBCklR+KcHJJ8Ptt8MVV3h+r6TmZYPV4B56CA49NF+H5L77nCJXklR+b74Jp54KV18N3/1ubrQkqVk5yUUDu+km+MQn8snFf/+7zZUkqfyWLoXjj88zBZ5xBvzkJ0UnkqRi2WA1oDffhO99D446Kl88+OGHoX//olNJkhrN4sXwxS/Cb36TLyh84YVOxy5JDhFsMLNmwXHH5THwJ5wAQ4ZAz55Fp5IkNZq5c/OEFiNHws9/DoMHF51IkmqDDVYDGT06H7V68UW4/HI45RS/SZQkld/48XDYYfn2qqtg0KCiE0lS7XCIYANYuhR+/ON8vlXPnvkiwqeeanMlSSq/v/41Dz+fORPuvtvmSpKWZ4NV58aOhT33hO9/HwYOhEcfhV12KTqVJKnRLF0a/OhHcMAB0LdvPr93wICiU0lS7XGIYJ1atAguuCDP1rTWWvC73+UTjT1qJUkqt3Hj4JRTduKZZ3KtGTo01x5J0jt5BKsO3X037Lwz/OAH+UKOTz8NX/qSzZUkqbyWLs3n9O60E0yfvgbDh8MNN9hcSVJHbLDqyJgxeWjGpz8NCxbAHXfAjTfCxhsXnUyS1Gjuvx8+/GH4xjfyOb7XXvswRxxRdCpJqn02WHVg/Ph8EccddoB//jNPh/v003DwwUUnkyQ1mueegyOPzE3V7NkwfHiein3DDRcVHU2S6oLnYNWwJ5+En/40F7cePfK069//Pmy0UdHJJEmNZvx4OP/8fE5vjx75wsGDB0Pv3kUnk6T6YoNVYxYvzhcJvvJKuOeePM7929+Gb30LNt206HSSpEaSEjz0EFx2GdxyS77Ux9e/DmeeCVtsUXQ6SapPNlg1YuzYfD7VtdfCjBnw7nfna1uddBJssEHR6SRJjWTePPj97/NFgh97LH+ZN3hw/jJvk02KTidJ9c0GqyApwbPPwm23wa9/vQuTJsFqq8H++8PVV+fJLLp1KzqlJKlRvPZaPpdq+HAYMQJefx123DGPmDjqKFhnnaITSlJjsMGqovnzYfToXOBGjoSJE/Pz22+/lMsvhyOOcBigJKl8Jk2Cu+7Ky9135xloN9kEjjsOjj4aPvpRL/EhSeVmg1VB06fnK92PHp2nu/33v/M1RXr1gn32yUMxDjoIJk/+PwYMGFB0XElSHUsJnnkG/vEPeOAB+PvfYcKE/Np73wvHHAOf/zzsuacjJCSpkmywymDhwnyV+zFj8vL447mZmjEjv96zJ+y6K3znO7DXXnlZY41l7588uZjckqT6NHfusrrz2GPLljlz8usbbgi77w6nnQb77Qf9+nmkSpKqpZAGKyI2AG4B3gs8B3w+pTS7jfWeA+YBS4ElKaVdqpdymUWLcrM0ZQq88EK+nTQpD/GbMCE/fvPNvG63brDNNrDvvrDLLvkijTvt9PaGSpJU+4qsVW+8kUdBTJuW687kycuWcePyay16987XSTzqqFx3dt8dtt7ahkqSilLUEayzgHtSShdExFmlx99pZ929U0ovr+oHppQL1vz5+Zu/efPy7auv5gspvvoqzJoFL7+cl//8B156CV58MT+/vA03hPe/H/bYA973PthuO9h++1zUevZc1bSSpBpQsVo1d24PLr0015dZs3LNmTkz152XXmq77my6aR7qt+++0L//sqVfP4f8SVItKarBOgwYULp/PTCK9otWlz3/fG+23z7PkLRgQZ45acGCZUeZ2hORp0TfaKPcQPXvDwMG5KK22WbQt2+ePr1v3zylrSSpoVWsVr34Yi+++c1cd9ZbD/r0gY03hm23hU98Il+DqmXp2zc3Vo6EkKT6UFSDtUlKaQZASmlGRGzcznoJ+GtEJOCqlNLVnfnh3bsn+vfPxah3b1hzzdwQrbkmrL12XtZZJ9+uv34ubuutB+uu67eAkqS3VKxWbbnla/z737nurLZaGRNLkgoXKaXK/OCIvwFtTTr+PeD6lNJ6rdadnVJav42fsXlKaXqpqN0NnJpSur+dzxsEDALo06fPh4cPH16O/4yqmD9/PmvV2SExM1eHmavDzNWx9957/7uoc2nbU81aVc91CupznzNzdZi5OsxceWWrUymlqi/AOGCz0v3NgHGdeM+5wODO/Pytt9461ZP77ruv6AhdZubqMHN1mLk6gEdSATVnZZdK1qp6q1Mp1ec+Z+bqMHN1mLnyylWnihqYcDtwTOn+McBfll8hItaMiLVb7gOfBp6qWkJJUrOzVkmSuqyoBusCYN+IGA/sW3pMRGweESNL62wCjI6Ix4GHgBEppf8pJK0kqRlZqyRJXVbIJBcppVeAT7bx/HTgwNL9ScCOVY4mSRJgrZIkrRznLpIkSZKkMrHBkiRJkqQyscGSJEmSpDKxwZIkSZKkMrHBkiRJkqQyscGSJEmSpDKxwZIkSZKkMrHBkiRJkqQyscGSJEmSpDKxwZIkSZKkMrHBkiRJkqQyscGSJEmSpDKxwZIkSZKkMrHBkiRJkqQyscGSJEmSpDKxwZIkSZKkMrHBkiRJkqQyscGSJEmSpDKxwZIkSZKkMrHBkiRJkqQyscGSJEmSpDKxwZIkSZKkMrHBkiRJkqQyscGSJEmSpDKxwZIkSZKkMrHBkiRJkqQyscGSJEmSpDKxwZIkSZKkMrHBkiRJkqQyscGSJEmSpDKxwZIkSZKkMrHBkiRJkqQyscGSJEmSpDKxwZIkSZKkMrHBkiRJkqQyKaTBiogjImJMRLwZEbt0sN7+ETEuIiZExFnVzChJam7WKknSyijqCNZTwGeB+9tbISK6AUOAA4DtgC9ExHbViSdJkrVKktR13Yv40JTS0wAR0dFquwITUkqTSuveDBwGjK14QElS07NWSZJWRiENVidtAUxp9Xgq8NH2Vo6IQcCg0sOFEfFUBbOV20bAy0WH6CIzV4eZq8PM1bFN0QEqoNO1qs7rFNTnPmfm6jBzdZi58spSpyrWYEXE34BN23jpeymlv3TmR7TxXGpv5ZTS1cDVpc9+JKXU7nj5WlNvecHM1WLm6jBzdUTEI0VnWF41a1U91ykwc7WYuTrMXB31lrlcdapiDVZK6VOr+COmAn1bPX4XMH0Vf6YkSW+xVkmSyq2Wp2l/GOgXEVtGRE9gIHB7wZkkSWrNWiVJepuipmn/TERMBT4OjIiIu0rPbx4RIwFSSkuAU4C7gKeB4SmlMZ38iKsrELuS6i0vmLlazFwdZq6Ouspc4VpVV9uixMzVYebqMHN11FvmsuSNlNo9rUmSJEmS1AW1PERQkiRJkuqKDZYkSZIklUldNlgRcUREjImINyOi3akfI2L/iBgXERMi4qxWz28QEXdHxPjS7fpVyLzCz4yIbSLisVbL3Ig4vfTauRExrdVrB9ZC5tJ6z0XEk6Vcj3T1/dXOHBF9I+K+iHi6tB99o9VrVdvO7e2frV6PiLi89PoTEbFzZ99bYOYvlrI+EREPRMSOrV5rcz8pOO+AiJjT6v/3OZ19b4GZz2iV96mIWBoRG5Req/o2Ln3utRExM9q5rlMt7svVENYqa9UqZI4aqFWd+HtUc7/bnchcU3Wqk5mtVauet7p1KqVUdwuwLflCYKOAXdpZpxswEdgK6Ak8DmxXeu1nwFml+2cBF1Yhc5c+s5T/ReA9pcfnAoOrvJ07lRl4DthoVf+bq5UZ2AzYuXR/beDZVvtGVbZzR/tnq3UOBP6bfJ2djwH/6ux7C8y8G7B+6f4BLZk72k8KzjsAuHNl3ltU5uXWPwS4t6ht3Opz9wJ2Bp5q5/Wa2peruF2sVdXZztaqymS0TlVn/7VWVWc7V7VO1eURrJTS0ymlcStYbVdgQkppUkppEXAzcFjptcOA60v3rwf+X2WSvk1XP/OTwMSU0vMVTdWxVd1ONbmdU0ozUkqPlu7PI8/8tUUVsrXW0f7Z4jDgtyl7EFgvIjbr5HsLyZxSeiClNLv08EHyNYGKsirbqWa38XK+ANxUhVwdSindD8zqYJVa25erwlpVNdaqyrBOVYe1qgqqXafqssHqpC2AKa0eT2XZH6ZNUkozIP8BAzauQp6ufuZA3rkznlI6bHltNYYw0PnMCfhrRPw7IgatxPvLqUufGRHvBXYC/tXq6Wps5472zxWt05n3VkJXP/d48rdBLdrbTyqls3k/HhGPR8R/R8T2XXxvuXX6cyOiN7A/8MdWT1d7G3dWre3LtcRateqsVZXZztap6rBW1Yay7svdyxqtjCLib8Cmbbz0vZTSXzrzI9p4rqJz0neUuYs/pydwKPDdVk9fCZxH/m84D7gI+MrKJX3bZ5Uj8+4ppekRsTFwd0Q8U/qmoCLKuJ3XIv/Cn55Smlt6uiLbua2Pb+O55ffP9tap+r5d0unPjYi9yYVrj1ZPV3U/oXN5HyUPbZpfOofhz0C/Tr63ErryuYcA/0gptf5GrtrbuLNqbV8uG2tvt1s+AAADcUlEQVSVtao9DVCrrFPV+RtqraqNWlXWfblmG6yU0qdW8UdMBfq2evwuYHrp/ksRsVlKaUbp8N/MVfwsoOPMEdGVzzwAeDSl9FKrn/3W/YgYBtxZK5lTStNLtzMj4k/kw6n3U8PbOSJ6kAvW71NKt7X62RXZzm3oaP9c0To9O/HeSuhMZiJiB+DXwAEppVdanu9gPyksb6t/rJBSGhkRv4qIjTrz3grpyue+48hBAdu4s2ptXy4ba5W1qpKZC65V1qnq/A21VtVGrSrrvtzIQwQfBvpFxJalb9kGAreXXrsdOKZ0/xigM98yrqqufOY7xqqW/gC3+AzQ5iwoZbbCzBGxZkSs3XIf+HSrbDW5nSMigGuAp1NKFy/3WrW2c0f7Z4vbgS9H9jFgTmkoSWfeW0jmiHg3cBtwdErp2VbPd7SfFJl309L+QETsSv6b+Epn3ltU5lLWdYFP0Gr/Lmgbd1at7cu1xFq16qxVldnO1qnq7L/WqtqoVeXdl1MVZ/Ao10L+YzIVWAi8BNxVen5zYGSr9Q4kz7ozkTxco+X5DYF7gPGl2w2qkLnNz2wjc2/yL826y73/d8CTwBOl/7Gb1UJm8qwqj5eWMfWwncnDAVJpWz5WWg6s9nZua/8ETgROLN0PYEjp9SdpNQtZe/t2FbbvijL/Gpjdars+sqL9pOC8p5TyPE4+2Xm3Wt/GpcfHAjcv975CtnHps28CZgCLyX+bj6/1fblK28VaZa1alcyF16oV/T2qxd/tTmSuqTrVyczWqlXPW9U6FaU3SpIkSZJWUSMPEZQkSZKkqrLBkiRJkqQyscGSJEmSpDKxwZIkSZKkMrHBkiRJkqQyscGSJEmSpDKxwZIkSZKkMrHBkmpQRHwkIp6IiF6lq56PiYgPFJ1LkiSwTkkd8ULDUo2KiB8DvYA1gKkppfMLjiRJ0lusU1LbbLCkGhURPYGHgTeA3VJKSwuOJEnSW6xTUtscIijVrg2AtYC1yd8QSpJUS6xTUhs8giXVqIi4HbgZ2BLYLKV0SsGRJEl6i3VKalv3ogNIeqeI+DKwJKV0Y0R0Ax6IiH1SSvcWnU2SJOuU1D6PYEmSJElSmXgOliRJkiSViQ2WJEmSJJWJDZYkSZIklYkNliRJkiSViQ2WJEmSJJWJDZYkSZIklYkNliRJkiSVyf8HrZCHk3N7Mi0AAAAASUVORK5CYII=\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"#weights and biases that we want to explore. weight1, bias1, weight2, bias2\n",
"weights_1 = 10, 0, 1, 0\n",
"weights_2 = 10, 5, 1, 0\n",
"weights_3 = 10, 5, 1, -.5\n",
"weights_4 = 10, 5, 2, -.5\n",
"weights_list = [weights_1, weights_2, weights_3, weights_4]\n",
"\n",
"#make our plot\n",
"plt.figure(figsize=[12,8])\n",
"\n",
"for i, w_list in enumerate(weights_list):\n",
" \n",
" #make our weight dictionary then feed the dictionary as arguments to the FFN to get a prediction.\n",
" #note how we have changed the activation function to sigmoid.\n",
" w_dict = dict(zip([\"w1\", \"b1\", \"w2\", \"b2\"], w_list))\n",
" y_train_pred = simple_FFN(**w_dict, activation = sig)\n",
" \n",
" #make the plot\n",
" plt.subplot(2, 2, i+1)\n",
" plt.plot(x_train, y_train_pred, 'b')\n",
" plt.ylim([-1,1.6])\n",
" plt.xlim([-1,1])\n",
" plt.title('w1, b1, w2, b2 = {}'.format(w_list))\n",
" plt.ylabel(\"y(x)\")\n",
" plt.xlabel(\"x\")\n",
" plt.grid('on')\n",
"\n",
"plt.tight_layout()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Break Out Room 1\n",
"\n",
"**Design a simple FFNN and fit a simple dataset**\n",
"\n",
"- Load the `toyDataSet_1.csv` from the data directory.\n",
"- Write an FFNN with `one hidden` layer of `one neuron` and fit the data. \n",
"- Between `ReLU` and `Sigmoid`, choose which activation function works better \n",
"- Make a plot with the ground truth data and the prediction\n",
"- Use the sklearn `mean_squared_error()` to evaluate the prediction\n",
"\n",
"**Neglect splitting into training and testing sets for this simple task. Just fit and evaluate the prediction on the entire set**\n"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"def plot_toyModels(x_data, y_data, y_pred=None):\n",
" # plot the prediction and the ground truth\n",
" if type(y_data) != type(None):\n",
" plt.plot(x_data, y_data,'or',label='data')\n",
" if type(y_pred) != type(None):\n",
" plt.plot(x_data, y_pred,'-b', linewidth=4, label='FFNN' , alpha=.7)\n",
" plt.xlabel('x')\n",
" plt.ylabel('y(x)')\n",
" plt.legend()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"toySet_1 = pd.read_csv('../data/toyDataSet_1.csv')\n",
"x_train = toySet_1['x'].values.reshape(-1,1)\n",
"y_train = toySet_1['y'].values.reshape(-1,1)\n",
"\n",
"plot_toyModels(x_train, y_train)"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {},
"outputs": [
{
"ename": "SyntaxError",
"evalue": "invalid syntax (, line 4)",
"output_type": "error",
"traceback": [
"\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m4\u001b[0m\n\u001b[0;31m w1 =\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n"
]
}
],
"source": [
"## your code here\n",
"\n",
"# set the network parameters\n",
"w1 = \n",
"b1 = \n",
"\n",
"w2 =\n",
"b2 =\n",
"\n",
"# affine operation\n",
"l1 = TODO\n",
"\n",
"# activation (Choose between ReLu or Sigmoid)\n",
"h = TODO\n",
"# output linear layer\n",
"y_model_train = TODO\n",
"\n",
"\n",
"# Make a plot (use the ploting function defined earlier)\n",
"plot_toyModels(x_train, y_train, y_model_train)\n",
"\n",
"# Use MSE to evaluate the prediction\n",
"mse_toy = TODO\n",
"print('The MSE for the training set is ', np.round(mse_toy,5))\n"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"# %load '../solutions/sol_1.py'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### A function for a more complex Forward Pass\n",
"Let's write a function for the forward propagation through an FFNN with one input, one linear output neuron, and one hidden layers with arbitrary number of neurons. \n",
"\n",
"General Scheme:\n",
"1. One input vector: $x$ \n",
"$$$$\n",
"2. Affine (linear) transformation: $l_1$ where $w_{1},~b_{1}$ are the parameter vectors (or $w_{1i},~b_{1i}$):\n",
"$$l_1 = \\sum_{i=1}^\\text{neurons} w_{1i}x+b_{1i} = w^T_1 x + b_1 = w_1 \\cdot x + b_1 = W_1\\cdot X$$\n",
"$$$$\n",
"3. Activation function (nonlinear transformation): $g(\\cdot)$ \n",
"$$h = g(l_1)$$ $$$$\n",
"\n",
"4. Linear Output layer with a vector for weights $w_o$ and a scalar bias $b_o$: \n",
"$$y = w_o^T h+b_o = w_o \\cdot h + b_o = W_o\\cdot H$$"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"def myFFNN(X, W1, Wo, activation='relu'):\n",
" \"\"\"\n",
" This function is a simple feed forward nueral network that takes in two weight vectors and a design matrix and \n",
" returns a prediction (yhat). \n",
" \n",
" Network specifications:\n",
" input dimensions = 1\n",
" output dimensions = 1\n",
" hidden layers = 1\n",
" **hidden neurons are determined by the size of W1 or W0**\n",
" \n",
" Parameters:\n",
" Design Matrix:\n",
" X: the design matrix on which to make the predictions.\n",
" weights vectors:\n",
" W1 : parameters of first layer \n",
" Wo : parameters of output layer\n",
" activation:\n",
" The default activation is the relu. It can be changed to sigmoid\n",
" \"\"\"\n",
" # Input Layer: \n",
" # add a constant column for the biases to the input vector X\n",
" ones = np.ones((len(X),1))\n",
" l1 = X\n",
" l1 = np.append(l1, ones, axis=1)\n",
"\n",
" # hidden layer: Affine and activation\n",
" a1 = np.dot(W1, l1.T)\n",
" \n",
" if activation=='relu':\n",
" h1 = g(a1) \n",
" elif activation=='sigmoid':\n",
" h1 = sig(a1) \n",
" \n",
" # Output layer (linear layer) (2 steps)\n",
" # (a) Add a const column the h1 for the affine transformation\n",
" ones = np.ones((len(X),1)) \n",
" \n",
" H= np.append(h1.T, ones,axis=1).T\n",
" # (b) Affine\n",
" a = np.dot(Wo,H)\n",
" y_hat = a.T\n",
"\n",
" return y_hat"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Use the previous parameters in our forward propagation function to fit the toyDataSet_1.csv. Plot the results and print the associated loss (the MSE)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"MSE Loss = 0.0023\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"w11 = 2\n",
"b11 = 0.0\n",
"w21 = 1\n",
"b21 = 0.5\n",
"\n",
"# make the parameters matrices\n",
"# First layer\n",
"W1 = np.array([[w11,b11]])\n",
"\n",
"# Output Layer (only one bias term)\n",
"Wo = np.array([[w21,b21]])\n",
"\n",
"# run the model\n",
"y_model_1 = myFFNN(x_train, W1, Wo )\n",
"\n",
"# plot the prediction and the ground truth\n",
"plot_toyModels(x_train, y_train, y_model_1)\n",
"\n",
"# quantify your prediction\n",
"Loss_1 = mean_squared_error(y_train, y_model_1) \n",
"print('MSE Loss = ', np.round(Loss_1,4))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### FFNN is a Universal Approximator\n",
"Explore what functions can be generated by a single-hidden layer network with many neurons.\n",
"\n",
"There is a rigorous proof that a FFNN can approximate any continuous function if the network has sufficient hidden neurons. For more information check the paper *NeuralNets_UniversalApproximators* in the `notes` directory"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Two Neurons\n",
"\n",
"w11 = -.8\n",
"b11 = -.1\n",
"\n",
"w12 = .4\n",
"b12 = -.1\n",
"\n",
"w21 = 1.3\n",
"w22 = -.8\n",
"\n",
"b2 = 0.5\n",
"\n",
"# First Layer\n",
"W1 = np.array([[w11,b11], [w12,b12]])\n",
"# Output Layer (only one bias term)\n",
"Wo = np.array([[w21,w22, b2]])\n",
"\n",
"\n",
"# run the model\n",
"y_model_p = myFFNN(x_train, W1, Wo, activation='relu' )\n",
"plot_toyModels(x_train, y_data=None, y_pred=y_model_p)\n"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Three Neurons\n",
"w11 = -.1\n",
"b11 = .3\n",
"\n",
"w12 = .9\n",
"b12 = -.1\n",
"\n",
"w13 = .7\n",
"b13 = -.2\n",
"\n",
"\n",
"w21 = -1.\n",
"w22 = -.7\n",
"w33 = .8\n",
"\n",
"b2 = 0.25\n",
"\n",
"# First Layer\n",
"W1 = np.array([[w11,b11], [w12,b12], [w13,b13]])\n",
"# Output Layer (only one bias term)\n",
"Wo = np.array([[w21,w22,w33, b2]])\n",
"\n",
"# run the model\n",
"y_model_p = myFFNN(x_train, W1, Wo )\n",
"\n",
"# plot the prediction and the ground truth\n",
"plot_toyModels(x_train, y_data=None, y_pred=y_model_p)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Random numbers between a,b\n",
"# (b-a) * np.random.random_sample((4, 4)) + a\n",
"a = -20\n",
"b = 20\n",
"\n",
"# N neurons\n",
"N = 50\n",
"\n",
"# Create random parameter matrices\n",
"W1 = (b-a) * np.random.random_sample((N, 2)) + a\n",
"Wo = (b-a) * np.random.random_sample((1, N+1)) + a\n",
"\n",
"# make a bigger interval\n",
"x_train_p2 = np.linspace(-2,2,1000)\n",
"x_train_p2= x_train_p2.reshape(-1,1)\n",
"\n",
"## run the models and plot the predictions\n",
"plt.figure(figsize=[12,4])\n",
"\n",
"# # RELU ACTIVATION\n",
"y_model_p2 = myFFNN(x_train_p2, W1, Wo, activation='relu' )\n",
"\n",
"plt.subplot(1,2,1)\n",
"plot_toyModels(x_train_p2, y_data=None, y_pred=y_model_p2)\n",
"plt.title('Relu activation')\n",
"\n",
"# ## SIGMOID ACTIVATION\n",
"y_model_p2 = myFFNN(x_train_p2, W1, Wo, activation='sigmoid' )\n",
"\n",
"plt.subplot(1,2,2)\n",
"plot_toyModels(x_train_p2, y_data=None, y_pred=y_model_p2)\n",
"plt.title('Sigmoid activation')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"-------------\n",
"\n",
"## 3. TensorFlow and Keras\n",
"\n",
"**Keras, Sequential:** [Source]\n",
"(https://keras.io/models/sequential/)\n",
"\n",
"\n",
"There are many powerful packages to work with neural networks like **TensorFlow** and **PyTorch**. These packages provide both the forward and backward propagations, where the latter is used to train (optimize) a network. Training means to find the optimal parameters for a specific task.\n",
"\n",
"Here, we use TensorFlow (TF) and Keras to employ FFNN. \n",
"- Use Keras to fit the simple toyDataSet_1 dataset. Tune the weights manually.\n",
" - Learn the `Sequential` method\n",
"- Use backpropagation supported by TF to find the optimal parameters for the same dataset.\n",
" - Learn the `fit` method"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Import packages from keras"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [],
"source": [
"from tensorflow.keras import layers\n",
"from tensorflow.keras import models\n",
"from tensorflow.keras import optimizers"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Read again the toyDataSet_1 and define the weights used in solution 1"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [],
"source": [
"toySet_1 = pd.read_csv('../data/toyDataSet_1.csv')\n",
"x_train = toySet_1['x'].values.reshape(-1,1)\n",
"y_train = toySet_1['y'].values.reshape(-1,1)\n",
"\n",
"w1 = 2\n",
"b1 = 0.0\n",
"w2 = 1\n",
"b2 = 0.5\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Use Keras to build the previous simple architecture and fit the toyDataSet. Set manually the previously used weights"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Model: \"Single_neurons_model_fixedWeights\"\n",
"_________________________________________________________________\n",
"Layer (type) Output Shape Param # \n",
"=================================================================\n",
"dense_18 (Dense) (None, 1) 2 \n",
"_________________________________________________________________\n",
"dense_19 (Dense) (None, 1) 2 \n",
"=================================================================\n",
"Total params: 4\n",
"Trainable params: 4\n",
"Non-trainable params: 0\n",
"_________________________________________________________________\n"
]
}
],
"source": [
"model = models.Sequential(name='Single_neurons_model_fixedWeights')\n",
"\n",
"# hidden layer with 1 neuron (or node)\n",
"model.add(layers.Dense(1, activation='relu',\n",
" kernel_initializer='random_normal', bias_initializer='random_uniform', \n",
" input_shape=(1,)))\n",
"\n",
"# output layer, one neuron \n",
"model.add(layers.Dense(1, activation='linear'))\n",
"\n",
"model.summary()\n"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Initial values of the parameters\n",
"{'w1': 0.011672685, 'b1': 0.027603041, 'w2': 1.4585346, 'b2': 0.0}\n",
"\n",
"After setting the parameters\n",
"{'w1': 2.0, 'b1': 0.0, 'w2': 1.0, 'b2': 0.5}\n"
]
}
],
"source": [
"# A FUNCTION THAT READS AND PRINTS OUT THE MODEL WEIGHTS/BIASES\n",
"def print_weights(model):\n",
" weights = model.get_weights()\n",
" print(dict(zip([\"w1\", \"b1\", \"w2\", \"b2\"], [weight.flatten()[0] for weight in weights])))\n",
"\n",
"\n",
"print('Initial values of the parameters')\n",
"print_weights(model)\n",
"\n",
"\n",
"# MANUALLY SETTING THE WEIGHTS/BIASES\n",
"# Read and then define the weights\n",
"weights = model.get_weights()\n",
"# hidden layer\n",
"weights[0][0] = np.array([w1]) #weights \n",
"weights[1] = np.array([b1]) # biases\n",
"# output layer \n",
"weights[2] = np.array([[w2]]) # weights\n",
"weights[3] = np.array([b2]) # bias\n",
"\n",
"# Set the weights\n",
"model.set_weights(weights)\n",
"\n",
"print('\\nAfter setting the parameters')\n",
"print_weights(model)"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"MSE Loss = 0.0023\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"y_model_tf1 = model.predict(x_train)\n",
"\n",
"# plot the prediction and the ground truth\n",
"plot_toyModels(x_train, y_train, y_pred=y_model_tf1)\n",
"\n",
"# quantify your prediction\n",
"Loss_tf1 = mean_squared_error(y_train, y_model_tf1) \n",
"print('MSE Loss = ', np.round(Loss_tf1,4))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Train the network: Find the optimal weights"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Back propagation\n",
"\n",
"The **backward** pass is the training. It is based on the chain rule of calculus, and it updates the parameters. The optimization is done by minimizing the loss function.\n",
"\n",
"
\n",
"\n",
"#### Batching, stochastic gradient descent, and epochs\n",
"Shuffle and split the entire dataset in mini-batches to help escape from local minima\n",
"\n",
"
\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {},
"outputs": [],
"source": [
"model_t = models.Sequential(name='Single_neurons_model_training')\n",
"\n",
"# hidden layer with 1 neurons (or nodes)\n",
"model_t.add(layers.Dense(1, activation='relu', \n",
" kernel_initializer='random_normal', bias_initializer='random_uniform', \n",
" input_shape=(1,)))\n",
"\n",
"# output layer, one neuron \n",
"model_t.add(layers.Dense(1, activation='linear'))\n",
"\n",
"# model_t.summary()"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {},
"outputs": [],
"source": [
"# sgd = optimizers.SGD(lr=0.005)\n",
"sgd = optimizers.Adam(lr=0.005)\n",
"model_t.compile(loss='MSE',optimizer=sgd) \n",
"history = model_t.fit(x_train, y_train, epochs=2000, batch_size=64, verbose=0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Plot training & validation loss values"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=[12,4])\n",
"plt.subplot(1,2,1)\n",
"plt.plot(history.history['loss'],'b')\n",
"plt.title('Model loss')\n",
"plt.ylabel('Loss')\n",
"plt.xlabel('Epoch')\n",
"\n",
"plt.subplot(1,2,2)\n",
"plt.loglog(history.history['loss'],'b')\n",
"plt.title('Model loss (loglog)')\n",
"plt.ylabel('Loss')\n",
"plt.xlabel('Epoch')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Visualize the prediction"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"MSE Loss = 0.0022\n",
"MSE with manually tuned weihgts 0.0023\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"y_model_t = model_t.predict(x_train)\n",
"\n",
"# plot the prediction and the ground truth\n",
"plot_toyModels(x_train, y_train, y_pred=y_model_t)\n",
"\n",
"# quantify your prediction\n",
"Loss_tf1_t = mean_squared_error(y_train, y_model_t) \n",
"print('MSE Loss = ', np.round(Loss_tf1_t,4))\n",
"print('MSE with manually tuned weihgts', np.round(Loss_tf1,4))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Check the parameters"
]
},
{
"cell_type": "code",
"execution_count": 72,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Trained by TF weights:\n",
"{'w1': 1.5288035, 'b1': 0.0145217795, 'w2': 1.2909468, 'b2': 0.4919371}\n",
"\n",
"Manually fixed weights:\n",
"{'w1': 2.0, 'b1': 0.0, 'w2': 1.0, 'b2': 0.5}\n"
]
}
],
"source": [
"weights_t = model_t.get_weights()\n",
"\n",
"print(\"Trained by TF weights:\")\n",
"print_weights(model_t)\n",
"print(\"\\nManually fixed weights:\")#, weights)\n",
"print_weights(model)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Add more neurons and inspect the performance during the training\n",
"Explore different activation function, optimizer, number of hidden neurons and layers"
]
},
{
"cell_type": "code",
"execution_count": 78,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA7AAAAHwCAYAAACfeoOHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzdeXxU1f3/8dcJCZAAgmyKCUlEUXABFCx+rfgTpbW1UPXrbqoIAuKCgAG0RtCiscoioFQFN1CnlroBWpevUK1ba0URXABXEoIgEpAtwxJyfn+cm2QmJBBgJndm8n4+HvMg87l3Jp8J5M2cueeea6y1iIiIiIiIiMS6JL8bEBEREREREakNDWBFREREREQkLmgAKyIiIiIiInFBA1gRERERERGJCxrAioiIiIiISFzQAFZERERERETiggawUiNjjDXGHO13HyIikaZ8E5FEpGyT+kAD2DhhjFlpjAkaY7aG3Kb73Vc5Y8wJxpg3jDHrjTF7XFzYGNPSGPOSMWabMabAGHNFle1nG2OWG2NKjDFvGWOy9uN7W2PMj8aY5JBasjFmXWgvxpjjjTH/Z4zZaIz52RjzsTHmXG/bmcaYsio/363GmP85sJ9Ijb1me6+vxHu9ffayrzHG3GeMKfZuE4wxJmT7XcaYz4wxpcaYOyPZp0hdioN86+/lxWZjTJH3uxiaN8o3Ip5vNT6XMaa3l30/e499yRiTHsnXIhIJcZBtlxljVhhjNnmZMtsYc0jIdmUbdZptvzPGvOe9zrXGmEeNMc1Ctk8wxqwy7v+iAmNMXiRfZzzRADa+9LPWNg253eh3QyF2AX8Hrqlh+1+AncBhQA7wsDHmeABjTGvgRWAs0BJYBMzZz+//M/DbkPvnAhur7PMy8KbXQ1vgJmBzyPYfqvx8m1pr/72ffezLs8BioBWQBzxvjGlTw75DgPOBrkAXoC9wbcj2b4AxwD8i3KOIH2I539KAEUBroCdwNjAqZLvyzYlkvu3tub4EzrHWtgCOAL4GHo7sSxGJmFjOtveBX1prmwMdgGTg7pDtyjanrrKtOe7nfwTQGcgAJoY89nGgk7X2EOA04ApjzP8e9KuLR9Za3eLgBqwE+tSw7WpcCD0IbAKWA2eHbD8CmA9swA16BodsawDcBnwLbAE+Btp72ywwFPfmYCMuyMw++jza/bMKqzXBBeAxIbWngXu9r4cAH1TZP4j7Ja3Nz8YCtwPPhdSexwWD9e639vZrUcNznAkURfnv8BhgB9AspPYuMLSG/T8AhoTcvwb4TzX7PQPc6fe/Ud10O9BbvORbyPPeDLzsfa18s5HNt/15LqAR8GfgS7//HeumW9VbPGUb0BR4CnjVu69ss/5lm7ftf4HPatiWDnwGjPH737kfNx2BTRw9ge9wv+x3AC8aY1p6254FinBheBFwjzHmbG/bzcDluE+9DgEGAiUhz9sXOAX3SdIlwDkH0NsxwG5r7VchtSXA8d7Xx3v3AbDWbsOF8vHU3lzgDGNMC2NMC6AXMC9kezHuP4BnjDHnG2MO2/+XUckY84o3xaO62ys1POx44Dtr7ZaQWujPobr9l9RyX5FEFmv5dgbwhfe18s2JZL7t87mMMZnGmJ9xb5hHARNq/QJFYofv2WaMOd0Yswk3EL4QmOptUrY5dZptVYT+X1P+Gm41xmzF/dtoAvy1hscmNA1g48vcKr9sg0O2rQOmWmt3WWvnACuA3xlj2gOnA7dYa7dbaz8FHgOu9B43CLjdWrvCOkustcUhz3uvtfZna20h8BbQ7QD6bor7dDHUJqBZLbfXxnbcNJNLgctwn1puL99o3cdVvXGfhk4G1hhj3jHGdAx5jiOqCbQm1X0za21fa22LGm59a+hxf19n1f03AU1Dz6UQSSBxkW/GmAFAD2CSV1K+Hdjr3Fu+7fO5rLWF1k0hbo07irO8hu8j4reYzjZr7XvWTSEun6660tukbDuw13lQ2VbOGPMroD8wrspruNfb/2TcEfGqz1cvaAAbX86v8sv2aMi21d4verkC3Kd2RwAbqnzaU4CbegDQHveJWU3Whnxdgvvl219bcZ8QhjoE92lfbbbX1lPAVd7tqaobrbVF1tobrbVHAVnAtir7/VBNoG3bzx72Zn9fZ9X9DwG2Vvl7FkkUMZ9vxpjzgXuB31pr13tl5ZsTyXyr9XNZazcAs4F5JmQxGJEYEvPZBmCtXQ28DvzNKynbnDrPNmPMqbgjqxfZ8CPggBvYW2sX42ag/KmWryOhaACbONKrHJnLBH7wbi1DVzHztq32vl4FHBXl3r4Ckqt8YtaVymkRX3j3AfA+OTuKKtMmauFdoB3uRP/39rajtXYV7ryQE/bze5T3+JrZc9W78ttrNTzsC6BDlb+L0J9Ddft3reW+IonM93wzxvwGeBS3IMtnIZuUb04k821/nysZt7hL1TeGIrHO92yrIjnkeZVtTp1mmzHmJNyR6IHW2oX7eEmhf1/1i42BE3F12/eNfS8EUAoMB1KAi3ErtLXytr8LTAca41ZE+xH4lbdtNLAU6AgYb3v54yxwdMj3mQXcXUMPxnv+47zHNQYahWz/G+58jibAL3FTHo73trXx7l/oPe4+qlmsaC8/m4o+cecRlD9vxYJSwKG4T6mOxn1wU7563pve9jOJ8kIA3vf5D27qYWPgAtwKfG1q2HcosAz3iesRuIAbGrI9xXuev+JWrWsMNPD736puuu3vLQ7y7SzcuVhn1LBd+WYjnm81PhduYZNjvdfaBrcC/id+/zvWTbeqtzjIthzcwNjgjm7+C3gxZLuyzdZptp3g/T1fWs3zJuFWMz7U+/v6BbAGuMnvf+d+3HxvQLda/kW5EAziph+U317ytl2NW8luuhcmXwG/DnlsBvAKbiW7b6v8IjXAnT/0PW4Kw0dAhrdtf0Iw29s/9LYyZHtL3Mn624BC4Ioqj++DO4cpCLwNZIdsuw14bS8/m7A+Q+qhIdgEN81spfezW4sL5XRv+5lAWZWf71bgwgj/PWZ7ry+IO9elT8i2XrhpJuX3DW5hkg3ebQIhKwl6fx9Vf+ZX+/1vVTfd9vcWB/n2Fu6NZmh/r4VsV77ZiOfb3p5rmPd3us17rX8Dsvz+d6ybblVvcZBt+bjFgLZ5f87EGwh725Vttk6z7clqXs8X3rYk3BTvDV79K+9nXKvV8xPtZrwfisQxY8zVwCBr7el+9yIiEknKNxFJRMo2kQOnc2BFREREREQkLmgAKyIiIiIiInFBU4hFREREREQkLugIrIiIiIiIiMQFDWBFREREREQkLiT73cD+at26tc3Ozva7DRGJMR9//PF6a20bv/uIFGWdiFRHWSci9cHesi7uBrDZ2dksWrTI7zZEJMYYYwr87iGSlHUiUh1lnYjUB3vLOk0hFhERERERkbigAayIiIiIiIjEhagNYI0x7Y0xbxljlhljvjDGDK9mnzONMZuMMZ96t3HR6kdEJBqUdSJSHyjrRCRWRPMc2FIg11r7iTGmGfCxMeZNa+2XVfZ711rb92C+0a5duygqKmL79u0H8zRxp3HjxmRkZJCSkuJ3KyL1mbIuypR1IjFBWRdlyjqR2onaANZauwZY4329xRizDEgHqgbdQSsqKqJZs2ZkZ2djjIn008ckay3FxcUUFRVx5JFH+t2OSOQEApCXB4WFkJkJ+fmQk+N3VzVS1kWXsk4SlrKuRso6ZZ0kkECA7beNp/GqryOWdXVyDqwxJhs4Cfiwms3/Y4xZYox5zRhz/IE8//bt22nVqlW9CTkAYwytWrWqd59OSoILBGDIECgoAGvdn0OGuHocUNZFnrJOEpKybq+UdSIJIhAgOPgmbirM5TE7kJ0FP0Qk66I+gDXGNAVeAEZYazdX2fwJkGWt7Qo8CMyt4TmGGGMWGWMW/fTTTzV9nwh2HR/q42uWBJeXByUl4bWSElePccq66KmPr1kSnLJOWVeN+viaJcHl5TEjeCVraMc8ziOXyRSUtD7orIvqANYYk4ILuYC19sWq2621m621W72vXwVSjDGtq9lvprW2h7W2R5s28XHt7jvvvJNJkybVuH3u3Ll8+WXEZ92IxJdAALKzISnJ/VlQwyW/Cgvrsqv9pqxT1onsVQ1Z9zb/jxJSK/dT1sUsZZ1ILVTJuvcL0lnI2RWbV5LNG5xz0FkXzVWIDfA4sMxae38N+xzu7Ycx5hdeP8XR6qlC1f9IfJiyo6CTeq+6KXQ1ffqcmVm3ve0HZd3eKeuk3qsh6/7LKUwmlxFM5WuOdvsq6w6Msk7Ef1WyrrhgC9O5MWyX9qziamYddNZF8wjsL4ErgbNCllM/1xgz1Bgz1NvnIuBzY8wS4AHgMmutjWJPUT3vJD8/n2OPPZY+ffqwYsUKAB599FFOOeUUunbtyoUXXkhJSQkffPAB8+fPZ/To0XTr1o1vv/222v1EElp1U+is3XMQm5bmTviPXco6lHUiNaom69bblkxlBABraMcYJrCg0e+UdQdCWScSG0KyzgJTGMlWmlZsTqaUUUyiYVrKwWedtTaubt27d7dVffnll3vUapSVZa2LuPBbVlbtn6MaixYtsieccILdtm2b3bRpkz3qqKPsxIkT7fr16yv2ycvLsw888IC11tr+/fvb5557rmJbTfvty369dpFYYkz1v4vlv4/GuD+feaZWTwcssjGQUZG6KevCKeskblXJut0Yeyv32L7Mt31T37R9mW9/n/p/dvmEebV6OmVdFco6kdgQknVz+b3LuPJb6pv2Bf43Yu/ronkd2NhU05zrg5yL/e6773LBBReQlpYGwO9//3sAPv/8c26//XZ+/vlntm7dyjnnnFPt42u7n0jCyMys/pzXrCxYubLO20k4yjqR2FAl6+ZwKZ9zAqSmwtl9ALiyPxx7kV8NxjllnUhs8LJuJVnM4urKemoqJ47ow/l394nY3N86uYxOTKlpznUEzjupbvW4q6++munTp/PZZ59xxx131Lg8em33E0kY+fluenCo2J8uHD+UdSKxISTrPud4nuVySGoAnToB0K0bXHihnw3GOWWdSGzIz2dnanMmMYrS8mOkSQ1o0vVobr7ZnaIeKfVvABulN81nnHEGL730EsFgkC1btvDyyy8DsGXLFtq1a8euXbsIhJyP0axZM7Zs2VJxv6b9RBJWTg7MnOmOuBrj/pw586Avbi0eZZ1IbPCybnP745nEKGxqGnTtAukZtGgBubk1r18ntaCsE4kNOTnMvuJ1ClLdh3OkpkLXLtwwIZvWe6xFfnDq3xTi8jfHeXlueklmpgu5g3zTfPLJJ3PppZfSrVs3srKy6NWrFwB33XUXPXv2JCsrixNPPLEi3C677DIGDx7MAw88wPPPP1/jfiIJLSdHA9ZoUdaJxAx7RQ5Tv82h+KPwem4utGjhT08JQ1knEhMWL4b5P55KyFVz6N0bvF+diDLuHNn40aNHD7to0aKw2rJly+jcubNPHfmrPr92SVy2msWI98UY87G1tkd0Oqp7yrpw9fm1S/ybPx8efTS8dtFF0L///j+Xsi6x1efXLvFr82YYNgw2bKistW0LDzwATZoc2HPuLevq3xRiEYlp27fDLbfAhx/63YmIyMH75ht48snw2rHHavKJiCQGa2H69PDBqzFuhsmBDl73RQNYEYkZ1sKkSbBsmZsB9vzzriYiEo+CQZgwAUpLK2tNmsCYMZBc/07iEpEEtGAB/Pvf4bWLL4bjjove99QAVkRixlNPVR55tRZmz4bXXvO3JxGRA2EtPPQQrFkTXh82zE2tExGJd2vWuPU3Q3XsCJdfHt3vqwGsiMSEhQvdEddQHTrAWWf504+IyMH45z/h7bfDa7/9Lfzyl760IyISUaWlMHmyO/WrXKNGbupwtGeYaAArIr778kt3/kSoQw+FsWOhcWN/ehIROVBFRfDww+G1rCwYNMiffkREIm3OHFixIrw2aBCkp0f/e2sAKyK+WrfOne8aeo5Yw4Zw++1E/LphIiLRtnMn3Hcf7NhRWWvY0C1O17Chf32JiETK8uVuABuqZ08455y6+f4awEZIgwYN6NatW8Vt5cqVvP322zRv3ryi1qdPHwDuvPNO0tLSWLduXcXjmzZtWvG1MYbc3NyK+5MmTeLOO++ss9ciUldKSmD8eLf8eqgRI+CYY/zpSfZOWSeyd088AStXhteGDoX27X1pRw6Qsk6kesGgmzocushmixbu/P79vQTigdIANkJSU1P59NNPK27Z2dkA9OrVq6K2YMGCiv1bt27N5MmTq32uRo0a8eKLL7J+/fq6aF0k8gIByM6GpCT3ZyCwxy5lZW7F4YKC8Prll0fnotcSGco6kRBVsu7fd77BP/4RvssZZ4A3zpE4oqwTCRGSdTPSx7P246KwzSNGQPPmdddOQi3i3q9fdJ//5Zcj91wDBw5k1qxZ3HLLLbRs2TJsW3JyMkOGDGHKlCnk5+dH7puK1IVAAIYMcYdXwY1QhwxxX4dc+HDWLPjoo/CHnn569FeuSwTKOpEYUCXr1hWUMO3uzdClCNIzADj8cLj++ro7KpFolHUiMSAk697nNBZuPAk2LXXb0jPo2xe6d6/blnQENkKCwWDFlJILLrigov7uu+9W1ENDq2nTpgwcOJBp06ZV+3w33HADgUCATZs2Rb13kYjKy6scvJYrKYHhwys+vXvzsD/w0vTwT++OPtp9gqc3erFNWSfiCcm63SQxiVFs290YPv8CFi6gwStzGfPqmTSZu+cMFIl9yjoRj5d1xbRkOje6Wtlu+PwL2r/9NAOGNqpxtl20JNQRWD+VTzWpqlevXrzyyivVPuamm26iW7duYedFlDvkkEO46qqreOCBB0hNTY14vyJRU1hYfb24GIqL+ZzjeWjdhbC+8tO7li3dok2NGtVdm3JglHUinpCs+ytXsIzO7s6unbAL+jObjj/8C4Z4U01CZqBI7FPWiXgKC7HAVEawlcpzu5N3lTBq1x00ZGeNs+2iRUdgfdSiRQuuuOIKHnrooWq3jxgxgscff5xt27bVcWciByEzs8ZNazmMe7iNUpLdp3fLl1esONyqVR32KHVKWScJycu6JXThOS4O29Sdjzmfue5OSYk7giEJT1knCSkzk/n8nk/pFla+kqfpwPeVhTrMuoQ6AhvJcxnqys0338wpp5xCaeg1RDwtW7bkkksu4fHHH2fgwIE+dCdSC4GAC6zCQveG7txzYfbsPaYRbyON8YxjC80qi8EgI0dCx4513HOcU9aJ+KCarNs06yUmB3OxVJ770JINjGQKYWdD1DQzRfZKWSfik5C8W9m8K7PMQAhZdfhEPqv8kC5UHWWdjsD6rHXr1lxwwQXsCL1gXIjc3FytWiexq/zE/oICt556QYEbvPbvD1lZ7oTWrCx2t2zDREazivDrSOS0/j9OP92n3qVOKeskrlWTdXbWbKYc/xgbU49w+6SmYlJSyGUyzalybbC9zEyRxKKsk7gXknc7bTKTfr7GzZxLcReybpIGNx86i6TQEW25Oso6Y2013zyG9ejRwy5atCistmzZMjp37uxTR/6qz69dYkB29p7XwQE3eA25EOJjg/7DvCc3uGnDnjNS/sOoJ47D/CEy50oYYz621vaIyJPFAGVduPr82iUGVJN1L3E+T6TeAGdXXiPnsvbvkzP71+EzUNLSYObMiJ0XpqxLbPX5tUuMCMm7x7iGeZzn6qmpcHYfRo+GM1ZVueIE1GnW6QisiBy4mqaKhNTfeAPm/XgqdO3iwg/o2OxHhj96QsQGryIiUVUl676iI7PpD8FgRe244+CyB3/p3sCFzECJ5Bs6EZGo8/JuMd0qB68AwSC9e7trW5OT42vWJdQ5sCJSxzIzqz8C600h+ewzePhhr5aeAekZtGoFt98PDVvu+TARkZgUknXbSGMCY9hNg4oP5Zo2hdGjoUED3Bs4DVhFJF5lZrKloJipjAgrt21SwrXXhhR8zDodgRWRA5ef76aMhEpLg/x81qyBP/8ZdlfOGqZRIxg7Flpq8Coi8cTLOgtM50Z+5DBIagCdOgHuGtatW/vboohIJNi785mecjMbqHyzZhokkTsujSZNfGwsRMIcgbXWYozZ944JJN7OX5YEVP7JW+jKnPn5bDs/h/GjYMuW8N1vvhmOOqru20wkyjoRH3hZ9+bNr/PeutPdkddOnSA9g379oGdPn/tLQMo6EX8sOCyHD04oguXL3WkSqalc3D+N48ac5ndrFRJiANu4cWOKi4tp1apVvQk7ay3FxcU0btzY71akvqsyhWT3brjvT1BUFL7blVfCabGTfXFJWSfin8JeOcw4PQd2VtY6dICrr/atpYSlrBPxx5o17lTW8tO+wF3q8PIJ/vZVVUIMYDMyMigqKuKnn37yu5U61bhxYzIyMvxuQyTM44/D4sXhtTPPhIsv9qWdhKKsE/HHzp1w333uz3KNG8OYMdCwoX99JSplnUjdKy2FyZNh+/bKWqNGkJsLyTE2Yoyxdg5MSkoKRx55pN9tiNR7r76654Xnjz0Whg1zi9TJwVHWifjj0Uf3XHR96FBIT/enn0SnrBOpe3PmwIoV4bVBg2Iz57SIk4hExKefwowZ4bXWrd3psTpCISLx6r334PXXw2u9e8PZZ/vTj4hIpC1f7gawoXr2hHPO8aeffdEAVkQO2urVcO+9UFZWWWvcGMaNg0MP9a8vEZGD8eOPMH16eO2II+C66/zpR0Qk0oJBN3U4dA2xFi1ie/acBrAiclC2boXx42HbtsqaMe6cCc0AE5F4VVoKEyeGZ1tysjvv1bv8q4hI3JsxA9auDa+NGAHNm/vTT21oACsiB6y01B15/eGH8PpVV8Gpp/rTk4hIJAQCe54PNnCgLgUmIonj/fdh4cLwWt++0L27P/3UlgawInJArHVLrS9ZEl4/6yy48EJ/ehIRiYTFi+H558Nrv/iFe2MnIpIIiov3PEWifXsYMMCffvaHBrAiUnuBAGRnQ1IS/zhsIK89Fn6x186d4cYbY/ecCRGRfdm40Z0PxuoiWLgAXnmZVm89z4h2c5RtIpIQrIUpU9xpYOVZl/zKS4ya14uGzwX8bm+fEuIyOiJSBwIBGDIESkpYTDdm/nQ+FC9129IzaNvWrTickuJvmyIiB8pauP9+2PRlESxZCmW7MVhGbbuTZsO/h9RSyMnxu00RkYMyb543g251ZdZdydN0+OE9GPKJ2ymGsy5qR2CNMe2NMW8ZY5YZY74wxgyvZh9jjHnAGPONMWapMebkaPUjIgcpLw9KSiginfu4BYuBst2wfDmNG8PYsbF9wn+0KOtEEscLL7hLgrF8ucs34HKe5QS+gJISl4P1lLJOJDGsXAmzZ3t3vKzrwlIu4CVXi4Osi+YR2FIg11r7iTGmGfCxMeZNa+2XIfv8Fujo3XoCD3t/ikisKSxkC00Zzzi20aSibIIljBnjZhbXU8o6kQSwfDk8/bR3JxgE4AQ+51JCLo5YWFj3jcUOZZ1InNu5EyZNcotwAhAM0oRtjGQKYWdIxHjWRe0IrLV2jbX2E+/rLcAyIL3KbucBT1nnP0ALY0y7aPUkIgeutP2R/Jk/sobwX9EBbf7BKaf41FQMUNaJxL+tW90lcyquZZ2aSjO2MIpJJBFyccTMTF/6iwXKOpH4N3s2FBSEFFJTuYG/0Jri8B1jPOvq5BxYY0w2cBLwYZVN6cCqkPtFXm1NXfQlIvsQCEBeHragkEfSRvOZ6Qq2rGLzr1L+xfn3n+Fjg7FFWScSf6yFB6/5lHUvr3dHXlNToe1hjFz7J1rt2FC5Y1oa5Of712gMUdaJxJ/Fi2H+w0VuuomXdb1P+plen34CJSE7xkHWRX0VYmNMU+AFYIS1dnPVzdU8xFYtGGOGGGMWGWMW/fTTT9FoU0SqKl+0qaCAl+nLGyWnu3pKQwCOP6SI6x87GfOH2D3Jvy4p60Ti0+u3vMUHz/9QMW2YYJDz1jzMKQNPhKwst6x6Vpa7blgML2pSV5R1IvFn82aYetN3bsEmL+vaBgu4dvF10L9/3GVdVI/AGmNScCEXsNa+WM0uRUD7kPsZwA9Vd7LWzgRmAvTo0WOPIBSRKPAWbfqYk3mMQa5myyC5AYdd1Y/b7ofkQ/xtMVYo60Ti08qV8Oj0HRULNgEczTf03/kovJrudpAKyjqR+GOtu97rho+/q8g6gyWXyTQJrodXX427rIvmKsQGeBxYZq29v4bd5gNXeavWnQpsstZqmomIH0Ku8Up2NhQUUEj7yhWHPWnBYu64Aw7R4BVQ1onEHS/rtptU7jvxGXYFd1Vsasx2xjCBFEpjfhGTuqasE4kzXtYtSPo1/757QeUsE+BinuM4lrk7cZh10TwC+0vgSuAzY8ynXu02IBPAWvsI8CpwLvANbvb1gCj2IyI1CbnGKwAFBWzmEMYzjiCpFbsZLGMOf5r27S/1qdGYpKwTiRchWTeTYRRtDb/2141Mpx1r3Z0YX8TEB8o6kXjhZd2akkOYyeCwwWtHvuZynq3cNw6zLmoDWGvte1R/LkToPha4IVo9iEgtedOFy5XSgHv4Iz9yWNhu1zR8hu6TLq/r7mKask4kjnhZ9y/O4E1+FbapDwv4f7zj7sTBIiZ1TVknEkfy8igt2cFkctlO44pyI3aQy2SS8U6biNOsi/oiTiISB0Kmj1jgL9zAFxzvCqnuCOw5h37E7x8/L+ZP7BcRqVFhIWs4nL9UGWOls5prM1+Pq0VMRERqVFjI37mEFRwbVh7EY6RnpcR91tXJZXREJMZlZlZcGGwu57OAPq6emgpn9+HEE2Ho+H4YJYaIxLHS9kcyofDGsFMjUtjFLUc8Q+OCFT52JiISOcvb9eZvP1wWVuvJh5yTuTzuFmyqjo7AioibPpKWxkf04MnyU5aSGkCnTrRrB3/8IyRr8CoicW72rwN8k1TliESjZzhywnU+dSQiElnBIEw+ZgY2qfKNWwt+Zljq45h74m+6cHX0llREICeHgvVNmHBbCrakzB157dSJtI4ZjB0LzZr53aCIyMH56COYu/ZU6FoEy5dDMMj/tFjGbx+8MC6n0ImIVGfmTFjb9Gjo2rgi60YcPofmkyYlTNZpACsibNoE45eez/azKmvGwC23QPv2NfhxegEAACAASURBVD9ORCQeFBfD1KnenfQMSM+gTRu46YF+mKa+tiYiEjEffAALFnh3vKzr2xe6X9vP174iTVOIReq5XbvcDOJ168LrgwfDySf705OISKSUlcHkybB5c2UtKQlGj4amGryKSIIoLoYHHwyvtW8PAxLwYlYawIrUY9bC9OmwbFl4/Te/gb59/elJRCSS/v53+Oyz8FpODnTu7E8/IiKRZq2bZbJ1a2UtORlGjYKGDf3rK1o0hVikPgoEIC+PFwt68M/UodCpk5tqAnTpAtde66YQi4jEsy/ue4W//qkRBLdXnNvf9dwMLrrI785ERCJnfu6/+PSRXW4FJy/rrrw9gw4d/O4sOnQEVqS+CQRgyBA+LDiM2Vzlwm7JUlhdxBFHwK23asVhEYl/Wx6bw6S8jdjgdlcIBmm+9D1ubv8cSXr3IyIJYuXUucx6YJN7PwcQDNLls79yQUnA38aiSBEuUt/k5bGypA2TGIXFO8xatpsmKxYzbpxWHBaR+GctTBu1ivW7W4TVR+6eSMs/j/apKxGRyNq5EyaN20Tp7sppc03YxsjSCZjb83zsLLo0gBWpZ34u2MR4xrGdxhW1JMq4tWQc6ek+NiYiEiGvvAIfbgq/3usFvER3PoHCQp+6EhGJrKeegoItLcNqNzKd1hQndNZpACuS6AIByM6GpCR2ZnUkv/Fd/ESbsF2uZQbdsjb605+ISCR4WfedOYonLn0DUipXLjmGr7iKp9ydzEyfGhQRiQAv6xabk5l304KwrDuLf3I677s7CZx1OtNNJJF557tSUoIFphf2Y7k5EgxgywD4Hf/g3LR/Qf5MX1sVETlgXtYFS8q4j6mUBneCSQKTRJrdymgmksxuSEtz1w0TEYlHXtZtKUliKn9y5716WdfWruVaZrj9EjzrdARWJJHl5UFJCQDPcxFv0dsNXJOTITWVbixhcOb/wcyZ7roSIiLxyMu6RxjKDxzhal7W3XjY8xxu1kFWlrJOROJbXh62pITp3MgGvKnDtgyT3IBRR/yVNLO9XmSdjsCKJDLv/Id/cypPcVVlfddO0gf245ZJfWjQ9HafmhMRiZDCQt7iTP7JWWHlc3a9Qq+1z/nUlIhIhBUWsoA+fMBpYeVLdgXovHqhT03VPR2BFUkkIee7kp0NLVvyHUcymdyw3ZqmWcaNg6ZNfelSROTgVMm61c2P4yGuD9ulPasYnPmGP/2JiERClaxb06IzMxkStktHvuayzA/86c8nOgIrkihCzncFoKCAjcltuCvpDnaUNarYrUED+OPtDTjiCJ/6FBE5GFWyblfBaiYk3c92k1Zxbn9DdnJL4wdodM8dfnYqInLgqmRdaUERk5MmhGVdI3aQ2/ghku8Z72endU5HYEUSRcj5rgA7SSG/dAzrGxwOqamumJrK0Jub0OWPv/OpSRGRg1Ql655kAN+VZVec2w8wuO18sh4bm9DngIlIgquSdX/nElaUddwj69If+1O9yzodgRVJFCHX+7LANIazgmNh1044px8A/frBb4bU8HgRkXgQknUf8gtexuVbedadfjqcM6afW21dRCRehWTdco7lb1zm7nhZ17Mn/DqvfmadjsCKJIqQ6339nUt4hzPcHe9Tuu7d4Zpr/GhMRCSCvKxbTyumMbyynppK27Zw441g6uEbOhFJMF7WBWnMZHKx5SPV1FQOPRSGDau/WacBrEiiyM+HtDTe5zSe4Q+ultQAOnWifXsYPdqd/yoiEtfy89md2pRJjGILzVwtqQENjjuWMWOgSRN/2xMRiQjvfd0MrmUth7ua975u+HBo3tzf9vykKcQiiSInh2/WNuX+cQ2hpNQdee3UiWadMhg7Vm/qRCRB5OTwt/ez+WJWEILBiqy76rYMjj3W7+ZERCIkJ4f3v2rDwolJYVnX99oMunf3uzl/aQArkiA2bIC7lp7HzpDLICYnw223Qbt2/vUlIhJJS5fCnKJfwtmVtZNPhgsu8K8nEZFIW78epn/167Csa98eBgzwr6dYoSnEIglgxw64+243iA11/fVwwgn+9CQiEmmbNsHkyWBtZa1FCxg5sv6eCyYiicdamDoVtm6trCUnw6hR0LChf33FCg1gReJcech9/XV4/fzz4Ve/8qcnEZFIK8+60A/qjIHcXDeIFRFJFPPmwZIl4bUrr4QOHfzpJ9ZoACsS5559Ft57L7zWo4emmIhIYpk/HxYtCq9dfDF06+ZPPyIi0fD99zB7dnitSxedJhFKA1iReBUI8M7hl/BszsuwcAGsLgLcquujR0OSfrtFJBEEAnydfiazzn8pLOs6d4bLL/e5NxGRSAkE2JnVkUkdHqL0jcqsa9JEp0lUpUWcROJRIMBXgyYwbfs4dz8YhCVLOSR1F+MeO5K0NH/bExGJiECAksHDmRi8h1KSK7KuSaNSRo3KJlnvYkQkEQQCMGQIs0uuoJD2FVkHcMO0DFq39rm/GKNjNCJxaP2tk7h7ey47qTyTP7lsB3nfD+aww3xsTEQkguxtefwlOIA1hCylXrabm76/mbZt/etLRCSi8vJYXHIM8/l9Za1sN71XPkmvXv61Fas0gBWJM9u3w11FA9jIoWH1G5nOcWv/6VNXIiKRt7CwI+9wRljtXF7ltHVzfepIRCTyNhdsZAojw2ptWcfQjff61FFs0wBWJI5YC1OmwHepx4XV/5cXOZt/uhNgRUQSwKpV8Eha+Bu6bFZyDY8r60QkYVgL01vkhR2YMFhymUxaVhsfO4tdGsCKxJFAAD74AOjUCZIaAPAL/kt/ZkNaGuTn+9ugiEgE7NwJEybAjmO7VGRdI3Ywhgk0TEtR1olIwliwAP595BUVWQdwMc9xXFqBsq4GGsCKxIl//QvmzPHupGdA1y5kNytmFJNJysqEmTMhJ8fXHkVEIuHxx2HlSiqyjtRUhjKD9lkNlHUikjDWrHGRFpp1HfmGyzM/UNbthdbvE4kDK1bAtGnhtebHZTD29atJbXu1Lz2JiETDBx/Aq6+GFNIz+H9XZHB2bh/QZSREJEGUlsLkyW5tEwDSM2jUIYPcaX1ITh+518fWd1E7AmuMecIYs84Y83kN2880xmwyxnzq3cZFqxeRePbTT3D33bBrV2UtORny8tAqnDFAWScSOevWwQMPhNfatYPrr9c1EGOB8k4kcubMcQcoQg0aBOnp/vQTT6J5BHYWMB14ai/7vGut7RvFHkTi2vbtcNdd8PPP4fWbboLOnf3pSfYwC2WdyEErLYWJE2HbtspacjKMHo2ubR07ZqG8Ezloy5eHnBbm6dkTzjnHn37izV4HsMaYxkBfoBdwBBAEPgf+Ya39Ym+Ptda+Y4zJjkybIvWPtW5qyfffh9cvugh69/anp0R2oHmnrBOJjL/+1b2pC9W/P3Ts6E8/iUrv7UT8FQy693fWVtZatIBhwzTTpLZqnEJsjLkTeB/4H+BDYAbwd6AUuNcY86YxpstBfv//McYsMca8Zow5/iCfSyRxBAI81SaX/9z+MixcAKuLADj1VLjqKp97S0B1kHfKOpHqBAKQnc2n5iSeH/pmRdYBnHIKnHeej70lIL23E/GJl3UkJTEjfTxrPy4K2zxiBDRv7k9r8WhvR2A/stbeWcO2+40xbYGDuRDbJ0CWtXarMeZcYC5Q7eesxpghwBCATF37TRJdIMBb1zzD8zuud/eDQViylA5ttpKb20mfzkVHNPNOWSdSnUAAhgzh55IUJnMXNrgdliwFoOWJGQwfrqMRURAT7+2UdVKveFlHSQnvcxoLN54Em1zWkZ5B377Qvbu/LcabGo/AWmv/ARVTTcIYY1pba9dZaxcd6De21m621m71vn4VSDHGtK5h35nW2h7W2h5t2uiCvpLYlo15ggd2DAmrtSgrZuyXl9N4j99GiYRo5p2yTqQGeXnYkhImk8vPtHC1st2Y5csYNUpHI6IhVt7bKeukXsnLg5ISimnJdG50tbLdsHw57dvDgAH+theParMK8UfGmFPL7xhjLgQ+ONhvbIw53Bj32aox5hdeL8UH+7wi8WzdOsj/YQClIZMjUtjF7dxN66JPISnJTUEJBPxrMrFFPO+UdSI1KCzkBS7kU7qFlS8NzuLErsq6KNN7O5G6UliIBaYwkq00rSgnB7cwal4vGjZW3u2v2qxCfAXwhDHmbdzJ/q2As/b1IGPMs8CZQGtjTBFwB5ACYK19BLgIuM4YU4pbQOAya0NPZxapX4JBt+LwptTD3R3PcKZxLF+5O9ZCQYGbigK6wHXk7XfeKetEDsyKdmfy9A9XhtWO5wsu42/KuujTezuRupKZyfyCriyha1j5Sp6hww/vuTvKu/1iapMrxpjzgaeBLcAZ1tpvot1YTXr06GEXLTrg2S0iMamsDPLz4b//xS1ismQplO3mUubwB2r4RC4rC1aurMs2Y5ox5mNrbY8IPE9M5J2yThLZtm1w0+++Yd27X7mpdEAztvAAN9G66gE7ZV0YZZ1IfFk5dS4jRyVRurvypP4ufMbd5LHHaf7Kuwp7y7p9TiE2xjwOjAC6AAOAl40xN0S2RZH67amnvMErQHoGdO3CaS2WkcNfa35QYWGd9FafKO9Eos9amD4d1jU7Grp2gdRUwM022WPwCsq6KFDWidSNnTth0jfnU9rl5Iqsa5IGI7l/z8ErKO9qqTbnwH4O9LbWfm+tfQM4FTg5um2J1B8LF8ILL4TXOvTKYOSaMRhb5j6Nq45WbowG5Z1IlL3xBrznzZojPQPO7kO/Gf3omfVj9Q9Q1kWDsk6kDjz1lJsdXJ519O3HjW/0o3VW0+ofoLyrlX0OYK21U0LPX7DWbrLWXhPdtkTqhy+/dEciQh16KIwdS+WKw/n5kJYWvlNamqtLRCnvRKKroAAefTS81qGDtwqnsq7OKOtEom/xYpg3L7x21llw+uko7w5SjQNYY8zLxph+xpiUarZ1MMaMN8YMjG57Ionrxx9dTpWWVtYaNoTbb4fWoRcdyMmBmTPdkVhj3J8zZ+ok/whS3olE344dcN99bkpducaNYcwYSElBWVcHlHUidWPzZpg6NbzWti1ce613R3l3UPa2CvFg4GZgijFmI/AT0BjIBr4Fpltr59X8cBGpSUkJjB/vAi7UiBFwzDHVPCAnR6EWXco7kSh79FFYtSq8dv31kJ4eUlDWRZuyTiTKrIW//AU2bKisGQOjRlU56Kq8O2A1DmCttWuBMcaYVcB7uIALAl9Za0vqqD+RhFNWBhMn7nme/uWXQ69e/vRU3ynvRKLr3Xfdua+hzjoLevf2p5/6SlknEn0LFsAHVa6qfMkl0LmzP/0kotos4nQY8BwwEjgcF3QicoCefBKqXjHg9NPdAFZ8p7wTibC1a+HBB8NrRxwB113nTz8CKOtEomLNGjcTOFTHjnDZZf70k6hqs4jT7UBH4HHgauBrY8w9xpijotybSMJ5802YOze81rGjmzpsql1PXeqS8k4kskpLYcIECIYMj5KT4ZZbQhaqkzqnrBOJvN27YfJk2L69staoEeTmutyTyKnNEVi8lerWerdS4FDgeWPMhCj2JpJQPv8cHnoovNaypVu0qVEjf3qSPSnvRCLnqafg66/DawMHupWHxV/KOpHImjMHVqwIrw0eXOU8f4mIfX4eYIy5CegPrAceA0Zba3cZY5KAr4Ex0W1RJP6tWQP33LPnisNjx7pBrMQG5Z1I5Hz8Mbz0UnitZ0/o29effqSSsk4kspYvh7/9LbzWsyf8+tf+9JPoanNAuzXwv9bagtCitbbMGKP/hkT2Yds2uOsu2LIlvD5yJBx9tD89SY2UdyIRsGED3H9/eK11axg+XKdLxAhlnUiEBINu6nDllZXh0ENh2DDlXbTscwBrrR23l23LItuOSGLZvdud/1X10hE5Od6FrCWmKO9EDl5ZmXszF3qZMGNg9Gho1sy/vqSSsk4kcmbMcIvVhRo+HJo396ef+kCnFItE0RNPwCefhBRWF3HG909x6Su3w62ZkJ+va4CJSEJ5/nlY+lqRm1MXDEJqKjnXNOa44/SpnYgklvfv+D8WTkyqyDo6daLf0Ay6d/e7s8RWq0WcRGT/vf46zJ8fUlhdxLGfvcDwn+/EYKGgAIYMgUDAtx5FRCLpyy8hcN8qWLK0YunhLsEPufjx3yjrRCShFD/yHNPzN1Uusx4M0v6zV7m60bP+NlYPaAArEgVLl8Ijj4TXWn/1b/JK76QhuyqLJSVunkl2NiQluT/1Jk9E4tCWLTBxIpQtWwFluwE4hM3kMpmk4DZlnYgkDGthyi1r2bq78npgyZQyqvReGuYOU9ZFmaYQi0TYDz/An/8Muwsrp9A1SmvA2JJbOJSf93xAcbG7QeVRWdDUYhGJD4EA9rY8Hij8A+tTzwy76OtIptCSje6Osk5E4lkgAHl5UFjIvNaDWLK5X9jmK3maDnwPxSjrokxHYEUiaNs2GD8etq4oCptCl1tyFx3Myto9SUmJC0gRkVgXCMCQIbxaeDz/oWfY4PUCXqIHH9f8WGWdiMQLL+soKOB7m8Xsn34btrkLS7mAl6p/rLIu4jSAFYmQ3bvh3nth9WrckVdvCl1/ZvM//MfNN6nteuqFhdFrVEQkUvLy+K7kMB5jUFi5I99wFU/t+/HKOhGJB3l5UFLCTlKYxChKQyaxNmEbI5nCXt/hKesiSgNYkQh57DH49FPvjncUojdvcSEvVO5kLWRluYFsVha0alX9k2VmRrdZEZEI2F7wIxMYE/ZmLpUgo5lAclaGsk5EEoM3AJ1NfwoJz60bD3ue1maDsq4OaQArEgGvjn6LV0YugFdehoULIKUhnVjOjUwP/0QuKwtWrnQXSly5EqZNg7S08CdLS3OX1xERiTWBQNjiJI+k3cxq0sN2uZHptMtqpKwTkfhVJeto2ZLFdGM+vw/brfehn3L62ueVdXVMA1iRg/TpPa8yY8q2sGXU25SuIS9lYviKw9UFWE4OzJwZflR25kyd6C8isSfkHDCs5a2CI1kYPA1M5VuJX/EmZ6R9rKwTkfhVJesoKGDzJsuUpNyw3do22MDQSR3DH6usqxNahVjkIKxeDffm7y4/3RWAxmxnnL2TFoeUQdMsN+0kM9O9oasuwHJyFGwiEvu8c8AAfqAdD3E92DJIaQjJDWgf/JohmW/APTW8WVPWiUg8CMk6AAs8WDqUjSltoFEDCAYxqY3JvbMlaQP77fl4ZV3UaQArcoC2bHErDm+rzDgMllFMIpsC2GBg/Xr/GhQRiSTvHLBdJDOBMWzHu/7hrp2k9O3HmPv70Dj7Oh8bFBGJgCoLLi2gD//hVNi1E85xA9aLL4HjrvSjOQFNIRY5IKWlbsXhH34AUlMr6lczi578193RCfsikki8TJtNf77lqMp6aiqDB7vTxERE4l7I+7cfaMdMvOu4eu/3OnaEyy/3ozEppwGsyH6yFmbMgKVLvUKnTpDUgLNZWHkNMJ2wLyKJJj+f/zbqxTzOq6wlNeC0fq35zW/8a0tEJKLy8yEtjVIaMJlcN9skqQF06kSjRpCbC8maw+orDWBF9tMro97m9dEhKw4DnX+bzQ2Zr2B0wr6IJIoqq3Cu39KIqSc/VTnrJDWVtr2OYdjj3Wp9iWsRkZhTdcVhgJkzmdPqBr7iGJd5XbtAegaDBkF6+t6eTOqCPj8Q2Q8f3/0aj04rg91lrhAM0nbpQvKuSyXllW/8bU5EJFLKV+H0FjIpKyhk8rCVbDnxVDi7D+De642+D5o29bNREZGDUCXrKCiAIUNYfuffmHPaNLeCk6dnTzjnHH/alHA6AitSS6tWwYQ/78aWD17xVhzePY7m+WN87ExEJMKqrMI5h0v5vPRYWL68ovaHP7gzKERE4laVrAMIlpQxafw2bMjgtUULGDYMzTaJEToCK1ILW7bAXXdBSUllmhksY5hAFoVQqEQTkQQSsgrn5xzPs3grlnjXu+7WDS66yI/GREQiqMqKwwAzuJYftzYJq40YAc2b11VTsi86AiuyD6WlcM89sGYNYSsOD+BJTmGRu6MVh0UkkXiZtplmTGIUFu9DutRUmjeHm2/WkQgRSQBV3r+9z2ks5Oyw93t9+0L37nXdmOyNBrAie2EtPPIIfP65V/BWHP4Vb3I+c11NKw6LSKLJz8empjGVERTTytW8VThzc+HQQ/1tT0QkIrwVhwGKacl0bqzIOoD27WHAAD8blOpoCrHIXsyfD2+8EVJIz+CEjE1cv+QfmFXGfXKXn68Vh0UkseTk8PLH6Xz0SKmbNpyaCp06cdHwDE46ye/mREQixHv/Zm/LY0rhYLamtnGD1/QMkpNh1Cho2NDnHmUPGsCK1GDRInj88fDaYYfBH+8/nuRDvvWnKRGROvDNN/Dk92fC2ZW1Y4/VZ3UikoBycpjXJIclVd7zXXkldOjgT0uyd5pCLFKNwkKYMIGwFehSU+GOO+CQQ/zrS0Qk2kpKXP6VllbWmjSB0aMhWR97i0iCWbkSZs8Or3XpAhdc4Es7UgsawIpUsXkzjB9fsdgm4BYrueUWdy6EiEiishYeeshbtC7EsGFuBoqISCLZuRMmTdrzA7uRI7VQXSyL2gDWGPOEMWadMebzGrYbY8wDxphvjDFLjTEnR6sXkdoqX3H4xx/D64MGaQU6qZ6yThLJP/8J//pXeO23v4Vf/tKffiS2KO8k0cyeDQUF4bUbboDWrf3pR2onmkdgZwG/2cv23wIdvdsQ4OEo9iKyT9bCX/4CX3wRXv/Nb6BfP396krgwC2WdJICiIni4yr/OrCz3AZ6IZxbKO0kQixe7xTpD9e4NvXr504/UXtQGsNbad4ANe9nlPOAp6/wHaGGMaRetfkT2Ze5cWLAgvHbiiXDttZpGIjVT1kki2LkT7rsPduyorDVs6E6d0AqcUk55J4li82aYOjW81rYtDB3qTz+yf/w8BzYdWBVyv8ir7cEYM8QYs8gYs+inn36qk+akfvnoI3jyyfBau3bwxz9q0RI5aMo6iXlPPOEWMgk1dKjO+5f9Vqu8U9aJn6yF6dNhQ8hHMca4S+Z4l4SVGOfnALa6Y1q2mhrW2pnW2h7W2h5t2rSJcltS36xcueeKw02awLhx0KyZb21J4lDWSUz797/hH/8Ir51xBvTp408/EtdqlXfKOvHTggUu90Jdcgl07uxPP7L//BzAFgGhn+1mAD/41IvUU5s2wV13wfbtlbWkJDdtLiPDv74koSjrJGatWwfTpoXXDj8crr9ep07IAVHeSUxbswZmzgyvdewIl13mTz9yYPwcwM4HrvJWrDsV2GStXbOvB4lEyq5dkJ/v3sCFGjwYTjrJn54kISnrJCbt3u0uH7FtW2WtQQMYM8bNQhE5AMo7iVmlpTB5cvhBi0aNIDdXp4vFm6j9dRljngXOBFobY4qAO4AUAGvtI8CrwLnAN0AJMCBavYhUVb7i8LJl4fVzz4Xf/c6fniQ+KeskXv31r3tmYP/+7miESHWUdxLP5syBFSvCa4MHQ3q1q1JILIvaANZae/k+tlvghmh9f5G9efFFWLgwvNa1qwsyTZuT/aGsk3i0ZAk891x4rXt3OP98f/qR+KC8k3i1fLkbwIbq2RN+/Wt/+pGD4+cUYhFffPihu3B1qPR0uPXWaqaQBAKQne1OjM3OdvdFROLYpk1uGl3ownUtf/6OkU+ciGmgrBORxBIMVsm81UUc+tYLDBvbAnNktvIuDmnGt9Qr33/vzvmquuLw2LHQdF4A8vKgsBAyM9184tmzoaTE7VhQAEOGuK9zcuq+eRGRg2QtTJkCGz8vcockgkFMSgq5No/mpZ+7nZR1IpIoAgFmDPuWtRtPgtRUaHsYrFrF8LJ7aM4mKNikvItDOgIr9cbGjTB+/J4rDt96K6S/HXABVlDg3uEVFMAjj1QOXsuVlLhBrohIHJo7Fz6eXwRLlrrDEsAlu56hS+kn4Tsq60Qk3gUCvH/NEyzc6K3MGQxCwUr6lc2lOyGZp7yLOzoCK/XCzp1uxeH168Pr114L3boB5+ftOVi11V6q0x2hFRGJM1995Z0+sXw5lO0GoDPLuJxnq3+Ask5E4ljxrROZvuOWsFp7VnE1s/bcWXkXV3QEVhKetfDgg3uuPNe3r5slDOxfcGVmRqw3EZG6sG0bTJjgLp1TfuS1KVsZzUQaUFb9g5R1IhKnrIUpRRezlaYVtWRKGcUkGrJrzwco7+KKBrCS8J57Dt5+O7x20kkwaFBIoabgqrokcVqaO5QrIhInrIXp0+HHH71CaioAI5hKG9ZX/yBlnYjEsXnzYElqz7DalTxNB77Xe7sEoAGsJLQPPoCnnw6vpafDLbdAgwYhxfx8F2Ch0tJg6FDIynJhl5UFM2fqJH8RiStvvgnvvRdS6NSJfg3foCf/raylpECrVso6EYl7K1d6p0t06gRJ7s1eF5ZyAS/pvV2C0DmwkrC+/Rbuvz+81rQp3HGHW3mYQJVVh/v3h1dfrbyfn69AE5G4VlgIM24vhM+/clOHU1Pp0CuDq2f+Eu54RXknIokjEGDnbXcyqXAEpanHugFs1y40WbGYkSVTMVlZyroEoQGsJKQNG+Cuu2DHjspagwbwxz9Cu3a4weuQIeGXyJk9W5/CiUjC2LkT7rvmK3Z+/E3Fok2NgxsZ885QGl71J3eYQkQkEXjv62aXXEEBme4DuyVLoWsXbni9H617/eR3hxJBmkIsCWfnTrj7biguDq9fdx106eLdyatm1WEtoy4iCeTRR6Hw/cKKwSvAUB4hffu3yjoRSSx5eSwuOYb5/L6yVrab3iufpFcv/9qS6NAAVhKKtTBtGnz9dXj9vPPgnHNCCjWtOqxl1EUkAbz3Hrz+OhUrDgP05i3O5p/ujrJORBLIloINTGVEWK0t6xi68V6fOpJo0gBWEsqcOfDOO+G17t1hwIAqO9a06rCWUReROPfjj27VYaBixeEj+IHreLhyJ2WdiCQIa+HBqvlMKAAAIABJREFUFrezgZYVNYMll8mkZbXxsTOJFg1gJWG89547BSJU+/YwenSVFYeh5lWHtYy6iMSx0lKYONFd9xWATp1IbmAZwwRS2e5qyjoRSSALFsC/j7yiYsVhgIt5juPSCpR1CUoDWEkIX38NU6aE15o1g7FjvRWHq8rJcQs2aRl1EUkggQCsWBFSSM9g4PBDOCprt7JORBLOmjUu0kjPgK5dIDWVjnzD5ZkfKOsSmFYhlrhXXOwWbdq5s7KWnAy33eatOFyTnBwFm4gkjMWL4fnnw2u/+AX0vf1MmLzSj5ZERKKmtBQmT4bt3uQS0jNo1CGD3Gl9SE4f6WtvEl06AitxbccON3jdsCG8fv31cMIJ/vQkIlLXNm50b+RCtWoFI0a4A68iIolmzpwqM06AQYMgPd2ffqTuaAArcctamDoVvvkmvH7BBfCrX/nTk4hIXbMW7r8fNm2qrBkDo0a5UylERBLN8uVuABuqZ88qV5yQhKUBrMStZ591CzeFOuUUuPpqX9oREfHFCy/Ap5+G1664QrNQRCQxBYNuxom1lbUWLWDYMM04qS80gJW49M47bgAbKivLHXFI0r9qEaknli+Hp58Or51wAlxyiT/9iIhE24wZsHZteG3ECGje3J9+pO7prb7Ena++gmnTwmvNm8O4cXteGUdEJFFt3eoumVNWVllr1kwf5IlI4nr/fVi4MLzWty907+5PP+IP/RcncWX9+ppXHG7bdi8PDAQgO9u9q8vO3vOCsSIiccRaePBBWLcuvD6y02u06p6trBORhFNcDNOne3dWF8HCBbR/5WEG3NNRWVfP6DI6Eje2b4e77nKrbYa68UY47ri9PDAQgCFDoKTE3S8ocPdBl9ERkbj0+uvwwQfhtfMO+w+n3HeRsk5EEo61MGWKm3nC6iJYspTksh2MYiINC79X1tUzOgIrcaE8uL77Lrx+4YVw9tn7eHBeXuUbunIlJa4uIhJnVq6ERx8Nrx19NPR/8w/KOhFJSPPmwZIl3p3ly+H/s3fn4VFVBx/HvyckSMKmEEEkkICiIAqoWHdFoRuVutU1LtQqolJk0da3sVZrsYtsIm6g1oVo3RGsvtalKtbqKy5sgjsJYRVQCCRIQs77x73JzJ3MJJNkJneW3+d57gNz7pk7584wP+6Ze8+5NXu4mEfpy9dOmbIuragDK0mhuLj+2Yajj4ZLLoniyaWlTSsXEUlQu3bB3/4GVVWBsnbt4De/gaw1X4V/krJORJLY6tXw8MNBBZWVDGIpZ/Kct6KyLm2oAysJ780369/rq6AAJk+OcqKS3r2bVi4ikqDmzIE1a7xl48ZBjx4o60Qk5ezeDVOnQnV1oKx9DkxkBvXumKOsSxvqwEpC+/TT8DMO//73kJ0d5UamTKk/PXFOjlMuIpIk3noLXnnFWzZiBJx8svtAWSciKebhh53h/MGumbQXuTmV3kJlXVpRB1YS1jffODMOB18ql5kJN97YyIzDoQoLndMW+fnOHa7z853HGugvIkli/fqg2TddPXvClVcGFSjrRCSFfPQRLFjgLTvlFDjx1h8p69KcOrB+0C1dGlU74/B333nLx4+H/v2bscHCQmcQRU2N86dCTiT+lHUxUV3t3O+1MuiEQ1YW/Pa3zvhXD2WdSOtT1sXc9u3O5J3BunWDsWPdB8q6tKYObGurvaVLSYkztW7tbQ4UdnWsdcY7fP21t/ycc5xf3hql/0hE/Kesi5mHH4bPP/eWXX459HlHWSfiO2VdzFnrXHFSd9vEtWWY117hugcPIeeQAr23og5sszW3k6RbujTqkUfgvfe8ZcccAxdfHKZy6Odw9dX6j0Qk1pqTd8q6mHj/fZg/H+e+h6+9Ci8s5Ni3/8ZPFyrrRGJOWee/4mJe3e8i/lu00Mm8ZctgyVLOrXyYAaxU1gmgDmz0gkMtNxcuu6x5Bw66pUuDXn8dnn7aW9a3rzPjsAmdbi7cr5733qv/SERaIlY/CinrWmzLFpg5E6fzumQpVFayL98w/rs/Yu5T1om0iLIu8RQXs/6Km5iz6XTncWUllKymX80qzucfgXrKurSnDmw0QjtKW7Y483oHi/bL1Bq3OUjkS2gbaNvKlXDnnd7qe+/tzDhcb5wXhP/V09rwr6v/SEQaF8sfhVrrli5JmneNqamBadOccWCsWgU1e8ighuu5nQ7sVNaJtISyLrZi1Lbq393E7ZXXsIvAQd9efM9kppHJHm9lZV1aUwc2GuE6SuFE82Vq6W0OGguJRB6L0UDbNm1y3oLg+3xlZTkzDufmRtheU8JL9wYTaVwsfxSKd9bV1knCvIvGk086V84BdbM3FVLMAFY1/ERlnUjjlHWxE8O2PVR6Kp/Tz1N2BXPpybr6lZV16c1am1TLkUceaVudMdY6X8uGl/z86LY3b55T1xjnz3nzon9eTo73NXNyvM/Pz29Z26LVnH2I0LaKXgfZceOsPe007/Lmm83bXr3PK/Q9kpQELLYJkFGxWhI666LNlHhmnbWtk3fN3YcWtG3ZMmtHjQrKw+xXbBG32j2EfD7KurSkrIsBZV3s9iFGbXv3XSfrTmNB3fInfmdrlHVpq6Gsi2soAT8BPgW+AG4Is34YsA342F1uamybUQddtF/EaOpF+nLG8svUknYEh0SkUDam+W0L19ZoAjdUmLbtwdhbuKle53XeVW83/n5EasdVVzUvhCWp+XlQl/JZF8uDh1hlnbXxz7vmZl1T2hbyfnw94zl73nnePCw87iu7Jbunsk6stco6ZV1qZF3wtjdtsvb886097fA19rSMf9rTWGAv435bTntlXRrzpQMLtAG+BPoCbYElwCEhdYYBLzRlu1EFXbRfxJbUy8qytmvX2HyZom1HNCHRlF/CmvufQdeu0b9GsDBte5DRzi9uQQdrfz73Q1uTHWWQNvcXQ0k5fh3UpXzWxfLgIZZZZ230edfaWRdt20Lej/V0t5e0meccxAVl4uLFTdgHSXnKOmVdsmdd8PtRVWXt9dcH/Wh3+Bp7evbLdhUHK+vSXENZZ5z1sWeMORa42Vr7Y/fx/wBYa/8cVGcYcJ219rRotzt06FC7ePHihisVFDjX4IfKz3dudtxYva5doUMHZ9xD796BcQxFRd6yWN00uaXtDa5XOxYheGxHTg7MmeNtb0vqRWKMM/NIJCHbepXh3JExCQYPgp55ABxwAPz1uYPYq/Tz+s8PfT9EghhjPrDWDvXhdZV10Ypl1kF0OeZH1kX7ukH7+S1781v+ynp6QHY2DB8BOFXPP7/xJkn6SNesW1/yPdvp5C3fv6dz+4Jap54K69bWf/7e+zjfv3XrYP/9YcIEp3zmTG/Zz38ebbMbFqkd0bY3tN6CBXDTTbCrMlDWLhv++MdAm6OpE6leRMaZRK4h0bxuA/v55h9eZ+FCb/EvfwlnnRVF8ySlNZR18ezA/gL4ibX2cvfxxcDR1tpxQXWGAc8AZcA6nNBb0dB2owq6jAzn951w8vMDB2bhDpDCCXewE0uR2ht6kNSUA7HGDkBbeiAZTjQdTLdtK0o6cGP2NKr7D6zrvHbpAtOnQ9d9o3w/RIL4eFCnrItWrLOutm5DeedX1kXTNvf92EkON/AXVlMQWHfaKEaNgiuuCHMLMUlr6Zp1t9vJvMVJ9ddlZzsTndX+GY2MNp4fz2PuhYWR1502KvD32ltk1QTNsBupbWvLnM5k7b727++t89qr4fc/6AexBuuFE/rcSBprW7TvB3DkkfCHPyj3pOGsy4zn64YpCz1y+RDIt9buMMaMBOZDyPRjgDFmDDAGoHc0s45FOmAzJlBeUuI8jqYDXzuNenMO6qLpTEZqb+i+1j6vse0VFjbe1mjvWxbtTL85OTBypHMQ2EjbNgwvZMokqC4PFLdt68w43LUr0b8fIonB16y7v2QEJeTXb1KJ24SS2iZGk3XANVtobKLbsJYtgzf+Ddu2Q+dOMOwUOOwwb51OM2HbtvrP7dQZfh9cUAg/HFR/e6sOC6nn1r04KGdW4a1Tcjlh973ERFcvVGYW5A6CvWc1vK/RtM19PzbS3TnzWis7m2HD1HmVhOPzcV2EdbWdsWg7ZeB0GFetal4HtrHOGkTuTGdnex/XPq+x7dXWbai9kfY/tLwpnfxu3QMd3pa0Lcr3o0sXmDhRuSeNi2cHtgzoFfQ4D7zzYFtrtwf9/UVjzN3GmFxr7eaQenOAOeD8UtfoK0+ZUv/X+3CdVWuj78Q2535ToWcRaqcWB2/HLlx7I03BHq5zGk0nObROly7O/WxDdeni7YRGqhd66eHIkfDww43u69q1TvPKgzqvrC1j4roJ9Dv42fDbauj9EPGfr1n3xegNrKg+qAXND1E7/UpTrC2DJWugpk9gGwvXQOk+3oOavmeFP9vQd1CY1zwMTgzqFO4B/hnFgWPowWXWUVAVct9ugKy2MO3V6OpltgnU69YdPopiXyO9T8Ft63YKlK+p934cNXJfrr1WB3GScPw9rvvlJ1DVgtaHakqHt1boGdPKSucxeL///fuHz7r+/etvM1znL5pOcmi9SD9UZrX1dkKz2kafdWvWNL6vkQS3LastmAywQVfahLwfxsD110Pnzo1vWiSeHdj3gX7GmD7AWuB84MLgCsaY/YCN1lprjPkBzn1pw/SWmijcmcpIl4ZZ673UbseO8B225pz9C3efsXBnc6M9sxpONJ3kcHWyspzTnruDQiwry+lZ1u5/pHo5OXDHHfUv0wu3r9deC0VFfF+ygSe7XsWzBZOo7hH0/9/aMgpXFHHC7mcCr/nww3DppfDii/XH5jV2hlek9fmbdf9YAa+tj+4SuuBL7ar3hD+ICT1DEI1Vq7wHahD+DEdTzjaEiubAMVwdk1H/wMlkODedrt3/SPUy2sChA+tfphduX5evaHi/wrVtzRro1Qs2bax73iHDe/Db05aSeeDpyjpJNL5m3X5vv8NBxSuc45SOHaF8e+T6HTsF6lVVhR/v2bETNPW3vzdfgpqQ160BvlgLp1wRKDsoD/Yrh7ffDrTjhBNgQBRZt3IlLHsFqt3eeiWw7BPY74cwYEDkeuFkZMAeA1W1ueOWZRhvjmVmwYiQ7c+dG35fV66GL7JC9muAt15o26rc191rL9i1K/A8yuHNubQv38Co/d7n0CXnwaHKOmlc3MbAAriXj8zEmbnuQWvtFGPMWABr7b3GmHHAVUA1ztdqkrX2nYa2GdVYiXBiOSlIJKFnOSN1mmM5ljOa/Yp2ApdInfdwE72EvhcNjMV7n6Hcy1g20a3e2I6T3r6N674rqn9dUiw/F0kLfo0Lc1/bt6y74QZYETzCLNpxUE0ZexUq9OxAQ53mkPFNzRbNfkWqE3pmIVLnPbReuM51Q2O5goW+l1G0/+CD4ZYB/6D9+F8p6ySidM26elrjuK72+bXHdpGOmVv7uK6hem3aOG2J43GdR7j3MpaTjkra8mUSp3iJNuiuuAI2bAgqiOVA+XDCbT+SaAfFRyOagfHRDp5vwiD7epoxKcBRR8ENf9iLtoQ5kAz9zyDaQJe05edBXTxEm3Wffw47dwYVvPgi3Hpr/Rkhf/975/J8QurOng3r10OPHjBuXP06ocJtP9Klaz32d+rHwuGHh38NDHz0UfR1mlIvnJEjYf26huvUCt7/Rl4zO9uZhT3zwAJlnTQoXbOunlhO9taU1wgnlt/PaCe7i6ZetNsKpyUT20Xzujquk0b4NYlTYonlQPlwwl1CF06kMRDhxGqigGgnE4i2XjjhxntE0KVyLZf/xrl6xDzYI7oJm6KddEokzfQLnR5lyEjI/zbkYO16KAzTMR0yEn7XSIc11BlXw64Ik+QFH7Dk5MDt18OQKLYZzcFl/reRD3aGNKFOU+qFc3th9Lfb2bC06W1T1olEpynDr6KZ3DKccEPBQjVljo5YTuwZTb2WTIoZbn6WSELzKZrXVdZJC2T43YBW1TPPOfN52ijnz1hOn97YuLPaP6Odtr32jG7w7HpLljrlwfr3dzrFwUI7ydHUaUq9cHrmOfsWvK9ZbT1VDJbTeZ57ev2ZE090JyiZMsUJ/2Dh/jOIFLaamVikvsJC5xfsmhrnz1hejhXp4KJ2PgFjnD+bcnnemDHOwY61gXH8xcXeetFkRbR5Em29cAoLnX0L3teuXcPXDc4nZZ1I7MUz66DhzpSfWRdtPT+yLtrXVdZJC6RXBzaeIp2lrL1cuKmd5oYmRQkWruMY2kmOpk5T6kUS+gPBoQMhow2ZVHMEHzKTCVye8zg5fw66j0S4gAz3n0FLQlhEYifSwUXtZV9NPZBsaLK7YNFkRbR5Em29SEIPmu+4o/F8UtaJJJ+G8s7PrIu2nh9ZF+3rKuukJay1SbUceeSRNho1Na28PDrP1mTn2BpnDktnyc5xypuzPYx3W3WLaf19a+n70jvfWmOszc+3dt68qD6/sObNc7YRi21JygEW2wTIqFgt0WZdq5s3z9qcHGudcwjOkpPT/O+jMd5t1S7GxLbd8RbLfFLWSQOUda0olnmnrIvvtiTlNJR1KTuJky+aO0lAOBrcLtIkmtikFSnrRHyjrGtlsco7ZZ1IkzSUdbqEOJZiORZDl1aISKJS1olIuohV3inrRGJGHdhE1dJxCyIiyUBZJyLpQFknEjPpcxudZNTcad9FRJKJsk5E0oGyTiQmdAZWREREREREkoI6sCIiIiIiIpIU1IEVERERERGRpKAOrIiIiIiIiCSFpLsPrDHmGyDMjbQiygU2x6k5iSid9jed9hW0v43Jt9buG6/GtDZlXaO0v6krnfYVlHXKuoZpf1NXOu0rxDDrkq4D21TGmMWpdMPvxqTT/qbTvoL2VxqWbu+X9jd1pdO+Qvrtb0ul2/ul/U1d6bSvENv91SXEIiIiIiIikhTUgRUREREREZGkkA4d2Dl+N6CVpdP+ptO+gvZXGpZu75f2N3Wl075C+u1vS6Xb+6X9TV3ptK8Qw/1N+TGwIiIiIiIikhrS4QysiIiIiIiIpICU68AaY84xxqwwxtQYYyLOdGWM+Ykx5lNjzBfGmBtas42xZIzpYox5xRjzufvnPhHqrTbGLDPGfGyMWdza7WyJxj4r45jlrl9qjDnCj3bGShT7O8wYs839LD82xtzkRztjwRjzoDFmkzFmeYT1KfXZxpKyTlmX7N8HZZ1nfUp9trGkrFPWJfv3QVnnWR+bz9Zam1ILMAA4GHgDGBqhThvgS6Av0BZYAhzid9ubub9/A25w/34D8NcI9VYDuX63txn71+hnBYwEXgIMcAzwnt/tjvP+DgNe8LutMdrfk4AjgOUR1qfMZxuH905ZF76esi4JFmVdvfUp89nG4b1T1oWvp6xLgkVZV299TD7blDsDa61daa39tJFqPwC+sNZ+Za3dDfwDOD3+rYuL04GH3b8/DJzhY1viIZrP6nTgEet4F9jbGNOjtRsaI6n0b7NR1tq3gK0NVEmlzzamlHXKOpL7+5BK/zYbpaxrPmWdso7k/j6k0r/NRrVW1qVcBzZKPYE1QY/L3LJk1N1aux7A/bNbhHoW+Jcx5gNjzJhWa13LRfNZpdLnGe2+HGuMWWKMeckYM7B1muaLVPps/ZBK75+yLrU+T2WdVyp9tn5IpfdPWZdan6eyzismn21mzJrTiowxrwL7hVlVZK19PppNhClL2OmYG9rfJmzmeGvtOmNMN+AVY8wq91eSRBfNZ5VUn2cjotmXD4F8a+0OY8xIYD7QL+4t80cqfbZNpqyro6yLvk6yUNZ5pdJn22TKujrKuujrJAtlnVdMPtuk7MBaa0e0cBNlQK+gx3nAuhZuM24a2l9jzEZjTA9r7Xr3FPymCNtY5/65yRjzHM4lDckQdNF8Vkn1eTai0X2x1m4P+vuLxpi7jTG51trNrdTG1pRKn22TKesClHVR10kWyjqvVPpsm0xZF6Csi7pOslDWecXks03XS4jfB/oZY/oYY9oC5wMLfG5Tcy0ALnX/filQ75dKY0x7Y0zH2r8DPwLCzg6WgKL5rBYAl7gzmx0DbKu9/CYJNbq/xpj9jDHG/fsPcL7HW1q9pa0jlT5bPyjrlHWJSlnnlUqfrR+Udcq6RKWs84rNZ9ucmZ8SeQHOxOndfw9sBF52y/cHXgyqNxL4DGdmsCK/292C/e0KvAZ87v7ZJXR/cWY+W+IuK5Jtf8N9VsBYYKz7dwPc5a5fRoRZCpNliWJ/x7mf4xLgXeA4v9vcgn19HFgPVLnf21+l8mcb4/dOWWeVdX63Oc77q6zToqxT1iX990FZF/vP1rgbExEREREREUlo6XoJsYiIiIiIiCQZdWBFREREREQkKagDKyIiIiIiIklBHVgRERERERFJCurAioiIiIiISFJQB1ZERERERESSgjqwIiIiIiIikhTUgU1zxhhrjDnQ73Y0hTHmKGPMUmNMO2NMe2PMCmPMoX63S0QSl7JORNKBsk7SgTqwCcQYs9oYU2mM2RG0zPa7XeEYY153QzIzqKyLMeY5Y8xOY0yJMebCkOcMN8asMsZUGGP+bYzJb8LrWWPMRmNMprX2fWABMAX4BjjEWrvcrTfQGPMvY8y3xpjvjDEfGGNGuuuGGWNqQt7fHcaYY2PxngS1tcDdvwp3f0c0UNcYY/5qjNniLn8zxphotmWM+Zkx5m13PzcYY+YaYzoGrZ9qjPncGFPuPveSWO6nSHMletYZY0YbY/aEtG9Y0HplHco6kcYketYBGGP6GmNecL8/m40xfwtap6xDWZeQrLVaEmQBVgMjWvk1LXBgE59TCLzlPjczqPxx4AmgA3ACsA0Y6K7LdR+fA7QDbgfebWI7PwVGuY/bAl8Dlc4/47p6XwHXu+vbAscDJ7jrhgFlrfCe/heYDmQDZwPfAftGqHulu195QE/gE2BsNNsCLgR+AuQA+wAvAfcGPfcWoD/OD1VHA98Cx/n971yLlkTPOmA08HYD65V1VlmnRUtjSxJkXVvgS2AS0N7NrEFB65V1VlmXiIvvDdAS9GE0EHQ4B1T/Ae50A2MVMDxo/f44v15tBb4Argha1wb4nRtS5cAHQC93nQXGAp+7X4S7ANNAGzsDnwHHENSBdYNvN3BQUN1Hgb+4fx8DvBO0rr0bUv2jfG8scCPwlPt4P2AHsKk26NwwtcDeEbYR96ADDgK+BzoGlS0KDq+Q+u8AY4Ie/wr3P4BmbOssYFkDbVsATPb737kWLYmedTTQgVXW1b2Gsk6LlkaWJMi6McCiCOuUdVZZl6iLLiFOLkfj/BKVC/wBeNYY08Vd9zhQhhN4vwBuM8YMd9dNAi4ARgKdgMuAiqDtngYcBQwGzgV+3EAbbgPuATaElB8E7LHWfhZUtgQY6P59oPsYAGvtTpzgHUj05gMnGWP2Bh4E9uDsd60tOCE/zxhzhjGmexO2XY97Sc13EZYXIjxtIPCVtbY8qCz4fQhXf0mEuk3d1knAigj7ko3zGYddL5JgEiHrDncvp/vMGPN7ExguoaxzKOtEWs7vrDsGWG2MecnNuzeMMYe565R1DmVdAlIHNvHMD/lCXRG0bhMw01pbZa19AucShZ8ZY3rhXNrxW2vtLmvtx8D9wMXu8y4HbrTWfmodS6y1W4K2+xdr7XfW2lLg38CQcA0zxgzFuXTjzjCrO+D8ghhsG9AxyvXR2AUsBGYAPYAncX5ZxBhzqnV+jjoF5xfPacB6Y8xbxph+QdvYP0xotQ/3Ytba06y1e0dYTovQxqbuZ2j9bUAHd7xE1NsyxvwQuBS4KcLr3IsTki9HWC/S2hI263CGSBwKdMO5xOsCnEvYQFlXS1knEp1Ezro84HxgFk5H+Z/A88aYtijrainrEpA6sInnjJAv1NygdWvdL3OtEpzA2R/YGvKLTgnOtfcAvXB+FYsk+GxqBc4XzMMYkwHcDVxrra0Os40dOL8CBuuEc2lLNOuj9QjOr4KV7t9rAKy1r7t/lllrx1lrDwDygZ1uvVrrwoTWzia2oSFN3c/Q+p2AHe7nHNW2jDHHAI8Bvwj5pbR2/e04B+Pnhvz7EfFTQmYdgLX2K2vt19baGmvtMuCPOGdAQFlXS1knEp2EzTqcfHnbWvuStXY3MBXoCgxAWVdLWZeA1IFNLj2DZzIDegPr3KVL8Exl7rq17t/XAAe08LU7AUOBJ4wxG4D33fIyY8yJOONiM0N+FRtM4NKGFe5jANxfxw6g6Zc+LML5la478HZDFa21a3B+yWvWVOzuJTWhM9vVLi9FeNoKoG/IZxH8PoSrPzhC3Ua3ZYw5HGcMxGXW2tfC7MMtwE+BH1lrt0feW5GE4mfWhWOB2vYo6xzKOpGW8zvrluLkWzjKOoeyLhHZBBiIq8VZaHywfzVwLZCFM+vbdqCru34RMBt3BjlgI/BDd931OCHVD+cgbFDQ8zyz1QEPAX8K8/oGZ4B97XKU+9yeQFu3zj9wxi60x7nUOHi2un3dx2e7bfwrTZ+t7kD37wODtnsggcH+++DM0HYgzo8zucCzwCvu+mG0zmx17+L8itkOOJOGZ6sbC6x038f9cUJsbDTbwgnwjcB5Ebb9PziTOPTw+9+2Fi3BSyJnnbvup0B39+/9geXAH4LWK+ussk6LlsaWJMi6g3HO0I7AmRhqIs6ZXR3XeduqrEuwxfcGaAn6MJygq8S5xKB2ec5dNxpntrrZbmB8hvPrS+1z84AXcGar+zLky9IGZ6a3r3EuU3gfyHPXRR10IW0toP5tdLrgDMjfCZQCF4Y8ZwTOLHuVwBtAQdC63wEvNfB6nnYGlQcHXXvgYfd93IFzCc3jQE93/TCcS1N2hCxnx/hzLHD3rxJnPMuIoHUn4lxKUvvYAH9zP7et7t9NlNv6e5j9WRHynn0fsv53fv8716Il0bMO5+Bio5tlX+FcQpwVtF5ZZ5V1WrQ0tiR61rnrz8KZKGm7+x0cGLROWWeVdYm4GPcNkQRnjBkNXG6tPcHvtoiIxIuDL/itAAAgAElEQVSyTkTSgbJOpPk0BlZERERERESSgjqwIiIiIiIikhR0CbGIiIiIiIgkBZ2BFRERERERkaSgDqyIiIiIiIgkhUy/G9BUubm5tqCgwO9miEiC+eCDDzZba/f1ux2xoqwTkXCUdSKSDhrKuqTrwBYUFLB48WK/myEiCcYYU+J3G2JJWSci4SjrRCQdNJR1uoRYREREREREkoI6sCIiIiIiIpIU4taBNcb0Msb82xiz0hizwhhzbZg6w4wx24wxH7vLTfFqj4hIPCjrRCQdKOtEJFHEcwxsNTDZWvuhMaYj8IEx5hVr7Sch9RZZa09ryQtVVVVRVlbGrl27WrKZpNOuXTvy8vLIysryuyki6UxZF2fKOpGEoKyLM2WdSHTi1oG11q4H1rt/LzfGrAR6AqFB12JlZWV07NiRgoICjDGx3nxCstayZcsWysrK6NOnj9/NEYmd4mKWX/8wA9e/isnvDVOmQGGh362KSFkXX8o6SVnFxfx78gscu3E+7fK7K+uCKOuUdZJC3Kw7YuNLdM7fOyZZ1ypjYI0xBcDhwHthVh9rjFlijHnJGDOwOdvftWsXXbt2TZuQAzDG0LVr17T7dVJSXHEx7/zqAf5n/a/5MzewvWQrjBkDxcV+tywqyrrYU9ZJSnKzbvrGC5nADD4vyVLWBVHWiaSI4mKWXz6TGRsv4Bpm837JvjHJurh3YI0xHYBngAnW2u0hqz8E8q21g4E7gfkRtjHGGLPYGLP4m2++ifQ6MWx1ckjHfZbUtvWGvzH7+8sB+C/HMo7ZLK/oA0VFPresccq6+EnHfZbUFpx1a+nJdUzl5YoTlHXeOjFsdXJIx32W1Lbzf/7E9F1XYTFsozN/5CaKK85ocdbFtQNrjMnCCblia+2zoeuttduttTvcv78IZBljcsPUm2OtHWqtHbrvvslx7+6bb76ZqVOnRlw/f/58Pvkk5lfdiCSX4mIoKICMDGx+ATPLzqacjnWry+lIe3ZCaal/bYyCsk5ZJ9KgkKybVXamJ+syqKEfnyvrEpiyTiQKQVlHQQFz1vyEb/B+xw9leYuzLp6zEBvgAWCltXZ6hDr7ufUwxvzAbc+WeLUpkSjoJO0VFzuXkZSUgLW8UHoYH3G4p8pFzKMPq6F3b3/aGAVlXcOUdZL2QrLupdJD+IAjPVUKKaYvXyvrkpiyTtJeSNb9p6Qnr3Oqp8rpPM9glrY46+J5BvZ44GLg1KDp1EcaY8YaY8a6dX4BLDfGLAFmAedba20c2+QI+XUgVmNOpkyZwsEHH8yIESP49NNPAZg7dy5HHXUUgwcP5uyzz6aiooJ33nmHBQsWcP311zNkyBC+/PLLsPVEUlpREbj/zteQx0OM9qw+lOWcyXOQk+MM+E9cyjqUdSIRBWXdWvbnAX7lWX0In3AWzyrrWkJZJ+K/oKzbyj7cxTWe1fmUcAmPxCbrrLVJtRx55JE21CeffFKvLKJ586zNybEWAktOjlPeAosXL7aHHnqo3blzp922bZs94IAD7O233243b95cV6eoqMjOmjXLWmvtpZdeap966qm6dZHqNaZJ+y6SSIyxFmwVbex4ZtrTWFC3nJuz0G6km7X5+VF/N4HFNgEyKlaLss5LWSdJKyjrJjLNk3Xn5Cy0G+iurAuhrBNJQm7W1YD9Pbd4su6M7P+1X9EnZlkXz/vAJqagXwfqVFQ45S2Y0nnRokWceeaZ5OTkAPDzn/8cgOXLl3PjjTfy3XffsWPHDn784x+HfX609URSRu/eUFJCMYV8Rd9AeXY2Y18YQbdTNvrXtlSgrBNJDG7W/YPz+Zx+gfLsbK5cMILuwzf417ZUoKwTSQxu1v2Tn3mHhGVnc/G8EfQ566uYvVSr3EYnoUQaNByDiRPCzR43evRoZs+ezbJly/jDH/4QcXr0aOuJpIwpU1jebijPcHagLKMNJ/y8K8OG+daq1KGsE0kMU6awqt0QnuTcQFlGG44blcupp0Z+mkRJWSeSGKZMYU27fvydXwbKMtpw6IgenHFGbF8q/TqwkQYNt3Aw8UknncRzzz1HZWUl5eXlLFy4EIDy8nJ69OhBVVUVxUFjMjp27Eh5eXnd40j1RFLVzjMKmXH049hs59dtsrPpevzBXD33cHQngRhQ1okkhF1nFzL92Cc9WbfPcf25Zu4QZV0sKOtEEkL1eYVMO3kBu7M7OwXZ2eQcNZCJ9w8kI8Y9zvS7hHjKFGeGrODLTWIwmPiII47gvPPOY8iQIeTn53PiiScCcOutt3L00UeTn5/PYYcdVhdu559/PldccQWzZs3i6aefjlhPJFXNmQObOh4Iww+sK5twK3Ts2MCTJHrKOpGEMHcurG/fD4YHLh++9mbo1Mm/NqUUZZ1IQnj8cfgyqz8M719XNnYSdOsW+9cyzhjZ5DF06FC7ePFiT9nKlSsZMGBA9BspLnbGRpSWOr/QTZnSonESfmryvoskgLffhr/+1Vt2+ulw+eXN36Yx5gNr7dCWtSxxKOu8lHWSjN57D/70J2/Zz34GY8eGrx8NZV0YyjoRX61cCb/9rTOLWq0TToDf/IZmX2nSUNal3xlYcEItSYNNJNlt2QJ33eUt690bLrnEn/akNGWdiG+++w7uvNNblpcHv/xl+PrSAso6Ed9UVMC0ad7Oa5cucPXVze+8Nib9xsCKiG+shZkzYceOQFlmJlx3HbRt61+7RERiyVqYNQu2bQuUtWkDkyfDXnv51y4RkVibOxc2htw4YsKE+A4JUwdWRFrNCy/Axx97yy6+GPr08ac9IiLx8PLL8P773rILL4QDDwxfX0QkGf33v/Dqq96yUaPg8MPD148VdWBFpFWUlsLf/+4tO+wwYj61uoiIn9atg/vv95YNGABnnx2+vohIMvr2W5g921vWqxeMHh3/11YHVkTirrraGR9RVRUoa98eJk4k5lOri4j4pTbrvv8+UNauHUya5FxCLCKSCqyFO+6A7dsDZbXDJFpjSJgOHUUk7oqL4auvvGVXXQX77utPe0RE4uHJJ+Gzz7xlY8bAfvv50x4RkXh46SX44ANvWWEhHHBA67y+OrAx0qZNG4YMGVK3rF69mjfeeIPOnTvXlY0YMQKAm2++mZycHDZt2lT3/A4dOtT93RjD5MmT6x5PnTqVm2++udX2RSSWli+HZ57xlp10Epx8sj/tkZZR1omE9+mn8MQT3rJjjgH36yBJRlknEt7atfDAA96y1h4moQ5sjGRnZ/Pxxx/XLQUFBQCceOKJdWWvBo1yzs3NZdq0aWG3tddee/Hss8+yefPm1mi6SOwVF0NBATtNB6Yf8yS2rKxuVW6uc/ZVkpOyTiSIm3W7TDbThj5GzZpA1u29N4wbF7/bSEh8KetEgrhZV22ymDbgfnZ/Hci6du2cS4dbc0iYOrA+ueyyy3jiiSfYunVrvXWZmZmMGTOGGTNm+NAykRYqLnaumSsp4T7G8M3ObFiyFNY6YTdhAgT9MC0pTlknKSso6x7gMtbv6OjJuvHjoXNnn9sorUZZJykrKOue4Fw+L+/uyborr4Tu3Vu3SZmt+3LxNWpUfLe/cGHkdZWVlQwZMgSAPn368NxzzwGwaNGiuvJzzjmHoqIiwLm05LLLLuOOO+7glltuqbe9a665hkGDBvGb3/wmxnshEmdFRVBRwdscz785xSmr2QPLV3BGySwGHz4VeveGKVN04/lmUtaJJAA36/6Po/hffuKUuVn305J7Oero25R1LaSsE0kAbtZ9ykE8yblOmZt1x379GMNfuAHyWzfrUqoD66faS01CnXjiibzwwgthnzN+/HiGDBniGRdRq1OnTlxyySXMmjWL7OzsmLdXJG5KS9lCF+7iGk9xQdVnXLx1JmChpMT5NQ90YJdklHUirtJSttGJWYz3FO9ftZrLtk5FWZfclHUirtJSdrEX05hMTdDFu/tUbWTcd3/C+JB1uoTYR3vvvTcXXnghd999d9j1EyZM4IEHHmDnzp2t3DKR5rO9ejOTCewgcJ1wJtVMZhptCbqPTkWF86uepDxlnaQi26s3d/JrthG4TjiDGiYzjXYE3UdHWZc2lHWSknr35n4uZz09PMXXcgedKA8UtGLWqQPrs0mTJnHfffdRXV1db12XLl0499xzeSB0qi+RROIO7CcjAwoKWHjIb/k440hPlUt4hAJK6j+3tLR12ii+U9ZJ0gvJulcGTea9jOM8VS7gcQ7i8/rPVdalDWWdpISgvHvv24N42fzUs3okL3IkH9Z/XitlXUpdQtzQWIZElZuby5lnnhlxYP/kyZOZPXt2K7dKJEq1A/srKgAoKbE8VLY/9OoFmzZCZSWHdSrljMxFUH9eC2d8mDSZsk6klYVk3fqS75lb1tOTdQd3Ws85ma8r62JIWSfig6C8+47O3Ln9EjBAVluo2k3PDtv5ZdsFvmadsda2ygvFytChQ+3ixYs9ZStXrmTAgAE+tchf6bzvkgAKCpxxD0AVmUxmGl/TB7KzYfgI2reH2bMh92XvwR8AOTkwZ07MxkoYYz6w1g6NycYSgLLOK533XRJAUNbtIYPf8lc+5eC6rGvXDmbNgh6vK+uaSlnnlc77LgnCzTsL3MrveZ+jnPLsbNr8aAS33w79/s/frNMlxCLSfEGXiszjIqfzClBZCTj3e83NxQmzOXMgP9+5KWJ+fkxDTkQkroKy7inOcTqvUJd1l18OPXqgrBOR5Ofm3b/4UaDzClBZyfnnQ79++J51KXUJsYi0st69oaSE5QzkOc4MlGdnc9JJcPLJQXULC3UQJyLJyc26zzmQx7kgUJ6dzdFHw49+FFRXWSciyax3b9aXfM/9XO4pPrjTes45J6jAx6zTGVgRab4pU9iZnct0JmExTllGG3KH9uGqq/xtmohIzEyZwvfZe3tvI5HRhs6HH8Cvf+2cgBARSQV7br2NaZk3sIt2dWXt2lQxeUpX2rTxsWFBUqYDm2xjeWMhHfdZEkxhIfed+b98k+0O2s/OhsGDmDj7ADp0aPip0jzp+L1Px32WBFNYyIPnvcza7AOdx27WXTuzD507N/xUaZ50/N6n4z5L4nkq60I+PexsJ+cAsrO54rrO9Bh3tr8NC5ISlxC3a9eOLVu20LVrV0ya/AxqrWXLli20a9eu8coicbJoEfx7+5EwPFB25pkwaJB/bUplyjoRf3zwAby4+QeerPvJT+CooyI/R5pPWSfij88+g8cfB3rmOQtw9NHwwwS7lXVKdGDz8vIoKyvjm2++8bsprapdu3bk5eX53QxJU5s3w113ecsKCuCii3xpTlpQ1om0vu3b4Y47vGU9esCvfuVPe9KBsk6k9e3aBdOmQU1NoKxzZxJymERKdGCzsrLo06eP380QSRvWwsyZsHNnoCwzEyZPhrZt/WtXqlPWibQua51bgX37baAsI8PJOp0oix9lnUjr+/vfYd06b9m115KQwyRSZgysiLSeBQtgyRJv2SWXOGdgRURSxWuvwX//6y077zw4+GB/2iMiEg+LF8OLL3rLEnmYhDqwItIkJSXw8MPeskGD4Iwz/GmPiEg8bNgA993nLevXD84915/2iIjEw7ZtyTdMQh1YEYlaVRVMner8Wat9e5g4MfHGR4iINFdNDUyf7owJq7XXXs6lw5kpMfhKRCQwTOK77wJlyTBMQh1YEYnavHmwerW37OqrITfXl+aIiMTF00/DypXesl/9Cnr29Kc9IiLx8Oqr8O673rJkGCahDqyIRGXZMnjuOW/ZSSc5i4hIqvjiC3jsMW/ZUUc548FERFLFhg0wZ4637KCDkmOYhDqwItKonTudy+mC77GemwtXXeVfm0REYu37753bSOzZEyjr1CkxbyMhItJckYZJTJqUHMMk1IEVkUbde69z31fWlsFrr2JeWMDEl39Ch+eL/W6aiEjMPPQQlJW5D9y8G//YMexzeAEUK+9EJDV4hkm4WferZ0bS8/iCpMi6uHVgjTG9jDH/NsasNMasMMZcG6aOMcbMMsZ8YYxZaow5Il7tEZHmeesteOMNnIBbshQqKzmD+Qxa/zKMGZMUQRdPyjqR1PDhh/DCC+4DN+9+WLmAo3nPmX49zfNOWSeSGjzDJNysO6ryLX7CS0mTdfE8A1sNTLbWDgCOAa4xxhwSUuenQD93GQPcE8f2iEgTbd4Md9/tPli1Cmr2UMBqLuZRp6yiAoqKfGtfglDWiSS58vKQ20isWsV+NWu5grmBMuWdsk4kydUbJrFqFZ1qvuXX3EndKIkkyLq4dWCtteuttR+6fy8HVgKh8/edDjxiHe8CextjesSrTSISPWthxgxn/CsAlZVkUs1kppFFdaBiaakv7UsUyjqR5FZ7G4mtWwNlprKCSUwnm13eymmcd8o6keTnGSYBUFnJeGaxD995KyZ41rXKMF1jTAFwOPBeyKqewJqgx2Vu2frWaJeIRLZgASx9qcw581pZCRgu5WEKKPFW7N3bl/YlImWdSPJ5/XV456mgrMvO5pwOLzFgx6r6lZV3gLJOJBl9+CG8cJ83636Y8w5HV/xf/coJnnVxn8TJGNMBeAaYYK3dHro6zFNsaIExZowxZrExZvE333wTj2aKSJDVq+GhW9fUjXkFGMQSTud5b8WcHJgypfUbmICUdSLJZ+NGuO93JZ6sO7ByGRfsegjatvVWVt4ByjqRZFReDndc+5Un6/ar/Jordt+VlFkX1w6sMSYLJ+SKrbXPhqlSBvQKepwHrAutZK2dY60daq0duu+++8ansSICQFWVMz6i+pNPocYZJNGenUxkhnNk0qaNcz+J/HznBmKFhb62NxEo60SST+1tJCqXfV6XdW3ZzWSmkVm9Czp2dHJOeVdHWSeSfKyFu+6CrR98VZd1BusMk6guT8qsi9slxMYYAzwArLTWTo9QbQEwzhjzD+BoYJu1VpeZiPihuBiKini0ZDirsy+o+4UO4GruJpctzoOaGmcRQFknknTcrHu25Cg+yb7Sk3WX8SB5rHUebN3q3j9MQFknknTcrPt3yQH8J/t/PFl3Dk8xAHeYRBJmXTzHwB4PXAwsM8Z87Jb9DugNYK29F3gRGAl8AVQAv4xje0QkkuJiGDOGpRUHMJ/TPSE3jDc4iUWBugk+LsIHyjqRZOFm3VcV3SnmQk/WHckHjOTFQF1lXShlnUiycLNuU0V77sX7Q92BfMEFPB6om4RZF7cOrLX2bcKPhQiuY4Fr4tUGEYlSURE7K2AGE7FBX9tcNjOWewP1kmBcRGtT1okkkaIidldUMZXrqA46BOpIOeOZFfgiK+vqUdaJJJGiImoqKpnO76kku664bpgE7n10kjTr4j6Jk4gkgdJS7uEqNpNbV1Q7PqJ9/r5JNS5CRCSi0lIeYjRrPMM0YRyz6ZLfSVknIqmhtJTnOJMVDPQUX8aD5OVnJn3WtcptdEQksb3V7Re8ufFkT9mZPMdh+eXOlMQiIing4/1+wsL1ozxlw3mN4/LXKetEJGV81eN45q27yFN2BB8ysveKlMg6nYEVSXObN8Pdff4GGW3qyvrwNRdlP5uUl5WIiIRTXg4zDpjtybpubGJM9jxlnYikjN27YdohD1CdsVddWUfKuTZ7Lua21Mg6dWBF0pi1MGMG7MwtgMGDIDubLKqY3PMJsubenZSXlYiIhLIW7r4btu7dty7rDJbJPR4nZ+4dyjoRSRmPPAKl7Q6qyzqAcd2fpsvcv6ZM1ukSYpE0Nn8+LF3qPuiZBz3zuPRyyD/9LF/bJSISS2+8AW+/7T5ws+4X58Ahl/zcz2aJiMTUxx/D88+7D9ysGz4cjpswqsHnJRudgRVJU6tXO7/SBRs8GH6u4zkRSSGbNsG993rL+vaFCy/0pz0iIvFQXg4zZ3rLunWDMWP8aU88qQMrkoZ274apU6G6OlDWoQNMmOBMTCcikgpqapxhEhUVgbK2beG66yBT16CJSIqwFu65B7ZsCZQZA5MmOXfKSTWKb5E09Og171JSvMO5sXV2NvTvzzWz8sjNbfy5IiLJYv6kt1g+Z7cn60bfkkevXo0/V0QkWbx54yssmmE8WXf2tXkMHNj4c5ORzsCKpJklt/2T+Q9udUIOoLKSU5bP5oSSYn8bJiISQ1/PmM+js7/zZN2QZfM4bZuyTkRSxzf3PM29f/VmXd9lCyg0j/nbsDhSB1YkjezYATNuq4SaPXVl+/INV1bdCUVFPrZMRCR2du+GqTdtp3pPYExEB3Ywofp2zI3KOhFJDdbCjBs2snNPu7qyLKqYXP0XMm/6nY8tiy9dQiySRu65B7bsDNwXzGCZxHTaUwGlpT62TEQkdh55BEp37OMpu4a76MpWKP3Wp1aJiMTW/PmwbHtvT9loHqI3a6A0dSc10RlYkVRXXAwFBbxphvHWH16FrLZ1q87iWQ5lhfOgd+8IGxARSQJu1i0xQ3h+vDfrTuHfnMB/nAfKOhFJZm7WrTZ9eKTwZU/WDeFjRrHQeZDCWaczsCKprLgYxozhm4oc7mGsMz7CZIDJoI/9kkLcsWA5OTBlir9tFRFpLjfrdlQYZnCzJ+u62Q1cyX1OPWWdiCQzN+t2V1QxjWlUV+6uy7oOdjsTmImBlM86nYEVSWVFRdiKCmYwkZ20d8psDVlZlut6/oMsswfy82HOHCgs9LetIiLNVVQEFRXcw1VsoatTZmswmW2Y2OMJ2ptKZZ2IJD836+ZxEaspcMpsDWRmcnX3Z+lqvk2LrNMZWJFUVlrKfM5gGYd5ikfvnkvvsnd8apSISIyVlvImJ/EWJ3mKz6p6gkPX/cunRomIxFhpKUs5jPmc4SkeVvUKJ254yqdGtT6dgRVJJe64CDIyoKCArzsP4REu8VQZwseM6r3En/aJiMRCSNZ9s3c/7uEqT5U+fE1h70X+tE9EJBZCsm7nPnnMYCKWwARNuWxmbK9/+tdGH+gMrEiqcMdFUFEBwO6SdUzN+C3Vpq1zeQnubSSy52Bu+4ufLRURab6QrLMlJczM+DM7Tce6rMuiiuva3UXWbbf42VIRkeYLyTpKSrg343o2m251WWewTGp3D+3/fKOPDW19OgMrkirccRG1HuESSmvyIDMTsrMBuKb7M3Sd+5eUHhchIikuJOue53SW1gz0ZN2l+75E7/tvUtaJSPIKybpFnMAbNSd6su6Mros47P5r0y7rdAZWJFUE3cd1CYN4ntOdB1W74cejOOUUOGHSKJ8aJyISI0FZt5p8HuZS54GbdYMHw89vHQWpewtEEUkHQVm3ma7cxTXOAzfrCgrg4umjIMuf5vlJZ2BFUoV7v69yOjCDiYHy7Gy6dYMrr/SpXSIiseRmXRWZTGMy1bW/xWdn0749TJgARp1XEUl2btZZYCYTAneTyM4mMxMmT4asNOy8gjqwIqljyhRsdo73NhIZbTD9+zNxIrRv72/zRERiYsoUyMnhUS4O3EYiow30788110Burq+tExGJDTfrFvBzljDYKXOz7pJLnLmd0pUuIRZJFYWFvPlJNxbNMFBZ6YyP6N+fs6/N49BD/W6ciEiMFBaybM3ezP9jW6jcVZd1wwrzOPFEvxsnIhIjhYWUbs7h4f/Jhsqquqwb9NM8zjij8aenMnVgRVLEpk1wzxc/hOGBsr59025cv4ikuJ07YfqnP8MGZV1uLowd61+bRERiraoKpn55JlVBWde+PUycqGESuoRYJAXU1MCMGZ7J6sjKcsZHZOpnKhFJIffeC5s3Bx4bA5MmaZiEiKSWxx6Dr7/2ll11lYZJgDqwIilh/nxYvtxbNnp03fh/EZGUsGgRvPGGt+yMM+Cww3xpjohIXCxfDs884y076SQ4+WR/2pNo1IEVSXJffw2PPuotGzIERumOOSKSQrZsgbvu8pYVFMDFF/vSHBGRuNi507mqztpAWW6uc/ZVHOrAiiSr4mJ25/djat+7qX75VVhbBkCHDrqNhIikkOJibH4BM3P/xM4FgaxL99tIiEiKKS6GggLmdpjIpscDWQfOcV2HDj62LcFodJxIMiouhjFjeKTiAkrp5cw6vGQpAOPuzKNrV5/bJyISC27WLawYzscM9mTdpTflpfVtJEQkhbhZ907FYF7jVE/WnX51HoMH+9y+BKMzsCLJqKiIjyv68TynB8pq9nDq6r9z/PH+NUtEJKaKiiit6MpDjA6U1exh0JfzOf30iM8SEUkuRUVsrdiL2YwLlNXsIf+L17jkEv+alajUgRVJQuUlW5nJBE9ZNzYx5tu/+tQiEZHYqy5ZyzQmU0XgOuH27GTi9ls0TEJEUoYtKeUOrqWcjnVlmVQzufwW2rb1sWEJSh1YkSRjLdy99+/YQuA6YYNlEtNpn6+51UUkdRR3Hc9X9PWUXcU95Obrnjkikjr+ue9oPuQIT9lFzKNPfo1PLUps6sCKJJk33oC3+1wEGW3qys7mGQbmrIYpU3xrl4hILC1fDs/0nujJupN4i5NzFivrRCRllJXB3wtu9mTdoSznzOyXlXURqAMrkkQ2bYJ77wV65sHgQZCdTV++prD32zBnDhQW+t1EEZEWq7uNRFDW5bKZq3r9U1knIimjuhqmTYPd3XvXZV0OFUzMe5qMufcp6yLQLMQiSaKmxjmgq6hwC3rm0bZPHtfNHEFmr/G+tk1EJJbmzHF+sAOcH+x65jHhT9Bh8C99bZeISCw9/jh88YX7wM26sZOg2ynn+dquRKczsCJJ4rnnnEvqgo0eDb16+dIcEZG4+M9/4PXXvWWnn45uIyEiKWXlSnjqKW/ZCSfAsGG+NCepxK0Da4x50BizyRizPML6YcaYbcaYj93lpni1RSTZffUVzJvnLTv8cDjtNH/aIwHKOpHY2boV7rrLW5afj24jkSCUdyKxUVkJ06c7E3PW6tIFrr4azbAehQYvITbGtANOA04E9gcqgeXAP621KxrZ9kPAbOCRBuosstbqEFykAbt3w9SpzjiJWh07woQJCrlYakHePYSyTqTFrGjUgl8AACAASURBVIWZM6G8PFCWmQmTJ6PbSMSQju1E/Dd3LmzY4C2bMME5vpPGRezAGmNuBkYBbwDvAZuAdsBBwF/cAJxsrV0a7vnW2reMMQWxba5I+nn4YVizxlt2zTXOL3USGy3JO2WdSGy88AJ89JG37KKLoE8ff9qTinRsJ+K/d9+FV17xlo0a5VxZJ9Fp6Azs+9bamyOsm26M6Qb0buHrH2uMWQKsA66L9MufMWYMMAagd++WvqRIEiguhqIiPi7ZhwXZt0P//s7gfmD4cDj+eJ/bl3rinXfKOpFw3KxbU1LDQzn3wcGH1WXdoYfCmWf63L7UkxDHdso6STtu1n1bsp07cx6Eg4fWZV2vXs6cJhK9iGNgrbX/hLpLTTyMMbnW2k3W2sUteO0PgXxr7WDgTmB+A22ZY60daq0duu+++7bgJUWSQHExjBlDeckWZjDBGSixZCmsLaNbNxgzxu8Gpp44552yTiQcN+uqS8qYymR2V1TXZV1ODkycCBmaajKmEuXYTlknacXNOltSwh2MZ3tFm7qsa9NGwySaI5r/Gt43xhxT+8AYczbwTktf2Fq73Vq7w/37i0CWMSa3pdsVSXpFRdiKCu7marbiXidcswfz0UdMevBQcg4pcMJQ4iHmeaesE4mgqAgqKniMC/mKvk5ZzR746GPGPnkq3X5QoKyLHx3bibQWN+te4qd8wJFOWc0eWL6Cwv9czQH9MqCgQHnXBNHcB/ZC4EFjzBs4g/27Aqe29IWNMfsBG6211hjzA5zO9JaWblck6ZWW8gbDeJsTPMW/4CkGsgJKCJyG1Q2uYy3meaesE4mgtJRPGMDT/MJTfAKLGMa/lXXxpWM7kdZSWspa9ucBfuUpHlC1hLM33wtYKClR3jVBox1Ya+0yY8wU4FGgHDjJWlvW2POMMY8Dw4BcY0wZ8Acgy93mvcAvgKuMMdU4M+Cdb23wZNIi6WlTz8O5t2ysp+wAvuRCHgsUVFQ4v+gp5GKqOXmnrBNpnoq8g5i2ZjKWwHTqXdjK1dwdKFHWxYWO7URaT3WvPkwrvYbdBK4TbscuJjONDIK+Hsq7qDXagTXGPAAcAAzCmaVuoTFmtrX2roaeZ629oJH1s3GmYhcRV00NTB/yCBXrSpzLS4C27GYy08hkj7dyaakPLUxtzck7ZZ1I88w5eR6bHttUl3UAE5lBR3Z4KyrrYk7HdiKt54mfPcLn923zZN2V3Ed3NtWvrLyLSjRjYJcDp1hrv7bWvgwcAxwR32aJpKdnn4UVDITBgyA7G4BfZjxCL8L8MK6ZG+NBeSfSCt55B177bqgn60aZfzKEJfUrK+viQVkn0go+/RSeKDvek3XH7r2S4V0+Dv8E5V1UormEeEbI420QchG3iLTYV18Fjd/vmQc98zjySPjZgdvhyledS0tq5eTAlCm+tDOVKe9E4m/rVphde47OzbpevWD00Tvg6keVda1AWScSf7t2wbRpYC11WbfPPjBu9ijMwp7OmFflXbNEPANrjFlojBlljMkKs66vMeaPxpjL4ts8kfSwezdMnQrV1YGyjh1h/HgwFxXCnDmQnw/GOH/OmaMxEjGkvBNpHdbCrFlQXh4oy8yE666DtpdeoKyLM2WdSOu5/35Yv95bdu210KkTTq4p75qtoTOwVwCTgBnGmG+Bb4B2QAHwJTDbWvt83FsokgYeegjWrPGWjRsHXdy76FBYqFCLL+WdSCt48UX44ANvWWEh9O0b9EBZF0/KOpFW8N578PLL3rKRI+HII4MKlHfNFrEDa63dAPzGGLMGeBsn4CqBz6y1FZGeJyJN89FHsHCht2zECDjuOH/ak46UdyLxV1YGDz7oLRs4EM46y5/2pCNlnUj8ffcd3Hmnt6xnT7hM1zbETDSTOHUHngImAvvhBJ2IxEB5Ocyc6S3r3j1wKzBpdco7kTiornbGgu3eHSjLzoZJkyAjmiMRiTVlnUgcWOt0XrdtC5S1aQOTJ8Nee/nXrlTT6H8b1tobgX7AA8Bo4HNjzG3GmAPi3DaRlGatM5HJ1q2BMmOckHMnqpNWprwTiY9//AO++MJbduWV0K2bP+1Jd8o6kfj417/g//7PW3b++dCvnz/tSVVR/e7p3oR6g7tUA/sATxtj/hbHtomktNdfd24lEeycc2DAAH/aIw7lnUhsrVwJTz7pLTvuODj1VH/aIw5lnUhsrV/vTNwU7OCDnWM7ia1Gb6NjjBkPXApsBu4HrrfWVhljMoDPgd/Et4kiqWfjRrjvPm/ZgQfCBQ3eIl7iTXknEluVlTB9unsbCVeXLs4kdcb41650p6wTia09e5xhErt2BcratXOuqmvTxr92papGO7BALnCWtbYkuNBaW2OMOS0+zRJJXTU1TshVBo04atvWCbnMaL6REk/KO5EYmjsXNmzwll17rXObMPGVsk4khp56Cj791Ft2+eXQo4c/7Ul1jR4uW2tvamDdytg2RyT1PfOMc0ldsMsug7w8f9ojAco7kdh591145RVv2WmnwRFH+NMeCVDWicTOZ5/B4497y44+Gn70I3/akw50vkekFX05/XmKb8yGyu+dmZr69+fIn+cxcqTfLRMRiZ1v5zzFnROzoKJNXdblHZ3H6NF+t0xEJHZ2/f1xpo231OzoWJd1nQ/J49e/1jCJeNLk9SKt5PuHHmfabzeyp/J7p6Cyko5L32F8j6cUciKSMuy8Yu4ct4rtFe7Ar8pK2iz9iOv6Pa/bSIhI6igu5u9Xvsu6He6YiMpKWLKU8Qf9L507+9u0VKcOrEgreWjyMtZUewdD/HrPDLoUXQUFBc7NEAsKoLjYl/aJiMTC/05+hferhnjKLtzzKAfc9itlnYikjMXX/YMXq0Z4yn5c8yI/mHWRsi7OdAmxSCv48EN4YeuxnrIf8grH8i5sAbZscQpLSmDMGOfvhYWt20gRkRZauxYe2OSdA2gAK/kFT8MWq6wTkZSwbRvcseFcT1kP1nM598OW75V1caYzsCLxUlwMBQWUm07ccdIzkNW2btV+bOAK5oZ/XkUFFBW1UiNFRFrIzbpqk8W0AffzfVZgiuF27GIy08jA1n+esk5EkombddZkMLvgdr7L6la3KoMaJjONdnxf/3nKupjTGViReCguhjFjsBUVzOYGtu5sC6YaTAbG7mES08lmV+Tnl5a2XltFRJrLzToqKniCC/m8vHtd1mFruJL76M6myM9X1olIMgjKulcZwbvf9fdk3bk8ycF8Fvn5yrqY0hlYkXgoKoKKCl7nVN7hOKfM1kBmJud2fZ0B5lPIz4euXcM/v3fv1muriEhzuVn3KQfxJO7ldG7WHbP3KobzurJORJKfm3Ub6M4c3EuC3azr1/H/27vz+Kjqe//jr28SQgLKqmwJi7YIqFcr4FLrbbVuwA9re1Vc0lu1AtIrgpK2P2va2g1tf/1FoO7RqrVErMvPBRcsYFurXq1gAbWK2499ExdcEghkvvePM8nMmcxMziRn5uTMvJ+PxzzIfOc7M59zjvN2vmfO+Z7tnMv9yroc0gBWJBs2bGA7A7iNS13NI/f+i/O2zYdIBNatgwULoEcP93N79IC5c3NXq4hIR23YwG66U0s1kbivFH327mDmuh9grLJORPLAhg1EMFzPHHZT1trcfe+nVL8xlRK7V1mXQxrAivghel5Ey4xzkb79uZ45NFLe2qWUJqor7qMk/sD9qiqoq3P22hnj/FtXpxP9RaRrSsg6+vXjDqayFfcM67MH3e++jISyTkTCJEnWPcjZvMEYV7dLBjxORUVcg7IuJ3QOrEhnxZ0XAcD69TxUfB7/Moc7h5dEXdK9norfzGr7/KoqBZuIdH1Jsu6l4uN52kx0Zd2kbssY/3/Pa/t8ZZ2IhEGSrHunZDT3mm8TPx/d+G6rmVB7atvnK+uyTr/AinRW9LyIFu/wBeqbz4WSEih3foEd1/tdJt5xlgJNRMIrIes+pjc3NH/PlXUV+33Cxbcdp6wTkfBKyLo9lFK7bxbNJd1bs65Xj2Zm3TgK821lXRD0C6xIZ8XNLLeHUmqpppli2NsEp59Br14w+0YwfQOsUUSks+KyzgI3cDm76N2adcXFUP1bKBsZXIkiIp2WMGPwH7iQTVS2Zh3A5TXQ97ggihPQL7AinRc3s9zdXOSEHLTupbv8cuirwauIhF1c1v2Z0/gHxzh3oll33nkwUoNXEQm7uKz7J19iMc6gtSXrTj0VjtPgNVAawIp01ty50KMHKxnL40x22oqKYfRohZyI5I9o1m1lEHcw1WmLZt2oUXDOOcGWJyLii2jWfcp+zOcKpy2adYMGwbRpwZYnGsCKZC5xZjrgk/l3sqDn1c7j5eVw5BEMGlepkBOR8EqSdc233k5tr587l5GIZl3ZFyqprobi4kCrFRHpmCRZZ2+r46Y+P+ZD+rVmnamsZM6c1h9iJUA6B1YkE0lmprPTpnPTGc/z0Ulfau1mDFRXK+REJKSSZB3Tp/PAxU+z9qsnuLpOmwaDByd5DRGRri5F1v1l9qM8f4J7gqZzzoExY5K8huScfoEVyUTCzHQAyxu/zAuLd7rapkyB0aNzWZiIiI+SZN1bDRUsurPR1Xbssc75YCIioZQk63Y09OTWBbtdbV/8Ipx/fi4Lk3Q0gBXJRMLMdNsYyG1cCo2xL3UjRzqTmYiIhFZC1u2mO7VUE2mMfanr3duZpM6YXBcnIuKThKyLYJjHlTQ2xC74WlrqHFVXouNWuwwNYEUyETczXQTD9cyJnQuGQk5E8kRc1gHcxcVsYYjrvIjZs51BrIhIaCVk3cN8i9c43JV13/0uVFbmujBJRwNYkUxEZ6YDeJCzeYMxrTPTAVxyCVRUBFmgiIgP4rJuBeN4kkmurJswAY4+OsgCRUR8EJd173EQC/m2K+vGjoVJk4IsUJLR70QimahyTuh/+4e3c++WC5w9dKNHQ0Ul48fDxIkB1yci4odo1u360a9ZsHG2K+sGD3Z21omIhF4065qu/hm1G65kX/n+rVm3//7OkSY6TaLr0QBWJEN7zq6i9u9VNG+OtfXqBbNmKeREJH/YC6q4cV0VH78Yaysqck6TKCsLri4REV9VVXFPYxUbHnU3z5wJ/foFU5Kkp0OIRTJ0112webO7bdYs6Ns3mHpERLJh2TJ48UV327nnwqhRwdQjIpINq1fDowmD15NPhuOPD6YeaV/WBrDGmDuNMTuMMa+leNwYY35njHnHGLPGGDM2W7WI+GXlSnjiCXfbaac5l5KQwqSsk3y0bRvU1bnbDjnEuUSYFC7lneSbzz6DefPcbQMGOJeGla4rm7/A3g1MSPP4RGBk9DYduCWLtYh02iefwIIF7rbBg2HatGDqkS7jbpR1kkeam+H662F33GUQu3fXDOsCKO8kz9xyC3zwQey+MXDlla3zOkkXlbUBrLX2WeDDNF3OBO6xjheBPsaYwdmqR6QzrIUbb4SPPoq16VwwAWWd5J8HH4Q33nC3TZ0KQ4YEU490Hco7ySd/+xs8+6y77ayz4PDDg6lHvAvyHNgKYGPc/U3RNpEuZ/ly+O//drdNmaJzwcQTZZ2Exttvw6JF7rajj4bTTw+mHgkd5Z2EwvvvO7++xjv44NZJiaWLC3IAm2y+Vpu0ozHTjTErjDEr3n///SyXJeK2bRvcdpu77ZBDnMlMRDxQ1kko7NkDtbXOIcQtevWCyy/XDOvimae8U9ZJkKyF+fPh889jbd266TSJMAlyALsJGBp3vxLYkqyjtbbOWjveWjv+wAMPzElxIqBzwcQXyjoJhTvv1Azr0mme8k5ZJ0F65BFYs8bddtFFMGxYIOVIBwQ5gH0M+E50xrrjgF3W2q0B1iPSxkMP6Vww6TRlnXR5K1fCk0+62049VTOsS8aUd9KlrVsH99zjbjvySDjjjEDKkQ7K2m9IxphFwInAAcaYTcA1QDcAa+2twJPAJOAdoAG4OFu1iHTE22/Dvfe623QumCRS1knYJZthfdAgzbAubSnvJMyampzTJPbti7X17AlXXKHTJMImawNYa+357Txugcuy9f4inbF7d9tzwXr3dg6nU8hJPGWdhJm1cNNN7hnWjYE5c6C8PLi6pGtS3kmYLVzo/AIb77LL4IADAilHOkFn8Ykkcddd0XPBNm+CN9+ExkZmDbqDPk9M0RR1IpI3nnkGXngBV9ZN6b+cMa8cDWOUdSKSH9ascc59BVrz7sTGJfz7qw/C3Ln6bhcyGsCKtKivh5oaVqw/kCfLr4MBA2HjRog0czpPc8y2x2D6Mqevgk5Ewqy+nu1XzeO2TT+Ebr2dY+pshJG8zXkf3AjTuzv9lHUiEmb19Xz+o18xb+MPseVDW7/bHRDZzgxugfUNMH2601d5FxpBTuIk0nXU18P06exa/xELmAWNjbB+HUSaGcxWpnKH06+hAWpqAi1VRKRT6uuJTLuU2k1TaKQc9jaBjVBKE9XUUkKzsk5Ewi/63e7WjZPYyQGt3+1MZB9zuJ6eNDj9lHehowGsCEBNDbahgRu4nI/p09pcRIRqailjT6zvhg0BFCgi4pOaGh5qnMgbjHE1X8LvqYi/4omyTkTCrKaGvzeM5a+c6Gr+Jo/wb7zm7qu8CxUNYEUANmxgGafwEu5rRpzLnxjFW+6+ulCYiITYu+tLqMd9qNw4VjKRp9wdlXUiEmI713/OTQlzio1gHf/JH9t2Vt6FigawIsDWIeOoY7qrbRRrmcID7o49ejgn+4uIhFBTE9Tudw3NFLe27c+nzOJ3uCZYV9aJSIhZC/N7/ZTP6dnaVsI+qqmlm2l2d1behY4GsFLwmpuh9sg/sLsoFnLd2cOcslso+d40GD7cua7E8OFQV6eT/EUktO6+GzaOPAmKYgPYmdxIv26fQf/+yjoRyQuLF8PqL3zLlXXf4R5G9HgfZszQd7uQ0wBWCld9PYwYwQMl57P2L1tg6NDWCx9OHbCYIXf8Am6+2bloWCTi/KuAE5GwiWbdKnMUi6+IzqR+5BFQXs4pLOf44Vuca4ft3KmsE5HwimbdBjOcu89b4rRFs+4IXuWbw/7pDFb13S70dBkdKUzRmeneaqhgEec5M9Nt3AhHHsHR36zk9J+cgft4OhGREIpm3acNRczj507WrV4DRx7BwAtOYfoNp0D5/KCrFBHpnGjW7WvYQy217G3c25p1Pb9xClfccArmwKuDrlJ8ol9gpTDV1LC7oZlaqom0fAwizfR+62Vmz3aOKhERCb3oDOs38198SD+nLdKMefMNqqtbDzoREQm3mhpoaKCeKt7jYKct0gxvvsmMGXDggcGWJ/7SAFYK04YN3Ml32cIQV/Psz6+jd++AahIR8duGDfyVE3mOE1zN5zT+kTFjUjxHRCRsNmzgNQ7jIc5yNf9741K+9rWAapKs0QBWCtLLAyfzFBNdbRNYwtHDdwRUkYiI/3ZUHMWtzHC1fYF3OX/Y8wFVJCLiv4bKQ5jHldi487/68wH/NXSxjqrLQxrASsHZtQsWHLzANTPdYLZySfkiTaMuInkjEoF5R91DQ9H+rW2lNFFddjMl1/4iwMpERPxV97WF7Cga7Gq7suxW9ruuJqCKJJs0gJWCYi3ccAPs6ndQ68x0RUSoHnIfZbffoJnoRCRvPPwwvGYPa806gIsPfIKhd1yjrBORvPHCC7D84/GurDuz33Mcecflyro8pVmIpaAsXQovvRS9U1EJFZWcdwGMOv/MQOsSEfHTe+/BwoXRO9GsGzsW/tfPNMO6iOSPDz+EG2+M3olm3bBh8J15Z0BpoKVJFukXWCkYW7fC7be720aNgilTgqlHRCQbmpqgthb27Yu17b8/mmFdRPKKtbBgAXz6aaytpASqq6FUg9e8pgGsFITmZucL3e7dsbayMpgzB4qLUz9PRCRs7rkHNmxwt82cCf36BVOPiEg2PPEEvPKKu62qCg4+OJh6JHc0gJWC8MADsHatu23qVBgyJHl/EZEwWrUKHn3U3XbyyXD88cHUIyKSDRs3wl13udsOOwz+4z+CqUdySwNYyXtvvQWLFrnbjj0WTjstmHpERLLhs89g/nx324ABMG1aMPWIiGTDvn3OUXVNTbG28nLnqLoijWwKgjaz5LXdu52Qi0Ribb17w+WX61wwEckf1sLNN8MHH8TajHG+0PXsGVxdIiJ+W7QI3n3X3TZjhrPDTgqDZiGWvPb738OWLcDmTfDmm9DYyOxBt9P78XM1tbqI5I1nn4W//x1X1p3V/68ctmosHKasE5H88MYbzmlh8Vn3lT7/4qRzKwFlXaHQAFby1ssvw5IlOCG3eg1EmpnAEo7ethimL3c6aRArIiH3/vtwyy24su5g3qPqgwUwvbvTSVknIiHX2AjXXw92Uyzr+vEhl338K8ylEecSYcq6gqBDiCUv7drlTK0OOHvoIs0MYQuX8HunraEBamoCq09ExA/WOue9fv45rVnXjb1UU0sJzco6Eckbt98O27bRmnUAVzCf/flMWVdgNICVvGMt/O53ziAWgMZGiohQTS1l7Il1TLzOhIhIyDzyCKxZE73T2AjARdzNMDbGOinrRCTkXnwRli6N3olm3Rks5ihWxTop6wqGBrCSd/78Z/jHP+Iayss5n0UcwtvujsOG5bQuERE/rVvnXPO1VXk5X2IVZ7DY3VFZJyIh9tFHcMMNcQ3l5VSyiYu4291RWVcwNICVvLJli3OISbxRJw3hnPIn3I09esDcubkrTETER01Nzgzr+/bF2vY78otcUV6Ha4J1ZZ2IhJi1zuD1k09ibcWHjuL7ZTdRyt5Yo7KuoGgAK3mjudk5uX9P3FHCZWVQfcehFN9+Kwwf7lxXYvhwqKvTif4iEloLFzq/wMa77Lcj6H/7r5V1IpI3lixxJuWMd8EPh/KFO36krCtgGsAGob4eRoxwrrY8YoRzXzrt/vth7Vp329SpMHgwTqitW+dcEHbdOoWcSC4o67JizRrn3Nd4J50EJ5yAsk4kCMq6rNi82bkcYrwxY+Dss1HWFThdRifX6uth+nRntjSA9eud+6APXyesXQv33eduO/ZYOO20YOoRKXjKuqz4/HOYN885rK7FgQfCpZcGV5NIQVPWZcW+fc5pEm2Oqqt29hNIYdN/Ah3V0b1tNTWxkGuhqb87rr6e3cNHUTv6diJLlznXQdy8iT5/+X9c/pM+mINGaE+oSGd1JO+Udf6KboNb9/s+O/8UyzqzfClz7vo3eh42Qlkn0lnKuuBFt8H93ap4+9ZY1rF8GZc+eCoDjx2hrBP9AtshndnblmqKb039nbnodvh9w0VsZZAzrfqq1QDMstfRm12wfpf2hIp0RkfzTlnnn+g2+HvDWP7K11xZ9y37IIfzGqxHWSfSGcq64EW3wdqGSv7EFFfWHWdf4GSWKesE0C+w3sXvlbvwwo7vbUs1xbefU3935XMx/KytpoaXGw5lCRNibTbCRPsER7Mi1qY9oSLeJX5GZ8/uWN7lIuugMPKupoadDeXcxGWxNhthhH2Pb7Mw1qasE/FOWecfH7Nud0MztVQTaRmi2Ah97IfM5MbYDOvKuoKnAawXLXvl1q93Tjxqbk7ez8vetrlznam+42Uy9Xd7IZFYa8sexK4QdD7XtnF9hOuZ42qrYDPf5c62nbUnVKR9yT6jH3yQvG97n6lsZ12qevMw73av385v+N98Ts/WthL2UU0t3djn7qysE2mfss4/PtYWWb+RBcxmK4Nd7bNZQG8+cXdW1hU2a22obuPGjbM5N3y4tc7HMv1t+HBvr7dwodPXGOffhQu9P69HD/d79ujhfn6qWr3W5lVHlsHH2nbutPainvfbyTzWejuTh+1bfDE3yy9dDrDCdoGM8uvWpbPO62cqm1mXrl4/P+8dXQafamtqsvbHvRe4sm4yj9mHOVNZV6CUdT5Q1vm3DD7VFolYu6DvNW2y7mZmKOsKVLqsy2ooAROAtcA7wFVJHj8R2AWsit5+2t5reg66jn4QkzGm/YBLFjiZ8FKvl5BIVasxHa8tWa1eAjdRJrWlWR+ffWbtzJnWTj5qo51c9ERryD3AWdZ262Ztaam/20ZCIcgvdQWVdZ39TPmVdenq9SvvOpp1mdSWZn3s22fttde2zbof8wsbKVHWFSplnbIu37IuErG2rq5t1s3gZttYsp+yrkAFMoAFioF3gYOBUmA1cGhCnxOBxzN5XU9Bl8kHsTMBU1zsT5B6rddLSGSyJ8zr/wwS+/Xv7/094nmtLc36aGqy9uqrrZ08OXo7aqOdXL7U3shlNjIsugx+/k9OQiOoL3UFkXX9+/vzmfIz69LVmyxTcpl1XmtLsz4iEWvnzWubdbOZbz8bOlpZV8CUdcq6fMo6a6394x/bZt1F3Gm3V45V1hWwdFlnnMf9Z4z5MvAza+3p0fs/ArDWXhfX50Tg+9bayV5fd/z48XbFihXpO40Ywavr96eJUnf7oMHw+OOx+089BXN/Bbt3x9rKymDyZHjuedi2DQYNghO+4jwvsV/Nj2HiRK+lpzZ5Mmzb2rY9sV4v/VItU2KtnemXkoF028bre6ZZzmVXPM5zz7mbjzkGrr4aios9lCh5yxiz0lo7PoD3DTTrVq3vwyf0crcPHAT33x+7v3Qp/Pa3sCfus9e9DCZMgBdfhO3bYeBAOO44WLKkbb8f/ABOPdVr6alNmQLbt7VtT6zXa79UyxVfr5c+qfqlZOBvf0vfxcv7plnOVVffz9Kl7ubKSvj1r6F3bw8lSt4q1Kx7fX1PdjDA3T5wECxaFLu/bFn04qEJn7vTT4eXXopl3bHHwtNPt+1XXQ2nnOK19NTOPz91hsXX67VfquWKr9dLn1T9UjLwzDPpu3h53zTL+d7cRTzyiLu5Tx8n6yoqPJQoeStd1mVzAHs2MMFaOzV6/z+BY621M+P6nAg8BGwCtuCE3uvpXtdT0BUVMc3exjYGtX2svNyZlru8HPY1w96m9hemqBiGDoUd22PPd3XD3gAADD5JREFUHT0aKirbf64Xjy9O/djkM2J/b94Eq9dAJG4SqaJiOPIIdy2bN8Gbb6avdfky5/FE5eVw8int90sm8bnJeKnN6/oARo1y5kno3t1biZK/AvxSF2jWXWWv5XUOa/tYIWRdS990mRJU1nmpLYOsGzAAfvMbOOAAbyVK/irUrPutreZZvtr2MWWdI0+ybr/94LrrnPmspLCly7psXgfWJGlLHC2/Agy31n5mjJkEPAKMbPNCxkwHpgMM8zIt+bBhznWikmn50Hr98IITLDu2e/sQd0RL+CZrj9cSBu0NACsq2w/hVMuf2O51PRUVw4CBsWDsTG0e18eQIfDTn2rwKoFT1nnld9a19E2XKUFlnZfaPK6PPn3gl7/U4FUCp6zzSlnn5nF9lJXBz3+uwau0L5sD2E3A0Lj7lTh741pZaz+J+/tJY8zNxpgDrLU7E/rVAXXg7Klr953nzoULmyDF1W46JJNgjOflF8fRo5PvgRs9uu3rJQsJL++R2KdbafK9lN1K3WGVrl9JcazfgIGwcWNsGRobnWVqqTmTdZT4WknWR+/eTsj16pXk9URyK9isu2gbiVdS6RRlXdt+AWZdz57O4HXIkPQvLZIDwWbdxf+CvZ2oPlHYsy6xH4a2+xMIJusSa+tWCqYIbCTl+igthWuugUMOaf+lRbI5gH0ZGGmMOQjYDJwHXBDfwRgzCNhurbXGmGNwrkub4kJcGaiq4vAlK6hY/Bzs2uWMdnZ97PHJKQKgdx8Yl2Eda9bAq4thXzRxG4FXX4IRZ8ARR8T6jauEER865xm01Pv1r8MRHgLCy3sk61NU7KztxHBtBvY2p+9X0s055CN+GebPh0jCOo4A770F37gis/o3d4OxX4K333WvDz6EZx6k7651TKl4nkHLr4CqqvbXkUh2BZp1R77wHP3vfRY+/tj5qe7jjzw+OUXW9ekLXz2jbXs6r7wCrz0U+1LUCLz2Fxh1FowdG9exEkbtcM6zbal3wgQY6yHrvLxHsj5FxVBsoDlulF9UDBEDjfvS9+tWCmclLMO110IkYR1HgP+/Cs6/OrP6t5TCMeOcL3nx64MdsOQe9vt4E9+oWEnF87NghLJOAhdo1h36z79QfOdz8NHH0LcPfNTJrOvbF07KMOtWroSnH0jIoWUw5hwYF/8lsRLGbIennozVO3GS833Pr/dI7JdMJll3TsLr/+qXybNu3Ur49k8yW4a90fctL4OGhtj6YDs8dRflH23l9CGvcvDqGXC4sk48SDW7kx83YBLwFs6sdTXRthnAjOjfM4HXcWayexE4vr3X7PD1wrzOOPe973V8KnE/Z3Xr7HLFv4fXZU9Vr5dZ+dJNSZ/uuT7MTCxibfrZ6rJ9U9Yp65R1kivKuqhcZJ217rwrLu4aWZeuX/wVMoLIOq/LoKyTdqTLukACsDO3Dged31Owe3n9VDc/r8nqZQp2r9O0d+Y6Y6nCKvE1E9e531PIS8EK8ktdNm7KugTKug6uOMk3yrqobGddqvfoClnntV8QWef1fZV10g4NYFtk8zpSqT6Inflw+nUR7M7uzfNSb7KQTxVgHakt2xfxltDTl7o4yjplneQtZV2cbF8f1Gve5TrrvPYLIuu8vq+yTtqhAWwupDvUIv6WySF6XvYseunn52u1V3N8MKdaB/Hh5PU9tadO2qEvdTmirFPWSaCUdTnkJe+CyDqv/YLIOq/vq6yTdmgAmwtez8XwGhqZfLC97NHzupfSz72ZmZzz5aV+nSshaehLXY4o6zq+DMo68YGyLoe8nGcaVNZ57RdE1nl5X2WdtEMD2Fzw+4OYD4dW+L1Osn2okISavtTliLKuLWWd5JCyLof8/Gwr65K/nrJOUkiXdUX+zGUsVFVBXR0MHw7GOP/W1XX8Mi+pLuzt5YLfXYXf66SqCtatg0jE+VeX0BHJPWVdW8o6kfzk52dbWZf89ZR10gHGGeCGx/jx4+2KFSuCLiP76uth+nTnelktevToXFCI5DFjzEpr7fig6/CLsk5ZJ5KMsi6klHUiGUmXdfoFtqvyey+XiEhXpKwTkUKgrBPxTUnQBUgaVVUKNhHJf8o6ESkEyjoRX+gXWBEREREREQkFDWBFREREREQkFDSAFRERERERkVDQAFZERERERERCIXSX0THGvA+sz+ApBwA7s1ROV1RIy1tIywpa3vYMt9YemK1ick1Z1y4tb/4qpGUFZZ2yLj0tb/4qpGUFH7MudAPYTBljVuTT9dLaU0jLW0jLClpeSa/Q1peWN38V0rJC4S1vZxXa+tLy5q9CWlbwd3l1CLGIiIiIiIiEggawIiIiIiIiEgqFMICtC7qAHCuk5S2kZQUtr6RXaOtLy5u/CmlZofCWt7MKbX1pefNXIS0r+Li8eX8OrIiIiIiIiOSHQvgFVkRERERERPJA3g1gjTHnGGNeN8ZEjDEpZ7oyxkwwxqw1xrxjjLkqlzX6yRjTzxiz1BjzdvTfvin6rTPGvGqMWWWMWZHrOjujvW1lHL+LPr7GGDM2iDr94mF5TzTG7Ipuy1XGmJ8GUacfjDF3GmN2GGNeS/F4Xm1bPynrlHVh/zwo61yP59W29ZOyTlkX9s+Dss71uD/b1lqbVzdgDDAK+CswPkWfYuBd4GCgFFgNHBp07R1c3v8DXBX9+yrgNyn6rQMOCLreDixfu9sKmAQ8BRjgOOCloOvO8vKeCDwedK0+Le9XgbHAaykez5ttm4V1p6xL3k9ZF4Kbsq7N43mzbbOw7pR1yfsp60JwU9a1edyXbZt3v8Baa9+w1q5tp9sxwDvW2vestU3AfcCZ2a8uK84E/hD9+w/ANwOsJRu8bKszgXus40WgjzFmcK4L9Uk+/bfZLmvts8CHabrk07b1lbJOWUe4Pw/59N9mu5R1HaesU9YR7s9DPv232a5cZV3eDWA9qgA2xt3fFG0Lo4HW2q0A0X8HpOhngT8bY1YaY6bnrLrO87Kt8ml7el2WLxtjVhtjnjLGHJab0gKRT9s2CPm0/pR1+bU9lXVu+bRtg5BP609Zl1/bU1nn5su2LfGtnBwyxiwDBiV5qMZa+6iXl0jS1mWnY063vBm8zFestVuMMQOApcaYN6N7Sbo6L9sqVNuzHV6W5RVguLX2M2PMJOARYGTWKwtGPm3bjCnrWinrvPcJC2WdWz5t24wp61op67z3CQtlnZsv2zaUA1hr7SmdfIlNwNC4+5XAlk6+ZtakW15jzHZjzGBr7dboT/A7UrzGlui/O4wxD+Mc0hCGoPOyrUK1PdvR7rJYaz+J+/tJY8zNxpgDrLU7c1RjLuXTts2Ysi5GWee5T1go69zyadtmTFkXo6zz3CcslHVuvmzbQj2E+GVgpDHmIGNMKXAe8FjANXXUY8CF0b8vBNrsqTTG9DTG7N/yN3AakHR2sC7Iy7Z6DPhOdGaz44BdLYffhFC7y2uMGWSMMdG/j8H5HH+Q80pzI5+2bRCUdcq6rkpZ55ZP2zYIyjplXVelrHPzZ9t2ZOanrnwDvoUzut8DbAeejrYPAZ6M6zcJeAtnZrCaoOvuxPL2B5YDb0f/7Ze4vDgzn62O3l4P2/Im21bADGBG9G8D3BR9/FVSzFIYlpuH5Z0Z3Y6rgReB44OuuRPLugjYCuyNfm4vyedt6/O6U9ZZZV3QNWd5eZV1uinrlHWh/zwo6/zftib6YiIiIiIiIiJdWqEeQiwiIiIiIiIhowGsiIiIiIiIhIIGsCIiIiIiIhIKGsCKiIiIiIhIKGgAKyIiIiIiIqGgAayIiIiIiIiEggawIiIiIiIiEgoawEroGGOONsasMcaUGWN6GmNeN8YcHnRdIiJ+UtaJSCFQ1kmmjLU26BpEMmaM+RVQBpQDm6y11wVckoiI75R1IlIIlHWSCQ1gJZSMMaXAy8Bu4HhrbXPAJYmI+E5ZJyKFQFknmdAhxBJW/YD9gP1x9tiJiOQjZZ2IFAJlnXimX2AllIwxjwH3AQcBg621MwMuSUTEd8o6ESkEyjrJREnQBYhkyhjzHWCftfZeY0wx8IIx5uvW2meCrk1ExC/KOhEpBMo6yZR+gRUREREREZFQ0DmwIiIiIiIiEgoawIqIiIiIiEgoaAArIiIiIiIioaABrIiIiIiIiISCBrAiIiIiIiISChrAioiIiIiISChoACsiIiIiIiKhoAGsiIiIiIiIhML/AEsj3nF+RmL9AAAAAElFTkSuQmCC\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"model = models.Sequential(name='Many_neurons_model_relu')\n",
"## First hidden layer \n",
"model.add(layers.Dense(5, activation='relu',\n",
" kernel_initializer='random_normal', bias_initializer='random_uniform', \n",
" input_shape=(1,)))\n",
"## Extra hidden layer \n",
"# model.add(layers.Dense(20, activation='relu', input_shape=(1,)))\n",
"## output layer, one neuron \n",
"model.add(layers.Dense(1, activation='linear'))\n",
"\n",
"optimizer = optimizers.SGD(lr=0.005)\n",
"# optimizer = optimizers.Adam(lr=0.005)\n",
"\n",
"model.compile(loss='MSE',optimizer=sgd) \n",
"\n",
"plt.figure(figsize=[16,8])\n",
"epochs=100\n",
"for i in range(6):\n",
" # Train and Fit and MSE \n",
" model.fit(x_train, y_train, epochs=epochs, batch_size=64, verbose=0)\n",
" y_model_t = model.predict(x_train)\n",
" loss = mean_squared_error(y_train, y_model_t)\n",
"\n",
" # Plot\n",
" plt.subplot(2,3,i+1)\n",
" plot_toyModels(x_train, y_train, y_model_t)\n",
" plt.title('Epoch '+str(epochs*(i+1)) + '. MSE = ' + str(np.round(loss,4)))"
]
},
{
"cell_type": "code",
"execution_count": 79,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Model: \"Many_neurons_model_relu\"\n",
"_________________________________________________________________\n",
"Layer (type) Output Shape Param # \n",
"=================================================================\n",
"dense_38 (Dense) (None, 5) 10 \n",
"_________________________________________________________________\n",
"dense_39 (Dense) (None, 1) 6 \n",
"=================================================================\n",
"Total params: 16\n",
"Trainable params: 16\n",
"Non-trainable params: 0\n",
"_________________________________________________________________\n"
]
}
],
"source": [
"model.summary()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Helper functions: \n",
"1. For plotting train set, test set, neural network predictions\n",
"2. For plotting the training and validation loss functions"
]
},
{
"cell_type": "code",
"execution_count": 80,
"metadata": {},
"outputs": [],
"source": [
"def array_exists(arr):\n",
" return hasattr(arr, 'shape')\n",
"#check if the numpy array exists\n",
"def reshape_if_exists(arr):\n",
" if array_exists(arr):\n",
" return arr['x'].values.reshape(-1,1), arr['y'].values.reshape(-1,1)\n",
" else:\n",
" return None, None\n",
" \n",
"def reshape_and_extract_sets(train_set, test_set):\n",
" \"\"\"\n",
" Extracts x_train, y_train, x_test and y_test and reshapes them for using with keras.\n",
" \"\"\" \n",
" x_train, y_train = reshape_if_exists(train_set)\n",
" x_test, y_test = reshape_if_exists(test_set)\n",
" return x_train, y_train, x_test, y_test\n",
"\n",
"def plot_sets(train_set = None, test_set = None, NN_model = None):\n",
" \"\"\"\n",
" plots the train set, test set, and Neural network model.\n",
" This function is robust to lack of inputs. You can feed it any combination of train_set, test_set and \n",
" \"\"\"\n",
" x_train, y_train, x_test, y_test = reshape_and_extract_sets(train_set, test_set)\n",
" \n",
" if array_exists(train_set):\n",
" plt.plot(x_train, y_train,'or',label='train data')\n",
" \n",
" if array_exists(test_set):\n",
" plt.plot(x_test, y_test,'^g',label='test data')\n",
"\n",
" # if the neural network model was provided, plot the predictions.\n",
" if type(NN_model) != type(None):\n",
" NN_preds = NN_model.predict(x_train) \n",
" sorted_idx = np.argsort(x_train.reshape(-1,))\n",
" plt.plot(x_train[sorted_idx], NN_preds[sorted_idx],'-b',linewidth=4,label='FFNN', alpha = 0.7)\n",
"\n",
" plt.xlabel(\"x\")\n",
" plt.ylabel(\"y(x)\")\n",
" plt.legend()\n",
" plt.show()\n",
" \n",
"def plot_loss(model_history):\n",
" plt.loglog(model_history.history['loss'],linewidth=4, label = 'Training')\n",
" plt.loglog(model_history.history['val_loss'],linewidth=4, label = 'Validation', alpha=0.7)\n",
" plt.xlabel('Epoch')\n",
" plt.ylabel('Loss')\n",
" plt.legend()\n",
" plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Split the data and train a network with the training set and evaluate the model on the test set"
]
},
{
"cell_type": "code",
"execution_count": 81,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEGCAYAAABo25JHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3df3RV5b3n8fcXGhoirqsFvHhFEuyyV4soSOQKaoF2llXQttPRtXqNrbejUltdY2euVqlFnUbunbld01u50vZmqsFqxjJTbe0PWrVzRYpg2wDxJyry00jUSGsMRSaQfOePcxJOkrNPzjnZ+/zan9daZ+Vk//xm52R/8zzPfp7H3B0REYmvMcUOQEREikuJQEQk5pQIRERiTolARCTmlAhERGLuA8UOIFeTJk3yurq6YochIlJWNm/e/I67T063ruwSQV1dHa2trcUOQ0SkrJjZnqB1qhoSEYk5JQIRkZhTIhARibmyayNI5/Dhw7S3t3Po0KFih1IRqqurmTp1KlVVVcUORUQKILJEYGYnAz8EpgB9QJO73z1km4XAo8Cu5KJH3P2buZ6rvb2dY489lrq6OsxsdIHHnLuzf/9+2tvbmT59erHDEZECiLJq6Ajw9+5+OnAucL2ZfTTNdr9191nJV85JAODQoUNMnDhRSSAEZsbEiRNVuhIpJS0tUFcHY8Ykvra0hHr4yEoE7t4BdCTfd5vZNuAk4KUozqckEB5dS5ES0tICS5fCwYOJ7/fsSXwP0NAQyikK0lhsZnXAbOB3aVbPM7NnzexXZjYjYP+lZtZqZq2dnZ0RRioiUmJuu+1oEuh38GBieUgiTwRmNgF4GPiqu783ZPUWoNbdzwL+BfhpumO4e5O717t7/eTJaTvGFdW7777Ld7/73bz2Xbx4Me+++27e554wYULG9aOJTURKwN69uS3PQ6SJwMyqSCSBFnd/ZOh6d3/P3Q8k368FqsxsUpQxAaHXt2W62fb29mbcd+3atRx33HGjOn8mSgQiZSTdvWnatPTbBi3PQ2SJwBIVzfcC29z92wHbTEluh5nNTcazP6qYgKP1bXv2gPvR+rZRJINbb72VHTt2MGvWLG6++WbWrVvHokWLuOKKK5g5cyYAn/nMZ5gzZw4zZsygqalpYN+6ujreeecddu/ezemnn861117LjBkzuPDCC3n//feHnWvXrl3MmzePc845h+XLlw8sP3DgAJ/4xCc4++yzmTlzJo8++mja2IK2E5EiC7o3LV4MNTWDt62pgRUrwju3u0fyAs4HHHgOaEu+FgPXAdclt7kBeBF4FngGmD/ScefMmeNDvfTSS8OWBaqtdU9c5sGv2trsjzHErl27fMaMGQPfP/nkk15TU+M7d+4cWLZ//353dz948KDPmDHD33nnnWQ4td7Z2em7du3ysWPH+tatW93d/fLLL/cHHnhg2LkuvfRSv//++93d/Z577vFjjjnG3d0PHz7sXV1d7u7e2dnpH/7wh72vr29YbEHbDZXTNRWR0ct0b3rwwcRXs6Pf5who9YD7apRPDW0AMj5+4u73APdEFUNaBahvA5g7d+6g5/BXrlzJT37yEwBef/11tm/fzsSJEwftM336dGbNmgXAnDlz2L1797DjPv300zz88MMAfP7zn+eWW24BEgn961//OuvXr2fMmDG88cYbvPXWW8P2D9puypQpofzcIpKnTPemhobQnhBKpyJ6Fudk2rREkSvd8hAdc8wxA+/XrVvHb37zGzZt2kRNTQ0LFy5M+5z+Bz/4wYH3Y8eOTVs1BOkf72xpaaGzs5PNmzdTVVVFXV1d2nNku52IFFiB7k3pxG+soRUrQq9vO/bYY+nu7g5c39XVxfHHH09NTQ0vv/wyzzzzTN7nOu+88/jRj34EJG7qqec44YQTqKqq4sknn2RP8gM1NLag7USkyCK4N2UrfomgoQGamqC2FswSX5uaRlXsmjhxIueddx5nnHEGN99887D1F110EUeOHOHMM89k+fLlnHvuuXmf6+6772bVqlWcc845dHV1DSxvaGigtbWV+vp6WlpaOO2009LGFrSdiBRZBPembFmiDaF81NfX+9CJabZt28bpp59epIgqk66pSGUxs83uXp9uXfxKBCIiMogSgYhIzCkRiIjEnBKBiEjMKRGIiMScEoGISMwpEYRgtCN8fuc73+Hg0PHG01i3bh2XXHJJxm3a2tpYu3Zt3rGISPzENhF0dHewYPUC3jzw5qiPVahEkA0lAhHJVWwTQeP6Rjbs3UDjU42jPtbQoZ4BvvWtb3HOOedw5plncscddwDw5z//mSVLlnDWWWdxxhlnsGbNGlauXMm+fftYtGgRixYtGnbsX//615x22mmcf/75PPLI0Skdfv/73zN//nxmz57N/PnzeeWVV+jp6eH2229nzZo1zJo1izVr1qTdTkRkkKBhSUv1NephqN1933v7vPquaudOfPxd472juyOn/YcaOtTzY4895tdee6339fV5b2+vL1myxJ966in/8Y9/7Ndcc83Adu+++667Hx2Keqj333/fp06d6q+++qr39fX55Zdf7kuWLHF3966uLj98+LC7uz/xxBP+2c9+1t3dm5ub/frrrx84RtB2I9Ew1CKjFMLQ0WGiGMNQl7LG9Y30eR8Avd5L41ONrFqyKrTjP/744zz++OPMnj0bSEwas337di644AJuuukmbrnlFi655BIuuOCCjMd5+eWXmT59OqeeeioAV1555cCkNl1dXVx11VVs374dM+Pw4cNpj5HtdiISogJMOB+m2FUNdXR30NzWTE9vDwA9vT00tzWH0lbQz91ZtmwZbW1ttLW18dprr3H11VfzkY98hM2bNzNz5kyWLVvGN7/5zRGPlW7IaYDly5ezaNEiXnjhBX7+858HDiWd7XYiEqJME86HPFVuGGKXCFJLA/36SwX5GjrU8yc/+Unuu+8+Dhw4AMAbb7zB22+/zb59+6ipqeHKK6/kpptuYsuWLWn373faaaexa9cuduzYAcBDDz00sK6rq4uTTjoJgNWrVwfGErSdiEQoaJKZ/pJBiFPlhiF2iWBT+6aB0kC/nt4eNrZvzPuYQ4d6vvDCC7niiiuYN28eM2fO5LLLLqO7u5vnn3+euXPnMmvWLFasWME3vvENAJYuXcrFF188rLG4urqapqYmlixZwvnnn09tbe3Auq997WssW7aM8847j97e3oHlixYt4qWXXhpoLA7aTkQiFDSZzNixwSWFItIw1JKWrqnIKAxtI4DEJDNBj4mbQV9f+nUh0TDUIiIRGtYvKWiSmZRS/SAFmI4yEyUCEZFRStsvqaEBdu9O/Ke/e3fi+yJOR5lJxSSCcqviKmW6liLZ638Ssc/7Rn4CsYjTUWZSEYmgurqa/fv36wYWAndn//79VFdXFzsUkbKQrl9SRulKCkVWEY3Fhw8fpr29Xc/Ih6S6upqpU6dSVVVV7FBESlpHdwenrDyFQ0eO3nvGf2A8O2/cyZQJU4oY2XCZGosromdxVVUV06dPL3YYIhIzmfolhTlaQdQqompIRKQYouiXVAwVUSIQESmGrV/aWuwQQqESgYhIzCkRiIjEnBKBiEjMKRGIiMScEoGISMwpEYiIxJwSgYhIzCkRiIjEnBKBiEjMKRGIiGSjBCedD4uGmBARGcnQqSf7J52HkhhGerQiKxGY2clm9qSZbTOzF83sxjTbmJmtNLPXzOw5Mzs7qnhERPJ2220lOel8WKIsERwB/t7dt5jZscBmM3vC3V9K2eZi4NTk62+A7yW/ioiUjr17c1teZiIrEbh7h7tvSb7vBrYBJw3Z7NPADz3hGeA4MzsxqphERPISNLl8kSedD0tBGovNrA6YDfxuyKqTgNdTvm9neLLAzJaaWauZtXZ2dkYVpogIkJh5bMHqBUfnHy7RSefDEnkiMLMJwMPAV939vaGr0+wybO5Md29y93p3r588eXIUYYqIDGhc38iGvRuOzj9copPOhyXSRGBmVSSSQIu7P5Jmk3bg5JTvpwL7ooxJRCSTju4Omtua6fM+mtuaj5YKSnDS+bBE+dSQAfcC29z92wGb/Qz4QvLpoXOBLnfviComEREgY5+A1HmI++cfrnTmPqwmJpwDm50P/BZ4Huif3fnrwDQAd/9+MlncA1wEHAS+6O6tmY5bX1/vra0ZNxERCTa0TwAk6vubmuj41Mc5ZeUpHDpyaGDV+A+MZ+eNO5kyYUoRgg2PmW129/p06yJ7fNTdN5C+DSB1GweujyoGEZFhMvQJaDxu8UBpoF9/qWDVklUFDLKwNMSEiMRLhj4Bm9o30dPbM2hxT28PG9s3FiCw4tEQEyISL9OmJYaISLN865e2Fj6eEqASgYjES4X3CciHEoGIxEuF9wnIh6qGRCR+GhpifeMfSiUCEZGYUyIQEYk5JQIRkZhTIhCRylXB00uGSY3FIlKZKnx6yTCpRCAilanCp5cMkxKBiFSmCp9eMkxKBCJSmSp8eskwKRGISEWI2/SSYVIiEJGKELfpJcMU2cQ0UdHENCIyVEd3x8CEMpUykUzYMk1MoxKBiJSPgH4BcZxeMkxKBCJSHvr7BezZA+4D/QI67r+H5rbmgQllenp7Bk86LyNSIhCR8hDQL6DxV8sCp5eU7KhnsYiUh4Dn/zcdd4Ce3sHL4jC9ZJiUCESkPARMMbn117Wwe3fh46kgqhoSkfKgfgGRUSIQkfKgfgGRUdWQiJQPTTEZCZUIRERiTolARCTmlAhERGJOiUBEJOaUCEREYk6JQERKiyacLzg9PioipUMTzheFSgQiUjo04XxRKBGISOnQhPNFoUQgIqVDE84XhRKBiJQODSxXFEoEIlI6NLBcUeipIREpLRpYruBUIhARiTklAhGRmIssEZjZfWb2tpm9ELB+oZl1mVlb8nV7VLGIiEiwKNsIVgP3AD/MsM1v3f2SCGMQEZERZEwEZlYNXAJcAPwV8D7wAvBLd38x077uvt7M6sIJU0REohJYNWRmdwJPA/OA3wH/Cvxv4Ajw38zsCTM7c5Tnn2dmz5rZr8xsRoZYlppZq5m1dnZ2jvKUIlJQGkSu5GUqEfzB3e8MWPdtMzsBGE13vy1ArbsfMLPFwE+BU9Nt6O5NQBNAfX29j+KcIlJIGkSuLASWCNz9lzBQPTSImU1y97fdvTXfE7v7e+5+IPl+LVBlZpPyPZ6IlKARBpHr6O5gweoFvHngzSIEJ/2yeWroD2Z2bv83ZvYfgI2jPbGZTTEzS76fm4xl/2iPKyIlZIRB5BrXN7Jh7wYan2osYFAyVDZPDV0B3Gdm60g0GE8EPj7STmb2ELAQmGRm7cAdQBWAu38fuAz4spkdIdEI/Tl3V7WPSCWZNi1RHZRmeUd3B81tzfR5H81tzSxfsJwpE6YUPkbBsrn3mtlngAeAbuBj7v5a1IEFqa+v99bWvGukRKSQhrYRQGIQuaYmvnLc09y79V56ensYN3Yc18y+hlVLVhUv1gpnZpvdvT7duhGrhszsXuCrwJnAF4Gfm9n14YYoIhUpYBC5jk99nOa2Znp6ewDo6e2hua1ZbQVFkk0bwQvAInff5e6PAecCZ0cblohUjIYG2L0b+voSXxsaaFzfSJ/3Ddqs13vVVlAkI7YRuPs/D/m+C7g6sohEpOJtat80UBro19Pbw8b2UT+HInkITARm9nMSz+7/2t0PD1l3CvB3wG53vy/SCEWk4mz90tZihyApMpUIrgX+C/DPZvYnoBOoBuqAHcA97v5o5BGKiEikAhOBu78JfM3MXgc2kEgC7wOvuvvBoP1ERKS8ZNNY/JfA/wH+MzCFRDIQEZEKMWIicPdvkBgD6F4S7QLbzewfzOzDEccmIiIFkNXENMkev28mX0eA44Efm9k/RRibiIgUwIiPj5rZfwKuAt4BfgDc7O6HzWwMsB34WrQhiohIlLIZa2gS8Fl3HzRgiLv3mZlmFxMRKXPZdCgLnEvY3beFG46IiBRaZJPXi4hIeVAiEJHcaOrJipNNG4GISIKmnqxIKhGISPY09WRFUiIQkexp6smKpEQgIsMFtQNMm5Z++zRTT6pUUD6UCERksP52gD17wP1oO0BLC6xYkZhqMlVNDaxYMWiyGU0yU16UCERksEztAJp6siIpEYjIYCO0A2jqycqjRCASZ+naAjK0AwTR1JPlTf0IROIqqE/AVVfB/fcPrh5KtgME0dST5U0lApG4CmoLWLs2bTuAOoxVLktMNVA+6uvrvbW1tdhhiJS/MWMSTwUNZZao/5eKYmab3b0+3TqVCETiKo+2AKlMSgQicZWhT4DEixKBSFwF9AlQW0D8KBGIxEHQkBFp+gRI/OjxUZFKp6GjZQQqEYhUuhGGjhZRIhCpdCMNGSGxp0QgUun0mKiMQIlApNLpMVEZgRKBSKXTY6IyAj01JBIHDQ268UsglQhERGJOiUBEJOYiSwRmdp+ZvW1mLwSsNzNbaWavmdlzZnZ2VLGIiEiwKEsEq4GLMqy/GDg1+VoKfC/CWEREJEBkicDd1wN/zLDJp4EfesIzwHFmdmJU8YiISHrFbCM4CXg95fv25DIRESmgYiYCS7Ms7XRpZrbUzFrNrLWzszPisERE4qWYiaAdODnl+6nAvnQbunuTu9e7e/3kyZMLEpyISFwUMxH8DPhC8umhc4Eud+8oYjwiIrEUWc9iM3sIWAhMMrN24A6gCsDdvw+sBRYDrwEHgS9GFYuIiASLLBG4+9+OsN6B66M6v4iIZEc9i0VEYk6JQKTCdHR3sGD1At488GaxQ5EyoUQgUo6CJqMHGtc3smHvBhqfaixaeFJelAhEyk3/ZPR79oD70cnoW1ro6O6gua2ZPu+jua1ZpQLJihKBSLnJMBl94/pG+rwPgF7vValAsqJEIFJuAiad7/jjHprbmunp7QGgp7dHpQLJihKBSLkJmHS+cfGEgdJAP5UKJBtKBCLlJmAy+k1nTRwoDfTr6e1hY/vGAgYn5UhzFouUsI7uDj738OdYc9kapkyYkljYP/fwbbclqommTYMVK9iqOYklTyoRiJSwwEdBGxpg927o60t8VRKQUVAiEClRehRUCkWJQKRE6VFQKRQlApES1F8a0KOgUghKBCIlKLU00E+lAomKEoFICdrUvkmPgkrB6PFRkRK09Utbix2CxIhKBCIiMadEICISc0oEIiIxp0QgIhJzSgQiIjGnRCAiEnNKBCIiMadEIFICOro7WLB6gYaQkKJQIhApAYHDTYsUgBKBSJFpuGkpNiUCkSLTcNNSbEoEIkWk4aalFCgRiBSRhpuWUqBEIFJEGm5aSoGGoRYpIg03LaVAJYJy0tICdXUwZkzia0tLsSMSkQqgRFAuWlpg6VLYswfcE1+XLlUyKCdK5FKilAiiFtYf/223wcGDg5cdPJhYLiVnWE9hJXIpYUoEYUl3ww/zj3/v3tyWS1EN6ymsRC4lTIkgDEE3/BtvDO+Pf9q03JaHrVKqNQrwc6TtKaxELiVMiSAMQf/t7d+ffvt8/vhXrICamsHLamoSy/ORyw2xUqo1CvRzpO0pXOxELpKJu5fVa86cOV5yzNwTt5bsXrW1+Z3nwQcT+5olvj74YP7HqakZHFNNTfDxamvD/TnysO+9ff6x5o95R3dH/gcpwM+x7719Xn1XtXMnA6/xd433jtX35HbNRUIGtHrAfVUlgjAE/Vc3cWK4/8U3NMDu3dDXl/ja0JDfcXKtry6Bao1QRufM8+fIZYjowJ7Ck16CpiaorQWzxNempvx/hyIhijQRmNlFZvaKmb1mZremWb/QzLrMrC35uj2SQPKpF85ln6Bqm7vvLswff64/X643xHyrNfK47uluuqGNzpnnz5FLEsrYUzisRC4StqCiwmhfwFhgB3AKMA54FvjokG0WAr/I5bg5Vw3lWg0ymn3CqLbJVT6x5lpFUqhr6O5f/sWXfcx/HeNf+cVXBi0b1zjOuRMf1zhu0Lqc5BFTalXP+LvGj65qSqSIyFA1FGUimAc8lvL9MmDZkG2iTwQj3fTS3cAz7VOsG36QfOq9C5Ho8ogr3U03sM493xtyjj9HaElIpMgyJQJLrA+fmV0GXOTu1yS//zzwN+5+Q8o2C4GHgXZgH3CTu7+Y5lhLgaUA06ZNm7Nnz57sAxkzJnELGn5QeOCBxFMjqfXlNTXD689TDV1fU1Pcut5MP19f3/Dl/VpaEm0Ce/cmqkZWrAj3Z8gjrq/88ivcu/Veenp7GDd2HNfMvgbHB5b161+36t35kf4MHd0dnLLyFA4dOTSwbPwHxrPzxp1MmTAltPOIFIKZbXb3+nTromwjsDTLht4ZtgC17n4W8C/AT9MdyN2b3L3e3esnT56cWxSZ6oWDGk3Hjk2/z9ixhekUlEvder719yHWV6dtTM0xrqBx+dfvWZ++zv25X0b+KKiGiJa4iDIRtAMnp3w/lcR//QPc/T13P5B8vxaoMrNJoUaR6fn7oMbR3t70+/T2pt8+zKdncn3WvZj9C5LSNqZmiivNOYJuugtqF+B3+LDX1n8l3KScJiYNES2xEVRnNNoXiSGudwLTOdpYPGPINlNgoHpqLrC3//ugV179CILqhXNtCyjE8/T51vkXo3+Bj9CYmi6ugHPM+ofaQe0A/a9Z35+V/sRBfTfMcr8meTZsh9K3QaRAKEZjceK8LAZeJfH00G3JZdcB1yXf3wC8mEwSzwDzRzpmqB3Kcr0B5HnDyHj+oTerkW5wUcojCeXcmBpWMh0piRegw1y6J5xESlXREkEUr9B7Fuf633TU/31PnBjOjTIfOSahvJ7oCSvRZbrZ53pjzyMmPVYq5SZTIlDP4lwbTaPu3Qvh1vmTQ8/YHBt482pMDWvMnYaG4M56Begwl3Y8IZEypURQLEE3pT/+MfTeyFn3jM2x4TmvxtQwG7eDknKuN/YcYwp6winvHs8ixRZUVCjVV0kOOpePAg3klnMVRiE6zEV9jog7zKW2i/S/1NlMSh2qGipBYT/2GSDnKoxCjIcT9TkyVRuFEJMeK5VKE1nP4qjU19d7a2trscMIR8S9e9UzVkT6FatnsYwk4v+M1TNWRLKhRFDBVIUhItn4QLEDkOhs/dLWYocgImVAJQIRkZhTIhARiTklAhGRmFMiEBGJOSUCEZGYK7sOZWbWCeQwV+Ugk4B3QgwnLKUaF5RubIorN4orN5UYV627p53isewSwWiYWWtQz7piKtW4oHRjU1y5UVy5iVtcqhoSEYk5JQIRkZiLWyJoKnYAAUo1Lijd2BRXbhRXbmIVV6zaCEREZLi4lQhERGQIJQIRkZiruERgZpeb2Ytm1mdmgY9ZmdlFZvaKmb1mZremLP+QmT1hZtuTX48PKa4Rj2tmf21mbSmv98zsq8l1d5rZGynrFhcqruR2u83s+eS5W3PdP4q4zOxkM3vSzLYlf+c3pqwL9XoFfV5S1puZrUyuf87Mzs5234jjakjG85yZbTSzs1LWpf2dFiiuhWbWlfL7uT3bfSOO6+aUmF4ws14z+1ByXZTX6z4ze9vMXghYH+3nK2gOy3J9AacDfw2sA+oDthkL7ABOAcYBzwIfTa77J+DW5Ptbgf8eUlw5HTcZ45skOoEA3AncFMH1yiouYDcwabQ/V5hxAScCZyffHwu8mvJ7DO16Zfq8pGyzGPgVYMC5wO+y3TfiuOYDxyffX9wfV6bfaYHiWgj8Ip99o4xryPaXAv8W9fVKHvtjwNnACwHrI/18VVyJwN23ufsrI2w2F3jN3Xe6ew/wI+DTyXWfBu5Pvr8f+ExIoeV63E8AO9w9317U2Rrtz1u06+XuHe6+Jfm+G9gGnBTS+VNl+rykxvtDT3gGOM7MTsxy38jicveN7v6n5LfPAFNDOveo4opo37CP/bfAQyGdOyN3Xw/8McMmkX6+Ki4RZOkk4PWU79s5egP5S3fvgMSNBjghpHPmetzPMfxDeEOyWHhfWFUwOcTlwONmttnMluaxf1RxAWBmdcBs4Hcpi8O6Xpk+LyNtk82+UcaV6moS/1X2C/qdFiqueWb2rJn9ysxm5LhvlHFhZjXARcDDKYujul7ZiPTzVZYzlJnZb4B0s6/f5u6PZnOINMtG/RxtprhyPM444FPAspTF3wMaScTZCPwP4D8WMK7z3H2fmZ0APGFmLyf/i8lbiNdrAok/2K+6+3vJxXlfr3SnSLNs6OclaJtIPmsjnHP4hmaLSCSC81MWh/47zSGuLSSqPQ8k229+Cpya5b5RxtXvUuBpd0/9Lz2q65WNSD9fZZkI3P3fjfIQ7cDJKd9PBfYl379lZie6e0ey6PV2GHGZWS7HvRjY4u5vpRx74L2Z/U/gF4WMy933Jb++bWY/IVEkXU+Rr5eZVZFIAi3u/kjKsfO+Xmlk+ryMtM24LPaNMi7M7EzgB8DF7r6/f3mG32nkcaUkbNx9rZl918wmZbNvlHGlGFYij/B6ZSPSz1dcq4b+AJxqZtOT/31/DvhZct3PgKuS768CsilhZCOX4w6rm0zeDPv9eyDt0wVRxGVmx5jZsf3vgQtTzl+062VmBtwLbHP3bw9ZF+b1yvR5SY33C8mnO84FupJVWtnsG1lcZjYNeAT4vLu/mrI80++0EHFNSf7+MLO5JO5F+7PZN8q4kvH8BbCAlM9cxNcrG9F+vqJoAS/mi8QffTvw/4C3gMeSy/8KWJuy3WIST5nsIFGl1L98IvB/ge3Jrx8KKa60x00TVw2JP4i/GLL/A8DzwHPJX/SJhYqLxBMJzyZfL5bK9SJRzeHJa9KWfC2O4nql+7wA1wHXJd8bsCq5/nlSnlgL+qyFdJ1GiusHwJ9Srk/rSL/TAsV1Q/K8z5JoxJ5fCtcr+f3fAT8asl/U1+shoAM4TOL+dXUhP18aYkJEJObiWjUkIiJJSgQiIjGnRCAiEnNKBCIiMadEICISc0oEIiIxp0QgIhJzSgQio2Rm5yQHt6tO9kB90czOKHZcItlShzKREJjZXUA1MB5od/d/LHJIIllTIhAJQXKclz8Ah0gMl9Bb5JBEsqaqIZFwfAiYQGKmtOoixyKSE5UIREJgZj8jMTvUdBID3N1Q5JBEslaW8xGIlBIz+wJwxN3/l5mNBTaa2cfd/d+KHQs0pDIAAAA2SURBVJtINlQiEBGJObURiIjEnBKBiEjMKRGIiMScEoGISMwpEYiIxJwSgYhIzCkRiIjE3P8HCxCk3pUi+WIAAAAASUVORK5CYII=\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# The usual split\n",
"toy_train, toy_test = train_test_split(toySet_1, train_size=0.7, random_state=109)\n",
"\n",
"# use helper functions to extract and plot the datasets\n",
"x_train, y_train, x_test, y_test = reshape_and_extract_sets(toy_train, toy_test)\n",
"plot_sets(toy_train, test_set = toy_test)"
]
},
{
"cell_type": "code",
"execution_count": 85,
"metadata": {},
"outputs": [],
"source": [
"model_2 = models.Sequential(name='Many_neurons_model_relu_2')\n",
"# hidden layer with 2 neurons (or nodes)\n",
"model_2.add(layers.Dense(10, activation='relu',\n",
" kernel_initializer='random_normal', bias_initializer='random_uniform', \n",
" input_shape=(1,)))\n",
"\n",
"## Add an extra layer\n",
"# model_2.add(layers.Dense(10, activation='relu', input_shape=(1,)))\n",
"\n",
"# output layer, one neuron \n",
"model_2.add(layers.Dense(1, activation='linear'))\n",
"\n",
"# optimizer = optimizers.SGD(lr=0.01)\n",
"optimizer = optimizers.Adam(0.01)\n",
"\n",
"model_2.compile(loss='MSE',optimizer=optimizer) \n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 86,
"metadata": {},
"outputs": [],
"source": [
"history_2 = model_2.fit(x_train, y_train, epochs=1500, batch_size=64, verbose=0,\n",
" validation_data= (x_test, y_test))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Plot the training and validation loss functions"
]
},
{
"cell_type": "code",
"execution_count": 87,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plot_loss(history_2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Plot the predictions along with the ground truth data"
]
},
{
"cell_type": "code",
"execution_count": 88,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plot_sets(train_set = toy_train, test_set = toy_test, NN_model = model_2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Break Out Room 2\n",
"\n",
"**Let's fit something very nonlinear**\n",
"\n",
"- Load the toyDataSet_2.csv from the data directory.\n",
"- Split the data in training and testing sets.\n",
"- Use Keras to desing an FFNN with `Sequential()`:\n",
" - two hidden layers of 20 neurons\n",
" - with tanh() activation function `tanh`\n",
"- Use Adam optimizer with learning rate 0.005 `Adam(0.005)`\n",
"- Define MSE as the loss function and `compile()` \n",
"- Train the model with the training set and validate with the testing set: `fit()`\n",
"\n",
"- Plot the training and validation loss functions `plot_loss()`\n",
"- Plot the prediction along with the ground truth data\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 89,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"toySet_2 = pd.read_csv('../data/toyDataSet_2.csv')\n",
"\n",
"toy_train2, toy_test2 = train_test_split(toySet_2, train_size=0.7, random_state=109)\n",
"x_train2, y_train2, x_test2, y_test2 = reshape_and_extract_sets(toy_train2, toy_test2)\n",
"\n",
"plot_sets(toy_train2, toy_test2)"
]
},
{
"cell_type": "code",
"execution_count": 192,
"metadata": {},
"outputs": [
{
"ename": "SyntaxError",
"evalue": "invalid syntax (, line 4)",
"output_type": "error",
"traceback": [
"\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m4\u001b[0m\n\u001b[0;31m model =\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n"
]
}
],
"source": [
"#############################\n",
"# Design the neural network\n",
"#############################\n",
"model = \n",
"# hidden layer with 20 neurons (or nodes)\n",
"model.add( ?? )\n",
"# Add another hidden layer of 20 neurons\n",
"model.add( ?? )\n",
"# output layer, one neuron \n",
"model.add( ?? )\n",
"\n",
"##############################################\n",
"## SET OPTIMIZER AND LOSS. COMPILE AND FIT\n",
"##############################################\n",
"optimizer=\n",
"model.compile( ?? ) \n",
"history_toy2 = model.fit( ?? )\n",
"\n",
"# PLOT THE LOSS FUNCTIONS\n",
"plot_loss( ?? )\n",
"\n",
"# PLOT DATA AND PREDICTIONS\n",
"plot_sets( ?? )\n"
]
},
{
"cell_type": "code",
"execution_count": 94,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# %load '../solutions/sol_2.py'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Classification Task using NeuralNets"
]
},
{
"cell_type": "code",
"execution_count": 95,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Using TensorFlow backend.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"(60000, 28, 28) (60000,) (10000, 28, 28) (10000,)\n"
]
}
],
"source": [
"# we'll use keras a lot more in the last few weeks of the course\n",
"from keras.datasets import mnist\n",
"(x_train, y_train), (x_test, y_test) = mnist.load_data()\n",
"print(x_train.shape, y_train.shape, x_test.shape, y_test.shape)"
]
},
{
"cell_type": "code",
"execution_count": 97,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"This picture belongs to the class for number 3\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"print('This picture belongs to the class for number', y_train[10])\n",
"fig, ax = plt.subplots()\n",
"ax.grid('off')\n",
"ax.imshow(x_train[10], cmap='gray');"
]
},
{
"cell_type": "code",
"execution_count": 98,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(60000, 784) (60000,) (10000, 784) (10000,)\n",
"0 255 0 255\n",
"0.0 1.0 0.0 255.0\n"
]
}
],
"source": [
"x_train = x_train.reshape(x_train.shape[0], 784)\n",
"x_test = x_test.reshape(x_test.shape[0], 784)\n",
"\n",
"# check if the shapes are ok\n",
"print(x_train.shape, y_train.shape, x_test.shape, y_test.shape)\n",
"\n",
"# checking the min and max of x_train and x_test\n",
"print(x_train.min(), x_train.max(), x_test.min(), x_test.max())\n",
"\n",
"# NORMALIZE\n",
"x_train = (x_train - x_train.min())/(x_train.max() - x_train.min()) \n",
"x_test = (x_test - x_train.min())/(x_train.max() - x_train.min()) \n",
"\n",
"print(x_train.min(), x_train.max(), x_test.min(), x_test.max())"
]
},
{
"cell_type": "code",
"execution_count": 153,
"metadata": {},
"outputs": [],
"source": [
"model_mnist = tf.keras.models.Sequential([\n",
" tf.keras.layers.Input(shape = (784,)),\n",
" tf.keras.layers.Dense(128,activation='relu'),\n",
" tf.keras.layers.Dense(10, activation='softmax')\n",
"])\n",
"\n",
"# One could also do:\n",
"# model_mnist = tf.keras.models.Sequential()\n",
"# model_mnist = tf.keras.layers.Input(shape = (784,)),\n",
"# model_mnist.add(layers.Dense(784, activation='relu'))\n",
"# model_mnist.add(layers.Dense(10, activation='softmax'))\n",
"\n",
"model_mnist.compile(\n",
" loss='sparse_categorical_crossentropy',\n",
" optimizer=tf.keras.optimizers.Adam(0.001),\n",
" metrics=['accuracy']\n",
")\n"
]
},
{
"cell_type": "code",
"execution_count": 154,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train on 60000 samples, validate on 10000 samples\n",
"Epoch 1/6\n",
"60000/60000 [==============================] - 2s 37us/sample - loss: 0.3574 - accuracy: 0.9021 - val_loss: 23.9483 - val_accuracy: 0.9441\n",
"Epoch 2/6\n",
"60000/60000 [==============================] - 2s 29us/sample - loss: 0.1614 - accuracy: 0.9544 - val_loss: 18.0437 - val_accuracy: 0.9594\n",
"Epoch 3/6\n",
"60000/60000 [==============================] - 2s 28us/sample - loss: 0.1162 - accuracy: 0.9667 - val_loss: 15.2839 - val_accuracy: 0.9669\n",
"Epoch 4/6\n",
"60000/60000 [==============================] - 2s 29us/sample - loss: 0.0892 - accuracy: 0.9744 - val_loss: 14.4179 - val_accuracy: 0.9705\n",
"Epoch 5/6\n",
"60000/60000 [==============================] - 2s 29us/sample - loss: 0.0718 - accuracy: 0.9792 - val_loss: 12.7250 - val_accuracy: 0.9751\n",
"Epoch 6/6\n",
"60000/60000 [==============================] - 2s 29us/sample - loss: 0.0587 - accuracy: 0.9832 - val_loss: 13.1930 - val_accuracy: 0.9725\n"
]
}
],
"source": [
"trained_mnist = model_mnist.fit(\n",
" x = x_train, y = y_train, \n",
" epochs=6, batch_size=128, \n",
" validation_data= (x_test, y_test),\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Helper function for plotting model accuracy and loss for training and validation"
]
},
{
"cell_type": "code",
"execution_count": 155,
"metadata": {},
"outputs": [],
"source": [
"def plot_accuracy_loss(model_history):\n",
" plt.figure(figsize=[12,4])\n",
" plt.subplot(1,2,1)\n",
" plt.semilogx(model_history.history['accuracy'], label = 'train_acc', linewidth=4)\n",
" plt.semilogx(model_history.history['val_accuracy'], label = 'val_acc', linewidth=4, alpha=.7)\n",
" plt.xlabel('Epoch')\n",
" plt.ylabel('Accuracy')\n",
" plt.legend()\n",
"\n",
" plt.subplot(1,2,2)\n",
" plt.loglog(model_history.history['loss'], label = 'train_loss', linewidth=4)\n",
" plt.loglog(model_history.history['val_loss'], label = 'val_loss', linewidth=4, alpha=.7)\n",
" plt.xlabel('Epoch')\n",
" plt.ylabel('Loss')\n",
" plt.legend()\n",
" plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": 156,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAtcAAAEKCAYAAADZxnkxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzdeZTcdZ3v/+e7q/c13dWdrRvSnYWQlUSaJMAojnEUQUCRcSIuAwq5Oags96dXRK/jOOPI3OO5M8wZTC4IMjAoIg53ZMzRO6JMBAIkgUAChKydpLP2vq/Vn98f3293V+9V3VW9vh7n1Kn67p8qkuKVT72/n4855xARERERkbFLmOgGiIiIiIhMFwrXIiIiIiIxonAtIiIiIhIjCtciIiIiIjGicC0iIiIiEiMK1yIiIiIiMZI40Q2Ipfz8fFdcXDzRzRARidqePXsqnXMFE92O8aTvbBGZqob7zp5W4bq4uJjdu3dPdDNERKJmZscnug3jTd/ZIjJVDfedrbIQEREZV2Z2nZk9VFdXN9FNERGJOYVrEREZV86555xzm3Nycia6KSIiMadwLSIiIiISI9Oq5nowHR0dlJeX09raOtFNmZJSU1MpKioiKSlpopsiIiIiMulN+3BdXl5OVlYWxcXFmNlEN2dKcc5RVVVFeXk5JSUlE90cERERkUlv2ofr1tZWBetRMjOCwSAVFRUT3RSRSa0z1MX+0/W8fKSSnUeqKMhK4X9/es1EN0tERCbAtA/XgIL1GOizExmoq8tx4GxDT5h+7Vg1DW2dPdtz05Po6nIkJOjvj4jITDMjwrWIyFg45zhS0cTOI5W8fKSKV45WUdPcMeT+Nc0dHDjbwPL52ePYShERmQwUruOstraWn/70p9xxxx1RHXfNNdfw05/+lFmzZsWpZSIynJPVzT090y8fqeJ8Q1tUx+85Xq1wLSIyA82YcF1876/jev6y+68ddH1tbS0/+tGPBoTrUChEIBAY8nzbt2+PaftEZHjn6lv9IO31TpfXtER1fF5GMpcvCnL5wiBXLApSkp8Rp5aKiMhkNmPC9US59957OXLkCGvWrCEpKYnMzEzmzZvH3r17eeedd/jEJz7ByZMnaW1t5a677mLz5s1A77TAjY2NfOxjH+NP/uRPePnllyksLOTf//3fSUtLG/R6Dz/8MA899BDt7e0sXryYJ554gvT0dM6dO8eWLVs4evQoAFu3buWKK67g8ccf54c//CFmxurVq3niiSfG7bMRmUjVTe28crSqp3f6SEVTVMdnpSSy3g/SVywOctHsLNVYi4iIwnW83X///ezfv5+9e/fywgsvcO2117J///6eoe0effRR8vLyaGlp4bLLLuNTn/oUwWCwzzkOHTrEz372Mx5++GE+/elP88tf/pLPfe5zg17vxhtv5Pbbbwfg29/+No888ghf/epXufPOO7nqqqt49tlnCYVCNDY28vbbb/P973+fl156ifz8fKqrq+P7YYhMoPrWDl47Ws3Oo16Zx7tn6qM6Pi0pwGUleVzh906vmJ9NYkDzcImISF9xDddmdjXwABAAfuycu7/f9lzgUWAR0Ap80Tm33992D3Ab4IB9wK3OuSk/E8y6dev6jBn9T//0Tzz77LMAnDx5kkOHDg0I1yUlJaxZ4w3rdemll1JWVjbk+ffv38+3v/1tamtraWxs5KMf/SgAv//973n88ccBCAQC5OTk8Pjjj3PTTTeRn58PQF5eXszep8hEa2kPsft4NS/7NdP7ymvpcpEfnxxI4H0LZnH5wnyuWBzkkqJZJCcqTIuIyPDiFq7NLAA8CPwZUA7sMrNfOefeCdvtPmCvc+6TZnaxv/9GMysE7gSWO+dazOxpYBPw2GjbM1RN9HjLyOitw3zhhRf43e9+x86dO0lPT+eDH/zgoDNJpqSk9LwOBAK0tAxdC3rLLbfwf//v/+WSSy7hscce44UXXhhyX+echtqTaaOtM8TeE7W8fKSKnUeqeONkDR2hyNN0IMFYXZTjlXksyufSBbmkJg19X4SMnpldB1y3ePHiiW6KiEjMxbPneh1w2Dl3FMDMngJuAMLD9XLgBwDOuQNmVmxmc8LalmZmHUA6cDqObY2brKwsGhoaBt1WV1dHbm4u6enpHDhwgFdeeWXM12toaGDevHl0dHTw5JNPUlhYCMDGjRvZunUrd999N6FQiKamJjZu3MgnP/lJ7rnnHoLBINXV1eq9limjM9TFvlN1PUPj7SqrprWjK+LjzWD5vOyeMF1anEtWalIcWyzdnHPPAc+VXrLyds69M+L+AwSSISkVAinec2IqJCR6/1FFRCZYPMN1IXAybLkcWN9vnzeBG4EXzWwdsAAocs7tMbMfAieAFuD/Oef+32AXMbPNwGaACy+8MLbvIAaCwSBXXnklK1euJC0tjTlz5vRsu/rqq9m2bRurV69m6dKlbNiwYczX+5u/+RvWr1/PggULWLVqVU+wf+CBB9i8eTOPPPIIgUCArVu3cvnll/Otb32Lq666ikAgwNq1a3nsscfG3AaReGjrDLH/VB27ymrYdayaV49V0xg2cUsklszO9GqmFwVZXxIkNyM5Tq2ViDSchuf/OjbnsgQvZCemQmKK95zUbzni7WHrAro1SUSiY85FUYQYzYnN/hz4qHPuNn/588A659xXw/bJxqvJXotXV30xXp31CeCXwF8AtcAvgGecc/863DVLS0vd7t27+6x79913WbZsWaze1oykz1AmQm1zO3uO17D7eA27y6p5s7yO9s7Ie6YBLsxL7wnTly8KMjsrNU6tHTsz2+OcK53odoyn0oV5bvff/tlEN2N4CYnDh/Pw3vMBQb1/iA9bl6CSI5GpbLjv7Hj+k7wcuCBsuYh+pR3OuXrgVgDzin+P+Y+PAseccxX+tn8DrgCGDdciMjU55yivaWFXWTW7ymrYc7yag+caoz7P3OzUPmG6KDc9Dq2VGaWrE9o7oT26oRpHFEgaIpinhQX0FEjqt5yYBonJvfslpfllMmnePiqNEZlw8QzXu4AlZlYCnMK7IfHm8B3MbBbQ7Jxrx+ux3uGcqzezE8AGM0vHKwvZCPTtkp7hvvzlL/PSSy/1WXfXXXdx6623TlCLRCLXGeri3TMN7D5eze6yGnaVVUc9AyL0TtzSPTxeSX6GbtKdShJTYXaUv4o5B6EO6GyBzjbobIWOVnCh+LQxXkId3qM9+n9EDiuQPEIwD+tZj7TnPTFFoV0kCnEL1865TjP7CvBbvKH4HnXOvW1mW/zt24BlwONmFsK70fFL/rZXzewZ4HWgE3gDeChebZ2KHnzwwYlugkjEmto6eeNELbvKqtlzvIbXT9TQ3B59GJqfk0ppcR6lxblcVpzH0jmauGVKy54PH/5ubM4V6vQDd3vf4N0dvjtb+64LX+5ohVBb2H5h21x0pUgTLtTuPaL/t+owzO8tH0Xd+nA974EkhXaZluJ6p4Zzbjuwvd+6bWGvdwJLhjj2r4C/imf7RCQ+ztW39vRI7z5ezbtnGghFM8g03v9zL56bTemCXEqLcyktzqNw1uAzk4oQSIRAFqSMvGvEenrJ+wfzfsE91AYd3YF+sIAfvt1fJj73O8WH89veBtTF8Lw2MJwHkiAhKew5MWw5sd/2xH77DbVv4iDnDFungC8xptugRWRMurochysavV7pshp2Ha/mZPXQY7EPJTUpgTUXzOKy4jwuXZDL+xbkkq2h8WQiWXePbYxHlXHO610eKngPFsyH6lkPD/idMe2uHgfOe28d0X9fxFRC4jBhPLH3OeKwP8i+/fcbLvwnaLKqqU7hWkSi0toRYt+pOq9XuqyGPcdrqGvpiPo8+ZnJXLrAK+8oLc5j+bxszYAoM4OZ31Mby252vNA+XOnLSKUxfdaFBfxQ9H+/p5SuTu/ROUkmgbaEgeE7Jdt/ZEFqjv+cDSk5/nO296ybWicFhWsRGVZNU7s3HJ5/8+G+8jraQ9HXoS4syOCyBXlc6tdLFwfTdfOhSCyZX2aRFOMhJ7u6Bu8xHza8D9EDH358V3Tj1M8Yrqu3dr5bU2VkxyYk+uE7u2/o7nnuDuN+SFcYjwuF60kmMzOTxsYY3z0uEiHnHCeqm9lV5o0tvft4DYfPR//nMSlgrCzM8XqlF+Ry6YJcgpkx7qUTkfGRkADJ6d4jlkKdveUsna1e+O7q9HrKuzr87e29r7s6wraH79d/ebh9w87ZFZp+Ab+rE5qrvEckesJ4Vm8o7+4V71kOC+hJadM3jDsXs/c2c8L1T/8ivue/+efxPb9IHHSEunjndH3PRC27ymqobIy+bjMrNdG/8dAL05dcMIvUpBhPktFcDRXvQeVBqD3ujTaQUwg5Rd4juzD2P7OLSPwEEr1HcsbEtaH7ptWeMN4ZFtg7+i13Dr1vn6DffVznIOcY6pxh+47nza6jCeND9opn9+s1z4Kk9MgCq3P+Z9Ee9rm09362Pf/IClvu+Tz7H9Pe7x9mHcOfq/v1B74GhZeO7fP0zZxwPUG+8Y1vsGDBAu644w4Avvvd72Jm7Nixg5qaGjo6Ovjbv/1bbrjhhhHP1djYyA033DDocY8//jg//OEPMTNWr17NE088wblz59iyZQtHjx4FYOvWrVxxxRXxe7My6TW2dfL68d5e6TdO1NLSEf2QeEW5aT1h+rLiPJbMzoztkHihTi9AVx70HhUHoXmQn0VPhQ9/b5CRDzkX+IG70HudXRj7n8lFZHrovmmVGN+0OlrO9faoh9p7n9saoLUe2ur85/pBnuvi3xPf1Qkt1d4jEuFhPCFx+AA80UKx++wUruNs06ZN3H333T3h+umnn+Y3v/kN99xzD9nZ2VRWVrJhwwauv/76EetPU1NTefbZZwcc98477/D973+fl156ifz8fKqrvT/0d955J1dddRXPPvssoVBI5SYzUGeoi7dO1fHioUpePFTJ6ydq6IxySLwEg2XzsntG8SgtzmVeToyHxGtr8IP0Ia93uupw33rDiDhoqvAep1/vuykjH7KLBobuWP/MLSIyFma9PfrhnQJZc0c+1jmvvKZP6O4O4w1e+G5r6A3ibfXxD7XRhvGJFPX/c4amcB1na9eu5fz585w+fZqKigpyc3OZN28e99xzDzt27CAhIYFTp05x7tw55s4d/i+Pc4777rtvwHG///3vuemmm8jPzwcgLy8PgN///vc8/vjjAAQCAXJycuL7ZmVSOFHVzI5DFbx4qJKXj1RS3xrdv8bTkgKsvXCW3yudy5oLZpEVyyHxnIP6U36JxyGofA/qT8fu/INpqvQeZ/b2XZ8e9EJ2d2lJ92Mif6YWERkNM68mOikNsuaMvH/36DLhYbu1vl8I7xfUJ0MPc7x0xe69zZxwPYE10TfddBPPPPMMZ8+eZdOmTTz55JNUVFSwZ88ekpKSKC4uprV15CGAhjrOOadRF2awuuYOXj5SyR8Pe73TJ6qbozq+ICuFy4pzuXSBF6aXzcsmKRDDIfE6Wr2e6Mr3vPKOyoPQEV0bAe8nxbyFULAUgku8G6HqyqHuFNSdhMbzRF2r2F1rePatvuvTcnvruHMu6K3tTsmKvt0iIpNR+OgymbMjO6ajtW/Y7u4RH9A7Xue9jiaM94z/ndw7Nnggue9Y4d3bEpL67jfsPt3nTO53/n7LCbG7T2jmhOsJtGnTJm6//XYqKyv5r//6L55++mlmz55NUlISf/jDHzh+/HhE56mrqxv0uI0bN/LJT36Se+65h2AwSHV1NXl5eWzcuJGtW7dy9913EwqFaGpqIjs7O55vVcZBR6iLN07U8sdDFfzxUCVvldcSTaXHwvwM1i/Mo3SBN434hXkxHBLPOa+HuPK93psPa44zqht0UmdBwUWQv9QL1LnF3hfgUDrbvR7x+lN+6D7pBe+Gs9Ffv6XGe5zd169NOf1Ct19mkqpfhURkBhhVGPd7wbs6hwi2ydNupkyF63GwYsUKGhoaKCwsZN68eXz2s5/luuuuo7S0lDVr1nDxxRdHdJ6hjluxYgXf+ta3uOqqqwgEAqxdu5bHHnuMBx54gM2bN/PII48QCATYunUrl19+eTzfqsSBc44jFU286IfpV45W0dQe+U2IuelJXLk4n/cvyedPlhTEdgrxUAfUlPlB2i/zaKkZxYkMchdA/kVekM5f6tVJR/Nlm5gMeSXeo38b6097gbve7+WuK/dCt4tyvO5Wvzfm3Nt916dkhY1a4j/nlai8RERmtp4wXjDRLRlX5tw4DvkSZ6WlpW737t191r377rssW7Zsglo0PegzHH9VjW28dKSKF/3a6dN1kc8clhxI4NIFubz/onzev7iAFfOzYzeSR0ttb510xXtQfXR0d6cnpftB2u+ZDi4e/xE9Qp3QcMbv5S6H+vLe0B2LO+4/8D+gKPJhncxsj3OudOwXnjoG+84WEZkKhvvOVs+1yCTQ2hFiz/Ea/niokhcPV7D/VH1Uxy+dk8WfLPF6p9eV5JGeHIO/2l1dXi9v5cHeEo/Gc6M7V9Y8v0fa75nOLpz4nwADiTDrAu8RLtQJjWd7a7m7y0zqT0cXunMKY9veSc7MFgLfAnKcczdNdHtERCaKwvUktG/fPj7/+c/3WZeSksKrr746QS2SWHPOceBsAy8e8m5EfO1YFa0dkZco5GemeGUei/P5kyX5zMmOQa9ve5N342HFwd4Sj87Ie8x7BJK8nuj8pV7PdHCJN8bpVBFI7C3xYH3v+q6Q94+L7p7unjKT8oGhO5AEGRHWJE5iZvYo8HHgvHNuZdj6q4EHgADwY+fc/c65o8CXzOyZiWmtiMjkMCPC9VQbTWPVqlXs3bt35B3HwXQqG5po5+tbefFwpd87XUlFQ+QzIaYkJrB+YZD3+2H64rlZY/sz7ZwXFLt7pCsPQu1JRnXjYXowrFb6Ipi1wAuo001CALLne48L1vWu7+qCpvN9b6J0Xd6U0VPfY8A/A493rzCzAPAg8GdAObDLzH7lnHtnQlooIjLJxPX/gIP1bvTbngs8CiwCWoEvOuf2m9lSIHzsvIXAd5xz/xhtG1JTU6mqqiIYDE6pgD0ZOOeoqqoiNVWz241GS3uIV49VeWH6UCXvnWuI6vgV87N5/5IC3r8kn0sX5I5uOvGQP4B/4/neCVZq/JkP26IrPQHAAt6oHd210vkXQUYw+vNMJwkJ3gQPWXOhaHqVTDvndphZcb/V64DDfk81ZvYUcAMQUbg2s83AZoALL7wwZm0VEZks4hauI+zduA/Y65z7pJld7O+/0Tn3HrAm7DyngGdH046ioiLKy8upqKgYw7uZuVJTUykqKproZkwJXV2Ot0/X88fDFfzxYCV7jtfQHoq81GNeTmrPiB5XLgoSzEyJ4KIhaK72ek6bKqDRD9BN573XzVWMqje6W3Jmb490/kUQXASJEbRLprNC4GTYcjmw3syCwPeBtWb2TefcDwY72Dn3EPAQeDc0xruxIiLjLZ4915H0biwHfgDgnDtgZsVmNsc5F37X1EbgiHMussGg+0lKSqKkpGTkHUVG4VRtS88QeS8drqSmOfIB8zOSA2xYGOwJ1IsKMgb+utLVNbDnuef1eS9YRzuc3HByinprpfMv8m5E1C8+0tdgfyCcc64K2DLejRERmWziGa4H7d3ot8+bwI3Ai2a2DlgAFAHh4XoT8LM4tlMkYg2tHbxytNoL1IcrOVrRFPGxCQari2bx/iX5vH9JAWsumEVyAt640E3lUHbeD86Vfs9zd3iOfEzrqCSmeDcbFiyF/CVemNa4zDKyciB8iJUiIM7z14uITB3xDNeD9m70W74feMDM9gL7gDeAntvuzSwZuB745pAXUf2exFFnqIu3TtXxx4PeEHlvnKilM4rpEC/ITeUjC1O4aj68L9hBZuc5aNwHRytgn1+2EYsxlYeTOsubkCVzNmQUeM95i2DWhTGd7lVmjF3AEjMrwSvZ2wTcHM0JzOw64LrFixfHoXkiIhMrnuF6xN4N51w9cCuAeb+HH/Mf3T4GvN6vTKQP1e9JrB2vamLHoUpePFTBy0eqaGgdLvw6cmgi3+rIp54LUhoozQ+xIqeN4tRmskK10NEJx/Ee8ZCS7QfnfMic4wXojHxvKLiMAm/mQpFRMLOfAR8E8s2sHPgr59wjZvYV4Ld4N6s/6px7e5jTDOCcew54rrS09PZYt1lEZKLFM1yP2LthZrOAZudcO3AbsMMP3N0+g0pCJM7qmjt4+UilF6gPV3CyuiVsqyObJvKtnnzqCFq9F6T9MJ2fUE8wzQhmpJCXkUxWaiIJ3TXKkZdfDy8lywvKmQV+cJ7dtydaNxhKnDjnPjPE+u3A9nFujojIlBC3cO2c6xysd8PMtvjbtwHLgMfNLIR3o+OXuo83s3S8kUb+W7zaKDNTe2cXb5yo4cXDlew4WEHZqTPkUUeQOlZaHVcF/ADth+kk+vZcZyQnkpeRTF5GMrkZeSSOdWrx5MzenueM2X1fZxSM/7TgIiIiMmpxHed6sN4NP1R3v94JLBni2GZghg+gK2PmHK6tnhMnyth/8Ahlx8uoPFdOdqiW2VbHFqsjKXH4muekQEJPmM7LSCYt2vGmkzN6a50zBul9TkobwxsUmXpUcy0i09k0nEZNZqS2Bqg/Aw2nof40TZUnOX/qGPVVZ2hobKS1I0QKsNR/MMzkeQlmzEpP6gnTWSmJw09AlJQ+sLe5J0jnawQOkX5Ucy0i05nCtUwdoU5viLr6M1B/CupP+2H6DO1NtdQ0t1PT3EFNcztNbdGNwJGZElbqkZ5MILzUIzHVD8vhtc5hrxWeRURExKdwLZNPW4MXnOtP+UHaf914vmfM5/bOLmqa26n1w3RjlGE6JbG31CM3O5vUWXP7lW0U+DcQ+uFZE6mIiIhIBBSuZWKEOqHxHDScgbpy77neK+mgvXHA7u2hLmqb26lpij5Mt5NEjc0iNXcuc+YWUVxcTGHhAqy7fCM5U+FZZByp5lpEpjOFa4kf56Ctvjc015/2Q3R3L/TQ03Z3hLq8Eo+m9ojCdIgA590szrggZ10u58kje/YClixazPqLF/Ch4jxSo70RUUTiQjXXIjKdKVzL2IU6vF7o8BBdf8oL0u2RTQ/eEeqitrmD6uZ2apvbaWztHDCdJ0AdGZxzeZxxeZzteeRSbTmsKMxlw8IgH1+YR2lxHtmpSbF9nyIiIiIjULiWyDgHrXVhPdCne28sbDzPwJnth9cdpr2bEPuG6U4SOefyOev3Qp+lN0S34I35bAYr5mezoSTI5YuClBbnkZOmMC0iIiITS+Fa+upsh8az/Ubk8OuhO5pHfdrwMF3b3E5Daye1ZHLG5ffpgT7rglSRhes3Vp4ZLJ+fzYaFQTYsDLKuRGFaREREJh+F65nIOWip6XsTYXdvdGMF0fZCD6Yj1EVdSweVLY5DLZm805jJ6a48ztEdovNoZfhpu5fNy+byhUE2LMxjXUkes9KTx9wuEZl4uqFRRKYzhevprLO9N0A3dIdov0e6szWml+pIyeVUaBYHmjLZVZ3Gq1WpnOnKpYpsILKROC6em8WGhV6Zx7riPHIzFKZFpiPd0Cgi05nC9VTX3Qvd/0bC+lPQVEUseqF7BJIhez5kz6c1bQ7vNmXySmUKz59K5I3TLYS6ortWd5j2eqaD5ClMi4iIyBSncD1VdLb1rX8OL+XobIvttdLzIXueH6QLIWseTalz2H3eeOVYNTv3VrHvVJ0fptv9x8gumpPp9Uz7NdPBzOHLQkRERESmGoXrycQ5aK7uN7W3X8rRXBnbayWmQNb8np5osudD1jzvkZRKc3snu8tqeOVoFa8creKt8nI6o+yZXjI7s+cGxPUL88hXmBYREZFpTuF6InS0hg1lFx6iT0Mosl7gyBhkBHt6n8ku7A3Sabl9ZiVsaQ+x53gNO3eV8crRat48WRt1mF5UkMHli/wwXRKkIEthWkRERGYWhet4cQ6aKsOC8ykvTDecgeaq2F4rMTUsOM/r7ZHOmgeJg9cxt3Z4YfqVo1XsPFLFm+W1dISiC9MLCzJ6yjzWL8xjdlZqLN6NiExzGi1ERKYzheux6mgZOLV3/RkvVIc6Ynghg8yCsFKOQj9IzxvQCz2Y1o4Qr5+o4ZUjVbxytJq9J2tpDw09/fhgSvIzem5A3LAwyJxshWkRiZ5GCxGR6Syu4drMrgYeAALAj51z9/fbngs8CiwCWoEvOuf2+9tmAT8GVuINefFF59zOeLZ3SF1dXs1zd3DuGZHjtDdSRywlpfetge4O0Zlzh+yFHkxrR4g3TtR6PdNHq9h7IvowXRxM7xkab31JkLk5CtMiIiIiw4lbuDazAPAg8GdAObDLzH7lnHsnbLf7gL3OuU+a2cX+/hv9bQ8Av3HO3WRmyUB6vNrao705rPf5dN/RObo6Y3ghg8zZvcE5e35vj3Rqzoi90INp6+wN068creL1E7W0d0YXphcE09lQEmTDIq9nel5OWtTtEBEREZnJ4tlzvQ447Jw7CmBmTwE3AOHhejnwAwDn3AEzKzazOUAL8AHgFn9bZOO9NVfBnn+JrpWdbb03F7bWRnfsSJIzBt5ImD0fMudAYGxTd7d1hnjzZB07j3SH6RraogzTF+Sl+TMgBlm/MEjhLIVpERERkbGIZ7guBE6GLZcD6/vt8yZwI/Cima0DFgBFQAioAH5iZpcAe4C7nHNN/S9iZpuBzQCrCjPgve2xfh/DswQvLHeXceQU+r3Q8yAle1S90INp7+zizfJaXjnilXnsOR59mC7KTetzA2JRbvx/DBARERGZSeIZrgdLlf2Ho7gfeMDM9gL7gDeATiAJeB/wVefcq2b2AHAv8D8HnNC5h4CHAEoX5sVwOsJ+kjP73kjYPbxd5hwIxP5jbO/sYt+pWr9nuprdx6tp7YguTBfOSutzA+IFeQrTIiIiIvEUz3BdDlwQtlwEnA7fwTlXD9wKYGYGHPMf6UC5c+5Vf9dn8MJ1fFkAsuYMnFwlez6kZMX10h2hLt4qr+upmd5dVkNLRyiqc8zLSfXKPBZ5vdNFuWlYjHrORURiRUPxich0Fs9wvQtYYmYlwClgE3Bz+A7+iCDNfk31bcAOP3DXm9lJM1vqnHsP7ybHdxhJehDWfj66ViYEIOhxK/MAACAASURBVGO21xudMTsuvdCD6Qh1se9Ud5iuZndZNc3t0YXpudmp/qQteVy+MJ8L8hSmRWTy01B8IjKdxS1JOuc6zewrwG/xhuJ71Dn3tplt8bdvA5YBj5tZCC88fynsFF8FnvRHCjmK38M9rNQcWPbx2L6RGOkMdbH/dH3PpC27y6ppijJMz85K4XK/V3rDwiALgukK0yIiIiKTSFy7aZ1z24Ht/dZtC3u9E1gyxLF7gdJ4ti+eOkNdvO2H6VeOVrGrrIbGtuiG8yvISukJ0pcvClKsMC0iIiIyqWmGxhgJdTneOV3PzqOVvHK0ml3HqmmIMkznZ6b0lHlsWBhkYX6GwrSIiIjIFKJwPUqhLse7Z3rLPF4bVZhOZn13z/TCIIsKFKZFREREpjKF6wh1dTnePVvfMzTea8eqqG+NLkwHM5L7DI23eHamwrSIiIjINKJwPYSuLseBsw1ez/RRr2e6rqUjqnPkpif11EtvWBhkicK0iIiIyLSmcO3r6nK8d66h5wbEV49VU9scXZielZ7EhhJ/aLxF+SyZnUlCgsK0iIiIyEwxrcJ1XUsH//HW6ZF3DFPR0MarR6t59VgVNVGG6Zy0JNaX5PX0TC+dk6UwLSIiIjKDTatwfaK6ma/89I24nT87NbHPDYgXz1WYFhGJlmZoFJHpbFqF61jLSk1kfUnvDYjL5mUTUJgWERkTzdAoItOZwnWYrJRE1oWVeShMi4iIiEg0plW4zklL4tpV86I6JjFgrJifzYaFQVbMz1GYFhEREZFRm1bh+sK8dB787PsmuhkiIiIiMkMlTHQDRERERESmC4VrEREREZEYUbgWEREREYkRhWsRERERkRiJa7g2s6vN7D0zO2xm9w6yPdfMnjWzt8zsNTNbGbatzMz2mdleM9sdz3aKiIiIiMTCiOHazL5iZrnRntjMAsCDwMeA5cBnzGx5v93uA/Y651YDXwAe6Lf9T51za5xzpdFeX0RERERkvEXScz0X2GVmT/s90ZEOBL0OOOycO+qcaweeAm7ot89y4HkA59wBoNjM5kR4fhERERGRSWXEcO2c+zawBHgEuAU4ZGZ/Z2aLRji0EDgZtlzurwv3JnAjgJmtAxYARd2XBv6fme0xs81DXcTMNpvZbjPbXVFRMdLbERERERGJm4gmkXHOOTM7C5wFOoFc4Bkz+0/n3P8Y4rDBerhdv+X7gQfMbC+wD3jDPz/Alc6502Y2G/hPMzvgnNsxSNseAh4CKC0t7X9+ERGZZMzsOuC6xYsXT3RTRKaljo4OysvLaW1tneimTHmpqakUFRWRlJQU8TEjhmszuxP4S6AS+DHwdedch5klAIeAocJ1OXBB2HIRcDp8B+dcPXCrfx0DjvkPnHOn/efzZvYsXpnJgHAtIiJTi3PuOeC50tLS2ye6LSLTUXl5OVlZWRQXFxN5Na/055yjqqqK8vJySkpKIj4ukprrfOBG59xHnXO/cM51+BfsAj4+zHG7gCVmVmJmycAm4FfhO5jZLH8bwG3ADudcvZllmFmWv08G8BFgf8TvSkRERGSGam1tJRgMKliPkZkRDAaj/gUgkrKQ7UB12IWygOXOuVedc+8OdZBzrtPMvgL8FggAjzrn3jazLf72bcAy4HEzCwHvAF/yD58DPOv/oUgEfuqc+01U70xERERkhlKwjo3RfI6RhOutwPvClpsGWTco59x2vHAevm5b2OudeDdL9j/uKHBJBG0TEREREZk0IikLMedcz42CfjlIRDdCioiIiMjMU1tby49+9KOoj7vmmmuora2N+rhbbrmFZ555Jurj4iGSkHzUv6lxq798B3A0fk0SERERkbEqvvfXcT1/2f3XDrmtO1zfcccdfdaHQiECgcCQx23fvn3IbVNFJD3XW4ArgFN4I4CsB4Ycd1pEREREZrZ7772XI0eOsGbNGi677DL+9E//lJtvvplVq1YB8IlPfIJLL72UFStW8NBDD/UcV1xcTGVlJWVlZSxbtozbb7+dFStW8JGPfISWlpaIrv3888+zdu1aVq1axRe/+EXa2tp62rR8+XJWr17N1772NQB+8YtfsHLlSi655BI+8IEPxOS9j9hz7Zw7jzfSh4iIiIjIiO6//37279/P3r17eeGFF7j22mvZv39/z5B2jz76KHl5ebS0tHDZZZfxqU99imAw2Occhw4d4mc/+xkPP/wwn/70p/nlL3/J5z73uWGv29rayi233MLzzz/PRRddxBe+8AW2bt3KF77wBZ599lkOHDiAmfWUnnzve9/jt7/9LYWFhaMqRxnMiD3XZpZqZl82sx+Z2aPdj5hcXUREYsbMFplZiv/6g2Z2p5nNmuh2iYisW7euz1jR//RP/8Qll1zChg0bOHnyJIcOHRpwTElJCWvWrAHg0ksvpaysbMTrvPfee5SUlHDRRRcB8Jd/+Zfs2LGD7OxsUlNTue222/i3f/s30tPTAbjyyiu55ZZbePjhhwmFQjF4p5HVXD8BHAA+CnwP+Cww5BB8IiIyYX4JlJrZYuARvLkFfgpcM6GtEpEJMVxN9HjLyMjoef3CCy/wu9/9jp07d5Kens4HP/jBQceSTklJ6XkdCAQiKgsJG4Ojj8TERF577TWef/55nnrqKf75n/+Z3//+92zbto1XX32VX//616xZs4a9e/cO6EGPViQ114udc/8TaHLO/QtwLbBqTFcVEZF46HLOdQKfBP7ROXcPMG+C2yQiM1BWVhYNDQ2DbqurqyM3N5f09HQOHDjAK6+8ErPrXnzxxZSVlXH48GEAnnjiCa666ioaGxupq6vjmmuu4R//8R/Zu3cvAEeOHGH9+vV873vfIz8/n5MnT465DZH0XHf4z7VmthI4CxSP+coiIhJrHWb2GeAvgev8dUkT2B4RmaGCwSBXXnklK1euJC0tjTlz5vRsu/rqq9m2bRurV69m6dKlbNiwIWbXTU1N5Sc/+Ql//ud/TmdnJ5dddhlbtmyhurqaG264gdbWVpxz/MM//AMAX//61zl06BDOOTZu3Mgll4x9mhUbqvu8Zwez2/B+alwFPAZkAv/TOfd/xnz1GCstLXW7d++e6GaIiETNzPY450rHeI7leCM87XTO/czMSoC/cM7dH5NGxpi+s0Xi491332XZsmUT3YxpY7DPc7jv7GF7rs0sAah3ztUAO4CFsWqoiIjElnPuHeBOADPLBbIma7AWEZmuhq259mdj/Mo4tUVERMbAzF4ws2wzywPeBH5iZv97otslIhIrX/7yl1mzZk2fx09+8pOJblYfkdRc/6eZfQ34OdDUvdI5Vx23VomIyGjkOOfq/XK+nzjn/srM3proRomIxMqDDz440U0YUSTh+ov+85fD1jlUIiIiMtkkmtk84NPAtya6MSIiM1EkMzSWjLSPiIhMCt8Dfgu85JzbZWYLgYEzM4iISNyMGK7N7AuDrXfOPR775oiIyGg5534B/CJs+SjwqfG4tpllAD8C2oEXnHNPjsd1RUQmm0gmkbks7PF+4LvA9ZGc3MyuNrP3zOywmd07yPZcM3vWzN4ys9f8cbTDtwfM7A0z+49IriciMpOZWZH/nXrezM6Z2S/NrGgM53vUP9f+fusH+26/EXjGOXc7Ef4/QkRkOhoxXDvnvhr2uB1YCySPdJyZBYAHgY8By4HP+GOwhrsP2OucWw18AXig3/a70FTrIiKR+gnelOfzgULgOX/daD0GXB2+Ypjv9iKge2qz0BiuKSIzUGZm5pDbysrKWLly5ZDbJ5tIbmjsrxlYEsF+64DD/s+SmNlTwA3AO2H7LAd+AOCcO2BmxWY2xzl3zu9tuRb4PvDfR9FOEZGZpsA5Fx6mHzOzu0d7MufcDjMr7rd6qO/2cryAvZfIfhUVkXj76V/E9/w3/zy+55+iRvwCNLPnzOxX/uM/gPeAf4/g3IX09mKA98Vb2G+fN/F+SsTM1gEL8L6cAf4R+B9AVwTXEhERqDSzz/kldQEz+xxQFeNrDPXd/m/Ap8xsK16P+aDMbLOZ7Taz3RUVFTFumohMFt/4xjf40Y9+1LP83e9+l7/+679m48aNvO9972PVqlX8+79HEif7am1t5dZbb2XVqlWsXbuWP/zhDwC8/fbbrFu3jjVr1rB69WoOHTpEU1MT1157LZdccgkrV67k5z8fn38MRNJz/cOw153AcedceQTH2SDr+s+1fj/wgJntBfYBbwCdZvZx4Lxzbo+ZfXDYi5htBjYDXHjhhRE0S0Rk2voi8M/AP+B9374M3Brjawz63e6ca4rkWs65h4CHwJv+PMZtE5FJYtOmTdx9993ccccdADz99NP85je/4Z577iE7O5vKyko2bNjA9ddfj9lgXyuD6x7net++fRw4cICPfOQjHDx4kG3btnHXXXfx2c9+lvb2dkKhENu3b2f+/Pn8+te/BqCuri72b3QQkfx0dwJ41Tn3X865l4CqQX4mHEw5cEHYchFwOnwH51y9c+5W59wavJrrAuAYcCVwvZmVAU8BHzKzfx3sIs65h5xzpc650oKCggiaJSIyPTnnTjjnrnfOFTjnZjvnPoH/62AMjfjdLiKydu1azp8/z+nTp3nzzTfJzc1l3rx53HfffaxevZoPf/jDnDp1inPnzkV13hdffJHPf/7zAFx88cUsWLCAgwcPcvnll/N3f/d3/P3f/z3Hjx8nLS2NVatW8bvf/Y5vfOMb/PGPfyQnJyceb3WASHqufwFcEbYc8tddNsJxu4AlZlYCnAI2ATeH72Bms4Bm51w7cBuwwzlXD3zTf+D3XH/NOfe5CNoqIiJ9/Xe8MrtYGfG7fSRmdh1w3eLFi2PYLBEZYIJrom+66SaeeeYZzp49y6ZNm3jyySepqKhgz549JCUlUVxcTGtra1TndG7wH7xuvvlm1q9fz69//Ws++tGP8uMf/5gPfehD7Nmzh+3bt/PNb36Tj3zkI3znO9+JxVsbViQ914l++AXAfz3iaCHOuU7gK3gTGrwLPO2ce9vMtpjZFn+3ZcDbZnYA787zu6J9AyIiMqzIf2/tf6DZz4CdwFIzKzezLw313R7NeZ1zzznnNo9XL5KITIxNmzbx1FNP8cwzz3DTTTdRV1fH7NmzSUpK4g9/+APHjx+P+pwf+MAHePJJbxj9gwcPcuLECZYuXcrRo0dZuHAhd955J9dffz1vvfUWp0+fJj09nc997nN87Wtf4/XXX4/1WxxUJD3XFWZ2vXPuVwBmdgNQGcnJnXPbge391m0Le72TEUYecc69ALwQyfVERGSAUdc1O+c+M8T6Ad/tIiL9rVixgoaGBgoLC5k3bx6f/exnue666ygtLWXNmjVcfPHFUZ/zjjvuYMuWLaxatYrExEQee+wxUlJS+PnPf86//uu/kpSUxNy5c/nOd77Drl27+PrXv05CQgJJSUls3bo1Du9yIBuqe71nB7NFwJN446aCV2/3Befc4Ti3LWqlpaVu9+7dE90MEZGomdke51zpKI9tYPAQbUCac240w67Gnb6zReLj3XffZdmyZRPdjGljsM9zuO/sEb9wnXNHgA1mlokXxhti0lIREYkJ51zWRLchGqq5FpHpLJJxrv/OzGY55xqdcw3+lOV/Ox6NExGR6Uc11yIymH379rFmzZo+j/Xr1090s6IWyU+FH3PO3de94JyrMbNrgG/Hr1kiIiIiMpOsWrWKvXv3TnQzxiyS0UICZpbSvWBmaUDKMPuLiIiIyAQa6Z46icxoPsdIeq7/FXjezH7iL98K/EvUVxIRERGRuEtNTaWqqopgMBjV7IfSl3OOqqoqUlNTozoukhsa/5eZvQV8GO/O898AC0bVShERmfF0Q6NIfBUVFVFeXk5FRcVEN2XKS01NpaioKKpjIh2e6SzQBXwab3ryX0bXNBEREY9z7jngudLS0tsnui0i01FSUhIlJSUT3YwZa8hwbWYX4U1r+xmgCvg53lB8fzpObRMRERERmVKG67k+APwRuK57whgzu2dcWiUiIiIiMgUNN1rIp/DKQf5gZg+b2Ua8mmsRERERERnEkOHaOfesc+4vgIuBF4B7gDlmttXMPjJO7RMRkWnGzK4zs4fq6uomuikiIjE34jjXzrkm59yTzrmPA0XAXuDeuLdMRESmJc3QKCLTWSSTyPRwzlU75/6Pc+5D8WqQiIiIiMhUFVW4FhERERGRoSlci4iIiIjESFzDtZldbWbvmdlhMxtQp21muWb2rJm9ZWavmdlKf32qv/ymmb1tZn8dz3aKiIiIiMRC3MK1mQWAB4GPAcuBz5jZ8n673Qfsdc6tBr4APOCvbwM+5Jy7BFgDXG1mG+LVVhERGT8aLUREprN49lyvAw47544659qBp4Ab+u2zHHgewDl3ACg2sznO0+jvk+Q/XBzbKiIi40SjhYjIdBbPcF0InAxbLvfXhXsTuBHAzNYBC/CG+8PMAma2FzgP/Kdz7tXBLmJmm81st5ntrqioiPFbEBERERGJXDzD9WCzOfbvfb4fyPVD9FeBN4BOAOdcyDm3Bi9sr+uuxx5wQucecs6VOudKCwoKYtd6EREREZEoJcbx3OXABWHLRcDp8B2cc/XArQBmZsAx/xG+T62ZvQBcDeyPY3tFRERERMYknj3Xu4AlZlZiZsnAJuBX4TuY2Sx/G8BtwA7nXL2ZFZjZLH+fNODDwIE4tlVEREREZMzi1nPtnOs0s68AvwUCwKPOubfNbIu/fRuwDHjczELAO8CX/MPnAf/ijziSADztnPuPeLVVRERERCQW4lkWgnNuO7C937ptYa93AksGOe4tYG082yYiIhPDzK4Drlu8ePFEN0VEJOY0Q6OIiIwrDcUnItOZwrWIiIiISIwoXIuIiIiIxIjCtYiIiIhIjChci4iIiIjEiMK1iIiIiEiMKFyLiIiIiMSIwrWIiIiISIwoXIuIyLgys+vM7KG6urqJboqISMwpXIuIyLjSJDIiMp0pXIuIiIiIxIjCtYiIiIhIjChci4iIiIjEiMK1iIiIiEiMKFyLiIiIiMRIXMO1mV1tZu+Z2WEzu3eQ7blm9qyZvWVmr5nZSn/9BWb2BzN718zeNrO74tlOEREREZFYiFu4NrMA8CDwMWA58BkzW95vt/uAvc651cAXgAf89Z3A/+ecWwZsAL48yLEiIiIiIpNKPHuu1wGHnXNHnXPtwFPADf32WQ48D+CcOwAUm9kc59wZ59zr/voG4F2gMI5tFREREREZs3iG60LgZNhyOQMD8pvAjQBmtg5YABSF72BmxcBa4NXBLmJmm81st5ntrqioiEnDRURERERGI57h2gZZ5/ot3w/kmtle4KvAG3glId4JzDKBXwJ3O+fqB7uIc+4h51ypc660oKAgNi0XERERERmFxDieuxy4IGy5CDgdvoMfmG8FMDMDjvkPzCwJL1g/6Zz7tzi2U0REREQkJuLZc70LWGJmJWaWDGwCfhW+g5nN8rcB3AbscM7V+0H7EeBd59z/jmMbRURERERiJm7h2jnXCXwF+C3eDYlPO+feNrMtZrbF320Z8LaZHcAbVaR7yL0rgc8DHzKzvf7jmni1VURExo+ZXWdmD9XV1U10U0REYi6eZSE457YD2/ut2xb2eiewZJDjXmTwmm0REZninHPPAc+VlpbePtFtERGJNc3QKCIiIiISIwrXIiIiIiIxEteyEBERkaG0d3Zxsro56uNy0pPISknEu/ddRGRyUbgWEZEJ8d65Bt7/v/4wqmOTExMoyEwhPzOZgqwU8jO7H8kUZKWSn5lMvr8+O1VBXETGj8K1iIhMOe2dXZyqbeFUbcuI+4YH8e4Q7gXy3gDevU5BXETGSuFaRESmtaiCeCChT+guyEwhP6t/KPfWZ6cpiIvIQArXIiIyIZICCRTlpkV1TFeXo7q5ndaOrri0qT3Uxem6Vk7XtY64b/8g3t0zXtCnNzyZgsxUBXGRGUThWkREJsTFc7N48Rsfivo45xxN7SEqG9qoaGyjsqGNysY2KhrbvWd/ufv1ZAniwZ6ylH514lleT3iB30Oek5akIC4yhSlci4jIlGJmZKYkkpmSSHF+xrD7hgfx8MDdHcR7g3kblQ3ttHSE4tLm9lAXZ+paORNBEE8KGMGMsLrwsACe768r8IP5rHQFcZHJRuFaRESmrWiCOEBTW2ef3u+KxvbeAN4T0NupaGiLWxDvCDnO1rdytj7yID5YXXh3CO9ezklLIiFBQVwk3hSuRUREfBkpiWSkJLIgGHkQ94J3e58SlfAQXtnYRnP7xAfxxATrKU0ZOHxheM94CrMUxEVGTeFaRERkFKIJ4s3tnVQ2tFPR2EpFQ3tYAO/uEe8tU2mKUxDv7HKcq2/jXH3biPuGB/H+wxcW9Bu+UEFcpC+FaxERkThLT07kwmAiFwbTR9y3N4j3D+BeXXhvjfjkCOKBBCOY0a9HPKu3Ljy8TCU3PVlBXKY9hWsREZFJJJog3tIeorKxjfPh5SgNA0dNqWxsp7GtMy7tDXU5zjd4beDM8PuGB/HwmzO7A/jcnFSKctOYm51KYiAhLu0ViTeFaxERkSkqLTnABXnpXJAXeRDvrQ1v7xfAe0tUJjqIBxKMudle0C7KTfefe1/Py1H4lskrruHazK4GHgACwI+dc/f3254LPAosAlqBLzrn9vvbHgU+Dpx3zq2MZztFRESmu2iCeGtHyB+ysDeIDyhR8UdSaYhDEA91uZ5ZNV89Vj1ge3j4LuwXwC/ITWduTipJCt8yQeIWrs0sADwI/BlQDuwys185594J2+0+YK9z7pNmdrG//0Z/22PAPwOPx6uNIiIiMlBqUvRBvCdw9y9JCRtJJVZBPDx8c2zg9gSDeTndwdsP37N6X8+bpfAt8RPPnut1wGHn3FEAM3sKuAEID9fLgR8AOOcOmFmxmc1xzp1zzu0ws+I4tk9ERGLEzBYC3wJynHM3TXR7ZPxEG8QHGyGlu278dF0rp2qaqWxsH1Obuhw94fu1IcK31/M9sOSkyO/5Tk5U+JbRiWe4LgROhi2XA+v77fMmcCPwopmtAxYARcC5OLZLRETCDFWGN1JpXzi/I+VLZvZMvNsrU1dqUsAPscMH8eb2Tk7XtnCypoXymhbKa5opr2nhlL9c2TjyKCbD6XL0TF3/WtnA7QkGc4at+U5T+JYhxTNcDzbWjuu3fD/wgJntBfYBbwBR/WZkZpuBzQAXXnjhKJopIjLjPUa/MryhSvvwgvYP+h3/Refc+fFpqswE6cmJLJ6dxeLZWYNub2kPcaq2N3T3CeC1LVQ0jD18d09Xv6usZsB26+n59gJ34ax+4XtWKimJgTG1QaaueIbrcuCCsOUi4HT4Ds65euBWADMzvMqpQX7AGZpz7iHgIYDS0tL+4V1EREYwRBneoKV9zrkf4PVyi0yYtOQAi2dnsnh25qDbWzu6w/fgAXys4dtFEL7nZKUOWnJSmJvGfIXvaS2e4XoXsMTMSoBTwCbg5vAdzGwW0OycawduA3b4gVtERCZWJKV9PcwsCHwfWGtm3/RD+GD76ddGibvUpACLCjJZVDB0+D7dE77DA7j3fD4G4bt7WvrdxwcP37OzUoas+Vb4ntriFq6dc51m9hXgt3g/Iz7qnHvbzLb427cBy4DHzSyEd6Pjl7qPN7OfAR8E8s2sHPgr59wj8WqviIj0EUlpX+8G56qALSOdVL82ymSQmhRgYUEmC4cJ32fqWgeE7u7XkcxcORzn6JkBc88g4RtgTnaKX26SzoJgOsXBDIrzM1iYn0FuRvKYri/xFddxrp1z24Ht/dZtC3u9E1gyxLGfiWfbRERkWCOW9olMV6lJAUryMyjJzxh0e1tniDO1rYP2epfXtHCuoRU3xn86dofv10/UDtiWk5ZEcX4GJcF07zk/oyd856Qlje3CMmaaoVFERAYzYmnfaJnZdcB1ixcvjsXpRMZdSmKA4nwvzA6mO3wPddPl2fqxhe+6lg7ePFnLmycHBu+8jGSKu0O3H7hL/LZmpij2jQd9yiIiM9xQZXiDlfbF4nrOueeA50pLS2+PxflEJpuRwnd7Zxdn6nqHFuwfwM/Wt9I1yvBd3dROdVP7oD3e+ZkplOT3lpj09nink56sSBgr+iRFRGa4ocrwBivtE5GxS05MYEEwgwXBocP3Wb/m+2RNM8cqmymrbKKsynu0dnSN6rrds2YONsLJnOwUioO9vdzdrxcE00lN0s2V0VC4FhEREZlEkhMTuDCYzoXBgZPtdHU5zjW0cqyyibLKZsqqmjha4YXuE1XNtIdGF7y7a7xfPVY9YNv8nNSenvjeUhNvVk6NajKQwrWIiIwr1VyLjF5CgjEvx5sl8opFfbeFuhyna1u8Hu7KJq/H2399orqZzlHWmnTPZvnykaq+bTGYPyutzw2V3WUnF+SlkxSYmbNYmhvr7ayTSGlpqdu9e/dEN0NEJGpmtsc5VzrR7RhP+s4WGT+doS5O1bb4Pd5NlFU1e6+rmiivaSE02iLvIQQSjKLctJ7ykoUFGVw0J4ulc7KmxVCCw31nq+daREREZJpLDITVeS/tu629s4vyGq+XO7y++1hlE6dqW0Y1skmoy3G8qpnjVc3818GKPtsKslJYOifLC9tzM7loThZL5mRNm9FMpse7EBEREZFRSU5MGHJSnbbOECere2+qPNrT893EmbrWUV2voqGNioY2Xjxc2Wd9UW6aF7rnZvWE70WzM6ZcXbfCtYiIjCvVXItMHSmJARbPzmLx7KwB21raQxyvDqvvrmzimF/jPZop5LuHI3z+wPmedYEEoziYztK5WT1lJRfNzWJBXjqJk7SmWzXXIiKTgGquRWQ6aWrr9G+mbOZYZSOHzzfy3rlGjpxvHPWIJuGSExNYXJDZG7r98pLCWWmYWQzewfBUcy0iIiIi4yYjJZEV83NYMT+nz/rOUBdlVc0cPNfAe2cbvOdzDZRVNkU1cU57ZxfvnKnnnTP1fdZnpiSyTlUkYQAACYFJREFUZE5mWE2395yfmTwuoRsUrkVERERknCQGElg8O5PFszO5ZtW8nvWtHSGOVDT6obuxJ3yfqm2J6vyNbZ28caKWN/rNUJmXkcxF3aHbr+leMieLnLSkmLyvcArXIiIiIjKhUpMCg/Z0N7R2cOh8IwfPej3c3eG7sjG6mu7qpnZeOVrNK0f7TpIzLyeVi+ZkceP7CrlhTeGY3wcoXIuIyDjTDY0iEqms1CTed2Eu77swt8/6qsY2Dp5r7Ckr6Q7fDa2dUZ3/TF0rZ+paWVeSF7M2K1yLiMi4cs49BzxXWlp6+0S3RUSmpmBmCpdnpnD5omDPOuccZ+tbe2u5/fKSQ+cbaO0Y/ibKpXMGjoYyWgrXIiIiIjLlmfVODf/BpbN71oe6HCerm/v0cB8818DRiqaeKeGX/v/t3XvoZGUdx/H3x1VzvaTWmtquuaIiruIlxKSIRII0S0GpFLuwmpJkGURl/SOBgfVHlGjGqotJknRR0v7QxDKJxEu5ipsK5gUXTVfCK6Xt+u2POdXsOL/1t7szO2fOvF8w7MxznvOc5/Kb7z7zzDlz9pqSyXWS44EfAguAK6vq4oHtuwMrgf2BfwFnVtWD89lXkiRJeisLtglLF+3E0kU78ZFD9vpf+uvr3uDx51/lkWdfZvFuC0d2vLH9+naSBcBlwAnAMuD0JMsGsn0LWFVVhwGfpTeZnu++kiRJ0mbZftttOGivXTjp8HezzTaj+5m+cd7a5mjg0ap6rKpeB64DTh7Iswy4DaCqHgaWJtlznvtKkiRJrTLOyfVi4Km+12uatH73A6cAJDka2BdYMs99afY7J8m9Se5du3btiKouSRqXJB9PsuLFF1+cdFUkaeTGObketr4+eO+di4Hdk6wCvgTcB6yb5769xKoVVXVUVR21xx57bEl9JUlbQVXdVFXn7Lrrrm+dWZKmzDgvaFwD7NP3egnwdH+GqnoJWA6Q3j0pH28eO77VvpIkSVLbjHPl+h7gwCT7JdkeOA24sT9Dkt2abQCfB+5oJtxvua8kSZLUNmNbua6qdUnOA26h93N6K6tqdZIvNNt/DBwMXJNkPfBX4KyN7TuuukqSJEmjkKqhpzJPpSRrgSc3cbdFwPNjqI7aYVfAq6Y21JU+aWs7Nrde+1bVTF04spkxG4zbXdbW9/WkdaFf2tqGkcfsTk2uN0eSe6vqqEnXQ+ORZEVVnTPperRJV/qkre1oa726xLjdXb5/hutCv7S1DeOo1zjPuZba4KZJV6CFutInbW1HW+slTQPfP8N1oV/a2oaR18uVa1dAJGmqGLcltZkr17Bi0hWQJG0S47ak1pr5lWtJkiRpVFy5liRJkkbEybUkSZI0IuO8/bk0lZLsBPwIeB24vaqunXCVWqEL/dKFNkjakO/r4brQL9PaBleuByTZKclPklyR5IxJ12dWJdknye+TPJRkdZLzt6CslUmeS/LgkG3HJ3kkyaNJLmiSTwF+WVVnAydt7nHHIckOSe5Ocn/TL9/egrIm2i9JFiS5L8lvtqCMzoytNo8xux2M2cMZs99URmfGdmNmYnI912B2aSA7aB3w1ao6GDgG+GKSZf0ZkrwryS4DaQcMKetq4PjBxCQLgMuAE4BlwOnNMZYATzXZ1m9hO0btNeC4qjocOAI4Pskx/RmmqF/OBx4atmGK2qAxMGZPJWP2cMbsDV1Nd8Z2TjMxuWbIYHZtILumqp6pqr80z1+m94ZePJDtQ8Cvk+wAkORs4JIhZd0B/GPIYY4GHq2qx6rqdeA64GRgDb2/A2jZe6R6Xmlebtc8Bn/yp/X9kmQJcCJw5RxZWt8GjdXVGLOnijF7OGN2e9qwNU1NRbfEHIPZqYHssiRLgSOBu/rTq+oXwM3Adc3XwWcCn9yEohfz//+UoTf2i4HrgVOTXE4L7yjVfDW3CngOuLWqprFffgB8HXhj2MYpaYPGxJg93YzZGzJmz8tUju1cZvmCxmED+T56n7QuTXIiUzSQXZVkZ+BXwFeq6qXB7VX1vSTXAZcD+/etEMyr+CFpVVWvAss3q8JbQVWtB45IshtwQ5JDq+rBgTyt7ZckHwOeq6o/Jzl2rnxtboMmwpg9BYzZb2bMnt9hhhfZ7rGdyyx/yp9zIKtqeVWdOy1XpXZVku3oBelrq+r6OfJ8EDgUuAG4cBMPsQbYp+/1EuDpzajqRFTVC8DtDD9/rc398gHgpCRP0Ft9PC7JTwcztbwN2vqM2S1nzN44Y/ZGTfXYDprlyXWnBrJrkgS4Cnioqr4/R54jgSvofTW8HHhHkos24TD3AAcm2S/J9sBpwI1bVvPxSrJHs/pBkoXAh4GHB/K0ul+q6ptVtaSqljZl/66qPt2fp+1t0EQYs1vMmD2cMXvepm5sN2aWJ9edGsgO+gDwGXqfkFc1j48O5NkR+ERV/a2q3gA+Bzw5WFCSnwF3AgclWZPkLICqWgecB9xC7+Kbn1fV6vE1aST2Bn6f5AF6f8O3VtXgzyJ1oV+60AaNljG73YzZwxmz+7S8DSOTqsGLVrunGcxjgUXAs8CFVXVV88b/AbAAWFlV35lcLSVJYMyWNN1mYnItSZIkbQ2zfFqIJEmSNFJOriVJkqQRcXItSZIkjYiTa0mSJGlEnFxLkiRJI+LkWpIkSRoRJ9eaOUnW993kYFWSC0ZY9tIkD46qPEmadcZsTZttJ10BaQL+WVVHTLoSkqR5MWZrqrhyLTWSPJHku0nubh4HNOn7JrktyQPNv+9p0vdMckOS+5vH+5uiFiS5IsnqJL9NsnBijZKkjjJmq62cXGsWLRz4ivFTfdteqqqjgUvp3WaZ5vk1VXUYcC1wSZN+CfCHqjoceC+wukk/ELisqg4BXgBOHXN7JKnLjNmaKt7+XDMnyStVtfOQ9CeA46rqsSTbAX+vqncmeR7Yu6r+3aQ/U1WLkqwFllTVa31lLAVuraoDm9ffALarqovG3zJJ6h5jtqaNK9fShmqO53PlGea1vufr8doGSRoXY7Zax8m1tKFP9f17Z/P8T8BpzfMzgD82z28DzgVIsiDJ27dWJSVJgDFbLeSnM82ihUlW9b2+uar++9NOb0tyF70Pnqc3aV8GVib5GrAWWN6knw+sSHIWvdWOc4Fnxl57SZotxmxNFc+5lhrN+XtHVdXzk66LJGnjjNlqK08LkSRJkkbElWtJkiRpRFy5liRJkkbEybUkSZI0Ik6uJUmSpBFxci1JkiSNiJNrSZIkaUScXEuSJEkj8h9gXtB4uecGDAAAAABJRU5ErkJggg==\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plot_accuracy_loss(trained_mnist)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Two helper functions. Let inspect the performance visually"
]
},
{
"cell_type": "code",
"execution_count": 157,
"metadata": {},
"outputs": [],
"source": [
"# Make a single prediction and validate it\n",
"def example_NN_prediction(dataset = x_test, \n",
" model_ = model_mnist):\n",
" \"\"\"\n",
" This tests our MNist FFNN by examining a single prediction on the test set and \n",
" checking if it matches the real label.\n",
" \n",
" Arguments:\n",
" n: if you select n then you will choose the nth test set\n",
" \"\"\"\n",
" mnist_preds = model_mnist.predict(x_test)\n",
" all_predictions = np.argmax(mnist_preds, axis = 1)\n",
" \n",
" n = np.random.choice(784)\n",
" digit = x_test[n,:]\n",
" actual_label = y_test[n]\n",
" \n",
" plt.imshow(digit.reshape(-1, 28))\n",
" prediction_array = model_.predict(digit.reshape(1,-1))\n",
" prediction = np.argmax(prediction_array)\n",
" if prediction == y_test[n]:\n",
" print(\"The Mnist model correctly predicted:\", prediction)\n",
" else:\n",
" print(\"The true label was\", actual_label)\n",
" print(\"The Mnist model incorrectly predicted:\", prediction)\n",
"\n",
"#################################################### \n",
"# Make a many predictions and validate them\n",
"###################################################\n",
"def example_NN_predictions(model_,\n",
" dataset_ = x_test,\n",
" response_ = y_test,\n",
" get_incorrect = False):\n",
" \"\"\"\n",
" This tests our MNist FFNN by examining 3 images and checking if our nueral network\n",
" can correctly classify them.\n",
" \n",
" Arguments:\n",
" model_ : the mnist model you want to check predictions for.\n",
" get_incorrect (boolean): if True, the model will find 3 examples \n",
" where the model made a mistake. Otherwise it just select randomly.\n",
" \"\"\"\n",
" dataset = dataset_.copy()\n",
" response = response_.copy()\n",
" \n",
" # If get_incorrect is True, then get an example of incorrect predictions.\n",
" # Otherwise get random predictions.\n",
" if not get_incorrect:\n",
" n = np.random.choice(dataset.shape[0], size = 3)\n",
" digits = dataset[n,:]\n",
" actual_label = response[n]\n",
" else:\n",
" # Determine where the model is making mistakes:\n",
" mnist_preds = model_mnist.predict(dataset)\n",
" all_predictions = np.argmax(mnist_preds, axis = 1)\n",
" incorrect_index = all_predictions != response\n",
" incorrect = x_test[incorrect_index, :]\n",
" \n",
" # Randomly select a mistake to show:\n",
" n = np.random.choice(incorrect.shape[0], size = 3)\n",
" digits = incorrect[n,:]\n",
" \n",
" # determine the correct label\n",
" labels = response[incorrect_index]\n",
" actual_label = labels[n]\n",
" \n",
" #get the predictions and make the plot:\n",
" fig, ax = plt.subplots(1,3, figsize = (12, 4))\n",
" ax = ax.flatten()\n",
" \n",
" for i in range(3):\n",
" #show the digit:\n",
" digit = digits[i,:]\n",
" ax[i].imshow(digit.reshape(28,-1)) #reshape the image to 28 by 28 for viewing\n",
" \n",
" # reshape the input correctly and get the prediction:\n",
" prediction_array = model_.predict(digit.reshape(1,-1))\n",
" prediction = np.argmax(prediction_array)\n",
" \n",
" #Properly label the prediction (correct vs incorrect):\n",
" if prediction == actual_label[i]:\n",
" ax[i].set_title(\"Correct Prediction: \" + str(prediction))\n",
" else:\n",
" ax[i].set_title('Incorrect Prediction: {} (True label: {})'.format(\n",
" prediction, actual_label[i]))\n",
" plt.tight_layout()\n"
]
},
{
"cell_type": "code",
"execution_count": 158,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The Mnist model correctly predicted: 0\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"example_NN_prediction()\n"
]
},
{
"cell_type": "code",
"execution_count": 159,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"example_NN_predictions(model_ = model_mnist, get_incorrect = False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's see where the network makes the wrong predictions"
]
},
{
"cell_type": "code",
"execution_count": 160,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"example_NN_predictions(model_ = model_mnist, get_incorrect = True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Break Out Room 3\n",
"\n",
"**Try this on your own, with the Iris dataset that we saw in Section 5**\n",
"\n",
"- Load and split the Iris dataset.\n",
"- Use Keras to build and train a network for fitting the data.\n",
"- Use `two hidden` layers of `32 neurons` each with `relu` activation functions.\n",
"- Figure out `how many output neurons` you need. \n",
"- Use the training data set for training and testing set for evaluation. \n",
"- Train for `100` epochs and try `Adam` optimizer with learning rate `0.005`\n",
"- Use the `sparse_categorical_crossentropy` loss function.\n",
"- Plot the accuracy and loss by using the `plot_accuracy_loss()`\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 166,
"metadata": {},
"outputs": [],
"source": [
"from sklearn import datasets"
]
},
{
"cell_type": "code",
"execution_count": 162,
"metadata": {},
"outputs": [],
"source": [
"iris_data = datasets.load_iris()"
]
},
{
"cell_type": "code",
"execution_count": 163,
"metadata": {},
"outputs": [],
"source": [
"X = pd.DataFrame(data=iris_data.data, columns=iris_data.feature_names)\n",
"y = pd.DataFrame(data=iris_data.target, columns=['species'])"
]
},
{
"cell_type": "code",
"execution_count": 164,
"metadata": {},
"outputs": [],
"source": [
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.7, random_state=41)"
]
},
{
"cell_type": "code",
"execution_count": 168,
"metadata": {},
"outputs": [],
"source": [
"# %load '../solutions/sol_3.py'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Rolling Average: A useful representation for the accuracy and loss"
]
},
{
"cell_type": "code",
"execution_count": 173,
"metadata": {},
"outputs": [],
"source": [
"def get_rolling_avg(arr, rolling = 10):\n",
" return pd.Series(arr).rolling(rolling).mean()\n",
"\n",
"def plot_accuracy_loss_rolling(model_history):\n",
" rollNum = 10\n",
" plt.figure(figsize=[12,4])\n",
" plt.subplot(1,2,1)\n",
" plt.semilogx(get_rolling_avg(model_history.history['accuracy'],rollNum), label = 'train_acc', linewidth=4)\n",
" plt.semilogx(get_rolling_avg(model_history.history['val_accuracy'],rollNum), label = 'val_acc', linewidth=4, alpha=.7)\n",
" plt.xlabel('Epoch')\n",
" plt.ylabel('Rolling Accuracy')\n",
" plt.legend()\n",
"\n",
" plt.subplot(1,2,2)\n",
" plt.loglog(get_rolling_avg(model_history.history['loss'],rollNum), label = 'train_loss', linewidth=4)\n",
" plt.loglog(get_rolling_avg(model_history.history['val_loss'],rollNum), label = 'val_loss', linewidth=4, alpha=.7)\n",
" plt.xlabel('Epoch')\n",
" plt.ylabel('Rolling Loss')\n",
" plt.legend()\n",
" plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": 174,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plot_accuracy_loss_rolling(iris_trained)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Neural Networks are great, so far ... But, what about the overfitting problem ??"
]
},
{
"cell_type": "code",
"execution_count": 176,
"metadata": {},
"outputs": [],
"source": [
"# Increase the size of the testing set to encourage overfitting \n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.6, random_state=41)\n",
"\n",
"\n",
"model_iris = tf.keras.models.Sequential([\n",
" tf.keras.layers.Input(shape = (4,)),\n",
" tf.keras.layers.Dense(32, activation='relu'),\n",
" tf.keras.layers.Dense(32, activation='relu'),\n",
" tf.keras.layers.Dense(3, activation = 'softmax')\n",
"])\n",
"model_iris.compile(\n",
" loss='sparse_categorical_crossentropy',\n",
" optimizer=tf.keras.optimizers.Adam(0.005),\n",
" metrics=['accuracy'],\n",
")\n",
"\n",
"##################\n",
"# TRAIN THE MODEL\n",
"##################\n",
"iris_trained_ofit = model_iris.fit(\n",
" x = X_train.to_numpy(), y = y_train.to_numpy(), verbose=0,\n",
" epochs=500, validation_data= (X_test.to_numpy(), y_test.to_numpy()),\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 177,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plot_accuracy_loss(iris_trained_ofit)"
]
},
{
"cell_type": "code",
"execution_count": 178,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plot_accuracy_loss_rolling(iris_trained_ofit)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Regularization is needed! Wait until the next section"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"----------\n",
"\n",
"\n",
"\n",
"\n",
"## End of Section\n",
"\n",
"----------"
]
}
],
"metadata": {
"jupytext": {},
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.4"
},
"toc": {
"base_numbering": 1,
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": false,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": false
},
"varInspector": {
"cols": {
"lenName": 16,
"lenType": 16,
"lenVar": 40
},
"kernels_config": {
"python": {
"delete_cmd_postfix": "",
"delete_cmd_prefix": "del ",
"library": "var_list.py",
"varRefreshCmd": "print(var_dic_list())"
},
"r": {
"delete_cmd_postfix": ") ",
"delete_cmd_prefix": "rm(",
"library": "var_list.r",
"varRefreshCmd": "cat(var_dic_list()) "
}
},
"types_to_exclude": [
"module",
"function",
"builtin_function_or_method",
"instance",
"_Feature"
],
"window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 1
}