En 1986, el transbordador espacial Challenger tuvo un accidente catastrófico debido a un incendio en una de las piezas de sus propulsores. Era la vez 25 en que se lanzaba un transbordador espacial. En todas las ocasiones anteriores se habían inspeccionado los propulsores de las naves, y en algunas de ellas se habían encontrando defectos. El fichero challenger contiene 23 observaciones de las siguientes variables: defecto, que toma los valores 1 y 0 en función de si se encontraron defectos o no en los propulsores; y temp, la temperatura (en grados Fahrenheit) en el momento del lanzamiento. 1. Cargar datos y contamos las frecuencias de casos sin y con defectos:

datos <- read.table("http://www.uam.es/joser.berrendero/datos/challenger.txt", header = TRUE)
datos

Observe que los datos estan etiquetados en exito=1 y fracaso=0 variable categórica “Y” donde si se encontraron defectos=1 o no=0 en los propulsores ## Tabla de Frecuencias de los datos

tabla<- table(datos$defecto)
tabla

 0  1 
16  7 

Según la tabla anterior se presentarón 7 fallas de 23 ensayos o inspeciones y 16 de 23 no presentaron fallas en las turbinas ## Una representación gráfica de los datos, puede obtenerse mediante:

colores <- NULL
colores[datos$defecto == 0] <- "green"
colores[datos$defecto == 1] <- "red"
plot(datos$temp, datos$defecto, pch = 21, bg = colores, 
    xlab = "Temperatura", ylab = "Probabilidad de defectos")
legend("bottomleft", c("No defecto", "Si defecto"), pch = 21, col = c("green", 
    "red"))

Parece razonable, a la vista de los datos, pensar que la temperatura puede influir en la probabilidad de que los propulsores tengan defectos o No. Luego la idea es ajustar por medio de la regresión logistica,un modelo de regresión logística para estudiar la posible relación entre Y=1 dado diferentes valores de temperatura: P(Y=1|X). Para ajustar el modelo se usa el comando glm (para modelos lineales generalizados) indicando que la respuesta es binomial mediante el argumento family:

Modelo Logistico en R

regresion <- glm(defecto ~ temp, data = datos, family = binomial)
summary(regresion)

Call:
glm(formula = defecto ~ temp, family = binomial, data = datos)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.0611  -0.7613  -0.3783   0.4524   2.2175  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)  
(Intercept)  15.0429     7.3786   2.039   0.0415 *
temp         -0.2322     0.1082  -2.145   0.0320 *
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 28.267  on 22  degrees of freedom
Residual deviance: 20.315  on 21  degrees of freedom
AIC: 24.315

Number of Fisher Scoring iterations: 5

Analisis del Modelo

En el modelo de regresión logística: \(P(Y=1|X)=\dfrac{e^{15.0429-0.2322x}}{1+e^{15.0429-0.2322x}}\)

En la tabla coeficientes, la temperatura es significativa con pvalor= 0.0320 el cual es menor que el valor de significancia de 0.05. Lo anterior nos permite concluir que la esis nula se rechaza

\(H_0:\beta_{1}=0\) \(H_1:\beta_{1} \neq 0\)

Con respecto al intercepto: También es sinificativo dado que p valor= 0.0415< 0.05. Lo que significa que se rechaza la hipotesis nula, que afirma el intercepto es cero. Más aun, significa que bajísimos, lo que demuestra que ambas variables son importantes para explicar la variable dependiente (probabilidad de éxito).

\(H_0:\alpha_{0}=0\) \(H_1:\alpha_{0} \neq 0\)

¿La deviance residual con un valor de Residual deviance: 20.315 on 21 degrees of freedom de libertad, puede tomarse como indicio de buen ajuste del modelo?.

Los Odds Rations

Los “Odds” indica cuanto más probable es el éxito que el fracaso dado un vector de valores de variables explicativas (X’s). Por ejemplo, los Odds ratio representa el cociente de proporciones entre las fallas por cada exito entre el grupo de turbinas con un factor de riesgo y el grupo sin dicho factor de riesgo.

\(e^{\alpha_{0}}\)la probabilidad de que la característica está presente en una observación \(i\) cuando \(X_{i} 0\),es decir,al inicio del estudio. Es decir, cuanto más probable es el éxito que el fracaso. En particular, para este ejemplo es la probabilidad de que se presente el defecto cuando la temperatura es cero.

\(e^{\beta_{1}}\) es la razón de Odds al aumentar una unidad la temperatura, (manteniendo estables el resto de las variables en el modelo, si las hay)

exp(-0.2322 )
[1] 0.7927875

Es decir, al aumentar una unidad la temperatura, la Odds o ventaja de falla es casi lo mismo (aproximando a un);es 0.7927875 podríamos decir que el riesgo de falla frente al de no falla se multiplica por 0.8

Los Residuos

la raíz de las desviaciones representa el papel de los residuos: \[ D_i = \mp \sqrt{-2 [Y_i\log \hat p_i + (1-Y_i)\log(1-\hat p_i)]}, \] donde el signo coincide con el signo de ( Y_i - p_i ). En la salida anterior estas cantidades se denominan deviance residuals. Para calcular estos pseudo-residuos, podemos ejecutar res = resid(reg).

