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í.


1. Introducción

En el presente trabajo se lleva a cabo un análisis de Austria, se lleva a cabo tanto un análisis económico para determinar como funciona el país economicamente y un analisis de la calidad de vida en Austria así como también un poco más a nivel turístico que es lo que se podría visitar tanto si decides ir de viaje como si decides irte a vivir.

1.1 Breve historia

Austria es uno de los 10 países más ricos del mundo en términos de PIB per cápita y ocupa el décimo primer puesto de los países con mayor PIB de la Unión Europea. Tiene una economía social de mercado bien desarrollada y un nivel de vida muy elevado. El sistema educativo austriaco presenta un nivel muy alto. Hasta hace pocos años, el acceso a la universidad era prácticamente gratuito (refiriéndose al estado económico). Hoy se debe pagar una cuota, que es baja si se compara con otros países. La calidad de vida en Austria es excepcional y cuenta con servicios sociales de primera calidad, tanto en previsión sanitaria como en compatibilidad entre el trabajo y la familia.

El sistema de seguridad social en Austria es amplio, obligatorio y financiado a través de impuestos. La seguridad social incluye prestaciones para todos los empleados y sus parientes en caso de asistencia médica, desempleo, baja por maternidad y jubilación, así como asistencia social pública para ciudadanos necesitados.

Marca

2.Datos

Los datos utilizados en el presente trabajo han sido extraídos de varias fuentes oficiales como el INE, el Eurostat y la página del Banco Mundial. Una vez extraído los datos ha sido necesario modificarlos y adaptarlos antes de poder hacer uso de ellos.

3.Análisis económico

3.1 TIPOS DE INTERÉS

austriatipo <- datos %>%
  select(año,tipointeres)

graficoaus <- ggplot(austriatipo,aes(año,tipointeres)) +
  geom_line(color= "navyblue", size = 2) +
  theme(axis.text.x = element_text(angle = 60, hjust = 1)) +
  labs(title = "Evolución de los tipos de interés",
       subtitle = "Austria 2000-2021",
       caption = "Datos extraídos de Eurostat",
       y = "mil. mill. $",
       x = "Año")
graficoaus

eeuutipo <- datos %>%
  select(año,tipointeresee)

graficoeeuu <- ggplot(eeuutipo,aes(año,tipointeresee)) +
  geom_line(color= "navyblue", size = 2) +
  theme(axis.text.x = element_text(angle = 60, hjust = 1)) +
  labs(title = "Evolución de los tipos de interés",
       subtitle = "EEUU 2011-2021",
       caption = "Datos extraídos de Eurostat",
       y = "mil. mill. $",
       x = "Año")
graficoeeuu

Se puede observar como la trayectoria de ambos países es paulatinamente opuesta. A partir del año 2011 ambos países experimentaron un descenso del tipo de interés pero dicho descenso es más significativo en la zona euro. Esto se debió a que en esa situación la crisis de 2008 afectó tanto a EEUU como a Europa, se buscaba estimular el crecimiento a través de la demanda y la inversión y a su vez llevar a la inflación a su objetivo, cercano al 2% anual. Sin embargo a partir del año 2015 la trayectoria de EEUU fue empezar a subir los tipos de interés mientras que Europa siguió en una situación bajista de tipos. Europa se divide entre quienes ruegan por la prolongación de los tipos bajos de interés y quienes ponen velas al BCE para que deje respirar a los bancos y a los ahorradores. BCE está atrapado en su política de tipos, pero posiblemente buscando opciones para hacer una transición ordenada de tipos negativos a tipos cero, lo que puede ser parecido si, efectivamente, se consiguiera hacer de forma ordenada y sin generar expectativas de inflación, pero no se trata de una tarea fácil. Mientras que buscan esa transición se prevé que la pandemia va a prolongar el periodo de bajos tipos de interés.

La Reserva Federal de Estados Unidos (Fed) aprobó en diciembre de 2015 , siete años después de la caída de Lehman Brothers, una subida de tipos de interés leve pero cargada de simbolismo. Fue la primera desde junio de 2006 y significa el punto final a una era de estímulos monetarios sin precedente.

3.2 TIPOS DE CAMBIO

austriacambio <- datos %>%
  select(año,tipocambio)

ggplot(austriacambio) +
  geom_line(aes(año, tipocambio),color= "blue") +
  geom_smooth(aes(año, tipocambio),color= "blue")+
  theme(axis.text.x = element_text(angle = 60, hjust = 1)) +
  labs(title = "Tipo de cambio",
       subtitle = "Alemania 2000-2019",
       y = "",
       x = "Año")+
  theme(
     panel.background = element_rect(fill ='#272635' ,
                                colour = '#272635',
                                size = 0.5, linetype = "solid"),
  plot.background = element_rect(fill ='#272635' ,
                                colour = '#272635',
                                size = 0.5, linetype = "solid"),
  panel.grid.major = element_line(size = 0.5, linetype = 'solid',
                                colour = '#CECECE'), 
  panel.grid.minor = element_line(size = 0.25, linetype = 'solid',
                                colour = '#CECECE'),
  axis.text.x =element_text(colour='#CECECE'),
  axis.text.y =element_text(colour='#CECECE'),
  plot.title = element_text(colour = '#CECECE'),
  axis.title.x = element_text(colour = "#CECECE"),
        axis.title.y = element_text(colour = "#CECECE")
  
  )

Se puede observar la evolución del tipo de cambio euro/dólar, durante todo ese periodo la bajada más drástica que tuvo fue en el periodo 2014-2015, 2014 fue el año de la moneda estadounidense; su acelerón habla de la robustez de la recuperación económica estadounidense frente a una Europa y un Japón renqueantes y en general, de un clima de incertidumbre que anima a los inversores a resguardarse en la moneda de referencia. El arranque de 2015 en los mercados viene determinado por un dólar caro. Teniendo esto en cuenta podemos observar como 2014 fue el año del cambio y se puede relacionar con la tabla de los tipos de interés ya que mientras el ritmo de expansión se aceleró con fuerza en el 2T’14 en EE.UU y la economía continuó creciendo con fuerza en el tramo final de 2014 y en 2015, la recuperación de la Eurozona se frenó de forma significativa. El BCE empezó a aplicar una serie de medidas de política monetaria sin precedentes en la UEM. Además de haber situado los tipos de interés en mínimos históricos, el BCE está proporcionando financiación muy barata a las entidades que ofrezcan crédito a través de los TLTROs mientras que la FED por el contrario,diseñó la estrategia de normalización de su política monetaria.

3.3 PIB

pibaus <- datos %>%
  select(año,pib,pibee)

grafpib <- ggplot( data= pibaus, aes(x=año, y=pib)) 
  
 grafpib +  geom_line() +
    geom_point() +
    ggtitle("Evolución del PIB 2000-2020") +
   theme_solarized() +
    ylab("Pib") +
    transition_reveal(año)+
      labs(subtitle = "En millones")

Como refleja el gráfico, Austria ha experimentado un aumento sostenido del PIB a lo largo de los años, en cambio, a partir de finales de 2019 se puede apreciar una bajada ocasionada por el COVID19 . Cuando el PIB de un país aumenta es una buena señal para la economía y afecta a todas las personas del territorio. Dicho aumento significa que están aumentando de forma general el consumo, el gasto y la inversión en Austria. Esto suele desencadenar un efecto positivo en la economía, ya que estos aumentos hacen crecer los ingresos de las empresas, las familias y las administraciones, las cuales tendrán más capital para invertir y crear empleo. Lo que de nuevo hace crecer el consumo y el gasto (al haber más personas con capacidad de consumir). Es por ello que cuando sube el PIB suelen crecer el empleo y aumentar los salarios de los trabajadores.

3.4 BALANZA DE PAGOS

balanzapagos <- balanzacompleta %>%
  select(GEO,TIME,Value)%>%
  filter(TIME %in% c(2019,2020))

DT::datatable(balanzapagos)

3.5 INFLACIÓN

inflacion <- datos %>%
 select(año,inflacion)

graficoin <- inflacion %>%
  ggplot( aes(año, inflacion, size = 0.75, color= "orange")) + 
  geom_point() +
  theme_bw()+ 
  theme(legend.position = "none") +
  labs(x = NULL) + labs(title= "Austria") +
  theme(panel.background = element_rect(fill = 'wheat1', colour = 'red')) + theme(panel.background = element_rect(fill = "#C9DAF1"),
    plot.background = element_rect(fill = "#C9DAF1",
        colour = "#C9DAF1"))
ggplotly(graficoin)
inflacioneeuu <- datos %>%
 select(año,inflacionee)


graficoinee <- inflacioneeuu %>%
  ggplot( aes(año, inflacionee, size = 0.75, color= "orange")) +
  geom_point() +
  theme_bw()+ 
  theme(legend.position = "none") +
  labs(x = NULL) + labs(title= "EEUU") +
  theme(panel.background = element_rect(fill = 'wheat1', colour = 'red')) + theme(panel.background = element_rect(fill = "#C9DAF1"),
    plot.background = element_rect(fill = "#C9DAF1",
        colour = "#C9DAF1"))

ggplotly(graficoinee)

Como podemos observar la inflación de 2009 a 2011 tanto en Austria como en EEUU han ido en aumento, esto quiere decir que los bienes y servicios en el país se han vuelto cada vez más caros a lo largo de los años. A partir de 2011 la evolución de la inflación en Austria ha sido más paulatina que en EEUU, cuya evolución tiene más picos. Austria a partir de 2011 ha conseguido mantener la inflación (más o menos) alrededor del objetivo del BCE (2%).

4. ¿Se vive bien en Austria?

4.1 EMPLEO TEMPORAL


empleopaises <- empleotemporal %>%  filter(GEO %in% c("Austria","Spain", "Italy", "Germany", "United Kingdom", "Grecee","France","Estonia", "Malta")) %>%
   select(TIME,GEO,Value)

ggplot(subset(empleopaises), aes(reorder(GEO,Value),Value,fill=Value)) + geom_bar(stat = "identity")  + theme(legend.position = "none")+ggtitle("Empleo temporal") + xlab("Paises") + ylab("Porcentaje de empleo temporal")  + coord_flip() + theme(panel.background = element_rect(fill = "#D9E0EB"),
    plot.background = element_rect(fill = ("#D9E0EB")) + theme(axis.title.x=element_blank()),
        axis.text.x=element_blank(),
        axis.ticks.x=element_blank())

 

Como se puede observar Austria es el país con mayor empleo temporal lo cual puede tener dos interpretaciones, por una parte que es un país bastante generador de empleo lo cual sería un indicador relativamente bueno, o por el contrario puede suponer que Austria tiene mas empleo temporal que fijo lo cual pone bastante en riesgo a los trabajadores y genera empleos precarios. Ante esta disyuntiva he decidido sacar otra gráfica que hace referencia a la exclusión social.

4.2 RIESGO DE EXCLUSIÓN SOCIAL

 rexclusion <- exclusion %>%
  select(GEO,Value,TIME)%>% filter(GEO %in% c("Austria","Spain", "Italy", "Germany", "United Kingdom", "Grecee","France","Estonia", "Malta")) 

riesgo <- ggplot(rexclusion, aes(x=TIME, y=Value, group=GEO, color=GEO)) +
  geom_point(alpha=0.6) +
  geom_abline(intercept=0, slope=1, linetype="dashed") +
  geom_smooth(method="lm", se=FALSE) +
  labs(title = "Riesgo exclusión social", subtitle = "Europa")  +
  theme(plot.title = element_text(hjust = 0.5)) +
  guides(color=guide_legend(reverse=TRUE))  + theme(axis.title.y=element_blank(),
        axis.text.y=element_blank(),
        axis.ticks.y=element_blank())
   
 ggplotly(riesgo)

En este gráfico Austria es el país con menor riesgo de exclusión social, lo que implica que tiene los suficientes recursos para ofrecer a sus ciudadanos sin que estos padezcan necesidades, lo cual implica que además de generar empleo como hemos visto arriba, de este gráfico se extrae el hecho de que a pesar de que genera mucho empleo temporal el cual genera más riesgo de desempleo, las compensaciones y la calidad de vida que ofrece a sus ciudadanos es muy alta por lo que se podría considerar la cantidad de empleo temporal como algo positivo. ## 4.3 DESEMPLEO

desempleoeu <- desempleoo %>%
  select(TIME,GEO,Value)%>%
  slice_max(Value, n = 9)
  desempleoeu
TIME GEO Value
2021Q3 Spain 14.6
2021Q3 Italy 8.9
2021Q3 France 7.9
2021Q3 Finland 6.9
2021Q3 Belgium 6.5
2021Q3 Estonia 5.7
2021Q3 Ireland 5.7
2021Q3 Austria 5.3
2021Q3 Denmark 4.8

dfgrafico1 <- ggplot(desempleoeu, aes(GEO, color=Value)) + 
  geom_bar(fill=NA) + 
  coord_flip() +
  theme(panel.background = element_rect(fill = 'lightblue1')) + theme(panel.background = element_rect(fill = "#7FFFD4"),
    plot.background = element_rect(fill = "#7FFFD4"),
    legend.background = element_rect(fill = "#7FFFD4"))

ggplotly(dfgrafico1)

Austria junto con Alemania es el país con menos desempleo, se trata de un país pequeño el cual ha sabido aprovechar sus ventajas y a ha sabido destacar en aspectos muy importantes como lo es la educación. Partiendo de la premisa de que los jovenes que terminan sus estudios salen muy preparados para introducirse en el mercado laboral, tal y como lo demuestran los informes PISA, en el cual suelen destacar bastante.

5 Sector turístico

5.1 ¿QUE SE PUEDE VISITAR EN AUSTRIA.

La Abadía de Melk

Marca Justo cuando piensas que no hay nada más que ver en Austria que podría sorprenderte, que ya lo habías visto todo, es cuando descubres que fuera de las grandes ciudades del país te espera todo un mundo de posibilidades: desde palacios, a abadías, bosques, pequeños pueblecitos, montañas o lagos. A continuación, queremos centrarnos en estos, y no podíamos empezar de otra forma que con la abadía de Melk, situada a unos 85 kilómetros de Viena y considerada una auténtica obra maestra del barroco. Y no es para menos, se trata de una fabulosa abadía benedictina fundada en el año 1089 sobre una pequeña colina desde que la que se divisa el Danubio y el valle de Wachau. Precisamente este último, declarado Patrimonio de la Humanidad, es toda una visita imprescindible que hacer en Austria. Montañas, naturaleza, bellos paisajes, actividades al aire libre ¿hay algo más que pedir?

Mauthausen

Marca El campo de concentración de Mauthausen fue un grupo de campos de concentración nazis situados en torno a la pequeña empresa y cantera, de la población de Mauthausen en Austria, a unos 20 km de Linz. Si bien no podemos destacar este lugar por belleza, no podemos dejar de pensar en él como un lugar imprescindible para conocer parte de la historia del mundo. En el campo de concentración de Mauthausen miles de presos fueron muertos, muchos de ellos abatidos a tiros, mediante inyecciones letales o asesinados con gas letal, aunque la mayoría de ellos fallecieron por la explotación que sufrieron en el trabajo, que ejecutaban sin ningún tipo de escrúpulos. Se cuenta que en Mauthausen perdieron la vida unos 100000 presos.

Salzburgo

Marca Ubicada justo en la frontera con Alemania, Salzburgo fue el lugar de nacimiento de Mozart. El famoso compositor es el personaje más destacado de la historia del país. De hecho, una de las mejores cosas que ver en Salzburgo es la casa donde nació y creció este genio de la música.

Pero Salzburgo es mucho más que Mozart. Solo falta abrir los ojos y observar el paisaje alpino que la rodea. Visitar Salzburgo en un día es fácil. No te pierdas la famosa fortaleza de Hohensalzburg o las calles de su centro histórico. Por algún motivo es Patrimonio de la Humanidad por la UNESCO.

Wattens

Marca ¿Quién no conoce la famosa marca Swarovski? En Wattens podemos encontrar Los Mundos de Cristal, una de las atracciones turísticas más visitadas de Austria donde podemos encontrar 14 salas en las que se guardan algunas de las obras más maravillosas y brillantes de Swarovski.

Carretera del Grossglockner

Marca Si hay un lugar imperdible en Austria ese es la Carretera del Grossglockner. Te aconsejamos ir con tiempo, ya que únicamente recorrerla te llevará unas cuantas horas, sin contar las paradas que querrás hacer para disfrutar de uno de los paisajes más impresionantes de Austria.

Graz

Marca Graz es la capital del estado de Estiria, en el sur de Austria. En el corazón de la ciudad se encuentra Hauptplatz, la plaza central del casco antiguo medieval.A orillas del río Mur nos encontramos con Graz, la capital de Estiria y una de las ciudades menos conocidas de Austria. Sólo por disfrutar las vistas de la ciudad desde su increíble Torre del Reloj, ya merece la pena hacer una parada en la ciudad.

Valle de Stubai

Marca Estar en el Tirol y no venir al Valle de Stubai es como estar en Roma y no conocer en Coliseo. Paisajes con cientos de tonalidades de verde, salpicados de casitas tradicionales adornadas con flores y un horizonte nevado nos esperan como telón de fondo en esta zona de Austria.

6. Conclusión

La intención de hacer este trabajo ha sido que se conozca un poco más el país ya que al ser un país pequeño no suele ser uno de los destinos ni turisticos ni de negocios más conocidos. Es por eso que he querido plasmar como Austria a pesar de ser un país pequeño cuenta con una tasa de inflación relativamente pequeña en comparación con países de la UE. Por otra parte, a la hora de decidir ir a vivir a Austria hay que conocer de antemano las condiciones laborales y si en ese país hay o no posibilidad de empleo y en este caso, se ha demostrado que si se tiene la idea de ir a trabajar fuera, Austria podria ser un buen candidato. En conclusión, a nivel turistico cuenta con una gran cantidad de monumentos y sobretodo naturaleza para poder visitar y disfrutar de las vistas y por otra parte a nivel economico destaca bastante.

