Trabajo elaborado para la asignatura “Programación y manejo de datos en la era del Big Data” de la Universitat de València durante el curso 2020-2021. El repo del trabajo está aquí. La página web de la asignatura y los trabajos de mis compañeros pueden verse aquí.


1. Introducción

El objetivo de este análisis es resaltar/esclarecer la evolución y efectos de las distintas fuentes de energía que se han utilizado a nivel munidal a lo largo de los últimos 30 años y el impacto medioambiental de estas. La motivación de este trabajo surge de la necesidad de conocer y comprender la situación actual y las posibilidades futuras en cuanto a energías renovables que nos permitan fundamentar nuestra economía de una manera más eficiente y respetuosa con el medioambiente. las variables que se tendrán en cuenta son: evolución de emisiones de co2 por causa de la generación de energía eléctrica, evolución del uso de energías renovables y no renovables, acceso de la población a la eléctricidad.

2. Datos

la principal fuente de datos ha sido la web del banco mundial, a partir de la cual he descargado documentos excel en donde se incluyen variables relacionadas con el medio ambiente en el apartado Indicadores del desarrollo mundial (IDM), los cuales constituyen la principal colección de indicadores del desarrollo del Banco Mundial, compilados a partir de fuentes internacionales reconocidas oficialmente. La serie presenta datos actuales y precisos disponibles sobre el desarrollo mundial. además algunos de estos datos han sido obtenidos de la Agencia Internacional de la Energía (AIE) a tráves de estadísticas propias y de la Organización para la Cooperación y el Desarrollo Económico (OCDE).

link a la página del banco de datos del Banco Mundial

Link a la página de la AIE

logotipo banco mundial

logotipo AIE

2.1. Procesando los datos

Se ha realizado una limpieza y organización de los datos. para ello he eliminado las columnas y filas que no tenian relevancia o no disponian de datos (NA´s), después los he reorganizado utilizando las funciones de dplyr (pivot_longer) y he renombrado algunas variables para facilitar el trabajo posterior (rename).

3. Gráficos y tablas

3.1 Emisiones de CO2

El dióxido de carbono o CO2 es uno de los principales gases de efecto invernadero junto con el óxido nitroso (N2O) y el metano (CH4). Es un gas imprescindible para la vida en el planeta, pero con la llegada y auge de la Revolución Industrial su concentración en la atmósfera empezó a dispararse y la tendencia no se ha detenido desde entonces. Hace ya 200 años, al inicio del proceso de industrialización, la atmósfera contabilizaba aproximadamente 250 partes de dióxido de carbono por millón (ppm). En 2019, se registró la cifra récord de 415,39 ppm. A finales de los años 90, el Protocolo de Kioto ya manifestó la necesidad de luchar contra esta situación pero las cifras actuales nos exigen actuar con urgencia.

estracto texto del articulo sobre la transición energética de la web REd eléctrica de ESpaña.

A continuación, se expone un gráfico que muestra la evolución de las emisiones mundiales de Co2 a consecuencia de la producción energética a lo largo de los últimos 30 años. En ella podemos observar como desde 1990 estas emisiones han tenido un crecimiento exponencial llegando a constituir apróximadamente el 50% del total de emisiones mundiales en 2011.

3.2 Población con acceso a la eléctricidad

tabla dinámica En esta tabla dinámica se pueden realizar búsquedas de los pocertajes de población con acceso a la eléctricidad para cada país y año, desde 1990 hasta 2015.

En este apartado se comparan dos gráficos, uno con datos de 1990 y otro de 2015, en ellos se aprecia el número de países que brindan acceso a la eléctricidad a un mismo porcentaje de su población, (por ejemplo, en 1990, 80 países brindaban acceso a la eléctricidad al 100% de su población).

se puede observar como todas las cantidades han aumentado para el año 2015, tanto las proporciones de población en cada país con acceso a la electricidad , como el número total de países que brinda acceso a la misma.

En concreto, en en 1990, solo 80 países brindaban acceso a la eléctricidad al 100% de su población, mientras que en 2015, unos 139 países ya daban acceso al 100%, algo que se puede considerar un aumento importante teniendo en cuenta la evolución historica del uso de la eléctricidad.

En los gráficos también se refleja el aumento de páises que están empezando a brindar acceso a la eléctricidad, pues si se observa el número de países que brindaban acceso a porcentajes reducidos de su población en 2015, se puede apreciar una gran diferencia con respecto a 1990.

En conclusión podemos afirmar que el acceso de la población a la electricidad está en aumento y es muy probable que así lo siga haciendo.

3.3 Producción de energía eléctrica renovable y no renovable

entendiendo por fuentes de eléctricidad no renovable a los insumos que se utilizan para generar electricidad como son: El petróleo, el cual se refiere al crudo y a los derivados. El gas, se refiere al gas natural pero excluye los líquidos de gas natural. El carbón, se refiere a todos los tipos de carbón y combustibles derivados. La turba también se incluye en esta categoría.En cuanto a las energías renovables estos datos recogen todo tipo de energías renovables, entre ellas la solar, eólica, hidraulica, etc.

A continuación se muestran gráficos que representan la evolución mundial del agregado de la producción de estas fuentes de energía. En ellas podemos observar como el uso de las energías no renovables, si bien han tenido una tendencia creciente en la década 1996-2006, llegando a constituir el 67% del total de la producción mundial en 2006, se puede observar también que esta tendencia, es decir su uso, se ha transformado en descendente en los últimos años, reduciéndose a un 65%, esto se puede explicar, o entender, observando la evolución de la producción de energía por medio de fuentes renovables, la cual, como se puede observar en el gráfico, ha tenido un aumento exponencial en la última década, pasando de constituir un 17% de la producción total mundial en 2002, a conseguir un 23% en 2015.

4. Conclusión

Si bien el uso de fuentes de energía renovables aún es bastante reducido en comparación con la producción de energía a partir de fuentes no renovables, teniendo en cuenta el aumento constante del acceso a la eléctricidad y el interés creciente de la población en la conservación del medioambiente y la sostenibilidad debido a un mayor conocimiento de la evolución e impacto de las emisiones de Co2, se puede esperar (o almenos así lo espero yo) que la tendencia positiva del uso de fuentes renovables se mantenga o incluso que aumente en los años venideros, ya sea por un mejor aprovechamiento de las fuentes renovables conocidas, o por el desarrollo de nuevas fuentes más sostenibles y eficientes.

A continuación un trailer de un documental relacionado con el tema que puede resultar interesante.

6. Bibliografía

DATA TABLES DT

SHEAT SHEET DE DPLYR

SHEAT SHEET DE GGPLOT

PALETA DE COLORES R

Nadie llega tan lejos si no es para seguir future

LS0tDQp0aXRsZTogPEZPTlQgQ09MT1I9ImxpZ2h0Z3JlZW4iPiBFVk9MVUNJw5NOIFkgRUZFQ1RPIERFTCBVU08gREUgTEFTIEZVRU5URVMgRU5FUkfDiVRJQ0FTIDwvRk9OVD4NCnN1YnRpdGxlOiAiRGFpcm8gUXVpbnRlcm8gKGRhaXF1aW5AYWx1bW5pLnV2LmVzKSIgIy0gcG9uIHTDuiBub21icmUgYWjDrSBwYXJhIHEgYXBhcmV6Y2EgbcOhcyBncmFuZGUgcSBlbCBkZSBsYSBVVg0KYXV0aG9yOiAiVW5pdmVyc2l0YXQgZGUgVmFsw6huY2lhIg0KZGF0ZTogIkRpY2llbWJyZSBkZSAyMDIwIChhY3R1YWxpemFkbyBlbCBgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVkLSVtLSVZJylgKSINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICAjY3NzOiAiLi9hc3NldHMvbXlfY3NzX2ZpbGUuY3NzIg0KICAgIHRoZW1lOiBkYXJrDQogICAgaGlnaGxpZ2h0OiB0ZXh0bWF0ZSANCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZGVwdGg6IDMgDQogICAgdG9jX2Zsb2F0OiANCiAgICAgIGNvbGxhcHNlZDogdHJ1ZQ0KICAgICAgc21vb3RoX3Njcm9sbDogdHJ1ZQ0KICAgIHNlbGZfY29udGFpbmVkOiB0cnVlDQogICAgbnVtYmVyX3NlY3Rpb25zOiBmYWxzZQ0KICAgIGRmX3ByaW50OiBrYWJsZQ0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCmVkaXRvcl9vcHRpb25zOiANCiAgY2h1bmtfb3V0cHV0X3R5cGU6IGNvbnNvbGUNCi0tLQ0KDQpgYGB7ciBwYWNrYWdlcy1zZXR1cCwgaW5jbHVkZSA9IEZBTFNFfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5ICh0aWR5bG9nKQ0KI2luc3RhbGwucGFja2FnZXMoInRpZHlsb2ciKQ0KbGlicmFyeShrbGlwcHkpICAjLSByZW1vdGVzOjppbnN0YWxsX2dpdGh1Yigicmxlc3VyL2tsaXBweSIpDQpsaWJyYXJ5KGtuaXRyKQ0KbGlicmFyeShyaW8pDQpsaWJyYXJ5KHJlYWR4bCkNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoZ2dyaWRnZXMpDQojaW5zdGFsbC5wYWNrYWdlcygiZ2dyaWRnZXMiKQ0KI2RldnRvb2xzOjppbnN0YWxsX2dpdGh1YigiTEtyZW1lci9nZ3BvaW50ZGVuc2l0eSIpDQpsaWJyYXJ5KHZpcmlkaXNMaXRlKQ0KbGlicmFyeShnZ3BvaW50ZGVuc2l0eSkNCmxpYnJhcnkoZ2dhbmltYXRlKQ0KbGlicmFyeShwbG90bHkpDQpsaWJyYXJ5KGhtcykNCiNpbnN0YWxsLnBhY2thZ2VzKCdEVCcpDQpsaWJyYXJ5KERUKQ0KYGBgDQoNCmBgYHtyIGNodW5rLXNldHVwLCBpbmNsdWRlID0gRkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUsIGV2YWwgPSBUUlVFLCBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRSwgDQogICAgICAgICAgICAgICAgICAgICAgI3Jlc3VsdHMgPSAiaG9sZCIsDQogICAgICAgICAgICAgICAgICAgICAgY2FjaGUgPSBGQUxTRSwgY2FjaGUucGF0aCA9ICIvY2FjaGVzLyIsIGNvbW1lbnQgPSAiIz4iLA0KICAgICAgICAgICAgICAgICAgICAgICNmaWcud2lkdGggPSA3LCAjZmlnLmhlaWdodD0gNywgICANCiAgICAgICAgICAgICAgICAgICAgICAjb3V0LndpZHRoID0gNywgb3V0LmhlaWdodCA9IDcsDQogICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2UgPSBUUlVFLCAgZmlnLnNob3cgPSAiaG9sZCIsDQogICAgICAgICAgICAgICAgICAgICAgZmlnLmFzcCA9IDcvOSwgb3V0LndpZHRoID0gIjYwJSIsIGZpZy5hbGlnbiA9ICJjZW50ZXIiKQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGRldiA9ICJwbmciLCBkZXYuYXJncyA9IGxpc3QodHlwZSA9ICJjYWlyby1wbmciKSkNCmBgYA0KDQpgYGB7ciBvcHRpb25zLXNldHVwLCBpbmNsdWRlID0gRkFMU0V9DQpvcHRpb25zKHNjaXBlbiA9IDk5OSkgIy0gcGFyYSBxdWl0YXIgbGEgbm90YWNpw7NuIGNpZW50w61maWNhDQpvcHRpb25zKCJ5YW1sLmV2YWwuZXhwciIgPSBUUlVFKSANCmBgYA0KDQoNCmBgYHtyIGtsaXBweSwgZWNobyA9IEZBTFNFfQ0Ka2xpcHB5OjprbGlwcHkocG9zaXRpb24gPSBjKCJ0b3AiLCAicmlnaHQiKSkgIy0gcmVtb3Rlczo6aW5zdGFsbF9naXRodWIoInJsZXN1ci9rbGlwcHkiKQ0KYGBgDQoNCjxociBjbGFzcz0ibGluZWEtYmxhY2siPg0KDQpUcmFiYWpvIGVsYWJvcmFkbyBwYXJhIGxhIGFzaWduYXR1cmEgIlByb2dyYW1hY2nDs24geSBtYW5lam8gZGUgZGF0b3MgZW4gbGEgZXJhIGRlbCBCaWcgRGF0YSIgZGUgbGEgVW5pdmVyc2l0YXQgZGUgVmFsw6huY2lhIGR1cmFudGUgZWwgY3Vyc28gMjAyMC0yMDIxLiBFbCByZXBvIGRlbCB0cmFiYWpvIGVzdMOhIFthcXXDrV0oaHR0cHM6Ly9naXRodWIuY29tL0RhaXF1aW4vdHJhYmFqb19CaWdEYXRhKXt0YXJnZXQ9Il9ibGFuayJ9LiBMYSBww6FnaW5hIHdlYiBkZSBsYSBhc2lnbmF0dXJhIHkgbG9zIHRyYWJham9zIGRlIG1pcyBjb21wYcOxZXJvcyBwdWVkZW4gdmVyc2UgW2FxdcOtXShodHRwczovL3BlcmV6cDQ0LmdpdGh1Yi5pby9pbnRyby1kcy0yMC0yMS13ZWIvMDctdHJhYmFqb3MuaHRtbCl7dGFyZ2V0PSJfYmxhbmsifS4NCg0KPCEtLSBFbCBww6FycmFmbyBkZSBhcnJpYmEgaGFzIGRlIGRlamFybG8gY2FzaSBpZ3VhbCwgDQogICAgICAgIHNvbG8gSEFTIGRlIFNVU1RJVFVJUiBsYXMgMiB2ZWNlcyBxdWUgYXBhcmVjZSAicGVyZXpwNDQiIHBvciB0dSB1c3VhcmlvIGRlIEdpdGh1Yi0tPg0KDQo8aHIgY2xhc3M9ImxpbmVhLXJlZCI+DQoNCiMgPEZPTlQgQ09MT1I9ImxpZ2h0Z3JlZW4iPiAxLiBJbnRyb2R1Y2Npw7NuPC9GT05UPg0KDQpFbCAqKm9iamV0aXZvIGRlIGVzdGUgYW7DoWxpc2lzKiogZXMgcmVzYWx0YXIvZXNjbGFyZWNlciBsYSBldm9sdWNpw7NuIHkgZWZlY3RvcyBkZSBsYXMgZGlzdGludGFzIGZ1ZW50ZXMgZGUgZW5lcmfDrWEgcXVlIHNlIGhhbiB1dGlsaXphZG8gYSBuaXZlbCBtdW5pZGFsIGEgbG8gbGFyZ28gZGUgbG9zIMO6bHRpbW9zIDMwIGHDsW9zIHkgZWwgaW1wYWN0byBtZWRpb2FtYmllbnRhbCBkZSBlc3Rhcy4gTGEgbW90aXZhY2nDs24gZGUgZXN0ZSB0cmFiYWpvIHN1cmdlIGRlIGxhIG5lY2VzaWRhZCBkZSBjb25vY2VyIHkgY29tcHJlbmRlciBsYSBzaXR1YWNpw7NuIGFjdHVhbCB5IGxhcyBwb3NpYmlsaWRhZGVzIGZ1dHVyYXMgZW4gY3VhbnRvIGEgZW5lcmfDrWFzIHJlbm92YWJsZXMgcXVlIG5vcyBwZXJtaXRhbiBmdW5kYW1lbnRhciBudWVzdHJhIGVjb25vbcOtYSBkZSB1bmEgIG1hbmVyYSBtw6FzIGVmaWNpZW50ZSB5IHJlc3BldHVvc2EgY29uIGVsIG1lZGlvYW1iaWVudGUuIA0KbGFzIHZhcmlhYmxlcyBxdWUgc2UgdGVuZHLDoW4gZW4gY3VlbnRhIHNvbjogZXZvbHVjacOzbiBkZSBlbWlzaW9uZXMgZGUgY28yIHBvciBjYXVzYSBkZSBsYSBnZW5lcmFjacOzbiBkZSBlbmVyZ8OtYSBlbMOpY3RyaWNhLCBldm9sdWNpw7NuIGRlbCB1c28gZGUgZW5lcmfDrWFzIHJlbm92YWJsZXMgeSBubyByZW5vdmFibGVzLCBhY2Nlc28gZGUgbGEgcG9ibGFjacOzbiBhIGxhIGVsw6ljdHJpY2lkYWQuICAgDQoNCg0KDQoNCiMgPEZPTlQgQ09MT1I9ImxpZ2h0Z3JlZW4iPiAyLiBEYXRvczwvRk9OVD4NCg0KDQpsYSBwcmluY2lwYWwgZnVlbnRlIGRlIGRhdG9zIGhhIHNpZG8gbGEgd2ViIGRlbCBiYW5jbyBtdW5kaWFsLCBhIHBhcnRpciBkZSBsYSBjdWFsIGhlIGRlc2NhcmdhZG8gZG9jdW1lbnRvcyBleGNlbCBlbiBkb25kZSBzZSBpbmNsdXllbiB2YXJpYWJsZXMgcmVsYWNpb25hZGFzIGNvbiBlbCBtZWRpbyBhbWJpZW50ZSBlbiBlbCBhcGFydGFkbyBJbmRpY2Fkb3JlcyBkZWwgZGVzYXJyb2xsbyBtdW5kaWFsIChJRE0pLCBsb3MgY3VhbGVzIGNvbnN0aXR1eWVuIGxhIHByaW5jaXBhbCBjb2xlY2Npw7NuIGRlIGluZGljYWRvcmVzIGRlbCBkZXNhcnJvbGxvIGRlbCBCYW5jbyBNdW5kaWFsLCBjb21waWxhZG9zIGEgcGFydGlyIGRlIGZ1ZW50ZXMgaW50ZXJuYWNpb25hbGVzIHJlY29ub2NpZGFzIG9maWNpYWxtZW50ZS4gTGEgc2VyaWUgcHJlc2VudGEgZGF0b3MgYWN0dWFsZXMgeSBwcmVjaXNvcyBkaXNwb25pYmxlcyBzb2JyZSBlbCBkZXNhcnJvbGxvIG11bmRpYWwuDQphZGVtw6FzIGFsZ3Vub3MgZGUgZXN0b3MgZGF0b3MgaGFuIHNpZG8gb2J0ZW5pZG9zIGRlIGxhIEFnZW5jaWEgSW50ZXJuYWNpb25hbCBkZSBsYSBFbmVyZ8OtYSAoQUlFKSBhIHRyw6F2ZXMgZGUgZXN0YWTDrXN0aWNhcyBwcm9waWFzIHkgZGUgbGEgT3JnYW5pemFjacOzbiBwYXJhIGxhIENvb3BlcmFjacOzbiB5IGVsIERlc2Fycm9sbG8gRWNvbsOzbWljbyAoT0NERSkuIA0KDQoNCmxpbmsgYSBsYSBww6FnaW5hIGRlbA0KW2JhbmNvIGRlIGRhdG9zIGRlbCBCYW5jbyBNdW5kaWFsXShodHRwczovL2RhdGFiYW5rLmJhbmNvbXVuZGlhbC5vcmcvaG9tZS5hc3B4KQ0KDQpMaW5rIGEgbGEgcMOhZ2luYSBkZSBsYSBbQUlFXShodHRwczovL3d3dy5pZWEub3JnL2RhdGEtYW5kLXN0YXRpc3RpY3M/Y291bnRyeT1XT1JMRCZmdWVsPUVuZXJneSUyMHN1cHBseSZpbmRpY2F0b3I9VFBFU2J5U291cmNlKQ0KDQoNCiFbbG9nb3RpcG8gYmFuY28gbXVuZGlhbF0oLi9pbWFnZW5lcy9sb2dvYm0uanBnKQ0KDQohW2xvZ290aXBvIEFJRV0oLi9pbWFnZW5lcy9pZWEuanBnKQ0KDQoNCg0KDQpgYGB7ciBkYXRvcywgaW5jbHVkZT1GQUxTRX0NCg0KI2NhcmdhbW9zIGxvcyBkYXRvcyB5IGNyZWFtb3MgbG9zIGRhdGEgZnJhbWVzIHF1ZSB2YW1vcyBhIHVzYXIgDQpkZl9wcm9kX3Jlbm92IDwtIHJlYWRfZXhjZWwoIi4vZGF0b3MvUHJvZHVjY2nDs24gZGUgZW5lcmfDrWEgZWzDqWN0cmljYSByZW5vdmFibGUgKCUgZGUgbGEgcHJvZHVjY2nDs24gdG90YWwgZGUgZWxlY3RyaWNpZGFkKS54bHMiKQ0KDQpkZl9wcm9kX3JleGhpZHJvIDwtICByZWFkX2V4Y2VsKCIuL2RhdG9zL3Byb2R1Y2Npw7NuIGRlIGVsw6ljdHJpY2lkYWQgYSBwYXJ0aXIgZGUgZnVlbnRlcyBlcmVub3ZhYmxlcywgZXhjbHVpZGEgbGEgaGlkcm9lbMOpY3RyaWNhICglIGRlbCB0b3RhbCkueGxzIikNCg0KZGZfcmVub3ZfZXhjbGhpZHJvIDwtIHJlYWRfZXhjZWwoIi4vZGF0b3MvUHJvZHVjY2nDs24gZGUgZWxlY3RyaWNpZGFkIGEgcGFydGlyIGRlIGZ1ZW50ZXMgcmVub3ZhYmxlcywgZXhjbHVpZGEgbGEgaGlkcm9lbMOpY3RyaWNhIChraWxvdmF0aW8taG9yYSkueGxzIikNCg0KZGZfcHJvZF9ub3Jlbm92IDwtIHJlYWRfZXhjZWwoIi4vZGF0b3MvUHJvZHVjY2nDs24gZGUgZWxlY3RyaWNpZGFkIGEgcGFydGlyIGRlIGZ1ZW50ZXMgZGUgcGV0csOzbGVvLCBnYXMgeSBjYXJiw7NuICglIGRlbCB0b3RhbCkueGxzIikNCg0KZGZfYWNjZXNvX2VsZWN0ciA8LSAgcmVhZF9leGNlbCgiLi9kYXRvcy9hY2Nlc28gYSBsYSBlbGVjdHJpY2lkYWQueGxzIikNCg0KZW1pX2NvMiA8LSByZWFkX2V4Y2VsKCIuL2RhdG9zL2VtaXNpb25lcyBkZSBjbzIgb3JpZ2luYWRhcyBwb3IgbGEgcHJvZHVjY2nDs24gZGUgZWxlY3RyaWNpZGFkIHkgY2FsZWZhY2Npw7NuLCB0b3RhbCAoJSBkZWwgdG90YWwgZGUgbGEgcXVlbWEgZGUgY29tYnVzdGlibGUpIC54bHMiKQ0KDQpmb250X251Y2xlYXIgPC0gcmVhZF9leGNlbCgiLi9kYXRvcy9wcm9kdWNjacOzbiBkZSBlbGVjdHJpY2lkYWQgYSBwYXJ0aXIgZGUgZnVlbnRlcyBudWNsZWFyZXMgKCUgZGVsIHRvdGFsKS54bHMiKQ0KDQpgYGANCg0KDQoNCiMjIDxGT05UIENPTE9SPSJsaWdodGdyZWVuIj4gMi4xLiBQcm9jZXNhbmRvIGxvcyBkYXRvczwvRk9OVD4NCg0KDQoNClNlIGhhIHJlYWxpemFkbyB1bmEgbGltcGllemEgeSBvcmdhbml6YWNpw7NuIGRlIGxvcyBkYXRvcy4NCnBhcmEgZWxsbyBoZSBlbGltaW5hZG8gbGFzIGNvbHVtbmFzIHkgZmlsYXMgcXVlIG5vIHRlbmlhbiByZWxldmFuY2lhIG8gbm8gZGlzcG9uaWFuIGRlIGRhdG9zIChOQcK0cyksIGRlc3B1w6lzIGxvcyBoZSByZW9yZ2FuaXphZG8gdXRpbGl6YW5kbyBsYXMgZnVuY2lvbmVzIGRlIGRwbHlyIChwaXZvdF9sb25nZXIpIHkgaGUgcmVub21icmFkbyBhbGd1bmFzIHZhcmlhYmxlcyBwYXJhIGZhY2lsaXRhciBlbCB0cmFiYWpvIHBvc3RlcmlvciAocmVuYW1lKS4NCg0KDQpgYGB7ciBpbmNsdWRlPUZBTFNFfQ0KDQojUHJvZF9lbMOpY3RyaWNhX3Jlbm92YWJsZSAoJSBkZWwgdG90YWwgZGUgZWxlY3RyaWNpZGFkKQ0KDQojZWxpbWluYW1pb3MgbGFzIGNvbHVtbmFzIHNpbiBkYXRvcy4gDQpkZl9wcm9kX3Jlbm92IDwtIGRmX3Byb2RfcmVub3ZbICwgLWMoNDozNCAsIDYxOjY1KV0NCg0KI3Jlbm9tYnJhbW9zIHkgcmVvcmRlbmFtb3MgdmFyaWFibGVzIGVuIGNvbHVtbmFzIA0KDQpkZl9wcm9kX3Jlbm92IDwtIGRmX3Byb2RfcmVub3YgJT4lIHJlbmFtZShjb3VudHJ5ID0gYENvdW50cnkgTmFtZWAsIGNvZCA9IGBDb3VudHJ5IENvZGVgKQ0KDQpkZl9wcm9kX3Jlbm92IDwtIGRmX3Byb2RfcmVub3YgJT4lIHBpdm90X2xvbmdlcihjb2xzID0gNDoyOSAsIG5hbWVzX3RvPSAieWVhciIsIHZhbHVlc190bz0gInJlbm92YWJsZXMiKSAlPiUgbXV0YXRlKCBgSW5kaWNhdG9yIE5hbWVgID0gTlVMTCkNCmRmX3Byb2RfcmVub3YgPC0gdHJhbnNmb3JtKGRmX3Byb2RfcmVub3YsIHllYXIgPSBhcy5udW1lcmljKHllYXIpKSAlPiUgZHJvcF9uYSgpDQoNCg0KDQoNCiNoYWdvIGxvIG1pc21vIGNvbiBsb3Mgb3Ryb3MgZGYNCg0KI1Byb2RfZWxlY3RyaWNpZGFkX3Jlbm92YWJsZXMgZXhjX2hpZHJvZWzDqWN0cmljYSAoa2lsb3ZhdGlvLWhvcmEpDQoNCmRmX3Jlbm92X2V4Y2xoaWRybyA8LSBkZl9yZW5vdl9leGNsaGlkcm8gWyAsIC1jKDQ6MzQgLDYxOjY1KSBdIA0KDQpkZl9yZW5vdl9leGNsaGlkcm8gPC0gZGZfcmVub3ZfZXhjbGhpZHJvICU+JSByZW5hbWUoY291bnRyeSA9IGBDb3VudHJ5IE5hbWVgLCBjb2QgPSBgQ291bnRyeSBDb2RlYCkNCg0KZGZfcmVub3ZfZXhjbGhpZHJvIDwtIGRmX3Jlbm92X2V4Y2xoaWRybyAlPiUgcGl2b3RfbG9uZ2VyKGNvbHMgPSA0OjI5ICwgbmFtZXNfdG89ICJ5ZWFyIiwgdmFsdWVzX3RvPSAicmVub3ZfZXhoaWRyb19raCIpICU+JSBtdXRhdGUoIGBJbmRpY2F0b3IgTmFtZWAgPSBOVUxMKQ0KDQpkZl9yZW5vdl9leGNsaGlkcm8gPC0gdHJhbnNmb3JtKGRmX3Jlbm92X2V4Y2xoaWRybywgeWVhciA9IGFzLm51bWVyaWMoeWVhcikpICU+JSBkcm9wX25hKCkNCg0KDQojUHJvZHVjY2nDs24gZGUgZWxlY3RyaWNpZGFkIGEgcGFydGlyIGRlIGZ1ZW50ZXMgcmVub3ZhYmxlcywgZXhjbHVpZGEgbGEgaGlkcm9lbMOpY3RyaWNhICglIGRlbCB0b3RhbCkNCmRmX3Byb2RfcmV4aGlkcm8gPC0gZGZfcHJvZF9yZXhoaWRybyBbICwgLWMoNDozNCAsNjE6NjUpIF0gDQoNCmRmX3Byb2RfcmV4aGlkcm8gPC0gZGZfcHJvZF9yZXhoaWRybyAlPiUgcmVuYW1lKGNvdW50cnkgPSBgQ291bnRyeSBOYW1lYCwgY29kID0gYENvdW50cnkgQ29kZWApDQoNCmRmX3Byb2RfcmV4aGlkcm8gPC0gZGZfcHJvZF9yZXhoaWRybyAlPiUgcGl2b3RfbG9uZ2VyKGNvbHMgPSA0OjI5ICwgbmFtZXNfdG89ICJ5ZWFyIiwgdmFsdWVzX3RvPSAicmVub3ZhYmxlc19leGhpZHJvIikgJT4lIG11dGF0ZSggYEluZGljYXRvciBOYW1lYCA9IE5VTEwpDQpkZl9wcm9kX3JleGhpZHJvIDwtIHRyYW5zZm9ybShkZl9wcm9kX3JleGhpZHJvLCB5ZWFyID0gYXMubnVtZXJpYyh5ZWFyKSkgJT4lIGRyb3BfbmEoKQ0KDQoNCg0KI1Byb2R1Y2Npw7NuIGRlIGVsZWN0cmljaWRhZCBhIHBhcnRpciBkZSBmdWVudGVzIGRlIHBldHLDs2xlbywgZ2FzIHkgY2FyYsOzbiAoJSBkZWwgdG90YWwpDQoNCmRmX3Byb2Rfbm9yZW5vdiA8LSBkZl9wcm9kX25vcmVub3YgWyAsIC1jKDQ6MzQgLDYxOjY1KSBdIA0KDQpkZl9wcm9kX25vcmVub3YgPC1kZl9wcm9kX25vcmVub3YgJT4lIHJlbmFtZShjb3VudHJ5ID0gYENvdW50cnkgTmFtZWAsIGNvZCA9IGBDb3VudHJ5IENvZGVgKQ0KDQpkZl9wcm9kX25vcmVub3Y8LSBkZl9wcm9kX25vcmVub3YgJT4lIHBpdm90X2xvbmdlcihjb2xzID0gNDoyOSAsIG5hbWVzX3RvPSAieWVhciIsIHZhbHVlc190bz0gIm5vX3Jlbm92YWJsZXMiKSAlPiUgbXV0YXRlKCBgSW5kaWNhdG9yIE5hbWVgID0gTlVMTCkNCg0KZGZfcHJvZF9ub3Jlbm92IDwtIHRyYW5zZm9ybShkZl9wcm9kX25vcmVub3YsIHllYXIgPSBhcy5udW1lcmljKHllYXIpKSAlPiUgZHJvcF9uYSgpDQoNCg0KI2FjY2VzbyBhIGxhIGVjZWN0cmljaWRhZCAlIGRlIGxhIHBvYmxhY2nDs24gDQpkZl9hY2Nlc29fZWxlY3RyIDwtIGRmX2FjY2Vzb19lbGVjdHIgWyAsIC1jKDQ6MzQgLDYxOjY1KSBdIA0KDQpkZl9hY2Nlc29fZWxlY3RyIDwtZGZfYWNjZXNvX2VsZWN0ciAlPiUgcmVuYW1lKGNvdW50cnkgPSBgQ291bnRyeSBOYW1lYCwgY29kID0gYENvdW50cnkgQ29kZWApDQoNCmRmX2FjY2Vzb19lbGVjdHIgPC0gZGZfYWNjZXNvX2VsZWN0ciAlPiUgcGl2b3RfbG9uZ2VyKGNvbHMgPSA0OjI5ICwgbmFtZXNfdG89ICJ5ZWFyIiwgdmFsdWVzX3RvPSAiQWNjZXNvX2VsZWMiKSAlPiUgbXV0YXRlKCBgSW5kaWNhdG9yIE5hbWVgID0gTlVMTCkNCmRmX2FjY2Vzb19lbGVjdHIgPC0gdHJhbnNmb3JtKGRmX2FjY2Vzb19lbGVjdHIsIHllYXIgPSBhcy5udW1lcmljKHllYXIpKSAlPiUgZHJvcF9uYSgpDQoNCiNFbWlzaW9uZXMgZGUgQ08yIG9yaWdpbmFkYXMgcG9yIGxhIHByb2R1Y2NpbiBkZSBlbGVjdHJpY2lkYWQgeSBjYWxlZmFjY2luLCB0b3RhbCAoJSBkZWwgdG90YWwgZGUgbGEgcXVlbWEgZGUgY29tYnVzdGlibGUpDQplbWlfY28yIDwtIGVtaV9jbzJbICwgLWMoNDozNCAsNjE6NjUpIF0gDQoNCmVtaV9jbzIgPC0gZW1pX2NvMiAlPiUgcmVuYW1lKGNvdW50cnkgPSBgQ291bnRyeSBOYW1lYCwgY29kID0gYENvdW50cnkgQ29kZWApDQoNCmVtaV9jbzI8LSBlbWlfY28yICU+JSBwaXZvdF9sb25nZXIoY29scyA9IDQ6MjkgLCBuYW1lc190bz0gInllYXIiLCB2YWx1ZXNfdG89ICJDTzJfZWxlYyIpICU+JSBtdXRhdGUoIGBJbmRpY2F0b3IgTmFtZWAgPSBOVUxMKQ0KZW1pX2NvMiA8LSB0cmFuc2Zvcm0oZW1pX2NvMiAsIHllYXIgPSBhcy5udW1lcmljKHllYXIpKSAlPiUgZHJvcF9uYSgpDQoNCiNQcm9kdWNjacOzbiBkZSBlbGVjdHJpY2lkYWQgYSBwYXJ0aXIgZGUgZnVlbnRlcyBudWNsZWFyZXMgKCUgZGVsIHRvdGFsKQ0KDQpmb250X251Y2xlYXIgPC0gZm9udF9udWNsZWFyWyAsIC1jKDQ6MzQgLDYxOjY1KSBdIA0KDQpmb250X251Y2xlYXIgPC0gZm9udF9udWNsZWFyICU+JSByZW5hbWUoY291bnRyeSA9IGBDb3VudHJ5IE5hbWVgLCBjb2QgPSBgQ291bnRyeSBDb2RlYCkNCg0KZm9udF9udWNsZWFyIDwtIGZvbnRfbnVjbGVhciAlPiUgcGl2b3RfbG9uZ2VyKGNvbHMgPSA0OjI5ICwgbmFtZXNfdG89ICJ5ZWFyIiwgdmFsdWVzX3RvPSAibnVjbGVhcl9wb3JjIikgJT4lIG11dGF0ZSggYEluZGljYXRvciBOYW1lYCA9IE5VTEwpDQpmb250X251Y2xlYXIgPC0gdHJhbnNmb3JtKGZvbnRfbnVjbGVhciAsIHllYXIgPSBhcy5udW1lcmljKHllYXIpKSAlPiUgZHJvcF9uYSgpDQoNCmBgYA0KDQoNCg0KIyA8Rk9OVCBDT0xPUj0ibGlnaHRncmVlbiI+IDMuIEdyw6FmaWNvcyB5IHRhYmxhcyA8L0ZPTlQ+IA0KDQoNCg0KIyMgPEZPTlQgQ09MT1I9ImxpZ2h0Z3JlZW4iPiAzLjEgRW1pc2lvbmVzIGRlIENPMiA8L0ZPTlQ+IA0KDQoNCg0KPkVsIGRpw7N4aWRvIGRlIGNhcmJvbm8gbyBDTzIgZXMgdW5vIGRlIGxvcyBwcmluY2lwYWxlcyBnYXNlcyBkZSBlZmVjdG8gaW52ZXJuYWRlcm8ganVudG8gY29uIGVsIMOzeGlkbyBuaXRyb3NvIChOMk8pIHkgZWwgbWV0YW5vIChDSDQpLiBFcyB1biBnYXMgaW1wcmVzY2luZGlibGUgcGFyYSBsYSB2aWRhIGVuIGVsIHBsYW5ldGEsIHBlcm8gY29uIGxhIGxsZWdhZGEgeSBhdWdlIGRlIGxhIFJldm9sdWNpw7NuIEluZHVzdHJpYWwgc3UgY29uY2VudHJhY2nDs24gZW4gbGEgYXRtw7NzZmVyYSBlbXBlesOzIGEgZGlzcGFyYXJzZSB5IGxhIHRlbmRlbmNpYSBubyBzZSBoYSBkZXRlbmlkbyBkZXNkZSBlbnRvbmNlcy4gSGFjZSB5YSAyMDAgYcOxb3MsIGFsIGluaWNpbyBkZWwgcHJvY2VzbyBkZSBpbmR1c3RyaWFsaXphY2nDs24sIGxhIGF0bcOzc2ZlcmEgY29udGFiaWxpemFiYSBhcHJveGltYWRhbWVudGUgMjUwIHBhcnRlcyBkZSBkacOzeGlkbyBkZSBjYXJib25vIHBvciBtaWxsw7NuIChwcG0pLiBFbiAyMDE5LCBzZSByZWdpc3Ryw7MgbGEgY2lmcmEgcsOpY29yZCBkZSA0MTUsMzkgcHBtLiBBIGZpbmFsZXMgZGUgbG9zIGHDsW9zIDkwLCBlbCBQcm90b2NvbG8gZGUgS2lvdG8geWEgbWFuaWZlc3TDsyBsYSBuZWNlc2lkYWQgZGUgbHVjaGFyIGNvbnRyYSBlc3RhIHNpdHVhY2nDs24gcGVybyBsYXMgY2lmcmFzIGFjdHVhbGVzIG5vcyBleGlnZW4gYWN0dWFyIGNvbiB1cmdlbmNpYS4gDQoNCmVzdHJhY3RvIHRleHRvIGRlbCBhcnRpY3VsbyBzb2JyZSBsYSB0cmFuc2ljacOzbiBlbmVyZ8OpdGljYSBkZSBsYSB3ZWIgW1JFZCBlbMOpY3RyaWNhIGRlIEVTcGHDsWFdKGh0dHBzOi8vd3d3LnJlZS5lcy9lcy9zYWxhLWRlLXByZW5zYS9hY3R1YWxpZGFkL2VzcGVjaWFsLzIwMjAvMDEvbGEtdHJhbnNpY2lvbi1lbmVyZ2V0aWNhLXNlLWFwdW50YS1vdHJvLXRhbnRvLWNhZW4tbGFzLWVtaXNpb25lcy1hLXVuLW1pbmltby1oaXN0b3JpY28pLg0KDQoNCg0KQSBjb250aW51YWNpw7NuLCBzZSBleHBvbmUgdW4gZ3LDoWZpY28gcXVlIG11ZXN0cmEgbGEgZXZvbHVjacOzbiBkZSBsYXMgZW1pc2lvbmVzIG11bmRpYWxlcyBkZSBDbzIgYSBjb25zZWN1ZW5jaWEgZGUgbGEgcHJvZHVjY2nDs24gZW5lcmfDqXRpY2EgYSBsbyBsYXJnbyBkZSBsb3Mgw7psdGltb3MgMzAgYcOxb3MuIA0KRW4gZWxsYSBwb2RlbW9zIG9ic2VydmFyIGNvbW8gZGVzZGUgMTk5MCBlc3RhcyBlbWlzaW9uZXMgaGFuIHRlbmlkbyB1biBjcmVjaW1pZW50byBleHBvbmVuY2lhbCBsbGVnYW5kbyBhIGNvbnN0aXR1aXIgYXByw7N4aW1hZGFtZW50ZSBlbCA1MCUgZGVsIHRvdGFsIGRlIGVtaXNpb25lcyBtdW5kaWFsZXMgZW4gMjAxMS4gDQoNCg0KDQoNCmBgYHtyIGdyYWZpY29zLCBlY2hvPUZBTFNFfQ0KDQojZ3LDoWZpY28gZW1pc2lvbmVzIGNvMiBtdW5kaWFsZXMgDQoNCmNvMm11bmRpYWwgPC0gZW1pX2NvMiAlPiUgZmlsdGVyKGNvdW50cnkgPT0gIk11bmRvIikNCmdncGxvdChjbzJtdW5kaWFsICwgYWVzKHllYXIgLCBDTzJfZWxlYyApKSArICBnZW9tX2xpbmUoY29sb3I9ImRhcmtvcmFuZ2UiICwgc2l6ZSA9IDEuNSkgK2dlb21fcG9pbnQoY29sb3I9ICJyZWQiICwgc2l6ZT0gNCkgKyBsYWJzKHRpdGxlID0gIkVtaXNpb25lcyB0b3RhbGVzIGRlIENPMiBvcmlnaW5hZGFzIHBvciBsYSBwcm9kdWNjacOzbg0KZGUgZWxlY3RyaWNpZGFkIHkgY2FsZWZhY2Npw7NuLiAiLA0KICAgICAgIHN1YnRpdGxlID0gIiglIGRlbCB0b3RhbCBkZSBsYSBxdWVtYSBkZSBjb21idXN0aWJsZSkiLA0KICAgICAgIGNhcHRpb24gPSAiRnVlbnRlOiBFc3RhZMOtc3RpY2FzIEFJRSIsDQogICAgICAgeCA9ICJhw7FvIiwNCiAgICAgICB5ID0gIiUgZGUgZW1pc2lvbmVzIGRlIENvMiIpICt0aGVtZV9kYXJrKCkgKyB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIpKSArIHRoZW1lKHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJsaWdodGdyZWVuIiwgY29sb3VyID0gImJsYWNrIiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMy41KSkNCg0KYGBgDQoNCg0KDQojIyA8Rk9OVCBDT0xPUj0ibGlnaHRncmVlbiI+IDMuMiBQb2JsYWNpw7NuIGNvbiBhY2Nlc28gYSBsYSBlbMOpY3RyaWNpZGFkICA8L0ZPTlQ+DQoNCg0KKip0YWJsYSBkaW7DoW1pY2EgKioNCkVuIGVzdGEgdGFibGEgZGluw6FtaWNhIHNlIHB1ZWRlbiByZWFsaXphciBiw7pzcXVlZGFzIGRlIGxvcyBwb2NlcnRhamVzIGRlIHBvYmxhY2nDs24gY29uIGFjY2VzbyBhIGxhIGVsw6ljdHJpY2lkYWQgcGFyYSBjYWRhIHBhw61zIHkgYcOxbywgZGVzZGUgMTk5MCBoYXN0YSAyMDE1Lg0KDQoNCmBgYHtyIGVjaG89RkFMU0V9DQojdGFibGEgY29uIGxvcyBkYXRvcyBkZWwgZGF0YWZyYW1lICAlIGRlIHBvYmxhY2nDs24gY29uIGFjY2VzbyBhIGxhIGVsZWN0cmljaWRhZA0KDQphY2Nlc28gPC0gZGZfYWNjZXNvX2VsZWN0ciAlPiUgZmlsdGVyKHllYXIgICVpbiUgYygxOTkwOjIwMTUpKSAlPiUgdHJhbnNmb3JtKGFzLmRvdWJsZShBY2Nlc29fZWxlYykpICU+JSBhcnJhbmdlKGRlc2MoQWNjZXNvX2VsZWMpKQ0KDQoNCmRhdGF0YWJsZShoZWFkKGFjY2VzbyApICwgY29sbmFtZXMgPSBjKCJQYcOtcyIgLCAiQ8OzZGlnbyIgLCAiQcOxbyIgLCAiJSBhY2Nlc28gYSBlbMOpY3RyaWNpZGFkIikpIA0KYGBgDQoNCg0KDQpFbiBlc3RlIGFwYXJ0YWRvIHNlIGNvbXBhcmFuIGRvcyBncsOhZmljb3MsIHVubyBjb24gZGF0b3MgZGUgMTk5MCB5IG90cm8gZGUgMjAxNSwgZW4gZWxsb3Mgc2UgYXByZWNpYSBlbCBuw7ptZXJvIGRlIHBhw61zZXMgcXVlIGJyaW5kYW4gYWNjZXNvIGEgbGEgZWzDqWN0cmljaWRhZCBhIHVuIG1pc21vIHBvcmNlbnRhamUgZGUgc3UgcG9ibGFjacOzbiwgKHBvciBlamVtcGxvLCBlbiAxOTkwLCA4MCBwYcOtc2VzIGJyaW5kYWJhbiBhY2Nlc28gYSBsYSBlbMOpY3RyaWNpZGFkIGFsIDEwMCUgZGUgc3UgcG9ibGFjacOzbikuIA0KDQpzZSBwdWVkZSBvYnNlcnZhciBjb21vIHRvZGFzIGxhcyBjYW50aWRhZGVzIGhhbiBhdW1lbnRhZG8gcGFyYSBlbCBhw7FvIDIwMTUsIHRhbnRvIGxhcyBwcm9wb3JjaW9uZXMgZGUgcG9ibGFjacOzbiBlbiBjYWRhIHBhw61zIGNvbiBhY2Nlc28gYSBsYSBlbGVjdHJpY2lkYWQgLCBjb21vIGVsIG7Dum1lcm8gdG90YWwgZGUgcGHDrXNlcyBxdWUgYnJpbmRhIGFjY2VzbyBhIGxhIG1pc21hLg0KDQpFbiBjb25jcmV0bywgZW4gZW4gMTk5MCwgc29sbyA4MCBwYcOtc2VzIGJyaW5kYWJhbiBhY2Nlc28gYSBsYSBlbMOpY3RyaWNpZGFkIGFsIDEwMCUgZGUgc3UgcG9ibGFjacOzbiwgbWllbnRyYXMgcXVlIGVuIDIwMTUsIHVub3MgMTM5IHBhw61zZXMgeWEgZGFiYW4gYWNjZXNvIGFsIDEwMCUsIGFsZ28gcXVlIHNlIHB1ZWRlIGNvbnNpZGVyYXIgdW4gYXVtZW50byBpbXBvcnRhbnRlIHRlbmllbmRvIGVuIGN1ZW50YSBsYSBldm9sdWNpw7NuIGhpc3RvcmljYSBkZWwgdXNvIGRlIGxhIGVsw6ljdHJpY2lkYWQuIA0KDQpFbiBsb3MgZ3LDoWZpY29zIHRhbWJpw6luIHNlIHJlZmxlamEgZWwgYXVtZW50byBkZSBww6Fpc2VzIHF1ZSBlc3TDoW4gZW1wZXphbmRvIGEgYnJpbmRhciBhY2Nlc28gYSBsYSBlbMOpY3RyaWNpZGFkLCBwdWVzIHNpIHNlIG9ic2VydmEgZWwgbsO6bWVybyBkZSBwYcOtc2VzIHF1ZSBicmluZGFiYW4gYWNjZXNvIGEgcG9yY2VudGFqZXMgcmVkdWNpZG9zIGRlIHN1IHBvYmxhY2nDs24gZW4gMjAxNSwgc2UgcHVlZGUgYXByZWNpYXIgdW5hIGdyYW4gZGlmZXJlbmNpYSBjb24gcmVzcGVjdG8gYSAxOTkwLiANCg0KRW4gY29uY2x1c2nDs24gcG9kZW1vcyBhZmlybWFyIHF1ZSBlbCBhY2Nlc28gZGUgbGEgcG9ibGFjacOzbiBhIGxhIGVsZWN0cmljaWRhZCBlc3TDoSBlbiBhdW1lbnRvIHkgZXMgbXV5IHByb2JhYmxlIHF1ZSBhc8OtIGxvIHNpZ2EgaGFjaWVuZG8uIA0KDQoNCg0KYGBge3IgZWNobz1GQUxTRX0NCiANCg0KYWNjZXNvXzkwIDwtIGRmX2FjY2Vzb19lbGVjdHIgJT4lIGZpbHRlciAoeWVhciA9PSAxOTkwKQ0KDQpwIDwtIGdncGxvdChhY2Nlc29fOTAgLCBhZXMoQWNjZXNvX2VsZWMpKSAgKyBnZW9tX2hpc3RvZ3JhbShiaW5zID0gMTAsIGNvbG9yID0gImJsYWNrIiwgZmlsbCA9ICJzcHJpbmdncmVlbiIpICsgbGFicyh0aXRsZSA9ICJQb2JsYWNpw7NuIGNvbiBhY2Nlc28gYSBsYSBlbMOpY3RyaWNpZGFkICAiLA0KICAgICAgIHN1YnRpdGxlID0gIiglIGRlbCB0b3RhbCBlbiAxOTkwKSIsDQogICAgICAgY2FwdGlvbiA9ICJGdWVudGU6IEJhbmNvIE11bmRpYWwgDQogIGJhc2UgZGUgZGF0b3MgZGUgRW5lcmfDrWEgU29zdGVuaWJsZSBwYXJhIFRvZG9zIChTRTRBTEwpLiIgLCB4ID0gIiUgcG9ibGFjacOzbiIsIHkgPSAibsO6bWVybyBkZSBwYcOtc2VzIiApIA0KDQpnZ3Bsb3RseShwKQ0KDQpgYGANCg0KDQoNCg0KYGBge3IgZWNobz1GQUxTRX0NCmFjY2Vzb18wMTUgPC0gZGZfYWNjZXNvX2VsZWN0ciAlPiUgZmlsdGVyKHllYXI9PSAyMDE1KQ0KDQpwbCA8LSBnZ3Bsb3QoYWNjZXNvXzAxNSAsIGFlcyhBY2Nlc29fZWxlYykpICArIGdlb21faGlzdG9ncmFtKGJpbnMgPSAxMCwgY29sb3IgPSAiYmxhY2siLCBmaWxsID0gInJlZCIpICsgbGFicyh0aXRsZSA9ICJQb2JsYWNpw7NuIGNvbiBhY2Nlc28gYSBsYSBlbMOpY3RyaWNpZGFkICAiLA0KICAgICAgIHN1YnRpdGxlID0gIiglIGRlbCB0b3RhbCBlbiAyMDE1KSIsDQogICAgICAgY2FwdGlvbiA9ICJGdWVudGU6IEJhbmNvIE11bmRpYWwgDQogIGJhc2UgZGUgZGF0b3MgZGUgRW5lcmfDrWEgU29zdGVuaWJsZSBwYXJhIFRvZG9zIChTRTRBTEwpLiIgLCB4ID0gIiUgcG9ibGFjacOzbiIsIHkgPSAibsO6bWVybyBkZSBwYcOtc2VzIikNCg0KZ2dwbG90bHkocGwpDQpgYGANCg0KDQoNCg0KDQoNCg0KIyMgPEZPTlQgQ09MT1I9ImxpZ2h0Z3JlZW4iPiAzLjMgUHJvZHVjY2nDs24gZGUgZW5lcmfDrWEgZWzDqWN0cmljYSByZW5vdmFibGUgeSBubyByZW5vdmFibGUgIDwvRk9OVD4NCg0KDQoNCioqZW50ZW5kaWVuZG8gcG9yIGZ1ZW50ZXMgZGUgZWzDqWN0cmljaWRhZCBubyByZW5vdmFibGUgYSBsb3MgaW5zdW1vcyBxdWUgc2UgdXRpbGl6YW4gcGFyYSBnZW5lcmFyIGVsZWN0cmljaWRhZCBjb21vIHNvbjogRWwgcGV0csOzbGVvLCBlbCBjdWFsIHNlIHJlZmllcmUgYWwgY3J1ZG8geSBhIGxvcyBkZXJpdmFkb3MuIEVsIGdhcywgc2UgcmVmaWVyZSBhbCBnYXMgbmF0dXJhbCBwZXJvIGV4Y2x1eWUgbG9zIGzDrXF1aWRvcyBkZSBnYXMgbmF0dXJhbC4gRWwgY2FyYsOzbiwgc2UgcmVmaWVyZSBhIHRvZG9zIGxvcyB0aXBvcyBkZSBjYXJiw7NuIHkgY29tYnVzdGlibGVzIGRlcml2YWRvcy4gTGEgdHVyYmEgdGFtYmnDqW4gc2UgaW5jbHV5ZSBlbiBlc3RhIGNhdGVnb3LDrWEuRW4gY3VhbnRvIGEgbGFzIGVuZXJnw61hcyByZW5vdmFibGVzIGVzdG9zIGRhdG9zIHJlY29nZW4gdG9kbyB0aXBvIGRlIGVuZXJnw61hcyByZW5vdmFibGVzLCBlbnRyZSBlbGxhcyBsYSBzb2xhciwgZcOzbGljYSwgaGlkcmF1bGljYSwgZXRjLioqIA0KDQoNCg0KQSBjb250aW51YWNpw7NuIHNlIG11ZXN0cmFuIGdyw6FmaWNvcyBxdWUgcmVwcmVzZW50YW4gbGEgZXZvbHVjacOzbiBtdW5kaWFsIGRlbCBhZ3JlZ2FkbyBkZSBsYSBwcm9kdWNjacOzbiBkZSBlc3RhcyBmdWVudGVzIGRlIGVuZXJnw61hLiBFbiBlbGxhcyBwb2RlbW9zIG9ic2VydmFyIGNvbW8gZWwgdXNvIGRlIGxhcyBlbmVyZ8OtYXMgbm8gcmVub3ZhYmxlcywgc2kgYmllbiBoYW4gdGVuaWRvIHVuYSB0ZW5kZW5jaWEgY3JlY2llbnRlIGVuIGxhIGTDqWNhZGEgMTk5Ni0yMDA2LCBsbGVnYW5kbyBhIGNvbnN0aXR1aXIgZWwgNjclIGRlbCB0b3RhbCBkZSBsYSBwcm9kdWNjacOzbiBtdW5kaWFsIGVuIDIwMDYsIHNlIHB1ZWRlIG9ic2VydmFyIHRhbWJpw6luIHF1ZSBlc3RhIHRlbmRlbmNpYSwgZXMgZGVjaXIgc3UgdXNvLCBzZSBoYSB0cmFuc2Zvcm1hZG8gZW4gZGVzY2VuZGVudGUgZW4gbG9zIMO6bHRpbW9zIGHDsW9zLCByZWR1Y2nDqW5kb3NlIGEgdW4gNjUlLCBlc3RvIHNlIHB1ZWRlIGV4cGxpY2FyLCBvIGVudGVuZGVyLCBvYnNlcnZhbmRvIGxhIGV2b2x1Y2nDs24gZGUgbGEgcHJvZHVjY2nDs24gZGUgZW5lcmfDrWEgcG9yIG1lZGlvIGRlIGZ1ZW50ZXMgcmVub3ZhYmxlcywgbGEgY3VhbCwgY29tbyBzZSBwdWVkZSBvYnNlcnZhciBlbiBlbCBncsOhZmljbywgaGEgdGVuaWRvIHVuIGF1bWVudG8gZXhwb25lbmNpYWwgZW4gbGEgw7psdGltYSBkw6ljYWRhLCBwYXNhbmRvIGRlIGNvbnN0aXR1aXIgdW4gMTclIGRlIGxhIHByb2R1Y2Npw7NuIHRvdGFsIG11bmRpYWwgZW4gMjAwMiwgYSBjb25zZWd1aXIgdW4gMjMlIGVuIDIwMTUuIA0KDQoNCg0KDQpgYGB7ciBlY2hvPUZBTFNFfQ0KDQoNCm5vX3Jlbm92YSA8LSBkZl9wcm9kX25vcmVub3YgJT4lIGZpbHRlcihjb3VudHJ5ID09ICJNdW5kbyIpDQpyZW5vdiA8LSBkZl9wcm9kX3Jlbm92ICU+JSBmaWx0ZXIoY291bnRyeSA9PSAiTXVuZG8iKQ0KDQpyZW5feW5vcmUgPC0gbGVmdF9qb2luKG5vX3Jlbm92YSAsIHJlbm92KQ0KDQoNCnBsbyA8LSBnZ3Bsb3QocmVuX3lub3JlLCBhZXMoeWVhciAsIG5vX3Jlbm92YWJsZXMpICkgKyAgZ2VvbV9saW5lKGNvbG9yPSAiYmxhY2siLCBzaXplID0gMS41KSArIGdlb21fcG9pbnQoY29sb3IgPSAieWVsbG93IiAgLHNpemUgPSAzKSArIGxhYnModGl0bGUgPSAiUHJvZHVjY2nDs24gbXVuZGlhbCBkZSBlbGVjdHJpY2lkYWQgYSBwYXJ0aXIgZGUgZnVlbnRlcyANCmRlIHBldHLDs2xlbywgZ2FzIHkgY2FyYsOzbiAiLA0KICAgICAgIHN1YnRpdGxlID0gIiglIGRlbCB0b3RhbCkiLA0KICAgICAgIGNhcHRpb24gPSAiRnVlbnRlOiBBZ2VuY2lhIEludGVybmFjaW9uYWwgZGUgbGEgRW5lcmfDrWEgKEFJRSApDQogIChFc3RhZMOtc3RpY2FzIGRlIGxhIEFJRSAgT0NERS9BSUUpIiAsIHggPSAiYcOxbyIsIHkgPSAiJSBkZSBsYSBwcm9kdWNjacOzbiB0b3RhbCIpICsgdGhlbWVfZGFyaygpICsgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiKSkgKyB0aGVtZShwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAiZGFya3JlZCIsIGNvbG91ciA9ICJibGFjayIsIHNpemUgPSAxLjUpKSAgDQoNCmdncGxvdGx5KHBsbykNCg0KYGBgDQoNCg0KDQoNCmBgYHtyIGVjaG89RkFMU0V9DQoNCmdncGxvdChyZW5feW5vcmUsIGFlcyh5ZWFyICwgcmVub3ZhYmxlcykgKSAgKyBnZW9tX2xpbmUoY29sb3I9ICJhenVyZTIiICwgc2l6ZSA9IDEuNSkgKyBnZW9tX3BvaW50KHNpemUgPSAzLCBjb2xvcj0gImRhcmtibHVlIikgKyBsYWJzKHRpdGxlID0gIlByb2R1Y2Npw7NuIG11bmRpYWwgZGUgZW5lcmfDrWEgZWzDqWN0cmljYSByZW5vdmFibGUgIiwNCiAgICAgICBzdWJ0aXRsZSA9ICIoJSBkZSBsYSBwcm9kdWNjacOzbiB0b3RhbCBkZSBlbGVjdHJpY2lkYWQpIiwNCiAgICAgICBjYXB0aW9uID0gIkZ1ZW50ZTogQWdlbmNpYSBJbnRlcm5hY2lvbmFsIGRlIGxhIEVuZXJnw61hIChBSUUgKQ0KICAoRXN0YWTDrXN0aWNhcyBkZSBsYSBBSUUgIE9DREUvQUlFKSIgLCB4ID0gImHDsW8iLCB5ID0gIiUgZGUgbGEgcHJvZHVjY2nDs24gdG90YWwiKSArIHRoZW1lX2RhcmsoKSArIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIikpICsgdGhlbWUocGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gImxpZ2h0Ymx1ZSIsIGNvbG91ciA9ICJibGFjayIsIHNpemUgPSAxLjUpKQ0KDQoNCmBgYA0KDQoNCg0KDQoNCiMgPEZPTlQgQ09MT1I9ImxpZ2h0Z3JlZW4iPiA0LiBDb25jbHVzacOzbiA8L0ZPTlQ+DQoNClNpIGJpZW4gZWwgdXNvIGRlIGZ1ZW50ZXMgZGUgZW5lcmfDrWEgcmVub3ZhYmxlcyBhw7puIGVzIGJhc3RhbnRlIHJlZHVjaWRvIGVuIGNvbXBhcmFjacOzbiBjb24gbGEgcHJvZHVjY2nDs24gZGUgZW5lcmfDrWEgYSBwYXJ0aXIgZGUgZnVlbnRlcyBubyByZW5vdmFibGVzLCB0ZW5pZW5kbyBlbiBjdWVudGEgZWwgYXVtZW50byBjb25zdGFudGUgZGVsIGFjY2VzbyBhIGxhIGVsw6ljdHJpY2lkYWQgeSBlbCBpbnRlcsOpcyBjcmVjaWVudGUgZGUgbGEgcG9ibGFjacOzbiBlbiBsYSBjb25zZXJ2YWNpw7NuIGRlbCBtZWRpb2FtYmllbnRlIHkgbGEgc29zdGVuaWJpbGlkYWQgZGViaWRvIGEgdW4gbWF5b3IgY29ub2NpbWllbnRvIGRlIGxhIGV2b2x1Y2nDs24gZSBpbXBhY3RvIGRlIGxhcyBlbWlzaW9uZXMgZGUgQ28yLCBzZSBwdWVkZSBlc3BlcmFyIChvIGFsbWVub3MgYXPDrSBsbyBlc3Blcm8geW8pIHF1ZSBsYSB0ZW5kZW5jaWEgcG9zaXRpdmEgZGVsIHVzbyBkZSBmdWVudGVzIHJlbm92YWJsZXMgc2UgbWFudGVuZ2EgbyBpbmNsdXNvIHF1ZSBhdW1lbnRlIGVuIGxvcyBhw7FvcyB2ZW5pZGVyb3MsIHlhIHNlYSBwb3IgdW4gbWVqb3IgYXByb3ZlY2hhbWllbnRvIGRlIGxhcyBmdWVudGVzIHJlbm92YWJsZXMgY29ub2NpZGFzLCBvIHBvciBlbCBkZXNhcnJvbGxvIGRlIG51ZXZhcyBmdWVudGVzIG3DoXMgc29zdGVuaWJsZXMgeSBlZmljaWVudGVzLiANCg0KDQoNCkEgY29udGludWFjacOzbiB1biB0cmFpbGVyIGRlIHVuIGRvY3VtZW50YWwgcmVsYWNpb25hZG8gY29uIGVsIHRlbWEgcXVlIHB1ZWRlIHJlc3VsdGFyIGludGVyZXNhbnRlLiANCg0KPGlmcmFtZSB3aWR0aD0iNTYwIiBoZWlnaHQ9IjMxNSIgc3JjPSJodHRwczovL3d3dy55b3V0dWJlLmNvbS9lbWJlZC9FbGYwUkZCaHI4ST9hdXRvcGxheT0wJmZzPTEmaXZfbG9hZF9wb2xpY3k9MyZzaG93aW5mbz0xJnJlbD0wJmNjX2xvYWRfcG9saWN5PTAmc3RhcnQ9MCZlbmQ9MCYiIGZyYW1lYm9yZGVyPSIwIiBhbGxvd2Z1bGxzY3JlZW4+PC9pZnJhbWU+DQoNCg0KIyA8Rk9OVCBDT0xPUj0ibGlnaHRncmVlbiI+IDUuIFRyYWJham9zIGVuIGxvcyBxdWUgbWUgaGUgYmFzYWRvPC9GT05UPg0KDQoNCltBVkFOWkEgQ08yLiBDYW1iaW8gQ2xpbcOhdGljby4gRW1pc2lvbmVzIGVuIGVsIG11bmRvXShodHRwOi8vd3d3Lm1pbmFzeWVuZXJnaWEudXBtLmVzL2ludmVzdGlnYWNpb24vY28yL2NhbWJpb0NsaW1hdGljby5FV29ybGQuaHRtKQ0KDQpbUkVkIGVsw6ljdHJpY2EgZGUgRVNwYcOxYV0oaHR0cHM6Ly93d3cucmVlLmVzL2VzL3NhbGEtZGUtcHJlbnNhL2FjdHVhbGlkYWQvZXNwZWNpYWwvMjAyMC8wMS9sYS10cmFuc2ljaW9uLWVuZXJnZXRpY2Etc2UtYXB1bnRhLW90cm8tdGFudG8tY2Flbi1sYXMtZW1pc2lvbmVzLWEtdW4tbWluaW1vLWhpc3RvcmljbykuDQoNCg0KDQoNCiMgPEZPTlQgQ09MT1I9ImxpZ2h0Z3JlZW4iPiA2LiBCaWJsaW9ncmFmw61hIDwvRk9OVD4NCg0KDQpbREFUQSBUQUJMRVMgRFRdKGh0dHBzOi8vcnN0dWRpby5naXRodWIuaW8vRFQvKQ0KDQpbU0hFQVQgU0hFRVQgREUgRFBMWVJdKGZpbGU6Ly8vQzovVXNlcnMvZGFpcm8vT25lRHJpdmUvRG9jdW1lbnRvcy9EQVRPUyUyMERFTCUyMEFTVVMvR0VDTy8oMjAtMjEpJTIwJTIwcHJpbWVyJTIwY3VhdHJpL3Byb2dyYW1hY2klQzMlQjNuJTIwYmlnJTIwZGF0YS9kYXRhLXRyYW5zZm9ybWF0aW9uLnBkZikNCg0KW1NIRUFUIFNIRUVUIERFIEdHUExPVF0oZmlsZTovLy9DOi9Vc2Vycy9kYWlyby9PbmVEcml2ZS9Eb2N1bWVudG9zL0RBVE9TJTIwREVMJTIwQVNVUy9HRUNPLygyMC0yMSklMjAlMjBwcmltZXIlMjBjdWF0cmkvcHJvZ3JhbWFjaSVDMyVCM24lMjBiaWclMjBkYXRhL2RhdGEtdmlzdWFsaXphdGlvbi0yLjEucGRmKQ0KDQpbUEFMRVRBIERFIENPTE9SRVMgUl0oaHR0cHM6Ly9wa2cuZ2Fycmlja2FkZW5idWllLmNvbS9yLWNvbG9ycy1jc3MvKQ0KDQoNCg0KDQoNCg0KDQoNCg0KDQoqKk5hZGllIGxsZWdhIHRhbiBsZWpvcyBzaSBubyBlcyBwYXJhIHNlZ3VpcioqDQohW2Z1dHVyZV0oLi9pbWFnZW5lcy9zb3N0LmpwZykNCg0KDQoNCg0KDQoNCg0K