Last active
February 21, 2018 08:46
-
-
Save hiepph/b1505fd8206d942331f12937e8955ba5 to your computer and use it in GitHub Desktop.
Cinnamon assignment 1
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": [ | |
"Load data from csv" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"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>URI</th>\n", | |
" <th>name</th>\n", | |
" <th>text</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td><http://dbpedia.org/resource/Digby_Morrell></td>\n", | |
" <td>Digby Morrell</td>\n", | |
" <td>digby morrell born 10 october 1979 is a former...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td><http://dbpedia.org/resource/Alfred_J._Lewy></td>\n", | |
" <td>Alfred J. Lewy</td>\n", | |
" <td>alfred j lewy aka sandy lewy graduated from un...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td><http://dbpedia.org/resource/Harpdog_Brown></td>\n", | |
" <td>Harpdog Brown</td>\n", | |
" <td>harpdog brown is a singer and harmonica player...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td><http://dbpedia.org/resource/Franz_Rottensteiner></td>\n", | |
" <td>Franz Rottensteiner</td>\n", | |
" <td>franz rottensteiner born in waidmannsfeld lowe...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td><http://dbpedia.org/resource/G-Enka></td>\n", | |
" <td>G-Enka</td>\n", | |
" <td>henry krvits born 30 december 1974 in tallinn ...</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" URI name \\\n", | |
"0 <http://dbpedia.org/resource/Digby_Morrell> Digby Morrell \n", | |
"1 <http://dbpedia.org/resource/Alfred_J._Lewy> Alfred J. Lewy \n", | |
"2 <http://dbpedia.org/resource/Harpdog_Brown> Harpdog Brown \n", | |
"3 <http://dbpedia.org/resource/Franz_Rottensteiner> Franz Rottensteiner \n", | |
"4 <http://dbpedia.org/resource/G-Enka> G-Enka \n", | |
"\n", | |
" text \n", | |
"0 digby morrell born 10 october 1979 is a former... \n", | |
"1 alfred j lewy aka sandy lewy graduated from un... \n", | |
"2 harpdog brown is a singer and harmonica player... \n", | |
"3 franz rottensteiner born in waidmannsfeld lowe... \n", | |
"4 henry krvits born 30 december 1974 in tallinn ... " | |
] | |
}, | |
"execution_count": 1, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"import pandas as pd\n", | |
"\n", | |
"df = pd.read_csv('data/people_wiki.csv')\n", | |
"df.head()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"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>URI</th>\n", | |
" <th>name</th>\n", | |
" <th>text</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>count</th>\n", | |
" <td>59071</td>\n", | |
" <td>59071</td>\n", | |
" <td>59071</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>unique</th>\n", | |
" <td>59071</td>\n", | |
" <td>59070</td>\n", | |
" <td>59071</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>top</th>\n", | |
" <td><http://dbpedia.org/resource/Josaia_Waqabaca></td>\n", | |
" <td>author)</td>\n", | |
" <td>jos francisco cardenal born 1940 was a nicarag...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>freq</th>\n", | |
" <td>1</td>\n", | |
" <td>2</td>\n", | |
" <td>1</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" URI name \\\n", | |
"count 59071 59071 \n", | |
"unique 59071 59070 \n", | |
"top <http://dbpedia.org/resource/Josaia_Waqabaca> author) \n", | |
"freq 1 2 \n", | |
"\n", | |
" text \n", | |
"count 59071 \n", | |
"unique 59071 \n", | |
"top jos francisco cardenal born 1940 was a nicarag... \n", | |
"freq 1 " | |
] | |
}, | |
"execution_count": 2, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"df.describe()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Build TFIDF matrix from name/text" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 2min 14s, sys: 1.9 s, total: 2min 16s\n", | |
"Wall time: 2min 16s\n", | |
"TFIDF shape (n_samples, n_features): (59071, 15780383)\n" | |
] | |
} | |
], | |
"source": [ | |
"from sklearn.feature_extraction.text import TfidfVectorizer\n", | |
" \n", | |
"tf = TfidfVectorizer(analyzer='word', ngram_range=(1,3), min_df=0, stop_words='english')\n", | |
"%time tfidf_matrix = tf.fit_transform(df['text'])\n", | |
"\n", | |
"print('TFIDF shape (n_samples, n_features):', tfidf_matrix.shape)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Problem 1" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Calculate distance using cosine distance" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 83, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"from sklearn.metrics.pairwise import cosine_distances\n", | |
"\n", | |
"def find_id(name):\n", | |
" return df.loc[df['name'] == name].index[0]\n", | |
"\n", | |
"\n", | |
"def distance(name1, name2):\n", | |
" id1 = find_id(name1)\n", | |
" id2 = find_id(name2)\n", | |
" return cosine_distances(tfidf_matrix[id1], tfidf_matrix[id2])[0][0]" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Test with some test cases" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 84, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"3.552713678800501e-15" | |
] | |
}, | |
"execution_count": 84, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"distance('Barack Obama', 'Barack Obama')" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 85, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"0.9579495140804771" | |
] | |
}, | |
"execution_count": 85, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"distance('Barack Obama', 'George W. Bush')" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 86, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"0.9689909088513265" | |
] | |
}, | |
"execution_count": 86, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"distance('George W. Bush', 'Joe Biden')" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 88, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"0.8914688165783309" | |
] | |
}, | |
"execution_count": 88, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"distance('Barack Obama', 'Joe Biden')" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Problem 2" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Recommend using cosine similarity, in constrast with cosine distance: the higher the similarity, more likely it will related to reading person" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 97, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"from sklearn.metrics.pairwise import linear_kernel\n", | |
"import numpy as np\n", | |
"\n", | |
"def recommend(name, k):\n", | |
" \"\"\"\n", | |
" Args:\n", | |
" name: Name of reading person\n", | |
" k: Number of people to recommend\n", | |
" \n", | |
" Returns:\n", | |
" DataFrame contains k list of people to recommend for reading person\n", | |
" \"\"\"\n", | |
" # Get id of current reading person\n", | |
" target_id = find_id(name)\n", | |
" \n", | |
" # calculate cosine similarity with other people\n", | |
" cosine_similarities = linear_kernel(tfidf_matrix[target_id], tfidf_matrix).flatten()\n", | |
"\n", | |
" # get list of ids, sorted by similarity (desc)\n", | |
" # trick: cut off head 'coz head is always reading person\n", | |
" ids = np.flip(\n", | |
" np.argsort(cosine_similarities),\n", | |
" axis=0\n", | |
" )[1:]\n", | |
" \n", | |
" # return dataframe corresponding to list of ids\n", | |
" # limited by k\n", | |
" return df.iloc[ids].head(k)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Test for recommending 10 people while reading `Barack Obama`" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 98, | |
"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>URI</th>\n", | |
" <th>name</th>\n", | |
" <th>text</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>24478</th>\n", | |
" <td><http://dbpedia.org/resource/Joe_Biden></td>\n", | |
" <td>Joe Biden</td>\n", | |
" <td>joseph robinette joe biden jr dosf rbnt badn b...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>46811</th>\n", | |
" <td><http://dbpedia.org/resource/Jeff_Sessions></td>\n", | |
" <td>Jeff Sessions</td>\n", | |
" <td>jefferson beauregard jeff sessions iii born de...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4408</th>\n", | |
" <td><http://dbpedia.org/resource/Joe_Lieberman></td>\n", | |
" <td>Joe Lieberman</td>\n", | |
" <td>joseph isadore joe lieberman born february 24 ...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>48693</th>\n", | |
" <td><http://dbpedia.org/resource/Artur_Davis></td>\n", | |
" <td>Artur Davis</td>\n", | |
" <td>artur genestre davis born october 9 1967 is an...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>18827</th>\n", | |
" <td><http://dbpedia.org/resource/Henry_Waxman></td>\n", | |
" <td>Henry Waxman</td>\n", | |
" <td>henry arnold waxman born september 12 1939 is ...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>57108</th>\n", | |
" <td><http://dbpedia.org/resource/Hillary_Rodham_Cl...</td>\n", | |
" <td>Hillary Rodham Clinton</td>\n", | |
" <td>hillary diane rodham clinton hlri dan rdm klnt...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>30804</th>\n", | |
" <td><http://dbpedia.org/resource/Richard_Pildes></td>\n", | |
" <td>Richard Pildes</td>\n", | |
" <td>richard h pildes is a law professor at the new...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>38376</th>\n", | |
" <td><http://dbpedia.org/resource/Samantha_Power></td>\n", | |
" <td>Samantha Power</td>\n", | |
" <td>samantha power born september 21 1970 is an ir...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>46140</th>\n", | |
" <td><http://dbpedia.org/resource/Robert_Gibbs></td>\n", | |
" <td>Robert Gibbs</td>\n", | |
" <td>robert lane gibbs born march 29 1971 is an ame...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>38714</th>\n", | |
" <td><http://dbpedia.org/resource/Eric_Stern_(polit...</td>\n", | |
" <td>Eric Stern (politician)</td>\n", | |
" <td>eric stern is the director of operations for t...</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" URI \\\n", | |
"24478 <http://dbpedia.org/resource/Joe_Biden> \n", | |
"46811 <http://dbpedia.org/resource/Jeff_Sessions> \n", | |
"4408 <http://dbpedia.org/resource/Joe_Lieberman> \n", | |
"48693 <http://dbpedia.org/resource/Artur_Davis> \n", | |
"18827 <http://dbpedia.org/resource/Henry_Waxman> \n", | |
"57108 <http://dbpedia.org/resource/Hillary_Rodham_Cl... \n", | |
"30804 <http://dbpedia.org/resource/Richard_Pildes> \n", | |
"38376 <http://dbpedia.org/resource/Samantha_Power> \n", | |
"46140 <http://dbpedia.org/resource/Robert_Gibbs> \n", | |
"38714 <http://dbpedia.org/resource/Eric_Stern_(polit... \n", | |
"\n", | |
" name \\\n", | |
"24478 Joe Biden \n", | |
"46811 Jeff Sessions \n", | |
"4408 Joe Lieberman \n", | |
"48693 Artur Davis \n", | |
"18827 Henry Waxman \n", | |
"57108 Hillary Rodham Clinton \n", | |
"30804 Richard Pildes \n", | |
"38376 Samantha Power \n", | |
"46140 Robert Gibbs \n", | |
"38714 Eric Stern (politician) \n", | |
"\n", | |
" text \n", | |
"24478 joseph robinette joe biden jr dosf rbnt badn b... \n", | |
"46811 jefferson beauregard jeff sessions iii born de... \n", | |
"4408 joseph isadore joe lieberman born february 24 ... \n", | |
"48693 artur genestre davis born october 9 1967 is an... \n", | |
"18827 henry arnold waxman born september 12 1939 is ... \n", | |
"57108 hillary diane rodham clinton hlri dan rdm klnt... \n", | |
"30804 richard h pildes is a law professor at the new... \n", | |
"38376 samantha power born september 21 1970 is an ir... \n", | |
"46140 robert lane gibbs born march 29 1971 is an ame... \n", | |
"38714 eric stern is the director of operations for t... " | |
] | |
}, | |
"execution_count": 98, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"recommend('Barack Obama', 10)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Calculate executing time" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 105, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import random\n", | |
"from tqdm import tqdm\n", | |
"\n", | |
"def execute_recommend(n, k):\n", | |
" \"\"\"\n", | |
" Args:\n", | |
" n: Number of people\n", | |
" k: Number of people to recommend to corresponding person\n", | |
" \"\"\"\n", | |
" # random n people\n", | |
" people = random.sample(list(df['name']), n)\n", | |
" \n", | |
" for name in tqdm(people):\n", | |
" recommend(name, k)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"1 person, k = 200" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 106, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"100%|██████████| 1/1 [00:01<00:00, 1.82s/it]" | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 1.81 s, sys: 23.3 ms, total: 1.83 s\n", | |
"Wall time: 1.83 s\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"\n" | |
] | |
} | |
], | |
"source": [ | |
"%time execute_recommend(1, 200)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"50 people, k = 200" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 107, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"100%|██████████| 50/50 [01:26<00:00, 1.72s/it]" | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 1min 24s, sys: 1.56 s, total: 1min 26s\n", | |
"Wall time: 1min 26s\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"\n" | |
] | |
} | |
], | |
"source": [ | |
"%time execute_recommend(50, 200)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"500 people, k = 200" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 108, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"100%|██████████| 500/500 [14:13<00:00, 1.71s/it]" | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 13min 58s, sys: 15.2 s, total: 14min 14s\n", | |
"Wall time: 14min 13s\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"\n" | |
] | |
} | |
], | |
"source": [ | |
"%time execute_recommend(500, 200)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"As estimation, recommend 5000 people, k = 200 would take near 2.5 hours." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Problem 3" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"First cluster TFIDF matrix with K-Means into 100 clusters." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 22, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Init 1/1 with method: k-means++\n", | |
"Inertia for init 1/1: 2861.899365\n", | |
"Minibatch iteration 1/6000: mean batch inertia: 1.001967, ewa inertia: 1.001967 \n", | |
"Minibatch iteration 2/6000: mean batch inertia: 0.994862, ewa inertia: 1.001726 \n", | |
"Minibatch iteration 3/6000: mean batch inertia: 0.992571, ewa inertia: 1.001416 \n", | |
"Minibatch iteration 4/6000: mean batch inertia: 0.992247, ewa inertia: 1.001106 \n", | |
"Minibatch iteration 5/6000: mean batch inertia: 0.991494, ewa inertia: 1.000780 \n", | |
"Minibatch iteration 6/6000: mean batch inertia: 0.990495, ewa inertia: 1.000432 \n", | |
"Minibatch iteration 7/6000: mean batch inertia: 0.988632, ewa inertia: 1.000033 \n", | |
"Minibatch iteration 8/6000: mean batch inertia: 0.991173, ewa inertia: 0.999733 \n", | |
"Minibatch iteration 9/6000: mean batch inertia: 0.990889, ewa inertia: 0.999433 \n", | |
"Minibatch iteration 10/6000: mean batch inertia: 0.990143, ewa inertia: 0.999119 \n", | |
"Minibatch iteration 11/6000: mean batch inertia: 0.990426, ewa inertia: 0.998825 \n", | |
"[MiniBatchKMeans] Reassigning 72 cluster centers.\n", | |
"Minibatch iteration 12/6000: mean batch inertia: 0.989320, ewa inertia: 0.998503 \n", | |
"Minibatch iteration 13/6000: mean batch inertia: 0.991861, ewa inertia: 0.998278 \n", | |
"Minibatch iteration 14/6000: mean batch inertia: 0.990187, ewa inertia: 0.998004 \n", | |
"Minibatch iteration 15/6000: mean batch inertia: 0.990044, ewa inertia: 0.997734 \n", | |
"Minibatch iteration 16/6000: mean batch inertia: 0.989320, ewa inertia: 0.997449 \n", | |
"Minibatch iteration 17/6000: mean batch inertia: 0.988875, ewa inertia: 0.997159 \n", | |
"Minibatch iteration 18/6000: mean batch inertia: 0.989355, ewa inertia: 0.996895 \n", | |
"Minibatch iteration 19/6000: mean batch inertia: 0.990982, ewa inertia: 0.996695 \n", | |
"Minibatch iteration 20/6000: mean batch inertia: 0.990432, ewa inertia: 0.996483 \n", | |
"Minibatch iteration 21/6000: mean batch inertia: 0.991172, ewa inertia: 0.996303 \n", | |
"Minibatch iteration 22/6000: mean batch inertia: 0.990418, ewa inertia: 0.996104 \n", | |
"Minibatch iteration 23/6000: mean batch inertia: 0.987428, ewa inertia: 0.995810 \n", | |
"Minibatch iteration 24/6000: mean batch inertia: 0.989901, ewa inertia: 0.995610 \n", | |
"Minibatch iteration 25/6000: mean batch inertia: 0.989562, ewa inertia: 0.995405 \n", | |
"Minibatch iteration 26/6000: mean batch inertia: 0.990112, ewa inertia: 0.995226 \n", | |
"Minibatch iteration 27/6000: mean batch inertia: 0.990702, ewa inertia: 0.995073 \n", | |
"Minibatch iteration 28/6000: mean batch inertia: 0.988111, ewa inertia: 0.994837 \n", | |
"Minibatch iteration 29/6000: mean batch inertia: 0.990247, ewa inertia: 0.994682 \n", | |
"Minibatch iteration 30/6000: mean batch inertia: 0.989248, ewa inertia: 0.994498 \n", | |
"Minibatch iteration 31/6000: mean batch inertia: 0.989790, ewa inertia: 0.994338 \n", | |
"Minibatch iteration 32/6000: mean batch inertia: 0.990520, ewa inertia: 0.994209 \n", | |
"Minibatch iteration 33/6000: mean batch inertia: 0.990912, ewa inertia: 0.994097 \n", | |
"Minibatch iteration 34/6000: mean batch inertia: 0.988415, ewa inertia: 0.993905 \n", | |
"Minibatch iteration 35/6000: mean batch inertia: 0.988008, ewa inertia: 0.993705 \n", | |
"Minibatch iteration 36/6000: mean batch inertia: 0.988288, ewa inertia: 0.993522 \n", | |
"Minibatch iteration 37/6000: mean batch inertia: 0.988747, ewa inertia: 0.993360 \n", | |
"Minibatch iteration 38/6000: mean batch inertia: 0.988941, ewa inertia: 0.993211 \n", | |
"Minibatch iteration 39/6000: mean batch inertia: 0.989247, ewa inertia: 0.993076 \n", | |
"Minibatch iteration 40/6000: mean batch inertia: 0.990554, ewa inertia: 0.992991 \n", | |
"Minibatch iteration 41/6000: mean batch inertia: 0.988648, ewa inertia: 0.992844 \n", | |
"Minibatch iteration 42/6000: mean batch inertia: 0.989584, ewa inertia: 0.992734 \n", | |
"Minibatch iteration 43/6000: mean batch inertia: 0.989854, ewa inertia: 0.992636 \n", | |
"Minibatch iteration 44/6000: mean batch inertia: 0.990015, ewa inertia: 0.992547 \n", | |
"Minibatch iteration 45/6000: mean batch inertia: 0.989750, ewa inertia: 0.992453 \n", | |
"Minibatch iteration 46/6000: mean batch inertia: 0.989349, ewa inertia: 0.992348 \n", | |
"Minibatch iteration 47/6000: mean batch inertia: 0.988047, ewa inertia: 0.992202 \n", | |
"Minibatch iteration 48/6000: mean batch inertia: 0.985259, ewa inertia: 0.991967 \n", | |
"Minibatch iteration 49/6000: mean batch inertia: 0.987224, ewa inertia: 0.991806 \n", | |
"Minibatch iteration 50/6000: mean batch inertia: 0.988472, ewa inertia: 0.991693 \n", | |
"Minibatch iteration 51/6000: mean batch inertia: 0.988400, ewa inertia: 0.991582 \n", | |
"Minibatch iteration 52/6000: mean batch inertia: 0.990279, ewa inertia: 0.991538 \n", | |
"Minibatch iteration 53/6000: mean batch inertia: 0.988436, ewa inertia: 0.991433 \n", | |
"Minibatch iteration 54/6000: mean batch inertia: 0.988311, ewa inertia: 0.991327 \n", | |
"Minibatch iteration 55/6000: mean batch inertia: 0.990053, ewa inertia: 0.991284 \n", | |
"Minibatch iteration 56/6000: mean batch inertia: 0.989915, ewa inertia: 0.991238 \n", | |
"Minibatch iteration 57/6000: mean batch inertia: 0.989532, ewa inertia: 0.991180 \n", | |
"Minibatch iteration 58/6000: mean batch inertia: 0.988709, ewa inertia: 0.991096 \n", | |
"Minibatch iteration 59/6000: mean batch inertia: 0.987885, ewa inertia: 0.990988 \n", | |
"Minibatch iteration 60/6000: mean batch inertia: 0.987077, ewa inertia: 0.990855 \n", | |
"Minibatch iteration 61/6000: mean batch inertia: 0.987957, ewa inertia: 0.990757 \n", | |
"Minibatch iteration 62/6000: mean batch inertia: 0.987912, ewa inertia: 0.990661 \n", | |
"Minibatch iteration 63/6000: mean batch inertia: 0.985600, ewa inertia: 0.990489 \n", | |
"Minibatch iteration 64/6000: mean batch inertia: 0.988168, ewa inertia: 0.990411 \n", | |
"Minibatch iteration 65/6000: mean batch inertia: 0.989560, ewa inertia: 0.990382 \n", | |
"Minibatch iteration 66/6000: mean batch inertia: 0.988193, ewa inertia: 0.990308 \n", | |
"Minibatch iteration 67/6000: mean batch inertia: 0.990052, ewa inertia: 0.990299 \n", | |
"Minibatch iteration 68/6000: mean batch inertia: 0.989917, ewa inertia: 0.990286 \n", | |
"Minibatch iteration 69/6000: mean batch inertia: 0.988681, ewa inertia: 0.990232 \n", | |
"Minibatch iteration 70/6000: mean batch inertia: 0.990569, ewa inertia: 0.990243 \n", | |
"Minibatch iteration 71/6000: mean batch inertia: 0.987367, ewa inertia: 0.990146 \n", | |
"[MiniBatchKMeans] Reassigning 79 cluster centers.\n", | |
"Minibatch iteration 72/6000: mean batch inertia: 0.989707, ewa inertia: 0.990131 \n", | |
"Minibatch iteration 73/6000: mean batch inertia: 0.990318, ewa inertia: 0.990137 \n", | |
"Minibatch iteration 74/6000: mean batch inertia: 0.987705, ewa inertia: 0.990055 \n", | |
"Minibatch iteration 75/6000: mean batch inertia: 0.989487, ewa inertia: 0.990036 \n", | |
"Minibatch iteration 76/6000: mean batch inertia: 0.987645, ewa inertia: 0.989955 \n", | |
"Minibatch iteration 77/6000: mean batch inertia: 0.990472, ewa inertia: 0.989972 \n", | |
"Minibatch iteration 78/6000: mean batch inertia: 0.990040, ewa inertia: 0.989975 \n", | |
"Minibatch iteration 79/6000: mean batch inertia: 0.989171, ewa inertia: 0.989947 \n", | |
"Minibatch iteration 80/6000: mean batch inertia: 0.989946, ewa inertia: 0.989947 \n", | |
"Minibatch iteration 81/6000: mean batch inertia: 0.989624, ewa inertia: 0.989936 \n", | |
"Minibatch iteration 82/6000: mean batch inertia: 0.987063, ewa inertia: 0.989839 \n", | |
"Minibatch iteration 83/6000: mean batch inertia: 0.989501, ewa inertia: 0.989828 \n", | |
"Minibatch iteration 84/6000: mean batch inertia: 0.989636, ewa inertia: 0.989821 \n", | |
"Minibatch iteration 85/6000: mean batch inertia: 0.989926, ewa inertia: 0.989825 \n", | |
"Minibatch iteration 86/6000: mean batch inertia: 0.989663, ewa inertia: 0.989819 \n", | |
"Minibatch iteration 87/6000: mean batch inertia: 0.989854, ewa inertia: 0.989820 \n", | |
"Minibatch iteration 88/6000: mean batch inertia: 0.990595, ewa inertia: 0.989847 \n", | |
"Minibatch iteration 89/6000: mean batch inertia: 0.986981, ewa inertia: 0.989750 \n", | |
"Minibatch iteration 90/6000: mean batch inertia: 0.988309, ewa inertia: 0.989701 \n", | |
"Minibatch iteration 91/6000: mean batch inertia: 0.990275, ewa inertia: 0.989720 \n", | |
"Minibatch iteration 92/6000: mean batch inertia: 0.987583, ewa inertia: 0.989648 \n", | |
"Minibatch iteration 93/6000: mean batch inertia: 0.988446, ewa inertia: 0.989607 \n", | |
"Minibatch iteration 94/6000: mean batch inertia: 0.990568, ewa inertia: 0.989640 \n", | |
"Minibatch iteration 95/6000: mean batch inertia: 0.989911, ewa inertia: 0.989649 \n", | |
"Minibatch iteration 96/6000: mean batch inertia: 0.988477, ewa inertia: 0.989609 \n", | |
"Minibatch iteration 97/6000: mean batch inertia: 0.990238, ewa inertia: 0.989631 \n", | |
"Minibatch iteration 98/6000: mean batch inertia: 0.987676, ewa inertia: 0.989564 \n", | |
"Minibatch iteration 99/6000: mean batch inertia: 0.989683, ewa inertia: 0.989568 \n", | |
"Minibatch iteration 100/6000: mean batch inertia: 0.990201, ewa inertia: 0.989590 \n", | |
"Minibatch iteration 101/6000: mean batch inertia: 0.986591, ewa inertia: 0.989488 \n", | |
"Minibatch iteration 102/6000: mean batch inertia: 0.988818, ewa inertia: 0.989466 \n", | |
"Minibatch iteration 103/6000: mean batch inertia: 0.988694, ewa inertia: 0.989439 \n", | |
"Minibatch iteration 104/6000: mean batch inertia: 0.986483, ewa inertia: 0.989339 \n", | |
"Minibatch iteration 105/6000: mean batch inertia: 0.989257, ewa inertia: 0.989337 \n", | |
"Minibatch iteration 106/6000: mean batch inertia: 0.988572, ewa inertia: 0.989311 \n", | |
"Minibatch iteration 107/6000: mean batch inertia: 0.988316, ewa inertia: 0.989277 \n", | |
"Minibatch iteration 108/6000: mean batch inertia: 0.988854, ewa inertia: 0.989263 \n", | |
"Minibatch iteration 109/6000: mean batch inertia: 0.989032, ewa inertia: 0.989255 \n", | |
"Minibatch iteration 110/6000: mean batch inertia: 0.987968, ewa inertia: 0.989211 \n", | |
"Minibatch iteration 111/6000: mean batch inertia: 0.990702, ewa inertia: 0.989262 \n", | |
"Minibatch iteration 112/6000: mean batch inertia: 0.990762, ewa inertia: 0.989313 \n", | |
"Minibatch iteration 113/6000: mean batch inertia: 0.985904, ewa inertia: 0.989197 \n", | |
"Minibatch iteration 114/6000: mean batch inertia: 0.988785, ewa inertia: 0.989183 \n", | |
"Minibatch iteration 115/6000: mean batch inertia: 0.988447, ewa inertia: 0.989158 \n", | |
"Minibatch iteration 116/6000: mean batch inertia: 0.989680, ewa inertia: 0.989176 \n", | |
"Minibatch iteration 117/6000: mean batch inertia: 0.989286, ewa inertia: 0.989180 \n", | |
"Minibatch iteration 118/6000: mean batch inertia: 0.990281, ewa inertia: 0.989217 \n", | |
"Minibatch iteration 119/6000: mean batch inertia: 0.989576, ewa inertia: 0.989229 \n", | |
"Minibatch iteration 120/6000: mean batch inertia: 0.987615, ewa inertia: 0.989174 \n", | |
"Minibatch iteration 121/6000: mean batch inertia: 0.990094, ewa inertia: 0.989206 \n", | |
"Minibatch iteration 122/6000: mean batch inertia: 0.987440, ewa inertia: 0.989146 \n", | |
"Minibatch iteration 123/6000: mean batch inertia: 0.988054, ewa inertia: 0.989109 \n", | |
"Minibatch iteration 124/6000: mean batch inertia: 0.987681, ewa inertia: 0.989060 \n", | |
"Minibatch iteration 125/6000: mean batch inertia: 0.990558, ewa inertia: 0.989111 \n", | |
"Minibatch iteration 126/6000: mean batch inertia: 0.990396, ewa inertia: 0.989155 \n", | |
"Minibatch iteration 127/6000: mean batch inertia: 0.985824, ewa inertia: 0.989042 \n", | |
"Minibatch iteration 128/6000: mean batch inertia: 0.989975, ewa inertia: 0.989073 \n", | |
"Minibatch iteration 129/6000: mean batch inertia: 0.987519, ewa inertia: 0.989021 \n", | |
"Minibatch iteration 130/6000: mean batch inertia: 0.987937, ewa inertia: 0.988984 \n", | |
"Minibatch iteration 131/6000: mean batch inertia: 0.989074, ewa inertia: 0.988987 \n", | |
"Minibatch iteration 132/6000: mean batch inertia: 0.987295, ewa inertia: 0.988930 \n", | |
"Minibatch iteration 133/6000: mean batch inertia: 0.989153, ewa inertia: 0.988937 \n", | |
"Minibatch iteration 134/6000: mean batch inertia: 0.990368, ewa inertia: 0.988986 \n", | |
"Minibatch iteration 135/6000: mean batch inertia: 0.986665, ewa inertia: 0.988907 \n", | |
"Minibatch iteration 136/6000: mean batch inertia: 0.988844, ewa inertia: 0.988905 \n", | |
"Minibatch iteration 137/6000: mean batch inertia: 0.988336, ewa inertia: 0.988886 \n", | |
"Minibatch iteration 138/6000: mean batch inertia: 0.990123, ewa inertia: 0.988928 \n", | |
"Minibatch iteration 139/6000: mean batch inertia: 0.987487, ewa inertia: 0.988879 \n", | |
"Minibatch iteration 140/6000: mean batch inertia: 0.987411, ewa inertia: 0.988829 \n", | |
"Minibatch iteration 141/6000: mean batch inertia: 0.986050, ewa inertia: 0.988735 \n", | |
"Minibatch iteration 142/6000: mean batch inertia: 0.989150, ewa inertia: 0.988749 \n", | |
"Minibatch iteration 143/6000: mean batch inertia: 0.989601, ewa inertia: 0.988778 \n", | |
"Minibatch iteration 144/6000: mean batch inertia: 0.990991, ewa inertia: 0.988853 \n", | |
"Minibatch iteration 145/6000: mean batch inertia: 0.985968, ewa inertia: 0.988755 \n", | |
"Minibatch iteration 146/6000: mean batch inertia: 0.990663, ewa inertia: 0.988820 \n", | |
"Minibatch iteration 147/6000: mean batch inertia: 0.987778, ewa inertia: 0.988785 \n", | |
"Minibatch iteration 148/6000: mean batch inertia: 0.990022, ewa inertia: 0.988827 \n", | |
"Minibatch iteration 149/6000: mean batch inertia: 0.989714, ewa inertia: 0.988857 \n", | |
"Minibatch iteration 150/6000: mean batch inertia: 0.987734, ewa inertia: 0.988819 \n", | |
"Minibatch iteration 151/6000: mean batch inertia: 0.988657, ewa inertia: 0.988813 \n", | |
"Converged (lack of improvement in inertia) at iteration 151/6000\n", | |
"Computing label assignment and total inertia\n", | |
"CPU times: user 16min 18s, sys: 29.2 s, total: 16min 47s\n", | |
"Wall time: 8min\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"MiniBatchKMeans(batch_size=1000, compute_labels=True, init='k-means++',\n", | |
" init_size=None, max_iter=100, max_no_improvement=10,\n", | |
" n_clusters=100, n_init=1, random_state=None,\n", | |
" reassignment_ratio=0.01, tol=0.0, verbose=1)" | |
] | |
}, | |
"execution_count": 22, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"from sklearn.cluster import MiniBatchKMeans\n", | |
"\n", | |
"km = MiniBatchKMeans(n_clusters=100, init='k-means++', \n", | |
" n_init=1, \n", | |
" # init_size=1000, \n", | |
" batch_size=1000,\n", | |
" verbose=1)\n", | |
"%time km.fit(tfidf_matrix)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Assign clustered labels to corresponding records." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 24, | |
"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>URI</th>\n", | |
" <th>name</th>\n", | |
" <th>text</th>\n", | |
" <th>label</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td><http://dbpedia.org/resource/Digby_Morrell></td>\n", | |
" <td>Digby Morrell</td>\n", | |
" <td>digby morrell born 10 october 1979 is a former...</td>\n", | |
" <td>91</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td><http://dbpedia.org/resource/Alfred_J._Lewy></td>\n", | |
" <td>Alfred J. Lewy</td>\n", | |
" <td>alfred j lewy aka sandy lewy graduated from un...</td>\n", | |
" <td>19</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td><http://dbpedia.org/resource/Harpdog_Brown></td>\n", | |
" <td>Harpdog Brown</td>\n", | |
" <td>harpdog brown is a singer and harmonica player...</td>\n", | |
" <td>42</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td><http://dbpedia.org/resource/Franz_Rottensteiner></td>\n", | |
" <td>Franz Rottensteiner</td>\n", | |
" <td>franz rottensteiner born in waidmannsfeld lowe...</td>\n", | |
" <td>13</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td><http://dbpedia.org/resource/G-Enka></td>\n", | |
" <td>G-Enka</td>\n", | |
" <td>henry krvits born 30 december 1974 in tallinn ...</td>\n", | |
" <td>61</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" URI name \\\n", | |
"0 <http://dbpedia.org/resource/Digby_Morrell> Digby Morrell \n", | |
"1 <http://dbpedia.org/resource/Alfred_J._Lewy> Alfred J. Lewy \n", | |
"2 <http://dbpedia.org/resource/Harpdog_Brown> Harpdog Brown \n", | |
"3 <http://dbpedia.org/resource/Franz_Rottensteiner> Franz Rottensteiner \n", | |
"4 <http://dbpedia.org/resource/G-Enka> G-Enka \n", | |
"\n", | |
" text label \n", | |
"0 digby morrell born 10 october 1979 is a former... 91 \n", | |
"1 alfred j lewy aka sandy lewy graduated from un... 19 \n", | |
"2 harpdog brown is a singer and harmonica player... 42 \n", | |
"3 franz rottensteiner born in waidmannsfeld lowe... 13 \n", | |
"4 henry krvits born 30 december 1974 in tallinn ... 61 " | |
] | |
}, | |
"execution_count": 24, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"df['label'] = km.labels_\n", | |
"df.head()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Plot portion of records corresponding to each label" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 74, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Original fig_size [6.0, 4.0]\n", | |
"New fig_size [10.0, 10.0]\n" | |
] | |
} | |
], | |
"source": [ | |
"import matplotlib.pyplot as plt\n", | |
"%matplotlib inline\n", | |
"\n", | |
"# Get current size\n", | |
"fig_size = plt.rcParams[\"figure.figsize\"]\n", | |
"print(\"Original fig_size\", fig_size)\n", | |
"\n", | |
"# Re-set figure width & height\n", | |
"new_fig = [10.0, 10.0]\n", | |
"plt.rcParams[\"figure.figsize\"] = new_fig\n", | |
"print(\"New fig_size\", new_fig)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 77, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAkMAAAI1CAYAAADVQv5HAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzs3Xd4XNWBNvD3TFeXbEsaV9mSjee6yZYbYIMNoS0JJJCQQDZBHyGF9F42mxBSd0nZVJKQUEIJkLpLB1OEO+Ame2xfuciSrOKibklT773n+2PG2DiyJduaOTOa9/c8fmSNZua+LqDX55x7jpBSgoiIiChT2VQHICIiIlKJZYiIiIgyGssQERERZTSWISIiIspoLENERESU0ViGiIiIKKOxDBEREVFGYxkiIiKijMYyRERERBmNZYiIiIgyGssQERERZTSWISIiIspoLENERESU0ViGiIiIKKOxDBEREVFGYxkiIiKijMYyRERERBmNZYiIiIgyGssQERERZTSWISIiIspoLENERESU0ViGiIiIKKOxDBEREVFGYxkiIiKijMYyRERERBmNZYiIiIgyGssQERERZTSWISIiIspoLENERESU0ViGiIiIKKOxDBEREVFGYxkiIiKijMYyRERERBmNZYiIiIgyGssQERERZTSWISIiIspoLENERESU0ViGiOicCSEeEEIcFULsPOmx7wshdgghaoUQq4QQE1RmJCIaipBSqs5ARGlKCHEpgH4AD0sp58Qfy5dSHov//HMAZkkp71AYk4jojDgyRETnTEq5BkDXKY8dO+nTHAD8FxcRpTSH6gBENPoIIX4I4FYAvQAuUxyHiOiMODJERCNOSvmfUsrJAP4M4DOq8xARnQnLEBEl0mMA3qs6BBHRmbAMEdGIEkLMOOnT6wHUqcpCRDQcXDNEROdMCPE4gJUAxgkhWgB8B8C1QoiZACwATQB4JxkRpTTeWk9EREQZjdNkRERElNFYhoiIiCijsQwRERFRRmMZIiIioozGMkREREQZjWWIiIiIMhrLEBEREWU0liEiIiLKaCxDRERElNFYhoiIiCijsQwRERFRRmMZIiIioozGMkREREQZjWWIiIiIMhrLEBEREWU0liEiIiLKaCxDRERElNFYhoiIiCijOVQHIKL0o/u0fADjAXjjH4//vBBAVvxH9iA/dwOwn+GHADAAoD/+o++kn5/6+WA/7wNwFECrVqdbifsdIKLRREgpVWcgohSg+zQBoBhvLzfjT/lx/LFsRTGHywDQAqDplB8Hj3/U6vSQunhElEpYhogyjO7TbAAqAMwGMOekjxcAcCmMlkwSsRGkwYrSPgB7tTrdVBePiJKJZYholIqP9EzB2wvPbAAaYlNWdHoBADsAbAWwLf5xp1anR5SmIqKEYBkiGgXia3iWAJiLE6VnFoA8lblGmQiAXThRjrYC2K7V6QGlqYjovLEMEaUh3aeNAXAJgBXxH5WILUCm5DIB7MWJcrQNwBatTj+mNBURnRWWIaI0oPu0EgCX4kT5mYPYnVeUekwAmwC8FP/xulanR9VGIqIzYRkiSkG6T5uAE8VnBQCf2kR0HvoArAawCsBLWp1epzgPEZ2CZYgoBeg+bSyAawGsRKz8VCgNRInUghOjRi9rdXq74jxEGY9liEgR3aeNB3ADgPciVoC45ifzSADbcaIcreX+R0TJxzJElES6T5sK4EbECtBF4LofersQgJcBPAHg/7Q6fUBxHqKMwDJElGC6T/MhVn5uBFClOA6ljwCApwE8DuB57nFElDgsQ0QJoPu0+ThRgGYpjkPprxvAPxErRjU8d41oZLEMEY0Q3adVAbgFsQJUrjgOjV6HAPwVwONanf6G6jBEowHLENF50H1aDmIF6A4ACxXHocxTj9j6ose0On236jBE6YpliOgc6D5tHoBPAPgQgHzFcYiA2FlqfwbwgFand6gOQ5ROWIaIhkn3aR4AH0CsBF2kOA7R6YQQW1v0S61O3646DFE6YBkiGkL8brA7ANwKoEhxHKKzsQbALwE8qdXppuowRKmKZYhoELpPcyF2N9gdiJ0JRpTOmgDcA+A+rU7vVh2GKNWwDBGdRPdp5YgVoP8HoFhtGqIRFwDwCIBfccE10QksQ0R4ayrsWwBuBo/FoMzwMmJTaM9qdTq/EVBGYxmijKb7tNkAvg3gJgA2xXGIVNgP4DcAHtTq9GOqwxCpwDJEGUn3aZWIlaAbwfPBiADgGICfA/iZVqf3qQ5DlEwsQ5RRdJ+2EMCdAK4DSxDRYDoB3A3gN1qdHlQdhigZWIYoI+g+bSliJeha1VmI0kQbgB8C+KNWp0dVhyFKJJYhGtV0n7YMwHcAXKk6C1GaagDwXQCP8IBYGq1YhmhU0n3aSsRGgi5THIVotNAR+2/qH7z7jEYbliEaVeK3yP8CwNWqsxCNUlsBfEur059XHYRopLAM0aig+7R8AHcB+AwAp9o0RBlhHYBvanX6WtVBiM4XyxClNd2nCQC3AfgRgFLFcYgy0YsAvs5DYSmdsQxR2orfIfZrAItVZyHKcCaA3yM2fdajOgzR2WIZorSj+zQvgP9G7BR57hVElDqOAvg6gIe4yJrSCcsQpQ3dpzkBfAGxnaPzFMchotNbD+DTnDqjdMEyRGlB92nXIHaX2EzVWYhoWEwAvwXwba1O71UdhuhMWIYopek+bTpi5yW9S3UWIjonhwB8VqvT/6E6CNHpsAxRSopPiX0LwDcAuBTHIaLz9ySAz2h1eovqIESnYhmilKP7tPkA/gSgUnEUIhpZfQC+CeC3PNqDUgnLEKWM+GjQfyL2P0tunEg0em0E8HGtTt+pOggRwDJEKUL3afMQGw1aoDgKESVHFMD3AfyQo0SkGssQKaX7NAdi64K+Da4NIspEqwF8iGuJSCWWIVImfqfYowCWqs5CREp1AfioVqf/r+oglJlYhkgJ3afdjti+QbmqsxBRyvg9gC9pdXpQdRDKLCxDlFS6TxsL4I8AblCdhYhS0i4AN3NxNSWTTXUAyhy6T7sKgB8sQkR0erMBbNJ92qdVB6HMwZEhSrj4LfM/BvB58GBVIhq+JwHcrtXpnaqD0OjGMkQJpfu0UgB/B7BcdRYiSkutiN1t9prqIDR6sQxRwug+bQmAfwKYqDoLEaU1C8B/AbhLq9MN1WFo9GEZooTQfdptAH4HwK06CxGNGhsBfFCr0xtVB6HRhWWIRlR8E8VfAODiRyJKhE4AN2p1+hrVQWj0YBmiEaP7tBIAfwNwqeosRDSqRQDcodXpD6oOQqMDyxCNCN2nLUJsfdBk1VmIKGP8GMA3tDqd38jovLAM0XnTfdqtAO4F4FGdhYgyzv8hdrfZgOoglL5YhuicxdcH/QzA51RnIaKMtg3AdVqd3qo6CKUnliE6J7pPG4fY+qCViqMQEQFAG4DrtTp9i+oglH54HAedNd2nLQCwGSxCRJQ6JgBYo/u096oOQumHZYjOiu7T3gFgDYAy1VmIiE6RDeBvuk/7puoglF44TUbDpvu09wB4AtxIkYhS3yMAPqrV6RHVQSj1sQzRsOg+rRrA/QDsqrMQEQ3TOgA3aHV6h+oglNo4TUZD0n3a5wE8CBYhIkovywG8ofu0CtVBKLWxDNEZ6T7te4gdryFUZyEiOgflAFbrPu0C1UEodXGajAal+zQB4JcAPqs6CxHRCDgE4B1ana6rDkKph2WI/kV8M8UHAHxYdRYiohF0FLFCtFN1EEotLEP0NrpP8wD4C4DrVWchIkqADgBXaHX6dtVBKHWwDNFbdJ+WB+ApcDNFIhrdugBcxd2q6TiWIQLw1vEazwNYpDoLEVES9AK4WqvT31AdhNTj3WQE3adNRGxXaRYhIsoUBQBW6T5tmeogpB5HhjKc7tNKENuYbIbqLERECvQDeJdWp69WHYTU4chQBtN9Wj6AF8AiRESZKxfAc/FzFylDsQxlKN2nZQF4GsAC1VmIiBTLBvC07tOuVh2E1GAZykDxfYT+CuBS1VmIiFJEFoAndZ92reoglHxcM5Rh4jtLPwzgQ6qzEBGloCCAy7U6/XXVQSh5ODKUeX4BFiEiotPJQmzKjGspMwjLUAbRfdqdAD6nOgcRUYobB+CF+N22lAE4TZYhdJ/2GQC/Vp2DiCiNbAKwUqvTA6qDUGJxZCgD6D7tgwB+pToHEVGaWQzgL7pPs6sOQonFMjTKxe+MeAiAUJ2FiCgNvQvAPapDUGKxDI1iuk9bDuDvAByqsxARpbFP6D7tm6pDUOJwzdAopfu0SgCrETt/h4iIzt+tWp3+iOoQNPJYhkYh3acVA9gMYIrqLEREo0gUwLVanf6y6iA0sjhNNsqctLs0ixAR0chyAviH7tPmqQ5CI4tlaPT5CYCVqkMQEY1S+Ygd7DpZdRAaOZwmG0V0n/YhAJzPJiJKvF0Alml1eq/qIHT+ODI0Sug+bQGAP6jOQUSUIWYjds4jjQIsQ6OA7tPGAvhfxM7UISKi5Lhe92lfUR2Czh+nydJcfGfUFwG8Q3UWIqIMZCB2ZMd61UHo3HFkKP3dDRYhIiJVHIgd2TFOdRA6dyxDaUz3abcA+LLqHEREGW4igD/rPo3fU9MU/+DSVHyH6ftU5yAiIgDAVQC+pToEnRuuGUpDuk8bg9gO09NUZyEiordYAK7U6vRXVQehs8ORoTQTXzD9BFiEiIhSjQ3AY7pPG686CJ0dlqH0810AV6oOQUREgyoF8ET8H66UJliG0oju0y4C8B+qcxAR0RldCuAHqkPQ8HHNUJrQfVo2gO0ApqvOQkREQ5IArtPq9GdVB6GhcWQoffwYLEJEROlCAHhY92lTVAehoXFkKA3oPu0KAKsQ+4+LiIjSxxsAlmt1uqE6CJ0eR4ZSnO7TCgA8CBYhIqJ0tBTA11SHoDNjGUp9vwIwSXUIIiI6Z3fqPm2m6hB0eixDKUz3ae8GcKvqHEREdF7cAO7XfRpH+FMUy1CK0n1aMYA/qM5BREQjYhmAT6sOQYNjGUpdvwdQojoEERGNmP/i3WWpiWUoBek+7UMAblSdg4iIRlQugHtVh6B/xVvrU4zu0yYC2AmgUHUWIiJKiFu1Ov0R1SHoBI4MpZ77wSJERDSa/Vz3aVwGkUJYhlKI7tM+AeBq1TmIiCihxgL4teoQdAKnyVKE7tPGAdgHjgoREWWK92h1+pOqQxBHhlLJD8AiRESUSX4bP2WAFGMZSgG6T6sE8DHVOYiIKKkmAPip6hDEMpQqfgn+WRARZaKP6j7tctUhMh2/ASum+7SbAKxQnYOIiJT5ve7TnKpDZDKWIYV0n+YB8BPVOYiISKkZAD6hOkQmYxlS66sAylSHICIi5e7UfVqe6hCZimVIEd2nTQLwDdU5iIgoJRQD+LrqEJmKZUidHwPIVh2CiIhSxhd1nzZBdYhMxDKkgO7TlgG4RXUOIiJKKdkAvqc6RCbiDtRJpvs0AWATgIWqsxARUcoxAVRqdfou1UEyCUeGku82sAgREdHg7ADuVh0i07AMJZHu0/IB/Eh1DiIiSmnv1H3aymReUAgxVwghT/nxayHE80IIK/55lxBiVN4BzTKUXP8JoFR1CCIiSnk/ji+rSJbi+Me6kx4bF//4cwCrATQA+EsSMyUNy1CS6D6tBMBnVOcgIqK0sBjA+5N4vbnxj8cLmASQBaAcJ85PewbArCRmShqWoeT5EngrPRERDd+PdJ/mStK1DsY/zox/FAAOASiVUh6KP3YZYmuaRh2WoSTQfVoRgE+pzkFERGmlHMAnk3QtX/zj4ZMeu/Gkn09B7E63SJLyJBXLUHJ8DgC3WSciorP1Ld2nFSThOpcgNjXmOemxcQCOCCE+B2AsYmuHjiYhS9KxDCWY7tNyEStDREREZ2scYudYJtq9AEIAGk967CCAHYjd/LMTwJUAnkxClqRjGUq8TwEYozoEERGlrc/Et2ZJpAhiC6bnn/RYO4BLAZQAuBjApwF8MME5lOAO1Amk+7QsxG5F5O30RER0Pr6u1ek/Vh1itOLIUGJ9FCxCRER0/r6g+zS36hCjFctQgsRvh0zGPC8REY1+4wHcqjrEaMUylDi3ApisOgQREY0aX9V9Gr9vJwB/UxNA92l2AN9QnYOIiEaVGXj73j80QliGEuMWABWqQxAR0egigc+qzjAasQyNsPjBev+hOgcREY0elkBD7fTs//vqR3Ltcx+au0J1ntHGoTrAKHQjRulBdkRElFwht/2NFxdmH/r7onBlOCfynvjDX0TsFHkaIdxnaITpPu0NAEtU5yAiovQkgYH2Me71j17mMd+YNnCpdCLnlKdYAC7wV/vrVeQbjTgyNIJ0n7YQLEJERHQOLIFGf3n29odW2IpbSkNXAQOne6oNwOfBo55GTNqODAkhHgDwLgBHpZRzTvnaVwD8BECxlLIjWZl0n/ZHxDZaJCIiGpawy/7m81VZh/6xJDwvnCOnDfNl/QAm+av9vYnMlinSeWToTwB+A+Dhkx8UQkxG7DC5g8kMEz835pZkXpOIiNKTBAbai9zrHr3Mbb1RPrBCOkNnO6uQC+A2AL9IQLyMk7ZlSEq5RggxdZAv/RzA15D8k3U/DPzLvC4REdFbLIEmf3n29j+tFONaS8JXAwEA4lzf7nawDI2ItC1DgxFCXA+gVUq5XYhz/st1ru5I9gWJiCg9hF32TS9WZbX9bUm4MpwTuX6E3nbO3IfmLvVX+98YoffLWKOmDAkhsgH8J4Crkn1t3actBzBnyCcSEVHGkEAgNhXmMt8oD6yQztDiBFzmowBYhs7TqClDiO34PA3A8VGhSQC2CiGWSCkPJ/LCYVf+re7IsURegoiI0oQEDu6oyK59eAWKm0sjVwFBnMdU2FA+MPehuV/wV/tPe+sZDS1t7yYDgPiaoWdOvZss/rVGAIsSfTfZPXe8WggpW53Rvropza8EJ7WurrJb0axEXpOIiFJP2GXb9EJVdtvfloTmR3JQlsRL3+6v9j+QxOuNOmk3MiSEiABwxj89DGCcECKKt/9a+gF0JinSv0OI7Kgrv6q+4gbUl7/nWF5/8+ZpDc/kj+vaVZmkDEREpIAEAh1FrvWPXOYx43eFJWIqbCi3A2AZOg9pNzIkhPgrgKMAPi2lFPHHWgFIxKbKHkdsRGhKMvLcc8erWwEsGDSrZTQVd2xvKG94anp2sGNSMvIQEVHiSeCgvzxr+0OXiZLmkshS1XkAzPJX+3XVIdJV2o0MSSnfL4T45CkPFwB4HUAEwAoAG5KR5Z47Xp2H0xQhAJA2R9nRkoVlR4urpDM6UDup9bX+yS2vzneY4dxk5CMiopEVcto2v7gwu/XvS0ILwjnR61TnOcntAL6iOkS6SruRIQCIl6HfnjQy1A5gLE6sUPuglPLxROe4545Xf4Kz/csn5UDOQNu2aY3P5hZ3bK8UCVxVR0RE508CwfYi57o/r/TI1ysCl0inSMV1oe0AJvqr/VHVQdLRaClDXYiNDDUhtvv0VABOmcBf3D13vGoD0Axgwrm+h7DMlrGd/vqKA09NzQkeSeZiOyIiGoIEmndO89Q+eLmtpCU1psKG8j5/tf8fqkOko7SbJjuNPAA/A/AYgHcD2AhgHGJNOVEux3kUIQCQNvukjuL5kzqK58MRDfgnta7umdL8cqXDDOWPUEYiIjpLYadty4tVnta/Lg3Pj+QYqTQVNpSbAbAMnYPRMjJ0BMAOAC4ALYidEWZP8MjQA4idCzOypAxmB45sm9b4nLukfesCAWkb8WsQEdHbSCDYUehc/8hKt/XG9GCqToUNJQCg2F/tD6gOkm7SrgwJIQwA9pMe2g+gAcAViK2/MQF8U0r540RluOeOV90AjiC2cDtxpHVobNeuPRUHnpqSO9BWntBrERFlIAm0+Kd5tv3pMlHSUhpNh6mwodzkr/b/XXWIdJN202RSylTI/G9IdBECAGEb3zl27vjOsXNhN4K7Jrat6yw7uGqe0wgUJvzaRESjWNhp27qqytPyxNLIgmh6TYUN5X0AWIbOUtqNDKWCe+549VEA/67k4lKGs4LtW6c2veDwHnmzSkDah34RERFJINRR4Fz355UOc8MFkRVwCI/qTAnQD6DEX+0Pqg6STliGztI9d7zqQmxhtvpFztI6WtS9R6848OSE/P7mGarjEBGlIgm0+qd5tj14mShuHR1TYUO50V/t/1/VIdJJKkw5pZVVCxwXzm8Y2F/c7aoUQqgdlRG2ku4xWsnmMRrsZlgff2hD+9SmF2a7ov1jleYiIkoBYadt64tV7pa/XBipimYb71KdJ4neB4Bl6CxwZOgseWtq/wDgY3bLOjClPXhgyb4BT3kLKh3Ckac6GwBAyqgn1LW17OCLYvzhjQts0nIO/SIiotFBAuHOAue6R1c6zQ0zw5fCPiqnwobSh9hdZWHVQdIFy9BZ8NbUCgBtALxv+4KUncV94Z1VBwbMyvroTLfhmqgk4Kmk1VHYu393+YGnSgqPNfhUxyEiShQJtO2c6t76wOUobS01VRyWmmre7a/2P6U6RLpgGToL3prapYjtdH16UoZzw8b22c2BniV7AhMLB9yzk5PuzGxmZJ/3yBtt0xqfm+WOHCtWnYeIaCREnLZtL1a5Wx67MLLAzBY8EPuER/3V/g+rDpEuWIbOgrem9kcA/uMsXiKdhqlXHAm2LN0zUDDpqH2BTdhcico3vETScId7tpU1rzImtG2osknDrTQPEdFZik2FOdb9eaXTWj8zcinsgv8f+1e9AMb5q/2G6iDpgGXoLHhrancBmHWurxdStkzoCu1dvL/fMbPJmuOSzjEjGO/sSdldcOyAv7zh6XFFPfvO+ddFRJQMEji0c6p76/2Xo7it1FyiOk8aWO6v9q9XHSIdsAwNk7emtgKx3a5HhpTHigJRf2XjQLBqb6g8J+JWusO0zYrWlx7Z3Dyt8RmfJ9zjHfoVRETJEXHYal+scjX/+aJIlZVtS401menhe/5q/3dUh0gHLEPD5K2p/RJih8GOPCmNrKjpn9ka6LhwT6BkXI9zrhBCzZlkUpquyLFtU5pfjkxsW1Nlt4xMvBODiBSTQLijwLH+zysd1oaZ0Us4FXZONvqr/RerDpEOWIaGyVtT+wpiJ9UnnN2y9pe1hxqX7B3IntaK+Q5hz07Gdf+FlL15fQd3lDc8XTi2W5+rJAMRZRQJHNo11bX1vstR0lZq8a6w82MCGOuv9veqDpLqWIaGwVtT60RsMVryTzGWsr3kWHh3VX3AmncgqrlNp5IpLGEZjSXt2xrLG56ekRXq5DA1EY2oiENsX1Xlbv7zhZEqM8c2QXWeUYS7UQ8Dy9AweGtqLwSwUXUOSBnKCxnbZx8MHFu8NzS5MOBM/t5BUkpntL92cktNYHJLzQK7FVEzakVEaU8Cka58x/qHLrPL12cayzgVlhC/91f7P6k6RKpjGRoGb03t1wDcrTrHKaTLMHdPPxxsXbonOHZiu61SCJHc41Wk7M/tb62d1vhM7rhOf6UARFKvT0RpSQKHdpW5tvzhCow/XGItVJ1nlKv3V/unJ/oiQojJAB5GbFNiC8AfpJS/TPR1RwrL0DB4a2qfBpDS59oISzZP6g7tW7RvwDmzyZznhLMgudc3m8d1bK+vaHi6PDt4dEoyr01E6SHiENvjGyRWmTm28arzZJAKf7X/QCIvIIQYD2C8lHKrECIPwBYA75FS7k7kdUcKy9AQ4kdwdAIoUp1l2KTsHTMQ8Vc2BMJV+8MzsiOu5JUTKaXDCPgntb7WO6X5lfkOM5waZ7YRkRKxqTD7hkdXOqz1PmM57ELtxrOZ6ZP+av/vk3lBIcSTAH4jpXwpmdc9VyxDQ/DW1M4FsEN1jnMWu21/h9YS7FyyJzC++JhzNpI1nSVlICdwaNu0xueyittr5wtINdsFEFHSSeDw7jLnlvsuh7fVKzkVptY//dX+9ybrYkKIqQDWAJgjpTyWrOueD5ahIXhraj8F4B7VOUaK3bT2TW0PNS7ZM5A37RDm24U9OfsISbNtXOeuveUHnirLDRyalpRrElHSRRxix4tVrubHL4xWGZwKSxXdiN1in/Bv+EKIXACrAfxQSvnPRF9vpLAMDcFbU/s4gJtV50gIKY+W9EZ2L6wPYM6ByGyP5UzKAa4OI+Cf2Lq2Z8rBl+Y5zWBS1zYR0ciTkNGufMeGh1c6rI2asQw2ToWloNn+an9C1+8IIZwAngHwopTyfxJ5rZHGMjQEb01tC4DRv6+OlMG8kLF9blOgf9HeYFlB0DUjCdcMZQePbpva+Jyz9OiWBQLSnvBrEtGIkcCR3VOcW/5wBbyHSmWV6jx0Rh/1V/vvT9SbCyEEgIcAdEkpv5Co6yQKy9AZeGtqywHUq86hgHRFzZ0zDoUOL947MHZSh71SCJHYoiKtI2O69LqKhqcm5fW3VCT0WkR0XqJ24V+1wNn86MWRKjPHwbMM08MD/mr/7Yl6cyHEcgBrAfgRu7UeAL4ppXwuUdccSSxDZ+Ctqa0G8CfVOVSzWfLgxK7w/kV7A+6ZzWalE/bcRF7PboR2Tzi0oWNq0wtzncZA+tzFRzS6RTvz7RsfXWE31s82l0NwKizN6P5q/yzVIVIVy9AZeGtq7wOQsCadlqTsGTMQ3Tn/QDCyYF94ZrbhSNwUopQRT6hj69SmF2zeI29W2aSV3E0liQgSOKpPcWy+9wqMP1SKBarz0DmTiC2i7lYdJBWxDJ2Bt6Z2D4ALVOdIWVJGsyOm39cS7Fy6JzBhXJ9zduKuZbUX9ezbXXHgyfH5fU38MyFKsKhd7FxV5Tz45wsjC41cR6nqPDQirvZX+1epDpGKWIZOw1tTWwrgsOoc6cRhWnunHg01L9kTKJh6GPPswpaQYXSbGd4z/vDrh6c1Pj/bFe0bl4hrEGUiCUS7YlNh1vo51jIATtWZaER9y1/t/6HqEKmIZeg0vDW17wXwd9U50pWQ8khpT0Svqg/Y5jRE57gtx5gRv4iUUXe4e1vZwVVywqENC2zS5BoGonMQmwqzb/7DOzChzSvmq85DCfN//mr/DapDpCKWodPw1tTeDeBrqnOMClIG8oPGjrlNwYGFe4PlBSHnyG+6KGVXQW+9v6Lh6ZLC3v3aiL8/0SgUtWMqK6fuAAAgAElEQVTXiwscTY9dZHAqLDO0+qv9k1SHSEUsQ6fhral9CsB1qnOMQpY7au6a0RY6smTvwLiJXY55AEb0mA6bGdlfemRTa3njs5o70lsyku9NNAoYnXm22F1hc6zliG2UR5ljgr/af0h1iFTDMnQa3prafQCmq84x2tks2TSpM1y/eG/AM6PFnO+EPXvE3lxK0xXp3VbW/HJ0YuvaKps03CP23kRpRgIddZMdm353pZxwuFRUqs5Dylznr/Y/ozpEqmEZGoS3ptYNYAAAd0ROJim7x/ZHd86vD5rz68NatjGCw/ZS9ub3Ne4oP/B00ZiePXNG7H2JUlzULnatmm9venSZscjMcXCklL7mr/b/RHWIVMMyNIi0P6l+NJAymh02d2jNoe6le4KTxw7YZ47UWwsr2lB6dGvTtIZnZmaFu3iQJI1GRmee7fVHVtiiG+ZiOXhXGJ3woL/a/xHVIVINy9AgvDW1NwH4q+ocdILDtPaUHw63LN47UDj1iKi0CXH+GzBKaTmjfbVTml8JTmpdXWW3olkjEJVIGQl07J5s3/L7KzD+iFfMU52HUtLr/mr/RapDpBqWoUF4a2rvBPBd1TlocELKw6U9UX3RvgHnrEZjrlvaC877TaU8ltffvH1awzP547p2cT0FpRXDjt0vznc0PbrcXGRm24tV56GU1uuv9heqDpFqWIYG4a2pfRzAzapz0DBIOVAQMP1zG4PBhftCFflh+5TzfUthGU3FHdsbyhuemp4d7OBtqJSqzK4824ZHLxXmunliOQAeV0PDNdFf7W9THSKVsAwNwltTWwuAowPpx3JHzZ0XtIbal+wJlEzosc8BIM753aSUzujA9kmtr/VPbnl1vsMMJ/SAWqLhkEDn7sm2LfdegfGHvba5qvNQWrrCX+1/RXWIVMIydApvTa0NsTvJPKqz0PmxWbJhSke4YdHeYPaMVnO+A7Zz/zOVciBnoG3btMZnc4s7tleK8ylZROfAsGH3qgWOxkeWm4s5FUbn6bP+av9vVIdIJSxDp/DW1JYDqFedg0aYlF3jjhm7FhwIyMr66Kws03bOZ5oJy2wZ2+mvrzjw1NSc4JGykYxJdAqzK1dsfHSFiK6bZ7sEnAqjkfFbf7X/06pDpBKWoVN4a2rfCYAbUo1mUkZywuaOWQdDvYv3hMrGBmznvLmmIxrwT2pd3TOl+eVKhxnKH8mYlLkk0LV7sm3Lve+Q4w+Pt3NfLBppNf5q/+WqQ6QSlqFTeGtqvwzgp6pzUPI4DKuu4nC4dfHewJhp7WIezmWzTSmD2YEj26Y1Pucuad+6QECO6BEjlBkMG+pWzbc3PHqJXGxkn/voJdEQDvur/dxj7SQsQ6fw1tTeB+B21TlIDSFl2/iuyN6F+4OOWU3R+S5pP/tF09I6NLZr156KA09NyR1oK09ATBpdzK5c8fojK4Sxfp5tGTgVRslR4K/2H1MdIlWwDJ3CW1O7HsDFqnNQCpCyvzBg+uc1BENV+8K+vIjtrP8lZTeCuya2ressO7hqntMIcG8PeosEuvXJti2/u8Iaf8TrmK06D2WcOf5q/y7VIVIFy9ApvDW1XQCKVOeglGN6IubOC1rDHRfuCUwo7bVpZ/VqKcNZwfatU5tecHiPvFklIHnuXYaKTYXZGh6/VC4OZ9k5FUaqXO2v9q9SHSJVsAydxFtTWwCgR3UOSn02Sx4oaw83LtobzJ3RZs23Q7iG/WJpHS3q3qNXHHhyQn5/84wExqTUYXXniI0PrYS5YZ59GXgINKl3u7/a/4DqEKmCc9Nvx707aFgsmyhvKPWUN5R6ACk7i48ZuxfUBzHvQGROlmk788iisJV0j9FKNo/RYDfD+vhDG9qnNr0w2xXtH5uk+JQkEujWJ4ktv79CTjw83r5MdR6ik0xUHSCVcGToJN6a2osAbFCdg9KYlOHckLVj9sFg3+I94fKioJg6zNdFPaGurWUHXxTjD29cYJMWTxlPY4YNe1ZV2hofW4FFkSwbSy6lonv91f47VIdIFSxDJ/HW1F4P4EnVOWj0cBqWXnEo3LZkT7C4rBNzAAx9y720Ogp79+8uP/BUSeGxBl/iU9IIsbpzxOsPr4CxvpJTYZTynvVX+9+lOkSqYBk6ibem9nYA96nOQaOTkLJ1Qmd0/6J9QdesFrPSYSF7qNfYzMg+75E32qY1PjfLHTnGadwUJIEefZLYdO+VmHzIa2d5pXRR66/2L1AdIlWwDJ3EW1P7DQD/pToHZQAp+woHTH9lQyhStS+k5UZtpUM833CHe7aVNa8yJrRtqLJJw52kpHQahg37VlWKA4+vFIvCHk6FUdpp91f7S1SHSBUsQyfx1tT+DMCXVOegDCOl6YlYfl9rpHNJXXBKaR/OfIeZlN0Fxw74yxueHlfUs29WklJSjNWTg9cfWgFrfaXjInAqjNKXBJDlr/aHVQdJBSxDJ/HW1D4M4MOqc1Bms5uyvuxo+ODivaGCGYeteeIMd33arGh96ZHNzdMan/F5wj3eZObMJBLorZsoNv3+KjH5kNc2U3UeohFS7q/2N6gOkQpYhk7iral9HsA1qnMQvUXKjpJeQ6/aHxJzG8NzPaat4DTPM12RY9umNL8cmdi2pspuGZ4kJx2VDBv2r6oUDY9fblsYdokxqvMQjbDl/mr/etUhUgHL0Em8NbWbASxUnYNoUFKGckOWf05jqH/RvtCMoqCYdJrn9eb1HdxR3vB04dhufW6SU44GVncO3nhohbA2VNovBKfCaPS6zl/tf0Z1iFTAMnQSb01tE4ApqnMQDYN0Gtbu6W2RI0v2BEqndGEWAHHqk4RlNJa0b2sqb3h6elaok5usnUF8KmzzvVeLSW2lnAqjjPBBf7X/cdUhUgHL0Em8NbUBAFmqcxCdLWHJlomd0f2L9gWyZ7VY8+wSb58mk1I6o/21k1teDUxueW2B3YoMeVt/pjBs2P9SpWh8/DLbwpBb8FxCyiR3+Kv996oOkQpYhuK8NbXZAAZU5yA6b1IeK+o3d84/EDKq6iOzsqMYd8rX+3P7W2unNT6TO67TXykGGVHKALInG288vBLWunn2pRCCU2GUib7qr/b/VHWIVMAyFOetqS0D0Kg6B9GIktLwROROrTncvWRPsKykH+Unf1lYZvO4ju31FQ1Pl2cHj476KWIJHKubiM1//DfbpJZi2wWq8xAp9n1/tf9O1SFSAQ9qPYG7+9LoI4Qj5Bbzt03PwrbpWbCbsn7qkUjTkr3BMRVHrLmw2Se3l1RNbi9eIB1GYMek1td6pzS/Mt9hhvNURx9Jhg0HXqoUDY9fZqsKucXlqvMQpYh81QFSBcvQCSxDNOqZdlFRP8FdUT/BDUjZXtJj6Av3h5zzmqJzIXLmNU59JxrLrg3kBA6tn9b4XFZxe+18ATn0eWqpSXbnYNOjK4S5dp5tKYQoH/olRBllVP2j53ywDJ1QqDoAUVIJUXy0yFn8/GInnl8kQ3lB6825jeHg4v3hCyAmLNs5+6OANNvGde7aW37gqbLcwKFpqiMPhwSO1U3Clj9eY5/UUiyWqM5DlMI4MhTHMnSCS3UAImWE8PRl25dsmJWNDbOypStq7ZrRFjm6ZE9oPMS8lR3j5sFhBPwTW9f2TDn40jynGRx880eFDBsaXpovGp5YaasKusVlqvMQpQGWoTiWoROcqgMQpQgRcdpm7yrzzN5V5oHNks0TO436xXudeWHn1UubplxlZQePbpza+Jyz9OiWBQJS5Z1YsjsHmx+9zGatnSMWQ4i0GL0iShGcJotLiTIkhHgAwLsAHJVSzok/Vgng9wByEbvL69+llMcSGCMlfi+IUo1lE5Obi52Tm4udgJS9Y/qsXfMPeGRVwUemZ0WqO8Z06XUVDU9NyutvqUhWJgn07YlPhTUXi8XJui7RKMORobiUuLVeCHEpgH4AD59UhjYB+IqUcrUQ4iMApkkpv52oDN6a2s8C+FWi3p9o1JHSyApL/6zmcO/SveFpJT2BgQmHNnRMbXphrtMYSMjmhYYNjfGpsAVBt+A6P6Lzs89f7U/YFhPxgY4bEdvMuBnAfVLK/07U9c5HSpQhABBCTAXwzEll6BiAAimlFEJMBvCilHJWoq7vran9EoCfJer9iUY7hyn3TzscbVm8N1Awu/FIcOrBFxzeI29W2aR1vqOusicHWx69zGauiU2FpevdbUSppt5f7Z+eqDcXQqwE8DJOnO8XBTAfwH0ALsSJDV+7pZRKD0JO5amhnQCuB/AkgJsATE7w9VL594Io5Rl2MX3fRNf0fRNdELLgaGl3xZ6F+6vXXrp9p+Xb98zk/L6ms/oXqAT690wUW+67xjbpYIlYlKjcRBks0ev9botfYw+AxQCOAfgpgEoA9QDmANgAIGGFbLhSuQB8BMCvhBB3AngKQCTB1+MCaqIRIoUoOTzGUfLskkI8u3hZMD9wkb+yvuO569eudc3bs2q+K9o37nSvNWxoemW+aHhshW1B0CNWJDM3UYZJ9CjrcgAWAENK2SeEGACwEoAHwBOIfV8vT0KOIaVsGZJS1gG4CgCEEBcAeGeCL8mziYgSQYisYzn2JWvnlWLt3PdKd/TGXXPrmzbd9MpzhYt2b1hok5YLsbvCtj6+0maunisWSSHKVMcmygCJLiFbECs72UKI6QByAJgAQgC+BOAbiH3vDSU4x5BStgwJIUqklEdFbH3AtxC7syyRUmPxFNFoJoQIu8Sczdq0OZu1T2P64Ws3vP+1p5rGHN3ibJ8QzZ7ikNaHDuCFqLSJkOUUEdOBiOmwmabdZpl2G4Y+VFaO0H/K0hrm8bUiHkme/rpSDBL7lOcP+pzB3gtCnPGJsd8AceKzQd9XStugb3Pi+WfxuyjlmSMdf8uhQlmQp/3mfOI14rSvP+X5Q64tk8P4s4MEBv29ettrxIm/B2dgDfWHHPuFiZM+H/yXKiCtwb7wtueLof9OWbB6hwp9nn6O2J3i0wDsA2Ag9ssMx38eANANYIYQQkiFi5hTogwJIR5HbOhsnBCiBcB3AOQKIT4df8o/ATyY4BhWgt+fKOM5jGhk+fbN/qqu/YfGlu0x/+68OOxyvXPW2IqWlkmvDThL+rvfIWAJhyfa4crvP+opjPa6C6MRV75pc2QZbtNhyw4Le07UsiNkOoIhyxkJGo5IwHRGw6bTDJoOGTIdCFsOETYdtohltxuW3WlIm9uUwmNKkSUhcgDkAoIbrVKma03w+28C0AEgCGBu/OMRxI6/ugbAYwBuB7AGwDgA7QnOc1opUYaklLec5ku/TGaMJF6LKGOM6+46ct26V/Ze6N9tZs+IBHBlc8FrhfMLHvHc3nvZvvY8Mzqm8h1jt+Nn77/lYPa6nicvqa+dnhWKzDVC9uLAUfeg72l3m+2ufCOYVxgNjisIRlwFhnDlGR67WxYJmxwvxNCbyRmWCIUMe3/YcgwETUcwbDnDIdMRCZnOaNB0GkHTYYZMJ8KmAyHLbotaDnvEsjsNy+Y0pc1jSuGRENkSyAFELoYerSBKNYn+vvcIgLEAshEbDQJiN0S9COAZxKbMno9/7EhwljNKiTKUIjgyRDQSpLQW7Nm1+91rXupYtHt7yUBBRTB4TbjH/pX6in7pKvntxtu2N82tRH7/X9wXHHn/hQBwyKo48o3+P1178w13vxR5wdVadLSn6aJDOy+yxf5H+i/MsL042G4vDrYPXpaEy+p05UePZBUaPe4CI+wqiMKVY2Y53FahsEuvECh02KQn12V4cmGcdjH3cFkWzLBl7wubjoGwZQ8GTGcwbDrCx4tVyHSYQdNpxUesELbs9qhld0TfGrWyuS0psuLFKg88HoiSI9Hf934I4OaTPm8HcBTALgDHzw2MAvi0yikygGXoZCxDROcoJxjovfL1Nbvftf5Vc1pby8yoM7+kRVt6+PDnJzR7yrYvcAq5sKZ52esv7VwR6Fg+3W3J1eK6HcukiH3jxz5zqbPMudv+eP03LrnkpofefOdLr7j/mlu8tap9n3NGT8ul4iwXesqIbWy4wz023DF4WZJOs8uVZx72FEZ7PEVGyJ1vwJ1reOxuq9AWK0tnteeJzQZ7ls0szHKYI7IRZNgUA2HT3h+xHIFgbDowFDKdkZDhjMZHrKyQ5UCsWDnskXi5MqTNZVixYmVBZIOjVnRm0QS/vwbgfinlRwFACPFtADcgNhr0NynlTxN8/WFjGTqBZYjoLJS3NNXf8NqLzcu3by4o6O+bA4ilR0oXbd39b4u2ZC9fl+MpeOYSIeDuj+R0//emz6/3dIVsR670wbAfLZ21p3ZgbGBZ5fH3aggvKpPOB/tsDpn36qaPaIuv/UvDnD17nFX/3Ov+WdXNr35yx/96c4zwnJHKLqL2MdEu+5holwt9g3xdOqwuR170iLvQ6MkqMoOe/Kh055oeh8fMj5el4pHKMhi3Xea47UZObI3p+YmaiESkoy9i2gMh0xEImY5QbK2VMxK0HEbYdJqh2ForEbYcIhybEnRGY9OBp45a5QIYvGFSOkr0ljU7AfxQCDEWsfVC1wLYDKATwGeEELfGP/+ylLI7wVnOiGXoBJYhojNwRqPh5bVv7nj3mpcHZjfsm+YwzQoAFUHPmLZds6rXmUs7zKJ5q8aNca+/5vhr1rUuefNPuz5YtiC4I7jp2ivGGw6rbGzL945cs+f7doETt+hE+ieUhwudr3uM6IXuLMO7evWHe5e846+BhgmTc++5+1tZv51748FJ/Udfu2lfzdzTTZ2NJGHYxpjd7jGBbjcCDf/6dcsuexx50UPuwmh3VpEZzMo34Moz3E63mWdzyFIhUIoUGY1x2uFywhib4zDGnli2cW4kYIVNW1/YdPSFTUcgZNpDoRNrrYxgrFhZIdMpw1ZsOjA+auU0LJsrXqw8p4xaKd9jJoOd31+IIUgpdSHE3QBeQuzIre2INfzfAfg+YmuWvo/Y6Q8fSWSWobAMnZDo4UKitFPc1dl23dqX9l/15jp3SVfnHBHbRRaWsBlt4y9+o3n68kju4jVGUfkDFcJmTjn+ukA0q/fHmz/rbz02fsmK0Pqal6573wzT7igvavvqhvltl8JtZl986rXa7GWd5cZ+AEBRfmBmzfPVm5Zd93j4/f/12/F/+t5XezpseXkfu+LrDV/d8tiumd3Ny8926mwk2UxRaPW4CoM9LgQb//Xrhs3qdeUZbe5Coyer0Ax4Cg24cg2n02Pm2x1WiRDwIg1LgABsHruV57FH8kZiUCFqIhS2nP1h0z4QsmKjVvG1VmbQdBpByxEftXIiYjlExLTbI9LuMCyb05A2tyVtHo5anZeE7+8jpbwfwP0AIIT4EYAWKeWR418XQvwRscXUSrEMndCjOgCRasKyrKo6/873rH6pc2Gdf3xWJDITwITjXw9kFTfvr7ixvn9qfkHJ4r+GJo37QdWpd269eahq8x/9H57oMiPaFcbaNU9ff8s8abONz+l+dLUn3Ll4adN1g+5tss82z1GO/W99Pmlc5+Jn//7xV695//1Z7/+vexb85Fc/WnfvKz+56EdLPry+35G18643HnRkG+GEnVd4PhyWrcDqdRUEe10INv3r1w0hjzlzjUPuQqPLM8YcyCqIwp1rOB1ZZp7dYZXYBMYjAzaCddrhcdqjnlxn9LwXsZsSZsS09YQtx0Bs1MoRCFnOaMhwRIKm0wjFipUVspwyHJsStEVMu92Qx0ethOfEqNXx7RfSr7CepYSXISHETgDH/zuNABgfP4h9LmJ/xx2InV+mFMvQCV2qAxCpkDPQ33PNxtW73rmhxio73KbZpJx38tctYY+0TrhkS2PZ1S7PtL2yZMGjWWOzuiuFePs3ipDh7vvp5s/UNhwru2RsuGN/lXP3nqeu++BCCFHkDO3emdX34kWX7//IRhtsgx6x0dpf5ZX2fx4WgPf4Y3MmNl7+50e/9Pwtt/7C8+UvfGvFrc/+Y+23n3noYv/Y8n23XHOn44N7Xl57076a2Tac3YJn1RxS5Ms+Z36oz4lQ87/+SywqrD5Hnmxz5xudWWOMoKcgKj15htPpMXPtTmucEHKC4BFCb2MXsGc5rMIsRApHYtQqZIiBqHT0RwzHQMhyBEOmPRK0HOGg6YqGTYcRX8Qug6YTEctui5gOe9Sy26MyNh1oSuGRsVGr7Piolef8f5UjLpDINxdCfA7AbMQ2XAwhtqD6egADABoBTETstvuJicwxHClzar1q3praixA7MI5o1JvedGDfe1avalm+Y3Nh/sDAXDHIP4z6s8c37J9+48HuceXlY2e90DDmglVemyM66GGrW4/M2/a7HbeNs6R98vT+/ZsnjukMvrjyhoUQIluYfV1jWz8TLAgVyVu2fXusgMgaNJTNCFWX3bIpN2hccvLDUkL+34FLXvjkbd+/CEIULtq9Y8fdv/nv8Yaw59554e2vN+R753zv9fv1C3palE6dJVMU1oAjD62xshQdcBcYsbKUZeQ4TpQlThmlCEMiEjbtfRHTMRAbsXKEw6YjEjSd4ZDlMIKm0wqbTitkOhA2HSJi2W1vrbWSNpclhduUtiwJZMWL1UiNWv31y3955gMj8D6DEkI8DeASKWVh/PN6ABEppSaE+Dti64XWAzgspVR6WCvLUJy3pnYmgDrVOYgSwRmNBldseX3n9WtfHtAa6yscljl5sOeZNkeoZeJlW5qmXJmL/HBxadVje3In7JgnhBx00XLYdA78z5ZPbd7fU34pIMQlneteC5UX2dYuvfIiCOGElHJM2+c2282exTdv+8+NhaGSi86U86pZn316RlfLdac+bhkIPtTyzjX/cetXL4EQ2d6Oo20PfP9rvVmRsPZmqW/b95beNmZWV2P/XRvvF9lmJCWnzpLJgAyIHNHqKYx2eIqiAU+BYXnyog5XlpnrcJpFwiYnCmDwUkopTQJWxBQDYdPRHzYd/UHLEYmYjlDQcoZji9jj5Sq29YKMmA5b+MTWC/E7BEWWJUUWgCe//JdnP5eorEKITyB2lNZiAIcBNCE2C3M7YsdsjUdsVOhrqm+zZxmK89bUFiO2GRTRqFDScbT13Wte2n/F5g2e4u6uOSJ2SOKgjuVO3rd/+nvbegqmV2aX7G0uXfjoMVfe4SVCnH4qZke7tuM3tR8rMKWjTEjLuPHQk+t3LV5k1c5euvL4+Vl57fe85gm+vnJK9+zt19Z9vPJ073VcxYLfPH/NoVf+bbCvGUFb+y97bt7+kw98fCWEcLjD4cB9P/pG7aSjhy8O2l39/7Hs45v3Fk255Lbdz65/377VcwVQNJzfp0xkAkGZjVZPYbTDXWQMZBVGzay8qN0ZL0s2m5wgYqMPNLr9HHf1fimRFxBCrANwMWJ3bB9D7GalRsQOYv8MYsdv/UJK+bVE5hgKy1Cct6bWjtgfUkrcDkt0toRlmYt27/C/Z/Wqrqo9uyZ4ohHfmZ5v2lwDTVOu2No86fIi0+maWTT9lTfHzX4m3+4Kzj3T6yKmI/SrbZ94Xe+64FJA2FxmuOdDrY/vf+Gq9/YdKPNddvx5rsCmrfkdv6oUUojb37x7n9Nyzxzq15A7dc3rHwr/vNguUTHY10PdjvrvOz7WeP87P3B5vHDJb93/q9cu37xxpQDEmgmVm+5e9O8Tc6MB9/c3/nH3jJ7W5YL/TZ81EwgZOfYWT0G0I6swGsgqiBqe/KjNlWXkOl1mkc1mjRdAvuqcdN7uwl29303WxYQQzYjtQj0Jsf8u8xCborcATJFSHk5Wln/JxjJ0gremtgdAgeocRMOV29/X9W8ba3Zfu2E1phxu04azB09PQUXd/oobjh7Lmzrf7h4wiiv/ur2g7I2ZwmZNGOq1eueMXb/Yeke2IZ3TAKAo0t30/kN/Dz9xw8cOHymeeOnx59mMrsNj2r5gF5DFSw6+c21V61WXnP5dT7C5+ttvnnbbrqJeY+XpntPb4tn2tUlf6npyxdXvOP7YdWte2vjFxx+YK4Dcfqen56vLP72jsWD8pZXt+3Z+5/UH7VlmRBvO9Wl4TCBs5DhaXYXRo9l5kWBWUTTiyY/a3FlGjsNlFtltlpcjc2nhC7irN6FngAohlksp1wkh3g3gfwHMB7AIwFcArEBsecp6KeX1icwxFJahk3hrag8AmKY6B9GZXNCwf88Nq19sXebfOiY3EJgz2OLnUxl2z7HGsmtqWydeWmza3Zqr8OC+8QsfafOMaVwsBLKHfL1lD/+m9qMb/R2zLgGEHQCmBhq2Xd3xcumDH/j8wWP5RRe+9WRpGmNbPr3LJgcqXUZW722bfhQVsA371umVSz72/OyDHYNOlR3XsSt33ceXfTeyoXLR5ccfm9lYv/c3P7kzy2FZkwHghbIlG341/33TAYy7fdcza2/cv6ZSACNyXAadmQVEojmOFld+9KinIBrMLoxGPPlR4c4ycpwus9BuN0tF7JRyUus23NX7p0ReQAhh4MRi7z9IKe8QQvQjtsDfiH/8m5QyYQu5h4Nl6CTemtrNABaqzkF0Mlc0Eli5acOO69a9EtKaDlTY49/sh6OryOffX/6e3v7cSQsgkJ03ZeObpfP/bnd4+hZimNNH+7rL9Z9t+ZQjarlmHH9sSdebqyuDO2f/8YNfbgl5suef/PyCI3e/5grvXAkA79r9qdWTemcOeiv96ZRf+oOXrtm75bKhSl7LuqLXPvzBnwp92vS33r+wr7fjT9/9SkvBQP98AOh15XR88dLP7jmUO25ZQbi/4wcb/qBX9LZx6kwxCyIayXK0uAqinZ78SH/2GCPkyYsKd3Y0x+kyCxyxslSiOmcGuB539T6tOkQqYBk6ibemdhWAK1XnIPIePXzw3Wtfqn/H5o3Z43q65woMPXpzXNSR031g6rU7Do2/eIJld80Q9lDfuDlPbhkzvWaKsJvlw30fw7JF793x/9ZvPVq5HBCxYiKl9e7DT68eYzs264+3fLHbcLreti7J0/fq63ndDy4FIH0zg4AAACAASURBVMYMjG+4acfXJwmIs9oPZ8ysJ19737GHxjiNt+93NJh9L5Ss/cAXf21vK/G+taO13TCiv/7pXRu0pvq3StI/Ki5Ze9+c62dDiDHzj+713/nGnxycOktdFmCEPc5WV6F51FMQ6c8ujIQ9eYZw50SzXC6jwGE3S+L7UbHUnp8LcVfvG4l6cyHE5wF8DLE/pz9KKX8hhLgJwF2I7Tm0REq5OVHXPxssQyfx1tQ+DuBm1Tko8wjLMpbs3Lrj3Wte7q3au3uCOxodcrHxqdrHzq2tL3/3QCDbuxBCeBw5Rw96Fz5an1OqLxDi7KaHDvRO2fuTzZ+1Iqb7rbLjsKJ9H2p5Ylc01+N98P2fFZbdXnbya+zRQ01Fh75WcHwq6sObv7s5J1q46Gx/HY78lv3vmfLlltKOyMqhnitNRHY9N2nH++78rejJL3jbqO4n//bw6ptefX7Z8RGmTnfeoc+v/HxTZ1bhhUJa5kd3Pr3uhvq1nDpLQxZghFzOVmeRdSSrIBLIKowGs/KiNk9u1O10GYUOu1ksIMdnyr5T56Ecd/UOcvre+RNCzAHwBIAliO2C+QKAT+LEgul7AXyFZSgFeWtq7wHwKdU5KDPk9R3reOeGV/VrNq4RU44cmiXOYRfliDOvo778up2HS5eWSZtjGgBke7dv81Y9EXLmdCwR4uyOdLCkMO7zf3jdG4cXXgwI11tZo8da/r31LwPtxV752Hs+PkbabG+fwpDR0LiWTzYIGdYAYEb7os3v2P/hsy5Cx9/tostuW1el9wxr0bURFt07Xpza+t4f/g5BT9bbTrZfXrtp63fv/Z+pJ+9Q/ZDvyteemHnVAghRUBjqa//Bxj/8f/bOOzyqMvvj33f6pPdMSE8oGSAECL2GjoAUERV7r4iI4uraBQHLruuu/mzYC4quip2WnpBeSWbSe+/J9HLf3x8BNoSUmWQmM4H5PA/PQ+7cee9Jvee+55zvVxrS1WArnV1BMIBexePWc5xpg9Clb7Kk4fF4OmcOR+9BQCcY0m93heOAl7rk5lj4/A7QOkrpvec/fh6AmlL6+vmPY2FLhqwTUUzOfvQKQdmwYQ5oWHmRZFvcqYaF+dkeDkrFdDIC/ykK0GbP2VnlwddqlELPSBDCA0undpv8V6rH1D89WJyRiQ5WdfuWvpb+mFqtF0zre9xPWZu3pfFXUXnglNqf1t8aCkIum7h0bXghnqOtWAYALIalvSftjVo25Yx4GCFk/d/i1+cUzzR0fFvdzanKTAzV3HjgXZaWy71kLN+/sa7yo1ef0fF12osKt01C1+rdUY81d/Md5gDArOaivBdSP+MJ9Noh5QhsXBlQgFHwePVcJ6ZR4KqVCZ21SqGTBgJ7HZ/P1zqx2ToPVq+KN2/41cYtMrzU5Tj8aSODECIGcBzAQgBKAGcAZFBKHz3/eixsyZB1IorJeRzAPy0dh40rB75KKVuRkZx3bVK0ZkpV5UQ2ZfxGupaK79JYFrJF2uwZGUpZbH8AILzOJtHsbwuc/LOmE0JH1HDKUMJ8XnhTfGLdgoUAucTCYVZXTsLi9rNzc8Vzsk8t2zILhFzmr2Tf9XOCXdd/L+7iLC3fETetaYlRTdP98Yz89PTm1t+cBGpmnqHvkTXw89LOTXG49eV/8Rk2+xKvIzulsvvT/U9KvDra5/c5TN8P3xxzPGTpfBBiz6KM/r5zvyRuKUu0lc6ucijAKHmcRpYjq1HgqukWOutUdk5qKrDX8vgCrROHrXdnEWYCsU6/MUMpwUtdA9rrmApCyD0AHgEgA1AIQEkpffz8a7GwJUPWiSgm5w4An1k6DhvjmwlN9ZVb40+Wr8hMdXDv6gwfje0BBdE3iuZllQdtomq+ayRI71g73620wGfOV21857r5hIzcg6pOJqo4lLZHptTZ9RdapBua/ogJVVStTJizKi4lMmrJhWv3hasuL3ZuetHvQoO3UOPQenvmAS7B5btHxsD3zMta63+4J6BeaVRS1VZkn3y2ebrHfc8edqeEdYnmEmEY5tX33ohbeC5nRd/jNQ6e5Y8v290t5wlnAoCrqrvlQPKH0pDuxiWwlc5sDAAFqJLLbSROaBS46LqEzlqV0FnLCO01fL5A68hl69zOJ0sGDz5YgDi81BU1VhcjhBwEUEsp/b/zH8fClgxZJ6KYnA0Afrd0HDbGFyy9Xjs/PzN3S8Lp7lnFEn+eTjdp+HcNjVLgXlcauq2kxWPGFBC2T+9RRu8cEp/qGf6zkMOXzxrN+pSC+Vp6fXxMzdL56GecymZ0ipvrvst20XUv/n3FdTGFU2avGGgNwii73WsfbiXQXZxQuy5vb4KXPNCgXp8hITpl5Lr7yhfkdE4b/uRLqUtxiY3jzXHfu+e5YBBymaXEjSd/SXzgp6ORfZNUBkT/r9k7Yk/5z118Yfcrskma+1za53xb6czGCKAKLq+ZOpEmgYuu3c5JqxY6a/RCew2XL9A4cjl6NzbRW9ry5Fu81LXTnBcghHhRSpsJIQEATgJYSCntOP9aLGzJkHUiiskRo3crz4aNIXHq6mzedDZauv5sAtuvuVE8kubn/jCEpav3WZxRGbieo+E5zwYhLABgcRUdnuH/zXEJSQwlLCZgtNdplHtWH0zb2y7X2s/s/5q9Tt54a+3RVi7VTjt27V0x1b6hKwdaAwDc6p9MZuuaLo60e/cEFW09t2cSATHJBM/Erbuz1qbU+JBeM0ejqDjhkfBn8FLBK/c+FgFCLuv7iCguLPjHvw64sSm9ZO0SJ5+ip5bt0qo4/OkAwKKM7v78nxM3lyfPIjZ1ehsmRMXhNuucWA0CF32H0FGrtnNR64QOGp5AoLXncnSu55Mlc/7MvYGXuszqB0YISUCvKr4WwF5K6RlCyDYA/wHgCaATQA6ldJ054zAEWzLUB1FMDg+AAiNoarVxxUOnlUoKtsadal5wLsfdXqUcUfPzQMiF3lWlE6+rbHObOhWE5XnhOMexrmzCnK9qhB6lkYRg1I2OlIIeK94Sf7Jq5RyAXGbaKlI2Fm5v/NkFhHh+tuORlDY370F3eBzbv4gVyE5F9T12Z/rBXIHOflgzVkOZsOSfp1Y3JAsd5folxr6XMtCVHPfOPbZwg/KdG+5YdCGx7It7Z3vD5y890WavVl0ygaYH0Ryae2t80oQZy0F6NZJcVd3NryZ/UBTc3WQrndkYE1QcTovGkdsgdNZ2CJ11KjtntU7ooOEKhFo7LkfrxiF60Sgfwnbhpa53TRbwOMeWDPVDFJNTBsBgYTobVy58paJ7dUZS/qbEGO2kmspJbEp9h3+XYTCEo671XZZZFbBWqOU6zLzg8g6A2vumZ4hmHWM4ws65hJhGJ6VF4V77atre5h6N4+yBXp/efS45qi0hQsfh4sjOxwtk9k6DNi7zFOfynVpfm9J30mZ6w7KzSyq3LzRFrBdwCIxLXOTzISZVKoxOhgBAryFdJT+LWt7ffHPNt+s2D1jq42q1qg8OPZMe3FB3WeJX6Bp47pklD3I1bO5Fzae5jYU5z6Z9acdntGZtPLVhYzjUbG6byolXJ3DWdQidtSp7J5VO6KhhCwQaex5X58YhuuEsTzbhpS6ztYUQQjQA+gquTgOQiktLg9WU0kv0yiyFLRnqhygm5w8AQ/oi2bhy8WusLdsad6oqKivVwa27a4app0V67H3LSidur+1wmRwOQi4+1RGWRu4+9bd0tymnJrDYOpPeaH8s3ZDwe/m6CIAMOKa+pvn0mSnykhUqvrDzo5v31qr5wkGVn4m+p829bpeKgLmYGLL1XOU9aa+1scAe8aTcQLB4ssbp1+ymS1M7jC6TXUAjY9eW/ebFe/nu3fmxcxetGuy8fV+8H33N2bio/iJ9WsJWvbzgzqRMr7CoCw3kLMroHsr7KXFjxVlb6cyG1aIh7HaFM7+O70w77FzUCjsnDWPnoGYJhBo7HlfnyiPa6/FSV7E5rk0IeRvAbgALAGSit0zWg16X+jYAfwK4BUAXpdQqDH1tyVA/RDE5/wLwmKXjsDE2sLRa9aL8jLwtCdE9M0qlJml+7o+exVXW+K3MrPZf7azjXjq1xRK01vlEHi12mJA3g5DhHeeNoU3l0nAwdW9tp9pl7kCvs6hefVPd96nu2o5l3Q7O9Udu2iPXc7iDf/6UMu51uzNZTOcl660uviN2YtvsKFPGfoHJ2x8sXnm2ibAZjPj7Im/mFVRHuwft3vtiav4k8aA9UGvPxqY+/cUHYQMlOBmeE7NeXnivi47Fubhr7KbqajqY9EFJYE/ziHaubNiwIBSAg1gqUZhjcULIBTeHnQBOAWgF0I7esl4dgCgAJQC0lFKr0HKyJUP9EMXkPAzAVke9gnHpbG/clHxGui4lievb0jSVAGZ5MulyDCoqnXhdU5dTSER/oUKBZ2GuT+Q3PTzHpvmEwCjvLkP4tXxtws+lG2dgkBF3gV7ZfHvNN3V8qpnV7OZd9sX1D/Mpa+idHaeWd2P4ypRLyk0Oatf6W7JedCEgZhkhDlj9UvSimkKWe5c2ajTrtJfZpTSmO8+584U3k6t9/JYNdl5odUXJe68/z+Xq9UH9X1OzuLJnF9+XVuAesgJ9+obmNRZk/z3tS3s+Y9odPRs2zEi9WCoxWdm/P+cFFwtwaX/dOwB29TuVoZRaRY+uLRnqhygmZzV6M1kbVw5MeEnBua1xp1rmF+R62atU02AmzyIdmy+r9l+TXeO3wl3PEVyqBE30GpeJp1M8p/3myuap+uv6mIQOtVPzwdS9Fe0qt/mDneOpai6+oeFHAQs0oHpCcP531949AYQMuSslkKdmOrS9M7N/0/iN2c8ku6r+Z5JqalzCfjwT4fWT4/RimcHii4PRkOEc21ruuOimV9/JanNxXTDYeY5yWfvnL+0td5X1DGgnkiCamnZ43h3eDOt/3mwsRq97KP+nhI0VKZGGqmbbsGFB4sVSyaiEUYeCEHI9gO8BVANoADAfgBoAH0A9AHuc34GllFrFQIItGeqHKCYnAECVpeOwMTr4Cnnn2vTEgk1JMdrQ2urJbEonmPN6Hc6TCktDt7X1OAbM6q9tQ7jdLd6zjuU5B6SFEZbpmrD7c6JqRdKxoq1igAw6YTKlR5q6pjUmjADO0pBp6b+uuUk8kBZPX9ja1nrXhr0cgksVrv07wvI2Sh8a1ll+NBD7KunU9fv9lie18QlGv4NWedo9rqPLcc71h/+vRG53ubTABVgMo/vnW68kRJQWDdh4reDwO59a8lBOmYtfVN/jbsrOxkPJH5YG2EpnNqybT8VSyd3mWpwQ0gjAi1LKOv+xEv/rv2xC71g9QW8OYkuGrBFRTA4BIMcoVINtWIbA+sqSLXGna5Znpzu69nSHm1sqX8sWdlUGXZNbN2GJN8PmX+Yyz3WulE6Y81WTwK1qLiHmU6Lt1ji0Hkx9vLhF6TnkDk1US9yZ6bLCKAKw08MXJsYu2jBvIA2eS6B6rUftw4WEKi4dmadg7kl7vYjL8MWj/wyGhJmy476WZWfbGnk6OuqxfcpAX/qrd2YHcZp4/aH/a9HweJd93/py78/fxN584tdFg3lUnfSblfSvyJ3BlLAuSbbnN+Rn/T39a0ceY/oeNBs2TMCzYqnkoLkWJ4TEA1gKYC6AZvRuMCjR+0BTBCAbvQ3UDKXUKsxybcnQAIhicvIAmKWMYcN0sDUa1aL8jNwtCWfkM0qLArl6fejw7xo9ba7ivLLQrd0ye9/ZIP17ZSjjGJiU6h3xI5cj6ImEmTVpYmqWnP1acv1Eiv/pE/WHUEa7o/7HRG9NywoAiF54TUzmjEXLB9Le6Y9L0+FYrrogqv/xOdXrE+bUXTN6pWkDCNm4L3FmVY3Wp1U94C6NsTA6Iiv+ybum2cHdeeer/9bp2ZwhhSzn52VmHXz/H/4sSgf8Gsu4gtbHlz9aUOvgfUnZgcXotY/k/Zh0TWVqJMHodaJs2DAhN4ilku/NeQFCSP/kYjKAFFyqjXQHpfQLc8ZhKLZkaABEMTk/ANhu6ThsXI5bZ2v9psQzxWtTk3gTWlumjpWhpoZr314RtCm/QbTQj2FzL0+6WMpuz/DjGW4TY4MIW292nSqZ1q7jcNqewga5aPFQ5/H06o7ba78pEzKqOQBwfO1NMcUh0w1KKoTdp5MdOj+/bLeJq+N3351+WE2GSMBMiWfkkZOhrgk+kee6TfaAolWwGkt/9aYVXhOU97zwpj1lsbyHOt+npbH6k/1/Uwi0mkGtOY4HLYr/IGJbGCXkknKiu7Kj4VDSh+X+spYhv1c2bIwhU8VSicTSQVgTtmRoAEQxOQcBPGPpOGwAoFQfUXwuf2vcqbZ5hXledmq12ZqfL7s0QFs8InLKQzYrFULvSBBymSEq266pcsKcryrsvKWzCBmbxCyxbl7qZwU3B1EMfQN3VbeV76z/gbLBhFIQ/dfb7o9v8PY3KBHiqOsqXZqedhko2dxY+ECsf9fUqBGGbzRcj5z00BXvzFqZ0KYwZXOyvI1bVH3KY8K54MlVj+572b//xF9/+Gq17JP9+/ImtLUMWo5s5dk37o3aU9pi53pZz9DChrzMp9O/cbKVzmxYGAUAR7FUwlg6EGvClgwNgCgm504An1o6jqsVgULWsS4toWBjUowutK52Cquff5S5UfOcWsqDNxc0es8NpizOgOqo9qKcDO/Z32q59m3zCBkb+xa5VtD5esZj+bU9vsOWp0JlZRnXtJwMIYCbnsVWfXLj7sxOZ3fDdiaoRulR+1AVoZfvgrgovCtvzH1mAsEwvUYmhBKdLOz6h1iL09rzhWpm0Cm5kdBZJUxvOOsyKzF8du7zD+2bCkKG7hWklL700Vsxy7PTLxmv7883U1ZFfxm2fmZfYU2gt3T2aO4Pieuq0ufYSmc2LESaWCox6e/RlYAtGRoAUUzOIgBJlo7jaiKotrxoa/zp2mXZGc4usp5w0juCOWZQEKbJKzK7PPharUrgHnnBk+oSWDql25Q/0zzEf3myOJqpAyxjNlIbZ2ccybt9AgPWsFNxi9rORs/uzllKAK6Gy+v+8Oa9JUqhQ6Sh13JreC6era0aUIvn1swX0xw0bqMeczeWiVsfzZhS3SYPqleafBy4Kdcxvl3iuOyXxVFJb91y/3wQMmxD59aYP5N2H/tiJukdER6QBoFTzRNRj9d2CBwvsynxULTXH0r+sMJP1morndkYaz4USyUPWDoIa8OWDA2AKCbHA0CLpeO4kmGr1cpleWl5mxPOyKaVlwaNVfNzf1R814bSkK1FLZ6zJg4mOkh4nQ0+s49KHP2zpxFChyxNmRqljt/zZsau7MruwEGFAi9Cqf66xuOxvqqGVQAgF9g1f3TLEy1aLn+aodez7/wx3q77pwGvFdo6K2NNyZ0Dau+YmwlL/nFC5Hhu4sLsTrP8nFTFusUqGgVRn264LuaLa3dEwYDG96ml0sJ/v7Xfic0wQ4lV0iPTN0X/N3T5XJDL7VAW1+dkPJVx1IXH6CeOInwbNozhEbFU8n+WDsLasCVDgyCKyWkFTGuPcLXj0d5cc23imdI1ack8UVvrdEv5OlEQfYNoQWZF0Eao+S6RFzyn+iNwK8kXzfmqg+9cP5+Qsd2pAoDM5hlZ7+fe5clQtv9w53IZdddttd9K7PWKBQDQ4eRa/cmNj+kYNsfgZm6uqrTIpfllf+ByGQBCWbp7Ul+v5FCuRW7a9gHR8f4Lji5bGd9aTwCTa0ZRClr2u1eKVsZZePi2B06dWBS1xpD3uXZ2NH/+ypP1jkrFoJpFAFBt51b+ZNSe9h6e3WXJJJvRa3bnHEtaU505l1xqYmnDhjlYLJZKki0dhLVhS4YGwWbYagIYRjezOD9va9yp9rmScyI7tXoqxqj5eSAUQo/a0pDrylo9wqeAsEQDn8XonENiU73Cj9ux+YpZYxthLyo9V/5W5sPppZ0hywEy7A6Fs6aj6ub671Ucqp8CAA0ePtKvr3vImbJYBvdaEb2iy73u4TaCgSfhFldcFxfeuNxsirXDwu2qDdv25IR5mZ1JjnKdWUb6GT2UJT+Lyhgta/q+R58+nTE1YrUh72PrdOr3XnsuZVJt1ZBfHwro/zNze/SfgQsWXy7JAHgq2uoOJX9Y5StrM5uit42rHgaAs1gqkVk6EGvDlgwNgigm5zkA+y0dx3jDTt7dui41QbIxOZYJrq8LY9GxLSv1hyEsbf2EJRmVAet5Gp7TbJBBkguOrN074r/ZLsHJEwmLGbBpeizIa52a+072vc56ygky5PwAeVX25uY/fAngBQDl/hOz/7vhjmAQYtRkm3vdE0ksffOA/SsCrX3bHRmvsgmMW9PUTN7+oDSwTtY6uVJuNnVnnZLVUvKLtwqU+N3790NxZf5BUYa+97GjR6K3xJ9ZRoAhe47KHL2K9i3frVRyBAPuJi2py05/KvNbNy5jmdKxjSuaErFUYvPQGwBbMjQIopiclQDOWDqO8UBITVnhtrhT9UtyM12cZbIZg6n1jiVyO1FlycTtle2uYdNABtfD4TjWlEyY83Wt0KNsDiGWm+7R6DnKf2c/kCppn7wMGF4MEQDmdGTELehMn39BaTt/ysyzf0Vtjxho12EoHNs+ixXIz0QN9vrW/D3xIlnw8D1LZiZg9Yunnexrw5entnvBjGKWyk5OWeVfnu56wra/+cDbac1uHgY3OUelJ6W98Mk7k4Yz/2VAtG/OuSkuxnf20gElGxi9Zk/Od0mrqrNspTMbpuR7sVRyg6WDsEZsydAgiGJy7AF0YpinvKsRtlotX5abmrcl4YxiakVZMFdvfpFBQ2AIR13jF5VZHbDGTst1GKqHgzr4paZ6z/yBcO0658KCpTsAKGyffO7trAeEOmYAMceBoJTZ1PRHTLCyetWFQ8mzl8clzV292JBJqL7wFPm5Tq2viwdLYD1lAcXX5e8NJRi4r2oscQn77ynRjL/WRCW2FrMZmPXptqtWkFWf6Bqu4XC11x9+T9Jjb/g0XmBtddmHrz0Lnk437Pez0MU3/5mljxANmzd9oNe9FG21h5I+qJ4gb7eVzmyYArPacIxnbMnQEIhicjIBzLZ0HNaAV2tj1ebE02Wr088KvNrbp1uTM3ePg39pSeh1dZ0uk2aAkEGfyClRyTyn/ZbuNuWML4uts/hWsY5hq9/NuedsXuu0pTAw2eAwWtnNdd/lOut6Lu5WnFi+5UyeeO5KGLlbQrRdre4Nu9UEzKDmsXekH8gW6hwt0jvVH2JXVjBl0+FpM/O6Yt07tVHmvl5LgUNCa77TUrlA2LH98Hv1ar4RU3kKeednrzxZ5NHVOayei56wVAfm356Q4j0takBJBwDL6rLSnsz8zt1WOrMxSjaKpZI/LB2ENWJLhoZAFJPzHwC7LB2HRdDrtZFFeflb4061R0oLfIQazVSY2WfLGPQsnqLaf3VWjf8KZx3HbkibBpawpdpn9tEShwn5MwmxjgnB4o4QyT8zH+FoGa7BasT22p662+q+7eRS3YWbMv1+4x0xlf6TVhodAKWMe92jmSyma+5gp0xtWJSyrPLGBUavbT70U3bc1+LdpKoOL5aNidZRTaJrrKxWGNXq6NS48+C7Ch3H8Ok8wjD61/5zKH6u9JxBqt857iFZzy++30HH4gyYqLMZvfrx7G+TV9ZkzxtK38iGjSHwFkslzZYOwhqxJUNDIIrJ2QngG0vHMVbYy7parkmJK7zmbDyCGurCWBQWbX4eiE6nYGlp6HUt3U7BEQPptvRF6FmQJYo8quA5Ns0nBAM+cY81Ooal/SD/zqSspoglgOElrQmK2rxtTb95sEAnAABDiPbL7Q+fbfbwGVEvj0vLf2K4yrRBb9IshqO6J+31FrYBY/1jScjGffFCQcfs5UltvDHqTaOlf3gma7u5i2s8vCrvePktvjFTegBwyx//jbvn1x8u9nYNhYawZS8svu9srsfElcDAyuYieWvNweQPan3kHZeJOdqwMQRSsVQitnQQ1ootGRoCUUxOIIBKS8dhRujEqpLCrfGnGpbkZrk6yeXh1tD83B8dm99TGbg+u27CMk89RzDkLzOFTu026XSqx/TfXdhc1YyxitEQyroCi97M2EU1ev6gZp8DEdGVG7+0PTnywm6Ajs1RHNm5J6/HwWVEuzYCWXK6Q/t7kWSIXqmVJbfETm6dFzWS9c2JZ+SRE+6hqeuWJrfl8HR0SG0fU0H1UBcfF0kYDWumxD9Q8vAzh0RDlWMHYnZhbu4b77zmzaJ0EEmHSznrHZb66vy7PPUs9qA7UVG1mal7s455chnr6NmzYfV8IJZKHrR0ENaKLRkaBlFMTi2AQXsqxhsctbJnRXZK/rUJ0SpxZXkwh2GCLR3TYLS7TC4oDd3WIXPwnwVChiwLEG53k2jmsXNOgWlhhEWt6vvFUKI7cu62hNSGyMUwztOLrms+ET1ZXn6xH0jJE3R8dMsTVWq+cESJAEfTXO/a+CQXoINO2NmrXRpvzXrJgYBY3RQT1yMnJXTluwumSnpifFrUBpWfTIFOTdpLjou6wJDg1LDpmU/v/nvYcD+T/fFqba777MBTncJes+FhUbK4Xc8sfSijyDVg0H4wDqNTP571bdKK2pwFZACxTBs2+nCLWCq5aiodxmJLhoZBFJNzDMAOS8cxGrxbG8o3x5+uXJVxVuDV0RFuzQaRWo5dZ0XQhtx6n8UTGDZv2H4annNFgc/cr1oErtXzCLG+m0FVj2/J62mPaVR6gcHNtwDAojrlzXXfp7tqOy+WwbrtHOo/vvmJbh2Ha9TO0kUYndaj7uFCQpURQ512Q87fktyUE6zSM4uBpnvqjkfYzh3asjnnusZ050/Vzamq+MPTASDuJ+YuSj581645IMYZ1vK0GsVHrz6dFdDUYLBWUrRfROI/Im8JYAgrYLBzfOQt1QeTPqwTKWylMxuD4ieWSuosHYS1YkuGhkEUk7MHwFuWjsModDrNnKKcMJc8owAAIABJREFUvK1xpzsjiwonCDRaMayo+XkgWt2n55aFbJHJ7XwiQcgwvRVU7xSYmOIV8ROfI+iJhBV+bgwl+s8Lb4pPrFuwEBju87kUoVbWdFvdtw18qr24+9Pq4lH2+Q2PchgWe8SCkK6NB2M4GsmQuym+XZPObSp8ZBoxQPnaUkza+mgGm6ucuTKhTUaAMRWC7Gng59XGuU0GiODrtddGH9l2cxSMl2agz3z6n+g1ackrhipV9qWbw2v72/LdeZWOoiG/fytqM1Ifz/rei8vorXbH14ZFKBdLJbZJxCGwJUPDIIrJmQcg1dJxDIdTT0fT+rNxkmvOxrMCGhvCWOcVia0ZDdehrTz42nMNovn+lMUdtu+BshSd3uE/Z7lOjA8ibOvtk6iViSoOpz3eo9QJjd658FI2SnY0/mzPAr24C1Dr7X/u6Nb7vUDIiL+ndt0nk+w7vxx6t4eC3p1+uICnFw6oeWMtTFjy5gmnCUXrFqW2pwjVzJhPu7UW2Se1ZDstAgj51413nToetdYgH7P+bEo4lbT3m09mGLNT+0fQvPh3InZMooQM2sTNYXSqJ7KOJi+vzbWVzmxc4FOxVHK3pYOwZmzJ0DCIYnK4ALoACC0dyyVQSidXFRdsizvVuCgv29VRoZhBYB0TU0NBAdriOSu7LHizWin0jDSkzMCxayz1mftVlZ1XUSQhY7sTYAyUgvlauiM+pmbJPMA4FWgAmNpdkLyyLf4SDafi4LD042tvmTLc5NxQcNS15S5Nz7gPZ4w7u3ZN4ryaTWazujAVdgFnogMWfLsypEweG1ynjLJEDLUpLjE9lXYrAOC5B/eeToqYa5CPWX8mV5ZK333jRSGHMdwCpp0rbHwy6rHiBnuPIScJfeQt1YeSPqj3VnRakzyCDctwl1gq+czSQVgztmTIAEQxOXEALG5HwFUrulZkppy7NjFaHVZVEcJhmCBLx2QoKp5LU1nIZkmzV2QIZXEG7X3oA7UXZWWKZh/TcOzb5hMy8JixtdAg96o6lPZ4u1xrPyKBwlUt0WfEsqIo0mecOnvavMTTS66dO5Bdg8EwaoVH7cPVBJoh+4y4er7srrTDMhYGM7C1HvSsjqpp1z/lL5TpKxZldVhs67/8hEe8uoO3DAAeeerlM4XBk1cN956BcOruav3ilSerneUyowRev5+0POaTqZvCQYjHUOetqklP2ZP1vYhDx8/fCxsmJ0QslVRYOghrxpYMGYAoJucQgKctcW2f5trSLQlnqlZmpNh5dHaGjyefIgrCNHrPzawI2sSoBG6RhlhFUKJReIT9meYuPunF4mimjkWco4R+V7w1/mTlikiMYPqKUEZzQ/0PSV6atkt6QeLnr4lOnblsOcjobDDc6p+NY+uqh3Wbv0ZyX2xg5/So0VxrLJm8/QEJi82IV8S31rEsNO1JGWhLjnvn6dXsSArob3v5reQ6L9HSkazF1us1b//jxaRpFWVGTcg18x1rnlixp7pV4DxkCZSr1yqfzPomZWld/gJibbvcNsxNjVgqMeQB9KrGlgwZgCgm5xoAYyJhTrRa9VxJdu7W+DPds4olvgKtNgxW2CA8FEqBW31pyLbiFs+IySDsCYa8h/A66nwij0oc/XLCCbGs072hNCvdaw+m7m3q0Tga7FvVF75O2Xpb3dFKIaOe0/f476uvjy6cONN4Vel+OHT8N07Y8/OwiZCzwqPqptznRASj2IEaYwJWv3jazq1+9dzMzgQnuW5ECYgp0GlIV+lxUTPVk0k6Nlu14+C7eZ1OziNWx77/xy9jbjr1xxIjS970i6nro49OWjV7OP0jX1lT5cGkDxu9lF220tnVw9diqeRWSwdh7diSIQMQxeQIAbTBTE9Uzt3t9RvOxhStS0lk+zc2ilnAoBow1gpDWLoG0cLMiqANbA3PeTaIYc7rAreiHJ8533TznOvnE4JxczP+sXRj/O/layMAMmQfzmC4qVpKbmr4kc0Gc7ERnALMd5vvia2ZEDzqRIinKpE4N78SCAMaaG/JeiHFUe0+rm6OLuLv/xKFn1zvV6NMnFIht2ifk1rGri3/zYsLEG8lj9e1/bX3q5QC45vnL7AoJzVj/wf/CmIBQ5a/+lNn51r2RNRjrV08h2H90NZUp5zdnf2jj610dlVwr1gq+djSQVg7tmTIQEQxOb8B2GiSxShlwiqk57bGnWpelJ/j5qBUho+H5ueBUAi9qktCrytvc58mBmEZtKNDqV7rEhqb4hX+iwObr7AKE1BDaVO51B9MfaK2Uz3yp/9JsuKUdS1nJhPA7cIxPYul/nzHo+ltrp6jvrETvaLTve7hDoLhx6uDW2dkriu5Z0Q7W5aE2pXnijcdiuComeblqe2esPDuaU8zr6A22j0YIHbtdvbNN732XpeWY7jvXH/8Gusqjhx8RsPXaqcY+Vb9+xFbzhwPWrIQhAw5pcbVa5T7sr45u6Tu3EJb6eyKhQKYIJZKGi0diLVjS4YMRBST8xCA/xvp+3kqeceqzOSCTYkxminVVRPZDDNua7gMYWvqfJdlVgas42u5DrNADNSk4chaRRE/5DgHn51EWIZPz1gLv5avTfy5dON0gIx4om1pW+KZiO78ZX2TXw2H23Pk5r1SuZ3joKapxuBRtzeJ6FuGFU0klOjvSX29jEN5AxqDWjm6KTvuayYEE5YnthVxGGps0mBy2svszjalO88HCKve1a3qtgP/ZjGskXu7CZSK7k8PPHVO1N62yNj3Vjl4SJ9Y/phczhUOm+j6yZoqDiZ90Oyp7B52R8nGuCNNLJXYvq8GYEuGDEQUk+MPoNqY9/g21hRvSThVHZWZZu/R1TVjvDtNy+wnVJSEXlfd4TplOgjLYPd3rmONxGfOV41Cj/I5hFiv+vVgdKidmg+m7i1vV7mNvJREqfb6hp/ifdRNl0wcKfh2LR/dsrdRwxOEjzpQAM6tn0bzFNEGldkWVWyJm9G4ctieImslZOO+OJ595/KIvO5Yj05NlKXjAYD6DOfYrlL7KAAo8fGTPvD86+6UkJGXvSllDrz/RuzivOwVMHL3iwLatyJviD7lN3cpyPBSD+uqzp7dlfOTL4eO3wc1G5fxvFgqOWDpIMYDtmTICEQxObkABu0FIFqtakFhRs7WuDOyiNIiP75WNzLbBCtCz+KoavxWZlb7r3bQce2HtHHoB+Pol5rqNfN7wrXrmgfjVXqtghNVK5KOFW0NA4jByV9/uHpVx2113xbZ65WXJFOdDs7Vn+x8XKNncyaOPlKAr8jNcWp9cyoMMNvla+067sw4SAmI23DnWises4/85TExdb1Xkyo9vEhmkl01U1Bxxj1W1cKPAoCsiWHZT+x9IXQ0OlEAcMOpX+If/PHonJGIKBY7++b/benDjIrDH/b3l6tXK/6W+U3KovqCRQQwSjndhlUSIZZK8iwdxHjAlgwZgSgm5yCAZ/oec+5ur92YdKZkfUoS26+5aSoxsunRWul2DCgpCd3e0OUcGgFieJMwJapuz2m/ZbhNOePHYuvGY/kFANCtsW89mLa3uEXhaXSJoi8u6vbynQ3fazmUuaSM0+QuKvpy+8MOlMUyyVg4S9vR7NawR0vAGLTelnOPxvn0TBy3u0IAwPbISpy08r0lRE9lK5LauATW0YBPGehLfvXO1CvZ8wAgZua8s6/cv2f2qPSiAISXFOa/9dYBNzY13ohYB6J6ff6t8QmiGcsNicNP1lBxKPGjFg9V94h742xYnCqxVBJk6SDGC7ZkyAhEMTmLQGn81LLC/G3xp1oXnMt1t1cqwwmG188ZD+hZPHlVwJqsGr8VbnqO0ChjUbawpcIn8ptye59zMwnBiHdRrIGY2iXJXxdeP4mCNaqpvmB5ecbG5hMBpJ81SqVvSM73m+4KADHRrgyleo+6XVmE6TZod8RD5luyPX9f8Hj/udVC3TF9xy4uIXBYktyezdcxVtOMz+iIrPgn7xqqZ4kB4L9Ra2PfueHOpaPVjXJvb2v4bP++ZgfV0Ga7g5HvEZz13ML7BRo21yANr2uqkpIfzjnuZyudjUveEUslj1o6iPGCLRkyAlFMDuvkrlszuHq91fzRNQUdzhMLS0O3tfU4Bs4cbgKlP3ae57JEkUflXMfmBYSMz4m4C/Ro7ToOp+0paJSLRj3RNb89NXpuV9bi/rsVhZNmnP195Y4ZIMRk/WMuzW+f4aoyDFY/vj19f4adzmnO8GdaPxO3PprO4anmhklk0b4tqlFLEpgSjYLVUParNwUlEwDg/W07T323dvOIfMz6wtFplR8c+ntaSH3tiHb21ITIDyy6NynDY/JKQ4RQuXq1/OnMr9MW1hcutJXOxhXrxFLJSUsHMV4YV8kQIcQfwBcARAAYAB9SSt8mvU/Y3wEIAlAJ4AZKaYc5YpCEiY8AuMcca48lOraguyLwmpw636XeDJtv1CQOA63KffLpFI9pf7izuSqTNP5amsT6+amfndsZSEdrR0GpfmvTrzH+yrrLvKrSIpbExy1Yt8AQPzZDsZMlpdm1vz/HUPdzceP81OUVN18x0yU+i/9x0tlXutapQ5c/N7/T6n4W5W1cafUpD1+g9yHjwN27Tp2Zu3jUCREA7P36gzObEmMvsXAxhgzR5JSX593jpmOxDSpn+/c0lB1K+rDNXdVjK51ZPz0APMRSicbSgYwXxlsytAHAt/jf07YGwHwAxwEEo/ePQjmAXymle8wRgyRMvAHA7+ZYeyxocxXnl4Vu7ZLZ+842ZMKkLyxuV4P3rGMFTgHpYsIyvm/BGpFrBZ2vZzyWX9vjO2oVY45e3X1r3bF8R73ssrH2M0s2ncmavmAFTNhIztU01bo07uMD1KByHothq+9Je72RTTnjTtZgMOwCT50KmH9sDSjVrUxokxFYn5FvR5UwvfGsyyycL0vuefz507mTp47I2LU/q1Ljzj772fthBBhSeXow5Cx214tLH0otcA1aDQN/NjdWJiQ/lPuLP5vSEcsG2DA7P4ilkh2WDmI8Md6SoQgA0yil3xBCfADUAXgBwC4ANwJ4GUAzgFWUUrP0rUjCxPzz1xjVdMhYouXYd5QHbchr8Fnky7B5Rk8u8V3K8nzmfNPOd62eR4jx0yzWSkpjZPrH+bf5MpRlkGXIUDhpOqtvrj/Ww6X6/r1W9Kf1t8SUBolNW8JhdBqPuoclhBreOxJVujM2rGVBlEnjsDBaVkt5+PV/DwLAWpjacdZOrV9o6ZgGoiHXMa5T4nihrKW/6/nXEyon+EeZYu2Qmori9197ns3V60dsWhvvF57wWuSt/gxhBxlyPk+vkj2T8VXa/AbpZaVgG1bBHWKp5AtLBzGeGFfJUF8IIUEASgG8AmAvpdSFEBIL4DcAr1JKzfYLKgkTHwVwk7nWNxUt7jNyykI2yxV2ojnGTrJQyuicgxJTvCJ+EnAEskiMM3+0oVDq+D1vZu7KquwKNMk0lb+iKntL0x8iAvj0PU5BdF9tfzCh0dPXKPNNQ3BrfDWarZEanGDZqR2bbsvab0dgXE/YeGDy9gcKWWxmanCZIjakThFl6XgGozLWLVbZKIgCAD1hqW969T9Zra5uJkneHHq62z8/sK/UrXvk0189bE7rM1G7c8ocJ6yCgb/vAT31pYeSPmx3U8lspTPrQQdAJJZK2iwdyHhiXCZDhBAHABkAJgEIAFDQJxliAYiklJpN4FASJr4OwH/Ntf5oUHMdW8pDNhc0es8LoixOkNELsBXtXuE/ZbmGJoQQtj5k+DeMLzKbZ2S9n3uXJ0NHrgzcl9mdWXGLOlLn9td/0bNYik9u2pPT6eQ2qtH8gXDoOpEo7PrKqCbv63P3JXoo/Czq4WUu/Fe9dNrevW41X8aULclqH/HuiLmhFEzp716pOhlnIQAoONyeG197r1RmZ2+SgQzCMLp/vL0/blax1OBm+oE4GRgZ96+ZN4ZQwjL4d2RjRULSQ3m/BNhKZ1bBn2KpZIOlgxhvjLtkiBDCBXASwGIAb1FK/0YIKQIQBSAJQAMAD0rNJ89/vlTWBGBEJp2mhgK02TMyqzzkWq1S4BGJ3q+RUXDsGkt85n5ZbedVHEmI9fVdjBaVnit/K+vh9NKOkOWAgfYhQ0M3Nv1xJkRRddlTtIrL6zhyyxPlSoG9yT2/uOqaMpemv3vAiJ89n66Qgs2Fu6cS03zeVoeL+NjvovBTGwFgRXxrLQvws3RMg8HooSz+WVRGtazpANApELTe+NoHrRoez2QCrXf8+l3sHX/8vHA05atODr/xqRWPFdbYexm8+8jTq2R/z/gybV5Dka10ZlluE0slX1k6iPHGuEqGSK8H1pcAtgM4SSndcv74GwACAawD8A2AHkrpU+aMRRIm/hjA3ea8xnCo+C6NZSFbpc2esydSFnskNwBq75OVJpr9nZ5r1z4fZGRTKdZObuu0nHez73HR0xHslA0AS6+V31J/LNNF172s/2syoX3DkZuf6NByeQbpuBiFXiX3qHukmkAjNuJd9K60w/l8/chd1K0daleaKd70WiQAzMnsTHCW60bdDG9OtCpWc+lxbxUoCQCAJifnmlsOvqvTs9nDGusaytyCrMzD777px6LUIPPkwTg+cXH0B9O2TqWEGDxlGdRdW3ow6UiHq9p6VMGvIhQAvMVSiczSgYw3xlsytARAAgAlgOLzh/+OXs+vz9D7hH4OwHpKabs5Y5GEiVcCOGPOawwEBdE3iOZnVgRthJrvGjkSETdKNDKPsD/T3cUnvVkcjelv2laCWs9R/ifngVRJ2+RlADHJFJdQ211/e92xFh7VXta43O7sXv7pDbsJY8KbWl/c6/8ex9LVGNXnNLN2RdKCmq3DmraOZyioJmzH/c2EwM+3RpUYViGz+nKgooNTWnXC0+OC6W+Fl0/xPS++6URZo5R26IOopbH6kwN/6xFqNEYJqPanle9Q80TUYxXNQtfLkv+h2Fwel3h//m9BbEqtdqfuCuRbsVSy09JBjEfGWzJ0wTle1efwIQAPAfBEb7+QHkAjNXPtWhImZgGoATDqSSRDUAo8aktDt5W2eMyYAsLyGf4dl8Pit1f7zD5a7OCXG07I6J4YrZ3C9sn5b2c9aKdjOCbrIREp689tb/zFiQV6mRpvvZfvuW+2PeBBieluZn1xav8+ji/7xahEiKPnyu9Oe72bhZH9vIwnQjbsi+c5dC5jq2lzVGqbJ8ZBw39XrSCrPtF1OtCrO5UfHJq3e99+fxAyojH5geArFT1HDj2T69fSPNoEkR4Vrz79xeR1s0CIwZZDfJ2q59mMLzLmNBYvJgZ45tkYNZvFUsmvlg5iPDKukiFrQxImfh3APnOtzxCWtt5nSWZl4HqOhuc0G2RkuxtCN2mWaM43Mp5zw3xCruxavpZhq9/NvTc5v2XqMmB01gd9md6dnxjVljiDDCCpUBYwOf3Ha26baMqbWF/4yuICp5b9wTDSpHOd9O7Y4I6IKHPEZG1cMG0FgOWJbVIOQ8eFSXJzgUNCW77TxbJe0vRZqc89vC/cWA2wYaAvHHkrekVm2kqMMklsEDqXP7FiT0MHz9Go3cbg7tqSV5M+6nJVy68I5XMrpQWAr1gq0Vo6kPGILRkaBZIw8TT0luVMitzOu6okdHtlu5t4KsjI/LEYqlO7TYxN8Zz+qyObr5ht6hitkeLOkIJ/ZjzM1TI8kxrErmk5dWqKrHTlQEq/eWGRSSeWb50NQoSmvOYFWDpZh3v9rk5Ab1TpzUnpVrMz5wUPAvPEZW2wPTLjJq18fzkAzMjrjvXs1ERZOCSDqU50jZHXCi/KL/y6eEXCP2+5b6EhVhnGsDnur8Q9334eQYDRyiswH8/YdPqH4OXzQIhRwxZbymMS7sv/I2QkZrM2huVtsVRiFrHhq4FxmwwNYc2xH8CW88eaAdxJKa03VxySMHEGgFFPDTGEo671XZ5ZFbBGqOU6zAQZ2eQP4fQ0e0f8kOccnDKJsJgrRml4KHQMS/N+/l1J2U0zlgDGT9INBqF61U113yd7aDsGnKhJmrsqOnl21DJT37T6QD3q9p4l+hajx/N3Zj131lntaZUChOZAS5Vt02/YzScEDh5NmrSIonHltk7L/vBM0nRzL5ayPtu4/cznm64f9U5Of8TlRQX//scrDhxm9H8bahw8pU8u39XdzbU36mvN16m6n0v/PCOyqWSJrXRmUmaLpZJscy1OCHkcwL0AKIB8AHcBeBfAHPT+nBaj9347Lpu3x3My5APAh1KaRXrNRTMBbAVQSyntPn/ObgBTKaUPmisOSZj4UQD/Hun7exz8ykpCr6vtdJkcPhoXc65jVcGEuV83Cdwr5hIy6ie/cUNZV2DRmxm7GI2eb8yE1bDwtbKm2+u/qxUwmgET3b9WXnc6f/Jsg8XpRoJz68fRPEWs0crVge1Ts68peuCKMhM2hIlbHk3j8FXzoKOylclt3PE03s3ooS45LpIwGtbMC8dev/X+k38uXrHW1Ndy7Wxv+mz/U3VOCrkpdoy1/559/Zk/A+YvAYiDMW8M6aopejX5SI+LrXRmCvLEUonBavTGQgjxBZCI3vupkhByDMAfAH7sc7/9J4BmSulhc8VhTkzmkzTWUEobKKVZ5//fA0ACwPfCN+Y89ujNYs3JUfR6pBmMnsVVVgSuT4xf/EZe+pxnQjtdpywfSSJEKdU7+p1NmrjpyZTQaw6IhR4VK6+WREhPie6D/NtjDqbuDTZ1IuSlapTcW/uVfJBEiDl27V1n8ifPXg0zJkJCeU42TxFr/Ig4JfrVJXdeFaWx/shbA3snSDnEQcNhFVg4HKNgscEP3dgUABYtv3Dsqa8+XDu3MM/kruMdLm7e173+wTRpQFCMCZbj7s76Yf27Mf+ssNOpsox5Y7mz/5Sd17w858PwDQl6QupMEMvVzOdjcA0OACHp3Qm3A1DfJxEiAIQw//3WbIzbnaG+nLfmiAcwnVLaTQh5FcDtALoArKCUtpjz+obac3Q5BReVhm5r6nIKiQAhIxZspETV6TXt1wzXKdEBLLbOpP0x44HKHr+SN9J2q1V6wXRTrz2lR5K8pjU2jACXJad6QjRf7tiV0uLmbdSIsbFwtB1Nrg2P6QDj+yrmV26Mn9Ww1qzxWSt2AadOBiw4thYAwiSyaN8WlWn94MYAVTenquIPTweAXPBWZO579lBMqV/QqFSlB2PXsU/OXBdzahkBRl1e1gPqf8y/JTbGZ+YyGNmrJtQpup5L+yJzVnPpUlPEcpWhAeAvlkqazXkRQshjAF5Fr7TNSUrpLeePfwpgA4BCABsppQpzxmEuxn0ydN6aIw69fmQ/9nvtGQACSumL5oxBEiZeDiB2oNd0bL6sKmBddq3vcnc9RzAqTR+2sLnMJ/LrcnufwtmEwCxGtNYMQ4n+s8Kd8Ul18xcCRGDq9aPa4k5N7y6MGuiPsYbN7vnk5r0FPfbOC0x93UtgGL1H/aNZhOk2WrCOpxV03pVxSEfAMnj0+UpCTVqLI3Y8EwqA7dihy5+X3xlu6ZhGQncDP7cuzm3KhZ9xhhDNLfvfTm909zSLXtTyjKTUFz9+ZyKBaf6mFLr5Z/198UMcNZtntNDnxK7qogPJR2TOaoXJ1duvYL4WSyW3mvMCpHdS9r/oNUTvBPA9gB8opV+df50N4D8A0imln5ozFnMxrpOh89YcvwE4QSn95wCvBwL4nVJq8h2E/kjCxIUALpZrOlwmFZSGbmvvcQiYBWJcLb0/dp556aLIb1Vcx5YFhFydT001Mp/y19Ie61Hq7ExfF6d6zQ0NPyd4q5sHfPpW8gWtH938RK2aL5w50OumxLXpX2c46swR7QJcW/BIrG/35CgThzSumLz9gQIWm5kGSvUrE9q6CWAWuQNz01Jkn9Sa7bTognWMis2W33j4vcJuB0ezqDoH1FeXfXToWT1PZ5qdZhUgf23RPQkpXmErL+goGQHdXnYm4e78vyayQMdEx22cs0AslaSa8wKEkB3oFTO+5/zHtwNYQCl9uM85ywHso5RuMmcs5mLcJkPna5SfA2inlO7pc3wSpbTk/P8fBbCcUnq9ueORhIkf03KEL1cGbsipm7DEh2GPbrybgVbhMflUqvu0PzzYXPW4fMI1BZSC+apoR3xs9ZJ5gEm1VwAAPJ2i7fb670qFetX8gV7vtneq+Xjn4wodh2s2r7sL2HcnpNh1fDgPxPhePneZqOz6/KcDiAmn6cYjAateOmXnXrcGABakdZy1V+nH7URdTYpLjKzS7uLIfQ+f13bDax80qPimLw8DgFAu6/j8wFNFnp0dJtv9zPGamPrCgnudtCyO0X19Qp2864W0zzMjmsttpbPBSRdLJWafnCSEzAfwCYC56C2TfYZes/Q/KaWl5+/HbwAApfRJc8djDsZzMnTBmiMfvWP0QK81xz0Appw/VgXgQUqp2ZvzTq+4z6lo8k1lxqizDgSL21XnPeu7QqeAjGmEdXU/FTUovKoOpT7eLteaxtW7P27qlpKb6n+kbDADJq4trp7FX+zYJWBY7MsUp00NV91Y49K0T4BeJXWjuT3jlXQ7rfNV7wXlIj72myj81CYACC5TxIbUKaIsHNKoKDvhEa/p4F3sAWt1cKjfeeg9hY7DmWiWC1KqP/zOodj5hfkm61FSEtL1ytIHUnLcQlcBxstQTOyqkhxI+ljprLk69NKM5HaxVPLlWFyIEPIyestkOgDZ6B2zj0avEC0BkAvgoX5DTOOGcZsMWSPvPhj9IYD7RvJevktZrs+crzv4rjXzCDFOafgKhH5XvDX+ZOWKSGPHdQ0lVF6Sek3z6RAySPJR6xOYc3Tzvb4gZETJiVEwOrVn3UNSUNWISoBTmuakrSi/bTzp6pgNxq4kbeqm1+cBAF/OlC3JbDeZHYsloAy0Jb945+pV7Ivj57UeXmV3vPwWn2GxzOb5tfOvn2LvO35sPumdEDIJZ32nJr065w5vPWGPJJGjO0pPJtz1JEV1AAAgAElEQVR57tQkFugVby9jIM3obZw2aprZxsDYkiET8u6D0eEA8gw9n1JG6xKUcNYz4mchRyC7IFx1VdOsdKs9mPpEY4/G0WzaI4vak8/M7spdMpgOTXHotJTjq2+aCkIus94wB+6NB6JZmqIRTT6xGJbmnrQ3atmUE2LquMYjlDKqsBseaCEE/gCwIqG1mkVh9p09c6LTkK7S46JmqieTLhyT+gflP/TMwQkgxGyDFDOL8rLffPuwN5uabodaxuK0PR/1cJbUKWAVRiDtYqeVd76Q9lnWjJYKW+kMOCCWSp63dBBXCrZkyMS8+2B0NIAVQ57Elrd4h/+U4xKaGErYettN7Dw/lm6M/718bQQwctmBIaFUt63xeIyfqmHNYKdkhy+IO71o4wIQMiaCfY6dfyYKur8ZsYnm8tIdseKWJVEmDGncE7xhXxzfoXM5AERmdsW7yLXjXmpAJWPXVPzmxQPIRYPlVHF4+tOPPiMe7YDGUHi2NdV+tv/pdju1yujJsKGIDpod/4+ImwIYwgoayfundFZIXkn+ROmkUV6tpTMdgCCxVGLTZzIR7JdeesnSMVxRpP9W0Q5g50CvcezrJX6L3ssVzfnGX+hRNY2w6LicdDE1rSrX+ueSni3Mb5222Bwj8wDA0ak676j7JttD2xE12DlxC9efTpizKgpkbJqQeaqqEof2t0MAjOhzFqodmleV3elHzPQ1G6+wHasK7d3qJgEAYVDt2aEZ97Y0HB51FnhpKrsrhPYXprP8Wpt9fVqaUhJnzvUBMZ0pcV8Udg5O30etd1iWm5biIpOZ7OsY3NkQeG1ZvDrDd1pKJ88hGEbuircJXD1/mLRSpGPT+BktFQICmC0htFJ+EEsln1g6iCsJWzJkYtJ/qyhBbzLkDgCUUsZxQmaK/7K3azym/RnBc2ifSMjIbn5XIr9WrEt4J/s+X7VeYJ6GUAAumvaKO+qOdgxmrQGA/rr2pjO54jmrR+oJZyxEr5S5NT7VBTAj7vvYUrAr017rYvYpt/GGVktr3IIzgwFALmALg2uVdrgCStB8e70XETKZinq+74WR+4l11YF8rTouUzwjEGb6HBkOh/dz1LoAUVvTmdDa6kBiIucCPqN32FSeHOKq645O9wzjj6AsTQrcJwb9HLpIK+6sPOul6PQ3VWzjgIc8d+2qtnQQVxK2MpkZePfB6Aco0bzhGfZ7upv4tIjF0YxKbPFKpEPt1HQobW95m9LNrKPPgYqKjGub/vIlwIBNlxTQHd12f3ydd8CYqhV71D8TR3S1y0f6flFXYOGWwsfDCMjV8sffYDRU2Rx+w24BIXACgOWJbRIOQ01q2WJJ6jKcY7pL7S8pxf/7xjv/+ilq3XpzX/uapNOJ+776OJwAJi1lt/Pta/ZF7S6tF7oP3WIwBGEd5QWvnP1E46hRXem+fLliqcTsmmdXG1fcH1JCiD8hJIYQIiGEFJyXEO/7+pOEEEpGOQI/DJ+FbX+0yiP8j5W2ROhyTlSvSHoybj/H3InQ3I606Gub/po6WCKkY7GUH+/ckzLWiZBz+3cxo0mEAGB90QMaWyI0MDwi9NJrBJILH3c48RotGY+p8Z3TtYLvqYnte2z3d5+tX5KbfsLc1/5z8eolDzyzv17LZleYcl03tdz/4xOHou6W/n4KlDaNZA2pa8i0GzYcmPnF1NWxDMiI1hgnvGnpAK5ErsQ/pjoAT1BKxQAWAHiEEDIV6E2UAKwBYNbtxUfeX6kmLOZbc15jPNKlcWh5OvH55GPSbYv7eC+ZA2Zz028nF3RmriAYWKZAzeF2fnjrU+c6nD1G3Lw8EgRKaQFP9tuAAo+GMqNuWbJAb297MhwCeWtg64X/14v49paMxRwEr2xdyrbTX6I6vP/9f66dWlFy2tzXLgmYKN5+8B2HTgfHDBMvTXZIY9Z8fmK/3EPdlTDSNY5OXh+1Y+OL3HMegdG0935wJVGKXnNwGybmikuGBnOzP//yWwCewtg4674LoGcMrjMuiK5dkvxE7AG0KDwXmfM6bL2m546arxIDFTVrMUgPhVxg1/j+HU/Xyu0cxlSkkK3raXdsOWyHQRI0w9bgKBZUbx3Xo+JjQWdNxMUm+FZ37jQKqCwZj6khBOzQDc1TCYeR9D38zusvRPk1N8SZ+/o9Ti6e2w+/NyM/dFK0qdf2UnWHfPnn/sU7y6JPgNK2kayh4Dq47Vvy6Monlj8klXEFOaaO0YIcFEsleksHcSVyxSVDfTnvZj8LQCohZDOAOkpp7lhce9XKsk4AH4zFtayZHq1d+7NJf0/8uvCGRRQsswoY2mu7au6r+bzcSdcz6Ch1h6NrxQe3PSXXcPlm96vrB3VtfF4C6INHs8jKslvSWGCbTWzvSqGrboY/gN6bBpvYazisQstGZHrYHOoYvKHZBYTWXzhGAM6Rl5+c69bdmWLu6zNsNm/3k6+s/Gbtxmja65xuSli35/+x7siZwy3OWnnySBeRuIZO37HxwIwvp66KZXpFCsczFQDGRG36auSKTYYIIdcDKAfgj16X3aMAXiCEnAMQCKCZEMIQQjrNGMY/AajNuL5Vk1g/P+XxmIPqRrnI7KUoX2VNzp21R8GlukFVnJs8fAo+3vk4T8/mjLkqsWvLR9GEaRuV67iDyqUupH2WTWnaAHh67zBGz7q4a9LqxjPn77nF4NsxPv6rW7uB/1kg8BnG7vPndk+xUyrGZEfko223rnz2wT25DDF9suEraws7+vuL8zZXJ/8F0K4RLsP6ZvI1UTdsfJFT4BEYM45LZ4fFUsl4jd3quSKTofNu9k+h10SOANiE3tJEGYCg86fVonfnxmy7N6tWljUA+Mhc61srMq2w88Wzf4v/9NwtCyhYZpfOn9mVE7et8bdQFqj/YOdU+YdmfrH9YR/KYvkOdo65sJNlZnGU8aMW/tskebiSmMGs9gqFqDpFF3dMakVC89uqWAgHd22YaGGnFKAXb5QOWq3rV8/t9uZqtdKxiOFsxPy5t7/4hlzF5UqGP9s4CMB5KOvH9f8X80a1g06ZPtJ15FxHtyeXPLriyWUPSmRc/phUCExINXrNUW2YiSsuGTrvnvsxgGRK6UYAoJT+gd4dmp/Qa97aA2A2epOkI2YO6VUACjNfw2pIaZyd/njsIXltj+9YqP7S9c0nTi5tP7uEAI6DnSSZPDPp2IY7w0CI2xjEdAkcbXujffvbIozSOiCgPSzXReU9qp2lq42uumnaC/+XObOmUqDdkvGYE9dA5TwXsSzxkmMKuc/nL+7hs/T6qrGIoc7bL3jr4fcnNLh7JA5/tvEEdzWHf/fb8zPW1Gf8CVD5SNcpdJsYvmPjq+Ffi1fGjaPS2Ws2DzLzcsUlQwAWA7gNwEpCSM75f6+i14fqTfSKITqgd2fIG71lNLOxamVZI3qbqa9oFDp+9/7UJ+I+yrtzDkPNv/vC0msUt9YejZkkL18LYFD13bTIZTG/rdg+D4SM/UQRw+hcG5+rAUbp7UTBrCm5m2eiqK4auqpm/k/hnRC2QsAusmA4ZscnoidKIFLFXHKsoz34/YPPyMgIx9WNRW1n53zzgf8sSpg5+zTMMKjCAvh707695l8J/5YK9ers0Sz11ZQNy2/c8CJb4u4fQy/0l1kn9eh9wLdhRq540UVCSDB6xxF/oZRuI4RIAJwGwAEQCUAM/H979x0WV5n9Afx7ZoZhgBASQkkjIT2kkqamB0hHXbux5mfPbqwb265GUVeNvW00uroa25q1rsaWGNK7qSRCOkmADJ2hD8zM+f1xB6UMAcLMvQNzPs/DE+bey32PhsCZ+77vOejIHvwfsSa5Xxco65dUafyptl05I3Yv23dTmIP1quxyCqwuPnN91udZ/o1XlAYA/DLl4tV7hpw3HRpVH+6S/fIanXVPQmvvM+7k7I1jsuZMdkdMvsTB9vKYqxbkESmNWqOPV6zrl1E2TeOwPIoZjqPfR2yzlRrq7NrcPWDwzkX3PTYQ5KG+fy5cnrxy/cLPPxnjqVYZVUD5i+Pnr98YOSyutW18hhYcSXli6weOoGpro2sONXRvTFrqa1oH0d61xydDvyOiYACHAKQy86XOwycBfAPgMgB3AzAC8GQBRiTEH8sH8Konx9BCpd1Y9uzOe9a9ufeWUWolQl0rzhy4KePTiiYSIcdXiTf8smfIeTOgUSIUXLxhq65yzzlX063hV220jM6aNdgdMfkaHekDq8o6/V4cMDPS1O5LEhBB13dOTiz5OQ7UPj76SNq4x959LQXMFWrF8mX8hVPvWrT4uF2nO+2J+xuBwL9vXT7n+S1vpRgd1Qea/orGHQwdMPyKuU8N/zQmztt2nZkBvKN1EL6g3SZDzrVDWQCKmLn2NupkADcDSANwMZTHo3kN7+B2L6EdrVnYlzdk793JS3KOFvabVtMnydOGFR/YdIX5mx46cN/GrnEAVR9d8ZcNx6IGTVcjJleMVvNJU9G/BoBa/+9r1uGb95CHSxK0ZyXm/r/X+qoOor4O8mzBVW+g1yOwb2JOBIjr/LfG7d4+6c7Pl2+FirupDvYfMuKqp18zlAQEtmZK66yG5xwft+Lbv/cam3/4R4Crm/6KRpBO99GgxGlXz31cl9alp7dMnT0fk5aqWgLry9ptMgTgBSiPZ8OcW+gdRPQRgJEArgAwAcBfANzoySmyGgnxx4qdMbVpVQ5DxQu77lz7+u47RtjZ0KqaOS2RkJe8alr+xgsI6NzYNdU6Xem71y3aaQ7rPk2tuBqwV1eG5CwughueNnYuizjRo3iwR4tUtneFJ0f7135tCfJzaxsJb2U0OSJ6z8ytArhOSYHL1/4cf82qb5OhTuFZAEBBp7Bulz775uAjPaPWNn31uTGBOz618Z05T+14b6fBYWvVDrpSY3DYfZPvjXtwyu0Hy7TddXYcwJsaju9T2v2aIW+yJrlfIJRv8EitYzkXvxUM3P/a7jsCbQ4/j3WYr4/YZr36zFebwq35Z117U+nnn//udYtOVpgCR6sVmytdzjyVrKs+7JZeZ9fvenxHh6pQqSvUClZ7WdaIefcGESmNRbtlVG0ecrzYZ3blFWb67zZvDB0GUJ0F+E/fvPCnX8ZN8nhj1/ru+/SdXy7auHYaKWs2PaJcZyh4bOqCHQdComfQWTZXNAs77PMPfb/xqrT1Q3WA2k9or4pJS/1c5TF9lj4pKUnrGHxG3z73VJ848XoVgDlax9IS1Q699Y29t2/85mjiWAfrPbq+qjZ/W2nO/2V8mhZiKznr4uGSwA4Z/7rhgQKr0TRCrdhcCSn6foOhYv00d9yrf86onYPzxksi1EoGnTG484DV+3QGW08AKDPpTdEZ5QGk0VoytQV0tHez67C5Mtu/d+3jU/bs7L9v4JBV5i7hqhYg3TZ8TN/TkeHbp+z5NYiAAE+M4ceOgJnpO/r3qsjeuLXrMDuT7txLahDp9oUNil7Z9/zyEfnHdnapKIkidWZUtsSkpS5SYRzh1J6nybzVMii729qEtKL+B+9Kfv5kSu7QOIA89m6uvjBrdtotpz8pCnBYz9rUtCAk7PA71z9gqzYYh6gVmyv+FemHjcWfuWUnCrGuetrx6xqdDhQtU54f9fuCWDYiwqajdr3Fvr6uQ0qnBEZVNJiieuWVpxKiz5z22NRVY5LHTR1/8yPP5FYZDEc8Oc6Uk/umfvb94g4DSjNXAXC05l7FxpDwe6fcN+3hybceKDcYU9wUYmMYwF89PIaoR5IhlSXEH6sC8IDWcTTF5tBVLd13S/ILO+4aWO3wG6jm2ANLD22dl/VVmB6Os46bFdlr77/n3R3i0OmjVQrNJbJXlHTMfdIBwC3blieeuGSLgdWbimzvCk/G1tl2XRhiNGsVi1Z6TyycZgiprl8MUf/2Uw+PDy/M36x2POk9+wy67NmlXfJDQjzaQ62DrSry9V9emXnvgf+u07Gj1cUn93cZPPLyxH8M+e+gKWsdntt4syImLXW7h+4tGiHJkAYS4o99A2Cd1nE05lhx77S71j53bHf2yHiAWlU5uaUmFWxaPTM3eTQ1sQD5aJ+Y7Z9cclsfJp3m66/CzEm7gWq3bH83VQXmDc2e4o21TtqskqzYrsx/7KDKjAxQvwCn9qjfzNxxOqOjTr8yIztMHzx2z7Dg8tLdagdU1qFj6JVPLx3z6+CY1Z4ea9bRHfGf/JSkjyrP/aXVNyOd/v2Yi+OunbvYcTi0+zpu5VOneioBPOzG+4lmkgXUGlmT3C8WwC54UUJqZ7K9e+CGDTvOjJkIkH/TX+FGbK++3Pzt2u6V5plNXbpv6HnrV0266HxQ6wqtuUPn/P8kG8p+cMuCaQC4dP+9GyLL+qjRysRnMLNj0BULDuj0jhEAwHaUJWzO03lqzYo3s1mp4Mj/uhbBQXXKU1hMATlXP/dWrtXoP1SLuG744b9rb/ru6wtU+DvhbwZPWf3OoIuGMVHrKsM7xeal7Vm87UO/QFvVsKavbtJzMWmpkgxpwGt+EfuahPhje+FFJdbTS3oevjv5ubQdZ8bGq50I+dnKC24+/dGO5iRCm8+fsWbVpIsmeUMiFFj2235D2Q8XuOt+EcVRaRFl0T6z00ktRKSrKOp65vfXegRZ/XRubyjaFhj8OTR6do4O4DpTPCGVFREfPnZvkN5uO6ZFXB/NvSrugTsfSHUQnWn66lahS9I2zPxo9ZOVkdZCt6yX2hs2eNTliU/FfDFwUjID+a24VS6AZ9wRk2g5SYa09QiAoiav8iA7k/3fB69NfmrrA1GVdpM73tm0SOeqvKO3ZnxsDrJXNJkE/DT9il+2jJqaAKLWbZd1A72tpCAo//lgAG7rIj/30IJygvb/be2RJXNInWJ8uZ39Nf13p6WAjvbo7lMLMgCurH08wlIU/e5TD1WRw+HphMSlXUNHj772yZeryv39W1VNujm6lJf0/eDHp6fOP7rqZzC3vuI06fXvDbkk/pq5i21HOndbe45TZ4/HpKUWtzoWcU4kGdJQQvyxXACPaTX+6dJux+5Zu+TA5swL4gFSfcqgT/nRnddlft7BwPaz7gRjwP7fi2/+JaV/rGZVpevhUPPiVMDutqKTw7ImbjXZOmhaI6k9s5wa1an268zIAJ+u6h3SzRrbZVTxr0DddRLR2Vkxr730xBkwa1ItPzusa+9LlizrfSoycoMKw+nmHVg16701zxSGVpVsdMcNLcaQyLunLor7++Sb91cY/FqS1P0GabuhKakzpLETJ17fBaVPWoRaYzoYjk8OXbnugwPXDrI5/KLUGre2Cwq3rZmWv3nM2SpKA4CdqHL51XdvPRPR023rclorNPftZF31oanuup/Orq/402/3GAg61Zpo+hp7VUho+NDvzxChEwBUmxDW51RFIbnxyV5bExRW3auyzLCuqsivTlIfWZjfbcDp43uSx04IBdUt1qgGh8Hg/8202VE9czLW9M3KjIaHa0IFV1WGXXpkfQ9rQMCPqZ16hbnjjaE5MLzrigFxoQFcuS4m/1THZnyfXRmTluoT1dG9lSyg9gJrkvtNhUq7y7LKI9KXbL+voKw6SKOnEGy/xPzdL1EVmTPRxA+5Kr3e8t51i9JKAzuetdaQmoJKf/01sOC1kQDctstu+uHr1/bPH9fqpq7i7PrMfWCtf4ei3/8/n7+jaEuHSpvPtzs5tipsQ1WBscGi/ZWT4ta9dO1tE7RIiGokbvp5w6JPPogloKMa450Midj/4OSFZcWGoPHuumcna5H5qW3vpvUrNE9ppGDjBzFpqTe5azxxbuTJkBfo2+eekydOvN4LwCgPDsMrjlyy/t39N/ardhijPThOowz2SsuNmZ/tCK/KT0ATiVCFf0D2Ozc8mFFhCjpbd3pV+VXlnwnOfTIYQKcmL26mDhUhWVNPXNeXoN0vHF9hCD6xPzA06/cSCAYrHwstro7WMCSv0KlPeffCY4F72Kars7tq4Kn0aALW7B04pA80qth9pFf/3tuGDj8ye+uGMh2zxwuRdrKWRV5+eF1EUceQVUeCe0S6YzNJpcHU4cfoCdG/hfXcOyHrQIGfw1F7FiAfwJ/C77yzvLXjiNbx+TVDRBRFRGuJKJWIDhLRPc7jsUS0jYj2EtGvROTp1giLAHikGFx2Rdjpe9c9vWvVifhpAAV7YoymhFQVpt96+qOTwbbSJqeXLMEhJ5bd+KDFajR5T70du83WKfvRTIDdsh23RmLaguME6uDOewrXCk+OqvP/ObOrqZdWsXgTnQ5+/ebm9IeeD9c/N//7L2cmblm7Sou4ahzqM2jYlc++EWAJCvpVjfF0gP9dOz6f+8b6V48F2SvdNuaesCGjLk98atDXAyYkM1CzJuuBmLRUTxVvFC3g88kQABuARcwcA+ACAAuJaAiA5wE8wcyxUBY5P+/JIBLijxUBuMvd9/3qWOL6v29c3LGkKnisu+/dXL3KT+66IfMzgx/bmuwdlhsa8du/rllksOnVrXrdlLDcV9eBS936/7Bn4YB9nSu7y1Z6lZTnDB7IDEvNa1sg9XUQWl2VuD0wGLlTnzk5JoCz65+7/6N3Zp//296ftIirRlHH0K6XPfvWsN+i+ySrNWb/wsxR//nu0SFx2Xu/B9gtT26YDIZ3hl4Wf+2cR6oOhvV6F8AH7rivaD2fT4aY+Qwz73Z+XgIgFUAPKP1hauapQwBkeTqWhPhjXwD4xh33yqvsnLVo/VPbvz82aypAmi3MHVv0a/LF2T8MJKBnU9ee6tF39wdX3hXBOp0mi7obE1y8fgtZ97p3ATeDZx6+VQ8faRjqDfz1HaPsVaY69YUsQcZ0jcLxOqYO9l49E/JzAS6rf27JG8/NGHj6uMcrRZ+Nw8/PtPChZ+L/O33mLwxUqTGmHxD44NaPE1/asvSAv6Nqb9Nf0TxF/p073z/p7hdj0lJl0a6X8PlkqDYiioaybmc7gHsBvEBEpwG8COBvKoWxEPjj3eu5+PbErA0PbUgKKLKGaLnw2JGY8+PP4wt3TiOgyam5QwNGbF5x4U0DQHTWNhxqM1qzTpiK3h0IIrf+Wxl7esYmo0P9uk6+riyvV27t11kRJqnrVEtweNWw8HGW/QDXr5Ojf/OZR6Z0zc9dr0lgtbx1+U3TH7/9rj0OpUihKobkpJ+34ttH+16Qn/o9wFY33PIf6UsSfaphsLeTZMiJiDoA+BLAvcxcDODPAO5j5igA90GlatEJ8ceyADx4Ll9baA3JfmBj0tb/HUmcApBmXc91dmvpDRmfru9blj4Lzfge+3XUpORv468cB9JmPVNjyF5VGZLzeDGa6JPWUn42Y8mYzLkD3HlP0TyFp0Yaar/OjjAOcnNvqTYvrF/5+OAB5Q2SHj3g//7j943uVFq8Q4u4ats4asL58x9/vsjq55em1pj+cHR8fON7ic/s+NcuP4etNYUh9wN4zl1xCfeQZAgAEflBSYQ+YeavnIfnA6j5/HMAnl5AXdu/ALToHdjPp+I33b/+SX1BRajbtoSeiw7VlozbMj463Kna0qyt4usmJa5ee/7saVpu321MWPazW8CVbl/EPePw/F0EXVd331c0rTRrRJ2mrWxEuE2nU+0XalvRc4wlzj/c2qBdhcluD/7okXv6BFgr92sRV20ZXaMGXLrkzcjs0NDNao47KuvwhBUrH+keW3T8R4Crm/6KOmwA5qcvSWzp1wkP8/lkiIgIylOfVGZ+udapLAA1O5/iARxRK6aE+GMM4DYoHYzPylIVnPvwpsWb/5t2ySRA2ymm7hUZe+dn/Kfa6KhuTg0j/t+c61bvHDZ+Brzw+zCkcOU62I66vdBjp7Kw9CjLUE0TVl9msHcdwQ79b7WPFYT4eWQXZ1sXHZ8/RR9o317/eIeqyvCPHr27s8FWrdrPxMZUBHboPO/J18/fOmzEaijrPFUR4LCHPrvuzTmLd3+0xcD2BrvwzuKZ9CWJblt7JNzH634JaWAigBsAxDu30e8lorlQkpGXiGgflOZ5t6sZVEL8sSMAHj3bNckZk7csWvcU55aHa74jaWTJ/vWXmb+L1oGbbFHhAFV/cvmCtYd7x8xQI7aWMlWcOGQsWeGRmk+JaX8xk8qNcEUd+sqiyDqbITIjA6S0gQs6gr7v3JwhZHA0aGrbpbQk6t9Ji1jncJzWIrY69HrD3xf+bcayS69ax0CDxd+eNOHU/qmfff9oyKCSjB8ZsDdx+R4A/1AjLtFyUoHai61J7kcA1gCoM+VUXB1U8NzOew6aS7tO1iayOnhW7upVA0uPJgAwNHWxTacr+2DevXsKO4ZOUiG2FtPZy4u7ZN6ZBVQPbvrqlumXN+LXGUdu0azEgVB0GvTZ/7qOXPOnmtdsR1nC5jwdAar352sLrOW6rOPfRTKYetQ/l9arz94/P/x0DxB5Ra+3kYf2733ptSVheuYmd6+6W3K/85JfGnZFtIN0fV2ctgIYm74k0aNNaInoGwCznS+zAYwA8AuAmqr5nwL4P+YWT++1e/JkyIs5p8vmo1Zn+w1ZF2z769qnrd6QCJG9uuLazBVrBpYenYVmJEJWP2P+2zc+lOqtiRAAdDE/sdsTiRAx2eKO3qBKSwFxdoUnR9WZTiY9gqx++oNaxePt/AMd3aOm5xUD3KCj+uBTJ2Kff+PZE+CG57Swb9CI2HlPv8alJtM+tceOP7Yj/j8/Pu7fpzx7FRpO2S1WIREaAyARQDdmNkH5/f4SgOUABgI4CcAE4FZPxtFWSTLk5RLij50GsLDUFlD0+NaHNiw/cO0FDF03reMKsJWYb834aH+XqoJmdZIvCwzKXHbjQ2fKTUFe+2QkNO/TZNizpnni3hNOXLzZwEavKiTpq+wVfYczI732sdxQo1f8MvdWHbpUx0SOL0pjsK3+uXGpKef9/cO39oDdsuW81fI6h0dduuSt/se7d2+wANzTOlZV9Hhz1Qsz7kz7ZhWx45Tz8FooSYkaCEBnIvIHYARwlJn/yczpzs229n8AACAASURBVPN70Iyab75IkqE2ICH+2KcPbnjis4ySHg2aKWohstJ88ObTn5aYHNZm1TEqDAk98vZ1D1RW+fl7bV2dwLKD+/VlP3pkYbOpKqBgWHbccE/cW7Scgfw6VpWFHK997HRkoFdM83iz0N4V53UaUrrJ1bkZ2zZOveOb/2xE0+tmVGHzNwXdsvilad9PnLSagQYJnIdRYtqmWR+vesIWVZH7HYAb05ckerx8AzPvAvA/AMcAVAAoZ+Yl9S67EoCm1cS9lSRDbYTVZnoIwPEmL/SwmNLUzVee+TpSB0ez6uSYI3rue2/evUF2vaGfp2M7V/rq4vyg/OeDQZ5ZMzL70K0pBAr1xL3FuSk9M6C09uvyEAxhQHpENaH7iJJppm6VLp+4zFv13fRL1/2saZXqeujF6xfOWHLjbdsYKFR78NCKsr7v/Pzc8vQliRlqjOcsGhwHIAZAEAATEb1Z65IuALYy80Y14mlrJBlqI9KXJBYDuBbqv8v5XVzBulUJuevGUTOLEKb3HrDjo0vviGLSubW5qVsxO0KzF6cBjiZ3wZ2L8JIehyNL+2m+20/UVXAqNqj2ayLSl5kMUhG4GaKnFEzVd7BtcXXu7hUfzJ68b+ePasd0NqvGx0+67W9PnanW64+pPPTbMWmpX6o43l0Acpk5jZkrAHwLYAoAENHjAPQAFqsYT5siyVAbkr4kcTuUprHqstuqrsr6ctUwS+pMUuahm3QwZvSGz2ffOAzk3U9EuuS+vRaOAo8lK3PTFhQTqMnF5UJd5bmD+zLXfVpwJswkO2yagQi6fnNyYsnPkeLq/JPLXp417PhhTTvd13esV/8hly/5Z8eCjsEN6iZ5yEEonQs8jojuI6KDAK4G0J+IuhNRHyibb3oT0Q4oO8xyoWItprZGkqG25zkAqnVuNtrKcm/J/HhnpDVnZnO/Zvu4uF9+mHLpeBAFejK21upQunOnrmKzx9ZhDTlzwbYAW0evXTDuy/x1IX3qN23NjAzopVU8bY1ej8A+iTmRID7l4rTutRcen9YrO0v1BcxnU9KhU/gV/1g6au/Agb94eKhKAPNi0lIrPDwOiKgHgLsBjGWlnEA+gFMAjkLpcdkdwDgoHRR6AThDRLs8HVdbJMlQG+NciHcdgDOeHivMmpN2a8bHeYH2imY/OVkdd8mqDWMSEqC0OPFaxqq8rICCN7qD4JE4dXaddeLJK6Xlhher37TVHsR97UTpGoXT5vibHBG9ZuVaAS6qf04HGN954v7zulgKXU6naYX9/Iz33ffE9I/mXLiGm1Hh/xzdGZOW6tFt9PUYAAQQkQHADijb6wsB9GDmEgATAPzCzMTMfsw8RsXY2gxJhtqg9CWJZgBXwYPrh/qXHdk2L+vLTnp2xDTzS+xfXvR/q/cOGjsTyvZOr0X26uqQ7MWZADcoIucu045fvUXPhmhP3V+0XuGpEQ2mLy1BfukahNJmBXWyDeg6qfAYg6vqn/NnDlq++N5BQRXlu7WI7Wz+ffF1CX9b+NcUB5G7W7G8F5OWqkpTbwBg5kwAL0J5GnQGytOgXQCKmH8vg5ABwGM/69oLSYbaqPQliZsAPOCJe08s3LJ6ds4vIwlo1pMNO6Hyw6vu3Hi8R3+vbK9RX1juq+vBpeM8df+gymDzgLzzZXrMyxVnjohkRp11QlkRAV79RNMbde5ZOSZ0ROk2V+eCqqu6fPzo3ZHG6iqva4a7fdi4cdcnvVBeaTS6q+DmbgB3uulezUJEnQH8CUAfKFNiQQDmuLhU1go1QZKhFiKiKCJaS0SpRHSQiO5xHh9JRFuJKIWIviMij1cbTl+S+CqAz9x3R0f1ZeZvfhpdtG96c1sTVOv1xe9e/8Du7NCu09wXh+eEWNZuhnWf2xuw1jY3bcERAgV7cgzRegZ75Mj6TVvNEcaBzegxJerpOqRkSkBUhcu1jJ3Ky3p8kLTIoLfb01UOq0lnInr0veS5N3tmhodvaOWtCgFcEZOW6qmpNwAAEX1ARFzzAaAAyo6xXQCqoCRGHwLo55w2A5Qii1kubyh+J8lQy9kALGLmGAAXAFhIREMAvAvgYWYeDuBreOipjQu3Qtm50CoGW0XhTac/3tqj4sxsNHOaq9Lon7PsxoePFQeFTGjt+Grwt2YeN1r+PQhEHvu+71HU90BoRQ+vbTci/qAjnV9FUURm7WNk5HCbXud1TzHaguiJhXGGkGqXRRm7FeT1f2vJ3yzEDndPS7Wa1RQUcv2Tr09aN3rMKgDnUhzRAeCamLTUE24OrQFm/j/n2h8CUPOGuxDKU/wCKFNlNufHFc7z86EUYxRnIclQCzHzGWbe7fy8BEAqlPnYQQBq3l2sBnC5GvGkL0ksg/Ju4JyLinWy5h+7LeOjjA62smbvrCoJCj751o0PF1T6B3iku7u7kb2qomP246VoZo2kc8SzDt/GBPLqNVPiD8UZQxpsp8/vaMzRIpZ2gPrNzB1LRsdeVycHZJwe+fKr/zgNZtULIDaD7onb7p/5+lXXbWCgpIVf+0hMWurPHonq7H51/vkmlCasIVCm6nRQnhL9lYiOQim2qNo6prZKkqFWcFb8HAVgO4ADAC52nroSQJRacaQvSTwGYB7O4fF+74rjv16f9V9/A9ub3S4iv3P4b+9cdz9sBj+3NzT1lLDsZ7YA1hGeHGP06fjNRnugtN1oQwpOjW7QhiOja0AHLWJpD3R6mPomZkdBxy6r5cceTh33+LuvHQBzudqxNcfXcRdOW3j/Y8dsOt3JZn7J5zFpqfVbXqhlAIAKZn4cys9+PZSdZDoAemY+j5n7M/OV7CV947yZJEPniIg6APgSwL2sdGy+GcqU2S4AwVAyc9WkL0lcBeDhlnzNeUU7f7nI/PNgakHjvszu0bvfv+quLg6dvneLg9RI54Jv18F2LMGTY/jZDKVjMy7y2pYjwjVHee8YZtSZ3igM1Q9lwCt/WbcFRn/uEj07hwB22d5k2u7tk+/64sMt4IZNX71Bar+Y2Kueed2vODCwqXo8KQBuUiOm+oioN5TlDA/SH/Xc8qG0lLED8CeSJ9QtIcnQOSClhs6XAD5h5q8AwFkCfaazhsN/oDTLU1X6ksQXAXza9JUO+0U53/90fuGv8QQ0+13w0X5DNn960S39mHSRrQhTVQHlx9MMpZ97fCov4ciNO3XQdfP0OMK9/Mi/c1VpSJ1kSKdHYKVf3YXVomUCOtr7dJtakAGwywXFlyX/NP2aX77/BV66y6kwpEv3y599c8ihXr3WNHJJNoCLYtJSy9SMq5aNAMDM/wTQD8pTIRuA2hX/h2gQV5slyVALObPt9wCkMvPLtY5HOP/UAXgUwDJtIsQtALY2dlJvryy+MeM/66PLTs1GC/7+9424YN3X068ZA6IQdwSpBp293NIh7ymCMpfuMZ3Ku5zqXTTiAk+OITyn2Fy3aSsA5ISaLFrE0p506maNDR1d/CsaSXhu/+qT2TN2bvKqPma12Yz+AQv+9lzC11PjVjHqlGCoAPCnmLTU5k6leUIUlJpCYOYUKK02UgBsgvL/mwFIQt8Ckgy13EQANwCIJ6K9zo+5AK4hosMA0qBsY3xfi+DSlyRWQlm71ODJVHB10cnbTn98NKS6uEVbyzdNmLVq1fjEySAyuStONYSZk/YCtkGeHmdu6p8zCeSRjvfC84pOxTb4u8uINEVoEUt7EzmwbFJgn/J1jZ3/+7+Xzhl9+IAWi4+b7fV5t8988uY/72BlGooBzI9JS1Wrx1kDRFRTw+z6WocLAEyHss3eAOBJZvbKp27eiuT/V/sU/fD3A6A8IeoCAD0rT+3+05kfQnXg6Bbchr+fefXq3/oOb3ZfMm/RJe/jNbrynz26TggA+uQN3T3ryO2jPT2O8BwrFx4dcdWDXYjQueYYM9sTNuYXENBggbVouaOrwjZUFxhd7lZ1ALbbFj+3/nj3Xh7/99oavTPTD7382jNLJ+7c8YbWsQj3kydD7VT6ksQjULbcW0cV7157yZnv+7YkEXKAq1dceuuatpgIdSg7sE9X9rPnax85YE84Ot+rm9GKpvlT5/62KlOd2kJEpC81+R3SKqb2pu/0vPE6k/1XV+d0gOGtfzw0Prwof6PacbXEyR7R69VIhIhoUK1Zh71EVExE9xLRU0S033lsFRF193QsvkSSITcjIhMR7SCifc4K1U84j/chou1EdISIVhCR0dOxpC9J3Dy5aPNlk/K2TySgU3O/zk5U/sE19245FRk93ZPxeYKh2pIbkP9CCKh5FbRbY/zJCzcZ2L/NlBcQjSvPi8qtf+xMuMkrdzu1RTod/PrOzekPPR92dd7ICFz+6H3DgstLd6odWzN9B+AvagzEzIeYOZaZYwGMgbKz8WsALzDzCOfxlQAeUyMeXyHJkPtZAcQz80gAsQBmE9EFAJ4D8AozD4BSIPEWNYL5aNkzP4Cav+W+yuBX8M6ND6bkh4RP9WRcHuFwOEKzFx8GHNGeHsq/ylQ4wpww1NPjCHUUnRrR4GdhZoSpzZSPaAv8jNwpek6OCeBsV+cD7NWdP3nkrp7+VdYUtWNrwnYA88xxsVq0aUkAcIyZTzpLuNQIgpfuxGurJBlyM1bU7E7xc34wgHgAXziPLwdwiVoxLVqx8hUALzR1XYUpIHPZjQ9llAYEn69CWG4Xlvf2GnYUTlRjrFmHb9lH0HmymrVQUVHmiHDmurXBHEHcx07k8RYLviSgg71Xj4T8HIBdbkkPrqzs9uHj9wUZ7LajasfWiCMALjTHxWpVd2oelFItAAAiepqITgO4DvJkyK0kGfIAItIT0V4AOVBacxwDUMR/FBnLgNLCQzWLVqx8EGfZ4WYJ7nz0rRseKrcaTR6t0uwpHUu276CKLdPUGCustNuRbiUDVEm6hDr87F1Hsb1hbSFLBz8tt0+3Sx3Dq4aHnWfZx2CXfcAiigr7/usfD1bqHI4MtWOrJwfAbHNcrMvikZ7mXEpxMYDPa44x8yPMHAXgEwB3ahFXeyXJkAcws905r9sTwHkAYlxdpm5UAIDb4KJhX2549wP/uua+ALveMECDmFrNvyo3w79waU8Q/NQYb27qn4sIpMpYQh060hkrLBENOntnRgTI37MHhPctnxA8oHx9Y+ejzWeGvfZSkhnsuoq1CkoAJJrjYl22FVHJHAC7mV1OK34Klfpf+gpJhjyImYsArIPS3b4TERmcp3pCqUWkqkUrVtoBXA0guebYqV79d35w2Z+7sU6n6pMqdyF7dVVI9uIzAKuys2Kweez2QFvIODXGEupy1bQ1O8I4kM+h559oWtQYS5wx3Lq2sfPDjh8Z+4+3X0rDH8sO1FIGYI45Ltbl7jcVXYO6U2S136xeDKWmnXATSYbcjIjCiaiT8/MAKIWwUgGsBXCF87L5cPGERg2LVqy0QvmHtOXQoNiNK+bMjwFRFy1icYfwnFc2MJepkpzo7FQ1Of0aqTvTThWcjA2tf4z8OLxar0vVIh5f0Cc+f4ou0N5oAcOJ+3ZNeuA/7+4As1q9HiugrBHarNJ4Ljn7jc0A8FWtw0uI6AAR7QcwE8A9mgTXTkky5H7dAKx1fsPuBLCamVcCeAjAX4noKJRCiO9pFeCiFSvLyk1BM7+ddrkeSsPZNqlT0ZpNXLW/RdW0W2PK8Su36NnQV63xhLq4IjqGHdSgcnt+iDFHi3h8gY6g7zc3ZwgMjkYTzrkbk+Nv+uHLtWDXa4zcyArgT+a42HUeHqdJzFzOzF2Y2VLr2OXMPMy5vf4iZs7UMsb2RpIhN2Pm/cw8yvkNO4yZn3QeP87M5zFzf2a+kpmtWsa5ePmKMhBdCGCvlnGcq4DKjON+xR8MhtILzuMCrR1yBuVN8HjDV6EdA5nCqspCGuwey4wM6KhFPL7CYODgPnNzQkCN/3K/ceWXsy7autaTfcyqAFxmjotd7cExfkdEtxKRo9YHOwsq/ljrdYGzO71QgSRDPswcF1sIZRrP2+p6nJXObi0PzkkqBaDa1va5abenEdpOk1pxbkrM/RusTykM1Q9hZR2J8BBToKN7z+l5xUCdWjp1/PWjfyVe8NveHzwwfDWAq8xxsZ64t0vM/C4z65hZB/xeIPZx55+vAFgP4ASAFWrF5OskGVIZEUU5s/6ajyLn8dxa7wgcNeuOPM0cF5sPJSFqMx2Ow8xPb2VYVSsB0K2o98Eu5b0mqTWe0E7hydgGzYh1egRW+ukPahGPLwnuUh0TPqEwlcGNVv5++o3nZg06dWKVG4etgpIIabKG0+lNAHZm/hpAXwAvOo+vBDBEs6h8jCRD6ssAMIyZCUAogBAieh9Kheo/4Y93oKp1vTfHxeYAmAZgj1pjnqvQgm/Wsv2Eqg0dZx++o5qgznSc0FZ5/sBoZuTXP54TairRIh5fE9ar8vyQIWWN9ijTAfp/Pvv3Kd3zcta5YTgrgMvNcbHfuOFerXEFgP3OzyOZ+Yzz8zgAem1C8j3yA15lzgrVNe8ya3ZxOaA8Gv0rlFYdDEDVKRlzXGwulCrZW9UctyUCy4/+pi/5coyaY8ZmTNnsbw+KVXNMoR1/6jzIVmVqsJg3IzIgUot4fFGPEcVx/t0qkxs7bwBM7z1+36jOpcWt+VlVCeASc1zsylbco9WcMwAdAdxb71QvKCUd1NpF5/MkGdIAEQUQEUMp9e4AMBbKE6MBALpD+XuJqdW1WJVfxua42CIo2zkb/UGkFb2trCgo72k9CKotZtXbDGXnnb5EFjD6FirLiyqof7AihGNYqUgsVBA9pWCavoNtS2PnTQ5HyIeP3N030FpxLhtAKgBcbI6L/encI3SbdwBUM/MG5+tsIrobyhvlVyDfc6qRZEgDzFzhnCabCICgFGY8DiATyjsWBvBVTediZlZtx5c5LrYMQCKU+WpvwWHmpL2AbZCagyYcvW6HDvqeao4ptFd0agTVP0ZE+tIAP5cd14X76Qi6vnNyYsnPsb+xazpUWSOXP3ZfJz9bdUuKD5ZBqSytyq6xZkgEsK3W6/0AHgFwAMobUy3XMvkUSYY0xMxbABRBqTTaD8AYKDsLCCp1tXfFHBdbCeAyAP/VKobawnI/XONwmKepOWbHik4ZfQpHtcmGtaJ1LFnDIuo3bQWArDBTowt7hfsZ9Ajsk5gTCeJG+8OFFVui33vqAYfOYW9OD7kiKJWlG616rSYi6gkgEMCCWoenAIgAMAHAQgDXahCaT5JkSGVENIeIJjg/7wOgM5R/EJ0BZAM4DWXqrNxZd+IVIvJXO05zXGw1lCRNtYXcrgSXpuyh8tWqN0VNTP3LSQIFqj2u0J6frdtIV01bsyJNMmWqMn+TIzJqVq4V4MLGronKyR7y5nOL88l1D68aGQAmmeNiG12crTZmzmBmYubfah2LdB4j59Z7eTKtEkmG1BcPYLNzzdBxKAumOwIwQlkv1AvK30tnKIuoQwGcIqLqWgW6VOlJY46LdUB5QvWqGuPV51ddlGMqeLEz6Pc6HKronT94b4g1UrrS+ygd6U0VlvAGBQAdgdzHTqRl406f1KGTbWDk5IJjjMZbcgw6dWL0c/987jhqVWyu5QCA8ea4WCmPIBolyZDKmPmBWpk/MXMoMzuca4iSADzr/LwjlIauOihJ0Q8ADAD2QXncqwpzXCyb42LvA7AIylomdTgc9s7mxUcAR7RqYwKAg+3Tj96s+pM44V0sLpq2AkBRB+MptWMRQGgP69jOI0rOunts3G/7xj+y/K09YK6odXg9gMnmuNgMz0Yo2jpJhjTUSFPXLUTUDUoCRAAGQkmCPgQQBGAwgE1qx2qOi30ZyrSZKm1EInLfSmYuUv3pzPmn5m72c/jHqD2u8C6Wk7GdXR3PjAg0qB2LUHQbUjrVFFVx1p2u07dvnHbH/z7bAGYbgM8BzHLukhXirCQZ0laDpq7Ojywoa4fsULbflwH4CMqUmh+Aj7UI1hwXuwJKt+RG5+/dIaR423au3DbNk2O4Yqw2FsWemSmJkICtos9gV01bcyIMg1n5dyk00GdiYZwhpPqs637m/fztrOtXf/c3APPMcbGq9oAkok5E9AURpRFRKhGNJ6KRRLSViFKI6Dsikl53XkiSIQ25aurKzFbnNFlNu4kdUJ4I/QtKorQRgGb1McxxsRsAjIey3snt/K25p4xFb0aB4OeJ+5/NrEM37yXowtUeV3gfPzJFWss6NmjaSn4cVq3XtZnWNe0Q9ZuZO46Mjsaq5TsA3Pvis4+96FzzqLbXAPzEzIMBjASQCuBdAA8z83AAXwN4QIO4RBMkGfJSzJwC5enQAij/wN8HcB6A2wFo+gvbHBd7CMD5ABotinYuyF5dFZKzOBvg7u68b3N0KY042r1k8AS1xxXeq8Tc32XT0LwQ/1y1YxF/0Olh6puY3Qs6rv+GrBTAn2LSUl/TIi7nE58pAN4DAGauYuYiAIMA1BRVXA3gci3iE2cnyZAXcT5SHe78vBuUnWV7AdigdDReCeA2AK52TKjKHBebB2Vn3H/cdc+InJfWM5eNc9f9WmJu2l/yCWTUYmzhnYrSR7pcSJ8ZGRCsdiyiLqM/d+k9O4cAznMeOgVgYkxaqpbFYvsCyAXwPhHtIaJ3iSgIym62i53XXAkgSqsAReMkGfIu4wHsIyIHlGrUJ5n5WigJ0EUA5gG4A8D12oX4B3NcrNUcF3stgIehPL06Z6FFqzc6qg6o2oC1xsDsUTuCqjtLgUVRR2nBoGhm5NU/XhSqG8rKUwihocCO9j5dpxVkMDgZwLiYtNRGq1WrxABgNIC3mHkUlLWeDwO4GcBCItoFIBjSb8wrSTLkRZj5ZWehrZqPfs7jnzCzgZn9mTmEmX/QOtbazHGxzwGYA6BBT6fmCKg4fVRf/OEQkPqd4clB1VNPXBeq9rjC+wVQ6BCb1dSgppdOj8AKP4OsG/ICnbtadw6Zd2ZOTFqqN/TwygCQwczbna+/ADCamdOYeSYzj4HyJL3BwnyhPUmGhFuY42JXQWk4u68lX6ezV5YF5z5RDqUxoeomH79sk579+msxtvB6VJ4Xle/qRHYXkzwZ0lY1gD8jyXI7kixe8aSFmc0AThNRTQ/FBAC/EVEEAJDyZu9RAMs0ClGchSRDwm3McbEnoPTU+bS5XxNufnorwzqi6SvdL9AamBuTO3mUFmOLtqHw1DCXPyMzIgMi1Y5F/M4MIA5JFm9MKu4C8ImzXEosgGcAXENEhwGkQSmbommLI+EaMatXVFj4jq5r994H4Hko8+guheV/lUxlX8erF1Vdl+27d31EeZ+pWo0vvJ9Vn7FtxGVPjCJCncXUDDjiN+Tl6ZSmmkI92wFcjiRLg3YpQrSGPBkSHmGOi30FwAwouysaCCo/epBKvx6rblR/6GqJ+i28PHqSVuOLtsFg6zbCYdc36GlFgK4kwHhIi5h8FAN4EcBkSYSEJ0gyJDzGHBe7DsAoKP2BfmeoLi0MzHtaD4JmlVhnH1pQSSC9VuOLtkFP+sDKovAsV+fOhJmkErU6cgDMRZLlASRZXPaME6K1JBkSHmWOi82EspDwCSjb7zksO2kfYBusVUwjMiduMdk7jNZqfNG2FGfGuFygmxXp31vtWHzQagAjkWTRrOq+8A2SDLUTRGQioh1EtI+IDhLRE87j8US0m4gOENFyIlK90aQ5LtZujotNApAQnvP+V3ZH9jS1Y6iht+srLjh1uRQ9E81WeHJECJRpmjo4kPvYqGH/MuEW1VBq9MxCksWsRQBENJOIHETEzo8fiOhorddMRLKrsJ2QZKj9sAKIZ+aRUHYxzCaiCQCWA5jHzMMAnAQwX6sAzXGx61CZfAeU/jyaiD96zTYd9JIMiWazV/SNcdW0FQCKOvifVjseH3ACytqg55Bk0XKHz48A8py9InsAeBVAAJTdbKsBVAAo0i484U6SDLUTrKh5l+Ln/LADsDLzYedxzfvipMxPyU+Zn3IZlKraZWqOHVwRktW3YKwm7T5E2+VHgd2tZR1dNibOjAhQvaFwO7cCwCgkWbY3eaUH1Oo6fwLK78c/EdFTUJpjPw8gEsoO2QcA+ENptSHaAUmG2hEi0hPRXigLDldD6XjvR0Q1u7augJf0xUmZn/IulMXVv6o1ZmLan48TqINa44n2o8Tcr8TV8dwIwyBWegeK1ikHcAuSLPOQZNGy9+JrUBKfzc7Xm6EUShwK4CYo03dhUHpG6gB8qUGMwgMkGWpHmNnOzLEAekLpcD8USj+zV4hoB4ASeNEP7pT5KUegFGl8Bq3sbdaUXgUD9nWq7DbRk2OI9qvwZGyAq+Pkx2HVep205midDQBikWT5t5ZB1Os6X/P3vdI5TeYAsBWAEcBpKFWkqwG8RUSkQbjCzSQZaoeYuQjAOgCzmXkrM09m5vOg/NA5omlw9aTMT6lOmZ/yCJSkqEE9F7dgOKYfuVUPQH5oiXNSXjC4B7Prmll5ISaXx0WTSgD8BcA0JFk0+7lUMzUGpZVQVwArAdQUg+1DRF9DqRztD+V3pj+A252f6wEMUT1o4XaSDLUTRBRORJ2cnwcAmA4grVZfHH8AD8FL++KkzE/ZDqXj8xNQ3nG5zbhTMzYZHaZh7ryn8C3+3Gl4tTWgQdNWADjdNSBE7XjagR8ADEWS5S2NF0kDf0yNXQllreXLAK52nisDcBjKAupq5+tSAJsAVELZZShPBtsB1bdZC4/pBmA5EemhJLn/ZeaVRPQCEV3oPPYWMydrGuVZpMxPqQKQNHz58C8A/BtAqxc7G6uNxaOz5g5sdXDCpxGRriyvZ4GxZ8MHGEWh+iEMlBAQrEFobU0egHuRZPlE60CAOlNj/wdlcXQGM69xnlsFYCaA852XXwjgb87r+zqPPcHS06pdkGSonWDm/VAWJNc//gCUnQ9tRsr8lAPDlw8fD+BeAE8CCDzXe804PH8XQRfntuCEz7KcHkGdXSRDBp0jsMJo2B5YZTvfxZeJP3wG4G4kWbxp+u9/hAAADzhJREFUWrEvlJZB7wMYCcBERLHMvBfKGqH9AMYA+Dcz/0REAwDkMvMVmkUsPEKmyYRXSpmfYk+Zn/ISlPn4ledyj9DSsBM9i4dOcG9kwldZMod2YUalq3PmUJOqZSLamEwAFyPJco2XJUKA8kBgNJSn5qMArAHwQ62u85UABgF42HlsJoB7tApWeI4kQ8KrpcxPOZkyP+UiKPWRMlrytXMP/SWbQP5NXylE0wz2biMddoPL9SGZkYGRasfTBjCAdwAMQZLlO62DaUQGlKmxmrpGywDsYeYRUIrDTgcwgJmHMfMIZr6ImaVRbDskyZBoE1Lmp3wFIAbAK1CKSZ5V/5wROztUdbnA44EJn6EnQ4dKS5jLX4TWEEeMQ6lMLBSbAIxDkuUOJFmKtQ6mMcxsBnCaiAY5DyUA+I2IZkPZcHIxM5drFqBQjawZEm1GyvyUUgB/Hb58+EcAXgcwydV15IBt2vEbZIePcDtLRkx1UJeGOQ8BupIA45GQiqquGoTlTU4CeAhJlhVaB9ICdwH4hIiMAI5DKa64E8oW+tXOMkLbmHmBdiEKT5MnQ6IBIvIjonIiyna+fpyIKp2NCb92/tDQTMr8lD0p81MmQ9kK26BNwsT0SzYa2Cg7yITbFZ4cGQwXTVsBICs8wKOFQ71cGYDFAAa3sUQIzLyXmcc6p8EuYeZCZu7PzFHMHOv8kESonZNkSLjyBZSWHjUmQtmRdhKABcAtWgRVX8r8lC+gLLB+EEpcCKgKyBuaPW2kpoGJdste0XswO+ioq3NnIvx7qR2PF2AAHwEYhCTLP5BkcbnAXAhvJ8mQqMPZx2wylGkoOEvNjwbwlvOSzwBcok10DaXMT7GmzE95AUB/AEtnp922n0ChWscl2icjdYiylnU84eocBzr62Mh1otRObQVwAZIsNyLJIouKRZsmyZCo7xsoc+g1j/y7AChi5pqeZllQqrF6lZT5KXkp81PujCzr9xdI80ThQaXmvi6btgJAYbD/KTVj0UgGgOsATESSZYfWwQjhDpIMid8R0RNQEp/a1WFd9fPy2oqrC5fFH1q4LP4KABcAWK91PKL9KTwxutFyDRkRge25lEMOgPsADECS5VMvaKMhhNvIbjJR2wwAg4nIBiUJ0gHYASCYiGq+V7pDeTrk1RYui98OYNrSBclzACQBOE/biER7UVY0oCczcogQUf9cXrh+EB+FjdrXz9YCAC8AeANJFikuKdoleTIkfsfME5jZwMwGAIsA5DBzHwBrAdSUn58H4H9axdhSC5fF/7hwWfz5AOYA2KJ1PKLt8+fQ4TaryWXTVp0fh1Xp9QfVjslDLFDeSPRBkmWJJEKiPWtP716E5/wG4EMoHZ2vxh/ridqMhcvifwLw09IFyQkAHoPSbFGIFiMifVlez/xOPV2vlc7tZMrrmd+m84YCAK8CeB1JFovWwQihBpKGu8IXLV2QPBVKXZQErWMRbY+p5/dfR0/45lJX54LyeOcFv+WPUzsmN8gD8DKAfyLJ0ugicSHaI0mGhFsQkR7ArwAymflCIvoEwFgA1VDWHd3BzNVaxujK0gXJE6AkRbO1jkW0HVW6kxuHX/6PsUQIqH/O7qCKGZtyqwnoqEVs5+AklFIab8tUmPBVsmZIuMs9AFJrvf4EwGAAwwEEALhVi6CasnBZ/JaFy+LnQInzXcB1V3IhatMpTVtdrg3S6zig3GhIdXXOy2yCshawH5IsL0siJHyZJEOi1YioJ4BEKMkEAICZf2AnKE+GemoVX3MsXBZ/YOGy+NsARAF4FG1gx5zQjoGMHSuKws80dj47NKBUzXhaoApKxeixSLJMRpLlSyRZmmx8LER7J8mQcIdXobTEaLCwmoj8ANwA4Ce1gzoXC5fF5y1cFv80gGgoheV2ahuR8FbFmYOsjZ3L6BrQTc1YmiEXwFMAejsrRu/SOiAhvInsJhOtQkQXQtmCv4uIprm45E0AG5h5o7qRtc7CZfHVAD4F8KlzXdG9AC6F/JsRTkXpsR27jVjHRA0Lk1Z1dAx2AGd0gNZJ0T4ArwH4FEmWRpM3IXydLKAWrUJEz0J58mMDYIKyaPQrZr6eiB4HMArAZczc5rbj17d0QXI3ADcCuAnAII3DERqrRsmJYVcsqiYdD3R1fszO4g2dKqq0KOFQAeArAO8iybJOg/GFaHMkGRJu43wydL9zN9mtAG4GkMDMFdpG5n5LFyRPBHALgCsBdNA4HKGR6Dn3/2wKtsxyda5bum3dkFNF01QMZyOA5QA+R5KlWMVxhWjzJBkSblMvGbJB2bJbU6/kK2Z+UrPgPGTpguQOAK6CkvhN1DgcobIusW99GT5w9+WuznGFIX36TnO0h0NIh1IQ9UMkWY55eCwh2i1JhoRmXNQmeg9KbSICcBjA/zGzt+7KaWDpguRBUKbQroayAFu0c7rOm1cOnPHBhY2dn7qx4IiBHQPcPGwpgC+gPAVaLw1ThWg9SYaEZojor1CSn47OZKgjMxc7z70MZWH2Ek2DPEdLFySPgzKFdiUkMWq3rMjbM+LKv/Vw1bQVAIbvLUuOKK6Id8NQ1QDWQanf9YXUBBLCvWRnjNBErdpETwP4KwDUSoQISqHGNpupL1wWvxPKtvwHJTFqv/w4dJjNatrqZ6p0mQxlRgT4RxSf85K5UiglKb4B8D2SLEXneiMhxNnJkyGhCSL6AsCzAILhXGfkPP4+gLlQmsMmMnO5dlG6X63E6DIA/TQOR7hB5Pjnv+ocdeQyV+cc1ZQ3fWtuCClNjpsjG8C3AP4H4BfZDi+EOuTJkFDd2WoTMfNNzrVEb0BZe/O+BiF6TL0nRgMAzHF+TINSmkC0MZbTQ9E56ojLczo/DqvS6/f62+2xZ7nFEShPf74BsA1JljZbhoKIOkGpRD8MypPdm6FUn08CEAPgPGb+VbMAhWiEPBkSqjtbbaJa10wF8EDNE6P2bumC5AAAU/FHcuTuRbfCQ6y69HUjLn/6fFdNWwFg0MGKNT3zyxJqHSqHsg1+DZTpr9/UiFMNRLQcwEZmfpeIjAACoRSedAB4G8pTYEmGhNeRZEhoqmY7PoCLAPRj5qPONUMvAAAz369heJpZuiC5H5SkKAHAJABh2kYkGmPnqsLBl91zTO9nG+vqfFA+77jgYL4dSvLzC4CtSLJUqRqkCoioI5SK133ZxS8WIloHSYaEl5JpMuEtCMBy5w9UgvJD9c/ahqSdhcvijwH4J4B/Ll2QTAAGQ0mKJjv/7KNheKIWPRk7l1vCzwSH/d631QqlZMRGAOvLutAmJFnaTImIVugLpQfa+0Q0EsAuAPcws+x8E15PngwJ0QYtXZDcA3WTo+GQxstayejQ/79v9xy9uhLAVgC/JsQf87mFz0Q0FsA2ABOZeTsRvQagmJkXO8+vgzwZEl5KkiEh2oGlC5IDAYwAEAulH1wslATJ5ToWcc7MAFKgLILfAWDHwmXxZ87+Jb6BiLoC2MbM0c7XkwE8zMyJztfrIMmQ8FIyTSZEO7BwWXw5lHfl22qOLV2QrIfSUHYU/kiQhgGI1CLGNqYQwAEAB51/HgBwYOGy+HxNo/JizGwmotNENIiZD0FZ79ZuFoeL9k2eDAnhY5YuSA6BkiQNAjAQys61fs6PzhqGprYyKL29aj6OwZn8LFwWn6VZVG0YEcVC2VpvBHAcSnuaaVBKZYQDKAKwl5ldNrcVQiuSDAkhfrd0QXJnKElRNJQt0d0AdK/1eTcAXaAscvdmlVAW8+ZBmdpKd36cqPl84bL4XI1iE0J4GUmGhBAtsnRBsh+ArlASo65Q6kR1hFJNvLHPg6FMy+uhLPSu+XD1ugpABZR6PBX1PmofK4aS8NQkPb9/vnBZvC/s3hJCuIkkQ0IIIYTwabIVVwghhBA+TZIhIYQQQvg0SYaEEEII4dMkGRJCCCGET5NkSAghhBA+TZIhIYQQQvg0SYaEEEII4dMkGRJCCCGET5NkSAghNEREp4jIQkSVRFRBROOJaDIRFRGRlYhyiaiX1nEK0Z5JBWohhFAREaUDKAFgB2ADMBjAWwAmAwgA4AAQBeBLZr6DiL4A0I2ZJ2oTsRDtnyRDQgjhQURU/4fsSQC9XVw6l5l/JKK5AL4H0J2ZzxDRGABbmNnf07EK4atkmkwIITyvDED9pMgBpdlsjW+IaCOACOe15zmPTwVg9HiEQvgwSYaEEMLzggBsdX5OtY6XO/9kALkAJgBY6jy+kIh2AQhGw0RKCOFGkgwJ0Y4QkZ6I9hDRynrH3yCiUq3iEgCURAcAxjv/1AHo6vycANwDYDmAQufr+cw8BsAvAKwqximEz5FkSIj25R4AqbUPENFYAJ20Cce3EVEKADszE5S1QgCwzflnWb3LfwIwA8oTJD8A84lIB+ANAOs8H60QvkuSISHaCSLqCSARwLu1jukBvADgQa3i8nEDAeidi6hrFk33bOTaIii7zD6GMmX2GIBKAKEArvNwnEL4NEmGhGg/XoWS9DhqHbsTwLfMfEabkHzeJQCucj4ZOuA8VvP3EwRle32N/QCqAfwdwMXMHMjMRmaOZuYC1SIWwgcZtA5ACNF6RHQhgBxm3kVE05zHugO4EsA0DUPzdTcDuILojzXTzGyotd1e7/yzzLk+SAihAakzJEQ7QETPArgBShE/E4COUBbdWqFMtQBALwDHmbm/JkEKIYSXkmRIiHbG+WTofma+sN7xUmbuoE1UQgjhvWTNkBBCCCF8mjwZEkIIIYRPkydDQgghhPBpkgwJIYQQwqdJMiSEEEIInybJkBBCCCF8miRDQgghhPBpkgwJIYQQwqdJMiSEEEIInybJkBBCCCF8miRDQgghhPBpkgwJIYQQwqdJMiSEEEIInybJkBBCCCF8miRDQgghhPBpkgwJIYQQwqdJMiSEEEIInybJkBBCCCF8miRDQgghhPBpkgwJIYQQwqdJMiSEEEIInybJkBBCCCF8miRDQgghhPBpkgwJIYQQwqdJMiSEEEIInybJkBBCCCF8miRDQgghhPBpkgwJIYQQwqdJMiSEEEIInybJkBBCCCF8miRDQgghhPBpkgwJIYQQwqdJMiSEEEIInybJkBBCCCF8miRDQgghhPBpkgwJIYQQwqdJMiSEEEIInybJkBBCCCF8miRDQgghhPBpkgwJIYQQwqdJMiSEEEIInybJkBBCCCF8miRDQgghhPBpkgwJIYQQwqf9Py4RlvROzQYJAAAAAElFTkSuQmCC\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x7f617a8a2b70>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"label_df = df.groupby('label').agg(['count'])\n", | |
"labels = label_df['name'].index.values\n", | |
"counts = label_df['name']['count'].values\n", | |
"\n", | |
"plt.pie(counts, labels=labels)\n", | |
"plt.show()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Improved recommend function with only searching in same label cluster." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 29, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"from sklearn.metrics.pairwise import linear_kernel\n", | |
"import numpy as np\n", | |
"\n", | |
"def recommend(name, k):\n", | |
" \"\"\"\n", | |
" Args:\n", | |
" name: Name of reading person\n", | |
" k: Number of people to recommend\n", | |
" \n", | |
" Returns:\n", | |
" DataFrame contains k list of people to recommend for reading person\n", | |
" \"\"\"\n", | |
" # Find DataFrame corresponding to name\n", | |
" target = df[df['name'] == name]\n", | |
" \n", | |
" # Get target TFIDF value\n", | |
" target_id = target.index[0]\n", | |
" target_tfidf = tfidf_matrix[target_id]\n", | |
" \n", | |
" # Get TFIDF matrix with same label as target\n", | |
" label = target['label'].values[0]\n", | |
" same_label_df = df[df['label'] == label]\n", | |
" same_label_ids = same_label_df.index.values\n", | |
" same_label_tfidf_matrix = tfidf_matrix[same_label_ids]\n", | |
" \n", | |
" # calculate cosine similarity with other people\n", | |
" cosine_similarities = linear_kernel(target_tfidf, same_label_tfidf_matrix).flatten()\n", | |
"\n", | |
" # get list of ids, sorted by similarity (desc)\n", | |
" # trick: cut off head 'coz head is always reading person\n", | |
" ids = np.flip(\n", | |
" np.argsort(cosine_similarities),\n", | |
" axis=0\n", | |
" )[1:]\n", | |
" \n", | |
" # return dataframe corresponding to list of ids\n", | |
" # limited by k\n", | |
" return same_label_df.reset_index(drop=True).iloc[ids].head(k)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Test recommend 10 people while reading Barack Obama:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 30, | |
"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>URI</th>\n", | |
" <th>name</th>\n", | |
" <th>text</th>\n", | |
" <th>label</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>2834</th>\n", | |
" <td><http://dbpedia.org/resource/Joe_Biden></td>\n", | |
" <td>Joe Biden</td>\n", | |
" <td>joseph robinette joe biden jr dosf rbnt badn b...</td>\n", | |
" <td>44</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>5464</th>\n", | |
" <td><http://dbpedia.org/resource/Jeff_Sessions></td>\n", | |
" <td>Jeff Sessions</td>\n", | |
" <td>jefferson beauregard jeff sessions iii born de...</td>\n", | |
" <td>44</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>493</th>\n", | |
" <td><http://dbpedia.org/resource/Joe_Lieberman></td>\n", | |
" <td>Joe Lieberman</td>\n", | |
" <td>joseph isadore joe lieberman born february 24 ...</td>\n", | |
" <td>44</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>5675</th>\n", | |
" <td><http://dbpedia.org/resource/Artur_Davis></td>\n", | |
" <td>Artur Davis</td>\n", | |
" <td>artur genestre davis born october 9 1967 is an...</td>\n", | |
" <td>44</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2192</th>\n", | |
" <td><http://dbpedia.org/resource/Henry_Waxman></td>\n", | |
" <td>Henry Waxman</td>\n", | |
" <td>henry arnold waxman born september 12 1939 is ...</td>\n", | |
" <td>44</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>6655</th>\n", | |
" <td><http://dbpedia.org/resource/Hillary_Rodham_Cl...</td>\n", | |
" <td>Hillary Rodham Clinton</td>\n", | |
" <td>hillary diane rodham clinton hlri dan rdm klnt...</td>\n", | |
" <td>44</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3592</th>\n", | |
" <td><http://dbpedia.org/resource/Richard_Pildes></td>\n", | |
" <td>Richard Pildes</td>\n", | |
" <td>richard h pildes is a law professor at the new...</td>\n", | |
" <td>44</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4498</th>\n", | |
" <td><http://dbpedia.org/resource/Samantha_Power></td>\n", | |
" <td>Samantha Power</td>\n", | |
" <td>samantha power born september 21 1970 is an ir...</td>\n", | |
" <td>44</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>5386</th>\n", | |
" <td><http://dbpedia.org/resource/Robert_Gibbs></td>\n", | |
" <td>Robert Gibbs</td>\n", | |
" <td>robert lane gibbs born march 29 1971 is an ame...</td>\n", | |
" <td>44</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4537</th>\n", | |
" <td><http://dbpedia.org/resource/Eric_Stern_(polit...</td>\n", | |
" <td>Eric Stern (politician)</td>\n", | |
" <td>eric stern is the director of operations for t...</td>\n", | |
" <td>44</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" URI \\\n", | |
"2834 <http://dbpedia.org/resource/Joe_Biden> \n", | |
"5464 <http://dbpedia.org/resource/Jeff_Sessions> \n", | |
"493 <http://dbpedia.org/resource/Joe_Lieberman> \n", | |
"5675 <http://dbpedia.org/resource/Artur_Davis> \n", | |
"2192 <http://dbpedia.org/resource/Henry_Waxman> \n", | |
"6655 <http://dbpedia.org/resource/Hillary_Rodham_Cl... \n", | |
"3592 <http://dbpedia.org/resource/Richard_Pildes> \n", | |
"4498 <http://dbpedia.org/resource/Samantha_Power> \n", | |
"5386 <http://dbpedia.org/resource/Robert_Gibbs> \n", | |
"4537 <http://dbpedia.org/resource/Eric_Stern_(polit... \n", | |
"\n", | |
" name \\\n", | |
"2834 Joe Biden \n", | |
"5464 Jeff Sessions \n", | |
"493 Joe Lieberman \n", | |
"5675 Artur Davis \n", | |
"2192 Henry Waxman \n", | |
"6655 Hillary Rodham Clinton \n", | |
"3592 Richard Pildes \n", | |
"4498 Samantha Power \n", | |
"5386 Robert Gibbs \n", | |
"4537 Eric Stern (politician) \n", | |
"\n", | |
" text label \n", | |
"2834 joseph robinette joe biden jr dosf rbnt badn b... 44 \n", | |
"5464 jefferson beauregard jeff sessions iii born de... 44 \n", | |
"493 joseph isadore joe lieberman born february 24 ... 44 \n", | |
"5675 artur genestre davis born october 9 1967 is an... 44 \n", | |
"2192 henry arnold waxman born september 12 1939 is ... 44 \n", | |
"6655 hillary diane rodham clinton hlri dan rdm klnt... 44 \n", | |
"3592 richard h pildes is a law professor at the new... 44 \n", | |
"4498 samantha power born september 21 1970 is an ir... 44 \n", | |
"5386 robert lane gibbs born march 29 1971 is an ame... 44 \n", | |
"4537 eric stern is the director of operations for t... 44 " | |
] | |
}, | |
"execution_count": 30, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"recommend('Barack Obama', 10)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Calculate executing time, again:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 31, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import random\n", | |
"from tqdm import tqdm\n", | |
"\n", | |
"def execute_recommend(n, k):\n", | |
" \"\"\"\n", | |
" Args:\n", | |
" n: Number of people\n", | |
" k: Number of people to recommend to corresponding person\n", | |
" \"\"\"\n", | |
" # random n people\n", | |
" people = random.sample(list(df['name']), n)\n", | |
" \n", | |
" for name in tqdm(people):\n", | |
" recommend(name, k)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"1 person, k = 200: **268ms** vs 1.83s (old `recommend` function)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 32, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"100%|██████████| 1/1 [00:00<00:00, 4.16it/s]" | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 117 ms, sys: 124 ms, total: 240 ms\n", | |
"Wall time: 268 ms\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"\n" | |
] | |
} | |
], | |
"source": [ | |
"%time execute_recommend(1, 200)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"50 people, k = 200: **44.6s** vs 1m26s" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 33, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"100%|██████████| 50/50 [00:44<00:00, 1.12it/s]" | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 36 s, sys: 8.4 s, total: 44.5 s\n", | |
"Wall time: 44.6 s\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"\n" | |
] | |
} | |
], | |
"source": [ | |
"%time execute_recommend(50, 200)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"500 people, k = 200: **5m58s** vs 14m14s" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 35, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"100%|██████████| 500/500 [05:58<00:00, 1.40it/s]" | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 4min 35s, sys: 1min 22s, total: 5min 58s\n", | |
"Wall time: 5min 58s\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"\n" | |
] | |
} | |
], | |
"source": [ | |
"%time execute_recommend(500, 200)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"As estimation, 5000 people k = 200 would take around **1 hour** vs 2.5 hours of old `recommend` function." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"As results, cluster with 100 clusters before recommending is a boost in speed." | |
] | |
} | |
], | |
"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.6.4" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment