library(tidyverse)
library(dplyr)
library(agricolae)
library(psych)
## CARREGAMENTO E LIMPEZA DOS DADOS
df = read.csv("Dataset.csv", stringsAsFactors = FALSE)
###################################################################################
my_fun <- function(x) {
x %>%
mutate(TRATAMENTO = case_when(TRATAMENTO == 'T1R1' ~'T1',
TRATAMENTO == 'T1R2' ~'T1',
TRATAMENTO == 'T1R3' ~'T1',
TRATAMENTO == 'T1R4' ~'T1',
TRATAMENTO == 'T2R1' ~'T2',
TRATAMENTO == 'T2R2' ~'T2',
TRATAMENTO == 'T2R3' ~'T2',
TRATAMENTO == 'T2R4' ~'T2',
TRATAMENTO == 'T3R1' ~'T3',
TRATAMENTO == 'T3R2' ~'T3',
TRATAMENTO == 'T3R3' ~'T3',
TRATAMENTO == 'T3R4' ~'T3',
TRATAMENTO == 'T4R1' ~'T4',
TRATAMENTO == 'T4R2' ~'T4',
TRATAMENTO == 'T4R3' ~'T4',
TRATAMENTO == 'T4R4' ~'T4',
TRATAMENTO == 'T5R1' ~'T5',
TRATAMENTO == 'T5R2' ~'T5',
TRATAMENTO == 'T5R3' ~'T5',
TRATAMENTO == 'T5R4' ~'T5',
TRATAMENTO == 'T6R1' ~'T6',
TRATAMENTO == 'T6R2' ~'T6',
TRATAMENTO == 'T6R3' ~'T6',
TRATAMENTO == 'T6R4' ~'T6',
TRATAMENTO == 'T7R1' ~'T7',
TRATAMENTO == 'T7R2' ~'T7',
TRATAMENTO == 'T7R3' ~'T7',
TRATAMENTO == 'T7R4' ~'T7',
TRATAMENTO == 'T8R1' ~'T8',
TRATAMENTO == 'T8R2' ~'T8',
TRATAMENTO == 'T8R3' ~'T8',
TRATAMENTO == 'T8R4' ~'T8',
TRATAMENTO == 'T9R1' ~'T9',
TRATAMENTO == 'T9R2' ~'T9',
TRATAMENTO == 'T9R3' ~'T9',
TRATAMENTO == 'T9R4' ~'T9',
TRATAMENTO == 'T10R1' ~'T10',
TRATAMENTO == 'T10R2' ~'T10',
TRATAMENTO == 'T10R3' ~'T10',
TRATAMENTO == 'T10R4' ~'T10',
TRATAMENTO == 'T11R1' ~'T11',
TRATAMENTO == 'T11R2' ~'T11',
TRATAMENTO == 'T11R3' ~'T11',
TRATAMENTO == 'T11R4' ~'T11',
TRATAMENTO == 'T12R1' ~'T12',
TRATAMENTO == 'T12R2' ~'T12',
TRATAMENTO == 'T12R3' ~'T12',
TRATAMENTO == 'T12R4' ~'T12'))
}
################### Filtering treatments ###################
target <- c("T1R1", "T1R2", "T1R3", "T1R4", "T4R1", "T4R2", "T4R3", "T4R4",
"T5R1", "T5R2", "T5R3", "T5R4", "T6R1", "T6R2", "T6R3", "T6R4",
"T11R1", "T11R2", "T11R3", "T11R4",
"T12R1", "T12R2", "T12R3", "T12R4")
#filter(dat, name %in% target)
df <- df %>%
filter(TRATAMENTO %in% target)
## Organiza os Dataframes (Remoção de outliers)
## e cálculo da AUDPC
D1 = df %>%
group_by(TRATAMENTO) %>%
mutate(DIPLOCARPON.In = ifelse((abs(DIPLOCARPON.In - median(DIPLOCARPON.In)) > 2*sd(DIPLOCARPON.In)), mean(DIPLOCARPON.In), DIPLOCARPON.In)) %>%
select(SEMANA, TRATAMENTO, DIPLOCARPON.In)
D2 = df %>%
group_by(TRATAMENTO) %>%
mutate(DIPLOCARPON.Sev = ifelse((abs(DIPLOCARPON.Sev - median(DIPLOCARPON.Sev)) > 2*sd(DIPLOCARPON.Sev)), mean(DIPLOCARPON.Sev), DIPLOCARPON.Sev)) %>%
select(SEMANA, TRATAMENTO, DIPLOCARPON.Sev)
D3 = df %>%
group_by(TRATAMENTO) %>%
mutate(MICOSFAERELA.In = ifelse(!(abs(MICOSFAERELA.In - median(MICOSFAERELA.In)) > 2*sd(MICOSFAERELA.In)), mean(MICOSFAERELA.In), MICOSFAERELA.In)) %>%
select(SEMANA, TRATAMENTO, MICOSFAERELA.In)
D4 = df %>%
group_by(TRATAMENTO) %>%
mutate(MICOSFAERELA.Sev = ifelse((abs(MICOSFAERELA.Sev - median(MICOSFAERELA.Sev)) > 2*sd(MICOSFAERELA.Sev)), mean(MICOSFAERELA.Sev), MICOSFAERELA.Sev)) %>%
select(SEMANA, TRATAMENTO, MICOSFAERELA.Sev)
D5 = df %>%
group_by(TRATAMENTO) %>%
mutate(ANTRACNOSE.In = ifelse((abs(ANTRACNOSE.In - median(ANTRACNOSE.In)) > 2*sd(ANTRACNOSE.In)), mean(ANTRACNOSE.In), ANTRACNOSE.In)) %>%
select(SEMANA, TRATAMENTO, ANTRACNOSE.In)
D6 = df %>%
group_by(TRATAMENTO) %>%
mutate(ANTRACNOSE.Sev = ifelse(!(abs(ANTRACNOSE.Sev - median(ANTRACNOSE.Sev)) > 2*sd(ANTRACNOSE.Sev)), mean(ANTRACNOSE.Sev), ANTRACNOSE.Sev)) %>%
select(SEMANA, TRATAMENTO, ANTRACNOSE.Sev)
D7 = df %>%
group_by(TRATAMENTO) %>%
mutate(BOTRYTIS.Inf = ifelse(!(abs(BOTRYTIS.Inf - median(BOTRYTIS.Inf)) > 2*sd(BOTRYTIS.Inf)), mean(BOTRYTIS.Inf), BOTRYTIS.Inf)) %>%
select(SEMANA, TRATAMENTO, BOTRYTIS.Inf)
###### AUDPC FROM outliers D(*) dataframe
###################################################
T1_AUDPC <- D1 %>%
group_by(TRATAMENTO) %>%
summarise(TRATAMENTO = unique(TRATAMENTO),
DIPLOCARPON.In=audpc(DIPLOCARPON.In,SEMANA)) %>%
my_fun
T2_AUDPC <- D2 %>%
group_by(TRATAMENTO) %>%
summarise(TRATAMENTO = unique(TRATAMENTO),
DIPLOCARPON.Sev=audpc(DIPLOCARPON.Sev,SEMANA)) %>%
my_fun
T3_AUDPC <- D3 %>%
group_by(TRATAMENTO) %>%
summarise(TRATAMENTO = unique(TRATAMENTO),
MICOSFAERELA.In=audpc(MICOSFAERELA.In,SEMANA)) %>%
my_fun
T4_AUDPC <- D4 %>%
group_by(TRATAMENTO) %>%
summarise(TRATAMENTO = unique(TRATAMENTO),
MICOSFAERELA.Sev=audpc(MICOSFAERELA.Sev,SEMANA)) %>%
my_fun
T5_AUDPC <- D5 %>%
group_by(TRATAMENTO) %>%
summarise(TRATAMENTO = unique(TRATAMENTO),
ANTRACNOSE.In=audpc(ANTRACNOSE.In,SEMANA)) %>%
my_fun
T6_AUDPC <- D6 %>%
group_by(TRATAMENTO) %>%
summarise(TRATAMENTO = unique(TRATAMENTO),
ANTRACNOSE.Sev=audpc(ANTRACNOSE.Sev,SEMANA)) %>%
my_fun
T7_AUDPC <- D7 %>%
group_by(TRATAMENTO) %>%
summarise(TRATAMENTO = unique(TRATAMENTO),
BOTRYTIS.Inf=audpc(BOTRYTIS.Inf,SEMANA)) %>%
my_fun
#################################################################
####################### DIPLOCARPON.In ##########################
#################################################################
### Plot Boxplot AUDPC
T1_AUDPC %>%
ggplot(aes(TRATAMENTO, DIPLOCARPON.In)) +
geom_jitter(size=3, width = .1)+
geom_boxplot(size=1)

