{ "cells": [ { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np\n", "from gensim.models import KeyedVectors\n", "# https://github.com/sdadas/polish-nlp-resources?tab=readme-ov-file#fasttext\n", "fasttext_model = KeyedVectors.load(\"fasttext_100_3_polish.bin\")" ] }, { "cell_type": "code", "execution_count": 6, "outputs": [ { "data": { "text/plain": "array([-0.10575686, 0.00275842, -0.15149923, 0.04684225, -0.09484185,\n 0.27445596, -0.13551135, -0.08899829, -0.16027121, 0.0851451 ,\n 0.18053234, -0.0375574 , 0.08118784, -0.03693336, 0.13899295,\n 0.0148702 , -0.03542297, 0.07549705, -0.06520785, -0.09142417,\n -0.00903711, 0.15116395, -0.100382 , 0.0491643 , 0.00223149,\n -0.06079744, 0.0959003 , -0.12254302, -0.06442568, -0.01175186,\n 0.14357556, 0.082293 , -0.00633075, 0.12356292, -0.12873764,\n 0.03582585, 0.00486956, 0.02265417, 0.09742602, 0.00961361,\n -0.07241934, 0.05235291, -0.15645239, 0.05410094, -0.03922489,\n -0.19014828, 0.05091096, -0.16526255, -0.04351336, 0.02157344,\n -0.15707618, -0.01369421, 0.05524002, -0.12716308, 0.10982089,\n 0.11500968, 0.00536837, 0.16475938, -0.13811931, -0.02000868,\n 0.06066024, -0.03149116, -0.12379967, -0.21108894, 0.07293601,\n -0.14373247, -0.10874739, -0.03041346, 0.24131383, 0.06944644,\n -0.00836486, -0.11847664, -0.04725966, 0.00336932, 0.04964857,\n 0.01957623, -0.02785001, -0.0883517 , -0.12014113, -0.02970322,\n -0.00858476, -0.0711842 , 0.04591263, -0.05298669, -0.0397255 ,\n 0.06707988, -0.01675842, 0.08076061, -0.01310711, 0.01628348,\n 0.03469754, -0.04314699, -0.00516709, 0.2871206 , 0.05852846,\n -0.18093199, -0.00342047, -0.147456 , -0.04751889, -0.02945601],\n dtype=float32)" }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fasttext_model.wv.get_vector('office', norm=True)" ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 8, "outputs": [ { "data": { "text/plain": "0.72575206" }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fasttext_model.wv.n_similarity(['sushi', 'shop'], ['japanese', 'restaurant'])" ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 60, "outputs": [], "source": [ "import string\n", "import numpy as np\n", "def get_document_vector(document_string):\n", " processed = document_string.translate(str.maketrans('', '', string.punctuation)).split()\n", " try:\n", " processed = np.array(fasttext_model.wv.get_sentence_vector(processed))\n", " return processed\n", " except ValueError:\n", " return np.NAN" ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 61, "outputs": [ { "data": { "text/plain": "array([ 0.01578879, -0.0966718 , -0.12096456, 0.03103824, 0.11989886,\n 0.08134278, -0.02491791, -0.04889391, -0.05900102, 0.05264781,\n 0.07366802, 0.05264994, 0.03538202, 0.03959122, 0.08029908,\n -0.05133899, -0.00391489, 0.05500277, 0.02347905, 0.08629225,\n -0.08096454, 0.033292 , -0.07492353, 0.03558746, -0.03898185,\n 0.01894082, -0.00977144, -0.02125431, -0.09896845, -0.07426734,\n 0.07132851, 0.05021148, 0.06596912, -0.02060991, -0.06927098,\n -0.0590184 , 0.03158417, -0.00033762, 0.18291356, 0.02761706,\n -0.0305428 , -0.07682855, -0.0167096 , 0.02518708, -0.01596445,\n -0.0379869 , 0.02503271, -0.10872342, -0.0715234 , -0.10176589,\n -0.03008098, -0.1061382 , 0.04008991, -0.01109458, 0.01513245,\n 0.00942784, 0.00155242, 0.05995774, -0.11261091, -0.06303023,\n 0.02372515, 0.00859607, -0.02200282, 0.02862521, -0.091718 ,\n 0.01269631, -0.02191854, -0.09026017, 0.03745283, -0.00393062,\n -0.02468689, -0.08132526, -0.0274496 , -0.09630067, 0.07670791,\n 0.01474745, -0.05055737, -0.00122033, -0.07364829, 0.01220732,\n -0.09696812, -0.13338262, 0.06731747, -0.03619792, 0.03923816,\n -0.03797578, 0.0150913 , -0.04379996, -0.01847179, 0.06803966,\n 0.0418974 , -0.0373757 , 0.0374969 , 0.08460734, 0.02028288,\n -0.0726779 , 0.04701586, 0.02269063, 0.09565686, 0.02680007],\n dtype=float32)" }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "get_document_vector(\"This, is - a test.\")" ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 62, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\Adrian\\AppData\\Local\\Temp\\ipykernel_1428\\2569974358.py:3: ParserWarning: Skipping line 25706: expected 2 fields, saw 3\n", "Skipping line 58881: expected 2 fields, saw 3\n", "Skipping line 73761: expected 2 fields, saw 3\n", "\n", " training_file = pd.read_csv(\"train/train.tsv\", sep='\\t', on_bad_lines=\"warn\", names=[\"class\",\"text_data\"])\n" ] }, { "data": { "text/plain": " class text_data\n0 1 Mindaugas Budzinauskas wierzy w odbudowę formy...\n1 1 Przyjmujący reprezentacji Polski wrócił do PGE...\n2 0 FEN 9: Zapowiedź walki Róża Gumienna vs Katarz...\n3 1 Aleksander Filipiak: Czuję się dobrze w nowym ...\n4 0 Victoria Carl i Aleksiej Czerwotkin mistrzami ...", "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
classtext_data
01Mindaugas Budzinauskas wierzy w odbudowę formy...
11Przyjmujący reprezentacji Polski wrócił do PGE...
20FEN 9: Zapowiedź walki Róża Gumienna vs Katarz...
31Aleksander Filipiak: Czuję się dobrze w nowym ...
40Victoria Carl i Aleksiej Czerwotkin mistrzami ...
\n
" }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd\n", "\n", "training_file = pd.read_csv(\"train/train.tsv\", sep='\\t', on_bad_lines=\"warn\", names=[\"class\",\"text_data\"])\n", "training_file.head()" ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 63, "outputs": [ { "data": { "text/plain": "0 Mindaugas Budzinauskas wierzy w odbudowę formy...\n1 Przyjmujący reprezentacji Polski wrócił do PGE...\n2 FEN 9 Zapowiedź walki Róża Gumienna vs Katarzy...\n3 Aleksander Filipiak Czuję się dobrze w nowym k...\n4 Victoria Carl i Aleksiej Czerwotkin mistrzami ...\n ... \n98124 Kamil Syprzak zaczyna kolekcjonować trofea FC ...\n98125 Holandia dwa gole Piotra Parzyszka Piotr Parzy...\n98126 Sparingowo Korona gorsza od Stali Lettieri spr...\n98127 Vive Wisła Ośmiu debiutantów w tegorocznej św...\n98128 WTA Miami Timea Bacsinszky pokonana Swietłana ...\nName: text_data, Length: 98129, dtype: object" }, "execution_count": 63, "metadata": {}, "output_type": "execute_result" } ], "source": [ "training_file[\"text_data\"].apply(lambda row: row.translate(str.maketrans('', '', string.punctuation)))" ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 64, "outputs": [], "source": [ "training_file.dropna(inplace=True)" ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 65, "outputs": [ { "data": { "text/plain": "98129" }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(training_file.index)" ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 66, "outputs": [], "source": [ "training_file[\"vectorized\"] = training_file[\"text_data\"].apply(get_document_vector)" ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 67, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "98128\n" ] } ], "source": [ "training_file.dropna(inplace=True)\n", "print(len(training_file.index))" ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 68, "outputs": [ { "data": { "text/plain": " class text_data \\\n0 1 Mindaugas Budzinauskas wierzy w odbudowę formy... \n1 1 Przyjmujący reprezentacji Polski wrócił do PGE... \n2 0 FEN 9: Zapowiedź walki Róża Gumienna vs Katarz... \n3 1 Aleksander Filipiak: Czuję się dobrze w nowym ... \n4 0 Victoria Carl i Aleksiej Czerwotkin mistrzami ... \n\n vectorized \n0 [-0.010491192, -0.058443062, -0.1072605, 0.068... \n1 [0.019159772, -0.03807462, -0.093816765, 0.080... \n2 [0.019561907, -0.09903135, -0.08141139, 0.0962... \n3 [0.0019692876, -0.040995505, -0.112910554, 0.0... \n4 [0.026810315, -0.07052034, -0.12447791, 0.0609... ", "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
classtext_datavectorized
01Mindaugas Budzinauskas wierzy w odbudowę formy...[-0.010491192, -0.058443062, -0.1072605, 0.068...
11Przyjmujący reprezentacji Polski wrócił do PGE...[0.019159772, -0.03807462, -0.093816765, 0.080...
20FEN 9: Zapowiedź walki Róża Gumienna vs Katarz...[0.019561907, -0.09903135, -0.08141139, 0.0962...
31Aleksander Filipiak: Czuję się dobrze w nowym ...[0.0019692876, -0.040995505, -0.112910554, 0.0...
40Victoria Carl i Aleksiej Czerwotkin mistrzami ...[0.026810315, -0.07052034, -0.12447791, 0.0609...
\n
" }, "execution_count": 68, "metadata": {}, "output_type": "execute_result" } ], "source": [ "training_file.head()" ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 69, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Index: 98128 entries, 0 to 98128\n", "Data columns (total 3 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 class 98128 non-null int64 \n", " 1 text_data 98128 non-null object\n", " 2 vectorized 98128 non-null object\n", "dtypes: int64(1), object(2)\n", "memory usage: 3.0+ MB\n" ] } ], "source": [ "training_file.info()" ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 70, "outputs": [ { "data": { "text/plain": "array([-0.01049119, -0.05844306, -0.1072605 , 0.0680153 , 0.01738467,\n 0.02759303, 0.02690293, -0.02688588, -0.00051565, 0.04960843,\n 0.0267325 , -0.07590238, -0.00112739, -0.02663443, -0.01215785,\n -0.02335822, 0.00596362, 0.03255358, 0.03372947, -0.0320864 ,\n 0.06242761, 0.05441704, -0.10440411, 0.02391675, -0.02517564,\n -0.00581436, 0.01041707, -0.02866426, -0.07569201, -0.05691882,\n 0.01377875, 0.05586738, 0.02601947, -0.01073826, -0.07011177,\n 0.05394488, 0.00468541, -0.0290179 , 0.12888645, 0.05720428,\n -0.04035591, -0.05646745, -0.00185273, 0.01846331, 0.02260421,\n -0.05327827, -0.0299728 , -0.01459699, -0.01037856, -0.05196216,\n -0.02092045, -0.00421424, -0.0101665 , -0.01815657, 0.03365456,\n 0.01784232, -0.01427742, -0.05149295, -0.01840808, 0.08991119,\n 0.03609616, -0.03085677, -0.02868558, 0.0879923 , -0.08462378,\n -0.02428374, -0.06649223, 0.05328292, 0.09114845, -0.0074865 ,\n 0.07581685, 0.02017863, 0.01063073, 0.02651897, 0.00125264,\n -0.04205399, -0.15118514, -0.01358473, -0.04589266, 0.00465928,\n -0.01037135, -0.0240653 , 0.01271867, -0.00046581, -0.0062453 ,\n -0.01982017, -0.00213563, 0.0068075 , -0.01338028, -0.01335924,\n 0.11551541, 0.01461171, -0.0956174 , 0.09537749, 0.02394151,\n -0.1085504 , 0.0310267 , 0.02344807, 0.01435937, 0.03094357],\n dtype=float32)" }, "execution_count": 70, "metadata": {}, "output_type": "execute_result" } ], "source": [ "training_file[\"vectorized\"].iloc[0]" ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 71, "outputs": [], "source": [ "import tensorflow as tf\n", "from tensorflow import keras\n", "from keras import layers\n", "from keras.optimizers import Adam\n", "\n", "def create_model():\n", " inputs = keras.Input(shape=(100,))\n", " dense = layers.Dense(64, activation=\"relu\")(inputs)\n", " output = layers.Dense(1, activation=\"sigmoid\")(dense)\n", " model = keras.Model(inputs=inputs, outputs=output)\n", " model.compile(loss='binary_crossentropy', optimizer=Adam(), metrics=['accuracy'])\n", " return model" ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 113, "outputs": [], "source": [ "from sklearn.model_selection import train_test_split\n", "\n", "training_file = training_file.sample(frac=1).reset_index(drop=True)\n", "train, valid = train_test_split(training_file, test_size=0.2)\n", "train_x = np.stack(train[\"vectorized\"].values)\n", "train_y = np.stack(train[\"class\"].values)\n", "valid_x = np.stack(valid[\"vectorized\"].values)\n", "valid_y = np.stack(valid[\"class\"].values)" ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 114, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "11925 [0.00907336, -0.035000063, -0.046387862, 0.107...\n", "29681 [0.029005446, -0.062998086, -0.10763814, 0.059...\n", "39659 [0.0073042903, -0.028519068, -0.07020145, 0.08...\n", "26203 [-0.012138679, -0.036977977, -0.05332508, 0.05...\n", "93611 [0.034259614, -0.06937863, -0.09370455, 0.0414...\n", " ... \n", "90557 [0.015421399, -0.051549092, -0.118074715, 0.07...\n", "10805 [-0.017966524, -0.07279962, -0.10843535, 0.071...\n", "17336 [0.038043424, -0.024239093, -0.11319029, 0.066...\n", "39497 [0.03166563, -0.061132513, -0.09316901, 0.1028...\n", "87005 [0.02179843, -0.042094912, -0.078197055, 0.084...\n", "Name: vectorized, Length: 78502, dtype: object\n" ] } ], "source": [ "print(train[\"vectorized\"])" ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 115, "outputs": [ { "data": { "text/plain": " class text_data \\\n11925 1 Tam było czuć historię. Leo Beenhakker zaurocz... \n29681 1 Filip Dylewicz: Po raz pierwszy od 20 lat prow... \n39659 1 Czytaj w \"PN\". Finaliści MŚ. Piękno i rygor Hi... \n26203 1 Novak Djoković podał do sądu władze miasta Rio... \n93611 1 Wimbledon: Jelena Ostapenko nie stawiła oporu ... \n\n vectorized \n11925 [0.00907336, -0.035000063, -0.046387862, 0.107... \n29681 [0.029005446, -0.062998086, -0.10763814, 0.059... \n39659 [0.0073042903, -0.028519068, -0.07020145, 0.08... \n26203 [-0.012138679, -0.036977977, -0.05332508, 0.05... \n93611 [0.034259614, -0.06937863, -0.09370455, 0.0414... ", "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
classtext_datavectorized
119251Tam było czuć historię. Leo Beenhakker zaurocz...[0.00907336, -0.035000063, -0.046387862, 0.107...
296811Filip Dylewicz: Po raz pierwszy od 20 lat prow...[0.029005446, -0.062998086, -0.10763814, 0.059...
396591Czytaj w \"PN\". Finaliści MŚ. Piękno i rygor Hi...[0.0073042903, -0.028519068, -0.07020145, 0.08...
262031Novak Djoković podał do sądu władze miasta Rio...[-0.012138679, -0.036977977, -0.05332508, 0.05...
936111Wimbledon: Jelena Ostapenko nie stawiła oporu ...[0.034259614, -0.06937863, -0.09370455, 0.0414...
\n
" }, "execution_count": 115, "metadata": {}, "output_type": "execute_result" } ], "source": [ "train.head()" ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 116, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "78502\n" ] } ], "source": [ "print(len(train.index))" ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 117, "outputs": [ { "data": { "text/plain": " class text_data \\\n87636 1 Szok w Hali Mistrzów, Energa Czarni w półfinal... \n96088 1 Postępy Kuby Błaszczykowskiego Jakub Błaszczyk... \n54386 1 Pobici piłkarze odchodzą ze Sportingu Lizbona.... \n29418 1 El. LE: polskie kluby znają potencjalnych rywa... \n80561 1 Było ofensywnie i efektownie. Polpharma Starog... \n\n vectorized \n87636 [0.0040451484, -0.034110088, -0.1111216, 0.050... \n96088 [0.01574161, -0.055649985, -0.077657014, 0.085... \n54386 [-0.013020566, -0.076468304, -0.127176, 0.0720... \n29418 [-0.005546203, -0.033757057, -0.10181239, 0.07... \n80561 [0.021034276, -0.06635279, -0.091047965, 0.054... ", "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
classtext_datavectorized
876361Szok w Hali Mistrzów, Energa Czarni w półfinal...[0.0040451484, -0.034110088, -0.1111216, 0.050...
960881Postępy Kuby Błaszczykowskiego Jakub Błaszczyk...[0.01574161, -0.055649985, -0.077657014, 0.085...
543861Pobici piłkarze odchodzą ze Sportingu Lizbona....[-0.013020566, -0.076468304, -0.127176, 0.0720...
294181El. LE: polskie kluby znają potencjalnych rywa...[-0.005546203, -0.033757057, -0.10181239, 0.07...
805611Było ofensywnie i efektownie. Polpharma Starog...[0.021034276, -0.06635279, -0.091047965, 0.054...
\n
" }, "execution_count": 117, "metadata": {}, "output_type": "execute_result" } ], "source": [ "valid.head()" ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 118, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "19626\n" ] } ], "source": [ "print(len(valid.index))" ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 119, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/20\n", "2454/2454 [==============================] - 3s 1ms/step - loss: 0.3017 - accuracy: 0.8763 - val_loss: 0.2039 - val_accuracy: 0.9214\n", "Epoch 2/20\n", "2454/2454 [==============================] - 2s 946us/step - loss: 0.1920 - accuracy: 0.9256 - val_loss: 0.1896 - val_accuracy: 0.9268\n", "Epoch 3/20\n", "2454/2454 [==============================] - 2s 989us/step - loss: 0.1837 - accuracy: 0.9285 - val_loss: 0.1848 - val_accuracy: 0.9287\n", "Epoch 4/20\n", "2454/2454 [==============================] - 2s 954us/step - loss: 0.1795 - accuracy: 0.9298 - val_loss: 0.1820 - val_accuracy: 0.9301\n", "Epoch 5/20\n", "2454/2454 [==============================] - 3s 1ms/step - loss: 0.1768 - accuracy: 0.9308 - val_loss: 0.1804 - val_accuracy: 0.9304\n", "Epoch 6/20\n", "2454/2454 [==============================] - 3s 1ms/step - loss: 0.1733 - accuracy: 0.9320 - val_loss: 0.1756 - val_accuracy: 0.9324\n", "Epoch 7/20\n", "2454/2454 [==============================] - 2s 982us/step - loss: 0.1692 - accuracy: 0.9336 - val_loss: 0.1721 - val_accuracy: 0.9331\n", "Epoch 8/20\n", "2454/2454 [==============================] - 3s 1ms/step - loss: 0.1636 - accuracy: 0.9359 - val_loss: 0.1699 - val_accuracy: 0.9349\n", "Epoch 9/20\n", "2454/2454 [==============================] - 2s 952us/step - loss: 0.1578 - accuracy: 0.9379 - val_loss: 0.1671 - val_accuracy: 0.9358\n", "Epoch 10/20\n", "2454/2454 [==============================] - 3s 1ms/step - loss: 0.1519 - accuracy: 0.9413 - val_loss: 0.1549 - val_accuracy: 0.9400\n", "Epoch 11/20\n", "2454/2454 [==============================] - 2s 974us/step - loss: 0.1462 - accuracy: 0.9432 - val_loss: 0.1509 - val_accuracy: 0.9420\n", "Epoch 12/20\n", "2454/2454 [==============================] - 2s 967us/step - loss: 0.1413 - accuracy: 0.9450 - val_loss: 0.1460 - val_accuracy: 0.9437\n", "Epoch 13/20\n", "2454/2454 [==============================] - 2s 971us/step - loss: 0.1367 - accuracy: 0.9459 - val_loss: 0.1396 - val_accuracy: 0.9472\n", "Epoch 14/20\n", "2454/2454 [==============================] - 3s 1ms/step - loss: 0.1322 - accuracy: 0.9492 - val_loss: 0.1380 - val_accuracy: 0.9482\n", "Epoch 15/20\n", "2454/2454 [==============================] - 2s 986us/step - loss: 0.1293 - accuracy: 0.9501 - val_loss: 0.1343 - val_accuracy: 0.9495\n", "Epoch 16/20\n", "2454/2454 [==============================] - 2s 975us/step - loss: 0.1262 - accuracy: 0.9516 - val_loss: 0.1320 - val_accuracy: 0.9494\n", "Epoch 17/20\n", "2454/2454 [==============================] - 2s 975us/step - loss: 0.1236 - accuracy: 0.9523 - val_loss: 0.1289 - val_accuracy: 0.9510\n", "Epoch 18/20\n", "2454/2454 [==============================] - 2s 990us/step - loss: 0.1210 - accuracy: 0.9534 - val_loss: 0.1272 - val_accuracy: 0.9514\n", "Epoch 19/20\n", "2454/2454 [==============================] - 3s 1ms/step - loss: 0.1193 - accuracy: 0.9539 - val_loss: 0.1246 - val_accuracy: 0.9530\n", "Epoch 20/20\n", "2454/2454 [==============================] - 3s 1ms/step - loss: 0.1174 - accuracy: 0.9544 - val_loss: 0.1240 - val_accuracy: 0.9518\n" ] } ], "source": [ "callback = keras.callbacks.EarlyStopping(monitor='val_loss', mode='min', patience=3, restore_best_weights=True)\n", "model = create_model()\n", "history = model.fit(train_x, train_y, validation_data=(valid_x, valid_y), epochs=20, callbacks=[callback])" ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 120, "outputs": [ { "data": { "text/plain": "" }, "execution_count": 120, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": "
", "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAAHHCAYAAABXx+fLAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAA9hAAAPYQGoP6dpAABrGElEQVR4nO3dd3hUVeLG8e+k94SQHkICofeepdiRAIqAKOi6UlRcFVyVtYBUyxorC6Kr/nYXGxYUEAsKC1FQiqAUpfcaUoF00mbu748hAzEJkJBkUt7P88yTzJ1z75yTyziv5557jskwDAMRERGRBsTB3hUQERERqWkKQCIiItLgKACJiIhIg6MAJCIiIg2OApCIiIg0OApAIiIi0uAoAImIiEiDowAkIiIiDY4CkIiIiDQ4CkAiUqOOHDmCyWTivffeq/C+q1evxmQysXr16iqvl4g0LApAIiIi0uAoAImIiEiDowAkImJnOTk59q6CSIOjACTSwMyaNQuTycS+ffv4y1/+gq+vL4GBgUyfPh3DMDh+/DhDhw7Fx8eHkJAQXnvttVLHSElJ4d577yU4OBg3Nzc6d+7M+++/X6pceno6Y8eOxdfXFz8/P8aMGUN6enqZ9dqzZw+33XYb/v7+uLm50aNHD7766qtKtfHo0aM89NBDtG7dGnd3dxo3bsztt9/OkSNHyqzjY489RlRUFK6urjRp0oTRo0eTlpZmK5OXl8esWbNo1aoVbm5uhIaGcuutt3Lw4EGg/LFJZY13Gjt2LF5eXhw8eJDBgwfj7e3NXXfdBcBPP/3E7bffTtOmTXF1dSUiIoLHHnuMs2fPlvn3GjlyJIGBgbi7u9O6dWumTp0KwA8//IDJZOKLL74otd/HH3+MyWRiw4YNFf2zitQrTvaugIjYx6hRo2jbti0vvvgiy5Yt4/nnn8ff35933nmH66+/npdeeomPPvqIxx9/nJ49e3L11VcDcPbsWa699loOHDjAxIkTadasGZ9//jljx44lPT2dRx55BADDMBg6dChr167lgQceoG3btnzxxReMGTOmVF127txJ3759CQ8PZ/LkyXh6evLZZ58xbNgwFi9ezPDhwyvUtl9++YX169dzxx130KRJE44cOcJbb73Ftddey65du/Dw8AAgOzubq666it27d3PPPffQrVs30tLS+Oqrrzhx4gQBAQGYzWZuvvlm4uPjueOOO3jkkUfIyspi5cqV7Nixg+jo6Ar/7YuKioiNjaVfv368+uqrtvp8/vnn5Obm8uCDD9K4cWM2bdrEvHnzOHHiBJ9//rlt/99//52rrroKZ2dn7r//fqKiojh48CBff/01//jHP7j22muJiIjgo48+KvW3++ijj4iOjqZ3794VrrdIvWKISIMyc+ZMAzDuv/9+27aioiKjSZMmhslkMl588UXb9jNnzhju7u7GmDFjbNvmzJljAMaCBQts2woKCozevXsbXl5eRmZmpmEYhrF06VIDMF5++eUS73PVVVcZgPHuu+/att9www1Gx44djby8PNs2i8Vi9OnTx2jZsqVt2w8//GAAxg8//HDRNubm5pbatmHDBgMwPvjgA9u2GTNmGICxZMmSUuUtFothGIYxf/58AzBmz55dbpny6nX48OFSbR0zZowBGJMnT76sesfFxRkmk8k4evSobdvVV19teHt7l9h2YX0MwzCmTJliuLq6Gunp6bZtKSkphpOTkzFz5sxS7yPS0OgSmEgDdd9999l+d3R0pEePHhiGwb333mvb7ufnR+vWrTl06JBt27fffktISAh33nmnbZuzszN/+9vfyM7OZs2aNbZyTk5OPPjggyXe5+GHHy5Rj9OnT/P9998zcuRIsrKySEtLIy0tjVOnThEbG8v+/ftJSEioUNvc3d1tvxcWFnLq1ClatGiBn58fW7Zssb22ePFiOnfuXGYPk8lkspUJCAgoVe8Ly1TGhX+Xsuqdk5NDWloaffr0wTAMtm7dCkBqaio//vgj99xzD02bNi23PqNHjyY/P59FixbZti1cuJCioiL+8pe/VLreIvWFApBIA/XHL09fX1/c3NwICAgotf3MmTO250ePHqVly5Y4OJT8z0fbtm1trxf/DA0NxcvLq0S51q1bl3h+4MABDMNg+vTpBAYGlnjMnDkTsI45qoizZ88yY8YMIiIicHV1JSAggMDAQNLT08nIyLCVO3jwIB06dLjosQ4ePEjr1q1xcqq6EQNOTk40adKk1PZjx44xduxY/P398fLyIjAwkGuuuQbAVu/iMHqperdp04aePXvy0Ucf2bZ99NFH/OlPf6JFixZV1RSROktjgEQaKEdHx8vaBtbxPNXFYrEA8PjjjxMbG1tmmYp+YT/88MO8++67PProo/Tu3RtfX19MJhN33HGH7f2qUnk9QWazucztrq6upQKk2Wzmxhtv5PTp0zz11FO0adMGT09PEhISGDt2bKXqPXr0aB555BFOnDhBfn4+P//8M2+88UaFjyNSHykAiUiFREZG8vvvv2OxWEp8ie/Zs8f2evHP+Ph4srOzS/QC7d27t8TxmjdvDlgvo/Xv379K6rho0SLGjBlT4g62vLy8UnegRUdHs2PHjoseKzo6mo0bN1JYWIizs3OZZRo1agRQ6vjFvWGXY/v27ezbt4/333+f0aNH27avXLmyRLniv9el6g1wxx13MGnSJD755BPOnj2Ls7Mzo0aNuuw6idRnugQmIhUyePBgkpKSWLhwoW1bUVER8+bNw8vLy3bJZvDgwRQVFfHWW2/ZypnNZubNm1fieEFBQVx77bW88847JCYmlnq/1NTUCtfR0dGxVK/VvHnzSvXIjBgxgt9++63M28WL9x8xYgRpaWll9pwUl4mMjMTR0ZEff/yxxOv/+te/KlTnC49Z/PvcuXNLlAsMDOTqq69m/vz5HDt2rMz6FAsICGDQoEEsWLCAjz76iIEDB5a6xCnSUKkHSEQq5P777+edd95h7NixbN68maioKBYtWsS6deuYM2cO3t7eAAwZMoS+ffsyefJkjhw5Qrt27ViyZEmJMTjF3nzzTfr160fHjh0ZP348zZs3Jzk5mQ0bNnDixAl+++23CtXx5ptv5sMPP8TX15d27dqxYcMGVq1aRePGjUuUe+KJJ1i0aBG3334799xzD927d+f06dN89dVXvP3223Tu3JnRo0fzwQcfMGnSJDZt2sRVV11FTk4Oq1at4qGHHmLo0KH4+vpy++23M2/ePEwmE9HR0XzzzTcVGrvUpk0boqOjefzxx0lISMDHx4fFixeXGH9V7PXXX6dfv35069aN+++/n2bNmnHkyBGWLVvGtm3bSpQdPXo0t912GwDPPfdchf6OIvWavW4/ExH7KL4NPjU1tcT2MWPGGJ6enqXKX3PNNUb79u1LbEtOTjbGjRtnBAQEGC4uLkbHjh1L3Opd7NSpU8bdd99t+Pj4GL6+vsbdd99tbN26tdSt4YZhGAcPHjRGjx5thISEGM7OzkZ4eLhx8803G4sWLbKVudzb4M+cOWOrn5eXlxEbG2vs2bPHiIyMLHFLf3EdJ06caISHhxsuLi5GkyZNjDFjxhhpaWm2Mrm5ucbUqVONZs2aGc7OzkZISIhx2223GQcPHrSVSU1NNUaMGGF4eHgYjRo1Mv76178aO3bsKPM2+LL+zoZhGLt27TL69+9veHl5GQEBAcb48eON3377rcy/144dO4zhw4cbfn5+hpubm9G6dWtj+vTppY6Zn59vNGrUyPD19TXOnj170b+bSENiMoxqHN0oIiJ2VVRURFhYGEOGDOG///2vvasjUmtoDJCISD22dOlSUlNTSwysFhFQD5CISD20ceNGfv/9d5577jkCAgJKTAApIuoBEhGpl9566y0efPBBgoKC+OCDD+xdHZFaRz1AIiIi0uCoB0hEREQaHAUgERERaXA0EWIZLBYLJ0+exNvb+4pWexYREZGaYxgGWVlZhIWFlVpv748UgMpw8uRJIiIi7F0NERERqYTjx4/TpEmTi5ZRACpD8VT+x48fx8fHx861ERERkcuRmZlJRESE7Xv8YhSAylB82cvHx0cBSEREpI65nOErGgQtIiIiDY4CkIiIiDQ4CkAiIiLS4GgM0BUwm80UFhbauxp1krOzM46OjvauhoiINFAKQJVgGAZJSUmkp6fbuyp1mp+fHyEhIZprSUREapwCUCUUh5+goCA8PDz0BV5BhmGQm5tLSkoKAKGhoXaukYiINDQKQBVkNptt4adx48b2rk6d5e7uDkBKSgpBQUG6HCYiIjVKg6ArqHjMj4eHh51rUvcV/w01jkpERGqaAlAl6bLXldPfUERE7EUBSERERBocBSCplKioKObMmWPvaoiIiFSKBkE3INdeey1dunSpkuDyyy+/4OnpeeWVEhERsQMFILExDAOz2YyT06X/WQQGBtZAjUREpL7JKzRzKqcAR5OJEF83u9VDl8AaiLFjx7JmzRrmzp2LyWTCZDLx3nvvYTKZ+O677+jevTuurq6sXbuWgwcPMnToUIKDg/Hy8qJnz56sWrWqxPH+eAnMZDLxn//8h+HDh+Ph4UHLli356quvariVIiJS0wzDIONsIQdTs9l0+DTfbk/kww1HmL1yH1O/2M5fP/yV295az7Wv/EDHmStoM305fV/8ntkr99q13uoBqgKGYXC20Fzj7+vu7HjZd1LNnTuXffv20aFDB5599lkAdu7cCcDkyZN59dVXad68OY0aNeL48eMMHjyYf/zjH7i6uvLBBx8wZMgQ9u7dS9OmTct9j2eeeYaXX36ZV155hXnz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889p06YNbm5udOzYkW+//baGalp5cXFx9OzZE29vb4KCghg2bBh79+696D7vvfceJpOpxMPNza2Galx5s2bNKlXvNm3aXHSfunhOi0VFRZVqr8lkYsKECWWWr0vn9ccff2TIkCGEhYVhMplYunRpidcNw2DGjBmEhobi7u5O//792b9//yWPW9HPfE25WHsLCwt56qmn6NixI56enoSFhTF69GhOnjx50WNW5vNQEy51bseOHVuq3gMHDrzkcWvjub1UW8v6/JpMJl555ZVyj1lbz2t1UgCqYgsXLmTSpEnMnDmTLVu20LlzZ2JjY0lJSSmz/Pr167nzzju599572bp1K8OGDWPYsGHs2LGjhmteMWvWrGHChAn8/PPPrFy5ksLCQgYMGEBOTs5F9/Px8SExMdH2OHr0aA3V+Mq0b9++RL3Xrl1bbtm6ek6L/fLLLyXaunLlSgBuv/32cvepK+c1JyeHzp078+abb5b5+ssvv8zrr7/O22+/zcaNG/H09CQ2Npa8vLxyj1nRz3xNulh7c3Nz2bJlC9OnT2fLli0sWbKEvXv3csstt1zyuBX5PNSUS51bgIEDB5ao9yeffHLRY9bWc3uptl7YxsTERObPn4/JZGLEiBEXPW5tPK/VypAq1atXL2PChAm252az2QgLCzPi4uLKLD9y5EjjpptuKrEtJibG+Otf/1qt9axqKSkpBmCsWbOm3DLvvvuu4evrW3OVqiIzZ840OnfufNnl68s5LfbII48Y0dHRhsViKfP1unpeAeOLL76wPbdYLEZISIjxyiuv2Lalp6cbrq6uxieffFLucSr6mbeXP7a3LJs2bTIA4+jRo+WWqejnwR7KauuYMWOMoUOHVug4deHcXs55HTp0qHH99ddftExdOK9VTT1AVaigoIDNmzfTv39/2zYHBwf69+/Phg0bytxnw4YNJcoDxMbGllu+tsrIyADA39//ouWys7OJjIwkIiKCoUOHsnPnzpqo3hXbv38/YWFhNG/enLvuuotjx46VW7a+nFOw/ptesGAB99xzz0UXBq6r5/VChw8fJikpqcS58/X1JSYmptxzV5nPfG2WkZGByWTCz8/vouUq8nmoTVavXk1QUBCtW7fmwQcf5NSpU+WWrS/nNjk5mWXLlnHvvfdesmxdPa+VpQBUhdLS0jCbzQQHB5fYHhwcTFJSUpn7JCUlVah8bWSxWHj00Ufp27cvHTp0KLdc69atmT9/Pl9++SULFizAYrHQp08fTpw4UYO1rbiYmBjee+89li9fzltvvcXhw4e56qqryMrKKrN8fTinxZYuXUp6ejpjx44tt0xdPa9/VHx+KnLuKvOZr63y8vJ46qmnuPPOOy+6WGZFPw+1xcCBA/nggw+Ij4/npZdeYs2aNQwaNAiz2Vxm+fpybt9//328vb259dZbL1qurp7XK6HV4OWKTZgwgR07dlzyenHv3r3p3bu37XmfPn1o27Yt77zzDs8991x1V7PSBg0aZPu9U6dOxMTEEBkZyWeffXZZ/1dVl/33v/9l0KBBhIWFlVumrp5XOa+wsJCRI0diGAZvvfXWRcvW1c/DHXfcYfu9Y8eOdOrUiejoaFavXs0NN9xgx5pVr/nz53PXXXdd8saEunper4R6gKpQQEAAjo6OJCcnl9ienJxMSEhImfuEhIRUqHxtM3HiRL755ht++OEHmjRpUqF9nZ2d6dq1KwcOHKim2lUPPz8/WrVqVW696/o5LXb06FFWrVrFfffdV6H96up5LT4/FTl3lfnM1zbF4efo0aOsXLnyor0/ZbnU56G2at68OQEBAeXWuz6c259++om9e/dW+DMMdfe8VoQCUBVycXGhe/fuxMfH27ZZLBbi4+NL/B/yhXr37l2iPMDKlSvLLV9bGIbBxIkT+eKLL/j+++9p1qxZhY9hNpvZvn07oaGh1VDD6pOdnc3BgwfLrXddPad/9O677xIUFMRNN91Uof3q6nlt1qwZISEhJc5dZmYmGzduLPfcVeYzX5sUh5/9+/ezatUqGjduXOFjXOrzUFudOHGCU6dOlVvvun5uwdqD2717dzp37lzhfevqea0Qe4/Crm8+/fRTw9XV1XjvvfeMXbt2Gffff7/h5+dnJCUlGYZhGHfffbcxefJkW/l169YZTk5Oxquvvmrs3r3bmDlzpuHs7Gxs377dXk24LA8++KDh6+trrF692khMTLQ9cnNzbWX+2NZnnnnGWLFihXHw4EFj8+bNxh133GG4ubkZO3futEcTLtvf//53Y/Xq1cbhw4eNdevWGf379zcCAgKMlJQUwzDqzzm9kNlsNpo2bWo89dRTpV6ry+c1KyvL2Lp1q7F161YDMGbPnm1s3brVdtfTiy++aPj5+Rlffvml8fvvvxtDhw41mjVrZpw9e9Z2jOuvv96YN2+e7fmlPvP2dLH2FhQUGLfccovRpEkTY9u2bSU+x/n5+bZj/LG9l/o82MvF2pqVlWU8/vjjxoYNG4zDhw8bq1atMrp162a0bNnSyMvLsx2jrpzbS/07NgzDyMjIMDw8PIy33nqrzGPUlfNanRSAqsG8efOMpk2bGi4uLkavXr2Mn3/+2fbaNddcY4wZM6ZE+c8++8xo1aqV4eLiYrRv395YtmxZDde44oAyH++++66tzB/b+uijj9r+LsHBwcbgwYONLVu21HzlK2jUqFFGaGio4eLiYoSHhxujRo0yDhw4YHu9vpzTC61YscIAjL1795Z6rS6f1x9++KHMf7fF7bFYLMb06dON4OBgw9XV1bjhhhtK/Q0iIyONmTNnlth2sc+8PV2svYcPHy73c/zDDz/YjvHH9l7q82AvF2trbm6uMWDAACMwMNBwdnY2IiMjjfHjx5cKMnXl3F7q37FhGMY777xjuLu7G+np6WUeo66c1+pkMgzDqNYuJhEREZFaRmOAREREpMFRABIREZEGRwFIREREGhwFIBEREWlwFIBERESkwVEAEhERkQZHAUhEREQaHAUgEZHLsHr1akwmE+np6fauiohUAQUgERERaXAUgERERKTBUQASkTrBYrEQFxdHs2bNcHd3p3PnzixatAg4f3lq2bJldOrUCTc3N/70pz+xY8eOEsdYvHgx7du3x9XVlaioKF577bUSr+fn5/PUU08RERGBq6srLVq04L///W+JMps3b6ZHjx54eHjQp08f9u7dW70NF5FqoQAkInVCXFwcH3zwAW+//TY7d+7kscce4y9/+Qtr1qyxlXniiSd47bXX+OWXXwgMDGTIkCEUFhYC1uAycuRI7rjjDrZv386sWbOYPn067733nm3/0aNH88knn/D666+ze/du3nnnHby8vErUY+rUqbz22mv8+uuvODk5cc8999RI+0WkamkxVBGp9fLz8/H392fVqlX07t3btv2+++4jNzeX+++/n+uuu45PP/2UUaNGAXD69GmaNGnCe++9x8iRI7nrrrtITU3lf//7n23/J598kmXLlrFz50727dtH69atWblyJf379y9Vh9WrV3PdddexatUqbrjhBgC+/fZbbrrpJs6ePYubm1s1/xVEpCqpB0hEar0DBw6Qm5vLjTfeiJeXl+3xwQcfcPDgQVu5C8ORv78/rVu3Zvfu3QDs3r2bvn37ljhu37592b9/P2azmW3btuHo6Mg111xz0bp06tTJ9ntoaCgAKSkpV9xGEalZTvaugIjIpWRnZwOwbNkywsPDS7zm6upaIgRVlru7+2WVc3Z2tv1uMpkA6/gkEalb1AMkIrVeu3btcHV15dixY7Ro0aLEIyIiwlbu559/tv1+5swZ9u3bR9u2bQFo27Yt69atK3HcdevW0apVKxwdHenYsSMWi6XEmCIRqb/UAyQitZ63tzePP/44jz32GBaLhX79+pGRkcG6devw8fEhMjISgGeffZbGjRsTHBzM1KlTCQgIYNiwYQD8/e9/p2fPnjz33HOMGjWKDRs28MYbb/Cvf/0LgKioKMaMGcM999zD66+/TufOnTl69CgpKSmMHDnSXk0XkWqiACQidcJzzz1HYGAgcXFxHDp0CD8/P7p168bTTz9tuwT14osv8sgjj7B//366dOnC119/jYuLCwDdunXjs88+Y8aMGTz33HOEhoby7LPPMnbsWNt7vPXWWzz99NM89NBDnDp1iqZNm/L000/bo7kiUs10F5iI1HnFd2idOXMGPz8/e1dHROoAjQESERGRBkcBSERERBocXQITERGRBkc9QCIiItLgKACJiIhIg6MAJCIiIg2OApCIiIg0OApAIiIi0uAoAImIiEiDowAkIiIiDY4CkIiIiDQ4CkAiIiLS4Pw/1X2wxJxhXoYAAAAASUVORK5CYII=\n" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from matplotlib import pyplot as plt\n", "plt.plot(history.history['accuracy'])\n", "plt.plot(history.history['val_accuracy'])\n", "plt.title('model accuracy')\n", "plt.ylabel('accuracy')\n", "plt.xlabel('epoch')\n", "plt.legend(['train', 'test'], loc='upper left')" ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 121, "outputs": [ { "data": { "text/plain": "" }, "execution_count": 121, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": "
", "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkgAAAHHCAYAAABEEKc/AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAA9hAAAPYQGoP6dpAABxKUlEQVR4nO3dd3hUVcLH8e+k90Z6IaFIFUKPCCpKJIiLWBEWBXwtuy6oyPou4ioo7rtgXVRs6y6iawNd7IogVSECgvQiIDWVAElIQtrMff8YMjBJgLTJJOH3eZ77OHPvuWfOzZDNb88591yTYRgGIiIiImLj4uwGiIiIiDQ1CkgiIiIilSggiYiIiFSigCQiIiJSiQKSiIiISCUKSCIiIiKVKCCJiIiIVKKAJCIiIlKJApKIiIhIJQpIInJROHDgACaTiXnz5tX63BUrVmAymVixYsV5y82bNw+TycSBAwfq1EYRaToUkEREREQqUUASERERqUQBSURERKQSBSQRaRRPPvkkJpOJX3/9lTvuuIPAwEDCwsJ44oknMAyDw4cPM2LECAICAoiMjOSFF16oUkd2djZ33303EREReHl5kZiYyDvvvFOlXG5uLuPHjycwMJCgoCDGjRtHbm5ute3atWsXt956KyEhIXh5edGnTx+++OKLBr321157ja5du+Lp6Ul0dDQTJkyo0p49e/Zwyy23EBkZiZeXF7GxsYwaNYq8vDxbmSVLljBw4ECCgoLw8/OjY8eOPPbYYw3aVhGxcnN2A0Tk4nL77bfTuXNnZs2axddff83f/vY3QkJCePPNN7nmmmt45plneP/993nkkUfo27cvV155JQCnTp1i0KBB7N27l4kTJ9KmTRs+/vhjxo8fT25uLg899BAAhmEwYsQIfvzxR/74xz/SuXNnPv30U8aNG1elLdu3b2fAgAHExMTw6KOP4uvry4IFC7jxxhv573//y0033VTv633yySd56qmnSE5O5v7772f37t28/vrrrF+/ntWrV+Pu7k5paSkpKSmUlJTwwAMPEBkZSVpaGl999RW5ubkEBgayfft2fve739G9e3dmzJiBp6cne/fuZfXq1fVuo4hUwxARaQTTp083AOO+++6z7SsvLzdiY2MNk8lkzJo1y7b/xIkThre3tzFu3DjbvtmzZxuA8d5779n2lZaWGv379zf8/PyM/Px8wzAM47PPPjMA49lnn7X7nCuuuMIAjLffftu2f/DgwUa3bt2M4uJi2z6LxWJcfvnlxiWXXGLbt3z5cgMwli9fft5rfPvttw3A2L9/v2EYhpGdnW14eHgYQ4YMMcxms63cnDlzDMCYO3euYRiG8csvvxiA8fHHH5+z7n/84x8GYBw9evS8bRCRhqEhNhFpVPfcc4/ttaurK3369MEwDO6++27b/qCgIDp27Mhvv/1m2/fNN98QGRnJ6NGjbfvc3d158MEHKSgoYOXKlbZybm5u3H///Xaf88ADD9i14/jx4yxbtoyRI0dy8uRJcnJyyMnJ4dixY6SkpLBnzx7S0tLqda3ff/89paWlTJo0CReXM/9ze++99xIQEMDXX38NQGBgIADfffcdRUVF1dYVFBQEwOeff47FYqlXu0TkwhSQRKRRtW7d2u59YGAgXl5ehIaGVtl/4sQJ2/uDBw9yySWX2AUNgM6dO9uOV/w3KioKPz8/u3IdO3a0e793714Mw+CJJ54gLCzMbps+fTpgnfNUHxVtqvzZHh4etG3b1na8TZs2TJ48mX/961+EhoaSkpLCq6++ajf/6Pbbb2fAgAHcc889REREMGrUKBYsWKCwJOIgmoMkIo3K1dW1RvvAOp/IUSqCxSOPPEJKSkq1Zdq3b++wz6/shRdeYPz48Xz++ecsXryYBx98kJkzZ/LTTz8RGxuLt7c3q1atYvny5Xz99dcsWrSI+fPnc80117B48eJz/gxFpG7UgyQizUJ8fDx79uyp0mOya9cu2/GK/2ZkZFBQUGBXbvfu3Xbv27ZtC1iH6ZKTk6vd/P39693m6j67tLSU/fv3245X6NatG48//jirVq3ihx9+IC0tjTfeeMN23MXFhcGDB/Piiy+yY8cO/u///o9ly5axfPnyerVTRKpSQBKRZmHYsGFkZmYyf/58277y8nJeeeUV/Pz8uOqqq2zlysvLef31123lzGYzr7zyil194eHhDBo0iDfffJOMjIwqn3f06NF6tzk5ORkPDw9efvllu96wf//73+Tl5XH99dcDkJ+fT3l5ud253bp1w8XFhZKSEsA6Z6qyHj16ANjKiEjD0RCbiDQL9913H2+++Sbjx49nw4YNJCQk8Mknn7B69Wpmz55t6+0ZPnw4AwYM4NFHH+XAgQN06dKFhQsX2s3nqfDqq68ycOBAunXrxr333kvbtm3JysoiNTWVI0eOsHnz5nq1OSwsjKlTp/LUU08xdOhQbrjhBnbv3s1rr71G3759ueOOOwBYtmwZEydO5LbbbqNDhw6Ul5fzn//8B1dXV2655RYAZsyYwapVq7j++uuJj48nOzub1157jdjYWAYOHFivdopIVQpIItIseHt7s2LFCh599FHeeecd8vPz6dixI2+//Tbjx4+3lXNxceGLL75g0qRJvPfee5hMJm644QZeeOEFevbsaVdnly5d+Pnnn3nqqaeYN28ex44dIzw8nJ49ezJt2rQGafeTTz5JWFgYc+bM4eGHHyYkJIT77ruPv//977i7uwOQmJhISkoKX375JWlpafj4+JCYmMi3337LZZddBsANN9zAgQMHmDt3Ljk5OYSGhnLVVVfx1FNP2e6CE5GGYzIcOQtSREREpBnSHCQRERGRShSQRERERCpRQBIRERGpRAFJREREpBIFJBEREZFKFJBEREREKtE6SHVksVhIT0/H398fk8nk7OaIiIhIDRiGwcmTJ4mOjq7y8OuzKSDVUXp6OnFxcc5uhoiIiNTB4cOHiY2NPedxBaQ6qnisweHDhwkICHBya0RERKQm8vPziYuLu+DDqBWQ6qhiWC0gIEABSUREpJm50PQYTdIWERERqUQBSURERKQSBSQRERGRSjQHSUREpIkxm82UlZU5uxnNkru7O66urvWuRwFJRESkiTAMg8zMTHJzc53dlGYtKCiIyMjIeq1TqIAkIiLSRFSEo/DwcHx8fLQQcS0ZhkFRURHZ2dkAREVF1bkuBSQREZEmwGw228JRq1atnN2cZsvb2xuA7OxswsPD6zzcpknaIiIiTUDFnCMfHx8nt6T5q/gZ1mcelwKSiIhIE6JhtfpriJ+hApKIiIhIJQpIIiIi0mQkJCQwe/ZsZzdDk7RFRESkfgYNGkSPHj0aJNisX78eX1/f+jeqntSD1MQUl5n57WgB+cVaIExERFoGwzAoLy+vUdmwsLAmMVG9SQSkV199lYSEBLy8vEhKSmLdunXnLLtw4UL69OlDUFAQvr6+9OjRg//85z92ZQzDYNq0aURFReHt7U1ycjJ79uyxK3P8+HHGjBlDQEAAQUFB3H333RQUFDjk+mpj9Fs/cc0LK1mzN8fZTREREbmg8ePHs3LlSl566SVMJhMmk4l58+ZhMpn49ttv6d27N56envz444/s27ePESNGEBERgZ+fH3379uX777+3q6/yEJvJZOJf//oXN910Ez4+PlxyySV88cUXDr8upwek+fPnM3nyZKZPn87GjRtJTEwkJSXFtshTZSEhIfz1r38lNTWVLVu2cNddd3HXXXfx3Xff2co8++yzvPzyy7zxxhusXbsWX19fUlJSKC4utpUZM2YM27dvZ8mSJXz11VesWrWK++67z+HXeyExQdb1G9Jyiy9QUkREWjrDMCgqLXfKZhhGjdr40ksv0b9/f+69914yMjLIyMggLi4OgEcffZRZs2axc+dOunfvTkFBAcOGDWPp0qX88ssvDB06lOHDh3Po0KHzfsZTTz3FyJEj2bJlC8OGDWPMmDEcP3683j/f83H6HKQXX3yRe++9l7vuuguAN954g6+//pq5c+fy6KOPVik/aNAgu/cPPfQQ77zzDj/++CMpKSkYhsHs2bN5/PHHGTFiBADvvvsuERERfPbZZ4waNYqdO3eyaNEi1q9fT58+fQB45ZVXGDZsGM8//zzR0dGOvejzsAWkE6ec1gYREWkaTpWZ6TLtuwsXdIAdM1Lw8bhwTAgMDMTDwwMfHx8iIyMB2LVrFwAzZszg2muvtZUNCQkhMTHR9v7pp5/m008/5YsvvmDixInn/Izx48czevRoAP7+97/z8ssvs27dOoYOHVqna6sJp/YglZaWsmHDBpKTk237XFxcSE5OJjU19YLnG4bB0qVL2b17N1deeSUA+/fvJzMz067OwMBAkpKSbHWmpqYSFBRkC0cAycnJuLi4sHbt2mo/q6SkhPz8fLvNEaJPB6T0XAUkERFp3s7+OwtQUFDAI488QufOnQkKCsLPz4+dO3desAepe/futte+vr4EBAScc6SpoTi1ByknJwez2UxERITd/oiICFv6rE5eXh4xMTGUlJTg6urKa6+9ZkuomZmZtjoq11lxLDMzk/DwcLvjbm5uhISE2MpUNnPmTJ566qnaXWAdVPQgpecpIImIXOy83V3ZMSPFaZ9dX5XvRnvkkUdYsmQJzz//PO3bt8fb25tbb72V0tLS89bj7u5u995kMmGxWOrdvvNx+hBbXfj7+7Np0yYKCgpYunQpkydPpm3btlWG3xrS1KlTmTx5su19fn6+bYy1IUVriE1ERE4zmUw1GuZyNg8PD8xm8wXLrV69mvHjx3PTTTcB1h6lAwcOOLh1dePUn3poaCiurq5kZWXZ7c/KyrKNY1bHxcWF9u3bA9CjRw927tzJzJkzGTRokO28rKwsu6f4ZmVl0aNHDwAiIyOrdM2Vl5dz/Pjxc36up6cnnp6etb7G2qroQTpWWEpxmRmvBkjwIiIijpSQkMDatWs5cOAAfn5+5+zdueSSS1i4cCHDhw/HZDLxxBNPOLwnqK6cOgfJw8OD3r17s3TpUts+i8XC0qVL6d+/f43rsVgslJSUANCmTRsiIyPt6szPz2ft2rW2Ovv3709ubi4bNmywlVm2bBkWi4WkpKT6Xla9BHi74edpza1pmockIiLNwCOPPIKrqytdunQhLCzsnHOKXnzxRYKDg7n88ssZPnw4KSkp9OrVq5FbWzNO77ebPHky48aNo0+fPvTr14/Zs2dTWFhou6tt7NixxMTEMHPmTMA6F6hPnz60a9eOkpISvvnmG/7zn//w+uuvA9buyEmTJvG3v/2NSy65hDZt2vDEE08QHR3NjTfeCEDnzp0ZOnQo9957L2+88QZlZWVMnDiRUaNGOfUOtor2Rwd58WtWAem5p2gX5ufU9oiIiFxIhw4dqtxcNX78+CrlEhISWLZsmd2+CRMm2L2vPORW3XIDubm5dWpnbTg9IN1+++0cPXqUadOmkZmZSY8ePVi0aJFtkvWhQ4dwcTnT0VVYWMif/vQnjhw5gre3N506deK9997j9ttvt5X5y1/+QmFhIffddx+5ubkMHDiQRYsW4eXlZSvz/vvvM3HiRAYPHoyLiwu33HILL7/8cuNd+HlEB3nbApKIiIg0PpNR05WgxE5+fj6BgYHk5eUREBDQoHX/9dOtvL/2EA9e057JQzo2aN0iItI0FRcXs3//ftq0aWP3f+il9s73s6zp32+nr6QtVUVrNW0RERGnUkBqgmK0WKSIiIhTKSA1QTHBFT1ICkgiIiLOoIDUBFUMsWXkncJi0RQxERGRxqaA1ARF+Hvi6mKizGyQU1Di7OaIiIhcdBSQmiA3VxciA6yz7o9omE1ERKTRKSA1UdFB1oCkidoiIiKNTwGpiYrRQ2tFREScRgGpiYrWrf4iItJMDBo0iEmTJjVYfePHj7c9HsxZFJCaKC0WKSIi4jwKSE2U1kISEZHmYPz48axcuZKXXnoJk8mEyWTiwIEDbNu2jeuuuw4/Pz8iIiK48847ycnJsZ33ySef0K1bN7y9vWnVqhXJyckUFhby5JNP8s477/D555/b6luxYkWjX5fTH1Yr1dNq2iIigmFAWZFzPtvdB0ymCxZ76aWX+PXXX7n00kuZMWOG9VR3d/r168c999zDP/7xD06dOsWUKVMYOXIky5YtIyMjg9GjR/Pss89y0003cfLkSX744QcMw+CRRx5h586d5Ofn8/bbbwMQEhLi0EutjgJSE1UxxJZ3qoyCknL8PPVViYhcdMqK4O/Rzvnsx9LBw/eCxQIDA/Hw8MDHx4fIyEgA/va3v9GzZ0/+/ve/28rNnTuXuLg4fv31VwoKCigvL+fmm28mPj4egG7dutnKent7U1JSYqvPGTTE1kT5eboR6O0OqBdJRESal82bN7N8+XL8/PxsW6dOnQDYt28fiYmJDB48mG7dunHbbbfx1ltvceLECSe32p66JZqw6CBv8k6VkZZ7ig4R/s5ujoiINDZ3H2tPjrM+u44KCgoYPnw4zzzzTJVjUVFRuLq6smTJEtasWcPixYt55ZVX+Otf/8ratWtp06ZNfVrdYBSQmrCYIG92ZuRrLSQRkYuVyVSjYS5n8/DwwGw229736tWL//73vyQkJODmVn3UMJlMDBgwgAEDBjBt2jTi4+P59NNPmTx5cpX6nEFDbE1YjFbTFhGRZiAhIYG1a9dy4MABcnJymDBhAsePH2f06NGsX7+effv28d1333HXXXdhNptZu3Ytf//73/n55585dOgQCxcu5OjRo3Tu3NlW35YtW9i9ezc5OTmUlZU1+jUpIDVhWixSRESag0ceeQRXV1e6dOlCWFgYpaWlrF69GrPZzJAhQ+jWrRuTJk0iKCgIFxcXAgICWLVqFcOGDaNDhw48/vjjvPDCC1x33XUA3HvvvXTs2JE+ffoQFhbG6tWrG/2aNMTWhGktJBERaQ46dOhAampqlf0LFy6stnznzp1ZtGjROesLCwtj8eLFDda+ulAPUhN2pgdJq2mLiIg0JgWkJqxiscjM/GLKzRYnt0ZEROTioYDUhIX5eeLuasJsMcg6WeLs5oiIiFw0FJCaMBcXE1GBmqgtIiLS2BSQmrho3eovInJRMQzD2U1o9hriZ6iA1MTFBFlXMj2ixSJFRFo0d3fr46WKipz0cNoWpOJnWPEzrQvd5t/EabFIEZGLg6urK0FBQWRnZwPg4+ODyWRycquaF8MwKCoqIjs7m6CgIFxdXetclwJSE6e1kERELh4VT6+vCElSN0FBQbafZV0pIDVxWk1bROTiYTKZiIqKIjw83CmP12gJ3N3d69VzVEEBqYmrCEhpJ05hGIa6W0VELgKurq4N8kde6k6TtJu4isUiC0vN5J8qd3JrRERELg4KSE2cl7srrXw9AM1DEhERaSwKSM2A5iGJiIg0LgWkZqBimE09SCIiIo1DAakZUA+SiIhI42oSAenVV18lISEBLy8vkpKSWLdu3TnLvvXWW1xxxRUEBwcTHBxMcnJylfImk6na7bnnnrOVSUhIqHJ81qxZDrvG+qh43Ih6kERERBqH0wPS/PnzmTx5MtOnT2fjxo0kJiaSkpJyzkWyVqxYwejRo1m+fDmpqanExcUxZMgQ0tLSbGUyMjLstrlz52Iymbjlllvs6poxY4ZduQceeMCh11pXsVosUkREpFE5fR2kF198kXvvvZe77roLgDfeeIOvv/6auXPn8uijj1Yp//7779u9/9e//sV///tfli5dytixYwGqrJ75+eefc/XVV9O2bVu7/f7+/vVeabMxaIhNRESkcTm1B6m0tJQNGzaQnJxs2+fi4kJycjKpqak1qqOoqIiysjJCQkKqPZ6VlcXXX3/N3XffXeXYrFmzaNWqFT179uS5556jvLxprjNUMUk7+2QJpeUWJ7dGRESk5XNqD1JOTg5ms5mIiAi7/REREezatatGdUyZMoXo6Gi7kHW2d955B39/f26++Wa7/Q8++CC9evUiJCSENWvWMHXqVDIyMnjxxRerraekpISSkhLb+/z8/Bq1ryGE+Hrg6eZCSbmFzLxiWrfyabTPFhERuRg5fYitPmbNmsVHH33EihUr8PLyqrbM3LlzGTNmTJXjkydPtr3u3r07Hh4e/OEPf2DmzJl4enpWqWfmzJk89dRTDXsBNWQymYgJ8ua3nELSck8pIImIiDiYU4fYQkNDcXV1JSsry25/VlbWBecGPf/888yaNYvFixfTvXv3asv88MMP7N69m3vuueeCbUlKSqK8vJwDBw5Ue3zq1Knk5eXZtsOHD1+wzoYUo4naIiIijcapAcnDw4PevXuzdOlS2z6LxcLSpUvp37//Oc979tlnefrpp1m0aBF9+vQ5Z7l///vf9O7dm8TExAu2ZdOmTbi4uBAeHl7tcU9PTwICAuy2xhQdqInaIiIijcXpQ2yTJ09m3Lhx9OnTh379+jF79mwKCwttd7WNHTuWmJgYZs6cCcAzzzzDtGnT+OCDD0hISCAzMxMAPz8//Pz8bPXm5+fz8ccf88ILL1T5zNTUVNauXcvVV1+Nv78/qampPPzww9xxxx0EBwc3wlXXnu5kExERaTxOD0i33347R48eZdq0aWRmZtKjRw8WLVpkm7h96NAhXFzOdHS9/vrrlJaWcuutt9rVM336dJ588knb+48++gjDMBg9enSVz/T09OSjjz7iySefpKSkhDZt2vDwww/bzUtqajTEJiIi0nhMhmEYzm5Ec5Sfn09gYCB5eXmNMty2Zl8Ov39rLW3DfFn250EO/zwREZGWqKZ/v52+krbUTMxZQ2zKtCIiIo6lgNRMRAZ6YTJBcZmF44Wlzm6OiIhIi6aA1Ex4urkS5mddnyk9t9jJrREREWnZFJCakTMTtYuc3BIREZGWTQGpGam41T9NPUgiIiIOpYDUjMRoLSQREZFGoYDUjFQEpLQTCkgiIiKOpIDUjNhW085TQBIREXEkBaRmJDrIC9AQm4iIiKMpIDUjsUE+AOQUlFJcZnZya0RERFouBaRmJMDbDV8PV0C9SCIiIo6kgNSMmEyms271V0ASERFxFAWkZqZisUj1IImIiDiOAlIzo8UiRUREHE8BqZnRWkgiIiKOp4DUzGg1bREREcdTQGpmtFikiIiI4ykgNTMVk7QzcouxWAwnt0ZERKRlUkBqZiL8PXExQanZQk5BibObIyIi0iIpIDUzbq4uRAZYHzlyRPOQREREHEIBqRnSWkgiIiKOpYDUDEXrTjYRERGHUkBqhqK1FpKIiIhDKSA1QzFaTVtERMShFJCaIS0WKSIi4lgKSM3QmeexKSCJiIg4ggJSMxQdZL3NP+9UGQUl5U5ujYiISMujgNQM+Xu5E+DlBkCGepFEREQanAJSMxUT7ANosUgRERFHUEBqpmJOD7NporaIiEjDU0BqprQWkoiIiOMoIDVTutVfRETEcRSQmqkzjxvRYpEiIiINTQGpmdJaSCIiIo6jgNRMxQZbA1JmfjHlZouTWyMiItKyNImA9Oqrr5KQkICXlxdJSUmsW7funGXfeustrrjiCoKDgwkODiY5OblK+fHjx2Mymey2oUOH2pU5fvw4Y8aMISAggKCgIO6++24KCgoccn2OEObniburCbPFIPtkibObIyIi0qI4PSDNnz+fyZMnM336dDZu3EhiYiIpKSlkZ2dXW37FihWMHj2a5cuXk5qaSlxcHEOGDCEtLc2u3NChQ8nIyLBtH374od3xMWPGsH37dpYsWcJXX33FqlWruO+++xx2nQ3NxcVEZKD1Vn8Ns4mIiDQsk2EYhjMbkJSURN++fZkzZw4AFouFuLg4HnjgAR599NELnm82mwkODmbOnDmMHTsWsPYg5ebm8tlnn1V7zs6dO+nSpQvr16+nT58+ACxatIhhw4Zx5MgRoqOjL/i5+fn5BAYGkpeXR0BAQA2vtmGN+mcqP/12nJdG9WBEjxintEFERKQ5qenfb6f2IJWWlrJhwwaSk5Nt+1xcXEhOTiY1NbVGdRQVFVFWVkZISIjd/hUrVhAeHk7Hjh25//77OXbsmO1YamoqQUFBtnAEkJycjIuLC2vXrq32c0pKSsjPz7fbnE0TtUVERBzDqQEpJycHs9lMRESE3f6IiAgyMzNrVMeUKVOIjo62C1lDhw7l3XffZenSpTzzzDOsXLmS6667DrPZDEBmZibh4eF29bi5uRESEnLOz505cyaBgYG2LS4urjaX6hCxWixSRETEIdyc3YD6mDVrFh999BErVqzAy8vLtn/UqFG21926daN79+60a9eOFStWMHjw4Dp91tSpU5k8ebLtfX5+vtNDUrQWixQREXEIp/YghYaG4urqSlZWlt3+rKwsIiMjz3vu888/z6xZs1i8eDHdu3c/b9m2bdsSGhrK3r17AYiMjKwyCby8vJzjx4+f83M9PT0JCAiw25xNQ2wiIiKO4dSA5OHhQe/evVm6dKltn8ViYenSpfTv3/+c5z377LM8/fTTLFq0yG4e0bkcOXKEY8eOERUVBUD//v3Jzc1lw4YNtjLLli3DYrGQlJRUjytqXDHBZ4bYnDzXXkREpEVx+m3+kydP5q233uKdd95h586d3H///RQWFnLXXXcBMHbsWKZOnWor/8wzz/DEE08wd+5cEhISyMzMJDMz07aGUUFBAf/7v//LTz/9xIEDB1i6dCkjRoygffv2pKSkANC5c2eGDh3Kvffey7p161i9ejUTJ05k1KhRNbqDramIDrQGpMJSM/nF5U5ujYiISMvh9DlIt99+O0ePHmXatGlkZmbSo0cPFi1aZJu4fejQIVxczuS4119/ndLSUm699Va7eqZPn86TTz6Jq6srW7Zs4Z133iE3N5fo6GiGDBnC008/jaenp638+++/z8SJExk8eDAuLi7ccsstvPzyy41z0Q3E28OVEF8PjheWknbiFIHe7s5ukoiISIvg9HWQmqumsA4SwPBXfmRrWh7/GtuH5C4RFz5BRETkItYs1kGS+osOst69l56nidoiIiINRQGpmYvWWkgiIiINTgGpmYvRrf4iIiINTgGpmVNAEhERaXgKSM1cxVpIWk1bRESk4SggNXMVc5CyT5ZQWm5xcmtERERaBgWkZq6Vrweebi4YBmTmFTu7OSIiIi2CAlIzZzKZNA9JRESkgSkgtQAVw2yahyQiItIwFJBagIrFItWDJCIi0jAUkFqAmCAfQD1IIiIiDUUBqQVQD5KIiEjDUkBqATRJW0REpGEpILUAZy8WaRiGk1sjIiLS/CkgtQCRgdYhtuIyC8cLS53cGhERkeZPAakF8HRzJdzfE4D0XC0WKSIiUl8KSC1EtOYhiYiINBgFpBZCE7VFREQajgJSC3H2RG0RERGpHwWkFiL69ERtBSQREZH6U0BqITQHSUREpOEoILUQGmITERFpOApILUTFJO2cglKKy8xObo2IiEjzpoDUQgR6u+Pj4QqoF0lERKS+FJBaCJPJZOtF0mKRIiIi9aOA1IKcmahd5OSWiIiING8KSC1IxUTtNPUgiYiI1IsCUgtyZohNc5BERETqQwGpBYkOsi4WmXZCAUlERKQ+FJBakJggHwDS8xSQRERE6kMBqQWp6EHKyC3GYjGc3BoREZHmSwGpBYkI8MLFBKVmCzkFJc5ujoiISLOlgNSCuLu6EBlweh6SJmqLiIjUmQJSC6OH1oqIiNRfkwhIr776KgkJCXh5eZGUlMS6devOWfatt97iiiuuIDg4mODgYJKTk+3Kl5WVMWXKFLp164avry/R0dGMHTuW9PR0u3oSEhIwmUx226xZsxx2jY0lWrf6i4iI1JvTA9L8+fOZPHky06dPZ+PGjSQmJpKSkkJ2dna15VesWMHo0aNZvnw5qampxMXFMWTIENLS0gAoKipi48aNPPHEE2zcuJGFCxeye/dubrjhhip1zZgxg4yMDNv2wAMPOPRaG0PFYpF63IiIiEjdmQzDcOrtTklJSfTt25c5c+YAYLFYiIuL44EHHuDRRx+94Plms5ng4GDmzJnD2LFjqy2zfv16+vXrx8GDB2ndujVg7UGaNGkSkyZNqlO78/PzCQwMJC8vj4CAgDrV4Qj/+ekgT3y2jeTOEfxrXB9nN0dERKRJqenfb6f2IJWWlrJhwwaSk5Nt+1xcXEhOTiY1NbVGdRQVFVFWVkZISMg5y+Tl5WEymQgKCrLbP2vWLFq1akXPnj157rnnKC8vr9N1NCUxp2/11xCbiIhI3bnV5aTly5dz9dVX1/vDc3JyMJvNRERE2O2PiIhg165dNapjypQpREdH24WssxUXFzNlyhRGjx5tlxQffPBBevXqRUhICGvWrGHq1KlkZGTw4osvVltPSUkJJSVnbp3Pz8+vUfsamxaLFBERqb86BaShQ4cSGxvLXXfdxbhx44iLi2vodtXIrFmz+Oijj1ixYgVeXl5VjpeVlTFy5EgMw+D111+3OzZ58mTb6+7du+Ph4cEf/vAHZs6ciaenZ5W6Zs6cyVNPPdXwF9HAKhaLzC0qo7CkHF/POn3FIiIiF7U6DbGlpaUxceJEPvnkE9q2bUtKSgoLFiygtLS0VvWEhobi6upKVlaW3f6srCwiIyPPe+7zzz/PrFmzWLx4Md27d69yvCIcHTx4kCVLllxwnlBSUhLl5eUcOHCg2uNTp04lLy/Pth0+fPj8F+ck/l7uBHhZQ5GG2UREROqmTgEpNDSUhx9+mE2bNrF27Vo6dOjAn/70J6Kjo3nwwQfZvHlzjerx8PCgd+/eLF261LbPYrGwdOlS+vfvf87znn32WZ5++mkWLVpEnz5VJyJXhKM9e/bw/fff06pVqwu2ZdOmTbi4uBAeHl7tcU9PTwICAuy2pkprIYmIiNRPvcdfevXqRWRkJK1atWLWrFnMnTuX1157jf79+/PGG2/QtWvX854/efJkxo0bR58+fejXrx+zZ8+msLCQu+66C4CxY8cSExPDzJkzAXjmmWeYNm0aH3zwAQkJCWRmZgLg5+eHn58fZWVl3HrrrWzcuJGvvvoKs9lsKxMSEoKHhwepqamsXbuWq6++Gn9/f1JTU3n44Ye54447CA4Oru+PxOligrzZlXlSAUlERKSO6nwXW1lZGZ988gnDhg0jPj6e7777jjlz5pCVlcXevXuJj4/ntttuu2A9t99+O88//zzTpk2jR48ebNq0iUWLFtkmbh86dIiMjAxb+ddff53S0lJuvfVWoqKibNvzzz8PWIf/vvjiC44cOUKPHj3syqxZswaw9gZ99NFHXHXVVXTt2pX/+7//4+GHH+af//xnXX8cTcqZtZAUkEREROqiTusgPfDAA3z44YcYhsGdd97JPffcw6WXXmpXJjMzk+joaCwWS4M1tilpqusgAbyxch+zvt3FjT2imT2qp7ObIyIi0mTU9O93nYbYduzYwSuvvMLNN99c7R1fYJ2ntHz58rpUL/V05nEjWk1bRESkLuoUkM6eVH3Oit3cuOqqq+pSvdRTjCZpi4iI1Eud5iDNnDmTuXPnVtk/d+5cnnnmmXo3SuqnIiBl5hdTbm6ZQ5wiIiKOVKeA9Oabb9KpU6cq+7t27cobb7xR70ZJ/YT5e+LmYsJsMcg+WXLhE0RERMROnQJSZmYmUVFRVfaHhYXZ3XEmzuHqYiJKz2QTERGpszoFpLi4OFavXl1l/+rVq4mOjq53o6T+ogM1D0lERKSu6jRJ+95772XSpEmUlZVxzTXXANaJ23/5y1/485//3KANlLqJCfaG/QpIIiIidVGngPS///u/HDt2jD/96U+25695eXkxZcoUpk6d2qANlLqJCdJikSIiInVVp4BkMpl45plneOKJJ9i5cyfe3t5ccskl51wTSRqf7XlsJxSQREREaqtez2Lz8/Ojb9++DdUWaUAxWixSRESkzuockH7++WcWLFjAoUOHbMNsFRYuXFjvhkn9RJ+1WKRhGJhMJie3SEREpPmo011sH330EZdffjk7d+7k008/paysjO3bt7Ns2TICAwMbuo1SB9Gnb/MvKCknv7jcya0RERFpXuoUkP7+97/zj3/8gy+//BIPDw9eeukldu3axciRI2ndunVDt1HqwMfDjRBfD0ATtUVERGqrTgFp3759XH/99QB4eHhQWFiIyWTi4Ycf5p///GeDNlDqrqIXSRO1RUREaqdOASk4OJiTJ08CEBMTw7Zt2wDIzc2lqKio4Von9VKxWGR6ngKSiIhIbdRpkvaVV17JkiVL6NatG7fddhsPPfQQy5YtY8mSJQwePLih2yh1FBOs1bRFRETqok4Bac6cORQXW28f/+tf/4q7uztr1qzhlltu4fHHH2/QBkrdxWgtJBERkTqpdUAqLy/nq6++IiUlBQAXFxceffTRBm+Y1J9W0xYREambWs9BcnNz449//KOtB0marrPXQhIREZGaq9Mk7X79+rFp06YGboo0tIqAlH2yhNJyi5NbIyIi0nzUaQ7Sn/70JyZPnszhw4fp3bs3vr6+dse7d+/eII2T+gn188DDzYXScgtZ+cXEhfg4u0kiIiLNQp0C0qhRowB48MEHbftMJpPtkRZms7lhWif1YjKZiAnyZn9OIUdOnFJAEhERqaE6BaT9+/c3dDvEQaKDvNifU6iJ2iIiIrVQp4AUHx/f0O0QB9GdbCIiIrVXp4D07rvvnvf42LFj69QYaXi6k01ERKT26hSQHnroIbv3ZWVlFBUV4eHhgY+PjwJSE6KAJCIiUnt1us3/xIkTdltBQQG7d+9m4MCBfPjhhw3dRqmHWA2xiYiI1FqdAlJ1LrnkEmbNmlWld0mc6+weJMMwnNwaERGR5qHBAhJYV9lOT09vyCqlnqKCvAAoLrNwoqjMya0RERFpHuo0B+mLL76we28YBhkZGcyZM4cBAwY0SMOkYXi6uRLm78nRkyWknThFiK+Hs5skIiLS5NUpIN144412700mE2FhYVxzzTW88MILDdGui1thDviGNlh10UHe1oCUe4pusYENVq+IiEhLVaeAZLHouV4OYRjwwwuw5mW461uI6Nog1cYGebP5cK4maouIiNRQg85Bknoyl8GeJVCcB+/dArmHGqTa6NPzkHSrv4iISM3UKSDdcsstPPPMM1X2P/vss9x22231btRFy80DRn8IYZ3hZAb852YoPFbvaqN1q7+IiEit1CkgrVq1imHDhlXZf91117Fq1ap6N+qi5hMCd/wXAmLh2B744DYoKahXlXrciIiISO3UKSAVFBTg4VH1bih3d3fy8/NrXd+rr75KQkICXl5eJCUlsW7dunOWfeutt7jiiisIDg4mODiY5OTkKuUNw2DatGlERUXh7e1NcnIye/bssStz/PhxxowZQ0BAAEFBQdx9990UFNQviDSYwBi4cyF4B0PaBlgw1jr8VkdaTVtERKR26hSQunXrxvz586vs/+ijj+jSpUut6po/fz6TJ09m+vTpbNy4kcTERFJSUsjOzq62/IoVKxg9ejTLly8nNTWVuLg4hgwZQlpamq3Ms88+y8svv8wbb7zB2rVr8fX1JSUlheLiYluZMWPGsH37dpYsWcJXX33FqlWruO+++2rVdocK6wi//xjcvGHfUvh8AtRxcnxFD1JOQSnFZeaGbKWIiEjLZNTBF198Ybi5uRljx4415s2bZ8ybN8+48847DTc3N+PTTz+tVV39+vUzJkyYYHtvNpuN6OhoY+bMmTU6v7y83PD39zfeeecdwzAMw2KxGJGRkcZzzz1nK5Obm2t4enoaH374oWEYhrFjxw4DMNavX28r8+233xomk8lIS0ur0efm5eUZgJGXl1ej8nW2+zvDeDLYMKYHGMaix+pUhcViMTo/8a0RP+Ur47ejBQ3cQBERkeajpn+/69SDNHz4cD777DP27t3Ln/70J/785z9z5MgRvv/++yprJJ1PaWkpGzZsIDk52bbPxcWF5ORkUlNTa1RHUVERZWVlhISEALB//34yMzPt6gwMDCQpKclWZ2pqKkFBQfTp08dWJjk5GRcXF9auXVvt55SUlJCfn2+3NYoOQ2DEq9bXqXNg9cu1rsJkMp0ZZjuhYTYREZELqdM6SADXX389119/fb0+PCcnB7PZTEREhN3+iIgIdu3aVaM6pkyZQnR0tC0QZWZm2uqoXGfFsczMTMLDw+2Ou7m5ERISYitT2cyZM3nqqadq1KYG12M0FB6FJU9YN98w675aiAnyZm92gSZqi4iI1ECdepDWr19fbU/L2rVr+fnnn+vdqJqaNWsWH330EZ9++ileXl4O/aypU6eSl5dn2w4fPuzQz6tiwIPQf6L19ecT4NfvanV6RQ/SEQUkERGRC6pTQJowYUK1ASEtLY0JEybUuJ7Q0FBcXV3Jysqy25+VlUVkZOR5z33++eeZNWsWixcvpnv37rb9Feedr87IyMgqk8DLy8s5fvz4OT/X09OTgIAAu63RXfs0dL8dDDMsGAeH19f41JjTi0WqB0lEROTC6hSQduzYQa9evars79mzJzt27KhxPR4eHvTu3ZulS5fa9lksFpYuXUr//v3Ped6zzz7L008/zaJFi+zmEQG0adOGyMhIuzrz8/NZu3atrc7+/fuTm5vLhg0bbGWWLVuGxWIhKSmpxu1vdC4u1vlI7a+F8lPWNZKO7q7RqTHBWgtJRESkpuoUkDw9Pav00ABkZGTg5la7aU2TJ0/mrbfe4p133mHnzp3cf//9FBYWctdddwEwduxYpk6daiv/zDPP8MQTTzB37lwSEhLIzMwkMzPTtoaRyWRi0qRJ/O1vf+OLL75g69atjB07lujoaNsE8s6dOzN06FDuvfde1q1bx+rVq5k4cSKjRo0iOjq6Lj+SxuPqDiPfgZjecOqEdbXtvCMXPC06UGshiYiI1FSdAtKQIUNsc3Iq5Obm8thjj3HttdfWqq7bb7+d559/nmnTptGjRw82bdrEokWLbJOsDx06REZGhq3866+/TmlpKbfeeitRUVG27fnnn7eV+ctf/sIDDzzAfffdR9++fSkoKGDRokV285Tef/99OnXqxODBgxk2bBgDBw7kn//8Z11+HI3Pw9e6RlKrSyD/iPW5bUXHz3tKxRykjNxiLBajMVopIiLSbJkMw6j1X8u0tDSuvPJKjh07Rs+ePQHYtGkTERERLFmyhLi4uAZvaFOTn59PYGAgeXl5zpmPBNaH2f47BU6mQ1wS3PkZePhUW7TMbKHj499iMWDdXwcT7u/YSe0iIiJNUU3/ftepBykmJoYtW7bw7LPP0qVLF3r37s1LL73E1q1bL4pw1GQEtbY+t80rEA6vhU/uAnN5tUXdXV2ICLCGIq2FJCIicn51CkgAvr6+DBw4kOHDh3PllVcSFBTEt99+yxdffNGQ7ZMLiegCo+eDmxf8ugi+fAjO0SkYbXtobXG1x0VERMSqTgtF/vbbb9x0001s3boVk8mEYRiYTCbbcbNZz/tqVPH94da3Yf4Y2PQe+IVB8pNVisUEebPh4AnScosav40iIiLNSJ16kB566CHatGlDdnY2Pj4+bNu2jZUrV9KnTx9WrFjRwE2UGuk0DIa/ZH394z8g9bUqRdSDJCIiUjN1CkipqanMmDGD0NBQXFxccHV1ZeDAgcycOZMHH3ywodsoNdVrLAyeZn393VTY+ond4YrFInWrv4iIyPnVKSCZzWb8/f0B62rY6enpAMTHx7N7d80WLhQHGTgZkv5off3pH2HvmQUzKxaL1CRtERGR86tTQLr00kvZvHkzAElJSTz77LOsXr2aGTNm0LZt2wZtoNSSyQQpM6HrzWApg/l3Qpp1xXDbEFueApKIiMj51CkgPf7441gsFgBmzJjB/v37ueKKK/jmm294+eWXG7SBUgcuLnDTG9B2EJQVwvu3Qc5eYk4HpNyiMr7ZmkEdlsASERG5KNRpocjqHD9+nODgYLu72VqyJrFQ5IWUnIR5v4OMTRDYGu5ezB0LDvHj3hwAkjuHM2PEpbaeJRERkZbOoQtFVickJOSiCUfNhqc/jPkEQtpC3iF4/1b+dfslPHhNe9xdTXy/M5vkF1cy98f9mPX4EREREZsGC0jSRPmFwZ2fgl8EZG3D65M7mHx1PN88eAV94oMpKjUz46sd3PTaaral5V24PhERkYuAAtLFIDjB2pPkGQAHV8OHo7ikZDsL7ruM/7vpUvy93NhyJI8Rr65m5jc7KSqt/nElIiIiF4sGm4N0sWkWc5Aq2/8DvHcLmEus74PbQOIoctreyPQfi/h6SwYAscHe/O3GSxnUMdyJjRUREWl4Nf37rYBUR80yIAGk/wLr3oIdn0NpwZn9rfuzM3wYD21J4Nd8VwBuSIzmid91Iczf00mNFRERaVgKSA7WbANShdJC2PU1bP4Q9i0HrP8MDFdPdgQM5MXsXqwwd8fP24vHhnViZJ84TcIXEZFmTwHJwZp9QDpbfjps/Rg2fQhHd9p2nzAF8d+y/iw0X4F/fE/+fkt32oX5ObGhIiIi9aOA5GAtKiBVMAzI2AybP7IGpqIc26Gdljg+N64k9LI7uDMlCU83Vyc2VEREpG4UkBysRQaks5nLrM9x2/whxq5vMFlKrbsNExvcetDq8nG0u+J28PBxckNFRERqTgHJwVp8QDrbqRMY2z/jxJp3CTm+0ba7xMUbU9eb8Oj1e4gfYH3EiYiISBOmgORgF1VAOsvJtN2s/fx1OmR+RWuXo7b9RmAspu6jIHEUhF7ixBaKiIicmwKSg12sAanC2n05vP/JAi47uZjfuf5EgOnUmYOtLoHYPtYtpg9EdAVXd+c1VkRE5DQFJAe72AMSQEm5mddX7OPfy3dypfEzt7n/yJUum3ExzPYF3bwhuseZwBTbFwJjnNJmERG5uCkgOZgC0hl7s0/y2MJtrDtwnCBOco3fQUaEZtDDtIeA41swleRXPck/6nQvU19raIruAR6+jd52ERG5uCggOZgCkj2LxWDBz4eZtWgXuUVltv1hvu6MuaSU64OP0K50Fy5pP0PWDqjcy2RyhYguZwJTbF9o1V4Tv0VEpEEpIDmYAlL1isvM/Lgnh2+3ZbJkRyb5xWcefBvi60FK1wiu7xTIZV6HcMvYCEfWw5ENcDK9amWegRDb+0xgiu0DPiGNeDUiItLSKCA5mALShZWWW1izL4dvt2by3Y5Mu56lQG93ru0SwbBukQxoH4pnYSak/QxHTm/pv0D5qaqVBidASDsIag1BcRDY+sxrv0j1OImIyHkpIDmYAlLtlJktrP3tON9uy+C77ZnkFJTajvl7upHcJYLrLo3kyg5heLm7WheqzN5xJjCl/Qw5v57/Q1zcrZO/g1qfDk5xp1/HWV8HxOhuOhGRi5wCkoMpINWd2WKw/sBxvt2awbfbMsk+WWI75uvhytWdwhnWLYpBHcPw8XA7c+KpE5CxBXIPWbe8w5B72Po6P63qvKbKTC7gH3265ynurF6oiiAVC+7eDrpqERFpChSQHEwBqWFYLAYbD53gm62ZLNqWQXpese2Yl7sLV3cM57puUVzTKRw/T7dzV2Quh5MZ9sEp73SQyj0MeUfAXHLu8ysEtoauN0LiaOukcRERaVEUkBxMAanhGYbB5iN5fLs1g2+2ZXD4+Jk5SB5uLlx5SRjXXRrJZe1aER3ohclkqnnlFgsUZlcTnA6feV1WaH9OVKI1KF16K/iFNdBVioiIMykgOZgCkmMZhsH29Hy+OT0Mtz/HPryE+nmQGBtE99ggEuMCSYwNItjXoz4faB3CO/AjbP4I9nwHltN34Lm4QftrrY9R6TAU3L3qcWUiIuJMCkgOpoDUeAzDYHfWSb7ZmsmyXVnsyjhJuaXqP9vWIT50jw2kR1wQiXFBdI0OsJ/DVBuFx2Dbf2HzB9Y76ip4BcKlt1h7lmL7Qm16sURExOkUkBxMAcl5isvM7MjIZ/PhXDYfzmXLkTx+q9TDBOBigg4R/iTGWgNTYlwgHSL8cXet5VIA2btgy0eweb79ek0h7axBqftICI6v51WJiEhjUEByMAWkpiWvqIwtadawtOl0cDr77rgKnm4uXBoTaOtp6h4bREIrn5rNZ7KY4cAPsOlD2PkFlBWdORY/0DoE12UEeOnfg4hIU6WA5GAKSE1fZl4xmw7nsuVILpuPWMPTybNW9q4Q6O1O91jrPKYecUH0axtCgNcF1ksqKYCdX8LmD2H/KuD0r5GbN3T+nTUstb0aXFwb/sJERKTOmk1AevXVV3nuuefIzMwkMTGRV155hX79+lVbdvv27UybNo0NGzZw8OBB/vGPfzBp0iS7MgkJCRw8eLDKuX/605949dVXARg0aBArV660O/6HP/yBN954o8btVkBqfiwWg/3HCm3DcpsO57IjPZ9Ss8WunKuLicTYQAa0D2VA+1B6tg7C0+08QSf3MGxdYO1ZOrbnzH6/SOvwm5YMEBFpMppFQJo/fz5jx47ljTfeICkpidmzZ/Pxxx+ze/duwsPDq5Rfv349CxYsoHfv3jz88MNMmTKlSkA6evQoZvOZBQO3bdvGtddey/Llyxk0aBBgDUgdOnRgxowZtnI+Pj61CjoKSC1DabmF3Zkn2XQkly2Hc1l34DgHjxXZlfF2d6VvmxAGtm/F5e1C6RIVgItLNUNyhgHpG61Badsn1rviKlQsGdD1ZvCPcPBViYjIuTSLgJSUlETfvn2ZM2cOABaLhbi4OB544AEeffTR856bkJDApEmTqgSkyiZNmsRXX33Fnj17bPNMBg0aRI8ePZg9e3ad266A1HIdOVHEmr3H+HFvDmv25dg9FgWsD93t364VA9uHMqBdKK1b+VStpLwU9iy2DsH9+h1YzjyHjohLoe0g6xBc/OXgUc35IiLiEDX9+13He6Drr7S0lA0bNjB16lTbPhcXF5KTk0lNTW2wz3jvvfeYPHlylUm477//Pu+99x6RkZEMHz6cJ554Ah+fc/+hKikpoaTkzKTf/Pz8BmmjND2xwT6M7OvDyL5xtiUGftyTw5p9x/jpt2McLyzl6y0ZfL0lA4C4EG8Gtg/l8nahXN6uFa38PMHNwzoXqfPvoOj46SUDPrI+Uy5rm3VLnQOuHhCXBO2utgamqETNWxIRaQKcFpBycnIwm81ERNgPN0RERLBr164G+YzPPvuM3Nxcxo8fb7f/97//PfHx8URHR7NlyxamTJnC7t27Wbhw4TnrmjlzJk899VSDtEuaD5PJRKfIADpFBnDPFW0pLbew+Uguq/fmsHpvDr8cyuXw8VN8uO4wH647DECXqAAGXmINS/3ahODjEwL97rVuhTnw24ozW95h651xB36ApTPAOxjaXGkNS+2uhuAEJ169iMjFy2lDbOnp6cTExLBmzRr69+9v2/+Xv/yFlStXsnbt2vOeX5MhtpSUFDw8PPjyyy/PW9eyZcsYPHgwe/fupV27dtWWqa4HKS4uTkNsF7mCknLW7z/Oj6cD067Mk3bH3V1N9GodbJvwnRgbiFvFOkyGAcf2wW/LYd9ya0gqqdQzGZxwJiy1udIaoEREpM6a/BBbaGgorq6uZGVl2e3PysoiMjKy3vUfPHiQ77///ry9QhWSkpIAzhuQPD098fT0rHe7pGXx83Tj6k7hXN3JelPB0ZMlrNmXc7qH6RhpuadYu/84a/cf58UlvxLo7c7gTuEM6RrJVR3C8A5tD6Htrb1L5nLrJO99y62h6ch6OHEANrxt3UwuEN3zzPyluH7gpn+TIiKO4LSA5OHhQe/evVm6dCk33ngjYJ2kvXTpUiZOnFjv+t9++23Cw8O5/vrrL1h206ZNAERFRdX7c+XiFubvyYgeMYzoEYNhGBw8VmSb7L1m3zFyi8pY+EsaC39Jw8vd+gDelK6RDO4cTpCPhzX0xPWDQVOg5CQcWH2mhylnN6RtsG4/vADuPhA/4PT8pUEQ3kWPPhERaSBOC0gAkydPZty4cfTp04d+/foxe/ZsCgsLueuuuwAYO3YsMTExzJw5E7BOut6xY4ftdVpaGps2bcLPz4/27dvb6rVYLLz99tuMGzcONzf7S9y3bx8ffPABw4YNo1WrVmzZsoWHH36YK6+8ku7duzfSlcvFwGQykRDqS0KoL3dcFo/ZYvDzgeMs3pHFd9szOXLiFIt3ZLF4RxauLiYuaxtCStdIhnSJJDLQCzz9oeNQ6waQlwb7V57uYVoBhdmwd4l1A/CLgOheEN7ZuoV1gtAOeriuiEgdOH2hyDlz5tgWiuzRowcvv/yybchr0KBBJCQkMG/ePAAOHDhAmzZtqtRx1VVXsWLFCtv7xYsXk5KSwu7du+nQoYNd2cOHD3PHHXewbds2CgsLiYuL46abbuLxxx/XOkjSaAzDYEdGPt9tz2Lx9swqc5cS44JI6RpBStdI2oX5VVcBZG239i79tsLa01R+qmo5kwsEtzkTmCrCU6v2Gp4TkYtSs1gHqTlTQJKGdCCnkMU7MvluexYbD53g7N/K9uF+trDULSaw+ufGlZdYh96ytkP2Tut2dKf9YpVnM7lCq3b2oSmss3Wf6wUesyIi0owpIDmYApI4SvbJYpbsyOK77Vmk7suhzHzmVzQ60IshXSMZ0jWCfgkhZ+6Iq45hQEG2NShl7zr939OvS/KqP8fF3dq7FN7JGpgqwlNwG3B16oi8iEiDUEByMAUkaQz5xWUs35XNd9szWbH7KEWlZx6jE+TjzuBOEaR0jeDKDmF4uddwgUnDgJMZp3uZdp31311QerL6c1w9ILQjxPSEmD4Q2xfCOmpRSxFpdhSQHEwBSRpbcZmZH/fk8N32TL7fmcWJojOPL/F2d+WqDmHc3CuGwZ0jcK3uWXEXYhiQd6RSaNoJR3dDWWHV8h7+1sAU2/d0aOoDflWfoSgi0pQoIDmYApI4U7nZws8HT/Dd9kwWb88iLffMBO3YYG/G9o/n9j6tCfRpgPlEFgvkHbLObzrys3V9pvRfoLSgatmg1tbAVBGaorprMriINCkKSA6mgCRNhWEYbE/P58st6cxff5jc0z1L3u6u3NQrhvGXJ9Ahwr9hP9RitvYwHVl/OjT9bH1Ppf85cfWAyG72vUzBCVqvSUScRgHJwRSQpCkqLjPz+aY05q05yM6MM48tubxdK8ZfnlD34bcafXi+dSXwI+vhyAbrf4tyqpbzCbUGpdg+1tAU0wu8Ah3TJhGRShSQHEwBSZoywzBYt/8489Yc4LvtmVhO/5Y3+PDb+RsBuQfP9DAdWQ+ZW8BcWqmgyTrhu91guOav4OHr2HaJyEVNAcnBFJCkuUjLPcV7Px3kw3WH7IbfbuxpHX7rGNnAw2/nU14CmVvPGppbbw1RFeIug9/PB++gxmuTiFxUFJAcTAFJmpviMjNfbErn7TUHqgy/jbs8gWRHDr+dT8FROLAKvnoYivOsc5bu+BT8whq/LSLS4ikgOZgCkjRXhmGw/sAJ5q3Zz3fbszCfHn9r1OG36mRuhf/cBIVHrYtV3vkZBMU1fjtEpEVTQHIwBSRpCSqG3z5ad8i2rpKXuws39Yxt/OE3gGP74N0RkHcYAmJh7OcQ2v7C54mI1JACkoMpIElL0qSG3/KOwLs3wrE94BsGdyy0rqckItIAFJAcTAFJWqImM/xWcBTeu8k67OYZCGM+htZJjv9cEWnxFJAcTAFJWrr0s+5+qxh+8/FwZWSfOO4akEB8Kwffjn8qFz4cBYdSwd0HRr0P7a5x7GeKSIungORgCkhysagYfpu7ej+7Mq0PszWZ4NrOEdxzRVv6JgRjctTK2KVFsOBO2Ps9uLjDrf+GLiMc81kiclFQQHIwBSS52BiGwZp9x/jXD7+xfPdR2/5uMYHcc0UbhnWLwt3VpeE/uLwUFt4LOz4Dkwvc8Ar0vKPhP0dELgoKSA6mgCQXs73ZBcxdvZ//bjhCSbkFgMgAL8ZdnsDv+zlgnpLFDF8+BL/8x/p+6Cy47P6G/QwRuSgoIDmYApIIHC8s5YO1B3kn9SBHT5YA1lW6b+sTy10D2tAmtAHnKRkGLH4cUudY3w+aCldN0YNvRaRWFJAcTAFJ5IyScjNfbs7gXz/8ZjdPKblzBPcMbEO/NiENM0/JMGDV87D8b9b3SfdDyt/BxQFDeyLSIikgOZgCkkhVhmGQuu8Y//pxP8t2Zdv2XxoTwD0D2zKsWxQebg0QZta+Cd/+xfq6xxgY/jK4utW/XhFp8RSQHEwBSeT89mYX8Pbq/fx34xGKy87MUxp7eTy/79eaIB+P+n3Apg/h8wlgmKHzcLjl3+Dm2QAtF5GWTAHJwRSQRGrGofOUdn4Fn9wF5lJoe7V1rSQPB6/PJCLNmgKSgykgidROSbmZrzZn8K8f99seZ2IyweBOEdw9sA2Xta3jPKV9y+GjMVBWCHFJ8PsF4B3UsI0XkRZDAcnBFJBE6qZintK/f9zP0rPmKXWNDuC+K9tyfbco3Gq7ntLhdfD+rVCcBxHd4M6F4BfewC0XkZZAAcnBFJBE6m/f0QLm/mg/TykmyJu7B7bh9r5x+HrWYuJ15jb4z01QmA0h7WDsZxDU2jENF5FmSwHJwRSQRBrOicJS/vPTQd5Zc4BjhaUABHq7c8dlrRl3eQLh/l41q+jYPnh3BOQdhoBYa0gKvcRxDReRZkcBycEUkEQaXnGZmf9uPMK/ftjP/pxCADxcXbi5Vwz3XNGW9uF+F64k7wi8eyMc2wM+odbhtqhExzZcRJoNBSQHU0AScRyzxWDJjiz+uWofGw/l2vYnd47gj1e1pU9CyPkrKMyB926GjM3gGQhjFkDryxzbaBFpFhSQHEwBSaRx/HzgOG+u+o0lO7Js+3q1DuK+K9txbZcIXF3OcedbcR58MAoOrQE3b+tDbjsPB/caDteJSIukgORgCkgijWtvdgH/+uE3Fm5Mo9RsndDdJtSXe65owy29YvFyd616UmkRLBgLe5dY37v7QvtroOP1cMkQ8G3ViFcgIk2BApKDKSCJOEf2yWLeWXOA/6QeJL+4HIBWvh6MuzyBOy+LJ9i30grd5aXWZ7dtWQAnM87sN7lA3GXQaRh0HAat2jXiVYiIsyggOZgCkohzFZaUM3/9Yf79437Sck8B1hW6R/aJ5Z4r2hIX4mN/gmFAxibY9Q3s/hayttofD+0IHa+zhqXYPuBSTY+UiDR7CkgOpoAk0jSUmy18vTWDf676je3p1hW6XUxwXbco/nBlW7rHBlV/4omD8Osi2P0NHPgRLOVnjvmGQYcUa1hqezV4+FRfh4g0OwpIDqaAJNK0GIbBmn3HeHPVb6z69aht/2VtQ/jDle0Y1DHs3I8yOZULe7+3hqU9S6Ak/8wxNy9rSOp4nXXTCt0izVpN/37Xcj3/hvfqq6+SkJCAl5cXSUlJrFu37pxlt2/fzi233EJCQgImk4nZs2dXKfPkk09iMpnstk6dOtmVKS4uZsKECbRq1Qo/Pz9uueUWsrKyqtQlIs2HyWRiQPtQ3v2ffnz70BXc3DMGNxcTP/12nLvmrWfIP1bxwdpDnCo1Vz3ZOwi63Qq3zoX/3QdjP4d+f4DA1lBeDL9+C18+CM93gH8lww8vQvYu67CdiLRITg1I8+fPZ/LkyUyfPp2NGzeSmJhISkoK2dnZ1ZYvKiqibdu2zJo1i8jIyHPW27VrVzIyMmzbjz/+aHf84Ycf5ssvv+Tjjz9m5cqVpKenc/PNNzfotYmI83SOCuDF23uw6i9Xc+8VbfDzdGNPdgGPfbqV/rOWMuvbXaSfnrdUhZsHtB0Ew56FSVvgj6vh6r9CdE/AgCPrYelT8FoSvNwTvvvr6SG6aoKXiDRbTh1iS0pKom/fvsyZMwcAi8VCXFwcDzzwAI8++uh5z01ISGDSpElMmjTJbv+TTz7JZ599xqZNm6o9Ly8vj7CwMD744ANuvfVWAHbt2kXnzp1JTU3lsstqtpichthEmo/84jIWrD/MO6kHOHzcGoxcXUwMvTSS/xmQQK/WwecefrOrKN06wXv3t7B/JZhLzxzzj4LuIyHx9xDe6dx1iIhTNfkhttLSUjZs2EBycvKZxri4kJycTGpqar3q3rNnD9HR0bRt25YxY8Zw6NAh27ENGzZQVlZm97mdOnWidevW9f5cEWmaArzcueeKtqx45Gr+eWdvLmsbgtli8PWWDG55PZUbX13NZ7+kUVpuuUBF0dD3brjjE/jLbzDyXUgcDV5B1iUEVr9k7Vn659Ww7i0oOt4o1yciDa8Wj8puWDk5OZjNZiIiIuz2R0REsGvXrjrXm5SUxLx58+jYsSMZGRk89dRTXHHFFWzbtg1/f38yMzPx8PAgKCioyudmZmaes96SkhJKSkps7/Pz889ZVkSaJlcXE0O6RjKkayQ70vOZt2Y/n21KZ/ORPCbN38Tfv9nJnZfF8/uk1rTy8zx/ZZ7+0GWEdSsvgV+/g00fWBelTN9o3RZNhY5Drb1Kl1wLru6Nc6EiUm9OC0iOct1119led+/enaSkJOLj41mwYAF33313neudOXMmTz31VEM0UUSagC7RATx7ayJThnbig7WH+M9PB8k+WcILS37lleV7GZEYzV0D2tAlugZD6G6e0OUG61ZwFLZ+DJs/gMytsPNL6+YTenoIbjREdXf8BYpIvThtiC00NBRXV9cqd49lZWWddwJ2bQUFBdGhQwf27t0LQGRkJKWlpeTm5tbqc6dOnUpeXp5tO3z4cIO1UUScp5WfJw8MvoQfp1zDS6N6kBgbSGm5hY83HGHYyz8w6p+pfLc9E7OlhtM1/cKg/5/gjz9at8smWNdVKsqBn16DN6+A1wfAmjlQUP0NKSLifE4LSB4eHvTu3ZulS5fa9lksFpYuXUr//v0b7HMKCgrYt28fUVFRAPTu3Rt3d3e7z929ezeHDh067+d6enoSEBBgt4lIy+Hh5sKIHjF8NmEA/73/cn7XPQrX08sE/OE/Gxj0/HL+9cNv5BeX1bzSyG4w9O8weSeMnm8djnP1gKxtsPiv8EIn+OB22P6ZdZhORJoMp97FNn/+fMaNG8ebb75Jv379mD17NgsWLGDXrl1EREQwduxYYmJimDlzJmCd2L1jxw4Ahg0bxpgxYxgzZgx+fn60b98egEceeYThw4cTHx9Peno606dPZ9OmTezYsYOwsDAA7r//fr755hvmzZtHQEAADzzwAABr1qypcdt1F5tIy5eee4r//HSQD9cdIrfIGox8PVy5tXcs4we0oU2ob+0rLToO2xfCpg8h7ecz+72C4NJboMcYiOkFNbmrTkRqrdmspD1nzhyee+45MjMz6dGjBy+//DJJSUkADBo0iISEBObNmwfAgQMHaNOmTZU6rrrqKlasWAHAqFGjWLVqFceOHSMsLIyBAwfyf//3f7Rrd+ZBlMXFxfz5z3/mww8/pKSkhJSUFF577bVaDe0pIIlcPE6VmvlsUxpvr97Pr1kFtv3XdArnrgEJDGwfWrNlAio7+qt1rtLm+XAy/cz+0A7WuUqJo6x3zolIg2k2Aam5UkASufgYhsHqvcd4e/V+lu3Oti2kfUm4H3dcFs+IHtEE+XjUvmKL2bqu0qYPrRO6yysWsTRZF63sMcY6POdWh7pFxI4CkoMpIIlc3A7kFDJvzQE+/vkwhacfX+Lh6sKQrhGM7BPHgPahuLrUoVepOB92fG5dMuDQWcP+gXEw8GHoeYf1rjkRqRMFJAdTQBIRsK7S/enGNBb8fJjt6WfWR4sO9OLW3rHc2juO1q186lb58f2w+SPY8DYUnL7j1z/aGpR6jQV3rwa4ApGLiwKSgykgiUhl29Ly+GTDET79JY28U2fuduvfthUj+8YytGsU3h6uta+47BRsfBd+/Id1xW4Av0gY8CD0vgs86hjARC5CCkgOpoAkIudSXGbm+51ZLPj5CD/sOWqbq+Tv6cbwHtGM7BNHYmxg7Sd2lxXDpvfgh39A/hHrPt8wuPwB6HM3ePo17IWItEAKSA6mgCQiNZGWe4qFG46wYMNh24NyATpE+DGyTxw39owh9EKPNamsvBQ2fwg/vAC5B637vEPg8onQ917w0v8miZyLApKDKSCJSG1YLAY/7T/Gxz8f4dttGRSXWR+M6+ZiYnDncEb2ieOqDmG4udZi/V5zGWxZAD88D8d/s+7zCoL+E6DffeAd1ODXIdLcKSA5mAKSiNRVfnEZX23OYMHPh9l0ONe2P8zfk1t6xXJbn1jahdViuMxcbl18ctVzkPOrdZ9nIFz2R0j6I/iENOwFiDRjCkgOpoAkIg3h16yTLFh/mE9/SeNYYaltf5/4YEb2iWNY9yj8PGv4XHGLGXZ8Biufg6M7rfs8/KHfvdB/Ivi2avgLEGlmFJAcTAFJRBpSabmFZbuy+fjnwyzfnU3Fs3F9PFwZ1i2Km3rGcFnbVjVbW8ligV1fwspnrc99A3D3hb53Wyd0+4U77kJEmjgFJAdTQBIRR8nKL2bhxjQ+/vkwv+UU2vaH+XtyfbcobugRTc+4oAvfBWexwK/fwspnIGOzdZ+bN/S5Cy5/EAKiHHgVIk2TApKDKSCJiKMZhsGGgyf478Y0vt2WYXtgLkBciDfDu0czokcMHSP9L1QR7FliDUoVD8h19YTe42DAJAiMcdxFiDQxCkgOpoAkIo2ptNzCj3uP8sWmdBbvyKLo9ONNADpG+HNDj2iGd48+/6rdhgH7llmH3g7/ZN3n6gGdfmd9QG5Q6zNbQAy41nDuk0gzooDkYApIIuIsRaXlLN2ZzReb01m5+yilZovtWI+4IEb0iOb67lGE+5/jUSSGAQd+sAalAz9UX8bkag1JQa0hKM4+PNkClLsDrk7EsRSQHEwBSUSagryiMr7bnsnnm9NI3XfMNrnbxQT927XihsRohnaNItDnHGHm0E9wcDXkHjprOwzmkvN/sMnlTIAKrCZABcYqQEmTpIDkYApIItLUZJ8s5ustGXyxOZ1fDuXa9nu4unBVxzBuSIwmuXPEhZ8HZ7FAYXal0FRpq0mA8o+2hqWoRGifDAkDwN27/hcqUg8KSA6mgCQiTdmhY0V8uSWdLzalszvrpG2/j4cr13aJ4IbEaK64JAwPt1qs3F3BYoHCo6fD0sGq4SnvMJQXVz3PzRsSBsIl11oDU6t29bhCkbpRQHIwBSQRaS52Z57ki81pfLE53e55cEE+7lx3aSQ3JMbQr01IzdZYqgnDOBOgjv9mnee053s4mW5fLqQttL/WGpgSBqp3SRqFApKDKSCJSHNjGAa/HM7li03pfLUlg5yCM8Nk4f6eXN89iuGJNVxjqfYfDtk7rMsN7P0eDqWCpfzMcTcva0iqCEzqXRIHUUByMAUkEWnOzBaDn347xheb0vl2Wwb5xWfCSmywN7/rHs3wxCi6RAU0fFgCKM6H/SvPBKb8NPvjwW2sw3CXXAsJV4DHeZYvEKkFBSQHU0ASkZaitNzCD3uO8uXmqmsstQ3zZXj3aIYnRtM+vBYP0K0Nw4DsnbB3iTUwHfoJLGcWxcTV0zrB29a71B4cEdrkoqCA5GAKSCLSEp0qNbN8dzZfbk5n6a5sSsvPrLHUOSqA4YlRDO8eTVyIA3t0Sk7C/lVnepfyDtsfD4o/PdH7WmhzBXj4Oq4t0uIoIDmYApKItHQni8v4fmcWX2xK54c9OZRbzvy56Nk6iN91j+Z33aOICDjHgpQNwTDg6O4zvUsH11TqXfKAsE4Q0RXCu0BEFwjvCv6R6mWSaikgOZgCkohcTE4UlrJoeyZfbk7np9/OLEhpMkG/hBBu6BHNdZdGEeLr4diGlBRYe5f2LrHeGZd3qPpy3sHWoBTR5XRw6grhncHzAs+tkxZPAcnBFJBE5GKVfbKYb7daw9LPB0/Y9ru6mBjYPpThidEM6RpBgJeDV9I2DDixH7K2Q9YOyD793+P7wLBUf05Q66rBqVV7rfp9EVFAcjAFJBERSMs9xVeb0/lySzrb0vJt+z1cXRjUMYzhidEM6hiGv6PD0tnKTlmH5bJ3WLes0/89mVF9eRd3COtoP0QX0cX6KBUN07U4CkgOpoAkImLvt6MFfHX6USd7swts+00m6BjhT+/4YHq1DqZ3fDDxrXwcs3zA+RQdPyswVfQ67YTSk9WX9wy09jC1vgziB0BcP/DS/943dwpIDqaAJCJSPcMw2J11ki83p/PN1kz25xRWKdPK14NeZwWm7rGBeLlf4BlxjmmsdcXv7B3WobqKAHVsj/1ClmB9vlxkd2tYir8cWvcH31aN32apFwUkB1NAEhGpmez8YjYeOsGGgyfYeCiXrUfyKDXbzxFyczHRNSaQXq2D6B1vDU1RgU589Eh5qTUkpW20rvp9cDWcOFC1XFgna1iqCE0B0Y3eVKkdBSQHU0ASEambknIz29Ly2XjwBBsPneDngyc4erKkSrnoQC+7XqYu0QG4u9bh4boNJT/dusxAxXZ0Z9UywQnWsNS6vzUwhbTVPKYmRgHJwRSQREQahmEYHDlxio2HTrDx4Ak2HDrBzoyTmC32f5683F3oHhtkC0y9WgfRys/TSa0GCo+d7l1aY+1hytxS9e45v8jTPUynt7DO4OLEkCcKSI6mgCQi4jiFJeVsPpLLL4dyTw/NnSC3qKxKuTahvvSJD6ZfmxCS2rQiLsS78Sd/VyjOhyPrzvQwpW0Ac6l9Ga8g+8AU2V1LDDQyBSQHU0ASEWk8FovBbzmFZ3qZDp5gz1l3ylWIDPCib5uQ04EphPZhfri4OCkwlZ2yhqSDp+cwHV4HZZUmrJtcITDG+viUoNZn/bc1BMeDfxS4OGHyegumgORgCkgiIs6VV1TGxkMnWHfgOOv3H2fzkVzKzPZ/0oJ93OmTYA1L/dqE0CUqADdnzWMyl0HGFmtYOrgGDq2B4rzzn+PiBoGxZ4JTcLx9mPKL0JBdLSkgOZgCkohI01JcZuaXQ7ms23+cdQeOsfFgLqfKzHZlfD1c6RUffDowtXLe8gIAFgsUZFqXGcg9BCcOQu7B0+8PQt6RqksNVObqAYFxp4NT67N6oU6/9wvXJPFKFJAcTAFJRKRpKzNb2JaWZw1M+4+z/sBx8ovtA4eHmws9YoPod7qHqVd8MH6ebk5qcSUWs3X1b1t4OnQmPOUehLw0MMznr8M7BKJ7nrX1uOhXCG82AenVV1/lueeeIzMzk8TERF555RX69etXbdnt27czbdo0NmzYwMGDB/nHP/7BpEmT7MrMnDmThQsXsmvXLry9vbn88st55pln6Nixo63MoEGDWLlypd15f/jDH3jjjTdq3G4FJBGR5sVisS5gWRGY1u4/Tk6B/fICri4mukYH0C/BGpj6JoQQ7OgH8NaVuRzy084KTofO6oE6ZD1W3TPpfMMqhaae4B/Z+O13kpr+/XZqTJ4/fz6TJ0/mjTfeICkpidmzZ5OSksLu3bsJDw+vUr6oqIi2bdty22238fDDD1db58qVK5kwYQJ9+/alvLycxx57jCFDhrBjxw58fX1t5e69915mzJhhe+/j49PwFygiIk2Gi4uJzlEBdI4KYNzlCRiGwYFjRazbf4y1p0PTkROn2HIkjy1H8vjXj/sBiAvx5tLoQC6NCaRbjPW/IU0hNLm6WYfWguOrP15eYl0ZPP2XM1vWDig8CnsWW7cK/lH2gSmqB/iFNcplNFVO7UFKSkqib9++zJkzBwCLxUJcXBwPPPAAjz766HnPTUhIYNKkSVV6kCo7evQo4eHhrFy5kiuvvBKw9iD16NGD2bNn17nt6kESEWl50nNPsf7AcVtg2lvNnXIAMUHedI0OsAam2EAujQ4kzN+JazLVVNkp6yNVzg5NR3dV39MUGAdRifbBySek8dvcwJp8D1JpaSkbNmxg6tSptn0uLi4kJyeTmpraYJ+Tl2e9QyAkxP5Lff/993nvvfeIjIxk+PDhPPHEE+ftRSopKaGk5ExXbH5+/jnLiohI8xQd5M2IHjGM6BEDWO+U256ex7b0PLam5bMtLY/9OYWk5Z4iLfcUi3dk2c6NDPDi0phALo2xBqduMYGEB3g561Kq5+4NsX2sW4XSQsjcCumbzoSmnF8h77B12/XVmbJB8Wf1MnUHn1bg4QcevtbN3bfF3FXntICUk5OD2WwmIiLCbn9ERAS7du1qkM+wWCxMmjSJAQMGcOmll9r2//73vyc+Pp7o6Gi2bNnClClT2L17NwsXLjxnXTNnzuSpp55qkHaJiEjzEOjjzuXtQ7m8faht38niMranW8PStrQ8tqbl8VtOIZn5xWTmF/P9zjOhKczf0zYsd2l0AN1iA4kM8HLeYpbV8fCF1pdZtwolJ61LEpzd03R835kJ4js+O3d97r5nAlNFePL0s39vd7y6Y6df+7QCN+cMZzaRqfqOMWHCBLZt28aPP/5ot/++++6zve7WrRtRUVEMHjyYffv20a5du2rrmjp1KpMnT7a9z8/PJy4uzjENFxGRJsvfy53L2rbisratbPsKSsrZmZHP1iPW0LQtPY+92QUcPVnCsl3ZLNuVbSsb6udB1+gz85m6xQYSHdjEQpOnPyQMsG4VTuVCxmZrWMrYZJ3PVHISSgusW8UwXVmhdSusruJa+v0C6JDSABXVntMCUmhoKK6urmRlZdntz8rKIjKy/rPpJ06cyFdffcWqVauIjY09b9mkpCQA9u7de86A5OnpiadnMxhfFhGRRufn6UbfBOtdbxWKSq2haVtaPltP9zbtyS4gp6CUlb8eZeWvR21lQ3w9Tk8CD7AFp5ggJz42pTreQdD2KutWmWFAebF1uK60AEoKzrwuLTzrdeX3hecv6+Fb9bMaidMCkoeHB71792bp0qXceOONgHVIbOnSpUycOLHO9RqGwQMPPMCnn37KihUraNOmzQXP2bRpEwBRUVF1/lwREZGz+Xi40Ts+hN7xZ0JTcZnZGprS89l2xDo892vWSY4XlrLq16Osam6hqYLJZJ3f5O4NvqEXLl8ThmHdnMSpQ2yTJ09m3Lhx9OnTh379+jF79mwKCwu56667ABg7diwxMTHMnDkTsE7s3rFjh+11WloamzZtws/Pj/bt2wPWYbUPPviAzz//HH9/fzIzMwEIDAzE29ubffv28cEHHzBs2DBatWrFli1bePjhh7nyyivp3r27E34KIiJysfByd6Vn62B6tg627SsuM7M78yRb0vJqFJq6RgfQPTaw6Yem+jKZnLqgpdMXipwzZ45tocgePXrw8ssv24a8Bg0aREJCAvPmzQPgwIED1fYIXXXVVaxYsQLgnP9I3n77bcaPH8/hw4e544472LZtG4WFhcTFxXHTTTfx+OOP1+p2fd3mLyIijlIRmraeNRF8d+ZJyi1V/2QH+7jb1mjqdnpOU4sNTQ2g2ayk3VwpIImISGOqS2i6JNyf1iHetG7lQ+sQH2KDfZz37LkmQgHJwRSQRETE2UrK7UPTliPW4bky87n/tEcEeNI6xIe4EGtoOnsL8/ds8T1PCkgOpoAkIiJNUUVo2paWz8FjhRw6XsTBY0UcPl7EyZLy857r5e5CXLBPlQAV38ra++Tt0fx7n5r8StoiIiLS8DzdXOkeG0T32CC7/YZhkFtUxqHjRbbt8Fmv03NPUVxmYU92AXvO8YiVcH9PW2iKC/EhIdSH+Fa+JLTyJdjHvUX1PikgiYiIXARMJhPBvh4E+3qQGBdU5XiZ2UJ67ikOHqsang4ds/Y+ZZ8sIftkCT8fPFHl/AAvNxJCrWEpodXp4BRqfR3i69HswpMCkoiIiODu6kJ8K1/iW1VdnNEwDPJO2fc+Hcwp4uDxQg7kFJGZX0x+cTlbjljnQVXm7+VGQitf4lv50CbU93Svkw8Job60aqLhSXOQ6khzkERERKxOlZo5dLyI/TmFHDxWyIFjRRw4/To9r/i85/p5uhF/OiwltPKx9kCFWsNUmF/DTxrXJG0HU0ASERG5sOIya3iyBqYi9h87HaJyikjPO3XexbJfGd2T4YnRDdoeTdIWERERp/Nyd6VDhD8dIvyrHCsuM3PkRBH7c4pO9zxZg9OBY4Wk5Z4ivpWPE1pspYAkIiIiTuHl7kr7cH/ah1cNTyXlZtxcXJzQKisFJBEREWlyPN2cu+aS86KZiIiISBOlgCQiIiJSiQKSiIiISCUKSCIiIiKVKCCJiIiIVKKAJCIiIlKJApKIiIhIJQpIIiIiIpUoIImIiIhUooAkIiIiUokCkoiIiEglCkgiIiIilSggiYiIiFTi5uwGNFeGYQCQn5/v5JaIiIhITVX83a74O34uCkh1dPLkSQDi4uKc3BIRERGprZMnTxIYGHjO4ybjQhFKqmWxWEhPT8ff3x+TydRg9ebn5xMXF8fhw4cJCAhosHqbqovpenWtLdfFdL261pbrYrlewzA4efIk0dHRuLice6aRepDqyMXFhdjYWIfVHxAQ0KL/gVZ2MV2vrrXlupiuV9facl0M13u+nqMKmqQtIiIiUokCkoiIiEglCkhNjKenJ9OnT8fT09PZTWkUF9P16lpbrovpenWtLdfFdr0XoknaIiIiIpWoB0lERESkEgUkERERkUoUkEREREQqUUASERERqUQByQleffVVEhIS8PLyIikpiXXr1p23/Mcff0ynTp3w8vKiW7dufPPNN43U0vqZOXMmffv2xd/fn/DwcG688UZ279593nPmzZuHyWSy27y8vBqpxXX35JNPVml3p06dzntOc/1eARISEqpcr8lkYsKECdWWb07f66pVqxg+fDjR0dGYTCY+++wzu+OGYTBt2jSioqLw9vYmOTmZPXv2XLDe2v7eN4bzXWtZWRlTpkyhW7du+Pr6Eh0dzdixY0lPTz9vnXX5XWgMF/pex48fX6XdQ4cOvWC9TfF7hQtfb3W/vyaTieeee+6cdTbV79ZRFJAa2fz585k8eTLTp09n48aNJCYmkpKSQnZ2drXl16xZw+jRo7n77rv55ZdfuPHGG7nxxhvZtm1bI7e89lauXMmECRP46aefWLJkCWVlZQwZMoTCwsLznhcQEEBGRoZtO3jwYCO1uH66du1q1+4ff/zxnGWb8/cKsH79ertrXbJkCQC33XbbOc9pLt9rYWEhiYmJvPrqq9Uef/bZZ3n55Zd54403WLt2Lb6+vqSkpFBcXHzOOmv7e99YznetRUVFbNy4kSeeeIKNGzeycOFCdu/ezQ033HDBemvzu9BYLvS9AgwdOtSu3R9++OF562yq3ytc+HrPvs6MjAzmzp2LyWTilltuOW+9TfG7dRhDGlW/fv2MCRMm2N6bzWYjOjramDlzZrXlR44caVx//fV2+5KSkow//OEPDm2nI2RnZxuAsXLlynOWefvtt43AwMDGa1QDmT59upGYmFjj8i3pezUMw3jooYeMdu3aGRaLpdrjzfV7BYxPP/3U9t5isRiRkZHGc889Z9uXm5treHp6Gh9++OE566nt770zVL7W6qxbt84AjIMHD56zTG1/F5yhumsdN26cMWLEiFrV0xy+V8Oo2Xc7YsQI45prrjlvmebw3TYk9SA1otLSUjZs2EBycrJtn4uLC8nJyaSmplZ7Tmpqql15gJSUlHOWb8ry8vIACAkJOW+5goIC4uPjiYuLY8SIEWzfvr0xmldve/bsITo6mrZt2zJmzBgOHTp0zrIt6XstLS3lvffe43/+53/O++Dm5vq9nm3//v1kZmbafXeBgYEkJSWd87ury+99U5WXl4fJZCIoKOi85Wrzu9CUrFixgvDwcDp27Mj999/PsWPHzlm2JX2vWVlZfP3119x9990XLNtcv9u6UEBqRDk5OZjNZiIiIuz2R0REkJmZWe05mZmZtSrfVFksFiZNmsSAAQO49NJLz1muY8eOzJ07l88//5z33nsPi8XC5ZdfzpEjRxqxtbWXlJTEvHnzWLRoEa+//jr79+/niiuu4OTJk9WWbynfK8Bnn31Gbm4u48ePP2eZ5vq9Vlbx/dTmu6vL731TVFxczJQpUxg9evR5H2Ra29+FpmLo0KG8++67LF26lGeeeYaVK1dy3XXXYTabqy3fUr5XgHfeeQd/f39uvvnm85Zrrt9tXbk5uwFycZgwYQLbtm274Hh1//796d+/v+395ZdfTufOnXnzzTd5+umnHd3MOrvuuutsr7t3705SUhLx8fEsWLCgRv+vrDn797//zXXXXUd0dPQ5yzTX71WsysrKGDlyJIZh8Prrr5+3bHP9XRg1apTtdbdu3ejevTvt2rVjxYoVDB482Iktc7y5c+cyZsyYC9440Vy/27pSD1IjCg0NxdXVlaysLLv9WVlZREZGVntOZGRkrco3RRMnTuSrr75i+fLlxMbG1upcd3d3evbsyd69ex3UOscICgqiQ4cO52x3S/heAQ4ePMj333/PPffcU6vzmuv3WvH91Oa7q8vvfVNSEY4OHjzIkiVLztt7VJ0L/S40VW3btiU0NPSc7W7u32uFH374gd27d9f6dxia73dbUwpIjcjDw4PevXuzdOlS2z6LxcLSpUvt/t/12fr3729XHmDJkiXnLN+UGIbBxIkT+fTTT1m2bBlt2rSpdR1ms5mtW7cSFRXlgBY6TkFBAfv27Ttnu5vz93q2t99+m/DwcK6//vpanddcv9c2bdoQGRlp993l5+ezdu3ac353dfm9byoqwtGePXv4/vvvadWqVa3ruNDvQlN15MgRjh07ds52N+fv9Wz//ve/6d27N4mJibU+t7l+tzXm7FniF5uPPvrI8PT0NObNm2fs2LHDuO+++4ygoCAjMzPTMAzDuPPOO41HH33UVn716tWGm5ub8fzzzxs7d+40pk+fbri7uxtbt2511iXU2P33328EBgYaK1asMDIyMmxbUVGRrUzl633qqaeM7777zti3b5+xYcMGY9SoUYaXl5exfft2Z1xCjf35z382VqxYYezfv99YvXq1kZycbISGhhrZ2dmGYbSs77WC2Ww2WrdubUyZMqXKseb8vZ48edL45ZdfjF9++cUAjBdffNH45ZdfbHduzZo1ywgKCjI+//xzY8uWLcaIESOMNm3aGKdOnbLVcc011xivvPKK7f2Ffu+d5XzXWlpaatxwww1GbGyssWnTJrvf4ZKSElsdla/1Qr8LznK+az158qTxyCOPGKmpqcb+/fuN77//3ujVq5dxySWXGMXFxbY6msv3ahgX/ndsGIaRl5dn+Pj4GK+//nq1dTSX79ZRFJCc4JVXXjFat25teHh4GP369TN++ukn27GrrrrKGDdunF35BQsWGB06dDA8PDyMrl27Gl9//XUjt7hugGq3t99+21am8vVOmjTJ9rOJiIgwhg0bZmzcuLHxG19Lt99+uxEVFWV4eHgYMTExxu23327s3bvXdrwlfa8VvvvuOwMwdu/eXeVYc/5ely9fXu2/24rrsVgsxhNPPGFEREQYnp6exuDBg6v8DOLj443p06fb7Tvf772znO9a9+/ff87f4eXLl9vqqHytF/pdcJbzXWtRUZExZMgQIywszHB3dzfi4+ONe++9t0rQaS7fq2Fc+N+xYRjGm2++aXh7exu5ubnV1tFcvltHMRmGYTi0i0pERESkmdEcJBEREZFKFJBEREREKlFAEhEREalEAUlERESkEgUkERERkUoUkEREREQqUUASERERqUQBSUSkAaxYsQKTyURubq6zmyIiDUABSURERKQSBSQRERGRShSQRKRFsFgszJw5kzZt2uDt7U1iYiKffPIJcGb46+uvv6Z79+54eXlx2WWXsW3bNrs6/vvf/9K1a1c8PT1JSEjghRdesDteUlLClClTiIuLw9PTk/bt2/Pvf//brsyGDRvo06cPPj4+XH755ezevduxFy4iDqGAJCItwsyZM3n33Xd544032L59Ow8//DB33HEHK1eutJX53//9X1544QXWr19PWFgYw4cPp6ysDLAGm5EjRzJq1Ci2bt3Kk08+yRNPPMG8efNs548dO5YPP/yQl19+mZ07d/Lmm2/i5+dn146//vWvvPDCC/z888+4ubnxP//zP41y/SLSsPSwWhFp9kpKSggJCeH777+nf//+tv333HMPRUVF3HfffVx99dV89NFH3H777QAcP36c2NhY5s2bx8iRIxkzZgxHjx5l8eLFtvP/8pe/8PXXX7N9+3Z+/fVXOnbsyJIlS0hOTq7ShhUrVnD11Vfz/fffM3jwYAC++eYbrr/+ek6dOoWXl5eDfwoi0pDUgyQizd7evXspKiri2muvxc/Pz7a9++677Nu3z1bu7PAUEhJCx44d2blzJwA7d+5kwIABdvUOGDCAPXv2YDab2bRpE66urlx11VXnbUv37t1tr6OiogDIzs6u9zWKSONyc3YDRETqq6CgAICvv/6amJgYu2Oenp52IamuvL29a1TO3d3d9tpkMgHW+VEi0ryoB0lEmr0uXbrg6enJoUOHaN++vd0WFxdnK/fTTz/ZXp84cYJff/2Vzp07A9C5c2dWr15tV+/q1avp0KEDrq6udOvWDYvFYjenSURaLvUgiUiz5+/vzyOPPMLDDz+MxWJh4MCB5OXlsXr1agICAoiPjwdgxowZtGrVioiICP76178SGhrKjTfeCMCf//xn+vbty9NPP83tt99Oamoqc+bM4bXXXgMgISGBcePG8T//8z+8/PLLJCYmcvDgQbKzsxk5cqSzLl1EHEQBSURahKeffpqwsDBmzpzJb7/9RlBQEL169eKxxx6zDXHNmjWLhx56iD179tCjRw++/PJLPDw8AOjVqxcLFixg2rRpPP3000RFRTFjxgzGjx9v+4zXX3+dxx57jD/96U8cO3aM1q1b89hjjznjckXEwXQXm4i0eBV3mJ04cYKgoCBnN0dEmgHNQRIRERGpRAFJREREpBINsYmIiIhUoh4kERERkUoUkEREREQqUUASERERqUQBSURERKQSBSQRERGRShSQRERERCpRQBIRERGpRAFJREREpBIFJBEREZFK/h+4yDov68eDewAAAABJRU5ErkJggg==\n" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from matplotlib import pyplot as plt\n", "plt.plot(history.history['loss'])\n", "plt.plot(history.history['val_loss'])\n", "plt.title('model loss')\n", "plt.ylabel('accuracy')\n", "plt.xlabel('epoch')\n", "plt.legend(['train', 'test'], loc='upper right')" ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 138, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "171/171 [==============================] - 0s 591us/step\n" ] } ], "source": [ "def process_input(directory):\n", " with open(directory+\"/in.tsv\", encoding=\"utf-8\") as data_file:\n", " df = pd.DataFrame([], columns=['text_data'])\n", " for line in data_file:\n", " df = df._append({'text_data': line}, ignore_index=True)\n", " df[\"text_data\"].apply(lambda row: row.translate(str.maketrans('', '', string.punctuation)))\n", " df[\"vectorized\"] = df[\"text_data\"].apply(get_document_vector)\n", " data_x = np.stack(df[\"vectorized\"].values)\n", " predictions = model.predict(data_x)\n", " return predictions\n", "\n", "predictions = process_input(\"dev-0\")[:,0]" ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 139, "outputs": [ { "data": { "text/plain": "array([9.9900788e-01, 9.9998349e-01, 2.1855670e-03, ..., 2.0675772e-04,\n 9.9930727e-01, 9.8721308e-01], dtype=float32)" }, "execution_count": 139, "metadata": {}, "output_type": "execute_result" } ], "source": [ "predictions" ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 142, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1. 1. 0. 1. 1. 1. 0. 0. 1. 0. 1. 0. 1. 1. 1. 0. 1. 1. 0. 0. 1. 1. 1. 1.\n", " 1. 1. 0. 1. 1. 1. 0. 1. 0. 0. 1. 1. 0. 0. 0. 1. 0. 0. 1. 1. 0. 1. 1. 0.\n", " 1. 1. 0. 0. 1. 1. 1. 0. 1. 1. 1. 1. 1. 1. 1. 1. 1. 0. 1. 1. 1. 1. 1. 0.\n", " 0. 1. 0. 1. 1. 0. 1. 1. 1. 1. 1. 1. 0. 1. 0. 1. 1. 1. 0. 0. 1. 1. 1. 0.\n", " 1. 0. 0. 1.]\n" ] } ], "source": [ "print(np.rint(predictions)[:100])" ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 144, "outputs": [], "source": [ "predictions_rounded = np.rint(predictions)" ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 148, "outputs": [], "source": [ "np.savetxt(\"dev-0/out.tsv\",predictions_rounded, fmt='%i')" ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 149, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "171/171 [==============================] - 0s 619us/step\n" ] } ], "source": [ "predictions = process_input(\"test-A\")[:,0]" ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 150, "outputs": [], "source": [ "predictions_rounded = np.rint(predictions)" ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 151, "outputs": [], "source": [ "np.savetxt(\"test-A/out.tsv\",predictions_rounded, fmt='%i')" ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 152, "outputs": [], "source": [ "model.save(\"model.keras\")" ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": null, "outputs": [], "source": [], "metadata": { "collapsed": false } } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.6" } }, "nbformat": 4, "nbformat_minor": 0 }