Se realizó un análisis horario de los valores de Pol, Brix y Pureza
reportados por el Core Sampler.
El objetivo es verificar la hipótesis de que durante cierto rango de
horas del día los valores de Pol, Brix y Pureza tienden a ser más altos
que en el resto de horas. Específicamente, durante las primeras
horas del día.
library(ggplot2)
library(lubridate)
library(dplyr)
Conjunto de Datos Muestras Core Sampler
Este conjunto de datos se obtuvo de la base de datos Legacy de
Laboratorio
dataset <- read.csv(file = 'C:/Users/100346/OneDrive - Pantaleon. S.A/DataScience Pantaleon/R/Core Sampler/Datos_Core_Z2025.csv')
dataset$Fecha <- as.Date(dataset$Fecha,format = "%d/%m/%Y")
dataset
Verificación de Rangos
Se examinan los promedios de Pol, Brix y Pureza para los siguientes
rangos horarios:
Rango 1: 0 a 7 horas
Rango 2: 8 a 15 horas
Rango 3: 16 a 23 horas Y, para cada Rango, se
analizan distintos horizontes temporales:
Horizonte 1: 23 NOV al 30 NOV
Horizonte 2: 23 NOV al 15 DIC
Horizonte 3: 23 NOV al 16 ENE
df1 <- dataset %>% filter(Fecha < '2024-11-30')
df1_dist <- df1 %>% group_by(hora) %>% summarise(Pol = mean(Pol, na.rm = TRUE), Brix = mean(Brix, na.rm = TRUE),
Pureza = mean(Pureza, na.rm = TRUE) , ensayos = n())
df2 <- dataset %>% filter(Fecha < '2024-12-15')
df2_dist <- df2 %>% group_by(hora) %>% summarise(Pol = mean(Pol, na.rm = TRUE), Brix = mean(Brix, na.rm = TRUE),
Pureza = mean(Pureza, na.rm = TRUE) , ensayos = n())
df3 <- dataset %>% filter(Fecha < '2025-01-16')
df3_dist <- df3 %>% group_by(hora) %>% summarise(Pol = mean(Pol, na.rm = TRUE), Brix = mean(Brix, na.rm = TRUE),
Pureza = mean(Pureza, na.rm = TRUE) , ensayos = n())
Promedios Horizonte 1: 23 NOV al 30 NOV
NOV30_Primero <- df1_dist %>% filter(hora %in% (0:7) ) %>%
summarise(Pol_Promedio = mean(Pol, na.rm = TRUE), Brix_Promedio = mean(Brix, na.rm = TRUE), Pureza_Promedio = mean(Pureza, na.rm = TRUE))
NOV30_Segundo <- df1_dist %>% filter(hora %in% (8:15) ) %>%
summarise(Pol_Promedio = mean(Pol, na.rm = TRUE), Brix_Promedio = mean(Brix, na.rm = TRUE), Pureza_Promedio = mean(Pureza, na.rm = TRUE))
NOV30_Tercero <- df1_dist %>% filter(hora %in% (16:23) ) %>%
summarise(Pol_Promedio = mean(Pol, na.rm = TRUE), Brix_Promedio = mean(Brix, na.rm = TRUE), Pureza_Promedio = mean(Pureza, na.rm = TRUE))
df1_Pol <- data.frame("Variable" = c("Pol","Brix","Pureza"),
"de 0 a 7 horas" = c(NOV30_Primero$Pol_Promedio,NOV30_Primero$Brix_Promedio, NOV30_Primero$Pureza_Promedio),
"de 8 a 15 horas" = c(NOV30_Segundo$Pol_Promedio,NOV30_Segundo$Brix_Promedio, NOV30_Segundo$Pureza_Promedio),
"de 16 a 23 horas" = c(NOV30_Tercero$Pol_Promedio,NOV30_Tercero$Brix_Promedio, NOV30_Tercero$Pureza_Promedio)
)
df1_Pol
Promedios Horizonte 2: 23 NOV al 14 DIC
DIC15_Primero <- df2_dist %>% filter(hora %in% (0:7) ) %>%
summarise(Pol_Promedio = mean(Pol, na.rm = TRUE), Brix_Promedio = mean(Brix, na.rm = TRUE), Pureza_Promedio = mean(Pureza, na.rm = TRUE))
DIC15_Segundo <- df2_dist %>% filter(hora %in% (8:15) ) %>%
summarise(Pol_Promedio = mean(Pol, na.rm = TRUE), Brix_Promedio = mean(Brix, na.rm = TRUE), Pureza_Promedio = mean(Pureza, na.rm = TRUE))
DIC15_Tercero <- df2_dist %>% filter(hora %in% (16:23) ) %>%
summarise(Pol_Promedio = mean(Pol, na.rm = TRUE), Brix_Promedio = mean(Brix, na.rm = TRUE), Pureza_Promedio = mean(Pureza, na.rm = TRUE))
df2_Pol <- data.frame("Variable" = c("Pol","Brix","Pureza"),
"de 0 a 7 horas" = c(DIC15_Primero$Pol_Promedio,DIC15_Primero$Brix_Promedio, DIC15_Primero$Pureza_Promedio),
"de 8 a 15 horas" = c(DIC15_Segundo$Pol_Promedio,DIC15_Segundo$Brix_Promedio, DIC15_Segundo$Pureza_Promedio),
"de 16 a 23 horas" = c(DIC15_Tercero$Pol_Promedio,DIC15_Tercero$Brix_Promedio, DIC15_Tercero$Pureza_Promedio)
)
df2_Pol
Promedios Horizonte 3: 23 NOV al 16 ENE
ENE16_Primero <- df3_dist %>% filter(hora %in% (0:7) ) %>%
summarise(Pol_Promedio = mean(Pol, na.rm = TRUE), Brix_Promedio = mean(Brix, na.rm = TRUE), Pureza_Promedio = mean(Pureza, na.rm = TRUE))
ENE16_Segundo <- df3_dist %>% filter(hora %in% (8:15) ) %>%
summarise(Pol_Promedio = mean(Pol, na.rm = TRUE), Brix_Promedio = mean(Brix, na.rm = TRUE), Pureza_Promedio = mean(Pureza, na.rm = TRUE))
ENE16_Tercero <- df3_dist %>% filter(hora %in% (16:23) ) %>%
summarise(Pol_Promedio = mean(Pol, na.rm = TRUE), Brix_Promedio = mean(Brix, na.rm = TRUE), Pureza_Promedio = mean(Pureza, na.rm = TRUE))
df3_Pol <- data.frame("Variable" = c("Pol","Brix","Pureza"),
"de 0 a 7 horas" = c(ENE16_Primero$Pol_Promedio,ENE16_Primero$Brix_Promedio, ENE16_Primero$Pureza_Promedio),
"de 8 a 15 horas" = c(ENE16_Segundo$Pol_Promedio,ENE16_Segundo$Brix_Promedio, ENE16_Segundo$Pureza_Promedio),
"de 16 a 23 horas" = c(ENE16_Tercero$Pol_Promedio,ENE16_Tercero$Brix_Promedio, ENE16_Tercero$Pureza_Promedio)
)
df3_Pol
Número de muestreos por rango de horas
# Bar Plots:
barplot(height=df3_dist$ensayos, names=df3_dist$hora, col = "light green", xlab = "Hora Muestreo", ylab = "Acumulado Muestras", cex.axis=0.5, cex.names=0.5)
barplot(height=df2_dist$ensayos, names=df2_dist$hora, col = "green", cex.axis=0.5, cex.names=0.5, add = TRUE)
barplot(height=df1_dist$ensayos, names=df1_dist$hora, col = "dark green", cex.axis=0.5, cex.names=0.5, add = TRUE)
legend("top", title="Período", legend= c("al 30-Nov","al 15-Dic","al 16-Ene"), fill =c("dark green", "green", "light green" ), box.lty=0)

