Resultados
17.24
df <- structure(list(
trat = c(rep("Controle", 10), rep("Tratada", 10)),
parcela = c(rep(seq(1:10), 2)),
resp = c(
115.4, 121, 112.3, 78.7, 65.6, 213.5, 157.5, 80.7, 142.8, 100.3,
98.4, 73.6, 65.9, 42.1, 77.2, 104.0, 82.8, 59.4, 102.6, 53.7
)
),
.Names = c("trat", "parcela", "resp"),
class = "data.frame",
row.names = c(NA, -20L)
)
df$trat <- as.factor(df$trat)
df %>% kable
Controle |
1 |
115.4 |
Controle |
2 |
121.0 |
Controle |
3 |
112.3 |
Controle |
4 |
78.7 |
Controle |
5 |
65.6 |
Controle |
6 |
213.5 |
Controle |
7 |
157.5 |
Controle |
8 |
80.7 |
Controle |
9 |
142.8 |
Controle |
10 |
100.3 |
Tratada |
1 |
98.4 |
Tratada |
2 |
73.6 |
Tratada |
3 |
65.9 |
Tratada |
4 |
42.1 |
Tratada |
5 |
77.2 |
Tratada |
6 |
104.0 |
Tratada |
7 |
82.8 |
Tratada |
8 |
59.4 |
Tratada |
9 |
102.6 |
Tratada |
10 |
53.7 |
ggdensity(df$resp, fill = "lightgray")

ggqqplot(df$resp)

df %>%
group_by(trat) %>%
shapiro_test(resp) %>% kable
Controle |
resp |
0.9269365 |
0.4184447 |
Tratada |
resp |
0.9497315 |
0.6653243 |
res <- bartlett.test(resp ~ trat, data = df)
res
Bartlett test of homogeneity of variances
data: resp by trat
Bartlett's K-squared = 4.1299, df = 1, p-value = 0.04213
df %>% levene_test(resp ~ trat) %>% kable
tab <- df %>%
group_by(trat) %>%
get_summary_stats(resp, type = "mean_sd") %>%
as.data.frame()
tab %>% kable
Controle |
resp |
10 |
118.78 |
43.884 |
Tratada |
resp |
10 |
75.97 |
21.268 |
tab %>%
summarise(redução.com.tratamento = paste(round((1 - (min(mean) / max(mean))) * 100, 2), "%")) %>% kable()
stat.test <- df %>% pairwise_sign_test(resp ~ trat)
stat.test %>% kable
resp |
Controle |
Tratada |
10 |
10 |
9 |
10 |
0.022 |
0.022 |
* |
bxp <- ggpaired(df,
x = "trat", y = "resp", color = "trat",
ylab = "Peso (g) de Plantas Daninhas", xlab = "", label = T, repel = T, palette = "Dark2"
) +
theme_pubr(legend = "none")
stat.test <- stat.test %>% add_xy_position(x = "trat")
bxp + stat_pvalue_manual(stat.test) +
labs(subtitle = get_test_label(stat.test, detailed = TRUE))

17.25
df <- data.frame(
stringsAsFactors = T,
var = c(
"A", "A", "A",
"A", "A", "A", "A", "A", "A", "A", "A", "A",
"A", "A", "B", "B", "B", "B", "B", "B", "B", "B",
"B", "B", "B", "B", "B", "B", "B"
),
prod = c(
4.2, 3.5, 4.2,
5.8, 2.8, 4.8, 3.3, 5.1, 3.7, 2.5, 4.7, 5.9,
4.2, 5.2, 4.3, 2.5, 5.1, 1.8, 3.6, 3.8, 3.5, 4,
4.5, 4.5, 5.2, 4.1, 2.2, 1.7, 5
)
)
df %>% kable
A |
4.2 |
A |
3.5 |
A |
4.2 |
A |
5.8 |
A |
2.8 |
A |
4.8 |
A |
3.3 |
A |
5.1 |
A |
3.7 |
A |
2.5 |
A |
4.7 |
A |
5.9 |
A |
4.2 |
A |
5.2 |
B |
4.3 |
B |
2.5 |
B |
5.1 |
B |
1.8 |
B |
3.6 |
B |
3.8 |
B |
3.5 |
B |
4.0 |
B |
4.5 |
B |
4.5 |
B |
5.2 |
B |
4.1 |
B |
2.2 |
B |
1.7 |
B |
5.0 |
ggdensity(df$prod, fill = "lightgray")

ggqqplot(df$prod)

df %>%
group_by(var) %>%
shapiro_test(prod) %>% kable
A |
prod |
0.9700240 |
0.8769761 |
B |
prod |
0.9115877 |
0.1432172 |
res <- bartlett.test(prod ~ var, data = df)
res
Bartlett test of homogeneity of variances
data: prod by var
Bartlett's K-squared = 0.16488, df = 1, p-value = 0.6847
df %>% levene_test(prod ~ var) %>% kable
df %>%
group_by(var) %>%
get_summary_stats(prod, type = "median_iqr") %>% kable
A |
prod |
14 |
4.2 |
1.475 |
B |
prod |
15 |
4.0 |
1.500 |
bxp <- ggboxplot(
df,
x = "var", y = "prod", color = "var", palette = "jco",
ylab = "Produçao (kg)", xlab = "Variedade", add = "jitter", bxp.errorbar = T
)
stat.test <- df %>%
wilcox_test(prod ~ var) %>%
add_significance()
stat.test %>% kable
prod |
A |
B |
14 |
15 |
131 |
0.265 |
ns |
df %>% wilcox_effsize(prod ~ var) %>% kable
prod |
A |
B |
0.2109486 |
14 |
15 |
small |
stat.test <- stat.test %>% add_xy_position(x = "var")
bxp +
stat_pvalue_manual(stat.test) +
labs(subtitle = get_test_label(stat.test, detailed = TRUE)) + theme_pubr(legend = "none")

