Resumen. Este trabajo examina la sensibilidad de las estimaciones de pobreza monetaria de Paraguay a una recalibración retrospectiva de los factores de expansión. Se conservan los pesos publicados en los microdatos y se construye un escenario propio para 2015–2025. El tramo 2015–2021 utiliza postestratificación departamental; el tramo 2022–2025 utiliza ajuste iterativo acotado por departamento, departamento–área y sexo–grupo de edad. Las tablas, figuras, diferencias y diagnósticos que aparecen en este documento se calculan en R. La reconstrucción permite examinar cuánto cambia un estimador al sustituir el sistema de ponderación, con especial atención a los niveles absolutos y al cambio de etapa 2021/2022. La interpretación conserva las diferencias de cobertura, los errores residuales de calibración y las limitaciones de la estimación de varianza.

Palabras clave: EPHC; ponderación; calibración; postestratificación; encuestas de hogares; pobreza monetaria; Censo 2022; Paraguay.

Estado del análisis. Documento de trabajo. La serie propia combina dos especificaciones de calibración y requiere validación del universo frente a las publicaciones oficiales antes de su envío a una revista. Las cifras con el peso publicado se identifican como «INE» por la procedencia del ponderador; las estimaciones calculadas aquí son elaboración propia. La tabla de convergencia informa los casos que no reproducen exactamente los márgenes.

1 Introducción

Las encuestas de hogares producen estimaciones poblacionales mediante factores de expansión que dependen del diseño muestral, la no respuesta y los referentes demográficos utilizados en cada edición. Cuando cambian esos referentes, una misma muestra puede representar una población de tamaño o composición diferente. La cantidad de personas pobres depende tanto de la incidencia de la pobreza como del total de población representada. Esta relación hace necesario estudiar las revisiones de ponderadores antes de interpretar cambios de nivel como cambios exclusivamente sociales.

La documentación del INE describe la revisión de los referentes demográficos y la serie reciente de pobreza monetaria 2022–2025 (Instituto Nacional de Estadística 2026, 2025a). Este trabajo plantea la siguiente pregunta: ¿cómo cambian las tasas y cantidades de personas pobres al expresar las muestras históricas bajo un escenario de ponderación compatible con referentes demográficos posteriores al Censo 2022?

La contribución consiste en conservar los factores originales, explicitar la construcción de los objetivos y comparar los estimadores con una versión derivada de los pesos. El procedimiento permite una lectura de sensibilidad. Su capacidad para producir una serie plenamente comparable depende de la equivalencia entre universos, la calidad de los márgenes históricos y la homogeneidad del método aplicado a los diferentes años.

2 Antecedentes institucionales y metodológicos

2.1 Cronología de la revisión

El marco anterior utilizaba proyecciones demográficas cuya revisión resulta relevante para la expansión de las encuestas. Las publicaciones del INE sobre pobreza y los aspectos metodológicos de la EPHC describen los cambios asociados al Censo 2022 y a las nuevas proyecciones (Instituto Nacional de Estadística 2023, 2024c, 2025b, 2026). La revisión demográfica incorpora información censal y componentes poblacionales que deben distinguirse de las respuestas observadas en una encuesta (Instituto Nacional de Estadística 2024b).

Los factores históricos se emplearon bajo los referentes vigentes en su momento. Por ello, el procedimiento de este artículo se denomina recalibración retrospectiva. El catálogo institucional de la serie comparable constituye una fuente adicional para identificar las versiones disponibles, pero su denominación no basta para demostrar que todos sus ponderadores corresponden a la misma revisión demográfica (Instituto Nacional de Estadística 2025d).

2.2 Implicación para 2021/2022

La comparación de cantidades absolutas a ambos lados de 2021/2022 debe considerar el cambio de referente poblacional y las diferencias de cobertura. Una reducción en la cantidad estimada de personas pobres puede incorporar simultáneamente variaciones en la incidencia y en la población expandida. Esta observación motiva la comparación de ponderadores sobre una misma muestra dentro de cada año.

3 Marco de calibración de ponderadores

3.1 Calibración y postestratificación

Sea \(d_i\) el peso inicial del registro \(i\), \(x_i\) un vector de auxiliares y \(X\) sus totales poblacionales de referencia. La formulación general busca pesos \(w_i=d_i g_i\) que satisfagan

\[ \sum_{i\in s} w_i x_i = X. \]

Una clase de estimadores se obtiene minimizando una distancia convexa entre los pesos iniciales y los calibrados, sujeta a esas restricciones (Deville y Särndal 1992; Särndal et al. 1992; Mohl y Singh 1996):

\[ \min_w \sum_{i\in s} d_i\,G\!\left(\frac{w_i}{d_i}\right), \qquad \text{sujeto a }\sum_{i\in s}w_i x_i=X. \]

Con una única clasificación exhaustiva, la postestratificación aplica dentro de cada categoría \(c\) el ajuste

\[ g_c=\frac{X_c}{\sum_{i\in s_c}d_i}. \]

El raking actualiza sucesivamente varios márgenes (Deville et al. 1993). La implementación utilizada aquí multiplica los pesos por la razón entre el objetivo de cada categoría y su estimación actual, y después recorta \(g_i\) a un intervalo \([L,U]\). Este recorte iterativo constituye una regla computacional explícita; por sí solo no demuestra que se haya alcanzado la solución exacta del problema convexo con límites. Se informa el error observado al terminar cada ciclo completo.

En 2015–2021 se utiliza un margen departamental. En 2022–2025 se utilizan departamento, departamento–área y sexo–edad. Esta asimetría debe conservarse en la interpretación de la serie. La literatura sobre ponderación permite situar estas decisiones dentro de los problemas de probabilidades desiguales y eficiencia (Kish 1992).

3.2 Estimadores de cantidades y tasas

Para el indicador binario de pobreza \(z_i\), el total y la tasa se calculan como

\[ \widehat Y(w)=\sum_{i\in s_y}w_i z_i, \qquad \widehat P(w)=\frac{\sum_{i\in s_y}w_i z_i}{\sum_{i\in s_y}w_i}. \]

\(s_y\) contiene los registros con clasificación de pobreza disponible. La población expandida de todos los registros y el denominador válido para pobreza se exportan por separado. Un registro sin clasificación no se recodifica automáticamente como no pobre. La pobreza total se identifica mediante pobnopoi == 1; los códigos y universos deben contrastarse con el diccionario correspondiente (Instituto Nacional de Estadística 2024a).

3.3 Descomposición contable del cambio de ponderador

Para una misma muestra y universo, sea \(N\) la población expandida, \(P\) la incidencia y \(Y=NP\) la cantidad estimada de personas pobres. La diferencia entre ponderadores originales y propios admite la identidad

\[ \Delta Y=N_0\Delta P+P_0\Delta N+\Delta N\Delta P. \]

Esta identidad distingue variaciones de incidencia, tamaño poblacional e interacción. Se trata de una descomposición contable de dos estimadores calculados con los mismos datos observados; no identifica efectos causales de políticas.

4 Datos y diseño de la reconstrucción

4.1 Fuentes y procedencia

Tabla 1. Insumos de la reconstrucción en R.
Insumo Funcion Disponibilidad
EPH/EPHC histórica 2015–2021 Peso histórico, departamento y clasificación de pobreza Microdatos externos al proyecto
EPHC register 2022–2025 Peso publicado, auxiliares y UPM en el mismo SAV Microdatos externos al proyecto
Objetivos departamentales Totales anuales de postestratificación CSV externo; identificado en manifiesto
Benchmark censal Márgenes 2022 y proporciones urbana/rural CSV externo; se selecciona exclusivamente 2022
Proyecciones demográficas Márgenes demográficos 2023–2025 CSV externo; identificado en manifiesto
Literatura y documentos INE Definiciones y justificación metodológica Bibliografía enlazada; PDF en el archivo documental

Los resultados censales y las tablas Redatam permiten construir auxiliares por territorio y estructura demográfica (Instituto Nacional de Estadística 2025c, 2002, 2022). Los objetivos anuales utilizados por el proyecto son insumos derivados: su identificación en un archivo no sustituye la documentación de su extracción, transformación y compatibilidad con el universo de la encuesta.

4.2 Escenarios de factores

Se utilizan dos capas generadas en este flujo R:

  1. Peso publicado en los microdatos (INE): conserva la variable de expansión disponible en la versión fuente de cada año.
  2. Peso recalibrado propio: aplica postestratificación departamental en 2015–2021 y ajuste multivariable acotado en 2022–2025.

La comparación adicional con microdatos 2022–2024 previos a la revisión requiere un procesamiento independiente de FEX.2022. Esa tercera capa no se incorpora a estas figuras porque no se reconstruye en el flujo actual del artículo. Los gráficos de esta versión se generan directamente desde los dos escenarios R.

4.3 Construcción de los márgenes

Para 2015–2021 se leen los objetivos departamentales anuales del proyecto. Si la encuesta representa un conjunto de departamentos mediante «Resto», se crea una fila objetivo para ese dominio y se suman los objetivos correspondientes a los departamentos no observados de forma individual. La existencia de una celda agrupada no permite obtener estimaciones independientes para cada departamento que la integra.

En 2022 se seleccionan exclusivamente las filas correspondientes al año censal del archivo de benchmarks. Se distinguen los márgenes de área total y los de área urbana/rural para evitar sumarlos dos veces. En 2023–2025 se utilizan las proyecciones por departamento, sexo y edad. El margen de departamento–área conserva las proporciones urbana/rural del Censo 2022 como supuesto explícito.

Los grupos de edad son quinquenales hasta 75–79 y se agrupan en 80 años o más desde ese umbral. Las categorías sin observaciones no se completan con personas sintéticas. El diagnóstico conserva su objetivo y el error asociado a su ausencia.

4.4 Cobertura y controles

Antes de interpretar los totales como población nacional es necesario comprobar que los márgenes y la muestra compartan las mismas exclusiones territoriales y poblacionales. Este requisito incluye Boquerón, Alto Paraguay, comunidades indígenas, viviendas colectivas y las reglas de elegibilidad de la encuesta. La calibración no incorpora por sí misma poblaciones que no están cubiertas por la muestra.

Tabla 2. Dominios históricos representados y cierre de la postestratificación.
Año Dominios Resto Objetivo Error máximo de cierre
2015 16 No 5.832.778 0,000000
2016 16 No 5.888.098 0,000000
2017 16 No 5.944.566 0,000000
2018 8 Sí 6.086.887 0,000000
2019 8 Sí 6.144.832 0,000000
2020 8 Sí 6.202.478 0,000000
2021 8 Sí 6.247.916 0,000000

4.5 Procedimiento reproducible

El código preserva los originales, lee las versiones fuente, construye los márgenes y calcula los dos escenarios. La calibración reciente y el diagnóstico Taylor se realizan sobre el mismo SAV y los mismos registros. Esto evita combinar pesos de un CSV y registros de un SAV únicamente por su posición de fila.

La reconstrucción genera seis CSV agregados, un manifiesto de insumos y el registro de la sesión R. El R Markdown utiliza esos archivos para recalcular las tablas, las cifras dentro del texto y las figuras. Todas las salidas gráficas de esta versión proceden de código R ejecutado al tejer el documento.

5 Resultados

5.1 Tasas de pobreza

Figura 1. Incidencia de pobreza bajo los factores publicados y el escenario propio. El cambio de método se señala en 2021/2022.

Figura 1. Incidencia de pobreza bajo los factores publicados y el escenario propio. El cambio de método se señala en 2021/2022.

Tabla 3. Tasas calculadas sobre registros con clasificación de pobreza disponible.
Año Peso publicado INE (%) Peso propio (%) Diferencia (p.p.) Sin clasificación (n)
2015 26,49 26,18 -0,313 0
2016 28,77 28,41 -0,358 0
2017 26,32 25,92 -0,406 0
2018 24,10 23,95 -0,150 0
2019 23,44 23,33 -0,108 0
2020 26,82 26,79 -0,023 0
2021 26,85 26,64 -0,206 0
2022 24,51 24,42 -0,088 139
2023 21,64 21,86 0,220 131
2024 19,60 19,85 0,247 130
2025 16,00 16,27 0,272 107

Las diferencias de tasas describen la sensibilidad al sistema de pesos dentro de cada año. En 2021 el cambio es de -0,206 puntos porcentuales. Ese contraste no debe interpretarse como una variación temporal: ambas cifras se calculan con la muestra del mismo año.

5.2 Cantidad de personas pobres

Figura 2. Cantidad estimada de personas pobres, en millones. Las estimaciones propias son escenarios analíticos.

Figura 2. Cantidad estimada de personas pobres, en millones. Las estimaciones propias son escenarios analíticos.

Tabla 4. Cantidades ponderadas de personas pobres.
Año Pobres: peso INE Pobres: peso propio Diferencia
2015 1.769.193 1.526.858 -242.335
2016 1.949.272 1.672.847 -276.425
2017 1.809.156 1.540.535 -268.621
2018 1.679.810 1.457.572 -222.238
2019 1.657.131 1.433.767 -223.364
2020 1.922.065 1.661.876 -260.189
2021 1.951.020 1.664.694 -286.326
2022 1.478.445 1.467.418 -11.027
2023 1.313.128 1.358.707 45.579
2024 1.198.290 1.242.755 44.465
2025 985.126 1.026.044 40.918

Con la muestra de 2021, el factor publicado produce 1.951.020 personas pobres y el escenario propio produce 1.664.694. La diferencia es de -286.326 personas. Este resultado debe leerse junto con el cambio en el total expandido y las restricciones de cobertura.

5.3 Población ponderada y conexión entre tramos

Figura 3. Población ponderada por año y escenario. El gráfico conserva la discontinuidad metodológica entre tramos.

Figura 3. Población ponderada por año y escenario. El gráfico conserva la discontinuidad metodológica entre tramos.

Las líneas se interrumpen entre 2021 y 2022 para hacer visible que los dos tramos usan diferentes especificaciones de calibración. La proximidad visual de sus extremos no constituye una prueba de comparabilidad. Tampoco se introduce un ancla arbitraria para obligar a que ambas trayectorias coincidan.

