library(rstatix)
library(tidyverse)

Extract standard data set

dataset = read_delim('std_signals.csv', delim =",")
Rows: 3001 Columns: 26── Column specification ──────────────────────────────────────────────────────────────────────────────────────────────────
Delimiter: ","
dbl (26): TIME, 1000CAPT1, 1000CAPT2, 1000CAPT3, 1000DHCT1, 1000DHCT2, 1000DHCT3, 500MIX, 250MIXT1, 250MIXT2, 250MIXT3...
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
dataset_new = read_delim('calibration_and_pepper_signals.csv', delim=',')
Rows: 3000 Columns: 33── Column specification ──────────────────────────────────────────────────────────────────────────────────────────────────
Delimiter: ","
dbl (33): Time, mix_2_5_1, mix_2_5_2, mix_2_5_3, mix_10_1, mix_10_2, mix_10_3, mix_20_1, mix_20_2, mix_20_3, mix_40_1,...
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
CAP_1000 = dataset %>% 
  select(1:4)

DHC_1000 = dataset %>% 
  select(1, 5, 6, 7)

MIX_500 = dataset %>% 
  select(1, 8)

MIX_250 = dataset %>% 
  select(1, 9:11)

MIX_100 = dataset %>% 
  select(1, 12:14)

MIX_80 = dataset %>% 
  select(1, 15:17)

MIX_50 = dataset %>% 
  select(1, 18:20)

MIX_20 = dataset %>% 
  select(1, 21:23)

MIX_10 = dataset %>% 
  select(1, 24:26)

colnames(CAP_1000) = colnames(DHC_1000 )= colnames(MIX_500 ) = colnames(MIX_250) = colnames(MIX_100 ) = colnames(MIX_80 ) =
  colnames(MIX_50 ) = colnames(MIX_20 ) = colnames(MIX_10) = c("time", "trial_1", "trial_2", "trial_3")
CAP_1000_LONG = CAP_1000 %>% 
  pivot_longer(cols = c( "trial_1", "trial_2", "trial_3"),
               names_to = "trial",
               values_to = "area")

DHC_1000_LONG = DHC_1000 %>% 
  pivot_longer(cols = c( "trial_1", "trial_2", "trial_3"),
               names_to = "trial",
               values_to = "area")

#MIX_500_LONG = MIX_500 %>% 
#  pivot_longer(cols = c( "trial_1", "trial_2", "trial_3"),
#               names_to = "trial",
#               values_to = "area")

MIX_250_LONG = MIX_250 %>% 
  pivot_longer(cols = c( "trial_1", "trial_2", "trial_3"),
               names_to = "trial",
               values_to = "area")

MIX_100_LONG = MIX_100 %>% 
  pivot_longer(cols = c( "trial_1", "trial_2", "trial_3"),
               names_to = "trial",
               values_to = "area")

MIX_80_LONG = MIX_80 %>% 
  pivot_longer(cols = c( "trial_1", "trial_2", "trial_3"),
               names_to = "trial",
               values_to = "area")

MIX_50_LONG = MIX_50 %>% 
  pivot_longer(cols = c( "trial_1", "trial_2", "trial_3"),
               names_to = "trial",
               values_to = "area")

MIX_20_LONG = MIX_50 %>% 
  pivot_longer(cols = c( "trial_1", "trial_2", "trial_3"),
               names_to = "trial",
               values_to = "area")

MIX_10_LONG = MIX_50 %>% 
  pivot_longer(cols = c( "trial_1", "trial_2", "trial_3"),
               names_to = "trial",
               values_to = "area")
mix_2_5_new = dataset_new %>% 
  select(1:4)

mix_10_new = dataset_new %>% 
  select(1, 5:7)

mix_20_new = dataset_new %>% 
  select(1, 8:10)

mix_40_new = dataset_new %>% 
  select(1, 11:12)

mix_60_new = dataset_new %>% 
  select(1, 13:15)

mix_80_new = dataset_new %>% 
  select(1, 16:18)

mix_100_new = dataset_new %>% 
  select(1, 19:21)

xiao_flesh_new = dataset_new %>% 
  select(1, 22:24)

xiao_5050_new = dataset_new %>% 
  select(1, 25:27)

xiao_100_new = dataset_new %>% 
  select(1, 28:30)

gbp_flesh_new = dataset_new %>% 
  select(1, 31:33)

colnames(mix_2_5_new) = colnames(mix_10_new )= colnames(mix_20_new) = colnames(mix_40_new) = colnames(mix_60_new ) = colnames(mix_80_new ) =
  colnames(mix_100_new ) = colnames(xiao_flesh_new ) = colnames(xiao_5050_new) = colnames(xiao_100_new) = colnames(gbp_flesh_new) = c("time", "trial_1", "trial_2", "trial_3")
mix_2_5_new_long = mix_2_5_new %>% 
  pivot_longer(cols = c( "trial_1", "trial_2", "trial_3"),
               names_to = "trial",
               values_to = "area")

mix_10_new_long = mix_10_new %>% 
  pivot_longer(cols = c( "trial_1", "trial_2", "trial_3"),
               names_to = "trial",
               values_to = "area")

mix_20_new_long = mix_20_new %>% 
  pivot_longer(cols = c( "trial_1", "trial_2", "trial_3"),
               names_to = "trial",
               values_to = "area")

mix_40_new_long = mix_40_new %>% 
  pivot_longer(cols = c( "trial_1", "trial_2"),
               names_to = "trial",
               values_to = "area")

mix_60_new_long = mix_60_new %>% 
  pivot_longer(cols = c( "trial_1", "trial_2", "trial_3"),
               names_to = "trial",
               values_to = "area")

mix_80_new_long = mix_80_new %>% 
  pivot_longer(cols = c( "trial_1", "trial_2", "trial_3"),
               names_to = "trial",
               values_to = "area")

mix_100_new_long = mix_100_new %>% 
  pivot_longer(cols = c( "trial_1", "trial_2", "trial_3"),
               names_to = "trial",
               values_to = "area")

