{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Introduction to neural networks\n", "\n", "After we took a look at the different algorithms in the introduction to machine learning chapter we want to take a look at some special kind of machine learning algorithms which are called *neural networks*.\n", "This documents sikps the math part of neural networks in order to demonstrate those quickly.\n", "Those artifical neural networks were invented in the middle of the 20th century but due to the massive amount of data and computation needed for them to work they were put *on the shelf* until the beginnig of 21st century when such companies as Google collected much data and the GPU development increased rapidly thanks to the gaming industry.\n", "\n", "The *hello world* of more *advanced* machine learning problems is the [MNIST dataset](https://en.wikipedia.org/wiki/MNIST_database), where e.g. a more basic but still interesting dataset is the [Californa Housing dataset](https://www.dcc.fc.up.pt/~ltorgo/Regression/cal_housing.html).\n", "The California Housing dataset can somehow tackled with linear regression, but problems like MNIST need much more context of each variable, which we call a [dependent variable](https://en.wikipedia.org/wiki/Dependent_and_independent_variables) in statistics.\n", "One could say that the more dependent a variable is, the harder the problem.\n", "\n", "As neural networks tend to be complex and demanding on the computational side there emerged some libraries in Python which allow to setup and train such networks, where the 2 biggest frameworks are [TensorFlow](https://www.tensorflow.org/) by *Google* and [PyTorch](https://pytorch.org/) by *Facebook*.\n", "For this seminar we will focus on TensorFlow.\n", "These libraries are somehow quite similiar to SuperCollider as they allow to describe a graph of matehmatical operations via a high-level language (Python/sclang) which is then executed in the more performant language C++.\n", "Although they are somehow similar they have a different purpose: SuperCollider tries to calculate an audio stream in real time (which means we need to be fast as we do not have much time for the calculation) where TensorFlow needs to transport Gigabytes of data within secounds to multiple special devices like GPU or [TPU](https://en.wikipedia.org/wiki/Tensor_Processing_Unit).\n", "Also there are some algorithms implemented in TensorFlow which are missing in scsynth, such as the much important [autodiff algorithm](https://en.wikipedia.org/wiki/Automatic_differentiation) which makes neural networks feasible.\n", "\n", "Although TensorFlow is a alread a Python library for the complicated C++ library there is a libary on top of TensorFlow which is called [Keras](https://keras.io/) which became the default library to interact with TensorFlow as writing native TensorFlow code can be exhausting.\n", "\n", "Keep in mind that we are using *TensorFlow 2* which is not compatible with *TensorFlow (1)* if you look up some examples online.\n", "\n", "Like always we start with our imports, but now extended with *tensorflow* and *keras* (which comes bundled with tensorflow).\n", "If the import fails make sure to check the update procedure of the course material as tensorflow was originally not a dependency for this course and therefore needs to be installed manually in such a case.\n", "Check the docs on how to do this." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import tensorflow as tf\n", "from tensorflow.keras import backend as K\n", "\n", "np.random.seed(42) # make the results reproducible" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Loading the MNIST dataset\n", "\n", "Now its time to once again load the *MNIST* dataset which is mostly used to train a classifier to identify handwritten digits.\n", "We can use *keras* for this.\n", "Note that we already get a dataset which is split in `x` (the *input*, in our case the $28 \\times 28$ images) and `y` (the *target*, in our case the digit we want to predict) as well as *train* and *test* set (for serious working we would need a validation dataset as well).\n", "We must hide the test set from the neural network during its training phase so we can evaluate how well the neural networks performs on example it has not seen before.\n", "This is extremly important as the goal is to train a network which [generalizes](https://en.wikipedia.org/wiki/Generalization) and not just work on input it already knows (which would be useless) which may sound trivial as a human but is suprisingly difficult to achieve this." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As always it is good to get familiar with the data in order to know what kind of structure the data is in and if it matches our expectations or if we made some error during loading and parsing of the data.\n", "On a real life example one would perform extensive statistical analysis on the dataset in order to ensure it lies within the expected order of deviations." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Shape of x_train:\t(60000, 28, 28)\n", "Shape of y_train:\t(60000,)\n", "Shape of x_test:\t(10000, 28, 28)\n", "Shape of y_test:\t(10000,)\n" ] } ], "source": [ "for name, array in zip([\"x_train\", \"y_train\", \"x_test\", \"y_test\"], [x_train, y_train, x_test, y_test]):\n", "\tprint(f\"Shape of {name}:\\t{array.shape}\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Label of example #56422 is 4\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "random_index = np.random.randint(x_train.shape[0])\n", "\n", "plt.imshow(x_train[random_index], cmap='gray')\n", "print(f\"Label of example #{random_index} is {y_train[random_index]}\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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AACo5AAAAD9RyQEAAF6ikgMAALxEJQcAAHgp4ZojxhimXsUgCAKTjfflfsYjG/eTexkPnk2/8Gz6I+pe0pIDAAC8RCUHAAB4iUoOAADwEpUcAADgJSo5AADAS+zoDKBIlSlTxuYpU6Y4595//32bu3fvXlRFAuApWnIAAICXqOQAAAAv0V0FoEj16tXL5gYNGjjnJk6cWMSlAeAzWnIAAICXqOQAAAAvedtd1bt3b5t187iIyH//+1+bp0+fbnP//v2zXzCgGKpWrZrNHTt2jLEkAIoTWnIAAICXqOQAAAAvUckBAABeMkEQRJ80JvpkDjr44INtfvfdd23ef//9k3r9Sy+95By//fbbNr/yyis2b9iwIdUiJiUIApON9823++mLbNzPfLuX5557rs2vvvqqzQsXLnSua968uc3Lly/PfsEKiWfTLzyb/oi6l7TkAAAAL1HJAQAAXvKqu+qzzz6zObySarqWLFli84UXXuic+/zzzzP6WTSJF07Xrl1tfuSRR2zevn27c90pp5xi8+TJk7NfsJ2KY5N406ZNnWO98eaOHTtsHjZsmHNdhw4dslqudBWnZ7NUqd9XGKlevbpzrm3btjbrJToqVarkXKfvdSLjx4+3+eKLL7Z58+bNznUVK1a0uV+/fs659u3b26yXELnvvvuc6/T3QnF8Nn1FdxUAAChWqOQAAAAv5d2Kx3qmlG7WFBE5/PDDk3qPX375xeZZs2bZfOyxx0a+Rs/cuvPOO51z11xzjc1r165NqgwoHP33f/XVVzvnunXrZrNuHv/kk0+yXzDs0lFHHeUc6/uyYMECm1llPLccffTRNt999902t2zZMqnXh7unEg2H0M4880yb33rrLZt197OI212lu6fCn6W70MJdbb6uuF2+fPnI41WrVhX6/fTfdfj9atasaXPr1q0j3+Pkk0+2Wf9shd16663Osb7vv/7665+WNRFacgAAgJeo5AAAAC9RyQEAAF7Kuynk9957r809e/aMvE5PPVy5cqVz7plnnrH5oYcesvmcc85xrnvsscdsrlGjRuRn6deNGzcu8rpkFadpqslKdnmAHj162Dx8+HDnXIkSv9fpV69enbGy/ZniOE112rRpznG9evVsPv300yOvy3W+PZvNmjVzjl944QWb9957b5sT/Z7Qq1aHl9PQ34eLFi2KfI8pU6Yk9VmaMe6t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AICXqOQAAAAvUckBAABeopIDAAC8RCUHAAB4iUoOAADwUsIp5AAAwF8lSvze1nHVVVfZ3K5dO+e6oUOH2vz8889nv2AZQksOAADwEpUcAADgJbqrkBcqVqxo86hRo5xzzZo1s/niiy+2+eWXX85+wQAgj5QsWdI5vuOOO2y+8847I1+3YcMGm+muAgAAiBmVHAAA4CW6q5AX7r//fptPPfVU51wQ/L4fXvv27W2muwrIjsqVK9t8+OGH29yzZ0/nuubNmyf1fpMnT7a5R48eNn/88cepFhER9N+vSHQX1ezZs53jp59+OmtlyiZacgAAgJeo5AAAAC9RyQEAAF5iTA5yVocOHWz+xz/+kdRrXn311WwVByi2jj/+eOe4f//+Nh977LE26/FxuzqO0qhRI5vHjBlj82GHHeZct27duqTeD646derYfM0110Re9+OPP9rcqVMn59y0adMyX7AiQEsOAADwEpUcAADgJZOoOdEYk1xbo1K/fn3n+Nxzz7W5bt26NteqVcu57qCDDrK5WrVqicpk86xZs5xzc+fOtXnRokU2f/rpp85148aNi3z/XBAEgfnzqwovlftZlPTPgIjIpEmTbP7LX/4S+bp33nnH5jPOOCPzBUtTNu5nKveya9euzrHucshnuivln//8p3NOT0HOxP/f4vRsvvTSSzafffbZzrnddtvNZv2dvHbtWue6wYMH27xlyxabjznmGOe6M88802b9O6l69erOdatXr06q7MnKlWczG/Tv0alTp9p84IEHOtd99dVXNjdt2tTmb7/9Nouly7yoe0lLDgAA8BKVHAAA4KWMzK467bTTbB49erRzrnz58pn4COv777+3+YgjjnDOhY9/E+6S27hxo826SbZv377OdUuWLEm5nMVNmTJlnOMKFSrY/MMPPyT1HjfffLNzHG6q/s38+fOd4yuvvDKp9y/ufOmeEnG7qC666KJdZhGRNm3a2Lzvvvs658I/b3DprgvdPRW2fPlymxs2bOici+peCs/c0d1VSE3p0qWd4+uuu85m3UW1detW57rHHnvM5nzrokoGLTkAAMBLVHIAAICXqOQAAAAvZWRMzmuvvWZzuXLlnHObNm2yWa9GG16Z9rPPPkvqs37++efIz0rWX//6V5v1dPLw7tYtWrSwefHixSl9VnFRqpT7o5TsmJyKFSvanGj6tx5X9fzzzzvnVqxYkXQ5kZ/CK+6++OKLNu+///4279ixw7muRInf/x2X7Oq7KKD/jrt06eKce+GFF2x+5ZVXbE52ivff/va3NEuHsPCY1F69eu3yuvvuu885fvzxx7NWplxASw4AAPASlRwAAOCljHRXzZ492+Zws3LJkiVt1k2Zq1atcq7TG69t3rw5qc8Nr66ZrPbt2++yfOEVd3W3yAknnJDSZxUXultyV8dR7r77bptr1qwZed0333xj8/DhwwtVNuQn/V3y0UcfOed0t5RecVd3T4m43eI9evTIdBG9plePDq8knYo777zT5o4dOzrn9D2cOXOmzXq5D/yRnjbes2fPyOv0atN69ePigJYcAADgJSo5AADAS1RyAACAlzIyJkcvyR3e1qFRo0Y2d+vWbZdZRGTBggU2v/HGG845vdT09OnTbZ43b55zXbLbB+gp5NrSpUudY72L66GHHrrLsqLw9NgnPT4qkYEDB9rMlHF/6XE4egpzeGq4PtbjcPr16+dcN2rUqEwXEYVw8cUX29y5c2ebw9P5169fb/Ott95qs14yBH+kp42fe+65zjk9Duemm26yeeLEidkvWA6hJQcAAHiJSg4AAPCSSbQKqDEm7SVCdXfV+eefb3P9+vWd65YtW2bzJZdc4pyL2gE3PL1w2LBhNr/88ss277nnns51Tz/9tM3btm2z+aqrrnKuW7Nmjc0//vijzXo6czYEQWD+/KrCy8T9zAQ9Nf/SSy+NvE7/ndeuXdvmVJcOiEs27meu3MtU6BWKw0tOjBw50uaoLikRkcmTJ9usu6SyvdO6789mKnRXvl4JWcRd2VhPEw93Q5111lk2f/jhh5kuYqR8ezYrVarkHM+ZM8fmGjVqOOcWLVpks75HRal69eo2h4eT/PLLLxn9rKh7SUsOAADwEpUcAADgpax3V6Ui3Ox2zDHH2Ny6dWubq1at6lzXvHnzQn+WXnH33nvvLfTrs8H3JvHvvvvOZj2DLezaa6+1eciQIUm99wEHHGBzhw4dnHOHH364ze+++67NTz75ZFLvnap8axLPtilTpth87LHHOud0t5Turpo2bZpz3d///nebly9fnukiRvL92YxSr1495/iUU06x+bHHHrM50e+Tt99+2+bbbrvNOTdr1qw0S5iafHs29957b+c40Yao2eyu2meffWwODy/Rw1L+8pe/2KyHH4i4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XvKbb76x+aijjrJ53bp1Kb1fsqLuJS05AADAS1RyAACAl3JmCvnSpUttfvvtt51zq1atsrlr1642//DDD1ktk56Sd+CBB9oc17RLHyVaeTjZLqVkp4P7NK20KOkupGXLljnnoqa0hv988ODBNnfq1CmDpcNv2rRpY7Puum/RokXka/TyACIib7zxRuYLtlP16tVt/te//pXSe+juqlS6p/LRJ598YvPWrVudc2XKlCnq4vypQYMG2ZztLqpk0JIDAAC8RCUHAAB4KWe6q1555ZVd5mw76KCDbA6vGInkhbuMdNdQeLNOfY4upNxXt25dm8Ozq/QMjESzMQ477LDMFwwOvUJtsrPU9EwYEZE1a9akVYaSJUs6x3pW6q233mpz48aNU3r/Z555JrWC5bE333zT5n//+9/OuRtuuCHt9//0009tfuutt2yuU6eOc53uDk1kzJgxaZcpk2jJAQAAXqKSAwAAvEQlBwAAeClnxuQUpVq1atmsdyuvVKmSc9348eNtLspxQj7IhXE3jPfJjAoVKtisVz8WEXnsscds1uNujj76aOc6PQbj+eeft7ldu3YZK2dxp+/NBRdckNRrwlO5TzrpJJtfeumlQpfhzjvvdI6PO+64Qr/H6tWrbR4xYoRz7ttvvy30+/kkvOLxtGnTbE40zkmPu5k+fbpzbsmSJTbrKervvfdeSmXU75cLaMkBAABeopIDAAC85G13lZ7KGJ6+qptUW7dubXN42qXurtqyZUumi4gs++CDD+Iughd098FNN93knNPPjD53xhlnONeNGzfO5kaNGtlcpUoV57p0pzAXZ9u3b7d58eLFNh9yyCGRrwl30V9++eW7zMlKdZNIfd8fffRRmx944IFCl8FnmzZtco5Hjhy5y5wJ4XsZtbp5uhtjZxstOQAAwEtUcgAAgJe87a564YUXbE400+DHH3+0+fzzz3fO6c3ggOKiSZMmzvE111xjc7KzoWbMmOEcz5w502Y98+qyyy5zrtNdFSicn3/+2eYJEybY3KVLlziKk9DEiROdY71R74cffljUxcEuhLsao7oeX3zxxaIoTspoyQEAAF6ikgMAALxEJQcAAHgpJ8fkhHc/1SsU6ynfNWvWjHyP008/3eYvvvjCOTdw4ECb9YqRX375ZaHLivykd0ZnZWTXeeed5xzPnTu30O+hp52LiAwZMsTmo446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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "n_rows=5\n", "n_cols=5\n", "fig, axs = plt.subplots(n_rows, n_cols, figsize=(10, 10))\n", "for i, idx in enumerate(np.random.randint(0, x_train.shape[0], n_rows*n_cols)):\n", " ax = axs[i%n_rows][i//n_rows]\n", " ax.imshow(x_train[idx], cmap='gray')\n", " ax.set_title(y_train[idx])\n", " ax.axis('off')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "pd.Series(y_train).value_counts().plot.bar(title=\"Distribution of digits in train set\", figsize=(10, 5));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Creating our first neural network\n", "\n", "After we quickly analyzed the files we want to use for traning it is now time to write our first neural network.\n", "We will decide for a **fully connected neural network** (also called *densely connected NN*) as this is the most basic neural network.\n", "In a *FCNN* we create *layers* of *neurons* where each neuron of the layer is connected with each neuron of the following layer.\n", "\n", "The graphic shows for example a neural network with one (also called *hidden* layer).\n", "\n", "![Neural network with one layer](https://upload.wikimedia.org/wikipedia/commons/thumb/4/46/Colored_neural_network.svg/399px-Colored_neural_network.svg.png)\n", "\n", "Source: [https://commons.wikimedia.org/wiki/File:Colored_neural_network.svg](https://commons.wikimedia.org/wiki/File:Colored_neural_network.svg)\n", "\n", "We start on the left side with a flat input vector and where each of the vectors scalar is connected with each scalar/neuron of the next layer.\n", "This connection often includes an *activation function* which allows the (de-)activation of neurons.\n", "This hidden layer is then connected with the output layer but could also be connected with another layer which allows to represent more complicated neuronal connections.\n", "\n", "In the case of MNIST dataset our input is an image with $28 \\times 28$ pixels which each have a value between $0$ (black) and $255$ (white).\n", "As a vector needs to be 1-dimensional we simply *flatten* this image, so we obtain a $28*28=784$ dimensional vector.\n", "The output of our neural network system is not the predicted number directly but the probability for each digit according to the neural network which results in a 10 dimensional output vector as we have 10 digits (from 0 to 9).\n", "Wo do this because the neural network can learn much better this way as we can describe mathematically more easily what we are searching for.\n", "\n", "Our neural network is therefore much like a [probibilty density function](https://en.wikipedia.org/wiki/Probability_density_function) which shall output the proper digit according to its input.\n", "During training we will tell the neural network that the best solution for an handwritten 2 as input should be the vector `[0, 0, 1, 0, 0, 0, 0, 0, 0, 0]`.\n", "This notation is also called [*one-hot-encoding*](https://en.wikipedia.org/wiki/One-hot) which is often used for categorical problems.\n", "\n", "Engouh talk, lets use kears to write a NN with one layer with 40 neurons." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "model = tf.keras.models.Sequential([\n", " tf.keras.layers.Flatten(input_shape=(28, 28)), # our 28x28 image gets flattened\n", " tf.keras.layers.Dense(40), # the (hidden) layer\n", " tf.keras.layers.Dense(10), # the 10 dimensional output vector\n", "])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Seems not so hard and keras also allows us to simply inspect the model as well." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model: \"sequential\"\n", "_________________________________________________________________\n", " Layer (type) Output Shape Param # \n", "=================================================================\n", " flatten (Flatten) (None, 784) 0 \n", " \n", " dense (Dense) (None, 40) 31400 \n", " \n", " dense_1 (Dense) (None, 10) 410 \n", " \n", "=================================================================\n", "Total params: 31,810\n", "Trainable params: 31,810\n", "Non-trainable params: 0\n", "_________________________________________________________________\n" ] } ], "source": [ "model.summary()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Just a quick remark on the number of parameters.\n", "Our input layer has no trainable parameters as we shall not modify the input.\n", "\n", "As every neuron of the input layer is connected with every neuron of our hidden layers the number of parameters grow rapidly:\n", "\n", "$$\n", "784 * 40 = 31360\n", "$$\n", "\n", "The missing $40$ parameters are due to the *bias* neuron which get added for each layer for mathematical reasions.\n", "\n", "The next layer has\n", "\n", "$$\n", "(40+1)*10 = 410\n", "$$\n", "\n", "parameters - in this case we already included the additional bias neuron." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Training a neural network\n", "\n", "For now we only iniated some matrices and vectors and connected them in a somehow senseful manner, yet we have now discussed *how* the computer really *learns* the neural network.\n", "\n", "For this we will need to define a goal when a neural networks performs good or not via a so called [loss-function](https://en.wikipedia.org/wiki/Loss_function) (also called cost-function) which will tell us how good the neural network is performing right now.\n", "We can then calculate a gradient for the cost function with the parameter space of our neural networks as input which will tell us in which direction to modify the parameters of our neural network in order to get better results (this step is is actually not trivial but tensorflow helps us here).\n", "\n", "In our case we use some knowledge from information theory to construct a good loss function and use an off-the-shelve optimizer from the keras library which drives the calculation of the derivative and applies the change in the parameterspace." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "model.compile(\n", " optimizer=tf.keras.optimizers.Adam(),\n", " loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),\n", " metrics='accuracy',\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "After all is said and done we can finally train our first neural network." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/5\n", "1875/1875 [==============================] - 2s 796us/step - loss: 10.5197 - accuracy: 0.8514\n", "Epoch 2/5\n", "1875/1875 [==============================] - 1s 796us/step - loss: 3.4047 - accuracy: 0.8784\n", "Epoch 3/5\n", "1875/1875 [==============================] - 1s 791us/step - loss: 1.0116 - accuracy: 0.8836\n", "Epoch 4/5\n", "1875/1875 [==============================] - 2s 828us/step - loss: 0.5160 - accuracy: 0.8802\n", "Epoch 5/5\n", "1875/1875 [==============================] - 1s 785us/step - loss: 0.5351 - accuracy: 0.8725\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.fit(x=x_train, y=y_train, epochs=5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We remember that we need to check the perfomance of our neural network on examples that it has not seen during training where the test set comes into play." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "313/313 [==============================] - 0s 598us/step - loss: 0.6544 - accuracy: 0.8518\n" ] }, { "data": { "text/plain": [ "[0.6544067859649658, 0.8518000245094299]" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.evaluate(x=x_test, y=y_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We get an accuracy of about 87% which is already quite good but we can do better by applying some data pre-processing, making it easier for the algorithm to find good parameters in our neural network." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Tuning the neural network\n", "\n", "Currently our input parameters (the brightness of each pixel) is between 0 and 255.\n", "Transforming this to be between 0 and 1 our algorithm can already learn faster as it is used to these kind of values." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "x_train_scaled = x_train/255.0\n", "x_test_scaled = x_test/255.0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will also add a so called [*dropout layer*](https://keras.io/api/layers/regularization_layers/dropout/) and add another hidden layer and just apply all the same steps from above on our new model." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "model_scaled = tf.keras.models.Sequential([\n", " tf.keras.layers.Flatten(input_shape=(28, 28)),\n", " tf.keras.layers.Dense(48, activation='relu'),\n", " tf.keras.layers.Dropout(0.3),\n", " tf.keras.layers.Dense(15),\n", " tf.keras.layers.Dropout(0.3),\n", " tf.keras.layers.Dense(10),\n", "])\n", "\n", "model_scaled.compile(\n", " optimizer=tf.keras.optimizers.Adam(),\n", " loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),\n", " metrics='accuracy'\n", ")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model: \"sequential_1\"\n", "_________________________________________________________________\n", " Layer (type) Output Shape Param # \n", "=================================================================\n", " flatten_1 (Flatten) (None, 784) 0 \n", " \n", " dense_2 (Dense) (None, 48) 37680 \n", " \n", " dropout (Dropout) (None, 48) 0 \n", " \n", " dense_3 (Dense) (None, 15) 735 \n", " \n", " dropout_1 (Dropout) (None, 15) 0 \n", " \n", " dense_4 (Dense) (None, 10) 160 \n", " \n", "=================================================================\n", "Total params: 38,575\n", "Trainable params: 38,575\n", "Non-trainable params: 0\n", "_________________________________________________________________\n" ] } ], "source": [ "model_scaled.summary()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/5\n", "1875/1875 [==============================] - 2s 899us/step - loss: 0.5824 - accuracy: 0.8214\n", "Epoch 2/5\n", "1875/1875 [==============================] - 2s 932us/step - loss: 0.3441 - accuracy: 0.9002\n", "Epoch 3/5\n", "1875/1875 [==============================] - 2s 866us/step - loss: 0.2957 - accuracy: 0.9127\n", "Epoch 4/5\n", "1875/1875 [==============================] - 2s 875us/step - loss: 0.2712 - accuracy: 0.9210\n", "Epoch 5/5\n", "1875/1875 [==============================] - 2s 874us/step - loss: 0.2526 - accuracy: 0.9272\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model_scaled.fit(x_train_scaled, y_train, epochs=5)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "313/313 [==============================] - 0s 630us/step - loss: 0.1380 - accuracy: 0.9597\n" ] }, { "data": { "text/plain": [ "[0.13801522552967072, 0.9596999883651733]" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model_scaled.evaluate(x_test_scaled, y_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Although we only added a few parameters and modified the training behaviour our model already performs better already.\n", "Now its time to take a look on the examples where our neural networks fail in order to get some new insights of the mechanics." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Analysing the results\n", "\n", "We start by taking a look how we can ask the neural network for a prediction." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Label for image is 7\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "random_test_image_index = 0\n", "\n", "plt.imshow(x_test_scaled[random_test_image_index], cmap='gray')\n", "print(f\"Label for image is {y_test[random_test_image_index]}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We simply give the neural network the whole list of test images we have and ask for its probability of each class." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ -2.8263762 , 0.03036575, 6.4564805 , 8.375091 ,\n", " -2.5378463 , 4.2385798 , -11.81926 , 20.765867 ,\n", " -3.2129931 , 3.379484 ], dtype=float32)" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "preds = model_scaled.predict(x_test_scaled)\n", "preds[random_test_image_index]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "pd.Series(preds[random_test_image_index]).plot.bar(\n", "\ttitle=\"Predicted probability for each digit class\",\n", "\tgrid=True,\n", ");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The neural network predicts our example correctly as a $7$.\n", "We can use the argmax function in numpy to get the index with the highest value in a vector.\n", "And as we already have all predictions available we can perform this on every prediction also easily." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "preds_one_hot = np.argmax(preds, axis=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This allows us to filter out the examples where the prediction did not work out as hoped." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "false_indices = np.argwhere(preds_one_hot != y_test)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "pd.Series(y_test[false_indices].flatten()).value_counts().plot.bar(\n", "\ttitle=\"Number of wrong predictions per class\",\n", "\tgrid=True,\n", ");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We see that our neural network seems to detect a $0$ quite good (although it is also easy as it just needs to check if there are any pixels in the middle of the picture) but not great on a $8$.\n", "But this analysis does not tell us for what the $8$ got mistakenly taken for, but a *confusion matrix* can help us out here.\n", "Thankfully such things are build into TensorFlow.\n", "\n", "From the [docs](https://www.tensorflow.org/api_docs/python/tf/math/confusion_matrix) we can obtain\n", "\n", "> The matrix columns represent the prediction labels and the rows represent the real labels.\n", "\n", "If our neural network would work perfect we would obtain a [diagonal matrix](https://en.wikipedia.org/wiki/Diagonal_matrix)." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "confusion_matrix = tf.math.confusion_matrix(y_test, preds_one_hot)\n", "confusion_matrix" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Lets take a closer look at some examples where the neural network predicted wrong." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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GrY1j98xSMNjd0raOdQnUERERERERGGS7DlQREREREREaYsnUERERERERAHxBIqIiIiIiCigwtGSIsIJUiGilJLct4oN2zpcEtXWbOdwYZ/OHOzTmYF9OnOwT2eGSO3MK1BEREREREQB8QSKiIiIiIgoIJ5AERERERERBcQTKCIiIiIiooB4AkVERERERBQQT6CIiIiIiIgCirqMeZide+65Ect9+vRJal2IiIiIiCgz8AoUERERERFRQDyBIiIiIiIiCognUERERERERAGJUipyUiRyMsXcOVDTp0+PuG3fvn2t8owZM3KMw04pJYl67jC3dSZKVFuzncOFfTpzsE9nBvbpzME+nRkitTOvQBEREREREQXEEygiIiIiIqKAMmIIXzTuED5zuF/YhvdxaEDm4NCAzMA+nTnYpzNDpvbpww47zCrfddddOm7WrFnUx7733ns6njVrlpX76KOPdLxz5878VDHu2KczA4fwERERERER5RNPoIiIiIiIiALiCRQREREREVFAaTsHyhXt/xErdw5Uo0aN4r6PvMjUsdWZiGOrMwP7dOZgn84MBblPH3vssVa5W7duOr7pppusXMmSJXWcl89nIvbLN3HiRB3feOONVm7btm2BnzcR2KdjV79+fav89NNP63js2LFW7rnnntPxOeecY+WefPJJq3zSSSfFq4oa50ARERERERHlE0+giIiIiIiIAiqc6grEizm8rnfv3lbOXfI8qGhLpad6OB8FU6xYMR3feuutVu7iiy/WcZ8+fazczJkzE1ovIqKCzh3y9fzzz+uY76Hp4YYbbtDxo48+auXKli0b6Dk+//zzqPnTTz89Yq5Vq1Y6XrNmjZW74447Au2fwqFNmzY6fuaZZ6zcIYccouNffvnFyo0bN07H48ePt3KbN2+OZxXzhFegiIiIiIiIAuIJFBERERERUUA8gSIiIiIiIgqowMyBMpccd5cfd5nzXRo2bGjlos2XMnPmfCiA47nDwpzzBACDBw/WcadOnazcunXrcoxpfwceeKBVNpesbdCgQbKrs59du3bp+O6777Zy//zzj4537NiRtDoRZTr3/dRcgnjEiBFWrnbt2lZ50aJFEXOmqVOnWmVzWeOdO3cGrit53OP5yJEjdRxtOXK3PQcMGKDjjRs3Wjl3qXJzLtWvv/4acR8dOnSwylWrVtWxOVeKwsFd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HeZl9lNz+DDA9+JEcYc7jxkzRsdu25l9EQD+/PNPHV9wwQVWrkePHhH3OWTIkDzXMxl4BYqIiIiIiCggnkAREREREREFxBMoIiIiIiKigBIyByq3Jb6j6du3b6Dtoi1NniiJWI6dPKNHj7bKhQr9d27/77//Wrl69erlGAP7//20aNFCx+74+2hjrTl+On7M+WzffvttTM/hLlHrzotLBHfO08UXX5zwfWaqbt266bhMmTKBH/fwww9bZXPeXH6Yc2wef/xxK7d+/fq47COdme111llnWbmgffP333+3yuPHj4+4bfXq1a2yuXTyddddZ+UWLlyo48GDBweqSyZzl6E3b+EBALfeequOo80Djdbu7nO2bt3aKn/zzTc6/vjjj62cOV+qbNmyEfcxZ84cq1xQbiGSCpUrV7bK5jzHjh07WrmSJUvquEOHDlZu3rx5EffRrl07q1y6dGkdu21n3tYmTHgFioiIiIiIKCCeQBEREREREQXEEygiIiIiIqKAkjIHKhp3zkqfPn0CPS7adm4uFfOlKG9atmxplV966SUdu+NozXtBHHbYYVauatWqVvmjjz7S8cCBA63cQw89FEtVKY+uuuoqHbtzmYIy58QB+8+LSwR3nxQ/tWvXtso33XSTjvPyN+LOjYn2d7Fz504dr1y50spNmjTJKj/44IOB65CJDj74YB27c1/27dunY3NuCwC88cYbOp4yZYqVW7ZsWeD9v/DCCzp2512Y7yWcA5W7rl27WmX3/jzmPOJ169bFtA/zvorA/vfuMvvbvffeG7F+5jwZl3l/Nsq7M888U8fufLJo89vMY+n3339v5fr162eV27Rpo+MaNWpEfE53Lqs5R958DgC49NJLrbL5mS/R+AmBiIiIiIgoIJ5AERERERERBSTRLs2JSExrBbtLEEYb0teoUSOrPGPGjFh2mSfJWALZ/H/F6/+klIpt/FMAsbZ1qlWqVMkqP//881bZXHr6888/t3JNmjTRsTm8JwwS1dapaOeiRYvq+Nhjj7Vy5hLR7hK15lBNd+jIihUrYqpLrVq1rHK0ZXFdN998s47dv7NYFbQ+bQ7Nu/32261ctWrVdHzMMcdYObcfB7Vt2zarbC53aw4DBuxls7/77ruY9pcfBalP//jjjzquWbOmlfviiy90fMYZZyRk/8WKFdPxp59+auVOPvlkHZvHeCA5S1unQ5/u0aOHjq+44gord8cdd1jlmTNnxmOXgZm3EAD2P45EkpWVZZXdY0MiFKQ+/eSTT+rYfc3Nz8zuLWfMKTMVK1a0cmPHjrXK7hSLoMxh3e6UjtNPP90qm0OI4yVSO/MKFBERERERUUA8gSIiIiIiIgqIJ1BEREREREQBpXwZc5c51tJd4tzUsGHDhOw/XqLVIRnzvDKFOzfGnKcCAL/88ouO3bGy5vyXsM2BKkj27Nmj4x9++MHKNW3aVMfuGHYzt3z5civnjoOOxpyH8frrrwd+HO2vWbNmVtldptZcVrxkyZIRn8ddqtw87rtzVF977TWrbN6OYP369VZu8+bNEfdJ8WMuD/7nn39auXfffTfh+9+9e7eO3duUTJ06Vcd5meNYkLnLiJtLg7/11ltWLtlzngD7diTuMSbonPX33nvPKrdq1coqb9y4McbaFUzu69yxY8eI2y5dulTHS5YssXLmrQlOOukkKxftOG9+LgCAadOm6XjBggVWznwP2LVrl5VLxJynoHgFioiIiIiIKCCeQBEREREREQWU8mXMM5F7WTOodFgeNdXcJXUXLVqkY3eYnrmkdqx3WE+UgrQ8ajIUL15cx+4SrPfcc4+Oy5QpE/g53aFJ5pCQL7/8Mo81zFm69emJEydaZfcu8EFFG9rx2GOPWbmePXvGtI+wYZ9OjrVr1+p4yJAhVu7RRx9N+P7D2Kfd28WYQ5nPPPNMK+cOl06EI444wiqbw+/MWyEA9rFhzZo1Vs5cMv/yyy+3cu5QxOeeey7H/QGxD+FPpz5tDq8GgPnz51vl0qVLm/u3crHe+sd9nr179+r4tttus3LDhw+PaR/JwGXMiYiIiIiI8oknUERERERERAHxBIqIiIiIiCighCxj7o637dOnj47dJUfTlbsUebSlP7lsefI89NBDVtkcu+uOew7bvKdM1KRJEx0XLhz8cFStWjWrfNddd+m4cuXK+a8Y9l/WNV7zntJZixYtrHKsY+Pd5cbbtm2rYx4vKTfmsaJz585W7qCDDtLxqlWrklanMHPfF5ctW6bjZMx5at68uVU2b0UAALVq1Yr42BEjRuj4gQcesHLm0uRTpkyxchdffLFVHjdunI7d9353TlZBNHLkSKtsznnKC/e2EuatSQYNGhT1sd27d9fxCy+8ENP+w4RXoIiIiIiIiALiCRQREREREVFACVnGPC/CtuS5OXzEHZZn5lIxzCSMy6OmmrkUOQAsXrzYKm/YsEHH7jKns2bNSlzF8imdlkfNjTncplu3blbOXLI62hC+eC2r+s8//1jl3377TcfmMEBg/z7uDjuLh3Tr0+aQGQDIysqyyuYd66dOnWrlJk+erOMw971EKUh9OtXM48bdd99t5b777jsdX3TRRVbu999/T2zFEM4+/e+//1plcwnrs846y8rt3r078POWLFlSx+XKlbNyb7/9to5PPPHEqM+zfft2HbvtaQ7hC5t06tPu+9k555xjlefNm6dj81gNAP/73/907L5Pm4+rUaOGlTOXjgeAO++8U8d5+TtLNS5jTkRERERElE88gSIiIiIiIgqIJ1BEREREREQBpXwOVF6Y86PiNVfKXGI97MI4tjoVrrrqKh0/8sgjVu7www+3yjfddJOOX3755YTWK57SaWx1bo488kgd//zzzzE9R37mQJnz4p599lkrN3z48JjqEy/p1qerV69uld0l4z/77DMd7927N967T2sFqU8ng7nMsrt89T333KPjbdu2Wbn27dvr2F3aOhnC2Kf37dtnlc3j5/PPP2/lRo8eHfF5mjVrZpXPO+88HZ966qlWzjxmu8friRMnWuUBAwbo2JzDFnbp1KdLlCgRtWz2o2jH7gkTJljlVq1a6fiDDz6wcuacJ8CeI5tOOAeKiIiIiIgon3gCRUREREREFBBPoIiIiIiIiAJKqzlQmS6MY6sTxbzXgDv+/cEHH4z4uBdeeMEqd+3aNb4VS5J0Gludm0KF/vuexpzXAACPP/64josXLx7xOXKbA/X333/r2JwfAdj3ftq5c2eAGidPJvXpTFeQ+nQ81KpVyyqff/75VvnWW2/VcbVq1ayceU+be++918qZ96VJhTD2aXeut/uemss+dZyXuafmXJn33nvPyk2aNMkqu/PY0kWm9Gnzc9TgwYOt3KpVq3R88cUXW7nly5cntmJJwjlQRERERERE+cQTKCIiIiIiooA4hC+NhHFoQKKYQw7c4QYbN27U8euvv27lbrvttoTWK1kyZWhApsukPp3p0rlPu8Pt1qxZo+OtW7dauSJFiui4aNGiVs4czvvxxx9buZNPPtkq//HHHzru27evlRsxYoSO3SW6Uy2MfdocEg8A9erV07E7JN5dqnzWrFk6nj9/vpUzh2i5w/TMv5GC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mP8ofSLyBIAVSqlhqa5LOmE7Zw4evzMD2zlz8PidGdinA+43DfoAERERERFRKIR5EQkiIiIiIqJQ4QkUERERERFRQDyBIiIiIiIiCijSErQAABHhBKkQUUpFuo9SvrGtwyVRbc12Dhf26czBPp0Z2KczB/t0ZojUzrwCRUREREREFBBPoIiIiIiIiALiCRQREREREVFAPIEiIiIiIiIKiCdQREREREREAfEEioiIiIiIKCCeQBEREREREQXEEygiIiIiIqKAeAJFREREREQUEE+giIiIiIiIAuIJFBERERERUUA8gSIiIiIiIgqocKorQJRIRx99tI4vueQSK/fggw/qePHixVbuoYce0vH06dMTVDsiIiKi9Fe/fn2r3KNHD6vcpk0bHZ999tlWbu7cuYmrWILwChQREREREVFAPIEiIiIiIiIKiCdQREREREREAYVuDtRNN92k45EjR1q5v//+W8djx461cua2X3zxRYJqR2F38803W+VnnnlGx0qpiI/bs2ePVTbnTnEOFFE4uX1z5syZOp4xY4aVc8uUGHfccYeOW7ZsaeU2bNgQMSciVtk8Xs+ZM8fK3XnnnTqeP39+rFWlOCpbtqxVNvtmnTp1rNxXX31llcePH6/jTz75xMp9++23caohxUP16tWt8ogRI3R8yimnWLkSJUpEfJ67777bKnMOFBERERERUQHGEygiIiIiIqKAQjeEb9euXTpev369lTMv8d9www1Wrl27djqeNm2albvyyisj7oPSjzlUYMyYMVbuvPPOC/w8rVu31vHkyZOt3L///htj7SgVatasqeO77rrLys2ePVvHr776atLqRPHRp08fq9ywYUMdn3vuuVbOLZs4hC85OnTooOMaNWpYOfM9PNqQajd/1llnWbn33ntPx127drVyb7/9dvDKUtxcffXVVvn444/XsftZ7uuvv7bKdevW1fFHH32UgNpRXhxwwAFW+fzzz9fxhAkTrFzp0qV1vHHjRiu3fft2q1yhQgUdFytWLN/1TDVegSIiIiIiIgqIJ1BEREREREQB8QSKiIiIiIgooNDNgXrttddyjAGgaNGiOu7UqZOVu/TSS3XcvHlzK+eOib788st17I7RpPCpUqWKVf7xxx91XLx48aiPXb58uY4vu+yyiM/DOU/p5dRTT7XK/fv31/E999xj5bgMbnpx5zz17t078GPNeU6c85QaDzzwgI6ffPJJK1e+fHkdL1myJPBzNmjQwCqbcyl69uxp5TgHKjXMtnXde++9VvmVV15JdHUojypWrKhjt30aN26s4x07dli5jh076viDDz6wcuY8cwB46qmn8lvNUOEVKCIiIiIiooB4AkVERERERBQQT6CIiIiIiIgCCt0cqGj27Nmj46FDh1q5sWPH6vitt96yck2aNLHKLVq00LE7z4rCwRw7O3r0aCsX7f4BL7/8slW+6aab4lovSo1bb73VKpv3DQGAtm3b6ti9F4WpatWqVvnRRx/VsTvXJi9zNCh/zHlPuc15Muc29e3bN2KOUsOcg2Tegw2IfQ6Ue++Zli1b6ti8BxwAtGrVKse6UPyZc5DNNnFt2LAhCbWhvHDnrE2dOlXHtWrVsnLm56gPP/zQyv32228x7f+XX36J6XFhwitQREREREREAfEEioiIiIiIKCBRSkVOikROphF3iepFixbpuE6dOsmuTsyUUpKo5051W7vLXb700ks6LlWqVMTHjRo1yip3797dKu/evTsOtUu+RLV1qts5Lzp37qzjG264wco1a9bMKkcbtmd65JFHrHLXrl117A4FWrduXaDnzI+C3KfzItr7kDssr1GjRgmuTWKwT+eNuVT5H3/8YeXMvxcR+2V9/vnndWz272TJpD59880363jIkCFWzizfeeedVi5af08n6dyn3fe7c889V8fukNlYh2C6Q+/NZcyPPvpoK7dy5cqY9pEMkdqZV6CIiIiIiIgC4gkUERERERFRQDyBIiIiIiIiCiitljGP1Z9//mmVq1WrpuPrr7/eyt1xxx06/vXXX63cpZdeGv/KEYD950BFm/dkql+/vlV2x1pv27ZNx+4S5zt37tSxO0+Oks+d13TWWWfpuHnz5lYu6JwnAOjXr5+O77rrLis3aNAgHSdjzhN5zPH2uUnXOU+UP6+++qqO3Tkz0ebQcOny5ClZsqSO3bloy5Yt03F+5jwVLvzfx9RChezv/M1b21DeuLcRSMZtO8y5VGGe8xQUr0AREREREREFxBMoIiIiIiKigDJiCJ87FO+kk07S8ZNPPmnlypQpo2MO6wq/E088MWrZHFbw9NNPWzlzqIe73Gasd9emvKlevbqO27VrZ+XMNsltGVVzKIm5/DkA3HfffTp2hw0MHz48cF0pfqZPn56Qx3K4X/pq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devWOnaXJo+2jLm7fP2qVaviWzGKyZw5c3RszkUB7PnJS5cutXL/+9//dLx58+aY929+tnPFe1lq8ri3AjrhhBN0fP7551s5c65bbk466SQdP/bYY1Yu2txXc4n8SZMmWTnz7yzZeAWKiIiIiIgoIJ5AERERERERBVRghvCZchs28PLLLyexNhTE/PnzrfLzzz+v486dO1u5xo0b63j27NlW7v3337fKlStX1rG7bO4///wT8XEcIpZ83bt3t8rm0JHhw4cnuzpEFEGrVq103LNnTytnDqOOdsuHH3/80SovWbIkTrWjRBk5cmTUciKYn9+iDQGl/KlQoYKOzSkMAPDBBx/oePr06VauatWqOjaXEAfs4bwA0KhRIx3v3LnTyr333ns6fuutt6ycuVS6+bkt1XgFioiIiIiIKCCeQBEREREREQXEEygiIiIiIqKACuQcqGjjrgGgTp06OnaX3qTU2Lt3r1V+4okndNyuXTsrN3To0MDPa46Zdv8uzH244/gpOUqVKqVjd7naUaNG6XjXrl1JqxMlX7QlbCl8mjZtquP69etbuUKF/vte9t9//7Vy5ryHhx56KEG1o4LEfN/O7bMdxc68bUjFihWtnDknyV3ivEuXLjo+5JBDrNy+ffus8qeffqpj99Ykc+fOzVuFQ4BXoIiIiIiIiALiCRQREREREVFAPIEiIiIiIiIKqEDOgcpNmTJlUl0FysWKFSt0vGjRIit36qmnBn6e7du36/j222+3cm+88UZslaO4eeSRR3S8bds2K/fOO+8kuzpEFEC0eSnmvCc3Z97riffaI0qdwoXtj//t27ePuO2IESMCPeesWbOs8sCBA63ytGnTAtYuPfAKFBERERERUUA8gSIiIiIiIgqowAzh++mnn3T87LPPWrlbbrnFKj/11FM67tq1q5Vr2LChjnfs2BHHGlKsWrRoYZU/+eQTHdeuXdvKffvtt1a5ZcuWOl69enXc60b5c8455+h45MiRKawJpdKMGTNSXQXKgzlz5ui4Y8eOVi7aMuaTJk1KaL2o4Pnoo490fNttt6WwJgVLgwYNrLJ7GxGTufy4uaQ5APzyyy86nj17tpUr6J+heQWKiIiIiIgoIJ5AERERERERBcQTKCIiIiIiooAKzByoffv26XjAgAFWzp0DVbJkSR0vWLDAyu3ZsycBtaP8WL9+vVWuW7duimpC+VWxYkWrXKJECR2PGTMm2dWhEGrUqJFV7t27t1XmfKnUmzhxoo5r1Khh5Xr27JnjdsD+781Eufnmm290/PPPP6ewJgXLl19+aZXNuYsUDF8xIiIiIiKigHgCRUREREREFJC4dwq3kiKRk5R0SilJ1HOzrcMlUW0dtna+8sordfzGG2+ksCapwT6dOTKlT2c69unMwT6dGSK1M69AERERERERBcQTKCIiIiIiooB4AkVERERERBQQ50ClEY6tzhwcW50Z2KczB/t0ZmCfzhzs05mBc6CIiIiIiIjyiSdQREREREREAfEEioiIiIiIKCCeQBEREREREQXEEygiIiIiIqKAeAJFREREREQUUNRlzImIiIiIiOg/vAJFREREREQUEE+giIiIiIiIAuIJFBERERERUUA8gSIiIiIiIgoo9CdQIlJLROaJiKS6LkGIyFsiclGq65FuRKSCiCwRkRKprksQItJdRB5NdT3SDds5c7CtM0Mavkc/ISJdU12PdJSGbc3PYzFIw2N3Svp00k+gRKSsiLwtIjtE5FcRuTqXh/QD8LjylwsUkZUickHia5ozEakqIkpEths/DxqbPAqgf6rqFwYiUkxERvntu01Evg1wEOsB4GWl1N/+c8wQkQ6Jr23ORORsp423++3e2t9kBIB2InJIquoYBjm8RvtE5JkoDwlVO/t1uEREfvDr/5mI1DLSbGefiNzif3jaLSIvB3hIqNqafTpvROQYEdklImNy2TRs79GnichHIrJJRNaLyHgRqWRs8jiAniJSNFV1DAu/T+4y+sPSXB4Sqrb263C+/2F/p4hMF5EqRjrjP48BgIgcJyKfishfIrJcRFrl8pBQHbtNInKtf9w265OSPp2KK1DPAtgDoCKAdgCeE5HaOW3oH/QaAZgU9MlFpHAc6hhEllKqtP/TL/uXSqmvABwkIiclqR5hVBjAagANAZQB8ACAN0Wkak4bi0gxANcByO2N2nxMQttZKTXbaN/SAJoD2A7gAz+/C8D7AK5NZD3CznmNDgXwN4DxOW0bxnYWkWMAvAagC4AsAFMATM7eL9vZ8hu8DyMv5rZhGNuafTrPngXwdbQNQvoefTCAFwBUBVAFwDYAL2UnlVLrACwBcGmC65EubjH6RY1IG4WxrUWkPICJAB4EUBbAPABvZOf5eUy3wTsA3oX3GnUCMEZEjo2wfeiO3cZ+DgbQE8Ai8/ep6tNJPYESkVIAWgN4UCm1XSk1B8BkAO0jPORCAAv8NzaIyGgARwKY4n9bcq9xRegmEVkF4FMROVdE1jj71t+UiEghEekhIitEZKOIvCkiZeP4X50BoFkcny+tKKV2KKX6KKVWKqX+VUq9C+AXAA0iPORUAFuUUmsAQEQGADgbwFC/nYf6v1cicrOI/ATgJ6Ptded1vykRkRtFZLGIbBaRD51vp/LiOgATlFI7jN/NQAa3cw5aA/gTwOwI+TC2cxMAs5VSc5RS/8D7xrIyvJP/bDPAdoZSaqJSahKAjQE2D2Nbu9inIxCRtgC2APgkl01D9x6tlHpfKTVeKbVVKbUTwFAAZzqbzQDbOa9C19YALgOwyG/vXQD6ADhBRGoa28xAZrd1TQCHARislNqnlPoUwFxE/twd5mP3IABDAGzIITcDSW7nZF+BOhbAP0qpZcbvvgOQ4xUoAHUA6EvKSqn2AFYBuMT/tuQxY9uGAI6D94EoN90BtPQfcxiAzfC+bQMAiMhCyX1o4a8iskZEXhLvWxDTYgAnBKhHRhCRivDaflGETdx27gXvQ3j2N2O3GNu2hNfBayEXItIC3rcVlwGo4D/nOCP/roj0CPA8pQC0AfCKk2I7264D8Gr28I4chLWdxYkFwPHG79jOeRfWts7ejn06AhE5CMDDAO4MsHmY36OznYP933syvp0Ng0Rkg4jMFZFzo2wXxrauDe8zZHaddgBYAfszJdt6f+57nCmUx24ROQXASQCGR9gk6e2c7BOo0gC2Or/7C8CBEbbPgnf5PYg+/pWPvwNs2wVAL6XUGqXUbnjfWrSR/4bt1FVKjY3w2A0AToY3NKCBX/fXnG22+XXPeCJSBN7r84pSakmEzbIQvJ0HKaU25aGdBymlFvtXFwYCqJf9rYdSqrlS6pEAz3MZvHaf6fx+G7whihnPf00bYv8PpKYshK+dPwbQ0P+WtCi8A3xRACWNbdjOeZeF8LW1iX06sn4ARmV/A52LLITvPVoTkboAHgJwj5Pie7TnPgBHw7vq/gK8q0nVImybhfC1dWl4nyFN7mfKTG/rpfBGhtwjIkVEpDG89+qSEbbPQsiO3SJyAIBh8E7i/o3w/Elv52SfQG0HcJDzu4MQubE2I/LJlWt1HupRBcDbIrJFRLbAO3PdB29eVlT+0MN5Sql/lFJ/ALgFQGMRMet5ILzhDxlNRAoBGA1vztstUTZNZDs/bbTzJnjfvFTOw3MAka+sHIj9D96Zqj2AOUqpX6JsE7p29k/qr4M3zGcdgPIAfgRgfnhkO+dd6NrawT6dAxGpB+ACAIMDPiR079HZRKQ6vDlttyml3GHFfI8GoJT6Uim1TSm1Wyn1CryhXRdH2DyMbR3kM2VGt7VSai+8K0XNAPwO4C4Ab8J+jzOF8djdDcBCpdQXUbZJejsn+wRqGYDC4k3cznYCIg/tWghv6Jcp0vAg8/c7YJxd+2evFYz8agAXKaWyjJ/iSqm1Qf4TEfZrvpbHwbisnIlERACMgncQbO134kjy086A/U3KoUa8GkBnp51LKKU+y/1/4BGRIwCcC+DVHNIZ386GaxH96hMQ0nZWSk1QSh2vlCoHoDe8yefm5Hm2c96Fsq0B9ulcnAvv73+ViPwO4G4ArUVkQYTtQ/ke7X+r/TGAfkqp0TlskuntHImCPaTZFMa2XgRj2JY/NLca7M+UGd/WSqmFSqmGSqlySqkm8K46fhVh8zAeu88H0EpEfvePS2cAeCJ7PpYv6e2c1BMof3zqRAAPi0gpETkTQAt4Vyly8hGA+iJS3PjdH/AaP5plAIqLSDN/CNkDAIoZ+eEABmRfOhRvzfsWQf4PInKqiNTwJz6WgzehbYZSyvzWsiG8b74y2XPw/qAvCXB59ysAWSJifhORazsrpdYDWAvgGhE5QERuhHfwzDYcwP3ir/IoImVE5PI8/j/aA/hMKbUihxzbGYCInAHvW6QcV98zhLKdRaSB/7wV4A1jmewMN2U7w1tpyT8WHwDgABEpLpFXXwplW/vYpyN7Ad7rXc//GQ7gPUSeyxLG9+jKAD4FMFQpFWm+RKa3M0QkS0SaZPdjEWkHb77YBxEeErq2BvA2gONFpLVfr4fgXang8dsgInX9di4pIncDqATg5Qibh/HYfT28z5P1/J95APoC6GVsk/x2Vkol9QfeMoqT4J2trgJwdS7bjwdwpVFu4T9uC7xvx6rCOwsu7DzuenhDcv70t1sJ4AI/VwjeBNml8C71rgAw0HjsIgDtItTnKngryu3wn/9VAIca+ZPhrVST9Nc2LD/wLtUqALvgXWLP/snxNfUf8z8A9xnl0+EdeDcDGOL/TgGo7jzuIr89tgB4At6chg5Gvj2A7+HNvVsN4EUj9z6Anrn8X5YAuCmH3xeHdwm8Yqpf71T/AHgewOiA24aunQHM8Y8Dm/z/Sym2c46vUx+/bcyfPunU1v427NN5a/MxuWwTtvfo3v7+zPee7Ua+kt/ORVP9+qa4bSvAu9K+zW+rLwBcmE5t7ecv8Pv03/BWYqtq5DL+85j/OvzPP+5u94+R1QNsH7pjt7HtDOd5U9Knxd95aIl3U8tXAJyiwl5ZeHe+hjcBd2qq65JO/G//ZwM4UQWbkJhSItIdwBFKqXtTXZd0wnbOHGzrzJCG79FPAFihlBqW6rqkmzRsa34ei0EaHrtT0qdDfwJFREREREQUFsleRIKIiIiIiCht8QSKiIiIiIgoIJ5AERERERERBRRpCVoAgIhwglSIKKUi3Z8h39jW4ZKotmY7hwv7dOZgn84M7NOZg306M0RqZ16BIiIiIiIiCognUERERERERAHxBIqIiIiIiCggnkAREREREREFxBMoIiIiIiKigHgCRUREREREFBBPoIiIiIiIiALiCRQREREREVFAPIEiIiIiIiIKqHCqK+AqV66cjg8++GArd8wxx+i4Xr16Vm7QoEE6btGihZV77LHHrHKzZs10vHz58pjrSkREREREmYVXoIiIiIiIiALiCRQREREREVFAoRvC9+STT+r40ksvjbjdli1brHLLli11XL58eSu3cuVKq3ziiSfqmEP4iIiIiIgoKF6BIiIiIiIiCognUERERERERAHxBIqIiIiIiCig0M2BWrZsmY7//PNPK2cuY16mTBkrt23bNh1fddVVVu6rr76KZxUpCYYPH67jzp07W7klS5bo+KeffrJy1atXt8ojRozQcaNGjaxcpUqVdNy0aVMrt3HjxjzWmIiIYnXAAQdY5bZt2+rYPFYDwIQJE3S8du1aK7d3794E1I6IUkVEdPzGG29YOfO8ALDXOEg0XoEiIiIiIiIKiCdQREREREREAYlSKnJSJHIyCQ4++GCrPGPGDB3XqVPHyi1atChirqBQSknuW8Um1W3tGjx4sI5vvfVWK2f+zeY2XGPz5s06rlixYsTtPvvsM6tsLqFvPkeyJKqtw9bOmS6T+nSmY5+2NWjQwCr36tXLKrdo0ULH5hAeANi0aZOOW7dubeVmzpwZryrGhH06c7BP583RRx+t4969e1u57t2763jr1q1W7rDDDtPxmjVrrNzcuXOt8tlnn53veroitTOvQBEREREREQXEEygiIiIiIqKAeAJFREREREQUUOiWMTe5c1aizW166qmnElwbSqZHHnlEx267f/zxxzo2l7PNyYUXXqjjoUOHRtzujDPOsMqTJk3SccOGDaPug5KvSJEiVrlGjRo6/t///mflmjRpouNnn33Wypnjrin/ihYtquNhw4ZZuRtvvFHH7pyWBQsW6PiGG26wcgsXLoxnFSmFzLkM5i0mAKBevXoRH+f+vZQtW1bHzZo1s3KpngNV0LRp00bHd9xxh5V75513dHzyySdbObOtb775Ziu3YsUKq2zehoYKDvczvPnZzc3df//9OnbnQE2cOFHHe/bssXLu+30y8QoUERERERFRQDyBIiIiIiIiCognUERERERERAGFeg6UOxbe5I6hzW0uDKWXP/74Q8cXXHBBzM9zySWX6NgdRx/tHmjuvQUotWrXrm2Vn3zySatsznVbunSplTPvH+eOn6b4KlWqlI4vu+wyK9e3b18dV6pUycp16NBBxy+++KKVM9sWSM192Sg+zHY/7rjjrFy047HL3Hb79u1W7sADD9Qx59bknzlX5bTTTrNybjmS+fPnW2WzvwPASy+9FGPtKMzuueceq1y1alUdm/f6BIDffvtNx3fddZeVO/XUU3U8efJkK+eWk4lXoIiIiIiIiALiCRQREREREVFAEu2yuYgEv6aeAO7S5LfeequOP/30UyuXn2Fe6UIpJblvFZtUt3W8VKtWzSp//fXXOi5TpkzEx02ZMsUqX3311TreuXNnnGoXXKLaOsztXK5cOavcunVrHffr18/Kfffdd1b5zjvv1PH69eutXIkSJXS8cuXK/FYzrtinPaNHj9Zxu3btrNxtt91mlZ955pmk1CneMrFPu8ylrRctWmTlDjrooIiPy8vwa/Pv4/bbb89jDfOvoPXpgw8+WMeffPKJlTvhhBNiek5zuBZgv2+n0zBr9mmbe0uBt99+2yqb7e5+Vtu3b5+O//zzTytn3h7DHf79999/x1bZPIjUzrwCRUREREREFBBPoIiIiIiIiALiCRQREREREVFAoZsDZY5vXLJkiZUzlyft2LGjlTPnNpQuXdrKvf/++1b5lFNO0fHixYut3KGHHqpjd4x2lSpVdPzrr7/mWP9EKmhjqxNh+PDhVtn9OzHt3r1bxyeddJKV+/HHH+NbsTzKlLHVl19+uY7dtmrQoIGOu3btauXeeustq2yOn3bnUphz31avXh17ZROAfdpjLm+7bNkyK+cuS1+nTp1kVCnuMqVPB9WwYUOrbM5zcF1zzTVWuU2bNjouXry4lTPnWbj7+Pnnn/Ncz7xK9z5dsmRJq2zefqBt27ZWzpzTlh/msubptKQ5+7TNnSPXqFEjq3zllVfqePz48Vbu3HPP1bG7xsG0adN03LRp0/xWM884B4qIiIiIiCifeAJFREREREQUUOiG8JnLFffq1Svidjt27LDK5mX8Aw44wMpt2rTJKptDAd0lEIsUKaJjdwjhkUceGbE+7rKL7777ro5feeUVKxfr8LB0HxqQCJ07d7bKzz77rFV2l781/fXXXzouW7ZsfCuWTwV1aMCECROscr169XTsXppfvnx5TPs466yzrPLhhx+u42uvvdbKmcscu0PHkoF9en9vvvmmVb7ooous8vHHH6/jaEOpzWM5ABxzzDE6dod2vfjii1bZHN4bLwW1TyeDOZwXAObOnavjaEP/zL4P7L98diKkW582py0AwMsvv2yVL7zwwnjvcj+7du3SsXsbihtuuEHHe/futXJz5sxJbMVyEfY+bQ7HdI+H5uef/DBvNzJu3Dgr5y5jbg7hc5nH4Ouvv97KnX/++TqePn16LNXMFw7hIyIiIiIiyieeQBEREREREQXEEygiIiIiIqKACqe6Au4SpM2aNQv0uFKlSlllcwytO4bXHes5ceJEHbtzZKLNCTO59axYsaJV7tSpk47d/+OoUaN0vHDhwkD7o5z9/vvvMT/25ptvjmNNKJLu3bvr+KuvvrJy7du317E7HzEvzNsfNGnSxMqZ8yDceVZnnnmmjlMxB4o85cuX17E798091pvj6N35EuY81RYtWlg5c76dO8dp7NixVjkRc6DCrkSJEjquW7eulbvnnnusstlvor1nussaL1iwQMdjxoyxcm5bHnzwwTp229Kc5+zuf/PmzTrOysqycsmYA5VuzPklQPQ5Txs2bLDKPXr0iEsdzNuPHHHEEVbu448/1vHOnTut3BtvvKHjhx9+2MqtWrUqLnVLZ+7rFQ81atSwyo8//riOCxe2Tyl69+4d8XncuXctW7bUsbv+QCrmPQXBK1BEREREREQB8QSKiIiIiIgooJQvY24O3QD2Xw48Uu6zzz6zcuZSl/FanjE/2rVrp+MhQ4ZYOXO4iLtU+9atWyM+Z7otj5ooZcqU0bE7JKx69eoRH+cOlzSHoSTiUnd+hH151LwoXbq0jrdv357s3VvDf9zjjbkM7tKlS5NWp2yZ1KfNYVcXX3yxlXvttdd0bP695Ic5lAsAXn/9dR2bw6gBe2hZooStTx922GFW2XyfatWqVW771HHQYe/u49auXWvlZs2aFfFxV111lVWOts+ePXvq+NFHHw1ct3hJtz49ePBgq3zrrbda5RUrVujY/btYtGhRXOpQrFgxHZu3lgCANm3a6Lh+/foRn8Nd4vzff/+1yj/99JOO3eF+kydPjvg80YStTyeDeyuSyy67TMfuUN8nnngi4vO8+uqrVvmaa67Rsfs34H6GTjYuY05ERERERJRPPIEiIiIiIiIKiCdQREREREREAaV8DpS7RO2DDz6o43nz5lk5c75CfpavTrZ+/fpZZXPekzv++K677or4POk2tjpRXnzxRR1fd911gR/3zjvvWGVz7G7YZOLY6mgOPPBAq3zeeedZZXNJVPfYYObcMfvmMSUVMqlPn3TSSTp257CaSw67S0+XLVvWKv/yyy867tChg5XbsWNHjs8JpP49I2x9+vLLL7fK5pyEokWL5rZPHcc6ByrWx7mPdeevnn766Tr+4YcfAu8jXtKtT7vt4M4devbZZ3Xszo9KhqpVq+r4xBNPjLjdwIEDrfKxxx4beB/vvvuujp966ikrF20J7bD16UTp2rWrjt35SObcxUsvvdTKmcdjADj11FN17L73mnNWjzrqqKjPk2ycA0VERERERJRPPIEiIiIiIiIKiCdQREREREREARVOdQXcsY09evRIUU0SxxxDDNjjiA866KBkVyft1axZM6bHvf3223GuCeWXef+P3bt3W7n27dvrePHixVZu48aNVtmc3+beK+Tll1/WcaNGjWKuK+XPsmXLdGzetw+w7wN1//33W7kBAwZYZbM9o81PoOjcOVBmX3S98MILVrlkyZI6/vnnn61c9+7ddXzwwQdHfE53XlNemI9151E/+eSTOnb/lubPnx/zPguqvMxFS4WVK1fmGLu+/PJLq9ynTx+rfOWVV+rYvddc8+bNc4wB+/51mcL9jGXeN8t9PUaPHq3jli1bWjnzXpuAfcxxn8fs0+bxBUj9HKhIeAWKiIiIiIgoIJ5AERERERERBZTyIXzlypWzyuYwnlq1alm5r776Kil1ijf3/1i4cMpf9rRSoUIFq2xexj/ttNOsnDscYe/evTo2LzVT8phLkDdt2tTKmcuK//jjj1Zu2rRpOv7777+t3NatWyPu7/rrr7fK48eP1/G3336ba30pMcw2M4fs5ed5KHbff/+9VW7RooWO3feojh07WuWgy5G7uUQsY+46//zzdTx37lwr9+ijj1rl559/Xse//fZb4PoUJO4Q2Z49e1plc1jW66+/buXc2xGkktt+7i1hmjRpomN3CB/Zw+aGDRtm5dzPsCbztjJ5sWXLFqtsflZz/yY7deoU0z4SjVegiIiIiIiIAuIJFBERERERUUA8gSIiIiIiIgoo5ZNxJk6caJXLly+v45EjR1q5dJ0DdfHFF1vlEiVKpKgm6Wno0KFWuU2bNjrObRx927ZtE1InCm7btm06Nucj5eaPP/4IvG3t2rV1XKVKFStnLmtM6e/DDz9MdRUKhFGjRlnlrl276rhixYoJ2edff/2lY3de47vvvmuV33rrLR2b85oAICsrS8fXXXedlTPnbxUtWtTKPfDAA1bZfKy7tH6mLJHv3t7jqquusspHHXWUjs3bRQD2nDL3eJ2IOcfu3KUuXbpE3LZx48ZW+fDDDw+0j/feey/vFSsAzL5x7rnnBn7cG2+8oeOxY8dauTvuuMMqm8/rLnm+YMECHbvHhrDiFSgiIiIiIqKAeAJFREREREQUUMqH8E2dOtUqDxo0SMdFihRJdnViVr16datsXro0h0YAwIQJE3TsDimg/ZUpUybwtr/88otVnjlzZryrQyF0yy236NgdqsG/gfRiLjcMAMuXL7fKP//8czKrU2C5yz6bw2u6detm5cwhc0D05cjNIVDuUsU//PCDjtetWxe4rtGGbX755ZdWuU+fPjquXLly1Oc94ogjdOwOB8uUIXzm0Clg/6FV48aN03HVqlWtnDmEb+fOnVbu9ttvj0v9TO5nQnPodm7M48iePXusXOfOnXW8ePHiGGuXXtxbE9x7770RtzWH07pTaz755BMdn3322Vbu1FNPtcrvv/++jr/44gsr57ZJOuAVKCIiIiIiooB4AkVERERERBQQT6CIiIiIiIgCSvocKHcMa6FCkc/h3LHV5jhsd2x1IhQrVswqm3MrXnzxRSt3wgknWOWDDjpIx1u3brVys2bN0nFelmrOJOacsnPOOSfiduZYfGD/v4vNmzfHtV4UDu5Su+b8Bfe2ARR+Rx55pI7dcfPuHKh0HCufDpYtW6bjRMxfSRR3OXazfN9991m5vn37WmVzmXN3/mymMuepAUCdOnV07C4Zf/XVV+v4ggsusHL16tWLf+WiePbZZ62yO8fuueee03EyPj+GXdmyZa2y+Vm8ffv2Vs5cqvyff/6J+Jxuf3M/7/fq1UvHBeE4zitQREREREREAfEEioiIiIiIKCBxh8lZSZHIyRiZS4wCwPXXX2+VzaEcc+fOtXLbt2/XsXv5b/78+Tret2+flXPvnr1t2zYdH3zwwVauefPmOcYAcMoppyAW7rKgkydPjul5lFKS+1axSURb54c51CIvS727S7KefPLJcatTMiWqrcPWzkFVqVLFKpu3AgDsJXQbNmyYlDrFQyb16WiOPvpoHbtD9sxllAGgXbt2SalTvLFPp16FChWssjlsyR3uHesQo0zq0+a0Cnep+1i5S+gPGzYs0OPcZfmTMUSsIPXp+vXr69j9HBWN+fns4YcftnKdOnWyyu4S6OkiUjvzChQREREREVFAPIEiIiIiIiIKiCdQREREREREASV9GfMvv/zSKjdr1swqm8t6n3nmmVZu4cKFOnaXDTeX0Fy7dq2V69Gjh1U25325yyy6S5cHNWDAAKv83nvv6Tgv40nJYy4D7y5Vbrafm3PbngoGc3w2AJQrV84qX3755cmsDsWZezw3ufPdiGK1fv36VFehQDGXA4/X0uD33ntvXJ6H8ibo59QmTZpY5Z49e+r4+++/t3LpOucpKF6BIiIiIiIiCognUERERERERAHxBIqIiIiIiCigpN8HyuXOQTLv99K7d28rZ97T59hjj01sxQB89NFHVnnVqlU6du9V8uijjya8Ppl0f4lPP/1Ux9Hu6/PLL79Y5Ro1alhl955g6aIg3V8iVuZ8RHfu5E8//WSV03UOVCb16WjGjh2r40aNGlm5448/3ipv3LgxKXWKN/bpzMA+nTkypU8XLVpUx2+++aaVO++883KMAWDevHmJrViS8D5QRERERERE+cQTKCIiIiIiooCSvoy5a+/evVbZHBrXvn37ZFeHQqJmzZo6jraM+ezZs61cug7Zo/0deuihOr7//vut3DfffJPs6lAcHX744Va5TZs2Oh4/fryVS9che0REBcHjjz+u40svvdTKde7cWccFZcheULwCRUREREREFBBPoIiIiIiIiALiCRQREREREVFAKZ8DRZQTc55TtKX2o+UovZx11llWuVy5cjp+5513kl0dSqBChezv7goX/u+taMKECcmuDhER+dxbSXTp0kXHjzzyiJUbNWpUUuoURrwCRUREREREFBBPoIiIiIiIiALiED4KpcqVK6e6CpQEVatW1fEdd9xh5QYPHpzk2lCytGrVyir/8ssvOuZwTSKi1Jk+fbpVLlq0aIpqEm68AkVERERERBQQT6CIiIiIiIgC4gkUERERERFRQJwDRUQpY851O+2006zcnDlzkl0dSpITTjjBKnfo0EHH//77b7KrQ0RElCe8AkVERERERBQQT6CIiIiIiIgCEqVU5KRI5CQlnVJKEvXcbOtwSVRbs53DhX06c7BPZwb26czBPp0ZIrUzr0AREREREREFxBMoIiIiIiKigHgCRUREREREFFDUOVBERERERET0H16BIiIiIiIiCognUERERERERAHxBIqIiIiIiCggnkAREREREREFFOoTKBGpICJLRKREqusShIg8ISJdU12PdCQitURknogk7CaE8SQi3UXk0VTXI92kYTuzT8dIRIqJyI8iUinVdQmCfTo2fJ/OHGnYpy8RkTdSXY90w3YOJqknUCIyRkTWichWEVkmIh1yeUgPAC8rpf72Hz8jwGMSSkSUiOwQke3+z0gj/TiAniJSNFX1Cwu/rXYZr9PSXB7SD8Djyl8WUkRWisgFia9pZCJyhYgsFpFt/sGkpZEeAaCdiBySouqFQgFp55IiMkxENojIXyIyy0izT/tEpKqITBWRzSLyu4gMFZHCUR7SCcAspdQ6//Evi0j/5NQ2OhFp6B/LzfqwT/tEpK1/7NshIitE5Owom4fufTqbiFzrt7NZH/ZpX7r3aRE5RETGichv/rF7roicmp1XSk0BUFtE6qaqjmGQ7u3s12G6iKz3zx++E5EW2blUtXOyr0ANAlBVKXUQgEsB9BeRBjltKCLFAFwHYEzQJ8/lDyKeTlBKlfZ/9IHZ/2NbAu//RsAtxutUI9JG/rccjQBMCvrEiW5rEakM72/vTgAHAbgHwNjsD1dKqV0A3gdwbSLrkSbStp19LwAoC+A4/987shPs05ZhAP4EUAlAPQANAXSLsn0XAKODPnmyjt8iUgTA0wC+NH/PPu0RkQsBPArgBgAHAjgH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pNUpCPbp+OrTp4+Oe/fuHXE7dwhfo0aNElSj/7BPZ4ZI7cwrUERERERERAHxBIqIiIiIiCggnkAREREREREFVCDnQF1++eVW+c0337TK5v/5+eeft3LmXIpdu3YloHax49jqzJGJY6uLFi1qlY888kgdDxkyxMqdddZZVrlkyZIRn9ecy/TLL79Yub179+p4woQJVm7u3LlWuVevXjo+7LDDrFyVKlV0zDlQyVO/fn2r/PTTT+t47NixVu65557T8TnnnGPlnnzySat80kknxauKWib26bww57oAdn874IADrJz5Ht66dWsrN2nSpLjXLS/Yp+PLXLp8+vTpgR+XjDlRmdKnS5UqpeOaNWtauWhzECtUqGCVzX67YcMGK/f222/r+MMPP4ypnonCOVBERERERET5xBMoIiIiIiKigIKPNQmB2267TcfmkBkAWLFihY4HDx5s5UaNGmWVly9fruOWLVtauY8++kjHZ599dsx1JaLcmcPr7rzzTivXv3//HLcD9l9SfP369ToeMGBAxP2NHj3aKv/111+B6/rBBx/oOCsry8pdc801gZ+H8qdNmzY6fuaZZ6zcIYccomN3uOa4ceN0PH78eCu3efPmeFaRYlCxYkWr7A7bM23cuFHHixcvTlidKPXMoXh9+/a1ctGWNTeH/gH2EFF3uCjZw+1atWpl5czP3jVq1LBy5nuz+74c7X3bzXXo0EHH7jQcc3hfmPAKFBERERERUUA8gSIiIiIiIgqIJ1BEREREREQBpdUcqFdffVXHkydPtnLmGE2Xu5zlqlWrdFyvXj0rV7Vq1ZjrRwWHOX66cuXKVu6ggw6yyr///ruOp0yZYuX++eef+FeuAFmyZImOq1WrFnG77777zio3btzYKrtLoibali1brPLQoUOTuv9M4i5Vbs57Muc8AcC+fft0/OWXX1o582+mfPnyVm7WrFn5riflzbXXXmuVb7zxxsCPnTp1qo6XLl0atzpRuLlzlxo2bKhjd84T5c2tt96q4549e1q5vMxzikfOvb2Q+Zl9/vz5ER+XbLwCRUREREREFBBPoIiIiIiIiALiCRQREREREVFAaTUHyrxXx9ixY63caaedpmN3jKR7Xyjz/hJz5861cnfffXe+60nJ446jdedLmPfycu/9snbt2ojPe+KJJ+p44MCBVq5YsWJW2RwT/Nlnn1m54sWL6/jhhx+2cu58qYKqVq1aOnbv53DkkUdGfNyPP/6o41TPeaLUueOOO6yyO+/J9MYbb+j42WefjZhz5yY++uij+akiBVSzZk0d9+vXz8oVKVIk4uO++uorq+weSykzzZw5U8ecA5U/5rwnd56TKdZcXh5brlw5K2feI4pzoIiIiIiIiNIQT6CIiIiIiIgCSqshfOby0d26dbNyb731lo7btm1r5SpWrGiVCxX677xx3bp18awiJUDRokWtcosWLXR8xRVXWLnLLrss4vP89NNPVjnaED5z2Ke7ZP5NN91klWvUqKFjdyluszxp0iQrZw4lLUjc9rr33nt1nJelys225JA9ysm2bdussrn8baNGjazc5ZdfruMvvvjCys2bNy8BtSN3uPOIESN0fMQRR0R9rDmkZ9y4cVbu559/jkPtKL/MYXPu7WKSwVzGnPLH/Fz877//WjlzqoT7XmwuMZ4bcwhvqVKlIm4XbYnzMOEVKCIiIiIiooB4AkVERERERBQQT6CIiIiIiIgCSqs5UJUqVdKxuTQyALz88ssRH7d9+3arPGDAAB2fd955Vu6TTz7RsbtUqrmMOiXPyJEjrXK7du0ibuvOiejbt6+OP/3005j2v2LFCqtsLvcJ2ON6Tz/9dCt3zTXX6Lh8+fIx7T/d3HnnnVbZfA1c5lLl7vy1X3/9Nb4Vo7RQuXJlq+z+/ZhzY+655x4rZy53PWbMGCtnjqt3bzdA8WPO7Zw1a5aVO/nkkwM/j9l+Tz/9tJUz52vcdtttVu6YY47R8VNPPWXlli1bFnj/mcpdDrx3794Rc9GYc6LM92E3lx9cujx2rVq1ssrmvCd3ufHZs2fr2H1/X7BgQeB9vvrqqzp2P8fltgR6GPEKFBERERERUUA8gSIiIiIiIgoorYbwXXzxxRFz33//vY7r1atn5d58802rvHv3bh27dzW+6qqrdHzBBRdE3P/q1atzrzDF7JFHHtFx+/btrZy55PCwYcOs3Oeff26VlyxZku+6lC1b1io/++yzVrlKlSo6LlzY7lLLly/X8c0335zvuoTRRRddZJXNIbIud6nyxo0b65hLlWcus9+MHj3ayrlDO8aPH59jDNhLl7du3drKmUOwzeML5Y+7VPlrr72m47wM2XPb8o477oi47d13363jaG154oknWmV3iDVFH7KXUz6W53Wfwx3C595yIJLp06fHVBcA6NOnT8yPLYgWL15sladNm6Zj9zNX0PfmChUqWOVbb73VKpvD9qItVe7mwvrZgFegiIiIiIiIAuIJFBERERERUUA8gSIiIiIiIgooreZARWOOdb7rrrus3MKFC62yOQ7zjz/+sHLmfBZz6UYAmDp1qo7deR9r1qzJY40pmrZt2+p4165dVs5cRvyjjz6Ky/7cuUsPPfSQjq+88kor179/f6v8zjvv6Hjr1q1xqU86eeCBB6xytOVIn3/+easc1rHNlFzm8bRhw4ZWzl0mt3v37jresmWLlatfv37EfZjzI/l3lz8lSpTQsbtEtXs7gki+/PJLq9ytWzervGnTJh1feOGFVq5fv36B9hFtngV58jOvyJzLlJe5Uu62Zh3c+VDR5lIFrRvtz50f7n6mDapTp0467tixo5Vzj8fRPhuYubffftvKDRo0KKa6JRqvQBEREREREQXEEygiIiIiIqKA0moIn3mnZNfAgQN1/NNPP1k590727rA906+//qrjM844w8qZS567dzhv06ZNxOek/HHbK17D9szl7p955hkrN2LECB27fwcbN26My/7TWYsWLXRcp06dqNs+99xzOnaH8FFmatasmVUeM2aMjs3bTABAly5drPKff/6pY/dWEz169Ii4zyFDhuS5npSz4cOH69hd8jiabdu26dhdptw9rlatWlXH7vG5SJEigfY3c+bMwHXLJHlZ0tscChd0uXHAHm6X2zBBc9tow7zywh1aSrFr0KCBjs2pLIC9dLnbdnlZqtzUtWtXq7xz585A9Uw2XoEiIiIiIiIKiCdQREREREREAfEEioiIiIiIKKC0mgM1YcIEHT/55JNWzpz35I7T/f3332Pan7s0+d13363jwYMHWzlzHCgArF+/PqZ9kufDDz/UcZMmTWJ+nsqVK+vYXd6+WLFiOr7lllus3HfffRfzPjPBkUceqeOSJUtG3Xbp0qWJrg6FkNn3ALv/ucvdmn9DHTp0sHLz5s2LuA/zlhQAULp0aR278y7MYwrlzSWXXGKVmzZtGuhxO3bssMotW7bU8RdffGHlihYtapUfeeQRHR977LGB9udq3ry5Vf7mm2+s8sSJE3W8Z8+emPaRDtw5T7179464rTt3KC/zpUzm3Cl3SfG8LEcey/5yKlPszHlP5cqVs3LmvKfc5q8FXca8VatWVu6FF14IVM9k4xUoIiIiIiKigHgCRUREREREFBBPoIiIiIiIiAJKqzlQa9eu1fHNN99s5cz7Qqxbty4h+//88891XLZsWSt34403WuVHH300IXXIFLfffruOV65caeUOOuggHR944IFWzry3EwC0bt1ax8OGDbNyCxcu1HFBHv+eCOY9daLdny0/GjZsqOMTTjjByuXlXiFmO/O+MIl15pln6njOnDlWLlqbmX38+++/t3L9+vWzyuY992rUqBHxOY866iirPHr06ByfAwAuvfRSqxyve80VFO6x053zazLnPZlznoDo9wNy56heccUVeahhzo477jirPHbsWKs8atQoHbvz8goS81iam0TMHXKPu/GaAxXrPapof1WqVNHxV199ZeUSca+naLn+/ftbZfMerGacarwCRUREREREFBBPoIiIiIiIiAJKqyF8puHDh6d0/+5lTHMIIeXf33//reNDDjnEyv388886di81P/zww1bZHVpJ8WEO28vLcLpoRo4caZXNpUyzsrKsXF72uXXrVh27txcwjyNLliyxcr/++qtV/vHHHwPvM1OZQ2bdNjLL5nA6wF4quWLFilbu6quvtspVq1aNuI9I2wH2kD53afRPP/004vNkorp161pld+niaMxbQsyaNcvKme+T7lLoDzzwQF6qGBeNGzdO+j5TIdqQuUQt/2326bwMIcwLDsmOn/Lly+s41qXK47WMubt/89YWHMJHRERERESUhngCRUREREREFBBPoIiIiIiIiAJK2zlQqWCOEd29e7eVmzx5crKrU6CZy8S742YPPvhgHbvj5hcsWJDYihEA4JFHHtHxnXfeaeXc+YBmv4nmzz//tMrm3Bd3yVP3b6JLly46rlmzppUrVOi/74ncsdXmOP1SpUpZuVWrVlnlt956K8fHAfbSzZmkWbNmVjnaUtBLly7VsTvf7I033tDxSSedZOWitb17+4Fp06bp2D0WvPbaazretWuXldu3b1/Eemci9/XIy5zDl156Kcc4DLZt22aVH3rooRTVJLnceU3mnKi8zCNy51L17t07Yi4ZzP0nai5XpjCPs+4x1yy7x+6nn35ax+484Vq1alllc15zkyZNAtUlzHgFioiIiIiIKCCeQBEREREREQUk0S7Ni0h81icuIMaPH6/jY445xsrVq1cv4ftXSiXsumaq2/qEE06wykOHDtWxuxzxYYcdpuMaNWpYueXLl8e/cimQqLZORDubQ7MAoFq1ahG3vfLKK62yOSwuGc455xyrbC6Pfvvtt1s5d+ld81j54osvWrlOnTrFVJ9069PVq1e3yu6SsqVLlzb3b+ViXe7efZ69e/fq+LbbbrNyqb69RTTp1Kdd7rLv9evXT/QuYzZ9+nQdu7ct+N///meVE7Ekchj7tDvk2Bz6lin69u2r43gN90vnPu1q0KCBjr/88ku3Pjo++eSTrVys0yaiDRN2j/lmPz700ENj2l9+RGpnXoEiIiIiIiIKiCdQREREREREAfEEioiIiIiIKCAuYx7FKaecYpWbN2+u486dOye7OmnPXSa6e/fuOr7vvvusnLkk6rhx4yI+pzsno6DMgUon7tyhd999N+K2b775plXu16+fjn/++Wcr9+qrr+a/co5Zs2ZFzLm3InDnQL399ts6vummm6ycOZfqiiuuyEcNw23kyJFW2ZzzlBfmkuIA8MMPP+h40KBBUR9rHjdeeOGFmPZPeXPZZZdZ5TFjxuj4rLPOSvj+//jjD6tszlmZMGGClZs4caKOY513R4llzkcC9p+jZTI/C5jz2/LKnPflzgFLl2WzE8m8bcfq1autXJUqVXRsLkUO5G0OVIUKFXQc7TWPtox6mPAKFBERERERUUA8gSIiIiIiIgoo6UP43DsTu8NkzCEi5nK1yXLBBRfoeMiQIVbOHCpgLmlOOStRooRVdodamJdzu3TpYuUWLVqk45o1a1q5Rx55RMezZ8/Odz0pf9w72btLSUcb7vrAAw/o2O3vvXr10rHbzslY/ty8wzpg/z1v377dyr3//vsJr08YuUMrzOWu3SGR5hLShQvbbz3m49znfO6556zyK6+8EltlKWbm8B4AOP/883V87LHHWrl33nlHx0cffXTM+3z00Ud1/OSTT1o5d3lyis4dImd+7jKHyMWTOczSHbKXl2XDoz2PKbel2c3ncd+zyO5Td955p5UzP7vdf//9Vs6cmrFkyRIrZ37GA4AOHTro2B1eG224rTksN0x4BYqIiIiIiCggnkAREREREREFxBMoIiIiIiKigCTauEMRifsaoOY4eGD/sZannnqqjs1x8Yly1VVXWeUnnnhCx+6SvQ899FDC6xONUiphazkmoq3d5YjNZeABoGnTpjpeu3ZtxOdx/0bNORHdunXLTxVDK1FtnYh2drnL1Q8ePFjHZ599tpWrWrWqjosUKRLxOd15MXlZnth8bKyPA4BffvlFx4899piVi3U57XTr0+68Rre8bds2HUebw+rOhzSXxv3ggw+snPsesXTp0mCVDZl07tN58dFHH+nYnCuVG3fOnPne/Pfff+e/YkmSbn3anR8VbS5RtDlI0ZYiL6gypU+b75v//vuvlStUqFCgnJvPS65///46fvDBB4NWO24itTOvQBEREREREQXEEygiIiIiIqKAeAJFREREREQUUNLnQJUpU8Yqu/Ni7rvvPh3/+uuvVs68F8ScOXOsXF7uGVW9enUdT5s2zcotXLhQx+78qFSPw063sdV//fWXVf7222+tsnsPMNMZZ5yhY7etzbHyLVu2jL2CIZYpY6vbt2+v42rVqlk58x5RyZgD5c7Lcf/uRo8erWP3bztW6dan86Nr1646NufFAfZ9hi6++GIrt3z58sRWLEkKap8uXry4Vf766691XLt27YiPW716tVV27xfnzoVLF5nUpzNdQe3Trn79+unYvQ9UtPfXaO/b0XKTJk2yctdee62Od+7cGbDW8cM5UERERERERPnEEygiIiIiIqKAkj6ELzfm8LqhQ4daOXNJ1Pnz51u5d955R8dFixa1cqeffrpVNocVfPnll1burrvu0rE7hDDV0m1owJQpU6xykyZNrPIll1yi448//tjKmcOnqlSpYuXq1q2r4w0bNuS7nmGUKUMDMl269em8OPfcc63yhx9+qON169ZZOXM4b9iOu/GSKX26Xbt2OnZvZTF79mwdu0tiL1u2LLEVS5KC3KfJlil92tSrVy+rbC4xnpdlzBcsWGDlJk6cqGP3uJFqHMJHRERERESUTzyBIiIiIiIiCognUERERERERAGFbg5UNE2bNtXxww8/bOUaNGgQ8XG33367VTbH2LtLpe7ZsycfNUysdBtbXalSJavsLlP9zz//6Pj777+3cieeeKKO3fkSK1asiFcVQysTx1ZnonTr03nhLlNtzk015zECwB9//JGUOqUS+3RmKMh9mmyZ0qcrVKig41dffdXKNW7cWMfu+YR7K5CBAwfq2L2FUJhxDhQREREREVE+8QSKiIiIiIgooLQawpfpODQgc2TK0IBMxz6dOdinMwP7dOZgn84MHMJHRERERESUTzyBIiIiIiIiCognUERERERERAHxBIqIiIiIiCgg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T2eONGxrfiaLQRq28yUA2iulrkjqftPgfY2IiIiIiCgUkn4jXSIiIiIionTFEygiIiIiIqKAeAJFREREREQUUKRlpQEAIsIJUiGilIp0z5V8Y1uHS6Lamu0cLuzTmYN9OjOwT2cO9unMEKmdeQWKiIiIiIgoIJ5AERERERERBcQTKCIiIiIiooB4AkVERERERBQQT6CIiIiIiIgC4gkUERERERFRQDyBIiIiIiIiCognUERERERERAHxBIqIiIiIiCggnkAREREREREFxBMoIiIiIiKigHgCRUREREREFFDhVFeAiIiIyHTIIYfouEKFClauf//+Om7RooWVU0rp+KWXXrJyQ4cOtcrffvttfqtJlFGaNm1qle+//34dH3fccVZu4sSJVvnDDz/U8dtvv52A2iUXr0AREREREREFxBMoIiIiIiKigHgCRUREREREFJCY44X3S4pETlLSKaUkUc/Ntg6XRLV1OrVz165ddXziiSdauQ4dOlhlkf9ermjHtC+++MIqT5o0ScejR4+2cuvWrQtc11hlap8+7bTTrLLZvnfeeaeVO/roo61yoUL/fe/38MMPWzmzDZcvX57vesYT+3TevPrqqzq++uqrI25n9n0gev9fvHixVb7kkkt0vHLlyjzWMGeZ2qczUUHt0+6cQ7MvNm7c2MqZ/S23vrh69Wodn3zyyVZuw4YNsVU2CSK1M69AERERERERBcQTKCIiIiIiooA4hC+NcGiA58EHH9RxnTp1rFzRokWt8umnn65j97K0ebn51ltvtXLPPPNMvuuZHwV1aICrfv36Ou7WrZuVu+6663RsDttKlG+++cYqDxgwwConYtnVTOrTZ511lo7Hjx9v5dy+GU204ZrmEBF3H+ZxY/fu3YH3Fy+Z0qeDatOmjVXu2bOnVTaP7e7QoM2bN+vYXZrcHPLpDv1zh+WecsopOv7999+DVDtXmdSnb7jhBh27773PP/98TM+ZlZVllQ888MCI25rtWaJECSu3bdu2mPafF+ncp6tUqWKVzWHxvXr1snLmcXbatGlWrn379jp2h+F16tTJKg8fPlzH7t+HOWQ/bDiEj4iIiIiIKJ94AkVERERERBQQT6CIiIiIiIgCyog5UIcffrhVvuiiiyJu+/333+v422+/tXK7du2Ka73yKpPGVkdjjqtt2rSplRsxYoRVXrVqlY7PO+88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fKvMJc9jV7NmTR23bt3ayrVs2VLH5pL3wP7tbj7P119/beXMZdYHDBhg5dx+HBa8AkVERERERBQQT6CIiIiIiIgC4gkUERERERFRQKGeA+UylzWOpmLFila5W7duVrlHjx46DjrnCQDuvPNOHYd1TGamM8fjAva46I8++ijJtclMvXr1ssrm6z558uS47KNcuXJW2Vy+2h133aBBAx27cycrVKgQcR8///yzVR4zZkye60nBTJ06VcfmLSny6p9//tHx6tWr81UnCi9zLky1atWsnLkM9ubNm5NWp3RVsmRJq3zppZdaZXO+oLlEPQCcddZZEZ/XbAdzbiIAfPfdd1bZ7P+zZs2ycuvWrdPxlVdeaeXM5dFbtGhh5dz3Gs6Bis58LW+77TYrZ36uinZbIHcJenNeE2DfisidL2U+1r2VRZs2bXQcbVn9ZOMVKCIiIiIiooB4AkVERERERBQQT6CIiIiIiIgCSsocKHNsoztH5fLLL7fK5tyGBQsWRHxOdzzrrl27dNyvXz8r546RjsYc33nFFVdYuffeey/w81BqPPXUU1b56aef1vGePXuSXJvMtGPHDqs8ffp0HTdp0sTKmWOd27Zta+UqV64c0/7dcdjm3MW8MI8pALBp06aYnieTmK+92w5BHxcv7v3AzL9L9/5fidg/JY4536V27dpWzpz79uabbyatTumqWbNmVtmdQ27Oe4p2PydzrhIA3HHHHTr+4osvrFys92QcPHhwxJw7d+vGG2+0yua9Aml/P/74o47d+zCZZXcO1OjRo3V85JFHWrmLLrrIKpv3azXvCeU+T40aNazcq6++quOTTz454nMmG69AERERERERBcQTKCIiIiIiooCSMoSvZ8+eOu7fv3/gx7lLGSbD66+/rmN3CcZTTz1Vx+7wwr179ya2YpQj97K9u8zqc889l8zqUA7MS/4ff/yxlTPLo0aNsnITJkzQ8SGHHGLlypcvH88q5mjr1q0J30dBYw7xiTbcx2UO9ahXr56V+/bbbwM/T+HC/72lnXnmmVbOvGWFW7e81JWS74ILLrDKw4cPj7jt0KFDdWweQyhn7tLg0bjLkT///PM6do/fv/76a/4qRkllft51P/uazNuCAPZy5NOmTbNy0abhuDlzKO7XX39t5U466SQdu0usd+3aNeI+Eo1XoIiIiIiIiALiCRQREREREVFAPIEiIiIiIiIKKClzoB544IFk7CYuzKUv3WUwTb/99ptVdufeTJo0Scf//POPlfvyyy91bM65ory7+OKLrfK8efOs8sqVK5NYG8qPpUuXWuU6dero2F0e1VzGGACuuuoqHZvjpQHggAMOiKk+AwcOjOlxmWzy5Mk67tKli5U7/PDDIz4uKytLxzfffLOV69ixY+D9lypVSsfm3FuXe7zevXt34H1Qcphz2Nz5NWafdnOvvPJKYitWwLhLg7vzzcy5Kg8++KCVmzt3buIqFoA5/4aSw70VkTl/9O23347LPiZOnGiVzXZO5bLlLl6BIiIiIiIiCognUERERERERAElZQjf448/ruN4Dedzh1yYw+Lc4T5Vq1aNyz5Nhx12WNT8LbfcEuh5OIQv7+6//34dt2vXzsqZS81TwbFq1Sqr/Mwzz1hl8872d999t5U77bTTAu3jxRdftMrLly/PSxUJ9t3smzZtauXeeecdHVerVi3ic7hDMPOiSZMmgbYz/14A4Omnn455n+nKfa3M9+kPP/zQyq1YscIqFyr033evbj9xHxura6+9VseVK1eOuN2YMWOs8vr16+Oy/0zhDsMzh9MC9rLV8+fPT0aVIipZsqRVPu+883QsIlYuE/t0MvTq1csqm0P44tX3atWqZZXN483s2bPjso944BUoIiIiIiKigHgCRUREREREFBBPoIiIiIiIiAJKyhyo/v3769hc3hsAbr/9dqtcqVIlHc+aNcvKff755zp2x+Ju2rRJx+44WXNpW5c7DvzAAw/Ucbly5azcueeeG/F5GjZsaJULF4780sZrjHimuPXWW61yv379dOwulWzOwaCC44gjjrDKHTp0sMo9evTQcbS+F82IESOssrusOuWNu9ys+XpGmwOVF2XLlrXK7vGAbOb768iRI62cOa/XnYPgMuebmHMg8sKc1wDsv7R8UBdeeKFVNj8b7NixI6bnpP+ket6T+ZnspZdesnIVK1bU8ffff2/lvvjii8RWLEO5/T0Ry5jXrFnTKsd6bEg0XoEiIiIiIiIKiCdQREREREREAUm0y+8iEtu1+QxUpkwZq9yqVSsdf/PNN1Zu8eLFOt6zZ0/gfSilJPetYhO2tjaXUnUvxf/11186Pvvss61cXl7PMEtUWyejnd1hVY0aNYrpeczlUs2hGgBw6KGHxvScP//8s1UePXq0jh97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l14a5QYPHpzpHBMmTCiYD9tr7NixDagdymHppZeOykcccYSP02ue3nvvvajcrVu34lUMAJDZ9ddf7+PNNtssyqX3WAjfmzfffPPiVqwEuAIFAAAAABkxgAIAAACAjGpiCt+6664blV944QUfv/LKK1GuX79+PmZqVvU59thjo/Lee+/t4/Tl5VDXrl2j8ujRo308a9asKHf44YdH5fnz5ze0mjXln//8p48HDRpUlOe45JJLfNyqVasod+211xblOVFY27Zto3Lnzp3zHnvIIYf4OL2NeceOHaNy+Jo9d+7cvOdcZZVVovKqq67q4xtuuCHKhVNAJWnq1Kl5zwsASDz99NM+3nTTTTMf2xJwBQoAAAAAMmIABQAAAAAZMYACAAAAgIxa5BqolVZaKSr/5z//icrhHPsLLrggyrHuqfKFW5Wn1zydf/75Ufmdd97Je542bdr4+F//+leUW2KJJXwcrs+QpLfeeit7ZWtAuE25FK95kqSdd9656HUI19ussMIKRX8+1C+9Bmn33Xdv1HlmzpwZlYcNG5bpcUcffXRUvvjii32cnqt/1FFHReURI0Y0oIZAbRg4cGBUPvDAA33cv3//KLf66qv7+O67745y6T798ccf+3jcuHFRbuLEiY2pKkrkiy++yJv75JNPovI//vGPYlenpLgCBQAAAAAZMYACAAAAgIwYQAEAAABARi1mDdSAAQN8PGrUqCi3wQYbROW99trLx7feemtxK4Zm97vf/c7H6TVs6fsM/PrXv857nvC+MFtssUWUe+yxx3x82223NaqeLVmXLl18fOmll0a5Yt3rqZCzzjrLxxdddFGznDN9H6P99tvPx+m/s8mTJzfLc7Yk4TrCcrjsssuict++fX2cvu9T+j0CQOK3v/2tj//85z9Hudatf/oIaWZRzjnn4/rWwYaPTa9r/uijj3ycfj9vafcVqgbdunWLyuE6uLSbb745Kr/66qvFqFLZcAUKAAAAADJiAAUAAAAAGVXcFL4OHTr4eNasWVEuvMwbXlaWpNNOO83Ho0ePjnLrrLNOVF555ZWbWEuU0nnnnReVjzvuOB+ntx8fPnx4VJ43b56P01Oy7rjjDh+nt9sMt0r+/vvvG1jjlq9Hjx4+Hjx4cLOc86STTorKn376aebHXn311c1Sh9DZZ58dlY855hgfP/vss1Fu//3393Etb3Pf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puzVhnAZQNrYsWNLWJPG4woUAAAAAGTEAAoAAAAAMmIABQAAAAAZtZg1UOH2mnvssUeUC7dRluJ5+n369Ily7733no+HDRsW5dLbrqI8GrLeZJtttvHxAQccEOWuvfbaZqtTrfnuu+98PGPGjCgXrnlKW2211aLybbfd5uPw9gINFa5vadeuXaPPk1V6i+7w91FL0usTQ+nX3XAt2qRJk/I+rkePHlF52223jcoTJ070cb9+/aLcbrvt5uMddtgh73Ok3XjjjVH59ddfz/xYZPenP/3Jx6effnqU+9nPfhaVeb+tDOGtQD799NMoF5bDfpl29913R+V02+67774+Tq9L/+KLL7JXFhUtfG3fZJNN8h5XLa+/XIECAAAAgIwYQAEAAABARlU7hW///fePyldffbWPW7VqVfCx4XbJ8+bNi3KdO3f28ZtvvtmUKqJIBg8enDf30UcfReVll13WxyNGjIhy4Zb1s2bNap7K1YhwCtZBBx0U5dJblaen7YWWXnrpRcYNZWY+ds41+jxZHX/88VH59ttv93GhqSwtzfrrr5/52DPPPNPHG220UZQLp2+G03mkhaeEfvnllz5ebrnlMj9/6JVXXonKl1xySaPOUyuee+65qBy+/06dOjXzecIpl2GfRcv29NNPR+X09M3zzjvPx9tvv32Uu+GGG4pWL5RWeNuSlVZaKcpNmTLFx08++WTJ6tQUXIECAAAAgIwYQAEAAABARgygAAAAACAjK7RewMyKv5igkZZYYomovOuuu+Y99sEHH4zKX331lY9PO+20KDdy5Egfp7dDnj9/foPr2Zycc0WbNF7JbZ125ZVX+viQQw6JcuktkMOty0855ZQoF67N+fDDD5uzik1WrLYuRTuPGzcuKg8aNKjYT6nFFvvpu6AFCxZkftzjjz/u4/SajP79+2c+zy9+8QsfN2QNVLX36bvuuisqF9rWvJLsueeeUTlcFytJs2fPbvbnrOY+ne4L559/vo/T/W369Ok+TvepcEv6++67L8qlbxuSXp9cLaq9T5dD+Df00ksvRbn0rWYqSTX36VLo27dvVA4/G3Tp0iXKha/J6W3vyy1fO3MFCgAAAAAyYgAFAAAAABlV7RS+Ygnvuj1kyJAoF257XQ5MDUi88cYbPl5zzTWjXMeOHaPyHnvs4eNwq3tJ2njjjX384osvNmMNm66apwasssoqUXn8+PE+bt++fZQLp8m2bdu20c8ZThWaM2dOlPvtb3/r4/T2qOF03hNOOCHKHXnkkVG50O0RanUK31ZbbRWVwyl9TdmWvrE+/fRTH4fbnUvSySef7OP7778/yn377bfFrZiqu08X0r1796g8YMAAHy+zzDJRLpyaM23atGJWq2yqvU+XQziFL/1eHL5PV5qW2qcba5111onK6anR4WeD9Pvkz3/+8+JVrImYwgcAAAAATcQACgAAAAAyYgAFAAAAABmxBirliiuu8PGWW24Z5dZbb71SVyfC3OrE+++/7+P0epuDDz44Kp944ol5z7Ppppv6+Ouvv26m2jWPWplbPWLECB8PHDgwyq244oo+Tt9S4K233orK4Rqo22+/Pcpdd911jarba6+9FpXXXnvtvMfW6hqotN/85jc+vvjii6Nc+tYTjRWuW5sxY0aUC29nMXXq1GZ5vuZSK3261rW0Pl0KrIGKlaOd27Rp4+P07SjCWw589913Ua53794+Tt8qJlyDLsXv27/85S+j3DvvvNOwCpcQa6AAAAAAoIkYQAEAAABARgygAAAAACAj1kClhOsu3nzzzSi3+eab+3jy5Mklq1Md5lYnCq2BSps7d66Pw/URkvTwww83b8WaUUuaW91YPXr08HGHDh2i3HPPPVf052cNVNPstttuUXmttdby8Q477BDlttlmGx+/8MILUe6GG26IyjfffLOP33vvvSbXs1To07WhJffpYmENVKwc7XzQQQf5+J///GeUe/31130c3utPkoYOHerjLl26RLl58+ZF5V122cXHDzzwQOMrW2KsgQIAAACAJmIABQAAAAAZMYUvpXXr1j5+7LHHotzs2bN9nJ6CUgpMDUiEl37DqT+S9Pbbb0fl4cOH+3jChAnFrVgzaklTA6oVU/jQnOjTtYE+Xb+RI0dG5fPOO8/H++67b5RLT+GtJC21T7/77rtRuVu3bpked+WVV0blc889NypPmzatSfUqF6bwAQAAAEATMYACAAAAgIwYQAEAAABARqyBKiC9JeMzzzzj4/79+0e5Dz74oOj1YW517Wipc6sRo0/XDvp0baBPL6xz585ROX37gXDr8m233TbKzZkzp2j1air6dG1gDRQAAAAANBEDKAAAAADIqHX9h9SuTz/9NCrfeeedPq7ky8oAAADNqVevXlE5vI3ITTfdFOX6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KtS89Hbxd9xxh4+XXnrpUldHp556alR+6qmnfFzsW5hwBQoAAAAAMmIABQAAAAAZMYACAAAAgIxYA4WSWXbZZaPy008/7eO111477+O+/fbbqByugWqKNm3aNMt50Dy++OKLqByuV1prrbWi3KRJk6LyGmuskfe8J554oo9Z85TYeeedo/J5553n427dukW51q1/epto27ZtlPv000+j8vrrr+/jPfbYI8qF6xp/+OGHKDdv3jwf33bbbVHu3//+98L/AznPPvtsVC72nHc0Tbju6cEHH4xyK6ywQlQO71H53nvvRbkzzzzTxxMmTGjOKqIEBgwYkPnYcE1b+v5RKI1wHXH69Tn9nhCaP39+VH700Ud9nF7bHlpllVWi8h/+8AcfL7HEElFuk002icrh2knWQAEAAABAhWAABQAAAAAZVfQUvvQl/e7du/v48MMPb5bnuPLKK6NyekpKPh988EFUTl+qxMLS280WmrYXmjhxYt7c448/3uj6FLr0jNJbfPHFo3I4zeO0006LcoWm7KWlp/9AOumkk6JyOLVqypQpUS7cYvyll16KculpWOF0v/T0iXDqRfp2A+EUka5du0a5m2++OSqHtz9IT/u84IILfHzXXXdFualTpwqllZ5uE07F6dKlS5QLp3hK0ptvvunjcBquJN1yyy3NVUWUQDh1S5K22mqrzI8Nj00/ji3ri6NHjx5R+cYbb/RxQz43pd9n/vznPzeqPnvuuaePe/bs2ahzFANXoAAAAAAgIwZQAAAAAJARAygAAAAAyKjka6BatWoVlddcc82oHG6ve/TRR0e51Vdfvdnrc/DBBzfqcektGMNtVSVp8uTJPl6wYEGjnqPapbei/Otf/5r5seE2x3PmzMl73LRp0xpcrzrhmjoUz8orr+zj/v37R7kdd9zRx+k1cT//+c8zP8fnn3/u49GjR0c5tjle2PDhw6PyNddc4+NXX301yh144IHN/vyPPfZYVA7XLqV17NgxKofrtYYMGRLlwrUyw4YNi3Lh+0n6+VEc5557blTef//9fRxuUy4tvLX9scce6+N77rmnCLVDMRVau5RWaC0Ta6BKr127dlG5ffv2mR73n//8JypfdNFFjXr+9K000vshVAquQAEAAABARgygAAAAACCjkkzhW2211Xx8ySWXRLnddtst83nCrcO//vrrpldMC2+Dvcsuu/h41VVXzfu4wYMHFywfd9xxPr744oujXHrqQkvVqVOnqFzo95k2Y8YMH7/wwgvNVicUX3gncEl66623fLzkkks26pzp2ws89dRTUflPf/qTj1988cVGPUctSU/TC7cR//7770tdnYLS26E/88wzPv7ss8+iXDj1I/3eMmrUKB9vvPHGUe66666Lyunt0ZFduM38Fltskflx22+/fVRmmmV1SU+vS29dHkpPvRs4cKCPTz/99LznTd/OIn0smsd2222X+dhvv/3Wx2effXaUa+zylfRtSjp37pz32PRtN8LPjsXGFSgAAAAAyIgBFAAAAABkxAAKAAAAADIqyhqorl27RuWHHnrIxz169Cj42HAr0/R8yv/7v//z8UcffdSUKuZ1zjnn+HiTTTaJcn369PFxemvf9P9zuH1jep7+9ddf39RqtnjhFujpufDhnNdw/i0qw2KLxd/LNHbd09tvv+3jLbfcMspNnz69UefEoqXXGVWS8NYWkjRmzBgfd+jQIcotvfTSec+z2Wab+Tg9x//ll1+Oyg8//HBDq4mccP1C+J5Zn3CttCQNHTo077HvvPOOj5988skG1A7NKVyf1Ng1T2npdU3pdU8ovnXXXTfzseH64/R6pMbac889Mx+bvm3JV1991Sx1yIIrUAAAAACQEQMoAAAAAMioKFP4wkt6UjxtLz31LpyqJUnz58/38bRp06JcsabthT788MNFxpI0btw4H4fTCSXp3nvvjcrhJdD0JehamcKX/v39/e9/j8pHHHFEpvP069evYBmVZfbs2VH59ttv9/GgQYOiXOvW+V+C5s2b5+P030p4TkmaNGlSg+uJ6rDyyitH5fR7RuiVV17Je9wpp5zi41mzZkU5puyV3zXXXBOVC93u47vvvvPxr371qyiXfi9G82nIVuWhQlP26hNO/0s/fzjdjy3Ny+Okk07ycXoa7llnnRWVwyU633zzTZQLb3MzfPjwvM+Xfu1O34qolLgCBQAAAAAZMYACAAAAgIwYQAEAAABARlZonrGZ5U8WkD5nWP7b3/4W5cI5kZLUt29fH99www1R7oorrmhMdUrimGOOicp/+ctf8h6b3uY5K+ecNeqBGTS2rdPb0r/11lt5j23VqlVUPvTQQ32cXq+wwQYb+Di9Fe5yyy3n40LbFtfniy++8HGnTp0afZ5iKFZbN7adm0t6++h77rnHx4svvnijzztq1CgfX3DBBVGu0GtcuVVin6406b+LcP3pkCFDoly4/e0LL7wQ5T755JMi1C67ltqn0zp37uzjCRMmRLm11lor7+PS74sLFixo1PNvs802Pk5vn10KLa1PZ92qPC1c99SUdgjXNhXa0tysaL/2vFpqnw5v5yNJI0eObPbn+O9//xuVu3fv7uOePXvmfVx6b4Q111yzOau1SPnamStQAAAAAJARAygAAAAAyIgBFAAAAABkVJQ1UNdee21UHjp0qI/De7tIC9/DIbzXUiXr2rVrVE7P5+zVq5eP33333SjX2DmbLW1udWOF82NPOOGEKLfffvtlPg9roCpL+l5Pxx57rI8LrZ1I23///aPy/fff7+PPP/+8kbUrDvp0wy2//PI+Tt9zcOedd/Zx+t5gw4YN83H6XmWlUIt9OlyPJElbb721j3fcccco99xzz0Xl/v37+3jttdfO/JzhesgLL7ww8+OaS0vr0+G6p/R9mELpez011/oz1kCVXrgeSZImTpzo43J/VkrfI+rqq68u+nOyBgoAAAAAmogBFAAAAABkVJQpfOnLfw899JCP11hjjSg3efLkqPy73/3Oxw3ZMrMYVl111ah84IEH+vjggw+Ocun/59ABBxwQlf/1r381qj4tbWpAc0hPAwm3xU5LX+IPp/CtsMIKzVuxJmqpUwMaYtlll/Xx4YcfHuXCaR2S1LZt27znmT59et7z3HXXXU2oYdPRp5umdevWUTncJv+WW26JcuE0lOOOOy7Kvfjii81fuRT6dMMss8wyPn744Yej3MYbb5z3cUzha5r0566s0/aKtWV81il8Z5xxRt7HFUut9Ol27dr5ePPNN49ygwYN8nE4TVqK+3BTzJ0718fh5wJp4WVBxcAUPgAAAABoIgZQAAAAAJARAygAAAAAyKh1/Yc03LRp06LyL3/5Sx+/8cYbUW799dePyvfee6+PX3311Sj32Wef+fiKK65oajUXKVwjsc4660S51VZbLfN5wu21x44d2/SKYZEasiV8er1fofV/KL+vvvrKx+eff36US69vOeaYY3ycXp+48sor+/imm26Kcr/4xS98nN72GpUvPf89fP/YdNNNo1y43u3UU0+Ncr/5zW+i8owZM5qrimikcH3bEkssUcaa1JZCa57S65yKte6pMSqpLi1NeNuHBx98MMqF5b/85S9R7vrrr4/K/fr1y/R84Xu/JO2zzz4+LsWap6y4AgUAAAAAGTGAAgAAAICMijKFL+3dd9/18QYbbBDl9thjj6gc3lm+d+/eec+5/fbbN0/lGumtt96KypdffnlUHj16tI+ZKlY8DzzwQLmrgDJ4++23o/KIESN8vNRSS0W5cEpfervznXbaycdM4at+Sy+9tI832WSTKLfccsv5OP2+k57u17Vr1yLUrnrttddeUfmSSy7x8Zlnnhnl/v73vzfLc55zzjk+7tWrV+bHNdfz14qGbPf92GOPFa8iOen6FNq6PMQUvvJLv05sttlmmR/73HPP+fiUU06JcpX6OY8rUAAAAACQEQMoAAAAAMiIARQAAAAAZFSSNVDz58/38ZQpU6Lc66+/HpXvu+8+H4frGtLC+eyStPPOOzelios0bty4qHz22Wf7+IMPPohy4RbrAMonXH8oLbyteahv377Frg6aWbgt/b777hvlwu3IC93iYO7cuVH5v//9bzPVrmVKrznu0qWLjy+44IIo98orr/j4iSeeyPwcBx10UFQ+7LDDMj1u1113jcpz5szJ/JxomAEDBkTlhqyfKnSeQlunh9LrnEqxJgux7t27R+Vbb73VxxtuuGGUW2yx7NdojjvuOB835HWjnLgCBQAAAAAZMYACAAAAgIxKMoWvkPRdhcOtDA844IC8j2vTpk1UXnHFFfMeu8Yaa0TlcPrG9OnT8z7u448/jso//vhj3mNRfVq1auXj9u3bR7mvv/661NWpCR07dozKI0eO9HF6Om9orbXWisp33nlnVN599919PGzYsMz1eeaZZzIfi9JI361+7733jsrhlMxlllkm83nDu9v//ve/j3JXX311Q6pYc7p16xaVw1tzpG8bEE59T0+ffe+993x8+OGHR7n0lL1Ct/+YOXOmj//3v//lPQ7NKz3VLuvUu6YIp+0NHDiw6M8Had11143KRx11lI+HDx8e5dKfxQsJl/BceumlUW7ixIkNqWJF4AoUAAAAAGTEAAoAAAAAMmIABQAAAAAZWaF5xmaWP4mSc85Zsc5drW299tprR+WpU6dmfux3333n40033TTKvfrqq02rWBMVq63L3c5t27aNyuF2paXYUjy95mmnnXby8RdffFH050+r1T693377ReVwbcOvfvWrKNeuXbu850nfFiOcR//OO+9EuSuvvNLHn3/+efbKNpNq7tMrrbRSVL777rt93Lt37yhX6DNFIWbxryc8z6RJk6JcuLZq8uTJjXq+Yqn2Pl1oa/LTTjutWZ7jjDPOaNTzV5pK6NMdOnTw8T777BPlrr/+eh9/8803US69/f+JJ57o4/Sa4/A5GmLChAlROVyrHK5JrXT52pkrUAAAAACQEQMoAAAAAMiIARQAAAAAZMQaqCpS7XOri2HllVeOyi+99FJUXn755fM+NpwTfOihh0a5W2+91cfz589vShUbpRLmVpdCOCf6lFNOiXLhvSjS95opZMGCBVE5XCeTvv/PQw89lPm8xVCrfTp9/6azzjrLx+uvv36US69rDNffhPcVksq/drGQltSnO3Xq5ONHHnkkyq233nqNOmd6DdTtt9/u4+OPPz7KTZs2rVHPUQq12qdrUSX06YsvvtjHI0aMiHLhZ5f0Z/3wPpi552xIFb1wDeKoUaOi3AMPPJC3PtWENVAAAAAA0EQMoAAAAAAgI6bwVRGmBtTvqaeeisr9+vVr1Hk23HBDH5djm9xKmBpQbj179vTxzTffnDcnSZ9++qmP01tkP/zww0WoXfOgT9eOltqn09MxBw8e7OP0dL4DDjjAx+k+fd9990XlsN/OnTu3yfUsFfp07aiEPj169GgfH3XUUcWoTnT7j4suuijK/e9///PxRx99VJTnLzem8AEAAABAEzGAAgAAAICMGEABAAAAQEasgaoizK2u35gxY6LyYYcdlvfYcEvNsWPH5n3cjz/+2Ey1y64S5laj+OjTtYM+XRvo07WjEvr0kCFDfHzhhRdGua5du2Z+zueff97HZ599dpQLtyP/7rvvMp+zpWANFAAAAAA0EQMoAAAAAMiIKXxVhKkB9evWrVtUvuqqq3zcp0+fKHfDDTf4OH0H73KrhKkBKD76dO2gT9cG+nTtoE/XBqbwAQAAAEATMYACAAAAgIwYQAEAAABARqyBqiLMra4dzK2uDfTp2kGfrg306dpBn64NrIECAAAAgCZiAAUAAAAAGTGAAgAAAICMGEABAAAAQEYMoAAAAAAgIwZQAAAAAJBRwW3MAQAAAAA/4QoUAAAAAGTEAAoAAAAAMmIABQAAAAAZMYACAAAAgIwYQAEAAABARgygAAAAACCj/wfNAe1aegH6gAAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "n_rows=7\n", "n_cols=7\n", "fig, axs = plt.subplots(n_rows, n_cols, figsize=(15, 15))\n", "for i, idx in enumerate(np.random.choice(false_indices.flatten(), n_rows*n_cols)):\n", " ax = axs[i%n_rows][i//n_rows]\n", " ax.imshow(x_test[idx], cmap='gray')\n", " ax.set_title(f'{preds_one_hot[idx]} (true: {y_test[idx]})')\n", " ax.axis('off')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We see that some digits are indeed not clearly written and may be guessed wrongly by the human as well.\n", "Also it turns out that those classic datasets itself contain errors in its labeling as well, see [labelerrors.com](https://labelerrors.com/) and {cite}`northcutt2021pervasive`.\n", "\n", "Therefore having a success rate of $100\\%$ on a machine learning problem is always sketchy and most likely occurs due to leakage of the y-labeled data into the input variable X." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3" } }, "nbformat": 4, "nbformat_minor": 4 }