ANOVA_audpc<-aov(DIPLOCARPON.In~TRATAMENTO,T1_AUDPC)
res <- ANOVA_audpc$residuals
shapiro.test(res)
Shapiro-Wilk normality test
data: res
W = 0.97139, p-value = 0.7013
summary(ANOVA_audpc)
Df Sum Sq Mean Sq F value Pr(>F)
TRATAMENTO 5 2103 420.6 0.826 0.547
Residuals 18 9164 509.1
TukeyHSD(ANOVA_audpc)
Tukey multiple comparisons of means
95% family-wise confidence level
Fit: aov(formula = DIPLOCARPON.In ~ TRATAMENTO, data = T1_AUDPC)
$TRATAMENTO
diff lwr upr p adj
T11-T1 -23.350 -74.05456 27.35456 0.6900424
T12-T1 -26.700 -77.40456 24.00456 0.5646125
T4-T1 -14.525 -65.22956 36.17956 0.9387931
T5-T1 -26.950 -77.65456 23.75456 0.5552296
T6-T1 -15.675 -66.37956 35.02956 0.9176790
T12-T11 -3.350 -54.05456 47.35456 0.9999327
T4-T11 8.825 -41.87956 59.52956 0.9928776
T5-T11 -3.600 -54.30456 47.10456 0.9999041
T6-T11 7.675 -43.02956 58.37956 0.9962719
T4-T12 12.175 -38.52956 62.87956 0.9703634
T5-T12 -0.250 -50.95456 50.45456 1.0000000
T6-T12 11.025 -39.67956 61.72956 0.9806730
T5-T4 -12.425 -63.12956 38.27956 0.9677028
T6-T4 -1.150 -51.85456 49.55456 0.9999997
T6-T5 11.275 -39.42956 61.97956 0.9786896
#################################################################
####################### DIPLOCARPON.Sev ##########################
#################################################################
### Plot Boxplot AUDPC
T2_AUDPC %>%
ggplot(aes(TRATAMENTO, DIPLOCARPON.Sev)) +
geom_jitter(size=3, width = .1)+
geom_boxplot(size=1)

ANOVA_audpc<-aov(DIPLOCARPON.Sev~TRATAMENTO,T2_AUDPC)
res <- ANOVA_audpc$residuals
shapiro.test(res)
Shapiro-Wilk normality test
data: res
W = 0.9344, p-value = 0.1223
summary(ANOVA_audpc)
Df Sum Sq Mean Sq F value Pr(>F)
TRATAMENTO 5 8.17 1.634 0.311 0.9
Residuals 18 94.68 5.260
TukeyHSD(ANOVA_audpc)
Tukey multiple comparisons of means
95% family-wise confidence level
Fit: aov(formula = DIPLOCARPON.Sev ~ TRATAMENTO, data = T2_AUDPC)
$TRATAMENTO
diff lwr upr p adj
T11-T1 0.4750 -4.678821 5.628821 0.9996549
T12-T1 0.3500 -4.803821 5.503821 0.9999229
T4-T1 -0.4375 -5.591321 4.716321 0.9997692
T5-T1 -0.5000 -5.653821 4.653821 0.9995569
T6-T1 -1.2500 -6.403821 3.903821 0.9690760
T12-T11 -0.1250 -5.278821 5.028821 0.9999995
T4-T11 -0.9125 -6.066321 4.241321 0.9922967
T5-T11 -0.9750 -6.128821 4.178821 0.9895909
T6-T11 -1.7250 -6.878821 3.428821 0.8892869
T4-T12 -0.7875 -5.941321 4.366321 0.9961039
T5-T12 -0.8500 -6.003821 4.303821 0.9944417
T6-T12 -1.6000 -6.753821 3.553821 0.9163466
T5-T4 -0.0625 -5.216321 5.091321 1.0000000
T6-T4 -0.8125 -5.966321 4.341321 0.9954921
T6-T5 -0.7500 -5.903821 4.403821 0.9969011
#################################################################
####################### MICOSFAERELA.In ##########################
#################################################################
### Plot Boxplot AUDPC
T3_AUDPC %>%
ggplot(aes(TRATAMENTO, MICOSFAERELA.In)) +
geom_jitter(size=3, width = .1)+
geom_boxplot(size=1)

ANOVA_audpc<-aov(MICOSFAERELA.In~TRATAMENTO,T3_AUDPC)
res <- ANOVA_audpc$residuals
shapiro.test(res)
Shapiro-Wilk normality test
data: res
W = 0.97509, p-value = 0.7913
summary(ANOVA_audpc)
Df Sum Sq Mean Sq F value Pr(>F)
TRATAMENTO 5 302.2 60.45 1.371 0.281
Residuals 18 793.4 44.08
TukeyHSD(ANOVA_audpc)
Tukey multiple comparisons of means
95% family-wise confidence level
Fit: aov(formula = MICOSFAERELA.In ~ TRATAMENTO, data = T3_AUDPC)
$TRATAMENTO
diff lwr upr p adj
T11-T1 6.6375 -8.28225 21.55725 0.7187436
T12-T1 2.4125 -12.50725 17.33225 0.9949281
T4-T1 -3.1375 -18.05725 11.78225 0.9833091
T5-T1 -3.1875 -18.10725 11.73225 0.9821068
T6-T1 -2.3875 -17.30725 12.53225 0.9951676
T12-T11 -4.2250 -19.14475 10.69475 0.9415314
T4-T11 -9.7750 -24.69475 5.14475 0.3387885
T5-T11 -9.8250 -24.74475 5.09475 0.3336763
T6-T11 -9.0250 -23.94475 5.89475 0.4209470
T4-T12 -5.5500 -20.46975 9.36975 0.8394883
T5-T12 -5.6000 -20.51975 9.31975 0.8345588
T6-T12 -4.8000 -19.71975 10.11975 0.9043126
T5-T4 -0.0500 -14.96975 14.86975 1.0000000
T6-T4 0.7500 -14.16975 15.66975 0.9999826
T6-T5 0.8000 -14.11975 15.71975 0.9999761
#################################################################
####################### MICOSFAERELA.Sev ##########################
#################################################################
### Plot Boxplot AUDPC
T4_AUDPC %>%
ggplot(aes(TRATAMENTO, MICOSFAERELA.Sev)) +
geom_jitter(size=3, width = .1)+
geom_boxplot(size=1)

ANOVA_audpc<-aov(MICOSFAERELA.Sev~TRATAMENTO,T4_AUDPC)
res <- ANOVA_audpc$residuals
shapiro.test(res)
Shapiro-Wilk normality test
data: res
W = 0.9831, p-value = 0.9453
summary(ANOVA_audpc)
Df Sum Sq Mean Sq F value Pr(>F)
TRATAMENTO 5 90.97 18.195 2.683 0.0556 .
Residuals 18 122.06 6.781
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
TukeyHSD(ANOVA_audpc)
Tukey multiple comparisons of means
95% family-wise confidence level
Fit: aov(formula = MICOSFAERELA.Sev ~ TRATAMENTO, data = T4_AUDPC)
$TRATAMENTO
diff lwr upr p adj
T11-T1 1.5125 -4.339347 7.3643473 0.9596492
T12-T1 -1.1625 -7.014347 4.6893473 0.9870357
T4-T1 -3.3375 -9.189347 2.5143473 0.4825939
T5-T1 -3.7125 -9.564347 2.1393473 0.3715049
T6-T1 -3.2875 -9.139347 2.5643473 0.4983327
T12-T11 -2.6750 -8.526847 3.1768473 0.6963232
T4-T11 -4.8500 -10.701847 1.0018473 0.1393177
T5-T11 -5.2250 -11.076847 0.6268473 0.0962091
T6-T11 -4.8000 -10.651847 1.0518473 0.1461546
T4-T12 -2.1750 -8.026847 3.6768473 0.8399445
T5-T12 -2.5500 -8.401847 3.3018473 0.7351471
T6-T12 -2.1250 -7.976847 3.7268473 0.8521707
T5-T4 -0.3750 -6.226847 5.4768473 0.9999421
T6-T4 0.0500 -5.801847 5.9018473 1.0000000
T6-T5 0.4250 -5.426847 6.2768473 0.9998927
#################################################################
####################### ANTRACNOSE.In ##########################
#################################################################
### Plot Boxplot AUDPC
T5_AUDPC %>%
ggplot(aes(TRATAMENTO, ANTRACNOSE.In)) +
geom_jitter(size=3, width = .1)+
geom_boxplot(size=1)