Tabla 5. Descomposición contable del cambio de ponderador; unidades: personas.
Año Incidencia: N0 × cambio de P Población: P0 × cambio de N Interacción Cambio total
2015 -20.888 -224.093 2.646 -242.335
2016 -24.227 -255.372 3.174 -276.425
2017 -27.889 -244.501 3.769 -268.621
2018 -10.473 -213.094 1.329 -222.238
2019 -7.652 -216.712 1.001 -223.364
2020 -1.619 -258.788 218 -260.189
2021 -14.950 -273.472 2.095 -286.326
2022 -5.279 -5.769 21 -11.027
2023 13.381 31.872 325 45.579
2024 15.116 28.983 366 44.465
2025 16.748 23.766 404 40.918

5.4 Límites y convergencia

Se comparan una especificación conservadora, \(g_i\in[0.5,2.0]\), y otra amplia, \(g_i\in[0.25,4.0]\). El criterio de convergencia exige un error relativo máximo menor que \(10^{-8}\) después de completar todas las actualizaciones del ciclo. El algoritmo se detiene como máximo en 100 iteraciones. Las categorías sin muestra se incluyen en el diagnóstico, aunque sus objetivos no puedan alcanzarse.

Tabla 6. Sensibilidad de las estimaciones y cumplimiento de los márgenes.
Año Especificación Tasa (%) Error máximo (%) g mínimo g máximo Categorías sin muestra Convergió
2022 conservadora 24,424 0,533263 0,500 1,648 0 No
2022 amplia 24,425 0,000000 0,446 1,645 0 Sí
2023 conservadora 21,857 2,452834 0,500 1,651 0 No
2023 amplia 21,862 0,000001 0,470 1,652 0 Sí
2024 conservadora 19,852 0,000000 0,500 1,572 0 Sí
2024 amplia 19,852 0,000000 0,492 1,572 0 Sí
2025 conservadora 16,275 0,000000 0,512 1,602 0 Sí
2025 amplia 16,275 0,000000 0,512 1,602 0 Sí
Figura 4. Error máximo final de los márgenes bajo dos intervalos de ajuste.

Figura 4. Error máximo final de los márgenes bajo dos intervalos de ajuste.

En la especificación conservadora, 2 de los cuatro años cumplen el criterio de convergencia. Las diferencias residuales deben considerarse junto con la ausencia de muestra en algunas categorías, la coherencia de los objetivos y la activación de los límites. Un estimador numéricamente estable puede coexistir con restricciones que no se cumplen exactamente.

6 Incertidumbre e inferencia

6.1 Diagnóstico de Taylor

Se implementa una linealización de tipo ultimate cluster (Wolter 2007). Para una tasa, la contribución linealizada es

\[ u_i=\frac{w_i(z_i-\widehat P)}{\sum_{j\in s_y}w_j}. \]

Las contribuciones se agregan por UPM dentro de departamento–área. La aproximación es

\[ \widehat V(\widehat P)=\sum_h\frac{m_h}{m_h-1} \sum_{j=1}^{m_h}(u_{hj}-\bar u_h)^2. \]

La implementación trata los pesos finales y los márgenes como fijos. Utiliza departamento–área como estrato de trabajo y no incorpora fracciones de muestreo, replicación de la calibración ni covarianzas entre años. Se presenta como diagnóstico aproximado, sujeto a la recuperación del diseño oficial completo. Si hay un estrato con una sola UPM se devuelve un error estándar no disponible; no se asigna varianza cero a ese estrato.

Tabla 7. Incertidumbre aproximada, con pesos fijos y estratificación de trabajo.
Año Ponderador Tasa (%) EE (p.p.) Límite inferior (%) Límite superior (%) Estratos singleton
2022 Publicado (INE) 24,51 0,552 23,43 25,60 0
2022 Recalibrado propio 24,42 0,545 23,35 25,49 0
2023 Publicado (INE) 21,64 0,540 20,58 22,70 0
2023 Recalibrado propio 21,86 0,543 20,79 22,92 0
2024 Publicado (INE) 19,60 0,540 18,55 20,66 0
2024 Recalibrado propio 19,85 0,537 18,80 20,90 0
2025 Publicado (INE) 16,00 0,520 14,98 17,02 0
2025 Recalibrado propio 16,27 0,518 15,26 17,29 0

La comparación de errores estándar marginales no constituye una prueba del cambio de ponderador. Ambos estimadores usan la misma muestra y están correlacionados. Una evaluación inferencial de su diferencia requiere estimar esa covarianza y, de ser pertinente, repetir la calibración dentro de réplicas que respeten el diseño.

6.2 Información pendiente para la inferencia completa

Se necesitan los identificadores y las especificaciones del diseño histórico, la validación de la estratificación reciente y una regla defendible de tratamiento de la incertidumbre de los márgenes. Las estimaciones históricas no reciben intervalos de confianza aparentes a partir de una fórmula de muestreo aleatorio simple. La ausencia de ese cálculo se conserva como limitación.

7 Discusión

El valor de la reconstrucción retrospectiva consiste en hacer explícita una fuente de sensibilidad de las estadísticas de hogares. Las comparaciones de pesos dentro de un año mantienen fijas las respuestas observadas y permiten cuantificar el cambio del estimador asociado a su ponderación. Ese ejercicio es relevante para estudios de pobreza, empleo, informalidad, ingresos y poblaciones objetivo de programas sociales, siempre que cada indicador conserve su definición y universo.

Para estudiar tendencias 2015–2025 es necesario distinguir este contraste de una homogeneización completa. El cambio de cuestionarios, ingresos, líneas de pobreza, cobertura y dominios no se resuelve mediante un único factor multiplicativo. La asimetría entre postestratificación histórica y calibración multivariable reciente también puede afectar los resultados.

La versión actual utiliza archivos agregados para facilitar la inspección y la comunicación en la web. El lector puede descargar las cifras y el código que produce el artículo. Esto permite separar la comprobación computacional de los supuestos que todavía requieren evidencia documental o validación estadística.

8 Limitaciones

  1. Especificación por tramos. Los auxiliares de 2015–2021 difieren de los usados en 2022–2025; la continuidad visual no demuestra comparabilidad plena.
  2. Objetivos derivados. Debe documentarse la construcción histórica y su compatibilidad con la población efectivamente cubierta por la encuesta.
  3. Área constante desde el censo. Las proporciones urbana/rural de 2022 se conservan en 2023–2025 como supuesto de los márgenes.
  4. Categorías sin muestra. La imposibilidad de cumplir sus objetivos permanece en los diagnósticos y no se oculta como convergencia.
  5. Universo de pobreza. Los faltantes se excluyen del denominador y se informan; las exclusiones adicionales deben contrastarse con las publicaciones oficiales.
  6. Varianza aproximada. El cálculo con pesos fijos no incorpora toda la incertidumbre del diseño, de la calibración o de los márgenes.
  7. Escenarios disponibles. La tercera capa de factores previos a la revisión requiere su propia incorporación reproducible en R.

9 Conclusiones

La comparación entre pesos publicados y recalibrados ofrece una herramienta para estudiar la sensibilidad de las tasas y cantidades de personas pobres. El resultado se interpreta dentro de cada año y con los objetivos explícitos del escenario. La construcción de una serie histórica con comparabilidad plena requiere armonizar márgenes, universos y procedimientos, además de completar la inferencia.

El artículo presenta esa evidencia mediante una cadena computacional en R y un documento web que integra sus salidas. Los resultados propios conservan su identificación como reconstrucción analítica y las estadísticas oficiales mantienen su condición de referencia para la validación del universo y del procesamiento.

10 Disponibilidad y reproducibilidad

Última reconstrucción de los insumos agregados: 2026-10-18T08:01:40-0400. El manifiesto identifica 14 archivos fuente mediante su nombre, tamaño y suma de comprobación MD5. Los microdatos permanecen fuera del documento público. Los archivos descargables siguientes contienen resultados agregados y código del proyecto.

serie.csv sensibilidad.csv controles.csv coeficientes_historicos.csv taylor_diagnostico.csv manifiesto_insumos.csv analisis.R presentacion.R renderizar.R referencias.bib

El botón Code → Download Rmd permite obtener el documento fuente. Para reconstruir los resultados desde los microdatos se debe conservar la estructura de carpetas indicada en el proyecto y ejecutar:

Sys.setenv(EPH_ROOT = "ruta/a/EPHn")
source("R/analisis.R", encoding = "UTF-8")
reconstruir_datos(Sys.getenv("EPH_ROOT"), getwd())
rmarkdown::render("ARTICULO_EPHC.Rmd", encoding = "UTF-8")

Con los CSV agregados disponibles basta con abrir ARTICULO_EPHC.Rmd en RStudio y pulsar Knit. El HTML incorpora las figuras y estilos. La publicación en RPubs se realiza desde Publish en la vista previa, siguiendo las instrucciones del servicio.

10.1 Entorno de la reconstrucción

## R version 4.5.1 (2025-06-13 ucrt)
## Platform: x86_64-w64-mingw32/x64
## Running under: Windows 10 x64 (build 19044)
## 
## Matrix products: default
##   LAPACK version 3.12.1
## 
## locale:
## [1] LC_COLLATE=C                        LC_CTYPE=English_United States.utf8
## [3] LC_MONETARY=C                       LC_NUMERIC=C                       
## [5] LC_TIME=C                          
## 
## time zone: Etc/GMT+4
## tzcode source: internal
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## loaded via a namespace (and not attached):
##  [1] bit_4.6.0          gtable_0.3.6       crayon_1.5.3       dplyr_1.1.4       
##  [5] compiler_4.5.1     tidyselect_1.2.1   parallel_4.5.1     tidyr_1.3.1       
##  [9] scales_1.4.0       fastmap_1.2.0      ggplot2_3.5.2      readr_2.1.5       
## [13] R6_2.6.1           generics_0.1.4     knitr_1.50         forcats_1.0.0     
## [17] tibble_3.3.0       pillar_1.11.0      RColorBrewer_1.1-3 tzdb_0.5.0        
## [21] rlang_1.1.6        xfun_0.52          bit64_4.6.0-1      cli_3.6.5         
## [25] magrittr_2.0.3     digest_0.6.37      grid_4.5.1         vroom_1.6.5       
## [29] haven_2.5.5        hms_1.1.3          lifecycle_1.0.4    vctrs_0.6.5       
## [33] evaluate_1.0.4     glue_1.8.0         farver_2.1.2       rmarkdown_2.29    
## [37] purrr_1.1.0        tools_4.5.1        pkgconfig_2.0.3    htmltools_0.5.8.1

10.2 Entorno del documento

## R version 4.4.3 (2025-02-28 ucrt)
## Platform: x86_64-w64-mingw32/x64
## Running under: Windows 10 x64 (build 19044)
## 
## Matrix products: default
## 
## 
## locale:
## [1] LC_COLLATE=Spanish_Spain.utf8  LC_CTYPE=Spanish_Spain.utf8   
## [3] LC_MONETARY=Spanish_Spain.utf8 LC_NUMERIC=C                  
## [5] LC_TIME=Spanish_Spain.utf8    
## 
## time zone: Etc/GMT+4
## tzcode source: internal
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## loaded via a namespace (and not attached):
##  [1] bit_4.6.0          archive_1.1.12     gtable_0.3.6       jsonlite_2.0.0    
##  [5] crayon_1.5.3       dplyr_1.1.4        compiler_4.4.3     tidyselect_1.2.1  
##  [9] parallel_4.4.3     dichromat_2.0-0.1  tidyr_1.3.1        jquerylib_0.1.4   
## [13] textshaping_0.4.0  systemfonts_1.1.0  scales_1.4.0       yaml_2.3.8        
## [17] fastmap_1.2.0      ggplot2_3.5.2      readr_2.1.5        R6_2.6.1          
## [21] labeling_0.4.3     generics_0.1.3     knitr_1.50         forcats_1.0.0     
## [25] tibble_3.2.1       bslib_0.9.0        pillar_1.11.0      RColorBrewer_1.1-3
## [29] tzdb_0.5.0         rlang_1.1.6        cachem_1.1.0       xfun_0.52         
## [33] sass_0.4.10        bit64_4.6.0-1      cli_3.6.2          withr_3.0.2       
## [37] magrittr_2.0.3     digest_0.6.35      grid_4.4.3         vroom_1.6.5       
## [41] rstudioapi_0.16.0  haven_2.5.4        base64enc_0.1-3    hms_1.1.3         
## [45] lifecycle_1.0.4    vctrs_0.6.5        evaluate_1.0.4     glue_1.8.0        
## [49] farver_2.1.2       ragg_1.4.0         rmarkdown_2.29     purrr_1.0.2       
## [53] tools_4.4.3        pkgconfig_2.0.3    htmltools_0.5.8.1

Referencias

