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==