0.1 INSTALACIÓN DE LIBRERÍAS

1 CARLSON Department Store - CASO DE ESTUDIO

1.1 Planteamiento del problema

Carlson Department Store permaneció cerrada cuatro meses (septiembre a diciembre del Año 5) tras el paso de un huracán. Se dispone de 48 meses de ventas previas al huracán (de septiembre del Año 1 a agosto del Año 5) tanto de Carlson como del total de tiendas departamentales del condado, y de las ventas reales del condado durante los cuatro meses en que Carlson estuvo cerrada.

El objetivo es:

  1. Estimar las ventas que Carlson habría tenido de septiembre a diciembre del Año 5 si no hubiera ocurrido el huracán (venta perdida).
  2. Estimar las ventas que el condado habría tenido en esos mismos cuatro meses de no haber ocurrido el huracán.
  3. Comparar la estimación del punto 2 con las ventas reales del condado en ese periodo, para argumentar si existió (o no) un exceso de ventas atribuible a la actividad económica generada por la reconstrucción tras el huracán.

1.2 CARGA DE DATOS (Tabla 18.27 + Tabla 18.28)

# Orden cronológico: t = 1 es septiembre del Año 1 ... t = 48 es agosto del Año 5
mes <- c("Sep","Oct","Nov","Dic",
         rep(c("Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dic"), 3),
         "Ene","Feb","Mar","Abr","May","Jun","Jul","Ago")

año <- c(rep(1,4), rep(2,12), rep(3,12), rep(4,12), rep(5,8))

t <- 1:48

carlson <- c(1.71,1.90,2.74,4.20,
             1.45,1.80,2.03,1.99,2.32,2.20,2.13,2.43,1.90,2.13,2.56,4.16,
             2.31,1.89,2.02,2.23,2.39,2.14,2.27,2.21,1.89,2.29,2.83,4.04,
             2.31,1.99,2.42,2.45,2.57,2.42,2.40,2.50,2.09,2.54,2.97,4.35,
             2.56,2.28,2.69,2.48,2.73,2.37,2.31,2.23)

condado <- c(55.80,56.40,71.40,117.60,
             46.80,48.00,60.00,57.60,61.80,58.20,56.40,63.00,57.60,53.40,71.40,114.00,
             46.80,48.60,60.00,58.20,60.60,55.20,51.00,58.80,49.80,54.60,65.40,102.00,
             43.80,45.60,59.40,53.40,56.40,52.80,54.00,60.60,47.40,54.60,67.80,100.20,
             48.00,51.60,57.60,58.20,60.00,57.00,57.60,61.80)

datos <- data.frame(t, año, mes, carlson, condado)

# Aseguramos que "mes" sea un factor con orden calendario (Ene como base)
niveles_mes <- c("Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dic")
datos$mes <- factor(datos$mes, levels = niveles_mes)

kable(head(datos, 12), caption = "Primeras 12 observaciones de la base de datos (48 meses previos al huracán)")
Primeras 12 observaciones de la base de datos (48 meses previos al huracán)
t año mes carlson condado
1 1 Sep 1.71 55.8
2 1 Oct 1.90 56.4
3 1 Nov 2.74 71.4
4 1 Dic 4.20 117.6
5 2 Ene 1.45 46.8
6 2 Feb 1.80 48.0
7 2 Mar 2.03 60.0
8 2 Abr 1.99 57.6
9 2 May 2.32 61.8
10 2 Jun 2.20 58.2
11 2 Jul 2.13 56.4
12 2 Ago 2.43 63.0

Ventas reales del condado durante los cuatro meses en que Carlson permaneció cerrada (septiembre a diciembre del Año 5), usadas más adelante para evaluar el exceso de ventas:

meses_cierre <- factor(c("Sep","Oct","Nov","Dic"), levels = niveles_mes)
t_cierre <- 49:52
condado_real_cierre <- c(69.00, 75.00, 85.20, 121.80)

datos_cierre <- data.frame(t = t_cierre, mes = meses_cierre, condado_real = condado_real_cierre)
kable(datos_cierre, caption = "Ventas reales del condado, Sep-Dic Año 5 (periodo de cierre de Carlson)")
Ventas reales del condado, Sep-Dic Año 5 (periodo de cierre de Carlson)
t mes condado_real
49 Sep 69.0
50 Oct 75.0
51 Nov 85.2
52 Dic 121.8

2 Visualización de las series en GRAFICAS

ggplot(datos, aes(x = t, y = carlson)) +
  geom_line(color = "steelblue") +
  geom_point(color = "steelblue") +
  labs(title = "Ventas mensuales de Carlson Department Store (48 meses previos al huracán)",
       x = "Mes (t)", y = "Ventas ($ millones)") +
  theme_minimal()

ggplot(datos, aes(x = t, y = condado)) +
  geom_line(color = "darkorange") +
  geom_point(color = "darkorange") +
  labs(title = "Ventas totales de tiendas departamentales del condado (48 meses previos al huracán)",
       x = "Mes (t)", y = "Ventas ($ millones)") +
  theme_minimal()

Ambas series muestran un patrón estacional marcado (pico muy fuerte en diciembre por temporada navideña, mínimos relativos a mitad de año) y una ligera tendencia, lo que justifica un modelo de regresión con tendencia lineal y variables dummy estacionales por mes.

3 MODELO DE REGRESIÓN: tendencia + estacionalidad

Se ajusta, para cada serie, el modelo:

\[Ventas_t = \beta_0 + \beta_1 \cdot t + \sum_{i=2}^{12} \beta_i \cdot Mes_i + \varepsilon_t\]

donde t es la variable de tendencia (1, 2, …, 48) y Mes_i son 11 variables dummy (se usa enero como mes base/de referencia).

3.1 Modelo para Carlson Department Store

