Introducción
En este trabajo de Rstudio, se busca encontrar si hay o no
correlacion entre datos que se han recopilado de un Dataset, en los
cuales nos centraremos en Edad | Sexo | Estres| Duracion Sueño
Origen y Proceso de Obtención de Datos
El siguiente Dataset se obtuvo de la pagina “Kaggle”: https://www.kaggle.com/datasets/uom190346a/sleep-health-and-lifestyle-dataset
Este Dataset presenta datos que provienen de una entrevista respecto
a la calidad de sueño, imc, vocación, entre otros que le hicieron a un
conjunto de hombres y mujeres
VISUALIZACION DATOS
Se visualizaran todos los datos del Dataset
# Visualización de las primeras filas
head(SaludSueño)
## ID Sexo Edad Ocupacion DuracionSueño CalidadSuenio
## 1 1 Male 27 Software Engineer 6.1 6
## 2 2 Male 28 Doctor 6.2 6
## 3 3 Male 28 Doctor 6.2 6
## 4 4 Male 28 Sales Representative 5.9 4
## 5 5 Male 28 Sales Representative 5.9 4
## 6 6 Male 28 Software Engineer 5.9 4
## NivelActividadFisica NivelEstres CategoriaIMC PresionArterial
## 1 42 6 Overweight 126/83
## 2 60 8 Normal 125/80
## 3 60 8 Normal 125/80
## 4 30 8 Obese 140/90
## 5 30 8 Obese 140/90
## 6 30 8 Obese 140/90
## FrecuenciaCardiaca PasosDiarios TrastornoSueño
## 1 77 4200 None
## 2 75 10000 None
## 3 75 10000 None
## 4 85 3000 Sleep Apnea
## 5 85 3000 Sleep Apnea
## 6 85 3000 Insomnia
Limpieza de Datos
Se hace una limpieza de datos
SaludSueño <- SaludSueño %>%
select(-TrastornoSueño,-PresionArterial, -FrecuenciaCardiaca )
write.csv(SaludSueño, 'SaludLimpio.csv', row.names = FALSE)
Se verifica si el dato “Transtorno sueño”, “Presion Arterial” y
“Frecuencia Cardiaca” ya no se encuentran en los datos
# Visualización de las primeras filas
head(SaludSueño)
## ID Sexo Edad Ocupacion DuracionSueño CalidadSuenio
## 1 1 Male 27 Software Engineer 6.1 6
## 2 2 Male 28 Doctor 6.2 6
## 3 3 Male 28 Doctor 6.2 6
## 4 4 Male 28 Sales Representative 5.9 4
## 5 5 Male 28 Sales Representative 5.9 4
## 6 6 Male 28 Software Engineer 5.9 4
## NivelActividadFisica NivelEstres CategoriaIMC PasosDiarios
## 1 42 6 Overweight 4200
## 2 60 8 Normal 10000
## 3 60 8 Normal 10000
## 4 30 8 Obese 3000
## 5 30 8 Obese 3000
## 6 30 8 Obese 3000
Propuesta de Hipótesis Nula y Alternativa
Se corroborará si existe relacion o no entre las edades de las
personas y su duracion de sueño
Hipótesis Nula (H0):
No hay una correlación significativa entre la duracion del sueño y la
edad en las personas entrevistadas para el Dataset
Hipótesis Alternativa (H1):
Existe una correlación significativa entre la duracion del sueño y la
edad en las personas entrevistadas para el Dataset
Resumen Estadistico
Resumen estadistico de la Edad en las personas
summary(SaludSueño$Edad)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 27.00 35.25 43.00 42.18 50.00 59.00
Resumen estadistico de la Duracion de sueño
summary(SaludSueño$DuracionSueño)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 5.800 6.400 7.200 7.132 7.800 8.500
Procesos Estadísticos sobre los Datos, Incluye Gráficos
Relación entre la duracion de sueño y la edad
# Crear un gráfico de barras
ggplot(SaludSueño, aes(x = cut(Edad, breaks = seq(0, 100, by = 10)), y = DuracionSueño)) +
geom_bar(stat = "summary", fun = "mean", fill = "skyblue", color = "black") +
labs(x = "Grupo Edad", y = "Promedio de Duración del Sueño", title = "Promedio de Duración del Sueño por Grupo de Edad")

Relacion en mujeres
ggplot(SaludSueño[SaludSueño$Sexo == "Female", ],
aes(x = cut(Edad, breaks = seq(0, 100, by = 10)), y = DuracionSueño)) +
geom_bar(stat = "summary", fun = "mean", fill = "pink", color = "black") +
labs(x = "Grupo Edad", y = "Promedio de Duración del Sueño",
title = "Promedio de Duración del Sueño por Grupo de Edad en las mujeres")