Deville, Jean-Claude, y Carl-Erik Särndal. 1992. «Calibration estimators in survey sampling». Journal of the American Statistical Association 87 (418): 376-82. https://doi.org/10.1080/01621459.1992.10475217.
Deville, Jean-Claude, Carl-Erik Särndal, y Olivier Sautory. 1993. «Generalized raking procedures in survey sampling». Journal of the American Statistical Association 88 (423): 1013-20. https://doi.org/10.1080/01621459.1993.10476369.
Instituto Nacional de Estadística. 2002. Censo de Población y Viviendas 2002: portal REDATAM. https://prod.redatam.org/binpry/RpWebEngine.exe/Portal?BASE=CPV2002.
Instituto Nacional de Estadística. 2022. Censo Nacional de Población y Viviendas 2022: portal REDATAM. https://prod.redatam.org/binpry/RpWebEngine.exe/Portal?BASE=CPV2022.
Instituto Nacional de Estadística. 2023. Principales resultados de pobreza monetaria y distribución de ingresos: EPHC 2022. INE. https://www.ine.gov.py/Publicaciones/Biblioteca/documento/215/Pobreza%20Monetaria_%20EPHC%202022%20INE.pdf.
Instituto Nacional de Estadística. 2024a. Diccionario de variables EPHC anual 2023. INE.
Instituto Nacional de Estadística. 2024b. Estimaciones y proyecciones de la población nacional por sexo y edad, 1950–2050. INE. https://www.ine.gov.py/Publicaciones/Biblioteca/documento/266/Documento%20Metodologico%20Proyecci%C3%B3n%20Nacional.pdf.
Instituto Nacional de Estadística. 2024c. Principales resultados de pobreza monetaria y distribución de ingresos: EPHC 2023. INE. https://www.ine.gov.py/Publicaciones/Biblioteca/documento/246/Pobreza%20Monetaria_%20EPHC%202023_INE..pdf.
Instituto Nacional de Estadística. 2025a. Anexo I: aspectos metodológicos de la EPHC, segundo trimestre 2025. INE. https://www.ine.gov.py/Publicaciones/Biblioteca/documento/292/ANEXO%20I_Aspecto%20Metodologico_%20EPHC_2%C2%BA%20Trim%202025.pdf.
Instituto Nacional de Estadística. 2025b. Principales resultados de pobreza monetaria y distribución de ingresos: EPHC 2024. INE. https://www.ine.gov.py/Publicaciones/Biblioteca/documento/271/Pobreza%20Monetaria_%20EPHC%202024_INE.pdf.
Instituto Nacional de Estadística. 2025c. Resultados finales del Censo Nacional de Población y Viviendas 2022: estructura de la población por edad y sexo. INE. https://www.ine.gov.py/Publicaciones/Biblioteca/documento/251/1%20Resultados%20finales%20poblacion.pdf.
Instituto Nacional de Estadística. 2025d. Serie comparable de la Encuesta Permanente de Hogares Continua (EPHC) 1997/98 al 2021. Catálogo de microdatos del INE. https://www.ine.gov.py/microdato/serie_comparable_de_la_encuesta_permanente_de_hogares_continua_ephc_1997-98_al_2021.
Instituto Nacional de Estadística. 2026. Principales resultados de pobreza monetaria y distribución de ingresos: EPHC 2025. INE. https://www.ine.gov.py/Publicaciones/Biblioteca/documento/308/Pobreza%20Monetaria_%20EPHC_2025_INE.pdf.
Kish, Leslie. 1992. «Weighting for unequal \(P_i\)». Journal of Official Statistics 8 (2): 183-200.
Mohl, Chris, y Avi Singh. 1996. «Understanding calibration estimators in survey sampling». Survey Methodology 22 (2): 165-76. https://www150.statcan.gc.ca/n1/pub/12-001-x/1996002/article/2973-eng.pdf.
Särndal, Carl-Erik, Bengt Swensson, y Jan Wretman. 1992. Model Assisted Survey Sampling. Springer-Verlag.
Wolter, Kirk M. 2007. Introduction to Variance Estimation. 2.ª ed. Springer.
LS0tCnRpdGxlOiAiUmVjYWxpYnJhY2nDs24gcmV0cm9zcGVjdGl2YSBkZSBsb3MgZmFjdG9yZXMgZGUgZXhwYW5zacOzbiBkZSBsYSBFUEhDIGRlbCBQYXJhZ3VheSIKc3VidGl0bGU6ICJVbmEgc2VyaWUgYW5hbMOtdGljYSB5IHVuIGVzdHVkaW8gZGUgc2Vuc2liaWxpZGFkIHBhcmEgMjAxNeKAkzIwMjUiCmF1dGhvcjogIkRpZWdvIE1lemEiCmRhdGU6ICJgciBmb3JtYXQoU3lzLkRhdGUoKSwgJyVZLSVtLSVkJylgIgpsYW5nOiBlcwpiaWJsaW9ncmFwaHk6IHJlZmVyZW5jaWFzLmJpYgpsaW5rLWNpdGF0aW9uczogdHJ1ZQpyZWZlcmVuY2Utc2VjdGlvbi10aXRsZTogIlJlZmVyZW5jaWFzIgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2RlcHRoOiAzCiAgICB0b2NfZmxvYXQ6CiAgICAgIGNvbGxhcHNlZDogdHJ1ZQogICAgICBzbW9vdGhfc2Nyb2xsOiB0cnVlCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUKICAgIHRoZW1lOiBjb3NtbwogICAgaGlnaGxpZ2h0OiB0YW5nbwogICAgc2VsZl9jb250YWluZWQ6IHRydWUKICAgIGNvZGVfZm9sZGluZzogaGlkZQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQogICAgZGZfcHJpbnQ6IGthYmxlCiAgICBmaWdfY2FwdGlvbjogdHJ1ZQogICAgY3NzOiBlc3RpbG9zLmNzcwpwYXJhbXM6CiAgcmVjYWxjdWxhcjogZmFsc2UKICBlcGhfcm9vdDogIiIKLS0tCgpgYGB7ciBjb25maWd1cmFjaW9uLCBpbmNsdWRlPUZBTFNFfQppZiAoLlBsYXRmb3JtJE9TLnR5cGUgPT0gIndpbmRvd3MiICYmICFpc1RSVUUobDEwbl9pbmZvKClbWyJVVEYtOCJdXSkpIHsKICBpbnZpc2libGUoU3lzLnNldGxvY2FsZSgiTENfQ1RZUEUiLCAiRW5nbGlzaF9Vbml0ZWQgU3RhdGVzLnV0ZjgiKSkKfQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFLCB3YXJuaW5nID0gVFJVRSwgbWVzc2FnZSA9IEZBTFNFLAogICAgICAgICAgICAgICAgICAgICBmaWcud2lkdGggPSAxMCwgZmlnLmhlaWdodCA9IDUuOCwgZHBpID0gMTYwLAogICAgICAgICAgICAgICAgICAgICBvdXQud2lkdGggPSAiMTAwJSIsIGZpZy5hbGlnbiA9ICJjZW50ZXIiLCBlcnJvciA9IEZBTFNFKQpzb3VyY2UoIlIvYW5hbGlzaXMuUiIsIGVuY29kaW5nID0gIlVURi04IikKc291cmNlKCJSL3ByZXNlbnRhY2lvbi5SIiwgZW5jb2RpbmcgPSAiVVRGLTgiKQpjb21wcm9iYXJfcGFxdWV0ZXMoYyhwYXF1ZXRlc19hbmFsaXNpcywgImJhc2U2NGVuYyIpKQpwcm9qZWN0IDwtIG5vcm1hbGl6ZVBhdGgoIi4iLCB3aW5zbGFzaCA9ICIvIikKcm9vdCA8LSBpZiAobnpjaGFyKHBhcmFtcyRlcGhfcm9vdCkpIHBhcmFtcyRlcGhfcm9vdCBlbHNlCiAgU3lzLmdldGVudigiRVBIX1JPT1QiLCB1bnNldCA9IG5vcm1hbGl6ZVBhdGgoIi4uLy4uIiwgbXVzdFdvcmsgPSBGQUxTRSkpCmlmIChpc1RSVUUocGFyYW1zJHJlY2FsY3VsYXIpIHx8ICFmaWxlLmV4aXN0cygiZGF0b3Mvc2VyaWUuY3N2IikpIHJlY29uc3RydWlyX2RhdG9zKHJvb3QsIHByb2plY3QpCnNlcmllIDwtIGxlZXJfY3N2KCJkYXRvcy9zZXJpZS5jc3YiKQpzZW5zaWJpbGlkYWQgPC0gbGVlcl9jc3YoImRhdG9zL3NlbnNpYmlsaWRhZC5jc3YiKQpjb250cm9sZXMgPC0gbGVlcl9jc3YoImRhdG9zL2NvbnRyb2xlcy5jc3YiKQpjb2VmaWNpZW50ZXMgPC0gbGVlcl9jc3YoImRhdG9zL2NvZWZpY2llbnRlc19oaXN0b3JpY29zLmNzdiIpCnRheWxvciA8LSBsZWVyX2NzdigiZGF0b3MvdGF5bG9yX2RpYWdub3N0aWNvLmNzdiIpCm1hbmlmaWVzdG8gPC0gbGVlcl9jc3YoImRhdG9zL21hbmlmaWVzdG9faW5zdW1vcy5jc3YiKQpzdG9waWZub3QoaWRlbnRpY2FsKGFzLmludGVnZXIoc2VyaWUkeWVhciksIDIwMTU6MjAyNSksCiAgICAgICAgICBhbGwoaXMuZmluaXRlKHNlcmllJHRhc2Ffb2xkKSksIGFsbChpcy5maW5pdGUoc2VyaWUkdGFzYV9uZXcpKSwKICAgICAgICAgIGFsbChzZXJpZSRwb2JyZXNfbmV3ID49IDApLCBhbGwoc2VyaWUkcG9icmVzX25ldyA8PSBzZXJpZSRwb2JsYWNpb25fbmV3KSkKZmVjaGFfZGF0b3MgPC0gcmVhZExpbmVzKCJkYXRvcy9mZWNoYV9yZWNvbnN0cnVjY2lvbi50eHQiLCB3YXJuID0gRkFMU0UpWzFdCnMyMSA8LSBzZXJpZVtzZXJpZSR5ZWFyID09IDIwMjEsIF0KY29uc2VydmFkb3JhIDwtIHNlbnNpYmlsaWRhZFtzZW5zaWJpbGlkYWQkZXNwZWNpZmljYWNpb24gPT0gImNvbnNlcnZhZG9yYSIsIF0KZGlyLmNyZWF0ZSgiZmlndXJhcyIsIHNob3dXYXJuaW5ncyA9IEZBTFNFKQpgYGAKCjxkaXYgY2xhc3M9ImxlYWQtcmVzdW1lbiI+CioqUmVzdW1lbi4qKiBFc3RlIHRyYWJham8gZXhhbWluYSBsYSBzZW5zaWJpbGlkYWQgZGUgbGFzIGVzdGltYWNpb25lcyBkZSBwb2JyZXphCm1vbmV0YXJpYSBkZSBQYXJhZ3VheSBhIHVuYSByZWNhbGlicmFjacOzbiByZXRyb3NwZWN0aXZhIGRlIGxvcyBmYWN0b3JlcyBkZQpleHBhbnNpw7NuLiBTZSBjb25zZXJ2YW4gbG9zIHBlc29zIHB1YmxpY2Fkb3MgZW4gbG9zIG1pY3JvZGF0b3MgeSBzZSBjb25zdHJ1eWUgdW4KZXNjZW5hcmlvIHByb3BpbyBwYXJhIDIwMTXigJMyMDI1LiBFbCB0cmFtbyAyMDE14oCTMjAyMSB1dGlsaXphIHBvc3Rlc3RyYXRpZmljYWNpw7NuCmRlcGFydGFtZW50YWw7IGVsIHRyYW1vIDIwMjLigJMyMDI1IHV0aWxpemEgYWp1c3RlIGl0ZXJhdGl2byBhY290YWRvIHBvciBkZXBhcnRhbWVudG8sCmRlcGFydGFtZW50b+KAk8OhcmVhIHkgc2V4b+KAk2dydXBvIGRlIGVkYWQuIExhcyB0YWJsYXMsIGZpZ3VyYXMsIGRpZmVyZW5jaWFzIHkKZGlhZ27Ds3N0aWNvcyBxdWUgYXBhcmVjZW4gZW4gZXN0ZSBkb2N1bWVudG8gc2UgY2FsY3VsYW4gZW4gUi4gTGEgcmVjb25zdHJ1Y2Npw7NuCnBlcm1pdGUgZXhhbWluYXIgY3XDoW50byBjYW1iaWEgdW4gZXN0aW1hZG9yIGFsIHN1c3RpdHVpciBlbCBzaXN0ZW1hIGRlIHBvbmRlcmFjacOzbiwKY29uIGVzcGVjaWFsIGF0ZW5jacOzbiBhIGxvcyBuaXZlbGVzIGFic29sdXRvcyB5IGFsIGNhbWJpbyBkZSBldGFwYSAyMDIxLzIwMjIuCkxhIGludGVycHJldGFjacOzbiBjb25zZXJ2YSBsYXMgZGlmZXJlbmNpYXMgZGUgY29iZXJ0dXJhLCBsb3MgZXJyb3JlcyByZXNpZHVhbGVzIGRlCmNhbGlicmFjacOzbiB5IGxhcyBsaW1pdGFjaW9uZXMgZGUgbGEgZXN0aW1hY2nDs24gZGUgdmFyaWFuemEuCjwvZGl2PgoKKipQYWxhYnJhcyBjbGF2ZToqKiBFUEhDOyBwb25kZXJhY2nDs247IGNhbGlicmFjacOzbjsgcG9zdGVzdHJhdGlmaWNhY2nDs247CmVuY3Vlc3RhcyBkZSBob2dhcmVzOyBwb2JyZXphIG1vbmV0YXJpYTsgQ2Vuc28gMjAyMjsgUGFyYWd1YXkuCgo8ZGl2IGNsYXNzPSJub3RhIj4KKipFc3RhZG8gZGVsIGFuw6FsaXNpcy4qKiBEb2N1bWVudG8gZGUgdHJhYmFqby4gTGEgc2VyaWUgcHJvcGlhIGNvbWJpbmEgZG9zCmVzcGVjaWZpY2FjaW9uZXMgZGUgY2FsaWJyYWNpw7NuIHkgcmVxdWllcmUgdmFsaWRhY2nDs24gZGVsIHVuaXZlcnNvIGZyZW50ZSBhIGxhcwpwdWJsaWNhY2lvbmVzIG9maWNpYWxlcyBhbnRlcyBkZSBzdSBlbnbDrW8gYSB1bmEgcmV2aXN0YS4gTGFzIGNpZnJhcyBjb24gZWwgcGVzbwpwdWJsaWNhZG8gc2UgaWRlbnRpZmljYW4gY29tbyDCq0lORcK7IHBvciBsYSBwcm9jZWRlbmNpYSBkZWwgcG9uZGVyYWRvcjsgbGFzCmVzdGltYWNpb25lcyBjYWxjdWxhZGFzIGFxdcOtIHNvbiBlbGFib3JhY2nDs24gcHJvcGlhLiBMYSB0YWJsYSBkZSBjb252ZXJnZW5jaWEKaW5mb3JtYSBsb3MgY2Fzb3MgcXVlIG5vIHJlcHJvZHVjZW4gZXhhY3RhbWVudGUgbG9zIG3DoXJnZW5lcy4KPC9kaXY+CgojIEludHJvZHVjY2nDs24KCkxhcyBlbmN1ZXN0YXMgZGUgaG9nYXJlcyBwcm9kdWNlbiBlc3RpbWFjaW9uZXMgcG9ibGFjaW9uYWxlcyBtZWRpYW50ZSBmYWN0b3JlcyBkZQpleHBhbnNpw7NuIHF1ZSBkZXBlbmRlbiBkZWwgZGlzZcOxbyBtdWVzdHJhbCwgbGEgbm8gcmVzcHVlc3RhIHkgbG9zIHJlZmVyZW50ZXMKZGVtb2dyw6FmaWNvcyB1dGlsaXphZG9zIGVuIGNhZGEgZWRpY2nDs24uIEN1YW5kbyBjYW1iaWFuIGVzb3MgcmVmZXJlbnRlcywgdW5hIG1pc21hCm11ZXN0cmEgcHVlZGUgcmVwcmVzZW50YXIgdW5hIHBvYmxhY2nDs24gZGUgdGFtYcOxbyBvIGNvbXBvc2ljacOzbiBkaWZlcmVudGUuCkxhIGNhbnRpZGFkIGRlIHBlcnNvbmFzIHBvYnJlcyBkZXBlbmRlIHRhbnRvIGRlIGxhIGluY2lkZW5jaWEgZGUgbGEgcG9icmV6YSBjb21vCmRlbCB0b3RhbCBkZSBwb2JsYWNpw7NuIHJlcHJlc2VudGFkYS4gRXN0YSByZWxhY2nDs24gaGFjZSBuZWNlc2FyaW8gZXN0dWRpYXIgbGFzCnJldmlzaW9uZXMgZGUgcG9uZGVyYWRvcmVzIGFudGVzIGRlIGludGVycHJldGFyIGNhbWJpb3MgZGUgbml2ZWwgY29tbyBjYW1iaW9zCmV4Y2x1c2l2YW1lbnRlIHNvY2lhbGVzLgoKTGEgZG9jdW1lbnRhY2nDs24gZGVsIElORSBkZXNjcmliZSBsYSByZXZpc2nDs24gZGUgbG9zIHJlZmVyZW50ZXMgZGVtb2dyw6FmaWNvcyB5IGxhCnNlcmllIHJlY2llbnRlIGRlIHBvYnJlemEgbW9uZXRhcmlhIDIwMjLigJMyMDI1IFtASU5FMjAyNTsgQElORU1ldGhvZDIwMjVdLiBFc3RlCnRyYWJham8gcGxhbnRlYSBsYSBzaWd1aWVudGUgcHJlZ3VudGE6ICoqwr9jw7NtbyBjYW1iaWFuIGxhcyB0YXNhcyB5IGNhbnRpZGFkZXMgZGUKcGVyc29uYXMgcG9icmVzIGFsIGV4cHJlc2FyIGxhcyBtdWVzdHJhcyBoaXN0w7NyaWNhcyBiYWpvIHVuIGVzY2VuYXJpbyBkZQpwb25kZXJhY2nDs24gY29tcGF0aWJsZSBjb24gcmVmZXJlbnRlcyBkZW1vZ3LDoWZpY29zIHBvc3RlcmlvcmVzIGFsIENlbnNvIDIwMjI/KioKCkxhIGNvbnRyaWJ1Y2nDs24gY29uc2lzdGUgZW4gY29uc2VydmFyIGxvcyBmYWN0b3JlcyBvcmlnaW5hbGVzLCBleHBsaWNpdGFyIGxhCmNvbnN0cnVjY2nDs24gZGUgbG9zIG9iamV0aXZvcyB5IGNvbXBhcmFyIGxvcyBlc3RpbWFkb3JlcyBjb24gdW5hIHZlcnNpw7NuIGRlcml2YWRhCmRlIGxvcyBwZXNvcy4gRWwgcHJvY2VkaW1pZW50byBwZXJtaXRlIHVuYSBsZWN0dXJhIGRlIHNlbnNpYmlsaWRhZC4gU3UgY2FwYWNpZGFkCnBhcmEgcHJvZHVjaXIgdW5hIHNlcmllIHBsZW5hbWVudGUgY29tcGFyYWJsZSBkZXBlbmRlIGRlIGxhIGVxdWl2YWxlbmNpYSBlbnRyZQp1bml2ZXJzb3MsIGxhIGNhbGlkYWQgZGUgbG9zIG3DoXJnZW5lcyBoaXN0w7NyaWNvcyB5IGxhIGhvbW9nZW5laWRhZCBkZWwgbcOpdG9kbwphcGxpY2FkbyBhIGxvcyBkaWZlcmVudGVzIGHDsW9zLgoKIyBBbnRlY2VkZW50ZXMgaW5zdGl0dWNpb25hbGVzIHkgbWV0b2RvbMOzZ2ljb3MKCiMjIENyb25vbG9nw61hIGRlIGxhIHJldmlzacOzbgoKRWwgbWFyY28gYW50ZXJpb3IgdXRpbGl6YWJhIHByb3llY2Npb25lcyBkZW1vZ3LDoWZpY2FzIGN1eWEgcmV2aXNpw7NuIHJlc3VsdGEKcmVsZXZhbnRlIHBhcmEgbGEgZXhwYW5zacOzbiBkZSBsYXMgZW5jdWVzdGFzLiBMYXMgcHVibGljYWNpb25lcyBkZWwgSU5FIHNvYnJlCnBvYnJlemEgeSBsb3MgYXNwZWN0b3MgbWV0b2RvbMOzZ2ljb3MgZGUgbGEgRVBIQyBkZXNjcmliZW4gbG9zIGNhbWJpb3MgYXNvY2lhZG9zIGFsCkNlbnNvIDIwMjIgeSBhIGxhcyBudWV2YXMgcHJveWVjY2lvbmVzIFtASU5FMjAyMjsgQElORTIwMjM7IEBJTkUyMDI0OyBASU5FMjAyNV0uCkxhIHJldmlzacOzbiBkZW1vZ3LDoWZpY2EgaW5jb3Jwb3JhIGluZm9ybWFjacOzbiBjZW5zYWwgeSBjb21wb25lbnRlcyBwb2JsYWNpb25hbGVzCnF1ZSBkZWJlbiBkaXN0aW5ndWlyc2UgZGUgbGFzIHJlc3B1ZXN0YXMgb2JzZXJ2YWRhcyBlbiB1bmEgZW5jdWVzdGEgW0BJTkVQcm9qMjAyNV0uCgpMb3MgZmFjdG9yZXMgaGlzdMOzcmljb3Mgc2UgZW1wbGVhcm9uIGJham8gbG9zIHJlZmVyZW50ZXMgdmlnZW50ZXMgZW4gc3UgbW9tZW50by4KUG9yIGVsbG8sIGVsIHByb2NlZGltaWVudG8gZGUgZXN0ZSBhcnTDrWN1bG8gc2UgZGVub21pbmEgKnJlY2FsaWJyYWNpw7NuCnJldHJvc3BlY3RpdmEqLiBFbCBjYXTDoWxvZ28gaW5zdGl0dWNpb25hbCBkZSBsYSBzZXJpZSBjb21wYXJhYmxlIGNvbnN0aXR1eWUgdW5hCmZ1ZW50ZSBhZGljaW9uYWwgcGFyYSBpZGVudGlmaWNhciBsYXMgdmVyc2lvbmVzIGRpc3BvbmlibGVzLCBwZXJvIHN1IGRlbm9taW5hY2nDs24Kbm8gYmFzdGEgcGFyYSBkZW1vc3RyYXIgcXVlIHRvZG9zIHN1cyBwb25kZXJhZG9yZXMgY29ycmVzcG9uZGVuIGEgbGEgbWlzbWEKcmV2aXNpw7NuIGRlbW9ncsOhZmljYSBbQElORUNvbXBhcmFibGVdLgoKIyMgSW1wbGljYWNpw7NuIHBhcmEgMjAyMS8yMDIyCgpMYSBjb21wYXJhY2nDs24gZGUgY2FudGlkYWRlcyBhYnNvbHV0YXMgYSBhbWJvcyBsYWRvcyBkZSAyMDIxLzIwMjIgZGViZSBjb25zaWRlcmFyCmVsIGNhbWJpbyBkZSByZWZlcmVudGUgcG9ibGFjaW9uYWwgeSBsYXMgZGlmZXJlbmNpYXMgZGUgY29iZXJ0dXJhLiBVbmEgcmVkdWNjacOzbgplbiBsYSBjYW50aWRhZCBlc3RpbWFkYSBkZSBwZXJzb25hcyBwb2JyZXMgcHVlZGUgaW5jb3Jwb3JhciBzaW11bHTDoW5lYW1lbnRlCnZhcmlhY2lvbmVzIGVuIGxhIGluY2lkZW5jaWEgeSBlbiBsYSBwb2JsYWNpw7NuIGV4cGFuZGlkYS4gRXN0YSBvYnNlcnZhY2nDs24gbW90aXZhCmxhIGNvbXBhcmFjacOzbiBkZSBwb25kZXJhZG9yZXMgc29icmUgdW5hIG1pc21hIG11ZXN0cmEgZGVudHJvIGRlIGNhZGEgYcOxby4KCiMgTWFyY28gZGUgY2FsaWJyYWNpw7NuIGRlIHBvbmRlcmFkb3JlcwoKIyMgQ2FsaWJyYWNpw7NuIHkgcG9zdGVzdHJhdGlmaWNhY2nDs24KClNlYSAkZF9pJCBlbCBwZXNvIGluaWNpYWwgZGVsIHJlZ2lzdHJvICRpJCwgJHhfaSQgdW4gdmVjdG9yIGRlIGF1eGlsaWFyZXMgeSAkWCQgc3VzCnRvdGFsZXMgcG9ibGFjaW9uYWxlcyBkZSByZWZlcmVuY2lhLiBMYSBmb3JtdWxhY2nDs24gZ2VuZXJhbCBidXNjYSBwZXNvcwokd19pPWRfaSBnX2kkIHF1ZSBzYXRpc2ZhZ2FuCgokJApcc3VtX3tpXGluIHN9IHdfaSB4X2kgPSBYLgokJAoKVW5hIGNsYXNlIGRlIGVzdGltYWRvcmVzIHNlIG9idGllbmUgbWluaW1pemFuZG8gdW5hIGRpc3RhbmNpYSBjb252ZXhhIGVudHJlIGxvcwpwZXNvcyBpbmljaWFsZXMgeSBsb3MgY2FsaWJyYWRvcywgc3VqZXRhIGEgZXNhcyByZXN0cmljY2lvbmVzCltARGV2aWxsZVNhcm5kYWwxOTkyOyBAU2FybmRhbFN3ZW5zc29uV3JldG1hbjE5OTI7IEBNb2hsU2luZ2gxOTk2XToKCiQkClxtaW5fdyBcc3VtX3tpXGluIHN9IGRfaVwsR1whXGxlZnQoXGZyYWN7d19pfXtkX2l9XHJpZ2h0KSwKXHFxdWFkIFx0ZXh0e3N1amV0byBhIH1cc3VtX3tpXGluIHN9d19pIHhfaT1YLgokJAoKQ29uIHVuYSDDum5pY2EgY2xhc2lmaWNhY2nDs24gZXhoYXVzdGl2YSwgbGEgcG9zdGVzdHJhdGlmaWNhY2nDs24gYXBsaWNhIGRlbnRybyBkZQpjYWRhIGNhdGVnb3LDrWEgJGMkIGVsIGFqdXN0ZQoKJCQKZ19jPVxmcmFje1hfY317XHN1bV97aVxpbiBzX2N9ZF9pfS4KJCQKCkVsICpyYWtpbmcqIGFjdHVhbGl6YSBzdWNlc2l2YW1lbnRlIHZhcmlvcyBtw6FyZ2VuZXMKW0BEZXZpbGxlU2FybmRhbFNhdXRvcnkxOTkzXS4gTGEgaW1wbGVtZW50YWNpw7NuIHV0aWxpemFkYSBhcXXDrSBtdWx0aXBsaWNhIGxvcyBwZXNvcwpwb3IgbGEgcmF6w7NuIGVudHJlIGVsIG9iamV0aXZvIGRlIGNhZGEgY2F0ZWdvcsOtYSB5IHN1IGVzdGltYWNpw7NuIGFjdHVhbCwgeSBkZXNwdcOpcwpyZWNvcnRhICRnX2kkIGEgdW4gaW50ZXJ2YWxvICRbTCxVXSQuIEVzdGUgcmVjb3J0ZSBpdGVyYXRpdm8gY29uc3RpdHV5ZSB1bmEgcmVnbGEKY29tcHV0YWNpb25hbCBleHBsw61jaXRhOyBwb3Igc8OtIHNvbG8gbm8gZGVtdWVzdHJhIHF1ZSBzZSBoYXlhIGFsY2FuemFkbyBsYSBzb2x1Y2nDs24KZXhhY3RhIGRlbCBwcm9ibGVtYSBjb252ZXhvIGNvbiBsw61taXRlcy4gU2UgaW5mb3JtYSBlbCBlcnJvciBvYnNlcnZhZG8gYWwgdGVybWluYXIKY2FkYSBjaWNsbyBjb21wbGV0by4KCkVuIDIwMTXigJMyMDIxIHNlIHV0aWxpemEgdW4gbWFyZ2VuIGRlcGFydGFtZW50YWwuIEVuIDIwMjLigJMyMDI1IHNlIHV0aWxpemFuCmRlcGFydGFtZW50bywgZGVwYXJ0YW1lbnRv4oCTw6FyZWEgeSBzZXhv4oCTZWRhZC4gRXN0YSBhc2ltZXRyw61hIGRlYmUgY29uc2VydmFyc2UgZW4gbGEKaW50ZXJwcmV0YWNpw7NuIGRlIGxhIHNlcmllLiBMYSBsaXRlcmF0dXJhIHNvYnJlIHBvbmRlcmFjacOzbiBwZXJtaXRlIHNpdHVhciBlc3RhcwpkZWNpc2lvbmVzIGRlbnRybyBkZSBsb3MgcHJvYmxlbWFzIGRlIHByb2JhYmlsaWRhZGVzIGRlc2lndWFsZXMgeSBlZmljaWVuY2lhCltAS2lzaDE5OTJdLgoKIyMgRXN0aW1hZG9yZXMgZGUgY2FudGlkYWRlcyB5IHRhc2FzCgpQYXJhIGVsIGluZGljYWRvciBiaW5hcmlvIGRlIHBvYnJlemEgJHpfaSQsIGVsIHRvdGFsIHkgbGEgdGFzYSBzZSBjYWxjdWxhbiBjb21vCgokJApcd2lkZWhhdCBZKHcpPVxzdW1fe2lcaW4gc195fXdfaSB6X2ksClxxcXVhZApcd2lkZWhhdCBQKHcpPVxmcmFje1xzdW1fe2lcaW4gc195fXdfaSB6X2l9e1xzdW1fe2lcaW4gc195fXdfaX0uCiQkCgokc195JCBjb250aWVuZSBsb3MgcmVnaXN0cm9zIGNvbiBjbGFzaWZpY2FjacOzbiBkZSBwb2JyZXphIGRpc3BvbmlibGUuIExhIHBvYmxhY2nDs24KZXhwYW5kaWRhIGRlIHRvZG9zIGxvcyByZWdpc3Ryb3MgeSBlbCBkZW5vbWluYWRvciB2w6FsaWRvIHBhcmEgcG9icmV6YSBzZSBleHBvcnRhbgpwb3Igc2VwYXJhZG8uIFVuIHJlZ2lzdHJvIHNpbiBjbGFzaWZpY2FjacOzbiBubyBzZSByZWNvZGlmaWNhIGF1dG9tw6F0aWNhbWVudGUgY29tbwpubyBwb2JyZS4gTGEgcG9icmV6YSB0b3RhbCBzZSBpZGVudGlmaWNhIG1lZGlhbnRlIGBwb2Jub3BvaSA9PSAxYDsgbG9zIGPDs2RpZ29zIHkKdW5pdmVyc29zIGRlYmVuIGNvbnRyYXN0YXJzZSBjb24gZWwgZGljY2lvbmFyaW8gY29ycmVzcG9uZGllbnRlCltASU5FRGljdGlvbmFyeTIwMjNdLgoKIyMgRGVzY29tcG9zaWNpw7NuIGNvbnRhYmxlIGRlbCBjYW1iaW8gZGUgcG9uZGVyYWRvcgoKUGFyYSB1bmEgbWlzbWEgbXVlc3RyYSB5IHVuaXZlcnNvLCBzZWEgJE4kIGxhIHBvYmxhY2nDs24gZXhwYW5kaWRhLCAkUCQgbGEgaW5jaWRlbmNpYQp5ICRZPU5QJCBsYSBjYW50aWRhZCBlc3RpbWFkYSBkZSBwZXJzb25hcyBwb2JyZXMuIExhIGRpZmVyZW5jaWEgZW50cmUgcG9uZGVyYWRvcmVzCm9yaWdpbmFsZXMgeSBwcm9waW9zIGFkbWl0ZSBsYSBpZGVudGlkYWQKCiQkClxEZWx0YSBZPU5fMFxEZWx0YSBQK1BfMFxEZWx0YSBOK1xEZWx0YSBOXERlbHRhIFAuCiQkCgpFc3RhIGlkZW50aWRhZCBkaXN0aW5ndWUgdmFyaWFjaW9uZXMgZGUgaW5jaWRlbmNpYSwgdGFtYcOxbyBwb2JsYWNpb25hbCBlCmludGVyYWNjacOzbi4gU2UgdHJhdGEgZGUgdW5hIGRlc2NvbXBvc2ljacOzbiBjb250YWJsZSBkZSBkb3MgZXN0aW1hZG9yZXMgY2FsY3VsYWRvcwpjb24gbG9zIG1pc21vcyBkYXRvcyBvYnNlcnZhZG9zOyBubyBpZGVudGlmaWNhIGVmZWN0b3MgY2F1c2FsZXMgZGUgcG9sw610aWNhcy4KCiMgRGF0b3MgeSBkaXNlw7FvIGRlIGxhIHJlY29uc3RydWNjacOzbgoKIyMgRnVlbnRlcyB5IHByb2NlZGVuY2lhCgpgYGB7ciB0YWJsYS1pbnN1bW9zLCByZXN1bHRzPSdhc2lzJ30KaW5zdW1vcyA8LSBkYXRhLmZyYW1lKAogIEluc3VtbyA9IGMoIkVQSC9FUEhDIGhpc3TDs3JpY2EgMjAxNeKAkzIwMjEiLCAiRVBIQyByZWdpc3RlciAyMDIy4oCTMjAyNSIsICJPYmpldGl2b3MgZGVwYXJ0YW1lbnRhbGVzIiwgIkJlbmNobWFyayBjZW5zYWwiLCAiUHJveWVjY2lvbmVzIGRlbW9ncsOhZmljYXMiLCAiTGl0ZXJhdHVyYSB5IGRvY3VtZW50b3MgSU5FIiksCiAgRnVuY2lvbiA9IGMoIlBlc28gaGlzdMOzcmljbywgZGVwYXJ0YW1lbnRvIHkgY2xhc2lmaWNhY2nDs24gZGUgcG9icmV6YSIsICJQZXNvIHB1YmxpY2FkbywgYXV4aWxpYXJlcyB5IFVQTSBlbiBlbCBtaXNtbyBTQVYiLCAiVG90YWxlcyBhbnVhbGVzIGRlIHBvc3Rlc3RyYXRpZmljYWNpw7NuIiwgIk3DoXJnZW5lcyAyMDIyIHkgcHJvcG9yY2lvbmVzIHVyYmFuYS9ydXJhbCIsICJNw6FyZ2VuZXMgZGVtb2dyw6FmaWNvcyAyMDIz4oCTMjAyNSIsICJEZWZpbmljaW9uZXMgeSBqdXN0aWZpY2FjacOzbiBtZXRvZG9sw7NnaWNhIiksCiAgRGlzcG9uaWJpbGlkYWQgPSBjKCJNaWNyb2RhdG9zIGV4dGVybm9zIGFsIHByb3llY3RvIiwgIk1pY3JvZGF0b3MgZXh0ZXJub3MgYWwgcHJveWVjdG8iLCAiQ1NWIGV4dGVybm87IGlkZW50aWZpY2FkbyBlbiBtYW5pZmllc3RvIiwgIkNTViBleHRlcm5vOyBzZSBzZWxlY2Npb25hIGV4Y2x1c2l2YW1lbnRlIDIwMjIiLCAiQ1NWIGV4dGVybm87IGlkZW50aWZpY2FkbyBlbiBtYW5pZmllc3RvIiwgIkJpYmxpb2dyYWbDrWEgZW5sYXphZGE7IFBERiBlbiBlbCBhcmNoaXZvIGRvY3VtZW50YWwiKSkKdGFibGFfaHRtbChpbnN1bW9zLCAiVGFibGEgMS4gSW5zdW1vcyBkZSBsYSByZWNvbnN0cnVjY2nDs24gZW4gUi4iKQpgYGAKCkxvcyByZXN1bHRhZG9zIGNlbnNhbGVzIHkgbGFzIHRhYmxhcyBSZWRhdGFtIHBlcm1pdGVuIGNvbnN0cnVpciBhdXhpbGlhcmVzIHBvcgp0ZXJyaXRvcmlvIHkgZXN0cnVjdHVyYSBkZW1vZ3LDoWZpY2EgW0BDTlBWMjAyMjsgQFJlZGF0YW1DUFYyMDAyOyBAUmVkYXRhbUNQVjIwMjJdLgpMb3Mgb2JqZXRpdm9zIGFudWFsZXMgdXRpbGl6YWRvcyBwb3IgZWwgcHJveWVjdG8gc29uIGluc3Vtb3MgZGVyaXZhZG9zOiBzdQppZGVudGlmaWNhY2nDs24gZW4gdW4gYXJjaGl2byBubyBzdXN0aXR1eWUgbGEgZG9jdW1lbnRhY2nDs24gZGUgc3UgZXh0cmFjY2nDs24sCnRyYW5zZm9ybWFjacOzbiB5IGNvbXBhdGliaWxpZGFkIGNvbiBlbCB1bml2ZXJzbyBkZSBsYSBlbmN1ZXN0YS4KCiMjIEVzY2VuYXJpb3MgZGUgZmFjdG9yZXMKClNlIHV0aWxpemFuIGRvcyBjYXBhcyBnZW5lcmFkYXMgZW4gZXN0ZSBmbHVqbyBSOgoKMS4gKipQZXNvIHB1YmxpY2FkbyBlbiBsb3MgbWljcm9kYXRvcyAoSU5FKToqKiBjb25zZXJ2YSBsYSB2YXJpYWJsZSBkZSBleHBhbnNpw7NuCiAgIGRpc3BvbmlibGUgZW4gbGEgdmVyc2nDs24gZnVlbnRlIGRlIGNhZGEgYcOxby4KMi4gKipQZXNvIHJlY2FsaWJyYWRvIHByb3BpbzoqKiBhcGxpY2EgcG9zdGVzdHJhdGlmaWNhY2nDs24gZGVwYXJ0YW1lbnRhbCBlbgogICAyMDE14oCTMjAyMSB5IGFqdXN0ZSBtdWx0aXZhcmlhYmxlIGFjb3RhZG8gZW4gMjAyMuKAkzIwMjUuCgpMYSBjb21wYXJhY2nDs24gYWRpY2lvbmFsIGNvbiBtaWNyb2RhdG9zIDIwMjLigJMyMDI0IHByZXZpb3MgYSBsYSByZXZpc2nDs24gcmVxdWllcmUKdW4gcHJvY2VzYW1pZW50byBpbmRlcGVuZGllbnRlIGRlIGBGRVguMjAyMmAuIEVzYSB0ZXJjZXJhIGNhcGEgbm8gc2UgaW5jb3Jwb3JhIGEKZXN0YXMgZmlndXJhcyBwb3JxdWUgbm8gc2UgcmVjb25zdHJ1eWUgZW4gZWwgZmx1am8gYWN0dWFsIGRlbCBhcnTDrWN1bG8uIExvcwpncsOhZmljb3MgZGUgZXN0YSB2ZXJzacOzbiBzZSBnZW5lcmFuIGRpcmVjdGFtZW50ZSBkZXNkZSBsb3MgZG9zIGVzY2VuYXJpb3MgUi4KCiMjIENvbnN0cnVjY2nDs24gZGUgbG9zIG3DoXJnZW5lcwoKUGFyYSAyMDE14oCTMjAyMSBzZSBsZWVuIGxvcyBvYmpldGl2b3MgZGVwYXJ0YW1lbnRhbGVzIGFudWFsZXMgZGVsIHByb3llY3RvLiBTaSBsYQplbmN1ZXN0YSByZXByZXNlbnRhIHVuIGNvbmp1bnRvIGRlIGRlcGFydGFtZW50b3MgbWVkaWFudGUgwqtSZXN0b8K7LCBzZSBjcmVhIHVuYQpmaWxhIG9iamV0aXZvIHBhcmEgZXNlIGRvbWluaW8geSBzZSBzdW1hbiBsb3Mgb2JqZXRpdm9zIGNvcnJlc3BvbmRpZW50ZXMgYSBsb3MKZGVwYXJ0YW1lbnRvcyBubyBvYnNlcnZhZG9zIGRlIGZvcm1hIGluZGl2aWR1YWwuIExhIGV4aXN0ZW5jaWEgZGUgdW5hIGNlbGRhCmFncnVwYWRhIG5vIHBlcm1pdGUgb2J0ZW5lciBlc3RpbWFjaW9uZXMgaW5kZXBlbmRpZW50ZXMgcGFyYSBjYWRhIGRlcGFydGFtZW50bwpxdWUgbGEgaW50ZWdyYS4KCkVuIDIwMjIgc2Ugc2VsZWNjaW9uYW4gZXhjbHVzaXZhbWVudGUgbGFzIGZpbGFzIGNvcnJlc3BvbmRpZW50ZXMgYWwgYcOxbyBjZW5zYWwKZGVsIGFyY2hpdm8gZGUgYmVuY2htYXJrcy4gU2UgZGlzdGluZ3VlbiBsb3MgbcOhcmdlbmVzIGRlIMOhcmVhIHRvdGFsIHkgbG9zIGRlIMOhcmVhCnVyYmFuYS9ydXJhbCBwYXJhIGV2aXRhciBzdW1hcmxvcyBkb3MgdmVjZXMuIEVuIDIwMjPigJMyMDI1IHNlIHV0aWxpemFuIGxhcwpwcm95ZWNjaW9uZXMgcG9yIGRlcGFydGFtZW50bywgc2V4byB5IGVkYWQuIEVsIG1hcmdlbiBkZSBkZXBhcnRhbWVudG/igJPDoXJlYSBjb25zZXJ2YQpsYXMgcHJvcG9yY2lvbmVzIHVyYmFuYS9ydXJhbCBkZWwgQ2Vuc28gMjAyMiBjb21vIHN1cHVlc3RvIGV4cGzDrWNpdG8uCgpMb3MgZ3J1cG9zIGRlIGVkYWQgc29uIHF1aW5xdWVuYWxlcyBoYXN0YSA3NeKAkzc5IHkgc2UgYWdydXBhbiBlbiA4MCBhw7FvcyBvIG3DoXMKZGVzZGUgZXNlIHVtYnJhbC4gTGFzIGNhdGVnb3LDrWFzIHNpbiBvYnNlcnZhY2lvbmVzIG5vIHNlIGNvbXBsZXRhbiBjb24gcGVyc29uYXMKc2ludMOpdGljYXMuIEVsIGRpYWduw7NzdGljbyBjb25zZXJ2YSBzdSBvYmpldGl2byB5IGVsIGVycm9yIGFzb2NpYWRvIGEgc3UgYXVzZW5jaWEuCgojIyBDb2JlcnR1cmEgeSBjb250cm9sZXMKCkFudGVzIGRlIGludGVycHJldGFyIGxvcyB0b3RhbGVzIGNvbW8gcG9ibGFjacOzbiBuYWNpb25hbCBlcyBuZWNlc2FyaW8gY29tcHJvYmFyCnF1ZSBsb3MgbcOhcmdlbmVzIHkgbGEgbXVlc3RyYSBjb21wYXJ0YW4gbGFzIG1pc21hcyBleGNsdXNpb25lcyB0ZXJyaXRvcmlhbGVzIHkKcG9ibGFjaW9uYWxlcy4gRXN0ZSByZXF1aXNpdG8gaW5jbHV5ZSBCb3F1ZXLDs24sIEFsdG8gUGFyYWd1YXksIGNvbXVuaWRhZGVzCmluZMOtZ2VuYXMsIHZpdmllbmRhcyBjb2xlY3RpdmFzIHkgbGFzIHJlZ2xhcyBkZSBlbGVnaWJpbGlkYWQgZGUgbGEgZW5jdWVzdGEuCkxhIGNhbGlicmFjacOzbiBubyBpbmNvcnBvcmEgcG9yIHPDrSBtaXNtYSBwb2JsYWNpb25lcyBxdWUgbm8gZXN0w6FuIGN1YmllcnRhcyBwb3IKbGEgbXVlc3RyYS4KCmBgYHtyIHRhYmxhLWNvYmVydHVyYSwgcmVzdWx0cz0nYXNpcyd9CmNvYmVydHVyYSA8LSBkby5jYWxsKHJiaW5kLCBsYXBwbHkoc3BsaXQoY29lZmljaWVudGVzLCBjb2VmaWNpZW50ZXMkeWVhciksIGZ1bmN0aW9uKHopIHsKICBkYXRhLmZyYW1lKEHDsW8gPSB6JHllYXJbMV0sIERvbWluaW9zID0gbnJvdyh6KSwgUmVzdG8gPSBpZiAoYW55KHokZGVwdG8gPT0gIjIwIikpICJTw60iIGVsc2UgIk5vIiwKICAgICAgICAgICAgIE9iamV0aXZvID0gZm10KHN1bSh6JG9iamV0aXZvKSksCiAgICAgICAgICAgICBgRXJyb3IgbcOheGltbyBkZSBjaWVycmVgID0gZm10KG1heChhYnMoeiRiYXNlICogeiRnIC0geiRvYmpldGl2bykpLCA2KSwgY2hlY2submFtZXMgPSBGQUxTRSkKfSkpCnRhYmxhX2h0bWwoY29iZXJ0dXJhLCAiVGFibGEgMi4gRG9taW5pb3MgaGlzdMOzcmljb3MgcmVwcmVzZW50YWRvcyB5IGNpZXJyZSBkZSBsYSBwb3N0ZXN0cmF0aWZpY2FjacOzbi4iKQpgYGAKCiMjIFByb2NlZGltaWVudG8gcmVwcm9kdWNpYmxlCgpFbCBjw7NkaWdvIHByZXNlcnZhIGxvcyBvcmlnaW5hbGVzLCBsZWUgbGFzIHZlcnNpb25lcyBmdWVudGUsIGNvbnN0cnV5ZSBsb3MKbcOhcmdlbmVzIHkgY2FsY3VsYSBsb3MgZG9zIGVzY2VuYXJpb3MuIExhIGNhbGlicmFjacOzbiByZWNpZW50ZSB5IGVsIGRpYWduw7NzdGljbwpUYXlsb3Igc2UgcmVhbGl6YW4gc29icmUgZWwgbWlzbW8gU0FWIHkgbG9zIG1pc21vcyByZWdpc3Ryb3MuIEVzdG8gZXZpdGEgY29tYmluYXIKcGVzb3MgZGUgdW4gQ1NWIHkgcmVnaXN0cm9zIGRlIHVuIFNBViDDum5pY2FtZW50ZSBwb3Igc3UgcG9zaWNpw7NuIGRlIGZpbGEuCgpMYSByZWNvbnN0cnVjY2nDs24gZ2VuZXJhIHNlaXMgQ1NWIGFncmVnYWRvcywgdW4gbWFuaWZpZXN0byBkZSBpbnN1bW9zIHkgZWwgcmVnaXN0cm8KZGUgbGEgc2VzacOzbiBSLiBFbCBSIE1hcmtkb3duIHV0aWxpemEgZXNvcyBhcmNoaXZvcyBwYXJhIHJlY2FsY3VsYXIgbGFzIHRhYmxhcywKbGFzIGNpZnJhcyBkZW50cm8gZGVsIHRleHRvIHkgbGFzIGZpZ3VyYXMuIFRvZGFzIGxhcyBzYWxpZGFzIGdyw6FmaWNhcyBkZSBlc3RhCnZlcnNpw7NuIHByb2NlZGVuIGRlIGPDs2RpZ28gUiBlamVjdXRhZG8gYWwgdGVqZXIgZWwgZG9jdW1lbnRvLgoKIyBSZXN1bHRhZG9zCgojIyBUYXNhcyBkZSBwb2JyZXphCgpgYGB7ciBmaWd1cmEtdGFzYXMsIGZpZy5jYXA9J0ZpZ3VyYSAxLiBJbmNpZGVuY2lhIGRlIHBvYnJlemEgYmFqbyBsb3MgZmFjdG9yZXMgcHVibGljYWRvcyB5IGVsIGVzY2VuYXJpbyBwcm9waW8uIEVsIGNhbWJpbyBkZSBtw6l0b2RvIHNlIHNlw7FhbGEgZW4gMjAyMS8yMDIyLid9CmdyYWZpY29fc2VyaWUoc2VyaWUsICJ0YXNhIikKYGBgCgpgYGB7ciB0YWJsYS10YXNhcywgcmVzdWx0cz0nYXNpcyd9CnRhc2FfdGFiIDwtIGRhdGEuZnJhbWUoQcOxbyA9IHNlcmllJHllYXIsIGBQZXNvIHB1YmxpY2FkbyBJTkUgKCUpYCA9IGZtdChzZXJpZSR0YXNhX29sZCwgMiksCiAgICAgICAgICAgICAgICAgICAgICAgYFBlc28gcHJvcGlvICglKWAgPSBmbXQoc2VyaWUkdGFzYV9uZXcsIDIpLAogICAgICAgICAgICAgICAgICAgICAgIGBEaWZlcmVuY2lhIChwLnAuKWAgPSBmbXQoc2VyaWUkdGFzYV9uZXcgLSBzZXJpZSR0YXNhX29sZCwgMyksCiAgICAgICAgICAgICAgICAgICAgICAgYFNpbiBjbGFzaWZpY2FjacOzbiAobilgID0gc2VyaWUkbl9zaW5fY2xhc2lmaWNhY2lvbiwgY2hlY2submFtZXMgPSBGQUxTRSkKdGFibGFfaHRtbCh0YXNhX3RhYiwgIlRhYmxhIDMuIFRhc2FzIGNhbGN1bGFkYXMgc29icmUgcmVnaXN0cm9zIGNvbiBjbGFzaWZpY2FjacOzbiBkZSBwb2JyZXphIGRpc3BvbmlibGUuIikKYGBgCgpMYXMgZGlmZXJlbmNpYXMgZGUgdGFzYXMgZGVzY3JpYmVuIGxhIHNlbnNpYmlsaWRhZCBhbCBzaXN0ZW1hIGRlIHBlc29zIGRlbnRybyBkZQpjYWRhIGHDsW8uIEVuIDIwMjEgZWwgY2FtYmlvIGVzIGRlCmByIGZtdChzMjEkdGFzYV9uZXcgLSBzMjEkdGFzYV9vbGQsIDMpYCBwdW50b3MgcG9yY2VudHVhbGVzLiBFc2UgY29udHJhc3RlIG5vIGRlYmUKaW50ZXJwcmV0YXJzZSBjb21vIHVuYSB2YXJpYWNpw7NuIHRlbXBvcmFsOiBhbWJhcyBjaWZyYXMgc2UgY2FsY3VsYW4gY29uIGxhIG11ZXN0cmEKZGVsIG1pc21vIGHDsW8uCgojIyBDYW50aWRhZCBkZSBwZXJzb25hcyBwb2JyZXMKCmBgYHtyIGZpZ3VyYS1jYW50aWRhZGVzLCBmaWcuY2FwPSdGaWd1cmEgMi4gQ2FudGlkYWQgZXN0aW1hZGEgZGUgcGVyc29uYXMgcG9icmVzLCBlbiBtaWxsb25lcy4gTGFzIGVzdGltYWNpb25lcyBwcm9waWFzIHNvbiBlc2NlbmFyaW9zIGFuYWzDrXRpY29zLid9CmdyYWZpY29fc2VyaWUoc2VyaWUsICJwb2JyZXMiKQpgYGAKCmBgYHtyIHRhYmxhLWNhbnRpZGFkZXMsIHJlc3VsdHM9J2FzaXMnfQpjb250ZW9zX3RhYiA8LSBkYXRhLmZyYW1lKEHDsW8gPSBzZXJpZSR5ZWFyLCBgUG9icmVzOiBwZXNvIElORWAgPSBmbXQoc2VyaWUkcG9icmVzX29sZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYFBvYnJlczogcGVzbyBwcm9waW9gID0gZm10KHNlcmllJHBvYnJlc19uZXcpLAogICAgICAgICAgICAgICAgICAgICAgICAgIERpZmVyZW5jaWEgPSBmbXQoc2VyaWUkcG9icmVzX25ldyAtIHNlcmllJHBvYnJlc19vbGQpLCBjaGVjay5uYW1lcyA9IEZBTFNFKQp0YWJsYV9odG1sKGNvbnRlb3NfdGFiLCAiVGFibGEgNC4gQ2FudGlkYWRlcyBwb25kZXJhZGFzIGRlIHBlcnNvbmFzIHBvYnJlcy4iKQpgYGAKCkNvbiBsYSBtdWVzdHJhIGRlIDIwMjEsIGVsIGZhY3RvciBwdWJsaWNhZG8gcHJvZHVjZQpgciBmbXQoczIxJHBvYnJlc19vbGQpYCBwZXJzb25hcyBwb2JyZXMgeSBlbCBlc2NlbmFyaW8gcHJvcGlvIHByb2R1Y2UKYHIgZm10KHMyMSRwb2JyZXNfbmV3KWAuIExhIGRpZmVyZW5jaWEgZXMgZGUKYHIgZm10KHMyMSRwb2JyZXNfbmV3IC0gczIxJHBvYnJlc19vbGQpYCBwZXJzb25hcy4gRXN0ZSByZXN1bHRhZG8gZGViZSBsZWVyc2UganVudG8KY29uIGVsIGNhbWJpbyBlbiBlbCB0b3RhbCBleHBhbmRpZG8geSBsYXMgcmVzdHJpY2Npb25lcyBkZSBjb2JlcnR1cmEuCgojIyBQb2JsYWNpw7NuIHBvbmRlcmFkYSB5IGNvbmV4acOzbiBlbnRyZSB0cmFtb3MKCmBgYHtyIGZpZ3VyYS1wb2JsYWNpb24sIGZpZy5jYXA9J0ZpZ3VyYSAzLiBQb2JsYWNpw7NuIHBvbmRlcmFkYSBwb3IgYcOxbyB5IGVzY2VuYXJpby4gRWwgZ3LDoWZpY28gY29uc2VydmEgbGEgZGlzY29udGludWlkYWQgbWV0b2RvbMOzZ2ljYSBlbnRyZSB0cmFtb3MuJ30KZ3JhZmljb19zZXJpZShzZXJpZSwgInBvYmxhY2lvbiIpCmBgYAoKTGFzIGzDrW5lYXMgc2UgaW50ZXJydW1wZW4gZW50cmUgMjAyMSB5IDIwMjIgcGFyYSBoYWNlciB2aXNpYmxlIHF1ZSBsb3MgZG9zIHRyYW1vcwp1c2FuIGRpZmVyZW50ZXMgZXNwZWNpZmljYWNpb25lcyBkZSBjYWxpYnJhY2nDs24uIExhIHByb3hpbWlkYWQgdmlzdWFsIGRlIHN1cwpleHRyZW1vcyBubyBjb25zdGl0dXllIHVuYSBwcnVlYmEgZGUgY29tcGFyYWJpbGlkYWQuIFRhbXBvY28gc2UgaW50cm9kdWNlIHVuCmFuY2xhIGFyYml0cmFyaWEgcGFyYSBvYmxpZ2FyIGEgcXVlIGFtYmFzIHRyYXllY3RvcmlhcyBjb2luY2lkYW4uCgpgYGB7ciB0YWJsYS1kZXNjb21wb3NpY2lvbiwgcmVzdWx0cz0nYXNpcyd9CmRuIDwtIHNlcmllJGRlbm9taW5hZG9yX25ldyAtIHNlcmllJGRlbm9taW5hZG9yX29sZApkcCA8LSAoc2VyaWUkdGFzYV9uZXcgLSBzZXJpZSR0YXNhX29sZCkgLyAxMDAKY29tcG9zaWNpb24gPC0gc2VyaWUkZGVub21pbmFkb3Jfb2xkICogZHAKdGFtYW5vIDwtIChzZXJpZSR0YXNhX29sZCAvIDEwMCkgKiBkbgppbnRlcmFjY2lvbiA8LSBkbiAqIGRwCnN0b3BpZm5vdChtYXgoYWJzKGNvbXBvc2ljaW9uICsgdGFtYW5vICsgaW50ZXJhY2Npb24gLSAoc2VyaWUkcG9icmVzX25ldyAtIHNlcmllJHBvYnJlc19vbGQpKSkgPCAxZS01KQpkZXNjb21wb3NpY2lvbiA8LSBkYXRhLmZyYW1lKEHDsW8gPSBzZXJpZSR5ZWFyLAogIGBJbmNpZGVuY2lhOiBOMCDDlyBjYW1iaW8gZGUgUGAgPSBmbXQoY29tcG9zaWNpb24pLAogIGBQb2JsYWNpw7NuOiBQMCDDlyBjYW1iaW8gZGUgTmAgPSBmbXQodGFtYW5vKSwKICBJbnRlcmFjY2nDs24gPSBmbXQoaW50ZXJhY2Npb24pLCBgQ2FtYmlvIHRvdGFsYCA9IGZtdChzZXJpZSRwb2JyZXNfbmV3IC0gc2VyaWUkcG9icmVzX29sZCksIGNoZWNrLm5hbWVzID0gRkFMU0UpCnRhYmxhX2h0bWwoZGVzY29tcG9zaWNpb24sICJUYWJsYSA1LiBEZXNjb21wb3NpY2nDs24gY29udGFibGUgZGVsIGNhbWJpbyBkZSBwb25kZXJhZG9yOyB1bmlkYWRlczogcGVyc29uYXMuIikKYGBgCgojIyBMw61taXRlcyB5IGNvbnZlcmdlbmNpYQoKU2UgY29tcGFyYW4gdW5hIGVzcGVjaWZpY2FjacOzbiBjb25zZXJ2YWRvcmEsICRnX2lcaW5bMC41LDIuMF0kLCB5IG90cmEgYW1wbGlhLAokZ19pXGluWzAuMjUsNC4wXSQuIEVsIGNyaXRlcmlvIGRlIGNvbnZlcmdlbmNpYSBleGlnZSB1biBlcnJvciByZWxhdGl2byBtw6F4aW1vCm1lbm9yIHF1ZSAkMTBeey04fSQgZGVzcHXDqXMgZGUgY29tcGxldGFyIHRvZGFzIGxhcyBhY3R1YWxpemFjaW9uZXMgZGVsIGNpY2xvLgpFbCBhbGdvcml0bW8gc2UgZGV0aWVuZSBjb21vIG3DoXhpbW8gZW4gMTAwIGl0ZXJhY2lvbmVzLiBMYXMgY2F0ZWdvcsOtYXMgc2luIG11ZXN0cmEKc2UgaW5jbHV5ZW4gZW4gZWwgZGlhZ27Ds3N0aWNvLCBhdW5xdWUgc3VzIG9iamV0aXZvcyBubyBwdWVkYW4gYWxjYW56YXJzZS4KCmBgYHtyIHRhYmxhLXNlbnNpYmlsaWRhZCwgcmVzdWx0cz0nYXNpcyd9CnNlbnNfdGFiIDwtIGRhdGEuZnJhbWUoQcOxbyA9IHNlbnNpYmlsaWRhZCR5ZWFyLCBFc3BlY2lmaWNhY2nDs24gPSBzZW5zaWJpbGlkYWQkZXNwZWNpZmljYWNpb24sCiAgYFRhc2EgKCUpYCA9IGZtdChzZW5zaWJpbGlkYWQkdGFzYSwgMyksIGBFcnJvciBtw6F4aW1vICglKWAgPSBmbXQoMTAwICogc2Vuc2liaWxpZGFkJGVycm9yX21heF9yZWwsIDYpLAogIGBnIG3DrW5pbW9gID0gZm10KHNlbnNpYmlsaWRhZCRnX21pbiwgMyksIGBnIG3DoXhpbW9gID0gZm10KHNlbnNpYmlsaWRhZCRnX21heCwgMyksCiAgYENhdGVnb3LDrWFzIHNpbiBtdWVzdHJhYCA9IHNlbnNpYmlsaWRhZCRjYXRlZ29yaWFzX3Npbl9tdWVzdHJhLAogIENvbnZlcmdpw7MgPSBpZmVsc2Uoc2Vuc2liaWxpZGFkJGNvbnZlcmdpbywgIlPDrSIsICJObyIpLCBjaGVjay5uYW1lcyA9IEZBTFNFKQp0YWJsYV9odG1sKHNlbnNfdGFiLCAiVGFibGEgNi4gU2Vuc2liaWxpZGFkIGRlIGxhcyBlc3RpbWFjaW9uZXMgeSBjdW1wbGltaWVudG8gZGUgbG9zIG3DoXJnZW5lcy4iKQpgYGAKCmBgYHtyIGZpZ3VyYS1zZW5zaWJpbGlkYWQsIGZpZy5jYXA9J0ZpZ3VyYSA0LiBFcnJvciBtw6F4aW1vIGZpbmFsIGRlIGxvcyBtw6FyZ2VuZXMgYmFqbyBkb3MgaW50ZXJ2YWxvcyBkZSBhanVzdGUuJ30KZ3JhZmljb19zZW5zaWJpbGlkYWQoc2Vuc2liaWxpZGFkKQpgYGAKCkVuIGxhIGVzcGVjaWZpY2FjacOzbiBjb25zZXJ2YWRvcmEsIGByIHN1bShjb25zZXJ2YWRvcmEkY29udmVyZ2lvKWAgZGUgbG9zIGN1YXRybwphw7FvcyBjdW1wbGVuIGVsIGNyaXRlcmlvIGRlIGNvbnZlcmdlbmNpYS4gTGFzIGRpZmVyZW5jaWFzIHJlc2lkdWFsZXMgZGViZW4KY29uc2lkZXJhcnNlIGp1bnRvIGNvbiBsYSBhdXNlbmNpYSBkZSBtdWVzdHJhIGVuIGFsZ3VuYXMgY2F0ZWdvcsOtYXMsIGxhIGNvaGVyZW5jaWEKZGUgbG9zIG9iamV0aXZvcyB5IGxhIGFjdGl2YWNpw7NuIGRlIGxvcyBsw61taXRlcy4gVW4gZXN0aW1hZG9yIG51bcOpcmljYW1lbnRlIGVzdGFibGUKcHVlZGUgY29leGlzdGlyIGNvbiByZXN0cmljY2lvbmVzIHF1ZSBubyBzZSBjdW1wbGVuIGV4YWN0YW1lbnRlLgoKIyBJbmNlcnRpZHVtYnJlIGUgaW5mZXJlbmNpYQoKIyMgRGlhZ27Ds3N0aWNvIGRlIFRheWxvcgoKU2UgaW1wbGVtZW50YSB1bmEgbGluZWFsaXphY2nDs24gZGUgdGlwbyAqdWx0aW1hdGUgY2x1c3RlciogW0BXb2x0ZXIyMDA3XS4gUGFyYSB1bmEKdGFzYSwgbGEgY29udHJpYnVjacOzbiBsaW5lYWxpemFkYSBlcwoKJCQKdV9pPVxmcmFje3dfaSh6X2ktXHdpZGVoYXQgUCl9e1xzdW1fe2pcaW4gc195fXdfan0uCiQkCgpMYXMgY29udHJpYnVjaW9uZXMgc2UgYWdyZWdhbiBwb3IgVVBNIGRlbnRybyBkZSBkZXBhcnRhbWVudG/igJPDoXJlYS4gTGEgYXByb3hpbWFjacOzbgplcwoKJCQKXHdpZGVoYXQgVihcd2lkZWhhdCBQKT1cc3VtX2hcZnJhY3ttX2h9e21faC0xfQogIFxzdW1fe2o9MX1ee21faH0odV97aGp9LVxiYXIgdV9oKV4yLgokJAoKTGEgaW1wbGVtZW50YWNpw7NuIHRyYXRhIGxvcyBwZXNvcyBmaW5hbGVzIHkgbG9zIG3DoXJnZW5lcyBjb21vIGZpam9zLiBVdGlsaXphCmRlcGFydGFtZW50b+KAk8OhcmVhIGNvbW8gZXN0cmF0byBkZSB0cmFiYWpvIHkgbm8gaW5jb3Jwb3JhIGZyYWNjaW9uZXMgZGUgbXVlc3RyZW8sCnJlcGxpY2FjacOzbiBkZSBsYSBjYWxpYnJhY2nDs24gbmkgY292YXJpYW56YXMgZW50cmUgYcOxb3MuIFNlIHByZXNlbnRhIGNvbW8KKipkaWFnbsOzc3RpY28gYXByb3hpbWFkbyoqLCBzdWpldG8gYSBsYSByZWN1cGVyYWNpw7NuIGRlbCBkaXNlw7FvIG9maWNpYWwgY29tcGxldG8uClNpIGhheSB1biBlc3RyYXRvIGNvbiB1bmEgc29sYSBVUE0gc2UgZGV2dWVsdmUgdW4gZXJyb3IgZXN0w6FuZGFyIG5vIGRpc3BvbmlibGU7Cm5vIHNlIGFzaWduYSB2YXJpYW56YSBjZXJvIGEgZXNlIGVzdHJhdG8uCgpgYGB7ciB0YWJsYS10YXlsb3IsIHJlc3VsdHM9J2FzaXMnfQp0dCA8LSB0YXlsb3JbdGF5bG9yJGVzY2FsYSA9PSAidGFzYSIsIF0KdGF5bG9yX3RhYiA8LSBkYXRhLmZyYW1lKEHDsW8gPSB0dCR5ZWFyLAogIFBvbmRlcmFkb3IgPSBpZmVsc2UodHQkcGVzbyA9PSAib3JpZ2luYWxfSU5FIiwgIlB1YmxpY2FkbyAoSU5FKSIsICJSZWNhbGlicmFkbyBwcm9waW8iKSwKICBgVGFzYSAoJSlgID0gZm10KDEwMCAqIHR0JGVzdGltYWNpb24sIDIpLCBgRUUgKHAucC4pYCA9IGZtdCgxMDAgKiB0dCRlZSwgMyksCiAgYEzDrW1pdGUgaW5mZXJpb3IgKCUpYCA9IGZtdCgxMDAgKiB0dCRsaSwgMiksIGBMw61taXRlIHN1cGVyaW9yICglKWAgPSBmbXQoMTAwICogdHQkbHMsIDIpLAogIGBFc3RyYXRvcyBzaW5nbGV0b25gID0gdHQkc2luZ2xldG9uLCBjaGVjay5uYW1lcyA9IEZBTFNFKQp0YWJsYV9odG1sKHRheWxvcl90YWIsICJUYWJsYSA3LiBJbmNlcnRpZHVtYnJlIGFwcm94aW1hZGEsIGNvbiBwZXNvcyBmaWpvcyB5IGVzdHJhdGlmaWNhY2nDs24gZGUgdHJhYmFqby4iKQpgYGAKCkxhIGNvbXBhcmFjacOzbiBkZSBlcnJvcmVzIGVzdMOhbmRhciBtYXJnaW5hbGVzIG5vIGNvbnN0aXR1eWUgdW5hIHBydWViYSBkZWwgY2FtYmlvCmRlIHBvbmRlcmFkb3IuIEFtYm9zIGVzdGltYWRvcmVzIHVzYW4gbGEgbWlzbWEgbXVlc3RyYSB5IGVzdMOhbiBjb3JyZWxhY2lvbmFkb3MuClVuYSBldmFsdWFjacOzbiBpbmZlcmVuY2lhbCBkZSBzdSBkaWZlcmVuY2lhIHJlcXVpZXJlIGVzdGltYXIgZXNhIGNvdmFyaWFuemEgeSwgZGUKc2VyIHBlcnRpbmVudGUsIHJlcGV0aXIgbGEgY2FsaWJyYWNpw7NuIGRlbnRybyBkZSByw6lwbGljYXMgcXVlIHJlc3BldGVuIGVsIGRpc2XDsW8uCgojIyBJbmZvcm1hY2nDs24gcGVuZGllbnRlIHBhcmEgbGEgaW5mZXJlbmNpYSBjb21wbGV0YQoKU2UgbmVjZXNpdGFuIGxvcyBpZGVudGlmaWNhZG9yZXMgeSBsYXMgZXNwZWNpZmljYWNpb25lcyBkZWwgZGlzZcOxbyBoaXN0w7NyaWNvLCBsYQp2YWxpZGFjacOzbiBkZSBsYSBlc3RyYXRpZmljYWNpw7NuIHJlY2llbnRlIHkgdW5hIHJlZ2xhIGRlZmVuZGlibGUgZGUgdHJhdGFtaWVudG8KZGUgbGEgaW5jZXJ0aWR1bWJyZSBkZSBsb3MgbcOhcmdlbmVzLiBMYXMgZXN0aW1hY2lvbmVzIGhpc3TDs3JpY2FzIG5vIHJlY2liZW4KaW50ZXJ2YWxvcyBkZSBjb25maWFuemEgYXBhcmVudGVzIGEgcGFydGlyIGRlIHVuYSBmw7NybXVsYSBkZSBtdWVzdHJlbyBhbGVhdG9yaW8Kc2ltcGxlLiBMYSBhdXNlbmNpYSBkZSBlc2UgY8OhbGN1bG8gc2UgY29uc2VydmEgY29tbyBsaW1pdGFjacOzbi4KCiMgRGlzY3VzacOzbgoKRWwgdmFsb3IgZGUgbGEgcmVjb25zdHJ1Y2Npw7NuIHJldHJvc3BlY3RpdmEgY29uc2lzdGUgZW4gaGFjZXIgZXhwbMOtY2l0YSB1bmEgZnVlbnRlCmRlIHNlbnNpYmlsaWRhZCBkZSBsYXMgZXN0YWTDrXN0aWNhcyBkZSBob2dhcmVzLiBMYXMgY29tcGFyYWNpb25lcyBkZSBwZXNvcyBkZW50cm8KZGUgdW4gYcOxbyBtYW50aWVuZW4gZmlqYXMgbGFzIHJlc3B1ZXN0YXMgb2JzZXJ2YWRhcyB5IHBlcm1pdGVuIGN1YW50aWZpY2FyIGVsCmNhbWJpbyBkZWwgZXN0aW1hZG9yIGFzb2NpYWRvIGEgc3UgcG9uZGVyYWNpw7NuLiBFc2UgZWplcmNpY2lvIGVzIHJlbGV2YW50ZSBwYXJhCmVzdHVkaW9zIGRlIHBvYnJlemEsIGVtcGxlbywgaW5mb3JtYWxpZGFkLCBpbmdyZXNvcyB5IHBvYmxhY2lvbmVzIG9iamV0aXZvIGRlCnByb2dyYW1hcyBzb2NpYWxlcywgc2llbXByZSBxdWUgY2FkYSBpbmRpY2Fkb3IgY29uc2VydmUgc3UgZGVmaW5pY2nDs24geSB1bml2ZXJzby4KClBhcmEgZXN0dWRpYXIgdGVuZGVuY2lhcyAyMDE14oCTMjAyNSBlcyBuZWNlc2FyaW8gZGlzdGluZ3VpciBlc3RlIGNvbnRyYXN0ZSBkZSB1bmEKaG9tb2dlbmVpemFjacOzbiBjb21wbGV0YS4gRWwgY2FtYmlvIGRlIGN1ZXN0aW9uYXJpb3MsIGluZ3Jlc29zLCBsw61uZWFzIGRlIHBvYnJlemEsCmNvYmVydHVyYSB5IGRvbWluaW9zIG5vIHNlIHJlc3VlbHZlIG1lZGlhbnRlIHVuIMO6bmljbyBmYWN0b3IgbXVsdGlwbGljYXRpdm8uIExhCmFzaW1ldHLDrWEgZW50cmUgcG9zdGVzdHJhdGlmaWNhY2nDs24gaGlzdMOzcmljYSB5IGNhbGlicmFjacOzbiBtdWx0aXZhcmlhYmxlIHJlY2llbnRlCnRhbWJpw6luIHB1ZWRlIGFmZWN0YXIgbG9zIHJlc3VsdGFkb3MuCgpMYSB2ZXJzacOzbiBhY3R1YWwgdXRpbGl6YSBhcmNoaXZvcyBhZ3JlZ2Fkb3MgcGFyYSBmYWNpbGl0YXIgbGEgaW5zcGVjY2nDs24geQpsYSBjb211bmljYWNpw7NuIGVuIGxhIHdlYi4gRWwgbGVjdG9yIHB1ZWRlIGRlc2NhcmdhciBsYXMgY2lmcmFzIHkgZWwgY8OzZGlnbyBxdWUKcHJvZHVjZSBlbCBhcnTDrWN1bG8uIEVzdG8gcGVybWl0ZSBzZXBhcmFyIGxhIGNvbXByb2JhY2nDs24gY29tcHV0YWNpb25hbCBkZSBsb3MKc3VwdWVzdG9zIHF1ZSB0b2RhdsOtYSByZXF1aWVyZW4gZXZpZGVuY2lhIGRvY3VtZW50YWwgbyB2YWxpZGFjacOzbiBlc3RhZMOtc3RpY2EuCgojIExpbWl0YWNpb25lcwoKMS4gKipFc3BlY2lmaWNhY2nDs24gcG9yIHRyYW1vcy4qKiBMb3MgYXV4aWxpYXJlcyBkZSAyMDE14oCTMjAyMSBkaWZpZXJlbiBkZSBsb3MgdXNhZG9zCiAgIGVuIDIwMjLigJMyMDI1OyBsYSBjb250aW51aWRhZCB2aXN1YWwgbm8gZGVtdWVzdHJhIGNvbXBhcmFiaWxpZGFkIHBsZW5hLgoyLiAqKk9iamV0aXZvcyBkZXJpdmFkb3MuKiogRGViZSBkb2N1bWVudGFyc2UgbGEgY29uc3RydWNjacOzbiBoaXN0w7NyaWNhIHkgc3UKICAgY29tcGF0aWJpbGlkYWQgY29uIGxhIHBvYmxhY2nDs24gZWZlY3RpdmFtZW50ZSBjdWJpZXJ0YSBwb3IgbGEgZW5jdWVzdGEuCjMuICoqw4FyZWEgY29uc3RhbnRlIGRlc2RlIGVsIGNlbnNvLioqIExhcyBwcm9wb3JjaW9uZXMgdXJiYW5hL3J1cmFsIGRlIDIwMjIgc2UKICAgY29uc2VydmFuIGVuIDIwMjPigJMyMDI1IGNvbW8gc3VwdWVzdG8gZGUgbG9zIG3DoXJnZW5lcy4KNC4gKipDYXRlZ29yw61hcyBzaW4gbXVlc3RyYS4qKiBMYSBpbXBvc2liaWxpZGFkIGRlIGN1bXBsaXIgc3VzIG9iamV0aXZvcyBwZXJtYW5lY2UKICAgZW4gbG9zIGRpYWduw7NzdGljb3MgeSBubyBzZSBvY3VsdGEgY29tbyBjb252ZXJnZW5jaWEuCjUuICoqVW5pdmVyc28gZGUgcG9icmV6YS4qKiBMb3MgZmFsdGFudGVzIHNlIGV4Y2x1eWVuIGRlbCBkZW5vbWluYWRvciB5IHNlIGluZm9ybWFuOwogICBsYXMgZXhjbHVzaW9uZXMgYWRpY2lvbmFsZXMgZGViZW4gY29udHJhc3RhcnNlIGNvbiBsYXMgcHVibGljYWNpb25lcyBvZmljaWFsZXMuCjYuICoqVmFyaWFuemEgYXByb3hpbWFkYS4qKiBFbCBjw6FsY3VsbyBjb24gcGVzb3MgZmlqb3Mgbm8gaW5jb3Jwb3JhIHRvZGEgbGEKICAgaW5jZXJ0aWR1bWJyZSBkZWwgZGlzZcOxbywgZGUgbGEgY2FsaWJyYWNpw7NuIG8gZGUgbG9zIG3DoXJnZW5lcy4KNy4gKipFc2NlbmFyaW9zIGRpc3BvbmlibGVzLioqIExhIHRlcmNlcmEgY2FwYSBkZSBmYWN0b3JlcyBwcmV2aW9zIGEgbGEgcmV2aXNpw7NuCiAgIHJlcXVpZXJlIHN1IHByb3BpYSBpbmNvcnBvcmFjacOzbiByZXByb2R1Y2libGUgZW4gUi4KCiMgQ29uY2x1c2lvbmVzCgpMYSBjb21wYXJhY2nDs24gZW50cmUgcGVzb3MgcHVibGljYWRvcyB5IHJlY2FsaWJyYWRvcyBvZnJlY2UgdW5hIGhlcnJhbWllbnRhIHBhcmEKZXN0dWRpYXIgbGEgc2Vuc2liaWxpZGFkIGRlIGxhcyB0YXNhcyB5IGNhbnRpZGFkZXMgZGUgcGVyc29uYXMgcG9icmVzLiBFbCByZXN1bHRhZG8Kc2UgaW50ZXJwcmV0YSBkZW50cm8gZGUgY2FkYSBhw7FvIHkgY29uIGxvcyBvYmpldGl2b3MgZXhwbMOtY2l0b3MgZGVsIGVzY2VuYXJpby4KTGEgY29uc3RydWNjacOzbiBkZSB1bmEgc2VyaWUgaGlzdMOzcmljYSBjb24gY29tcGFyYWJpbGlkYWQgcGxlbmEgcmVxdWllcmUgYXJtb25pemFyCm3DoXJnZW5lcywgdW5pdmVyc29zIHkgcHJvY2VkaW1pZW50b3MsIGFkZW3DoXMgZGUgY29tcGxldGFyIGxhIGluZmVyZW5jaWEuCgpFbCBhcnTDrWN1bG8gcHJlc2VudGEgZXNhIGV2aWRlbmNpYSBtZWRpYW50ZSB1bmEgY2FkZW5hIGNvbXB1dGFjaW9uYWwgZW4gUiB5IHVuCmRvY3VtZW50byB3ZWIgcXVlIGludGVncmEgc3VzIHNhbGlkYXMuIExvcyByZXN1bHRhZG9zIHByb3Bpb3MgY29uc2VydmFuIHN1CmlkZW50aWZpY2FjacOzbiBjb21vIHJlY29uc3RydWNjacOzbiBhbmFsw610aWNhIHkgbGFzIGVzdGFkw61zdGljYXMgb2ZpY2lhbGVzIG1hbnRpZW5lbgpzdSBjb25kaWNpw7NuIGRlIHJlZmVyZW5jaWEgcGFyYSBsYSB2YWxpZGFjacOzbiBkZWwgdW5pdmVyc28geSBkZWwgcHJvY2VzYW1pZW50by4KCiMgRGlzcG9uaWJpbGlkYWQgeSByZXByb2R1Y2liaWxpZGFkCgrDmmx0aW1hIHJlY29uc3RydWNjacOzbiBkZSBsb3MgaW5zdW1vcyBhZ3JlZ2Fkb3M6ICoqYHIgZmVjaGFfZGF0b3NgKiouCkVsIG1hbmlmaWVzdG8gaWRlbnRpZmljYSBgciBucm93KG1hbmlmaWVzdG8pYCBhcmNoaXZvcyBmdWVudGUgbWVkaWFudGUgc3Ugbm9tYnJlLAp0YW1hw7FvIHkgc3VtYSBkZSBjb21wcm9iYWNpw7NuIE1ENS4gTG9zIG1pY3JvZGF0b3MgcGVybWFuZWNlbiBmdWVyYSBkZWwgZG9jdW1lbnRvCnDDumJsaWNvLiBMb3MgYXJjaGl2b3MgZGVzY2FyZ2FibGVzIHNpZ3VpZW50ZXMgY29udGllbmVuIHJlc3VsdGFkb3MgYWdyZWdhZG9zIHkKY8OzZGlnbyBkZWwgcHJveWVjdG8uCgpgYGB7ciBkZXNjYXJnYXMsIHJlc3VsdHM9J2FzaXMnfQpkZXNjYXJnYWJsZXMgPC0gYygiZGF0b3Mvc2VyaWUuY3N2IiwgImRhdG9zL3NlbnNpYmlsaWRhZC5jc3YiLCAiZGF0b3MvY29udHJvbGVzLmNzdiIsCiAgICAgICAgICAgICAgICAgICJkYXRvcy9jb2VmaWNpZW50ZXNfaGlzdG9yaWNvcy5jc3YiLCAiZGF0b3MvdGF5bG9yX2RpYWdub3N0aWNvLmNzdiIsCiAgICAgICAgICAgICAgICAgICJkYXRvcy9tYW5pZmllc3RvX2luc3Vtb3MuY3N2IiwgIlIvYW5hbGlzaXMuUiIsICJSL3ByZXNlbnRhY2lvbi5SIiwKICAgICAgICAgICAgICAgICAgInJlbmRlcml6YXIuUiIsICJyZWZlcmVuY2lhcy5iaWIiKQpmb3IgKHAgaW4gZGVzY2FyZ2FibGVzKSBjYXQoZGVzY2FyZ2EocCwgYmFzZW5hbWUocCkpLCAiXG4iKQpgYGAKCkVsIGJvdMOzbiAqKkNvZGUg4oaSIERvd25sb2FkIFJtZCoqIHBlcm1pdGUgb2J0ZW5lciBlbCBkb2N1bWVudG8gZnVlbnRlLiBQYXJhCnJlY29uc3RydWlyIGxvcyByZXN1bHRhZG9zIGRlc2RlIGxvcyBtaWNyb2RhdG9zIHNlIGRlYmUgY29uc2VydmFyIGxhIGVzdHJ1Y3R1cmEKZGUgY2FycGV0YXMgaW5kaWNhZGEgZW4gZWwgcHJveWVjdG8geSBlamVjdXRhcjoKCmBgYHtyIGluc3RydWNjaW9uZXMsIGV2YWw9RkFMU0UsIGVjaG89VFJVRX0KU3lzLnNldGVudihFUEhfUk9PVCA9ICJydXRhL2EvRVBIbiIpCnNvdXJjZSgiUi9hbmFsaXNpcy5SIiwgZW5jb2RpbmcgPSAiVVRGLTgiKQpyZWNvbnN0cnVpcl9kYXRvcyhTeXMuZ2V0ZW52KCJFUEhfUk9PVCIpLCBnZXR3ZCgpKQpybWFya2Rvd246OnJlbmRlcigiQVJUSUNVTE9fRVBIQy5SbWQiLCBlbmNvZGluZyA9ICJVVEYtOCIpCmBgYAoKQ29uIGxvcyBDU1YgYWdyZWdhZG9zIGRpc3BvbmlibGVzIGJhc3RhIGNvbiBhYnJpciBgQVJUSUNVTE9fRVBIQy5SbWRgIGVuIFJTdHVkaW8geQpwdWxzYXIgKipLbml0KiouIEVsIEhUTUwgaW5jb3Jwb3JhIGxhcyBmaWd1cmFzIHkgZXN0aWxvcy4gTGEgcHVibGljYWNpw7NuIGVuIFJQdWJzCnNlIHJlYWxpemEgZGVzZGUgKipQdWJsaXNoKiogZW4gbGEgdmlzdGEgcHJldmlhLCBzaWd1aWVuZG8gbGFzCltpbnN0cnVjY2lvbmVzIGRlbCBzZXJ2aWNpb10oaHR0cHM6Ly9ycHVicy5jb20vYWJvdXQvZ2V0dGluZy1zdGFydGVkKS4KCiMjIEVudG9ybm8gZGUgbGEgcmVjb25zdHJ1Y2Npw7NuCgpgYGB7ciBlbnRvcm5vLWFuYWxpc2lzfQpjYXQocmVhZExpbmVzKCJkYXRvcy9zZXNpb25fYW5hbGlzaXMudHh0Iiwgd2FybiA9IEZBTFNFKSwgc2VwID0gIlxuIikKYGBgCgojIyBFbnRvcm5vIGRlbCBkb2N1bWVudG8KCmBgYHtyIGVudG9ybm8tcmVuZGVyfQpzZXNzaW9uSW5mbygpCmBgYAoKIyBSZWZlcmVuY2lhcyB7LX0KCjo6OiB7I3JlZnN9Cjo6Ogo=