{
"cells": [
{
"cell_type": "markdown",
"id": "893fcaa79a94f6e5",
"metadata": {
"collapsed": false,
"id": "893fcaa79a94f6e5"
},
"source": [
"# UD04 · Notebook 9 — Controlar el robot con una red neuronal\n",
"\n",
"## Introducción\n",
"\n",
"Esta práctica tiene como objetivo controlar un robot con una red neuronal. Es por eso que entrenaremos a una red neuronal con datos de sensores de robot y órdenes que se darán al robot para seguir la pista. Una vez que la red está entrenada, se puede usar para controlar el robot."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "ef6f67d8",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "ef6f67d8",
"outputId": "ae0e6522-ae75-45ea-d185-abcc7dec283a"
},
"outputs": [],
"source": [
"%pip install aitk aitk.robots keras numpy opencv-python-headless matplotlib requests\n",
"\n",
"# Dos caminos para la red, y cada uno pide algo distinto:\n",
"# - `aitk.networks.SimpleNetwork` es el mas simple y se integra con aitk.robots, pero por\n",
"# dentro usa TensorFlow. En Colab ya viene instalado y funciona sin mas.\n",
"# - `keras` 3 es agnostico del backend (TensorFlow en Colab, PyTorch en local) y no necesita\n",
"# TensorFlow. Es el camino que funciona en cualquier entorno.\n",
"import os\n",
"os.environ.setdefault(\"KERAS_BACKEND\", \"torch\")"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "1f020a970b7fb68e",
"metadata": {
"ExecuteTime": {
"end_time": "2023-10-07T09:48:07.549629Z",
"start_time": "2023-10-07T09:48:05.805005Z"
},
"id": "1f020a970b7fb68e"
},
"outputs": [],
"source": [
"import random\n",
"\n",
"import numpy as np\n",
"import aitk.robots as bots\n",
"import aitk.networks as nets\n",
"\n",
"import keras\n",
"\n",
"import matplotlib.pyplot as plt\n",
"import cv2\n",
"import requests\n",
"\n",
"# Define the custom metric 'tolerance_accuracy'\n",
"def tolerance_accuracy(y_true, y_pred):\n",
" \"\"\"Custom metric function to calculate accuracy within a tolerance.\n",
" For this example, I will consider a 0.1 threshold, but you need to adjust to your case.\n",
" \"\"\"\n",
" return keras.ops.mean(keras.ops.abs(y_true - y_pred) <= 0.1)\n"
]
},
{
"cell_type": "markdown",
"id": "od81XxFeA57J",
"metadata": {
"id": "od81XxFeA57J"
},
"source": [
"# Cargar datos de la Red Neuronal \"guardada\" previamente\n",
"\n",
"Si ya hemos entrenado la red y solo queremos volver a controlar el robot con esa mima red neuronal, podemos cargar el fichero .keras que habíamos guardado.\n",
"\n",
"La siguiente celda solo la puedes ejecutar si tienes el fichero robot.keras previamente guardado (de un proceso anterior)"
]
},
{
"cell_type": "code",
"execution_count": 33,
"id": "1ZGptF2XBMi5",
"metadata": {
"id": "1ZGptF2XBMi5"
},
"outputs": [],
"source": [
"robot_net = keras.saving.load_model(\"robot.keras\", custom_objects={'tolerance_accuracy': tolerance_accuracy})"
]
},
{
"cell_type": "markdown",
"id": "b4f8e0bc58ac55cc",
"metadata": {
"collapsed": false,
"id": "b4f8e0bc58ac55cc"
},
"source": [
"## Creación de la función para leer los datos de entrenamiento\n",
"\n",
"Crearemos una función que lea los datos de entrenamiento y nos devuelva una lista de patrones donde cada elemento en la lista es un patrón de entrada y un patrón de salida. Además, nos mostrará la cantidad de patrones leídos."
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "b0c78d053d324c24",
"metadata": {
"ExecuteTime": {
"end_time": "2023-10-07T09:48:07.576003Z",
"start_time": "2023-10-07T09:48:07.557105Z"
},
"id": "b0c78d053d324c24"
},
"outputs": [],
"source": [
"def carga_datos_entrenamiento(nombre_fichero):\n",
" \"\"\"Devolver datos de entrenamiento\"\"\"\n",
"\n",
" data = []\n",
" with open(nombre_fichero, \"r\") as f:\n",
" for line in f:\n",
" split_line = line.strip().split(\" \")\n",
" float_line = [float(x) for x in split_line]\n",
" data.append(float_line)\n",
" print(len(data), \" ejemplos cargados\")\n",
" return data"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "24bf143f5da212a0",
"metadata": {
"ExecuteTime": {
"end_time": "2023-10-07T09:48:07.632161Z",
"start_time": "2023-10-07T09:48:07.573697Z"
},
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "24bf143f5da212a0",
"outputId": "f18b843d-ff15-4dc9-bf55-4b1c881eaa17"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"6000 ejemplos cargados\n"
]
},
{
"data": {
"text/plain": [
"6000"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"patrones = carga_datos_entrenamiento(\"training_data.txt\")\n",
"len(patrones)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "1fc6931f2bfc91b2",
"metadata": {
"ExecuteTime": {
"end_time": "2023-10-07T09:48:09.571668Z",
"start_time": "2023-10-07T09:48:09.552844Z"
},
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "1fc6931f2bfc91b2",
"outputId": "d04ba886-c12d-4c67-a17f-5df3aa74594f"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"3\n"
]
}
],
"source": [
"# Veamos cuántos parámetros tienen los patrones\n",
"print(len(patrones[0]))"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "72b22858f6d54545",
"metadata": {
"ExecuteTime": {
"end_time": "2023-10-07T09:48:10.641077Z",
"start_time": "2023-10-07T09:48:10.572761Z"
},
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "72b22858f6d54545",
"outputId": "962def9c-ca39-4ee8-98c9-1f62be414320"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0.5, 1.0, 0.0]\n"
]
}
],
"source": [
"# Observemos un ejemplo\n",
"print(patrones[0])"
]
},
{
"cell_type": "markdown",
"id": "ddcfd08c32fe665b",
"metadata": {
"collapsed": false,
"id": "ddcfd08c32fe665b"
},
"source": [
"## Preprocesamiento y balanceo de datos\n",
"\n",
"Las herramientas de aprendizaje automático, incluidas las redes neuronales, encontrarán la forma más directa de reducir el error. Haremos un análisis de los datos que hemos recopilado. Crearemos una función auxiliar para contar en qué porcentaje de nuestros datos de entrenamiento hacen que el robot avance, avance hacia la izquierda o avance hacia la derecha.\n",
"\n",
"La función debe tomar una lista de patrones como entrada y devolver una lista de tres valores: el porcentaje de patrones con movimiento hacia adelante, el porcentaje de patrones con movimiento izquierdo y el porcentaje de patrones con movimiento a la derecha."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "74328c65e1d35771",
"metadata": {
"ExecuteTime": {
"end_time": "2023-10-07T09:48:12.426501Z",
"start_time": "2023-10-07T09:48:12.344951Z"
},
"id": "74328c65e1d35771"
},
"outputs": [],
"source": [
"def clasifica_movimientos(patrones):\n",
" \"\"\"Devuelve una lista de tres valores:\n",
" - El porcentaje de patrones con movimiento hacia adelante,\n",
" - El porcentaje de patrones con movimiento izquierdo (positivo) y\n",
" - El porcentaje de patrones con movimiento a la derecha (negativo).\"\"\"\n",
" # A implementar por el alumnado"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "6b5a8998ffd652fa",
"metadata": {
"ExecuteTime": {
"end_time": "2023-10-07T09:48:13.163178Z",
"start_time": "2023-10-07T09:48:13.117906Z"
},
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "6b5a8998ffd652fa",
"outputId": "92751b6e-ca38-4a85-b79a-d8d2994ffe5d"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"adelante: 3540\n",
"izquierda: 240\n",
"derecha: 2220\n"
]
},
{
"data": {
"text/plain": [
"[0.59, 0.04, 0.37]"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"clasifica_movimientos(patrones)"
]
},
{
"cell_type": "markdown",
"id": "f815fd79d73e5f14",
"metadata": {
"collapsed": false,
"id": "f815fd79d73e5f14"
},
"source": [
"En robótica es típico que el robot se mueva más hacia el objetivo que hacia la derecha o hacia la izquierda. Por lo tanto, es probable que la red neuronal aprenda a avanzar hacia el objetivo y no a girar. Por eso es importante que los datos esten balanceados. Para lograr esto, dividiremos los datos en tres listas, una para cada tipo de movimiento y mezclaremos las listas, luego tomaremos el mismo número de patrones de cada lista y mezclaremos nuevamente. Esto nos dará un conjunto balanceado."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "f6644e5b5a6bb84e",
"metadata": {
"ExecuteTime": {
"end_time": "2023-10-07T10:42:04.745662Z",
"start_time": "2023-10-07T10:42:04.724116Z"
},
"id": "f6644e5b5a6bb84e"
},
"outputs": [],
"source": [
"def balancea_movimientos(patrones):\n",
" \"\"\"Devuelve una lista de patrones con un número igual de ejemplos para cada tipo de movimiento\"\"\"\n",
" # A implementar por el alumnado"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "767a1cf90a75e16b",
"metadata": {
"ExecuteTime": {
"end_time": "2023-10-07T10:42:05.335213Z",
"start_time": "2023-10-07T10:42:05.312863Z"
},
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "767a1cf90a75e16b",
"outputId": "40fa87d6-cd35-476d-8185-9b304947baea"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"21\n"
]
}
],
"source": [
"patrones_balanceados = balancea_movimientos(patrones)\n",
"print(len(patrones_balanceados))"
]
},
{
"cell_type": "markdown",
"id": "b96e964e",
"metadata": {
"id": "b96e964e"
},
"source": [
"Podemos tratar de entrenar la red neuronal con los datos balanceados y ver cómo se comporta. Si la red neuronal no aprende, podemos intentarlo con el conjunto de datos original."
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "d4ecea3517f01f2",
"metadata": {
"ExecuteTime": {
"end_time": "2023-10-07T10:42:30.635889Z",
"start_time": "2023-10-07T10:42:30.604642Z"
},
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "d4ecea3517f01f2",
"outputId": "d6ccfe85-5c71-4bb2-89e5-3b9afa319533"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"4800 4800\n",
"[0.5 0.5 0.5 ... 0.51 0.51 0.51]\n",
"[[1. 0.]\n",
" [1. 0.]\n",
" [1. 0.]\n",
" ...\n",
" [1. 0.]\n",
" [1. 0.]\n",
" [1. 0.]]\n"
]
}
],
"source": [
"patrones_entrenamiento = patrones[:int(len(patrones) * 0.8)]\n",
"patrones_validacion = patrones[int(len(patrones) * 0.8):]\n",
"\n",
"def separa_datos(datos):\n",
" \"\"\"Devuelve dos listas: una con los datos de entrada y el otro con los datos de salida.\"\"\"\n",
" x = []\n",
" y = []\n",
" for dato in datos:\n",
" x.append(dato[0])\n",
" y.append(dato[-2:])\n",
" # Convert x and y to NumPy arrays\n",
" return np.array(x), np.array(y)\n",
" # Original de Carles:\n",
" # return x, y\n",
"\n",
"x_train, y_train = separa_datos(patrones_entrenamiento)\n",
"x_test, y_test = separa_datos(patrones_validacion)\n",
"\n",
"print(len(x_train), len(y_train))\n",
"print(x_train)\n",
"print(y_train)\n"
]
},
{
"cell_type": "markdown",
"id": "50063346f56b224",
"metadata": {
"collapsed": false,
"id": "50063346f56b224"
},
"source": [
"## Crear red de control de robots\n",
"\n",
"Crearemos una red neuronal con tres capas: entrada, oculta y salida. Las entradas representarán los sensores de robot y las salidas representarán las acciones del robot. La capa oculta ayudará a transformar los sensores en las acciones correctas.\n",
"\n",
"La red debe tener tantas entradas como haya usado en su algoritmo. Solo usamos el centro de la imagen, por lo que solo hay una entrada. Podía haber usado un enfoque diferente, como usar la imagen completa o usar más de un sensor. En este caso, debería tener más entradas.\n",
"\n",
"Podemos usar `SimpleNetwork` de `aitk.networks` para crear la red, por su simplicidad e integración con `aitk.robots` o` keras` por su flexibilidad.\n",
"\n",
"Comenzamos con un tamaño de capa oculta de 5, pero puedes experimentar con ella para ver qué tamaño funciona mejor.\n",
"\n",
"El tamaño de la capa de salida debe ser 2, ya que esta capa representa las cantidades de traslación y rotación para mover el robot."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "6acae47cd36738f7",
"metadata": {
"ExecuteTime": {
"end_time": "2023-10-07T10:42:33.109877Z",
"start_time": "2023-10-07T10:42:33.028780Z"
},
"id": "6acae47cd36738f7"
},
"outputs": [],
"source": [
"robot_net = # A implementar por el alumnado"
]
},
{
"cell_type": "markdown",
"id": "5dd360cd",
"metadata": {
"id": "5dd360cd"
},
"source": [
"El siguiente paso es entrenar la red neuronal. Debido a la naturaleza de los datos, probablemente necesitemos más tiempos de entrenamiento que en otras tareas."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "37ac4a3e",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 460
},
"id": "37ac4a3e",
"outputId": "a6552be8-b8ce-4013-fa52-586c56829c8f"
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"\n"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 10000/10000 loss: 0.005123379174619913 - tolerance_accuracy: 0.46000000834465027 - val_loss: 0.005123372655361891 - val_tolerance_accuracy: 0.46000000834465027\n"
]
},
{
"data": {
"text/plain": [
""
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# A implementar por el alumnado (Entrenar la red neuronal)"
]
},
{
"cell_type": "markdown",
"id": "e01424e9",
"metadata": {
"id": "e01424e9"
},
"source": [
"Probamos la red neuronal con los datos de entrenamiento y vemos cómo se comporta."
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "bd961bbf01aefd84",
"metadata": {
"ExecuteTime": {
"end_time": "2023-10-07T10:42:33.774373Z",
"start_time": "2023-10-07T10:42:33.747970Z"
},
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "bd961bbf01aefd84",
"outputId": "14bd9f6a-6fa4-4c02-ca25-97884f826e88"
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/local/lib/python3.11/dist-packages/keras/src/models/functional.py:237: UserWarning: The structure of `inputs` doesn't match the expected structure.\n",
"Expected: ['input']\n",
"Received: inputs=Tensor(shape=(1,))\n",
" warnings.warn(msg)\n"
]
},
{
"data": {
"text/plain": [
""
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x_train[0]\n",
"\n",
"out = robot_net.predict([x_train[0]])\n",
"\n",
"out[0]"
]
},
{
"cell_type": "markdown",
"id": "e8adab4d",
"metadata": {
"id": "e8adab4d"
},
"source": [
"## Creamos la función para controlar el robot\n",
"\n",
"Una vez que la red neuronal esté entrenada, crearemos una función que use la red para controlar el robot. Esta característica debe tomar los datos de los sensores como una entrada y devolver los comandos para el robot."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "cfd24715dd91e8fd",
"metadata": {
"ExecuteTime": {
"end_time": "2023-10-07T10:22:10.755064Z",
"start_time": "2023-10-07T10:22:10.734190Z"
},
"id": "cfd24715dd91e8fd"
},
"outputs": [],
"source": [
"def network_driver(robot):\n",
" # A implementar por el alumnado usando la red neuronal entrenada."
]
},
{
"cell_type": "markdown",
"id": "258e0168",
"metadata": {
"id": "258e0168"
},
"source": [
"Finalmente, probaremos con el robot para ver cómo se comporta."
]
},
{
"cell_type": "code",
"execution_count": 35,
"id": "14200eed",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 452
},
"id": "14200eed",
"outputId": "495b39ff-81ff-4390-dcb6-f0e18af2c379"
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAg0AAAGiCAYAAABkuvUyAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAd4lJREFUeJzt/XmcXFWd+P+/zl1q6T3dSXcnZCEsCgHCkkBowQXIEDHilo+DTnRQGfnIBDdcmY+io+Pgz/l91GEGcXQc4DPooMwMKAwCMWAQCQECSNjCFkiAdHe23ruq7nK+f9yq6u6kk5zq9Har3s/Ho9JddW917q3l3vd9n3PeR2mtNUIIIYQQh2BN9QYIIYQQIh4kaBBCCCGEEQkahBBCCGFEggYhhBBCGJGgQQghhBBGJGgQQgghhBEJGoQQQghhRIIGIYQQQhiRoEEIIYQQRiRoEEIIIYSRKQsarr32Wo488khSqRTLli3j4YcfnqpNEUIIIYSBKQkafvnLX3LFFVfwjW98g8cee4yTTz6ZFStW0NnZORWbI4QQQggDaiomrFq2bBmnn346//zP/wxAGIbMmzePT3/603z1q1+d7M0RQgghhAFnsv/DXC7Hpk2buPLKK4uPWZbF8uXL2bBhw6jPyWazZLPZ4v0wDNmzZw9NTU0opSZ8m4UQQohyprWmt7eXOXPmYFkHboSY9KBh165dBEFAS0vLiMdbWlp47rnnRn3O1Vdfzd/+7d9OxuYJIYQQFWv79u3MnTv3gMsnPWgYiyuvvJIrrriieL+7u5v58+dz1E3V2NUyAEQIIYQ4HMGA5uXVfdTW1h50vUkPGmbOnIlt23R0dIx4vKOjg9bW1lGfk0wmSSaT+z1uVynsammeEEIIIcbDoZr8J/0yPZFIsGTJEtatW1d8LAxD1q1bR1tb22RvjhBCCCEMTUnzxBVXXMHFF1/M0qVLOeOMM/jhD39If38/H//4x6dic4QQQghhYEqChosuuoidO3dy1VVX0d7ezimnnMJdd921X+dIIYQQQkwfU1Kn4XD19PRQX1/PsbfWSEdIIYQQ4jAF/ZoX3t9Ld3c3dXV1B1wv5mdc6QQphBBCTJaYBw1CCCGEmCwSNAghhBDCiAQNQgghhDAiQYMQQgghjEjQIIQQQggjEjQIIYQQwogEDUIIIYQwIkGDEEIIIYxI0CCEEEIIIxI0CCGEEMKIBA1CCCGEMCJBgxBCCCGMSNAghBBCCCMSNAghhBDCiAQNQgghhDAiQYMQQgghjEjQIIQQQggjEjQIIYQQwogEDUIIIYQwIkGDEEIIIYw4U70BQpjQWhuuCNqPbviawtO0Hy0DUBZgF35XqPzv2BTDaHUY3wyl1NifLIQQ05gEDWJ60VGAEGZAZzThIIRZjc5qgj7w94YE3ZqwTxP0Q9ivCQfytyxoT0MIOgRCioGC1rr4O0pRPK9bgCo+XPwdG6yEQiXBSh7kZwqstMKqUtHPNCg3CkSUQxSQOMPuO6BsBYXflRr6P4UQYpqToEFMOq3zJ3YvygCEgxpvR0jutZDcjhB/lyboDgl6dHTri9YhGLctGK8/NCrl5m9JhXLzwUcCVEJhJYYeLwQeUbChsKrASuUDkBSotMJKRkGJKvwcHmjkA55iAKSG3RgWBO27nHHIhmjQ+76O+76so73MB3jsoO/IaAsNNl/tu57a5+eI34cFkkKIA5KgQUyo4c0KYR/kXg/JvR6Q2x6SfSUKFPydYdSksE92IK60F90YKOyIwQ6NcoJXjPKYHQUWxSCiEIgkQDn5YMRVQ4HLPr9jRcGEckfZhuFNNaPtlw8Mez91EN2KwnymZ5/XYvjuax90sH+wob0D/7+EoP2h5yjXIDuj8k1MKgqQlEvx9cPOB1T5v6Ps/OP59ZSTf72cfJDmqmGPDXudnXwgmMoHgolDbNPwzZMIRcSUBA1i3Gmt0R74uzXezpDMloDBpwKyrwaE/RAO6IOfJCqRZr/Y4kAX6mEpwUipDnYui3kwZySfwVHWaL+r/R+38kGHpcAFKx0Fc3b1sAxSNUO/14Bdq6LAb3jAl1DFZi+VkKBCTF8SNIjDpjUQRv0P/F0h/U/4DDwRkHstxGsP0bmp3kJhrBICg4PRwD4ZFD3Kb6M/sQQOWKlh/WMKQUUKrGqFXa9w6hX2DAunUeE0Wjgz8s1cw/vESL8YMckkaBBjUmh20DnIbAnofyxg4EmfzIsBOoucfIQ4GD9qrgv7DpI1GqVpyq5V2A0KZ4bCabJwmhROPrCwG/OPNaqh0T/SZ0OMMwkaRMnCjCb7asjA4z69f/TIvR4S9iOBghDjaZ8mKx1ETX7+bk0WKPYMtkf2X7HS4M6ycOdYJGZbuK1RcFHIXlg1KmpOEWIMJGgQRnSgCbo1/Y8H9PzeI7MlIOiSKEGIKZdvTtEZXbiL93oATwy1sVjVYNflA4dGi8QRFskFFokjbZzGqI+FlSRq9pCUhDgICRrEARWGRua2hfTc79H7gE9uexiNcBBCxEaYr2ni7dAUv8D55g+nUZGYY+EeYZGYa5E80iK50Mapj0bbRAXPpHlDRCRoEPvT0RC3zIshPfd69P7Bw+/SEiwIUU7yzR/+Lo2/K4Ang2g0SL5+iNusSB1rkzrWJjHPwp2d7y8hTRsVTYIGMUKY1WReDOj6H4/+TT7B3mnUBFFsu82PlS+Mr7fzv7vRcDUrGQ1ni4auEaVc7ZEHOu1HxaJ0oUZACGhNmK8roLOgczpK+4ZAOLLSZPFnEC3TAdHfK9SaECKOQtCDEAxqgi5N5vkQlIdVo3CaooxE+gSb9PE2brOFXZcfJippiIohQYMY0Qyx57Ycves9woFJ3ohhY9+VQ9RDfKaFM9PCnamwZ6io53hN1JHLrs4X1Unl22NTFOeTGE/aj0aIaE8XizYN/Z4vXZ0d+qlzUUfRMJP/OajRmaiiZTiYf3xAD60zqIcKWhVLXg/9PuLnNIrfRAXREPZqcr2a3CshfQ/6YIPbYpE6xiK9yKbqRIfEfCsqomVJEFHOJGiocFprvHZN929zdN/j4e89VE3f8WPXK9wWhdsSpT4TR0Q3d7YVVTssVO8rTiQ1+e2qygXc6P82VZznIn/ThWbkwv0Rv2t0Nh9UDOTn2hjU0Xwb+Xk3ivNvDJuHQ3sQ5vIZE3+o0qIOOPj94VmQgFGzIqNmSwpVFIfdHz5HblToaGiFYoaHgzxHAfaBX1dF/m8cYBXtjyhQOcoKw6pP5vdVQ/R65GuLFN+LQpZo3EqVl7kAvDdCvDdCev/oYyWzOM0W1Ytt0osdUsfauC3SlFGOJGioUFprwn7o/YPHnv/KkXttAjs4KrCqwK63SByhSC9ySB1rFdObVu2wORXKwL7Fdg6+V6Xtc3HejpDo5BcChWBglOaT4okxHBasFBygZHeU6dhngaVGbumwib4KuzFiwq/COsNXsRgZAey7/r5G+5vDt9Ok5HhYWHdYMFx8jBGP6ULw4OUzRrl8Rik3NBla8fEc+wR7mnAgH9QVArXhQVsQBXjaH9YcVi4CCAcg90pI7pWQrrs8nJmK1NE21Wc4UVPGLAuVks6U5UCChgqkA0325ZBdv8jS/7A/MSWdnWi8ePpNNlWnOCSPtkkuiMaLj9ukSRVIKTWUfSnOHyGv43iJYqXDSLUF+QxQockql88kFZquBocCjKBPE/Zqgt5oYja/Kz9JWy+jBoJxCTR0Drw3NN4bPr1/8LFnKNLH29Sc7lB9uoPdkJ+7Q77/sSRBQwXRWhP2wt7/ybH3ttz4d3JU4DQrqk50qDrFpmqxE/W2dpE0pYgFtd/UmCVywHaAqoP/jRFNWIUsR+F3H4K+kKBL4+/VBHujn/7eYTO/dmn8ruj36d6kEuzV9D3o07fRx65VVJ9qU7PMpeoUG3tG9DpJABEfEjRUCB1GQyh33ZCh/4kA/HH6wwqcpmhoVu1bHdInODhNCstkJkIhKtSIJix7/6+KXWvD7JGPFSaC09l8E0m+ecTfo/E6wmh6+TdC/N1hcWK4oD/qiDstBBB0aXru8+n9o4/bYlFzpkPt2S6JBRZWWoKHOJCgocxpHR00en7vsesXWfyO8ckuqAS4cyzq3uFSs8whucBCOfKFF2KiKJWffjsB9vAw4+hhK+kooChmI/aG+Ds1uddCsq+FeK9F2YowPwJoqrIUOge57SF7tufoussjfbxF3dtcqs9wsGtV1IdGDifTkgQNZUzrqE79rv+Xpedeb1xmm1QJqDrFpv48l+qlDla1yndYk2+4EFNORXVKrFkKdxZobRNFEuRHk4C/R5N7LSC3LST3Wkju9XyGYtfUFHALezX9Dwf0bwpIzrOoW+5S+zYXt1mOLdORBA1lqtAc0fkvGQafDg77YGDVQtUJDg3vdkmf4GBVyZdZiOmu2EcjX8NEOZCYrUjMttBLo/4QhXohQZcm83JA5tmA7KtRM4e/R0/e1PYBZF8J2Xl9lr2/yVH7Fpf65S7JoySLOZ1I0FBu8iWg+zb6dP5rFu+Nw4sWVAqqT3OY8Z4E6RNsrKR8eYUoB0qpqONmDdg1UWYidayNPj+qDeLvDPE6Q7Ivhww+HZB5KSDsj4qSTWhGIgC/U7P3thy9D3jUtDnMeHeCxFwL5crxZ6pJ0FBGCh2l9v53jt2/yhL2HcYfsyF9vE3jBxJUn+7kSzLLF1aIcqeUwq4Ce4FNYr5F9VIghKBHk3kpJLMlYPDZIJrptndimzT8XZqu2z16/+BTf55L/QUuibmWNFtMIQkaykjYB7tuytJ1Zw6dHfvfcY9QNH4gSe3bo05J8uUUojIVv/s2ODMUNUstqk+zoyaNXk3mhYD+x30yL4TktoeE/RNTTjbo0uy5NUfP/R4N70pQd55LokVGaE0FCRrKgNbRWO6d12fpXueNeTilVQU1bS5NFyWiOvJSW0EIsQ9l5TMRVVEJ+JqzHIJuTe51zeCTPn2P+OS2h+OfhQjB36nZ9e9Zev/o0fi+BDVvcbGqJeswmSRoiDmtNf5OTcc/Z+jb6I+tmJ2CxAKLmauT1L7Fydf7ly+hEOLQlFI4DQq7XpNelKDxfyXIvhLS/3hU0CnzfBB1phyvJEQI2RdDdvwwQ/UffGb+RZLUm6XJYrJI0BBz3hsh7T/MMPBkMKYvpUpA7dtdZn4kKRPMCCHGrHjCdiF1jE3yaIuGlQlyr4f0/dGj/zGf7Mvh+JWt96F/o0/mhYAZ70nQsNLFqZMmi4lmHXqVke6//34uvPBC5syZg1KK2267bcRyrTVXXXUVs2fPJp1Os3z5cl544YUR6+zZs4fVq1dTV1dHQ0MDl1xyCX19h9Nrr/Jorcm9HtBxbYaBP40tYHCaFc2XJmlZkyLRKs0RQohxovLNGNWK9JtsZn4sydxvVjHna2lq3+bgzFRjOPuMLtij2XVTlje+M8jAZj+a+VWmkZ8wJb9t/f39nHzyyVx77bWjLv/e977HNddcw49//GM2btxIdXU1K1asIJMZqmW6evVqnn76adauXcsdd9zB/fffz6WXXjr2vagwWmv8Tk37NRn6Hx1DSTcFqTdbHHFlmoYLE9hVEp0LISaOUgqnKSobPedv0sz9ThWzLk5GfafGI9/tw8ATAa9/e5A9/50jzOhofg8x7pQ+jFdWKcWtt97K+973PiA6mc2ZM4cvfOELfPGLXwSgu7ublpYWbrjhBj70oQ/x7LPPsmjRIh555BGWLl0KwF133cW73vUuXnvtNebMmXPI/7enp4f6+nqOvbUWu7ryznZee8iOHwwy8MQYMgwO1J7l0PxXKZxmGRkhhJgaOtAEfdC/0aN7rcfg0wF6HObEUS7UvMVh1sdTuLPlGGcq6Ne88P5euru7qaurO+B645QgimzdupX29naWL19efKy+vp5ly5axYcMGADZs2EBDQ0MxYABYvnw5lmWxcePGUf9uNpulp6dnxK0Saa3xdoV0/DgzpoDBSkPTnydo/UxaAgYhxJRStsKpV9T9mcucr6WZ8/U0VUsdrPTh/V3tQe/9Pm98Z4D+RwN0IBmH8TSuQUN7ezsALS0tIx5vaWkpLmtvb6e5uXnEcsdxaGxsLK6zr6uvvpr6+vribd68eeO52bGgNegM7LoxS9+G0kdJWDUw6xNJmv4iKbUXhBDThlIKp96i5kyXI76eZvaX0lSdZqOSh/FHNWReCNnxD4N03+0R5iRwGC/jGjRMlCuvvJLu7u7ibfv27VO9SZMv0Oy+JUfPvV7JAYPdqGj5dJqGlQmshAQLQojpRymw04qasxzmfrOK2VekSZ84yrzhJQi6NB0/zrDnlznCAY10czh84zrksrW1FYCOjg5mzx6aDL6jo4NTTjmluE5nZ+eI5/m+z549e4rP31cymSSZPJywM950qOnb4LP31mzJw5Xc2YqWNWmql9goWwIGIcT0ppRCpaD2HQ5VJ9v03Oux944c3o6xjYrQGdh9cxZ/b8isj6WwamXa7cMxrpmGhQsX0trayrp164qP9fT0sHHjRtra2gBoa2ujq6uLTZs2Fde59957CcOQZcuWjefmlAWtIbctmvkt7C/tuW6rovXzaaqXSsAghIgXpRROo8WMVQnm/m0V9Re4qDH2d9AedN3l0fmvGcJ+yTgcjpIzDX19fbz44ovF+1u3buWJJ56gsbGR+fPn87nPfY6/+7u/49hjj2XhwoV8/etfZ86cOcURFscffzzvfOc7+eQnP8mPf/xjPM/j8ssv50Mf+pDRyIlKojXorGbXz7PkXiutHqvbomi9Ik3VYlvqLwghYkspRWK+Tctfp6hZ6rDrF1myL4WlZx186F7rQQjN/zuFXSNDzcei5KDh0Ucf5Zxzzinev+KKKwC4+OKLueGGG/jyl79Mf38/l156KV1dXZx99tncddddpFKp4nN+/vOfc/nll3PeeedhWRarVq3immuuGYfdKTNa03OvF5WHLoHbatH62ZQEDEKIsqAUqETU3yH1Jps9t+ToXpsjHCjxDwVE8/M40PzJVEUO2T9ch1WnYapUSp2G3Bsh2/+mH+8N87fInqGY/YUU1UsdCRiEEOVHQ5jT9P3RZ+eNGbz20vs6KBcaP5ig6S+S0jk8b0rqNIjxE+Y0e2/NRp1/DFk10HxpkuolEjAIIcqUAiupqD0nGmVRdVrpIyy0B3v+K0f3b72o7LQwJkHDNJV5LojSaKafZwcaP5Ck7u2udHoUQpQ9pRSJIy3mfCnNjPe4KLe05+ss7Lwxmh04fvn2qSNBwzQUZjV7f50jLGEOr9ozHWa8xwUJGIQQFaIwwmLmx1M0rU5i1ZT2/LAPdt6QJftyIHNVGJKgYZrRWjOwOaD/cfPOj06zYuZfJmX8sRCiIllpaLoowaxLUth1pR0Ec6+G7Py3DGGfTHJlQoKGaUZ70PUb8yyDSkDTh5Mk5llSGloIUZGUUihL0fBOl1l/lcSqKe1Y2P94wO7/zME4TJhV7iRomE40DD4bMPCk+Se3arFN/TnSj0EIUeFUNAlW/XkuzZ9MYtWW8Fwfum7PMfCkNFMcigQN00iY0/Ss9YzHHtt1isb/lRxzlTQhhCg3ylHUn+/SdFESlTr0+gVhH+z69yz+bmmmOBgJGqYR742QvofMswzVZzqkT7SlWWKKaK0n5CaEOAwKsGDGexPMeE+ipLPc4LMBe2/LjWmOi0oxrhNWibHTWtNzv0fQY/ZptWpgxoUya+VE0xoINGEGwoxG56LS3mEOdE4T9muCgegx7Wm0T3TzQPu6OMGYconSpxYoVw39nlSoZDTu3Erm7yeiNKuyQTmAk7/v5O/b0dWUckDZgC0dYIUYTqnoe9X4wQS5N0L6/uibBQIaen7nUdPmkF4kF2SjkaBhmgj26JLKRdee5ZI8UhJF40HrqKKc9kDnIOjTeK+H5F4LybWH+LtDgh5N0KsJBzThANE0u7mJ2yblRIGGSqroZ0JhJaKfKkH0u5sPMFyFlQYrrfI3UKn870mwqvK/p6J1VJIoaFFQjDbU0K14mCzleLnPAXnUhMlEXL2pkb+P2HY1bHlxf/dfJieG8uXUWzR/IoX32gDZV8zm7/H3aPb8Z445X05L0+8oJGiYBrTWDDwTkNtm9qG2qqF+hYtKTPCGlaliE4AflerOvhyS3RaQ3RqSfSWI2jQDIMzfpmIb8xkLBgtnWoMzrjrwTzX8MZUPONxCcBIFJOR/V3Z+1UJW5FDbGur9pmzX3shN1r6emNdSEW23UlEGxo4esxIKrHzglQCrsL/usGArkQ+qUvlsT0qhChmfVHTfSivs6miq5oMFURJ4TF/uEYpZf5Xkje8NEvaYPaf/YZ++h3xq3+HIe7sPCRqmgxD6HvCMr1yrToombZEPc2m0r/F2arKvBgw87jP4dIC/SxP0TWzWYNIcJL7Y9yGd1QdZWmHsKEAa+plvGio85uQDiFqFU6+w6xV2XfTTmWFh1w9leKy0ijI7qagJSUw9pRTVpznMuCDB7ltyRsGr9mDvr3NUnWzjNMr7OJwEDdOAvzsq6GRCuVB3TuklUyuR1tEVcNClGfiTT99Gn+zWEG9HGF3FCwEQEGWWilXbS2xbsaLiQlZ1lJWwahR2rcKZqXBnWbizLRJHWNgNCisxlPHAkgzFpLGh4b0JBp4KGHza7Fg7uCWgb6NP/TtdeZ+GkaBhimmt6X/MJ+g2u9pLzLNIn2SjZCL4URWaHnQGBp706X3Ap3+Tj79ngtLjQoQQ9kPYr/H3DS6G9Z+waxRui8JtsYbdFO4RFm6zVewsCxJMjDelFE4TzFyd5LVvDaAzBk8KotoNNWc62A3S2bhAgoYpprPQ/5i/X5vwgVSf7uA0qYO2r1YqHWq8Dk3/wz7d6zxyrwaEg1O9VaKiaYpJiqBbE3RrMs/no1c736E1GWUmEvMtUkfbJI+KAgqnKWoGkRlrx4dSivRJNnXnuHTfZTYZYPbVkN4HfBpWukjUEJGgYYoFvZrBpwybJhJQ+xbpmLMvHUTBQs99Hj2/98htDyWrIKa/gCioHdQEXZrc9vzQQBucBoXTpEgcYZFeZJM63sGdqbCq85045RgwJlZC0fiBBAOP+3jth44atAfdd+eoO8fFLnEyrHIlQcMUG3w2iFLnBlJvtkkcIcMsoTCkTxPs1XTd5dH92xxeR4V36BPlIYj6Ofm7o6xEz30+ysnizrZIHWuTerNNepFN8sihJg0JIgwpSMy3qF+RYNeNWaOnZLeG9D8iIykKJGiYQjrU9D/qm10VW1B9ilPyRCzlKuzX9N7vsfe2HNntIZgla4SIJe1DbntIbntIz3oPKwXubIvqpU40muooC7tRyUnNUN05Lj33eUbD3LUH3b/zqD7dkWwDEjRMqaBbk33Z7GxnJaHqNLuy2zd1NGxy8PmA3f+RY+AJf2qHSlqFioyF+gAqGqY3vFBSPjGkNUPB4bB2bh1GHTR1viaEDokCIEmaiAMJoo6X2RdDsi/m6PpNDrfFIn2CHRV9WxgNA5VJ7EanlMJthfrlLjuvzxp91wae9MluDag6SU6Z8gpMEa01XntI7g2zxnd3tkXqKHuCt2r60loT9mr23Jaj63bPeLTJmCmK4/ZVApxGKxpC1xQdkO16hV2jUOn8GP6kKo7pV5bKl36mWChJhwwN88wXjtJhvux0LhoaWiw9nYsmL9NZCAd1dMtEv+t8OesRj2Wj9UfUacjf9D73i8tF2QgHohR6dmtI110eySMtqk91qH1bVDVW+kDsT1mKuvNcun6bw9th0LchCz33eTLXDxI0TKnM8yFhn9m61ac6FVsBUoeazJaAnf+WZeCpYMKaIqyaKDhLtFok5lsk51m4R9i4LWqoUmKh6E8+gzBRB5BCaesRAcDw++HI+9rXUTCRyZe4zkY/owAjP29GfllYCFL8qBMphfkygnzlxn1e32J1zNFYQ4ERkJ+eeOT9/ebGsIcyMGOm89ulC9kZHcVC+cCsEKRpf9j+5fdX+9F6oRe9TmXVadbPZyBeytF1Z4708TZ173CpOs3BbbJk1NUwTqOi7hyX3TebFXwaeCLAa9ckZlf2iyhBwxQaeMqswpBKQHqRXZFzkoYZTffvPHb/Mos/zh0drVqFO0uRepNN1WInSus2RMPflDu1V2dK7T+s9uBbU+K26nxgsm/TSAiEI19nPTxLMcp/O+JlUsA+TWjFJpvh64zHS5s/0Otw2PaFeijAGrFPw4KLwv18USedHZpTJBiIfteDmqAPgp4QvzvKcukchB7RxGRefsKyLMVAZVrRURNG/6MBA38KSMy1qH27S+1bHRKzLalWSTQJXN05Lt13e/i7D31sybWHDPzJx22t7GJPEjRMkXAAsi+ZXeI4jYrkwspKi2mtCXpg9y+ydP1Pbnz6LihQSUgusKNZ7E6wSR1lY+U7N1XS61vscT/qxWecX4fSt91oOnIdDY8MBwsBRj7I6NEE3SH+bo23W+Pvjn4P9oZRYFGoNjmFHXW1V2i+yNJ1Z47as10a3uWSmGNFWZ9K+tzvIzEv6kzafbdBoRwfeh/wqT/PhQquyCtBwxTJvRoYT4Pttlq4rZXzxdZak3stpPNfsuajSw7Bna2oWRZdaaWOsYfN9Fg5r6sYndFnQIFdDXb1/usWMjbFJqMwOlH7u0NyO0K8HRpvR4i3K8TfFeLv0vhd+zcDTQa/U7P31hy9v/eoW+5Sv8IlMdeKKsxW4ldBQe3bXXru99AGheAGnwvItYck51Vu/zIJGqaA1prsKyHBgFnQkF5kV0w6UYeazPMBHf+cIfNCeFid9pQLyaMs6s9PUL3UwZ2lKuZ1FJOnMMMm9rDzbgrsWpvkkXaxKUjnGOrA2qfJbg/JvhyQfSXE3xnid+noQmKigwmdn/75lhy993s0rExQt9zFqcAhm0pFzZOpo22jInthv6bvYT8KtCrstSqQoGEqBJB9JTBrC1X5/gwVQAeagScDOv4pQ+61w0gvOJA6yqLhwgQ1y5xo+FmFfsHFNJDPaBWm2y5IHWvDuS46jMpLex1RRiLzckDmuYDstrA4OmZCRrxo8No1O6/P0vtHn8YPJqg53RmxjZXAqVPUnOmYVeYNYGCTT8M7E9jVE79t05EEDVMgzEHGsD+D3aiitscyp7Wmb6NPxz9n8HeN/QjpHmEx490udctd7Lqox53EC2I6U5bCmaFwGiD1ZovatztRVchuTebFKIAYfC4g+2JA0Mv4BxAhZJ4L2PH/G6TuPJemi5K4sysr0K45w2H3L7KEA4ded/C5AH9PiF1dGRdz+5KgYQrojDaqRAaQmGPlT37lS4eavod8On409oDBqo6qvDWuyh/wKrkIlognxVDfAgvcmQp3pkXNGU6x02Vmi0/fIwHZlwJyb4RRFmKc6Bx03+0x+FRA0+oktWc5Uf2RCuA0W6RPdOh/+NDp37APBp8KKrZfgwQNUyDXERL0G06FfYSFNUrnq3KhQ03/I0EUMHSOIWCwILnQYuZHk1QvqZyDnKgcylLYNdHU2ok5CWrfHs1Lkd0a0PewT/+jPv5uPT4BRBiVq+74x0GyLyVoXJXAnlH+WQcrDdVLHPof842ajfs3+dSf71Zk1U0JGqZA7lXDWRjtqCPfvuPey4XWmsHNAe3XDOLvLD1gUC7Unecy8yNJnFnlf2ATAqIgwp2lcGYqqpc6BL2agT8F9G3w6H8kIOjVh92EEQ7Cnv/MkX05oPl/p0gsKO+Of0opqk+1sdMqev0OIbs1xNupSVTQqLYCCRomm47maDf5Uis7qilQjt9VrTXZrWGUYRhDwGDPUMz8SJL65S4qJUMnReUpFABz6hW1b1XULHPwOkN6H/Dpe8Aj8/JhTuSmof+xgNe/M0jLmhRVi8t77ht3jkVigWXUIdLbGeK9FkbVYivs2FP+PeymmdCLekgbBQ0uJOaW51sU9sLOf82S3Vr6KInkAovZX0jR8C4XK115X1oh9qVUNP9Jcp5N04cSHPGtKmZfkSK92EalDuMP6ygzuuP/P0jvH/2o7HiZUk7URGFCZ2BwS2VOrVueZ6RpLOzV+LsMK0HOskYtJhN3YU6z+1dZ+h8vsf5ufvjp7CvTVJ/uVGR7ohCHopSK5lVY7jLv76qY/cV0lCU4jCqGfqem458z9D5YxoFD/vhiVZmtPvDk+BSeixtpnphkQa82qnMOkJxnleU7NPBEQNcdudJSpxZUn+bQcnmq4oaDCVGqwvdDpaD2rQ7Vpzn0bfTZe2t2zEXTgr2ajn/KoKwUNW1O2TVVKKVIzLVwZlpGo9ty20KCLo3TVF6vw6FIpmESaR2Vj/W7DEdOzLdGzhgYc1qDtytk93+YjYcusqJx1K1XSMAgRKmUiqZxrzvX4YhvVDHzLxM4zWP7DgVdmo4fZxjYHGAyZUfcOI2KxHyz02I4oMlsrbwmCgkaJpnXbtg5yYlqNJTVO6Q1Pfd6DD5XwhdNQfXpNi2fTuE0ScAgxFgpFY24aPqLJEd8vYrqMxzUGDKZfoem87oMuW2B2WRfMaJsRdVJZldqYTaadLDcXoNDKadTUix4O8waway0wm0un2FOWmu8HZqu20tollBQdbJN62fSODMlYBDicCml8vMtWMy5Ms3Mjyex60v/XmVfDun8SSaaMrzMTprp4+xoLpFDCaPXYVxm4I0RCRommdduGDSkohLSZSOArrtyeCUMr0wutGj9dEoCBiHGmVIKu1rR+P4Es7+cJnlM6aeC/scCdt+SQxvMKh0nTpOF22J2vMm+EhBmyitoOhQJGiZTfoIYE1ZK4cwon7fH69T0/M4z7m1sNyhmfSKJW8GzyQkx0ZSjqFnqMOeraaqW2KWdEQLouj3HwGN+WWUb7BpFcr5ZE0VuR0jYP8EbNM2Uz1kpBsJ+jKqNAdh1CqtMZlHT+b4M/h7zA0vDu1yqlzgSMAgx0RQk5lnM+VKa2rOdYfN7H1o4ALtuyuLvLJ9mCpWOasGYvA46B9ltldUZUoKGSeTvDY1TWW5r+bw1/k5N7x8942FeqWMtGt6VkDoMQkwSpRT2DEXzp1LUvt0tKXDIvBiy97Zc2dQsUEqRONIy6ySqo86QlaR8zkwx4O/VhFnToKE8Tpha62ha31fNvlgqATPem8CZWR77L0RcKBXNqtn8ySRVp9jmgUMI3Ws9Ms+Vz2iK5JGGxbA0ZF8N0GF57LcJCRomi46Ko5jORJcol0yDht71ntHMcQCpY21qznbLrnCMEHHhzFS0XJ4yrlcAEHRrdv9njnBwAjdsErmzzWcX9nfp0urOxFyZnJmmP40m6NZmw3MUOC3l8dbkXgsZfNaszU8lyM8nMcEbJYQ4oEJlxOa/SmI3mAfv/Q/7DD5ZYmn4aUo5UT8PE0GXJuiRTIMYbyH4XaY1GsCujv8wQx1q+jf5+HsNK2DOs6heKp0fhZhqSimqlzjMeHfC+CyhPdh7e46gP/4nUGWbTxbod4UE3Yc/HXlcSNAwWcIoIjVhVavDm5lumtA56H80MC7mVHOmU9KVjRBi4ihH0fAel/QJ5rXsBzYHDGwugyGYFiTnGVaG7IsCB10hUYMEDZNEhxhfcdvV0TS3cRd0a+OS0VY11JzpSpZBiGnErlfM/IskVo3Z+joD3XeZ92GavhROs0IlzdY2rfRbDiRomCxh1BHShFVt/mGdzgaeCggHzPY5vcgxTgcKISaHUoqqxTa1Z5sPwxzcHJB5Poh1ul4pcGYorCqznfZ2xHhnS1TSUfrqq6/m9NNPp7a2lubmZt73vvexZcuWEetkMhnWrFlDU1MTNTU1rFq1io6OjhHrbNu2jZUrV1JVVUVzczNf+tKX8P3Yh6YHpUvp01AT/0yDDjQDT/hmTRMWVJ9mPo+9EGISOdDw7oTxFNBBn6b3AR8dxPtE6jRYxp2yc29IpmFU69evZ82aNTz00EOsXbsWz/M4//zz6e8fqqP5+c9/nttvv51bbrmF9evX88Ybb/CBD3yguDwIAlauXEkul+PBBx/kxhtv5IYbbuCqq64av72ahrRn3sPWrlGoxARv0ATz92gyLxqOmkhC9WnSAVKI6UgpRepoi9qzDKfE1ND7oIdv2IdrurIbzDMN/s6wbIpbHUpJE6PeddddI+7fcMMNNDc3s2nTJt72trfR3d3Nz372M37xi19w7rnnAnD99ddz/PHH89BDD3HmmWdyzz338Mwzz/C73/2OlpYWTjnlFL797W/zla98hW9+85skEjE/Wx5A0KPRJskUBU6DinWdAq01/m6NZxh9J4+0ymaIqRDlSNmK+vMT9NzrG5XC9zo0A48H1P9ZfL/XKqlwGi2yBtFAOKgJ+zV2XXyP26YO6x3t7u4GoLGxEYBNmzbheR7Lly8vrnPccccxf/58NmzYAMCGDRs46aSTaGlpKa6zYsUKenp6ePrpp0f9f7LZLD09PSNucRP0Gg7JUWDPiP8HL/tqYFzopfpkB6sM+nAIUc4S8y2qTze8zgyhb4NHmItvtkEpjCvTao+KqdUw5qAhDEM+97nPcdZZZ3HiiScC0N7eTiKRoKGhYcS6LS0ttLe3F9cZHjAUlheWjebqq6+mvr6+eJs3b95YN3vKhKZBA2DXxj9oGHzGsGkiBanjSpxdTwgx6VQC6s5xjTtpDz4fxH5UgWk/jtADv1uChoNas2YNTz31FDfffPN4bs+orrzySrq7u4u37du3T/j/Od6CPo3R0GUV/6BBe5A17M9g1yqSC2T6ayGmO6UU6RNtkoblpf2dmszz8Z6Pwm0y21ftRRV/K8GYgobLL7+cO+64g/vuu4+5c+cWH29tbSWXy9HV1TVi/Y6ODlpbW4vr7DuaonC/sM6+kskkdXV1I25xE/aZN09YNfE+gXrtoXFNCqdR4Up/BiFiwUpDzVmGwy819D/qx3ropWmmQfv55okY76upko7WWmsuv/xybr31Vu69914WLlw4YvmSJUtwXZd169YVH9uyZQvbtm2jra0NgLa2NjZv3kxnZ2dxnbVr11JXV8eiRYsOZ1+mtcAwaFBxzzRo8Nq1cX2G1JsdMC84J4SYSgqqT7GNO/wNPhcYV8KdjuwZltlZ0o8q/lZCVciSRk+sWbOGX/ziF/z617+mtra22Aehvr6edDpNfX09l1xyCVdccQWNjY3U1dXx6U9/mra2Ns4880wAzj//fBYtWsRHP/pRvve979He3s7XvvY11qxZQzJZvr3hgj5tNiRHRUMu40qj8TpC406Q6eMkyyBEXCilSB5tkzjCYrD70E2QQXc09LrmjHh+z61klPkNDTo5+l06qktT0lk1fkp6J6+77jq6u7t5xzvewezZs4u3X/7yl8V1fvCDH/Dud7+bVatW8ba3vY3W1lb++7//u7jctm3uuOMObNumra2Nj3zkI/zlX/4l3/rWt8Zvr6YZHWrC/kOvB1Fno1hXgwwgtz00y6okITEnngcTISqVlVRUnWo4L8MgZJ4P0WE8r8BVUmEbltAOujU63v0+jZQUE5l0aEmlUlx77bVce+21B1xnwYIF3HnnnaX817Gm/Wgcrwm7OuY1GgLIbTfrBOk0Kez6+M/mKUSlqT7VYc+vcmjvECvqqIlC54jlJHxWIirrb3IVFPYbZpNjTi7zJoMPYcZsVataxfpd0T5kt5t9c5xGK979N4SoUG6rhWuYJcy+HBBmY5ppcBRWyrB8dn9lZBpifHqKDx2ANixyYqXjHTQEPdqoYhyAO0vlo3ghRJzYDYrkkWYHqqBb47XH9GzqYBw0SKZBjBsdaHTObF0rFY2giCuvIzSbpEpB4gg71k0xQlQq5ULqGLOibDqAzAvxPJsqB+NJq8IBDTHtu1EKCRomQ4BxOVWVUsZT0E5HXmdolqJT4M62Yr2vQlQqpRSpY2yUSX/IELIvBbHsDKlKyDRI84QYN1HzhNm6VirezRN+h/nQUrdFIgYh4ipxpGXcuTH3ekg4MLHbMxGUpbCqzNbVWQ7dMbQMxPj0FB8l9WmIcfOEDjWe4RSxyganWT5+QsSVXaVIzjMbeuntNO/rNN1YNYbZX52v/Fvm5Kg9GUrq0xDf5gmdxbj6m92gjNsKhRDTj3IgeZRhZ8i9YdRRMIbnVLvaPGgIDCvhxpkEDZNA+xgPOVIxbp4IczqqfGnAnWmhnJhGR0IIcCAx1zY6oYYD4O+JZ5ll035mmujCqdzF9PQULzo0b+uyUsQ305DDOAVpNyizTlRCiGlJKYUzS6ESZuvnXjcr+jbdWAnMmycMm6HjTIKGyRBE2YZDUtFQJhXTqEHntHGbniNBgxCx584yL36Uey2eQwtUwvyILJkGMS60j/GIAuXGt09DmMO4ecKuVzK7pRAx58y0jPsm5V6PZ9BgnGnAvMN7nEnQMAm0Z/hBsqLORXEV9mmzSFvlg4a4DhMRQgBRxtC0qmuwV8dySKJKlDB6wrDDe5xJ0DAJTD9IKt88EVeBwfSxEO2jXW9JzCBE3NngzjI7jYRZCGM47LKUWYeleUKMC+OUlZVvnogp46DBBqt6gjdGCDEpnJlmxyydi2etBuNMA9I8IcaJaY0GVLybJ4wPCHZUGEYIEX9Ok9lppJTRVdOJZTg6RJonxLgxnnfCinfzhOnICeXI7JZClAunyXAWyJhmGrAx75wew/k1SiVBwyQoLdMQ35NpSc0TkmkQoiw4jSVmGmJ2Xi1laLiOZymKkkjQMAmMR08oFe/mCdO66zbGk8AIIaYvhcKuwazAUxhNHx23qpDKKuECR4IGMS4MP0jKKi2qnW5Cw7rrygYrLZkGIWIvX1vGdIRBLOefKOEsKVNji3FhVA2yIKZBg9YQDpqtqxLxzqgIIYYoF6ykYa2GPswK3U0npn0aNPHbtzGQoGESGAcNCpQdzytw7WvjZhjJMghRPlRCoQyDhjhmGpTZnFwA6CBmOzcGEjRMAu2b9mkgvpmGnHlwJFNiC1E+okyD2bphv0bH7LxaUp8GyTSI8WDco1bFt0+Dzmnj/ZRMgxDlQ7mYZxoG45dpQGFe3EmCBjEeTK/AVZwzDR7GHT4laBCifCjbvI9SmCV+QQMYb3MllMaXoGESlNI8UVIqbBrRvnl7nkoS25k8hRD7sM0r2cayzHIpm1wBxzUJGiZDJTRP+Nq4Pc9KVMA3S4gKoWzzonRhjthlGkrqg1EBqQYJGiZDCUFDXN8R7Zu35xkVghFCxIKySss0xK0jZEkbHNPjdykqYBenXimfORXXdyTAvE+DZBqEKB8lNU9M7KZMCGmeGCGup6h4Me1RW0Iv3elG+1oyDUJUIqWMO3DrgNg1TxCab3IFtE5I0DAZShqGE9MPnQ4wDo7iPJOnEGIkVUpRuhjOzVBan4YJ24xpQ4KGyWA4XapSQExHTxCCNvx2xXkmTyHE/kybVXUcp442TjMgQYMYH6VkGuKa3tIh5l+umI4QEUIcgOl3upTjxHShKS1wKHMSNEyGUvo0xPUdKeFgENdhpUKI0ZXSgTt22YZSOrJL0CDGRQX0aSjpCkKCBiHKSylnkpiVWpY+DSNJ0DAJjD90Mc406NB8/HVsh5UKIUZX0tV4zM6sJY2Zn7jNmC7k8D0ZKiG9VcJc8nGd/lsIMbqSrsbjdtaphDo7JaiAXZwGYtaENxbSEVKIClbOxzhpnhhBgobJUAkfOukIKUTlKudjXCX0SSuBBA1ifEimQYjKVca1DEoqzhfXOjslkKBhEpTUETKmnzmtzfczmv47pjsqhNhfKcPK46aEOg2x7ZNWAgkaJkM5t/cVlNI8YVXGl0uISlHShVHMlJZpmLDNmDYqYBengXJu7yswDRos5FMnRLkxvhKP4QGulIq+FXBsq4BdFJNBV0Q6RQgxKuO2yYndjAlRAc3LpZCgYTIYn09VfNP28sUSonKVdfNECRdEFXBGrYBdnAYq5SK8UvZTCDFEl9DuH8czjvRpGKECdnHqGafu43wVLgGDEBVJF/85NBXDY5wuZfREBZxRK2AXpwE5oQ6J2QFDCHEIpUwdHcczjhR3GiGOb2F5q4APXUXsoxCVQuvyDhpKmnui/A9uJb2F1113HYsXL6auro66ujra2tr47W9/W1yeyWRYs2YNTU1N1NTUsGrVKjo6Okb8jW3btrFy5Uqqqqpobm7mS1/6Er7vj8/eTFflnmkoJX03oRsihJgKxoMn4ngAkEzDCCUFDXPnzuW73/0umzZt4tFHH+Xcc8/lve99L08//TQAn//857n99tu55ZZbWL9+PW+88QYf+MAHis8PgoCVK1eSy+V48MEHufHGG7nhhhu46qqrxnevppsy7llcshi2aQohDqLE5om4ff2luNNITikrX3jhhSPuf+c73+G6667joYceYu7cufzsZz/jF7/4Beeeey4A119/PccffzwPPfQQZ555Jvfccw/PPPMMv/vd72hpaeGUU07h29/+Nl/5ylf45je/SSKRGL89m07KPNNQSkcoIUSZKfcyyzI19ghj3sUgCLj55pvp7++nra2NTZs24Xkey5cvL65z3HHHMX/+fDZs2ADAhg0bOOmkk2hpaSmus2LFCnp6eorZitFks1l6enpG3MpRLL9QeeVcRlYIcWAlXTRYqqyPAcbHwRgrOWjYvHkzNTU1JJNJPvWpT3HrrbeyaNEi2tvbSSQSNDQ0jFi/paWF9vZ2ANrb20cEDIXlhWUHcvXVV1NfX1+8zZs3r9TNnlLG6a0y/jINVyG7KURlKGGyujh++VUps/IGE7YZ00bJQcOb3/xmnnjiCTZu3Mhll13GxRdfzDPPPDMR21Z05ZVX0t3dXbxt3759Qv+/cWf4QSrpwzmtlNB7GmJ54BBCjIM4fvdLOC7roPxTDSX1aQBIJBIcc8wxACxZsoRHHnmEf/zHf+Siiy4il8vR1dU1ItvQ0dFBa2srAK2trTz88MMj/l5hdEVhndEkk0mSyWSpmzot6FKqpZX8bkwjZXylIYQ4MKVKaFoNiF3/J2VjftySTMOhhWFINptlyZIluK7LunXrisu2bNnCtm3baGtrA6CtrY3NmzfT2dlZXGft2rXU1dWxaNGiw92U6SnU0c2AsuN7RtWmo2ZllkshyovC+DutgxhObVfCcVlXQNBQ0rXtlVdeyQUXXMD8+fPp7e3lF7/4Bb///e+5++67qa+v55JLLuGKK66gsbGRuro6Pv3pT9PW1saZZ54JwPnnn8+iRYv46Ec/yve+9z3a29v52te+xpo1a2KbSTgUbTplNPHueWualotjGVkhxEFY5seuOJ5UlelZUsdz/0pVUtDQ2dnJX/7lX7Jjxw7q6+tZvHgxd999N3/2Z38GwA9+8AMsy2LVqlVks1lWrFjBj370o+Lzbdvmjjvu4LLLLqOtrY3q6mouvvhivvWtb43vXk0nYQmdhOLaPKExT8uVcIARQsSAUubZw1JqHkwTpRyvJGjYx89+9rODLk+lUlx77bVce+21B1xnwYIF3HnnnaX8t/FWaqYhplfhpl8WVVIDqBBiulOYd+LWPvHr0+Bgflz2Y7ZzYyDXfBNMhxhH18ZpsGlI+jQIUaEUqITZWVXndOyyDco1v8gJsxO4IdOEHL4nmPa18eiJUj6c043OGfZpcOI8tFQIMRpl2iVNQ5iN19W4ShkmRzXomO3bWEjQMMG0h3mmIa59QTVo0wjblqBBiHJjpcwqPeoYnliVrcA1WzfMlFizJoYkaJhovvnIAsswxTcdhZJpEKJiWckyTuEr8/3THmjDIfZxJUHDBNO+eRterDMNObNVla3AiW9wJITYn0oZrhjDTENJfTa88h9BIUHDBNN+CSML4pxpMDwQKGmeEKLsmDZPoCEcnPDNGVcKsAyDIu1R9lUhJWiYYKX0abDinGkwTTlK84QQZcf0pBoFDfHLNBg3T/haMg3i8JQ0eiKmmQZNCZkGR8W3iJUQYlRWVQmZhsyEb874UuZNx1HzRMyCohJJ0DDBtI9xuqoSMg3KyQcOQoiyYaUNr8Q1hAMxO6mqfPOLAZ3TYFqzJqYkaJhgpUSeqoQeyNONeaZBmieEKDdWFSX0aSjfoCHMlVDoLqYkaJhg2jNv4zJuF5xuNGjDlGOUaZjYzRFCTC4rrcwqLccwaFAqHxQZ0DkdjZgrYxI0TLDSOkJWQKbBVSCZBiHKipUucfREnM6rpTRPeJJpEIeplHG7yvCDOe2EJdRpSOYnrRJClA3lgEqYrRtmNDpOUYMFqsq0T4MEDeIwaK3RnjbrCGmBcuN5Qg1z5iNE4pxNEUIcgFXC1XjW8Jg4XSjzpuMwpyVoEIfHtGSqcuPbQVBnibpFG4htvw0hxAEpy3wERZiNX9VE49Ehufwwe8PjYRxJ0DCRSpjRLc4dBHXWfJKWOI8QEUIcgKVQabNVdTZeBZCUUtFweJOLurCEQncxJUHDBDOvX6CieRliKMxhHDSYpjCFEDFSSmfBLLGrZaCSyjgTHLs6FCWSoGEi6fxUqQaUQ2wrJRpnGlSMC1gJIQ5IldCnIczp2FVNtJLmzccSNIjDYjyqwI1v80ToGXdpiG2pbCHEQZTQWVDnMO44PV2opPlQ8WBgYrdlqknQMJFKyjTEt3kCz3xV02FZQogYscz7K8VxJkgraX58jlvxqlJJ0DCRSp6TYWI3Z6KEXgkdId2J3RYhxBQooelR5+LVERKiix1pnohI0DDBTEdP4BDbSonap4SgIabZFCHEASllnmkIS6iSO11YJTRPSNAgxkxr0KU0T8Q006BLyTRI84QQ5ccqNdMQrxOrko6QRRI0TDDj4k4Ose3ToE37NCjJNAhRlkrINJR9nwbpCCnGrJTiTjEePUFQwuiJuO6jEOIglHF/Je3FcfQE0jyRJ0HDBCuluFNs+zSUcABQ8okTouwolb8gMPl+h8SuT4NyzTtxy+gJMXY6395vQNnxnXuipAOAfOKEKEvKMZwem2h+hlgpoeJlmCN2QVEp5BA+wYzb+x3Aiml7v8a8I6R84oQoS8rBPGgoobbLdGE82V5oXtQvjuQQPpG0+ZcjmhZ7YjdnopTUEzqugZEQ4qCUY34Mi2PQoEzn1gjyw0rLlAQNE0gH5idUK86jCkqIGSTTIER5KuvmCcynxybU6Fz89s+UHMInkGl/Boh5/YISvh/l+1USorJJ80REB9I8IcZIlzBldKzrF5TSgbOMOwgJUck0GAcNcWTaPEGAZBrE2Gi/MuZkUCX0U4hbJTghRAnK+OttOnpCh/HMpJiSoGEClVQpMc5TRtuYX2HErBKcEEJAaaMnQsk0iLHQHpWRabDNY4a4zW4nhBBg3hFSB1r6NIix0aF5ti62hZ0g+hSZdoCSoEGI8lTKxXUME6vGndXDeI4OMSVBw0QKSxg9EeN3wjjg0YD0aRBCxJBxNlhT1s2wMT5VTX86xDz6jvE7oRLm47PDzMRuixBiipT58c50hJsOyzujGsO3LkYqZE4GK4150FDmM8AJUal0zny0mGU4jfZ0YpWQadD+hG7KlIrxqWr6M50uGkobtjjdWCll/Ekq9xnghKhUYQlTXqvkxG7LRFCOZBpAgoaJVTGZBmVccz4cnNhtEUJMDZ3Txsc8K4ZDzEvp0yAdIcXYlNDGF+eOkFYKs+YJLc0TQpQjrUsYYu5QWhXZaUChou02Oc6FSEdIMTamqToglkOQCqy0Mp69UoIGIcqReW0C5cZwiLnKX9iZbLfOzz9Rpoc6CRomUoU0T6iUMs6U+N0aXa7fJiEqVQhhpoQZfeN4vLOUcbATTVZYnse5OL518VFK9iDGny/lgF1rmGnoL+9qaUJUIh1G320TKgnKjmFqVZk3I5eUZY4ZCRomUEn9FOL8IVNgzzBtnpARFEKUnRCCPsNMQ5WKddl8I2V8iJOgYSKVMJFTnIfoKAsc06BhUEuBJyHKjA4g6DUMGtIK5UzwBk0x09FkcSRBwwQqpbNPrKeMVuDMMPsohYMaLZkGIcpLAEGXaabBvLqimH4kaJhIpfQQjnvzRKP56AlpnhCivOhAE3Sbfa/tGmU++ZOYdg4raPjud7+LUorPfe5zxccymQxr1qyhqamJmpoaVq1aRUdHx4jnbdu2jZUrV1JVVUVzczNf+tKX8P3yq7upLPM5GeLcPIECp8G8T0PQKyMohCgnOmPePGHXxbdPg/FRq4wTKWMOGh555BH+5V/+hcWLF494/POf/zy33347t9xyC+vXr+eNN97gAx/4QHF5EASsXLmSXC7Hgw8+yI033sgNN9zAVVddNfa9mKaUXcJnJ8ZBg0Jh1xtePWjwdsQ5rSKE2Je3MzQbMWBFTZmqnBv9y9yYgoa+vj5Wr17NT3/6U2bMmFF8vLu7m5/97Gd8//vf59xzz2XJkiVcf/31PPjggzz00EMA3HPPPTzzzDPcdNNNnHLKKVxwwQV8+9vf5tprryWXK7OxeCW8uuWQabCqzA4EuTckyyBEOfHaQ7MmVgucWTEOGOTQNbagYc2aNaxcuZLly5ePeHzTpk14njfi8eOOO4758+ezYcMGADZs2MBJJ51ES0tLcZ0VK1bQ09PD008/Per/l81m6enpGXGLA1XS6Il4fxrtBoVVZbZublsgXz4hyojXHhp9p5UFbot0pYuzkge+3HzzzTz22GM88sgj+y1rb28nkUjQ0NAw4vGWlhba29uL6wwPGArLC8tGc/XVV/O3f/u3pW7qlDOdFY1C3fYYc2ZY2NUKz+DIkWsP0RlQhkGGEGL60qEm95pZ0IANbktMMw1yoQOUmGnYvn07n/3sZ/n5z39OKpWaqG3az5VXXkl3d3fxtn379kn7vw+HSmKeaYh57QKVUsZXEOFAFDgIIeIv7Advl2EnyFqFXR/TTIPWxn3PjC8YY6ikd2/Tpk10dnZy2mmn4TgOjuOwfv16rrnmGhzHoaWlhVwuR1dX14jndXR00NraCkBra+t+oykK9wvr7CuZTFJXVzfiFgdWCUGDad326UopSB5pXqshty0s2wldhKgkQU+Iv9vsIiAx14ptYScdGPY9U/lO8GXa2bOkoOG8885j8+bNPPHEE8Xb0qVLWb16dfF313VZt25d8Tlbtmxh27ZttLW1AdDW1sbmzZvp7OwsrrN27Vrq6upYtGjROO3W9KBcZVxjPczq2J9EkwvNClPoLGRfLeNp4ISoEFpr/L0a3zDTkJhrxW+GS/KHqhCzzp6KMTT8x0dJu1ZbW8uJJ5444rHq6mqampqKj19yySVcccUVNDY2UldXx6c//Wna2to488wzATj//PNZtGgRH/3oR/ne975He3s7X/va11izZg3JZHKcdmuaUPkmCgM6S/TJjHF06s61sKqi5odDyb4UonOgJq+VSwgxAbKvhGaT0ClIzLNLK3o3bWjzfmdWDKf+LsG4x0M/+MEPsCyLVatWkc1mWbFiBT/60Y+Ky23b5o477uCyyy6jra2N6upqLr74Yr71rW+N96ZMPRXVWTfpQaNz0YfSNMiYjuw6hTvbIvvSocPxzAsB4YDGSsU3SBJCwOAzZg39VhUk58a3RkOYNZzF0yrvPg2HHTT8/ve/H3E/lUpx7bXXcu211x7wOQsWLODOO+883P96+lNgVxs2T+TyIyjiHDTUKhJHmAUNfpcm+0qI0xjTTlFCCPQgZF8wCxrsWoU7J77fd+OJ9izKukx2fN/BmLCqzdbTWY3OxbuNX7mQOtY2+1SF0P+4L+WkhYix7KshvuFEVU6ThRvjwk6mc+YoG6xkfPfzUCRomEBKYVwlsZhpiDGlFOkTbLO68hoGnw0Ieyd8s4QQE0CHmsEtvvGcE+lFce3PEDGdnVfZ5T0hlwQNE0lFM7qZ0Blt3GY2nSUX2DgzzPY5uzWICj1JtkGI2NEeDDweGI8oqDopxhEDEA4armiBSkimQYyFitrxTISZ/AiKmLNSULXYrKtM2AsDj5Xf7KZCVAJ/r2bwabP+DM5MhXuERZynfwz6SmmemOCNmUISNEwkC+x606ChPDINOFB1smETBdD7oF8WwZIQlURrTf/DPkG/2TEreZSNO9OK84hygm6zAlbKKYyaK08SNEwwu1YZBdc6G3W0iXuqXilF6s02doPhjJfbAwafDmK/30JUknAA+jb6ZmWVLahabMe+Jotp3w3lms/4G0cSNEwgpRRWtTLuGBgY9kKe7hJHWKSOMmu/DPuhZ72HllYKIWIj90rA4NNmX1qVgOolTmzrMxSYBw1gpSd4Y6aQBA0TzKo270lrWop12rOg9m2O8aer7yEfb4dMYCVEHOhQ073OM6r8CpA+zibRGu9TjfbMKt1CfsRcvPt8HlS838kYsGuVcdVDb1d5nDgVivQiB7fVbL+Dbk33XR7aL5OgSYgypbUmtz2k72HD1KANNWc6ZdE0YVpHx7RpNq4kaJhgdq1CGRb6KJtMgwK3RVF9qmHBUQ0993vkXi+PoEmIshVC9+88/J2GBZ0aVFk0TYS92mx+DcBpjPe+HooEDRMsyjSYrevvCk2mqYgF5SjqznONrzD8Ts3e23OSbRBiGsttD+n+nWd8nKo6xSEx14rzSEsgn2kwLL7nNJX3abW8924aUCllXKsh6NGEfRO8QZModbRN1YnmjXu99/sMPCUjKYSYjsKMZs9/5Qj2mH0/rTTUL3fL4iwT9GpCw+YJyTSIw6IUuM1mL3OYA293+aToVQrqVySMsw1Bl2b3z7NR4CRxgxDThtaagSd8etabZxlSx9mk3myjYp5m0Frj79XG9WTKfRK+8t67acJ0Zjed1eXTr4FoyGnNGU40iZWhgacD9t4mzRRCTBdag9eh2XVTFm0606MDDRckogn74h0zQAh+p1nTsUoVCvrFfacPTIKGSZAwDBrCXNSvoZzS8yoFM96dMJ/AxYc9t2bpe8RHh+XzOggRVzqr2fPLLJkXzbOgVSfYZdEBEkAH4HUajpyoU1hVxLry5aFI0DAJ3FbL7JX2wWsPzSaAiZHq0x2qTjMcSQGEfbDzp1myL5VXACVE3Ghf03Vnju61nvFxSaWg4d0JrJqJ3bZJE4LXabbzdn15V4MECRomhVVtPgdF7rWwrKojFqpiNq1KYFWZPy/3ekj7NYPkXtNI3CDE5NOhpvcBP2qWMBxuCFC91IlqM5TJ5bYuXMwZcOqssp53AiRomBR2tcKdVULQYDi0Jy6UgtTxNvXnl9aTOvN8SPsPBsltkxEVQkwmHWr6HvTp/EmmpBFdzkxF46oSmiNjwN8dGpeQthvNh9jHlQQNk8CqVjizzF5qryMkHCi/E6RyofGDSZJHlvCR0zD4VMCOfxgk80IofRyEmATajzIMHf+cKa1jtopGS6WPs8smywDRhZzRxFwq6r9WTvs+GgkaJoFKQGK2WYGTMBcVUCk3SimcmYqZH02W3NaZeT7kjW8P0Lvel1EVQkygMKPZe0eO9h8O4hvWYyioOtlmxntdlF1eJ83sthBtOJtnYn78C1kdigQNk0ApFX2YTF7tADIvmHxC40cpRfXpDjPemyh5QhevQ9N+zSCd/5rF65QOkkKMJ601XntIx48y7PxZtuQic85MxayPJ437bsWF9nWUaTC4jlM2JOeV/ynVvEu7OCzJIy2Uw6EjVg3ZlwO0r1FOeX0BAayEovEDCbJbQ/o2+CUVcQr7Ye+tOTLPBTStTlJ1so1yVVkPbxJiImkdFS3qf8Rn1y+yZF8uvZS9lYamv0hGhZzK7MsY9Gu8NwxHTtQp7Bnltf+jkaBhkiTm2Ni1Cj976G9kbkdI0KPLthypVaNovjSFv3uAzJYSm2I0DD4T8PrfDVB/rsuM9ydI5KP7cjtgCTFRtNYQwuCWqJha3wbfuOLhCAoa3puIOjmX4fcv6NHkdpgdoxLzLCy3/F6DfUnQMElUEpILLfxdh2568NqjsqX2DF2WJ0KlFO5saPl0mvbvD0ZXNyXSg9B1p0f/Yz71KxLUn+viNIOyyu/1EmK8FDIL2ZcDun7r0bfRJ+gaY1OfBXXnujSuSmAlyvN753dqgr1mr09yoV1Wo0YORIKGSaKcaAKn/kcOHTQE3ZrsqwHJo8q3fUwpRfpNNi1/nWLH9zPGKcARNHg7NLtuzNK73qPuz1zq3uHizFBl1xlLiLEqZBXCfs3A0wHdaz0GnwwIeg6jX5AFNW9xaP5kEqe+fI9TmecDs+YaJ2qCpgKOOxI0TBYrH4m6GNVhGHgyoO4cd+K3a4qlT7KZ8+UUO36YIffKGEeNaMhuDdn5r1m67vSoP8+l9mwnarZQ0mwhKk+ho7D2IPtSQN8jAX0PemS3hTAOxeNq2hxa16SwG8r3u6VDzcBTZi+WXRV1dq+EQ40EDZNEKUXiSAu7TuHvPnTomtkSoDOg0pOwcVNIKUXqeJs5X07TcW2GwacPY+RICN5rIbv+PUvX/+SoOtWh7u3RhFl2g5LgQZQ9HURNm96OkIEnfPoeCfDeyBcnGo8BRw7Un+sy82NJnKbyzTAA+Ds1uTcMpwGvhuTcEoeExZQEDZMocYSF02QWNPi7NdlXQtLHl/8HUSlF6hib2V9Msev/Zel9wD+8qpgh+Ls0PWs9eu/3SC60qDrFobbNIXGEHc28Z0kGQsSb1hrtQTioCbo0g88FDDwZkH05ChTCwfH9/6x0NKdE04eT2DXl/d3RWpPdFhLsNct+JhfY5TPXxiFI0DCJlAvpRTaZ5w/9QQx6NIPP+qTebFVM5z53jkXr59IkFuTY819Zwt7D/5s6C5nnQjJbcuz9rxzJo2yqTopuqTfb0bjy/AWTBBFiOirWJNFEAfHu6ISW2xaQ3RqSeTEYKj8/QeVLnJmKpo8kafgztzLOGjqqlxMOmK1etdgu+6JOBZXw9k8rVSc57P21d+gvdwgDjwc0rIxGXlQCpRQqDU0fjErR7ropGzVXjMeBUEftu5ktAZktAXvvALtGkVxokz7RJnW0hdti4TRZWNUSQIipowNN2KfxezRBj8bfExUYyr0akn01wN+j0RlNmGXiZ8S1oxPirEtSpI7OX8BUwFdDe9D/qFl/BpWC1JvKPyNcIEHDJFIoEgssnJkKf+ehz4SDzwYEXRqrpQK+pcMoV1F9atSRce/tObrv9oyHPZnSGfAzGn+XT/8jPsoFp1FhN1q4sxTJBTaJBRaJeRZ2jUIlosJUygVsKSglzBVGL+gA8KNZE7Wv0TkIBjX+bo2/M8TfFeLt0vi7QoJuTdCnCXo1YT8THxyMwmlWNKxM0PBOt+L6BHntIdlXzPpXua3RBUelvD4SNEwmBW6zRepoi76dBkMv+3VUh+CdbsV8IItUvjTtx5LULHPY86scfY/449LzezTai0pVex0BmWehN/8fKSeauc5psnBmKJwGhdMU3bcbFHaNwqqNftrVKvpGDb8YU/v83Pfxg26U4eN6n4f3XR7mT1RefuhdPo2tfQ1B/mQWgEaPmuIuLFcOQ005dnQDwFLRsvx+KXfoBVAOKCt6nnJU/uco+69G/BjlzmE8bmK01/pgr3NhWRDN1xBmo586qwkHIOiLsgUjfg5Ewx6DPh0FBV0hQX/+b02jqugqBbVnuTT+rwTJhZU3AklrzcATgXGfkOT8qK9apZCgYZKpJKQXO/Q9HBz66iGAvo0+de9wy34UxWiUik4+6UU2s7+cpu8hn72/yUVjpydpeg7tRwVe/M5h/6EC8ifN4gnRjk6IdpWKmjeSCpUEK6mwCr8nCs8dOskqm+I8HPudsAsn9sJJPxh2tRro6LFcNDRM54ZdwXr5dbz8OiEjTky6cNbTQ//P8P9z/xcheo5SjDwxG/w+4mQzLIBSdj54sKNgonh/+O/516lwv1B7QxVeRyvqJ6QYet6+lMX+R7n867nfPvpAqIde61z+dfZGvrY6qwkzUQdE7eX/nib6p/B7SBSIhUxJlmAsVAqqlzrMuDBBelFUqKiSgoUCnYH+x33jmS2rlzhlWfL/QCRomGRKKapPc9iVyKIzh15/8JkArz0kubBy2sz2pZTCroa6cx2qT7Hp+YNP929z5LaH+x/8J4NmKM084kHGXl0vBsa2ZybPKt/XbNpTYDcoqk6yo2mtT7CxqyrnBDgarzNk8CmzqxKrGqpOqqxjswQNU8BtsUgdbRvVJAi6oiaKxJGV02Z2IEopnEbFjPe61L3dofd+j667PLKvjk/BGiEqhgNus6L2bJfas11Sx1hR1qfCjzFaQ9/DvnG1zPRxNnZjeder2JcEDVPASkPNmQ6Dzxo0UQA966P5FewKGQd8UCrqUOo0KBouTFB3ToL+TT7d63IMPhkQGmRvhKhICpwmRfoEm5ozXaqX2FG9BenYW6QHNX0PGV6BWFB1soOVmthtmm4kaJgCylJUL3HY8185o3R27tWAgSd9atqcir8SKMp3zrLroPYdDtVnOGRfCeh7wKfvER+vPUTnpnojhZhaKhUFCqmjbarPcEgvsnFnWdEEU3IoGUHrqEBWdqtZ04Rdq6he6lRMHZ0CCRqmSPJIi+RRFgOPHfoDGg5Cz3qPmtMdKP/pKEpW6PNQdUJ0UJzxgQSDmwP6HvEYeCKamOewKkwKEQcq3zE0Acl5NlUn26SOt0kutHGbVcWd3EoWQs/vPcI+s9WTx1gkF1RW0wRI0DB1bKh7u8vAE2ZNFP2P+mRfDUkeLX0bDkYphTtL4ZyjqH2bg9+tGfyTT/+fAjLPBWS3S/8HUUZscGcpEnMtkgttUm+ySR1r4zSp4hBZOV4cmtaQez2kb6N500Td29ziyKdKIkHDlFFUneyQOMIit/3QUUPYB13/k6P5slRFzNl+uJSKaia4TQr33AS1b42q63mdmsGnfQY2B+TeCAn26vGbzEeICaISUTrcqo368yTmWqSOsUkebeHMsLCqFVYaySaMVaDpudcj6DY7ELgtivSJNqoC23gkaJgiSkUfvOqltlHQgIbeB3wa3h2SOroCw9vDpNxCUSZIH28z4wNRJT6vIyT3Wkh2a0h2W1TDPxzI1zjwmLR6EKKCWRTrUeDkP6sNCne2RWK2hTsnqlJqz4iKCDn1qqLqAkwGr1PTs84zrqlRdbJDYo5Vkf1CJGiYQspW1J+XoOsuD21QfSzo1nTdmaPlspQcNA6TsqJmDHeWRfoEXZwMSPvg7wrJvR6S3R7itYf4ezTBXo2/N8Tfq0fW15AMhRjN8K+nFY2YsqryFUTzP+0GhV0fBQF2Y77iaL7aqDWsgFWxWqY0M0wIHWq678nhdZh9mVUS6s93i8XGKo0EDVMsMc+iZolD7wNmbWm9D/jUvi2garEtB5FxUqg8WbjiS8y1Scy1qT4jX+EvF1Vr1J4mzJGfRCg/P0BP1LwR9GjCHk0wGFUUHFG10WeoXHO+GmOxSuNBN4yhCYKsfEVGu/A4xcqKWCq6bw+tE92P5spQ+atX5Qz9jiJf8S9/v1BdcZ/0duHqF4hei0KH0vy0zDp/ZaZ9XfydYFjFRQ06Fy2LKi5G9wkhzOX/TuG1CPLVFAs/w/zrn19e/PvDqiyOqLioh23DcHrobxQqeO73UtuFFzz/Wlv7/Cy87rbKV7EElVBYKbDSCiuVbx5IqWJVULtOYdcprBqF5Q57np2veulGr618j6eO1prctpCe35t3dKo6xanoYnsSNEwxlYL6FS79j/lG07AGezV7/ztH+s1pVIWND55sSuUP9GkgDcVLvtkwag8onS/pXCg7HOwTQBSDBoZOjAf7/wsnuBFBwv5BhLLU0Ilt+M8YtG9rHc1/gR4Kqoo/Qz0ymCgED4WAAka+poXnjiY/WaoqXL0PVwi+CnftaMWh15GhQMwaCr6kGFIZCKDrtx7eDrN2CZWAunMcrKoJ3q5pTIKGKaaUoupUh/QJNv2PmDWg9z/m07fBp/YdUrdhWlFDV5HFB8RBFTqsQv7Ke+TSyd4cUUG01gw+E9Dzu5xxM2NyoUXNsgqcQHCYyhtkOg0pF2a8O4FlOCmVzsKu/8ji7ZAGdSGEGIuwD3b/R5ag12x9lYAZFyYqOssAEjRMC0op0osdqhabJ35yr4Ts+c8sYVYCByGEKIUONN3rcvT/yXx4VOpYu+KzDCBBw7RhVcGMVebZBoCeez16H/SjdmEhhBCHpLUmsyVgz69y5oXebGi4MIFVN6GbFgslBQ3f/OY3UUqNuB133HHF5ZlMhjVr1tDU1ERNTQ2rVq2io6NjxN/Ytm0bK1eupKqqiubmZr70pS/h+1KiTylF+nibunNc46bccAB23ZAh+1J4yE51QgghIOyBnTdk8XeZHzSrT3WoWSp9yGAMmYYTTjiBHTt2FG8PPPBAcdnnP/95br/9dm655RbWr1/PG2+8wQc+8IHi8iAIWLlyJblcjgcffJAbb7yRG264gauuump89ibmrKRixvsTODPNP5heu6bzXzL4uw2rkgghRIUKM5rdv8wy8JR5s4RVq2j88wRWrQQMMIagwXEcWltbi7eZM2cC0N3dzc9+9jO+//3vc+6557JkyRKuv/56HnzwQR566CEA7rnnHp555hluuukmTjnlFC644AK+/e1vc+2115LLyZSEENVtmPHeRDSky4SGgScDdt+UJejT0lQhhBD70lEtke57PPb+poRmCQV15zpUnWjL9OF5JQcNL7zwAnPmzOGoo45i9erVbNu2DYBNmzbheR7Lly8vrnvccccxf/58NmzYAMCGDRs46aSTaGlpKa6zYsUKenp6ePrppw/4f2azWXp6ekbcypaChgtcqk4tYTSshq67PXb/RzaqESCBgxBCFGk0fQ/77Pr3LLqE69PEPIvG9yUrcmKqAykpaFi2bBk33HADd911F9dddx1bt27lrW99K729vbS3t5NIJGhoaBjxnJaWFtrb2wFob28fETAUlheWHcjVV19NfX198TZv3rxSNjtWlFLYtRYzP5LAbiohtA1g7+059tySK+lLIYQQ5UyHmoHHAjr/JWM8IRVE5aKbLkrgzlHSl2GYkoo7XXDBBcXfFy9ezLJly1iwYAG/+tWvSKdL6PZfoiuvvJIrrriieL+np6esAweIhvc0vj/BrhuzQ6V7D0FnYPcvsygbZrw3gZWWD7oQonLpUDP4VED7NYOl1bVRUHeeS+1bZYjlvg5ryGVDQwNvetObePHFF2ltbSWXy9HV1TVinY6ODlpbWwFobW3dbzRF4X5hndEkk0nq6upG3MqdchQzLkxQc5ZTUmE8nYFd/y/Lrv+XJRiQPg5CiAqko2bagc0BO76fKbkQXvIoi5mrk6ikBAz7Oqygoa+vj5deeonZs2ezZMkSXNdl3bp1xeVbtmxh27ZttLW1AdDW1sbmzZvp7OwsrrN27Vrq6upYtGjR4WxKWVIpmPXxFKk3lfY2aR/2/iZH53UZ/F1ahmMKISqKDjV9D/i0f38Q743SRpbZMxSzPp7Emamk8+MoSjobffGLX2T9+vW88sorPPjgg7z//e/Htm0+/OEPU19fzyWXXMIVV1zBfffdx6ZNm/j4xz9OW1sbZ555JgDnn38+ixYt4qMf/Sh/+tOfuPvuu/na177GmjVrSCaTE7KDcaaUwm1VzLokVdIwTIhmI+y+x+ON7w6S2eKjA4kchBDlLxzUdN2Ro/2fSs8wqCQ0fThBtdRkOKCS+jS89tprfPjDH2b37t3MmjWLs88+m4ceeohZs2YB8IMf/ADLsli1ahXZbJYVK1bwox/9qPh827a54447uOyyy2hra6O6upqLL76Yb33rW+O7V2VEKUXVYptZH0/S8c8ZwsESnqxhcHPA6383yMyPJKk7142mP5YvgxCizGit8fdodv88S/dd3tD07KZUNLdEwzsTMlfaQSgdw0bvnp4e6uvrOfbWWuzqynh3Q0/TdYfHrhtKDBzyVApq3+LQ9KEkiQUy5lgIUT60H3V43HljlsFng2ga9VJYUNPm0Pq5FE59Zc6uEPRrXnh/L93d3QftNyhTY8eE5SoaVrqEfVFFs1KHVeoM9Nzrk3kppOnPE9S8xcWqkqyDECK+tNb4nZqu/8nRdZdH0DWGa2AFVafYtFyWwq6rzIChFBI0xIhyofF/JQg9zd7/zJWefgNyr4a0/yBD9YM+TRclSR1rgSXBgxAiPrTW6Cz0PuCx579yZF8aexn9qpNtWj+bxpklHR9NSNAQI0opVBpmfjiJlVbsvjmLHkNThfah748+g88ENKxwqX9XArdFAgchxPQXDmoG/uSz9w6PgT/56OwY/5CC9IlRwOC2SgEnUxI0xJCVVjSuioo37b4pQzDGqtrBXs3uX+Xo3eDTcEGC2rc5OE3y5RFCTC9aQ9ivybwQsPfXOQae8AkHDuMPWlC12Kb1M2mp+FgiCRpiSrkw490udo1i579m8PeMsT9rGDVZdP5Lhp51Fg0XJqg9y8WqBmXJF0kIMXV0qAl6NX0P+fSu9xjYHIw9s1BgQe3ZDs3/O5WvxSDHuVJI0BBTSilwoO4ch8ScKjr/JcPgcwGMdSyMhswLIR3/lGHvb3I0vCtB7Vsc7BnypRJCTC7taTIvh/Q/4tNzn4fXHhqX0z8YlYAZ70nQ9KEEdq0lQyvHQIKGmFO2InW8xZyvptl1U5ae9d5hTVilPci+GNJ5XYauOyzqznGpaXNwZ1soRzoKCSHGn9ZRoODv1Aw+5dOz3iPzUhiNhhinogDOLEXTRUnqz3exUnIgGysJGsqAUgqnFVouT5F6k83um7NRc8VhfNm0B9mXQ3a+nGXv7TlqTneoO9clebSNlQKUBBBCiLHToUZ74HdpBh736X/MJ/NcgNcxfoECABak3mzT/Ikk6cW2ZE4PkwQNZaIwsqLhQpf0iTa7/j1L30YfgsP/236nputOj+61Hqk32dSe5VC91CExL0rvyZdQCHFQGnQ+EggHILs1IPNCyMCffAaf9gn6GJdj1b6sNNRfkKDpzxPS1DpOJGgoM8pSpI62mX1Fmu57c+y9NYfXPg6Ruwadg8GnAgafDXD+K0fqWJuatzikj7dxWywsmRFOCDGMDjRBT1TeObctpP8Jn8yzAf4eTdCnS6/caEg5kD7BpvHPE1Sd7GC5SvovjBMJGsqUXaeY8Z7oC7P3v3L0PuAd3hCl4QLwd2n6dvn0PeTjzFKkjrGpOtmh+lQbZ5aFlYr6Wwghyp/WGoLowiLMabwOTWZLwOBzAbnXArw3olEQ49rsMBoFTrOi8f0J6s51cRqkwuN4k6ChjClLkTzSouUzKWrPdtj9y9zY6rIfjI6aL/o6owBCJSB1tE36BJvUm2xSx9q4zao4n6pCIn4h4mrEVEUhBF2a3I6Q3GshuW0h2a0B2W0hwV6NDpmwTMJo7DpF3TkODe9JkDjCQjpdTQwJGsqcUgqVgOplDqnjbXrv9+m6M0d2azj+X+gwmuNi8OmAwacDVBLsGoU72yJ9vE3qzTaJ2RZOk8KuV5KJEGKa054m6I+yBGFvvplhe0j21YDcthC/WxNmQA/qMZW1Hw92o6L2TIeGCxMk5llYCTmuTCQJGiqEUgqnXtHw7gQ1pzv0/N6j684c3k49IR2QAHQW/KzG3x0w+FQACux6hTtL4TRbJBdYJI+ySS6wsGsVKhEFODJ9txATS2sNflRSXvtRcKBz4O/ReDtDvM4Qb0eI16kJujVBT0jQo6MmzukwL7INToOips2h/s9cUsfYKFeOGZNBgoYKoxQ4LYrGP09Q+w6XnnUe3feMU2fJQ9FROjPo0vBCSN8fiZoqbHCaFIkWC6fVin42K9yZFs5MhdNk5Yd5MtS0oQr7IwcKUZlGNBXoUX5qCLMUswRBr8bv1gRdYRQIdBXua/w9If7eaAjkfn9rOrEhOc+i9hyXurdF9WNkBNfkkqChAikV9StItCqaPpSg/s9ceu716FnvkX0lnLDMw6g04IPfofE7AngyykgoJ59xcKLsg12rigGE02ThNCjsOhVN751SWEmwUgqVVFEnzKSKnm9P/3LYxU5k+dei0Basg6h3uQ6JlodAoNEB0WgWP/8zzP8M8oFf4W+FQz8J9j8DaMP3WdmjPGir/OyoDPVXyR9NlJXvw6KGnltYhlN4jkJZwPDlaui5yor+rrKjx7HKvy6IDnX+qh+0H53Ao9uBHw8HolEIYW/0M+jVhH3g90QZAp2JPi86yH/G/Pz7Ppnf8XHgNClSx9nUvtWh+lQHu06aN6eKBA0VTtkKt1nReFHU23jgTz7d93hkXgwI+6doozTFA2Phcsffpcluhf2OdjZYSYpNG1Yy38SRUFHgYUe/FwKJoeAiWrd4cnMpXrGoRPSnlZV/XEM4/Aps+KZ60cE+2sjogKz9/O/54jU6LCwbdsAPonRwlB4eFhwUf+aDgxGP5f+vYYEEDDv5F6qI54OHQjBR/H2f19i4T8soQYPKv27Rib6wnhq6P3xZPrBQ+axSMTgYvtwevr4aFiwMBSbKjoJI7HxAaUfvMTZYTv4E4g4LOFwVJaScYQGNSzHIifYjCi5HYyXYv9PuAT4L0fs+8kHtEb3vufz7PdqJv/g5yD9W/PzooaaDEb+PXDYtswHjQYFVA4kjLGrf6lJ9alQXRoZ1Tz0JGgQQnSzdWYq65S61b3MZfCqg9w8efRt9/L0TN576sAVRsRgGpnNONeZGuSodnqXQo/x2aPI+iX1YoJLR6Kvq0xyqTo5GX6lktFiaIKYHCRrEEBUNiVRJqDrNJr3YpukvNH0bffo2eAw+FxD2TfVGCiHKhgVusyKxwKbqBJvq06N+ClZyKBslphcJGsSolIrStlZzNOKi7lwX7/WQgc0+fQ/60VjsnknoPCmEKBvKjfon2Y2K9HE2Vac6JBfauE0KlZJsQhxI0CAOSSmwqxXWsTbJYy0a3p0g+1LAwFMBA4/7DD4fEA4CUzROWwgxDVlRXxIrpUgcaZE+ziZ1tE1ivkVirlXsOwTl38m1nEjQIIxFX+yo+SJ1vE3qOJsZ703g79UMPOkz+FRA9tWQ3KvB+JWsFkLEhl2ncGcrEkdYJBfaJI+2SS60sKtVsROqZBPiTYIGMSaFYZsqGQ3dTLQmqD8vPznNbs3gloDBzT7ZV8OoNkNPfgy4ECLWVBKsaoVdo7AbFMl5FskjbRILLJxGFTU/1ChwJINQjiRoEONG2QpnhsKZAaljbBre5RL2g9ceknsjJPtyQPblMAokesL88DOm78gMISpNobaGPTRc2WlSuHMsErMt3HwZeKfRwp0p5eArkQQNYsIopbBrwD7GJnm0Re1ZTlRjwAdvZ0ju1ZDsayFee4jfGeLt1Pi7QmnaEGKi2dG8MHZd/lavooJpTYVKrBZuk8KZaaGSQ7UvohoXkkGoZBI0iEmhVFSUp1CYJznfJjnfpkYDQTTpTZjR6KzG79J47SFeu8brCPF356veDWr0oCbMgs5pwhzS+XKsDlCwSeeLQe0nZhUEK0K+KJly88XMXLDyP1UiKmZWaEJw6qPAwG6ImhCcBjVUNbXwvAQVUXlTHB4JGsSUUgpw8hmJmuholTgCOGFoHa01OgNBvybsjybNCTOaMJsvo9urCbujn0Fvvtb+gM4HIRBmh0ovFyohaq2H7hf/o6GfhxpJqor/7Psgw+bIyB+A931cDT2/WNkwQT6gUlguURVDN1/V8mC/2ypa185XPbTAcvOlmAtVLhMjx7sPL/08YvNtRq8eCUPVJoe9VjoXPaJzFKtUaj968cJcfh0/X764UMK4cL9YPTN/P185U3v5ipe5YX+veH9obgQ9vJbXaPMuUFgnf2f4Po325h7oPR/+94e/l8NfN0Z/fMT7XTgTKw78OXDylUrTCiulsNJEJdLT5O/nK5pW5ddL5QOF5FCF00LVU5XKV0GVpgMxziRoENOeUgqVjg6mzBy5rDhpz2gnkWGPh4Ua/oUgwqNYjhfyJ7Dh5ZgPcWVdaPcdeiB/4Ff5UsfDS1M7amQ7sZu/7ww71xzo2H6gk5HpuoVF43z5OGKypFFXKPHxEpbpwrwbhSBjn3k4tJdfedj7WFwvX6J83799oJLMhaAGKJam3td+nwUYGRAWy17nn7/P50A5I5930N/3+e9lJIKYbBI0iFgbcQV3ELZrsJIwdsiT1QS+1AogMeKeEGKSjJKkFEIIIYTYnwQNQgghhDAiQYMQQgghjEjQIIQQQggjEjQIIYQQwogEDUIIIYQwIkGDEEIIIYxI0CCEEEIIIxI0CCGEEMKIBA1CCCGEMCJBgxBCCCGMSNAghBBCCCMSNAghhBDCiAQNQgghhDAiQYMQQgghjEjQIIQQQggjEjQIIYQQwogEDUIIIYQwIkGDEEIIIYyUHDS8/vrrfOQjH6GpqYl0Os1JJ53Eo48+Wlyuteaqq65i9uzZpNNpli9fzgsvvDDib+zZs4fVq1dTV1dHQ0MDl1xyCX19fYe/N0IIIYSYMCUFDXv37uWss87CdV1++9vf8swzz/B//+//ZcaMGcV1vve973HNNdfw4x//mI0bN1JdXc2KFSvIZDLFdVavXs3TTz/N2rVrueOOO7j//vu59NJLx2+vhBBCCDHulNZam6781a9+lT/+8Y/84Q9/GHW51po5c+bwhS98gS9+8YsAdHd309LSwg033MCHPvQhnn32WRYtWsQjjzzC0qVLAbjrrrt417vexWuvvcacOXMOuR09PT3U19dz7K212NXKdPOFEEIIMYqgX/PC+3vp7u6mrq7ugOuVlGn4zW9+w9KlS/ngBz9Ic3Mzp556Kj/96U+Ly7du3Up7ezvLly8vPlZfX8+yZcvYsGEDABs2bKChoaEYMAAsX74cy7LYuHHjqP9vNpulp6dnxE0IIYQQk6ukoOHll1/muuuu49hjj+Xuu+/msssu4zOf+Qw33ngjAO3t7QC0tLSMeF5LS0txWXt7O83NzSOWO45DY2NjcZ19XX311dTX1xdv8+bNK2WzhRBCCDEOSgoawjDktNNO4+///u859dRTufTSS/nkJz/Jj3/844naPgCuvPJKuru7i7ft27dP6P8nhBBCiP2VFDTMnj2bRYsWjXjs+OOPZ9u2bQC0trYC0NHRMWKdjo6O4rLW1lY6OztHLPd9nz179hTX2VcymaSurm7ETQghhBCTq6Sg4ayzzmLLli0jHnv++edZsGABAAsXLqS1tZV169YVl/f09LBx40ba2toAaGtro6uri02bNhXXuffeewnDkGXLlo15R4QQQggxsZxSVv785z/PW97yFv7+7/+eP//zP+fhhx/mJz/5CT/5yU8AUErxuc99jr/7u7/j2GOPZeHChXz9619nzpw5vO997wOizMQ73/nOYrOG53lcfvnlfOhDHzIaOSGEEEKIqVFS0HD66adz6623cuWVV/Ktb32LhQsX8sMf/pDVq1cX1/nyl79Mf38/l156KV1dXZx99tncddddpFKp4jo///nPufzyyznvvPOwLItVq1ZxzTXXjN9eCSGEEGLclVSnYbqQOg1CCCHE+JmQOg1CCCGEqFwSNAghhBDCiAQNQgghhDAiQYMQQgghjEjQIIQQQggjJQ25FEIIIUR8HWjApOlAylgGDYWdCwZiN1pUCCGEmDpaowEULJ/1bs6YcTYAg32DrOFLhwweYlmn4eWXX+boo4+e6s0QQgghysr27duZO3fuAZfHMtPQ2NgIwLZt26ivr5/irZl4PT09zJs3j+3bt5f9ZF2yr+VJ9rU8yb6WD601vb29h5zOIZZBg2VF/Tfr6+vL8s07kEqa4VP2tTzJvpYn2dfyYHIRLqMnhBBCCGFEggYhhBBCGIll0JBMJvnGN75BMpmc6k2ZFJW0v7Kv5Un2tTzJvlaeWI6eEEIIIcTki2WmQQghhBCTT4IGIYQQQhiRoEEIIYQQRiRoEEIIIYQRCRqEEEIIYSSWQcO1117LkUceSSqVYtmyZTz88MNTvUklu//++7nwwguZM2cOSiluu+22Ecu11lx11VXMnj2bdDrN8uXLeeGFF0ass2fPHlavXk1dXR0NDQ1ccskl9PX1TeJemLn66qs5/fTTqa2tpbm5mfe9731s2bJlxDqZTIY1a9bQ1NRETU0Nq1atoqOjY8Q627ZtY+XKlVRVVdHc3MyXvvQlfN+fzF05pOuuu47FixcXq8a1tbXx29/+tri8XPZzX9/97ndRSvG5z32u+Fg57es3v/lNlFIjbscdd1xxeTntK8Drr7/ORz7yEZqamkin05x00kk8+uijxeXlcnw68sgj93tflVKsWbMGKL/3dVzomLn55pt1IpHQ//Zv/6affvpp/clPflI3NDTojo6Oqd60ktx55536//yf/6P/+7//WwP61ltvHbH8u9/9rq6vr9e33Xab/tOf/qTf85736IULF+rBwcHiOu985zv1ySefrB966CH9hz/8QR9zzDH6wx/+8CTvyaGtWLFCX3/99fqpp57STzzxhH7Xu96l58+fr/v6+orrfOpTn9Lz5s3T69at048++qg+88wz9Vve8pbict/39YknnqiXL1+uH3/8cX3nnXfqmTNn6iuvvHIqdumAfvOb3+j/+Z//0c8//7zesmWL/pu/+Rvtuq5+6qmntNbls5/DPfzww/rII4/Uixcv1p/97GeLj5fTvn7jG9/QJ5xwgt6xY0fxtnPnzuLyctrXPXv26AULFuiPfexjeuPGjfrll1/Wd999t37xxReL65TL8amzs3PEe7p27VoN6Pvuu09rXV7v63iJXdBwxhln6DVr1hTvB0Gg58yZo6+++uop3KrDs2/QEIahbm1t1f/wD/9QfKyrq0snk0n9H//xH1prrZ955hkN6EceeaS4zm9/+1utlNKvv/76pG37WHR2dmpAr1+/Xmsd7ZvruvqWW24prvPss89qQG/YsEFrHQVZlmXp9vb24jrXXXedrqur09lsdnJ3oEQzZszQ//qv/1qW+9nb26uPPfZYvXbtWv32t7+9GDSU275+4xvf0CeffPKoy8ptX7/yla/os88++4DLy/n49NnPflYfffTROgzDsntfx0usmidyuRybNm1i+fLlxccsy2L58uVs2LBhCrdsfG3dupX29vYR+1lfX8+yZcuK+7lhwwYaGhpYunRpcZ3ly5djWRYbN26c9G0uRXd3NzA0W+mmTZvwPG/E/h533HHMnz9/xP6edNJJtLS0FNdZsWIFPT09PP3005O49eaCIODmm2+mv7+ftra2stzPNWvWsHLlyhH7BOX5nr7wwgvMmTOHo446itWrV7Nt2zag/Pb1N7/5DUuXLuWDH/wgzc3NnHrqqfz0pz8tLi/X41Mul+Omm27iE5/4BEqpsntfx0usgoZdu3YRBMGINwigpaWF9vb2Kdqq8VfYl4PtZ3t7O83NzSOWO45DY2PjtH4twjDkc5/7HGeddRYnnngiEO1LIpGgoaFhxLr77u9or0dh2XSyefNmampqSCaTfOpTn+LWW29l0aJFZbefN998M4899hhXX331fsvKbV+XLVvGDTfcwF133cV1113H1q1beetb30pvb2/Z7evLL7/Mddddx7HHHsvdd9/NZZddxmc+8xluvPFGoHyPT7fddhtdXV187GMfA8rvMzxeYjk1toivNWvW8NRTT/HAAw9M9aZMmDe/+c088cQTdHd385//+Z9cfPHFrF+/fqo3a1xt376dz372s6xdu5ZUKjXVmzPhLrjgguLvixcvZtmyZSxYsIBf/epXpNPpKdyy8ReGIUuXLuXv//7vATj11FN56qmn+PGPf8zFF188xVs3cX72s59xwQUXMGfOnKnelGktVpmGmTNnYtv2fr1XOzo6aG1tnaKtGn+FfTnYfra2ttLZ2Tliue/77NmzZ9q+Fpdffjl33HEH9913H3Pnzi0+3traSi6Xo6ura8T6++7vaK9HYdl0kkgkOOaYY1iyZAlXX301J598Mv/4j/9YVvu5adMmOjs7Oe2003AcB8dxWL9+Pddccw2O49DS0lI2+zqahoYG3vSmN/Hiiy+W1fsKMHv2bBYtWjTiseOPP77YHFOOx6dXX32V3/3ud/zVX/1V8bFye1/HS6yChkQiwZIlS1i3bl3xsTAMWbduHW1tbVO4ZeNr4cKFtLa2jtjPnp4eNm7cWNzPtrY2urq62LRpU3Gde++9lzAMWbZs2aRv88Forbn88su59dZbuffee1m4cOGI5UuWLMF13RH7u2XLFrZt2zZifzdv3jziQLR27Vrq6ur2O8BNN2EYks1my2o/zzvvPDZv3swTTzxRvC1dupTVq1cXfy+XfR1NX18fL730ErNnzy6r9xXgrLPO2m9I9PPPP8+CBQuA8js+AVx//fU0NzezcuXK4mPl9r6Om6nuiVmqm2++WSeTSX3DDTfoZ555Rl966aW6oaFhRO/VOOjt7dWPP/64fvzxxzWgv//97+vHH39cv/rqq1rraEhTQ0OD/vWvf62ffPJJ/d73vnfUIU2nnnqq3rhxo37ggQf0scceO+2GNGmt9WWXXabr6+v173//+xHDmwYGBorrfOpTn9Lz58/X9957r3700Ud1W1ubbmtrKy4vDG06//zz9RNPPKHvuusuPWvWrGk3tOmrX/2qXr9+vd66dat+8skn9Ve/+lWtlNL33HOP1rp89nM0w0dPaF1e+/qFL3xB//73v9dbt27Vf/zjH/Xy5cv1zJkzdWdnp9a6vPb14Ycf1o7j6O985zv6hRde0D//+c91VVWVvummm4rrlNPxKQgCPX/+fP2Vr3xlv2Xl9L6Ol9gFDVpr/U//9E96/vz5OpFI6DPOOEM/9NBDU71JJbvvvvs0sN/t4osv1lpHw5q+/vWv65aWFp1MJvV5552nt2zZMuJv7N69W3/4wx/WNTU1uq6uTn/84x/Xvb29U7A3BzfafgL6+uuvL64zODio//qv/1rPmDFDV1VV6fe///16x44dI/7OK6+8oi+44AKdTqf1zJkz9Re+8AXted4k783BfeITn9ALFizQiURCz5o1S5933nnFgEHr8tnP0ewbNJTTvl500UV69uzZOpFI6COOOEJfdNFFI+oWlNO+aq317bffrk888USdTCb1cccdp3/yk5+MWF5Ox6e7775bA/ttv9bl976OB6W11lOS4hBCCCFErMSqT4MQQgghpo4EDUIIIYQwIkGDEEIIIYxI0CCEEEIIIxI0CCGEEMKIBA1CCCGEMCJBgxBCCCGMSNAghBBCCCMSNAghhBDCiAQNQgghhDAiQYMQQgghjPx/r7ULOcvnYZoAAAAASUVORK5CYII=",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"nombre_imagen = \"EX2_pista_6.png\"\n",
"\n",
"# Cargamos la imagen en una variable\n",
"\n",
"img = cv2.imread(nombre_imagen)\n",
"\n",
"# Mostramos la imagen\n",
"plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))"
]
},
{
"cell_type": "code",
"execution_count": 36,
"id": "b275f576ac650f4d",
"metadata": {
"ExecuteTime": {
"end_time": "2023-10-07T10:22:13.656443Z",
"start_time": "2023-10-07T10:22:13.511962Z"
},
"colab": {
"base_uri": "https://localhost:8080/",
"height": 917,
"referenced_widgets": [
"abb7bbaa9f5b47c3b17ddaad34ee4c60",
"ddbfe1572e5548309515fcdc6632ef65",
"1138687c9466447782e7d78f7d82c335",
"247bbdff30324ffc8f13d159fdbd2da5",
"159930219ff343e886d67139196774e2",
"4d62dcdf1d9148e58252e15f40f12e92",
"e04c28bebe494acda87ca10286d45fe4",
"2467fb050fd2433782762f0f1f510498",
"d5dc330bb69e49cea0a7e4af0b874da0",
"643a9fd825104487809967efb0e17e72",
"c2eab303a71d49f9a2fceb7668c32a57",
"4b60623d4fa24408be6a7db270752a10",
"51ace2615d3f4547ae7d0187ea6ca389"
]
},
"id": "b275f576ac650f4d",
"outputId": "ed4df23d-4426-4fac-9bc8-42939e0ff0b2"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Random seed set to: 4374487\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "abb7bbaa9f5b47c3b17ddaad34ee4c60",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HTML(value='')"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "247bbdff30324ffc8f13d159fdbd2da5",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HTML(value='')"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "e04c28bebe494acda87ca10286d45fe4",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HTML(value='')"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "643a9fd825104487809967efb0e17e72",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Image(value=b'\\x89PNG\\r\\n\\x1a\\n\\x00\\x00\\x00\\rIHDR\\x00\\x00\\x00d\\x00\\x00\\x002\\x08\\x06\\x00\\x00\\x00\\xaa5~\\xbe\\x00\\…"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "4b60623d4fa24408be6a7db270752a10",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Image(value=b'\\xff\\xd8\\xff\\xe0\\x00\\x10JFIF\\x00\\x01\\x01\\x00\\x00\\x01\\x00\\x01\\x00\\x00\\xff\\xdb\\x00C\\x00\\x08\\x06\\x0…"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"world = bots.World(220, 180, boundary_wall_color=\"yellow\", ground_image_filename=nombre_imagen)\n",
"\n",
"robot = bots.Scribbler(x=36, y=90, a=90)\n",
"robot.add_device(bots.GroundCamera(width=100, height=50))\n",
"\n",
"world.add_robot(robot)\n",
"\n",
"robot['ground-camera'].watch()\n",
"world.watch()"
]
},
{
"cell_type": "code",
"execution_count": 37,
"id": "e59a3d8ee41b47f9",
"metadata": {
"ExecuteTime": {
"end_time": "2023-10-07T10:22:26.419707Z",
"start_time": "2023-10-07T10:22:16.347417Z"
},
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000,
"referenced_widgets": [
"2bfd3979d78644249bbe535640dc4251",
"7d63316d185d412b9f749f32fc33d522",
"a44312778b804334a5cbc0dccf02315c",
"28609f9936114fd4944b2b318787cc23",
"1e022456e26b4f31841304bc93616230",
"d513ffb5c2e04b4ea26a1bb2ee7aa2f5",
"7ae14ac2f52e4b53afccafb8e5ff9ecc",
"4ea6fa61bc9749cebc9036b22fb4bc35",
"c11226a3faae4281865fbb8f49b1db65",
"7ba20b5077184e57971b93c281e963d9",
"42b2cc6c11a54611b3024c803e1b7af8"
]
},
"id": "e59a3d8ee41b47f9",
"outputId": "9081a56f-469c-47ca-e185-9e2fd0a0e0d9"
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "2bfd3979d78644249bbe535640dc4251",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/300 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 113ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 33ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 27ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 27ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 27ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 35ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 27ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 34ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 27ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 32ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 27ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 27ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 27ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 27ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 31ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 34ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 40ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 43ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 40ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 42ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 43ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 42ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 47ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 37ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 42ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 43ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 34ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 27ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 27ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 31ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 36ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 31ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 34ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 27ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 32ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 33ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 27ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 42ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 56ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 49ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 46ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 46ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 52ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 49ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 32ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 35ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 34ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 32ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 35ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 27ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 36ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 35ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 31ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 37ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 32ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 31ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 38ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 33ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 31ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 34ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 50ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 50ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 40ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 50ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 40ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 44ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 42ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 35ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 36ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 27ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 34ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 33ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 36ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 32ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 35ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 27ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 31ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 32ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 31ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 33ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 35ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 36ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 31ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 40ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 31ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 44ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 40ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 41ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 38ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 43ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 43ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 45ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 32ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 33ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 34ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 31ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 31ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 40ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 34ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 32ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 38ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 37ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 32ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 31ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 31ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 31ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 37ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 32ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 32ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 31ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 36ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 36ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 31ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 29ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 45ms/step\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 49ms/step\n",
"Simulation stopped at: 00:00:30.00; speed 0.55 x real time\n"
]
}
],
"source": [
"world.reset()\n",
"world.seconds(30, [network_driver], real_time=True)"
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "43cc24dea29160b5",
"metadata": {
"id": "43cc24dea29160b5"
},
"outputs": [],
"source": [
"# Guardamos la red Neuronal\n",
"robot_net.save(\"robot.keras\")"
]
},
{
"cell_type": "markdown",
"id": "de37a1b9",
"metadata": {
"id": "de37a1b9"
},
"source": [
"## Preguntas para responder\n",
"\n",
"1. ¿Necesita algún tipo de memoria para que el robot alcance el objetivo? ¿Por qué?\n",
"\n",
"2. ¿Qué porcentaje de los datos de entrenamiento hacen que el robot avance, hacia la izquierda y hacia la derecha?\n",
"\n",
"3. ¿Qué tamaño de capa oculta funcionó mejor para ti?\n",
"\n",
"4. El funcionamiento del robot controlado por la red neuronal es mejor, peor o lo mismo que el funcionamiento del robot controlado por tu algoritmo? ¿Podrías explicar por qué?\n",
"\n",
"5. ¿Cómo podríamos hacer para mejorar el funcionamiento dle robot controlado por la red neuronal?"
]
},
{
"cell_type": "markdown",
"id": "027d3404",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"id": "fd876373",
"metadata": {
"id": "fd876373"
},
"source": [
"## Conclusiones\n",
"\n",
"En esta práctica hemos aprendido a controlar un robot usando una red neuronal. Hemos visto cómo entrenar la red neuronal con datos de sensores y órdenes y cómo usar la red para controlar el robot. Hemos visto que la red neuronal puede ser una herramienta poderosa para controlar los robots, pero puede ser un tiempo de entrenamiento más largo que con otros métodos. También hemos visto que es importante balancear los datos de entrenamiento para que la red neuronal pueda aprender bien.\n",
"\n",
"A veces puede que no sea fácil obtener los datos de entrenamiento necesarios para que la red neuronal funcione bien. En este caso, hemos utilizado datos simulados, pero en un entorno real, podría ser más complicado.\n",
"\n",
"En la próxima práctica, veremos cómo entrenar a una red neuronal para controlar un robot sin la necesidad de datos de entrenamiento."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Entrega\n",
"\n",
"Completa y ejecuta el notebook entero (todas las celdas, sin errores) antes de subirlo a la tarea\n",
"correspondiente en Moodle."
]
}
],
"metadata": {
"accelerator": "GPU",
"colab": {
"gpuType": "T4",
"provenance": []
},
"kernelspec": {
"display_name": "Python 3",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.10"
}
},
"nbformat": 4,
"nbformat_minor": 5
}