getwd()
[1] "C:/Users/Lisbeth/Documents"
file.choose(`sulfatos (mg/L)`)
[1] "C:\\Users\\Lisbeth\\Downloads\\DISEÑO EXPERIMENTAL (TRABAJOS)\\SULFATOS.xlsx"
ruta_propulsora <- "C:\\Users\\Lisbeth\\Downloads\\DISEÑO EXPERIMENTAL (TRABAJOS)\\SULFATOS.xlsx"
excel_sheets(ruta_propulsora)
[1] "Hoja1"
Propul<-read_excel(ruta_propulsora)
print(head(Propul))
View(Propul)
attach(Propul)
names(Propul)
[1] "Año" "Tipo de agua" "COD. Muestra" "Distrito"
[5] "Provincia" "Aspecto" "Color" "Olor"
[9] "Sabor" "sulfatos (mg/L)"
summary(Propul)
Año Tipo de agua COD. Muestra Distrito
Min. :2012 Length:1718 Length:1718 Length:1718
1st Qu.:2014 Class :character Class :character Class :character
Median :2017 Mode :character Mode :character Mode :character
Mean :2017
3rd Qu.:2021
Max. :2027
Provincia Aspecto Color Olor
Length:1718 Length:1718 Length:1718 Length:1718
Class :character Class :character Class :character Class :character
Mode :character Mode :character Mode :character Mode :character
Sabor sulfatos (mg/L)
Length:1718 Length:1718
Class :character Class :character
Mode :character Mode :character
str(Propul)
tibble [1,718 × 10] (S3: tbl_df/tbl/data.frame)
$ Año : num [1:1718] 2012 2012 2012 2012 2012 ...
$ Tipo de agua : chr [1:1718] "Agua potable" "Agua potable" "Agua potable" "Agua potable" ...
$ COD. Muestra : chr [1:1718] "2903" "2936" "3104" "2977" ...
$ Distrito : chr [1:1718] "Chupa" "0" "Ilave" "Orurillo" ...
$ Provincia : chr [1:1718] "Azangaro" "Carabaya" "Ilave" "Melgar" ...
$ Aspecto : chr [1:1718] "Liquido" "Liquido" "Solido" "Liquido" ...
$ Color : chr [1:1718] "Incoloro" "Incoloro" "Café" "Incoloro" ...
$ Olor : chr [1:1718] "Inodoro" "Inodoro" "Inodoro" "Inodoro" ...
$ Sabor : chr [1:1718] "Insipido" "Insipido" "Insipido" "Insipido" ...
$ sulfatos (mg/L): chr [1:1718] "4" "4" "4" "760" ...
plot(`sulfatos (mg/L)`)
Warning: NAs introduced by coercion

