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.
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.
Antecedentes
institucionales y metodológicos
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).
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.
Marco de calibración de
ponderadores
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).
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).
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.
Datos y diseño de la
reconstrucción
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.
Escenarios de
factores
Se utilizan dos capas generadas en este flujo R:
- Peso publicado en los microdatos (INE): conserva la
variable de expansión disponible en la versión fuente de cada año.
- 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.
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.
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
|
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.
Resultados
Tasas de pobreza
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.
Cantidad de personas
pobres
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.
Población ponderada y
conexión 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
|
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í
|
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.
Incertidumbre e
inferencia
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.
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.
Limitaciones
- Especificación por tramos. Los auxiliares de
2015–2021 difieren de los usados en 2022–2025; la continuidad visual no
demuestra comparabilidad plena.
- Objetivos derivados. Debe documentarse la
construcción histórica y su compatibilidad con la población
efectivamente cubierta por la encuesta.
- Área constante desde el censo. Las proporciones
urbana/rural de 2022 se conservan en 2023–2025 como supuesto de los
márgenes.
- Categorías sin muestra. La imposibilidad de cumplir
sus objetivos permanece en los diagnósticos y no se oculta como
convergencia.
- Universo de pobreza. Los faltantes se excluyen del
denominador y se informan; las exclusiones adicionales deben
contrastarse con las publicaciones oficiales.
- 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.
- Escenarios disponibles. La tercera capa de factores
previos a la revisión requiere su propia incorporación reproducible en
R.
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.
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.
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
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. 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=