exd4week/exd1.ipynb

575 lines
70 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "markdown",
"id": "82f706d6-6764-446d-8ea8-135dae405123",
"metadata": {},
"source": [
"Выбранный раздел - Working with text documents - Clustering text documents using k-means\n",
"Цель задания - Разбить тексты на кластеры с помощью алгоритма k-means и попытаться интерпретировать полученные кластеры как тематические группы."
]
},
{
"cell_type": "markdown",
"id": "8923f537-23b0-4cf8-9ca3-8c4f135f5fdd",
"metadata": {},
"source": [
"1)Подготовка данных"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "cbb8432b-80d7-4ed8-9593-2f23d83202ec",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"3387 documents - 4 categories\n"
]
}
],
"source": [
"import numpy as np\n",
"\n",
"from sklearn.datasets import fetch_20newsgroups\n",
"\n",
"categories = [\n",
" \"alt.atheism\",\n",
" \"talk.religion.misc\",\n",
" \"comp.graphics\",\n",
" \"sci.space\",\n",
"]\n",
"\n",
"dataset = fetch_20newsgroups(\n",
" remove=(\"headers\", \"footers\", \"quotes\"),\n",
" subset=\"all\",\n",
" categories=categories,\n",
" shuffle=True,\n",
" random_state=42,\n",
")\n",
"\n",
"labels = dataset.target\n",
"unique_labels, category_sizes = np.unique(labels, return_counts=True)\n",
"true_k = unique_labels.shape[0]\n",
"\n",
"print(f\"{len(dataset.data)} documents - {true_k} categories\")"
]
},
{
"cell_type": "markdown",
"id": "79a8546c-40c1-4504-a81a-d51a5a19b754",
"metadata": {},
"source": [
"Создаём функцию fit_and_evaluate, которая обучает модель кластеризации несколько раз с разными random_state и вычисляет метрики"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "524f99e4-bd49-48af-b7b4-9a4507da429a",
"metadata": {},
"outputs": [],
"source": [
"from collections import defaultdict\n",
"from time import time\n",
"\n",
"from sklearn import metrics\n",
"\n",
"evaluations = []\n",
"evaluations_std = []\n",
"\n",
"\n",
"def fit_and_evaluate(km, X, name=None, n_runs=5):\n",
" name = km.__class__.__name__ if name is None else name\n",
"\n",
" train_times = []\n",
" scores = defaultdict(list)\n",
" for seed in range(n_runs):\n",
" km.set_params(random_state=seed)\n",
" t0 = time()\n",
" km.fit(X)\n",
" train_times.append(time() - t0)\n",
" scores[\"Homogeneity\"].append(metrics.homogeneity_score(labels, km.labels_))\n",
" scores[\"Completeness\"].append(metrics.completeness_score(labels, km.labels_))\n",
" scores[\"V-measure\"].append(metrics.v_measure_score(labels, km.labels_))\n",
" scores[\"Adjusted Rand-Index\"].append(\n",
" metrics.adjusted_rand_score(labels, km.labels_)\n",
" )\n",
" scores[\"Silhouette Coefficient\"].append(\n",
" metrics.silhouette_score(X, km.labels_, sample_size=2000)\n",
" )\n",
" train_times = np.asarray(train_times)\n",
"\n",
" print(f\"clustering done in {train_times.mean():.2f} ± {train_times.std():.2f} s \")\n",
" evaluation = {\n",
" \"estimator\": name,\n",
" \"train_time\": train_times.mean(),\n",
" }\n",
" evaluation_std = {\n",
" \"estimator\": name,\n",
" \"train_time\": train_times.std(),\n",
" }\n",
" for score_name, score_values in scores.items():\n",
" mean_score, std_score = np.mean(score_values), np.std(score_values)\n",
" print(f\"{score_name}: {mean_score:.3f} ± {std_score:.3f}\")\n",
" evaluation[score_name] = mean_score\n",
" evaluation_std[score_name] = std_score\n",
" evaluations.append(evaluation)\n",
" evaluations_std.append(evaluation_std)"
]
},
{
"cell_type": "markdown",
"id": "773461fc-777e-43db-8d43-06b5f8804382",
"metadata": {},
"source": [
"Преобразуем текстовые данные в векторное представление"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "2ff44d45-04cf-4a22-affc-3db5fedd1d54",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"vectorization done in 0.226 s\n",
"n_samples: 3387, n_features: 7929\n"
]
}
],
"source": [
"from sklearn.feature_extraction.text import TfidfVectorizer\n",
"\n",
"vectorizer = TfidfVectorizer(\n",
" max_df=0.5,\n",
" min_df=5,\n",
" stop_words=\"english\",\n",
")\n",
"t0 = time()\n",
"X_tfidf = vectorizer.fit_transform(dataset.data)\n",
"\n",
"print(f\"vectorization done in {time() - t0:.3f} s\")\n",
"print(f\"n_samples: {X_tfidf.shape[0]}, n_features: {X_tfidf.shape[1]}\")"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "d4cc19f0-6078-41c6-89c6-5d5599dd13fa",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.007\n"
]
}
],
"source": [
"print(f\"{X_tfidf.nnz / np.prod(X_tfidf.shape):.3f}\")"
]
},
{
"cell_type": "markdown",
"id": "8bed771f-9358-47b3-bea1-45410a2446e0",
"metadata": {},
"source": [
"Применяем KMeans для кластеризации текстов на основе TF-IDF векторов"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "4a864bc1-5798-4a17-882f-03f7039dd183",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of elements assigned to each cluster: [ 481 675 1785 446]\n",
"Number of elements assigned to each cluster: [1689 638 480 580]\n",
"Number of elements assigned to each cluster: [ 1 1 1 3384]\n",
"Number of elements assigned to each cluster: [1887 311 332 857]\n",
"Number of elements assigned to each cluster: [ 291 673 1771 652]\n",
"\n",
"True number of documents in each category according to the class labels: [799 973 987 628]\n"
]
}
],
"source": [
"from sklearn.cluster import KMeans\n",
"\n",
"for seed in range(5):\n",
" kmeans = KMeans(\n",
" n_clusters=true_k,\n",
" max_iter=100,\n",
" n_init=1,\n",
" random_state=seed,\n",
" ).fit(X_tfidf)\n",
" cluster_ids, cluster_sizes = np.unique(kmeans.labels_, return_counts=True)\n",
" print(f\"Number of elements assigned to each cluster: {cluster_sizes}\")\n",
"print()\n",
"print(\n",
" \"True number of documents in each category according to the class labels: \"\n",
" f\"{category_sizes}\"\n",
")"
]
},
{
"cell_type": "markdown",
"id": "245a938e-d2bd-4360-8856-3fbedd732cf8",
"metadata": {},
"source": [
"Улучшаем устойчивость и качество кластеризации методом KMeans, за счёт многократных запусков с разными начальными условиями"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "52b60356-f983-4f17-a3df-a523ab1cc2ad",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"clustering done in 0.06 ± 0.01 s \n",
"Homogeneity: 0.349 ± 0.010\n",
"Completeness: 0.398 ± 0.009\n",
"V-measure: 0.372 ± 0.009\n",
"Adjusted Rand-Index: 0.203 ± 0.017\n",
"Silhouette Coefficient: 0.007 ± 0.000\n"
]
}
],
"source": [
"kmeans = KMeans(\n",
" n_clusters=true_k,\n",
" max_iter=100,\n",
" n_init=5,\n",
")\n",
"\n",
"fit_and_evaluate(kmeans, X_tfidf, name=\"KMeans\\non tf-idf vectors\")"
]
},
{
"cell_type": "markdown",
"id": "236ced7d-857b-4e79-9be5-8b3f593bf0ca",
"metadata": {},
"source": [
"Применяем LSA"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "c5d526ab-338d-4c65-bc88-98478684f9fa",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"LSA done in 0.235 s\n",
"Explained variance of the SVD step: 18.4%\n"
]
}
],
"source": [
"from sklearn.decomposition import TruncatedSVD\n",
"from sklearn.pipeline import make_pipeline\n",
"from sklearn.preprocessing import Normalizer\n",
"\n",
"lsa = make_pipeline(TruncatedSVD(n_components=100), Normalizer(copy=False))\n",
"t0 = time()\n",
"X_lsa = lsa.fit_transform(X_tfidf)\n",
"explained_variance = lsa[0].explained_variance_ratio_.sum()\n",
"\n",
"print(f\"LSA done in {time() - t0:.3f} s\")\n",
"print(f\"Explained variance of the SVD step: {explained_variance * 100:.1f}%\")"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "ba85a0c3-ece2-4fa1-9e49-1617ed981670",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"clustering done in 0.01 ± 0.00 s \n",
"Homogeneity: 0.397 ± 0.015\n",
"Completeness: 0.423 ± 0.006\n",
"V-measure: 0.410 ± 0.010\n",
"Adjusted Rand-Index: 0.310 ± 0.024\n",
"Silhouette Coefficient: 0.030 ± 0.001\n"
]
}
],
"source": [
"kmeans = KMeans(\n",
" n_clusters=true_k,\n",
" max_iter=100,\n",
" n_init=1,\n",
")\n",
"\n",
"fit_and_evaluate(kmeans, X_lsa, name=\"KMeans\\nwith LSA on tf-idf vectors\")"
]
},
{
"cell_type": "markdown",
"id": "c6927800-8b49-4cd8-96a5-6d3200dcdb31",
"metadata": {},
"source": [
"Обучаем более быструю версию KMeans — MiniBatchKMeans на уменьшенной матрице"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "f4b0d1fa-ee9b-43cd-bfa0-30fb2662e043",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"clustering done in 0.04 ± 0.01 s \n",
"Homogeneity: 0.387 ± 0.030\n",
"Completeness: 0.396 ± 0.018\n",
"V-measure: 0.391 ± 0.024\n",
"Adjusted Rand-Index: 0.342 ± 0.025\n",
"Silhouette Coefficient: 0.027 ± 0.004\n"
]
}
],
"source": [
"from sklearn.cluster import MiniBatchKMeans\n",
"\n",
"minibatch_kmeans = MiniBatchKMeans(\n",
" n_clusters=true_k,\n",
" n_init=1,\n",
" init_size=1000,\n",
" batch_size=1000,\n",
")\n",
"\n",
"fit_and_evaluate(\n",
" minibatch_kmeans,\n",
" X_lsa,\n",
" name=\"MiniBatchKMeans\\nwith LSA on tf-idf vectors\",\n",
")"
]
},
{
"cell_type": "markdown",
"id": "9076622b-b546-415d-972d-b2d22b56cc8f",
"metadata": {},
"source": [
"Определяем, какие слова лучше всего характеризуют каждый кластер"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "61db3d27-40d7-4fe8-85bd-dec814ba64ff",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Cluster 0: space nasa shuttle launch program station sci like think just \n",
"Cluster 1: just think like don time know ve new people good \n",
"Cluster 2: thanks graphics image file program files know help looking format \n",
"Cluster 3: god people don jesus think bible say believe religion christian \n"
]
}
],
"source": [
"original_space_centroids = lsa[0].inverse_transform(kmeans.cluster_centers_)\n",
"order_centroids = original_space_centroids.argsort()[:, ::-1]\n",
"terms = vectorizer.get_feature_names_out()\n",
"\n",
"for i in range(true_k):\n",
" print(f\"Cluster {i}: \", end=\"\")\n",
" for ind in order_centroids[i, :10]:\n",
" print(f\"{terms[ind]} \", end=\"\")\n",
" print()"
]
},
{
"cell_type": "markdown",
"id": "2fc42b36-3787-41dd-bdbc-c436d1d082bd",
"metadata": {},
"source": [
"Вместо TfidfVectorizer используем HashingVectorizer + TfidfTransformer + LSA"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "e8a16f09-e356-40a9-ae83-123665ddc190",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"vectorization done in 0.897 s\n"
]
}
],
"source": [
"from sklearn.feature_extraction.text import HashingVectorizer, TfidfTransformer\n",
"\n",
"lsa_vectorizer = make_pipeline(\n",
" HashingVectorizer(stop_words=\"english\", n_features=50_000),\n",
" TfidfTransformer(),\n",
" TruncatedSVD(n_components=100, random_state=0),\n",
" Normalizer(copy=False),\n",
")\n",
"\n",
"t0 = time()\n",
"X_hashed_lsa = lsa_vectorizer.fit_transform(dataset.data)\n",
"print(f\"vectorization done in {time() - t0:.3f} s\")"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "ba416f7d-3d95-46c7-92a3-1da5b035efb7",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"clustering done in 0.01 ± 0.00 s \n",
"Homogeneity: 0.389 ± 0.014\n",
"Completeness: 0.430 ± 0.026\n",
"V-measure: 0.408 ± 0.019\n",
"Adjusted Rand-Index: 0.328 ± 0.017\n",
"Silhouette Coefficient: 0.029 ± 0.002\n"
]
}
],
"source": [
"fit_and_evaluate(kmeans, X_hashed_lsa, name=\"KMeans\\nwith LSA on hashed vectors\")"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "964ffa4c-5836-4af2-ae78-9828505e4a83",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"clustering done in 0.04 ± 0.01 s \n",
"Homogeneity: 0.346 ± 0.057\n",
"Completeness: 0.367 ± 0.061\n",
"V-measure: 0.356 ± 0.058\n",
"Adjusted Rand-Index: 0.307 ± 0.055\n",
"Silhouette Coefficient: 0.028 ± 0.003\n"
]
}
],
"source": [
"fit_and_evaluate(\n",
" minibatch_kmeans,\n",
" X_hashed_lsa,\n",
" name=\"MiniBatchKMeans\\nwith LSA on hashed vectors\",\n",
")"
]
},
{
"cell_type": "markdown",
"id": "e4cf9ffe-6eee-4168-90bd-243895468664",
"metadata": {},
"source": [
"Строим таблицу и визуализацию с результатами кластеризации"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "042bce7b-b173-4074-8883-680ebc58ec4a",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABjUAAAJOCAYAAAD/KYUYAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAoW9JREFUeJzs3QV4XFX+P/5Td6M4LS4tRYq7O2WhyCKLFC9QpFAWdyvWH7IssjgssjhsgYXF3a1AcYosblUq0Pyfz+E/+SZt2iZpksm0r9fzzJNk5s69Z+6kMDnv+zmfJmVlZWUJAAAAAACgkWta7AEAAAAAAABUh1ADAAAAAAAoCUINAAAAAACgJAg1AAAAAACAkiDUAAAAAAAASoJQAwAAAAAAKAlCDQAAAAAAoCQINQAAAAAAgJLQvNgDgFnF5MmT01dffZU6dOiQmjRpUuzhAAAwCyorK0ujR49O888/f2ratOGuUfNZFwCAxvJZV6gBdST+yOvevXuxhwEAwGzgiy++SN26dWuw4/msCwBAY/msK9SAOhJXrRX+0XXs2LHYwwEAYBY0atSoHC4UPns2FJ91AQBoLJ91hRpQRwpl+PFHnj/0AACoTw29BJTPugAANJbPuhqFAwAAAAAAJUGoAQAAAAAAlAShBgAAAAAAUBL01AAAoKh+//33NGnSpGIPAxqFFi1apGbNmhV7GAAA0GgJNQAAKIqysrL0zTffpF9++aXYQ4FGpXPnzmneeedt8GbgAABQCoQaAAAURSHQmHvuuVPbtm1N4DLbi6Bv3Lhx6bvvvss/zzfffMUeEgAANDpCDQAAirLkVCHQ6Nq1a7GHA41GmzZt8tcINuLfh6WoAACgMo3CAQBocIUeGlGhAVRW+Heh1wwAAExNqAEAQNFYcgqm5t8FAABMm1ADAACoc0888USenNcIHgAAqEtCDQAAqIE999wz9e3bd6r7TeJXtuaaa6avv/46derUKf983XXXpc6dOxd7WAAAQInTKBwAgEZl4WPub9DjjTi7T4Meb3bRsmXLNO+88xZ7GAAAwCxGpQYAANSDO++8M/Xq1Su1atUqLbzwwmnIkCGVHo/7zjjjjLTHHnuk9u3bp4UWWijdd9996fvvv0/bbLNNvm+55ZZLr7zySo32G9URffr0SW3atEmLLLJIuvnmm/N2F154Yfk2UU2y7777prnmmit17NgxbbjhhunNN98sf/yUU05JvXv3TjfeeGN+blRb7Lzzzmn06NHl20yePDkNHjw4HyOOtfzyy6c77rijysqV+H6vvfZKI0eOzPfFLY5x2mmnpWWWWWaqcxfHPvHEE2fyHQAAAGZFQg0AAKhjr776atpxxx1zEDBs2LA8gR+T9LEEU0UXXHBBWmuttdLrr7+eg4jdd989hxy77bZbeu2119Jiiy2Wfy4rK6v2fmP7r776KgcJEYD84x//SN99912l4/75z3/O9z344IN5nyuuuGLaaKON0k8//VS+zccff5zuueeeNHTo0Hx78skn09lnn13+eAQaN9xwQ7r88svTO++8kw4//PA87tiuqqWoIlSJACVCl7gdeeSRae+9907Dhw9PL7/8cvm2cS7eeuutHIIAAABMyfJTAABQQzHJH5UUFf3+++/l3/+///f/ckhQqDZYcskl07vvvpvOO++83JOjYMstt0z9+/fP35900knpsssuS6usskoOHcLRRx+d1lhjjfTtt9/mpZxmtN/33nsvPfLIIzkkWHnllfM2V111VVpiiSXKj/nMM8+kl156KYcaUe0Rzj///BxgRKXF/vvvX16JEWFJhw4d8s8RuDz66KPpzDPPTBMmTEhnnXVWPlaMLyy66KJ531dccUVab731plqKKqo9okKj4pJUcQ4322yzdO211+bXHeL7eH7sDwAAYEoqNQAAoIY22GCD9MYbb1S6RXhQENUHUYFRUfz84YcfVgo/YnmpgnnmmSd/XXbZZae6r1BpMaP9vv/++6l58+a58qJg8cUXT126dCn/OZaZGjNmTOratWsOFQq3Tz/9NFdnFMSyU4VAI8w333zl4/joo4/SuHHj0iabbFJpH1G5UXEf1bHffvulW265JY0fPz5NnDgxL5cVFRwAAABVUakBAAA11K5duxwWVPTll1/WeD8tWrQo/z6qGKZ1X1RN1JUINCKgiOWpptS5c+cqx1YYS2EcsY9w//33pwUWWKDSdoXqj+r605/+lJ9z991354qOSZMmpR122KFG+wAAAGYfQg0AAKhjPXv2TM8++2yl++LnWC6qWbNm9bbfpZZaKv3222+5L8VKK61UXlXx888/l28fVRzffPNNruiIaozaWHrppXMQ8fnnn0+11NS0RGBRsUqlIMbRr1+/vOxUbBP9QqLxOAAAQFWEGgAAUMcGDRqUe0ScfvrpaaeddkrPP/98uuSSS9Kll15ar/vt0aNH2njjjXNfjOjPEdUW8ZwICQpVH/F49MHo27dvOvfcc3MgEo3Fo+pi2223Le/FMT2xLFU0+o7m4FG9sfbaa6eRI0fmgCWagUdIMaUIUKLCI/pyLL/88qlt27b5Fvbdd98c2IQpQxsAAICK9NQAAIA6FtUQt912W7r11lvTMsssk5uAn3baaZWahNfXfqOvRfTiWHfddXNIET0rIoRo3bp1fjzCjQceeCA/vtdee+VQI6ojPvvss/IeHtURwUo0LB88eHAOJDbffPMcjCyyyCJVbr/mmmumAw44IIcxc801Vw5UCqKReTweocxqq602U+cIAACYtTUpKysrK/YgYFYwatSo1KlTp3yVYlyhCABMWzSFjsbUMQFemGwvWPiY+xt0LCPO7pNmZdHro3v37umRRx5JG220UWqM4k+SCDYOOuigdMQRR6TZ3fT+fRTrM6fPugAANJbPnJafAgCgUZnVQ4b69thjj+VlnpZddtn09ddfp6OOOiov/RSVGY3R999/nytPos9HVI4AAABMj1ADAABmIZMmTUrHHXdc+uSTT/KyU7Gs00033ZT7azRGc889d5pzzjnTP/7xj9SlS5diDwcAAGjkhBpQx/4x8MnUpmW76W4z4PING2w8AMDsZbPNNsu3UmE13NKyzMkPpaat/mjwDgBQl1RsU10ahQMAAAAAACVBqAEAAAAAAJQEoQYAAAAAAFAShBrQwCZM+jWNHTu22MMAAAAAACg5Qg1oYIOu2Sq1b9++2MMAAAAAACg5Qg0AAAAAAKAkCDWggQ3Ze2gaM2ZMsYcBAMyCRowYkZo0aZLeeOONYg8FAACgXgg1oIG1atEmtWvXrtjDAABmwjfffJMOOeSQtOiii6ZWrVql7t27pz/96U/p0UcfTaVm/fXXTwMHDiz2MAAAAKqlefU2AwCABnJKpwY+3sgaV0OstdZaqXPnzum8885Lyy67bJo0aVJ66KGH0oABA9J7771Xb0MFAACY3anUAACAGjjooIPyEk8vvfRS2n777dOSSy6ZevXqlY444oj0wgsv5G0+//zztM0226T27dunjh07ph133DF9++235fs45ZRTUu/evdM111yTFlxwwbxd7Pf3339P5557bpp33nnT3HPPnc4888xKx47jXnbZZWmLLbZIbdq0yZUid9xxx3TH+/bbb+ft4xjzzDNP2n333dMPP/yQH9tzzz3Tk08+mS666KK877hFaDOj5xUqPA499NB01FFHpTnmmCOPOV5XRb/88kvad99901xzzZXPw4YbbpjefPPN8sfj+w022CB16NAhP77SSiulV155JT/22Wef5eqXLl265CrXOMcPPPDATLxzAADArEClBtSx9Z4elNo3azbdbYb3aLDhALOonu8NL/YQYLb0008/pf/85z85bKhqOcmo3pg8eXJ5oBGBwW+//ZYrOHbaaaf0xBNPlG/78ccfpwcffDDvL77fYYcd0ieffJJDknjec889l/bee++08cYbp9VWW638eSeeeGI6++yzcxBx4403pp133jkNGzYs9ezZc6rxRKgQQUIECxdccEH69ddf09FHH51Dlsceeyzv44MPPkjLLLNMOu200/JzIoCY0fMKrr/++hzmvPjii+n555/PIUlUsWyyySb58T//+c85fInX2alTp3TFFVekjTbaKB8zgpBdd901rbDCCjmoadasWe4F0qJFi/zcOGcTJ05MTz31VD7X7777bj6nAADA7E2oAQAA1fTRRx+lsrKy1KPHtK9QiL4aETJ8+umnuddGuOGGG3Klwcsvv5xWWWWVfF+EH1GpEVUKSy+9dK5YeP/993M1QtOmTdNSSy2VzjnnnPT4449XCjUiKIiwIZx++unpv//9b/rb3/6WLr300qnGcskll+TQ4Kyzziq/L44Z44pgIQKUli1bprZt2+ZKi5o8Lyy33HLp5JNPzt8vscQS+Xnx+iPUeOaZZ3I1y3fffZf7joTzzz8/3XPPPbm6ZP/9988VLX/961/Lz2fsoyAei0qYWN4rRFUKAACAUAMAAKopAo0ZGT58eJ78LwQaIUKLqOKIxwqhxsILL5wDjYJY4imqFSLQqHhfhAIVrbHGGlP9HBUOVYnlnSIUqarCIapDCuFEbZ8XoUZF8803X/l4Yx9jxoxJXbt2rbRNVH3EPkJUeURAExUnUZESgc1iiy2WH4ulrQ488MD08MMP58ci4JjyeAAAwOxHqAEA9WDc5Mn1uv+xY8fW6/6rWlYH+KOSIPpO1EUz8MIySwWx36rui4qO2opQIfpSRMXHlCKAmNnnTW+8sY/YtuKSWwUR8ITowfGXv/wl3X///XmJqqj6uPXWW9O2226bw47NNtss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2EOY7Q0/ffNiD4GUUrt27Yp27Op+1lWpAbU0YcKEfKv4jw4AmPWN/6xmf/C+/tnrNT7GyiuvXOPnQF3yWReA2c0XF+xQ7CHM9tpfUOwREEqhBqK0LouDRiSWworksHArNC0HAIBS57MuAACNleWnoA6vXos/9iw/BQAzZvmp6bP81OytMSw/Na3PupafAmBWZfmp4rP8VOPQzvJTMOtq1apVvgEAs48Buw5Iv036LV1x2xVTPfbq86+mflv3S3c+cWdaqtdS5fcLKChFPusCMLtp2rLyhQTMXpPplBahxmzilFNOSZdddln67rvv0t1335369u071eP33HNPeuONN6a5jz333DP98ssvebvCVYr9+/dPd9xxR/r555/T66+/nnr37l3vrwUAmLXtfP/ODXq8W/vcWu1tt9t1u3T4Xoenb776Js07/7yVHrv7lrtTr969KgUas5qJEyemli1bFnsYAADAbKy0av2ZrhEjRqQmTZpMFUwMHz48nXrqqemKK65IX3/9ddpiiy2meu6RRx6ZHn300Rod7z//+U+67rrr0tChQ/N+l1lmmVQM8ZoLQQsAQH1ab9P1UpeuXdK9t9xb6f5xY8alh+97OIce0/qMdtttt6V11lkntWnTJq2yyirpgw8+SC+//HJuCt6+ffv8Ge3777+v9Nyrrroq9ezZMy9B1KNHj3TppZdWevzoo49OSy65ZGrbtm1adNFF04knnpgmTZpU/vibb76ZNthgg9ShQ4dcvr3SSiulV155pfyilikvSLnwwgvTwgsvXOmilrgY5swzz0zzzz9/WmqpPwKbL774Iu24446pc+fOaY455kjbbLNNfp0AAAD1TaXGbODjjz/OX+OPzfiDuirxh3Tcarrf+eabL6255pppVhATAC1atJjp/bzw2ZepY6uqzzMA8Ifx7cvSpwv/lhaZNCm1Livu/zd7TZxYo+333qFPuuvWu9NFB+9Z/tnq2rvvT2W/T06Dtto4dZpifyO+/WOy/+Tjj04XnnpkWnCBgWnvI05Nf/lz39ShXbt00YkDUts2rdOO/Y9OJw06KF129nF5+5vueiCddMaF6ZIzjk4rLNMjvf72e2m/vx6X2k38IfXb8U95mw5lY9J15x2X5p93rjRs+Idpv6POSB3KRqWjDtozP77rTn9OK/RaKl12//WpWdNm6Y133k8tfo7PhitX+/XGhS8RiPz3v/8t/8y02WabpTXWWCM9/fTTqXnz5umMM85Im2++eXrrrbdUcgAAAPVKpUaRRNO9Qw89NM0999z5yru11147X6lX8MQTT+Q/kuOPyLh6L66+i/Dg/fffn+Y+o5FgWGGFFfJz119//XwF3p/+9McfvU2bNp1mqDHllXq///57OuKII/LVd127dk1HHXVUpaaYcdXeIYcckj7//PO8z4pX9FVs7BJXIj744IOV7o/lr+JqwXHjxlX7Sr9rrrkm9erVK6/rG0HKwQcfnO8vHHfbbbedahyx3NZiiy2W/7COqwpvvPHGSvuM7WObrbfeOq/ZF1cgxjJau+66a5prrrny2JdYYol07bXXTvOcAwCzn7133iZ9POLL9OTzr5bfd+2/7kvbb7lh6tSxwzSfd+QBe6TN1l8z9Vxi0XTYvn9Jr741PJ04cN+01iq9c2ixzy590+PP/VFFEU4ecnkactIRabstN0qLLLhA/nr4frumK/55Z/k2JwzcN625yvJp4e7zpz9tul468oDd023//iN8CJ//75u08TqrpR6LL5KWWHTB9Oc/bZKW77VkjV5vfE6KipH4LBa3f/3rX2ny5Mn5vmWXXTZXksTnpfhcGJ9hAQAA6pNQo0giJLjzzjvT9ddfn1577bW0+OKL5yvefvrpp0rbHX/88WnIkCF5mYC4Cm7vvfee5j5feuml/PWRRx7Jy0HdddddeVmpwqR83Be36ohjxtJSESY888wzeVwRRhRcdNFF6bTTTkvdunXL+6wYyBTEFX1bbbVVuvnmmyvdf9NNN+VlDCKoKVzpFyFHXOn37LPP5oqRuNIv1mwOETwMGDAg7b///mnYsGHpvvvuy+crFI4br7HiOGKshx12WBo0aFB6++23c++PvfbaKz3++ONThTkRiMR+49zGkg3vvvtuDmJi2a449pxzzlmtcwYAzB4iIFhz5eXTNbf+sQTVR59+np5+8fUcShxw9Jmp/RJrld8qWq7nEuXfzzPnHPnrshXvm2uO9N2Pf3wWHDvu1xyc7DPotEr7O+Piq9LHn31Z/px/3ftQWmubvdK8vTfJj59w7qU5yCg4Yv9d075/PT1tvNMB6exLrk0fj/iixq83gouK1RexpNVHH32UP78Vqn3jwpTx48eXVwgDAADUF8tPFcHYsWPzZHmEBoX+FldeeWUu6b/66qvTX//61/Jto3pgvfXWy98fc8wxqU+fPvkPxqjumFJUF4SorJh33v9rXBkVEKHifTMS6ykfe+yxabvt/lgX+vLLL08PPfRQ+eOdOnXKf8g2a9ZsuvuNqofdd989V2VEiBHVG/fff395QFLxSr/y5RuuvTaPOa7023TTTfNyBhFOREhREOtQV3zNsX3FcZx//vm5muSggw7KP0fVyQsvvJDvj3WlC/7yl7/ksKMgrjCMSpeojglVVaAAAOyzyzbpkBPOTX8/65hcpbHYwt3SemuslJZectFcLVGVFs3/76N34XNPpftSk/y5KIwZ+0dF65XnnZBWW6Fy37L4/BWef+XNtOshJ6RTB/VPG6+7RurUsX0OOS648p/p98l/VNieeHj/tNM2m6cHHn0m/efxZ3P1x82XnJX67r1cfjwqcaNCt2I1cSjcF4/HZ7iKxowZk3tzxIUqUyp8NgMAAKgvQo0iiCvYokJhrbX+7+q96OWw6qqr5uqAipZb7o8/OEMsuxS+++67tOCCC9b6+BV7Z+y22245sKho5MiRuephtdVWK78vqkRior/iElTVseWWW+bXFtUVO++8c65OiQqOjTfeeKor/SoqXOkXr/Wrr75KG220UY2OG+cxKjsqivMdFSYVFcKLggMPPDBtv/32uXomApWoKJlVeoYAAHVnxz9tmg476fx0890PphvuuD8duMcOOaiYe8458m1mzTNX19wn45PP/pd23W7LKrd57pW30kLd5kvHH7ZveuWr39OYlNLrH32dfp+c0uvf/BGOZG27p/X+tEu+RRXwRTfelxZaYf38eevLL7/Mn3sKIUtUtUa17Ouvv55//vHHH3OIUdGKK66YL0yJZVTjcx0AAEBDEmo0chUbVxf+2CxcwVdbb7zxRvn39f2HaCxVsMMOO+QlqCLUiK877bRTDkmqc6Vf9AGpT7FGdEVROfPZZ5+lBx54IFfORJgSS19FhQcAQEH7dm3TTltvmo49+5I0avTYtOeOW9f5MU4ddEA69MTzcgXG5uuvmSZMnJheeevd9PMvo9MR/XfLPTJiqalb730otZ6vR14ytGJPiwgtLr744vx5Zv75588Xi8QymxtuuGF+PD6DnXvuuemGG27I2zz33HPp+eefn+rzUVWVuOedd17ug1ZYjjQ+P8XSp7HEavwMAABQX/TUKIJC8+roH1EQlRvRD2LppZeu9X4Lax1XXEKgKtGPonCLK+ymFEtLRVXIiy++WH7fb7/9ll599f+aYdZE/OH7n//8J73zzjvpscceyz9XvNLvww8/zOOoOK64FZa4iiWgomH69IKfKV9zNKyseH5D/Fyd8xthSr9+/dI///nPvAzXP/7xj1q9bgBg1rbPztukn38ZlTZbb41cVVHX9v3Ltumq80/My1stu/GOab0d9kvX3fbvtMiC8+fHt950vXT4fn9JBx9/Ttp9t13TFx8MSycN3Dc1a5rSCvM2TSvN3yI1nTAqnXnayWmHHbZPJx1/bNpm47XSpScekJfbjGVGL7nkknTvvffm6t1vvvkmL4Manynj8bjFsqbxmayiWI7qqaeeypXDsY/43LXPPvvkEEXlBgAAUN9UahRBXP0WyxzFH43RVDH+IIyr5KLvRPxBWFsRDLRp0yYHCHGFXPTdmPKP0OqK/hVnn312WmKJJVKPHj3S//t//y/98ssvtdrXuuuum/tdRJixyCKLVFrWqjpX+kUz7wMOOCC/vqikGD16dA4oDjnkkLyPQugRy0u1atUqdenSJZ/bHXfcMf8xHktd/fvf/877jCbq03PSSSflqxZ79eqV15QeOnRo/kMdAGg4wza5IZWCNVZePpX977UZbrdw9/mn2m79NVee6r49d9o63yr6y7Zb5Nu0nHvCwHyrKJqDhzatW6ZbLxtc9RP//74c0X+s0IOs4IQTTij//vrrr6/y6fHZblqPAQAA1CeVGkUSgUH0bogm2lGtEH0lohF3TMjXVizpFEsMXHHFFXmJgQgKaisac8fYomJhjTXWyBUT2267ba32Fctm7bLLLrl/RsUqjepe6RdjiIqJSy+9NIcNW221Va7uKBgyZEheKqp79+45xAjRCyP6Z8SyUfGcOCfRgHz99def7ljjysRokB69TCKMiUact956a61eNwAAAAAAdatJWU07PwNVGjVqVK6MGXlMh9Sx1R/9TwCAqo1v3z19utaQtMgCc6XWzf1/s8HN/8eFIDROcYHPp59+mquco/q6ys+cI0c26HJfheN2H3hbatqqbYMdFwCYfYw4u0+xh0CRVfezruWnoI4tM/7q1LTMH3oAMD0LtGiWTimbK02c3C01mfxHX7D6tFy3zvV+DAAAAOqf5acAAAAAAICSINQAAAAAAABKglADAAAAAAAoCXpqAABQGsrKav3U33//vVbPa9asWa2PCQAAQN0TagAAUBImfvtxrZ/7+re1e97KK69c62MCAABQ9yw/BQAAAAAAlASVGgAAlISW8yxW6+f2mr9jKrZTTjkl3XPPPemNN96o8ufGZP3110+9e/dOF154YWqMGmp8TzzxRNpggw3Szz//nDp37lyvxwIAAKpHpQYAAKWhSZNa36I3Rm1u0/P888/nbfr06VOrl3PkkUemRx99NNXlRP/AgQNTQ7juuutSkyZN8q1p06ZpvvnmSzvttFP6/PPPU2Ox8MILN9pQBgAAqD2VGgAANCotNl6jzvc5fDqP9Xxveo9O29VXX50OOeSQ/PWrr75K888/f42e3759+3wrVR07dkzvv/9+KisrS59++mk66KCD0p///Of04osvFntoAADALEylBgAA1NCYMWPSv/71r3TggQfmSo2oXJjS2WefneaZZ57UoUOHtM8++6Tx48dXejyWn4ollKZXadG3b9+05557lv986aWXpiWWWCK1bt0673uHHXbI98c2Tz75ZLrooovKKyhGjBiRH3v77bfTFltskQOUeM7uu++efvjhh/J9jh07Nu2xxx758ai4GDJkSLXOQRxj3nnnzc9Zc80182t86aWX0qhRo8q3Ofroo9OSSy6Z2rZtmxZddNF04oknpkmTJk11Dm688cZcWdGpU6e08847p9GjR8/0+Koa71VXXZW23XbbPJ44j/fdd1+lbR544IE83jZt2uRlpwrnsKJnnnkmrbPOOnmb7t27p0MPPTSPMdxwww15nB9++GH59hH29OjRI40bN65W4wYAACpTqQF17O1TN8tXLgIA0xYT/HF1/yLzdswT9BXVrm6iYd122215onqppZZKu+22Ww4jjj322DxxXng8Juz//ve/p7XXXjtP2l988cV5Yr+2XnnllTyBHvuKEOGnn35KTz/9dH4swowPPvggLbPMMum0007L980111zpl19+SRtuuGHad9990wUXXJB+/fXXHDTsuOOO6bHHHsvb/fWvf82ByL333pvmnnvudNxxx6XXXnutUuAyI9999126++67p1q2KwKdCHyiimXYsGFpv/32y/cdddRR5dt8/PHHubfI0KFDc++KGFsEQmeeeWadja/g1FNPTeeee24677zz0t/+9re06667ps8++yzNMccc6YsvvkjbbbddGjBgQNp///3z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WKPtt99++zRx4sR0/fXXp0UXXTR9++23ecL8xx9/LN8mgg5SDi422mijHCJcccUVqUePHmn06NHp3nvvTYMGDUpPPvlknR3r448/Tn369EkLLbTQdO+ryXvTqVOnOhsfAABQN1RqAABANUX1wtNPP53OOeectMEGG+TJ8lVXXTUde+yxaeutt65y+alpefXVV9PKK6+c2rZtm9Zcc81cTVDRZZddlhZbbLHUsmXLtNRSS6Ubb7yx/LGqllGKscV9UWlR8Pbbb+eKkfbt26d55pkn7b777umHH34oX1opQoWoRojnxS32G68rdOnSJd8X24XJkyenwYMH50qLNm3apOWXXz7dcccd03x9ZWVl+blLLLFEPmcRLsTriSqFqKCIYKNg2LBhacMNN8z77dq1a9p///3TmDFjKu3vqquuSj179sxLSUU4cumll1Y633E+TzvttPx9VENUdV9V5+2dd95JW221VerYsWPq0KFDWmeddXIYUtXyUzM6B4Uqlwi5qnpvo+rj1FNPTW+++Wb5Oa/rShAAAJjVCTUAAKCaIhyIWwQWEyZMmKl9HX/88WnIkCG5mqF58+Zp7733Ln/s7rvvTocddliuZohgon///nkJp8cff7za+4+QI4KCFVZYIR/jP//5T64q2XHHHfPjEWasscYaab/99stLMsUtlme688478+MxER/3xXYhJvNvuOGGdPnll+cg4PDDD0+77bbbNKstIjiI7eI1NG069Z8dnTt3zl/Hjh2bl++KEOXll19Ot99+e3rkkUfSwQcfXL7tTTfdlE466aR05plnpuHDh6ezzjornXjiiblaJsQ4e/XqlY8V3x955JFV3jel//3vf2ndddfNy2I99thjOQSJ9+G3336r8jVV9xxM673daaed8nhiXIVzHvcBAADVZ/kpAACoppigjivrIwiIie0VV1wxrbfeemnnnXdOyy23XI32FRP08dxwzDHH5EqG8ePH50qE888/P1cJHHTQQfnxI444Ir3wwgv5/kIlxYxccsklOdCIAKDgmmuuycHFBx98kJZccslcBRLVBBWXZJpjjjny17nnnrs8eIgAJ/YTYUMEISGW3nrmmWfyslKF11HRhx9+mL9GVcX03Hzzzfl1R1gQ/S8KY//Tn/6UK2KiwiQqOyIk2G677fLjUSnx7rvv5mP369cvjz/emwicCq8lvp/yvkKVSsHf//73vMTUrbfemlq0aJHvi/NSlZqcg2m9t1HdURiXJcoAAKB2VGoAAEANe2p89dVX6b777kubb755XnIowo2aLiNUMQSZb7758tfvvvsuf41qhLXWWqvS9vFz3F9dscRRVHYUqkviVggYCssr1aTZ97hx49Imm2xSaX8RRExrX7H8VHXEa4plnAqBRuG1xlJPUS0SlRxxjH322afSsc8444wav46qqkliualCoFFX52B67y0AADBzVGoAAEANRTVFTG7HLZZB2nfffXM1QaH/RHVUnEiP3gohJvKro7CcU8XgYNKkSZW2iZ4UhWqHKRUm2qur0N/i/vvvTwsssEClx2LppqoUKh7ee++9XDFSW4VjX3nllWm11Var9FizZs3SzIjKifo4BzPz3gIAANMn1AAAgJm09NJLz7AxeE1EQ+xnn302L61UED/HccJcc82Vv0ZPhkJgULH5dYjqkeiPsfDCC+fljqoSy0/9/vvvU90XKt4fx42J+88//7zKpaaqEg3B43mxbFT0jZiyr0b0/IjlreK1RpVLVGQUqjXitcb20SA9lp+af/750yeffJJ23XXXVJeioiL6ckQgNKNqjdqcg+qecwAAoPosPwUAANX0448/5ubb//znP9Nbb72VPv3009zY+txzz03bbLNNnR3nr3/9a57ov+yyy3Jviv/3//5fuuuuu8qbXUeFweqrr57OPvvsvHxTNKo+4YQTKu1jwIAB6aeffkq77LJLbsAdSyQ99NBDueF4YVI9Ao8XX3wxjRgxIvebiGqChRZaKFcXDB06NH3//fe5QqFDhw752NEYO0KA2Ndrr72W/va3v5U3655S7OPaa6/N/TtiiacHHnggBxNx3qLnROF8RVARlS8R4ERT9Fgy65BDDkm77757DjTCqaeempt0X3zxxXl/w4YNy/uO8zIzohn5qFGjck+UaOod5/rGG2/My15NqTbnoCpxzuP3JkKoOOcz23AeAABmN0INAACopuihEEsgXXDBBWnddddNyyyzTF5+KhqHR3PrutK3b9900UUX5cbgvXr1yo2oYxJ//fXXr9T0+7fffksrrbRSGjhwYO4xUVFUN0TFQwQYm266aVp22WXzdlEdUaiaiEn6WMIpqhCi+iOqEGJppQgRosF1hAox8R9OP/30/FojXIjqiugnEksxRdPuaVl11VVzWLD44ovncxTP23rrrdM777yTLrzwwrxNNCqPsCUCmFVWWSXtsMMOaaONNqp0PmN5r6uuuiqfg3gdUSkRoc/0jl0dXbt2TY899lgObmKfcS5jmatpVW3U5hxU1ZMlnhcN3+Oc33LLLTP1GgAAYHbTpKy6HfyA6Yqr/Dp16pRGjhyZOnbsWOzhAECjNn78+Hy1ekwGx1X6QPX+fRTrM6fPugAANJbPnCo1AAAAAACAkiDUAAAAAAAASoJQAwAAAAAAKAlCDQAAAAAAoCQINQAAAAAAgJIg1AAAoGjKysqKPQRodPy7AACAaRNqAADQ4Fq0aJG/jhs3rthDgUan8O+i8O8EAAD4P80rfA8AAA2iWbNmqXPnzum7777LP7dt2zY1adKk2MOColdoRKAR/y7i30f8OwEAACoTagAAUBTzzjtv/loINoA/RKBR+PcBAABUJtQAAKAoojJjvvnmS3PPPXeaNGlSsYcDjUIsOaVCAwAApk2oAQBAUcUErklcAAAAqkOjcAAAAAAAoCQINQAAAAAAgJIg1AAAAAAAAEqCUAMAAAAAACgJQg0AAAAAAKAkCDUAAAAAAICSINQAAAAAAABKglADAAAAAAAoCUINAAAAAACgJAg1AAAAAACAkiDUAAAAAAAASoJQAwAAAAAAKAlCDQAAAAAAoCQ0L/YAYFbzj4FPpjYt26XGbMDlGxZ7CAAAlKBlTn4oNW3VNpW6EWf3KfYQAACoJZUaAAAAAABASRBqAAAAAAAAJcHyUzAbmTDp1/x17Nix+Wu7do17mSwAAAAAgIqEGjAbGXTNVv//1z9+LisrK+6AAAAAAABqwPJTAAAAAABASVCpAbORIXsPzV/7X7x+sYcCAAAAAFBjQg2YjbRq0SZ/1UsDAAAAAChFlp8CAAAAAABKglADAAAAAAAoCZafgjq23tODUvtmzVJjNrxHsUcAQGPU873hxR4CAAAATJdKDQAAAAAAoCQINQAAAAAAgJJg+SkAgEZg3OTJxR5CGjt2bLGHkNq1a1fsIQAAANCICTUAABqBlT/8oNhDSKl9+2KPIJWVlRV7CAAAADRilp+iXuy5556pb9++le674447UuvWrdOQIUPy402aNEkHHHDAVM8dMGBAfiy2AQAAAACAApUaNIirrroqhxWXX3552muvvXJg0b1793TrrbemCy64ILVp0yZvN378+HTzzTenBRdcsNhDBoAG9coSSxZ7CKnH668VewgAAAAwXSo1qHfnnntuOuSQQ3KAEYFGwYorrpiDjbvuuqv8vvg+Ao0VVlih0j4mT56cBg8enBZZZJEcgCy//PK58qPg999/T/vss0/540sttVS66KKLqqweOf/889N8882XunbtmoOWSZMmlW9z6aWXpiWWWCJXlMwzzzxphx12qKezAgCVtW3atOi36GdR7BsAAABMj0oN6tXRRx+dg4KhQ4emjTbaaKrH995773TttdemXXfdNf98zTXX5ODjiSeeqLRdBBr//Oc/c6VHhA5PPfVU2m233dJcc82V1ltvvRx6dOvWLd1+++05rHjuuefS/vvvn8OLHXfcsXw/jz/+eL4vvn700Udpp512Sr1790777bdfeuWVV9Khhx6abrzxxrTmmmumn376KT399NMNcJYAAAAAAKgOoQb15sEHH0z33ntvevTRR9OGG25Y5TYRTBx77LHps88+yz8/++yzuaKjYqgxYcKEdNZZZ6VHHnkkrbHGGvm+RRddND3zzDPpiiuuyKFGixYt0qmnnlr+nKjYeP7559Ntt91WKdTo0qVLuuSSS1KzZs1Sjx49Up8+ffL4ItT4/PPP8xWiW221VerQoUNaaKGFpqoYAQAAAACgeIQa1Jvlllsu/fDDD+nkk09Oq666amrfvv1U20SlRQQL1113XSorK8vfzznnnJW2iYqKcePGpU022aTS/RMnTqwUOvz973/PlR4RTvz666/58ajCqKhXr1450CiIqo1hw4bl72P/EWREYLL55pvn27bbbpvatm1bZ+cEAAAAAIDaE2pQbxZYYIHc92KDDTbIAUFUbkQFRFVLUB188MHlwcSUxowZk7/ef//9eZ8VtWrVKn+N6o4jjzwyDRkyJFdzxHHOO++89OKLL1baPio6KmrSpEleuirEc1577bVcJfLwww+nk046KZ1yyinp5ZdfTp07d6726+43qHlq1ub/ghMAKBnXL1vsEVAihvX746IQAACAhqZROPUqKh+efPLJ9M033+RgY/To0VNtE/dHVUU07N5ss82menzppZfO4UVUYCy++OKVbtFovLBsVfTBOOigg3L1Rjz28ccf13i8zZs3TxtvvHFubv7WW2+lESNGpMcee6yWrx4AAAAAgLqkUoN6F8FDVD9ExUaEFv/5z38qPR7LQQ0fPrz8+ylFBUVUYRx++OG5qmLttddOI0eOzEFGx44dU79+/XLz8BtuuCE99NBDuZ9GNPuOCov4vrqimfknn3yS1l133dx744EHHsjHW2qppergLAAAAAAAMLOEGjSIbt26VQo2opdFRRFOTM/pp5+e+28MHjw4Bw+xHNSKK66YjjvuuPx4//790+uvv5522mmnvKTULrvskqs2Ysmr6op93nXXXXnJqfHjx+eg5JZbbsl9OAAAZkWTJ/yxDGdNjR07tlbPa9euXa2eB1OaPHH8TD2/tr/Dwe8xAEBxNSmL7sxAjU2YMCHfCkaNGpWrUnpe1lNPDQCgJLy959sNejx/esy8+MzZqVOnXLk8owuD6uOzbveBt6WmrdqmYvvsnK2Kdmy/xwAAxf2sq6cG1FJUjcQ/ssKt0N8DAABKnc+6AAA0Vio1oJZUagAAs+vyUy/t+lKtnmfZnpmnUqNulp8afvrmtX6u32MAgOJ+1tVTA2qpVatW+QYAUKqatqpd4bZJ3VlfY/+s27Rl65l6vt9hAIDSZfkpAAAAAACgJDT6UOO6665LnTt3nuF2TZo0Sffcc0+DjKnUvPfee2n11VdPrVu3Tr17967V+RsxYkTe5o033ii/79lnn03LLrtsatGiRerbt2+9jB0AAAAAAEpm+amddtopbbnlluU/n3LKKXnyveLkem2tv/76eZL/wgsvrPLxJ598Mp166qn5WOPHj08LLLBAWnPNNdOVV16ZWrZsWWnb/v37p6uuuirdeuut6c9//nMqhj333DP98ssvU4UTJ598ci6vfv/991P79u2rfO7XX3+dunTpUqPjHXHEEfn8Pfjgg9Pcb32ry9+HuvLCZ1+mjq2aFHsYAAD155ROdby/kXW7PwAAYJbV6Cs12rRpk+aee+4GP+67776bNt9887Tyyiunp556Kg0bNiz97W9/y2HG77//XmnbcePG5TDjqKOOStdcc01qbD7++OO09tprp4UWWih17dq1ym3mnXfeGq+ZG/vdcMMNU7du3apVTdOYTZw4sdhDAAAAAACgsYUaQ4cOzRPghWAgrrCPZY2OOeaY8m323XfftNtuu021/FR8H5UTb775Zn5O3OK+gh9++CFtu+22qW3btmmJJZZI9913X63H+fDDD+eJ/nPPPTcts8wyabHFFsshR1RpRNBS0e23356WXnrp/BoiAPniiy9muP+oAll11VVzkDDffPPl5/7222+VqkgOPfTQHJTMMccceSxRlTAt8dj111+f7r333vJz88QTT+Svr776ajrttNPy99Pax5TLT7300ktphRVWyEtWRbDz+uuvT7UU1Y8//pj23nvvqd6HguOOOy6tttpqU92//PLL5/EURIVLz54987F69OiRLr300krbf/nll2mXXXbJ5yEqTmI8L7744nR/Hz7//PO0zTbb5AqSjh07ph133DF9++23lc5XVJnEsRdZZJF87HDHHXfkJbXiPY4AaOONN05jx46d5nkHAAAAAGAWDjXWWWedNHr06PJJ8pjcn3POOfMEfEHcF5P6VS1FNWjQoNSrV6+8XFLc4r6CmOCOyeu33norL1m16667pp9++qlW44wQIfYfIcWMXH311TmE6dSpU9piiy2qnOCv6H//+18e3yqrrJIn5C+77LK8jzPOOKPSdhFSxCR+TOBHuBJBwH//+98q93nkkUfm1x7BS+HcxFJZ8TXOV5y3+D62m5ExY8akrbbaKgc1EYhEAFDxed27d8/7irAglu6a8n0oiPMf4UhUdBS88847+f35y1/+kn++6aab0kknnZTOPPPMNHz48HTWWWelE088Mb/2wljWW2+9fM4ipIrzFUHP5MmTp/n7EI9FoBHvffwuxTn75JNPphrjRx99lO68885011135XAtnh/hSQQ1MZb4ndxuu+1SWVnZDM8ZAAAAAACzYE+NmPiPK+RjwjiuuI+vhx9+eA4kYgJ75MiRebI5JrKnFFfPx5X3zZs3z6FDVT0lYlI6xOT4xRdfnCfVY6K/pqIvxkMPPZTHEceKRtsbbbRR2mOPPfJkfsGHH36YXnjhhTwxHiLciF4TJ5xwQq4cqEpUIkQwcMkll+Rtojrhq6++SkcffXSe4G/a9I+sabnllsv9MEJUnsT2jz76aNpkk02m2meclzg/EyZMqHRu4vs4X/F4VeesKjfffHMOBiJoiQqGCA2iWuLAAw/Mjzdr1izvK8Ye7+e09hvPi6qM2F8EFYUQI6o3Fl988fxzvL4hQ4bk8CBE1UQs/XXFFVekfv365ed+//336eWXX86VGqHw3MLrnvL3IUKMWC7s008/zec53HDDDXk8sZ8IkwpLTsX9c801V/75tddey9UyMZZYqitE1QYAALU3dmI1LhCZQWVsXOgDAABQtJ4a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AAAAAACAkiDUAAAAAAAASoJQAwAAAAAAKAlCDQAAAAAAoCQINQAAAAAAgJIg1AAAAAAAAEqCUAMAAAAAACgJQg0AAAAAAKAkCDUAAAAAAICSINQAAAAAAABKglADAAAAAAAoCc2LPQCY1fxj4JOpTct2qTEZcPmGxR4CAACzgGVOfig1bdW22MMAmCWNOLtPsYcAUBJUagAAAAAAACVBqAEAAAAAAJQEy0/BLGbCpF+num/s2LFVbtuuXeNaJgsAAAAAYHqEGjCLGXTNVlXcV/W2ZWVl9T8gAAAAAIA6YvkpAAAAAACgJKjUgFnMkL2HTnVf/4vXL8pYAAAAAADqklADZjGtWrSZ6j69MwAAAACAWYHlpwAAAAAAgJIg1AAAAAAAAEqCUAMAAAAAACgJempAHVvv6UGpfbNmqTEZ3qPYIwCA+tHzveHFHgIAAAANSKUGAAAAAABQEoQaAAAAAABASbD8VANbf/31U+/evdOFF15Yre1HjBiRFllkkfT666/n5xXbwgsvnAYOHJhvAMDsadzkyamxGDt2bGos2rVrV+whAAAAzPKEGnVgzz33TNdff33q379/uvzyyys9NmDAgHTppZemfv36peuuuy7dddddqUWLFtXed/fu3dPXX3+d5pxzzkohR0Hsa8EFF8xjOP7441OTJk2qve/Y9u677059+/at9nNqs99JkyalPfbYIz311FPpoYceSssss0z5OJ9//vm0+uqrlz93woQJaf75508//fRTevzxx3MIBAA0Lit/+EFqNNq3T41FWVlZsYcAAAAwy7P8VB2J8OHWW29Nv/76a/l948ePTzfffHMOHQrmmGOO1KFDh2rvt1mzZmneeedNzZtXzp8eeeSRHHZ8+OGH6dRTT01nnnlmuuaaa1JjM27cuLT11lunl19+OT3zzDM50Kh4zq699tpK20cY0r4RTU4AAAAAANB4CDXqyIorrpgn6aMSoyC+j0BjhRVWKL8vKg8qLt0UyzmdddZZae+9985hR2z/j3/8o/zxqMyIqoY33nij0vG6du2aw46FFloo7brrrmmttdZKr732WvnjESJssskmucKjU6dOab311qv0eBw3bLvttnn/hZ/Dv//977TKKquk1q1b5+fHNlMGFdMab0W//PJLHsNXX32VA42KFSYhqlemDIIimIn7p/TFF1+kHXfcMXXu3DkH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AAAAAABA49boe2q0adMm3xrau+++mzbffPN0yCGHpIsvvjiP4cMPP0x33nln+v333yttO27cuHTrrbemo446Kl1zzTXpz3/+c2pMPv7449SnT5+00EILTXObeeedt1b7PeCAA1K3bt1SqYugqmXLlnWyrxc++zJ1bNWkTvYFAFBjp3SazmMjG3IkAAAApV+pMXTo0LycVCEYiOWMYlmjY445pnybfffdN+22225TLT8V35966qnpzTffzM+JW8UKgR9++CFtu+225VUV9913X63H+fDDD+eJ/nPPPTcts8wyabHFFsshx5VXXjlVyBLVGUsvvXR+DU899VT64osvZrj/qAJZddVVc/O9+eabLz/3t99+q1RFcuihh+agJCpFYixRlTAt8dj111+f7r333vJz88QTT+Svr776ajrttNPy99Pax5TLT7300ktphRVWyEtWrbzyyun111+faimqH3/8Me29995TvQ8Fxx13XFpttdWmun/55ZfP4ym46qqrUs+ePfOxevTokS699NJK23/55Zdpl112yechKk5iPC+++OJ0fx8+//zztM0226T27dunjh07ph133DF9++23U1V4xLEXWWSRfOxwxx135CW14j3u2rVr2njjjdPYsWOned4BAAAAAJiFQ4111lknjR49unySPCb355xzzjwBXxD3xaR+VUtRDRo0KPXq1SsvlxS3uK8gJrhj8vqtt95KW265Zdp1113TTz/9VKtxRogQ+4+QYkauvvrqHMJ06tQpL+E0o6WY/ve//+XxrbLKKnlC/rLLLsv7OOOMMyptFyFFTOLHBH6EKxEE/Pe//61yn0ceeWR+7RG8FM7Nmmuumb/G+YrzFt/HdjMyZsyYtNVWW+WgJgKRCAAqPq979+55XxEWXHjhhVO9DwVx/iMciYqOgnfeeSe/P3/5y1/yzzfddFM66aST0plnnpmGDx+ezjrrrHTiiSfm114Yy3rrrZfPWYRUcb4i6Jk8efI0fx/isQg04r2P36U4Z5988slUY/zoo49y5c1dd92Vw7V4foQnEdTEWOJ3crvttktlZWUzPGcAAAAAAMyCy0/FxH9cIR8TxnHFfXw9/PDDcyARE9gjR47Mk80xkT2luHo+rrxv3rx5lcslRU+JmJQOMTkey0bFpHpM9NdULCH10EMP5XHEsaLR9kYbbZT22GOPPJlfEEtS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HZQOO+ywqapH1l577TRkyJA0ceLEtPPOO6cLL7wwtWjRIm8TFSIXXHBB+uKLL1KnTp3SOuuskytMAGB28coSS9br/nu8/lq97h8AAIBZm1CDenX00UfnoGDo0KFpo402murxvffeO1177bXlocY111yT9tprr/TEE09U2m7w4MHpn//8Z16qaokllkhPPfVUXspqrrnmSuutt14OPbp165Zuv/321LVr1/Tcc8/lkGO++eZLO+64Y/l+Hn/88XxffP3oo4/STjvtlHr37p3222+/9Morr6RDDz003XjjjWnNNddMP/30U3r66acb4CwBQOPRtmn9FvLqeQEAAMDMEGpQbx588MF07733pkcffTRtuOGGVW4TwcSxxx6bPvvss/zzs88+mys6KoYaEyZMSGeddVZ65JFH0hprrJHvW3TRRdMzzzyTrrjiihxqRKXFqaeeWv6cqPR4/vnn02233VYp1OjSpUu65JJLUrNmzVKPHj1Snz598vgi1Pj888/zRMtWW22VOnTokBZaaKG0wgor1OMZAgAAAACgJoQa1Jvlllsu/fDDD3npqVVXXTW1r6IxaFRaRLAQDcGjsWd8P+ecc1baJioqxo0blzbZZJNK98fyURVDh7///e+50iPCiejTEY9HFUZFvXr1yoFGQVRtRNPyEPuPICMCk8033zzfYrmstm3b1tk5AQAAAACg9oQa1JsFFlgg96PYYIMNckAQlRtRAVHVElQHH3xweTAxpTFjxuSv999/f95nRa1atcpfo7rjyCOPzL0yopojjnPeeeelF198sdL2hd4ZBU2aNMlLV4V4zmuvvZarRB5++OF00kknpVNOOSW9/PLLqXPnztV+3f0GNU/N2vxfcAIAVHD9ssUeATNhWL8/LgYBAAAolvpdNJnZXlQ+PPnkk7l5dwQbo0ePnmqbuD+qKiZNmpQ222yzqR5feumlc3gRFRiLL754pVv37t3Ll62KPhjRHDyqN+KxaEJeU82bN08bb7xxbm7+1ltvpREjRuTm4wAAAAAAFJ9KDepdBA9R/RAVGxFa/Oc//6n0eCwHNXz48PLvpxQVFFGFcfjhh+eqirXXXjuNHDkyBxkdO3ZM/fr1y83Db7jhhvTQQw/lfhrR7DsqLOL76opm5p988klad911c++NBx54IB9vqaWWqoOzAAAAAADAzBJq0CC6detWKdiIXhYVRTgxPaeffnruvzF48OAcPMRyUCuuuGI67rjj8uP9+/dPr7/+etppp53yklK77LJLrtqIJa+qK/Z511135SWnxo8fn4OSW265JffhAAAAAACg+JqURXdmYKaNGjUqderUKfW8rKeeGgBAg5o84Y8eYfXtpV1fSg2lXbt2DXasUvzMGZXLM7owqD6O233gbalpq7apMZs8cfwMtxl++ubV2pffQwCAxvdZV6UG1NKECRPyreI/OgCAYni3/7sNcpz2/dunhuLaq+Iq5c+6X1ywwwy3aX9B9fbl9xAAoPHRKBxqKZbCiuSwcCs0LQcAgFLnsy4AAI2V5aegDq9eiz/2LD8FADQ0y0/NPhpq+alpfda1/BQAAPXF8lNQz1q1apVvAADF1rRVwxRgm+CdfZTyZ92mLVvPcBu/ywAApave/vq57rrrUufOnWe4XZMmTdI999yTZmd77rln6tu3b73tf8SIEfk8v/HGG3W+74UXXjhdeOGFdb5fAAAAAABosFBjp512Sh988EH5z6ecckrq3bt3nex7/fXXTwMHDpzm408++WTacMMN0xxzzJHatm2bllhiidSvX780ceLEqbbt379/atasWbr99tvrZGw0rCeeeCIHNr/88kuxhwIAAAAAQD2rt+Wn2rRpk28N7d13302bb755OuSQQ9LFF1+cx/Dhhx+mO++8M/3++++Vth03bly69dZb01FHHZWuueaa9Oc//7nBx0vjEK1l4vejefOZ/yfxwmdfpo6tmtTJuAAAGpVTOhXpuCOLc1wAAKB0KzWGDh2al5MqBAOxlFFcIX/MMceUb7Pvvvum3Xbbbarlp+L7U089Nb355pv5OXGL+wp++OGHtO2225ZXVdx33321fkEPP/xwmnfeedO5556blllmmbTYYovlkOPKK6+cKmSJ6oyll146v4annnoqffHFFzPcf1SBrLrqqnl92fnmmy8/97fffqtURXLooYfmoCQqRWIsUaVSHeeff37eZ9euXdOAAQPSpEmTyh+78cYb08orr5w6dOiQ9/mXv/wlfffdd+WP//zzz2nXXXdNc801V36dcR6vvfbaSvv/5JNP0gYbbJDP8/LLL5+ef/75So8/88wzaZ111snPjyaA8TrGjh1b/ngc709/+lN+fJFFFkk33XTTDN+L1q1bT1VFcdhhh+VKmuoeNxoUHn300fmxOO+LL754uvrqq/OyWvF6QpcuXfLvVSzlVXhO7GfuuefOY1h77bXTyy+/PFWFx4MPPphWWmmlvN8YR/yOxj7jPEczmnjslVdeqca7BwAAAABAowk1YtJ59OjR6fXXXy+f3J9zzjnz5HBB3BeT+lUtRTVo0KDUq1ev9PXXX+db3FcQgceOO+6Y3nrrrbTlllvmyfmffvqpVi8oJvxj/xFSzEhMjEcIEx3Vt9hii0pBS1X+97//5fGtssoqefL7sssuy/s444wzKm13/fXX58ZzL774Yg5XTjvttPTf//53uvt+/PHH08cff5y/xvNjLBXHEwHH6aefno8bPUhiQr8wgR9OPPHEXKUSk/TDhw/PY4v3p6Ljjz8+HXnkkTmQWnLJJdMuu+xSHsjEsSP82X777fP78K9//StP8h988MHlz4/jRfATY7zjjjvSpZdeWilYmdJGG22Ug62okimIUCz2He9xdY+7xx57pFtuuSVX3sRru+KKK1L79u1zyFHY9/vvv5/f94suuij/HKFSPBbn8rXXXstByGabbTbV71WEUmeffXbe73LLLZfH1a1btxyAvPrqq/nxFi1aTPe9AwAAAACgYTQpi3V3qimuWo+J8JgYj8qKmNyPQOLHH39MI0eOzJPB0UcjqgRiQj76XhSu0o9qhZiMn7JZdVwtf8IJJ+QJ+xBX6MeEdUzOx2R3VSI4if4cVTWojknzqBiJ40fAsfrqq+fJ9ZgYjyvvC2JJqghZvvrqqzz5H2M74ogj8iR7jKkqEQrERHlMgBe2iYn9qCKI19+0adM8thjD008/Xf68qOyIyoSYPK9KhAURDsWxo79HiJAn9hfLY1Ulqgfi/EfQFOdr6623zq8jltGaUgQgUVlx1VVXpX322SffFwFIvP54LT169MjnLI4dgUFBhAvrrbdefk8+//zztNRSS6WXXnopHze89957qWfPnumCCy6YZo+TuH/YsGHp0UcfLa/eiLF+8803OfCo7nEjFNp4442n2n+ct6isiEqVQmVQPC8qN+J3ICpaCqFQNDWP8fz1r38tf16879tss035/uJ35G9/+1vuwVJTo0aNygHZyGM6WH4KACh5YydW+8+E+nf816kxiQuYiqX8M+fIkZX+vmmo43YfeFtq2qptKnUjzu5T7CEAAFDLz7o1aiAQE80xGRxVFzFpP3jw4HTbbbflSei4An7++efPgUZNxRXyFf9AiAFPrwJgemKCPJZdiuqJxx57LFdLnHXWWemcc87JE/KxvFOIyf+4cr9QzRAVGDHhH8+JEKQqEQCsscYalUKPtdZaK40ZMyZ9+eWXacEFF5zq9YQ45oxeTwQMhUCj8JwIAwqiaiCCoajUiAn8yZMn5/tj0j+W0DrwwANztUNUJWy66aapb9++ac0116x0jIrjKpyHGFeEGrHfqJSouKRU5F1xnE8//TSHVdFvIoKtgnheIUiYlqh8iGApwqP4/Yj99+nTp/x5MzpunIM4L/G7V10RDkWIEe9NQVRbRLgU72FFsaRXRRFsRdASy31FiBJ9VmIJMwCA2U37waNTozG4fWpManBdGAAAUKzlp0JUIRT6DsQkcUxqx30RdMTSUzWZeK5oyuV9IjQoTNrX1gILLJB23333dMkll6R33nknjR8/Pl1++eX5saikiGWJ7r///jxRH7foMxHBTFWVDg3xeqb3nKg8iAAmwp6Y/I+lke6+++782MSJE/PXWD7rs88+S4cffngOECKYiYqaaR2jEMwUjhHBTP/+/XMlTeEW73NUtMzMpH5UdcTzo+Lk119/zeMuLD1VnePWd7P5Ka+yi+Aofl8ieImAKwKjwrkGAAAAAKC4alSpUeirEcsNFQKMCDViWaWoHogKjmlp2bJleZPxhhZLEUVlQqH59AMPPFDeH6RidcTbb7+d9tprr7xkVlUVCLHUUiw/FVdmFUKBZ599NjeVjqW36kss8xRLfMV5jj4Soarm1dEkPJZNilu8V7HMUjQfr44VV1wxL0kVvSeqEgFW9N+IipHC8lPRx2LKJuBViRAjwpg4R7GkVgQG1T3usssum4OXCM2qWn4qfq9Cxd+tCEPi/nhvFlpooXxfVG5EGDStZbIqin4jcYuAKJZbi8qfWG4NAGB2MubYDqnRaGTLTwEAACUSakQ4EEsYxQR1VECEddddN/d/iEnj6VVqRD+DWE4orsSPye0IAlq1alXrgX///fdT9eeI4KLQtyMmoWNyOyo0brjhhnz1ffRKCNHcOybWl19++UrPj6vyYyI7Xt+AAQOmOuZBBx2U+3gccsghuZF1TOqffPLJecmimKyvL7GsVUzSx/gPOOCAHL4UepAUnHTSSXlpqFjGasKECWno0KE5hKmu6AsSy0TF64rll6KCIcKG6GUR73X0tYgeJ1FVEU3Io7olAoLqVFJEqBEVEGeeeWbaYYcdKr3vMzpu/N5ESLP33nvnRuHxnkVFSiybFb93EVpEwBSvN5YQi/FEj5FYjitCnTnmmCOfv2jYPm7cuPKeIlWJSpJ4TowxepDEkmIRhMSyXgAAs5t2LRtRj7Ai9rAAAAAalxrPxEdwEVfFR4VGiEnjCAOiKXdMfE9LTAzHpHg0Z46KgltuuWWmBn7zzTenFVZYodLtyiuvzH0TYkmjmPyPCf4Y7wsvvJDDjvj+22+/zctOVTVRHcFEhCERekxrSauo8ojeHDG5HseISfJodF6f4nxF0+vbb789n+uo2JiyAiNCj2OPPTaHThE0RQXKtJqMVyWeF9UQ0TsjqjzifEZQEn0wCqJiIX6O87jddtul/fffP80999wz3HdUYcT7Er0zKi49Vd3jRogSQUOESlExst9++5VX3cR7Es3qjznmmDTPPPPkcCTEOYr3OJYgi2qQjz76KD300EM5mJuWOGdRERNN5aNSI0KTWNYr9g8AAAAAQPE1KdPlDurEqFGjUqdOndLIYzqkjq0a0ZWNAACl7pSRxR5B4/vMOXJk7rnX0MftPvC21LRV21TqRpz9f0viAgBQWp9162/NJAAAAAAAgGL11ABmbJnxV6emZaV/9RoAUBpccQ4AAMxOVGoAAAAAAAAlQagBAAAAAACUBMtPAQBAA5s8cXyd7Wvs2LF1tq927drV2b4AAADqg1ADAAAa2BcX7FBn+2p/QZ3tKpWVldXdzgAAAOqB5acAAAAAAICSoFIDAAAaWPfD76izfQ0/ffM62xcAAEBjJ9QAAIAG1rRl6zrblz4YAADA7MTyUwAAAAAAQEkQagAAAAAAACXB8lNQx94+dbPUsWPHYg8DAADqnM+6AAAUm0oNAAAAAACgJAg1AAAAAACAkiDUAAAAAAAASoJQAwAAAAAAKAlCDQAAAAAAoCQINQAAAAAAgJIg1AAAAAAAAEqCUAMAAAAAACgJQg0AAAAAAKAkCDUAAAAAAICSINQAAAAAAABKglADAAAAAAAoCUINAAAAAACgJAg1AAAAAACAkiDUAAAAAAAASoJQAwAAAAAAKAlCDQAAAAAAoCQINQAAAAAAgJIg1AAAAAAAAEqCUAMAAAAAACgJQg0AAAAAAKAkCDUAAAAAAICSINQAAAAAAABKglADAAAAAAAoCUINAAAAAACgJAg1AAAAAACAkiDUAAAAAAAASoJQAwAAAAAAKAlCDQAAAAAAoCQINQAAAAAAgJIg1AAAAAAAAEqCUAMAAAAAACgJQg0AAAAAAKAkCDUAAAAAAICSINQAAAAAAABKglADAAAAAAAoCUINAAAAAACgJAg1AAAAAACAkiDUAAAAAAAASoJQAwAAAAAAKAlCDQAAAAAAoCQINQAAAAAAgJIg1AAAAAAAAEqCUAMAAAAAACgJQg0AAAAAAKAkCDUAAAAAAICSINQAAAAAAABKglADAAAAAAAoCUINAAAAAACgJAg1AAAAAACAkiDUAAAAAAAASoJQAwAAAAAAKAnNiz0AmNX8Y+CTqU3LdqmxGXD5hsUeAgAAJW6Zkx9KTVu1LfYwAGYpI87uU+whAJQUlRoAAAAAAEBJEGoAAAAAAAAlwfJTMAubMOnX8u/Hjh1b6bF27RrfElkAAAAAANMj1IBZ2KBrtqrwfeXHysrKGn5AAAAAAAAzwfJTAAAAAABASVCpAbOwIXsPLf++/8XrF3UsAAAAAAAzS6gBs7BWLdqUf6+HBgAAAABQ6iw/BQAAAAAAlAShBgAAAAAAUBIsPwV1bL2nB6X2zZqlxmZ4j2KPAIDGpOd7w4s9BAAAAKgxlRoAAAAAAEBJEGoAAAAAAAAlQagBAAAAAACUBD01Gtj666+fevfunS688MJqbT9ixIi0yCKLpNdffz0/r9gWXnjhNHDgwHwDgMZi3OTJxR5CyRk7dmyxh1By2rVrV+whAAAAzPaEGnVgzz33TNdff33q379/uvzyyys9NmDAgHTppZemfv36peuuuy7dddddqUWLFtXed/fu3dPXX3+d5pxzzkohR0Hsa8EFF8xjOP7441OTJk2qve/Y9u677059+/at9nNqs99JkyalPfbYIz311FPpoYceSssss0z5OJ9//vm0+uqrlz93woQJaf75508//fRTevzxx3MIBAAzsvKHHxR7CKWnfftij6DklJWVFXsIAAAAsz3LT9WRCB9uvfXW9Ouvv5bfN378+HTzzTfn0KFgjjnmSB06dKj2fps1a5bmnXfe1Lx55fzpkUceyWHHhx9+mE499dR05plnpmuuuSY1NuPGjUtbb711evnll9MzzzyTA42K5+zaa6+ttH2EIe1NsgAAAAAAUAWVGnVkxRVXTB9//HGuxNh1113zffF9BBoVKyumXH4qlnPaf//900cffZRuv/321KVLl3TCCSfk+6a3/FTXrl1z2BEWWmihHA689tpraZ999sn3RYhw3HHH5edFpUQ894ILLsjjLBw3bLvttuX7iGOFf//73+m0005Lw4YNywHDOuusk8OGikHF3nvvXeV4K/rll19Snz590pgxY3KgURhvQVSvXHzxxflctGnTJt8XwUzcf/rpp1fa9osvvkiDBg1KDz/8cGratGke00UXXVT+Omb0ekNUh1x55ZXp/vvvzxUjCyywQBoyZEgOXcLPP/+cDj744HyMGHO3bt3yPvfaa68a/z4A0LBeWWLJYg+h5PR4/bViDwEAAABqTKVGHYqJ/oqVBzFBX50J8ZhYX3nllfOE/EEHHZQOPPDA9P7771f7uK+88kp69dVX02qrrVZ+3+jRo3M4EGHCCy+8kJZYYom05ZZb5vsLIUCI8UbFR+HnmPCPoCO2jfE8+uijadVVV63xeL/55pu03nrr5e+ffPLJqQKNsNJKK+VQ4s4778w/f/7553mJqt13373SdhFSbLbZZrnC5emnn07PPvtsDls233zzNHHixGq93oKoatlxxx3TW2+9lR+PACqWugonnnhievfdd9ODDz6Yhg8fni677LLyZb8AaNzaNm3qVsNb9Idwq9kNAACA4lOpUYd22223dOyxx6bPPvss/xyT77Ek1RNPPDHd58XkeoQD4eijj84VBtFPYqmllprmc9Zcc81csRCT+jHpH5US0beiYMMNN6y0/T/+8Y/UuXPnHDBstdVWaa655sr3x30VA4dYxmrnnXfOk/8Fyy+/fI3He9hhh6VFF100/fe//01t27adbhAU4U+cu+g5EvsujK3gX//6V5o8eXK66qqryntxRBgTY49zu+mmm87w9RZE75Fddtklf3/WWWflSpGXXnopByQRqqywwgo5sAmFKhAAAAAAABoHlRp1KCbjY7mlmJyPSff4vjpX+i+33HLl38ekfYQM33333XSfExP9b7zxRnrzzTfTbbfdlu699950zDHHlD/+7bffpv322y9XLHTq1Cl17NgxL6kUE/fTE/vcaKONZnq8ESR88MEH6YorrpjuviLMiGbhn3zyST5vEXJMKV5jLM8VlRpRoRG36E0SPUtiya+avN6KY48rLmO7wtij4iRCqFi66qijjkrPPffcdMcOAAAAAEDDUqlRx2JSPvoyhL///e/Vek6LFi0q/RxBQVQmTE802V588cXz9z179syT+7F80imnnJJat26dl2L68ccfc9+J6JfRqlWrtMYaa5Qv1zQthd4WMzveWEIqelXE+SgrK0tHHHFElfuK3iARgEQvkAgptthii6mWjIpwIpaquummm6Z6fqGqo7qvd3pjj2NHlc0DDzyQK0wi3BkwYEA6//zzU030G9Q8NWvTrEbPAYAGd/2yxR5BozOs37BiDwEAAIAZEGrUsUKfh5gsjz4QDaVZs2bpt99+y8eOUCOWvrr00kvzck6FRts//PDDVBP8v//++1SVDNFHoy6aY0fQEEtkxb4iODjyyCOr3C6CjxhnLGUVr2NK0ew7KlPmnnvuXFlRleq83uqIkCTGHbdoRv7Xv/61xqEGAAAAAAD1Q6hRx2JSPppMF76vL1GVEM24I8gYNmxYrlDYYIMNyif9YxmmG2+8MfeHGDVqVJ6cn7IKI3pGRICx1lpr5cqGLl26pJNPPjlXKCy22GK5t0bsPyoXInCojajYiGAjQoKo2IhxVBUEff/999MMLKKZ93nnnZe22WabdNppp6Vu3brlioq77rorLxMVP1fn9c7ISSedlCtCevXqlSZMmJCGDh2aq2AAAAAAAGgchBr1YFqT83Vp4403Lg9O5ptvvlyhEE2+C66++urcPDyqHGKpqmiKPWWlxJAhQ/KyUFdeeWVaYIEF0ogRI9L666+fbr/99nT66aens88+O7+Wddddd6bGGqFEBBsRcETFxpQBSVS1TK/3SDQaf+qpp/Lztttuu7w8VYw3wpfCua7O652Rli1b5kbvcR4iEIlKjeixAQClYPKE6S9dyYyNHTu22EOYJUTfMgBK2+SJ44s9hNmKzyANz+cVKG1NyuLyeaDGopojbgVRIRKBSs/LeuqpAUCDe3vPt4s9BMj8eVG/4jNnp06d0siRI+v1YqppfdbtPvC21LRV23o7LtA4fHbOVsUeAtQrn1egtD/rNm3QUcEsZPDgwfkfWeEWf+QBAMCswGddAAAaK5UaUEsqNQBoTCw/NfNe2vWlYg9hlmA5h/qlUgNoCJafaljDT9+82EOY7fi8AqX9WVdPDailaK4eNwBoDJq2UoA7s/xxC//HZ12YvTVt2brYQ5it+AwCUDP++gUAAAAAAGbvUOO6665LnTt3nuF2TZo0Sffcc0+ane25556pb9++9bb/ESNG5PP8xhtv1Pm+F1544XThhRfW+X4BAAAAAKDBlp/aaaed0pZbbln+8ymnnJLDi7qYWF9//fVT7969pzmZ/uSTT6ZTTz01H2v8+PFpgQUWSGuuuWa68sorU8uWLStt279//3TVVVelW2+9Nf35z3+e6bHRsJ544om0wQYbpJ9//rlaIVpDeOGzL1PHVk2KPQwAoKZO6TSTzx9ZVyMBAACgoSs12rRpk+aee+7U0N599920+eabp5VXXjk99dRTadiwYelvf/tbDjN+//33StuOGzcuhxlHHXVUuuaaaxp8rDQeZWVl6bfffiv2MAAAAAAAqItQY+jQoflK+EIwEFUQsaTRMcccU77Nvvvum3bbbbeplp+K76Ny4s0338zPiVvcV/DDDz+kbbfdNrVt2zYtscQS6b777ku19fDDD6d55503nXvuuWmZZZZJiy22WA45okojgpaKbr/99rT00kvn1xAByBdffDHD/UcVyKqrrpqb5s0333z5uRUnw6OK5NBDD81ByRxzzJHHElUq1XH++efnfXbt2jUNGDAgTZo0qfyxG2+8MQc1HTp0yPv8y1/+kr777rvyx6NSYdddd01zzTVXfp1xHq+99tpK+//kk09yVUOc5+WXXz49//zzlR5/5pln0jrrrJOf37179/w6xo4dW/54HO9Pf/pTfnyRRRZJN9100wzfi9atW6dffvml0v2HHXZY2nDDDat93AkTJqSjjz46PxbnffHFF09XX311XlYrXk/o0qVL/r2KpbwKz4n9RLAWY1h77bXTyy+/XKnCI7Z/8MEH00orrZT3G+OI39HYZ5znjh075sdeeeWVarx7AAAAAAA0mlAjJp1Hjx6dXn/99fLJ/TnnnDNPDhfEfTGpX9VSVIMGDUq9evVKX3/9db7FfQUReOy4447prbfeyktWxeT8Tz/9VKsXFBP+sf8IKWYkJsYjhOnUqVPaYostKgUtVfnf//6Xx7fKKqvkye/LLrss7+OMM86otN3111+f2rVrl1588cUcrpx22mnpv//973T3/fjjj6ePP/44f43nx1gqjicCjtNPPz0fN5bxign9wgR+OPHEE3OVSkzSDx8+PI8t3p+Kjj/++HTkkUfmQGrJJZdMu+yyS3kgE8eO8Gf77bfP78O//vWvPMl/8MEHlz8/jhfBT4zx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TqUGAAAAAABQEoQaAAAAAABASRBqAAAAAAAAJUGoATXw97//PS288MKpdevWabXVVksvvfTSdLe//fbbU48ePfL2yy67bHrggQcabKyU1u/LO++8k7bffvu8fZMmTdKFF17YoGOltH5frrzyyrTOOuukLl265NvGG288w/8eMfv+vtx1111p5ZVXTp07d07t2rVLvXv3TjfeeGODjpfS+vxScOutt+b/J/Xt27fex8is8dk22jWedNJJab755ktt2rTJ/3/68MMP0+yors9t/Ld80003TV27ds3/Lt944400u6rLcztp0qR09NFH5/vj/5Hzzz9/2mOPPdJXX/1/7d0HcFRVF8Dxi0CoofcWQu+hhjYfLZQgkoAiIEVg6IKMNAWRoSldARHpJRmRIiIgIFXAEJrSkSKEBAalCEhvAvebc2d2Z4kJKeQl2bz/b2YN2X27777rnew577a/lB0ldLsdPXq0eV3q1hGz7t+/X9mRlfcS+vTpY9scMqHrtWvXrqYuXR/+/v7Kjqxos6dOnVIBAQEqa9as5u9CjRo11MWLF5XdJHTdporUZh2PKVOmqBRNNgoHELPly5drDw8PvWjRIv3777/rnj176mzZsumrV69GeXxoaKhOnTq1njx5sj558qT+5JNPdNq0afXx48cTvexI/u3lwIEDesiQIXrZsmU6X758etq0aYleZrhPe+nQoYOeNWuWPnz4sD516pTu2rWrzpo1q7506VKilx3Jv73s2LFDr1692nwXnTt3Tk+fPt18P23atCnRy47k314cwsPDdcGCBfX//vc/HRgYmGjlhXvHthMnTjTfR2vWrNFHjx7VAQEB2tvbWz98+FDbiRV1GxwcrMeMGaPnz5+vJY2XGMCOErpub926pRs3bqxXrFihT58+rffu3at9fX11tWrVtN1Y0W6XLl2qt27dqsPCwvSJEyd09+7ddZYsWfS1a9e0nVh5L0FiPB8fH12gQAHb5ZBW1GuXLl20v7+/vnz5svNx8+ZNbTdW1K3kITly5NBDhw7Vhw4dMr+vXbs2xpg0pbGibi+7tFd5yGenSpXK/O1NyejUAGJJgtt+/fo5f3/27JkJHCZMmBDl8W3bttUtWrR44bmaNWvq3r17W15WuF97ceXl5WW7gNTuXqW9iKdPn2pPT08dFBRkYSmRUtqLqFKligmIkfLFp73I35Q6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",
"text/plain": [
"<Figure size 1600x600 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"import pandas as pd\n",
"\n",
"fig, (ax0, ax1) = plt.subplots(ncols=2, figsize=(16, 6), sharey=True)\n",
"\n",
"df = pd.DataFrame(evaluations[::-1]).set_index(\"estimator\")\n",
"df_std = pd.DataFrame(evaluations_std[::-1]).set_index(\"estimator\")\n",
"\n",
"df.drop(\n",
" [\"train_time\"],\n",
" axis=\"columns\",\n",
").plot.barh(ax=ax0, xerr=df_std)\n",
"ax0.set_xlabel(\"Clustering scores\")\n",
"ax0.set_ylabel(\"\")\n",
"\n",
"df[\"train_time\"].plot.barh(ax=ax1, xerr=df_std[\"train_time\"])\n",
"ax1.set_xlabel(\"Clustering time (s)\")\n",
"plt.tight_layout()"
]
},
{
"cell_type": "markdown",
"id": "2454c41c-7745-41af-8543-eea3b3b78a3a",
"metadata": {},
"source": [
"Как видим, модель успешно справилась с заданием, а наиболее эффективным оказался K-means с использованием LSA на хэшированных векторах"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.13.3"
}
},
"nbformat": 4,
"nbformat_minor": 5
}