Qué se estudió
Pregunta de investigación: ¿cambia el promedio de
comprensión del paciente sobre su cirugía de reemplazo total de rodilla
según el formato de consentimiento que recibe?
Se comparan 18 pacientes, seis por modalidad, en un
diseño completamente al azar. Cada paciente recibe un solo tratamiento.
La asignación del ejemplo representa un posible sorteo global; no es un
estudio con mediciones repetidas.
| T1 · Control |
Formato tradicional legal y textual. |
| T2 |
Documento simplificado con infografías físicas
impresas. |
| T3 |
Consentimiento digital con infografías y firma
electrónica. |
La respuesta es un puntaje numérico de 0 a 100: un
valor mayor representa mayor comprensión. Los puntajes son inventados y
no proceden de la aplicación del BICEP ni de otro cuestionario
validado. En una investigación real debe emplearse un
instrumento apropiado y validado para la población, idioma y contexto
quirúrgico, siguiendo sus reglas de puntuación.
Resultado principal del ejemplo. El ANOVA detecta
diferencias entre las medias, con F = 23,076 y p < 0,001. La tabla de
Tukey permite identificar las comparaciones concretas. Estos resultados
describen únicamente los datos ficticios.
Cómo se distribuyeron
los puntajes
Tabla 1. Resumen de comprensión por modalidad. Escala de 0 a
100.
| T1 · Texto legal |
6 |
68.67 |
5.35 |
69.25 |
60.5 |
75.5 |
| T2 · Infografía impresa |
6 |
81.33 |
4.49 |
81.25 |
75.0 |
88.0 |
| T3 · Digital y firma |
6 |
86.58 |
4.16 |
86.50 |
80.5 |
92.0 |
La media es el promedio del grupo. La
mediana es el valor central al ordenar sus seis
puntajes. La desviación estándar indica cuánto se
separan los resultados del promedio: una desviación mayor refleja más
variación entre pacientes.
Cómo leer el gráfico. La línea dentro de cada caja
es la mediana. La caja contiene la mitad central de los puntajes; los
bigotes se extienden hasta los valores que quedan dentro de 1,5 rangos
intercuartílicos desde la caja. Los puntos muestran todas las
observaciones, incluso las que pudieran quedar fuera de los bigotes. Un
punto alejado merece revisión; no debe eliminarse automáticamente.
Qué muestra este ejemplo. T1 tiene una media de
68,67 puntos, T2 de 81,33 y T3 de 86,58. T2 y T3 presentan puntajes más
altos que T1. Sin embargo, observar cajas separadas o superpuestas no
sustituye una comparación estadística: el gráfico ayuda a ver los datos,
mientras que los intervalos de Tukey cuantifican la incertidumbre.
Qué comprobamos antes
de interpretar el ANOVA
El ANOVA supone independencia entre pacientes, variación residual
aproximadamente similar en los tratamientos y errores razonablemente
compatibles con una distribución normal. La normalidad se revisa
en los residuos del modelo, no en todos los puntajes
mezclados.
Un residuo es la diferencia entre el puntaje de un paciente y el
promedio que el modelo estima para su modalidad. Por ejemplo, un residuo
de +5 significa que obtuvo cinco puntos más de lo esperado para su
grupo.
Tabla 2. Diagnósticos con nivel de referencia 0,05.
| Shapiro–Wilk |
¿Los residuos se apartan de la normalidad? |
0,8374 |
No se detecta incumplimiento |
| Bartlett |
¿Difieren las varianzas entre modalidades? |
0,8551 |
No se detecta incumplimiento |
| Levene centrado en mediana |
¿Difiere la dispersión entre modalidades? |
0,8686 |
No se detecta incumplimiento |
Interpretación sencilla. Con estos datos, las tres
pruebas no detectan problemas al nivel de 0,05. Eso no
demuestra normalidad ni igualdad de varianzas. Con seis
pacientes por grupo, las pruebas pueden no detectar desviaciones
relevantes. Bartlett es especialmente sensible a la falta de normalidad;
Levene centrado en la mediana es más resistente a observaciones
extremas.
La independencia se sostiene en el diseño: pacientes distintos, una
modalidad por persona y ausencia de influencias relevantes entre ellos.
Ninguna de estas tres pruebas confirma esa condición.
Cómo leerlo. Si los puntos siguen razonablemente la
línea, la forma de los residuos es compatible con la normalidad. Curvas
pronunciadas o puntos muy alejados en los extremos sugieren revisar el
supuesto. No esperamos una alineación perfecta con solo 18
observaciones. En este ejemplo, Shapiro–Wilk aporta p = 0,8374, sin
detectar un alejamiento de la normalidad.
Cómo leerlo. Los residuos deben repartirse alrededor
de cero y presentar una amplitud vertical relativamente semejante. Una
columna mucho más extendida, o un patrón de abanico, sugeriría varianzas
distintas. Las columnas son normales en este gráfico: cada paciente
comparte el valor ajustado con los otros cinco de su tratamiento. Los
puntos extremos deben revisarse con su registro original, sin
eliminarlos para obtener un valor p favorable.
Qué diferencias detectó
el análisis
La comparación
global
La hipótesis nula establece que las tres medias son
iguales. El ANOVA compara la separación entre los promedios con
la variación entre pacientes que recibieron la misma modalidad.
Tabla 3. ANOVA de una vía para el DCA.
| Tratamiento |
2 |
1018.03 |
509.01 |
23,076 |
< 0,001 |
| Error residual |
15 |
330.88 |
22.06 |
— |
— |
El resultado global indica que hay evidencia de que al menos una
media es diferente. No identifica por sí solo cuál modalidad difiere de
cuál. El valor p tampoco es la probabilidad de que la hipótesis nula sea
verdadera ni indica cuántos puntos mejora una modalidad.
Como complemento, omega cuadrado es 0,710. Resume la magnitud de la
separación entre grupos respecto a la variabilidad total, con una
corrección por el error. No es un porcentaje de pacientes beneficiados
y, en estos datos inventados, no constituye una estimación de eficacia
clínica.
Las comparaciones
entre modalidades
Se aplica Tukey para comparar los tres pares manteniendo una
cobertura simultánea del 95 % para sus intervalos bajo el modelo.
Tabla 4. Diferencias de comprensión en puntos. T2–T1 significa
T2 menos T1.
| T2-T1 |
12.67 |
5.62 |
19.71 |
< 0,001 |
Diferencia detectada |
| T3-T1 |
17.92 |
10.87 |
24.96 |
< 0,001 |
Diferencia detectada |
| T3-T2 |
5.25 |
-1.79 |
12.29 |
0,1629 |
Sin evidencia suficiente |
Cómo leerlo. El punto representa la diferencia entre
promedios y la línea horizontal muestra su intervalo. Si todo el
intervalo queda por encima de cero, la primera modalidad tiene una media
mayor que la segunda bajo este análisis. Si el intervalo cruza cero, la
muestra no permite distinguir ese par al nivel elegido.
T2 frente a T1: la diferencia es de 12,67 puntos,
con intervalo de 5,62 a 19,71. Se detecta una diferencia favorable a T2
en estos datos.
T3 frente a T1: la diferencia es de 17,92 puntos,
con intervalo de 10,87 a 24,96. Se detecta una diferencia favorable a T3
en estos datos.
T3 frente a T2: la diferencia es de 5,25 puntos, con
intervalo de -1,79 a 12,29. No hay evidencia suficiente para
distinguirlas. Esto no demuestra que sean equivalentes.
Qué podemos
concluir
En estos datos ficticios, los formatos con infografías
presentan mayor comprensión promedio que el formato textual
tradicional. El formato digital tiene el promedio más alto,
pero Tukey no aporta evidencia suficiente para afirmar que supera al
documento impreso con infografías.
La pregunta clínica real exige más: una muestra calculada, un
instrumento válido para el contexto, contenido clínico equivalente,
oportunidad de preguntar y evaluación en condiciones comparables. La
significación estadística no determina por sí sola si una diferencia es
importante para la práctica.
T3 combina formato digital, infografías y firma electrónica; el
experimento compara el paquete completo y no aísla el efecto de
la firma. El consentimiento tampoco queda reducido a un
formulario: en todos los grupos debe mantenerse un proceso de
información y aclaración de dudas adecuado.
Detalles y
reproducibilidad
Ver las 18 observaciones analizadas
| DCA_P01 |
T2 |
78.5 |
| DCA_P02 |
T1 |
65.0 |
| DCA_P03 |
T3 |
85.5 |
| DCA_P04 |
T1 |
72.5 |
| DCA_P05 |
T3 |
90.0 |
| DCA_P06 |
T2 |
82.0 |
| DCA_P07 |
T3 |
80.5 |
| DCA_P08 |
T2 |
75.0 |
| DCA_P09 |
T1 |
60.5 |
| DCA_P10 |
T2 |
88.0 |
| DCA_P11 |
T3 |
87.5 |
| DCA_P12 |
T1 |
70.0 |
| DCA_P13 |
T1 |
68.5 |
| DCA_P14 |
T2 |
80.5 |
| DCA_P15 |
T3 |
92.0 |
| DCA_P16 |
T3 |
84.0 |
| DCA_P17 |
T1 |
75.5 |
| DCA_P18 |
T2 |
84.0 |
Ver las comparaciones adicionales de sensibilidad
Los intervalos siguientes usan Bonferroni para cobertura conjunta de
al menos 95 %; los valores p se ajustan con Holm. Los dos ajustes son
distintos y están identificados por separado.
Comparaciones t de Welch: intervalos Bonferroni y p de
Holm.
| T1 menos T2 |
-12.67 |
-20.90 |
-4.43 |
0,0027 |
| T1 menos T3 |
-17.92 |
-25.96 |
-9.87 |
< 0,001 |
| T2 menos T3 |
-5.25 |
-12.43 |
1.93 |
0,0623 |
Las comparaciones por rangos son Mann–Whitney con ajuste Holm, no el
procedimiento de Dunn. Se emplea aproximación normal para admitir
empates; sus valores p requieren cautela con muestras pequeñas.
##
## Pairwise comparisons using Wilcoxon rank sum test with continuity correction
##
## data: datos_dca$comprension and datos_dca$tratamiento
##
## T1 T2
## T2 0.016 -
## T3 0.015 0.092
##
## P value adjustment method: holm
Ver observaciones potencialmente influyentes
La distancia de Cook ayuda a identificar qué observaciones podrían
cambiar más el ajuste del modelo. La referencia 4/n es orientativa: no
es una regla automática para borrar pacientes. Primero debe comprobarse
la calidad del registro y la sensibilidad del resultado.
| DCA_P09 |
-1.905 |
0.242 |
Revisar registro |
| DCA_P17 |
1.594 |
0.169 |
Sin señal según esta referencia |
| DCA_P10 |
1.555 |
0.161 |
Sin señal según esta referencia |
| DCA_P08 |
-1.477 |
0.145 |
Sin señal según esta referencia |
| DCA_P07 |
-1.419 |
0.134 |
Sin señal según esta referencia |
| DCA_P15 |
1.263 |
0.106 |
Sin señal según esta referencia |
| DCA_P04 |
0.894 |
0.053 |
Sin señal según esta referencia |
| DCA_P02 |
-0.855 |
0.049 |
Sin señal según esta referencia |
| DCA_P05 |
0.797 |
0.042 |
Sin señal según esta referencia |
| DCA_P01 |
-0.661 |
0.029 |
Sin señal según esta referencia |
| DCA_P18 |
0.622 |
0.026 |
Sin señal según esta referencia |
| DCA_P16 |
-0.603 |
0.024 |
Sin señal según esta referencia |
| DCA_P12 |
0.311 |
0.006 |
Sin señal según esta referencia |
| DCA_P03 |
-0.253 |
0.004 |
Sin señal según esta referencia |
| DCA_P11 |
0.214 |
0.003 |
Sin señal según esta referencia |
| DCA_P14 |
-0.194 |
0.003 |
Sin señal según esta referencia |
| DCA_P06 |
0.155 |
0.002 |
Sin señal según esta referencia |
| DCA_P13 |
-0.039 |
0.000 |
Sin señal según esta referencia |
Ver configuración de R y paquetes
## R version 4.6.1 (2026-06-24 ucrt)
## Platform: x86_64-w64-mingw32/x64
## Running under: Windows 11 x64 (build 26200)
##
## Matrix products: default
## LAPACK version 3.12.1
##
## locale:
## [1] LC_COLLATE=Spanish_Panama.utf8 LC_CTYPE=Spanish_Panama.utf8
## [3] LC_MONETARY=Spanish_Panama.utf8 LC_NUMERIC=C
## [5] LC_TIME=Spanish_Panama.utf8
##
## time zone: America/Panama
## tzcode source: internal
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## loaded via a namespace (and not attached):
## [1] vctrs_0.7.3 cli_3.6.6 knitr_1.52 rlang_1.3.0
## [5] xfun_0.62 generics_0.1.4 S7_0.2.2 jsonlite_2.0.0
## [9] labeling_0.4.3 glue_1.8.1 htmltools_0.5.9 sass_0.4.10
## [13] scales_1.4.0 rmarkdown_2.32 grid_4.6.1 tibble_3.3.1
## [17] evaluate_1.0.5 jquerylib_0.1.4 fastmap_1.2.0 yaml_2.3.12
## [21] lifecycle_1.0.5 compiler_4.6.1 dplyr_1.2.1 RColorBrewer_1.1-3
## [25] pkgconfig_2.0.3 rstudioapi_0.19.0 farver_2.1.2 digest_0.6.39
## [29] R6_2.6.1 tidyselect_1.2.1 pillar_1.11.1 magrittr_2.0.5
## [33] bslib_0.12.0 withr_3.0.3 tools_4.6.1 gtable_0.3.6
## [37] ggplot2_4.0.3 cachem_1.1.0
Este informe se elaboró a partir de
Analisis_DCA_Consentimiento.R, conservando sus 18
registros, ANOVA, pruebas de supuestos y análisis de sensibilidad. Los
resultados y figuras se recalculan al ejecutar Knit; el
archivo no necesita conectarse con el script original ni con una base
externa. El código completo puede consultarse con la opción de descarga
del documento HTML o abriendo este archivo .rmd.
LS0tCnRpdGxlOiAiQ29tcHJlbnNpw7NuIGRlbCBjb25zZW50aW1pZW50byBpbmZvcm1hZG8iCnN1YnRpdGxlOiAiVHJlcyBmb3JtYXRvcyBkZSBwcmVzZW50YWNpw7NuIGV2YWx1YWRvcyBjb24gdW4gZGlzZcOxbyBjb21wbGV0YW1lbnRlIGFsIGF6YXIiCmRhdGU6ICJFamVtcGxvIGRpZMOhY3RpY28gY29uIGRhdG9zIGZpY3RpY2lvcyIKbGFuZzogZXMKb3V0cHV0OgogIGh0bWxfZG9jdW1lbnQ6CiAgICB0aGVtZTogZmxhdGx5CiAgICBoaWdobGlnaHQ6IHRhbmdvCiAgICB0b2M6IHRydWUKICAgIHRvY19kZXB0aDogMgogICAgdG9jX2Zsb2F0OgogICAgICBjb2xsYXBzZWQ6IGZhbHNlCiAgICAgIHNtb290aF9zY3JvbGw6IHRydWUKICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQogICAgY29kZV9mb2xkaW5nOiBoaWRlCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQogICAgZmlnX2NhcHRpb246IHRydWUKICAgIGRmX3ByaW50OiBrYWJsZQogICAgbWF0aGpheDogbnVsbAotLS0KCjwhLS0KQVJDSElWTyBBVVTDk05PTU86IG5vIG5lY2VzaXRhIGVsIHNjcmlwdCAuUiBuaSBhcmNoaXZvcyBkZSBkYXRvcyBleHRlcm5vcy4KR3VhcmRlIGVuIFVURi04LiBBYnJhIGVuIFJTdHVkaW8geSBwdWxzZSBLbml0ID4gS25pdCB0byBIVE1MLgoKUFJJTUVSIFVTTzogYW50ZXMgZGUgS25pdCwgZWplY3V0ZSBlbiBsYSBjb25zb2xhIGRlIFI6CnBhcXVldGVzIDwtIGMoInJtYXJrZG93biIsICJrbml0ciIsICJnZ3Bsb3QyIikKZmFsdGFudGVzIDwtIHBhcXVldGVzWyF2YXBwbHkocGFxdWV0ZXMsIHJlcXVpcmVOYW1lc3BhY2UsIGxvZ2ljYWwoMSksIHF1aWV0bHkgPSBUUlVFKV0KaWYgKGxlbmd0aChmYWx0YW50ZXMpKSBpbnN0YWxsLnBhY2thZ2VzKGZhbHRhbnRlcywgcmVwb3MgPSAiaHR0cHM6Ly9jbG91ZC5yLXByb2plY3Qub3JnIikKCkRlc3B1w6lzIHB1bHNlIEtuaXQuIFRhbWJpw6luIHB1ZWRlIGVqZWN1dGFyOgpybWFya2Rvd246OnJlbmRlcigiSW5mb3JtZV9EQ0FfQ29uc2VudGltaWVudG8ucm1kIiwgZW5jb2RpbmcgPSAiVVRGLTgiKQoKUlN0dWRpbyBub3JtYWxtZW50ZSBpbmNsdXllIFBhbmRvYy4gUGFyYSBjb21wcm9iYXJsbzoKcm1hcmtkb3duOjpwYW5kb2NfYXZhaWxhYmxlKCkKLS0+CgpgYGB7ciBjb25maWd1cmFjaW9uLCBpbmNsdWRlPUZBTFNFfQpwYXF1ZXRlcyA8LSBjKCJrbml0ciIsICJnZ3Bsb3QyIikKZm9yIChwIGluIHBhcXVldGVzKSB7CiAgaWYgKCFyZXF1aXJlTmFtZXNwYWNlKHAsIHF1aWV0bHkgPSBUUlVFKSkgewogICAgdHJ5Q2F0Y2goCiAgICAgIHV0aWxzOjppbnN0YWxsLnBhY2thZ2VzKHAsIHJlcG9zID0gImh0dHBzOi8vY2xvdWQuci1wcm9qZWN0Lm9yZyIpLAogICAgICBlcnJvciA9IGZ1bmN0aW9uKGUpIG1lc3NhZ2UoY29uZGl0aW9uTWVzc2FnZShlKSkKICAgICkKICB9CiAgaWYgKCFyZXF1aXJlTmFtZXNwYWNlKHAsIHF1aWV0bHkgPSBUUlVFKSkgewogICAgc3RvcCgiRmFsdGEgZWwgcGFxdWV0ZSAiLCBwLAogICAgICAgICAiLiBSZXZpc2UgSW50ZXJuZXQsIHBlcm1pc29zIGRlIGluc3RhbGFjacOzbiB5IHZlcnNpw7NuIGRlIFIuIikKICB9Cn0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KAogIGVjaG8gPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFLCB3YXJuaW5nID0gVFJVRSwgZXJyb3IgPSBGQUxTRSwKICBmaWcud2lkdGggPSA4LCBmaWcuaGVpZ2h0ID0gNC44LCBkcGkgPSAxNjAsCiAgZmlnLmFsaWduID0gImNlbnRlciIsIG91dC53aWR0aCA9ICIxMDAlIiwgY2FjaGUgPSBGQUxTRQopCm9wdGlvbnMod2lkdGggPSA5NSkKYWxwaGEgPC0gMC4wNQpmbXQgPC0gZnVuY3Rpb24oeCwgZCA9IDIpIGZvcm1hdEMoeCwgZm9ybWF0ID0gImYiLCBkaWdpdHMgPSBkLCBkZWNpbWFsLm1hcmsgPSAiLCIpCmZwIDwtIGZ1bmN0aW9uKHgpIGlmZWxzZSh4IDwgMC4wMDEsICI8IDAsMDAxIiwgZm10KHgsIDQpKQpjb2xvcmVzIDwtIGMoVDEgPSAiIzYzNzU4QSIsIFQyID0gIiMxNTlBOTQiLCBUMyA9ICIjNTM2OUIwIikKZXRpcXVldGFzIDwtIGMoVDEgPSAiVDEgwrcgVGV4dG8gbGVnYWwiLCBUMiA9ICJUMiDCtyBJbmZvZ3JhZsOtYSBpbXByZXNhIiwKICAgICAgICAgICAgICAgVDMgPSAiVDMgwrcgRGlnaXRhbCB5IGZpcm1hIikKdGVtYSA8LSBnZ3Bsb3QyOjp0aGVtZV9taW5pbWFsKGJhc2Vfc2l6ZSA9IDEyKSArCiAgZ2dwbG90Mjo6dGhlbWUoCiAgICBwYW5lbC5ncmlkLm1pbm9yID0gZ2dwbG90Mjo6ZWxlbWVudF9ibGFuaygpLAogICAgcGxvdC50aXRsZSA9IGdncGxvdDI6OmVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLCBzaXplID0gMTUsIGNvbG91ciA9ICIjMTgzMzQ5IiksCiAgICBwbG90LnN1YnRpdGxlID0gZ2dwbG90Mjo6ZWxlbWVudF90ZXh0KHNpemUgPSAxMCwgY29sb3VyID0gIiM1MjY0NzciKSwKICAgIGF4aXMudGl0bGUgPSBnZ3Bsb3QyOjplbGVtZW50X3RleHQoY29sb3VyID0gIiMzMzQ4NUMiKSwKICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgIHBsb3QubWFyZ2luID0gZ2dwbG90Mjo6bWFyZ2luKDEyLCAxNiwgMTIsIDEwKQogICkKYGBgCgo8c3R5bGU+CmJvZHkgeyBjb2xvcjogIzI2M2I0ZDsgYmFja2dyb3VuZDogI2ZmZjsgZm9udC1mYW1pbHk6ICJTZWdvZSBVSSIsIEFyaWFsLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE2cHg7IGxpbmUtaGVpZ2h0OiAxLjc7IH0KLm1haW4tY29udGFpbmVyIHsgbWF4LXdpZHRoOiAxMTIwcHg7IH0KaDEsIGgyLCBoMyB7IGNvbG9yOiAjMTgzMzQ5OyBmb250LXdlaWdodDogNjUwOyBsaW5lLWhlaWdodDogMS4yNTsgfQpoMS50aXRsZSB7IGZvbnQtc2l6ZTogMzdweDsgbWFyZ2luLXRvcDogMjhweDsgbGV0dGVyLXNwYWNpbmc6IC0uOHB4OyB9CmgyIHsgZm9udC1zaXplOiAyNXB4OyBtYXJnaW4tdG9wOiAzNnB4OyB9CmgzIHsgZm9udC1zaXplOiAyMHB4OyBtYXJnaW4tdG9wOiAyNHB4OyB9Ci5zdWJ0aXRsZSB7IGNvbG9yOiAjNTI2NDc3OyBmb250LXNpemU6IDE5cHg7IGxpbmUtaGVpZ2h0OiAxLjQ1OyB9Ci5kYXRlIHsgY29sb3I6ICM2NTc4ODk7IGZvbnQtc2l6ZTogMTRweDsgfQpwIHsgbWFyZ2luLWJvdHRvbTogMTZweDsgfQphIHsgY29sb3I6ICMxMTdlNzk7IH0KLnRhYmxlIHsgd2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwIDI0cHg7IGZvbnQtc2l6ZTogMTRweDsgfQoudGFibGUgdGggeyBiYWNrZ3JvdW5kOiAjMTgzMzQ5OyBjb2xvcjogI2ZmZjsgcGFkZGluZzogMTJweCAhaW1wb3J0YW50OyBib3JkZXI6IG5vbmUgIWltcG9ydGFudDsgfQoudGFibGUgdGQgeyBwYWRkaW5nOiAxMXB4IDEycHggIWltcG9ydGFudDsgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlNGVhZjAgIWltcG9ydGFudDsgdmVydGljYWwtYWxpZ246IG1pZGRsZSAhaW1wb3J0YW50OyB9Ci50YWJsZSB0Ym9keSB0cjpudGgtY2hpbGQoZXZlbikgeyBiYWNrZ3JvdW5kOiAjZjNmN2ZhOyB9Ci5jYXB0aW9uIHsgY29sb3I6ICM2NTc4ODk7IGZvbnQtc2l6ZTogMTNweDsgbWFyZ2luLXRvcDogOHB4OyB9Ci50b2NpZnkgeyBmb250LXNpemU6IDEzcHg7IGJvcmRlci1jb2xvcjogI2U0ZWFmMDsgYm9yZGVyLXJhZGl1czogNnB4OyB9Ci50b2NpZnkgLmFjdGl2ZSB7IGJhY2tncm91bmQ6ICMxMTdlNzk7IH0KcHJlIHsgYm9yZGVyOiAxcHggc29saWQgI2U0ZWFmMDsgYmFja2dyb3VuZDogI2Y2ZjhmYTsgYm9yZGVyLXJhZGl1czogNXB4OyBmb250LXNpemU6IDEycHg7IH0KZGV0YWlscyB7IG1hcmdpbjogMjBweCAwOyBwYWRkaW5nOiAxNXB4IDA7IGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGZlN2VkOyB9CnN1bW1hcnkgeyBjdXJzb3I6IHBvaW50ZXI7IGZvbnQtd2VpZ2h0OiA2MDA7IGNvbG9yOiAjMTE3ZTc5OyB9CkBtZWRpYSBwcmludCB7ICNUT0MsIC5jb2RlLWZvbGRpbmctYnRuLCAuY29kZS10b29scyB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfSBib2R5IHsgZm9udC1zaXplOiAxMXB0OyB9IH0KPC9zdHlsZT4KCmBgYHtyIGRhdG9zLXktYW5hbGlzaXMsIGluY2x1ZGU9RkFMU0V9CmRhdG9zX2RjYSA8LSBkYXRhLmZyYW1lKAogIHBhY2llbnRlID0gc3ByaW50ZigiRENBX1AlMDJkIiwgMToxOCksCiAgdHJhdGFtaWVudG8gPSBmYWN0b3IoYygiVDIiLCJUMSIsIlQzIiwiVDEiLCJUMyIsIlQyIiwKICAgICJUMyIsIlQyIiwiVDEiLCJUMiIsIlQzIiwiVDEiLCJUMSIsIlQyIiwiVDMiLCJUMyIsIlQxIiwiVDIiKSwKICAgIGxldmVscyA9IGMoIlQxIiwiVDIiLCJUMyIpKSwKICBjb21wcmVuc2lvbiA9IGMoNzguNSw2NSw4NS41LDcyLjUsOTAsODIsODAuNSw3NSw2MC41LAogICAgICAgICAgICAgICAgICA4OCw4Ny41LDcwLDY4LjUsODAuNSw5Miw4NCw3NS41LDg0KQopCnN0b3BpZm5vdChucm93KGRhdG9zX2RjYSkgPT0gMTgsICFhbnlOQShkYXRvc19kY2EpLAogICFhbnlEdXBsaWNhdGVkKGRhdG9zX2RjYSRwYWNpZW50ZSksCiAgYWxsKHRhYmxlKGRhdG9zX2RjYSR0cmF0YW1pZW50bykgPT0gNiksCiAgYWxsKGRhdG9zX2RjYSRjb21wcmVuc2lvbiA+PSAwICYgZGF0b3NfZGNhJGNvbXByZW5zaW9uIDw9IDEwMCkpCm1vZGVsbyA8LSBzdGF0czo6YW92KGNvbXByZW5zaW9uIH4gdHJhdGFtaWVudG8sIGRhdGEgPSBkYXRvc19kY2EpCmFuIDwtIHN1bW1hcnkobW9kZWxvKVtbMV1dCnJvd25hbWVzKGFuKSA8LSB0cmltd3Mocm93bmFtZXMoYW4pKQpyZXMgPC0gc3RhdHM6OnJlc2lkdWFscyhtb2RlbG8pCnNoIDwtIHN0YXRzOjpzaGFwaXJvLnRlc3QocmVzKQpiYSA8LSBzdGF0czo6YmFydGxldHQudGVzdChjb21wcmVuc2lvbiB+IHRyYXRhbWllbnRvLCBkYXRhID0gZGF0b3NfZGNhKQp6IDwtIHdpdGgoZGF0b3NfZGNhLCBhYnMoY29tcHJlbnNpb24gLSBhdmUoY29tcHJlbnNpb24sIHRyYXRhbWllbnRvLCBGVU4gPSBzdGF0czo6bWVkaWFuKSkpCmxldiA8LSBzdGF0czo6YW5vdmEoc3RhdHM6OmxtKHogfiB0cmF0YW1pZW50bywgZGF0YSA9IGRhdG9zX2RjYSkpCnR1IDwtIHN0YXRzOjpUdWtleUhTRChtb2RlbG8sICJ0cmF0YW1pZW50byIsIGNvbmYubGV2ZWwgPSAwLjk1KSR0cmF0YW1pZW50bwp3ZSA8LSBzdGF0czo6b25ld2F5LnRlc3QoY29tcHJlbnNpb24gfiB0cmF0YW1pZW50bywgZGF0YSA9IGRhdG9zX2RjYSwgdmFyLmVxdWFsID0gRkFMU0UpCmt3IDwtIHN0YXRzOjprcnVza2FsLnRlc3QoY29tcHJlbnNpb24gfiB0cmF0YW1pZW50bywgZGF0YSA9IGRhdG9zX2RjYSkKU1NfdHIgPC0gYW5bInRyYXRhbWllbnRvIiwgIlN1bSBTcSJdClNTX2UgPC0gYW5bIlJlc2lkdWFscyIsICJTdW0gU3EiXQpDTV9lIDwtIGFuWyJSZXNpZHVhbHMiLCAiTWVhbiBTcSJdCm9tZWdhMiA8LSBtYXgoMCwgKFNTX3RyIC0gMiAqIENNX2UpIC8gKFNTX3RyICsgU1NfZSArIENNX2UpKQpyZXN1bWVuIDwtIGRvLmNhbGwocmJpbmQsIGxhcHBseShsZXZlbHMoZGF0b3NfZGNhJHRyYXRhbWllbnRvKSwgZnVuY3Rpb24odCkgewogIHggPC0gZGF0b3NfZGNhJGNvbXByZW5zaW9uW2RhdG9zX2RjYSR0cmF0YW1pZW50byA9PSB0XQogIGRhdGEuZnJhbWUoVHJhdGFtaWVudG8gPSB1bm5hbWUoZXRpcXVldGFzW3RdKSwgbiA9IGxlbmd0aCh4KSwKICAgIE1lZGlhID0gbWVhbih4KSwgREUgPSBzdGF0czo6c2QoeCksIE1lZGlhbmEgPSBzdGF0czo6bWVkaWFuKHgpLAogICAgTWluaW1vID0gbWluKHgpLCBNYXhpbW8gPSBtYXgoeCkpCn0pKQpjb21wYXJhY2lvbmVzIDwtIGRhdGEuZnJhbWUoQ29tcGFyYWNpb24gPSByb3duYW1lcyh0dSksCiAgRGlmZXJlbmNpYSA9IHR1WywgImRpZmYiXSwgTEkgPSB0dVssICJsd3IiXSwgTFMgPSB0dVssICJ1cHIiXSwKICBwX2FqdXN0YWRvID0gdHVbLCAicCBhZGoiXSwgcm93Lm5hbWVzID0gTlVMTCkKY29tcGFyYWNpb25lcyRSZXN1bHRhZG8gPC0gaWZlbHNlKGNvbXBhcmFjaW9uZXMkcF9hanVzdGFkbyA8IGFscGhhLAogICJEaWZlcmVuY2lhIGRldGVjdGFkYSIsICJTaW4gZXZpZGVuY2lhIHN1ZmljaWVudGUiKQpkaWFnIDwtIGRhdGEuZnJhbWUoQWp1c3RhZG8gPSBzdGF0czo6Zml0dGVkKG1vZGVsbyksCiAgUmVzaWR1byA9IHJlcywgRXN0YW5kYXJpemFkbyA9IHN0YXRzOjpyc3RhbmRhcmQobW9kZWxvKSwKICBDb29rID0gc3RhdHM6OmNvb2tzLmRpc3RhbmNlKG1vZGVsbykpCnBhcmVzIDwtIGNvbWJuKGxldmVscyhkYXRvc19kY2EkdHJhdGFtaWVudG8pLCAyLCBzaW1wbGlmeSA9IEZBTFNFKQpwb3N0X3dlIDwtIGRvLmNhbGwocmJpbmQsIGxhcHBseShwYXJlcywgZnVuY3Rpb24ocCkgewogIGEgPC0gZGF0b3NfZGNhJGNvbXByZW5zaW9uW2RhdG9zX2RjYSR0cmF0YW1pZW50byA9PSBwWzFdXQogIGIgPC0gZGF0b3NfZGNhJGNvbXByZW5zaW9uW2RhdG9zX2RjYSR0cmF0YW1pZW50byA9PSBwWzJdXQogIHRlc3QgPC0gc3RhdHM6OnQudGVzdChhLCBiLCB2YXIuZXF1YWwgPSBGQUxTRSwgY29uZi5sZXZlbCA9IDEgLSBhbHBoYSAvIDMpCiAgZGF0YS5mcmFtZShDb21wYXJhY2lvbiA9IHBhc3RlKHAsIGNvbGxhcHNlID0gIiBtZW5vcyAiKSwKICAgIERpZmVyZW5jaWEgPSBtZWFuKGEpIC0gbWVhbihiKSwgTElfQm9uZmVycm9uaSA9IHRlc3QkY29uZi5pbnRbMV0sCiAgICBMU19Cb25mZXJyb25pID0gdGVzdCRjb25mLmludFsyXSwgcCA9IHRlc3QkcC52YWx1ZSkKfSkpCnBvc3Rfd2UkcF9Ib2xtIDwtIHN0YXRzOjpwLmFkanVzdChwb3N0X3dlJHAsICJob2xtIikKcG9zdF9rdyA8LSBzdGF0czo6cGFpcndpc2Uud2lsY294LnRlc3QoZGF0b3NfZGNhJGNvbXByZW5zaW9uLAogIGRhdG9zX2RjYSR0cmF0YW1pZW50bywgcC5hZGp1c3QubWV0aG9kID0gImhvbG0iLCBleGFjdCA9IEZBTFNFKQpgYGAKCiMgUXXDqSBzZSBlc3R1ZGnDswoKKipQcmVndW50YSBkZSBpbnZlc3RpZ2FjacOzbjoqKiDCv2NhbWJpYSBlbCBwcm9tZWRpbyBkZSBjb21wcmVuc2nDs24gZGVsIHBhY2llbnRlIHNvYnJlIHN1IGNpcnVnw61hIGRlIHJlZW1wbGF6byB0b3RhbCBkZSByb2RpbGxhIHNlZ8O6biBlbCBmb3JtYXRvIGRlIGNvbnNlbnRpbWllbnRvIHF1ZSByZWNpYmU/CgpTZSBjb21wYXJhbiAqKjE4IHBhY2llbnRlcywgc2VpcyBwb3IgbW9kYWxpZGFkKiosIGVuIHVuIGRpc2XDsW8gY29tcGxldGFtZW50ZSBhbCBhemFyLiBDYWRhIHBhY2llbnRlIHJlY2liZSB1biBzb2xvIHRyYXRhbWllbnRvLiBMYSBhc2lnbmFjacOzbiBkZWwgZWplbXBsbyByZXByZXNlbnRhIHVuIHBvc2libGUgc29ydGVvIGdsb2JhbDsgbm8gZXMgdW4gZXN0dWRpbyBjb24gbWVkaWNpb25lcyByZXBldGlkYXMuCgp8IFRyYXRhbWllbnRvIHwgTW9kYWxpZGFkIHwKfDotLXw6LS18CnwgKipUMSDCtyBDb250cm9sKiogfCBGb3JtYXRvIHRyYWRpY2lvbmFsIGxlZ2FsIHkgdGV4dHVhbC4gfAp8ICoqVDIqKiB8IERvY3VtZW50byBzaW1wbGlmaWNhZG8gY29uIGluZm9ncmFmw61hcyBmw61zaWNhcyBpbXByZXNhcy4gfAp8ICoqVDMqKiB8IENvbnNlbnRpbWllbnRvIGRpZ2l0YWwgY29uIGluZm9ncmFmw61hcyB5IGZpcm1hIGVsZWN0csOzbmljYS4gfAoKTGEgcmVzcHVlc3RhIGVzIHVuIHB1bnRhamUgbnVtw6lyaWNvIGRlICoqMCBhIDEwMCoqOiB1biB2YWxvciBtYXlvciByZXByZXNlbnRhIG1heW9yIGNvbXByZW5zacOzbi4gTG9zIHB1bnRhamVzIHNvbiBpbnZlbnRhZG9zIHkgKipubyBwcm9jZWRlbiBkZSBsYSBhcGxpY2FjacOzbiBkZWwgQklDRVAgbmkgZGUgb3RybyBjdWVzdGlvbmFyaW8gdmFsaWRhZG8qKi4gRW4gdW5hIGludmVzdGlnYWNpw7NuIHJlYWwgZGViZSBlbXBsZWFyc2UgdW4gaW5zdHJ1bWVudG8gYXByb3BpYWRvIHkgdmFsaWRhZG8gcGFyYSBsYSBwb2JsYWNpw7NuLCBpZGlvbWEgeSBjb250ZXh0byBxdWlyw7pyZ2ljbywgc2lndWllbmRvIHN1cyByZWdsYXMgZGUgcHVudHVhY2nDs24uCgoqKlJlc3VsdGFkbyBwcmluY2lwYWwgZGVsIGVqZW1wbG8uKiogRWwgQU5PVkEgYHIgaWYgKGFuWyJ0cmF0YW1pZW50byIsICJQcig+RikiXSA8IGFscGhhKSAiZGV0ZWN0YSBkaWZlcmVuY2lhcyIgZWxzZSAibm8gZGV0ZWN0YSBkaWZlcmVuY2lhcyJgIGVudHJlIGxhcyBtZWRpYXMsIGNvbiBGID0gYHIgZm10KGFuWyJ0cmF0YW1pZW50byIsICJGIHZhbHVlIl0sIDMpYCB5IHAgYHIgaWYgKGFuWyJ0cmF0YW1pZW50byIsICJQcig+RikiXSA8IDAuMDAxKSAiPCAwLDAwMSIgZWxzZSBwYXN0ZSgiPSIsIGZwKGFuWyJ0cmF0YW1pZW50byIsICJQcig+RikiXSkpYC4gTGEgdGFibGEgZGUgVHVrZXkgcGVybWl0ZSBpZGVudGlmaWNhciBsYXMgY29tcGFyYWNpb25lcyBjb25jcmV0YXMuIEVzdG9zIHJlc3VsdGFkb3MgZGVzY3JpYmVuIMO6bmljYW1lbnRlIGxvcyBkYXRvcyBmaWN0aWNpb3MuCgojIEPDs21vIHNlIGRpc3RyaWJ1eWVyb24gbG9zIHB1bnRhamVzCgpgYGB7ciB0YWJsYS1kZXNjcmlwdGl2YX0Ka25pdHI6OmthYmxlKHJlc3VtZW4sIGRpZ2l0cyA9IDIsIHJvdy5uYW1lcyA9IEZBTFNFLAogIGNvbC5uYW1lcyA9IGMoIk1vZGFsaWRhZCIsICJQYWNpZW50ZXMiLCAiTWVkaWEiLCAiRGVzdi4gZXN0w6FuZGFyIiwgIk1lZGlhbmEiLCAiTcOtbmltbyIsICJNw6F4aW1vIiksCiAgY2FwdGlvbiA9ICJUYWJsYSAxLiBSZXN1bWVuIGRlIGNvbXByZW5zacOzbiBwb3IgbW9kYWxpZGFkLiBFc2NhbGEgZGUgMCBhIDEwMC4iKQpgYGAKCkxhICoqbWVkaWEqKiBlcyBlbCBwcm9tZWRpbyBkZWwgZ3J1cG8uIExhICoqbWVkaWFuYSoqIGVzIGVsIHZhbG9yIGNlbnRyYWwgYWwgb3JkZW5hciBzdXMgc2VpcyBwdW50YWplcy4gTGEgKipkZXN2aWFjacOzbiBlc3TDoW5kYXIqKiBpbmRpY2EgY3XDoW50byBzZSBzZXBhcmFuIGxvcyByZXN1bHRhZG9zIGRlbCBwcm9tZWRpbzogdW5hIGRlc3ZpYWNpw7NuIG1heW9yIHJlZmxlamEgbcOhcyB2YXJpYWNpw7NuIGVudHJlIHBhY2llbnRlcy4KCmBgYHtyIGJveHBsb3QsIGZpZy5jYXA9IkZpZ3VyYSAxLiBEaXN0cmlidWNpw7NuIGRlIGxhIGNvbXByZW5zacOzbi4gTG9zIHB1bnRvcyByZXByZXNlbnRhbiBwYWNpZW50ZXM7IGVsIHJvbWJvIGJsYW5jbyByZXByZXNlbnRhIGxhIG1lZGlhLiJ9CmdncGxvdDI6OmdncGxvdChkYXRvc19kY2EsIGdncGxvdDI6OmFlcyh0cmF0YW1pZW50bywgY29tcHJlbnNpb24sIGZpbGwgPSB0cmF0YW1pZW50bykpICsKICBnZ3Bsb3QyOjpnZW9tX2JveHBsb3Qod2lkdGggPSAwLjQ4LCBhbHBoYSA9IDAuNTgsIG91dGxpZXIuc2hhcGUgPSBOQSkgKwogIGdncGxvdDI6Omdlb21fcG9pbnQocG9zaXRpb24gPSBnZ3Bsb3QyOjpwb3NpdGlvbl9qaXR0ZXIod2lkdGggPSAwLjA2NSwgc2VlZCA9IDIwKSwKICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICIjMjAzNzRBIiwgc2l6ZSA9IDIuNSwgYWxwaGEgPSAwLjg1KSArCiAgZ2dwbG90Mjo6c3RhdF9zdW1tYXJ5KGZ1biA9IG1lYW4sIGdlb20gPSAicG9pbnQiLCBzaGFwZSA9IDIzLAogICAgICAgICAgICAgICAgICAgICAgIGZpbGwgPSAid2hpdGUiLCBjb2xvdXIgPSAiIzE4MzM0OSIsIHNpemUgPSAzLjUpICsKICBnZ3Bsb3QyOjpzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjb2xvcmVzKSArCiAgZ2dwbG90Mjo6c2NhbGVfeF9kaXNjcmV0ZShsYWJlbHMgPSBldGlxdWV0YXMpICsKICBnZ3Bsb3QyOjpjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgMTAwKSkgKyB0ZW1hICsKICBnZ3Bsb3QyOjpsYWJzKHRpdGxlID0gIkNvbXByZW5zacOzbiBlbiBsYXMgdHJlcyBtb2RhbGlkYWRlcyIsCiAgICBzdWJ0aXRsZSA9ICJDYWRhIHB1bnRvIGVzIHVuIHBhY2llbnRlOyBuID0gNiBwb3IgZ3J1cG8iLAogICAgeCA9IE5VTEwsIHkgPSAiUHVudGFqZSBkZSBjb21wcmVuc2nDs24iKQpgYGAKCioqQ8OzbW8gbGVlciBlbCBncsOhZmljby4qKiBMYSBsw61uZWEgZGVudHJvIGRlIGNhZGEgY2FqYSBlcyBsYSBtZWRpYW5hLiBMYSBjYWphIGNvbnRpZW5lIGxhIG1pdGFkIGNlbnRyYWwgZGUgbG9zIHB1bnRhamVzOyBsb3MgYmlnb3RlcyBzZSBleHRpZW5kZW4gaGFzdGEgbG9zIHZhbG9yZXMgcXVlIHF1ZWRhbiBkZW50cm8gZGUgMSw1IHJhbmdvcyBpbnRlcmN1YXJ0w61saWNvcyBkZXNkZSBsYSBjYWphLiBMb3MgcHVudG9zIG11ZXN0cmFuIHRvZGFzIGxhcyBvYnNlcnZhY2lvbmVzLCBpbmNsdXNvIGxhcyBxdWUgcHVkaWVyYW4gcXVlZGFyIGZ1ZXJhIGRlIGxvcyBiaWdvdGVzLiBVbiBwdW50byBhbGVqYWRvIG1lcmVjZSByZXZpc2nDs247IG5vIGRlYmUgZWxpbWluYXJzZSBhdXRvbcOhdGljYW1lbnRlLgoKKipRdcOpIG11ZXN0cmEgZXN0ZSBlamVtcGxvLioqIFQxIHRpZW5lIHVuYSBtZWRpYSBkZSBgciBmbXQocmVzdW1lbiRNZWRpYVsxXSlgIHB1bnRvcywgVDIgZGUgYHIgZm10KHJlc3VtZW4kTWVkaWFbMl0pYCB5IFQzIGRlIGByIGZtdChyZXN1bWVuJE1lZGlhWzNdKWAuIFQyIHkgVDMgcHJlc2VudGFuIHB1bnRhamVzIG3DoXMgYWx0b3MgcXVlIFQxLiBTaW4gZW1iYXJnbywgb2JzZXJ2YXIgY2FqYXMgc2VwYXJhZGFzIG8gc3VwZXJwdWVzdGFzIG5vIHN1c3RpdHV5ZSB1bmEgY29tcGFyYWNpw7NuIGVzdGFkw61zdGljYTogZWwgZ3LDoWZpY28gYXl1ZGEgYSB2ZXIgbG9zIGRhdG9zLCBtaWVudHJhcyBxdWUgbG9zIGludGVydmFsb3MgZGUgVHVrZXkgY3VhbnRpZmljYW4gbGEgaW5jZXJ0aWR1bWJyZS4KCiMgUXXDqSBjb21wcm9iYW1vcyBhbnRlcyBkZSBpbnRlcnByZXRhciBlbCBBTk9WQQoKRWwgQU5PVkEgc3Vwb25lIGluZGVwZW5kZW5jaWEgZW50cmUgcGFjaWVudGVzLCB2YXJpYWNpw7NuIHJlc2lkdWFsIGFwcm94aW1hZGFtZW50ZSBzaW1pbGFyIGVuIGxvcyB0cmF0YW1pZW50b3MgeSBlcnJvcmVzIHJhem9uYWJsZW1lbnRlIGNvbXBhdGlibGVzIGNvbiB1bmEgZGlzdHJpYnVjacOzbiBub3JtYWwuICoqTGEgbm9ybWFsaWRhZCBzZSByZXZpc2EgZW4gbG9zIHJlc2lkdW9zIGRlbCBtb2RlbG8qKiwgbm8gZW4gdG9kb3MgbG9zIHB1bnRhamVzIG1lemNsYWRvcy4KClVuIHJlc2lkdW8gZXMgbGEgZGlmZXJlbmNpYSBlbnRyZSBlbCBwdW50YWplIGRlIHVuIHBhY2llbnRlIHkgZWwgcHJvbWVkaW8gcXVlIGVsIG1vZGVsbyBlc3RpbWEgcGFyYSBzdSBtb2RhbGlkYWQuIFBvciBlamVtcGxvLCB1biByZXNpZHVvIGRlICs1IHNpZ25pZmljYSBxdWUgb2J0dXZvIGNpbmNvIHB1bnRvcyBtw6FzIGRlIGxvIGVzcGVyYWRvIHBhcmEgc3UgZ3J1cG8uCgpgYGB7ciB0YWJsYS1zdXB1ZXN0b3N9CnN1cHVlc3RvcyA8LSBkYXRhLmZyYW1lKAogIFBydWViYSA9IGMoIlNoYXBpcm/igJNXaWxrIiwgIkJhcnRsZXR0IiwgIkxldmVuZSBjZW50cmFkbyBlbiBtZWRpYW5hIiksCiAgUHJlZ3VudGEgPSBjKCLCv0xvcyByZXNpZHVvcyBzZSBhcGFydGFuIGRlIGxhIG5vcm1hbGlkYWQ/IiwKICAgICAgICAgICAgICAgIsK/RGlmaWVyZW4gbGFzIHZhcmlhbnphcyBlbnRyZSBtb2RhbGlkYWRlcz8iLAogICAgICAgICAgICAgICAiwr9EaWZpZXJlIGxhIGRpc3BlcnNpw7NuIGVudHJlIG1vZGFsaWRhZGVzPyIpLAogIHAgPSBjKGZwKHNoJHAudmFsdWUpLCBmcChiYSRwLnZhbHVlKSwgZnAobGV2WzEsICJQcig+RikiXSkpLAogIExlY3R1cmEgPSBpZmVsc2UoYyhzaCRwLnZhbHVlLCBiYSRwLnZhbHVlLCBsZXZbMSwgIlByKD5GKSJdKSA8IGFscGhhLAogICAgICAgICAgICAgICAgICAiUmV2aXNhciBwb3NpYmxlIGluY3VtcGxpbWllbnRvIiwgIk5vIHNlIGRldGVjdGEgaW5jdW1wbGltaWVudG8iKQopCmtuaXRyOjprYWJsZShzdXB1ZXN0b3MsIHJvdy5uYW1lcyA9IEZBTFNFLAogIGNhcHRpb24gPSAiVGFibGEgMi4gRGlhZ27Ds3N0aWNvcyBjb24gbml2ZWwgZGUgcmVmZXJlbmNpYSAwLDA1LiIpCmBgYAoKKipJbnRlcnByZXRhY2nDs24gc2VuY2lsbGEuKiogQ29uIGVzdG9zIGRhdG9zLCBsYXMgdHJlcyBwcnVlYmFzIG5vIGRldGVjdGFuIHByb2JsZW1hcyBhbCBuaXZlbCBkZSAwLDA1LiBFc28gKipubyBkZW11ZXN0cmEqKiBub3JtYWxpZGFkIG5pIGlndWFsZGFkIGRlIHZhcmlhbnphcy4gQ29uIHNlaXMgcGFjaWVudGVzIHBvciBncnVwbywgbGFzIHBydWViYXMgcHVlZGVuIG5vIGRldGVjdGFyIGRlc3ZpYWNpb25lcyByZWxldmFudGVzLiBCYXJ0bGV0dCBlcyBlc3BlY2lhbG1lbnRlIHNlbnNpYmxlIGEgbGEgZmFsdGEgZGUgbm9ybWFsaWRhZDsgTGV2ZW5lIGNlbnRyYWRvIGVuIGxhIG1lZGlhbmEgZXMgbcOhcyByZXNpc3RlbnRlIGEgb2JzZXJ2YWNpb25lcyBleHRyZW1hcy4KCkxhIGluZGVwZW5kZW5jaWEgc2Ugc29zdGllbmUgZW4gZWwgZGlzZcOxbzogcGFjaWVudGVzIGRpc3RpbnRvcywgdW5hIG1vZGFsaWRhZCBwb3IgcGVyc29uYSB5IGF1c2VuY2lhIGRlIGluZmx1ZW5jaWFzIHJlbGV2YW50ZXMgZW50cmUgZWxsb3MuIE5pbmd1bmEgZGUgZXN0YXMgdHJlcyBwcnVlYmFzIGNvbmZpcm1hIGVzYSBjb25kaWNpw7NuLgoKYGBge3IgcXEtcmVzaWR1b3MsIGZpZy5jYXA9IkZpZ3VyYSAyLiBHcsOhZmljbyBRUSBkZSBsb3MgcmVzaWR1b3MgZXN0YW5kYXJpemFkb3MuIExhIGzDrW5lYSBlcyB1bmEgcmVmZXJlbmNpYSBwYXJhIHVuYSBkaXN0cmlidWNpw7NuIG5vcm1hbC4ifQpnZ3Bsb3QyOjpnZ3Bsb3QoZGlhZywgZ2dwbG90Mjo6YWVzKHNhbXBsZSA9IEVzdGFuZGFyaXphZG8pKSArCiAgZ2dwbG90Mjo6c3RhdF9xcShjb2xvdXIgPSAiIzE1OUE5NCIsIHNpemUgPSAyLjUpICsKICBnZ3Bsb3QyOjpzdGF0X3FxX2xpbmUoY29sb3VyID0gIiMxODMzNDkiLCBsaW5ldHlwZSA9ICJkYXNoZWQiKSArIHRlbWEgKwogIGdncGxvdDI6OmxhYnModGl0bGUgPSAiwr9Mb3MgZXJyb3JlcyB0aWVuZW4gdW5hIGZvcm1hIGFwcm94aW1hZGFtZW50ZSBub3JtYWw/IiwKICAgIHN1YnRpdGxlID0gIlNlIGV2YWzDumFuIGxvcyByZXNpZHVvcywgbm8gbGEgbWV6Y2xhIGRlIGxvcyB0cmVzIHRyYXRhbWllbnRvcyIsCiAgICB4ID0gIkN1YW50aWxlcyBkZSByZWZlcmVuY2lhIG5vcm1hbCIsIHkgPSAiUmVzaWR1b3MgZXN0YW5kYXJpemFkb3MiKQpgYGAKCioqQ8OzbW8gbGVlcmxvLioqIFNpIGxvcyBwdW50b3Mgc2lndWVuIHJhem9uYWJsZW1lbnRlIGxhIGzDrW5lYSwgbGEgZm9ybWEgZGUgbG9zIHJlc2lkdW9zIGVzIGNvbXBhdGlibGUgY29uIGxhIG5vcm1hbGlkYWQuIEN1cnZhcyBwcm9udW5jaWFkYXMgbyBwdW50b3MgbXV5IGFsZWphZG9zIGVuIGxvcyBleHRyZW1vcyBzdWdpZXJlbiByZXZpc2FyIGVsIHN1cHVlc3RvLiBObyBlc3BlcmFtb3MgdW5hIGFsaW5lYWNpw7NuIHBlcmZlY3RhIGNvbiBzb2xvIDE4IG9ic2VydmFjaW9uZXMuIEVuIGVzdGUgZWplbXBsbywgU2hhcGlyb+KAk1dpbGsgYXBvcnRhIHAgPSBgciBmcChzaCRwLnZhbHVlKWAsIHNpbiBkZXRlY3RhciB1biBhbGVqYW1pZW50byBkZSBsYSBub3JtYWxpZGFkLgoKYGBge3IgcmVzaWR1b3MtYWp1c3RhZG9zLCBmaWcuY2FwPSJGaWd1cmEgMy4gUmVzaWR1b3MgcG9yIHZhbG9yIGFqdXN0YWRvLiBMYXMgdHJlcyBjb2x1bW5hcyBjb3JyZXNwb25kZW4gYSBsYXMgbWVkaWFzIGRlIGxhcyB0cmVzIG1vZGFsaWRhZGVzLiJ9CmdncGxvdDI6OmdncGxvdChkaWFnLCBnZ3Bsb3QyOjphZXMoQWp1c3RhZG8sIFJlc2lkdW8pKSArCiAgZ2dwbG90Mjo6Z2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgbGluZXR5cGUgPSAiZGFzaGVkIiwgY29sb3VyID0gIiM2Mzc1OEEiKSArCiAgZ2dwbG90Mjo6Z2VvbV9wb2ludChjb2xvdXIgPSAiIzUzNjlCMCIsIHNpemUgPSAyLjcpICsgdGVtYSArCiAgZ2dwbG90Mjo6bGFicyh0aXRsZSA9ICLCv0xhIHZhcmlhYmlsaWRhZCBjYW1iaWEgZW50cmUgbW9kYWxpZGFkZXM/IiwKICAgIHN1YnRpdGxlID0gIkJ1c2NhciBhbXBsaXR1ZGVzIHZlcnRpY2FsZXMgcGFyZWNpZGFzIHkgb2JzZXJ2YWNpb25lcyBtdXkgYWxlamFkYXMiLAogICAgeCA9ICJDb21wcmVuc2nDs24gbWVkaWEgZXN0aW1hZGEgcG9yIGVsIG1vZGVsbyIsIHkgPSAiUmVzaWR1byBlbiBwdW50b3MiKQpgYGAKCioqQ8OzbW8gbGVlcmxvLioqIExvcyByZXNpZHVvcyBkZWJlbiByZXBhcnRpcnNlIGFscmVkZWRvciBkZSBjZXJvIHkgcHJlc2VudGFyIHVuYSBhbXBsaXR1ZCB2ZXJ0aWNhbCByZWxhdGl2YW1lbnRlIHNlbWVqYW50ZS4gVW5hIGNvbHVtbmEgbXVjaG8gbcOhcyBleHRlbmRpZGEsIG8gdW4gcGF0csOzbiBkZSBhYmFuaWNvLCBzdWdlcmlyw61hIHZhcmlhbnphcyBkaXN0aW50YXMuIExhcyBjb2x1bW5hcyBzb24gbm9ybWFsZXMgZW4gZXN0ZSBncsOhZmljbzogY2FkYSBwYWNpZW50ZSBjb21wYXJ0ZSBlbCB2YWxvciBhanVzdGFkbyBjb24gbG9zIG90cm9zIGNpbmNvIGRlIHN1IHRyYXRhbWllbnRvLiBMb3MgcHVudG9zIGV4dHJlbW9zIGRlYmVuIHJldmlzYXJzZSBjb24gc3UgcmVnaXN0cm8gb3JpZ2luYWwsIHNpbiBlbGltaW5hcmxvcyBwYXJhIG9idGVuZXIgdW4gdmFsb3IgcCBmYXZvcmFibGUuCgojIFF1w6kgZGlmZXJlbmNpYXMgZGV0ZWN0w7MgZWwgYW7DoWxpc2lzCgojIyBMYSBjb21wYXJhY2nDs24gZ2xvYmFsCgpMYSBoaXDDs3Rlc2lzIG51bGEgZXN0YWJsZWNlIHF1ZSAqKmxhcyB0cmVzIG1lZGlhcyBzb24gaWd1YWxlcyoqLiBFbCBBTk9WQSBjb21wYXJhIGxhIHNlcGFyYWNpw7NuIGVudHJlIGxvcyBwcm9tZWRpb3MgY29uIGxhIHZhcmlhY2nDs24gZW50cmUgcGFjaWVudGVzIHF1ZSByZWNpYmllcm9uIGxhIG1pc21hIG1vZGFsaWRhZC4KCmBgYHtyIHRhYmxhLWFub3ZhfQp0YWJsYV9hbm92YSA8LSBkYXRhLmZyYW1lKAogIEZ1ZW50ZSA9IGMoIlRyYXRhbWllbnRvIiwgIkVycm9yIHJlc2lkdWFsIiksCiAgZ2wgPSBhbiREZiwKICBTQyA9IGFuJGBTdW0gU3FgLAogIENNID0gYW4kYE1lYW4gU3FgLAogIEYgPSBjKGZtdChhblsidHJhdGFtaWVudG8iLCAiRiB2YWx1ZSJdLCAzKSwgIuKAlCIpLAogIHAgPSBjKGZwKGFuWyJ0cmF0YW1pZW50byIsICJQcig+RikiXSksICLigJQiKQopCmtuaXRyOjprYWJsZSh0YWJsYV9hbm92YSwgZGlnaXRzID0gMiwgcm93Lm5hbWVzID0gRkFMU0UsCiAgY29sLm5hbWVzID0gYygiRnVlbnRlIiwgImdsIiwgIlN1bWEgZGUgY3VhZHJhZG9zIiwgIkN1YWRyYWRvIG1lZGlvIiwgIkYiLCAicCIpLAogIGNhcHRpb24gPSAiVGFibGEgMy4gQU5PVkEgZGUgdW5hIHbDrWEgcGFyYSBlbCBEQ0EuIikKYGBgCgpFbCByZXN1bHRhZG8gZ2xvYmFsIGluZGljYSBxdWUgYHIgaWYgKGFuWyJ0cmF0YW1pZW50byIsICJQcig+RikiXSA8IGFscGhhKSAiaGF5IGV2aWRlbmNpYSBkZSBxdWUgYWwgbWVub3MgdW5hIG1lZGlhIGVzIGRpZmVyZW50ZSIgZWxzZSAibm8gaGF5IGV2aWRlbmNpYSBzdWZpY2llbnRlIHBhcmEgZGlzdGluZ3VpciBsYXMgbWVkaWFzImAuIE5vIGlkZW50aWZpY2EgcG9yIHPDrSBzb2xvIGN1w6FsIG1vZGFsaWRhZCBkaWZpZXJlIGRlIGN1w6FsLiBFbCB2YWxvciBwIHRhbXBvY28gZXMgbGEgcHJvYmFiaWxpZGFkIGRlIHF1ZSBsYSBoaXDDs3Rlc2lzIG51bGEgc2VhIHZlcmRhZGVyYSBuaSBpbmRpY2EgY3XDoW50b3MgcHVudG9zIG1lam9yYSB1bmEgbW9kYWxpZGFkLgoKQ29tbyBjb21wbGVtZW50bywgb21lZ2EgY3VhZHJhZG8gZXMgYHIgZm10KG9tZWdhMiwgMylgLiBSZXN1bWUgbGEgbWFnbml0dWQgZGUgbGEgc2VwYXJhY2nDs24gZW50cmUgZ3J1cG9zIHJlc3BlY3RvIGEgbGEgdmFyaWFiaWxpZGFkIHRvdGFsLCBjb24gdW5hIGNvcnJlY2Npw7NuIHBvciBlbCBlcnJvci4gTm8gZXMgdW4gcG9yY2VudGFqZSBkZSBwYWNpZW50ZXMgYmVuZWZpY2lhZG9zIHksIGVuIGVzdG9zIGRhdG9zIGludmVudGFkb3MsIG5vIGNvbnN0aXR1eWUgdW5hIGVzdGltYWNpw7NuIGRlIGVmaWNhY2lhIGNsw61uaWNhLgoKIyMgTGFzIGNvbXBhcmFjaW9uZXMgZW50cmUgbW9kYWxpZGFkZXMKClNlIGFwbGljYSBUdWtleSBwYXJhIGNvbXBhcmFyIGxvcyB0cmVzIHBhcmVzIG1hbnRlbmllbmRvIHVuYSBjb2JlcnR1cmEgc2ltdWx0w6FuZWEgZGVsIDk1ICUgcGFyYSBzdXMgaW50ZXJ2YWxvcyBiYWpvIGVsIG1vZGVsby4KCmBgYHtyIHRhYmxhLXR1a2V5fQp0YWJsYV90dWtleSA8LSBjb21wYXJhY2lvbmVzCnRhYmxhX3R1a2V5JHBfYWp1c3RhZG8gPC0gZnAodGFibGFfdHVrZXkkcF9hanVzdGFkbykKa25pdHI6OmthYmxlKHRhYmxhX3R1a2V5LCBkaWdpdHMgPSAyLCByb3cubmFtZXMgPSBGQUxTRSwKICBjb2wubmFtZXMgPSBjKCJDb21wYXJhY2nDs24iLCAiRGlmZXJlbmNpYSIsICJMw61taXRlIGluZmVyaW9yIiwgIkzDrW1pdGUgc3VwZXJpb3IiLCAicCBhanVzdGFkbyIsICJMZWN0dXJhIiksCiAgY2FwdGlvbiA9ICJUYWJsYSA0LiBEaWZlcmVuY2lhcyBkZSBjb21wcmVuc2nDs24gZW4gcHVudG9zLiBUMuKAk1QxIHNpZ25pZmljYSBUMiBtZW5vcyBUMS4iKQpgYGAKCmBgYHtyIGludGVydmFsb3MtdHVrZXksIGZpZy5jYXA9IkZpZ3VyYSA0LiBEaWZlcmVuY2lhcyBkZSBtZWRpYXMgZSBpbnRlcnZhbG9zIHNpbXVsdMOhbmVvcyBkZWwgOTUgJSBkZSBUdWtleS4gTGEgbMOtbmVhIHZlcnRpY2FsIGluZGljYSBkaWZlcmVuY2lhIGNlcm8uIn0KZ2dwbG90Mjo6Z2dwbG90KGNvbXBhcmFjaW9uZXMsIGdncGxvdDI6OmFlcyh4ID0gQ29tcGFyYWNpb24sIHkgPSBEaWZlcmVuY2lhKSkgKwogIGdncGxvdDI6Omdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGxpbmV0eXBlID0gImRhc2hlZCIsIGNvbG91ciA9ICIjNjM3NThBIikgKwogIGdncGxvdDI6Omdlb21fZXJyb3JiYXIoZ2dwbG90Mjo6YWVzKHltaW4gPSBMSSwgeW1heCA9IExTKSwKICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSAwLjE0LCBjb2xvdXIgPSAiIzExN0U3OSIsIGxpbmV3aWR0aCA9IDAuODUpICsKICBnZ3Bsb3QyOjpnZW9tX3BvaW50KHNpemUgPSAzLjUsIGNvbG91ciA9ICIjMTgzMzQ5IikgKwogIGdncGxvdDI6OmNvb3JkX2ZsaXAoKSArIHRlbWEgKwogIGdncGxvdDI6OmxhYnModGl0bGUgPSAiQ3XDoW50byBkaWZpZXJlbiBsb3MgdHJhdGFtaWVudG9zIHkgY29uIHF1w6kgaW5jZXJ0aWR1bWJyZSIsCiAgICBzdWJ0aXRsZSA9ICJJbnRlcnZhbG9zIGFqdXN0YWRvcyBwYXJhIGxhcyB0cmVzIGNvbXBhcmFjaW9uZXMiLAogICAgeCA9IE5VTEwsIHkgPSAiRGlmZXJlbmNpYSBkZSBjb21wcmVuc2nDs24gZW4gcHVudG9zIikKYGBgCgoqKkPDs21vIGxlZXJsby4qKiBFbCBwdW50byByZXByZXNlbnRhIGxhIGRpZmVyZW5jaWEgZW50cmUgcHJvbWVkaW9zIHkgbGEgbMOtbmVhIGhvcml6b250YWwgbXVlc3RyYSBzdSBpbnRlcnZhbG8uIFNpIHRvZG8gZWwgaW50ZXJ2YWxvIHF1ZWRhIHBvciBlbmNpbWEgZGUgY2VybywgbGEgcHJpbWVyYSBtb2RhbGlkYWQgdGllbmUgdW5hIG1lZGlhIG1heW9yIHF1ZSBsYSBzZWd1bmRhIGJham8gZXN0ZSBhbsOhbGlzaXMuIFNpIGVsIGludGVydmFsbyBjcnV6YSBjZXJvLCBsYSBtdWVzdHJhIG5vIHBlcm1pdGUgZGlzdGluZ3VpciBlc2UgcGFyIGFsIG5pdmVsIGVsZWdpZG8uCgoqKlQyIGZyZW50ZSBhIFQxOioqIGxhIGRpZmVyZW5jaWEgZXMgZGUgYHIgZm10KHR1WyJUMi1UMSIsICJkaWZmIl0pYCBwdW50b3MsIGNvbiBpbnRlcnZhbG8gZGUgYHIgZm10KHR1WyJUMi1UMSIsICJsd3IiXSlgIGEgYHIgZm10KHR1WyJUMi1UMSIsICJ1cHIiXSlgLiBgciBpZiAodHVbIlQyLVQxIiwgInAgYWRqIl0gPCBhbHBoYSkgIlNlIGRldGVjdGEgdW5hIGRpZmVyZW5jaWEgZmF2b3JhYmxlIGEgVDIgZW4gZXN0b3MgZGF0b3MuIiBlbHNlICJObyBzZSBkZXRlY3RhIHVuYSBkaWZlcmVuY2lhIGVuIGVzdG9zIGRhdG9zLiJgCgoqKlQzIGZyZW50ZSBhIFQxOioqIGxhIGRpZmVyZW5jaWEgZXMgZGUgYHIgZm10KHR1WyJUMy1UMSIsICJkaWZmIl0pYCBwdW50b3MsIGNvbiBpbnRlcnZhbG8gZGUgYHIgZm10KHR1WyJUMy1UMSIsICJsd3IiXSlgIGEgYHIgZm10KHR1WyJUMy1UMSIsICJ1cHIiXSlgLiBgciBpZiAodHVbIlQzLVQxIiwgInAgYWRqIl0gPCBhbHBoYSkgIlNlIGRldGVjdGEgdW5hIGRpZmVyZW5jaWEgZmF2b3JhYmxlIGEgVDMgZW4gZXN0b3MgZGF0b3MuIiBlbHNlICJObyBzZSBkZXRlY3RhIHVuYSBkaWZlcmVuY2lhIGVuIGVzdG9zIGRhdG9zLiJgCgoqKlQzIGZyZW50ZSBhIFQyOioqIGxhIGRpZmVyZW5jaWEgZXMgZGUgYHIgZm10KHR1WyJUMy1UMiIsICJkaWZmIl0pYCBwdW50b3MsIGNvbiBpbnRlcnZhbG8gZGUgYHIgZm10KHR1WyJUMy1UMiIsICJsd3IiXSlgIGEgYHIgZm10KHR1WyJUMy1UMiIsICJ1cHIiXSlgLiBgciBpZiAodHVbIlQzLVQyIiwgInAgYWRqIl0gPCBhbHBoYSkgIlNlIGRldGVjdGEgdW5hIGRpZmVyZW5jaWEgZW50cmUgYW1iYXMgbW9kYWxpZGFkZXMuIiBlbHNlICJObyBoYXkgZXZpZGVuY2lhIHN1ZmljaWVudGUgcGFyYSBkaXN0aW5ndWlybGFzLiBFc3RvIG5vIGRlbXVlc3RyYSBxdWUgc2VhbiBlcXVpdmFsZW50ZXMuImAKCiMgUXXDqSBvY3VycmUgY29uIG90cmFzIGZvcm1hcyBkZSBhbmFsaXphcgoKV2VsY2ggc2UgaW5jbHV5ZSBjb21vIHNlbnNpYmlsaWRhZCBhbnRlIHZhcmlhbnphcyBkaWZlcmVudGVzLiBLcnVza2Fs4oCTV2FsbGlzIHV0aWxpemEgcmFuZ29zIHkgY29tcGFyYSBkaXN0cmlidWNpb25lczsgc3UgaW50ZXJwcmV0YWNpw7NuIGNvbW8gZGlmZXJlbmNpYSBkZSBsb2NhbGl6YWNpw7NuIHJlcXVpZXJlIGZvcm1hcyB5IGRpc3BlcnNpb25lcyBzZW1lamFudGVzLiBObyBzb24gcHJ1ZWJhcyBpbnRlcmNhbWJpYWJsZXMgbmkgc2UgZWxpZ2UgbGEgcXVlIHByb2R1Y2UgZWwgbWVub3IgdmFsb3IgcC4KCmBgYHtyIHNlbnNpYmlsaWRhZH0Kc2Vuc2liaWxpZGFkIDwtIGRhdGEuZnJhbWUoCiAgTWV0b2RvID0gYygiQU5PVkEgY2zDoXNpY28iLCAiQU5PVkEgZGUgV2VsY2giLCAiS3J1c2thbOKAk1dhbGxpcyIpLAogIEVuZm9xdWUgPSBjKCJJZ3VhbGRhZCBkZSBtZWRpYXMgY29uIHZhcmlhbnphIGNvbcO6biIsCiAgICAgICAgICAgICAgIklndWFsZGFkIGRlIG1lZGlhcyBwZXJtaXRpZW5kbyB2YXJpYW56YXMgZGlmZXJlbnRlcyIsCiAgICAgICAgICAgICAgIkNvbXBhcmFjacOzbiBwb3IgcmFuZ29zIGVudHJlIGdydXBvcyBpbmRlcGVuZGllbnRlcyIpLAogIHAgPSBjKGZwKGFuWyJ0cmF0YW1pZW50byIsICJQcig+RikiXSksIGZwKHdlJHAudmFsdWUpLCBmcChrdyRwLnZhbHVlKSkKKQprbml0cjo6a2FibGUoc2Vuc2liaWxpZGFkLCByb3cubmFtZXMgPSBGQUxTRSwKICBjYXB0aW9uID0gIlRhYmxhIDUuIEFuw6FsaXNpcyBkZSBzZW5zaWJpbGlkYWQ7IG5vIGNvbnN0aXR1eWVuIGVzdHVkaW9zIGluZGVwZW5kaWVudGVzLiIpCmBgYAoKRW4gZWwgZWplbXBsbywgbGFzIHRyZXMgcHJ1ZWJhcyBnbG9iYWxlcyBkZXRlY3RhbiBkaWZlcmVuY2lhcy4gRXN0byBtdWVzdHJhIGNvbnNpc3RlbmNpYSBkZXNjcmlwdGl2YSBmcmVudGUgYSBkaXN0aW50b3MgZW5mb3F1ZXMsIHBlcm8gbm8gY29ycmlnZSBsaW1pdGFjaW9uZXMgZGVsIGRpc2XDsW8gbmkgdmFsaWRhIGRhdG9zIHNpbXVsYWRvcy4gTG9zIHJlc3VsdGFkb3MgcG9yIHBhcmVzIHB1ZWRlbiBkaWZlcmlyIGVudHJlIG3DqXRvZG9zLCBlc3BlY2lhbG1lbnRlIGNvbiBzZWlzIHBlcnNvbmFzIHBvciBncnVwby4KCiMgUXXDqSBwb2RlbW9zIGNvbmNsdWlyCgpFbiBlc3RvcyBkYXRvcyBmaWN0aWNpb3MsICoqbG9zIGZvcm1hdG9zIGNvbiBpbmZvZ3JhZsOtYXMgcHJlc2VudGFuIG1heW9yIGNvbXByZW5zacOzbiBwcm9tZWRpbyBxdWUgZWwgZm9ybWF0byB0ZXh0dWFsIHRyYWRpY2lvbmFsKiouIEVsIGZvcm1hdG8gZGlnaXRhbCB0aWVuZSBlbCBwcm9tZWRpbyBtw6FzIGFsdG8sIHBlcm8gVHVrZXkgbm8gYXBvcnRhIGV2aWRlbmNpYSBzdWZpY2llbnRlIHBhcmEgYWZpcm1hciBxdWUgc3VwZXJhIGFsIGRvY3VtZW50byBpbXByZXNvIGNvbiBpbmZvZ3JhZsOtYXMuCgpMYSBwcmVndW50YSBjbMOtbmljYSByZWFsIGV4aWdlIG3DoXM6IHVuYSBtdWVzdHJhIGNhbGN1bGFkYSwgdW4gaW5zdHJ1bWVudG8gdsOhbGlkbyBwYXJhIGVsIGNvbnRleHRvLCBjb250ZW5pZG8gY2zDrW5pY28gZXF1aXZhbGVudGUsIG9wb3J0dW5pZGFkIGRlIHByZWd1bnRhciB5IGV2YWx1YWNpw7NuIGVuIGNvbmRpY2lvbmVzIGNvbXBhcmFibGVzLiBMYSBzaWduaWZpY2FjacOzbiBlc3RhZMOtc3RpY2Egbm8gZGV0ZXJtaW5hIHBvciBzw60gc29sYSBzaSB1bmEgZGlmZXJlbmNpYSBlcyBpbXBvcnRhbnRlIHBhcmEgbGEgcHLDoWN0aWNhLgoKVDMgY29tYmluYSBmb3JtYXRvIGRpZ2l0YWwsIGluZm9ncmFmw61hcyB5IGZpcm1hIGVsZWN0csOzbmljYTsgZWwgZXhwZXJpbWVudG8gY29tcGFyYSBlbCBwYXF1ZXRlIGNvbXBsZXRvIHkgKipubyBhw61zbGEgZWwgZWZlY3RvIGRlIGxhIGZpcm1hKiouIEVsIGNvbnNlbnRpbWllbnRvIHRhbXBvY28gcXVlZGEgcmVkdWNpZG8gYSB1biBmb3JtdWxhcmlvOiBlbiB0b2RvcyBsb3MgZ3J1cG9zIGRlYmUgbWFudGVuZXJzZSB1biBwcm9jZXNvIGRlIGluZm9ybWFjacOzbiB5IGFjbGFyYWNpw7NuIGRlIGR1ZGFzIGFkZWN1YWRvLgoKIyBEZXRhbGxlcyB5IHJlcHJvZHVjaWJpbGlkYWQKCjxkZXRhaWxzPgo8c3VtbWFyeT5WZXIgbGFzIDE4IG9ic2VydmFjaW9uZXMgYW5hbGl6YWRhczwvc3VtbWFyeT4KCmBgYHtyIGRhdG9zLWNvbXBsZXRvc30Ka25pdHI6OmthYmxlKGRhdG9zX2RjYSwgcm93Lm5hbWVzID0gRkFMU0UsCiAgY29sLm5hbWVzID0gYygiUGFjaWVudGUiLCAiVHJhdGFtaWVudG8iLCAiQ29tcHJlbnNpw7NuIikpCmBgYAoKPC9kZXRhaWxzPgoKPGRldGFpbHM+CjxzdW1tYXJ5PlZlciBsYXMgY29tcGFyYWNpb25lcyBhZGljaW9uYWxlcyBkZSBzZW5zaWJpbGlkYWQ8L3N1bW1hcnk+CgpMb3MgaW50ZXJ2YWxvcyBzaWd1aWVudGVzIHVzYW4gQm9uZmVycm9uaSBwYXJhIGNvYmVydHVyYSBjb25qdW50YSBkZSBhbCBtZW5vcyA5NSAlOyBsb3MgdmFsb3JlcyBwIHNlIGFqdXN0YW4gY29uIEhvbG0uIExvcyBkb3MgYWp1c3RlcyBzb24gZGlzdGludG9zIHkgZXN0w6FuIGlkZW50aWZpY2Fkb3MgcG9yIHNlcGFyYWRvLgoKYGBge3IgcG9zdGhvYy1zZW5zaWJpbGlkYWR9CnBvc3Rfd2VfdGFibGEgPC0gcG9zdF93ZVssIGMoIkNvbXBhcmFjaW9uIiwgIkRpZmVyZW5jaWEiLCAiTElfQm9uZmVycm9uaSIsICJMU19Cb25mZXJyb25pIiwgInBfSG9sbSIpXQpwb3N0X3dlX3RhYmxhJHBfSG9sbSA8LSBmcChwb3N0X3dlX3RhYmxhJHBfSG9sbSkKa25pdHI6OmthYmxlKHBvc3Rfd2VfdGFibGEsIGRpZ2l0cyA9IDIsIHJvdy5uYW1lcyA9IEZBTFNFLAogIGNhcHRpb24gPSAiQ29tcGFyYWNpb25lcyB0IGRlIFdlbGNoOiBpbnRlcnZhbG9zIEJvbmZlcnJvbmkgeSBwIGRlIEhvbG0uIikKYGBgCgpMYXMgY29tcGFyYWNpb25lcyBwb3IgcmFuZ29zIHNvbiBNYW5u4oCTV2hpdG5leSBjb24gYWp1c3RlIEhvbG0sIG5vIGVsIHByb2NlZGltaWVudG8gZGUgRHVubi4gU2UgZW1wbGVhIGFwcm94aW1hY2nDs24gbm9ybWFsIHBhcmEgYWRtaXRpciBlbXBhdGVzOyBzdXMgdmFsb3JlcyBwIHJlcXVpZXJlbiBjYXV0ZWxhIGNvbiBtdWVzdHJhcyBwZXF1ZcOxYXMuCgpgYGB7ciBwYXJlcy1yYW5nb3N9CnByaW50KHBvc3Rfa3cpCmBgYAoKPC9kZXRhaWxzPgoKPGRldGFpbHM+CjxzdW1tYXJ5PlZlciBvYnNlcnZhY2lvbmVzIHBvdGVuY2lhbG1lbnRlIGluZmx1eWVudGVzPC9zdW1tYXJ5PgoKTGEgZGlzdGFuY2lhIGRlIENvb2sgYXl1ZGEgYSBpZGVudGlmaWNhciBxdcOpIG9ic2VydmFjaW9uZXMgcG9kcsOtYW4gY2FtYmlhciBtw6FzIGVsIGFqdXN0ZSBkZWwgbW9kZWxvLiBMYSByZWZlcmVuY2lhIDQvbiBlcyBvcmllbnRhdGl2YTogbm8gZXMgdW5hIHJlZ2xhIGF1dG9tw6F0aWNhIHBhcmEgYm9ycmFyIHBhY2llbnRlcy4gUHJpbWVybyBkZWJlIGNvbXByb2JhcnNlIGxhIGNhbGlkYWQgZGVsIHJlZ2lzdHJvIHkgbGEgc2Vuc2liaWxpZGFkIGRlbCByZXN1bHRhZG8uCgpgYGB7ciBpbmZsdWVuY2lhfQppbmZsdWVuY2lhIDwtIGRhdGEuZnJhbWUoUGFjaWVudGUgPSBkYXRvc19kY2EkcGFjaWVudGUsCiAgUmVzaWR1b19lc3RhbmRhcml6YWRvID0gZGlhZyRFc3RhbmRhcml6YWRvLCBDb29rID0gZGlhZyRDb29rLAogIFJldmlzYXIgPSBpZmVsc2UoZGlhZyRDb29rID4gNCAvIG5yb3coZGF0b3NfZGNhKSwgIlJldmlzYXIgcmVnaXN0cm8iLCAiU2luIHNlw7FhbCBzZWfDum4gZXN0YSByZWZlcmVuY2lhIikpCmtuaXRyOjprYWJsZShpbmZsdWVuY2lhW29yZGVyKC1pbmZsdWVuY2lhJENvb2spLCBdLCBkaWdpdHMgPSAzLCByb3cubmFtZXMgPSBGQUxTRSkKYGBgCgo8L2RldGFpbHM+Cgo8ZGV0YWlscz4KPHN1bW1hcnk+VmVyIGNvbmZpZ3VyYWNpw7NuIGRlIFIgeSBwYXF1ZXRlczwvc3VtbWFyeT4KCmBgYHtyIHNlc2lvbn0Kc2Vzc2lvbkluZm8oKQpgYGAKCjwvZGV0YWlscz4KCkVzdGUgaW5mb3JtZSBzZSBlbGFib3LDsyBhIHBhcnRpciBkZSAqKkFuYWxpc2lzX0RDQV9Db25zZW50aW1pZW50by5SKiosIGNvbnNlcnZhbmRvIHN1cyAxOCByZWdpc3Ryb3MsIEFOT1ZBLCBwcnVlYmFzIGRlIHN1cHVlc3RvcyB5IGFuw6FsaXNpcyBkZSBzZW5zaWJpbGlkYWQuIExvcyByZXN1bHRhZG9zIHkgZmlndXJhcyBzZSByZWNhbGN1bGFuIGFsIGVqZWN1dGFyICoqS25pdCoqOyBlbCBhcmNoaXZvIG5vIG5lY2VzaXRhIGNvbmVjdGFyc2UgY29uIGVsIHNjcmlwdCBvcmlnaW5hbCBuaSBjb24gdW5hIGJhc2UgZXh0ZXJuYS4gRWwgY8OzZGlnbyBjb21wbGV0byBwdWVkZSBjb25zdWx0YXJzZSBjb24gbGEgb3BjacOzbiBkZSBkZXNjYXJnYSBkZWwgZG9jdW1lbnRvIEhUTUwgbyBhYnJpZW5kbyBlc3RlIGFyY2hpdm8gYC5ybWRgLgo=