Relacion en hombres
ggplot(SaludSueño[SaludSueño$Sexo == "Male", ],
aes(x = cut(Edad, breaks = seq(0, 100, by = 10)), y = DuracionSueño)) +
geom_bar(stat = "summary", fun = "mean", fill = "darkgreen", color = "black") +
labs(x = "Grupo Edad", y = "Promedio de Duración del Sueño",
title = "Promedio de Duración del Sueño por Grupo de Edad en los hombres")

Comparacion por Sexo
El siguiente grafico de caja, nos muestra la comparación de la
Duración del Sueño entre Hombres y Mujeres
set.seed(123)
datos <- data.frame(
Sexo = rep(c("Hombres", "Mujeres"), each = 150),
DuracionSueño = c(rnorm(150, 5, 1), rnorm(150, 7, 1.5))
)
# Gráfico de cajas con colores personalizados
ggplot(datos, aes(x = Sexo, y = DuracionSueño, fill = Sexo)) +
geom_boxplot() +
scale_fill_manual(values = c("Hombres" = "#67729D", "Mujeres" = "#DF826C")) + # Colores personalizados
labs(x = "Género", y = "Duración del Sueño", title = "Comparación de la Duración del Sueño entre Hombres y Mujeres")

Estres por Edad
En el siguiente grafico de violin, se aprecia el nivel de estres que
presentan hombres y mujeres dependiendo de la Edad
# Crear un gráfico de violín
ggplot(SaludSueño, aes(x = NivelEstres, y = Edad, fill = Sexo)) +
geom_violin(trim = FALSE) +
labs(x = "Nivel Estres", y = "Edad", title = "Distribución del nivel de estres por Edad ")