xiao_flesh_new_long = xiao_flesh_new %>% 
  pivot_longer(cols = c( "trial_1", "trial_2", "trial_3"),
               names_to = "trial",
               values_to = "area")

xiao_5050_new_long = xiao_5050_new %>% 
  pivot_longer(cols = c( "trial_1", "trial_2", "trial_3"),
               names_to = "trial",
               values_to = "area")

xiao_100_new_long = xiao_100_new %>% 
  pivot_longer(cols = c( "trial_1", "trial_2", "trial_3"),
               names_to = "trial",
               values_to = "area")

gbp_flesh_new_long = gbp_flesh_new %>% 
  pivot_longer(cols = c( "trial_1", "trial_2", "trial_3"),
               names_to = "trial",
               values_to = "area")
capsaicin_1000_chromatogram = ggplot(data=CAP_1000_LONG, mapping = aes(x= time, y=area, color = trial)) +
  geom_line() +
  ggtitle(expression("Chromatogram of Capsaicin (1000"*mu*"g/mL)")) +
  theme(plot.title = element_text(face = 'bold', size = 20, hjust = 0.5), 
        axis.title = element_text(face='bold'), panel.background = element_rect('azure2'),
        aspect.ratio = 0.3) +
  labs(x="Time (min)", y="Area", color="Trial")

ggplot(data=DHC_1000_LONG, mapping = aes(x= time, y=area, color = trial)) +
  geom_line() +
  ggtitle(expression("Chromatogram of Dihydrocapsaicin (1000"*mu*"g/mL)")) +
  theme(plot.title = element_text(face = 'bold', size = 16, hjust = 0.5), 
        axis.title = element_text(face='bold'), panel.background = element_rect('azure2'),
        aspect.ratio = 0.3) +
  labs(x="Time (min)", y="Area", color="Trial")


ggplot(data=MIX_250_LONG, mapping = aes(x= time, y=area, color = trial)) +
  geom_line() +
  ggtitle(expression("Chromatogram of Capsaicin & Dihydrocapsaicin (250"*mu*"g/mL)")) +
  theme(plot.title = element_text(face = 'bold', size = 16, hjust = 0.5), 
        axis.title = element_text(face='bold'), panel.background = element_rect('azure2'),
        aspect.ratio = 0.3) +
  labs(x="Time (min)", y="Area", color="Trial")


ggplot(data=MIX_100_LONG, mapping = aes(x= time, y=area, color = trial)) +
  geom_line() +
  ggtitle(expression("Chromatogram of Capsaicin & Dihydrocapsaicin (100"*mu*"g/mL)")) +
  theme(plot.title = element_text(face = 'bold', size = 16, hjust = 0.5), 
        axis.title = element_text(face='bold'), panel.background = element_rect('azure2'),
        aspect.ratio = 0.3) +
  labs(x="Time (min)", y="Area", color="Trial")


ggplot(data=MIX_80_LONG, mapping = aes(x= time, y=area, color = trial)) +
  geom_line() +
  ggtitle(expression("Chromatogram of Capsaicin & Dihydrocapsaicin (80"*mu*"g/mL)")) +
  theme(plot.title = element_text(face = 'bold', size = 16, hjust = 0.5), 
        axis.title = element_text(face='bold'), panel.background = element_rect('azure2'),
        aspect.ratio = 0.3) +
  labs(x="Time (min)", y="Area", color="Trial")


ggplot(data=MIX_50_LONG, mapping = aes(x= time, y=area, color = trial)) +
  geom_line() +
  ggtitle(expression("Chromatogram of Capsaicin & Dihydrocapsaicin (50"*mu*"g/mL)")) +
  theme(plot.title = element_text(face = 'bold', size = 16, hjust = 0.5), 
        axis.title = element_text(face='bold'), panel.background = element_rect('azure2'),
        aspect.ratio = 0.3) +
  labs(x="Time (min)", y="Area", color="Trial")


ggplot(data=MIX_20_LONG, mapping = aes(x= time, y=area, color = trial)) +
  geom_line() +
  ggtitle(expression("Chromatogram of Capsaicin & Dihydrocapsaicin (20"*mu*"g/mL)")) +
  theme(plot.title = element_text(face = 'bold', size = 16, hjust = 0.5), 
        axis.title = element_text(face='bold'), panel.background = element_rect('azure2'),
        aspect.ratio = 0.3) +
  labs(x="Time (min)", y="Area", color="Trial")


ggplot(data=MIX_10_LONG, mapping = aes(x= time, y=area, color = trial)) +
  geom_line() +
  ggtitle(expression("Chromatogram of Capsaicin & Dihydrocapsaicin (10"*mu*"g/mL)")) +
  theme(plot.title = element_text(face = 'bold', size = 16, hjust = 0.5), 
        axis.title = element_text(face='bold'), panel.background = element_rect('azure2'),
        aspect.ratio = 0.3) +
  labs(x="Time (min)", y="Area", color="Trial")

gbp_vs_xiao = dataset_new %>% 
  select(1, 22, 31)

colnames(gbp_flesh_new) = c("Time", "Xiao", "Green_Bell")

gbp_vs_xiao_long = gbp_vs_xiao %>% 
  pivot_longer(cols = -c("Time"),
               names_to = "Pepper",
               values_to = "area")

ggplot(data=gbp_vs_xiao_long, mapping = aes(x= Time, y= area, color = Pepper)) +
  geom_line(mapping = aes(x= Time, y=area)) +
  ggtitle("Xiao vs Green Bell Pepper Chromatogram") +
  theme(plot.title = element_text(face = 'bold', size = 16, hjust = 0.5), 
        axis.title = element_text(face='bold'), panel.background = element_rect('azure2'),
        aspect.ratio = 0.8) +
  labs(x="Time (min)", y="Area", color="Pepper")

ggsave(filename = "Xiao_vs_gbp.png")
Saving 7.29 x 4.5 in image

gbp_vs_xiao_long_filter = gbp_vs_xiao_long %>% 
  filter(Time > 5)

ggplot(data=gbp_vs_xiao_long_filter, mapping = aes(x= Time, y= area, color = Pepper)) +
  geom_line(mapping = aes(x= Time, y=area)) +
  ggtitle("Xiao vs Green Bell Pepper Chromatogram (Zoomed)") +
  theme(plot.title = element_text(face = 'bold', size = 16, hjust = 0.5), 
        axis.title = element_text(face='bold'), panel.background = element_rect('azure2'),
        aspect.ratio = 0.8) +
  labs(x="Time (min)", y="Area", color="Pepper")

ggsave(filename = "Xiao_vs_gbp_zoomed.png")
Saving 7.29 x 4.5 in image

ggplot(data=mix_100_new, mapping = aes(x= time, y=trial_1)) +
  geom_line() +
  ggtitle(expression("Chromatogram of Capsaicin and Dihydrocapsaicin Mixture at (100 "*mu*"g/mL)")) +
  theme(plot.title = element_text(face = 'bold', size = 14, hjust = 0.5), 
        axis.title = element_text(face='bold'), panel.background = element_rect('azure2'),
        aspect.ratio = 0.3) +
  labs(x="Retention Time (min)", y="Absorbance (mAU)") +
  annotate("text", x= 10, y=90, label="Capsaicin") +
  annotate("text", x= 16.2, y=90, label="Dihydrocapsaicin")


ggplot(data=xiao_100_new, mapping = aes(x= time, y=trial_1)) +
  geom_line() +
  ggtitle("Xiao Extracted in 100% MeCN") +
  theme(plot.title = element_text(face = 'bold', size = 14, hjust = 0.5), 
        axis.title = element_text(face='bold'), panel.background = element_rect('azure2'),
        aspect.ratio = 0.3) +
  labs(x="Retention Time (min)", y="Absorbance (mAU)") 

mix_100 = MIX_100[-3001,]
colnames(mix_100) = c("og_time", "og_trial_1", "og_trial_2", "og_trial_2")
colnames(mix_100_new) = c("new_time", "new_trial_1", "new_trial_2", "new_trial_3")
mix_shift = cbind(mix_100, mix_100_new)
mix_shift_long = pivot_longer(data = mix_shift,
                              cols = starts_with("og_trial") | starts_with("new_trial"),
                              names_to = "trial_age",
                              values_to = "area")
mix_shift_long = mix_shift_long %>% mutate(time = rowMeans(cbind(og_time, new_time)))

ggplot(data=mix_shift_long, mapping = aes(x= time, y= area, color = trial_age)) +
  geom_line(mapping = aes(x= time, y=area)) +
  ggtitle("Chromatogram Shift in Mix") +
  theme(plot.title = element_text(face = 'bold', size = 16, hjust = 0.5),
        axis.title = element_text(face='bold'), panel.background = element_rect('azure2'),
        aspect.ratio = 0.8) +
  labs(x="Time (min)", y="Area", color="Trial and Age")