17.26
df <- data.frame(
stringsAsFactors = T,
parcela = c(
1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 1L,
2L, 3L, 4L, 5L, 6L, 7L, 8L
),
trat = c(
"controle", "controle", "controle",
"controle", "controle", "controle",
"controle", "controle", "tratada", "tratada",
"tratada", "tratada", "tratada",
"tratada", "tratada", "tratada"
),
resp = c(
103.7, 88.5, 75.4, 97.8, 93.2, 81.4,
78.1, 105.4, 98.7, 112.4, 117.3, 102.5,
114.3, 116.4, 107.8, 104.3
)
)
df %>% kable
1 |
controle |
103.7 |
2 |
controle |
88.5 |
3 |
controle |
75.4 |
4 |
controle |
97.8 |
5 |
controle |
93.2 |
6 |
controle |
81.4 |
7 |
controle |
78.1 |
8 |
controle |
105.4 |
1 |
tratada |
98.7 |
2 |
tratada |
112.4 |
3 |
tratada |
117.3 |
4 |
tratada |
102.5 |
5 |
tratada |
114.3 |
6 |
tratada |
116.4 |
7 |
tratada |
107.8 |
8 |
tratada |
104.3 |
tab <- df %>%
group_by(trat) %>%
get_summary_stats(resp, type = "common") %>%
as.data.frame()
ggdensity(df$resp, fill = "lightgray")

ggqqplot(df$resp)

df %>%
group_by(trat) %>%
shapiro_test(resp) %>% kable
controle |
resp |
0.9332002 |
0.5456486 |
tratada |
resp |
0.9316795 |
0.5314870 |
res <- bartlett.test(resp ~ trat, data = df)
res
Bartlett test of homogeneity of variances
data: resp by trat
Bartlett's K-squared = 1.6201, df = 1, p-value = 0.2031
df %>% levene_test(resp ~ trat) %>% kable
tab %>% kable
controle |
resp |
8 |
75.4 |
105.4 |
90.85 |
18.700 |
90.438 |
11.498 |
4.065 |
9.612 |
tratada |
resp |
8 |
98.7 |
117.3 |
110.10 |
10.975 |
109.213 |
6.916 |
2.445 |
5.782 |
tab %>%
summarise(ganho = paste(round((max(mean) - min(mean)) / min(mean) * 100, 2), "%")) %>%
kable()
stat.test <- df %>%
wilcox_test(resp ~ trat, detailed = T) %>%
add_significance()
stat.test %>% kable
-19.25 |
resp |
controle |
tratada |
8 |
8 |
5 |
0.00295 |
-29.7 |
-8.7 |
Wilcoxon |
two.sided |
** |
df %>% wilcox_effsize(resp ~ trat) %>% kable
resp |
controle |
tratada |
0.7088918 |
8 |
8 |
large |
bxp <- ggboxplot(df,
x = "trat", y = "resp", color = "trat",
ylab = "Peso (g) Plântula de Milho", xlab = "", add = "jitter",
palette = "Dark2", bxp.errorbar = T
) + theme_pubr(legend = "none")
stat.test <- stat.test %>% add_xy_position(x = "trat")
bxp + stat_pvalue_manual(stat.test) +
labs(
subtitle = get_test_label(stat.test, detailed = TRUE),
caption = get_pwc_label(stat.test)
)

17.27
df <- structure(list(
trat = c(
"Rizoma 1kg",
"Rizoma 1kg",
"Rizoma 1kg",
"Rizoma 1kg",
"Rizoma 1kg",
"Rizoma 2kg",
"Rizoma 2kg",
"Rizoma 2kg",
"Rizoma 2kg",
"Rizoma 2kg",
"Rizoma 3kg",
"Rizoma 3kg",
"Rizoma 3kg",
"Rizoma 3kg",
"Rizoma 3kg"
),
r = c(
"1",
"2",
"3",
"4",
"5",
"1",
"2",
"3",
"4",
"5",
"1",
"2",
"3",
"4",
"5"
),
resp = c(
7.2,
8.4,
8.2,
8.4,
7.8,
8.4,
8.8,
8.6,
9.7,
9.2,
9.0,
9.3,
9.0,
9.9,
10.1
)
),
.Names = c("trat", "r", "resp"),
class = "data.frame",
row.names = c(NA, -15L)
)
df$trat <- as.factor(df$trat)
df %>% kable
Rizoma 1kg |
1 |
7.2 |
Rizoma 1kg |
2 |
8.4 |
Rizoma 1kg |
3 |
8.2 |
Rizoma 1kg |
4 |
8.4 |
Rizoma 1kg |
5 |
7.8 |
Rizoma 2kg |
1 |
8.4 |
Rizoma 2kg |
2 |
8.8 |
Rizoma 2kg |
3 |
8.6 |
Rizoma 2kg |
4 |
9.7 |
Rizoma 2kg |
5 |
9.2 |
Rizoma 3kg |
1 |
9.0 |
Rizoma 3kg |
2 |
9.3 |
Rizoma 3kg |
3 |
9.0 |
Rizoma 3kg |
4 |
9.9 |
Rizoma 3kg |
5 |
10.1 |
df %>%
group_by(trat) %>%
get_summary_stats(resp, type = "mean") %>% kable
Rizoma 1kg |
resp |
5 |
8.00 |
Rizoma 2kg |
resp |
5 |
8.94 |
Rizoma 3kg |
resp |
5 |
9.46 |
bxp <- ggboxplot(
df,
x = "trat",
y = "resp",
color = "trat",
palette = "jco",
bxp.errorbar = T, add = "jitter"
)
gghistogram(df,
x = "resp", y = "..density..",
fill = "steelblue", bins = 4, add_density = TRUE
)

df %>%
group_by(trat) %>%
identify_outliers(resp) %>% kable
df %>%
group_by(trat) %>%
shapiro_test(resp) %>% kable
Rizoma 1kg |
resp |
0.8539288 |
0.2072593 |
Rizoma 2kg |
resp |
0.9494145 |
0.7330048 |
Rizoma 3kg |
resp |
0.8548712 |
0.2104124 |
res <- bartlett.test(resp ~ trat, data = df)
res
Bartlett test of homogeneity of variances
data: resp by trat
Bartlett's K-squared = 0.00084382, df = 2, p-value = 0.9996
df %>% levene_test(resp ~ trat) %>% kable
model <- lm(resp ~ trat, data = df)
ggqqplot(residuals(model))

res.kruskal <- df %>%
kruskal_test(resp ~ trat)
df %>% kruskal_effsize(resp ~ trat) %>% kable
resp |
15 |
0.6674474 |
eta2[H] |
large |
ggdensity(df, x = "resp", rug = TRUE, fill = "lightgray") +
stat_central_tendency(type = "median", color = "red", linetype = "dashed") +
labs(subtitle = get_test_label(res.kruskal, detailed = TRUE))

