library(readr)
library(tidyverse)
RetornosDivisas <- read.csv(file="tablareturn_csv.csv", sep=";")
Divisas<-read.csv(file="tabla_csv.csv", sep=";")
Toboxplot <- read.csv(file="ToBoxPlots.csv", sep=";")
RetornoPromedio <- read.csv(file="RetornoProm.csv", sep=";")

Tabla de retornos diarios por Divisa

RetornosDivisas

Resumen de retornos diarios por divisas (%)

summary(RetornosDivisas*100)
  PESO_CHILENO         PESO_COLOM           PESO_MEX             SOL                 REAL          
 Min.   :-3.533000   Min.   :-6.177000   Min.   :-6.32500   Min.   :-2.142000   Min.   :-8.005000  
 1st Qu.:-0.341000   1st Qu.:-0.321250   1st Qu.:-0.39500   1st Qu.:-0.098000   1st Qu.:-0.501250  
 Median : 0.000000   Median : 0.000000   Median :-0.01700   Median : 0.000000   Median : 0.000000  
 Mean   : 0.003676   Mean   :-0.004942   Mean   : 0.01332   Mean   :-0.009172   Mean   : 0.006542  
 3rd Qu.: 0.323250   3rd Qu.: 0.285250   3rd Qu.: 0.37600   3rd Qu.: 0.065000   3rd Qu.: 0.454000  
 Max.   : 4.737000   Max.   : 5.260000   Max.   : 8.20000   Max.   : 2.296000   Max.   : 7.382000  

KERNEL DE DENSIDAD DE LAS 5 DIVISAS

ggplot() + 
  geom_density(data = Toboxplot, mapping = aes(x=Retornos, y=..density.., color = Divisas))+
  scale_color_manual(values = c("blue","red","black","magenta","orange"))

LOS HISTOGRAMAS DE DENSIDAD DE ABAJO SON DE 30 INTERVALOS DE CLASE

Kernel de Densidad del PESO CHILENO

Dchil <- grep("PESO_CHILENO", Toboxplot$Divisas)
DivCHIL <- Toboxplot[Dchil,]
ggplot(data = DivCHIL) + 
  geom_density(mapping = aes(x=Retornos, y=..density..), color="green", size=2)

Histograma de Densidad del PESO CHILENO

Dchil <- grep("PESO_CHILENO", Toboxplot$Divisas)
DivCHIL <- Toboxplot[Dchil,]
ggplot(data = DivCHIL) + 
  geom_histogram(mapping = aes(x=Retornos, y=..density..), color="black", fill="green", bins=30)

Kernel de Densidad del PESO COLOMBIANO

Dcol <- grep("PESO_COLOM", Toboxplot$Divisas)
DivCOL <- Toboxplot[Dcol,]
ggplot(data = DivCOL) + 
  geom_density(mapping = aes(x=Retornos, y=..density..), color="red", size=2)

Histograma de Densidad del PESO COLOMBIANO

Dcol <- grep("PESO_COLOM", Toboxplot$Divisas)
DivCOL <- Toboxplot[Dcol,]
ggplot(data = DivCOL) + 
  geom_histogram(mapping = aes(x=Retornos, y=..density..), color="black", fill="red", bins=30)

Kernel de Densidad del PESO MEXICANO

Dmex <- grep("PESO_MEX", Toboxplot$Divisas)
DivMEX <- Toboxplot[Dmex,]
ggplot(data = DivMEX) + 
  geom_density(mapping = aes(x=Retornos, y=..density..), color="yellow", size=2)

Histograma de Densidad del PESO MEXICANO

Dmex <- grep("PESO_MEX", Toboxplot$Divisas)
DivMEX <- Toboxplot[Dmex,]
ggplot(data = DivMEX) + 
  geom_histogram(mapping = aes(x=Retornos, y=..density..), color="black", fill="yellow", bins=30)

Kernel de Densidad del SOL

Dsol <- grep("SOL", Toboxplot$Divisas)
DivSOL <- Toboxplot[Dsol,]
ggplot(data = DivSOL) + 
  geom_density(mapping = aes(x=Retornos, y=..density..), color="orange", size=2)

Histograma de Densidad del SOL

Dsol <- grep("SOL", Toboxplot$Divisas)
DivSOL <- Toboxplot[Dsol,]
ggplot(data = DivSOL) + 
  geom_histogram(mapping = aes(x=Retornos, y=..density..), color="black", fill="orange", bins=30)

Kernel de Densidad del REAL

Dreal <- grep("REAL", Toboxplot$Divisas)
DivREAL <- Toboxplot[Dreal,]
ggplot(data = DivREAL) + 
  geom_density(mapping = aes(x=Retornos, y=..density..), color="magenta", size=2)

Histograma de Densidad del REAL

Dreal <- grep("REAL", Toboxplot$Divisas)
DivREAL <- Toboxplot[Dreal,]
ggplot(data = DivREAL) + 
  geom_histogram(mapping = aes(x=Retornos, y=..density..), color="black", fill="magenta", bins=30)

Boxplots de las 5 divisas

ggplot(data = Toboxplot) + 
  geom_boxplot(mapping = aes(x = Divisas, y = Retornos), fill="beige")

Boxplots del promedio de las 5 divisas

ggplot(data = RetornoPromedio) + 
  geom_boxplot(mapping = aes(x= "",y=RetorProm), fill="beige")