res<- resid(regresion)
res
         1          2          3          4          5 
-1.0611168  1.7145343 -0.7996042 -0.8817559 -0.9690847 
         6          7          8          9         10 
-0.5865724 -0.5267644 -0.7229433  0.5506685  1.0063470 
        11         12         13         14         15 
 1.7145343 -0.3018707 -0.9690847  0.3540506 -0.9690847 
        16         17         18         19         20 
-0.4229076 -0.7229433 -0.2143127 -0.3782680 -0.2694144 
        21         22         23 
 2.2175345 -0.3782680  0.6127353 

Cuál observación presenta mayoy residual? También como en el modelo de regresión lineal se tienen los valores ajustados

 fit<- fitted.values(regresion)
fit
         1          2          3          4          5 
0.43049313 0.22996826 0.27362105 0.32209405 0.37472428 
         6          7          8          9         10 
0.15804910 0.12954602 0.22996826 0.85931657 0.60268105 
        11         12         13         14         15 
0.22996826 0.04454055 0.37472428 0.93924781 0.37472428 
        16         17         18         19         20 
0.08554356 0.22996826 0.02270329 0.06904407 0.03564141 
        21         22         23 
0.08554356 0.06904407 0.82884484 

Comparación

Teniendo en cuenta lo anterior cuál es la temperatura que tiene el mayor probabilidad de falla y corresponde a que temperatura? Las prediciones: predice los valores de los logits (valores de los logits ajustados)

prediciones<-predict(regresion)
prediciones
         1          2          3          4          5 
-0.2798395 -1.2084904 -0.9763277 -0.7441650 -0.5120022 
         6          7          8          9         10 
-1.6728159 -1.9049787 -1.2084904  1.8096252  0.4166488 
        11         12         13         14         15 
-1.2084904 -3.0657924 -0.5120022  2.7382762 -0.5120022 
        16         17         18         19         20 
-2.3693042 -1.2084904 -3.7622806 -2.6014669 -3.2979551 
        21         22         23 
-2.3693042 -2.6014669  1.5774625 
probabilidad= predict(regresion,type="response") 
probabilidad
         1          2          3          4          5 
0.43049313 0.22996826 0.27362105 0.32209405 0.37472428 
         6          7          8          9         10 
0.15804910 0.12954602 0.22996826 0.85931657 0.60268105 
        11         12         13         14         15 
0.22996826 0.04454055 0.37472428 0.93924781 0.37472428 
        16         17         18         19         20 
0.08554356 0.22996826 0.02270329 0.06904407 0.03564141 
        21         22         23 
0.08554356 0.06904407 0.82884484 

Generar una data frame que permita ver las variables originales con la probabilidad

comparacion<-data.frame( probabilidad,datos) 
comparacion

Predicción para valores nuevos con el modelo ajustado

Notas importantes: Tenga en cuenta que si ha usado en la fórmula nombres de variables que implican el data.frame que las contiene, el nuevo data.frame debe llamarse igual y con los mismos nombres de variables. Es decir, si la fórmula es a\(y~a\)x, para predecir debe usar el mismo nombre, a, para el data.frame, y por supuesto los mismos nombres de variables, aunque los valores sean distintos. Si usa sólo el nombre de las variables en la fórmula debe construir el data.frame nuevo con las columnas cuyos nombres representen a dichas variables. ##Ejemplo

Para representar gráficamente la función logística estimada, calculamos las probabilidades de fallo estimadas (usando el comando predict) para un vector adecuado de nuevas temperaturas (entre 50 y 85 grados): 1. Primero generamos una nueva secuencia de datos, el cula llamaremos datos nuevos

datos_nuevos <- data.frame(temp = seq(50, 85, 0.1))
datos_nuevos

Calculo de las nuevas probabilidades

probabilidades_nuevas <- predict(regresion, datos_nuevos, type = "response")
probabilidades_nuevas
          1           2           3           4           5 
0.968773521 0.968063501 0.967337881 0.966596344 0.965838565 
          6           7           8           9          10 
0.965064218 0.964272967 0.963464474 0.962638394 0.961794377 
         11          12          13          14          15 
0.960932066 0.960051102 0.959151116 0.958231738 0.957292588 
         16          17          18          19          20 
0.956333284 0.955353437 0.954352653 0.953330531 0.952286667 
         21          22          23          24          25 
0.951220648 0.950132060 0.949020480 0.947885482 0.946726633 
         26          27          28          29          30 
0.945543495 0.944335626 0.943102578 0.941843899 0.940559130 
         31          32          33          34          35 
0.939247809 0.937909469 0.936543638 0.935149839 0.933727593 
         36          37          38          39          40 
0.932276413 0.930795812 0.929285297 0.927744372 0.926172536 
         41          42          43          44          45 
0.924569286 0.922934118 0.921266521 0.919565984 0.917831994 
         46          47          48          49          50 
0.916064035 0.914261590 0.912424138 0.910551162 0.908642138 
         51          52          53          54          55 
0.906696548 0.904713868 0.902693578 0.900635158 0.898538088 
         56          57          58          59          60 
0.896401851 0.894225931 0.892009815 0.889752993 0.887454957 
         61          62          63          64          65 
0.885115205 0.882733239 0.880308564 0.877840693 0.875329145 
         66          67          68          69          70 
