Code
expe <- read_excel("DATA - 10683_2007_9171_MOESM2_ESM.xls")
colnames(expe) <- expe[4,]
expe <- as.data.frame(expe[-c(1:4),])
expe[is.na(expe)==FALSE] <- as.numeric(expe[is.na(expe)==FALSE])
#Original graph
#G1
forgr1.df <- select(expe, Period, Group, Treatment, mycont)
forgr1.df$Period <- as.double(forgr1.df$Period)
forgr1.df$mycont <- as.double(forgr1.df$mycont)
forgr1.df <- filter(forgr1.df, Period>5)
forgr1.df$Group <- as.character(forgr1.df$Group)
forgr1_res.df <- as.data.frame(aggregate(forgr1.df[,4], list(forgr1.df$Treatment), mean))
forgr1_res.df$x <- round(forgr1_res.df$x,digits = 2)
forgr1_res.df$Group.1 <- as.character(forgr1_res.df$Group.1)
EEDAFigure1 <- ggplot(forgr1_res.df, aes(x=Group.1,y=x,fill=Group.1),color="black")+
geom_bar(stat="identity")+
scale_fill_brewer(palette="Set2")+
geom_text(label=forgr1_res.df$x,vjust=-.25)+
labs(title = "Average contribution by treatment (data from periods 6–10)",
x="Treatment",
y="Average contribution",
fill=NULL)+
theme_light()+
theme(legend.background = element_rect(linetype="solid",color="Black"))
#ggsave("EEDA-Figure1.png",EEDAFigure1)
#G2
forgr2.df <- select(expe, Period, Group, Treatment, mycont)
forgr2.df$Period <- as.double(forgr2.df$Period)
forgr2.df$mycont <- as.double(forgr2.df$mycont)
forgr2.df$Group <- as.character(forgr2.df$Group)
forgr2_res.df <- data.frame(aggregate(x=forgr2.df$mycont,
by=list(forgr2.df$Period,forgr2.df$Treatment),
FUN=mean))
forgr2_res.df$x <- round(forgr2_res.df$x,digits = 2)
forgr2_res.df$Group.1 <- as.integer(forgr2_res.df$Group.1)
forgr2_res.df$Group.2 <- as.character(forgr2_res.df$Group.2)
EEDAFigure2 <- ggplot(forgr2_res.df,aes(x=Group.1,y=x))+
scale_x_continuous(breaks=c(1:10))+
scale_y_continuous(breaks=seq(0,20,2))+
geom_point(aes(shape=Group.2))+
geom_line(aes(group =Group.2))+
scale_shape_manual(values=c(1,0,15,5,8))+
labs(title = "Average contribution over time across treatments",
x="Period",
y="Average contribution",
shape=NULL)+
theme_light()+
theme(legend.position = c(0.07, 0.22),
legend.background = element_rect(linetype="solid",color="Black"),
plot.title = element_text(hjust = 0.5))
#ggsave("EEDA-Figure2.png",EEDAFigure2)
#G3
forgr3.df <- select(expe, Period, Group, Treatment, TotalProfit)
forgr3.df$Period <- as.double(forgr3.df$Period)
forgr3.df$TotalProfit <- as.double(forgr3.df$TotalProfit)
forgr3.df$Group <- as.character(forgr3.df$Group)
forgr3_res.df <- data.frame(aggregate(x=forgr3.df$TotalProfit,
by=list(forgr3.df$Period,forgr3.df$Treatment),
FUN=mean))
forgr3_res.df$x <- round(forgr3_res.df$x,digits = 2)
forgr3_res.df$Group.1 <- as.integer(forgr3_res.df$Group.1)
forgr3_res.df$Group.2 <- as.character(forgr3_res.df$Group.2)
Base <- forgr3_res.df$x[forgr3_res.df$Group.2==0]
Base <- c(rep(Base,4))
forgr3_res.df <- forgr3_res.df[-c(1:10),]
forgr3_res.df$rce <- (forgr3_res.df$x-Base-25)/Base
EEDAFigure3 <- ggplot(forgr3_res.df,aes(x=Group.1,y=rce))+
geom_hline(aes(yintercept = 0),colour="gray28")+
scale_x_continuous(breaks=c(1:10))+
geom_point(aes(shape=Group.2))+
geom_line(aes(group =Group.2))+
scale_shape_manual(values=c(0,15,5,8))+
labs(title = "CRE over time across treatments",
x="Period",
y="CRE",
shape=NULL)+
theme_bw()+
theme(legend.position = c(0.9, 0.22),
legend.background = element_rect(linetype="solid",color="Black"),
plot.title = element_text(hjust = 0.5))
#ggsave("EEDA-Figure3.png",EEDAFigure3)
expe <- read_excel("DATA - 10683_2007_9171_MOESM2_ESM.xls")
colnames(expe) <- expe[4,]
expe <- as.data.frame(expe[-c(1:4),])
expe[is.na(expe)==FALSE] <- as.numeric(expe[is.na(expe)==FALSE])
#New
#Graph
#H1
#Y=delta Contribution (C t - C t-1)
#X=R.Punishment t-1
h1.df <- select(expe, Period, Group, Treatment, Subject, mycont, tot_red)
h1.df$Treatment <- as.integer(h1.df$Treatment)
h1.df <- filter(h1.df,Treatment>0)
h1.df$Period <- as.double(h1.df$Period)
h1.df$mycont <- as.double(h1.df$mycont)
h1.df$tot_red <- as.double(h1.df$tot_red)
h1.df$Group <- as.character(h1.df$Group)
h1.df$Subject <- as.character(h1.df$Subject)
allpopu1 <- unique(h1.df$Subject)
h1.df$delta <- NA
for(i in 1:length(allpopu1)){
for(j in 2:10){
this <- h1.df[(h1.df$Period==j & h1.df$Subject==allpopu1[i]),]$mycont
last <- h1.df[(h1.df$Period==(j-1) & h1.df$Subject==allpopu1[i]),]$mycont
h1.df[(h1.df$Period==j & h1.df$Subject==allpopu1[i]),]$delta <- (this - last)
}
}
h1_res.df <- data.frame(lastpunish=h1.df[(h1.df$Period<10),]$tot_red,
delta=h1.df[(h1.df$Period>1),]$delta)
h1_res.df$count <- 1
h1_res2.df <- aggregate(count~lastpunish+delta,
data=h1_res.df,
sum)
EEDANewH1 <- ggplot(h1_res2.df,aes(x=lastpunish,y=delta))+
geom_point(aes(size=log(count),color=log(count)))+
scale_color_viridis_c()+
labs(title = "Last Punishment v.s. ΔCont",
x="Last Punishment",
y="ΔCont",
size="ln(Count)",
color="ln(Count)")+
theme_bw()+
theme(legend.background = element_rect(linetype="solid",color="Black"),
plot.title = element_text(hjust = 0.5))
#ggsave("EEDA-NewH1.png",EEDANewH1)
#H2
#Y=Punishment t
#X=Ci-Cj(j!=i) t
#Xc=Pool t
h2.df <- select(expe,Group,Subject,Period,Treatment,mycont,totcont,`p[1]`,`p[2]`,`p[3]`,`p[4]`)
h2.df$Treatment <- as.integer(h2.df$Treatment)
h2.df <- filter(h2.df,Treatment>0)
h2.df$Group <- as.character(h2.df$Group)
h2.df$Subject <- as.integer(h2.df$Subject)
h2.df$Period <- as.double(h2.df$Period)
h2.df$mycont <- as.double(h2.df$mycont)
h2.df$totcont <- as.double(h2.df$totcont)
h2.df$`p[1]` <- as.double(h2.df$`p[1]`)
h2.df$`p[2]` <- as.double(h2.df$`p[2]`)
h2.df$`p[3]` <- as.double(h2.df$`p[3]`)
h2.df$`p[4]` <- as.double(h2.df$`p[4]`)
h2.df$d1 <- 0
h2.df$d2 <- 0
h2.df$d3 <- 0
h2.df$d4 <- 0
diffmat = function(x){
D = matrix(as.numeric(NA), NROW(x), NROW(x))
for (i in 1:NROW(x)){
d = x[[i]] - x[-i]
D[i,-i] = d
}
if (!all(is.na(diag(D)))){
stop("Not all diagonal elements zero")
}
diag(D) = 0
if (!is.null(names(x))) colnames(D) = rownames(D) = names(x)
return(D)
}
k <- nrow(h2.df)/4
for( w in 1:k){
j <- w*4
h2.df[(j-3):j,(11:14)] <- diffmat(h2.df[(j-3):j,5])
}
h2.df$tp1 <- h2.df$Treatment*h2.df$`p[1]`
h2.df$tp2 <- h2.df$Treatment*h2.df$`p[2]`
h2.df$tp3 <- h2.df$Treatment*h2.df$`p[3]`
h2.df$tp4 <- h2.df$Treatment*h2.df$`p[4]`
h2_res.df <- c(NA,NA,NA,NA)
for(i in 1:nrow(h2.df)){
place <- h2.df$Subject[i] %% 10
for(j in 1:4){
if(j!=place){
p <- h2.df[i,(j+6)]
tp <- h2.df[i,(j+14)]
d <- h2.df[i,(j+10)]
pool <- h2.df$totcont[i]
h2_res.df <- rbind(h2_res.df, c(p,tp,d,pool))
}
}
}
h2_res.df <- as.data.frame(h2_res.df[-1,])
colnames(h2_res.df) <- c("punish","rpunish","delta","pool")
h2_res.df$count <- 1
h2_res2.df <- aggregate(count ~ punish + delta,
data=h2_res.df,
sum)
h2_res3.df <- filter(h2_res2.df,delta>=0)
EEDANewH2 <- ggplot(h2_res3.df,aes(x=delta,y=punish))+
geom_point(aes(size=log(count),color=log(count)))+
scale_color_viridis_c()+
labs(title = "MORE Cont v.s. Punish",
x="More Contribution",
y="Punish",
size="ln(Count)",
color="ln(Count)",
caption = "(Only when dif(mycont) is non-negative)")+
theme_bw()+
theme(legend.background = element_rect(linetype="solid",color="Black"),
plot.title = element_text(hjust = 0.5))
#ggsave("EEDA-NewH2.png",EEDANewH2)
EEDANewH2.1 <- ggplot(h2_res2.df,aes(x=delta,y=punish))+
geom_point(aes(size=log(count),color=log(count)))+
scale_color_viridis_c()+
labs(title = "Dif Cont v.s. Punish",
x="DIfference in Contribution",
y="Punish",
size="ln(Count)",
color="ln(Count)")+
theme_bw()+
theme(legend.background = element_rect(linetype="solid",color="Black"),
plot.title = element_text(hjust = 0.5))
#ggsave("EEDA-NewH2.1.png",EEDANewH2.1)
#Regression
#H1
#Y=delta Contribution (C t - C t-1)
#X=R.Punishment t-1
resh1 <- lm(delta~lastpunish,h1_res.df)
resh1m1 <- data.frame(lastpunish=h1.df[(h1.df$Period<10 & h1.df$Treatment==1),]$tot_red,
delta=h1.df[(h1.df$Period>1 & h1.df$Treatment==1),]$delta)
resh1m2 <- data.frame(lastpunish=h1.df[(h1.df$Period<10 & h1.df$Treatment==2),]$tot_red,
delta=h1.df[(h1.df$Period>1 & h1.df$Treatment==2),]$delta)
resh1m3 <- data.frame(lastpunish=h1.df[(h1.df$Period<10 & h1.df$Treatment==3),]$tot_red,
delta=h1.df[(h1.df$Period>1 & h1.df$Treatment==3),]$delta)
resh1m4 <- data.frame(lastpunish=h1.df[(h1.df$Period<10 & h1.df$Treatment==4),]$tot_red,
delta=h1.df[(h1.df$Period>1 & h1.df$Treatment==4),]$delta)
resh11 <- lm(delta~lastpunish,resh1m1)
resh12 <- lm(delta~lastpunish,resh1m2)
resh13 <- lm(delta~lastpunish,resh1m3)
resh14 <- lm(delta~lastpunish,resh1m4)
tl <- c("All","'1'","'2'","'3'","'4'")
#stargazer(resh1,resh11,resh12,resh13,resh14, title="Hypothesis 1",column.labels=tl, align=TRUE, digits=2, out="EET1.htm")
#H2
#Y=Punishment t
#X=Ci-Cj(j!=i) t
#Xc=Pool t
h2_ols.df <- c(NA,NA,NA,NA,NA)
for(i in 1:nrow(h2.df)){
place <- h2.df$Subject[i] %% 10
for(j in 1:4){
if(j!=place){
tr <- h2.df$Treatment[i]
p <- h2.df[i,(j+6)]
tp <- h2.df[i,(j+14)]
d <- h2.df[i,(j+10)]
pool <- h2.df$totcont[i]
h2_ols.df <- rbind(h2_ols.df, c(tr,p,tp,d,pool))
}
}
}
h2_ols.df <- as.data.frame(h2_ols.df)
h2_ols.df <- h2_ols.df[-1,]
h2_ols.df$Negative <- 0
colnames(h2_ols.df) <- c("Treatment","Punish","Rpunish","Delta","Pool","Negative")
h2_ols.df$Negative[h2_ols.df$Delta<0] <- 1
h2_ols.df1 <- filter(h2_ols.df,Treatment==1)
h2_ols.df2 <- filter(h2_ols.df,Treatment==2)
h2_ols.df3 <- filter(h2_ols.df,Treatment==3)
h2_ols.df4 <- filter(h2_ols.df,Treatment==4)
resh2 <- lm(Punish ~ Delta + Negative + Negative*Delta + Pool, h2_ols.df)
resh21<- lm(Punish ~ Delta + Negative + Negative*Delta + Pool, h2_ols.df1)
resh22<- lm(Punish ~ Delta + Negative + Negative*Delta + Pool, h2_ols.df2)
resh23<- lm(Punish ~ Delta + Negative + Negative*Delta + Pool, h2_ols.df3)
resh24<- lm(Punish ~ Delta + Negative + Negative*Delta + Pool, h2_ols.df4)
#stargazer(resh2,resh21,resh22,resh23,resh24, title="Hypothesis 2",column.labels=tl, align=TRUE, digits=2, out="EET2.htm")
Result
EEDAFigure1

