Fase 1 [Descripciones multivariantes]

1. Objetivos

Hacer un analisis detenido desde el punto de vista que nos brinda la estadistica descriptiva multivariante (calculos, visualizaciones e interpretaciones) a un conjunto de datos del ranking mundial de universidades registradas en el año 2023.

1.2. Descripcion del conjunto de datos

Fuente del conjunto de datos

El conjunto de datos de trabajo se obtuvo casi totalmente de Kaggle: https://www.kaggle.com/datasets/tahirrfarooqq/2023-qs-world-university-ranking. Es conveniente anotar que Kaggle es una compañía subsidiaria de Google LLC que mantiene una comunidad online de científicos de datos y profesionales del aprendizaje automático. Esta empresa permite a sus usuarios encontrar y publicar conjuntos de datos, explorar y crear modelos en un entorno de ciencia de datos basado en la web, trabajar con otros científicos de datos e ingenieros de aprendizaje automático y participar en concursos para resolver desafíos de ciencia de datos.

Contexto del conjunto de datos

El conjunto de datos 2023 QS World University Rankings contiene información sobre las mejores universidades de todo el mundo. El conjunto de datos incluye metrícas, como el nombre de la institución, la ubicación y varias subpuntuaciones en diferentes campos, así como las clasificaciones de las universidades.

Descripcion del conjunto de datos

El conjunto de datos contiene las siguientes medidas:

  1. 2024 RANK (Posición en el Ranking 2024):
    • Representa la posición de la universidad en el ranking mundial para el año 2024.
    • Escala de medición: nominal: Las posiciones en el ranking son números enteros que representan la posición relativa de las universidades.
  2. 2023 RANK (Posición en el Ranking 2023):
    • La posición de la universidad en el ranking mundial para el año 2023.
    • Escala de medición: Nominal. Las posiciones en el ranking son números enteros que representan la posición relativa de las universidades.
  3. Size (Tamaño):
    • El tamaño de la universidad, posiblemente en términos de número de estudiantes, personal académico, etc.
    • Escala de medición: Nominal. Tamaño relativo, pero puede representarse con etiquetas como “pequeño”, “mediano” o “grande”.
  4. Focus (Enfoque):
    • El enfoque principal de la universidad, por ejemplo, en ciencia, ingeniería, artes, etc.
    • Escala de medición: Nominal. Los enfoques son etiquetas únicas sin un orden intrínseco.
  5. Research (Investigación):
    • La cantidad y calidad de la investigación realizada por la universidad.
    • Escala de medición: Nominal. Los niveles de investigación pueden ser etiquetas como “baja”, “media” o “alta”.
  6. Age Band (Grupo de Edad):
    • El rango de edad de la universidad.
    • Escala de medición: Nominal. Los grupos de edad pueden ser etiquetas como “joven”, “intermedio” o “antiguo”.
  7. Status (Estado):
    • El estado o categoría de la universidad, por ejemplo, pública o privada.
    • Escala de medición: Nominal. Los estados son etiquetas únicas sin un orden intrínseco.
  8. Rank (Rango):
    • Representa la posición de cada universidad en la clasificación mundial.
    • Escala de Medición: Ordinal. Las universidades se clasifican en función de su posición relativa, pero no se pueden realizar operaciones matemáticas significativas entre los valores de ranking.
  9. Institución:
    • El nombre de la universidad correspondiente a cada entrada en el conjunto de datos.
    • Escala de Medición: Nominal. No hay un orden específico entre las universidades; simplemente se identifican por su nombre.
  10. Código de Ubicación:
    • Representa un código único para la ubicación de cada universidad.
    • Escala de Medición: Nominal. Los códigos son identificadores únicos sin un orden específico.
  11. Ubicación:
    • Indica la ubicación geográfica de la universidad (por ejemplo, país o ciudad).
    • Escala de Medición: Nominal. No hay un orden específico entre las ubicaciones; simplemente se identifican por su nombre.
  12. Puntuación de Reputación Académica (AR):
    • Representa la reputación académica de cada universidad.
    • Escala de Medición: De Razón. Las diferencias entre los valores son significativas y se pueden realizar operaciones matemáticas entre ellos.
  13. Rango de Reputación Académica (AR):
    • Indica la posición de la universidad en términos de su reputación académica.
    • Escala de Medición: Ordinal. Las universidades se clasifican en función de su posición relativa en la reputación académica.
  14. Puntuación de Reputación del Empleador (ER):
    • Representa la reputación de la universidad entre los empleadores.
    • Escala de Medición: De Razón. Las diferencias entre los valores son significativas y se pueden realizar operaciones matemáticas entre ellos.
  15. Rango de Reputación del Empleador (ER):
    • Indica la posición de la universidad en términos de su reputación entre los empleadores.
    • Escala de Medición: Ordinal. Las universidades se clasifican en función de su posición relativa en la reputación del empleador.
  16. Puntuación de Relación entre Profesores y Estudiantes (FSR):
    • Representa la relación entre profesores y estudiantes en cada universidad.
    • Escala de Medición: De Razón. Las diferencias entre los valores son significativas y se pueden realizar operaciones matemáticas entre ellos.
  17. Rango de Relación entre Profesores y Estudiantes (FSR):
    • Indica la posición de la universidad en términos de su relación entre profesores y estudiantes.
    • Escala de Medición: Ordinal. Las universidades se clasifican en función de su posición relativa en la relación entre profesores y estudiantes.
  18. Puntuación de Citas por Profesor (CPF):
    • Representa la cantidad de citas por profesor en cada universidad.
    • Escala de Medición: De Razón. Las diferencias entre los valores son significativas y se pueden realizar operaciones matemáticas entre ellos.
  19. Rango de Citas por Profesor (CPF):
    • Indica la posición de la universidad en términos de la cantidad de citas por profesor.
    • Escala de Medición: Ordinal. Las universidades se clasifican en función de su posición relativa en las citas por profesor.
  20. Puntuación de Internacionalización (IFR):
    • Representa el nivel de internacionalización de cada universidad.
    • Escala de Medición: De Razón. Las diferencias entre los valores son significativas y se pueden realizar operaciones matemáticas entre ellos.
  21. Rango de Internacionalización (IFR):
    • Indica la posición de la universidad en términos de su nivel de internacionalización.
    • Escala de Medición: Ordinal. Las universidades se clasifican en función de su posición relativa.
  22. Puntuación de Internacionalización de los Estudiantes (ISR):
    • Indica el indice internacionalizacion de los estudias
    • Tipo de medida: Continua.
  23. Rango de Internacionalización de los Estudiantes (ISR):
    • Indica el rango en el indicador de internacionalización de los estudiantes.
    • Tipo de medida: Discreta.
  24. Puntuación de Relaciones Internacionales (IRN):
    • Representa la puntuación en el indicador de relaciones internacionales.
    • Tipo de medida: Continua.
  25. Rango de Relaciones Internacionales (IRN):
    • Descripción: Mide el rango en el indicador de relaciones internacionales.
    • Tipo de medida: Discreta.
  26. Puntuación de Proporción de Estudiantes Graduados (GER):
    • Descripción: Evalúa la proporción de estudiantes graduados en la universidad.
    • Tipo de medida: Continua.
  27. Rango de Proporción de Estudiantes Graduados (GER):
    • Descripción: Indica el rango en el indicador de proporción de estudiantes graduados.
    • Tipo de medida: Discreta.

Estructura del conjunto de datos inicial

str(Universidad_Dataset)
## tibble [1,323 × 29] (S3: tbl_df/tbl/data.frame)
##  $ rank display : num [1:1323] 1 2 3 4 5 6 7 8 9 10 ...
##  $ rank display2: num [1:1323] 1 2 4 5 3 6 9 11 8 27 ...
##  $ institution  : chr [1:1323] "Massachusetts Institute of Technology (MIT)" "University of Cambridge" "University of Oxford" "Harvard University" ...
##  $ location code: chr [1:1323] "US" "UK" "UK" "US" ...
##  $ location     : chr [1:1323] "United States" "United Kingdom" "United Kingdom" "United States" ...
##  $ size         : chr [1:1323] "M" "L" "L" "L" ...
##  $ focus        : chr [1:1323] "CO" "FC" "FC" "FC" ...
##  $ research     : chr [1:1323] "VH" "VH" "VH" "VH" ...
##  $ age band     : num [1:1323] 5 5 5 5 5 5 5 3 5 5 ...
##  $ status       : num [1:1323] 1 0 0 1 1 0 0 0 0 0 ...
##  $ ar score     : num [1:1323] 100 100 100 100 100 98.3 98.8 99.4 99.5 100 ...
##  $ ar rank      : num [1:1323] 4 3 2 1 5 23 19 15 13 6 ...
##  $ er score     : num [1:1323] 100 100 100 100 100 99.4 83.6 88.6 97.9 100 ...
##  $ er rank      : num [1:1323] 2 4 5 1 3 12 62 54 22 6 ...
##  $ fsr score    : num [1:1323] 100 100 100 98.3 100 98.5 72.1 76.5 98.4 20.5 ...
##  $ fsr rank     : num [1:1323] 16 14 8 44 11 42 177 157 43 656 ...
##  $ cpf score    : num [1:1323] 100 92.3 90.6 100 99.9 94 98.9 93.2 74.3 99.9 ...
##  $ cpf rank     : num [1:1323] 4 68 73 1 8 58 21 64 131 7 ...
##  $ ifr score    : num [1:1323] 100 100 98.2 84.6 99.9 100 100 100 99.1 92.2 ...
##  $ ifr rank     : num [1:1323] 56 64 110 210 78 61 22 33 96 172 ...
##  $ isr score    : num [1:1323] 88.2 95.8 98.2 66.8 51.2 100 98.5 81.9 100 63.9 ...
##  $ isr rank     : num [1:1323] 128 85 60 223 284 14 56 154 15 235 ...
##  $ irn score    : num [1:1323] 94.3 99.9 100 100 95.8 96.7 96 76.3 100 92.4 ...
##  $ irn rank     : num [1:1323] 58 7 1 5 44 35 42 165 2 66 ...
##  $ ger score    : num [1:1323] 100 100 100 100 100 83 79.1 100 51.6 98.7 ...
##  $ ger rank     : num [1:1323] 4 6 3 1 2 45 52 7 126 15 ...
##  $ SUS SCORE    : num [1:1323] 95.2 97.3 97.8 96.7 94.4 94.4 88.4 88.1 92.5 100 ...
##  $ SUS RANK     : num [1:1323] 51 33 26 39 63 61 103 106 74 1 ...
##  $ Overall Score: num [1:1323] 100 99.2 98.9 98.3 98.1 97.8 93.3 92.7 92.4 90.4 ...

Visualizacion del conjunto de Datos

Universidad_Dataset
## # A tibble: 1,323 × 29
##    `rank display` `rank display2` institution     `location code` location size 
##             <dbl>           <dbl> <chr>           <chr>           <chr>    <chr>
##  1              1               1 Massachusetts … US              United … M    
##  2              2               2 University of … UK              United … L    
##  3              3               4 University of … UK              United … L    
##  4              4               5 Harvard Univer… US              United … L    
##  5              5               3 Stanford Unive… US              United … L    
##  6              6               6 Imperial Colle… UK              United … L    
##  7              7               9 ETH Zurich - S… CH              Switzer… L    
##  8              8              11 National Unive… SG              Singapo… XL   
##  9              9               8 UCL             UK              United … XL   
## 10             10              27 University of … US              United … XL   
## # ℹ 1,313 more rows
## # ℹ 23 more variables: focus <chr>, research <chr>, `age band` <dbl>,
## #   status <dbl>, `ar score` <dbl>, `ar rank` <dbl>, `er score` <dbl>,
## #   `er rank` <dbl>, `fsr score` <dbl>, `fsr rank` <dbl>, `cpf score` <dbl>,
## #   `cpf rank` <dbl>, `ifr score` <dbl>, `ifr rank` <dbl>, `isr score` <dbl>,
## #   `isr rank` <dbl>, `irn score` <dbl>, `irn rank` <dbl>, `ger score` <dbl>,
## #   `ger rank` <dbl>, `SUS SCORE` <dbl>, `SUS RANK` <dbl>, …

1.3. Estimaciones Multivariantes

Como se menciona en (Aristizábal R., 2017) la de media, varianza y covarianza conforman un conjunto de medidas fundamentales para describir el comportamiento posicional, dispersivo y correlacional de variables aleatorias. En este sentido, el conjunto de datos de trabajo que posee , y que está representado matricialmente, estima las medidas anteriores a partir de vectores y matrices en el estudio descriptivo multivariable.

El vector de medias indica el comportamiento posicional en el sentido de valor esperado o punto medio para cada variable en relación con todos sus registros. La matriz de varianzas-covarianzas estima las dispersiones, en su diagonal principal, de cada variable del conjunto de datos respecto de cada media obtenida del vector de medias. Además, por encima o por debajo de la diagonal principal, se estiman las covarianzas entre las combinaciones de los posibles pares de variables del conjunto de datos. Para más detalles se puede consultar a (Aristizábal R., 2017).

Lo anterior, para el conjunto de datos de trabajo, se desarrolla en la sección 3.2.

planteamiento del problema

Con base en el conjunto de datos descrito en la sección 2 se calcularán e intepretarán, para las variables numéricas, el vector de medias, la matriz de varianzas-covarianzas y la matriz de correlaciones. Se recuerda que las variables numéricas (en escalada de medición de razón) son: La puntuacion de AR, ER, FSR, CPF, IFR, ISR, IRN y GER.

desarrollo del analisis

La navegación a través de las pestañas muestra el cálculo de los siguientes objetos: Vector de Medias x, Matriz de Varianzas-Covarianzas S y Matriz de Correlaciones R.

vector de medias y boxplots

apply(Universidad_Dataset[,-c(1,2,3,4,5,6,7,8,9,10)], 2, mean)
##      ar score       ar rank      er score       er rank     fsr score 
##      21.81663     466.58881      21.48707     467.29554      29.17717 
##      fsr rank     cpf score      cpf rank     ifr score      ifr rank 
##     533.56992      25.07370     523.95767      31.56327     521.10809 
##     isr score      isr rank     irn score      irn rank     ger score 
##      26.74596     522.36206      25.89327     522.03250      21.02623 
##      ger rank     SUS SCORE      SUS RANK Overall Score 
##     523.02192      26.67937     515.74603      25.33605
Universidad_Dataset_Reducido = Universidad_Dataset[,-c(1,2,3,4,5,6,7,8,9,10,11,12,14,16,18,20,22,24,26,28,29)]
par(mfrow = c(1, ncol(Universidad_Dataset_Reducido)))
invisible(lapply(1:ncol(Universidad_Dataset_Reducido), function(i) boxplot(Universidad_Dataset_Reducido[, i])))

matriz de varianzas-covarianzas

round(cov(Universidad_Dataset[,-c(1,2,3,4,5,6,7,8,9,10)]),2)
##               ar score  ar rank er score  er rank fsr score fsr rank cpf score
## ar score        538.86 -4176.80   474.84 -3456.82    237.98 -1857.86    360.75
## ar rank       -4176.80 36113.27 -3678.23 28042.34  -1863.74 14672.03  -2916.68
## er score        474.84 -3678.23   604.62 -4487.93    234.06 -1838.74    280.51
## er rank       -3456.82 28042.34 -4487.93 35910.12  -1640.45 12940.82  -2083.82
## fsr score       237.98 -1863.74   234.06 -1640.45    785.61 -6193.87     96.09
## fsr rank      -1857.86 14672.03 -1838.74 12940.82  -6193.87 50421.93   -698.97
## cpf score       360.75 -2916.68   280.51 -2083.82     96.09  -698.97    804.97
## cpf rank      -2872.71 23534.20 -2206.97 16516.52   -676.38  4913.08  -6343.80
## ifr score       318.06 -2643.18   277.77 -2116.58    168.82 -1288.60    418.23
## ifr rank      -2050.52 17030.16 -1792.57 13647.29  -1090.40  8231.45  -2752.91
## isr score       278.61 -2206.87   258.66 -1861.33    205.66 -1570.48    308.37
## isr rank      -2050.39 16451.17 -1887.57 13716.42  -1517.24 11504.48  -2218.19
## irn score       497.34 -4210.91   357.47 -2726.93    154.48 -1220.67    475.41
## irn rank      -3572.14 30370.33 -2560.83 19527.00  -1120.20  8844.71  -3467.45
## ger score       346.91 -2642.94   338.70 -2488.43    166.46 -1306.99    241.75
## ger rank      -3623.88 29597.18 -3559.69 27203.70  -1681.19 13449.49  -2717.22
## SUS SCORE       526.12 -4474.55   430.80 -3255.01    171.67 -1326.74    503.09
## SUS RANK      -3793.64 32563.43 -3116.35 23582.53  -1181.73  9104.43  -3644.09
## Overall Score   419.98 -3305.14   389.29 -2855.38    244.69 -1905.58    407.84
##               cpf rank ifr score ifr rank isr score isr rank irn score irn rank
## ar score      -2872.71    318.06 -2050.52    278.61 -2050.39    497.34 -3572.14
## ar rank       23534.20  -2643.18 17030.16  -2206.87 16451.17  -4210.91 30370.33
## er score      -2206.97    277.77 -1792.57    258.66 -1887.57    357.47 -2560.83
## er rank       16516.52  -2116.58 13647.29  -1861.33 13716.42  -2726.93 19527.00
## fsr score      -676.38    168.82 -1090.40    205.66 -1517.24    154.48 -1120.20
## fsr rank       4913.08  -1288.60  8231.45  -1570.48 11504.48  -1220.67  8844.71
## cpf score     -6343.80    418.23 -2752.91    308.37 -2218.19    475.41 -3467.45
## cpf rank      51560.27  -3404.73 22384.98  -2470.14 17875.52  -3965.66 28960.44
## ifr score     -3404.73   1185.47 -7775.44    764.90 -5537.55    468.52 -3428.45
## ifr rank      22384.98  -7775.44 51894.70  -5024.99 36481.44  -3016.35 22104.34
## isr score     -2470.14    764.90 -5024.99    986.60 -7047.67    373.17 -2737.91
## isr rank      17875.52  -5537.55 36481.44  -7047.67 51889.53  -2759.01 20234.21
## irn score     -3965.66    468.52 -3016.35    373.17 -2759.01    974.08 -7102.77
## irn rank      28960.44  -3428.45 22104.34  -2737.91 20234.21  -7102.77 52326.10
## ger score     -1903.83    255.33 -1651.79    213.06 -1549.54    319.52 -2306.66
## ger rank      21859.06  -2991.89 19262.74  -2363.29 17323.35  -3703.35 26859.06
## SUS SCORE     -4206.37    521.78 -3332.82    399.30 -2936.26    760.68 -5581.70
## SUS RANK      30534.34  -3740.80 23980.51  -2837.19 20891.18  -5545.80 40790.19
## Overall Score -3237.98    387.82 -2520.00    334.69 -2432.93    446.93 -3234.92
##               ger score ger rank SUS SCORE SUS RANK Overall Score
## ar score         346.91 -3623.88    526.12 -3793.64        419.98
## ar rank        -2642.94 29597.18  -4474.55 32563.43      -3305.14
## er score         338.70 -3559.69    430.80 -3116.35        389.29
## er rank        -2488.43 27203.70  -3255.01 23582.53      -2855.38
## fsr score        166.46 -1681.19    171.67 -1181.73        244.69
## fsr rank       -1306.99 13449.49  -1326.74  9104.43      -1905.58
## cpf score        241.75 -2717.22    503.09 -3644.09        407.84
## cpf rank       -1903.83 21859.06  -4206.37 30534.34      -3237.98
## ifr score        255.33 -2991.89    521.78 -3740.80        387.82
## ifr rank       -1651.79 19262.74  -3332.82 23980.51      -2520.00
## isr score        213.06 -2363.29    399.30 -2837.19        334.69
## isr rank       -1549.54 17323.35  -2936.26 20891.18      -2432.93
## irn score        319.52 -3703.35    760.68 -5545.80        446.93
## irn rank       -2306.66 26859.06  -5581.70 40790.19      -3234.92
## ger score        435.38 -4314.60    387.52 -2764.79        296.08
## ger rank       -4314.60 52162.62  -4417.22 31800.26      -3159.58
## SUS SCORE        387.52 -4417.22    983.14 -7110.43        480.40
## SUS RANK       -2764.79 31800.26  -7110.43 52608.51      -3457.01
## Overall Score    296.08 -3159.58    480.40 -3457.01        382.24

matriz de correlaciones

round(cor(Universidad_Dataset[,-c(1,2,3,4,5,6,7,8,9,10)]),2)
##               ar score ar rank er score er rank fsr score fsr rank cpf score
## ar score          1.00   -0.95     0.83   -0.79      0.37    -0.36      0.55
## ar rank          -0.95    1.00    -0.79    0.78     -0.35     0.34     -0.54
## er score          0.83   -0.79     1.00   -0.96      0.34    -0.33      0.40
## er rank          -0.79    0.78    -0.96    1.00     -0.31     0.30     -0.39
## fsr score         0.37   -0.35     0.34   -0.31      1.00    -0.98      0.12
## fsr rank         -0.36    0.34    -0.33    0.30     -0.98     1.00     -0.11
## cpf score         0.55   -0.54     0.40   -0.39      0.12    -0.11      1.00
## cpf rank         -0.55    0.55    -0.40    0.38     -0.11     0.10     -0.98
## ifr score         0.40   -0.40     0.33   -0.32      0.17    -0.17      0.43
## ifr rank         -0.39    0.39    -0.32    0.32     -0.17     0.16     -0.43
## isr score         0.38   -0.37     0.33   -0.31      0.23    -0.22      0.35
## isr rank         -0.39    0.38    -0.34    0.32     -0.24     0.22     -0.34
## irn score         0.69   -0.71     0.47   -0.46      0.18    -0.17      0.54
## irn rank         -0.67    0.70    -0.46    0.45     -0.17     0.17     -0.53
## ger score         0.72   -0.67     0.66   -0.63      0.28    -0.28      0.41
## ger rank         -0.68    0.68    -0.63    0.63     -0.26     0.26     -0.42
## SUS SCORE         0.72   -0.75     0.56   -0.55      0.20    -0.19      0.57
## SUS RANK         -0.71    0.75    -0.55    0.54     -0.18     0.18     -0.56
## Overall Score     0.93   -0.89     0.81   -0.77      0.45    -0.43      0.74
##               cpf rank ifr score ifr rank isr score isr rank irn score irn rank
## ar score         -0.55      0.40    -0.39      0.38    -0.39      0.69    -0.67
## ar rank           0.55     -0.40     0.39     -0.37     0.38     -0.71     0.70
## er score         -0.40      0.33    -0.32      0.33    -0.34      0.47    -0.46
## er rank           0.38     -0.32     0.32     -0.31     0.32     -0.46     0.45
## fsr score        -0.11      0.17    -0.17      0.23    -0.24      0.18    -0.17
## fsr rank          0.10     -0.17     0.16     -0.22     0.22     -0.17     0.17
## cpf score        -0.98      0.43    -0.43      0.35    -0.34      0.54    -0.53
## cpf rank          1.00     -0.44     0.43     -0.35     0.35     -0.56     0.56
## ifr score        -0.44      1.00    -0.99      0.71    -0.71      0.44    -0.44
## ifr rank          0.43     -0.99     1.00     -0.70     0.70     -0.42     0.42
## isr score        -0.35      0.71    -0.70      1.00    -0.98      0.38    -0.38
## isr rank          0.35     -0.71     0.70     -0.98     1.00     -0.39     0.39
## irn score        -0.56      0.44    -0.42      0.38    -0.39      1.00    -0.99
## irn rank          0.56     -0.44     0.42     -0.38     0.39     -0.99     1.00
## ger score        -0.40      0.36    -0.35      0.33    -0.33      0.49    -0.48
## ger rank          0.42     -0.38     0.37     -0.33     0.33     -0.52     0.51
## SUS SCORE        -0.59      0.48    -0.47      0.41    -0.41      0.78    -0.78
## SUS RANK          0.59     -0.47     0.46     -0.39     0.40     -0.77     0.78
## Overall Score    -0.73      0.58    -0.57      0.55    -0.55      0.73    -0.72
##               ger score ger rank SUS SCORE SUS RANK Overall Score
## ar score           0.72    -0.68      0.72    -0.71          0.93
## ar rank           -0.67     0.68     -0.75     0.75         -0.89
## er score           0.66    -0.63      0.56    -0.55          0.81
## er rank           -0.63     0.63     -0.55     0.54         -0.77
## fsr score          0.28    -0.26      0.20    -0.18          0.45
## fsr rank          -0.28     0.26     -0.19     0.18         -0.43
## cpf score          0.41    -0.42      0.57    -0.56          0.74
## cpf rank          -0.40     0.42     -0.59     0.59         -0.73
## ifr score          0.36    -0.38      0.48    -0.47          0.58
## ifr rank          -0.35     0.37     -0.47     0.46         -0.57
## isr score          0.33    -0.33      0.41    -0.39          0.55
## isr rank          -0.33     0.33     -0.41     0.40         -0.55
## irn score          0.49    -0.52      0.78    -0.77          0.73
## irn rank          -0.48     0.51     -0.78     0.78         -0.72
## ger score          1.00    -0.91      0.59    -0.58          0.73
## ger rank          -0.91     1.00     -0.62     0.61         -0.71
## SUS SCORE          0.59    -0.62      1.00    -0.99          0.78
## SUS RANK          -0.58     0.61     -0.99     1.00         -0.77
## Overall Score      0.73    -0.71      0.78    -0.77          1.00

1.4.Gráficas multivariadas

En la guía de clase de ( Aristizábal R., 2017 ) se menciona que, en general, los gráficos multivariados cumplen dos objetivos esenciales: primero, ayudan a comparar el comportamiento de poblaciones de estudio con base en variables categóricas y suavizan la comprensión de la Estructura de evaluación entre varias variables. En este sentido, el conjunto de datos de trabajo tendrá apoyo descriptivo gráfico a través de tres diagramas: uno conjunto que integra dispersión, distribución y correlaciones; otro basado en la renderización de polígonos, y por último, uno que recurre a las caras de Chernoff.

Planteamiento del Problema

Con base en el conjunto de datos descrito en la sección 2 se calcularán e interpretarán, para las variables numéricas, las gráficas multivariadas de diagrama de correlaciones, matriz de diagrama de dispersión, diagrama de estrellas y caras de Chernoff. Se recuerda que las variables numéricas (en escalada de medición de razón) son: La puntuacion de AR, ER, FSR, CPF, IFR, ISR, IRN y GER.

Desarrollo del Análisis

La navegación a través de las pestañas muestra las gráficas multivariadas de: Diagrama Conjunto de Dispersión, Distribución y Correlaciones (sin agrupación SA y con agrupación CA (con base en las tres variables categóricas: AR, ER, FSR, CPF, IFR, ISR, IRN,GER, Overall Score), Diagrama de Estrellas y Caras de Chernoff. Con base en la pestaña Diagrama Conjunto de Dispersión, Distribución y Correlaciones se puede describir que las correlaciones más altas , mayores que 0.9 , se dan entre variables esperadas como: AR, ER, FSR, CPF, IFR,ISR,IRN,GER y Overall Score . Estas variables, según las definiciones dadas en la sección 2 de descripción de datos, son nucleares en el fenómeno estudiado, porque están involucradas con el historial de rendimiento y desempeño de la universidad, su puntaje, puntuación de reputación(académica,empleador y estudiantes), rango de reputación(académica,empleador y estudiantes), puntualización de internalicionalizacion, puntuación total .

Con base en la pestaña Diagrama de Estrellas se interpreta que hay una variedad notoria de términos de desempeños asociados con las variables numéricas estudiadas, incluso con la que mide el status. Pero, también es notoria la presencia de grupos de universidades con desempeños aproximadamente homogéneos en todas las variables estudiadas, aunque sus escalas de desempeño varían. Complementariamente a los diagramas de estrellas, la pestaña Caras de Chernoff muestra que la variedad de los datos es sensible de establecer. Podemos apreciar en las Caras de Chernoff número 9, 10, 12,14,17,18,19, pueden conformar un par de grupos de universidades que muestran desempeños significativos en las variables medidas, teniendo en cuenta que estas se parecen pero tienen un porcentaje de variabilidad en su color, cabello, ojos, boca y nariz, tenemos también otros grupos más pequeños conformados por 5,8 ,4 otro grupo conformado por 18 y 22 aunque con cambios de escala; es decir, los del segundo y tercer grupo se desempeñan de una manera diferente que los del primero considerando todas las variables estudiadas. Esto compagina con lo mostrado en el Diagrama de Estrellas. Por último, es relevante mencionar que las evidencias descriptivas expuestas en este apartado estén en contra de considerar que el conjunto de datos limitado a las variables numéricas tenga una distribución normal multivariada. Esto se estudia en la sección 5.

diagrama de conjunto de dispersión, correlación

library(tidyverse)
ggpairs(Universidad_Dataset[,-c(1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,22,24,26,28)])

diagrama de conjunto de dispersión, correlación

library(tidyverse)
Universidad_Dataset$status <- factor(Universidad_Dataset$status)
ggpairs(Universidad_Dataset, 
        columns = c(11, 13, 15, 17, 19, 21, 23, 25, 27, 29), 
        aes(color = status), 
        alpha = 0.5, 
        upper = list(continuous = wrap("cor", size = 2.5)))

Diagrama de estrellas

set.seed(780728)
Universidad_Dataset_Reducido = Universidad_Dataset[sample(1:nrow(Universidad_Dataset),23),-c(1,2,3,4,5,6,7,8,9,10)]
stars(Universidad_Dataset_Reducido, len = 1, cex = 0.4, key.loc = c(10, 2), draw.segments = TRUE)

Caras de chernoff

set.seed(780728)
Universidad_Dataset_Reducido = Universidad_Dataset [sample(1:nrow(Universidad_Dataset),23),-c(1,2,3,4,5,6,7,8,9,10)]
faces(Universidad_Dataset_Reducido)

## effect of variables:
##  modified item       Var        
##  "height of face   " "ar score" 
##  "width of face    " "ar rank"  
##  "structure of face" "er score" 
##  "height of mouth  " "er rank"  
##  "width of mouth   " "fsr score"
##  "smiling          " "fsr rank" 
##  "height of eyes   " "cpf score"
##  "width of eyes    " "cpf rank" 
##  "height of hair   " "ifr score"
##  "width of hair   "  "ifr rank" 
##  "style of hair   "  "isr score"
##  "height of nose  "  "isr rank" 
##  "width of nose   "  "irn score"
##  "width of ear    "  "irn rank" 
##  "height of ear   "  "ger score"

1.5.Normalidad multivariada

Como menciona (Porras C., 2016) para indagar o establecer el tipo de distribución multivariada de un conjunto de datos se puede recurrir a procedimientos descriptivos, como los gráficos, o a procedimientos inferenciales, como las pruebas estadísticas. En este sentido, se alcanza generalización de resultados al usar las estos últimos, si bien los primeros apoyan a las interpretaciones.

En este apartado se contempla el uso de procedimientos inferenciales para determinar si el conjunto de datos de trabajo, en relación con sus variables numéricas, se distribuye normal multivariado (DNM). Las pruebas de normalidad multivariada (PNM) a las que será sometido son: Mardia, Henze-Zirkler, Doornik-Hansen y Royston. Para estas pruebas de normalidad los test obedecen a un nivel de significancia α=0.05 y a las hipótesis:

H0:Las variables tienen una DNM

H1:Las variables NO tienen una DNM

La prueba de Mardia se basa en extensiones de asimetría y curtosis, el cuadrado de la distancia de Mahalanobis, la cantidad de variables p por tratar y la cantidad de registros n. Además, considera que la prueba estadística para la asimetría tiene una distribución χ2 y la prueba estadística para la curtosis se distirbuye aproximadamente normal. Los detalles sobre los parámetros de las distribuciones pueden consultarse en el trabajo de (Porras C., 2016).

La prueba de Henze-Zirkler se basa en la distancia funcional, dado que si el conjunto de datos presenta una distribución normal multivariada, el estadístico de la prueba se distribuye aproximadamente como una lognormal, cuyos parámetros de media μ y varianza σ2 pueden ser consultados en (Porras C., 2016).

La prueba de Doornik-Hansen está basada en la asimetría y la curtosis de un conjunto de datos multivariados, que se transforma para garantizar la independencia. Es considerada más potente que la prueba de Shapiro-Wilk para casos multivariados. Su estadístico de prueba está definido como la suma de las transformaciones al cuadrado de la asimetría y la curtosis, y sigue, aproximadamente, una distribución χ2 . Los detalles de la prueba pueden ser consultados en (Doornik & Hansen, 2008).

La prueba de Royston recurre a las pruebas Shapiro-Wilk o Shapiro-Francia para probar la normalidad multivariada. Así, si la curtosis es mayor que 3, la prueba de Royston usa Shapiro-Francia para distribuciones leptocurticas. Mientras que para distribuciones platicurticas usa Shapiro-Wilk. En ella los parámetros son obtenidos por aproximaciones polinomiales, esto puede ser consultado en (Porras C., 2016)

Planteamiento del problema

Con base en el conjunto de datos descrito en la sección 2 se hará una prueba estadística de normalidad multivariada, con un nivel de significancia α=0.05, para establecer si sus datos métricos provienen de una población normal multivariada. Se recuerda que las variables numéricas del conjunto de datos (en escalada de medición de razón) son: AR, ER, FSR, CPF, IFR, ISR, IRN y GER.

Desarrollo del análisis

La navegación a través de las pestañas muestra que el conjunto de datos, en relación con sus variables numéricas, no se distribuye normal multivariado. En particular:

La PNM de Mardia establece que si ambas pruebas (para asimetría y curtosis) indican una normalidad multivariante, los datos siguen una DNM con un nivel de significancia \(\alpha=0.05\); sin embargo, el caso tratado es contrario a esto. Obsérvese a través de la pestaña PNM Mardia que los \(p-value\) para la asimetría (Skewness) y curtoris (Kurtosis) son mayores que el nivel de significancia. Por lo tanto, las evidencias no apoyan una hipótesis de normalidad multivariada para el conjunto de datos restringido a sus variables numéricas.

La PNM de PNM Henze-Zirkler establece que el estadístico de prueba no se distribuye aproximadamente como lo normal dado que su \(p-value\) es menor que el nivel de significancia \(\alpha=0.05\), obsérvese esto a través de la pestaña PNM Henze-Zirkler. Así, por contrarrecíproco de la implicación formulada en la descripción de la prueba en la sección 5, el conjunto de datos no está apoyado por las evidencias para seguir una distribución normal multivariada.

La PNM de Doornik-Hansen establece que su estadístico de prueba no sigue una distribución aproximadamente \(\chi^2\) dado que su \(p-value\) es menor que el nivel de significancia \(\alpha=0.05\), obsérvese esto a través de la pestaña PNM Doornik-Hansen. Por lo tanto, las evidencias están lejos de apoyar que el conjunto de datos sigue una DNM.

La PNM de Royston establece que el conjunto de datos reducido a sus variables numéricas no sigue una DNM, dado que su \(p-value\) es menor que el nivel de significancia \(\alpha=0.05\). Obsérvese esto a través de la pestaña PNM Royston.

En general, pudo constatarse que para un nivel de significancia \(\alpha=0.05\) el conjunto de datos reducido a sus variables numéricas no sigue una distribución normal multivariada.

PNM Mardia

mvn(Universidad_Dataset[,-c(1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,22,24,26,28)], mvnTest="mardia")
## $multivariateNormality
##              Test        Statistic p value Result
## 1 Mardia Skewness  5616.9457970419       0     NO
## 2 Mardia Kurtosis 35.9498571587682       0     NO
## 3             MVN             <NA>    <NA>     NO
## 
## $univariateNormality
##                Test      Variable Statistic   p value Normality
## 1  Anderson-Darling   ar score     123.3862  <0.001      NO    
## 2  Anderson-Darling   er score     112.9612  <0.001      NO    
## 3  Anderson-Darling   fsr score     81.3454  <0.001      NO    
## 4  Anderson-Darling   cpf score     97.1423  <0.001      NO    
## 5  Anderson-Darling   ifr score    112.0499  <0.001      NO    
## 6  Anderson-Darling   isr score    117.1051  <0.001      NO    
## 7  Anderson-Darling   irn score    115.1879  <0.001      NO    
## 8  Anderson-Darling   ger score    138.3226  <0.001      NO    
## 9  Anderson-Darling   SUS SCORE    108.4261  <0.001      NO    
## 10 Anderson-Darling Overall Score   64.5792  <0.001      NO    
## 
## $Descriptives
##                  n     Mean  Std.Dev Median Min Max  25th  75th      Skew
## ar score      1323 21.81663 23.21326   12.2 1.6 100  6.50 26.30 1.8613963
## er score      1323 21.48707 24.58899   11.0 1.0 100  4.50 29.10 1.6828865
## fsr score     1323 29.17717 28.02874   17.2 1.1 100  7.70 43.05 1.1673779
## cpf score     1323 25.07370 28.37199   12.0 1.0 100  3.00 39.85 1.2294236
## ifr score     1323 31.56327 34.43070   13.8 1.0 100  4.50 54.65 0.9639938
## isr score     1323 26.74596 31.41018   10.9 1.0 100  3.20 40.05 1.1938657
## irn score     1323 25.89327 31.21025    9.0 1.0 100  1.30 45.40 1.0632612
## ger score     1323 21.02623 20.86573   12.4 1.0 100  8.50 24.40 2.1508311
## SUS SCORE     1323 26.67937 31.35509   10.3 1.0 100  1.60 45.80 1.0507126
## Overall Score 1323 25.33605 19.55102   19.0 0.4 100 11.75 32.55 1.4956057
##                 Kurtosis
## ar score       2.7639734
## er score       2.0421633
## fsr score      0.2155732
## cpf score      0.3706534
## ifr score     -0.6211708
## isr score      0.0328332
## irn score     -0.2721850
## ger score      4.2281733
## SUS SCORE     -0.2957462
## Overall Score  1.9449896

PNM Henze-Zirkler

mvn(Universidad_Dataset[,-c(1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,22,24,26,28)], mvnTest="hz")
## $multivariateNormality
##            Test       HZ p value MVN
## 1 Henze-Zirkler 13.20262       0  NO
## 
## $univariateNormality
##                Test      Variable Statistic   p value Normality
## 1  Anderson-Darling   ar score     123.3862  <0.001      NO    
## 2  Anderson-Darling   er score     112.9612  <0.001      NO    
## 3  Anderson-Darling   fsr score     81.3454  <0.001      NO    
## 4  Anderson-Darling   cpf score     97.1423  <0.001      NO    
## 5  Anderson-Darling   ifr score    112.0499  <0.001      NO    
## 6  Anderson-Darling   isr score    117.1051  <0.001      NO    
## 7  Anderson-Darling   irn score    115.1879  <0.001      NO    
## 8  Anderson-Darling   ger score    138.3226  <0.001      NO    
## 9  Anderson-Darling   SUS SCORE    108.4261  <0.001      NO    
## 10 Anderson-Darling Overall Score   64.5792  <0.001      NO    
## 
## $Descriptives
##                  n     Mean  Std.Dev Median Min Max  25th  75th      Skew
## ar score      1323 21.81663 23.21326   12.2 1.6 100  6.50 26.30 1.8613963
## er score      1323 21.48707 24.58899   11.0 1.0 100  4.50 29.10 1.6828865
## fsr score     1323 29.17717 28.02874   17.2 1.1 100  7.70 43.05 1.1673779
## cpf score     1323 25.07370 28.37199   12.0 1.0 100  3.00 39.85 1.2294236
## ifr score     1323 31.56327 34.43070   13.8 1.0 100  4.50 54.65 0.9639938
## isr score     1323 26.74596 31.41018   10.9 1.0 100  3.20 40.05 1.1938657
## irn score     1323 25.89327 31.21025    9.0 1.0 100  1.30 45.40 1.0632612
## ger score     1323 21.02623 20.86573   12.4 1.0 100  8.50 24.40 2.1508311
## SUS SCORE     1323 26.67937 31.35509   10.3 1.0 100  1.60 45.80 1.0507126
## Overall Score 1323 25.33605 19.55102   19.0 0.4 100 11.75 32.55 1.4956057
##                 Kurtosis
## ar score       2.7639734
## er score       2.0421633
## fsr score      0.2155732
## cpf score      0.3706534
## ifr score     -0.6211708
## isr score      0.0328332
## irn score     -0.2721850
## ger score      4.2281733
## SUS SCORE     -0.2957462
## Overall Score  1.9449896

PNM Doornik-Hansen

mvn(Universidad_Dataset[,-c(1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,22,24,26,28)], mvnTest="dh")
## $multivariateNormality
##             Test        E df p value MVN
## 1 Doornik-Hansen 3938.846 20       0  NO
## 
## $univariateNormality
##                Test      Variable Statistic   p value Normality
## 1  Anderson-Darling   ar score     123.3862  <0.001      NO    
## 2  Anderson-Darling   er score     112.9612  <0.001      NO    
## 3  Anderson-Darling   fsr score     81.3454  <0.001      NO    
## 4  Anderson-Darling   cpf score     97.1423  <0.001      NO    
## 5  Anderson-Darling   ifr score    112.0499  <0.001      NO    
## 6  Anderson-Darling   isr score    117.1051  <0.001      NO    
## 7  Anderson-Darling   irn score    115.1879  <0.001      NO    
## 8  Anderson-Darling   ger score    138.3226  <0.001      NO    
## 9  Anderson-Darling   SUS SCORE    108.4261  <0.001      NO    
## 10 Anderson-Darling Overall Score   64.5792  <0.001      NO    
## 
## $Descriptives
##                  n     Mean  Std.Dev Median Min Max  25th  75th      Skew
## ar score      1323 21.81663 23.21326   12.2 1.6 100  6.50 26.30 1.8613963
## er score      1323 21.48707 24.58899   11.0 1.0 100  4.50 29.10 1.6828865
## fsr score     1323 29.17717 28.02874   17.2 1.1 100  7.70 43.05 1.1673779
## cpf score     1323 25.07370 28.37199   12.0 1.0 100  3.00 39.85 1.2294236
## ifr score     1323 31.56327 34.43070   13.8 1.0 100  4.50 54.65 0.9639938
## isr score     1323 26.74596 31.41018   10.9 1.0 100  3.20 40.05 1.1938657
## irn score     1323 25.89327 31.21025    9.0 1.0 100  1.30 45.40 1.0632612
## ger score     1323 21.02623 20.86573   12.4 1.0 100  8.50 24.40 2.1508311
## SUS SCORE     1323 26.67937 31.35509   10.3 1.0 100  1.60 45.80 1.0507126
## Overall Score 1323 25.33605 19.55102   19.0 0.4 100 11.75 32.55 1.4956057
##                 Kurtosis
## ar score       2.7639734
## er score       2.0421633
## fsr score      0.2155732
## cpf score      0.3706534
## ifr score     -0.6211708
## isr score      0.0328332
## irn score     -0.2721850
## ger score      4.2281733
## SUS SCORE     -0.2957462
## Overall Score  1.9449896

PNM Royston

mvn(Universidad_Dataset[,-c(1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,22,24,26,28)], mvnTest="royston")
## $multivariateNormality
##      Test        H       p value MVN
## 1 Royston 1451.997 1.510541e-307  NO
## 
## $univariateNormality
##                Test      Variable Statistic   p value Normality
## 1  Anderson-Darling   ar score     123.3862  <0.001      NO    
## 2  Anderson-Darling   er score     112.9612  <0.001      NO    
## 3  Anderson-Darling   fsr score     81.3454  <0.001      NO    
## 4  Anderson-Darling   cpf score     97.1423  <0.001      NO    
## 5  Anderson-Darling   ifr score    112.0499  <0.001      NO    
## 6  Anderson-Darling   isr score    117.1051  <0.001      NO    
## 7  Anderson-Darling   irn score    115.1879  <0.001      NO    
## 8  Anderson-Darling   ger score    138.3226  <0.001      NO    
## 9  Anderson-Darling   SUS SCORE    108.4261  <0.001      NO    
## 10 Anderson-Darling Overall Score   64.5792  <0.001      NO    
## 
## $Descriptives
##                  n     Mean  Std.Dev Median Min Max  25th  75th      Skew
## ar score      1323 21.81663 23.21326   12.2 1.6 100  6.50 26.30 1.8613963
## er score      1323 21.48707 24.58899   11.0 1.0 100  4.50 29.10 1.6828865
## fsr score     1323 29.17717 28.02874   17.2 1.1 100  7.70 43.05 1.1673779
## cpf score     1323 25.07370 28.37199   12.0 1.0 100  3.00 39.85 1.2294236
## ifr score     1323 31.56327 34.43070   13.8 1.0 100  4.50 54.65 0.9639938
## isr score     1323 26.74596 31.41018   10.9 1.0 100  3.20 40.05 1.1938657
## irn score     1323 25.89327 31.21025    9.0 1.0 100  1.30 45.40 1.0632612
## ger score     1323 21.02623 20.86573   12.4 1.0 100  8.50 24.40 2.1508311
## SUS SCORE     1323 26.67937 31.35509   10.3 1.0 100  1.60 45.80 1.0507126
## Overall Score 1323 25.33605 19.55102   19.0 0.4 100 11.75 32.55 1.4956057
##                 Kurtosis
## ar score       2.7639734
## er score       2.0421633
## fsr score      0.2155732
## cpf score      0.3706534
## ifr score     -0.6211708
## isr score      0.0328332
## irn score     -0.2721850
## ger score      4.2281733
## SUS SCORE     -0.2957462
## Overall Score  1.9449896

Fase 2 [Componentes Principales]

2.1. Objetivos

En términos generales, esta segunda etapa de estudio mostrará cálculos, visualizaciones e interpretaciones con base en el conjunto de datos tratado en la fase 1, pero ahora desde un enfoque de análisis de componentes principales sobre las variables cuantitativas, que incluirá: selección, calidad de representación, contribuciones e interpretación.

Recuérdese que el conjunto de datos de trabajo es descrito en la sección 2 y los referentes teóricos en la sección 1.

Por último, este trabajo fue procesado con R version 4.3.3 (2024-02-29 ucrt) mediado por RStudio en una plataforma x86_64-w64-mingw32. Además, por su naturaleza de publicación en línea y para cumplir con el requisito temporal de entrega, será actualizado, como máximo, hasta las 22:00hrs del viernes 24 de mayo de 2024.

2.2. Selección de Componentes

Como es mencionado en el trabajo de [@AEDMDiaz-Morales1ed] el Análisis de Componentes Principales (en adelante ACP) reestructura un conjunto de datos multivariado a través de la reducción de la cantidad de sus variables, en cuyo transfondo es innecesario asumir ninguna distribución de probabilidad de ellas. Esta reducción es lograda a través de combinaciones lineales de las variables originales, que deberán contener la mayor variabilidad posible presente en el conjunto de datos. En este sentido, el ACP logra crear nuevas variables, conocidas como componentes principales, que poseen características estadísticas de independencia (con base en el supuesto de normalidad) y no correlación.

El ACP se logra a lo largo de las siguientes fases: generación de nuevas variables, reducción dimensional del espacio de los datos, eliminación de varaibles de poco aporte e interpretación de los componentes resultantes en el contexto del problema del cual se obtuvieron los datos. Estas fases se desarrollan entre las secciones 7, 8, 9 y 10.

Planteamiento del Problema

Con base en las variables cuantitativas del conjunto de datos descrito en la sección 2 se demanda primero establecer el porcentaje de varianza explicado por cada dimensión una vez procesado el ACP; y posteriormente, con base en el autovalor medio o usando un diagrama de sedimentación, decidir cuántos componentes retener.

Desarrollo del Análisis

La navegación a través de las pestañas muestra que el conjunto de datos, en relación con sus variables numéricas, puede ser representado por un conjuto de variables más pequeño que retiene el \(57.08\) \(\%\) de la variabilidad del conjunto. En particular:

La Matriz ACP muestra seis dimensiones donde solo la primera retiene el \(57.08\) \(\%\), la siguiente el \(11.73\) \(\%\) y las demás solo porcentajes con parte entera de una cifra. En este sentido, la representatividad de la combinación lineal que define a la dimensión 1 es significativamente alta en comparación con las demás. Como esta matriz es muda en relación con las variables originales se sigue indagando la identificación de las variables que más contribuyan a la dimensión de valor propio más alto.

La Matriz de Correlaciones permite continuar con las descripciones de las combinaciones lineales que conforman a la dimensión de mayor interés: la dimensión 1. Así, esta matriz, como se mostró en la sección 3.2., ayuda a verificar que la intensidad de las corelaciones es más alta y siempre positiva entre las variables: ar score, er score, fsr score, ger score y overall score, asunto esperado en relación con el fenómeno estudiado, por lo tanto, se podría esperar que estas variables participaran en la combinación lineal que define a la dimensión 1.

La pestaña de Valores y Vectores Propios muestra estos objetos calculados a partir de la matriz de correlaciones del conjunto de datos. En este sentido, se garantiza que la suma de los valores propios sea igual a la dimensión de dicha matriz y a la variabilidad total del conjunto, por lo cual las proporciones de retención de variabilidad son de cálculo inmediato. Además, la matriz de vectores propios define para cada componente, en relación con cada variable del conjunto de datos, los coeficientes de la combinación lineal que la conforman, por ejemplo, con un ajuste a dos cifras decimales, la componente 1 estaría representada por la combinación lineal (donde \(A\) es ar score, \(E\) es er, \(F\) es fsr score, \(C\) es cpf, \(IF\) es ifr, \(IS\) es isr, \(IR\) es irn score, \(G\) es ger y \(O\) es Overall score, y ademas, son variables estandarizadas):\[Componente_1 = 0.40*A+0.36*E+0.19*F+0.31*C+0.28*IF+0.27*IS+0.33*IR+0.34*G+0.44*O\]Hasta este punto, se puede observar que se dispone de un número de dimensiones menor al número de variables tratadas, con la salvedad que las variables nuevas son incorreladas entre sí, ver la pestaña Correlaciones Comparadas.

Por último, el Gráfico de Cattell y el Gráfico de Cattell-Kaiser, de codo y sedimentación, inducen a la elección de una componente en la reducción de dimensión que retiene la cantidad de variabilidad suficiente para tratar el problema. Sin embargo, debe resaltarse que se propone elegir con base en criterios más usados, a cambio de criterios de aceptación universal. El Gráfico de Cattell muestra que los cambios en la pendiente indican que la capacidad explicativa de la dimensión 1 es del \(56.10\) \(\%\), la dimensión 2 es del \(13.00\) \(\%\) y la dimensión 3 es del \(10.04\) \(\%\), representando el \(79.50\) \(\%\) solo esas 3 dimensiónes. Así, el de Cattell-Kaiser al conjugar el instrumento gráfico anterior con el criterio de Kaiser en la misma gráfica apoya que la cantidad de dimensiones suficientes por retener es 3, aclarando que esta elección retenga un porcentaje de variabilidad adecuado para estudiar el problema.

Matriz ACP

get_eigenvalue(PCA(Universidad_Dataset[,-c(1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,22,24,26,28)], ncp = 6, scale.unit = TRUE, graph = F))
##         eigenvalue variance.percent cumulative.variance.percent
## Dim.1  5.708863992      57.08863992                    57.08864
## Dim.2  1.173355596      11.73355596                    68.82220
## Dim.3  0.995553073       9.95553073                    78.77773
## Dim.4  0.622470028       6.22470028                    85.00243
## Dim.5  0.523649123       5.23649123                    90.23892
## Dim.6  0.368727999       3.68727999                    93.92620
## Dim.7  0.280545383       2.80545383                    96.73165
## Dim.8  0.209306828       2.09306828                    98.82472
## Dim.9  0.113366660       1.13366660                    99.95839
## Dim.10 0.004161318       0.04161318                   100.00000

Matriz de Correlaciones

round(cor(Universidad_Dataset[,-c(1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,22,24,26,28)]),2)
##               ar score er score fsr score cpf score ifr score isr score
## ar score          1.00     0.83      0.37      0.55      0.40      0.38
## er score          0.83     1.00      0.34      0.40      0.33      0.33
## fsr score         0.37     0.34      1.00      0.12      0.17      0.23
## cpf score         0.55     0.40      0.12      1.00      0.43      0.35
## ifr score         0.40     0.33      0.17      0.43      1.00      0.71
## isr score         0.38     0.33      0.23      0.35      0.71      1.00
## irn score         0.69     0.47      0.18      0.54      0.44      0.38
## ger score         0.72     0.66      0.28      0.41      0.36      0.33
## SUS SCORE         0.72     0.56      0.20      0.57      0.48      0.41
## Overall Score     0.93     0.81      0.45      0.74      0.58      0.55
##               irn score ger score SUS SCORE Overall Score
## ar score           0.69      0.72      0.72          0.93
## er score           0.47      0.66      0.56          0.81
## fsr score          0.18      0.28      0.20          0.45
## cpf score          0.54      0.41      0.57          0.74
## ifr score          0.44      0.36      0.48          0.58
## isr score          0.38      0.33      0.41          0.55
## irn score          1.00      0.49      0.78          0.73
## ger score          0.49      1.00      0.59          0.73
## SUS SCORE          0.78      0.59      1.00          0.78
## Overall Score      0.73      0.73      0.78          1.00

Valores y Vectores Propios

princomp(Universidad_Dataset[,-c(1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,22,24,26,27,28)], cor = TRUE)$sdev^2
##      Comp.1      Comp.2      Comp.3      Comp.4      Comp.5      Comp.6 
## 5.049995501 1.173165470 0.936234842 0.617634217 0.459202985 0.365857068 
##      Comp.7      Comp.8      Comp.9 
## 0.279343970 0.113412416 0.005153531
princomp(Universidad_Dataset[,-c(1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,22,24,26,27,28)], cor = TRUE)$loadings[ ,1:9]
##                  Comp.1      Comp.2      Comp.3      Comp.4      Comp.5
## ar score      0.4036938  0.25608511  0.07913431  0.08423813  0.09207676
## er score      0.3572525  0.32472141 -0.03379263  0.35331701 -0.18263901
## fsr score     0.1907390  0.24916908 -0.79825294 -0.47490691  0.04377456
## cpf score     0.3079549 -0.13405790  0.39836496 -0.57719297 -0.54953164
## ifr score     0.2856499 -0.59231921 -0.13353245  0.13605674 -0.03334780
## isr score     0.2729042 -0.57365299 -0.28872753  0.21341568  0.00613073
## irn score     0.3358361 -0.04098676  0.30575392 -0.24978208  0.79705837
## ger score     0.3405372  0.25136092  0.03629685  0.41455168 -0.10939836
## Overall Score 0.4397275  0.06432460  0.02638180 -0.10526569 -0.07644560
##                    Comp.6       Comp.7        Comp.8      Comp.9
## ar score       0.22598621  0.031858184  0.7650953302  0.33490250
## er score       0.52180164  0.141051852 -0.5392739647  0.15686235
## fsr score     -0.12320491  0.040146564 -0.0729241223  0.12150618
## cpf score     -0.06679404 -0.112428833 -0.1146877136  0.25120891
## ifr score     -0.13058149  0.711389832  0.0243422453  0.07992570
## isr score      0.16693481 -0.659269566  0.0008520515  0.07066692
## irn score     -0.05046772 -0.036092456 -0.2868339209  0.09073165
## ger score     -0.77561700 -0.150811921 -0.0898629993  0.05755163
## Overall Score  0.08924634  0.008870619  0.1199966650 -0.87317724

Correlaciones Comparadas

library(corrplot)
library(stats)

datos_correlacion = Universidad_Dataset[,-c(1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,22,24,26,27,28)]
matriz_correlacion = cor(datos_correlacion)
pca_result = princomp(datos_correlacion, cor = TRUE)
matriz_correlacion_pca = cor(pca_result$scores)

par(mfrow=c(1,2))
corrplot::corrplot(matriz_correlacion, method = "color", type = "upper", number.cex = 0.4)
corrplot::corrplot(matriz_correlacion_pca, method = "color", type = "upper", number.cex = 0.4)

Gráfico de Cattell

fviz_eig(PCA(Universidad_Dataset[,-c(1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,22,24,26,27,28)], scale.unit = T, graph = F), addlabels = T, ylim=c(0,90), main = "")

Gráfico de Cattell-Kaiser

scree(Universidad_Dataset[,-c(1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,22,24,26,27,28)],factors = FALSE, pc = TRUE, main ="")

2.3. Calidad de Representación

Al retomar el trabajo de (Díaz Morales & Morales Rivera, 2012) se verifica que, una vez reducida la dimensionalidad del conjunto de datos y entendido que sus variables (estandarizadas) están representadas gráficamente por proyecciones de la hiperesfera de correlaciones, es necesario iniciar la interpretación de componentes a partir de dichas correlaciones, para luego la calidad de sus representaciones dada la reducción dimensional del conjunto de datos en términos de sus variables.

###Planteamiento del Problema Con base en el conjunto de datos descrito en la sección 2 se demanda determinar la calidad de representación de las variables cuantitativas respecto a la cantidad de dimensiones calculadas que retienen la mayor cantidad de variabilidad, ver la sección 7.

###Desarrollo del Análisis {.tabset .tabset-pills} La navegación a través de las pestañas muestra que la reducción de la dimensionalidad del conjunto de datos conduce analizar las calidades de representación en términos de la escala de contribuciones relativas basada en un cociente de proyecciones con propiedades aditivas y de respuesta en escala continua entre 0 y 1 . Así, en particular:

El Círculo de Correlaciones expresa que se puede concebir una compenente tipo tamaño en el sentido de que la dimensión 1 muestra en él una correlación positiva con las seis variables de interés, además cercanas a la frontera del círculo unitario y significativamente próximas al eje que la representa. Por otro lado, la dimensión 2 contrapone a las variables ifr score, isr score, cpf score e irn score con las demás. Otro aspecto por resaltar es la correlación mostrada entre pares de variables, que en términos del fenómeno estudiado conservan su naturaleza correlacional esperada hasta este punto del análisis. Un ejemplo resaltable es el par ifr score y isr score que, en cierto sentido, están influidas por la subjetividad, véase la sección 2.

La Matriz de Representación, por otro lado, muestra valores significativamente cercanos a 1 del cociente de proyecciones coseno cuadrado en relación con la dimensión 1. En este sentido, los puntos proyectados están altamente asociados con este componente. Así, la pestaña que muestra la Calidad de Representación indica en su escala un piso alto de 0.4 de esta manera las calidades de representación, en relación con la componente 1, están encabezadas por Overall score y cierran con fsr score.

Por último, las Coordenadas Individuales ayudan, aunque de manera menos digestiva, a identificar a nivel de observaciones a los perfiles de los registros, en este caso universidades, en relación con las, por lo menos, dimensiones más importantes de retención de variabilidad: las componentes 1 y 2. Por ejemplo, al observar los primeros 6 registros 1 al 6, se manifiestan semejanzas positivas, por otro lado, en la dimensión 2, se evidencia que los registros 14,19,20 y 22 son los unicos registros positivos.

Círculo de Correlaciones

fviz_pca_var(PCA(Universidad_Dataset[,-c(1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,22,24,26,27,28)], scale.unit = T, graph = F),col.var="#3B83BD", repel = T, col.circle = "#CDCDCD", ggtheme = theme_bw())

Matriz de Representación

(get_pca_var(PCA(Universidad_Dataset[,-c(1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,22,24,26,27,28)], ncp = 6, scale.unit = TRUE, graph = F)))$cos2
##                   Dim.1       Dim.2        Dim.3       Dim.4        Dim.5
## ar score      0.8229913 0.076935702 0.0058629258 0.004382771 3.893182e-03
## er score      0.6445277 0.123703252 0.0010691256 0.077101074 1.531764e-02
## fsr score     0.1837257 0.072836246 0.5965761058 0.139299104 8.799302e-04
## cpf score     0.4789225 0.021083568 0.1485754509 0.205765906 1.386724e-01
## ifr score     0.4120587 0.411595773 0.0166939245 0.011433296 5.106685e-04
## isr score     0.3761070 0.386062652 0.0780478926 0.028130925 1.725954e-05
## irn score     0.5695684 0.001970818 0.0875243441 0.038534869 2.917326e-01
## ger score     0.5856258 0.074123307 0.0012334533 0.106142350 5.495742e-03
## Overall Score 0.9764685 0.004854152 0.0006516189 0.006843921 2.683550e-03
##                      Dim.6
## ar score      0.0186842355
## er score      0.0996144460
## fsr score     0.0055535086
## cpf score     0.0016322509
## ifr score     0.0062384215
## isr score     0.0101954230
## irn score     0.0009318345
## ger score     0.2200929293
## Overall Score 0.0029140185

Calidad de Representación

fviz_pca_var(PCA(Universidad_Dataset[,-c(1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,22,24,26,27,28)], ncp = 6, scale.unit = TRUE, graph = F), col.var="cos2", gradient.cols=c("#00AFBB","#E7B800","#FC4E07"), repel = TRUE)

Coordenadas Individuales

head((PCA(Universidad_Dataset[,-c(1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,22,24,26,27,28)], ncp = 6, scale.unit = TRUE, graph = F))$ind$coord, n = 23L)
##       Dim.1         Dim.2       Dim.3        Dim.4      Dim.5      Dim.6
## 1  8.604819 -0.9827841796  0.72867617  0.004886556  0.6272023  0.6990522
## 2  8.629549 -0.8703370249  0.85291624 -0.162951235  0.3303241  0.6532230
## 3  8.611337 -0.8643828665  0.89130551 -0.207561260  0.2914437  0.6311618
## 4  8.302540 -1.6105942495  0.37014029  0.218885196  0.4668423  0.7639094
## 5  8.254708 -1.6527507551  0.37731843  0.256512987  0.5866384  0.9062574
## 6  8.292507 -0.5402657869  0.89273056  0.137185776  0.3541877  0.0266511
## 7  7.759548 -0.0456250417  0.05425442  0.072594296  0.3511108  0.1350172
## 8  7.782103 -0.7634340569  0.26936138 -0.506392072  0.8823736  0.8652672
## 9  7.470893 -0.2408953384  1.18653395  0.376743364 -0.3142675 -1.1410811
## 10 7.528902 -0.8096872512 -1.75479395 -1.189750900  0.7508319  0.4412548
## 11 7.448577 -1.3307879605  1.04433191 -0.672121589  0.9679218  0.5985904
## 12 7.494274 -1.3229708604  1.10896625 -0.477847762  0.1875507  1.0012503
## 13 7.204749 -1.3621008526 -0.79209203 -0.513270953  0.9102471  0.6711046
## 14 7.493966  0.0639109012 -1.49801573 -1.432257684  0.3897563  0.2101997
## 15 6.264374 -0.2488729737  1.49880114  0.828165943  2.0311157 -1.5977230
## 16 7.476871 -1.5533092010  1.46424553 -1.124463504 -0.2628562  0.6244792
## 17 6.337688 -2.6852903618  0.24878461  0.360537664  1.6903150  0.2414396
## 18 6.534529 -2.5733600656 -0.45438660 -0.319568164  1.5789015  0.2360913
## 19 7.423895  0.2995001670 -1.44554207 -1.275273027  0.4301802  0.5256798
## 20 7.264483  0.3685185855 -1.52741017 -1.363626530  0.5076237  0.1456785
## 21 7.446413 -0.5557653376  0.09222387 -1.615248519 -0.2679663  0.3554156
## 22 6.879056  0.0006484455  0.68472945 -0.327689011 -0.6108409 -1.3599230
## 23 7.356298 -1.7826455496  1.45626390 -1.108516647 -0.7170471  0.4531051

2.4. Contribuciones

Según el trabajo de [@AEDMDiaz-Morales1ed] la interpretación de resultados está vinculada con el cálculo de coordenadas, contribuciones, cosenos cuadrados, etc, por lo tanto, la conceptualización de las variables debe ser clara para establecerla con la mayor claridad posible, es decir, los datos deben ponerse en contexto. En este sentido, la contribución de una variable a una componente allana el camino de la interpretación de resultados. Esto se hace en este apartado en el sentido de calcular lor aportes con que cada variable participa para definir a cada componente generada.

Planteamiento del Problema

Con base en las variables cuantitativas del conjunto de datos descrito en la sección 2 se demanda determinar las contribuciones que hace cada variable a la construcción de cada componente.

Desarrollo del Análisis

La navegación a través de las pestañas permite reconocer en representaciones numéricas y gráficas las contribuciones de las variables del conjunto de datos a la construcción de cada componente. Así, se entiende cuánta variabilidad explica cada variable de la variabilidad total de la componente con que esté involucrada. en particular:

La Matriz de Contribuciones muestra en términos relativos la retención de variabilidad que tiene cada variable en la construcción de cada componente. Así, los diagramas de barras visualizados a través de las pestañas desde Contribuciones a D1 hasta Contribuciones a D6, muestran con base en diagramas de barras las respectivas contribuciones que hacen las variables para explicar la varianzar en cada componente; además, cada gráfico incluye una línea que ayuda a identificar la contribución media, esto ayuda a identificar con mayor facilidad a las variables que contribuyen con mayor explicación de variabilidad de los componentes que conforman.

En Contribuciones a D1 se visualiza que las variables por enciama de la contribución media: overall score, are score, er score y ger Score retienen aproximadamente el \(70.9\) \(\%\) de la variabilidad del componente 1.

En Contribuciones a D2 se visualiza que las variables por enciama de la contribución media: ifr score y isr score retienen aproximadamente el \(68\) \(\%\) de la variabilidad del componente 2.

En Contribuciones a D3 se visualiza que las variables por enciama de la contribución media: fsr score y cpf score retienen aproximadamente el \(79.3\) \(\%\) de la variabilidad del componente 3.

En Contribuciones a D4 se visualiza que las variables por enciama de la contribución media: cpf score , *fsr score, **ger score* y er score retienen aproximadamente el \(83.12\) \(\%\) de la variabilidad del componente 4.

En Contribuciones a D5 se visualiza que las variables por enciama de la contribución media: irn Score y cpf Score retienen aproximadamente el \(93.3\) \(\%\) de la variabilidad del componente 5.

Por último, en Contribuciones a D6 se visualiza que las variables por enciama de la contribución media: ger score y ir score retienen aproximadamente el \(87.18\) \(\%\) de la variabilidad del componente 6.

Con los datos procesados hasta ahora se puede proceder con la intepretación de los componentes.

Matriz de Contribuciones

(get_pca_var(PCA(Universidad_Dataset[,-c(1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,22,24,26,27,28)], ncp = 6, scale.unit = TRUE, graph = F)))$contrib
##                   Dim.1      Dim.2       Dim.3      Dim.4        Dim.5
## ar score      16.296872  6.5579583  0.62622384  0.7096062  0.847812902
## er score      12.762937 10.5443994  0.11419417 12.4832906  3.335700785
## fsr score      3.638135  6.2085228 63.72077595 22.5536572  0.191621175
## cpf score      9.483622  1.7971521 15.86946398 33.3151726 30.198502135
## ifr score      8.159585 35.0842045  1.78309157  1.8511436  0.111207568
## isr score      7.447670 32.9077749  8.33635848  4.5546255  0.003758585
## irn score     11.278592  0.1679914  9.34854592  6.2391085 63.530203898
## ger score     11.596562  6.3182312  0.13174614 17.1853092  1.196800042
## Overall Score 19.336026  0.4137654  0.06959995  1.1080865  0.584392910
##                    Dim.6
## ar score       5.1069768
## er score      27.2276949
## fsr score      1.5179449
## cpf score      0.4461444
## ifr score      1.7051527
## isr score      2.7867230
## irn score      0.2546990
## ger score     60.1581734
## Overall Score  0.7964910

Contribuciones a D1

fviz_contrib(PCA(Universidad_Dataset[,-c(1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,22,24,26,27,28)], ncp = 6, scale.unit = TRUE, graph = F), choice = "var", axes = 1, top = 10)

Contribuciones a D2

fviz_contrib(PCA(Universidad_Dataset[,-c(1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,22,24,26,27,28)], ncp = 6, scale.unit = TRUE, graph = F), choice = "var", axes = 2, top = 10)

Contribuciones a D3

fviz_contrib(PCA(Universidad_Dataset[,-c(1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,22,24,26,27,28)], ncp = 6, scale.unit = TRUE, graph = F), choice = "var", axes = 3, top = 10)

Contribuciones a D4

fviz_contrib(PCA(Universidad_Dataset[,-c(1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,22,24,26,27,28)], ncp = 6, scale.unit = TRUE, graph = F), choice = "var", axes = 4, top = 10)

Contribuciones a D5

fviz_contrib(PCA(Universidad_Dataset[,-c(1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,22,24,26,27,28)], ncp = 6, scale.unit = TRUE, graph = F), choice = "var", axes = 5, top = 10)

Contribuciones a D6

fviz_contrib(PCA(Universidad_Dataset[,-c(1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,22,24,26,27,28)], ncp = 6, scale.unit = TRUE, graph = F), choice = "var", axes = 6, top = 10)

2.5. Interpretación de Componentes

Con base en [Diaz Morales & morales rivera, 2012] se sabe que a partir de las coordenadas de los registros dimensionalmente reducidos se puede ubicar en un plano de factores para efectos de análisis e interpretación. Así, las variables reducidas son las componentes principales que se grafican como ejes en un plano, y los valores que tomen son los puntajes de las componentes. Como bien se explica en el mismo trabajo, las distancias entre los puntos definidos por los puntajes de las componentes tiene un significado relevante al ayudar a establecer semejanzas de perfiles en las observaciones hechas. Sin embargo, los valores semejantes de las variables pueden darse solo en algunas de ellas, sin esperar necesariamente a que suceda en todas. Así, se espera que las distancias en el espacio dimensional original de las observaciones queden bien representadas en el espacio reducido de las componentes.

Planteamiento del Problema

Con base en las variables cuantitativas del conjunto de datos descrito en la sección 2 se demanda definir e interpretar sus componentes principales.

Desarrollo del Análisis

La navegación a través de las pestañas permite visualizar objetos gráficos y matriciales que, al incluir lo hecho en las secciones anteriores, ayudan a robustecer la interpretación de las componentes calculadas. Como se mostró en la sección 7, la cantidad de componentes seleccionadas se redujo (según el criterio de Kaiser) a una y se estableció que la componente 1 retiene el \(57.08\) \(\%\) de la variabilidad de los datos. Así, en el círculo de correlaciones de la sección 8 se aprecia que la representación de las variables conjugadas en la componente 1 la configuran como una de tipo tamaño, lo que puede interpretarse como una especie de índice de proporcionalidad directa. Esto también se apoya con base en el hecho de que todas las variables presentan calidades de representación entre \(0.18\) y \(0.97\). En consecuencia, cuanto mayor sea el valor las variables mayor será el estado de favorabilidad de que la universidad este en un mejor Ranking a nivel de las universidades del conjunto de datos. Así, dada la naturaleza de las variables esta componente puede representar para un estudiante su medida de competitividad formativa. Al respecto:

Las pestañas Biplot de Variables y Registros Totales en S (Status), F (Focus) y R (Reserach), muestran, con base en las agrupaciones que estas variables categóricas pueden establecer, la representación en dimensionalidad reducida en el plano de factores de registros y dimensiones con base en los puntajes por componentes. En este sentido, es posible apreciar que las agrupaciones con base en Status , Focus y Research capturan diferencias acentuadas en la distribuciones de las observaciones.

Biplot de Variables y Registros [Total UR]

library(FactoMineR)
library(factoextra)

data_UR <- Universidad_Dataset[,-c(1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,22,24,26,27,28)]
data_UR <- as.data.frame(lapply(data_UR, function(x) as.numeric(as.character(x))))

if (any(!is.finite(as.matrix(data_UR)))) {
  for (i in 1:ncol(data_UR)) {
    data_UR[, i][!is.finite(data_UR[, i])] <- median(data_UR[, i], na.rm = TRUE)
  }
}

data_UR <- data_UR[complete.cases(data_UR), ]

data_All <- cbind(data_UR, status = Universidad_Dataset$status)

pca_result <- PCA(data_All, ncp = 6, scale.unit = TRUE, graph = FALSE, quali.sup = ncol(data_All))

fviz_pca_biplot(pca_result, axes = c(1, 2), repel = TRUE, habillage = ncol(data_All))

Biplot de Variables y Registros [Total G]

library(FactoMineR)
library(factoextra)

data_UR <- Universidad_Dataset[,-c(1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,22,24,26,27,28)]
data_UR <- as.data.frame(lapply(data_UR, function(x) as.numeric(as.character(x))))

if (any(!is.finite(as.matrix(data_UR)))) {
  for (i in 1:ncol(data_UR)) {
    data_UR[, i][!is.finite(data_UR[, i])] <- median(data_UR[, i], na.rm = TRUE)
  }
}

data_UR <- data_UR[complete.cases(data_UR), ]

data_All <- cbind(data_UR, focus = Universidad_Dataset$focus)

pca_result <- FactoMineR::PCA(data_All, ncp = 6, scale.unit = TRUE, graph = FALSE, quali.sup = ncol(data_All))

factoextra::fviz_pca_biplot(pca_result, axes = c(1, 2), repel = TRUE, habillage = ncol(data_All))

Biplot de Variables y Registros [Total R]

library(FactoMineR)
library(factoextra)
library(ggplot2)

data_UR <- Universidad_Dataset[,-c(1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,22,24,26,27,28)]
data_UR <- as.data.frame(lapply(data_UR, function(x) as.numeric(as.character(x))))

if (any(!is.finite(as.matrix(data_UR)))) {
  for (i in 1:ncol(data_UR)) {
    data_UR[, i][!is.finite(data_UR[, i])] <- median(data_UR[, i], na.rm = TRUE)
  }
}

data_UR <- data_UR[complete.cases(data_UR), ]

data_All <- cbind(data_UR, research = Universidad_Dataset$research)

pca_result <- FactoMineR::PCA(data_All, ncp = 6, scale.unit = TRUE, graph = FALSE, quali.sup = ncol(data_All))

factoextra::fviz_pca_biplot(pca_result, axes = c(1, 2), repel = TRUE, habillage = ncol(data_All))

Fase 3 [Correspondencias]

En términos generales, esta tercera etapa de estudio mostrará cálculos, visualizaciones e interpretaciones con base en el conjunto de datos tratado en la fase 1 y 2, pero ahora desde un enfoque de análisis de correspondencias simples y múltiples sobre las variables cuanlitativas, que incluirá: construcción de tablas de contingencias y disyuntivas completas, calidades de representación, contribuciones e interpretaciones.

Recuérdese que el conjunto de datos de trabajo es descrito en la sección 2 y los referentes teóricos en la sección 1.

Por último, este trabajo fue procesado con R version 4.3.3 (2024-02-29 ucrt) mediado por RStudio 2022.12.0 Build 353 en una plataforma x86_64-w64-mingw32. Además, por su naturaleza de publicación en línea y para cumplir con el requisito temporal de entrega, será actualizado, como máximo, hasta las 11:59 p.m. del miercoles 12 de junio de 2024.

3.1. Objetivos

3.2. Correspondencias Simples

Con base en el trabajo de [@AMARAldas-Uriel2ed] se sabe que el análisis de correspondencias simple (ACS) busca representar en un espacio multidimensional reducido la relación que exista entre las categorías de un par de variables categóricas. En este sentido, el ACS muestra las distancia entre los niveles de dos variables categóricas y, en consecuencia, ayuda a visualizar tablas de contingencia. Además, se establece que el número máximo de dimensiones que expliquen la asociación entre variables fila y columna es igual a uno menos el menor número de categorías de alguna de las variables involucradas. En consecuencia, el análisis de correspondencias permite describir la proximidad existente entre los perfiles de los objetos observados. Además, el ACS, que basa sus cálculos en tablas de contingencia, puede extenderse a más de dos variables categóricas, conociéndose como anáslisis de correspondencias múltiples (ACM), con base en una objeto llamado tabla disyuntiva completa.

Esta sección trata el análisis de correspondecias simple con base en pares de variables categóricas del conjunto de datos descrito en la sección 2. Complementariamente, la sección 12 muestra el análisis de correspondencias múltiples con base en las varaibles categóricas del mismo conjunto de datos.

Planteamiento del Problema

Con base en las variables cualitativas del conjunto de datos descrito en la sección 2 se demanda desarrollar el análisis de correspondencias, en principio simple, apoyado en tablas de contingencia y de frecuencias relativas y gráficos de perfiles y de puntos superpuestos en el primer plano factorial.

Desarrollo del Análisis

La navegación a través de las pestañas permite visualizar objetos matriciales y gráficos que ayudan a robustecer la interpretación del análisis de correspondencias simple (binario) entre cada par de varaibles categóricas del conjunto de datos: focus, Research y status. Por ser baja la cantidad de variables categóricas se trabaja el ACS sobre las tres combinaciones posibles.

La pestaña AC Parejas Totales agrupa los cálculos para todas las combinaciones de parejas de variables. En particular, en Contingencias se hacen las siguientes lecturas de ejemplo de las tablas de contingencias: en la tabla de contingencias status vs. research se encontró que el registro “VH” de la etiqueta research tiene 773 registros en el status de valor “0” y 916 de un total de 1323, y que el registro “0” es el que tiene mas registros tiene con 1043, miestras que “1” solo tiene un total de 280. En la tabla de contingencias focus vs. status se calculó que “SP” de la etiqueta focus es el que menos registros tiene con un total de 56, seguido de “FO” con 295, luego de “CO” con 416 y por ultimo “FC” con 556. Por último, en la tabla de contingencia research vs. focus se puede determinar que el reistro “SP” solo coincide con el reistro “VH” de research, por lo que se podria decir que estos registros estan estrechamente relacionados, por otro lado el registro “LO” solo tiene un registro.

PERFILES CPF Y CPC

Grafico 1 : Este gráfico facilita la comparación de cómo se distribuyen las categorías de enfoque de investigación en distintas áreas. Es evidente que las áreas “marg” y “CO” tienen una mayor diversidad de categorías en comparación con “SP” y “FO”, que están más concentradas en LO.

Grafico 2: Este gráfico de barras apiladas vertical muestra la proporción de cada área de investigación (SP, FO, FC, CO) dentro de cada categoría (HI, LO, MD, VH, marg). Las barras representan las proporciones, con la siguiente distribución:

HI (alta): Distribución equilibrada entre SP y FO, con menor presencia de FC y CO. LO (baja): Predominio de FC y CO, menor representación de SP y FO. MD (media): Principalmente FC y CO, similar a LO. VH (muy alta): Mayor diversidad, con todas las áreas representadas, aunque predomina FC. marg (marginal): Distribución más balanceada entre las áreas, con ligera predominancia de CO.

Grafico 3: Este gráfico de barras apiladas horizontal muestra la proporción del estatus (0 y 1) dentro de cada área de investigación (marg, SP, FO, FC, CO):

marg: Mayor proporción de estatus 1. SP: Predominio del estatus 0, con una proporción significativa de estatus 1. FO: Similar a SP, con más estatus 0. FC: Mayoritariamente estatus 0, con una menor proporción de estatus 1. CO: Predominio de estatus 0, pero con una buena representación de estatus 1.

Grafico 4: Este gráfico es un gráfico de barras apiladas que muestra la proporción de diferentes enfoques (SP, FO, FC, CO) en función del estado de las universidades (0 y 1). El eje y representa la proporción de universidades en cada categoría de enfoque. El eje x representa los estados de las universidades (0 y 1). Las categorías de enfoque están codificadas en diferentes colores.
* Se observa que para ambos estados (0 y 1), las proporciones de los enfoques (SP, FO, FC, CO) son relativamente similares.*Las universidades con el estado 0 parecen tener una proporción ligeramente mayor en la categoría CO en comparación con las universidades con el estado 1. La categoría SP es la menos representada en ambos estados

Grafico 5 : Este gráfico es otro gráfico de barras apiladas, pero en este caso muestra la proporción de investigación (VH, MD, LO, HI) en función del estado de las universidades (0 y 1). El eje y representa las diferentes categorías de investigación, el eje x representa la proporción de universidades en cada estado (0 y 1). En la categoría VH (muy alta), la mayoría de las universidades están en el estado 1. En las categorías MD (media) y LO (baja), hay una mezcla más equilibrada entre los estados 0 y 1, aunque el estado 0 parece estar ligeramente más representado en LO. En la categoría HI (alta), la mayoría de las universidades están en el estado 0

Grafico 6:El eje y representa la proporción de universidades en cada nivel de investigación.El eje x representa los estados de las universidades (0 y 1).Los niveles de investigación están codificados en diferentes colores: VH (Muy Alto), MD (Medio), LO (Bajo), HI (Alto).

Estado 0:

Las universidades en el estado 0 tienen una mayor proporción en los niveles de investigación HI (Alto) y LO (Bajo). La categoría HI (Alto) es la más representada, seguida de la categoría LO (Bajo). Las categorías VH (Muy Alto) y MD (Medio) tienen una representación mínima o nula en el estado 0.

Estado 1:

Las universidades en el estado 1 tienen una mayor proporción en los niveles de investigación VH (Muy Alto) y MD (Medio). La categoría VH (Muy Alto) es la más representada, seguida de la categoría MD (Medio). La proporción de las categorías LO (Bajo) y HI (Alto) es considerablemente menor en comparación con el estado 0.

Podemos concluir lo siguiente:

Estado 0: Está asociado principalmente con universidades que tienen niveles de investigación altos (HI) y bajos (LO). Esto sugiere que estas universidades tienen una variabilidad considerable en sus niveles de investigación, con una inclinación hacia extremos altos o bajos.

Estado 1: Está asociado principalmente con universidades que tienen niveles de investigación muy altos (VH) y medios (MD). Esto indica que las universidades con este estado tienen una orientación más fuerte hacia la excelencia en investigación, con un enfoque significativo en mantener niveles de investigación muy altos y medios.

Las universidades con estado 1 muestran una clara tendencia hacia niveles de investigación más elevados en comparación con las universidades con estado 0. Esto podría implicar que las universidades en el estado 1 tienen más recursos, mejores programas de investigación o políticas que favorecen el desarrollo de la investigación de alto nivel. El gráfico proporciona una visión clara de cómo los niveles de investigación están distribuidos en función del estado de las universidades, indicando que el estado 1 se asocia con una mayor calidad y cantidad en investigación comparado con el estado 0.

AC Parejas Totales

Contingencias
# Verificar la longitud de las columnas
cat("Longitud de la columna status: ", length(Universidad_Dataset$status), "\n")
## Longitud de la columna status:  1323
cat("Longitud de la columna Research: ", length(Universidad_Dataset$research), "\n")
## Longitud de la columna Research:  1323
cat("Longitud de la columna focus: ", length(Universidad_Dataset$focus), "\n")
## Longitud de la columna focus:  1323
# Verificar si hay valores NA
cat("Valores NA en status: ", sum(is.na(Universidad_Dataset$status)), "\n")
## Valores NA en status:  0
cat("Valores NA en Research: ", sum(is.na(Universidad_Dataset$research)), "\n")
## Valores NA en Research:  0
cat("Valores NA en focus: ", sum(is.na(Universidad_Dataset$focus)), "\n")
## Valores NA en focus:  0
# Eliminar filas con valores NA
Universidad_Dataset <- na.omit(Universidad_Dataset)

# Verificar la longitud de las columnas después de eliminar NA
cat("Longitud de la columna status después de omitir NA: ", length(Universidad_Dataset$status), "\n")
## Longitud de la columna status después de omitir NA:  1323
cat("Longitud de la columna Research después de omitir NA: ", length(Universidad_Dataset$research), "\n")
## Longitud de la columna Research después de omitir NA:  1323
cat("Longitud de la columna focus después de omitir NA: ", length(Universidad_Dataset$focus), "\n")
## Longitud de la columna focus después de omitir NA:  1323
# Asegurarse de que todas las columnas sean factores
Universidad_Dataset$status <- as.factor(Universidad_Dataset$status)
Universidad_Dataset$research <- as.factor(Universidad_Dataset$research)
Universidad_Dataset$focus <- as.factor(Universidad_Dataset$focus)

# Crear y mostrar las tablas de contingencia con márgenes adicionales
tabla_status_focus <- addmargins(table(Universidad_Dataset$status, Universidad_Dataset$focus))
tabla_research_focus <- addmargins(table(Universidad_Dataset$research, Universidad_Dataset$focus))
tabla_status_research <- addmargins(table(Universidad_Dataset$status, Universidad_Dataset$research))

# Imprimir las tablas
print(tabla_status_focus)
##      
##         CO   FC   FO   SP  Sum
##   0    327  463  215   38 1043
##   1     89   93   80   18  280
##   Sum  416  556  295   56 1323
print(tabla_research_focus)
##      
##         CO   FC   FO   SP  Sum
##   HI   111  155   54    0  320
##   LO     0    1    0    0    1
##   MD    23   46   17    0   86
##   VH   282  354  224   56  916
##   Sum  416  556  295   56 1323
print(tabla_status_research)
##      
##         HI   LO   MD   VH  Sum
##   0    222    1   47  773 1043
##   1     98    0   39  143  280
##   Sum  320    1   86  916 1323
Probabilidades
addmargins(prop.table(table(Universidad_Dataset$focus, Universidad_Dataset$research))*100)
##      
##                 HI           LO           MD           VH          Sum
##   CO    8.39002268   0.00000000   1.73847317  21.31519274  31.44368859
##   FC   11.71579743   0.07558579   3.47694633  26.75736961  42.02569917
##   FO    4.08163265   0.00000000   1.28495843  16.93121693  22.29780801
##   SP    0.00000000   0.00000000   0.00000000   4.23280423   4.23280423
##   Sum  24.18745276   0.07558579   6.50037793  69.23658352 100.00000000
addmargins(prop.table(table(Universidad_Dataset$focus, Universidad_Dataset$status))*100)
##      
##                0          1        Sum
##   CO   24.716553   6.727135  31.443689
##   FC   34.996221   7.029478  42.025699
##   FO   16.250945   6.046863  22.297808
##   SP    2.872260   1.360544   4.232804
##   Sum  78.835979  21.164021 100.000000
addmargins(prop.table(table(Universidad_Dataset$research, Universidad_Dataset$status))*100)
##      
##                  0            1          Sum
##   HI   16.78004535   7.40740741  24.18745276
##   LO    0.07558579   0.00000000   0.07558579
##   MD    3.55253212   2.94784580   6.50037793
##   VH   58.42781557  10.80876795  69.23658352
##   Sum  78.83597884  21.16402116 100.00000000
Frecuencias [CPF y CPC]
round(addmargins(prop.table(table(Universidad_Dataset$focus, Universidad_Dataset$research), 1)*100, 2), 2)
##     
##          HI     LO     MD     VH    Sum
##   CO  26.68   0.00   5.53  67.79 100.00
##   FC  27.88   0.18   8.27  63.67 100.00
##   FO  18.31   0.00   5.76  75.93 100.00
##   SP   0.00   0.00   0.00 100.00 100.00
round(addmargins(prop.table(table(Universidad_Dataset$focus, Universidad_Dataset$research), 2)*100, 1), 2)
##      
##           HI     LO     MD     VH
##   CO   34.69   0.00  26.74  30.79
##   FC   48.44 100.00  53.49  38.65
##   FO   16.88   0.00  19.77  24.45
##   SP    0.00   0.00   0.00   6.11
##   Sum 100.00 100.00 100.00 100.00
round(addmargins(prop.table(table(Universidad_Dataset$focus, Universidad_Dataset$status), 1)*100, 2), 2)
##     
##           0      1    Sum
##   CO  78.61  21.39 100.00
##   FC  83.27  16.73 100.00
##   FO  72.88  27.12 100.00
##   SP  67.86  32.14 100.00
round(addmargins(prop.table(table(Universidad_Dataset$focus, Universidad_Dataset$status), 2)*100, 1), 2)
##      
##            0      1
##   CO   31.35  31.79
##   FC   44.39  33.21
##   FO   20.61  28.57
##   SP    3.64   6.43
##   Sum 100.00 100.00
round(addmargins(prop.table(table(Universidad_Dataset$research, Universidad_Dataset$status), 1)*100, 2), 2)
##     
##           0      1    Sum
##   HI  69.38  30.63 100.00
##   LO 100.00   0.00 100.00
##   MD  54.65  45.35 100.00
##   VH  84.39  15.61 100.00
round(addmargins(prop.table(table(Universidad_Dataset$research, Universidad_Dataset$status), 2)*100, 1), 2)
##      
##            0      1
##   HI   21.28  35.00
##   LO    0.10   0.00
##   MD    4.51  13.93
##   VH   74.11  51.07
##   Sum 100.00 100.00
Perfiles [CPF y CPC]
plotct(table(Universidad_Dataset$focus, Universidad_Dataset$research),"row")

plotct(table(Universidad_Dataset$focus, Universidad_Dataset$research),"col")

plotct(table(Universidad_Dataset$focus, Universidad_Dataset$status),"row")

plotct(table(Universidad_Dataset$focus, Universidad_Dataset$status),"col")

plotct(table(Universidad_Dataset$research, Universidad_Dataset$status),"row")

plotct(table(Universidad_Dataset$research, Universidad_Dataset$status),"col")

Pruebas de Hipótesis
chisq.test(table(Universidad_Dataset$focus, Universidad_Dataset$research))
## Warning in chisq.test(table(Universidad_Dataset$focus,
## Universidad_Dataset$research)): Chi-squared approximation may be incorrect
## 
##  Pearson's Chi-squared test
## 
## data:  table(Universidad_Dataset$focus, Universidad_Dataset$research)
## X-squared = 42.706, df = 9, p-value = 2.441e-06
chisq.test(table(Universidad_Dataset$focus, Universidad_Dataset$status))
## 
##  Pearson's Chi-squared test
## 
## data:  table(Universidad_Dataset$focus, Universidad_Dataset$status)
## X-squared = 16.89, df = 3, p-value = 0.0007447
chisq.test(table(Universidad_Dataset$research, Universidad_Dataset$status))
## Warning in chisq.test(table(Universidad_Dataset$research,
## Universidad_Dataset$status)): Chi-squared approximation may be incorrect
## 
##  Pearson's Chi-squared test
## 
## data:  table(Universidad_Dataset$research, Universidad_Dataset$status)
## X-squared = 64.511, df = 3, p-value = 6.383e-14

AC Pareja Única

Contingencias y Residuales [R-UR]
chisq.test(table(Universidad_Dataset$research, Universidad_Dataset$status))$observed
## Warning in chisq.test(table(Universidad_Dataset$research,
## Universidad_Dataset$status)): Chi-squared approximation may be incorrect
##     
##        0   1
##   HI 222  98
##   LO   1   0
##   MD  47  39
##   VH 773 143
chisq.test(table(Universidad_Dataset$research, Universidad_Dataset$status))$expected 
## Warning in chisq.test(table(Universidad_Dataset$research,
## Universidad_Dataset$status)): Chi-squared approximation may be incorrect
##     
##                0           1
##   HI 252.2751323  67.7248677
##   LO   0.7883598   0.2116402
##   MD  67.7989418  18.2010582
##   VH 722.1375661 193.8624339
chisq.test(table(Universidad_Dataset$research, Universidad_Dataset$status))$residuals
## Warning in chisq.test(table(Universidad_Dataset$research,
## Universidad_Dataset$status)): Chi-squared approximation may be incorrect
##     
##               0          1
##   HI -1.9061138  3.6788490
##   LO  0.2383614 -0.4600437
##   MD -2.5259793  4.8752054
##   VH  1.8927235 -3.6530053
chisq.test(table(Universidad_Dataset$research, Universidad_Dataset$status))$stdres
## Warning in chisq.test(table(Universidad_Dataset$research,
## Universidad_Dataset$status)): Chi-squared approximation may be incorrect
##     
##               0          1
##   HI -4.7585999  4.7585999
##   LO  0.5183237 -0.5183237
##   MD -5.6783971  5.6783971
##   VH  7.4177261 -7.4177261
Contribuciones [R-UR]
chisq.test(table(Universidad_Dataset$research, Universidad_Dataset$status))$residuals^2/chisq.test(table(Universidad_Dataset$research, Universidad_Dataset$status))$statistic*100
## Warning in chisq.test(table(Universidad_Dataset$research,
## Universidad_Dataset$status)): Chi-squared approximation may be incorrect

## Warning in chisq.test(table(Universidad_Dataset$research,
## Universidad_Dataset$status)): Chi-squared approximation may be incorrect
##     
##                0           1
##   HI  5.63204170 20.97935534
##   LO  0.08807246  0.32806991
##   MD  9.89071686 36.84292031
##   VH  5.55319014 20.68563329
Correspondencia Simple Unidimensional [R-UR]
CA(table(Universidad_Dataset$research, Universidad_Dataset$status), graph = FALSE)$eig
##       eigenvalue percentage of variance cumulative percentage of variance
## dim 1 0.04876093                    100                               100
CA(table(Universidad_Dataset$research, Universidad_Dataset$status), graph = FALSE)$col
## $coord
##         [,1]
## 0  0.1144123
## 1 -0.4261859
## 
## $contrib
##       [,1]
## 0 21.16402
## 1 78.83598
## 
## $cos2
##   [,1]
## 0    1
## 1    1
## 
## $inertia
## [1] 0.01031977 0.03844115
CA(table(Universidad_Dataset$research, Universidad_Dataset$status), graph = FALSE)$row
## $coord
##         HI         LO         MD         VH 
## -0.2316193  0.5181278 -0.5920815  0.1359378 
## 
## $contrib
##         HI         LO         MD         VH 
## 26.6113970  0.4161424 46.7336372 26.2388234 
## 
## $cos2
## HI LO MD VH 
##  1  1  1  1 
## 
## $inertia
## [1] 0.0129759638 0.0002029149 0.0227877545 0.0127942934

Correspondencias Múltiples

Recuperando de nuevo el trabajo de [@AEDMDiaz-Morales1ed] se dice que el ACS se puede extender desde tablas de contingencia hacia tablas disyuntivas completas. En estas las filas son los objetos a los cuales se les registran características de interés a través de las columnas que compilan las modalidades de las variables categóricas estudiadas de ellos. Así, el análisis de correspondencias múltiple (ACM) es el AC aplicado a una tabla disyuntiva completa. Por lo tanto, en el ACM una variable categórica asigna a cada objeto de una población una modalidad a través de la cual los particiona exclusiva y exhaustivamente.

Esta sección es desarrollada como alternativa de completitud del análisis de correspondencias simples que en la sección 11 fue inapreciable debido a la unidimensionalidad de la representación de los datos a nivel de proyección de las variables categóricas que cumplieron la hipótesis de dependencia. Por lo tanto, del tratamiento conjunto de todas las varaibles categóricas se espera obtener una representación en el primer plano factorial.

Planteamiento del Problema

Con base en las variables cualitativas del conjunto de datos descrito en la sección 2 se demanda desarrollar el análisis de correspondencias múltiples para lograr una representación gráfica en el primer plano factorial, debido a la imposibilidad de lograrlo en el análisis de correspondencias simple.

Desarrollo del Análisis

La navegación a través de las pestañas permite visualizar objetos matriciales y gráficos que ayudan a desarrollar e interpretar el análisis de correspondencias múltiple (ACM) entre las variables categóricas del conjunto de datos descrito en la sección 2.

Análisis de la Tabla de Valores Propios (ACM ) La tabla proporcionada muestra los valores propios (eigenvalues), el porcentaje de varianza explicado por cada dimensión y el porcentaje acumulado de varianza explicado por las dimensiones en un Análisis de Correspondencias Múltiples (ACM). 1. Eigenvalue (Valor Propio): Representa la cantidad de varianza capturada por cada dimensión. Valores más altos indican que la dimensión explica una mayor parte de la variabilidad total en los datos. 2. Percentage of Variance (Porcentaje de Varianza): Indica el porcentaje de la varianza total explicada por cada dimensión individualmente. Es útil para determinar qué dimensiones son las más informativas. 3. Cumulative Percentage of Variance (Porcentaje Acumulado de Varianza): Muestra el porcentaje total de la varianza explicada al ir acumulando dimensiones. Ayuda a entender cuánta varianza se ha explicado al considerar múltiples dimensiones juntas. Significancia de las Dimensiones: Las dos primeras dimensiones (Dim 1 y Dim 2) juntas explican aproximadamente el 40% de la varianza total. Las tres primeras dimensiones explican más del 50% de la varianza total. Con cuatro dimensiones, se explica más del 70% de la varianza. Las seis dimensiones juntas explican el 100% de la varianza, lo cual es esperado en un ACM ya que todas las dimensiones combinadas deben explicar toda la variabilidad en los datos. Dimensiones Más Informativas: Las primeras dos dimensiones son las más informativas, explicando individualmente más del 20% y 19% de la varianza respectivamente. Las dimensiones 3 y 4 también son importantes, cada una explicando alrededor del 16% de la varianza. Las dimensiones 5 y 6, aunque menos informativas individualmente, aún aportan una cantidad significativa de información con 14.81% y 12.17% respectivamente. En aplicaciones prácticas, se podría decidir centrarse en las primeras 3 o 4 dimensiones, ya que juntas explican una parte significativa de la varianza (más del 70%). Sin embargo, si se necesita una representación completa de los datos, se deben considerar todas las dimensiones. Este análisis permite comprender mejor la estructura de la variabilidad en los datos y cómo se distribuye entre las diferentes dimensiones del ACM.

CALIDAD DE REPRESENTACIÓN Dimensiones y Varianza El gráfico de MCA presenta dos dimensiones principales: Dim1 (20.6%): Explica el 20.6% de la varianza total de los datos. Dim2 (19.1%): Explica el 19.1% de la varianza total. Interpretación de Categorías Las categorías están representadas en un plano bidimensional. La calidad de la representación de cada categoría en estas dimensiones se mide a través del cos2 (coseno cuadrado), que indica la contribución de una categoría a la definición de las dimensiones. Análisis de las Categorías Alta Representación (alto cos2): C (Categoría C): Ubicada en la parte superior derecha del gráfico, muestra una alta calidad de representación en ambas dimensiones. Su color rojo intenso indica un cos2 alto, lo que significa que esta categoría está bien representada en el espacio bidimensional. H (Categoría H): También bien representada, localizada cerca de la categoría C, con un cos2 alto. Moderada a Baja Representación (bajo cos2): FO, CO, SP, FC (Categorías FO, CO, SP y FC): Estas categorías se encuentran en la parte inferior izquierda del gráfico y están menos representadas en las dimensiones principales. Los colores más tenues (amarillo a verde) indican un cos2 menor, sugiriendo que estas categorías no contribuyen significativamente a la variabilidad capturada por Dim1 y Dim2. Datos del cos2 La tabla incluida debajo del gráfico proporciona los valores específicos de cos2 para cada categoría en las cinco dimensiones principales: C y H muestran valores cos2 significativos en las primeras dimensiones, confirmando su alta calidad de representación. FO, CO, SP, FC tienen valores cos2 más distribuidos, lo que refleja su menor contribución a las primeras dos dimensiones.

CONTRIBUCIONES

GRAFICO 1 Contribuciones Destacadas: H Tiene la contribución más alta a Dim1 con más del 40%. Esto indica que esta variable es la más influyente en la configuración de esta dimensión. B y C: Ambas tienen contribuciones significativas, con B alrededor del 25% y C cerca del 20%. Contribuciones Moderadas: FO, CO, A, FC Estas variables tienen contribuciones menores, cada una representando entre el 5% y el 10%. Contribuciones Bajas: YH y SP Estas variables tienen una contribución mínima, con valores muy por debajo del 5%. Las variables H, B y C son las más influyentes en la primera dimensión del MCA, mientras que FO, CO, A y FC también tienen un papel pero menos significativo. Las variables YH y SP contribuyen muy poco a esta dimensión. El gráfico muestra la contribución de las variables a la dimensión 2 (Dim2) en el análisis de correspondencias múltiples (MCA).

GRAFICO 2

Contribuciones Destacadas: C Tiene la contribución más alta a Dim2 con más del 40%. Esto indica que esta variable es la más influyente en la configuración de esta dimensión. FO: La siguiente contribución más significativa con alrededor del 20%. B: También tiene una contribución considerable, cercana al 15%. Contribuciones Moderadas : FC, CO Estas variables tienen contribuciones intermedias, cada una representando entre el 5% y el 10%. Contribuciones Bajas: H, SP, A, YH Estas variables tienen una contribución mínima, con valores muy por debajo del 5%. Comparación con Dim1 : En comparación con el gráfico de Dim1: C ha pasado a ser la más influyente en Dim2, mientras que H, que era la más influyente en Dim1, ahora tiene una contribución mucho menor. FO y B también son más influyentes en Dim2 en comparación con Dim1. Las variables C, FO y B son las más influyentes en la segunda dimensión del MCA, mientras que H, que era prominente en Dim1, tiene un papel menor en Dim2. Otras variables como FC y CO también contribuyen, pero en menor medida. Las variables SP, A y YH tienen contribuciones mínimas en esta dimensión.

Grafico 3

Contribuciones Destacadas: SP Tiene la contribución más alta a Dim3 con más del 40%. Esto indica que esta variable es la más influyente en la configuración de esta dimensión. CO La siguiente contribución más significativa con alrededor del 25%. FO También tiene una contribución considerable, cercana al 20%. Contribuciones Moderadas: B Esta variable tiene una contribución intermedia, cercana al 5%. Contribuciones Bajas: G, H, A, FC, YH Estas variables tienen una contribución mínima, con valores muy por debajo del 5%. Comparación con Dim1 y Dim2 : En comparación con los gráficos de Dim1 y Dim2: SP pasa a ser la más influyente en Dim3, mientras que tenía una contribución mínima en Dim1 y Dim2. CO y FO también aumentan su influencia en Dim3 en comparación con Dim1 y Dim2. B, que tenía contribuciones significativas en Dim1 y Dim2, tiene una contribución mucho menor en Dim3. Las variables SP, CO y FO son las más influyentes en la tercera dimensión del MCA, indicando que estas variables explican una parte significativa de la variabilidad en esta dimensión. Otras variables como B tienen contribuciones menores, mientras que G, H, A, FC y YH tienen una influencia mínima en esta dimensión.

Grafico 4

Contribuciones Destacadas: SP Tiene la contribución más alta a Dim4, con casi el 50%. Esto indica que esta variable es la más influyente en la configuración de esta dimensión. CO La siguiente contribución más significativa, con alrededor del 25%. FO También tiene una contribución considerable, cercana al 20%. Contribuciones Moderadas: FC Esta variable tiene una contribución intermedia, cercana al 10%. Contribuciones Bajas: G, B, H, A, YH Estas variables tienen una contribución mínima, con valores muy por debajo del 10%. Comparación con Dim1, Dim2 y Dim3 En comparación con los gráficos de Dim1, Dim2 y Dim3: SP es nuevamente la más influyente en Dim4, similar a su contribución destacada en Dim3. CO y FO mantienen una influencia significativa en Dim4, similar a su influencia en Dim3. FC tiene una contribución menor pero notable en Dim4, mientras que en las dimensiones anteriores tenía una influencia mínima. B y H, que tenían contribuciones más significativas en Dim1 y Dim2, tienen una contribución mucho menor en Dim4. Las variables SP, CO y FO son las más influyentes en la cuarta dimensión del MCA, indicando que estas variables explican una parte significativa de la variabilidad en esta dimensión. La variable FC también tiene una contribución notable. Otras variables, como G, B, H, A y YH, tienen una influencia mínima en esta dimensión.

Cálculo del Umbral Promedio La línea roja en el diagrama representa el umbral promedio de contribución esperada de las variables a la dimensión en cuestión. Este umbral se calcula como el valor de contribución que se esperaría si todas las variables contribuyeran por igual a la dimensión. El umbral promedio de contribución esperada se puede calcular dividiendo 100% entre el número total de variables consideradas en el análisis. Por ejemplo, si hay 10 variables en el análisis, el umbral promedio sería:

Interpretación • Variables por encima de la línea roja: Las variables que tienen una contribución por encima de este umbral son más influyentes de lo que se esperaría por azar. Estas variables tienen una importancia significativa en la configuración de la dimensión. • Variables por debajo de la línea roja: Las variables que tienen una contribución por debajo del umbral tienen menos influencia en la dimensión y no son tan importantes en la configuración de esta. En los diagramas analizados: • En Dim1, las variables H, B y C están por encima del umbral, indicando una alta influencia. • En Dim2, las variables C, FO y B están por encima del umbral. • En Dim3, las variables SP, CO y FO están por encima del umbral. • En Dim4, las variables SO, CO y FO están por encima del umbral. • En Dim5, la variable B es la única que esta por encima del umbral. Esto nos ayuda a identificar rápidamente qué variables son más relevantes en la configuración de cada dimensión del análisis de correspondencias múltiples.

BIPLOT CON CONTRIBUCIONES

Este diagrama muestra las categorías de variables en un espacio bidimensional, resultado del análisis de correspondencias múltiples (MCA). Los ejes Dim1 y Dim2 representan las dos primeras dimensiones del MCA, que explican el 20.6% y el 19.1% de la variabilidad total, respectivamente. Interpretación de los Elementos del Diagrama Posición de las Categorías: C: Se encuentra en la parte superior derecha del gráfico, lo que indica que tiene una alta contribución tanto en Dim1 como en Dim2. H y I: Están en la parte derecha, indicando una fuerte contribución a Dim1, pero también tienen una ligera contribución a Dim2. FO, CO, SP, A, YH, VH, FC y B: Están agrupadas en la parte inferior izquierda, lo que sugiere que tienen contribuciones menores en ambas dimensiones. Color: El color de cada punto varía de azul a rojo, donde el rojo indica una mayor contribución y el azul una menor contribución. Por lo tanto, las categorías como C, H y I tienen colores más cercanos al rojo, indicando una alta contribución. Contribuciones: C Tiene la mayor contribución en ambas dimensiones, lo que la convierte en una categoría muy influyente. H e I: También son influyentes, especialmente en Dim1. FO, CO, SP, A, YH, VH, FC y B: Tienen contribuciones más bajas, reflejadas por sus colores más cercanos al azul. Categorías Influyentes: Las categorías C, H e I son las más influyentes en la configuración de Dim1 y Dim2. Estas categorías deberían ser examinadas más a fondo para entender qué aspectos específicos están conduciendo su alta contribución. Categorías Menos Influyentes: Las categorías FO, CO, SP, A, YH, VH, FC y B tienen menor influencia en estas dos dimensiones, pero esto no significa que no sean importantes en otras dimensiones. Su agrupación cerca del origen sugiere que no tienen un impacto fuerte en la variabilidad explicada por Dim1 y Dim2. Dimensiones Dim1 (20.6%): Influencias Principales: H, I, C. Dim2 (19.1%): Influencias Principales: C, H.

ACM

round(MCA(Universidad_Dataset_C[1:400, -c(1,2,3,4,5,6,9,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29)], graph = FALSE)$eig,2)
##       eigenvalue percentage of variance cumulative percentage of variance
## dim 1       0.41                  20.62                             20.62
## dim 2       0.38                  19.08                             39.70
## dim 3       0.33                  16.69                             56.39
## dim 4       0.33                  16.62                             73.01
## dim 5       0.30                  14.81                             87.83
## dim 6       0.24                  12.17                            100.00

Biplot ACM

# Seleccionar las columnas relevantes
selected_columns <- Universidad_Dataset[1:400, -c(1,2,3,4,5,6,9,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29)]

# Verificar si hay valores NA en las columnas seleccionadas
cat("Valores NA en las columnas seleccionadas: ", sum(is.na(selected_columns)), "\n")
## Valores NA en las columnas seleccionadas:  0
# Eliminar filas con valores NA en las columnas seleccionadas
selected_columns <- na.omit(selected_columns)

# Convertir las columnas a factores
selected_columns <- data.frame(lapply(selected_columns, as.factor))

# Verificar que todas las columnas tengan al menos dos niveles
valid_columns <- selected_columns[, sapply(selected_columns, function(col) nlevels(col) > 1)]

# Mostrar las columnas válidas
cat("Número de columnas válidas: ", ncol(valid_columns), "\n")
## Número de columnas válidas:  3
# Realizar el Análisis de Componentes Múltiples (MCA)
if (ncol(valid_columns) > 1) {
  mca_result <- MCA(valid_columns, graph = FALSE)
  
  # Crear y mostrar el biplot del MCA
  fviz_mca_biplot(mca_result, repel = TRUE)
} else {
  cat("No hay suficientes columnas válidas para realizar el MCA\n")
}

Calidad de Representación

fviz_mca_var(MCA(Universidad_Dataset_C[1:400, -c(1,2,3,4,5,6,9,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29)], graph = FALSE), col.var ="cos2", gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"), repel = TRUE)

MCA(Universidad_Dataset[1:400, -c(1,2,3,4,5,6,9,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29)], graph = FALSE)$var$cos2
##          Dim 1       Dim 2        Dim 3       Dim 4       Dim 5
## CO 0.124177544 0.067651277 5.604214e-01 0.243555756 0.004194073
## FC 0.330367892 0.004470375 2.553762e-02 0.611682821 0.027941289
## FO 0.138165922 0.001216209 5.929467e-01 0.256211053 0.011460103
## SP 0.003511351 0.943469541 3.268312e-02 0.001276858 0.019059129
## HI 0.463264293 0.008139659 1.467064e-27 0.049646642 0.478949406
## VH 0.463264293 0.008139659 1.494104e-27 0.049646642 0.478949406
## 0  0.421841193 0.011979868 2.162325e-27 0.231174569 0.335004370
## 1  0.421841193 0.011979868 2.066063e-27 0.231174569 0.335004370

Contribuciones

fviz_contrib(MCA(Universidad_Dataset_C[1:400, -c(1,2,3,4,5,6,9,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29)], graph = FALSE), choice = "var", axes = 1, top = 15)

fviz_contrib(MCA(Universidad_Dataset_C[1:400, -c(1,2,3,4,5,6,9,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29)], graph = FALSE), choice = "var", axes = 2, top = 15)

fviz_contrib(MCA(Universidad_Dataset_C[1:400, -c(1,2,3,4,5,6,9,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29)], graph = FALSE), choice = "var", axes = 3, top = 15)

fviz_contrib(MCA(Universidad_Dataset_C[1:400, -c(1,2,3,4,5,6,9,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29)], graph = FALSE), choice = "var", axes = 4, top = 15)

fviz_contrib(MCA(Universidad_Dataset_C[1:400, -c(1,2,3,4,5,6,9,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29)], graph = FALSE), choice = "var", axes = 5, top = 15)

Biplot con Contribuciones

fviz_mca_var(MCA(Universidad_Dataset_C[1:400, -c(1,2,3,4,5,6,9,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29)], graph = FALSE), col.var ="contrib", gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"), repel = TRUE)

Fase 4 [Análisis de Regresión]

4.1. Objetivo

Se sabe que el análisis de regresión es un proceso de naturaleza estadística usado para estimar relaciones entre variables (una dependiente o de respuesta y otras independientes o predictoras) a través de técnicas de modelado y análisis que permiten entender cómo el valor de la variable dependiente varía al cambiar el valor de una o más variables independientes. Los modelos de análisis de regresión estudiados a través de este documento serán: lineal (simple y múltiple) y logístico, ellos entendidos como casos del modelo de regresión lineal generalizado.

4.2. Regresión Lineal Simple

Este modelo, que eventualmente será llamado en este estudio como RLS, está conformado por dos variables estadísticas \(x\) y \(Y\), donde \(Y\) se asume que está influida por \(x\). La relación está dada matemáticamente por: \[Y = \beta_0 + \beta_1 x + \varepsilon \hspace{10mm} \hspace{10mm}(1)\] donde:

  • \(Y\): es una variable de respuesta de naturaleza aleatoria.
  • \(x\): es una variable predictora de naturaleza no aleatoria.
  • \(\varepsilon\): es una variable aleatoria no observable.
  • \(\beta_0\) y \(\beta_1\): son parámetros reales desconocidos del modelo.

En comparación con el modelo lineal simple determinístico \(y = \beta_0 + \beta_1 x\), el probablístico supone que el valor esperado de \(Y\) es una función lineal de \(x\), pero que con \(x\) fija, la variable \(Y\) difiere de su valor esperado en una cantidad aleatoria \(\varepsilon\). Además, la cantidad \(\varepsilon\) en la ecuación de modelo \((1)\) se supone normalmente distribuida con \(E(\varepsilon)=0\) y \(V(\varepsilon)=\sigma^2\). La variable aleatoria \(\varepsilon\) también se conoce como término de error aleatorio o desviación aleatoria en el modelo.

Complementariamente, casi nunca serán conocidos los valores \(\beta_0\), \(\beta_1\) y \(\sigma^2\), a cambio estará disponible una muestra de datos compuesta de pares ordenados \((x_1,y_1)... (x_n,y_n)\) con la que los parámetros del modelo y la línea de regresión verdadera pueden ser estimados, bajo el supuesto de independencia de las observaciones. Así, \(y_i\) es el valor observado de una variable aleatoria \(Y_i\), donde \(Y_i=\beta_0+\beta_1x_i+\varepsilon_i\) y las \(n\) desviaciones \(\varepsilon_1\), \(\varepsilon_2\), \(...\), \(\varepsilon_n\) son variables independientes.

De acuerdo con el modelo, los puntos observados estarán distribuidos aleatoriamente alrededor de la línea de regresión verdadera. En este sentido, la estimación de \(y=\beta_0+\beta_1x\) deberá ser una línea que se ajuste lo mejor posible a los puntos muestra. Tal línea deberá poseer la característica de que las distancias verticales (desviaciones) de los puntos observados a la línea misma son pequeñas. La medida de la bondad de ajuste será la suma de los cuadrados de estas desviaciones. En consecuencia, la línea que mejor se ajusta será la que tenga la suma más pequeña posible de desviaciones al cuadrado. El resultado que implica las ideas expuestas se conoce como: principio de los mínimos cuadrados y se remonta a los matemáticos Carl Friedrich Gauss y Adrien-Marie Legendre, entre el último lustro del siglo XVIII y el primero del siglo XIX.

El principio de los mínimos cuadrados establece que la desviación vertical del punto \((x_i,y_i)\) con respecto a la línea \(y=b_0+b_1x\) es \(y_i-(b_0+b_1x)\) y la suma de las desviaciones verticales al cuadrado de los puntos \((x_i,y_i)\) a la línea es \(f(b_0,b_1)=\sum_{i=1}^n (y_i-(b_0+b_1x_i))^2\). Así, las estimaciones puntuales de \(\beta_0\) y \(\beta_1\), representadas como \(\hat{\beta}_0\) y \(\hat{\beta}_1\) y llamadas estimaciones de mínimos cuadrados, son los valores que minimizan a \(f(b_0,b_1)\); es decir, \(f(\hat{\beta}_0,\hat{\beta}_1)\leq f(b_0,b_1)\) para cualesquiera \(\beta_0\) y \(\beta_1\). Por lo tanto, la línea de regresión estimada o línea de mínimos cuadrados es \(y=\hat{\beta}_0+\hat{\beta}_1x\).

Luego de calcular y resolver las ecuaciones en derivadas parciales de \(f(b_0,b_1)\) respecto a \(b_0\) y \(b_1\) igualadas a cero, se obtiene un sistemas de ecuaciones llamadas normales que son lineales en \(b_0\) y \(b_1\) y para las cuales, siempre que por lo menos dos de las \(x_i\) sean diferentes, las estimaciones de los mínimos cuadrados son la única solución del sistema. En consecuencia, la estimación de los mínimos cuadrados de \(\beta_1\) de la línea de regresión verdadera es: \[\hat{\beta}_1=\dfrac{\sum_{i=1}^n(x_i-\bar{x})(y_i-\bar{y})}{\sum_{i=1}^n(x_i-\bar{x})^2}=\dfrac{S_{xy}}{S_{xx}}\hspace{10mm}(2)\] y la estimación de los mínimos cuadrados de \(\beta_0\) de la línea de regresión verdadera es: \[\hat{\beta}_0=\dfrac{\sum_{i=1}^ny_i-\hat{\beta}_1\sum_{i=1}^nx_i}{n}=\bar{y}-\hat{\beta}_1\bar{x}\hspace{10mm}(3)\] Para hacer los cálculos que las ecuaciones anteriores demandan es necesario reducir al mínimo los efectos de redondeo. También, antes de calcular \(\hat{\beta}_1\) y \(\hat{\beta}_0\) se debe examir gráficamente el conjunto de datos por usar para percibir la factibilidad de uso de un modelo probabilístico lineal, es decir, si gráficamente los puntos están lejos de tender a aglomerarse en torno a una línea recta con aproximadamente el mismo grado de dispersión de todas las \(x_i\), entonces deben ser indagados otros modelos.

Es indispensable mencionar que la línea de mínimos cuadrados debe usarse restringidamente para predecir valores de \(x\) lejanos del rango de los datos, porque la relación ajustada puede carecer de validez para ellos.

Ahora, el parámetro \(\sigma^2\) que determina la cantidad de variabilidad es inherente en el modelo de regresión descrito: su valor conducirá a establecer que los valores observados estarán dispersos en mayor o menor medida en torno a la línea de regresión verdadera. Así, los residuos \(y_i - \hat{y_i}\) son las desviaciones verticales con respecto a la línea estimada. Si todos los residuos son pequeños comparados con cero, entonces la variabilidad de los valores \(y\) observados se debería en una elevada medida a la relación lineal entre \(x\) y \(y\), mientras que si los residuos son grandes comparados con cero, entonces queda sugerida una variabilidad inherente en \(y\) con respecto a la cantidad debida a la relación lineal. Así, la estimación de \(\sigma^2\) en un análisis de regresión está basada en el cálculo de la suma de cuadrados residuales (o suma de cuadrados del error SCE) que se reduce a: \[SCE=\sum_{i=1}^ny_i^2-\hat{\beta}_0\sum_{i=1}^ny_i-\hat{\beta}_1\sum_{i=1}^nx_iy_i\hspace{10mm}(4)\] \[\hat\sigma^2=s^2=\dfrac{SCE}{n-2}\hspace{10mm}(5)\] Si se ha entendido que la cantidad SCE establece una medida de cuánta variación de \(y\) es inexplicada por el modelo; es decir, sin atribución a la relación lineal, se entenderá también que existe otra cantidad llamada la suma total de los cuadrados STC, que permite obtener una medida de la cantidad de variación total en los valores \(y\) observados: \[STC=\sum_{i=1}^ny_i^2-\frac{(\sum_{i=1}^ny_i)^2}{n}\hspace{10mm}(6)\] Si se formula la razón \(SCE/STC\) se calcula la proporción de variación total inexplicada por el modelo de regresión lineal simple; por lo tanto, se llega a la definición del coeficiente de determinación \(r^2\): \[r^2=1-\frac{SCE}{STC}\hspace{10mm}(7)\] que se interpreta como la proporción de variación \(y\) observada que puede ser explicada por el modelo de regresión lineal simple; es decir, aquella atribuida a una relación lineal aproximada entre \(x\) y \(y\): mientras más cercano a 1 sea \(r^2\), más exitoso es el modelo de regresión lineal simple al explicar la variación de \(y\). Una forma alternativa de calcular el coeficiente de determinación se basa en la suma de cuadrados debidad a la regresión SCR (o al modelo de regresión SCM), que es la cantidad de variación total que es explicada por el modelo. Con base en ella el coeficiente de determinación se expresa como: \[r^2=1-\frac{SCE}{STC}=\frac{STC-SCE}{STC}=\frac{SCR}{STC}\hspace{10mm}(8)\]Como se sabe, cualquier cantidad calculada a partir de datos muestrales varía de una cantidad a otra, en este sentido, los procedimientos inferenciales estandarizan un estimador restando su valor medio y luego dividiéndolo entre su desviación estándar estimada. En particular, para un modelo supuesto de regresión lineal simple se implica que las variables estándares: \(t_{(n-2)}=\dfrac{\hat{\beta}_0-\beta_0}{\hat{\sigma} \sqrt{1/n+\bar{x}^2/S_{xx}}}\) y \(t_{(n-2)}=\dfrac{\hat{\beta}_1-\beta_1}{ \hat{\sigma} \sqrt{1/S_{xx}}}\) tienen distribuciones \(t\) con \(n-2\) grados de libertad. De esto se deduce que los intervalos de confianza de \(100*(1-\alpha)\%\) para la pendiente \(\beta_1\) y el intercepto \(\beta_0\) de la línea de regrasión verdadera son: \[\hat{\beta}_0 \pm t_{\alpha/2, n-2} \cdot \hat{\sigma} \sqrt{1/n+\bar{x}^2/S_{xx}}\hspace{10mm}(9)\] \[\hat{\beta}_1 \pm t_{\alpha/2, n-2} \cdot \hat{\sigma} \sqrt{1/S_{xx}} \hspace{10mm} (10)\]estos intervalos están centarados en la en la estimación puntual de cada parámetro y la cantidad abarcada a cada lado de la estimación depende del nivel de confianza deseado y de la cantidad de variabilidad del estimador.

Dado lo anterior, para los procedimientos de prueba de hipótesis, y como se procede habitualmente, las hipótesis nulas respecto a los beta del modelo de regresión lineal simple serán enunciados de igualdad. Los valores nulos para \(\beta_0\) y \(\beta_1\) se representan respectivamente como \(\beta_{00}\) (“beta cero cero”) y \(\beta_{10}\) (“beta uno cero”). Además, como los estadísticos de prueba tienen distribuciones \(t\) con \(n-2\) grados de libertad cuando \(H_0\) es verdadera, la probabilidad de error Tipo I permanece al nivel deseado \(\alpha\) usando un valor crítico \(t\) adecuado. Así, las hipótesis comúnmente usadas para \(\beta_0\)son: \[H_0: \beta_0 = \beta_{00}\hspace{10mm}(11)\] \[H_1: \beta_0 \neq \beta_{00}\hspace{10mm}(12)\]cuyo estadístico de prueba es: \[t_{(n-2)}=\dfrac{\hat{\beta}_0-\beta_{00}}{\hat{\sigma} \sqrt{1/n+\bar{x}^2/S_{xx}}}\hspace{10mm}(13)\]y para \(\beta_1\) son: \[H_0: \beta_1 = \beta_{10}\hspace{10mm}(14)\] \[H_1: \beta_1 \neq \beta_{10}\hspace{10mm}(15)\]cuyo estadístico de prueba es:\[t_{(n-2)}=\dfrac{\hat{\beta}_1-\beta_{10}}{\hat{\sigma} \sqrt{1/S_{xx}}}\hspace{10mm}(16)\]el par de hipótesis definidas por \(14\), \(15\) y \(16\) se conoce como la prueba de utilidad del modelo de regresión lineal simple, donde: la región de rechazo de \(H_0\) para una prueba a nivel \(\alpha\) a favor de \(H_1: \beta_1>\beta_{10}\) es \(t\geq t_{\alpha,n-2}\); la región de rechazo de \(H_0\) para una prueba a nivel \(\alpha\) a favor de \(H_1: \beta_1<\beta_{10}\) es \(t\leq -t_{\alpha,n-2}\); y la región de rechazo de \(H_0\) para una prueba a nivel \(\alpha\) a favor de \(H_1: \beta_1\neq\beta_{10}\) es \(t\leq -t_{\alpha/2,n-2}\) o \(t\geq t_{\alpha/2,n-2}\). Además, se sabe que la prueba de utilidad del modelo de regresión simple puede ser probada con una tabla ANOVA: rechazando \(H_0\) si \(f\geq F_{\alpha,1,n-2}\). La prueba \(F\) da exactamente el mismo resultado que la prueba \(t\) de utilidad del modelo de regresión lineal simple.

Por último, se entiende que en un modelo de regresión lineal simple un valor futuro de \(Y\) no es parámetro sino una variable aleatoria, por lo que se debe hacer referencia a un intervalo de valores factibles para un valor futuro de \(Y\), al cual se le llama intervalo de predicción. Cuando se predice con base en el modelo de regresión lineal simple, el error de predicción es \(Y-( \hat{\beta}_0+ \hat{\beta}_1 x^*)\) que corresponde con una diferencia entre dos variables aleatorias, por lo que, en comparación con una estimación, habrá más incertidumbre en ese; por lo tanto, un intervalo de predicción será más ancho que un intervalo de confianza. Además, a partir de la varianza del error dde predicción se puede establecer que la variable estandarizada:\[T=\dfrac{Y-(\hat{\beta}_0+ \hat{\beta}_1 x^*)}{S \displaystyle\sqrt{1+\dfrac{1}{n} + \dfrac{(x^*-\bar{x})^2}{S_{xx}}}}\hspace{10mm}(17)\]tiene una distribución \(t\) con \(n-2\) grados de libertad, a partir de la cual se obtine un intervalo de predicción de \(100*(1-\alpha)\%\) para una observación \(Y\) futura que se hará cuando \(x=x^*\) igual a:\[\hat{\beta}_0+\hat{\beta}_1 x^*\pm t_{n-2,\alpha/2}\cdot s \displaystyle\sqrt{1+\dfrac{1}{n}+\dfrac{(x^*-\bar{x})^2}{S_{xx}}}\hspace{10mm}(18)\] la interpretación del nivel de predicción de \(100*(1-\alpha)\%\) establece que al usar \((18)\) repetidamente, los intervalos resultantes contendrán los valores \(y\) observados el \(100*(1-\alpha)\%\) del tiempo. Además, el número \(1\) en la raíz cuadrada hace que el intervalo de predicción sea más ancho que intervalos de confianza como \((9)\) y \((10)\). Asimismo, a medida que \(n\to\infty\) el ancho del intervalo no-tiende a cero, porque la incertidumbre en la predicción será permanente, incluso al tener conocimiento perfecto sobre \(\beta_0\) y \(\beta_1\).

Planteamiento del Problema

Con base en el conjunto de datos descrito en la sección 2 se formulará un modelo de regresión lineal simple para estudiar la relación lineal supuesta entre las varaibles definidas por los campos: Chance of Admit (variable dependiente) y TOEFL Score (variable independiente).

Desarrollo del Análisis

El estudio de regresión lineal simple ha sido procesado con R version 4.3.3 (2024-02-29 ucrt) mediado por RStudio 2022.07.2 Build 576 en una plataforma x86_64-w64-mingw32.

Resumen estadístico de las variables por estudiar.

La navegación a través de las pestañas muestra el resumen estadístico de las variables de interés: Overall Score (variable dependiente) y TOEFL Score (variable independiente), junto con sus respectivos diagramas de caja. Además, incluye el diagrama de dispersión de sus valores conjuntos.

Con base en la pestaña Resumen de Chance of Admit se puede comentar que la variable Chance of Admit presenta asimetría de sesgo negativo con rango intercuartílico estrecho de dispersión imperceptible. Además, un dato se visualiza como outlier. Así, puede decirse que la variable registra valores altos en relación con su intervalo de medición. En comparación, según la pestaña Resumen de TOEFL Score, la variable TOEFL Score se visualiza más simétrica que la anterior, sin presentar datos atípicos, pero con mediana que muestra una ligera concentración de medidas hacia la mitad superior de los datos.

Complementariamente, en Diagrama de Dispersión TOEFL vs. CoA se puede observar que existe una correlación positiva de naturaleza apreciablemente lineal entre las variable Chance of Admit y TOEFL Score. Sin embargo, si se observa el gráfico de Diagramas Totales de Dispersión (que excluyeron las variables cualitativas::nominales) es constatable que existe una correlación más fuerte entre la variable de interés Chance of Admit y CGPA.

Resumen de Overall Score
summary(Universidad_Dataset$`Overall Score`)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    0.40   11.75   19.00   25.34   32.55  100.00
boxplot(Universidad_Dataset$`Overall Score`, main = "Diagrama de Caja de Overall Score", col = c("orange"))

Resumen de research
summary(Universidad_Dataset$research)
##  HI  LO  MD  VH 
## 320   1  86 916
boxplot(Universidad_Dataset$research, main = "Diagrama de Caja de research", col = c("gold"))

Diagrama de Dispersión research vs. OS
plot(Universidad_Dataset$research, Universidad_Dataset$`Overall Score`, main = "Diagrama de Dispersión research vs. Overall Score")

Formulación del modelo de RLS entre las variables de estudio.

La navegación a través de las pestañas muestra los coeficientes del modelo de regresión lineal simple, su resumen estadístico y su tabla ANOVA. Se menciona de nuevo que las variables de interés son: Chance of Admit (variable dependiente) y TOEFL Score (variable independiente).

Al considerar los resultados presentados en la pestaña Coeficientes del Modelo RLS se puede establer que el modelo de regresión lineal simple que relaciona a las variables de interés, las cuales se resumirán como \(COA\) y \(TOEFL\), tiene la formulación:\[\hat{COA}=-1,2734005+0,0185993\cdot TOEFL\hspace{10mm}(19)\] para este modelo se obvia la interpretación del intercepto por carecer de sentido dado que Chance of Admit resultaría negativa en caso de un valor nulo de TOEFL Score, y ambas situaciones carecen de sentido. Sin embargo, el coeficiente lineal una correlación de proporcionalidad directa entre las variables de interés, aunque de crecimiento moderado en Chance of Admit por cada unidad marginal de TOEFL Score.

Complementariamente, en la pestaña Resumen Estadístico del Modelo RLS se constata que para cualquier nivel de significancia las evidencias estarán a favor de la correlación positiva entre las variables de interés. Además, el coeficiente de detreminación está a favor de la correlación estableciendo que el \(62.57\) \(\%\) de la variabilidad de Chance of Admit es explicada por TOEFL Score, esto también queda confirmado a través de la pestaña Tabla ANOVA para el Modelo RLS.

Coeficientes del Modelo RLS
modelo_RL_Simple = lm(Universidad_Dataset$`Overall Score`~Universidad_Dataset$research)
coef(modelo_RL_Simple)
##                    (Intercept) Universidad_Dataset$researchLO 
##                      13.614688                      -7.514688 
## Universidad_Dataset$researchMD Universidad_Dataset$researchVH 
##                      -3.810036                      17.295356
Resumen Estadístico del Modelo RLS
summary(modelo_RL_Simple)
## 
## Call:
## lm(formula = Universidad_Dataset$`Overall Score` ~ Universidad_Dataset$research)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -30.510 -11.912  -3.815   6.095  69.090 
## 
## Coefficients:
##                                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                     13.6147     0.9877  13.784   <2e-16 ***
## Universidad_Dataset$researchLO  -7.5147    17.6966  -0.425   0.6712    
## Universidad_Dataset$researchMD  -3.8100     2.1461  -1.775   0.0761 .  
## Universidad_Dataset$researchVH  17.2954     1.1474  15.074   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 17.67 on 1319 degrees of freedom
## Multiple R-squared:  0.1851, Adjusted R-squared:  0.1833 
## F-statistic: 99.87 on 3 and 1319 DF,  p-value: < 2.2e-16
Tabla ANOVA para el Modelo RLS
anova(modelo_RL_Simple)
## Analysis of Variance Table
## 
## Response: Universidad_Dataset$`Overall Score`
##                                Df Sum Sq Mean Sq F value    Pr(>F)    
## Universidad_Dataset$research    3  93540 31179.9  99.873 < 2.2e-16 ***
## Residuals                    1319 411785   312.2                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Análisis del modelo RLS.

La navegación a través de las pestañas muestra el intervalo de confianza para \(\beta_1\) y para la predicción del modelo de regresión lineal simple, ambos al 95 %. Se menciona de nuevo que las variables de interés son: Chance of Admit (variable dependiente) y TOEFL Score (variable independiente).

El análisis del modelo RLS muestra que es significativo y en consecuencia aporta información relevante para estimar Chance of Admit a partir de TOEFL Score. Esto debido a que el intervalo de confianza para el coeficiente de TOEFL en el modelo RLS excluye al cero:\[0,01718449<\beta_1<0,02001411\hspace{10mm}(20)\]

Por último, la pestaña Predicciones y sus Intevalos de Predicción muestran los cálculos con base en el modelo, bajo intervalos de predicción al \(95\) \(\%\), de las predicciones de todas las pestañas del conjunto de datos para la variable Chance of Admit. Cabe mencionar que estos intervalos resultan más anchos que aquellos calculados con base en intervalos de confianza al mismo nivel de significancia.

Intervalo de Confianza para B1
confint(modelo_RL_Simple, level = 0.95)
##                                     2.5 %     97.5 %
## (Intercept)                     11.676997 15.5523782
## Universidad_Dataset$researchLO -42.231271 27.2018958
## Universidad_Dataset$researchMD  -8.020193  0.4001203
## Universidad_Dataset$researchVH  15.044509 19.5462031
Predicciones y sus Intervalos de Predicción
predict(modelo_RL_Simple, data.frame(seq(1,400)), interval='prediction', level = 0.95)
## Warning: 'newdata' had 400 rows but variables found have 1323 rows
##            fit        lwr      upr
## 1    30.910044  -3.771337 65.59142
## 2    30.910044  -3.771337 65.59142
## 3    30.910044  -3.771337 65.59142
## 4    30.910044  -3.771337 65.59142
## 5    30.910044  -3.771337 65.59142
## 6    30.910044  -3.771337 65.59142
## 7    30.910044  -3.771337 65.59142
## 8    30.910044  -3.771337 65.59142
## 9    30.910044  -3.771337 65.59142
## 10   30.910044  -3.771337 65.59142
## 11   30.910044  -3.771337 65.59142
## 12   30.910044  -3.771337 65.59142
## 13   30.910044  -3.771337 65.59142
## 14   30.910044  -3.771337 65.59142
## 15   30.910044  -3.771337 65.59142
## 16   30.910044  -3.771337 65.59142
## 17   30.910044  -3.771337 65.59142
## 18   30.910044  -3.771337 65.59142
## 19   30.910044  -3.771337 65.59142
## 20   30.910044  -3.771337 65.59142
## 21   30.910044  -3.771337 65.59142
## 22   30.910044  -3.771337 65.59142
## 23   30.910044  -3.771337 65.59142
## 24   30.910044  -3.771337 65.59142
## 25   30.910044  -3.771337 65.59142
## 26   30.910044  -3.771337 65.59142
## 27   30.910044  -3.771337 65.59142
## 28   30.910044  -3.771337 65.59142
## 29   30.910044  -3.771337 65.59142
## 30   30.910044  -3.771337 65.59142
## 31   30.910044  -3.771337 65.59142
## 32   30.910044  -3.771337 65.59142
## 33   30.910044  -3.771337 65.59142
## 34   30.910044  -3.771337 65.59142
## 35   30.910044  -3.771337 65.59142
## 36   30.910044  -3.771337 65.59142
## 37   30.910044  -3.771337 65.59142
## 38   30.910044  -3.771337 65.59142
## 39   30.910044  -3.771337 65.59142
## 40   30.910044  -3.771337 65.59142
## 41   30.910044  -3.771337 65.59142
## 42   30.910044  -3.771337 65.59142
## 43   30.910044  -3.771337 65.59142
## 44   30.910044  -3.771337 65.59142
## 45   30.910044  -3.771337 65.59142
## 46   30.910044  -3.771337 65.59142
## 47   30.910044  -3.771337 65.59142
## 48   30.910044  -3.771337 65.59142
## 49   30.910044  -3.771337 65.59142
## 50   30.910044  -3.771337 65.59142
## 51   30.910044  -3.771337 65.59142
## 52   30.910044  -3.771337 65.59142
## 53   30.910044  -3.771337 65.59142
## 54   30.910044  -3.771337 65.59142
## 55   30.910044  -3.771337 65.59142
## 56   30.910044  -3.771337 65.59142
## 57   30.910044  -3.771337 65.59142
## 58   30.910044  -3.771337 65.59142
## 59   30.910044  -3.771337 65.59142
## 60   30.910044  -3.771337 65.59142
## 61   30.910044  -3.771337 65.59142
## 62   30.910044  -3.771337 65.59142
## 63   30.910044  -3.771337 65.59142
## 64   30.910044  -3.771337 65.59142
## 65   30.910044  -3.771337 65.59142
## 66   30.910044  -3.771337 65.59142
## 67   30.910044  -3.771337 65.59142
## 68   30.910044  -3.771337 65.59142
## 69   30.910044  -3.771337 65.59142
## 70   30.910044  -3.771337 65.59142
## 71   30.910044  -3.771337 65.59142
## 72   30.910044  -3.771337 65.59142
## 73   30.910044  -3.771337 65.59142
## 74   30.910044  -3.771337 65.59142
## 75   30.910044  -3.771337 65.59142
## 76   30.910044  -3.771337 65.59142
## 77   30.910044  -3.771337 65.59142
## 78   30.910044  -3.771337 65.59142
## 79   30.910044  -3.771337 65.59142
## 80   30.910044  -3.771337 65.59142
## 81   30.910044  -3.771337 65.59142
## 82   30.910044  -3.771337 65.59142
## 83   30.910044  -3.771337 65.59142
## 84   30.910044  -3.771337 65.59142
## 85   30.910044  -3.771337 65.59142
## 86   30.910044  -3.771337 65.59142
## 87   30.910044  -3.771337 65.59142
## 88   30.910044  -3.771337 65.59142
## 89   30.910044  -3.771337 65.59142
## 90   30.910044  -3.771337 65.59142
## 91   30.910044  -3.771337 65.59142
## 92   30.910044  -3.771337 65.59142
## 93   30.910044  -3.771337 65.59142
## 94   30.910044  -3.771337 65.59142
## 95   30.910044  -3.771337 65.59142
## 96   30.910044  -3.771337 65.59142
## 97   30.910044  -3.771337 65.59142
## 98   30.910044  -3.771337 65.59142
## 99   30.910044  -3.771337 65.59142
## 100  30.910044  -3.771337 65.59142
## 101  30.910044  -3.771337 65.59142
## 102  30.910044  -3.771337 65.59142
## 103  30.910044  -3.771337 65.59142
## 104  30.910044  -3.771337 65.59142
## 105  30.910044  -3.771337 65.59142
## 106  30.910044  -3.771337 65.59142
## 107  30.910044  -3.771337 65.59142
## 108  30.910044  -3.771337 65.59142
## 109  30.910044  -3.771337 65.59142
## 110  30.910044  -3.771337 65.59142
## 111  30.910044  -3.771337 65.59142
## 112  30.910044  -3.771337 65.59142
## 113  30.910044  -3.771337 65.59142
## 114  30.910044  -3.771337 65.59142
## 115  30.910044  -3.771337 65.59142
## 116  30.910044  -3.771337 65.59142
## 117  30.910044  -3.771337 65.59142
## 118  30.910044  -3.771337 65.59142
## 119  30.910044  -3.771337 65.59142
## 120  30.910044  -3.771337 65.59142
## 121  30.910044  -3.771337 65.59142
## 122  30.910044  -3.771337 65.59142
## 123  30.910044  -3.771337 65.59142
## 124  30.910044  -3.771337 65.59142
## 125  30.910044  -3.771337 65.59142
## 126  30.910044  -3.771337 65.59142
## 127  30.910044  -3.771337 65.59142
## 128  30.910044  -3.771337 65.59142
## 129  30.910044  -3.771337 65.59142
## 130  30.910044  -3.771337 65.59142
## 131  30.910044  -3.771337 65.59142
## 132  30.910044  -3.771337 65.59142
## 133  30.910044  -3.771337 65.59142
## 134  30.910044  -3.771337 65.59142
## 135  30.910044  -3.771337 65.59142
## 136  30.910044  -3.771337 65.59142
## 137  30.910044  -3.771337 65.59142
## 138  30.910044  -3.771337 65.59142
## 139  30.910044  -3.771337 65.59142
## 140  30.910044  -3.771337 65.59142
## 141  30.910044  -3.771337 65.59142
## 142  30.910044  -3.771337 65.59142
## 143  30.910044  -3.771337 65.59142
## 144  30.910044  -3.771337 65.59142
## 145  30.910044  -3.771337 65.59142
## 146  30.910044  -3.771337 65.59142
## 147  30.910044  -3.771337 65.59142
## 148  30.910044  -3.771337 65.59142
## 149  30.910044  -3.771337 65.59142
## 150  30.910044  -3.771337 65.59142
## 151  30.910044  -3.771337 65.59142
## 152  30.910044  -3.771337 65.59142
## 153  30.910044  -3.771337 65.59142
## 154  30.910044  -3.771337 65.59142
## 155  30.910044  -3.771337 65.59142
## 156  30.910044  -3.771337 65.59142
## 157  30.910044  -3.771337 65.59142
## 158  30.910044  -3.771337 65.59142
## 159  30.910044  -3.771337 65.59142
## 160  30.910044  -3.771337 65.59142
## 161  30.910044  -3.771337 65.59142
## 162  30.910044  -3.771337 65.59142
## 163  30.910044  -3.771337 65.59142
## 164  30.910044  -3.771337 65.59142
## 165  30.910044  -3.771337 65.59142
## 166  30.910044  -3.771337 65.59142
## 167  30.910044  -3.771337 65.59142
## 168  30.910044  -3.771337 65.59142
## 169  30.910044  -3.771337 65.59142
## 170  30.910044  -3.771337 65.59142
## 171  30.910044  -3.771337 65.59142
## 172  30.910044  -3.771337 65.59142
## 173  30.910044  -3.771337 65.59142
## 174  30.910044  -3.771337 65.59142
## 175  30.910044  -3.771337 65.59142
## 176  30.910044  -3.771337 65.59142
## 177  30.910044  -3.771337 65.59142
## 178  30.910044  -3.771337 65.59142
## 179  30.910044  -3.771337 65.59142
## 180  30.910044  -3.771337 65.59142
## 181  30.910044  -3.771337 65.59142
## 182  30.910044  -3.771337 65.59142
## 183  30.910044  -3.771337 65.59142
## 184  30.910044  -3.771337 65.59142
## 185  30.910044  -3.771337 65.59142
## 186  13.614688 -21.101896 48.33127
## 187  30.910044  -3.771337 65.59142
## 188  30.910044  -3.771337 65.59142
## 189  30.910044  -3.771337 65.59142
## 190  30.910044  -3.771337 65.59142
## 191  30.910044  -3.771337 65.59142
## 192  30.910044  -3.771337 65.59142
## 193  30.910044  -3.771337 65.59142
## 194  30.910044  -3.771337 65.59142
## 195  30.910044  -3.771337 65.59142
## 196  30.910044  -3.771337 65.59142
## 197  30.910044  -3.771337 65.59142
## 198  13.614688 -21.101896 48.33127
## 199  30.910044  -3.771337 65.59142
## 200  30.910044  -3.771337 65.59142
## 201  30.910044  -3.771337 65.59142
## 202  30.910044  -3.771337 65.59142
## 203  30.910044  -3.771337 65.59142
## 204  30.910044  -3.771337 65.59142
## 205  30.910044  -3.771337 65.59142
## 206  30.910044  -3.771337 65.59142
## 207  30.910044  -3.771337 65.59142
## 208  30.910044  -3.771337 65.59142
## 209  30.910044  -3.771337 65.59142
## 210  30.910044  -3.771337 65.59142
## 211  30.910044  -3.771337 65.59142
## 212  30.910044  -3.771337 65.59142
## 213  30.910044  -3.771337 65.59142
## 214  30.910044  -3.771337 65.59142
## 215  30.910044  -3.771337 65.59142
## 216  30.910044  -3.771337 65.59142
## 217  30.910044  -3.771337 65.59142
## 218  30.910044  -3.771337 65.59142
## 219  30.910044  -3.771337 65.59142
## 220  30.910044  -3.771337 65.59142
## 221  30.910044  -3.771337 65.59142
## 222  30.910044  -3.771337 65.59142
## 223  30.910044  -3.771337 65.59142
## 224  30.910044  -3.771337 65.59142
## 225  30.910044  -3.771337 65.59142
## 226  30.910044  -3.771337 65.59142
## 227  13.614688 -21.101896 48.33127
## 228  30.910044  -3.771337 65.59142
## 229  30.910044  -3.771337 65.59142
## 230  13.614688 -21.101896 48.33127
## 231  30.910044  -3.771337 65.59142
## 232  30.910044  -3.771337 65.59142
## 233  30.910044  -3.771337 65.59142
## 234  30.910044  -3.771337 65.59142
## 235  30.910044  -3.771337 65.59142
## 236  30.910044  -3.771337 65.59142
## 237  30.910044  -3.771337 65.59142
## 238  30.910044  -3.771337 65.59142
## 239  30.910044  -3.771337 65.59142
## 240  30.910044  -3.771337 65.59142
## 241  30.910044  -3.771337 65.59142
## 242  30.910044  -3.771337 65.59142
## 243  30.910044  -3.771337 65.59142
## 244  30.910044  -3.771337 65.59142
## 245  30.910044  -3.771337 65.59142
## 246  30.910044  -3.771337 65.59142
## 247  30.910044  -3.771337 65.59142
## 248  30.910044  -3.771337 65.59142
## 249  30.910044  -3.771337 65.59142
## 250  30.910044  -3.771337 65.59142
## 251  30.910044  -3.771337 65.59142
## 252  30.910044  -3.771337 65.59142
## 253  30.910044  -3.771337 65.59142
## 254  30.910044  -3.771337 65.59142
## 255  30.910044  -3.771337 65.59142
## 256  30.910044  -3.771337 65.59142
## 257  30.910044  -3.771337 65.59142
## 258  30.910044  -3.771337 65.59142
## 259  30.910044  -3.771337 65.59142
## 260  30.910044  -3.771337 65.59142
## 261  30.910044  -3.771337 65.59142
## 262  30.910044  -3.771337 65.59142
## 263  13.614688 -21.101896 48.33127
## 264  30.910044  -3.771337 65.59142
## 265  30.910044  -3.771337 65.59142
## 266  30.910044  -3.771337 65.59142
## 267  30.910044  -3.771337 65.59142
## 268  30.910044  -3.771337 65.59142
## 269  30.910044  -3.771337 65.59142
## 270  30.910044  -3.771337 65.59142
## 271  30.910044  -3.771337 65.59142
## 272  30.910044  -3.771337 65.59142
## 273  30.910044  -3.771337 65.59142
## 274  30.910044  -3.771337 65.59142
## 275  30.910044  -3.771337 65.59142
## 276  30.910044  -3.771337 65.59142
## 277  30.910044  -3.771337 65.59142
## 278  30.910044  -3.771337 65.59142
## 279  30.910044  -3.771337 65.59142
## 280  13.614688 -21.101896 48.33127
## 281  30.910044  -3.771337 65.59142
## 282  30.910044  -3.771337 65.59142
## 283  30.910044  -3.771337 65.59142
## 284  30.910044  -3.771337 65.59142
## 285  30.910044  -3.771337 65.59142
## 286  30.910044  -3.771337 65.59142
## 287  30.910044  -3.771337 65.59142
## 288  30.910044  -3.771337 65.59142
## 289  13.614688 -21.101896 48.33127
## 290  30.910044  -3.771337 65.59142
## 291  30.910044  -3.771337 65.59142
## 292  30.910044  -3.771337 65.59142
## 293  30.910044  -3.771337 65.59142
## 294  30.910044  -3.771337 65.59142
## 295  30.910044  -3.771337 65.59142
## 296  30.910044  -3.771337 65.59142
## 297  30.910044  -3.771337 65.59142
## 298  30.910044  -3.771337 65.59142
## 299  30.910044  -3.771337 65.59142
## 300  13.614688 -21.101896 48.33127
## 301  30.910044  -3.771337 65.59142
## 302  30.910044  -3.771337 65.59142
## 303  30.910044  -3.771337 65.59142
## 304  30.910044  -3.771337 65.59142
## 305  30.910044  -3.771337 65.59142
## 306  30.910044  -3.771337 65.59142
## 307  30.910044  -3.771337 65.59142
## 308  13.614688 -21.101896 48.33127
## 309  30.910044  -3.771337 65.59142
## 310  30.910044  -3.771337 65.59142
## 311  30.910044  -3.771337 65.59142
## 312  30.910044  -3.771337 65.59142
## 313  30.910044  -3.771337 65.59142
## 314  30.910044  -3.771337 65.59142
## 315  30.910044  -3.771337 65.59142
## 316  30.910044  -3.771337 65.59142
## 317  30.910044  -3.771337 65.59142
## 318  30.910044  -3.771337 65.59142
## 319  30.910044  -3.771337 65.59142
## 320  30.910044  -3.771337 65.59142
## 321  30.910044  -3.771337 65.59142
## 322  30.910044  -3.771337 65.59142
## 323  30.910044  -3.771337 65.59142
## 324  30.910044  -3.771337 65.59142
## 325  30.910044  -3.771337 65.59142
## 326  30.910044  -3.771337 65.59142
## 327  30.910044  -3.771337 65.59142
## 328  30.910044  -3.771337 65.59142
## 329  30.910044  -3.771337 65.59142
## 330  30.910044  -3.771337 65.59142
## 331  30.910044  -3.771337 65.59142
## 332  30.910044  -3.771337 65.59142
## 333  30.910044  -3.771337 65.59142
## 334  30.910044  -3.771337 65.59142
## 335  30.910044  -3.771337 65.59142
## 336  30.910044  -3.771337 65.59142
## 337  30.910044  -3.771337 65.59142
## 338  30.910044  -3.771337 65.59142
## 339  30.910044  -3.771337 65.59142
## 340  30.910044  -3.771337 65.59142
## 341  30.910044  -3.771337 65.59142
## 342  30.910044  -3.771337 65.59142
## 343  30.910044  -3.771337 65.59142
## 344  30.910044  -3.771337 65.59142
## 345  13.614688 -21.101896 48.33127
## 346  30.910044  -3.771337 65.59142
## 347  30.910044  -3.771337 65.59142
## 348  13.614688 -21.101896 48.33127
## 349  30.910044  -3.771337 65.59142
## 350  30.910044  -3.771337 65.59142
## 351  30.910044  -3.771337 65.59142
## 352  30.910044  -3.771337 65.59142
## 353  30.910044  -3.771337 65.59142
## 354  30.910044  -3.771337 65.59142
## 355  30.910044  -3.771337 65.59142
## 356  30.910044  -3.771337 65.59142
## 357  30.910044  -3.771337 65.59142
## 358  30.910044  -3.771337 65.59142
## 359  30.910044  -3.771337 65.59142
## 360  30.910044  -3.771337 65.59142
## 361  30.910044  -3.771337 65.59142
## 362  30.910044  -3.771337 65.59142
## 363  13.614688 -21.101896 48.33127
## 364  30.910044  -3.771337 65.59142
## 365  30.910044  -3.771337 65.59142
## 366  30.910044  -3.771337 65.59142
## 367  30.910044  -3.771337 65.59142
## 368  30.910044  -3.771337 65.59142
## 369  30.910044  -3.771337 65.59142
## 370  30.910044  -3.771337 65.59142
## 371  30.910044  -3.771337 65.59142
## 372  30.910044  -3.771337 65.59142
## 373  30.910044  -3.771337 65.59142
## 374  13.614688 -21.101896 48.33127
## 375  30.910044  -3.771337 65.59142
## 376  30.910044  -3.771337 65.59142
## 377  30.910044  -3.771337 65.59142
## 378  30.910044  -3.771337 65.59142
## 379  30.910044  -3.771337 65.59142
## 380  30.910044  -3.771337 65.59142
## 381  30.910044  -3.771337 65.59142
## 382  30.910044  -3.771337 65.59142
## 383  30.910044  -3.771337 65.59142
## 384  30.910044  -3.771337 65.59142
## 385  30.910044  -3.771337 65.59142
## 386  30.910044  -3.771337 65.59142
## 387  30.910044  -3.771337 65.59142
## 388  30.910044  -3.771337 65.59142
## 389  30.910044  -3.771337 65.59142
## 390  30.910044  -3.771337 65.59142
## 391  30.910044  -3.771337 65.59142
## 392  30.910044  -3.771337 65.59142
## 393  30.910044  -3.771337 65.59142
## 394  30.910044  -3.771337 65.59142
## 395  30.910044  -3.771337 65.59142
## 396  30.910044  -3.771337 65.59142
## 397  30.910044  -3.771337 65.59142
## 398  30.910044  -3.771337 65.59142
## 399  30.910044  -3.771337 65.59142
## 400  30.910044  -3.771337 65.59142
## 401  30.910044  -3.771337 65.59142
## 402  30.910044  -3.771337 65.59142
## 403  30.910044  -3.771337 65.59142
## 404  13.614688 -21.101896 48.33127
## 405  30.910044  -3.771337 65.59142
## 406  30.910044  -3.771337 65.59142
## 407  30.910044  -3.771337 65.59142
## 408  13.614688 -21.101896 48.33127
## 409  30.910044  -3.771337 65.59142
## 410  30.910044  -3.771337 65.59142
## 411  13.614688 -21.101896 48.33127
## 412  30.910044  -3.771337 65.59142
## 413  30.910044  -3.771337 65.59142
## 414  30.910044  -3.771337 65.59142
## 415  13.614688 -21.101896 48.33127
## 416  30.910044  -3.771337 65.59142
## 417  30.910044  -3.771337 65.59142
## 418  30.910044  -3.771337 65.59142
## 419  30.910044  -3.771337 65.59142
## 420  30.910044  -3.771337 65.59142
## 421  30.910044  -3.771337 65.59142
## 422  30.910044  -3.771337 65.59142
## 423  30.910044  -3.771337 65.59142
## 424  13.614688 -21.101896 48.33127
## 425  13.614688 -21.101896 48.33127
## 426  30.910044  -3.771337 65.59142
## 427  13.614688 -21.101896 48.33127
## 428  30.910044  -3.771337 65.59142
## 429  30.910044  -3.771337 65.59142
## 430  30.910044  -3.771337 65.59142
## 431  30.910044  -3.771337 65.59142
## 432  13.614688 -21.101896 48.33127
## 433  30.910044  -3.771337 65.59142
## 434  30.910044  -3.771337 65.59142
## 435  30.910044  -3.771337 65.59142
## 436  30.910044  -3.771337 65.59142
## 437  30.910044  -3.771337 65.59142
## 438  13.614688 -21.101896 48.33127
## 439  30.910044  -3.771337 65.59142
## 440  30.910044  -3.771337 65.59142
## 441  30.910044  -3.771337 65.59142
## 442  30.910044  -3.771337 65.59142
## 443  30.910044  -3.771337 65.59142
## 444  30.910044  -3.771337 65.59142
## 445  30.910044  -3.771337 65.59142
## 446  30.910044  -3.771337 65.59142
## 447  30.910044  -3.771337 65.59142
## 448  30.910044  -3.771337 65.59142
## 449  30.910044  -3.771337 65.59142
## 450  30.910044  -3.771337 65.59142
## 451  30.910044  -3.771337 65.59142
## 452  30.910044  -3.771337 65.59142
## 453  30.910044  -3.771337 65.59142
## 454  30.910044  -3.771337 65.59142
## 455  30.910044  -3.771337 65.59142
## 456  30.910044  -3.771337 65.59142
## 457  30.910044  -3.771337 65.59142
## 458  30.910044  -3.771337 65.59142
## 459  30.910044  -3.771337 65.59142
## 460  30.910044  -3.771337 65.59142
## 461  30.910044  -3.771337 65.59142
## 462  30.910044  -3.771337 65.59142
## 463  30.910044  -3.771337 65.59142
## 464  30.910044  -3.771337 65.59142
## 465  30.910044  -3.771337 65.59142
## 466  30.910044  -3.771337 65.59142
## 467  30.910044  -3.771337 65.59142
## 468  30.910044  -3.771337 65.59142
## 469  13.614688 -21.101896 48.33127
## 470  30.910044  -3.771337 65.59142
## 471  30.910044  -3.771337 65.59142
## 472  30.910044  -3.771337 65.59142
## 473  30.910044  -3.771337 65.59142
## 474  30.910044  -3.771337 65.59142
## 475  30.910044  -3.771337 65.59142
## 476  30.910044  -3.771337 65.59142
## 477  30.910044  -3.771337 65.59142
## 478  30.910044  -3.771337 65.59142
## 479  30.910044  -3.771337 65.59142
## 480  30.910044  -3.771337 65.59142
## 481  30.910044  -3.771337 65.59142
## 482  30.910044  -3.771337 65.59142
## 483  30.910044  -3.771337 65.59142
## 484  30.910044  -3.771337 65.59142
## 485  30.910044  -3.771337 65.59142
## 486  30.910044  -3.771337 65.59142
## 487  30.910044  -3.771337 65.59142
## 488  30.910044  -3.771337 65.59142
## 489  30.910044  -3.771337 65.59142
## 490  30.910044  -3.771337 65.59142
## 491  13.614688 -21.101896 48.33127
## 492  30.910044  -3.771337 65.59142
## 493  30.910044  -3.771337 65.59142
## 494  13.614688 -21.101896 48.33127
## 495  30.910044  -3.771337 65.59142
## 496  30.910044  -3.771337 65.59142
## 497  30.910044  -3.771337 65.59142
## 498  30.910044  -3.771337 65.59142
## 499  30.910044  -3.771337 65.59142
## 500  30.910044  -3.771337 65.59142
## 501  30.910044  -3.771337 65.59142
## 502  30.910044  -3.771337 65.59142
## 503  30.910044  -3.771337 65.59142
## 504  30.910044  -3.771337 65.59142
## 505  30.910044  -3.771337 65.59142
## 506  30.910044  -3.771337 65.59142
## 507  13.614688 -21.101896 48.33127
## 508  30.910044  -3.771337 65.59142
## 509   9.804651 -25.058758 44.66806
## 510  30.910044  -3.771337 65.59142
## 511  30.910044  -3.771337 65.59142
## 512  30.910044  -3.771337 65.59142
## 513  30.910044  -3.771337 65.59142
## 514  30.910044  -3.771337 65.59142
## 515  30.910044  -3.771337 65.59142
## 516  30.910044  -3.771337 65.59142
## 517  13.614688 -21.101896 48.33127
## 518  30.910044  -3.771337 65.59142
## 519  30.910044  -3.771337 65.59142
## 520  30.910044  -3.771337 65.59142
## 521  30.910044  -3.771337 65.59142
## 522  30.910044  -3.771337 65.59142
## 523   9.804651 -25.058758 44.66806
## 524  30.910044  -3.771337 65.59142
## 525  30.910044  -3.771337 65.59142
## 526  30.910044  -3.771337 65.59142
## 527  13.614688 -21.101896 48.33127
## 528  30.910044  -3.771337 65.59142
## 529  13.614688 -21.101896 48.33127
## 530  30.910044  -3.771337 65.59142
## 531  30.910044  -3.771337 65.59142
## 532  13.614688 -21.101896 48.33127
## 533  30.910044  -3.771337 65.59142
## 534  30.910044  -3.771337 65.59142
## 535  30.910044  -3.771337 65.59142
## 536  30.910044  -3.771337 65.59142
## 537  30.910044  -3.771337 65.59142
## 538  30.910044  -3.771337 65.59142
## 539  30.910044  -3.771337 65.59142
## 540  30.910044  -3.771337 65.59142
## 541  13.614688 -21.101896 48.33127
## 542  13.614688 -21.101896 48.33127
## 543  30.910044  -3.771337 65.59142
## 544  30.910044  -3.771337 65.59142
## 545  30.910044  -3.771337 65.59142
## 546  13.614688 -21.101896 48.33127
## 547  13.614688 -21.101896 48.33127
## 548  30.910044  -3.771337 65.59142
## 549  30.910044  -3.771337 65.59142
## 550  30.910044  -3.771337 65.59142
## 551  30.910044  -3.771337 65.59142
## 552  13.614688 -21.101896 48.33127
## 553   9.804651 -25.058758 44.66806
## 554  30.910044  -3.771337 65.59142
## 555  30.910044  -3.771337 65.59142
## 556  30.910044  -3.771337 65.59142
## 557  13.614688 -21.101896 48.33127
## 558  30.910044  -3.771337 65.59142
## 559  30.910044  -3.771337 65.59142
## 560  13.614688 -21.101896 48.33127
## 561  30.910044  -3.771337 65.59142
## 562  30.910044  -3.771337 65.59142
## 563  30.910044  -3.771337 65.59142
## 564  13.614688 -21.101896 48.33127
## 565  30.910044  -3.771337 65.59142
## 566  13.614688 -21.101896 48.33127
## 567  30.910044  -3.771337 65.59142
## 568  13.614688 -21.101896 48.33127
## 569  30.910044  -3.771337 65.59142
## 570  30.910044  -3.771337 65.59142
## 571  30.910044  -3.771337 65.59142
## 572  30.910044  -3.771337 65.59142
## 573  30.910044  -3.771337 65.59142
## 574  30.910044  -3.771337 65.59142
## 575  30.910044  -3.771337 65.59142
## 576  30.910044  -3.771337 65.59142
## 577  30.910044  -3.771337 65.59142
## 578  30.910044  -3.771337 65.59142
## 579  30.910044  -3.771337 65.59142
## 580  13.614688 -21.101896 48.33127
## 581  13.614688 -21.101896 48.33127
## 582  30.910044  -3.771337 65.59142
## 583  30.910044  -3.771337 65.59142
## 584  30.910044  -3.771337 65.59142
## 585  13.614688 -21.101896 48.33127
## 586  13.614688 -21.101896 48.33127
## 587  30.910044  -3.771337 65.59142
## 588  30.910044  -3.771337 65.59142
## 589  13.614688 -21.101896 48.33127
## 590  30.910044  -3.771337 65.59142
## 591  30.910044  -3.771337 65.59142
## 592  13.614688 -21.101896 48.33127
## 593  13.614688 -21.101896 48.33127
## 594  13.614688 -21.101896 48.33127
## 595  13.614688 -21.101896 48.33127
## 596  30.910044  -3.771337 65.59142
## 597   9.804651 -25.058758 44.66806
## 598  30.910044  -3.771337 65.59142
## 599  30.910044  -3.771337 65.59142
## 600  30.910044  -3.771337 65.59142
## 601  30.910044  -3.771337 65.59142
## 602  30.910044  -3.771337 65.59142
## 603  30.910044  -3.771337 65.59142
## 604  30.910044  -3.771337 65.59142
## 605  30.910044  -3.771337 65.59142
## 606  30.910044  -3.771337 65.59142
## 607  30.910044  -3.771337 65.59142
## 608  30.910044  -3.771337 65.59142
## 609  13.614688 -21.101896 48.33127
## 610  30.910044  -3.771337 65.59142
## 611  30.910044  -3.771337 65.59142
## 612  30.910044  -3.771337 65.59142
## 613  30.910044  -3.771337 65.59142
## 614  30.910044  -3.771337 65.59142
## 615  30.910044  -3.771337 65.59142
## 616  30.910044  -3.771337 65.59142
## 617  13.614688 -21.101896 48.33127
## 618  13.614688 -21.101896 48.33127
## 619  30.910044  -3.771337 65.59142
## 620  30.910044  -3.771337 65.59142
## 621  13.614688 -21.101896 48.33127
## 622  30.910044  -3.771337 65.59142
## 623  30.910044  -3.771337 65.59142
## 624  30.910044  -3.771337 65.59142
## 625  13.614688 -21.101896 48.33127
## 626  30.910044  -3.771337 65.59142
## 627  30.910044  -3.771337 65.59142
## 628  13.614688 -21.101896 48.33127
## 629  30.910044  -3.771337 65.59142
## 630  30.910044  -3.771337 65.59142
## 631  30.910044  -3.771337 65.59142
## 632  30.910044  -3.771337 65.59142
## 633  30.910044  -3.771337 65.59142
## 634  30.910044  -3.771337 65.59142
## 635  13.614688 -21.101896 48.33127
## 636  30.910044  -3.771337 65.59142
## 637  30.910044  -3.771337 65.59142
## 638  30.910044  -3.771337 65.59142
## 639  30.910044  -3.771337 65.59142
## 640  30.910044  -3.771337 65.59142
## 641  30.910044  -3.771337 65.59142
## 642  30.910044  -3.771337 65.59142
## 643   9.804651 -25.058758 44.66806
## 644  30.910044  -3.771337 65.59142
## 645  13.614688 -21.101896 48.33127
## 646  13.614688 -21.101896 48.33127
## 647  30.910044  -3.771337 65.59142
## 648  13.614688 -21.101896 48.33127
## 649  30.910044  -3.771337 65.59142
## 650  13.614688 -21.101896 48.33127
## 651  30.910044  -3.771337 65.59142
## 652  30.910044  -3.771337 65.59142
## 653  13.614688 -21.101896 48.33127
## 654  30.910044  -3.771337 65.59142
## 655  30.910044  -3.771337 65.59142
## 656  13.614688 -21.101896 48.33127
## 657  13.614688 -21.101896 48.33127
## 658  13.614688 -21.101896 48.33127
## 659   9.804651 -25.058758 44.66806
## 660  13.614688 -21.101896 48.33127
## 661  13.614688 -21.101896 48.33127
## 662  30.910044  -3.771337 65.59142
## 663  30.910044  -3.771337 65.59142
## 664  30.910044  -3.771337 65.59142
## 665  30.910044  -3.771337 65.59142
## 666  30.910044  -3.771337 65.59142
## 667  30.910044  -3.771337 65.59142
## 668  30.910044  -3.771337 65.59142
## 669  30.910044  -3.771337 65.59142
## 670  30.910044  -3.771337 65.59142
## 671  30.910044  -3.771337 65.59142
## 672   9.804651 -25.058758 44.66806
## 673  30.910044  -3.771337 65.59142
## 674  30.910044  -3.771337 65.59142
## 675  30.910044  -3.771337 65.59142
## 676   9.804651 -25.058758 44.66806
## 677  30.910044  -3.771337 65.59142
## 678  13.614688 -21.101896 48.33127
## 679  13.614688 -21.101896 48.33127
## 680  30.910044  -3.771337 65.59142
## 681  30.910044  -3.771337 65.59142
## 682  30.910044  -3.771337 65.59142
## 683  30.910044  -3.771337 65.59142
## 684  13.614688 -21.101896 48.33127
## 685  30.910044  -3.771337 65.59142
## 686  30.910044  -3.771337 65.59142
## 687  13.614688 -21.101896 48.33127
## 688  13.614688 -21.101896 48.33127
## 689  30.910044  -3.771337 65.59142
## 690  13.614688 -21.101896 48.33127
## 691  13.614688 -21.101896 48.33127
## 692  30.910044  -3.771337 65.59142
## 693  30.910044  -3.771337 65.59142
## 694  30.910044  -3.771337 65.59142
## 695  30.910044  -3.771337 65.59142
## 696  30.910044  -3.771337 65.59142
## 697  13.614688 -21.101896 48.33127
## 698  13.614688 -21.101896 48.33127
## 699  30.910044  -3.771337 65.59142
## 700  30.910044  -3.771337 65.59142
## 701  30.910044  -3.771337 65.59142
## 702  30.910044  -3.771337 65.59142
## 703  30.910044  -3.771337 65.59142
## 704  30.910044  -3.771337 65.59142
## 705  30.910044  -3.771337 65.59142
## 706  30.910044  -3.771337 65.59142
## 707  13.614688 -21.101896 48.33127
## 708  30.910044  -3.771337 65.59142
## 709  30.910044  -3.771337 65.59142
## 710  30.910044  -3.771337 65.59142
## 711  13.614688 -21.101896 48.33127
## 712  30.910044  -3.771337 65.59142
## 713  13.614688 -21.101896 48.33127
## 714  30.910044  -3.771337 65.59142
## 715   9.804651 -25.058758 44.66806
## 716  30.910044  -3.771337 65.59142
## 717  13.614688 -21.101896 48.33127
## 718  30.910044  -3.771337 65.59142
## 719  30.910044  -3.771337 65.59142
## 720  13.614688 -21.101896 48.33127
## 721  13.614688 -21.101896 48.33127
## 722  30.910044  -3.771337 65.59142
## 723  13.614688 -21.101896 48.33127
## 724  30.910044  -3.771337 65.59142
## 725  13.614688 -21.101896 48.33127
## 726  13.614688 -21.101896 48.33127
## 727  30.910044  -3.771337 65.59142
## 728  30.910044  -3.771337 65.59142
## 729  30.910044  -3.771337 65.59142
## 730   9.804651 -25.058758 44.66806
## 731  13.614688 -21.101896 48.33127
## 732  30.910044  -3.771337 65.59142
## 733  30.910044  -3.771337 65.59142
## 734  30.910044  -3.771337 65.59142
## 735  30.910044  -3.771337 65.59142
## 736  30.910044  -3.771337 65.59142
## 737  13.614688 -21.101896 48.33127
## 738  13.614688 -21.101896 48.33127
## 739  30.910044  -3.771337 65.59142
## 740  30.910044  -3.771337 65.59142
## 741  30.910044  -3.771337 65.59142
## 742  13.614688 -21.101896 48.33127
## 743  30.910044  -3.771337 65.59142
## 744  30.910044  -3.771337 65.59142
## 745  30.910044  -3.771337 65.59142
## 746   9.804651 -25.058758 44.66806
## 747  13.614688 -21.101896 48.33127
## 748  30.910044  -3.771337 65.59142
## 749  30.910044  -3.771337 65.59142
## 750  30.910044  -3.771337 65.59142
## 751  30.910044  -3.771337 65.59142
## 752  30.910044  -3.771337 65.59142
## 753   9.804651 -25.058758 44.66806
## 754  30.910044  -3.771337 65.59142
## 755  30.910044  -3.771337 65.59142
## 756  30.910044  -3.771337 65.59142
## 757  30.910044  -3.771337 65.59142
## 758  13.614688 -21.101896 48.33127
## 759  30.910044  -3.771337 65.59142
## 760  13.614688 -21.101896 48.33127
## 761  13.614688 -21.101896 48.33127
## 762  30.910044  -3.771337 65.59142
## 763  30.910044  -3.771337 65.59142
## 764   9.804651 -25.058758 44.66806
## 765  30.910044  -3.771337 65.59142
## 766  30.910044  -3.771337 65.59142
## 767  13.614688 -21.101896 48.33127
## 768  13.614688 -21.101896 48.33127
## 769  13.614688 -21.101896 48.33127
## 770  30.910044  -3.771337 65.59142
## 771  30.910044  -3.771337 65.59142
## 772  30.910044  -3.771337 65.59142
## 773  30.910044  -3.771337 65.59142
## 774  30.910044  -3.771337 65.59142
## 775  30.910044  -3.771337 65.59142
## 776  30.910044  -3.771337 65.59142
## 777  30.910044  -3.771337 65.59142
## 778  13.614688 -21.101896 48.33127
## 779  13.614688 -21.101896 48.33127
## 780  13.614688 -21.101896 48.33127
## 781  13.614688 -21.101896 48.33127
## 782  13.614688 -21.101896 48.33127
## 783  30.910044  -3.771337 65.59142
## 784  30.910044  -3.771337 65.59142
## 785  30.910044  -3.771337 65.59142
## 786  30.910044  -3.771337 65.59142
## 787  30.910044  -3.771337 65.59142
## 788  30.910044  -3.771337 65.59142
## 789  30.910044  -3.771337 65.59142
## 790  30.910044  -3.771337 65.59142
## 791  30.910044  -3.771337 65.59142
## 792  13.614688 -21.101896 48.33127
## 793  30.910044  -3.771337 65.59142
## 794  13.614688 -21.101896 48.33127
## 795  30.910044  -3.771337 65.59142
## 796  30.910044  -3.771337 65.59142
## 797  13.614688 -21.101896 48.33127
## 798  30.910044  -3.771337 65.59142
## 799  13.614688 -21.101896 48.33127
## 800  30.910044  -3.771337 65.59142
## 801  13.614688 -21.101896 48.33127
## 802  13.614688 -21.101896 48.33127
## 803  13.614688 -21.101896 48.33127
## 804  30.910044  -3.771337 65.59142
## 805  13.614688 -21.101896 48.33127
## 806  30.910044  -3.771337 65.59142
## 807  30.910044  -3.771337 65.59142
## 808  13.614688 -21.101896 48.33127
## 809  13.614688 -21.101896 48.33127
## 810  30.910044  -3.771337 65.59142
## 811  13.614688 -21.101896 48.33127
## 812  30.910044  -3.771337 65.59142
## 813   9.804651 -25.058758 44.66806
## 814  13.614688 -21.101896 48.33127
## 815  30.910044  -3.771337 65.59142
## 816  30.910044  -3.771337 65.59142
## 817  30.910044  -3.771337 65.59142
## 818  13.614688 -21.101896 48.33127
## 819  30.910044  -3.771337 65.59142
## 820  30.910044  -3.771337 65.59142
## 821  30.910044  -3.771337 65.59142
## 822  30.910044  -3.771337 65.59142
## 823  30.910044  -3.771337 65.59142
## 824  30.910044  -3.771337 65.59142
## 825  30.910044  -3.771337 65.59142
## 826  30.910044  -3.771337 65.59142
## 827  13.614688 -21.101896 48.33127
## 828  30.910044  -3.771337 65.59142
## 829  30.910044  -3.771337 65.59142
## 830  30.910044  -3.771337 65.59142
## 831  13.614688 -21.101896 48.33127
## 832  30.910044  -3.771337 65.59142
## 833   9.804651 -25.058758 44.66806
## 834  13.614688 -21.101896 48.33127
## 835  30.910044  -3.771337 65.59142
## 836  30.910044  -3.771337 65.59142
## 837  13.614688 -21.101896 48.33127
## 838  13.614688 -21.101896 48.33127
## 839  13.614688 -21.101896 48.33127
## 840  13.614688 -21.101896 48.33127
## 841  30.910044  -3.771337 65.59142
## 842  30.910044  -3.771337 65.59142
## 843  13.614688 -21.101896 48.33127
## 844  30.910044  -3.771337 65.59142
## 845   9.804651 -25.058758 44.66806
## 846   9.804651 -25.058758 44.66806
## 847  13.614688 -21.101896 48.33127
## 848  30.910044  -3.771337 65.59142
## 849  13.614688 -21.101896 48.33127
## 850  30.910044  -3.771337 65.59142
## 851  13.614688 -21.101896 48.33127
## 852  13.614688 -21.101896 48.33127
## 853  13.614688 -21.101896 48.33127
## 854  13.614688 -21.101896 48.33127
## 855  13.614688 -21.101896 48.33127
## 856  30.910044  -3.771337 65.59142
## 857  30.910044  -3.771337 65.59142
## 858  30.910044  -3.771337 65.59142
## 859  13.614688 -21.101896 48.33127
## 860  30.910044  -3.771337 65.59142
## 861  30.910044  -3.771337 65.59142
## 862  30.910044  -3.771337 65.59142
## 863  30.910044  -3.771337 65.59142
## 864  13.614688 -21.101896 48.33127
## 865  13.614688 -21.101896 48.33127
## 866  30.910044  -3.771337 65.59142
## 867  30.910044  -3.771337 65.59142
## 868  30.910044  -3.771337 65.59142
## 869  30.910044  -3.771337 65.59142
## 870   9.804651 -25.058758 44.66806
## 871  30.910044  -3.771337 65.59142
## 872  30.910044  -3.771337 65.59142
## 873  30.910044  -3.771337 65.59142
## 874  13.614688 -21.101896 48.33127
## 875  13.614688 -21.101896 48.33127
## 876  30.910044  -3.771337 65.59142
## 877  30.910044  -3.771337 65.59142
## 878  13.614688 -21.101896 48.33127
## 879   9.804651 -25.058758 44.66806
## 880  13.614688 -21.101896 48.33127
## 881  30.910044  -3.771337 65.59142
## 882  30.910044  -3.771337 65.59142
## 883   9.804651 -25.058758 44.66806
## 884  13.614688 -21.101896 48.33127
## 885  30.910044  -3.771337 65.59142
## 886  13.614688 -21.101896 48.33127
## 887  30.910044  -3.771337 65.59142
## 888  13.614688 -21.101896 48.33127
## 889  30.910044  -3.771337 65.59142
## 890  30.910044  -3.771337 65.59142
## 891  13.614688 -21.101896 48.33127
## 892   9.804651 -25.058758 44.66806
## 893  13.614688 -21.101896 48.33127
## 894   9.804651 -25.058758 44.66806
## 895  13.614688 -21.101896 48.33127
## 896  30.910044  -3.771337 65.59142
## 897  30.910044  -3.771337 65.59142
## 898  13.614688 -21.101896 48.33127
## 899  30.910044  -3.771337 65.59142
## 900  30.910044  -3.771337 65.59142
## 901  30.910044  -3.771337 65.59142
## 902  13.614688 -21.101896 48.33127
## 903  30.910044  -3.771337 65.59142
## 904  30.910044  -3.771337 65.59142
## 905  30.910044  -3.771337 65.59142
## 906  30.910044  -3.771337 65.59142
## 907  30.910044  -3.771337 65.59142
## 908  30.910044  -3.771337 65.59142
## 909  30.910044  -3.771337 65.59142
## 910  30.910044  -3.771337 65.59142
## 911  13.614688 -21.101896 48.33127
## 912   9.804651 -25.058758 44.66806
## 913  30.910044  -3.771337 65.59142
## 914  13.614688 -21.101896 48.33127
## 915  13.614688 -21.101896 48.33127
## 916  30.910044  -3.771337 65.59142
## 917  13.614688 -21.101896 48.33127
## 918  30.910044  -3.771337 65.59142
## 919  30.910044  -3.771337 65.59142
## 920  30.910044  -3.771337 65.59142
## 921  30.910044  -3.771337 65.59142
## 922  30.910044  -3.771337 65.59142
## 923  30.910044  -3.771337 65.59142
## 924  13.614688 -21.101896 48.33127
## 925  13.614688 -21.101896 48.33127
## 926  30.910044  -3.771337 65.59142
## 927  30.910044  -3.771337 65.59142
## 928  30.910044  -3.771337 65.59142
## 929  13.614688 -21.101896 48.33127
## 930  13.614688 -21.101896 48.33127
## 931  13.614688 -21.101896 48.33127
## 932   9.804651 -25.058758 44.66806
## 933  30.910044  -3.771337 65.59142
## 934  30.910044  -3.771337 65.59142
## 935  30.910044  -3.771337 65.59142
## 936  30.910044  -3.771337 65.59142
## 937   9.804651 -25.058758 44.66806
## 938  30.910044  -3.771337 65.59142
## 939  30.910044  -3.771337 65.59142
## 940  30.910044  -3.771337 65.59142
## 941  30.910044  -3.771337 65.59142
## 942  13.614688 -21.101896 48.33127
## 943  30.910044  -3.771337 65.59142
## 944  30.910044  -3.771337 65.59142
## 945  13.614688 -21.101896 48.33127
## 946  30.910044  -3.771337 65.59142
## 947  30.910044  -3.771337 65.59142
## 948  30.910044  -3.771337 65.59142
## 949  30.910044  -3.771337 65.59142
## 950  13.614688 -21.101896 48.33127
## 951  30.910044  -3.771337 65.59142
## 952  13.614688 -21.101896 48.33127
## 953  30.910044  -3.771337 65.59142
## 954  30.910044  -3.771337 65.59142
## 955   9.804651 -25.058758 44.66806
## 956  30.910044  -3.771337 65.59142
## 957  30.910044  -3.771337 65.59142
## 958  30.910044  -3.771337 65.59142
## 959   9.804651 -25.058758 44.66806
## 960  13.614688 -21.101896 48.33127
## 961  13.614688 -21.101896 48.33127
## 962  30.910044  -3.771337 65.59142
## 963  30.910044  -3.771337 65.59142
## 964  13.614688 -21.101896 48.33127
## 965  30.910044  -3.771337 65.59142
## 966  30.910044  -3.771337 65.59142
## 967  30.910044  -3.771337 65.59142
## 968  30.910044  -3.771337 65.59142
## 969  30.910044  -3.771337 65.59142
## 970  13.614688 -21.101896 48.33127
## 971   9.804651 -25.058758 44.66806
## 972  30.910044  -3.771337 65.59142
## 973  13.614688 -21.101896 48.33127
## 974  13.614688 -21.101896 48.33127
## 975  13.614688 -21.101896 48.33127
## 976  13.614688 -21.101896 48.33127
## 977  30.910044  -3.771337 65.59142
## 978  30.910044  -3.771337 65.59142
## 979  13.614688 -21.101896 48.33127
## 980  13.614688 -21.101896 48.33127
## 981  13.614688 -21.101896 48.33127
## 982  30.910044  -3.771337 65.59142
## 983  30.910044  -3.771337 65.59142
## 984  30.910044  -3.771337 65.59142
## 985  13.614688 -21.101896 48.33127
## 986  13.614688 -21.101896 48.33127
## 987  13.614688 -21.101896 48.33127
## 988  30.910044  -3.771337 65.59142
## 989  30.910044  -3.771337 65.59142
## 990  30.910044  -3.771337 65.59142
## 991  13.614688 -21.101896 48.33127
## 992  13.614688 -21.101896 48.33127
## 993  30.910044  -3.771337 65.59142
## 994  13.614688 -21.101896 48.33127
## 995   9.804651 -25.058758 44.66806
## 996  13.614688 -21.101896 48.33127
## 997  13.614688 -21.101896 48.33127
## 998  30.910044  -3.771337 65.59142
## 999  30.910044  -3.771337 65.59142
## 1000 30.910044  -3.771337 65.59142
## 1001 30.910044  -3.771337 65.59142
## 1002 13.614688 -21.101896 48.33127
## 1003 30.910044  -3.771337 65.59142
## 1004 30.910044  -3.771337 65.59142
## 1005 13.614688 -21.101896 48.33127
## 1006 30.910044  -3.771337 65.59142
## 1007 30.910044  -3.771337 65.59142
## 1008 13.614688 -21.101896 48.33127
## 1009 13.614688 -21.101896 48.33127
## 1010 30.910044  -3.771337 65.59142
## 1011 30.910044  -3.771337 65.59142
## 1012 13.614688 -21.101896 48.33127
## 1013  9.804651 -25.058758 44.66806
## 1014 30.910044  -3.771337 65.59142
## 1015 13.614688 -21.101896 48.33127
## 1016 30.910044  -3.771337 65.59142
## 1017 30.910044  -3.771337 65.59142
## 1018 30.910044  -3.771337 65.59142
## 1019 13.614688 -21.101896 48.33127
## 1020 13.614688 -21.101896 48.33127
## 1021 30.910044  -3.771337 65.59142
## 1022  9.804651 -25.058758 44.66806
## 1023 30.910044  -3.771337 65.59142
## 1024 30.910044  -3.771337 65.59142
## 1025 13.614688 -21.101896 48.33127
## 1026 30.910044  -3.771337 65.59142
## 1027 30.910044  -3.771337 65.59142
## 1028 30.910044  -3.771337 65.59142
## 1029 30.910044  -3.771337 65.59142
## 1030 30.910044  -3.771337 65.59142
## 1031 13.614688 -21.101896 48.33127
## 1032 30.910044  -3.771337 65.59142
## 1033 30.910044  -3.771337 65.59142
## 1034 30.910044  -3.771337 65.59142
## 1035 30.910044  -3.771337 65.59142
## 1036 13.614688 -21.101896 48.33127
## 1037 30.910044  -3.771337 65.59142
## 1038 30.910044  -3.771337 65.59142
## 1039  9.804651 -25.058758 44.66806
## 1040 13.614688 -21.101896 48.33127
## 1041 30.910044  -3.771337 65.59142
## 1042 30.910044  -3.771337 65.59142
## 1043 30.910044  -3.771337 65.59142
## 1044 30.910044  -3.771337 65.59142
## 1045 30.910044  -3.771337 65.59142
## 1046 13.614688 -21.101896 48.33127
## 1047 30.910044  -3.771337 65.59142
## 1048 13.614688 -21.101896 48.33127
## 1049 30.910044  -3.771337 65.59142
## 1050 30.910044  -3.771337 65.59142
## 1051 13.614688 -21.101896 48.33127
## 1052 13.614688 -21.101896 48.33127
## 1053 13.614688 -21.101896 48.33127
## 1054 13.614688 -21.101896 48.33127
## 1055  9.804651 -25.058758 44.66806
## 1056  9.804651 -25.058758 44.66806
## 1057  9.804651 -25.058758 44.66806
## 1058  9.804651 -25.058758 44.66806
## 1059 13.614688 -21.101896 48.33127
## 1060 13.614688 -21.101896 48.33127
## 1061 30.910044  -3.771337 65.59142
## 1062  9.804651 -25.058758 44.66806
## 1063 30.910044  -3.771337 65.59142
## 1064  9.804651 -25.058758 44.66806
## 1065  9.804651 -25.058758 44.66806
## 1066  9.804651 -25.058758 44.66806
## 1067  9.804651 -25.058758 44.66806
## 1068  9.804651 -25.058758 44.66806
## 1069  9.804651 -25.058758 44.66806
## 1070 13.614688 -21.101896 48.33127
## 1071 30.910044  -3.771337 65.59142
## 1072 13.614688 -21.101896 48.33127
## 1073 30.910044  -3.771337 65.59142
## 1074 30.910044  -3.771337 65.59142
## 1075 30.910044  -3.771337 65.59142
## 1076 30.910044  -3.771337 65.59142
## 1077 30.910044  -3.771337 65.59142
## 1078 13.614688 -21.101896 48.33127
## 1079 13.614688 -21.101896 48.33127
## 1080 30.910044  -3.771337 65.59142
## 1081 13.614688 -21.101896 48.33127
## 1082 13.614688 -21.101896 48.33127
## 1083 30.910044  -3.771337 65.59142
## 1084 13.614688 -21.101896 48.33127
## 1085 30.910044  -3.771337 65.59142
## 1086 30.910044  -3.771337 65.59142
## 1087 13.614688 -21.101896 48.33127
## 1088 30.910044  -3.771337 65.59142
## 1089 13.614688 -21.101896 48.33127
## 1090 13.614688 -21.101896 48.33127
## 1091 30.910044  -3.771337 65.59142
## 1092 30.910044  -3.771337 65.59142
## 1093 30.910044  -3.771337 65.59142
## 1094 13.614688 -21.101896 48.33127
## 1095 13.614688 -21.101896 48.33127
## 1096 30.910044  -3.771337 65.59142
## 1097 13.614688 -21.101896 48.33127
## 1098 30.910044  -3.771337 65.59142
## 1099 30.910044  -3.771337 65.59142
## 1100 30.910044  -3.771337 65.59142
## 1101 30.910044  -3.771337 65.59142
## 1102 30.910044  -3.771337 65.59142
## 1103 13.614688 -21.101896 48.33127
## 1104 30.910044  -3.771337 65.59142
## 1105 13.614688 -21.101896 48.33127
## 1106 30.910044  -3.771337 65.59142
## 1107 13.614688 -21.101896 48.33127
## 1108 30.910044  -3.771337 65.59142
## 1109 30.910044  -3.771337 65.59142
## 1110 13.614688 -21.101896 48.33127
## 1111 30.910044  -3.771337 65.59142
## 1112 30.910044  -3.771337 65.59142
## 1113 30.910044  -3.771337 65.59142
## 1114 13.614688 -21.101896 48.33127
## 1115 30.910044  -3.771337 65.59142
## 1116 30.910044  -3.771337 65.59142
## 1117 30.910044  -3.771337 65.59142
## 1118 30.910044  -3.771337 65.59142
## 1119 30.910044  -3.771337 65.59142
## 1120 13.614688 -21.101896 48.33127
## 1121 13.614688 -21.101896 48.33127
## 1122 13.614688 -21.101896 48.33127
## 1123  9.804651 -25.058758 44.66806
## 1124 13.614688 -21.101896 48.33127
## 1125  9.804651 -25.058758 44.66806
## 1126 13.614688 -21.101896 48.33127
## 1127 30.910044  -3.771337 65.59142
## 1128 30.910044  -3.771337 65.59142
## 1129 30.910044  -3.771337 65.59142
## 1130  9.804651 -25.058758 44.66806
## 1131 13.614688 -21.101896 48.33127
## 1132 30.910044  -3.771337 65.59142
## 1133 13.614688 -21.101896 48.33127
## 1134  9.804651 -25.058758 44.66806
## 1135 13.614688 -21.101896 48.33127
## 1136 13.614688 -21.101896 48.33127
## 1137  9.804651 -25.058758 44.66806
## 1138 30.910044  -3.771337 65.59142
## 1139  9.804651 -25.058758 44.66806
## 1140 13.614688 -21.101896 48.33127
## 1141 13.614688 -21.101896 48.33127
## 1142  9.804651 -25.058758 44.66806
## 1143 13.614688 -21.101896 48.33127
## 1144 30.910044  -3.771337 65.59142
## 1145 13.614688 -21.101896 48.33127
## 1146 30.910044  -3.771337 65.59142
## 1147 13.614688 -21.101896 48.33127
## 1148 13.614688 -21.101896 48.33127
## 1149 13.614688 -21.101896 48.33127
## 1150 30.910044  -3.771337 65.59142
## 1151  9.804651 -25.058758 44.66806
## 1152 30.910044  -3.771337 65.59142
## 1153 13.614688 -21.101896 48.33127
## 1154 30.910044  -3.771337 65.59142
## 1155 13.614688 -21.101896 48.33127
## 1156 30.910044  -3.771337 65.59142
## 1157  9.804651 -25.058758 44.66806
## 1158 13.614688 -21.101896 48.33127
## 1159 13.614688 -21.101896 48.33127
## 1160 13.614688 -21.101896 48.33127
## 1161 13.614688 -21.101896 48.33127
## 1162 30.910044  -3.771337 65.59142
## 1163 13.614688 -21.101896 48.33127
## 1164 30.910044  -3.771337 65.59142
## 1165 30.910044  -3.771337 65.59142
## 1166  9.804651 -25.058758 44.66806
## 1167 13.614688 -21.101896 48.33127
## 1168 30.910044  -3.771337 65.59142
## 1169 30.910044  -3.771337 65.59142
## 1170 30.910044  -3.771337 65.59142
## 1171 13.614688 -21.101896 48.33127
## 1172 13.614688 -21.101896 48.33127
## 1173 30.910044  -3.771337 65.59142
## 1174  9.804651 -25.058758 44.66806
## 1175 30.910044  -3.771337 65.59142
## 1176 30.910044  -3.771337 65.59142
## 1177 13.614688 -21.101896 48.33127
## 1178 30.910044  -3.771337 65.59142
## 1179 13.614688 -21.101896 48.33127
## 1180 30.910044  -3.771337 65.59142
## 1181 30.910044  -3.771337 65.59142
## 1182 13.614688 -21.101896 48.33127
## 1183 13.614688 -21.101896 48.33127
## 1184 30.910044  -3.771337 65.59142
## 1185 30.910044  -3.771337 65.59142
## 1186 13.614688 -21.101896 48.33127
## 1187 13.614688 -21.101896 48.33127
## 1188 30.910044  -3.771337 65.59142
## 1189 30.910044  -3.771337 65.59142
## 1190 13.614688 -21.101896 48.33127
## 1191 13.614688 -21.101896 48.33127
## 1192 13.614688 -21.101896 48.33127
## 1193 13.614688 -21.101896 48.33127
## 1194 30.910044  -3.771337 65.59142
## 1195 30.910044  -3.771337 65.59142
## 1196 13.614688 -21.101896 48.33127
## 1197 13.614688 -21.101896 48.33127
## 1198 13.614688 -21.101896 48.33127
## 1199 30.910044  -3.771337 65.59142
## 1200 13.614688 -21.101896 48.33127
## 1201 13.614688 -21.101896 48.33127
## 1202  9.804651 -25.058758 44.66806
## 1203  9.804651 -25.058758 44.66806
## 1204 13.614688 -21.101896 48.33127
## 1205 30.910044  -3.771337 65.59142
## 1206 30.910044  -3.771337 65.59142
## 1207 30.910044  -3.771337 65.59142
## 1208  9.804651 -25.058758 44.66806
## 1209 13.614688 -21.101896 48.33127
## 1210  9.804651 -25.058758 44.66806
## 1211 13.614688 -21.101896 48.33127
## 1212 13.614688 -21.101896 48.33127
## 1213 13.614688 -21.101896 48.33127
## 1214 13.614688 -21.101896 48.33127
## 1215 13.614688 -21.101896 48.33127
## 1216 13.614688 -21.101896 48.33127
## 1217 13.614688 -21.101896 48.33127
## 1218  9.804651 -25.058758 44.66806
## 1219 13.614688 -21.101896 48.33127
## 1220 13.614688 -21.101896 48.33127
## 1221  9.804651 -25.058758 44.66806
## 1222 13.614688 -21.101896 48.33127
## 1223 30.910044  -3.771337 65.59142
## 1224  9.804651 -25.058758 44.66806
## 1225  9.804651 -25.058758 44.66806
## 1226  9.804651 -25.058758 44.66806
## 1227 13.614688 -21.101896 48.33127
## 1228  9.804651 -25.058758 44.66806
## 1229 13.614688 -21.101896 48.33127
## 1230  6.100000 -42.920129 55.12013
## 1231 13.614688 -21.101896 48.33127
## 1232 13.614688 -21.101896 48.33127
## 1233 13.614688 -21.101896 48.33127
## 1234 13.614688 -21.101896 48.33127
## 1235  9.804651 -25.058758 44.66806
## 1236 13.614688 -21.101896 48.33127
## 1237 13.614688 -21.101896 48.33127
## 1238 13.614688 -21.101896 48.33127
## 1239 13.614688 -21.101896 48.33127
## 1240 13.614688 -21.101896 48.33127
## 1241 13.614688 -21.101896 48.33127
## 1242 13.614688 -21.101896 48.33127
## 1243 30.910044  -3.771337 65.59142
## 1244 13.614688 -21.101896 48.33127
## 1245 13.614688 -21.101896 48.33127
## 1246 30.910044  -3.771337 65.59142
## 1247 13.614688 -21.101896 48.33127
## 1248 13.614688 -21.101896 48.33127
## 1249 30.910044  -3.771337 65.59142
## 1250 30.910044  -3.771337 65.59142
## 1251 30.910044  -3.771337 65.59142
## 1252 30.910044  -3.771337 65.59142
## 1253 13.614688 -21.101896 48.33127
## 1254 30.910044  -3.771337 65.59142
## 1255 13.614688 -21.101896 48.33127
## 1256  9.804651 -25.058758 44.66806
## 1257 13.614688 -21.101896 48.33127
## 1258 13.614688 -21.101896 48.33127
## 1259 13.614688 -21.101896 48.33127
## 1260 13.614688 -21.101896 48.33127
## 1261 13.614688 -21.101896 48.33127
## 1262 30.910044  -3.771337 65.59142
## 1263 13.614688 -21.101896 48.33127
## 1264 13.614688 -21.101896 48.33127
## 1265 13.614688 -21.101896 48.33127
## 1266 30.910044  -3.771337 65.59142
## 1267 13.614688 -21.101896 48.33127
## 1268 13.614688 -21.101896 48.33127
## 1269 30.910044  -3.771337 65.59142
## 1270 30.910044  -3.771337 65.59142
## 1271 13.614688 -21.101896 48.33127
## 1272 13.614688 -21.101896 48.33127
## 1273 30.910044  -3.771337 65.59142
## 1274 13.614688 -21.101896 48.33127
## 1275 13.614688 -21.101896 48.33127
## 1276 13.614688 -21.101896 48.33127
## 1277  9.804651 -25.058758 44.66806
## 1278 13.614688 -21.101896 48.33127
## 1279 13.614688 -21.101896 48.33127
## 1280 13.614688 -21.101896 48.33127
## 1281 13.614688 -21.101896 48.33127
## 1282 30.910044  -3.771337 65.59142
## 1283  9.804651 -25.058758 44.66806
## 1284  9.804651 -25.058758 44.66806
## 1285 13.614688 -21.101896 48.33127
## 1286  9.804651 -25.058758 44.66806
## 1287  9.804651 -25.058758 44.66806
## 1288 30.910044  -3.771337 65.59142
## 1289  9.804651 -25.058758 44.66806
## 1290 30.910044  -3.771337 65.59142
## 1291  9.804651 -25.058758 44.66806
## 1292 13.614688 -21.101896 48.33127
## 1293  9.804651 -25.058758 44.66806
## 1294  9.804651 -25.058758 44.66806
## 1295 13.614688 -21.101896 48.33127
## 1296  9.804651 -25.058758 44.66806
## 1297  9.804651 -25.058758 44.66806
## 1298 13.614688 -21.101896 48.33127
## 1299 13.614688 -21.101896 48.33127
## 1300  9.804651 -25.058758 44.66806
## 1301  9.804651 -25.058758 44.66806
## 1302  9.804651 -25.058758 44.66806
## 1303 13.614688 -21.101896 48.33127
## 1304 13.614688 -21.101896 48.33127
## 1305  9.804651 -25.058758 44.66806
## 1306 13.614688 -21.101896 48.33127
## 1307  9.804651 -25.058758 44.66806
## 1308  9.804651 -25.058758 44.66806
## 1309 13.614688 -21.101896 48.33127
## 1310  9.804651 -25.058758 44.66806
## 1311 13.614688 -21.101896 48.33127
## 1312 13.614688 -21.101896 48.33127
## 1313  9.804651 -25.058758 44.66806
## 1314 13.614688 -21.101896 48.33127
## 1315 30.910044  -3.771337 65.59142
## 1316 30.910044  -3.771337 65.59142
## 1317 13.614688 -21.101896 48.33127
## 1318 13.614688 -21.101896 48.33127
## 1319 13.614688 -21.101896 48.33127
## 1320 13.614688 -21.101896 48.33127
## 1321 30.910044  -3.771337 65.59142
## 1322  9.804651 -25.058758 44.66806
## 1323 30.910044  -3.771337 65.59142
Predicciones y sus Intervalos de Confianza
predict(modelo_RL_Simple, data.frame(seq(1,400)), interval='confidence', level = 0.95)
## Warning: 'newdata' had 400 rows but variables found have 1323 rows
##            fit        lwr      upr
## 1    30.910044  29.764764 32.05532
## 2    30.910044  29.764764 32.05532
## 3    30.910044  29.764764 32.05532
## 4    30.910044  29.764764 32.05532
## 5    30.910044  29.764764 32.05532
## 6    30.910044  29.764764 32.05532
## 7    30.910044  29.764764 32.05532
## 8    30.910044  29.764764 32.05532
## 9    30.910044  29.764764 32.05532
## 10   30.910044  29.764764 32.05532
## 11   30.910044  29.764764 32.05532
## 12   30.910044  29.764764 32.05532
## 13   30.910044  29.764764 32.05532
## 14   30.910044  29.764764 32.05532
## 15   30.910044  29.764764 32.05532
## 16   30.910044  29.764764 32.05532
## 17   30.910044  29.764764 32.05532
## 18   30.910044  29.764764 32.05532
## 19   30.910044  29.764764 32.05532
## 20   30.910044  29.764764 32.05532
## 21   30.910044  29.764764 32.05532
## 22   30.910044  29.764764 32.05532
## 23   30.910044  29.764764 32.05532
## 24   30.910044  29.764764 32.05532
## 25   30.910044  29.764764 32.05532
## 26   30.910044  29.764764 32.05532
## 27   30.910044  29.764764 32.05532
## 28   30.910044  29.764764 32.05532
## 29   30.910044  29.764764 32.05532
## 30   30.910044  29.764764 32.05532
## 31   30.910044  29.764764 32.05532
## 32   30.910044  29.764764 32.05532
## 33   30.910044  29.764764 32.05532
## 34   30.910044  29.764764 32.05532
## 35   30.910044  29.764764 32.05532
## 36   30.910044  29.764764 32.05532
## 37   30.910044  29.764764 32.05532
## 38   30.910044  29.764764 32.05532
## 39   30.910044  29.764764 32.05532
## 40   30.910044  29.764764 32.05532
## 41   30.910044  29.764764 32.05532
## 42   30.910044  29.764764 32.05532
## 43   30.910044  29.764764 32.05532
## 44   30.910044  29.764764 32.05532
## 45   30.910044  29.764764 32.05532
## 46   30.910044  29.764764 32.05532
## 47   30.910044  29.764764 32.05532
## 48   30.910044  29.764764 32.05532
## 49   30.910044  29.764764 32.05532
## 50   30.910044  29.764764 32.05532
## 51   30.910044  29.764764 32.05532
## 52   30.910044  29.764764 32.05532
## 53   30.910044  29.764764 32.05532
## 54   30.910044  29.764764 32.05532
## 55   30.910044  29.764764 32.05532
## 56   30.910044  29.764764 32.05532
## 57   30.910044  29.764764 32.05532
## 58   30.910044  29.764764 32.05532
## 59   30.910044  29.764764 32.05532
## 60   30.910044  29.764764 32.05532
## 61   30.910044  29.764764 32.05532
## 62   30.910044  29.764764 32.05532
## 63   30.910044  29.764764 32.05532
## 64   30.910044  29.764764 32.05532
## 65   30.910044  29.764764 32.05532
## 66   30.910044  29.764764 32.05532
## 67   30.910044  29.764764 32.05532
## 68   30.910044  29.764764 32.05532
## 69   30.910044  29.764764 32.05532
## 70   30.910044  29.764764 32.05532
## 71   30.910044  29.764764 32.05532
## 72   30.910044  29.764764 32.05532
## 73   30.910044  29.764764 32.05532
## 74   30.910044  29.764764 32.05532
## 75   30.910044  29.764764 32.05532
## 76   30.910044  29.764764 32.05532
## 77   30.910044  29.764764 32.05532
## 78   30.910044  29.764764 32.05532
## 79   30.910044  29.764764 32.05532
## 80   30.910044  29.764764 32.05532
## 81   30.910044  29.764764 32.05532
## 82   30.910044  29.764764 32.05532
## 83   30.910044  29.764764 32.05532
## 84   30.910044  29.764764 32.05532
## 85   30.910044  29.764764 32.05532
## 86   30.910044  29.764764 32.05532
## 87   30.910044  29.764764 32.05532
## 88   30.910044  29.764764 32.05532
## 89   30.910044  29.764764 32.05532
## 90   30.910044  29.764764 32.05532
## 91   30.910044  29.764764 32.05532
## 92   30.910044  29.764764 32.05532
## 93   30.910044  29.764764 32.05532
## 94   30.910044  29.764764 32.05532
## 95   30.910044  29.764764 32.05532
## 96   30.910044  29.764764 32.05532
## 97   30.910044  29.764764 32.05532
## 98   30.910044  29.764764 32.05532
## 99   30.910044  29.764764 32.05532
## 100  30.910044  29.764764 32.05532
## 101  30.910044  29.764764 32.05532
## 102  30.910044  29.764764 32.05532
## 103  30.910044  29.764764 32.05532
## 104  30.910044  29.764764 32.05532
## 105  30.910044  29.764764 32.05532
## 106  30.910044  29.764764 32.05532
## 107  30.910044  29.764764 32.05532
## 108  30.910044  29.764764 32.05532
## 109  30.910044  29.764764 32.05532
## 110  30.910044  29.764764 32.05532
## 111  30.910044  29.764764 32.05532
## 112  30.910044  29.764764 32.05532
## 113  30.910044  29.764764 32.05532
## 114  30.910044  29.764764 32.05532
## 115  30.910044  29.764764 32.05532
## 116  30.910044  29.764764 32.05532
## 117  30.910044  29.764764 32.05532
## 118  30.910044  29.764764 32.05532
## 119  30.910044  29.764764 32.05532
## 120  30.910044  29.764764 32.05532
## 121  30.910044  29.764764 32.05532
## 122  30.910044  29.764764 32.05532
## 123  30.910044  29.764764 32.05532
## 124  30.910044  29.764764 32.05532
## 125  30.910044  29.764764 32.05532
## 126  30.910044  29.764764 32.05532
## 127  30.910044  29.764764 32.05532
## 128  30.910044  29.764764 32.05532
## 129  30.910044  29.764764 32.05532
## 130  30.910044  29.764764 32.05532
## 131  30.910044  29.764764 32.05532
## 132  30.910044  29.764764 32.05532
## 133  30.910044  29.764764 32.05532
## 134  30.910044  29.764764 32.05532
## 135  30.910044  29.764764 32.05532
## 136  30.910044  29.764764 32.05532
## 137  30.910044  29.764764 32.05532
## 138  30.910044  29.764764 32.05532
## 139  30.910044  29.764764 32.05532
## 140  30.910044  29.764764 32.05532
## 141  30.910044  29.764764 32.05532
## 142  30.910044  29.764764 32.05532
## 143  30.910044  29.764764 32.05532
## 144  30.910044  29.764764 32.05532
## 145  30.910044  29.764764 32.05532
## 146  30.910044  29.764764 32.05532
## 147  30.910044  29.764764 32.05532
## 148  30.910044  29.764764 32.05532
## 149  30.910044  29.764764 32.05532
## 150  30.910044  29.764764 32.05532
## 151  30.910044  29.764764 32.05532
## 152  30.910044  29.764764 32.05532
## 153  30.910044  29.764764 32.05532
## 154  30.910044  29.764764 32.05532
## 155  30.910044  29.764764 32.05532
## 156  30.910044  29.764764 32.05532
## 157  30.910044  29.764764 32.05532
## 158  30.910044  29.764764 32.05532
## 159  30.910044  29.764764 32.05532
## 160  30.910044  29.764764 32.05532
## 161  30.910044  29.764764 32.05532
## 162  30.910044  29.764764 32.05532
## 163  30.910044  29.764764 32.05532
## 164  30.910044  29.764764 32.05532
## 165  30.910044  29.764764 32.05532
## 166  30.910044  29.764764 32.05532
## 167  30.910044  29.764764 32.05532
## 168  30.910044  29.764764 32.05532
## 169  30.910044  29.764764 32.05532
## 170  30.910044  29.764764 32.05532
## 171  30.910044  29.764764 32.05532
## 172  30.910044  29.764764 32.05532
## 173  30.910044  29.764764 32.05532
## 174  30.910044  29.764764 32.05532
## 175  30.910044  29.764764 32.05532
## 176  30.910044  29.764764 32.05532
## 177  30.910044  29.764764 32.05532
## 178  30.910044  29.764764 32.05532
## 179  30.910044  29.764764 32.05532
## 180  30.910044  29.764764 32.05532
## 181  30.910044  29.764764 32.05532
## 182  30.910044  29.764764 32.05532
## 183  30.910044  29.764764 32.05532
## 184  30.910044  29.764764 32.05532
## 185  30.910044  29.764764 32.05532
## 186  13.614688  11.676997 15.55238
## 187  30.910044  29.764764 32.05532
## 188  30.910044  29.764764 32.05532
## 189  30.910044  29.764764 32.05532
## 190  30.910044  29.764764 32.05532
## 191  30.910044  29.764764 32.05532
## 192  30.910044  29.764764 32.05532
## 193  30.910044  29.764764 32.05532
## 194  30.910044  29.764764 32.05532
## 195  30.910044  29.764764 32.05532
## 196  30.910044  29.764764 32.05532
## 197  30.910044  29.764764 32.05532
## 198  13.614688  11.676997 15.55238
## 199  30.910044  29.764764 32.05532
## 200  30.910044  29.764764 32.05532
## 201  30.910044  29.764764 32.05532
## 202  30.910044  29.764764 32.05532
## 203  30.910044  29.764764 32.05532
## 204  30.910044  29.764764 32.05532
## 205  30.910044  29.764764 32.05532
## 206  30.910044  29.764764 32.05532
## 207  30.910044  29.764764 32.05532
## 208  30.910044  29.764764 32.05532
## 209  30.910044  29.764764 32.05532
## 210  30.910044  29.764764 32.05532
## 211  30.910044  29.764764 32.05532
## 212  30.910044  29.764764 32.05532
## 213  30.910044  29.764764 32.05532
## 214  30.910044  29.764764 32.05532
## 215  30.910044  29.764764 32.05532
## 216  30.910044  29.764764 32.05532
## 217  30.910044  29.764764 32.05532
## 218  30.910044  29.764764 32.05532
## 219  30.910044  29.764764 32.05532
## 220  30.910044  29.764764 32.05532
## 221  30.910044  29.764764 32.05532
## 222  30.910044  29.764764 32.05532
## 223  30.910044  29.764764 32.05532
## 224  30.910044  29.764764 32.05532
## 225  30.910044  29.764764 32.05532
## 226  30.910044  29.764764 32.05532
## 227  13.614688  11.676997 15.55238
## 228  30.910044  29.764764 32.05532
## 229  30.910044  29.764764 32.05532
## 230  13.614688  11.676997 15.55238
## 231  30.910044  29.764764 32.05532
## 232  30.910044  29.764764 32.05532
## 233  30.910044  29.764764 32.05532
## 234  30.910044  29.764764 32.05532
## 235  30.910044  29.764764 32.05532
## 236  30.910044  29.764764 32.05532
## 237  30.910044  29.764764 32.05532
## 238  30.910044  29.764764 32.05532
## 239  30.910044  29.764764 32.05532
## 240  30.910044  29.764764 32.05532
## 241  30.910044  29.764764 32.05532
## 242  30.910044  29.764764 32.05532
## 243  30.910044  29.764764 32.05532
## 244  30.910044  29.764764 32.05532
## 245  30.910044  29.764764 32.05532
## 246  30.910044  29.764764 32.05532
## 247  30.910044  29.764764 32.05532
## 248  30.910044  29.764764 32.05532
## 249  30.910044  29.764764 32.05532
## 250  30.910044  29.764764 32.05532
## 251  30.910044  29.764764 32.05532
## 252  30.910044  29.764764 32.05532
## 253  30.910044  29.764764 32.05532
## 254  30.910044  29.764764 32.05532
## 255  30.910044  29.764764 32.05532
## 256  30.910044  29.764764 32.05532
## 257  30.910044  29.764764 32.05532
## 258  30.910044  29.764764 32.05532
## 259  30.910044  29.764764 32.05532
## 260  30.910044  29.764764 32.05532
## 261  30.910044  29.764764 32.05532
## 262  30.910044  29.764764 32.05532
## 263  13.614688  11.676997 15.55238
## 264  30.910044  29.764764 32.05532
## 265  30.910044  29.764764 32.05532
## 266  30.910044  29.764764 32.05532
## 267  30.910044  29.764764 32.05532
## 268  30.910044  29.764764 32.05532
## 269  30.910044  29.764764 32.05532
## 270  30.910044  29.764764 32.05532
## 271  30.910044  29.764764 32.05532
## 272  30.910044  29.764764 32.05532
## 273  30.910044  29.764764 32.05532
## 274  30.910044  29.764764 32.05532
## 275  30.910044  29.764764 32.05532
## 276  30.910044  29.764764 32.05532
## 277  30.910044  29.764764 32.05532
## 278  30.910044  29.764764 32.05532
## 279  30.910044  29.764764 32.05532
## 280  13.614688  11.676997 15.55238
## 281  30.910044  29.764764 32.05532
## 282  30.910044  29.764764 32.05532
## 283  30.910044  29.764764 32.05532
## 284  30.910044  29.764764 32.05532
## 285  30.910044  29.764764 32.05532
## 286  30.910044  29.764764 32.05532
## 287  30.910044  29.764764 32.05532
## 288  30.910044  29.764764 32.05532
## 289  13.614688  11.676997 15.55238
## 290  30.910044  29.764764 32.05532
## 291  30.910044  29.764764 32.05532
## 292  30.910044  29.764764 32.05532
## 293  30.910044  29.764764 32.05532
## 294  30.910044  29.764764 32.05532
## 295  30.910044  29.764764 32.05532
## 296  30.910044  29.764764 32.05532
## 297  30.910044  29.764764 32.05532
## 298  30.910044  29.764764 32.05532
## 299  30.910044  29.764764 32.05532
## 300  13.614688  11.676997 15.55238
## 301  30.910044  29.764764 32.05532
## 302  30.910044  29.764764 32.05532
## 303  30.910044  29.764764 32.05532
## 304  30.910044  29.764764 32.05532
## 305  30.910044  29.764764 32.05532
## 306  30.910044  29.764764 32.05532
## 307  30.910044  29.764764 32.05532
## 308  13.614688  11.676997 15.55238
## 309  30.910044  29.764764 32.05532
## 310  30.910044  29.764764 32.05532
## 311  30.910044  29.764764 32.05532
## 312  30.910044  29.764764 32.05532
## 313  30.910044  29.764764 32.05532
## 314  30.910044  29.764764 32.05532
## 315  30.910044  29.764764 32.05532
## 316  30.910044  29.764764 32.05532
## 317  30.910044  29.764764 32.05532
## 318  30.910044  29.764764 32.05532
## 319  30.910044  29.764764 32.05532
## 320  30.910044  29.764764 32.05532
## 321  30.910044  29.764764 32.05532
## 322  30.910044  29.764764 32.05532
## 323  30.910044  29.764764 32.05532
## 324  30.910044  29.764764 32.05532
## 325  30.910044  29.764764 32.05532
## 326  30.910044  29.764764 32.05532
## 327  30.910044  29.764764 32.05532
## 328  30.910044  29.764764 32.05532
## 329  30.910044  29.764764 32.05532
## 330  30.910044  29.764764 32.05532
## 331  30.910044  29.764764 32.05532
## 332  30.910044  29.764764 32.05532
## 333  30.910044  29.764764 32.05532
## 334  30.910044  29.764764 32.05532
## 335  30.910044  29.764764 32.05532
## 336  30.910044  29.764764 32.05532
## 337  30.910044  29.764764 32.05532
## 338  30.910044  29.764764 32.05532
## 339  30.910044  29.764764 32.05532
## 340  30.910044  29.764764 32.05532
## 341  30.910044  29.764764 32.05532
## 342  30.910044  29.764764 32.05532
## 343  30.910044  29.764764 32.05532
## 344  30.910044  29.764764 32.05532
## 345  13.614688  11.676997 15.55238
## 346  30.910044  29.764764 32.05532
## 347  30.910044  29.764764 32.05532
## 348  13.614688  11.676997 15.55238
## 349  30.910044  29.764764 32.05532
## 350  30.910044  29.764764 32.05532
## 351  30.910044  29.764764 32.05532
## 352  30.910044  29.764764 32.05532
## 353  30.910044  29.764764 32.05532
## 354  30.910044  29.764764 32.05532
## 355  30.910044  29.764764 32.05532
## 356  30.910044  29.764764 32.05532
## 357  30.910044  29.764764 32.05532
## 358  30.910044  29.764764 32.05532
## 359  30.910044  29.764764 32.05532
## 360  30.910044  29.764764 32.05532
## 361  30.910044  29.764764 32.05532
## 362  30.910044  29.764764 32.05532
## 363  13.614688  11.676997 15.55238
## 364  30.910044  29.764764 32.05532
## 365  30.910044  29.764764 32.05532
## 366  30.910044  29.764764 32.05532
## 367  30.910044  29.764764 32.05532
## 368  30.910044  29.764764 32.05532
## 369  30.910044  29.764764 32.05532
## 370  30.910044  29.764764 32.05532
## 371  30.910044  29.764764 32.05532
## 372  30.910044  29.764764 32.05532
## 373  30.910044  29.764764 32.05532
## 374  13.614688  11.676997 15.55238
## 375  30.910044  29.764764 32.05532
## 376  30.910044  29.764764 32.05532
## 377  30.910044  29.764764 32.05532
## 378  30.910044  29.764764 32.05532
## 379  30.910044  29.764764 32.05532
## 380  30.910044  29.764764 32.05532
## 381  30.910044  29.764764 32.05532
## 382  30.910044  29.764764 32.05532
## 383  30.910044  29.764764 32.05532
## 384  30.910044  29.764764 32.05532
## 385  30.910044  29.764764 32.05532
## 386  30.910044  29.764764 32.05532
## 387  30.910044  29.764764 32.05532
## 388  30.910044  29.764764 32.05532
## 389  30.910044  29.764764 32.05532
## 390  30.910044  29.764764 32.05532
## 391  30.910044  29.764764 32.05532
## 392  30.910044  29.764764 32.05532
## 393  30.910044  29.764764 32.05532
## 394  30.910044  29.764764 32.05532
## 395  30.910044  29.764764 32.05532
## 396  30.910044  29.764764 32.05532
## 397  30.910044  29.764764 32.05532
## 398  30.910044  29.764764 32.05532
## 399  30.910044  29.764764 32.05532
## 400  30.910044  29.764764 32.05532
## 401  30.910044  29.764764 32.05532
## 402  30.910044  29.764764 32.05532
## 403  30.910044  29.764764 32.05532
## 404  13.614688  11.676997 15.55238
## 405  30.910044  29.764764 32.05532
## 406  30.910044  29.764764 32.05532
## 407  30.910044  29.764764 32.05532
## 408  13.614688  11.676997 15.55238
## 409  30.910044  29.764764 32.05532
## 410  30.910044  29.764764 32.05532
## 411  13.614688  11.676997 15.55238
## 412  30.910044  29.764764 32.05532
## 413  30.910044  29.764764 32.05532
## 414  30.910044  29.764764 32.05532
## 415  13.614688  11.676997 15.55238
## 416  30.910044  29.764764 32.05532
## 417  30.910044  29.764764 32.05532
## 418  30.910044  29.764764 32.05532
## 419  30.910044  29.764764 32.05532
## 420  30.910044  29.764764 32.05532
## 421  30.910044  29.764764 32.05532
## 422  30.910044  29.764764 32.05532
## 423  30.910044  29.764764 32.05532
## 424  13.614688  11.676997 15.55238
## 425  13.614688  11.676997 15.55238
## 426  30.910044  29.764764 32.05532
## 427  13.614688  11.676997 15.55238
## 428  30.910044  29.764764 32.05532
## 429  30.910044  29.764764 32.05532
## 430  30.910044  29.764764 32.05532
## 431  30.910044  29.764764 32.05532
## 432  13.614688  11.676997 15.55238
## 433  30.910044  29.764764 32.05532
## 434  30.910044  29.764764 32.05532
## 435  30.910044  29.764764 32.05532
## 436  30.910044  29.764764 32.05532
## 437  30.910044  29.764764 32.05532
## 438  13.614688  11.676997 15.55238
## 439  30.910044  29.764764 32.05532
## 440  30.910044  29.764764 32.05532
## 441  30.910044  29.764764 32.05532
## 442  30.910044  29.764764 32.05532
## 443  30.910044  29.764764 32.05532
## 444  30.910044  29.764764 32.05532
## 445  30.910044  29.764764 32.05532
## 446  30.910044  29.764764 32.05532
## 447  30.910044  29.764764 32.05532
## 448  30.910044  29.764764 32.05532
## 449  30.910044  29.764764 32.05532
## 450  30.910044  29.764764 32.05532
## 451  30.910044  29.764764 32.05532
## 452  30.910044  29.764764 32.05532
## 453  30.910044  29.764764 32.05532
## 454  30.910044  29.764764 32.05532
## 455  30.910044  29.764764 32.05532
## 456  30.910044  29.764764 32.05532
## 457  30.910044  29.764764 32.05532
## 458  30.910044  29.764764 32.05532
## 459  30.910044  29.764764 32.05532
## 460  30.910044  29.764764 32.05532
## 461  30.910044  29.764764 32.05532
## 462  30.910044  29.764764 32.05532
## 463  30.910044  29.764764 32.05532
## 464  30.910044  29.764764 32.05532
## 465  30.910044  29.764764 32.05532
## 466  30.910044  29.764764 32.05532
## 467  30.910044  29.764764 32.05532
## 468  30.910044  29.764764 32.05532
## 469  13.614688  11.676997 15.55238
## 470  30.910044  29.764764 32.05532
## 471  30.910044  29.764764 32.05532
## 472  30.910044  29.764764 32.05532
## 473  30.910044  29.764764 32.05532
## 474  30.910044  29.764764 32.05532
## 475  30.910044  29.764764 32.05532
## 476  30.910044  29.764764 32.05532
## 477  30.910044  29.764764 32.05532
## 478  30.910044  29.764764 32.05532
## 479  30.910044  29.764764 32.05532
## 480  30.910044  29.764764 32.05532
## 481  30.910044  29.764764 32.05532
## 482  30.910044  29.764764 32.05532
## 483  30.910044  29.764764 32.05532
## 484  30.910044  29.764764 32.05532
## 485  30.910044  29.764764 32.05532
## 486  30.910044  29.764764 32.05532
## 487  30.910044  29.764764 32.05532
## 488  30.910044  29.764764 32.05532
## 489  30.910044  29.764764 32.05532
## 490  30.910044  29.764764 32.05532
## 491  13.614688  11.676997 15.55238
## 492  30.910044  29.764764 32.05532
## 493  30.910044  29.764764 32.05532
## 494  13.614688  11.676997 15.55238
## 495  30.910044  29.764764 32.05532
## 496  30.910044  29.764764 32.05532
## 497  30.910044  29.764764 32.05532
## 498  30.910044  29.764764 32.05532
## 499  30.910044  29.764764 32.05532
## 500  30.910044  29.764764 32.05532
## 501  30.910044  29.764764 32.05532
## 502  30.910044  29.764764 32.05532
## 503  30.910044  29.764764 32.05532
## 504  30.910044  29.764764 32.05532
## 505  30.910044  29.764764 32.05532
## 506  30.910044  29.764764 32.05532
## 507  13.614688  11.676997 15.55238
## 508  30.910044  29.764764 32.05532
## 509   9.804651   6.066901 13.54240
## 510  30.910044  29.764764 32.05532
## 511  30.910044  29.764764 32.05532
## 512  30.910044  29.764764 32.05532
## 513  30.910044  29.764764 32.05532
## 514  30.910044  29.764764 32.05532
## 515  30.910044  29.764764 32.05532
## 516  30.910044  29.764764 32.05532
## 517  13.614688  11.676997 15.55238
## 518  30.910044  29.764764 32.05532
## 519  30.910044  29.764764 32.05532
## 520  30.910044  29.764764 32.05532
## 521  30.910044  29.764764 32.05532
## 522  30.910044  29.764764 32.05532
## 523   9.804651   6.066901 13.54240
## 524  30.910044  29.764764 32.05532
## 525  30.910044  29.764764 32.05532
## 526  30.910044  29.764764 32.05532
## 527  13.614688  11.676997 15.55238
## 528  30.910044  29.764764 32.05532
## 529  13.614688  11.676997 15.55238
## 530  30.910044  29.764764 32.05532
## 531  30.910044  29.764764 32.05532
## 532  13.614688  11.676997 15.55238
## 533  30.910044  29.764764 32.05532
## 534  30.910044  29.764764 32.05532
## 535  30.910044  29.764764 32.05532
## 536  30.910044  29.764764 32.05532
## 537  30.910044  29.764764 32.05532
## 538  30.910044  29.764764 32.05532
## 539  30.910044  29.764764 32.05532
## 540  30.910044  29.764764 32.05532
## 541  13.614688  11.676997 15.55238
## 542  13.614688  11.676997 15.55238
## 543  30.910044  29.764764 32.05532
## 544  30.910044  29.764764 32.05532
## 545  30.910044  29.764764 32.05532
## 546  13.614688  11.676997 15.55238
## 547  13.614688  11.676997 15.55238
## 548  30.910044  29.764764 32.05532
## 549  30.910044  29.764764 32.05532
## 550  30.910044  29.764764 32.05532
## 551  30.910044  29.764764 32.05532
## 552  13.614688  11.676997 15.55238
## 553   9.804651   6.066901 13.54240
## 554  30.910044  29.764764 32.05532
## 555  30.910044  29.764764 32.05532
## 556  30.910044  29.764764 32.05532
## 557  13.614688  11.676997 15.55238
## 558  30.910044  29.764764 32.05532
## 559  30.910044  29.764764 32.05532
## 560  13.614688  11.676997 15.55238
## 561  30.910044  29.764764 32.05532
## 562  30.910044  29.764764 32.05532
## 563  30.910044  29.764764 32.05532
## 564  13.614688  11.676997 15.55238
## 565  30.910044  29.764764 32.05532
## 566  13.614688  11.676997 15.55238
## 567  30.910044  29.764764 32.05532
## 568  13.614688  11.676997 15.55238
## 569  30.910044  29.764764 32.05532
## 570  30.910044  29.764764 32.05532
## 571  30.910044  29.764764 32.05532
## 572  30.910044  29.764764 32.05532
## 573  30.910044  29.764764 32.05532
## 574  30.910044  29.764764 32.05532
## 575  30.910044  29.764764 32.05532
## 576  30.910044  29.764764 32.05532
## 577  30.910044  29.764764 32.05532
## 578  30.910044  29.764764 32.05532
## 579  30.910044  29.764764 32.05532
## 580  13.614688  11.676997 15.55238
## 581  13.614688  11.676997 15.55238
## 582  30.910044  29.764764 32.05532
## 583  30.910044  29.764764 32.05532
## 584  30.910044  29.764764 32.05532
## 585  13.614688  11.676997 15.55238
## 586  13.614688  11.676997 15.55238
## 587  30.910044  29.764764 32.05532
## 588  30.910044  29.764764 32.05532
## 589  13.614688  11.676997 15.55238
## 590  30.910044  29.764764 32.05532
## 591  30.910044  29.764764 32.05532
## 592  13.614688  11.676997 15.55238
## 593  13.614688  11.676997 15.55238
## 594  13.614688  11.676997 15.55238
## 595  13.614688  11.676997 15.55238
## 596  30.910044  29.764764 32.05532
## 597   9.804651   6.066901 13.54240
## 598  30.910044  29.764764 32.05532
## 599  30.910044  29.764764 32.05532
## 600  30.910044  29.764764 32.05532
## 601  30.910044  29.764764 32.05532
## 602  30.910044  29.764764 32.05532
## 603  30.910044  29.764764 32.05532
## 604  30.910044  29.764764 32.05532
## 605  30.910044  29.764764 32.05532
## 606  30.910044  29.764764 32.05532
## 607  30.910044  29.764764 32.05532
## 608  30.910044  29.764764 32.05532
## 609  13.614688  11.676997 15.55238
## 610  30.910044  29.764764 32.05532
## 611  30.910044  29.764764 32.05532
## 612  30.910044  29.764764 32.05532
## 613  30.910044  29.764764 32.05532
## 614  30.910044  29.764764 32.05532
## 615  30.910044  29.764764 32.05532
## 616  30.910044  29.764764 32.05532
## 617  13.614688  11.676997 15.55238
## 618  13.614688  11.676997 15.55238
## 619  30.910044  29.764764 32.05532
## 620  30.910044  29.764764 32.05532
## 621  13.614688  11.676997 15.55238
## 622  30.910044  29.764764 32.05532
## 623  30.910044  29.764764 32.05532
## 624  30.910044  29.764764 32.05532
## 625  13.614688  11.676997 15.55238
## 626  30.910044  29.764764 32.05532
## 627  30.910044  29.764764 32.05532
## 628  13.614688  11.676997 15.55238
## 629  30.910044  29.764764 32.05532
## 630  30.910044  29.764764 32.05532
## 631  30.910044  29.764764 32.05532
## 632  30.910044  29.764764 32.05532
## 633  30.910044  29.764764 32.05532
## 634  30.910044  29.764764 32.05532
## 635  13.614688  11.676997 15.55238
## 636  30.910044  29.764764 32.05532
## 637  30.910044  29.764764 32.05532
## 638  30.910044  29.764764 32.05532
## 639  30.910044  29.764764 32.05532
## 640  30.910044  29.764764 32.05532
## 641  30.910044  29.764764 32.05532
## 642  30.910044  29.764764 32.05532
## 643   9.804651   6.066901 13.54240
## 644  30.910044  29.764764 32.05532
## 645  13.614688  11.676997 15.55238
## 646  13.614688  11.676997 15.55238
## 647  30.910044  29.764764 32.05532
## 648  13.614688  11.676997 15.55238
## 649  30.910044  29.764764 32.05532
## 650  13.614688  11.676997 15.55238
## 651  30.910044  29.764764 32.05532
## 652  30.910044  29.764764 32.05532
## 653  13.614688  11.676997 15.55238
## 654  30.910044  29.764764 32.05532
## 655  30.910044  29.764764 32.05532
## 656  13.614688  11.676997 15.55238
## 657  13.614688  11.676997 15.55238
## 658  13.614688  11.676997 15.55238
## 659   9.804651   6.066901 13.54240
## 660  13.614688  11.676997 15.55238
## 661  13.614688  11.676997 15.55238
## 662  30.910044  29.764764 32.05532
## 663  30.910044  29.764764 32.05532
## 664  30.910044  29.764764 32.05532
## 665  30.910044  29.764764 32.05532
## 666  30.910044  29.764764 32.05532
## 667  30.910044  29.764764 32.05532
## 668  30.910044  29.764764 32.05532
## 669  30.910044  29.764764 32.05532
## 670  30.910044  29.764764 32.05532
## 671  30.910044  29.764764 32.05532
## 672   9.804651   6.066901 13.54240
## 673  30.910044  29.764764 32.05532
## 674  30.910044  29.764764 32.05532
## 675  30.910044  29.764764 32.05532
## 676   9.804651   6.066901 13.54240
## 677  30.910044  29.764764 32.05532
## 678  13.614688  11.676997 15.55238
## 679  13.614688  11.676997 15.55238
## 680  30.910044  29.764764 32.05532
## 681  30.910044  29.764764 32.05532
## 682  30.910044  29.764764 32.05532
## 683  30.910044  29.764764 32.05532
## 684  13.614688  11.676997 15.55238
## 685  30.910044  29.764764 32.05532
## 686  30.910044  29.764764 32.05532
## 687  13.614688  11.676997 15.55238
## 688  13.614688  11.676997 15.55238
## 689  30.910044  29.764764 32.05532
## 690  13.614688  11.676997 15.55238
## 691  13.614688  11.676997 15.55238
## 692  30.910044  29.764764 32.05532
## 693  30.910044  29.764764 32.05532
## 694  30.910044  29.764764 32.05532
## 695  30.910044  29.764764 32.05532
## 696  30.910044  29.764764 32.05532
## 697  13.614688  11.676997 15.55238
## 698  13.614688  11.676997 15.55238
## 699  30.910044  29.764764 32.05532
## 700  30.910044  29.764764 32.05532
## 701  30.910044  29.764764 32.05532
## 702  30.910044  29.764764 32.05532
## 703  30.910044  29.764764 32.05532
## 704  30.910044  29.764764 32.05532
## 705  30.910044  29.764764 32.05532
## 706  30.910044  29.764764 32.05532
## 707  13.614688  11.676997 15.55238
## 708  30.910044  29.764764 32.05532
## 709  30.910044  29.764764 32.05532
## 710  30.910044  29.764764 32.05532
## 711  13.614688  11.676997 15.55238
## 712  30.910044  29.764764 32.05532
## 713  13.614688  11.676997 15.55238
## 714  30.910044  29.764764 32.05532
## 715   9.804651   6.066901 13.54240
## 716  30.910044  29.764764 32.05532
## 717  13.614688  11.676997 15.55238
## 718  30.910044  29.764764 32.05532
## 719  30.910044  29.764764 32.05532
## 720  13.614688  11.676997 15.55238
## 721  13.614688  11.676997 15.55238
## 722  30.910044  29.764764 32.05532
## 723  13.614688  11.676997 15.55238
## 724  30.910044  29.764764 32.05532
## 725  13.614688  11.676997 15.55238
## 726  13.614688  11.676997 15.55238
## 727  30.910044  29.764764 32.05532
## 728  30.910044  29.764764 32.05532
## 729  30.910044  29.764764 32.05532
## 730   9.804651   6.066901 13.54240
## 731  13.614688  11.676997 15.55238
## 732  30.910044  29.764764 32.05532
## 733  30.910044  29.764764 32.05532
## 734  30.910044  29.764764 32.05532
## 735  30.910044  29.764764 32.05532
## 736  30.910044  29.764764 32.05532
## 737  13.614688  11.676997 15.55238
## 738  13.614688  11.676997 15.55238
## 739  30.910044  29.764764 32.05532
## 740  30.910044  29.764764 32.05532
## 741  30.910044  29.764764 32.05532
## 742  13.614688  11.676997 15.55238
## 743  30.910044  29.764764 32.05532
## 744  30.910044  29.764764 32.05532
## 745  30.910044  29.764764 32.05532
## 746   9.804651   6.066901 13.54240
## 747  13.614688  11.676997 15.55238
## 748  30.910044  29.764764 32.05532
## 749  30.910044  29.764764 32.05532
## 750  30.910044  29.764764 32.05532
## 751  30.910044  29.764764 32.05532
## 752  30.910044  29.764764 32.05532
## 753   9.804651   6.066901 13.54240
## 754  30.910044  29.764764 32.05532
## 755  30.910044  29.764764 32.05532
## 756  30.910044  29.764764 32.05532
## 757  30.910044  29.764764 32.05532
## 758  13.614688  11.676997 15.55238
## 759  30.910044  29.764764 32.05532
## 760  13.614688  11.676997 15.55238
## 761  13.614688  11.676997 15.55238
## 762  30.910044  29.764764 32.05532
## 763  30.910044  29.764764 32.05532
## 764   9.804651   6.066901 13.54240
## 765  30.910044  29.764764 32.05532
## 766  30.910044  29.764764 32.05532
## 767  13.614688  11.676997 15.55238
## 768  13.614688  11.676997 15.55238
## 769  13.614688  11.676997 15.55238
## 770  30.910044  29.764764 32.05532
## 771  30.910044  29.764764 32.05532
## 772  30.910044  29.764764 32.05532
## 773  30.910044  29.764764 32.05532
## 774  30.910044  29.764764 32.05532
## 775  30.910044  29.764764 32.05532
## 776  30.910044  29.764764 32.05532
## 777  30.910044  29.764764 32.05532
## 778  13.614688  11.676997 15.55238
## 779  13.614688  11.676997 15.55238
## 780  13.614688  11.676997 15.55238
## 781  13.614688  11.676997 15.55238
## 782  13.614688  11.676997 15.55238
## 783  30.910044  29.764764 32.05532
## 784  30.910044  29.764764 32.05532
## 785  30.910044  29.764764 32.05532
## 786  30.910044  29.764764 32.05532
## 787  30.910044  29.764764 32.05532
## 788  30.910044  29.764764 32.05532
## 789  30.910044  29.764764 32.05532
## 790  30.910044  29.764764 32.05532
## 791  30.910044  29.764764 32.05532
## 792  13.614688  11.676997 15.55238
## 793  30.910044  29.764764 32.05532
## 794  13.614688  11.676997 15.55238
## 795  30.910044  29.764764 32.05532
## 796  30.910044  29.764764 32.05532
## 797  13.614688  11.676997 15.55238
## 798  30.910044  29.764764 32.05532
## 799  13.614688  11.676997 15.55238
## 800  30.910044  29.764764 32.05532
## 801  13.614688  11.676997 15.55238
## 802  13.614688  11.676997 15.55238
## 803  13.614688  11.676997 15.55238
## 804  30.910044  29.764764 32.05532
## 805  13.614688  11.676997 15.55238
## 806  30.910044  29.764764 32.05532
## 807  30.910044  29.764764 32.05532
## 808  13.614688  11.676997 15.55238
## 809  13.614688  11.676997 15.55238
## 810  30.910044  29.764764 32.05532
## 811  13.614688  11.676997 15.55238
## 812  30.910044  29.764764 32.05532
## 813   9.804651   6.066901 13.54240
## 814  13.614688  11.676997 15.55238
## 815  30.910044  29.764764 32.05532
## 816  30.910044  29.764764 32.05532
## 817  30.910044  29.764764 32.05532
## 818  13.614688  11.676997 15.55238
## 819  30.910044  29.764764 32.05532
## 820  30.910044  29.764764 32.05532
## 821  30.910044  29.764764 32.05532
## 822  30.910044  29.764764 32.05532
## 823  30.910044  29.764764 32.05532
## 824  30.910044  29.764764 32.05532
## 825  30.910044  29.764764 32.05532
## 826  30.910044  29.764764 32.05532
## 827  13.614688  11.676997 15.55238
## 828  30.910044  29.764764 32.05532
## 829  30.910044  29.764764 32.05532
## 830  30.910044  29.764764 32.05532
## 831  13.614688  11.676997 15.55238
## 832  30.910044  29.764764 32.05532
## 833   9.804651   6.066901 13.54240
## 834  13.614688  11.676997 15.55238
## 835  30.910044  29.764764 32.05532
## 836  30.910044  29.764764 32.05532
## 837  13.614688  11.676997 15.55238
## 838  13.614688  11.676997 15.55238
## 839  13.614688  11.676997 15.55238
## 840  13.614688  11.676997 15.55238
## 841  30.910044  29.764764 32.05532
## 842  30.910044  29.764764 32.05532
## 843  13.614688  11.676997 15.55238
## 844  30.910044  29.764764 32.05532
## 845   9.804651   6.066901 13.54240
## 846   9.804651   6.066901 13.54240
## 847  13.614688  11.676997 15.55238
## 848  30.910044  29.764764 32.05532
## 849  13.614688  11.676997 15.55238
## 850  30.910044  29.764764 32.05532
## 851  13.614688  11.676997 15.55238
## 852  13.614688  11.676997 15.55238
## 853  13.614688  11.676997 15.55238
## 854  13.614688  11.676997 15.55238
## 855  13.614688  11.676997 15.55238
## 856  30.910044  29.764764 32.05532
## 857  30.910044  29.764764 32.05532
## 858  30.910044  29.764764 32.05532
## 859  13.614688  11.676997 15.55238
## 860  30.910044  29.764764 32.05532
## 861  30.910044  29.764764 32.05532
## 862  30.910044  29.764764 32.05532
## 863  30.910044  29.764764 32.05532
## 864  13.614688  11.676997 15.55238
## 865  13.614688  11.676997 15.55238
## 866  30.910044  29.764764 32.05532
## 867  30.910044  29.764764 32.05532
## 868  30.910044  29.764764 32.05532
## 869  30.910044  29.764764 32.05532
## 870   9.804651   6.066901 13.54240
## 871  30.910044  29.764764 32.05532
## 872  30.910044  29.764764 32.05532
## 873  30.910044  29.764764 32.05532
## 874  13.614688  11.676997 15.55238
## 875  13.614688  11.676997 15.55238
## 876  30.910044  29.764764 32.05532
## 877  30.910044  29.764764 32.05532
## 878  13.614688  11.676997 15.55238
## 879   9.804651   6.066901 13.54240
## 880  13.614688  11.676997 15.55238
## 881  30.910044  29.764764 32.05532
## 882  30.910044  29.764764 32.05532
## 883   9.804651   6.066901 13.54240
## 884  13.614688  11.676997 15.55238
## 885  30.910044  29.764764 32.05532
## 886  13.614688  11.676997 15.55238
## 887  30.910044  29.764764 32.05532
## 888  13.614688  11.676997 15.55238
## 889  30.910044  29.764764 32.05532
## 890  30.910044  29.764764 32.05532
## 891  13.614688  11.676997 15.55238
## 892   9.804651   6.066901 13.54240
## 893  13.614688  11.676997 15.55238
## 894   9.804651   6.066901 13.54240
## 895  13.614688  11.676997 15.55238
## 896  30.910044  29.764764 32.05532
## 897  30.910044  29.764764 32.05532
## 898  13.614688  11.676997 15.55238
## 899  30.910044  29.764764 32.05532
## 900  30.910044  29.764764 32.05532
## 901  30.910044  29.764764 32.05532
## 902  13.614688  11.676997 15.55238
## 903  30.910044  29.764764 32.05532
## 904  30.910044  29.764764 32.05532
## 905  30.910044  29.764764 32.05532
## 906  30.910044  29.764764 32.05532
## 907  30.910044  29.764764 32.05532
## 908  30.910044  29.764764 32.05532
## 909  30.910044  29.764764 32.05532
## 910  30.910044  29.764764 32.05532
## 911  13.614688  11.676997 15.55238
## 912   9.804651   6.066901 13.54240
## 913  30.910044  29.764764 32.05532
## 914  13.614688  11.676997 15.55238
## 915  13.614688  11.676997 15.55238
## 916  30.910044  29.764764 32.05532
## 917  13.614688  11.676997 15.55238
## 918  30.910044  29.764764 32.05532
## 919  30.910044  29.764764 32.05532
## 920  30.910044  29.764764 32.05532
## 921  30.910044  29.764764 32.05532
## 922  30.910044  29.764764 32.05532
## 923  30.910044  29.764764 32.05532
## 924  13.614688  11.676997 15.55238
## 925  13.614688  11.676997 15.55238
## 926  30.910044  29.764764 32.05532
## 927  30.910044  29.764764 32.05532
## 928  30.910044  29.764764 32.05532
## 929  13.614688  11.676997 15.55238
## 930  13.614688  11.676997 15.55238
## 931  13.614688  11.676997 15.55238
## 932   9.804651   6.066901 13.54240
## 933  30.910044  29.764764 32.05532
## 934  30.910044  29.764764 32.05532
## 935  30.910044  29.764764 32.05532
## 936  30.910044  29.764764 32.05532
## 937   9.804651   6.066901 13.54240
## 938  30.910044  29.764764 32.05532
## 939  30.910044  29.764764 32.05532
## 940  30.910044  29.764764 32.05532
## 941  30.910044  29.764764 32.05532
## 942  13.614688  11.676997 15.55238
## 943  30.910044  29.764764 32.05532
## 944  30.910044  29.764764 32.05532
## 945  13.614688  11.676997 15.55238
## 946  30.910044  29.764764 32.05532
## 947  30.910044  29.764764 32.05532
## 948  30.910044  29.764764 32.05532
## 949  30.910044  29.764764 32.05532
## 950  13.614688  11.676997 15.55238
## 951  30.910044  29.764764 32.05532
## 952  13.614688  11.676997 15.55238
## 953  30.910044  29.764764 32.05532
## 954  30.910044  29.764764 32.05532
## 955   9.804651   6.066901 13.54240
## 956  30.910044  29.764764 32.05532
## 957  30.910044  29.764764 32.05532
## 958  30.910044  29.764764 32.05532
## 959   9.804651   6.066901 13.54240
## 960  13.614688  11.676997 15.55238
## 961  13.614688  11.676997 15.55238
## 962  30.910044  29.764764 32.05532
## 963  30.910044  29.764764 32.05532
## 964  13.614688  11.676997 15.55238
## 965  30.910044  29.764764 32.05532
## 966  30.910044  29.764764 32.05532
## 967  30.910044  29.764764 32.05532
## 968  30.910044  29.764764 32.05532
## 969  30.910044  29.764764 32.05532
## 970  13.614688  11.676997 15.55238
## 971   9.804651   6.066901 13.54240
## 972  30.910044  29.764764 32.05532
## 973  13.614688  11.676997 15.55238
## 974  13.614688  11.676997 15.55238
## 975  13.614688  11.676997 15.55238
## 976  13.614688  11.676997 15.55238
## 977  30.910044  29.764764 32.05532
## 978  30.910044  29.764764 32.05532
## 979  13.614688  11.676997 15.55238
## 980  13.614688  11.676997 15.55238
## 981  13.614688  11.676997 15.55238
## 982  30.910044  29.764764 32.05532
## 983  30.910044  29.764764 32.05532
## 984  30.910044  29.764764 32.05532
## 985  13.614688  11.676997 15.55238
## 986  13.614688  11.676997 15.55238
## 987  13.614688  11.676997 15.55238
## 988  30.910044  29.764764 32.05532
## 989  30.910044  29.764764 32.05532
## 990  30.910044  29.764764 32.05532
## 991  13.614688  11.676997 15.55238
## 992  13.614688  11.676997 15.55238
## 993  30.910044  29.764764 32.05532
## 994  13.614688  11.676997 15.55238
## 995   9.804651   6.066901 13.54240
## 996  13.614688  11.676997 15.55238
## 997  13.614688  11.676997 15.55238
## 998  30.910044  29.764764 32.05532
## 999  30.910044  29.764764 32.05532
## 1000 30.910044  29.764764 32.05532
## 1001 30.910044  29.764764 32.05532
## 1002 13.614688  11.676997 15.55238
## 1003 30.910044  29.764764 32.05532
## 1004 30.910044  29.764764 32.05532
## 1005 13.614688  11.676997 15.55238
## 1006 30.910044  29.764764 32.05532
## 1007 30.910044  29.764764 32.05532
## 1008 13.614688  11.676997 15.55238
## 1009 13.614688  11.676997 15.55238
## 1010 30.910044  29.764764 32.05532
## 1011 30.910044  29.764764 32.05532
## 1012 13.614688  11.676997 15.55238
## 1013  9.804651   6.066901 13.54240
## 1014 30.910044  29.764764 32.05532
## 1015 13.614688  11.676997 15.55238
## 1016 30.910044  29.764764 32.05532
## 1017 30.910044  29.764764 32.05532
## 1018 30.910044  29.764764 32.05532
## 1019 13.614688  11.676997 15.55238
## 1020 13.614688  11.676997 15.55238
## 1021 30.910044  29.764764 32.05532
## 1022  9.804651   6.066901 13.54240
## 1023 30.910044  29.764764 32.05532
## 1024 30.910044  29.764764 32.05532
## 1025 13.614688  11.676997 15.55238
## 1026 30.910044  29.764764 32.05532
## 1027 30.910044  29.764764 32.05532
## 1028 30.910044  29.764764 32.05532
## 1029 30.910044  29.764764 32.05532
## 1030 30.910044  29.764764 32.05532
## 1031 13.614688  11.676997 15.55238
## 1032 30.910044  29.764764 32.05532
## 1033 30.910044  29.764764 32.05532
## 1034 30.910044  29.764764 32.05532
## 1035 30.910044  29.764764 32.05532
## 1036 13.614688  11.676997 15.55238
## 1037 30.910044  29.764764 32.05532
## 1038 30.910044  29.764764 32.05532
## 1039  9.804651   6.066901 13.54240
## 1040 13.614688  11.676997 15.55238
## 1041 30.910044  29.764764 32.05532
## 1042 30.910044  29.764764 32.05532
## 1043 30.910044  29.764764 32.05532
## 1044 30.910044  29.764764 32.05532
## 1045 30.910044  29.764764 32.05532
## 1046 13.614688  11.676997 15.55238
## 1047 30.910044  29.764764 32.05532
## 1048 13.614688  11.676997 15.55238
## 1049 30.910044  29.764764 32.05532
## 1050 30.910044  29.764764 32.05532
## 1051 13.614688  11.676997 15.55238
## 1052 13.614688  11.676997 15.55238
## 1053 13.614688  11.676997 15.55238
## 1054 13.614688  11.676997 15.55238
## 1055  9.804651   6.066901 13.54240
## 1056  9.804651   6.066901 13.54240
## 1057  9.804651   6.066901 13.54240
## 1058  9.804651   6.066901 13.54240
## 1059 13.614688  11.676997 15.55238
## 1060 13.614688  11.676997 15.55238
## 1061 30.910044  29.764764 32.05532
## 1062  9.804651   6.066901 13.54240
## 1063 30.910044  29.764764 32.05532
## 1064  9.804651   6.066901 13.54240
## 1065  9.804651   6.066901 13.54240
## 1066  9.804651   6.066901 13.54240
## 1067  9.804651   6.066901 13.54240
## 1068  9.804651   6.066901 13.54240
## 1069  9.804651   6.066901 13.54240
## 1070 13.614688  11.676997 15.55238
## 1071 30.910044  29.764764 32.05532
## 1072 13.614688  11.676997 15.55238
## 1073 30.910044  29.764764 32.05532
## 1074 30.910044  29.764764 32.05532
## 1075 30.910044  29.764764 32.05532
## 1076 30.910044  29.764764 32.05532
## 1077 30.910044  29.764764 32.05532
## 1078 13.614688  11.676997 15.55238
## 1079 13.614688  11.676997 15.55238
## 1080 30.910044  29.764764 32.05532
## 1081 13.614688  11.676997 15.55238
## 1082 13.614688  11.676997 15.55238
## 1083 30.910044  29.764764 32.05532
## 1084 13.614688  11.676997 15.55238
## 1085 30.910044  29.764764 32.05532
## 1086 30.910044  29.764764 32.05532
## 1087 13.614688  11.676997 15.55238
## 1088 30.910044  29.764764 32.05532
## 1089 13.614688  11.676997 15.55238
## 1090 13.614688  11.676997 15.55238
## 1091 30.910044  29.764764 32.05532
## 1092 30.910044  29.764764 32.05532
## 1093 30.910044  29.764764 32.05532
## 1094 13.614688  11.676997 15.55238
## 1095 13.614688  11.676997 15.55238
## 1096 30.910044  29.764764 32.05532
## 1097 13.614688  11.676997 15.55238
## 1098 30.910044  29.764764 32.05532
## 1099 30.910044  29.764764 32.05532
## 1100 30.910044  29.764764 32.05532
## 1101 30.910044  29.764764 32.05532
## 1102 30.910044  29.764764 32.05532
## 1103 13.614688  11.676997 15.55238
## 1104 30.910044  29.764764 32.05532
## 1105 13.614688  11.676997 15.55238
## 1106 30.910044  29.764764 32.05532
## 1107 13.614688  11.676997 15.55238
## 1108 30.910044  29.764764 32.05532
## 1109 30.910044  29.764764 32.05532
## 1110 13.614688  11.676997 15.55238
## 1111 30.910044  29.764764 32.05532
## 1112 30.910044  29.764764 32.05532
## 1113 30.910044  29.764764 32.05532
## 1114 13.614688  11.676997 15.55238
## 1115 30.910044  29.764764 32.05532
## 1116 30.910044  29.764764 32.05532
## 1117 30.910044  29.764764 32.05532
## 1118 30.910044  29.764764 32.05532
## 1119 30.910044  29.764764 32.05532
## 1120 13.614688  11.676997 15.55238
## 1121 13.614688  11.676997 15.55238
## 1122 13.614688  11.676997 15.55238
## 1123  9.804651   6.066901 13.54240
## 1124 13.614688  11.676997 15.55238
## 1125  9.804651   6.066901 13.54240
## 1126 13.614688  11.676997 15.55238
## 1127 30.910044  29.764764 32.05532
## 1128 30.910044  29.764764 32.05532
## 1129 30.910044  29.764764 32.05532
## 1130  9.804651   6.066901 13.54240
## 1131 13.614688  11.676997 15.55238
## 1132 30.910044  29.764764 32.05532
## 1133 13.614688  11.676997 15.55238
## 1134  9.804651   6.066901 13.54240
## 1135 13.614688  11.676997 15.55238
## 1136 13.614688  11.676997 15.55238
## 1137  9.804651   6.066901 13.54240
## 1138 30.910044  29.764764 32.05532
## 1139  9.804651   6.066901 13.54240
## 1140 13.614688  11.676997 15.55238
## 1141 13.614688  11.676997 15.55238
## 1142  9.804651   6.066901 13.54240
## 1143 13.614688  11.676997 15.55238
## 1144 30.910044  29.764764 32.05532
## 1145 13.614688  11.676997 15.55238
## 1146 30.910044  29.764764 32.05532
## 1147 13.614688  11.676997 15.55238
## 1148 13.614688  11.676997 15.55238
## 1149 13.614688  11.676997 15.55238
## 1150 30.910044  29.764764 32.05532
## 1151  9.804651   6.066901 13.54240
## 1152 30.910044  29.764764 32.05532
## 1153 13.614688  11.676997 15.55238
## 1154 30.910044  29.764764 32.05532
## 1155 13.614688  11.676997 15.55238
## 1156 30.910044  29.764764 32.05532
## 1157  9.804651   6.066901 13.54240
## 1158 13.614688  11.676997 15.55238
## 1159 13.614688  11.676997 15.55238
## 1160 13.614688  11.676997 15.55238
## 1161 13.614688  11.676997 15.55238
## 1162 30.910044  29.764764 32.05532
## 1163 13.614688  11.676997 15.55238
## 1164 30.910044  29.764764 32.05532
## 1165 30.910044  29.764764 32.05532
## 1166  9.804651   6.066901 13.54240
## 1167 13.614688  11.676997 15.55238
## 1168 30.910044  29.764764 32.05532
## 1169 30.910044  29.764764 32.05532
## 1170 30.910044  29.764764 32.05532
## 1171 13.614688  11.676997 15.55238
## 1172 13.614688  11.676997 15.55238
## 1173 30.910044  29.764764 32.05532
## 1174  9.804651   6.066901 13.54240
## 1175 30.910044  29.764764 32.05532
## 1176 30.910044  29.764764 32.05532
## 1177 13.614688  11.676997 15.55238
## 1178 30.910044  29.764764 32.05532
## 1179 13.614688  11.676997 15.55238
## 1180 30.910044  29.764764 32.05532
## 1181 30.910044  29.764764 32.05532
## 1182 13.614688  11.676997 15.55238
## 1183 13.614688  11.676997 15.55238
## 1184 30.910044  29.764764 32.05532
## 1185 30.910044  29.764764 32.05532
## 1186 13.614688  11.676997 15.55238
## 1187 13.614688  11.676997 15.55238
## 1188 30.910044  29.764764 32.05532
## 1189 30.910044  29.764764 32.05532
## 1190 13.614688  11.676997 15.55238
## 1191 13.614688  11.676997 15.55238
## 1192 13.614688  11.676997 15.55238
## 1193 13.614688  11.676997 15.55238
## 1194 30.910044  29.764764 32.05532
## 1195 30.910044  29.764764 32.05532
## 1196 13.614688  11.676997 15.55238
## 1197 13.614688  11.676997 15.55238
## 1198 13.614688  11.676997 15.55238
## 1199 30.910044  29.764764 32.05532
## 1200 13.614688  11.676997 15.55238
## 1201 13.614688  11.676997 15.55238
## 1202  9.804651   6.066901 13.54240
## 1203  9.804651   6.066901 13.54240
## 1204 13.614688  11.676997 15.55238
## 1205 30.910044  29.764764 32.05532
## 1206 30.910044  29.764764 32.05532
## 1207 30.910044  29.764764 32.05532
## 1208  9.804651   6.066901 13.54240
## 1209 13.614688  11.676997 15.55238
## 1210  9.804651   6.066901 13.54240
## 1211 13.614688  11.676997 15.55238
## 1212 13.614688  11.676997 15.55238
## 1213 13.614688  11.676997 15.55238
## 1214 13.614688  11.676997 15.55238
## 1215 13.614688  11.676997 15.55238
## 1216 13.614688  11.676997 15.55238
## 1217 13.614688  11.676997 15.55238
## 1218  9.804651   6.066901 13.54240
## 1219 13.614688  11.676997 15.55238
## 1220 13.614688  11.676997 15.55238
## 1221  9.804651   6.066901 13.54240
## 1222 13.614688  11.676997 15.55238
## 1223 30.910044  29.764764 32.05532
## 1224  9.804651   6.066901 13.54240
## 1225  9.804651   6.066901 13.54240
## 1226  9.804651   6.066901 13.54240
## 1227 13.614688  11.676997 15.55238
## 1228  9.804651   6.066901 13.54240
## 1229 13.614688  11.676997 15.55238
## 1230  6.100000 -28.562465 40.76247
## 1231 13.614688  11.676997 15.55238
## 1232 13.614688  11.676997 15.55238
## 1233 13.614688  11.676997 15.55238
## 1234 13.614688  11.676997 15.55238
## 1235  9.804651   6.066901 13.54240
## 1236 13.614688  11.676997 15.55238
## 1237 13.614688  11.676997 15.55238
## 1238 13.614688  11.676997 15.55238
## 1239 13.614688  11.676997 15.55238
## 1240 13.614688  11.676997 15.55238
## 1241 13.614688  11.676997 15.55238
## 1242 13.614688  11.676997 15.55238
## 1243 30.910044  29.764764 32.05532
## 1244 13.614688  11.676997 15.55238
## 1245 13.614688  11.676997 15.55238
## 1246 30.910044  29.764764 32.05532
## 1247 13.614688  11.676997 15.55238
## 1248 13.614688  11.676997 15.55238
## 1249 30.910044  29.764764 32.05532
## 1250 30.910044  29.764764 32.05532
## 1251 30.910044  29.764764 32.05532
## 1252 30.910044  29.764764 32.05532
## 1253 13.614688  11.676997 15.55238
## 1254 30.910044  29.764764 32.05532
## 1255 13.614688  11.676997 15.55238
## 1256  9.804651   6.066901 13.54240
## 1257 13.614688  11.676997 15.55238
## 1258 13.614688  11.676997 15.55238
## 1259 13.614688  11.676997 15.55238
## 1260 13.614688  11.676997 15.55238
## 1261 13.614688  11.676997 15.55238
## 1262 30.910044  29.764764 32.05532
## 1263 13.614688  11.676997 15.55238
## 1264 13.614688  11.676997 15.55238
## 1265 13.614688  11.676997 15.55238
## 1266 30.910044  29.764764 32.05532
## 1267 13.614688  11.676997 15.55238
## 1268 13.614688  11.676997 15.55238
## 1269 30.910044  29.764764 32.05532
## 1270 30.910044  29.764764 32.05532
## 1271 13.614688  11.676997 15.55238
## 1272 13.614688  11.676997 15.55238
## 1273 30.910044  29.764764 32.05532
## 1274 13.614688  11.676997 15.55238
## 1275 13.614688  11.676997 15.55238
## 1276 13.614688  11.676997 15.55238
## 1277  9.804651   6.066901 13.54240
## 1278 13.614688  11.676997 15.55238
## 1279 13.614688  11.676997 15.55238
## 1280 13.614688  11.676997 15.55238
## 1281 13.614688  11.676997 15.55238
## 1282 30.910044  29.764764 32.05532
## 1283  9.804651   6.066901 13.54240
## 1284  9.804651   6.066901 13.54240
## 1285 13.614688  11.676997 15.55238
## 1286  9.804651   6.066901 13.54240
## 1287  9.804651   6.066901 13.54240
## 1288 30.910044  29.764764 32.05532
## 1289  9.804651   6.066901 13.54240
## 1290 30.910044  29.764764 32.05532
## 1291  9.804651   6.066901 13.54240
## 1292 13.614688  11.676997 15.55238
## 1293  9.804651   6.066901 13.54240
## 1294  9.804651   6.066901 13.54240
## 1295 13.614688  11.676997 15.55238
## 1296  9.804651   6.066901 13.54240
## 1297  9.804651   6.066901 13.54240
## 1298 13.614688  11.676997 15.55238
## 1299 13.614688  11.676997 15.55238
## 1300  9.804651   6.066901 13.54240
## 1301  9.804651   6.066901 13.54240
## 1302  9.804651   6.066901 13.54240
## 1303 13.614688  11.676997 15.55238
## 1304 13.614688  11.676997 15.55238
## 1305  9.804651   6.066901 13.54240
## 1306 13.614688  11.676997 15.55238
## 1307  9.804651   6.066901 13.54240
## 1308  9.804651   6.066901 13.54240
## 1309 13.614688  11.676997 15.55238
## 1310  9.804651   6.066901 13.54240
## 1311 13.614688  11.676997 15.55238
## 1312 13.614688  11.676997 15.55238
## 1313  9.804651   6.066901 13.54240
## 1314 13.614688  11.676997 15.55238
## 1315 30.910044  29.764764 32.05532
## 1316 30.910044  29.764764 32.05532
## 1317 13.614688  11.676997 15.55238
## 1318 13.614688  11.676997 15.55238
## 1319 13.614688  11.676997 15.55238
## 1320 13.614688  11.676997 15.55238
## 1321 30.910044  29.764764 32.05532
## 1322  9.804651   6.066901 13.54240
## 1323 30.910044  29.764764 32.05532

4.3. Regresión Lineal Múltiple

Este modelo, que puede inicialmente pensarse como una extensión de la regresión lineal simple para facilitar su comprensión, y que eventualmente será llamado en este estudio como RLM, tiene como ecuación general aditiva:\[y_i=\beta_0+\beta_1 x_{i1}+\cdots+\beta_k x_{ik}+\varepsilon_i, \hspace{3mm}i=1,2,\dots,n\hspace{10mm}(21)\] donde \(E(\epsilon)=0\) y \(V(\epsilon)=\sigma^2\). También, para hacer pruebas de hipótesis y calcular intervalos de confianza y de predicción, se supone que \(\epsilon\) está normalmente distribuida. Complementariamente, con base en el enfoque de los mínimos cuadrados ordinarios, la estimación de sus parámetros se plantea en términos de la minimización de una función de ensayo desde la cual se observan los cuadrados de las desviaciones de la varaible estudiada. La función de ensayo se representa como \(f(b_0,b_1,...,b_k)= \sum_{j}[y_i-(b_0+b_1x_{1j}+b_2x_{2j}+...+b_kx_{kj})]^2\). Esto conduce a un conjunto de ecuaciones normales lineales en \(b_0,b_1,...,b_k\), que al ser resueltas entregan las estimaciones de mínimos cuadrados de \(\hat{\beta_0},\hat{\beta_1},...,, \hat{\beta_k}\).

Complementariamente, la proporción de variación total explicada por el modelo de regresión múltiple a través del coeficiente de determinación múltiple se ajusta, generalmente, con base en el número de parámetros del modelo.

Además, una prueba de utilidad del modelo de regresión lineal múltiple consiste en una prueba de hipótesis basada en un estadístico que tiene una distribución \(F\) particular cuando \(H_0\) es verdadera, esto de expresa en el par:\[H_0:\beta_1=\beta_2=\cdots=\beta_k=0\hspace{10mm}(22)\] \[H_1: \text {al menos una }\beta_i\neq 0\hspace{5mm}(i=1,...,k)\hspace{10mm}(23)\] el valor del estadístico de prueba es:\[f=\frac{R^2/k}{(1-R^2)(n-(k+1))}=\frac{SCR/k}{SCE/(n-(k+1))}=\frac{RMC}{CME}\hspace{10mm}(24)\] donde \(SCR=STC-SCE\), que es la suma de cuadrados de regresión, y la región de rechazo para una prueba de nivel \(\alpha\) es: \[f\geq F_{\alpha, k,n-(k+1)}\hspace{10mm}(25)\] Por último, un intervalo de confianza al \(100(1-\alpha)\%\) para \(\beta_i\) es: \[\hat\beta_i\pm t_{\alpha/2,n-(k+1)}\cdot s_{\hat\beta_{i}}\hspace{10mm}(26)\] y un intervalo de confianza al mismo nivel de significancia para un valor futuro está dado por: \[\hat y\pm t_{\alpha/2,n-(k+1)}\cdot \sqrt{s^2+s^2_{\hat Y}}\hspace{10mm}(27)\] Para cerrar, es necesario mencionar que eventualmente surgen problemas en los análisis de regresión múltiple que implican considerar técnicas de solución relacionadas con transformaciones de no-linealidad, estandarización y selección de variables, identificación de observaciones influyentes, multicolinealidad, entre otras.

Planteamiento del Problema

Con base en el conjunto de datos descrito en la sección 2 se formulará un modelo de regresión lineal múltiple para estudiar la relación lineal múltiple supuesta entre las varaibles definidas por los campos: Chance of Admit (variable dependiente) y los demás como variables independientes: Gender, GRE Score, TOEFL Score, SOP, LOR, CGPA, Research y University Rating.

Desarrollo del Análisis

El estudio de regresión lineal múltiple ha sido procesado con R version 4.3.3 (2024-02-29 ucrt) mediado por RStudio 2022.07.2 Build 576 en una plataforma x86_64-w64-mingw32.

Resumen estadístico de las variables de estudio.

La navegación a través de las pestañas muestra el resumen estadístico de todas las variables del conjunto de datos, excepto Serial, porque simplemente es un índice posicional. Sin embargo, para las varaibles de naturaleza cuantitativa::razón el resumen será el tradicional, pero para las variables de naturaleza cualitativa::nominal el resumen estadístico consistirá en conteos, proporciones y diagramas de barras. Se menciona de nuevo que Chance of Admit es la variable dependiente.

Resumen Variables Cuantitativas
summary(Universidad_Dataset$`ar score`)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1.60    6.50   12.20   21.82   26.30  100.00
summary(Universidad_Dataset$`er score`)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1.00    4.50   11.00   21.49   29.10  100.00
summary(Universidad_Dataset$`fsr score`)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1.10    7.70   17.20   29.18   43.05  100.00
summary(Universidad_Dataset$`cpf score`)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1.00    3.00   12.00   25.07   39.85  100.00
summary(Universidad_Dataset$`ifr score`)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1.00    4.50   13.80   31.56   54.65  100.00
summary(Universidad_Dataset$`isr score`)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1.00    3.20   10.90   26.75   40.05  100.00
summary(Universidad_Dataset$`irn score`)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1.00    1.30    9.00   25.89   45.40  100.00
summary(Universidad_Dataset$`ger score`)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1.00    8.50   12.40   21.03   24.40  100.00
summary(Universidad_Dataset$`SUS SCORE`)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1.00    1.60   10.30   26.68   45.80  100.00
summary(Universidad_Dataset$`Overall Score`)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    0.40   11.75   19.00   25.34   32.55  100.00
Resumen Variables Cualitativas
table(Universidad_Dataset$status)
## 
##    0    1 
## 1043  280
prop.table(table(Universidad_Dataset$status))
## 
##         0         1 
## 0.7883598 0.2116402
barplot(table(Universidad_Dataset$status))

table(Universidad_Dataset$research)
## 
##  HI  LO  MD  VH 
## 320   1  86 916
prop.table(table(Universidad_Dataset$research))
## 
##           HI           LO           MD           VH 
## 0.2418745276 0.0007558579 0.0650037793 0.6923658352
barplot(table(Universidad_Dataset$research))

table(Universidad_Dataset$focus)
## 
##  CO  FC  FO  SP 
## 416 556 295  56
prop.table(table(Universidad_Dataset$focus))
## 
##         CO         FC         FO         SP 
## 0.31443689 0.42025699 0.22297808 0.04232804
barplot(table(Universidad_Dataset$focus))

Diagramas de Dispersión Variables Cuantitativas
pairs(~`ar score`+`er score`+`fsr score`+`cpf score`+`ifr score`+`isr score`+`irn score`+`ger score`+`SUS SCORE`+`Overall Score`, data = Universidad_Dataset)

Formulación del modelo de RLM entre las variables de estudio.

La navegación a través de las pestañas muestra el resúmen y la tabla ANOVA del modelo de regresión lineal múltiple total y los coeficientes tanto del modelo mencionado como el logrado luego de reducirlo. Con base en la exploración de los datos del resumen estadistico de las variables de estudio y el resúmen y la tabla ANOVA del modelo total se formulan para comparación dos modelos RLM: uno que incluye a todas las varibles del conjunto de datos, excepto Serial, y otro que excluye a Gender, SOP y University Rating. Se menciona de nuevo que Chance of Admit es la variable dependiente.

Al considerar los resultados presentados en la pestaña Coeficientes del Modelo RLM Total se puede establer que el modelo de regresión lineal múltiple total que relaciona a las variables de interés, las cuales se resumirán como: \(OS\) (Overall Score), \(AR\) (ar Score), \(ER\) (er Score), \(FSR\) (fsr score), \(CPF\) (CPF score), \(IFR\) (ifr score), \(ISR\) (isr score), \(IRN\) (irn score), \(GER\) (er score), \(UR_3\) (University Rating::3), \(UR_4\) (University Rating::4) y \(UR_5\) (University Rating::5), tiene la formulación (con coeficientes redondeados a cuatro cifras decimales por motivos de edición):\[\tiny \hat{COA}=-1,2425+0,0017\cdot GRE+0,0031\cdot TOEFL-0,0026\cdot SOP+0,0227\cdot LOR+0,1188\cdot CGPA-0,0009\cdot G_1+0,0244\cdot R_1-0.0146\cdot UR_2-0,0093\cdot UR_3-0,0072\cdot UR_4+0,0105\cdot UR_5\hspace{10mm}(28)\] para este modelo se obvia la interpretación del intercepto por carecer de sentido dado que Chance of Admit resultaría negativa en caso de un que las variables predictoras fuesen nulas a la vez, y ambas situaciones carecen de sentido.

Por otro lado, luego de auscultar el resumen estadístico y la tabla ANOVA del modelo RLM Total (como se muestra en la pestaña homónima), se pudo establecer, con el apoyo de los resúmenes estadísticos de las variables de estudio, que podía excluirse directamente del modelo por baja significancia las variables Gender y University Rating; sin embargo, la variable SOP presentó un parte contradictorio: significancia en el resumen, pero lo contrario en ANOVA, la decisión tomada fue excluirla del modelo. Esto implicó que se calculase un modelo reducido con la formulación (con base en las mismas consideraciones de edición del modelo total):\[\hat{COA}=-1,2985+0,0018\cdot GRE+0,0030\cdot TOEFL+0,0228\cdot LOR+0,1210\cdot CGPA+0,0246\cdot R_1\hspace{10mm}(29)\]

Resumen y ANOVA del Modelo RLM Total
summary(lm(Universidad_Dataset$`Overall Score`~Universidad_Dataset$`ger score`+Universidad_Dataset$`isr score`+Universidad_Dataset$`irn score`+Universidad_Dataset$`ifr score`+Universidad_Dataset$`cpf score`+Universidad_Dataset$`ar score`+Universidad_Dataset$`er score`+Universidad_Dataset$`fsr score`+as.factor(Universidad_Dataset$status)+as.factor(Universidad_Dataset$research)+as.factor(Universidad_Dataset$focus)))
## 
## Call:
## lm(formula = Universidad_Dataset$`Overall Score` ~ Universidad_Dataset$`ger score` + 
##     Universidad_Dataset$`isr score` + Universidad_Dataset$`irn score` + 
##     Universidad_Dataset$`ifr score` + Universidad_Dataset$`cpf score` + 
##     Universidad_Dataset$`ar score` + Universidad_Dataset$`er score` + 
##     Universidad_Dataset$`fsr score` + as.factor(Universidad_Dataset$status) + 
##     as.factor(Universidad_Dataset$research) + as.factor(Universidad_Dataset$focus))
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -5.2992 -1.1248  0.1007  1.2083  4.1358 
## 
## Coefficients:
##                                            Estimate Std. Error t value Pr(>|t|)
## (Intercept)                                1.535893   0.121342  12.658  < 2e-16
## Universidad_Dataset$`ger score`            0.063393   0.003104  20.424  < 2e-16
## Universidad_Dataset$`isr score`            0.050820   0.002043  24.878  < 2e-16
## Universidad_Dataset$`irn score`            0.062854   0.002306  27.257  < 2e-16
## Universidad_Dataset$`ifr score`            0.051960   0.001908  27.231  < 2e-16
## Universidad_Dataset$`cpf score`            0.195296   0.002110  92.539  < 2e-16
## Universidad_Dataset$`ar score`             0.315158   0.004777  65.976  < 2e-16
## Universidad_Dataset$`er score`             0.146590   0.003454  42.445  < 2e-16
## Universidad_Dataset$`fsr score`            0.096537   0.001757  54.955  < 2e-16
## as.factor(Universidad_Dataset$status)1    -0.081273   0.116733  -0.696 0.486412
## as.factor(Universidad_Dataset$research)LO -0.170420   1.598203  -0.107 0.915097
## as.factor(Universidad_Dataset$research)MD -0.561349   0.195258  -2.875 0.004107
## as.factor(Universidad_Dataset$research)VH  0.307668   0.126997   2.423 0.015544
## as.factor(Universidad_Dataset$focus)FC     0.125827   0.117215   1.073 0.283257
## as.factor(Universidad_Dataset$focus)FO    -0.449024   0.123749  -3.629 0.000296
## as.factor(Universidad_Dataset$focus)SP    -0.245713   0.235132  -1.045 0.296216
##                                              
## (Intercept)                               ***
## Universidad_Dataset$`ger score`           ***
## Universidad_Dataset$`isr score`           ***
## Universidad_Dataset$`irn score`           ***
## Universidad_Dataset$`ifr score`           ***
## Universidad_Dataset$`cpf score`           ***
## Universidad_Dataset$`ar score`            ***
## Universidad_Dataset$`er score`            ***
## Universidad_Dataset$`fsr score`           ***
## as.factor(Universidad_Dataset$status)1       
## as.factor(Universidad_Dataset$research)LO    
## as.factor(Universidad_Dataset$research)MD ** 
## as.factor(Universidad_Dataset$research)VH *  
## as.factor(Universidad_Dataset$focus)FC       
## as.factor(Universidad_Dataset$focus)FO    ***
## as.factor(Universidad_Dataset$focus)SP       
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.594 on 1307 degrees of freedom
## Multiple R-squared:  0.9934, Adjusted R-squared:  0.9934 
## F-statistic: 1.318e+04 on 15 and 1307 DF,  p-value: < 2.2e-16
anova(lm(Universidad_Dataset$`Overall Score`~Universidad_Dataset$`ger score`+Universidad_Dataset$`isr score`+Universidad_Dataset$`irn score`+Universidad_Dataset$`ifr score`+Universidad_Dataset$`cpf score`+Universidad_Dataset$`ar score`+Universidad_Dataset$`er score`+Universidad_Dataset$`fsr score`+as.factor(Universidad_Dataset$status)+as.factor(Universidad_Dataset$research)+as.factor(Universidad_Dataset$focus)))
## Analysis of Variance Table
## 
## Response: Universidad_Dataset$`Overall Score`
##                                           Df Sum Sq Mean Sq    F value
## Universidad_Dataset$`ger score`            1 266181  266181 1.0480e+05
## Universidad_Dataset$`isr score`            1  53975   53975 2.1252e+04
## Universidad_Dataset$`irn score`            1  64508   64508 2.5399e+04
## Universidad_Dataset$`ifr score`            1   4552    4552 1.7922e+03
## Universidad_Dataset$`cpf score`            1  41605   41605 1.6381e+04
## Universidad_Dataset$`ar score`             1  58064   58064 2.2862e+04
## Universidad_Dataset$`er score`             1   4891    4891 1.9258e+03
## Universidad_Dataset$`fsr score`            1   8138    8138 3.2040e+03
## as.factor(Universidad_Dataset$status)      1      6       6 2.2313e+00
## as.factor(Universidad_Dataset$research)    3     33      11 4.3037e+00
## as.factor(Universidad_Dataset$focus)       3     53      18 6.8956e+00
## Residuals                               1307   3320       3           
##                                            Pr(>F)    
## Universidad_Dataset$`ger score`         < 2.2e-16 ***
## Universidad_Dataset$`isr score`         < 2.2e-16 ***
## Universidad_Dataset$`irn score`         < 2.2e-16 ***
## Universidad_Dataset$`ifr score`         < 2.2e-16 ***
## Universidad_Dataset$`cpf score`         < 2.2e-16 ***
## Universidad_Dataset$`ar score`          < 2.2e-16 ***
## Universidad_Dataset$`er score`          < 2.2e-16 ***
## Universidad_Dataset$`fsr score`         < 2.2e-16 ***
## as.factor(Universidad_Dataset$status)   0.1354824    
## as.factor(Universidad_Dataset$research) 0.0049662 ** 
## as.factor(Universidad_Dataset$focus)    0.0001316 ***
## Residuals                                            
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Coeficientes del Modelo RLM Total
coefficients(lm(Universidad_Dataset$`Overall Score`~Universidad_Dataset$`ger score`+Universidad_Dataset$`isr score`+Universidad_Dataset$`irn score`+Universidad_Dataset$`ifr score`+Universidad_Dataset$`cpf score`+Universidad_Dataset$`ar score`+Universidad_Dataset$`er score`+Universidad_Dataset$`fsr score`+as.factor(Universidad_Dataset$status)+as.factor(Universidad_Dataset$research)+as.factor(Universidad_Dataset$focus)))
##                               (Intercept) 
##                                1.53589325 
##           Universidad_Dataset$`ger score` 
##                                0.06339278 
##           Universidad_Dataset$`isr score` 
##                                0.05082023 
##           Universidad_Dataset$`irn score` 
##                                0.06285381 
##           Universidad_Dataset$`ifr score` 
##                                0.05195978 
##           Universidad_Dataset$`cpf score` 
##                                0.19529574 
##            Universidad_Dataset$`ar score` 
##                                0.31515842 
##            Universidad_Dataset$`er score` 
##                                0.14659004 
##           Universidad_Dataset$`fsr score` 
##                                0.09653695 
##    as.factor(Universidad_Dataset$status)1 
##                               -0.08127251 
## as.factor(Universidad_Dataset$research)LO 
##                               -0.17041955 
## as.factor(Universidad_Dataset$research)MD 
##                               -0.56134852 
## as.factor(Universidad_Dataset$research)VH 
##                                0.30766801 
##    as.factor(Universidad_Dataset$focus)FC 
##                                0.12582741 
##    as.factor(Universidad_Dataset$focus)FO 
##                               -0.44902426 
##    as.factor(Universidad_Dataset$focus)SP 
##                               -0.24571296
Coeficientes del Modelo RLM Reducido
coefficients(lm(Universidad_Dataset$`Overall Score`~Universidad_Dataset$`ger score`+Universidad_Dataset$`isr score`+Universidad_Dataset$`irn score`+Universidad_Dataset$`ifr score`+Universidad_Dataset$`cpf score`+Universidad_Dataset$`ar score`+Universidad_Dataset$`er score`+Universidad_Dataset$`fsr score`+as.factor(Universidad_Dataset$research)))
##                               (Intercept) 
##                               1.470676071 
##           Universidad_Dataset$`ger score` 
##                               0.063869935 
##           Universidad_Dataset$`isr score` 
##                               0.050050807 
##           Universidad_Dataset$`irn score` 
##                               0.065342828 
##           Universidad_Dataset$`ifr score` 
##                               0.052088080 
##           Universidad_Dataset$`cpf score` 
##                               0.195842421 
##            Universidad_Dataset$`ar score` 
##                               0.317974674 
##            Universidad_Dataset$`er score` 
##                               0.145023268 
##           Universidad_Dataset$`fsr score` 
##                               0.096340069 
## as.factor(Universidad_Dataset$research)LO 
##                              -0.007860749 
## as.factor(Universidad_Dataset$research)MD 
##                              -0.561414359 
## as.factor(Universidad_Dataset$research)VH 
##                               0.158272963
Análisis del modelo RLM.

La navegación a través de las pestañas, primero por Mejor Modelo Iterado según AIC, muestra que la decisión de excluir del modelo total a la variable SOP resultó acertada, el algoritmo iterado que considera componentes ANOVA y de desviación de residuales la excluyó en la cuarta iteración. Además, el mismo algoritmo determinó un modelo basado en las mismas variables del modelo reducido fundamento en la inspección de varaibles de las dos secciones precedentes.

Complementariamente, en la pestaña de Bondades de Ajuste, Significancias y Criterios de Información Comparados se presentan en paralelo los modelos generados. La consideración de todas las variables del conjunto de datos presentó una bondad de ajuste con base en el coeficiente de determinación múltiple que solo se redujo en terminos absolutos \(0,002\) puntos (es decir, se pasó de explicar el \(80,5\) \(\%\) de la variabilidad a el \(80,3\) \(\%\)) en comparación con el modelo reducido y el iterado; además, las significancias global e individuales de estos evidencian que ambos modelos, que son idénticos, aportan información relevante para estimar la variable dependiente Chance of Admit, porque para los valores críticos obtenidos de las pruebas \(F\) (para la significancia global) y \(t\) (para las significancias individuales), los p-valores resultaron siempre menores para cualquier nivel de significancia \(\alpha\) incluido dentro de los tradicionales, por ejemplo, \(\alpha=0,01\).

Por último, los criterios de información AIC y BIC muestran que efectivamente en los modelos idénticos reducido e iterado la relación entre el sesgo y la varianza en sus formulaciones, es decir, entre sus exactitudes y complejidades, resulta mejor que en modelo total: \(AIC_{RLMReducido}=AIC_{RLMIterado}=-1059,225<-1052,314=AIC_{RLMTotal}\) y \(BIC_{RLMReducido}=BIC_{RLMIterado}=-1031,284<-1000,425=BIC_{RLMTotal}\).

Mejor Modelo Iterado según AIC
modelo_Iterado_STEP = step(lm(Universidad_Dataset$`Overall Score`~Universidad_Dataset$`ger score`+Universidad_Dataset$`isr score`+Universidad_Dataset$`irn score`+Universidad_Dataset$`ifr score`+Universidad_Dataset$`cpf score`+Universidad_Dataset$`ar score`+Universidad_Dataset$`er score`+Universidad_Dataset$`fsr score`+as.factor(Universidad_Dataset$status)+as.factor(Universidad_Dataset$research)+as.factor(Universidad_Dataset$focus)))
## Start:  AIC=1249.05
## Universidad_Dataset$`Overall Score` ~ Universidad_Dataset$`ger score` + 
##     Universidad_Dataset$`isr score` + Universidad_Dataset$`irn score` + 
##     Universidad_Dataset$`ifr score` + Universidad_Dataset$`cpf score` + 
##     Universidad_Dataset$`ar score` + Universidad_Dataset$`er score` + 
##     Universidad_Dataset$`fsr score` + as.factor(Universidad_Dataset$status) + 
##     as.factor(Universidad_Dataset$research) + as.factor(Universidad_Dataset$focus)
## 
##                                           Df Sum of Sq     RSS    AIC
## - as.factor(Universidad_Dataset$status)    1       1.2  3320.7 1247.5
## <none>                                                  3319.5 1249.0
## - as.factor(Universidad_Dataset$research)  3      49.7  3369.2 1262.7
## - as.factor(Universidad_Dataset$focus)     3      52.5  3372.0 1263.8
## - Universidad_Dataset$`ger score`          1    1059.5  4379.0 1613.5
## - Universidad_Dataset$`isr score`          1    1571.9  4891.4 1759.9
## - Universidad_Dataset$`ifr score`          1    1883.3  5202.8 1841.6
## - Universidad_Dataset$`irn score`          1    1886.9  5206.4 1842.5
## - Universidad_Dataset$`er score`           1    4575.6  7895.1 2393.3
## - Universidad_Dataset$`fsr score`          1    7670.3 10989.8 2830.9
## - Universidad_Dataset$`ar score`           1   11055.2 14374.7 3186.1
## - Universidad_Dataset$`cpf score`          1   21749.5 25069.0 3921.9
## 
## Step:  AIC=1247.54
## Universidad_Dataset$`Overall Score` ~ Universidad_Dataset$`ger score` + 
##     Universidad_Dataset$`isr score` + Universidad_Dataset$`irn score` + 
##     Universidad_Dataset$`ifr score` + Universidad_Dataset$`cpf score` + 
##     Universidad_Dataset$`ar score` + Universidad_Dataset$`er score` + 
##     Universidad_Dataset$`fsr score` + as.factor(Universidad_Dataset$research) + 
##     as.factor(Universidad_Dataset$focus)
## 
##                                           Df Sum of Sq     RSS    AIC
## <none>                                                  3320.7 1247.5
## - as.factor(Universidad_Dataset$research)  3      53.3  3374.1 1262.6
## - as.factor(Universidad_Dataset$focus)     3      53.9  3374.7 1262.8
## - Universidad_Dataset$`ger score`          1    1065.1  4385.9 1613.6
## - Universidad_Dataset$`isr score`          1    1573.2  4893.9 1758.6
## - Universidad_Dataset$`ifr score`          1    1882.3  5203.0 1839.6
## - Universidad_Dataset$`irn score`          1    1935.0  5255.7 1853.0
## - Universidad_Dataset$`er score`           1    4657.5  7978.2 2405.2
## - Universidad_Dataset$`fsr score`          1    7721.8 11042.5 2835.2
## - Universidad_Dataset$`ar score`           1   11171.7 14492.5 3194.9
## - Universidad_Dataset$`cpf score`          1   21809.6 25130.3 3923.1
coefficients(modelo_Iterado_STEP)
##                               (Intercept) 
##                                1.51616630 
##           Universidad_Dataset$`ger score` 
##                                0.06314630 
##           Universidad_Dataset$`isr score` 
##                                0.05083650 
##           Universidad_Dataset$`irn score` 
##                                0.06307003 
##           Universidad_Dataset$`ifr score` 
##                                0.05191416 
##           Universidad_Dataset$`cpf score` 
##                                0.19536265 
##            Universidad_Dataset$`ar score` 
##                                0.31546512 
##            Universidad_Dataset$`er score` 
##                                0.14623024 
##           Universidad_Dataset$`fsr score` 
##                                0.09642053 
## as.factor(Universidad_Dataset$research)LO 
##                               -0.15120532 
## as.factor(Universidad_Dataset$research)MD 
##                               -0.57178688 
## as.factor(Universidad_Dataset$research)VH 
##                                0.31701549 
##    as.factor(Universidad_Dataset$focus)FC 
##                                0.12856709 
##    as.factor(Universidad_Dataset$focus)FO 
##                               -0.45269385 
##    as.factor(Universidad_Dataset$focus)SP 
##                               -0.25201950
Bondades de Ajuste, Significancias y Criterios de Información Comparados
library(stargazer)
## 
## Please cite as:
##  Hlavac, Marek (2022). stargazer: Well-Formatted Regression and Summary Statistics Tables.
##  R package version 5.2.3. https://CRAN.R-project.org/package=stargazer
modelo_RLM_TOTAL = lm(Universidad_Dataset$`Overall Score`~Universidad_Dataset$`ger score`+Universidad_Dataset$`isr score`+Universidad_Dataset$`irn score`+Universidad_Dataset$`ifr score`+Universidad_Dataset$`cpf score`+Universidad_Dataset$`ar score`+Universidad_Dataset$`er score`+Universidad_Dataset$`fsr score`+as.factor(Universidad_Dataset$status)+as.factor(Universidad_Dataset$research)+as.factor(Universidad_Dataset$focus))
modelo_RLM_REDUCIDO = lm(Universidad_Dataset$`Overall Score`~Universidad_Dataset$`ger score`+Universidad_Dataset$`isr score`+Universidad_Dataset$`irn score`+Universidad_Dataset$`ifr score`+Universidad_Dataset$`cpf score`+Universidad_Dataset$`ar score`+Universidad_Dataset$`er score`+Universidad_Dataset$`fsr score`+as.factor(Universidad_Dataset$research))

stargazer(modelo_RLM_TOTAL, modelo_RLM_REDUCIDO, modelo_Iterado_STEP, type = "text", df = TRUE)
## 
## =============================================================================================================
##                                                        Dependent variable:                                   
##                     -----------------------------------------------------------------------------------------
##                                                          `Overall Score`                                     
##                                  (1)                           (2)                           (3)             
## -------------------------------------------------------------------------------------------------------------
## `ger score`                   0.063***                      0.064***                      0.063***           
##                                (0.003)                       (0.003)                       (0.003)           
##                                                                                                              
## `isr score`                   0.051***                      0.050***                      0.051***           
##                                (0.002)                       (0.002)                       (0.002)           
##                                                                                                              
## `irn score`                   0.063***                      0.065***                      0.063***           
##                                (0.002)                       (0.002)                       (0.002)           
##                                                                                                              
## `ifr score`                   0.052***                      0.052***                      0.052***           
##                                (0.002)                       (0.002)                       (0.002)           
##                                                                                                              
## `cpf score`                   0.195***                      0.196***                      0.195***           
##                                (0.002)                       (0.002)                       (0.002)           
##                                                                                                              
## `ar score`                    0.315***                      0.318***                      0.315***           
##                                (0.005)                       (0.005)                       (0.005)           
##                                                                                                              
## `er score`                    0.147***                      0.145***                      0.146***           
##                                (0.003)                       (0.003)                       (0.003)           
##                                                                                                              
## `fsr score`                   0.097***                      0.096***                      0.096***           
##                                (0.002)                       (0.002)                       (0.002)           
##                                                                                                              
## status)1                       -0.081                                                                        
##                                (0.117)                                                                       
##                                                                                                              
## research)LO                    -0.170                        -0.008                        -0.151            
##                                (1.598)                       (1.608)                       (1.598)           
##                                                                                                              
## research)MD                   -0.561***                     -0.561***                     -0.572***          
##                                (0.195)                       (0.196)                       (0.195)           
##                                                                                                              
## research)VH                    0.308**                        0.158                        0.317**           
##                                (0.127)                       (0.119)                       (0.126)           
##                                                                                                              
## focus)FC                        0.126                                                       0.129            
##                                (0.117)                                                     (0.117)           
##                                                                                                              
## focus)FO                      -0.449***                                                   -0.453***          
##                                (0.124)                                                     (0.124)           
##                                                                                                              
## focus)SP                       -0.246                                                      -0.252            
##                                (0.235)                                                     (0.235)           
##                                                                                                              
## Constant                      1.536***                      1.471***                      1.516***           
##                                (0.121)                       (0.101)                       (0.118)           
##                                                                                                              
## -------------------------------------------------------------------------------------------------------------
## Observations                    1,323                         1,323                         1,323            
## R2                              0.993                         0.993                         0.993            
## Adjusted R2                     0.993                         0.993                         0.993            
## Residual Std. Error       1.594 (df = 1307)             1.604 (df = 1311)             1.593 (df = 1308)      
## F Statistic         13,177.080*** (df = 15; 1307) 17,727.250*** (df = 11; 1311) 14,123.820*** (df = 14; 1308)
## =============================================================================================================
## Note:                                                                             *p<0.1; **p<0.05; ***p<0.01
AIC(modelo_RLM_TOTAL, modelo_RLM_REDUCIDO, modelo_Iterado_STEP)
##                     df      AIC
## modelo_RLM_TOTAL    17 5005.557
## modelo_RLM_REDUCIDO 13 5019.355
## modelo_Iterado_STEP 16 5004.048
BIC(modelo_RLM_TOTAL, modelo_RLM_REDUCIDO, modelo_Iterado_STEP)
##                     df      BIC
## modelo_RLM_TOTAL    17 5093.747
## modelo_RLM_REDUCIDO 13 5086.795
## modelo_Iterado_STEP 16 5087.050

4.4. Regresión Logística

Este modelo, que eventualmente será llamado en este estudio como RLogS, establece que, en comparación con un modelo de regresión lineal simple que relacione una variable cuantitativa dependiente \(y\) con una varaible cuantitativa independiente \(x\), relaciona una variable categórica dicotómica (con valores posibles \(1\) (éxito) y \(0\) (fracaso)) dependiente \(y\) con el valor de probabilidad \(p(x)\in [0, 1]\) que depende de alguna variable cuantitativa \(x\).

Como se mencionó en la sección 1 los modelos de regresión usados en este estudio pueden ser vistos como casos particulares del Modelo Lineal Generalizado (GLM por sus siglas en inglés). Este modelo extiende al modelo lineal general al lograr que la variable dependiente está relacionada linealmente con sus factores y covariables a través de alguna función de enlace y que la variable dependiente pueda tener una distribución diferente a la normal. Además de los modelos usados en este estudio, el GLM también cubre: modelos loglineales para datos de recuento, modelos log-log complementario para datos de supervivencia censurados por intervalos, y otros modelos estadísticos a través de la propia formulación general del modelo.

Como GLM permite especificar distribuciones diferentes a la normal y una función de enlace (entendida como una transformación de la variable dependiente que permite la estimación del modelo) diferente a la identidad se puede trabajar con muchas combinaciones posibles de distribuciones y funciones de enlace, varias de las cuales pueden ser adecuadas para un conjunto de datos en particular, esto implica que la elección de la combinación estará orientada por consideraciones teóricas a priori, por la naturaleza de las variables, la experiencia del investigador y los resultados al comparar combinaciones.

En el caso por tratar, se trabajará con base en una distribución binomial (adecuada para variables que representan una respuesta binaria) con función de enlace logit:\[\pi(x)=\dfrac{e^{\beta_0+\beta_1 x}}{1+ e^{\beta_0 +\beta_1 x}}= \dfrac{1}{1+ e^{-(\beta_0+\beta_1 x)}}\hspace{10mm}(30)\](del inglés logarithmic unit: unidad logarítmica (natural)); que además es apropiada únicamente para la distribución binomial), por lo cual un nombre más adecuado para la regresión podría ser regresión logística binaria. Cabe anotar que el término logístico hace referencia a que la función de enlace constituye, en cierto sentido, un refinamiento del modelo exponencial de crecimiento, descrito por la función sigmoidea, de una magnitud asociada con un conjunto \(C\).

Para facilitar las interpretaciones se entiende que la función de enlace \(\pi(x)\) proviene de una razón de probabilidades (conocida en idioma inglés como ODDS ratio (OR)), que a su vez es el argumento de un logaritmo: \(\log\left(\frac{\pi(x)}{1-\pi(x)}\right)\), así, se modela la probabilidad de que la variable de respuesta pertenezca al nivel de referencia \(1\) en función del valor de los predictores. Complementariamente, la transformación de probabilidades a razones de probabilidad es conserva la monotonicidad de sentidos. Además, la transformación convierte el intervalo de probabilidad \([0,1]\) a \((-\infty,\infty)\). Las propiedades que se dan entre las probabilidades complementarias de éxito y fracaso, sus razones y la función de enlace logit son:

\(p(éxito)=p(fracaso)\) \(OR=1\) \(Logit\left(OR\right)=0\)
\(p(éxito)<p(fracaso)\) \(OR<1\) \(Logit\left(OR\right)<0\)
\(p(éxito)>p(fracaso)\) \(OR>1\) \(Logit\left(OR\right)>0\)

Se entiende que la transformación \(Logit\) carece de sentido para la certeza del éxito o del fracaso.

Planteamiento del Problema

Con base en el conjunto de datos descrito en la sección 2 se formulará un modelo de regresión logística simple para estudiar la relación logística supuesta entre las varaibles definidas por los campos: Chance of Admit (variable independiente) y Research (variable dependiente), con base en una distribución binomial y la función de enlace \(Logit\).

Desarrollo del Análisis

El estudio de regresión lineal simple ha sido procesado con R version 4.3.3 (2024-02-29 ucrt) mediado por RStudio 2022.07.2 Build 576 en una plataforma x86_64-w64-mingw32.

Resumen estadístico de las variables de estudio.

La navegación a través de las pestañas muestra el resumen estadístico de la variable independiente Chance of Admit, su boxplot e histograma. De la variable dependiente Research se mostrará su diagrama de barras, así como su media y mediana. Además, se exhibirá un Diagrama de Cajas conjunto entre aquellas.

Con base en la pestaña Resumen y Boxplot de Chance of Admit se puede comentar que la variable Chance of Admit, como se hizo en la sección 3.1.2.1., presenta asimetría de sesgo negativo con rango intercuartílico estrecho de dispersión imperceptible. Además, un dato se visualiza como outlier. Así, puede decirse que la variable registra valores altos en relación con su intervalo de medición. Lo expuesto también es constatable a través de la pestaña Histograma de Chance of Admit.

Asimismo, según la pestaña Resumen y Diagrama de Barras de Research, la variable cualitativa::nominal Research muestra proporcionalidad mayor para los casos favorables 1, que para los casos desfavorables 0: \(54.75\) \(\%\) y \(45.25\) \(\%\), respectivamente.

Complementariamente, la pestaña Resumen y Diagrama de Cajas Conjunto muestra que las observaciones son consistentes con el contexto del problema; es decir, para los casos favorables de Research los resultados de Chance of Admit son mayores, en comparación con los casos desfavorables. Además, ambos casos: los favorables y los desfavorables, muestran sesgo negativo, aunque es más notorio para los casos favorable. También, en el rango intercuartílico se visualizan dispersiones opuestas entre los casos desfavorables, hacia la mitad inferior de los datos, y los casos favorables, hacia la mitad superior. Asimismo, los atípicos, en ambos casos, se presentan en los extremos inferiores de las distribuciones, es decir, resultaron más extraños los valores bajos.

Resumen y Boxplot de Overral Score
summary(Universidad_Dataset$`Overall Score`)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    0.40   11.75   19.00   25.34   32.55  100.00
boxplot(Universidad_Dataset$`Overall Score`, main = "Diagrama de Caja de Overall Score", col = c("orange"))

Histograma de Overall Score
summary(Universidad_Dataset$`Overall Score`)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    0.40   11.75   19.00   25.34   32.55  100.00
hist(Universidad_Dataset$`Overall Score`, main = "Histograma de Overall Score", col = c("gold"))

Resumen y Diagrama de Barras de research
table(Universidad_Dataset$research)
## 
##  HI  LO  MD  VH 
## 320   1  86 916
prop.table(table(Universidad_Dataset$research))
## 
##           HI           LO           MD           VH 
## 0.2418745276 0.0007558579 0.0650037793 0.6923658352
barplot(table(Universidad_Dataset$research))

Resumen y Diagrama de Cajas Conjunto
tapply(Universidad_Dataset$`Overall Score`, Universidad_Dataset$research, mean)
##        HI        LO        MD        VH 
## 13.614688  6.100000  9.804651 30.910044
tapply(Universidad_Dataset$`Overall Score`, Universidad_Dataset$research, median)
##    HI    LO    MD    VH 
## 12.55  6.10  9.65 23.65
boxplot(Universidad_Dataset$`Overall Score`~Universidad_Dataset$research, main = "Boxplot Conjunto: Chance of Admit - Research", col = c("orange", "gold"))

Formulación del modelo de RLogS entre las variables de estudio.

La navegación a través de las pestañas muestra los coeficientes del modelo RLogS y su resumen estadístico. Se menciona de nuevo que las variables de interés son: Chance of Admit (variable independiente) y Research (variable dependiente).

La pestaña Coeficientes del Modelo RLogS permite establecer que el modelo RLogS relaciona a \(\pi(x)\) con \(x\) a través de la función de enlace \(Logit\) de la siguiente manera:\[\frac{\pi(x)}{1-\pi(x)}=e^{-7,658709+10,886959\cdot x}\hspace{10mm}(31)\]

Asimismo, la pestaña Resumen Estadístico del Modelo RLogS muestra, para efectos de comparación, los resúmenes del modelo estudiado y de uno alternativo con base en la variable cualitativa::nominal Gender. Con base en el criterio de información de Akaike (AIC por sus siglas en inglés), del cual se sabe que es una medida de la bondad de ajuste de un modelo estadístico que describe la relación entre el sesgo y la varianza en la formulación del modelo, es decir, entre su exactitud y complejidad, se verifica que resulta un mejor modelo de la variable Research que de la variable Gender, porque: \(AIC_R=412.60<534.09=AIC_G\). También, para apoyar que el modelo basado en la variable Research es mejor que aquél basado en Gender, el cociente entre la desviación nula (Null Deviance) y la desviación residual (Residual Deviance), observable en la pestaña Resumen Estadístico del Modelo RLosgS, es mayor en el modelo propuesto que en el de comparación.

Coeficientes del Modelo RLogS
modelo_RLog_Simple = glm(Universidad_Dataset$research~Universidad_Dataset$`Overall Score`, family = "binomial", data = data.frame(Universidad_Dataset$research, Universidad_Dataset$`Overall Score`))
coef(modelo_RLog_Simple)
##                         (Intercept) Universidad_Dataset$`Overall Score` 
##                         -0.55960759                          0.08967601
Resumen Estadístico del Modelo RLogS
summary(modelo_RLog_Simple)
## 
## Call:
## glm(formula = Universidad_Dataset$research ~ Universidad_Dataset$`Overall Score`, 
##     family = "binomial", data = data.frame(Universidad_Dataset$research, 
##         Universidad_Dataset$`Overall Score`))
## 
## Coefficients:
##                                      Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                         -0.559608   0.141197  -3.963 7.39e-05 ***
## Universidad_Dataset$`Overall Score`  0.089676   0.007985  11.230  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1463.8  on 1322  degrees of freedom
## Residual deviance: 1228.2  on 1321  degrees of freedom
## AIC: 1232.2
## 
## Number of Fisher Scoring iterations: 6
modelo_RLog_Simple_S = glm(Universidad_Dataset$status~Universidad_Dataset$`Overall Score`, family = "binomial", data = data.frame(Universidad_Dataset$status, Universidad_Dataset$`Overall Score`))
summary(modelo_RLog_Simple_S)
## 
## Call:
## glm(formula = Universidad_Dataset$status ~ Universidad_Dataset$`Overall Score`, 
##     family = "binomial", data = data.frame(Universidad_Dataset$status, 
##         Universidad_Dataset$`Overall Score`))
## 
## Coefficients:
##                                      Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                         -0.987172   0.111708  -8.837  < 2e-16 ***
## Universidad_Dataset$`Overall Score` -0.013746   0.003964  -3.468 0.000525 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1365.7  on 1322  degrees of freedom
## Residual deviance: 1352.3  on 1321  degrees of freedom
## AIC: 1356.3
## 
## Number of Fisher Scoring iterations: 4
Análisis del modelo RLogS.

Se mostrarán, a través de pestañas, los resultados de algunas predicciones obtenidas a través del modelo RLogS para identificar en sus respuestas la correspondencia de sentido en las razones de probabilidades ODDS a favor o en contra del evento considerado: \(\frac{\pi}{1-\pi}\) y \(\frac{1-\pi}{\pi}\), respectivamente. Se menciona de nuevo que las variables de interés son: Chance of Admit (variable independiente) y Research (variable dependiente).

La pestaña Variable Predictora igual a Cero plantea dos situaciones interpretativas. La primera, permite comprender que el coeficiente del factor en el cual está presente la varaible predictora, estima una probabilidad de caso favorable cercana a cero en el orden de la diezmilésima. La segunda, acarrea una interpretación más delicada: como la variable Chance of Admit se mide en el intervalo \([0,1]\) con dos cifras significativas y dos decimales de precisión, una unidad de medida razonable en ella sería una centésima, por ejemplo: pasar de \(0.62\) a \(0.63\) implica incrementar en una unidad de medida a \(0.62\). Así, se entiende que el cociente de probabilidades en relación con la variable predictora en el modelo RLogS refleje un incremento acumulado de \(\approx 53474.4\) veces desde \(0\) hasta \(1\), con incrementos de \(0.01\).

Con base en lo anterior, a través de la pestaña Probabilidades Estimadas se puede apreciar entre los registros \(19\) y \(20\) un delta de cambio absoluto igual a \(0.022795\) (equivalente a un incremento relativo \(\approx 7.94\) \(\%\)) al incrementarse la variable predictora en una unidad como se definió en el párrafo anterior.

Por último, el gráfico de curva logística, en la pestaña Gráfica del Modelo RLogS, permite visualmente comprender el comportamiento de las variables involucradas en el modelo propuesto; es decir, los casos favorables en relación con la variable Research logran superar la barrera del \(90\)\(\%\) del valor de Chance of Admit.

Variable Predictora igual a Cero
coef(modelo_RLog_Simple)
##                         (Intercept) Universidad_Dataset$`Overall Score` 
##                         -0.55960759                          0.08967601
round(exp(coef(modelo_RLog_Simple)),6)
##                         (Intercept) Universidad_Dataset$`Overall Score` 
##                            0.571433                            1.093820
Probabilidades Estimadas
predict(modelo_RLog_Simple, data.frame(seq(1, 400)), type = "response")
## Warning: 'newdata' had 400 rows but variables found have 1323 rows
##         1         2         3         4         5         6         7         8 
## 0.9997770 0.9997604 0.9997539 0.9997403 0.9997356 0.9997283 0.9995934 0.9995709 
##         9        10        11        12        13        14        15        16 
## 0.9995592 0.9994726 0.9994679 0.9994232 0.9994180 0.9993402 0.9993343 0.9993283 
##        17        18        19        20        21        22        23        24 
## 0.9992848 0.9992848 0.9992653 0.9992653 0.9992385 0.9992247 0.9992107 0.9992036 
##        25        26        27        28        29        30        31        32 
## 0.9991367 0.9991052 0.9991052 0.9991052 0.9990890 0.9990473 0.9990387 0.9989005 
##        33        34        35        36        37        38        39        40 
## 0.9988501 0.9988293 0.9988293 0.9987081 0.9986610 0.9985997 0.9985997 0.9985743 
##        41        42        43        44        45        46        47        48 
## 0.9984685 0.9984268 0.9984126 0.9983694 0.9982326 0.9981351 0.9981183 0.9981183 
##        49        50        51        52        53        54        55        56 
## 0.9981183 0.9977894 0.9977696 0.9976465 0.9975825 0.9973799 0.9973563 0.9973086 
##        57        58        59        60        61        62        63        64 
## 0.9972600 0.9972106 0.9971855 0.9970304 0.9967527 0.9967235 0.9964807 0.9964491 
##        65        66        67        68        69        70        71        72 
## 0.9963199 0.9963199 0.9962869 0.9960824 0.9960473 0.9959760 0.9959399 0.9956780 
##        73        74        75        76        77        78        79        80 
## 0.9954807 0.9954807 0.9951027 0.9949699 0.9949699 0.9949248 0.9947404 0.9943514 
##        81        82        83        84        85        86        87        88 
## 0.9941463 0.9941463 0.9939339 0.9938796 0.9937695 0.9937695 0.9934273 0.9934273 
##        89        90        91        92        93        94        95        96 
## 0.9933092 0.9931889 0.9930665 0.9930665 0.9929419 0.9929419 0.9926860 0.9926860 
##        97        98        99       100       101       102       103       104 
## 0.9926206 0.9925547 0.9924881 0.9922848 0.9922848 0.9920053 0.9919339 0.9917891 
##       105       106       107       108       109       110       111       112 
## 0.9915671 0.9914918 0.9911051 0.9911051 0.9910257 0.9909456 0.9907010 0.9905343 
##       113       114       115       116       117       118       119       120 
## 0.9904498 0.9899272 0.9897468 0.9896554 0.9894702 0.9893763 0.9889926 0.9888945 
##       121       122       123       124       125       126       127       128 
## 0.9887956 0.9882878 0.9877573 0.9875385 0.9875385 0.9873159 0.9873159 0.9866241 
##       129       130       131       132       133       134       135       136 
## 0.9863853 0.9860192 0.9860192 0.9853875 0.9853875 0.9849950 0.9849950 0.9847276 
##       137       138       139       140       141       142       143       144 
## 0.9845921 0.9845921 0.9844555 0.9843177 0.9838969 0.9838969 0.9837542 0.9837542 
##       145       146       147       148       149       150       151       152 
## 0.9836103 0.9836103 0.9836103 0.9834651 0.9833187 0.9833187 0.9827200 0.9827200 
##       153       154       155       156       157       158       159       160 
## 0.9821002 0.9814585 0.9814585 0.9814585 0.9814585 0.9812946 0.9809626 0.9809626 
##       161       162       163       164       165       166       167       168 
## 0.9809626 0.9807944 0.9806247 0.9801069 0.9801069 0.9801069 0.9795756 0.9790303 
##       169       170       171       172       173       174       175       176 
## 0.9786589 0.9786589 0.9784708 0.9784708 0.9782811 0.9782811 0.9782811 0.9778967 
##       177       178       179       180       181       182       183       184 
## 0.9778967 0.9778967 0.9771080 0.9769065 0.9769065 0.9767033 0.9764984 0.9760833 
##       185       186       187       188       189       190       191       192 
## 0.9760833 0.9760833 0.9754471 0.9745732 0.9743501 0.9743501 0.9743501 0.9741250 
##       193       194       195       196       197       198       199       200 
## 0.9741250 0.9738980 0.9734382 0.9729705 0.9727336 0.9724948 0.9722539 0.9722539 
##       201       202       203       204       205       206       207       208 
## 0.9722539 0.9720109 0.9705094 0.9705094 0.9702516 0.9699917 0.9697295 0.9689298 
##       209       210       211       212       213       214       215       216 
## 0.9686587 0.9683853 0.9681096 0.9678316 0.9675512 0.9672685 0.9669833 0.9658187 
##       217       218       219       220       221       222       223       224 
## 0.9652217 0.9646146 0.9643072 0.9633696 0.9633696 0.9627314 0.9627314 0.9624083 
##       225       226       227       228       229       230       231       232 
## 0.9614228 0.9607520 0.9607520 0.9604125 0.9600701 0.9597249 0.9597249 0.9590259 
##       233       234       235       236       237       238       239       240 
## 0.9586721 0.9586721 0.9583153 0.9579556 0.9572273 0.9572273 0.9561122 0.9561122 
##       241       242       243       244       245       246       247       248 
## 0.9557343 0.9549693 0.9541917 0.9534014 0.9530014 0.9525981 0.9525981 0.9521915 
##       249       250       251       252       253       254       255       256 
## 0.9521915 0.9517816 0.9509518 0.9505318 0.9496816 0.9492514 0.9488176 0.9483804 
##       257       258       259       260       261       262       263       264 
## 0.9483804 0.9483804 0.9479396 0.9474953 0.9470474 0.9456819 0.9452194 0.9447532 
##       265       266       267       268       269       270       271       272 
## 0.9447532 0.9438096 0.9438096 0.9428508 0.9428508 0.9428508 0.9423657 0.9418767 
##       273       274       275       276       277       278       279       280 
## 0.9418767 0.9413838 0.9408870 0.9403863 0.9403863 0.9398815 0.9398815 0.9393728 
##       281       282       283       284       285       286       287       288 
## 0.9383433 0.9383433 0.9378225 0.9362351 0.9356977 0.9356977 0.9356977 0.9356977 
##       289       290       291       292       293       294       295       296 
## 0.9351560 0.9346101 0.9340599 0.9335054 0.9335054 0.9329466 0.9318158 0.9318158 
##       297       298       299       300       301       302       303       304 
## 0.9312439 0.9289113 0.9283169 0.9277178 0.9271142 0.9265059 0.9265059 0.9252752 
##       305       306       307       308       309       310       311       312 
## 0.9252752 0.9233937 0.9233937 0.9227570 0.9227570 0.9227570 0.9221153 0.9214689 
##       313       314       315       316       317       318       319       320 
## 0.9201612 0.9201612 0.9194999 0.9194999 0.9194999 0.9188336 0.9181623 0.9181623 
##       321       322       323       324       325       326       327       328 
## 0.9181623 0.9168045 0.9154262 0.9154262 0.9154262 0.9147293 0.9147293 0.9140273 
##       329       330       331       332       333       334       335       336 
## 0.9140273 0.9140273 0.9140273 0.9133200 0.9133200 0.9126074 0.9118895 0.9111663 
##       337       338       339       340       341       342       343       344 
## 0.9111663 0.9111663 0.9111663 0.9104378 0.9104378 0.9097039 0.9089645 0.9067138 
##       345       346       347       348       349       350       351       352 
## 0.9059525 0.9059525 0.9051856 0.9051856 0.9044132 0.9044132 0.9036351 0.9036351 
##       353       354       355       356       357       358       359       360 
## 0.9028514 0.9020620 0.9012669 0.9012669 0.9012669 0.9004660 0.9004660 0.8996594 
##       361       362       363       364       365       366       367       368 
## 0.8996594 0.8988470 0.8988470 0.8963746 0.8963746 0.8963746 0.8955386 0.8946967 
##       369       370       371       372       373       374       375       376 
## 0.8938488 0.8929950 0.8929950 0.8929950 0.8912690 0.8895187 0.8895187 0.8895187 
##       377       378       379       380       381       382       383       384 
## 0.8895187 0.8886344 0.8868470 0.8850347 0.8850347 0.8813342 0.8813342 0.8794456 
##       385       386       387       388       389       390       391       392 
## 0.8784916 0.8784916 0.8784916 0.8784916 0.8784916 0.8775312 0.8775312 0.8775312 
##       393       394       395       396       397       398       399       400 
## 0.8775312 0.8765641 0.8765641 0.8765641 0.8755906 0.8746104 0.8746104 0.8746104 
##       401       402       403       404       405       406       407       408 
## 0.8736237 0.8716302 0.8716302 0.8716302 0.8696100 0.8696100 0.8685898 0.8675629 
##       409       410       411       412       413       414       415       416 
## 0.8675629 0.8675629 0.8665291 0.8665291 0.8654885 0.8654885 0.8654885 0.8644411 
##       417       418       419       420       421       422       423       424 
## 0.8633868 0.8633868 0.8623256 0.8623256 0.8623256 0.8623256 0.8623256 0.8612575 
##       425       426       427       428       429       430       431       432 
## 0.8591005 0.8580115 0.8569155 0.8569155 0.8569155 0.8569155 0.8569155 0.8547023 
##       433       434       435       436       437       438       439       440 
## 0.8547023 0.8547023 0.8547023 0.8547023 0.8535851 0.8535851 0.8535851 0.8535851 
##       441       442       443       444       445       446       447       448 
## 0.8524608 0.8524608 0.8513294 0.8513294 0.8513294 0.8513294 0.8490450 0.8490450 
##       449       450       451       452       453       454       455       456 
## 0.8455645 0.8455645 0.8455645 0.8455645 0.8455645 0.8443898 0.8432079 0.8420186 
##       457       458       459       460       461       462       463       464 
## 0.8420186 0.8408221 0.8396182 0.8396182 0.8396182 0.8396182 0.8384069 0.8384069 
##       465       466       467       468       469       470       471       472 
## 0.8384069 0.8371883 0.8359623 0.8359623 0.8359623 0.8347288 0.8347288 0.8334880 
##       473       474       475       476       477       478       479       480 
## 0.8309839 0.8297207 0.8297207 0.8297207 0.8297207 0.8309839 0.8284500 0.8271717 
##       481       482       483       484       485       486       487       488 
## 0.8271717 0.8258860 0.8258860 0.8245927 0.8245927 0.8245927 0.8232918 0.8232918 
##       489       490       491       492       493       494       495       496 
## 0.8232918 0.8232918 0.8206674 0.8206674 0.8206674 0.8206674 0.8193438 0.8193438 
##       497       498       499       500       501       502       503       504 
## 0.8193438 0.8180126 0.8180126 0.8180126 0.8180126 0.8166738 0.8166738 0.8153274 
##       505       506       507       508       509       510       511       512 
## 0.8153274 0.8153274 0.8139734 0.8139734 0.8139734 0.8139734 0.8139734 0.8139734 
##       513       514       515       516       517       518       519       520 
## 0.8126117 0.8126117 0.8126117 0.8112423 0.8112423 0.8098653 0.8084806 0.8084806 
##       521       522       523       524       525       526       527       528 
## 0.8070882 0.8056881 0.8056881 0.8056881 0.8042803 0.8042803 0.8042803 0.8042803 
##       529       530       531       532       533       534       535       536 
## 0.8028649 0.8028649 0.8014417 0.8014417 0.8000108 0.8000108 0.7971258 0.7971258 
##       537       538       539       540       541       542       543       544 
## 0.7971258 0.7956717 0.7956717 0.7956717 0.7942099 0.7942099 0.7942099 0.7942099 
##       545       546       547       548       549       550       551       552 
## 0.7927404 0.7912631 0.7912631 0.7912631 0.7912631 0.7912631 0.7897781 0.7897781 
##       553       554       555       556       557       558       559       560 
## 0.7882854 0.7882854 0.7882854 0.7867849 0.7867849 0.7867849 0.7867849 0.7852767 
##       561       562       563       564       565       566       567       568 
## 0.7852767 0.7852767 0.7852767 0.7837607 0.7837607 0.7822370 0.7822370 0.7822370 
##       569       570       571       572       573       574       575       576 
## 0.7807056 0.7807056 0.7791664 0.7776196 0.7776196 0.7776196 0.7760649 0.7760649 
##       577       578       579       580       581       582       583       584 
## 0.7760649 0.7745026 0.7745026 0.7729326 0.7729326 0.7729326 0.7729326 0.7729326 
##       585       586       587       588       589       590       591       592 
## 0.7713549 0.7713549 0.7713549 0.7713549 0.7713549 0.7713549 0.7713549 0.7697694 
##       593       594       595       596       597       598       599       600 
## 0.7697694 0.7697694 0.7697694 0.7697694 0.7697694 0.7697694 0.7697694 0.7697694 
##       601       602       603       604       605       606       607       608 
## 0.7697694 0.7697694 0.7697694 0.7681763 0.7681763 0.7681763 0.7681763 0.7681763 
##       609       610       611       612       613       614       615       616 
## 0.7681763 0.7681763 0.7681763 0.7665755 0.7665755 0.7665755 0.7665755 0.7665755 
##       617       618       619       620       621       622       623       624 
## 0.7665755 0.7665755 0.7665755 0.7665755 0.7649670 0.7649670 0.7649670 0.7649670 
##       625       626       627       628       629       630       631       632 
## 0.7649670 0.7649670 0.7649670 0.7649670 0.7649670 0.7649670 0.7633509 0.7633509 
##       633       634       635       636       637       638       639       640 
## 0.7633509 0.7633509 0.7633509 0.7633509 0.7633509 0.7633509 0.7633509 0.7633509 
##       641       642       643       644       645       646       647       648 
## 0.7633509 0.7633509 0.7617271 0.7617271 0.7617271 0.7617271 0.7617271 0.7617271 
##       649       650       651       652       653       654       655       656 
## 0.7617271 0.7617271 0.7617271 0.7617271 0.7617271 0.7600957 0.7600957 0.7600957 
##       657       658       659       660       661       662       663       664 
## 0.7600957 0.7600957 0.7600957 0.7600957 0.7600957 0.7584566 0.7584566 0.7584566 
##       665       666       667       668       669       670       671       672 
## 0.7584566 0.7584566 0.7584566 0.7584566 0.7584566 0.7568100 0.7568100 0.7568100 
##       673       674       675       676       677       678       679       680 
## 0.7568100 0.7568100 0.7568100 0.7568100 0.7568100 0.7568100 0.7551557 0.7551557 
##       681       682       683       684       685       686       687       688 
## 0.7551557 0.7551557 0.7551557 0.7551557 0.7551557 0.7551557 0.7551557 0.7534938 
##       689       690       691       692       693       694       695       696 
## 0.7534938 0.7534938 0.7534938 0.7534938 0.7534938 0.7534938 0.7534938 0.7534938 
##       697       698       699       700       701       702       703       704 
## 0.7534938 0.7518244 0.7518244 0.7518244 0.7518244 0.7518244 0.7518244 0.7518244 
##       705       706       707       708       709       710       711       712 
## 0.7518244 0.7518244 0.7518244 0.7518244 0.7501474 0.7501474 0.7501474 0.7501474 
##       713       714       715       716       717       718       719       720 
## 0.7501474 0.7501474 0.7501474 0.7501474 0.7501474 0.7501474 0.7484629 0.7484629 
##       721       722       723       724       725       726       727       728 
## 0.7484629 0.7484629 0.7484629 0.7484629 0.7484629 0.7484629 0.7484629 0.7467708 
##       729       730       731       732       733       734       735       736 
## 0.7467708 0.7467708 0.7467708 0.7467708 0.7467708 0.7467708 0.7467708 0.7467708 
##       737       738       739       740       741       742       743       744 
## 0.7450712 0.7433642 0.7416497 0.7416497 0.7416497 0.7416497 0.7399277 0.7399277 
##       745       746       747       748       749       750       751       752 
## 0.7399277 0.7399277 0.7381983 0.7381983 0.7364615 0.7364615 0.7364615 0.7347174 
##       753       754       755       756       757       758       759       760 
## 0.7347174 0.7329658 0.7329658 0.7329658 0.7329658 0.7329658 0.7329658 0.7329658 
##       761       762       763       764       765       766       767       768 
## 0.7329658 0.7312070 0.7312070 0.7312070 0.7312070 0.7312070 0.7312070 0.7294408 
##       769       770       771       772       773       774       775       776 
## 0.7294408 0.7294408 0.7294408 0.7294408 0.7294408 0.7276674 0.7276674 0.7276674 
##       777       778       779       780       781       782       783       784 
## 0.7258866 0.7258866 0.7240987 0.7240987 0.7223036 0.7223036 0.7223036 0.7223036 
##       785       786       787       788       789       790       791       792 
## 0.7223036 0.7223036 0.7223036 0.7223036 0.7205012 0.7205012 0.7205012 0.7205012 
##       793       794       795       796       797       798       799       800 
## 0.7205012 0.7205012 0.7186918 0.7186918 0.7186918 0.7186918 0.7186918 0.7186918 
##       801       802       803       804       805       806       807       808 
## 0.7186918 0.7186918 0.7186918 0.7186918 0.7186918 0.7168752 0.7168752 0.7168752 
##       809       810       811       812       813       814       815       816 
## 0.7168752 0.7168752 0.7168752 0.7150516 0.7150516 0.7150516 0.7150516 0.7132209 
##       817       818       819       820       821       822       823       824 
## 0.7132209 0.7132209 0.7132209 0.7132209 0.7132209 0.7113832 0.7113832 0.7113832 
##       825       826       827       828       829       830       831       832 
## 0.7113832 0.7113832 0.7095385 0.7095385 0.7095385 0.7095385 0.7095385 0.7076869 
##       833       834       835       836       837       838       839       840 
## 0.7076869 0.7076869 0.7076869 0.7076869 0.7058283 0.7039629 0.7039629 0.7039629 
##       841       842       843       844       845       846       847       848 
## 0.7039629 0.7039629 0.7039629 0.7039629 0.7039629 0.7039629 0.7039629 0.7039629 
##       849       850       851       852       853       854       855       856 
## 0.7020907 0.7020907 0.7020907 0.7020907 0.7020907 0.7020907 0.7020907 0.7020907 
##       857       858       859       860       861       862       863       864 
## 0.7020907 0.7020907 0.7020907 0.7020907 0.7020907 0.7020907 0.7020907 0.7002116 
##       865       866       867       868       869       870       871       872 
## 0.7002116 0.7002116 0.7002116 0.7002116 0.7002116 0.7002116 0.7002116 0.6983258 
##       873       874       875       876       877       878       879       880 
## 0.6983258 0.6964333 0.6964333 0.6945341 0.6945341 0.6945341 0.6945341 0.6945341 
##       881       882       883       884       885       886       887       888 
## 0.6926282 0.6926282 0.6926282 0.6926282 0.6926282 0.6926282 0.6926282 0.6926282 
##       889       890       891       892       893       894       895       896 
## 0.6926282 0.6907158 0.6907158 0.6907158 0.6907158 0.6907158 0.6907158 0.6887968 
##       897       898       899       900       901       902       903       904 
## 0.6887968 0.6887968 0.6868713 0.6868713 0.6849393 0.6849393 0.6849393 0.6830009 
##       905       906       907       908       909       910       911       912 
## 0.6830009 0.6810562 0.6810562 0.6791051 0.6791051 0.6791051 0.6791051 0.6771477 
##       913       914       915       916       917       918       919       920 
## 0.6771477 0.6771477 0.6771477 0.6771477 0.6771477 0.6771477 0.6771477 0.6771477 
##       921       922       923       924       925       926       927       928 
## 0.6771477 0.6751841 0.6751841 0.6732143 0.6732143 0.6712384 0.6712384 0.6692565 
##       929       930       931       932       933       934       935       936 
## 0.6692565 0.6692565 0.6692565 0.6672685 0.6672685 0.6672685 0.6672685 0.6652745 
##       937       938       939       940       941       942       943       944 
## 0.6652745 0.6652745 0.6652745 0.6632746 0.6632746 0.6612688 0.6612688 0.6592573 
##       945       946       947       948       949       950       951       952 
## 0.6592573 0.6592573 0.6572399 0.6572399 0.6572399 0.6572399 0.6552169 0.6552169 
##       953       954       955       956       957       958       959       960 
## 0.6531883 0.6531883 0.6511540 0.6511540 0.6491143 0.6491143 0.6470690 0.6470690 
##       961       962       963       964       965       966       967       968 
## 0.6450184 0.6450184 0.6429624 0.6409012 0.6409012 0.6388347 0.6388347 0.6388347 
##       969       970       971       972       973       974       975       976 
## 0.6388347 0.6388347 0.6367631 0.6367631 0.6367631 0.6346864 0.6346864 0.6346864 
##       977       978       979       980       981       982       983       984 
## 0.6346864 0.6326047 0.6326047 0.6326047 0.6326047 0.6326047 0.6326047 0.6305180 
##       985       986       987       988       989       990       991       992 
## 0.6284264 0.6284264 0.6263300 0.6263300 0.6263300 0.6242289 0.6221231 0.6221231 
##       993       994       995       996       997       998       999      1000 
## 0.6200126 0.6200126 0.6200126 0.6200126 0.6200126 0.6178976 0.6178976 0.6178976 
##      1001      1002      1003      1004      1005      1006      1007      1008 
## 0.6178976 0.6157781 0.6157781 0.6157781 0.6157781 0.6157781 0.6157781 0.6136542 
##      1009      1010      1011      1012      1013      1014      1015      1016 
## 0.6136542 0.6136542 0.6115260 0.6115260 0.6093935 0.6093935 0.6093935 0.6093935 
##      1017      1018      1019      1020      1021      1022      1023      1024 
## 0.6072569 0.6072569 0.6072569 0.6051161 0.6051161 0.6051161 0.6029713 0.6029713 
##      1025      1026      1027      1028      1029      1030      1031      1032 
## 0.6029713 0.6029713 0.6029713 0.6008225 0.5986698 0.5986698 0.5965133 0.5965133 
##      1033      1034      1035      1036      1037      1038      1039      1040 
## 0.5965133 0.5965133 0.5965133 0.5943531 0.5943531 0.5943531 0.5943531 0.5921892 
##      1041      1042      1043      1044      1045      1046      1047      1048 
## 0.5921892 0.5900217 0.5900217 0.5900217 0.5878508 0.5878508 0.5878508 0.5856764 
##      1049      1050      1051      1052      1053      1054      1055      1056 
## 0.5856764 0.5856764 0.5856764 0.5856764 0.5856764 0.5856764 0.5834987 0.5834987 
##      1057      1058      1059      1060      1061      1062      1063      1064 
## 0.5834987 0.5834987 0.5834987 0.5834987 0.5834987 0.5834987 0.5834987 0.5834987 
##      1065      1066      1067      1068      1069      1070      1071      1072 
## 0.5834987 0.5813177 0.5813177 0.5813177 0.5813177 0.5813177 0.5813177 0.5813177 
##      1073      1074      1075      1076      1077      1078      1079      1080 
## 0.5813177 0.5813177 0.5813177 0.5813177 0.5791335 0.5791335 0.5791335 0.5791335 
##      1081      1082      1083      1084      1085      1086      1087      1088 
## 0.5791335 0.5791335 0.5791335 0.5791335 0.5791335 0.5791335 0.5791335 0.5791335 
##      1089      1090      1091      1092      1093      1094      1095      1096 
## 0.5769462 0.5769462 0.5769462 0.5769462 0.5769462 0.5769462 0.5769462 0.5769462 
##      1097      1098      1099      1100      1101      1102      1103      1104 
## 0.5769462 0.5747559 0.5725627 0.5725627 0.5725627 0.5725627 0.5725627 0.5725627 
##      1105      1106      1107      1108      1109      1110      1111      1112 
## 0.5725627 0.5725627 0.5725627 0.5725627 0.5725627 0.5725627 0.5725627 0.5725627 
##      1113      1114      1115      1116      1117      1118      1119      1120 
## 0.5725627 0.5725627 0.5725627 0.5725627 0.5725627 0.5703666 0.5703666 0.5703666 
##      1121      1122      1123      1124      1125      1126      1127      1128 
## 0.5703666 0.5703666 0.5703666 0.5703666 0.5703666 0.5703666 0.5703666 0.5703666 
##      1129      1130      1131      1132      1133      1134      1135      1136 
## 0.5703666 0.5703666 0.5703666 0.5703666 0.5703666 0.5703666 0.5703666 0.5703666 
##      1137      1138      1139      1140      1141      1142      1143      1144 
## 0.5681677 0.5681677 0.5681677 0.5681677 0.5681677 0.5681677 0.5681677 0.5681677 
##      1145      1146      1147      1148      1149      1150      1151      1152 
## 0.5681677 0.5681677 0.5659661 0.5659661 0.5659661 0.5659661 0.5659661 0.5637620 
##      1153      1154      1155      1156      1157      1158      1159      1160 
## 0.5637620 0.5637620 0.5615553 0.5593462 0.5593462 0.5593462 0.5593462 0.5571347 
##      1161      1162      1163      1164      1165      1166      1167      1168 
## 0.5571347 0.5571347 0.5571347 0.5549209 0.5549209 0.5549209 0.5549209 0.5527050 
##      1169      1170      1171      1172      1173      1174      1175      1176 
## 0.5527050 0.5527050 0.5527050 0.5504870 0.5504870 0.5504870 0.5482669 0.5482669 
##      1177      1178      1179      1180      1181      1182      1183      1184 
## 0.5482669 0.5460450 0.5460450 0.5460450 0.5460450 0.5460450 0.5438212 0.5438212 
##      1185      1186      1187      1188      1189      1190      1191      1192 
## 0.5438212 0.5438212 0.5438212 0.5415957 0.5415957 0.5393685 0.5393685 0.5393685 
##      1193      1194      1195      1196      1197      1198      1199      1200 
## 0.5371397 0.5371397 0.5349094 0.5349094 0.5349094 0.5349094 0.5349094 0.5326778 
##      1201      1202      1203      1204      1205      1206      1207      1208 
## 0.5326778 0.5326778 0.5304448 0.5304448 0.5304448 0.5282106 0.5282106 0.5259753 
##      1209      1210      1211      1212      1213      1214      1215      1216 
## 0.5259753 0.5237390 0.5215016 0.5215016 0.5192635 0.5170245 0.5147849 0.5147849 
##      1217      1218      1219      1220      1221      1222      1223      1224 
## 0.5125447 0.5103040 0.5080628 0.5080628 0.5058214 0.5035797 0.5035797 0.5013378 
##      1225      1226      1227      1228      1229      1230      1231      1232 
## 0.5013378 0.4990959 0.4990959 0.4990959 0.4968541 0.4968541 0.4946123 0.4923708 
##      1233      1234      1235      1236      1237      1238      1239      1240 
## 0.4923708 0.4923708 0.4901296 0.4901296 0.4878888 0.4878888 0.4856485 0.4834087 
##      1241      1242      1243      1244      1245      1246      1247      1248 
## 0.4834087 0.4834087 0.4811696 0.4811696 0.4789313 0.4766938 0.4766938 0.4744573 
##      1249      1250      1251      1252      1253      1254      1255      1256 
## 0.4744573 0.4722217 0.4722217 0.4699873 0.4699873 0.4699873 0.4677541 0.4655222 
##      1257      1258      1259      1260      1261      1262      1263      1264 
## 0.4655222 0.4610626 0.4588351 0.4566092 0.4543851 0.4521628 0.4499424 0.4477239 
##      1265      1266      1267      1268      1269      1270      1271      1272 
## 0.4455076 0.4432934 0.4410815 0.4388719 0.4388719 0.4388719 0.4366648 0.4344601 
##      1273      1274      1275      1276      1277      1278      1279      1280 
## 0.4344601 0.4322580 0.4300586 0.4300586 0.4278620 0.4256682 0.4234773 0.4212894 
##      1281      1282      1283      1284      1285      1286      1287      1288 
## 0.4191046 0.4169230 0.4169230 0.4169230 0.4147447 0.4125696 0.4125696 0.4125696 
##      1289      1290      1291      1292      1293      1294      1295      1296 
## 0.4103980 0.4103980 0.4082298 0.4082298 0.4060653 0.4060653 0.4039043 0.4039043 
##      1297      1298      1299      1300      1301      1302      1303      1304 
## 0.4039043 0.4017471 0.3995937 0.3974441 0.3974441 0.3952985 0.3952985 0.3952985 
##      1305      1306      1307      1308      1309      1310      1311      1312 
## 0.3952985 0.3931570 0.3931570 0.3910195 0.3888862 0.3888862 0.3867572 0.3867572 
##      1313      1314      1315      1316      1317      1318      1319      1320 
## 0.3846324 0.3825121 0.3825121 0.3803962 0.3782849 0.3782849 0.3761782 0.3740761 
##      1321      1322      1323 
## 0.3740761 0.3719788 0.3719788
Gráfica del Modelo RLogS
research <- Universidad_Dataset$research
overall_score <- Universidad_Dataset$`Overall Score`
dataPlot <- data.frame(overall_score, research)
plot(research~overall_score, data = dataPlot, main = "Modelo RLogS: Overall Score - Research", xlab = "Overall Score", ylab = "Research = 0 | Research = 1", col = "gold", pch = "I")
curve(predict(glm(research~overall_score, family = "binomial", data = dataPlot), data.frame(overall_score = x), type = "response"), col = "orange", lwd = 3, add = TRUE)

LS0tDQp0aXRsZTogIkVzdHVkaW8gRGVzY3JpcHRpdm8gTXVsdGl2YXJpYWJsZSBjb24gYmFzZSBlbiB1biBjb25qdW50byBkZSBkYXRvcyBkZWwgcmFua2luZyBtdW5kaWFsIGRlIFVuaXZlcnNpZGFkZXMgcmVnaXN0cmFkbyBlbiBlbCBhw7FvIDIwMjMuIg0KYXV0aG9yOiAiUG9yOkczOjptYXJpYS5jYW1pbGEuYXJhdWpvOjpzYW11ZWwubXVuZXJhOjpzYW11ZWwubWFydGluZXo6OkBjb3JyZW91bml2YWxsZS5lZHUuY28iDQpkYXRlOiAiMjAyNC0wMy0yMCINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IFRSVUUNCiAgICB0b2NfZmxvYXQ6IFRSVUUNCiAgICBjb2RlX2Rvd25sb2FkOiBUUlVFDQogICAgdGhlbWU6IHVuaXRlZA0KLS0tDQo8IS0tIENvbmZpZ3VyYWNpw7NuIEdsb2JhbCBkZSBSIC0tPg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQpgYGANCg0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmxpYnJhcnkocmVhZHIpDQpsaWJyYXJ5KHJlYWR4bCkNCmxpYnJhcnkoY29ycnBsb3QpDQpsaWJyYXJ5KGtuaXRyKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShHR2FsbHkpDQpsaWJyYXJ5KGFuZHJld3MpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoZ2dpbWFnZSkNCmxpYnJhcnkobm9ydGVzdCkNCmxpYnJhcnkodGNsdGspDQpsaWJyYXJ5KGdyYXBoaWNzKQ0KbGlicmFyeShjbHVzdGVyKQ0KbGlicmFyeShtYWdyaXR0cikNCmxpYnJhcnkoYXBscGFjaykNCmxpYnJhcnkoTVZOKQ0KbGlicmFyeShyZXNoYXBlMikNCmxpYnJhcnkoRmFjdG9NaW5lUikNCmxpYnJhcnkoZmFjdG9leHRyYSkNCmxpYnJhcnkocHN5Y2gpDQpsaWJyYXJ5KEZhY3RvQ2xhc3MpDQpsaWJyYXJ5KGRlbmRleHRlbmQpDQpsaWJyYXJ5KE5iQ2x1c3QpDQpsaWJyYXJ5KHN0YXRzKQ0KbGlicmFyeSh2Y2QpDQoNCg0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG89VFJVRSkNCg0KVW5pdmVyc2lkYWRfRGF0YXNldCA8LSByZWFkX2V4Y2VsKCJDOi9Vc2Vycy9sL09uZURyaXZlIC0gY29ycmVvdW5pdmFsbGUuZWR1LmNvL0dlc3Rpb24gZGUgRGF0b3MgUzQvRGF0YSBzZXQgUVMgV09STEQgVU5JVkVSU0lUWSBSQU5LSU5HUyAyMDI0Lnhsc3giKQ0KVmlldyhVbml2ZXJzaWRhZF9EYXRhc2V0KQ0KDQpVbml2ZXJzaWRhZF9EYXRhc2V0X0MgPC0gcmVhZF9leGNlbCgiQzovVXNlcnMvbC9PbmVEcml2ZSAtIGNvcnJlb3VuaXZhbGxlLmVkdS5jby9HZXN0aW9uIGRlIERhdG9zIFM0L0RhdGEgc2V0IFFTIFdPUkxEIFVOSVZFUlNJVFkgUkFOS0lOR1MgMjAyNF9DLnhsc3giKQ0KVmlldyhVbml2ZXJzaWRhZF9EYXRhc2V0X0MpDQpgYGANCg0KIyBGYXNlIDEgW0Rlc2NyaXBjaW9uZXMgbXVsdGl2YXJpYW50ZXNdDQoNCg0KIyMgMS4gT2JqZXRpdm9zDQpIYWNlciB1biBhbmFsaXNpcyBkZXRlbmlkbyBkZXNkZSBlbCBwdW50byBkZSB2aXN0YSBxdWUgbm9zIGJyaW5kYSBsYSBlc3RhZGlzdGljYSBkZXNjcmlwdGl2YSBtdWx0aXZhcmlhbnRlIChjYWxjdWxvcywgdmlzdWFsaXphY2lvbmVzIGUgaW50ZXJwcmV0YWNpb25lcykgYSB1biBjb25qdW50byBkZSBkYXRvcyBkZWwgcmFua2luZyBtdW5kaWFsIGRlIHVuaXZlcnNpZGFkZXMgcmVnaXN0cmFkYXMgZW4gZWwgYcOxbyAyMDIzLg0KDQoNCiMjIDEuMi4gRGVzY3JpcGNpb24gZGVsIGNvbmp1bnRvIGRlIGRhdG9zDQoNCg0KIyMjIEZ1ZW50ZSBkZWwgY29uanVudG8gZGUgZGF0b3MNCkVsIGNvbmp1bnRvIGRlIGRhdG9zIGRlIHRyYWJham8gc2Ugb2J0dXZvIGNhc2kgdG90YWxtZW50ZSBkZSAqKkthZ2dsZSoqOiAgaHR0cHM6Ly93d3cua2FnZ2xlLmNvbS9kYXRhc2V0cy90YWhpcnJmYXJvb3FxLzIwMjMtcXMtd29ybGQtdW5pdmVyc2l0eS1yYW5raW5nLiBFcyBjb252ZW5pZW50ZSBhbm90YXIgcXVlICoqS2FnZ2xlKiogZXMgdW5hIGNvbXBhw7HDrWEgc3Vic2lkaWFyaWEgZGUgR29vZ2xlIExMQyBxdWUgbWFudGllbmUgdW5hIGNvbXVuaWRhZCBvbmxpbmUgZGUgY2llbnTDrWZpY29zIGRlIGRhdG9zIHkgcHJvZmVzaW9uYWxlcyBkZWwgYXByZW5kaXphamUgYXV0b23DoXRpY28uIEVzdGEgZW1wcmVzYSBwZXJtaXRlIGEgc3VzIHVzdWFyaW9zIGVuY29udHJhciB5IHB1YmxpY2FyIGNvbmp1bnRvcyBkZSBkYXRvcywgZXhwbG9yYXIgeSBjcmVhciBtb2RlbG9zIGVuIHVuIGVudG9ybm8gZGUgY2llbmNpYSBkZSBkYXRvcyBiYXNhZG8gZW4gbGEgd2ViLCB0cmFiYWphciBjb24gb3Ryb3MgY2llbnTDrWZpY29zIGRlIGRhdG9zIGUgaW5nZW5pZXJvcyBkZSBhcHJlbmRpemFqZSBhdXRvbcOhdGljbyB5IHBhcnRpY2lwYXIgZW4gY29uY3Vyc29zIHBhcmEgcmVzb2x2ZXIgZGVzYWbDrW9zIGRlIGNpZW5jaWEgZGUgZGF0b3MuDQoNCg0KIyMjIENvbnRleHRvIGRlbCBjb25qdW50byBkZSBkYXRvcw0KRWwgY29uanVudG8gZGUgZGF0b3MgMjAyMyBRUyBXb3JsZCBVbml2ZXJzaXR5IFJhbmtpbmdzIGNvbnRpZW5lIGluZm9ybWFjacOzbiBzb2JyZSBsYXMgbWVqb3JlcyB1bml2ZXJzaWRhZGVzIGRlIHRvZG8gZWwgbXVuZG8uIEVsIGNvbmp1bnRvIGRlIGRhdG9zIGluY2x1eWUgbWV0csOtY2FzLCBjb21vIGVsIG5vbWJyZSBkZSBsYSBpbnN0aXR1Y2nDs24sIGxhIHViaWNhY2nDs24geSB2YXJpYXMgc3VicHVudHVhY2lvbmVzIGVuIGRpZmVyZW50ZXMgY2FtcG9zLCBhc8OtIGNvbW8gbGFzIGNsYXNpZmljYWNpb25lcyBkZSBsYXMgdW5pdmVyc2lkYWRlcy4NCg0KDQojIyMgRGVzY3JpcGNpb24gZGVsIGNvbmp1bnRvIGRlIGRhdG9zIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQpFbCBjb25qdW50byBkZSBkYXRvcyBjb250aWVuZSBsYXMgc2lndWllbnRlcyBtZWRpZGFzOg0KDQoxLiAqMjAyNCBSQU5LIChQb3NpY2nDs24gZW4gZWwgUmFua2luZyAyMDI0KSo6DQogICAgLSBSZXByZXNlbnRhIGxhIHBvc2ljacOzbiBkZSBsYSB1bml2ZXJzaWRhZCBlbiBlbCByYW5raW5nIG11bmRpYWwgcGFyYSBlbCBhw7FvIDIwMjQuDQogICAgLSBFc2NhbGEgZGUgbWVkaWNpw7NuOiAqbm9taW5hbCo6IExhcyBwb3NpY2lvbmVzIGVuIGVsIHJhbmtpbmcgc29uIG7Dum1lcm9zIGVudGVyb3MgcXVlIHJlcHJlc2VudGFuIGxhIHBvc2ljacOzbiByZWxhdGl2YSBkZSBsYXMgdW5pdmVyc2lkYWRlcy4NCg0KMi4gKjIwMjMgUkFOSyAoUG9zaWNpw7NuIGVuIGVsIFJhbmtpbmcgMjAyMykqOg0KICAgIC0gTGEgcG9zaWNpw7NuIGRlIGxhIHVuaXZlcnNpZGFkIGVuIGVsIHJhbmtpbmcgbXVuZGlhbCBwYXJhIGVsIGHDsW8gMjAyMy4NCiAgICAtIEVzY2FsYSBkZSBtZWRpY2nDs246ICpOb21pbmFsKi4gTGFzIHBvc2ljaW9uZXMgZW4gZWwgcmFua2luZyBzb24gbsO6bWVyb3MgZW50ZXJvcyBxdWUgcmVwcmVzZW50YW4gbGEgcG9zaWNpw7NuIHJlbGF0aXZhIGRlIGxhcyB1bml2ZXJzaWRhZGVzLg0KDQozLiAqU2l6ZSAoVGFtYcOxbykqOg0KICAgIC0gRWwgdGFtYcOxbyBkZSBsYSB1bml2ZXJzaWRhZCwgcG9zaWJsZW1lbnRlIGVuIHTDqXJtaW5vcyBkZSBuw7ptZXJvIGRlIGVzdHVkaWFudGVzLCBwZXJzb25hbCBhY2Fkw6ltaWNvLCBldGMuDQogICAgLSBFc2NhbGEgZGUgbWVkaWNpw7NuOiAqTm9taW5hbCouIFRhbWHDsW8gcmVsYXRpdm8sIHBlcm8gcHVlZGUgcmVwcmVzZW50YXJzZSBjb24gZXRpcXVldGFzIGNvbW8gInBlcXVlw7FvIiwgIm1lZGlhbm8iIG8gImdyYW5kZSIuDQoNCjQuICpGb2N1cyAoRW5mb3F1ZSkqOg0KICAgIC0gRWwgZW5mb3F1ZSBwcmluY2lwYWwgZGUgbGEgdW5pdmVyc2lkYWQsIHBvciBlamVtcGxvLCBlbiBjaWVuY2lhLCBpbmdlbmllcsOtYSwgYXJ0ZXMsIGV0Yy4NCiAgICAtIEVzY2FsYSBkZSBtZWRpY2nDs246ICpOb21pbmFsKi4gTG9zIGVuZm9xdWVzIHNvbiBldGlxdWV0YXMgw7puaWNhcyBzaW4gdW4gb3JkZW4gaW50csOtbnNlY28uDQoNCjUuICpSZXNlYXJjaCAoSW52ZXN0aWdhY2nDs24pKjoNCiAgICAtIExhIGNhbnRpZGFkIHkgY2FsaWRhZCBkZSBsYSBpbnZlc3RpZ2FjacOzbiByZWFsaXphZGEgcG9yIGxhIHVuaXZlcnNpZGFkLg0KICAgIC0gRXNjYWxhIGRlIG1lZGljacOzbjogKk5vbWluYWwqLiBMb3Mgbml2ZWxlcyBkZSBpbnZlc3RpZ2FjacOzbiBwdWVkZW4gc2VyIGV0aXF1ZXRhcyBjb21vICJiYWphIiwgIm1lZGlhIiBvICJhbHRhIi4NCg0KNi4gKkFnZSBCYW5kIChHcnVwbyBkZSBFZGFkKSo6DQogICAgLSBFbCByYW5nbyBkZSBlZGFkIGRlIGxhIHVuaXZlcnNpZGFkLg0KICAgIC0gRXNjYWxhIGRlIG1lZGljacOzbjogKk5vbWluYWwqLiBMb3MgZ3J1cG9zIGRlIGVkYWQgcHVlZGVuIHNlciBldGlxdWV0YXMgY29tbyAiam92ZW4iLCAiaW50ZXJtZWRpbyIgbyAiYW50aWd1byIuDQoNCjcuICpTdGF0dXMgKEVzdGFkbykqOg0KICAgIC0gRWwgZXN0YWRvIG8gY2F0ZWdvcsOtYSBkZSBsYSB1bml2ZXJzaWRhZCwgcG9yIGVqZW1wbG8sIHDDumJsaWNhIG8gcHJpdmFkYS4NCiAgICAtIEVzY2FsYSBkZSBtZWRpY2nDs246ICpOb21pbmFsKi4gTG9zIGVzdGFkb3Mgc29uIGV0aXF1ZXRhcyDDum5pY2FzIHNpbiB1biBvcmRlbiBpbnRyw61uc2Vjby4NCg0KOC4gKlJhbmsgKFJhbmdvKSo6DQogICAgLSBSZXByZXNlbnRhIGxhIHBvc2ljacOzbiBkZSBjYWRhIHVuaXZlcnNpZGFkIGVuIGxhIGNsYXNpZmljYWNpw7NuIG11bmRpYWwuDQogICAgLSBFc2NhbGEgZGUgTWVkaWNpw7NuOiAqT3JkaW5hbCouIExhcyB1bml2ZXJzaWRhZGVzIHNlIGNsYXNpZmljYW4gZW4gZnVuY2nDs24gZGUgc3UgcG9zaWNpw7NuIHJlbGF0aXZhLCBwZXJvIG5vIHNlIHB1ZWRlbiByZWFsaXphciBvcGVyYWNpb25lcyBtYXRlbcOhdGljYXMgc2lnbmlmaWNhdGl2YXMgZW50cmUgbG9zIHZhbG9yZXMgZGUgcmFua2luZy4NCg0KOS4gKkluc3RpdHVjacOzbio6DQogICAgLSBFbCBub21icmUgZGUgbGEgdW5pdmVyc2lkYWQgY29ycmVzcG9uZGllbnRlIGEgY2FkYSBlbnRyYWRhIGVuIGVsIGNvbmp1bnRvIGRlIGRhdG9zLg0KICAgIC0gRXNjYWxhIGRlIE1lZGljacOzbjogKk5vbWluYWwqLiBObyBoYXkgdW4gb3JkZW4gZXNwZWPDrWZpY28gZW50cmUgbGFzIHVuaXZlcnNpZGFkZXM7IHNpbXBsZW1lbnRlIHNlIGlkZW50aWZpY2FuIHBvciBzdSBub21icmUuDQoNCjEwLiAqQ8OzZGlnbyBkZSBVYmljYWNpw7NuKjoNCiAgICAtIFJlcHJlc2VudGEgdW4gY8OzZGlnbyDDum5pY28gcGFyYSBsYSB1YmljYWNpw7NuIGRlIGNhZGEgdW5pdmVyc2lkYWQuDQogICAgLSBFc2NhbGEgZGUgTWVkaWNpw7NuOiAqTm9taW5hbCouIExvcyBjw7NkaWdvcyBzb24gaWRlbnRpZmljYWRvcmVzIMO6bmljb3Mgc2luIHVuIG9yZGVuIGVzcGVjw61maWNvLg0KDQoxMS4gKlViaWNhY2nDs24qOg0KICAgIC0gSW5kaWNhIGxhIHViaWNhY2nDs24gZ2VvZ3LDoWZpY2EgZGUgbGEgdW5pdmVyc2lkYWQgKHBvciBlamVtcGxvLCBwYcOtcyBvIGNpdWRhZCkuDQogICAgLSBFc2NhbGEgZGUgTWVkaWNpw7NuOiAqTm9taW5hbCouIE5vIGhheSB1biBvcmRlbiBlc3BlY8OtZmljbyBlbnRyZSBsYXMgdWJpY2FjaW9uZXM7IHNpbXBsZW1lbnRlIHNlIGlkZW50aWZpY2FuIHBvciBzdSBub21icmUuDQoNCjEyLiAqUHVudHVhY2nDs24gZGUgUmVwdXRhY2nDs24gQWNhZMOpbWljYSAoQVIpKjoNCiAgICAtIFJlcHJlc2VudGEgbGEgcmVwdXRhY2nDs24gYWNhZMOpbWljYSBkZSBjYWRhIHVuaXZlcnNpZGFkLg0KICAgIC0gRXNjYWxhIGRlIE1lZGljacOzbjogKkRlIFJhesOzbiouIExhcyBkaWZlcmVuY2lhcyBlbnRyZSBsb3MgdmFsb3JlcyBzb24gc2lnbmlmaWNhdGl2YXMgeSBzZSBwdWVkZW4gcmVhbGl6YXIgb3BlcmFjaW9uZXMgbWF0ZW3DoXRpY2FzIGVudHJlIGVsbG9zLg0KDQoxMy4gKlJhbmdvIGRlIFJlcHV0YWNpw7NuIEFjYWTDqW1pY2EgKEFSKSo6DQogICAgLSBJbmRpY2EgbGEgcG9zaWNpw7NuIGRlIGxhIHVuaXZlcnNpZGFkIGVuIHTDqXJtaW5vcyBkZSBzdSByZXB1dGFjacOzbiBhY2Fkw6ltaWNhLg0KICAgIC0gRXNjYWxhIGRlIE1lZGljacOzbjogKk9yZGluYWwqLiBMYXMgdW5pdmVyc2lkYWRlcyBzZSBjbGFzaWZpY2FuIGVuIGZ1bmNpw7NuIGRlIHN1IHBvc2ljacOzbiByZWxhdGl2YSBlbiBsYSByZXB1dGFjacOzbiBhY2Fkw6ltaWNhLg0KDQoxNC4gKlB1bnR1YWNpw7NuIGRlIFJlcHV0YWNpw7NuIGRlbCBFbXBsZWFkb3IgKEVSKSo6DQogICAgLSBSZXByZXNlbnRhIGxhIHJlcHV0YWNpw7NuIGRlIGxhIHVuaXZlcnNpZGFkIGVudHJlIGxvcyBlbXBsZWFkb3Jlcy4NCiAgICAtIEVzY2FsYSBkZSBNZWRpY2nDs246ICpEZSBSYXrDs24qLiBMYXMgZGlmZXJlbmNpYXMgZW50cmUgbG9zIHZhbG9yZXMgc29uIHNpZ25pZmljYXRpdmFzIHkgc2UgcHVlZGVuIHJlYWxpemFyIG9wZXJhY2lvbmVzIG1hdGVtw6F0aWNhcyBlbnRyZSBlbGxvcy4NCg0KMTUuICpSYW5nbyBkZSBSZXB1dGFjacOzbiBkZWwgRW1wbGVhZG9yIChFUikqOg0KICAgIC0gSW5kaWNhIGxhIHBvc2ljacOzbiBkZSBsYSB1bml2ZXJzaWRhZCBlbiB0w6lybWlub3MgZGUgc3UgcmVwdXRhY2nDs24gZW50cmUgbG9zIGVtcGxlYWRvcmVzLg0KICAgIC0gRXNjYWxhIGRlIE1lZGljacOzbjogKk9yZGluYWwqLiBMYXMgdW5pdmVyc2lkYWRlcyBzZSBjbGFzaWZpY2FuIGVuIGZ1bmNpw7NuIGRlIHN1IHBvc2ljacOzbiByZWxhdGl2YSBlbiBsYSByZXB1dGFjacOzbiBkZWwgZW1wbGVhZG9yLg0KDQoxNi4gKlB1bnR1YWNpw7NuIGRlIFJlbGFjacOzbiBlbnRyZSBQcm9mZXNvcmVzIHkgRXN0dWRpYW50ZXMgKEZTUikqOg0KICAgIC0gUmVwcmVzZW50YSBsYSByZWxhY2nDs24gZW50cmUgcHJvZmVzb3JlcyB5IGVzdHVkaWFudGVzIGVuIGNhZGEgdW5pdmVyc2lkYWQuDQogICAgLSBFc2NhbGEgZGUgTWVkaWNpw7NuOiAqRGUgUmF6w7NuKi4gTGFzIGRpZmVyZW5jaWFzIGVudHJlIGxvcyB2YWxvcmVzIHNvbiBzaWduaWZpY2F0aXZhcyB5IHNlIHB1ZWRlbiByZWFsaXphciBvcGVyYWNpb25lcyBtYXRlbcOhdGljYXMgZW50cmUgZWxsb3MuDQoNCjE3LiAqUmFuZ28gZGUgUmVsYWNpw7NuIGVudHJlIFByb2Zlc29yZXMgeSBFc3R1ZGlhbnRlcyAoRlNSKSo6DQogICAgLSBJbmRpY2EgbGEgcG9zaWNpw7NuIGRlIGxhIHVuaXZlcnNpZGFkIGVuIHTDqXJtaW5vcyBkZSBzdSByZWxhY2nDs24gZW50cmUgcHJvZmVzb3JlcyB5IGVzdHVkaWFudGVzLg0KICAgIC0gRXNjYWxhIGRlIE1lZGljacOzbjogKk9yZGluYWwqLiBMYXMgdW5pdmVyc2lkYWRlcyBzZSBjbGFzaWZpY2FuIGVuIGZ1bmNpw7NuIGRlIHN1IHBvc2ljacOzbiByZWxhdGl2YSBlbiBsYSByZWxhY2nDs24gZW50cmUgcHJvZmVzb3JlcyB5IGVzdHVkaWFudGVzLg0KDQoxOC4gKlB1bnR1YWNpw7NuIGRlIENpdGFzIHBvciBQcm9mZXNvciAoQ1BGKSo6DQogICAgLSBSZXByZXNlbnRhIGxhIGNhbnRpZGFkIGRlIGNpdGFzIHBvciBwcm9mZXNvciBlbiBjYWRhIHVuaXZlcnNpZGFkLg0KICAgIC0gRXNjYWxhIGRlIE1lZGljacOzbjogKkRlIFJhesOzbiouIExhcyBkaWZlcmVuY2lhcyBlbnRyZSBsb3MgdmFsb3JlcyBzb24gc2lnbmlmaWNhdGl2YXMgeSBzZSBwdWVkZW4gcmVhbGl6YXIgb3BlcmFjaW9uZXMgbWF0ZW3DoXRpY2FzIGVudHJlIGVsbG9zLg0KDQoxOS4gKlJhbmdvIGRlIENpdGFzIHBvciBQcm9mZXNvciAoQ1BGKSo6DQogICAgLSBJbmRpY2EgbGEgcG9zaWNpw7NuIGRlIGxhIHVuaXZlcnNpZGFkIGVuIHTDqXJtaW5vcyBkZSBsYSBjYW50aWRhZCBkZSBjaXRhcyBwb3IgcHJvZmVzb3IuDQogICAgLSBFc2NhbGEgZGUgTWVkaWNpw7NuOiAqT3JkaW5hbCouIExhcyB1bml2ZXJzaWRhZGVzIHNlIGNsYXNpZmljYW4gZW4gZnVuY2nDs24gZGUgc3UgcG9zaWNpw7NuIHJlbGF0aXZhIGVuIGxhcyBjaXRhcyBwb3IgcHJvZmVzb3IuDQoNCjIwLiAqUHVudHVhY2nDs24gZGUgSW50ZXJuYWNpb25hbGl6YWNpw7NuIChJRlIpKjoNCiAgICAtIFJlcHJlc2VudGEgZWwgbml2ZWwgZGUgaW50ZXJuYWNpb25hbGl6YWNpw7NuIGRlIGNhZGEgdW5pdmVyc2lkYWQuDQogICAgLSBFc2NhbGEgZGUgTWVkaWNpw7NuOiAqRGUgUmF6w7NuKi4gTGFzIGRpZmVyZW5jaWFzIGVudHJlIGxvcyB2YWxvcmVzIHNvbiBzaWduaWZpY2F0aXZhcyB5IHNlIHB1ZWRlbiByZWFsaXphciBvcGVyYWNpb25lcyBtYXRlbcOhdGljYXMgZW50cmUgZWxsb3MuDQoNCjIxLiAqUmFuZ28gZGUgSW50ZXJuYWNpb25hbGl6YWNpw7NuIChJRlIpKjoNCiAgICAtIEluZGljYSBsYSBwb3NpY2nDs24gZGUgbGEgdW5pdmVyc2lkYWQgZW4gdMOpcm1pbm9zIGRlIHN1IG5pdmVsIGRlIGludGVybmFjaW9uYWxpemFjacOzbi4NCiAgICAtIEVzY2FsYSBkZSBNZWRpY2nDs246ICpPcmRpbmFsKi4gTGFzIHVuaXZlcnNpZGFkZXMgc2UgY2xhc2lmaWNhbiBlbiBmdW5jacOzbiBkZSBzdSBwb3NpY2nDs24gcmVsYXRpdmEuDQoNCjIyLiAqUHVudHVhY2nDs24gZGUgSW50ZXJuYWNpb25hbGl6YWNpw7NuIGRlIGxvcyBFc3R1ZGlhbnRlcyAoSVNSKSo6DQogICAgLSBJbmRpY2EgZWwgaW5kaWNlIGludGVybmFjaW9uYWxpemFjaW9uIGRlIGxvcyBlc3R1ZGlhcyANCiAgICAtIFRpcG8gZGUgbWVkaWRhOiBDb250aW51YS4NCg0KMjMuICpSYW5nbyBkZSBJbnRlcm5hY2lvbmFsaXphY2nDs24gZGUgbG9zIEVzdHVkaWFudGVzIChJU1IpKjoNCiAgICAtIEluZGljYSBlbCByYW5nbyBlbiBlbCBpbmRpY2Fkb3IgZGUgaW50ZXJuYWNpb25hbGl6YWNpw7NuIGRlIGxvcyBlc3R1ZGlhbnRlcy4NCiAgICAtIFRpcG8gZGUgbWVkaWRhOiBEaXNjcmV0YS4NCiAgICANCjI0LiAqUHVudHVhY2nDs24gZGUgUmVsYWNpb25lcyBJbnRlcm5hY2lvbmFsZXMgKElSTikqOg0KICAgIC0gUmVwcmVzZW50YSBsYSBwdW50dWFjacOzbiBlbiBlbCBpbmRpY2Fkb3IgZGUgcmVsYWNpb25lcyBpbnRlcm5hY2lvbmFsZXMuDQogICAgLSBUaXBvIGRlIG1lZGlkYTogQ29udGludWEuDQogICAgDQoyNS4gKlJhbmdvIGRlIFJlbGFjaW9uZXMgSW50ZXJuYWNpb25hbGVzIChJUk4pKjoNCiAgICAtIERlc2NyaXBjacOzbjogTWlkZSBlbCByYW5nbyBlbiBlbCBpbmRpY2Fkb3IgZGUgcmVsYWNpb25lcyBpbnRlcm5hY2lvbmFsZXMuDQogICAgLSBUaXBvIGRlIG1lZGlkYTogRGlzY3JldGEuDQogICAgDQoyNi4gKlB1bnR1YWNpw7NuIGRlIFByb3BvcmNpw7NuIGRlIEVzdHVkaWFudGVzIEdyYWR1YWRvcyAoR0VSKSo6DQogICAgLSBEZXNjcmlwY2nDs246IEV2YWzDumEgbGEgcHJvcG9yY2nDs24gZGUgZXN0dWRpYW50ZXMgZ3JhZHVhZG9zIGVuIGxhIHVuaXZlcnNpZGFkLg0KICAgIC0gVGlwbyBkZSBtZWRpZGE6IENvbnRpbnVhLg0KICAgIA0KMjcuICpSYW5nbyBkZSBQcm9wb3JjacOzbiBkZSBFc3R1ZGlhbnRlcyBHcmFkdWFkb3MgKEdFUikqOg0KICAgIC0gRGVzY3JpcGNpw7NuOiBJbmRpY2EgZWwgcmFuZ28gZW4gZWwgaW5kaWNhZG9yIGRlIHByb3BvcmNpw7NuIGRlIGVzdHVkaWFudGVzIGdyYWR1YWRvcy4NCiAgICAtIFRpcG8gZGUgbWVkaWRhOiBEaXNjcmV0YS4NCg0KIyMjIyBFc3RydWN0dXJhIGRlbCBjb25qdW50byBkZSBkYXRvcyBpbmljaWFsDQpgYGB7ciBFc3RydWN0dXJhX0Nvbmp1bnRvX2RlX0RhdG9zLCBmaWcuYWxpZ24gPSAnY2VudGVyJ30NCnN0cihVbml2ZXJzaWRhZF9EYXRhc2V0KQ0KYGBgDQoNCiMjIyMgVmlzdWFsaXphY2lvbiBkZWwgY29uanVudG8gZGUgRGF0b3MNCmBgYHtyIFZpc3VhbGl6YWNpb25fQ29uanVudG9fRGF0b3N9DQpVbml2ZXJzaWRhZF9EYXRhc2V0DQpgYGANCg0KIyMgMS4zLiBFc3RpbWFjaW9uZXMgTXVsdGl2YXJpYW50ZXMNCg0KQ29tbyBzZSBtZW5jaW9uYSBlbiAoQXJpc3RpesOhYmFsIFIuLCAyMDE3KSBsYSBkZSBtZWRpYSwgdmFyaWFuemEgeSBjb3ZhcmlhbnphIGNvbmZvcm1hbiB1biBjb25qdW50byBkZSBtZWRpZGFzIGZ1bmRhbWVudGFsZXMgcGFyYSBkZXNjcmliaXIgZWwgY29tcG9ydGFtaWVudG8gcG9zaWNpb25hbCwgZGlzcGVyc2l2byB5IGNvcnJlbGFjaW9uYWwgZGUgdmFyaWFibGVzIGFsZWF0b3JpYXMuIEVuIGVzdGUgc2VudGlkbywgZWwgY29uanVudG8gZGUgZGF0b3MgZGUgdHJhYmFqbyBxdWUgcG9zZWUgLCB5IHF1ZSBlc3TDoSByZXByZXNlbnRhZG8gbWF0cmljaWFsbWVudGUsIGVzdGltYSBsYXMgbWVkaWRhcyBhbnRlcmlvcmVzIGEgcGFydGlyIGRlIHZlY3RvcmVzIHkgbWF0cmljZXMgZW4gZWwgZXN0dWRpbyBkZXNjcmlwdGl2byBtdWx0aXZhcmlhYmxlLg0KDQpFbCB2ZWN0b3IgZGUgbWVkaWFzIGluZGljYSBlbCBjb21wb3J0YW1pZW50byBwb3NpY2lvbmFsIGVuIGVsIHNlbnRpZG8gZGUgdmFsb3IgZXNwZXJhZG8gbyBwdW50byBtZWRpbyBwYXJhIGNhZGEgdmFyaWFibGUgZW4gcmVsYWNpw7NuIGNvbiB0b2RvcyBzdXMgcmVnaXN0cm9zLiBMYSBtYXRyaXogZGUgdmFyaWFuemFzLWNvdmFyaWFuemFzIGVzdGltYSBsYXMgZGlzcGVyc2lvbmVzLCBlbiBzdSBkaWFnb25hbCBwcmluY2lwYWwsIGRlIGNhZGEgdmFyaWFibGUgZGVsIGNvbmp1bnRvIGRlIGRhdG9zIHJlc3BlY3RvIGRlIGNhZGEgbWVkaWEgb2J0ZW5pZGEgZGVsIHZlY3RvciBkZSBtZWRpYXMuIEFkZW3DoXMsIHBvciBlbmNpbWEgbyBwb3IgZGViYWpvIGRlIGxhIGRpYWdvbmFsIHByaW5jaXBhbCwgc2UgZXN0aW1hbiBsYXMgY292YXJpYW56YXMgZW50cmUgbGFzIGNvbWJpbmFjaW9uZXMgZGUgbG9zIHBvc2libGVzIHBhcmVzIGRlIHZhcmlhYmxlcyBkZWwgY29uanVudG8gZGUgZGF0b3MuIFBhcmEgbcOhcyBkZXRhbGxlcyBzZSBwdWVkZSBjb25zdWx0YXIgYSAoQXJpc3RpesOhYmFsIFIuLCAyMDE3KS4NCg0KTG8gYW50ZXJpb3IsIHBhcmEgZWwgY29uanVudG8gZGUgZGF0b3MgZGUgdHJhYmFqbywgc2UgZGVzYXJyb2xsYSBlbiBsYSBzZWNjacOzbiAzLjIuDQoNCiMjIyBwbGFudGVhbWllbnRvIGRlbCBwcm9ibGVtYQ0KQ29uIGJhc2UgZW4gZWwgY29uanVudG8gZGUgZGF0b3MgZGVzY3JpdG8gZW4gbGEgc2VjY2nDs24gMiBzZSBjYWxjdWxhcsOhbiBlIGludGVwcmV0YXLDoW4sIHBhcmEgbGFzIHZhcmlhYmxlcyBudW3DqXJpY2FzLCBlbCB2ZWN0b3IgZGUgbWVkaWFzLCBsYSBtYXRyaXogZGUgdmFyaWFuemFzLWNvdmFyaWFuemFzIHkgbGEgbWF0cml6IGRlIGNvcnJlbGFjaW9uZXMuIFNlIHJlY3VlcmRhIHF1ZSBsYXMgdmFyaWFibGVzIG51bcOpcmljYXMgKGVuIGVzY2FsYWRhIGRlIG1lZGljacOzbiBkZSByYXrDs24pIHNvbjogTGEgcHVudHVhY2lvbiBkZSBBUiwgRVIsIEZTUiwgQ1BGLCBJRlIsIElTUiwgSVJOIHkgR0VSLg0KDQojIyMgZGVzYXJyb2xsbyBkZWwgYW5hbGlzaXMgey50YWJzZXQgLnRhYnNldC1waWxsc30NCkxhIG5hdmVnYWNpw7NuIGEgdHJhdsOpcyBkZSBsYXMgcGVzdGHDsWFzIG11ZXN0cmEgZWwgY8OhbGN1bG8gZGUgbG9zIHNpZ3VpZW50ZXMgb2JqZXRvczogKipWZWN0b3IgZGUgTWVkaWFzIHgsIE1hdHJpeiBkZSBWYXJpYW56YXMtQ292YXJpYW56YXMgUyB5IE1hdHJpeiBkZSBDb3JyZWxhY2lvbmVzIFIuKioNCg0KIyMjIyB2ZWN0b3IgZGUgbWVkaWFzIHkgYm94cGxvdHMNCmBgYHtyfQ0KYXBwbHkoVW5pdmVyc2lkYWRfRGF0YXNldFssLWMoMSwyLDMsNCw1LDYsNyw4LDksMTApXSwgMiwgbWVhbikNCmBgYA0KDQpgYGB7cn0NClVuaXZlcnNpZGFkX0RhdGFzZXRfUmVkdWNpZG8gPSBVbml2ZXJzaWRhZF9EYXRhc2V0WywtYygxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxNCwxNiwxOCwyMCwyMiwyNCwyNiwyOCwyOSldDQpwYXIobWZyb3cgPSBjKDEsIG5jb2woVW5pdmVyc2lkYWRfRGF0YXNldF9SZWR1Y2lkbykpKQ0KaW52aXNpYmxlKGxhcHBseSgxOm5jb2woVW5pdmVyc2lkYWRfRGF0YXNldF9SZWR1Y2lkbyksIGZ1bmN0aW9uKGkpIGJveHBsb3QoVW5pdmVyc2lkYWRfRGF0YXNldF9SZWR1Y2lkb1ssIGldKSkpDQpgYGANCg0KDQoNCg0KIyMjIyBtYXRyaXogZGUgdmFyaWFuemFzLWNvdmFyaWFuemFzDQoNCmBgYHtyfQ0Kcm91bmQoY292KFVuaXZlcnNpZGFkX0RhdGFzZXRbLC1jKDEsMiwzLDQsNSw2LDcsOCw5LDEwKV0pLDIpDQpgYGANCg0KDQojIyMjIG1hdHJpeiBkZSBjb3JyZWxhY2lvbmVzDQoNCmBgYHtyfQ0Kcm91bmQoY29yKFVuaXZlcnNpZGFkX0RhdGFzZXRbLC1jKDEsMiwzLDQsNSw2LDcsOCw5LDEwKV0pLDIpDQpgYGANCg0KDQojIyAxLjQuR3LDoWZpY2FzIG11bHRpdmFyaWFkYXMNCkVuIGxhIGd1w61hIGRlIGNsYXNlIGRlICggQXJpc3RpesOhYmFsIFIuLCAyMDE3ICkgc2UgbWVuY2lvbmEgcXVlLCBlbiBnZW5lcmFsLCBsb3MgZ3LDoWZpY29zIG11bHRpdmFyaWFkb3MgY3VtcGxlbiBkb3Mgb2JqZXRpdm9zIGVzZW5jaWFsZXM6IHByaW1lcm8sIGF5dWRhbiBhIGNvbXBhcmFyIGVsIGNvbXBvcnRhbWllbnRvIGRlIHBvYmxhY2lvbmVzIGRlIGVzdHVkaW8gY29uIGJhc2UgZW4gdmFyaWFibGVzIGNhdGVnw7NyaWNhcyB5IHN1YXZpemFuIGxhIGNvbXByZW5zacOzbiBkZSBsYSBFc3RydWN0dXJhIGRlIGV2YWx1YWNpw7NuIGVudHJlIHZhcmlhcyB2YXJpYWJsZXMuIEVuIGVzdGUgc2VudGlkbywgZWwgY29uanVudG8gZGUgZGF0b3MgZGUgdHJhYmFqbyB0ZW5kcsOhIGFwb3lvIGRlc2NyaXB0aXZvIGdyw6FmaWNvIGEgdHJhdsOpcyBkZSB0cmVzIGRpYWdyYW1hczogdW5vIGNvbmp1bnRvIHF1ZSBpbnRlZ3JhIGRpc3BlcnNpw7NuLCBkaXN0cmlidWNpw7NuIHkgY29ycmVsYWNpb25lczsgb3RybyBiYXNhZG8gZW4gbGEgcmVuZGVyaXphY2nDs24gZGUgcG9sw61nb25vcywgeSBwb3Igw7psdGltbywgdW5vIHF1ZSByZWN1cnJlIGEgbGFzIGNhcmFzIGRlIENoZXJub2ZmLg0KDQojIyMgUGxhbnRlYW1pZW50byBkZWwgUHJvYmxlbWENCkNvbiBiYXNlIGVuIGVsIGNvbmp1bnRvIGRlIGRhdG9zIGRlc2NyaXRvIGVuIGxhIHNlY2Npw7NuIDIgc2UgY2FsY3VsYXLDoW4gZSBpbnRlcnByZXRhcsOhbiwgcGFyYSBsYXMgdmFyaWFibGVzIG51bcOpcmljYXMsIGxhcyBncsOhZmljYXMgbXVsdGl2YXJpYWRhcyBkZSBkaWFncmFtYSBkZSBjb3JyZWxhY2lvbmVzLCBtYXRyaXogZGUgZGlhZ3JhbWEgZGUgZGlzcGVyc2nDs24sIGRpYWdyYW1hIGRlIGVzdHJlbGxhcyB5IGNhcmFzIGRlIENoZXJub2ZmLiBTZSByZWN1ZXJkYSBxdWUgbGFzIHZhcmlhYmxlcyBudW3DqXJpY2FzIChlbiBlc2NhbGFkYSBkZSBtZWRpY2nDs24gZGUgcmF6w7NuKSBzb246IExhIHB1bnR1YWNpb24gZGUgQVIsIEVSLCBGU1IsIENQRiwgSUZSLCBJU1IsIElSTiB5IEdFUi4NCg0KIyMjIERlc2Fycm9sbG8gZGVsIEFuw6FsaXNpc3sudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNCkxhIG5hdmVnYWNpw7NuIGEgdHJhdsOpcyBkZSBsYXMgcGVzdGHDsWFzIG11ZXN0cmEgbGFzIGdyw6FmaWNhcyBtdWx0aXZhcmlhZGFzIGRlOiBEaWFncmFtYSBDb25qdW50byBkZSBEaXNwZXJzacOzbiwgRGlzdHJpYnVjacOzbiB5IENvcnJlbGFjaW9uZXMgKHNpbiBhZ3J1cGFjacOzbiBTQSB5IGNvbiBhZ3J1cGFjacOzbiBDQSAoY29uIGJhc2UgZW4gbGFzIHRyZXMgdmFyaWFibGVzIGNhdGVnw7NyaWNhczogIEFSLCBFUiwgRlNSLCBDUEYsIElGUiwgSVNSLCBJUk4sR0VSLCBPdmVyYWxsIFNjb3JlKSwgRGlhZ3JhbWEgZGUgRXN0cmVsbGFzIHkgQ2FyYXMgZGUgQ2hlcm5vZmYuDQpDb24gYmFzZSBlbiBsYSBwZXN0YcOxYSBEaWFncmFtYSBDb25qdW50byBkZSBEaXNwZXJzacOzbiwgRGlzdHJpYnVjacOzbiB5IENvcnJlbGFjaW9uZXMgIHNlIHB1ZWRlIGRlc2NyaWJpciBxdWUgbGFzIGNvcnJlbGFjaW9uZXMgbcOhcyBhbHRhcyAsIG1heW9yZXMgcXVlIDAuOSAsIHNlIGRhbiBlbnRyZSB2YXJpYWJsZXMgZXNwZXJhZGFzIGNvbW86IEFSLCBFUiwgRlNSLCBDUEYsIElGUixJU1IsSVJOLEdFUiB5IE92ZXJhbGwgU2NvcmUgLiBFc3RhcyB2YXJpYWJsZXMsIHNlZ8O6biBsYXMgZGVmaW5pY2lvbmVzIGRhZGFzIGVuIGxhIHNlY2Npw7NuIDIgZGUgZGVzY3JpcGNpw7NuIGRlIGRhdG9zLCBzb24gbnVjbGVhcmVzIGVuIGVsIGZlbsOzbWVubyBlc3R1ZGlhZG8sIHBvcnF1ZSBlc3TDoW4gaW52b2x1Y3JhZGFzIGNvbiBlbCBoaXN0b3JpYWwgZGUgcmVuZGltaWVudG8geSBkZXNlbXBlw7FvIGRlIGxhIHVuaXZlcnNpZGFkLCBzdSBwdW50YWplLCBwdW50dWFjacOzbiBkZSByZXB1dGFjacOzbihhY2Fkw6ltaWNhLGVtcGxlYWRvciB5IGVzdHVkaWFudGVzKSwgcmFuZ28gZGUgcmVwdXRhY2nDs24oYWNhZMOpbWljYSxlbXBsZWFkb3IgeSBlc3R1ZGlhbnRlcyksIHB1bnR1YWxpemFjacOzbiBkZSBpbnRlcm5hbGljaW9uYWxpemFjaW9uLCBwdW50dWFjacOzbsKgdG90YWzCoC4NCg0KQ29uIGJhc2UgZW4gbGEgcGVzdGHDsWEgRGlhZ3JhbWEgZGUgRXN0cmVsbGFzIHNlIGludGVycHJldGEgcXVlIGhheSB1bmEgdmFyaWVkYWQgbm90b3JpYSBkZSB0w6lybWlub3MgZGUgZGVzZW1wZcOxb3MgYXNvY2lhZG9zIGNvbiBsYXMgdmFyaWFibGVzIG51bcOpcmljYXMgZXN0dWRpYWRhcywgaW5jbHVzbyBjb24gbGEgcXVlIG1pZGUgZWwgc3RhdHVzLiBQZXJvLCB0YW1iacOpbiBlcyBub3RvcmlhIGxhIHByZXNlbmNpYSBkZSBncnVwb3MgZGUgdW5pdmVyc2lkYWRlcyBjb24gZGVzZW1wZcOxb3MgYXByb3hpbWFkYW1lbnRlIGhvbW9nw6luZW9zIGVuIHRvZGFzIGxhcyB2YXJpYWJsZXMgZXN0dWRpYWRhcywgYXVucXVlIHN1cyBlc2NhbGFzIGRlIGRlc2VtcGXDsW8gdmFyw61hbi4NCkNvbXBsZW1lbnRhcmlhbWVudGUgYSBsb3MgZGlhZ3JhbWFzIGRlIGVzdHJlbGxhcywgbGEgcGVzdGHDsWEgQ2FyYXMgZGUgQ2hlcm5vZmYgbXVlc3RyYSBxdWUgbGEgdmFyaWVkYWQgZGUgbG9zIGRhdG9zIGVzIHNlbnNpYmxlIGRlIGVzdGFibGVjZXIuIFBvZGVtb3MgYXByZWNpYXIgZW4gbGFzIENhcmFzIGRlIENoZXJub2ZmIG7Dum1lcm8gOSwgMTAsIDEyLDE0LDE3LDE4LDE5LCBwdWVkZW4gY29uZm9ybWFyIHVuIHBhciBkZSBncnVwb3MgZGUgdW5pdmVyc2lkYWRlcyBxdWUgbXVlc3RyYW4gZGVzZW1wZcOxb3Mgc2lnbmlmaWNhdGl2b3MgZW4gbGFzIHZhcmlhYmxlcyBtZWRpZGFzLCB0ZW5pZW5kbyBlbiBjdWVudGEgcXVlIGVzdGFzIHNlIHBhcmVjZW4gcGVybyB0aWVuZW4gdW4gcG9yY2VudGFqZSBkZSB2YXJpYWJpbGlkYWQgZW4gc3UgY29sb3IsIGNhYmVsbG8sIG9qb3MsIGJvY2EgeSBuYXJpeiwgIHRlbmVtb3MgdGFtYmnDqW4gb3Ryb3MgZ3J1cG9zIG3DoXMgcGVxdWXDsW9zIGNvbmZvcm1hZG9zIHBvciA1LDggLDQgb3RybyBncnVwbyBjb25mb3JtYWRvIHBvciAxOCB5IDIyIGF1bnF1ZSBjb24gY2FtYmlvcyBkZSBlc2NhbGE7IGVzIGRlY2lyLCBsb3MgZGVsIHNlZ3VuZG8geSB0ZXJjZXIgZ3J1cG8gc2UgZGVzZW1wZcOxYW4gZGUgdW5hIG1hbmVyYSBkaWZlcmVudGUgcXVlIGxvcyBkZWwgcHJpbWVybyBjb25zaWRlcmFuZG8gdG9kYXMgbGFzIHZhcmlhYmxlcyBlc3R1ZGlhZGFzLiBFc3RvIGNvbXBhZ2luYSBjb24gbG8gbW9zdHJhZG8gZW4gZWwgRGlhZ3JhbWEgZGUgRXN0cmVsbGFzLg0KUG9yIMO6bHRpbW8sIGVzIHJlbGV2YW50ZSBtZW5jaW9uYXIgcXVlIGxhcyBldmlkZW5jaWFzIGRlc2NyaXB0aXZhcyBleHB1ZXN0YXMgZW4gZXN0ZSBhcGFydGFkbyBlc3TDqW4gZW4gY29udHJhIGRlIGNvbnNpZGVyYXIgcXVlIGVsIGNvbmp1bnRvIGRlIGRhdG9zIGxpbWl0YWRvIGEgbGFzIHZhcmlhYmxlcyBudW3DqXJpY2FzIHRlbmdhIHVuYSBkaXN0cmlidWNpw7NuIG5vcm1hbCBtdWx0aXZhcmlhZGEuIEVzdG8gc2UgZXN0dWRpYSBlbsKgbGHCoHNlY2Npw7NuwqA1Lg0KDQojIyMjIGRpYWdyYW1hIGRlIGNvbmp1bnRvIGRlIGRpc3BlcnNpw7NuLCBjb3JyZWxhY2nDs24NCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KYGBgDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpnZ3BhaXJzKFVuaXZlcnNpZGFkX0RhdGFzZXRbLC1jKDEsMiwzLDQsNSw2LDcsOCw5LDEwLDEyLDE0LDE2LDE4LDIwLDIyLDI0LDI2LDI4KV0pDQpgYGANCg0KIyMjIyBkaWFncmFtYSBkZSBjb25qdW50byBkZSBkaXNwZXJzacOzbiwgY29ycmVsYWNpw7NuDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCg0KYGBgDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpVbml2ZXJzaWRhZF9EYXRhc2V0JHN0YXR1cyA8LSBmYWN0b3IoVW5pdmVyc2lkYWRfRGF0YXNldCRzdGF0dXMpDQpnZ3BhaXJzKFVuaXZlcnNpZGFkX0RhdGFzZXQsIA0KICAgICAgICBjb2x1bW5zID0gYygxMSwgMTMsIDE1LCAxNywgMTksIDIxLCAyMywgMjUsIDI3LCAyOSksIA0KICAgICAgICBhZXMoY29sb3IgPSBzdGF0dXMpLCANCiAgICAgICAgYWxwaGEgPSAwLjUsIA0KICAgICAgICB1cHBlciA9IGxpc3QoY29udGludW91cyA9IHdyYXAoImNvciIsIHNpemUgPSAyLjUpKSkNCg0KDQpgYGANCg0KIyMjIyBEaWFncmFtYSBkZSBlc3RyZWxsYXMNCg0KYGBge3J9DQpzZXQuc2VlZCg3ODA3MjgpDQpVbml2ZXJzaWRhZF9EYXRhc2V0X1JlZHVjaWRvID0gVW5pdmVyc2lkYWRfRGF0YXNldFtzYW1wbGUoMTpucm93KFVuaXZlcnNpZGFkX0RhdGFzZXQpLDIzKSwtYygxLDIsMyw0LDUsNiw3LDgsOSwxMCldDQpzdGFycyhVbml2ZXJzaWRhZF9EYXRhc2V0X1JlZHVjaWRvLCBsZW4gPSAxLCBjZXggPSAwLjQsIGtleS5sb2MgPSBjKDEwLCAyKSwgZHJhdy5zZWdtZW50cyA9IFRSVUUpDQpgYGANCg0KIyMjIyBDYXJhcyBkZSBjaGVybm9mZg0KDQpgYGB7ciBjYXJhc19kZV9DaGVybm9mZiwgZmlnLmFsaWduID0gJ2NlbnRlcid9DQpzZXQuc2VlZCg3ODA3MjgpDQpVbml2ZXJzaWRhZF9EYXRhc2V0X1JlZHVjaWRvID0gVW5pdmVyc2lkYWRfRGF0YXNldCBbc2FtcGxlKDE6bnJvdyhVbml2ZXJzaWRhZF9EYXRhc2V0KSwyMyksLWMoMSwyLDMsNCw1LDYsNyw4LDksMTApXQ0KZmFjZXMoVW5pdmVyc2lkYWRfRGF0YXNldF9SZWR1Y2lkbykNCmBgYA0KDQojIyAxLjUuTm9ybWFsaWRhZCBtdWx0aXZhcmlhZGENCkNvbW8gbWVuY2lvbmEgKFBvcnJhcyBDLiwgMjAxNikgcGFyYSBpbmRhZ2FyIG8gZXN0YWJsZWNlciBlbCB0aXBvIGRlIGRpc3RyaWJ1Y2nDs24gbXVsdGl2YXJpYWRhIGRlIHVuIGNvbmp1bnRvIGRlIGRhdG9zIHNlIHB1ZWRlIHJlY3VycmlyIGEgcHJvY2VkaW1pZW50b3MgZGVzY3JpcHRpdm9zLCBjb21vIGxvcyBncsOhZmljb3MsIG8gYSBwcm9jZWRpbWllbnRvcyBpbmZlcmVuY2lhbGVzLCBjb21vIGxhcyBwcnVlYmFzIGVzdGFkw61zdGljYXMuIEVuIGVzdGUgc2VudGlkbywgc2UgYWxjYW56YSBnZW5lcmFsaXphY2nDs24gZGUgcmVzdWx0YWRvcyBhbCB1c2FyIGxhcyBlc3RvcyDDumx0aW1vcywgc2kgYmllbiBsb3MgcHJpbWVyb3MgYXBveWFuIGEgbGFzIGludGVycHJldGFjaW9uZXMuDQoNCkVuIGVzdGUgYXBhcnRhZG8gc2UgY29udGVtcGxhIGVsIHVzbyBkZSBwcm9jZWRpbWllbnRvcyBpbmZlcmVuY2lhbGVzIHBhcmEgZGV0ZXJtaW5hciBzaSBlbCBjb25qdW50byBkZSBkYXRvcyBkZSB0cmFiYWpvLCBlbiByZWxhY2nDs24gY29uIHN1cyB2YXJpYWJsZXMgbnVtw6lyaWNhcywgc2UgZGlzdHJpYnV5ZSBub3JtYWwgbXVsdGl2YXJpYWRvIChETk0pLiBMYXMgcHJ1ZWJhcyBkZSBub3JtYWxpZGFkIG11bHRpdmFyaWFkYSAoUE5NKSBhIGxhcyBxdWUgc2Vyw6Egc29tZXRpZG8gc29uOiBNYXJkaWEsIEhlbnplLVppcmtsZXIsIERvb3JuaWstSGFuc2VuIHkgUm95c3Rvbi4gUGFyYSBlc3RhcyBwcnVlYmFzIGRlIG5vcm1hbGlkYWQgbG9zIHRlc3Qgb2JlZGVjZW4gYSB1biBuaXZlbCBkZSBzaWduaWZpY2FuY2lhICoqzrE9MC4wNSoqDQogeSBhIGxhcyBoaXDDs3Rlc2lzOiAgIA0KIA0KICoqX0gwXzpMYXMgdmFyaWFibGVzIHRpZW5lbiB1bmEgRE5NKioNCg0KKipfSDFfOkxhcyB2YXJpYWJsZXMgTk8gdGllbmVuIHVuYSBETk0qKg0KIA0KIExhIHBydWViYSBkZSBNYXJkaWEgc2UgYmFzYSBlbiBleHRlbnNpb25lcyBkZSBhc2ltZXRyw61hIHkgY3VydG9zaXMsIGVsIGN1YWRyYWRvIGRlIGxhIGRpc3RhbmNpYSBkZSBNYWhhbGFub2JpcywgbGEgY2FudGlkYWQgZGUgdmFyaWFibGVzICoqcCoqDQogcG9yIHRyYXRhciB5IGxhIGNhbnRpZGFkIGRlIHJlZ2lzdHJvcyAqKm4qKi4gQWRlbcOhcywgY29uc2lkZXJhIHF1ZSBsYSBwcnVlYmEgZXN0YWTDrXN0aWNhIHBhcmEgbGEgYXNpbWV0csOtYSB0aWVuZSB1bmEgZGlzdHJpYnVjacOzbiAqKs+HMioqDQogeSBsYSBwcnVlYmEgZXN0YWTDrXN0aWNhIHBhcmEgbGEgY3VydG9zaXMgc2UgZGlzdGlyYnV5ZSBhcHJveGltYWRhbWVudGUgbm9ybWFsLiBMb3MgZGV0YWxsZXMgc29icmUgbG9zIHBhcsOhbWV0cm9zIGRlIGxhcyBkaXN0cmlidWNpb25lcyBwdWVkZW4gY29uc3VsdGFyc2UgZW4gZWwgdHJhYmFqbyBkZSAoUG9ycmFzIEMuLCAyMDE2KS4NCg0KTGEgcHJ1ZWJhIGRlIEhlbnplLVppcmtsZXIgc2UgYmFzYSBlbiBsYSBkaXN0YW5jaWEgZnVuY2lvbmFsLCBkYWRvIHF1ZSBzaSBlbCBjb25qdW50byBkZSBkYXRvcyBwcmVzZW50YSB1bmEgZGlzdHJpYnVjacOzbiBub3JtYWwgbXVsdGl2YXJpYWRhLCBlbCBlc3RhZMOtc3RpY28gZGUgbGEgcHJ1ZWJhIHNlIGRpc3RyaWJ1eWUgYXByb3hpbWFkYW1lbnRlIGNvbW8gdW5hIGxvZ25vcm1hbCwgY3V5b3MgcGFyw6FtZXRyb3MgZGUgbWVkaWEgKirOvCoqDQogeSB2YXJpYW56YSAqKs+DMioqDQogcHVlZGVuIHNlciBjb25zdWx0YWRvcyBlbiAoUG9ycmFzIEMuLCAyMDE2KS4NCg0KTGEgcHJ1ZWJhIGRlIERvb3JuaWstSGFuc2VuIGVzdMOhIGJhc2FkYSBlbiBsYSBhc2ltZXRyw61hIHkgbGEgY3VydG9zaXMgZGUgdW4gY29uanVudG8gZGUgZGF0b3MgbXVsdGl2YXJpYWRvcywgcXVlIHNlIHRyYW5zZm9ybWEgcGFyYSBnYXJhbnRpemFyIGxhIGluZGVwZW5kZW5jaWEuIEVzIGNvbnNpZGVyYWRhIG3DoXMgcG90ZW50ZSBxdWUgbGEgcHJ1ZWJhIGRlIFNoYXBpcm8tV2lsayBwYXJhIGNhc29zIG11bHRpdmFyaWFkb3MuIFN1IGVzdGFkw61zdGljbyBkZSBwcnVlYmEgZXN0w6EgZGVmaW5pZG8gY29tbyBsYSBzdW1hIGRlIGxhcyB0cmFuc2Zvcm1hY2lvbmVzIGFsIGN1YWRyYWRvIGRlIGxhIGFzaW1ldHLDrWEgeSBsYSBjdXJ0b3NpcywgeSBzaWd1ZSwgYXByb3hpbWFkYW1lbnRlLCB1bmEgZGlzdHJpYnVjacOzbiAqKs+HMioqDQouIExvcyBkZXRhbGxlcyBkZSBsYSBwcnVlYmEgcHVlZGVuIHNlciBjb25zdWx0YWRvcyBlbiAoRG9vcm5payAmIEhhbnNlbiwgMjAwOCkuDQoNCkxhIHBydWViYSBkZSBSb3lzdG9uIHJlY3VycmUgYSBsYXMgcHJ1ZWJhcyBTaGFwaXJvLVdpbGsgbyBTaGFwaXJvLUZyYW5jaWEgcGFyYSBwcm9iYXIgbGEgbm9ybWFsaWRhZCBtdWx0aXZhcmlhZGEuIEFzw60sIHNpIGxhIGN1cnRvc2lzIGVzIG1heW9yIHF1ZSAzLCBsYSBwcnVlYmEgZGUgUm95c3RvbiB1c2EgU2hhcGlyby1GcmFuY2lhIHBhcmEgZGlzdHJpYnVjaW9uZXMgbGVwdG9jdXJ0aWNhcy4gTWllbnRyYXMgcXVlIHBhcmEgZGlzdHJpYnVjaW9uZXMgcGxhdGljdXJ0aWNhcyB1c2EgU2hhcGlyby1XaWxrLiBFbiBlbGxhIGxvcyBwYXLDoW1ldHJvcyBzb24gb2J0ZW5pZG9zIHBvciBhcHJveGltYWNpb25lcyBwb2xpbm9taWFsZXMsIGVzdG8gcHVlZGUgc2VyIGNvbnN1bHRhZG8gZW4gKFBvcnJhcyBDLiwgMjAxNikNCg0KIyMjIFBsYW50ZWFtaWVudG8gZGVsIHByb2JsZW1hDQoNCkNvbiBiYXNlIGVuIGVsIGNvbmp1bnRvIGRlIGRhdG9zIGRlc2NyaXRvIGVuIGxhIHNlY2Npw7NuIDIgc2UgaGFyw6EgdW5hIHBydWViYSBlc3RhZMOtc3RpY2EgZGUgbm9ybWFsaWRhZCBtdWx0aXZhcmlhZGEsIGNvbiB1biBuaXZlbCBkZSBzaWduaWZpY2FuY2lhIM6xPTAuMDUsIHBhcmEgZXN0YWJsZWNlciBzaSBzdXMgZGF0b3MgbcOpdHJpY29zIHByb3ZpZW5lbiBkZSB1bmEgcG9ibGFjacOzbiBub3JtYWwgbXVsdGl2YXJpYWRhLiBTZSByZWN1ZXJkYSBxdWUgbGFzIHZhcmlhYmxlcyBudW3DqXJpY2FzIGRlbCBjb25qdW50byBkZSBkYXRvcyAoZW4gZXNjYWxhZGEgZGUgbWVkaWNpw7NuIGRlIHJhesOzbikgc29uOiAqKkFSLCBFUiwgRlNSLCBDUEYsIElGUiwgSVNSLCBJUk4geSBHRVIuKioNCg0KIyMjIERlc2Fycm9sbG8gZGVsIGFuw6FsaXNpcyB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KDQpMYSBuYXZlZ2FjacOzbiBhIHRyYXbDqXMgZGUgbGFzIHBlc3Rhw7FhcyBtdWVzdHJhIHF1ZSBlbCBjb25qdW50byBkZSBkYXRvcywgZW4gcmVsYWNpw7NuIGNvbiBzdXMgdmFyaWFibGVzIG51bcOpcmljYXMsIG5vIHNlIGRpc3RyaWJ1eWUgbm9ybWFsIG11bHRpdmFyaWFkby4gRW4gcGFydGljdWxhcjoNCg0KTGEgKipQTk0gZGUgTWFyZGlhKiogZXN0YWJsZWNlIHF1ZSBzaSBhbWJhcyBwcnVlYmFzIChwYXJhIGFzaW1ldHLDrWEgeSBjdXJ0b3NpcykgaW5kaWNhbiB1bmEgbm9ybWFsaWRhZCBtdWx0aXZhcmlhbnRlLCBsb3MgZGF0b3Mgc2lndWVuIHVuYSBETk0gY29uIHVuIG5pdmVsIGRlIHNpZ25pZmljYW5jaWEgJFxhbHBoYT0wLjA1JDsgc2luIGVtYmFyZ28sIGVsIGNhc28gdHJhdGFkbyBlcyBjb250cmFyaW8gYSBlc3RvLiBPYnPDqXJ2ZXNlIGEgdHJhdsOpcyBkZSBsYSBwZXN0YcOxYSAqKlBOTSBNYXJkaWEqKiBxdWUgbG9zICRwLXZhbHVlJCBwYXJhIGxhIGFzaW1ldHLDrWEgKFNrZXduZXNzKSB5IGN1cnRvcmlzIChLdXJ0b3Npcykgc29uIG1heW9yZXMgcXVlIGVsIG5pdmVsIGRlIHNpZ25pZmljYW5jaWEuIFBvciBsbyB0YW50bywgbGFzIGV2aWRlbmNpYXMgbm8gYXBveWFuIHVuYSBoaXDDs3Rlc2lzIGRlIG5vcm1hbGlkYWQgbXVsdGl2YXJpYWRhIHBhcmEgZWwgY29uanVudG8gZGUgZGF0b3MgcmVzdHJpbmdpZG8gYSBzdXMgdmFyaWFibGVzIG51bcOpcmljYXMuDQoNCkxhICoqUE5NIGRlIFBOTSBIZW56ZS1aaXJrbGVyKiogZXN0YWJsZWNlIHF1ZSBlbCBlc3RhZMOtc3RpY28gZGUgcHJ1ZWJhIG5vIHNlIGRpc3RyaWJ1eWUgYXByb3hpbWFkYW1lbnRlIGNvbW8gbG8gbm9ybWFsIGRhZG8gcXVlIHN1ICRwLXZhbHVlJCBlcyBtZW5vciBxdWUgZWwgbml2ZWwgZGUgc2lnbmlmaWNhbmNpYSAkXGFscGhhPTAuMDUkLCBvYnPDqXJ2ZXNlIGVzdG8gYSB0cmF2w6lzIGRlIGxhIHBlc3Rhw7FhICoqUE5NIEhlbnplLVppcmtsZXIqKi4gQXPDrSwgcG9yIGNvbnRyYXJyZWPDrXByb2NvIGRlIGxhIGltcGxpY2FjacOzbiBmb3JtdWxhZGEgZW4gbGEgZGVzY3JpcGNpw7NuIGRlIGxhIHBydWViYSBlbiBsYSBbc2VjY2nDs24gNV0oI3NlYzUpLCBlbCBjb25qdW50byBkZSBkYXRvcyBubyBlc3TDoSBhcG95YWRvIHBvciBsYXMgZXZpZGVuY2lhcyBwYXJhIHNlZ3VpciB1bmEgZGlzdHJpYnVjacOzbiBub3JtYWwgbXVsdGl2YXJpYWRhLg0KDQpMYSAqKlBOTSBkZSBEb29ybmlrLUhhbnNlbioqIGVzdGFibGVjZSBxdWUgc3UgZXN0YWTDrXN0aWNvIGRlIHBydWViYSBubyBzaWd1ZSB1bmEgZGlzdHJpYnVjacOzbiBhcHJveGltYWRhbWVudGUgJFxjaGleMiQgZGFkbyBxdWUgc3UgJHAtdmFsdWUkIGVzIG1lbm9yIHF1ZSBlbCBuaXZlbCBkZSBzaWduaWZpY2FuY2lhICRcYWxwaGE9MC4wNSQsIG9ic8OpcnZlc2UgZXN0byBhIHRyYXbDqXMgZGUgbGEgcGVzdGHDsWEgKipQTk0gRG9vcm5pay1IYW5zZW4qKi4gUG9yIGxvIHRhbnRvLCBsYXMgZXZpZGVuY2lhcyBlc3TDoW4gbGVqb3MgZGUgYXBveWFyIHF1ZSBlbCBjb25qdW50byBkZSBkYXRvcyBzaWd1ZSB1bmEgRE5NLg0KDQpMYSAqKlBOTSBkZSBSb3lzdG9uKiogZXN0YWJsZWNlIHF1ZSBlbCBjb25qdW50byBkZSBkYXRvcyByZWR1Y2lkbyBhIHN1cyB2YXJpYWJsZXMgbnVtw6lyaWNhcyBubyBzaWd1ZSB1bmEgRE5NLCBkYWRvIHF1ZSBzdSAkcC12YWx1ZSQgZXMgbWVub3IgcXVlIGVsIG5pdmVsIGRlIHNpZ25pZmljYW5jaWEgJFxhbHBoYT0wLjA1JC4gT2Jzw6lydmVzZSBlc3RvIGEgdHJhdsOpcyBkZSBsYSBwZXN0YcOxYSAqKlBOTSBSb3lzdG9uKiouDQoNCkVuIGdlbmVyYWwsIHB1ZG8gY29uc3RhdGFyc2UgcXVlIHBhcmEgdW4gbml2ZWwgZGUgc2lnbmlmaWNhbmNpYSAkXGFscGhhPTAuMDUkIGVsIGNvbmp1bnRvIGRlIGRhdG9zIHJlZHVjaWRvIGEgc3VzIHZhcmlhYmxlcyBudW3DqXJpY2FzIG5vIHNpZ3VlIHVuYSBkaXN0cmlidWNpw7NuIG5vcm1hbCBtdWx0aXZhcmlhZGEuDQoNCiMjIyMgUE5NIE1hcmRpYQ0KYGBge3IgUE5NX01hcmRpYSwgZmlnLmFsaWduID0gJ2NlbnRlcid9DQptdm4oVW5pdmVyc2lkYWRfRGF0YXNldFssLWMoMSwyLDMsNCw1LDYsNyw4LDksMTAsMTIsMTQsMTYsMTgsMjAsMjIsMjQsMjYsMjgpXSwgbXZuVGVzdD0ibWFyZGlhIikNCmBgYA0KDQojIyMjIFBOTSBIZW56ZS1aaXJrbGVyDQpgYGB7ciBQTk1fSGVuemVfWmlya2xlciwgZmlnLmFsaWduID0gJ2NlbnRlcid9DQptdm4oVW5pdmVyc2lkYWRfRGF0YXNldFssLWMoMSwyLDMsNCw1LDYsNyw4LDksMTAsMTIsMTQsMTYsMTgsMjAsMjIsMjQsMjYsMjgpXSwgbXZuVGVzdD0iaHoiKQ0KYGBgDQoNCiMjIyMgUE5NIERvb3JuaWstSGFuc2VuDQpgYGB7ciBQTk1fRG9vcm5pa19IYW5zZW4sIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0KbXZuKFVuaXZlcnNpZGFkX0RhdGFzZXRbLC1jKDEsMiwzLDQsNSw2LDcsOCw5LDEwLDEyLDE0LDE2LDE4LDIwLDIyLDI0LDI2LDI4KV0sIG12blRlc3Q9ImRoIikNCmBgYA0KDQojIyMjIFBOTSBSb3lzdG9uDQpgYGB7ciBQTk1fUm95c3RvbiwgZmlnLmFsaWduID0gJ2NlbnRlcid9DQptdm4oVW5pdmVyc2lkYWRfRGF0YXNldFssLWMoMSwyLDMsNCw1LDYsNyw4LDksMTAsMTIsMTQsMTYsMTgsMjAsMjIsMjQsMjYsMjgpXSwgbXZuVGVzdD0icm95c3RvbiIpDQpgYGANCg0KDQojIEZhc2UgMiBbQ29tcG9uZW50ZXMgUHJpbmNpcGFsZXNdDQoNCiMjIyAyLjEuIE9iamV0aXZvcw0KDQpFbiB0w6lybWlub3MgZ2VuZXJhbGVzLCBlc3RhIHNlZ3VuZGEgZXRhcGEgZGUgZXN0dWRpbyBtb3N0cmFyw6EgY8OhbGN1bG9zLCB2aXN1YWxpemFjaW9uZXMgZSBpbnRlcnByZXRhY2lvbmVzIGNvbiBiYXNlIGVuIGVsIGNvbmp1bnRvIGRlIGRhdG9zIHRyYXRhZG8gZW4gbGEgZmFzZSBbMV0oI3NlYzEpLCBwZXJvIGFob3JhIGRlc2RlIHVuIGVuZm9xdWUgZGUgYW7DoWxpc2lzIGRlIGNvbXBvbmVudGVzIHByaW5jaXBhbGVzIHNvYnJlIGxhcyB2YXJpYWJsZXMgY3VhbnRpdGF0aXZhcywgcXVlIGluY2x1aXLDoTogc2VsZWNjacOzbiwgY2FsaWRhZCBkZSByZXByZXNlbnRhY2nDs24sIGNvbnRyaWJ1Y2lvbmVzIGUgaW50ZXJwcmV0YWNpw7NuLg0KDQpSZWN1w6lyZGVzZSBxdWUgZWwgY29uanVudG8gZGUgZGF0b3MgZGUgdHJhYmFqbyBlcyBkZXNjcml0byBlbiBsYSBbc2VjY2nDs24gMl0oI3NlYzIpIHkgbG9zIHJlZmVyZW50ZXMgdGXDs3JpY29zIGVuIGxhIFtzZWNjacOzbiAxXSgjc2VjMSkuDQoNClBvciDDumx0aW1vLCBlc3RlIHRyYWJham8gZnVlIHByb2Nlc2FkbyBjb24gYHIgUi52ZXJzaW9uLnN0cmluZ2AgbWVkaWFkbyBwb3IgUlN0dWRpbyBlbiB1bmEgcGxhdGFmb3JtYSB4ODZfNjQtdzY0LW1pbmd3MzIuIEFkZW3DoXMsIHBvciBzdSBuYXR1cmFsZXphIGRlIHB1YmxpY2FjacOzbiBlbiBsw61uZWEgeSBwYXJhIGN1bXBsaXIgY29uIGVsIHJlcXVpc2l0byB0ZW1wb3JhbCBkZSBlbnRyZWdhLCBzZXLDoSBhY3R1YWxpemFkbywgY29tbyBtw6F4aW1vLCBoYXN0YSBsYXMgMjI6MDBocnMgZGVsIHZpZXJuZXMgMjQgZGUgbWF5byBkZSAyMDI0Lg0KDQojIyMgMi4yLiBTZWxlY2Npw7NuIGRlIENvbXBvbmVudGVzDQoNCkNvbW8gZXMgbWVuY2lvbmFkbyBlbiBlbCB0cmFiYWpvIGRlIFtAQUVETURpYXotTW9yYWxlczFlZF0gZWwgQW7DoWxpc2lzIGRlIENvbXBvbmVudGVzIFByaW5jaXBhbGVzIChlbiBhZGVsYW50ZSBBQ1ApIHJlZXN0cnVjdHVyYSB1biBjb25qdW50byBkZSBkYXRvcyBtdWx0aXZhcmlhZG8gYSB0cmF2w6lzIGRlIGxhIHJlZHVjY2nDs24gZGUgbGEgY2FudGlkYWQgZGUgc3VzIHZhcmlhYmxlcywgZW4gY3V5byB0cmFuc2ZvbmRvIGVzIGlubmVjZXNhcmlvIGFzdW1pciBuaW5ndW5hIGRpc3RyaWJ1Y2nDs24gZGUgcHJvYmFiaWxpZGFkIGRlIGVsbGFzLiBFc3RhIHJlZHVjY2nDs24gZXMgbG9ncmFkYSBhIHRyYXbDqXMgZGUgY29tYmluYWNpb25lcyBsaW5lYWxlcyBkZSBsYXMgdmFyaWFibGVzIG9yaWdpbmFsZXMsIHF1ZSBkZWJlcsOhbiBjb250ZW5lciBsYSBtYXlvciB2YXJpYWJpbGlkYWQgcG9zaWJsZSBwcmVzZW50ZSBlbiBlbCBjb25qdW50byBkZSBkYXRvcy4gRW4gZXN0ZSBzZW50aWRvLCBlbCBBQ1AgbG9ncmEgY3JlYXIgbnVldmFzIHZhcmlhYmxlcywgY29ub2NpZGFzIGNvbW8gY29tcG9uZW50ZXMgcHJpbmNpcGFsZXMsIHF1ZSBwb3NlZW4gY2FyYWN0ZXLDrXN0aWNhcyBlc3RhZMOtc3RpY2FzIGRlIGluZGVwZW5kZW5jaWEgKGNvbiBiYXNlIGVuIGVsIHN1cHVlc3RvIGRlIG5vcm1hbGlkYWQpIHkgbm8gY29ycmVsYWNpw7NuLg0KDQpFbCBBQ1Agc2UgbG9ncmEgYSBsbyBsYXJnbyBkZSBsYXMgc2lndWllbnRlcyBmYXNlczogZ2VuZXJhY2nDs24gZGUgbnVldmFzIHZhcmlhYmxlcywgcmVkdWNjacOzbiBkaW1lbnNpb25hbCBkZWwgZXNwYWNpbyBkZSBsb3MgZGF0b3MsIGVsaW1pbmFjacOzbiBkZSB2YXJhaWJsZXMgZGUgcG9jbyBhcG9ydGUgZSBpbnRlcnByZXRhY2nDs24gZGUgbG9zIGNvbXBvbmVudGVzIHJlc3VsdGFudGVzIGVuIGVsIGNvbnRleHRvIGRlbCBwcm9ibGVtYSBkZWwgY3VhbCBzZSBvYnR1dmllcm9uIGxvcyBkYXRvcy4gRXN0YXMgZmFzZXMgc2UgZGVzYXJyb2xsYW4gZW50cmUgbGFzIHNlY2Npb25lcyBbN10oI3NlYzcpLCBbOF0oI3NlYzgpLCBbOV0oI3NlYzkpIHkgWzEwXSgjc2VjMTApLg0KDQojIyMgUGxhbnRlYW1pZW50byBkZWwgUHJvYmxlbWENCkNvbiBiYXNlIGVuIGxhcyB2YXJpYWJsZXMgY3VhbnRpdGF0aXZhcyBkZWwgY29uanVudG8gZGUgZGF0b3MgZGVzY3JpdG8gZW4gbGEgW3NlY2Npw7NuIDJdKCNzZWMyKSBzZSBkZW1hbmRhIHByaW1lcm8gZXN0YWJsZWNlciBlbCBwb3JjZW50YWplIGRlIHZhcmlhbnphIGV4cGxpY2FkbyBwb3IgY2FkYSBkaW1lbnNpw7NuIHVuYSB2ZXogcHJvY2VzYWRvIGVsIEFDUDsgeSBwb3N0ZXJpb3JtZW50ZSwgY29uIGJhc2UgZW4gZWwgYXV0b3ZhbG9yIG1lZGlvIG8gdXNhbmRvIHVuIGRpYWdyYW1hIGRlIHNlZGltZW50YWNpw7NuLCBkZWNpZGlyIGN1w6FudG9zIGNvbXBvbmVudGVzIHJldGVuZXIuIA0KDQojIyMgRGVzYXJyb2xsbyBkZWwgQW7DoWxpc2lzIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQpMYSBuYXZlZ2FjacOzbiBhIHRyYXbDqXMgZGUgbGFzIHBlc3Rhw7FhcyBtdWVzdHJhIHF1ZSBlbCBjb25qdW50byBkZSBkYXRvcywgZW4gcmVsYWNpw7NuIGNvbiBzdXMgdmFyaWFibGVzIG51bcOpcmljYXMsIHB1ZWRlIHNlciByZXByZXNlbnRhZG8gcG9yIHVuIGNvbmp1dG8gZGUgdmFyaWFibGVzIG3DoXMgcGVxdWXDsW8gcXVlIHJldGllbmUgZWwgJDU3LjA4JCAkXCUkIGRlIGxhIHZhcmlhYmlsaWRhZCBkZWwgY29uanVudG8uIEVuIHBhcnRpY3VsYXI6DQoNCkxhICoqTWF0cml6IEFDUCoqIG11ZXN0cmEgc2VpcyBkaW1lbnNpb25lcyBkb25kZSBzb2xvIGxhIHByaW1lcmEgcmV0aWVuZSBlbCAkNTcuMDgkICRcJSQsIGxhIHNpZ3VpZW50ZSBlbCAkMTEuNzMkICRcJSQgeSBsYXMgZGVtw6FzIHNvbG8gcG9yY2VudGFqZXMgY29uIHBhcnRlIGVudGVyYSBkZSB1bmEgY2lmcmEuIEVuIGVzdGUgc2VudGlkbywgbGEgcmVwcmVzZW50YXRpdmlkYWQgZGUgbGEgY29tYmluYWNpw7NuIGxpbmVhbCBxdWUgZGVmaW5lIGEgbGEgZGltZW5zacOzbiAxIGVzIHNpZ25pZmljYXRpdmFtZW50ZSBhbHRhIGVuIGNvbXBhcmFjacOzbiBjb24gbGFzIGRlbcOhcy4gQ29tbyBlc3RhIG1hdHJpeiBlcyBtdWRhIGVuIHJlbGFjacOzbiBjb24gbGFzIHZhcmlhYmxlcyBvcmlnaW5hbGVzIHNlIHNpZ3VlIGluZGFnYW5kbyBsYSBpZGVudGlmaWNhY2nDs24gZGUgbGFzIHZhcmlhYmxlcyBxdWUgbcOhcyBjb250cmlidXlhbiBhIGxhIGRpbWVuc2nDs24gZGUgdmFsb3IgcHJvcGlvIG3DoXMgYWx0by4NCg0KTGEgKipNYXRyaXogZGUgQ29ycmVsYWNpb25lcyoqIHBlcm1pdGUgY29udGludWFyIGNvbiBsYXMgZGVzY3JpcGNpb25lcyBkZSBsYXMgY29tYmluYWNpb25lcyBsaW5lYWxlcyBxdWUgY29uZm9ybWFuIGEgbGEgZGltZW5zacOzbiBkZSBtYXlvciBpbnRlcsOpczogbGEgZGltZW5zacOzbiAxLiBBc8OtLCBlc3RhIG1hdHJpeiwgY29tbyBzZSBtb3N0csOzIGVuIGxhIFtzZWNjacOzbiAzLjIuXSgjc2VjM18yKSwgIGF5dWRhIGEgdmVyaWZpY2FyIHF1ZSBsYSBpbnRlbnNpZGFkIGRlIGxhcyBjb3JlbGFjaW9uZXMgZXMgbcOhcyBhbHRhIHkgc2llbXByZSBwb3NpdGl2YSBlbnRyZSBsYXMgdmFyaWFibGVzOiBhciBzY29yZSwgZXIgc2NvcmUsIGZzciBzY29yZSwgZ2VyIHNjb3JlIHkgb3ZlcmFsbCBzY29yZSwgYXN1bnRvIGVzcGVyYWRvIGVuIHJlbGFjacOzbiBjb24gZWwgZmVuw7NtZW5vIGVzdHVkaWFkbywgcG9yIGxvIHRhbnRvLCBzZSBwb2Ryw61hIGVzcGVyYXIgcXVlIGVzdGFzIHZhcmlhYmxlcyBwYXJ0aWNpcGFyYW4gZW4gbGEgY29tYmluYWNpw7NuIGxpbmVhbCBxdWUgZGVmaW5lIGEgbGEgZGltZW5zacOzbiAxLg0KDQpMYSBwZXN0YcOxYSBkZSAqKlZhbG9yZXMgeSBWZWN0b3JlcyBQcm9waW9zKiogbXVlc3RyYSBlc3RvcyBvYmpldG9zIGNhbGN1bGFkb3MgYSBwYXJ0aXIgZGUgbGEgbWF0cml6IGRlIGNvcnJlbGFjaW9uZXMgZGVsIGNvbmp1bnRvIGRlIGRhdG9zLiBFbiBlc3RlIHNlbnRpZG8sIHNlIGdhcmFudGl6YSBxdWUgbGEgc3VtYSBkZSBsb3MgdmFsb3JlcyBwcm9waW9zIHNlYSBpZ3VhbCBhIGxhIGRpbWVuc2nDs24gZGUgZGljaGEgbWF0cml6IHkgYSBsYSB2YXJpYWJpbGlkYWQgdG90YWwgZGVsIGNvbmp1bnRvLCBwb3IgbG8gY3VhbCBsYXMgcHJvcG9yY2lvbmVzIGRlIHJldGVuY2nDs24gZGUgdmFyaWFiaWxpZGFkIHNvbiBkZSBjw6FsY3VsbyBpbm1lZGlhdG8uIEFkZW3DoXMsIGxhIG1hdHJpeiBkZSB2ZWN0b3JlcyBwcm9waW9zIGRlZmluZSBwYXJhIGNhZGEgY29tcG9uZW50ZSwgZW4gcmVsYWNpw7NuIGNvbiBjYWRhIHZhcmlhYmxlIGRlbCBjb25qdW50byBkZSBkYXRvcywgbG9zIGNvZWZpY2llbnRlcyBkZSBsYSBjb21iaW5hY2nDs24gbGluZWFsIHF1ZSBsYSBjb25mb3JtYW4sIHBvciBlamVtcGxvLCBjb24gdW4gYWp1c3RlIGEgZG9zIGNpZnJhcyBkZWNpbWFsZXMsIGxhIGNvbXBvbmVudGUgMSBlc3RhcsOtYSByZXByZXNlbnRhZGEgcG9yIGxhIGNvbWJpbmFjacOzbiBsaW5lYWwgKGRvbmRlICRBJCBlcyBhciBzY29yZSwgJEUkIGVzIGVyLCAkRiQgZXMgZnNyIHNjb3JlLCAkQyQgZXMgY3BmLCAkSUYkIGVzIGlmciwgJElTJCBlcyBpc3IsICRJUiQgZXMgaXJuIHNjb3JlLCAkRyQgZXMgZ2VyIHkgJE8kIGVzIE92ZXJhbGwgc2NvcmUsIHkgYWRlbWFzLCBzb24gdmFyaWFibGVzIGVzdGFuZGFyaXphZGFzKTokJENvbXBvbmVudGVfMSA9IDAuNDAqQSswLjM2KkUrMC4xOSpGKzAuMzEqQyswLjI4KklGKzAuMjcqSVMrMC4zMypJUiswLjM0KkcrMC40NCpPJCRIYXN0YSBlc3RlIHB1bnRvLCBzZSBwdWVkZSBvYnNlcnZhciBxdWUgc2UgZGlzcG9uZSBkZSB1biBuw7ptZXJvIGRlIGRpbWVuc2lvbmVzIG1lbm9yIGFsIG7Dum1lcm8gZGUgdmFyaWFibGVzIHRyYXRhZGFzLCBjb24gbGEgc2FsdmVkYWQgcXVlIGxhcyB2YXJpYWJsZXMgbnVldmFzIHNvbiBpbmNvcnJlbGFkYXMgZW50cmUgc8OtLCB2ZXIgbGEgcGVzdGHDsWEgKipDb3JyZWxhY2lvbmVzIENvbXBhcmFkYXMqKi4NCg0KUG9yIMO6bHRpbW8sIGVsICoqR3LDoWZpY28gZGUgQ2F0dGVsbCoqIHkgZWwgKipHcsOhZmljbyBkZSBDYXR0ZWxsLUthaXNlcioqLCBkZSBjb2RvIHkgc2VkaW1lbnRhY2nDs24sIGluZHVjZW4gYSBsYSBlbGVjY2nDs24gZGUgdW5hIGNvbXBvbmVudGUgZW4gbGEgcmVkdWNjacOzbiBkZSBkaW1lbnNpw7NuIHF1ZSByZXRpZW5lIGxhIGNhbnRpZGFkIGRlIHZhcmlhYmlsaWRhZCBzdWZpY2llbnRlIHBhcmEgdHJhdGFyIGVsIHByb2JsZW1hLiBTaW4gZW1iYXJnbywgZGViZSByZXNhbHRhcnNlIHF1ZSBzZSBwcm9wb25lIGVsZWdpciBjb24gYmFzZSBlbiBjcml0ZXJpb3MgbcOhcyB1c2Fkb3MsIGEgY2FtYmlvIGRlIGNyaXRlcmlvcyBkZSBhY2VwdGFjacOzbiB1bml2ZXJzYWwuIEVsICoqR3LDoWZpY28gZGUgQ2F0dGVsbCoqIG11ZXN0cmEgcXVlIGxvcyBjYW1iaW9zIGVuIGxhIHBlbmRpZW50ZSBpbmRpY2FuIHF1ZSBsYSBjYXBhY2lkYWQgZXhwbGljYXRpdmEgZGUgbGEgZGltZW5zacOzbiAxIGVzIGRlbCAkNTYuMTAkICRcJSQsIGxhIGRpbWVuc2nDs24gMiBlcyBkZWwgJDEzLjAwJCAkXCUkIHkgbGEgZGltZW5zacOzbiAzIGVzIGRlbCAgJDEwLjA0JCAkXCUkLCByZXByZXNlbnRhbmRvIGVsICQ3OS41MCQgJFwlJCBzb2xvIGVzYXMgMyBkaW1lbnNpw7NuZXMuIEFzw60sIGVsIGRlICoqQ2F0dGVsbC1LYWlzZXIqKiBhbCBjb25qdWdhciBlbCBpbnN0cnVtZW50byBncsOhZmljbyBhbnRlcmlvciBjb24gZWwgY3JpdGVyaW8gZGUgS2Fpc2VyIGVuIGxhIG1pc21hIGdyw6FmaWNhIGFwb3lhIHF1ZSBsYSBjYW50aWRhZCBkZSBkaW1lbnNpb25lcyBzdWZpY2llbnRlcyBwb3IgcmV0ZW5lciBlcyAzLCBhY2xhcmFuZG8gcXVlIGVzdGEgZWxlY2Npw7NuIHJldGVuZ2EgdW4gcG9yY2VudGFqZSBkZSB2YXJpYWJpbGlkYWQgYWRlY3VhZG8gcGFyYSBlc3R1ZGlhciBlbCBwcm9ibGVtYS4NCg0KIyMjIyBNYXRyaXogQUNQDQpgYGB7ciBNYXRyaXpfQUNQLCBmaWcuYWxpZ24gPSAnY2VudGVyJ30NCmdldF9laWdlbnZhbHVlKFBDQShVbml2ZXJzaWRhZF9EYXRhc2V0WywtYygxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMiwxNCwxNiwxOCwyMCwyMiwyNCwyNiwyOCldLCBuY3AgPSA2LCBzY2FsZS51bml0ID0gVFJVRSwgZ3JhcGggPSBGKSkNCg0KYGBgDQoNCiMjIyMgTWF0cml6IGRlIENvcnJlbGFjaW9uZXMNCmBgYHtyIE1hdHJpel9kZV9Db3JyZWxhY2lvbmVzfQ0Kcm91bmQoY29yKFVuaXZlcnNpZGFkX0RhdGFzZXRbLC1jKDEsMiwzLDQsNSw2LDcsOCw5LDEwLDEyLDE0LDE2LDE4LDIwLDIyLDI0LDI2LDI4KV0pLDIpDQpgYGANCg0KIyMjIyBWYWxvcmVzIHkgVmVjdG9yZXMgUHJvcGlvcw0KYGBge3IgVmFsb3Jlc195X1ZlY3RvcmVzX1Byb3Bpb3MsIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0KcHJpbmNvbXAoVW5pdmVyc2lkYWRfRGF0YXNldFssLWMoMSwyLDMsNCw1LDYsNyw4LDksMTAsMTIsMTQsMTYsMTgsMjAsMjIsMjQsMjYsMjcsMjgpXSwgY29yID0gVFJVRSkkc2Rldl4yDQpwcmluY29tcChVbml2ZXJzaWRhZF9EYXRhc2V0WywtYygxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMiwxNCwxNiwxOCwyMCwyMiwyNCwyNiwyNywyOCldLCBjb3IgPSBUUlVFKSRsb2FkaW5nc1sgLDE6OV0NCmBgYA0KDQojIyMjIENvcnJlbGFjaW9uZXMgQ29tcGFyYWRhcw0KYGBge3IgQ29ycmVsYWNpb25lc19Db21wYXJhZGFzLCBmaWcuYWxpZ249J2NlbnRlcid9DQpsaWJyYXJ5KGNvcnJwbG90KQ0KbGlicmFyeShzdGF0cykNCg0KZGF0b3NfY29ycmVsYWNpb24gPSBVbml2ZXJzaWRhZF9EYXRhc2V0WywtYygxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMiwxNCwxNiwxOCwyMCwyMiwyNCwyNiwyNywyOCldDQptYXRyaXpfY29ycmVsYWNpb24gPSBjb3IoZGF0b3NfY29ycmVsYWNpb24pDQpwY2FfcmVzdWx0ID0gcHJpbmNvbXAoZGF0b3NfY29ycmVsYWNpb24sIGNvciA9IFRSVUUpDQptYXRyaXpfY29ycmVsYWNpb25fcGNhID0gY29yKHBjYV9yZXN1bHQkc2NvcmVzKQ0KDQpwYXIobWZyb3c9YygxLDIpKQ0KY29ycnBsb3Q6OmNvcnJwbG90KG1hdHJpel9jb3JyZWxhY2lvbiwgbWV0aG9kID0gImNvbG9yIiwgdHlwZSA9ICJ1cHBlciIsIG51bWJlci5jZXggPSAwLjQpDQpjb3JycGxvdDo6Y29ycnBsb3QobWF0cml6X2NvcnJlbGFjaW9uX3BjYSwgbWV0aG9kID0gImNvbG9yIiwgdHlwZSA9ICJ1cHBlciIsIG51bWJlci5jZXggPSAwLjQpDQoNCmBgYA0KDQojIyMjIEdyw6FmaWNvIGRlIENhdHRlbGwNCmBgYHtyIEdyYWZpY29fZGVfQ2F0dGVsbCwgZmlnLmFsaWduID0gJ2NlbnRlcid9DQpmdml6X2VpZyhQQ0EoVW5pdmVyc2lkYWRfRGF0YXNldFssLWMoMSwyLDMsNCw1LDYsNyw4LDksMTAsMTIsMTQsMTYsMTgsMjAsMjIsMjQsMjYsMjcsMjgpXSwgc2NhbGUudW5pdCA9IFQsIGdyYXBoID0gRiksIGFkZGxhYmVscyA9IFQsIHlsaW09YygwLDkwKSwgbWFpbiA9ICIiKQ0KYGBgDQoNCiMjIyMgR3LDoWZpY28gZGUgQ2F0dGVsbC1LYWlzZXINCmBgYHtyIEdyYWZpY29fZGVfQ2F0dGVsbF9LYWlzZXIsIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0Kc2NyZWUoVW5pdmVyc2lkYWRfRGF0YXNldFssLWMoMSwyLDMsNCw1LDYsNyw4LDksMTAsMTIsMTQsMTYsMTgsMjAsMjIsMjQsMjYsMjcsMjgpXSxmYWN0b3JzID0gRkFMU0UsIHBjID0gVFJVRSwgbWFpbiA9IiIpDQpgYGANCg0KIyMjIDIuMy4gQ2FsaWRhZCBkZSBSZXByZXNlbnRhY2nDs24NCg0KQWwgcmV0b21hciBlbCB0cmFiYWpvIGRlIChEw61heiBNb3JhbGVzICYgTW9yYWxlcyBSaXZlcmEsIDIwMTIpIHNlIHZlcmlmaWNhIHF1ZSwgdW5hIHZleiByZWR1Y2lkYSBsYSBkaW1lbnNpb25hbGlkYWQgZGVsIGNvbmp1bnRvIGRlIGRhdG9zIHkgZW50ZW5kaWRvIHF1ZSBzdXMgdmFyaWFibGVzIChlc3RhbmRhcml6YWRhcykgZXN0w6FuIHJlcHJlc2VudGFkYXMgZ3LDoWZpY2FtZW50ZSBwb3IgcHJveWVjY2lvbmVzIGRlIGxhIGhpcGVyZXNmZXJhIGRlIGNvcnJlbGFjaW9uZXMsIGVzIG5lY2VzYXJpbyBpbmljaWFyIGxhIGludGVycHJldGFjacOzbiBkZSBjb21wb25lbnRlcyBhIHBhcnRpciBkZSBkaWNoYXMgY29ycmVsYWNpb25lcywgcGFyYSBsdWVnbyBsYSBjYWxpZGFkIGRlIHN1cyByZXByZXNlbnRhY2lvbmVzIGRhZGEgbGEgcmVkdWNjacOzbiBkaW1lbnNpb25hbCBkZWwgY29uanVudG8gZGUgZGF0b3MgZW4gdMOpcm1pbm9zIGRlIHN1cyB2YXJpYWJsZXMuDQoNCiMjI1BsYW50ZWFtaWVudG8gZGVsIFByb2JsZW1hDQpDb24gYmFzZSBlbiBlbCBjb25qdW50byBkZSBkYXRvcyBkZXNjcml0byBlbiBsYSBzZWNjacOzbiAyIHNlIGRlbWFuZGEgZGV0ZXJtaW5hciBsYSBjYWxpZGFkIGRlIHJlcHJlc2VudGFjacOzbiBkZSBsYXMgdmFyaWFibGVzIGN1YW50aXRhdGl2YXMgcmVzcGVjdG8gYSBsYSBjYW50aWRhZCBkZSBkaW1lbnNpb25lcyBjYWxjdWxhZGFzIHF1ZSByZXRpZW5lbiBsYSBtYXlvciBjYW50aWRhZCBkZSB2YXJpYWJpbGlkYWQsIHZlciBsYSBzZWNjacOzbiA3Lg0KDQojIyNEZXNhcnJvbGxvIGRlbCBBbsOhbGlzaXMgey50YWJzZXQgLnRhYnNldC1waWxsc30NCkxhIG5hdmVnYWNpw7NuIGEgdHJhdsOpcyBkZSBsYXMgcGVzdGHDsWFzIG11ZXN0cmEgcXVlIGxhIHJlZHVjY2nDs24gZGUgbGEgZGltZW5zaW9uYWxpZGFkIGRlbCBjb25qdW50byBkZSBkYXRvcyBjb25kdWNlIGFuYWxpemFyIGxhcyBjYWxpZGFkZXMgZGUgcmVwcmVzZW50YWNpw7NuIGVuIHTDqXJtaW5vcyBkZSBsYSBlc2NhbGEgZGUgY29udHJpYnVjaW9uZXMgcmVsYXRpdmFzIGJhc2FkYSBlbiB1biBjb2NpZW50ZSBkZSBwcm95ZWNjaW9uZXMgY29uIHByb3BpZWRhZGVzIGFkaXRpdmFzIHkgZGUgcmVzcHVlc3RhIGVuIGVzY2FsYSBjb250aW51YSBlbnRyZSAwDQogeSAxDQouIEFzw60sIGVuIHBhcnRpY3VsYXI6DQoNCkVsIEPDrXJjdWxvIGRlIENvcnJlbGFjaW9uZXMgZXhwcmVzYSBxdWUgc2UgcHVlZGUgY29uY2ViaXIgdW5hIGNvbXBlbmVudGUgdGlwbyB0YW1hw7FvIGVuIGVsIHNlbnRpZG8gZGUgcXVlIGxhIGRpbWVuc2nDs24gMSBtdWVzdHJhIGVuIMOpbCB1bmEgY29ycmVsYWNpw7NuIHBvc2l0aXZhIGNvbiBsYXMgc2VpcyB2YXJpYWJsZXMgZGUgaW50ZXLDqXMsIGFkZW3DoXMgY2VyY2FuYXMgYSBsYSBmcm9udGVyYSBkZWwgY8OtcmN1bG8gdW5pdGFyaW8geSBzaWduaWZpY2F0aXZhbWVudGUgcHLDs3hpbWFzIGFsIGVqZSBxdWUgbGEgcmVwcmVzZW50YS4gUG9yIG90cm8gbGFkbywgbGEgZGltZW5zacOzbiAyIGNvbnRyYXBvbmUgYSBsYXMgdmFyaWFibGVzIGlmciBzY29yZSwgaXNyIHNjb3JlLCBjcGYgc2NvcmUgZSBpcm4gc2NvcmUgY29uIGxhcyBkZW3DoXMuIE90cm8gYXNwZWN0byBwb3IgcmVzYWx0YXIgZXMgbGEgY29ycmVsYWNpw7NuIG1vc3RyYWRhIGVudHJlIHBhcmVzIGRlIHZhcmlhYmxlcywgcXVlIGVuIHTDqXJtaW5vcyBkZWwgZmVuw7NtZW5vIGVzdHVkaWFkbyBjb25zZXJ2YW4gc3UgbmF0dXJhbGV6YSBjb3JyZWxhY2lvbmFsIGVzcGVyYWRhIGhhc3RhIGVzdGUgcHVudG8gZGVsIGFuw6FsaXNpcy4gVW4gZWplbXBsbyByZXNhbHRhYmxlIGVzIGVsIHBhciBpZnIgc2NvcmUgeSBpc3Igc2NvcmUgcXVlLCBlbiBjaWVydG8gc2VudGlkbywgZXN0w6FuIGluZmx1aWRhcyBwb3IgbGEgc3ViamV0aXZpZGFkLCB2w6lhc2UgbGEgc2VjY2nDs24gMi4NCg0KTGEgTWF0cml6IGRlIFJlcHJlc2VudGFjacOzbiwgcG9yIG90cm8gbGFkbywgbXVlc3RyYSB2YWxvcmVzIHNpZ25pZmljYXRpdmFtZW50ZSBjZXJjYW5vcyBhIDEgZGVsIGNvY2llbnRlIGRlIHByb3llY2Npb25lcyBjb3Nlbm8gY3VhZHJhZG8gZW4gcmVsYWNpw7NuIGNvbiBsYSBkaW1lbnNpw7NuIDEuIEVuIGVzdGUgc2VudGlkbywgbG9zIHB1bnRvcyBwcm95ZWN0YWRvcyBlc3TDoW4gYWx0YW1lbnRlIGFzb2NpYWRvcyBjb24gZXN0ZSBjb21wb25lbnRlLiBBc8OtLCBsYSBwZXN0YcOxYSBxdWUgbXVlc3RyYSBsYSBDYWxpZGFkIGRlIFJlcHJlc2VudGFjacOzbiBpbmRpY2EgZW4gc3UgZXNjYWxhIHVuIHBpc28gYWx0byBkZSAwLjQNCiBkZSBlc3RhIG1hbmVyYSBsYXMgY2FsaWRhZGVzIGRlIHJlcHJlc2VudGFjacOzbiwgZW4gcmVsYWNpw7NuIGNvbiBsYSBjb21wb25lbnRlIDEsIGVzdMOhbiBlbmNhYmV6YWRhcyBwb3IgT3ZlcmFsbCBzY29yZSB5IGNpZXJyYW4gY29uIGZzciBzY29yZS4NCg0KUG9yIMO6bHRpbW8sIGxhcyBDb29yZGVuYWRhcyBJbmRpdmlkdWFsZXMgYXl1ZGFuLCBhdW5xdWUgZGUgbWFuZXJhIG1lbm9zIGRpZ2VzdGl2YSwgYSBpZGVudGlmaWNhciBhIG5pdmVsIGRlIG9ic2VydmFjaW9uZXMgYSBsb3MgcGVyZmlsZXMgZGUgbG9zIHJlZ2lzdHJvcywgZW4gZXN0ZSBjYXNvIHVuaXZlcnNpZGFkZXMsIGVuIHJlbGFjacOzbiBjb24gbGFzLCBwb3IgbG8gbWVub3MsIGRpbWVuc2lvbmVzIG3DoXMgaW1wb3J0YW50ZXMgZGUgcmV0ZW5jacOzbiBkZSB2YXJpYWJpbGlkYWQ6IGxhcyBjb21wb25lbnRlcyAxIHkgMi4gUG9yIGVqZW1wbG8sIGFsIG9ic2VydmFyIGxvcyBwcmltZXJvcyA2IHJlZ2lzdHJvcyAxIGFsIDYsIHNlIG1hbmlmaWVzdGFuIHNlbWVqYW56YXMgcG9zaXRpdmFzLCBwb3Igb3RybyBsYWRvLCBlbiBsYSBkaW1lbnNpw7NuIDIsIHNlIGV2aWRlbmNpYSBxdWUgbG9zIHJlZ2lzdHJvcyAxNCwxOSwyMCB5IDIyIHNvbiBsb3MgdW5pY29zIHJlZ2lzdHJvcyBwb3NpdGl2b3MuDQoNCiMjIyMgQ8OtcmN1bG8gZGUgQ29ycmVsYWNpb25lcw0KYGBge3IgQ2lyY3Vsb19kZV9Db3JyZWxhY2lvbmVzLCBmaWcuYWxpZ24gPSAnY2VudGVyJ30NCmZ2aXpfcGNhX3ZhcihQQ0EoVW5pdmVyc2lkYWRfRGF0YXNldFssLWMoMSwyLDMsNCw1LDYsNyw4LDksMTAsMTIsMTQsMTYsMTgsMjAsMjIsMjQsMjYsMjcsMjgpXSwgc2NhbGUudW5pdCA9IFQsIGdyYXBoID0gRiksY29sLnZhcj0iIzNCODNCRCIsIHJlcGVsID0gVCwgY29sLmNpcmNsZSA9ICIjQ0RDRENEIiwgZ2d0aGVtZSA9IHRoZW1lX2J3KCkpDQpgYGANCg0KIyMjIyBNYXRyaXogZGUgUmVwcmVzZW50YWNpw7NuDQpgYGB7ciBNYXRyaXpfZGVfUmVwcmVzc2VudGFjaW9uX0NPUzIsIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0KKGdldF9wY2FfdmFyKFBDQShVbml2ZXJzaWRhZF9EYXRhc2V0WywtYygxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMiwxNCwxNiwxOCwyMCwyMiwyNCwyNiwyNywyOCldLCBuY3AgPSA2LCBzY2FsZS51bml0ID0gVFJVRSwgZ3JhcGggPSBGKSkpJGNvczINCmBgYA0KDQojIyMjIENhbGlkYWQgZGUgUmVwcmVzZW50YWNpw7NuDQpgYGB7ciBDYWxpZGFkX2RlX2xhX1JlcHJlc2VudGFjaW9uLCBmaWcuYWxpZ24gPSAnY2VudGVyJ30NCmZ2aXpfcGNhX3ZhcihQQ0EoVW5pdmVyc2lkYWRfRGF0YXNldFssLWMoMSwyLDMsNCw1LDYsNyw4LDksMTAsMTIsMTQsMTYsMTgsMjAsMjIsMjQsMjYsMjcsMjgpXSwgbmNwID0gNiwgc2NhbGUudW5pdCA9IFRSVUUsIGdyYXBoID0gRiksIGNvbC52YXI9ImNvczIiLCBncmFkaWVudC5jb2xzPWMoIiMwMEFGQkIiLCIjRTdCODAwIiwiI0ZDNEUwNyIpLCByZXBlbCA9IFRSVUUpDQpgYGANCg0KIyMjIyBDb29yZGVuYWRhcyBJbmRpdmlkdWFsZXMNCmBgYHtyIENvb3JkZW5hZGFzX1JlZ2lzdHJvcywgZmlnLmFsaWduID0gJ2NlbnRlcid9DQpoZWFkKChQQ0EoVW5pdmVyc2lkYWRfRGF0YXNldFssLWMoMSwyLDMsNCw1LDYsNyw4LDksMTAsMTIsMTQsMTYsMTgsMjAsMjIsMjQsMjYsMjcsMjgpXSwgbmNwID0gNiwgc2NhbGUudW5pdCA9IFRSVUUsIGdyYXBoID0gRikpJGluZCRjb29yZCwgbiA9IDIzTCkNCmBgYA0KDQoNCiMjIyAyLjQuIENvbnRyaWJ1Y2lvbmVzDQpTZWfDum4gZWwgdHJhYmFqbyBkZSBbQEFFRE1EaWF6LU1vcmFsZXMxZWRdIGxhIGludGVycHJldGFjacOzbiBkZSByZXN1bHRhZG9zIGVzdMOhIHZpbmN1bGFkYSBjb24gZWwgY8OhbGN1bG8gZGUgY29vcmRlbmFkYXMsIGNvbnRyaWJ1Y2lvbmVzLCBjb3Nlbm9zIGN1YWRyYWRvcywgZXRjLCBwb3IgbG8gdGFudG8sIGxhIGNvbmNlcHR1YWxpemFjacOzbiBkZSBsYXMgdmFyaWFibGVzIGRlYmUgc2VyIGNsYXJhIHBhcmEgZXN0YWJsZWNlcmxhIGNvbiBsYSBtYXlvciBjbGFyaWRhZCBwb3NpYmxlLCBlcyBkZWNpciwgbG9zIGRhdG9zIGRlYmVuIHBvbmVyc2UgZW4gY29udGV4dG8uIEVuIGVzdGUgc2VudGlkbywgbGEgY29udHJpYnVjacOzbiBkZSB1bmEgdmFyaWFibGUgYSB1bmEgY29tcG9uZW50ZSBhbGxhbmEgZWwgY2FtaW5vIGRlIGxhIGludGVycHJldGFjacOzbiBkZSByZXN1bHRhZG9zLiBFc3RvIHNlIGhhY2UgZW4gZXN0ZSBhcGFydGFkbyBlbiBlbCBzZW50aWRvIGRlIGNhbGN1bGFyIGxvciBhcG9ydGVzIGNvbiBxdWUgY2FkYSB2YXJpYWJsZSBwYXJ0aWNpcGEgcGFyYSBkZWZpbmlyIGEgY2FkYSBjb21wb25lbnRlIGdlbmVyYWRhLg0KDQojIyMgUGxhbnRlYW1pZW50byBkZWwgUHJvYmxlbWENCkNvbiBiYXNlIGVuIGxhcyB2YXJpYWJsZXMgY3VhbnRpdGF0aXZhcyBkZWwgY29uanVudG8gZGUgZGF0b3MgZGVzY3JpdG8gZW4gbGEgW3NlY2Npw7NuIDJdKCNzZWMyKSBzZSBkZW1hbmRhIGRldGVybWluYXIgbGFzIGNvbnRyaWJ1Y2lvbmVzIHF1ZSBoYWNlIGNhZGEgdmFyaWFibGUgYSBsYSBjb25zdHJ1Y2Npw7NuIGRlIGNhZGEgY29tcG9uZW50ZS4NCg0KIyMjIERlc2Fycm9sbG8gZGVsIEFuw6FsaXNpcyB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KTGEgbmF2ZWdhY2nDs24gYSB0cmF2w6lzIGRlIGxhcyBwZXN0YcOxYXMgcGVybWl0ZSByZWNvbm9jZXIgZW4gcmVwcmVzZW50YWNpb25lcyBudW3DqXJpY2FzIHkgZ3LDoWZpY2FzIGxhcyBjb250cmlidWNpb25lcyBkZSBsYXMgdmFyaWFibGVzIGRlbCBjb25qdW50byBkZSBkYXRvcyBhIGxhIGNvbnN0cnVjY2nDs24gZGUgY2FkYSBjb21wb25lbnRlLiBBc8OtLCBzZSBlbnRpZW5kZSBjdcOhbnRhIHZhcmlhYmlsaWRhZCBleHBsaWNhIGNhZGEgdmFyaWFibGUgZGUgbGEgdmFyaWFiaWxpZGFkIHRvdGFsIGRlIGxhIGNvbXBvbmVudGUgY29uIHF1ZSBlc3TDqSBpbnZvbHVjcmFkYS4gZW4gcGFydGljdWxhcjoNCg0KTGEgKk1hdHJpeiBkZSBDb250cmlidWNpb25lcyogbXVlc3RyYSBlbiB0w6lybWlub3MgcmVsYXRpdm9zIGxhIHJldGVuY2nDs24gZGUgdmFyaWFiaWxpZGFkIHF1ZSB0aWVuZSBjYWRhIHZhcmlhYmxlIGVuIGxhIGNvbnN0cnVjY2nDs24gZGUgY2FkYSBjb21wb25lbnRlLiBBc8OtLCBsb3MgZGlhZ3JhbWFzIGRlIGJhcnJhcyB2aXN1YWxpemFkb3MgYSB0cmF2w6lzIGRlIGxhcyBwZXN0YcOxYXMgZGVzZGUgKkNvbnRyaWJ1Y2lvbmVzIGEgRDEqIGhhc3RhICpDb250cmlidWNpb25lcyBhIEQ2KiwgbXVlc3RyYW4gY29uIGJhc2UgZW4gZGlhZ3JhbWFzIGRlIGJhcnJhcyBsYXMgcmVzcGVjdGl2YXMgY29udHJpYnVjaW9uZXMgcXVlIGhhY2VuIGxhcyB2YXJpYWJsZXMgcGFyYSBleHBsaWNhciBsYSB2YXJpYW56YXIgZW4gY2FkYSBjb21wb25lbnRlOyBhZGVtw6FzLCBjYWRhIGdyw6FmaWNvIGluY2x1eWUgdW5hIGzDrW5lYSBxdWUgYXl1ZGEgYSBpZGVudGlmaWNhciBsYSBjb250cmlidWNpw7NuIG1lZGlhLCBlc3RvIGF5dWRhIGEgaWRlbnRpZmljYXIgY29uIG1heW9yIGZhY2lsaWRhZCBhIGxhcyB2YXJpYWJsZXMgcXVlIGNvbnRyaWJ1eWVuIGNvbiBtYXlvciBleHBsaWNhY2nDs24gZGUgdmFyaWFiaWxpZGFkIGRlIGxvcyBjb21wb25lbnRlcyBxdWUgY29uZm9ybWFuLg0KDQpFbiAqQ29udHJpYnVjaW9uZXMgYSBEMSogc2UgdmlzdWFsaXphIHF1ZSBsYXMgdmFyaWFibGVzIHBvciBlbmNpYW1hIGRlIGxhIGNvbnRyaWJ1Y2nDs24gbWVkaWE6ICpvdmVyYWxsIHNjb3JlLCAqKmFyZSBzY29yZSwgKiplciBzY29yZSogeSAqZ2VyIFNjb3JlKiByZXRpZW5lbiBhcHJveGltYWRhbWVudGUgZWwgJDcwLjkkICRcJSQgZGUgbGEgdmFyaWFiaWxpZGFkIGRlbCBjb21wb25lbnRlIDEuDQoNCkVuICpDb250cmlidWNpb25lcyBhIEQyKiBzZSB2aXN1YWxpemEgcXVlIGxhcyB2YXJpYWJsZXMgcG9yIGVuY2lhbWEgZGUgbGEgY29udHJpYnVjacOzbiBtZWRpYTogKmlmciBzY29yZSogeSAqaXNyIHNjb3JlKiByZXRpZW5lbiBhcHJveGltYWRhbWVudGUgZWwgJDY4JCAkXCUkIGRlIGxhIHZhcmlhYmlsaWRhZCBkZWwgY29tcG9uZW50ZSAyLg0KDQpFbiAqQ29udHJpYnVjaW9uZXMgYSBEMyogc2UgdmlzdWFsaXphIHF1ZSBsYXMgdmFyaWFibGVzIHBvciBlbmNpYW1hIGRlIGxhIGNvbnRyaWJ1Y2nDs24gbWVkaWE6ICpmc3Igc2NvcmUqIHkgKmNwZiBzY29yZSogcmV0aWVuZW4gYXByb3hpbWFkYW1lbnRlIGVsICQ3OS4zJCAkXCUkIGRlIGxhIHZhcmlhYmlsaWRhZCBkZWwgY29tcG9uZW50ZSAzLg0KDQpFbiAqQ29udHJpYnVjaW9uZXMgYSBENCogc2UgdmlzdWFsaXphIHF1ZSBsYXMgdmFyaWFibGVzIHBvciBlbmNpYW1hIGRlIGxhIGNvbnRyaWJ1Y2nDs24gbWVkaWE6ICpjcGYgc2NvcmUqICwgKmZzciBzY29yZSwgKipnZXIgc2NvcmUqIHkgKmVyIHNjb3JlKiByZXRpZW5lbiBhcHJveGltYWRhbWVudGUgZWwgJDgzLjEyJCAkXCUkIGRlIGxhIHZhcmlhYmlsaWRhZCBkZWwgY29tcG9uZW50ZSA0Lg0KDQpFbiAqQ29udHJpYnVjaW9uZXMgYSBENSogc2UgdmlzdWFsaXphIHF1ZSBsYXMgdmFyaWFibGVzIHBvciBlbmNpYW1hIGRlIGxhIGNvbnRyaWJ1Y2nDs24gbWVkaWE6ICppcm4gU2NvcmUqIHkgKmNwZiBTY29yZSogcmV0aWVuZW4gYXByb3hpbWFkYW1lbnRlIGVsICQ5My4zJCAkXCUkIGRlIGxhIHZhcmlhYmlsaWRhZCBkZWwgY29tcG9uZW50ZSA1Lg0KDQpQb3Igw7psdGltbywgZW4gKkNvbnRyaWJ1Y2lvbmVzIGEgRDYqIHNlIHZpc3VhbGl6YSBxdWUgbGFzIHZhcmlhYmxlcyBwb3IgZW5jaWFtYSBkZSBsYSBjb250cmlidWNpw7NuIG1lZGlhOiAqZ2VyIHNjb3JlKiB5ICppciBzY29yZSogcmV0aWVuZW4gYXByb3hpbWFkYW1lbnRlIGVsICQ4Ny4xOCQgJFwlJCBkZSBsYSB2YXJpYWJpbGlkYWQgZGVsIGNvbXBvbmVudGUgNi4NCg0KDQpDb24gbG9zIGRhdG9zIHByb2Nlc2Fkb3MgaGFzdGEgYWhvcmEgc2UgcHVlZGUgcHJvY2VkZXIgY29uIGxhIGludGVwcmV0YWNpw7NuIGRlIGxvcyBjb21wb25lbnRlcy4NCg0KIyMjIyBNYXRyaXogZGUgQ29udHJpYnVjaW9uZXMNCmBgYHtyIE1hdHJpel9kZV9Db250cmlidWNpb25lcywgZmlnLmFsaWduID0gJ2NlbnRlcid9DQooZ2V0X3BjYV92YXIoUENBKFVuaXZlcnNpZGFkX0RhdGFzZXRbLC1jKDEsMiwzLDQsNSw2LDcsOCw5LDEwLDEyLDE0LDE2LDE4LDIwLDIyLDI0LDI2LDI3LDI4KV0sIG5jcCA9IDYsIHNjYWxlLnVuaXQgPSBUUlVFLCBncmFwaCA9IEYpKSkkY29udHJpYg0KYGBgDQoNCiMjIyMgQ29udHJpYnVjaW9uZXMgYSBEMQ0KYGBge3IgQ29udHJpYnVjaW9uZXNfRElNXzEsIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0KZnZpel9jb250cmliKFBDQShVbml2ZXJzaWRhZF9EYXRhc2V0WywtYygxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMiwxNCwxNiwxOCwyMCwyMiwyNCwyNiwyNywyOCldLCBuY3AgPSA2LCBzY2FsZS51bml0ID0gVFJVRSwgZ3JhcGggPSBGKSwgY2hvaWNlID0gInZhciIsIGF4ZXMgPSAxLCB0b3AgPSAxMCkNCmBgYA0KDQojIyMjIENvbnRyaWJ1Y2lvbmVzIGEgRDINCmBgYHtyIENvbnRyaWJ1Y2lvbmVzX0RJTV8yLCBmaWcuYWxpZ24gPSAnY2VudGVyJ30NCmZ2aXpfY29udHJpYihQQ0EoVW5pdmVyc2lkYWRfRGF0YXNldFssLWMoMSwyLDMsNCw1LDYsNyw4LDksMTAsMTIsMTQsMTYsMTgsMjAsMjIsMjQsMjYsMjcsMjgpXSwgbmNwID0gNiwgc2NhbGUudW5pdCA9IFRSVUUsIGdyYXBoID0gRiksIGNob2ljZSA9ICJ2YXIiLCBheGVzID0gMiwgdG9wID0gMTApDQpgYGANCg0KIyMjIyBDb250cmlidWNpb25lcyBhIEQzDQpgYGB7ciBDb250cmlidWNpb25lc19ESU1fMywgZmlnLmFsaWduID0gJ2NlbnRlcid9DQpmdml6X2NvbnRyaWIoUENBKFVuaXZlcnNpZGFkX0RhdGFzZXRbLC1jKDEsMiwzLDQsNSw2LDcsOCw5LDEwLDEyLDE0LDE2LDE4LDIwLDIyLDI0LDI2LDI3LDI4KV0sIG5jcCA9IDYsIHNjYWxlLnVuaXQgPSBUUlVFLCBncmFwaCA9IEYpLCBjaG9pY2UgPSAidmFyIiwgYXhlcyA9IDMsIHRvcCA9IDEwKQ0KYGBgDQoNCiMjIyMgQ29udHJpYnVjaW9uZXMgYSBENA0KYGBge3IgQ29udHJpYnVjaW9uZXNfRElNXzQsIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0KZnZpel9jb250cmliKFBDQShVbml2ZXJzaWRhZF9EYXRhc2V0WywtYygxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMiwxNCwxNiwxOCwyMCwyMiwyNCwyNiwyNywyOCldLCBuY3AgPSA2LCBzY2FsZS51bml0ID0gVFJVRSwgZ3JhcGggPSBGKSwgY2hvaWNlID0gInZhciIsIGF4ZXMgPSA0LCB0b3AgPSAxMCkNCmBgYA0KDQojIyMjIENvbnRyaWJ1Y2lvbmVzIGEgRDUNCmBgYHtyIENvbnRyaWJ1Y2lvbmVzX0RJTV81LCBmaWcuYWxpZ24gPSAnY2VudGVyJ30NCmZ2aXpfY29udHJpYihQQ0EoVW5pdmVyc2lkYWRfRGF0YXNldFssLWMoMSwyLDMsNCw1LDYsNyw4LDksMTAsMTIsMTQsMTYsMTgsMjAsMjIsMjQsMjYsMjcsMjgpXSwgbmNwID0gNiwgc2NhbGUudW5pdCA9IFRSVUUsIGdyYXBoID0gRiksIGNob2ljZSA9ICJ2YXIiLCBheGVzID0gNSwgdG9wID0gMTApDQpgYGANCg0KIyMjIyBDb250cmlidWNpb25lcyBhIEQ2DQpgYGB7ciBDb250cmlidWNpb25lc19ESU1fNiwgZmlnLmFsaWduID0gJ2NlbnRlcid9DQpmdml6X2NvbnRyaWIoUENBKFVuaXZlcnNpZGFkX0RhdGFzZXRbLC1jKDEsMiwzLDQsNSw2LDcsOCw5LDEwLDEyLDE0LDE2LDE4LDIwLDIyLDI0LDI2LDI3LDI4KV0sIG5jcCA9IDYsIHNjYWxlLnVuaXQgPSBUUlVFLCBncmFwaCA9IEYpLCBjaG9pY2UgPSAidmFyIiwgYXhlcyA9IDYsIHRvcCA9IDEwKQ0KYGBgDQoNCiMjIyAyLjUuIEludGVycHJldGFjacOzbiBkZSBDb21wb25lbnRlcw0KDQpDb24gYmFzZSBlbiBbRGlheiBNb3JhbGVzICYgbW9yYWxlcyByaXZlcmEsIDIwMTJdIHNlIHNhYmUgcXVlIGEgcGFydGlyIGRlIGxhcyBjb29yZGVuYWRhcyBkZSBsb3MgcmVnaXN0cm9zIGRpbWVuc2lvbmFsbWVudGUgcmVkdWNpZG9zIHNlIHB1ZWRlIHViaWNhciBlbiB1biBwbGFubyBkZSBmYWN0b3JlcyBwYXJhIGVmZWN0b3MgZGUgYW7DoWxpc2lzIGUgaW50ZXJwcmV0YWNpw7NuLiBBc8OtLCBsYXMgdmFyaWFibGVzIHJlZHVjaWRhcyBzb24gbGFzIGNvbXBvbmVudGVzIHByaW5jaXBhbGVzIHF1ZSBzZSBncmFmaWNhbiBjb21vIGVqZXMgZW4gdW4gcGxhbm8sIHkgbG9zIHZhbG9yZXMgcXVlIHRvbWVuIHNvbiBsb3MgcHVudGFqZXMgZGUgbGFzIGNvbXBvbmVudGVzLiBDb21vIGJpZW4gc2UgZXhwbGljYSBlbiBlbCBtaXNtbyB0cmFiYWpvLCBsYXMgZGlzdGFuY2lhcyBlbnRyZSBsb3MgcHVudG9zIGRlZmluaWRvcyBwb3IgbG9zIHB1bnRhamVzIGRlIGxhcyBjb21wb25lbnRlcyB0aWVuZSB1biBzaWduaWZpY2FkbyByZWxldmFudGUgYWwgYXl1ZGFyIGEgZXN0YWJsZWNlciBzZW1lamFuemFzIGRlIHBlcmZpbGVzIGVuIGxhcyBvYnNlcnZhY2lvbmVzIGhlY2hhcy4gU2luIGVtYmFyZ28sIGxvcyB2YWxvcmVzIHNlbWVqYW50ZXMgZGUgbGFzIHZhcmlhYmxlcyBwdWVkZW4gZGFyc2Ugc29sbyBlbiBhbGd1bmFzIGRlIGVsbGFzLCBzaW4gZXNwZXJhciBuZWNlc2FyaWFtZW50ZSBhIHF1ZSBzdWNlZGEgZW4gdG9kYXMuIEFzw60sIHNlIGVzcGVyYSBxdWUgbGFzIGRpc3RhbmNpYXMgZW4gZWwgZXNwYWNpbyBkaW1lbnNpb25hbCBvcmlnaW5hbCBkZSBsYXMgb2JzZXJ2YWNpb25lcyBxdWVkZW4gYmllbiByZXByZXNlbnRhZGFzIGVuIGVsIGVzcGFjaW8gcmVkdWNpZG8gZGUgbGFzIGNvbXBvbmVudGVzLg0KDQoNCiMjIyBQbGFudGVhbWllbnRvIGRlbCBQcm9ibGVtYQ0KQ29uIGJhc2UgZW4gbGFzIHZhcmlhYmxlcyBjdWFudGl0YXRpdmFzIGRlbCBjb25qdW50byBkZSBkYXRvcyBkZXNjcml0byBlbiBsYSBbc2VjY2nDs24gMl0oI3NlYzIpIHNlIGRlbWFuZGEgZGVmaW5pciBlIGludGVycHJldGFyIHN1cyBjb21wb25lbnRlcyBwcmluY2lwYWxlcy4NCg0KIyMjIERlc2Fycm9sbG8gZGVsIEFuw6FsaXNpcyB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KTGEgbmF2ZWdhY2nDs24gYSB0cmF2w6lzIGRlIGxhcyBwZXN0YcOxYXMgcGVybWl0ZSB2aXN1YWxpemFyIG9iamV0b3MgZ3LDoWZpY29zIHkgbWF0cmljaWFsZXMgcXVlLCBhbCBpbmNsdWlyIGxvIGhlY2hvIGVuIGxhcyBzZWNjaW9uZXMgYW50ZXJpb3JlcywgYXl1ZGFuIGEgcm9idXN0ZWNlciBsYSBpbnRlcnByZXRhY2nDs24gZGUgbGFzIGNvbXBvbmVudGVzIGNhbGN1bGFkYXMuIENvbW8gc2UgbW9zdHLDsyBlbiBsYSBbc2VjY2nDs24gN10oI3NlYzcpLCBsYSBjYW50aWRhZCBkZSBjb21wb25lbnRlcyBzZWxlY2Npb25hZGFzIHNlIHJlZHVqbyAoc2Vnw7puIGVsIGNyaXRlcmlvIGRlIEthaXNlcikgYSB1bmEgeSBzZSBlc3RhYmxlY2nDsyBxdWUgbGEgY29tcG9uZW50ZSAxIHJldGllbmUgZWwgJDU3LjA4JCAkXCUkIGRlIGxhIHZhcmlhYmlsaWRhZCBkZSBsb3MgZGF0b3MuIEFzw60sIGVuIGVsIGPDrXJjdWxvIGRlIGNvcnJlbGFjaW9uZXMgZGUgbGEgW3NlY2Npw7NuIDhdKCNzZWM4KSBzZSBhcHJlY2lhIHF1ZSBsYSByZXByZXNlbnRhY2nDs24gZGUgbGFzIHZhcmlhYmxlcyBjb25qdWdhZGFzIGVuIGxhIGNvbXBvbmVudGUgMSBsYSBjb25maWd1cmFuIGNvbW8gdW5hIGRlIHRpcG8gdGFtYcOxbywgbG8gcXVlIHB1ZWRlIGludGVycHJldGFyc2UgY29tbyB1bmEgZXNwZWNpZSBkZSDDrW5kaWNlIGRlIHByb3BvcmNpb25hbGlkYWQgZGlyZWN0YS4gRXN0byB0YW1iacOpbiBzZSBhcG95YSBjb24gYmFzZSBlbiBlbCBoZWNobyBkZSBxdWUgdG9kYXMgbGFzIHZhcmlhYmxlcyBwcmVzZW50YW4gY2FsaWRhZGVzIGRlIHJlcHJlc2VudGFjacOzbiBlbnRyZSAkMC4xOCQgeSAkMC45NyQuIEVuIGNvbnNlY3VlbmNpYSwgY3VhbnRvIG1heW9yIHNlYSBlbCB2YWxvciBsYXMgdmFyaWFibGVzIG1heW9yIHNlcsOhIGVsIGVzdGFkbyBkZSBmYXZvcmFiaWxpZGFkIGRlIHF1ZSBsYSB1bml2ZXJzaWRhZCBlc3RlIGVuIHVuIG1lam9yIFJhbmtpbmcgYSBuaXZlbCBkZSBsYXMgdW5pdmVyc2lkYWRlcyBkZWwgY29uanVudG8gZGUgZGF0b3MuIEFzw60sIGRhZGEgbGEgbmF0dXJhbGV6YSBkZSBsYXMgdmFyaWFibGVzIGVzdGEgY29tcG9uZW50ZSBwdWVkZSByZXByZXNlbnRhciBwYXJhIHVuIGVzdHVkaWFudGUgc3UgKm1lZGlkYSBkZSBjb21wZXRpdGl2aWRhZCBmb3JtYXRpdmEqLiBBbCByZXNwZWN0bzoNCg0KTGFzIHBlc3Rhw7FhcyAqQmlwbG90IGRlIFZhcmlhYmxlcyB5IFJlZ2lzdHJvcyBUb3RhbGVzKiBlbiAqUyogKFN0YXR1cyksICpGKiAoRm9jdXMpIHkgKlIqIChSZXNlcmFjaCksIG11ZXN0cmFuLCBjb24gYmFzZSBlbiBsYXMgYWdydXBhY2lvbmVzIHF1ZSBlc3RhcyB2YXJpYWJsZXMgY2F0ZWfDs3JpY2FzIHB1ZWRlbiBlc3RhYmxlY2VyLCBsYSByZXByZXNlbnRhY2nDs24gZW4gZGltZW5zaW9uYWxpZGFkIHJlZHVjaWRhIGVuIGVsIHBsYW5vIGRlIGZhY3RvcmVzIGRlIHJlZ2lzdHJvcyB5IGRpbWVuc2lvbmVzIGNvbiBiYXNlIGVuIGxvcyBwdW50YWplcyBwb3IgY29tcG9uZW50ZXMuIEVuIGVzdGUgc2VudGlkbywgZXMgcG9zaWJsZSBhcHJlY2lhciBxdWUgbGFzIGFncnVwYWNpb25lcyBjb24gYmFzZSBlbiAqU3RhdHVzKiAsICpGb2N1cyogeSAqUmVzZWFyY2gqIGNhcHR1cmFuIGRpZmVyZW5jaWFzIGFjZW50dWFkYXMgZW4gbGEgZGlzdHJpYnVjaW9uZXMgZGUgbGFzwqBvYnNlcnZhY2lvbmVzLg0KDQojIyMjIEJpcGxvdCBkZSBWYXJpYWJsZXMgeSBSZWdpc3Ryb3MgW1RvdGFsIFVSXQ0KYGBge3IgQmlwbG90X2RlX1ZhcmlhYmxlc195X1JlZ2lzdHJvc19Ub3RhbF9VUiwgZmlnLmFsaWduID0gJ2NlbnRlcid9DQpsaWJyYXJ5KEZhY3RvTWluZVIpDQpsaWJyYXJ5KGZhY3RvZXh0cmEpDQoNCmRhdGFfVVIgPC0gVW5pdmVyc2lkYWRfRGF0YXNldFssLWMoMSwyLDMsNCw1LDYsNyw4LDksMTAsMTIsMTQsMTYsMTgsMjAsMjIsMjQsMjYsMjcsMjgpXQ0KZGF0YV9VUiA8LSBhcy5kYXRhLmZyYW1lKGxhcHBseShkYXRhX1VSLCBmdW5jdGlvbih4KSBhcy5udW1lcmljKGFzLmNoYXJhY3Rlcih4KSkpKQ0KDQppZiAoYW55KCFpcy5maW5pdGUoYXMubWF0cml4KGRhdGFfVVIpKSkpIHsNCiAgZm9yIChpIGluIDE6bmNvbChkYXRhX1VSKSkgew0KICAgIGRhdGFfVVJbLCBpXVshaXMuZmluaXRlKGRhdGFfVVJbLCBpXSldIDwtIG1lZGlhbihkYXRhX1VSWywgaV0sIG5hLnJtID0gVFJVRSkNCiAgfQ0KfQ0KDQpkYXRhX1VSIDwtIGRhdGFfVVJbY29tcGxldGUuY2FzZXMoZGF0YV9VUiksIF0NCg0KZGF0YV9BbGwgPC0gY2JpbmQoZGF0YV9VUiwgc3RhdHVzID0gVW5pdmVyc2lkYWRfRGF0YXNldCRzdGF0dXMpDQoNCnBjYV9yZXN1bHQgPC0gUENBKGRhdGFfQWxsLCBuY3AgPSA2LCBzY2FsZS51bml0ID0gVFJVRSwgZ3JhcGggPSBGQUxTRSwgcXVhbGkuc3VwID0gbmNvbChkYXRhX0FsbCkpDQoNCmZ2aXpfcGNhX2JpcGxvdChwY2FfcmVzdWx0LCBheGVzID0gYygxLCAyKSwgcmVwZWwgPSBUUlVFLCBoYWJpbGxhZ2UgPSBuY29sKGRhdGFfQWxsKSkNCmBgYA0KDQojIyMjIEJpcGxvdCBkZSBWYXJpYWJsZXMgeSBSZWdpc3Ryb3MgW1RvdGFsIEddDQpgYGB7ciBCaXBsb3RfZGVfVmFyaWFibGVzX3lfUmVnaXN0cm9zX1RvdGFsX0csIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0KbGlicmFyeShGYWN0b01pbmVSKQ0KbGlicmFyeShmYWN0b2V4dHJhKQ0KDQpkYXRhX1VSIDwtIFVuaXZlcnNpZGFkX0RhdGFzZXRbLC1jKDEsMiwzLDQsNSw2LDcsOCw5LDEwLDEyLDE0LDE2LDE4LDIwLDIyLDI0LDI2LDI3LDI4KV0NCmRhdGFfVVIgPC0gYXMuZGF0YS5mcmFtZShsYXBwbHkoZGF0YV9VUiwgZnVuY3Rpb24oeCkgYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoeCkpKSkNCg0KaWYgKGFueSghaXMuZmluaXRlKGFzLm1hdHJpeChkYXRhX1VSKSkpKSB7DQogIGZvciAoaSBpbiAxOm5jb2woZGF0YV9VUikpIHsNCiAgICBkYXRhX1VSWywgaV1bIWlzLmZpbml0ZShkYXRhX1VSWywgaV0pXSA8LSBtZWRpYW4oZGF0YV9VUlssIGldLCBuYS5ybSA9IFRSVUUpDQogIH0NCn0NCg0KZGF0YV9VUiA8LSBkYXRhX1VSW2NvbXBsZXRlLmNhc2VzKGRhdGFfVVIpLCBdDQoNCmRhdGFfQWxsIDwtIGNiaW5kKGRhdGFfVVIsIGZvY3VzID0gVW5pdmVyc2lkYWRfRGF0YXNldCRmb2N1cykNCg0KcGNhX3Jlc3VsdCA8LSBGYWN0b01pbmVSOjpQQ0EoZGF0YV9BbGwsIG5jcCA9IDYsIHNjYWxlLnVuaXQgPSBUUlVFLCBncmFwaCA9IEZBTFNFLCBxdWFsaS5zdXAgPSBuY29sKGRhdGFfQWxsKSkNCg0KZmFjdG9leHRyYTo6ZnZpel9wY2FfYmlwbG90KHBjYV9yZXN1bHQsIGF4ZXMgPSBjKDEsIDIpLCByZXBlbCA9IFRSVUUsIGhhYmlsbGFnZSA9IG5jb2woZGF0YV9BbGwpKQ0KYGBgDQoNCiMjIyMgQmlwbG90IGRlIFZhcmlhYmxlcyB5IFJlZ2lzdHJvcyBbVG90YWwgUl0NCmBgYHtyIEJpcGxvdF9kZV9WYXJpYWJsZXNfeV9SZWdpc3Ryb3NfVG90YWxfUiwgZmlnLmFsaWduID0gJ2NlbnRlcid9DQpsaWJyYXJ5KEZhY3RvTWluZVIpDQpsaWJyYXJ5KGZhY3RvZXh0cmEpDQpsaWJyYXJ5KGdncGxvdDIpDQoNCmRhdGFfVVIgPC0gVW5pdmVyc2lkYWRfRGF0YXNldFssLWMoMSwyLDMsNCw1LDYsNyw4LDksMTAsMTIsMTQsMTYsMTgsMjAsMjIsMjQsMjYsMjcsMjgpXQ0KZGF0YV9VUiA8LSBhcy5kYXRhLmZyYW1lKGxhcHBseShkYXRhX1VSLCBmdW5jdGlvbih4KSBhcy5udW1lcmljKGFzLmNoYXJhY3Rlcih4KSkpKQ0KDQppZiAoYW55KCFpcy5maW5pdGUoYXMubWF0cml4KGRhdGFfVVIpKSkpIHsNCiAgZm9yIChpIGluIDE6bmNvbChkYXRhX1VSKSkgew0KICAgIGRhdGFfVVJbLCBpXVshaXMuZmluaXRlKGRhdGFfVVJbLCBpXSldIDwtIG1lZGlhbihkYXRhX1VSWywgaV0sIG5hLnJtID0gVFJVRSkNCiAgfQ0KfQ0KDQpkYXRhX1VSIDwtIGRhdGFfVVJbY29tcGxldGUuY2FzZXMoZGF0YV9VUiksIF0NCg0KZGF0YV9BbGwgPC0gY2JpbmQoZGF0YV9VUiwgcmVzZWFyY2ggPSBVbml2ZXJzaWRhZF9EYXRhc2V0JHJlc2VhcmNoKQ0KDQpwY2FfcmVzdWx0IDwtIEZhY3RvTWluZVI6OlBDQShkYXRhX0FsbCwgbmNwID0gNiwgc2NhbGUudW5pdCA9IFRSVUUsIGdyYXBoID0gRkFMU0UsIHF1YWxpLnN1cCA9IG5jb2woZGF0YV9BbGwpKQ0KDQpmYWN0b2V4dHJhOjpmdml6X3BjYV9iaXBsb3QocGNhX3Jlc3VsdCwgYXhlcyA9IGMoMSwgMiksIHJlcGVsID0gVFJVRSwgaGFiaWxsYWdlID0gbmNvbChkYXRhX0FsbCkpDQpgYGANCg0KIyBGYXNlIDMgW0NvcnJlc3BvbmRlbmNpYXNdDQoNCkVuIHTDqXJtaW5vcyBnZW5lcmFsZXMsIGVzdGEgdGVyY2VyYSBldGFwYSBkZSBlc3R1ZGlvIG1vc3RyYXLDoSBjw6FsY3Vsb3MsIHZpc3VhbGl6YWNpb25lcyBlIGludGVycHJldGFjaW9uZXMgY29uIGJhc2UgZW4gZWwgY29uanVudG8gZGUgZGF0b3MgdHJhdGFkbyBlbiBsYSBmYXNlIFsxXSgjc2VjMSkgeSBbMl0oI2Zhc2UyKSwgcGVybyBhaG9yYSBkZXNkZSB1biBlbmZvcXVlIGRlIGFuw6FsaXNpcyBkZSBjb3JyZXNwb25kZW5jaWFzIHNpbXBsZXMgeSBtw7psdGlwbGVzIHNvYnJlIGxhcyB2YXJpYWJsZXMgY3VhbmxpdGF0aXZhcywgcXVlIGluY2x1aXLDoTogY29uc3RydWNjacOzbiBkZSB0YWJsYXMgZGUgY29udGluZ2VuY2lhcyB5IGRpc3l1bnRpdmFzIGNvbXBsZXRhcywgY2FsaWRhZGVzIGRlIHJlcHJlc2VudGFjacOzbiwgY29udHJpYnVjaW9uZXMgZSBpbnRlcnByZXRhY2lvbmVzLg0KDQpSZWN1w6lyZGVzZSBxdWUgZWwgY29uanVudG8gZGUgZGF0b3MgZGUgdHJhYmFqbyBlcyBkZXNjcml0byBlbiBsYSBbc2VjY2nDs24gMl0oI3NlYzIpIHkgbG9zIHJlZmVyZW50ZXMgdGXDs3JpY29zIGVuIGxhIFtzZWNjacOzbiAxXSgjc2VjMSkuDQoNClBvciDDumx0aW1vLCBlc3RlIHRyYWJham8gZnVlIHByb2Nlc2FkbyBjb24gYHIgUi52ZXJzaW9uLnN0cmluZ2AgbWVkaWFkbyBwb3IgUlN0dWRpbyAyMDIyLjEyLjAgQnVpbGQgMzUzIGVuIHVuYSBwbGF0YWZvcm1hIHg4Nl82NC13NjQtbWluZ3czMi4gQWRlbcOhcywgcG9yIHN1IG5hdHVyYWxlemEgZGUgcHVibGljYWNpw7NuIGVuIGzDrW5lYSB5IHBhcmEgY3VtcGxpciBjb24gZWwgcmVxdWlzaXRvIHRlbXBvcmFsIGRlIGVudHJlZ2EsIHNlcsOhIGFjdHVhbGl6YWRvLCBjb21vIG3DoXhpbW8sIGhhc3RhIGxhcyAxMTo1OSBwLm0uIGRlbCBtaWVyY29sZXMgIDEyIGRlIGp1bmlvIGRlIDIwMjQuDQoNCiMjIyAzLjEuIE9iamV0aXZvcw0KDQoNCiMjIyAzLjIuIENvcnJlc3BvbmRlbmNpYXMgU2ltcGxlcw0KDQpDb24gYmFzZSBlbiBlbCB0cmFiYWpvIGRlIFtAQU1BUkFsZGFzLVVyaWVsMmVkXSBzZSBzYWJlIHF1ZSBlbCBhbsOhbGlzaXMgZGUgY29ycmVzcG9uZGVuY2lhcyBzaW1wbGUgKEFDUykgYnVzY2EgcmVwcmVzZW50YXIgZW4gdW4gZXNwYWNpbyBtdWx0aWRpbWVuc2lvbmFsIHJlZHVjaWRvIGxhIHJlbGFjacOzbiBxdWUgZXhpc3RhIGVudHJlIGxhcyBjYXRlZ29yw61hcyBkZSB1biBwYXIgZGUgdmFyaWFibGVzIGNhdGVnw7NyaWNhcy4gRW4gZXN0ZSBzZW50aWRvLCBlbCBBQ1MgbXVlc3RyYSBsYXMgZGlzdGFuY2lhIGVudHJlIGxvcyBuaXZlbGVzIGRlIGRvcyB2YXJpYWJsZXMgY2F0ZWfDs3JpY2FzIHksIGVuIGNvbnNlY3VlbmNpYSwgYXl1ZGEgYSB2aXN1YWxpemFyIHRhYmxhcyBkZSBjb250aW5nZW5jaWEuIEFkZW3DoXMsIHNlIGVzdGFibGVjZSBxdWUgZWwgbsO6bWVybyBtw6F4aW1vIGRlIGRpbWVuc2lvbmVzIHF1ZSBleHBsaXF1ZW4gbGEgYXNvY2lhY2nDs24gZW50cmUgdmFyaWFibGVzIGZpbGEgeSBjb2x1bW5hIGVzIGlndWFsIGEgdW5vIG1lbm9zIGVsIG1lbm9yIG7Dum1lcm8gZGUgY2F0ZWdvcsOtYXMgZGUgYWxndW5hIGRlIGxhcyB2YXJpYWJsZXMgaW52b2x1Y3JhZGFzLiBFbiBjb25zZWN1ZW5jaWEsIGVsIGFuw6FsaXNpcyBkZSBjb3JyZXNwb25kZW5jaWFzIHBlcm1pdGUgZGVzY3JpYmlyIGxhIHByb3hpbWlkYWQgZXhpc3RlbnRlIGVudHJlIGxvcyBwZXJmaWxlcyBkZSBsb3Mgb2JqZXRvcyBvYnNlcnZhZG9zLiBBZGVtw6FzLCBlbCBBQ1MsIHF1ZSBiYXNhIHN1cyBjw6FsY3Vsb3MgZW4gdGFibGFzIGRlIGNvbnRpbmdlbmNpYSwgcHVlZGUgZXh0ZW5kZXJzZSBhIG3DoXMgZGUgZG9zIHZhcmlhYmxlcyBjYXRlZ8OzcmljYXMsIGNvbm9jacOpbmRvc2UgY29tbyBhbsOhc2xpc2lzIGRlIGNvcnJlc3BvbmRlbmNpYXMgbcO6bHRpcGxlcyAoQUNNKSwgY29uIGJhc2UgZW4gdW5hIG9iamV0byBsbGFtYWRvIHRhYmxhIGRpc3l1bnRpdmEgY29tcGxldGEuDQoNCkVzdGEgc2VjY2nDs24gdHJhdGEgZWwgYW7DoWxpc2lzIGRlIGNvcnJlc3BvbmRlY2lhcyBzaW1wbGUgY29uIGJhc2UgZW4gcGFyZXMgZGUgdmFyaWFibGVzIGNhdGVnw7NyaWNhcyBkZWwgY29uanVudG8gZGUgZGF0b3MgZGVzY3JpdG8gZW4gbGEgW3NlY2Npw7NuIDJdKCNzZWMyKS4gQ29tcGxlbWVudGFyaWFtZW50ZSwgbGEgW3NlY2Npw7NuIDEyXSgjc2VjMTIpIG11ZXN0cmEgZWwgYW7DoWxpc2lzIGRlIGNvcnJlc3BvbmRlbmNpYXMgbcO6bHRpcGxlcyBjb24gYmFzZSBlbiBsYXMgdmFyYWlibGVzIGNhdGVnw7NyaWNhcyBkZWwgbWlzbW8gY29uanVudG8gZGUgZGF0b3MuDQoNCiMjIyBQbGFudGVhbWllbnRvIGRlbCBQcm9ibGVtYQ0KQ29uIGJhc2UgZW4gbGFzIHZhcmlhYmxlcyBjdWFsaXRhdGl2YXMgZGVsIGNvbmp1bnRvIGRlIGRhdG9zIGRlc2NyaXRvIGVuIGxhIFtzZWNjacOzbiAyXSgjc2VjMikgc2UgZGVtYW5kYSBkZXNhcnJvbGxhciBlbCBhbsOhbGlzaXMgZGUgY29ycmVzcG9uZGVuY2lhcywgZW4gcHJpbmNpcGlvIHNpbXBsZSwgYXBveWFkbyBlbiB0YWJsYXMgZGUgY29udGluZ2VuY2lhIHkgZGUgZnJlY3VlbmNpYXMgcmVsYXRpdmFzIHkgZ3LDoWZpY29zIGRlIHBlcmZpbGVzIHkgZGUgcHVudG9zIHN1cGVycHVlc3RvcyBlbiBlbCBwcmltZXIgcGxhbm8gZmFjdG9yaWFsLiANCg0KIyMjIERlc2Fycm9sbG8gZGVsIEFuw6FsaXNpcyB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KTGEgbmF2ZWdhY2nDs24gYSB0cmF2w6lzIGRlIGxhcyBwZXN0YcOxYXMgcGVybWl0ZSB2aXN1YWxpemFyIG9iamV0b3MgbWF0cmljaWFsZXMgeSBncsOhZmljb3MgcXVlIGF5dWRhbiBhIHJvYnVzdGVjZXIgbGEgaW50ZXJwcmV0YWNpw7NuIGRlbCBhbsOhbGlzaXMgZGUgY29ycmVzcG9uZGVuY2lhcyBzaW1wbGUgKGJpbmFyaW8pIGVudHJlIGNhZGEgcGFyIGRlIHZhcmFpYmxlcyBjYXRlZ8OzcmljYXMgZGVsIGNvbmp1bnRvIGRlIGRhdG9zOiAqKmZvY3VzKiosICoqUmVzZWFyY2gqKiB5ICoqc3RhdHVzKiouIFBvciBzZXIgYmFqYSBsYSBjYW50aWRhZCBkZSB2YXJpYWJsZXMgY2F0ZWfDs3JpY2FzIHNlIHRyYWJhamEgZWwgQUNTIHNvYnJlIGxhcyB0cmVzIGNvbWJpbmFjaW9uZXMgcG9zaWJsZXMuDQoNCkxhIHBlc3Rhw7FhICoqQUMgUGFyZWphcyBUb3RhbGVzKiogYWdydXBhIGxvcyBjw6FsY3Vsb3MgcGFyYSB0b2RhcyBsYXMgY29tYmluYWNpb25lcyBkZSBwYXJlamFzIGRlIHZhcmlhYmxlcy4gRW4gcGFydGljdWxhciwgZW4gKipDb250aW5nZW5jaWFzKiogc2UgaGFjZW4gbGFzIHNpZ3VpZW50ZXMgbGVjdHVyYXMgZGUgZWplbXBsbyBkZSBsYXMgdGFibGFzIGRlIGNvbnRpbmdlbmNpYXM6IGVuIGxhIHRhYmxhIGRlIGNvbnRpbmdlbmNpYXMgKipzdGF0dXMqKiB2cy4gKipyZXNlYXJjaCoqIHNlIGVuY29udHLDsyBxdWUgZWwgcmVnaXN0cm8gIlZIIiBkZSBsYSBldGlxdWV0YSByZXNlYXJjaCB0aWVuZSA3NzMgcmVnaXN0cm9zICBlbiBlbCBzdGF0dXMgZGUgdmFsb3IgIjAiIHkgOTE2IGRlIHVuIHRvdGFsIGRlIDEzMjMsIHkgcXVlIGVsIHJlZ2lzdHJvICIwIiBlcyBlbCBxdWUgdGllbmUgbWFzIHJlZ2lzdHJvcyB0aWVuZSBjb24gMTA0MywgbWllc3RyYXMgcXVlICIxIiBzb2xvIHRpZW5lIHVuIHRvdGFsIGRlIDI4MC4gRW4gbGEgdGFibGEgZGUgY29udGluZ2VuY2lhcyAqKmZvY3VzKiogdnMuICoqc3RhdHVzKiogc2UgY2FsY3Vsw7MgcXVlICJTUCIgZGUgbGEgZXRpcXVldGEgZm9jdXMgZXMgZWwgcXVlIG1lbm9zIHJlZ2lzdHJvcyB0aWVuZSBjb24gdW4gdG90YWwgZGUgNTYsIHNlZ3VpZG8gZGUgIkZPIiBjb24gMjk1LCBsdWVnbyBkZSAiQ08iIGNvbiA0MTYgeSBwb3IgdWx0aW1vICJGQyIgY29uIDU1Ni4gUG9yIMO6bHRpbW8sIGVuIGxhIHRhYmxhIGRlIGNvbnRpbmdlbmNpYSAqKnJlc2VhcmNoKiogdnMuICoqZm9jdXMqKiBzZSBwdWVkZSBkZXRlcm1pbmFyIHF1ZSBlbCByZWlzdHJvICJTUCIgc29sbyBjb2luY2lkZSBjb24gZWwgcmVpc3RybyAiVkgiIGRlIHJlc2VhcmNoLCBwb3IgbG8gcXVlIHNlIHBvZHJpYSBkZWNpciBxdWUgZXN0b3MgcmVnaXN0cm9zIGVzdGFuIGVzdHJlY2hhbWVudGUgcmVsYWNpb25hZG9zLCBwb3Igb3RybyBsYWRvIGVsIHJlZ2lzdHJvICJMTyIgc29sbyB0aWVuZSB1biByZWdpc3Ryby4gDQoNClBFUkZJTEVTIENQRiBZIENQQw0KDQpHcmFmaWNvIDEgOiBFc3RlIGdyw6FmaWNvIGZhY2lsaXRhIGxhIGNvbXBhcmFjacOzbiBkZSBjw7NtbyBzZSBkaXN0cmlidXllbiBsYXMgY2F0ZWdvcsOtYXMgZGUgZW5mb3F1ZSBkZSBpbnZlc3RpZ2FjacOzbiBlbiBkaXN0aW50YXMgw6FyZWFzLiBFcyBldmlkZW50ZSBxdWUgbGFzIMOhcmVhcyAibWFyZyIgeSAiQ08iIHRpZW5lbiB1bmEgbWF5b3IgZGl2ZXJzaWRhZCBkZSBjYXRlZ29yw61hcyBlbiBjb21wYXJhY2nDs24gY29uICJTUCIgeSAiRk8iLCBxdWUgZXN0w6FuIG3DoXMgY29uY2VudHJhZGFzwqBlbsKgTE8uDQoNCkdyYWZpY28gMjogRXN0ZSBncsOhZmljbyBkZSBiYXJyYXMgYXBpbGFkYXMgdmVydGljYWwgbXVlc3RyYSBsYSBwcm9wb3JjacOzbiBkZSBjYWRhIMOhcmVhIGRlIGludmVzdGlnYWNpw7NuIChTUCwgRk8sIEZDLCBDTykgZGVudHJvIGRlIGNhZGEgY2F0ZWdvcsOtYSAoSEksIExPLCBNRCwgVkgsIG1hcmcpLiBMYXMgYmFycmFzIHJlcHJlc2VudGFuIGxhcyBwcm9wb3JjaW9uZXMsIGNvbiBsYSBzaWd1aWVudGUgZGlzdHJpYnVjacOzbjoNCg0KSEkgKGFsdGEpOiBEaXN0cmlidWNpw7NuIGVxdWlsaWJyYWRhIGVudHJlIFNQIHkgRk8sIGNvbiBtZW5vciBwcmVzZW5jaWEgZGUgRkMgeSBDTy4NCkxPIChiYWphKTogUHJlZG9taW5pbyBkZSBGQyB5IENPLCBtZW5vciByZXByZXNlbnRhY2nDs24gZGUgU1AgeSBGTy4NCk1EIChtZWRpYSk6IFByaW5jaXBhbG1lbnRlIEZDIHkgQ08sIHNpbWlsYXIgYSBMTy4NClZIIChtdXkgYWx0YSk6IE1heW9yIGRpdmVyc2lkYWQsIGNvbiB0b2RhcyBsYXMgw6FyZWFzIHJlcHJlc2VudGFkYXMsIGF1bnF1ZSBwcmVkb21pbmEgRkMuDQptYXJnIChtYXJnaW5hbCk6IERpc3RyaWJ1Y2nDs24gbcOhcyBiYWxhbmNlYWRhIGVudHJlIGxhcyDDoXJlYXMsIGNvbiBsaWdlcmEgcHJlZG9taW5hbmNpYcKgZGXCoENPLg0KDQoNCkdyYWZpY28gMzogRXN0ZSBncsOhZmljbyBkZSBiYXJyYXMgYXBpbGFkYXMgaG9yaXpvbnRhbCBtdWVzdHJhIGxhIHByb3BvcmNpw7NuIGRlbCBlc3RhdHVzICgwIHkgMSkgZGVudHJvIGRlIGNhZGEgw6FyZWEgZGUgaW52ZXN0aWdhY2nDs24gKG1hcmcsIFNQLCBGTywgRkMsIENPKToNCg0KbWFyZzogTWF5b3IgcHJvcG9yY2nDs24gZGUgZXN0YXR1cyAxLg0KU1A6IFByZWRvbWluaW8gZGVsIGVzdGF0dXMgMCwgY29uIHVuYSBwcm9wb3JjacOzbiBzaWduaWZpY2F0aXZhIGRlIGVzdGF0dXMgMS4NCkZPOiBTaW1pbGFyIGEgU1AsIGNvbiBtw6FzIGVzdGF0dXMgMC4NCkZDOiBNYXlvcml0YXJpYW1lbnRlIGVzdGF0dXMgMCwgY29uIHVuYSBtZW5vciBwcm9wb3JjacOzbiBkZSBlc3RhdHVzIDEuDQpDTzogUHJlZG9taW5pbyBkZSBlc3RhdHVzIDAsIHBlcm8gY29uIHVuYSBidWVuYSByZXByZXNlbnRhY2nDs27CoGRlwqBlc3RhdHVzwqAxLg0KDQpHcmFmaWNvIDQ6IEVzdGUgZ3LDoWZpY28gZXMgdW4gZ3LDoWZpY28gZGUgYmFycmFzIGFwaWxhZGFzIHF1ZSBtdWVzdHJhIGxhIHByb3BvcmNpw7NuIGRlIGRpZmVyZW50ZXMgZW5mb3F1ZXMgKFNQLCBGTywgRkMsIENPKSBlbiBmdW5jacOzbiBkZWwgZXN0YWRvIGRlIGxhcyB1bml2ZXJzaWRhZGVzICgwIHkgMSkuDQpFbCBlamUgeSByZXByZXNlbnRhIGxhIHByb3BvcmNpw7NuIGRlIHVuaXZlcnNpZGFkZXMgZW4gY2FkYSBjYXRlZ29yw61hIGRlIGVuZm9xdWUuDQpFbCBlamUgeCByZXByZXNlbnRhIGxvcyBlc3RhZG9zIGRlIGxhcyB1bml2ZXJzaWRhZGVzICgwIHkgMSkuDQpMYXMgY2F0ZWdvcsOtYXMgZGUgZW5mb3F1ZSBlc3TDoW4gY29kaWZpY2FkYXMgZW4gZGlmZXJlbnRlcyBjb2xvcmVzLiAgICAgICANCiogU2Ugb2JzZXJ2YSBxdWUgcGFyYSBhbWJvcyBlc3RhZG9zICgwIHkgMSksIGxhcyBwcm9wb3JjaW9uZXMgZGUgbG9zIGVuZm9xdWVzIChTUCwgRk8sIEZDLCBDTykgc29uIHJlbGF0aXZhbWVudGUgc2ltaWxhcmVzLipMYXMgdW5pdmVyc2lkYWRlcyBjb24gZWwgZXN0YWRvIDAgcGFyZWNlbiB0ZW5lciB1bmEgcHJvcG9yY2nDs24gbGlnZXJhbWVudGUgbWF5b3IgZW4gbGEgY2F0ZWdvcsOtYSBDTyBlbiBjb21wYXJhY2nDs24gY29uIGxhcyB1bml2ZXJzaWRhZGVzIGNvbiBlbCBlc3RhZG8gMS4gTGEgY2F0ZWdvcsOtYSBTUCBlcyBsYSBtZW5vcyByZXByZXNlbnRhZGEgZW7CoGFtYm9zwqBlc3RhZG9zDQoNCg0KR3JhZmljbyA1IDogRXN0ZSBncsOhZmljbyBlcyBvdHJvIGdyw6FmaWNvIGRlIGJhcnJhcyBhcGlsYWRhcywgcGVybyBlbiBlc3RlIGNhc28gbXVlc3RyYSBsYSBwcm9wb3JjacOzbiBkZSBpbnZlc3RpZ2FjacOzbiAoVkgsIE1ELCBMTywgSEkpIGVuIGZ1bmNpw7NuIGRlbCBlc3RhZG8gZGUgbGFzIHVuaXZlcnNpZGFkZXMgKDAgeSAxKS4gRWwgZWplIHkgcmVwcmVzZW50YSBsYXMgZGlmZXJlbnRlcyBjYXRlZ29yw61hcyBkZSBpbnZlc3RpZ2FjacOzbiwgZWwgZWplIHggcmVwcmVzZW50YSBsYSBwcm9wb3JjacOzbiBkZSB1bml2ZXJzaWRhZGVzIGVuIGNhZGEgZXN0YWRvICgwIHkgMSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbiBsYSBjYXRlZ29yw61hIFZIIChtdXkgYWx0YSksIGxhIG1heW9yw61hIGRlIGxhcyB1bml2ZXJzaWRhZGVzIGVzdMOhbiBlbiBlbCBlc3RhZG8gMS4gRW4gbGFzIGNhdGVnb3LDrWFzIE1EIChtZWRpYSkgeSBMTyAoYmFqYSksIGhheSB1bmEgbWV6Y2xhIG3DoXMgZXF1aWxpYnJhZGEgZW50cmUgbG9zIGVzdGFkb3MgMCB5IDEsIGF1bnF1ZSBlbCBlc3RhZG8gMCBwYXJlY2UgZXN0YXIgbGlnZXJhbWVudGUgbcOhcyByZXByZXNlbnRhZG8gZW4gTE8uIEVuIGxhIGNhdGVnb3LDrWEgSEkgKGFsdGEpLCBsYSBtYXlvcsOtYSBkZSBsYXMgdW5pdmVyc2lkYWRlcyBlc3TDoW7CoGVuwqBlbMKgZXN0YWRvwqAwDQoNCg0KDQpHcmFmaWNvIDY6RWwgZWplIHkgcmVwcmVzZW50YSBsYSBwcm9wb3JjacOzbiBkZSB1bml2ZXJzaWRhZGVzIGVuIGNhZGEgbml2ZWwgZGUgaW52ZXN0aWdhY2nDs24uRWwgZWplIHggcmVwcmVzZW50YSBsb3MgZXN0YWRvcyBkZSBsYXMgdW5pdmVyc2lkYWRlcyAoMCB5IDEpLkxvcyBuaXZlbGVzIGRlIGludmVzdGlnYWNpw7NuIGVzdMOhbiBjb2RpZmljYWRvcyBlbiBkaWZlcmVudGVzIGNvbG9yZXM6IFZIIChNdXkgQWx0byksIE1EIChNZWRpbyksIExPIChCYWpvKSwgSEkgKEFsdG8pLg0KDQpFc3RhZG8gMDoNCg0KTGFzIHVuaXZlcnNpZGFkZXMgZW4gZWwgZXN0YWRvIDAgdGllbmVuIHVuYSBtYXlvciBwcm9wb3JjacOzbiBlbiBsb3Mgbml2ZWxlcyBkZSBpbnZlc3RpZ2FjacOzbiBISSAoQWx0bykgeSBMTyAoQmFqbykuDQpMYSBjYXRlZ29yw61hIEhJIChBbHRvKSBlcyBsYSBtw6FzIHJlcHJlc2VudGFkYSwgc2VndWlkYSBkZSBsYSBjYXRlZ29yw61hIExPIChCYWpvKS4NCkxhcyBjYXRlZ29yw61hcyBWSCAoTXV5IEFsdG8pIHkgTUQgKE1lZGlvKSB0aWVuZW4gdW5hIHJlcHJlc2VudGFjacOzbiBtw61uaW1hIG8gbnVsYSBlbiBlbCBlc3RhZG8gMC4NCg0KRXN0YWRvIDE6DQoNCkxhcyB1bml2ZXJzaWRhZGVzIGVuIGVsIGVzdGFkbyAxIHRpZW5lbiB1bmEgbWF5b3IgcHJvcG9yY2nDs24gZW4gbG9zIG5pdmVsZXMgZGUgaW52ZXN0aWdhY2nDs24gVkggKE11eSBBbHRvKSB5IE1EIChNZWRpbykuDQpMYSBjYXRlZ29yw61hIFZIIChNdXkgQWx0bykgZXMgbGEgbcOhcyByZXByZXNlbnRhZGEsIHNlZ3VpZGEgZGUgbGEgY2F0ZWdvcsOtYSBNRCAoTWVkaW8pLg0KTGEgcHJvcG9yY2nDs24gZGUgbGFzIGNhdGVnb3LDrWFzIExPIChCYWpvKSB5IEhJIChBbHRvKSBlcyBjb25zaWRlcmFibGVtZW50ZSBtZW5vciBlbiBjb21wYXJhY2nDs24gY29uIGVsIGVzdGFkbyAwLg0KDQpQb2RlbW9zIGNvbmNsdWlyIGxvIHNpZ3VpZW50ZTogDQoNCkVzdGFkbyAwOiBFc3TDoSBhc29jaWFkbyBwcmluY2lwYWxtZW50ZSBjb24gdW5pdmVyc2lkYWRlcyBxdWUgdGllbmVuIG5pdmVsZXMgZGUgaW52ZXN0aWdhY2nDs24gYWx0b3MgKEhJKSB5IGJham9zIChMTykuIEVzdG8gc3VnaWVyZSBxdWUgZXN0YXMgdW5pdmVyc2lkYWRlcyB0aWVuZW4gdW5hIHZhcmlhYmlsaWRhZCBjb25zaWRlcmFibGUgZW4gc3VzIG5pdmVsZXMgZGUgaW52ZXN0aWdhY2nDs24sIGNvbiB1bmEgaW5jbGluYWNpw7NuIGhhY2lhIGV4dHJlbW9zIGFsdG9zIG8gYmFqb3MuDQoNCkVzdGFkbyAxOiBFc3TDoSBhc29jaWFkbyBwcmluY2lwYWxtZW50ZSBjb24gdW5pdmVyc2lkYWRlcyBxdWUgdGllbmVuIG5pdmVsZXMgZGUgaW52ZXN0aWdhY2nDs24gbXV5IGFsdG9zIChWSCkgeSBtZWRpb3MgKE1EKS4gRXN0byBpbmRpY2EgcXVlIGxhcyB1bml2ZXJzaWRhZGVzIGNvbiBlc3RlIGVzdGFkbyB0aWVuZW4gdW5hIG9yaWVudGFjacOzbiBtw6FzIGZ1ZXJ0ZSBoYWNpYSBsYSBleGNlbGVuY2lhIGVuIGludmVzdGlnYWNpw7NuLCBjb24gdW4gZW5mb3F1ZSBzaWduaWZpY2F0aXZvIGVuIG1hbnRlbmVyIG5pdmVsZXMgZGUgaW52ZXN0aWdhY2nDs24gbXV5IGFsdG9zIHkgbWVkaW9zLg0KDQpMYXMgdW5pdmVyc2lkYWRlcyBjb24gZXN0YWRvIDEgbXVlc3RyYW4gdW5hIGNsYXJhIHRlbmRlbmNpYSBoYWNpYSBuaXZlbGVzIGRlIGludmVzdGlnYWNpw7NuIG3DoXMgZWxldmFkb3MgZW4gY29tcGFyYWNpw7NuIGNvbiBsYXMgdW5pdmVyc2lkYWRlcyBjb24gZXN0YWRvIDAuDQpFc3RvIHBvZHLDrWEgaW1wbGljYXIgcXVlIGxhcyB1bml2ZXJzaWRhZGVzIGVuIGVsIGVzdGFkbyAxIHRpZW5lbiBtw6FzIHJlY3Vyc29zLCBtZWpvcmVzIHByb2dyYW1hcyBkZSBpbnZlc3RpZ2FjacOzbiBvIHBvbMOtdGljYXMgcXVlIGZhdm9yZWNlbiBlbCBkZXNhcnJvbGxvIGRlIGxhIGludmVzdGlnYWNpw7NuIGRlIGFsdG8gbml2ZWwuDQpFbCBncsOhZmljbyBwcm9wb3JjaW9uYSB1bmEgdmlzacOzbiBjbGFyYSBkZSBjw7NtbyBsb3Mgbml2ZWxlcyBkZSBpbnZlc3RpZ2FjacOzbiBlc3TDoW4gZGlzdHJpYnVpZG9zIGVuIGZ1bmNpw7NuIGRlbCBlc3RhZG8gZGUgbGFzIHVuaXZlcnNpZGFkZXMsIGluZGljYW5kbyBxdWUgZWwgZXN0YWRvIDEgc2UgYXNvY2lhIGNvbiB1bmEgbWF5b3IgY2FsaWRhZCB5IGNhbnRpZGFkIGVuIGludmVzdGlnYWNpw7NuIGNvbXBhcmFkbyBjb27CoGVswqBlc3RhZG/CoDAuDQoNCiMjIyMgQUMgUGFyZWphcyBUb3RhbGVzIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNCiMjIyMjIENvbnRpbmdlbmNpYXMNCmBgYHtyIFRhYmxhc19kZV9Db250aW5nZW5jaWEsIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0KIyBWZXJpZmljYXIgbGEgbG9uZ2l0dWQgZGUgbGFzIGNvbHVtbmFzDQpjYXQoIkxvbmdpdHVkIGRlIGxhIGNvbHVtbmEgc3RhdHVzOiAiLCBsZW5ndGgoVW5pdmVyc2lkYWRfRGF0YXNldCRzdGF0dXMpLCAiXG4iKQ0KY2F0KCJMb25naXR1ZCBkZSBsYSBjb2x1bW5hIFJlc2VhcmNoOiAiLCBsZW5ndGgoVW5pdmVyc2lkYWRfRGF0YXNldCRyZXNlYXJjaCksICJcbiIpDQpjYXQoIkxvbmdpdHVkIGRlIGxhIGNvbHVtbmEgZm9jdXM6ICIsIGxlbmd0aChVbml2ZXJzaWRhZF9EYXRhc2V0JGZvY3VzKSwgIlxuIikNCg0KIyBWZXJpZmljYXIgc2kgaGF5IHZhbG9yZXMgTkENCmNhdCgiVmFsb3JlcyBOQSBlbiBzdGF0dXM6ICIsIHN1bShpcy5uYShVbml2ZXJzaWRhZF9EYXRhc2V0JHN0YXR1cykpLCAiXG4iKQ0KY2F0KCJWYWxvcmVzIE5BIGVuIFJlc2VhcmNoOiAiLCBzdW0oaXMubmEoVW5pdmVyc2lkYWRfRGF0YXNldCRyZXNlYXJjaCkpLCAiXG4iKQ0KY2F0KCJWYWxvcmVzIE5BIGVuIGZvY3VzOiAiLCBzdW0oaXMubmEoVW5pdmVyc2lkYWRfRGF0YXNldCRmb2N1cykpLCAiXG4iKQ0KDQojIEVsaW1pbmFyIGZpbGFzIGNvbiB2YWxvcmVzIE5BDQpVbml2ZXJzaWRhZF9EYXRhc2V0IDwtIG5hLm9taXQoVW5pdmVyc2lkYWRfRGF0YXNldCkNCg0KIyBWZXJpZmljYXIgbGEgbG9uZ2l0dWQgZGUgbGFzIGNvbHVtbmFzIGRlc3B1w6lzIGRlIGVsaW1pbmFyIE5BDQpjYXQoIkxvbmdpdHVkIGRlIGxhIGNvbHVtbmEgc3RhdHVzIGRlc3B1w6lzIGRlIG9taXRpciBOQTogIiwgbGVuZ3RoKFVuaXZlcnNpZGFkX0RhdGFzZXQkc3RhdHVzKSwgIlxuIikNCmNhdCgiTG9uZ2l0dWQgZGUgbGEgY29sdW1uYSBSZXNlYXJjaCBkZXNwdcOpcyBkZSBvbWl0aXIgTkE6ICIsIGxlbmd0aChVbml2ZXJzaWRhZF9EYXRhc2V0JHJlc2VhcmNoKSwgIlxuIikNCmNhdCgiTG9uZ2l0dWQgZGUgbGEgY29sdW1uYSBmb2N1cyBkZXNwdcOpcyBkZSBvbWl0aXIgTkE6ICIsIGxlbmd0aChVbml2ZXJzaWRhZF9EYXRhc2V0JGZvY3VzKSwgIlxuIikNCg0KIyBBc2VndXJhcnNlIGRlIHF1ZSB0b2RhcyBsYXMgY29sdW1uYXMgc2VhbiBmYWN0b3Jlcw0KVW5pdmVyc2lkYWRfRGF0YXNldCRzdGF0dXMgPC0gYXMuZmFjdG9yKFVuaXZlcnNpZGFkX0RhdGFzZXQkc3RhdHVzKQ0KVW5pdmVyc2lkYWRfRGF0YXNldCRyZXNlYXJjaCA8LSBhcy5mYWN0b3IoVW5pdmVyc2lkYWRfRGF0YXNldCRyZXNlYXJjaCkNClVuaXZlcnNpZGFkX0RhdGFzZXQkZm9jdXMgPC0gYXMuZmFjdG9yKFVuaXZlcnNpZGFkX0RhdGFzZXQkZm9jdXMpDQoNCiMgQ3JlYXIgeSBtb3N0cmFyIGxhcyB0YWJsYXMgZGUgY29udGluZ2VuY2lhIGNvbiBtw6FyZ2VuZXMgYWRpY2lvbmFsZXMNCnRhYmxhX3N0YXR1c19mb2N1cyA8LSBhZGRtYXJnaW5zKHRhYmxlKFVuaXZlcnNpZGFkX0RhdGFzZXQkc3RhdHVzLCBVbml2ZXJzaWRhZF9EYXRhc2V0JGZvY3VzKSkNCnRhYmxhX3Jlc2VhcmNoX2ZvY3VzIDwtIGFkZG1hcmdpbnModGFibGUoVW5pdmVyc2lkYWRfRGF0YXNldCRyZXNlYXJjaCwgVW5pdmVyc2lkYWRfRGF0YXNldCRmb2N1cykpDQp0YWJsYV9zdGF0dXNfcmVzZWFyY2ggPC0gYWRkbWFyZ2lucyh0YWJsZShVbml2ZXJzaWRhZF9EYXRhc2V0JHN0YXR1cywgVW5pdmVyc2lkYWRfRGF0YXNldCRyZXNlYXJjaCkpDQoNCiMgSW1wcmltaXIgbGFzIHRhYmxhcw0KcHJpbnQodGFibGFfc3RhdHVzX2ZvY3VzKQ0KcHJpbnQodGFibGFfcmVzZWFyY2hfZm9jdXMpDQpwcmludCh0YWJsYV9zdGF0dXNfcmVzZWFyY2gpDQpgYGANCg0KIyMjIyMgUHJvYmFiaWxpZGFkZXMNCmBgYHtyIFRhYmxhc19kZV9Qcm9iYWJpbGlkYWRlcywgZmlnLmFsaWduID0gJ2NlbnRlcid9DQphZGRtYXJnaW5zKHByb3AudGFibGUodGFibGUoVW5pdmVyc2lkYWRfRGF0YXNldCRmb2N1cywgVW5pdmVyc2lkYWRfRGF0YXNldCRyZXNlYXJjaCkpKjEwMCkNCmFkZG1hcmdpbnMocHJvcC50YWJsZSh0YWJsZShVbml2ZXJzaWRhZF9EYXRhc2V0JGZvY3VzLCBVbml2ZXJzaWRhZF9EYXRhc2V0JHN0YXR1cykpKjEwMCkNCmFkZG1hcmdpbnMocHJvcC50YWJsZSh0YWJsZShVbml2ZXJzaWRhZF9EYXRhc2V0JHJlc2VhcmNoLCBVbml2ZXJzaWRhZF9EYXRhc2V0JHN0YXR1cykpKjEwMCkNCmBgYA0KDQojIyMjIyBGcmVjdWVuY2lhcyBbQ1BGIHkgQ1BDXQ0KYGBge3IgVGFibGFzX2RlX0ZyZWN1ZW5jaWFzX0NvbmRpY2lvbmFkYXMsIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0Kcm91bmQoYWRkbWFyZ2lucyhwcm9wLnRhYmxlKHRhYmxlKFVuaXZlcnNpZGFkX0RhdGFzZXQkZm9jdXMsIFVuaXZlcnNpZGFkX0RhdGFzZXQkcmVzZWFyY2gpLCAxKSoxMDAsIDIpLCAyKQ0Kcm91bmQoYWRkbWFyZ2lucyhwcm9wLnRhYmxlKHRhYmxlKFVuaXZlcnNpZGFkX0RhdGFzZXQkZm9jdXMsIFVuaXZlcnNpZGFkX0RhdGFzZXQkcmVzZWFyY2gpLCAyKSoxMDAsIDEpLCAyKQ0KDQpyb3VuZChhZGRtYXJnaW5zKHByb3AudGFibGUodGFibGUoVW5pdmVyc2lkYWRfRGF0YXNldCRmb2N1cywgVW5pdmVyc2lkYWRfRGF0YXNldCRzdGF0dXMpLCAxKSoxMDAsIDIpLCAyKQ0Kcm91bmQoYWRkbWFyZ2lucyhwcm9wLnRhYmxlKHRhYmxlKFVuaXZlcnNpZGFkX0RhdGFzZXQkZm9jdXMsIFVuaXZlcnNpZGFkX0RhdGFzZXQkc3RhdHVzKSwgMikqMTAwLCAxKSwgMikNCg0Kcm91bmQoYWRkbWFyZ2lucyhwcm9wLnRhYmxlKHRhYmxlKFVuaXZlcnNpZGFkX0RhdGFzZXQkcmVzZWFyY2gsIFVuaXZlcnNpZGFkX0RhdGFzZXQkc3RhdHVzKSwgMSkqMTAwLCAyKSwgMikNCnJvdW5kKGFkZG1hcmdpbnMocHJvcC50YWJsZSh0YWJsZShVbml2ZXJzaWRhZF9EYXRhc2V0JHJlc2VhcmNoLCBVbml2ZXJzaWRhZF9EYXRhc2V0JHN0YXR1cyksIDIpKjEwMCwgMSksIDIpDQpgYGANCg0KIyMjIyMgUGVyZmlsZXMgW0NQRiB5IENQQ10NCmBgYHtyIEdyYWZpY29zX2RlX1BlcmZpbGVzLCBmaWcuYWxpZ24gPSAnY2VudGVyJ30NCnBsb3RjdCh0YWJsZShVbml2ZXJzaWRhZF9EYXRhc2V0JGZvY3VzLCBVbml2ZXJzaWRhZF9EYXRhc2V0JHJlc2VhcmNoKSwicm93IikNCnBsb3RjdCh0YWJsZShVbml2ZXJzaWRhZF9EYXRhc2V0JGZvY3VzLCBVbml2ZXJzaWRhZF9EYXRhc2V0JHJlc2VhcmNoKSwiY29sIikNCg0KcGxvdGN0KHRhYmxlKFVuaXZlcnNpZGFkX0RhdGFzZXQkZm9jdXMsIFVuaXZlcnNpZGFkX0RhdGFzZXQkc3RhdHVzKSwicm93IikNCnBsb3RjdCh0YWJsZShVbml2ZXJzaWRhZF9EYXRhc2V0JGZvY3VzLCBVbml2ZXJzaWRhZF9EYXRhc2V0JHN0YXR1cyksImNvbCIpDQoNCnBsb3RjdCh0YWJsZShVbml2ZXJzaWRhZF9EYXRhc2V0JHJlc2VhcmNoLCBVbml2ZXJzaWRhZF9EYXRhc2V0JHN0YXR1cyksInJvdyIpDQpwbG90Y3QodGFibGUoVW5pdmVyc2lkYWRfRGF0YXNldCRyZXNlYXJjaCwgVW5pdmVyc2lkYWRfRGF0YXNldCRzdGF0dXMpLCJjb2wiKQ0KYGBgDQoNCiMjIyMjIFBydWViYXMgZGUgSGlww7N0ZXNpcw0KYGBge3IgUHJ1ZWJhc19kZV9Db3JyZXNwb25kZW5jaWEsIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0KY2hpc3EudGVzdCh0YWJsZShVbml2ZXJzaWRhZF9EYXRhc2V0JGZvY3VzLCBVbml2ZXJzaWRhZF9EYXRhc2V0JHJlc2VhcmNoKSkNCmNoaXNxLnRlc3QodGFibGUoVW5pdmVyc2lkYWRfRGF0YXNldCRmb2N1cywgVW5pdmVyc2lkYWRfRGF0YXNldCRzdGF0dXMpKQ0KY2hpc3EudGVzdCh0YWJsZShVbml2ZXJzaWRhZF9EYXRhc2V0JHJlc2VhcmNoLCBVbml2ZXJzaWRhZF9EYXRhc2V0JHN0YXR1cykpDQpgYGANCg0KIyMjIyBBQyBQYXJlamEgw5puaWNhIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNCiMjIyMjIENvbnRpbmdlbmNpYXMgeSBSZXNpZHVhbGVzIFtSLVVSXQ0KYGBge3IgQ29udGluZ2VuY2lhc195X1Jlc2lkdWFsZXMsIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0KY2hpc3EudGVzdCh0YWJsZShVbml2ZXJzaWRhZF9EYXRhc2V0JHJlc2VhcmNoLCBVbml2ZXJzaWRhZF9EYXRhc2V0JHN0YXR1cykpJG9ic2VydmVkDQpjaGlzcS50ZXN0KHRhYmxlKFVuaXZlcnNpZGFkX0RhdGFzZXQkcmVzZWFyY2gsIFVuaXZlcnNpZGFkX0RhdGFzZXQkc3RhdHVzKSkkZXhwZWN0ZWQgDQpjaGlzcS50ZXN0KHRhYmxlKFVuaXZlcnNpZGFkX0RhdGFzZXQkcmVzZWFyY2gsIFVuaXZlcnNpZGFkX0RhdGFzZXQkc3RhdHVzKSkkcmVzaWR1YWxzDQpjaGlzcS50ZXN0KHRhYmxlKFVuaXZlcnNpZGFkX0RhdGFzZXQkcmVzZWFyY2gsIFVuaXZlcnNpZGFkX0RhdGFzZXQkc3RhdHVzKSkkc3RkcmVzDQpgYGANCg0KIyMjIyMgQ29udHJpYnVjaW9uZXMgW1ItVVJdDQpgYGB7ciBDb250cmlidWNpb25lc19SLVVSLCBmaWcuYWxpZ24gPSAnY2VudGVyJ30NCmNoaXNxLnRlc3QodGFibGUoVW5pdmVyc2lkYWRfRGF0YXNldCRyZXNlYXJjaCwgVW5pdmVyc2lkYWRfRGF0YXNldCRzdGF0dXMpKSRyZXNpZHVhbHNeMi9jaGlzcS50ZXN0KHRhYmxlKFVuaXZlcnNpZGFkX0RhdGFzZXQkcmVzZWFyY2gsIFVuaXZlcnNpZGFkX0RhdGFzZXQkc3RhdHVzKSkkc3RhdGlzdGljKjEwMA0KYGBgDQoNCiMjIyMjIENvcnJlc3BvbmRlbmNpYSBTaW1wbGUgVW5pZGltZW5zaW9uYWwgW1ItVVJdDQpgYGB7ciBCaXBsb3RfQ29ycmVzcG9uZGVuY2lhX1NpbXBsZV9SLVVSLCBmaWcuYWxpZ24gPSAnY2VudGVyJ30NCkNBKHRhYmxlKFVuaXZlcnNpZGFkX0RhdGFzZXQkcmVzZWFyY2gsIFVuaXZlcnNpZGFkX0RhdGFzZXQkc3RhdHVzKSwgZ3JhcGggPSBGQUxTRSkkZWlnDQpDQSh0YWJsZShVbml2ZXJzaWRhZF9EYXRhc2V0JHJlc2VhcmNoLCBVbml2ZXJzaWRhZF9EYXRhc2V0JHN0YXR1cyksIGdyYXBoID0gRkFMU0UpJGNvbA0KQ0EodGFibGUoVW5pdmVyc2lkYWRfRGF0YXNldCRyZXNlYXJjaCwgVW5pdmVyc2lkYWRfRGF0YXNldCRzdGF0dXMpLCBncmFwaCA9IEZBTFNFKSRyb3cNCmBgYA0KDQojIyMgQ29ycmVzcG9uZGVuY2lhcyBNw7psdGlwbGVzDQoNClJlY3VwZXJhbmRvIGRlIG51ZXZvIGVsIHRyYWJham8gZGUgW0BBRURNRGlhei1Nb3JhbGVzMWVkXSBzZSBkaWNlIHF1ZSBlbCBBQ1Mgc2UgcHVlZGUgZXh0ZW5kZXIgZGVzZGUgdGFibGFzIGRlIGNvbnRpbmdlbmNpYSBoYWNpYSB0YWJsYXMgZGlzeXVudGl2YXMgY29tcGxldGFzLiBFbiBlc3RhcyBsYXMgZmlsYXMgc29uIGxvcyBvYmpldG9zIGEgbG9zIGN1YWxlcyBzZSBsZXMgcmVnaXN0cmFuIGNhcmFjdGVyw61zdGljYXMgZGUgaW50ZXLDqXMgYSB0cmF2w6lzIGRlIGxhcyBjb2x1bW5hcyBxdWUgY29tcGlsYW4gbGFzIG1vZGFsaWRhZGVzIGRlIGxhcyB2YXJpYWJsZXMgY2F0ZWfDs3JpY2FzIGVzdHVkaWFkYXMgZGUgZWxsb3MuIEFzw60sIGVsIGFuw6FsaXNpcyBkZSBjb3JyZXNwb25kZW5jaWFzIG3Dumx0aXBsZSAoQUNNKSBlcyBlbCBBQyBhcGxpY2FkbyBhIHVuYSB0YWJsYSBkaXN5dW50aXZhIGNvbXBsZXRhLiBQb3IgbG8gdGFudG8sIGVuIGVsIEFDTSB1bmEgdmFyaWFibGUgY2F0ZWfDs3JpY2EgYXNpZ25hIGEgY2FkYSBvYmpldG8gZGUgdW5hIHBvYmxhY2nDs24gdW5hIG1vZGFsaWRhZCBhIHRyYXbDqXMgZGUgbGEgY3VhbCBsb3MgcGFydGljaW9uYSBleGNsdXNpdmEgeSBleGhhdXN0aXZhbWVudGUuDQoNCkVzdGEgc2VjY2nDs24gZXMgZGVzYXJyb2xsYWRhIGNvbW8gYWx0ZXJuYXRpdmEgZGUgY29tcGxldGl0dWQgZGVsIGFuw6FsaXNpcyBkZSBjb3JyZXNwb25kZW5jaWFzIHNpbXBsZXMgcXVlIGVuIGxhIFtzZWNjacOzbiAxMV0oI3NlYzExKSBmdWUgaW5hcHJlY2lhYmxlIGRlYmlkbyBhIGxhIHVuaWRpbWVuc2lvbmFsaWRhZCBkZSBsYSByZXByZXNlbnRhY2nDs24gZGUgbG9zIGRhdG9zIGEgbml2ZWwgZGUgcHJveWVjY2nDs24gZGUgbGFzIHZhcmlhYmxlcyBjYXRlZ8OzcmljYXMgcXVlIGN1bXBsaWVyb24gbGEgaGlww7N0ZXNpcyBkZSBkZXBlbmRlbmNpYS4gUG9yIGxvIHRhbnRvLCBkZWwgdHJhdGFtaWVudG8gY29uanVudG8gZGUgdG9kYXMgbGFzIHZhcmFpYmxlcyBjYXRlZ8OzcmljYXMgc2UgZXNwZXJhIG9idGVuZXIgdW5hIHJlcHJlc2VudGFjacOzbiBlbiBlbCBwcmltZXIgcGxhbm8gZmFjdG9yaWFsLg0KDQojIyMgUGxhbnRlYW1pZW50byBkZWwgUHJvYmxlbWENCg0KQ29uIGJhc2UgZW4gbGFzIHZhcmlhYmxlcyBjdWFsaXRhdGl2YXMgZGVsIGNvbmp1bnRvIGRlIGRhdG9zIGRlc2NyaXRvIGVuIGxhIFtzZWNjacOzbiAyXSgjc2VjMikgc2UgZGVtYW5kYSBkZXNhcnJvbGxhciBlbCBhbsOhbGlzaXMgZGUgY29ycmVzcG9uZGVuY2lhcyBtw7psdGlwbGVzIHBhcmEgbG9ncmFyIHVuYSByZXByZXNlbnRhY2nDs24gZ3LDoWZpY2EgZW4gZWwgcHJpbWVyIHBsYW5vIGZhY3RvcmlhbCwgZGViaWRvIGEgbGEgaW1wb3NpYmlsaWRhZCBkZSBsb2dyYXJsbyBlbiBlbCBhbsOhbGlzaXMgZGUgY29ycmVzcG9uZGVuY2lhcyBzaW1wbGUuDQoNCiMjIyBEZXNhcnJvbGxvIGRlbCBBbsOhbGlzaXMgey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KTGEgbmF2ZWdhY2nDs24gYSB0cmF2w6lzIGRlIGxhcyBwZXN0YcOxYXMgcGVybWl0ZSB2aXN1YWxpemFyIG9iamV0b3MgbWF0cmljaWFsZXMgeSBncsOhZmljb3MgcXVlIGF5dWRhbiBhIGRlc2Fycm9sbGFyIGUgaW50ZXJwcmV0YXIgZWwgYW7DoWxpc2lzIGRlIGNvcnJlc3BvbmRlbmNpYXMgbcO6bHRpcGxlIChBQ00pIGVudHJlIGxhcyB2YXJpYWJsZXMgY2F0ZWfDs3JpY2FzIGRlbCBjb25qdW50byBkZSBkYXRvcyBkZXNjcml0byBlbiBsYSBbc2VjY2nDs24gMl0oI3NlYzIpLg0KDQpBbsOhbGlzaXMgZGUgbGEgVGFibGEgZGUgVmFsb3JlcyBQcm9waW9zIChBQ00gKQ0KTGEgdGFibGEgcHJvcG9yY2lvbmFkYSBtdWVzdHJhIGxvcyB2YWxvcmVzIHByb3Bpb3MgKGVpZ2VudmFsdWVzKSwgZWwgcG9yY2VudGFqZSBkZSB2YXJpYW56YSBleHBsaWNhZG8gcG9yIGNhZGEgZGltZW5zacOzbiB5IGVsIHBvcmNlbnRhamUgYWN1bXVsYWRvIGRlIHZhcmlhbnphIGV4cGxpY2FkbyBwb3IgbGFzIGRpbWVuc2lvbmVzIGVuIHVuIEFuw6FsaXNpcyBkZSBDb3JyZXNwb25kZW5jaWFzIE3Dumx0aXBsZXMgKEFDTSkuDQoxLiBFaWdlbnZhbHVlIChWYWxvciBQcm9waW8pOiBSZXByZXNlbnRhIGxhIGNhbnRpZGFkIGRlIHZhcmlhbnphIGNhcHR1cmFkYSBwb3IgY2FkYSBkaW1lbnNpw7NuLiBWYWxvcmVzIG3DoXMgYWx0b3MgaW5kaWNhbiBxdWUgbGEgZGltZW5zacOzbiBleHBsaWNhIHVuYSBtYXlvciBwYXJ0ZSBkZSBsYSB2YXJpYWJpbGlkYWQgdG90YWwgZW4gbG9zIGRhdG9zLg0KMi4gUGVyY2VudGFnZSBvZiBWYXJpYW5jZSAoUG9yY2VudGFqZSBkZSBWYXJpYW56YSk6IEluZGljYSBlbCBwb3JjZW50YWplIGRlIGxhIHZhcmlhbnphIHRvdGFsIGV4cGxpY2FkYSBwb3IgY2FkYSBkaW1lbnNpw7NuIGluZGl2aWR1YWxtZW50ZS4gRXMgw7p0aWwgcGFyYSBkZXRlcm1pbmFyIHF1w6kgZGltZW5zaW9uZXMgc29uIGxhcyBtw6FzIGluZm9ybWF0aXZhcy4NCjMuIEN1bXVsYXRpdmUgUGVyY2VudGFnZSBvZiBWYXJpYW5jZSAoUG9yY2VudGFqZSBBY3VtdWxhZG8gZGUgVmFyaWFuemEpOiBNdWVzdHJhIGVsIHBvcmNlbnRhamUgdG90YWwgZGUgbGEgdmFyaWFuemEgZXhwbGljYWRhIGFsIGlyIGFjdW11bGFuZG8gZGltZW5zaW9uZXMuIEF5dWRhIGEgZW50ZW5kZXIgY3XDoW50YSB2YXJpYW56YSBzZSBoYSBleHBsaWNhZG8gYWwgY29uc2lkZXJhciBtw7psdGlwbGVzIGRpbWVuc2lvbmVzIGp1bnRhcy4NClNpZ25pZmljYW5jaWEgZGUgbGFzIERpbWVuc2lvbmVzOiBMYXMgZG9zIHByaW1lcmFzIGRpbWVuc2lvbmVzIChEaW0gMSB5IERpbSAyKSBqdW50YXMgZXhwbGljYW4gYXByb3hpbWFkYW1lbnRlIGVsIDQwJSBkZSBsYSB2YXJpYW56YSB0b3RhbC4gTGFzIHRyZXMgcHJpbWVyYXMgZGltZW5zaW9uZXMgZXhwbGljYW4gbcOhcyBkZWwgNTAlIGRlIGxhIHZhcmlhbnphIHRvdGFsLiBDb24gY3VhdHJvIGRpbWVuc2lvbmVzLCBzZSBleHBsaWNhIG3DoXMgZGVsIDcwJSBkZSBsYSB2YXJpYW56YS4gTGFzIHNlaXMgZGltZW5zaW9uZXMganVudGFzIGV4cGxpY2FuIGVsIDEwMCUgZGUgbGEgdmFyaWFuemEsIGxvIGN1YWwgZXMgZXNwZXJhZG8gZW4gdW4gQUNNIHlhIHF1ZSB0b2RhcyBsYXMgZGltZW5zaW9uZXMgY29tYmluYWRhcyBkZWJlbiBleHBsaWNhciB0b2RhIGxhIHZhcmlhYmlsaWRhZCBlbiBsb3MgZGF0b3MuDQpEaW1lbnNpb25lcyBNw6FzIEluZm9ybWF0aXZhczogTGFzIHByaW1lcmFzIGRvcyBkaW1lbnNpb25lcyBzb24gbGFzIG3DoXMgaW5mb3JtYXRpdmFzLCBleHBsaWNhbmRvIGluZGl2aWR1YWxtZW50ZSBtw6FzIGRlbCAyMCUgeSAxOSUgZGUgbGEgdmFyaWFuemEgcmVzcGVjdGl2YW1lbnRlLiBMYXMgZGltZW5zaW9uZXMgMyB5IDQgdGFtYmnDqW4gc29uIGltcG9ydGFudGVzLCBjYWRhIHVuYSBleHBsaWNhbmRvIGFscmVkZWRvciBkZWwgMTYlIGRlIGxhIHZhcmlhbnphLiBMYXMgZGltZW5zaW9uZXMgNSB5IDYsIGF1bnF1ZSBtZW5vcyBpbmZvcm1hdGl2YXMgaW5kaXZpZHVhbG1lbnRlLCBhw7puIGFwb3J0YW4gdW5hIGNhbnRpZGFkIHNpZ25pZmljYXRpdmEgZGUgaW5mb3JtYWNpw7NuIGNvbiAxNC44MSUgeSAxMi4xNyUgcmVzcGVjdGl2YW1lbnRlLg0KRW4gYXBsaWNhY2lvbmVzIHByw6FjdGljYXMsIHNlIHBvZHLDrWEgZGVjaWRpciBjZW50cmFyc2UgZW4gbGFzIHByaW1lcmFzIDMgbyA0IGRpbWVuc2lvbmVzLCB5YSBxdWUganVudGFzIGV4cGxpY2FuIHVuYSBwYXJ0ZSBzaWduaWZpY2F0aXZhIGRlIGxhIHZhcmlhbnphIChtw6FzIGRlbCA3MCUpLiAgU2luIGVtYmFyZ28sIHNpIHNlIG5lY2VzaXRhIHVuYSByZXByZXNlbnRhY2nDs24gY29tcGxldGEgZGUgbG9zIGRhdG9zLCBzZSBkZWJlbiBjb25zaWRlcmFyIHRvZGFzIGxhcyBkaW1lbnNpb25lcy4gRXN0ZSBhbsOhbGlzaXMgcGVybWl0ZSBjb21wcmVuZGVyIG1lam9yIGxhIGVzdHJ1Y3R1cmEgZGUgbGEgdmFyaWFiaWxpZGFkIGVuIGxvcyBkYXRvcyB5IGPDs21vIHNlIGRpc3RyaWJ1eWUgZW50cmUgbGFzIGRpZmVyZW50ZXMgZGltZW5zaW9uZXMgZGVsIEFDTS4NCg0KQ0FMSURBRCBERSBSRVBSRVNFTlRBQ0nDk04NCkRpbWVuc2lvbmVzIHkgVmFyaWFuemENCkVsIGdyw6FmaWNvIGRlIE1DQSBwcmVzZW50YSBkb3MgZGltZW5zaW9uZXMgcHJpbmNpcGFsZXM6DQpEaW0xICgyMC42JSk6IEV4cGxpY2EgZWwgMjAuNiUgZGUgbGEgdmFyaWFuemEgdG90YWwgZGUgbG9zIGRhdG9zLg0KRGltMiAoMTkuMSUpOiBFeHBsaWNhIGVsIDE5LjElIGRlIGxhIHZhcmlhbnphIHRvdGFsLg0KSW50ZXJwcmV0YWNpw7NuIGRlIENhdGVnb3LDrWFzDQpMYXMgY2F0ZWdvcsOtYXMgZXN0w6FuIHJlcHJlc2VudGFkYXMgZW4gdW4gcGxhbm8gYmlkaW1lbnNpb25hbC4gTGEgY2FsaWRhZCBkZSBsYSByZXByZXNlbnRhY2nDs24gZGUgY2FkYSBjYXRlZ29yw61hIGVuIGVzdGFzIGRpbWVuc2lvbmVzIHNlIG1pZGUgYSB0cmF2w6lzIGRlbCBjb3MyIChjb3Nlbm8gY3VhZHJhZG8pLCBxdWUgaW5kaWNhIGxhIGNvbnRyaWJ1Y2nDs24gZGUgdW5hIGNhdGVnb3LDrWEgYSBsYSBkZWZpbmljacOzbiBkZSBsYXMgZGltZW5zaW9uZXMuDQpBbsOhbGlzaXMgZGUgbGFzIENhdGVnb3LDrWFzDQpBbHRhIFJlcHJlc2VudGFjacOzbiAoYWx0byBjb3MyKToNCkMgKENhdGVnb3LDrWEgQyk6IFViaWNhZGEgZW4gbGEgcGFydGUgc3VwZXJpb3IgZGVyZWNoYSBkZWwgZ3LDoWZpY28sIG11ZXN0cmEgdW5hIGFsdGEgY2FsaWRhZCBkZSByZXByZXNlbnRhY2nDs24gZW4gYW1iYXMgZGltZW5zaW9uZXMuIFN1IGNvbG9yIHJvam8gaW50ZW5zbyBpbmRpY2EgdW4gY29zMiBhbHRvLCBsbyBxdWUgc2lnbmlmaWNhIHF1ZSBlc3RhIGNhdGVnb3LDrWEgZXN0w6EgYmllbiByZXByZXNlbnRhZGEgZW4gZWwgZXNwYWNpbyBiaWRpbWVuc2lvbmFsLg0KSCAoQ2F0ZWdvcsOtYSBIKTogVGFtYmnDqW4gYmllbiByZXByZXNlbnRhZGEsIGxvY2FsaXphZGEgY2VyY2EgZGUgbGEgY2F0ZWdvcsOtYSBDLCBjb24gdW4gY29zMiBhbHRvLg0KTW9kZXJhZGEgYSBCYWphIFJlcHJlc2VudGFjacOzbiAoYmFqbyBjb3MyKToNCkZPLCBDTywgU1AsIEZDIChDYXRlZ29yw61hcyBGTywgQ08sIFNQIHkgRkMpOiBFc3RhcyBjYXRlZ29yw61hcyBzZSBlbmN1ZW50cmFuIGVuIGxhIHBhcnRlIGluZmVyaW9yIGl6cXVpZXJkYSBkZWwgZ3LDoWZpY28geSBlc3TDoW4gbWVub3MgcmVwcmVzZW50YWRhcyBlbiBsYXMgZGltZW5zaW9uZXMgcHJpbmNpcGFsZXMuIExvcyBjb2xvcmVzIG3DoXMgdGVudWVzIChhbWFyaWxsbyBhIHZlcmRlKSBpbmRpY2FuIHVuIGNvczIgbWVub3IsIHN1Z2lyaWVuZG8gcXVlIGVzdGFzIGNhdGVnb3LDrWFzIG5vIGNvbnRyaWJ1eWVuIHNpZ25pZmljYXRpdmFtZW50ZSBhIGxhIHZhcmlhYmlsaWRhZCBjYXB0dXJhZGEgcG9yIERpbTEgeSBEaW0yLg0KRGF0b3MgZGVsIGNvczINCkxhIHRhYmxhIGluY2x1aWRhIGRlYmFqbyBkZWwgZ3LDoWZpY28gcHJvcG9yY2lvbmEgbG9zIHZhbG9yZXMgZXNwZWPDrWZpY29zIGRlIGNvczIgcGFyYSBjYWRhIGNhdGVnb3LDrWEgZW4gbGFzIGNpbmNvIGRpbWVuc2lvbmVzIHByaW5jaXBhbGVzOiBDIHkgSCBtdWVzdHJhbiB2YWxvcmVzIGNvczIgc2lnbmlmaWNhdGl2b3MgZW4gbGFzIHByaW1lcmFzIGRpbWVuc2lvbmVzLCBjb25maXJtYW5kbyBzdSBhbHRhIGNhbGlkYWQgZGUgcmVwcmVzZW50YWNpw7NuLiBGTywgQ08sIFNQLCBGQyB0aWVuZW4gdmFsb3JlcyBjb3MyIG3DoXMgZGlzdHJpYnVpZG9zLCBsbyBxdWUgcmVmbGVqYSBzdSBtZW5vciBjb250cmlidWNpw7NuIGEgbGFzIHByaW1lcmFzIGRvcyBkaW1lbnNpb25lcy4NCg0KQ09OVFJJQlVDSU9ORVMNCg0KR1JBRklDTyAxDQpDb250cmlidWNpb25lcyBEZXN0YWNhZGFzOiBIIFRpZW5lIGxhIGNvbnRyaWJ1Y2nDs24gbcOhcyBhbHRhIGEgRGltMSBjb24gbcOhcyBkZWwgNDAlLiBFc3RvIGluZGljYSBxdWUgZXN0YSB2YXJpYWJsZSBlcyBsYSBtw6FzIGluZmx1eWVudGUgZW4gbGEgY29uZmlndXJhY2nDs24gZGUgZXN0YSBkaW1lbnNpw7NuLiBCIHkgQzogQW1iYXMgdGllbmVuIGNvbnRyaWJ1Y2lvbmVzIHNpZ25pZmljYXRpdmFzLCBjb24gQiBhbHJlZGVkb3IgZGVsIDI1JSB5IEMgY2VyY2EgZGVsIDIwJS4NCkNvbnRyaWJ1Y2lvbmVzIE1vZGVyYWRhczogRk8sIENPLCBBLCBGQyAgRXN0YXMgdmFyaWFibGVzIHRpZW5lbiBjb250cmlidWNpb25lcyBtZW5vcmVzLCBjYWRhIHVuYSByZXByZXNlbnRhbmRvIGVudHJlIGVsIDUlIHkgZWwgMTAlLg0KQ29udHJpYnVjaW9uZXMgQmFqYXM6IFlIIHkgU1AgRXN0YXMgdmFyaWFibGVzIHRpZW5lbiB1bmEgY29udHJpYnVjacOzbiBtw61uaW1hLCBjb24gdmFsb3JlcyBtdXkgcG9yIGRlYmFqbyBkZWwgNSUuDQpMYXMgdmFyaWFibGVzIEgsIEIgeSBDIHNvbiBsYXMgbcOhcyBpbmZsdXllbnRlcyBlbiBsYSBwcmltZXJhIGRpbWVuc2nDs24gZGVsIE1DQSwgbWllbnRyYXMgcXVlIEZPLCBDTywgQSB5IEZDIHRhbWJpw6luIHRpZW5lbiB1biBwYXBlbCBwZXJvIG1lbm9zIHNpZ25pZmljYXRpdm8uIExhcyB2YXJpYWJsZXMgWUggeSBTUCBjb250cmlidXllbiBtdXkgcG9jbyBhIGVzdGEgZGltZW5zacOzbi4NCkVsIGdyw6FmaWNvIG11ZXN0cmEgbGEgY29udHJpYnVjacOzbiBkZSBsYXMgdmFyaWFibGVzIGEgbGEgZGltZW5zacOzbiAyIChEaW0yKSBlbiBlbCBhbsOhbGlzaXMgZGUgY29ycmVzcG9uZGVuY2lhcyBtw7psdGlwbGVzIChNQ0EpLg0KDQpHUkFGSUNPIDINCg0KQ29udHJpYnVjaW9uZXMgRGVzdGFjYWRhczogQyBUaWVuZSBsYSBjb250cmlidWNpw7NuIG3DoXMgYWx0YSBhIERpbTIgY29uIG3DoXMgZGVsIDQwJS4gRXN0byBpbmRpY2EgcXVlIGVzdGEgdmFyaWFibGUgZXMgbGEgbcOhcyBpbmZsdXllbnRlIGVuIGxhIGNvbmZpZ3VyYWNpw7NuIGRlIGVzdGEgZGltZW5zacOzbi4gRk86IExhIHNpZ3VpZW50ZSBjb250cmlidWNpw7NuIG3DoXMgc2lnbmlmaWNhdGl2YSBjb24gYWxyZWRlZG9yIGRlbCAyMCUuIEI6IFRhbWJpw6luIHRpZW5lIHVuYSBjb250cmlidWNpw7NuIGNvbnNpZGVyYWJsZSwgY2VyY2FuYSBhbCAxNSUuDQpDb250cmlidWNpb25lcyBNb2RlcmFkYXMgOiBGQywgQ08gRXN0YXMgdmFyaWFibGVzIHRpZW5lbiBjb250cmlidWNpb25lcyBpbnRlcm1lZGlhcywgY2FkYSB1bmEgcmVwcmVzZW50YW5kbyBlbnRyZSBlbCA1JSB5IGVsIDEwJS4NCkNvbnRyaWJ1Y2lvbmVzIEJhamFzOiBILCBTUCwgQSwgWUggIEVzdGFzIHZhcmlhYmxlcyB0aWVuZW4gdW5hIGNvbnRyaWJ1Y2nDs24gbcOtbmltYSwgY29uIHZhbG9yZXMgbXV5IHBvciBkZWJham8gZGVsIDUlLg0KQ29tcGFyYWNpw7NuIGNvbiBEaW0xIDogRW4gY29tcGFyYWNpw7NuIGNvbiBlbCBncsOhZmljbyBkZSBEaW0xOiBDIGhhIHBhc2FkbyBhIHNlciBsYSBtw6FzIGluZmx1eWVudGUgZW4gRGltMiwgbWllbnRyYXMgcXVlIEgsIHF1ZSBlcmEgbGEgbcOhcyBpbmZsdXllbnRlIGVuIERpbTEsIGFob3JhIHRpZW5lIHVuYSBjb250cmlidWNpw7NuIG11Y2hvIG1lbm9yLiBGTyB5IEIgdGFtYmnDqW4gc29uIG3DoXMgaW5mbHV5ZW50ZXMgZW4gRGltMiBlbiBjb21wYXJhY2nDs24gY29uIERpbTEuDQpMYXMgdmFyaWFibGVzIEMsIEZPIHkgQiBzb24gbGFzIG3DoXMgaW5mbHV5ZW50ZXMgZW4gbGEgc2VndW5kYSBkaW1lbnNpw7NuIGRlbCBNQ0EsIG1pZW50cmFzIHF1ZSBILCBxdWUgZXJhIHByb21pbmVudGUgZW4gRGltMSwgdGllbmUgdW4gcGFwZWwgbWVub3IgZW4gRGltMi4gT3RyYXMgdmFyaWFibGVzIGNvbW8gRkMgeSBDTyB0YW1iacOpbiBjb250cmlidXllbiwgcGVybyBlbiBtZW5vciBtZWRpZGEuIExhcyB2YXJpYWJsZXMgU1AsIEEgeSBZSCB0aWVuZW4gY29udHJpYnVjaW9uZXMgbcOtbmltYXMgZW4gZXN0YSBkaW1lbnNpw7NuLg0KDQpHcmFmaWNvIDMNCg0KQ29udHJpYnVjaW9uZXMgRGVzdGFjYWRhczogU1AgVGllbmUgbGEgY29udHJpYnVjacOzbiBtw6FzIGFsdGEgYSBEaW0zIGNvbiBtw6FzIGRlbCA0MCUuIEVzdG8gaW5kaWNhIHF1ZSBlc3RhIHZhcmlhYmxlIGVzIGxhIG3DoXMgaW5mbHV5ZW50ZSBlbiBsYSBjb25maWd1cmFjacOzbiBkZSBlc3RhIGRpbWVuc2nDs24uIENPIExhIHNpZ3VpZW50ZSBjb250cmlidWNpw7NuIG3DoXMgc2lnbmlmaWNhdGl2YSBjb24gYWxyZWRlZG9yIGRlbCAyNSUuIEZPIFRhbWJpw6luIHRpZW5lIHVuYSBjb250cmlidWNpw7NuIGNvbnNpZGVyYWJsZSwgY2VyY2FuYSBhbCAyMCUuDQpDb250cmlidWNpb25lcyBNb2RlcmFkYXM6IEIgRXN0YSB2YXJpYWJsZSB0aWVuZSB1bmEgY29udHJpYnVjacOzbiBpbnRlcm1lZGlhLCBjZXJjYW5hIGFsIDUlLg0KQ29udHJpYnVjaW9uZXMgQmFqYXM6IEcsIEgsIEEsIEZDLCBZSCBFc3RhcyB2YXJpYWJsZXMgdGllbmVuIHVuYSBjb250cmlidWNpw7NuIG3DrW5pbWEsIGNvbiB2YWxvcmVzIG11eSBwb3IgZGViYWpvIGRlbCA1JS4NCkNvbXBhcmFjacOzbiBjb24gRGltMSB5IERpbTIgOiBFbiBjb21wYXJhY2nDs24gY29uIGxvcyBncsOhZmljb3MgZGUgRGltMSB5IERpbTI6IFNQIHBhc2EgYSBzZXIgbGEgbcOhcyBpbmZsdXllbnRlIGVuIERpbTMsIG1pZW50cmFzIHF1ZSB0ZW7DrWEgdW5hIGNvbnRyaWJ1Y2nDs24gbcOtbmltYSBlbiBEaW0xIHkgRGltMi4gQ08geSBGTyB0YW1iacOpbiBhdW1lbnRhbiBzdSBpbmZsdWVuY2lhIGVuIERpbTMgZW4gY29tcGFyYWNpw7NuIGNvbiBEaW0xIHkgRGltMi4gQiwgcXVlIHRlbsOtYSBjb250cmlidWNpb25lcyBzaWduaWZpY2F0aXZhcyBlbiBEaW0xIHkgRGltMiwgdGllbmUgdW5hIGNvbnRyaWJ1Y2nDs24gbXVjaG8gbWVub3IgZW4gRGltMy4NCkxhcyB2YXJpYWJsZXMgU1AsIENPIHkgRk8gc29uIGxhcyBtw6FzIGluZmx1eWVudGVzIGVuIGxhIHRlcmNlcmEgZGltZW5zacOzbiBkZWwgTUNBLCBpbmRpY2FuZG8gcXVlIGVzdGFzIHZhcmlhYmxlcyBleHBsaWNhbiB1bmEgcGFydGUgc2lnbmlmaWNhdGl2YSBkZSBsYSB2YXJpYWJpbGlkYWQgZW4gZXN0YSBkaW1lbnNpw7NuLiBPdHJhcyB2YXJpYWJsZXMgY29tbyBCIHRpZW5lbiBjb250cmlidWNpb25lcyBtZW5vcmVzLCBtaWVudHJhcyBxdWUgRywgSCwgQSwgRkMgeSBZSCB0aWVuZW4gdW5hIGluZmx1ZW5jaWEgbcOtbmltYSBlbiBlc3RhIGRpbWVuc2nDs24uDQoNCkdyYWZpY28gNA0KDQpDb250cmlidWNpb25lcyBEZXN0YWNhZGFzOiBTUCBUaWVuZSBsYSBjb250cmlidWNpw7NuIG3DoXMgYWx0YSBhIERpbTQsIGNvbiBjYXNpIGVsIDUwJS4gRXN0byBpbmRpY2EgcXVlIGVzdGEgdmFyaWFibGUgZXMgbGEgbcOhcyBpbmZsdXllbnRlIGVuIGxhIGNvbmZpZ3VyYWNpw7NuIGRlIGVzdGEgZGltZW5zacOzbi4gQ08gTGEgc2lndWllbnRlIGNvbnRyaWJ1Y2nDs24gbcOhcyBzaWduaWZpY2F0aXZhLCBjb24gYWxyZWRlZG9yIGRlbCAyNSUuIEZPIFRhbWJpw6luIHRpZW5lIHVuYSBjb250cmlidWNpw7NuIGNvbnNpZGVyYWJsZSwgY2VyY2FuYSBhbCAyMCUuDQpDb250cmlidWNpb25lcyBNb2RlcmFkYXM6IEZDIEVzdGEgdmFyaWFibGUgdGllbmUgdW5hIGNvbnRyaWJ1Y2nDs24gaW50ZXJtZWRpYSwgY2VyY2FuYSBhbCAxMCUuDQpDb250cmlidWNpb25lcyBCYWphczogRywgQiwgSCwgQSwgWUggRXN0YXMgdmFyaWFibGVzIHRpZW5lbiB1bmEgY29udHJpYnVjacOzbiBtw61uaW1hLCBjb24gdmFsb3JlcyBtdXkgcG9yIGRlYmFqbyBkZWwgMTAlLg0KQ29tcGFyYWNpw7NuIGNvbiBEaW0xLCBEaW0yIHkgRGltMw0KRW4gY29tcGFyYWNpw7NuIGNvbiBsb3MgZ3LDoWZpY29zIGRlIERpbTEsIERpbTIgeSBEaW0zOiBTUCBlcyBudWV2YW1lbnRlIGxhIG3DoXMgaW5mbHV5ZW50ZSBlbiBEaW00LCBzaW1pbGFyIGEgc3UgY29udHJpYnVjacOzbiBkZXN0YWNhZGEgZW4gRGltMy4gQ08geSBGTyBtYW50aWVuZW4gdW5hIGluZmx1ZW5jaWEgc2lnbmlmaWNhdGl2YSBlbiBEaW00LCBzaW1pbGFyIGEgc3UgaW5mbHVlbmNpYSBlbiBEaW0zLiBGQyB0aWVuZSB1bmEgY29udHJpYnVjacOzbiBtZW5vciBwZXJvIG5vdGFibGUgZW4gRGltNCwgbWllbnRyYXMgcXVlIGVuIGxhcyBkaW1lbnNpb25lcyBhbnRlcmlvcmVzIHRlbsOtYSB1bmEgaW5mbHVlbmNpYSBtw61uaW1hLiBCIHkgSCwgcXVlIHRlbsOtYW4gY29udHJpYnVjaW9uZXMgbcOhcyBzaWduaWZpY2F0aXZhcyBlbiBEaW0xIHkgRGltMiwgdGllbmVuIHVuYSBjb250cmlidWNpw7NuIG11Y2hvIG1lbm9yIGVuIERpbTQuDQpMYXMgdmFyaWFibGVzIFNQLCBDTyB5IEZPIHNvbiBsYXMgbcOhcyBpbmZsdXllbnRlcyBlbiBsYSBjdWFydGEgZGltZW5zacOzbiBkZWwgTUNBLCBpbmRpY2FuZG8gcXVlIGVzdGFzIHZhcmlhYmxlcyBleHBsaWNhbiB1bmEgcGFydGUgc2lnbmlmaWNhdGl2YSBkZSBsYSB2YXJpYWJpbGlkYWQgZW4gZXN0YSBkaW1lbnNpw7NuLiBMYSB2YXJpYWJsZSBGQyB0YW1iacOpbiB0aWVuZSB1bmEgY29udHJpYnVjacOzbiBub3RhYmxlLiBPdHJhcyB2YXJpYWJsZXMsIGNvbW8gRywgQiwgSCwgQSB5IFlILCB0aWVuZW4gdW5hIGluZmx1ZW5jaWEgbcOtbmltYSBlbiBlc3RhIGRpbWVuc2nDs24uDQoNCkPDoWxjdWxvIGRlbCBVbWJyYWwgUHJvbWVkaW8NCkxhIGzDrW5lYSByb2phIGVuIGVsIGRpYWdyYW1hIHJlcHJlc2VudGEgZWwgdW1icmFsIHByb21lZGlvIGRlIGNvbnRyaWJ1Y2nDs24gZXNwZXJhZGEgZGUgbGFzIHZhcmlhYmxlcyBhIGxhIGRpbWVuc2nDs24gZW4gY3Vlc3Rpw7NuLiBFc3RlIHVtYnJhbCBzZSBjYWxjdWxhIGNvbW8gZWwgdmFsb3IgZGUgY29udHJpYnVjacOzbiBxdWUgc2UgZXNwZXJhcsOtYSBzaSB0b2RhcyBsYXMgdmFyaWFibGVzIGNvbnRyaWJ1eWVyYW4gcG9yIGlndWFsIGEgbGEgZGltZW5zacOzbi4gIEVsIHVtYnJhbCBwcm9tZWRpbyBkZSBjb250cmlidWNpw7NuIGVzcGVyYWRhIHNlIHB1ZWRlIGNhbGN1bGFyIGRpdmlkaWVuZG8gMTAwJSBlbnRyZSBlbCBuw7ptZXJvIHRvdGFsIGRlIHZhcmlhYmxlcyBjb25zaWRlcmFkYXMgZW4gZWwgYW7DoWxpc2lzLiBQb3IgZWplbXBsbywgc2kgaGF5IDEwIHZhcmlhYmxlcyBlbiBlbCBhbsOhbGlzaXMsIGVsIHVtYnJhbCBwcm9tZWRpbyBzZXLDrWE6DQogDQpJbnRlcnByZXRhY2nDs24NCuKAoglWYXJpYWJsZXMgcG9yIGVuY2ltYSBkZSBsYSBsw61uZWEgcm9qYTogTGFzIHZhcmlhYmxlcyBxdWUgdGllbmVuIHVuYSBjb250cmlidWNpw7NuIHBvciBlbmNpbWEgZGUgZXN0ZSB1bWJyYWwgc29uIG3DoXMgaW5mbHV5ZW50ZXMgZGUgbG8gcXVlIHNlIGVzcGVyYXLDrWEgcG9yIGF6YXIuIEVzdGFzIHZhcmlhYmxlcyB0aWVuZW4gdW5hIGltcG9ydGFuY2lhIHNpZ25pZmljYXRpdmEgZW4gbGEgY29uZmlndXJhY2nDs24gZGUgbGEgZGltZW5zacOzbi4NCuKAoglWYXJpYWJsZXMgcG9yIGRlYmFqbyBkZSBsYSBsw61uZWEgcm9qYTogTGFzIHZhcmlhYmxlcyBxdWUgdGllbmVuIHVuYSBjb250cmlidWNpw7NuIHBvciBkZWJham8gZGVsIHVtYnJhbCB0aWVuZW4gbWVub3MgaW5mbHVlbmNpYSBlbiBsYSBkaW1lbnNpw7NuIHkgbm8gc29uIHRhbiBpbXBvcnRhbnRlcyBlbiBsYSBjb25maWd1cmFjacOzbiBkZSBlc3RhLg0KRW4gbG9zIGRpYWdyYW1hcyBhbmFsaXphZG9zOg0K4oCiCUVuIERpbTEsIGxhcyB2YXJpYWJsZXMgSCwgQiB5IEMgZXN0w6FuIHBvciBlbmNpbWEgZGVsIHVtYnJhbCwgaW5kaWNhbmRvIHVuYSBhbHRhIGluZmx1ZW5jaWEuDQrigKIJRW4gRGltMiwgbGFzIHZhcmlhYmxlcyBDLCBGTyB5IEIgZXN0w6FuIHBvciBlbmNpbWEgZGVsIHVtYnJhbC4NCuKAoglFbiBEaW0zLCBsYXMgdmFyaWFibGVzIFNQLCBDTyB5IEZPIGVzdMOhbiBwb3IgZW5jaW1hIGRlbCB1bWJyYWwuDQrigKIJRW4gRGltNCwgbGFzIHZhcmlhYmxlcyBTTywgQ08geSBGTyBlc3TDoW4gcG9yIGVuY2ltYSBkZWwgdW1icmFsLg0K4oCiCUVuIERpbTUsIGxhIHZhcmlhYmxlIEIgZXMgbGEgw7puaWNhIHF1ZSBlc3RhIHBvciBlbmNpbWEgZGVsIHVtYnJhbC4NCkVzdG8gbm9zIGF5dWRhIGEgaWRlbnRpZmljYXIgcsOhcGlkYW1lbnRlIHF1w6kgdmFyaWFibGVzIHNvbiBtw6FzIHJlbGV2YW50ZXMgZW4gbGEgY29uZmlndXJhY2nDs24gZGUgY2FkYSBkaW1lbnNpw7NuIGRlbCBhbsOhbGlzaXMgZGUgY29ycmVzcG9uZGVuY2lhcyBtw7psdGlwbGVzLg0KDQpCSVBMT1QgQ09OIENPTlRSSUJVQ0lPTkVTDQoNCkVzdGUgZGlhZ3JhbWEgbXVlc3RyYSBsYXMgY2F0ZWdvcsOtYXMgZGUgdmFyaWFibGVzIGVuIHVuIGVzcGFjaW8gYmlkaW1lbnNpb25hbCwgcmVzdWx0YWRvIGRlbCBhbsOhbGlzaXMgZGUgY29ycmVzcG9uZGVuY2lhcyBtw7psdGlwbGVzIChNQ0EpLiBMb3MgZWplcyBEaW0xIHkgRGltMiByZXByZXNlbnRhbiBsYXMgZG9zIHByaW1lcmFzIGRpbWVuc2lvbmVzIGRlbCBNQ0EsIHF1ZSBleHBsaWNhbiBlbCAyMC42JSB5IGVsIDE5LjElIGRlIGxhIHZhcmlhYmlsaWRhZCB0b3RhbCwgcmVzcGVjdGl2YW1lbnRlLg0KSW50ZXJwcmV0YWNpw7NuIGRlIGxvcyBFbGVtZW50b3MgZGVsIERpYWdyYW1hDQpQb3NpY2nDs24gZGUgbGFzIENhdGVnb3LDrWFzOg0KQzogU2UgZW5jdWVudHJhIGVuIGxhIHBhcnRlIHN1cGVyaW9yIGRlcmVjaGEgZGVsIGdyw6FmaWNvLCBsbyBxdWUgaW5kaWNhIHF1ZSB0aWVuZSB1bmEgYWx0YSBjb250cmlidWNpw7NuIHRhbnRvIGVuIERpbTEgY29tbyBlbiBEaW0yLg0KSCB5IEk6IEVzdMOhbiBlbiBsYSBwYXJ0ZSBkZXJlY2hhLCBpbmRpY2FuZG8gdW5hIGZ1ZXJ0ZSBjb250cmlidWNpw7NuIGEgRGltMSwgcGVybyB0YW1iacOpbiB0aWVuZW4gdW5hIGxpZ2VyYSBjb250cmlidWNpw7NuIGEgRGltMi4NCkZPLCBDTywgU1AsIEEsIFlILCBWSCwgRkMgeSBCOiBFc3TDoW4gYWdydXBhZGFzIGVuIGxhIHBhcnRlIGluZmVyaW9yIGl6cXVpZXJkYSwgbG8gcXVlIHN1Z2llcmUgcXVlIHRpZW5lbiBjb250cmlidWNpb25lcyBtZW5vcmVzIGVuIGFtYmFzIGRpbWVuc2lvbmVzLg0KQ29sb3I6IEVsIGNvbG9yIGRlIGNhZGEgcHVudG8gdmFyw61hIGRlIGF6dWwgYSByb2pvLCBkb25kZSBlbCByb2pvIGluZGljYSB1bmEgbWF5b3IgY29udHJpYnVjacOzbiB5IGVsIGF6dWwgdW5hIG1lbm9yIGNvbnRyaWJ1Y2nDs24uIFBvciBsbyB0YW50bywgbGFzIGNhdGVnb3LDrWFzIGNvbW8gQywgSCB5IEkgdGllbmVuIGNvbG9yZXMgbcOhcyBjZXJjYW5vcyBhbCByb2pvLCBpbmRpY2FuZG8gdW5hIGFsdGEgY29udHJpYnVjacOzbi4NCkNvbnRyaWJ1Y2lvbmVzOiBDIFRpZW5lIGxhIG1heW9yIGNvbnRyaWJ1Y2nDs24gZW4gYW1iYXMgZGltZW5zaW9uZXMsIGxvIHF1ZSBsYSBjb252aWVydGUgZW4gdW5hIGNhdGVnb3LDrWEgbXV5IGluZmx1eWVudGUuIEggZSBJOiBUYW1iacOpbiBzb24gaW5mbHV5ZW50ZXMsIGVzcGVjaWFsbWVudGUgZW4gRGltMS4gRk8sIENPLCBTUCwgQSwgWUgsIFZILCBGQyB5IEI6IFRpZW5lbiBjb250cmlidWNpb25lcyBtw6FzIGJhamFzLCByZWZsZWphZGFzIHBvciBzdXMgY29sb3JlcyBtw6FzIGNlcmNhbm9zIGFsIGF6dWwuDQpDYXRlZ29yw61hcyBJbmZsdXllbnRlczogTGFzIGNhdGVnb3LDrWFzIEMsIEggZSBJIHNvbiBsYXMgbcOhcyBpbmZsdXllbnRlcyBlbiBsYSBjb25maWd1cmFjacOzbiBkZSBEaW0xIHkgRGltMi4gRXN0YXMgY2F0ZWdvcsOtYXMgZGViZXLDrWFuIHNlciBleGFtaW5hZGFzIG3DoXMgYSBmb25kbyBwYXJhIGVudGVuZGVyIHF1w6kgYXNwZWN0b3MgZXNwZWPDrWZpY29zIGVzdMOhbiBjb25kdWNpZW5kbyBzdSBhbHRhIGNvbnRyaWJ1Y2nDs24uDQpDYXRlZ29yw61hcyBNZW5vcyBJbmZsdXllbnRlczogTGFzIGNhdGVnb3LDrWFzIEZPLCBDTywgU1AsIEEsIFlILCBWSCwgRkMgeSBCIHRpZW5lbiBtZW5vciBpbmZsdWVuY2lhIGVuIGVzdGFzIGRvcyBkaW1lbnNpb25lcywgcGVybyBlc3RvIG5vIHNpZ25pZmljYSBxdWUgbm8gc2VhbiBpbXBvcnRhbnRlcyBlbiBvdHJhcyBkaW1lbnNpb25lcy4gU3UgYWdydXBhY2nDs24gY2VyY2EgZGVsIG9yaWdlbiBzdWdpZXJlIHF1ZSBubyB0aWVuZW4gdW4gaW1wYWN0byBmdWVydGUgZW4gbGEgdmFyaWFiaWxpZGFkIGV4cGxpY2FkYSBwb3IgRGltMSB5IERpbTIuDQpEaW1lbnNpb25lcw0KRGltMSAoMjAuNiUpOiBJbmZsdWVuY2lhcyBQcmluY2lwYWxlczogSCwgSSwgQy4NCkRpbTIgKDE5LjElKTogSW5mbHVlbmNpYXMgUHJpbmNpcGFsZXM6IEMsIEguDQoNCg0KIyMjIyBBQ00NCmBgYHtyIEFDTSwgZmlnLmFsaWduID0gJ2NlbnRlcid9DQpyb3VuZChNQ0EoVW5pdmVyc2lkYWRfRGF0YXNldF9DWzE6NDAwLCAtYygxLDIsMyw0LDUsNiw5LDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5KV0sIGdyYXBoID0gRkFMU0UpJGVpZywyKQ0KYGBgDQoNCiMjIyMgQmlwbG90IEFDTQ0KYGBge3IgQmlwbG90X0FDTSwgZmlnLmFsaWduID0gJ2NlbnRlcid9DQojIFNlbGVjY2lvbmFyIGxhcyBjb2x1bW5hcyByZWxldmFudGVzDQpzZWxlY3RlZF9jb2x1bW5zIDwtIFVuaXZlcnNpZGFkX0RhdGFzZXRbMTo0MDAsIC1jKDEsMiwzLDQsNSw2LDksMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjkpXQ0KDQojIFZlcmlmaWNhciBzaSBoYXkgdmFsb3JlcyBOQSBlbiBsYXMgY29sdW1uYXMgc2VsZWNjaW9uYWRhcw0KY2F0KCJWYWxvcmVzIE5BIGVuIGxhcyBjb2x1bW5hcyBzZWxlY2Npb25hZGFzOiAiLCBzdW0oaXMubmEoc2VsZWN0ZWRfY29sdW1ucykpLCAiXG4iKQ0KDQojIEVsaW1pbmFyIGZpbGFzIGNvbiB2YWxvcmVzIE5BIGVuIGxhcyBjb2x1bW5hcyBzZWxlY2Npb25hZGFzDQpzZWxlY3RlZF9jb2x1bW5zIDwtIG5hLm9taXQoc2VsZWN0ZWRfY29sdW1ucykNCg0KIyBDb252ZXJ0aXIgbGFzIGNvbHVtbmFzIGEgZmFjdG9yZXMNCnNlbGVjdGVkX2NvbHVtbnMgPC0gZGF0YS5mcmFtZShsYXBwbHkoc2VsZWN0ZWRfY29sdW1ucywgYXMuZmFjdG9yKSkNCg0KIyBWZXJpZmljYXIgcXVlIHRvZGFzIGxhcyBjb2x1bW5hcyB0ZW5nYW4gYWwgbWVub3MgZG9zIG5pdmVsZXMNCnZhbGlkX2NvbHVtbnMgPC0gc2VsZWN0ZWRfY29sdW1uc1ssIHNhcHBseShzZWxlY3RlZF9jb2x1bW5zLCBmdW5jdGlvbihjb2wpIG5sZXZlbHMoY29sKSA+IDEpXQ0KDQojIE1vc3RyYXIgbGFzIGNvbHVtbmFzIHbDoWxpZGFzDQpjYXQoIk7Dum1lcm8gZGUgY29sdW1uYXMgdsOhbGlkYXM6ICIsIG5jb2wodmFsaWRfY29sdW1ucyksICJcbiIpDQoNCiMgUmVhbGl6YXIgZWwgQW7DoWxpc2lzIGRlIENvbXBvbmVudGVzIE3Dumx0aXBsZXMgKE1DQSkNCmlmIChuY29sKHZhbGlkX2NvbHVtbnMpID4gMSkgew0KICBtY2FfcmVzdWx0IDwtIE1DQSh2YWxpZF9jb2x1bW5zLCBncmFwaCA9IEZBTFNFKQ0KICANCiAgIyBDcmVhciB5IG1vc3RyYXIgZWwgYmlwbG90IGRlbCBNQ0ENCiAgZnZpel9tY2FfYmlwbG90KG1jYV9yZXN1bHQsIHJlcGVsID0gVFJVRSkNCn0gZWxzZSB7DQogIGNhdCgiTm8gaGF5IHN1ZmljaWVudGVzIGNvbHVtbmFzIHbDoWxpZGFzIHBhcmEgcmVhbGl6YXIgZWwgTUNBXG4iKQ0KfQ0KYGBgDQoNCiMjIyMgQ2FsaWRhZCBkZSBSZXByZXNlbnRhY2nDs24NCmBgYHtyIENhbGlkYWRfZGVfUmVwcmVzZW50YWNpb25fQUNNLCBmaWcuYWxpZ24gPSAnY2VudGVyJ30NCmZ2aXpfbWNhX3ZhcihNQ0EoVW5pdmVyc2lkYWRfRGF0YXNldF9DWzE6NDAwLCAtYygxLDIsMyw0LDUsNiw5LDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5KV0sIGdyYXBoID0gRkFMU0UpLCBjb2wudmFyID0iY29zMiIsIGdyYWRpZW50LmNvbHMgPSBjKCIjMDBBRkJCIiwgIiNFN0I4MDAiLCAiI0ZDNEUwNyIpLCByZXBlbCA9IFRSVUUpDQpNQ0EoVW5pdmVyc2lkYWRfRGF0YXNldFsxOjQwMCwgLWMoMSwyLDMsNCw1LDYsOSwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSldLCBncmFwaCA9IEZBTFNFKSR2YXIkY29zMg0KYGBgDQoNCiMjIyMgQ29udHJpYnVjaW9uZXMNCmBgYHtyIENvbnRyaWJ1Y2lvbmVzX0FDTSwgZmlnLmFsaWduID0gJ2NlbnRlcid9DQpmdml6X2NvbnRyaWIoTUNBKFVuaXZlcnNpZGFkX0RhdGFzZXRfQ1sxOjQwMCwgLWMoMSwyLDMsNCw1LDYsOSwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSldLCBncmFwaCA9IEZBTFNFKSwgY2hvaWNlID0gInZhciIsIGF4ZXMgPSAxLCB0b3AgPSAxNSkNCmZ2aXpfY29udHJpYihNQ0EoVW5pdmVyc2lkYWRfRGF0YXNldF9DWzE6NDAwLCAtYygxLDIsMyw0LDUsNiw5LDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5KV0sIGdyYXBoID0gRkFMU0UpLCBjaG9pY2UgPSAidmFyIiwgYXhlcyA9IDIsIHRvcCA9IDE1KQ0KZnZpel9jb250cmliKE1DQShVbml2ZXJzaWRhZF9EYXRhc2V0X0NbMTo0MDAsIC1jKDEsMiwzLDQsNSw2LDksMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjkpXSwgZ3JhcGggPSBGQUxTRSksIGNob2ljZSA9ICJ2YXIiLCBheGVzID0gMywgdG9wID0gMTUpDQpmdml6X2NvbnRyaWIoTUNBKFVuaXZlcnNpZGFkX0RhdGFzZXRfQ1sxOjQwMCwgLWMoMSwyLDMsNCw1LDYsOSwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSldLCBncmFwaCA9IEZBTFNFKSwgY2hvaWNlID0gInZhciIsIGF4ZXMgPSA0LCB0b3AgPSAxNSkNCmZ2aXpfY29udHJpYihNQ0EoVW5pdmVyc2lkYWRfRGF0YXNldF9DWzE6NDAwLCAtYygxLDIsMyw0LDUsNiw5LDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5KV0sIGdyYXBoID0gRkFMU0UpLCBjaG9pY2UgPSAidmFyIiwgYXhlcyA9IDUsIHRvcCA9IDE1KQ0KYGBgDQoNCiMjIyMgQmlwbG90IGNvbiBDb250cmlidWNpb25lcw0KYGBge3IgQmlwbG90X2Nvbl9Db250cmlidWNpb25lc19BQ00sIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0KZnZpel9tY2FfdmFyKE1DQShVbml2ZXJzaWRhZF9EYXRhc2V0X0NbMTo0MDAsIC1jKDEsMiwzLDQsNSw2LDksMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjkpXSwgZ3JhcGggPSBGQUxTRSksIGNvbC52YXIgPSJjb250cmliIiwgZ3JhZGllbnQuY29scyA9IGMoIiMwMEFGQkIiLCAiI0U3QjgwMCIsICIjRkM0RTA3IiksIHJlcGVsID0gVFJVRSkNCmBgYA0KDQoNCg0KIyBGYXNlIDQgW0Fuw6FsaXNpcyBkZSBSZWdyZXNpw7NuXQ0KDQojIyMgNC4xLiBPYmpldGl2bw0KDQpTZSBzYWJlIHF1ZSBlbCBhbsOhbGlzaXMgZGUgcmVncmVzacOzbiBlcyB1biBwcm9jZXNvIGRlIG5hdHVyYWxlemEgZXN0YWTDrXN0aWNhIHVzYWRvIHBhcmEgZXN0aW1hciByZWxhY2lvbmVzIGVudHJlIHZhcmlhYmxlcyAodW5hIGRlcGVuZGllbnRlIG8gZGUgcmVzcHVlc3RhIHkgb3RyYXMgaW5kZXBlbmRpZW50ZXMgbyBwcmVkaWN0b3JhcykgYSB0cmF2w6lzIGRlIHTDqWNuaWNhcyBkZSBtb2RlbGFkbyB5IGFuw6FsaXNpcyBxdWUgcGVybWl0ZW4gZW50ZW5kZXIgY8OzbW8gZWwgdmFsb3IgZGUgbGEgdmFyaWFibGUgZGVwZW5kaWVudGUgdmFyw61hIGFsIGNhbWJpYXIgZWwgdmFsb3IgZGUgdW5hIG8gbcOhcyB2YXJpYWJsZXMgaW5kZXBlbmRpZW50ZXMuIExvcyBtb2RlbG9zIGRlIGFuw6FsaXNpcyBkZSByZWdyZXNpw7NuIGVzdHVkaWFkb3MgYSB0cmF2w6lzIGRlIGVzdGUgZG9jdW1lbnRvIHNlcsOhbjogbGluZWFsIChzaW1wbGUgeSBtw7psdGlwbGUpIHkgbG9nw61zdGljbywgZWxsb3MgZW50ZW5kaWRvcyBjb21vIGNhc29zIGRlbCBtb2RlbG8gZGUgcmVncmVzacOzbiBsaW5lYWwgZ2VuZXJhbGl6YWRvLg0KDQojIyMgNC4yLiBSZWdyZXNpw7NuIExpbmVhbCBTaW1wbGUNCg0KRXN0ZSBtb2RlbG8sIHF1ZSBldmVudHVhbG1lbnRlIHNlcsOhIGxsYW1hZG8gZW4gZXN0ZSBlc3R1ZGlvIGNvbW8gKipSTFMqKiwgZXN0w6EgY29uZm9ybWFkbyBwb3IgZG9zIHZhcmlhYmxlcyBlc3RhZMOtc3RpY2FzICR4JCB5ICRZJCwgZG9uZGUgJFkkIHNlIGFzdW1lIHF1ZSBlc3TDoSBpbmZsdWlkYSBwb3IgJHgkLiBMYSByZWxhY2nDs24gZXN0w6EgZGFkYSBtYXRlbcOhdGljYW1lbnRlIHBvcjogJCRZID0gXGJldGFfMCArIFxiZXRhXzEgeCArIFx2YXJlcHNpbG9uIFxoc3BhY2V7MTBtbX0gXGhzcGFjZXsxMG1tfSgxKSQkIGRvbmRlOg0KDQorICRZJDogZXMgdW5hIHZhcmlhYmxlIGRlIHJlc3B1ZXN0YSBkZSBuYXR1cmFsZXphIGFsZWF0b3JpYS4NCisgJHgkOiBlcyB1bmEgdmFyaWFibGUgcHJlZGljdG9yYSBkZSBuYXR1cmFsZXphIG5vIGFsZWF0b3JpYS4NCisgJFx2YXJlcHNpbG9uJDogZXMgdW5hIHZhcmlhYmxlIGFsZWF0b3JpYSBubyBvYnNlcnZhYmxlLg0KKyAkXGJldGFfMCQgeSAkXGJldGFfMSQ6IHNvbiBwYXLDoW1ldHJvcyByZWFsZXMgZGVzY29ub2NpZG9zIGRlbCBtb2RlbG8uDQoNCkVuIGNvbXBhcmFjacOzbiBjb24gZWwgbW9kZWxvIGxpbmVhbCBzaW1wbGUgZGV0ZXJtaW7DrXN0aWNvICR5ID0gXGJldGFfMCArIFxiZXRhXzEgeCQsIGVsIHByb2JhYmzDrXN0aWNvIHN1cG9uZSBxdWUgZWwgdmFsb3IgZXNwZXJhZG8gZGUgJFkkIGVzIHVuYSBmdW5jacOzbiBsaW5lYWwgZGUgJHgkLCBwZXJvIHF1ZSBjb24gJHgkIGZpamEsIGxhIHZhcmlhYmxlICRZJCBkaWZpZXJlIGRlIHN1IHZhbG9yIGVzcGVyYWRvIGVuIHVuYSBjYW50aWRhZCBhbGVhdG9yaWEgJFx2YXJlcHNpbG9uJC4gQWRlbcOhcywgbGEgY2FudGlkYWQgJFx2YXJlcHNpbG9uJCBlbiBsYSBlY3VhY2nDs24gZGUgbW9kZWxvICQoMSkkIHNlIHN1cG9uZSBub3JtYWxtZW50ZSBkaXN0cmlidWlkYSBjb24gJEUoXHZhcmVwc2lsb24pPTAkIHkgJFYoXHZhcmVwc2lsb24pPVxzaWdtYV4yJC4gTGEgdmFyaWFibGUgYWxlYXRvcmlhICRcdmFyZXBzaWxvbiQgdGFtYmnDqW4gc2UgY29ub2NlIGNvbW8gdMOpcm1pbm8gZGUgZXJyb3IgYWxlYXRvcmlvIG8gZGVzdmlhY2nDs24gYWxlYXRvcmlhIGVuIGVsIG1vZGVsby4NCg0KQ29tcGxlbWVudGFyaWFtZW50ZSwgY2FzaSBudW5jYSBzZXLDoW4gY29ub2NpZG9zIGxvcyB2YWxvcmVzICRcYmV0YV8wJCwgJFxiZXRhXzEkIHkgJFxzaWdtYV4yJCwgYSBjYW1iaW8gZXN0YXLDoSBkaXNwb25pYmxlIHVuYSBtdWVzdHJhIGRlIGRhdG9zIGNvbXB1ZXN0YSBkZSBwYXJlcyBvcmRlbmFkb3MgJCh4XzEseV8xKS4uLiAoeF9uLHlfbikkIGNvbiBsYSBxdWUgbG9zIHBhcsOhbWV0cm9zIGRlbCBtb2RlbG8geSBsYSBsw61uZWEgZGUgcmVncmVzacOzbiB2ZXJkYWRlcmEgcHVlZGVuIHNlciBlc3RpbWFkb3MsIGJham8gZWwgc3VwdWVzdG8gZGUgaW5kZXBlbmRlbmNpYSBkZSBsYXMgb2JzZXJ2YWNpb25lcy4gQXPDrSwgJHlfaSQgZXMgZWwgdmFsb3Igb2JzZXJ2YWRvIGRlIHVuYSB2YXJpYWJsZSBhbGVhdG9yaWEgJFlfaSQsIGRvbmRlICRZX2k9XGJldGFfMCtcYmV0YV8xeF9pK1x2YXJlcHNpbG9uX2kkIHkgbGFzICRuJCBkZXN2aWFjaW9uZXMgJFx2YXJlcHNpbG9uXzEkLCAkXHZhcmVwc2lsb25fMiQsICQuLi4kLCAkXHZhcmVwc2lsb25fbiQgc29uIHZhcmlhYmxlcyBpbmRlcGVuZGllbnRlcy4NCg0KRGUgYWN1ZXJkbyBjb24gZWwgbW9kZWxvLCBsb3MgcHVudG9zIG9ic2VydmFkb3MgZXN0YXLDoW4gZGlzdHJpYnVpZG9zIGFsZWF0b3JpYW1lbnRlIGFscmVkZWRvciBkZSBsYSBsw61uZWEgZGUgcmVncmVzacOzbiB2ZXJkYWRlcmEuIEVuIGVzdGUgc2VudGlkbywgbGEgZXN0aW1hY2nDs24gZGUgJHk9XGJldGFfMCtcYmV0YV8xeCQgZGViZXLDoSBzZXIgdW5hIGzDrW5lYSBxdWUgc2UgYWp1c3RlIGxvIG1lam9yIHBvc2libGUgYSBsb3MgcHVudG9zIG11ZXN0cmEuIFRhbCBsw61uZWEgZGViZXLDoSBwb3NlZXIgbGEgY2FyYWN0ZXLDrXN0aWNhIGRlIHF1ZSBsYXMgZGlzdGFuY2lhcyB2ZXJ0aWNhbGVzIChkZXN2aWFjaW9uZXMpIGRlIGxvcyBwdW50b3Mgb2JzZXJ2YWRvcyBhIGxhIGzDrW5lYSBtaXNtYSBzb24gKl9wZXF1ZcOxYXNfKi4gTGEgbWVkaWRhIGRlIGxhIGJvbmRhZCBkZSBhanVzdGUgc2Vyw6EgbGEgc3VtYSBkZSBsb3MgY3VhZHJhZG9zIGRlIGVzdGFzIGRlc3ZpYWNpb25lcy4gRW4gY29uc2VjdWVuY2lhLCBsYSBsw61uZWEgcXVlIG1lam9yIHNlIGFqdXN0YSBzZXLDoSBsYSBxdWUgdGVuZ2EgbGEgc3VtYSBtw6FzIHBlcXVlw7FhIHBvc2libGUgZGUgZGVzdmlhY2lvbmVzIGFsIGN1YWRyYWRvLiBFbCByZXN1bHRhZG8gcXVlIGltcGxpY2EgbGFzIGlkZWFzIGV4cHVlc3RhcyBzZSBjb25vY2UgY29tbzogcHJpbmNpcGlvIGRlIGxvcyBtw61uaW1vcyBjdWFkcmFkb3MgeSBzZSByZW1vbnRhIGEgbG9zIG1hdGVtw6F0aWNvcyBDYXJsIEZyaWVkcmljaCBHYXVzcyB5IEFkcmllbi1NYXJpZSBMZWdlbmRyZSwgZW50cmUgZWwgw7psdGltbyBsdXN0cm8gZGVsIHNpZ2xvIFhWSUlJIHkgZWwgcHJpbWVybyBkZWwgc2lnbG8gWElYLg0KDQpFbCBwcmluY2lwaW8gZGUgbG9zIG3DrW5pbW9zIGN1YWRyYWRvcyBlc3RhYmxlY2UgcXVlIGxhIGRlc3ZpYWNpw7NuIHZlcnRpY2FsIGRlbCBwdW50byAkKHhfaSx5X2kpJCBjb24gcmVzcGVjdG8gYSBsYSBsw61uZWEgJHk9Yl8wK2JfMXgkIGVzICR5X2ktKGJfMCtiXzF4KSQgeSBsYSBzdW1hIGRlIGxhcyBkZXN2aWFjaW9uZXMgdmVydGljYWxlcyBhbCBjdWFkcmFkbyBkZSBsb3MgcHVudG9zICQoeF9pLHlfaSkkIGEgbGEgbMOtbmVhIGVzICRmKGJfMCxiXzEpPVxzdW1fe2k9MX1ebiAoeV9pLShiXzArYl8xeF9pKSleMiQuIEFzw60sIGxhcyBlc3RpbWFjaW9uZXMgcHVudHVhbGVzIGRlICRcYmV0YV8wJCB5ICRcYmV0YV8xJCwgcmVwcmVzZW50YWRhcyBjb21vICRcaGF0e1xiZXRhfV8wJCB5ICRcaGF0e1xiZXRhfV8xJCB5IGxsYW1hZGFzIGVzdGltYWNpb25lcyBkZSBtw61uaW1vcyBjdWFkcmFkb3MsIHNvbiBsb3MgdmFsb3JlcyBxdWUgbWluaW1pemFuIGEgJGYoYl8wLGJfMSkkOyBlcyBkZWNpciwgJGYoXGhhdHtcYmV0YX1fMCxcaGF0e1xiZXRhfV8xKVxsZXEgZihiXzAsYl8xKSQgcGFyYSBjdWFsZXNxdWllcmEgJFxiZXRhXzAkIHkgJFxiZXRhXzEkLiBQb3IgbG8gdGFudG8sIGxhIGzDrW5lYSBkZSByZWdyZXNpw7NuIGVzdGltYWRhIG8gbMOtbmVhIGRlIG3DrW5pbW9zIGN1YWRyYWRvcyBlcyAkeT1caGF0e1xiZXRhfV8wK1xoYXR7XGJldGF9XzF4JC4NCg0KTHVlZ28gZGUgY2FsY3VsYXIgeSByZXNvbHZlciBsYXMgZWN1YWNpb25lcyBlbiBkZXJpdmFkYXMgcGFyY2lhbGVzIGRlICRmKGJfMCxiXzEpJCByZXNwZWN0byBhICRiXzAkIHkgJGJfMSQgaWd1YWxhZGFzIGEgY2Vybywgc2Ugb2J0aWVuZSB1biBzaXN0ZW1hcyBkZSBlY3VhY2lvbmVzIGxsYW1hZGFzIG5vcm1hbGVzIHF1ZSBzb24gbGluZWFsZXMgZW4gJGJfMCQgeSAkYl8xJCB5IHBhcmEgbGFzIGN1YWxlcywgc2llbXByZSBxdWUgcG9yIGxvIG1lbm9zIGRvcyBkZSBsYXMgJHhfaSQgc2VhbiBkaWZlcmVudGVzLCBsYXMgZXN0aW1hY2lvbmVzIGRlIGxvcyBtw61uaW1vcyBjdWFkcmFkb3Mgc29uIGxhIMO6bmljYSBzb2x1Y2nDs24gZGVsIHNpc3RlbWEuIEVuIGNvbnNlY3VlbmNpYSwgbGEgZXN0aW1hY2nDs24gZGUgbG9zIG3DrW5pbW9zIGN1YWRyYWRvcyBkZSAkXGJldGFfMSQgZGUgbGEgbMOtbmVhIGRlIHJlZ3Jlc2nDs24gdmVyZGFkZXJhIGVzOiAkJFxoYXR7XGJldGF9XzE9XGRmcmFje1xzdW1fe2k9MX1ebih4X2ktXGJhcnt4fSkoeV9pLVxiYXJ7eX0pfXtcc3VtX3tpPTF9Xm4oeF9pLVxiYXJ7eH0pXjJ9PVxkZnJhY3tTX3t4eX19e1Nfe3h4fX1caHNwYWNlezEwbW19KDIpJCQgeSBsYSBlc3RpbWFjacOzbiBkZSBsb3MgbcOtbmltb3MgY3VhZHJhZG9zIGRlICRcYmV0YV8wJCBkZSBsYSBsw61uZWEgZGUgcmVncmVzacOzbiB2ZXJkYWRlcmEgZXM6ICQkXGhhdHtcYmV0YX1fMD1cZGZyYWN7XHN1bV97aT0xfV5ueV9pLVxoYXR7XGJldGF9XzFcc3VtX3tpPTF9Xm54X2l9e259PVxiYXJ7eX0tXGhhdHtcYmV0YX1fMVxiYXJ7eH1caHNwYWNlezEwbW19KDMpJCQgUGFyYSBoYWNlciBsb3MgY8OhbGN1bG9zIHF1ZSBsYXMgZWN1YWNpb25lcyBhbnRlcmlvcmVzIGRlbWFuZGFuIGVzIG5lY2VzYXJpbyByZWR1Y2lyIGFsIG3DrW5pbW8gbG9zIGVmZWN0b3MgZGUgcmVkb25kZW8uIFRhbWJpw6luLCBhbnRlcyBkZSBjYWxjdWxhciAkXGhhdHtcYmV0YX1fMSQgeSAkXGhhdHtcYmV0YX1fMCQgc2UgZGViZSBleGFtaXIgZ3LDoWZpY2FtZW50ZSBlbCBjb25qdW50byBkZSBkYXRvcyBwb3IgdXNhciBwYXJhIHBlcmNpYmlyIGxhIGZhY3RpYmlsaWRhZCBkZSB1c28gZGUgdW4gbW9kZWxvIHByb2JhYmlsw61zdGljbyBsaW5lYWwsIGVzIGRlY2lyLCBzaSBncsOhZmljYW1lbnRlIGxvcyBwdW50b3MgZXN0w6FuIGxlam9zIGRlIHRlbmRlciBhIGFnbG9tZXJhcnNlIGVuIHRvcm5vIGEgdW5hIGzDrW5lYSByZWN0YSBjb24gYXByb3hpbWFkYW1lbnRlIGVsIG1pc21vIGdyYWRvIGRlIGRpc3BlcnNpw7NuIGRlIHRvZGFzIGxhcyAkeF9pJCwgZW50b25jZXMgZGViZW4gc2VyIGluZGFnYWRvcyBvdHJvcyBtb2RlbG9zLg0KDQpFcyBpbmRpc3BlbnNhYmxlIG1lbmNpb25hciBxdWUgbGEgbMOtbmVhIGRlIG3DrW5pbW9zIGN1YWRyYWRvcyBkZWJlIHVzYXJzZSByZXN0cmluZ2lkYW1lbnRlIHBhcmEgcHJlZGVjaXIgdmFsb3JlcyBkZSAkeCQgKipfbGVqYW5vc18qKiBkZWwgcmFuZ28gZGUgbG9zIGRhdG9zLCBwb3JxdWUgbGEgcmVsYWNpw7NuIGFqdXN0YWRhIHB1ZWRlIGNhcmVjZXIgZGUgdmFsaWRleiBwYXJhIGVsbG9zLg0KDQpBaG9yYSwgZWwgcGFyw6FtZXRybyAkXHNpZ21hXjIkIHF1ZSBkZXRlcm1pbmEgbGEgY2FudGlkYWQgZGUgdmFyaWFiaWxpZGFkIGVzIGluaGVyZW50ZSBlbiBlbCBtb2RlbG8gZGUgcmVncmVzacOzbiBkZXNjcml0bzogc3UgdmFsb3IgY29uZHVjaXLDoSBhIGVzdGFibGVjZXIgcXVlIGxvcyB2YWxvcmVzIG9ic2VydmFkb3MgZXN0YXLDoW4gZGlzcGVyc29zIGVuIG1heW9yIG8gbWVub3IgbWVkaWRhIGVuIHRvcm5vIGEgbGEgbMOtbmVhIGRlIHJlZ3Jlc2nDs24gdmVyZGFkZXJhLiBBc8OtLCBsb3MgcmVzaWR1b3MgJHlfaSAtIFxoYXR7eV9pfSQgc29uIGxhcyBkZXN2aWFjaW9uZXMgdmVydGljYWxlcyBjb24gcmVzcGVjdG8gYSBsYSBsw61uZWEgZXN0aW1hZGEuIFNpIHRvZG9zIGxvcyByZXNpZHVvcyBzb24gcGVxdWXDsW9zIGNvbXBhcmFkb3MgY29uIGNlcm8sIGVudG9uY2VzIGxhIHZhcmlhYmlsaWRhZCBkZSBsb3MgdmFsb3JlcyAkeSQgb2JzZXJ2YWRvcyBzZSBkZWJlcsOtYSBlbiB1bmEgZWxldmFkYSBtZWRpZGEgYSBsYSByZWxhY2nDs24gbGluZWFsIGVudHJlICR4JCB5ICR5JCwgbWllbnRyYXMgcXVlIHNpIGxvcyByZXNpZHVvcyBzb24gZ3JhbmRlcyBjb21wYXJhZG9zIGNvbiBjZXJvLCBlbnRvbmNlcyBxdWVkYSBzdWdlcmlkYSB1bmEgdmFyaWFiaWxpZGFkIGluaGVyZW50ZSBlbiAkeSQgY29uIHJlc3BlY3RvIGEgbGEgY2FudGlkYWQgZGViaWRhIGEgbGEgcmVsYWNpw7NuIGxpbmVhbC4gQXPDrSwgbGEgZXN0aW1hY2nDs24gZGUgJFxzaWdtYV4yJCBlbiB1biBhbsOhbGlzaXMgZGUgcmVncmVzacOzbiBlc3TDoSBiYXNhZGEgZW4gZWwgY8OhbGN1bG8gZGUgbGEgc3VtYSBkZSBjdWFkcmFkb3MgcmVzaWR1YWxlcyAobyBzdW1hIGRlIGN1YWRyYWRvcyBkZWwgZXJyb3IgU0NFKSBxdWUgc2UgcmVkdWNlIGE6ICQkU0NFPVxzdW1fe2k9MX1ebnlfaV4yLVxoYXR7XGJldGF9XzBcc3VtX3tpPTF9Xm55X2ktXGhhdHtcYmV0YX1fMVxzdW1fe2k9MX1ebnhfaXlfaVxoc3BhY2V7MTBtbX0oNCkkJCAkJFxoYXRcc2lnbWFeMj1zXjI9XGRmcmFje1NDRX17bi0yfVxoc3BhY2V7MTBtbX0oNSkkJCBTaSBzZSBoYSBlbnRlbmRpZG8gcXVlIGxhIGNhbnRpZGFkIFNDRSBlc3RhYmxlY2UgdW5hIG1lZGlkYSBkZSBjdcOhbnRhIHZhcmlhY2nDs24gZGUgJHkkIGVzIGluZXhwbGljYWRhIHBvciBlbCBtb2RlbG87IGVzIGRlY2lyLCBzaW4gYXRyaWJ1Y2nDs24gYSBsYSByZWxhY2nDs24gbGluZWFsLCBzZSBlbnRlbmRlcsOhIHRhbWJpw6luIHF1ZSBleGlzdGUgb3RyYSBjYW50aWRhZCBsbGFtYWRhIGxhIHN1bWEgdG90YWwgZGUgbG9zIGN1YWRyYWRvcyBTVEMsIHF1ZSBwZXJtaXRlIG9idGVuZXIgdW5hIG1lZGlkYSBkZSBsYSBjYW50aWRhZCBkZSB2YXJpYWNpw7NuIHRvdGFsIGVuIGxvcyB2YWxvcmVzICR5JCBvYnNlcnZhZG9zOiAkJFNUQz1cc3VtX3tpPTF9Xm55X2leMi1cZnJhY3soXHN1bV97aT0xfV5ueV9pKV4yfXtufVxoc3BhY2V7MTBtbX0oNikkJCBTaSBzZSBmb3JtdWxhIGxhIHJhesOzbiAkU0NFL1NUQyQgc2UgY2FsY3VsYSBsYSBwcm9wb3JjacOzbiBkZSB2YXJpYWNpw7NuIHRvdGFsIGluZXhwbGljYWRhIHBvciBlbCBtb2RlbG8gZGUgcmVncmVzacOzbiBsaW5lYWwgc2ltcGxlOyBwb3IgbG8gdGFudG8sIHNlIGxsZWdhIGEgbGEgZGVmaW5pY2nDs24gZGVsIGNvZWZpY2llbnRlIGRlIGRldGVybWluYWNpw7NuICRyXjIkOiAkJHJeMj0xLVxmcmFje1NDRX17U1RDfVxoc3BhY2V7MTBtbX0oNykkJCBxdWUgc2UgaW50ZXJwcmV0YSBjb21vIGxhIHByb3BvcmNpw7NuIGRlIHZhcmlhY2nDs24gJHkkIG9ic2VydmFkYSBxdWUgcHVlZGUgc2VyIGV4cGxpY2FkYSBwb3IgZWwgbW9kZWxvIGRlIHJlZ3Jlc2nDs24gbGluZWFsIHNpbXBsZTsgZXMgZGVjaXIsIGFxdWVsbGEgYXRyaWJ1aWRhIGEgdW5hIHJlbGFjacOzbiBsaW5lYWwgYXByb3hpbWFkYSBlbnRyZSAkeCQgeSAkeSQ6IG1pZW50cmFzIG3DoXMgY2VyY2FubyBhIDEgc2VhICRyXjIkLCBtw6FzIGV4aXRvc28gZXMgZWwgbW9kZWxvIGRlIHJlZ3Jlc2nDs24gbGluZWFsIHNpbXBsZSBhbCBleHBsaWNhciBsYSB2YXJpYWNpw7NuIGRlICR5JC4gVW5hIGZvcm1hIGFsdGVybmF0aXZhIGRlIGNhbGN1bGFyIGVsIGNvZWZpY2llbnRlIGRlIGRldGVybWluYWNpw7NuIHNlIGJhc2EgZW4gbGEgc3VtYSBkZSBjdWFkcmFkb3MgZGViaWRhZCBhIGxhIHJlZ3Jlc2nDs24gU0NSIChvIGFsIG1vZGVsbyBkZSByZWdyZXNpw7NuIFNDTSksIHF1ZSBlcyBsYSBjYW50aWRhZCBkZSB2YXJpYWNpw7NuIHRvdGFsIHF1ZSBlcyBleHBsaWNhZGEgcG9yIGVsIG1vZGVsby4gQ29uIGJhc2UgZW4gZWxsYSBlbCBjb2VmaWNpZW50ZSBkZSBkZXRlcm1pbmFjacOzbiBzZSBleHByZXNhIGNvbW86ICQkcl4yPTEtXGZyYWN7U0NFfXtTVEN9PVxmcmFje1NUQy1TQ0V9e1NUQ309XGZyYWN7U0NSfXtTVEN9XGhzcGFjZXsxMG1tfSg4KSQkQ29tbyBzZSBzYWJlLCBjdWFscXVpZXIgY2FudGlkYWQgY2FsY3VsYWRhIGEgcGFydGlyIGRlIGRhdG9zIG11ZXN0cmFsZXMgdmFyw61hIGRlIHVuYSBjYW50aWRhZCBhIG90cmEsIGVuIGVzdGUgc2VudGlkbywgbG9zIHByb2NlZGltaWVudG9zIGluZmVyZW5jaWFsZXMgZXN0YW5kYXJpemFuIHVuIGVzdGltYWRvciByZXN0YW5kbyBzdSB2YWxvciBtZWRpbyB5IGx1ZWdvIGRpdmlkacOpbmRvbG8gZW50cmUgc3UgZGVzdmlhY2nDs24gZXN0w6FuZGFyIGVzdGltYWRhLiBFbiBwYXJ0aWN1bGFyLCBwYXJhIHVuIG1vZGVsbyBzdXB1ZXN0byBkZSByZWdyZXNpw7NuIGxpbmVhbCBzaW1wbGUgc2UgaW1wbGljYSBxdWUgbGFzIHZhcmlhYmxlcyBlc3TDoW5kYXJlczogJHRfeyhuLTIpfT1cZGZyYWN7XGhhdHtcYmV0YX1fMC1cYmV0YV8wfXtcaGF0e1xzaWdtYX0gXHNxcnR7MS9uK1xiYXJ7eH1eMi9TX3t4eH19fSQgeSAkdF97KG4tMil9PVxkZnJhY3tcaGF0e1xiZXRhfV8xLVxiZXRhXzF9eyBcaGF0e1xzaWdtYX0gXHNxcnR7MS9TX3t4eH19fSQgdGllbmVuIGRpc3RyaWJ1Y2lvbmVzICR0JCBjb24gJG4tMiQgZ3JhZG9zIGRlIGxpYmVydGFkLiBEZSBlc3RvIHNlIGRlZHVjZSBxdWUgbG9zIGludGVydmFsb3MgZGUgY29uZmlhbnphIGRlICQxMDAqKDEtXGFscGhhKVwlJCBwYXJhIGxhIHBlbmRpZW50ZSAkXGJldGFfMSQgeSBlbCBpbnRlcmNlcHRvICRcYmV0YV8wJCBkZSBsYSBsw61uZWEgZGUgcmVncmFzacOzbiB2ZXJkYWRlcmEgc29uOiAkJFxoYXR7XGJldGF9XzAgXHBtIHRfe1xhbHBoYS8yLCBuLTJ9IFxjZG90ICBcaGF0e1xzaWdtYX0gXHNxcnR7MS9uK1xiYXJ7eH1eMi9TX3t4eH19XGhzcGFjZXsxMG1tfSg5KSQkICQkXGhhdHtcYmV0YX1fMSBccG0gdF97XGFscGhhLzIsIG4tMn0gXGNkb3QgIFxoYXR7XHNpZ21hfSBcc3FydHsxL1Nfe3h4fX0gXGhzcGFjZXsxMG1tfSAgKDEwKSQkZXN0b3MgaW50ZXJ2YWxvcyBlc3TDoW4gY2VudGFyYWRvcyBlbiBsYSBlbiBsYSBlc3RpbWFjacOzbiBwdW50dWFsIGRlIGNhZGEgcGFyw6FtZXRybyB5IGxhIGNhbnRpZGFkIGFiYXJjYWRhIGEgY2FkYSBsYWRvIGRlIGxhIGVzdGltYWNpw7NuIGRlcGVuZGUgZGVsIG5pdmVsIGRlIGNvbmZpYW56YSBkZXNlYWRvIHkgZGUgbGEgY2FudGlkYWQgZGUgdmFyaWFiaWxpZGFkIGRlbCBlc3RpbWFkb3IuDQoNCkRhZG8gbG8gYW50ZXJpb3IsIHBhcmEgbG9zIHByb2NlZGltaWVudG9zIGRlIHBydWViYSBkZSBoaXDDs3Rlc2lzLCB5IGNvbW8gc2UgcHJvY2VkZSBoYWJpdHVhbG1lbnRlLCBsYXMgaGlww7N0ZXNpcyBudWxhcyByZXNwZWN0byBhIGxvcyBiZXRhIGRlbCBtb2RlbG8gZGUgcmVncmVzacOzbiBsaW5lYWwgc2ltcGxlIHNlcsOhbiBlbnVuY2lhZG9zIGRlIGlndWFsZGFkLiBMb3MgdmFsb3JlcyBudWxvcyBwYXJhICRcYmV0YV8wJCB5ICRcYmV0YV8xJCBzZSByZXByZXNlbnRhbiByZXNwZWN0aXZhbWVudGUgY29tbyAkXGJldGFfezAwfSQgKCJiZXRhIGNlcm8gY2VybyIpIHkgJFxiZXRhX3sxMH0kICgiYmV0YSB1bm8gY2VybyIpLiBBZGVtw6FzLCBjb21vIGxvcyBlc3RhZMOtc3RpY29zIGRlIHBydWViYSB0aWVuZW4gZGlzdHJpYnVjaW9uZXMgJHQkIGNvbiAkbi0yJCBncmFkb3MgZGUgbGliZXJ0YWQgY3VhbmRvICRIXzAkIGVzIHZlcmRhZGVyYSwgbGEgcHJvYmFiaWxpZGFkIGRlIGVycm9yIFRpcG8gSSBwZXJtYW5lY2UgYWwgbml2ZWwgZGVzZWFkbyAkXGFscGhhJCB1c2FuZG8gdW4gdmFsb3IgY3LDrXRpY28gJHQkIGFkZWN1YWRvLiBBc8OtLCBsYXMgaGlww7N0ZXNpcyBjb23Dum5tZW50ZSB1c2FkYXMgcGFyYSAkXGJldGFfMCRzb246ICQkSF8wOiBcYmV0YV8wID0gXGJldGFfezAwfVxoc3BhY2V7MTBtbX0oMTEpJCQgJCRIXzE6IFxiZXRhXzAgXG5lcSBcYmV0YV97MDB9XGhzcGFjZXsxMG1tfSgxMikkJGN1eW8gZXN0YWTDrXN0aWNvIGRlIHBydWViYSBlczogJCR0X3sobi0yKX09XGRmcmFje1xoYXR7XGJldGF9XzAtXGJldGFfezAwfX17XGhhdHtcc2lnbWF9IFxzcXJ0ezEvbitcYmFye3h9XjIvU197eHh9fX1caHNwYWNlezEwbW19KDEzKSQkeSBwYXJhICRcYmV0YV8xJCBzb246DQokJEhfMDogXGJldGFfMSA9IFxiZXRhX3sxMH1caHNwYWNlezEwbW19KDE0KSQkIA0KJCRIXzE6IFxiZXRhXzEgXG5lcSBcYmV0YV97MTB9XGhzcGFjZXsxMG1tfSgxNSkkJGN1eW8gZXN0YWTDrXN0aWNvIGRlIHBydWViYSBlczokJHRfeyhuLTIpfT1cZGZyYWN7XGhhdHtcYmV0YX1fMS1cYmV0YV97MTB9fXtcaGF0e1xzaWdtYX0gXHNxcnR7MS9TX3t4eH19fVxoc3BhY2V7MTBtbX0oMTYpJCRlbCBwYXIgZGUgaGlww7N0ZXNpcyBkZWZpbmlkYXMgcG9yICQxNCQsICQxNSQgeSAkMTYkIHNlIGNvbm9jZSBjb21vIGxhIHBydWViYSBkZSB1dGlsaWRhZCBkZWwgbW9kZWxvIGRlIHJlZ3Jlc2nDs24gbGluZWFsIHNpbXBsZSwgZG9uZGU6IGxhIHJlZ2nDs24gZGUgcmVjaGF6byBkZSAkSF8wJCBwYXJhIHVuYSBwcnVlYmEgYSBuaXZlbCAkXGFscGhhJCBhIGZhdm9yIGRlICRIXzE6IFxiZXRhXzE+XGJldGFfezEwfSQgZXMgJHRcZ2VxIHRfe1xhbHBoYSxuLTJ9JDsgbGEgcmVnacOzbiBkZSByZWNoYXpvIGRlICRIXzAkIHBhcmEgdW5hIHBydWViYSBhIG5pdmVsICRcYWxwaGEkIGEgZmF2b3IgZGUgJEhfMTogXGJldGFfMTxcYmV0YV97MTB9JCBlcyAkdFxsZXEgLXRfe1xhbHBoYSxuLTJ9JDsgeSBsYSByZWdpw7NuIGRlIHJlY2hhem8gZGUgJEhfMCQgcGFyYSB1bmEgcHJ1ZWJhIGEgbml2ZWwgJFxhbHBoYSQgYSBmYXZvciBkZSAkSF8xOiBcYmV0YV8xXG5lcVxiZXRhX3sxMH0kIGVzICR0XGxlcSAtdF97XGFscGhhLzIsbi0yfSQgbyAgJHRcZ2VxIHRfe1xhbHBoYS8yLG4tMn0kLiBBZGVtw6FzLCBzZSBzYWJlIHF1ZSBsYSBwcnVlYmEgZGUgdXRpbGlkYWQgZGVsIG1vZGVsbyBkZSByZWdyZXNpw7NuIHNpbXBsZSBwdWVkZSBzZXIgcHJvYmFkYSBjb24gdW5hIHRhYmxhIEFOT1ZBOiByZWNoYXphbmRvICRIXzAkIHNpICRmXGdlcSBGX3tcYWxwaGEsMSxuLTJ9JC4gTGEgcHJ1ZWJhICRGJCBkYSBleGFjdGFtZW50ZSBlbCBtaXNtbyByZXN1bHRhZG8gcXVlIGxhIHBydWViYSAkdCQgZGUgdXRpbGlkYWQgZGVsIG1vZGVsbyBkZSByZWdyZXNpw7NuIGxpbmVhbCBzaW1wbGUuDQoNClBvciDDumx0aW1vLCBzZSBlbnRpZW5kZSBxdWUgZW4gdW4gbW9kZWxvIGRlIHJlZ3Jlc2nDs24gbGluZWFsIHNpbXBsZSB1biB2YWxvciBmdXR1cm8gZGUgJFkkIG5vIGVzIHBhcsOhbWV0cm8gc2lubyB1bmEgdmFyaWFibGUgYWxlYXRvcmlhLCBwb3IgbG8gcXVlIHNlIGRlYmUgaGFjZXIgcmVmZXJlbmNpYSBhIHVuIGludGVydmFsbyBkZSB2YWxvcmVzIGZhY3RpYmxlcyBwYXJhIHVuIHZhbG9yIGZ1dHVybyBkZSAkWSQsIGFsIGN1YWwgc2UgbGUgbGxhbWEgaW50ZXJ2YWxvIGRlIHByZWRpY2Npw7NuLiBDdWFuZG8gc2UgcHJlZGljZSBjb24gYmFzZSBlbiBlbCBtb2RlbG8gZGUgcmVncmVzacOzbiBsaW5lYWwgc2ltcGxlLCBlbCBlcnJvciBkZSBwcmVkaWNjacOzbiBlcyAkWS0oIFxoYXR7XGJldGF9XzArIFxoYXR7XGJldGF9XzEgeF4qKSQgcXVlIGNvcnJlc3BvbmRlIGNvbiB1bmEgZGlmZXJlbmNpYSBlbnRyZSBkb3MgdmFyaWFibGVzIGFsZWF0b3JpYXMsIHBvciBsbyBxdWUsIGVuIGNvbXBhcmFjacOzbiBjb24gdW5hIGVzdGltYWNpw7NuLCBoYWJyw6EgbcOhcyBpbmNlcnRpZHVtYnJlIGVuIGVzZTsgcG9yIGxvIHRhbnRvLCB1biBpbnRlcnZhbG8gZGUgcHJlZGljY2nDs24gc2Vyw6EgbcOhcyBhbmNobyBxdWUgdW4gaW50ZXJ2YWxvIGRlIGNvbmZpYW56YS4gQWRlbcOhcywgYSBwYXJ0aXIgZGUgbGEgdmFyaWFuemEgZGVsIGVycm9yIGRkZSBwcmVkaWNjacOzbiBzZSBwdWVkZSBlc3RhYmxlY2VyIHF1ZSBsYSB2YXJpYWJsZSBlc3RhbmRhcml6YWRhOiQkVD1cZGZyYWN7WS0oXGhhdHtcYmV0YX1fMCsgXGhhdHtcYmV0YX1fMSB4XiopfXtTIFxkaXNwbGF5c3R5bGVcc3FydHsxK1xkZnJhY3sxfXtufSAgKyBcZGZyYWN7KHheKi1cYmFye3h9KV4yfXtTX3t4eH19fX1caHNwYWNlezEwbW19KDE3KSQkdGllbmUgdW5hIGRpc3RyaWJ1Y2nDs24gJHQkIGNvbiAkbi0yJCBncmFkb3MgZGUgbGliZXJ0YWQsIGEgcGFydGlyIGRlIGxhIGN1YWwgc2Ugb2J0aW5lIHVuIGludGVydmFsbyBkZSBwcmVkaWNjacOzbiBkZSAkMTAwKigxLVxhbHBoYSlcJSQgcGFyYSB1bmEgb2JzZXJ2YWNpw7NuICRZJCBmdXR1cmEgcXVlIHNlIGhhcsOhIGN1YW5kbyAkeD14XiokIGlndWFsIGE6JCRcaGF0e1xiZXRhfV8wK1xoYXR7XGJldGF9XzEgeF4qXHBtIHRfe24tMixcYWxwaGEvMn1cY2RvdCBzIFxkaXNwbGF5c3R5bGVcc3FydHsxK1xkZnJhY3sxfXtufStcZGZyYWN7KHheKi1cYmFye3h9KV4yfXtTX3t4eH19fVxoc3BhY2V7MTBtbX0oMTgpJCQgbGEgaW50ZXJwcmV0YWNpw7NuIGRlbCBuaXZlbCBkZSBwcmVkaWNjacOzbiBkZSAkMTAwKigxLVxhbHBoYSlcJSQgZXN0YWJsZWNlIHF1ZSBhbCB1c2FyICQoMTgpJCByZXBldGlkYW1lbnRlLCBsb3MgaW50ZXJ2YWxvcyByZXN1bHRhbnRlcyBjb250ZW5kcsOhbiBsb3MgdmFsb3JlcyAkeSQgb2JzZXJ2YWRvcyBlbCAkMTAwKigxLVxhbHBoYSlcJSQgZGVsIHRpZW1wby4gQWRlbcOhcywgZWwgbsO6bWVybyAkMSQgZW4gbGEgcmHDrXogY3VhZHJhZGEgaGFjZSBxdWUgZWwgaW50ZXJ2YWxvIGRlIHByZWRpY2Npw7NuIHNlYSBtw6FzIGFuY2hvIHF1ZSBpbnRlcnZhbG9zIGRlIGNvbmZpYW56YSBjb21vICQoOSkkIHkgJCgxMCkkLiBBc2ltaXNtbywgYSBtZWRpZGEgcXVlICRuXHRvXGluZnR5JCBlbCBhbmNobyBkZWwgaW50ZXJ2YWxvIG5vLXRpZW5kZSBhIGNlcm8sIHBvcnF1ZSBsYSBpbmNlcnRpZHVtYnJlIGVuIGxhIHByZWRpY2Npw7NuIHNlcsOhIHBlcm1hbmVudGUsIGluY2x1c28gYWwgdGVuZXIgY29ub2NpbWllbnRvIHBlcmZlY3RvIHNvYnJlICRcYmV0YV8wJCB5ICRcYmV0YV8xJC4NCg0KIyMjIyBQbGFudGVhbWllbnRvIGRlbCBQcm9ibGVtYQ0KQ29uIGJhc2UgZW4gZWwgY29uanVudG8gZGUgZGF0b3MgZGVzY3JpdG8gZW4gbGEgc2VjY2nDs24gKioyKiogc2UgZm9ybXVsYXLDoSB1biBtb2RlbG8gZGUgcmVncmVzacOzbiBsaW5lYWwgc2ltcGxlIHBhcmEgZXN0dWRpYXIgbGEgcmVsYWNpw7NuIGxpbmVhbCBzdXB1ZXN0YSBlbnRyZSBsYXMgdmFyYWlibGVzIGRlZmluaWRhcyBwb3IgbG9zIGNhbXBvczogKipDaGFuY2Ugb2YgQWRtaXQqKiAodmFyaWFibGUgZGVwZW5kaWVudGUpIHkgKipUT0VGTCBTY29yZSoqICh2YXJpYWJsZSBpbmRlcGVuZGllbnRlKS4NCg0KIyMjIyBEZXNhcnJvbGxvIGRlbCBBbsOhbGlzaXMNCkVsIGVzdHVkaW8gZGUgcmVncmVzacOzbiBsaW5lYWwgc2ltcGxlIGhhIHNpZG8gcHJvY2VzYWRvIGNvbiBgciBSLnZlcnNpb24uc3RyaW5nYCBtZWRpYWRvIHBvciBSU3R1ZGlvIDIwMjIuMDcuMiBCdWlsZCA1NzYgZW4gdW5hIHBsYXRhZm9ybWEgeDg2XzY0LXc2NC1taW5ndzMyLg0KDQojIyMjIyBSZXN1bWVuIGVzdGFkw61zdGljbyBkZSBsYXMgdmFyaWFibGVzIHBvciBlc3R1ZGlhci4gey50YWJzZXQgLnRhYnNldC1waWxsc30NCkxhIG5hdmVnYWNpw7NuIGEgdHJhdsOpcyBkZSBsYXMgcGVzdGHDsWFzIG11ZXN0cmEgZWwgcmVzdW1lbiBlc3RhZMOtc3RpY28gZGUgbGFzIHZhcmlhYmxlcyBkZSBpbnRlcsOpczogKipPdmVyYWxsIFNjb3JlKiogKHZhcmlhYmxlIGRlcGVuZGllbnRlKSB5ICoqVE9FRkwgU2NvcmUqKiAodmFyaWFibGUgaW5kZXBlbmRpZW50ZSksIGp1bnRvIGNvbiBzdXMgcmVzcGVjdGl2b3MgZGlhZ3JhbWFzIGRlIGNhamEuIEFkZW3DoXMsIGluY2x1eWUgZWwgZGlhZ3JhbWEgZGUgZGlzcGVyc2nDs24gZGUgc3VzIHZhbG9yZXMgY29uanVudG9zLg0KDQpDb24gYmFzZSBlbiBsYSBwZXN0YcOxYSAqKlJlc3VtZW4gZGUgQ2hhbmNlIG9mIEFkbWl0Kiogc2UgcHVlZGUgY29tZW50YXIgcXVlIGxhIHZhcmlhYmxlICoqQ2hhbmNlIG9mIEFkbWl0KiogcHJlc2VudGEgYXNpbWV0csOtYSBkZSBzZXNnbyBuZWdhdGl2byBjb24gcmFuZ28gaW50ZXJjdWFydMOtbGljbyBlc3RyZWNobyBkZSBkaXNwZXJzacOzbiBpbXBlcmNlcHRpYmxlLiBBZGVtw6FzLCB1biBkYXRvIHNlIHZpc3VhbGl6YSBjb21vIG91dGxpZXIuIEFzw60sIHB1ZWRlIGRlY2lyc2UgcXVlIGxhIHZhcmlhYmxlIHJlZ2lzdHJhIHZhbG9yZXMgYWx0b3MgZW4gcmVsYWNpw7NuIGNvbiBzdSBpbnRlcnZhbG8gZGUgbWVkaWNpw7NuLiBFbiBjb21wYXJhY2nDs24sIHNlZ8O6biBsYSBwZXN0YcOxYSAqKlJlc3VtZW4gZGUgVE9FRkwgU2NvcmUqKiwgbGEgdmFyaWFibGUgKipUT0VGTCBTY29yZSoqIHNlIHZpc3VhbGl6YSBtw6FzIHNpbcOpdHJpY2EgcXVlIGxhIGFudGVyaW9yLCBzaW4gcHJlc2VudGFyIGRhdG9zIGF0w61waWNvcywgcGVybyBjb24gbWVkaWFuYSBxdWUgbXVlc3RyYSB1bmEgbGlnZXJhIGNvbmNlbnRyYWNpw7NuIGRlIG1lZGlkYXMgaGFjaWEgbGEgbWl0YWQgc3VwZXJpb3IgZGUgbG9zIGRhdG9zLg0KDQpDb21wbGVtZW50YXJpYW1lbnRlLCBlbiAqKkRpYWdyYW1hIGRlIERpc3BlcnNpw7NuIFRPRUZMIHZzLiBDb0EqKiBzZSBwdWVkZSBvYnNlcnZhciBxdWUgZXhpc3RlIHVuYSBjb3JyZWxhY2nDs24gcG9zaXRpdmEgZGUgbmF0dXJhbGV6YSBhcHJlY2lhYmxlbWVudGUgbGluZWFsIGVudHJlIGxhcyB2YXJpYWJsZSAqKkNoYW5jZSBvZiBBZG1pdCoqIHkgKipUT0VGTCBTY29yZSoqLiBTaW4gZW1iYXJnbywgc2kgc2Ugb2JzZXJ2YSBlbCBncsOhZmljbyBkZSAqKkRpYWdyYW1hcyBUb3RhbGVzIGRlIERpc3BlcnNpw7NuKiogKHF1ZSBleGNsdXllcm9uIGxhcyB2YXJpYWJsZXMgY3VhbGl0YXRpdmFzOjpub21pbmFsZXMpIGVzIGNvbnN0YXRhYmxlIHF1ZSBleGlzdGUgdW5hIGNvcnJlbGFjacOzbiBtw6FzIGZ1ZXJ0ZSBlbnRyZSBsYSB2YXJpYWJsZSBkZSBpbnRlcsOpcyAqKkNoYW5jZSBvZiBBZG1pdCoqIHkgKipDR1BBKiouDQoNCg0KIyMjIyMjIFJlc3VtZW4gZGUgT3ZlcmFsbCBTY29yZQ0KYGBge3IgcmVzdW1lbl9DaGFuY2Vfb2ZfQWRtaXQsIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0Kc3VtbWFyeShVbml2ZXJzaWRhZF9EYXRhc2V0JGBPdmVyYWxsIFNjb3JlYCkNCmJveHBsb3QoVW5pdmVyc2lkYWRfRGF0YXNldCRgT3ZlcmFsbCBTY29yZWAsIG1haW4gPSAiRGlhZ3JhbWEgZGUgQ2FqYSBkZSBPdmVyYWxsIFNjb3JlIiwgY29sID0gYygib3JhbmdlIikpDQpgYGANCg0KIyMjIyMjIFJlc3VtZW4gZGUgcmVzZWFyY2gNCmBgYHtyIHJlc3VtZW5fcmVzZWFyY2gsIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0Kc3VtbWFyeShVbml2ZXJzaWRhZF9EYXRhc2V0JHJlc2VhcmNoKQ0KYm94cGxvdChVbml2ZXJzaWRhZF9EYXRhc2V0JHJlc2VhcmNoLCBtYWluID0gIkRpYWdyYW1hIGRlIENhamEgZGUgcmVzZWFyY2giLCBjb2wgPSBjKCJnb2xkIikpDQpgYGANCg0KIyMjIyMjIERpYWdyYW1hIGRlIERpc3BlcnNpw7NuIHJlc2VhcmNoIHZzLiBPUyANCmBgYHtyIGRpc3BlcnNpb25fcmVzZWFyY2gsIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0KcGxvdChVbml2ZXJzaWRhZF9EYXRhc2V0JHJlc2VhcmNoLCBVbml2ZXJzaWRhZF9EYXRhc2V0JGBPdmVyYWxsIFNjb3JlYCwgbWFpbiA9ICJEaWFncmFtYSBkZSBEaXNwZXJzacOzbiByZXNlYXJjaCB2cy4gT3ZlcmFsbCBTY29yZSIpDQpgYGANCg0KIyMjIyMgRm9ybXVsYWNpw7NuIGRlbCBtb2RlbG8gZGUgUkxTIGVudHJlIGxhcyB2YXJpYWJsZXMgZGUgZXN0dWRpby4gey50YWJzZXQgLnRhYnNldC1waWxsc30NCkxhIG5hdmVnYWNpw7NuIGEgdHJhdsOpcyBkZSBsYXMgcGVzdGHDsWFzIG11ZXN0cmEgbG9zIGNvZWZpY2llbnRlcyBkZWwgbW9kZWxvIGRlIHJlZ3Jlc2nDs24gbGluZWFsIHNpbXBsZSwgc3UgcmVzdW1lbiBlc3RhZMOtc3RpY28geSBzdSB0YWJsYSBBTk9WQS4gU2UgbWVuY2lvbmEgZGUgbnVldm8gcXVlIGxhcyB2YXJpYWJsZXMgZGUgaW50ZXLDqXMgc29uOiAqKkNoYW5jZSBvZiBBZG1pdCoqICh2YXJpYWJsZSBkZXBlbmRpZW50ZSkgeSAqKlRPRUZMIFNjb3JlKiogKHZhcmlhYmxlIGluZGVwZW5kaWVudGUpLg0KDQpBbCBjb25zaWRlcmFyIGxvcyByZXN1bHRhZG9zIHByZXNlbnRhZG9zIGVuIGxhIHBlc3Rhw7FhICoqQ29lZmljaWVudGVzIGRlbCBNb2RlbG8gUkxTKiogc2UgcHVlZGUgZXN0YWJsZXIgcXVlIGVsIG1vZGVsbyBkZSByZWdyZXNpw7NuIGxpbmVhbCBzaW1wbGUgcXVlIHJlbGFjaW9uYSBhIGxhcyB2YXJpYWJsZXMgZGUgaW50ZXLDqXMsIGxhcyBjdWFsZXMgc2UgcmVzdW1pcsOhbiBjb21vICRDT0EkIHkgJFRPRUZMJCwgdGllbmUgbGEgZm9ybXVsYWNpw7NuOiQkXGhhdHtDT0F9PS0xLDI3MzQwMDUrMCwwMTg1OTkzXGNkb3QgVE9FRkxcaHNwYWNlezEwbW19KDE5KSQkIHBhcmEgZXN0ZSBtb2RlbG8gc2Ugb2J2aWEgbGEgaW50ZXJwcmV0YWNpw7NuIGRlbCBpbnRlcmNlcHRvIHBvciBjYXJlY2VyIGRlIHNlbnRpZG8gZGFkbyBxdWUgKipDaGFuY2Ugb2YgQWRtaXQqKiByZXN1bHRhcsOtYSBuZWdhdGl2YSBlbiBjYXNvIGRlIHVuIHZhbG9yIG51bG8gZGUgKipUT0VGTCBTY29yZSoqLCB5IGFtYmFzIHNpdHVhY2lvbmVzIGNhcmVjZW4gZGUgc2VudGlkby4gU2luIGVtYmFyZ28sIGVsIGNvZWZpY2llbnRlIGxpbmVhbCB1bmEgY29ycmVsYWNpw7NuIGRlIHByb3BvcmNpb25hbGlkYWQgZGlyZWN0YSBlbnRyZSBsYXMgdmFyaWFibGVzIGRlIGludGVyw6lzLCBhdW5xdWUgZGUgY3JlY2ltaWVudG8gbW9kZXJhZG8gZW4gKipDaGFuY2Ugb2YgQWRtaXQqKiBwb3IgY2FkYSB1bmlkYWQgbWFyZ2luYWwgZGUgKipUT0VGTCBTY29yZSoqLg0KDQpDb21wbGVtZW50YXJpYW1lbnRlLCBlbiBsYSBwZXN0YcOxYSAqKlJlc3VtZW4gRXN0YWTDrXN0aWNvIGRlbCBNb2RlbG8gUkxTKiogc2UgY29uc3RhdGEgcXVlIHBhcmEgY3VhbHF1aWVyIG5pdmVsIGRlIHNpZ25pZmljYW5jaWEgbGFzIGV2aWRlbmNpYXMgZXN0YXLDoW4gYSBmYXZvciBkZSBsYSBjb3JyZWxhY2nDs24gcG9zaXRpdmEgZW50cmUgbGFzIHZhcmlhYmxlcyBkZSBpbnRlcsOpcy4gQWRlbcOhcywgZWwgY29lZmljaWVudGUgZGUgZGV0cmVtaW5hY2nDs24gZXN0w6EgYSBmYXZvciBkZSBsYSBjb3JyZWxhY2nDs24gZXN0YWJsZWNpZW5kbyBxdWUgZWwgJDYyLjU3JCAkXCUkIGRlIGxhIHZhcmlhYmlsaWRhZCBkZSAqKkNoYW5jZSBvZiBBZG1pdCoqIGVzIGV4cGxpY2FkYSBwb3IgKipUT0VGTCBTY29yZSoqLCBlc3RvIHRhbWJpw6luIHF1ZWRhIGNvbmZpcm1hZG8gYSB0cmF2w6lzIGRlIGxhIHBlc3Rhw7FhICoqVGFibGEgQU5PVkEgcGFyYSBlbCBNb2RlbG8gUkxTKiouDQoNCiMjIyMjIyBDb2VmaWNpZW50ZXMgZGVsIE1vZGVsbyBSTFMNCmBgYHtyIGNvZWZpY2llbnRlc19SZWdyZXNpb25fTGluZWFsX1NpbXBsZSwgZmlnLmFsaWduID0gJ2NlbnRlcid9DQptb2RlbG9fUkxfU2ltcGxlID0gbG0oVW5pdmVyc2lkYWRfRGF0YXNldCRgT3ZlcmFsbCBTY29yZWB+VW5pdmVyc2lkYWRfRGF0YXNldCRyZXNlYXJjaCkNCmNvZWYobW9kZWxvX1JMX1NpbXBsZSkNCmBgYA0KIyMjIyMjIFJlc3VtZW4gRXN0YWTDrXN0aWNvIGRlbCBNb2RlbG8gUkxTDQpgYGB7ciByZXN1bWVuX1JlZ3Jlc2lvbl9MaW5lYWxfU2ltcGxlLCBmaWcuYWxpZ24gPSAnY2VudGVyJ30NCnN1bW1hcnkobW9kZWxvX1JMX1NpbXBsZSkNCmBgYA0KIyMjIyMjIFRhYmxhIEFOT1ZBIHBhcmEgZWwgTW9kZWxvIFJMUw0KYGBge3IgQU5PVkFfUmVncmVzaW9uX0xpbmVhbF9TaW1wbGUsIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0KYW5vdmEobW9kZWxvX1JMX1NpbXBsZSkNCmBgYA0KDQojIyMjIyBBbsOhbGlzaXMgZGVsIG1vZGVsbyBSTFMuIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQpMYSBuYXZlZ2FjacOzbiBhIHRyYXbDqXMgZGUgbGFzIHBlc3Rhw7FhcyBtdWVzdHJhIGVsIGludGVydmFsbyBkZSBjb25maWFuemEgcGFyYSAkXGJldGFfMSQgeSBwYXJhIGxhIHByZWRpY2Npw7NuIGRlbCBtb2RlbG8gZGUgcmVncmVzacOzbiBsaW5lYWwgc2ltcGxlLCBhbWJvcyBhbCA5NSAlLiBTZSBtZW5jaW9uYSBkZSBudWV2byBxdWUgbGFzIHZhcmlhYmxlcyBkZSBpbnRlcsOpcyBzb246ICoqQ2hhbmNlIG9mIEFkbWl0KiogKHZhcmlhYmxlIGRlcGVuZGllbnRlKSB5ICoqVE9FRkwgU2NvcmUqKiAodmFyaWFibGUgaW5kZXBlbmRpZW50ZSkuDQoNCkVsIGFuw6FsaXNpcyBkZWwgbW9kZWxvIFJMUyBtdWVzdHJhIHF1ZSBlcyBzaWduaWZpY2F0aXZvIHkgZW4gY29uc2VjdWVuY2lhIGFwb3J0YSBpbmZvcm1hY2nDs24gcmVsZXZhbnRlIHBhcmEgZXN0aW1hciAqKkNoYW5jZSBvZiBBZG1pdCoqIGEgcGFydGlyIGRlICoqVE9FRkwgU2NvcmUqKi4gRXN0byBkZWJpZG8gYSBxdWUgZWwgaW50ZXJ2YWxvIGRlIGNvbmZpYW56YSBwYXJhIGVsIGNvZWZpY2llbnRlIGRlICpUT0VGTCogZW4gZWwgbW9kZWxvIFJMUyBleGNsdXllIGFsIGNlcm86JCQwLDAxNzE4NDQ5PFxiZXRhXzE8MCwwMjAwMTQxMVxoc3BhY2V7MTBtbX0oMjApJCQNCg0KUG9yIMO6bHRpbW8sIGxhIHBlc3Rhw7FhICoqUHJlZGljY2lvbmVzIHkgc3VzIEludGV2YWxvcyBkZSBQcmVkaWNjacOzbioqIG11ZXN0cmFuIGxvcyBjw6FsY3Vsb3MgY29uIGJhc2UgZW4gZWwgbW9kZWxvLCBiYWpvIGludGVydmFsb3MgZGUgcHJlZGljY2nDs24gYWwgJDk1JCAkXCUkLCBkZSBsYXMgcHJlZGljY2lvbmVzIGRlIHRvZGFzIGxhcyBwZXN0YcOxYXMgZGVsIGNvbmp1bnRvIGRlIGRhdG9zIHBhcmEgbGEgdmFyaWFibGUgKipDaGFuY2Ugb2YgQWRtaXQqKi4gQ2FiZSBtZW5jaW9uYXIgcXVlIGVzdG9zIGludGVydmFsb3MgcmVzdWx0YW4gbcOhcyBhbmNob3MgcXVlIGFxdWVsbG9zIGNhbGN1bGFkb3MgY29uIGJhc2UgZW4gaW50ZXJ2YWxvcyBkZSBjb25maWFuemEgYWwgbWlzbW8gbml2ZWwgZGUgc2lnbmlmaWNhbmNpYS4NCg0KIyMjIyMjIEludGVydmFsbyBkZSBDb25maWFuemEgcGFyYSBCMQ0KYGBge3IgSW50ZXJ2YWxvX0NvbmZpYW56YV9CMSwgZmlnLmFsaWduID0gJ2NlbnRlcid9DQpjb25maW50KG1vZGVsb19STF9TaW1wbGUsIGxldmVsID0gMC45NSkNCmBgYA0KIyMjIyMjIFByZWRpY2Npb25lcyB5IHN1cyBJbnRlcnZhbG9zIGRlIFByZWRpY2Npw7NuDQpgYGB7ciBJbnRlcnZhbG9zX1ByZWRpY2Npb25fUCwgZmlnLmFsaWduID0gJ2NlbnRlcid9DQpwcmVkaWN0KG1vZGVsb19STF9TaW1wbGUsIGRhdGEuZnJhbWUoc2VxKDEsNDAwKSksIGludGVydmFsPSdwcmVkaWN0aW9uJywgbGV2ZWwgPSAwLjk1KQ0KYGBgDQojIyMjIyMgUHJlZGljY2lvbmVzIHkgc3VzIEludGVydmFsb3MgZGUgQ29uZmlhbnphDQpgYGB7ciBJbnRlcnZhbG9zX1ByZWRpY2Npb25fQywgZmlnLmFsaWduID0gJ2NlbnRlcid9DQpwcmVkaWN0KG1vZGVsb19STF9TaW1wbGUsIGRhdGEuZnJhbWUoc2VxKDEsNDAwKSksIGludGVydmFsPSdjb25maWRlbmNlJywgbGV2ZWwgPSAwLjk1KQ0KYGBgDQoNCiMjIyA0LjMuIFJlZ3Jlc2nDs24gTGluZWFsIE3Dumx0aXBsZQ0KDQpFc3RlIG1vZGVsbywgcXVlIHB1ZWRlIGluaWNpYWxtZW50ZSBwZW5zYXJzZSBjb21vIHVuYSBleHRlbnNpw7NuIGRlIGxhIHJlZ3Jlc2nDs24gbGluZWFsIHNpbXBsZSBwYXJhIGZhY2lsaXRhciBzdSBjb21wcmVuc2nDs24sIHkgcXVlIGV2ZW50dWFsbWVudGUgc2Vyw6EgbGxhbWFkbyBlbiBlc3RlIGVzdHVkaW8gY29tbyAqKlJMTSoqLCB0aWVuZSBjb21vIGVjdWFjacOzbiBnZW5lcmFsIGFkaXRpdmE6JCR5X2k9XGJldGFfMCtcYmV0YV8xIHhfe2kxfStcY2RvdHMrXGJldGFfayB4X3tpa30rXHZhcmVwc2lsb25faSwgXGhzcGFjZXszbW19aT0xLDIsXGRvdHMsblxoc3BhY2V7MTBtbX0oMjEpJCQgZG9uZGUgJEUoXGVwc2lsb24pPTAkIHkgJFYoXGVwc2lsb24pPVxzaWdtYV4yJC4gVGFtYmnDqW4sIHBhcmEgaGFjZXIgcHJ1ZWJhcyBkZSBoaXDDs3Rlc2lzIHkgY2FsY3VsYXIgaW50ZXJ2YWxvcyBkZSBjb25maWFuemEgeSBkZSBwcmVkaWNjacOzbiwgc2Ugc3Vwb25lIHF1ZSAkXGVwc2lsb24kIGVzdMOhIG5vcm1hbG1lbnRlIGRpc3RyaWJ1aWRhLiBDb21wbGVtZW50YXJpYW1lbnRlLCBjb24gYmFzZSBlbiBlbCBlbmZvcXVlIGRlIGxvcyBtw61uaW1vcyBjdWFkcmFkb3Mgb3JkaW5hcmlvcywgbGEgZXN0aW1hY2nDs24gZGUgc3VzIHBhcsOhbWV0cm9zIHNlIHBsYW50ZWEgZW4gdMOpcm1pbm9zIGRlIGxhIG1pbmltaXphY2nDs24gZGUgdW5hIGZ1bmNpw7NuIGRlIGVuc2F5byBkZXNkZSBsYSBjdWFsIHNlIG9ic2VydmFuIGxvcyBjdWFkcmFkb3MgZGUgbGFzIGRlc3ZpYWNpb25lcyBkZSBsYSB2YXJhaWJsZSBlc3R1ZGlhZGEuIExhIGZ1bmNpw7NuIGRlIGVuc2F5byBzZSByZXByZXNlbnRhIGNvbW8gJGYoYl8wLGJfMSwuLi4sYl9rKT0gXHN1bV97an1beV9pLShiXzArYl8xeF97MWp9K2JfMnhfezJqfSsuLi4rYl9reF97a2p9KV1eMiQuIEVzdG8gY29uZHVjZSBhIHVuIGNvbmp1bnRvIGRlIGVjdWFjaW9uZXMgbm9ybWFsZXMgbGluZWFsZXMgZW4gJGJfMCxiXzEsLi4uLGJfayQsIHF1ZSBhbCBzZXIgcmVzdWVsdGFzIGVudHJlZ2FuIGxhcyBlc3RpbWFjaW9uZXMgZGUgbcOtbmltb3MgY3VhZHJhZG9zIGRlICRcaGF0e1xiZXRhXzB9LFxoYXR7XGJldGFfMX0sLi4uLCwgXGhhdHtcYmV0YV9rfSQuDQoNCkNvbXBsZW1lbnRhcmlhbWVudGUsIGxhIHByb3BvcmNpw7NuIGRlIHZhcmlhY2nDs24gdG90YWwgZXhwbGljYWRhIHBvciBlbCBtb2RlbG8gZGUgcmVncmVzacOzbiBtw7psdGlwbGUgYSB0cmF2w6lzIGRlbCBjb2VmaWNpZW50ZSBkZSBkZXRlcm1pbmFjacOzbiBtw7psdGlwbGUgc2UgYWp1c3RhLCBnZW5lcmFsbWVudGUsIGNvbiBiYXNlIGVuIGVsIG7Dum1lcm8gZGUgcGFyw6FtZXRyb3MgZGVsIG1vZGVsby4NCg0KQWRlbcOhcywgdW5hIHBydWViYSBkZSB1dGlsaWRhZCBkZWwgbW9kZWxvIGRlIHJlZ3Jlc2nDs24gbGluZWFsIG3Dumx0aXBsZSBjb25zaXN0ZSBlbiB1bmEgcHJ1ZWJhIGRlIGhpcMOzdGVzaXMgYmFzYWRhIGVuIHVuIGVzdGFkw61zdGljbyBxdWUgdGllbmUgdW5hIGRpc3RyaWJ1Y2nDs24gJEYkIHBhcnRpY3VsYXIgY3VhbmRvICRIXzAkIGVzIHZlcmRhZGVyYSwgZXN0byBkZSBleHByZXNhIGVuIGVsIHBhcjokJEhfMDpcYmV0YV8xPVxiZXRhXzI9XGNkb3RzPVxiZXRhX2s9MFxoc3BhY2V7MTBtbX0oMjIpJCQNCiQkSF8xOiBcdGV4dCB7YWwgbWVub3MgdW5hIH1cYmV0YV9pXG5lcSAwXGhzcGFjZXs1bW19KGk9MSwuLi4saylcaHNwYWNlezEwbW19KDIzKSQkIGVsIHZhbG9yIGRlbCBlc3RhZMOtc3RpY28gZGUgcHJ1ZWJhIGVzOiQkZj1cZnJhY3tSXjIva317KDEtUl4yKShuLShrKzEpKX09XGZyYWN7U0NSL2t9e1NDRS8obi0oaysxKSl9PVxmcmFje1JNQ317Q01FfVxoc3BhY2V7MTBtbX0oMjQpJCQgZG9uZGUgJFNDUj1TVEMtU0NFJCwgcXVlIGVzIGxhIHN1bWEgZGUgY3VhZHJhZG9zIGRlIHJlZ3Jlc2nDs24sIHkgbGEgcmVnacOzbiBkZSByZWNoYXpvIHBhcmEgdW5hIHBydWViYSBkZSBuaXZlbCAkXGFscGhhJCBlczogJCRmXGdlcSBGX3tcYWxwaGEsIGssbi0oaysxKX1caHNwYWNlezEwbW19KDI1KSQkIFBvciDDumx0aW1vLCB1biBpbnRlcnZhbG8gZGUgY29uZmlhbnphIGFsICQxMDAoMS1cYWxwaGEpXCUkIHBhcmEgJFxiZXRhX2kkIGVzOiAkJFxoYXRcYmV0YV9pXHBtIHRfe1xhbHBoYS8yLG4tKGsrMSl9XGNkb3Qgc197XGhhdFxiZXRhX3tpfX1caHNwYWNlezEwbW19KDI2KSQkIHkgdW4gaW50ZXJ2YWxvIGRlIGNvbmZpYW56YSBhbCBtaXNtbyBuaXZlbCBkZSBzaWduaWZpY2FuY2lhIHBhcmEgdW4gdmFsb3IgZnV0dXJvIGVzdMOhIGRhZG8gcG9yOiAkJFxoYXQgeVxwbSB0X3tcYWxwaGEvMixuLShrKzEpfVxjZG90IFxzcXJ0e3NeMitzXjJfe1xoYXQgWX19XGhzcGFjZXsxMG1tfSgyNykkJCBQYXJhIGNlcnJhciwgZXMgbmVjZXNhcmlvIG1lbmNpb25hciBxdWUgZXZlbnR1YWxtZW50ZSBzdXJnZW4gcHJvYmxlbWFzIGVuIGxvcyBhbsOhbGlzaXMgZGUgcmVncmVzacOzbiBtw7psdGlwbGUgcXVlIGltcGxpY2FuIGNvbnNpZGVyYXIgdMOpY25pY2FzIGRlIHNvbHVjacOzbiByZWxhY2lvbmFkYXMgY29uIHRyYW5zZm9ybWFjaW9uZXMgZGUgbm8tbGluZWFsaWRhZCwgZXN0YW5kYXJpemFjacOzbiB5IHNlbGVjY2nDs24gZGUgdmFyaWFibGVzLCBpZGVudGlmaWNhY2nDs24gZGUgb2JzZXJ2YWNpb25lcyBpbmZsdXllbnRlcywgbXVsdGljb2xpbmVhbGlkYWQsIGVudHJlIG90cmFzLiANCg0KIyMjIyBQbGFudGVhbWllbnRvIGRlbCBQcm9ibGVtYQ0KQ29uIGJhc2UgZW4gZWwgY29uanVudG8gZGUgZGF0b3MgZGVzY3JpdG8gZW4gbGEgc2VjY2nDs24gKioyKiogc2UgZm9ybXVsYXLDoSB1biBtb2RlbG8gZGUgcmVncmVzacOzbiBsaW5lYWwgbcO6bHRpcGxlIHBhcmEgZXN0dWRpYXIgbGEgcmVsYWNpw7NuIGxpbmVhbCBtw7psdGlwbGUgc3VwdWVzdGEgZW50cmUgbGFzIHZhcmFpYmxlcyBkZWZpbmlkYXMgcG9yIGxvcyBjYW1wb3M6ICoqQ2hhbmNlIG9mIEFkbWl0KiogKHZhcmlhYmxlIGRlcGVuZGllbnRlKSB5IGxvcyBkZW3DoXMgY29tbyB2YXJpYWJsZXMgaW5kZXBlbmRpZW50ZXM6ICoqR2VuZGVyKiosICoqR1JFIFNjb3JlKiosICoqVE9FRkwgU2NvcmUqKiwgKipTT1AqKiwgKipMT1IqKiwgKipDR1BBKiosICoqUmVzZWFyY2gqKiB5ICoqVW5pdmVyc2l0eSBSYXRpbmcqKi4NCg0KIyMjIyBEZXNhcnJvbGxvIGRlbCBBbsOhbGlzaXMNCkVsIGVzdHVkaW8gZGUgcmVncmVzacOzbiBsaW5lYWwgbcO6bHRpcGxlIGhhIHNpZG8gcHJvY2VzYWRvIGNvbiBgciBSLnZlcnNpb24uc3RyaW5nYCBtZWRpYWRvIHBvciBSU3R1ZGlvIDIwMjIuMDcuMiBCdWlsZCA1NzYgZW4gdW5hIHBsYXRhZm9ybWEgeDg2XzY0LXc2NC1taW5ndzMyLg0KDQojIyMjIyBSZXN1bWVuIGVzdGFkw61zdGljbyBkZSBsYXMgdmFyaWFibGVzIGRlIGVzdHVkaW8uIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQpMYSBuYXZlZ2FjacOzbiBhIHRyYXbDqXMgZGUgbGFzIHBlc3Rhw7FhcyBtdWVzdHJhIGVsIHJlc3VtZW4gZXN0YWTDrXN0aWNvIGRlIHRvZGFzIGxhcyB2YXJpYWJsZXMgZGVsIGNvbmp1bnRvIGRlIGRhdG9zLCBleGNlcHRvICoqU2VyaWFsKiosIHBvcnF1ZSBzaW1wbGVtZW50ZSBlcyB1biDDrW5kaWNlIHBvc2ljaW9uYWwuIFNpbiBlbWJhcmdvLCBwYXJhIGxhcyB2YXJhaWJsZXMgZGUgbmF0dXJhbGV6YSBjdWFudGl0YXRpdmE6OnJhesOzbiBlbCByZXN1bWVuIHNlcsOhIGVsIHRyYWRpY2lvbmFsLCBwZXJvIHBhcmEgbGFzIHZhcmlhYmxlcyBkZSBuYXR1cmFsZXphIGN1YWxpdGF0aXZhOjpub21pbmFsIGVsIHJlc3VtZW4gZXN0YWTDrXN0aWNvIGNvbnNpc3RpcsOhIGVuIGNvbnRlb3MsIHByb3BvcmNpb25lcyB5IGRpYWdyYW1hcyBkZSBiYXJyYXMuICBTZSBtZW5jaW9uYSBkZSBudWV2byBxdWUgKipDaGFuY2Ugb2YgQWRtaXQqKiBlcyBsYSB2YXJpYWJsZSBkZXBlbmRpZW50ZS4NCg0KIyMjIyMjIFJlc3VtZW4gVmFyaWFibGVzIEN1YW50aXRhdGl2YXMNCmBgYHtyIHJlc3VtZW5fVmFyaWFibGVzX0N1YW50aXRhdGl2YXMsIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0Kc3VtbWFyeShVbml2ZXJzaWRhZF9EYXRhc2V0JGBhciBzY29yZWApDQpzdW1tYXJ5KFVuaXZlcnNpZGFkX0RhdGFzZXQkYGVyIHNjb3JlYCkNCnN1bW1hcnkoVW5pdmVyc2lkYWRfRGF0YXNldCRgZnNyIHNjb3JlYCkNCnN1bW1hcnkoVW5pdmVyc2lkYWRfRGF0YXNldCRgY3BmIHNjb3JlYCkNCnN1bW1hcnkoVW5pdmVyc2lkYWRfRGF0YXNldCRgaWZyIHNjb3JlYCkNCnN1bW1hcnkoVW5pdmVyc2lkYWRfRGF0YXNldCRgaXNyIHNjb3JlYCkNCnN1bW1hcnkoVW5pdmVyc2lkYWRfRGF0YXNldCRgaXJuIHNjb3JlYCkNCnN1bW1hcnkoVW5pdmVyc2lkYWRfRGF0YXNldCRgZ2VyIHNjb3JlYCkNCnN1bW1hcnkoVW5pdmVyc2lkYWRfRGF0YXNldCRgU1VTIFNDT1JFYCkNCnN1bW1hcnkoVW5pdmVyc2lkYWRfRGF0YXNldCRgT3ZlcmFsbCBTY29yZWApDQpgYGANCg0KIyMjIyMjIFJlc3VtZW4gVmFyaWFibGVzIEN1YWxpdGF0aXZhcw0KYGBge3IgcmVzdW1lbl9WYXJpYWJsZXNfQ3VhbGl0YXRpdmFzLCBmaWcuYWxpZ24gPSAnY2VudGVyJ30NCnRhYmxlKFVuaXZlcnNpZGFkX0RhdGFzZXQkc3RhdHVzKQ0KcHJvcC50YWJsZSh0YWJsZShVbml2ZXJzaWRhZF9EYXRhc2V0JHN0YXR1cykpDQpiYXJwbG90KHRhYmxlKFVuaXZlcnNpZGFkX0RhdGFzZXQkc3RhdHVzKSkNCnRhYmxlKFVuaXZlcnNpZGFkX0RhdGFzZXQkcmVzZWFyY2gpDQpwcm9wLnRhYmxlKHRhYmxlKFVuaXZlcnNpZGFkX0RhdGFzZXQkcmVzZWFyY2gpKQ0KYmFycGxvdCh0YWJsZShVbml2ZXJzaWRhZF9EYXRhc2V0JHJlc2VhcmNoKSkNCnRhYmxlKFVuaXZlcnNpZGFkX0RhdGFzZXQkZm9jdXMpDQpwcm9wLnRhYmxlKHRhYmxlKFVuaXZlcnNpZGFkX0RhdGFzZXQkZm9jdXMpKQ0KYmFycGxvdCh0YWJsZShVbml2ZXJzaWRhZF9EYXRhc2V0JGZvY3VzKSkNCmBgYA0KDQojIyMjIyMgRGlhZ3JhbWFzIGRlIERpc3BlcnNpw7NuIFZhcmlhYmxlcyBDdWFudGl0YXRpdmFzDQpgYGB7ciBkaXNwZXJzaW9uZXNfVmFyaWFibGVzX0N1YW50aXRhdGl2YXMsIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0KcGFpcnMofmBhciBzY29yZWArYGVyIHNjb3JlYCtgZnNyIHNjb3JlYCtgY3BmIHNjb3JlYCtgaWZyIHNjb3JlYCtgaXNyIHNjb3JlYCtgaXJuIHNjb3JlYCtgZ2VyIHNjb3JlYCtgU1VTIFNDT1JFYCtgT3ZlcmFsbCBTY29yZWAsIGRhdGEgPSBVbml2ZXJzaWRhZF9EYXRhc2V0KQ0KYGBgDQoNCiMjIyMjIEZvcm11bGFjacOzbiBkZWwgbW9kZWxvIGRlIFJMTSBlbnRyZSBsYXMgdmFyaWFibGVzIGRlIGVzdHVkaW8uIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQpMYSBuYXZlZ2FjacOzbiBhIHRyYXbDqXMgZGUgbGFzIHBlc3Rhw7FhcyBtdWVzdHJhIGVsIHJlc8O6bWVuIHkgbGEgdGFibGEgQU5PVkEgZGVsIG1vZGVsbyBkZSByZWdyZXNpw7NuIGxpbmVhbCBtw7psdGlwbGUgdG90YWwgeSBsb3MgY29lZmljaWVudGVzIHRhbnRvIGRlbCBtb2RlbG8gbWVuY2lvbmFkbyBjb21vIGVsIGxvZ3JhZG8gbHVlZ28gZGUgcmVkdWNpcmxvLiBDb24gYmFzZSBlbiBsYSBleHBsb3JhY2nDs24gZGUgbG9zIGRhdG9zIGRlbCByZXN1bWVuIGVzdGFkaXN0aWNvIGRlIGxhcyB2YXJpYWJsZXMgZGUgZXN0dWRpbyB5IGVsIHJlc8O6bWVuIHkgbGEgdGFibGEgQU5PVkEgZGVsIG1vZGVsbyB0b3RhbCBzZSBmb3JtdWxhbiBwYXJhIGNvbXBhcmFjacOzbiBkb3MgbW9kZWxvcyBSTE06IHVubyBxdWUgaW5jbHV5ZSBhIHRvZGFzIGxhcyB2YXJpYmxlcyBkZWwgY29uanVudG8gZGUgZGF0b3MsIGV4Y2VwdG8gKipTZXJpYWwqKiwgeSBvdHJvIHF1ZSBleGNsdXllIGEgKipHZW5kZXIqKiwgKipTT1AqKiB5ICoqVW5pdmVyc2l0eSBSYXRpbmcqKi4gU2UgbWVuY2lvbmEgZGUgbnVldm8gcXVlICoqQ2hhbmNlIG9mIEFkbWl0KiogZXMgbGEgdmFyaWFibGUgZGVwZW5kaWVudGUuDQoNCkFsIGNvbnNpZGVyYXIgbG9zIHJlc3VsdGFkb3MgcHJlc2VudGFkb3MgZW4gbGEgcGVzdGHDsWEgKipDb2VmaWNpZW50ZXMgZGVsIE1vZGVsbyBSTE0gVG90YWwqKiBzZSBwdWVkZSBlc3RhYmxlciBxdWUgZWwgbW9kZWxvIGRlIHJlZ3Jlc2nDs24gbGluZWFsIG3Dumx0aXBsZSB0b3RhbCBxdWUgcmVsYWNpb25hIGEgbGFzIHZhcmlhYmxlcyBkZSBpbnRlcsOpcywgbGFzIGN1YWxlcyBzZSByZXN1bWlyw6FuIGNvbW86ICRPUyQgKCoqT3ZlcmFsbCBTY29yZSoqKSwgJEFSJCAoKiphciBTY29yZSoqKSwgJEVSJCAoKiplciBTY29yZSoqKSwgJEZTUiQgKCoqZnNyIHNjb3JlKiopLCAkQ1BGJCAoKipDUEYgc2NvcmUqKiksICRJRlIkICgqKmlmciBzY29yZSoqKSwgJElTUiQgKCoqaXNyIHNjb3JlKiopLCAkSVJOJCAoKippcm4gc2NvcmUqKiksICRHRVIkICgqKmVyIHNjb3JlKiopLCAkVVJfMyQgKCoqVW5pdmVyc2l0eSBSYXRpbmc6OjMqKiksICRVUl80JCAoKipVbml2ZXJzaXR5IFJhdGluZzo6NCoqKSB5ICRVUl81JCAoKipVbml2ZXJzaXR5IFJhdGluZzo6NSoqKSwgdGllbmUgbGEgZm9ybXVsYWNpw7NuIChjb24gY29lZmljaWVudGVzIHJlZG9uZGVhZG9zIGEgY3VhdHJvIGNpZnJhcyBkZWNpbWFsZXMgcG9yIG1vdGl2b3MgZGUgZWRpY2nDs24pOiQkXHRpbnkgXGhhdHtDT0F9PS0xLDI0MjUrMCwwMDE3XGNkb3QgR1JFKzAsMDAzMVxjZG90IFRPRUZMLTAsMDAyNlxjZG90IFNPUCswLDAyMjdcY2RvdCBMT1IrMCwxMTg4XGNkb3QgQ0dQQS0wLDAwMDlcY2RvdCBHXzErMCwwMjQ0XGNkb3QgUl8xLTAuMDE0NlxjZG90IFVSXzItMCwwMDkzXGNkb3QgVVJfMy0wLDAwNzJcY2RvdCBVUl80KzAsMDEwNVxjZG90IFVSXzVcaHNwYWNlezEwbW19KDI4KSQkIHBhcmEgZXN0ZSBtb2RlbG8gc2Ugb2J2aWEgbGEgaW50ZXJwcmV0YWNpw7NuIGRlbCBpbnRlcmNlcHRvIHBvciBjYXJlY2VyIGRlIHNlbnRpZG8gZGFkbyBxdWUgKipDaGFuY2Ugb2YgQWRtaXQqKiByZXN1bHRhcsOtYSBuZWdhdGl2YSBlbiBjYXNvIGRlIHVuIHF1ZSBsYXMgdmFyaWFibGVzIHByZWRpY3RvcmFzIGZ1ZXNlbiBudWxhcyBhIGxhIHZleiwgeSBhbWJhcyBzaXR1YWNpb25lcyBjYXJlY2VuIGRlIHNlbnRpZG8uDQoNClBvciBvdHJvIGxhZG8sIGx1ZWdvIGRlIGF1c2N1bHRhciBlbCByZXN1bWVuIGVzdGFkw61zdGljbyB5IGxhIHRhYmxhIEFOT1ZBIGRlbCBtb2RlbG8gUkxNIFRvdGFsIChjb21vIHNlIG11ZXN0cmEgZW4gbGEgcGVzdGHDsWEgaG9tw7NuaW1hKSwgc2UgcHVkbyBlc3RhYmxlY2VyLCBjb24gZWwgYXBveW8gZGUgbG9zIHJlc8O6bWVuZXMgZXN0YWTDrXN0aWNvcyBkZSBsYXMgdmFyaWFibGVzIGRlIGVzdHVkaW8sIHF1ZSBwb2TDrWEgZXhjbHVpcnNlIGRpcmVjdGFtZW50ZSBkZWwgbW9kZWxvIHBvciBiYWphIHNpZ25pZmljYW5jaWEgbGFzIHZhcmlhYmxlcyAqKkdlbmRlcioqIHkgKipVbml2ZXJzaXR5IFJhdGluZyoqOyBzaW4gZW1iYXJnbywgbGEgdmFyaWFibGUgKipTT1AqKiBwcmVzZW50w7MgdW4gcGFydGUgY29udHJhZGljdG9yaW86IHNpZ25pZmljYW5jaWEgZW4gZWwgcmVzdW1lbiwgcGVybyBsbyBjb250cmFyaW8gZW4gQU5PVkEsIGxhIGRlY2lzacOzbiB0b21hZGEgZnVlIGV4Y2x1aXJsYSBkZWwgbW9kZWxvLiBFc3RvIGltcGxpY8OzIHF1ZSBzZSBjYWxjdWxhc2UgdW4gbW9kZWxvIHJlZHVjaWRvIGNvbiBsYSBmb3JtdWxhY2nDs24gKGNvbiBiYXNlIGVuIGxhcyBtaXNtYXMgY29uc2lkZXJhY2lvbmVzIGRlIGVkaWNpw7NuIGRlbCBtb2RlbG8gdG90YWwpOiQkXGhhdHtDT0F9PS0xLDI5ODUrMCwwMDE4XGNkb3QgR1JFKzAsMDAzMFxjZG90IFRPRUZMKzAsMDIyOFxjZG90IExPUiswLDEyMTBcY2RvdCBDR1BBKzAsMDI0NlxjZG90IFJfMVxoc3BhY2V7MTBtbX0oMjkpJCQNCg0KIyMjIyMjIFJlc3VtZW4geSBBTk9WQSBkZWwgTW9kZWxvIFJMTSBUb3RhbA0KYGBge3IsIHJlc3VtZW5feV9BTk9WQV9STE1fVG90YWwsIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0Kc3VtbWFyeShsbShVbml2ZXJzaWRhZF9EYXRhc2V0JGBPdmVyYWxsIFNjb3JlYH5Vbml2ZXJzaWRhZF9EYXRhc2V0JGBnZXIgc2NvcmVgK1VuaXZlcnNpZGFkX0RhdGFzZXQkYGlzciBzY29yZWArVW5pdmVyc2lkYWRfRGF0YXNldCRgaXJuIHNjb3JlYCtVbml2ZXJzaWRhZF9EYXRhc2V0JGBpZnIgc2NvcmVgK1VuaXZlcnNpZGFkX0RhdGFzZXQkYGNwZiBzY29yZWArVW5pdmVyc2lkYWRfRGF0YXNldCRgYXIgc2NvcmVgK1VuaXZlcnNpZGFkX0RhdGFzZXQkYGVyIHNjb3JlYCtVbml2ZXJzaWRhZF9EYXRhc2V0JGBmc3Igc2NvcmVgK2FzLmZhY3RvcihVbml2ZXJzaWRhZF9EYXRhc2V0JHN0YXR1cykrYXMuZmFjdG9yKFVuaXZlcnNpZGFkX0RhdGFzZXQkcmVzZWFyY2gpK2FzLmZhY3RvcihVbml2ZXJzaWRhZF9EYXRhc2V0JGZvY3VzKSkpDQphbm92YShsbShVbml2ZXJzaWRhZF9EYXRhc2V0JGBPdmVyYWxsIFNjb3JlYH5Vbml2ZXJzaWRhZF9EYXRhc2V0JGBnZXIgc2NvcmVgK1VuaXZlcnNpZGFkX0RhdGFzZXQkYGlzciBzY29yZWArVW5pdmVyc2lkYWRfRGF0YXNldCRgaXJuIHNjb3JlYCtVbml2ZXJzaWRhZF9EYXRhc2V0JGBpZnIgc2NvcmVgK1VuaXZlcnNpZGFkX0RhdGFzZXQkYGNwZiBzY29yZWArVW5pdmVyc2lkYWRfRGF0YXNldCRgYXIgc2NvcmVgK1VuaXZlcnNpZGFkX0RhdGFzZXQkYGVyIHNjb3JlYCtVbml2ZXJzaWRhZF9EYXRhc2V0JGBmc3Igc2NvcmVgK2FzLmZhY3RvcihVbml2ZXJzaWRhZF9EYXRhc2V0JHN0YXR1cykrYXMuZmFjdG9yKFVuaXZlcnNpZGFkX0RhdGFzZXQkcmVzZWFyY2gpK2FzLmZhY3RvcihVbml2ZXJzaWRhZF9EYXRhc2V0JGZvY3VzKSkpDQpgYGANCg0KIyMjIyMjIENvZWZpY2llbnRlcyBkZWwgTW9kZWxvIFJMTSBUb3RhbA0KYGBge3IsIGNvZWZpY2llbnRlc19STE1fVG90YWwsIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0KY29lZmZpY2llbnRzKGxtKFVuaXZlcnNpZGFkX0RhdGFzZXQkYE92ZXJhbGwgU2NvcmVgflVuaXZlcnNpZGFkX0RhdGFzZXQkYGdlciBzY29yZWArVW5pdmVyc2lkYWRfRGF0YXNldCRgaXNyIHNjb3JlYCtVbml2ZXJzaWRhZF9EYXRhc2V0JGBpcm4gc2NvcmVgK1VuaXZlcnNpZGFkX0RhdGFzZXQkYGlmciBzY29yZWArVW5pdmVyc2lkYWRfRGF0YXNldCRgY3BmIHNjb3JlYCtVbml2ZXJzaWRhZF9EYXRhc2V0JGBhciBzY29yZWArVW5pdmVyc2lkYWRfRGF0YXNldCRgZXIgc2NvcmVgK1VuaXZlcnNpZGFkX0RhdGFzZXQkYGZzciBzY29yZWArYXMuZmFjdG9yKFVuaXZlcnNpZGFkX0RhdGFzZXQkc3RhdHVzKSthcy5mYWN0b3IoVW5pdmVyc2lkYWRfRGF0YXNldCRyZXNlYXJjaCkrYXMuZmFjdG9yKFVuaXZlcnNpZGFkX0RhdGFzZXQkZm9jdXMpKSkNCmBgYA0KDQojIyMjIyMgQ29lZmljaWVudGVzIGRlbCBNb2RlbG8gUkxNIFJlZHVjaWRvDQpgYGB7ciBjb2VmaWNpZW50ZXNfUkxNX1JlZHVjaWRvLCBmaWcuYWxpZ24gPSAnY2VudGVyJ30NCmNvZWZmaWNpZW50cyhsbShVbml2ZXJzaWRhZF9EYXRhc2V0JGBPdmVyYWxsIFNjb3JlYH5Vbml2ZXJzaWRhZF9EYXRhc2V0JGBnZXIgc2NvcmVgK1VuaXZlcnNpZGFkX0RhdGFzZXQkYGlzciBzY29yZWArVW5pdmVyc2lkYWRfRGF0YXNldCRgaXJuIHNjb3JlYCtVbml2ZXJzaWRhZF9EYXRhc2V0JGBpZnIgc2NvcmVgK1VuaXZlcnNpZGFkX0RhdGFzZXQkYGNwZiBzY29yZWArVW5pdmVyc2lkYWRfRGF0YXNldCRgYXIgc2NvcmVgK1VuaXZlcnNpZGFkX0RhdGFzZXQkYGVyIHNjb3JlYCtVbml2ZXJzaWRhZF9EYXRhc2V0JGBmc3Igc2NvcmVgK2FzLmZhY3RvcihVbml2ZXJzaWRhZF9EYXRhc2V0JHJlc2VhcmNoKSkpDQpgYGANCg0KIyMjIyMgQW7DoWxpc2lzIGRlbCBtb2RlbG8gUkxNLiB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KTGEgbmF2ZWdhY2nDs24gYSB0cmF2w6lzIGRlIGxhcyBwZXN0YcOxYXMsIHByaW1lcm8gcG9yICoqTWVqb3IgTW9kZWxvIEl0ZXJhZG8gc2Vnw7puIEFJQyoqLCBtdWVzdHJhIHF1ZSBsYSBkZWNpc2nDs24gZGUgZXhjbHVpciBkZWwgbW9kZWxvIHRvdGFsIGEgbGEgdmFyaWFibGUgKipTT1AqKiByZXN1bHTDsyBhY2VydGFkYSwgZWwgYWxnb3JpdG1vIGl0ZXJhZG8gcXVlIGNvbnNpZGVyYSBjb21wb25lbnRlcyBBTk9WQSB5IGRlIGRlc3ZpYWNpw7NuIGRlIHJlc2lkdWFsZXMgbGEgZXhjbHV5w7MgZW4gbGEgY3VhcnRhIGl0ZXJhY2nDs24uIEFkZW3DoXMsIGVsIG1pc21vIGFsZ29yaXRtbyBkZXRlcm1pbsOzIHVuIG1vZGVsbyBiYXNhZG8gZW4gbGFzIG1pc21hcyB2YXJpYWJsZXMgZGVsIG1vZGVsbyByZWR1Y2lkbyBmdW5kYW1lbnRvIGVuIGxhIGluc3BlY2Npw7NuIGRlIHZhcmFpYmxlcyBkZSBsYXMgZG9zIHNlY2Npb25lcyBwcmVjZWRlbnRlcy4NCg0KQ29tcGxlbWVudGFyaWFtZW50ZSwgZW4gbGEgcGVzdGHDsWEgZGUgKipCb25kYWRlcyBkZSBBanVzdGUsIFNpZ25pZmljYW5jaWFzIHkgQ3JpdGVyaW9zIGRlIEluZm9ybWFjacOzbiBDb21wYXJhZG9zKiogc2UgcHJlc2VudGFuIGVuIHBhcmFsZWxvIGxvcyBtb2RlbG9zIGdlbmVyYWRvcy4gTGEgY29uc2lkZXJhY2nDs24gZGUgdG9kYXMgbGFzIHZhcmlhYmxlcyBkZWwgY29uanVudG8gZGUgZGF0b3MgcHJlc2VudMOzIHVuYSBib25kYWQgZGUgYWp1c3RlIGNvbiBiYXNlIGVuIGVsIGNvZWZpY2llbnRlIGRlIGRldGVybWluYWNpw7NuIG3Dumx0aXBsZSBxdWUgc29sbyBzZSByZWR1am8gZW4gdGVybWlub3MgYWJzb2x1dG9zICQwLDAwMiQgcHVudG9zIChlcyBkZWNpciwgc2UgcGFzw7MgZGUgZXhwbGljYXIgZWwgJDgwLDUkICRcJSQgZGUgbGEgdmFyaWFiaWxpZGFkIGEgZWwgJDgwLDMkICRcJSQpIGVuIGNvbXBhcmFjacOzbiBjb24gZWwgbW9kZWxvIHJlZHVjaWRvIHkgZWwgaXRlcmFkbzsgYWRlbcOhcywgbGFzIHNpZ25pZmljYW5jaWFzIGdsb2JhbCBlIGluZGl2aWR1YWxlcyBkZSBlc3RvcyBldmlkZW5jaWFuIHF1ZSBhbWJvcyBtb2RlbG9zLCBxdWUgc29uIGlkw6ludGljb3MsIGFwb3J0YW4gaW5mb3JtYWNpw7NuIHJlbGV2YW50ZSBwYXJhIGVzdGltYXIgbGEgdmFyaWFibGUgZGVwZW5kaWVudGUgKipDaGFuY2Ugb2YgQWRtaXQqKiwgcG9ycXVlIHBhcmEgbG9zIHZhbG9yZXMgY3LDrXRpY29zIG9idGVuaWRvcyBkZSBsYXMgcHJ1ZWJhcyAkRiQgKHBhcmEgbGEgc2lnbmlmaWNhbmNpYSBnbG9iYWwpIHkgJHQkIChwYXJhIGxhcyBzaWduaWZpY2FuY2lhcyBpbmRpdmlkdWFsZXMpLCBsb3MgcC12YWxvcmVzIHJlc3VsdGFyb24gc2llbXByZSBtZW5vcmVzIHBhcmEgY3VhbHF1aWVyIG5pdmVsIGRlIHNpZ25pZmljYW5jaWEgJFxhbHBoYSQgaW5jbHVpZG8gZGVudHJvIGRlIGxvcyB0cmFkaWNpb25hbGVzLCBwb3IgZWplbXBsbywgJFxhbHBoYT0wLDAxJC4NCg0KUG9yIMO6bHRpbW8sIGxvcyBjcml0ZXJpb3MgZGUgaW5mb3JtYWNpw7NuIEFJQyB5IEJJQyBtdWVzdHJhbiBxdWUgZWZlY3RpdmFtZW50ZSBlbiBsb3MgbW9kZWxvcyBpZMOpbnRpY29zIHJlZHVjaWRvIGUgaXRlcmFkbyBsYSByZWxhY2nDs24gZW50cmUgZWwgc2VzZ28geSBsYSB2YXJpYW56YSBlbiBzdXMgZm9ybXVsYWNpb25lcywgZXMgZGVjaXIsIGVudHJlIHN1cyBleGFjdGl0dWRlcyB5IGNvbXBsZWppZGFkZXMsIHJlc3VsdGEgbWVqb3IgcXVlIGVuIG1vZGVsbyB0b3RhbDogJEFJQ197UkxNUmVkdWNpZG99PUFJQ197UkxNSXRlcmFkb309LTEwNTksMjI1PC0xMDUyLDMxND1BSUNfe1JMTVRvdGFsfSQgeSAkQklDX3tSTE1SZWR1Y2lkb309QklDX3tSTE1JdGVyYWRvfT0tMTAzMSwyODQ8LTEwMDAsNDI1PUJJQ197UkxNVG90YWx9JC4NCg0KIyMjIyMjIE1lam9yIE1vZGVsbyBJdGVyYWRvIHNlZ8O6biBBSUMNCmBgYHtyLCBtZWpvcl9Nb2RlbG9fQUlDLCBmaWcuYWxpZ24gPSAnY2VudGVyJ30NCm1vZGVsb19JdGVyYWRvX1NURVAgPSBzdGVwKGxtKFVuaXZlcnNpZGFkX0RhdGFzZXQkYE92ZXJhbGwgU2NvcmVgflVuaXZlcnNpZGFkX0RhdGFzZXQkYGdlciBzY29yZWArVW5pdmVyc2lkYWRfRGF0YXNldCRgaXNyIHNjb3JlYCtVbml2ZXJzaWRhZF9EYXRhc2V0JGBpcm4gc2NvcmVgK1VuaXZlcnNpZGFkX0RhdGFzZXQkYGlmciBzY29yZWArVW5pdmVyc2lkYWRfRGF0YXNldCRgY3BmIHNjb3JlYCtVbml2ZXJzaWRhZF9EYXRhc2V0JGBhciBzY29yZWArVW5pdmVyc2lkYWRfRGF0YXNldCRgZXIgc2NvcmVgK1VuaXZlcnNpZGFkX0RhdGFzZXQkYGZzciBzY29yZWArYXMuZmFjdG9yKFVuaXZlcnNpZGFkX0RhdGFzZXQkc3RhdHVzKSthcy5mYWN0b3IoVW5pdmVyc2lkYWRfRGF0YXNldCRyZXNlYXJjaCkrYXMuZmFjdG9yKFVuaXZlcnNpZGFkX0RhdGFzZXQkZm9jdXMpKSkNCmNvZWZmaWNpZW50cyhtb2RlbG9fSXRlcmFkb19TVEVQKQ0KYGBgDQoNCiMjIyMjIyBCb25kYWRlcyBkZSBBanVzdGUsIFNpZ25pZmljYW5jaWFzIHkgQ3JpdGVyaW9zIGRlIEluZm9ybWFjacOzbiBDb21wYXJhZG9zDQpgYGB7cn0NCmxpYnJhcnkoc3RhcmdhemVyKQ0KDQptb2RlbG9fUkxNX1RPVEFMID0gbG0oVW5pdmVyc2lkYWRfRGF0YXNldCRgT3ZlcmFsbCBTY29yZWB+VW5pdmVyc2lkYWRfRGF0YXNldCRgZ2VyIHNjb3JlYCtVbml2ZXJzaWRhZF9EYXRhc2V0JGBpc3Igc2NvcmVgK1VuaXZlcnNpZGFkX0RhdGFzZXQkYGlybiBzY29yZWArVW5pdmVyc2lkYWRfRGF0YXNldCRgaWZyIHNjb3JlYCtVbml2ZXJzaWRhZF9EYXRhc2V0JGBjcGYgc2NvcmVgK1VuaXZlcnNpZGFkX0RhdGFzZXQkYGFyIHNjb3JlYCtVbml2ZXJzaWRhZF9EYXRhc2V0JGBlciBzY29yZWArVW5pdmVyc2lkYWRfRGF0YXNldCRgZnNyIHNjb3JlYCthcy5mYWN0b3IoVW5pdmVyc2lkYWRfRGF0YXNldCRzdGF0dXMpK2FzLmZhY3RvcihVbml2ZXJzaWRhZF9EYXRhc2V0JHJlc2VhcmNoKSthcy5mYWN0b3IoVW5pdmVyc2lkYWRfRGF0YXNldCRmb2N1cykpDQptb2RlbG9fUkxNX1JFRFVDSURPID0gbG0oVW5pdmVyc2lkYWRfRGF0YXNldCRgT3ZlcmFsbCBTY29yZWB+VW5pdmVyc2lkYWRfRGF0YXNldCRgZ2VyIHNjb3JlYCtVbml2ZXJzaWRhZF9EYXRhc2V0JGBpc3Igc2NvcmVgK1VuaXZlcnNpZGFkX0RhdGFzZXQkYGlybiBzY29yZWArVW5pdmVyc2lkYWRfRGF0YXNldCRgaWZyIHNjb3JlYCtVbml2ZXJzaWRhZF9EYXRhc2V0JGBjcGYgc2NvcmVgK1VuaXZlcnNpZGFkX0RhdGFzZXQkYGFyIHNjb3JlYCtVbml2ZXJzaWRhZF9EYXRhc2V0JGBlciBzY29yZWArVW5pdmVyc2lkYWRfRGF0YXNldCRgZnNyIHNjb3JlYCthcy5mYWN0b3IoVW5pdmVyc2lkYWRfRGF0YXNldCRyZXNlYXJjaCkpDQoNCnN0YXJnYXplcihtb2RlbG9fUkxNX1RPVEFMLCBtb2RlbG9fUkxNX1JFRFVDSURPLCBtb2RlbG9fSXRlcmFkb19TVEVQLCB0eXBlID0gInRleHQiLCBkZiA9IFRSVUUpDQpBSUMobW9kZWxvX1JMTV9UT1RBTCwgbW9kZWxvX1JMTV9SRURVQ0lETywgbW9kZWxvX0l0ZXJhZG9fU1RFUCkNCkJJQyhtb2RlbG9fUkxNX1RPVEFMLCBtb2RlbG9fUkxNX1JFRFVDSURPLCBtb2RlbG9fSXRlcmFkb19TVEVQKQ0KYGBgDQoNCiMjIyA0LjQuIFJlZ3Jlc2nDs24gTG9nw61zdGljYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQoNCkVzdGUgbW9kZWxvLCBxdWUgZXZlbnR1YWxtZW50ZSBzZXLDoSBsbGFtYWRvIGVuIGVzdGUgZXN0dWRpbyBjb21vICoqUkxvZ1MqKiwgZXN0YWJsZWNlIHF1ZSwgZW4gY29tcGFyYWNpw7NuIGNvbiB1biBtb2RlbG8gZGUgcmVncmVzacOzbiBsaW5lYWwgc2ltcGxlIHF1ZSByZWxhY2lvbmUgdW5hIHZhcmlhYmxlIGN1YW50aXRhdGl2YSBkZXBlbmRpZW50ZSAkeSQgY29uIHVuYSB2YXJhaWJsZSBjdWFudGl0YXRpdmEgaW5kZXBlbmRpZW50ZSAkeCQsIHJlbGFjaW9uYSB1bmEgdmFyaWFibGUgY2F0ZWfDs3JpY2EgZGljb3TDs21pY2EgKGNvbiB2YWxvcmVzIHBvc2libGVzICQxJCAow6l4aXRvKSB5ICQwJCAoZnJhY2FzbykpIGRlcGVuZGllbnRlICR5JCBjb24gZWwgdmFsb3IgZGUgcHJvYmFiaWxpZGFkICRwKHgpXGluIFswLCAxXSQgcXVlIGRlcGVuZGUgZGUgYWxndW5hIHZhcmlhYmxlIGN1YW50aXRhdGl2YSAkeCQuDQoNCkNvbW8gc2UgbWVuY2lvbsOzIGVuIGxhIHNlY2Npw7NuICoqMSoqIGxvcyBtb2RlbG9zIGRlIHJlZ3Jlc2nDs24gdXNhZG9zIGVuIGVzdGUgZXN0dWRpbyBwdWVkZW4gc2VyIHZpc3RvcyBjb21vIGNhc29zIHBhcnRpY3VsYXJlcyBkZWwgTW9kZWxvIExpbmVhbCBHZW5lcmFsaXphZG8gKCoqR0xNKiogcG9yIHN1cyBzaWdsYXMgZW4gaW5nbMOpcykuIEVzdGUgbW9kZWxvIGV4dGllbmRlIGFsIG1vZGVsbyBsaW5lYWwgZ2VuZXJhbCBhbCBsb2dyYXIgcXVlIGxhIHZhcmlhYmxlIGRlcGVuZGllbnRlIGVzdMOhIHJlbGFjaW9uYWRhIGxpbmVhbG1lbnRlIGNvbiBzdXMgZmFjdG9yZXMgeSBjb3ZhcmlhYmxlcyBhIHRyYXbDqXMgZGUgYWxndW5hIGZ1bmNpw7NuIGRlIGVubGFjZSB5IHF1ZSBsYSB2YXJpYWJsZSBkZXBlbmRpZW50ZSBwdWVkYSB0ZW5lciB1bmEgZGlzdHJpYnVjacOzbiBkaWZlcmVudGUgYSBsYSBub3JtYWwuIEFkZW3DoXMgZGUgbG9zIG1vZGVsb3MgdXNhZG9zIGVuIGVzdGUgZXN0dWRpbywgZWwgKipHTE0qKiB0YW1iacOpbiBjdWJyZTogbW9kZWxvcyBsb2dsaW5lYWxlcyBwYXJhIGRhdG9zIGRlIHJlY3VlbnRvLCBtb2RlbG9zIGxvZy1sb2cgY29tcGxlbWVudGFyaW8gcGFyYSBkYXRvcyBkZSBzdXBlcnZpdmVuY2lhIGNlbnN1cmFkb3MgcG9yIGludGVydmFsb3MsIHkgb3Ryb3MgbW9kZWxvcyBlc3RhZMOtc3RpY29zIGEgdHJhdsOpcyBkZSBsYSBwcm9waWEgZm9ybXVsYWNpw7NuIGdlbmVyYWwgZGVsIG1vZGVsby4NCg0KQ29tbyAqKkdMTSoqIHBlcm1pdGUgZXNwZWNpZmljYXIgZGlzdHJpYnVjaW9uZXMgZGlmZXJlbnRlcyBhIGxhIG5vcm1hbCB5IHVuYSBmdW5jacOzbiBkZSBlbmxhY2UgKGVudGVuZGlkYSBjb21vIHVuYSB0cmFuc2Zvcm1hY2nDs24gZGUgbGEgdmFyaWFibGUgZGVwZW5kaWVudGUgcXVlIHBlcm1pdGUgbGEgZXN0aW1hY2nDs24gZGVsIG1vZGVsbykgZGlmZXJlbnRlIGEgbGEgaWRlbnRpZGFkIHNlIHB1ZWRlIHRyYWJhamFyIGNvbiBtdWNoYXMgY29tYmluYWNpb25lcyBwb3NpYmxlcyBkZSBkaXN0cmlidWNpb25lcyB5IGZ1bmNpb25lcyBkZSBlbmxhY2UsIHZhcmlhcyBkZSBsYXMgY3VhbGVzIHB1ZWRlbiBzZXIgYWRlY3VhZGFzIHBhcmEgdW4gY29uanVudG8gZGUgZGF0b3MgZW4gcGFydGljdWxhciwgZXN0byBpbXBsaWNhIHF1ZSBsYSBlbGVjY2nDs24gZGUgbGEgY29tYmluYWNpw7NuIGVzdGFyw6Egb3JpZW50YWRhIHBvciBjb25zaWRlcmFjaW9uZXMgdGXDs3JpY2FzIGEgcHJpb3JpLCBwb3IgbGEgbmF0dXJhbGV6YSBkZSBsYXMgdmFyaWFibGVzLCBsYSBleHBlcmllbmNpYSBkZWwgaW52ZXN0aWdhZG9yIHkgbG9zIHJlc3VsdGFkb3MgYWwgY29tcGFyYXIgY29tYmluYWNpb25lcy4NCg0KRW4gZWwgY2FzbyBwb3IgdHJhdGFyLCBzZSB0cmFiYWphcsOhIGNvbiBiYXNlIGVuIHVuYSBkaXN0cmlidWNpw7NuIGJpbm9taWFsIChhZGVjdWFkYSBwYXJhIHZhcmlhYmxlcyBxdWUgcmVwcmVzZW50YW4gdW5hIHJlc3B1ZXN0YSBiaW5hcmlhKSBjb24gZnVuY2nDs24gZGUgZW5sYWNlIGxvZ2l0OiQkXHBpKHgpPVxkZnJhY3tlXntcYmV0YV8wK1xiZXRhXzEgeH19ezErIGVee1xiZXRhXzAgK1xiZXRhXzEgeH19PSAgXGRmcmFjezF9ezErIGVeey0oXGJldGFfMCtcYmV0YV8xIHgpfX1caHNwYWNlezEwbW19KDMwKSQkKGRlbCBpbmdsw6lzICoqbG9nKiphcml0aG1pYyB1bioqaXQqKjogdW5pZGFkIGxvZ2Fyw610bWljYSAobmF0dXJhbCkpOyBxdWUgYWRlbcOhcyBlcyBhcHJvcGlhZGEgw7puaWNhbWVudGUgcGFyYSBsYSBkaXN0cmlidWNpw7NuIGJpbm9taWFsKSwgcG9yIGxvIGN1YWwgdW4gbm9tYnJlIG3DoXMgYWRlY3VhZG8gcGFyYSBsYSByZWdyZXNpw7NuIHBvZHLDrWEgc2VyIHJlZ3Jlc2nDs24gbG9nw61zdGljYSBiaW5hcmlhLiBDYWJlIGFub3RhciBxdWUgZWwgdMOpcm1pbm8gbG9nw61zdGljbyBoYWNlIHJlZmVyZW5jaWEgYSBxdWUgbGEgZnVuY2nDs24gZGUgZW5sYWNlIGNvbnN0aXR1eWUsIGVuIGNpZXJ0byBzZW50aWRvLCB1biByZWZpbmFtaWVudG8gZGVsIG1vZGVsbyBleHBvbmVuY2lhbCBkZSBjcmVjaW1pZW50bywgZGVzY3JpdG8gcG9yIGxhIGZ1bmNpw7NuIHNpZ21vaWRlYSwgZGUgdW5hIG1hZ25pdHVkIGFzb2NpYWRhIGNvbiB1biBjb25qdW50byAkQyQuDQoNClBhcmEgZmFjaWxpdGFyIGxhcyBpbnRlcnByZXRhY2lvbmVzIHNlIGVudGllbmRlIHF1ZSBsYSBmdW5jacOzbiBkZSBlbmxhY2UgJFxwaSh4KSQgcHJvdmllbmUgZGUgdW5hIHJhesOzbiBkZSBwcm9iYWJpbGlkYWRlcyAoY29ub2NpZGEgZW4gaWRpb21hIGluZ2zDqXMgY29tbyBPRERTIHJhdGlvIChPUikpLCBxdWUgYSBzdSB2ZXogZXMgZWwgYXJndW1lbnRvIGRlIHVuIGxvZ2FyaXRtbzogJFxsb2dcbGVmdChcZnJhY3tccGkoeCl9ezEtXHBpKHgpfVxyaWdodCkkLCBhc8OtLCBzZSBtb2RlbGEgbGEgcHJvYmFiaWxpZGFkIGRlIHF1ZSBsYSB2YXJpYWJsZSBkZSByZXNwdWVzdGEgcGVydGVuZXpjYSBhbCBuaXZlbCBkZSByZWZlcmVuY2lhICQxJCBlbiBmdW5jacOzbiBkZWwgdmFsb3IgZGUgbG9zIHByZWRpY3RvcmVzLiBDb21wbGVtZW50YXJpYW1lbnRlLCBsYSB0cmFuc2Zvcm1hY2nDs24gZGUgcHJvYmFiaWxpZGFkZXMgYSByYXpvbmVzIGRlIHByb2JhYmlsaWRhZCBlcyBjb25zZXJ2YSBsYSBtb25vdG9uaWNpZGFkIGRlIHNlbnRpZG9zLiBBZGVtw6FzLCBsYSB0cmFuc2Zvcm1hY2nDs24gY29udmllcnRlIGVsIGludGVydmFsbyBkZSBwcm9iYWJpbGlkYWQgJFswLDFdJCBhICQoLVxpbmZ0eSxcaW5mdHkpJC4gTGFzIHByb3BpZWRhZGVzIHF1ZSBzZSBkYW4gZW50cmUgbGFzIHByb2JhYmlsaWRhZGVzIGNvbXBsZW1lbnRhcmlhcyBkZSDDqXhpdG8geSBmcmFjYXNvLCBzdXMgcmF6b25lcyB5IGxhIGZ1bmNpw7NuIGRlIGVubGFjZSBsb2dpdCBzb246DQoNCnx8fHwNCjotOnw6LTp8Oi06fA0KJHAow6l4aXRvKT1wKGZyYWNhc28pJHwkT1I9MSR8JExvZ2l0XGxlZnQoT1JccmlnaHQpPTAkDQokcCjDqXhpdG8pPHAoZnJhY2FzbykkfCRPUjwxJHwkTG9naXRcbGVmdChPUlxyaWdodCk8MCQNCiRwKMOpeGl0byk+cChmcmFjYXNvKSR8JE9SPjEkfCRMb2dpdFxsZWZ0KE9SXHJpZ2h0KT4wJA0KfHx8fA0KDQpTZSBlbnRpZW5kZSBxdWUgbGEgdHJhbnNmb3JtYWNpw7NuICRMb2dpdCQgY2FyZWNlIGRlIHNlbnRpZG8gcGFyYSBsYSBjZXJ0ZXphIGRlbCDDqXhpdG8gbyBkZWwgZnJhY2Fzby4NCg0KIyMjIyBQbGFudGVhbWllbnRvIGRlbCBQcm9ibGVtYQ0KQ29uIGJhc2UgZW4gZWwgY29uanVudG8gZGUgZGF0b3MgZGVzY3JpdG8gZW4gbGEgc2VjY2nDs24gKioyKiogc2UgZm9ybXVsYXLDoSB1biBtb2RlbG8gZGUgcmVncmVzacOzbiBsb2fDrXN0aWNhIHNpbXBsZSBwYXJhIGVzdHVkaWFyIGxhIHJlbGFjacOzbiBsb2fDrXN0aWNhIHN1cHVlc3RhIGVudHJlIGxhcyB2YXJhaWJsZXMgZGVmaW5pZGFzIHBvciBsb3MgY2FtcG9zOiAqKkNoYW5jZSBvZiBBZG1pdCoqICh2YXJpYWJsZSBpbmRlcGVuZGllbnRlKSB5ICoqUmVzZWFyY2gqKiAodmFyaWFibGUgZGVwZW5kaWVudGUpLCBjb24gYmFzZSBlbiB1bmEgZGlzdHJpYnVjacOzbiBiaW5vbWlhbCB5IGxhIGZ1bmNpw7NuIGRlIGVubGFjZSAkTG9naXQkLg0KDQojIyMjIERlc2Fycm9sbG8gZGVsIEFuw6FsaXNpcw0KRWwgZXN0dWRpbyBkZSByZWdyZXNpw7NuIGxpbmVhbCBzaW1wbGUgaGEgc2lkbyBwcm9jZXNhZG8gY29uIGByIFIudmVyc2lvbi5zdHJpbmdgIG1lZGlhZG8gcG9yIFJTdHVkaW8gMjAyMi4wNy4yIEJ1aWxkIDU3NiBlbiB1bmEgcGxhdGFmb3JtYSB4ODZfNjQtdzY0LW1pbmd3MzIuDQoNCiMjIyMjIFJlc3VtZW4gZXN0YWTDrXN0aWNvIGRlIGxhcyB2YXJpYWJsZXMgZGUgZXN0dWRpby4gey50YWJzZXQgLnRhYnNldC1waWxsc30NCkxhIG5hdmVnYWNpw7NuIGEgdHJhdsOpcyBkZSBsYXMgcGVzdGHDsWFzIG11ZXN0cmEgZWwgcmVzdW1lbiBlc3RhZMOtc3RpY28gZGUgbGEgdmFyaWFibGUgaW5kZXBlbmRpZW50ZSAqKkNoYW5jZSBvZiBBZG1pdCoqLCBzdSBib3hwbG90IGUgaGlzdG9ncmFtYS4gRGUgbGEgdmFyaWFibGUgZGVwZW5kaWVudGUgKipSZXNlYXJjaCoqDQpzZSBtb3N0cmFyw6Egc3UgZGlhZ3JhbWEgZGUgYmFycmFzLCBhc8OtIGNvbW8gc3UgbWVkaWEgeSBtZWRpYW5hLiBBZGVtw6FzLCBzZSBleGhpYmlyw6EgdW4gRGlhZ3JhbWEgZGUgQ2FqYXMgY29uanVudG8gZW50cmUgYXF1ZWxsYXMuDQoNCkNvbiBiYXNlIGVuIGxhIHBlc3Rhw7FhICoqUmVzdW1lbiB5IEJveHBsb3QgZGUgQ2hhbmNlIG9mIEFkbWl0Kiogc2UgcHVlZGUgY29tZW50YXIgcXVlIGxhIHZhcmlhYmxlICoqQ2hhbmNlIG9mIEFkbWl0KiosIGNvbW8gc2UgaGl6byBlbiBsYSBzZWNjacOzbiAzLjEuMi4xLiwgcHJlc2VudGEgYXNpbWV0csOtYSBkZSBzZXNnbyBuZWdhdGl2byBjb24gcmFuZ28gaW50ZXJjdWFydMOtbGljbyBlc3RyZWNobyBkZSBkaXNwZXJzacOzbiBpbXBlcmNlcHRpYmxlLiBBZGVtw6FzLCB1biBkYXRvIHNlIHZpc3VhbGl6YSBjb21vIG91dGxpZXIuIEFzw60sIHB1ZWRlIGRlY2lyc2UgcXVlIGxhIHZhcmlhYmxlIHJlZ2lzdHJhIHZhbG9yZXMgYWx0b3MgZW4gcmVsYWNpw7NuIGNvbiBzdSBpbnRlcnZhbG8gZGUgbWVkaWNpw7NuLiBMbyBleHB1ZXN0byB0YW1iacOpbiBlcyBjb25zdGF0YWJsZSBhIHRyYXbDqXMgZGUgbGEgcGVzdGHDsWEgKipIaXN0b2dyYW1hIGRlIENoYW5jZSBvZiBBZG1pdCoqLg0KDQpBc2ltaXNtbywgc2Vnw7puIGxhIHBlc3Rhw7FhICoqUmVzdW1lbiB5IERpYWdyYW1hIGRlIEJhcnJhcyBkZSBSZXNlYXJjaCoqLCBsYSB2YXJpYWJsZSBjdWFsaXRhdGl2YTo6bm9taW5hbCAqKlJlc2VhcmNoKiogbXVlc3RyYSBwcm9wb3JjaW9uYWxpZGFkIG1heW9yIHBhcmEgbG9zIGNhc29zIGZhdm9yYWJsZXMgMSwgcXVlIHBhcmEgbG9zIGNhc29zIGRlc2Zhdm9yYWJsZXMgMDogJDU0Ljc1JCAkXCUkIHkgJDQ1LjI1JCAkXCUkLCByZXNwZWN0aXZhbWVudGUuDQoNCkNvbXBsZW1lbnRhcmlhbWVudGUsIGxhIHBlc3Rhw7FhICoqUmVzdW1lbiB5IERpYWdyYW1hIGRlIENhamFzIENvbmp1bnRvKiogbXVlc3RyYSBxdWUgbGFzIG9ic2VydmFjaW9uZXMgc29uIGNvbnNpc3RlbnRlcyBjb24gZWwgY29udGV4dG8gZGVsIHByb2JsZW1hOyBlcyBkZWNpciwgcGFyYSBsb3MgY2Fzb3MgZmF2b3JhYmxlcyBkZSAqKlJlc2VhcmNoKiogbG9zIHJlc3VsdGFkb3MgZGUgKipDaGFuY2Ugb2YgQWRtaXQqKiBzb24gbWF5b3JlcywgZW4gY29tcGFyYWNpw7NuIGNvbiBsb3MgY2Fzb3MgZGVzZmF2b3JhYmxlcy4gQWRlbcOhcywgYW1ib3MgY2Fzb3M6IGxvcyBmYXZvcmFibGVzIHkgbG9zIGRlc2Zhdm9yYWJsZXMsIG11ZXN0cmFuIHNlc2dvIG5lZ2F0aXZvLCBhdW5xdWUgZXMgbcOhcyBub3RvcmlvIHBhcmEgbG9zIGNhc29zIGZhdm9yYWJsZS4gVGFtYmnDqW4sIGVuIGVsIHJhbmdvIGludGVyY3VhcnTDrWxpY28gc2UgdmlzdWFsaXphbiBkaXNwZXJzaW9uZXMgb3B1ZXN0YXMgZW50cmUgbG9zIGNhc29zIGRlc2Zhdm9yYWJsZXMsIGhhY2lhIGxhIG1pdGFkIGluZmVyaW9yIGRlIGxvcyBkYXRvcywgeSBsb3MgY2Fzb3MgZmF2b3JhYmxlcywgaGFjaWEgbGEgbWl0YWQgc3VwZXJpb3IuIEFzaW1pc21vLCBsb3MgYXTDrXBpY29zLCBlbiBhbWJvcyBjYXNvcywgc2UgcHJlc2VudGFuIGVuIGxvcyBleHRyZW1vcyBpbmZlcmlvcmVzIGRlIGxhcyBkaXN0cmlidWNpb25lcywgZXMgZGVjaXIsIHJlc3VsdGFyb24gbcOhcyBleHRyYcOxb3MgbG9zIHZhbG9yZXMgYmFqb3MuDQoNCiMjIyMjIyBSZXN1bWVuIHkgQm94cGxvdCBkZSBPdmVycmFsIFNjb3JlDQpgYGB7ciByZXN1bWVuX0NoYW5jZV9fb2ZfX0FkbWl0LCBmaWcuYWxpZ24gPSAnY2VudGVyJ30NCnN1bW1hcnkoVW5pdmVyc2lkYWRfRGF0YXNldCRgT3ZlcmFsbCBTY29yZWApDQpib3hwbG90KFVuaXZlcnNpZGFkX0RhdGFzZXQkYE92ZXJhbGwgU2NvcmVgLCBtYWluID0gIkRpYWdyYW1hIGRlIENhamEgZGUgT3ZlcmFsbCBTY29yZSIsIGNvbCA9IGMoIm9yYW5nZSIpKQ0KYGBgDQoNCiMjIyMjIyBIaXN0b2dyYW1hIGRlIE92ZXJhbGwgU2NvcmUNCmBgYHtyIGhpc3RvZ3JhbWFfQ2hhbmNlX29mX0FkbWl0LCBmaWcuYWxpZ24gPSAnY2VudGVyJ30NCnN1bW1hcnkoVW5pdmVyc2lkYWRfRGF0YXNldCRgT3ZlcmFsbCBTY29yZWApDQpoaXN0KFVuaXZlcnNpZGFkX0RhdGFzZXQkYE92ZXJhbGwgU2NvcmVgLCBtYWluID0gIkhpc3RvZ3JhbWEgZGUgT3ZlcmFsbCBTY29yZSIsIGNvbCA9IGMoImdvbGQiKSkNCmBgYA0KDQojIyMjIyMgUmVzdW1lbiB5IERpYWdyYW1hIGRlIEJhcnJhcyBkZSByZXNlYXJjaA0KYGBge3IgcmVzdW1lbl9SZXNlYXJjaCwgZmlnLmFsaWduID0gJ2NlbnRlcid9DQp0YWJsZShVbml2ZXJzaWRhZF9EYXRhc2V0JHJlc2VhcmNoKQ0KcHJvcC50YWJsZSh0YWJsZShVbml2ZXJzaWRhZF9EYXRhc2V0JHJlc2VhcmNoKSkNCmJhcnBsb3QodGFibGUoVW5pdmVyc2lkYWRfRGF0YXNldCRyZXNlYXJjaCkpDQpgYGANCg0KIyMjIyMjIFJlc3VtZW4geSBEaWFncmFtYSBkZSBDYWphcyBDb25qdW50bw0KYGBge3IgYm94cGxvdF9Db25qdW50b19DaGFuY2Utb2YtQWRtaXRfUmVzZWFyY2gsIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0KdGFwcGx5KFVuaXZlcnNpZGFkX0RhdGFzZXQkYE92ZXJhbGwgU2NvcmVgLCBVbml2ZXJzaWRhZF9EYXRhc2V0JHJlc2VhcmNoLCBtZWFuKQ0KdGFwcGx5KFVuaXZlcnNpZGFkX0RhdGFzZXQkYE92ZXJhbGwgU2NvcmVgLCBVbml2ZXJzaWRhZF9EYXRhc2V0JHJlc2VhcmNoLCBtZWRpYW4pDQpib3hwbG90KFVuaXZlcnNpZGFkX0RhdGFzZXQkYE92ZXJhbGwgU2NvcmVgflVuaXZlcnNpZGFkX0RhdGFzZXQkcmVzZWFyY2gsIG1haW4gPSAiQm94cGxvdCBDb25qdW50bzogQ2hhbmNlIG9mIEFkbWl0IC0gUmVzZWFyY2giLCBjb2wgPSBjKCJvcmFuZ2UiLCAiZ29sZCIpKQ0KYGBgDQoNCiMjIyMjIEZvcm11bGFjacOzbiBkZWwgbW9kZWxvIGRlIFJMb2dTIGVudHJlIGxhcyB2YXJpYWJsZXMgZGUgZXN0dWRpby4gey50YWJzZXQgLnRhYnNldC1waWxsc30NCkxhIG5hdmVnYWNpw7NuIGEgdHJhdsOpcyBkZSBsYXMgcGVzdGHDsWFzIG11ZXN0cmEgbG9zIGNvZWZpY2llbnRlcyBkZWwgbW9kZWxvIFJMb2dTIHkgc3UgcmVzdW1lbiBlc3RhZMOtc3RpY28uIFNlIG1lbmNpb25hIGRlIG51ZXZvIHF1ZSBsYXMgdmFyaWFibGVzIGRlIGludGVyw6lzIHNvbjogKipDaGFuY2Ugb2YgQWRtaXQqKiAodmFyaWFibGUgaW5kZXBlbmRpZW50ZSkgeSAqKlJlc2VhcmNoKiogKHZhcmlhYmxlIGRlcGVuZGllbnRlKS4NCg0KTGEgcGVzdGHDsWEgKipDb2VmaWNpZW50ZXMgZGVsIE1vZGVsbyBSTG9nUyoqIHBlcm1pdGUgZXN0YWJsZWNlciBxdWUgZWwgbW9kZWxvIFJMb2dTIHJlbGFjaW9uYSBhICRccGkoeCkkIGNvbiAkeCQgYSB0cmF2w6lzIGRlIGxhIGZ1bmNpw7NuIGRlIGVubGFjZSAkTG9naXQkIGRlIGxhIHNpZ3VpZW50ZSBtYW5lcmE6JCRcZnJhY3tccGkoeCl9ezEtXHBpKHgpfT1lXnstNyw2NTg3MDkrMTAsODg2OTU5XGNkb3QgeH1caHNwYWNlezEwbW19KDMxKSQkDQoNCkFzaW1pc21vLCBsYSBwZXN0YcOxYSAqKlJlc3VtZW4gRXN0YWTDrXN0aWNvIGRlbCBNb2RlbG8gUkxvZ1MqKiBtdWVzdHJhLCBwYXJhIGVmZWN0b3MgZGUgY29tcGFyYWNpw7NuLCBsb3MgcmVzw7ptZW5lcyBkZWwgbW9kZWxvIGVzdHVkaWFkbyB5IGRlIHVubyBhbHRlcm5hdGl2byBjb24gYmFzZSBlbiBsYSB2YXJpYWJsZSBjdWFsaXRhdGl2YTo6bm9taW5hbCAqKkdlbmRlcioqLiBDb24gYmFzZSBlbiBlbCBjcml0ZXJpbyBkZSBpbmZvcm1hY2nDs24gZGUgQWthaWtlIChBSUMgcG9yIHN1cyBzaWdsYXMgZW4gaW5nbMOpcyksIGRlbCBjdWFsIHNlIHNhYmUgcXVlIGVzIHVuYSBtZWRpZGEgZGUgbGEgYm9uZGFkIGRlIGFqdXN0ZSBkZSB1biBtb2RlbG8gZXN0YWTDrXN0aWNvIHF1ZSBkZXNjcmliZSBsYSByZWxhY2nDs24gZW50cmUgZWwgc2VzZ28geSBsYSB2YXJpYW56YSBlbiBsYSBmb3JtdWxhY2nDs24gZGVsIG1vZGVsbywgZXMgZGVjaXIsIGVudHJlIHN1IGV4YWN0aXR1ZCB5IGNvbXBsZWppZGFkLCBzZSB2ZXJpZmljYSBxdWUgcmVzdWx0YSB1biBtZWpvciBtb2RlbG8gZGUgbGEgdmFyaWFibGUgKipSZXNlYXJjaCoqIHF1ZSBkZSBsYSB2YXJpYWJsZSAqKkdlbmRlcioqLCBwb3JxdWU6ICRBSUNfUj00MTIuNjA8NTM0LjA5PUFJQ19HJC4gVGFtYmnDqW4sIHBhcmEgYXBveWFyIHF1ZSBlbCBtb2RlbG8gYmFzYWRvIGVuIGxhIHZhcmlhYmxlICoqUmVzZWFyY2gqKiBlcyBtZWpvciBxdWUgYXF1w6lsIGJhc2FkbyBlbiAqKkdlbmRlcioqLCBlbCBjb2NpZW50ZSBlbnRyZSBsYSBkZXN2aWFjacOzbiBudWxhIChOdWxsIERldmlhbmNlKSB5IGxhIGRlc3ZpYWNpw7NuIHJlc2lkdWFsIChSZXNpZHVhbCBEZXZpYW5jZSksIG9ic2VydmFibGUgZW4gbGEgcGVzdGHDsWEgUmVzdW1lbiBFc3RhZMOtc3RpY28gZGVsIE1vZGVsbyBSTG9zZ1MsIGVzIG1heW9yIGVuIGVsIG1vZGVsbyBwcm9wdWVzdG8gcXVlIGVuIGVsIGRlIGNvbXBhcmFjacOzbi4NCg0KIyMjIyMjIENvZWZpY2llbnRlcyBkZWwgTW9kZWxvIFJMb2dTDQpgYGB7ciBjb2VmaWNpZW50ZXNfUmVncmVzaW9uX0xvZ2lzdGljYV9TaW1wbGUsIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0KbW9kZWxvX1JMb2dfU2ltcGxlID0gZ2xtKFVuaXZlcnNpZGFkX0RhdGFzZXQkcmVzZWFyY2h+VW5pdmVyc2lkYWRfRGF0YXNldCRgT3ZlcmFsbCBTY29yZWAsIGZhbWlseSA9ICJiaW5vbWlhbCIsIGRhdGEgPSBkYXRhLmZyYW1lKFVuaXZlcnNpZGFkX0RhdGFzZXQkcmVzZWFyY2gsIFVuaXZlcnNpZGFkX0RhdGFzZXQkYE92ZXJhbGwgU2NvcmVgKSkNCmNvZWYobW9kZWxvX1JMb2dfU2ltcGxlKQ0KYGBgDQojIyMjIyMgUmVzdW1lbiBFc3RhZMOtc3RpY28gZGVsIE1vZGVsbyBSTG9nUw0KYGBge3IgcmVzdW1lbl9SZWdyZXNpb25fTG9naXN0aWNhX1NpbXBsZSwgZmlnLmFsaWduID0gJ2NlbnRlcid9DQpzdW1tYXJ5KG1vZGVsb19STG9nX1NpbXBsZSkNCm1vZGVsb19STG9nX1NpbXBsZV9TID0gZ2xtKFVuaXZlcnNpZGFkX0RhdGFzZXQkc3RhdHVzflVuaXZlcnNpZGFkX0RhdGFzZXQkYE92ZXJhbGwgU2NvcmVgLCBmYW1pbHkgPSAiYmlub21pYWwiLCBkYXRhID0gZGF0YS5mcmFtZShVbml2ZXJzaWRhZF9EYXRhc2V0JHN0YXR1cywgVW5pdmVyc2lkYWRfRGF0YXNldCRgT3ZlcmFsbCBTY29yZWApKQ0Kc3VtbWFyeShtb2RlbG9fUkxvZ19TaW1wbGVfUykNCmBgYA0KDQojIyMjIyBBbsOhbGlzaXMgZGVsIG1vZGVsbyBSTG9nUy4gey50YWJzZXQgLnRhYnNldC1waWxsc30NClNlIG1vc3RyYXLDoW4sIGEgdHJhdsOpcyBkZSBwZXN0YcOxYXMsIGxvcyByZXN1bHRhZG9zIGRlIGFsZ3VuYXMgcHJlZGljY2lvbmVzIG9idGVuaWRhcyBhIHRyYXbDqXMgZGVsIG1vZGVsbyBSTG9nUyBwYXJhIGlkZW50aWZpY2FyIGVuIHN1cyByZXNwdWVzdGFzIGxhIGNvcnJlc3BvbmRlbmNpYSBkZSBzZW50aWRvIGVuIGxhcyByYXpvbmVzIGRlIHByb2JhYmlsaWRhZGVzIE9ERFMgYSBmYXZvciBvIGVuIGNvbnRyYSBkZWwgZXZlbnRvIGNvbnNpZGVyYWRvOiAkXGZyYWN7XHBpfXsxLVxwaX0kIHkgJFxmcmFjezEtXHBpfXtccGl9JCwgcmVzcGVjdGl2YW1lbnRlLiBTZSBtZW5jaW9uYSBkZSBudWV2byBxdWUgbGFzIHZhcmlhYmxlcyBkZSBpbnRlcsOpcyBzb246ICoqQ2hhbmNlIG9mIEFkbWl0KiogKHZhcmlhYmxlIGluZGVwZW5kaWVudGUpIHkgKipSZXNlYXJjaCoqICh2YXJpYWJsZSBkZXBlbmRpZW50ZSkuDQoNCkxhIHBlc3Rhw7FhICoqVmFyaWFibGUgUHJlZGljdG9yYSBpZ3VhbCBhIENlcm8qKiBwbGFudGVhIGRvcyBzaXR1YWNpb25lcyBpbnRlcnByZXRhdGl2YXMuIExhIHByaW1lcmEsIHBlcm1pdGUgY29tcHJlbmRlciBxdWUgZWwgY29lZmljaWVudGUgZGVsIGZhY3RvciBlbiBlbCBjdWFsIGVzdMOhIHByZXNlbnRlIGxhIHZhcmFpYmxlIHByZWRpY3RvcmEsIGVzdGltYSB1bmEgcHJvYmFiaWxpZGFkIGRlIGNhc28gZmF2b3JhYmxlIGNlcmNhbmEgYSBjZXJvIGVuIGVsIG9yZGVuIGRlIGxhIGRpZXptaWzDqXNpbWEuIExhIHNlZ3VuZGEsIGFjYXJyZWEgdW5hIGludGVycHJldGFjacOzbiBtw6FzIGRlbGljYWRhOiBjb21vIGxhIHZhcmlhYmxlICoqQ2hhbmNlIG9mIEFkbWl0Kiogc2UgbWlkZSBlbiBlbCBpbnRlcnZhbG8gJFswLDFdJCBjb24gZG9zIGNpZnJhcyBzaWduaWZpY2F0aXZhcyB5IGRvcyBkZWNpbWFsZXMgZGUgcHJlY2lzacOzbiwgdW5hIHVuaWRhZCBkZSBtZWRpZGEgcmF6b25hYmxlIGVuIGVsbGEgc2Vyw61hIHVuYSBjZW50w6lzaW1hLCBwb3IgZWplbXBsbzogcGFzYXIgZGUgJDAuNjIkIGEgJDAuNjMkIGltcGxpY2EgaW5jcmVtZW50YXIgZW4gdW5hIHVuaWRhZCBkZSBtZWRpZGEgYSAkMC42MiQuIEFzw60sIHNlIGVudGllbmRlIHF1ZSBlbCBjb2NpZW50ZSBkZSBwcm9iYWJpbGlkYWRlcyBlbiByZWxhY2nDs24gY29uIGxhIHZhcmlhYmxlIHByZWRpY3RvcmEgZW4gZWwgbW9kZWxvIFJMb2dTIHJlZmxlamUgdW4gaW5jcmVtZW50byBhY3VtdWxhZG8gZGUgJFxhcHByb3ggNTM0NzQuNCQgdmVjZXMgZGVzZGUgJDAkIGhhc3RhICQxJCwgY29uIGluY3JlbWVudG9zIGRlICQwLjAxJC4NCg0KQ29uIGJhc2UgZW4gbG8gYW50ZXJpb3IsIGEgdHJhdsOpcyBkZSBsYSBwZXN0YcOxYSAqKlByb2JhYmlsaWRhZGVzIEVzdGltYWRhcyoqIHNlIHB1ZWRlIGFwcmVjaWFyIGVudHJlIGxvcyByZWdpc3Ryb3MgJDE5JCB5ICQyMCQgdW4gZGVsdGEgZGUgY2FtYmlvIGFic29sdXRvIGlndWFsIGEgJDAuMDIyNzk1JCAoZXF1aXZhbGVudGUgYSB1biBpbmNyZW1lbnRvIHJlbGF0aXZvICRcYXBwcm94IDcuOTQkICRcJSQpIGFsIGluY3JlbWVudGFyc2UgbGEgdmFyaWFibGUgcHJlZGljdG9yYSBlbiB1bmEgdW5pZGFkIGNvbW8gc2UgZGVmaW5pw7MgZW4gZWwgcMOhcnJhZm8gYW50ZXJpb3IuDQoNClBvciDDumx0aW1vLCBlbCBncsOhZmljbyBkZSBjdXJ2YSBsb2fDrXN0aWNhLCBlbiBsYSBwZXN0YcOxYSBHcsOhZmljYSBkZWwgTW9kZWxvIFJMb2dTLCBwZXJtaXRlIHZpc3VhbG1lbnRlIGNvbXByZW5kZXIgZWwgY29tcG9ydGFtaWVudG8gZGUgbGFzIHZhcmlhYmxlcyBpbnZvbHVjcmFkYXMgZW4gZWwgbW9kZWxvIHByb3B1ZXN0bzsgZXMgZGVjaXIsIGxvcyBjYXNvcyBmYXZvcmFibGVzIGVuIHJlbGFjacOzbiBjb24gbGEgdmFyaWFibGUgKipSZXNlYXJjaCoqIGxvZ3JhbiBzdXBlcmFyIGxhIGJhcnJlcmEgZGVsICQ5MCQkXCUkIGRlbCB2YWxvciBkZSAqKkNoYW5jZSBvZiBBZG1pdCoqLg0KDQojIyMjIyMgVmFyaWFibGUgUHJlZGljdG9yYSBpZ3VhbCBhIENlcm8NCmBgYHtyIHZhcmlhYmxlX1ByZWRpY3RvcmFfQ2VybywgZmlnLmFsaWduID0gJ2NlbnRlcid9DQpjb2VmKG1vZGVsb19STG9nX1NpbXBsZSkNCnJvdW5kKGV4cChjb2VmKG1vZGVsb19STG9nX1NpbXBsZSkpLDYpDQpgYGANCiMjIyMjIyBQcm9iYWJpbGlkYWRlcyBFc3RpbWFkYXMNCmBgYHtyIHByb2JhYmlsaWRhZGVzX0VzdGltYWRhcywgZmlnLmFsaWduID0gJ2NlbnRlcid9DQpwcmVkaWN0KG1vZGVsb19STG9nX1NpbXBsZSwgZGF0YS5mcmFtZShzZXEoMSwgNDAwKSksIHR5cGUgPSAicmVzcG9uc2UiKQ0KYGBgDQojIyMjIyMgR3LDoWZpY2EgZGVsIE1vZGVsbyBSTG9nUw0KYGBge3IgZ3JhZmljYV9Nb2RlbG9fUkxvZ1MsIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0KcmVzZWFyY2ggPC0gVW5pdmVyc2lkYWRfRGF0YXNldCRyZXNlYXJjaA0Kb3ZlcmFsbF9zY29yZSA8LSBVbml2ZXJzaWRhZF9EYXRhc2V0JGBPdmVyYWxsIFNjb3JlYA0KZGF0YVBsb3QgPC0gZGF0YS5mcmFtZShvdmVyYWxsX3Njb3JlLCByZXNlYXJjaCkNCnBsb3QocmVzZWFyY2h+b3ZlcmFsbF9zY29yZSwgZGF0YSA9IGRhdGFQbG90LCBtYWluID0gIk1vZGVsbyBSTG9nUzogT3ZlcmFsbCBTY29yZSAtIFJlc2VhcmNoIiwgeGxhYiA9ICJPdmVyYWxsIFNjb3JlIiwgeWxhYiA9ICJSZXNlYXJjaCA9IDAgfCBSZXNlYXJjaCA9IDEiLCBjb2wgPSAiZ29sZCIsIHBjaCA9ICJJIikNCmN1cnZlKHByZWRpY3QoZ2xtKHJlc2VhcmNofm92ZXJhbGxfc2NvcmUsIGZhbWlseSA9ICJiaW5vbWlhbCIsIGRhdGEgPSBkYXRhUGxvdCksIGRhdGEuZnJhbWUob3ZlcmFsbF9zY29yZSA9IHgpLCB0eXBlID0gInJlc3BvbnNlIiksIGNvbCA9ICJvcmFuZ2UiLCBsd2QgPSAzLCBhZGQgPSBUUlVFKQ0KYGBgDQog