ANOVA_audpc<-aov(ANTRACNOSE.In~TRATAMENTO,T5_AUDPC)
res <- ANOVA_audpc$residuals
shapiro.test(res)
Shapiro-Wilk normality test
data: res
W = 0.96918, p-value = 0.6468
summary(ANOVA_audpc)
Df Sum Sq Mean Sq F value Pr(>F)
TRATAMENTO 5 1207 241.36 2.753 0.0512 .
Residuals 18 1578 87.68
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
TukeyHSD(ANOVA_audpc)
Tukey multiple comparisons of means
95% family-wise confidence level
Fit: aov(formula = ANTRACNOSE.In ~ TRATAMENTO, data = T5_AUDPC)
$TRATAMENTO
diff lwr upr p adj
T11-T1 -18.7000 -39.74276 2.3427645 0.0986345
T12-T1 -17.3375 -38.38026 3.7052645 0.1431893
T4-T1 -18.8250 -39.86776 2.2177645 0.0952308
T5-T1 -20.0750 -41.11776 0.9677645 0.0665359
T6-T1 -19.5250 -40.56776 1.5177645 0.0780298
T12-T11 1.3625 -19.68026 22.4052645 0.9999391
T4-T11 -0.1250 -21.16776 20.9177645 1.0000000
T5-T11 -1.3750 -22.41776 19.6677645 0.9999363
T6-T11 -0.8250 -21.86776 20.2177645 0.9999949
T4-T12 -1.4875 -22.53026 19.5552645 0.9999061
T5-T12 -2.7375 -23.78026 18.3052645 0.9981776
T6-T12 -2.1875 -23.23026 18.8552645 0.9993802
T5-T4 -1.2500 -22.29276 19.7927645 0.9999602
T6-T4 -0.7000 -21.74276 20.3427645 0.9999978
T6-T5 0.5500 -20.49276 21.5927645 0.9999993
#################################################################
####################### ANTRACNOSE.Sev ##########################
#################################################################
### Plot Boxplot AUDPC
T6_AUDPC %>%
ggplot(aes(TRATAMENTO, ANTRACNOSE.Sev)) +
geom_jitter(size=3, width = .1)+
geom_boxplot(size=1)

ANOVA_audpc<-aov(ANTRACNOSE.Sev~TRATAMENTO,T6_AUDPC)
res <- ANOVA_audpc$residuals
shapiro.test(res)
Shapiro-Wilk normality test
data: res
W = 0.9855, p-value = 0.9722
summary(ANOVA_audpc)
Df Sum Sq Mean Sq F value Pr(>F)
TRATAMENTO 5 56.8 11.36 0.58 0.715
Residuals 18 352.3 19.57
TukeyHSD(ANOVA_audpc)
Tukey multiple comparisons of means
95% family-wise confidence level
Fit: aov(formula = ANTRACNOSE.Sev ~ TRATAMENTO, data = T6_AUDPC)
$TRATAMENTO
diff lwr upr p adj
T11-T1 -3.8875 -13.829579 6.054579 0.8105987
T12-T1 -3.1625 -13.104579 6.779579 0.9082901
T4-T1 -4.9375 -14.879579 5.004579 0.6218421
T5-T1 -3.8625 -13.804579 6.079579 0.8145399
T6-T1 -3.3625 -13.304579 6.579579 0.8850181
T12-T11 0.7250 -9.217079 10.667079 0.9998906
T4-T11 -1.0500 -10.992079 8.892079 0.9993308
T5-T11 0.0250 -9.917079 9.967079 1.0000000
T6-T11 0.5250 -9.417079 10.467079 0.9999778
T4-T12 -1.7750 -11.717079 8.167079 0.9919979
T5-T12 -0.7000 -10.642079 9.242079 0.9999079
T6-T12 -0.2000 -10.142079 9.742079 0.9999998
T5-T4 1.0750 -8.867079 11.017079 0.9992501
T6-T4 1.5750 -8.367079 11.517079 0.9953890
T6-T5 0.5000 -9.442079 10.442079 0.9999826
#################################################################
####################### BOTRYTIS.Inf ##########################
#################################################################
### Plot Boxplot AUDPC
T7_AUDPC %>%
ggplot(aes(TRATAMENTO, BOTRYTIS.Inf)) +
geom_jitter(size=3, width = .1)+
geom_boxplot(size=1)

