Desarrollo de una interfaz para simulación de modulaciones digitales utilizando lenguaje de programación python

En este proyecto se desarrolla una interfaz basada en software que permite simular un sistema de modulación de señales utilizando el lenguaje de programación Python, a este se le añaden diferentes pasos para simular la transmisión y recepción de la señal modulada, obteniendo un sistema de comunicaci...

Full description

Autores:
Tipo de recurso:
Trabajo de grado de pregrado
Fecha de publicación:
2021
Institución:
Universidad Distrital Francisco José de Caldas
Repositorio:
RIUD: repositorio U. Distrital
Idioma:
spa
OAI Identifier:
oai:repository.udistrital.edu.co:11349/29127
Acceso en línea:
http://hdl.handle.net/11349/29127
Palabra clave:
Modulación digital
PSK (Phase Shift Keying)
Python
QAM (Quadrature Amplitude Modulation)
Radiocomunicación
Simulación
Tecnología en Electrónica - Tesis y disertaciones académicas
Modulación (Electrónica)
Modulación digital
Python (Lenguaje de programación de computadores)
Teoría de las señales (Telecomunicaciones)
Radiodifusión digital
Digital modulation
PSK (Phase Shift Keying)
Python
QAM (Quadrature Amplitude Modulation)
Radio communication
Simulation
Rights
License
Atribución-NoComercial-SinDerivadas 4.0 Internacional
id UDISTRITA2_f00f7b2118959568a48db6feccf33b2a
oai_identifier_str oai:repository.udistrital.edu.co:11349/29127
network_acronym_str UDISTRITA2
network_name_str RIUD: repositorio U. Distrital
repository_id_str
dc.title.spa.fl_str_mv Desarrollo de una interfaz para simulación de modulaciones digitales utilizando lenguaje de programación python
dc.title.titleenglish.spa.fl_str_mv Development of an interface for simulation of digital modulations using python programming language
title Desarrollo de una interfaz para simulación de modulaciones digitales utilizando lenguaje de programación python
spellingShingle Desarrollo de una interfaz para simulación de modulaciones digitales utilizando lenguaje de programación python
Modulación digital
PSK (Phase Shift Keying)
Python
QAM (Quadrature Amplitude Modulation)
Radiocomunicación
Simulación
Tecnología en Electrónica - Tesis y disertaciones académicas
Modulación (Electrónica)
Modulación digital
Python (Lenguaje de programación de computadores)
Teoría de las señales (Telecomunicaciones)
Radiodifusión digital
Digital modulation
PSK (Phase Shift Keying)
Python
QAM (Quadrature Amplitude Modulation)
Radio communication
Simulation
title_short Desarrollo de una interfaz para simulación de modulaciones digitales utilizando lenguaje de programación python
title_full Desarrollo de una interfaz para simulación de modulaciones digitales utilizando lenguaje de programación python
title_fullStr Desarrollo de una interfaz para simulación de modulaciones digitales utilizando lenguaje de programación python
title_full_unstemmed Desarrollo de una interfaz para simulación de modulaciones digitales utilizando lenguaje de programación python
title_sort Desarrollo de una interfaz para simulación de modulaciones digitales utilizando lenguaje de programación python
dc.contributor.advisor.none.fl_str_mv Pedraza Martínez, Luis Fernando
dc.subject.spa.fl_str_mv Modulación digital
PSK (Phase Shift Keying)
Python
QAM (Quadrature Amplitude Modulation)
Radiocomunicación
Simulación
topic Modulación digital
PSK (Phase Shift Keying)
Python
QAM (Quadrature Amplitude Modulation)
Radiocomunicación
Simulación
Tecnología en Electrónica - Tesis y disertaciones académicas
Modulación (Electrónica)
Modulación digital
Python (Lenguaje de programación de computadores)
Teoría de las señales (Telecomunicaciones)
Radiodifusión digital
Digital modulation
PSK (Phase Shift Keying)
Python
QAM (Quadrature Amplitude Modulation)
Radio communication
Simulation
dc.subject.lemb.spa.fl_str_mv Tecnología en Electrónica - Tesis y disertaciones académicas
Modulación (Electrónica)
Modulación digital
Python (Lenguaje de programación de computadores)
Teoría de las señales (Telecomunicaciones)
Radiodifusión digital
dc.subject.keyword.spa.fl_str_mv Digital modulation
PSK (Phase Shift Keying)
Python
QAM (Quadrature Amplitude Modulation)
Radio communication
Simulation
description En este proyecto se desarrolla una interfaz basada en software que permite simular un sistema de modulación de señales utilizando el lenguaje de programación Python, a este se le añaden diferentes pasos para simular la transmisión y recepción de la señal modulada, obteniendo un sistema de comunicación digital compuesto por las siguientes etapas: acondicionamiento de la señal a modular (en este caso la señal es un vector de tamaño N de números binarios aleatorios), codificación de la información, modulación de la señal, transmisión en un canal (en este caso se utiliza canales de ruido gaussiano blanco con diferente relación de Eb/No) , en la recepción un filtro acoplado al demodulador, y por último un decodificador. El desarrollo del proyecto se realizó con las librerías: NummPy para realizar los procesos matemáticos, SciPy y Commpy para calcular el modelo del modulador y demodulador, también para implementar filtros y añadir la señal modulada al canal de ruido gaussiano blanco. Además, con la librería WxPython se realizó la interfaz de usuario que permite seleccionar el tipo de modulación entre M-PSK Y M-QAM. Así, dentro del menú de cada modulación se permite variar el número de bits a transmitir, el factor de roll off (Este factor indica el porcentaje de ancho de banda que excede la señal de coseno realzado con respecto a el ancho de banda que ocuparía el pulso rectangular por referenciar) para los filtros, seleccionar el número de símbolos de la modulación (M-PSK y M-QAM) y por último con la librería Matplotlib se grafican las diferentes señales, como la señal binaria en transmisión y recepción, la señal modulada, la influencia de la señal de ruido gaussiano blanco en la señal modulada, filtros, diagramas de constelación en transmisión y recepción, la gráfica de la BER (Tasa de Error por Bit) vs Eb/No (Energía por bit / densidad espectral de potencia de ruido), y la comparación de la información binaria en el transmisor con la información binaria en el receptor.
publishDate 2021
dc.date.created.none.fl_str_mv 2021-06-24
dc.date.accessioned.none.fl_str_mv 2022-05-25T21:10:05Z
dc.date.available.none.fl_str_mv 2022-05-25T21:10:05Z
dc.type.degree.spa.fl_str_mv Monografía
dc.type.driver.spa.fl_str_mv info:eu-repo/semantics/bachelorThesis
dc.type.coar.spa.fl_str_mv http://purl.org/coar/resource_type/c_7a1f
format http://purl.org/coar/resource_type/c_7a1f
dc.identifier.uri.none.fl_str_mv http://hdl.handle.net/11349/29127
url http://hdl.handle.net/11349/29127
dc.language.iso.spa.fl_str_mv spa
language spa
dc.rights.*.fl_str_mv Atribución-NoComercial-SinDerivadas 4.0 Internacional
dc.rights.coar.fl_str_mv http://purl.org/coar/access_right/c_abf2
dc.rights.uri.*.fl_str_mv http://creativecommons.org/licenses/by-nc-nd/4.0/
dc.rights.acceso.spa.fl_str_mv Abierto (Texto Completo)
rights_invalid_str_mv Atribución-NoComercial-SinDerivadas 4.0 Internacional
http://creativecommons.org/licenses/by-nc-nd/4.0/
Abierto (Texto Completo)
http://purl.org/coar/access_right/c_abf2
dc.format.mimetype.spa.fl_str_mv pdf
institution Universidad Distrital Francisco José de Caldas
bitstream.url.fl_str_mv http://repository.udistrital.edu.co/bitstream/11349/29127/4/license_rdf
http://repository.udistrital.edu.co/bitstream/11349/29127/5/GarciaRiveraCristianCamiloGerenaMerchanCarlosJose2021.pdf
http://repository.udistrital.edu.co/bitstream/11349/29127/7/GarciaRiveraCristianCamiloGerenaMerchanCarlosJoseAnexo1.pdf
http://repository.udistrital.edu.co/bitstream/11349/29127/6/GarciaRiveraCristianCamiloGerenaMerchanCarlosJoseLICENCIAFIRMADA.pdf
http://repository.udistrital.edu.co/bitstream/11349/29127/8/license.txt
http://repository.udistrital.edu.co/bitstream/11349/29127/9/GarciaRiveraCristianCamiloGerenaMerchanCarlosJose2021.pdf.jpg
http://repository.udistrital.edu.co/bitstream/11349/29127/10/GarciaRiveraCristianCamiloGerenaMerchanCarlosJoseAnexo1.pdf.jpg
http://repository.udistrital.edu.co/bitstream/11349/29127/11/GarciaRiveraCristianCamiloGerenaMerchanCarlosJoseLICENCIAFIRMADA.pdf.jpg
bitstream.checksum.fl_str_mv 217700a34da79ed616c2feb68d4c5e06
5c2f6f44aad2edad1c6d20a5944b1e85
e8edc216e754344ece01853880b58f2e
6ab4c4f1c7007ae4b96bb9c97fb2edff
997daf6c648c962d566d7b082dac908d
cf44ce8cbb9a768ce4c8f10a549fc8fb
3e07a0a3f971ca246a2d347116a07aa6
327d6e4507f9dfae6bb868f18c82f5c0
bitstream.checksumAlgorithm.fl_str_mv MD5
MD5
MD5
MD5
MD5
MD5
MD5
MD5
repository.name.fl_str_mv Repositorio Institucional Universidad Distrital - RIUD
repository.mail.fl_str_mv repositorio@udistrital.edu.co
_version_ 1814111129408897024
spelling Pedraza Martínez, Luis FernandoGerena Merchán, Carlos JoséGarcía Rivera, Cristian Camilo2022-05-25T21:10:05Z2022-05-25T21:10:05Z2021-06-24http://hdl.handle.net/11349/29127En este proyecto se desarrolla una interfaz basada en software que permite simular un sistema de modulación de señales utilizando el lenguaje de programación Python, a este se le añaden diferentes pasos para simular la transmisión y recepción de la señal modulada, obteniendo un sistema de comunicación digital compuesto por las siguientes etapas: acondicionamiento de la señal a modular (en este caso la señal es un vector de tamaño N de números binarios aleatorios), codificación de la información, modulación de la señal, transmisión en un canal (en este caso se utiliza canales de ruido gaussiano blanco con diferente relación de Eb/No) , en la recepción un filtro acoplado al demodulador, y por último un decodificador. El desarrollo del proyecto se realizó con las librerías: NummPy para realizar los procesos matemáticos, SciPy y Commpy para calcular el modelo del modulador y demodulador, también para implementar filtros y añadir la señal modulada al canal de ruido gaussiano blanco. Además, con la librería WxPython se realizó la interfaz de usuario que permite seleccionar el tipo de modulación entre M-PSK Y M-QAM. Así, dentro del menú de cada modulación se permite variar el número de bits a transmitir, el factor de roll off (Este factor indica el porcentaje de ancho de banda que excede la señal de coseno realzado con respecto a el ancho de banda que ocuparía el pulso rectangular por referenciar) para los filtros, seleccionar el número de símbolos de la modulación (M-PSK y M-QAM) y por último con la librería Matplotlib se grafican las diferentes señales, como la señal binaria en transmisión y recepción, la señal modulada, la influencia de la señal de ruido gaussiano blanco en la señal modulada, filtros, diagramas de constelación en transmisión y recepción, la gráfica de la BER (Tasa de Error por Bit) vs Eb/No (Energía por bit / densidad espectral de potencia de ruido), y la comparación de la información binaria en el transmisor con la información binaria en el receptor.In this project a software-based interface is developed to simulate a signal modulation system using the Python programming language, to which different steps are added to simulate the transmission and reception of the modulated signal, obtaining a telecommunication system composed of the following stages: conditioning of the signal to be modulated (in this case the signal is a vector of size N of random binary numbers), information coding, signal modulation, transmission in a channel (in this case white Gaussian noise channels with different Eb/No ratio are used), in reception a filter coupled to the demodulator, and finally a decoder. The reception, a filter coupled to the demodulator, and finally a decoder. The development of the project was done with the libraries: NummPy to perform the mathematical processes, SciPy and Commpy to calculate the model of the modulator and demodulator, also to implement filters and add the modulated signal to the white Gaussian noise channel. In addition, the WxPython library was used to create the user interface that allows selecting the modulation type between M-PSK, GMSK and M-QAM. Thus, within the menu of each modulation it is possible to vary the number of bits to transmit, the roll off factor for the filters, select the number of symbols of the modulation (M-PSK and M-QAM) and finally with the Matplotlib library the different graphs are plotted, such as the binary signal in transmission and reception, the modulated signal, the influence of the white Gaussian noise channel on the signal, filters, constellation diagrams in transmission and reception, the BER (Bit Error Rate) vs Eb/No (Energy per bit / noise power spectral density) plot, and the comparison of the binary information at the transmitter with the binary information at the receiver.pdfspaAtribución-NoComercial-SinDerivadas 4.0 Internacionalhttp://creativecommons.org/licenses/by-nc-nd/4.0/Abierto (Texto Completo)http://purl.org/coar/access_right/c_abf2Modulación digitalPSK (Phase Shift Keying)PythonQAM (Quadrature Amplitude Modulation)RadiocomunicaciónSimulaciónTecnología en Electrónica - Tesis y disertaciones académicasModulación (Electrónica)Modulación digitalPython (Lenguaje de programación de computadores)Teoría de las señales (Telecomunicaciones)Radiodifusión digitalDigital modulationPSK (Phase Shift Keying)PythonQAM (Quadrature Amplitude Modulation)Radio communicationSimulationDesarrollo de una interfaz para simulación de modulaciones digitales utilizando lenguaje de programación pythonDevelopment of an interface for simulation of digital modulations using python programming languageMonografíainfo:eu-repo/semantics/bachelorThesishttp://purl.org/coar/resource_type/c_7a1fCC-LICENSElicense_rdflicense_rdfapplication/rdf+xml; charset=utf-8811http://repository.udistrital.edu.co/bitstream/11349/29127/4/license_rdf217700a34da79ed616c2feb68d4c5e06MD54open accessORIGINALGarciaRiveraCristianCamiloGerenaMerchanCarlosJose2021.pdfGarciaRiveraCristianCamiloGerenaMerchanCarlosJose2021.pdfapplication/pdf1509521http://repository.udistrital.edu.co/bitstream/11349/29127/5/GarciaRiveraCristianCamiloGerenaMerchanCarlosJose2021.pdf5c2f6f44aad2edad1c6d20a5944b1e85MD55open accessGarciaRiveraCristianCamiloGerenaMerchanCarlosJoseAnexo1.pdfGarciaRiveraCristianCamiloGerenaMerchanCarlosJoseAnexo1.pdfapplication/pdf22174http://repository.udistrital.edu.co/bitstream/11349/29127/7/GarciaRiveraCristianCamiloGerenaMerchanCarlosJoseAnexo1.pdfe8edc216e754344ece01853880b58f2eMD57open accessGarciaRiveraCristianCamiloGerenaMerchanCarlosJoseLICENCIAFIRMADA.pdfGarciaRiveraCristianCamiloGerenaMerchanCarlosJoseLICENCIAFIRMADA.pdfapplication/pdf388349http://repository.udistrital.edu.co/bitstream/11349/29127/6/GarciaRiveraCristianCamiloGerenaMerchanCarlosJoseLICENCIAFIRMADA.pdf6ab4c4f1c7007ae4b96bb9c97fb2edffMD56metadata only accessLICENSElicense.txtlicense.txttext/plain; charset=utf-87167http://repository.udistrital.edu.co/bitstream/11349/29127/8/license.txt997daf6c648c962d566d7b082dac908dMD58open accessTHUMBNAILGarciaRiveraCristianCamiloGerenaMerchanCarlosJose2021.pdf.jpgGarciaRiveraCristianCamiloGerenaMerchanCarlosJose2021.pdf.jpgIM Thumbnailimage/jpeg15093http://repository.udistrital.edu.co/bitstream/11349/29127/9/GarciaRiveraCristianCamiloGerenaMerchanCarlosJose2021.pdf.jpgcf44ce8cbb9a768ce4c8f10a549fc8fbMD59open accessGarciaRiveraCristianCamiloGerenaMerchanCarlosJoseAnexo1.pdf.jpgGarciaRiveraCristianCamiloGerenaMerchanCarlosJoseAnexo1.pdf.jpgIM Thumbnailimage/jpeg10650http://repository.udistrital.edu.co/bitstream/11349/29127/10/GarciaRiveraCristianCamiloGerenaMerchanCarlosJoseAnexo1.pdf.jpg3e07a0a3f971ca246a2d347116a07aa6MD510open accessGarciaRiveraCristianCamiloGerenaMerchanCarlosJoseLICENCIAFIRMADA.pdf.jpgGarciaRiveraCristianCamiloGerenaMerchanCarlosJoseLICENCIAFIRMADA.pdf.jpgIM Thumbnailimage/jpeg13147http://repository.udistrital.edu.co/bitstream/11349/29127/11/GarciaRiveraCristianCamiloGerenaMerchanCarlosJoseLICENCIAFIRMADA.pdf.jpg327d6e4507f9dfae6bb868f18c82f5c0MD511open access11349/29127oai:repository.udistrital.edu.co:11349/291272023-06-09 16:46:01.11open accessRepositorio Institucional Universidad Distrital - RIUDrepositorio@udistrital.edu.coTElDRU5DSUEgWSBBVVRPUklaQUNJw5NOIEVTUEVDSUFMIFBBUkEgUFVCTElDQVIgWSBQRVJNSVRJUiBMQSBDT05TVUxUQSBZIFVTTyBERSBDT05URU5JRE9TIEVOIEVMIFJFUE9TSVRPUklPIElOU1RJVFVDSU9OQUwgREUgTEEgVU5JVkVSU0lEQUQgRElTVFJJVEFMCgpUw6lybWlub3MgeSBjb25kaWNpb25lcyBkZSB1c28gcGFyYSBwdWJsaWNhY2nDs24gZGUgb2JyYXMgZW4gZWwgUmVwb3NpdG9yaW8gSW5zdGl0dWNpb25hbCBkZSBsYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcyAoUklVRCkKCkNvbW8gdGl0dWxhcihlcykgZGVsKG9zKSBkZXJlY2hvKHMpIGRlIGF1dG9yLCBjb25maWVybyAoZXJpbW9zKSBhIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzIChlbiBhZGVsYW50ZSwgTEEgVU5JVkVSU0lEQUQpIHVuYSBsaWNlbmNpYSBwYXJhIHVzbyBubyBleGNsdXNpdmEsIGxpbWl0YWRhIHkgZ3JhdHVpdGEgc29icmUgbGEgb2JyYSBxdWUgaW50ZWdyYXLDoSBlbCBSZXBvc2l0b3JpbyBJbnN0aXR1Y2lvbmFsIChlbiBhZGVsYW50ZSwgUklVRCksIGRlIGFjdWVyZG8gYSBsYXMgc2lndWllbnRlcyByZWdsYXMsIGxhcyBjdWFsZXMgZGVjbGFybyAoYW1vcykgY29ub2NlciB5IGFjZXB0YXI6CgphKQlFc3RhcsOhIHZpZ2VudGUgYSBwYXJ0aXIgZGUgbGEgZmVjaGEgZW4gcXVlIHNlIGluY2x1eWEgZW4gZWwgUklVRCB5IGhhc3RhIHBvciB1biBwbGF6byBkZSBkaWV6ICgxMCkgQcOxb3MsIHByb3Jyb2dhYmxlIGluZGVmaW5pZGFtZW50ZSBwb3IgZWwgdGllbXBvIHF1ZSBkdXJlIGVsIGRlcmVjaG8gUGF0cmltb25pYWwgZGVsIGF1dG9yOyBsYSBjdWFsIHBvZHLDoSBkYXJzZSBwb3IgdGVybWluYWRhIHByZXZpYSBzb2xpY2l0dWQgYSBMQSBVTklWRVJTSURBRCBwb3IgZXNjcml0byBjb24gdW5hIGFudGVsYWNpw7NuIGRlIGRvcyAoMikgbWVzZXMgYW50ZXMgZGVsIHZlbmNpbWllbnRvIGRlbCBwbGF6byBpbmljaWFsIG8gZWwgZGUgc3UocykgcHLDs3Jyb2dhKHMpLgoKYikJTEEgVU5JVkVSU0lEQUQgcG9kcsOhIHB1YmxpY2FyIGxhIG9icmEgZW4gbGFzIGRpc3RpbnRhcyB2ZXJzaW9uZXMgcmVxdWVyaWRhcyBwb3IgZWwgUklVRCAoZGlnaXRhbCwgaW1wcmVzbywgZWxlY3Ryw7NuaWNvIHUgb3RybyBtZWRpbyBjb25vY2lkbyBvIHBvciBjb25vY2VyKSBMQSBVTklWRVJTSURBRCBubyBzZXLDoSByZXNwb25zYWJsZSBlbiBlbCBldmVudG8gcXVlIGVsIGRvY3VtZW50byBhcGFyZXpjYSByZWZlcmVuY2lhZG8gZW4gbW90b3JlcyBkZSBiw7pzcXVlZGEgbyByZXBvc2l0b3Jpb3MgZGlmZXJlbnRlcyBhbCBSSVVELCB1bmEgdmV6IGVsKG9zKSBhdXRvcihlcykgc29saWNpdGVuIHN1IGVsaW1pbmFjacOzbiBkZWwgUklVRCwgZGFkbyBxdWUgbGEgbWlzbWEgc2Vyw6EgcHVibGljYWRhIGVuIEludGVybmV0LgoKYykJTGEgYXV0b3JpemFjacOzbiBzZSBoYWNlIGEgdMOtdHVsbyBncmF0dWl0bywgcG9yIGxvIHRhbnRvLCBsb3MgYXV0b3JlcyByZW51bmNpYW4gYSByZWNpYmlyIGJlbmVmaWNpbyBhbGd1bm8gcG9yIGxhIHB1YmxpY2FjacOzbiwgZGlzdHJpYnVjacOzbiwgY29tdW5pY2FjacOzbiBww7pibGljYSB5IGN1YWxxdWllciBvdHJvIHVzbyBxdWUgc2UgaGFnYSBlbiBsb3MgdMOpcm1pbm9zIGRlIGxhIHByZXNlbnRlIGxpY2VuY2lhIHkgZGUgbGEgbGljZW5jaWEgZGUgdXNvIGNvbiBxdWUgc2UgcHVibGljYSAoQ3JlYXRpdmUgQ29tbW9ucykuCgpkKQlMb3MgY29udGVuaWRvcyBwdWJsaWNhZG9zIGVuIGVsIFJJVUQgc29uIG9icmEocykgb3JpZ2luYWwoZXMpIHNvYnJlIGxhIGN1YWwoZXMpIGVsKG9zKSBhdXRvcihlcykgY29tbyB0aXR1bGFyZXMgZGUgbG9zIGRlcmVjaG9zIGRlIGF1dG9yLCBhc3VtZW4gdG90YWwgcmVzcG9uc2FiaWxpZGFkIHBvciBlbCBjb250ZW5pZG8gZGUgc3Ugb2JyYSBhbnRlIExBIFVOSVZFUlNJREFEIHkgYW50ZSB0ZXJjZXJvcy4gRW4gdG9kbyBjYXNvIExBIFVOSVZFUlNJREFEIHNlIGNvbXByb21ldGUgYSBpbmRpY2FyIHNpZW1wcmUgbGEgYXV0b3LDrWEgaW5jbHV5ZW5kbyBlbCBub21icmUgZGVsIGF1dG9yIHkgbGEgZmVjaGEgZGUgcHVibGljYWNpw7NuLgoKZSkJTEEgVU5JVkVSU0lEQUQgcG9kcsOhIGluY2x1aXIgbGEgb2JyYSBlbiBsb3Mgw61uZGljZXMgeSBidXNjYWRvcmVzIHF1ZSBlc3RpbWVuIG5lY2VzYXJpb3MgcGFyYSBtYXhpbWl6YXIgbGEgdmlzaWJpbGlkYWQgZWwgdXNvIHkgZWwgaW1wYWN0byBkZSBsYSBwcm9kdWNjacOzbiBjaWVudMOtZmljYSwgYXJ0w61zdGljYSB5IGFjYWTDqW1pY2EgZW4gbGEgY29tdW5pZGFkIGxvY2FsLCBuYWNpb25hbCBvIGludGVybmFjaW9uYWwuCgoKZikJTEEgVU5JVkVSU0lEQUQgcG9kcsOhIGNvbnZlcnRpciBsYSBvYnJhIGEgY3VhbHF1aWVyIG1lZGlvIG8gZm9ybWF0byBjb24gZWwgZmluIGRlIHN1IHByZXNlcnZhY2nDs24gZW4gZWwgdGllbXBvIHF1ZSBsYSBwcmVzZW50ZSBsaWNlbmNpYSB5IGxhIGRlIHN1cyBwcsOzcnJvZ2FzLgoKCkNvbiBiYXNlIGVuIGxvIGFudGVyaW9yIGF1dG9yaXpvKGFtb3MpLCBhIGZhdm9yIGRlbCBSSVVEIHkgZGUgc3VzIHVzdWFyaW9zLCBsYSBwdWJsaWNhY2nDs24geSBjb25zdWx0YSBkZSBsYSBzaWd1aWVudGUgb2JyYToKClRpdHVsbwoKQXV0b3IgICAgICAgQXBlbGxpZG9zICAgICAgICAgTm9tYnJlcwoKMQoKMgoKMwoKCmcpCUF1dG9yaXpvKGFtb3MpLCBxdWUgbGEgb2JyYSBzZWEgcHVlc3RhIGEgZGlzcG9zaWNpw7NuIGRlbCBww7pibGljbyBlbiBsb3MgdMOpcm1pbm9zIGVzdGFibGVjaWRvcyBlbiBsb3MgbGl0ZXJhbGVzIGFudGVyaW9yZXMsIGJham8gbG9zIGzDrW1pdGVzIGRlZmluaWRvcyBwb3IgTEEgVU5JVkVSU0lEQUQsIGVuIGxhcyDigJxDb25kaWNpb25lcyBkZSB1c28gZGUgZXN0cmljdG8gY3VtcGxpbWllbnRv4oCdIGRlIGxvcyByZWN1cnNvcyBwdWJsaWNhZG9zIGVuIGVsIFJJVUQsIGN1eW8gdGV4dG8gY29tcGxldG8gc2UgcHVlZGUgY29uc3VsdGFyIGVuIGh0dHA6Ly9yZXBvc2l0b3J5LnVkaXN0cml0YWwuZWR1LmNvLwoKaCkJQ29ub3pjbyhjZW1vcykgeSBhY2VwdG8oYW1vcykgcXVlIG90b3JnbyhhbW9zKSB1bmEgbGljZW5jaWEgZXNwZWNpYWwgcGFyYSBwdWJsaWNhY2nDs24gZGUgb2JyYXMgZW4gZWwgUmVwb3NpdG9yaW8gSW5zdGl0dWNpb25hbCBkZSBsYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcywgbGljZW5jaWEgICBkZSBsYSBjdWFsIGhlIChoZW1vcykgb2J0ZW5pZG8gdW5hIGNvcGlhLgoKaSkJTWFuaWZpZXN0byhhbW9zKSBtaSAobnVlc3RybykgdG90YWwgYWN1ZXJkbyBjb24gbGFzIGNvbmRpY2lvbmVzIGRlIHVzbyB5IHB1YmxpY2FjacOzbiBlbiBlbCBSZXBvc2l0b3JpbyBJbnN0aXR1Y2lvbmFsIGRlIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzIHF1ZSBzZSBkZXNjcmliZW4geSBleHBsaWNhbiBlbiBlbCBwcmVzZW50ZSBkb2N1bWVudG8uCgpqKQlDb25vemNvKGNlbW9zKSBsYSBub3JtYXRpdmlkYWQgaW50ZXJuYSBkZSAgTEEgVU5JVkVSU0lEQUQ7IGVuIGNvbmNyZXRvLCBlbCBBY3VlcmRvIDAwNCBkZSAyMDEyIGRlbCBDU1UsIEFjdWVyZG8gMDIzIGRlIDIwMTIgZGVsIENTVSBzb2JyZSBQb2zDrXRpY2EgRWRpdG9yaWFsLCBBY3VlcmRvIDAyNiAgZGVsIDMxIGRlIGp1bGlvIGRlIDIwMTIgc29icmUgZWwgcHJvY2VkaW1pZW50byBwYXJhIGxhIHB1YmxpY2FjacOzbiBkZSB0ZXNpcyBkZSBwb3N0Z3JhZG8gZGUgbG9zIGVzdHVkaWFudGVzIGRlIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzLCAgQWN1ZXJkbyAwMzAgZGVsIDAzIGRlIGRpY2llbWJyZSBkZSAyMDEzIHBvciBtZWRpbyBkZWwgY3VhbCBzZSBjcmVhIGVsIFJlcG9zaXRvcmlvIEluc3RpdHVjaW9uYWwgZGUgbGEgVW5pdmVyc2lkYWQgRGlzdHJpdGFsIEZyYW5jaXNjbyBKb3PDqSBkZSBDYWxkYXMsIEFjdWVyZG8gMDM4IGRlIDIwMTUgMjAxNSDigJxwb3IgZWwgY3VhbCBzZSBtb2RpZmljYSBlbCBBY3VlcmRvIDAzMSBkZSAyMDE0IGRlIDIwMTQgcXVlIHJlZ2xhbWVudGEgZWwgdHJhYmFqbyBkZSBncmFkbyBwYXJhIGxvcyBlc3R1ZGlhbnRlcyBkZSBwcmVncmFkbyBkZSBsYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcyB5IHNlIGRpY3RhbiBvdHJhcyBkaXJlY3RyaWNlc+KAnSB5IGxhcyBkZW3DoXMgbm9ybWFzIGNvbmNvcmRhbnRlIHkgY29tcGxlbWVudGFyaWFzIHF1ZSByaWdlbiBhbCByZXNwZWN0bywgZXNwZWNpYWxtZW50ZSBsYSBsZXkgMjMgZGUgMTk4MiwgbGEgbGV5IDQ0IGRlIDE5OTMgeSBsYSBkZWNpc2nDs24gQW5kaW5hIDM1MSBkZSAxOTkzLiBFc3RvcyBkb2N1bWVudG9zIHBvZHLDoW4gc2VyIGNvbnN1bHRhZG9zIHkgZGVzY2FyZ2Fkb3MgZW4gZWwgcG9ydGFsIHdlYiBkZSBsYSBiaWJsaW90ZWNhIGh0dHA6Ly9zaXN0ZW1hZGViaWJsaW90ZWNhcy51ZGlzdHJpdGFsLmVkdS5jby8KCmspCUFjZXB0byhhbW9zKSBxdWUgTEEgVU5JVkVSU0lEQUQgbm8gc2UgcmVzcG9uc2FiaWxpemEgcG9yIGxhcyBpbmZyYWNjaW9uZXMgYSBsYSBwcm9waWVkYWQgaW50ZWxlY3R1YWwgbyBEZXJlY2hvcyBkZSBBdXRvciBjYXVzYWRhcyBwb3IgbG9zIHRpdHVsYXJlcyBkZSBsYSBwcmVzZW50ZSBMaWNlbmNpYSB5IGRlY2xhcmFtb3MgcXVlIG1hbnRlbmRyw6kgKGVtb3MpIGluZGVtbmUgYSBMQSBVTklWRVJTSURBRCBwb3IgbGFzIHJlY2xhbWFjaW9uZXMgbGVnYWxlcyBkZSBjdWFscXVpZXIgdGlwbyBxdWUgbGxlZ2FyZW4gYSBwcmVzZW50YXJzZSBwb3IgdmlvbGFjacOzbiBkZSBkZXJlY2hvcyBhIGxhIHByb3BpZWRhZCBpbnRlbGVjdHVhbCBvIGRlIEF1dG9yIHJlbGFjaW9uYWRvcyBjb24gbG9zIGRvY3VtZW50b3MgcmVnaXN0cmFkb3MgZW4gZWwgUklVRC4KCmwpCUVsIChsb3MpIGF1dG9yKGVzKSBtYW5pZmllc3RhKG1vcykgcXVlIGxhIG9icmEgb2JqZXRvIGRlIGxhIHByZXNlbnRlIGF1dG9yaXphY2nDs24gZXMgb3JpZ2luYWwsIGRlIGV4Y2x1c2l2YSBhdXRvcsOtYSwgeSBzZSByZWFsaXrDsyBzaW4gdmlvbGFyIG8gdXN1cnBhciBkZXJlY2hvcyBkZSBhdXRvciBkZSB0ZXJjZXJvczsgZGUgdGFsIHN1ZXJ0ZSwgZW4gY2FzbyBkZSBwcmVzZW50YXJzZSBjdWFscXVpZXIgcmVjbGFtYWNpw7NuIG8gYWNjacOzbiBwb3IgcGFydGUgZGUgdW4gdGVyY2VybyBlbiBjdWFudG8gYSBsb3MgZGVyZWNob3MgZGUgYXV0b3Igc29icmUgbGEgb2JyYSwgZWwgKGxvcykgZXN0dWRpYW50ZShzKSDigJMgYXV0b3IoZXMpIGFzdW1pcsOhKG4pIHRvZGEgbGEgcmVzcG9uc2FiaWxpZGFkIHkgc2FsZHLDoShuKSBlbiBkZWZlbnNhIGRlIGxvcyBkZXJlY2hvcyBhcXXDrSBhdXRvcml6YWRvcy4gUGFyYSB0b2RvcyBsb3MgZWZlY3RvcywgTEEgVU5JVkVSU0lEQUQgYWN0w7phIGNvbW8gdW4gdGVyY2VybyBkZSBidWVuYSBmZS4KCgptKQlFbCAobG9zKSBhdXRvcihlcykgbWFuaWZpZXN0YShtb3MpIHF1ZSBjb25vemNvKGNlbW9zKSBsYSBhdXRvbm9tw61hIHkgbG9zIGRlcmVjaG9zLCBxdWUgcG9zZWUobW9zKSBzb2JyZSBsYSBvYnJhIHksIGNvbW8gdGFsLCBlcyAoc29tb3MpIHJlc3BvbnNhYmxlKHMpIGRlbCBhbGNhbmNlIGp1csOtZGljbyB5IGxlZ2FsLCBkZSBlc2NvZ2VyIGxhIG9wY2nDs24gZGUgbGEgcHVibGljYWNpw7NuIG8gZGUgcmVzdHJpY2Npw7NuIGRlIGxhIHB1YmxpY2FjacOzbiBkZWwgZG9jdW1lbnRvIHJlZ2lzdHJhZG8gZW4gZWwgUklVRC4KCgoKCgoKU0kgRUwgRE9DVU1FTlRPIFNFIEJBU0EgRU4gVU4gVFJBQkFKTyBRVUUgSEEgU0lETyBQQVRST0NJTkFETyBPIEFQT1lBRE8gUE9SIFVOQSBBR0VOQ0lBIE8gVU5BIE9SR0FOSVpBQ0nDk04sIENPTiBFWENFUENJw5NOIERFIExBIFVOSVZFUlNJREFEIERJU1RSSVRBTCBGUkFOQ0lTQ08gSk9TRSBERSBDQUxEQVMsIExPUyBBVVRPUkVTIEdBUkFOVElaQU4gUVVFIFNFIEhBIENVTVBMSURPIENPTiBMT1MKREVSRUNIT1MgWSBPQkxJR0FDSU9ORVMgUkVRVUVSSURPUyBQT1IgRUwgUkVTUEVDVElWTyBDT05UUkFUTyBPIEFDVUVSRE8uCgoKCgoKCgoKCgoKCgoKCgoKCgoKCkVuIGNvbnN0YW5jaWEgZGUgbG8gYW50ZXJpb3IsIGZpcm1vKGFtb3MpIGVsIHByZXNlbnRlIGRvY3VtZW50bywgZW4gbGEgY2l1ZGFkIGRlIEJvZ290w6EsIEQuQy4sIGEgbG9zCgoKRklSTUEgREUgTE9TIFRJVFVMQVJFUyBERSBERVJFQ0hPUyBERSBBVVRPUgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fICAgQy5DLiBOby4gX19fX19fX19fX19fX19fX19fCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gICBDLkMuIE5vLiBfX19fX19fX19fX19fX19fX18KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyAgIEMuQy4gTm8uIF9fX19fX19fX19fX19fX19fXwoKCgpDb3JyZW8gRWxlY3Ryw7NuaWNvIEluc3RpdHVjaW9uYWwgZGVsIChkZSBsb3MpIEF1dG9yKGVzKToKCkF1dG9yCSAgICAgIENvcnJlbyBFbGVjdHLDs25pY28KCjEKCjIKCjMKCk5vbWJyZSBkZSBEaXJlY3RvcihlcykgZGUgR3JhZG86CgoxCgoyCgozCgpOb21icmUgRmFjdWx0YWQgeSBQcm95ZWN0byBDdXJyaWN1bGFyOgoKRmFjdWx0YWQJUHJveWVjdG8gQ3VycmljdWxhcgoKCgoKCgoKCk5vdGE6IEVuIGNhc28gcXVlIG5vIGVzdMOpIGRlIGFjdWVyZG8gY29uIGxhcyBjb25kaWNpb25lcyBkZSBsYSBwcmVzZW50ZSBsaWNlbmNpYSwgeSBtYW5pZmllc3RlIGFsZ3VuYSByZXN0cmljY2nDs24gc29icmUgbGEgb2JyYSwganVzdGlmaXF1ZSBsb3MgbW90aXZvcyBwb3IgbG9zIGN1YWxlcyBlbCBkb2N1bWVudG8geSBzdXMgYW5leG9zIG5vIHB1ZWRlbiBzZXIgcHVibGljYWRvcyBlbiBlbCBSZXBvc2l0b3JpbyBJbnN0aXR1Y2lvbmFsIGRlIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzIFJJVUQuCgoKU2kgcmVxdWllcmUgbcOhcyBlc3BhY2lvLCBwdWVkZSBhbmV4YXIgdW5hIGNvcGlhIHNpbWlsYXIgYSBlc3RhIGhvamEK