pwc2 <- df %>%
dunn_test(resp ~ trat, p.adjust.method = "bonferroni") %>%
add_significance()
pwc2 <- pwc2 %>%
add_xy_position(x = "trat")
bxp + stat_pvalue_manual(pwc2, hide.ns = T) +
labs(
subtitle = get_test_label(res.kruskal, detailed = T),
caption = get_pwc_label(pwc2)
) +
theme_pubr(legend = "none") +
ylab("Número de pencas por cacho ") +
xlab("") +
# stat_compare_means()+
theme(
legend.title = element_blank(),
text = element_text(),
axis.text.y = element_text(
angle = 0,
hjust = 1,
colour = "black"
),
axis.text.x = element_text(
angle = 0,
hjust = 0.5,
colour = "black"
)
)

17.28
df <- data.frame(
stringsAsFactors = T,
blo = c(
"b1", "b2", "b3", "b4", "b5",
"b6", "b1", "b2", "b3", "b4", "b5", "b6", "b1", "b2", "b3",
"b4", "b5", "b6", "b1", "b2", "b3", "b4", "b5", "b6"
),
var = c(
"Co 419", "Co 419", "Co 419",
"Co 419", "Co 419", "Co 419", "Co 421", "Co 421", "Co 421",
"Co 421", "Co 421", "Co 421", "CB-4170", "CB-4170",
"CB-4170", "CB-4170", "CB-4170", "CB-4170", "CB-4176",
"CB-4176", "CB-4176", "CB-4176", "CB-4176", "CB-4176"
),
resp = c(
110.6, 119.5, 120.1, 105.3,
130.8, 138.1, 116.7, 128.4, 131.5, 114.8, 146.8, 155.5,
140.3, 150, 150.9, 144.7, 153.9, 156.9, 143.4, 153.8, 151.5,
144.1, 154.6, 159.3
)
)
df %>% kable
b1 |
Co 419 |
110.6 |
b2 |
Co 419 |
119.5 |
b3 |
Co 419 |
120.1 |
b4 |
Co 419 |
105.3 |
b5 |
Co 419 |
130.8 |
b6 |
Co 419 |
138.1 |
b1 |
Co 421 |
116.7 |
b2 |
Co 421 |
128.4 |
b3 |
Co 421 |
131.5 |
b4 |
Co 421 |
114.8 |
b5 |
Co 421 |
146.8 |
b6 |
Co 421 |
155.5 |
b1 |
CB-4170 |
140.3 |
b2 |
CB-4170 |
150.0 |
b3 |
CB-4170 |
150.9 |
b4 |
CB-4170 |
144.7 |
b5 |
CB-4170 |
153.9 |
b6 |
CB-4170 |
156.9 |
b1 |
CB-4176 |
143.4 |
b2 |
CB-4176 |
153.8 |
b3 |
CB-4176 |
151.5 |
b4 |
CB-4176 |
144.1 |
b5 |
CB-4176 |
154.6 |
b6 |
CB-4176 |
159.3 |
df %>%
group_by(var) %>%
get_summary_stats(resp, type = "full") %>% kable
CB-4170 |
resp |
6 |
140.3 |
156.9 |
150.45 |
146.025 |
153.150 |
7.125 |
6.820 |
149.450 |
6.066 |
2.477 |
6.366 |
CB-4176 |
resp |
6 |
143.4 |
159.3 |
152.65 |
145.950 |
154.400 |
8.450 |
6.375 |
151.117 |
6.249 |
2.551 |
6.558 |
Co 419 |
resp |
6 |
105.3 |
138.1 |
119.80 |
112.825 |
128.125 |
15.300 |
14.974 |
120.733 |
12.213 |
4.986 |
12.816 |
Co 421 |
resp |
6 |
114.8 |
155.5 |
129.95 |
119.625 |
142.975 |
23.350 |
21.053 |
132.283 |
16.211 |
6.618 |
17.012 |
res.fried <- df %>% friedman_test(resp ~ var | blo)
res.fried %>% kable
resp |
6 |
17 |
3 |
0.0007067 |
Friedman test |
df %>% friedman_effsize(resp ~ var | blo) %>% kable
resp |
6 |
0.9444444 |
Kendall W |
large |
pwc <- df %>%
wilcox_test(resp ~ var, p.adjust.method = "bonferroni") %>%
add_significance()
pwc %>% kable
resp |
CB-4170 |
CB-4176 |
6 |
6 |
15 |
0.699 |
1.000 |
ns |
resp |
CB-4170 |
Co 419 |
6 |
6 |
36 |
0.002 |
0.013 |
* |
resp |
CB-4170 |
Co 421 |
6 |
6 |
29 |
0.093 |
0.559 |
ns |
resp |
CB-4176 |
Co 419 |
6 |
6 |
36 |
0.002 |
0.013 |
* |
resp |
CB-4176 |
Co 421 |
6 |
6 |
29 |
0.093 |
0.559 |
ns |
resp |
Co 419 |
Co 421 |
6 |
6 |
11 |
0.310 |
1.000 |
ns |
pwc <- pwc %>% add_xy_position(x = "blo")
ggboxplot(df, x = "var", y = "resp", add = "jitter", color = "var", palette = "jco", xlab = "", ylab = "Produção (t/ha)") + theme_pubr(legend = "none") +
stat_pvalue_manual(pwc, hide.ns = T) +
labs(
subtitle = get_test_label(res.fried, detailed = TRUE),
caption = get_pwc_label(pwc))

17.29
df <- data.frame(
stringsAsFactors = F,
x = c(
0.602, 0.636, 0.604, 0.548, 0.59,
0.592, 0.625, 0.641, 0.606, 0.502, 0.588,
0.594, 0.626),
y = c(
0.619, 0.62, 0.62, 0.538, 0.616,
0.601, 0.664, 0.652, 0.579, 0.501, 0.59,
0.622, 0.606))
ggdensity(df$x, fill = "lightgray")

ggqqplot(df$x)

ggdensity(df$y, fill = "lightgray")

ggqqplot(df$y)