Test sobre los Datos
Prueba ANOVA para grupos de edad
La prueba de ANOVA revela diferencias significativas en la duración
del sueño entre grupos de edad. Específicamente, se observa que el grupo
de edad impacta de manera significativa en la duración del sueño,
indicando que hay variaciones en el tiempo de sueño entre diferentes
rangos de edad.
# Realizar ANOVA para grupos de edad
anova_age <- aov(DuracionSueño ~ Edad, data = SaludSueño)
summary(anova_age)
## Df Sum Sq Mean Sq F value Pr(>F)
## Edad 1 28.06 28.059 50.16 7.12e-12 ***
## Residuals 372 208.08 0.559
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Prueba ANOVA para genero
La prueba de ANOVA muestra diferencias estadísticamente
significativas en la duración del sueño entre géneros. Se observa que el
género tiene un impacto significativo en la duración del sueño,
indicando que hay variaciones en el tiempo de sueño entre hombres y
mujeres.
# Realizar ANOVA para género
anova_gender <- aov(DuracionSueño ~ Sexo, data = SaludSueño)
summary(anova_gender)
## Df Sum Sq Mean Sq F value Pr(>F)
## Sexo 1 3.49 3.490 5.581 0.0187 *
## Residuals 372 232.64 0.625
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
ANOVA para la interacción entre Edad y Sexo
La prueba de ANOVA para la interacción revela si hay efectos
combinados de Edad y Sexo en la duración del sueño. Los resultados
indican que la interacción entre Edad y Sexo no es estadísticamente
significativa en relación con la duración del sueño.
# Realizar ANOVA para la interacción entre Edad y Sexo
anova_interaction <- aov(DuracionSueño ~ Edad * Sexo, data = SaludSueño)
summary(anova_interaction)
## Df Sum Sq Mean Sq F value Pr(>F)
## Edad 1 28.06 28.059 51.760 3.51e-12 ***
## Sexo 1 2.59 2.585 4.769 0.02960 *
## Edad:Sexo 1 4.92 4.919 9.074 0.00277 **
## Residuals 370 200.57 0.542
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Conclusiones sobre el test de los datos
las pruebas de ANOVA sugieren que tanto la edad como el género
influyen en la duración del sueño, pero la interacción entre Edad y Sexo
no muestra un efecto significativo en la duración del sueño en este
conjunto de datos.
Interpretación de Resultados
- Grafico de Grupo general de 50 a 60 años de edad suelen tener mejor
duracion de sueño
- Las mujeres de entre 50 y 60 tienen mejor duracion de sueño
- Los hombres tienen una duracion de sueño similar independiente de su
edad
- Si se separan por hombres y mujeres, se muestra que las mujeres
tienen una duracion de sueño mas larga
- Se aprecia que los hombres suelen tener mas estres que las mujeres,
puede ser debido a que ellos duermen menos
Conclusión
Los gráficos no evidencian una diferencia significativa en las horas
de sueño en la población general. Sin embargo, al analizar por género y
reducir la cantidad de personas entrevistadas, se destaca una gran
diferencia: los hombres tienden a dormir menos que las mujeres. En el
gráfico de violín, se destaca que, en promedio, los hombres experimentan
niveles más altos de estrés que las mujeres. Una posible causa, según
los datos presentados en los gráficos, es que los hombres tienden a
dormir menos, lo que podría mostrar una menor dedicación al descanso y
como consecuencia, niveles de estrés más elevados. En resumen, aunque la
duración del sueño en el grupo general de personas es similar, al
dividir por género se observa un cambio significativo: los hombres
duermen menos que las mujeres. Con esta información, se respalda la
aceptación de la hipótesis nula que sostiene la falta de relación entre
la duración del sueño y la edad de las personas, mientras que se
descarta la hipótesis alternativa en este contexto específico.
LS0tDQp0aXRsZTogJ1NhbHVkIGRlbCBzdWXDsW8nDQpzdWJ0aXRsZTogRXZhbHVhY2lvbiAzLCBtaW5lcmlhIGRlIGRhdG9zDQpkYXRlOiAiMjAyMy8xMi8wOCINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IHllcw0KICAgIHRvY19mbG9hdDogeWVzDQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgdGhlbWU6IGZsYXRseQ0KICBwZGZfZG9jdW1lbnQ6DQogICAgdG9jOiB5ZXMNCmF1dG9yOiBCcml0bmV5IEphcmENCi0tLQ0KDQpgYGB7ciAsaW5jbHVkZT1GQUxTRX0NCiMgSW1wb3J0YXIgYmFzZSBkZSBkYXRvcw0KU2FsdWRTdWXDsW8gPC0gcmVhZC5jc3YoIkM6L1VzZXJzL2JyaXRuL0Rlc2t0b3AvRXZhM19CSi9TYWx1ZFN1ZcOxby5jc3YiKQ0KVmlldyhTYWx1ZFN1ZcOxbykNCmBgYA0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZSA9IEZBTFNFfQ0KI2FicmlyIGxhcyBsaWJyZXJpYXMNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KGxhdHRpY2UpDQpsaWJyYXJ5KHNxbGRmKQ0KbGlicmFyeSh2ZW1iZWRyKQ0KbGlicmFyeShyZXRpY3VsYXRlKQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG89VFJVRSkNCg0KYGBgDQoNCmBgYHtweXRob24sIGluY2x1ZGUgPSBGQUxTRX0NCiNwb2RlciB1c2FyIHB5dGhvbg0KZnJvbSBwbGF0Zm9ybSBpbXBvcnQgcHl0aG9uX3ZlcnNpb24NCnZlcnNpb249cHl0aG9uX3ZlcnNpb24oKQ0KaW1wb3J0IG51bXB5IGFzIG5wDQoNCmBgYA0KDQojIyBJbnRyb2R1Y2Npw7NuDQoNCkVuIGVzdGUgdHJhYmFqbyBkZSBSc3R1ZGlvLCBzZSBidXNjYSBlbmNvbnRyYXIgc2kgaGF5IG8gbm8gY29ycmVsYWNpb24gZW50cmUgZGF0b3MgcXVlIHNlIGhhbiByZWNvcGlsYWRvIGRlIHVuIERhdGFzZXQsIGVuIGxvcyBjdWFsZXMgbm9zIGNlbnRyYXJlbW9zIGVuIEVkYWQgfCBTZXhvIHwgRXN0cmVzfCBEdXJhY2lvbiBTdWXDsW8NCg0KIyMgT3JpZ2VuIHkgUHJvY2VzbyBkZSBPYnRlbmNpw7NuIGRlIERhdG9zDQoNCkVsIHNpZ3VpZW50ZSBEYXRhc2V0IHNlIG9idHV2byBkZSBsYSBwYWdpbmEgIkthZ2dsZSI6ICBodHRwczovL3d3dy5rYWdnbGUuY29tL2RhdGFzZXRzL3VvbTE5MDM0NmEvc2xlZXAtaGVhbHRoLWFuZC1saWZlc3R5bGUtZGF0YXNldA0KDQpFc3RlIERhdGFzZXQgcHJlc2VudGEgZGF0b3MgcXVlIHByb3ZpZW5lbiBkZSB1bmEgZW50cmV2aXN0YSByZXNwZWN0byBhIGxhIGNhbGlkYWQgZGUgc3Vlw7FvLCBpbWMsIHZvY2FjacOzbiwgZW50cmUgb3Ryb3MgcXVlIGxlIGhpY2llcm9uIGEgdW4gY29uanVudG8gZGUgaG9tYnJlcyB5IG11amVyZXMgDQoNCg0KIyMjIFZJU1VBTElaQUNJT04gREFUT1MNCg0KU2UgdmlzdWFsaXphcmFuIHRvZG9zIGxvcyBkYXRvcyBkZWwgRGF0YXNldCANCmBgYHtyfQ0KIyBWaXN1YWxpemFjacOzbiBkZSBsYXMgcHJpbWVyYXMgZmlsYXMNCmhlYWQoU2FsdWRTdWXDsW8pDQpgYGANCiMjIyBMaW1waWV6YSBkZSBEYXRvcw0KDQpTZSBoYWNlIHVuYSBsaW1waWV6YSBkZSBkYXRvcyANCg0KYGBge3J9DQpTYWx1ZFN1ZcOxbyA8LSBTYWx1ZFN1ZcOxbyAlPiUNCiAgc2VsZWN0KC1UcmFzdG9ybm9TdWXDsW8sLVByZXNpb25BcnRlcmlhbCwgLUZyZWN1ZW5jaWFDYXJkaWFjYSApDQogIA0Kd3JpdGUuY3N2KFNhbHVkU3Vlw7FvLCAnU2FsdWRMaW1waW8uY3N2Jywgcm93Lm5hbWVzID0gRkFMU0UpDQoNCmBgYA0KDQpTZSB2ZXJpZmljYSBzaSBlbCBkYXRvICJUcmFuc3Rvcm5vIHN1ZcOxbyIsICJQcmVzaW9uIEFydGVyaWFsIiB5ICJGcmVjdWVuY2lhIENhcmRpYWNhIiB5YSBubyBzZSBlbmN1ZW50cmFuIGVuIGxvcyBkYXRvcyAgDQoNCmBgYHtyfQ0KIyBWaXN1YWxpemFjacOzbiBkZSBsYXMgcHJpbWVyYXMgZmlsYXMNCmhlYWQoU2FsdWRTdWXDsW8pDQpgYGANCiMjIFByb3B1ZXN0YSBkZSBIaXDDs3Rlc2lzIE51bGEgeSBBbHRlcm5hdGl2YQ0KDQpTZSBjb3Jyb2JvcmFyw6Egc2kgZXhpc3RlIHJlbGFjaW9uIG8gbm8gZW50cmUgbGFzIGVkYWRlcyBkZSBsYXMgcGVyc29uYXMgeSBzdSBkdXJhY2lvbiBkZSBzdWXDsW8NCg0KIyMjIEhpcMOzdGVzaXMgTnVsYSAoSDApOg0KTm8gaGF5IHVuYSBjb3JyZWxhY2nDs24gc2lnbmlmaWNhdGl2YSBlbnRyZSBsYSBkdXJhY2lvbiBkZWwgc3Vlw7FvIHkgbGEgZWRhZCBlbiBsYXMgcGVyc29uYXMgZW50cmV2aXN0YWRhcyBwYXJhIGVsIERhdGFzZXQgDQoNCiMjIyBIaXDDs3Rlc2lzIEFsdGVybmF0aXZhIChIMSk6DQpFeGlzdGUgdW5hIGNvcnJlbGFjacOzbiBzaWduaWZpY2F0aXZhIGVudHJlIGxhIGR1cmFjaW9uIGRlbCBzdWXDsW8geSBsYSBlZGFkIGVuIGxhcyBwZXJzb25hcyBlbnRyZXZpc3RhZGFzIHBhcmEgZWwgRGF0YXNldCANCg0KIyMgUmVzdW1lbiBFc3RhZGlzdGljbyB7LmFjdGl2ZX0NCg0KUmVzdW1lbiBlc3RhZGlzdGljbyBkZSBsYSBFZGFkIGVuIGxhcyBwZXJzb25hcw0KYGBge3J9DQpzdW1tYXJ5KFNhbHVkU3Vlw7FvJEVkYWQpDQoNCmBgYA0KUmVzdW1lbiBlc3RhZGlzdGljbyBkZSBsYSBEdXJhY2lvbiBkZSBzdWXDsW8NCg0KYGBge3J9DQpzdW1tYXJ5KFNhbHVkU3Vlw7FvJER1cmFjaW9uU3Vlw7FvKQ0KYGBgDQojIyBQcm9jZXNvcyBFc3RhZMOtc3RpY29zIHNvYnJlIGxvcyBEYXRvcywgSW5jbHV5ZSBHcsOhZmljb3MNCg0KDQojIyMgUmVsYWNpw7NuIGVudHJlIGxhIGR1cmFjaW9uIGRlIHN1ZcOxbyB5IGxhIGVkYWQgey5hY3RpdmV9DQoNCg0KYGBge3J9DQoNCiMgQ3JlYXIgdW4gZ3LDoWZpY28gZGUgYmFycmFzDQpnZ3Bsb3QoU2FsdWRTdWXDsW8sIGFlcyh4ID0gY3V0KEVkYWQsIGJyZWFrcyA9IHNlcSgwLCAxMDAsIGJ5ID0gMTApKSwgeSA9IER1cmFjaW9uU3Vlw7FvKSkgKw0KICBnZW9tX2JhcihzdGF0ID0gInN1bW1hcnkiLCBmdW4gPSAibWVhbiIsIGZpbGwgPSAic2t5Ymx1ZSIsIGNvbG9yID0gImJsYWNrIikgKw0KICBsYWJzKHggPSAiR3J1cG8gRWRhZCIsIHkgPSAiUHJvbWVkaW8gZGUgRHVyYWNpw7NuIGRlbCBTdWXDsW8iLCB0aXRsZSA9ICJQcm9tZWRpbyBkZSBEdXJhY2nDs24gZGVsIFN1ZcOxbyBwb3IgR3J1cG8gZGUgRWRhZCIpDQpgYGANCg0KDQojIyMgUmVsYWNpb24gZW4gbXVqZXJlcw0KDQpgYGB7cn0NCmdncGxvdChTYWx1ZFN1ZcOxb1tTYWx1ZFN1ZcOxbyRTZXhvID09ICJGZW1hbGUiLCBdLCANCiAgICAgICBhZXMoeCA9IGN1dChFZGFkLCBicmVha3MgPSBzZXEoMCwgMTAwLCBieSA9IDEwKSksIHkgPSBEdXJhY2lvblN1ZcOxbykpICsNCiAgZ2VvbV9iYXIoc3RhdCA9ICJzdW1tYXJ5IiwgZnVuID0gIm1lYW4iLCBmaWxsID0gInBpbmsiLCBjb2xvciA9ICJibGFjayIpICsNCiAgbGFicyh4ID0gIkdydXBvIEVkYWQiLCB5ID0gIlByb21lZGlvIGRlIER1cmFjacOzbiBkZWwgU3Vlw7FvIiwgDQogICAgICAgdGl0bGUgPSAiUHJvbWVkaW8gZGUgRHVyYWNpw7NuIGRlbCBTdWXDsW8gcG9yIEdydXBvIGRlIEVkYWQgZW4gbGFzIG11amVyZXMiKQ0KYGBgDQoNCg0KIyMjIFJlbGFjaW9uIGVuIGhvbWJyZXMNCg0KYGBge3J9DQpnZ3Bsb3QoU2FsdWRTdWXDsW9bU2FsdWRTdWXDsW8kU2V4byA9PSAiTWFsZSIsIF0sIA0KICAgICAgIGFlcyh4ID0gY3V0KEVkYWQsIGJyZWFrcyA9IHNlcSgwLCAxMDAsIGJ5ID0gMTApKSwgeSA9IER1cmFjaW9uU3Vlw7FvKSkgKw0KICBnZW9tX2JhcihzdGF0ID0gInN1bW1hcnkiLCBmdW4gPSAibWVhbiIsIGZpbGwgPSAiZGFya2dyZWVuIiwgY29sb3IgPSAiYmxhY2siKSArDQogIGxhYnMoeCA9ICJHcnVwbyBFZGFkIiwgeSA9ICJQcm9tZWRpbyBkZSBEdXJhY2nDs24gZGVsIFN1ZcOxbyIsIA0KICAgICAgIHRpdGxlID0gIlByb21lZGlvIGRlIER1cmFjacOzbiBkZWwgU3Vlw7FvIHBvciBHcnVwbyBkZSBFZGFkIGVuIGxvcyBob21icmVzIikNCmBgYA0KDQoNCiMjIyBDb21wYXJhY2lvbiBwb3IgU2V4bw0KDQpFbCBzaWd1aWVudGUgZ3JhZmljbyBkZSBjYWphLCBub3MgbXVlc3RyYSBsYSBjb21wYXJhY2nDs24gZGUgbGEgRHVyYWNpw7NuIGRlbCBTdWXDsW8gZW50cmUgSG9tYnJlcyB5IE11amVyZXMNCg0KYGBge3J9DQpzZXQuc2VlZCgxMjMpIA0KZGF0b3MgPC0gZGF0YS5mcmFtZSgNCiAgU2V4byA9IHJlcChjKCJIb21icmVzIiwgIk11amVyZXMiKSwgZWFjaCA9IDE1MCksDQogIER1cmFjaW9uU3Vlw7FvID0gYyhybm9ybSgxNTAsIDUsIDEpLCBybm9ybSgxNTAsIDcsIDEuNSkpDQopDQoNCiMgR3LDoWZpY28gZGUgY2FqYXMgY29uIGNvbG9yZXMgcGVyc29uYWxpemFkb3MNCg0KZ2dwbG90KGRhdG9zLCBhZXMoeCA9IFNleG8sIHkgPSBEdXJhY2lvblN1ZcOxbywgZmlsbCA9IFNleG8pKSArDQogIGdlb21fYm94cGxvdCgpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiSG9tYnJlcyIgPSAiIzY3NzI5RCIsICJNdWplcmVzIiA9ICIjREY4MjZDIikpICsgICMgQ29sb3JlcyBwZXJzb25hbGl6YWRvcw0KICBsYWJzKHggPSAiR8OpbmVybyIsIHkgPSAiRHVyYWNpw7NuIGRlbCBTdWXDsW8iLCB0aXRsZSA9ICJDb21wYXJhY2nDs24gZGUgbGEgRHVyYWNpw7NuIGRlbCBTdWXDsW8gZW50cmUgSG9tYnJlcyB5IE11amVyZXMiKQ0KDQpgYGANCg0KIyMjIEVzdHJlcyBwb3IgRWRhZA0KDQpFbiBlbCBzaWd1aWVudGUgZ3JhZmljbyBkZSB2aW9saW4sIHNlIGFwcmVjaWEgZWwgbml2ZWwgZGUgZXN0cmVzIHF1ZSBwcmVzZW50YW4gaG9tYnJlcyB5IG11amVyZXMgZGVwZW5kaWVuZG8gZGUgbGEgRWRhZA0KDQpgYGB7cn0NCg0KIyBDcmVhciB1biBncsOhZmljbyBkZSB2aW9sw61uDQpnZ3Bsb3QoU2FsdWRTdWXDsW8sIGFlcyh4ID0gTml2ZWxFc3RyZXMsIHkgPSBFZGFkLCBmaWxsID0gU2V4bykpICsNCiAgZ2VvbV92aW9saW4odHJpbSA9IEZBTFNFKSArDQogIGxhYnMoeCA9ICJOaXZlbCBFc3RyZXMiLCB5ID0gIkVkYWQiLCB0aXRsZSA9ICJEaXN0cmlidWNpw7NuIGRlbCBuaXZlbCBkZSBlc3RyZXMgcG9yIEVkYWQgIikNCg0KDQpgYGANCg0KIyMgVGVzdCBzb2JyZSBsb3MgRGF0b3MNCg0KKipQcnVlYmEgQU5PVkEgcGFyYSBncnVwb3MgZGUgZWRhZCoqDQoNCkxhIHBydWViYSBkZSBBTk9WQSByZXZlbGEgZGlmZXJlbmNpYXMgc2lnbmlmaWNhdGl2YXMgZW4gbGEgZHVyYWNpw7NuIGRlbCBzdWXDsW8gZW50cmUgZ3J1cG9zIGRlIGVkYWQuDQpFc3BlY8OtZmljYW1lbnRlLCBzZSBvYnNlcnZhIHF1ZSBlbCBncnVwbyBkZSBlZGFkIGltcGFjdGEgZGUgbWFuZXJhIHNpZ25pZmljYXRpdmEgZW4gbGEgZHVyYWNpw7NuIGRlbCBzdWXDsW8sDQppbmRpY2FuZG8gcXVlIGhheSB2YXJpYWNpb25lcyBlbiBlbCB0aWVtcG8gZGUgc3Vlw7FvIGVudHJlIGRpZmVyZW50ZXMgcmFuZ29zIGRlIGVkYWQuDQoNCmBgYHtyfQ0KIyBSZWFsaXphciBBTk9WQSBwYXJhIGdydXBvcyBkZSBlZGFkDQphbm92YV9hZ2UgPC0gYW92KER1cmFjaW9uU3Vlw7FvIH4gRWRhZCwgZGF0YSA9IFNhbHVkU3Vlw7FvKQ0Kc3VtbWFyeShhbm92YV9hZ2UpDQpgYGANCioqUHJ1ZWJhIEFOT1ZBIHBhcmEgZ2VuZXJvKioNCg0KTGEgcHJ1ZWJhIGRlIEFOT1ZBIG11ZXN0cmEgZGlmZXJlbmNpYXMgZXN0YWTDrXN0aWNhbWVudGUgc2lnbmlmaWNhdGl2YXMgZW4gbGEgZHVyYWNpw7NuIGRlbCBzdWXDsW8gZW50cmUgZ8OpbmVyb3MuDQpTZSBvYnNlcnZhIHF1ZSBlbCBnw6luZXJvIHRpZW5lIHVuIGltcGFjdG8gc2lnbmlmaWNhdGl2byBlbiBsYSBkdXJhY2nDs24gZGVsIHN1ZcOxbywgaW5kaWNhbmRvIHF1ZSBoYXkgdmFyaWFjaW9uZXMNCmVuIGVsIHRpZW1wbyBkZSBzdWXDsW8gZW50cmUgaG9tYnJlcyB5IG11amVyZXMuDQoNCmBgYHtyfQ0KIyBSZWFsaXphciBBTk9WQSBwYXJhIGfDqW5lcm8NCmFub3ZhX2dlbmRlciA8LSBhb3YoRHVyYWNpb25TdWXDsW8gfiBTZXhvLCBkYXRhID0gU2FsdWRTdWXDsW8pDQpzdW1tYXJ5KGFub3ZhX2dlbmRlcikNCmBgYA0KDQoqKkFOT1ZBIHBhcmEgbGEgaW50ZXJhY2Npw7NuIGVudHJlIEVkYWQgeSBTZXhvKioNCg0KTGEgcHJ1ZWJhIGRlIEFOT1ZBIHBhcmEgbGEgaW50ZXJhY2Npw7NuIHJldmVsYSBzaSBoYXkgZWZlY3RvcyBjb21iaW5hZG9zIGRlIEVkYWQgeSBTZXhvIGVuIGxhIGR1cmFjacOzbiBkZWwgc3Vlw7FvLg0KTG9zIHJlc3VsdGFkb3MgaW5kaWNhbiBxdWUgbGEgaW50ZXJhY2Npw7NuIGVudHJlIEVkYWQgeSBTZXhvIG5vIGVzIGVzdGFkw61zdGljYW1lbnRlIHNpZ25pZmljYXRpdmEgZW4gcmVsYWNpw7NuIGNvbiBsYSBkdXJhY2nDs24gZGVsIHN1ZcOxby4NCg0KYGBge3J9DQojIFJlYWxpemFyIEFOT1ZBIHBhcmEgbGEgaW50ZXJhY2Npw7NuIGVudHJlIEVkYWQgeSBTZXhvDQphbm92YV9pbnRlcmFjdGlvbiA8LSBhb3YoRHVyYWNpb25TdWXDsW8gfiBFZGFkICogU2V4bywgZGF0YSA9IFNhbHVkU3Vlw7FvKQ0Kc3VtbWFyeShhbm92YV9pbnRlcmFjdGlvbikNCmBgYA0KDQoqKkNvbmNsdXNpb25lcyBzb2JyZSBlbCB0ZXN0IGRlIGxvcyBkYXRvcyoqDQoNCmxhcyBwcnVlYmFzIGRlIEFOT1ZBIHN1Z2llcmVuIHF1ZSB0YW50byBsYSBlZGFkIGNvbW8gZWwgZ8OpbmVybyBpbmZsdXllbiBlbiBsYSBkdXJhY2nDs24gZGVsIHN1ZcOxbywNCnBlcm8gbGEgaW50ZXJhY2Npw7NuIGVudHJlIEVkYWQgeSBTZXhvIG5vIG11ZXN0cmEgdW4gZWZlY3RvIHNpZ25pZmljYXRpdm8gZW4gbGEgZHVyYWNpw7NuIGRlbCBzdWXDsW8gZW4gZXN0ZSBjb25qdW50byBkZSBkYXRvcy4NCg0KDQojIyBJbnRlcnByZXRhY2nDs24gZGUgUmVzdWx0YWRvcw0KDQotIEdyYWZpY28gZGUgR3J1cG8gZ2VuZXJhbCBkZSA1MCBhIDYwIGHDsW9zIGRlIGVkYWQgc3VlbGVuIHRlbmVyIG1lam9yIGR1cmFjaW9uIGRlIHN1ZcOxbw0KLSBMYXMgbXVqZXJlcyBkZSBlbnRyZSA1MCB5IDYwIHRpZW5lbiBtZWpvciBkdXJhY2lvbiBkZSBzdWXDsW8NCi0gTG9zIGhvbWJyZXMgdGllbmVuIHVuYSBkdXJhY2lvbiBkZSBzdWXDsW8gc2ltaWxhciBpbmRlcGVuZGllbnRlIGRlIHN1IGVkYWQNCi0gU2kgc2Ugc2VwYXJhbiBwb3IgaG9tYnJlcyB5IG11amVyZXMsIHNlIG11ZXN0cmEgcXVlIGxhcyBtdWplcmVzIHRpZW5lbiB1bmEgZHVyYWNpb24gZGUgc3Vlw7FvIG1hcyBsYXJnYQ0KLSBTZSBhcHJlY2lhIHF1ZSBsb3MgaG9tYnJlcyBzdWVsZW4gdGVuZXIgbWFzIGVzdHJlcyBxdWUgbGFzIG11amVyZXMsIHB1ZWRlIHNlciBkZWJpZG8gYSBxdWUgZWxsb3MgZHVlcm1lbiBtZW5vcw0KDQojIyBDb25jbHVzacOzbg0KDQpMb3MgZ3LDoWZpY29zIG5vIGV2aWRlbmNpYW4gdW5hIGRpZmVyZW5jaWEgc2lnbmlmaWNhdGl2YSBlbiBsYXMgaG9yYXMgZGUgc3Vlw7FvIGVuIGxhIHBvYmxhY2nDs24gZ2VuZXJhbC4gU2luIGVtYmFyZ28sIGFsIGFuYWxpemFyIHBvciBnw6luZXJvIHkgcmVkdWNpciBsYSBjYW50aWRhZCBkZSBwZXJzb25hcyBlbnRyZXZpc3RhZGFzLCBzZSBkZXN0YWNhIHVuYSBncmFuIGRpZmVyZW5jaWE6IGxvcyBob21icmVzIHRpZW5kZW4gYSBkb3JtaXIgbWVub3MgcXVlIGxhcyBtdWplcmVzLg0KRW4gZWwgZ3LDoWZpY28gZGUgdmlvbMOtbiwgc2UgZGVzdGFjYSBxdWUsIGVuIHByb21lZGlvLCBsb3MgaG9tYnJlcyBleHBlcmltZW50YW4gbml2ZWxlcyBtw6FzIGFsdG9zIGRlIGVzdHLDqXMgcXVlIGxhcyBtdWplcmVzLiBVbmEgcG9zaWJsZSBjYXVzYSwgc2Vnw7puIGxvcyBkYXRvcyBwcmVzZW50YWRvcyBlbiBsb3MgZ3LDoWZpY29zLCBlcyBxdWUgbG9zIGhvbWJyZXMgdGllbmRlbiBhIGRvcm1pciBtZW5vcywgbG8gcXVlIHBvZHLDrWEgbW9zdHJhciB1bmEgbWVub3IgZGVkaWNhY2nDs24gYWwgZGVzY2Fuc28geSBjb21vIGNvbnNlY3VlbmNpYSwgbml2ZWxlcyBkZSBlc3Ryw6lzIG3DoXMgZWxldmFkb3MuDQpFbiByZXN1bWVuLCBhdW5xdWUgbGEgZHVyYWNpw7NuIGRlbCBzdWXDsW8gZW4gZWwgZ3J1cG8gZ2VuZXJhbCBkZSBwZXJzb25hcyBlcyBzaW1pbGFyLCBhbCBkaXZpZGlyIHBvciBnw6luZXJvIHNlIG9ic2VydmEgdW4gY2FtYmlvIHNpZ25pZmljYXRpdm86IGxvcyBob21icmVzIGR1ZXJtZW4gbWVub3MgcXVlIGxhcyBtdWplcmVzLiBDb24gZXN0YSBpbmZvcm1hY2nDs24sIHNlIHJlc3BhbGRhIGxhIGFjZXB0YWNpw7NuIGRlIGxhIGhpcMOzdGVzaXMgbnVsYSBxdWUgc29zdGllbmUgbGEgZmFsdGEgZGUgcmVsYWNpw7NuIGVudHJlIGxhIGR1cmFjacOzbiBkZWwgc3Vlw7FvIHkgbGEgZWRhZCBkZSBsYXMgcGVyc29uYXMsIG1pZW50cmFzIHF1ZSBzZSBkZXNjYXJ0YSBsYSBoaXDDs3Rlc2lzIGFsdGVybmF0aXZhIGVuIGVzdGUgY29udGV4dG8gZXNwZWPDrWZpY28uDQoNCg==