ANOVA_audpc<-aov(BOTRYTIS.Inf~TRATAMENTO,T7_AUDPC)
res <- ANOVA_audpc$residuals
shapiro.test(res)
Shapiro-Wilk normality test
data: res
W = 0.9787, p-value = 0.8707
summary(ANOVA_audpc)
Df Sum Sq Mean Sq F value Pr(>F)
TRATAMENTO 5 204.4 40.88 0.773 0.581
Residuals 18 951.3 52.85
TukeyHSD(ANOVA_audpc)
Tukey multiple comparisons of means
95% family-wise confidence level
Fit: aov(formula = BOTRYTIS.Inf ~ TRATAMENTO, data = T7_AUDPC)
$TRATAMENTO
diff lwr upr p adj
T11-T1 -1.1250 -17.46147 15.211468 0.9999175
T12-T1 -3.1875 -19.52397 13.148968 0.9880382
T4-T1 0.3375 -15.99897 16.673968 0.9999998
T5-T1 -4.6500 -20.98647 11.686468 0.9403250
T6-T1 -8.0000 -24.33647 8.336468 0.6350465
T12-T11 -2.0625 -18.39897 14.273968 0.9984203
T4-T11 1.4625 -14.87397 17.798968 0.9997006
T5-T11 -3.5250 -19.86147 12.811468 0.9813106
T6-T11 -6.8750 -23.21147 9.461468 0.7613224
T4-T12 3.5250 -12.81147 19.861468 0.9813106
T5-T12 -1.4625 -17.79897 14.873968 0.9997006
T6-T12 -4.8125 -21.14897 11.523968 0.9316724
T5-T4 -4.9875 -21.32397 11.348968 0.9215294
T6-T4 -8.3375 -24.67397 7.998968 0.5955870
T6-T5 -3.3500 -19.68647 12.986468 0.9850678
LS0tCnRpdGxlOiAiQW7DoWxpc2UgZG9zIGRhZG9zIGEgcGFydGlyIGRhIG3DqXRyaWNhIEFVRFBDIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCmBgYHtyfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShkcGx5cikKbGlicmFyeShhZ3JpY29sYWUpCmxpYnJhcnkocHN5Y2gpCmBgYAoKYGBge3J9CiMjIENBUlJFR0FNRU5UTyBFIExJTVBFWkEgRE9TIERBRE9TCgpkZiA9IHJlYWQuY3N2KCJEYXRhc2V0LmNzdiIsIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCm15X2Z1biA8LSBmdW5jdGlvbih4KSB7IAogIHggJT4lICAgICAgIAogICAgbXV0YXRlKFRSQVRBTUVOVE8gPSBjYXNlX3doZW4oVFJBVEFNRU5UTyA9PSAnVDFSMScgfidUMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUkFUQU1FTlRPID09ICdUMVIyJyB+J1QxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSQVRBTUVOVE8gPT0gJ1QxUjMnIH4nVDEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJBVEFNRU5UTyA9PSAnVDFSNCcgfidUMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUkFUQU1FTlRPID09ICdUMlIxJyB+J1QyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSQVRBTUVOVE8gPT0gJ1QyUjInIH4nVDInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJBVEFNRU5UTyA9PSAnVDJSMycgfidUMicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUkFUQU1FTlRPID09ICdUMlI0JyB+J1QyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSQVRBTUVOVE8gPT0gJ1QzUjEnIH4nVDMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJBVEFNRU5UTyA9PSAnVDNSMicgfidUMycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUkFUQU1FTlRPID09ICdUM1IzJyB+J1QzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSQVRBTUVOVE8gPT0gJ1QzUjQnIH4nVDMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJBVEFNRU5UTyA9PSAnVDRSMScgfidUNCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUkFUQU1FTlRPID09ICdUNFIyJyB+J1Q0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSQVRBTUVOVE8gPT0gJ1Q0UjMnIH4nVDQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJBVEFNRU5UTyA9PSAnVDRSNCcgfidUNCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUkFUQU1FTlRPID09ICdUNVIxJyB+J1Q1JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSQVRBTUVOVE8gPT0gJ1Q1UjInIH4nVDUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJBVEFNRU5UTyA9PSAnVDVSMycgfidUNScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUkFUQU1FTlRPID09ICdUNVI0JyB+J1Q1JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSQVRBTUVOVE8gPT0gJ1Q2UjEnIH4nVDYnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJBVEFNRU5UTyA9PSAnVDZSMicgfidUNicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUkFUQU1FTlRPID09ICdUNlIzJyB+J1Q2JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSQVRBTUVOVE8gPT0gJ1Q2UjQnIH4nVDYnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJBVEFNRU5UTyA9PSAnVDdSMScgfidUNycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUkFUQU1FTlRPID09ICdUN1IyJyB+J1Q3JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSQVRBTUVOVE8gPT0gJ1Q3UjMnIH4nVDcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJBVEFNRU5UTyA9PSAnVDdSNCcgfidUNycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUkFUQU1FTlRPID09ICdUOFIxJyB+J1Q4JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSQVRBTUVOVE8gPT0gJ1Q4UjInIH4nVDgnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJBVEFNRU5UTyA9PSAnVDhSMycgfidUOCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUkFUQU1FTlRPID09ICdUOFI0JyB+J1Q4JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSQVRBTUVOVE8gPT0gJ1Q5UjEnIH4nVDknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJBVEFNRU5UTyA9PSAnVDlSMicgfidUOScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUkFUQU1FTlRPID09ICdUOVIzJyB+J1Q5JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSQVRBTUVOVE8gPT0gJ1Q5UjQnIH4nVDknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJBVEFNRU5UTyA9PSAnVDEwUjEnIH4nVDEwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSQVRBTUVOVE8gPT0gJ1QxMFIyJyB+J1QxMCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUkFUQU1FTlRPID09ICdUMTBSMycgfidUMTAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJBVEFNRU5UTyA9PSAnVDEwUjQnIH4nVDEwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSQVRBTUVOVE8gPT0gJ1QxMVIxJyB+J1QxMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUkFUQU1FTlRPID09ICdUMTFSMicgfidUMTEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJBVEFNRU5UTyA9PSAnVDExUjMnIH4nVDExJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSQVRBTUVOVE8gPT0gJ1QxMVI0JyB+J1QxMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUkFUQU1FTlRPID09ICdUMTJSMScgfidUMTInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJBVEFNRU5UTyA9PSAnVDEyUjInIH4nVDEyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSQVRBTUVOVE8gPT0gJ1QxMlIzJyB+J1QxMicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUkFUQU1FTlRPID09ICdUMTJSNCcgfidUMTInKSkKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyBGaWx0ZXJpbmcgdHJlYXRtZW50cyAjIyMjIyMjIyMjIyMjIyMjIyMjCnRhcmdldCA8LSBjKCJUMVIxIiwgIlQxUjIiLCAiVDFSMyIsICJUMVI0IiwgIlQ0UjEiLCAiVDRSMiIsICJUNFIzIiwgIlQ0UjQiLAogICAgICAgICAgICAiVDVSMSIsICJUNVIyIiwgIlQ1UjMiLCAiVDVSNCIsICJUNlIxIiwgIlQ2UjIiLCAiVDZSMyIsICJUNlI0IiwKICAgICAgICAgICAgIlQxMVIxIiwgIlQxMVIyIiwgIlQxMVIzIiwgIlQxMVI0IiwgCiAgICAgICAgICAgICJUMTJSMSIsICJUMTJSMiIsICJUMTJSMyIsICJUMTJSNCIpCiNmaWx0ZXIoZGF0LCBuYW1lICVpbiUgdGFyZ2V0KSAgCmRmIDwtIGRmICU+JQogICAgZmlsdGVyKFRSQVRBTUVOVE8gJWluJSB0YXJnZXQpCmBgYAoKYGBge3J9CiMjIE9yZ2FuaXphIG9zIERhdGFmcmFtZXMgKFJlbW/Dp8OjbyBkZSBvdXRsaWVycykKIyMgZSBjw6FsY3VsbyBkYSBBVURQQwoKRDEgPSBkZiAlPiUKICBncm91cF9ieShUUkFUQU1FTlRPKSAlPiUKICBtdXRhdGUoRElQTE9DQVJQT04uSW4gPSBpZmVsc2UoKGFicyhESVBMT0NBUlBPTi5JbiAtIG1lZGlhbihESVBMT0NBUlBPTi5JbikpID4gMipzZChESVBMT0NBUlBPTi5JbikpLCBtZWFuKERJUExPQ0FSUE9OLkluKSwgRElQTE9DQVJQT04uSW4pKSAlPiUKICBzZWxlY3QoU0VNQU5BLCBUUkFUQU1FTlRPLCBESVBMT0NBUlBPTi5JbikgCgpEMiA9IGRmICU+JQogIGdyb3VwX2J5KFRSQVRBTUVOVE8pICU+JQogIG11dGF0ZShESVBMT0NBUlBPTi5TZXYgPSBpZmVsc2UoKGFicyhESVBMT0NBUlBPTi5TZXYgLSBtZWRpYW4oRElQTE9DQVJQT04uU2V2KSkgPiAyKnNkKERJUExPQ0FSUE9OLlNldikpLCBtZWFuKERJUExPQ0FSUE9OLlNldiksIERJUExPQ0FSUE9OLlNldikpICU+JQogIHNlbGVjdChTRU1BTkEsIFRSQVRBTUVOVE8sIERJUExPQ0FSUE9OLlNldikgCgpEMyA9IGRmICU+JQogIGdyb3VwX2J5KFRSQVRBTUVOVE8pICU+JQogIG11dGF0ZShNSUNPU0ZBRVJFTEEuSW4gPSBpZmVsc2UoIShhYnMoTUlDT1NGQUVSRUxBLkluIC0gbWVkaWFuKE1JQ09TRkFFUkVMQS5JbikpID4gMipzZChNSUNPU0ZBRVJFTEEuSW4pKSwgbWVhbihNSUNPU0ZBRVJFTEEuSW4pLCBNSUNPU0ZBRVJFTEEuSW4pKSAlPiUKICBzZWxlY3QoU0VNQU5BLCBUUkFUQU1FTlRPLCBNSUNPU0ZBRVJFTEEuSW4pIAoKRDQgPSBkZiAlPiUKICBncm91cF9ieShUUkFUQU1FTlRPKSAlPiUKICBtdXRhdGUoTUlDT1NGQUVSRUxBLlNldiA9IGlmZWxzZSgoYWJzKE1JQ09TRkFFUkVMQS5TZXYgLSBtZWRpYW4oTUlDT1NGQUVSRUxBLlNldikpID4gMipzZChNSUNPU0ZBRVJFTEEuU2V2KSksIG1lYW4oTUlDT1NGQUVSRUxBLlNldiksIE1JQ09TRkFFUkVMQS5TZXYpKSAlPiUKICBzZWxlY3QoU0VNQU5BLCBUUkFUQU1FTlRPLCBNSUNPU0ZBRVJFTEEuU2V2KSAKCkQ1ID0gZGYgJT4lCiAgZ3JvdXBfYnkoVFJBVEFNRU5UTykgJT4lCiAgbXV0YXRlKEFOVFJBQ05PU0UuSW4gPSBpZmVsc2UoKGFicyhBTlRSQUNOT1NFLkluIC0gbWVkaWFuKEFOVFJBQ05PU0UuSW4pKSA+IDIqc2QoQU5UUkFDTk9TRS5JbikpLCBtZWFuKEFOVFJBQ05PU0UuSW4pLCBBTlRSQUNOT1NFLkluKSkgJT4lCiAgc2VsZWN0KFNFTUFOQSwgVFJBVEFNRU5UTywgQU5UUkFDTk9TRS5JbikgCgpENiA9IGRmICU+JQogIGdyb3VwX2J5KFRSQVRBTUVOVE8pICU+JQogIG11dGF0ZShBTlRSQUNOT1NFLlNldiA9IGlmZWxzZSghKGFicyhBTlRSQUNOT1NFLlNldiAtIG1lZGlhbihBTlRSQUNOT1NFLlNldikpID4gMipzZChBTlRSQUNOT1NFLlNldikpLCBtZWFuKEFOVFJBQ05PU0UuU2V2KSwgQU5UUkFDTk9TRS5TZXYpKSAlPiUKICBzZWxlY3QoU0VNQU5BLCBUUkFUQU1FTlRPLCBBTlRSQUNOT1NFLlNldikgCgpENyA9IGRmICU+JQogIGdyb3VwX2J5KFRSQVRBTUVOVE8pICU+JQogIG11dGF0ZShCT1RSWVRJUy5JbmYgPSBpZmVsc2UoIShhYnMoQk9UUllUSVMuSW5mIC0gbWVkaWFuKEJPVFJZVElTLkluZikpID4gMipzZChCT1RSWVRJUy5JbmYpKSwgbWVhbihCT1RSWVRJUy5JbmYpLCBCT1RSWVRJUy5JbmYpKSAlPiUKICBzZWxlY3QoU0VNQU5BLCBUUkFUQU1FTlRPLCBCT1RSWVRJUy5JbmYpIAoKIyMjIyMjIEFVRFBDIEZST00gb3V0bGllcnMgRCgqKSBkYXRhZnJhbWUKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpUMV9BVURQQyA8LSBEMSAlPiUgCiAgZ3JvdXBfYnkoVFJBVEFNRU5UTykgJT4lIAogIHN1bW1hcmlzZShUUkFUQU1FTlRPID0gdW5pcXVlKFRSQVRBTUVOVE8pLAogICAgICAgICAgICBESVBMT0NBUlBPTi5Jbj1hdWRwYyhESVBMT0NBUlBPTi5JbixTRU1BTkEpKSAlPiUKICAgICAgICAgICAgbXlfZnVuCiAgClQyX0FVRFBDIDwtIEQyICU+JSAKICBncm91cF9ieShUUkFUQU1FTlRPKSAlPiUgCiAgc3VtbWFyaXNlKFRSQVRBTUVOVE8gPSB1bmlxdWUoVFJBVEFNRU5UTyksCiAgICAgICAgICAgIERJUExPQ0FSUE9OLlNldj1hdWRwYyhESVBMT0NBUlBPTi5TZXYsU0VNQU5BKSkgJT4lCiAgbXlfZnVuCgpUM19BVURQQyA8LSBEMyAlPiUgCiAgZ3JvdXBfYnkoVFJBVEFNRU5UTykgJT4lIAogIHN1bW1hcmlzZShUUkFUQU1FTlRPID0gdW5pcXVlKFRSQVRBTUVOVE8pLAogICAgICAgICAgICBNSUNPU0ZBRVJFTEEuSW49YXVkcGMoTUlDT1NGQUVSRUxBLkluLFNFTUFOQSkpICAlPiUKICBteV9mdW4KClQ0X0FVRFBDIDwtIEQ0ICU+JSAKICBncm91cF9ieShUUkFUQU1FTlRPKSAlPiUgCiAgc3VtbWFyaXNlKFRSQVRBTUVOVE8gPSB1bmlxdWUoVFJBVEFNRU5UTyksCiAgICAgICAgICAgIE1JQ09TRkFFUkVMQS5TZXY9YXVkcGMoTUlDT1NGQUVSRUxBLlNldixTRU1BTkEpKSAgJT4lCiAgbXlfZnVuCgpUNV9BVURQQyA8LSBENSAlPiUgCiAgZ3JvdXBfYnkoVFJBVEFNRU5UTykgJT4lIAogIHN1bW1hcmlzZShUUkFUQU1FTlRPID0gdW5pcXVlKFRSQVRBTUVOVE8pLAogICAgICAgICAgICBBTlRSQUNOT1NFLkluPWF1ZHBjKEFOVFJBQ05PU0UuSW4sU0VNQU5BKSkgICU+JQogIG15X2Z1bgoKVDZfQVVEUEMgPC0gRDYgJT4lIAogIGdyb3VwX2J5KFRSQVRBTUVOVE8pICU+JSAKICBzdW1tYXJpc2UoVFJBVEFNRU5UTyA9IHVuaXF1ZShUUkFUQU1FTlRPKSwKICAgICAgICAgICAgQU5UUkFDTk9TRS5TZXY9YXVkcGMoQU5UUkFDTk9TRS5TZXYsU0VNQU5BKSkgICU+JQogIG15X2Z1bgoKVDdfQVVEUEMgPC0gRDcgJT4lIAogIGdyb3VwX2J5KFRSQVRBTUVOVE8pICU+JSAKICBzdW1tYXJpc2UoVFJBVEFNRU5UTyA9IHVuaXF1ZShUUkFUQU1FTlRPKSwKICAgICAgICAgICAgQk9UUllUSVMuSW5mPWF1ZHBjKEJPVFJZVElTLkluZixTRU1BTkEpKSAgJT4lCiAgbXlfZnVuCmBgYAoKYGBge3J9CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIERJUExPQ0FSUE9OLkluICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyBQbG90IEJveHBsb3QgQVVEUEMKVDFfQVVEUEMgJT4lIAogIGdncGxvdChhZXMoVFJBVEFNRU5UTywgRElQTE9DQVJQT04uSW4pKSArCiAgZ2VvbV9qaXR0ZXIoc2l6ZT0zLCB3aWR0aCA9IC4xKSsKICBnZW9tX2JveHBsb3Qoc2l6ZT0xKQoKYGBgCgpgYGB7cn0KQU5PVkFfYXVkcGM8LWFvdihESVBMT0NBUlBPTi5Jbn5UUkFUQU1FTlRPLFQxX0FVRFBDKQpyZXMgPC0gQU5PVkFfYXVkcGMkcmVzaWR1YWxzCnNoYXBpcm8udGVzdChyZXMpCnN1bW1hcnkoQU5PVkFfYXVkcGMpClR1a2V5SFNEKEFOT1ZBX2F1ZHBjKQpgYGAKCmBgYHtyfQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBESVBMT0NBUlBPTi5TZXYgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMjIFBsb3QgQm94cGxvdCBBVURQQwpUMl9BVURQQyAlPiUgCiAgZ2dwbG90KGFlcyhUUkFUQU1FTlRPLCBESVBMT0NBUlBPTi5TZXYpKSArCiAgZ2VvbV9qaXR0ZXIoc2l6ZT0zLCB3aWR0aCA9IC4xKSsKICBnZW9tX2JveHBsb3Qoc2l6ZT0xKQoKYGBgCgpgYGB7cn0KQU5PVkFfYXVkcGM8LWFvdihESVBMT0NBUlBPTi5TZXZ+VFJBVEFNRU5UTyxUMl9BVURQQykKcmVzIDwtIEFOT1ZBX2F1ZHBjJHJlc2lkdWFscwpzaGFwaXJvLnRlc3QocmVzKQpzdW1tYXJ5KEFOT1ZBX2F1ZHBjKQpUdWtleUhTRChBTk9WQV9hdWRwYykKYGBgCgpgYGB7cn0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTUlDT1NGQUVSRUxBLkluICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyBQbG90IEJveHBsb3QgQVVEUEMKVDNfQVVEUEMgJT4lIAogIGdncGxvdChhZXMoVFJBVEFNRU5UTywgTUlDT1NGQUVSRUxBLkluKSkgKwogIGdlb21faml0dGVyKHNpemU9Mywgd2lkdGggPSAuMSkrCiAgZ2VvbV9ib3hwbG90KHNpemU9MSkKYGBgCgpgYGB7cn0KQU5PVkFfYXVkcGM8LWFvdihNSUNPU0ZBRVJFTEEuSW5+VFJBVEFNRU5UTyxUM19BVURQQykKcmVzIDwtIEFOT1ZBX2F1ZHBjJHJlc2lkdWFscwpzaGFwaXJvLnRlc3QocmVzKQpzdW1tYXJ5KEFOT1ZBX2F1ZHBjKQpUdWtleUhTRChBTk9WQV9hdWRwYykKYGBgCgpgYGB7cn0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTUlDT1NGQUVSRUxBLlNldiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMgUGxvdCBCb3hwbG90IEFVRFBDClQ0X0FVRFBDICU+JSAKICBnZ3Bsb3QoYWVzKFRSQVRBTUVOVE8sIE1JQ09TRkFFUkVMQS5TZXYpKSArCiAgZ2VvbV9qaXR0ZXIoc2l6ZT0zLCB3aWR0aCA9IC4xKSsKICBnZW9tX2JveHBsb3Qoc2l6ZT0xKQpgYGAKCmBgYHtyfQpBTk9WQV9hdWRwYzwtYW92KE1JQ09TRkFFUkVMQS5TZXZ+VFJBVEFNRU5UTyxUNF9BVURQQykKcmVzIDwtIEFOT1ZBX2F1ZHBjJHJlc2lkdWFscwpzaGFwaXJvLnRlc3QocmVzKQpzdW1tYXJ5KEFOT1ZBX2F1ZHBjKQpUdWtleUhTRChBTk9WQV9hdWRwYykKYGBgCgpgYGB7cn0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgQU5UUkFDTk9TRS5JbiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMgUGxvdCBCb3hwbG90IEFVRFBDClQ1X0FVRFBDICU+JSAKICBnZ3Bsb3QoYWVzKFRSQVRBTUVOVE8sIEFOVFJBQ05PU0UuSW4pKSArCiAgZ2VvbV9qaXR0ZXIoc2l6ZT0zLCB3aWR0aCA9IC4xKSsKICBnZW9tX2JveHBsb3Qoc2l6ZT0xKQpgYGAKCmBgYHtyfQpBTk9WQV9hdWRwYzwtYW92KEFOVFJBQ05PU0UuSW5+VFJBVEFNRU5UTyxUNV9BVURQQykKcmVzIDwtIEFOT1ZBX2F1ZHBjJHJlc2lkdWFscwpzaGFwaXJvLnRlc3QocmVzKQpzdW1tYXJ5KEFOT1ZBX2F1ZHBjKQpUdWtleUhTRChBTk9WQV9hdWRwYykKYGBgCgoKYGBge3J9CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEFOVFJBQ05PU0UuU2V2ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyBQbG90IEJveHBsb3QgQVVEUEMKVDZfQVVEUEMgJT4lIAogIGdncGxvdChhZXMoVFJBVEFNRU5UTywgQU5UUkFDTk9TRS5TZXYpKSArCiAgZ2VvbV9qaXR0ZXIoc2l6ZT0zLCB3aWR0aCA9IC4xKSsKICBnZW9tX2JveHBsb3Qoc2l6ZT0xKQpgYGAKCmBgYHtyfQpBTk9WQV9hdWRwYzwtYW92KEFOVFJBQ05PU0UuU2V2flRSQVRBTUVOVE8sVDZfQVVEUEMpCnJlcyA8LSBBTk9WQV9hdWRwYyRyZXNpZHVhbHMKc2hhcGlyby50ZXN0KHJlcykKc3VtbWFyeShBTk9WQV9hdWRwYykKVHVrZXlIU0QoQU5PVkFfYXVkcGMpCmBgYAoKCmBgYHtyfQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBCT1RSWVRJUy5JbmYgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMjIFBsb3QgQm94cGxvdCBBVURQQwpUN19BVURQQyAlPiUgCiAgZ2dwbG90KGFlcyhUUkFUQU1FTlRPLCBCT1RSWVRJUy5JbmYpKSArCiAgZ2VvbV9qaXR0ZXIoc2l6ZT0zLCB3aWR0aCA9IC4xKSsKICBnZW9tX2JveHBsb3Qoc2l6ZT0xKQpgYGAKCmBgYHtyfQpBTk9WQV9hdWRwYzwtYW92KEJPVFJZVElTLkluZn5UUkFUQU1FTlRPLFQ3X0FVRFBDKQpyZXMgPC0gQU5PVkFfYXVkcGMkcmVzaWR1YWxzCnNoYXBpcm8udGVzdChyZXMpCnN1bW1hcnkoQU5PVkFfYXVkcGMpClR1a2V5SFNEKEFOT1ZBX2F1ZHBjKQpgYGAKCg==