df_dist <- dataset %>% group_by(hora) %>% summarise(Pol = mean(Pol, na.rm = TRUE), Brix = mean(Brix, na.rm = TRUE),
Pureza = mean(Pureza, na.rm = TRUE) , Rendimiento = mean(Rendimiento, na.rm = TRUE), ensayos = n())
# Bar Plots:
barplot(height=df_dist$Pol, names=df_dist$hora, col = "darkorange", xlab = "Hora Muestreo", ylab = "Pol", cex.axis=0.5, cex.names=0.5)
title(main="Distribución Horaria de Pol")

# Bar Plots:
barplot(height=df_dist$Brix, names=df_dist$hora, col = "darkgreen", xlab = "Hora Muestreo", ylab = "Brix", cex.axis=0.5, cex.names=0.5)
title(main="Distribución Horaria de Brix")

# Bar Plots:
barplot(height=df_dist$Pureza, names=df_dist$hora, col = "blue", xlab = "Hora Muestreo", ylab = "Pureza", cex.axis=0.5, cex.names=0.5)
title(main="Distribución Horaria de Pureza")

# Bar Plots:
barplot(height=df_dist$Rendimiento, names=df_dist$hora, col = "darkred", xlab = "Hora Muestreo", ylab = "Rendimiento", cex.axis=0.5, cex.names=0.5)
title(main="Distribución Horaria de Rendimiento Core")

