Created
July 1, 2019 09:27
-
-
Save groverpr/76707faa6047296e647acc3f0c8978b5 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Comparison of below encordings with random forest and final comparison with catboost\n", | |
"* Label Encoding\n", | |
"* One Hot Encoding\n", | |
"* Hash Encoding\n", | |
"* K-fold Target Encoding\n", | |
"* Ordered Target Encoding" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 523, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"%reload_ext autoreload\n", | |
"%autoreload 2\n", | |
"%matplotlib inline" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 347, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import time\n", | |
"import random\n", | |
"import matplotlib.pyplot as plt\n", | |
"import string\n", | |
"from utils import *\n", | |
"from sklearn.datasets import *\n", | |
"import pandas as pd\n", | |
"import numpy as np\n", | |
"from sklearn.model_selection import StratifiedKFold, train_test_split\n", | |
"from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier\n", | |
"from sklearn.metrics import roc_auc_score" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 257, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import catboost\n", | |
"from catboost import CatBoostClassifier" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# Dataset 1. \n", | |
"Simulated dataset with one feature. 10,000 data points, 100 level cardinality. Rule: Ones starting with vowel have target label 1 and others have target label 0" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Creating simulated dataset" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 473, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"['KcBEK',\n", | |
" 'anDFr',\n", | |
" 'PZkcH',\n", | |
" 'FuepV',\n", | |
" 'xcAiM',\n", | |
" 'wyAsR',\n", | |
" 'qDlRt',\n", | |
" 'QxiDX',\n", | |
" 'pCNyc',\n", | |
" 'Lapim']" | |
] | |
}, | |
"execution_count": 473, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"random.seed(10)\n", | |
"catvar = []\n", | |
"for i in range(100):\n", | |
" random_str = ''.join([random.choice(string.ascii_letters) for n in range(5)])\n", | |
" catvar.append(random_str)\n", | |
"catvar[:10]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 474, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# training and testing data\n", | |
"np.random.seed(10)\n", | |
"train_data = np.random.choice(catvar, size=10000)\n", | |
"np.random.seed(11)\n", | |
"test_data = np.random.choice(catvar, size=1000)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 475, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# strings starting with vowels are positive\n", | |
"# train\n", | |
"label_train_list = [c.lower().startswith((\"a\",\"e\",\"i\",\"o\",\"u\")) for c in train_data]\n", | |
"label_train_list = np.array(label_train_list).astype(int)\n", | |
"# test\n", | |
"label_test_list = [c.lower().startswith((\"a\",\"e\",\"i\",\"o\",\"u\")) for c in test_data]\n", | |
"label_test_list = np.array(label_test_list).astype(int)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 476, | |
"metadata": {}, | |
"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>x</th>\n", | |
" <th>y</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>Lapim</td>\n", | |
" <td>0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>QeIfj</td>\n", | |
" <td>0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>MUtbL</td>\n", | |
" <td>0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>HEMFe</td>\n", | |
" <td>0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>tczMW</td>\n", | |
" <td>0</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" x y\n", | |
"0 Lapim 0\n", | |
"1 QeIfj 0\n", | |
"2 MUtbL 0\n", | |
"3 HEMFe 0\n", | |
"4 tczMW 0" | |
] | |
}, | |
"execution_count": 476, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"train_data_df = pd.DataFrame({\"x\": train_data, \"y\": label_train_list})\n", | |
"test_data_df = pd.DataFrame({\"x\": test_data, \"y\": label_test_list})\n", | |
"train_data_df.head()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 477, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"(0.208, 0.211)" | |
] | |
}, | |
"execution_count": 477, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"sum(label_train_list)/len(label_train_list), sum(label_test_list)/len(label_test_list)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Both test and train have around 20% positive labels with a little bit of difference" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Model comparisons" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 541, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"encoders = {\"one_hot\": one_hot_encoder, \n", | |
" \"numeric_label\": label_encoder,\n", | |
" \"hash\": hash_encoder, \n", | |
" \"kfold_target\": kfold_target_encoder, \n", | |
" \"catboost_target_encoder\": catboost_target_encoder}" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 542, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"train_scores = {}\n", | |
"test_scores = {}\n", | |
"times = {}\n", | |
"for enc_name, enc in encoders.items():\n", | |
" train_score = 0.\n", | |
" test_score = 0.\n", | |
" st = time.time()\n", | |
" for i in range(10): # for measuring times\n", | |
" train_score_this_iter, test_score_this_iter = fitmodel_and_auc_score(enc, \n", | |
" train_data_df, \n", | |
" test_data_df, [\"x\"], \"y\") \n", | |
" train_score+=train_score_this_iter\n", | |
" test_score+=test_score_this_iter\n", | |
" # averaging score\n", | |
" train_score/=10.\n", | |
" test_score/=10.\n", | |
" times[enc_name] = time.time()-st \n", | |
" train_scores[enc_name] = train_score\n", | |
" test_scores[enc_name] = test_score" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 543, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# now fitting on catboost\n", | |
"cat_features=[0]\n", | |
"train_score = 0.\n", | |
"test_score = 0.\n", | |
"st = time.time()\n", | |
"for i in range(10):\n", | |
" model = CatBoostClassifier(\n", | |
" iterations=500,\n", | |
" early_stopping_rounds=20)\n", | |
"\n", | |
" model.fit(\n", | |
" train_data_df[\"x\"], train_data_df[\"y\"],\n", | |
" cat_features=cat_features,\n", | |
" eval_set=(test_data_df[\"x\"], test_data_df[\"y\"]),\n", | |
" verbose=False\n", | |
" )\n", | |
" \n", | |
" train_score_this_iter = roc_auc_score(train_data_df.y, model.predict(train_data_df.x))\n", | |
" test_score_this_iter = roc_auc_score(test_data_df.y, model.predict(test_data_df.x))\n", | |
" train_score+=train_score_this_iter\n", | |
" test_score+=test_score_this_iter\n", | |
" # averaging score\n", | |
"train_score/=10.\n", | |
"test_score/=10.\n", | |
"times[\"catboost\"] = time.time()-st \n", | |
"train_scores[\"catboost\"] = train_score\n", | |
"test_scores[\"catboost\"] = test_score" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 544, | |
"metadata": { | |
"scrolled": true | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"{'one_hot': 0.9963942307692308,\n", | |
" 'numeric_label': 1.0,\n", | |
" 'hash': 0.9690656565656568,\n", | |
" 'kfold_target': 1.0,\n", | |
" 'catboost_target_encoder': 0.9951923076923077,\n", | |
" 'catboost': 1.0}" | |
] | |
}, | |
"execution_count": 544, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"train_scores" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 545, | |
"metadata": { | |
"scrolled": true | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"{'one_hot': 0.9947867298578199,\n", | |
" 'numeric_label': 1.0,\n", | |
" 'hash': 0.9670468948035487,\n", | |
" 'kfold_target': 1.0,\n", | |
" 'catboost_target_encoder': 1.0,\n", | |
" 'catboost': 1.0}" | |
] | |
}, | |
"execution_count": 545, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"test_scores" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 546, | |
"metadata": { | |
"scrolled": true | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"{'one_hot': 10.497339248657227,\n", | |
" 'numeric_label': 11.937826156616211,\n", | |
" 'hash': 13.738202810287476,\n", | |
" 'kfold_target': 9.657154083251953,\n", | |
" 'catboost_target_encoder': 9.620632886886597,\n", | |
" 'catboost': 63.245049238204956}" | |
] | |
}, | |
"execution_count": 546, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"times" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 547, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA1gAAAFgCAYAAACmKdhBAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3Xd4VFX+x/H3d1JJAxIIvUlRECmCDVRsIKBrwQaWBdHF/lNXXXXXda27K/aytrUirr0rTZAiCiJIFVCKlFBCJ73O+f1xB4zUSDLcTPJ5Pc88mVvOzCcYZ+73nnvPMeccIiIiIiIiUnEBvwOIiIiIiIhUFyqwREREREREKokKLBERERERkUqiAktERERERKSSqMASERERERGpJCqwREREREREKokKLBERERERkUqiAktERERERKSSqMASERERERGpJNF+BzgYAoGAq1Wrlt8xRERERESkgvLy8pxzrsp2FNWIAqtWrVrk5ub6HUNERERERCrIzPL9zrAvVbbyExERERERiTQqsERERERERCqJCiwREREREZFKUiPuwdqT4uJiMjIyKCgo8DuK/E7x8fE0bdqUmJgYv6OIiIiIiPxGjS2wMjIySE5OpmXLlpiZ33GknJxzbN68mYyMDFq1auV3HBERERGR36ixlwgWFBSQlpam4irCmBlpaWnqeRQRERGRKqnGFliAiqsIpf9uIiIiIlJV1egCS0REREREpDKpwPLJ5s2b6dKlC126dKFhw4Y0adJk53KPHj3C8p6zZ8/myiuvDMtrH4ghQ4bw/vvv73X7M888w6uvvnoQE4mIiIiIVExYCywze8XMNpjZgr1sNzN7ysyWmtk8MzuyzLbBZrYk9BhcZn03M5sfavOURej1YmlpacyZM4c5c+Zw9dVXc/PNN+9c/vbbb8Pynv/85z+54YYbwvLa4TB06FCeeuopv2OIiIiIiJRbuEcRfA14Bhixl+39gLahxzHAc8AxZpYK/APoDjhglpl96pzbGtpnGDAdGAX0BUZXKOW778Lq1RV6id00awYXXnhATZOSksjJyWHSpEn84x//oEGDBsyZM4cBAwZwxBFH8OSTT5Kfn8/HH39M69at2bhxI1dffTWrVq0C4IknnqBnz56/ec3s7GzmzZtH586dAZg8eTI33ngj4N3TNGXKFJKTk3n44Yd59913KSws5Nxzz+Xee+8FYMSIETzyyCOYGZ06deKNN95g5cqVDB06lI0bN1K/fn1effVVmjdvzpAhQ0hJSWHmzJmsX7+e4cOHc/755+Oc44YbbuCrr76iVatWOOd25rvjjjv49NNPiY6Opk+fPjzyyCMkJCTQsmVLZsyYwdFHH31A/5YiIiIiIgdTWAss59wUM2u5j13OBkY470h7upnVMbNGwEnAl865LQBm9iXQ18wmASnOuWmh9SOAc6hogXWQFJQUUBIs+c0649cOuPzifEpdKQA5RTnkF+czd+5cFi1aRGpqKq0OacXgywfz1dSvePbpZ3nsicd4+LGHufHGG7n55ps58pgjWblyJeeceQ6z5s0CIMqiqBVTi5kzZ9K+Q3tyinIA+Pfwf/PwEw9zQs8TKCksIT4+nk+/+JSFixfy1dSvcM5x4YALGT9xPI3SG/Hggw8yduJY6tWrx5YtW8gpyuHqa69m0CWDuHLolbz88stce/21vP3+2xQHi1m9ZjVjvhrD8p+Xc/6A8znvvPP433v/Y+GihUybNY0NmRs4qstR/HHIH9myZQsfffQRM+fNxMzYtm3bzpxdj+zK119/Tbfu3cgvyd/5b1VYUsi01dNondqa9MR0sguzWbBh947SdmntSEtIY1vBNhZtXLTb9vb121Mnvg5b8rfw06afdtt+ePrhpMSlsDF3I0u3LN1te6cGnUiMTWR9znp+2frLbtu7NupKfHQ8a7LWsGr7qt22d2/cnZioGFZtX8WarDVs3xrNmqWpXH7OIQQCEdk5KyJVRH4+fPYZpKdDi86/sD5nPZNGp1JU+OvFK23T2gKQmZNJVmEWAPUaFHHkcVlEB6JZ/d1RNG0KdVr/zOa8zYz7uN7OttGBaFrV9abLWJO1hrziPACatiygQ5ccasXUYuFXXejYEQINF7BxWy5TxqbubB8XHUfz2s0BWLltJUWlRQAccmgebdrnERusw0/ftOeooyAnaTYbNpUwfVKdne0TYxNpnNwYgOVbl1Ma9L4/23fOoVmrAmKKGvDzd4fQqxdkuO/IXBfN7OkpO9vXjq9NemI6zrnffL53PTaL+g2LCGQ3Y9mcppzWp4Rl+d+z+pd4Fs1N2rlfakIqabXSKC4tZsW2FTvXH3vSNlLqlBDc1JqVi9Lpc0YeS7LmsnRRAst/Sti5X3pSOrXjapNfnE9GVsbO9SeevoX4WkGK17YnY1kd+g/wvr8WzkkiY0X8zv0aJzciMTaJnKIc1mWv27m+zzmbAChYeQRbNyRxwune99cP01LYlBm7c7/mtZsRFx3PtoJtbMzdCEBsXJCT+m0BIPvnbpQWxdKpp/f9NW1iHbK3/3rY2KpuK6ID0WzK28TW/K0AJNcu4biTtwGwZf4xJCYE9LdXTf721i0xzmI2na4aAImJyL75PQ9WE6Bs11FGaN2+1mfsYf1uzGwYXk8XsbGxe9rlVwfY0/R75RXnUVDy2+HFoyzqN9sLSwtxOLIKs8gtzqXzkZ1p1KgRAC1atuDYXseSVZhFy0Nb8tXEr8gtymX8+PEsXLiQkmCJ1zYri7Wb1pKUnERsVCy1Ymqxbt06aqfW3vkh1vXortx+6+1cMOgCLrvoMpo2bcrosaMZP348xx51rJcnJ4+FixeyaMEizj//fGKTY8kqzCI6MZqswiy+m/4dI972Oicvu+wybvvLbWQVZlFcWsyp/U4lpziHQw49hMzMTJxzTJw0kTPPO5PcklwS0xLpcWIPikuLSUlJIS4+jmF/Gsapp5/KaX1P25mzbr26rFi6gqAL7lwHkF+Sz9hlYzk7+mzSE9PZXridscvG7vZvnhKXQlpCGpvzNu9xe/3E+tSJr0NmTuYetzdJaUJKXAprs9fucXuruq1IjE1k1fZVe9x+WL3DiI+O55dtvzB++fjdtndq0ImYqBiWbF7CiI8zGP/iaSSnZdOt23K6tGi92/4iIuU1c+WPTPy2GbEuhb5NFvPdmu8Y+d9LycvyDrQMaJTs7butII68Yu+gqXmnTWxMH0t8dDwTXziKXr2gTeIcFm5cyIvPDNv5+lGBKBqEjrO25MdTUOKdFGp/wipOSP6a+gn1efWxLgwbBtFHzWDRyk28+cylO9vHRsVQL3TMtzG3FsVBb/L4bmcuplvsLOq59rz2WHv++ldY3XgKPy+O5qNnzt3ZPj46ntRa3vP1OQkEXRCAEy75gfbBRaRmH8+Ixw6hWTOY7L5k2ewmjH329J3tE2NiqR2qV9Zm/3rAeLr7mhadVpG87gzeeqwp7TuWMHbLWBZNac/Xb56wc7+UuFiSYqHUGZk5v7bfkDKW+i02Eb9kEO+/kE7XnrmM/WUss8Z2Y9bn3XbuVyc+hoQYKCqNYlPer+1zm39EQu08mNmCz9+uw7H9tjB22VimfHICi79uv3O/tFrRxEVDQUkUW/J/be+OeNN7nQntmf89tO7hfX+Nebcvq+Y337lf/cQoYgKQWxzD9gKvfULtPArbed9l6z/qSu52SD7c+/768I0BbFpVe2f7hklGwCC7MJbsIq99/RYbyWrutf/5zWNokA599LdXLf72GozZQJ9mX8CAE1RglYOVvUwrLG/g9WB97pzruIdtXwD/cs5NDS1PAP4CnALEOeceCK3/O5AHTAntf1po/QnAX5xzf9hXhsTERJebm/ubdYsWLaJ9+/Z7aREeO/4H3NV9995HUlISf77lzwCkJKeQlZ3FpEmTePTRR/ni8y8AOOmkkxj+8HC6d+++c9tnn31Gev10Vq9eTVx83B5fP2ABPvroIz7+5OPfDBoxf/58Ro8azTPPPMP48eN58cUXaduuLVddddVv2j/z9DNs2LCB++6/7zfr0+uns2btGuJi4ygqKqJJkyZkbsjk8ssv54wzzuD888/HMJKTk8nOzuamm26iU+dOXH755QCcd955XDzoYi644AIKCgoYP2E877zzDmsy1jB+wvjfvPf999+P49e/1cWLFnNIu0OICcQQFYgi6II7z0CVtWN7abCU4mDx794eGxVLwAL73V4SLNmtdxIgLioOM9vn9rw8Y/jDpXz+mdGmXZC2543gkNYwtOvQ3fYXESmPgpICnpj+BE0TWnNe+wuIji2m1JWSmwtlv/bjo72jvOLS4p1XUERFQa3QwWNpYTzR0WDRRQRdkJycX9saRly0971TVFq08zsuJgbi4rztxQVxxMYCUUWUlAbJy/u1fcACxEZ5J0ALSwp3fsbHxnoPXICSwlji4iBohZSUOvLz998+Ls7LQDCKkqIY4uOhhAJKSqDsFIpRFkVMVAzOOQpLC3/9N4mH6GhwpVGUFsdQq5aj2BVSVARFZb5mogPRRAeid2ufkACBAARLogmWRBNfK0iJK9qt/d6+v3a0dyUxlJZEkZDobS8ogJKS3dvv+v2UFOroCBbH4oIB4mt52/PzobT01/Z7+v4y+/XYOVgUBxix8d72vDwIljmM2dP3WyDg5QcoLYwjEDD97VWHv73sYmLvvpvo5k2Jve0WqgIzy3POVdlKz+8erAygWZnlpsDa0PqTdlk/KbS+6R72jwgB2/eYImW3ByxAwAK/uYSw7Pod2wIWoE+fPjzzzDPcdtttAMyZM4cuXbr8pl379u159NFHd77HsmXL6NypM507dWb69OksXryYvn378ve//53LLr2MpKQk1qxZQ0xMDKeeeirnnnsuN998M2lpaWzZsoXU1FR69OjBu++8y2WXXcb//vc/jj/++N/kKvv7mBm9evXihRdeYMjgIWzYsIFJEydxycWXkJOTQ15eHmeecSY9jutBmzZtdrZdsmQJPXv2xMx+829hZjs/nHf8u5Rd3lVUIIqoQFTYtu/4sPu922fPhrvvhszMKK64Av70pwA/ZB7OjJ9W8fOyItq13k/vq4jIHjz/7hJW5NXmjxf1DB2wxhBDDPG199YiJvTYxc6PLe+zKL7O7ruU3b6ruKRft8dGQcJePtKS2PMJwl8jxREXDYl72W2v7UPvF008REPSHr8mjGT2sCEavJc1oognPhpI2H23fbYHIED0PtsHYD/t46PjiU/afRdPVOixt/be91d88t7aR7PHw8HoX59EB6KJT9l9l/K1199exP/tzZ0ORXlw9j77M6QMvwusT4HrzextvEEutjvn1pnZWOCfZlY3tF8f4E7n3BYzyzazY4HvgD8CT/uSvAp56qmnuO666+jUqRMlJSWceOKJPP/887/Z57DDDmP79u1kZ2eTnJzME088wcSJE4mKiqJDhw7069ePuLg4Fi1axHHHHQd4g22MHDmSww8/nL/97W/06tWLqKgounbtymuvvcZTTz3F0KFDefjhh3cOcrEv5557Ll999RVHHHEE7dq1o1evXoA3AMfZZ59NQUEBzjkef/zxnW2++eYb/vGPf1Tyv5j/iorghRdgxAho3Bheegk6dfK2dW90NPcOO4albeHJJ/3NKSKRJzu3mGcfT6Zlm5NpfGVjv+OISCQrLYVx46B1a2jb1u80ESOslwia2Vt4PVH1gEy8kQFjAJxzz4eGWH8GbyTAPOBy59zMUNuhwF9DL/Wgc+7V0PrueKMT1sIb3OIGt59foqpcIui3xx9/nOTk5Co1F9a+zJ49m8cee4w33nhjt22R/N9v+XK46y74+Wc491y4+eZfL6nYYcYMqNsgi7T0ElJrpe75hURE9uCB/yzh2acS+e9/4YwTVWCJSAVMmwavvQbXXw9HHOF3mp1q9CWCzrlB+9nugOv2su0V4JU9rJ8J7HY/l+zfNddcw3vvved3jHLbtGkT999/v98x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dP5GjapWYhVqwoQJTJ8+nZ49vaQ8JyeHVq1acdppp7Fw4UJuueUWTj/9dAZXoAPAu+++m8suu4zx48fz8ssv89ZbbzFhwgQmTJjABx94hYVmRuPGjfnss88YOHAgqampAFx88cVMnjyZIUOGUK9ePc455xzAe5Zq3rx5DBo0CPCqDKYXv8sqImHVp1UfuqR1ISVByZXglUI0aOANhx++/7TCQi8BK+l56/LGVccy2kbN2EZc3IElpiK1zxhgOPCA//fDcG0onAlWFtAq5H06sCZ0BufcGuCXAGZWHzjXObctZJZfAe8754o6ftoINDKzGL8U64B1RjrnHFdeeSV///vfD5g2e/ZsMjMzeeKJJ3j33XcrVGrUsWNHOnbsyDXXXEOTJk3Ytm0bzjmsWLWBsho7SUhI+Hl+5xzdunVjypQpB/nJRORQMTMlV1IxavpdROogM3sD6A+kmlkWcCdeYvW2mV0FrATOD9f2w3nknQ50MrN2ZlYPr6rfmNAZzCzVzIpi+CNei4KhLgLeKHrjvCxgEt5zWRDm7DMIgwYN4u2332bjxo2A19rgypUr2bBhA845zj//fO6++25mzJgBQHJyMjt27ChxXf/73/9+TpwWLVpEXFwcycnJDB48mFGjRgFewrRlyxZ69erFpEmT2LRpE/n5+bz55pv069fvgHV26dKF1atXM23aNAD27NnDvHnzDvn3ICIiIiJSGc65i5xzLZxzsc65dOfcc865Tc65U5xznfy/m8O1/bAlWH4J08141fsWAG875+aZ2T1mdrY/W39goZktApoB9xUt7zet2Ar4otiq/wDcbmZL8J7Jei5cnyEIRx99NHfeeSeDBg2iW7duDB48mHXr1rFq1SpOPvlkMjIyuOaaa7j//vsBGDFiBFdffTUZGRns2bN/a/UvvvginTt3JiMjgyuuuILXX3+dqKgo7rzzTtatW0fXrl3JyMhgypQppKenc88999C/f38yMjLo1asXZ5xxxgHxxcXF8c4773D77bdzzDHH0L17d75VHX8RERERESDM/WDVFDWxH6y6Rt+3iIiIiBwKFekHK0iqnC0iIiIiInKIKMESERERERE5ROp0glUXqkfWBPqeRURERKSuqLMJVnx8PJs2bdLFf5g559i0aRPx8fFBhyIiIiIiEnbh7AerRktPTycrK4sNGzYEHUqtFx8fr86I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\n", | |
"text/plain": [ | |
"<Figure size 864x360 with 2 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"fig, ax = plt.subplots(1,1,figsize=(12,5))\n", | |
"\n", | |
"ax2 = ax.twinx()\n", | |
"ax.plot(train_scores.keys(), [round(t,2) for t in train_scores.values()], \"--\", color=\"g\", alpha=0.5)\n", | |
"ax.plot(test_scores.keys(), [round(t,2) for t in test_scores.values()], \"-.\", color=\"b\", alpha=0.8)\n", | |
"ax2.plot(times.keys(), [round(t,2) for t in times.values()], color=\"r\", alpha=0.6)\n", | |
"ax2.set_xlabel(\"Encoders\")\n", | |
"ax.set_ylabel(\"AUC Scores\")\n", | |
"ax2.set_ylabel(\"Time (seconds)\")\n", | |
"ax2.yaxis.tick_right()\n", | |
"ax.legend([\"Train Score\", \"Test Score\"])\n", | |
"ax2.legend([\"Time (seconds)\"])\n", | |
"\n", | |
"fig.tight_layout()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# Dataset 2\n", | |
"Amazon.com - Employee Access Challenge data. Contains all categorical variables with different cardinalities. \n", | |
"https://www.kaggle.com/c/amazon-employee-access-challenge" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Loading dataset" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 485, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"from catboost.datasets import amazon" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 486, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"train, test = amazon()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 487, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"ACTION 2\n", | |
"RESOURCE 7518\n", | |
"MGR_ID 4243\n", | |
"ROLE_ROLLUP_1 128\n", | |
"ROLE_ROLLUP_2 177\n", | |
"ROLE_DEPTNAME 449\n", | |
"ROLE_TITLE 343\n", | |
"ROLE_FAMILY_DESC 2358\n", | |
"ROLE_FAMILY 67\n", | |
"ROLE_CODE 343\n", | |
"dtype: int64" | |
] | |
}, | |
"execution_count": 487, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# cardinality\n", | |
"train.apply(lambda x: len(x.unique()))" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 551, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"(0.22942415087430193, 0.002044615337666697)" | |
] | |
}, | |
"execution_count": 551, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"7518/train.shape[0], 67/train.shape[0]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 488, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# ROLE_CODE == ROLE_TITLE\n", | |
"# removing one \n", | |
"train.drop(\"ROLE_TITLE\", axis=1, inplace=True)\n", | |
"test.drop(\"ROLE_TITLE\", axis=1, inplace=True)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 489, | |
"metadata": {}, | |
"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>ACTION</th>\n", | |
" <th>RESOURCE</th>\n", | |
" <th>MGR_ID</th>\n", | |
" <th>ROLE_ROLLUP_1</th>\n", | |
" <th>ROLE_ROLLUP_2</th>\n", | |
" <th>ROLE_DEPTNAME</th>\n", | |
" <th>ROLE_FAMILY_DESC</th>\n", | |
" <th>ROLE_FAMILY</th>\n", | |
" <th>ROLE_CODE</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>1</td>\n", | |
" <td>39353</td>\n", | |
" <td>85475</td>\n", | |
" <td>117961</td>\n", | |
" <td>118300</td>\n", | |
" <td>123472</td>\n", | |
" <td>117906</td>\n", | |
" <td>290919</td>\n", | |
" <td>117908</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>1</td>\n", | |
" <td>17183</td>\n", | |
" <td>1540</td>\n", | |
" <td>117961</td>\n", | |
" <td>118343</td>\n", | |
" <td>123125</td>\n", | |
" <td>118536</td>\n", | |
" <td>308574</td>\n", | |
" <td>118539</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>1</td>\n", | |
" <td>36724</td>\n", | |
" <td>14457</td>\n", | |
" <td>118219</td>\n", | |
" <td>118220</td>\n", | |
" <td>117884</td>\n", | |
" <td>267952</td>\n", | |
" <td>19721</td>\n", | |
" <td>117880</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>1</td>\n", | |
" <td>36135</td>\n", | |
" <td>5396</td>\n", | |
" <td>117961</td>\n", | |
" <td>118343</td>\n", | |
" <td>119993</td>\n", | |
" <td>240983</td>\n", | |
" <td>290919</td>\n", | |
" <td>118322</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>1</td>\n", | |
" <td>42680</td>\n", | |
" <td>5905</td>\n", | |
" <td>117929</td>\n", | |
" <td>117930</td>\n", | |
" <td>119569</td>\n", | |
" <td>123932</td>\n", | |
" <td>19793</td>\n", | |
" <td>119325</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" ACTION RESOURCE MGR_ID ROLE_ROLLUP_1 ROLE_ROLLUP_2 ROLE_DEPTNAME \\\n", | |
"0 1 39353 85475 117961 118300 123472 \n", | |
"1 1 17183 1540 117961 118343 123125 \n", | |
"2 1 36724 14457 118219 118220 117884 \n", | |
"3 1 36135 5396 117961 118343 119993 \n", | |
"4 1 42680 5905 117929 117930 119569 \n", | |
"\n", | |
" ROLE_FAMILY_DESC ROLE_FAMILY ROLE_CODE \n", | |
"0 117906 290919 117908 \n", | |
"1 118536 308574 118539 \n", | |
"2 267952 19721 117880 \n", | |
"3 240983 290919 118322 \n", | |
"4 123932 19793 119325 " | |
] | |
}, | |
"execution_count": 489, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"train.head()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 490, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Ones 0.94\n", | |
"Zeros 0.06\n" | |
] | |
} | |
], | |
"source": [ | |
"print(\"Ones\", round(sum(train.ACTION == 1)/len(train),2))\n", | |
"print(\"Zeros\", round(sum(train.ACTION == 0)/len(train),2))" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 491, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"(32769, 9)" | |
] | |
}, | |
"execution_count": 491, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"train.shape" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 492, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"26215.2" | |
] | |
}, | |
"execution_count": 492, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"0.8*train.shape[0]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 493, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# Randomly splitting train-test data (80,20)\n", | |
"np.random.seed(10)\n", | |
"train_sub = train.iloc[np.random.permutation(train.index)[:26215],:].reset_index(drop=True)\n", | |
"valid_sub = train.iloc[np.random.permutation(train.index)[26215:],:].reset_index(drop=True)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 494, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"((26215, 9), (6554, 9))" | |
] | |
}, | |
"execution_count": 494, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"train_sub.shape, valid_sub.shape" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 495, | |
"metadata": {}, | |
"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>ACTION</th>\n", | |
" <th>RESOURCE</th>\n", | |
" <th>MGR_ID</th>\n", | |
" <th>ROLE_ROLLUP_1</th>\n", | |
" <th>ROLE_ROLLUP_2</th>\n", | |
" <th>ROLE_DEPTNAME</th>\n", | |
" <th>ROLE_FAMILY_DESC</th>\n", | |
" <th>ROLE_FAMILY</th>\n", | |
" <th>ROLE_CODE</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>1</td>\n", | |
" <td>78382</td>\n", | |
" <td>7001</td>\n", | |
" <td>117961</td>\n", | |
" <td>118327</td>\n", | |
" <td>118933</td>\n", | |
" <td>132108</td>\n", | |
" <td>4673</td>\n", | |
" <td>121596</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>1</td>\n", | |
" <td>74508</td>\n", | |
" <td>17561</td>\n", | |
" <td>91261</td>\n", | |
" <td>118026</td>\n", | |
" <td>118202</td>\n", | |
" <td>118260</td>\n", | |
" <td>290919</td>\n", | |
" <td>118261</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>1</td>\n", | |
" <td>17249</td>\n", | |
" <td>4914</td>\n", | |
" <td>117961</td>\n", | |
" <td>118300</td>\n", | |
" <td>120026</td>\n", | |
" <td>133686</td>\n", | |
" <td>118424</td>\n", | |
" <td>119435</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>1</td>\n", | |
" <td>971</td>\n", | |
" <td>3918</td>\n", | |
" <td>117961</td>\n", | |
" <td>118343</td>\n", | |
" <td>118660</td>\n", | |
" <td>250337</td>\n", | |
" <td>118424</td>\n", | |
" <td>120791</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>1</td>\n", | |
" <td>17171</td>\n", | |
" <td>1810</td>\n", | |
" <td>117961</td>\n", | |
" <td>118327</td>\n", | |
" <td>120559</td>\n", | |
" <td>117906</td>\n", | |
" <td>290919</td>\n", | |
" <td>117908</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" ACTION RESOURCE MGR_ID ROLE_ROLLUP_1 ROLE_ROLLUP_2 ROLE_DEPTNAME \\\n", | |
"0 1 78382 7001 117961 118327 118933 \n", | |
"1 1 74508 17561 91261 118026 118202 \n", | |
"2 1 17249 4914 117961 118300 120026 \n", | |
"3 1 971 3918 117961 118343 118660 \n", | |
"4 1 17171 1810 117961 118327 120559 \n", | |
"\n", | |
" ROLE_FAMILY_DESC ROLE_FAMILY ROLE_CODE \n", | |
"0 132108 4673 121596 \n", | |
"1 118260 290919 118261 \n", | |
"2 133686 118424 119435 \n", | |
"3 250337 118424 120791 \n", | |
"4 117906 290919 117908 " | |
] | |
}, | |
"execution_count": 495, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"train_sub.head()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Modeling" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"1. Data is already numeric label encoded. So no need for that. " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 548, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"encoders = {\"one_hot\": one_hot_encoder, \n", | |
" \"numeric_label\": None,\n", | |
" \"kfold_target\": kfold_target_encoder, \n", | |
" \"catboost_target_encoder\": catboost_target_encoder}" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 549, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"targetfeatures = ['RESOURCE', 'MGR_ID', 'ROLE_ROLLUP_1', 'ROLE_ROLLUP_2',\n", | |
" 'ROLE_DEPTNAME', 'ROLE_FAMILY_DESC', 'ROLE_FAMILY', 'ROLE_CODE']" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 534, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"train_scores = {}\n", | |
"test_scores = {}\n", | |
"times = {}\n", | |
"for enc_name, enc in encoders.items():\n", | |
" train_score = 0.\n", | |
" test_score = 0.\n", | |
" st = time.time()\n", | |
" for i in range(1): # just running once as this data is large\n", | |
" train_score_this_iter, test_score_this_iter = fitmodel_and_auc_score(enc, \n", | |
" train_sub, \n", | |
" valid_sub,\n", | |
" targetfeatures, \n", | |
" \"ACTION\") \n", | |
" train_score+=train_score_this_iter\n", | |
" test_score+=test_score_this_iter\n", | |
" # averaging score\n", | |
" train_score/=1.\n", | |
" test_score/=1.\n", | |
" times[enc_name] = time.time()-st \n", | |
" train_scores[enc_name] = train_score\n", | |
" test_scores[enc_name] = test_score" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 535, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# now fitting on catboost\n", | |
"cat_features=range(8)\n", | |
"train_score = 0.\n", | |
"test_score = 0.\n", | |
"st = time.time()\n", | |
"for i in range(1):\n", | |
" model = CatBoostClassifier(\n", | |
" iterations=500,\n", | |
" early_stopping_rounds=20, \n", | |
" eval_metric=\"AUC\")\n", | |
"\n", | |
" model.fit(\n", | |
" train_sub[targetfeatures], train_sub[\"ACTION\"],\n", | |
" cat_features=cat_features,\n", | |
" eval_set=(valid_sub[targetfeatures], valid_sub[\"ACTION\"]),\n", | |
" verbose=False\n", | |
" )\n", | |
" \n", | |
" train_score_this_iter = roc_auc_score(train_sub.ACTION, model.predict(train_sub[targetfeatures]))\n", | |
" test_score_this_iter = roc_auc_score(valid_sub.ACTION, model.predict(valid_sub[targetfeatures]))\n", | |
" train_score+=train_score_this_iter\n", | |
" test_score+=test_score_this_iter\n", | |
" # averaging score\n", | |
"train_score/=1.\n", | |
"test_score/=1.\n", | |
"times[\"catboost\"] = time.time()-st \n", | |
"train_scores[\"catboost\"] = train_score\n", | |
"test_scores[\"catboost\"] = test_score" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 536, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"{'one_hot': 0.7323405414477682,\n", | |
" 'numeric_label': 0.8617465313668865,\n", | |
" 'kfold_target': 0.878025396681621,\n", | |
" 'catboost_target_encoder': 0.8418819465905094,\n", | |
" 'catboost': 0.9062952227704307}" | |
] | |
}, | |
"execution_count": 536, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"train_scores" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 537, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"{'one_hot': 0.7137792512590169,\n", | |
" 'numeric_label': 0.8418601468103788,\n", | |
" 'kfold_target': 0.849442427403292,\n", | |
" 'catboost_target_encoder': 0.818754352716162,\n", | |
" 'catboost': 0.8715391293807279}" | |
] | |
}, | |
"execution_count": 537, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"test_scores" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 538, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA1gAAAFgCAYAAACmKdhBAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3Xl41NXZ//H3mez7npCQBJKwJmEPKARQEUHRqiCKuwi22qp1qU+12kerdrGtbdVqH4sWqdQdBbU/QEBlExRBtmwCYU0ITPZ9m8z5/XGSEDDsmcwkuV/XlYt8Z77znXtAk/nMOec+SmuNEEIIIYQQQojzZ3F2AUIIIYQQQgjRXUjAEkIIIYQQQogOIgFLCCGEEEIIITqIBCwhhBBCCCGE6CASsIQQQgghhBCig0jAEkIIIYQQQogOIgFLCCGEEEIIITqIBCwhhBBCCCGE6CASsIQQQgghhBAuTykVp5T6UimVrZTKVEo90Hx7qFJqpVJqd/OfISd5/B3N5+xWSt3hsDq11o66tsuwWCzax8fH2WUIIYQQQgghTqKmpkZrrU86AKSUigaitdbfKaUCgC3AtcBsoERr/ZxS6jEgRGv96AmPDQU2A2mAbn7sKK11aUe/DveOvqAr8vHxobq62tllCCGEEEIIIU5CKVV7qvu11gVAQfP3lUqpbKA3cA1wcfNp/wZWA4+e8PCpwEqtdUnzc60ELgfe6aDyW8kUQSGEEEIIIUSXopTqC4wAvgGimsNXSwiLbOchvYFDbY7zmm/rcD1iBEsIIYQQQgjh8tyVUpvbHM/TWs878SSllD/wIfCg1rpCKXUm127vJIeslZKAJYQQQgghhHAFNq112qlOUEp5YMLVW1rrj5pvPqqUitZaFzSv07K289A8jk0jBIjFTCXscD2iyYWfn58+cQ1WY2MjeXl51NXVOakqca68vb2JjY3Fw8PD2aUIIYQQQogOopSq0Vr7neJ+hVljVaK1frDN7X8Gits0uQjVWv/yhMeGYhpbjGy+6TtMk4uSDn8dPTVg7du3j4CAAMLCwjjDYUXhArTWFBcXU1lZSUJCgrPLEUIIIYQQHeQMAtZ4YB2wE7A33/w4Zh3W+0A8cBC4XmtdopRKA+7RWt/V/Pg5zecD/E5r/YZDXkdPDVjZ2dkMGjRIwlUXpLUmJyeHwYMHO7sUIYQQQgjRQU4XsLqKHt1FUMJV1yT/bkIIIYQQwlX16IAlhBBCCCGEEB1JApaTFBcXM3z4cIYPH06vXr3o3bt36/G4ceMc8pxbt27lrrvucsi1z8Xs2bNZtGjRSe9/+eWXeeMNh0yNFUIIIYQQwiGkTbuThIWFsW3bNgB+85vf4O/vzyOPPOLQ5/z973/Pr3/9a4c+R0eaM2cO6enp3Hnnnc4uRQghhBBCiDMiAQvg/ffh0KHTn3c24uLghhvO6aH+/v5UVVWxevVqnnrqKaKioti2bRszZsxgyJAhvPjii9TW1rJkyRKSkpIoLCzknnvu4eDBgwC88MILpKenH3fNyspKduzYwbBhwwBYs2YNDzzwAGDWNK1du5aAgAD+/Oc/8/7771NfX8/06dN5+umnAXjzzTd5/vnnUUoxdOhQFi5cyIEDB5gzZw6FhYVERETwxhtvEB8fz+zZswkMDGTz5s0cOXKEP/3pT8ycOROtNffffz9ffPEFCQkJtG2w8thjj/HJJ5/g7u7OlClTeP755/H19aVv375s2rSJMWPGnNPfpRBCCCGEEJ1JApaL2759O9nZ2YSGhpKYmMhdd93Fpk2bePHFF/n73//OCy+8wAMPPMBDDz3E+PHjOXjwIFOnTiU7O/u462zevJnU1NTW4+eff55XXnmF9PR0qqqq8Pb2ZsWKFezevZtNmzahtebqq69m7dq1hIWF8bvf/Y6vvvqK8PBwSkrMdgH33Xcft99+O3fccQfz58/n5z//OUuWLAGgoKCA9evXk5OTw9VXX83MmTNZvHgx33//PTt37uTo0aMkJyczZ84cSkpKWLx4MTk5OSilKCsra60zLS2NdevWScASQgghhHCA8pztBJXWwIUXgjQS6xASsOCcR5o6w+jRo4mOjgYgKSmJKVOmADBkyBC+/PJLAFatWkVWVlbrYyoqKqisrCQgIKD1toKCAiIiIlqP09PTefjhh7nllluYMWMGsbGxrFixghUrVjBixAgAqqqq2L17N9u3b2fmzJmEh4cDEBoaCsDGjRv56COzgfZtt93GL395bD+3a6+9FovFQnJyMkePHgVg7dq13HTTTbi5uRETE8OkSZMACAwMxNvbm7vuuosrr7ySq666qvU6kZGR5OTkdMRfpRBCCCGEaKu+nqKX/4TdzZ+QkSPBy8vZFXUL0uTCxXm1+Q/dYrG0HlssFmw2GwB2u52NGzeybds2tm3bRn5+/nHhCsDHx4e6urrW48cee4zXX3+d2tpaLrzwQnJyctBa86tf/ar1Onv27GHu3Llorc+oNXrbc9rW3XYqYHvXcXd3Z9OmTVx33XUsWbKEyy+/vPW+uro6fHx8TvvcQgghhBDi9OzazpbDW9hfth8+/JC+9T74/PhnEq46kASsbmDKlCm8/PLLrcctzTPaGjx4MHv27Gk9zs3NZciQITz66KOkpaWRk5PD1KlTmT9/PlVVVQDk5+djtVq59NJLef/99ykuLgZonSI4btw43n33XQDeeustxo8ff8o6J06cyLvvvktTUxMFBQWtI3BVVVWUl5czbdo0XnjhhePq37Vr13FTG4UQQgghxLk5VH6I17a8xqe7PmXfuk9hzRrcpkzFO3WYs0vrVmSKYDfw0ksvce+99zJ06FBsNhsTJ07k1VdfPe6cQYMGUV5e3jp18IUXXuDLL7/Ezc2N5ORkrrjiCry8vMjOzmbs2LGAabbxn//8h5SUFJ544gkuuugi3NzcGDFiBAsWLOCll15izpw5/PnPf25tcnEq06dP54svvmDIkCEMGDCAiy66CDANOK655hrq6urQWvO3v/2t9TFfffUVTz31VAf/jQkhhBBC9BxVDVWs2ruKbUe2EeAZwPXxV5D8jw8gJgauvdbZ5XU7qu30re7Kz89PV1dXH3dbdnY2gwcPdlJFzvG3v/2NgIAAl9oL61S2bt3KX//6VxYuXPiD+3riv58QQgghxLnYlL+Jz/Z8xti4sUyIG4/XvxbAjh3w+OMQG+vs8loppWq01n7OruN8yQhWD/LTn/6UDz74wNllnLGioiKeffZZZ5chhBBCCNHl7CvdR31TPYPCB5EWk0a/0H6E+oTC11/D1q0wY4ZLhavuRAJWD+Lt7c1tt93m7DLO2GWXXebsEoQQQgghupTyunJW5K4gszCT3gG9GRg2EIuymHBVXAzvvAP9+4O8z3KYHh2wzrQ7nnAtPWFaqxBCCCHE2bDZbWw8tJG1B9ai0VzS9xLGxY079l7XboeW9fJ33gkW6XXnKD02YHl7e1NcXExYWJiErC5Ea01xcTHe3t7OLkUIIYQQwmUcKDvA5/s+Z3D4YKb2m0qwd/DxJ6xaBbt3wx13QFiYc4rsIXpsk4vGxkby8vKO2xtKdA3e3t7Exsbi4eHh7FKEEEIIIZympLaE/Ip8hkQNAeBw5WFiAmJ+eGJeHvz+9zB0KNx9N7jo4II0uejiPDw8SEhIcHYZQgghhBBCnJWGpgbWH1zPVwe/wsvdi4HhA/F082w/XDU2wvz54OcHt97qsuGqO+mxAUsIIYQQQoiuRGtNVmEWK3JXUF5fztCooVyWeBmebp4nf9Ann0B+Ptx/P/j7d16xPZhDV7cppS5XSn2vlNqjlHqsnfv7KKU+V0rtUEqtVkrFtrnvDqXU7uavO9rcPkoptbP5mi8pWUAlhBBCCCF6gJLaEhZlLcLHw4c7h9/JjMEzCPAKOPkDdu2ClSth4kRITe28Qns4h63BUkq5AbuAy4A84FvgJq11VptzPgD+q7X+t1JqEnCn1vo2pVQosBlIAzSwBRiltS5VSm0CHgC+BpYCL2mtl52qlvbWYAkhhBBCCOHq6mx17CrexdCooYBpZhEXFIdFnWacpLYWnn4aPDzg178GL69OqPb8dJc1WI4cwRoD7NFa79VaNwDvAteccE4y8Hnz91+2uX8qsFJrXaK1LgVWApcrpaKBQK31Rm2S4ZvAtQ58DUIIIYQQQnQ6rTXbjmzj5U0vszh7MSW1JQD0Ce5z+nAF8O67UF4Oc+Z0iXDVnThyDVZv4FCb4zzgghPO2Q5cB7wITAcClFJhJ3ls7+avvHZu/wGl1E+AnwB4ep5iXqoQQgghhBAu5HDlYZbuXkpeRR6xgbHcPORms1HwmdqyBb7+Gq66CqSpW6dzZMBqb23UifMRHwFeVkrNBtYC+YDtFI89k2uaG7WeB8wDM0XwzEoWQgghhBDCeRqaGli4fSEWZeHaQdcyLGrY2e3ZWlYGb70FffvCtGkOq1OcnCMDVh4Q1+Y4Fjjc9gSt9WFgBoBSyh+4TmtdrpTKAy4+4bGrm68Ze8Ltx11TCCGEEEKIrsSu7WQXZpMckYynmyezUmfRy78X3u7eZ3chreHNN6GhwUwNdHNzTMHilBy5ButboL9SKkEp5QncCHzS9gSlVLhSrZNIfwXMb/7+M2CKUipEKRUCTAE+01oXAJVKqQubuwfeDnzswNcghBBCCCGEwxwsP8i8LfP4IOsD9pTsAaBvcN+zD1cAa9ZAZibMnAlRUR1cqThTDhvB0lrblFL3YcKSGzBfa52plHoG2Ky1/gQzSvUHpZTGTBG8t/mxJUqpZzEhDeAZrXVJ8/c/BRYAPsCy5i8hhBBCCCG6jMr6SlbtXcX2o9sJ9Ark+uTr6Rfa79wveOQILFoEKSlw0UUdV6g4aw5r0+5KpE27EEIIIYRwFVprXt38KkU1RYyLG8eEPhNOvVnw6TQ1wR//CEVF8OSTEBzcccV2ou7Spt2Ra7CEEEIIIYQQzfaV7iM2MBYPNw+uHHAlfh5+hPmGnf+Fly6FAwfg7ru7bLjqTiRgCSGEEEII4UBldWWsyF1BVmEWU5OmMjZuLPFB8R1z8b17TcC68EIYObJjrinOiwQsIYQQQgghHMBmt/HVwa9Yf3A9AJMSJjG69+iOe4L6enjjDTNqdeONHXddcV4kYAkhhBBCCOEAH+d8zE7rTpIjkpmaNJUg76COfYJFi6CwEB5+GHx8Ovba4pxJwBJCCCGEEKKDFNcU4+Xuhb+nP+PjxzMiegSJIYkd/0Q7d8LatTBlCgwY0PHXF+dMApYQQgghhBDnqaGpgbUH1rLx0EaG9xrOjwb+iCh/B+1FVVlpNhTu3RuuucYxzyHOmQQsIYQQQgghzpHWmszCTFbkrqCivoJhUcO4JOESRz4h/Oc/UFMDDzwA7vJ23tXIv4gQQgghhBDnaN3BdXyx7wui/aO5Pvl64oLiHPuEGzfCtm1w3XUQG+vY53IxSqn5wFWAVWud2nzbe8DA5lOCgTKt9fB2HrsfqASaAJvWOs1RdUrAEkIIIYQQ4izU2eqos9UR7B3M8F7D8fXwZWT0SCzK4tgnLiqC994za64mT3bsc7mmBcDLwJstN2itZ7V8r5T6C1B+isdforUuclh1zSRgCSGEEEIIcQa01mw7so1Ve1cR6RfJHcPvINArkLQYhw2GHGO3m5bsALNng8XBYc4Faa3XKqX6tnefUkoBNwCTOrOm9kjAEkIIIYQQ4jTyK/JZunsp+ZX5xAXGMSVpSucWsHIl7NkDd94JYWGd+9ydx10ptbnN8Tyt9bwzfOwE4KjWevdJ7tfACqWUBv55Ftc9axKwhBBCCCGEOIXswmzez3wfP08/pg+aztCooZgBk05y6BB8/DGMHAkXXNB5z9v5zmdt1E3AO6e4P11rfVgpFQmsVErlaK3XnuNznZIELCGEEEIIIU5g13bK68oJ8QkhKTSJiX0mMi5uHF7uXp1bSGMjzJ8P/v5w663QmcGui1BKuQMzgFEnO0drfbj5T6tSajEwBnBIwOp5kzeFEEIIIYQ4hQNlB/jn5n+ycMdCmuxNeLp5cknCJZ0frgCWLIHDh+GOO8DPr/Ofv2uYDORorfPau1Mp5aeUCmj5HpgCZDiqGAlYQgghhBBCABX1FXyY9SFvbHuDOlsdkxMnO74z4Knk5MCqVXDxxZCS4rw6XIRS6h1gIzBQKZWnlJrbfNeNnDA9UCkVo5Ra2nwYBaxXSm0HNgH/T2u93GF1aq0ddW2X4efnp6urq51dhhBCCCGEcFFHq47yr63/wq7tjIsbx4T4CXi4eTivoJoaeOYZ8PSEJ54ALyeMnnUypVSN1rrLD9PJGiwhhBBCCNFjVdZXEuAVQKRfJGkxaaTFpBHqE+rssuDdd6G8HB59tEeEq+5EApYQQgghhOhxSmtL+Sz3Mw6UHeC+Mffh5+nX+a3XT2bzZvjmG/jRj6BvX2dXI86SBCwhhBBCCNFjNDY18tWhr1h/cD0KxcQ+E53TvOJkysrgrbdMsJo2zdnViHMgAUsIIYQQQvQItY21/HPLPymrKyM1MpXLEi8jyDvI2WUdozUsWAA2G8yZAxbpR9cVScASQgghhBDdWm1jLT4ePvh4+DAkcgiJIYkkhCQ4u6wfWr0asrPhllsgKsrZ1YhzJLFYCCFEl1Jnq8NabcWu7c4uRQjh4upt9azMXclfN/6VwupCAC5NvNQ1w1VBAXz4IaSmwoQJzq5GnAcZwRJCCOGStNYopbDZbXy+93MKawqxVlupqK8AYGzsWKb2m4rWGo127l41QgiXorUmw5rBitwVVDZUMqLXCHw9fJ1d1snZbDB/vmnJfscdoJSzKxLnQQKWEEIIpztSdYSjVUdbQ5S12krf4L5cO+ha3JQbO607CfAMoG9wXyL9IvH39CcmIAaAvIo83st8j+SIZFIiUogPikfJmxMheiytNQt3LGRv6V5iAmKYlTqL2MBYZ5d1av/v/8HBg3DPPRAY6OxqxHmSgCWEEKJT2Ow2imuKWwOURVm4JOESAD7M+pDCmkLclBthvmHEBsbSJ6gPAEopfjH2FycNTe4Wd+KD4vmu4Ds25W8i0CuQ5IhkLupzET4ePp32+oQQztXQ1ICnmydKKRKCE0iNTGVErxGu/4HL3r2wbBmMGwcjRji7GtEBlNba2TU4nJ+fn66urnZ2GUII0SM02ZsoqS2hrK6M/mH9Afg452O2H93eum7KoizEB8Uze/hsAA6VH8Lb3ZtQn1DcLG7n9Lz1tnp2Fe8iszCTvIo8HrzwQdwt7uwp2YOPuw8xATGu/0ZLCHHWtNZsPbKVVXtXcd3g60gKTXJ2SWeuvh6efRbsdnjySfD2dnZFTqWUqtFa+zm7jvMlI1hCCCHOiV3bUSiUUnxf9D07rTuxVlsprimmSTdhURYen/B46whTgFcAkX6RRPhGEOYbhrvl2K+guKC4867Hy92LIVFDGBI1hCZ7U2tQW5G7Amu1lRDvEFIiU0iJSKGXfy8JW0J0A/kV+SzdvZT8ynzig+Lx9/R3dkln54MPoKgIfvGLHh+uuhOHjmAppS4HXgTcgNe11s+dcH888G8guPmcx7TWS5VStwD/0+bUocBIrfU2pdRqIBqobb5vitbaeqo6ZARLCCHOT01jDYfKD2GttraukyqqKeL+MfcT5B3ExkMb+Sb/GyL9IltDVKRfJFH+UU5vPlHbWEtOUQ6ZhZnsLd2LXdsZHTOaKwdc6dS6hBDnZ0XuCjYc2kCAZwBTkqaQGpnatT442bEDXnkFpk6FGTOcXY1L6C4jWA4LWEopN2AXcBmQB3wL3KS1zmpzzjxgq9b6/5RSycBSrXXfE64zBPhYa53YfLwaeERrvflMa5GAJYQQp6e1pqK+onWNVGFNIWNjxxLlH0WGNYNFWYsACPIKIsLPBKgLYy8k0CuwteOfq6tprCG7MJsw3zD6BveltLaUt3e+3TqyFeEX4ewShRCn0Haa8XcF31FcU8zEPhPxcvdycmVnqbISnn4agoLgV78Cd5lUBt0nYDnyX3MMsEdrvRdAKfUucA2Q1eYcDbS0SgkCDrdznZuAdxxYpxBC9Chaa6oaqrBWWwn2DibMN4wjVUd4Y+sb1DfVt54X4BlAckQyUf5RJIYkMnfEXCL8IvB2/+E0lq4QrgB8PXwZFTOq9bjOVoefpx9r9q9h9f7VRPlFkRKZwuiY0dIgQwgXs79sP8t2L2NM7zGMihnFyOiRzi7p3GgNCxdCbS08/LCEq27Ikf+ivYFDbY7zgAtOOOc3wAql1P2AHzC5nevMwgSztt5QSjUBHwK/1e0MwymlfgL8BMDT0/Nc6hdCiC5Na41d23GzuNHQ1NC6FslabaXOVgfAxX0v5uK+FxPkFcSwXsOOm97XNmD4evjiG+TCe8ico+iAaGYPn01lfSXZRdlkWDNYs38NaTFpABRUFuDt7k2IT4iTKxWi56qor2BF7goyrBkEewcT4BXg7JLOz4YNsH07XH89xMQ4uxrhAI4MWO19nHliELoJWKC1/otSaiywUCmVqrUZ/1VKXQDUaK0z2jzmFq11vlIqABOwbgPe/METaT0PmAdmiuD5vxwhhHBtB8sPcrTq6HHrpAaFD+LqgVfjYfFgd/Fugr2DSY1MbV0rFeUXBYCPhw/T+k9z8itwngCvAMb0HsOY3mOoaaxp3ZD0s9zP2F+2n5iAGFIjU0mOSCbYO9jJ1QrRc2wt2MqyPcuwazsX972Y9Lh0PNw8nF3WuSsqgvfeg4ED4dJLnV2NcBBHBqw8oG1bqFh+OAVwLnA5gNZ6o1LKGwgHWppW3MgJ0wO11vnNf1Yqpd7GTEX8QcASQojuqM5WR2F1YWuI8rB4cGmi+SW9JGcJJbUleLl5EeEXwaDwQSSFmHbFSikeGvuQM0vvMlrCFcC1g64l05pJZmEmK3JXsCJ3BWkxaVw14ConVihE92fXdizKQoBXAIkhiUxNmtr1R5Ltdpg/HywWmD0busjUanH2HBmwvgX6K6USgHxMWLr5hHMOApcCC5RSgwFvoBBAKWUBrgcmtpyslHIHgrXWRUopD+AqYJUDX4MQQjhFQ1MDhdWFVNRXMDhiMADvZ75PVuGxZayebp4khiS2Hl+ffD2+Hr4EegV2mTVRri7YO5j0+HTS49MpqS0h05rZ+iavzlbHuxnvMjh8MMkRyV1/2pIQLqC0tpTle5YT4RfB5MTJ9AvtR7/Qfs4uq2N89hnk5sKcORAa6uxqhAM5LGBprW1KqfuAzzAt2OdrrTOVUs8Am7XWnwC/AF5TSj2EmT44u816qolAXkuTjGZewGfN4coNE65ec9RrEEIIR2tsasTd4o5SigxrBjuO7sBabaWsrgwAN+XGExOfwKIsDAwbSExATOs6qWDv4OOCVHRAtLNeRo8Q6hPKhD4TWo/L6sqoaaxh2Z5lLN+znD7BfUiJSGFI1JB2G4EIIU6usamR9QfX89Whr7AoCwkhCc4uqWMdOgSffAJpaTBmjLOrEQ7m0H2wXIW0aRdCuIKK+goOlB04bo1UaW0pvxj3C/w9/dlwaAPbj2xvbYHeEqRCfUJlRMqFWautZBVmkWHNaN0bLMw3jNLaUrzcvY6bciiE+KH9ZftZnL2Y8vpyhkYN5bLEy7rXiHBjI/zud1BTA089BX5dvgu5w0ibdiGEED/QZG+iuLa4dZ2UtdrKJQmXEOkXyb7SfSzOWYxFWQjzCSPaP5qhUUNRzT2BxsWNY1zcOCe/AnG2WsLwRX0uori2mDDfMABW7V1FdlE2iSGJpESkMCh8kLR+F6KNlv3zfD188fP0Y8bgGfQJ7uPssjre4sVQUAA//7nLhavcXPjoI7jvPvCRH08dRkawhBDiHNi1ndLaUqzVViL8Igj3DedQ+SEWbFtAk24CQKEI9QnlqgFXkRCSQE1jDVUNVYT5hOFmcXPyKxCOdqTqCBnWDDKtmZTWleKm3BgZPZIrB1zp7NKEcKp6Wz1rDqyhqqGKGYNnAHSZzcrPWnY2vPACXHIJ3Hijs6sBoKkJ1qwxzQy3bAFPT3j5ZRjpAtuKyQiWEEL0AFprGu2NeLp5UmerY+nupVirrRTVFGGz2wC4NOFSJvSZQJhvGGPjxraOaIT5hB3XTtjXw1emi/Ugvfx70cu/F5cmXMrhysNkFmYS4GmmPTXZm1iSs4QBYQMYGD4QTzfZr1F0f1prdlp3siJ3BdUN1YyIHtHaLbBbhquaGliwAHr1ghkznF0NYJaC3X03WK0QHW0G1a65BoKCnF1Z9yIBSwgh2thdvLt1al9hTSGF1YUM7zWcKwdciaebJ3kVeYT5hJEYktgapMJ9wwEToCYntrdfuujJlFL0DuxN78DerbeV1pWyv2w/O607cbe4MyBsACkRKQwIG9C19/gR4iRKaktYkrOEg+UH6R3Qm5tSbzru/4lu6e23oaICfvYzM0zkJFlZcOQITJoEvXubPhuTJ8P48aZjvOh4MkVQCNGjaK2pbKg8bo2Un6dfazD628a/UV5fToBngGky4RdBUkgS/cP6O7ly0d1orTlYfpDMwkyyCrOoaqjizuF30ie4DzWNNXhYPCRsiW6juqGa+VvnMz5+PMN7De+eI1ZtffstvP66GR6a1vmbuDc1gVvzTPQHH4QDB8xaK1f/a+8uUwQlYAkhuiWtNdWN1VirrVQ3VDMkaggAC7cvJLc0t/U8Pw8/+oX2Y/rg6YDpCBfgGSDNCESnsms7B8sP0ieoD0oplu1extYjWxkUPoiUiBSSQpNwt8ikE9F12LWd7wq+Y1fxLm5KvQmlVPddZ3Wi0lJ45hkzNfB//qdTh4mOHoUPP4SPP4Y33oCYGNNfIzDQ5fprtKu7BCz5aS2E6PJqG2tbA9F3Bd+x/ch2CmsKqWmsAcDD4kFqZCpKKYb1GsbA8IGt0/tOXBMV6RfZ6fULYVEW+gb3bT1Ojkim0d5IdmE2O47uwMvNi+G9hnNF/yucV6QQZ+hQ+SGW7l5KQVUBfYP7UmurxdfDt2eEK63NuiubDe68s1PCldbw3XemacXq1eZ4wgRoaDD3R8sWiZ1OApYQokspqS1hX+m+4/aSqmqo4tH0R/Hx8KHOVodd2xkUPui4vaRaDI0a6sTqhTgzfYL70Ce4D1f2v5J9ZftuIoyKAAAgAElEQVTIsGa0vjnVWvP5vs9JCE4gISQBi5JFFMI11NnqWL5nOduObCPQK5CZyTNJiUjpGcGqxRdfQE4O3HorRDr2A7uaGli+3ASr3FwzSnXrrTBzphm5Es4jAUsI4XLqbfWtDSZa1kld0f8Kwn3D2Ve6j093fYqnmycRvhH0D+1PhN+xACV7SYnuxM3iRr/QfvQL7dd6W2VDJd/mf8v6g+vx9fAlOSKZlIgU+gT3kbAlnMrd4k5+RT7j48czsc/Entcds6DALHQaOtR0kHCgV16BDz6AqioYMACefBKmTgUvL4c+rThDsgZLCOE0jU2NrUGqd2Bvwn3D2Vu6lze3v9l6jrvFnQjfCK4ccCWxgbHUNtZS31RPkFdQz/pUVIg2bHYbe0r2kGHNYFfxLhqaGrgh5QYztbCpEXeLu/z/ITrFvtJ9fHXoK2alzMLDzYMme1PP3OfPZoPnnjPrr556ygwndSC7HbZvhxEjzPEf/mDC1axZMGSI6zevOFOyBksIIc6QzW7DZrfh7e5NdUM1n3z/CYU1hZTWlqIxH/JMSZpCuG84kX6RTEqY1Dq9L9g7+LhP5X08fKQBhejx3C3uDAofxKDwQTQ2NbKreFfrKNfXeV+zKX8TyRHJpEamEhsYK2FLdLjyunJW5K4gszCTEO8QyurKiPCL6JnhCuC//zWbTP30px0ergA+/RSefRbefBOSk+Gxx7pPqOqOJGAJITqU1prMwszjpveV1JZwQewFXN7vcrzcvSitKyXaP5qhUUNbg1SoTygA/p7+TOwz0cmvQoiuw8PNg5TIlNbjmIAYegf2ZkvBFr7J/4YgryCGRA3h0oRLJWiJ82bXdr46+BVrD6wF4JK+l5Aen96zu1zm5prFUOnpMHx4h1xyzx54/31zuWnTzL5VPj7Qv3nHEPlf2bX14P8bhBDnyq7tlNSWHBeigryDmJI0BaUUy/csp7qhmlCfUCL9IkmJTCExJBEwn7z/bPTPnPwKhOi+kkKTSApNot5Wz/fF35NhzaCopqg1XH2b/y2xgbH08u8lgUucNYViT8ke+of1Z0rSFIK9g51dknPV1cH8+RAWBjfccF6XamoyXQDfe890BfT0NJ3ewbRYnzLl/MsVnUPWYAkhTsqu7ZTVlWGttlJnq2N4L/PJ3OvfvU5eRV7reSHeIfQP68+0/mYzxZLaEgK9Anv2J5pCuJCW/YdqG2t5fsPzNOkmQn1CSYlIITUylUi/SAlb4qRKakv4fO/nXN7vcgK8AmhsapRNsFu8+SZs2ACPPAL9+p3+/HaUlMCSJbBoEVitpgPgzJlw7bUOmW3o0k63BkspNR+4CrBqrVObb/sN8GOgsPm0x7XWS9t57OXAi4Ab8LrW+rkOLv/Yc0nAEkKc6Ou8r9l+ZDtFNUU02hsB8Hb35tH0R1FKkWHNwGa3EekXSbhveM/rFCVEF1bTWENOUQ6Z1kz2le3Dru1cM/AaRkSP6DkbwYoz0tDUwLoD69hwaANuFjeuT76e/mH9nV2W69i+Hf7xD7jiCpOGztKePSafrVwJjY1wwQWmacX48Z26N7FLOYOANRGoAt48IWBVaa2fP8Xj3IBdwGVAHvAtcJPWOqsDy28lHy8LIQCzWa+XuxcWZaHJ3oSvhy9pMWlE+EW07iXV8sYrNTLVydUKIc6Vr4cvI6NHMjJ6JNUN1WQXZbe+ad52ZBsb8zaSEpFCSmQK4b7hTq5WOEtWYRbL9yynor6CYVHDmJw4mQCvAGeX5ToqKmDhQoiLg6uuOuOHNTSYhoO+vrB3r5kSOGMGXH899O3rsGq7Da31WqVU33N46Bhgj9Z6L4BS6l3gGkAClhDCMept9by5/U3CfMOYmTyT9Ph00uPTnV2WEMLB/Dz9SItJO+7Yx92H1ftX8+X+L+nl34uUiBTS49Nlj60e5vui7/H18GVm8kzig+KdXY5r0dqEq9paePhhcD+zt9OVlXDddXDjjTBnDkyaZPpi+HX5puQdyl0ptbnN8Tyt9bwzeNx9Sqnbgc3AL7TWpSfc3xs41OY4D7jg/Eo9OQlYQvRwNruNdzPe5Wj1USYlTHJ2OUIIJxoQNoABYQOoqK8gqzCLDGsGWYVZTOgzAYCcohx6+feSxgbdUJ2tjtX7VzMsahjRAdFM6z8NDzcPCdbt+eor2LHDNLWIiTnpaVqbZhU5OXDLLRAQYNZWtexl5e5+xtmsJ7FprdNOf9px/g94FtDNf/4FmHPCOe3NfXbYOin5ZxWiB7NrO4uzF7OvbB/TB02XufVCCAACvQK5MPZCLoy9kMYmsw7TZrfxYdaHNNobiQ2MJSUiheSIZIK8g5xcrTgfWmu2H93OytyV1DTWEOQVRHRANF7uXs4uzTVZraZ/+qBBZgiqHTU1sGyZ6Qa4dy+EhpqRK29v+MlPOrneHkBrfbTle6XUa8B/2zktD4hrcxwLHHZUTdLkQogebEXuCjYc2sCUpCmMixvn7HKEEC6utLaUzMJMMq2ZFFQVAHBl/ysZ3Xu0kysT5+Jw5WGW7l5KXkUesYGxTOs/jZiAk4/I9Hh2O/z5z3DkCDz5JISEHHf3wYOmE+Ann0BVFQwcaJpWTJ0KXpJXz8jpmlw0n9MX+G+bJhfRWuuC5u8fAi7QWt94wmPcMU0uLgXyMU0ubtZaZ3b4i0BGsITo0VIiUvB295ZwJYQ4IyE+IYyPH8/4+PEU1xSTWZhJ3+C+AOwp2cO6A+tIjUxlcMRg/D39nVusOK1dxbsoqyvj2kHXMixqmHSQPJ3ly82Q1F13tYYrux02bjSjVRs2gJub2RR41iwYMkQ2BO5oSql3gIuBcKVUHvAUcLFSajhmyt9+4O7mc2Mw7dinaa1tSqn7gM8wbdrnOypcgYxgCdEjFVYXEuEX4ewyhBDdSE5RDp/v/ZzCmkIUioSQBFIiUhjeazhuFjdnlycw08K3HN5CsHcw/cP609jUSJNuwtvd29mlub4DB+C552DUKLjrLrQ24amkBKZNg6AgMw1wxgwIl+ab5+xMRrC6AglYQvQw2YXZvJ/5PtMHT2do1FBnlyOE6Ea01hTWFJJhzSDTmklDUwMPj30YpRR5FXmE+YTh4+Hj7DJ7pIPlB1m6eylHqo4wotcIrhl0jbNL6joaG+G3v4W6OnjySV5724+dO+Gll8zdO3bA4MHgIXsvn7fuErBkiqAQPcj+sv0sylpEbGAsg8MHO7scIUQ3o5Qi0i+SSQmTuKTvJVQ3VqOUwq7tvJfxHjWNNSSFJpESkcLA8IEyctIJKusrWbl3JTuO7iDIK4gbUm6Qn/9nqemDjziy5QgRv3sQTz8/goIgIsLsZ+XuDkPls0pxAglYQvQQR6qO8M7Odwj1CeXmITfj4SYftQkhHEcp1boOS6G4achNrSNbu4p34abcmJI0hQtiHbYVjQByS3PJtGYysc9ExsePx9PN09kldRklJfDFK9n4vvYF69wnccnRwUzBdGcX4lRkiqAQPUC9rZ6/b/o7bsqNuSPnEugV6OyShBA9lNaa/Mp8MqwZDA4fTJ/gPhypOsKa/WtIjUylf1h/CQHnKbckl+rGaoZGDUVrTXl9uexddhYyMkwn9nXLq5l98Bki4n0IeO4J0i/2wCLbgjmUTBEUQnQZXu5eTE2aSi//XhKuhBBOpZQiNjCW2MDY1tvK68o5VHGI7KJsPCweDAgbQGpkKgPCBkiDjLNQVlfGZ3s+I7som5iAGIZEDkEpJeHqDDQ0wMqVphtgVhb4+mieiH+bsQMqCPz9vRAvsz7EmXPoCJZS6nLgRUw7xNe11s+dcH888G8guPmcx7TWS5v722cD3zef+rXW+p7mx4wCFgA+wFLgAX2aFyEjWKKnqrfVY622EhcUd/qThRDCiezazsHyg2RYM8guzKahqYFfpv8SDzcPSmpLCPQKxN0inwu3p7GpkQ2HNrDu4DoUiol9JjI2bqz8fZ2F++837dYTEswUwB9FbcL7rX/BtdfCFVc4u7weo7uMYDksYCml3DAbel2G2T35W+AmrXVWm3PmAVu11v+nlEoGlmqt+564gdgJ190EPAB8jQlYL2mtl52qFglYoiey2W28teMt8ivzefDCB/H18HV2SUIIcUbs2k5RTRGRfpEAvLr5VUprSxkUPojUyFQSQxJlZKuNg+UHmb91PikRKUxJmkKQd5CzS3J5e/fC66/DY49BYCBs3mz2tBo9GlRZKTz9NMTEwCOPIPMCO093CViO/GhjDLBHa70XQCn1LnANkNXmHA20zFcKAg6f6oJKqWggUGu9sfn4TeBa4JQBS4iexq7tfJT9EfvK9jFj8AwJV6JLsNng8GEoLTWLy0tL2//+jjvMvjPl5fDWW3DNNdC7t7OrFx3Joiyt4UprzeTEyWRaM8kuymb70e34uPtwcd+Le3SDjOKaYg6UH2Bk9Ejig+L52eiftf6difbV1Jiv8HDz8+abb2DPHhg5EtLSmk/SGhYsMGnrzjslXIlz4siA1Rs41OY4DzjxJ+FvgBVKqfsBP2Bym/sSlFJbgQrg11rrdc3XzDvhmu3+WlVK/QT4CYCnpyyWFT2H1pplu5eRVZjF1KSpsteVcAqtobYWyspMKGobkpKSYMIEs6XM3Llw/fVmFs7hw2aTzhP5+0NIiPmKizOfNgPs2mXeB6Wnm4C1Ywd8/bV5o5SaCvKjv3tQStEvtB/9Qvtxlf2q1q54LR0KK+orWLN/DSmRKfQN7otFde83xA1NDaw9sJaNhzbi6eZJSkQKXu5eEq5O4eBB+OAD+OQTuOgieOYZGDAAli9vZ++qzz+HnBy47TbTi12Ic+DIgKXaue3E+Yg3AQu01n9RSo0FFiqlUoECIF5rXdy85mqJUirlDK9pbtR6HjAPzBTBc30RQnQ1OUU5fHv4W9Lj0hkbN9bZ5YhupKHBBKSmJjNzBkynrago86bFbofZs4+NNNXXt3+dGTNMwPLyMo8NCDC3R0aaNz4hIRAaav4MDj55UBo9Gr78Erybt1LasQNeew3mzTOPGTbMhK20NEhOlk1AuwM3ixsDwgYwIGxA621Hq46y07qTLQVb8PPwIzkimZTIFOKD4rtV2NJak1mYyYrcFVTUVzC813AmJ07Gy93L2aW5JLsdNmwwP6M2bAA3N5g8GWbOPHbOD34mHD4MixebHx7p6Z1ar+heHLkGayzwG6311ObjXwForf/Q5pxM4HKt9aHm473AhVpr6wnXWg08AuQDX2qtBzXffhNwsdb67lPVImuwRE+itSbDmkFqZCpKtfeZhBDHlJSYkaSWwPTxx5CX1/7UvJoac05aGrz6qvl+xgwTXn77W3P8y1+Cj8+xgNTy1fbY24F7y1ZUwNatsGWLWVOxa5e53dsbhg83td9+u8z66W4amxrZXbK7dY8tm93Gw2MfJsArgJrGGnzcfbr8z8PyunJe+uYlIv0imdZ/mjQvOomKCvj0UxOs8vPNdMDrroPp0833J2WzwR/+YOYeP/XUsU9+RKfqLmuwHBmw3DFNLi7FBKNvgZu11pltzlkGvKe1XqCUGgx8jpnyFw6UaK2blFKJwDpgiNa6RCn1LXA/8A2mycXftdZLT1WLBCzRE+wu3k24bzghPiHOLkU4UUUFFBWdeg2Tpyf84x/m/Hvvhaoq+Pe/zfHNN0Nu7rFQFBxs/mz7fWzssfUK9fXmeq763rW8/FjY2rzZjL59+KG5b/5884br6qudW6PoWA1NDeRV5JEYkgjAf3b8B2u1lZSIFFIiU+gd0LvLhK06Wx2Z1kxGxYwCIL8in+iA6G41MteRVq+GJ54wP5eGDzfdAC+55AxHrxcvNnMGf/YzM4IlnKK7BCyHTRHUWtuUUvcBn2FasM/XWmcqpZ4BNmutPwF+AbymlHoIM9VvttZaK6UmAs8opWxAE3CP1rqk+dI/5Vib9mVIgwsh2Fe6j3cz3mVA2ABmpc5ydjmig9jtJvy0F5LmzjWjMP/5j3lT8frr5jHPPGOO21LKhKOW0BQVdey+O+4woaPF66+bEagzff/p5eKzk4KCYNIk8wXHT1tcvx769jUBS2vzofWgQSY89usno1xdlaebZ2u4Ahjeazg7j+5kU/4mNuZtJNg7mHFx4xjTe4wTqzw1rTXbjmxj1d5V1DTWEB8UT4RfBL0DpZtLW01NZppwRITJRMnJcPnlMGuWWWN1xvbsgc8+g/HjJVyJDuHQfbBchYxgie6soLKABdsWEOgVyJwRc/Dx8HF2SeIktDbT7EpKTMjx9DRT2Navh1tuMWHlww9h0SJzTlnZ8eGnrVWrTGhassQ0dvjDH0wo2rzZPLZl1CkkxIQMCQvts9nA3d38nc2ZY6ZHgvk7GzXKhK1RoyAx0XVH6cSZqbPVkVOUQ6Y1k8SQRMbGjaWhqYF1B9aREplClF+US4xs5Vfks3T3UvIr84kPimda/2n08u/l7LJcSmOjGZWy2cwHJGlp5sOlc1JXZx6sFPzv/zp2DrM4re4ygiUBS4gurKS2hPlb5+Om3Jg7ci6BXoGnf5DoUI2NUFgIYWEmIO3bB+vWHeuc17aLXlmZaRQBZkpeSorpavXMM2bNQHQ0LF1qwlPbNUsnTtELDjahQHS8o0ePTSfcvBkKCsztISEmaN1+u/mUXHQP+0r3sXDHQuzaTphPGKmRqaREpjitI5/NbuNvG/+GUoopSVMYEjnEJUKfq8jIMGurtm2Djz4yPwfz8swa0nP+EOnf/zY7DP/P/5gWp8KpJGB1IRKwRHf1QeYH7C3dy5wRc4jwk3ayHaGpCYqLT72GqbQUfvxjM5tk82a45x745z/NG/AVK+Dxx83oVFhY+00eQkJg3DhzW0vgkpbirunw4eMD1+9+ByNGmHVdixfDgw+eZuG8cHnVDdVkF2WTac1kf9l+NJp7R99LhF8ENrsNd4tjP82wazs7j+5kSNQQLMpCXkUeEb4R0h2wWUMDrFwJ770HWVng62tGre65x2zhcF62bjUde6ZNMxvqCaeTgNWFSMAS3VW9rZ6yujKi/KNOf3IP1dR0bBSpbUgaONBsLllSAo88ArfeatbpZGSYVuMncnc/fhTpttvgggvM49evh7FjzTqAhgYzbeVs1jGJrqHl16VSsGyZaRSyaJEZuXz7bbN1Tktb+JaujKJrqWqoYk/JHoZFDUMpxZKcJRRUFrSObIX6hHbo8x0oO8DS3Us5Wn2UWSmzGBwxuEOv35UdOWKmTC9ebH6GJySYphVXXmlC1nmrqICnnzY/0B99VKYFuAgJWF2IBCzRndjsNtYeWMv4+PF4uvW8YQ+73fxebGoyI0Rgfgn36WPe2FZXm1GFliBVUdH+dW65BR56yGyG+/DDcNNNMHGiOb+9KXp+fhKYxMn9858mbJWWmuOYmGNhKy3N7PElup7vCr5ja8FWDlUcAiDaP5q0mLTWrn7nqqK+gpW5K9lp3UmwdzBTk6YyKHyQTAfErFN96ilYs8YcT5xogtXo0R34M1hreOUV86nIE0+Y+dnCJUjA6kIkYInuwq7tLMpaRFZhFjcPufm4zTa7sqoqM/IT2vzh8KefgtXa/tS8sjITsiZNgj/9yZx/2WWmFe/jj5v77rnnh9PyTvw+IEAaP4iOpTXs3XtsOuGWLccCflwcTJkCP/2pc2sU56a8rpzMwkwyrZnEB8Uztd9U7NrOt/nfMih8EEHeQWd1vde/e50jVUdIj0tnfPx4PNx69i7YNTXw/fdm+q3W5v+TlBSzKbBDss+6daYF66xZx1qMCpcgAasLkYAlugOtNUt3L+Xbw98yNWkqY+PGOrukk6qp+WEwOjEsBQXB739vzr/jDggMhL//3Rz/6EemuYC//8lDUmIijGnuslxebs51c3PO6xWiPXa76f7cEriio806eq3h7rvhqqtkD66uyK7tWJSF/Ip8XvvuNQDiAuNIjUwlOSKZAK/2N6jNLcklNjAWL3cvCioL8Hb3ln0Lm/32t2b96vLlHTT971SsVnj2WdPQ4oEHZGqCi5GA1YVIwBLdwer9q1m9fzXpcelclnRZpz53ff2xcNQSkKqq4MYbzf0LFpjFxy0jSnffbT69P5Gv77E1TImJ8OST5vbVq03L3fR0c1xaaqbkSeMH0R1VV8OvfmX265k2zTTSeOihY9MJR40yHzgI11dcU0xWYRYZ1gyOVh9FoZg7ci6xgbForVFKUVpbyme5n5FTlMOkhElM7DPR2WU7ld0OGzaYphX33WfWwx44YD4oGzLEwXnHbje/qI4eNfMQg4Md+GTiXHSXgCUr+oToAmoba9l8eDPDew1ncuJkhz/fu++aPRdbRp1qato/77rrTDCyWI4fPbrlFvPp/Imd8062vcjFFx9/HCIf6opuzM8PXnrp2HF1telEuGSJedOpFPTvfyxwjRzZAd3ShEOE+YYxoc8EJvSZQFFNEdmF2UT7mzltX+z7ggPlBzhceRiLsjA5cTIXxl7o5Iqdp6LCbEvxwQeQn2+aAlmtJmD16dNJRSxbZvbS+PGPJVwJh5IRLCG6iPK6cgK8ArAoxywc2rfPNI0IDDQBa926U69hCgmRTnlCdKTGRsjMPDalcMcOszbRYoFBg0yL+Lg4Z1cpztSm/E18V/AdEb4RXJZ0WY/dp3D3brN31dKlZjbEiBGmacUll3Ry4779++GPfzSfWsyd24lPLM5GdxnBkoAlhAvbX7af3JJcJiVMcmh3qcZGMxrVp8+xdVBCCOdqaICdO03Y+u47ePFFMwr82mvw9dfmT4vFrOmSDzqEq1m7FhYuNFtNeXnBFVeYYDXAGb2ZGhrMQq+GBjM33eELvcS56i4BS6YICuGijlQd4Z2d7xDoFcj4+PEO3XTSwwP+93+PdfETQjifp6dZjzXqhI7gkZFmT6CWLpgPPGCm8bas3xo61LyhFaKzlZSYmXcWi/lQ4OhRs23G1Vc7eV3hRx+ZYh56SMKV6BQygiWECyqpLWH+1vm4KTfmjpzrsKklNTWmGcWECQ65vBCiE8ybZza7zskxa/g9PSE19dgartRUaRgjHG/7dtPg6IUX4MILzR6DXl4usB1GZqZZ9HjppWYITbi07jKCJQFLCBdT1VDF/K3zqW2sZc6IOUT4RTjkeRobzSeLmzfD4sVmY1QhRNdVVWWmY7Ws4dq1y0wf9PKCOXOOLTtpapItDcT5a2gwrdXd3Mz0v4YGePVVs3eVy/w+qa6Gp582o1ZPPGGmawiX1l0ClkwRFMLFFFQWUNNYw61Db3VYuLLb4Te/gW++MdPRXeaXoRDinPn7m9HolhHpigozTWvzZjOlEMz+cjfcYLYBuvhi80HLiV1AhTiVI0dg0SLzwVx5OYwbZwKWpyf8/OfOrq4Nrc1mwlVVcP/9Eq5Ep5IRLCFcUJ2tDm/3k/Q0P09aw1/+YjoF3n+/2eRXCNEzHD5s3nPOmmWa2ixbBs89Zzq7tUwpHDDABaZ1CZeitQnq778Pa9aY2y66yIT1tDQXbbLyzTcwfz5Mn242nRNdQncZwZKAJYQLsGs7i7MXMzB8IKmRqQ59rvnz4R//gJtvNut9XfIXoxCiU2RmwscfmzfPBw+a2wIDjw9cSUkSuHqqmhrTXv3992HvXggKMnnluusgOtrZ1Z1CSYmZGti7NzzyiPwH3IW4UsBSSqUBE4AYoBbIAFZprUtO91iZIiiEk2mtWbZ7GTutO4kJcOxcvSVLTLi64gqz/krClRA9W0qK+QKz6euWLcfWcLWMVISGwn//a6aAVVRAQID87Oju7HaTSXbsMCOcgwebaeVTpnSBhilawxtvmD/nzJFwJc6aUmo28HNgH7AF+B7wBsYDjyqlMoD/1VofPNk1JGAJ4WRrDqzh28Pfkh6Xzti4sY57njXw+9/D2LFm3ZX8zhFCtBUZaT58ueIKc3zkiAla+fnH3lQ/9ph58/3qq+a4sBDCwyVwdRd2O/ziF9C3r2n/P2YMvPmmCVhd5t941SrT4eX2281/nEKcPT8gXWtd296dSqnhQH9AApYQrmjz4c2s3r+a4b2GMzlxssOep6YGnnnG/JL84x9lra8Q4vR69YKrrjr+trbHNpuZKubnZ/bfaplS2Lt3F3ozLqioMBtXT5liPnjr3RsimvsrWSyQnOzc+s5Kfr6ZqjF8uOm+IcQ50Fq/cpr7t53uGrIGSwgn+nzv5xytPsqslFm4WRzbxisry3QLDA526NMIIXqIhgYzdbBlSmFJ86qEqKhjYSstzcXX6vRgu3aZtVXLlkF9PXzySRfvKGuzwR/+YFobPvWUmcsqupzTrcFSSs0HrgKsWuvU5tv+DPwIaABygTu11mXtPHY/UAk0ATatddppavkT8FvM+qvlwDDgQa31f077OiRgCdH57NqORVl+8H1HO3zYrKn40Y8ccnkhhADMcpd9+46FrS1bzPtcMNsPTZ9uRtKrqsxUROEcNht8+aUJVlu3mj3SrrjCdAMcMMDZ1Z2njz6Czz6De++FoUOdXY04R2cQsCYCVcCbbQLWFOALrbVNKfVHAK31o+08dj+QprUuOsNatmmthyulpgPXAg8BX2qth53usTJFUIhOVlBZwKKsRVyfcj29/Hs5LFyBace8fLnZF0dGroQQjqIUJCaarxtuMGt5cnNN0Bo92pyzfj08/ji8/bZ5M2+1gru7aaIhHKu42Oxb9eGHZt1cTIxpdHT11aZrZJe3e7fZ9XjCBAlX3ZzWeq1Squ8Jt61oc/g1MLODnq5lQcU04B2tdYk6w/nPErCE6EQltSW8tfMt3JQbvh6+Dn++hx82b3YkXAkhOpPFAv37m68WqanmZ1JSkjlesMCMpCQkHJtOOGqU/LzqaI2N5vdAeblpcvT445Ce3o0aHdXWmq6BERFw/fXOrkacP3el1OY2x/O01vPO4vFzgPdOcp8GViilNPDPM7jup0qpHMwUwZ8ppSKAujMpQqYICtFJqhqq+Nd3/6LOVsfckXMJ93VMd1R9C0QAACAASURBVKPGRnjxRbjzTggLc8hTiP/P3p3HV1Vd/R//rIQwBQjIPCoIIoMIFIcialVUwFmxDIqI/rT6iK3SPta2TlXro306aIvW0kekAgpWwXkWLHZSBpFRBgUVCAJhTgjJzV2/P/aNhBBIGE5uhu/79bqve8+555y9bxhy19lrry0ih23lSvjXv0JK4SefhO/JAB077gm4eveuIiMs5ezDD8OAzv33h9HFGTPCz7Vdu2T3LAITJoQqHXfcEYZQpVIryzpYiRGs1wpTBIvs/wXQB7jcSwhwzKyVu68zs2bAu8Ct7j6rlLYaAdvdvcDM0oH67r6+tM+hESyRcrA7tptJCyaxM28nI3uOjCy4isfD3N533glZEuedF0kzIiKHrWPH8LjmmjA3aMmSPXO4pk+HKVPC+1OmhOMXL4ajj4Z69ZLb74pq/foQjNatGwqOLFsGW7aEFMyzz0527yIybx78+99wwQUKrqo5MxtJKH5xTknBFYC7r0s8bzCz6cDJwD4BlpldXsK+opvTSutPqQHW4VTQEJHAzMiolUH/Dv1p06BNJG24w29/G4KrW29VcCUilUeNGuGmUI8eYW3YvLwQUBWOahUUwM03w4ABIcUtHoePPoITTwwBRXXlHgLSqVNh1iy4/XYYNiwUNrr44ipeLn/btjDR+OijQ4Al1ZaZDQB+Cpzp7jn7OSYdSHH3HYnX5wH37+eShaXBmgF9gRmJ7bOADyhDgFVqiuDhVNCoKJQiKMkS9zixeIyaqTVx9+J3QI6o8ePhiSdg+PDwS7ZK/2IVkWolHg+DFQ0bhlGt5cvD/3WpqdCt256Uwh49oHbtZPc2ejk58PrrYQ7bqlXh53LZZWFdshYtkt27cuAOY8eGYbq77qomH7p6KEMVweeA7wFNgG+Ae4GfAbWArMRh/3H3m8ysFfB/7j7IzDoA0xPv1wCedfdfldKX14Ab3D0zsd0SeNzd9xnh2ufcMgRYi929m5n9BXjR3d8ys0/LEmAlIsrHgNTEB3y42PvtgL8CDRPH3Onub5jZucDDQE1CTfv/dvcZiXM+AFoSRtQAznP3DQfqhwIsSQZ35/UVr7NuxzpG9RxFWmp0q/u+9BI8+CAMGgT33VeFJi+LiJRg926YP39PSuHixSEIS0sLxTQKA64TToCaNZPd2yPnyy/hb3+DV1+F7OywePyQISFjoSp9zlLNmgWTJ8PQoXDWWcnujRxBZZmDVV7MbFHReV5mlgIsKD73qyRlmYN1SBU0zCwVeBw4F1gDzDazV9x9SZHD7gKed/c/mVlX4A3gGGATcFFiIlp34G2gdZHzrnL3ohVGRCqcv3/5d+asm0O/dv0iDa4++AAeeigsWn/PPQquRKTqq1ULTjklPCCM6BQNuJ56Cv7yF/jrX8MI1+rVYT7SiSdW3v8jn3giZCrUqAHnnhsqA3bvXg2zFb75JkSZXbvC976X7N5I1faBmb0NPEeoQDgUmFmWE0sNsNz9zsSiXYUVNHKAS8pw7ZOBle7+BYCZTUmcVzTAcqCwPlAGUDj57JMixywGaptZLXffXYZ2RZJu9trZfLD6A3q16MU57c+JrJ1588J8hC5d4OGHwy9eEZHqpm7dcJOpb9+wvWNHqEx4/PFh+4UXQuGMmTPDSM/s2SFI69q14v6/uXNn6PN550Hz5mFErmZNuPzyarx2WEHBnihz5MhqGF1KeXL30YmCF6cndo1z9+kHOqdQWYpc1AVuAdoBNwKtgM7Aa6Wc2hr4usj2GuCUYsfcR6hHfyuQDvQv4TpXAJ8UC66eNrMC4EXgwf2UYrwx0V9qVqtxc0m2zzZ9xhsr3uC4xsdxUeeLIp139dZb0LJlKMtenSd6i4gUVb8+nHHGnu0bb4T+/fek0f3xj6FqYd260LPnnpTCzp3DvK5k2r07BH/bt4d+pqeHoOrkk8OjWnvzzTAceeONWjBNyoW7T6MMRS2KK8scrKnAXOAad+9uZnWAf7t7z1LOuxI4393/X2J7BHCyu99a5JgxiT781sy+CzwFdHf3eOL9bsArhHlWnyf2tXb3tWZWnxBgTXL3Zw7UF83BkvK0NXcrM1fN5MLjLow0NRDCnINt26BRo0ibERGpUjZvDhkAhSmFq1eH/enpYe2tPn3CorzlVfk7FgtrVT3/fOjDY4+F/evWQatW5dOHCm/1anjkETjppFBqUqqkCjYH63LgEUI1QUs83N1LXZ2vLAPjx7r7EDMbRrjqLivbLfk1QNsi221IpAAWcT0wIHHdf5tZbUJVkA1m1oZQ7eOawuAqcdzaxPMOM3uWkIp4wABLpDxsy91Gg1oNaFi7IZd1uSyydjZvDgUt7rgjFE5ScCUicnCOOiqMaPVP5M1s2gRz54bHnDlhod7Vq+EXvwg3sl58Efr1CxkDR1JWFkybFq6/aRO0bh3WrHIP2W8KrhJ27w4T6zIyQmELkfLxa0JNiKUHe2JZAqy8xKiVA5jZsUBZ5kLNBjqZWXtgLWFi2PBix3wFnANMMLMuQG1go5k1BF4Hfubu/yw82MxqAA3dfZOZpREWFHuvDH0RidTmXZsZ/8l4ejTvwXnHRrsAVWZmSG3ZsEGVaUVEjoQmTeD888MDwv+vsVh4XThwUqcOXHhhWND3ww/DKNcxxxz8NCB3WLgwjFa9915op2/fUG28b9/KW4QjUtOmhT+UMWOUDy/l6ZtDCa6gbAHWvYQFhtua2WTgNODa0k5y95iZjSZUAEwFxrv7YjO7H5jj7q8APwb+Yma3EwK4a93dE+d1BO42s7sTlzwPyAbeTgRXqYTg6i9l/7giR97OvJ1M/HQicY/Tu2XvyNopvKPZrRu8/HLI0RcRkSOvWbM9rzt0CGXR69cP27Nnh4ALoHFj+M539szhatv2wAHX55/DvffCZ5+FVMArrwyPdu2i+yyV3qJFoVxu//5hkpxI+ZmTmCr1EkUGlxLzsg7ogHOwEqmAbYAc4FRC7uF/3H3T4fa4PGkOlkQlN5bLhPkTyMrJYmTPkbRp0CaSduJxuPvu8LvlmmsiaUJERMrAHdau3TN/a86ckN4HITDr0ycEXQMGhBthmZmwdWuo9rp9O4weDZdcAgMHajCmVDt3wi9/CfXqhZK5adHOa5bkq2BzsJ4uYbe7e6mTAMtS5GKuu3/nUDtXESjAkii4O5MXTuaLLV8w/IThdDyqY0TtwG9+A1Onwg9/qABLRKQicYevvgqBVuEcrp07w6BLzZphylDt2jBhQrJ7Wsm4w5//DAsWhOCqTTQ3MKViqUgB1uEoS4D1ODDB3WeXT5eOPAVYEpXVW1ezM28n3ZuVuqj3IRs/PiwwedVVcNttWvZDRKQicw/ztAoLYixcCE2bas7sQfvPf+Dpp0ON+sLJcVLlVaQAK1Fw74+E6VEO/AP4kbuvKfXcMgRYS4DjgC8Jc6AKSxT2OMx+lxsFWHIkuTtrd6yNLB2wqJdeChUDBw2C++7T5GcREakGsrLg/vvDpLYxY/TLrxqpYAHWu8CzwMTErquBq9z93NLOLUuRi4GH0TeRKufvX/6dD1Z/wKieozi64dGRtfPBB/DQQ6Gq1D336PeLiIhUA/F4GLkCGDVKv/wkmZq6e9F5WBPM7LaynFjq31p3/xJoCFyUeDRM7BOpdmavnc0Hqz+gV4tetMuIruzTvHkh5bxr11CtqkZZboWIiIhUdu+9BytWhMlrjRsnuzdSvW0ys6vNLDXxuBrIKsuJpQZYZvYjYDJhFeNmwCQzu/WwuitSCS3ZuIQ3VrxB58aduajzRZRtve2Dt2JFyIho1QoeeyysvSIiIlLlrVkTcuN79YJTT012b0SuA74PrAcygcGJfaUqy33x64FT3D0bwMweAf5NmPQlUi1szd3Ki0tepG1GWwZ3HUyKRZeyEItB69bw29+GRetFRESqvPz8UNUpPR2uvloVnSTp3P0r4OJDObcs3xINKCiyXZDYJ1JtNKzdkEuOv4Rh3YeRlhrNOhx5eeG5SxeYNEkVp0REpBp55ZWwwNjIkWHdK5EkM7O/mlnDItuNzGx8Wc4tywjW08BHZjY9sX0p8NTBd1Ok8tm8azO78nfRukFrejSPrnBmTg784Adwxhlwww26cSciItXI8uXw7rvhl2D36JY9ETlIPdx9a+GGu28xs15lObEsRS5+B4wCNgNbgFHu/uih9lSkstiZt5OJn07kb0v+RkG8oPQTDkOtWtCtWxi9EhERqTZ27QpVA5s2hcGDk90bkaJSzKxR4YaZHUXZBqdKP8jMTgUWu/u8xHZ9MzvF3T861N6KVHS5sVwmLZjEzrydjOw5ktSU1Ejaicdh+3Zo2BDuvDOSJkRERCquKVNg61a4445wt1Gk4vgt8C8ze4Gw0PD3gV+V5cSyzMH6E7CzyHZ2Yp9IlRSLx5iyaAobsjcwpPuQyBYUdg+FLEaMCEGWiIhItTJ3LvznPzBoELRvn+zeiOzF3Z8BrgC+ATYCl7v7xAOfFZSpyIW7e5HG4pRxeEykMvp47ces3rqaS4+/lI5HdYysnaefhqlT4eyzoX79yJoRERGpeLZuhcmT4ZhjQoAlUjEdBWS7+x+BjWZWpjsBZQmUvjCzH7Jn1Oq/gC8OrY8iFd+pbU6leXpzjj3q2MjamD4dnngi/E750Y9U1EJERKoRd3jmmVA+97rrIDWaNHyRw2Fm9wJ9gM6Eon9pwCTgtNLOLcsI1k1AX2Bt4nEKcOOhdlakopqzbg47du8gxVIiDa4++AD+53+gb1+45x5IiW5JLRERkYrn73+HxYtDUYvmzZPdG5H9uYywDlY2gLuvA8qUc1TqCJa7bwCGHk7vRCq62Wtn8/qK19nabiv9O/SPrJ158+DnP4euXeGRR6CGkm1FRKQ6+eYbeOGFUDr3zDOT3RuRA8lzdzczBzCz9LKeuN9752Z2g5l1Srw2MxtvZtvMbIGZ9T78PotUDIs3LOaNFW9wXOPjOLv92ZG1s2IFjBkDrVrBY49BnTqRNSUiIlLxFBTAU09BzZphQWHlx0vF9ryZ/RloaGY3AO8BfynLiQe6f/4jYELi9TDgRKAD0At4DDj9UHsrUlGs2rKKaUun0TajLVd2vZIUiyZfLysLRo+GunVh7FjIyIikGRERkYrrjTfgyy/hBz/QL0Kp8Nz9N2Z2LrCdMA/rHnd/tyznHijAirl7fuL1hcAz7p4FvGdmvz6sHotUAO7O+6vep3HdxgzrPoy01LTI2mrUCC67DM47D1q0iKwZERGRiumLL0KAdeqp0FuJUFLxJVICZ7j7u2bWGehsZmlF4qP9n1ukAnvxi84DLgC2AF8CZ7v74sR7S929yxH7BBFLT0/37OzsZHdDKqBd+bvIj+fToFaDSK6fkxMq0bZqFcnlRUREKr7du+HBByEWC9WdlCMv+2FmOe5e5rlOUTKzuYSMvUbAf4A5QI67X1XauQfKh7oncaHVwCtFgqszUZl2qcR27N7BWyvfIhaPUSetTmTBFcADD8ANN4TfLSIiItXSCy/Axo0wapSCK6lMzN1zgMuBP7r7ZUDXspy43xRBd3/NzI4G6rv7liJvzQGGHE5vRZIlN5bL5IWT2bxrM71a9KJ5vWjLw95wA6xcCbVqRdqMiIhIxbRwIcyaFXLkjzsu2b0RORhmZt8FrgKuT+wrU/3nA87od/dYseAKd892952H1E2RJIrFY0xZNIUN2RsY0m1IZMGVO/zrX+G5Q4fwO0VERKTa2bEjLCjcujVcckmyeyNysH4E/AyY7u6LzawDMLMsJ2qJU6kW4h7nxSUvsnrrai47/rJIFxIePx5++MOwoLCIiEi15A6TJoXJyNddp4UfpdJx91nufrG7P5LY/sLdf1iWcxVgSbWweddmVm1dxYCOAzih+QmRtTNtGvzpTzBokNZPFBGRauzf/4b588PIVZs2ye6NSJmZ2TgzK/HLopmlm9l1ZnbAQhcHqiJ4PmH+1QvF9l8FbChrHfiKQFUEBWBn3k7q1awX2fVnzIA77wwVaH/3O92sExGRamrTplDlqV07uP12SNH9fCmbilBF0Mx6Aj8HTgAWARuB2kAnoAEwHnjS3fdbwuxAAdZ/gIvcfWOx/S0IuYjfPRIfojwowKq+Zq+dTW4sl37t+mERrhg/b15YSLhzZ3jiCRVJEhGRaioeh9/+FtasCSXZGzdOdo+kEiktwDKz8YT1eTe4e/fEvqOAqcAxhOrn3y9eQyJx3EjgrsTmg+7+11L6Ug/oA7QEdgFL3X1ZWT7HgW4p1C0eXAG4+3qgTJGlmQ0ws2VmttLM7izh/XZmNtPMPjGzBWY2qMh7P0uctywxmlama4oUWrxhMW+seIM129fglHwj4UhYvjzcoGvdGh59VMGViIhUY+++G8rnDhum4EqiMAEYUGzfncD77t4JeD+xvZdEEHYvcApwMnCvmTU6UEPuvtPdP3D359z9pbIGV3DgAKu2me2T5GRmaUCpXyHNLBV4HBhIqBk/zMyK146/C3je3XsBQ4EnEud2TWx3I/wQnzCz1DJeU4QvtnzBtKXTaJvRlsFdB5Ni0aQnrF0Lt94K6ekwdixkZETSjIiISMX39dfw8svQuzecckqyeyNVkLvPAjYX230JUDga9Vfg0hJOPR941903J0a33mXfQO2IOdC3zmnAX8zs29GqxOsnE++V5mRgZaLiRh4whfADKMoJuYwAGcC6xOtLgCnuvtvdVwErE9cryzWlmsvckcmURVNoXLcxw7oPIy01LZJ23OG++yA/PwRXzaNdUktERKTiys8PZXTr1YOrr4YI0/KlSqthZnOKPG4swznN3T0TIPHcrIRjWgNfF9lek9gXiQNNw78LeBD40sy+BAxoCzwF3F2Ga5f0QYrfzrgPeMfMbiWkHfYvcu5/ip1b+EMo7ZoAJP5AbgSoWbNmGborVcWG7A3Uq1mPET1GUCctunw9sxBgbdkS1rsSERGptl56CdatC+uUpCe1RoFUbjF37xPBdUuK+Ms0f8TM0t39oIo57HcEK7HI8J2EoOpaYCTQzt3vdPf8svSnpMsW2x4GTHD3NsAgYKKZpRzg3DL/cNx9nLv3cfc+NVTOrVooLNhyYosT+a+T/ov6tepH0k5eXijHHo+HeVfdu0fSjIiISOXw2Wfw3nvwve9Bt27J7o1UP9+YWUuAxPOGEo5ZQ4hpCrVhT+Zcicysr5ktAZYmtk80syfK0qH9BlhmdrmZXU6Y79QJ6Aj0MbOyfmstywe5HngewN3/TSiB2OQA5x70D0eqh9xYLuM/Gc/yrOUA1EiJLqh++2146CH49NPImhAREakccnJgwoSQJ3/FFcnujVRPrxAGgkg8v1zCMW8D55lZo0Rxi/MS+w7k94S5W1kA7v4pcEZZOnSgb6EXlbDvKKCHmV3v7jNKufZsoJOZtQfWEopWDC92zFfAOcAEM+tCCLA2En5Qz5rZ74BWhADvY8IIVmnXlGomFo8xZdEU1u5YS6qlRt7ehRfC0UdDjx6RNyUiIlKxTZkC27bBT38KmpIhETOz54DvAU3MbA2hMuDDwPNmdj0htrgycWwf4CZ3/3/uvtnMHiDEJwD3u3vxYhn7cPeviy3zU1CWfu43wHL3USXtN7OjCaNOBywP4+4xMxtNiA5TgfHuvtjM7gfmuPsrwI8JhTRuJ6T6Xeshz2uxmT0PLAFiwC3uXpBof59rluWDStUU9zgvLnmR1VtXc0WXKzj2qGMja2vqVDjppDDfSsGViIhUe3PmwEcfwUUXwTHHJLs3Ug24+7D9vHVOCcfOAf5fke3xhEWCy+prM+sLuJnVBH5IIl2wNPtdaPiAJ5nNc/feB31ikmih4arJ3Xlt+WvMzZzLgI4DOLXNqZG1NW1aSAv8/vfhjjsia0ZERKRy2LoVfvlLaNYsjF6lRLMcilQvpS00XJ7MrAnwGKEInwHvAD9y96zSzj3oiSpm1hnYfbDniUTBzDi93emRBlczZ8LDD8Npp8GYMZE1IyIiUjm4h3lXsRhcd52CK6mS3H0TcNWhnLvfAMvMXmXfCn1HAS2BEYfSmMiREovHqJFSgws6XRBpO/PmwS9+EYoiPfwwqCCliIhUex98AEuXwlVXaRFIqbISNR9uBY6hSMzk7heXdu6Bvi7+pti2E6porEgs8iuSFIs3LObdL95l5IkjaVSnUWTtLF8Ot98eSrE/+ijUiW5JLRERkcohMxNefDGsUXL66cnujUiUXiKs//sqED+YEw9U5OLvJe03s9PMbLi733JQXRQ5AlZtWcW0pdNo3aA19WrWi6ydtWvh1lvDWoljx0JGRmRNiYiIVA6xGIwfH6oFjhwJVtLypCJVRq67/+FQTixTwpOZ9SSUQ/8+sAqYdiiNiRyOzB2ZPLfoORrXbcyw7sNIS02LpJ3Nm2H0aMjPhz/9SdkPIiIiALz+Onz1Fdx0EzRokOzeiETtMTO7l1Dc4tv6E+4+r7QTDzQH6zjCOlPDCKmBUwlVB8867O6KHKTNuzYzacEk6qbV5eoeV1MnLbp8vRkzYONGeOKJUJJdRESk2vviC3jzTejbF3r1SnZvRMrDCYS6E2ezJ0XQE9sHdKARrM+AD4GL3H0lQGK9KpFyVzetLu0y2nFOh3NoUCvau2aDB4eKgS1bRtqMiIhI5bB7d0gNPOooGDIk2b0RKS+XAR0OpfbEgepqXgGsB2aa2V/M7BxCDXiRcrM7tpv8gnxq16jNkO5DaFK3SSTtxOOhSuDSxPJxCq5EREQS/vY32LQJRo2C2rWT3RuR8vIp0PBQTjxQkYvpwHQzSwcuBW4HmpvZn4Dp7v7OoTQoUlaxeIznFj1HiqUwoscILMLJtFlZ8M9/Qrt20KVLZM2IiIhULgsWwIcfwvnnQ6dOye6NSHlqDnxmZrPZew5WqWXazb34UlcHONjsKOBKYIi7l5p/WFGkp6d7dnZ2srshByHucf62+G8s3bSUK7pcwQnNT4i8zZ07oV50hQlFREQqlx074Je/DKV0f/YzLQYpkTOzHHdPT3Y/AMzszJL276/S+l7nHkyAVVkpwKpc3J3Xlr/G3My5DOg4gFPbnBpZW9OmwWefwZ13aiF6ERGRb7mHUrqLF8MvfgGtWiW7R1INVKQA63DoK6VUOP/46h/MzZzL6e1OjzS4mjEjzLtavz7MwRIREZGEf/0LPv0ULrtMwZVUK2b2j8TzDjPbXuSxw8y2l+UaGuuVCuf4JseTV5DH2e2jy0KdNw/uugu6dYNHHlHWg4iIyLc2bYKpU6FzZzjnnGT3RqS8pQO4e/1DvYBGsKTC2JC9AXenaXpTzulwTmRFLZYvh9tvh9at4dFHoU50S2qJiIhULvF4KMmekgLXXgsRFpgSqaAOe/6U7ttLhfDFli+YvGAy5x57bqRpgWvXwq23Qno6jB0b5u2KiIhIwttvw+efw3XXhXWvRKqfZmY2Zn9vuvvvSruAAixJunU71jFl0RQa123Mic1PjKydzZth9GjIzw/zdps3j6wpERGRyufrr+GVV6BPHzj55GT3RiRZUoF6HMb6vwqwJKmycrKYvGAyddPqMqLHCOqkRZOvl50NP/whbNgQgqsOHSJpRkREpHLKz4ennoL69WH4cKUGSnWW6e73H84FNAdLkqYgXsCzC5/Fca7ucTX1ax3yXMJSZWdDXl4oaNGjR2TNiIiIVE7Tp0NmJowcGfLoRaqvw767oHWwJKmWZy0nPS2d1g1aR3L9wvLrKSlQUACpqZE0IyIiUnl99hn8/vdw1lkwdGiyeyPVWEVYB8vMjnL3zYdzDY1gSbmLxWOs3roagOMaHxdZcOUOv/kN3H13CLQUXImIiBSTkwNPPw0tWsDllye7NyJJd7jBFSjAknIW9zgvLnmRZz59hi27tkTeXosW0KxZGMESERGRYp59FrZvD1UDa9ZMdm9EqgQVuZBy4+68vvx1lm5aysCOA2lUp1Fkbe3cCfXqwTXXRNaEiIhI5TZ7dnhccgkcfXSyeyNSZei+vpSbmatnMjdzLqe3O51T2pwSWTszZsDFF8OyZZE1ISIiUrlt2RJGrzp0gAEDkt0bkSpFAZaUiy+3fsmsL2fRu2Vvzm5/dmTtzJ0Lv/hFuBHXrl1kzYiIiFRe7jBhQqj+NGqU8uhFjjClCEq5aJfRjiu7XkmXpl2wiNbWWL4cxoyBNm3g0UehTjRLaomIiFRuM2eGyoFXXx0mKovIEaVbFhKpVVtWsSF7A2ZGt2bdSLFo/sqtXQujR4elO8aOhYyMSJoRERGp3DIzYdq0sChkv37J7o1IlaQASyKzbsc6nlv0HG+seIMo11vbvBluuQViMXj8cWjePLKmREREKq9YDJ56CmrVghEjIKKMEpHqLtIAy8wGmNkyM1tpZneW8P7vzWx+4rHczLYm9p9VZP98M8s1s0sT700ws1VF3usZ5WeQQ5OVk8XkBZOpm1aXK7pcEVlaYHY23HorbNwY0gLbt4+kGRERkcrvtdfg669DcNWgQbJ7I1JlRTYHy8xSgceBc4E1wGwze8XdlxQe4+63Fzn+VqBXYv9MoGdi/1HASuCdIpf/b3d/Iaq+y+HZsXsHExdMxHFG9BhB/Vr1I2knHoef/ARWrAgL0PfoEUkzIiIild/nn8Nbb8Fpp0FP3ZsWiVKURS5OBla6+xcAZjYFuARYsp/jhwH3lrB/MPCmu+dE0ks54mZ9OYuc/BxGnjiSxnUbR9ZOSgqccw5ceGH4fSEiIiIlyM2F8eOhcWP4/veT3RuRKi/KFMHWwNdFttck9u3DzI4G2gMzSnh7KPBcsX2/MrMFiRTDWvu55o1mNsfM5sRisYPvvRyy8zuez6ieo2jdoMQ/7sPmDuvWhdeDB8MFF0TSjIiISNXwt79BVhZcdx3Urp3s3ohUeVEGWCVNutlfpYOhwAvuXrDXBcxaAicAbxfZ/TPgeOAk4CjgpyVd0N3HuXsfd+9To4aq0Uct7nFmrJrBrGJLGwAAIABJREFUrvxd1EipQcv6LSNra+rUcANu1arImhAREakaPv0U/vGPsJjwsccmuzci1UKUAdYaoG2R7TbAuv0cW9IoFcD3genunl+4w90zPdgNPE1IRZQkcndeX/46s76cxbKsZZG3d+65MHJkWExYRERE9mP7dpg4Edq2Dfn0IpWcmXUuVghvu5ndVuyY75nZtiLH3FPe/YxyaGc20MnM2gNrCUHU8OIHmVlnoBHw7xKuMYwwYlX0+JbunmmhLN2lwKIj3XE5ODNXz2Ru5lxOb3c6PVtEN3F2yRLo3DmkkN9wQ2TNiIiIVH7uIbjatQvGjAFl80gV4O7L2FMIL5UQY0wv4dAP3T1pdxUiG8Fy9xgwmpDetxR43t0Xm9n9ZnZxkUOHAVO82EJJZnYMYQTs78UuPdnMFgILgSbAg9F8AimLj9Z8xKwvZ9G7ZW/Obn92ZO3MnQvXXw9PPhlZEyIiIlXHP/8JCxbA5ZdDq1bJ7o1IFM4BPnf3L5PdkeIsygVgK4r09HTPzs5OdjeqnPyCfJ6Y/QTN6zXn+92+T4pFE68vXx5GrJo3h//7Py3dISIickAbN8IDD4TFIW+7TQsKS6VhZnmEQZRC49x93H6OHQ/Mc/exxfZ/D3iRMF1pHfATd18cTY9LpgBLDsvOvJ3USq1FWmpaJNdfuxZGjYK0NHj6aWjWLJJmREREqoZ4HP73f2H9erjnHmjUKNk9EikzM8tx9/QyHFeTEDx1c/dvir3XAIi7+04zGwQ85u6doulxyaIsciFV1Lod63hjxRvEPU69mvUiC642b4ZbboFYDMaOVXAlIiJSqrfegi++gOHDFVxJVTaQMHr1TfE33H27u+9MvH4DSDOzJuXZOQVYclCycrKYvGAyy7OWsyt/V2TtZGfDrbfCpk3w2GMhy0FEREQO4Msv4dVX4aSTwkOk6hpGyRXIMbMWiWJ4mNnJhHgnqxz7FmkVQaliduzewcQFE3GcET1GkF6z1BHcQ5KXBz/5CaxcCb//PZxwQiTNiIiIVB35+TB+fJioPGxYsnsjEhkzqwucC/ygyL6bANz9SWAwcLOZxYBdwNDixfSipgBLyiQ3lsukBZPIyc9h5IkjaVy3cWRtPfkkzJ4N998PfftG1oyIiEjVMW1amHd1222QHs0NUJGKwN1zgMbF9j1Z5PVYYGzx88qTAiwpk43ZG9m+eztDug2hdYPWkbZ17bVhvavzz4+0GRERkaph6VKYMQPOOQe6dEl2b0SqPVURlDLLjeVSu0btyK7//vtw+ulQs2ZkTYiIiFQt2dkh5aNOHfjFL0LZXZFKqqxVBCs6FbmQ/XJ3Xlv+Gh+v/Rgg0uBq5Ur46U9hypTImhAREala3OHZZ2H7drjuOgVXIhWEAizZr5mrZzJn3Rx27N4ReVsdO8ITT4SqsiIiIlIGs2fDnDlw8cXQrl2yeyMiCZqDJSX6aM1HzPpyFr1b9ubs9mdH1s7cuWFNxJNOgpNPjqwZERGRqmXLljB6deyxmrQsUsFoBEv2sWjDIt5a+RbHNzmeC4+7kMRSAkfc8uUwZgw8+mgIskRERKQM3GHChPDLc9QoSNHXOZGKRP8iZR87du+gXUY7ruhyBSkWzV+RNWtg9GioVy+sdaXfDSIiImU0YwZ89hkMGQJNmya7NyJSjFIE5Vtxj5NiKXy37Xc5pc0pkQVXmzeH4CoWgz//GZo1i6QZERGRqmfdurDm1YknarFIkQpK4wYCQFZOFmM/HstX274CiCy4ys6GW2+FTZvgscegfftImhEREal6YjF46qlQkn3ECIgohV9EDo8CLGHH7h1MXDCR3Fgu6WnRLT2Qlwc//nEoyf7rX8MJJ0TWlIiISNXz6qshx37ECKhfP9m9EZH9UIBVzeXGcpm0YBI5+Tlc3eNqGtdtHEk78TjcdVeoJnvvvcpqEBEROSgrV8Lbb0O/fiE9UEQqLAVY1Vh+QT7PLXyOTTmbGNp9KK3qt4qsrYUL4YMP4LbbYNCgyJoRERGpenJzYfx4aNwYrrwy2b0RkVKoyEU1lmIpZNTO4KTWJ9GhUYdI2zrxRJgyBTpE24yIiEjV8/zzoULUf/831K6d7N6ISCkUYFVD7k5eQR61atTi8i6XR9rW9OnhhtsZZyi4EhEROWjz58M//xnSP449Ntm9EZEyUIpgNTRz9UzGzR3HrvxdkbZTUAAvvxwe7pE2JSIiUvVs3w4TJ0K7dnDBBcnujYiUkUawqpmP1nzErC9n8Z2W36F2jWjTDFJT4YknwiLCqiQrIiJyENzhmWdg92647jqooa9sIpWFRrCqkUUbFvHWyrc4vsnxXHDcBVhEUc+yZXDnnZCTA3XrKl1cRETkoP3jH6FC1OWXQ8uWye6NiBwE3Q6pJlZtWcX0pdNpl9GOK7pcEdlCwmvWhIWE09Jg584QYImIiMhB2LAhFLbo0gXOOivZvRGRg6QAq5pomt6U7s26M7DTQNJS0yJpY/NmGD06LDT/5z9Ds2aRNCMiIlJ1xeOhJHuNGnDttcqxF6mElCJYxW3fvZ2CeAH1atbjsi6XRTbvKjs7jFxt2gR/+AO0bx9JMyIiIlXbm2/CqlVw1VXQsGGyeyMih0ABVhW2Y/cOxn8ynleWvRJpO3l58OMfh0Xmf/1r6N490uZERESqptWr4bXX4OSToU+fZPdGRA6RUgSrqNxYLpMWTCInP4dT2pwSWTvxONx9N8yZAw88AH37RtaUiIhI1ZWXF1IDMzJg2LBk90ZEDkOkI1hmNsDMlpnZSjO7s4T3f29m8xOP5Wa2tch7BUXee6XI/vZm9pGZrTCzqWZWM8rPUBnlF+Tz3MLn2JSziaHdh9KqfqtI2nEPI1bvvw9jxsDAgZE0IyIiUvVNmwbffBPmXalClEilFlmAZWapwOPAQKArMMzMuhY9xt1vd/ee7t4T+CMwrcjbuwrfc/eLi+x/BPi9u3cCtgDXR/UZKqtXl7/KV9u+4rIul9GhUYfI2snLgy++gGuugeHDI2tGRESkalu8GGbOhP794fjjk90bETlMUaYIngysdPcvAMxsCnAJsGQ/xw8D7j3QBS0s3HQ2UPh1/q/AfcCfjkB/q4zvtvkuxzQ8hu7NopsM5Q61asHYsaEku4iIiByC7Gz461/DWleXXprs3ojIERBlimBr4Osi22sS+/ZhZkcD7YEZRXbXNrM5ZvYfMyv8H6cxsNXdY2W45o2J8+fEYrGSDqlyvt4Wftwt67ekd8vekbXz/vvwgx/Ajh1Qs6YqyIqIiBwSd5g0KSwcef31umMpUkVEGWCV9LXb93PsUOAFdy8osq+du/chjFY9ambHHsw13X2cu/dx9z41alT9Wh4frfmIpz55iqUbl0beVjwOKSn6PSAiInJYPv4Y5s2Diy+Gtm2T3RsROUKiDLDWAEX/t2gDrNvPsUOB54rucPd1iecvgA+AXsAmoKGZFUZMB7pmtbFowyLeWvkWxzc5ns5NOkfWzu7d4fncc+FPf4La0SypJSIiUvVt3gzPPgsdO8J55yW7NyJyBEUZYM0GOiWq/tUkBFH7LMhkZp2BRsC/i+xrZGa1Eq+bAKcBS9zdgZnA4MShI4GXI/wMFd7nmz9n+tLptMtox+Cug0mxaP5I16yByy6DGYkkTqUFioiIHCJ3ePrp8DxqVEgLEZEqI7J/0Yl5UqOBt4GlwPPuvtjM7jezolUBhwFTEsFToS7AHDP7lBBQPezuhcUxfgqMMbOVhDlZT0X1GSq6nPwcnl/8PE3qNmHYCcOokRJNKmRWFtxyC+TmQofoihKKiIhUD++/D8uXw9Ch0KRJsnsjIkeY7R3XVE3p6emenZ2d7G5EYunGpbRp0Ib6tepHcv3sbLjhBvjqK3jySegeXWFCERGRqm/tWnjoofAL9aablBIiUoSZ5bh7erL7cbg0Jl0J7di9g1VbVgHQpWmXyIKrvDz48Y/h88/DgsIKrkRERA5DLAbjx0OdOnD11QquRKooBViVTG4sl0kLJvH84ufZHdsdWTvxONx9N8yZA/fdB337RtaUiIhI9fDKK2FS8zXXQP1obo6KSPIpwKpE8gvyeXbhs2zK2cSV3a6kVo1akbTjHkas3n8fxoyBgQMjaUZERKT6WLEC3nkHTj8devRIdm9EKi0zW21mC81svpnNKeF9M7M/mNlKM1tgZtEtDrsfVX+BqCoi7nFeWPICX2/7msFdB9OhUXTVJp56Cl54IdxgGz48smZERESqh9zcUDWwaVO48spk90akKjjL3Tft572BQKfE4xTgT4nncqMRrEpiwTcLWJa1jIGdBtKtWbdI2zr+eBg8GG69NdJmREREqoepU8O6V6NGQa1osk9E5FuXAM948B/CGroty7MDGsGqJE5sfiL1ataj41EdI2sjKwsaN4Z+/cJDREREDtMnn8C//gUXXKC1TkRKV6NY2t84dx9X7BgH3jEzB/5cwvutga+LbK9J7Ms84r3dD41gVXDz189n867NmFmkwdXChXDxxTBzZmRNiIiIVC/btsHEiXD00SHAEpHSxNy9T5FH8eAJ4DR3701IBbzFzM4o9n5J5TnLdV0qjWBVYIs2LOLlz16mV8teXNz54tJPOAwdO8Kll8J3vhNpMyIiIlVPbi5s3QpbtoRH4euVK8OaJ9ddB6mpye6lSJXg7usSzxvMbDpwMjCryCFrgLZFttsA68qvhwqwKqzPN3/O9KXTaZfRjkGdBkXWTmYmNGgA6enw3/8dWTMiIiKVjzvk5OwbOBXfzs3d99x69aBhQ7j2WmjRoty7LlIVmVk6kOLuOxKvzwPuL3bYK8BoM5tCKG6xzd3LLT0QFGBVSGu3r2Xq4qk0qduEYScMo0ZKNH9MWVlhEfm2bWHs2EiaEBERqZjicdi+fU+QVPy58HV+/t7nmUFGRgieWrSALl3C60aN9jwyMiAtLTmfS6Rqaw5Mt7BIdw3gWXd/y8xuAnD3J4E3gEHASiAHGFXenTT3ck1JTIr09HTPzs5OdjfK7NmFz7IxeyPX9bqO+rWiWYhw50648Ub46it48kno3j2SZkRERMpfLBaCo5LS9gqft20LQVZRNWrsCZb295yRASmawi4SBTPLcff0ZPfjcCnAqoDyCvLIyc+hYe2G0Vw/L5Rgnz8ffv976Ns3kmZERESOvN27Sw6cir7esWPf82rV2jtQKul1vXphhEpEkqKqBFhKEawgcmO5zFg1g3Pan0OtGrWomVozknbicbjrLpg7Fx54QMGViIhUEEXnOx0obW/Xrn3PTU/fEyQdfXTJQVTt2gqeRKRcKMCqAPIL8nl24bOs3b6W7s260y6jXSTtuMPDD8OMGTBmDAwcGEkzIiIie4vHw6jS/opEFD6XNN+pQYMQIDVvDp07l5y2p/lOIlKBKMBKsrjHeWHJC3y97WsGdx0cWXAF8Je/wLRpMHIkDB8eWTMiIlKdxGJhPtOB0va2bt13vlNqagiQGjaEdu3gxBP3Tdtr0EDlzUWk0lGAlUTuzmvLX2NZ1jIGdRpEt2bdImvrgw9g3Di46CIYPTqyZkREpCopOt9pf8/bt+97Xs2ae4Kk444reb5T/fpK2RORKkkBVhLtzNvJiqwVnHH0GZzc+uRI2+rbF267DYYN0+8zEZFqzz3MZTrQ2k5bt4Y5UcXVrbsnUGrbdt+5Tg0bQp06+mUjItWWqggmWXZeNnXT6mIR/SJauDBkXmRkRHJ5ERGpaNzDfKf9VdgrfJ2Xt/d5ZmFUqbRKezWjKcIkIlJVqggqwEqChd8sJHNnJud2ODeywArCzcmLL4beveGRRyJrRkREyktBQZjvtL8iEYXznQoK9j4vJaXkoKnoc0ZGWAdKRCRJqkqApf9Jy9nnmz/npc9eom1GWwq8gBoW3R9BnTrw619D69aRNSEiIkdKXl7JZcmLr+9U/MZoWtqewKljx5JHnjTfSUSk3CjAKkdrt69l6uKpNE1vytDuQ6mREs2PPysL5s2Dc8+FXr0iaUJERMqqcL5TScFT0df7m+9UGCi1aVNyyl7dugqeREQqEAVY5WRTziYmL5xMelo6V51wFbVr1I6knZ074dZb4euv4TvfgaOOiqQZERGBPfOdSgqaij7v3r3vuYXznZo0gU6dSk7bq1Wr/D+TiIgcFgVY5SQrJ4u0lDSu7nE19WvVj6SNvLywgPDnn8Ojjyq4koOQnQ2ZmbBuXZjfkZIS1p4p+ihp34EeZTneTHfepeKKx0ue71Q8eCppvlNGRgiSWreG7t33TdvTfCcRkSpLRS7KUSweiywtMB6HO++EGTPggQdg4MBImpHKLjs7BFGFwVThc0nr2JSXqIK30o6Nqk0FjZVDfv6B13YqXN9pf/OdShptKjrfKSUlOZ9LRKQSU5ELOWhRBVfu8PDDIbgaM0bBlRBSlooGUYWvd+zYc0zt2tCyJZxwQnhu1So8N2oU/lIVFBz4EY+XfkxZjj+U6+TnQ27uwbVbnqIMGPd3fJRtVqag0T383TjQiNOWLeFmQ3G1a+8Jklq3LrnqnuY7iYhIKRRgVQF/+QtMmwYjR8Lw4cnujZSr4oFU4XPxQKpVK+jRY08Q1apV+MK4vy+KZuELeFpa+XyOqLmXLWhMZuB4MEFj4fXL05EYNTySo4wQRphKCqL2N9+pYcOQO92hQ8nlymtHMzdWRESqFwVYldwLL8C4cWG9q9Gjk90biUThJPriQVRmZqhqUqhOnRA4nXji3oFURobuuBeOwFTXoPFQAr4jETzm5R3c8YcSNJqF4Khhw/D3vVu3ktP3NN9JRETKSaRzsMxsAPAYkAr8n7s/XOz93wNnJTbrAs3cvaGZ9QT+BDQACoBfufvUxDkTgDOBbYnzrnX3+QfqR0WZg3Wkbd0Kl1wSqgX+7//uuakrlZR7uCNfNKWv8Lno39+6dfdO6St8ViAllZ17CLLKEpC5Q4MG4aH5TiIiVUJVmYMVWYBlZqnAcuBcYA0wGxjm7kv2c/ytQC93v87MjgPc3VeYWStgLtDF3bcmAqzX3P2FsvalpAArPz+fNWvWkJubeygfr8LIzw83Zivy9+ratWvTpk0b0qrKyMHhcg+VyUpK7Su6Dk7duiF4Kh5INWhQsf/ARURERA5BVQmwosyZOBlY6e5fAJjZFOASoMQACxgG3Avg7ssLd7r7OjPbADQFth6pzq1Zs4b69etzzDHHYJXsy+quXeFRGcqwuztZWVmsWbOG9u3bJ7s75aswkCopta9oIJWeHoKnPn32Dqbq11cgJSIiIlLJRBlgtQa+LrK9BjilpAPN7GigPTCjhPdOBmoCnxfZ/Sszuwd4H7jT3feZ0WxmNwI3AtSsWXOfNnNzcytlcAV7CmBlZFT8tEAzo3HjxmzcuDHZXYmOe8jXLCmQ2rVrz3H16oXA6aST9g6k6tVTICUiIiJSRUQZYJX0jXF/+YhDgRfcfa9aymbWEpgIjHT3wtnPPwPWE4KuccBPgfv3ach9XOJ90tPTS2y3MgZXEL6Xx2IVP7gqVFl/zvtwD9FtSal9RVNN69cPf0innLJ3al/9aBaYFhEREZGKI8oAaw3Qtsh2G2Ddfo4dCtxSdIeZNQBeB+5y9/8U7nf3zMTL3Wb2NPCTI9bjCqygANavh2bNQhE0TWeKkDts3lxyIFW0/HODBiFw+u539w6k6tVLXt9FREREJKmiDLBmA53MrD2wlhBE7bNKk5l1BhoB/y6yryYwHXjG3f9W7PiW7p5pYVjkUmBRdB8hOllZWZxzzjkArF+/ntTUVJo2bQrAxx9/vFdaYzwOX38dss0aNtwTXI0aNYo777yTzp07l6nNzMxMrr/+etauXUt+fj4dO3bklVdeObIfrDJxh6ysfav2lRRItWoFffvundqXXunnYIqIiIjIERZZgOXuMTMbDbxNKNM+3t0Xm9n9wBx3L/xmPwyY4nuXM/w+cAbQ2MyuTewrLMc+2cyaElIQ5wM3RfUZotS4cWPmzw/V5e+77z7q1avHT36y92CcuxOPO5mZKeTkQOvWe3+nf/rppw+qzbvuuosLLriAW24Jg4ULFiw4vA8BxGIxalT09WUKA6mS5kjl5e05rmHDEDz16xeeCx8KpERERESkjCL9ZuzubwBvFNt3T7Ht+0o4bxIwaT/XPPsIdvFbE+ZP2Gdft6bdOKn1SeQX5DN54eR93u/Zoic9W/QkJz+H5xc/v9d71/a89pD6sXLlSi699FL69evHRx99xFNPvcb//M8vWbFiHvn5uxgyZAj33BN+hP369WPs2LF0796dJk2acNNNN/Hmm29St25dXn75ZZo1a7bXtTMzM2nTps232z169Pj29UMPPcRzzz1HSkoKF154Ib/61a+YN28eN998M7t27aJTp06MHz+ejIwM+vXrx5lnnsmHH37I5ZdfzrBhw7j55pv56quvSElJ4Q9/+AOnnnrqIX3+wxKP7z+Qys/fc1xhIHX66Xun9tWtW/59FhEREZEqpYIPPVRPS5Ys4emnn+aBB55k40Z48MGH6dz5KGKxGGeddRaDBw+ma9eue52zbds2zjzzTB5++GHGjBnD+PHjufPOO/c6ZvTo0QwfPpzevXvTv39/Ro0aRcuWLXn11Vd58803+fjjj6lTpw6bN28G4Oqrr2bcuHH069ePn//85zzwwAP85je/AWD79u3MmjULgCFDhnDHHXdw6qmnsnr1ai688EIWLYowczMeh02b9p0jtX793oFUo0YheDruuD1BVIsWCqREREREJDIKsBIONOKUlpp2wPfrptU95BGrkhx77LEce+xJrF8fBlumTXuOYcOeIhaLsW7dOpYsWbJPgFWnTh0GDhwIwHe+8x0+/PDDfa47aNAgPv/8c9566y3efPNNevXqxeLFi3nvvfe47rrrqFOnDgBHHXUUWVlZ5Obm0q9fPwBGjhzJiBEjvr3W0KFDv3393nvvsWzZsm+3t2zZwq5du7693iGLx2Hjxn1Ho/YXSHXuvPccqdq1D699EREREZGDpACrAqpTJ53160NV7507V/CH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\n", | |
"text/plain": [ | |
"<Figure size 864x360 with 2 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"fig, ax = plt.subplots(1,1,figsize=(12,5))\n", | |
"\n", | |
"ax2 = ax.twinx()\n", | |
"ax.plot(train_scores.keys(), [round(t,2) for t in train_scores.values()], \"--\", color=\"g\", alpha=0.5)\n", | |
"ax.plot(test_scores.keys(), [round(t,2) for t in test_scores.values()], \"-.\", color=\"b\", alpha=0.8)\n", | |
"ax2.plot(times.keys(), [round(t,2) for t in times.values()], color=\"r\", alpha=0.6)\n", | |
"ax2.set_xlabel(\"Encoders\")\n", | |
"ax.set_ylabel(\"AUC Scores\")\n", | |
"ax2.set_ylabel(\"Time (seconds)\")\n", | |
"ax2.yaxis.tick_right()\n", | |
"ax.legend([\"Train Score\", \"Test Score\"], loc=\"lower left\")\n", | |
"ax2.legend([\"Time (seconds)\"])\n", | |
"\n", | |
"fig.tight_layout()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## End" | |
] | |
} | |
], | |
"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 | |
} |
@gwerbin - Apologies for missing the imports in the notebook. Here is the link to fitmodel_and_auc_score
: https://github.com/groverpr/Machine-Learning/blob/master/catboost/utils.py#L96
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Where is
fitmodel_and_auc_score
defined?