QQPlot del PESO CHILENO

ggplot(data=DivCHIL) +
  geom_qq(mapping=aes(sample=Retornos),size=2, col="green", shape=1)+
  geom_qq_line(mapping = aes(sample=Retornos))+
  scale_x_continuous(name="Cuantiles teoricos") +
  scale_y_continuous(name="Cuantiles de la muestra")+
  theme_bw()

QQPlot del PESO COLOMBIANO

ggplot(data=DivCOL) +
  geom_qq(mapping=aes(sample=Retornos),size=2, col="red", shape=1)+
  geom_qq_line(mapping = aes(sample=Retornos))+
  scale_x_continuous(name="Cuantiles teoricos") +
  scale_y_continuous(name="Cuantiles de la muestra")+
  theme_bw()

QQPlot del PESO MEXICANO

ggplot(data=DivMEX) +
  geom_qq(mapping=aes(sample=Retornos),size=2, col="yellow", shape=1)+
  geom_qq_line(mapping = aes(sample=Retornos))+
  scale_x_continuous(name="Cuantiles teoricos") +
  scale_y_continuous(name="Cuantiles de la muestra")+
  theme_bw()

QQPlot del SOL

ggplot(data=DivSOL) +
  geom_qq(mapping=aes(sample=Retornos),size=2, col="orange", shape=1)+
  geom_qq_line(mapping = aes(sample=Retornos))+
  scale_x_continuous(name="Cuantiles teoricos") +
  scale_y_continuous(name="Cuantiles de la muestra")+
  theme_bw()

QQPlot del REAL

ggplot(data=DivREAL) +
  geom_qq(mapping=aes(sample=Retornos),size=2, col="magenta", shape=1)+
  geom_qq_line(mapping = aes(sample=Retornos))+
  scale_x_continuous(name="Cuantiles teoricos") +
  scale_y_continuous(name="Cuantiles de la muestra")+
  theme_bw()

QQPlot del promedio de las 5 monedas

ggplot(data=RetornoPromedio) +
  geom_qq(mapping=aes(sample=RetorProm),size=2, col="blue", shape=1)+
  geom_qq_line(mapping = aes(sample=RetorProm))+
  scale_x_continuous(name="Cuantiles teoricos") +
  scale_y_continuous(name="Cuantiles de la muestra")+
  theme_bw()

LOS HISTOGRAMAS DE ABAJO SON DE 15 INTERVALOS DE CLASE (DENSIDAD Y CANTIDAD)

Histograma de Densidad del PESO CHILENO

Dchil <- grep("PESO_CHILENO", Toboxplot$Divisas)
DivCHIL <- Toboxplot[Dchil,]
ggplot(data = DivCHIL) + 
  geom_histogram(mapping = aes(x=Retornos, y=..density..), color="black", fill="green", bins=15)

Histograma de Cantidad o Frecuencia del PESO CHILENO

Dchil <- grep("PESO_CHILENO", Toboxplot$Divisas)
DivCHIL <- Toboxplot[Dchil,]
ggplot(data = DivCHIL) + 
  geom_histogram(mapping = aes(x=Retornos), color="black", fill="green", bins=15)

Histograma de Densidad del PESO COLOMBIANO

Dcol <- grep("PESO_COLOM", Toboxplot$Divisas)
DivCOL <- Toboxplot[Dcol,]
ggplot(data = DivCOL) + 
  geom_histogram(mapping = aes(x=Retornos, y=..density..), color="black", fill="red", bins=15)

Histograma de Cantidad o Frecuencia del PESO COLOMBIANO

Dcol <- grep("PESO_COLOM", Toboxplot$Divisas)
DivCOL <- Toboxplot[Dcol,]
ggplot(data = DivCOL) + 
  geom_histogram(mapping = aes(x=Retornos), color="black", fill="red", bins=15)

Histograma de Densidad del PESO MEXICANO

Dmex <- grep("PESO_MEX", Toboxplot$Divisas)
DivMEX <- Toboxplot[Dmex,]
ggplot(data = DivMEX) + 
  geom_histogram(mapping = aes(x=Retornos, y=..density..), color="black", fill="yellow", bins=15)

Histograma de Cantidad o Frecuencia del PESO MEXICANO

Dmex <- grep("PESO_MEX", Toboxplot$Divisas)
DivMEX <- Toboxplot[Dmex,]
ggplot(data = DivMEX) + 
  geom_histogram(mapping = aes(x=Retornos), color="black", fill="yellow", bins=15)

Histograma de Densidad del SOL

Dsol <- grep("SOL", Toboxplot$Divisas)
DivSOL <- Toboxplot[Dsol,]
ggplot(data = DivSOL) + 
  geom_histogram(mapping = aes(x=Retornos, y=..density..), color="black", fill="orange", bins=15)

Histograma de Cantidad o Frecuencia del SOL

Dsol <- grep("SOL", Toboxplot$Divisas)
DivSOL <- Toboxplot[Dsol,]
ggplot(data = DivSOL) + 
  geom_histogram(mapping = aes(x=Retornos), color="black", fill="orange", bins=15)

Histograma de Densidad del REAL

Dreal <- grep("REAL", Toboxplot$Divisas)
DivREAL <- Toboxplot[Dreal,]
ggplot(data = DivREAL) + 
  geom_histogram(mapping = aes(x=Retornos, y=..density..), color="black", fill="magenta", bins=15)