- No existe evidencia de que la Pol, Brix, Pureza o
Rendimiento del Core Sampler tenga diferencia significativa durante el
día.
- No existe evidencia que la distribución de registro de
muestras a lo largo del día esté sesgada.
LS0tDQp0aXRsZTogIkFuYWxpc2lzIGRlIFZhbG9yZXMgQ29yZSBTYW1wbGVyIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KU2UgcmVhbGl6w7MgdW4gYW7DoWxpc2lzIGhvcmFyaW8gZGUgbG9zIHZhbG9yZXMgZGUgUG9sLCBCcml4IHkgUHVyZXphIHJlcG9ydGFkb3MgcG9yIGVsIENvcmUgU2FtcGxlci4NCg0KRWwgb2JqZXRpdm8gZXMgdmVyaWZpY2FyIGxhIGhpcMOzdGVzaXMgZGUgcXVlIGR1cmFudGUgY2llcnRvIHJhbmdvIGRlIGhvcmFzIGRlbCBkw61hIGxvcyB2YWxvcmVzIGRlIFBvbCwgQnJpeCB5IFB1cmV6YSB0aWVuZGVuIGEgc2VyIG3DoXMgYWx0b3MgcXVlIGVuIGVsIHJlc3RvIGRlIGhvcmFzLiBFc3BlY8OtZmljYW1lbnRlLCAqZHVyYW50ZSBsYXMgcHJpbWVyYXMgaG9yYXMgZGVsIGTDrWEqLiANCg0KYGBge3J9DQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGx1YnJpZGF0ZSkNCmxpYnJhcnkoZHBseXIpDQpgYGANCg0KIyMjIENvbmp1bnRvIGRlIERhdG9zIE11ZXN0cmFzIENvcmUgU2FtcGxlcg0KRXN0ZSBjb25qdW50byBkZSBkYXRvcyBzZSBvYnR1dm8gZGUgbGEgYmFzZSBkZSBkYXRvcyBMZWdhY3kgZGUgTGFib3JhdG9yaW8NCg0KYGBge3J9DQpkYXRhc2V0IDwtIHJlYWQuY3N2KGZpbGUgPSAnQzovVXNlcnMvMTAwMzQ2L09uZURyaXZlIC0gUGFudGFsZW9uLiBTLkEvRGF0YVNjaWVuY2UgUGFudGFsZW9uL1IvQ29yZSBTYW1wbGVyL0RhdG9zX0NvcmVfWjIwMjUuY3N2JykNCmRhdGFzZXQkRmVjaGEgPC0gYXMuRGF0ZShkYXRhc2V0JEZlY2hhLGZvcm1hdCA9ICIlZC8lbS8lWSIpDQpkYXRhc2V0DQpgYGANCg0KIyMjIFZlcmlmaWNhY2nDs24gZGUgUmFuZ29zDQpTZSBleGFtaW5hbiBsb3MgcHJvbWVkaW9zIGRlIFBvbCwgQnJpeCB5IFB1cmV6YSBwYXJhIGxvcyBzaWd1aWVudGVzIHJhbmdvcyBob3JhcmlvczoNCg0KLSAqKlJhbmdvIDEqKjogMCBhIDcgaG9yYXMNCi0gKipSYW5nbyAyKio6IDggYSAxNSBob3Jhcw0KLSAqKlJhbmdvIDMqKjogMTYgYSAyMyBob3Jhcw0KWSwgcGFyYSBjYWRhIFJhbmdvLCBzZSBhbmFsaXphbiBkaXN0aW50b3MgaG9yaXpvbnRlcyB0ZW1wb3JhbGVzOg0KDQotICoqSG9yaXpvbnRlIDEqKjogMjMgTk9WIGFsIDMwIE5PVg0KLSAqKkhvcml6b250ZSAyKio6IDIzIE5PViBhbCAxNSBESUMNCi0gKipIb3Jpem9udGUgMyoqOiAyMyBOT1YgYWwgMTYgRU5FDQoNCmBgYHtyfQ0KZGYxIDwtIGRhdGFzZXQgJT4lIGZpbHRlcihGZWNoYSA8ICcyMDI0LTExLTMwJykNCmRmMV9kaXN0IDwtIGRmMSAlPiUgIGdyb3VwX2J5KGhvcmEpICU+JSBzdW1tYXJpc2UoUG9sID0gbWVhbihQb2wsIG5hLnJtID0gVFJVRSksIEJyaXggPSBtZWFuKEJyaXgsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdXJlemEgPSBtZWFuKFB1cmV6YSwgbmEucm0gPSBUUlVFKSAsIGVuc2F5b3MgPSBuKCkpDQoNCmRmMiA8LSBkYXRhc2V0ICU+JSBmaWx0ZXIoRmVjaGEgPCAnMjAyNC0xMi0xNScpDQpkZjJfZGlzdCA8LSBkZjIgJT4lICBncm91cF9ieShob3JhKSAlPiUgc3VtbWFyaXNlKFBvbCA9IG1lYW4oUG9sLCBuYS5ybSA9IFRSVUUpLCBCcml4ID0gbWVhbihCcml4LCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVyZXphID0gbWVhbihQdXJlemEsIG5hLnJtID0gVFJVRSkgLCBlbnNheW9zID0gbigpKQ0KDQpkZjMgPC0gZGF0YXNldCAlPiUgZmlsdGVyKEZlY2hhIDwgJzIwMjUtMDEtMTYnKQ0KZGYzX2Rpc3QgPC0gZGYzICU+JSAgZ3JvdXBfYnkoaG9yYSkgJT4lIHN1bW1hcmlzZShQb2wgPSBtZWFuKFBvbCwgbmEucm0gPSBUUlVFKSwgQnJpeCA9IG1lYW4oQnJpeCwgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1cmV6YSA9IG1lYW4oUHVyZXphLCBuYS5ybSA9IFRSVUUpICwgZW5zYXlvcyA9IG4oKSkNCmBgYA0KDQoNCiMjIyBQcm9tZWRpb3MgSG9yaXpvbnRlIDE6IDIzIE5PViBhbCAzMCBOT1YNCg0KYGBge3J9DQpOT1YzMF9QcmltZXJvIDwtIGRmMV9kaXN0ICU+JSBmaWx0ZXIoaG9yYSAlaW4lICgwOjcpICkgJT4lIA0KICBzdW1tYXJpc2UoUG9sX1Byb21lZGlvID0gbWVhbihQb2wsIG5hLnJtID0gVFJVRSksIEJyaXhfUHJvbWVkaW8gPSBtZWFuKEJyaXgsIG5hLnJtID0gVFJVRSksIFB1cmV6YV9Qcm9tZWRpbyA9IG1lYW4oUHVyZXphLCBuYS5ybSA9IFRSVUUpKQ0KDQpOT1YzMF9TZWd1bmRvIDwtIGRmMV9kaXN0ICU+JSBmaWx0ZXIoaG9yYSAlaW4lICg4OjE1KSApICU+JSANCiAgc3VtbWFyaXNlKFBvbF9Qcm9tZWRpbyA9IG1lYW4oUG9sLCBuYS5ybSA9IFRSVUUpLCBCcml4X1Byb21lZGlvID0gbWVhbihCcml4LCBuYS5ybSA9IFRSVUUpLCBQdXJlemFfUHJvbWVkaW8gPSBtZWFuKFB1cmV6YSwgbmEucm0gPSBUUlVFKSkNCg0KTk9WMzBfVGVyY2VybyA8LSBkZjFfZGlzdCAlPiUgZmlsdGVyKGhvcmEgJWluJSAoMTY6MjMpICkgJT4lIA0KICBzdW1tYXJpc2UoUG9sX1Byb21lZGlvID0gbWVhbihQb2wsIG5hLnJtID0gVFJVRSksIEJyaXhfUHJvbWVkaW8gPSBtZWFuKEJyaXgsIG5hLnJtID0gVFJVRSksIFB1cmV6YV9Qcm9tZWRpbyA9IG1lYW4oUHVyZXphLCBuYS5ybSA9IFRSVUUpKQ0KDQpkZjFfUG9sIDwtIGRhdGEuZnJhbWUoIlZhcmlhYmxlIiA9IGMoIlBvbCIsIkJyaXgiLCJQdXJlemEiKSwgDQogICAgICAgICAgICAgICAgICAgICAgImRlIDAgYSA3IGhvcmFzIiA9IGMoTk9WMzBfUHJpbWVybyRQb2xfUHJvbWVkaW8sTk9WMzBfUHJpbWVybyRCcml4X1Byb21lZGlvLCBOT1YzMF9QcmltZXJvJFB1cmV6YV9Qcm9tZWRpbyksDQogICAgICAgICAgICAgICAgICAgICAgImRlIDggYSAxNSBob3JhcyIgPSBjKE5PVjMwX1NlZ3VuZG8kUG9sX1Byb21lZGlvLE5PVjMwX1NlZ3VuZG8kQnJpeF9Qcm9tZWRpbywgTk9WMzBfU2VndW5kbyRQdXJlemFfUHJvbWVkaW8pLA0KICAgICAgICAgICAgICAgICAgICAgICJkZSAxNiBhIDIzIGhvcmFzIiA9IGMoTk9WMzBfVGVyY2VybyRQb2xfUHJvbWVkaW8sTk9WMzBfVGVyY2VybyRCcml4X1Byb21lZGlvLCBOT1YzMF9UZXJjZXJvJFB1cmV6YV9Qcm9tZWRpbykNCiAgICAgICAgICAgICAgICAgICAgICApDQpkZjFfUG9sDQpgYGANCg0KIyMjIFByb21lZGlvcyBIb3Jpem9udGUgMjogMjMgTk9WIGFsIDE0IERJQw0KDQpgYGB7cn0NCkRJQzE1X1ByaW1lcm8gPC0gZGYyX2Rpc3QgJT4lIGZpbHRlcihob3JhICVpbiUgKDA6NykgKSAlPiUgDQogIHN1bW1hcmlzZShQb2xfUHJvbWVkaW8gPSBtZWFuKFBvbCwgbmEucm0gPSBUUlVFKSwgQnJpeF9Qcm9tZWRpbyA9IG1lYW4oQnJpeCwgbmEucm0gPSBUUlVFKSwgUHVyZXphX1Byb21lZGlvID0gbWVhbihQdXJlemEsIG5hLnJtID0gVFJVRSkpDQoNCkRJQzE1X1NlZ3VuZG8gPC0gZGYyX2Rpc3QgJT4lIGZpbHRlcihob3JhICVpbiUgKDg6MTUpICkgJT4lIA0KICBzdW1tYXJpc2UoUG9sX1Byb21lZGlvID0gbWVhbihQb2wsIG5hLnJtID0gVFJVRSksIEJyaXhfUHJvbWVkaW8gPSBtZWFuKEJyaXgsIG5hLnJtID0gVFJVRSksIFB1cmV6YV9Qcm9tZWRpbyA9IG1lYW4oUHVyZXphLCBuYS5ybSA9IFRSVUUpKQ0KDQpESUMxNV9UZXJjZXJvIDwtIGRmMl9kaXN0ICU+JSBmaWx0ZXIoaG9yYSAlaW4lICgxNjoyMykgKSAlPiUgDQogIHN1bW1hcmlzZShQb2xfUHJvbWVkaW8gPSBtZWFuKFBvbCwgbmEucm0gPSBUUlVFKSwgQnJpeF9Qcm9tZWRpbyA9IG1lYW4oQnJpeCwgbmEucm0gPSBUUlVFKSwgUHVyZXphX1Byb21lZGlvID0gbWVhbihQdXJlemEsIG5hLnJtID0gVFJVRSkpDQoNCmRmMl9Qb2wgPC0gZGF0YS5mcmFtZSgiVmFyaWFibGUiID0gYygiUG9sIiwiQnJpeCIsIlB1cmV6YSIpLCANCiAgICAgICAgICAgICAgICAgICAgICAiZGUgMCBhIDcgaG9yYXMiID0gYyhESUMxNV9QcmltZXJvJFBvbF9Qcm9tZWRpbyxESUMxNV9QcmltZXJvJEJyaXhfUHJvbWVkaW8sIERJQzE1X1ByaW1lcm8kUHVyZXphX1Byb21lZGlvKSwNCiAgICAgICAgICAgICAgICAgICAgICAiZGUgOCBhIDE1IGhvcmFzIiA9IGMoRElDMTVfU2VndW5kbyRQb2xfUHJvbWVkaW8sRElDMTVfU2VndW5kbyRCcml4X1Byb21lZGlvLCBESUMxNV9TZWd1bmRvJFB1cmV6YV9Qcm9tZWRpbyksDQogICAgICAgICAgICAgICAgICAgICAgImRlIDE2IGEgMjMgaG9yYXMiID0gYyhESUMxNV9UZXJjZXJvJFBvbF9Qcm9tZWRpbyxESUMxNV9UZXJjZXJvJEJyaXhfUHJvbWVkaW8sIERJQzE1X1RlcmNlcm8kUHVyZXphX1Byb21lZGlvKQ0KICAgICAgICAgICAgICAgICAgICAgICkNCmRmMl9Qb2wNCmBgYA0KDQojIyMgUHJvbWVkaW9zIEhvcml6b250ZSAzOiAyMyBOT1YgYWwgMTYgRU5FDQoNCmBgYHtyfQ0KRU5FMTZfUHJpbWVybyA8LSBkZjNfZGlzdCAlPiUgZmlsdGVyKGhvcmEgJWluJSAoMDo3KSApICU+JSANCiAgc3VtbWFyaXNlKFBvbF9Qcm9tZWRpbyA9IG1lYW4oUG9sLCBuYS5ybSA9IFRSVUUpLCBCcml4X1Byb21lZGlvID0gbWVhbihCcml4LCBuYS5ybSA9IFRSVUUpLCBQdXJlemFfUHJvbWVkaW8gPSBtZWFuKFB1cmV6YSwgbmEucm0gPSBUUlVFKSkNCg0KRU5FMTZfU2VndW5kbyA8LSBkZjNfZGlzdCAlPiUgZmlsdGVyKGhvcmEgJWluJSAoODoxNSkgKSAlPiUgDQogIHN1bW1hcmlzZShQb2xfUHJvbWVkaW8gPSBtZWFuKFBvbCwgbmEucm0gPSBUUlVFKSwgQnJpeF9Qcm9tZWRpbyA9IG1lYW4oQnJpeCwgbmEucm0gPSBUUlVFKSwgUHVyZXphX1Byb21lZGlvID0gbWVhbihQdXJlemEsIG5hLnJtID0gVFJVRSkpDQoNCkVORTE2X1RlcmNlcm8gPC0gZGYzX2Rpc3QgJT4lIGZpbHRlcihob3JhICVpbiUgKDE2OjIzKSApICU+JSANCiAgc3VtbWFyaXNlKFBvbF9Qcm9tZWRpbyA9IG1lYW4oUG9sLCBuYS5ybSA9IFRSVUUpLCBCcml4X1Byb21lZGlvID0gbWVhbihCcml4LCBuYS5ybSA9IFRSVUUpLCBQdXJlemFfUHJvbWVkaW8gPSBtZWFuKFB1cmV6YSwgbmEucm0gPSBUUlVFKSkNCg0KZGYzX1BvbCA8LSBkYXRhLmZyYW1lKCJWYXJpYWJsZSIgPSBjKCJQb2wiLCJCcml4IiwiUHVyZXphIiksIA0KICAgICAgICAgICAgICAgICAgICAgICJkZSAwIGEgNyBob3JhcyIgPSBjKEVORTE2X1ByaW1lcm8kUG9sX1Byb21lZGlvLEVORTE2X1ByaW1lcm8kQnJpeF9Qcm9tZWRpbywgRU5FMTZfUHJpbWVybyRQdXJlemFfUHJvbWVkaW8pLA0KICAgICAgICAgICAgICAgICAgICAgICJkZSA4IGEgMTUgaG9yYXMiID0gYyhFTkUxNl9TZWd1bmRvJFBvbF9Qcm9tZWRpbyxFTkUxNl9TZWd1bmRvJEJyaXhfUHJvbWVkaW8sIEVORTE2X1NlZ3VuZG8kUHVyZXphX1Byb21lZGlvKSwNCiAgICAgICAgICAgICAgICAgICAgICAiZGUgMTYgYSAyMyBob3JhcyIgPSBjKEVORTE2X1RlcmNlcm8kUG9sX1Byb21lZGlvLEVORTE2X1RlcmNlcm8kQnJpeF9Qcm9tZWRpbywgRU5FMTZfVGVyY2VybyRQdXJlemFfUHJvbWVkaW8pDQogICAgICAgICAgICAgICAgICAgICAgKQ0KZGYzX1BvbA0KYGBgDQoNCiMjIyBOw7ptZXJvIGRlIG11ZXN0cmVvcyBwb3IgcmFuZ28gZGUgaG9yYXMNCg0KYGBge3J9DQojIEJhciBQbG90czoNCmJhcnBsb3QoaGVpZ2h0PWRmM19kaXN0JGVuc2F5b3MsIG5hbWVzPWRmM19kaXN0JGhvcmEsIGNvbCA9ICJsaWdodCBncmVlbiIsIHhsYWIgPSAiSG9yYSBNdWVzdHJlbyIsIHlsYWIgPSAiQWN1bXVsYWRvIE11ZXN0cmFzIiwgY2V4LmF4aXM9MC41LCBjZXgubmFtZXM9MC41KQ0KYmFycGxvdChoZWlnaHQ9ZGYyX2Rpc3QkZW5zYXlvcywgbmFtZXM9ZGYyX2Rpc3QkaG9yYSwgY29sID0gImdyZWVuIiwgY2V4LmF4aXM9MC41LCBjZXgubmFtZXM9MC41LCBhZGQgPSBUUlVFKQ0KYmFycGxvdChoZWlnaHQ9ZGYxX2Rpc3QkZW5zYXlvcywgbmFtZXM9ZGYxX2Rpc3QkaG9yYSwgY29sID0gImRhcmsgZ3JlZW4iLCBjZXguYXhpcz0wLjUsIGNleC5uYW1lcz0wLjUsIGFkZCA9IFRSVUUpDQoNCmxlZ2VuZCgidG9wIiwgdGl0bGU9IlBlcsOtb2RvIiwgbGVnZW5kPSBjKCJhbCAzMC1Ob3YiLCJhbCAxNS1EaWMiLCJhbCAxNi1FbmUiKSwgZmlsbCA9YygiZGFyayBncmVlbiIsICJncmVlbiIsICJsaWdodCBncmVlbiIgKSwgYm94Lmx0eT0wKQ0KYGBgDQoNCmBgYHtyfQ0KDQoNCmRmX2Rpc3QgPC0gZGF0YXNldCAlPiUgIGdyb3VwX2J5KGhvcmEpICU+JSBzdW1tYXJpc2UoUG9sID0gbWVhbihQb2wsIG5hLnJtID0gVFJVRSksIEJyaXggPSBtZWFuKEJyaXgsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdXJlemEgPSBtZWFuKFB1cmV6YSwgbmEucm0gPSBUUlVFKSAsIFJlbmRpbWllbnRvID0gbWVhbihSZW5kaW1pZW50bywgbmEucm0gPSBUUlVFKSwgZW5zYXlvcyA9IG4oKSkNCg0KIyBCYXIgUGxvdHM6DQpiYXJwbG90KGhlaWdodD1kZl9kaXN0JFBvbCwgbmFtZXM9ZGZfZGlzdCRob3JhLCBjb2wgPSAiZGFya29yYW5nZSIsIHhsYWIgPSAiSG9yYSBNdWVzdHJlbyIsIHlsYWIgPSAiUG9sIiwgY2V4LmF4aXM9MC41LCBjZXgubmFtZXM9MC41KQ0KDQp0aXRsZShtYWluPSJEaXN0cmlidWNpw7NuIEhvcmFyaWEgZGUgUG9sIikNCg0KYGBgDQoNCmBgYHtyfQ0KIyBCYXIgUGxvdHM6DQpiYXJwbG90KGhlaWdodD1kZl9kaXN0JEJyaXgsIG5hbWVzPWRmX2Rpc3QkaG9yYSwgY29sID0gImRhcmtncmVlbiIsIHhsYWIgPSAiSG9yYSBNdWVzdHJlbyIsIHlsYWIgPSAiQnJpeCIsIGNleC5heGlzPTAuNSwgY2V4Lm5hbWVzPTAuNSkNCnRpdGxlKG1haW49IkRpc3RyaWJ1Y2nDs24gSG9yYXJpYSBkZSBCcml4IikNCmBgYA0KDQpgYGB7cn0NCiMgQmFyIFBsb3RzOg0KYmFycGxvdChoZWlnaHQ9ZGZfZGlzdCRQdXJlemEsIG5hbWVzPWRmX2Rpc3QkaG9yYSwgY29sID0gImJsdWUiLCB4bGFiID0gIkhvcmEgTXVlc3RyZW8iLCB5bGFiID0gIlB1cmV6YSIsIGNleC5heGlzPTAuNSwgY2V4Lm5hbWVzPTAuNSkNCnRpdGxlKG1haW49IkRpc3RyaWJ1Y2nDs24gSG9yYXJpYSBkZSBQdXJlemEiKQ0KYGBgDQoNCmBgYHtyfQ0KIyBCYXIgUGxvdHM6DQpiYXJwbG90KGhlaWdodD1kZl9kaXN0JFJlbmRpbWllbnRvLCBuYW1lcz1kZl9kaXN0JGhvcmEsIGNvbCA9ICJkYXJrcmVkIiwgeGxhYiA9ICJIb3JhIE11ZXN0cmVvIiwgeWxhYiA9ICJSZW5kaW1pZW50byIsIGNleC5heGlzPTAuNSwgY2V4Lm5hbWVzPTAuNSkNCnRpdGxlKG1haW49IkRpc3RyaWJ1Y2nDs24gSG9yYXJpYSBkZSBSZW5kaW1pZW50byBDb3JlIikNCmBgYA0KDQoNCi0gKipObyBleGlzdGUgZXZpZGVuY2lhIGRlIHF1ZSBsYSBQb2wsIEJyaXgsIFB1cmV6YSBvIFJlbmRpbWllbnRvIGRlbCBDb3JlIFNhbXBsZXIgdGVuZ2EgZGlmZXJlbmNpYSBzaWduaWZpY2F0aXZhIGR1cmFudGUgZWwgZMOtYS4qKg0KLSAqKk5vIGV4aXN0ZSBldmlkZW5jaWEgcXVlIGxhIGRpc3RyaWJ1Y2nDs24gZGUgcmVnaXN0cm8gZGUgbXVlc3RyYXMgYSBsbyBsYXJnbyBkZWwgZMOtYSBlc3TDqSBzZXNnYWRhLioqDQo=