LS0tDQp0aXRsZTogIkFuw6FsaXNpcyBlY29uw7NtaWNvIGF1c3Ryw61hY28iDQpzdWJ0aXRsZTogIm1pcmVpYShtaXlhbm9ALnV2LmVzKSIgDQphdXRob3I6ICJVbml2ZXJzaXRhdCBkZSBWYWzDqG5jaWEiDQpkYXRlOiAiRGljaWVtYnJlIGRlIDIwMjEgKGFjdHVhbGl6YWRvIGVsIGByIGZvcm1hdChTeXMudGltZSgpLCAnJWQtJW0tJVknKWApIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgICNjc3M6ICIuL2Fzc2V0cy9teV9jc3NfZmlsZS5jc3MiDQogICAgc2VsZl9jb250YWluZWQ6IHRydWUNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQogICAgY29kZV9mb2xkaW5nOiAiaGlkZSINCiAgICB0aGVtZTogcGFwZXINCiAgICBoaWdobGlnaHQ6IHRleHRtYXRlIA0KICAgIHRvYzogdHJ1ZQ0KICAgIHRvY19kZXB0aDogMyANCiAgICB0b2NfZmxvYXQ6IA0KICAgICAgY29sbGFwc2VkOiB0cnVlDQogICAgICBzbW9vdGhfc2Nyb2xsOiB0cnVlDQogICAgbnVtYmVyX3NlY3Rpb25zOiBmYWxzZQ0KICAgIGRmX3ByaW50OiBrYWJsZQ0KZWRpdG9yX29wdGlvbnM6IA0KICBjaHVua19vdXRwdXRfdHlwZTogY29uc29sZQ0KLS0tDQoNCmBgYHtjc3MsIGVjaG8gPSBGQUxTRX0NCi5jb2x1bW5zIHtkaXNwbGF5OmZsZXg7fQ0KaDEudGl0bGUge2ZvbnQtc2l6ZTogNDAgcHg7Y29sb3I6ICMxRTFFMUV9DQpoMSB7Y29sb3I6IyMxRTFFMUU7IGZvbnQtc2l6ZTogMzBweCA7Zm9udC1mYW1pbHk6IEFyaWFsIEJsYWNrfQ0KaDJ7Y29sb3I6ICMxRTFFMUU7IGZvbnQtc2l6ZTogMjBweDsgZm9udC1mYW1pbHk6IEFyaWFsfQ0KDQpib2R5IHsgYmFja2dyb3VuZC1jb2xvcjogI0E5RDJEQ30NCmEge2NvbG9yOiAjMDEwMTAxO30NCi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlLCAubGlzdC1ncm91cC1pdGVtLmFjdGl2ZTpmb2N1cywgLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmU6aG92ZXIgew0KICAgIHotaW5kZXg6IDI7DQogICAgY29sb3I6IDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjOUFEMUQwOw0KICAgIGJvcmRlci1jb2xvcjogcGFsZXJlZDsNCn0NCi5uYXYtcGlsbHMgPiBsaS5hY3RpdmUgPiBhLCAubmF2LXBpbGxzID4gbGkuYWN0aXZlID4gYTpob3ZlciwgLm5hdi1waWxscyA+IGxpLmFjdGl2ZSA+IA0KDQpgYGANCg0KYGBge3IgY2h1bmstc2V0dXAsIGluY2x1ZGUgPSBGQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSwgZXZhbCA9IFRSVUUsIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFLCANCiAgICAgICAgICAgICAgICAgICAgICAjcmVzdWx0cyA9ICJob2xkIiwNCiAgICAgICAgICAgICAgICAgICAgICBjYWNoZSA9IEZBTFNFLCBjYWNoZS5wYXRoID0gIi9jYWNoZXMvIiwgY29tbWVudCA9ICIjPiIsDQogICAgICAgICAgICAgICAgICAgICAgI2ZpZy53aWR0aCA9IDcsICNmaWcuaGVpZ2h0PSA3LCAgIA0KICAgICAgICAgICAgICAgICAgICAgICNvdXQud2lkdGggPSA3LCBvdXQuaGVpZ2h0ID0gNywNCiAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZSA9IFRSVUUsICBmaWcuc2hvdyA9ICJob2xkIiwNCiAgICAgICAgICAgICAgICAgICAgICBmaWcuYXNwID0gMC42MjgsIG91dC53aWR0aCA9ICI3NSUiLCBmaWcuYWxpZ24gPSAiY2VudGVyIikNCmBgYA0KDQpgYGB7ciBvcHRpb25zLXNldHVwLCBpbmNsdWRlID0gRkFMU0V9DQpvcHRpb25zKHNjaXBlbiA9IDk5OSkgIy0gcGFyYSBxdWl0YXIgbGEgbm90YWNpw7NuIGNpZW50w61maWNhDQpvcHRpb25zKCJ5YW1sLmV2YWwuZXhwciIgPSBUUlVFKQ0KYGBgDQoNCmBgYHtyIGtsaXBweSwgZWNobyA9IEZBTFNFfQ0Ka2xpcHB5OjprbGlwcHkocG9zaXRpb24gPSBjKCJ0b3AiLCAicmlnaHQiKSkgIy0gcmVtb3Rlczo6aW5zdGFsbF9naXRodWIoInJsZXN1ci9rbGlwcHkiKQ0KYGBgDQoNCjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnkiPjxkaXYvPg0KPGhyIGNsYXNzPSJsaW5lYS1ibGFjayI+DQoNCjwhLS0gRWwgcMOhcnJhZm8gZGUgYWJham8gaGFzIGRlIGRlamFybG8gY2FzaSBpZ3VhbCwgc29sbyBIQVMgZGUgU1VTVElUVUlSICJwZXJlenA0NCIgcG9yIHR1IHVzdWFyaW8gZGUgR2l0aHViLS0+DQpUcmFiYWpvIGVsYWJvcmFkbyBwYXJhIGxhIGFzaWduYXR1cmEgIlByb2dyYW1hY2nDs24geSBtYW5lam8gZGUgZGF0b3MgZW4gbGEgZXJhIGRlbCBCaWcgRGF0YSIgZGUgbGEgVW5pdmVyc2l0YXQgZGUgVmFsw6huY2lhIGR1cmFudGUgZWwgY3Vyc28gMjAyMS0yMDIyLiBFbCByZXBvIGRlbCB0cmFiYWpvIGVzdMOhIFthcXXDrV0oaHR0cHM6Ly9naXRodWIuY29tL21pcmVpYXlhbmd1ZXovdHJhYmFqb19CaWdEYXRhKXt0YXJnZXQ9Il9ibGFuayJ9LiANCg0KPCEtLSBFbCBww6FycmFmbyBkZSBhYmFqbyBoYXMgZGUgZGVqYXJsbyBleGFjdGFtZW50ZSBpZ3VhbCwgTk8gSEFTIERFIENBTUJJQVIgTkFEQS0tPg0KDQpMYSBww6FnaW5hIHdlYiBkZSBsYSBhc2lnbmF0dXJhIHkgbG9zIHRyYWJham9zIGRlIG1pcyBjb21wYcOxZXJvcyBwdWVkZW4gdmVyc2UgW2FxdcOtXShodHRwczovL3BlcmV6cDQ0LmdpdGh1Yi5pby9pbnRyby1kcy0yMS0yMi13ZWIvMDctdHJhYmFqb3MuaHRtbCl7dGFyZ2V0PSJfYmxhbmsifS4NCg0KDQo8aHIgY2xhc3M9ImxpbmVhLXJlZCI+DQoNCiMgWzEuIEludHJvZHVjY2nDs25dey52ZXJkZWNpdG99DQpFbiBlbCBwcmVzZW50ZSB0cmFiYWpvIHNlIGxsZXZhIGEgY2FibyB1biBhbsOhbGlzaXMgZGUgQXVzdHJpYSwgc2UgbGxldmEgYSBjYWJvIHRhbnRvIHVuIGFuw6FsaXNpcyBlY29uw7NtaWNvIHBhcmEgZGV0ZXJtaW5hciBjb21vIGZ1bmNpb25hIGVsIHBhw61zIGVjb25vbWljYW1lbnRlIHkgdW4gYW5hbGlzaXMgZGUgbGEgY2FsaWRhZCBkZSB2aWRhIGVuIEF1c3RyaWEgYXPDrSBjb21vIHRhbWJpw6luIHVuIHBvY28gbcOhcyBhIG5pdmVsIHR1csOtc3RpY28gcXVlIGVzIGxvIHF1ZSBzZSBwb2Ryw61hIHZpc2l0YXIgdGFudG8gc2kgZGVjaWRlcyBpciBkZSB2aWFqZSBjb21vIHNpIGRlY2lkZXMgaXJ0ZSBhIHZpdmlyLiANCg0KDQojIyAxLjEgQnJldmUgaGlzdG9yaWEgDQpBdXN0cmlhIGVzIHVubyBkZSBsb3MgMTAgcGHDrXNlcyBtw6FzIHJpY29zIGRlbCBtdW5kbyBlbiB0w6lybWlub3MgZGUgUElCIHBlciBjw6FwaXRhIHkgb2N1cGEgZWwgZMOpY2ltbyBwcmltZXIgcHVlc3RvIGRlIGxvcyBwYcOtc2VzIGNvbiBtYXlvciBQSUIgZGUgbGEgVW5pw7NuIEV1cm9wZWEuIFRpZW5lIHVuYSBlY29ub23DrWEgc29jaWFsIGRlIG1lcmNhZG8gYmllbiBkZXNhcnJvbGxhZGEgeSB1biBuaXZlbCBkZSB2aWRhIG11eSBlbGV2YWRvLiANCkVsIHNpc3RlbWEgZWR1Y2F0aXZvIGF1c3RyaWFjbyBwcmVzZW50YSB1biBuaXZlbCBtdXkgYWx0by4gSGFzdGEgaGFjZSBwb2NvcyBhw7FvcywgZWwgYWNjZXNvIGEgbGEgdW5pdmVyc2lkYWQgZXJhIHByw6FjdGljYW1lbnRlIGdyYXR1aXRvIChyZWZpcmnDqW5kb3NlIGFsIGVzdGFkbyBlY29uw7NtaWNvKS4gSG95IHNlIGRlYmUgcGFnYXIgdW5hIGN1b3RhLCBxdWUgZXMgYmFqYSBzaSBzZSBjb21wYXJhIGNvbiBvdHJvcyBwYcOtc2VzLg0KTGEgY2FsaWRhZCBkZSB2aWRhIGVuIEF1c3RyaWEgZXMgZXhjZXBjaW9uYWwgeSBjdWVudGEgY29uIHNlcnZpY2lvcyBzb2NpYWxlcyBkZSBwcmltZXJhIGNhbGlkYWQsIHRhbnRvIGVuIHByZXZpc2nDs24gc2FuaXRhcmlhIGNvbW8gZW4gY29tcGF0aWJpbGlkYWQgZW50cmUgZWwgdHJhYmFqbyB5IGxhIGZhbWlsaWEuDQoNCkVsIHNpc3RlbWEgZGUgc2VndXJpZGFkIHNvY2lhbCBlbiBBdXN0cmlhIGVzIGFtcGxpbywgb2JsaWdhdG9yaW8geSBmaW5hbmNpYWRvIGEgdHJhdsOpcyBkZSBpbXB1ZXN0b3MuIExhIHNlZ3VyaWRhZCBzb2NpYWwgaW5jbHV5ZSBwcmVzdGFjaW9uZXMgcGFyYSB0b2RvcyBsb3MgZW1wbGVhZG9zIHkgc3VzIHBhcmllbnRlcyBlbiBjYXNvIGRlIGFzaXN0ZW5jaWEgbcOpZGljYSwgZGVzZW1wbGVvLCBiYWphIHBvciBtYXRlcm5pZGFkIHkganViaWxhY2nDs24sIGFzw60gY29tbyBhc2lzdGVuY2lhIHNvY2lhbCBww7pibGljYSBwYXJhIGNpdWRhZGFub3MgbmVjZXNpdGFkb3MuDQoNCg0KIVtNYXJjYV0oLi9pbWFnZW5lcy9hdXN0cmlhLnBuZykNCg0KIyAyLkRhdG9zDQpMb3MgZGF0b3MgdXRpbGl6YWRvcyBlbiBlbCBwcmVzZW50ZSB0cmFiYWpvIGhhbiBzaWRvIGV4dHJhw61kb3MgZGUgdmFyaWFzIGZ1ZW50ZXMgb2ZpY2lhbGVzIGNvbW8gZWwgSU5FLCBlbCBFdXJvc3RhdCB5IGxhIHDDoWdpbmEgZGVsIEJhbmNvIE11bmRpYWwuIA0KVW5hIHZleiBleHRyYcOtZG8gbG9zIGRhdG9zIGhhIHNpZG8gbmVjZXNhcmlvIG1vZGlmaWNhcmxvcyB5IGFkYXB0YXJsb3MgYW50ZXMgZGUgcG9kZXIgaGFjZXIgdXNvIGRlIGVsbG9zLg0KDQoNCmBgYHtyIHBhY2thZ2VzLXNldHVwLCBpbmNsdWRlID0gRkFMU0V9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoZ2dwbG90MikgDQpsaWJyYXJ5KHBsb3RseSkgDQpsaWJyYXJ5KGdyaWQpIA0KbGlicmFyeShSQ29sb3JCcmV3ZXIpIA0KbGlicmFyeShjb3JycGxvdCkNCmxpYnJhcnkoZHBseXIpIA0KbGlicmFyeSh0aWR5cikgDQpsaWJyYXJ5KGdnYW5pbWF0ZSkNCmxpYnJhcnkoaHJicnRoZW1lcykNCmxpYnJhcnkoZ3QpDQpsaWJyYXJ5KHBhdGNod29yaykNCmxpYnJhcnkodmlyaWRpcykNCmxpYnJhcnkodmlyaWRpc0xpdGUpDQpsaWJyYXJ5KERUKQ0KbGlicmFyeShnZ3RoZW1lcykNCmxpYnJhcnkobGVhZmxldCkNCg0KZGF0b3MgPC0gcmlvOjppbXBvcnQoIi4vZGF0b3MvYXVzeWV1LmNzdiIpDQpjb25zdW1hdXMgPC0gcmlvOjppbXBvcnQoIi4vZGF0b3MvY29uc3Vtby5jc3YiKQ0KZXhpbXAgPC0gcmlvOjppbXBvcnQoIi4vZGF0b3MvZXhpbXAuY3N2IikNCmJhbGFuemEgPC0gcmlvOjppbXBvcnQoIi4vZGF0b3MvYmFsYW5wYWdhc3V0cmlhLmNzdiIpDQpiYWxhbnphY29tcGxldGEgPC0gcmlvOjppbXBvcnQoIi4vZGF0b3MvYmFsYW56YS5jc3YiKQ0KZW1wbGVvdGVtcG9yYWw8LSByaW86OmltcG9ydCgiLi9kYXRvcy9lbXBsZW90ZW1wb3JhbC5jc3YiKQ0KZXhjbHVzaW9uPC0gcmlvOjppbXBvcnQoIi4vZGF0b3Mvcmllc2dvZXhjbHVzaW9uLmNzdiIpDQpkZXNlbXBsZW9vIDwtIHJpbzo6aW1wb3J0KCIuL2RhdG9zL2Rlc2VtcGxlby5jc3YiKQ0KDQpgYGANCg0KIyAzLkFuw6FsaXNpcyBlY29uw7NtaWNvDQojIyAzLjEgVElQT1MgREUgSU5URVLDiVMNCg0KYGBge3J9DQphdXN0cmlhdGlwbyA8LSBkYXRvcyAlPiUNCiAgc2VsZWN0KGHDsW8sdGlwb2ludGVyZXMpDQoNCmdyYWZpY29hdXMgPC0gZ2dwbG90KGF1c3RyaWF0aXBvLGFlcyhhw7FvLHRpcG9pbnRlcmVzKSkgKw0KICBnZW9tX2xpbmUoY29sb3I9ICJuYXZ5Ymx1ZSIsIHNpemUgPSAyKSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNjAsIGhqdXN0ID0gMSkpICsNCiAgbGFicyh0aXRsZSA9ICJFdm9sdWNpw7NuIGRlIGxvcyB0aXBvcyBkZSBpbnRlcsOpcyIsDQogICAgICAgc3VidGl0bGUgPSAiQXVzdHJpYSAyMDAwLTIwMjEiLA0KICAgICAgIGNhcHRpb24gPSAiRGF0b3MgZXh0cmHDrWRvcyBkZSBFdXJvc3RhdCIsDQogICAgICAgeSA9ICJtaWwuIG1pbGwuICQiLA0KICAgICAgIHggPSAiQcOxbyIpDQpncmFmaWNvYXVzDQoNCmVldXV0aXBvIDwtIGRhdG9zICU+JQ0KICBzZWxlY3QoYcOxbyx0aXBvaW50ZXJlc2VlKQ0KDQpncmFmaWNvZWV1dSA8LSBnZ3Bsb3QoZWV1dXRpcG8sYWVzKGHDsW8sdGlwb2ludGVyZXNlZSkpICsNCiAgZ2VvbV9saW5lKGNvbG9yPSAibmF2eWJsdWUiLCBzaXplID0gMikgKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDYwLCBoanVzdCA9IDEpKSArDQogIGxhYnModGl0bGUgPSAiRXZvbHVjacOzbiBkZSBsb3MgdGlwb3MgZGUgaW50ZXLDqXMiLA0KICAgICAgIHN1YnRpdGxlID0gIkVFVVUgMjAxMS0yMDIxIiwNCiAgICAgICBjYXB0aW9uID0gIkRhdG9zIGV4dHJhw61kb3MgZGUgRXVyb3N0YXQiLA0KICAgICAgIHkgPSAibWlsLiBtaWxsLiAkIiwNCiAgICAgICB4ID0gIkHDsW8iKQ0KZ3JhZmljb2VldXUNCmBgYA0KU2UgcHVlZGUgb2JzZXJ2YXIgY29tbyBsYSB0cmF5ZWN0b3JpYSBkZSBhbWJvcyBwYcOtc2VzIGVzIHBhdWxhdGluYW1lbnRlIG9wdWVzdGEuIEEgcGFydGlyIGRlbCBhw7FvIDIwMTEgYW1ib3MgcGHDrXNlcyBleHBlcmltZW50YXJvbiB1biBkZXNjZW5zbyBkZWwgdGlwbyBkZSBpbnRlcsOpcyBwZXJvIGRpY2hvIGRlc2NlbnNvIGVzIG3DoXMgc2lnbmlmaWNhdGl2byBlbiBsYSB6b25hIGV1cm8uIEVzdG8gc2UgZGViacOzIGEgcXVlIGVuIGVzYSBzaXR1YWNpw7NuIGxhIGNyaXNpcyBkZSAyMDA4IGFmZWN0w7MgdGFudG8gYSBFRVVVIGNvbW8gYSBFdXJvcGEsICBzZSBidXNjYWJhIGVzdGltdWxhciBlbCBjcmVjaW1pZW50byBhIHRyYXbDqXMgZGUgbGEgZGVtYW5kYSB5IGxhIGludmVyc2nDs24gIHkgYSBzdSB2ZXogbGxldmFyIGEgbGEgaW5mbGFjacOzbiBhIHN1IG9iamV0aXZvLCBjZXJjYW5vIGFsIDIlIGFudWFsLg0KU2luIGVtYmFyZ28gYSBwYXJ0aXIgZGVsIGHDsW8gMjAxNSBsYSB0cmF5ZWN0b3JpYSBkZSBFRVVVIGZ1ZSBlbXBlemFyIGEgc3ViaXIgbG9zIHRpcG9zIGRlIGludGVyw6lzIG1pZW50cmFzIHF1ZSBFdXJvcGEgc2lndWnDsyBlbiB1bmEgc2l0dWFjacOzbiBiYWppc3RhIGRlIHRpcG9zLiANCkV1cm9wYSBzZSBkaXZpZGUgZW50cmUgcXVpZW5lcyBydWVnYW4gcG9yIGxhIHByb2xvbmdhY2nDs24gZGUgbG9zIHRpcG9zIGJham9zIGRlIGludGVyw6lzIHkgcXVpZW5lcyBwb25lbiB2ZWxhcyBhbCBCQ0UgcGFyYSBxdWUgZGVqZSByZXNwaXJhciBhIGxvcyBiYW5jb3MgeSBhIGxvcyBhaG9ycmFkb3Jlcy4gQkNFIGVzdMOhIGF0cmFwYWRvIGVuIHN1IHBvbMOtdGljYSBkZSB0aXBvcywgcGVybyBwb3NpYmxlbWVudGUgYnVzY2FuZG8gb3BjaW9uZXMgcGFyYSBoYWNlciB1bmEgdHJhbnNpY2nDs24gb3JkZW5hZGEgZGUgdGlwb3MgbmVnYXRpdm9zIGEgdGlwb3MgY2VybywgbG8gcXVlIHB1ZWRlIHNlciBwYXJlY2lkbyBzaSwgZWZlY3RpdmFtZW50ZSwgc2UgY29uc2lndWllcmEgaGFjZXIgZGUgZm9ybWEgb3JkZW5hZGEgeSBzaW4gZ2VuZXJhciBleHBlY3RhdGl2YXMgZGUgaW5mbGFjacOzbiwgcGVybyBubyBzZSB0cmF0YSBkZSB1bmEgdGFyZWEgZsOhY2lsLiBNaWVudHJhcyBxdWUgYnVzY2FuIGVzYSB0cmFuc2ljacOzbiBzZSBwcmV2w6kgcXVlIGxhIHBhbmRlbWlhIHZhIGEgcHJvbG9uZ2FyIGVsIHBlcmlvZG8gZGUgYmFqb3MgdGlwb3MgZGUgaW50ZXLDqXMuICANCg0KTGEgUmVzZXJ2YSBGZWRlcmFsIGRlIEVzdGFkb3MgVW5pZG9zIChGZWQpIGFwcm9iw7MgZW4gZGljaWVtYnJlIGRlIDIwMTUgLCBzaWV0ZSBhw7FvcyBkZXNwdcOpcyBkZSBsYSBjYcOtZGEgZGUgTGVobWFuIEJyb3RoZXJzLCB1bmEgc3ViaWRhIGRlIHRpcG9zIGRlIGludGVyw6lzIGxldmUgcGVybyBjYXJnYWRhIGRlIHNpbWJvbGlzbW8uIEZ1ZSAgbGEgcHJpbWVyYSBkZXNkZSBqdW5pbyBkZSAyMDA2IHkgc2lnbmlmaWNhIGVsIHB1bnRvIGZpbmFsIGEgdW5hIGVyYSBkZSBlc3TDrW11bG9zIG1vbmV0YXJpb3Mgc2luIHByZWNlZGVudGUuDQoNCg0KDQojIyAzLjIgVElQT1MgREUgQ0FNQklPDQoNCmBgYHtyLCB3YXJuaW5nPUZBTFNFfQ0KYXVzdHJpYWNhbWJpbyA8LSBkYXRvcyAlPiUNCiAgc2VsZWN0KGHDsW8sdGlwb2NhbWJpbykNCg0KZ2dwbG90KGF1c3RyaWFjYW1iaW8pICsNCiAgZ2VvbV9saW5lKGFlcyhhw7FvLCB0aXBvY2FtYmlvKSxjb2xvcj0gImJsdWUiKSArDQogIGdlb21fc21vb3RoKGFlcyhhw7FvLCB0aXBvY2FtYmlvKSxjb2xvcj0gImJsdWUiKSsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxKSkgKw0KICBsYWJzKHRpdGxlID0gIlRpcG8gZGUgY2FtYmlvIiwNCiAgICAgICBzdWJ0aXRsZSA9ICJBbGVtYW5pYSAyMDAwLTIwMTkiLA0KICAgICAgIHkgPSAiIiwNCiAgICAgICB4ID0gIkHDsW8iKSsNCiAgdGhlbWUoDQogICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9JyMyNzI2MzUnICwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyMyNzI2MzUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gMC41LCBsaW5ldHlwZSA9ICJzb2xpZCIpLA0KICBwbG90LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9JyMyNzI2MzUnICwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyMyNzI2MzUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gMC41LCBsaW5ldHlwZSA9ICJzb2xpZCIpLA0KICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9saW5lKHNpemUgPSAwLjUsIGxpbmV0eXBlID0gJ3NvbGlkJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyNDRUNFQ0UnKSwgDQogIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2xpbmUoc2l6ZSA9IDAuMjUsIGxpbmV0eXBlID0gJ3NvbGlkJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyNDRUNFQ0UnKSwNCiAgYXhpcy50ZXh0LnggPWVsZW1lbnRfdGV4dChjb2xvdXI9JyNDRUNFQ0UnKSwNCiAgYXhpcy50ZXh0LnkgPWVsZW1lbnRfdGV4dChjb2xvdXI9JyNDRUNFQ0UnKSwNCiAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAnI0NFQ0VDRScpLA0KICBheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoY29sb3VyID0gIiNDRUNFQ0UiKSwNCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICIjQ0VDRUNFIikNCiAgDQogICkNCg0KYGBgDQoNClNlIHB1ZWRlIG9ic2VydmFyIGxhIGV2b2x1Y2nDs24gZGVsIHRpcG8gZGUgY2FtYmlvIGV1cm8vZMOzbGFyLCBkdXJhbnRlIHRvZG8gZXNlIHBlcmlvZG8gbGEgYmFqYWRhIG3DoXMgZHLDoXN0aWNhIHF1ZSB0dXZvIGZ1ZSBlbiBlbCBwZXJpb2RvIDIwMTQtMjAxNSwgMjAxNCBmdWUgZWwgYcOxbyBkZSBsYSBtb25lZGEgZXN0YWRvdW5pZGVuc2U7IHN1IGFjZWxlcsOzbiBoYWJsYSBkZSBsYSByb2J1c3RleiBkZSBsYSByZWN1cGVyYWNpw7NuIGVjb27Ds21pY2EgZXN0YWRvdW5pZGVuc2UgZnJlbnRlIGEgdW5hIEV1cm9wYSB5IHVuIEphcMOzbiByZW5xdWVhbnRlcyB5IGVuIGdlbmVyYWwsIGRlIHVuIGNsaW1hIGRlIGluY2VydGlkdW1icmUgcXVlIGFuaW1hIGEgbG9zIGludmVyc29yZXMgYSByZXNndWFyZGFyc2UgZW4gbGEgbW9uZWRhIGRlIHJlZmVyZW5jaWEuIEVsIGFycmFucXVlIGRlIDIwMTUgZW4gbG9zIG1lcmNhZG9zIHZpZW5lIGRldGVybWluYWRvIHBvciB1biBkw7NsYXIgY2Fyby4gVGVuaWVuZG8gZXN0byBlbiBjdWVudGEgcG9kZW1vcyBvYnNlcnZhciBjb21vIDIwMTQgZnVlIGVsIGHDsW8gZGVsIGNhbWJpbyB5IHNlIHB1ZWRlIHJlbGFjaW9uYXIgY29uIGxhIHRhYmxhIGRlIGxvcyB0aXBvcyBkZSBpbnRlcsOpcyB5YSBxdWUgbWllbnRyYXMgZWwgcml0bW8gZGUgZXhwYW5zacOzbiBzZSBhY2VsZXLDsyBjb24gZnVlcnphIGVuIGVsIDJU4oCZMTQgZW4gRUUuVVUgeSBsYSBlY29ub23DrWEgY29udGludcOzIGNyZWNpZW5kbyBjb24gZnVlcnphIGVuIGVsIHRyYW1vIGZpbmFsIGRlIDIwMTQgeSBlbiAyMDE1LCBsYSByZWN1cGVyYWNpw7NuIGRlIGxhIEV1cm96b25hIHNlIGZyZW7DsyBkZSBmb3JtYSBzaWduaWZpY2F0aXZhLg0KRWwgQkNFIGVtcGV6w7MgYSBhcGxpY2FyIHVuYSBzZXJpZSBkZSBtZWRpZGFzIGRlIHBvbMOtdGljYSBtb25ldGFyaWEgc2luIHByZWNlZGVudGVzIGVuIGxhIFVFTS4gQWRlbcOhcyBkZSBoYWJlciBzaXR1YWRvIGxvcyB0aXBvcyBkZSBpbnRlcsOpcyBlbiBtw61uaW1vcyBoaXN0w7NyaWNvcywgZWwgQkNFIGVzdMOhIHByb3BvcmNpb25hbmRvIGZpbmFuY2lhY2nDs24gbXV5IGJhcmF0YSBhIGxhcyBlbnRpZGFkZXMgcXVlIG9mcmV6Y2FuIGNyw6lkaXRvIGEgdHJhdsOpcyBkZSBsb3MgVExUUk9zIG1pZW50cmFzIHF1ZSBsYSBGRUQgcG9yIGVsIGNvbnRyYXJpbyxkaXNlw7HDsyBsYSBlc3RyYXRlZ2lhIGRlIG5vcm1hbGl6YWNpw7NuIGRlIHN1IHBvbMOtdGljYSBtb25ldGFyaWEuDQoNCiMjIDMuMyBQSUINCmBgYHtyfQ0KcGliYXVzIDwtIGRhdG9zICU+JQ0KICBzZWxlY3QoYcOxbyxwaWIscGliZWUpDQoNCmdyYWZwaWIgPC0gZ2dwbG90KCBkYXRhPSBwaWJhdXMsIGFlcyh4PWHDsW8sIHk9cGliKSkgDQogIA0KIGdyYWZwaWIgKyAgZ2VvbV9saW5lKCkgKw0KICAgIGdlb21fcG9pbnQoKSArDQogICAgZ2d0aXRsZSgiRXZvbHVjacOzbiBkZWwgUElCIDIwMDAtMjAyMCIpICsNCiAgIHRoZW1lX3NvbGFyaXplZCgpICsNCiAgICB5bGFiKCJQaWIiKSArDQogICAgdHJhbnNpdGlvbl9yZXZlYWwoYcOxbykrDQogICAgICBsYWJzKHN1YnRpdGxlID0gIkVuIG1pbGxvbmVzIikNCg0KYGBgDQoNCkNvbW8gcmVmbGVqYSBlbCBncsOhZmljbywgQXVzdHJpYSBoYSBleHBlcmltZW50YWRvIHVuIGF1bWVudG8gc29zdGVuaWRvIGRlbCBQSUIgYSBsbyBsYXJnbyBkZSBsb3MgYcOxb3MsIGVuIGNhbWJpbywgYSBwYXJ0aXIgZGUgZmluYWxlcyBkZSAyMDE5IHNlIHB1ZWRlIGFwcmVjaWFyIHVuYSBiYWphZGEgb2Nhc2lvbmFkYSBwb3IgZWwgQ09WSUQxOSAuIEN1YW5kbyBlbCBQSUIgZGUgdW4gcGHDrXMgYXVtZW50YSBlcyB1bmEgYnVlbmEgc2XDsWFsIHBhcmEgbGEgZWNvbm9tw61hIHkgYWZlY3RhIGEgdG9kYXMgbGFzIHBlcnNvbmFzIGRlbCB0ZXJyaXRvcmlvLiBEaWNobyBhdW1lbnRvIHNpZ25pZmljYSBxdWUgZXN0w6FuIGF1bWVudGFuZG8gZGUgZm9ybWEgZ2VuZXJhbCBlbCBjb25zdW1vLCBlbCBnYXN0byB5IGxhIGludmVyc2nDs24gZW4gQXVzdHJpYS4gRXN0byBzdWVsZSBkZXNlbmNhZGVuYXIgdW4gZWZlY3RvIHBvc2l0aXZvIGVuIGxhIGVjb25vbcOtYSwgeWEgcXVlIGVzdG9zIGF1bWVudG9zIGhhY2VuIGNyZWNlciBsb3MgaW5ncmVzb3MgZGUgbGFzIGVtcHJlc2FzLCBsYXMgZmFtaWxpYXMgeSBsYXMgYWRtaW5pc3RyYWNpb25lcywgbGFzIGN1YWxlcyB0ZW5kcsOhbiBtw6FzIGNhcGl0YWwgcGFyYSBpbnZlcnRpciB5IGNyZWFyIGVtcGxlby4gTG8gcXVlIGRlIG51ZXZvIGhhY2UgY3JlY2VyIGVsIGNvbnN1bW8geSBlbCBnYXN0byAoYWwgaGFiZXIgbcOhcyBwZXJzb25hcyBjb24gY2FwYWNpZGFkIGRlIGNvbnN1bWlyKS4gRXMgcG9yIGVsbG8gcXVlIGN1YW5kbyBzdWJlIGVsIFBJQiBzdWVsZW4gY3JlY2VyIGVsIGVtcGxlbyB5IGF1bWVudGFyIGxvcyBzYWxhcmlvcyBkZSBsb3MgdHJhYmFqYWRvcmVzLg0KDQoNCg0KIyMgMy40IEJBTEFOWkEgREUgUEFHT1MNCmBgYHtyfQ0KYmFsYW56YXBhZ29zIDwtIGJhbGFuemFjb21wbGV0YSAlPiUNCiAgc2VsZWN0KEdFTyxUSU1FLFZhbHVlKSU+JQ0KICBmaWx0ZXIoVElNRSAlaW4lIGMoMjAxOSwyMDIwKSkNCg0KRFQ6OmRhdGF0YWJsZShiYWxhbnphcGFnb3MpDQoNCiAgDQogIA0KDQoNCmBgYA0KDQojIyAzLjUgSU5GTEFDScOTTg0KDQpgYGB7cn0NCmluZmxhY2lvbiA8LSBkYXRvcyAlPiUNCiBzZWxlY3QoYcOxbyxpbmZsYWNpb24pDQoNCmdyYWZpY29pbiA8LSBpbmZsYWNpb24gJT4lDQogIGdncGxvdCggYWVzKGHDsW8sIGluZmxhY2lvbiwgc2l6ZSA9IDAuNzUsIGNvbG9yPSAib3JhbmdlIikpICsgDQogIGdlb21fcG9pbnQoKSArDQogIHRoZW1lX2J3KCkrIA0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpICsNCiAgbGFicyh4ID0gTlVMTCkgKyBsYWJzKHRpdGxlPSAiQXVzdHJpYSIpICsNCiAgdGhlbWUocGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gJ3doZWF0MScsIGNvbG91ciA9ICdyZWQnKSkgKyB0aGVtZShwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAiI0M5REFGMSIpLA0KICAgIHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIiNDOURBRjEiLA0KICAgICAgICBjb2xvdXIgPSAiI0M5REFGMSIpKQ0KZ2dwbG90bHkoZ3JhZmljb2luKQ0KDQoNCg0KDQpgYGANCg0KYGBge3J9DQppbmZsYWNpb25lZXV1IDwtIGRhdG9zICU+JQ0KIHNlbGVjdChhw7FvLGluZmxhY2lvbmVlKQ0KDQoNCmdyYWZpY29pbmVlIDwtIGluZmxhY2lvbmVldXUgJT4lDQogIGdncGxvdCggYWVzKGHDsW8sIGluZmxhY2lvbmVlLCBzaXplID0gMC43NSwgY29sb3I9ICJvcmFuZ2UiKSkgKw0KICBnZW9tX3BvaW50KCkgKw0KICB0aGVtZV9idygpKyANCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSArDQogIGxhYnMoeCA9IE5VTEwpICsgbGFicyh0aXRsZT0gIkVFVVUiKSArDQogIHRoZW1lKHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICd3aGVhdDEnLCBjb2xvdXIgPSAncmVkJykpICsgdGhlbWUocGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIiNDOURBRjEiKSwNCiAgICBwbG90LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICIjQzlEQUYxIiwNCiAgICAgICAgY29sb3VyID0gIiNDOURBRjEiKSkNCg0KZ2dwbG90bHkoZ3JhZmljb2luZWUpDQpgYGANCg0KDQpDb21vIHBvZGVtb3Mgb2JzZXJ2YXIgbGEgaW5mbGFjacOzbiBkZSAgMjAwOSBhIDIwMTEgdGFudG8gZW4gQXVzdHJpYSBjb21vIGVuIEVFVVUgaGFuIGlkbyBlbiBhdW1lbnRvLCBlc3RvIHF1aWVyZSBkZWNpciBxdWUgbG9zIGJpZW5lcyB5IHNlcnZpY2lvcyBlbiBlbCBwYcOtcyBzZSBoYW4gdnVlbHRvIGNhZGEgdmV6IG3DoXMgY2Fyb3MgYSBsbyBsYXJnbyBkZSBsb3MgYcOxb3MuIEEgcGFydGlyIGRlIDIwMTEgbGEgZXZvbHVjacOzbiBkZSBsYSBpbmZsYWNpw7NuIGVuIEF1c3RyaWEgaGEgc2lkbyBtw6FzIHBhdWxhdGluYSBxdWUgZW4gRUVVVSwgY3V5YSBldm9sdWNpw7NuIHRpZW5lIG3DoXMgcGljb3MuIEF1c3RyaWEgYSBwYXJ0aXIgZGUgMjAxMSBoYSBjb25zZWd1aWRvIG1hbnRlbmVyIGxhIGluZmxhY2nDs24gKG3DoXMgbyBtZW5vcykgYWxyZWRlZG9yIGRlbCBvYmpldGl2byBkZWwgQkNFICgyJSkuIA0KDQoNCiMgNC4gwr9TZSB2aXZlIGJpZW4gZW4gQXVzdHJpYT8NCiMjIDQuMSBFTVBMRU8gVEVNUE9SQUwNCmBgYHtyfQ0KDQplbXBsZW9wYWlzZXMgPC0gZW1wbGVvdGVtcG9yYWwgJT4lICBmaWx0ZXIoR0VPICVpbiUgYygiQXVzdHJpYSIsIlNwYWluIiwgIkl0YWx5IiwgIkdlcm1hbnkiLCAiVW5pdGVkIEtpbmdkb20iLCAiR3JlY2VlIiwiRnJhbmNlIiwiRXN0b25pYSIsICJNYWx0YSIpKSAlPiUNCiAgIHNlbGVjdChUSU1FLEdFTyxWYWx1ZSkNCg0KZ2dwbG90KHN1YnNldChlbXBsZW9wYWlzZXMpLCBhZXMocmVvcmRlcihHRU8sVmFsdWUpLFZhbHVlLGZpbGw9VmFsdWUpKSArIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiKSAgKyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpK2dndGl0bGUoIkVtcGxlbyB0ZW1wb3JhbCIpICsgeGxhYigiUGFpc2VzIikgKyB5bGFiKCJQb3JjZW50YWplIGRlIGVtcGxlbyB0ZW1wb3JhbCIpICArIGNvb3JkX2ZsaXAoKSArIHRoZW1lKHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICIjRDlFMEVCIiksDQogICAgcGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAoIiNEOUUwRUIiKSkgKyB0aGVtZShheGlzLnRpdGxlLng9ZWxlbWVudF9ibGFuaygpKSwNCiAgICAgICAgYXhpcy50ZXh0Lng9ZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRpY2tzLng9ZWxlbWVudF9ibGFuaygpKQ0KDQogDQpgYGANCg0KQ29tbyBzZSBwdWVkZSBvYnNlcnZhciBBdXN0cmlhIGVzIGVsIHBhw61zIGNvbiBtYXlvciBlbXBsZW8gdGVtcG9yYWwgbG8gY3VhbCBwdWVkZSB0ZW5lciBkb3MgaW50ZXJwcmV0YWNpb25lcywgcG9yIHVuYSBwYXJ0ZSBxdWUgZXMgdW4gcGHDrXMgYmFzdGFudGUgZ2VuZXJhZG9yIGRlIGVtcGxlbyBsbyBjdWFsIHNlcsOtYSB1biBpbmRpY2Fkb3IgcmVsYXRpdmFtZW50ZSBidWVubywgbyBwb3IgZWwgY29udHJhcmlvIHB1ZWRlIHN1cG9uZXIgcXVlIEF1c3RyaWEgdGllbmUgbWFzIGVtcGxlbyB0ZW1wb3JhbCBxdWUgZmlqbyBsbyBjdWFsIHBvbmUgYmFzdGFudGUgZW4gcmllc2dvIGEgbG9zIHRyYWJhamFkb3JlcyB5IGdlbmVyYSBlbXBsZW9zIHByZWNhcmlvcy4gQW50ZSBlc3RhIGRpc3l1bnRpdmEgaGUgZGVjaWRpZG8gc2FjYXIgb3RyYSBncsOhZmljYSBxdWUgaGFjZSByZWZlcmVuY2lhIGEgbGEgZXhjbHVzacOzbiBzb2NpYWwuDQoNCiMjIDQuMiBSSUVTR08gREUgRVhDTFVTScOTTiBTT0NJQUwNCmBgYHtyfQ0KIHJleGNsdXNpb24gPC0gZXhjbHVzaW9uICU+JQ0KICBzZWxlY3QoR0VPLFZhbHVlLFRJTUUpJT4lIGZpbHRlcihHRU8gJWluJSBjKCJBdXN0cmlhIiwiU3BhaW4iLCAiSXRhbHkiLCAiR2VybWFueSIsICJVbml0ZWQgS2luZ2RvbSIsICJHcmVjZWUiLCJGcmFuY2UiLCJFc3RvbmlhIiwgIk1hbHRhIikpIA0KDQpyaWVzZ28gPC0gZ2dwbG90KHJleGNsdXNpb24sIGFlcyh4PVRJTUUsIHk9VmFsdWUsIGdyb3VwPUdFTywgY29sb3I9R0VPKSkgKw0KICBnZW9tX3BvaW50KGFscGhhPTAuNikgKw0KICBnZW9tX2FibGluZShpbnRlcmNlcHQ9MCwgc2xvcGU9MSwgbGluZXR5cGU9ImRhc2hlZCIpICsNCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSJsbSIsIHNlPUZBTFNFKSArDQogIGxhYnModGl0bGUgPSAiUmllc2dvIGV4Y2x1c2nDs24gc29jaWFsIiwgc3VidGl0bGUgPSAiRXVyb3BhIikgICsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpICsNCiAgZ3VpZGVzKGNvbG9yPWd1aWRlX2xlZ2VuZChyZXZlcnNlPVRSVUUpKSAgKyB0aGVtZShheGlzLnRpdGxlLnk9ZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRleHQueT1lbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGlja3MueT1lbGVtZW50X2JsYW5rKCkpDQogICANCiBnZ3Bsb3RseShyaWVzZ28pDQoNCmBgYA0KDQpFbiBlc3RlIGdyw6FmaWNvIEF1c3RyaWEgZXMgZWwgcGHDrXMgY29uIG1lbm9yIHJpZXNnbyBkZSBleGNsdXNpw7NuIHNvY2lhbCwgbG8gcXVlIGltcGxpY2EgcXVlIHRpZW5lIGxvcyBzdWZpY2llbnRlcyByZWN1cnNvcyBwYXJhIG9mcmVjZXIgYSBzdXMgY2l1ZGFkYW5vcyBzaW4gcXVlIGVzdG9zIHBhZGV6Y2FuIG5lY2VzaWRhZGVzLCBsbyBjdWFsIGltcGxpY2EgcXVlIGFkZW3DoXMgZGUgZ2VuZXJhciBlbXBsZW8gY29tbyBoZW1vcyB2aXN0byBhcnJpYmEsIGRlIGVzdGUgZ3LDoWZpY28gc2UgZXh0cmFlIGVsIGhlY2hvIGRlIHF1ZSBhIHBlc2FyIGRlIHF1ZSBnZW5lcmEgbXVjaG8gZW1wbGVvIHRlbXBvcmFsIGVsIGN1YWwgZ2VuZXJhIG3DoXMgcmllc2dvIGRlIGRlc2VtcGxlbywgbGFzIGNvbXBlbnNhY2lvbmVzIHkgbGEgY2FsaWRhZCBkZSB2aWRhIHF1ZSBvZnJlY2UgYSBzdXMgY2l1ZGFkYW5vcyBlcyBtdXkgYWx0YSBwb3IgbG8gcXVlIHNlIHBvZHLDrWEgY29uc2lkZXJhciBsYSBjYW50aWRhZCBkZSBlbXBsZW8gdGVtcG9yYWwgY29tbyBhbGdvIHBvc2l0aXZvLg0KIyMgNC4zIERFU0VNUExFTw0KDQpgYGB7cn0NCmRlc2VtcGxlb2V1IDwtIGRlc2VtcGxlb28gJT4lDQogIHNlbGVjdChUSU1FLEdFTyxWYWx1ZSklPiUNCiAgc2xpY2VfbWF4KFZhbHVlLCBuID0gOSkNCiAgZGVzZW1wbGVvZXUNCg0KZGZncmFmaWNvMSA8LSBnZ3Bsb3QoZGVzZW1wbGVvZXUsIGFlcyhHRU8sIGNvbG9yPVZhbHVlKSkgKyANCiAgZ2VvbV9iYXIoZmlsbD1OQSkgKyANCiAgY29vcmRfZmxpcCgpICsNCiAgdGhlbWUocGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gJ2xpZ2h0Ymx1ZTEnKSkgKyB0aGVtZShwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAiIzdGRkZENCIpLA0KICAgIHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIiM3RkZGRDQiKSwNCiAgICBsZWdlbmQuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIiM3RkZGRDQiKSkNCg0KZ2dwbG90bHkoZGZncmFmaWNvMSkNCg0KDQpgYGANCkF1c3RyaWEganVudG8gY29uIEFsZW1hbmlhIGVzIGVsIHBhw61zIGNvbiBtZW5vcyBkZXNlbXBsZW8sIHNlIHRyYXRhIGRlIHVuIHBhw61zIHBlcXVlw7FvIGVsIGN1YWwgaGEgc2FiaWRvIGFwcm92ZWNoYXIgc3VzIHZlbnRhamFzIHkgYSBoYSBzYWJpZG8gZGVzdGFjYXIgZW4gYXNwZWN0b3MgbXV5IGltcG9ydGFudGVzIGNvbW8gbG8gZXMgbGEgZWR1Y2FjacOzbi4gUGFydGllbmRvIGRlIGxhIHByZW1pc2EgZGUgcXVlIGxvcyBqb3ZlbmVzIHF1ZSB0ZXJtaW5hbiBzdXMgZXN0dWRpb3Mgc2FsZW4gbXV5IHByZXBhcmFkb3MgcGFyYSBpbnRyb2R1Y2lyc2UgZW4gZWwgbWVyY2FkbyBsYWJvcmFsLCB0YWwgeSBjb21vIGxvIGRlbXVlc3RyYW4gbG9zIGluZm9ybWVzIFBJU0EsIGVuIGVsICBjdWFsIHN1ZWxlbiBkZXN0YWNhciBiYXN0YW50ZS4gDQoNCg0KIyA1IFNlY3RvciB0dXLDrXN0aWNvDQoNCiMjIDUuMSA8Rk9OVCBDT0xPUj0iYmxhY2siPiDCv1FVRSBTRSBQVUVERSBWSVNJVEFSIEVOIEFVU1RSSUE8L0ZPTlQ+LiB7LnRhYnNldH0NCg0KIyMjIDxGT05UIENPTE9SPSJGRjREMDAiPkxhIEFiYWTDrWEgZGUgTWVsazwvRk9OVD4NCiFbTWFyY2FdKC4vaW1hZ2VuZXMvYWJhZGlhLnBuZykNCkp1c3RvIGN1YW5kbyBwaWVuc2FzIHF1ZSBubyBoYXkgbmFkYSBtw6FzIHF1ZSB2ZXIgZW4gQXVzdHJpYSBxdWUgcG9kcsOtYSBzb3JwcmVuZGVydGUsIHF1ZSB5YSBsbyBoYWLDrWFzIHZpc3RvIHRvZG8sIGVzIGN1YW5kbyBkZXNjdWJyZXMgcXVlIGZ1ZXJhIGRlIGxhcyBncmFuZGVzIGNpdWRhZGVzIGRlbCBwYcOtcyB0ZSBlc3BlcmEgdG9kbyB1biBtdW5kbyBkZSBwb3NpYmlsaWRhZGVzOiBkZXNkZSBwYWxhY2lvcywgYSBhYmFkw61hcywgYm9zcXVlcywgcGVxdWXDsW9zIHB1ZWJsZWNpdG9zLCBtb250YcOxYXMgbyBsYWdvcy4gQSBjb250aW51YWNpw7NuLCBxdWVyZW1vcyBjZW50cmFybm9zIGVuIGVzdG9zLCB5IG5vIHBvZMOtYW1vcyBlbXBlemFyIGRlIG90cmEgZm9ybWEgcXVlIGNvbiBsYSBhYmFkw61hIGRlIE1lbGssIHNpdHVhZGEgYSB1bm9zIDg1IGtpbMOzbWV0cm9zIGRlIFZpZW5hIHkgY29uc2lkZXJhZGEgdW5hIGF1dMOpbnRpY2Egb2JyYSBtYWVzdHJhIGRlbCBiYXJyb2NvLiBZIG5vIGVzIHBhcmEgbWVub3MsIHNlIHRyYXRhIGRlIHVuYSBmYWJ1bG9zYSBhYmFkw61hIGJlbmVkaWN0aW5hIGZ1bmRhZGEgZW4gZWwgYcOxbyAxMDg5IHNvYnJlIHVuYSBwZXF1ZcOxYSBjb2xpbmEgZGVzZGUgcXVlIGxhIHF1ZSBzZSBkaXZpc2EgZWwgRGFudWJpbyB5IGVsIHZhbGxlIGRlIFdhY2hhdS4gUHJlY2lzYW1lbnRlIGVzdGUgw7psdGltbywgZGVjbGFyYWRvIFBhdHJpbW9uaW8gZGUgbGEgSHVtYW5pZGFkLCBlcyB0b2RhIHVuYSB2aXNpdGEgaW1wcmVzY2luZGlibGUgcXVlIGhhY2VyIGVuIEF1c3RyaWEuIE1vbnRhw7FhcywgbmF0dXJhbGV6YSwgYmVsbG9zIHBhaXNhamVzLCBhY3RpdmlkYWRlcyBhbCBhaXJlIGxpYnJlIMK/aGF5IGFsZ28gbcOhcyBxdWUgcGVkaXI/DQoNCiMjIyA8Rk9OVCBDT0xPUj0iRkY0RDAwIj5NYXV0aGF1c2VuPC9GT05UPg0KIVtNYXJjYV0oLi9pbWFnZW5lcy9tYXV0LnBuZykNCkVsIGNhbXBvIGRlIGNvbmNlbnRyYWNpw7NuIGRlIE1hdXRoYXVzZW4gZnVlIHVuIGdydXBvIGRlIGNhbXBvcyBkZSBjb25jZW50cmFjacOzbiBuYXppcyBzaXR1YWRvcyBlbiB0b3JubyBhIGxhIHBlcXVlw7FhIGVtcHJlc2EgeSBjYW50ZXJhLCBkZSBsYSBwb2JsYWNpw7NuIGRlIE1hdXRoYXVzZW4gZW4gQXVzdHJpYSwgYSB1bm9zIDIwIGttIGRlIExpbnouIFNpIGJpZW4gbm8gcG9kZW1vcyBkZXN0YWNhciBlc3RlIGx1Z2FyIHBvciBiZWxsZXphLCBubyBwb2RlbW9zIGRlamFyIGRlIHBlbnNhciBlbiDDqWwgY29tbyB1biBsdWdhciBpbXByZXNjaW5kaWJsZSBwYXJhIGNvbm9jZXIgcGFydGUgZGUgbGEgaGlzdG9yaWEgZGVsIG11bmRvLiBFbiBlbCBjYW1wbyBkZSBjb25jZW50cmFjacOzbiBkZSBNYXV0aGF1c2VuIG1pbGVzIGRlIHByZXNvcyBmdWVyb24gbXVlcnRvcywgbXVjaG9zIGRlIGVsbG9zIGFiYXRpZG9zIGEgdGlyb3MsIG1lZGlhbnRlIGlueWVjY2lvbmVzIGxldGFsZXMgbyBhc2VzaW5hZG9zIGNvbiBnYXMgbGV0YWwsIGF1bnF1ZSBsYSBtYXlvcsOtYSBkZSBlbGxvcyBmYWxsZWNpZXJvbiBwb3IgbGEgZXhwbG90YWNpw7NuIHF1ZSBzdWZyaWVyb24gZW4gZWwgdHJhYmFqbywgcXVlIGVqZWN1dGFiYW4gc2luIG5pbmfDum4gdGlwbyBkZSBlc2Nyw7pwdWxvcy4gU2UgY3VlbnRhIHF1ZSBlbiBNYXV0aGF1c2VuIHBlcmRpZXJvbiBsYSB2aWRhIHVub3MgMTAwMDAwIHByZXNvcy4NCg0KDQoNCiMjIyA8Rk9OVCBDT0xPUj0iRkY0RDAwIj5TYWx6YnVyZ288L0ZPTlQ+DQohW01hcmNhXSguL2ltYWdlbmVzL25zLnBuZykNClViaWNhZGEganVzdG8gZW4gbGEgZnJvbnRlcmEgY29uIEFsZW1hbmlhLCBTYWx6YnVyZ28gZnVlIGVsIGx1Z2FyIGRlIG5hY2ltaWVudG8gZGUgTW96YXJ0LiBFbCBmYW1vc28gY29tcG9zaXRvciBlcyBlbCBwZXJzb25hamUgbcOhcyBkZXN0YWNhZG8gZGUgbGEgaGlzdG9yaWEgZGVsIHBhw61zLiBEZSBoZWNobywgdW5hIGRlIGxhcyBtZWpvcmVzIGNvc2FzIHF1ZSB2ZXIgZW4gU2FsemJ1cmdvIGVzIGxhIGNhc2EgZG9uZGUgbmFjacOzIHkgY3JlY2nDsyBlc3RlIGdlbmlvIGRlIGxhIG3DunNpY2EuDQoNClBlcm8gU2FsemJ1cmdvIGVzIG11Y2hvIG3DoXMgcXVlIE1vemFydC4gU29sbyBmYWx0YSBhYnJpciBsb3Mgb2pvcyB5IG9ic2VydmFyIGVsIHBhaXNhamUgYWxwaW5vIHF1ZSBsYSByb2RlYS4gVmlzaXRhciBTYWx6YnVyZ28gZW4gdW4gZMOtYSBlcyBmw6FjaWwuIE5vIHRlIHBpZXJkYXMgbGEgZmFtb3NhIGZvcnRhbGV6YSBkZSBIb2hlbnNhbHpidXJnIG8gbGFzIGNhbGxlcyBkZSBzdSBjZW50cm8gaGlzdMOzcmljby4gUG9yIGFsZ8O6biBtb3Rpdm8gZXMgUGF0cmltb25pbyBkZSBsYSBIdW1hbmlkYWQgcG9yIGxhIFVORVNDTy4NCg0KIyMjIDxGT05UIENPTE9SPSJGRjREMDAiPldhdHRlbnM8L0ZPTlQ+DQohW01hcmNhXSguL2ltYWdlbmVzL25zcy5wbmcpDQrCv1F1acOpbiBubyBjb25vY2UgbGEgZmFtb3NhIG1hcmNhIFN3YXJvdnNraT8gRW4gV2F0dGVucyBwb2RlbW9zIGVuY29udHJhciBMb3MgTXVuZG9zIGRlIENyaXN0YWwsIHVuYSBkZSBsYXMgYXRyYWNjaW9uZXMgdHVyw61zdGljYXMgbcOhcyB2aXNpdGFkYXMgZGUgQXVzdHJpYSBkb25kZSBwb2RlbW9zIGVuY29udHJhciAxNCBzYWxhcyBlbiBsYXMgcXVlIHNlIGd1YXJkYW4gYWxndW5hcyBkZSBsYXMgb2JyYXMgbcOhcyBtYXJhdmlsbG9zYXMgeSBicmlsbGFudGVzIGRlIFN3YXJvdnNraS4NCg0KIyMjIDxGT05UIENPTE9SPSJGRjREMDAiPkNhcnJldGVyYSBkZWwgR3Jvc3NnbG9ja25lcjwvRk9OVD4NCiFbTWFyY2FdKC4vaW1hZ2VuZXMvYi5wbmcpDQpTaSBoYXkgdW4gbHVnYXIgaW1wZXJkaWJsZSBlbiBBdXN0cmlhIGVzZSBlcyBsYSBDYXJyZXRlcmEgZGVsIEdyb3NzZ2xvY2tuZXIuIFRlIGFjb25zZWphbW9zIGlyIGNvbiB0aWVtcG8sIHlhIHF1ZSDDum5pY2FtZW50ZSByZWNvcnJlcmxhIHRlIGxsZXZhcsOhIHVuYXMgY3VhbnRhcyBob3Jhcywgc2luIGNvbnRhciBsYXMgcGFyYWRhcyBxdWUgcXVlcnLDoXMgaGFjZXIgcGFyYSBkaXNmcnV0YXIgZGUgdW5vIGRlIGxvcyBwYWlzYWplcyBtw6FzIGltcHJlc2lvbmFudGVzIGRlIEF1c3RyaWEuDQoNCiMjIyA8Rk9OVCBDT0xPUj0iRkY0RDAwIj5HcmF6PC9GT05UPg0KIVtNYXJjYV0oLi9pbWFnZW5lcy9jLnBuZykNCkdyYXogZXMgbGEgY2FwaXRhbCBkZWwgZXN0YWRvIGRlIEVzdGlyaWEsIGVuIGVsIHN1ciBkZSBBdXN0cmlhLiBFbiBlbCBjb3JhesOzbiBkZSBsYSBjaXVkYWQgc2UgZW5jdWVudHJhIEhhdXB0cGxhdHosIGxhIHBsYXphIGNlbnRyYWwgZGVsIGNhc2NvIGFudGlndW8gbWVkaWV2YWwuQSBvcmlsbGFzIGRlbCByw61vIE11ciBub3MgZW5jb250cmFtb3MgY29uIEdyYXosIGxhIGNhcGl0YWwgZGUgRXN0aXJpYSB5IHVuYSBkZSBsYXMgY2l1ZGFkZXMgbWVub3MgY29ub2NpZGFzIGRlIEF1c3RyaWEuIFPDs2xvIHBvciBkaXNmcnV0YXIgbGFzIHZpc3RhcyBkZSBsYSBjaXVkYWQgZGVzZGUgc3UgaW5jcmXDrWJsZSBUb3JyZSBkZWwgUmVsb2osIHlhIG1lcmVjZSBsYSBwZW5hIGhhY2VyIHVuYSBwYXJhZGEgZW4gbGEgY2l1ZGFkLg0KDQojIyMgPEZPTlQgQ09MT1I9IkZGNEQwMCI+VmFsbGUgZGUgU3R1YmFpPC9GT05UPg0KIVtNYXJjYV0oLi9pbWFnZW5lcy9hLnBuZykNCkVzdGFyIGVuIGVsIFRpcm9sIHkgbm8gdmVuaXIgYWwgVmFsbGUgZGUgU3R1YmFpIGVzIGNvbW8gZXN0YXIgZW4gUm9tYSB5IG5vIGNvbm9jZXIgZW4gQ29saXNlby4gUGFpc2FqZXMgY29uIGNpZW50b3MgZGUgdG9uYWxpZGFkZXMgZGUgdmVyZGUsIHNhbHBpY2Fkb3MgZGUgY2FzaXRhcyB0cmFkaWNpb25hbGVzIGFkb3JuYWRhcyBjb24gZmxvcmVzIHkgdW4gaG9yaXpvbnRlIG5ldmFkbyBub3MgZXNwZXJhbiBjb21vIHRlbMOzbiBkZSBmb25kbyBlbiBlc3RhIHpvbmEgZGUgQXVzdHJpYS4NCg0KIyA2LiBDb25jbHVzacOzbg0KTGEgaW50ZW5jacOzbiBkZSBoYWNlciBlc3RlIHRyYWJham8gaGEgc2lkbyBxdWUgc2UgY29ub3pjYSB1biBwb2NvIG3DoXMgZWwgcGHDrXMgeWEgcXVlIGFsIHNlciB1biBwYcOtcyBwZXF1ZcOxbyBubyBzdWVsZSBzZXIgdW5vIGRlIGxvcyBkZXN0aW5vcyBuaSB0dXJpc3RpY29zIG5pIGRlIG5lZ29jaW9zIG3DoXMgY29ub2NpZG9zLiBFcyBwb3IgZXNvIHF1ZSBoZSBxdWVyaWRvIHBsYXNtYXIgY29tbyBBdXN0cmlhIGEgcGVzYXIgZGUgc2VyIHVuIHBhw61zIHBlcXVlw7FvIGN1ZW50YSBjb24gdW5hIHRhc2EgZGUgaW5mbGFjacOzbiByZWxhdGl2YW1lbnRlIHBlcXVlw7FhIGVuIGNvbXBhcmFjacOzbiBjb24gcGHDrXNlcyBkZSBsYSBVRS4gUG9yIG90cmEgcGFydGUsIGEgbGEgaG9yYSBkZSBkZWNpZGlyIGlyIGEgdml2aXIgYSBBdXN0cmlhIGhheSBxdWUgY29ub2NlciBkZSBhbnRlbWFubyBsYXMgY29uZGljaW9uZXMgbGFib3JhbGVzIHkgc2kgZW4gZXNlIHBhw61zIGhheSBvIG5vIHBvc2liaWxpZGFkIGRlIGVtcGxlbyB5IGVuIGVzdGUgY2Fzbywgc2UgaGEgZGVtb3N0cmFkbyBxdWUgc2kgc2UgdGllbmUgbGEgaWRlYSBkZSBpciBhIHRyYWJhamFyIGZ1ZXJhLCBBdXN0cmlhIHBvZHJpYSBzZXIgdW4gYnVlbiBjYW5kaWRhdG8uIA0KRW4gY29uY2x1c2nDs24sIGEgbml2ZWwgdHVyaXN0aWNvIGN1ZW50YSBjb24gdW5hIGdyYW4gY2FudGlkYWQgZGUgbW9udW1lbnRvcyB5IHNvYnJldG9kbyBuYXR1cmFsZXphIHBhcmEgcG9kZXIgdmlzaXRhciB5IGRpc2ZydXRhciBkZSBsYXMgdmlzdGFzIHkgcG9yIG90cmEgcGFydGUgYSBuaXZlbCBlY29ub21pY28gZGVzdGFjYSBiYXN0YW50ZS4gDQoNCiMgNy5CaWJsaW9ncmFmw61hDQotIFtlbmxhY2UgYSBsYSBww6FnaW5hIHdlYiBkZSBsYSBhc2lnbmF0dXJhXShodHRwczovL3BlcmV6cDQ0LmdpdGh1Yi5pby9pbnRyby1kcy0yMS0yMi13ZWIvaW5kZXguaHRtbCkNCi0gW2VubGFjZSBhIGxhIHDDoWdpbmEgd2ViIGRlIEV1cm9zdGF0XShodHRwczovL2VjLmV1cm9wYS5ldS9ldXJvc3RhdCkNCi0gW2VubGFjZSBhIGxhIHDDoWdpbmEgd2ViIGRlbCBJTkVdKGh0dHBzOi8vd3d3LmluZS5lcy8pDQotIFtlbmxhY2UgYSBsYSBww6FnaW5hIHdlYiBkZWwgQmFuY28gTXVuZGlhbF0oaHR0cHM6Ly9kYXRvcy5iYW5jb211bmRpYWwub3JnLykNCi0gW2VubGFjZSBhIGxhIHDDoWdpbmEgd2ViIGRlIG5vdGljaWFzIGVjb27Ds21pY2FzIGRlIEF1c3RyaWFdKGh0dHBzOi8vd3d3LmVsZWNvbm9taXN0YS5lcy9lY29ub21pYS9ub3RpY2lhcy8xMDIxNTI4OS8xMS8xOS9RdWllbi1lcy1lbC1jdWxwYWJsZS1kZWwtY29sYXBzby1kZS1sb3MtdGlwb3MtZGUtaW50ZXJlcy1lbi1sYS1FdXJvem9uYS5odG1sKQ0KLSBbZW5sYWNlIGEgbGEgcMOhZ2luYSB3ZWIgZGUgbGEgaGlzdG9yaWEgZGUgQXVzdHJpYV0oaHR0cHM6Ly9lcy53aWtpcGVkaWEub3JnL3dpa2kvQXVzdHJpYSkNCmBgYA0KDQo8YnI+PGJyPg0KDQo8ZGl2IGNsYXNzPSJ0b2NpZnktZXh0ZW5kLXBhZ2UiIGRhdGEtdW5pcXVlPSJ0b2NpZnktZXh0ZW5kLXBhZ2UiIHN0eWxlPSJoZWlnaHQ6IDA7Ij48L2Rpdj4NCg0KDQoNCg0KDQoNCg0K