Histograma de Cantidad o Frecuencia del REAL

Dreal <- grep("REAL", Toboxplot$Divisas)
DivREAL <- Toboxplot[Dreal,]
ggplot(data = DivREAL) + 
  geom_histogram(mapping = aes(x=Retornos), color="black", fill="magenta", bins=15)

Distribucion empirica de todas las divisas

ggplot(Toboxplot, aes(x = Retornos)) +
  stat_ecdf(aes(color = Divisas,linetype = Divisas), 
              geom = "step", size = 1.5) +
  scale_color_manual(values = c("green","red","yellow","orange","magenta"))+
  labs(y = "f(Retorno)")

Distribucion empirica del PESO CHILENO

ggplot(DivCHIL, aes(x = Retornos)) +
  stat_ecdf(aes(color = Divisas,linetype = Divisas), 
              geom = "step", size = 2) +
  scale_color_manual(values = c("green"))+
  labs(y = "f(Retorno)")

Distribucion empirica del PESO COLOMBIANO

ggplot(DivCOL, aes(x = Retornos)) +
  stat_ecdf(aes(color = Divisas,linetype = Divisas), 
              geom = "step", size = 2) +
  scale_color_manual(values = c("red"))+
  labs(y = "f(Retorno)")

Distribucion empirica del PESO MEXICANO

ggplot(DivMEX, aes(x = Retornos)) +
  stat_ecdf(aes(color = Divisas,linetype = Divisas), 
              geom = "step", size = 2) +
  scale_color_manual(values = c("yellow"))+
  labs(y = "f(Retorno)")

Distribucion empirica del SOL

ggplot(DivSOL, aes(x = Retornos)) +
  stat_ecdf(aes(color = Divisas,linetype = Divisas), 
              geom = "step", size = 2) +
  scale_color_manual(values = c("orange"))+
  labs(y = "f(Retorno)")

Distribucion empirica del REAL

ggplot(DivREAL, aes(x = Retornos)) +
  stat_ecdf(aes(color = Divisas,linetype = Divisas), 
              geom = "step", size = 2) +
  scale_color_manual(values = c("magenta"))+
  labs(y = "f(Retorno)")