AÑ <- factor(Propul$`Año`)
TIP <- factor(Propul$`Tipo de agua`)
COD<- factor(Propul$`COD. Muestra`)
DIS <-as.vector(Propul$Distrito)
PROV <-as.vector(Propul$Provincia)
ASP <-as.vector(Propul$Aspecto)
COL <-as.vector(Propul$Color)
OLO <-as.vector(Propul$Olor)
SAB <-as.vector(Propul$Sabor)
SULFATES <-as.vector(Propul$`sulfatos (mg/L)`)
SULFATES1 >-as.numeric(SULFATES)
Warning: NAs introduced by coercion
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[17] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[33] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[49] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[65] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[81] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[97] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[113] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[129] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[145] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[161] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[177] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[193] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[209] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[225] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[241] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[257] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[273] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[289] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[305] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[321] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[337] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[353] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[369] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[385] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[401] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[417] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[433] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[449] TRUE TRUE TRUE TRUE TRUE TRUE TRUE NA NA TRUE TRUE NA TRUE TRUE TRUE TRUE
[465] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[481] TRUE TRUE TRUE TRUE TRUE NA TRUE TRUE NA NA TRUE NA TRUE TRUE TRUE NA
[497] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[513] NA TRUE TRUE TRUE TRUE NA NA NA NA TRUE NA TRUE TRUE TRUE TRUE TRUE
[529] NA TRUE TRUE NA TRUE TRUE TRUE NA TRUE NA TRUE TRUE TRUE TRUE TRUE NA
[545] TRUE NA TRUE TRUE NA TRUE NA NA NA TRUE TRUE NA TRUE NA TRUE NA
[561] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE NA TRUE TRUE NA TRUE NA
[577] NA NA TRUE NA TRUE TRUE TRUE NA TRUE TRUE TRUE TRUE TRUE TRUE NA TRUE
[593] TRUE TRUE TRUE TRUE TRUE NA TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[609] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[625] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[641] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[657] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[673] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[689] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[705] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[721] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[737] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[753] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[769] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[785] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[801] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[817] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[833] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[849] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[865] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[881] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[897] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[913] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[929] TRUE TRUE NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[945] NA NA TRUE TRUE TRUE NA NA NA NA NA NA NA NA TRUE NA TRUE
[961] TRUE NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[977] NA TRUE TRUE TRUE TRUE NA NA NA NA NA NA TRUE TRUE NA NA NA
[993] NA NA NA NA NA NA NA NA
[ reached getOption("max.print") -- omitted 718 entries ]
par(mfrow=c(1,1))
boxplot(split(SULFATES1,AÑ),xlab="Año", ylab="Sulfatos")

boxplot(split(SULFATES1,YEAR),xlab="Tipo de agua", ylab="Sulfatos")

boxplot(split(SULFATES1,COD),xlab="COD.Muestra", ylab="Sulfatos")

boxplot(split(SULFATES1,DIS),xlab="Distrito", ylab="Sulfatos")

boxplot(split(SULFATES1,PROV),xlab="Provincia", ylab="Sulfatos")

boxplot(split(SULFATES1,ASP),xlab="Aspecto", ylab="Sulfatos")

boxplot(split(SULFATES1,COL),xlab="Color", ylab="Sulfatos")

boxplot(split(SULFATES1,OLO),xlab="Olor", ylab="Sulfatos")

boxplot(split(SULFATES1,SAB),xlab="Sabor", ylab="Sulfatos")

Ra.aov<-aov(SULFATES1 ~ AÑ+TIP+COD+DIS+PROV+ASP+COL+OLO+SAB)
anova(Ra.aov)
Analysis of Variance Table
Response: SULFATES1
Df Sum Sq Mean Sq F value Pr(>F)
AÑ 9 5584148 620461 27.8160 < 2.2e-16 ***
TIP 86 17795307 206922 9.2766 < 2.2e-16 ***
COD 935 45584760 48754 2.1857 < 2.2e-16 ***
DIS 74 3988277 53896 2.4162 7.306e-09 ***
PROV 12 598659 49888 2.2365 0.009275 **
ASP 3 65074 21691 0.9725 0.405335
COL 9 432157 48017 2.1527 0.023832 *
OLO 7 419673 59953 2.6878 0.009585 **
SAB 3 29946 9982 0.4475 0.719164
Residuals 558 12446708 22306
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
ggplot(Ra.aov, aes(AÑ, TIP, COD, LUG, DIS, PROV, ASP, COL, OLO, SAB, fill=AÑ, TIP, COD, LUG, DIS, PROV, ASP, COL, OLO, SAB, color=PROV, TIP)) + geom_boxplot() + geom_jitter() + theme(legend.position = "none") + geom_point(color = 'red', fill = 'red', size= 5, shape = 18, alpha = 0.5) + geom_jitter(size = 2, color = 'gray', alpha = 0.8) + geom_boxplot() + theme_bw()
Warning: Duplicated aesthetics after name standardisation:

AÑ <- ggplot(Propul, aes(x = AÑ, y = SULFATES1, fill=AÑ)) + geom_boxplot() + theme(legend.position = "none")
TIP <- ggplot(Propul, aes(x = TIP, y = SULFATES1, fill=TIP)) + geom_boxplot() + theme(legend.position = "none")
COD <- ggplot(Propul, aes(x = COD, y = SULFATES1, fill=COD)) + geom_boxplot() + theme(legend.position = "none")
Dist <- ggplot(Propul, aes(x = DIS, y = SULFATES1, fill=DIS)) + geom_boxplot() + theme(legend.position = "none")
Provi <- ggplot(Propul, aes(x = PROV, y = SULFATES1, fill=PROV)) + geom_boxplot() + theme(legend.position = "none")
Aspe <- ggplot(Propul, aes(x = ASP, y = SULFATES1, fill=ASP)) + geom_boxplot() + theme(legend.position = "none")
Colo <- ggplot(Propul, aes(x = COL, y = SULFATES1, fill=COL)) + geom_boxplot() + theme(legend.position = "none")
Olor. <- ggplot(Propul, aes(x = OLO, y = SULFATES1, fill=OLO)) + geom_boxplot() + theme(legend.position = "none")
Sabo <- ggplot(Propul, aes(x = SAB, y = SULFATES1, fill=SAB)) + geom_boxplot() + theme(legend.position = "none")
cv.model(Ra.aov)
[1] 54.87376
LS0tDQp0aXRsZTogIkdSVVBPIFNVTEZBVE9TOiBMSVNCRVRIIEJFTElaQVJJTywgSlVMSVRaQSBDVVRJUEEsIFJVU1NFTEwgUVVJU1BFIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KYGBge3J9DQpnZXR3ZCgpDQpgYGANCg0KYGBge3J9DQpmaWxlLmNob29zZShgc3VsZmF0b3MgKG1nL0wpYCkNCmBgYA0KDQpgYGB7cn0NCnJ1dGFfcHJvcHVsc29yYSA8LSAiQzpcXFVzZXJzXFxMaXNiZXRoXFxEb3dubG9hZHNcXERJU0XDkU8gRVhQRVJJTUVOVEFMIChUUkFCQUpPUylcXFNVTEZBVE9TLnhsc3giDQpgYGANCg0KYGBge3J9DQpleGNlbF9zaGVldHMocnV0YV9wcm9wdWxzb3JhKQ0KYGBgDQoNCmBgYHtyfQ0KUHJvcHVsPC1yZWFkX2V4Y2VsKHJ1dGFfcHJvcHVsc29yYSkNCmBgYA0KDQpgYGB7cn0NCnByaW50KGhlYWQoUHJvcHVsKSkNCmBgYA0KDQpgYGB7cn0NClZpZXcoUHJvcHVsKQ0KYGBgDQoNCmBgYHtyfQ0KYXR0YWNoKFByb3B1bCkNCmBgYA0KDQpgYGB7cn0NCm5hbWVzKFByb3B1bCkNCmBgYA0KDQpgYGB7cn0NCnN1bW1hcnkoUHJvcHVsKQ0KYGBgDQoNCmBgYHtyfQ0Kc3RyKFByb3B1bCkNCmBgYA0KDQpgYGB7cn0NCnBsb3QoYHN1bGZhdG9zIChtZy9MKWApDQpgYGANCg0KYGBge3J9DQpBw5EgPC0gZmFjdG9yKFByb3B1bCRgQcOxb2ApDQpgYGANCg0KYGBge3J9DQpUSVAgPC0gZmFjdG9yKFByb3B1bCRgVGlwbyBkZSBhZ3VhYCkNCmBgYA0KDQpgYGB7cn0NCkNPRDwtIGZhY3RvcihQcm9wdWwkYENPRC4gTXVlc3RyYWApDQpgYGANCg0KYGBge3J9DQpESVMgPC1hcy52ZWN0b3IoUHJvcHVsJERpc3RyaXRvKQ0KYGBgDQoNCmBgYHtyfQ0KUFJPViA8LWFzLnZlY3RvcihQcm9wdWwkUHJvdmluY2lhKQ0KYGBgDQoNCmBgYHtyfQ0KQVNQIDwtYXMudmVjdG9yKFByb3B1bCRBc3BlY3RvKQ0KYGBgDQoNCmBgYHtyfQ0KQ09MIDwtYXMudmVjdG9yKFByb3B1bCRDb2xvcikNCmBgYA0KDQpgYGB7cn0NCk9MTyA8LWFzLnZlY3RvcihQcm9wdWwkT2xvcikNCmBgYA0KDQpgYGB7cn0NClNBQiA8LWFzLnZlY3RvcihQcm9wdWwkU2Fib3IpDQpgYGANCg0KYGBge3J9DQpTVUxGQVRFUyA8LWFzLnZlY3RvcihQcm9wdWwkYHN1bGZhdG9zIChtZy9MKWApDQpgYGANCg0KYGBge3J9DQpTVUxGQVRFUzEgPi1hcy5udW1lcmljKFNVTEZBVEVTKQ0KYGBgDQoNCmBgYHtyfQ0KcGFyKG1mcm93PWMoMSwxKSkNCmBgYA0KDQpgYGB7cn0NCmJveHBsb3Qoc3BsaXQoU1VMRkFURVMxLEHDkSkseGxhYj0iQcOxbyIsIHlsYWI9IlN1bGZhdG9zIikgDQpgYGANCg0KYGBge3J9DQpib3hwbG90KHNwbGl0KFNVTEZBVEVTMSxZRUFSKSx4bGFiPSJUaXBvIGRlIGFndWEiLCB5bGFiPSJTdWxmYXRvcyIpDQpgYGANCg0KYGBge3J9DQpib3hwbG90KHNwbGl0KFNVTEZBVEVTMSxDT0QpLHhsYWI9IkNPRC5NdWVzdHJhIiwgeWxhYj0iU3VsZmF0b3MiKSANCmBgYA0KDQpgYGB7cn0NCmJveHBsb3Qoc3BsaXQoU1VMRkFURVMxLERJUykseGxhYj0iRGlzdHJpdG8iLCB5bGFiPSJTdWxmYXRvcyIpIA0KYGBgDQoNCmBgYHtyfQ0KYm94cGxvdChzcGxpdChTVUxGQVRFUzEsUFJPVikseGxhYj0iUHJvdmluY2lhIiwgeWxhYj0iU3VsZmF0b3MiKQ0KYGBgDQoNCmBgYHtyfQ0KYm94cGxvdChzcGxpdChTVUxGQVRFUzEsQVNQKSx4bGFiPSJBc3BlY3RvIiwgeWxhYj0iU3VsZmF0b3MiKQ0KYGBgDQoNCmBgYHtyfQ0KYm94cGxvdChzcGxpdChTVUxGQVRFUzEsQ09MKSx4bGFiPSJDb2xvciIsIHlsYWI9IlN1bGZhdG9zIikNCmBgYA0KDQpgYGB7cn0NCmJveHBsb3Qoc3BsaXQoU1VMRkFURVMxLE9MTykseGxhYj0iT2xvciIsIHlsYWI9IlN1bGZhdG9zIikNCmBgYA0KDQpgYGB7cn0NCmJveHBsb3Qoc3BsaXQoU1VMRkFURVMxLFNBQikseGxhYj0iU2Fib3IiLCB5bGFiPSJTdWxmYXRvcyIpDQpgYGANCg0KYGBge3J9DQpSYS5hb3Y8LWFvdihTVUxGQVRFUzEgfiBBw5ErVElQK0NPRCtESVMrUFJPVitBU1ArQ09MK09MTytTQUIpDQpgYGANCg0KYGBge3J9DQphbm92YShSYS5hb3YpDQpgYGANCg0KYGBge3J9DQpnZ3Bsb3QoUmEuYW92LCBhZXMoQcORLCBUSVAsIENPRCwgTFVHLCBESVMsIFBST1YsIEFTUCwgQ09MLCBPTE8sIFNBQiwgZmlsbD1Bw5EsIFRJUCwgQ09ELCBMVUcsIERJUywgUFJPViwgQVNQLCBDT0wsIE9MTywgU0FCLCBjb2xvcj1QUk9WLCBUSVApKSArIGdlb21fYm94cGxvdCgpICsgZ2VvbV9qaXR0ZXIoKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgKyBnZW9tX3BvaW50KGNvbG9yID0gJ3JlZCcsIGZpbGwgPSAncmVkJywgc2l6ZT0gNSwgc2hhcGUgPSAxOCwgYWxwaGEgPSAwLjUpICsgZ2VvbV9qaXR0ZXIoc2l6ZSA9IDIsIGNvbG9yID0gJ2dyYXknLCBhbHBoYSA9IDAuOCkgKyBnZW9tX2JveHBsb3QoKSArIHRoZW1lX2J3KCkNCmBgYA0KDQpgYGB7cn0NCkHDsW8gPC0gZ2dwbG90KFByb3B1bCwgYWVzKHggPSBBw5EsIHkgPSBTVUxGQVRFUzEsIGZpbGw9QcORKSkgKyBnZW9tX2JveHBsb3QoKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikNCmBgYA0KDQpgYGB7cn0NClRpcG8gPC0gZ2dwbG90KFByb3B1bCwgYWVzKHggPSBUSVAsIHkgPSBTVUxGQVRFUzEsIGZpbGw9VElQKSkgKyBnZW9tX2JveHBsb3QoKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikNCmBgYA0KDQpgYGB7cn0NCkNPRC4gPC0gZ2dwbG90KFByb3B1bCwgYWVzKHggPSBDT0QsIHkgPSBTVUxGQVRFUzEsIGZpbGw9Q09EKSkgKyBnZW9tX2JveHBsb3QoKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikNCmBgYA0KDQpgYGB7cn0NCkRpc3QgPC0gZ2dwbG90KFByb3B1bCwgYWVzKHggPSBESVMsIHkgPSBTVUxGQVRFUzEsIGZpbGw9RElTKSkgKyBnZW9tX2JveHBsb3QoKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikNCmBgYA0KDQpgYGB7cn0NClByb3ZpIDwtIGdncGxvdChQcm9wdWwsIGFlcyh4ID0gUFJPViwgeSA9IFNVTEZBVEVTMSwgZmlsbD1QUk9WKSkgKyBnZW9tX2JveHBsb3QoKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikNCmBgYA0KDQpgYGB7cn0NCkFzcGUgPC0gZ2dwbG90KFByb3B1bCwgYWVzKHggPSBBU1AsIHkgPSBTVUxGQVRFUzEsIGZpbGw9QVNQKSkgKyBnZW9tX2JveHBsb3QoKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikNCmBgYA0KDQpgYGB7cn0NCkNvbG8gPC0gZ2dwbG90KFByb3B1bCwgYWVzKHggPSBDT0wsIHkgPSBTVUxGQVRFUzEsIGZpbGw9Q09MKSkgKyBnZW9tX2JveHBsb3QoKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikNCmBgYA0KDQpgYGB7cn0NCk9sb3IuIDwtIGdncGxvdChQcm9wdWwsIGFlcyh4ID0gT0xPLCB5ID0gU1VMRkFURVMxLCBmaWxsPU9MTykpICsgZ2VvbV9ib3hwbG90KCkgKyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpDQpgYGANCg0KYGBge3J9DQpTYWJvIDwtIGdncGxvdChQcm9wdWwsIGFlcyh4ID0gU0FCLCB5ID0gU1VMRkFURVMxLCBmaWxsPVNBQikpICsgZ2VvbV9ib3hwbG90KCkgKyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpDQpgYGANCg0KDQpgYGB7cn0NCmN2Lm1vZGVsKFJhLmFvdikNCmBgYA0KDQoNCg0K