df %>%
cor_test(
method = "spearman",
conf.level = 0.95
) %>%
add_significance() %>% kable
x |
y |
0.68 |
115.6586 |
0.0102 |
Spearman |
* |
ggscatter(df,
x = "x", y = "y",
add = "reg.line", conf.int = TRUE,
cor.coef = TRUE, cor.method = "spearman",
xlab = "DAP (Sonda Pressler)", ylab = "DAP (Seccões transversais do tronco)")

Referência
Essas análises fazem parte dos Exercícios do Livro (Paulo Vanderlei Ferreira 2018), utilizando os pacotes dplyr (Wickham et al. 2020), ggpubr (Kassambara 2020a), rstatix (Kassambara 2020b) e knitr, (Xie 2014)
Paulo Vanderlei Ferreira. 2018. Estatística Experimental Aplicada às Ciências Agrárias. Edited by Editora UFV. 1st ed. Viçosa, MG.
Xie, Yihui. 2014. “Knitr: A Comprehensive Tool for Reproducible Research in R.” In Implementing Reproducible Computational Research, edited by Victoria Stodden, Friedrich Leisch, and Roger D. Peng. Chapman; Hall/CRC. http://www.crcpress.com/product/isbn/9781466561595.
IycgLS0tDQojJyB0aXRsZTogIlRlc3RlcyBOw6NvIFBhcmFtw6l0cmljb3MiDQojJyBhdXRob3I6IENpZCBFZHNvbiBQw7N2b2FzDQojJyBiaWJsaW9ncmFwaHk6IFJwYWNrYWdlcy5iaWINCiMnIG91dHB1dDoNCiMnICAgaHRtbF9ub3RlYm9vazogDQojJyAgICAgY29kZV9mb2xkaW5nOiBzaG93DQojJyAgICAgdG9jOiB0cnVlDQojJyAgICAgdG9jX2Zsb2F0OiB0cnVlDQojJyAgICAgY29sbGFwc2VkOiB0cnVlDQojJyAtLS0NCiMrIHdhcm5pbmc9RkFMU0UsIGVjaG89VCwgbWVzc2FnZT1GQUxTRQ0KIysgc2V0dXAsIGluY2x1ZGU9RiwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRQ0KDQpwa2cgPC0gYygiZHBseXIiLA0KICAgICAgICAgImtuaXRyIiwNCiAgICAgICAgICJnZ3B1YnIiLA0KICAgICAgICAgInJzdGF0aXgiKQ0KDQpzYXBwbHkocGtnLA0KICAgICAgIGxpYnJhcnksDQogICAgICAgY2hhcmFjdGVyLm9ubHkgPSBUUlVFLA0KICAgICAgIGxvZ2ljYWwucmV0dXJuID0gVFJVRSkNCg0KDQoNCg0KIycgIyMgKipSZXN1bHRhZG9zICoqDQojJw0KDQojJyANCiMnICMjICoqMTcuMjQqKg0KIycgDQojKyBlY2hvPVQsIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTgsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UNCg0KZGYgPC0gc3RydWN0dXJlKGxpc3QoDQogIHRyYXQgPSBjKHJlcCgiQ29udHJvbGUiLCAxMCksIHJlcCgiVHJhdGFkYSIsIDEwKSksDQogIHBhcmNlbGEgPSBjKHJlcChzZXEoMToxMCksIDIpKSwNCiAgcmVzcCA9IGMoDQogICAgMTE1LjQsIDEyMSwgMTEyLjMsIDc4LjcsIDY1LjYsIDIxMy41LCAxNTcuNSwgODAuNywgMTQyLjgsIDEwMC4zLA0KICAgIDk4LjQsIDczLjYsIDY1LjksIDQyLjEsIDc3LjIsIDEwNC4wLCA4Mi44LCA1OS40LCAxMDIuNiwgNTMuNw0KICApDQopLA0KLk5hbWVzID0gYygidHJhdCIsICJwYXJjZWxhIiwgInJlc3AiKSwNCmNsYXNzID0gImRhdGEuZnJhbWUiLA0Kcm93Lm5hbWVzID0gYyhOQSwgLTIwTCkNCikNCg0KZGYkdHJhdCA8LSBhcy5mYWN0b3IoZGYkdHJhdCkNCg0KZGYgJT4lIGthYmxlDQoNCg0KZ2dkZW5zaXR5KGRmJHJlc3AsIGZpbGwgPSAibGlnaHRncmF5IikNCmdncXFwbG90KGRmJHJlc3ApDQoNCmRmICU+JSANCiAgZ3JvdXBfYnkodHJhdCkgJT4lDQogIHNoYXBpcm9fdGVzdChyZXNwKSAgJT4lIGthYmxlDQoNCg0KcmVzIDwtIGJhcnRsZXR0LnRlc3QocmVzcCB+IHRyYXQsIGRhdGEgPSBkZikNCnJlcyANCg0KDQpkZiAlPiUgbGV2ZW5lX3Rlc3QocmVzcCB+IHRyYXQpICAlPiUga2FibGUNCg0KDQp0YWIgPC0gZGYgJT4lDQogIGdyb3VwX2J5KHRyYXQpICU+JQ0KICBnZXRfc3VtbWFyeV9zdGF0cyhyZXNwLCB0eXBlID0gIm1lYW5fc2QiKSAlPiUNCiAgYXMuZGF0YS5mcmFtZSgpDQoNCnRhYiAgJT4lIGthYmxlDQoNCnRhYiAlPiUNCiAgc3VtbWFyaXNlKHJlZHXDp8Ojby5jb20udHJhdGFtZW50byA9IHBhc3RlKHJvdW5kKCgxIC0gKG1pbihtZWFuKSAvIG1heChtZWFuKSkpICogMTAwLCAyKSwgIiUiKSkgJT4lIGthYmxlKCkNCg0Kc3RhdC50ZXN0IDwtIGRmICU+JSBwYWlyd2lzZV9zaWduX3Rlc3QocmVzcCB+IHRyYXQpDQoNCnN0YXQudGVzdCAgJT4lIGthYmxlDQoNCg0KYnhwIDwtIGdncGFpcmVkKGRmLA0KICB4ID0gInRyYXQiLCB5ID0gInJlc3AiLCBjb2xvciA9ICJ0cmF0IiwNCiAgeWxhYiA9ICJQZXNvIChnKSBkZSBQbGFudGFzIERhbmluaGFzIiwgeGxhYiA9ICIiLCBsYWJlbCA9IFQsIHJlcGVsID0gVCwgcGFsZXR0ZSA9ICJEYXJrMiINCikgKw0KICB0aGVtZV9wdWJyKGxlZ2VuZCA9ICJub25lIikNCg0KDQpzdGF0LnRlc3QgPC0gc3RhdC50ZXN0ICU+JSBhZGRfeHlfcG9zaXRpb24oeCA9ICJ0cmF0IikNCg0KYnhwICsgc3RhdF9wdmFsdWVfbWFudWFsKHN0YXQudGVzdCkgKw0KICBsYWJzKHN1YnRpdGxlID0gZ2V0X3Rlc3RfbGFiZWwoc3RhdC50ZXN0LCBkZXRhaWxlZCA9IFRSVUUpKQ0KDQojJyANCiMnICMjICoqMTcuMjUqKg0KIycgDQojKyBlY2hvPVQsIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTgsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UNCg0KZGYgPC0gZGF0YS5mcmFtZSgNCiAgc3RyaW5nc0FzRmFjdG9ycyA9IFQsDQogIHZhciA9IGMoDQogICAgIkEiLCAiQSIsICJBIiwNCiAgICAiQSIsICJBIiwgIkEiLCAiQSIsICJBIiwgIkEiLCAiQSIsICJBIiwgIkEiLA0KICAgICJBIiwgIkEiLCAiQiIsICJCIiwgIkIiLCAiQiIsICJCIiwgIkIiLCAiQiIsICJCIiwNCiAgICAiQiIsICJCIiwgIkIiLCAiQiIsICJCIiwgIkIiLCAiQiINCiAgKSwNCiAgcHJvZCA9IGMoDQogICAgNC4yLCAzLjUsIDQuMiwNCiAgICA1LjgsIDIuOCwgNC44LCAzLjMsIDUuMSwgMy43LCAyLjUsIDQuNywgNS45LA0KICAgIDQuMiwgNS4yLCA0LjMsIDIuNSwgNS4xLCAxLjgsIDMuNiwgMy44LCAzLjUsIDQsDQogICAgNC41LCA0LjUsIDUuMiwgNC4xLCAyLjIsIDEuNywgNQ0KICApDQopDQoNCg0KZGYgJT4lIGthYmxlDQoNCg0KZ2dkZW5zaXR5KGRmJHByb2QsIGZpbGwgPSAibGlnaHRncmF5IikNCmdncXFwbG90KGRmJHByb2QpIA0KDQoNCmRmICU+JSANCiAgZ3JvdXBfYnkodmFyKSAlPiUNCiAgc2hhcGlyb190ZXN0KHByb2QpICAlPiUga2FibGUNCg0KDQpyZXMgPC0gYmFydGxldHQudGVzdChwcm9kIH4gdmFyLCBkYXRhID0gZGYpDQpyZXMNCg0KDQpkZiAlPiUgbGV2ZW5lX3Rlc3QocHJvZCB+IHZhcikgICU+JSBrYWJsZQ0KDQpkZiAlPiUNCiAgZ3JvdXBfYnkodmFyKSAlPiUNCiAgZ2V0X3N1bW1hcnlfc3RhdHMocHJvZCwgdHlwZSA9ICJtZWRpYW5faXFyIikgICU+JSBrYWJsZQ0KDQoNCg0KYnhwIDwtIGdnYm94cGxvdCgNCiAgZGYsDQogIHggPSAidmFyIiwgeSA9ICJwcm9kIiwgY29sb3IgPSAidmFyIiwgcGFsZXR0ZSA9ICJqY28iLA0KICB5bGFiID0gIlByb2R1w6dhbyAoa2cpIiwgeGxhYiA9ICJWYXJpZWRhZGUiLCBhZGQgPSAiaml0dGVyIiwgYnhwLmVycm9yYmFyID0gVA0KKQ0KDQoNCnN0YXQudGVzdCA8LSBkZiAlPiUNCiAgd2lsY294X3Rlc3QocHJvZCB+IHZhcikgJT4lDQogIGFkZF9zaWduaWZpY2FuY2UoKQ0Kc3RhdC50ZXN0ICAlPiUga2FibGUNCg0KDQpkZiAlPiUgd2lsY294X2VmZnNpemUocHJvZCB+IHZhcikgICU+JSBrYWJsZQ0KDQpzdGF0LnRlc3QgPC0gc3RhdC50ZXN0ICU+JSBhZGRfeHlfcG9zaXRpb24oeCA9ICJ2YXIiKQ0KYnhwICsNCiAgc3RhdF9wdmFsdWVfbWFudWFsKHN0YXQudGVzdCkgKw0KICBsYWJzKHN1YnRpdGxlID0gZ2V0X3Rlc3RfbGFiZWwoc3RhdC50ZXN0LCBkZXRhaWxlZCA9IFRSVUUpKSArIHRoZW1lX3B1YnIobGVnZW5kID0gIm5vbmUiKQ0KDQoNCiMnIA0KIycgIyMgKioxNy4yNioqDQojJyANCiMrIGVjaG89VCwgZmlnLmhlaWdodD01LCBmaWcud2lkdGg9OCwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRQ0KDQpkZiA8LSBkYXRhLmZyYW1lKA0KICBzdHJpbmdzQXNGYWN0b3JzID0gVCwNCiAgcGFyY2VsYSA9IGMoDQogICAgMUwsIDJMLCAzTCwgNEwsIDVMLCA2TCwgN0wsIDhMLCAxTCwNCiAgICAyTCwgM0wsIDRMLCA1TCwgNkwsIDdMLCA4TA0KICApLA0KICB0cmF0ID0gYygNCiAgICAiY29udHJvbGUiLCAiY29udHJvbGUiLCAiY29udHJvbGUiLA0KICAgICJjb250cm9sZSIsICJjb250cm9sZSIsICJjb250cm9sZSIsDQogICAgImNvbnRyb2xlIiwgImNvbnRyb2xlIiwgInRyYXRhZGEiLCAidHJhdGFkYSIsDQogICAgInRyYXRhZGEiLCAidHJhdGFkYSIsICJ0cmF0YWRhIiwNCiAgICAidHJhdGFkYSIsICJ0cmF0YWRhIiwgInRyYXRhZGEiDQogICksDQogIHJlc3AgPSBjKA0KICAgIDEwMy43LCA4OC41LCA3NS40LCA5Ny44LCA5My4yLCA4MS40LA0KICAgIDc4LjEsIDEwNS40LCA5OC43LCAxMTIuNCwgMTE3LjMsIDEwMi41LA0KICAgIDExNC4zLCAxMTYuNCwgMTA3LjgsIDEwNC4zDQogICkNCikNCg0KDQpkZiAgJT4lIGthYmxlDQoNCg0KdGFiIDwtIGRmICU+JQ0KICBncm91cF9ieSh0cmF0KSAlPiUNCiAgZ2V0X3N1bW1hcnlfc3RhdHMocmVzcCwgdHlwZSA9ICJjb21tb24iKSAlPiUNCiAgYXMuZGF0YS5mcmFtZSgpDQoNCg0KDQpnZ2RlbnNpdHkoZGYkcmVzcCwgZmlsbCA9ICJsaWdodGdyYXkiKQ0KZ2dxcXBsb3QoZGYkcmVzcCkNCg0KZGYgJT4lIA0KICBncm91cF9ieSh0cmF0KSAlPiUNCiAgc2hhcGlyb190ZXN0KHJlc3ApICAlPiUga2FibGUNCg0KDQpyZXMgPC0gYmFydGxldHQudGVzdChyZXNwIH4gdHJhdCwgZGF0YSA9IGRmKQ0KcmVzDQoNCg0KZGYgJT4lIGxldmVuZV90ZXN0KHJlc3AgfiB0cmF0KSAgJT4lIGthYmxlDQoNCg0KdGFiICAlPiUga2FibGUNCg0KdGFiICU+JQ0KICBzdW1tYXJpc2UoZ2FuaG8gPSBwYXN0ZShyb3VuZCgobWF4KG1lYW4pIC0gbWluKG1lYW4pKSAvIG1pbihtZWFuKSAqIDEwMCwgMiksICIlIikpICU+JQ0KICBrYWJsZSgpDQoNCnN0YXQudGVzdCA8LSBkZiAlPiUNCiAgd2lsY294X3Rlc3QocmVzcCB+IHRyYXQsIGRldGFpbGVkID0gVCkgJT4lDQogIGFkZF9zaWduaWZpY2FuY2UoKQ0Kc3RhdC50ZXN0ICAlPiUga2FibGUNCg0KZGYgJT4lIHdpbGNveF9lZmZzaXplKHJlc3AgfiB0cmF0KSAlPiUga2FibGUNCg0KDQoNCmJ4cCA8LSBnZ2JveHBsb3QoZGYsDQogIHggPSAidHJhdCIsIHkgPSAicmVzcCIsIGNvbG9yID0gInRyYXQiLA0KICB5bGFiID0gIlBlc28gKGcpIFBsw6JudHVsYSBkZSBNaWxobyIsIHhsYWIgPSAiIiwgYWRkID0gImppdHRlciIsDQogIHBhbGV0dGUgPSAiRGFyazIiLCBieHAuZXJyb3JiYXIgPSBUDQopICsgdGhlbWVfcHVicihsZWdlbmQgPSAibm9uZSIpDQoNCg0Kc3RhdC50ZXN0IDwtIHN0YXQudGVzdCAlPiUgYWRkX3h5X3Bvc2l0aW9uKHggPSAidHJhdCIpDQoNCmJ4cCArIHN0YXRfcHZhbHVlX21hbnVhbChzdGF0LnRlc3QpICsNCiAgbGFicygNCiAgICBzdWJ0aXRsZSA9IGdldF90ZXN0X2xhYmVsKHN0YXQudGVzdCwgZGV0YWlsZWQgPSBUUlVFKSwNCiAgICBjYXB0aW9uID0gZ2V0X3B3Y19sYWJlbChzdGF0LnRlc3QpDQogICkNCg0KDQojJyANCiMnICMjICoqMTcuMjcqKg0KIycgDQojKyBlY2hvPVQsIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTgsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UNCg0KZGYgPC0gc3RydWN0dXJlKGxpc3QoDQogIHRyYXQgPSBjKA0KICAgICJSaXpvbWEgMWtnIiwNCiAgICAiUml6b21hIDFrZyIsDQogICAgIlJpem9tYSAxa2ciLA0KICAgICJSaXpvbWEgMWtnIiwNCiAgICAiUml6b21hIDFrZyIsDQogICAgIlJpem9tYSAya2ciLA0KICAgICJSaXpvbWEgMmtnIiwNCiAgICAiUml6b21hIDJrZyIsDQogICAgIlJpem9tYSAya2ciLA0KICAgICJSaXpvbWEgMmtnIiwNCiAgICAiUml6b21hIDNrZyIsDQogICAgIlJpem9tYSAza2ciLA0KICAgICJSaXpvbWEgM2tnIiwNCiAgICAiUml6b21hIDNrZyIsDQogICAgIlJpem9tYSAza2ciDQogICksDQogIHIgPSBjKA0KICAgICIxIiwNCiAgICAiMiIsDQogICAgIjMiLA0KICAgICI0IiwNCiAgICAiNSIsDQogICAgIjEiLA0KICAgICIyIiwNCiAgICAiMyIsDQogICAgIjQiLA0KICAgICI1IiwNCiAgICAiMSIsDQogICAgIjIiLA0KICAgICIzIiwNCiAgICAiNCIsDQogICAgIjUiDQogICksDQogIHJlc3AgPSBjKA0KICAgIDcuMiwNCiAgICA4LjQsDQogICAgOC4yLA0KICAgIDguNCwNCiAgICA3LjgsDQogICAgOC40LA0KICAgIDguOCwNCiAgICA4LjYsDQogICAgOS43LA0KICAgIDkuMiwNCiAgICA5LjAsDQogICAgOS4zLA0KICAgIDkuMCwNCiAgICA5LjksDQogICAgMTAuMQ0KICApDQopLA0KLk5hbWVzID0gYygidHJhdCIsICJyIiwgInJlc3AiKSwNCmNsYXNzID0gImRhdGEuZnJhbWUiLA0Kcm93Lm5hbWVzID0gYyhOQSwgLTE1TCkNCikNCmRmJHRyYXQgPC0gYXMuZmFjdG9yKGRmJHRyYXQpDQpkZiAlPiUga2FibGUNCg0KZGYgJT4lDQogIGdyb3VwX2J5KHRyYXQpICU+JQ0KICBnZXRfc3VtbWFyeV9zdGF0cyhyZXNwLCB0eXBlID0gIm1lYW4iKSAgJT4lIGthYmxlDQoNCmJ4cCA8LSBnZ2JveHBsb3QoDQogIGRmLA0KICB4ID0gInRyYXQiLA0KICB5ID0gInJlc3AiLA0KICBjb2xvciA9ICJ0cmF0IiwNCiAgcGFsZXR0ZSA9ICJqY28iLA0KICBieHAuZXJyb3JiYXIgPSBULCBhZGQgPSAiaml0dGVyIg0KKQ0KDQoNCmdnaGlzdG9ncmFtKGRmLA0KICB4ID0gInJlc3AiLCB5ID0gIi4uZGVuc2l0eS4uIiwNCiAgZmlsbCA9ICJzdGVlbGJsdWUiLCBiaW5zID0gNCwgYWRkX2RlbnNpdHkgPSBUUlVFDQopDQoNCmRmICU+JQ0KICBncm91cF9ieSh0cmF0KSAlPiUNCiAgaWRlbnRpZnlfb3V0bGllcnMocmVzcCkgICU+JSBrYWJsZQ0KDQpkZiAlPiUNCiAgZ3JvdXBfYnkodHJhdCkgJT4lDQogIHNoYXBpcm9fdGVzdChyZXNwKSAlPiUga2FibGUNCg0KDQoNCg0KcmVzIDwtIGJhcnRsZXR0LnRlc3QocmVzcCB+IHRyYXQsIGRhdGEgPSBkZikNCnJlcw0KDQoNCmRmICU+JSBsZXZlbmVfdGVzdChyZXNwIH4gdHJhdCkgICU+JSBrYWJsZQ0KDQptb2RlbCA8LSBsbShyZXNwIH4gdHJhdCwgZGF0YSA9IGRmKQ0KZ2dxcXBsb3QocmVzaWR1YWxzKG1vZGVsKSkNCg0KcmVzLmtydXNrYWwgPC0gZGYgJT4lDQogIGtydXNrYWxfdGVzdChyZXNwIH4gdHJhdCkNCg0KZGYgJT4lIGtydXNrYWxfZWZmc2l6ZShyZXNwIH4gdHJhdCkgICU+JSBrYWJsZQ0KDQpnZ2RlbnNpdHkoZGYsIHggPSAicmVzcCIsIHJ1ZyA9IFRSVUUsIGZpbGwgPSAibGlnaHRncmF5IikgKw0KICBzdGF0X2NlbnRyYWxfdGVuZGVuY3kodHlwZSA9ICJtZWRpYW4iLCBjb2xvciA9ICJyZWQiLCBsaW5ldHlwZSA9ICJkYXNoZWQiKSArDQogIGxhYnMoc3VidGl0bGUgPSBnZXRfdGVzdF9sYWJlbChyZXMua3J1c2thbCwgZGV0YWlsZWQgPSBUUlVFKSkNCg0KcHdjMiA8LSBkZiAlPiUNCiAgZHVubl90ZXN0KHJlc3AgfiB0cmF0LCBwLmFkanVzdC5tZXRob2QgPSAiYm9uZmVycm9uaSIpICU+JQ0KICBhZGRfc2lnbmlmaWNhbmNlKCkNCg0KcHdjMiA8LSBwd2MyICU+JQ0KICBhZGRfeHlfcG9zaXRpb24oeCA9ICJ0cmF0IikNCg0KDQpieHAgKyBzdGF0X3B2YWx1ZV9tYW51YWwocHdjMiwgaGlkZS5ucyA9IFQpICsNCiAgbGFicygNCiAgICBzdWJ0aXRsZSA9IGdldF90ZXN0X2xhYmVsKHJlcy5rcnVza2FsLCBkZXRhaWxlZCA9IFQpLA0KICAgIGNhcHRpb24gPSBnZXRfcHdjX2xhYmVsKHB3YzIpDQogICkgKw0KICB0aGVtZV9wdWJyKGxlZ2VuZCA9ICJub25lIikgKw0KICB5bGFiKCJOw7ptZXJvIGRlIHBlbmNhcyBwb3IgY2FjaG8gIikgKw0KICB4bGFiKCIiKSArDQogICMgc3RhdF9jb21wYXJlX21lYW5zKCkrDQogIHRoZW1lKA0KICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KCksDQogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoDQogICAgICBhbmdsZSA9IDAsDQogICAgICBoanVzdCA9IDEsDQogICAgICBjb2xvdXIgPSAiYmxhY2siDQogICAgKSwNCiAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dCgNCiAgICAgIGFuZ2xlID0gMCwNCiAgICAgIGhqdXN0ID0gMC41LA0KICAgICAgY29sb3VyID0gImJsYWNrIg0KICAgICkNCiAgKQ0KDQojJyANCiMnICMjICoqMTcuMjgqKg0KIycgDQojKyBlY2hvPVQsIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTgsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UNCg0KZGYgPC0gZGF0YS5mcmFtZSgNCiAgc3RyaW5nc0FzRmFjdG9ycyA9IFQsDQogIGJsbyA9IGMoDQogICAgImIxIiwgImIyIiwgImIzIiwgImI0IiwgImI1IiwNCiAgICAiYjYiLCAiYjEiLCAiYjIiLCAiYjMiLCAiYjQiLCAiYjUiLCAiYjYiLCAiYjEiLCAiYjIiLCAiYjMiLA0KICAgICJiNCIsICJiNSIsICJiNiIsICJiMSIsICJiMiIsICJiMyIsICJiNCIsICJiNSIsICJiNiINCiAgKSwNCiAgdmFyID0gYygNCiAgICAiQ28gNDE5IiwgIkNvIDQxOSIsICJDbyA0MTkiLA0KICAgICJDbyA0MTkiLCAiQ28gNDE5IiwgIkNvIDQxOSIsICJDbyA0MjEiLCAiQ28gNDIxIiwgIkNvIDQyMSIsDQogICAgIkNvIDQyMSIsICJDbyA0MjEiLCAiQ28gNDIxIiwgIkNCLTQxNzAiLCAiQ0ItNDE3MCIsDQogICAgIkNCLTQxNzAiLCAiQ0ItNDE3MCIsICJDQi00MTcwIiwgIkNCLTQxNzAiLCAiQ0ItNDE3NiIsDQogICAgIkNCLTQxNzYiLCAiQ0ItNDE3NiIsICJDQi00MTc2IiwgIkNCLTQxNzYiLCAiQ0ItNDE3NiINCiAgKSwNCiAgcmVzcCA9IGMoDQogICAgMTEwLjYsIDExOS41LCAxMjAuMSwgMTA1LjMsDQogICAgMTMwLjgsIDEzOC4xLCAxMTYuNywgMTI4LjQsIDEzMS41LCAxMTQuOCwgMTQ2LjgsIDE1NS41LA0KICAgIDE0MC4zLCAxNTAsIDE1MC45LCAxNDQuNywgMTUzLjksIDE1Ni45LCAxNDMuNCwgMTUzLjgsIDE1MS41LA0KICAgIDE0NC4xLCAxNTQuNiwgMTU5LjMNCiAgKQ0KKQ0KDQpkZiAlPiUga2FibGUNCg0KZGYgJT4lDQogIGdyb3VwX2J5KHZhcikgJT4lDQogIGdldF9zdW1tYXJ5X3N0YXRzKHJlc3AsIHR5cGUgPSAiZnVsbCIpICU+JSBrYWJsZQ0KDQpyZXMuZnJpZWQgPC0gZGYgJT4lIGZyaWVkbWFuX3Rlc3QocmVzcCB+IHZhciB8IGJsbykNCnJlcy5mcmllZCAlPiUga2FibGUNCg0KZGYgJT4lIGZyaWVkbWFuX2VmZnNpemUocmVzcCB+IHZhciB8IGJsbykgJT4lIGthYmxlDQoNCnB3YyA8LSBkZiAlPiUNCiAgd2lsY294X3Rlc3QocmVzcCB+IHZhciwgcC5hZGp1c3QubWV0aG9kID0gImJvbmZlcnJvbmkiKSAlPiUNCiAgYWRkX3NpZ25pZmljYW5jZSgpDQpwd2MgJT4lIGthYmxlDQoNCg0KcHdjIDwtIHB3YyAlPiUgYWRkX3h5X3Bvc2l0aW9uKHggPSAiYmxvIikNCmdnYm94cGxvdChkZiwgeCA9ICJ2YXIiLCB5ID0gInJlc3AiLCBhZGQgPSAiaml0dGVyIiwgY29sb3IgPSAidmFyIiwgcGFsZXR0ZSA9ICJqY28iLCB4bGFiID0gIiIsIHlsYWIgPSAiUHJvZHXDp8OjbyAodC9oYSkiKSArIHRoZW1lX3B1YnIobGVnZW5kID0gIm5vbmUiKSArDQogIHN0YXRfcHZhbHVlX21hbnVhbChwd2MsIGhpZGUubnMgPSBUKSArDQogIGxhYnMoDQogICAgc3VidGl0bGUgPSBnZXRfdGVzdF9sYWJlbChyZXMuZnJpZWQsIGRldGFpbGVkID0gVFJVRSksDQogICAgY2FwdGlvbiA9IGdldF9wd2NfbGFiZWwocHdjKSkNCg0KDQoNCiMnIA0KIycgIyMgKioxNy4yOSoqDQojJyANCiMrIGVjaG89VCwgZmlnLmhlaWdodD01LCBmaWcud2lkdGg9OCwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRQ0KDQpkZiA8LSBkYXRhLmZyYW1lKA0KICBzdHJpbmdzQXNGYWN0b3JzID0gRiwNCiAgeCA9IGMoDQogICAgMC42MDIsIDAuNjM2LCAwLjYwNCwgMC41NDgsIDAuNTksDQogICAgMC41OTIsIDAuNjI1LCAwLjY0MSwgMC42MDYsIDAuNTAyLCAwLjU4OCwNCiAgICAwLjU5NCwgMC42MjYpLA0KICB5ID0gYygNCiAgICAwLjYxOSwgMC42MiwgMC42MiwgMC41MzgsIDAuNjE2LA0KICAgIDAuNjAxLCAwLjY2NCwgMC42NTIsIDAuNTc5LCAwLjUwMSwgMC41OSwNCiAgICAwLjYyMiwgMC42MDYpKQ0KDQpnZ2RlbnNpdHkoZGYkeCwgZmlsbCA9ICJsaWdodGdyYXkiKQ0KZ2dxcXBsb3QoZGYkeCkNCg0KZ2dkZW5zaXR5KGRmJHksIGZpbGwgPSAibGlnaHRncmF5IikNCmdncXFwbG90KGRmJHkpDQoNCg0KZGYgJT4lDQogIGNvcl90ZXN0KA0KICAgIG1ldGhvZCA9ICJzcGVhcm1hbiIsDQogICAgY29uZi5sZXZlbCA9IDAuOTUNCiAgKSAlPiUNCiAgYWRkX3NpZ25pZmljYW5jZSgpICU+JSBrYWJsZQ0KDQoNCmdnc2NhdHRlcihkZiwNCiAgeCA9ICJ4IiwgeSA9ICJ5IiwNCiAgYWRkID0gInJlZy5saW5lIiwgY29uZi5pbnQgPSBUUlVFLA0KICBjb3IuY29lZiA9IFRSVUUsIGNvci5tZXRob2QgPSAic3BlYXJtYW4iLA0KICB4bGFiID0gIkRBUCAoU29uZGEgUHJlc3NsZXIpIiwgeWxhYiA9ICJEQVAgKFNlY2PDtWVzIHRyYW5zdmVyc2FpcyBkbyB0cm9uY28pIikNCg0KDQojJyANCiMnICMjICoqUmVmZXLDqm5jaWEqKg0KIycgRXNzYXMgYW7DoWxpc2VzIGZhemVtIHBhcnRlIGRvcyBFeGVyY8OtY2lvcyBkbyBMaXZybyBbQFBhdWxvVmFuZGVybGVpRmVycmVpcmEyMDE4XSwgdXRpbGl6YW5kbyBvcyBwYWNvdGVzICpkcGx5ciogW0BkcGx5cl0sICpnZ3B1YnIqIFtAZ2dwdWJyXSwgKnJzdGF0aXgqIFtAcnN0YXRpeF0gZSAqa25pdHIqLCBbQGtuaXRyXQ==