LS0tDQp0aXRsZTogIkdyYWZpY29zIGVzdGFkw61zdGljb3MgZGUgbG9zIHJldG9ybm9zIGRlIDUgZGl2aXNhcyINCm91dHB1dDoNCiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdA0KICBwZGZfZG9jdW1lbnQ6IGRlZmF1bHQNCi0tLQ0KDQpgYGB7cn0NCmxpYnJhcnkocmVhZHIpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNClJldG9ybm9zRGl2aXNhcyA8LSByZWFkLmNzdihmaWxlPSJ0YWJsYXJldHVybl9jc3YuY3N2Iiwgc2VwPSI7IikNCkRpdmlzYXM8LXJlYWQuY3N2KGZpbGU9InRhYmxhX2Nzdi5jc3YiLCBzZXA9IjsiKQ0KVG9ib3hwbG90IDwtIHJlYWQuY3N2KGZpbGU9IlRvQm94UGxvdHMuY3N2Iiwgc2VwPSI7IikNClJldG9ybm9Qcm9tZWRpbyA8LSByZWFkLmNzdihmaWxlPSJSZXRvcm5vUHJvbS5jc3YiLCBzZXA9IjsiKQ0KYGBgDQoNCiMgVGFibGEgZGUgcmV0b3Jub3MgZGlhcmlvcyBwb3IgRGl2aXNhDQoNCmBgYHtyfQ0KUmV0b3Jub3NEaXZpc2FzDQpgYGANCg0KIyBSZXN1bWVuIGRlIHJldG9ybm9zIGRpYXJpb3MgcG9yIGRpdmlzYXMgKCUpDQoNCmBgYHtyfQ0Kc3VtbWFyeShSZXRvcm5vc0RpdmlzYXMqMTAwKQ0KYGBgDQoNCg0KIyBLRVJORUwgREUgREVOU0lEQUQgREUgTEFTIDUgRElWSVNBUw0KDQpgYGB7cn0NCmdncGxvdCgpICsgDQogIGdlb21fZGVuc2l0eShkYXRhID0gVG9ib3hwbG90LCBtYXBwaW5nID0gYWVzKHg9UmV0b3Jub3MsIHk9Li5kZW5zaXR5Li4sIGNvbG9yID0gRGl2aXNhcykpKw0KICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiYmx1ZSIsInJlZCIsImJsYWNrIiwibWFnZW50YSIsIm9yYW5nZSIpKQ0KYGBgDQoNCiMjIExPUyBISVNUT0dSQU1BUyBERSBERU5TSURBRCBERSBBQkFKTyBTT04gREUgMzAgSU5URVJWQUxPUyBERSBDTEFTRQ0KDQojIEtlcm5lbCBkZSBEZW5zaWRhZCBkZWwgUEVTTyBDSElMRU5PDQoNCmBgYHtyfQ0KRGNoaWwgPC0gZ3JlcCgiUEVTT19DSElMRU5PIiwgVG9ib3hwbG90JERpdmlzYXMpDQpEaXZDSElMIDwtIFRvYm94cGxvdFtEY2hpbCxdDQpnZ3Bsb3QoZGF0YSA9IERpdkNISUwpICsgDQogIGdlb21fZGVuc2l0eShtYXBwaW5nID0gYWVzKHg9UmV0b3Jub3MsIHk9Li5kZW5zaXR5Li4pLCBjb2xvcj0iZ3JlZW4iLCBzaXplPTIpDQpgYGANCg0KIyBIaXN0b2dyYW1hIGRlIERlbnNpZGFkIGRlbCBQRVNPIENISUxFTk8NCg0KYGBge3J9DQpEY2hpbCA8LSBncmVwKCJQRVNPX0NISUxFTk8iLCBUb2JveHBsb3QkRGl2aXNhcykNCkRpdkNISUwgPC0gVG9ib3hwbG90W0RjaGlsLF0NCmdncGxvdChkYXRhID0gRGl2Q0hJTCkgKyANCiAgZ2VvbV9oaXN0b2dyYW0obWFwcGluZyA9IGFlcyh4PVJldG9ybm9zLCB5PS4uZGVuc2l0eS4uKSwgY29sb3I9ImJsYWNrIiwgZmlsbD0iZ3JlZW4iLCBiaW5zPTMwKQ0KYGBgDQoNCiMgS2VybmVsIGRlIERlbnNpZGFkIGRlbCBQRVNPIENPTE9NQklBTk8NCg0KYGBge3J9DQpEY29sIDwtIGdyZXAoIlBFU09fQ09MT00iLCBUb2JveHBsb3QkRGl2aXNhcykNCkRpdkNPTCA8LSBUb2JveHBsb3RbRGNvbCxdDQpnZ3Bsb3QoZGF0YSA9IERpdkNPTCkgKyANCiAgZ2VvbV9kZW5zaXR5KG1hcHBpbmcgPSBhZXMoeD1SZXRvcm5vcywgeT0uLmRlbnNpdHkuLiksIGNvbG9yPSJyZWQiLCBzaXplPTIpDQpgYGANCg0KIyBIaXN0b2dyYW1hIGRlIERlbnNpZGFkIGRlbCBQRVNPIENPTE9NQklBTk8NCg0KYGBge3J9DQpEY29sIDwtIGdyZXAoIlBFU09fQ09MT00iLCBUb2JveHBsb3QkRGl2aXNhcykNCkRpdkNPTCA8LSBUb2JveHBsb3RbRGNvbCxdDQpnZ3Bsb3QoZGF0YSA9IERpdkNPTCkgKyANCiAgZ2VvbV9oaXN0b2dyYW0obWFwcGluZyA9IGFlcyh4PVJldG9ybm9zLCB5PS4uZGVuc2l0eS4uKSwgY29sb3I9ImJsYWNrIiwgZmlsbD0icmVkIiwgYmlucz0zMCkNCmBgYA0KDQojIEtlcm5lbCBkZSBEZW5zaWRhZCBkZWwgUEVTTyBNRVhJQ0FOTw0KDQpgYGB7cn0NCkRtZXggPC0gZ3JlcCgiUEVTT19NRVgiLCBUb2JveHBsb3QkRGl2aXNhcykNCkRpdk1FWCA8LSBUb2JveHBsb3RbRG1leCxdDQpnZ3Bsb3QoZGF0YSA9IERpdk1FWCkgKyANCiAgZ2VvbV9kZW5zaXR5KG1hcHBpbmcgPSBhZXMoeD1SZXRvcm5vcywgeT0uLmRlbnNpdHkuLiksIGNvbG9yPSJ5ZWxsb3ciLCBzaXplPTIpDQpgYGANCg0KIyBIaXN0b2dyYW1hIGRlIERlbnNpZGFkIGRlbCBQRVNPIE1FWElDQU5PDQoNCmBgYHtyfQ0KRG1leCA8LSBncmVwKCJQRVNPX01FWCIsIFRvYm94cGxvdCREaXZpc2FzKQ0KRGl2TUVYIDwtIFRvYm94cGxvdFtEbWV4LF0NCmdncGxvdChkYXRhID0gRGl2TUVYKSArIA0KICBnZW9tX2hpc3RvZ3JhbShtYXBwaW5nID0gYWVzKHg9UmV0b3Jub3MsIHk9Li5kZW5zaXR5Li4pLCBjb2xvcj0iYmxhY2siLCBmaWxsPSJ5ZWxsb3ciLCBiaW5zPTMwKQ0KYGBgDQoNCiMgS2VybmVsIGRlIERlbnNpZGFkIGRlbCBTT0wNCg0KYGBge3J9DQpEc29sIDwtIGdyZXAoIlNPTCIsIFRvYm94cGxvdCREaXZpc2FzKQ0KRGl2U09MIDwtIFRvYm94cGxvdFtEc29sLF0NCmdncGxvdChkYXRhID0gRGl2U09MKSArIA0KICBnZW9tX2RlbnNpdHkobWFwcGluZyA9IGFlcyh4PVJldG9ybm9zLCB5PS4uZGVuc2l0eS4uKSwgY29sb3I9Im9yYW5nZSIsIHNpemU9MikNCmBgYA0KDQojIEhpc3RvZ3JhbWEgZGUgRGVuc2lkYWQgZGVsIFNPTA0KDQpgYGB7cn0NCkRzb2wgPC0gZ3JlcCgiU09MIiwgVG9ib3hwbG90JERpdmlzYXMpDQpEaXZTT0wgPC0gVG9ib3hwbG90W0Rzb2wsXQ0KZ2dwbG90KGRhdGEgPSBEaXZTT0wpICsgDQogIGdlb21faGlzdG9ncmFtKG1hcHBpbmcgPSBhZXMoeD1SZXRvcm5vcywgeT0uLmRlbnNpdHkuLiksIGNvbG9yPSJibGFjayIsIGZpbGw9Im9yYW5nZSIsIGJpbnM9MzApDQpgYGANCg0KIyBLZXJuZWwgZGUgRGVuc2lkYWQgZGVsIFJFQUwNCg0KYGBge3J9DQpEcmVhbCA8LSBncmVwKCJSRUFMIiwgVG9ib3hwbG90JERpdmlzYXMpDQpEaXZSRUFMIDwtIFRvYm94cGxvdFtEcmVhbCxdDQpnZ3Bsb3QoZGF0YSA9IERpdlJFQUwpICsgDQogIGdlb21fZGVuc2l0eShtYXBwaW5nID0gYWVzKHg9UmV0b3Jub3MsIHk9Li5kZW5zaXR5Li4pLCBjb2xvcj0ibWFnZW50YSIsIHNpemU9MikNCmBgYA0KDQojIEhpc3RvZ3JhbWEgZGUgRGVuc2lkYWQgZGVsIFJFQUwNCg0KYGBge3J9DQpEcmVhbCA8LSBncmVwKCJSRUFMIiwgVG9ib3hwbG90JERpdmlzYXMpDQpEaXZSRUFMIDwtIFRvYm94cGxvdFtEcmVhbCxdDQpnZ3Bsb3QoZGF0YSA9IERpdlJFQUwpICsgDQogIGdlb21faGlzdG9ncmFtKG1hcHBpbmcgPSBhZXMoeD1SZXRvcm5vcywgeT0uLmRlbnNpdHkuLiksIGNvbG9yPSJibGFjayIsIGZpbGw9Im1hZ2VudGEiLCBiaW5zPTMwKQ0KYGBgDQoNCiMgQm94cGxvdHMgZGUgbGFzIDUgZGl2aXNhcw0KDQpgYGB7cn0NCmdncGxvdChkYXRhID0gVG9ib3hwbG90KSArIA0KICBnZW9tX2JveHBsb3QobWFwcGluZyA9IGFlcyh4ID0gRGl2aXNhcywgeSA9IFJldG9ybm9zKSwgZmlsbD0iYmVpZ2UiKQ0KYGBgDQoNCiMgQm94cGxvdHMgZGVsIHByb21lZGlvIGRlIGxhcyA1IGRpdmlzYXMNCg0KYGBge3J9DQpnZ3Bsb3QoZGF0YSA9IFJldG9ybm9Qcm9tZWRpbykgKyANCiAgZ2VvbV9ib3hwbG90KG1hcHBpbmcgPSBhZXMoeD0gIiIseT1SZXRvclByb20pLCBmaWxsPSJiZWlnZSIpDQpgYGANCg0KIyBRUVBsb3QgZGVsIFBFU08gQ0hJTEVOTw0KDQpgYGB7cn0NCmdncGxvdChkYXRhPURpdkNISUwpICsNCiAgZ2VvbV9xcShtYXBwaW5nPWFlcyhzYW1wbGU9UmV0b3Jub3MpLHNpemU9MiwgY29sPSJncmVlbiIsIHNoYXBlPTEpKw0KICBnZW9tX3FxX2xpbmUobWFwcGluZyA9IGFlcyhzYW1wbGU9UmV0b3Jub3MpKSsNCiAgc2NhbGVfeF9jb250aW51b3VzKG5hbWU9IkN1YW50aWxlcyB0ZW9yaWNvcyIpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKG5hbWU9IkN1YW50aWxlcyBkZSBsYSBtdWVzdHJhIikrDQogIHRoZW1lX2J3KCkNCmBgYA0KDQojIFFRUGxvdCBkZWwgUEVTTyBDT0xPTUJJQU5PDQoNCmBgYHtyfQ0KZ2dwbG90KGRhdGE9RGl2Q09MKSArDQogIGdlb21fcXEobWFwcGluZz1hZXMoc2FtcGxlPVJldG9ybm9zKSxzaXplPTIsIGNvbD0icmVkIiwgc2hhcGU9MSkrDQogIGdlb21fcXFfbGluZShtYXBwaW5nID0gYWVzKHNhbXBsZT1SZXRvcm5vcykpKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobmFtZT0iQ3VhbnRpbGVzIHRlb3JpY29zIikgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobmFtZT0iQ3VhbnRpbGVzIGRlIGxhIG11ZXN0cmEiKSsNCiAgdGhlbWVfYncoKQ0KYGBgDQoNCiMgUVFQbG90IGRlbCBQRVNPIE1FWElDQU5PDQoNCmBgYHtyfQ0KZ2dwbG90KGRhdGE9RGl2TUVYKSArDQogIGdlb21fcXEobWFwcGluZz1hZXMoc2FtcGxlPVJldG9ybm9zKSxzaXplPTIsIGNvbD0ieWVsbG93Iiwgc2hhcGU9MSkrDQogIGdlb21fcXFfbGluZShtYXBwaW5nID0gYWVzKHNhbXBsZT1SZXRvcm5vcykpKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobmFtZT0iQ3VhbnRpbGVzIHRlb3JpY29zIikgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobmFtZT0iQ3VhbnRpbGVzIGRlIGxhIG11ZXN0cmEiKSsNCiAgdGhlbWVfYncoKQ0KYGBgDQoNCiMgUVFQbG90IGRlbCBTT0wNCg0KYGBge3J9DQpnZ3Bsb3QoZGF0YT1EaXZTT0wpICsNCiAgZ2VvbV9xcShtYXBwaW5nPWFlcyhzYW1wbGU9UmV0b3Jub3MpLHNpemU9MiwgY29sPSJvcmFuZ2UiLCBzaGFwZT0xKSsNCiAgZ2VvbV9xcV9saW5lKG1hcHBpbmcgPSBhZXMoc2FtcGxlPVJldG9ybm9zKSkrDQogIHNjYWxlX3hfY29udGludW91cyhuYW1lPSJDdWFudGlsZXMgdGVvcmljb3MiKSArDQogIHNjYWxlX3lfY29udGludW91cyhuYW1lPSJDdWFudGlsZXMgZGUgbGEgbXVlc3RyYSIpKw0KICB0aGVtZV9idygpDQpgYGANCg0KIyBRUVBsb3QgZGVsIFJFQUwNCg0KYGBge3J9DQpnZ3Bsb3QoZGF0YT1EaXZSRUFMKSArDQogIGdlb21fcXEobWFwcGluZz1hZXMoc2FtcGxlPVJldG9ybm9zKSxzaXplPTIsIGNvbD0ibWFnZW50YSIsIHNoYXBlPTEpKw0KICBnZW9tX3FxX2xpbmUobWFwcGluZyA9IGFlcyhzYW1wbGU9UmV0b3Jub3MpKSsNCiAgc2NhbGVfeF9jb250aW51b3VzKG5hbWU9IkN1YW50aWxlcyB0ZW9yaWNvcyIpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKG5hbWU9IkN1YW50aWxlcyBkZSBsYSBtdWVzdHJhIikrDQogIHRoZW1lX2J3KCkNCmBgYA0KDQojIFFRUGxvdCBkZWwgcHJvbWVkaW8gZGUgbGFzIDUgbW9uZWRhcw0KDQpgYGB7cn0NCmdncGxvdChkYXRhPVJldG9ybm9Qcm9tZWRpbykgKw0KICBnZW9tX3FxKG1hcHBpbmc9YWVzKHNhbXBsZT1SZXRvclByb20pLHNpemU9MiwgY29sPSJibHVlIiwgc2hhcGU9MSkrDQogIGdlb21fcXFfbGluZShtYXBwaW5nID0gYWVzKHNhbXBsZT1SZXRvclByb20pKSsNCiAgc2NhbGVfeF9jb250aW51b3VzKG5hbWU9IkN1YW50aWxlcyB0ZW9yaWNvcyIpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKG5hbWU9IkN1YW50aWxlcyBkZSBsYSBtdWVzdHJhIikrDQogIHRoZW1lX2J3KCkNCmBgYA0KDQoNCiMjIExPUyBISVNUT0dSQU1BUyBERSBBQkFKTyBTT04gREUgMTUgSU5URVJWQUxPUyBERSBDTEFTRSAoREVOU0lEQUQgWSBDQU5USURBRCkNCg0KDQojIEhpc3RvZ3JhbWEgZGUgRGVuc2lkYWQgZGVsIFBFU08gQ0hJTEVOTw0KDQpgYGB7cn0NCkRjaGlsIDwtIGdyZXAoIlBFU09fQ0hJTEVOTyIsIFRvYm94cGxvdCREaXZpc2FzKQ0KRGl2Q0hJTCA8LSBUb2JveHBsb3RbRGNoaWwsXQ0KZ2dwbG90KGRhdGEgPSBEaXZDSElMKSArIA0KICBnZW9tX2hpc3RvZ3JhbShtYXBwaW5nID0gYWVzKHg9UmV0b3Jub3MsIHk9Li5kZW5zaXR5Li4pLCBjb2xvcj0iYmxhY2siLCBmaWxsPSJncmVlbiIsIGJpbnM9MTUpDQpgYGANCg0KIyBIaXN0b2dyYW1hIGRlIENhbnRpZGFkIG8gRnJlY3VlbmNpYSBkZWwgUEVTTyBDSElMRU5PDQoNCmBgYHtyfQ0KRGNoaWwgPC0gZ3JlcCgiUEVTT19DSElMRU5PIiwgVG9ib3hwbG90JERpdmlzYXMpDQpEaXZDSElMIDwtIFRvYm94cGxvdFtEY2hpbCxdDQpnZ3Bsb3QoZGF0YSA9IERpdkNISUwpICsgDQogIGdlb21faGlzdG9ncmFtKG1hcHBpbmcgPSBhZXMoeD1SZXRvcm5vcyksIGNvbG9yPSJibGFjayIsIGZpbGw9ImdyZWVuIiwgYmlucz0xNSkNCmBgYA0KDQojIEhpc3RvZ3JhbWEgZGUgRGVuc2lkYWQgZGVsIFBFU08gQ09MT01CSUFOTw0KDQpgYGB7cn0NCkRjb2wgPC0gZ3JlcCgiUEVTT19DT0xPTSIsIFRvYm94cGxvdCREaXZpc2FzKQ0KRGl2Q09MIDwtIFRvYm94cGxvdFtEY29sLF0NCmdncGxvdChkYXRhID0gRGl2Q09MKSArIA0KICBnZW9tX2hpc3RvZ3JhbShtYXBwaW5nID0gYWVzKHg9UmV0b3Jub3MsIHk9Li5kZW5zaXR5Li4pLCBjb2xvcj0iYmxhY2siLCBmaWxsPSJyZWQiLCBiaW5zPTE1KQ0KYGBgDQoNCiMgSGlzdG9ncmFtYSBkZSBDYW50aWRhZCBvIEZyZWN1ZW5jaWEgZGVsIFBFU08gQ09MT01CSUFOTw0KDQpgYGB7cn0NCkRjb2wgPC0gZ3JlcCgiUEVTT19DT0xPTSIsIFRvYm94cGxvdCREaXZpc2FzKQ0KRGl2Q09MIDwtIFRvYm94cGxvdFtEY29sLF0NCmdncGxvdChkYXRhID0gRGl2Q09MKSArIA0KICBnZW9tX2hpc3RvZ3JhbShtYXBwaW5nID0gYWVzKHg9UmV0b3Jub3MpLCBjb2xvcj0iYmxhY2siLCBmaWxsPSJyZWQiLCBiaW5zPTE1KQ0KYGBgDQoNCiMgSGlzdG9ncmFtYSBkZSBEZW5zaWRhZCBkZWwgUEVTTyBNRVhJQ0FOTw0KDQpgYGB7cn0NCkRtZXggPC0gZ3JlcCgiUEVTT19NRVgiLCBUb2JveHBsb3QkRGl2aXNhcykNCkRpdk1FWCA8LSBUb2JveHBsb3RbRG1leCxdDQpnZ3Bsb3QoZGF0YSA9IERpdk1FWCkgKyANCiAgZ2VvbV9oaXN0b2dyYW0obWFwcGluZyA9IGFlcyh4PVJldG9ybm9zLCB5PS4uZGVuc2l0eS4uKSwgY29sb3I9ImJsYWNrIiwgZmlsbD0ieWVsbG93IiwgYmlucz0xNSkNCmBgYA0KDQojIEhpc3RvZ3JhbWEgZGUgQ2FudGlkYWQgbyBGcmVjdWVuY2lhIGRlbCBQRVNPIE1FWElDQU5PDQoNCmBgYHtyfQ0KRG1leCA8LSBncmVwKCJQRVNPX01FWCIsIFRvYm94cGxvdCREaXZpc2FzKQ0KRGl2TUVYIDwtIFRvYm94cGxvdFtEbWV4LF0NCmdncGxvdChkYXRhID0gRGl2TUVYKSArIA0KICBnZW9tX2hpc3RvZ3JhbShtYXBwaW5nID0gYWVzKHg9UmV0b3Jub3MpLCBjb2xvcj0iYmxhY2siLCBmaWxsPSJ5ZWxsb3ciLCBiaW5zPTE1KQ0KYGBgDQoNCiMgSGlzdG9ncmFtYSBkZSBEZW5zaWRhZCBkZWwgU09MDQoNCmBgYHtyfQ0KRHNvbCA8LSBncmVwKCJTT0wiLCBUb2JveHBsb3QkRGl2aXNhcykNCkRpdlNPTCA8LSBUb2JveHBsb3RbRHNvbCxdDQpnZ3Bsb3QoZGF0YSA9IERpdlNPTCkgKyANCiAgZ2VvbV9oaXN0b2dyYW0obWFwcGluZyA9IGFlcyh4PVJldG9ybm9zLCB5PS4uZGVuc2l0eS4uKSwgY29sb3I9ImJsYWNrIiwgZmlsbD0ib3JhbmdlIiwgYmlucz0xNSkNCmBgYA0KDQojIEhpc3RvZ3JhbWEgZGUgQ2FudGlkYWQgbyBGcmVjdWVuY2lhIGRlbCBTT0wNCg0KYGBge3J9DQpEc29sIDwtIGdyZXAoIlNPTCIsIFRvYm94cGxvdCREaXZpc2FzKQ0KRGl2U09MIDwtIFRvYm94cGxvdFtEc29sLF0NCmdncGxvdChkYXRhID0gRGl2U09MKSArIA0KICBnZW9tX2hpc3RvZ3JhbShtYXBwaW5nID0gYWVzKHg9UmV0b3Jub3MpLCBjb2xvcj0iYmxhY2siLCBmaWxsPSJvcmFuZ2UiLCBiaW5zPTE1KQ0KYGBgDQoNCiMgSGlzdG9ncmFtYSBkZSBEZW5zaWRhZCBkZWwgUkVBTA0KDQpgYGB7cn0NCkRyZWFsIDwtIGdyZXAoIlJFQUwiLCBUb2JveHBsb3QkRGl2aXNhcykNCkRpdlJFQUwgPC0gVG9ib3hwbG90W0RyZWFsLF0NCmdncGxvdChkYXRhID0gRGl2UkVBTCkgKyANCiAgZ2VvbV9oaXN0b2dyYW0obWFwcGluZyA9IGFlcyh4PVJldG9ybm9zLCB5PS4uZGVuc2l0eS4uKSwgY29sb3I9ImJsYWNrIiwgZmlsbD0ibWFnZW50YSIsIGJpbnM9MTUpDQpgYGANCg0KIyBIaXN0b2dyYW1hIGRlIENhbnRpZGFkIG8gRnJlY3VlbmNpYSBkZWwgUkVBTA0KDQpgYGB7cn0NCkRyZWFsIDwtIGdyZXAoIlJFQUwiLCBUb2JveHBsb3QkRGl2aXNhcykNCkRpdlJFQUwgPC0gVG9ib3hwbG90W0RyZWFsLF0NCmdncGxvdChkYXRhID0gRGl2UkVBTCkgKyANCiAgZ2VvbV9oaXN0b2dyYW0obWFwcGluZyA9IGFlcyh4PVJldG9ybm9zKSwgY29sb3I9ImJsYWNrIiwgZmlsbD0ibWFnZW50YSIsIGJpbnM9MTUpDQpgYGANCg0KIyBEaXN0cmlidWNpb24gZW1waXJpY2EgZGUgdG9kYXMgbGFzIGRpdmlzYXMNCg0KYGBge3J9DQpnZ3Bsb3QoVG9ib3hwbG90LCBhZXMoeCA9IFJldG9ybm9zKSkgKw0KICBzdGF0X2VjZGYoYWVzKGNvbG9yID0gRGl2aXNhcyxsaW5ldHlwZSA9IERpdmlzYXMpLCANCiAgICAgICAgICAgICAgZ2VvbSA9ICJzdGVwIiwgc2l6ZSA9IDEuNSkgKw0KICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiZ3JlZW4iLCJyZWQiLCJ5ZWxsb3ciLCJvcmFuZ2UiLCJtYWdlbnRhIikpKw0KICBsYWJzKHkgPSAiZihSZXRvcm5vKSIpDQpgYGANCg0KIyBEaXN0cmlidWNpb24gZW1waXJpY2EgZGVsIFBFU08gQ0hJTEVOTw0KDQpgYGB7cn0NCmdncGxvdChEaXZDSElMLCBhZXMoeCA9IFJldG9ybm9zKSkgKw0KICBzdGF0X2VjZGYoYWVzKGNvbG9yID0gRGl2aXNhcyxsaW5ldHlwZSA9IERpdmlzYXMpLCANCiAgICAgICAgICAgICAgZ2VvbSA9ICJzdGVwIiwgc2l6ZSA9IDIpICsNCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImdyZWVuIikpKw0KICBsYWJzKHkgPSAiZihSZXRvcm5vKSIpDQpgYGANCg0KIyBEaXN0cmlidWNpb24gZW1waXJpY2EgZGVsIFBFU08gQ09MT01CSUFOTw0KDQpgYGB7cn0NCmdncGxvdChEaXZDT0wsIGFlcyh4ID0gUmV0b3Jub3MpKSArDQogIHN0YXRfZWNkZihhZXMoY29sb3IgPSBEaXZpc2FzLGxpbmV0eXBlID0gRGl2aXNhcyksIA0KICAgICAgICAgICAgICBnZW9tID0gInN0ZXAiLCBzaXplID0gMikgKw0KICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygicmVkIikpKw0KICBsYWJzKHkgPSAiZihSZXRvcm5vKSIpDQpgYGANCg0KIyBEaXN0cmlidWNpb24gZW1waXJpY2EgZGVsIFBFU08gTUVYSUNBTk8NCg0KYGBge3J9DQpnZ3Bsb3QoRGl2TUVYLCBhZXMoeCA9IFJldG9ybm9zKSkgKw0KICBzdGF0X2VjZGYoYWVzKGNvbG9yID0gRGl2aXNhcyxsaW5ldHlwZSA9IERpdmlzYXMpLCANCiAgICAgICAgICAgICAgZ2VvbSA9ICJzdGVwIiwgc2l6ZSA9IDIpICsNCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoInllbGxvdyIpKSsNCiAgbGFicyh5ID0gImYoUmV0b3JubykiKQ0KYGBgDQoNCiMgRGlzdHJpYnVjaW9uIGVtcGlyaWNhIGRlbCBTT0wNCg0KYGBge3J9DQpnZ3Bsb3QoRGl2U09MLCBhZXMoeCA9IFJldG9ybm9zKSkgKw0KICBzdGF0X2VjZGYoYWVzKGNvbG9yID0gRGl2aXNhcyxsaW5ldHlwZSA9IERpdmlzYXMpLCANCiAgICAgICAgICAgICAgZ2VvbSA9ICJzdGVwIiwgc2l6ZSA9IDIpICsNCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIm9yYW5nZSIpKSsNCiAgbGFicyh5ID0gImYoUmV0b3JubykiKQ0KYGBgDQoNCiMgRGlzdHJpYnVjaW9uIGVtcGlyaWNhIGRlbCBSRUFMDQoNCmBgYHtyfQ0KZ2dwbG90KERpdlJFQUwsIGFlcyh4ID0gUmV0b3Jub3MpKSArDQogIHN0YXRfZWNkZihhZXMoY29sb3IgPSBEaXZpc2FzLGxpbmV0eXBlID0gRGl2aXNhcyksIA0KICAgICAgICAgICAgICBnZW9tID0gInN0ZXAiLCBzaXplID0gMikgKw0KICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygibWFnZW50YSIpKSsNCiAgbGFicyh5ID0gImYoUmV0b3JubykiKQ0KYGBgDQoNCg==