0.872773443 0.870173122 0.867527720 0.864836788 0.862099883 
         71          72          73          74          75 
0.859316573 0.856486439 0.853609070 0.850684068 0.847711050 
         76          77          78          79          80 
0.844689643 0.841619491 0.838500253 0.835331602 0.832113229 
         81          82          83          84          85 
0.828844843 0.825526170 0.822156956 0.818736965 0.815265985 
         86          87          88          89          90 
0.811743821 0.808170305 0.804545289 0.800868649 0.797140287 
         91          92          93          94          95 
0.793360131 0.789528132 0.785644271 0.781708557 0.777721025 
         96          97          98          99         100 
0.773681741 0.769590801 0.765448331 0.761254490 0.757009466 
        101         102         103         104         105 
0.752713482 0.748366792 0.743969688 0.739522490 0.735025558 
        106         107         108         109         110 
0.730479285 0.725884100 0.721240466 0.716548885 0.711809895 
        111         112         113         114         115 
0.707024069 0.702192019 0.697314391 0.692391873 0.687425185 
        116         117         118         119         120 
0.682415087 0.677362374 0.672267881 0.667132476 0.661957064 
        121         122         123         124         125 
0.656742588 0.651490025 0.646200385 0.640874717 0.635514100 
        126         127         128         129         130 
0.630119647 0.624692505 0.619233851 0.613744894 0.608226871 
        131         132         133         134         135 
0.602681051 0.597108727 0.591511222 0.585889883 0.580246082 
        136         137         138         139         140 
0.574581214 0.568896695 0.563193963 0.557474474 0.551739701 
        141         142         143         144         145 
0.545991136 0.540230281 0.534458656 0.528677790 0.522889220 
        146         147         148         149         150 
0.517094496 0.511295171 0.505492803 0.499688956 0.493885192 
        151         152         153         154         155 
0.488083076 0.482284169 0.476490030 0.470702213 0.464922263 
        156         157         158         159         160 
0.459151719 0.453392110 0.447644951 0.441911745 0.436193982 
        161         162         163         164         165 
0.430493132 0.424810651 0.419147974 0.413506514 0.407887664 
        166         167         168         169         170 
0.402292795 0.396723249 0.391180346 0.385665379 0.380179611 
        171         172         173         174         175 
0.374724277 0.369300583 0.363909702 0.358552778 0.353230920 
        176         177         178         179         180 
0.347945206 0.342696676 0.337486341 0.332315173 0.327184110 
        181         182         183         184         185 
0.322094054 0.317045870 0.312040387 0.307078398 0.302160657 
        186         187         188         189         190 
0.297287883 0.292460756 0.287679922 0.282945986 0.278259519 
        191         192         193         194         195 
0.273621055 0.269031090 0.264490086 0.259998466 0.255556621 
        196         197         198         199         200 
0.251164905 0.246823638 0.242533104 0.238293555 0.234105211 
        201         202         203         204         205 
0.229968258 0.225882849 0.221849108 0.217867127 0.213936969 
        206         207         208         209         210 
0.210058667 0.206232227 0.202457624 0.198734810 0.195063709 
        211         212         213         214         215 
0.191444218 0.187876214 0.184359545 0.180894039 0.177479501 
        216         217         218         219         220 
0.174115715 0.170802445 0.167539433 0.164326403 0.161163064 
        221         222         223         224         225 
0.158049102 0.154984192 0.151967989 0.149000135 0.146080257 
        226         227         228         229         230 
0.143207970 0.140382874 0.137604559 0.134872602 0.132186571 
        231         232         233         234         235 
0.129546023 0.126950506 0.124399560 0.121892715 0.119429497 
        236         237         238         239         240 
0.117009424 0.114632005 0.112296749 0.110003155 0.107750719 
        241         242         243         244         245 
0.105538936 0.103367294 0.101235280 0.099142378 0.097088069 
        246         247         248         249         250 
0.095071835 0.093093156 0.091151509 0.089246374 0.087377230 
        251         252         253         254         255 
0.085543556 0.083744831 0.081980538 0.080250158 0.078553176 
        256         257         258         259         260 
0.076889080 0.075257357 0.073657498 0.072088999 0.070551357 
        261         262         263         264         265 
0.069044072 0.067566648 0.066118593 0.064699419 0.063308641 
        266         267         268         269         270 
0.061945779 0.060610357 0.059301904 0.058019954 0.056764043 
        271         272         273         274         275 
0.055533716 0.054328519 0.053148006 0.051991734 0.050859266 
        276         277         278         279         280 
0.049750171 0.048664022 0.047600398 0.046558883 0.045539068 
        281         282         283         284         285 
0.044540546 0.043562920 0.042605795 0.041668783 0.040751501 
        286         287         288         289         290 
0.039853572 0.038974624 0.038114291 0.037272214 0.036448035 
        291         292         293         294         295 
0.035641406 0.034851984 0.034079428 0.033323406 0.032583590 
        296         297         298         299         300 
0.031859657 0.031151291 0.030458178 0.029780014 0.029116496 
        301         302         303         304         305 
0.028467327 0.027832217 0.027210880 0.026603034 0.026008403 
        306         307         308         309         310 
0.025426717 0.024857707 0.024301114 0.023756680 0.023224153 
        311         312         313         314         315 
0.022703286 0.022193835 0.021695562 0.021208233 0.020731619 
        316         317         318         319         320 
0.020265494 0.019809637 0.019363831 0.018927865 0.018501529 
        321         322         323         324         325 
0.018084618 0.017676933 0.017278277 0.016888457 0.016507284 
        326         327         328         329         330 
0.016134573 0.015770143 0.015413814 0.015065414 0.014724771 
        331         332         333         334         335 
0.014391718 0.014066090 0.013747727 0.013436472 0.013132169 
        336         337         338         339         340 
0.012834669 0.012543823 0.012259486 0.011981516 0.011709773 
        341         342         343         344         345 
0.011444123 0.011184431 0.010930566 0.010682402 0.010439813 
        346         347         348         349         350 
0.010202675 0.009970870 0.009744280 0.009522789 0.009306286 
        351 
0.009094660 

Por defecto calcularía \(log p_{i}/(1-p_{i})\), para calcular \(p_{i}\) usamos el argumento type Interprete el dato 316 Ahora, si queremos ilustrar el ajuste con los datos

plot(datos$temp, datos$defecto, pch = 21, bg = colores, 
    xlab = "Temperatura", ylab = "Probabilidad de defectos")
legend("bottomleft", c("No defecto", "Si defecto"), pch = 21, col = c("green", 
    "red"))
lines(datos_nuevos$temp, probabilidades_nuevas, col = "blue", lwd = 2)

Preguntas

  1. Se puede afirmar a nivel \(\alpha = 0.05\) que la temperatura influye en la probabilidad de que los propulsores tengan defectos? Utilice el test de Wald.

  2. Interpreta el valor del coeficiente estimado para la variable temperatura

  3. ¿Para qué valores de la temperatura la probabilidad estimada de que se produzcan defectos es menor que 0.1?

  4. ¿Para qué valores de la temperatura se predice que se van a producir defectos?

