{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Basics with string sequence"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* Find this notebook at `EpyNN/epynnlive/dummy_string/train.ipynb`.\n",
"* Regular python code at `EpyNN/epynnlive/dummy_string/train.py`.\n",
"\n",
"Run the notebook online with [Google Colab](https://colab.research.google.com/github/Synthaze/EpyNN/blob/main/epynnlive/dummy_string/train.ipynb).\n",
"\n",
"**Level: Beginner**"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In this notebook we will review:\n",
"\n",
"* Handling sequential string data.\n",
"* Training of Feed-Forward (FF) and recurrent networks (RNN, LSTM, GRU).\n",
"* Differences between decisions and probabilities and related functions.\n",
"\n",
"**It is assumed that all *basics* notebooks were already reviewed:**\n",
"\n",
"* [Basics with Perceptron (P)](../dummy_boolean/train.ipynb)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**This notebook does not enhance, extend or replace EpyNN's documentation.**\n",
"\n",
"**Relevant documentation pages for the current notebook:**\n",
"\n",
"* [Fully Connected (Dense)](https://epynn.net/Dense.html)\n",
"* [Recurrent Neural Network (RNN)](https://epynn.net/RNN.html)\n",
"* [Long Short-Term Memory (LSTM)](https://epynn.net/LSTM.html)\n",
"* [Gated Recurrent Unit (GRU)](https://epynn.net/GRU.html)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Environment and data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Follow [this link](prepare_dataset.ipynb) for details about data preparation."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Briefly, these dummy string data consist of sequences of characters. Sample features are each represented by one sequence and can be either associated with a positive or negative label.\n",
"\n",
"Positive sequences are met when the first element in the sequence is equal to the last element in this same sequence, and reciprocally."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"# EpyNN/epynnlive/dummy_string/train.ipynb\n",
"# Install dependencies\n",
"!pip3 install --upgrade-strategy only-if-needed epynn\n",
"\n",
"# Standard library imports\n",
"import random\n",
"\n",
"# Related third party imports\n",
"import numpy as np\n",
"\n",
"# Local application/library specific imports\n",
"import epynn.initialize\n",
"from epynn.commons.io import one_hot_decode_sequence\n",
"from epynn.commons.maths import relu, softmax\n",
"from epynn.commons.library import (\n",
" configure_directory,\n",
" read_model,\n",
")\n",
"from epynn.network.models import EpyNN\n",
"from epynn.embedding.models import Embedding\n",
"from epynn.flatten.models import Flatten\n",
"from epynn.rnn.models import RNN\n",
"from epynn.gru.models import GRU\n",
"from epynn.lstm.models import LSTM\n",
"from epynn.dense.models import Dense\n",
"from epynnlive.dummy_string.prepare_dataset import prepare_dataset\n",
"from epynnlive.dummy_string.settings import se_hPars\n",
"\n",
"\n",
"########################## CONFIGURE ##########################\n",
"random.seed(1)\n",
"\n",
"np.set_printoptions(threshold=10)\n",
"\n",
"np.seterr(all='warn')\n",
"\n",
"configure_directory()\n",
"\n",
"\n",
"############################ DATASET ##########################\n",
"X_features, Y_label = prepare_dataset(N_SAMPLES=480)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's control what we retrieved."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"480\n",
"12\n",
"['G', 'A', 'C', 'T', 'T', 'G', 'G', 'C', 'C', 'A', 'T', 'C']\n",
"1\n"
]
}
],
"source": [
"print(len(X_features))\n",
"print(len(X_features[0]))\n",
"print(X_features[0])\n",
"print(Y_label[0])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We retrieved a set of sample features describing ``480`` samples.\n",
"\n",
"Each sample is described by ``12`` string features.\n",
"\n",
"Herein the label is ``1`` because the first and last element are different."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Feed-Forward (FF)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To compare Feed-Forward and recurrent networks, we are going to train a simple Perceptron first."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Embedding"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The principle of [One-hot encoding of string features](prepare_dataset.ipynb#One-hot-encoding-of-string-features) was detailed before.\n",
"\n",
"Briefly, we can not do math on string data. Therefore, the one-hot encoding process may be summarized as such:\n",
"\n",
"* List of all elements of size vocab_size. This basically answers: what is the number of distinct elements we can find in your data?\n",
"* Each element is associated with one index in the range(0, vocab_size). This provides an ``element_to_idx`` encoder.\n",
"* For one sample and for each element in the associated list of features, a zero array is initialized. This array is set to one at the index which is assigned to the ``element_to_idx`` encoder.\n",
"\n",
"This is achieved during instantiation of the *embedding* layer by setting up ``X_encode=True``."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"embedding = Embedding(X_data=X_features,\n",
" Y_data=Y_label,\n",
" X_encode=True,\n",
" Y_encode=True,\n",
" relative_size=(2, 1, 0))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's inspect some properties."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'A': 0, 'C': 1, 'G': 2, 'T': 3}\n",
"[[0. 0. 1. 0.]\n",
" [1. 0. 0. 0.]\n",
" [0. 1. 0. 0.]\n",
" ...\n",
" [1. 0. 0. 0.]\n",
" [0. 0. 0. 1.]\n",
" [0. 1. 0. 0.]]\n",
"{0: 'A', 1: 'C', 2: 'G', 3: 'T'}\n",
"['G', 'A', 'C', 'T', 'T', 'G', 'G', 'C', 'C', 'A', 'T', 'C']\n"
]
}
],
"source": [
"print(embedding.e2i) # element_to_idx\n",
"print(embedding.dtrain.X[0])\n",
"\n",
"print(embedding.i2e) # idx_to_element\n",
"print(one_hot_decode_sequence(embedding.dtrain.X[0], embedding.i2e))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Encoded sequences may be decoded as shown above."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Flatten-Dense - Perceptron"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's inspect the shape of the data."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(320, 12, 4)\n"
]
}
],
"source": [
"print(embedding.dtrain.X.shape)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"It contains 320 samples (m), each described by a sequence of 12 features (s) containing 4 elements (v).\n",
"\n",
"12 features is the length of the sequences and 4 elements is the size of the vocabulary. Remember one-hot encoding makes a zero array of this size and sets 1 at the index corresponding to the element being encoded.\n",
"\n",
"Still, the fully-connected or *dense* layer can only process bi-dimensional input arrays. That is the reason why we need to invoke a *flatten* layer in between the *embedding* and *dense* layer."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"name = 'Flatten_Dense-2-softmax'\n",
"\n",
"se_hPars['learning_rate'] = 0.001\n",
"\n",
"flatten = Flatten()\n",
"\n",
"dense = Dense(2, softmax)\n",
"\n",
"layers = [embedding, flatten, dense]\n",
"\n",
"model = EpyNN(layers=layers, name=name)"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": []
},
"source": [
"Initialize using most classically a *MSE* or *Binary Cross Entropy* loss function."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[1m--- EpyNN Check OK! --- \u001b[0m\r"
]
}
],
"source": [
"model.initialize(loss='BCE', seed=1, se_hPars=se_hPars.copy(), end='\\r')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Train for hundred epochs."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[1m\u001b[37mEpoch 49 - Batch 0/0 - Accuracy: 0.738 Cost: 0.55582 - TIME: 2.14s RATE: 2.34e+01e/s TTC: 0s \u001b[0m\n",
"\n",
"+-------+----------+----------+-------+--------+-------+------------------------------------+\n",
"| \u001b[1m\u001b[37mepoch\u001b[0m | \u001b[1m\u001b[37mlrate\u001b[0m | \u001b[1m\u001b[32maccuracy\u001b[0m | | \u001b[1m\u001b[31mBCE\u001b[0m | | \u001b[37mExperiment\u001b[0m |\n",
"| | \u001b[37mDense\u001b[0m | \u001b[1m\u001b[32mdtrain\u001b[0m | \u001b[1m\u001b[32mdval\u001b[0m | \u001b[1m\u001b[31mdtrain\u001b[0m | \u001b[1m\u001b[31mdval\u001b[0m | |\n",
"+-------+----------+----------+-------+--------+-------+------------------------------------+\n",
"| \u001b[1m\u001b[37m0\u001b[0m | \u001b[1m\u001b[37m1.00e-03\u001b[0m | \u001b[1m\u001b[32m0.688\u001b[0m | \u001b[1m\u001b[32m0.694\u001b[0m | \u001b[1m\u001b[31m0.631\u001b[0m | \u001b[1m\u001b[31m0.640\u001b[0m | \u001b[37m1635014418_Flatten_Dense-2-softmax\u001b[0m |\n",
"| \u001b[1m\u001b[37m5\u001b[0m | \u001b[1m\u001b[37m1.00e-03\u001b[0m | \u001b[1m\u001b[32m0.716\u001b[0m | \u001b[1m\u001b[32m0.731\u001b[0m | \u001b[1m\u001b[31m0.609\u001b[0m | \u001b[1m\u001b[31m0.620\u001b[0m | \u001b[37m1635014418_Flatten_Dense-2-softmax\u001b[0m |\n",
"| \u001b[1m\u001b[37m10\u001b[0m | \u001b[1m\u001b[37m1.00e-03\u001b[0m | \u001b[1m\u001b[32m0.719\u001b[0m | \u001b[1m\u001b[32m0.750\u001b[0m | \u001b[1m\u001b[31m0.596\u001b[0m | \u001b[1m\u001b[31m0.609\u001b[0m | \u001b[37m1635014418_Flatten_Dense-2-softmax\u001b[0m |\n",
"| \u001b[1m\u001b[37m15\u001b[0m | \u001b[1m\u001b[37m1.00e-03\u001b[0m | \u001b[1m\u001b[32m0.728\u001b[0m | \u001b[1m\u001b[32m0.750\u001b[0m | \u001b[1m\u001b[31m0.585\u001b[0m | \u001b[1m\u001b[31m0.601\u001b[0m | \u001b[37m1635014418_Flatten_Dense-2-softmax\u001b[0m |\n",
"| \u001b[1m\u001b[37m20\u001b[0m | \u001b[1m\u001b[37m1.00e-03\u001b[0m | \u001b[1m\u001b[32m0.728\u001b[0m | \u001b[1m\u001b[32m0.750\u001b[0m | \u001b[1m\u001b[31m0.577\u001b[0m | \u001b[1m\u001b[31m0.595\u001b[0m | \u001b[37m1635014418_Flatten_Dense-2-softmax\u001b[0m |\n",
"| \u001b[1m\u001b[37m25\u001b[0m | \u001b[1m\u001b[37m1.00e-03\u001b[0m | \u001b[1m\u001b[32m0.734\u001b[0m | \u001b[1m\u001b[32m0.756\u001b[0m | \u001b[1m\u001b[31m0.571\u001b[0m | \u001b[1m\u001b[31m0.590\u001b[0m | \u001b[37m1635014418_Flatten_Dense-2-softmax\u001b[0m |\n",
"| \u001b[1m\u001b[37m30\u001b[0m | \u001b[1m\u001b[37m1.00e-03\u001b[0m | \u001b[1m\u001b[32m0.734\u001b[0m | \u001b[1m\u001b[32m0.756\u001b[0m | \u001b[1m\u001b[31m0.566\u001b[0m | \u001b[1m\u001b[31m0.587\u001b[0m | \u001b[37m1635014418_Flatten_Dense-2-softmax\u001b[0m |\n",
"| \u001b[1m\u001b[37m35\u001b[0m | \u001b[1m\u001b[37m1.00e-03\u001b[0m | \u001b[1m\u001b[32m0.734\u001b[0m | \u001b[1m\u001b[32m0.762\u001b[0m | \u001b[1m\u001b[31m0.562\u001b[0m | \u001b[1m\u001b[31m0.585\u001b[0m | \u001b[37m1635014418_Flatten_Dense-2-softmax\u001b[0m |\n",
"| \u001b[1m\u001b[37m40\u001b[0m | \u001b[1m\u001b[37m1.00e-03\u001b[0m | \u001b[1m\u001b[32m0.734\u001b[0m | \u001b[1m\u001b[32m0.762\u001b[0m | \u001b[1m\u001b[31m0.559\u001b[0m | \u001b[1m\u001b[31m0.583\u001b[0m | \u001b[37m1635014418_Flatten_Dense-2-softmax\u001b[0m |\n",
"| \u001b[1m\u001b[37m45\u001b[0m | \u001b[1m\u001b[37m1.00e-03\u001b[0m | \u001b[1m\u001b[32m0.734\u001b[0m | \u001b[1m\u001b[32m0.756\u001b[0m | \u001b[1m\u001b[31m0.557\u001b[0m | \u001b[1m\u001b[31m0.582\u001b[0m | \u001b[37m1635014418_Flatten_Dense-2-softmax\u001b[0m |\n",
"| \u001b[1m\u001b[37m49\u001b[0m | \u001b[1m\u001b[37m1.00e-03\u001b[0m | \u001b[1m\u001b[32m0.741\u001b[0m | \u001b[1m\u001b[32m0.756\u001b[0m | \u001b[1m\u001b[31m0.555\u001b[0m | \u001b[1m\u001b[31m0.581\u001b[0m | \u001b[37m1635014418_Flatten_Dense-2-softmax\u001b[0m |\n",
"+-------+----------+----------+-------+--------+-------+------------------------------------+\n"
]
}
],
"source": [
"model.train(epochs=50, init_logs=False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Plot the results."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"tags": []
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEWCAYAAAB8LwAVAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAABKiklEQVR4nO3dd3hUZdr48e+dZNJ7o0NCLwmhg9gQRLFhL6x9V3l1V11ddXXV18X6c1d9d93VXVcs6Fqwu8paERDphCIQuhAgQRII6XUy8/z+OCdxCJOQQJJJuT/Xda6Z85x2n8lk7vOc55zniDEGpZRSqi4/XweglFKqbdIEoZRSyitNEEoppbzSBKGUUsorTRBKKaW80gShlFLKK00QSimlvNIEoTolEZkkIlm+jkM1jYgMEpH1IlIsInf4Op6OThNEGyYit4lIuohUisicOtNCReQfInJIRApFZLHHtLtEZJeIFInIfhH5i4gEeEzPFJFyESmxh6/rrPsuETlgL/+qiAR5THtMRDaKSLWIzGog9ldFxIhIfy/TBohIhYi86VHWTUQ+teM1IpJUZ5lYEXlXRPLsfX5LRCIb8RkaESn12NeCYy3jZR03iMiSOmVzROTxpq7rOLZd87cqFpECEVkmIreISJv63xWR60Vkjf2dyRKRP3t+55rR74GFxpgIY8zf7M/nzBbYjkITRFu3H3gceNXLtJeAWGCI/XqXx7RPgVHGmEggBUgD6h5tXWCMCbeHs2oKReRs4H5gCtAH6As84rHcTqx/0v/WF7SInAL0a2C/XgBW1ylzA18Cl9azzONADJBsr7sLMKuBbXhK89jX6EYu05ZcYIyJwPp7PAXcB7zi25COEgrcCcQD47G+P/e0wHb6ABktsF7ljTFGhzY+YP04zvEYHwwUAZGNWDYOmA/8w6MsEziznvnfBp70GJ8CHPAy35vALC/lAcA6YDhggP51pl8FvIf14/5mPcsbIKlO+RfArz3GfwN81Yj9PyoGu3wSkOUxfj/wI1AMbAYutsuHABWACygBCoCZgBOosss+s+ftDnwIHAR2A3d4rH+Wvd9v2NvIAMY0Iv6j/lbAOKyEmmKPBwHPAHuBHOBFIMRzP4G7gVzgJ+BGj3Wda+9vMZAN3OMx7Xxgvb3Py4DhTfjO/q7mc6ln+jgg3f4e5wD/5zFtuv35FACLgCF2+QL771Bhf+7v2J9DuT3+eyDJ/pvfCOwD8oFbgLHABnudz3tsq5+93jzgEPAWEO0x7TDWwVbN3/cgMMmXvwetOfg8AB0a8Uc6OkFcB2wE/mJ/qTcCl9ZZ5hf2P5+xv9RpHtMy7X/Kg8DXdab9AFzpMR5vryOuzvrrSxD3As/Z74/4cQYige1AT5qeIM4HPseqRcTY/9R3NuKza2yCuNz+AfADrgRKgW72tBuAJXWWnwM87jHuB6wBHgYCsWpeu4Cz7emz7B+2cwF/4P8BKxoRfyZekjlWMrjVfv8XrFpjLBABfAb8P4/9rAYeBRz29suAGHv6T8Cp9vsYjx/DkVgJZbwd7/V2LEGN/M5+AjzVwPTlwLX2+3Bggv1+oP3ZT7Xj/T1WrTXQnr4IuKm+z4efE8SLQDBwlv25fwIkAj3s/Trdnr+/va0gIAFYDPzVY303YyXQUOAr4Blf/x605qCnmNqnnlinjgqxftRuA14XkSE1Mxhj3jbWKaaBWP8sOR7LX431j9QHWAh8JSLR9rRwe701at5HHCsoEekF/A/Wj6Q3jwGvGGOOp3F4LdYPb549uIB/NHZZ+/x9gYj8zdsMxpj3jTH7jTFuY8y7wA6so9zGGgskGGMeNcZUGWN2AbOxakw1lhhjPjfGuIB/Y536O177gVgREawazV3GmMPGmGLgyTrbdQKPGmOcxpjPsY62B3lMGyoikcaYfGPMWrt8JvAvY8xKY4zLGPM6UAlMOFZgIvJLYAxWraY+TqC/iMQbY0qMMSvs8iuB/xpjvjHGOO11hAATj7XdOh4zxlQYY77GSjjvGGNyjTHZwPdYCRBjzE57W5XGmIPA/wGn16zEGDMbK0GtBLoBDzYxjnZNE0T7VI71D/a4/WP0HdYP/Vl1ZzTG7MCqrv/Do2ypMabcGFNmjPl/WNXuU+3JJVhH+jVq3hc3Iq6/Yv0QFdadICIjgDOxjnaPx3tYtY8IO6YfsWoxjTHKGBNtD16vfBGR6+yrYwrshuwUrNpTY/UBunskogLgAay2khoHPN6XAcEn0JDbA+v0RwLW0e0aj+1+aZfXyDPGVNfZdrj9/lKsWsUeEflORE7y2J+76+xPL3sfr/Zo9P/CMygRuQirdnSOMeaQXeZt/l9hHbxsFZHVInK+Xd4d2FOzPmOMG+tUUY8mfj6eB0TlXsbD7di6iMhcEckWkSKs71Tdv/tsrO/D340xlU2Mo11riasMVMvb4KWsoX7bA2i40dgAYr/PwDqyfc8eTwNyjDF5jYhrCnCKiPzZo2y5iPwWq3qfBOy1DnoJB/xFZKgxZlQj1j0C+I0xphRARF4EljS4RCOJSB+sH4EpwHJjjEtE1vPzZ+Lts61btg/YbYwZ0BwxNURExmL9YC7BOsVYDgyzj46bxBizGrhQRBxYNdH3sBLBPuAJY8wT9Sz6lpe4pmF9jucZYzZ6bOOtuvPbBy4z7KuxLgE+EJE4rJpRqsc6xY6nvn070ecVPGmvI9UYc9hOcM97bD8c68DnFWCWiHxojDl8gttsN7QG0YaJSICIBGOdA/YXkZojzsVY56D/YM9zMnAG1jlSROQmEUm03w8F/gB8a4/3FpGTRSTQXt+9WEdMS+3NvgH8SkSG2qedHsI6314Tk8OOyQ8IsNfhb08eiJVQRtgDwAXAx1hXXfXzmPYi1pVQZ3usOxjrXDBAkD1eYzVwk4iEiEgI1ikQb4nyeITxc1sNInIj1hFjjRygp4gE1inr6zG+CigWkfvsGP1FJMX+MW8WIhJpH2nPxWq/2WgfYc8G/uLxN+9hX412rPUF2kf3UfbpnCKsRl/sdd4iIuPFEiYi54mI11ONIjIZKwlcaoxZ1YhtXyMiCXb8BXaxGytBnSciU+ykdTfWqa1l9ayq7t+hqSKwas2FItIDqw3N03NAujHmJqzv64snsK32x9eNIDrUP2A1bJo6wyx72jCshr5SPK66sae9hvWPU4rViPc0EOyx3AZ7Wh5W4hhTZ7u/s5cvstcV5DFtjpeYbqgnfq8NxB779qaX+Y8YPKYlYzW+5mGdWvkSGNCIz7CxjdRP2Os9hHUe+jvsxlCsto//1ky3ywbw8xU+n9hl3bGurDmAdfXMCuwG1Lr7y8+NqQHHiD8Tq4ZQjNUetBzrCi5/j3mCsY6Ed9l/sy3YV1DV3U+PdZ5p79eXdqxFWEn4FI/5ptllBViN2e8DEfXEuRCrMbzEY/iigf16E6uxuASr1nqRx7SLsb7ThfbfYZjHtEUc2Uh9IdbBUgHWZbVHfa5YV3FNqrPthzz+H9bYcazHSkhZHuvOBmLt8XCs9oirff3b0FqD2DuulFJKHUFPMSmllPJKG6lVuyYip2LdRHcUY0y4t/K2RER6Y51O8WaoMWZva8ajlCc9xaSUUsqrDlODiI+PN0lJSb4OQyml2pU1a9YcMsYkeJvWYRJEUlIS6enpvg5DKaXaFRHZU980baRWSinllSYIpZRSXmmCUEop5ZUmCKWUUl5pglBKKeWVJgillFJeaYJQSinlVYe5D0Ip1QZkfAI5Gb6Owjf6ToKkk30dRbPSBKGUOnHGwHd/gkX/zy6QBmfveAx8/yxcOhtSLvV1MM1GE4RS6sQYA/NnwdK/woirYfrfwc//WEt1LJXF8PaV8OFN4KyAkVf7OqJmoW0QSqnj53bDF/dZyWHMr2D6850vOQAERcDVH0Dy6fCfX8Oq2b6OqFloglBKHR+3C+b9Flb9C066Dc57Fvw68U9KYCjMmAsDz4HP74Flf/d1RCesE/81lVLHzVUNH/8PrH0DTvs9nPU4SGdrd/DCEQxX/huGXgRfPwTf/dk6BddOaRuEUjX2roSt83wdRftwYAPsWgRTHoZT7/Z1NG2LvwMufQUcIbDwCcjdAlE9W3abUb1g/MxmX60mCKUAtn4O719vHe356b/FMfkHwrQ/wYRbfB1J2+QfABf+A4KjYe3rLV+L6DFKE4RSLWLTh/DRTOiWBtd8CCExvo5IdQR+fnDOU9bQTmkbhOrc1r9tXZrYcxxc+4kmB6U8tGiCEJFpIrJNRHaKyP1epv9FRNbbw3YRKfCY5vKY9mlLxqk6qdWvwCe3WpcmXvMhBEf6OiKl2pQWO8UkIv7AC8BUIAtYLSKfGmM218xjjLnLY/7bgZEeqyg3xoxoqfhUJ7f8BfjqAeuSxMvnWFefKKWO0JJtEOOAncaYXQAiMhe4ENhcz/wzgD+2YDwdW9F+60fP5fR1JG1f2SGr3WHoRXDJbAgI9HVESrVJLZkgegD7PMazgPHeZhSRPkAysMCjOFhE0oFq4CljzCdelpsJzATo3bt380TdXi1/wRqCo3wdSfsw+kY49xnrahOllFdt5b/jKuADY4zLo6yPMSZbRPoCC0RkozHmR8+FjDEvAS8BjBkzpv3ejXKi3G7I+BgGToNfzPV1NEqpDqIlG6mzgV4e4z3tMm+uAt7xLDDGZNuvu4BFHNk+oTztXQ5F2ZB6ma8jUUp1IC2ZIFYDA0QkWUQCsZLAUVcjichgIAZY7lEWIyJB9vt44GTqb7tQmz6AgBCrBqGUUs2kxU4xGWOqReQ24CvAH3jVGJMhIo8C6caYmmRxFTDXmCNuNRwC/EtE3FhJ7CnPq5+UB5fTekjLoHMgKNzX0SilOpAWbYMwxnwOfF6n7OE647O8LLcMSG3J2DqMXYug/LCeXlJKNTu9k7q92/ShdeVS/zN9HYlSqoPRBNGeOcthyzwYcgEEBPk6GqVUB9NWLnNVx2PH11BVDCl6ekmpzqi0spq3Vu6hqtrNbZMHNPv6NUG0Zxs/gLBESD7N15EopVpRYZmTOcsyeW3ZbgrKnJw5pAvGGKSZH9qkCaK9qiiC7V/B6Os75zOAleqEDhZX8sqS3by5Yg8lldWcOSSRX5/Rn1G9W6YXYk0Q7dXW/4KrUk8vtTC32/BlxgF+yCrgslE9GdAlwtchqQ5sU3Yhc1fvpbTSddS0ymoX327Jpcrl5rzUbvzmjP4M6dayPRBrgmivNn0AUb2h1zhfR9IhOV1uPl2/n38s2smPB0sBeGnxLqYN68pvzuhPSg/t80o1n/TMwzy/cCeLth0kNNCf+HDvF51MT+vOrZP60Tehde550gTRHpXmwY8LYeLt+qD4ZlbhdPHBmixe/O5HsvLLGdw1gr/PGMmEvnG8sTyTOcsy+WLTAU4fmMBtk/szNinW1yGrdsoYw5Kdh3h+wU5W7j5MbFgg9549iGtP6kNksMPX4QGaINqnzZ+AcenNcc3ssx/289i8zeQWVzKiVzSzLhjGlCGJtQ1/d581iJtP68u/l+/hlSW7ufzF5YzqHU2PmFAfR96+xYY6uPakPvRPPP7Td7nFFbyxbA97Dpc1Y2QtK/NQKRuzC+kSGcT/nj+UGeN6ERrYtn6SxbT0w7RbyZgxY0x6erqvw2gdr50LpYfgNyu1BtFM3lq5hwc/3kRar2h+f/YgJvaLa/CKkPIqF++s2sv7a7KodB59vlg13v7Cciqr3cd1+i67oJx/ffcj767eh9Plpk9cGO3lPyIsKIAZ43pz6egeBAX47kITEVljjBnjbVrbSlfq2AqzYc8yOOMBTQ7N5JUlu3ls3mYmD07kH1ePIthx7H/WkEB/fnlKMr88JbkVIuzYDpdW8eqS3bxun76bNCiB287oz5gGTt/tOljCPxf9yMfrshGBS0b25NZJ/UiKD2vFyDs+rUG0hrLD8NWD4Cw98XUVZkN2Oty+FuL6nfj6OqiM/YW8n57F8J5RTE/rToC/904Dnl+wg2e+3s65qV3565UjCQzQzgV8pajCWXv67nBpFSN7R9Mt6uhHwRZXVLN05yEc/n7MGNebmaf1pXt0iA8i7hgaqkFogmgNXz4AK/8J8QObZ309x8CFLzTPujqYNXvyeWHhThZszcVPwG2gV2wIt5zej8tG96ytyhtjeObrbbyw8EcuHtmDpy8bXm8SUa2rrKqad1bt4+N1WVQ63UdN9xPhjMGJ/OqUZBIitIuZE6UJwpcKs+FvI60G5Yv+4etoOiRjDMt+zOP5BTtZviuPmFAHvzw5metOSmKVffngD/sK6BIZxM2n9mXGuN48+/V2Xl26mxnjevHERan4+enpOtU5aYLwpc/uhHVvwu1rIKaPr6NpEzIPlTJnWSb7C8qbZX37C8vZlF1EYkQQM0+zEkBY0M/Na8YYlu7M4/mFO1ix6zDBDj8qnG5umJjEHy8Y2uzdEyjVnmgjta8c3gXr/g2jb9DkAGw7UMw/Fu3ksx/2E+DvR99malAMdvjz+EUpXDa6p9cGZhHhlAHxnDIgnjV7DjN78W6Gdo/k9sn9NTko1QBNEC1p0VPg54DT7vV1JD61IauA5xfs5OvNOYQG+nPTqX256ZRkEiOPboBsaaP7xDL6Wr25TanG0ARxPHbMh5yNMPG34FdPw2buFtjwnnW3c0TX1o2vhczfnMPc1ftoymnJ/LIq1u4tIDI4gDumDODGiUnEhAW2YJRKqeaiCeJ4LPkL7FkCuVutq4n8vXyMC5+AwHA45a7Wj68FfLQ2i3ve/4GukcHEhjf+B97fz4/7pg3mmgm9iWgj3QcopRpHE0RTGQO5GRDZAzbMheoKuGQ2BHj8aO5fB1s+g9Pvh9D2fzrj7ZV7efCTjZzUN46Xrx/T5roDUEq1DP1Pb6qSHCjPh0l/AJcTvn7QShKXv87SPSV8uCaLPxb9kaiQGDjpN76O9oTV3GV8xqAE/nnN6EbdZayU6hg0QTRVTob1mjjEepKbIxj+ezd5L1/Mr7NmMsC9i6ig73gz4lf02VfJKf2b/ylPreWFhTt5+qttTBvWlb/N0LuMlepsNEE0Ve4W6zVxqPU69ibWH6gkNf1B3g4pZEBCKGV58bxUMYW9r6wirVc0t53RnymDE9vNzVjGGJ79ejvPL9zJhSO68+zlaXqXsVKdkCaIpsrdYj0HOiwegA/XZHHvsiRuT7yPO4ueRn5yEXjuM3wzalrtcwVufiOdwV0j+PUZ/TkvtRv+zZwoap5h8FXGAdzNcONjaaWL9fsKuGpsL564OLXZ41VKtQ96J3VTvTQJgiLh+k9ru4g+uX8cs68bQ2jmt1bj9HnPQoDVR0y1y81nG/bzwsIf2ZlbQnJ8GLee3o+LRvY44VM2ZVXVvL1yLy8t3kVucSX9E8OJDmmeK4VO7h/Pb6cMaDe1HqXU8dGuNpqL2w1PdocxN/JK+MwmdRHtdhu+yjjA8wt3krG/iO5Rwcw8rS9Xjevd5IbfwnInbyzL5NWlu8kvc3JS3zhum9z/mM8wUEqpurSrjeaSvxuqy1lekshjizZzTkpXnruqcY23fn7COandmJbSlUXbD/LCgp3M+mwzzy/cSb8mPF/WAFv2F1FcWc3kwYn85oz+jO4TcwI7pZRS3mmCaAq7gfqV7SGMTYrh7zNGNrnxVkQ4Y1AiZwxKZOWuPOYsy+RwaVXjlwemDu3Cr05NZlj3xj95SymlmkoTRFPYCWJZUQKPnd37hK/sGd83jvF945ojMqWUanZ67WJT5GZwOLA7roBQzhrWxdfRKKVUi9IE0QQmZwsbnd2ZPDhR+xVSSnV4miAaq7oS8naw0dmD6WndfR2NUkq1OE0QjXVoB2Jc7PFP4ozBib6ORimlWpwmiEZyHrD6YEroO0I7rFNKdQqaIBpp39Z0qow/48aO83UoSinVKjRBNFLpvo3ske6cPEjbH5RSnYMmiEYorawmtmQHZdGDcGivpkqpTkJ/7Rph0YYf6SGHiE1O83UoSinVajRBNML6NSsA6DFwtI8jUUqp1tOiCUJEponINhHZKSL3e5n+FxFZbw/bRaTAY9r1IrLDHq5vyTgbUlBWRVnWBgD8ug7zVRhKKdXqWqwvJhHxB14ApgJZwGoR+dQYs7lmHmPMXR7z3w6MtN/HAn8ExmB1YLrGXja/peKtz5ebDtCffbgCQvGP6t3am1dKKZ9pyRrEOGCnMWaXMaYKmAtc2MD8M4B37PdnA98YYw7bSeEbYFoLxlqvT3/YT1rgfvy6DAU/PSOnlOo8WvIXrwewz2M8yy47ioj0AZKBBU1ZVkRmiki6iKQfPHiwWYL2lFtUwfJdeQz2y0IShzT7+pVSqi1rK4fEVwEfGGNcTVnIGPOSMWaMMWZMQkJCswc1b8NPxJpCQqvzoYu2PyilOpeWTBDZQC+P8Z52mTdX8fPppaYu2yJcbsOHa7OYGpdnFWgNQinVybRkglgNDBCRZBEJxEoCn9adSUQGAzHAco/ir4CzRCRGRGKAs+yyVvPKkl1k7C9iRlKJVZCoNQilVOfSYlcxGWOqReQ2rB92f+BVY0yGiDwKpBtjapLFVcBcY4zxWPawiDyGlWQAHjXGHG6pWHFWgCO4dnTrgSKe+Wo7Zw3twvDAbAiNh/DmP4WllFJtmXj8LrdrY8aMMenp6U1fsDALXjsHJj0AI2ZQWe3iwueXcqikkq/uPI24d84FRwjcMK/5g1ZKKR8TkTXGmDHepukzqUNiICYZPrkFqsv5v4MnsfVAMa9cP4a4UAcc3Aojr/F1lEop1eraylVMvhMYBr94DwacDfPuwrn0BWaM68WUIV2gcC9UlWgDtVKqU9IaBIAjmOKLXiP92Ut5OODfVMX0BoZD7hZrujZQq07O6XSSlZVFRUWFr0NRxyk4OJiePXvicDgavYwmCNtjX+zk4/Jfs2JIInHfPQHuSqvtASBxsG+DU8rHsrKyiIiIICkpCRHxdTiqiYwx5OXlkZWVRXJycqOX0wQBfJ1xgPfSs/jNGQOJm/oazLsTvn8GgqMgujcERfg6RKV8qqKiQpNDOyYixMXF0dQeJzp9G8TB4kr+8NFGhnWP5LdTBoKfP5z/HIz7H6gohARtf1AK0OTQzh3P36/T1yAC/f04fVACt57ej8AAO1/6+cE5f4KuqdrFhlJt0KxZswgPD+eee+5hzpw5nHXWWXTv3rTHAb/44ouEhoZy3XXXtVCU7V+nTxBRoQ7+74oRR08QgVHXtno8SqmmmTNnDikpKV4ThMvlwt/f3+tyt9xyS0uHdtyqq6sJCPD9z3OnP8WklGofnnjiCQYOHMgpp5zCtm3bAPjggw9IT0/n6quvZsSIEZSXl5OUlMR9993HqFGjeP/995k9ezZjx44lLS2NSy+9lLKyMsCqhTzzzDMATJo0ifvuu49x48YxcOBAvv/++6O2X1JSwpQpUxg1ahSpqan85z//qZ32xhtvMHz4cNLS0rj2WuvAMicnh4svvpi0tDTS0tJYtmwZmZmZpKSk1C73zDPPMGvWrNoY7rzzTsaMGcNzzz3HZ599xvjx4xk5ciRnnnkmOTk5tXHceOONpKamMnz4cD788ENeffVV7rzzztr1zp49m7vuqn3cznHzfYpSSrUrj3yWweb9Rc26zqHdI/njBfWfzl2zZg1z585l/fr1VFdXM2rUKEaPHs1ll13G888/zzPPPMOYMT/fDBwXF8fatWsByMvL4+abbwbgoYce4pVXXuH2228/ahvV1dWsWrWKzz//nEceeYT58+cfMT04OJiPP/6YyMhIDh06xIQJE5g+fTqbN2/m8ccfZ9myZcTHx3P4sNUr0B133MHpp5/Oxx9/jMvloqSkhPz8hp95VlVVRU2PEPn5+axYsQIR4eWXX+bPf/4zzz77LI899hhRUVFs3Lixdj6Hw8ETTzzB008/jcPh4LXXXuNf//rXsT72Y9IEoZRq877//nsuvvhiQkNDAZg+fXqD81955ZW17zdt2sRDDz1EQUEBJSUlnH322V6XueSSSwAYPXo0mZmZR003xvDAAw+wePFi/Pz8yM7OJicnhwULFnD55ZcTHx8PQGxsLAALFizgjTfeAMDf35+oqKhjJgjPuLOysrjyyiv56aefqKqqqr08df78+cydO7d2vpiYGAAmT57MvHnzGDJkCE6nk9TU1Aa31RiaIJRSTdLQkX5bERYWVvv+hhtu4JNPPiEtLY05c+awaNEir8sEBQUB1o95dXX1UdPfeustDh48yJo1a3A4HCQlJTX5xsGAgADcbnfteN3lPeO+/fbb+d3vfsf06dNZtGhR7amo+tx00008+eSTDB48mBtvvLFJcdVH2yCUUm3eaaedxieffEJ5eTnFxcV89tlntdMiIiIoLi6ud9ni4mK6deuG0+nkrbfeOu4YCgsLSUxMxOFwsHDhQvbs2QNYR+7vv/8+eXnWs2NqTjFNmTKFf/7zn4DVWF5YWEiXLl3Izc0lLy+PyspK5s2rvxPQwsJCevSwHqT5+uuv15ZPnTqVF154oXa8plYyfvx49u3bx9tvv82MGTOOez89aYJQSrV5o0aN4sorryQtLY1zzjmHsWPH1k674YYbuOWWW2obqet67LHHGD9+PCeffDKDBx9/rwhXX3016enppKam8sYbb9Sua9iwYTz44IOcfvrppKWl8bvf/Q6A5557joULF5Kamsro0aPZvHkzDoeDhx9+mHHjxjF16tQG45k1axaXX345o0ePrj19BVY7Sn5+PikpKaSlpbFw4cLaaVdccQUnn3xy7WmnE6XdfSuljmnLli0MGaI3jbZ1559/PnfddRdTpkzxOt3b37Gh7r61BqGUUu1cQUEBAwcOJCQkpN7kcDy0kVoppdq56Ohotm/f3uzr1RqEUkoprzRBKKWU8koThFJKKa80QSillPJKE4RSqt3x7GivqW644QY++OCDZo6oY2p0ghCR0JYMRCmlOgNv3Xi0VcdMECIyUUQ2A1vt8TQR+UeLR6aUUh68dfe9detWxo0bVztPZmZmbSd1jz76KGPHjiUlJYWZM2dyrJuC6+sW3Fu33eC9i++6tZPw8HAAFi1axKmnnsr06dMZOnQoABdddBGjR49m2LBhvPTSS7XLfPnll4waNYq0tDSmTJmC2+1mwIABtY8Ldbvd9O/fv8mPDz0ejbkP4i/A2cCnAMaYH0TktBaNSinVdn1xPxzY2Lzr7JoK5zxV7+T6uvsePHgwVVVV7N69m+TkZN59993aHlFvu+02Hn74YQCuvfZa5s2bxwUXXFDvNi655BKv3YJ767Y7IyPDaxffDVm7di2bNm2q7ZX11VdfJTY2lvLycsaOHcull16K2+3m5ptvZvHixSQnJ3P48GH8/Py45ppreOutt7jzzjuZP38+aWlpJCQkNPrjPV6NOsVkjNlXp8jVArEopZRXnt19R0ZGHtHd9xVXXMG7774LcESCWLhwIePHjyc1NZUFCxaQkZHR4DY2bdrEqaeeSmpqKm+99Vbt/AsWLODWW28Ffu62u74uvhsybty42uQA8Le//Y20tDQmTJjAvn372LFjBytWrOC0006rna9mvb/85S9ruw5/9dVXm6231mNpTA1in4hMBIyIOIDfAltaNiylVJvVwJG+L1x55ZVcfvnlXHLJJYgIAwYMoKKigl//+tekp6fTq1cvZs2adcyuuRvbLXhDPLvzdrvdVFVV1U7z7Mp70aJFzJ8/n+XLlxMaGsqkSZMajK9Xr1506dKFBQsWsGrVqhPqlbYpGlODuAX4DdADyAZG2ONKKdUqGuruu1+/fvj7+/PYY4/V1h5qfmzj4+MpKSlp1FVL9XUL7q3b7vq6+E5KSmLNmjUAfPrppzidTq/bKiwsJCYmhtDQULZu3cqKFSsAmDBhAosXL2b37t1HrBes5z1cc801XH755fU+Z7u5HTNBGGMOGWOuNsZ0McYkGmOuMcbktUZwSikFDXf3DVYt4s033+SKK64ArL6Jbr75ZlJSUjj77LOPmt+b+roF99Ztd31dfN9888189913pKWlsXz58iNqDZ6mTZtGdXU1Q4YM4f7772fChAkAJCQk8NJLL3HJJZeQlpZ2xBPmpk+fXvs86tZyzO6+ReQ14KiZjDG/bKmgjod2961Uy9Huvn0vPT2du+66i++///6419HU7r4b0wbh+cijYOBiYP9xR6iUUqpJnnrqKf75z3+2WttDjWMmCGPMh57jIvIOsKTFIlJKKXWE+++/n/vvv7/Vt3s8XW0MABKbOxCllFJtyzFrECJSjNUGIfbrAeC+Fo5LKaWUjzXmFFNEawSilFKqbak3QYjIqIYWNMasbf5wlFJKtRUN1SCebWCaASY3cyxKKdUos2bNIjw8nHvuuYc5c+Zw1lln0b179yat48UXXyQ0NJTrrruuUfNnZmYyZMgQBg0ahDGGsLAwXnvtNQYNGgTAF198wf/+7/9SVlZGUFAQkydP5tlnn2XWrFnMnj37iL6TFi1aRHR0dJPi9YV6E4Qx5ozWDEQppY7HnDlzSElJ8ZogXC5XvXcd33LLLU3eVr9+/Vi/fj0A//rXv3jyySd5/fXX2bRpE7fddhv//e9/GTx4MC6X64geWu+66y7uueeeJm/P1xp1FZOIpIjIFSJyXc3QyOWmicg2EdkpIl6v0bLXu1lEMkTkbY9yl4ist4dPG7c7SqmOylt33x988AHp6elcffXVjBgxgvLycpKSkrjvvvsYNWoU77//fr3deHs+dGjSpEncd999jBs3joEDBzbqZrSioiJiYmIA+POf/8yDDz5Yewe2v79/bQd/7VljrmL6IzAJGAp8DpyDdR/EG8dYzh94AZgKZAGrReRTY8xmj3kGAH8ATjbG5IuI5+Wz5caYEU3aG6VUi/vTqj+x9fDWZl3n4NjB3Deu/osj6+vu+7LLLuP555/nmWeeYcyYn28GjouLY+1aq5k0Ly/PazfedVVXV7Nq1So+//xzHnnkEebPn3/UPD/++CMjRoyguLiYsrIyVq5cCVg9wd599931xv+Xv/yFN998E4CYmBgWLlzYiE/F9xpzJ/VlQBqwzhhzo4h0Ad5sxHLjgJ3GmF0AIjIXuBDY7DHPzcALxph8AGNMblOCV0p1Dp7dfQNHdPftjWcfRps2beKhhx6ioKCAkpISzj77bK/LXHLJJQCMHj2azMxMr/N4nmJ69913mTlzJl9++eUx42+vp5gakyAqjDFuEakWkUggF+jViOV6AJ7PkcgCxteZZyCAiCwF/IFZxpiaTztYRNKBauApY8wnjdimUqqFNXSk31Z4dpLX2G68g4KCAOv0UGMeCzp9+vTajvOGDRvGmjVrSEtLO/Hg25B62yBE5AUROQVYJSLRwGxgDbAWWN5M2w/AujN7EjADmG1vC6CP3YHUL4C/ikg/LzHOFJF0EUlvjcfvKaV8o6HuviMiIiguLq532fq68T5RS5YsoV8/62fp3nvv5cknn2T79u2A9SyIF198sdm25SsN1SC2A08D3YFS4B2s9oRIY8yGRqw7myNrGj3tMk9ZwEpjjBPYLSLbsRLGamNMNoAxZpeILAJGAj96LmyMeQl4CazeXBsRk1KqHfLs7jsxMfGI7rtvuOEGbrnlFkJCQli+/Ohj15puvBMSEhg/fnyDyeRYatogjDEEBgby8ssvAzB8+HD++te/MmPGDMrKyhARzj///NrlPNsgAD755BOSkpKOO47W0pjuvvsAV9lDCFaieNsYs+MYywVgJZkpWIlhNfALY0yGxzzTgBnGmOtFJB5Yh/VAIjdQZoyptMuXAxd6NnDXpd19K9VytLvvjqGp3X035oFBe4wxfzLGjMQ6DXQRcMxLGIwx1cBtwFdYjyh9zxiTISKPikhNC9NXQJ6IbAYWAvfaDyMaAqSLyA92+VMNJQellFLNrzGXuQZgXdp6FVZtYBEwqzErN8Z8jnVprGfZwx7vDfA7e/CcZxmQ2phtKKWUahkN9cU0FavGcC6wCpgLzDTGlLZSbEoppXyooRrEH4C3gbtr7lNQSinVeTTUF1On6YzPVVKCf3i4r8NQSqk25XieKNehVO3bx65zziX/vfd8HYpSSrUpnT5BBHTpQtDQIRz44ywKPvrY1+EopRrBs6O9prrhhhv44IMPvJYnJyczYsQIBg8ezCOPPFI7raSkhP/5n/+hX79+jB49mkmTJtX2w+Tv78+IESNqh6eeeur4dqoNakxXGx2aX2AgPf/2N7Ju/TU/PfggEuBP1DH6eVFKdUxPP/00l112GRUVFQwdOpTrrruO5ORkbrrpJpKTk9mxYwd+fn7s3r2bzZutK+9DQkJq+2fqaDp9DQLALyiIni88T+i4cey//w8UffGFr0NSStXhrbvvrVu3Mm7cuNp5MjMzSU21rpB/9NFHGTt2LCkpKcycOZNj3RTsqaKiArD6dPrxxx9ZuXIljz/+OH5+1k9mcnIy5513XnPtWpvV6WsQNfxCQuj1z3+wd+ZMsu+5F/z9iTzrLF+HpVSbc+DJJ6nc0rzdfQcNGUzXBx6od3p93X0PHjyYqqoqdu/eTXJyMu+++25tT6633XYbDz9s3XZ17bXXMm/ePC644IIG47j33nt5/PHH2blzJ3fccQeJiYmsWLGCESNG1PvgofLyckaMGFE7/oc//OGI3mTbM61BePALDaXXi/8iJDWV7N/dTfGC9tFnu1IdnWd335GRkUd0933FFVfw7rvvAhyRIBYuXMj48eNJTU1lwYIFZGRkeF23p6effpr169dz4MABvv32W5YtW3bMZWpOMdUMHSU5gNYgjuIfHkav2S+x91c3kf3b39L96aeJnOa9/3ilOqOGjvR94corr+Tyyy/nkksuQUQYMGAAFRUV/PrXvyY9PZ1evXoxa9as2tNGjREeHs6kSZNYsmQJl156KT/88EODjy/tqLQG4YV/RAS9Z79E0JAhZN95J9n33Et1vt4rqJSvNNTdd79+/fD39+exxx6rPXqvSQbx8fGUlJR4vWqpIdXV1axcuZJ+/frRr18/xowZwx//+MfadozMzEz++9//NtPetV2aIIBq99EPB/GPiiLpzX8Tf/ttFH31FbvOv4CiL7/yQXRKKc/uvs8555wjuvsGqxbx5ptvcsUVVwAQHR3NzTffTEpKCmefffZR89fn3nvvZcSIEQwfPpzU1NTap8y9/PLL5OTk0L9/f1JSUrjhhhtITLSekFzTBlEz3H///c245751zO6+24vj7e47tyyXmV/P5PaRtzOlzxSv81Rs285PDzxARUYGEWedRdeH/5eA+PgTDVmpdkO7++4Ymr27744uNCCU8MBw7vnuHubvOfoh5QDBgwaS9O5cEn73O0oWLWLXeedT8NHHGJerlaNVSqnW0+kTRHhgOC+e+SIp8Snc+929fLPnG6/zSUAA8TNvJvnjjwhMTuanBx5g90UXUfTNN026vloppdqLTp8gwE4SU4+dJACC+vWjz9tv0eMv/4epdpF9+x1kXn4FJUuWaqJQSnUomiBsYY4wXpz6IsMThnPvd/fyVWb9DdLi50fkOefQ97NP6fbEE7gOH2bfTTex99rrKFuzphWjVqr16AFQ+3Y8fz9NEB7CHGH888x/kpaQxn2L7+PLzC8bnF8CAoi+9BL6fvkFXR56iMrMTPZcfQ2Zv7ia4vnzMW53K0WuVMsKDg4mLy9Pk0Q7ZYwhLy+P4ODgJi3X6a9i8qbMWcat82/lh4M/8PBJD3Nx/4sRkWMu5y4ro+DDjzg8Zw7O7GwCk5KIvfFGoi6cjl8T/zBKtSVOp5OsrKwm3Wym2pbg4GB69uyJw+E4oryhq5g0QdSjzFnGHQvvYOVPK5ncazIPn/QwcSFxjVrWVFdT/PXX5L3yKhUZGfjHxhJzzdXEXHGFXh6rlGpTNEEcJ5fbxZtb3uS5tc8RERjBwxMervdeCW+MMZStWk3eq69Q+t1icDiIPPtsYn4xg5CRIxtVK1FKqZakCeIE7czfyQNLHmDL4S1M7zed+8fdT0RgRJPWUblrF/lz51L48Se4i4sJGjSImBkziLrgfPzCwlokbqWUOhZNEM3A6Xby0oaXmL1hNgmhCTxy0iNM7DGxyetxl5VROG8e+W+/Q+XWrfiFhRF5wflEX3oZwSnDtFahlGpVmiCa0caDG3lgyQNkFmUypfcU7h5zN70iejV5PcYYytevJ/+ddyj+6mtMZSVBgwYRfeklRF5wAQExMS0QvVJKHUkTRDOrdFXyRsYbzN44G5fbxfXDruem1JsIdYQe1/pcRUUUff45BR98SMWmTYjDQfiUKURfcjFhEyciAdoru1KqZWiCaCE5pTk8t/Y5Ptv1GQkhCdw1+i7O63sefnL8t5dUbNtGwYcfUvSfT3EVFuIfF0fkeecSNf1CgocN1VNQSqlmpQmiha3PXc+fVv2JTXmbGB4/nDtH38nYro3rXrg+7qoqShcvpvDTzyhZuBDjdBLYty9R0y8g8vwLCOzZo5miV0p1ZpogWoHbuPn0x0/5+7q/k1uWy8ndT+aOUXcwNG7oCa/bVVhI0VdfUfTpZ5TZ+xicNpzIc84hcto0HF27nvA2lFKdkyaIVlRRXcHcrXN5edPLFFYWclafs7ht5G0kRyU3y/qrsrIp+uJzir74gsrNWwAIGTWKyHPOIeLss3DYDzFRSqnG0AThA8VVxbye8TpvbH6DKlcVF/W/iJnDZ9I9vHuzbaNy926Kv/ySos+/oHLHDhAhZNQoIqaeScSZU/U0lFLqmDRB+NCh8kO8vPFl3tv2HgbDhf0u5ObhN9MjvHl/vCt37qToy68onj+fyq1bAQgeOpSIs6YSceaZBPbrpw3cSqmjaIJoAw6UHuDljS/z0Y6PMMYwvf90bkq96bjuoTiWqr17Kf5mPsXffEP5+vUAOPr0JmLSGYSfcQaho0chdTrsUkp1Tpog2pADpQd4ddOrfLj9Q1zGxQX9LuCm1JvoE9mnRbbnzMmh+NtvKVm4iLIVKzBOJ36RkYSfeirhZ5xB+Kmn4B8V1SLbVkq1fZog2qDcslxe3fQq7297n2pTzdQ+U/llyi+b5aqn+rhKSildtpSShYso+e47XIcPg58fIWlphJ92KmGnnkbw0CGInz4mRKnOQhNEG3ao/BBvbn6Td7e9S4mzhIndJ/KrlF8xtuvYFm0zMC4X5Rs2ULJ4MaWLv6ciIwMA/7g4wk85mbBTTiVs4kkExDWui3OlVPukCaIdKK4q5r1t7/Hvzf8mryKP1PhUbky5kcm9JuPv59/i26/Oy6N0yRJKFn9P6ZIluAoLAQgaPJiwiRMJmziR0DGj9cFHSnUwmiDakUpXJf/Z+R/mZMxhX/E+eoT34Joh13DxgIsJc7ROt+DG5aJi82ZKly6jdNkyytatA6cTCQwkZNQowsaPI3T8eEJSUpDAwFaJSSnVMjRBtEMut4tF+xbxxuY3WJu7lnBHOJcOuJSrh1xNt/BurRqLu6yMsvR0Spctp3T5ciq3bQNAQkIIHTWK0PHjCRs/juChQ/XqKKXaGU0Q7dzGgxv59+Z/8/WerwE4s8+ZzBg8g1GJo3xyb0N1fj5lq1dTtnIVZatWUrljJ2AljJARaYSOHkPomDGEpA3HLySk1eNTSjWezxKEiEwDngP8gZeNMU95mecKYBZggB+MMb+wy68HHrJne9wY83pD2+rICaLGgdIDvL3lbT7Y8QHFVcUMjBnIjMEzODf53OPuarw5VOflWQkjfQ1l6elWDcMYcDgIGTaMkFGjCBk5gtARIwhISPBZnEqpo/kkQYiIP7AdmApkAauBGcaYzR7zDADeAyYbY/JFJNEYkysisUA6MAYrcawBRhtj8uvbXmdIEDXKq8v5fNfnvLP1HbblbyMiMIKL+1/MVYOuoldk899411SuoiLK1q6lfM0aytLXULFpE8bpBMDRq5eVLEaOJCQtjaABA/S0lFI+5KsEcRIwyxhztj3+BwBjzP/zmOfPwHZjzMt1lp0BTDLG/I89/i9gkTHmnfq215kSRA1jDOty1/HO1neYv2c+1aaak7qdxGUDL+OM3mfg8GsbP7zuqioqMjIoX7ee8nXrKFu/DtfBQwBIUBDBw4YRkppKSNpwgocPx9Gjh3YLolQraShBtOSjynoA+zzGs4DxdeYZCCAiS7FOQ80yxnxZz7JHdV4kIjOBmQC9e/dutsDbCxFhVJdRjOoyityyXD7c8SEf7fiIu7+7m7jgOC7qfxGXDrjU57UKv8BAQkeOJHTkSOBGjDE4s7Op2LCB8h82UL5hA/lz53L4desson9MDMHDhhGcMsxKHikpBHTtqklDqVbWkjWIy4Bpxpib7PFrgfHGmNs85pkHOIErgJ7AYiAVuAkINsY8bs/3v0C5MeaZ+rbXGWsQ3rjcLpbuX8oH2z9gcdZiXMbFhG4TuGTAJUzuPZkg/yBfh+iVcTqp2L7dShqbNlGRsdnqodblAqwb+IKHDSV48BCChw4hePBgHL17613fSp0gX9UgsgHPQ9eedpmnLGClMcYJ7BaR7cAAe75JdZZd1GKRdiD+fv6c1vM0Tut5GjmlOXy882M+2vERv1/8eyICIzg3+Vwu6n8Rw+KGtakjcqlp0B42jBi7zF1RQeW2bZRnZFCxKYOKjAzyli2H6moA/EJDCRo8mODBgwkaNIjgQQMJGjAAv7DWuV9EqY6uJWsQAViN1FOwfvBXA78wxmR4zDMNq+H6ehGJB9YBI/i5YXqUPetarEbqw/VtT2sQ9XMbN6sOrOLjHR/z7d5vqXRV0j+6Pxf1v4jz+p5HfEi8r0NsNHdVFVU7d1KxZQsVW7ZSsWULlVu34i4trZ3H0asXQYMGEjxwEEED+hPUvz+BSUnaGK6UF768zPVc4K9Y7QuvGmOeEJFHgXRjzKdiHcI+C0wDXMATxpi59rK/BB6wV/WEMea1hralCaJxiqqK+HL3l/xn53/YcGgD/uLPhO4TOL/v+UzuNdmnl8seL+N249y/n8rt26ncto2Kbdup3L6dqsxMcLutmRwOgpL6ENjfShhB/foT2DeZwKQk/PRucNWJ6Y1yyqtdBbuYt2se/931X/aX7ickIIQpvadwft/zGd9tPAF+LXkGsuW5Kyqo2rWLyp07qdyx03rduRNnVpZ1nwaAnx+OXj0J6tuPwL7JBPXtS2BSEoFJSfjHxrap03BKtQRNEKpBbuNmXe465u2ax1eZX1FcVUxscCxT+0zlnORzGJk4Ej/pOI3B7rIyqjIzqfxxF1W7d1mvu3ZRlZlZe78GgF9ERG2yCEzqQ2DvPgT26U1g7974R0f7bgeUakaaIFSjVbmqWJy1mC92f8HirMVUuCpIDE3k7KSzmZY0jdT41A57VG2qq3Hu309VZuYRQ2VmJtX7fzpiXr+oKAJ79yawVy8cvXsR2LMnjp69COzV07ok17/le+BVqjloglDHpcxZxqJ9i/gy80uWZC/B6XbSPaw7Z/Y5k6l9pjI8YXiHqlk0xF1RgXPfPqr27aNqz16q9u7BuXcfVXv34ty/v/ZyXAACAnB0746jR3ccPXrg6N6dQPvV0aMHAYmJSED7Pn2nOg5NEOqEFVUVsXDvQr7e8zXL9y/H6XaSEJLA5N6TmdpnKqO7jG73bRbHy1RX4zyQgzPLSiDOfVnW++xsnPv31941Xsvfn4DERBzdutlDVwLs9wFduuDo2hX/mBi9x0O1Ck0QqlkVVxWzOGsx8/fMZ0n2EipcFUQHRXNaz9OY3GsyJ3U/qV1eDdVS3JWVOPfvx5m9H2d2Ns4DP1G9/yecP9nDgQPg0fYB1n0hAV26ENC1C47ELtb7xEQCEhNw1L5P1Ac4qROmCUK1mDJnGUv3L+Xbvd+yOGsxxVXFBPoFMqH7BM7odQan9zydhFDtwbUhxu3GlZdnJYucHKoP5FCdcwBnTi7VBw5YZTk5mMrKo5b1i4ggID6egISEn18T4vGPiycgPo6AuDjrfWyM3geivNIEoVqF0+1kXc46Fu5byMJ9C8kusW6cHxY3rPbu7qFxQztNu0VzMsbgLi6mOicHZ24u1bkHqc7JofrQIWs4eJDqQwepPngIU1bmdR3+0dH4x8UREBuLf2wsAXGx+MfE4h8bYyWS6Bj8Y2Lwj4kmIDpanxbYSWiCUK3OGMOOgh0s2reIxVmL2XBwAwZDbHAsp/Q4hVN7nsrE7hOJDIz0dagdjqukFFfeIarz8qg+dAhXXh7Vh/KozjuEK+8w1fmHcR3Ox5WXV/vscW/8wsOthBEdbQ1RUXXeR1mvkZH41UyLiNAG+HZGE4TyufyKfJbuX8r3Wd+zdP9SCisL8RM/UuNTObn7yUzsMZGUuBT8/fTy0NZkqqtx5edTfTgfV0EBrvzD1nh+Pq78Alz5dnlhofVaUIC7uLjBdfqFheEXGYl/ZCT+ERHW+9rXcPzCI/CLCLfKIiKs1/Bw/MLC8Q8PQ0JDO+yl1G2RJgjVplS7q9l4aCNLs5eybP8yNh3ahMEQERjBhG4TmNh9IuO7jadXhO8ffqSOZqqrcRUV4SooxF1UaCUPe9xVWIi7uAhXUTGu4iLchUW4iotxF9mvJSU/38VeHz8/K2GEh+EfFoZfaJiVdOoOoaHWEBZa+15CQqz5Q0PwC7GH0FA9XdYATRCqTSuoKGDFgRUsy17G0v1LyS3LBaBHeA/GdxvPhG4TGNd1HHEhcT6OVJ0o43bjLiuzE0YJ7pJiK3GUluIuLsFdWoKrpAR3SSnumvKaoawUV2mpNa2srLZX30YJCMAvOBi/kBAriYSE4BccjISG4BcUjIQEH/kaHGRNDwrGLzjo59fgYCQwCL+gQCQoyBoCA/HzeC9BQYjD0W5qQZogVLthjGF30W5W/rSSFftXsDpnNcVV1imN/tH9Gdt1LGO7jmV0l9HEBsf6OFrlK8YYjNOJu7QUU1ZmJZ3SUtzl5dZQVo67rBTjOV5RjimvsMY93puKCtwVFbWv7ooKTHn5sWs6xyCBgUcPDof93oGfw3rF4bDKHQ6r40iHAwkIQByB1mtAgD09AAICkICa6dY0AgIIiIsn/NRTji9OTRCqvXK5XWw5vIUVP61g1U+rWH9wPeXV5YCVMMZ0GcOYrmMY3WV0u+q2XLVtNQnIVFZaiaPmtaISU1WJqay0yiqrMFWVVlKpqsJU2ctUVWGcVdY8NeVVVdY6q6p+Hqqrfy6vGWrKq6ut8erqo+6TqSskLY2kd+ce175qglAdhtPlJCMvg/ScdFYfWM263HW1CaN3RG/rEayJoxiZOJI+kX3aTTVfqYYYY6BO0jDOaqi23ktAAI4eRz2VuVE0QagOy+l2sjlvM+ty1rEmdw3rctdRWGlduhkbHMuIhBGMSLSGoXFD2+wjV5XyFU0QqtNwGze7C3ezNncta3PW8sPBH9hXvA+AAL8AhsYOZXjCcNIS0khNSKV7WHetZahOTROE6tTyyvP44eAP/HDwB9bnricjL4NKl9VtRWxwLKnxqaTEpzA8fjjD4ocRFRTl44iVaj2aIJTy4HQ72ZG/g40HN7LxkDXsKtxVO71neE+GxQ9jaNxQhsUNY0jcEL3jW3VYmiCUOobiqmIy8jLYdGgTm/M2szlvc21fUmA1gA+OHcyQuCEMjh3M4NjBetWU6hAaShDaaYpSUHsX94RuE2rL8ivy2ZK3hYy8DDbnbSYjL4Ov93xdOz0hJIEhcUMYFDOIgTEDGRg7kD4RfbS7ENVhaIJQqh4xwTFM7DGRiT0m1pYVVRWx7fA2NudtZuvhrWw9vJWl2UtxGeuJckH+QfSP7s+g2EEMiB5A/5j+DIgeoHeBq3ZJTzEpdYIqXZXsKtjFtvxtbM/fzvbD29mWv42CyoLaeWKDY+kf3Z8BMQPoF92PflH96BfdTxvElc/pKSalWlCQfxBD4oYwJG5IbZkxhryKPHbk72Bnwc7a1492fFR7Yx9AXHAc/aL70TeqL/2i+5EclUxyVDIJIQl6+a3yOU0QSrUAESE+JJ74kHhO6n5SbbnbuPmp9Cd+LPiRXQW7+LHQev1s12eUOktr5wtzhJEcaSWLpKgkkiKT6BPZh96RvQkJCPHFLqlOSE8xKdUGGGPIKcthd+FuMosy2V24u3bIKcs5Yt6uYV3pE9mHpMgkekX0shJHRG96RPTQO8VVk+kpJqXaOBGha1hXuoZ1PaLGAdZzv/cW7yWzKJM9hXvYU2QNn+/+vLanWwDBWkfviN70jOhZO/SK6EXP8J7a3qGaTBOEUm1cqCO09t6LugorC9lTtIe9xXvZV7SPvcV72Vu0l4X7FnK44vAR80YERtAz3Eoa3cO60yOiBz3CraF7eHc9daWOoglCqXYsKiiK4QnDGZ4w/Khppc5SsoqzrKEki33F+8gqyWJH/g6+2/cdVe6qI+aPDY6lW1g3uod3P+K1ZogKitKG805GE4RSHVSYI4xBsYMYFDvoqGlu4yavPI/skmyyS7LZX7Kf/aX72V+ynx35O/g+63sqXBVHLBPsH1x7Gqxm6BLaxRrCrNfIwEhNIh2IJgilOiE/8SMhNIGE0ARGJI44aroxhsMVh/mp9CcOlB7gQOmBn9+XHWBZ9jIOlh/EcORFLiEBISSGJv48hCQeMZ4QmkB8SLw2prcTmiCUUkcREeJC4ogLiSMlPsXrPE63k7zyPA6UHiCnLKf2Nbcsl9yyXNbnrie3LBen++inoUUFRZEQYiWLxNBE4kLiiA+2LgtOCE2wxkPiiXBEaI3EhzRBKKWOi8PPUXuqqT7GGAoqC2qTxqHyQxwsP/jz+7KDrD6wmkPlh7wmEoefw0pUwXFHvcYGxxIbEmu9BscSHRRNgJ/+pDUn/TSVUi1GRIgJjiEmOMZrW0gNYwxFVUUcKj90xJBXnkdeRR555XnkluWyJW8LhysO1/Z9dcS2EKKCoqztBcUQGxxbu+3Y4FhrWlAM0cHR1mtQNCEBIVpDaYAmCKWUz4lYP+5RQVH0i+7X4Lxu46a4qpi8ijwOlx/mcIU15FXkkV+Rbw2V+WQWZbI2dy0FlQW4jdvrugL9AokOiiYqOIrooGjrfdDP7yMDI2vjigqMIjrYKgv0D2yJj6HN0QShlGpX/MSv9ke7b1TfY87vNm6KKosoqCygoLKA/Ip867Uyn4KKgtrywspCfiz4sfa9t1pKjWD/YCIDI4kMijzy1R4iAiOIDIokwhFBRKA1RAZGEh4YTpgjDD/xa86PpMVoglBKdWh+4kd0cDTRwdGNXsYYQ6mzlMKqQgorjxyKqopqX2uG/SX72Va1jaKqoiP61PJGEMIDw4lwRBAeGE64I5yIwCPfhznCiHBEEBZovzrCapNLuMN6bY1ajCYIpZSqQ8T6EQ8PDKdHeI8mLVvtrqbUWUpRZRFFziKKKosocZZQXFV89OAspqSqhJyyHHYW7KTEWUJJVUmDtZcaDj8H4Y5wQh2hpMan8vTpTx/v7tZLE4RSSjWjAL+A2lNgx8MYQ4WrglJnKcVVxZQ6S2sTR837Umdp7VDiLKFbWLdm3guLJgillGpDRISQgBBCAkJ8/tzzFm0pEZFpIrJNRHaKyP1ept8gIgdFZL093OQxzeVR/mlLxqmUUupoLVaDEBF/4AVgKpAFrBaRT40xm+vM+q4x5jYvqyg3xoxoqfiUUko1rCVrEOOAncaYXcaYKmAucGELbk8ppVQzaskE0QPY5zGeZZfVdamIbBCRD0Skl0d5sIiki8gKEbnI2wZEZKY9T/rBgwebL3KllFIt2wbRCJ8BScaY4cA3wOse0/rYj8H7BfBXETnq9kpjzEvGmDHGmDEJCQmtE7FSSnUSLZkgsgHPGkFPu6yWMSbPGFNpj74MjPaYlm2/7gIWASNbMFallFJ1tGSCWA0MEJFkEQkErgKOuBpJRDwv3p0ObLHLY0QkyH4fD5wM1G3cVkop1YJa7ComY0y1iNwGfAX4A68aYzJE5FEg3RjzKXCHiEwHqoHDwA324kOAf4mIGyuJPeXl6iellFItSIwxx56rHRCRg8CeE1hFPHComcJpT3S/Oxfd786lMfvdxxjjtRG3wySIEyUi6XajeKei+9256H53Lie6376+ikkppVQbpQlCKaWUV5ogfvaSrwPwEd3vzkX3u3M5of3WNgillFJeaQ1CKaWUV5oglFJKedXpE8SxnlnRkYjIqyKSKyKbPMpiReQbEdlhv8b4MsbmJiK9RGShiGwWkQwR+a1d3tH3O1hEVonID/Z+P2KXJ4vISvv7/q7dy0GHIyL+IrJORObZ451lvzNFZKP9HJ10u+y4v+udOkF4PLPiHGAoMENEhvo2qhY1B5hWp+x+4FtjzADgW3u8I6kG7jbGDAUmAL+x/8Ydfb8rgcnGmDRgBDBNRCYAfwL+YozpD+QDv/JdiC3qt9hd99g6y34DnGGMGeFx/8Nxf9c7dYKgkz2zwhizGKtLE08X8nMvuq8DF7VmTC3NGPOTMWat/b4Y60ejBx1/v40xpsQeddiDASYDH9jlHW6/AUSkJ3AeVgegiIjQCfa7Acf9Xe/sCaKxz6zoyLoYY36y3x8AuvgymJYkIklYvQKvpBPst32aZT2Qi9Wd/o9AgTGm2p6lo37f/wr8HnDb43F0jv0G6yDgaxFZIyIz7bLj/q63WGd9qv0xxhgR6ZDXPYtIOPAhcKcxpsg6qLR01P02xriAESISDXwMDPZtRC1PRM4Hco0xa0Rkko/D8YVTjDHZIpIIfCMiWz0nNvW73tlrEMd8ZkUnkFPT7br9muvjeJqdiDiwksNbxpiP7OIOv981jDEFwELgJCBaRGoODDvi9/1kYLqIZGKdMp4MPEfH32/giOfo5GIdFIzjBL7rnT1BHPOZFZ3Ap8D19vvrgf/4MJZmZ59/fgXYYoz5P49JHX2/E+yaAyISAkzFan9ZCFxmz9bh9tsY8wdjTE9jTBLW//MCY8zVdPD9BhCRMBGJqHkPnAVs4gS+653+TmoRORfrnGXNMyue8G1ELUdE3gEmYXUBnAP8EfgEeA/ojdVd+hXGmLoN2e2WiJwCfA9s5Odz0g9gtUN05P0ejtUg6Y91IPieMeZREemLdWQdC6wDrvF4qmOHYp9iuscYc35n2G97Hz+2RwOAt40xT4hIHMf5Xe/0CUIppZR3nf0Uk1JKqXpoglBKKeWVJgillFJeaYJQSinllSYIpZRSXmmCUKoJRMRl95RZMzRbJ38ikuTZ065SvqZdbSjVNOXGmBG+DkKp1qA1CKWagd0P/5/tvvhXiUh/uzxJRBaIyAYR+VZEetvlXUTkY/t5DT+IyER7Vf4iMtt+hsPX9l3QSvmEJgilmiakzimmKz2mFRpjUoHnse7OB/g78LoxZjjwFvA3u/xvwHf28xpGARl2+QDgBWPMMKAAuLRF90apBuid1Eo1gYiUGGPCvZRnYj2gZ5fdOeABY0yciBwCuhljnHb5T8aYeBE5CPT07O7B7o78G/vBLojIfYDDGPN4K+yaUkfRGoRSzcfU874pPPsHcqHthMqHNEEo1Xyu9Hhdbr9fhtWrKMDVWB0HgvXox1uh9sE+Ua0VpFKNpUcnSjVNiP2UthpfGmNqLnWNEZENWLWAGXbZ7cBrInIvcBC40S7/LfCSiPwKq6ZwK/ATSrUh2gahVDOw2yDGGGMO+ToWpZqLnmJSSinlldYglFJKeaU1CKWUUl5pglBKKeWVJgillFJeaYJQSinllSYIpZRSXv1/PcT6Ouvgwm8AAAAASUVORK5CYII=\n",
"text/plain": [
"