modelo_carlson <- lm(carlson ~ t + mes, data = datos)
summary(modelo_carlson)
## 
## Call:
## lm(formula = carlson ~ t + mes, data = datos)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.50750 -0.06604  0.00875  0.07458  0.28750 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  1.901944   0.090906  20.922  < 2e-16 ***
## t            0.011111   0.001753   6.338 2.78e-07 ***
## mesFeb      -0.178611   0.115236  -1.550   0.1301    
## mesMar       0.110278   0.115276   0.957   0.3453    
## mesAbr       0.096667   0.115342   0.838   0.4077    
## mesMay       0.300556   0.115436   2.604   0.0134 *  
## mesJun       0.069444   0.115555   0.601   0.5517    
## mesJul       0.053333   0.115701   0.461   0.6477    
## mesAgo       0.107222   0.115874   0.925   0.3611    
## mesSep      -0.215556   0.115436  -1.867   0.0702 .  
## mesOct       0.090833   0.115342   0.788   0.4363    
## mesNov       0.639722   0.115276   5.549 3.03e-06 ***
## mesDic       2.041111   0.115236  17.712  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1629 on 35 degrees of freedom
## Multiple R-squared:  0.9472, Adjusted R-squared:  0.9291 
## F-statistic: 52.35 on 12 and 35 DF,  p-value: < 2.2e-16
r2_carlson <- summary(modelo_carlson)$r.squared

El modelo explica 94.7% de la variabilidad de las ventas de Carlson (\(R^2\) = 0.9472), lo cual indica un ajuste muy bueno.

3.2 Modelo para las tiendas departamentales del condado

modelo_condado <- lm(condado ~ t + mes, data = datos)
summary(modelo_condado)
## 
## Call:
## lm(formula = condado ~ t + mes, data = datos)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -6.6075 -2.0250  0.0525  1.4963  7.5075 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 48.44875    1.81045  26.761  < 2e-16 ***
## t           -0.09125    0.03491  -2.614 0.013119 *  
## mesFeb       2.19125    2.29501   0.955 0.346232    
## mesMar      13.08250    2.29580   5.698 1.93e-06 ***
## mesAbr      10.77375    2.29713   4.690 4.08e-05 ***
## mesMay      13.71500    2.29899   5.966 8.57e-07 ***
## mesJun       9.90625    2.30137   4.304 0.000128 ***
## mesJul       8.94750    2.30428   3.883 0.000437 ***
## mesAgo      15.33875    2.30772   6.647 1.10e-07 ***
## mesSep       5.93500    2.29899   2.582 0.014182 *  
## mesOct       8.12625    2.29713   3.538 0.001161 ** 
## mesNov      22.46750    2.29580   9.786 1.49e-11 ***
## mesDic      62.00875    2.29501  27.019  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.245 on 35 degrees of freedom
## Multiple R-squared:  0.9692, Adjusted R-squared:  0.9586 
## F-statistic:  91.8 on 12 and 35 DF,  p-value: < 2.2e-16
r2_condado <- summary(modelo_condado)$r.squared

El modelo del condado explica 96.9% de la variabilidad (\(R^2\) = 0.9692), también un ajuste excelente.

4 PRÓNOSTICOS para septiembre-diciembre del Año 5 (sin huracán)

Usamos ambos modelos para pronosticar los meses t = 49, 50, 51, 52 (septiembre a diciembre del Año 5), es decir, lo que habría ocurrido si el huracán no hubiera pasado.

nuevos <- data.frame(t = 49:52, mes = meses_cierre)

pronostico_carlson <- predict(modelo_carlson, newdata = nuevos)
pronostico_condado <- predict(modelo_condado, newdata = nuevos)

tabla_resultado <- data.frame(
  Mes = c("Septiembre","Octubre","Noviembre","Diciembre"),
  `Carlson_pronosticado` = round(pronostico_carlson, 3),
  `Condado_pronosticado` = round(pronostico_condado, 3),
  `Condado_real` = condado_real_cierre
)
tabla_resultado$Exceso_condado <- round(tabla_resultado$Condado_real - tabla_resultado$Condado_pronosticado, 3)

kable(tabla_resultado, caption = "Pronósticos (sin huracán) vs. ventas reales del condado")
Pronósticos (sin huracán) vs. ventas reales del condado
Mes Carlson_pronosticado Condado_pronosticado Condado_real Exceso_condado
Septiembre 2.231 49.913 69.0 19.087
Octubre 2.548 52.013 75.0 22.987
Noviembre 3.108 66.263 85.2 18.937
Diciembre 4.521 105.713 121.8 16.087

4.1 1. ESTIMACION DE VENTAS sin huracán

perdida_carlson <- sum(pronostico_carlson)

Sumando los cuatro meses, Carlson habría vendido aproximadamente 12.41 millones de dólares de septiembre a diciembre del Año 5 de no haber ocurrido el huracán.

4.2 2. ESTIMACION DE VENTAS sin huracán EN EL CONDADO

estimado_condado_normal <- sum(pronostico_condado)

El condado, de no haber ocurrido el huracán, habría registrado ventas totales estimadas de 273.9 millones de dólares en esos mismos cuatro meses.

4.3 3. ESTIMACION DE PERDIDA DE VENTAS (sept-dic)

Como la tienda permaneció cerrada, sus ventas reales en ese periodo fueron cero. Por lo tanto, la pérdida de ventas estimada de Carlson Department Store es igual al total pronosticado:

\[\text{Pérdida estimada Carlson} = \sum \widehat{Ventas}_{Carlson} \approx \$12.41 \text{ millones}\]

5 ¿Hubo exceso de ventas relacionado con el huracán en el condado?

condado_real_total <- sum(condado_real_cierre)
exceso_total <- condado_real_total - estimado_condado_normal
  • Ventas reales del condado, Sep-Dic Año 5: 351 millones
  • Ventas esperadas del condado sin huracán (pronóstico): 273.9 millones
  • Exceso de ventas atribuible a la actividad post-huracán: 77.1 millones
ggplot(tabla_resultado, aes(x = factor(Mes, levels = Mes))) +
  geom_col(aes(y = Condado_real, fill = "Ventas reales"), alpha = 0.85) +
  geom_col(aes(y = Condado_pronosticado, fill = "Ventas esperadas (sin huracán)"), alpha = 0.55) +
  labs(title = "Condado: ventas reales vs. ventas esperadas sin huracán",
       x = NULL, y = "Ventas ($ millones)", fill = NULL) +
  theme_minimal() +
  theme(legend.position = "bottom")