EEDAFigure2

EEDAFigure3

Hypothesis 1 - Contribute more after more punishment
EEDANewH1

stargazer(resh1,resh11,resh12,resh13,resh14, title="Hypothesis 1",column.labels=tl, align=TRUE, digits=2,type = 'html',style = "qje",df = FALSE)
Hypothesis 1
|
|
|
|
delta
|
|
|
All
|
‘1’
|
‘2’
|
‘3’
|
‘4’
|
|
|
(1)
|
(2)
|
(3)
|
(4)
|
(5)
|
|
|
|
lastpunish
|
0.44***
|
0.80***
|
0.36***
|
0.38***
|
0.39***
|
|
|
(0.03)
|
(0.13)
|
(0.07)
|
(0.04)
|
(0.05)
|
|
|
|
|
|
|
|
|
Constant
|
-0.80***
|
-1.69***
|
-1.03***
|
-0.45**
|
-0.15
|
|
|
(0.17)
|
(0.45)
|
(0.35)
|
(0.22)
|
(0.23)
|
|
|
|
|
|
|
|
|
N
|
864
|
216
|
216
|
216
|
216
|
|
R2
|
0.16
|
0.16
|
0.10
|
0.32
|
0.22
|
|
Adjusted R2
|
0.15
|
0.15
|
0.09
|
0.32
|
0.21
|
|
Residual Std. Error
|
4.44
|
6.12
|
4.56
|
2.94
|
3.18
|
|
F Statistic
|
158.18***
|
39.54***
|
23.16***
|
103.00***
|
58.89***
|
|
|
|
Notes:
|
***Significant at the 1 percent level.
|
|
|
**Significant at the 5 percent level.
|
|
|
*Significant at the 10 percent level.
|
Hypothesis 2 - Punish the free riders
EEDANewH2