LS0tDQp0aXRsZTogIkNhcHNhaWNpbm9pZHMgQ2hyb21hdG9ncmFtcyINCmF1dGhvcjogIkpha2UgRWhyYmFrZXIgJiBFdmFuIE1hdGhlciINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCmBgYHtyfQ0KbGlicmFyeShyc3RhdGl4KQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpgYGANCg0KRXh0cmFjdCBzdGFuZGFyZCBkYXRhIHNldA0KDQpgYGB7cn0NCmRhdGFzZXQgPSByZWFkX2RlbGltKCdzdGRfc2lnbmFscy5jc3YnLCBkZWxpbSA9IiwiKQ0KZGF0YXNldF9uZXcgPSByZWFkX2RlbGltKCdjYWxpYnJhdGlvbl9hbmRfcGVwcGVyX3NpZ25hbHMuY3N2JywgZGVsaW09JywnKQ0KYGBgDQpgYGB7cn0NCkNBUF8xMDAwID0gZGF0YXNldCAlPiUgDQogIHNlbGVjdCgxOjQpDQoNCkRIQ18xMDAwID0gZGF0YXNldCAlPiUgDQogIHNlbGVjdCgxLCA1LCA2LCA3KQ0KDQpNSVhfNTAwID0gZGF0YXNldCAlPiUgDQogIHNlbGVjdCgxLCA4KQ0KDQpNSVhfMjUwID0gZGF0YXNldCAlPiUgDQogIHNlbGVjdCgxLCA5OjExKQ0KDQpNSVhfMTAwID0gZGF0YXNldCAlPiUgDQogIHNlbGVjdCgxLCAxMjoxNCkNCg0KTUlYXzgwID0gZGF0YXNldCAlPiUgDQogIHNlbGVjdCgxLCAxNToxNykNCg0KTUlYXzUwID0gZGF0YXNldCAlPiUgDQogIHNlbGVjdCgxLCAxODoyMCkNCg0KTUlYXzIwID0gZGF0YXNldCAlPiUgDQogIHNlbGVjdCgxLCAyMToyMykNCg0KTUlYXzEwID0gZGF0YXNldCAlPiUgDQogIHNlbGVjdCgxLCAyNDoyNikNCg0KY29sbmFtZXMoQ0FQXzEwMDApID0gY29sbmFtZXMoREhDXzEwMDAgKT0gY29sbmFtZXMoTUlYXzUwMCApID0gY29sbmFtZXMoTUlYXzI1MCkgPSBjb2xuYW1lcyhNSVhfMTAwICkgPSBjb2xuYW1lcyhNSVhfODAgKSA9DQogIGNvbG5hbWVzKE1JWF81MCApID0gY29sbmFtZXMoTUlYXzIwICkgPSBjb2xuYW1lcyhNSVhfMTApID0gYygidGltZSIsICJ0cmlhbF8xIiwgInRyaWFsXzIiLCAidHJpYWxfMyIpDQpgYGANCg0KYGBge3J9DQpDQVBfMTAwMF9MT05HID0gQ0FQXzEwMDAgJT4lIA0KICBwaXZvdF9sb25nZXIoY29scyA9IGMoICJ0cmlhbF8xIiwgInRyaWFsXzIiLCAidHJpYWxfMyIpLA0KICAgICAgICAgICAgICAgbmFtZXNfdG8gPSAidHJpYWwiLA0KICAgICAgICAgICAgICAgdmFsdWVzX3RvID0gImFyZWEiKQ0KDQpESENfMTAwMF9MT05HID0gREhDXzEwMDAgJT4lIA0KICBwaXZvdF9sb25nZXIoY29scyA9IGMoICJ0cmlhbF8xIiwgInRyaWFsXzIiLCAidHJpYWxfMyIpLA0KICAgICAgICAgICAgICAgbmFtZXNfdG8gPSAidHJpYWwiLA0KICAgICAgICAgICAgICAgdmFsdWVzX3RvID0gImFyZWEiKQ0KDQojTUlYXzUwMF9MT05HID0gTUlYXzUwMCAlPiUgDQojICBwaXZvdF9sb25nZXIoY29scyA9IGMoICJ0cmlhbF8xIiwgInRyaWFsXzIiLCAidHJpYWxfMyIpLA0KIyAgICAgICAgICAgICAgIG5hbWVzX3RvID0gInRyaWFsIiwNCiMgICAgICAgICAgICAgICB2YWx1ZXNfdG8gPSAiYXJlYSIpDQoNCk1JWF8yNTBfTE9ORyA9IE1JWF8yNTAgJT4lIA0KICBwaXZvdF9sb25nZXIoY29scyA9IGMoICJ0cmlhbF8xIiwgInRyaWFsXzIiLCAidHJpYWxfMyIpLA0KICAgICAgICAgICAgICAgbmFtZXNfdG8gPSAidHJpYWwiLA0KICAgICAgICAgICAgICAgdmFsdWVzX3RvID0gImFyZWEiKQ0KDQpNSVhfMTAwX0xPTkcgPSBNSVhfMTAwICU+JSANCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBjKCAidHJpYWxfMSIsICJ0cmlhbF8yIiwgInRyaWFsXzMiKSwNCiAgICAgICAgICAgICAgIG5hbWVzX3RvID0gInRyaWFsIiwNCiAgICAgICAgICAgICAgIHZhbHVlc190byA9ICJhcmVhIikNCg0KTUlYXzgwX0xPTkcgPSBNSVhfODAgJT4lIA0KICBwaXZvdF9sb25nZXIoY29scyA9IGMoICJ0cmlhbF8xIiwgInRyaWFsXzIiLCAidHJpYWxfMyIpLA0KICAgICAgICAgICAgICAgbmFtZXNfdG8gPSAidHJpYWwiLA0KICAgICAgICAgICAgICAgdmFsdWVzX3RvID0gImFyZWEiKQ0KDQpNSVhfNTBfTE9ORyA9IE1JWF81MCAlPiUgDQogIHBpdm90X2xvbmdlcihjb2xzID0gYyggInRyaWFsXzEiLCAidHJpYWxfMiIsICJ0cmlhbF8zIiksDQogICAgICAgICAgICAgICBuYW1lc190byA9ICJ0cmlhbCIsDQogICAgICAgICAgICAgICB2YWx1ZXNfdG8gPSAiYXJlYSIpDQoNCk1JWF8yMF9MT05HID0gTUlYXzUwICU+JSANCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBjKCAidHJpYWxfMSIsICJ0cmlhbF8yIiwgInRyaWFsXzMiKSwNCiAgICAgICAgICAgICAgIG5hbWVzX3RvID0gInRyaWFsIiwNCiAgICAgICAgICAgICAgIHZhbHVlc190byA9ICJhcmVhIikNCg0KTUlYXzEwX0xPTkcgPSBNSVhfNTAgJT4lIA0KICBwaXZvdF9sb25nZXIoY29scyA9IGMoICJ0cmlhbF8xIiwgInRyaWFsXzIiLCAidHJpYWxfMyIpLA0KICAgICAgICAgICAgICAgbmFtZXNfdG8gPSAidHJpYWwiLA0KICAgICAgICAgICAgICAgdmFsdWVzX3RvID0gImFyZWEiKQ0KYGBgDQoNCmBgYHtyfQ0KbWl4XzJfNV9uZXcgPSBkYXRhc2V0X25ldyAlPiUgDQogIHNlbGVjdCgxOjQpDQoNCm1peF8xMF9uZXcgPSBkYXRhc2V0X25ldyAlPiUgDQogIHNlbGVjdCgxLCA1OjcpDQoNCm1peF8yMF9uZXcgPSBkYXRhc2V0X25ldyAlPiUgDQogIHNlbGVjdCgxLCA4OjEwKQ0KDQptaXhfNDBfbmV3ID0gZGF0YXNldF9uZXcgJT4lIA0KICBzZWxlY3QoMSwgMTE6MTIpDQoNCm1peF82MF9uZXcgPSBkYXRhc2V0X25ldyAlPiUgDQogIHNlbGVjdCgxLCAxMzoxNSkNCg0KbWl4XzgwX25ldyA9IGRhdGFzZXRfbmV3ICU+JSANCiAgc2VsZWN0KDEsIDE2OjE4KQ0KDQptaXhfMTAwX25ldyA9IGRhdGFzZXRfbmV3ICU+JSANCiAgc2VsZWN0KDEsIDE5OjIxKQ0KDQp4aWFvX2ZsZXNoX25ldyA9IGRhdGFzZXRfbmV3ICU+JSANCiAgc2VsZWN0KDEsIDIyOjI0KQ0KDQp4aWFvXzUwNTBfbmV3ID0gZGF0YXNldF9uZXcgJT4lIA0KICBzZWxlY3QoMSwgMjU6MjcpDQoNCnhpYW9fMTAwX25ldyA9IGRhdGFzZXRfbmV3ICU+JSANCiAgc2VsZWN0KDEsIDI4OjMwKQ0KDQpnYnBfZmxlc2hfbmV3ID0gZGF0YXNldF9uZXcgJT4lIA0KICBzZWxlY3QoMSwgMzE6MzMpDQoNCmNvbG5hbWVzKG1peF8yXzVfbmV3KSA9IGNvbG5hbWVzKG1peF8xMF9uZXcgKT0gY29sbmFtZXMobWl4XzIwX25ldykgPSBjb2xuYW1lcyhtaXhfNDBfbmV3KSA9IGNvbG5hbWVzKG1peF82MF9uZXcgKSA9IGNvbG5hbWVzKG1peF84MF9uZXcgKSA9DQogIGNvbG5hbWVzKG1peF8xMDBfbmV3ICkgPSBjb2xuYW1lcyh4aWFvX2ZsZXNoX25ldyApID0gY29sbmFtZXMoeGlhb181MDUwX25ldykgPSBjb2xuYW1lcyh4aWFvXzEwMF9uZXcpID0gY29sbmFtZXMoZ2JwX2ZsZXNoX25ldykgPSBjKCJ0aW1lIiwgInRyaWFsXzEiLCAidHJpYWxfMiIsICJ0cmlhbF8zIikNCmBgYA0KDQpgYGB7cn0NCm1peF8yXzVfbmV3X2xvbmcgPSBtaXhfMl81X25ldyAlPiUgDQogIHBpdm90X2xvbmdlcihjb2xzID0gYyggInRyaWFsXzEiLCAidHJpYWxfMiIsICJ0cmlhbF8zIiksDQogICAgICAgICAgICAgICBuYW1lc190byA9ICJ0cmlhbCIsDQogICAgICAgICAgICAgICB2YWx1ZXNfdG8gPSAiYXJlYSIpDQoNCm1peF8xMF9uZXdfbG9uZyA9IG1peF8xMF9uZXcgJT4lIA0KICBwaXZvdF9sb25nZXIoY29scyA9IGMoICJ0cmlhbF8xIiwgInRyaWFsXzIiLCAidHJpYWxfMyIpLA0KICAgICAgICAgICAgICAgbmFtZXNfdG8gPSAidHJpYWwiLA0KICAgICAgICAgICAgICAgdmFsdWVzX3RvID0gImFyZWEiKQ0KDQptaXhfMjBfbmV3X2xvbmcgPSBtaXhfMjBfbmV3ICU+JSANCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBjKCAidHJpYWxfMSIsICJ0cmlhbF8yIiwgInRyaWFsXzMiKSwNCiAgICAgICAgICAgICAgIG5hbWVzX3RvID0gInRyaWFsIiwNCiAgICAgICAgICAgICAgIHZhbHVlc190byA9ICJhcmVhIikNCg0KbWl4XzQwX25ld19sb25nID0gbWl4XzQwX25ldyAlPiUgDQogIHBpdm90X2xvbmdlcihjb2xzID0gYyggInRyaWFsXzEiLCAidHJpYWxfMiIpLA0KICAgICAgICAgICAgICAgbmFtZXNfdG8gPSAidHJpYWwiLA0KICAgICAgICAgICAgICAgdmFsdWVzX3RvID0gImFyZWEiKQ0KDQptaXhfNjBfbmV3X2xvbmcgPSBtaXhfNjBfbmV3ICU+JSANCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBjKCAidHJpYWxfMSIsICJ0cmlhbF8yIiwgInRyaWFsXzMiKSwNCiAgICAgICAgICAgICAgIG5hbWVzX3RvID0gInRyaWFsIiwNCiAgICAgICAgICAgICAgIHZhbHVlc190byA9ICJhcmVhIikNCg0KbWl4XzgwX25ld19sb25nID0gbWl4XzgwX25ldyAlPiUgDQogIHBpdm90X2xvbmdlcihjb2xzID0gYyggInRyaWFsXzEiLCAidHJpYWxfMiIsICJ0cmlhbF8zIiksDQogICAgICAgICAgICAgICBuYW1lc190byA9ICJ0cmlhbCIsDQogICAgICAgICAgICAgICB2YWx1ZXNfdG8gPSAiYXJlYSIpDQoNCm1peF8xMDBfbmV3X2xvbmcgPSBtaXhfMTAwX25ldyAlPiUgDQogIHBpdm90X2xvbmdlcihjb2xzID0gYyggInRyaWFsXzEiLCAidHJpYWxfMiIsICJ0cmlhbF8zIiksDQogICAgICAgICAgICAgICBuYW1lc190byA9ICJ0cmlhbCIsDQogICAgICAgICAgICAgICB2YWx1ZXNfdG8gPSAiYXJlYSIpDQoNCnhpYW9fZmxlc2hfbmV3X2xvbmcgPSB4aWFvX2ZsZXNoX25ldyAlPiUgDQogIHBpdm90X2xvbmdlcihjb2xzID0gYyggInRyaWFsXzEiLCAidHJpYWxfMiIsICJ0cmlhbF8zIiksDQogICAgICAgICAgICAgICBuYW1lc190byA9ICJ0cmlhbCIsDQogICAgICAgICAgICAgICB2YWx1ZXNfdG8gPSAiYXJlYSIpDQoNCnhpYW9fNTA1MF9uZXdfbG9uZyA9IHhpYW9fNTA1MF9uZXcgJT4lIA0KICBwaXZvdF9sb25nZXIoY29scyA9IGMoICJ0cmlhbF8xIiwgInRyaWFsXzIiLCAidHJpYWxfMyIpLA0KICAgICAgICAgICAgICAgbmFtZXNfdG8gPSAidHJpYWwiLA0KICAgICAgICAgICAgICAgdmFsdWVzX3RvID0gImFyZWEiKQ0KDQp4aWFvXzEwMF9uZXdfbG9uZyA9IHhpYW9fMTAwX25ldyAlPiUgDQogIHBpdm90X2xvbmdlcihjb2xzID0gYyggInRyaWFsXzEiLCAidHJpYWxfMiIsICJ0cmlhbF8zIiksDQogICAgICAgICAgICAgICBuYW1lc190byA9ICJ0cmlhbCIsDQogICAgICAgICAgICAgICB2YWx1ZXNfdG8gPSAiYXJlYSIpDQoNCmdicF9mbGVzaF9uZXdfbG9uZyA9IGdicF9mbGVzaF9uZXcgJT4lIA0KICBwaXZvdF9sb25nZXIoY29scyA9IGMoICJ0cmlhbF8xIiwgInRyaWFsXzIiLCAidHJpYWxfMyIpLA0KICAgICAgICAgICAgICAgbmFtZXNfdG8gPSAidHJpYWwiLA0KICAgICAgICAgICAgICAgdmFsdWVzX3RvID0gImFyZWEiKQ0KYGBgDQoNCg0KYGBge3J9DQpjYXBzYWljaW5fMTAwMF9jaHJvbWF0b2dyYW0gPSBnZ3Bsb3QoZGF0YT1DQVBfMTAwMF9MT05HLCBtYXBwaW5nID0gYWVzKHg9IHRpbWUsIHk9YXJlYSwgY29sb3IgPSB0cmlhbCkpICsNCiAgZ2VvbV9saW5lKCkgKw0KICBnZ3RpdGxlKGV4cHJlc3Npb24oIkNocm9tYXRvZ3JhbSBvZiBDYXBzYWljaW4gKDEwMDAiKm11KiJnL21MKSIpKSArDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICdib2xkJywgc2l6ZSA9IDIwLCBoanVzdCA9IDAuNSksIA0KICAgICAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2U9J2JvbGQnKSwgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdCgnYXp1cmUyJyksDQogICAgICAgIGFzcGVjdC5yYXRpbyA9IDAuMykgKw0KICBsYWJzKHg9IlRpbWUgKG1pbikiLCB5PSJBcmVhIiwgY29sb3I9IlRyaWFsIikNCg0KZ2dwbG90KGRhdGE9REhDXzEwMDBfTE9ORywgbWFwcGluZyA9IGFlcyh4PSB0aW1lLCB5PWFyZWEsIGNvbG9yID0gdHJpYWwpKSArDQogIGdlb21fbGluZSgpICsNCiAgZ2d0aXRsZShleHByZXNzaW9uKCJDaHJvbWF0b2dyYW0gb2YgRGloeWRyb2NhcHNhaWNpbiAoMTAwMCIqbXUqImcvbUwpIikpICsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gJ2JvbGQnLCBzaXplID0gMTYsIGhqdXN0ID0gMC41KSwgDQogICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZT0nYm9sZCcpLCBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KCdhenVyZTInKSwNCiAgICAgICAgYXNwZWN0LnJhdGlvID0gMC4zKSArDQogIGxhYnMoeD0iVGltZSAobWluKSIsIHk9IkFyZWEiLCBjb2xvcj0iVHJpYWwiKQ0KDQpnZ3Bsb3QoZGF0YT1NSVhfMjUwX0xPTkcsIG1hcHBpbmcgPSBhZXMoeD0gdGltZSwgeT1hcmVhLCBjb2xvciA9IHRyaWFsKSkgKw0KICBnZW9tX2xpbmUoKSArDQogIGdndGl0bGUoZXhwcmVzc2lvbigiQ2hyb21hdG9ncmFtIG9mIENhcHNhaWNpbiAmIERpaHlkcm9jYXBzYWljaW4gKDI1MCIqbXUqImcvbUwpIikpICsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gJ2JvbGQnLCBzaXplID0gMTYsIGhqdXN0ID0gMC41KSwgDQogICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZT0nYm9sZCcpLCBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KCdhenVyZTInKSwNCiAgICAgICAgYXNwZWN0LnJhdGlvID0gMC4zKSArDQogIGxhYnMoeD0iVGltZSAobWluKSIsIHk9IkFyZWEiLCBjb2xvcj0iVHJpYWwiKQ0KDQpnZ3Bsb3QoZGF0YT1NSVhfMTAwX0xPTkcsIG1hcHBpbmcgPSBhZXMoeD0gdGltZSwgeT1hcmVhLCBjb2xvciA9IHRyaWFsKSkgKw0KICBnZW9tX2xpbmUoKSArDQogIGdndGl0bGUoZXhwcmVzc2lvbigiQ2hyb21hdG9ncmFtIG9mIENhcHNhaWNpbiAmIERpaHlkcm9jYXBzYWljaW4gKDEwMCIqbXUqImcvbUwpIikpICsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gJ2JvbGQnLCBzaXplID0gMTYsIGhqdXN0ID0gMC41KSwgDQogICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZT0nYm9sZCcpLCBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KCdhenVyZTInKSwNCiAgICAgICAgYXNwZWN0LnJhdGlvID0gMC4zKSArDQogIGxhYnMoeD0iVGltZSAobWluKSIsIHk9IkFyZWEiLCBjb2xvcj0iVHJpYWwiKQ0KDQpnZ3Bsb3QoZGF0YT1NSVhfODBfTE9ORywgbWFwcGluZyA9IGFlcyh4PSB0aW1lLCB5PWFyZWEsIGNvbG9yID0gdHJpYWwpKSArDQogIGdlb21fbGluZSgpICsNCiAgZ2d0aXRsZShleHByZXNzaW9uKCJDaHJvbWF0b2dyYW0gb2YgQ2Fwc2FpY2luICYgRGloeWRyb2NhcHNhaWNpbiAoODAiKm11KiJnL21MKSIpKSArDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICdib2xkJywgc2l6ZSA9IDE2LCBoanVzdCA9IDAuNSksIA0KICAgICAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2U9J2JvbGQnKSwgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdCgnYXp1cmUyJyksDQogICAgICAgIGFzcGVjdC5yYXRpbyA9IDAuMykgKw0KICBsYWJzKHg9IlRpbWUgKG1pbikiLCB5PSJBcmVhIiwgY29sb3I9IlRyaWFsIikNCg0KZ2dwbG90KGRhdGE9TUlYXzUwX0xPTkcsIG1hcHBpbmcgPSBhZXMoeD0gdGltZSwgeT1hcmVhLCBjb2xvciA9IHRyaWFsKSkgKw0KICBnZW9tX2xpbmUoKSArDQogIGdndGl0bGUoZXhwcmVzc2lvbigiQ2hyb21hdG9ncmFtIG9mIENhcHNhaWNpbiAmIERpaHlkcm9jYXBzYWljaW4gKDUwIiptdSoiZy9tTCkiKSkgKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAnYm9sZCcsIHNpemUgPSAxNiwgaGp1c3QgPSAwLjUpLCANCiAgICAgICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlPSdib2xkJyksIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoJ2F6dXJlMicpLA0KICAgICAgICBhc3BlY3QucmF0aW8gPSAwLjMpICsNCiAgbGFicyh4PSJUaW1lIChtaW4pIiwgeT0iQXJlYSIsIGNvbG9yPSJUcmlhbCIpDQoNCmdncGxvdChkYXRhPU1JWF8yMF9MT05HLCBtYXBwaW5nID0gYWVzKHg9IHRpbWUsIHk9YXJlYSwgY29sb3IgPSB0cmlhbCkpICsNCiAgZ2VvbV9saW5lKCkgKw0KICBnZ3RpdGxlKGV4cHJlc3Npb24oIkNocm9tYXRvZ3JhbSBvZiBDYXBzYWljaW4gJiBEaWh5ZHJvY2Fwc2FpY2luICgyMCIqbXUqImcvbUwpIikpICsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gJ2JvbGQnLCBzaXplID0gMTYsIGhqdXN0ID0gMC41KSwgDQogICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZT0nYm9sZCcpLCBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KCdhenVyZTInKSwNCiAgICAgICAgYXNwZWN0LnJhdGlvID0gMC4zKSArDQogIGxhYnMoeD0iVGltZSAobWluKSIsIHk9IkFyZWEiLCBjb2xvcj0iVHJpYWwiKQ0KDQpnZ3Bsb3QoZGF0YT1NSVhfMTBfTE9ORywgbWFwcGluZyA9IGFlcyh4PSB0aW1lLCB5PWFyZWEsIGNvbG9yID0gdHJpYWwpKSArDQogIGdlb21fbGluZSgpICsNCiAgZ2d0aXRsZShleHByZXNzaW9uKCJDaHJvbWF0b2dyYW0gb2YgQ2Fwc2FpY2luICYgRGloeWRyb2NhcHNhaWNpbiAoMTAiKm11KiJnL21MKSIpKSArDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICdib2xkJywgc2l6ZSA9IDE2LCBoanVzdCA9IDAuNSksIA0KICAgICAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2U9J2JvbGQnKSwgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdCgnYXp1cmUyJyksDQogICAgICAgIGFzcGVjdC5yYXRpbyA9IDAuMykgKw0KICBsYWJzKHg9IlRpbWUgKG1pbikiLCB5PSJBcmVhIiwgY29sb3I9IlRyaWFsIikNCg0KYGBgDQpgYGB7cn0NCmdicF92c194aWFvID0gZGF0YXNldF9uZXcgJT4lIA0KICBzZWxlY3QoMSwgMjIsIDMxKQ0KDQpjb2xuYW1lcyhnYnBfZmxlc2hfbmV3KSA9IGMoIlRpbWUiLCAiWGlhbyIsICJHcmVlbl9CZWxsIikNCg0KZ2JwX3ZzX3hpYW9fbG9uZyA9IGdicF92c194aWFvICU+JSANCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSAtYygiVGltZSIpLA0KICAgICAgICAgICAgICAgbmFtZXNfdG8gPSAiUGVwcGVyIiwNCiAgICAgICAgICAgICAgIHZhbHVlc190byA9ICJhcmVhIikNCg0KZ2dwbG90KGRhdGE9Z2JwX3ZzX3hpYW9fbG9uZywgbWFwcGluZyA9IGFlcyh4PSBUaW1lLCB5PSBhcmVhLCBjb2xvciA9IFBlcHBlcikpICsNCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoeD0gVGltZSwgeT1hcmVhKSkgKw0KICBnZ3RpdGxlKCJYaWFvIHZzIEdyZWVuIEJlbGwgUGVwcGVyIENocm9tYXRvZ3JhbSIpICsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gJ2JvbGQnLCBzaXplID0gMTYsIGhqdXN0ID0gMC41KSwgDQogICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZT0nYm9sZCcpLCBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KCdhenVyZTInKSwNCiAgICAgICAgYXNwZWN0LnJhdGlvID0gMC44KSArDQogIGxhYnMoeD0iVGltZSAobWluKSIsIHk9IkFyZWEiLCBjb2xvcj0iUGVwcGVyIikNCg0KZ2dzYXZlKGZpbGVuYW1lID0gIlhpYW9fdnNfZ2JwLnBuZyIpDQpgYGANCmBgYHtyfQ0KZ2JwX3ZzX3hpYW9fbG9uZ19maWx0ZXIgPSBnYnBfdnNfeGlhb19sb25nICU+JSANCiAgZmlsdGVyKFRpbWUgPiA1KQ0KDQpnZ3Bsb3QoZGF0YT1nYnBfdnNfeGlhb19sb25nX2ZpbHRlciwgbWFwcGluZyA9IGFlcyh4PSBUaW1lLCB5PSBhcmVhLCBjb2xvciA9IFBlcHBlcikpICsNCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoeD0gVGltZSwgeT1hcmVhKSkgKw0KICBnZ3RpdGxlKCJYaWFvIHZzIEdyZWVuIEJlbGwgUGVwcGVyIENocm9tYXRvZ3JhbSAoWm9vbWVkKSIpICsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gJ2JvbGQnLCBzaXplID0gMTYsIGhqdXN0ID0gMC41KSwgDQogICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZT0nYm9sZCcpLCBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KCdhenVyZTInKSwNCiAgICAgICAgYXNwZWN0LnJhdGlvID0gMC44KSArDQogIGxhYnMoeD0iVGltZSAobWluKSIsIHk9IkFyZWEiLCBjb2xvcj0iUGVwcGVyIikNCg0KZ2dzYXZlKGZpbGVuYW1lID0gIlhpYW9fdnNfZ2JwX3pvb21lZC5wbmciKQ0KYGBgDQpgYGB7cn0NCmdncGxvdChkYXRhPW1peF8xMDBfbmV3LCBtYXBwaW5nID0gYWVzKHg9IHRpbWUsIHk9dHJpYWxfMSkpICsNCiAgZ2VvbV9saW5lKCkgKw0KICBnZ3RpdGxlKGV4cHJlc3Npb24oIkNocm9tYXRvZ3JhbSBvZiBDYXBzYWljaW4gYW5kIERpaHlkcm9jYXBzYWljaW4gTWl4dHVyZSBhdCAoMTAwICIqbXUqImcvbUwpIikpICsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gJ2JvbGQnLCBzaXplID0gMTQsIGhqdXN0ID0gMC41KSwgDQogICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZT0nYm9sZCcpLCBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KCdhenVyZTInKSwNCiAgICAgICAgYXNwZWN0LnJhdGlvID0gMC4zKSArDQogIGxhYnMoeD0iUmV0ZW50aW9uIFRpbWUgKG1pbikiLCB5PSJBYnNvcmJhbmNlIChtQVUpIikgKw0KICBhbm5vdGF0ZSgidGV4dCIsIHg9IDEwLCB5PTkwLCBsYWJlbD0iQ2Fwc2FpY2luIikgKw0KICBhbm5vdGF0ZSgidGV4dCIsIHg9IDE2LjIsIHk9OTAsIGxhYmVsPSJEaWh5ZHJvY2Fwc2FpY2luIikNCg0KZ2dwbG90KGRhdGE9eGlhb18xMDBfbmV3LCBtYXBwaW5nID0gYWVzKHg9IHRpbWUsIHk9dHJpYWxfMSkpICsNCiAgZ2VvbV9saW5lKCkgKw0KICBnZ3RpdGxlKCJYaWFvIEV4dHJhY3RlZCBpbiAxMDAlIE1lQ04iKSArDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICdib2xkJywgc2l6ZSA9IDE0LCBoanVzdCA9IDAuNSksIA0KICAgICAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2U9J2JvbGQnKSwgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdCgnYXp1cmUyJyksDQogICAgICAgIGFzcGVjdC5yYXRpbyA9IDAuMykgKw0KICBsYWJzKHg9IlJldGVudGlvbiBUaW1lIChtaW4pIiwgeT0iQWJzb3JiYW5jZSAobUFVKSIpIA0KYGBgDQpgYGB7cn0NCm1peF8xMDAgPSBNSVhfMTAwWy0zMDAxLF0NCmNvbG5hbWVzKG1peF8xMDApID0gYygib2dfdGltZSIsICJvZ190cmlhbF8xIiwgIm9nX3RyaWFsXzIiLCAib2dfdHJpYWxfMiIpDQpjb2xuYW1lcyhtaXhfMTAwX25ldykgPSBjKCJuZXdfdGltZSIsICJuZXdfdHJpYWxfMSIsICJuZXdfdHJpYWxfMiIsICJuZXdfdHJpYWxfMyIpDQptaXhfc2hpZnQgPSBjYmluZChtaXhfMTAwLCBtaXhfMTAwX25ldykNCm1peF9zaGlmdF9sb25nID0gcGl2b3RfbG9uZ2VyKGRhdGEgPSBtaXhfc2hpZnQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xzID0gc3RhcnRzX3dpdGgoIm9nX3RyaWFsIikgfCBzdGFydHNfd2l0aCgibmV3X3RyaWFsIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc190byA9ICJ0cmlhbF9hZ2UiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzX3RvID0gImFyZWEiKQ0KDQojQmVjYXVzZSB0aGUgdGltZXMgc2xpZ2h0bHkgZGlmZmVyICgwLjAwNCBtaW4pLCB0aGUgYXZlcmFnZSBpcyB0YWtlbiB0byBtYWtlIHRoZSBkYXRhIGVhc2llciB0byBwcm9jZXNzDQptaXhfc2hpZnRfbG9uZyA9IG1peF9zaGlmdF9sb25nICU+JSBtdXRhdGUodGltZSA9IHJvd01lYW5zKGNiaW5kKG9nX3RpbWUsIG5ld190aW1lKSkpDQoNCmdncGxvdChkYXRhPW1peF9zaGlmdF9sb25nLCBtYXBwaW5nID0gYWVzKHg9IHRpbWUsIHk9IGFyZWEsIGNvbG9yID0gdHJpYWxfYWdlKSkgKw0KICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyh4PSB0aW1lLCB5PWFyZWEpKSArDQogIGdndGl0bGUoIkNocm9tYXRvZ3JhbSBTaGlmdCBpbiBNaXgiKSArDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICdib2xkJywgc2l6ZSA9IDE2LCBoanVzdCA9IDAuNSksDQogICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZT0nYm9sZCcpLCBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KCdhenVyZTInKSwNCiAgICAgICAgYXNwZWN0LnJhdGlvID0gMC44KSArDQogIGxhYnMoeD0iVGltZSAobWluKSIsIHk9IkFyZWEiLCBjb2xvcj0iVHJpYWwgYW5kIEFnZSIpDQpgYGANCg0K