El pronóstico basado en 48 meses de historia (con tendencia y estacionalidad) predice ventas del condado muy por debajo de lo realmente observado en cada uno de los cuatro meses. La diferencia es positiva y consistente (no un solo mes atípico), lo que constituye evidencia estadística a favor de que sí existió un exceso de ventas relacionado con la actividad económica generada por la ayuda federal (más de $8,000 millones) y los pagos de seguros posteriores al huracán.

6 CONCLUSIONES

A los directivos de Carlson Department Store:

  1. Ventas perdidas de Carlson (Sep-Dic Año 5): se estima que, de no haber ocurrido el huracán, Carlson habría vendido aproximadamente $12.41 millones en esos cuatro meses. Dado que la tienda permaneció cerrada y sus ventas reales fueron cero, esta cifra representa la pérdida de ventas reclamable ante la aseguradora.

  2. Ventas esperadas del condado sin huracán: el modelo estima que el condado habría vendido $273.9 millones en el mismo periodo si no hubiera ocurrido el desastre.

  3. Exceso de ventas en el condado: las ventas reales del condado en ese periodo ($351 millones) superan la estimación normal en $77.1 millones, y el exceso se observa en los cuatro meses de forma consistente. Esto respalda el argumento de que las tiendas departamentales del condado (incluida, presumiblemente, Carlson de haber seguido operando) se beneficiaron de un incremento de actividad comercial ligado a la reconstrucción tras el huracán.

Recomendación: Carlson tiene bases sólidas para reclamar ante la aseguradora (a) la pérdida de ventas de aproximadamente $12.41 millones por el cierre, y (b) una compensación adicional o un ajuste a su favor derivado del hecho de que, de haber permanecido abierta, muy probablemente habría capturado una porción del exceso de ventas de $77.1 millones que sí experimentó el resto de las tiendas del condado durante ese mismo periodo.


Nota metodológica: ambos modelos usan variables dummy estacionales (mes) y una variable de tendencia lineal (t), ajustadas por mínimos cuadrados ordinarios sobre los 48 meses previos al huracán. Los pronósticos de septiembre a diciembre del Año 5 son extrapolaciones fuera de la muestra observada; su precisión depende de que el patrón de tendencia y estacionalidad se haya mantenido estable de no haber ocurrido el huracán, supuesto razonable dado el alto \(R^2\) de ambos modelos.