EEDANewH2.1

stargazer(resh2,resh21,resh22,resh23,resh24, title="Hypothesis 2",column.labels=tl, align=TRUE, digits=2,type = 'html',style = "qje",df = FALSE)
Hypothesis 2
|
|
|
|
Punish
|
|
|
All
|
‘1’
|
‘2’
|
‘3’
|
‘4’
|
|
|
(1)
|
(2)
|
(3)
|
(4)
|
(5)
|
|
|
|
Delta
|
0.14***
|
0.15***
|
0.10***
|
0.17***
|
0.12***
|
|
|
(0.005)
|
(0.01)
|
(0.01)
|
(0.01)
|
(0.004)
|
|
|
|
|
|
|
|
|
Negative
|
0.10*
|
0.13
|
0.21*
|
-0.004
|
0.06
|
|
|
(0.05)
|
(0.14)
|
(0.12)
|
(0.08)
|
(0.05)
|
|
|
|
|
|
|
|
|
Pool
|
0.003***
|
0.01***
|
0.004**
|
-0.003
|
0.003***
|
|
|
(0.001)
|
(0.002)
|
(0.002)
|
(0.002)
|
(0.001)
|
|
|
|
|
|
|
|
|
Delta:Negative
|
-0.14***
|
-0.15***
|
-0.11***
|
-0.16***
|
-0.12***
|
|
|
(0.01)
|
(0.02)
|
(0.01)
|
(0.02)
|
(0.01)
|
|
|
|
|
|
|
|
|
Constant
|
-0.15***
|
-0.25***
|
-0.16
|
0.24*
|
-0.19***
|
|
|
(0.05)
|
(0.09)
|
(0.12)
|
(0.14)
|
(0.07)
|
|
|
|
|
|
|
|
|
N
|
2,880
|
720
|
720
|
720
|
720
|
|
R2
|
0.25
|
0.25
|
0.15
|
0.34
|
0.61
|
|
Adjusted R2
|
0.25
|
0.25
|
0.15
|
0.34
|
0.61
|
|
Residual Std. Error
|
0.89
|
1.24
|
0.97
|
0.72
|
0.32
|
|
F Statistic
|
237.74***
|
59.56***
|
31.64***
|
92.68***
|
284.74***
|
|
|
|
Notes:
|
***Significant at the 1 percent level.
|
|
|
**Significant at the 5 percent level.
|
|
|
*Significant at the 10 percent level.
|
LS0tCnRpdGxlOiAiRGF0YSBhbmFseXNpcyBDb2RlIgphdXRob3I6ICJDaGVhdGluZyBhbmQgTHlpbmcgZ3JvdXAgMSIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoqKioKYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnNldHdkKCJ+L0Rlc2t0b3AvUiIpCnJtKGxpc3Q9bHMoYWxsPVRSVUUpKQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KGhhdmVuKQpsaWJyYXJ5KHJlYWR4bCkKbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KHN0YXJnYXplcikKYGBgCgo+IENvZGUKCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpleHBlIDwtIHJlYWRfZXhjZWwoIkRBVEEgLSAxMDY4M18yMDA3XzkxNzFfTU9FU00yX0VTTS54bHMiKQpjb2xuYW1lcyhleHBlKSA8LSBleHBlWzQsXQpleHBlIDwtIGFzLmRhdGEuZnJhbWUoZXhwZVstYygxOjQpLF0pCmV4cGVbaXMubmEoZXhwZSk9PUZBTFNFXSA8LSBhcy5udW1lcmljKGV4cGVbaXMubmEoZXhwZSk9PUZBTFNFXSkKCgojT3JpZ2luYWwgZ3JhcGgKCiNHMQpmb3JncjEuZGYgPC0gc2VsZWN0KGV4cGUsIFBlcmlvZCwgR3JvdXAsIFRyZWF0bWVudCwgbXljb250KQpmb3JncjEuZGYkUGVyaW9kIDwtIGFzLmRvdWJsZShmb3JncjEuZGYkUGVyaW9kKQpmb3JncjEuZGYkbXljb250IDwtIGFzLmRvdWJsZShmb3JncjEuZGYkbXljb250KQoKZm9yZ3IxLmRmIDwtIGZpbHRlcihmb3JncjEuZGYsIFBlcmlvZD41KQoKZm9yZ3IxLmRmJEdyb3VwIDwtIGFzLmNoYXJhY3Rlcihmb3JncjEuZGYkR3JvdXApCmZvcmdyMV9yZXMuZGYgPC0gYXMuZGF0YS5mcmFtZShhZ2dyZWdhdGUoZm9yZ3IxLmRmWyw0XSwgbGlzdChmb3JncjEuZGYkVHJlYXRtZW50KSwgbWVhbikpCmZvcmdyMV9yZXMuZGYkeCA8LSByb3VuZChmb3JncjFfcmVzLmRmJHgsZGlnaXRzID0gMikKZm9yZ3IxX3Jlcy5kZiRHcm91cC4xIDwtIGFzLmNoYXJhY3Rlcihmb3JncjFfcmVzLmRmJEdyb3VwLjEpCgoKRUVEQUZpZ3VyZTEgPC0gZ2dwbG90KGZvcmdyMV9yZXMuZGYsIGFlcyh4PUdyb3VwLjEseT14LGZpbGw9R3JvdXAuMSksY29sb3I9ImJsYWNrIikrCiAgZ2VvbV9iYXIoc3RhdD0iaWRlbnRpdHkiKSsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlPSJTZXQyIikrCiAgZ2VvbV90ZXh0KGxhYmVsPWZvcmdyMV9yZXMuZGYkeCx2anVzdD0tLjI1KSsKICBsYWJzKHRpdGxlID0gIkF2ZXJhZ2UgY29udHJpYnV0aW9uIGJ5IHRyZWF0bWVudCAoZGF0YSBmcm9tIHBlcmlvZHMgNuKAkzEwKSIsCiAgICAgICB4PSJUcmVhdG1lbnQiLAogICAgICAgeT0iQXZlcmFnZSBjb250cmlidXRpb24iLAogICAgICAgZmlsbD1OVUxMKSsKICB0aGVtZV9saWdodCgpKwogIHRoZW1lKGxlZ2VuZC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGxpbmV0eXBlPSJzb2xpZCIsY29sb3I9IkJsYWNrIikpCiNnZ3NhdmUoIkVFREEtRmlndXJlMS5wbmciLEVFREFGaWd1cmUxKQoKCiNHMgoKZm9yZ3IyLmRmIDwtIHNlbGVjdChleHBlLCBQZXJpb2QsIEdyb3VwLCBUcmVhdG1lbnQsIG15Y29udCkKZm9yZ3IyLmRmJFBlcmlvZCA8LSBhcy5kb3VibGUoZm9yZ3IyLmRmJFBlcmlvZCkKZm9yZ3IyLmRmJG15Y29udCA8LSBhcy5kb3VibGUoZm9yZ3IyLmRmJG15Y29udCkKZm9yZ3IyLmRmJEdyb3VwIDwtIGFzLmNoYXJhY3Rlcihmb3JncjIuZGYkR3JvdXApCgpmb3JncjJfcmVzLmRmIDwtIGRhdGEuZnJhbWUoYWdncmVnYXRlKHg9Zm9yZ3IyLmRmJG15Y29udCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieT1saXN0KGZvcmdyMi5kZiRQZXJpb2QsZm9yZ3IyLmRmJFRyZWF0bWVudCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlVOPW1lYW4pKQpmb3JncjJfcmVzLmRmJHggPC0gcm91bmQoZm9yZ3IyX3Jlcy5kZiR4LGRpZ2l0cyA9IDIpCmZvcmdyMl9yZXMuZGYkR3JvdXAuMSA8LSBhcy5pbnRlZ2VyKGZvcmdyMl9yZXMuZGYkR3JvdXAuMSkKZm9yZ3IyX3Jlcy5kZiRHcm91cC4yIDwtIGFzLmNoYXJhY3Rlcihmb3JncjJfcmVzLmRmJEdyb3VwLjIpCgpFRURBRmlndXJlMiA8LSBnZ3Bsb3QoZm9yZ3IyX3Jlcy5kZixhZXMoeD1Hcm91cC4xLHk9eCkpKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3M9YygxOjEwKSkrCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcz1zZXEoMCwyMCwyKSkrCiAgZ2VvbV9wb2ludChhZXMoc2hhcGU9R3JvdXAuMikpKwogIGdlb21fbGluZShhZXMoZ3JvdXAgPUdyb3VwLjIpKSsKICBzY2FsZV9zaGFwZV9tYW51YWwodmFsdWVzPWMoMSwwLDE1LDUsOCkpKwogIGxhYnModGl0bGUgPSAiQXZlcmFnZSBjb250cmlidXRpb24gb3ZlciB0aW1lIGFjcm9zcyB0cmVhdG1lbnRzIiwKICAgICAgIHg9IlBlcmlvZCIsCiAgICAgICB5PSJBdmVyYWdlIGNvbnRyaWJ1dGlvbiIsCiAgICAgICBzaGFwZT1OVUxMKSsKICB0aGVtZV9saWdodCgpKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9IGMoMC4wNywgMC4yMiksCiAgICAgICAgbGVnZW5kLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QobGluZXR5cGU9InNvbGlkIixjb2xvcj0iQmxhY2siKSwKICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKI2dnc2F2ZSgiRUVEQS1GaWd1cmUyLnBuZyIsRUVEQUZpZ3VyZTIpCgojRzMKCmZvcmdyMy5kZiA8LSBzZWxlY3QoZXhwZSwgUGVyaW9kLCBHcm91cCwgVHJlYXRtZW50LCBUb3RhbFByb2ZpdCkKZm9yZ3IzLmRmJFBlcmlvZCA8LSBhcy5kb3VibGUoZm9yZ3IzLmRmJFBlcmlvZCkKZm9yZ3IzLmRmJFRvdGFsUHJvZml0IDwtIGFzLmRvdWJsZShmb3JncjMuZGYkVG90YWxQcm9maXQpCmZvcmdyMy5kZiRHcm91cCA8LSBhcy5jaGFyYWN0ZXIoZm9yZ3IzLmRmJEdyb3VwKQoKZm9yZ3IzX3Jlcy5kZiA8LSBkYXRhLmZyYW1lKGFnZ3JlZ2F0ZSh4PWZvcmdyMy5kZiRUb3RhbFByb2ZpdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieT1saXN0KGZvcmdyMy5kZiRQZXJpb2QsZm9yZ3IzLmRmJFRyZWF0bWVudCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlVOPW1lYW4pKQoKZm9yZ3IzX3Jlcy5kZiR4IDwtIHJvdW5kKGZvcmdyM19yZXMuZGYkeCxkaWdpdHMgPSAyKQpmb3JncjNfcmVzLmRmJEdyb3VwLjEgPC0gYXMuaW50ZWdlcihmb3JncjNfcmVzLmRmJEdyb3VwLjEpCmZvcmdyM19yZXMuZGYkR3JvdXAuMiA8LSBhcy5jaGFyYWN0ZXIoZm9yZ3IzX3Jlcy5kZiRHcm91cC4yKQoKQmFzZSA8LSBmb3JncjNfcmVzLmRmJHhbZm9yZ3IzX3Jlcy5kZiRHcm91cC4yPT0wXQpCYXNlIDwtIGMocmVwKEJhc2UsNCkpCmZvcmdyM19yZXMuZGYgPC0gZm9yZ3IzX3Jlcy5kZlstYygxOjEwKSxdCgpmb3JncjNfcmVzLmRmJHJjZSA8LSAoZm9yZ3IzX3Jlcy5kZiR4LUJhc2UtMjUpL0Jhc2UKCkVFREFGaWd1cmUzIDwtIGdncGxvdChmb3JncjNfcmVzLmRmLGFlcyh4PUdyb3VwLjEseT1yY2UpKSsKICBnZW9tX2hsaW5lKGFlcyh5aW50ZXJjZXB0ID0gMCksY29sb3VyPSJncmF5MjgiKSsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzPWMoMToxMCkpKwogIGdlb21fcG9pbnQoYWVzKHNoYXBlPUdyb3VwLjIpKSsKICBnZW9tX2xpbmUoYWVzKGdyb3VwID1Hcm91cC4yKSkrCiAgc2NhbGVfc2hhcGVfbWFudWFsKHZhbHVlcz1jKDAsMTUsNSw4KSkrCiAgbGFicyh0aXRsZSA9ICJDUkUgb3ZlciB0aW1lIGFjcm9zcyB0cmVhdG1lbnRzIiwKICAgICAgIHg9IlBlcmlvZCIsCiAgICAgICB5PSJDUkUiLAogICAgICAgc2hhcGU9TlVMTCkrCiAgdGhlbWVfYncoKSsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSBjKDAuOSwgMC4yMiksCiAgICAgICAgbGVnZW5kLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QobGluZXR5cGU9InNvbGlkIixjb2xvcj0iQmxhY2siKSwKICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKCiNnZ3NhdmUoIkVFREEtRmlndXJlMy5wbmciLEVFREFGaWd1cmUzKQpgYGAKCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpleHBlIDwtIHJlYWRfZXhjZWwoIkRBVEEgLSAxMDY4M18yMDA3XzkxNzFfTU9FU00yX0VTTS54bHMiKQpjb2xuYW1lcyhleHBlKSA8LSBleHBlWzQsXQpleHBlIDwtIGFzLmRhdGEuZnJhbWUoZXhwZVstYygxOjQpLF0pCmV4cGVbaXMubmEoZXhwZSk9PUZBTFNFXSA8LSBhcy5udW1lcmljKGV4cGVbaXMubmEoZXhwZSk9PUZBTFNFXSkKI05ldwoKI0dyYXBoCgojSDEKI1k9ZGVsdGEgQ29udHJpYnV0aW9uIChDIHQgLSBDIHQtMSkKI1g9Ui5QdW5pc2htZW50IHQtMQoKaDEuZGYgPC0gc2VsZWN0KGV4cGUsIFBlcmlvZCwgR3JvdXAsIFRyZWF0bWVudCwgU3ViamVjdCwgbXljb250LCB0b3RfcmVkKQpoMS5kZiRUcmVhdG1lbnQgPC0gYXMuaW50ZWdlcihoMS5kZiRUcmVhdG1lbnQpCmgxLmRmIDwtIGZpbHRlcihoMS5kZixUcmVhdG1lbnQ+MCkKCmgxLmRmJFBlcmlvZCA8LSBhcy5kb3VibGUoaDEuZGYkUGVyaW9kKQpoMS5kZiRteWNvbnQgPC0gYXMuZG91YmxlKGgxLmRmJG15Y29udCkKaDEuZGYkdG90X3JlZCA8LSBhcy5kb3VibGUoaDEuZGYkdG90X3JlZCkKaDEuZGYkR3JvdXAgPC0gYXMuY2hhcmFjdGVyKGgxLmRmJEdyb3VwKQpoMS5kZiRTdWJqZWN0IDwtIGFzLmNoYXJhY3RlcihoMS5kZiRTdWJqZWN0KQoKYWxscG9wdTEgPC0gdW5pcXVlKGgxLmRmJFN1YmplY3QpCmgxLmRmJGRlbHRhIDwtIE5BCmZvcihpIGluIDE6bGVuZ3RoKGFsbHBvcHUxKSl7CiAgZm9yKGogaW4gMjoxMCl7CiAgICB0aGlzIDwtIGgxLmRmWyhoMS5kZiRQZXJpb2Q9PWogJiBoMS5kZiRTdWJqZWN0PT1hbGxwb3B1MVtpXSksXSRteWNvbnQKICAgIGxhc3QgPC0gaDEuZGZbKGgxLmRmJFBlcmlvZD09KGotMSkgJiBoMS5kZiRTdWJqZWN0PT1hbGxwb3B1MVtpXSksXSRteWNvbnQKICAgIGgxLmRmWyhoMS5kZiRQZXJpb2Q9PWogJiBoMS5kZiRTdWJqZWN0PT1hbGxwb3B1MVtpXSksXSRkZWx0YSA8LSAodGhpcyAtIGxhc3QpCiAgfQp9CgpoMV9yZXMuZGYgPC0gZGF0YS5mcmFtZShsYXN0cHVuaXNoPWgxLmRmWyhoMS5kZiRQZXJpb2Q8MTApLF0kdG90X3JlZCwKICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGE9aDEuZGZbKGgxLmRmJFBlcmlvZD4xKSxdJGRlbHRhKQpoMV9yZXMuZGYkY291bnQgPC0gMQpoMV9yZXMyLmRmIDwtIGFnZ3JlZ2F0ZShjb3VudH5sYXN0cHVuaXNoK2RlbHRhLAogICAgICAgICAgICAgICAgICAgICAgICBkYXRhPWgxX3Jlcy5kZiwKICAgICAgICAgICAgICAgICAgICAgICAgc3VtKQpFRURBTmV3SDEgPC0gIGdncGxvdChoMV9yZXMyLmRmLGFlcyh4PWxhc3RwdW5pc2gseT1kZWx0YSkpKwogIGdlb21fcG9pbnQoYWVzKHNpemU9bG9nKGNvdW50KSxjb2xvcj1sb2coY291bnQpKSkrCiAgc2NhbGVfY29sb3JfdmlyaWRpc19jKCkrCiAgbGFicyh0aXRsZSA9ICJMYXN0IFB1bmlzaG1lbnQgdi5zLiDOlENvbnQiLAogICAgICAgeD0iTGFzdCBQdW5pc2htZW50IiwKICAgICAgIHk9Is6UQ29udCIsCiAgICAgICBzaXplPSJsbihDb3VudCkiLAogICAgICAgY29sb3I9ImxuKENvdW50KSIpKwogIHRoZW1lX2J3KCkrCiAgdGhlbWUobGVnZW5kLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QobGluZXR5cGU9InNvbGlkIixjb2xvcj0iQmxhY2siKSwKICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKCiNnZ3NhdmUoIkVFREEtTmV3SDEucG5nIixFRURBTmV3SDEpCgoKCiNIMgojWT1QdW5pc2htZW50IHQKI1g9Q2ktQ2ooaiE9aSkgdAojWGM9UG9vbCB0CgpoMi5kZiA8LSBzZWxlY3QoZXhwZSxHcm91cCxTdWJqZWN0LFBlcmlvZCxUcmVhdG1lbnQsbXljb250LHRvdGNvbnQsYHBbMV1gLGBwWzJdYCxgcFszXWAsYHBbNF1gKQoKaDIuZGYkVHJlYXRtZW50IDwtIGFzLmludGVnZXIoaDIuZGYkVHJlYXRtZW50KQpoMi5kZiA8LSBmaWx0ZXIoaDIuZGYsVHJlYXRtZW50PjApCgpoMi5kZiRHcm91cCA8LSBhcy5jaGFyYWN0ZXIoaDIuZGYkR3JvdXApCmgyLmRmJFN1YmplY3QgPC0gYXMuaW50ZWdlcihoMi5kZiRTdWJqZWN0KQpoMi5kZiRQZXJpb2QgPC0gYXMuZG91YmxlKGgyLmRmJFBlcmlvZCkKaDIuZGYkbXljb250IDwtIGFzLmRvdWJsZShoMi5kZiRteWNvbnQpCmgyLmRmJHRvdGNvbnQgPC0gYXMuZG91YmxlKGgyLmRmJHRvdGNvbnQpCgpoMi5kZiRgcFsxXWAgPC0gYXMuZG91YmxlKGgyLmRmJGBwWzFdYCkKaDIuZGYkYHBbMl1gIDwtIGFzLmRvdWJsZShoMi5kZiRgcFsyXWApCmgyLmRmJGBwWzNdYCA8LSBhcy5kb3VibGUoaDIuZGYkYHBbM11gKQpoMi5kZiRgcFs0XWAgPC0gYXMuZG91YmxlKGgyLmRmJGBwWzRdYCkKCmgyLmRmJGQxIDwtIDAKaDIuZGYkZDIgPC0gMApoMi5kZiRkMyA8LSAwCmgyLmRmJGQ0IDwtIDAKCgoKZGlmZm1hdCA9IGZ1bmN0aW9uKHgpewogIEQgPSBtYXRyaXgoYXMubnVtZXJpYyhOQSksIE5ST1coeCksIE5ST1coeCkpCiAgZm9yIChpIGluIDE6TlJPVyh4KSl7CiAgICBkID0geFtbaV1dIC0geFstaV0KICAgIERbaSwtaV0gPSBkCiAgfQogIGlmICghYWxsKGlzLm5hKGRpYWcoRCkpKSl7CiAgICBzdG9wKCJOb3QgYWxsIGRpYWdvbmFsIGVsZW1lbnRzIHplcm8iKQogIH0KICBkaWFnKEQpID0gMAogIGlmICghaXMubnVsbChuYW1lcyh4KSkpIGNvbG5hbWVzKEQpID0gcm93bmFtZXMoRCkgPSBuYW1lcyh4KQogIHJldHVybihEKQp9CgprIDwtIG5yb3coaDIuZGYpLzQKCmZvciggdyBpbiAxOmspewogIGogPC0gdyo0CiAgaDIuZGZbKGotMyk6aiwoMTE6MTQpXSA8LSBkaWZmbWF0KGgyLmRmWyhqLTMpOmosNV0pCn0KCmgyLmRmJHRwMSA8LSBoMi5kZiRUcmVhdG1lbnQqaDIuZGYkYHBbMV1gCmgyLmRmJHRwMiA8LSBoMi5kZiRUcmVhdG1lbnQqaDIuZGYkYHBbMl1gCmgyLmRmJHRwMyA8LSBoMi5kZiRUcmVhdG1lbnQqaDIuZGYkYHBbM11gCmgyLmRmJHRwNCA8LSBoMi5kZiRUcmVhdG1lbnQqaDIuZGYkYHBbNF1gCgpoMl9yZXMuZGYgPC0gYyhOQSxOQSxOQSxOQSkKCmZvcihpIGluIDE6bnJvdyhoMi5kZikpewogIHBsYWNlIDwtIGgyLmRmJFN1YmplY3RbaV0gJSUgMTAKICBmb3IoaiBpbiAxOjQpewogICAgaWYoaiE9cGxhY2UpewogICAgICBwIDwtIGgyLmRmW2ksKGorNildCiAgICAgIHRwIDwtIGgyLmRmW2ksKGorMTQpXQogICAgICBkIDwtIGgyLmRmW2ksKGorMTApXQogICAgICBwb29sIDwtIGgyLmRmJHRvdGNvbnRbaV0KICAgICAgaDJfcmVzLmRmIDwtIHJiaW5kKGgyX3Jlcy5kZiwgYyhwLHRwLGQscG9vbCkpCiAgICB9CiAgfQp9CmgyX3Jlcy5kZiA8LSBhcy5kYXRhLmZyYW1lKGgyX3Jlcy5kZlstMSxdKQpjb2xuYW1lcyhoMl9yZXMuZGYpIDwtIGMoInB1bmlzaCIsInJwdW5pc2giLCJkZWx0YSIsInBvb2wiKQoKaDJfcmVzLmRmJGNvdW50IDwtIDEKaDJfcmVzMi5kZiA8LSBhZ2dyZWdhdGUoY291bnQgfiBwdW5pc2ggKyBkZWx0YSwKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT1oMl9yZXMuZGYsCiAgICAgICAgICAgICAgICAgICAgICAgIHN1bSkKaDJfcmVzMy5kZiA8LSBmaWx0ZXIoaDJfcmVzMi5kZixkZWx0YT49MCkKCkVFREFOZXdIMiA8LSBnZ3Bsb3QoaDJfcmVzMy5kZixhZXMoeD1kZWx0YSx5PXB1bmlzaCkpKwogIGdlb21fcG9pbnQoYWVzKHNpemU9bG9nKGNvdW50KSxjb2xvcj1sb2coY291bnQpKSkrCiAgc2NhbGVfY29sb3JfdmlyaWRpc19jKCkrCiAgbGFicyh0aXRsZSA9ICJNT1JFIENvbnQgdi5zLiBQdW5pc2giLAogICAgICAgeD0iTW9yZSBDb250cmlidXRpb24iLAogICAgICAgeT0iUHVuaXNoIiwKICAgICAgIHNpemU9ImxuKENvdW50KSIsCiAgICAgICBjb2xvcj0ibG4oQ291bnQpIiwKICAgICAgIGNhcHRpb24gPSAiKE9ubHkgd2hlbiBkaWYobXljb250KSBpcyBub24tbmVnYXRpdmUpIikrCiAgdGhlbWVfYncoKSsKICB0aGVtZShsZWdlbmQuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChsaW5ldHlwZT0ic29saWQiLGNvbG9yPSJCbGFjayIpLAogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQojZ2dzYXZlKCJFRURBLU5ld0gyLnBuZyIsRUVEQU5ld0gyKQoKRUVEQU5ld0gyLjEgPC0gZ2dwbG90KGgyX3JlczIuZGYsYWVzKHg9ZGVsdGEseT1wdW5pc2gpKSsKICBnZW9tX3BvaW50KGFlcyhzaXplPWxvZyhjb3VudCksY29sb3I9bG9nKGNvdW50KSkpKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXNfYygpKwogIGxhYnModGl0bGUgPSAiRGlmIENvbnQgdi5zLiBQdW5pc2giLAogICAgICAgeD0iRElmZmVyZW5jZSBpbiBDb250cmlidXRpb24iLAogICAgICAgeT0iUHVuaXNoIiwKICAgICAgIHNpemU9ImxuKENvdW50KSIsCiAgICAgICBjb2xvcj0ibG4oQ291bnQpIikrCiAgdGhlbWVfYncoKSsKICB0aGVtZShsZWdlbmQuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChsaW5ldHlwZT0ic29saWQiLGNvbG9yPSJCbGFjayIpLAogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQoKI2dnc2F2ZSgiRUVEQS1OZXdIMi4xLnBuZyIsRUVEQU5ld0gyLjEpCgoKCiNSZWdyZXNzaW9uCgojSDEKI1k9ZGVsdGEgQ29udHJpYnV0aW9uIChDIHQgLSBDIHQtMSkKI1g9Ui5QdW5pc2htZW50IHQtMQoKcmVzaDEgPC0gbG0oZGVsdGF+bGFzdHB1bmlzaCxoMV9yZXMuZGYpCgpyZXNoMW0xIDwtIGRhdGEuZnJhbWUobGFzdHB1bmlzaD1oMS5kZlsoaDEuZGYkUGVyaW9kPDEwICYgaDEuZGYkVHJlYXRtZW50PT0xKSxdJHRvdF9yZWQsCiAgICAgICAgICAgICAgICAgICAgICBkZWx0YT1oMS5kZlsoaDEuZGYkUGVyaW9kPjEgJiBoMS5kZiRUcmVhdG1lbnQ9PTEpLF0kZGVsdGEpCnJlc2gxbTIgPC0gZGF0YS5mcmFtZShsYXN0cHVuaXNoPWgxLmRmWyhoMS5kZiRQZXJpb2Q8MTAgJiBoMS5kZiRUcmVhdG1lbnQ9PTIpLF0kdG90X3JlZCwKICAgICAgICAgICAgICAgICAgICAgIGRlbHRhPWgxLmRmWyhoMS5kZiRQZXJpb2Q+MSAmIGgxLmRmJFRyZWF0bWVudD09MiksXSRkZWx0YSkKcmVzaDFtMyA8LSBkYXRhLmZyYW1lKGxhc3RwdW5pc2g9aDEuZGZbKGgxLmRmJFBlcmlvZDwxMCAmIGgxLmRmJFRyZWF0bWVudD09MyksXSR0b3RfcmVkLAogICAgICAgICAgICAgICAgICAgICAgZGVsdGE9aDEuZGZbKGgxLmRmJFBlcmlvZD4xICYgaDEuZGYkVHJlYXRtZW50PT0zKSxdJGRlbHRhKQpyZXNoMW00IDwtIGRhdGEuZnJhbWUobGFzdHB1bmlzaD1oMS5kZlsoaDEuZGYkUGVyaW9kPDEwICYgaDEuZGYkVHJlYXRtZW50PT00KSxdJHRvdF9yZWQsCiAgICAgICAgICAgICAgICAgICAgICBkZWx0YT1oMS5kZlsoaDEuZGYkUGVyaW9kPjEgJiBoMS5kZiRUcmVhdG1lbnQ9PTQpLF0kZGVsdGEpCgpyZXNoMTEgPC0gbG0oZGVsdGF+bGFzdHB1bmlzaCxyZXNoMW0xKQpyZXNoMTIgPC0gbG0oZGVsdGF+bGFzdHB1bmlzaCxyZXNoMW0yKQpyZXNoMTMgPC0gbG0oZGVsdGF+bGFzdHB1bmlzaCxyZXNoMW0zKQpyZXNoMTQgPC0gbG0oZGVsdGF+bGFzdHB1bmlzaCxyZXNoMW00KQp0bCA8LSBjKCJBbGwiLCInMSciLCInMiciLCInMyciLCInNCciKQojc3RhcmdhemVyKHJlc2gxLHJlc2gxMSxyZXNoMTIscmVzaDEzLHJlc2gxNCwgdGl0bGU9Ikh5cG90aGVzaXMgMSIsY29sdW1uLmxhYmVscz10bCwgYWxpZ249VFJVRSwgZGlnaXRzPTIsIG91dD0iRUVUMS5odG0iKQoKCiNIMgojWT1QdW5pc2htZW50IHQKI1g9Q2ktQ2ooaiE9aSkgdAojWGM9UG9vbCB0CgoKaDJfb2xzLmRmIDwtIGMoTkEsTkEsTkEsTkEsTkEpCgpmb3IoaSBpbiAxOm5yb3coaDIuZGYpKXsKICBwbGFjZSA8LSBoMi5kZiRTdWJqZWN0W2ldICUlIDEwCiAgZm9yKGogaW4gMTo0KXsKICAgIGlmKGohPXBsYWNlKXsKICAgICAgdHIgPC0gaDIuZGYkVHJlYXRtZW50W2ldCiAgICAgIHAgPC0gaDIuZGZbaSwoais2KV0KICAgICAgdHAgPC0gaDIuZGZbaSwoaisxNCldCiAgICAgIGQgPC0gaDIuZGZbaSwoaisxMCldCiAgICAgIHBvb2wgPC0gaDIuZGYkdG90Y29udFtpXQogICAgICBoMl9vbHMuZGYgPC0gcmJpbmQoaDJfb2xzLmRmLCBjKHRyLHAsdHAsZCxwb29sKSkKICAgIH0KICB9Cn0KaDJfb2xzLmRmIDwtIGFzLmRhdGEuZnJhbWUoaDJfb2xzLmRmKQpoMl9vbHMuZGYgPC0gaDJfb2xzLmRmWy0xLF0KaDJfb2xzLmRmJE5lZ2F0aXZlIDwtIDAKCgpjb2xuYW1lcyhoMl9vbHMuZGYpIDwtIGMoIlRyZWF0bWVudCIsIlB1bmlzaCIsIlJwdW5pc2giLCJEZWx0YSIsIlBvb2wiLCJOZWdhdGl2ZSIpCmgyX29scy5kZiROZWdhdGl2ZVtoMl9vbHMuZGYkRGVsdGE8MF0gPC0gMQoKaDJfb2xzLmRmMSA8LSBmaWx0ZXIoaDJfb2xzLmRmLFRyZWF0bWVudD09MSkKaDJfb2xzLmRmMiA8LSBmaWx0ZXIoaDJfb2xzLmRmLFRyZWF0bWVudD09MikKaDJfb2xzLmRmMyA8LSBmaWx0ZXIoaDJfb2xzLmRmLFRyZWF0bWVudD09MykKaDJfb2xzLmRmNCA8LSBmaWx0ZXIoaDJfb2xzLmRmLFRyZWF0bWVudD09NCkKCnJlc2gyIDwtIGxtKFB1bmlzaCB+IERlbHRhICsgTmVnYXRpdmUgKyBOZWdhdGl2ZSpEZWx0YSArIFBvb2wsIGgyX29scy5kZikKcmVzaDIxPC0gbG0oUHVuaXNoIH4gRGVsdGEgKyBOZWdhdGl2ZSArIE5lZ2F0aXZlKkRlbHRhICsgUG9vbCwgaDJfb2xzLmRmMSkKcmVzaDIyPC0gbG0oUHVuaXNoIH4gRGVsdGEgKyBOZWdhdGl2ZSArIE5lZ2F0aXZlKkRlbHRhICsgUG9vbCwgaDJfb2xzLmRmMikKcmVzaDIzPC0gbG0oUHVuaXNoIH4gRGVsdGEgKyBOZWdhdGl2ZSArIE5lZ2F0aXZlKkRlbHRhICsgUG9vbCwgaDJfb2xzLmRmMykKcmVzaDI0PC0gbG0oUHVuaXNoIH4gRGVsdGEgKyBOZWdhdGl2ZSArIE5lZ2F0aXZlKkRlbHRhICsgUG9vbCwgaDJfb2xzLmRmNCkKCiNzdGFyZ2F6ZXIocmVzaDIscmVzaDIxLHJlc2gyMixyZXNoMjMscmVzaDI0LCB0aXRsZT0iSHlwb3RoZXNpcyAyIixjb2x1bW4ubGFiZWxzPXRsLCBhbGlnbj1UUlVFLCBkaWdpdHM9Miwgb3V0PSJFRVQyLmh0bSIpCmBgYAoKCj4gUmVzdWx0CgpgYGB7cn0KRUVEQUZpZ3VyZTEKYGBgCgpgYGB7cn0KRUVEQUZpZ3VyZTIKYGBgCgpgYGB7cn0KRUVEQUZpZ3VyZTMKYGBgCgoKCj4gSHlwb3RoZXNpcyAxIC0gQ29udHJpYnV0ZSBtb3JlIGFmdGVyIG1vcmUgcHVuaXNobWVudAoKYGBge3J9CkVFREFOZXdIMQpgYGAKCgpgYGB7ciwgZWNobz1UUlVFLCB3YXJuaW5nPUZBTFNFLCByZXN1bHRzPSdhc2lzJ30Kc3RhcmdhemVyKHJlc2gxLHJlc2gxMSxyZXNoMTIscmVzaDEzLHJlc2gxNCwgdGl0bGU9Ikh5cG90aGVzaXMgMSIsY29sdW1uLmxhYmVscz10bCwgYWxpZ249VFJVRSwgZGlnaXRzPTIsdHlwZSA9ICdodG1sJyxzdHlsZSA9ICJxamUiLGRmID0gRkFMU0UpCgpgYGAKCj4gSHlwb3RoZXNpcyAyIC0gUHVuaXNoIHRoZSBmcmVlIHJpZGVycwoKYGBge3J9CkVFREFOZXdIMgpgYGAKCmBgYHtyfQpFRURBTmV3SDIuMQpgYGAKCgpgYGB7ciwgZWNobz1UUlVFLCB3YXJuaW5nPUZBTFNFLCByZXN1bHRzPSdhc2lzJ30Kc3RhcmdhemVyKHJlc2gyLHJlc2gyMSxyZXNoMjIscmVzaDIzLHJlc2gyNCwgdGl0bGU9Ikh5cG90aGVzaXMgMiIsY29sdW1uLmxhYmVscz10bCwgYWxpZ249VFJVRSwgZGlnaXRzPTIsdHlwZSA9ICdodG1sJyxzdHlsZSA9ICJxamUiLGRmID0gRkFMU0UpCmBgYAoKCgoqKio=