Implementación y comparación de dos algoritmos supervisados en redes neuronales convolucionales orientadas a la detección de rostros para ejecutarse en hardware de bajos recursos

¿Es posible realizar la implementación, entrenamiento y ejecución de algoritmos supervisados para deep learning en equipos de bajos recursos? Bajo esta premisa se redacta el presente trabajo. Se trata de abordar uno de los inconvenientes que se presentan en la implementación de redes neuronales arti...

Full description

Autores:
Medina Gonzalez , Steven
Tipo de recurso:
Trabajo de grado de pregrado
Fecha de publicación:
2021
Institución:
Universidad Tecnológica de Pereira
Repositorio:
Repositorio Institucional UTP
Idioma:
spa
OAI Identifier:
oai:repositorio.utp.edu.co:11059/14012
Acceso en línea:
https://hdl.handle.net/11059/14012
https://repositorio.utp.edu.co/home
Palabra clave:
000 - Ciencias de la computación, información y obras generales::006 - Métodos especiales de computación
Systems neuroscience
Algorithmic efficiency
Feature detection
Inteligencia artificial
Redes neuronales convolucionales
Algoritmo supervisado
Rights
openAccess
License
Atribución-NoComercial-SinDerivadas 4.0 Internacional (CC BY-NC-ND 4.0)
id UTP2_2e2341f9f6fd0ece6d079b2de47ca239
oai_identifier_str oai:repositorio.utp.edu.co:11059/14012
network_acronym_str UTP2
network_name_str Repositorio Institucional UTP
repository_id_str
dc.title.spa.fl_str_mv Implementación y comparación de dos algoritmos supervisados en redes neuronales convolucionales orientadas a la detección de rostros para ejecutarse en hardware de bajos recursos
title Implementación y comparación de dos algoritmos supervisados en redes neuronales convolucionales orientadas a la detección de rostros para ejecutarse en hardware de bajos recursos
spellingShingle Implementación y comparación de dos algoritmos supervisados en redes neuronales convolucionales orientadas a la detección de rostros para ejecutarse en hardware de bajos recursos
000 - Ciencias de la computación, información y obras generales::006 - Métodos especiales de computación
Systems neuroscience
Algorithmic efficiency
Feature detection
Inteligencia artificial
Redes neuronales convolucionales
Algoritmo supervisado
title_short Implementación y comparación de dos algoritmos supervisados en redes neuronales convolucionales orientadas a la detección de rostros para ejecutarse en hardware de bajos recursos
title_full Implementación y comparación de dos algoritmos supervisados en redes neuronales convolucionales orientadas a la detección de rostros para ejecutarse en hardware de bajos recursos
title_fullStr Implementación y comparación de dos algoritmos supervisados en redes neuronales convolucionales orientadas a la detección de rostros para ejecutarse en hardware de bajos recursos
title_full_unstemmed Implementación y comparación de dos algoritmos supervisados en redes neuronales convolucionales orientadas a la detección de rostros para ejecutarse en hardware de bajos recursos
title_sort Implementación y comparación de dos algoritmos supervisados en redes neuronales convolucionales orientadas a la detección de rostros para ejecutarse en hardware de bajos recursos
dc.creator.fl_str_mv Medina Gonzalez , Steven
dc.contributor.advisor.none.fl_str_mv López Echeverry, Ana Maria
dc.contributor.author.none.fl_str_mv Medina Gonzalez , Steven
dc.subject.ddc.none.fl_str_mv 000 - Ciencias de la computación, información y obras generales::006 - Métodos especiales de computación
topic 000 - Ciencias de la computación, información y obras generales::006 - Métodos especiales de computación
Systems neuroscience
Algorithmic efficiency
Feature detection
Inteligencia artificial
Redes neuronales convolucionales
Algoritmo supervisado
dc.subject.other.none.fl_str_mv Systems neuroscience
Algorithmic efficiency
Feature detection
dc.subject.proposal.spa.fl_str_mv Inteligencia artificial
Redes neuronales convolucionales
Algoritmo supervisado
description ¿Es posible realizar la implementación, entrenamiento y ejecución de algoritmos supervisados para deep learning en equipos de bajos recursos? Bajo esta premisa se redacta el presente trabajo. Se trata de abordar uno de los inconvenientes que se presentan en la implementación de redes neuronales artificiales: analizar y determinar si es posible el entrenamiento, validación y prueba de redes neuronales convolucionales sobre hardware de bajos recursos. Para esto se implementarán dos algoritmos de entrenamiento supervisado para verificar el cumplimiento de los requisitos que se necesitan para su correcto desarrollo y funcionamiento. Se utilizarán 2 equipos con componentes diferentes, un equipo de bajos requisitos y otro con componentes más dedicados.
publishDate 2021
dc.date.issued.none.fl_str_mv 2021
dc.date.accessioned.none.fl_str_mv 2022-04-13T11:46:43Z
dc.date.available.none.fl_str_mv 2022-04-13T11:46:43Z
dc.type.none.fl_str_mv Trabajo de grado - Pregrado
dc.type.version.none.fl_str_mv info:eu-repo/semantics/acceptedVersion
dc.type.coar.none.fl_str_mv http://purl.org/coar/resource_type/c_7a1f
dc.type.content.none.fl_str_mv Text
dc.type.driver.none.fl_str_mv info:eu-repo/semantics/bachelorThesis
format http://purl.org/coar/resource_type/c_7a1f
status_str acceptedVersion
dc.identifier.uri.none.fl_str_mv https://hdl.handle.net/11059/14012
dc.identifier.instname.none.fl_str_mv Universidad Tecnológica de Pereira
dc.identifier.reponame.none.fl_str_mv Repositorio institucional Universidad Tecnológica de Pereira
dc.identifier.repourl.none.fl_str_mv https://repositorio.utp.edu.co/home
url https://hdl.handle.net/11059/14012
https://repositorio.utp.edu.co/home
identifier_str_mv Universidad Tecnológica de Pereira
Repositorio institucional Universidad Tecnológica de Pereira
dc.language.iso.none.fl_str_mv spa
language spa
dc.relation.references.none.fl_str_mv TORO VALDERAS, Antonio José. Implementación de redes neuronales en Raspberry Pi 3 con Movidius Neural Compute Stick [en línea]. Trabajo fin de Máster en Ingeniería Electrónica, Robótica y Automática. Universidad de Sevilla. 2020. [Consultado: 09-11-2021]. Disponible en: Depósito de investigación Universidad de Sevilla. https://idus.us.es/handle/11441/101503
RIZKI HARTAWAN, Dean y WALUYO PURBOYO, Tito y SETIANINGSIH, Casi. Disaster Victims Detection System Using Convolutional Neural Network (CNN) Method. En: IEEE [en línea]. [Consultado: 11 de noviembre de 2021.] Disponible en: https://ieeexplore.ieee.org/document/8784782
QUIROZ MARTÍNEZ, Miguel; VALVERDE LANDIVAR, Galo; PRIETO VILLAMAR, Jonathan y APUPALO DEL ROSARIO, Luis. Detección de personal no autorizado en el departamento de ti utilizando redes neuronales convolucionales en tiempo real con raspberry pi 3 B + [en línea]. Julio - Septiembre de 2020. vol. 5, nro. 3. [Consultado: 11 de noviembre de 2021.] Disponible en: https://revistas.utb.edu.ec/index.php/sr/article/view/897
MÉNDEZ GOMEZ, Javier. Sistema de reconocimiento facial basado en redes neuronales convencionales sobre el dispositivo Raspberry Pi [en línea]. [Consultado: 11 de noviembre de 2021.] Disponible en: https://idus.us.es/handle/11441/95442
IBERDROLA, ¿QUÉ ES LA INTELIGENCIA ARTIFICIAL?. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en:https://www.iberdrola.com/innovacion/que-es-inteligencia-artificial
Wikipedia, Red neuronal artificial. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://es.wikipedia.org/wiki/Red_neuronal_artificial
Wikipedia, Red neuronal convolucional. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://es.wikipedia.org/wiki/Red_neuronal_convolucional
Wikipedia, Aprendizaje supervisado [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://es.wikipedia.org/wiki/Aprendizaje_supervisado
Wikipedia, Visión artificial. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://es.wikipedia.org/wiki/Visi%C3%B3n_artificial
Wikipedia, Sistema de reconocimiento facial. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://es.wikipedia.org/wiki/Sistema_de_reconocimiento_facial
Cursos Gis, ¿Qué es Google Colab?. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://www.cursosgis.com/que-es-google-colab/
CASTRO HURTADO, Víctor de. Diseño de un sistema de identificación de personas. [en línea]. Trabajo de grado en Ingeniería Informática. Universidad de Burgos. [Consultado: 11 de noviembre de 2021.] Disponible en: https://riubu.ubu.es/handle/10259/4987
Wikipedia, Unidad central de procesamiento. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://es.wikipedia.org/wiki/Unidad_central_de_procesamiento
Hardzone, Diferencia entre lo que es GPU y tarjeta gráfica. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://hardzone.es/2018/03/11/diferencia-gpu-tarjeta-grafica/
Oracle, ¿Qué es la inteligencia artificial? [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://www.oracle.com/co/artificial-intelligence/what-is-ai/
Wikipedia, Red neuronal convolucional. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://es.wikipedia.org/wiki/Red_neuronal_convolucional
Psicología y mente, Redes neuronales profundas: qué son y cómo funcionan. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://psicologiaymente.com/cultura/redes-neuronales profundas
Analytics Lane, Implementación del método descenso del gradiente en Python. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://www.analyticslane.com/2018/12/21/implementacion-del metodo-descenso-del-gradiente-en-python/
TORRES, Jordi. Deep Learning Introducción Práctica Con Keras (Primera Parte). 2018. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://torres.ai/deep-learning-inteligencia-artificial keras
Talento, Diferencias entre Machine Learning, Inteligencia Artificial y Robótica [sitio web]. [Consultado: 11 de noviembre de 2021.] Disponible en: https://talentocorporativo.com/diferencias-entre-machine learning-inteligencia-artificial-y-robotica/
PONCE CRUZ, Pedro. Inteligencia artificial con aplicaciones a la ingeniería. Editorial Alfaomega, 2011.
Wikipedia, Perceptrón multicapa. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://es.wikipedia.org/wiki/Perceptr%C3%B3n_multicapa
Wikipedia commons. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://commons.wikimedia.org/wiki/File:ML_dataset_training_validation_test_sets.png
Aprende IA, Diferencia entre aprendizaje supervisado y no supervisado. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://aprendeia.com/diferencia-entre-aprendizaje-supervisado-y-no supervisado
ELAVARASAN, Dhivya y P. M. DURAIRAJ, Vincent. Crop Yield Prediction Using Deep Reinforcement Learning Model for Sustainable Agrarian Applications. En: IEEE [en línea]. [Consultado: 11 de noviembre de 2021.] Disponible en: https://ieeexplore.ieee.org/document/9086620/
SANGMI, Moon; HYUNSUNG Kim y INTAE Hwang. Deep learning-based channel estimation and tracking for millimeter-wave vehicular communications. En: IEEE [en línea]. [Consultado: 11 de noviembre de 2021.] Disponible en: https://ieeexplore.ieee.org/document/9143570
KHELIFI, Lazhar y MIGNOTTE, Max. Deep Learning for Change Detection in Remote Sensing Images: Comprehensive Review and Meta-Analysis. En: IEEE [en línea]. [Consultado: 11 de noviembre de 2021.] Disponible en: https://ieeexplore.ieee.org/document/9136674
BEUNZA NUIN, Juan José; PUERTAS SANZ, Enrique y CONDÉS MORENO, Emilia. Manual práctico de inteligencia artificial en entornos sanitarios. Editorial Elsevier, 2019.
MUHAMMAD, Adnan; ASAD, Habib; JAWAD, Ashraf; BABAR, Shah y GOHAR, Ali. Improving M Learners’ Performance Through Deep Learning Techniques by Leveraging Features Weights. En: IEEE [en línea]. [Consultado: 11 de noviembre de 2021.] Disponible en: https://ieeexplore.ieee.org/document/9134760
DONGXIA, Zhang; XIAOQING, Han y CHUNYU, Deng. Review on the research and practice of deep learning and reinforcement learning in smart grids. En: IEEE [en línea]. [Consultado: 11 de noviembre de 2021.] Disponible en: https://ieeexplore.ieee.org/document/8468674
CIRESAN, Dan C.; MEIER, Ueli; MASCI, Jonathan; GAMBARDELLA, Luca M. y SCHMIDHUBER, Jurgen. Flexible, High Performance Convolutional Neural Networks for Image Classification. [en línea]. [Consultado: 11 de noviembre de 2021.] Disponible en: https://people.idsia.ch/~juergen/ijcai2011.pdf
LOPEZ PACHECO, Mario Antonio. Identificación de sistemas no lineales con redes neuronales convolucionales. [en línea]. Trabajo final de Grado de Maestro en Ciencias en la Especialidad de Control Automático. Centro de investigación y de estudios avanzados del instituto politécnico nacional. 2017. [Consultado: 09-11-2021]. Disponible en: https://ctrl.cinvestav.mx/~yuw/pdf/MaTesMLP.pdf
Núñez Sánchez-Agustino, Francisco José. Diseño de un sistema de reconocimiento automático de matrículas de vehículos mediante una red neuronal convolucional. [en línea]. 2016. [Consultado: 09-11- 2021]. Disponible en: http://openaccess.uoc.edu/webapps/o2/bitstream/10609/52222/7/fnunezsTFM0616memoria.pdf
Juan Barrios, Redes Neuronales Convolucionales. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://www.juanbarrios.com/redes-neurales-convolucionales/
DURAN SUAREZ, Jaime. Redes Neuronales Convolucionales en R. [en línea] Trabajo de fin de grado en Ingeniería Robótica, Electrónica y Mecatrónica. 2017. [Consultado: 11 de noviembre de 2021.] Disponible en: https://idus.us.es/bitstream/handle/11441/69564/TFG_Jaime%20Dur%C3%A1n%20Su%C3%A1rez.pdf
Github, face-mask-detection-keras. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://github.com/aieml/face-mask-detection-keras
Github, Proyecto-reconocimiento-de-rostro-utilizando-una-cnn [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en:https://github.com/elesine/PROYECTO-RECONOCIMIENTO-DE ROSTRO-UTILIZANDO-UNA-CNN
Towards data science, COVID-19: Face Mask Detection using TensorFlow and OpenCV. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://towardsdatascience.com/covid-19-face mask-detection-using-tensorflow-and-opencv-702dd833515b
Health Big Data, Algoritmo para la detección de mascarilla [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://www.juanbarrios.com/algoritmo-para-la-deteccion-del-uso-de-la-mascarilla/
Github, Detector de tapabocas con OpenCV y Keras/Tensorflow. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://github.com/josebenitezg/covid-19-detector-tapabocas
Github, MaskDetection. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en:https://github.com/DavidReveloLuna/MaskDetection
Github, training the CNN.ipynb [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://github.com/aieml/face-mask-detection-keras/blob/master/2.0%20training%20the%20CNN.ipynb
KAIMING, He; XIANGYU, Zhang; SHAOQING, Ren y JIAN, Sun. Deep Residual Learning for Image Recognition. En: IEEE [en línea] [Consultado: 11 de noviembre de 2021.] Disponible en: https://ieeexplore.ieee.org/document/7780459
Stack Overflow, How to split resnet50 model from top as well as from bottom [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://stackoverflow.com/questions/54207410/how-to-split resnet50-model-from-top-as-well-as-from-bottom
Free code camp, Object Detection in Google Colab with Fizyr Retinanet. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://medium.com/free-code-camp/object-detection-in-colab-with fizyr-retinanet-efed36ac4af3
TORRES, Jordi. Deep Learning Introducción Práctica Con Keras (Segunda Parte). Alpha editorial, 2019.
TORRES, Jordi. PYTHON DEEP LEARNING. Marcombo editorial, 2020.
BOBADILLA, Jesus. Machine Learning y Deep Learning. Usando python, scikit y keras. Ediciones de la U editorial, 2021.
Vahid Mirjalili, Sebastian Raschka. Python machine learning. Editorial Marcombo, 2019.
BOBADILLA, Jesus. Machine Learning Y Deep Learning. Ediciones De La U Limitada, 2020.
LOPEZ SOTELO, Jesus Alfonso. Deep Learning Teoria Y Aplicaciones. Alphaeditorial, 2021
dc.rights.license.none.fl_str_mv Atribución-NoComercial-SinDerivadas 4.0 Internacional (CC BY-NC-ND 4.0)
dc.rights.uri.none.fl_str_mv https://creativecommons.org/licenses/by-nc-nd/4.0/
dc.rights.coar.none.fl_str_mv http://purl.org/coar/access_right/c_abf2
dc.rights.accessrights.none.fl_str_mv info:eu-repo/semantics/openAccess
rights_invalid_str_mv Atribución-NoComercial-SinDerivadas 4.0 Internacional (CC BY-NC-ND 4.0)
https://creativecommons.org/licenses/by-nc-nd/4.0/
http://purl.org/coar/access_right/c_abf2
eu_rights_str_mv openAccess
dc.format.extent.none.fl_str_mv 85 páginas
dc.format.mimetype.none.fl_str_mv application/pdf
dc.publisher.none.fl_str_mv Universidad Tecnológica de Pereira
dc.publisher.program.none.fl_str_mv Ingeniería de Sistemas y Computación
dc.publisher.faculty.none.fl_str_mv Facultad de Ingenierías
dc.publisher.place.none.fl_str_mv Pereira
publisher.none.fl_str_mv Universidad Tecnológica de Pereira
institution Universidad Tecnológica de Pereira
bitstream.url.fl_str_mv https://dspace7-utp.metabuscador.org/bitstreams/5843982c-93b1-4cf4-9999-a0db426d178c/download
https://dspace7-utp.metabuscador.org/bitstreams/8b09abe8-e009-4fac-b4ab-ef2d8c6ab23d/download
https://dspace7-utp.metabuscador.org/bitstreams/e7f9f851-1cd1-4771-bb57-2fe297063144/download
https://dspace7-utp.metabuscador.org/bitstreams/5b57782e-2bdc-4d28-a558-13de5f70fcef/download
bitstream.checksum.fl_str_mv 53172e84c2aea45392effa33d41dcb1d
2f9959eaf5b71fae44bbf9ec84150c7a
cd5bd656d217f4cb5997a21995ea8f87
ae2008092d94f73270b1ad1d4c5c5759
bitstream.checksumAlgorithm.fl_str_mv MD5
MD5
MD5
MD5
repository.name.fl_str_mv Repositorio de la Universidad Tecnológica de Pereira
repository.mail.fl_str_mv bdigital@metabiblioteca.com
_version_ 1815732606512136192
spelling Atribución-NoComercial-SinDerivadas 4.0 Internacional (CC BY-NC-ND 4.0)Manifiesto (Manifestamos) en este documento la voluntad de autorizar a la Biblioteca Jorge Roa Martínez de la Universidad Tecnológica de Pereira la publicación en el Repositorio institucional (http://biblioteca.utp.edu.co), la versión electrónica de la OBRA titulada: ________________________________________________________________________________________________ ________________________________________________________________________________________________ ________________________________________________________________________________________________ La Universidad Tecnológica de Pereira, entidad académica sin ánimo de lucro, queda por lo tanto facultada para ejercer plenamente la autorización anteriormente descrita en su actividad ordinaria de investigación, docencia y publicación. La autorización otorgada se ajusta a lo que establece la Ley 23 de 1982. Con todo, en mi (nuestra) condición de autor (es) me (nos) reservo (reservamos) los derechos morales de la OBRA antes citada con arreglo al artículo 30 dehttps://creativecommons.org/licenses/by-nc-nd/4.0/http://purl.org/coar/access_right/c_abf2info:eu-repo/semantics/openAccessLópez Echeverry, Ana MariaMedina Gonzalez , Steven2022-04-13T11:46:43Z2022-04-13T11:46:43Z2021https://hdl.handle.net/11059/14012Universidad Tecnológica de PereiraRepositorio institucional Universidad Tecnológica de Pereirahttps://repositorio.utp.edu.co/home¿Es posible realizar la implementación, entrenamiento y ejecución de algoritmos supervisados para deep learning en equipos de bajos recursos? Bajo esta premisa se redacta el presente trabajo. Se trata de abordar uno de los inconvenientes que se presentan en la implementación de redes neuronales artificiales: analizar y determinar si es posible el entrenamiento, validación y prueba de redes neuronales convolucionales sobre hardware de bajos recursos. Para esto se implementarán dos algoritmos de entrenamiento supervisado para verificar el cumplimiento de los requisitos que se necesitan para su correcto desarrollo y funcionamiento. Se utilizarán 2 equipos con componentes diferentes, un equipo de bajos requisitos y otro con componentes más dedicados.¿Is it possible to implement, train, and run supervised algorithms for deep learning in low-resource devices? The afore question guides the composition of the present work. It is about addressing one of the drawbacks that occur in the implementation of artificial neural networks: analyze and determine if it is possible to train, validate, and test convolutional neural networks on low-resource hardware. In order to do so, this project implements two supervised training algorithms to verify the fulfillment of the requirements that are needed for its correct development and operation. Two devices with different components will be used, one with low-requirements and the other with better components.CONTENIDO Introducción 7 1. Planteamiento del problema 8 2. Justificación 9 3. Hipótesis 10 4. Objetivos 11 4.1. Objetivo general 11 4.2. Objetivos específicos 11 5. Marco de referencia 12 5.1. Marco teórico 12 5.2. Marco de antecedentes 13 5.3. Marco conceptual 15 6. Estado del arte 18 6.1. Machine Learning 18 6.2. Redes neuronales 19 6.2.1. Perceptrón 21 6.2.2. Perceptrón multicapa 22 6.2.3. Entrenamiento, validación y prueba de una red neuronal artificial 23 6.2.4. Proceso de aprendizaje de una red neuronal artificial 24 6.2.5. Funciones de activación 28 6.2.6. Descenso de gradiente estocástico 30 6.3. Deep Learning 31 6.4. Redes Neuronales Convolucionales 33 6.4.1. Capa de procesamiento de imágenes 35 6.4.2. Capa convolucional 35 6.4.3. Capa de submuestreo 38 6.4.4. Capa de clasificación 40 6.4.5. Capa dropout 40 7. Diseño metodológico 42 8. Elección de algoritmos 43 9. Implementación de algoritmos 46 9.1. HaarDetection 46 9.1.1. Librerías 46 9.1.2. Obtención del dataset 47 9.1.3. Entrenamiento de la red 51 9.1.4. Ejecución de la clasificación 53 9.2. MaskDetection 54 9.2.1. Librerías 54 9.2.2. Obtención del dataset 55 9.2.3. Entrenamiento de la red 57 9.2.4. Ejecución de la clasificación 61 10. Entrenamiento 63 10.1. Entrenamiento en el primer equipo 64 10.2. Entrenamiento en el Segundo equipo 69 10.3. Resultados obtenidos del entrenamiento 74 11. Pruebas 75 11.1. Resultados entre las implementaciones 76 12. Problemas encontrados 78 13. Conclusiones 80 14. Futuras mejoras 81 15. Bibliografía 82PregradoIngeniero(a) de Sistemas y Computación85 páginasapplication/pdfspaUniversidad Tecnológica de PereiraIngeniería de Sistemas y ComputaciónFacultad de IngenieríasPereira000 - Ciencias de la computación, información y obras generales::006 - Métodos especiales de computaciónSystems neuroscienceAlgorithmic efficiencyFeature detectionInteligencia artificialRedes neuronales convolucionalesAlgoritmo supervisadoImplementación y comparación de dos algoritmos supervisados en redes neuronales convolucionales orientadas a la detección de rostros para ejecutarse en hardware de bajos recursosTrabajo de grado - Pregradoinfo:eu-repo/semantics/acceptedVersionhttp://purl.org/coar/resource_type/c_7a1fTextinfo:eu-repo/semantics/bachelorThesisTORO VALDERAS, Antonio José. Implementación de redes neuronales en Raspberry Pi 3 con Movidius Neural Compute Stick [en línea]. Trabajo fin de Máster en Ingeniería Electrónica, Robótica y Automática. Universidad de Sevilla. 2020. [Consultado: 09-11-2021]. Disponible en: Depósito de investigación Universidad de Sevilla. https://idus.us.es/handle/11441/101503RIZKI HARTAWAN, Dean y WALUYO PURBOYO, Tito y SETIANINGSIH, Casi. Disaster Victims Detection System Using Convolutional Neural Network (CNN) Method. En: IEEE [en línea]. [Consultado: 11 de noviembre de 2021.] Disponible en: https://ieeexplore.ieee.org/document/8784782QUIROZ MARTÍNEZ, Miguel; VALVERDE LANDIVAR, Galo; PRIETO VILLAMAR, Jonathan y APUPALO DEL ROSARIO, Luis. Detección de personal no autorizado en el departamento de ti utilizando redes neuronales convolucionales en tiempo real con raspberry pi 3 B + [en línea]. Julio - Septiembre de 2020. vol. 5, nro. 3. [Consultado: 11 de noviembre de 2021.] Disponible en: https://revistas.utb.edu.ec/index.php/sr/article/view/897MÉNDEZ GOMEZ, Javier. Sistema de reconocimiento facial basado en redes neuronales convencionales sobre el dispositivo Raspberry Pi [en línea]. [Consultado: 11 de noviembre de 2021.] Disponible en: https://idus.us.es/handle/11441/95442IBERDROLA, ¿QUÉ ES LA INTELIGENCIA ARTIFICIAL?. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en:https://www.iberdrola.com/innovacion/que-es-inteligencia-artificialWikipedia, Red neuronal artificial. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://es.wikipedia.org/wiki/Red_neuronal_artificialWikipedia, Red neuronal convolucional. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://es.wikipedia.org/wiki/Red_neuronal_convolucionalWikipedia, Aprendizaje supervisado [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://es.wikipedia.org/wiki/Aprendizaje_supervisadoWikipedia, Visión artificial. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://es.wikipedia.org/wiki/Visi%C3%B3n_artificialWikipedia, Sistema de reconocimiento facial. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://es.wikipedia.org/wiki/Sistema_de_reconocimiento_facialCursos Gis, ¿Qué es Google Colab?. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://www.cursosgis.com/que-es-google-colab/CASTRO HURTADO, Víctor de. Diseño de un sistema de identificación de personas. [en línea]. Trabajo de grado en Ingeniería Informática. Universidad de Burgos. [Consultado: 11 de noviembre de 2021.] Disponible en: https://riubu.ubu.es/handle/10259/4987Wikipedia, Unidad central de procesamiento. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://es.wikipedia.org/wiki/Unidad_central_de_procesamientoHardzone, Diferencia entre lo que es GPU y tarjeta gráfica. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://hardzone.es/2018/03/11/diferencia-gpu-tarjeta-grafica/Oracle, ¿Qué es la inteligencia artificial? [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://www.oracle.com/co/artificial-intelligence/what-is-ai/Wikipedia, Red neuronal convolucional. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://es.wikipedia.org/wiki/Red_neuronal_convolucionalPsicología y mente, Redes neuronales profundas: qué son y cómo funcionan. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://psicologiaymente.com/cultura/redes-neuronales profundasAnalytics Lane, Implementación del método descenso del gradiente en Python. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://www.analyticslane.com/2018/12/21/implementacion-del metodo-descenso-del-gradiente-en-python/TORRES, Jordi. Deep Learning Introducción Práctica Con Keras (Primera Parte). 2018. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://torres.ai/deep-learning-inteligencia-artificial kerasTalento, Diferencias entre Machine Learning, Inteligencia Artificial y Robótica [sitio web]. [Consultado: 11 de noviembre de 2021.] Disponible en: https://talentocorporativo.com/diferencias-entre-machine learning-inteligencia-artificial-y-robotica/PONCE CRUZ, Pedro. Inteligencia artificial con aplicaciones a la ingeniería. Editorial Alfaomega, 2011.Wikipedia, Perceptrón multicapa. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://es.wikipedia.org/wiki/Perceptr%C3%B3n_multicapaWikipedia commons. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://commons.wikimedia.org/wiki/File:ML_dataset_training_validation_test_sets.pngAprende IA, Diferencia entre aprendizaje supervisado y no supervisado. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://aprendeia.com/diferencia-entre-aprendizaje-supervisado-y-no supervisadoELAVARASAN, Dhivya y P. M. DURAIRAJ, Vincent. Crop Yield Prediction Using Deep Reinforcement Learning Model for Sustainable Agrarian Applications. En: IEEE [en línea]. [Consultado: 11 de noviembre de 2021.] Disponible en: https://ieeexplore.ieee.org/document/9086620/SANGMI, Moon; HYUNSUNG Kim y INTAE Hwang. Deep learning-based channel estimation and tracking for millimeter-wave vehicular communications. En: IEEE [en línea]. [Consultado: 11 de noviembre de 2021.] Disponible en: https://ieeexplore.ieee.org/document/9143570KHELIFI, Lazhar y MIGNOTTE, Max. Deep Learning for Change Detection in Remote Sensing Images: Comprehensive Review and Meta-Analysis. En: IEEE [en línea]. [Consultado: 11 de noviembre de 2021.] Disponible en: https://ieeexplore.ieee.org/document/9136674BEUNZA NUIN, Juan José; PUERTAS SANZ, Enrique y CONDÉS MORENO, Emilia. Manual práctico de inteligencia artificial en entornos sanitarios. Editorial Elsevier, 2019.MUHAMMAD, Adnan; ASAD, Habib; JAWAD, Ashraf; BABAR, Shah y GOHAR, Ali. Improving M Learners’ Performance Through Deep Learning Techniques by Leveraging Features Weights. En: IEEE [en línea]. [Consultado: 11 de noviembre de 2021.] Disponible en: https://ieeexplore.ieee.org/document/9134760DONGXIA, Zhang; XIAOQING, Han y CHUNYU, Deng. Review on the research and practice of deep learning and reinforcement learning in smart grids. En: IEEE [en línea]. [Consultado: 11 de noviembre de 2021.] Disponible en: https://ieeexplore.ieee.org/document/8468674CIRESAN, Dan C.; MEIER, Ueli; MASCI, Jonathan; GAMBARDELLA, Luca M. y SCHMIDHUBER, Jurgen. Flexible, High Performance Convolutional Neural Networks for Image Classification. [en línea]. [Consultado: 11 de noviembre de 2021.] Disponible en: https://people.idsia.ch/~juergen/ijcai2011.pdfLOPEZ PACHECO, Mario Antonio. Identificación de sistemas no lineales con redes neuronales convolucionales. [en línea]. Trabajo final de Grado de Maestro en Ciencias en la Especialidad de Control Automático. Centro de investigación y de estudios avanzados del instituto politécnico nacional. 2017. [Consultado: 09-11-2021]. Disponible en: https://ctrl.cinvestav.mx/~yuw/pdf/MaTesMLP.pdfNúñez Sánchez-Agustino, Francisco José. Diseño de un sistema de reconocimiento automático de matrículas de vehículos mediante una red neuronal convolucional. [en línea]. 2016. [Consultado: 09-11- 2021]. Disponible en: http://openaccess.uoc.edu/webapps/o2/bitstream/10609/52222/7/fnunezsTFM0616memoria.pdfJuan Barrios, Redes Neuronales Convolucionales. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://www.juanbarrios.com/redes-neurales-convolucionales/DURAN SUAREZ, Jaime. Redes Neuronales Convolucionales en R. [en línea] Trabajo de fin de grado en Ingeniería Robótica, Electrónica y Mecatrónica. 2017. [Consultado: 11 de noviembre de 2021.] Disponible en: https://idus.us.es/bitstream/handle/11441/69564/TFG_Jaime%20Dur%C3%A1n%20Su%C3%A1rez.pdfGithub, face-mask-detection-keras. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://github.com/aieml/face-mask-detection-kerasGithub, Proyecto-reconocimiento-de-rostro-utilizando-una-cnn [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en:https://github.com/elesine/PROYECTO-RECONOCIMIENTO-DE ROSTRO-UTILIZANDO-UNA-CNNTowards data science, COVID-19: Face Mask Detection using TensorFlow and OpenCV. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://towardsdatascience.com/covid-19-face mask-detection-using-tensorflow-and-opencv-702dd833515bHealth Big Data, Algoritmo para la detección de mascarilla [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://www.juanbarrios.com/algoritmo-para-la-deteccion-del-uso-de-la-mascarilla/Github, Detector de tapabocas con OpenCV y Keras/Tensorflow. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://github.com/josebenitezg/covid-19-detector-tapabocasGithub, MaskDetection. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en:https://github.com/DavidReveloLuna/MaskDetectionGithub, training the CNN.ipynb [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://github.com/aieml/face-mask-detection-keras/blob/master/2.0%20training%20the%20CNN.ipynbKAIMING, He; XIANGYU, Zhang; SHAOQING, Ren y JIAN, Sun. Deep Residual Learning for Image Recognition. En: IEEE [en línea] [Consultado: 11 de noviembre de 2021.] Disponible en: https://ieeexplore.ieee.org/document/7780459Stack Overflow, How to split resnet50 model from top as well as from bottom [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://stackoverflow.com/questions/54207410/how-to-split resnet50-model-from-top-as-well-as-from-bottomFree code camp, Object Detection in Google Colab with Fizyr Retinanet. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://medium.com/free-code-camp/object-detection-in-colab-with fizyr-retinanet-efed36ac4af3TORRES, Jordi. Deep Learning Introducción Práctica Con Keras (Segunda Parte). Alpha editorial, 2019.TORRES, Jordi. PYTHON DEEP LEARNING. Marcombo editorial, 2020.BOBADILLA, Jesus. Machine Learning y Deep Learning. Usando python, scikit y keras. Ediciones de la U editorial, 2021.Vahid Mirjalili, Sebastian Raschka. Python machine learning. Editorial Marcombo, 2019.BOBADILLA, Jesus. Machine Learning Y Deep Learning. Ediciones De La U Limitada, 2020.LOPEZ SOTELO, Jesus Alfonso. Deep Learning Teoria Y Aplicaciones. Alphaeditorial, 2021PublicationORIGINALTRABAJO DE GRADO.PDFTRABAJO DE GRADO.PDFapplication/pdf3101090https://dspace7-utp.metabuscador.org/bitstreams/5843982c-93b1-4cf4-9999-a0db426d178c/download53172e84c2aea45392effa33d41dcb1dMD51LICENSElicense.txtlicense.txttext/plain; charset=utf-814828https://dspace7-utp.metabuscador.org/bitstreams/8b09abe8-e009-4fac-b4ab-ef2d8c6ab23d/download2f9959eaf5b71fae44bbf9ec84150c7aMD52TEXTTRABAJO DE GRADO.PDF.txtTRABAJO DE GRADO.PDF.txtExtracted texttext/plain128233https://dspace7-utp.metabuscador.org/bitstreams/e7f9f851-1cd1-4771-bb57-2fe297063144/downloadcd5bd656d217f4cb5997a21995ea8f87MD53THUMBNAILTRABAJO DE GRADO.PDF.jpgTRABAJO DE GRADO.PDF.jpgGenerated Thumbnailimage/jpeg7227https://dspace7-utp.metabuscador.org/bitstreams/5b57782e-2bdc-4d28-a558-13de5f70fcef/downloadae2008092d94f73270b1ad1d4c5c5759MD5411059/14012oai:dspace7-utp.metabuscador.org:11059/140122024-09-05 17:02:01.776https://creativecommons.org/licenses/by-nc-nd/4.0/Manifiesto (Manifestamos) en este documento la voluntad de autorizar a la Biblioteca Jorge Roa Martínez de la Universidad Tecnológica de Pereira la publicación en el Repositorio institucional (http://biblioteca.utp.edu.co), la versión electrónica de la OBRA titulada: ________________________________________________________________________________________________ ________________________________________________________________________________________________ ________________________________________________________________________________________________ La Universidad Tecnológica de Pereira, entidad académica sin ánimo de lucro, queda por lo tanto facultada para ejercer plenamente la autorización anteriormente descrita en su actividad ordinaria de investigación, docencia y publicación. La autorización otorgada se ajusta a lo que establece la Ley 23 de 1982. Con todo, en mi (nuestra) condición de autor (es) me (nos) reservo (reservamos) los derechos morales de la OBRA antes citada con arreglo al artículo 30 deopen.accesshttps://dspace7-utp.metabuscador.orgRepositorio de la Universidad Tecnológica de Pereirabdigital@metabiblioteca.comTEEgT0JSQSAoVEFMIFkgQ09NTyBTRSBERUZJTkUgTcOBUyBBREVMQU5URSkgU0UgT1RPUkdBIEJBSk8gTE9TIFRFUk1JTk9TIERFIEVTVEEgTElDRU5DSUEgUMOaQkxJQ0EgREUgQ1JFQVRJVkUgQ09NTU9OUyAo4oCcTFBDQ+KAnSBPIOKAnExJQ0VOQ0lB4oCdKS4gTEEgT0JSQSBFU1TDgSBQUk9URUdJREEgUE9SIERFUkVDSE9TIERFIEFVVE9SIFkvVSBPVFJBUyBMRVlFUyBBUExJQ0FCTEVTLiBRVUVEQSBQUk9ISUJJRE8gQ1VBTFFVSUVSIFVTTyBRVUUgU0UgSEFHQSBERSBMQSBPQlJBIFFVRSBOTyBDVUVOVEUgQ09OIExBIEFVVE9SSVpBQ0nDk04gUEVSVElORU5URSBERSBDT05GT1JNSURBRCBDT04gTE9TIFTDiVJNSU5PUyBERSBFU1RBIExJQ0VOQ0lBIFkgREUgTEEgTEVZIERFIERFUkVDSE8gREUgQVVUT1IuCgpNRURJQU5URSBFTCBFSkVSQ0lDSU8gREUgQ1VBTFFVSUVSQSBERSBMT1MgREVSRUNIT1MgUVVFIFNFIE9UT1JHQU4gRU4gRVNUQSBMSUNFTkNJQSwgVVNURUQgQUNFUFRBIFkgQUNVRVJEQSBRVUVEQVIgT0JMSUdBRE8gRU4gTE9TIFRFUk1JTk9TIFFVRSBTRSBTRcORQUxBTiBFTiBFTExBLiBFTCBMSUNFTkNJQU5URSBDT05DRURFIEEgVVNURUQgTE9TIERFUkVDSE9TIENPTlRFTklET1MgRU4gRVNUQSBMSUNFTkNJQSBDT05ESUNJT05BRE9TIEEgTEEgQUNFUFRBQ0nDk04gREUgU1VTIFRFUk1JTk9TIFkgQ09ORElDSU9ORVMuCjEuIERlZmluaWNpb25lcwoKYS4JT2JyYSBDb2xlY3RpdmEgZXMgdW5hIG9icmEsIHRhbCBjb21vIHVuYSBwdWJsaWNhY2nDs24gcGVyacOzZGljYSwgdW5hIGFudG9sb2fDrWEsIG8gdW5hIGVuY2ljbG9wZWRpYSwgZW4gbGEgcXVlIGxhIG9icmEgZW4gc3UgdG90YWxpZGFkLCBzaW4gbW9kaWZpY2FjacOzbiBhbGd1bmEsIGp1bnRvIGNvbiB1biBncnVwbyBkZSBvdHJhcyBjb250cmlidWNpb25lcyBxdWUgY29uc3RpdHV5ZW4gb2JyYXMgc2VwYXJhZGFzIGUgaW5kZXBlbmRpZW50ZXMgZW4gc8OtIG1pc21hcywgc2UgaW50ZWdyYW4gZW4gdW4gdG9kbyBjb2xlY3Rpdm8uIFVuYSBPYnJhIHF1ZSBjb25zdGl0dXllIHVuYSBvYnJhIGNvbGVjdGl2YSBubyBzZSBjb25zaWRlcmFyw6EgdW5hIE9icmEgRGVyaXZhZGEgKGNvbW8gc2UgZGVmaW5lIGFiYWpvKSBwYXJhIGxvcyBwcm9ww7NzaXRvcyBkZSBlc3RhIGxpY2VuY2lhLiBhcXVlbGxhIHByb2R1Y2lkYSBwb3IgdW4gZ3J1cG8gZGUgYXV0b3JlcywgZW4gcXVlIGxhIE9icmEgc2UgZW5jdWVudHJhIHNpbiBtb2RpZmljYWNpb25lcywganVudG8gY29uIHVuYSBjaWVydGEgY2FudGlkYWQgZGUgb3RyYXMgY29udHJpYnVjaW9uZXMsIHF1ZSBjb25zdGl0dXllbiBlbiBzw60gbWlzbW9zIHRyYWJham9zIHNlcGFyYWRvcyBlIGluZGVwZW5kaWVudGVzLCBxdWUgc29uIGludGVncmFkb3MgYWwgdG9kbyBjb2xlY3Rpdm8sIHRhbGVzIGNvbW8gcHVibGljYWNpb25lcyBwZXJpw7NkaWNhcywgYW50b2xvZ8OtYXMgbyBlbmNpY2xvcGVkaWFzLgoKYi4JT2JyYSBEZXJpdmFkYSBzaWduaWZpY2EgdW5hIG9icmEgYmFzYWRhIGVuIGxhIG9icmEgb2JqZXRvIGRlIGVzdGEgbGljZW5jaWEgbyBlbiDDqXN0YSB5IG90cmFzIG9icmFzIHByZWV4aXN0ZW50ZXMsIHRhbGVzIGNvbW8gdHJhZHVjY2lvbmVzLCBhcnJlZ2xvcyBtdXNpY2FsZXMsIGRyYW1hdGl6YWNpb25lcywg4oCcZmljY2lvbmFsaXphY2lvbmVz4oCdLCB2ZXJzaW9uZXMgcGFyYSBjaW5lLCDigJxncmFiYWNpb25lcyBkZSBzb25pZG/igJ0sIHJlcHJvZHVjY2lvbmVzIGRlIGFydGUsIHJlc8O6bWVuZXMsIGNvbmRlbnNhY2lvbmVzLCBvIGN1YWxxdWllciBvdHJhIGVuIGxhIHF1ZSBsYSBvYnJhIHB1ZWRhIHNlciB0cmFuc2Zvcm1hZGEsIGNhbWJpYWRhIG8gYWRhcHRhZGEsIGV4Y2VwdG8gYXF1ZWxsYXMgcXVlIGNvbnN0aXR1eWFuIHVuYSBvYnJhIGNvbGVjdGl2YSwgbGFzIHF1ZSBubyBzZXLDoW4gY29uc2lkZXJhZGFzIHVuYSBvYnJhIGRlcml2YWRhIHBhcmEgZWZlY3RvcyBkZSBlc3RhIGxpY2VuY2lhLiAoUGFyYSBldml0YXIgZHVkYXMsIGVuIGVsIGNhc28gZGUgcXVlIGxhIE9icmEgc2VhIHVuYSBjb21wb3NpY2nDs24gbXVzaWNhbCBvIHVuYSBncmFiYWNpw7NuIHNvbm9yYSwgcGFyYSBsb3MgZWZlY3RvcyBkZSBlc3RhIExpY2VuY2lhIGxhIHNpbmNyb25pemFjacOzbiB0ZW1wb3JhbCBkZSBsYSBPYnJhIGNvbiB1bmEgaW1hZ2VuIGVuIG1vdmltaWVudG8gc2UgY29uc2lkZXJhcsOhIHVuYSBPYnJhIERlcml2YWRhIHBhcmEgbG9zIGZpbmVzIGRlIGVzdGEgbGljZW5jaWEpLgoKYy4JTGljZW5jaWFudGUsIGVzIGVsIGluZGl2aWR1byBvIGxhIGVudGlkYWQgdGl0dWxhciBkZSBsb3MgZGVyZWNob3MgZGUgYXV0b3IgcXVlIG9mcmVjZSBsYSBPYnJhIGVuIGNvbmZvcm1pZGFkIGNvbiBsYXMgY29uZGljaW9uZXMgZGUgZXN0YSBMaWNlbmNpYS4KCmQuCUF1dG9yIG9yaWdpbmFsLCBlcyBlbCBpbmRpdmlkdW8gcXVlIGNyZcOzIGxhIE9icmEuCgplLglPYnJhLCBlcyBhcXVlbGxhIG9icmEgc3VzY2VwdGlibGUgZGUgcHJvdGVjY2nDs24gcG9yIGVsIHLDqWdpbWVuIGRlIERlcmVjaG8gZGUgQXV0b3IgeSBxdWUgZXMgb2ZyZWNpZGEgZW4gbG9zIHTDqXJtaW5vcyBkZSBlc3RhIGxpY2VuY2lhCgpmLglVc3RlZCwgZXMgZWwgaW5kaXZpZHVvIG8gbGEgZW50aWRhZCBxdWUgZWplcmNpdGEgbG9zIGRlcmVjaG9zIG90b3JnYWRvcyBhbCBhbXBhcm8gZGUgZXN0YSBMaWNlbmNpYSB5IHF1ZSBjb24gYW50ZXJpb3JpZGFkIG5vIGhhIHZpb2xhZG8gbGFzIGNvbmRpY2lvbmVzIGRlIGxhIG1pc21hIHJlc3BlY3RvIGEgbGEgT2JyYSwgbyBxdWUgaGF5YSBvYnRlbmlkbyBhdXRvcml6YWNpw7NuIGV4cHJlc2EgcG9yIHBhcnRlIGRlbCBMaWNlbmNpYW50ZSBwYXJhIGVqZXJjZXIgbG9zIGRlcmVjaG9zIGFsIGFtcGFybyBkZSBlc3RhIExpY2VuY2lhIHBlc2UgYSB1bmEgdmlvbGFjacOzbiBhbnRlcmlvci4KCjIuIERlcmVjaG9zIGRlIFVzb3MgSG9ucmFkb3MgeSBleGNlcGNpb25lcyBMZWdhbGVzLgpOYWRhIGVuIGVzdGEgTGljZW5jaWEgcG9kcsOhIHNlciBpbnRlcnByZXRhZG8gY29tbyB1bmEgZGlzbWludWNpw7NuLCBsaW1pdGFjacOzbiBvIHJlc3RyaWNjacOzbiBkZSBsb3MgZGVyZWNob3MgZGVyaXZhZG9zIGRlbCB1c28gaG9ucmFkbyB5IG90cmFzIGxpbWl0YWNpb25lcyBvIGV4Y2VwY2lvbmVzIGEgbG9zIGRlcmVjaG9zIGRlbCBhdXRvciBiYWpvIGVsIHLDqWdpbWVuIGxlZ2FsIHZpZ2VudGUgbyBkZXJpdmFkbyBkZSBjdWFscXVpZXIgb3RyYSBub3JtYSBxdWUgc2UgbGUgYXBsaXF1ZS4KCjMuIENvbmNlc2nDs24gZGUgbGEgTGljZW5jaWEuCkJham8gbG9zIHTDqXJtaW5vcyB5IGNvbmRpY2lvbmVzIGRlIGVzdGEgTGljZW5jaWEsIGVsIExpY2VuY2lhbnRlIG90b3JnYSBhIFVzdGVkIHVuYSBsaWNlbmNpYSBtdW5kaWFsLCBsaWJyZSBkZSByZWdhbMOtYXMsIG5vIGV4Y2x1c2l2YSB5IHBlcnBldHVhIChkdXJhbnRlIHRvZG8gZWwgcGVyw61vZG8gZGUgdmlnZW5jaWEgZGUgbG9zIGRlcmVjaG9zIGRlIGF1dG9yKSBwYXJhIGVqZXJjZXIgZXN0b3MgZGVyZWNob3Mgc29icmUgbGEgT2JyYSB0YWwgeSBjb21vIHNlIGluZGljYSBhIGNvbnRpbnVhY2nDs246CgphLglSZXByb2R1Y2lyIGxhIE9icmEsIGluY29ycG9yYXIgbGEgT2JyYSBlbiB1bmEgbyBtw6FzIE9icmFzIENvbGVjdGl2YXMsIHkgcmVwcm9kdWNpciBsYSBPYnJhIGluY29ycG9yYWRhIGVuIGxhcyBPYnJhcyBDb2xlY3RpdmFzLgoKYi4JRGlzdHJpYnVpciBjb3BpYXMgbyBmb25vZ3JhbWFzIGRlIGxhcyBPYnJhcywgZXhoaWJpcmxhcyBww7pibGljYW1lbnRlLCBlamVjdXRhcmxhcyBww7pibGljYW1lbnRlIHkvbyBwb25lcmxhcyBhIGRpc3Bvc2ljacOzbiBww7pibGljYSwgaW5jbHV5w6luZG9sYXMgY29tbyBpbmNvcnBvcmFkYXMgZW4gT2JyYXMgQ29sZWN0aXZhcywgc2Vnw7puIGNvcnJlc3BvbmRhLgoKYy4JRGlzdHJpYnVpciBjb3BpYXMgZGUgbGFzIE9icmFzIERlcml2YWRhcyBxdWUgc2UgZ2VuZXJlbiwgZXhoaWJpcmxhcyBww7pibGljYW1lbnRlLCBlamVjdXRhcmxhcyBww7pibGljYW1lbnRlIHkvbyBwb25lcmxhcyBhIGRpc3Bvc2ljacOzbiBww7pibGljYS4KTG9zIGRlcmVjaG9zIG1lbmNpb25hZG9zIGFudGVyaW9ybWVudGUgcHVlZGVuIHNlciBlamVyY2lkb3MgZW4gdG9kb3MgbG9zIG1lZGlvcyB5IGZvcm1hdG9zLCBhY3R1YWxtZW50ZSBjb25vY2lkb3MgbyBxdWUgc2UgaW52ZW50ZW4gZW4gZWwgZnV0dXJvLiBMb3MgZGVyZWNob3MgYW50ZXMgbWVuY2lvbmFkb3MgaW5jbHV5ZW4gZWwgZGVyZWNobyBhIHJlYWxpemFyIGRpY2hhcyBtb2RpZmljYWNpb25lcyBlbiBsYSBtZWRpZGEgcXVlIHNlYW4gdMOpY25pY2FtZW50ZSBuZWNlc2FyaWFzIHBhcmEgZWplcmNlciBsb3MgZGVyZWNob3MgZW4gb3RybyBtZWRpbyBvIGZvcm1hdG9zLCBwZXJvIGRlIG90cmEgbWFuZXJhIHVzdGVkIG5vIGVzdMOhIGF1dG9yaXphZG8gcGFyYSByZWFsaXphciBvYnJhcyBkZXJpdmFkYXMuIFRvZG9zIGxvcyBkZXJlY2hvcyBubyBvdG9yZ2Fkb3MgZXhwcmVzYW1lbnRlIHBvciBlbCBMaWNlbmNpYW50ZSBxdWVkYW4gcG9yIGVzdGUgbWVkaW8gcmVzZXJ2YWRvcywgaW5jbHV5ZW5kbyBwZXJvIHNpbiBsaW1pdGFyc2UgYSBhcXVlbGxvcyBxdWUgc2UgbWVuY2lvbmFuIGVuIGxhcyBzZWNjaW9uZXMgNChkKSB5IDQoZSkuCgo0LiBSZXN0cmljY2lvbmVzLgpMYSBsaWNlbmNpYSBvdG9yZ2FkYSBlbiBsYSBhbnRlcmlvciBTZWNjacOzbiAzIGVzdMOhIGV4cHJlc2FtZW50ZSBzdWpldGEgeSBsaW1pdGFkYSBwb3IgbGFzIHNpZ3VpZW50ZXMgcmVzdHJpY2Npb25lczoKCmEuCVVzdGVkIHB1ZWRlIGRpc3RyaWJ1aXIsIGV4aGliaXIgcMO6YmxpY2FtZW50ZSwgZWplY3V0YXIgcMO6YmxpY2FtZW50ZSwgbyBwb25lciBhIGRpc3Bvc2ljacOzbiBww7pibGljYSBsYSBPYnJhIHPDs2xvIGJham8gbGFzIGNvbmRpY2lvbmVzIGRlIGVzdGEgTGljZW5jaWEsIHkgVXN0ZWQgZGViZSBpbmNsdWlyIHVuYSBjb3BpYSBkZSBlc3RhIGxpY2VuY2lhIG8gZGVsIElkZW50aWZpY2Fkb3IgVW5pdmVyc2FsIGRlIFJlY3Vyc29zIGRlIGxhIG1pc21hIGNvbiBjYWRhIGNvcGlhIGRlIGxhIE9icmEgcXVlIGRpc3RyaWJ1eWEsIGV4aGliYSBww7pibGljYW1lbnRlLCBlamVjdXRlIHDDumJsaWNhbWVudGUgbyBwb25nYSBhIGRpc3Bvc2ljacOzbiBww7pibGljYS4gTm8gZXMgcG9zaWJsZSBvZnJlY2VyIG8gaW1wb25lciBuaW5ndW5hIGNvbmRpY2nDs24gc29icmUgbGEgT2JyYSBxdWUgYWx0ZXJlIG8gbGltaXRlIGxhcyBjb25kaWNpb25lcyBkZSBlc3RhIExpY2VuY2lhIG8gZWwgZWplcmNpY2lvIGRlIGxvcyBkZXJlY2hvcyBkZSBsb3MgZGVzdGluYXRhcmlvcyBvdG9yZ2Fkb3MgZW4gZXN0ZSBkb2N1bWVudG8uIE5vIGVzIHBvc2libGUgc3VibGljZW5jaWFyIGxhIE9icmEuIFVzdGVkIGRlYmUgbWFudGVuZXIgaW50YWN0b3MgdG9kb3MgbG9zIGF2aXNvcyBxdWUgaGFnYW4gcmVmZXJlbmNpYSBhIGVzdGEgTGljZW5jaWEgeSBhIGxhIGNsw6F1c3VsYSBkZSBsaW1pdGFjacOzbiBkZSBnYXJhbnTDrWFzLiBVc3RlZCBubyBwdWVkZSBkaXN0cmlidWlyLCBleGhpYmlyIHDDumJsaWNhbWVudGUsIGVqZWN1dGFyIHDDumJsaWNhbWVudGUsIG8gcG9uZXIgYSBkaXNwb3NpY2nDs24gcMO6YmxpY2EgbGEgT2JyYSBjb24gYWxndW5hIG1lZGlkYSB0ZWNub2zDs2dpY2EgcXVlIGNvbnRyb2xlIGVsIGFjY2VzbyBvIGxhIHV0aWxpemFjacOzbiBkZSBlbGxhIGRlIHVuYSBmb3JtYSBxdWUgc2VhIGluY29uc2lzdGVudGUgY29uIGxhcyBjb25kaWNpb25lcyBkZSBlc3RhIExpY2VuY2lhLiBMbyBhbnRlcmlvciBzZSBhcGxpY2EgYSBsYSBPYnJhIGluY29ycG9yYWRhIGEgdW5hIE9icmEgQ29sZWN0aXZhLCBwZXJvIGVzdG8gbm8gZXhpZ2UgcXVlIGxhIE9icmEgQ29sZWN0aXZhIGFwYXJ0ZSBkZSBsYSBvYnJhIG1pc21hIHF1ZWRlIHN1amV0YSBhIGxhcyBjb25kaWNpb25lcyBkZSBlc3RhIExpY2VuY2lhLiBTaSBVc3RlZCBjcmVhIHVuYSBPYnJhIENvbGVjdGl2YSwgcHJldmlvIGF2aXNvIGRlIGN1YWxxdWllciBMaWNlbmNpYW50ZSBkZWJlLCBlbiBsYSBtZWRpZGEgZGUgbG8gcG9zaWJsZSwgZWxpbWluYXIgZGUgbGEgT2JyYSBDb2xlY3RpdmEgY3VhbHF1aWVyIHJlZmVyZW5jaWEgYSBkaWNobyBMaWNlbmNpYW50ZSBvIGFsIEF1dG9yIE9yaWdpbmFsLCBzZWfDum4gbG8gc29saWNpdGFkbyBwb3IgZWwgTGljZW5jaWFudGUgeSBjb25mb3JtZSBsbyBleGlnZSBsYSBjbMOhdXN1bGEgNChjKS4KCmIuCVVzdGVkIG5vIHB1ZWRlIGVqZXJjZXIgbmluZ3VubyBkZSBsb3MgZGVyZWNob3MgcXVlIGxlIGhhbiBzaWRvIG90b3JnYWRvcyBlbiBsYSBTZWNjacOzbiAzIHByZWNlZGVudGUgZGUgbW9kbyBxdWUgZXN0w6luIHByaW5jaXBhbG1lbnRlIGRlc3RpbmFkb3MgbyBkaXJlY3RhbWVudGUgZGlyaWdpZG9zIGEgY29uc2VndWlyIHVuIHByb3ZlY2hvIGNvbWVyY2lhbCBvIHVuYSBjb21wZW5zYWNpw7NuIG1vbmV0YXJpYSBwcml2YWRhLiBFbCBpbnRlcmNhbWJpbyBkZSBsYSBPYnJhIHBvciBvdHJhcyBvYnJhcyBwcm90ZWdpZGFzIHBvciBkZXJlY2hvcyBkZSBhdXRvciwgeWEgc2VhIGEgdHJhdsOpcyBkZSB1biBzaXN0ZW1hIHBhcmEgY29tcGFydGlyIGFyY2hpdm9zIGRpZ2l0YWxlcyAoZGlnaXRhbCBmaWxlLXNoYXJpbmcpIG8gZGUgY3VhbHF1aWVyIG90cmEgbWFuZXJhIG5vIHNlcsOhIGNvbnNpZGVyYWRvIGNvbW8gZXN0YXIgZGVzdGluYWRvIHByaW5jaXBhbG1lbnRlIG8gZGlyaWdpZG8gZGlyZWN0YW1lbnRlIGEgY29uc2VndWlyIHVuIHByb3ZlY2hvIGNvbWVyY2lhbCBvIHVuYSBjb21wZW5zYWNpw7NuIG1vbmV0YXJpYSBwcml2YWRhLCBzaWVtcHJlIHF1ZSBubyBzZSByZWFsaWNlIHVuIHBhZ28gbWVkaWFudGUgdW5hIGNvbXBlbnNhY2nDs24gbW9uZXRhcmlhIGVuIHJlbGFjacOzbiBjb24gZWwgaW50ZXJjYW1iaW8gZGUgb2JyYXMgcHJvdGVnaWRhcyBwb3IgZWwgZGVyZWNobyBkZSBhdXRvci4KCmMuCVNpIHVzdGVkIGRpc3RyaWJ1eWUsIGV4aGliZSBww7pibGljYW1lbnRlLCBlamVjdXRhIHDDumJsaWNhbWVudGUgbyBlamVjdXRhIHDDumJsaWNhbWVudGUgZW4gZm9ybWEgZGlnaXRhbCBsYSBPYnJhIG8gY3VhbHF1aWVyIE9icmEgRGVyaXZhZGEgdSBPYnJhIENvbGVjdGl2YSwgVXN0ZWQgZGViZSBtYW50ZW5lciBpbnRhY3RhIHRvZGEgbGEgaW5mb3JtYWNpw7NuIGRlIGRlcmVjaG8gZGUgYXV0b3IgZGUgbGEgT2JyYSB5IHByb3BvcmNpb25hciwgZGUgZm9ybWEgcmF6b25hYmxlIHNlZ8O6biBlbCBtZWRpbyBvIG1hbmVyYSBxdWUgVXN0ZWQgZXN0w6kgdXRpbGl6YW5kbzogKGkpIGVsIG5vbWJyZSBkZWwgQXV0b3IgT3JpZ2luYWwgc2kgZXN0w6EgcHJvdmlzdG8gKG8gc2V1ZMOzbmltbywgc2kgZnVlcmUgYXBsaWNhYmxlKSwgeS9vIChpaSkgZWwgbm9tYnJlIGRlIGxhIHBhcnRlIG8gbGFzIHBhcnRlcyBxdWUgZWwgQXV0b3IgT3JpZ2luYWwgeS9vIGVsIExpY2VuY2lhbnRlIGh1YmllcmVuIGRlc2lnbmFkbyBwYXJhIGxhIGF0cmlidWNpw7NuICh2LmcuLCB1biBpbnN0aXR1dG8gcGF0cm9jaW5hZG9yLCBlZGl0b3JpYWwsIHB1YmxpY2FjacOzbikgZW4gbGEgaW5mb3JtYWNpw7NuIGRlIGxvcyBkZXJlY2hvcyBkZSBhdXRvciBkZWwgTGljZW5jaWFudGUsIHTDqXJtaW5vcyBkZSBzZXJ2aWNpb3MgbyBkZSBvdHJhcyBmb3JtYXMgcmF6b25hYmxlczsgZWwgdMOtdHVsbyBkZSBsYSBPYnJhIHNpIGVzdMOhIHByb3Zpc3RvOyBlbiBsYSBtZWRpZGEgZGUgbG8gcmF6b25hYmxlbWVudGUgZmFjdGlibGUgeSwgc2kgZXN0w6EgcHJvdmlzdG8sIGVsIElkZW50aWZpY2Fkb3IgVW5pZm9ybWUgZGUgUmVjdXJzb3MgKFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllcikgcXVlIGVsIExpY2VuY2lhbnRlIGVzcGVjaWZpY2EgcGFyYSBzZXIgYXNvY2lhZG8gY29uIGxhIE9icmEsIHNhbHZvIHF1ZSB0YWwgVVJJIG5vIHNlIHJlZmllcmEgYSBsYSBub3RhIHNvYnJlIGxvcyBkZXJlY2hvcyBkZSBhdXRvciBvIGEgbGEgaW5mb3JtYWNpw7NuIHNvYnJlIGVsIGxpY2VuY2lhbWllbnRvIGRlIGxhIE9icmE7IHkgZW4gZWwgY2FzbyBkZSB1bmEgT2JyYSBEZXJpdmFkYSwgYXRyaWJ1aXIgZWwgY3LDqWRpdG8gaWRlbnRpZmljYW5kbyBlbCB1c28gZGUgbGEgT2JyYSBlbiBsYSBPYnJhIERlcml2YWRhICh2LmcuLCAiVHJhZHVjY2nDs24gRnJhbmNlc2EgZGUgbGEgT2JyYSBkZWwgQXV0b3IgT3JpZ2luYWwsIiBvICJHdWnDs24gQ2luZW1hdG9ncsOhZmljbyBiYXNhZG8gZW4gbGEgT2JyYSBvcmlnaW5hbCBkZWwgQXV0b3IgT3JpZ2luYWwiKS4gVGFsIGNyw6lkaXRvIHB1ZWRlIHNlciBpbXBsZW1lbnRhZG8gZGUgY3VhbHF1aWVyIGZvcm1hIHJhem9uYWJsZTsgZW4gZWwgY2Fzbywgc2luIGVtYmFyZ28sIGRlIE9icmFzIERlcml2YWRhcyB1IE9icmFzIENvbGVjdGl2YXMsIHRhbCBjcsOpZGl0byBhcGFyZWNlcsOhLCBjb21vIG3DrW5pbW8sIGRvbmRlIGFwYXJlY2UgZWwgY3LDqWRpdG8gZGUgY3VhbHF1aWVyIG90cm8gYXV0b3IgY29tcGFyYWJsZSB5IGRlIHVuYSBtYW5lcmEsIGFsIG1lbm9zLCB0YW4gZGVzdGFjYWRhIGNvbW8gZWwgY3LDqWRpdG8gZGUgb3RybyBhdXRvciBjb21wYXJhYmxlLgoKZC4JUGFyYSBldml0YXIgdG9kYSBjb25mdXNpw7NuLCBlbCBMaWNlbmNpYW50ZSBhY2xhcmEgcXVlLCBjdWFuZG8gbGEgb2JyYSBlcyB1bmEgY29tcG9zaWNpw7NuIG11c2ljYWw6CgppLglSZWdhbMOtYXMgcG9yIGludGVycHJldGFjacOzbiB5IGVqZWN1Y2nDs24gYmFqbyBsaWNlbmNpYXMgZ2VuZXJhbGVzLiBFbCBMaWNlbmNpYW50ZSBzZSByZXNlcnZhIGVsIGRlcmVjaG8gZXhjbHVzaXZvIGRlIGF1dG9yaXphciBsYSBlamVjdWNpw7NuIHDDumJsaWNhIG8gbGEgZWplY3VjacOzbiBww7pibGljYSBkaWdpdGFsIGRlIGxhIG9icmEgeSBkZSByZWNvbGVjdGFyLCBzZWEgaW5kaXZpZHVhbG1lbnRlIG8gYSB0cmF2w6lzIGRlIHVuYSBzb2NpZWRhZCBkZSBnZXN0acOzbiBjb2xlY3RpdmEgZGUgZGVyZWNob3MgZGUgYXV0b3IgeSBkZXJlY2hvcyBjb25leG9zIChwb3IgZWplbXBsbywgU0FZQ08pLCBsYXMgcmVnYWzDrWFzIHBvciBsYSBlamVjdWNpw7NuIHDDumJsaWNhIG8gcG9yIGxhIGVqZWN1Y2nDs24gcMO6YmxpY2EgZGlnaXRhbCBkZSBsYSBvYnJhIChwb3IgZWplbXBsbyBXZWJjYXN0KSBsaWNlbmNpYWRhIGJham8gbGljZW5jaWFzIGdlbmVyYWxlcywgc2kgbGEgaW50ZXJwcmV0YWNpw7NuIG8gZWplY3VjacOzbiBkZSBsYSBvYnJhIGVzdMOhIHByaW1vcmRpYWxtZW50ZSBvcmllbnRhZGEgcG9yIG8gZGlyaWdpZGEgYSBsYSBvYnRlbmNpw7NuIGRlIHVuYSB2ZW50YWphIGNvbWVyY2lhbCBvIHVuYSBjb21wZW5zYWNpw7NuIG1vbmV0YXJpYSBwcml2YWRhLgoKaWkuCVJlZ2Fsw61hcyBwb3IgRm9ub2dyYW1hcy4gRWwgTGljZW5jaWFudGUgc2UgcmVzZXJ2YSBlbCBkZXJlY2hvIGV4Y2x1c2l2byBkZSByZWNvbGVjdGFyLCBpbmRpdmlkdWFsbWVudGUgbyBhIHRyYXbDqXMgZGUgdW5hIHNvY2llZGFkIGRlIGdlc3Rpw7NuIGNvbGVjdGl2YSBkZSBkZXJlY2hvcyBkZSBhdXRvciB5IGRlcmVjaG9zIGNvbmV4b3MgKHBvciBlamVtcGxvLCBsb3MgY29uc2FncmFkb3MgcG9yIGxhIFNBWUNPKSwgdW5hIGFnZW5jaWEgZGUgZGVyZWNob3MgbXVzaWNhbGVzIG8gYWxnw7puIGFnZW50ZSBkZXNpZ25hZG8sIGxhcyByZWdhbMOtYXMgcG9yIGN1YWxxdWllciBmb25vZ3JhbWEgcXVlIFVzdGVkIGNyZWUgYSBwYXJ0aXIgZGUgbGEgb2JyYSAo4oCcdmVyc2nDs24gY292ZXLigJ0pIHkgZGlzdHJpYnV5YSwgZW4gbG9zIHTDqXJtaW5vcyBkZWwgcsOpZ2ltZW4gZGUgZGVyZWNob3MgZGUgYXV0b3IsIHNpIGxhIGNyZWFjacOzbiBvIGRpc3RyaWJ1Y2nDs24gZGUgZXNhIHZlcnNpw7NuIGNvdmVyIGVzdMOhIHByaW1vcmRpYWxtZW50ZSBkZXN0aW5hZGEgbyBkaXJpZ2lkYSBhIG9idGVuZXIgdW5hIHZlbnRhamEgY29tZXJjaWFsIG8gdW5hIGNvbXBlbnNhY2nDs24gbW9uZXRhcmlhIHByaXZhZGEuCgplLglHZXN0acOzbiBkZSBEZXJlY2hvcyBkZSBBdXRvciBzb2JyZSBJbnRlcnByZXRhY2lvbmVzIHkgRWplY3VjaW9uZXMgRGlnaXRhbGVzIChXZWJDYXN0aW5nKS4gUGFyYSBldml0YXIgdG9kYSBjb25mdXNpw7NuLCBlbCBMaWNlbmNpYW50ZSBhY2xhcmEgcXVlLCBjdWFuZG8gbGEgb2JyYSBzZWEgdW4gZm9ub2dyYW1hLCBlbCBMaWNlbmNpYW50ZSBzZSByZXNlcnZhIGVsIGRlcmVjaG8gZXhjbHVzaXZvIGRlIGF1dG9yaXphciBsYSBlamVjdWNpw7NuIHDDumJsaWNhIGRpZ2l0YWwgZGUgbGEgb2JyYSAocG9yIGVqZW1wbG8sIHdlYmNhc3QpIHkgZGUgcmVjb2xlY3RhciwgaW5kaXZpZHVhbG1lbnRlIG8gYSB0cmF2w6lzIGRlIHVuYSBzb2NpZWRhZCBkZSBnZXN0acOzbiBjb2xlY3RpdmEgZGUgZGVyZWNob3MgZGUgYXV0b3IgeSBkZXJlY2hvcyBjb25leG9zIChwb3IgZWplbXBsbywgQUNJTlBSTyksIGxhcyByZWdhbMOtYXMgcG9yIGxhIGVqZWN1Y2nDs24gcMO6YmxpY2EgZGlnaXRhbCBkZSBsYSBvYnJhIChwb3IgZWplbXBsbywgd2ViY2FzdCksIHN1amV0YSBhIGxhcyBkaXNwb3NpY2lvbmVzIGFwbGljYWJsZXMgZGVsIHLDqWdpbWVuIGRlIERlcmVjaG8gZGUgQXV0b3IsIHNpIGVzdGEgZWplY3VjacOzbiBww7pibGljYSBkaWdpdGFsIGVzdMOhIHByaW1vcmRpYWxtZW50ZSBkaXJpZ2lkYSBhIG9idGVuZXIgdW5hIHZlbnRhamEgY29tZXJjaWFsIG8gdW5hIGNvbXBlbnNhY2nDs24gbW9uZXRhcmlhIHByaXZhZGEuCgo1LiBSZXByZXNlbnRhY2lvbmVzLCBHYXJhbnTDrWFzIHkgTGltaXRhY2lvbmVzIGRlIFJlc3BvbnNhYmlsaWRhZC4KQSBNRU5PUyBRVUUgTEFTIFBBUlRFUyBMTyBBQ09SREFSQU4gREUgT1RSQSBGT1JNQSBQT1IgRVNDUklUTywgRUwgTElDRU5DSUFOVEUgT0ZSRUNFIExBIE9CUkEgKEVOIEVMIEVTVEFETyBFTiBFTCBRVUUgU0UgRU5DVUVOVFJBKSDigJxUQUwgQ1VBTOKAnSwgU0lOIEJSSU5EQVIgR0FSQU5Uw41BUyBERSBDTEFTRSBBTEdVTkEgUkVTUEVDVE8gREUgTEEgT0JSQSwgWUEgU0VBIEVYUFJFU0EsIElNUEzDjUNJVEEsIExFR0FMIE8gQ1VBTFFVSUVSQSBPVFJBLCBJTkNMVVlFTkRPLCBTSU4gTElNSVRBUlNFIEEgRUxMQVMsIEdBUkFOVMONQVMgREUgVElUVUxBUklEQUQsIENPTUVSQ0lBQklMSURBRCwgQURBUFRBQklMSURBRCBPIEFERUNVQUNJw5NOIEEgUFJPUMOTU0lUTyBERVRFUk1JTkFETywgQVVTRU5DSUEgREUgSU5GUkFDQ0nDk04sIERFIEFVU0VOQ0lBIERFIERFRkVDVE9TIExBVEVOVEVTIE8gREUgT1RSTyBUSVBPLCBPIExBIFBSRVNFTkNJQSBPIEFVU0VOQ0lBIERFIEVSUk9SRVMsIFNFQU4gTyBOTyBERVNDVUJSSUJMRVMgKFBVRURBTiBPIE5PIFNFUiBFU1RPUyBERVNDVUJJRVJUT1MpLiBBTEdVTkFTIEpVUklTRElDQ0lPTkVTIE5PIFBFUk1JVEVOIExBIEVYQ0xVU0nDk04gREUgR0FSQU5Uw41BUyBJTVBMw41DSVRBUywgRU4gQ1VZTyBDQVNPIEVTVEEgRVhDTFVTScOTTiBQVUVERSBOTyBBUExJQ0FSU0UgQSBVU1RFRC4KCjYuIExpbWl0YWNpw7NuIGRlIHJlc3BvbnNhYmlsaWRhZC4KQSBNRU5PUyBRVUUgTE8gRVhJSkEgRVhQUkVTQU1FTlRFIExBIExFWSBBUExJQ0FCTEUsIEVMIExJQ0VOQ0lBTlRFIE5PIFNFUsOBIFJFU1BPTlNBQkxFIEFOVEUgVVNURUQgUE9SIERBw5FPIEFMR1VOTywgU0VBIFBPUiBSRVNQT05TQUJJTElEQUQgRVhUUkFDT05UUkFDVFVBTCwgUFJFQ09OVFJBQ1RVQUwgTyBDT05UUkFDVFVBTCwgT0JKRVRJVkEgTyBTVUJKRVRJVkEsIFNFIFRSQVRFIERFIERBw5FPUyBNT1JBTEVTIE8gUEFUUklNT05JQUxFUywgRElSRUNUT1MgTyBJTkRJUkVDVE9TLCBQUkVWSVNUT1MgTyBJTVBSRVZJU1RPUyBQUk9EVUNJRE9TIFBPUiBFTCBVU08gREUgRVNUQSBMSUNFTkNJQSBPIERFIExBIE9CUkEsIEFVTiBDVUFORE8gRUwgTElDRU5DSUFOVEUgSEFZQSBTSURPIEFEVkVSVElETyBERSBMQSBQT1NJQklMSURBRCBERSBESUNIT1MgREHDkU9TLiBBTEdVTkFTIExFWUVTIE5PIFBFUk1JVEVOIExBIEVYQ0xVU0nDk04gREUgQ0lFUlRBIFJFU1BPTlNBQklMSURBRCwgRU4gQ1VZTyBDQVNPIEVTVEEgRVhDTFVTScOTTiBQVUVERSBOTyBBUExJQ0FSU0UgQSBVU1RFRC4KCjcuIFTDqXJtaW5vLgoKYS4JRXN0YSBMaWNlbmNpYSB5IGxvcyBkZXJlY2hvcyBvdG9yZ2Fkb3MgZW4gdmlydHVkIGRlIGVsbGEgdGVybWluYXLDoW4gYXV0b23DoXRpY2FtZW50ZSBzaSBVc3RlZCBpbmZyaW5nZSBhbGd1bmEgY29uZGljacOzbiBlc3RhYmxlY2lkYSBlbiBlbGxhLiBTaW4gZW1iYXJnbywgbG9zIGluZGl2aWR1b3MgbyBlbnRpZGFkZXMgcXVlIGhhbiByZWNpYmlkbyBPYnJhcyBEZXJpdmFkYXMgbyBDb2xlY3RpdmFzIGRlIFVzdGVkIGRlIGNvbmZvcm1pZGFkIGNvbiBlc3RhIExpY2VuY2lhLCBubyB2ZXLDoW4gdGVybWluYWRhcyBzdXMgbGljZW5jaWFzLCBzaWVtcHJlIHF1ZSBlc3RvcyBpbmRpdmlkdW9zIG8gZW50aWRhZGVzIHNpZ2FuIGN1bXBsaWVuZG8gw61udGVncmFtZW50ZSBsYXMgY29uZGljaW9uZXMgZGUgZXN0YXMgbGljZW5jaWFzLiBMYXMgU2VjY2lvbmVzIDEsIDIsIDUsIDYsIDcsIHkgOCBzdWJzaXN0aXLDoW4gYSBjdWFscXVpZXIgdGVybWluYWNpw7NuIGRlIGVzdGEgTGljZW5jaWEuCgpiLglTdWpldGEgYSBsYXMgY29uZGljaW9uZXMgeSB0w6lybWlub3MgYW50ZXJpb3JlcywgbGEgbGljZW5jaWEgb3RvcmdhZGEgYXF1w60gZXMgcGVycGV0dWEgKGR1cmFudGUgZWwgcGVyw61vZG8gZGUgdmlnZW5jaWEgZGUgbG9zIGRlcmVjaG9zIGRlIGF1dG9yIGRlIGxhIG9icmEpLiBObyBvYnN0YW50ZSBsbyBhbnRlcmlvciwgZWwgTGljZW5jaWFudGUgc2UgcmVzZXJ2YSBlbCBkZXJlY2hvIGEgcHVibGljYXIgeS9vIGVzdHJlbmFyIGxhIE9icmEgYmFqbyBjb25kaWNpb25lcyBkZSBsaWNlbmNpYSBkaWZlcmVudGVzIG8gYSBkZWphciBkZSBkaXN0cmlidWlybGEgZW4gbG9zIHTDqXJtaW5vcyBkZSBlc3RhIExpY2VuY2lhIGVuIGN1YWxxdWllciBtb21lbnRvOyBlbiBlbCBlbnRlbmRpZG8sIHNpbiBlbWJhcmdvLCBxdWUgZXNhIGVsZWNjacOzbiBubyBzZXJ2aXLDoSBwYXJhIHJldm9jYXIgZXN0YSBsaWNlbmNpYSBvIHF1ZSBkZWJhIHNlciBvdG9yZ2FkYSAsIGJham8gbG9zIHTDqXJtaW5vcyBkZSBlc3RhIGxpY2VuY2lhKSwgeSBlc3RhIGxpY2VuY2lhIGNvbnRpbnVhcsOhIGVuIHBsZW5vIHZpZ29yIHkgZWZlY3RvIGEgbWVub3MgcXVlIHNlYSB0ZXJtaW5hZGEgY29tbyBzZSBleHByZXNhIGF0csOhcy4gTGEgTGljZW5jaWEgcmV2b2NhZGEgY29udGludWFyw6Egc2llbmRvIHBsZW5hbWVudGUgdmlnZW50ZSB5IGVmZWN0aXZhIHNpIG5vIHNlIGxlIGRhIHTDqXJtaW5vIGVuIGxhcyBjb25kaWNpb25lcyBpbmRpY2FkYXMgYW50ZXJpb3JtZW50ZS4KCjguIFZhcmlvcy4KCmEuCUNhZGEgdmV6IHF1ZSBVc3RlZCBkaXN0cmlidXlhIG8gcG9uZ2EgYSBkaXNwb3NpY2nDs24gcMO6YmxpY2EgbGEgT2JyYSBvIHVuYSBPYnJhIENvbGVjdGl2YSwgZWwgTGljZW5jaWFudGUgb2ZyZWNlcsOhIGFsIGRlc3RpbmF0YXJpbyB1bmEgbGljZW5jaWEgZW4gbG9zIG1pc21vcyB0w6lybWlub3MgeSBjb25kaWNpb25lcyBxdWUgbGEgbGljZW5jaWEgb3RvcmdhZGEgYSBVc3RlZCBiYWpvIGVzdGEgTGljZW5jaWEuCgpiLglTaSBhbGd1bmEgZGlzcG9zaWNpw7NuIGRlIGVzdGEgTGljZW5jaWEgcmVzdWx0YSBpbnZhbGlkYWRhIG8gbm8gZXhpZ2libGUsIHNlZ8O6biBsYSBsZWdpc2xhY2nDs24gdmlnZW50ZSwgZXN0byBubyBhZmVjdGFyw6EgbmkgbGEgdmFsaWRleiBuaSBsYSBhcGxpY2FiaWxpZGFkIGRlbCByZXN0byBkZSBjb25kaWNpb25lcyBkZSBlc3RhIExpY2VuY2lhIHksIHNpbiBhY2Npw7NuIGFkaWNpb25hbCBwb3IgcGFydGUgZGUgbG9zIHN1amV0b3MgZGUgZXN0ZSBhY3VlcmRvLCBhcXXDqWxsYSBzZSBlbnRlbmRlcsOhIHJlZm9ybWFkYSBsbyBtw61uaW1vIG5lY2VzYXJpbyBwYXJhIGhhY2VyIHF1ZSBkaWNoYSBkaXNwb3NpY2nDs24gc2VhIHbDoWxpZGEgeSBleGlnaWJsZS4KCmMuCU5pbmfDum4gdMOpcm1pbm8gbyBkaXNwb3NpY2nDs24gZGUgZXN0YSBMaWNlbmNpYSBzZSBlc3RpbWFyw6EgcmVudW5jaWFkYSB5IG5pbmd1bmEgdmlvbGFjacOzbiBkZSBlbGxhIHNlcsOhIGNvbnNlbnRpZGEgYSBtZW5vcyBxdWUgZXNhIHJlbnVuY2lhIG8gY29uc2VudGltaWVudG8gc2VhIG90b3JnYWRvIHBvciBlc2NyaXRvIHkgZmlybWFkbyBwb3IgbGEgcGFydGUgcXVlIHJlbnVuY2llIG8gY29uc2llbnRhLgoKZC4JRXN0YSBMaWNlbmNpYSByZWZsZWphIGVsIGFjdWVyZG8gcGxlbm8gZW50cmUgbGFzIHBhcnRlcyByZXNwZWN0byBhIGxhIE9icmEgYXF1w60gbGljZW5jaWFkYS4gTm8gaGF5IGFycmVnbG9zLCBhY3VlcmRvcyBvIGRlY2xhcmFjaW9uZXMgcmVzcGVjdG8gYSBsYSBPYnJhIHF1ZSBubyBlc3TDqW4gZXNwZWNpZmljYWRvcyBlbiBlc3RlIGRvY3VtZW50by4gRWwgTGljZW5jaWFudGUgbm8gc2UgdmVyw6EgbGltaXRhZG8gcG9yIG5pbmd1bmEgZGlzcG9zaWNpw7NuIGFkaWNpb25hbCBxdWUgcHVlZGEgc3VyZ2lyIGVuIGFsZ3VuYSBjb211bmljYWNpw7NuIGVtYW5hZGEgZGUgVXN0ZWQuIEVzdGEgTGljZW5jaWEgbm8gcHVlZGUgc2VyIG1vZGlmaWNhZGEgc2luIGVsIGNvbnNlbnRpbWllbnRvIG11dHVvIHBvciBlc2NyaXRvIGRlbCBMaWNlbmNpYW50ZSB5IFVzdGVkLgo=