0. Definición del ambiente de trabajo.

Al comenzar siempre es importante establecer el idioma adecuado para que el programa reconozca caractreres especiales. En el caso de definir al idioma español, la instrucción a utilizar es:

Sys.setlocale("LC_ALL", "en_US.UTF-8")
## [1] "en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8"
Sys.setenv(LANG = "spa")

También es importante instalar las librerías que se utilizarán posteriormente:

library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✓ ggplot2 3.3.5     ✓ purrr   0.3.4
## ✓ tibble  3.1.6     ✓ dplyr   1.0.7
## ✓ tidyr   1.1.4     ✓ stringr 1.4.0
## ✓ readr   2.1.2     ✓ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library(descr)
library(naniar) #[página web](#https://cran.r-project.org/web/packages/naniar/vignettes/replace-with-na.html)
library(haven)

Además es muy relevante establecer la ubicación del directorio de trabajo, con el fin que el programa identifique el archivo del que extraerá y, también, guardará la información solicitada.

getwd() ##directorio actual
## [1] "/Users/gustavo/Dropbox/R/Rmarkdown"
setwd("~/Dropbox/R") ##Esta permite cambiar y definir el directorio deseado

Una vez establecido el directorio de trabajo, se debe cargar la base de datos o data frame en el ambiente del programa, con el que se analizará la información. Para ello habrá que “cargar” la información de la encuesta pre electoral elaborada por la consultoría Berumen, en la que midió la intención de voto por los candidatos presidenciales en México durante las elecciones del año 2018.

data_ber <- read_sav("~/Dropbox/R/berumen_encuesta_6_junio.sav") #la base de datos original está guardada en formato ".sav" (spss)

Y ahora se debe explorar la estructura de la matriz de datos para identificar las dimensiones de la base así como el tipo de variables registradas en el data frame. Para ello se puede utilizar el comando str(data_ber). Sin embargo no se mostrará en este documento pues se está trabajando con un data frame que contiene 205 ítems o columnas, y ocuparía mucho espacio del documento.

1. Regresión logística (logit) binomial.

Esta se basa en una forma de distribución de probabilidades de tipo binomial. Esta técnica permite evaluar el efecto de variables independientes, tanto continuas como categóricas, sobre la probabilidad de ocurrencia de una variable dependiente de corte categórica y dicotómica.

Una variable dicotómica supone que solo tiene dos atributos o valores posibles para cada evento (éxito o fracaso), y ambos son mutuamente excluyentes. Por ejemplo, Y puede referirse al sexo de una persona, y sus valores posibles son solo dos: hombre o mujer.

De manera que al evaluar la probabilidad de Y (variable dicotómica), se está buscando el valor de \(P(Y [hombre, mujer])\), y no necesariamente se busca evaluar de manera determinística el resultado en sí de un evento.

1.1. Tipos de variables necesarias.

Las variables que se utilizarán en un modelo de regresión logística tienen las siguientes características:

  • Y = categórica dicotómica (2 valores posibles) / dummy (0 = fracaso, 1 = éxito).
  • X = continua = variables de intervalo o razón.
  • X = categórica = variable dicotómica / dummy (0 = fracaso, 1 = éxito).

1.2. Características de los valores de una probabilidad, P(Y = 1).

Las características de los valores de una probabilidad calculada son: - \(0 < P(Y = 1) < 1\), o que todos los valores de probabilidades para un resultado posible (Y = 1) se ubican entre 0 y 1. - \(\sum P(Y = [1, 0]) = 1\), la suma de todas las probabilidades asociadas a los valores o atributos de una variable [0, 1] es igual a 1.

1.3. Forma de la relación logística.

El estudio del efecto causal entre una variable independiente (X[categórica o continua]) sobre una variable dependiente (Y[dicotómica]) mediante la técnica de la regresión logística binomial supone conocer una probabilidad condicionada de Y dado que se considera que X esté presente, de manera que se busca conocer los valores de \(P(Y = 1 | X)\).

Para ello, el interés del análisis está en describir la forma de la función de una distribución de probabilidad acumulada. Esta forma de distribución no tiene una forma lineal (\(Y = a + bX\)), por lo que el modelo \(P(Y = 1 | X) = F(B0 + B1 X1)\) requiere una transformación logarítmica debido a que la distribución de probabilidades tiene límites (0, 1) que impide que se usen los supuestos de la distribución normal y, además, implica que la relación entre Y y X no sea lineal.

La forma de la distribución acumulada de probabilidad de \(P(Y = 1 | X)\) tiene una forma de “S”. De manera que se aplica la ecuación: \[ln\frac{P(Y[=1])}{P(1-Y[=1)]}= B_0 + B_1 *X_1\] donde \(P(Y=1)\) se refiere a la probabilidad de que la variable Y adquiera el valor 1, y \(P(1-Y[=1])\) consiste en la probabilidad que Y adopte el atributo del evento complementario a 1, que en este caso se refiere al evento codificado con el valor 0 (\(P(Y[=0])\)).

Los resultados que arrojará el análisis de regresión logit en R para los coeficientes de regresión (\(B_i\)) de cada variable independiente estarán expresados en unidades logarítmicas de la razón entre las probabilidades de éxito entre las probabilidades de fracaso debido a que el lado de la izquierda en la encuesta de regresión es multiplicada por el valor del logaritmo natural (“ln”), de manera que: \(ln\frac{P(Y=1)}{P(1-Y=1)}\)

Y la relación entre \(\frac{P(Y=1)}{P(1-Y=1)}\) consiste en una razón entre las probabilidades de éxito (o \(Y=1\)) respecto de las probabilidades de fracaso (o \(Y=0\)), y a esta razón de probabilidades se le denomina como “odds ratio”.

2. Diseño de la regresión logística simple en R.

La regresión logística en R es tratada como un “modelo lineal generalizado” (glm). Esto supone que existen diversos tipos de regresión, por ejemplo los modelos lineales calculados con métodos de mínimos cuadrados ordinales y los logísticos. Estos operan de manera similar pero asumen cosas diferentes acerca de la forma de distribución de la variable dependiente (Y). Otro modelo de regresión dentro del ámbito de los gml incluyen a los modelos Poisson (para datos de conteo), los que pueden “correrse” en R de maneras similares, pero asumen una distribución diferente para la variable de interés (Y). Todos estos modelos se pueden operar desde el sistema base de R mediante el comando glm() de la misma manera, solo se requiere especificar cuál es el tipo de variable dependiente (Y) mediante la definición del tipo de “familia” de distribución, que es un argumento más de dicho comando. La “familia” que se especifica para los modelos de regresión logística se refiere por “binomial”.

2.1. Preparación de variables previo a la regresión logit.

A continuación se realizará un modelo de regresión logística en el que se analice el efecto causal de la edad sobre la intención de voto por la candidatura presidencial de MORENA, encabezada por Andrés Manuel López Obrador, en México durante los comicios del año de 2018.

Para ello se utilizan los datos de la encuesta pre electoral elaborada por la consultoría Berumen, que se “levantó” a finales del mes de mayo y principios del mes de junio de mismo año, casi un mes previo a la jornada electoral.

Las variables que se recuperaron para el ejercicio son:

  • Y = Candidato de preferencia, que se midió mediante la pregunta “¿Por quién va a votar el primero de julio para Presidente de la república?”, y que se codificó con la etiqueta: P1_5. Las opciones de respuesta o valores originales posibles son: 1. Ricardo Anaya, 2. José Antonio Meade Kureña, 3. Andrés Manuel López Obrador (AMLO), 4. Margarita Zavala, 5. Jaime Rodríguez Calderón “El Bronco”, 6. Otros, 7. No votará, 8. No sabe, 9. No respondió (NR).
  • X1 = Edad de los encuestados, que se midió con la pregunta “¿Cuántos años cumplidos tiene?”, y que se codificó con la etiqueta: A4. Las respuestas fueron registradas con la unidad de medida de “años”, donde los valores posibles iban de 18 a 98 años, y el valor de 99 fue asignado a los que no respondieron (NR).

Para comenzar el análisis, se debe realizar un análisis exploratorio de las variables para, así, evaluar si se deben transformar y adaptarlas a las necesidades del modelo de regresión logit binomial.

En el caso de la variable Y, se solicita una tabla de frecuencias para conocer su distribución:

options(scipen = 999) #Solicita que los valores en proporciones se arrojen en decimales
freq(data_ber $ P1_5) #tabla de frecuencias con la librería "descr"

## Por quién va a votar el primero de julio para Presidente de la República 
##       Frequency    Percent
## 1          2622  19.689119
## 2          1757  13.193662
## 3          5550  41.676053
## 4            73   0.548172
## 5           256   1.922355
## 6             2   0.015018
## 7           541   4.062477
## 8          2070  15.544041
## 9           374   2.808440
## 10           62   0.465570
## 11            9   0.067583
## 99            1   0.007509
## Total     13317 100.000000

Aquí se puede ver que en el data frame, la variable P1_5 cuenta con 12 categorías, por lo que se debe manipular para lograr varios ajustes que permitan recuperarla en el modelo de regresión.

Primero se deben asignar los valores “perdidos” (NA), para lo que se identificó (a partir del libro de códigos de la encuesta)libro de códigos que los valores 8, 9, 10, 11 y 99 pueden ser transformados a NA. Para ello se utilizará el comando replace_with_na(), que es parte de la librería naniar() página web, y que se puede integrar en la estructura de redacción de dplyr() de la siguiente manera:

data_ber <- data_ber %>%
  replace_with_na(replace = list(P1_5 = c(7, 8, 9, 10, 11, 99))) #asignación de NA
freq(data_ber $ P1_5) #tabla de frecuencias 

## Por quién va a votar el primero de julio para Presidente de la República 
##       Frequency   Percent Valid Percent
## 1          2622  19.68912      25.55556
## 2          1757  13.19366      17.12476
## 3          5550  41.67605      54.09357
## 4            73   0.54817       0.71150
## 5           256   1.92235       2.49513
## 6             2   0.01502       0.01949
## NA's       3057  22.95562              
## Total     13317 100.00000     100.00000

Aquí se han reducido las categorías, pero aún es necesario reducirlas más para transformar a la variable y convertirla en una de corte “dicotómica” (2 categorías o valores posibles solamente). Para ello, a continuación, se tomará a la candidatura de AMLO (categorías = 3) como la referencia y las candidaturas restantes serán agrupadas en una categoría residual (otros = 1, 2, 4, 5, 6).

Para ello se transformará de nuevo la variable P1_5 y se construye una variable nueva con formato dummy: P1_5r en la que la categoría 3 (AMLO) adoptará el valor de 1, y el resto de las respuestas se recodifican en 0:

data_ber <- data_ber %>%
  mutate(P1_5r = ifelse(P1_5 == 3, 1, 0))
freq(data_ber $ P1_5r)

## data_ber$P1_5r 
##       Frequency Percent Valid Percent
## 0          4710   35.37         45.91
## 1          5550   41.68         54.09
## NA's       3057   22.96              
## Total     13317  100.00        100.00

De esta manera queda lista la variable Y para incluirse en el modelo de regresión logit.

Ahora es importante revisar la distribución de la variable independiente (X), edad de los encuestados (codificada con la clave A4), para identificar si requiere transformación previa al análisis de regresión. Para ello se analiza, primero, su distribución:

summary(data_ber $ A4) ## resumen de edad del encuestado
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   18.00   27.00   36.00   38.94   49.00   99.00

Este resumen muestra que la edad mínima es de 18 años y la máxima es de 99. Pero en el libro de códigos (encuesta) se reconoce que los valores de 99 fueron asignados a los casos que No Respondieron (NR), por lo que se deben tratar como casos “perdidos”.

Por ello debemos revisar, de nuevo, la distribución de las edades pero ahora se deben excluir los casos con valores de 99. A continuación se solicitan los valores mínimos y máximos excluyendo al 99:

data_ber %>%
  filter(A4 < 99) %>%
  summarise(mín = min(A4),
            max = max(A4))