LS0tDQp0aXRsZTogIlRFTUEyX1RpbWVzZXJpZXMrR0VGQSINCnN1YnRpdGxlOiAiQW7DoWxpc2lzIGRlIHNlcmllcyBkZSB0aWVtcG8gKHRlbmRlbmNpYSArIGVzdGFjaW9uYWxpZGFkKSBtZWRpYW50ZSByZWdyZXNpw7NuIGNvbiB2YXJpYWJsZXMgZmljdGljaWFzIg0KYXV0aG9yOiAiTHVjZXJvX1NhbGF6YXJfQTAwODM0ODkzIg0KZGF0ZTogIjIwMjYtMDgtMjYiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiB0cnVlDQogICAgdG9jX2Zsb2F0OiB0cnVlDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgIHRoZW1lOiBmbGF0bHkNCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUNCi0tLQ0KIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBncmVlbjsiPklOU1RBTEFDScOTTiBERSBMSUJSRVLDjUFTPC9zcGFuPg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUsIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFLCBmaWcud2lkdGggPSA4LCBmaWcuaGVpZ2h0ID0gNC41KQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoa25pdHIpDQpgYGANCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWU7Ij5DQVJMU09OIERlcGFydG1lbnQgU3RvcmUgLSBDQVNPIERFIEVTVFVESU88L3NwYW4+DQoNCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogeWVsbG93OyI+UGxhbnRlYW1pZW50byBkZWwgcHJvYmxlbWE8L3NwYW4+DQoNCkNhcmxzb24gRGVwYXJ0bWVudCBTdG9yZSBwZXJtYW5lY2nDsyBjZXJyYWRhIGN1YXRybyBtZXNlcyAoc2VwdGllbWJyZSBhIGRpY2llbWJyZSBkZWwgQcOxbyA1KQ0KdHJhcyBlbCBwYXNvIGRlIHVuIGh1cmFjw6FuLiBTZSBkaXNwb25lIGRlICoqNDggbWVzZXMgZGUgdmVudGFzIHByZXZpYXMgYWwgaHVyYWPDoW4qKiAoZGUNCnNlcHRpZW1icmUgZGVsIEHDsW8gMSBhIGFnb3N0byBkZWwgQcOxbyA1KSB0YW50byBkZSBDYXJsc29uIGNvbW8gZGVsIHRvdGFsIGRlIHRpZW5kYXMNCmRlcGFydGFtZW50YWxlcyBkZWwgY29uZGFkbywgeSBkZSBsYXMgKip2ZW50YXMgcmVhbGVzIGRlbCBjb25kYWRvKiogZHVyYW50ZSBsb3MgY3VhdHJvIG1lc2VzIGVuDQpxdWUgQ2FybHNvbiBlc3R1dm8gY2VycmFkYS4NCg0KRWwgb2JqZXRpdm8gZXM6DQoNCjEuIEVzdGltYXIgbGFzIHZlbnRhcyBxdWUgQ2FybHNvbiBoYWJyw61hIHRlbmlkbyBkZSBzZXB0aWVtYnJlIGEgZGljaWVtYnJlIGRlbCBBw7FvIDUgc2kgbm8NCiAgIGh1YmllcmEgb2N1cnJpZG8gZWwgaHVyYWPDoW4gKHZlbnRhIHBlcmRpZGEpLg0KMi4gRXN0aW1hciBsYXMgdmVudGFzIHF1ZSBlbCBjb25kYWRvIGhhYnLDrWEgdGVuaWRvIGVuIGVzb3MgbWlzbW9zIGN1YXRybyBtZXNlcyBkZSBubyBoYWJlcg0KICAgb2N1cnJpZG8gZWwgaHVyYWPDoW4uDQozLiBDb21wYXJhciBsYSBlc3RpbWFjacOzbiBkZWwgcHVudG8gMiBjb24gbGFzIHZlbnRhcyAqcmVhbGVzKiBkZWwgY29uZGFkbyBlbiBlc2UgcGVyaW9kbywgcGFyYQ0KICAgYXJndW1lbnRhciBzaSBleGlzdGnDsyAobyBubykgdW4gZXhjZXNvIGRlIHZlbnRhcyBhdHJpYnVpYmxlIGEgbGEgYWN0aXZpZGFkIGVjb27Ds21pY2EgZ2VuZXJhZGENCiAgIHBvciBsYSByZWNvbnN0cnVjY2nDs24gdHJhcyBlbCBodXJhY8Ohbi4NCg0KIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiB5ZWxsb3c7Ij5DQVJHQSBERSBEQVRPUyAoVGFibGEgMTguMjcgKyBUYWJsYSAxOC4yOCk8L3NwYW4+DQoNCmBgYHtyIGRhdG9zLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBPcmRlbiBjcm9ub2zDs2dpY286IHQgPSAxIGVzIHNlcHRpZW1icmUgZGVsIEHDsW8gMSAuLi4gdCA9IDQ4IGVzIGFnb3N0byBkZWwgQcOxbyA1DQptZXMgPC0gYygiU2VwIiwiT2N0IiwiTm92IiwiRGljIiwNCiAgICAgICAgIHJlcChjKCJFbmUiLCJGZWIiLCJNYXIiLCJBYnIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBZ28iLCJTZXAiLCJPY3QiLCJOb3YiLCJEaWMiKSwgMyksDQogICAgICAgICAiRW5lIiwiRmViIiwiTWFyIiwiQWJyIiwiTWF5IiwiSnVuIiwiSnVsIiwiQWdvIikNCg0KYcOxbyA8LSBjKHJlcCgxLDQpLCByZXAoMiwxMiksIHJlcCgzLDEyKSwgcmVwKDQsMTIpLCByZXAoNSw4KSkNCg0KdCA8LSAxOjQ4DQoNCmNhcmxzb24gPC0gYygxLjcxLDEuOTAsMi43NCw0LjIwLA0KICAgICAgICAgICAgIDEuNDUsMS44MCwyLjAzLDEuOTksMi4zMiwyLjIwLDIuMTMsMi40MywxLjkwLDIuMTMsMi41Niw0LjE2LA0KICAgICAgICAgICAgIDIuMzEsMS44OSwyLjAyLDIuMjMsMi4zOSwyLjE0LDIuMjcsMi4yMSwxLjg5LDIuMjksMi44Myw0LjA0LA0KICAgICAgICAgICAgIDIuMzEsMS45OSwyLjQyLDIuNDUsMi41NywyLjQyLDIuNDAsMi41MCwyLjA5LDIuNTQsMi45Nyw0LjM1LA0KICAgICAgICAgICAgIDIuNTYsMi4yOCwyLjY5LDIuNDgsMi43MywyLjM3LDIuMzEsMi4yMykNCg0KY29uZGFkbyA8LSBjKDU1LjgwLDU2LjQwLDcxLjQwLDExNy42MCwNCiAgICAgICAgICAgICA0Ni44MCw0OC4wMCw2MC4wMCw1Ny42MCw2MS44MCw1OC4yMCw1Ni40MCw2My4wMCw1Ny42MCw1My40MCw3MS40MCwxMTQuMDAsDQogICAgICAgICAgICAgNDYuODAsNDguNjAsNjAuMDAsNTguMjAsNjAuNjAsNTUuMjAsNTEuMDAsNTguODAsNDkuODAsNTQuNjAsNjUuNDAsMTAyLjAwLA0KICAgICAgICAgICAgIDQzLjgwLDQ1LjYwLDU5LjQwLDUzLjQwLDU2LjQwLDUyLjgwLDU0LjAwLDYwLjYwLDQ3LjQwLDU0LjYwLDY3LjgwLDEwMC4yMCwNCiAgICAgICAgICAgICA0OC4wMCw1MS42MCw1Ny42MCw1OC4yMCw2MC4wMCw1Ny4wMCw1Ny42MCw2MS44MCkNCg0KZGF0b3MgPC0gZGF0YS5mcmFtZSh0LCBhw7FvLCBtZXMsIGNhcmxzb24sIGNvbmRhZG8pDQoNCiMgQXNlZ3VyYW1vcyBxdWUgIm1lcyIgc2VhIHVuIGZhY3RvciBjb24gb3JkZW4gY2FsZW5kYXJpbyAoRW5lIGNvbW8gYmFzZSkNCm5pdmVsZXNfbWVzIDwtIGMoIkVuZSIsIkZlYiIsIk1hciIsIkFiciIsIk1heSIsIkp1biIsIkp1bCIsIkFnbyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRpYyIpDQpkYXRvcyRtZXMgPC0gZmFjdG9yKGRhdG9zJG1lcywgbGV2ZWxzID0gbml2ZWxlc19tZXMpDQoNCmthYmxlKGhlYWQoZGF0b3MsIDEyKSwgY2FwdGlvbiA9ICJQcmltZXJhcyAxMiBvYnNlcnZhY2lvbmVzIGRlIGxhIGJhc2UgZGUgZGF0b3MgKDQ4IG1lc2VzIHByZXZpb3MgYWwgaHVyYWPDoW4pIikNCmBgYA0KDQpWZW50YXMgcmVhbGVzIGRlbCBjb25kYWRvIGR1cmFudGUgbG9zIGN1YXRybyBtZXNlcyBlbiBxdWUgQ2FybHNvbiBwZXJtYW5lY2nDsyBjZXJyYWRhDQooc2VwdGllbWJyZSBhIGRpY2llbWJyZSBkZWwgQcOxbyA1KSwgdXNhZGFzIG3DoXMgYWRlbGFudGUgcGFyYSBldmFsdWFyIGVsIGV4Y2VzbyBkZSB2ZW50YXM6DQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQptZXNlc19jaWVycmUgPC0gZmFjdG9yKGMoIlNlcCIsIk9jdCIsIk5vdiIsIkRpYyIpLCBsZXZlbHMgPSBuaXZlbGVzX21lcykNCnRfY2llcnJlIDwtIDQ5OjUyDQpjb25kYWRvX3JlYWxfY2llcnJlIDwtIGMoNjkuMDAsIDc1LjAwLCA4NS4yMCwgMTIxLjgwKQ0KDQpkYXRvc19jaWVycmUgPC0gZGF0YS5mcmFtZSh0ID0gdF9jaWVycmUsIG1lcyA9IG1lc2VzX2NpZXJyZSwgY29uZGFkb19yZWFsID0gY29uZGFkb19yZWFsX2NpZXJyZSkNCmthYmxlKGRhdG9zX2NpZXJyZSwgY2FwdGlvbiA9ICJWZW50YXMgcmVhbGVzIGRlbCBjb25kYWRvLCBTZXAtRGljIEHDsW8gNSAocGVyaW9kbyBkZSBjaWVycmUgZGUgQ2FybHNvbikiKQ0KYGBgDQoNCiMgVmlzdWFsaXphY2nDs24gZGUgbGFzIHNlcmllcyBlbiBHUkFGSUNBUw0KDQpgYGB7ciBncmFmaWNhcywgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmdncGxvdChkYXRvcywgYWVzKHggPSB0LCB5ID0gY2FybHNvbikpICsNCiAgZ2VvbV9saW5lKGNvbG9yID0gInN0ZWVsYmx1ZSIpICsNCiAgZ2VvbV9wb2ludChjb2xvciA9ICJzdGVlbGJsdWUiKSArDQogIGxhYnModGl0bGUgPSAiVmVudGFzIG1lbnN1YWxlcyBkZSBDYXJsc29uIERlcGFydG1lbnQgU3RvcmUgKDQ4IG1lc2VzIHByZXZpb3MgYWwgaHVyYWPDoW4pIiwNCiAgICAgICB4ID0gIk1lcyAodCkiLCB5ID0gIlZlbnRhcyAoJCBtaWxsb25lcykiKSArDQogIHRoZW1lX21pbmltYWwoKQ0KDQpnZ3Bsb3QoZGF0b3MsIGFlcyh4ID0gdCwgeSA9IGNvbmRhZG8pKSArDQogIGdlb21fbGluZShjb2xvciA9ICJkYXJrb3JhbmdlIikgKw0KICBnZW9tX3BvaW50KGNvbG9yID0gImRhcmtvcmFuZ2UiKSArDQogIGxhYnModGl0bGUgPSAiVmVudGFzIHRvdGFsZXMgZGUgdGllbmRhcyBkZXBhcnRhbWVudGFsZXMgZGVsIGNvbmRhZG8gKDQ4IG1lc2VzIHByZXZpb3MgYWwgaHVyYWPDoW4pIiwNCiAgICAgICB4ID0gIk1lcyAodCkiLCB5ID0gIlZlbnRhcyAoJCBtaWxsb25lcykiKSArDQogIHRoZW1lX21pbmltYWwoKQ0KYGBgDQoNCkFtYmFzIHNlcmllcyBtdWVzdHJhbiB1biAqKnBhdHLDs24gZXN0YWNpb25hbCBtYXJjYWRvKiogKHBpY28gbXV5IGZ1ZXJ0ZSBlbiBkaWNpZW1icmUgcG9yIHRlbXBvcmFkYQ0KbmF2aWRlw7FhLCBtw61uaW1vcyByZWxhdGl2b3MgYSBtaXRhZCBkZSBhw7FvKSB5IHVuYSAqKmxpZ2VyYSB0ZW5kZW5jaWEqKiwgbG8gcXVlIGp1c3RpZmljYSB1biBtb2RlbG8NCmRlIHJlZ3Jlc2nDs24gY29uIHRlbmRlbmNpYSBsaW5lYWwgeSB2YXJpYWJsZXMgZHVtbXkgZXN0YWNpb25hbGVzIHBvciBtZXMuDQoNCiMgTU9ERUxPIERFIFJFR1JFU0nDk046IHRlbmRlbmNpYSArIGVzdGFjaW9uYWxpZGFkDQoNClNlIGFqdXN0YSwgcGFyYSBjYWRhIHNlcmllLCBlbCBtb2RlbG86DQoNCiQkVmVudGFzX3QgPSBcYmV0YV8wICsgXGJldGFfMSBcY2RvdCB0ICsgXHN1bV97aT0yfV57MTJ9IFxiZXRhX2kgXGNkb3QgTWVzX2kgKyBcdmFyZXBzaWxvbl90JCQNCg0KZG9uZGUgYHRgIGVzIGxhIHZhcmlhYmxlIGRlIHRlbmRlbmNpYSAoMSwgMiwgLi4uLCA0OCkgeSBgTWVzX2lgIHNvbiAxMSB2YXJpYWJsZXMgZHVtbXkgKHNlIHVzYQ0KZW5lcm8gY29tbyBtZXMgYmFzZS9kZSByZWZlcmVuY2lhKS4NCg0KIyMgTW9kZWxvIHBhcmEgQ2FybHNvbiBEZXBhcnRtZW50IFN0b3JlDQoNCmBgYHtyIG1vZGVsby1jYXJsc29uLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbW9kZWxvX2Nhcmxzb24gPC0gbG0oY2FybHNvbiB+IHQgKyBtZXMsIGRhdGEgPSBkYXRvcykNCnN1bW1hcnkobW9kZWxvX2Nhcmxzb24pDQpgYGANCg0KYGBge3IgcjItY2FybHNvbiwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCnIyX2Nhcmxzb24gPC0gc3VtbWFyeShtb2RlbG9fY2FybHNvbikkci5zcXVhcmVkDQpgYGANCg0KRWwgbW9kZWxvIGV4cGxpY2EgKipgciBzY2FsZXM6OnBlcmNlbnQocjJfY2FybHNvbiwgYWNjdXJhY3kgPSAwLjEpYCoqIGRlIGxhIHZhcmlhYmlsaWRhZCBkZSBsYXMNCnZlbnRhcyBkZSBDYXJsc29uICgkUl4yJCA9IGByIHJvdW5kKHIyX2Nhcmxzb24sNClgKSwgbG8gY3VhbCBpbmRpY2EgdW4gYWp1c3RlIG11eSBidWVuby4NCg0KIyMgTW9kZWxvIHBhcmEgbGFzIHRpZW5kYXMgZGVwYXJ0YW1lbnRhbGVzIGRlbCBjb25kYWRvDQoNCmBgYHtyIG1vZGVsby1jb25kYWRvLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbW9kZWxvX2NvbmRhZG8gPC0gbG0oY29uZGFkbyB+IHQgKyBtZXMsIGRhdGEgPSBkYXRvcykNCnN1bW1hcnkobW9kZWxvX2NvbmRhZG8pDQpgYGANCg0KYGBge3IgcjItY29uZGFkbywgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCnIyX2NvbmRhZG8gPC0gc3VtbWFyeShtb2RlbG9fY29uZGFkbykkci5zcXVhcmVkDQpgYGANCg0KRWwgbW9kZWxvIGRlbCBjb25kYWRvIGV4cGxpY2EgKipgciBzY2FsZXM6OnBlcmNlbnQocjJfY29uZGFkbywgYWNjdXJhY3kgPSAwLjEpYCoqIGRlIGxhDQp2YXJpYWJpbGlkYWQgKCRSXjIkID0gYHIgcm91bmQocjJfY29uZGFkbyw0KWApLCB0YW1iacOpbiB1biBhanVzdGUgZXhjZWxlbnRlLg0KDQojIFBSw5NOT1NUSUNPUyBwYXJhIHNlcHRpZW1icmUtZGljaWVtYnJlIGRlbCBBw7FvIDUgKHNpbiBodXJhY8OhbikNCg0KVXNhbW9zIGFtYm9zIG1vZGVsb3MgcGFyYSBwcm9ub3N0aWNhciBsb3MgbWVzZXMgYHQgPSA0OSwgNTAsIDUxLCA1MmAgKHNlcHRpZW1icmUgYSBkaWNpZW1icmUgZGVsDQpBw7FvIDUpLCBlcyBkZWNpciwgKipsbyBxdWUgaGFicsOtYSBvY3VycmlkbyBzaSBlbCBodXJhY8OhbiBubyBodWJpZXJhIHBhc2FkbyoqLg0KDQpgYGB7ciBwcm9ub3N0aWNvcywgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCm51ZXZvcyA8LSBkYXRhLmZyYW1lKHQgPSA0OTo1MiwgbWVzID0gbWVzZXNfY2llcnJlKQ0KDQpwcm9ub3N0aWNvX2Nhcmxzb24gPC0gcHJlZGljdChtb2RlbG9fY2FybHNvbiwgbmV3ZGF0YSA9IG51ZXZvcykNCnByb25vc3RpY29fY29uZGFkbyA8LSBwcmVkaWN0KG1vZGVsb19jb25kYWRvLCBuZXdkYXRhID0gbnVldm9zKQ0KDQp0YWJsYV9yZXN1bHRhZG8gPC0gZGF0YS5mcmFtZSgNCiAgTWVzID0gYygiU2VwdGllbWJyZSIsIk9jdHVicmUiLCJOb3ZpZW1icmUiLCJEaWNpZW1icmUiKSwNCiAgYENhcmxzb25fcHJvbm9zdGljYWRvYCA9IHJvdW5kKHByb25vc3RpY29fY2FybHNvbiwgMyksDQogIGBDb25kYWRvX3Byb25vc3RpY2Fkb2AgPSByb3VuZChwcm9ub3N0aWNvX2NvbmRhZG8sIDMpLA0KICBgQ29uZGFkb19yZWFsYCA9IGNvbmRhZG9fcmVhbF9jaWVycmUNCikNCnRhYmxhX3Jlc3VsdGFkbyRFeGNlc29fY29uZGFkbyA8LSByb3VuZCh0YWJsYV9yZXN1bHRhZG8kQ29uZGFkb19yZWFsIC0gdGFibGFfcmVzdWx0YWRvJENvbmRhZG9fcHJvbm9zdGljYWRvLCAzKQ0KDQprYWJsZSh0YWJsYV9yZXN1bHRhZG8sIGNhcHRpb24gPSAiUHJvbsOzc3RpY29zIChzaW4gaHVyYWPDoW4pIHZzLiB2ZW50YXMgcmVhbGVzIGRlbCBjb25kYWRvIikNCmBgYA0KDQojIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWU7Ij4xLiBFU1RJTUFDSU9OIERFIFZFTlRBUyBzaW4gaHVyYWPDoW48L3NwYW4+DQpgYGB7ciBwZXJkaWRhLWNhcmxzb259DQpwZXJkaWRhX2Nhcmxzb24gPC0gc3VtKHByb25vc3RpY29fY2FybHNvbikNCmBgYA0KDQpTdW1hbmRvIGxvcyBjdWF0cm8gbWVzZXMsIENhcmxzb24gaGFicsOtYSB2ZW5kaWRvIGFwcm94aW1hZGFtZW50ZQ0KKipgciByb3VuZChwZXJkaWRhX2Nhcmxzb24sIDIpYCBtaWxsb25lcyBkZSBkw7NsYXJlcyoqIGRlIHNlcHRpZW1icmUgYSBkaWNpZW1icmUgZGVsIEHDsW8gNSBkZSBubw0KaGFiZXIgb2N1cnJpZG8gZWwgaHVyYWPDoW4uDQoNCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZTsiPjIuIEVTVElNQUNJT04gREUgVkVOVEFTIHNpbiBodXJhY8OhbiBFTiBFTCBDT05EQURPPC9zcGFuPg0KYGBge3IgZXN0aW1hZG8tY29uZGFkb30NCmVzdGltYWRvX2NvbmRhZG9fbm9ybWFsIDwtIHN1bShwcm9ub3N0aWNvX2NvbmRhZG8pDQpgYGANCg0KRWwgY29uZGFkbywgZGUgbm8gaGFiZXIgb2N1cnJpZG8gZWwgaHVyYWPDoW4sIGhhYnLDrWEgcmVnaXN0cmFkbyB2ZW50YXMgdG90YWxlcyBlc3RpbWFkYXMgZGUNCioqYHIgcm91bmQoZXN0aW1hZG9fY29uZGFkb19ub3JtYWwsIDIpYCBtaWxsb25lcyBkZSBkw7NsYXJlcyoqIGVuIGVzb3MgbWlzbW9zIGN1YXRybyBtZXNlcy4NCg0KDQojIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWU7Ij4zLiBFU1RJTUFDSU9OIERFIFBFUkRJREEgREUgVkVOVEFTIChzZXB0LWRpYyk8L3NwYW4+DQpDb21vIGxhIHRpZW5kYSBwZXJtYW5lY2nDsyBjZXJyYWRhLCBzdXMgdmVudGFzIHJlYWxlcyBlbiBlc2UgcGVyaW9kbyBmdWVyb24gKipjZXJvKiouIFBvciBsbyB0YW50bywNCmxhIHDDqXJkaWRhIGRlIHZlbnRhcyBlc3RpbWFkYSBkZSBDYXJsc29uIERlcGFydG1lbnQgU3RvcmUgZXMgaWd1YWwgYWwgdG90YWwgcHJvbm9zdGljYWRvOg0KDQokJFx0ZXh0e1DDqXJkaWRhIGVzdGltYWRhIENhcmxzb259ID0gXHN1bSBcd2lkZWhhdHtWZW50YXN9X3tDYXJsc29ufSBcYXBwcm94IFwkYHIgcm91bmQocGVyZGlkYV9jYXJsc29uLDIpYCBcdGV4dHsgbWlsbG9uZXN9JCQNCg0KIyDCv0h1Ym8gZXhjZXNvIGRlIHZlbnRhcyByZWxhY2lvbmFkbyBjb24gZWwgaHVyYWPDoW4gZW4gZWwgY29uZGFkbz8NCg0KYGBge3IgZXhjZXNvfQ0KY29uZGFkb19yZWFsX3RvdGFsIDwtIHN1bShjb25kYWRvX3JlYWxfY2llcnJlKQ0KZXhjZXNvX3RvdGFsIDwtIGNvbmRhZG9fcmVhbF90b3RhbCAtIGVzdGltYWRvX2NvbmRhZG9fbm9ybWFsDQpgYGANCg0KLSBWZW50YXMgKipyZWFsZXMqKiBkZWwgY29uZGFkbywgU2VwLURpYyBBw7FvIDU6ICoqYHIgcm91bmQoY29uZGFkb19yZWFsX3RvdGFsLDIpYCBtaWxsb25lcyoqDQotIFZlbnRhcyAqKmVzcGVyYWRhcyoqIGRlbCBjb25kYWRvIHNpbiBodXJhY8OhbiAocHJvbsOzc3RpY28pOiAqKmByIHJvdW5kKGVzdGltYWRvX2NvbmRhZG9fbm9ybWFsLDIpYCBtaWxsb25lcyoqDQotICoqRXhjZXNvIGRlIHZlbnRhcyoqIGF0cmlidWlibGUgYSBsYSBhY3RpdmlkYWQgcG9zdC1odXJhY8OhbjogKipgciByb3VuZChleGNlc29fdG90YWwsMilgIG1pbGxvbmVzKioNCg0KYGBge3IgZ3JhZmljby1leGNlc299DQpnZ3Bsb3QodGFibGFfcmVzdWx0YWRvLCBhZXMoeCA9IGZhY3RvcihNZXMsIGxldmVscyA9IE1lcykpKSArDQogIGdlb21fY29sKGFlcyh5ID0gQ29uZGFkb19yZWFsLCBmaWxsID0gIlZlbnRhcyByZWFsZXMiKSwgYWxwaGEgPSAwLjg1KSArDQogIGdlb21fY29sKGFlcyh5ID0gQ29uZGFkb19wcm9ub3N0aWNhZG8sIGZpbGwgPSAiVmVudGFzIGVzcGVyYWRhcyAoc2luIGh1cmFjw6FuKSIpLCBhbHBoYSA9IDAuNTUpICsNCiAgbGFicyh0aXRsZSA9ICJDb25kYWRvOiB2ZW50YXMgcmVhbGVzIHZzLiB2ZW50YXMgZXNwZXJhZGFzIHNpbiBodXJhY8OhbiIsDQogICAgICAgeCA9IE5VTEwsIHkgPSAiVmVudGFzICgkIG1pbGxvbmVzKSIsIGZpbGwgPSBOVUxMKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKQ0KYGBgDQoNCkVsIHByb27Ds3N0aWNvIGJhc2FkbyBlbiA0OCBtZXNlcyBkZSBoaXN0b3JpYSAoY29uIHRlbmRlbmNpYSB5IGVzdGFjaW9uYWxpZGFkKSBwcmVkaWNlIHZlbnRhcyBkZWwNCmNvbmRhZG8gKm11eSBwb3IgZGViYWpvKiBkZSBsbyByZWFsbWVudGUgb2JzZXJ2YWRvIGVuIGNhZGEgdW5vIGRlIGxvcyBjdWF0cm8gbWVzZXMuIExhIGRpZmVyZW5jaWENCmVzIHBvc2l0aXZhIHkgY29uc2lzdGVudGUgKG5vIHVuIHNvbG8gbWVzIGF0w61waWNvKSwgbG8gcXVlIGNvbnN0aXR1eWUgKipldmlkZW5jaWEgZXN0YWTDrXN0aWNhIGENCmZhdm9yIGRlIHF1ZSBzw60gZXhpc3Rpw7MgdW4gZXhjZXNvIGRlIHZlbnRhcyoqIHJlbGFjaW9uYWRvIGNvbiBsYSBhY3RpdmlkYWQgZWNvbsOzbWljYSBnZW5lcmFkYSBwb3INCmxhIGF5dWRhIGZlZGVyYWwgKG3DoXMgZGUgJDgsMDAwIG1pbGxvbmVzKSB5IGxvcyBwYWdvcyBkZSBzZWd1cm9zIHBvc3RlcmlvcmVzIGFsIGh1cmFjw6FuLg0KDQojIENPTkNMVVNJT05FUyANCg0KKipBIGxvcyBkaXJlY3Rpdm9zIGRlIENhcmxzb24gRGVwYXJ0bWVudCBTdG9yZToqKg0KDQoxLiAqKlZlbnRhcyBwZXJkaWRhcyBkZSBDYXJsc29uIChTZXAtRGljIEHDsW8gNSk6Kiogc2UgZXN0aW1hIHF1ZSwgZGUgbm8gaGFiZXIgb2N1cnJpZG8gZWwNCiAgIGh1cmFjw6FuLCBDYXJsc29uIGhhYnLDrWEgdmVuZGlkbyBhcHJveGltYWRhbWVudGUgKipcJGByIHJvdW5kKHBlcmRpZGFfY2FybHNvbiwyKWAgbWlsbG9uZXMqKg0KICAgZW4gZXNvcyBjdWF0cm8gbWVzZXMuIERhZG8gcXVlIGxhIHRpZW5kYSBwZXJtYW5lY2nDsyBjZXJyYWRhIHkgc3VzIHZlbnRhcyByZWFsZXMgZnVlcm9uIGNlcm8sDQogICBlc3RhIGNpZnJhIHJlcHJlc2VudGEgbGEgKipww6lyZGlkYSBkZSB2ZW50YXMgcmVjbGFtYWJsZSoqIGFudGUgbGEgYXNlZ3VyYWRvcmEuDQoNCjIuICoqVmVudGFzIGVzcGVyYWRhcyBkZWwgY29uZGFkbyBzaW4gaHVyYWPDoW46KiogZWwgbW9kZWxvIGVzdGltYSBxdWUgZWwgY29uZGFkbyBoYWJyw61hIHZlbmRpZG8NCiAgICoqXCRgciByb3VuZChlc3RpbWFkb19jb25kYWRvX25vcm1hbCwyKWAgbWlsbG9uZXMqKiBlbiBlbCBtaXNtbyBwZXJpb2RvIHNpIG5vIGh1YmllcmEgb2N1cnJpZG8NCiAgIGVsIGRlc2FzdHJlLg0KDQozLiAqKkV4Y2VzbyBkZSB2ZW50YXMgZW4gZWwgY29uZGFkbzoqKiBsYXMgdmVudGFzIHJlYWxlcyBkZWwgY29uZGFkbyBlbiBlc2UgcGVyaW9kbw0KICAgKCoqXCRgciByb3VuZChjb25kYWRvX3JlYWxfdG90YWwsMilgIG1pbGxvbmVzKiopIHN1cGVyYW4gbGEgZXN0aW1hY2nDs24gbm9ybWFsIGVuDQogICAqKlwkYHIgcm91bmQoZXhjZXNvX3RvdGFsLDIpYCBtaWxsb25lcyoqLCB5IGVsIGV4Y2VzbyBzZSBvYnNlcnZhIGVuIGxvcyBjdWF0cm8gbWVzZXMgZGUgZm9ybWENCiAgIGNvbnNpc3RlbnRlLiBFc3RvIHJlc3BhbGRhIGVsIGFyZ3VtZW50byBkZSBxdWUgbGFzIHRpZW5kYXMgZGVwYXJ0YW1lbnRhbGVzIGRlbCBjb25kYWRvDQogICAoaW5jbHVpZGEsIHByZXN1bWlibGVtZW50ZSwgQ2FybHNvbiBkZSBoYWJlciBzZWd1aWRvIG9wZXJhbmRvKSBzZSBiZW5lZmljaWFyb24gZGUgdW4NCiAgIGluY3JlbWVudG8gZGUgYWN0aXZpZGFkIGNvbWVyY2lhbCBsaWdhZG8gYSBsYSByZWNvbnN0cnVjY2nDs24gdHJhcyBlbCBodXJhY8Ohbi4NCg0KKipSZWNvbWVuZGFjacOzbjoqKiBDYXJsc29uIHRpZW5lIGJhc2VzIHPDs2xpZGFzIHBhcmEgcmVjbGFtYXIgYW50ZSBsYSBhc2VndXJhZG9yYSAoYSkgbGEgcMOpcmRpZGEgZGUNCnZlbnRhcyBkZSBhcHJveGltYWRhbWVudGUgXCRgciByb3VuZChwZXJkaWRhX2Nhcmxzb24sMilgIG1pbGxvbmVzIHBvciBlbCBjaWVycmUsIHkgKGIpIHVuYQ0KY29tcGVuc2FjacOzbiBhZGljaW9uYWwgbyB1biBhanVzdGUgYSBzdSBmYXZvciBkZXJpdmFkbyBkZWwgaGVjaG8gZGUgcXVlLCBkZSBoYWJlciBwZXJtYW5lY2lkbw0KYWJpZXJ0YSwgbXV5IHByb2JhYmxlbWVudGUgaGFicsOtYSBjYXB0dXJhZG8gdW5hIHBvcmNpw7NuIGRlbCBleGNlc28gZGUgdmVudGFzIGRlDQpcJGByIHJvdW5kKGV4Y2Vzb190b3RhbCwyKWAgbWlsbG9uZXMgcXVlIHPDrSBleHBlcmltZW50w7MgZWwgcmVzdG8gZGUgbGFzIHRpZW5kYXMgZGVsIGNvbmRhZG8gZHVyYW50ZQ0KZXNlIG1pc21vIHBlcmlvZG8uDQoNCi0tLQ0KDQoqTm90YSBtZXRvZG9sw7NnaWNhOiogYW1ib3MgbW9kZWxvcyB1c2FuIHZhcmlhYmxlcyBkdW1teSBlc3RhY2lvbmFsZXMgKG1lcykgeSB1bmEgdmFyaWFibGUgZGUNCnRlbmRlbmNpYSBsaW5lYWwgKHQpLCBhanVzdGFkYXMgcG9yIG3DrW5pbW9zIGN1YWRyYWRvcyBvcmRpbmFyaW9zIHNvYnJlIGxvcyA0OCBtZXNlcyBwcmV2aW9zIGFsDQpodXJhY8Ohbi4gTG9zIHByb27Ds3N0aWNvcyBkZSBzZXB0aWVtYnJlIGEgZGljaWVtYnJlIGRlbCBBw7FvIDUgc29uIGV4dHJhcG9sYWNpb25lcyBmdWVyYSBkZSBsYQ0KbXVlc3RyYSBvYnNlcnZhZGE7IHN1IHByZWNpc2nDs24gZGVwZW5kZSBkZSBxdWUgZWwgcGF0csOzbiBkZSB0ZW5kZW5jaWEgeSBlc3RhY2lvbmFsaWRhZCBzZSBoYXlhDQptYW50ZW5pZG8gZXN0YWJsZSBkZSBubyBoYWJlciBvY3VycmlkbyBlbCBodXJhY8Ohbiwgc3VwdWVzdG8gcmF6b25hYmxlIGRhZG8gZWwgYWx0byAkUl4yJCBkZSBhbWJvcw0KbW9kZWxvcy4NCg==