LS0tDQp0aXRsZTogIlIgUmVncmVzaW9uIExvZ2lzdGljYSINCm91dHB1dDoNCiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdA0KICBwZGZfZG9jdW1lbnQ6IGRlZmF1bHQNCi0tLQ0KDQpFbiAxOTg2LCBlbCB0cmFuc2JvcmRhZG9yIGVzcGFjaWFsIENoYWxsZW5nZXIgdHV2byB1biBhY2NpZGVudGUgY2F0YXN0cvNmaWNvIGRlYmlkbyBhIHVuIGluY2VuZGlvIGVuIHVuYSBkZSBsYXMgcGllemFzIGRlIHN1cyBwcm9wdWxzb3Jlcy4gRXJhIGxhIHZleiAyNSBlbiBxdWUgc2UgbGFuemFiYSB1biB0cmFuc2JvcmRhZG9yIGVzcGFjaWFsLiBFbiB0b2RhcyBsYXMgb2Nhc2lvbmVzIGFudGVyaW9yZXMgc2UgaGFi7WFuIGluc3BlY2Npb25hZG8gbG9zIHByb3B1bHNvcmVzIGRlIGxhcyBuYXZlcywgeSBlbiBhbGd1bmFzIGRlIGVsbGFzIHNlIGhhYu1hbiBlbmNvbnRyYW5kbyBkZWZlY3Rvcy4gRWwgZmljaGVybyBjaGFsbGVuZ2VyIGNvbnRpZW5lIDIzIG9ic2VydmFjaW9uZXMgZGUgbGFzIHNpZ3VpZW50ZXMgdmFyaWFibGVzOiBkZWZlY3RvLCBxdWUgdG9tYSBsb3MgdmFsb3JlcyAxIHkgMCBlbiBmdW5jafNuIGRlIHNpIHNlIGVuY29udHJhcm9uIGRlZmVjdG9zIG8gbm8gZW4gbG9zIHByb3B1bHNvcmVzOyB5IHRlbXAsIGxhIHRlbXBlcmF0dXJhIChlbiBncmFkb3MgRmFocmVuaGVpdCkgZW4gZWwgbW9tZW50byBkZWwgbGFuemFtaWVudG8uDQoxLiBDYXJnYXIgZGF0b3MgeSBjb250YW1vcyBsYXMgZnJlY3VlbmNpYXMgZGUgY2Fzb3Mgc2luIHkgY29uIGRlZmVjdG9zOg0KYGBge3IsIGVjaG89VH0NCmRhdG9zIDwtIHJlYWQudGFibGUoImh0dHA6Ly93d3cudWFtLmVzL2pvc2VyLmJlcnJlbmRlcm8vZGF0b3MvY2hhbGxlbmdlci50eHQiLCBoZWFkZXIgPSBUUlVFKQ0KZGF0b3MNCmBgYA0KDQpPYnNlcnZlIHF1ZSBsb3MgZGF0b3MgZXN0YW4gZXRpcXVldGFkb3MgZW4gZXhpdG89MSB5IGZyYWNhc289MCB2YXJpYWJsZSBjYXRlZ/NyaWNhICJZIiBkb25kZSBzaSBzZSBlbmNvbnRyYXJvbiBkZWZlY3Rvcz0xIG8gbm89MCBlbiBsb3MgcHJvcHVsc29yZXMNCiMjIFRhYmxhIGRlIEZyZWN1ZW5jaWFzIGRlIGxvcyBkYXRvcw0KDQoNCmBgYHtyLCBlY2hvPVR9DQp0YWJsYTwtIHRhYmxlKGRhdG9zJGRlZmVjdG8pDQp0YWJsYQ0KYGBgDQpTZWf6biBsYSB0YWJsYSBhbnRlcmlvciBzZSBwcmVzZW50YXLzbiA3IGZhbGxhcyBkZSAyMyBlbnNheW9zIG8gaW5zcGVjaW9uZXMgeSAxNiBkZSAyMyBubyBwcmVzZW50YXJvbiBmYWxsYXMgZW4gbGFzIHR1cmJpbmFzDQojIyBVbmEgcmVwcmVzZW50YWNp824gZ3LhZmljYSBkZSBsb3MgZGF0b3MsIHB1ZWRlIG9idGVuZXJzZSBtZWRpYW50ZToNCg0KDQpgYGB7ciwgZWNobz1UfQ0KY29sb3JlcyA8LSBOVUxMDQpjb2xvcmVzW2RhdG9zJGRlZmVjdG8gPT0gMF0gPC0gImdyZWVuIg0KY29sb3Jlc1tkYXRvcyRkZWZlY3RvID09IDFdIDwtICJyZWQiDQpwbG90KGRhdG9zJHRlbXAsIGRhdG9zJGRlZmVjdG8sIHBjaCA9IDIxLCBiZyA9IGNvbG9yZXMsIA0KICAgIHhsYWIgPSAiVGVtcGVyYXR1cmEiLCB5bGFiID0gIlByb2JhYmlsaWRhZCBkZSBkZWZlY3RvcyIpDQpsZWdlbmQoImJvdHRvbWxlZnQiLCBjKCJObyBkZWZlY3RvIiwgIlNpIGRlZmVjdG8iKSwgcGNoID0gMjEsIGNvbCA9IGMoImdyZWVuIiwgDQogICAgInJlZCIpKQ0KYGBgDQpQYXJlY2UgcmF6b25hYmxlLCBhIGxhIHZpc3RhIGRlIGxvcyBkYXRvcywgcGVuc2FyIHF1ZSBsYSB0ZW1wZXJhdHVyYSBwdWVkZSBpbmZsdWlyIGVuIGxhIHByb2JhYmlsaWRhZCBkZSBxdWUgbG9zIHByb3B1bHNvcmVzIHRlbmdhbiBkZWZlY3RvcyBvIE5vLg0KTHVlZ28gbGEgaWRlYSBlcyBhanVzdGFyIHBvciBtZWRpbyBkZSBsYSByZWdyZXNp824gbG9naXN0aWNhLHVuIG1vZGVsbyBkZSByZWdyZXNp824gbG9n7XN0aWNhIHBhcmEgZXN0dWRpYXIgbGEgcG9zaWJsZSByZWxhY2nzbiBlbnRyZSBZPTEgZGFkbyBkaWZlcmVudGVzIHZhbG9yZXMgZGUgdGVtcGVyYXR1cmE6IFAoWT0xfFgpLg0KUGFyYSBhanVzdGFyIGVsIG1vZGVsbyBzZSB1c2EgZWwgY29tYW5kbyBnbG0gKHBhcmEgbW9kZWxvcyBsaW5lYWxlcyBnZW5lcmFsaXphZG9zKSBpbmRpY2FuZG8gcXVlIGxhIHJlc3B1ZXN0YSBlcyBiaW5vbWlhbCBtZWRpYW50ZSBlbCBhcmd1bWVudG8gZmFtaWx5Og0KDQojI01vZGVsbyBMb2dpc3RpY28gZW4gUiANCg0KYGBge3IsIGVjaG89VH0NCnJlZ3Jlc2lvbiA8LSBnbG0oZGVmZWN0byB+IHRlbXAsIGRhdGEgPSBkYXRvcywgZmFtaWx5ID0gYmlub21pYWwpDQpzdW1tYXJ5KHJlZ3Jlc2lvbikNCmBgYA0KIyNBbmFsaXNpcyBkZWwgTW9kZWxvDQoNCkVuIGVsIG1vZGVsbyBkZSByZWdyZXNp824gbG9n7XN0aWNhOg0KJFAoWT0xfFgpPVxkZnJhY3tlXnsxNS4wNDI5LTAuMjMyMnh9fXsxK2VeezE1LjA0MjktMC4yMzIyeH19JA0KDQpFbiBsYSB0YWJsYSBjb2VmaWNpZW50ZXMsIGxhIHRlbXBlcmF0dXJhIGVzIHNpZ25pZmljYXRpdmEgY29uIHB2YWxvcj0gMC4wMzIwIGVsIGN1YWwgZXMgbWVub3IgcXVlIGVsIHZhbG9yIGRlIHNpZ25pZmljYW5jaWEgZGUgMC4wNS4gTG8gYW50ZXJpb3Igbm9zIHBlcm1pdGUgY29uY2x1aXIgcXVlIGxhIGVzaXMgbnVsYSBzZSByZWNoYXphDQoNCiRIXzA6XGJldGFfezF9PTAkDQokSF8xOlxiZXRhX3sxfSBcbmVxIDAkDQoNCkNvbiByZXNwZWN0byBhbCBpbnRlcmNlcHRvOiBUYW1iaeluIGVzIHNpbmlmaWNhdGl2byBkYWRvIHF1ZSBwIHZhbG9yPSAwLjA0MTU8IDAuMDUuIExvIHF1ZSBzaWduaWZpY2EgcXVlIHNlIHJlY2hhemEgbGEgaGlwb3Rlc2lzIG51bGEsIHF1ZSBhZmlybWEgZWwgaW50ZXJjZXB0byBlcyBjZXJvLiBN4XMgYXVuLCBzaWduaWZpY2EgcXVlIA0KYmFq7XNpbW9zLCBsbyBxdWUgZGVtdWVzdHJhIHF1ZSBhbWJhcyB2YXJpYWJsZXMgc29uIGltcG9ydGFudGVzIHBhcmEgZXhwbGljYXIgbGEgdmFyaWFibGUgZGVwZW5kaWVudGUgKHByb2JhYmlsaWRhZCBkZSDpeGl0bykuDQoNCiRIXzA6XGFscGhhX3swfT0wJA0KJEhfMTpcYWxwaGFfezB9IFxuZXEgMCQNCg0KDQoNCr9MYSBkZXZpYW5jZSByZXNpZHVhbCBjb24gdW4gdmFsb3IgZGUgUmVzaWR1YWwgZGV2aWFuY2U6IDIwLjMxNSAgb24gMjEgIGRlZ3JlZXMgb2YgZnJlZWRvbSBkZSBsaWJlcnRhZCwgcHVlZGUgdG9tYXJzZSBjb21vDQppbmRpY2lvIGRlIGJ1ZW4gYWp1c3RlIGRlbCBtb2RlbG8/LiANCg0KIyNMb3MgT2RkcyBSYXRpb25zDQpMb3MgIk9kZHMiIGluZGljYSBjdWFudG8gbeFzIHByb2JhYmxlIGVzIGVsIOl4aXRvIHF1ZSBlbCBmcmFjYXNvIGRhZG8gdW4gdmVjdG9yIGRlIHZhbG9yZXMgZGUgIHZhcmlhYmxlcyBleHBsaWNhdGl2YXMgKFgncykuIFBvciBlamVtcGxvLCAgbG9zICBPZGRzIHJhdGlvIHJlcHJlc2VudGEgZWwgY29jaWVudGUgZGUgcHJvcG9yY2lvbmVzIGVudHJlIGxhcyBmYWxsYXMgcG9yIGNhZGEgZXhpdG8gZW50cmUgZWwgZ3J1cG8gZGUgdHVyYmluYXMgY29uIHVuIGZhY3RvciBkZSByaWVzZ28geSBlbCBncnVwbyBzaW4gZGljaG8gZmFjdG9yIGRlIHJpZXNnby4NCg0KJGVee1xhbHBoYV97MH19JGxhIHByb2JhYmlsaWRhZCBkZSBxdWUgbGEgY2FyYWN0ZXLtc3RpY2EgZXN04SBwcmVzZW50ZSBlbiB1bmEgb2JzZXJ2YWNp824gJGkkIGN1YW5kbyAkWF97aX0gMCQsZXMgZGVjaXIsYWwgaW5pY2lvIGRlbCBlc3R1ZGlvLiBFcyBkZWNpciwgY3VhbnRvIG3hcyBwcm9iYWJsZSBlcyBlbCDpeGl0byBxdWUgZWwgZnJhY2Fzby4NCkVuIHBhcnRpY3VsYXIsIHBhcmEgZXN0ZSBlamVtcGxvIGVzIGxhIHByb2JhYmlsaWRhZCBkZSBxdWUgc2UgcHJlc2VudGUgZWwgZGVmZWN0byBjdWFuZG8gbGEgdGVtcGVyYXR1cmEgZXMgY2Vyby4NCg0KJGVee1xiZXRhX3sxfX0kICBlcyBsYSByYXrzbiBkZSBPZGRzIGFsIGF1bWVudGFyIHVuYSB1bmlkYWQgbGEgdGVtcGVyYXR1cmEsIChtYW50ZW5pZW5kbyBlc3RhYmxlcyBlbCByZXN0byBkZSBsYXMgdmFyaWFibGVzIGVuIGVsIG1vZGVsbywgc2kgbGFzIGhheSkNCg0KYGBge3IsIGVjaG89VH0NCmV4cCgtMC4yMzIyICkNCmBgYA0KIEVzIGRlY2lyLCBhbCBhdW1lbnRhciB1bmEgdW5pZGFkIGxhIHRlbXBlcmF0dXJhLCBsYSBPZGRzIG8gdmVudGFqYSBkZSBmYWxsYSBlcyBjYXNpIGxvIG1pc21vIChhcHJveGltYW5kbyBhIHVuKTtlcyAwLjc5Mjc4NzUgcG9kcu1hbW9zIGRlY2lyIHF1ZSBlbCByaWVzZ28gZGUgZmFsbGEgZnJlbnRlIGFsIGRlIG5vIGZhbGxhIHNlDQptdWx0aXBsaWNhIHBvciAwLjggDQoNCiMjTG9zIFJlc2lkdW9zDQoNCmxhIHJh7XogZGUgbGFzIGRlc3ZpYWNpb25lcyByZXByZXNlbnRhIGVsIHBhcGVsIGRlIGxvcyByZXNpZHVvczogXFsgRF9pID0gXG1wIFxzcXJ0ey0yIFtZX2lcbG9nIFxoYXQgcF9pICsgKDEtWV9pKVxsb2coMS1caGF0IHBfaSldfSwgXF0gZG9uZGUgZWwgc2lnbm8gY29pbmNpZGUgY29uIGVsIHNpZ25vIGRlIFwoIFlfaSAtIFxoYXQgcF9pIFwpLiBFbiBsYSBzYWxpZGEgYW50ZXJpb3IgZXN0YXMgY2FudGlkYWRlcyBzZSBkZW5vbWluYW4gZGV2aWFuY2UgcmVzaWR1YWxzLiBQYXJhIGNhbGN1bGFyIGVzdG9zIHBzZXVkby1yZXNpZHVvcywgcG9kZW1vcyBlamVjdXRhciByZXMgPSByZXNpZChyZWcpLg0KYGBge3IsIGVjaG89VH0NCnJlczwtIHJlc2lkKHJlZ3Jlc2lvbikNCnJlcw0KYGBgDQpDdeFsIG9ic2VydmFjafNuIHByZXNlbnRhIG1heW95IHJlc2lkdWFsPw0KVGFtYmnpbiBjb21vIGVuIGVsIG1vZGVsbyBkZSByZWdyZXNp824gbGluZWFsIHNlIHRpZW5lbiBsb3MgdmFsb3JlcyBhanVzdGFkb3MNCg0KYGBge3IsZWNobz1UfQ0KIGZpdDwtIGZpdHRlZC52YWx1ZXMocmVncmVzaW9uKQ0KZml0DQpgYGANCiMjQ29tcGFyYWNp824NClRlbmllbmRvIGVuIGN1ZW50YSBsbyBhbnRlcmlvciBjdeFsIGVzIGxhIHRlbXBlcmF0dXJhIHF1ZSB0aWVuZSBlbCBtYXlvciBwcm9iYWJpbGlkYWQgZGUgZmFsbGEgeSBjb3JyZXNwb25kZSBhIHF1ZSB0ZW1wZXJhdHVyYT8NCkxhcyBwcmVkaWNpb25lczogcHJlZGljZSBsb3MgdmFsb3JlcyBkZSBsb3MgbG9naXRzICh2YWxvcmVzIGRlIGxvcyBsb2dpdHMgYWp1c3RhZG9zKSANCmBgYHtyLCBlY2hvPVR9DQpwcmVkaWNpb25lczwtcHJlZGljdChyZWdyZXNpb24pDQpwcmVkaWNpb25lcw0KYGBgDQoNCmBgYHtyLGVjaG89VH0NCnByb2JhYmlsaWRhZD0gcHJlZGljdChyZWdyZXNpb24sdHlwZT0icmVzcG9uc2UiKSANCnByb2JhYmlsaWRhZA0KYGBgDQoNCkdlbmVyYXIgdW5hIGRhdGEgZnJhbWUgcXVlIHBlcm1pdGEgdmVyIGxhcyB2YXJpYWJsZXMgb3JpZ2luYWxlcyBjb24gbGEgcHJvYmFiaWxpZGFkIA0KYGBge3IsZWNobz1UfQ0KY29tcGFyYWNpb248LWRhdGEuZnJhbWUoIHByb2JhYmlsaWRhZCxkYXRvcykgDQpjb21wYXJhY2lvbg0KDQpgYGANCiMjUHJlZGljY2nzbiBwYXJhIHZhbG9yZXMgbnVldm9zIGNvbiBlbCBtb2RlbG8gYWp1c3RhZG8NCg0KTm90YXMgaW1wb3J0YW50ZXM6DQpUZW5nYSBlbiBjdWVudGEgcXVlIHNpIGhhIHVzYWRvIGVuIGxhIGbzcm11bGEgbm9tYnJlcyBkZSB2YXJpYWJsZXMgcXVlIGltcGxpY2FuIGVsIGRhdGEuZnJhbWUgcXVlIGxhcyBjb250aWVuZSwgZWwgbnVldm8gZGF0YS5mcmFtZSBkZWJlIGxsYW1hcnNlIGlndWFsIHkgY29uIGxvcyBtaXNtb3Mgbm9tYnJlcyBkZSB2YXJpYWJsZXMuIEVzIGRlY2lyLCBzaSBsYSBm83JtdWxhIGVzIGEkeX5hJHgsIHBhcmEgcHJlZGVjaXIgZGViZSB1c2FyIGVsIG1pc21vIG5vbWJyZSwgYSwgcGFyYSBlbCBkYXRhLmZyYW1lLCB5IHBvciBzdXB1ZXN0byBsb3MgbWlzbW9zIG5vbWJyZXMgZGUgdmFyaWFibGVzLCBhdW5xdWUgbG9zIHZhbG9yZXMgc2VhbiBkaXN0aW50b3MuDQpTaSB1c2Egc/NsbyBlbCBub21icmUgZGUgbGFzIHZhcmlhYmxlcyBlbiBsYSBm83JtdWxhIGRlYmUgY29uc3RydWlyIGVsIGRhdGEuZnJhbWUgbnVldm8gY29uIGxhcyBjb2x1bW5hcyBjdXlvcyBub21icmVzIHJlcHJlc2VudGVuIGEgZGljaGFzIHZhcmlhYmxlcy4NCiMjRWplbXBsbw0KDQpQYXJhIHJlcHJlc2VudGFyIGdy4WZpY2FtZW50ZSBsYSBmdW5jafNuIGxvZ+1zdGljYSBlc3RpbWFkYSwgY2FsY3VsYW1vcyBsYXMgcHJvYmFiaWxpZGFkZXMgZGUgZmFsbG8gZXN0aW1hZGFzICh1c2FuZG8gZWwgY29tYW5kbyBwcmVkaWN0KSBwYXJhIHVuIHZlY3RvciBhZGVjdWFkbyBkZSBudWV2YXMgdGVtcGVyYXR1cmFzIChlbnRyZSA1MCB5IDg1IGdyYWRvcyk6DQoxLiBQcmltZXJvIGdlbmVyYW1vcyB1bmEgbnVldmEgc2VjdWVuY2lhIGRlIGRhdG9zLCBlbCBjdWxhIGxsYW1hcmVtb3MgZGF0b3MgbnVldm9zDQoNCmBgYHtyLCBlY2hvPVR9DQpkYXRvc19udWV2b3MgPC0gZGF0YS5mcmFtZSh0ZW1wID0gc2VxKDUwLCA4NSwgMC4xKSkNCmRhdG9zX251ZXZvcw0KYGBgDQojI0NhbGN1bG8gZGUgbGFzIG51ZXZhcyBwcm9iYWJpbGlkYWRlcw0KDQoNCmBgYHtyLCBlY2hvPVR9DQpwcm9iYWJpbGlkYWRlc19udWV2YXMgPC0gcHJlZGljdChyZWdyZXNpb24sIGRhdG9zX251ZXZvcywgdHlwZSA9ICJyZXNwb25zZSIpDQpwcm9iYWJpbGlkYWRlc19udWV2YXMNCmBgYA0KUG9yIGRlZmVjdG8gY2FsY3VsYXLtYSAkbG9nIHBfe2l9LygxLXBfe2l9KSQsIHBhcmEgY2FsY3VsYXIgJHBfe2l9JCB1c2Ftb3MgZWwgYXJndW1lbnRvIHR5cGUNCkludGVycHJldGUgZWwgZGF0byAzMTYNCkFob3JhLCBzaSBxdWVyZW1vcyBpbHVzdHJhciBlbCBhanVzdGUgY29uIGxvcyBkYXRvcw0KYGBge3IsIGVjaG89VH0NCnBsb3QoZGF0b3MkdGVtcCwgZGF0b3MkZGVmZWN0bywgcGNoID0gMjEsIGJnID0gY29sb3JlcywgDQogICAgeGxhYiA9ICJUZW1wZXJhdHVyYSIsIHlsYWIgPSAiUHJvYmFiaWxpZGFkIGRlIGRlZmVjdG9zIikNCmxlZ2VuZCgiYm90dG9tbGVmdCIsIGMoIk5vIGRlZmVjdG8iLCAiU2kgZGVmZWN0byIpLCBwY2ggPSAyMSwgY29sID0gYygiZ3JlZW4iLCANCiAgICAicmVkIikpDQpsaW5lcyhkYXRvc19udWV2b3MkdGVtcCwgcHJvYmFiaWxpZGFkZXNfbnVldmFzLCBjb2wgPSAiYmx1ZSIsIGx3ZCA9IDIpDQpgYGANCg0KIyNQcmVndW50YXMNCg0KMS4gU2UgcHVlZGUgYWZpcm1hciBhIG5pdmVsICRcYWxwaGEgPSAwLjA1JCBxdWUgbGEgdGVtcGVyYXR1cmEgaW5mbHV5ZSBlbiBsYSBwcm9iYWJpbGlkYWQgZGUgcXVlIGxvcyBwcm9wdWxzb3JlcyB0ZW5nYW4gZGVmZWN0b3M/IFV0aWxpY2UgZWwgdGVzdCBkZSBXYWxkLg0KDQoyLiBJbnRlcnByZXRhIGVsIHZhbG9yIGRlbCBjb2VmaWNpZW50ZSBlc3RpbWFkbyBwYXJhIGxhIHZhcmlhYmxlIHRlbXBlcmF0dXJhDQoNCjMuIL9QYXJhIHF16SB2YWxvcmVzIGRlIGxhIHRlbXBlcmF0dXJhIGxhIHByb2JhYmlsaWRhZCBlc3RpbWFkYSBkZSBxdWUgc2UgcHJvZHV6Y2FuIGRlZmVjdG9zIGVzIG1lbm9yIHF1ZSAwLjE/DQoNCjQuIL9QYXJhIHF16SB2YWxvcmVzIGRlIGxhIHRlbXBlcmF0dXJhIHNlIHByZWRpY2UgcXVlIHNlIHZhbiBhIHByb2R1Y2lyIGRlZmVjdG9zPw0KDQoNCg0KDQoNCg==