## # A tibble: 1 × 2
##     mín   max
##   <dbl> <dbl>
## 1    18    93

Ahora se sabe que la edad mínima permanece sin cambios mientras que la edad máxima de los encuestados fue de 93, de esta manera podemos asignar los valores perdidos a los casos que se registraron con una edad con valor de 99.

data_ber <- data_ber %>%
  replace_with_na(replace = list(A4 = 99))
summary(data_ber $ A4)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##   18.00   27.00   36.00   38.86   49.00   93.00      17

Ahora ya tenemos listas las variables para incluirlas en el modelo de regresión logit.

2.2. Construcción del modelo de regresión logit.

A partir del script glm(), y con la especificación de la familia binomial dentro de los argumentos, es que se puede elabora el modelo de regresión logit binominal, donde Y = candidato de preferencia (donde P1_5r = [AMLO, otros]) y X = edad (donde A4 = [18, 93]).

logit_cand1 <- glm(P1_5r ~ A4, #Relación entre variables VD y VI
                   data = data_ber, #data frame 
                   family = "binomial") #familia del modelo de regresión
summary(logit_cand1) #arroja los resultados del modelo
## 
## Call:
## glm(formula = P1_5r ~ A4, family = "binomial", data = data_ber)
## 
## Deviance Residuals: 
##    Min      1Q  Median      3Q     Max  
## -1.286  -1.248   1.076   1.106   1.207  
## 
## Coefficients:
##              Estimate Std. Error z value      Pr(>|z|)    
## (Intercept)  0.331039   0.056640   5.845 0.00000000508 ***
## A4          -0.004357   0.001385  -3.145       0.00166 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 14138  on 10247  degrees of freedom
## Residual deviance: 14128  on 10246  degrees of freedom
##   (3069 observations deleted due to missingness)
## AIC: 14132
## 
## Number of Fisher Scoring iterations: 3

Los resultados son desplegados, en su mayoría, parecidos a lo que se muestran en los modelos lineales de mínimos cuadrados ordinarios. Sin embargo, en el despliegue de los resultados del modelo logístico se debe realizar un trabajo adicional derivado de que los valores de los coeficientes de regresión (a y b) se presentan en unidades multiplicadas por su logaritmo natural.

Esto es, a partir de los valores arrojados en el resumen para los coeficientes a y b, se puede construir la siguiente ecuación de regresión logit: \[ln\frac{P(Y[=1])}{P(1-Y[=1)]}= 0.331039 + (-0.004357 *X_1)\]

Sin embargo, para interpretar los valores de los coeficientes, primero se deben transformar sus valores para anular el logaritmo del lado izquierdo de la ecuación y, así, obtener el valor de la razón de probabilidades de Y (\(\frac{P(Y=1)}{P(1-Y=1)}\)). Dicha transformación requiere que los valores ubicados en el lado derecho de la ecuación sean elevados por el coeficiente “e” -la constante de Euler–.

Esta transformación se puede realizar de la siguiente manera:

exp(coefficients(logit_cand1))
## (Intercept)          A4 
##   1.3924140   0.9956525

La razón de probabilidades nos dice cual es la relación que existe entre la probabilidad de (Y = 1) respecto de la probabilidad del valor complementario de Y (Y = 0). Esto nos indica “cuántas veces” es mayor el valor del numerador respecto del denominador en la ecuación. Por ejemplo, si la P(Y = 1) es de 0.5, y la P(Y = 0) es de 0.5 (simulando un lanzamiendo de moneda), donde ambas probabilidades son iguales, entonces la razón de probabilidades es de \(\frac{P(Y=1)}{P(1-Y=1)} = \frac{0.5}{0.5}= 1\). Debido a que ambas probabilidades son iguales (0.5), entonces su razón es igual a 1. Si la probabilidad del numerador fuera mayor que la probabilidad en el denominador, entonces la razón de probabilidades adoptaría un valor mayor a 1. Y si la probabilidad del numerador fuera menor que la probabilidad en el denominador, entonces la razón de probabilidades adoptaría un valor por debajo de 1.

Para el caso analizado, el valor del coeficiente b es de 0.99 por lo que indica que hay un efecto ligeramente por debajo del valor de referencia de 1.

Una manera de interpretar este valor plantea que “se puede afirmar que por cada incremento de una unidad en la variable EDAD (X), la probabilidad de encontrar a una persona que afirmó que votará por AMLO a la en la encuesta (Y) es 0.01 (esto se deriva de restar 1 - 0.99) veces menor que una persona que votará por otros candidatos”.

Si se desea, se puede realizar una transformación adicional a los valores de los odds ratio para, así, interpretarlos de manera literal. Por ejemplo, se puede tomar el valor de los odds ratio y restale 1 para, después, multiplicarlo por 100 y, de esa manera, obtener el valor en unidades porcentuales del cambio en la razón de probabilidades por cada incremento de una unidad en la variable independiente (X).

(exp(coefficients(logit_cand1))-1)*100
## (Intercept)          A4 
##  39.2413961  -0.4347499

La manera de interpretar dichos coeficientes es: A4= 0.99: Por cada incremento en 1 unidad en la edad (años) de los encuestados, se espera observar un decremento de 0.43% en la probabilidad de votar por AMLO. Y con un valor de unidades z = -3.145 y un p-value = 0.00166, este coeficiente se puede considerar estadísticamente significativo con un nivel de significancia (alfa) de 0.05.

2.3. Construcción del modelo de regresión logit múltiple.

Los modelos de regresión pueden complejizarse incluyendo una mayor cantidad de variables independientes (\(Xi\)), y esto permitirá, también, evaluar el efecto de cada una de esas variables a la vez que se puede controlar el efecto simultáneo del resto (\(X_{i-1}\)) sobre le comportamiento de la variable dependiente (\(Y\)).

Siguiendo con el ejemplo, se incluirá una variable independiente adicional (\(X2\)) de corte categórica para controlar el efecto de la edad sobre la intención de voto de los encuestados.

  • (X2) Para ello se retomará la pregunta (P2_6_1) la relevancia del tema de la corrupción para la vida nacional, que se redactó de la forma: “De los siguientes temas que le voy a mencionar [1. Combatir a la corrupción], ¿cuáles considera como muy importante, importante, poco importante y nada importante para elegir a un candidato?”.

Para conocer la distribución de la pregunta P1_3, se solicita una tabla de frecuencias:

freq(data_ber $ P2_6_1)

## De los siguientes temas que le voy a mencionar, ¿cuáles considera como muy importante, importante, poco importante y nada importante para elegir un candidato?, Combatir la corrupción 
##       Frequency  Percent
## 1          8339  62.6192
## 2          4299  32.2820
## 3           304   2.2828
## 4            96   0.7209
## 8           206   1.5469
## 9            73   0.5482
## Total     13317 100.0000

Se identifica que la categoría más frecuente es la respuesta con valor 1 (que significa “muy importante”), mientras que le sigue la categoría codificada con valor de 2 (“importante”), y le sigue la categoría 3 (“poco importante) y por último se ubicó la categoría codificada con el valor de 4 (”nada importante”). Asimismo se observan la presencia de las categorías 8 (“no sabe”) y 9 (“no respondió”). Estas últimas serán tratadas como valores perdidos, de la siguiente manera:

data_ber <- data_ber %>%
  replace_with_na(replace = list(P2_6_1 = c(8, 9)))
freq(data_ber $ P2_6_1)

## De los siguientes temas que le voy a mencionar, ¿cuáles considera como muy importante, importante, poco importante y nada importante para elegir un candidato?, Combatir la corrupción 
##       Frequency  Percent Valid Percent
## 1          8339  62.6192       63.9592
## 2          4299  32.2820       32.9728
## 3           304   2.2828        2.3316
## 4            96   0.7209        0.7363
## NA's        279   2.0951              
## Total     13317 100.0000      100.0000

Una vez tratada la variable, la variable P2_6_1, integrada por 4 categorías, se puede incluir en el modelo de regresión logit como X2 para, así, construir el siguiente modelo: \[ln\frac{P(Y[=1])}{P(1-Y[=1)]}= B_0 + B_1 * X_1 + B_2 * X2\].

La manera de construir el modelo en R es la siguiente:

logit_cand2 <- glm(P1_5r ~ A4 + as.factor(P2_6_1), #Relación entre variables VD y VI-1 y VI-2
                   data = data_ber, #data frame 
                   family = "binomial") #familia del modelo de regresión
summary(logit_cand2) #arroja los resultados del modelo
## 
## Call:
## glm(formula = P1_5r ~ A4 + as.factor(P2_6_1), family = "binomial", 
##     data = data_ber)
## 
## Deviance Residuals: 
##    Min      1Q  Median      3Q     Max  
## -1.298  -1.248   1.069   1.105   1.317  
## 
## Coefficients:
##                     Estimate Std. Error z value      Pr(>|z|)    
## (Intercept)         0.355814   0.058627   6.069 0.00000000129 ***
## A4                 -0.004287   0.001391  -3.081       0.00206 ** 
## as.factor(P2_6_1)2 -0.062157   0.042820  -1.452       0.14662    
## as.factor(P2_6_1)3 -0.263013   0.151256  -1.739       0.08206 .  
## as.factor(P2_6_1)4 -0.330293   0.322337  -1.025       0.30551    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 14028  on 10168  degrees of freedom
## Residual deviance: 14012  on 10164  degrees of freedom
##   (3148 observations deleted due to missingness)
## AIC: 14022
## 
## Number of Fisher Scoring iterations: 3

Al revisar los valores de los coeficientes de regresión se observa que se arrojan 4 valores de beta para solo 2 variables incluidas en el modelo (X1 = A4, X2 = P2_6_1). En el caso de la variable A4, debido a ser de corte continua, el modelo de regresión le calcula un valor de beta (b1 = -0.004287), mientras que en el caso de la variable X2 se calcularon 3 valores de beta debido a que ésta está integrada por 4 categorías, valores o atributos. Esto modifica a la ecuación previa para quedar de la siguiente manera: \[ln\frac{P(Y[=1])}{P(1-Y[=1)]}= b_0 + b_1 * X_1 + b_2 * X_2 + b_3 * X_3 + b_4 * X_4\].

Los coeficientes que se reportan para la variable P2_6_2 se refieren a la comparación de cada una de las categorías calculadas (esto se indica con el número al final de la variable en la tabla de coeficientes) con respecto a una categoría de referencia: 1. El coeficiente \(b2\) se refiere al efecto que ejerce la categoría 2 en comparación del efecto de la categoría 1 (referencia); 2. El coeficiente \(b3\) se refiere al efecto que ejerce la categoría 3 en comparación del efecto de la categoría 1 (referencia); 3. El coeficiente \(b4\) se refiere al efecto que ejerce la categoría 4 en comparación del efecto de la categoría 1 (referencia).

Para interpretar los valores de los coeficientes, se elevan a la \(e\) los valores de los coeficientes de regresión para obtener sus valores de razón de probabilidades (odds ratio).

coef <- coefficients(logit_cand2) #los valores de los coeficientes se guardan como objeto
exp(coef) #los valores de los coeficientes se elevan a la potencia "e"
##        (Intercept)                 A4 as.factor(P2_6_1)2 as.factor(P2_6_1)3 
##          1.4273424          0.9957225          0.9397356          0.7687320 
## as.factor(P2_6_1)4 
##          0.7187130

Ademmás se puede calcular el cambio porcentual de las razones de probabilidad por el incremento en una unidad en la variable independiente.

(exp(coef) - 1) * 100
##        (Intercept)                 A4 as.factor(P2_6_1)2 as.factor(P2_6_1)3 
##         42.7342350         -0.4277541         -6.0264411        -23.1267960 
## as.factor(P2_6_1)4 
##        -28.1286983

La manera de interpretar los valores de los coeficientes:

  1. A4= 0.995: Por cada incremento en 1 unidad en la edad (años) de los encuestados, se espera observar un decremento de 0.43% en la probabilidad de votar por AMLO. Y con un valor de unidades z = -3.081 y un p-value = 0.00206, este coeficiente se puede considerar estadísticamente significativo con un nivel de significancia (alfa) de 0.05.
  2. P2_6_12= 0.939: Las personas que consideran que combatir a la corrupción es “importante” (categoría 2), comparados con las personas que consideran que es “muy importante” (categoría 1, de referencia), están asociados con un decremento de 6.02% en la razón de probabilidades de votar por AMLO. Con un valor en unidades z = -1.452, y un p-value = 0.14662 se considera que la variable NO es estadísticamente significativa con un nivel de significancia (alfa) de 0.05.
  3. P2_6_13= 0.768: Las personas que consideran que combatir a la corrupción es “poco importante” (categoría 3), comparados con las personas que consideran que es “muy importante” (categoría 1, de referencia), están asociados con un decremento de 23.12% en la razón de probabilidades de votar por AMLO. Con un valor en unidades z = -1.739, y un p-value = 0.08206 se considera que la variable NO es estadísticamente significativa con un nivel de significancia (alfa) de 0.05.
  4. P2_6_14= 0.718: Las personas que consideran que combatir a la corrupción es “nada importante” (categoría 4), comparados con las personas que consideran que es “muy importante” (categoría 1, de referencia), están asociados con un decremento de 28.12% en la razón de probabilidades de votar por AMLO. Con un valor en unidades z = -1.025, y un p-value = 0.30551 se considera que la variable NO es estadísticamente significativa con un nivel de significancia (alfa) de 0.05.

3. Ejercicio.

Realiza las siguientes actividades: 1. Construye un modelo de regresión logit simple. 2. Reporta el valor de la razón de probabilidades odds ratio para el coeficiente de regresión. 3. Interpreta el valor de la razón de probabilidades reportada. 4. Identifica si el valor del coeficiente de regresión es estadísticamente significativo.

LS0tCmF1dGhvcjogR3VzdGF2byBNYXJ0w61uZXotVmFsZGVzCmRhdGU6ICdgciBmb3JtYXQoU3lzLkRhdGUoKSlgJwp0aXRsZTogIkFjdGl2aWRhZCBSZWdyZXNpw7NuIExvZ2l0IgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgY29kZV9mb2xkaW5nOiBzaG93CiAgICB0aGVtZTogY29zbW8KICAgIHRvYzogdHJ1ZQogICAgdG9jX2RlcHRoOiA1LjAKICAgIGNvZGVfZG93bmxvYWQ6IHRydWUKYmlibGlncmFwaHk6IG1ldG9kb2xvZ2lhLmJpYgpjc2w6IGFwYS5jc2wKYmlibGlvZ3JhcGh5OiByZWZlcmVuY2VzLmJpYgotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpCmBgYAoKIyMgMC4gRGVmaW5pY2nDs24gZGVsIGFtYmllbnRlIGRlIHRyYWJham8uCgpBbCBjb21lbnphciBzaWVtcHJlIGVzIGltcG9ydGFudGUgZXN0YWJsZWNlciBlbCBpZGlvbWEgYWRlY3VhZG8gcGFyYSBxdWUgZWwgcHJvZ3JhbWEgcmVjb25vemNhIGNhcmFjdHJlcmVzIGVzcGVjaWFsZXMuIEVuIGVsIGNhc28gZGUgZGVmaW5pciBhbCBpZGlvbWEgZXNwYcOxb2wsIGxhIGluc3RydWNjacOzbiBhIHV0aWxpemFyIGVzOgoKYGBge3IgaWRpb21hfQpTeXMuc2V0bG9jYWxlKCJMQ19BTEwiLCAiZW5fVVMuVVRGLTgiKQpTeXMuc2V0ZW52KExBTkcgPSAic3BhIikKYGBgCgpUYW1iacOpbiBlcyBpbXBvcnRhbnRlIGluc3RhbGFyIGxhcyBsaWJyZXLDrWFzIHF1ZSBzZSB1dGlsaXphcsOhbiBwb3N0ZXJpb3JtZW50ZToKCmBgYHtyIGxpYnJlcmlhfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShkZXNjcikKbGlicmFyeShuYW5pYXIpICNbcMOhZ2luYSB3ZWJdKCNodHRwczovL2NyYW4uci1wcm9qZWN0Lm9yZy93ZWIvcGFja2FnZXMvbmFuaWFyL3ZpZ25ldHRlcy9yZXBsYWNlLXdpdGgtbmEuaHRtbCkKbGlicmFyeShoYXZlbikKYGBgCgpBZGVtw6FzIGVzIG11eSByZWxldmFudGUgZXN0YWJsZWNlciBsYSB1YmljYWNpw7NuIGRlbCBkaXJlY3RvcmlvIGRlIHRyYWJham8sIGNvbiBlbCBmaW4gcXVlIGVsIHByb2dyYW1hIGlkZW50aWZpcXVlIGVsIGFyY2hpdm8gZGVsIHF1ZSBleHRyYWVyw6EgeSwgdGFtYmnDqW4sIGd1YXJkYXLDoSBsYSBpbmZvcm1hY2nDs24gc29saWNpdGFkYS4KCmBgYHtyIGRpcmVjdG9yaW99CmdldHdkKCkgIyNkaXJlY3RvcmlvIGFjdHVhbApzZXR3ZCgifi9Ecm9wYm94L1IiKSAjI0VzdGEgcGVybWl0ZSBjYW1iaWFyIHkgZGVmaW5pciBlbCBkaXJlY3RvcmlvIGRlc2VhZG8KYGBgCgpVbmEgdmV6IGVzdGFibGVjaWRvIGVsIGRpcmVjdG9yaW8gZGUgdHJhYmFqbywgc2UgZGViZSBjYXJnYXIgbGEgYmFzZSBkZSBkYXRvcyBvIGRhdGEgZnJhbWUgZW4gZWwgYW1iaWVudGUgZGVsIHByb2dyYW1hLCBjb24gZWwgcXVlIHNlIGFuYWxpemFyw6EgbGEgaW5mb3JtYWNpw7NuLiBQYXJhIGVsbG8gaGFicsOhIHF1ZSAiY2FyZ2FyIiBsYSBpbmZvcm1hY2nDs24gZGUgbGEgZW5jdWVzdGEgcHJlIGVsZWN0b3JhbCBlbGFib3JhZGEgcG9yIGxhIGNvbnN1bHRvcsOtYSBCZXJ1bWVuLCBlbiBsYSBxdWUgbWlkacOzIGxhIGludGVuY2nDs24gZGUgdm90byBwb3IgbG9zIGNhbmRpZGF0b3MgcHJlc2lkZW5jaWFsZXMgZW4gTcOpeGljbyBkdXJhbnRlIGxhcyBlbGVjY2lvbmVzIGRlbCBhw7FvIDIwMTguCgpgYGB7ciBjYXJnYV9kYXRvc30KZGF0YV9iZXIgPC0gcmVhZF9zYXYoIn4vRHJvcGJveC9SL2JlcnVtZW5fZW5jdWVzdGFfNl9qdW5pby5zYXYiKSAjbGEgYmFzZSBkZSBkYXRvcyBvcmlnaW5hbCBlc3TDoSBndWFyZGFkYSBlbiBmb3JtYXRvICIuc2F2IiAoc3BzcykKYGBgCgpZIGFob3JhIHNlIGRlYmUgZXhwbG9yYXIgbGEgZXN0cnVjdHVyYSBkZSBsYSBtYXRyaXogZGUgZGF0b3MgcGFyYSBpZGVudGlmaWNhciBsYXMgZGltZW5zaW9uZXMgZGUgbGEgYmFzZSBhc8OtIGNvbW8gZWwgdGlwbyBkZSB2YXJpYWJsZXMgcmVnaXN0cmFkYXMgZW4gZWwgZGF0YSBmcmFtZS4gUGFyYSBlbGxvIHNlIHB1ZWRlIHV0aWxpemFyIGVsIGNvbWFuZG8gYHN0cihkYXRhX2JlcilgLiBTaW4gZW1iYXJnbyBubyBzZSBtb3N0cmFyw6EgZW4gZXN0ZSBkb2N1bWVudG8gcHVlcyBzZSBlc3TDoSB0cmFiYWphbmRvIGNvbiB1biBkYXRhIGZyYW1lIHF1ZSBjb250aWVuZSAyMDUgw610ZW1zIG8gY29sdW1uYXMsIHkgb2N1cGFyw61hIG11Y2hvIGVzcGFjaW8gZGVsIGRvY3VtZW50by4KCgojIyAxLiBSZWdyZXNpw7NuIGxvZ8Otc3RpY2EgKGxvZ2l0KSBiaW5vbWlhbC4KCkVzdGEgc2UgYmFzYSBlbiB1bmEgZm9ybWEgZGUgZGlzdHJpYnVjacOzbiBkZSBwcm9iYWJpbGlkYWRlcyBkZSB0aXBvIGJpbm9taWFsLgpFc3RhIHTDqWNuaWNhIHBlcm1pdGUgZXZhbHVhciBlbCBlZmVjdG8gZGUgdmFyaWFibGVzIGluZGVwZW5kaWVudGVzLCB0YW50byBjb250aW51YXMgY29tbyBjYXRlZ8OzcmljYXMsIHNvYnJlIGxhIHByb2JhYmlsaWRhZCBkZSBvY3VycmVuY2lhIGRlIHVuYSB2YXJpYWJsZSBkZXBlbmRpZW50ZSBkZSBjb3J0ZSBjYXRlZ8OzcmljYSB5IGRpY290w7NtaWNhLgoKVW5hIHZhcmlhYmxlIGRpY290w7NtaWNhIHN1cG9uZSBxdWUgc29sbyB0aWVuZSBkb3MgYXRyaWJ1dG9zIG8gdmFsb3JlcyBwb3NpYmxlcyBwYXJhIGNhZGEgZXZlbnRvICjDqXhpdG8gbyBmcmFjYXNvKSwgeSBhbWJvcyBzb24gbXV0dWFtZW50ZSBleGNsdXllbnRlcy4gUG9yIGVqZW1wbG8sIFkgcHVlZGUgcmVmZXJpcnNlIGFsIHNleG8gZGUgdW5hIHBlcnNvbmEsIHkgc3VzIHZhbG9yZXMgcG9zaWJsZXMgc29uIHNvbG8gZG9zOiBob21icmUgbyBtdWplci4KCkRlIG1hbmVyYSBxdWUgYWwgZXZhbHVhciBsYSBwcm9iYWJpbGlkYWQgZGUgWSAodmFyaWFibGUgZGljb3TDs21pY2EpLCBzZSBlc3TDoSBidXNjYW5kbyBlbCB2YWxvciBkZSAkUChZIFtob21icmUsIG11amVyXSkkLCB5IG5vIG5lY2VzYXJpYW1lbnRlIHNlIGJ1c2NhIGV2YWx1YXIgZGUgbWFuZXJhIGRldGVybWluw61zdGljYSBlbCByZXN1bHRhZG8gZW4gc8OtIGRlIHVuIGV2ZW50by4KCgojIyMgMS4xLiBUaXBvcyBkZSB2YXJpYWJsZXMgbmVjZXNhcmlhcy4KCkxhcyB2YXJpYWJsZXMgcXVlIHNlIHV0aWxpemFyw6FuIGVuIHVuIG1vZGVsbyBkZSByZWdyZXNpw7NuIGxvZ8Otc3RpY2EgdGllbmVuIGxhcyBzaWd1aWVudGVzIGNhcmFjdGVyw61zdGljYXM6CgotIFkgPSBjYXRlZ8OzcmljYSBkaWNvdMOzbWljYSAoMiB2YWxvcmVzIHBvc2libGVzKSAvIGR1bW15ICgwID0gZnJhY2FzbywgMSA9IMOpeGl0bykuCi0gWCA9IGNvbnRpbnVhID0gdmFyaWFibGVzIGRlIGludGVydmFsbyBvIHJhesOzbi4KLSBYID0gY2F0ZWfDs3JpY2EgPSB2YXJpYWJsZSBkaWNvdMOzbWljYSAvIGR1bW15ICgwID0gZnJhY2FzbywgMSA9IMOpeGl0bykuCgoKIyMjIDEuMi4gQ2FyYWN0ZXLDrXN0aWNhcyBkZSBsb3MgdmFsb3JlcyBkZSB1bmEgcHJvYmFiaWxpZGFkLCBQKFkgPSAxKS4KCkxhcyBjYXJhY3RlcsOtc3RpY2FzIGRlIGxvcyB2YWxvcmVzIGRlIHVuYSBwcm9iYWJpbGlkYWQgY2FsY3VsYWRhIHNvbjoKLSAkMCA8IFAoWSA9IDEpIDwgMSQsIG8gcXVlIHRvZG9zIGxvcyB2YWxvcmVzIGRlIHByb2JhYmlsaWRhZGVzIHBhcmEgdW4gcmVzdWx0YWRvIHBvc2libGUgKFkgPSAxKSBzZSB1YmljYW4gZW50cmUgMCB5IDEuCi0gJFxzdW0gUChZID0gWzEsIDBdKSA9IDEkLCBsYSBzdW1hIGRlIHRvZGFzIGxhcyBwcm9iYWJpbGlkYWRlcyBhc29jaWFkYXMgYSBsb3MgdmFsb3JlcyBvIGF0cmlidXRvcyBkZSB1bmEgdmFyaWFibGUgWzAsIDFdIGVzIGlndWFsIGEgMS4KCgojIyMgMS4zLiBGb3JtYSBkZSBsYSByZWxhY2nDs24gbG9nw61zdGljYS4KCkVsIGVzdHVkaW8gZGVsIGVmZWN0byBjYXVzYWwgZW50cmUgdW5hIHZhcmlhYmxlIGluZGVwZW5kaWVudGUgKFhbY2F0ZWfDs3JpY2EgbyBjb250aW51YV0pIHNvYnJlIHVuYSB2YXJpYWJsZSBkZXBlbmRpZW50ZSAoWVtkaWNvdMOzbWljYV0pIG1lZGlhbnRlIGxhIHTDqWNuaWNhIGRlIGxhIHJlZ3Jlc2nDs24gbG9nw61zdGljYSBiaW5vbWlhbCBzdXBvbmUgY29ub2NlciB1bmEgcHJvYmFiaWxpZGFkIGNvbmRpY2lvbmFkYSBkZSBZIGRhZG8gcXVlIHNlIGNvbnNpZGVyYSBxdWUgWCBlc3TDqSBwcmVzZW50ZSwgZGUgbWFuZXJhIHF1ZSBzZSBidXNjYSBjb25vY2VyIGxvcyB2YWxvcmVzIGRlICRQKFkgPSAxIHwgWCkkLgoKUGFyYSBlbGxvLCBlbCBpbnRlcsOpcyBkZWwgYW7DoWxpc2lzIGVzdMOhIGVuIGRlc2NyaWJpciBsYSBmb3JtYSBkZSBsYSBmdW5jacOzbiBkZSB1bmEgZGlzdHJpYnVjacOzbiBkZSBwcm9iYWJpbGlkYWQgYWN1bXVsYWRhLiBFc3RhIGZvcm1hIGRlIGRpc3RyaWJ1Y2nDs24gbm8gdGllbmUgdW5hIGZvcm1hIGxpbmVhbCAoJFkgPSBhICsgYlgkKSwgcG9yIGxvIHF1ZSBlbCBtb2RlbG8gJFAoWSA9IDEgfCBYKSA9IEYoQjAgKyBCMSBYMSkkIHJlcXVpZXJlIHVuYSB0cmFuc2Zvcm1hY2nDs24gbG9nYXLDrXRtaWNhIGRlYmlkbyBhIHF1ZSBsYSBkaXN0cmlidWNpw7NuIGRlIHByb2JhYmlsaWRhZGVzIHRpZW5lIGzDrW1pdGVzICgwLCAxKSBxdWUgaW1waWRlIHF1ZSBzZSB1c2VuIGxvcyBzdXB1ZXN0b3MgZGUgbGEgZGlzdHJpYnVjacOzbiBub3JtYWwgeSwgYWRlbcOhcywgaW1wbGljYSBxdWUgbGEgcmVsYWNpw7NuIGVudHJlIFkgeSBYIG5vIHNlYSBsaW5lYWwuCgpMYSBmb3JtYSBkZSBsYSBkaXN0cmlidWNpw7NuIGFjdW11bGFkYSBkZSBwcm9iYWJpbGlkYWQgZGUgJFAoWSA9IDEgfCBYKSQgdGllbmUgdW5hIGZvcm1hIGRlICJTIi4KRGUgbWFuZXJhIHF1ZSBzZSBhcGxpY2EgbGEgZWN1YWNpw7NuOiAkJGxuXGZyYWN7UChZWz0xXSl9e1AoMS1ZWz0xKV19PSBCXzAgKyBCXzEgKlhfMSQkCmRvbmRlICRQKFk9MSkkIHNlIHJlZmllcmUgYSBsYSBwcm9iYWJpbGlkYWQgZGUgcXVlIGxhIHZhcmlhYmxlIFkgYWRxdWllcmEgZWwgdmFsb3IgMSwgeSAkUCgxLVlbPTFdKSQgY29uc2lzdGUgZW4gbGEgcHJvYmFiaWxpZGFkIHF1ZSBZIGFkb3B0ZSBlbCBhdHJpYnV0byBkZWwgZXZlbnRvIGNvbXBsZW1lbnRhcmlvIGEgMSwgcXVlIGVuIGVzdGUgY2FzbyBzZSByZWZpZXJlIGFsIGV2ZW50byBjb2RpZmljYWRvIGNvbiBlbCB2YWxvciAwICgkUChZWz0wXSkkKS4KCkxvcyByZXN1bHRhZG9zIHF1ZSBhcnJvamFyw6EgZWwgYW7DoWxpc2lzIGRlIHJlZ3Jlc2nDs24gbG9naXQgZW4gUiBwYXJhIGxvcyBjb2VmaWNpZW50ZXMgZGUgcmVncmVzacOzbiAoJEJfaSQpIGRlIGNhZGEgdmFyaWFibGUgaW5kZXBlbmRpZW50ZSBlc3RhcsOhbiBleHByZXNhZG9zIGVuIHVuaWRhZGVzIGxvZ2Fyw610bWljYXMgZGUgbGEgcmF6w7NuIGVudHJlIGxhcyBwcm9iYWJpbGlkYWRlcyBkZSDDqXhpdG8gZW50cmUgbGFzIHByb2JhYmlsaWRhZGVzIGRlIGZyYWNhc28gZGViaWRvIGEgcXVlIGVsIGxhZG8gZGUgbGEgaXpxdWllcmRhIGVuIGxhIGVuY3Vlc3RhIGRlIHJlZ3Jlc2nDs24gZXMgbXVsdGlwbGljYWRhIHBvciBlbCB2YWxvciBkZWwgbG9nYXJpdG1vIG5hdHVyYWwgKCJsbiIpLCBkZSBtYW5lcmEgcXVlOiAkbG5cZnJhY3tQKFk9MSl9e1AoMS1ZPTEpfSQKClkgbGEgcmVsYWNpw7NuIGVudHJlICRcZnJhY3tQKFk9MSl9e1AoMS1ZPTEpfSQgY29uc2lzdGUgZW4gdW5hIHJhesOzbiBlbnRyZSBsYXMgcHJvYmFiaWxpZGFkZXMgZGUgw6l4aXRvIChvICRZPTEkKSByZXNwZWN0byBkZSBsYXMgcHJvYmFiaWxpZGFkZXMgZGUgZnJhY2FzbyAobyAkWT0wJCksIHkgYSBlc3RhIHJhesOzbiBkZSBwcm9iYWJpbGlkYWRlcyBzZSBsZSBkZW5vbWluYSBjb21vICJvZGRzIHJhdGlvIi4KCgojIyAyLiBEaXNlw7FvIGRlIGxhIHJlZ3Jlc2nDs24gbG9nw61zdGljYSBzaW1wbGUgZW4gUi4KCkxhIHJlZ3Jlc2nDs24gbG9nw61zdGljYSBlbiBSIGVzIHRyYXRhZGEgY29tbyB1biAibW9kZWxvIGxpbmVhbCBnZW5lcmFsaXphZG8iIChnbG0pLiBFc3RvIHN1cG9uZSBxdWUgZXhpc3RlbiBkaXZlcnNvcyB0aXBvcyBkZSByZWdyZXNpw7NuLCBwb3IgZWplbXBsbyBsb3MgbW9kZWxvcyBsaW5lYWxlcyBjYWxjdWxhZG9zIGNvbiBtw6l0b2RvcyBkZSBtw61uaW1vcyBjdWFkcmFkb3Mgb3JkaW5hbGVzIHkgbG9zIGxvZ8Otc3RpY29zLiBFc3RvcyBvcGVyYW4gZGUgbWFuZXJhIHNpbWlsYXIgcGVybyBhc3VtZW4gY29zYXMgZGlmZXJlbnRlcyBhY2VyY2EgZGUgbGEgZm9ybWEgZGUgZGlzdHJpYnVjacOzbiBkZSBsYSB2YXJpYWJsZSBkZXBlbmRpZW50ZSAoWSkuCk90cm8gbW9kZWxvIGRlIHJlZ3Jlc2nDs24gZGVudHJvIGRlbCDDoW1iaXRvIGRlIGxvcyBnbWwgaW5jbHV5ZW4gYSBsb3MgbW9kZWxvcyBQb2lzc29uIChwYXJhIGRhdG9zIGRlIGNvbnRlbyksIGxvcyBxdWUgcHVlZGVuICJjb3JyZXJzZSIgZW4gUiBkZSBtYW5lcmFzIHNpbWlsYXJlcywgcGVybyBhc3VtZW4gdW5hIGRpc3RyaWJ1Y2nDs24gZGlmZXJlbnRlIHBhcmEgbGEgdmFyaWFibGUgZGUgaW50ZXLDqXMgKFkpLgpUb2RvcyBlc3RvcyBtb2RlbG9zIHNlIHB1ZWRlbiBvcGVyYXIgZGVzZGUgZWwgc2lzdGVtYSBiYXNlIGRlIFIgbWVkaWFudGUgZWwgY29tYW5kbyBgZ2xtKClgIGRlIGxhIG1pc21hIG1hbmVyYSwgc29sbyBzZSByZXF1aWVyZSBlc3BlY2lmaWNhciBjdcOhbCBlcyBlbCB0aXBvIGRlIHZhcmlhYmxlIGRlcGVuZGllbnRlIChZKSBtZWRpYW50ZSBsYSBkZWZpbmljacOzbiBkZWwgdGlwbyBkZSAiZmFtaWxpYSIgZGUgZGlzdHJpYnVjacOzbiwgcXVlIGVzIHVuIGFyZ3VtZW50byBtw6FzIGRlIGRpY2hvIGNvbWFuZG8uIExhICJmYW1pbGlhIiBxdWUgc2UgZXNwZWNpZmljYSBwYXJhIGxvcyBtb2RlbG9zIGRlIHJlZ3Jlc2nDs24gbG9nw61zdGljYSBzZSByZWZpZXJlIHBvciAiYmlub21pYWwiLgoKCiMjIyAyLjEuIFByZXBhcmFjacOzbiBkZSB2YXJpYWJsZXMgcHJldmlvIGEgbGEgcmVncmVzacOzbiBsb2dpdC4KCkEgY29udGludWFjacOzbiBzZSByZWFsaXphcsOhIHVuIG1vZGVsbyBkZSByZWdyZXNpw7NuIGxvZ8Otc3RpY2EgZW4gZWwgcXVlIHNlIGFuYWxpY2UgZWwgZWZlY3RvIGNhdXNhbCBkZSBsYSBlZGFkIHNvYnJlIGxhIGludGVuY2nDs24gZGUgdm90byBwb3IgbGEgY2FuZGlkYXR1cmEgcHJlc2lkZW5jaWFsIGRlIE1PUkVOQSwgZW5jYWJlemFkYSBwb3IgQW5kcsOpcyBNYW51ZWwgTMOzcGV6IE9icmFkb3IsIGVuIE3DqXhpY28gZHVyYW50ZSBsb3MgY29taWNpb3MgZGVsIGHDsW8gZGUgMjAxOC4KClBhcmEgZWxsbyBzZSB1dGlsaXphbiBsb3MgZGF0b3MgZGUgbGEgZW5jdWVzdGEgcHJlIGVsZWN0b3JhbCBlbGFib3JhZGEgcG9yIGxhIGNvbnN1bHRvcsOtYSBCZXJ1bWVuLCBxdWUgc2UgImxldmFudMOzIiBhIGZpbmFsZXMgZGVsIG1lcyBkZSBtYXlvIHkgcHJpbmNpcGlvcyBkZWwgbWVzIGRlIGp1bmlvIGRlIG1pc21vIGHDsW8sIGNhc2kgdW4gbWVzIHByZXZpbyBhIGxhIGpvcm5hZGEgZWxlY3RvcmFsLgoKTGFzIHZhcmlhYmxlcyBxdWUgc2UgcmVjdXBlcmFyb24gcGFyYSBlbCBlamVyY2ljaW8gc29uOgoKLSBZID0gQ2FuZGlkYXRvIGRlIHByZWZlcmVuY2lhLCBxdWUgc2UgbWlkacOzIG1lZGlhbnRlIGxhIHByZWd1bnRhICLCv1BvciBxdWnDqW4gdmEgYSB2b3RhciBlbCBwcmltZXJvIGRlIGp1bGlvIHBhcmEgUHJlc2lkZW50ZSBkZSBsYSByZXDDumJsaWNhPyIsIHkgcXVlIHNlIGNvZGlmaWPDsyBjb24gbGEgZXRpcXVldGE6IFAxXzUuIExhcyBvcGNpb25lcyBkZSByZXNwdWVzdGEgbyB2YWxvcmVzIG9yaWdpbmFsZXMgcG9zaWJsZXMgc29uOiAxLiBSaWNhcmRvIEFuYXlhLCAyLiBKb3PDqSBBbnRvbmlvIE1lYWRlIEt1cmXDsWEsIDMuIEFuZHLDqXMgTWFudWVsIEzDs3BleiBPYnJhZG9yIChBTUxPKSwgNC4gTWFyZ2FyaXRhIFphdmFsYSwgNS4gSmFpbWUgUm9kcsOtZ3VleiBDYWxkZXLDs24gIkVsIEJyb25jbyIsIDYuIE90cm9zLCA3LiBObyB2b3RhcsOhLCA4LiBObyBzYWJlLCA5LiBObyByZXNwb25kacOzIChOUikuCi0gWDEgPSBFZGFkIGRlIGxvcyBlbmN1ZXN0YWRvcywgcXVlIHNlIG1pZGnDsyBjb24gbGEgcHJlZ3VudGEgIsK/Q3XDoW50b3MgYcOxb3MgY3VtcGxpZG9zIHRpZW5lPyIsIHkgcXVlIHNlIGNvZGlmaWPDsyBjb24gbGEgZXRpcXVldGE6IEE0LiBMYXMgcmVzcHVlc3RhcyBmdWVyb24gcmVnaXN0cmFkYXMgY29uIGxhIHVuaWRhZCBkZSBtZWRpZGEgZGUgImHDsW9zIiwgZG9uZGUgbG9zIHZhbG9yZXMgcG9zaWJsZXMgaWJhbiBkZSAxOCBhIDk4IGHDsW9zLCB5IGVsIHZhbG9yIGRlIDk5IGZ1ZSBhc2lnbmFkbyBhIGxvcyBxdWUgbm8gcmVzcG9uZGllcm9uIChOUikuCgpQYXJhIGNvbWVuemFyIGVsIGFuw6FsaXNpcywgc2UgZGViZSByZWFsaXphciB1biBhbsOhbGlzaXMgZXhwbG9yYXRvcmlvIGRlIGxhcyB2YXJpYWJsZXMgcGFyYSwgYXPDrSwgZXZhbHVhciBzaSBzZSBkZWJlbiB0cmFuc2Zvcm1hciB5IGFkYXB0YXJsYXMgYSBsYXMgbmVjZXNpZGFkZXMgZGVsIG1vZGVsbyBkZSByZWdyZXNpw7NuIGxvZ2l0IGJpbm9taWFsLgoKRW4gZWwgY2FzbyBkZSBsYSB2YXJpYWJsZSBZLCBzZSBzb2xpY2l0YSB1bmEgdGFibGEgZGUgZnJlY3VlbmNpYXMgcGFyYSBjb25vY2VyIHN1IGRpc3RyaWJ1Y2nDs246CgpgYGB7cn0Kb3B0aW9ucyhzY2lwZW4gPSA5OTkpICNTb2xpY2l0YSBxdWUgbG9zIHZhbG9yZXMgZW4gcHJvcG9yY2lvbmVzIHNlIGFycm9qZW4gZW4gZGVjaW1hbGVzCmZyZXEoZGF0YV9iZXIgJCBQMV81KSAjdGFibGEgZGUgZnJlY3VlbmNpYXMgY29uIGxhIGxpYnJlcsOtYSAiZGVzY3IiCmBgYAoKQXF1w60gc2UgcHVlZGUgdmVyIHF1ZSBlbiBlbCBkYXRhIGZyYW1lLCBsYSB2YXJpYWJsZSBQMV81IGN1ZW50YSBjb24gMTIgY2F0ZWdvcsOtYXMsIHBvciBsbyBxdWUgc2UgZGViZSBtYW5pcHVsYXIgcGFyYSBsb2dyYXIgdmFyaW9zIGFqdXN0ZXMgcXVlIHBlcm1pdGFuIHJlY3VwZXJhcmxhIGVuIGVsIG1vZGVsbyBkZSByZWdyZXNpw7NuLgoKUHJpbWVybyBzZSBkZWJlbiBhc2lnbmFyIGxvcyB2YWxvcmVzICJwZXJkaWRvcyIgKE5BKSwgcGFyYSBsbyBxdWUgc2UgaWRlbnRpZmljw7MgKGEgcGFydGlyIGRlbCBsaWJybyBkZSBjw7NkaWdvcyBkZSBsYSBlbmN1ZXN0YSlbbGlicm8gZGUgY8OzZGlnb3NdKGh0dHA6Ly9yZXBvc2l0b3Jpb2RvY3VtZW50YWwuaW5lLm14L3htbHVpL2JpdHN0cmVhbS9oYW5kbGUvMTIzNDU2Nzg5Lzk2NDU3LzEtRXN0dWRpby1CZXJ1bWVuLTMwbWF5by02anVuaW8uUERGP3NlcXVlbmNlPTEmaXNBbGxvd2VkPXkpIHF1ZSBsb3MgdmFsb3JlcyA4LCA5LCAxMCwgMTEgeSA5OSBwdWVkZW4gc2VyIHRyYW5zZm9ybWFkb3MgYSBOQS4gUGFyYSBlbGxvIHNlIHV0aWxpemFyw6EgZWwgY29tYW5kbyBgcmVwbGFjZV93aXRoX25hKClgLCBxdWUgZXMgcGFydGUgZGUgbGEgbGlicmVyw61hIGBuYW5pYXIoKWAgW3DDoWdpbmEgd2ViXSgjaHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvd2ViL3BhY2thZ2VzL25hbmlhci92aWduZXR0ZXMvcmVwbGFjZS13aXRoLW5hLmh0bWwpLCB5IHF1ZSBzZSBwdWVkZSBpbnRlZ3JhciBlbiBsYSBlc3RydWN0dXJhIGRlIHJlZGFjY2nDs24gZGUgYGRwbHlyKClgIGRlIGxhIHNpZ3VpZW50ZSBtYW5lcmE6CgpgYGB7ciBwZXJkaWRvc19ZfQpkYXRhX2JlciA8LSBkYXRhX2JlciAlPiUKICByZXBsYWNlX3dpdGhfbmEocmVwbGFjZSA9IGxpc3QoUDFfNSA9IGMoNywgOCwgOSwgMTAsIDExLCA5OSkpKSAjYXNpZ25hY2nDs24gZGUgTkEKZnJlcShkYXRhX2JlciAkIFAxXzUpICN0YWJsYSBkZSBmcmVjdWVuY2lhcyAKYGBgCgpBcXXDrSBzZSBoYW4gcmVkdWNpZG8gbGFzIGNhdGVnb3LDrWFzLCBwZXJvIGHDum4gZXMgbmVjZXNhcmlvIHJlZHVjaXJsYXMgbcOhcyBwYXJhIHRyYW5zZm9ybWFyIGEgbGEgdmFyaWFibGUgeSBjb252ZXJ0aXJsYSBlbiB1bmEgZGUgY29ydGUgImRpY290w7NtaWNhIiAoMiBjYXRlZ29yw61hcyBvIHZhbG9yZXMgcG9zaWJsZXMgc29sYW1lbnRlKS4gUGFyYSBlbGxvLCBhIGNvbnRpbnVhY2nDs24sIHNlIHRvbWFyw6EgYSBsYSBjYW5kaWRhdHVyYSBkZSBBTUxPIChjYXRlZ29yw61hcyA9IDMpIGNvbW8gbGEgcmVmZXJlbmNpYSB5IGxhcyBjYW5kaWRhdHVyYXMgcmVzdGFudGVzIHNlcsOhbiBhZ3J1cGFkYXMgZW4gdW5hIGNhdGVnb3LDrWEgcmVzaWR1YWwgKG90cm9zID0gMSwgMiwgNCwgNSwgNikuCgpQYXJhIGVsbG8gc2UgdHJhbnNmb3JtYXLDoSBkZSBudWV2byBsYSB2YXJpYWJsZSBQMV81IHkgc2UgY29uc3RydXllIHVuYSB2YXJpYWJsZSBudWV2YSBjb24gZm9ybWF0byAqZHVtbXkqOiBQMV81ciBlbiBsYSBxdWUgbGEgY2F0ZWdvcsOtYSAzIChBTUxPKSBhZG9wdGFyw6EgZWwgdmFsb3IgZGUgMSwgeSBlbCByZXN0byBkZSBsYXMgcmVzcHVlc3RhcyBzZSByZWNvZGlmaWNhbiBlbiAwOgoKYGBge3IgWV9kaWNvdG9taWNhfQpkYXRhX2JlciA8LSBkYXRhX2JlciAlPiUKICBtdXRhdGUoUDFfNXIgPSBpZmVsc2UoUDFfNSA9PSAzLCAxLCAwKSkKZnJlcShkYXRhX2JlciAkIFAxXzVyKQpgYGAKCkRlIGVzdGEgbWFuZXJhIHF1ZWRhIGxpc3RhIGxhIHZhcmlhYmxlIFkgcGFyYSBpbmNsdWlyc2UgZW4gZWwgbW9kZWxvIGRlIHJlZ3Jlc2nDs24gbG9naXQuCgpBaG9yYSBlcyBpbXBvcnRhbnRlIHJldmlzYXIgbGEgZGlzdHJpYnVjacOzbiBkZSBsYSB2YXJpYWJsZSBpbmRlcGVuZGllbnRlIChYKSwgZWRhZCBkZSBsb3MgZW5jdWVzdGFkb3MgKGNvZGlmaWNhZGEgY29uIGxhIGNsYXZlIEE0KSwgcGFyYSBpZGVudGlmaWNhciBzaSByZXF1aWVyZSB0cmFuc2Zvcm1hY2nDs24gcHJldmlhIGFsIGFuw6FsaXNpcyBkZSByZWdyZXNpw7NuLiBQYXJhIGVsbG8gc2UgYW5hbGl6YSwgcHJpbWVybywgc3UgZGlzdHJpYnVjacOzbjoKCmBgYHtyIHN1bW1hcnlfZWRhZH0Kc3VtbWFyeShkYXRhX2JlciAkIEE0KSAjIyByZXN1bWVuIGRlIGVkYWQgZGVsIGVuY3Vlc3RhZG8KYGBgCgpFc3RlIHJlc3VtZW4gbXVlc3RyYSBxdWUgbGEgZWRhZCBtw61uaW1hIGVzIGRlIDE4IGHDsW9zIHkgbGEgbcOheGltYSBlcyBkZSA5OS4gUGVybyBlbiBlbCBsaWJybyBkZSBjw7NkaWdvcyAoZW5jdWVzdGEpIHNlIHJlY29ub2NlIHF1ZSBsb3MgdmFsb3JlcyBkZSA5OSBmdWVyb24gYXNpZ25hZG9zIGEgbG9zIGNhc29zIHF1ZSBObyBSZXNwb25kaWVyb24gKE5SKSwgcG9yIGxvIHF1ZSBzZSBkZWJlbiB0cmF0YXIgY29tbyBjYXNvcyAicGVyZGlkb3MiLgoKUG9yIGVsbG8gZGViZW1vcyByZXZpc2FyLCBkZSBudWV2bywgbGEgZGlzdHJpYnVjacOzbiBkZSBsYXMgZWRhZGVzIHBlcm8gYWhvcmEgc2UgZGViZW4gZXhjbHVpciBsb3MgY2Fzb3MgY29uIHZhbG9yZXMgZGUgOTkuIEEgY29udGludWFjacOzbiBzZSBzb2xpY2l0YW4gbG9zIHZhbG9yZXMgbcOtbmltb3MgeSBtw6F4aW1vcyBleGNsdXllbmRvIGFsIDk5OgoKYGBge3IgZWRhZF9maWx0cm99CmRhdGFfYmVyICU+JQogIGZpbHRlcihBNCA8IDk5KSAlPiUKICBzdW1tYXJpc2UobcOtbiA9IG1pbihBNCksCiAgICAgICAgICAgIG1heCA9IG1heChBNCkpCmBgYAoKQWhvcmEgc2Ugc2FiZSBxdWUgbGEgZWRhZCBtw61uaW1hIHBlcm1hbmVjZSBzaW4gY2FtYmlvcyBtaWVudHJhcyBxdWUgbGEgZWRhZCBtw6F4aW1hIGRlIGxvcyBlbmN1ZXN0YWRvcyBmdWUgZGUgOTMsIGRlIGVzdGEgbWFuZXJhIHBvZGVtb3MgYXNpZ25hciBsb3MgdmFsb3JlcyBwZXJkaWRvcyBhIGxvcyBjYXNvcyBxdWUgc2UgcmVnaXN0cmFyb24gY29uIHVuYSBlZGFkIGNvbiB2YWxvciBkZSA5OS4KCmBgYHtyIGVkYWRfTkF9CmRhdGFfYmVyIDwtIGRhdGFfYmVyICU+JQogIHJlcGxhY2Vfd2l0aF9uYShyZXBsYWNlID0gbGlzdChBNCA9IDk5KSkKc3VtbWFyeShkYXRhX2JlciAkIEE0KQpgYGAKCkFob3JhIHlhIHRlbmVtb3MgbGlzdGFzIGxhcyB2YXJpYWJsZXMgcGFyYSBpbmNsdWlybGFzIGVuIGVsIG1vZGVsbyBkZSByZWdyZXNpw7NuIGxvZ2l0LgoKCiMjIyAyLjIuIENvbnN0cnVjY2nDs24gZGVsIG1vZGVsbyBkZSByZWdyZXNpw7NuIGxvZ2l0LgoKQSBwYXJ0aXIgZGVsIHNjcmlwdCBgZ2xtKClgLCB5IGNvbiBsYSBlc3BlY2lmaWNhY2nDs24gZGUgbGEgZmFtaWxpYSBiaW5vbWlhbCBkZW50cm8gZGUgbG9zIGFyZ3VtZW50b3MsIGVzIHF1ZSBzZSBwdWVkZSBlbGFib3JhIGVsIG1vZGVsbyBkZSByZWdyZXNpw7NuIGxvZ2l0IGJpbm9taW5hbCwgZG9uZGUgWSA9IGNhbmRpZGF0byBkZSBwcmVmZXJlbmNpYSAoZG9uZGUgUDFfNXIgPSBbQU1MTywgb3Ryb3NdKSB5IFggPSBlZGFkIChkb25kZSBBNCA9IFsxOCwgOTNdKS4KCmBgYCB7ciByZWdfbG9naXR9CmxvZ2l0X2NhbmQxIDwtIGdsbShQMV81ciB+IEE0LCAjUmVsYWNpw7NuIGVudHJlIHZhcmlhYmxlcyBWRCB5IFZJCiAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YV9iZXIsICNkYXRhIGZyYW1lIAogICAgICAgICAgICAgICAgICAgZmFtaWx5ID0gImJpbm9taWFsIikgI2ZhbWlsaWEgZGVsIG1vZGVsbyBkZSByZWdyZXNpw7NuCnN1bW1hcnkobG9naXRfY2FuZDEpICNhcnJvamEgbG9zIHJlc3VsdGFkb3MgZGVsIG1vZGVsbwpgYGAKCkxvcyByZXN1bHRhZG9zIHNvbiBkZXNwbGVnYWRvcywgZW4gc3UgbWF5b3LDrWEsIHBhcmVjaWRvcyBhIGxvIHF1ZSBzZSBtdWVzdHJhbiBlbiBsb3MgbW9kZWxvcyBsaW5lYWxlcyBkZSBtw61uaW1vcyBjdWFkcmFkb3Mgb3JkaW5hcmlvcy4gU2luIGVtYmFyZ28sIGVuIGVsIGRlc3BsaWVndWUgZGUgbG9zIHJlc3VsdGFkb3MgZGVsIG1vZGVsbyBsb2fDrXN0aWNvIHNlIGRlYmUgcmVhbGl6YXIgdW4gdHJhYmFqbyBhZGljaW9uYWwgZGVyaXZhZG8gZGUgcXVlIGxvcyB2YWxvcmVzIGRlIGxvcyBjb2VmaWNpZW50ZXMgZGUgcmVncmVzacOzbiAoYSB5IGIpIHNlIHByZXNlbnRhbiBlbiB1bmlkYWRlcyBtdWx0aXBsaWNhZGFzIHBvciBzdSBsb2dhcml0bW8gbmF0dXJhbC4gCgpFc3RvIGVzLCBhIHBhcnRpciBkZSBsb3MgdmFsb3JlcyBhcnJvamFkb3MgZW4gZWwgcmVzdW1lbiBwYXJhIGxvcyBjb2VmaWNpZW50ZXMgYSB5IGIsIHNlIHB1ZWRlIGNvbnN0cnVpciBsYSBzaWd1aWVudGUgZWN1YWNpw7NuIGRlIHJlZ3Jlc2nDs24gbG9naXQ6ICQkbG5cZnJhY3tQKFlbPTFdKX17UCgxLVlbPTEpXX09IDAuMzMxMDM5ICsgKC0wLjAwNDM1NyAqWF8xKSQkCgpTaW4gZW1iYXJnbywgcGFyYSBpbnRlcnByZXRhciBsb3MgdmFsb3JlcyBkZSBsb3MgY29lZmljaWVudGVzLCBwcmltZXJvIHNlIGRlYmVuIHRyYW5zZm9ybWFyIHN1cyB2YWxvcmVzIHBhcmEgYW51bGFyIGVsIGxvZ2FyaXRtbyBkZWwgbGFkbyBpenF1aWVyZG8gZGUgbGEgZWN1YWNpw7NuIHksIGFzw60sIG9idGVuZXIgZWwgdmFsb3IgZGUgbGEgKnJhesOzbiBkZSBwcm9iYWJpbGlkYWRlcyogZGUgWSAoJFxmcmFje1AoWT0xKX17UCgxLVk9MSl9JCkuIERpY2hhIHRyYW5zZm9ybWFjacOzbiByZXF1aWVyZSBxdWUgbG9zIHZhbG9yZXMgdWJpY2Fkb3MgZW4gZWwgbGFkbyBkZXJlY2hvIGRlIGxhIGVjdWFjacOzbiBzZWFuIGVsZXZhZG9zIHBvciBlbCBjb2VmaWNpZW50ZSAiZSIgLWxhIGNvbnN0YW50ZSBkZSBFdWxlci0tLgoKRXN0YSB0cmFuc2Zvcm1hY2nDs24gc2UgcHVlZGUgcmVhbGl6YXIgZGUgbGEgc2lndWllbnRlIG1hbmVyYTogCgpgYGB7ciBleHBfY29lZn0KZXhwKGNvZWZmaWNpZW50cyhsb2dpdF9jYW5kMSkpCmBgYAoKTGEgcmF6w7NuIGRlIHByb2JhYmlsaWRhZGVzIG5vcyBkaWNlIGN1YWwgZXMgbGEgcmVsYWNpw7NuIHF1ZSBleGlzdGUgZW50cmUgbGEgcHJvYmFiaWxpZGFkIGRlIChZID0gMSkgcmVzcGVjdG8gZGUgbGEgcHJvYmFiaWxpZGFkIGRlbCB2YWxvciBjb21wbGVtZW50YXJpbyBkZSBZIChZID0gMCkuIEVzdG8gbm9zIGluZGljYSAiY3XDoW50YXMgdmVjZXMiIGVzIG1heW9yIGVsIHZhbG9yIGRlbCBudW1lcmFkb3IgcmVzcGVjdG8gZGVsIGRlbm9taW5hZG9yIGVuIGxhIGVjdWFjacOzbi4gUG9yIGVqZW1wbG8sIHNpIGxhIFAoWSA9IDEpIGVzIGRlIDAuNSwgeSBsYSBQKFkgPSAwKSBlcyBkZSAwLjUgKHNpbXVsYW5kbyB1biBsYW56YW1pZW5kbyBkZSBtb25lZGEpLCBkb25kZSBhbWJhcyBwcm9iYWJpbGlkYWRlcyBzb24gaWd1YWxlcywgZW50b25jZXMgbGEgKnJhesOzbiBkZSBwcm9iYWJpbGlkYWRlcyogZXMgZGUgJFxmcmFje1AoWT0xKX17UCgxLVk9MSl9ID0gXGZyYWN7MC41fXswLjV9PSAxJC4gRGViaWRvIGEgcXVlIGFtYmFzIHByb2JhYmlsaWRhZGVzIHNvbiBpZ3VhbGVzICgwLjUpLCBlbnRvbmNlcyBzdSAqcmF6w7NuKiBlcyBpZ3VhbCBhIDEuClNpIGxhIHByb2JhYmlsaWRhZCBkZWwgbnVtZXJhZG9yIGZ1ZXJhIG1heW9yIHF1ZSBsYSBwcm9iYWJpbGlkYWQgZW4gZWwgZGVub21pbmFkb3IsIGVudG9uY2VzIGxhIHJhesOzbiBkZSBwcm9iYWJpbGlkYWRlcyBhZG9wdGFyw61hIHVuIHZhbG9yIG1heW9yIGEgMS4gWSBzaSBsYSBwcm9iYWJpbGlkYWQgZGVsIG51bWVyYWRvciBmdWVyYSBtZW5vciBxdWUgbGEgcHJvYmFiaWxpZGFkIGVuIGVsIGRlbm9taW5hZG9yLCBlbnRvbmNlcyBsYSByYXrDs24gZGUgcHJvYmFiaWxpZGFkZXMgYWRvcHRhcsOtYSB1biB2YWxvciBwb3IgZGViYWpvIGRlIDEuCgpQYXJhIGVsIGNhc28gYW5hbGl6YWRvLCBlbCB2YWxvciBkZWwgY29lZmljaWVudGUgYiBlcyBkZSAwLjk5IHBvciBsbyBxdWUgaW5kaWNhIHF1ZSBoYXkgdW4gZWZlY3RvIGxpZ2VyYW1lbnRlIHBvciBkZWJham8gZGVsIHZhbG9yIGRlIHJlZmVyZW5jaWEgZGUgMS4KClVuYSBtYW5lcmEgZGUgaW50ZXJwcmV0YXIgZXN0ZSB2YWxvciBwbGFudGVhIHF1ZSAic2UgcHVlZGUgYWZpcm1hciBxdWUgcG9yIGNhZGEgaW5jcmVtZW50byBkZSB1bmEgdW5pZGFkIGVuIGxhIHZhcmlhYmxlIEVEQUQgKFgpLCBsYSBwcm9iYWJpbGlkYWQgZGUgZW5jb250cmFyIGEgdW5hIHBlcnNvbmEgcXVlIGFmaXJtw7MgcXVlIHZvdGFyw6EgcG9yIEFNTE8gYSBsYSBlbiBsYSBlbmN1ZXN0YSAoWSkgZXMgMC4wMSAoZXN0byBzZSBkZXJpdmEgZGUgcmVzdGFyIDEgLSAwLjk5KSB2ZWNlcyBtZW5vciBxdWUgdW5hIHBlcnNvbmEgcXVlIHZvdGFyw6EgcG9yIG90cm9zIGNhbmRpZGF0b3MiLgoKU2kgc2UgZGVzZWEsIHNlIHB1ZWRlIHJlYWxpemFyIHVuYSB0cmFuc2Zvcm1hY2nDs24gYWRpY2lvbmFsIGEgbG9zIHZhbG9yZXMgZGUgbG9zICpvZGRzIHJhdGlvKiBwYXJhLCBhc8OtLCBpbnRlcnByZXRhcmxvcyBkZSBtYW5lcmEgbGl0ZXJhbC4gUG9yIGVqZW1wbG8sIHNlIHB1ZWRlIHRvbWFyIGVsIHZhbG9yIGRlIGxvcyAqb2RkcyByYXRpbyogeSByZXN0YWxlIDEgcGFyYSwgZGVzcHXDqXMsIG11bHRpcGxpY2FybG8gcG9yIDEwMCB5LCBkZSBlc2EgbWFuZXJhLCBvYnRlbmVyIGVsIHZhbG9yIGVuIHVuaWRhZGVzIHBvcmNlbnR1YWxlcyBkZWwgY2FtYmlvIGVuIGxhICpyYXrDs24gZGUgcHJvYmFiaWxpZGFkZXMqIHBvciBjYWRhIGluY3JlbWVudG8gZGUgdW5hIHVuaWRhZCBlbiBsYSB2YXJpYWJsZSBpbmRlcGVuZGllbnRlIChYKS4KCmBgYHtyIHByY19jb2VmfQooZXhwKGNvZWZmaWNpZW50cyhsb2dpdF9jYW5kMSkpLTEpKjEwMApgYGAKCkxhIG1hbmVyYSBkZSBpbnRlcnByZXRhciBkaWNob3MgY29lZmljaWVudGVzIGVzOgpgQTRgPSAwLjk5OiBQb3IgY2FkYSBpbmNyZW1lbnRvIGVuIDEgdW5pZGFkIGVuIGxhIGVkYWQgKGHDsW9zKSBkZSBsb3MgZW5jdWVzdGFkb3MsIHNlIGVzcGVyYSBvYnNlcnZhciB1biBkZWNyZW1lbnRvIGRlIDAuNDMlIGVuIGxhIHByb2JhYmlsaWRhZCBkZSB2b3RhciBwb3IgQU1MTy4gWSBjb24gdW4gdmFsb3IgZGUgdW5pZGFkZXMgeiA9IC0zLjE0NSB5IHVuIHAtdmFsdWUgPSAwLjAwMTY2LCBlc3RlIGNvZWZpY2llbnRlIHNlIHB1ZWRlIGNvbnNpZGVyYXIgZXN0YWTDrXN0aWNhbWVudGUgc2lnbmlmaWNhdGl2byBjb24gdW4gbml2ZWwgZGUgc2lnbmlmaWNhbmNpYSAoYWxmYSkgZGUgMC4wNS4KCgojIyMgMi4zLiBDb25zdHJ1Y2Npw7NuIGRlbCBtb2RlbG8gZGUgcmVncmVzacOzbiBsb2dpdCBtw7psdGlwbGUuCgpMb3MgbW9kZWxvcyBkZSByZWdyZXNpw7NuIHB1ZWRlbiBjb21wbGVqaXphcnNlIGluY2x1eWVuZG8gdW5hIG1heW9yIGNhbnRpZGFkIGRlIHZhcmlhYmxlcyBpbmRlcGVuZGllbnRlcyAoJFhpJCksIHkgZXN0byBwZXJtaXRpcsOhLCB0YW1iacOpbiwgZXZhbHVhciBlbCBlZmVjdG8gZGUgY2FkYSB1bmEgZGUgZXNhcyB2YXJpYWJsZXMgYSBsYSB2ZXogcXVlIHNlIHB1ZWRlIGNvbnRyb2xhciBlbCBlZmVjdG8gc2ltdWx0w6FuZW8gZGVsIHJlc3RvICgkWF97aS0xfSQpIHNvYnJlIGxlIGNvbXBvcnRhbWllbnRvIGRlIGxhIHZhcmlhYmxlIGRlcGVuZGllbnRlICgkWSQpLgoKU2lndWllbmRvIGNvbiBlbCBlamVtcGxvLCBzZSBpbmNsdWlyw6EgdW5hIHZhcmlhYmxlIGluZGVwZW5kaWVudGUgYWRpY2lvbmFsICgkWDIkKSBkZSBjb3J0ZSBjYXRlZ8OzcmljYSBwYXJhIGNvbnRyb2xhciBlbCBlZmVjdG8gZGUgbGEgZWRhZCBzb2JyZSBsYSBpbnRlbmNpw7NuIGRlIHZvdG8gZGUgbG9zIGVuY3Vlc3RhZG9zLgoKLSAoWDIpIFBhcmEgZWxsbyBzZSByZXRvbWFyw6EgbGEgcHJlZ3VudGEgKFAyXzZfMSkgbGEgcmVsZXZhbmNpYSBkZWwgdGVtYSBkZSBsYSBjb3JydXBjacOzbiBwYXJhIGxhIHZpZGEgbmFjaW9uYWwsIHF1ZSBzZSByZWRhY3TDsyBkZSBsYSBmb3JtYTogIkRlIGxvcyBzaWd1aWVudGVzIHRlbWFzIHF1ZSBsZSB2b3kgYSBtZW5jaW9uYXIgWzEuIENvbWJhdGlyIGEgbGEgY29ycnVwY2nDs25dLCDCv2N1w6FsZXMgY29uc2lkZXJhIGNvbW8gbXV5IGltcG9ydGFudGUsIGltcG9ydGFudGUsIHBvY28gaW1wb3J0YW50ZSB5IG5hZGEgaW1wb3J0YW50ZSBwYXJhIGVsZWdpciBhIHVuIGNhbmRpZGF0bz8iLiAKClBhcmEgY29ub2NlciBsYSBkaXN0cmlidWNpw7NuIGRlIGxhIHByZWd1bnRhIFAxXzMsIHNlIHNvbGljaXRhIHVuYSB0YWJsYSBkZSBmcmVjdWVuY2lhczoKCmBgYHtyIGZyZXFfZXZhbHVhY30KZnJlcShkYXRhX2JlciAkIFAyXzZfMSkKYGBgCgpTZSBpZGVudGlmaWNhIHF1ZSBsYSBjYXRlZ29yw61hIG3DoXMgZnJlY3VlbnRlIGVzIGxhIHJlc3B1ZXN0YSBjb24gdmFsb3IgMSAocXVlIHNpZ25pZmljYSAibXV5IGltcG9ydGFudGUiKSwgbWllbnRyYXMgcXVlIGxlIHNpZ3VlIGxhIGNhdGVnb3LDrWEgY29kaWZpY2FkYSBjb24gdmFsb3IgZGUgMiAoImltcG9ydGFudGUiKSwgeSBsZSBzaWd1ZSBsYSBjYXRlZ29yw61hIDMgKCJwb2NvIGltcG9ydGFudGUpIHkgcG9yIMO6bHRpbW8gc2UgdWJpY8OzIGxhIGNhdGVnb3LDrWEgY29kaWZpY2FkYSBjb24gZWwgdmFsb3IgZGUgNCAoIm5hZGEgaW1wb3J0YW50ZSIpLiBBc2ltaXNtbyBzZSBvYnNlcnZhbiBsYSBwcmVzZW5jaWEgZGUgbGFzIGNhdGVnb3LDrWFzIDggKCJubyBzYWJlIikgeSA5ICgibm8gcmVzcG9uZGnDsyIpLiBFc3RhcyDDumx0aW1hcyBzZXLDoW4gdHJhdGFkYXMgY29tbyB2YWxvcmVzIHBlcmRpZG9zLCBkZSBsYSBzaWd1aWVudGUgbWFuZXJhOiAKCmBgYHtyIHJlY29kaWZfZXZhbHVhY30KZGF0YV9iZXIgPC0gZGF0YV9iZXIgJT4lCiAgcmVwbGFjZV93aXRoX25hKHJlcGxhY2UgPSBsaXN0KFAyXzZfMSA9IGMoOCwgOSkpKQpmcmVxKGRhdGFfYmVyICQgUDJfNl8xKQpgYGAKClVuYSB2ZXogdHJhdGFkYSBsYSB2YXJpYWJsZSwgbGEgdmFyaWFibGUgUDJfNl8xLCBpbnRlZ3JhZGEgcG9yIDQgY2F0ZWdvcsOtYXMsIHNlIHB1ZWRlIGluY2x1aXIgZW4gZWwgbW9kZWxvIGRlIHJlZ3Jlc2nDs24gbG9naXQgY29tbyBYMiBwYXJhLCBhc8OtLCBjb25zdHJ1aXIgZWwgc2lndWllbnRlIG1vZGVsbzogJCRsblxmcmFje1AoWVs9MV0pfXtQKDEtWVs9MSldfT0gQl8wICsgQl8xICogWF8xICsgQl8yICogWDIkJC4KCgpMYSBtYW5lcmEgZGUgY29uc3RydWlyIGVsIG1vZGVsbyBlbiBSIGVzIGxhIHNpZ3VpZW50ZToKCmBgYHtyIGxvZ2l0X2Jpbm9tX211bHR9CmxvZ2l0X2NhbmQyIDwtIGdsbShQMV81ciB+IEE0ICsgYXMuZmFjdG9yKFAyXzZfMSksICNSZWxhY2nDs24gZW50cmUgdmFyaWFibGVzIFZEIHkgVkktMSB5IFZJLTIKICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhX2JlciwgI2RhdGEgZnJhbWUgCiAgICAgICAgICAgICAgICAgICBmYW1pbHkgPSAiYmlub21pYWwiKSAjZmFtaWxpYSBkZWwgbW9kZWxvIGRlIHJlZ3Jlc2nDs24Kc3VtbWFyeShsb2dpdF9jYW5kMikgI2Fycm9qYSBsb3MgcmVzdWx0YWRvcyBkZWwgbW9kZWxvCmBgYAoKQWwgcmV2aXNhciBsb3MgdmFsb3JlcyBkZSBsb3MgY29lZmljaWVudGVzIGRlIHJlZ3Jlc2nDs24gc2Ugb2JzZXJ2YSBxdWUgc2UgYXJyb2phbiA0IHZhbG9yZXMgZGUgKmJldGEqIHBhcmEgc29sbyAyIHZhcmlhYmxlcyBpbmNsdWlkYXMgZW4gZWwgbW9kZWxvIChYMSA9IEE0LCBYMiA9IFAyXzZfMSkuIEVuIGVsIGNhc28gZGUgbGEgdmFyaWFibGUgQTQsIGRlYmlkbyBhIHNlciBkZSBjb3J0ZSBjb250aW51YSwgZWwgbW9kZWxvIGRlIHJlZ3Jlc2nDs24gbGUgY2FsY3VsYSB1biB2YWxvciBkZSAqYmV0YSogKGIxID0gLTAuMDA0Mjg3KSwgbWllbnRyYXMgcXVlIGVuIGVsIGNhc28gZGUgbGEgdmFyaWFibGUgWDIgc2UgY2FsY3VsYXJvbiAzIHZhbG9yZXMgZGUgKmJldGEqIGRlYmlkbyBhIHF1ZSDDqXN0YSBlc3TDoSBpbnRlZ3JhZGEgcG9yIDQgY2F0ZWdvcsOtYXMsIHZhbG9yZXMgbyBhdHJpYnV0b3MuIEVzdG8gbW9kaWZpY2EgYSBsYSBlY3VhY2nDs24gcHJldmlhIHBhcmEgcXVlZGFyIGRlIGxhIHNpZ3VpZW50ZSBtYW5lcmE6ICQkbG5cZnJhY3tQKFlbPTFdKX17UCgxLVlbPTEpXX09IGJfMCArIGJfMSAqIFhfMSArIGJfMiAqIFhfMiArIGJfMyAqIFhfMyArIGJfNCAqIFhfNCQkLgoKTG9zIGNvZWZpY2llbnRlcyBxdWUgc2UgcmVwb3J0YW4gcGFyYSBsYSB2YXJpYWJsZSBQMl82XzIgc2UgcmVmaWVyZW4gYSBsYSBjb21wYXJhY2nDs24gZGUgY2FkYSB1bmEgZGUgbGFzIGNhdGVnb3LDrWFzIGNhbGN1bGFkYXMgKGVzdG8gc2UgaW5kaWNhIGNvbiBlbCBuw7ptZXJvIGFsIGZpbmFsIGRlIGxhIHZhcmlhYmxlIGVuIGxhIHRhYmxhIGRlIGNvZWZpY2llbnRlcykgY29uIHJlc3BlY3RvIGEgdW5hIGNhdGVnb3LDrWEgZGUgcmVmZXJlbmNpYToKMS4gRWwgY29lZmljaWVudGUgJGIyJCBzZSByZWZpZXJlIGFsIGVmZWN0byBxdWUgZWplcmNlIGxhIGNhdGVnb3LDrWEgMiBlbiBjb21wYXJhY2nDs24gZGVsIGVmZWN0byBkZSBsYSBjYXRlZ29yw61hIDEgKHJlZmVyZW5jaWEpOwoyLiBFbCBjb2VmaWNpZW50ZSAkYjMkIHNlIHJlZmllcmUgYWwgZWZlY3RvIHF1ZSBlamVyY2UgbGEgY2F0ZWdvcsOtYSAzIGVuIGNvbXBhcmFjacOzbiBkZWwgZWZlY3RvIGRlIGxhIGNhdGVnb3LDrWEgMSAocmVmZXJlbmNpYSk7CjMuIEVsIGNvZWZpY2llbnRlICRiNCQgc2UgcmVmaWVyZSBhbCBlZmVjdG8gcXVlIGVqZXJjZSBsYSBjYXRlZ29yw61hIDQgZW4gY29tcGFyYWNpw7NuIGRlbCBlZmVjdG8gZGUgbGEgY2F0ZWdvcsOtYSAxIChyZWZlcmVuY2lhKS4KClBhcmEgaW50ZXJwcmV0YXIgbG9zIHZhbG9yZXMgZGUgbG9zIGNvZWZpY2llbnRlcywgc2UgZWxldmFuIGEgbGEgJGUkIGxvcyB2YWxvcmVzIGRlIGxvcyBjb2VmaWNpZW50ZXMgZGUgcmVncmVzacOzbiBwYXJhIG9idGVuZXIgc3VzIHZhbG9yZXMgZGUgKnJhesOzbiBkZSBwcm9iYWJpbGlkYWRlcyAob2RkcyByYXRpbykqLgoKYGBge3IgZXhwX2NvZWZfbXVsdH0KY29lZiA8LSBjb2VmZmljaWVudHMobG9naXRfY2FuZDIpICNsb3MgdmFsb3JlcyBkZSBsb3MgY29lZmljaWVudGVzIHNlIGd1YXJkYW4gY29tbyBvYmpldG8KZXhwKGNvZWYpICNsb3MgdmFsb3JlcyBkZSBsb3MgY29lZmljaWVudGVzIHNlIGVsZXZhbiBhIGxhIHBvdGVuY2lhICJlIgpgYGAKCkFkZW1tw6FzIHNlIHB1ZWRlIGNhbGN1bGFyIGVsIGNhbWJpbyBwb3JjZW50dWFsIGRlIGxhcyByYXpvbmVzIGRlIHByb2JhYmlsaWRhZCBwb3IgZWwgaW5jcmVtZW50byBlbiB1bmEgdW5pZGFkIGVuIGxhIHZhcmlhYmxlIGluZGVwZW5kaWVudGUuIAoKYGBge3IgcHJjdF9jb2VmX211bHR9CihleHAoY29lZikgLSAxKSAqIDEwMApgYGAKCkxhIG1hbmVyYSBkZSBpbnRlcnByZXRhciBsb3MgdmFsb3JlcyBkZSBsb3MgY29lZmljaWVudGVzOgoKMS4gYEE0YD0gMC45OTU6IFBvciBjYWRhIGluY3JlbWVudG8gZW4gMSB1bmlkYWQgZW4gbGEgZWRhZCAoYcOxb3MpIGRlIGxvcyBlbmN1ZXN0YWRvcywgc2UgZXNwZXJhIG9ic2VydmFyIHVuIGRlY3JlbWVudG8gZGUgMC40MyUgZW4gbGEgcHJvYmFiaWxpZGFkIGRlIHZvdGFyIHBvciBBTUxPLiBZIGNvbiB1biB2YWxvciBkZSB1bmlkYWRlcyB6ID0gLTMuMDgxIHkgdW4gcC12YWx1ZSA9IDAuMDAyMDYsIGVzdGUgY29lZmljaWVudGUgc2UgcHVlZGUgY29uc2lkZXJhciBlc3RhZMOtc3RpY2FtZW50ZSBzaWduaWZpY2F0aXZvIGNvbiB1biBuaXZlbCBkZSBzaWduaWZpY2FuY2lhIChhbGZhKSBkZSAwLjA1LgoyLiBgUDJfNl8xMmA9IDAuOTM5OiBMYXMgcGVyc29uYXMgcXVlIGNvbnNpZGVyYW4gcXVlIGNvbWJhdGlyIGEgbGEgY29ycnVwY2nDs24gZXMgImltcG9ydGFudGUiIChjYXRlZ29yw61hIDIpLCBjb21wYXJhZG9zIGNvbiBsYXMgcGVyc29uYXMgcXVlIGNvbnNpZGVyYW4gcXVlIGVzICJtdXkgaW1wb3J0YW50ZSIgKGNhdGVnb3LDrWEgMSwgZGUgcmVmZXJlbmNpYSksIGVzdMOhbiBhc29jaWFkb3MgY29uIHVuIGRlY3JlbWVudG8gZGUgNi4wMiUgZW4gbGEgcmF6w7NuIGRlIHByb2JhYmlsaWRhZGVzIGRlIHZvdGFyIHBvciBBTUxPLiBDb24gdW4gdmFsb3IgZW4gdW5pZGFkZXMgeiA9IC0xLjQ1MiwgeSB1biBwLXZhbHVlID0gMC4xNDY2MiBzZSBjb25zaWRlcmEgcXVlIGxhIHZhcmlhYmxlIE5PIGVzIGVzdGFkw61zdGljYW1lbnRlIHNpZ25pZmljYXRpdmEgY29uIHVuIG5pdmVsIGRlIHNpZ25pZmljYW5jaWEgKGFsZmEpIGRlIDAuMDUuCjMuIGBQMl82XzEzYD0gMC43Njg6IExhcyBwZXJzb25hcyBxdWUgY29uc2lkZXJhbiBxdWUgY29tYmF0aXIgYSBsYSBjb3JydXBjacOzbiBlcyAicG9jbyBpbXBvcnRhbnRlIiAoY2F0ZWdvcsOtYSAzKSwgY29tcGFyYWRvcyBjb24gbGFzIHBlcnNvbmFzIHF1ZSBjb25zaWRlcmFuIHF1ZSBlcyAibXV5IGltcG9ydGFudGUiIChjYXRlZ29yw61hIDEsIGRlIHJlZmVyZW5jaWEpLCBlc3TDoW4gYXNvY2lhZG9zIGNvbiB1biBkZWNyZW1lbnRvIGRlIDIzLjEyJSBlbiBsYSByYXrDs24gZGUgcHJvYmFiaWxpZGFkZXMgZGUgdm90YXIgcG9yIEFNTE8uIENvbiB1biB2YWxvciBlbiB1bmlkYWRlcyB6ID0gLTEuNzM5LCB5IHVuIHAtdmFsdWUgPSAwLjA4MjA2IHNlIGNvbnNpZGVyYSBxdWUgbGEgdmFyaWFibGUgTk8gZXMgZXN0YWTDrXN0aWNhbWVudGUgc2lnbmlmaWNhdGl2YSBjb24gdW4gbml2ZWwgZGUgc2lnbmlmaWNhbmNpYSAoYWxmYSkgZGUgMC4wNS4KNC4gYFAyXzZfMTRgPSAwLjcxODogTGFzIHBlcnNvbmFzIHF1ZSBjb25zaWRlcmFuIHF1ZSBjb21iYXRpciBhIGxhIGNvcnJ1cGNpw7NuIGVzICJuYWRhIGltcG9ydGFudGUiIChjYXRlZ29yw61hIDQpLCBjb21wYXJhZG9zIGNvbiBsYXMgcGVyc29uYXMgcXVlIGNvbnNpZGVyYW4gcXVlIGVzICJtdXkgaW1wb3J0YW50ZSIgKGNhdGVnb3LDrWEgMSwgZGUgcmVmZXJlbmNpYSksIGVzdMOhbiBhc29jaWFkb3MgY29uIHVuIGRlY3JlbWVudG8gZGUgMjguMTIlIGVuIGxhIHJhesOzbiBkZSBwcm9iYWJpbGlkYWRlcyBkZSB2b3RhciBwb3IgQU1MTy4gQ29uIHVuIHZhbG9yIGVuIHVuaWRhZGVzIHogPSAtMS4wMjUsIHkgdW4gcC12YWx1ZSA9IDAuMzA1NTEgc2UgY29uc2lkZXJhIHF1ZSBsYSB2YXJpYWJsZSBOTyBlcyBlc3RhZMOtc3RpY2FtZW50ZSBzaWduaWZpY2F0aXZhIGNvbiB1biBuaXZlbCBkZSBzaWduaWZpY2FuY2lhIChhbGZhKSBkZSAwLjA1LgoKCiMjIDMuIEVqZXJjaWNpby4KClJlYWxpemEgbGFzIHNpZ3VpZW50ZXMgYWN0aXZpZGFkZXM6CjEuIENvbnN0cnV5ZSB1biBtb2RlbG8gZGUgcmVncmVzacOzbiBsb2dpdCBzaW1wbGUuCjIuIFJlcG9ydGEgZWwgdmFsb3IgZGUgbGEgcmF6w7NuIGRlIHByb2JhYmlsaWRhZGVzICpvZGRzIHJhdGlvKiBwYXJhIGVsIGNvZWZpY2llbnRlIGRlIHJlZ3Jlc2nDs24uCjMuIEludGVycHJldGEgZWwgdmFsb3IgZGUgbGEgcmF6w7NuIGRlIHByb2JhYmlsaWRhZGVzIHJlcG9ydGFkYS4KNC4gSWRlbnRpZmljYSBzaSBlbCB2YWxvciBkZWwgY29lZmljaWVudGUgZGUgcmVncmVzacOzbiBlcyBlc3RhZMOtc3RpY2FtZW50ZSBzaWduaWZpY2F0aXZvLg==