Skip to content

Instantly share code, notes, and snippets.

@subpath
Created September 3, 2019 17:36
Show Gist options
  • Save subpath/0dac9f4d8898586f5dd2715a2d0ee829 to your computer and use it in GitHub Desktop.
Save subpath/0dac9f4d8898586f5dd2715a2d0ee829 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Stacked regression\n",
"\n",
"[Kaggle's House Prices: Advanced Regression Techniques](https://www.kaggle.com/c/house-prices-advanced-regression-techniques) challenge.\n",
"\n",
"Dumb end to end solution."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Populating the interactive namespace from numpy and matplotlib\n"
]
}
],
"source": [
"%pylab inline\n",
"import pandas as pd\n",
"import numpy as np\n",
"import seaborn as sns\n",
"from sklearn.model_selection import cross_val_score\n",
"from sklearn.linear_model import LinearRegression\n",
"\n",
"data = pd.read_csv('train.csv')"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>% NULL</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>PoolQC</th>\n",
" <td>0.995205</td>\n",
" </tr>\n",
" <tr>\n",
" <th>MiscFeature</th>\n",
" <td>0.963014</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Alley</th>\n",
" <td>0.937671</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Fence</th>\n",
" <td>0.807534</td>\n",
" </tr>\n",
" <tr>\n",
" <th>FireplaceQu</th>\n",
" <td>0.472603</td>\n",
" </tr>\n",
" <tr>\n",
" <th>LotFrontage</th>\n",
" <td>0.177397</td>\n",
" </tr>\n",
" <tr>\n",
" <th>GarageYrBlt</th>\n",
" <td>0.055479</td>\n",
" </tr>\n",
" <tr>\n",
" <th>GarageType</th>\n",
" <td>0.055479</td>\n",
" </tr>\n",
" <tr>\n",
" <th>GarageFinish</th>\n",
" <td>0.055479</td>\n",
" </tr>\n",
" <tr>\n",
" <th>GarageQual</th>\n",
" <td>0.055479</td>\n",
" </tr>\n",
" <tr>\n",
" <th>GarageCond</th>\n",
" <td>0.055479</td>\n",
" </tr>\n",
" <tr>\n",
" <th>BsmtFinType2</th>\n",
" <td>0.026027</td>\n",
" </tr>\n",
" <tr>\n",
" <th>BsmtExposure</th>\n",
" <td>0.026027</td>\n",
" </tr>\n",
" <tr>\n",
" <th>BsmtFinType1</th>\n",
" <td>0.025342</td>\n",
" </tr>\n",
" <tr>\n",
" <th>BsmtCond</th>\n",
" <td>0.025342</td>\n",
" </tr>\n",
" <tr>\n",
" <th>BsmtQual</th>\n",
" <td>0.025342</td>\n",
" </tr>\n",
" <tr>\n",
" <th>MasVnrArea</th>\n",
" <td>0.005479</td>\n",
" </tr>\n",
" <tr>\n",
" <th>MasVnrType</th>\n",
" <td>0.005479</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Electrical</th>\n",
" <td>0.000685</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" % NULL\n",
"PoolQC 0.995205\n",
"MiscFeature 0.963014\n",
"Alley 0.937671\n",
"Fence 0.807534\n",
"FireplaceQu 0.472603\n",
"LotFrontage 0.177397\n",
"GarageYrBlt 0.055479\n",
"GarageType 0.055479\n",
"GarageFinish 0.055479\n",
"GarageQual 0.055479\n",
"GarageCond 0.055479\n",
"BsmtFinType2 0.026027\n",
"BsmtExposure 0.026027\n",
"BsmtFinType1 0.025342\n",
"BsmtCond 0.025342\n",
"BsmtQual 0.025342\n",
"MasVnrArea 0.005479\n",
"MasVnrType 0.005479\n",
"Electrical 0.000685"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"clmns = data.columns[data.isnull().any()]\n",
"missed = pd.DataFrame(data[clmns].isnull().sum().sort_values(ascending=False) / data.shape[0], columns=['% NULL'])\n",
"missed"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"data.drop(missed[missed['% NULL'] > 0.80].index, 1, inplace=True)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"data = data.select_dtypes(include=['int', 'float'])"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"data = data.fillna(data.mean())"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x1a17c47d68>"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAa8AAAE/CAYAAADxDUxCAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzsnXm8VVXdxr/PhQsXuKDgFOKAKYozKuKQmJmplallpqSlNtigWfZm6eubEWaZVmZOqWWIOc+olSOEOAEKMmgMCiqKIqAMApc7/N4/1jqwOZy1zrncw+We2/ry2R/O2WvY6+yz71l7rf2s5yczI5FIJBKJSqJqYzcgkUgkEonmkjqvRCKRSFQcqfNKJBKJRMWROq9EIpFIVByp80okEolExZE6r0QikUhUHKnzSiQSiURRJN0kab6kqYF0SfqTpFmSJkvaN5N2mqSZfjutHO1JnVcikUgkSmE4cHQk/bNAP7+dCVwHIKkX8AvgAGAQ8AtJPVvamNR5JRKJRKIoZjYGWBTJchwwwhzPA5tK6g0cBTxuZovM7APgceKdYEl0bGkFpSDJgL+b2df8+47APOAFMztG0lbAX4FtgWpgjpl9TlIV8EfgcMCAlcBXzGx25FjDgYfN7J4CaYOA3wFb+frGAucAXwEGmtnZZfrIBalf8HrQzqR//y9Hyx7UrW8wbR/rGkx7u6ohWu/WTeFLoEO0JNQrnPa24seN3TW9b6uiZd9uXBpMa7SmYNoN3TpH6310Za9gWk24WgAWdAg71RQpSv/Ix+3e1BhMG9slfu95ksLn6YnGTaJl51WFj9uvIX5lzOoYLvsh8euit3UKpsU+bbFzvELhHNVELmSgm4WPXE/coSjWrqb4YRk259YiOYoT+83Jp9MWO34HN2LKcYOZ3dCMw/UB3sq8n+v3hfa3iFbpvICPgD0kdTGzFcBngLcz6cNwPfOVAJL28vtPArYG9jKzJknb+Lqaje8g7wZONrPnJAk4Aei+Xp8okUgk2hG+o2pOZ5VPoc7WIvtbRGtOG/4T+Lx/PQS4PZPWG9cbA2BmkzP755m522kzm+uHnUhalssv6ct+xJXjCElPS5oh6Ri/7yzgZjN7ztdlZnaPmb2XbaSkL0h6QdJESU/4Tg9Jn5Q0yW8TJXWX1FvSGL9vqqTBLTpDiUQiUU6aGkvfWs5c3OxZjm2AdyL7W0Rrdl53ACdLqgH2Al7IpF0D/FXSKEkXStra778L+ILvHH4vaZ8Sj9UX+CSus/yzP+YewIsllB0LHGhm+/g2/9Tv/wlwlpkNAAYDK4CvAo/6fXsDk/Irk3SmpAmSJvxlxO35yYlEIrHhaGwofWs5I4Gve9XhgcBiM5sHPAocKamnF2oc6fe1iNaaNsTMJkvqixt1/SMv7VFJH8c9xPssMFHSHmY2V9IuuGdehwNPSjrRzJ4scri7/GhtpqTXgf7NaOo2wJ3+QWMnIPd87RngD5JuBe7zbRsP3CSpGnjAzNbpvLJD8ebMPycSiURLscgz4OYi6XbgMGBzSXNxCsJqdxz7M+53/XPALGA5cIZPWyTpYmC8r2qYmcWEHyXRap2XZyROMHEYsFk2wX+Y24DbJD0MHArca2Z1uCnHf0p6DzgeeJK150xr8o6T30kYMA3YD3iwSBuvAv5gZiMlHQYM9e27VNIjuC/neUlHmNkYSYfiRni3SLrczEYUqT+RSCRah6bydV5mNqRIuuEezxRKuwm4qWyNofU7r5twQ8kpvmMAQNLhwPNmtlxSd2BH4E2/yO1dM3vHKw/3AnLPw96TtCswHfgikJVWnSjpZmAH4OM+z9XAOEmPmNkL/rinAk/ktXET1ohJVi+mk7SjmU0Bpkg6COgvaQXwtpndKKkbsC8Q7LxiisL//GcdceRazDooLIT8YFlYlHRf57B6C6B3ZLZgZZFJ5T714cIHKj6HPrFTWPl3YH1czXbwNouDaZ17hNt0//Te0XqbIp/3c73nRcs+8U647rc6xgfcMUXh9M7hP9FjVi2P1nt/dY9g2sndFkTLLviwWzBtUscu0bInN4Xb1b12ZbTsk0u2CKZt1hg+jzM7xYV5WzaGr6m6Ipq+XevC19T4mvi12jmiZGxqjViKZRx5tTVatfMys7nAlQWS9gOultSAew73FzMbL+lo4EZJuV+6cbhOCOB84GGcBHMqUJupbzrwb5wk/rtmthJYKelk4HeStsSpWMcA9+W1ZShwt6S3gedxHSDAjyR9CmgEXsGNBk8GzpNUDywDvt7MU5JIJBIbjvIIMdokrdJ5mVltgX2jgdH+9eXA5QXy/Av4V6DOe4B1hitmdnqkHc/hxBb5DPcbZvYgBaYWzewHBcrd7LdEIpFoe6SRVyKRSCQqDSuPirBNkjqvRCKRaK+UUbDR1kidVyKRSLRX0rRh20TSskLP0wJ5jwdmmNkrmX0dgXeBG83sgg3UzNXE/AljakKAnZ67Oph2+94XBdN6FFE0vVUdTY5SbeHLp29j/EHxZpHZjBlxgST93g1/5V0+rA+mrSqiKluu8Ll6P3JMgF6N4R+JZVVx2ebiqrBibUWkzbOJq/4aImXfWBT3NtyiZkUw7R3FPSLfXBlWKnZeGG/zthHvw3nV4ettReS7A+hQFT4ZnYuI/t6KHLe2SNllkXa1ipSiHQs2/ptc5Y8HdsvbdyROmfgV73W4DpKK+dMmEolE28SaSt8qjHbXeUnaXtKTPhjak5K2k3QwcCxwubea2tFnH4KT7r8JHJipY46kiySNxa0Z21HSvyS96D0T+/t8BX0QE4lEok3QuvZQrUq767xw68BGmNlewK3An8zsWZy7x3lmNsDMXpPUBfg0bq3Y7biOLMtKMzvEzO7A2Tv9wMz2w3kcXuvzhHwQV5P1Npy5LBjJJZFIJMpPU1PpW4VR0c+8AhwEfMm/vgW4LJDvGGCUd/W4F/i5pHPNLDdJfCeApFrgYNzC5VzZ3KR/yAdxNVlvw1O3/1LyNkwkEq3Gmp+z9kd77LzyCXUYQ4BPSJrj328GfIo1dlG5uGFVwIfeOT6fgj6IiUQi0SaowGdZpdIeO69ncbZNtwCn4Kb2wHkfdgeQ1AM4BNjWG/8i6Qxch7aW16GZLZE027vZ3+2FHXuZ2csEfBBDxCIex/wJIa4oHPLysGDaDweeH633spMic90R70KAjyaGPQZnT98smAbwUqdw3Wd2WhIt2+fIcFrjwrBK7tPjPojWe2skuvAuZ8RVcq/8JTwDP7dD/O73jBPD8VVn3RsuN1lh70KAKU3h7+ecAfFz3BCROf50l7g/YYc+4e/ePqqLlp0aCR788a7hNj+3Kvy3BdDf8r2711BdZD4kFjF8QVW8c9i2MXZdtELHUoHTgaVS6c+8ukqam9l+DJwDnCFpMvA14Ic+7x04H8KJwInAU7mOy/MgcGzGRzHLKcA3Jb2Mc6c/zu8fiptOfBqIO50mEolEa9OO1YYVPfIys1Dne3iBvM+wtlT+r3npi4CcpXXfvLTZuFhj+XUW9EFMJBKJNkFjeN1jpVPRnVcikUgkIrTjacPUeSUSiUR7pQKnA0sldV6JRCLRXmnHIy/ZBo7mKWkb4Brc86Yq3KLg88xs1QY85jIzq5XUF3jYzPbw+wcBv8MFqTScEvEcM4uHpC1+vKHAMjP7XSzfj/ueHDzZVZGIqwA9go/34F2F57WvnHBptN6ddjk+mPa/XfaKln2+Y1jZtwVFIjg3hV23XlL861gR8b+ridyPDYioPYvxZlX82UGniPZpn1Vxh7E7On4YTOtXFfZU3DLiLQnwpsJ/YjVFtFpdI+mPrHwjWna7Tj3D9Sre5t0I+yKujPgExlR9ADExb02Rn8APqsIZtmiK/92+Hynbw+Jlf/jm34u4cRZn5dO3lPwDXzP4ay0+XmuyQdWGXlZ+H/CAmfUDdsZFPL6khfU2e8TorZvuBn5mZrsAu+ICXXZvSVsSiUSirWLWWPJWaWxoqfzhOJulvwF494pzgW9IGi9p91xGSaMl7Sepm6SbfPpEScf59NMl3S3pIeAxSbXeu/AlSVNy+SKcBdzsoyljjnvM7D1JvSQ94P0Qn5e0lz/mUN+W0ZJel3ROpr0XSpou6QlglzKes0QikSgP7djbcEM/89odeDG7wy/6fRM3ffgV4BfeXmlrM3tR0q9xa7C+IWlTYJzvIMBZP+1lZov86OuLvr7NgecljbTwPOgewM2BtF8CE83seEmHAyOAnKNGf5zzRndguqTrgL1wC6H3wZ3Dl/I/ZyKRSGx02vEzrw098hKF7ZkEjMYtFgbXid3tXx8JnC9pks9TA2zn0x7367FydfzaL0Z+AuiDe5a1PhyCc+TAzJ4CNpOUs1t4xMzqzGwBMN8fYzBwv5ktN7MlONPfgmSNeScvfW09m5dIJBLrQTtepLyhO69pwMDsDm/NtC0wHljop+hOwjlggOuUTvDu7wPMbDsze9WnZX10TsEtKt7P+w6+h+voYm3ZL5BW6EFlrtPNunA0sma0WtKDUDO7wcwGmtnAvbrvWLxAIpFIlIvkKr/ePAlcKunrZjbCB3b8PTDcu7nnwohsYmZTfJlHgR9I+oGZmaR9zGxigbo3AeabWb2kTwHbF2nL1bgpyEfM7AUASafiRm1jcJ3hxd5gd4GfjgzVNQYYLulS3Dn8AnB9sZOxdVP4dPcuMuUci3gc8yeMqQkBZk1/IJi26k//Gy172F1hVeCSpfE/hrurw/cZJ6yM3YPAATvNC6YteDusznu4yN/nOAt7AZ69Iq5UbIzcy4zqEj/wiP2XBdNmPBNWbd5WJOL0uxb2IDy2Ie6LuGkkMvSFN3wxWrbhsaeCaY0Lw+cYYNqo8N/IcgurNs+onxyt99zaQr7ajjeLeE9uElH6vlHEnzCmEv6gSPTnslCBI6pS2aAjL//86Yu4gI4zgRnASiD3q3gP7tnRXZliFwPVwGRJU/37QtwKDJQ0Adfx/KdIW97zx/qdF1q8ipv+W4LzKBzopyAvpYjJrpm9hAuZMgm4F3g6lj+RSCQ2Cg0NpW8VxgZfpGxmb+FGJoXS3stvg5mtAL5TIO9wYHjm/QKcgKNQvbX+/zk4oUZu/3O4Diuf5awx283WMzTvfbauS2ih5D+RSCQ2KO145JUcNhKJRKK9UoHPskql0kOiJBKJRCJEGdWGko72j1xmSVonUKCkKyRN8tsMSR9m0hozaUF1dnNII69EIpFor5Rp5OXFdtcAnwHmAuP9utpXcnnM7NxM/h/g1sHmWBGIRr/eRDsvb+/0NHCJmf3T7/sK8A0zWye+VXOQ9HfgE8BinFT9R2Y2qiV1NvP4v8KpCv/o33cC3gWuMbOfB8ocAZxtZutI+CTNBfYws6BRXczhbmVLxsCRiMfF/AljisJO5/w6Wnb29eGyi6vifn71hBVeNUX8Nhe+E/a/+6guLMvsV6Te9zuH692yazjaMcDUurB6r3MRUVnT8nCGxY1hSWFNET/MmsgV16ch7tU4v0P4PDZNiSv7Vk4Pn6u6JUWui4jfX1eFr5l9avtG64390HUoch5jdCniTxj7tN2LlC0L5XvmNQiYZWavA3il+HHAK4H8Q4BflOvghYj+ZHq14HeBP0iqkdQNJ1I4qyUHzXgTnut7458A17akzjJwNO6LOGkjtyORSCTKQzPUhllDBb+dmampD/BW5v1cv28dJG0P7ABk10zU+DqflxRfv1MiRe/3zWwq8BDwM1xPOsLMXpN0mqRxfg7zWklVvuE3+EZOk3RR5gPNlfRzSc/g5PNZniNzIiTtL+nfkl6U9E9vqouksZL+IOlpSa9IGijpfkkz5Zzdc+V/Kmmq336Q2X+Rn7N9HOiX14YhwB+A9yTtnynzeV9mLBlFoqQtJD3uvRWvo/BC50Qikdh4mJW8ZQ0V/HZDpqaYkUM+JwP32Npuv9uZ2UDgq8AfJbXYsaHUyapf+oN+FrhM0h64DuhgP3Lq6BsMcL5v5N7AZyTtlqnnIzP7hJndzdocDTwAIKkzcCXOZWM/4O+svdZrhZkNBv7qy3wX2BM4U9KmcmFPTsENcw8Cvi9pL7//BJxn4Zd9Ov6Y3YBPAv8Absd1ZEjqilt8/DmcxH7rvHMyysz2xbnTZ9MSiURi41M+h425OGekHNsA7wTynoz7HV2Nmb3j/38dZ/u3z7rFmkdJgg0z+0jSnbiYVXX+2c/+wATvQtGFNUPKIZK+6eveGhfHKzcvemde1VdIugLYnDWdya44Q98nfN0dcCcuR06pMgWY4teKIWkO7oQOBu7NxeiS9ADOu7Cr378CWCHnTp/jWJxv4kpJd/vP9RPf9hlm9pqv61bg677MobhODTN7UNLSQufOD73PBDix5yAOqs0f8CUSicQGonxS+fFAP0k7AG/jOqiv5meStAvQEzebltvXE1ju+47NcVqHy1raoOaoDZv8Bm4IeVO+sEFSP+CHwCAz+9CLMrJeP/lPcs/FTUmei1uAfICve7IfXRUi5zXYxNq+g03+88Sm70LD3CHAAb4DBNgS1zkti5SJ1bcmgxt63wBwxXantoIfTCKRSHjKJNgwswZJZ+Ps+zrgfv+nSRoGTDCz3KBiCHBHXnSPXYHrJTXhZvsuzaoU15f1lco/Adwj6UozWyBpM6Ab0ANYCiyRC3NyFG5KLYiZNUr6PXCapE/johv3kTTIzMZ5FWA/M5tWYtvG4E7U5biTfBxOhNEls78TcAzwJ39XcACwjZnVA0j6Nu5LOBfY2d9tzPH7ssc5Befd+AVKCGpZH+lW+0QUgwDVkai5H00M+8U93zFiikjcnzCmJgT49LSwGnHKPucG0wCepUswbWGHItF2e4UjOHetC0cPXjQ/bgYYu7PYvE/YfxBg+ZxNgmm1RW5Z3poaLtsh0qrd6+Pnqao6fI636lJwomA1m0bqnnpN/PFu763DZas6xE/G0kic2WVV4accWxV5AFIXOWyxKMyLI8nLVaRziH3c1nhK3li+IJNm9g/co5Xsvovy3g8tUO5Z3KOdsrJeAm1vovtL3NTeZOAxXKiQl3BThFOBG4FnSqzPgF8BPzWzOtwzqT9IehmYiOtcSm3bONx863jgeeA6M5vi998PvIwLvzLGFzkBN2WY1Q4/gHumV497pvZP3JKB1zN5fgEcIekl4DDcUDqRSCTaDslVvqDP323AbQWyfi1Qfpu896fmvb8T/0zMG98eUqCOQzKvn8CNAAulXUaBOVUzGwYMK9C8v+Tlex83dQjwiN/y63ofOCKz638K1JtIJBIbjwrslEolOWwkEolEeyUZ8yYSiUSi0rCm9qsRS51XIpFItFfStGGiHLytsKLwwIhvG0DfiGpo9vTNgmlbdIor7GIRj4v5E8YUhXtOvCJatvPAC4Nppy2IW1x+cGxYuFQ/L6xEvH1JWIkIsDnhczV95ubRskN+Flb2jbgi3CaAsRb2RVxcE75znqO6YBpA54gea1RTWOEIMLgqrEZ8uz7sAQnQMDd83J7d4ueim4Wv88URp8Bi/oRVLRiA9FsVLjy9U/y4MQfJYt6UZaGMasO2RquFRMlY4r/sLZUOLkOdAyR9LvP+dEnvZ6z3R/j9w/zC6lhdW0l62LfvFUn/8Pv7SlqRqXOSpE6S+kt6TlKdX9CcSCQSbYukNiwLqy3xJR0F/AZnydQSBgADWXvtwZ1mdnY2U/5ahADDcJL5K30bs3bsr+Xb+UtaBJwDlMVkMpFIJMpOBXZKpbKxglH2AD4AkNRb0hg/opkqabDfv0zSb7057xOSBkkaLel1Scf6xcvDgJN82aAbvKThkr7sX8+R9Es/+psiqb/P1puMDZWZReM+mNl8MxtPfGYgkUgkNh7NMOatNFqz8+riO5n/4NZV5cx2vwo86kc2ewOT/P5uwGhvzrsUt4j5M7jFw8PMbBVwEW6kNcCvE4M1ndkkSWcE2rLAG+pehwvHAi7Q2l8ljZJ0oaSs0e6OmTqvac6HVibMwNSlrzWnaCKRSLSMNG1YFrLThgcBI7w7/XjgJknVwANmluu8VrHGWmoKUGdm9ZKmAH0jx1ln2rAA9/n/XwS+BGBmj0r6OM7h/rPARN8+KDBtWCpZb8Mf9j258m5vEolE5ZKk8uXFzJ7z7sJbmNkYSYcCnwdukXS5mY0A6jPmjqtNeM2sSYoYoJVGTqbVSOYcmNkinGvIbZIexpnzvtjCY60mNsyd2KlztOxmEevDlzqFE7dtiisG766uCabFoh1D3J8wpiYEuGTCJcG0KfvEY53e/1BYXRm7f+xaHVfnbRXxjxxTEz+Piy+LRFqujk9wzOgQnnnuHouGbHEl6YqI7967VfE77aebwlad02viqs1NIqrN6sb4db51RL23MCIZ7N8Ur3dB5PNuVh//ft6qXh+v7+JUt0a/ktSG5cU/Z+oALJSLujnfzG7ExejatxlVLaUEQ9wS23S4j9+FpO7AjsCb5ag7kUgkNgbW1FTyVmm05siri6TclKCA07yj/GHAeZLqcSFIvh6qoACjgPN9vb9pYfv2A66W1IDr1P9iZuMl9S2UWdLHgAk48UmTpB8Bu5nZkha2I5FIJMpDmjZsOWZWcP7DzG4Gbi6wvzbzemihND/Nt39e0eEF6jo987pv5vUEnCM8ZnY5cHmBsnOAPQrsfxcX/DKRSCTaJsnbMJFIJBIVRxp5JRKJRKLiaGi/go3UebUi71tYpXVgfVzNNiMiLDuzU/gx2yV1YTUhwAkrw+k1RRYuxiIeF/MnjCkKR06ML6X74KTQ8j348J2wAvLt5WGVIkDHyMc9rCHuyXfM8qnBtBN7xVdZnFUVjmZ9S0T11yDj0EizXu0cvqY+2RhRRwLPV4X9C49fEdd51SisnlxZ+OnBmuNGVJ27RESOMzrFr9VNLNzmN2JfPFCncHr800DPpvBx51e1QsfSjqcNN5bDRmt5HQ7N9x30DhtRl1XvWzhJ0kRJO/pFy9MkTfb7D/D5RkuanlnA/OWWfoZEolRiHVciAbhpw1K3CmNjjrxay+twfTgeeNDMfuEXVB8D7Gtmdb7jy46DTvHCj0QikWhTVKIEvlQ22sgrj1b1OvT19ZX0qqQb/ajqMUld/MjtR8C3JI3CeR4uMLPcIukFZvbOBjwXiUQiUR7a8chrY3ZereV1GKMfcI2Z7Q58CJxgZv8A/gxcYWafAh4DtpU0Q9K1kvJHh7dmpg3XeaiS9TacuWx2qecmkUgkWk477rzayrThhvI6DH0juf2zM/W/WKgeM1smaT9gMPAp4E5J55vZcJ8lOm2Y9TY8dfsvVd4VkkgkKpd2bA/VJtSGG9DrcCFu2i9Ld9woqztrPA7B+RwWlKqZWSMwGhjtO8vTKLAYuhhvN4aj0x68zeJo2X7v1gbT+hwZLrfioYgpInDATvOCaQvfiUfM3a1XWDEQi3YMcX/CmJoQoOedfwumdZ/yVDDtxdNHRuvdtSp8jnc+YGG07NhpOwXT7q6rjpatqQmr8ywsROTfXWDbxrDe7a2q8Hdf0yF+XXy+dn4wbVVd/Gdji35hJWPHXvGytU9sGkyrjvgTjlb8HO/cFJbrbtsUj2hcG/n9nxa3VKQ+UnWXiAKyXFgFjqhKpU0889qAXodjgGO9VyGSvgS87DujUtu2i6R+mV0DgDea0aZEYoMQ67gSCSBNG24gNrjXoZndKelqYKwkA+YD32pmO2uBqyRtCjQAs4Azm1lHIpFItD7tWG240Tqv1vI6NLPrgesL1DeHjGehmf2uUP1m9iJQcA2amR1WaH8ikUi0CSpwRFUqbWLaMJFIJBIbgDJOG0o62psyzJJ0foH00yW9n1FffyuTdpqkmX47rRwfrU0INhKJRCJRfqyxPNOGkjoA1+CWJ80FxksaaWav5GVdJ5K9pF7AL3AGEga86Mt+0JI2pc6rFWmM+Ix17hFXf3X5MKxIa1wYVv3V0DNa74K3wwq7j4qo5LrWhc3m6ufFvYtif1Ixf0KIKwo77nl4MG2V3R+tt5qwNKzTTr2iZRe/EC5bFT+NdNkk/N0uWB5J61DPUXVhuVt15M97y53iYecUmZOZOa1HtOwWVXHfxBhVER/BFY3hz1NTJFp1S6IWt2R6KnbclXGRY3ko37ThIGCWmb0OIOkO4Dggv/MqxFHA4/6xDpIeB44Gbm9Jgypy2lDSTZLmSwq7obp8h2U9E73X4duZYe2lfv9oSQMDdRzjPQ5flvSKpO/E6kokWotYx5VIgJPKl7plDRX8lhWm9QHeyryf6/flc4L3gL1H0rbNLNssKnXkNRy4GhhRJN9hOMXis5l9V2TFGTEkdcYtMB5kZnP9+77rU1cikUi0Os0YeWUNFQpQaJyYX/lDwO3eA/a7OOHd4SWWbTYVOfIyszHAouw+Sef4kdFkSXdI6gt8FzjXj4wGl1K391AcJukF4ABcB7/QH7fOzKaX87MkEonEBqOpGVucucC2mffbAGt5vJrZwpwHLHAjsF+pZdeHiuy8ApwP7GNmewHf9VL4nEfhADN72uc7NzPVd1SBeroBU83sAN9JjgTekHS7pFOktZ4GFKtrraH4vI/eLtuHTSQSiWJYQ1PJWxHGA/0k7eBN0E/G/TauRlLWzehY4FX/+lHgSEk9JfUEjvT7WkSlThsWYjLOJPcB4IFIvmJTfY3Avbk3ZvYtSXsCRwA/waltTi+xrrWG4of2+XT7XXSRSCTaHmVao2xmDZLOxnU6HYCbzGyapGHABDMbCZwj6VicmcMi/O+kmS2SdDGuAwRnpL5onYM0k/bUeX0eOBTX4/9c0u7rWc/KfPsoM5sCTJF0CzCbNZ1Xs7ihW/gB+/3T8y0Y12ZVRJn06XFhxekA6xqt9+HIxd2vSCTlRfPDfnG3L4mEvQW6VtcF04pFPI55FMYUhfe/dFW03hv3uSiYVtWvb7Ts5dWvBdP6RxR0AJ0i5nlXfSseCbvhtXeDabc88bFgWu0R20frff5P4e9nZqe4fPKjceFreUlV3NJqaVX4Qt/Bwm3qF1EiArzTIXyhbxaJdgzQFFGhdm3B7Wh9keuiHJTT29BH3PhH3r6LMq8vAC4IlL0JuKlsjaGdTBv6qbxtzWwU8FNgU5ytU77XYXPrrfV2VTmSr2GizRDruBIJoJzPvNocFTnyknTIJDLRAAAgAElEQVQ7Tkm4uaS5uFhgX5O0CU7ZcoWZfSjpIeAeSccBP1ifQwE/lXQ9sAL4iPUcdSUSiURr055d5Suy8zKzIQV2F/IvnAHsldn1dH4en++wzOush+JS4HOBMkNLa20ikUhsJCpwRFUqFdl5JRKJRKI4FjfuqWhS55VIJBLtlIgjXcUjK6IoS5SPK7c7NXiyi11jyyPKpFgaQM+ImuoZwhGcd6iKR1JuyZWzlYXvmzoWqfiDSETdagsrw7YsEjH32xOHBdMe2PPn0bLjO4fbVFskYm6sVXVFvtud68N1vx25Nd1pVbzeKRHnqaYi3/xCIhGci2jEukXSi53HHpE/ooVV4TZ3iVwzEFcUxuqF+PdX7O/nkjm3tdj9cMFRnyz5z3TzR//dGm6LZaNFakNJy8rVEF/f8d4h4z+Spkr6cgvq6pvzPvQeh4szC4qf8Pu/Kyka7FJSV0m3Spri2zRWUq1Pa8zUOcm7erQpYh1XorKJdVz/bcQ6rv9mrKn0rdJoM9OGkvYGfgd8xsxmS9oBeELSbB8QsqU8bWbHZHeY2Z9LKPdD4D0z29O3cxcgZ/W9wswGlKFtiUQiUXYqsVMqlbLfuknaXtKTfgT1pKTtJHWQ9Locm0pqknSoz/+0pJ1w7hW/NrPZAP7/XwP/4/Otdn6XtLmkOf51X1/HS34rGPU40Nahkn6Sqf+3ksZJmpHxQuwNrPZ1MrPpGf+uRCKRaLO055HXhph3uBoY4T0GbwX+5B0rZgC7AYcALwKDvUv7NmY2C9jd788ywZeJMR83WtsXOAn4UyDf4Mz03oWBPB3NbBDwI1zwNHCrwn8m6TlJv5LUL5O/S6bOgtYOWW/DZ5fNLPJREolEonxYo0reKo0NMW14EPAl//oW4DL/+mmcfdMOwG+AbwP/Zo3flVj3GWYpZ7QauFrSAJwv4c6BfOtMGxbgPv//i/jQJ2Y2SdLHcWaSR+AiiB5kZq9SwrRh1tswJthIJBKJcmNFREqVTGs888r9YD+NC1GyNXARcB7OJWOMT5+GCxM9OVN2X9zoC5zZY26kmDV8Oxd4D9jbp69sQVtz04GNZM6NmS3DdWz3SWrCLVx+dd3icWoiQ/PP9Z4XLfv+u+GIx7ucEYs83MQFI8J95tkrwt6HW3aNR8TdvE9YrzN95ubRsmNqwh53hzXEozDvfMDCYFqxiMcxj8KYovD4KRdH631z37Av4uIiirTzvxf2iFz22OvRsl36hb/7ex8KfwcfVYmTbg1HnT7iqnCovKnPxL/bPQYvCKYp4l0IMHPspsG0Xj2XR8vetXSLYFrnyH3wlmFrSQA2awhnWFgTn7zaqjGcHvNbLBeVOB1YKhti2vBZnF0+wCnAWP/6BeBgoMnMVgKTgO+wxvXid8AFOcWe//9HwOU+fQ5r4sNkVYibAPPMrAn4Gs7xuGxI+oS38ceHAtiNCvI3jHVc/20UM9etNGIdVzFiHVclEuu4/psxU8lbpdHSkVdX7y2Y4w/AOcBNks4D3gfOABfIUdJbwPM+79PAEGCKT58k6WfAQ1oTsfhTmeCPvwPukvQ14KnMMa8F7pV0IjAK5z9YTnYErpMkXGf/CJmQKYlEItFWac8jrxZ1XmbBVYMFb+vMbHDm9W3AbXnp9+GfO0m6FPiVpKPMbJWZ/Ye1fQr/z5eZmbf/Ar9/DrCHfz0aGF2gPUMzrw/LvF7AmmdeI4CCcyhZH8REIpFoazRVoBCjVNrMOq98zOz8jd2GRCKRqGSSYCORSCQSFUfqvBKJRCJRcbRn69qyGfNKasSJL4STmp9tZs+2sM4BwNY+/DSSTsepD3OOF5PNLOhN6KMg/8TMjvFlB5rZ2ZKG4taZvY+T3Y8CzvKKxVBdxwMzzOwV/360r3tCqEw+l2x/SvBkb90Qv0Pq1Rh+8rq0KiwandQprgM+ckX4+1/YIS7cXB6RPQ/5cVwJ9/hlYV3NN5fHT+nYj+0UTFu8rCaYdnl1PD7ExxU2It6qKX4uznkpbOp72n7/Ey27lcIuuF0jguDXLS4d307h76CIOpwD68LHrS9yMx8zVu7eFD9yTF/wZqfwvfbrHeL1do+Y+sZk9BD3TZzbArn7NhEZPcB33/p7i4dNr+95ZMk/8B+f8lhFDdPKKZVfYWYDzGxvnGjiN2WocwDrBoO80x9nQKzjKoEr/ALj3YA9gU8WyX88xd0+EolEos3QnqXyG8qWugfwAYCk3pLGeAulqTnPQEnLvJfgi5KekDTI+wu+LulYv6ZqGHCSL3tS6GAh38MS6YQbfeXa+21J4yW9LOle7yp/MHAscLlvy46+7IkFvBATiUSiTdDYqJK3SqOcnVfO5+8/wF+AnCXBV4FH/Shnb9ziZIBuwGgz2w9YCvwK+AzwRWCYma3COXHkRlp3+nK5zmySpDNa0N5zJU0C5uGmA3Ptus/M9vcjyFeBb/rpz5HAeb4tr/m8hbwQ1yLrbTh+2awWNDeRSCSaRxp5lUZu2rA/cDQwwi/sHQ+c4Z8z7WlmS33+VcC//OspwL/NrN6/7hs5Tnba8G8taG9u2nBLoJuknCvIHt6lfgrOIWT3SB3reCHmY2Y3mNlAMxu4f234WU0ikUiUG2tSyVulsUGmDc3sOWBzYAszG4Mz5H0buEVrgj/W2xq1SBPeV9CLJpqrggz5HpbS1npcJ3qo3zUcJzbZE/hlkfoKeiEmEolEW8Cs9K3S2CA/uJL64zwGF0raHnjbzG6U1A1ntht2/VybpUD3EvLNwfkejmNt38NS2iqc52Ju2rA7ME9SNW7klVM2ltqWIDFd0lsxiRawLKIonBtRWu2zKq6SG9Ul3KrORS7o2kj6iCvi5rpUhz/Pib3i8T3vrqsOplWFk+gfCckO0CkydVLMXDemKLz5xd9Hy14wMBShB6ojbTqwiMHLuwp/t5HTBMCc6vBx36yqD6YBbBr5WWkqcr+8WSTy98Kq8OepjagJAbq2YFpsSaTq2DUD0C2SXkwhWQ4qcURVKhvimdck4E7gNB/H6zBgkqSJwAnAlc2ocxSwWzHBBs738HuSnsWN+Eoh98xrKq4Tv9bv/znORPhx4D+Z/HcA50mamBFsJBKJRJulsamq5K3SKNvIy8wK3uKb2c3AzQX212ZeDy2UZmaLgP3zig4vUFfI93A03tPQzIbnyvrjrXXMTF3XAdcV2P8Ma0vlD8ukrfZCTCQSibZCJU4HlkrldbeJRCKRKIkmU8lbMSQdLWm6pFmS1vGelfRjSa9ImizpSf/IKJfWmFGJjyzHZ0sig0QikWinlEsCL6kDcA1uOdNcXET5kTnHIc9EnIvRcknfAy4Dco97ikadby5p5JVIJBLtlDKqDQcBs8zsdb8G9w7guLWPZaPMVnuWPQ9sU+7Pk6XiRl4ZD8Ucx/vYXaH8c3B3AwskLTOzWh+l+VVgOs6L8SPgjEzgy0L19AUO9nHIcj6LA83s7FLb3n9VOK2Y59viqrBq8IwTwz6BQ+6Je6+N2H9ZMK1pefyKfmvqJsG0sdYjWnZGh7Bi7ayquGdfTU24bJdNwmmdauPn+M8zwn9r53+vU7TshdeF646pCQF+M+GSYNqDe/48mDaoz7xovS+8/bFg2meHLA2mAUy7I/zTsPMnFkXLKuJ5WTc/fj2+/ErvYNrmncIK1ms7xPWTu1p4xctHRVSoPSOKveVFbv9jit2aVhg7lDIdmEPSmcCZmV03mNkN/nUf4K1M2lzggEh13wT+mXlfI2kCblnTpWb2QMkNC1BxnRflG36+lqtH0neA/wVOi+Tvi3MLuS2SJ5FIJNoMzVER+o7qhkByoV6wYNcs6VRgIGv7xW5nZu9I+jjwlKQpGaei9aJdTBtKOl3S1Zn3D3tH+VLJejH29Q4bL/ntYJ/nUmCwf+B4rt+3taR/SZop6bJyfJZEIpEoF9aMrQhzgW0z77cB3snPJOkI4ELgWDPLmThgZu/4/1/HKcD3af6nWZtK7LxWryeTdH8L6tnR1/Ea8GPgD37/fOAzZrYv7mHjn/z+84GnvS3VFX7fAJ9nT5znYvbLBdb2NnxiefI2TCQSrUcZ1YbjgX6SdvCm6Sfj/F5XI2kf4HpcxzU/s7+n5OL+SNoc+ASQFXqsF2naEPALoG/AeTJWA1fLxRJrBHaO1PGkmS32dbwCbM/a88JrDcXv7h2O55VIJBLlplxqQzNrkHQ28CjOPekmM5smaRgwwcxG4mIt1gJ3O+Mi3jSzY4FdgeslNeEGTJfmqRTXi0rsvAqR9TaEZvob4u4gcia/5wLv4Rzwq4CVkXJ1mdfJ3zCRSLQp1j9U5rr4oMD/yNt3Ueb1EYFyz+Jmp8pKe/mxnQN8X1IVThUzqJnlDwFyDw83AeaaWZOk03B3GVAGb8OYonB65/hXsSJyAzXr3nBav6q4/92MZ8IqusWNcYVdh8hM+eKa+CCzO2H15C1N8dMcCyC8YHlYbXjVt+L3NHUzw3/qyx57PVq2K32CaTF/QogrCo+bcnEwbdweP43W+2xN+Hob+GTce/Kjxp7BtAljtoqWrVH4uB8WcVVcHIne3WFV+Pur7hK/3mKKwq2KxLJaHLEHLeYRuSjiiVnEzrQsWJEo0ZVMe+m8ngFm4yT0U4GXSiizo/c2FC48y7f8/muBeyWdiPNWzOnQJwMNkl7G2Ux9ULbWJxKJxAagoQLjdJVKxXVeWU/EzD7DOcAXyt83v6xfF9YlkH8ma/skXuD31wOfzss+PFPumBKan0gkEq1GGnklEolEouIo5zOvtkbqvBKJRKKdkkZeiUQikag4/utHXhk/QeEk4Wd7+WNJSBoKLDOz361PI9cXv2juJeBoM3vU7+sLPGxmezSjnlrcGoYjgSW4a+LPZnZjc9oztkt4Tfgxq+J+frMLP6IDYLLCPoJbFvmGb4sICmuK3LXtXh+ufI7qgmkAfSx84INXxmVYr3cKy7/2awif44bX3o3Wu3N92AuwS7/w+Qd4fVb4+ysW8TjmURhTFA6aGjd1Wbn7BcG0rX7WP1r2mYvDeqSXOjVEy+7eEFYF1hUZCNRH0usV1vbtXORXOhaFeWXEixGgR6TuD4qUjUUbfzfSpnLR2I5HXqU6bKzwzhJ74wQMvynHwSVt6JHfEGCs/78l/AWnLuxnZvvgFjP3ys/kwwYkEolEm6BJpW+VxvrYQ632AQSQdJ6k8T4A2S8z+y/0gcueAHbJ7B8t6deS/g38UNL2PnBZLoDZdj5faP9wSddJGiXpdUmflHSTpFclDc8cR8CXgdOBIyVlbwc7SrrZ132PpK6SPivprkz5wyQ9JGlH3Lqx/zOzJgAze9/MfpvJN0rSbaztdp9IJBIblSZU8lZplNp55fwE/4MbhVwMIOlIoB/ux30AsJ+kQyXth/O+2gf4ErB/Xn2bmtknzez3wNXACDPbC7iVNV6Cof0APYHDcW4YDwFXALsDe3pbJ3D+WbO9c/Fo4HOZ8rvg7P73wk0Dfh94HDhQUjef5yTgTl/vy7mOK8Ag4EIz2y0/Iett+NLS5G2YSCRajzIa87Y5mjtt2B83ZTbCj2yO9NtE3LOl/rjObDBwv5ktN7Ml5Bk44jqFHAexJszILTi3i9h+gIf82q4pwHtmNsV3LtNwoUvATRXe4V/fwdpTh2+Z2TP+9d+BQ8ysAfgX8AU/nfl54MH8E+FHlJMkZR2Vx5nZ7Py84LwNzWygmQ3ct/tOhbIkEonEBqGpGVul0exnTmb2nHcG3gIn4PiNmV2fzSPpR8Q783D0xHC57P6cGqCJtf0Fm3BTgh2AE4BjJV3o27mZpJzvUP4xcu/vBM4CFgHjzWypN9zdW1KVmTWZ2SXAJZKyURxjnyeRSCQ2Ck2qvOnAUml25yWpP87vbyHOYfhiSbea2TJJfYB6YAwwXNKl/hhfwFnlF+JZ3BTjLTiXjLFF9pfCEbipvqMy7b4ZOB54GthO0kFm9hxrRB3gphf/CnwbPzo0s1lyEUB/JennZtbon581+6o4SeHotfdXxyMPN0SONqVpcTCtt+IquXct7DtcE/EfBKiqDtfducigfoXC93qvdo4f962qsNqtOnJJ3/JEWE0IsDTy13DvQ5tHy25XHfbzezfyWSEe8TjmTxhTEwIcOi2sq3p5wI+jZZ+MKDo7Fvlup3cMX6z1RSao6iJjgOqq8HH7Nq2/9uutqniE7VoLH3fLIkqH5ZHkzZsRKHJ9iX+yyqbUb7yL9wEE96N9mpk1Ao9J2hV4zlvgLwNONbOXJN0JTALewHUYIc4BbpJ0HvA+cEaR/aUwBMiP9XUv8D3flleB0yRdD8wErgPwHdPDOJFHNqryt3BS+VmSFgErgJ81oz2JRCLR6lSiirBUSuq8zCx4G2ZmVwJXFth/CXBJgf2H5b2fgxNf5OcL7T89L88eBdLuKVBuJGueva0jrMjkOxs4O2/fEuA7gfyjcSO2RCKRaFNUooqwVJLDRiKRSLRTKlFFWCqp80okEol2yn/9tGEikUgkKo9KlMCXSqnehpsBT/q3H8OJWN737weZ2aq8/L2Ar5jZn/37nXBrsqYDnYEXgG/5tVUtRtIjQA8zG5zZ93fgHjN7oBn1fA74JS5i8kqcsOM8M5tbpFxHYIGZbRrL90TjJsG0k7stiLbtjUXhsucMWBJM+/X0bsE0gGMbwirHPg3hqMQAW3UJqydHNYXbC3Fft082xlce1HQIXzZb7hQ+F7VHbB+t9x9Xh7VZx9yeH8ptbX5++uPBtGLRdj87JHweYxGPi/kTxhSFe0/6Q7TshYd+L5g26YO48nJQn7CHZENdXEn66vzNgmk9q1YF00ZF1JEAnSJBGT9WRPUXC9L8QRHBYKxV81vD27Adj7xK0mqa2UK/SHkA8Gfgitz7/I7L0wv4bt6+6b78nsAOuHVYLcZ3rHsCW+UspNaznr2BP+LUkv1x7iB3Auv84rWCJ2MikUi0mPa8SLnFCw0k/VTSVL/9wO++FNjFO1Fcms3vR1vjgT6+/Lck3SfpYUmzJX3P+yVOlPSspE19vnMlvSLpZT+qyvFl4AFcR3NSXvOOkvS0pBmSPuvrmSAp67U41ndc5wMXm9l0304zswdyThw+3yWSxgBnS9pR0guSxgNDW3oeE4lEotykziuApEG4BcSDcHZO35e0F64jmO5HZufnlemC8zp8NLN7d1zHcyDwW+AD797+InCqz/NTIOdsn5WyDwFu91u+e/y2wCdxi6RvkNQZ18l9xbdlG2AzM3vZt+GlIh+5h5kdamZ/BK4CrjSz/VkzhboOWW/D55bNLFJ9IpFIlA9T6Vul0dKR12DgXu9huBQ3AjokkHcXv9B5ITDLzKZl0p4ys4/M7D3cQueH/P4prPEqnAb8XdIpOBcPvKPHdsDzZvYK0ME7gOS4y1s6TQfewvku3gWc6NNP8u/XQtKWftQ401td5bgj8/og1ng03hL4zGt5Gx5U2y+ULZFIJMpOGnmFaU5/nXvmtRPwSS+OyJHvT5j1Lsw9XzoK97xtEDDB+xeeBGwGzJY0B9eRnZypax0PQzN7A1gmaTfWOMeD6xz39Znm+7b+FchGEswqCSrVjDmRSPyX0NiMrdJoqfBgDHC9pMtxwprjcB3CUpxibx3M7B1JF+CCWv6jlIP4jmobM3tK0ljcVGVX3DThEWY23ufrBzzMmmdQJ/rnY/1wU4i5ebs7/fE7+xEbwGXAXZLG5Z57+WOEJE7P46Yf7/DtKcq8iIfagg/jqsAtasKqs4YV4XuIrkXuTzZtDN9zze8Q18ltGomkPLgqrKADeLqp4OUBwPNV8XPx+dr5wTRFPu7zf4pHd57SJfx5jrhqRLTsgXV9gmlzquP3eNPuCB/3o8aewbRYtGOI+xPG1IQA24+5Lpj2yL4XRct+tLhzMG1lXfya6hL5Gf2gKRx9e4Xi95HdIv6EO6+Ki57f6Rj+fuqKHLc2Mh/XGpFr2/M6rxaNvMxsHO5Z03jcj/l1PjzJe7jR0ZR8wYbnHqCXpINKPFRH4DZJk3HPpX4LbImT7U/ItGcmUOfjiQHMwnWwDwFnZpSRdwNfJTNlaGYTgR/740yX9AxulJidKsxyDnCupHGsPTpLJBKJNkF7njZcn5AoQ/PeX4YbteTny1f+DcikGU4gAfBcXrltMq//kkn6RIHmbFvguHv5l6fmp2XyvEOBGx8ze4g1z9vy0w7Jez8LOCCzK2zhnUgkEhuBSuyUSiWtV0okEol2Snt+KL/hA8okEolEYqPQpNK3Ykg62j9SmSXp/ALpnSXd6dNfkNQ3k3aB3z9d0lH5ZdeH1HklEolEO6VcakMvmrsG+CwupNQQr9jO8k3cGt2dgCtw2gR8vpNxj4qOBq719bWIVpk2lLQV7sMcCHyAU/BdZmb5ASM3dDt2xwWp3NvMVvh9jwC3mNkdeXkPAx4EZuM6+fnAV81svqTTgYFmdrak44EZGdVikH4N4e9rUsd4xON3FFZw/XSXcDTkR2a8Ea33whu+GExrmjI5WnbqNeHbtbfr44rB6TVhn7rjV8TvqVbVhS/bmdPCXo0zO8WVbk2RJwRTn4n7+dVHmvxmVdwjcudPLAqmTRizVTDtpU5xlVws4nExf8KYovD7Lw2Llv3orG9GUsOqWYBl/w57G1ZHvp/HVgV9AgD4cvU6j8dX83DMvBDoZeH0+iJqwxidW2FlcFP5Jg4H4dbnvg4g6Q6cujz7u3cca5Te9wBXy0UpPg64w8zqcMuaZvn61tI7NJcNPvLyjX8AGGNmHzez/XC98DbxkqvLl01R6hdG3wdc6Os+Hqgu0HHlfh2f9i4he+EUlWcVqPZ4IsEtE4lEYmPRHLVh1g3Ib2dmquqDM3rIMdfvo1AebwO4GLcOt5SyzaY1Rl6HA6tyDvMAfqHwVX5O9BYgd5t+tpk960c9vwDm4VSKu0l6AKcurMHZMt0AIOmbwM+Ad3DruOr8iGgL3KLmnFnvj7xP4TBgoqR7cB6MX/D1DAW2xjl6LABuyLXXd8DdcdJ7MvsPBo7FLbr+P+AEM3utBecqkUgkykZzxl3+N/WGQHKhYWJ+9aE8pZRtNq3RecU8A+cDnzGzlX6B8e3AQJ82CNjDzGb7998ws0XeG3G8pHtx4VV+jnPGWAo8Bbzs81+Jc78f693mHwV2NbPlkn6CW//1B782LMd+wCFmtsJ3oIO9pdVmOHeN/8023ne0I4GHzeyeQh/Q372cCXDqpoM4tFuyiEokEq1DGaXyc1l7adI2uAFDoTxz/ezVJsCiEss2m1YXbEi6xjvDj8eFOrpR0hTcwuHs9Nu4TMcFcI6kl3GLobfFuWYMAv5tZovMrN7XkeMI3JzrJGAk0ENSd1i9nutD4Nq85o3MPQvz5KYNtwX+RoH1bMXIehumjiuRSLQmZVQbjgf6SdpBUifco5+ReXlGAqf511/Gedaa33+yVyPugPvtHtfSz9YaI69pZGJ3mdlZkjbHOWOcC7wH7I3rSLPKg9U+gn4UdARwkB85jcZNH8ZOeZXPH3pCXGhheSwK4kjg3kh6IpFItCkayyTYMLMGSWfjZrA6ADeZ2TRJw4AJZjYS5wV7ixdkLML7zPp8d+HEHQ3AWWbWYjvF1ui8ngJ+Lel7ZpYzTOvq/98EmGtmTZJOI2z3tQlOgrncu8Yf6PePA66Q1BM3bXgCzoke4DFc6JTLASQNMLNJLfgchwCFnmcFfRzzmdUx/H2d3LQ8WvbNlWH1Xoc+YYXWdp3CfnAADY89FUxbOT0e0bj31uHLp2FufFC/CeF21SiuztuiX7hdW1SF0z4a1zta78tdwpMsewyOR7p+d2z4+fOmRf7MVBW+B6tR+JrZvaEmWu/0juF6Y9GOIe5PGFcTQrdr/hpMa3xzarRs1b/DHpKNkXvVHavDHpAAHSK/4f2a4irUmPh1YZGJua4RT8XWiKRcziOY2T/I86M1s4syr1eyJmJHftlLgEvK2JwNP23oh43H40QNs70X4M04kcW1wGmSngd2Jjzy+RfQ0XsbXoybOsTM3gZ+DbwAPIHr2Rf7MucAAyVNlvQK60Z2LoXBPjTKy8DXgP8pkOcOIBc8c8f1OEYikUhsEJqwkrdKo1XWeZnZPNYOVZJlr8zrC3z+0cDoTPk63OK4QtxmZjf4B4T340ZcmNkC1o2snG1T37z3Q/Pej8aN+AqVHQ4M96+fIUnlE4lEG6TyuqTSaQ8OG0O9KGMqbkHxAxu5PYlEItEmSK7ybRgz+8nGbkMikUi0Rcol2GiLVHznlUgkEonCVOKIqlRarfNqK/6GeW16ENjSzEoNitkiPiTsRde9NuxPCNB5Ydj70D4KRwjuqvhX3LhwcTCtbkncmasqIuHq2S3uYVfdGIm2a/Hjduy1fpftkqp4vTHtXkwRCNC9KawKbCoyO183P/wT8yFhJVxdkbU59ZG77oa6+LmIRzyOf7cxRWGH7faIlo3RORKJvKaYi1wLBiC1kR5gSYf4lxDTg7dGJGVrxyOvVnnm1Zb8DTN1bopz5tjUL5wrlCeNTBOJRMXSnp95tZZgo6C/oZldJamvpKclveS3g8EtTJY0StJt+LVbkh6Q9KKkaVnTSEnflDRD0mhJN0q62u/fQtK9ksb7LRuN+QRc1OQ7yCghJQ2X9AdJo4DfSuom6SZffqKk43y+gu1OJBKJtkKSyrecNuVv6NOGAL/EOXzcA/wm06adgSPMrFHSr3E2J9/wo7Vxkp4o0u7VZL0NB/fal127f7ykE5ZIJBItpfK6pNLZKNNikq7BOVasYo0H4QDcFPHOmayF/A1zAahy/oYfw/sb+rrvztRxBM6RPlc+52/YFdgJGGtmJqlB0h5mlpusvztjX3IkcKw38wX3aGQ7nLFkqN2ryTo1f6fvie35WkokEm2MhnbcfbVW59Wm/A0lnQH0xAVGA+iBmzr8v/zj+vpPMLPpeXUMjbQ7kUgkNjrtWbDRWp1XW/M3HAIcbWbP+f07AI+zpvPK8sKwXYEAACAASURBVCjwA0k/8KO0fcxsYjPavZreFvbze3LJFtGy20aUilNvDfffu1V3DaYBTBsVvgTqi0R6XRrRs3Qr4ru5dadw3c/XxE9l7RObBtOqIpFtlxZRDHaLPAKeOTZ8TIg/8N6sKf5o+eVXwp6LizuEz0V9EbVhXaRVr84P+2ECdIno5GLRjiHuT1iMQVPDgRuu3ycc3bmYAnJRxEdwWRG5wm4N4eu8U5G/kZhbe4+I72G5qEQhRqm0imCjLfkbygXA3C5X3tcxG1gi6YACx70YF7plsqSp/j3NaHcikUhsFKwZ/yqNVnvm1cb8DdexADezff3LF/L2rwC+UyD/zELtTiQSibZCex55tZd1TEMlHYF7BvYYyd8wkUgkaLLKG1GVSrvovJK/YSKRSKxL8jZMJBKJRMVRic+ySqWsnZekbYBrcPGtqoCHgfPMbFUZjzEU+DbwPq79/+tDULe03mVmVltg/y7A9cCmuAXRT5vZmV66/yAuDAvAAjM7InaMmDpms8b4RTavOvxVfbzrkmDaylXxaLvLIz6CXSNRfAGWVYU/0eIi4suFVeHPu0uRq6U6ohxb0Rg+TztY2AMS4L2OYb/FXj3jka5fXByOdL2wSMTczTuFlXIdIt9fveIRgKsj30/PqvhJ/qAprIytLvIkJRbxOOZPCHFF4XcmDgumnTPw/Gi9nSOqwO0i1wxAY0Qx2FBE8dkj8nFndAgriMtFe37mVTa1ofcvvA94wMz64RR4tZQ59LPnCjMbgAs5fZOkkj7HenoV/il3PDPbFbgqk/a03z+gWMeVSCQSrU17tocqp1T+cGClmf0NwDtUnAt8Q9L3JT0o6V+Spkv6Ra6QpFMljZM0SdL1ORNeScskXSLpZUnPe1f6tTCzV4EGYHNJ20t60svin/R2UIW8Cmsl/U3SFJ/3hExbCh2vNzA3c8wpJBKJRAXQnqXy5ey8dgdezO4wsyXAm7jpvUHAKcAA4ERJAyXtipOyf8KPpBp9HoBuwPNmtjcwBjdVuBZ+XVYTbgrxamCEme0F3IobMeXIeRX+D84HcbGZ7enzPlXkeFcAT0n6p6Rzvb9hjsG+050k6cJmna1EIpHYwDSalbxVGuV85iUK+0Dm9j9uZgsBJN2H8zZsAPbDmewCdMEZ3oLzPXzYv34R+EymznMlnYpz1DjJO18cBHzJp98CZJfqZ70KjyCz3szMPogdz8z+JulR4GjgOOA7kvb2+Z42s2OiJyVjzPuFXoMYWLtTLHsikUiUjUqcDiyVcnZea/kXAkjqgTPQbWTdjs1wHdvNZlZogW+9d+bAl8+29Qoz+12R9mSPl+9VWOgbDR7PzN4BbsI9X5sKlBxRL2vMO2z7U9rvlZRIJNoc7VmwUc7O60ngUklfN7MR/tnV74HhwHLgM5J64UzIjge+4fc/KOkKM5vv07ub2RvrcfxncSOqW3BTj2MD+XJ+hz8CkNQzM/paB0lHA0+aWb2kjwGbAW8D/ZvbwNiFNDPi9QewIuLZ99yqsH/hwMb4zPAZ9ZODafvU9o2W3SpSdYeoXzL0bwor+2Z0ivfxoyMqu5rqcKP6FVGV9Yh8QXctjXtPftAhLCurLeJhd22H8Oep7hI+FzsX+WXq2xT+vKM6xdWgsevtsVXvR8vuWN0zmFY04nHEozCmKPzThEujtV40sJBtqWNKx7jqr39j+PvpWsTb8K0O4S9p0yIRw8tBJT7LKpWyPfPyo5Yv4p5nzQRm4JzW/9dnGYvrWCYB95rZBDN7BWeG+5j3LHwcJ5BYH84BzvD1fA34YSDfr4CekqZKehn4VJF6jwRyeR/FSf/fXc82JhKJRKvRntWGZV3nZWZvAV/I3++fZ803s7MLlLkTuLPA/trM63twASMxs6GBY8/BKR7z95+e934ZcFozjvdj4McF8o8m472YSCQSbQ2rQCFGqSSHjUQikWintGd7qNYKiTK80KgrkUgkEhuO1po2lNRL0uOSZvr/13nwKWmApOckTfNrbE/KpA334bJyS48GFDtmq3ReiUQikWh9zKzkrYWcjxO29cOJ9wqpa5YDXzez3XFLj/6Yt272vIxj0aRiB2wT04aSanALgzvj2nSPmf1C0jG44I9VuICQV5rZ9etR/xzcmrAm4D3cCWyR6ELS6cDA5owoVyisPNqyMa486hCJAtzfwv53y4p4r51bG77BKXZx1EWu94h1IQALIn5/mxRR5+0c892LHPediPIL4v53nYuoJ7tH2lxMkbZr5Pv7KKL6K+aZGKNYBOBukc/z5epto2U7xL77ItdFLOJx7PuJqQkBhk34VTBtaJGyiyIXc5E/L3pGomgX80UsB60oxDgOOMy/vhmnB/hZNoOZzci8fkfSfGAL4MP1OWBbGXnVAYd7d4sBwNGSBuPWR33B79+HlgkkPuXrmcAaBWRRcnZViUQiUWk0xx5K0pmSJmS2M5txqK18wOFc4OEtY5klDQI6Aa9ldl/ipxOvkBReS+NpE52XOZb5t9V+W4W7+V/o89SZ2XQASSfmpO6Sxvh9p0u6z/snzpR0WYFDgRvh7eTLDPEeh1Ml/TaXwfsqDpP0AnCQpP0lPeuPN05Sd5916xKOl0gkEhuF5thDmdkNZjYws92QrUvSE/63Mn87rjltktQbt2zqDDPLDbUvwK2d3R/oRd6orRBtYtoQVo9wXsR1LNeY2QuSRgJvSHoSZ910u/+wFwFHmdnbeXOmA3AjtDpguqSrvHw/yzHAFElbA7/F2VN9gFtrdryZPYDzOZxqZhdJ6gT8B2dDNd67hqxoxvESiURio1DOacNY5AxJ70nqbWbzfOc0P5CvB/AI8H9m9nym7nn+ZZ2kvwFFAwy3iZEXOBd6b867DTBI0h5m9i3g08A43Ie5yWd/Bhgu6duwVuCoJ81ssZmtBF4Bts+kjZI0CegB/AbXw482s/fNrAFn5nuoz9sI3Otf7wLMM7Pxvp1LfP5ixwNYayg+aems9T09iUQi0WxacZHySNasnz0NF+twLfxA4H6cgfrdeWm9/f/COTBNLXbANtN55TCz/2/vvMMkq6r1/X7EGRhAsojkKBcJElXEiKKigigwyk/BgKhXMVy4gl5BBAx4UUREUQREiRIURKISVNIAQwZRVEAuiJIZEAa+3x9r1/Tp6qp9TlV310y3+32efrrq1Fln766qPmvvvdb+1iNEbGvb9Pwm298khHJ3TMf2JJQ5VgJmSlo6mVerDbbrIb42ZbG8L7WRC5c+XRHy7aaFWNde6++ZMxXfaLEiylsoFAbHALMNv0pIAN5J3Ku/CpCqh/wwnbMTMUHYrUNK/E8l3QTcBCxDKCFlmSeWDSUtSwjjPiJpKqH8/jVJr0lKFhBLdH9N569h+yrgKklvI5xYr1wFHC5pGWLZcDrDC022uJ2IbW2Wlg0XIyfAlmHBjL/8V03m0cKZ71Yuw64uH+3ujCZfnT7hSjW6iTmWfra77V8XyP8jrfR8f2laS2cyvyBGH91YLl8AmPsX6D91LJdRuHymjO/TmQxUgHsyVYtfWPNerP1Md72/czJ6iwBrPZ+v8Jzjicw3NlfxuE6fMJdReEAmExHge5nqzs/UfOy5KsyDyAMcVLaho2LI6zscnwF8KD3+CfCTLvYj1JHqmCecF6FneHyKe80HnApcCpwi6fuEs3gS2C2df6iktYhZ0cXADYRza0xam90X+E26zrm2R0x1bT+TNtMdkRzrU4RzLRQKhXmaySzMO084L9s3EokP7byly/nv7HD4uPTTOme7yuNVu1znRODEDsentT2/BtiyaXuFQqEwL/CcJ29RlHnCeRUKhUJh7CnCvIVCoVCYcEzEUidNKc6rUCgUJikl5lUYE3J6cS/5Vz5b6p4Fu39Uz2Yymh6uERms0xHM8WjGdK1n8u3es2Au8zJvOy2T+Zf7a56vyZ7MvY9Lz86nG86ar7uK2GM1b/GSmezJRzPiZLnKz5Cv4FyTMMh9C3T/vi1VsxT1VObvnVbT5/Vmd283l7mXq3YMeX3CXDYhwJ7XH9j1tcNflrd9NKNn+lRtLvDoeX4SLxvOc/u8OiHpubQn4GZJp0nqXvc+f50n2p5/WtLTkpYYm54WCoXCvEMv2oYTjQnhvICn0gbj9QnNwz3H6LrTgWuAHTq9KKnMTAuFwoTlOT/f+GeiMVGcV5XLGRLW/UxFHPJTrRO6Ha8iaQ1gGqHUMb1yfLc0uzsbuCAd21vSNUnx+EuVc8+SdK2iuFovCsyFQqEw7jxvN/6ZaEyomUWaCb0ZOE/SJsDuwBbEJuOrJF1KOOQRx21f33a56cBJhDNcR9Jytltiki8HNrD9kKQ3AmsBm6fr/ULS1rYvAz6QzpkKXCPp9LTTvNrnPYA9ALZfanM2n7bW2L4phUKh0IWJuBzYlIky85qaRHVnAHcDxwBbAWfafjKVUzkDeFXmeDu7ACcnlfozgHdXXrvQ9kPp8RvTz/XAdYRsf8sDfVLSDcCVhETVCM9U1TYsjqtQKAySMvOa+zyVFOfnkNSHO1ErMidpA8LRXJgusxBwF3BkOuXJtut9pb2Cs6TXEDJRL7c9S9IlQPeSuMCzmVHQNVPyNS+nZb5buarEdfqDf81UF55aU213ViaT6o6F6j6G7n9QXfXPW2rL1HVmkZr/z9zn888p+ffxX5n3oq5q8azMpXM5dA/XaBsul8lifLhm2JrL+Hy2Jhv0n5ksusfmz/c5917lKg/XVavOvVqnT5jLKNzruu6ZiABf2eR/ur62SO03ffSUmde8yWXA9pIWkbQokXRxeeZ4lenAAbZXTT8vAlaUNKKkCXA+8AFJ0wAkrShpOWAJ4OHkuNZlpHxUoVAozFWe83ONfyYaE2XmNQLb10k6jqj1BfDDVlyr2/EKuxCxsypnpuMPtLVzgaSXAFekWdoTwK7AecCekm4E7iCWDguFQmGeochDzWXahXIrxw8DDuvh+LT0e7UOr32m8vS4ttcOBw7v0IV2B1goFArzDEUeqlAoFAoTjjLzKhQKhcKEYyJmETalOK8BktvDvnBNkuQTmQyvXEbhgzXahotn9O9qc6Eyl362zjbDkjVVfnMahLmq0nU8kXmvlq/J2nxg/u62i9ZkwuWqZOc0+XIZqACzMs3WfbbTavqcY5HMd6ouLSBXJHvxjPE9maxZyH+ncpqJkNcnzGUTAux77Ze7vvb+TT6bb3gMKNmG8ziSLOmEyvMFJD0o6Zwau+UlnSPpBkm3Sjq35vxVJd3c5bVLJG3a319QKBQKY89kloeaLDOvJ4H1JU21/RSwDfC3BnYHEhuSD4c5+78KhUJhUjCZY16TYuaV+BXw1vS4Jf0EgKSlkg7hjZKurDipFYB7W+fZvjGdL0mHJm3EmyTt3N6YpKmSTk7XPAWYOl5/WKFQKPTDZFbYmEzO62RgF0lTgA2AqyqvfQm43vYGwH7Aj9PxI4FjJP1G0uclvSgdfyewEbAhoaJxqKQV2tr7KDArXfNgYJNOnZK0h6QZkmZc+8QfR/9XFgqFQkNsN/6ZaEwa55VmTasSs6722NVWwAnpvF8DS0tawvb5wOrADwjNwuslLZvOP8n2c7YfAC4FNmu75tbATypt39ilX3O0DTeZtubo/9BCoVBoyPO48c9EY7LEvFr8AvgG8Bpg6crxTvlEBkgCvCcCJ6YEj627nN+Jnj7xXCZV3bQ9l6V1bybTatmazL2HM1mMi9VlnGVenlLzFuayAv8+Xz4nbWomm+3pTLN1mnw57qvJZlslk4141/z5v2dKZgy5QKbLj8o8lfmblsl89n/P6GFCPhtx4ZrvRe7adVmOuezXP8zfvdr4C5y/ck4Xse5bkat4XKdPmMsoPP7a/61pefRMxBlVUybNzCvxI+BA2ze1Hb8MeC/MEdT9h+3HJL2uVZVZ0mLAGoRq/WXAzpLmTzOxrRmSm+p0zfWJpcpCYWDkHFehACXbcMJg+146yzgdABybdAhnAe9PxzcBviNpNuHIf2j7GkkziJpeNxADs31s3y9p1co1j6pccyYjnVuhUCjMVSZiIkZTJoXz6qR9aPsS4JL0+CHgHR3OORQ4tMNxA3unn+rxvwDrp8dPEUK+hUKhME8ymZcNJ4XzKhQKhcJIJrPCRnFehUKhMEkpM69CoVAoTDgmc8yrp01s5Wdsf4A9/l1sJ1p/i+283ea/o235Gf4z2VLlJxp7/BvZTrT+Ftt5u81/R9tCheK8CoVCoTDhKM6rUCgUChOO4rzmLkf/G9lOtP4W23m7zX9H20IFpSBioVAoFAoThjLzKhQKhcKEozivQqFQKEw4ivMqFAqFwoSjKGwURiBp8dzrth8bVF8GhaSVbd89t/sx3kh6mEwJK9tLNbzOarb/XHesUBgvivMaMJJeCcy0/aSkXYGXAYfb/msD22WB/wbWA6a0jtt+XZfzP5O7nu3Durx0C3GDE/Ai4PH0eBrwN2Dlur52Q9I0209kXn+n7TPS4yVtP9xvWz1yFvFZIOl02zv2eoH02R4ArEL8b4koUrB6Q/sVK7YQxpfV2MwH3Gh7/YbdXCb1a3/gQaLCuIjadIs0vAbA6aT3q8LPiDJDY46kC2y/MT3e1/ZX+rxOz+9xxXZJYC2G/+91tZXU/v4Mw/Z1TdotdKY4r8FzFLChpA2BfYBjgB8Dr25g+1PgFOCtwJ5EXbIHM+cvln6vA2xGVJoGeBtRTLMjtlcCkPRd4Dzbv0jP30YU5hwNt5J3fl8AzkiPL2bkDbIrkg6xvV96vI3tC3voV7XWbiNn04FjgE8D15Ivfj2ycelrwM7E+9OyNZnPCcD285JuaDpztP1cau+NtreovHSEpCuBr9X0c13gP4AlJL2z8tLiVG7qNdfYEjgCeAmwEFFg+UnbuRn/spXH7wZ6dl79vsfJ9kPAXsCLifp9WwJXAB0HjolWqeQpwKZEfUARhWuvArbq9W8oDFGc1+CZbduS3kHMuI6R9P5aq2DpdP5eti8FLpV0abeTbX8JYtQKvMz24+n5AcBpDdrb3PbHKtc7W9L+dUaZGV9r9pY17/K4CdsC+6XHXwN6cV7u8rgXHrX9qz5ttwfWsf2vPmxXAG6RdDXwZOug7bdnbCxpZ+DU9H3cuWFb6wDbAS8gBkEtHgc+3PAa3yFq4Z1G3NTfB6xZYzMWe3pG8x7vRQwAr7T92uTEv5QzsP1aAEknE5qGN6Xn6wP/1UcfChWK8xo8j0vaF9gV2FrS/MCCDW2fTb//T9JbgfuIkWAdKwPPVJ4/A6zawO4hSZ8DfkLcPHYFmizjHUIU+Zzd4bW6JKGpkjZO501Jj+c4sXFcatlQ0mOpramVx6nZ7rOCyvLQbyQdSswc59wgG/b5LuJ70M+NNXsT7cJ7iNnPUZKeB64klg6z2P458HNJL7d9RR/ttq7zR0nzp5ngsZJ+X2OyuqRfEJ9J63H1ejlH3WI07/HTtp+WhKSFbd8uaZ2Gtuu2HFfq682SNuqjD4UKxXkNnp2JG8cHbd8vaWU6VHPuwkGSlgA+S9x4FieWqeo4Abha0pmEE9qBWKqs4z3EjbE1m7gMmN7A7jrgLNvXtr+Qll9y3A8c1uExRN9zyzTLpVmfKo+HjLvH+LA9f02/cvxv2/NNq5cm02dJR6RzZgEzJV3McMf3ybrG0yy8MWnAtJ3tt/Zil2xb/UXSiO9Ck/4CsyQtRPy9Xwf+D1i0xqZaCf0bDbsLjM17DNwr6QVEbPTClPhyX8Mu3CbphwwfBN7Ww59Q6EBR2BgwkhYlRnHPSVobWBf4le1na0xH2+4mDK2xX2b7+nFsax3gn7b/0eG15W0/ME7tZpc0W8uoXWwXAZ5tfQ7pb3gL8BfbZzZsf3Xbd9Uda3s9t2Rs210HGZI+CCxl+9D0/F5iQCNgH9tHZWwvtd0kztpLf7F9fINrrAI8QMS7Pg0sAXzX9h976MeCwPrA32z/fbz73Ha9VxN9Ps/2Mw3OnwJ8lKF48WXAUbaf7qXdwnCK8xowkq4FXgUsSSzVzABm2a5dsknO7ihgedvrS9oAeLvtgxrYzg8sz/Asq44B/soMrSO239nttWS/gO1OS4a1SNoMuMf2/en5+4Adgb8CB9h+qJ/rNmj3MmI2fKekNYGriQSZ9YBrbH+uwTWus/2ytmPX2q7NwEtxzMPrjrW9fg2wre1/pufX29443SwvsN01uUbSQURCz8kMj5PdWNfXsUDSVGBl23c0PP97wBG2b0mrD1cQSRdLAf9l+6QG15gzcEzP5wcWtj2rYR+2AtayfWzK/J1WtgbMPcom5cGj9M/yTuKfcQcie6sJPwD2JcW+0o1ml9oGpU8QI90LgXOAX6bf3fgOcCRwL/A8sex4AhHDanKzubrS9hENzq/yfVJ8TtLWwFeJJc5HqRE1lfRhSWulx5L0I0mPSroxxc5yLGn7zvT4/cBJtj8BvJnI7sy1u66kHUkZeJWf3WiYgZfabGe3Gpv5Wo4rcRpAGtFPrbF9NZHJ+XXisz6S+NyzSFpG0v6SPilpmqSjJN0s6efJ6deiyFqdCZyXnm/UHsPqwKts35Ie7w78wfZLidT8fZq0S2SvVt+XqcBFDfu8P7FNZd90aEFiGTBnc1P67nX8adjnQhdKzGvwSNLLieD4B9OxpvGWRWxfLQ1Lwmsyw9mLyLL6Z+2ZgO2LU0f3r47eJZ0FNImvVDv4yiZtVpi/MrvaGTja9unA6ZJm1tjuBRyXHk8HNiTS3jcGvk3MeLtRnWm+jhSHtP1MSmjI0XcGXoobvQdYre0GvhhQ93ktUX1i+5B0zfmApXOGtnPvRY4TidWCtYhByrHA4cR7+0PgNQ2ucQCwOXBJ6stMSavW2FSX57ZhyFHf3/b/kGOKK3sMbT+RloubsAPxPbou2d4nabG8Cds17Vihd4rzGjx7EaO3M9MSyOrAbxra/kPSGgwFzN9FBLvruIeYufTKcpJWtf2X9Hxlhu+36cZo1qLnryw7vp7hlWfrvq+zK7HD7YAfJ4d9UUoMyHGjpG8Qm7DXBC4ASEH6LKPMwPs98Rkuw/DEj8eButH5BZIOsv2FtuMHkvrfjqQXAau0+inpkwxtXzg5F59LLG97P4XH+Gsr3gbcLunjNbYtZtt+tAenA/CIpO2Iz+eVpIGfpAWon2W2eFLSy1rZnykO/FRD22fSloLW/15dggmuCA9IWp5ItQe4ui5OV6inOK8B49iRf1nl+V1Ak2wngI8TS2frSvob8GcapDcTKcKXSPolw7OsumbfJT4LXC6ptVS4FhF4rmPdtCwiYI3KEklLcWKDjO1JxP61fxA3lssB0pJUnQN+XtIKRDr/64GDK6/V3eA+TAwsVgXeWImDrEfz7Lbr0w38PxiuwvCBbgbpBvdX4OUN26iyN/BDSX8kNsBCzDZnAN2yOg8lNrq3+E9ic/UihNPbtabN51K/nT6jKnUz1BY3S3oPMVBZi/j+16XKf4SYPb8Q+FQrJkp8zr9s2O5ewGmSWlmCKxCz+yacKun7wAskfRj4ALGMX4uknYj3/RLif+AISXvb/lnDtgsdKAkbAyYFevdh5A0ulwLeWgp6l+1T06hvPqdNxw3a7JiFl8u+q9hOJW7gEMoEz7QC3hmbVXKvOyOFJWk1IrFkBSLp4Ml0fG0iQN51z1QamX+fWIY92/aH0/FXE9l3PaeG94Kk04DbiWXAA4mBxW2292pg24/qRMt2dYbiprfa/lPm3GFJJa0kj/T48rrlREmPEIMvEUuFrYGYgK1sL9mgv4sAnwfemA6dDxw0ntl36f9nS+AaYplXwO29ZPlK2obos4Dz3VDBRdINwDat2Va6B1xke8Pe/opCleK8BoxC7eIUYof9HIkn2//dwPayXAZZA/vFiEFzV23BjO3WxE15e9sv7NF2aSJN+G532PvVdu61tjeRdLHt1/fRz4WALWxfXjm2KPFdr/27NQp9Qg1l+91oewNFOvf5dQOTZDuDDqoTtj/fwPbnxHfq5y1nnzn3VtvrVZ4va/vB9Pg22y+psc+m17tmz5kiw++rtvfOnZexX5aYJa/K8MzZrrPbiu0Vtnue4aY+n2/7Db3aJvubUnJJ6/l8wA3VY4XeKcuGg6cniac2LpT0X8SNqprenE0fV8jRnECkFZOWe95Xyd7qZrcJ4bB2JGJdnyS0B7NIOgf4nENJYAUiyD2DWEI82va3MubzpZni2uogM1W31JkSLL5OZRmu7obeRt/6hAwpoDyS3vP7aaZkAvSlOtHiMGL56ysKiahTgHO6zGSekLSm056qiuNam8p3KtPHS9PN/HjbdUuMneyfS9+rfvk5sZR8Eb1/PhcoskLPcA+j9tTnWZKWsN1P7Pg8SecTS+IQn9W5fVynUKE4r8HTr8QTxDo7ROyrhakXkj0a+Izt3wBIeg2xXv+KTidL+hLxD/YA8Q+3GRFkPqZhP1ezfXN6vDtwoe33pZnf74Cc89qF0KBbgCFh4V7p6yaVGI0+4dEK5fH/IUSQp6XHTehHdQKYM9tpOZXXETOTHxEblts5ADhH0pdJmXNEuvn/ANkqBJX2npO0rKSF3GCTbgeuV2RWnsbwQdgZ3U3msEiTVYoufIZ4T5+T9BRDs+rapVngaeAmSRcyvM9NFFD2VogYb5XaPNoNN74XulOWDQdMistcDqzEkMTTl5yU2/u4Xu0NRNIN7evrnY5VXvsnURblMODcNJu5q8nSWbKfaXuj9Phi4Ae2T25/reYab+7XiUh6nLhJzSZuOo1vUpK+SsSb+tEn7BuNUnUixSbfRgw6XkbMvD7R5dwNiT1LrTjZzcChtuu2IlSv8f3Uzi8YfjOvSwJC0rEdDrvh0t9BwO9tD3Tmos4qHXZGAaXDNZYh4oS1y+eFeorzmoBIEvBaYknvbbaXrzn/TGKUfUI6tCuwqe3tu5y/IKHQPp2IVV2Ynq9ouzajTNLZRKr2vcQMYDXbj6Qb7AzbtZuyJS1MLFeuyvDYzuecmgAAHxVJREFUxoF1tqNBUqdtC26QUPNq4GHbN6bssq2BPxIyQP0IwTZG0inAFsSm31OBS+o+J0kvdUUsto82+04C6nK9zWxfk3n9cYZqzC1KDCyepbfZE5LezpBM0yW2c5v1c9dZCdjFQ1sFOp3Tbfl8dWJAl1uBKNRQnNeAUEXQtBNNlh8kbUE4rB2I+NXHgV+4pmBjWsr6EhVtQ2K2V6sQnzLD3k44si2IDMD31dgsR2TbrQAcabu1Z+q1wCa2a1PPJZ1HpMYPiz3ZbhfBrdrMleJ/ko4kajRNIRRIphGO5BXEpuuu2xkUqeKfBx4iZro/IEbnfwI+lLuhV66xLbE02zgGJOly4jt0KnCK7dsb2u1k+9Sm7dRcaz1imXg6sVy7aY3JaNv7KrEE/tN0aDpwrRtIfyX7ZYhaYtOBFYm9ml1Lm0i6pTVQk7QfoS4/Z/nc+S0jhRqK8xoQXZYd5uCMOKikg4GdgLuJGNSZxAxmtZo2pwCLtYLylePLEzeLnlKTFRt2d+wh9tU3km528+rALZvcZu/s7EnSrrZ/0ilJJBl3XQ5rZfCl9/tvwHIpLiSiynHXrDJJvyXkr1oVAj4FnE04sIM8vGBkt2tMAT5GDE4M/JYGwq+KqsI7p5+FCCf21Rqbc4iZ8Mdcv6G5k/0qxM1/OrGsuwqxCvCXhvY7AL9uJU6k7+RrbJ/VwPZGYKPWrDTFCK/POZHkaHYgBo1rE/97O9uujVOPxfJ5oTslYWNwnEJnR7Ic8FiN7R7EiP4oUhaZ0k7/Gr5NzADaA+FvIG50HTccK1QXRk3KYPsvRi791aaOA7/vdWnLqfhfn7SSI/pJEnk6tf+0pL+2ZkC2LaluH9E020cDSNrTdqtI6IWK2mBN+DGhyNHSkZxOLBG/O2dk+2/AYZJ+Rai+fJnQkszZbCdpe+CXkk4kvpPPV17vmvmasieXIMSA3+UQQf5zU8eV2L+a7JCWo/cnSpU04QXELBfa5LW68HdCBusLwG/TZ7pDw7buUeiK3kvEB1tajlNpXsOv0IXivAZHN0eyDRlHknghsTlyOvCtNMOYqnr19q1s79F+0PZP0zJGN1oSUGsRGnRnp+fb0UzbsMVpwPcIzbte05q3AnaT9GcivlGrziHpENv7pcfbuOEmUuLC30+/+4nZdKsjJurltKqxqfZBTFPFinXakm9+o9gY25W0XLkz4eAeJwZXjbL4bJ+VPpfLCJmm1kCqLvP1QSKzdnnifbmTzFJ6FzqJiTe9j32FyHT8DfHZbM2Q0G439iOWNo8CTkzxxaZ8kFg+fwMxW3skHd+S0IQsjIKybDgg1LY5tO21OWvjDa4zhXAi04kb/MW239Pl3K6bTnOvVc45H3i37cfS88WJpaU3N+xro3IgXWw7qnQ4r84xRz1CHcqT1LR3ge03psf72v5KD7ajqSM2i0jsELBGekx6vrrt2nR5SccB37N9ZXq+BfB+2x/L2FxDzIBOc5fSOF3sFiZmIe8C9u414UFRzmRH4vu7JjETepPtq7OGQ/Y/Ah4hVPANfIKoCLBbQ/sViLiXgKs8JDNVZ7d66vMuxKBufyLm9Ycm9ukafYsEFEZSnNeAGK0jSeet5kr9oORMdrTdcRSn2Py8d/uNQVEz639do9Yh6XZgA6dU/HTjusH2unV9TecfQCy7nMnwtPPc0tJSbYcMPOIGX9RROq+qTFJPtqOhm5NuUeOsbyLenwUJyaO70/NVCJmobMxQkVW6VrK5s2YW37K5Azgd+LLtpqK23a61HDH7mw6sZHulBjaLEnvSWmoXFwAHO7MRPbWzH+EsbwK+0hqQ9dnvlxIxsJ1sr9Hg/KpIgIgZaK1IQCFPcV4DYrSOJJ3bU7FDSZsT2WTHEVl7MCQ9tIvtq2ra+yIRrD49HdqBGG3WFr9M9p0K9dmZ/WLJppUS3WIaITz7oVx8RFFJ+LBk++n0uNpwLuliNI7v27nX3azMfM+M0vG9ichsvJt4v14MfNgpMzRjt57tWyvPF805jpprzbGVtEquv+mcvqSlFJmr1xLLnNsRsefd+ulzP6RY3+c9XCTgENsdRQIKzSgxr8GxN6FMfRwdHEnOUNK6xIbSJRQ79VssTqbYoaP21xZEJtpu6fAthPZfbUkG2wemYP7WhEPZ0w1Styv22WzIXmzS3/09Yr9ZN37AUMJF9THUx1ZWV6g+qPK42q+3Z2z73nCqof1LI16iZv9Sp5t9mplsT8wMckLEhwNvaC17peSanxPCwF1pOS5JryBimdOAlRUbnz+SW6qs9LGjLfE9zbXdr7TUCz2kEXm+pMZbJto+n9aAqjW4yn4+FRZtOS7C6BI1KKlSyFOc14BIjmRzYm/WbunwzTRzJH0XO7T9ALE+3y9PAbOIf9im5dJfZ/vXbY622qcmMkAjbCRldRVbsSVJr7T9u7Y+1RXFfEflcdMSKK12u25zaGDbrwTWHBSyUm8hHNa2xEz5ezVmf6/Ga2z/QdKDOYM2vgm8iVDYwPYNCvHm8bbtR1pKir2OLeczf/V5bhl7LD4f4C5J/8NwkYBOqxKFHijOa4AkJ7V/utm8hMgmeyRv1X+xw0pMZMRL1NfVQtJ/EqPhM5PNqZKOtP3dmqZfDfya4Y62hRmZcVmLpGl0zjTrxBFEanLdsaFO1aih51AoiuQ2oHedtXWI8bXb5uKD2xDxojcRBU1PADa3vXvGptWXm5MTODX1/d1ESnhjbN+j4QUlG2eUjsJ2KaLCdHW7Rd13aglidlxtsDX7aqINCkCaIbZKxlxmu65YaIsPECIBZ6Q+XEZofhZGQXFeA0bSW4iaU38ivsirSfqIm+n43aOQenolQ5tR97J9b5fzR1uGfA/iZvhE6vshRNHArPOyvX/63fM/qDpvEl6SUPn4To3tywlVi2XbrrM4oVeYs+3m6AGocfQ9zdTauJaRMb45zZK/sZ5P6GRu1UrkkXR4TXvVvV+PEo4PYha/XJMOJ+5Jy39Og7FPAreNt20/3ynbq/Zq046kvYhVjpaT/KmiQsIRGbNW+w/TvOBsoSHFeQ2ew4DXOgmuSlqDqATbxHkdC5zI0A1o13Rsm04n1wXAGyCGVPBhSEsubyQd1wqIS3p/j8tq7cs0JkqL7Or6DcsLEXGUdkX6x4jU7hx9O/rRzNr6iQtW2ISIl14k6S4i9T3rpG3/v26vSdq4h7b3JOJmKxKbcC9geLWDcbGV9GJiFt10ANduvyJDtdoAWtXN6/ggscTfSjD5GnAFQxvDO7WVFduuiaMWaijZhgNGbQUlFWsnlzbMNuykDt9VZmY0yQDJfh9iWaqabXiSa7QJxyLtXNK7PaQ20fVYF9s5mWuKwn/TRpMa3ZRKpuQwctmVFduOn3/DG2srpjed2EM1k8gKPbqB3dqEA3wP8HS379K8gqIkyYkMjx+913bHAVyb7deI1PxbGVqmdBMnkmbmmzlJbin2W17jvPTXg8A9hKTbVbQN/EYz6CkU5zUwKskL2xAjv2qs4Q7bn21wjYuItPdWUbvpwO7uo+JwU1Iq/6tIa/VNsg1Hk3be6Rq5Y11sTyRG988Ry3JLAIc5owBesd2SGE2/hJjJzQ882SSrTFExusUU4rNdyvYXG9ieXXk6hVA2udbNpLSq15mP2AO1i7uUGEmzl5Yg7vxEeZ4t3LD8SrpGp+0BjxKamz8fR9sRg7XcAK7tvDuIfYs9q/ynZej3MxT/fQdwnDPK8Cm1vxWX3IBYYTnJZX/XmFCc14BQ5xpGLdztRtN2jZWJuM/LCcf3e+CTbqiQoNisOSe1vomdYiP0ixm+zJINVEv6O7GEJWKke3L1dWf2PUl6M5E5txMhWdRicWA925s36PNM2xtJei+xtPbfhCOoVfGWNIO4sZ/G0FaGNSup1j0h6be2t6o/c4TdSsDXbU9veP4GjNSQHJHEIOkyIrZ1CnCy7dsU+oI9LV9KOhpYl3ifIGZ8txCO8C7bnxon274HcIptH+92nwoXiqoFrc/yctvX92C7cOrrocCBTWJlhTwl5jUg+gk0d7jG3UTiwhwkfYp8ZeJWhtn/Ai8iFC9WIQLkWUkqhezRHkRab1W/rm6Js7qJdEbNue3cl2zezvD9U48TG4+bsKBCPWJ74Du2n23LbMti+4+S5ncI7B6r2GRai4aXZJmPcH79plrfCzRS1VdIJm1AOICWHmK3DLzHic9/iUrf+hnBrgm8zkmVQ9JRROxqG0LFYrxsP0AM4L7J0ACuduCXmEVUqr6Y4YovTZMpnkttmoa6k8lpvZVwXKsSGqc9Z9sWRlKc14BJM7BOcZGm/4DtfIYa50WohW8JXGR7Y0VdrSYj+vcQ+no9LbO0EjS6xa1qbG8AbpB0ou06RfZufB/4C6HKcZlCieLRhrazUgbcTElfB/6PIcX5Oqq1xmYTTn+nJoYaXu9tPmAjov9N2NJddDPbsf3WlJ7/LuBraTa/pKSXubd6ZysS70vrfV0UeJFjI3Hd92U0trNGkejwi/TTM5Vsw9OJFYWf1GUbSjqeGID8iqifd3M/bRc6U5YNB4ykHStPpxBJEPf1MPprv949rtGEkzTD9qYKpfGNbT8v6eq6JThJZwB72P5Hn30bTdxqO8LptjLDeqqY23YtEdJSP2hw7irE7HRBYqa3BPDdXuJB/aDh9d5mA39x20brjO0xhMTYrbUnj7R9EbFMuguwvO2s5FTF7oOEQO8lMEeh/RBiOe8AZySc+rGV9DaiKvdsYga0k+1GM+IufViS0FNstFdLUQvs5ZVsw0WBK3JL0ZKeZ2gjdfVG2/d3uTBEcV5zmRRgv6jXwHzF/m7bK9eccxGxhPYVYBni5ryZa7TVFFI8ZwE3MnyZpaNyRsVuLOJWfwTeCdzkMfiSNnmfRnHtvrcGSFq5acwyc42tibI199OwfEybvYjZz3LuocCkQqF989Te1bbvGy/b5Dx2sn27QvLs67Zf3bS9dI1LiOXoBYiMzAeJTN+OBUjbbHvONiyML2XZcO6zFlDnfHIp71MbtPEOQubp08B7idnEgQ3sjidiCzfRvLYUjE3c6h7g5l4cV7rBdXyJqCHV5Br9pLtXty/sRbxvTTmLpPwh6XTbO9ac34kfAf+PHj4nST8G/pOYycwgBjVfpU3MuIaniWXVKcCaktZsmtrfh+1s27cD2L5KUV6kV5aw/ZikDwHH2t4/851p51jgKoVIAMRgcNwrihe6U5zXgKk4IjG0ATdbBNCj0FdL6bo/t/0G4sbWy431IWeU2LsxRnGrfYBzFWr81Vlfrj/LE4oRD7cdFxHYb8Kmlcdz0t1rbEYzM6xmkjSSKerA3bZ7jeW8NN3I30MkS+xDOLFGn3dyAHsRmagziZjqFQyXbRpL22qRzxHPG35PF0gzvp2AnrJHbR+WZm5bEZ/Z7r1kGxbGnuK8BsxoHFGf7T0naZakJWw3TVpocY2kLxNB7qoDaTpafVOy7ydudTDwBOFAFmrY3jnEhuSZ7S+kG08ttv/Zduhbkn4L5PZqvTjtXVLlcfWauXimuzzuhdsVe9vOZvjnlMtqW0jSAsSs/Cjbz0jqpf29iKKOV9p+raLyQdMq1P3YtlcJaH/ehAMJSa3f2r5GUWDyzpxBWh7ck6FaYN91g7pnhfGnOK8BkRIBHmk5kJTxtz2RFXekU8HHceJp4CaFOkFVibsuSaQVm3pN5ViTVPkW36L/uNVSTpWNm2L7g5nXOlabbqfPdPfRbA3YUNJjpCXg9Bh6c/RTCadVfb/qxGp/SNTyuhm4NGUdPt5Dv5+2/bQkJC2cYlHrjJetM9Wom5IyX0+rPL+L2GOW43hCFu1y4M3E5vWu+9AKg6MkbAwISVcBO9i+T9JGwEVEAsUGwLO2PzSObb+/0/FeEgv6bPc3wOtt9xIva9l+Ffi1a4ojjjWpzy1mE4OLb9i+o4Ft35JWc5uUtLFg00FUiv3sTtzIX0cs1S5o+y3jbLsskbK+KsM3ZHfdaiLpw8Altu9Mf+cxxFaBvwDvzy3/SbqplZSRZqpXN8mWLYw/xXkNCEk3trK/JH0DeN72PinbcGbTzLBRtD8VWLnJTbhisyxwELCi7e0krUeozB/X0H4zIt29l7hVy/ZxIgPuXwwJAs/T6cWj2RowynZ7FqtVKKfsykgnUJt51+FaryaSgM7rdQWhV1vFhvHLiUSgOWVUbJ+esbmZ2CLybIrxfZaYpW4M7G/7VRnbYZ/fID7PQjPKsuHgqAbmXwfsC+DYczW+DccemW8QsaPV0szvQNdv9jwO+ClDCSV3EqnvxzVsup+4FTD42CCAQlX9s0Brw+8MIiX7j5IW6BbrqGwNWLEt3rU4MXsbb3qqNpA4l6hp1WsmaWt7x42214feBGZHY5tYxHY2wakDsyuJQ9sBP06xzYsUG9FztJZ1YfjS7jw/mJrsFOc1OH4t6VQiPXhJolhja7/LeMa7AA4g4leXANieKamJlt1ytk+UtHeye1ZS44KD9BG3aqFQSZ9p+0lJuxLp5N8a7Z6oTHs7Al8jNst+nbg5bQL8TNJHiRloN/28sdgaMBqWtV3VzjxOIRuWY5EGMc+OpAHXDf3sURuNbeIcSW+xfW4PNs+n/7OHic/w4Mpr2a0mtrMlZgpzj+K8BsenCJHaFYjiga2R4AvpMW23D2bbfrRthtdkvfhJhZSQYc4yYC9B/YskvbHPuNVRxKh3QyKN+xiiDEZPG1N7YH/gDbb/Ujl2g6RfA7eTSSEfo60Bo+EfycFXxWrbsybbOVHS7kSGZnVJt2npmBWAWyRdzfAkoCbSTaOx3QvYT9IzxKCvyQzoi8TgYn7gF06q7mnJsvGm7MK8RYl5zSUU5TO2JvboXFt3/ijbOga4GPgckV31SSJAvmeN3aZE0cD/IHT2ViRUuRvtbxlN3KoVW5D0ReBvto8Zz3iDpFvdRR9Q0h22azPpNIaSVr2g4dUGAH5HxLy6FiOVtCcx06xugLcbqpCkG/8ImiwDjsa2XyRtBfwrpcivB2xLDEouc58q84W5S3FeA0LSOcDnbN+cljCuI0aDawBHO1MXaAzaXoSY3bWW8M4HDnKSuqmxXYhIDxZw6zin9FfbvRQ4j8hK25qQ8pnpcZLjUeg+vq19KSttcTi7SUKNxljSajyR9CdCq+/vc7svvZCyBd8LrGb7y4rSMSvYvjpjsz+R5r4AcCGwBbGE/gbgfNsHd7MtzMPYLj8D+AFuqTzejwgaQ+whunGc2954jK7zWuBXPZz/SmDR9HhXYult5Ya2LyQU81+Vnq8MvG8c36PtgT8AuwEvJdTAdwfuALZveI3fAPPNhe/Wi4kiiX8HHiCUz19cY3M2MGUUbW4JXEMk5DxDZP49NgDbo4AjgdvS8yUJjcGczU3EkuEiwGPA4un41PH+3ys/4/dTYl6DoxoLeT2hEIDtxxXq0+PJYWm2dxpRgDBbyTUt6xxF1P86i9iPdjzxz97LKLXvuJXt+0lxJknLAPfY/nEPbfeE7bMUuoafBT5BzDRvJsRgm5Ym6UfSaizoJ9vwGeD6FNOr9rVpqvx3GFm0c60B2G7hWE6+PvX34bQ6kGO2ozbbLEl/corr2X5qAP97hXGiOK/BcY+kTxBFBl9GLIm19l8tOJ4NOyR4Xkhouh2d9vicYvugLibfIuJiVxDLLVcT9Yh6vQnPtm1J7wAOd8StOm6YbiFpS0Ig9iEifnQCIRo7n6T32T6vxz40xvYNkg5wD8rqbfS9NWCU9JNteG766Rv3WbRzlLbPKvQ6W0lEy1Kf6v+MpEVszyIySEm2SzSwLcyjFOc1OD5IaKu9AdjZ9iPp+JbEKHlcSTOZbysUJPYhMrC6OS9sX5Qe/izthflmH80+LmlfYiawdbrp1Dnq7xDLqksQ2wnebPtKhf7dSSSnP44cJ2lFYlnrMqLce1113xZ9bw0YJT1nG9oeoYiuKDXSlFbRzhvUe9HO0dh+m1giXV7SwYRSxhdqbLZ2Kqjq4WovCwLZwVRh3qUkbPwbIOklRJr+u4ib2inAz9wlWC/pLobrt32r+twNFczTbO89REzi8pQV95rc8p+kmbY3So9vs/2SymvX2964SdujId1YNyM0HT9CiP3WKcvPTUmrarahCQX9jtmGaZPwjkTm6Pm2b5O0LTFgWNINE2JSIssDxAzz08SG7KPcoGjnaGyT/boM7bn7te3bmtgVJhdl5jUgJGVv+O6/tHkTjiP283yUcCR1WYa/Yyh+0v7cNCyl3mfcqjoyfqr9kk3aHQ0ppfpV6ecFxPt2eUPzjwP7KErZD0TSKs1md+zh+/NDovTKNcBRku4knPS+tn/WoL13EMkgR6bnlwLLEZ/NFUBXBzQa2zYWIRIwTLN6doVJSJl5DQhJDxIFFk8CrmK4XBQehz0uCiHRQ4APEAriIjLTjgU+78yG2nRT3N4ZzbiMbde4FZEx2HXpLyl4PJn6OhWY1XqJyI4b1/hgan8GkaRyrge0NWA0SLrE9msannsLsIGjVM5U4B/Amrb/r6H974BdbN+Tns8k5M6mEQUeu6mQjMq2co0vEgOp04nvxPbAaZn4bWGSUmZeg+OFRPbXdGIp7ZfASXWZf6PkUCIVfzXbj8McQdZvpJ+9uhmmm9uniJtEr/Qdt/Lcl+NZmkjx3xr4ZMpGu8L2/9QZasCSVhV+J+k7xHJwVbHiug7n/islSbSy7e5o6rgSC7WcT+K3th8CHpJUF7cajW2L6cTWj6dhzlLtdWTit4XJSZl5zQUkLUz8Ex5KCOQeMU7t3Ams7bYPOc2qbredTU+W9AUie679ppiVEJoX4lajIcUIX00sHb6CUEGpTe9XlJTfkChzcwKxNeCdTWxHg4aXcWlh2yMqE0uaRShLQMxc1knPW0ucWQUTSX+0vWaX1/5ke43xsK2c9ytgeivhSdILgJ/Y3q7OtjC5KDOvAZKc1lsJx7UqkTmVKxg4WtzuuNLB59Ssau5H0u/PVs2JDcM55mrcajQk5Yk7iLIi3yPKvTddOux5a8BYYPu1PZw+WoWSqyR92PYPqgclfYTYUjFeti3+RegiXpievwH4rZKav/sUGy5MPMrMa0BIOp5QbfgVsVH45gG0eRZwRnuSRFrS2mm8kkTmdtxqNEiaz30Uz0y2g5a0ym4ozu3Lk3SI7f3qjnWwW47YuP4vYrkOYu/UwkSM9IHxsK1c46PEoPt5Qplj2ODI41xgtTDvUJzXgEixk9bSW/VNH7eMtLRf6QziH/za1O5mhEPZwfbfGlxjXaK+1ZTWMdsnjnVf5xXUR2HHim3PWwNG2df908N1iM+1lQX6NkJwtmt1bnUunHmD7Q0btv06QrAZQvrs1z30u2fbtuSjvxLJPysRyUf75ZKPCpOT4rz+DajcLETcLC5uaPcFQsx3XULM901EkP2d49XXuU1ajjqRiFlBbLB+r+2c1FKn6ywD/LPTsu1YI+kCIl2+lZSzGJGBt22Hcz8C7AmsTSyPtlgMmGF7+nj3tx8kfZPo46c7JB/Nsl2nKFKYZBTnVeiKpJuAjYDrbG+o0Ef8/jjvSZurVJNNcsfaXu97a8BYIOl2YEMnFYkUW73B9rodzl2SyKj8ClEip8XjnocV5kebfFSYfJSEjUKOp1Jyx+w0mr+f2OA6memnsOPclrQ6Abha0pnEUucOQMelStsPExWF3y1pfWCr9NLlhCr9vMpok48Kk4z55nYHCvM016dU5B8RG3evZijQPln5ACFgfD+hufcuIgEjxwK2L7B9GnC/7SsBbN9eYzcmOOpR7U44pUeIDMlDcjaSPg6cSmSOrgycKulj493XUXCrpPe1H0wDjYG8z4V5i7JsWGiEpDWJOkiT3XmNQNKnnCkWWk1+aE+E6JQYMU593ApYy/axCqX1abb/nDn/RuAVTlWEJU0Dfu8GRTfnBmORfFSYXBTnVcgiaRdgDdsHK6rWLmf72rndr0Ei6W7bXfe2ze2tASnrcFNgHdtrS3oRkbDxyozNTcCmbXGyGeOV1j9W9Jt8VJh8lJhXoStJcmhBYs/SwcQN+nvEiPffCeVe9NyXtNoB2Ji0pGv7vhSjHIGkBWzPJuJkV0o6vXKNeX6PVEqrb5yWX5i8FOdVyPEKD69a+5Dqq9ZORub15YlnkrJHq0BjTifwauBltr+eZKVeRTjnPW1fM4C+FgpjQnFehRzPKuo/tW6KSzNJK89KepzOTqq1FDgvc6qk7wMvkPRhIunkB13OnTOLTM6qOKzChKTEvApdSdldOxDxlB8RWXhfsn3yXO1YYQSStiE2lIsoMnlhl/PuJdVY60ROUqpQmJcoM6/CCCSdC3zM9o8lXUuInwp49yA0GQu9k5zVhS1lj8yp8xP1s7JxvEJhXqfMvAojkLQTUR/peODrRTdu3qQfZY9Bpe4XCuNNcV6FjqSg/xeBbYmb4pxYV1lamjeQNIMhZY+jaVP2cIe6aROhnlqh0ISybFjoxrNEavzChCDqpEzUmOAsYPsCAEkHVpU9pK6rgq8fVOcKhfGkOK/CCCRtSwT1f0GkVc+qMSnMHXou+mn7ofHrTqEwOMqyYWEEki4n9v3cMrf7UujO3Fb2KBTmJsV5FQqFQmHCUVTlC4VCoTDhKM6rUCgUChOO4rwKhUKhMOEozqtQKBQKE47ivAqFQqEw4fj/GOR+/xsxaQkAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 432x288 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# удалил колонки Id и целевую переменную SalePrice, так как это не фичи\n",
"# по хитмап мне ничего не понятно, поэтому ниже я нашел скоррелированные пары\n",
"sns.heatmap(data.drop(['Id', 'SalePrice'], axis=1).corr())"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"GarageCars GarageArea 0.882475\n",
"GarageArea GarageCars 0.882475\n",
"TotRmsAbvGrd GrLivArea 0.825489\n",
"GrLivArea TotRmsAbvGrd 0.825489\n",
"TotalBsmtSF 1stFlrSF 0.819530\n",
"dtype: float64"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# найти пары самых скоррелированных колонок\n",
"# я это просто загуглил\n",
"# пропустил первые 36 колонок, потому что это диагональ в матрице корреляции - корреляция колонки к колонке А равна 1\n",
"# и для примера взял топ 5 пар\n",
"data.drop(['Id', 'SalePrice'], axis=1).corr().abs().unstack().sort_values(kind=\"quicksort\", ascending=False)[36:][:5]"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [],
"source": [
"# То есть выходит, что пара GarageCars и GarageArea могут мешать модели делать предсказания, \n",
"# давай уберем одну из этих колонок и оставим колонку с большим вкладом\n",
"\n",
"column_A = 'GarageCars'\n",
"column_B = 'GarageArea'\n",
"\n",
"# X_A - все фичи, кроме A\n",
"# X_B - все фичи, кроме В\n",
"\n",
"model = LinearRegression()\n",
"metrics_without_A = cross_val_score(model, \n",
" X = data.drop(['SalePrice', 'Id', column_A ], axis=1).to_numpy(), \n",
" y = data['SalePrice'].to_numpy(), \n",
" cv = 21, # это сколько раз нужно посчитать\n",
" n_jobs = 4, # параллельно на 4 ядра CPU\n",
" scoring='r2')"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0.86765861, 0.79700353, 0.85662185, 0.85040645, 0.88937989,\n",
" 0.87526277, 0.8522576 , 0.59039643, 0.8989565 , 0.78844489,\n",
" 0.8854049 , 0.80800231, 0.7970408 , 0.83379928, 0.88059095,\n",
" 0.75436409, 0.69714012, 0.81606311, -0.52953672, 0.83349023,\n",
" 0.80017445])"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# получил такой array\n",
"metrics_without_A"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {},
"outputs": [],
"source": [
"# делаю аналогично для колонки В\n",
"model = LinearRegression()\n",
"metrics_without_B = cross_val_score(model, \n",
" X = data.drop(['SalePrice', 'Id', column_B ], axis=1).to_numpy(), \n",
" y = data['SalePrice'].to_numpy(), \n",
" cv = 21, # это сколько раз нужно посчитать\n",
" n_jobs = 4, # параллельно на 4 ядра CPU\n",
" scoring='r2')"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0.86238445, 0.79641014, 0.85551214, 0.85719853, 0.89063898,\n",
" 0.87101608, 0.85322873, 0.58514003, 0.90295979, 0.78928199,\n",
" 0.88687119, 0.79883182, 0.79588036, 0.81862473, 0.88369171,\n",
" 0.75933677, 0.70148541, 0.81399305, -0.4724277 , 0.84243054,\n",
" 0.81535044])"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"metrics_without_B"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0.00527416, 0.00059339, 0.00110971, -0.00679208, -0.00125909,\n",
" 0.00424669, -0.00097113, 0.0052564 , -0.00400329, -0.0008371 ,\n",
" -0.00146629, 0.00917049, 0.00116045, 0.01517455, -0.00310076,\n",
" -0.00497267, -0.00434529, 0.00207006, -0.05710902, -0.00894031,\n",
" -0.01517599])"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# так как это numpy array, то можно легко найти поэлементную разницу\n",
"diff = metrics_without_A - metrics_without_B\n",
"diff\n",
"# получается где-то лучше, где-то хуже (смотри на знак)\n",
"# надо доказать, что есть значимое отличие от нуля"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(-0.010781639905188801, 0.0045990544022645585)"
]
},
"execution_count": 52,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# вот теория\n",
"# https://www.itl.nist.gov/div898/handbook/eda/section3/eda352.htm\n",
"# посчитаем доверительный интервал с уровнем уверенности 98% \n",
"# Наша нулевая гиппотеза - результаты одинаковые\n",
"# Альтернативная - без одной из колонок лучше\n",
"# Если 0 НЕ будет входить в полученный интервал, то мы можем отбросить \n",
"# нулевую гиппотезу с p-value = 2% \n",
"# Если входит, то ничего нельзя сказать точно\n",
"\n",
"from scipy.stats import sem,t\n",
"\n",
"def confidence_interval(vector:np.array, confidence:float=0.98):\n",
" \"\"\"Calculate confidence interval.\"\"\"\n",
" m, se = np.mean(vector), sem(vector)\n",
" h = se*t._ppf((1+confidence)/2., len(vector)-1)\n",
" return m-h, m+h\n",
"\n",
"confidence_interval(diff)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 0 входит в наш интервал, значит нельзя сказать, что лучше без колонки А, чем В и наоборот. \n",
"# посчитай аналогичным способом лучше ли вообще без этих колонок, чем с обеими"
]
},
{
"cell_type": "raw",
"metadata": {},
"source": [
"## Save prredictions"
]
},
{
"cell_type": "raw",
"metadata": {},
"source": [
"test_data_submition = pd.read_csv('test.csv')\n",
"test_data_submition = test_data_submition[features]\n",
"test_data_submition = test_data_submition.fillna(test_data_submition.median())\n",
"\n",
"prediction = np.expm1(model.predict(test_data_submition.to_numpy()))\n",
"\n",
"y_predict_test_data = pd.DataFrame({'Id': test_data_submition['Id'],\n",
" 'SalePrice':prediction})\n",
"y_predict_test_data.to_csv(\"Submition_Stack.csv\", index=False)"
]
}
],
"metadata": {
"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.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment