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 2021-2022. El repo del trabajo está aquí.

La página web de la asignatura y los trabajos de mis compañeros pueden verse aquí.


Introducción


Las drogas, y concretamente la morfina, han existido durante cientos de milenios en nuestro planeta (de manera natural), pero fue recientemente cuando se observó su potencial terapéutico. Existe evidencia del uso del opio como medicina desde hace casi cuatro mil años pero su uso más generalizado se ha impuesto durante los últimos 150 años, a la vez que la nueva ciencia/química ha surgido como una rama de conocimiento humano. Ahora, además del opio natural, se han creado derivados sintéticos mucho más potentes y eficaces en realizar su tarea de reducir el dolor. Esto, a primera vista es bueno ya que supone una mejora de la calidad de vida de los pacientes exponencial pero estas drogas son muy adictivos lo que puede llevar a la drogodependencia. A esta drogodependencia, se le atribuye mayor criminalidad, mayor riesgo de transmisión de VIH y hepatitis C, menor calidad de vida, riesgo de sobredosis e incluso la muerte.



A continuación, os presentaremos los efectos negativos del consumo de las drogas en EEUU (analizando la evolución del nivel de muertes), y nos centraremos sobre todo en el caso de los opioides y opiáceos que han sido los principales protagonistas de este número elevado de muertes en este país.



La epidemia de los opioides (también conocido como la crisis de los opioides) es un problema muy grave en EEUU que provoca miles de muertes cada año. De hecho, en el año 2021 según los valores provisionales que suministra the Centre for Disease and Control (CDC), las muertes por sobredosis alcanzaron los 100.000 en el conjunto de los 50 Estados. Esto supone un gran incremento con respecto a los años anteriores y seguramente haya influido la crisis sanitaria de la COVID-19 y las restricciones que se impusieron con el fin de mititgar dicha crisis sanitaria.


En este trabajo, comenzaremos explicando: que son los opioides, el origen y las causas de esta epidemia y nos centraremos en varios gráficos durante la elaboración del presente trabajo que nos permitirán visualizar a grosso modo la relevancia y la importancia de esta situación tan grave en Estados Unidos.


Datos

Los datos de la primera parte del trabajo provienen del departamento del “National Center for Health Statistics” organización dentro del “Centre for Disease Control” (CDC), que se encarga de suministrar todo tipo de datos relacionados con la mortalidad en EEUU. Concretamente, nos centraremos en las muertes a nivel nacional de la mortalidad por sobredosis de drogas. En la tabla de datos completa (la principal de este trabajo) se especifica las muertes totales y por género, de todo tipo de drogas, las muertes por distintas categorías de drogas y las muertes provocados por una combinación de distintas categorías de drogas.


Los datos de la segunda parte del trabajo “Un análisis de la situación actual” provienen de la Vital Statistics Rapid Release, que forma parte también del mismo departamento dentro del CDC. Los datos de la población actualizada los conseguí a través del “United States Census” es decir, el Censo oficial de Estados Unidos.


Qué son los opioides?


La estructura química de morfina, el opioide prototípico.


Los opioides son sustancias que actúan sobre los receptores de opioides que se encuentran en el cerebro con el fin de producir efectos parecidos a la morfina. En medicina, principalmente suelen utilizarse para el alivio del dolor, incluyendo la anastesia. Otros usos médicos incluyen la reducción de diarrea, terapía de sustitución de terapia de reemplazo para el trastorno por consumo de opioides, revertir sobredosis de opioides, suprimir la tos e incluso para las ejecuciones en estados Unidos. También son usados no medicamente por sus efectos eufóricos o con la intención de prevenir la abstinencia.



Los opioides son muy adictivas que incluyen opiáceos (i.e. morfina y codeína), oxycodeína (OxyContin, Percocet), hydrocodeína (Vicodin, Norco) y fentanilo. En 2018, se prescribieron 51.4 recetas para estas sutancias por cada 100 personas en EEUU, que equivale a más de 168 millones de recetas.


El principal problema de estas drogas no es su uso, sino su sobreuso y dependencia. Los opioides son muy útiles en reducir la sensación de dolor para enfermos necesitados (enfermos crónicos, con cáncer, etc) pero llegado un punto se convierten en una droga letal y destructiva. Los adictos a estas sustancias no los toman para sentir placer como otras drogas “convencionales”, sino que los ingieren para poder sobrevivir su día a día y no padecer los efectos de la abstinencia.


El origen y las causas de esta epidemia

Logo de la empresa Purdue Pharma.

Las tres olas (fases) de la epidemia.

La primera ola (1990s hasta 2010)


La primera, que marca el inicio de esta situación, empezó en los años 1990 debido al empuje hacia un mayor uso de opioides en cuidados paliativos y el aumento de la promoción por parte de las empresas farmacéuticas. La principal empresa culpable de este aumento de opioides es Purdue Pharma, empresa que inventó “OxyContin” una de las drogas más importantes de esta crisis. Esta droga es relevante, ya que Purdue prometía a los doctores y los usuarios que “menos del 1% de los usuarios se convertirán en adictos”. La empresa se basaba en un artículo publicado en una revista de medicina prestigiosa pero sin respaldo científico. Se trataba más bien de un experimento mal diseñado y sin ningún control científico correcto. A pesar de esto, realizaba un marketing masivo donde éste era su lema prioritario.



Lo que diferenciaba a esta droga de los demás opioides y opiáceos en el mercado, fue que los efectos eran más duraderos y por tanto no se debía ingerir tanta cantidad. Además, la empresa aseguraba que no se podía modificar para inyectarlo de manera eficaz (como la heroína) algo que luego se comprobó como falso. Otro aspecto que debemos recalcar, es la diferencia del sistema de salud de los Estados Unidos comparado con un sistema de salud nacional como existe en España. Allí, los doctores reciben dinero en base a cuantas medicinas prescriben y el precio de estos, por tanto, cobra un peso relevante las drogas que sumiistra.


La segunda ola (2010 hasta 2013)

La segunda ola, comenzó sobre el año 2010 y duró hasta el 2013, y se caracteriza por el incremento del uso de la heroína en EEUU. Provocado por el aumento de la oferta y su consecuente reducción de precio. Esto provocó que muchas de las personas adictas a las pastillas terapéuticas (legales) como OxyContin, optaron por la heroína al ser una alternativa más barata y más fácil de conseguir*. A su vez, también hubo una reformulación del Oxycontin que permitió reducir la habilidad de convertirlo en polvo para luego ser mezclado con agua e inyectado.


*Era más fácil de conseguir debido al mayor control impuesto por el Estado en la prescripción de pastillas terapéuticas como el OxyContin.



La tercera ola (2013 hasta la actualidad)

La tercera, y actual ola, comenzó en 2013 y se caracteriza por un nuevo tipo de drogas en el mercado, los opioides sintéticos. Fentanilo es el más común, y su característica principal es que es hasta 100 veces más potente que la morfina. Evidentemente, su uso conllevará a una mayor letalidad algo que podemos observar en los datos. También cabe mencionar que, en la mayoría de casos de sobredosis letales, el usuario muere por no conocer la composición de la droga y no por la droga que ingiere en sí (o almenos la que piensa que está ingeriendo).



Para poner en perspectiva la cantidad letal del Fentanilo, a continuación os mostramos una foto con 2 miligramos comparado con un penique estadounidense (la moneda presenta un diámetro de 19.05 milímetros). Esta cantidad, sería letal para la mayoría de personas.


Dosis letal de fentanilo.

Un análisis de la situación actual


La situación actual de sobredosis letales de drogas se ha agravado exponencialmente, en parte debido al aumento de uso de opioides sintéticos como hemos ido mencionando y además debido a la crisis sanitaria de la COVID-19. Evidentemente, las restricciones impuestas llevan a un aislamiento de las personas que puede provocar grandes problemas de soledad y reducción de relaciones sociales. Algo que puede ser mortal para personas drogodependientes ya que no pueden solicitar ayuda de una manera tan fácil. Es por esto, que a continuación os presentamos datos actualizados hasta abril de 2021 tanto del conjunto de Estados Unidos, como separado por Estados y a nivel local en la ciudad de nueva York.


La situación en el conjunto del país


A continuación, os mostramos una tabla con los datos de la evolución de los últimos tres años de las sobredosis letales en el conjunto de Estados Unidos.


Sobredosis letales en EEUU
Desde abril 2019 hasta abril 2021
País Año Muertes
US 2019 67736
US 2020 77007
US 2021 97990
Elaboración propia a partir de datos del VSRR


Visualización cartográfica de las sobredosis en valores absolutos en EEUU


En este apartado, representamos el mapa de EEUU con los valores (anuales) de las muertes por sobredosis de cualquier droga en Abril de 2021. Es decir, se toman en cuenta los valores desde el Abril de 2020 hasta el abril de 2021 para cads Estado. Podemos observar que la mayoría de muertes ocurren en los grandes Estados (California, Texas y Florida) pero esto se debe principalmente al hecho de qué estos Estados presentan mayores nivel de población. Dicho esto, aún observando los valores absolutos, podemos ver que el nor-este de Estados unidos (la zona de West Vriginia, Ohio y Pennsylvania ) presentan valores elevados en comparación con su población.



Visualización cartográfica de las sobredosis en valores per cápita en EEUU


El siguiente mapa de EEUU presenta las mismas caracterísitcas pero esta vez se tratan de valores relativos de sobredosis letales. Es decir, hemos calculado el número de sobredosis letales en proporción a la población. Concretamente, los números representan las muertes por cada 100.000 habitantes en cada Estado.



La situación en la ciudad de Nueva York


Por último. os mostramos el caso particular de una de las ciudades más importantes de EEUU, nueva York. Es interesante estudiar esta ciudad ya que a comienzos de diciembre de 2021, se aprobaron y abrieron los dos primeros “supervised injection site” (sitio supervisados de consumo de drogas) de todo el país. Se encuentran concretamente en East Harlem y Washington Heights. Estos centros se crean con la intención de reducir las sobredosis letales, reducir la transmisión de IVH y hepatititis C, reducir las infecciones de piel debido a las inyecciones e intentar aumentar el número de usuarios que solicitan tratamiento de abuso/adicción de drogas.



Conclusiones


Después de analizar los gráficos y las tablas con los datos de las sobredosis por drogas en Estados Unidos, podemos concluir que esto es un gran problema en este país. Sobre todo, el gran peso del impacto de las opioides en las muertes es algo que se tiene que intentar paliar y reducir. En el año 2019, de 70.000 muertes totales, alrededor de 50.000 eran provocados por el consumo de opioides o la presencia de estos en otras drogas. Los nuevos centros supervisados de consumo que se han implantado en Nueva York puede ser una buena solución, aunque a largo plazo se deberían realizar reformas e impulsar políticas del tipo estrcturales.


Bibliografía


Los datos los descargué de las siguientes páginas:

  • Los datos actualizados los descargué en el siguiente enlace
  • Los datos del conjunto de EEUU separado por categorías los descargué del siguiente enlace
  • Los datos de la población de 2021 lo descagué del siguiente enlace

La inspiración que tuve a la hora de realizar este trabajo fue el siguiente artículo de Wikipedia.

LS0tDQp0aXRsZTogIkxhIGVwaWRlbWlhIGRlIGxvcyBvcGlvaWRlcyBlbiBFc3RhZG9zIFVuaWRvcyINCnN1YnRpdGxlOiAiTGF3cmVuY2UgRGFuaWVsIFBoaWxsaXBzIEJhdGVzIChsYWRhcEBhbHVtbmkudXYuZXMpIiANCmF1dGhvcjogIlVuaXZlcnNpdGF0IGRlIFZhbMOobmNpYSINCmRhdGU6ICJFbmVybyBkZSAyMDIxIChhY3R1YWxpemFkbyBlbCBgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVkLSVtLSVZJylgKSINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICAjY3NzOiAiLi9hc3NldHMvbXlfY3NzX2ZpbGUuY3NzIg0KICAgIHRoZW1lOiB1bml0ZWQNCiAgICBoaWdobGlnaHQ6IHRleHRtYXRlIA0KICAgIHRvYzogdHJ1ZQ0KICAgIHRvY19kZXB0aDogMyANCiAgICB0b2NfZmxvYXQ6IA0KICAgICAgY29sbGFwc2VkOiB0cnVlDQogICAgICBzbW9vdGhfc2Nyb2xsOiB0cnVlDQogICAgc2VsZl9jb250YWluZWQ6IHRydWUNCiAgICBudW1iZXJfc2VjdGlvbnM6IGZhbHNlDQogICAgZGZfcHJpbnQ6IGthYmxlDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KZWRpdG9yX29wdGlvbnM6IA0KICBjaHVua19vdXRwdXRfdHlwZTogY29uc29sZQ0KLS0tDQoNCmBgYHtyIHBhY2thZ2VzLXNldHVwLCBpbmNsdWRlID0gRkFMU0V9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoa2xpcHB5KQ0KbGlicmFyeShrbml0cikNCmxpYnJhcnkoZ3QpDQpsaWJyYXJ5KGdndGhlbWVzKQ0KbGlicmFyeShnZ2FuaW1hdGUpDQojZGV2dG9vbHM6Omluc3RhbGxfZ2l0aHViKCJ0aG9tYXNwODUvdHJhbnNmb3JtciIpDQpsaWJyYXJ5KG1hcHMpDQpsaWJyYXJ5KHBsb3RseSkNCmxpYnJhcnkocGFsZXR0ZWVyKQ0KbGlicmFyeShleHRyYWZvbnQpDQpgYGANCg0KYGBge3IgY2h1bmstc2V0dXAsIGluY2x1ZGUgPSBGQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSwgZXZhbCA9IFRSVUUsIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFLCANCiAgICAgICAgICAgICAgICAgICAgICAjcmVzdWx0cyA9ICJob2xkIiwNCiAgICAgICAgICAgICAgICAgICAgICBjYWNoZSA9IEZBTFNFLCBjYWNoZS5wYXRoID0gIi9jYWNoZXMvIiwgY29tbWVudCA9ICIjPiIsDQogICAgICAgICAgICAgICAgICAgICAgI2ZpZy53aWR0aCA9IDcsICNmaWcuaGVpZ2h0PSA3LCAgIA0KICAgICAgICAgICAgICAgICAgICAgICNvdXQud2lkdGggPSA3LCBvdXQuaGVpZ2h0ID0gNywNCiAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZSA9IFRSVUUsICBmaWcuc2hvdyA9ICJob2xkIiwNCiAgICAgICAgICAgICAgICAgICAgICBmaWcuYXNwID0gMC42MjgsIG91dC53aWR0aCA9ICI3NSUiLCBmaWcuYWxpZ24gPSAiY2VudGVyIikNCmtuaXRyOjpvcHRzX2NodW5rJHNldChkZXYgPSAicG5nIiwgZGV2LmFyZ3MgPSBsaXN0KHR5cGUgPSAiY2Fpcm8tcG5nIikpDQpgYGANCg0KDQpgYGB7ciBvcHRpb25zLXNldHVwLCBpbmNsdWRlID0gRkFMU0V9DQpvcHRpb25zKHNjaXBlbiA9IDk5OSkgIy0gcGFyYSBxdWl0YXIgbGEgbm90YWNpw7NuIGNpZW50w61maWNhDQpvcHRpb25zKCJ5YW1sLmV2YWwuZXhwciIgPSBUUlVFKSANCmBgYA0KDQoNCmBgYHtyIGtsaXBweSwgZWNobyA9IEZBTFNFfQ0Ka2xpcHB5OjprbGlwcHkocG9zaXRpb24gPSBjKCJ0b3AiLCAicmlnaHQiKSkgIy0gcmVtb3Rlczo6aW5zdGFsbF9naXRodWIoInJsZXN1ci9rbGlwcHkiKQ0KYGBgDQoNCg0KPGhyIGNsYXNzPSJsaW5lYS1ibGFjayI+DQoNCjwhLS0gRWwgcMOhcnJhZm8gZGUgYWJham8gaGFzIGRlIGRlamFybG8gY2FzaSBpZ3VhbCwgc29sbyBIQVMgZGUgU1VTVElUVUlSICJwZXJlenA0NCIgcG9yIHR1IHVzdWFyaW8gZGUgR2l0aHViLS0+DQpUcmFiYWpvIGVsYWJvcmFkbyBwYXJhIGxhIGFzaWduYXR1cmEgIlByb2dyYW1hY2nDs24geSBtYW5lam8gZGUgZGF0b3MgZW4gbGEgZXJhIGRlbCBCaWcgRGF0YSIgZGUgbGEgVW5pdmVyc2l0YXQgZGUgVmFsw6huY2lhIGR1cmFudGUgZWwgY3Vyc28gMjAyMS0yMDIyLiBFbCByZXBvIGRlbCB0cmFiYWpvIGVzdMOhIFthcXXDrV0oaHR0cHM6Ly9naXRodWIuY29tL2xvcmVuem8xOTk5L3RyYWJham9fQmlnRGF0YSl7dGFyZ2V0PSJfYmxhbmsifS4gDQoNCjwhLS0gRWwgcMOhcnJhZm8gZGUgYWJham8gaGFzIGRlIGRlamFybG8gZXhhY3RhbWVudGUgaWd1YWwsIE5PIEhBUyBERSBDQU1CSUFSIE5BREEtLT4NCg0KTGEgcMOhZ2luYSB3ZWIgZGUgbGEgYXNpZ25hdHVyYSB5IGxvcyB0cmFiYWpvcyBkZSBtaXMgY29tcGHDsWVyb3MgcHVlZGVuIHZlcnNlIFthcXXDrV0oaHR0cHM6Ly9wZXJlenA0NC5naXRodWIuaW8vaW50cm8tZHMtMjEtMjItd2ViLzA3LXRyYWJham9zLmh0bWwpe3RhcmdldD0iX2JsYW5rIn0uDQoNCg0KPGhyIGNsYXNzPSJsaW5lYS1yZWQiPg0KDQpgYGB7ciBjb2RpZ28gY29tdW4sIGVjaG8gPSBGQUxTRSwgZXZhbCA9IFRSVUV9DQoNCmRmX2NvbXBsZXRvIDwtIHJpbzo6aW1wb3J0KGhlcmU6OmhlcmUoIi4vZGF0b3MvVGlkeV9kcnVnX2RhdGEuY3N2IikpDQoNCiNFbGltaW5hbW9zIGVzcGFjaW9zIGVuIGJsYW5jbyBkZSBsb3Mgbm9tYnJlcyBkZSBsYXMgY29sdW1uYXMNCm5hbWVzKGRmX2NvbXBsZXRvKSA8LSBnc3ViKCIgIiwgIl8iLCBuYW1lcyhkZl9jb21wbGV0bykpDQoNCmNvbG5hbWVzKGRmX2NvbXBsZXRvKVszXSA8LSAiTXVqZXJlcyINCmNvbG5hbWVzKGRmX2NvbXBsZXRvKVs0XSA8LSAiSG9tYnJlcyINCmNvbG5hbWVzKGRmX2NvbXBsZXRvKVs2XSA8LSAiTXVqZXJlcyINCmNvbG5hbWVzKGRmX2NvbXBsZXRvKVs3XSA8LSAiSG9tYnJlcyINCmNvbG5hbWVzKGRmX2NvbXBsZXRvKVs5XSA8LSAiTXVqZXJlcyINCmNvbG5hbWVzKGRmX2NvbXBsZXRvKVsxMF0gPC0gIkhvbWJyZXMiDQpjb2xuYW1lcyhkZl9jb21wbGV0bylbOF0gPC0gIm9waW9pZGVzX2RlX3ByZXNjcmlwY2nDs24iDQpjb2xuYW1lcyhkZl9jb21wbGV0bylbMjFdIDwtICJNdWplcmVzIg0KY29sbmFtZXMoZGZfY29tcGxldG8pWzIyXSA8LSAiSG9tYnJlcyINCmNvbG5hbWVzKGRmX2NvbXBsZXRvKVsxOF0gPC0gIk11amVyZXMiDQpjb2xuYW1lcyhkZl9jb21wbGV0bylbMTldIDwtICJIb21icmVzIg0KY29sbmFtZXMoZGZfY29tcGxldG8pWzE3XSA8LSAgIlN5bnRoZXRpY19vcGlvaWRzIg0KYGBgDQoNCiMgSW50cm9kdWNjacOzbg0KDQo8YnI+DQoNCkxhcyBkcm9nYXMsIHkgY29uY3JldGFtZW50ZSBsYSBtb3JmaW5hLCBoYW4gZXhpc3RpZG8gZHVyYW50ZSBjaWVudG9zIGRlIG1pbGVuaW9zIGVuIG51ZXN0cm8gcGxhbmV0YSAoZGUgbWFuZXJhIG5hdHVyYWwpLCBwZXJvIGZ1ZSByZWNpZW50ZW1lbnRlIGN1YW5kbyBzZSBvYnNlcnbDsyBzdSBwb3RlbmNpYWwgdGVyYXDDqXV0aWNvLiBFeGlzdGUgZXZpZGVuY2lhIGRlbCB1c28gZGVsIG9waW8gY29tbyBtZWRpY2luYSBkZXNkZSBoYWNlIGNhc2kgY3VhdHJvIG1pbCBhw7FvcyBwZXJvIHN1IHVzbyBtw6FzIGdlbmVyYWxpemFkbyBzZSBoYSBpbXB1ZXN0byBkdXJhbnRlIGxvcyDDumx0aW1vcyAxNTAgYcOxb3MsIGEgbGEgdmV6IHF1ZSBsYSBudWV2YSBjaWVuY2lhL3F1w61taWNhIGhhIHN1cmdpZG8gY29tbyB1bmEgcmFtYSBkZSBjb25vY2ltaWVudG8gaHVtYW5vLiBBaG9yYSwgYWRlbcOhcyBkZWwgb3BpbyBuYXR1cmFsLCBzZSBoYW4gY3JlYWRvIGRlcml2YWRvcyBzaW50w6l0aWNvcyBtdWNobyBtw6FzIHBvdGVudGVzIHkgZWZpY2FjZXMgZW4gcmVhbGl6YXIgc3UgdGFyZWEgZGUgcmVkdWNpciBlbCBkb2xvci4gRXN0bywgYSBwcmltZXJhIHZpc3RhIGVzIGJ1ZW5vIHlhIHF1ZSBzdXBvbmUgdW5hIG1lam9yYSBkZSBsYSBjYWxpZGFkIGRlIHZpZGEgZGUgbG9zIHBhY2llbnRlcyBleHBvbmVuY2lhbCBwZXJvIGVzdGFzIGRyb2dhcyBzb24gbXV5IGFkaWN0aXZvcyBsbyBxdWUgcHVlZGUgbGxldmFyIGEgbGEgZHJvZ29kZXBlbmRlbmNpYS4gQSBlc3RhIGRyb2dvZGVwZW5kZW5jaWEsIHNlIGxlIGF0cmlidXllIG1heW9yIGNyaW1pbmFsaWRhZCwgbWF5b3Igcmllc2dvIGRlIHRyYW5zbWlzacOzbiBkZSBWSUggeSBoZXBhdGl0aXMgQywgbWVub3IgY2FsaWRhZCBkZSB2aWRhLCByaWVzZ28gZGUgc29icmVkb3NpcyBlIGluY2x1c28gbGEgbXVlcnRlLg0KDQo8YnI+DQoNCmBgYHtyIGdyYWZpY28gZ2VuZXJhbCwgZWNobyA9IEZBTFNFLCBldmFsID0gVFJVRX0NCg0KZGZfc29icmVkb3Npc190b3RhbCA8LSBkZl9jb21wbGV0byAlPiUgc2VsZWN0KDEsMiwzLDQpICU+JSBwaXZvdF9sb25nZXIoY29scyA9IDM6NCwgbmFtZXNfdG8gPSAiR8OpbmVybyIpICU+JSBncm91cF9ieShHw6luZXJvLCBZZWFyKSAlPiUgZ2dwbG90KCkgKyBnZW9tX2xpbmUoYWVzKFllYXIsIHZhbHVlLCBjb2xvdXIgPSBHw6luZXJvKSwgc2l6ZSA9IDIsIGFscGhhID0gMikgKyBnZW9tX2JhcihhZXMoWWVhciwgVG90YWxfT3ZlcmRvc2VfRGVhdGhzLzIpLCBzdGF0ID0gImlkZW50aXR5IiwgZmlsbCA9ICJibHVlIiwgYWxwaGEgPSAwLjEpICsgdGhlbWVfY2xlYW4oKSArIGxhYnMoDQogIHRpdGxlID0gIlNvYnJlZG9zaXMgZW4gRUVVVSAocG9yIGN1YWxxdWllciBkcm9nYSkiLA0KICBzdWJ0aXRsZSA9ICJCYXJyYXMgcmVwcmVzZW50YW4gZWwgbsK6IHRvdGFsIiwNCiAgY2FwdGlvbiA9ICJFbGFib3JhY2nDs24gcHJvcGlhIGEgcGFydGlyIGRlIGRhdG9zIGRlbCBDREMiLA0KICB5ID0gIk11ZXJ0ZXNcbiIsDQogIHggPSAiXG5Bw7FvIg0KKSArIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgNzUwMDAsIGJ5ID0gMTAwMDApKSArIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMTk5OSwgMjAxOSwgYnkgPSA1KSkgDQoNCmRmX3NvYnJlZG9zaXNfdG90YWwNCiNlc3TDoSBzdW1hbmRvIGxhIHZhcmlhYmxlIHRvdGFsIGRlIHNvYnJlZG9zaXMgZG9zIHZlY2VzIHBvcnF1ZSBlc3TDoSBlbiBlbCBkYXRhZnJhbWUgZG9zIHZlY2VzIGVuIGNhZGEgYcOxbywgbGEgc29sdWNpw7NuIG3DoXMgc2ltcGxlIHF1ZSBzZSBtZSBvY3VycmUgZXMgZGl2aWRpciBlbnRyZSBkb3MuIEVzdG8gbm9zIGRlamEgY29uIGVsIGdyw6FmaWNvIGNvcnJlY3RvLg0KDQpgYGANCg0KPGJyPg0KDQpBIGNvbnRpbnVhY2nDs24sIG9zIHByZXNlbnRhcmVtb3MgbG9zIGVmZWN0b3MgbmVnYXRpdm9zIGRlbCBjb25zdW1vIGRlIGxhcyBkcm9nYXMgZW4gRUVVVSAoYW5hbGl6YW5kbyBsYSBldm9sdWNpw7NuIGRlbCBuaXZlbCBkZSBtdWVydGVzKSwgeSBub3MgY2VudHJhcmVtb3Mgc29icmUgdG9kbyBlbiBlbCBjYXNvIGRlIGxvcyBvcGlvaWRlcyB5IG9wacOhY2VvcyBxdWUgaGFuIHNpZG8gbG9zIHByaW5jaXBhbGVzIHByb3RhZ29uaXN0YXMgZGUgZXN0ZSBuw7ptZXJvIGVsZXZhZG8gZGUgbXVlcnRlcyBlbiBlc3RlIHBhw61zLg0KDQo8YnI+DQoNCmBgYHtyIGdyYWZpY28gdGlwbyBvcGlvaWRlcywgZWNobyA9IEZBTFNFLCBldmFsID0gVFJVRX0NCg0KZGZfc29icmVkb3Npc190X29waW9pZGVzIDwtIGRmX2NvbXBsZXRvICU+JSBzZWxlY3QoMSw1LDgsMTcsMjApICU+JSBwaXZvdF9sb25nZXIoY29scyA9IDI6NSwgbmFtZXNfdG8gPSAiQ2F0ZWdvcsOtYSIpICU+JSBncm91cF9ieShDYXRlZ29yw61hLCBZZWFyKSAlPiUgZ2dwbG90KCkgKyBnZW9tX2xpbmUoYWVzKFllYXIsIHZhbHVlLCBjb2xvdXIgPSBDYXRlZ29yw61hKSkgKyBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiZ3JlZW4iLCAib3JhbmdlIiwgInB1cnBsZSIsICJibHVlIiksDQogICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJDdWFscXVpZXIgb3Bpb2lkZSIsICJIZXJvw61uYSIsICJPcGlvaWRlcyBwcmVzY3JpdG9zIiwgIk9waW9pZGVzIHNpbnTDqXRpY29zIikpICsgdGhlbWVfY2xlYW4oKSArDQogIGxhYnMoDQogIHRpdGxlID0gIlNvYnJlZG9zaXMgcG9yIG9waW9pZGVzIGVuIEVFVVUiLA0KICBzdWJ0aXRsZSA9ICJTZXBhcmFkbyBwb3IgY2F0ZWdvcsOtYSIsDQogIGNhcHRpb24gPSAiRWxhYm9yYWNpw7NuIHByb3BpYSBhIHBhcnRpciBkZSBkYXRvcyBkZWwgQ0RDIiwNCiAgeSA9ICJNdWVydGVzXG4iLA0KICB4ID0gIlxuQcOxbyINCikNCg0KZGZfc29icmVkb3Npc190X29waW9pZGVzDQoNCmBgYA0KDQo8YnI+DQoNCkxhIGVwaWRlbWlhIGRlIGxvcyBvcGlvaWRlcyAodGFtYmnDqW4gY29ub2NpZG8gY29tbyBsYSBjcmlzaXMgZGUgbG9zIG9waW9pZGVzKSBlcyB1biBwcm9ibGVtYSBtdXkgZ3JhdmUgZW4gRUVVVSBxdWUgcHJvdm9jYSBtaWxlcyBkZSBtdWVydGVzIGNhZGEgYcOxby4gDQpEZSBoZWNobywgZW4gZWwgYcOxbyAyMDIxIHNlZ8O6biBsb3MgdmFsb3JlcyBwcm92aXNpb25hbGVzIHF1ZSBzdW1pbmlzdHJhIHRoZSBDZW50cmUgZm9yIERpc2Vhc2UgYW5kIENvbnRyb2wgKENEQyksIFtsYXMgbXVlcnRlcyBwb3Igc29icmVkb3NpcyBhbGNhbnphcm9uIGxvcyAxMDAuMDAwIGVuIGVsIGNvbmp1bnRvIGRlIGxvcyA1MCBFc3RhZG9zXShodHRwczovL3d3dy5jZGMuZ292L25jaHMvcHJlc3Nyb29tL25jaHNfcHJlc3NfcmVsZWFzZXMvMjAyMS8yMDIxMTExNy5odG0pLiBFc3RvIHN1cG9uZSB1biBncmFuIGluY3JlbWVudG8gY29uIHJlc3BlY3RvIGEgbG9zIGHDsW9zIGFudGVyaW9yZXMgeSBzZWd1cmFtZW50ZSBoYXlhIGluZmx1aWRvIGxhIGNyaXNpcyBzYW5pdGFyaWEgZGUgbGEgQ09WSUQtMTkgeSBsYXMgcmVzdHJpY2Npb25lcyBxdWUgc2UgaW1wdXNpZXJvbiBjb24gZWwgZmluIGRlIG1pdGl0Z2FyIGRpY2hhIGNyaXNpcyBzYW5pdGFyaWEuDQoNCjxicj4NCiANCkVuIGVzdGUgdHJhYmFqbywgY29tZW56YXJlbW9zIGV4cGxpY2FuZG86IHF1ZSBzb24gbG9zIG9waW9pZGVzLCBlbCBvcmlnZW4geSBsYXMgY2F1c2FzIGRlIGVzdGEgZXBpZGVtaWEgIHkgbm9zIGNlbnRyYXJlbW9zIGVuIHZhcmlvcyBncsOhZmljb3MgZHVyYW50ZSBsYSBlbGFib3JhY2nDs24gZGVsIHByZXNlbnRlIHRyYWJham8gcXVlIG5vcyBwZXJtaXRpcsOhbiB2aXN1YWxpemFyIGEgZ3Jvc3NvIG1vZG8gbGEgcmVsZXZhbmNpYSB5IGxhIGltcG9ydGFuY2lhIGRlIGVzdGEgc2l0dWFjacOzbiB0YW4gZ3JhdmUgZW4gRXN0YWRvcyBVbmlkb3MuIA0KDQo8YnI+DQoNCiMgRGF0b3MNCkxvcyBkYXRvcyBkZSBsYSBwcmltZXJhIHBhcnRlIGRlbCB0cmFiYWpvIHByb3ZpZW5lbiBkZWwgZGVwYXJ0YW1lbnRvIGRlbCAiTmF0aW9uYWwgQ2VudGVyIGZvciBIZWFsdGggU3RhdGlzdGljcyIgb3JnYW5pemFjacOzbiBkZW50cm8gZGVsICJDZW50cmUgZm9yIERpc2Vhc2UgQ29udHJvbCIgKENEQyksIHF1ZSBzZSBlbmNhcmdhIGRlIHN1bWluaXN0cmFyIHRvZG8gdGlwbyBkZSBkYXRvcyByZWxhY2lvbmFkb3MgY29uIGxhIG1vcnRhbGlkYWQgZW4gRUVVVS4gQ29uY3JldGFtZW50ZSwgbm9zIGNlbnRyYXJlbW9zIGVuIGxhcyBtdWVydGVzIGEgbml2ZWwgbmFjaW9uYWwgZGUgbGEgbW9ydGFsaWRhZCBwb3Igc29icmVkb3NpcyBkZSBkcm9nYXMuIEVuIGxhIHRhYmxhIGRlIGRhdG9zIGNvbXBsZXRhIChsYSBwcmluY2lwYWwgZGUgZXN0ZSB0cmFiYWpvKSBzZSBlc3BlY2lmaWNhIGxhcyBtdWVydGVzIHRvdGFsZXMgeSBwb3IgZ8OpbmVybywgZGUgdG9kbyB0aXBvIGRlIGRyb2dhcywgbGFzIG11ZXJ0ZXMgcG9yIGRpc3RpbnRhcyBjYXRlZ29yw61hcyBkZSBkcm9nYXMgeSBsYXMgbXVlcnRlcyBwcm92b2NhZG9zIHBvciB1bmEgY29tYmluYWNpw7NuIGRlIGRpc3RpbnRhcyBjYXRlZ29yw61hcyBkZSBkcm9nYXMuIA0KDQo8YnI+DQoNCkxvcyBkYXRvcyBkZSBsYSBzZWd1bmRhIHBhcnRlIGRlbCB0cmFiYWpvICJVbiBhbsOhbGlzaXMgZGUgbGEgc2l0dWFjacOzbiBhY3R1YWwiIHByb3ZpZW5lbiBkZSBsYSBWaXRhbCBTdGF0aXN0aWNzIFJhcGlkIFJlbGVhc2UsIHF1ZSBmb3JtYSBwYXJ0ZSB0YW1iacOpbiBkZWwgbWlzbW8gZGVwYXJ0YW1lbnRvIGRlbnRybyBkZWwgQ0RDLiBMb3MgZGF0b3MgZGUgbGEgcG9ibGFjacOzbiBhY3R1YWxpemFkYSBsb3MgY29uc2VndcOtIGEgdHJhdsOpcyBkZWwgIlVuaXRlZCBTdGF0ZXMgQ2Vuc3VzIiBlcyBkZWNpciwgZWwgQ2Vuc28gb2ZpY2lhbCBkZSBFc3RhZG9zIFVuaWRvcy4NCg0KPGJyPg0KDQojIFF1w6kgc29uIGxvcyBvcGlvaWRlcz8NCg0KPGJyPg0KDQohW0xhIGVzdHJ1Y3R1cmEgcXXDrW1pY2EgZGUgbW9yZmluYSwgZWwgb3Bpb2lkZSBwcm90b3TDrXBpY28uXShDOi9Vc2Vycy9sZHA5OS9EZXNrdG9wL3RyYWJham9fQmlnRGF0YS9pbWFnZW5lcy9tb3JwaGluZS5wbmcpDQoNCjxicj4NCg0KTG9zIG9waW9pZGVzIHNvbiBzdXN0YW5jaWFzIHF1ZSBhY3TDumFuIHNvYnJlIGxvcyByZWNlcHRvcmVzIGRlIG9waW9pZGVzIHF1ZSBzZSBlbmN1ZW50cmFuIGVuIGVsIGNlcmVicm8gY29uIGVsIGZpbiBkZSBwcm9kdWNpciBlZmVjdG9zIHBhcmVjaWRvcyBhIGxhIG1vcmZpbmEuIEVuIG1lZGljaW5hLCBwcmluY2lwYWxtZW50ZSBzdWVsZW4gdXRpbGl6YXJzZSBwYXJhIGVsIGFsaXZpbyBkZWwgZG9sb3IsIGluY2x1eWVuZG8gbGEgYW5hc3Rlc2lhLiBPdHJvcyB1c29zIG3DqWRpY29zIGluY2x1eWVuIGxhIHJlZHVjY2nDs24gZGUgZGlhcnJlYSwgdGVyYXDDrWEgZGUgc3VzdGl0dWNpw7NuIGRlIHRlcmFwaWEgZGUgcmVlbXBsYXpvIHBhcmEgZWwgdHJhc3Rvcm5vIHBvciBjb25zdW1vIGRlIG9waW9pZGVzLCByZXZlcnRpciBzb2JyZWRvc2lzIGRlIG9waW9pZGVzLCBzdXByaW1pciBsYSB0b3MgZSBpbmNsdXNvIHBhcmEgbGFzIGVqZWN1Y2lvbmVzIGVuIGVzdGFkb3MgVW5pZG9zLiBUYW1iacOpbiBzb24gdXNhZG9zIG5vIG1lZGljYW1lbnRlIHBvciBzdXMgZWZlY3RvcyBldWbDs3JpY29zIG8gY29uIGxhIGludGVuY2nDs24gZGUgcHJldmVuaXIgbGEgYWJzdGluZW5jaWEuDQoNCjxicj4NCg0KYGBge3IgZ3JhZmljbyBvcGlvaWRlcyBzb2JyZWRvc2lzLCBlY2hvID0gRkFMU0UsIGV2YWwgPSBUUlVFfQ0KDQoNCmRmX3NvYnJlZG9zaXNfb3Bpb2lkIDwtIGRmX2NvbXBsZXRvICU+JSBzZWxlY3QoMSw1LDYsNykgJT4lIHBpdm90X2xvbmdlcihjb2xzID0gMzo0LCBuYW1lc190byA9ICJHw6luZXJvIikgJT4lIGdyb3VwX2J5KEfDqW5lcm8sIFllYXIpICU+JSBnZ3Bsb3QoKSArIGdlb21fbGluZShhZXMoWWVhciwgdmFsdWUsIGNvbG91ciA9IEfDqW5lcm8pLCBzaXplID0gMiwgYWxwaGEgPSAyKSArIGdlb21fYmFyKGFlcyhZZWFyLCBBbnlfT3Bpb2lkMS8yKSwgc3RhdCA9ICJpZGVudGl0eSIsIGZpbGwgPSAiYmx1ZSIsIGFscGhhID0gMC4xKSArIHRoZW1lX2NsZWFuKCkgKyBsYWJzKA0KICB0aXRsZSA9ICJTb2JyZWRvc2lzIGRlIHRvZG8gdGlwbyBkZSBvcGlvaWRlcyBlbiBFRVVVIiwNCiAgc3VidGl0bGUgPSAiQmFycmFzIHJlcHJlc2VudGFuIGVsIG7CuiB0b3RhbCIsDQogIGNhcHRpb24gPSAiRWxhYm9yYWNpw7NuIHByb3BpYSBhIHBhcnRpciBkZSBkYXRvcyBkZWwgQ0RDIiwNCiAgeSA9ICJNdWVydGVzXG4iLA0KICB4ID0gIlxuQcOxbyINCikNCmRmX3NvYnJlZG9zaXNfb3Bpb2lkDQoNCmBgYA0KDQo8YnI+DQoNCkxvcyBvcGlvaWRlcyBzb24gbXV5IGFkaWN0aXZhcyBxdWUgaW5jbHV5ZW4gb3Bpw6FjZW9zIChpLmUuIG1vcmZpbmEgeSBjb2Rlw61uYSksIG94eWNvZGXDrW5hIChPeHlDb250aW4sIFBlcmNvY2V0KSwgaHlkcm9jb2Rlw61uYSAoVmljb2RpbiwgTm9yY28pIHkgZmVudGFuaWxvLiBFbiAyMDE4LCBzZSBwcmVzY3JpYmllcm9uIDUxLjQgcmVjZXRhcyBwYXJhIGVzdGFzIHN1dGFuY2lhcyBwb3IgY2FkYSAxMDAgcGVyc29uYXMgZW4gRUVVVSwgcXVlIGVxdWl2YWxlIGEgbcOhcyBkZSAxNjggbWlsbG9uZXMgZGUgcmVjZXRhcy4gDQoNCjxicj4NCg0KRWwgcHJpbmNpcGFsIHByb2JsZW1hIGRlIGVzdGFzIGRyb2dhcyBubyBlcyBzdSB1c28sIHNpbm8gc3Ugc29icmV1c28geSBkZXBlbmRlbmNpYS4gTG9zIG9waW9pZGVzIHNvbiBtdXkgw7p0aWxlcyBlbiByZWR1Y2lyIGxhIHNlbnNhY2nDs24gZGUgZG9sb3IgcGFyYSBlbmZlcm1vcyBuZWNlc2l0YWRvcyAoZW5mZXJtb3MgY3LDs25pY29zLCBjb24gY8OhbmNlciwgZXRjKSBwZXJvIGxsZWdhZG8gdW4gcHVudG8gc2UgY29udmllcnRlbiBlbiB1bmEgZHJvZ2EgbGV0YWwgeSBkZXN0cnVjdGl2YS4gTG9zIGFkaWN0b3MgYSBlc3RhcyBzdXN0YW5jaWFzIG5vIGxvcyB0b21hbiBwYXJhIHNlbnRpciBwbGFjZXIgY29tbyBvdHJhcyBkcm9nYXMgImNvbnZlbmNpb25hbGVzIiwgc2lubyBxdWUgbG9zIGluZ2llcmVuIHBhcmEgcG9kZXIgc29icmV2aXZpciBzdSBkw61hIGEgZMOtYSB5IG5vIHBhZGVjZXIgbG9zIGVmZWN0b3MgZGUgbGEgYWJzdGluZW5jaWEuDQoNCjxicj4NCg0KIyBFbCBvcmlnZW4geSBsYXMgY2F1c2FzIGRlIGVzdGEgZXBpZGVtaWENCg0KIVtMb2dvIGRlIGxhIGVtcHJlc2EgUHVyZHVlIFBoYXJtYS5dKEM6L1VzZXJzL2xkcDk5L0Rlc2t0b3AvdHJhYmFqb19CaWdEYXRhL2ltYWdlbmVzL1B1cmR1ZS5qcGcpDQoNCiMjIExhcyB0cmVzIG9sYXMgKGZhc2VzKSBkZSBsYSBlcGlkZW1pYS4NCg0KIyMjIExhIHByaW1lcmEgb2xhICgxOTkwcyBoYXN0YSAyMDEwKQ0KDQo8YnI+DQoNCkxhIHByaW1lcmEsIHF1ZSBtYXJjYSBlbCBpbmljaW8gZGUgZXN0YSBzaXR1YWNpw7NuLCBlbXBlesOzIGVuIGxvcyBhw7FvcyAxOTkwIGRlYmlkbyBhbCBlbXB1amUgaGFjaWEgdW4gbWF5b3IgdXNvIGRlIG9waW9pZGVzIGVuIGN1aWRhZG9zIHBhbGlhdGl2b3MgeSBlbCBhdW1lbnRvIGRlIGxhIHByb21vY2nDs24gcG9yIHBhcnRlIGRlIGxhcyBlbXByZXNhcyBmYXJtYWPDqXV0aWNhcy4NCkxhIHByaW5jaXBhbCBlbXByZXNhIGN1bHBhYmxlIGRlIGVzdGUgYXVtZW50byBkZSBvcGlvaWRlcyBlcyBQdXJkdWUgUGhhcm1hLCBlbXByZXNhIHF1ZSBpbnZlbnTDsyAiT3h5Q29udGluIiB1bmEgZGUgbGFzIGRyb2dhcyBtw6FzIGltcG9ydGFudGVzIGRlIGVzdGEgY3Jpc2lzLiBFc3RhIGRyb2dhIGVzIHJlbGV2YW50ZSwgeWEgcXVlIFB1cmR1ZSBwcm9tZXTDrWEgYSBsb3MgZG9jdG9yZXMgeSBsb3MgdXN1YXJpb3MgcXVlICJtZW5vcyBkZWwgMSUgZGUgbG9zIHVzdWFyaW9zIHNlIGNvbnZlcnRpcsOhbiBlbiBhZGljdG9zIi4gTGEgZW1wcmVzYSBzZSBiYXNhYmEgZW4gdW4gYXJ0w61jdWxvIHB1YmxpY2FkbyBlbiB1bmEgcmV2aXN0YSBkZSBtZWRpY2luYSBwcmVzdGlnaW9zYSBwZXJvIHNpbiByZXNwYWxkbyBjaWVudMOtZmljby4gU2UgdHJhdGFiYSBtw6FzIGJpZW4gZGUgdW4gZXhwZXJpbWVudG8gbWFsIGRpc2XDsWFkbyB5IHNpbiBuaW5nw7puIGNvbnRyb2wgY2llbnTDrWZpY28gY29ycmVjdG8uIEEgcGVzYXIgZGUgZXN0bywgcmVhbGl6YWJhIHVuIG1hcmtldGluZyBtYXNpdm8gZG9uZGUgw6lzdGUgZXJhIHN1IGxlbWEgcHJpb3JpdGFyaW8uDQoNCjxicj4NCg0KYGBge3IgZ3JhZmljbyBwcmVzY3JpcGNpb25lcywgZWNobyA9IEZBTFNFLCBldmFsID0gVFJVRX0NCg0KDQpkZl9zb2JyZWRvc2lzX3ByZXNjcmlwY2lvbiA8LSBkZl9jb21wbGV0byAlPiUgc2VsZWN0KDEsOCw5LDEwKSAlPiUgcGl2b3RfbG9uZ2VyKGNvbHMgPSAzOjQsIG5hbWVzX3RvID0gIkfDqW5lcm8iKSAlPiUgZ3JvdXBfYnkoR8OpbmVybywgWWVhcikgJT4lIGdncGxvdCgpICsgZ2VvbV9saW5lKGFlcyhZZWFyLCB2YWx1ZSwgY29sb3VyID0gR8OpbmVybyksIHNpemUgPSAyLCBhbHBoYSA9IDIpICsgZ2VvbV9iYXIoYWVzKFllYXIsIG9waW9pZGVzX2RlX3ByZXNjcmlwY2nDs24vMiksIHN0YXQgPSAiaWRlbnRpdHkiLCBmaWxsID0gImJsdWUiLCBhbHBoYSA9IDAuMSkgKyB0aGVtZV9jbGVhbigpICsgbGFicygNCiAgdGl0bGUgPSAiU29icmVkb3NpcyBkZSBvcGlvaWRlcyBkZSBwcmVzY3JpcGNpw7NuIGVuIEVFVVUiLA0KICBzdWJ0aXRsZSA9ICJCYXJyYXMgcmVwcmVzZW50YW4gZWwgbsK6IHRvdGFsIiwNCiAgY2FwdGlvbiA9ICJFbGFib3JhY2nDs24gcHJvcGlhIGEgcGFydGlyIGRlIGRhdG9zIGRlbCBDREMiLA0KICB5ID0gIk11ZXJ0ZXNcbiIsDQogIHggPSAiXG5Bw7FvIg0KKSArIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMjAwMDAsIGJ5ID0gMzAwMCkpICArIGFubm90YXRlKCJzZWdtZW50IiwgeCA9IDE5OTksIHhlbmQgPSAyMDEwLCB5ID0gMzAwMCwgeWVuZCA9IDE0NTAwLCBjb2xvdXIgPSAiYmx1ZSIpICsgYW5ub3RhdGUoInNlZ21lbnQiLCB4ID0gMjAxMCwgeGVuZCA9IDIwMTksIHkgPSAxNTAwMCwgeWVuZCA9IDE1MDAwLCBjb2xvdXIgPSAiZGFyayBncmVlbiIpICsgYW5ub3RhdGUoZ2VvbSA9ICJ0ZXh0IiwgeCA9IDIwMDEuNSwgeSA9IDExMDAwLCBsYWJlbCA9ICJBdW1lbnRvIGNvbnNpZGVyYWJsZSIsIHNpemUgPSA0KSArIGFubm90YXRlKGdlb20gPSAidGV4dCIsIHggPSAyMDEzLCB5ID0gMTcwMDAsIGxhYmVsID0gIkVzdGFiaWxpZGFkIiwgc2l6ZSA9IDQpDQoNCmRmX3NvYnJlZG9zaXNfcHJlc2NyaXBjaW9uDQpgYGANCjxicj4NCg0KTG8gcXVlIGRpZmVyZW5jaWFiYSBhIGVzdGEgZHJvZ2EgZGUgbG9zIGRlbcOhcyBvcGlvaWRlcyB5IG9wacOhY2VvcyBlbiBlbCBtZXJjYWRvLCBmdWUgcXVlIGxvcyBlZmVjdG9zIGVyYW4gbcOhcyBkdXJhZGVyb3MgeSBwb3IgdGFudG8gbm8gc2UgZGViw61hIGluZ2VyaXIgdGFudGEgY2FudGlkYWQuIEFkZW3DoXMsIGxhIGVtcHJlc2EgYXNlZ3VyYWJhIHF1ZSBubyBzZSBwb2TDrWEgbW9kaWZpY2FyIHBhcmEgaW55ZWN0YXJsbyBkZSBtYW5lcmEgZWZpY2F6IChjb21vIGxhIGhlcm/DrW5hKSBhbGdvIHF1ZSBsdWVnbyBzZSBjb21wcm9iw7MgY29tbyBmYWxzby4gT3RybyBhc3BlY3RvIHF1ZSBkZWJlbW9zIHJlY2FsY2FyLCBlcyBsYSBkaWZlcmVuY2lhIGRlbCBzaXN0ZW1hIGRlIHNhbHVkIGRlIGxvcyBFc3RhZG9zIFVuaWRvcyBjb21wYXJhZG8gY29uIHVuIHNpc3RlbWEgZGUgc2FsdWQgbmFjaW9uYWwgY29tbyBleGlzdGUgZW4gRXNwYcOxYS4gQWxsw60sIGxvcyBkb2N0b3JlcyByZWNpYmVuIGRpbmVybyBlbiBiYXNlIGEgY3VhbnRhcyBtZWRpY2luYXMgcHJlc2NyaWJlbiB5IGVsIHByZWNpbyBkZSBlc3RvcywgcG9yIHRhbnRvLCBjb2JyYSB1biBwZXNvIHJlbGV2YW50ZSBsYXMgZHJvZ2FzIHF1ZSBzdW1paXN0cmEuIA0KDQo8YnI+DQoNCiMjIyBMYSBzZWd1bmRhIG9sYSAoMjAxMCBoYXN0YSAyMDEzKQ0KDQpMYSBzZWd1bmRhIG9sYSwgY29tZW56w7Mgc29icmUgZWwgYcOxbyAyMDEwIHkgZHVyw7MgaGFzdGEgZWwgMjAxMywgeSBzZSBjYXJhY3Rlcml6YSBwb3IgZWwgaW5jcmVtZW50byBkZWwgdXNvIGRlIGxhIGhlcm/DrW5hIGVuIEVFVVUuIFByb3ZvY2FkbyBwb3IgZWwgYXVtZW50byBkZSBsYSBvZmVydGEgeSBzdSBjb25zZWN1ZW50ZSByZWR1Y2Npw7NuIGRlIHByZWNpby4gRXN0byBwcm92b2PDsyBxdWUgbXVjaGFzIGRlIGxhcyBwZXJzb25hcyBhZGljdGFzIGEgbGFzIHBhc3RpbGxhcyB0ZXJhcMOpdXRpY2FzIChsZWdhbGVzKSBjb21vIE94eUNvbnRpbiwgb3B0YXJvbiBwb3IgbGEgaGVyb8OtbmEgYWwgc2VyIHVuYSBhbHRlcm5hdGl2YSBtw6FzIGJhcmF0YSB5IG3DoXMgZsOhY2lsIGRlIGNvbnNlZ3VpciouIEEgc3UgdmV6LCB0YW1iacOpbiBodWJvIHVuYSByZWZvcm11bGFjacOzbiBkZWwgT3h5Y29udGluIHF1ZSBwZXJtaXRpw7MgcmVkdWNpciBsYSBoYWJpbGlkYWQgZGUgY29udmVydGlybG8gZW4gcG9sdm8gcGFyYSBsdWVnbyBzZXIgbWV6Y2xhZG8gY29uIGFndWEgZSBpbnllY3RhZG8uICAgDQoNCjxicj4NCg0KDQoNCipFcmEgbcOhcyBmw6FjaWwgZGUgY29uc2VndWlyIGRlYmlkbyBhbCBtYXlvciBjb250cm9sIGltcHVlc3RvIHBvciBlbCBFc3RhZG8gZW4gbGEgcHJlc2NyaXBjacOzbiBkZSBwYXN0aWxsYXMgdGVyYXDDqXV0aWNhcyBjb21vIGVsIE94eUNvbnRpbi4NCg0KPGJyPg0KDQpgYGB7ciBncmFmaWNvIGhlcm9pbiwgZWNobyA9IEZBTFNFLCBldmFsID0gVFJVRX0NCg0KDQpkZl9zb2JyZWRvc2lzX2hlcm9pbiA8LSBkZl9jb21wbGV0byAlPiUgc2VsZWN0KDEsMjAsMjEsMjIpICU+JSBwaXZvdF9sb25nZXIoY29scyA9IDM6NCwgbmFtZXNfdG8gPSAiR8OpbmVybyIpICU+JSBncm91cF9ieShHw6luZXJvLCBZZWFyKSAlPiUgZ2dwbG90KCkgKyBnZW9tX2xpbmUoYWVzKFllYXIsIHZhbHVlLCBjb2xvdXIgPSBHw6luZXJvKSwgc2l6ZSA9IDIsIGFscGhhID0gMikgKyBnZW9tX2JhcihhZXMoWWVhciwgSGVyb2luNC8yKSwgc3RhdCA9ICJpZGVudGl0eSIsIGZpbGwgPSAiYmx1ZSIsIGFscGhhID0gMC4xKSArIHRoZW1lX2NsZWFuKCkgKyBsYWJzKA0KICB0aXRsZSA9ICJTb2JyZWRvc2lzIHBvciBoZXJvw61uYSBlbiBFRVVVIiwNCiAgc3VidGl0bGUgPSAiQmFycmFzIHJlcHJlc2VudGFuIGVsIG7CuiB0b3RhbCIsDQogIGNhcHRpb24gPSAiRWxhYm9yYWNpw7NuIHByb3BpYSBhIHBhcnRpciBkZSBkYXRvcyBkZWwgQ0RDIiwNCiAgeSA9ICJNdWVydGVzXG4iLA0KICB4ID0gIlxuQcOxbyINCikgDQpkZl9zb2JyZWRvc2lzX2hlcm9pbg0KDQpgYGANCg0KPGJyPg0KDQojIyMgTGEgdGVyY2VyYSBvbGEgKDIwMTMgaGFzdGEgbGEgYWN0dWFsaWRhZCkNCg0KTGEgdGVyY2VyYSwgeSBhY3R1YWwgb2xhLCBjb21lbnrDsyBlbiAyMDEzIHkgc2UgY2FyYWN0ZXJpemEgcG9yIHVuIG51ZXZvIHRpcG8gZGUgZHJvZ2FzIGVuIGVsIG1lcmNhZG8sIGxvcyBvcGlvaWRlcyBzaW50w6l0aWNvcy4gRmVudGFuaWxvIGVzIGVsICBtw6FzIGNvbcO6biwgeSBzdSBjYXJhY3RlcsOtc3RpY2EgcHJpbmNpcGFsIGVzIHF1ZSBlcyBoYXN0YSAxMDAgdmVjZXMgbcOhcyBwb3RlbnRlIHF1ZSBsYSBtb3JmaW5hLiBFdmlkZW50ZW1lbnRlLCBzdSB1c28gY29ubGxldmFyw6EgYSB1bmEgbWF5b3IgbGV0YWxpZGFkIGFsZ28gcXVlIHBvZGVtb3Mgb2JzZXJ2YXIgZW4gbG9zIGRhdG9zLiBUYW1iacOpbiBjYWJlIG1lbmNpb25hciBxdWUsIGVuIGxhIG1heW9yw61hIGRlIGNhc29zIGRlIHNvYnJlZG9zaXMgbGV0YWxlcywgZWwgdXN1YXJpbyBtdWVyZSBwb3Igbm8gY29ub2NlciBsYSBjb21wb3NpY2nDs24gZGUgbGEgZHJvZ2EgeSBubyBwb3IgbGEgZHJvZ2EgcXVlIGluZ2llcmUgZW4gc8OtIChvIGFsbWVub3MgbGEgcXVlIHBpZW5zYSBxdWUgZXN0w6EgaW5nZXJpZW5kbykuDQoNCjxicj4NCg0KYGBge3IgZ3JhZmljbyBzeW50aGV0aWMsIGVjaG8gPSBGQUxTRSwgZXZhbCA9IFRSVUV9DQoNCg0KZGZfc29icmVkb3Npc19zeW50aGV0aWMgPC0gZGZfY29tcGxldG8gJT4lIHNlbGVjdCgxLDE3LDE4LDE5KSAlPiUgcGl2b3RfbG9uZ2VyKGNvbHMgPSAzOjQsIG5hbWVzX3RvID0gIkfDqW5lcm8iKSAlPiUgZ3JvdXBfYnkoR8OpbmVybywgWWVhcikgJT4lIGdncGxvdCgpICsgZ2VvbV9saW5lKGFlcyhZZWFyLCB2YWx1ZSwgY29sb3VyID0gR8OpbmVybyksIHNpemUgPSAyLCBhbHBoYSA9IDIpICsgZ2VvbV9iYXIoYWVzKFllYXIsIFN5bnRoZXRpY19vcGlvaWRzLzIpLCBzdGF0ID0gImlkZW50aXR5IiwgZmlsbCA9ICJibHVlIiwgYWxwaGEgPSAwLjEpICsgdGhlbWVfY2xlYW4oKSArIGxhYnMoDQogIHRpdGxlID0gIlNvYnJlZG9zaXMgcG9yIG9waW9pZGVzIHNpbnTDqXRpY29zIGVuIEVFVVUiLA0KICBzdWJ0aXRsZSA9ICJCYXJyYXMgcmVwcmVzZW50YW4gZWwgbsK6IHRvdGFsIiwNCiAgY2FwdGlvbiA9ICJFbGFib3JhY2nDs24gcHJvcGlhIGEgcGFydGlyIGRlIGRhdG9zIGRlbCBDREMiLA0KICB5ID0gIk11ZXJ0ZXNcbiIsDQogIHggPSAiXG5Bw7FvIg0KKSANCmRmX3NvYnJlZG9zaXNfc3ludGhldGljDQoNCmBgYA0KDQo8YnI+DQoNClBhcmEgcG9uZXIgZW4gcGVyc3BlY3RpdmEgbGEgY2FudGlkYWQgbGV0YWwgZGVsIEZlbnRhbmlsbywgYSBjb250aW51YWNpw7NuIG9zIG1vc3RyYW1vcyB1bmEgZm90byBjb24gMiBtaWxpZ3JhbW9zIGNvbXBhcmFkbyBjb24gdW4gcGVuaXF1ZSBlc3RhZG91bmlkZW5zZSAobGEgbW9uZWRhIHByZXNlbnRhIHVuIGRpw6FtZXRybyBkZSAxOS4wNSBtaWzDrW1ldHJvcykuIEVzdGEgY2FudGlkYWQsIHNlcsOtYSBsZXRhbCBwYXJhIGxhIG1heW9yw61hIGRlIHBlcnNvbmFzLg0KDQo8YnI+DQoNCiFbRG9zaXMgbGV0YWwgZGUgZmVudGFuaWxvLl0oQzovVXNlcnMvbGRwOTkvRGVza3RvcC90cmFiYWpvX0JpZ0RhdGEvaW1hZ2VuZXMvZmVudGFueWxfcGljLmpwZykNCjxicj4NCjxicj4NCg0KIyBVbiBhbsOhbGlzaXMgZGUgbGEgc2l0dWFjacOzbiBhY3R1YWwNCg0KPGJyPg0KDQpMYSBzaXR1YWNpw7NuIGFjdHVhbCBkZSBzb2JyZWRvc2lzIGxldGFsZXMgZGUgZHJvZ2FzIHNlIGhhIGFncmF2YWRvIGV4cG9uZW5jaWFsbWVudGUsIGVuIHBhcnRlIGRlYmlkbyBhbCBhdW1lbnRvIGRlIHVzbyBkZSBvcGlvaWRlcyBzaW50w6l0aWNvcyBjb21vIGhlbW9zIGlkbyBtZW5jaW9uYW5kbyB5IGFkZW3DoXMgZGViaWRvIGEgbGEgY3Jpc2lzIHNhbml0YXJpYSBkZSBsYSBDT1ZJRC0xOS4gRXZpZGVudGVtZW50ZSwgbGFzIHJlc3RyaWNjaW9uZXMgaW1wdWVzdGFzIGxsZXZhbiBhIHVuIGFpc2xhbWllbnRvIGRlIGxhcyBwZXJzb25hcyBxdWUgcHVlZGUgcHJvdm9jYXIgZ3JhbmRlcyBwcm9ibGVtYXMgZGUgc29sZWRhZCB5IHJlZHVjY2nDs24gZGUgcmVsYWNpb25lcyBzb2NpYWxlcy4gQWxnbyBxdWUgcHVlZGUgc2VyIG1vcnRhbCBwYXJhIHBlcnNvbmFzIGRyb2dvZGVwZW5kaWVudGVzIHlhIHF1ZSBubyBwdWVkZW4gc29saWNpdGFyIGF5dWRhIGRlIHVuYSBtYW5lcmEgdGFuIGbDoWNpbC4gRXMgcG9yIGVzdG8sIHF1ZSBhIGNvbnRpbnVhY2nDs24gb3MgcHJlc2VudGFtb3MgZGF0b3MgYWN0dWFsaXphZG9zIGhhc3RhIGFicmlsIGRlIDIwMjEgdGFudG8gZGVsIGNvbmp1bnRvIGRlIEVzdGFkb3MgVW5pZG9zLCBjb21vIHNlcGFyYWRvIHBvciBFc3RhZG9zIHkgYSBuaXZlbCBsb2NhbCBlbiBsYSBjaXVkYWQgZGUgbnVldmEgWW9yay4NCg0KPGJyPg0KDQojIyBMYSBzaXR1YWNpw7NuIGVuIGVsIGNvbmp1bnRvIGRlbCBwYcOtcw0KDQo8YnI+DQoNCiBBIGNvbnRpbnVhY2nDs24sIG9zIG1vc3RyYW1vcyB1bmEgdGFibGEgY29uIGxvcyBkYXRvcyBkZSBsYSBldm9sdWNpw7NuIGRlIGxvcyDDumx0aW1vcyB0cmVzIGHDsW9zIGRlIGxhcyBzb2JyZWRvc2lzIGxldGFsZXMgZW4gZWwgY29uanVudG8gZGUgRXN0YWRvcyBVbmlkb3MuDQoNCjxicj4NCg0KYGBge3IgY29kaWdvIEVFVVUgYWN0dWFsaXphZG8sIGVjaG8gPSBGQUxTRSwgZXZhbCA9IFRSVUV9DQoNCmRmX2VzdGFkb3MgPC0gcmlvOjppbXBvcnQoaGVyZTo6aGVyZSgiLi9kYXRvcy9kcnVnX2RhdGFfYnlfc3RhdGUuY3N2IikpDQoNCiNFbGltaW5hbW9zIGVzcGFjaW9zIGVuIGJsYW5jbyBkZSBsb3Mgbm9tYnJlcyBkZSBsYXMgY29sdW1uYXMNCm5hbWVzKGRmX2VzdGFkb3MpIDwtIGdzdWIoIiAiLCAiXyIsIG5hbWVzKGRmX2VzdGFkb3MpKQ0KDQpkZl9lc3RhZG9zIDwtIGRmX2VzdGFkb3MgJT4lIG11dGF0ZShyZWdpb24gPSB0b2xvd2VyKFN0YXRlX05hbWUpKSANCk1haW5TdGF0ZXMgPC0gbWFwX2RhdGEoInN0YXRlIikNCg0KZGZfZXN0YWRvcyA8LSBkZl9lc3RhZG9zICU+JSBmaWx0ZXIoTW9udGggPT0gIkFwcmlsIiwgSW5kaWNhdG9yID09ICJOdW1iZXIgb2YgRHJ1ZyBPdmVyZG9zZSBEZWF0aHMiKQ0KDQojdmFsb3JlcyBhY3R1YWlhZG9zIHRvZG8gRUVVVQ0KZGZfRUVVVV9hY3R1YWxpemFkbyA8LSBkZl9lc3RhZG9zICU+JSBzZWxlY3QoU3RhdGUsIFllYXIsIERhdGFfVmFsdWUpDQoNCmNvbG5hbWVzKGRmX0VFVVVfYWN0dWFsaXphZG8pWzNdIDwtICJNdWVydGVzIg0KZGZfRUVVVV9hY3R1YWxpemFkbyRNdWVydGVzIDwtIGFzLm51bWVyaWMoZ3N1YigiLCIsICIiLCBkZl9FRVVVX2FjdHVhbGl6YWRvJE11ZXJ0ZXMpKQ0KDQoNCmRmX0VFVVVfYWN0dWFsaXphZG9fdG90YWwgPC0gIGRmX0VFVVVfYWN0dWFsaXphZG8gJT4lIHJlbmFtZShQYcOtcyA9IFN0YXRlLCBBw7FvID0gWWVhcikgJT4lIGZpbHRlcihQYcOtcyA9PSAiVVMiLCBBw7FvICVpbiUgYygyMDE5LCAyMDIwLCAyMDIxKSkgJT4lIGd0KCkgJT4lIHRhYl9oZWFkZXIoDQogIHRpdGxlID0gIlNvYnJlZG9zaXMgbGV0YWxlcyBlbiBFRVVVIiwNCiAgc3VidGl0bGUgPSAiRGVzZGUgYWJyaWwgMjAxOSBoYXN0YSBhYnJpbCAyMDIxIikgJT4lIHRhYl9zb3VyY2Vfbm90ZSgiRWxhYm9yYWNpw7NuIHByb3BpYSBhIHBhcnRpciBkZSBkYXRvcyBkZWwgVlNSUiIpICU+JSANCiAgdGFiX3N0eWxlKA0KICAgIGxvY2F0aW9ucyA9IGNlbGxzX2NvbHVtbl9sYWJlbHMoY29sdW1ucyA9IGV2ZXJ5dGhpbmcoKSksDQogICAgc3R5bGUgPSBsaXN0KA0KICAgICAgY2VsbF9ib3JkZXJzKHNpZGVzID0gImJvdHRvbSIsIHdlaWdodCA9IHB4KDMpKSwNCiAgICAgIGNlbGxfdGV4dCh3ZWlnaHQgPSAiYm9sZCIpKQ0KICAgICAgKSAlPiUgdGFiX3N0eWxlKA0KICAgICAgICBsb2NhdGlvbnMgPSBjZWxsc190aXRsZShncm91cHMgPSAidGl0bGUiKSwNCiAgICAgICAgc3R5bGUgPSBsaXN0KGNlbGxfdGV4dCh3ZWlnaHQgPSAiYm9sZCIsIHNpemUgPSAyNCkNCiAgICAgICkNCiAgICApICU+JSBkYXRhX2NvbG9yKGNvbHVtbnMgPSAiTXVlcnRlcyIsDQogICAgICAgICAgICAgICAgICAgICBjb2xvcnMgPSBzY2FsZXM6OmNvbF9udW1lcmljKA0KICAgICAgICAgICAgICAgICAgICAgICBwYWxldHRlID0gYygib3JhbmdlIiwgInJlZCIpLA0KICAgICAgICAgICAgICAgICAgICAgICBkb21haW4gPSBjKDY1MDAwLCAxMDAwMDApKQ0KICAgICkNCiAgDQpkZl9FRVVVX2FjdHVhbGl6YWRvX3RvdGFsDQoNCg0KYGBgDQoNCjxicj4NCg0KIyMjIFZpc3VhbGl6YWNpw7NuIGNhcnRvZ3LDoWZpY2EgZGUgbGFzIHNvYnJlZG9zaXMgZW4gdmFsb3JlcyBhYnNvbHV0b3MgZW4gRUVVVQ0KDQo8YnI+DQoNCkVuIGVzdGUgYXBhcnRhZG8sIHJlcHJlc2VudGFtb3MgZWwgbWFwYSBkZSBFRVVVIGNvbiBsb3MgdmFsb3JlcyAoYW51YWxlcykgZGUgbGFzIG11ZXJ0ZXMgcG9yIHNvYnJlZG9zaXMgZGUgY3VhbHF1aWVyIGRyb2dhIGVuIEFicmlsIGRlIDIwMjEuIEVzIGRlY2lyLCBzZSB0b21hbiBlbiBjdWVudGEgbG9zIHZhbG9yZXMgZGVzZGUgZWwgQWJyaWwgZGUgMjAyMCBoYXN0YSBlbCBhYnJpbCBkZSAyMDIxIHBhcmEgY2FkcyBFc3RhZG8uIFBvZGVtb3Mgb2JzZXJ2YXIgcXVlIGxhIG1heW9yw61hIGRlIG11ZXJ0ZXMgb2N1cnJlbiBlbiBsb3MgZ3JhbmRlcyBFc3RhZG9zIChDYWxpZm9ybmlhLCBUZXhhcyB5IEZsb3JpZGEpIHBlcm8gZXN0byBzZSBkZWJlIHByaW5jaXBhbG1lbnRlIGFsIGhlY2hvIGRlIHF1w6kgZXN0b3MgRXN0YWRvcyBwcmVzZW50YW4gbWF5b3JlcyBuaXZlbCBkZSBwb2JsYWNpw7NuLiBEaWNobyBlc3RvLCBhw7puIG9ic2VydmFuZG8gbG9zIHZhbG9yZXMgYWJzb2x1dG9zLCBwb2RlbW9zIHZlciBxdWUgZWwgbm9yLWVzdGUgZGUgRXN0YWRvcyB1bmlkb3MgKGxhIHpvbmEgZGUgV2VzdCBWcmlnaW5pYSwgT2hpbyB5IFBlbm5zeWx2YW5pYSApIHByZXNlbnRhbiB2YWxvcmVzIGVsZXZhZG9zIGVuIGNvbXBhcmFjacOzbiBjb24gc3UgcG9ibGFjacOzbi4NCg0KPGJyPg0KDQpgYGB7ciBjb2RpZ28gcG9yIGVzdGFkb3MgYWN0dWFsaXphZG8sIGVjaG8gPSBGQUxTRSwgZXZhbCA9IFRSVUV9DQojdmFsb3JlcyBhdHVhbGl6YWRvcyBwb3IgRXN0YWRvcw0KTWVyZ2VkU3RhdGVzIDwtIGlubmVyX2pvaW4oTWFpblN0YXRlcywgZGZfZXN0YWRvcywgYnkgPSAicmVnaW9uIikNCg0KTWVyZ2VkU3RhdGVzJERhdGFfVmFsdWUgPC0gYXMubnVtZXJpYyhnc3ViKCIsIiwgIiIsIE1lcmdlZFN0YXRlcyREYXRhX1ZhbHVlKSkNCg0KbWFwX3N0YXRlcyA8LSBnZ3Bsb3QoKSArIGdlb21fcG9seWdvbihkYXRhID0gTWVyZ2VkU3RhdGVzLCBhZXMoeCA9IGxvbmcsIHkgPSBsYXQsIGdyb3VwID0gZ3JvdXAsIGZpbGwgPSBEYXRhX1ZhbHVlKSwgY29sb3VyID0gImJsYWNrIikgKyBzY2FsZV9maWxsX2NvbnRpbnVvdXMobmFtZSA9ICJTb2JyZWRvc2lzIGxldGFsZXMiLCBsb3cgPSAibGlnaHRibHVlIiwgaGlnaCA9ICJkYXJrYmx1ZSIsIGJyZWFrcyA9IGMoIDIwMDAsIDQwMDAsIDYwMDAsIDgwMDApKSArIGxhYnModGl0bGUgPSAiU29icmVkb3NpcyBsZXRhbGVzIGVuIEVFVVUgcG9yIEVzdGFkbyIsIHN1YnRpdGxlID0gIlZhbG9yZXMgYW51YWxlcyAoQWJyaWwgMjAyMCAtIEFicmlsIDIwMjEpIikgKyB0aGVtZV9jbGFzc2ljKCkNCiNwb3IgZGVmZWN0byBlbGlnZSBsb3MgdmFsb3JlcyBtw6FzIHJlY2llbnRlcywgZXMgZGVjaXIsIGxvcyB2YWxvcmVzIGFudWFsZXMgaGFzdGEgYWJyaWwgZGUgMjAyMS4gKGFicmlsIDIwMjAgaGFzdGEgYWJyaWwgMjAyMSkNCmdncGxvdGx5KG1hcF9zdGF0ZXMpDQoNCg0KYGBgDQo8YnI+DQoNCiMjIyBWaXN1YWxpemFjacOzbiBjYXJ0b2dyw6FmaWNhIGRlIGxhcyBzb2JyZWRvc2lzIGVuIHZhbG9yZXMgcGVyIGPDoXBpdGEgZW4gRUVVVQ0KDQo8YnI+DQoNCkVsIHNpZ3VpZW50ZSBtYXBhIGRlIEVFVVUgcHJlc2VudGEgbGFzIG1pc21hcyBjYXJhY3RlcsOtc2l0Y2FzIHBlcm8gZXN0YSB2ZXogc2UgdHJhdGFuIGRlIHZhbG9yZXMgcmVsYXRpdm9zIGRlIHNvYnJlZG9zaXMgbGV0YWxlcy4gRXMgZGVjaXIsIGhlbW9zIGNhbGN1bGFkbyBlbCBuw7ptZXJvIGRlIHNvYnJlZG9zaXMgbGV0YWxlcyBlbiBwcm9wb3JjacOzbiBhIGxhIHBvYmxhY2nDs24uIENvbmNyZXRhbWVudGUsIGxvcyBuw7ptZXJvcyByZXByZXNlbnRhbiBsYXMgbXVlcnRlcyBwb3IgY2FkYSAxMDAuMDAwIGhhYml0YW50ZXMgZW4gY2FkYSBFc3RhZG8uDQoNCjxicj4NCg0KYGBge3IgY29kaWdvIHBvciBlc3RhZG9zIGFjdHVhbGl6YWRvIHBlciBjw6FwaXRhLCBlY2hvID0gRkFMU0UsIGV2YWwgPSBUUlVFfQ0KDQojbXVlcnRlcyBwZXIgY8OhcGl0YQ0KZGZfc3RhdGVfcG9wdWxhdGlvbiA8LSByaW86OmltcG9ydChoZXJlOjpoZXJlKCIuL2RhdG9zL3N0YXRlX3BvcHVsYXRpb24uY3N2IikpDQoNCm5hbWVzKGRmX3N0YXRlX3BvcHVsYXRpb24pIDwtIGFzLm1hdHJpeChkZl9zdGF0ZV9wb3B1bGF0aW9uWzEsIF0pDQpkZl9zdGF0ZV9wb3B1bGF0aW9uIDwtIGRmX3N0YXRlX3BvcHVsYXRpb25bLTEsIF0NCmRmX3N0YXRlX3BvcHVsYXRpb24gPC0gZGZfc3RhdGVfcG9wdWxhdGlvblssIC0zXQ0KZGZfc3RhdGVfcG9wdWxhdGlvbiA8LSBkZl9zdGF0ZV9wb3B1bGF0aW9uWywgLTNdDQpkZl9zdGF0ZV9wb3B1bGF0aW9uIDwtIGRmX3N0YXRlX3BvcHVsYXRpb25bLTUyLCBdDQoNCmRmX3N0YXRlX3BvcHVsYXRpb24gPC0gZGZfc3RhdGVfcG9wdWxhdGlvbiAlPiUgbXV0YXRlKHJlZ2lvbiA9IHRvbG93ZXIoU3RhdGUpKSANCmRmX3N0YXRlX3BvcHVsYXRpb24gPC0gZGZfc3RhdGVfcG9wdWxhdGlvbiAlPiUgcmVuYW1lKHBvYmxhY2lvbiA9IGAyMDIxYCkNCg0KZGZfc3RhdGVfZGVhdGhzX3BvcCA8LSBpbm5lcl9qb2luKE1lcmdlZFN0YXRlcywgZGZfc3RhdGVfcG9wdWxhdGlvbiwgYnkgPSAicmVnaW9uIikNCg0KI2NyZWFyIHZhcmlhYmxlIG11ZXJ0ZXMvcG9ibGFjaW9uDQoNCm1hcF9zdGF0ZXNfcGMgPC0gZGZfc3RhdGVfZGVhdGhzX3BvcCAlPiUgbXV0YXRlKE11ZXJ0ZXNfcGMgPSAoRGF0YV9WYWx1ZS9wb2JsYWNpb24pICogMTAwMDAwKQ0KDQptYXBfc3RhdGVzX3BjIDwtIG1hcF9zdGF0ZXNfcGMgJT4lIGdncGxvdCgpICsgZ2VvbV9wb2x5Z29uKGRhdGEgPSBtYXBfc3RhdGVzX3BjLCBhZXMoeCA9IGxvbmcsIHkgPSBsYXQsIGdyb3VwID0gZ3JvdXAsIGZpbGwgPSBNdWVydGVzX3BjKSwgY29sb3VyID0gImJsYWNrIikgKyBzY2FsZV9maWxsX2NvbnRpbnVvdXMobmFtZSA9ICJTb2JyZWRvc2lzIGxldGFsZXMiLCBsb3cgPSAibGlnaHRibHVlIiwgaGlnaCA9ICJkYXJrYmx1ZSIsIGJyZWFrcyA9IGMoIDEwLCAyMCwgMzAsIDQwLCA1MCwgNjAsIDcwLCA4MCwgOTApKSArIGxhYnModGl0bGUgPSAiU29icmVkb3NpcyBsZXRhbGVzIHBlciBjw6FwaXRhIGVuIEVFVVUgcG9yIEVzdGFkbyIsIHN1YnRpdGxlID0gIlZhbG9yZXMgYW51YWxlcyAoQWJyaWwgMjAyMCAtIEFicmlsIDIwMjEpIikgKyB0aGVtZV9jbGFzc2ljKCkNCiNwb3IgZGVmZWN0byBlbGlnZSBsb3MgdmFsb3JlcyBtw6FzIHJlY2llbnRlcywgZXMgZGVjaXIsIGxvcyB2YWxvcmVzIGFudWFsZXMgaGFzdGEgYWJyaWwgZGUgMjAyMS4gKGFicmlsIDIwMjAgaGFzdGEgYWJyaWwgMjAyMSkNCmdncGxvdGx5KG1hcF9zdGF0ZXNfcGMpDQpgYGANCjxicj4NCg0KIyMgTGEgc2l0dWFjacOzbiBlbiBsYSBjaXVkYWQgZGUgTnVldmEgWW9yaw0KDQo8YnI+DQoNClBvciDDumx0aW1vLiBvcyBtb3N0cmFtb3MgZWwgY2FzbyBwYXJ0aWN1bGFyIGRlIHVuYSBkZSBsYXMgY2l1ZGFkZXMgbcOhcyBpbXBvcnRhbnRlcyBkZSBFRVVVLCBudWV2YSBZb3JrLiBFcyBpbnRlcmVzYW50ZSBlc3R1ZGlhciBlc3RhIGNpdWRhZCB5YSBxdWUgYSBjb21pZW56b3MgZGUgZGljaWVtYnJlIGRlIDIwMjEsIHNlIGFwcm9iYXJvbiB5IGFicmllcm9uIGxvcyBkb3MgcHJpbWVyb3MgInN1cGVydmlzZWQgaW5qZWN0aW9uIHNpdGUiIChzaXRpbyBzdXBlcnZpc2Fkb3MgZGUgY29uc3VtbyBkZSBkcm9nYXMpIGRlIHRvZG8gZWwgcGHDrXMuIFNlIGVuY3VlbnRyYW4gY29uY3JldGFtZW50ZSBlbiBFYXN0IEhhcmxlbSB5IFdhc2hpbmd0b24gSGVpZ2h0cy4gRXN0b3MgY2VudHJvcyBzZSBjcmVhbiBjb24gbGEgaW50ZW5jacOzbiBkZSByZWR1Y2lyIGxhcyBzb2JyZWRvc2lzIGxldGFsZXMsIHJlZHVjaXIgbGEgdHJhbnNtaXNpw7NuIGRlIElWSCB5IGhlcGF0aXRpdGlzIEMsIHJlZHVjaXIgbGFzIGluZmVjY2lvbmVzIGRlIHBpZWwgZGViaWRvIGEgbGFzIGlueWVjY2lvbmVzIGUgaW50ZW50YXIgYXVtZW50YXIgZWwgbsO6bWVybyBkZSB1c3VhcmlvcyBxdWUgc29saWNpdGFuIHRyYXRhbWllbnRvIGRlIGFidXNvL2FkaWNjacOzbiBkZSBkcm9nYXMuIA0KDQo8YnI+DQoNCmBgYHtyIGNvZGlnbyBudWV2YSB5b3JrLCBlY2hvID0gRkFMU0UsIGV2YWwgPSBUUlVFfQ0KI3ZhbG9yZXMgYWN0dWFsaXphZG9zIGVuIHVuYSBjaXVkYWQgKE51ZXZhIFlvcmsgY2l1ZGFkKQ0KDQoNCmRmX05ZQ19hY3R1YWxpemFkbyA8LSBkZl9lc3RhZG9zICU+JSBzZWxlY3QoU3RhdGUsIFllYXIsIERhdGFfVmFsdWUpDQpkZl9OWUNfYWN0dWFsaXphZG8gPC0gZGZfTllDX2FjdHVhbGl6YWRvICU+JSBmaWx0ZXIoU3RhdGUgPT0gIllDIikNCg0KY29sbmFtZXMoZGZfTllDX2FjdHVhbGl6YWRvKVszXSA8LSAiTXVlcnRlcyINCmNvbG5hbWVzKGRmX05ZQ19hY3R1YWxpemFkbylbMl0gPC0gIkHDsW8iDQpjb2xuYW1lcyhkZl9OWUNfYWN0dWFsaXphZG8pWzFdIDwtICJDaXVkYWQiDQoNCmRmX05ZQ19hY3R1YWxpemFkbyRNdWVydGVzIDwtIGFzLm51bWVyaWMoZ3N1YigiLCIsICIiLCBkZl9OWUNfYWN0dWFsaXphZG8kTXVlcnRlcykpDQoNCmRmX05ZQ19hY3R1YWxpemFkb190b3RhbCA8LSBkZl9OWUNfYWN0dWFsaXphZG8gJT4lIGdncGxvdCgpICsgZ2VvbV9iYXIoYWVzKHggPSBBw7FvLCB5ID0gTXVlcnRlcyksIHN0YXQgPSAiaWRlbnRpdHkiLCBmaWxsID0gImdyZWVuIikgKyB0aGVtZV9jbGFzc2ljKCkgKyB0cmFuc2l0aW9uX3RpbWUoQcOxbykgKyBsYWJzKA0KICB0aXRsZSA9ICJFdm9sdWNpw7NuIGRlIHNvYnJlZG9zaXMgbGV0YWxlcyBlbiBOdWV2YSBZb3JrKiIsDQogIHN1YnRpdGxlID0gIkNpdWRhZCBkZSBOdWV2YSBZb3JrIiwNCiAgY2FwdGlvbiA9ICJFbGFib3JhY2nDs24gcHJvcGlhIGEgcGFydGlyIGRlIGRhdG9zIGRlIFZTUlIiDQopICsgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cyA9IGMoMjAxNCwgMjAyMiksIGJyZWFrcyA9IHNlcSgyMDE1LCAyMDIxLCBieSA9IDEpKQ0KDQpkZl9OWUNfYWN0dWFsaXphZG9fdG90YWwNCg0KYGBgDQoNCjxicj4gDQoNCiMgQ29uY2x1c2lvbmVzDQoNCjxicj4NCg0KRGVzcHXDqXMgZGUgYW5hbGl6YXIgbG9zIGdyw6FmaWNvcyB5IGxhcyB0YWJsYXMgY29uIGxvcyBkYXRvcyBkZSBsYXMgc29icmVkb3NpcyBwb3IgZHJvZ2FzIGVuIEVzdGFkb3MgVW5pZG9zLCBwb2RlbW9zIGNvbmNsdWlyIHF1ZSBlc3RvIGVzIHVuIGdyYW4gcHJvYmxlbWEgZW4gZXN0ZSBwYcOtcy4gU29icmUgdG9kbywgZWwgZ3JhbiBwZXNvIGRlbCBpbXBhY3RvIGRlIGxhcyBvcGlvaWRlcyBlbiBsYXMgbXVlcnRlcyBlcyBhbGdvIHF1ZSBzZSB0aWVuZSBxdWUgaW50ZW50YXIgcGFsaWFyIHkgcmVkdWNpci4gRW4gZWwgYcOxbyAyMDE5LCBkZSA3MC4wMDAgbXVlcnRlcyB0b3RhbGVzLCBhbHJlZGVkb3IgZGUgNTAuMDAwIGVyYW4gcHJvdm9jYWRvcyBwb3IgZWwgY29uc3VtbyBkZSBvcGlvaWRlcyBvIGxhIHByZXNlbmNpYSBkZSBlc3RvcyBlbiBvdHJhcyBkcm9nYXMuIExvcyBudWV2b3MgY2VudHJvcyBzdXBlcnZpc2Fkb3MgZGUgY29uc3VtbyBxdWUgc2UgaGFuIGltcGxhbnRhZG8gZW4gTnVldmEgWW9yayBwdWVkZSBzZXIgdW5hIGJ1ZW5hIHNvbHVjacOzbiwgYXVucXVlIGEgbGFyZ28gcGxhem8gc2UgZGViZXLDrWFuIHJlYWxpemFyIHJlZm9ybWFzIGUgaW1wdWxzYXIgcG9sw610aWNhcyBkZWwgdGlwbyBlc3RyY3R1cmFsZXMuIA0KDQo8YnI+DQoNCiMgQmlibGlvZ3JhZsOtYQ0KDQo8YnI+DQoNCkxvcyBkYXRvcyBsb3MgZGVzY2FyZ3XDqSBkZSBsYXMgc2lndWllbnRlcyBww6FnaW5hczoNCg0KKiBMb3MgZGF0b3MgYWN0dWFsaXphZG9zIGxvcyBkZXNjYXJndcOpIGVuIGVsIHNpZ3VpZW50ZSBbZW5sYWNlXShodHRwczovL3d3dy5jZGMuZ292L25jaHMvcHJlc3Nyb29tL25jaHNfcHJlc3NfcmVsZWFzZXMvMjAyMS8yMDIxMTExNy5odG0pDQoqIExvcyBkYXRvcyBkZWwgY29uanVudG8gZGUgRUVVVSBzZXBhcmFkbyBwb3IgY2F0ZWdvcsOtYXMgbG9zIGRlc2Nhcmd1w6kgZGVsIHNpZ3VpZW50ZSBbZW5sYWNlXShodHRwczovL3d3dy5kcnVnYWJ1c2UuZ292L2RydWctdG9waWNzL3RyZW5kcy1zdGF0aXN0aWNzL292ZXJkb3NlLWRlYXRoLXJhdGVzKQ0KKiBMb3MgZGF0b3MgZGUgbGEgcG9ibGFjacOzbiBkZSAyMDIxIGxvIGRlc2NhZ3XDqSBkZWwgc2lndWllbnRlIFtlbmxhY2VdKGh0dHBzOi8vd3d3LmNlbnN1cy5nb3YvZGF0YS90YWJsZXMvdGltZS1zZXJpZXMvZGVtby9wb3Blc3QvMjAyMHMtc3RhdGUtdG90YWwuaHRtbCkNCg0KTGEgaW5zcGlyYWNpw7NuIHF1ZSB0dXZlIGEgbGEgaG9yYSBkZSByZWFsaXphciBlc3RlIHRyYWJham8gZnVlIGVsIHNpZ3VpZW50ZSBbYXJ0w61jdWxvXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9PcGlvaWRfZXBpZGVtaWNfaW5fdGhlX1VuaXRlZF9TdGF0ZXMpIGRlIFdpa2lwZWRpYS4NCg0K