Questions 22, 23, 25

## Create survey object.
options(digits = 4)
options(survey.lonely.psu = "adjust")
des <- svydesign(ids = ~1, weights = ~weight, data = df[is.na(df$weight)==F, ])

Q22. Do you do any of the following when you have influenza symptoms?

# subset question data, rename columns, gather into single column
q22_df <- df %>%
  select(CaseID, PPGENDER, PPAGE, ppagecat, PPETHM, PPINCIMP, PPEDUC, PPEDUCAT,
         work, PPWORK, marital, PPMARIT, PPMSACAT, ppreg9, PPSTATEN, PPHOUSE, PPRENT, PPNET, Q22_1:Q22_9, weight) %>%
  rename("Q22_1_Go.to.a.doctor_s.office.or.medical.clinic" = Q22_1,
         "Q22_2_Decide.on.treatment.without.consulting.a.health.practitioner" = Q22_2,
         "Q22_3_Search.the.internet.for.a.treatment" = Q22_3,
         "Q22_4_Get.adequate.sleep" = Q22_4,
         "Q22_5_Eat.nutritious.food" = Q22_5,
         "Q22_6_Take-over-counter.medication.for.symptoms" = Q22_6,
         "Q22_7_Take.an.antiviral.medicine" = Q22_7,
         "Q22_8_Take.no.action.to.treat.the.illness" = Q22_8,
         "Q22_9_Other" = Q22_9) %>%
  gather(Q22_q, Q22_r, Q22_1_Go.to.a.doctor_s.office.or.medical.clinic:Q22_8_Take.no.action.to.treat.the.illness,
         na.rm = T) %>%
  mutate(Q22_q = as.factor(Q22_q))%>%
  mutate(Q22_r = factor(Q22_r, levels = c("Always", "Sometimes", "Never")))
# survey design
options(digits = 4)
options(survey.lonely.psu = "adjust")
des22 <- svydesign(ids = ~1, weights = ~weight, data = q22_df[is.na(q22_df$weight)==F, ])
# weighted data frame
q22 <- data.frame(svytable(~Q22_q + Q22_r + PPGENDER + ppagecat + PPETHM + PPINCIMP, des22, round = T))
# plot templates
title <- ggtitle("Do you do any of the following when you have influenza symptoms?")
## main plot
p <- ggplot(q22, aes(Q22_q, weight = Freq)) + ptext
p + geom_bar(position = 'fill') + aes(fill = Q22_r) + title + coord_flip()

p2 <- ggplot(q22, aes(Q22_q, weight = Freq)) + ptext
p2 + geom_bar(position = "fill") + aes(Q22_q, fill = Q22_r) + coord_flip()

p2 + geom_bar() + aes(Q22_r, fill = Q22_r) + facet_wrap(~Q22_q) + ptext2

p2 + geom_bar() + aes(Q22_q, fill = Q22_q) + facet_wrap(~Q22_r) + ptext2

# by gender
p2 + geom_bar() + aes(PPGENDER, fill = Q22_r) + facet_wrap(~Q22_q) + ggtitle("By gender")

p2 + geom_bar(position = "fill") + aes(PPGENDER, fill = Q22_r) + facet_wrap(~Q22_q)

p2 + geom_bar() + aes(Q22_q, fill = PPGENDER) + facet_wrap(~Q22_r)

p2 + geom_bar(position = 'fill') + aes(Q22_q, fill = PPGENDER) + facet_wrap(~Q22_r) + ggtitle("By gender")

p2 + geom_bar() + aes(PPGENDER, fill = PPGENDER) + facet_grid(Q22_q~Q22_r) + coord_flip() + ptext2

# by age group
p2 + geom_bar() + aes(ppagecat, fill = Q22_r) + facet_wrap(~Q22_q) + ggtitle("By age group")

p2 + geom_bar(position = "fill") + aes(ppagecat, fill = Q22_r) + facet_wrap(~Q22_q)

p2 + geom_bar() + aes(Q22_q, fill = ppagecat) + facet_wrap(~Q22_r)

p2 + geom_bar(position = 'fill') + aes(Q22_q, fill = ppagecat) + facet_wrap(~Q22_r) + ggtitle("By age group")

p2 + geom_bar() + aes(ppagecat, fill = ppagecat) + facet_grid(Q22_q~Q22_r) + ptext2

# by ethnic group
p2 + geom_bar() + aes(PPETHM, fill = Q22_r) + facet_wrap(~Q22_q) + ggtitle("By ethnic group")

p2 + geom_bar(position = "fill") + aes(PPETHM, fill = Q22_r) + facet_wrap(~Q22_q)

p2 + geom_bar() + aes(Q22_q, fill = PPETHM) + facet_wrap(~Q22_r)

p2 + geom_bar(position = 'fill') + aes(Q22_q, fill = PPETHM) + facet_wrap(~Q22_r) + ggtitle("By ethnic group")

p2 + geom_bar() + aes(PPETHM, fill = PPETHM) + facet_grid(Q22_q~Q22_r) + ptext2

p2 + geom_bar() + aes(Q22_r, fill = Q22_r) + facet_grid(Q22_q~PPETHM) + ptext2

# by income
p2 + geom_bar() + aes(PPINCIMP, fill = Q22_r) + facet_wrap(~Q22_q) + ggtitle("By income") + ptext2

p2 + geom_bar(position = "fill") + aes(PPINCIMP, fill = Q22_r) + facet_wrap(~Q22_q) + ptext2

p2 + geom_bar() + aes(Q22_q, fill = PPINCIMP) + facet_wrap(~Q22_r)

p2 + geom_bar(position = 'fill') + aes(Q22_q, fill = PPINCIMP) + facet_wrap(~Q22_r) + ggtitle("By income group")

p2 + geom_bar() + aes(PPINCIMP, fill = PPINCIMP) + facet_grid(Q22_q~Q22_r) + ptext2

Education, work, marital status

# update weighted data frame
q22.2 <- data.frame(svytable(~Q22_q + Q22_r + PPEDUC + PPEDUCAT + work + PPWORK + marital + PPMARIT, des22, round = T))
# restate plots
p3 <- ggplot(q22.2, aes(Q22_q, weight = Freq)) + ptext
# by education
p3 + geom_bar() + aes(PPEDUCAT, fill = Q22_r) + facet_wrap(~Q22_q) + ggtitle("By education")

p3 + geom_bar(position = "fill") + aes(PPEDUCAT, fill = Q22_r) + facet_wrap(~Q22_q)

p3 + geom_bar() + aes(Q22_q, fill = PPEDUCAT) + facet_wrap(~Q22_r)

p3 + geom_bar(position = "fill") + aes(Q22_q, fill = PPEDUCAT) + facet_wrap(~Q22_r) + ggtitle("By education")

p3 + geom_bar() + aes(PPEDUCAT, fill = PPEDUCAT) + facet_grid(Q22_q~Q22_r) + ptext2

p3 + geom_bar() + aes(Q22_r, fill = Q22_r) + facet_grid(Q22_q~PPEDUCAT) + ptext2

# by work
p3 + geom_bar() + aes(work, fill = Q22_r) + facet_wrap(~Q22_q) + ggtitle("By employment status")

p3 + geom_bar(position = "fill") + aes(work, fill = Q22_r) + facet_wrap(~Q22_q)

# by marital
p3 + geom_bar() + aes(marital, fill = Q22_r) + facet_wrap(~Q22_q) + ggtitle("By marital status")

p3 + geom_bar(position = "fill") + aes(marital, fill = Q22_r) + facet_wrap(~Q22_q)

Metro status, region, state, house type, housing status, internet availability

# update weighted data frame
q22.3 <- data.frame(svytable(~Q22_q + Q22_r + PPMSACAT + ppreg9 + PPSTATEN + PPHOUSE + PPRENT + PPNET, des22, round = T))
# restate plots
p4 <- ggplot(q22.3, aes(Q22_q, weight = Freq)) + ptext
# by metro status
p4 + geom_bar(position = "fill") + aes(Q22_r, fill = PPMSACAT) + facet_wrap(~Q22_q) + ggtitle("By metro status")

p4 + geom_bar(position = "fill") + aes(PPMSACAT, fill = Q22_r) + facet_wrap(~Q22_q)

# by region
p4 + geom_bar(position = "fill") + aes(Q22_r, fill = ppreg9) + facet_wrap(~Q22_q) + ggtitle("By region")

p4 + geom_bar() + aes(ppreg9, fill = Q22_r) + facet_wrap(~Q22_q) + ggtitle("By region")

# by state
p4 + geom_bar() + aes(Q22_r, fill = PPSTATEN) + facet_wrap(~Q22_q) + ggtitle("By state")

p4 + geom_bar() + aes(PPSTATEN, fill = Q22_q) + coord_flip() + ggtitle("By state")

# by house type
p4 + geom_bar(position = "fill") + aes(Q22_r, fill = PPHOUSE) + facet_wrap(~Q22_q)

p4 + geom_bar(position = "fill") + aes(fill = PPHOUSE) + ggtitle("By house type")

# housing status
p4 + geom_bar(position = "fill") + aes(Q22_r, fill = PPHOUSE) + facet_wrap(~Q22_q)

p4 + geom_bar() + aes(PPHOUSE, fill = Q22_r) + facet_wrap(~Q22_q) + ggtitle("By housing")

# by internet availability
p4 + geom_bar(position = "fill") + aes(Q22_r, fill = PPNET) + facet_wrap(~Q22_q)

p4 + geom_bar(position = "fill") + aes(PPNET, fill = Q22_r) + facet_wrap(~Q22_q) + ggtitle("By internet availability")

Q23. Which of the following actions do you take when you have influenza symptoms to avoid someone else from getting sick?

# subset question data, rename columns, gather into single column
q23_df <- df %>%
  select(CaseID, PPGENDER, PPAGE, ppagecat, PPETHM, PPINCIMP, PPEDUC, PPEDUCAT,
         work, PPWORK, marital, PPMARIT, PPMSACAT, ppreg9, PPSTATEN, PPHOUSE, PPRENT, PPNET, Q23_1:Q23_11, weight) %>%
  gather(Q23_q, Q23_r, Q23_1:Q23_11, na.rm = T) %>%
  mutate(Q23_q = as.factor(Q23_q))
# survey design
options(digits = 4)
options(survey.lonely.psu = "adjust")
des23 <- svydesign(ids = ~1, weights = ~weight, data = q23_df[is.na(q23_df$weight)==F, ])

Gender, age, ethnicity, income

# weighted data frame
q23 <- data.frame(svytable(~Q23_q + Q23_r + PPGENDER + ppagecat + PPETHM + PPINCIMP, des23, round = T))
# plot templates
title <- ggtitle("Which of the following actions do you take when you have influenza symptoms to avoid someone else from getting sick?")
## main plot
p <- ggplot(q23, aes(Q23_q, weight = Freq)) + ptext
p + geom_bar(position = 'fill') + aes(fill = Q23_r) + title

p2 <- ggplot(q23, aes(Q23_q, weight = Freq)) + ptext
p2 + geom_bar(position = "fill") + aes(Q23_q, fill = Q23_r)

p2 + geom_bar() + aes(Q23_r, fill = Q23_r) + facet_wrap(~Q23_q) + ptext2

p2 + geom_bar() + aes(Q23_q, fill = Q23_q) + facet_wrap(~Q23_r) + ptext2

# by gender
p2 + geom_bar() + aes(PPGENDER, fill = Q23_r) + facet_wrap(~Q23_q) + ggtitle("By gender")

p2 + geom_bar(position = "fill") + aes(PPGENDER, fill = Q23_r) + facet_wrap(~Q23_q)

p2 + geom_bar() + aes(Q23_q, fill = PPGENDER) + facet_wrap(~Q23_r)

p2 + geom_bar(position = 'fill') + aes(Q23_q, fill = PPGENDER) + facet_wrap(~Q23_r) + ggtitle("By gender")

p2 + geom_bar() + aes(PPGENDER, fill = PPGENDER) + facet_grid(Q23_q~Q23_r) + coord_flip() + ptext2

# by age group
p2 + geom_bar() + aes(ppagecat, fill = Q23_r) + facet_wrap(~Q23_q) + ggtitle("By age group")

p2 + geom_bar(position = "fill") + aes(ppagecat, fill = Q23_r) + facet_wrap(~Q23_q)

p2 + geom_bar() + aes(Q23_q, fill = ppagecat) + facet_wrap(~Q23_r)

p2 + geom_bar(position = 'fill') + aes(Q23_q, fill = ppagecat) + facet_wrap(~Q23_r) + ggtitle("By age group")

p2 + geom_bar() + aes(ppagecat, fill = ppagecat) + facet_grid(Q23_q~Q23_r) + ptext2

# by ethnic group
p2 + geom_bar() + aes(PPETHM, fill = Q23_r) + facet_wrap(~Q23_q) + ggtitle("By ethnic group")

p2 + geom_bar(position = "fill") + aes(PPETHM, fill = Q23_r) + facet_wrap(~Q23_q)

p2 + geom_bar() + aes(Q23_q, fill = PPETHM) + facet_wrap(~Q23_r)

p2 + geom_bar(position = 'fill') + aes(Q23_q, fill = PPETHM) + facet_wrap(~Q23_r) + ggtitle("By ethnic group")

p2 + geom_bar() + aes(PPETHM, fill = PPETHM) + facet_grid(Q23_q~Q23_r) + ptext2

p2 + geom_bar() + aes(Q23_r, fill = Q23_r) + facet_grid(Q23_q~PPETHM) + ptext2

# by income
p2 + geom_bar() + aes(PPINCIMP, fill = Q23_r) + facet_wrap(~Q23_q) + ggtitle("By income") + ptext2

p2 + geom_bar(position = "fill") + aes(PPINCIMP, fill = Q23_r) + facet_wrap(~Q23_q) + ptext2

p2 + geom_bar() + aes(Q23_q, fill = PPINCIMP) + facet_wrap(~Q23_r)

p2 + geom_bar(position = 'fill') + aes(Q23_q, fill = PPINCIMP) + facet_wrap(~Q23_r) + ggtitle("By income group")

p2 + geom_bar() + aes(PPINCIMP, fill = PPINCIMP) + facet_grid(Q23_q~Q23_r) + ptext2

Education, work, marital status

# update weighted data frame
q23.2 <- data.frame(svytable(~Q23_q + Q23_r + PPEDUC + PPEDUCAT + work + PPWORK + marital + PPMARIT, des23, round = T))
# restate plots
p3 <- ggplot(q23.2, aes(Q23_q, weight = Freq)) + ptext
# by education
p3 + geom_bar() + aes(PPEDUCAT, fill = Q23_r) + facet_wrap(~Q23_q) + ggtitle("By education")

p3 + geom_bar(position = "fill") + aes(PPEDUCAT, fill = Q23_r) + facet_wrap(~Q23_q)

p3 + geom_bar() + aes(Q23_q, fill = PPEDUCAT) + facet_wrap(~Q23_r)

p3 + geom_bar(position = "fill") + aes(Q23_q, fill = PPEDUCAT) + facet_wrap(~Q23_r) + ggtitle("By education")

p3 + geom_bar() + aes(PPEDUCAT, fill = PPEDUCAT) + facet_grid(Q23_q~Q23_r) + ptext2

p3 + geom_bar() + aes(Q23_r, fill = Q23_r) + facet_grid(Q23_q~PPEDUCAT) + ptext2

# by work
p3 + geom_bar() + aes(work, fill = Q23_r) + facet_wrap(~Q23_q) + ggtitle("By employment status")

p3 + geom_bar(position = "fill") + aes(work, fill = Q23_r) + facet_wrap(~Q23_q)

# by marital
p3 + geom_bar() + aes(marital, fill = Q23_r) + facet_wrap(~Q23_q) + ggtitle("By marital status")

p3 + geom_bar(position = "fill") + aes(marital, fill = Q23_r) + facet_wrap(~Q23_q)

Metro status, region, state, house type, housing status, internet availability

# update weighted data frame
q23.3 <- data.frame(svytable(~Q23_q + Q23_r + PPMSACAT + ppreg9 + PPSTATEN + PPHOUSE + PPRENT + PPNET, des23, round = T))
# restate plots
p4 <- ggplot(q23.3, aes(Q23_q, weight = Freq)) + ptext
# by metro status
p4 + geom_bar(position = "fill") + aes(Q23_r, fill = PPMSACAT) + facet_wrap(~Q23_q) + ggtitle("By metro status")

p4 + geom_bar(position = "fill") + aes(PPMSACAT, fill = Q23_r) + facet_wrap(~Q23_q)

# by region
p4 + geom_bar(position = "fill") + aes(Q23_r, fill = ppreg9) + facet_wrap(~Q23_q) + ggtitle("By region")

p4 + geom_bar() + aes(ppreg9, fill = Q23_r) + facet_wrap(~Q23_q) + ggtitle("By region")

# by state
p4 + geom_bar() + aes(Q23_r, fill = PPSTATEN) + facet_wrap(~Q23_q) + ggtitle("By state")

p4 + geom_bar() + aes(PPSTATEN, fill = Q23_q) + coord_flip() + ggtitle("By state")

# by house type
p4 + geom_bar(position = "fill") + aes(Q23_r, fill = PPHOUSE) + facet_wrap(~Q23_q)

p4 + geom_bar(position = "fill") + aes(fill = PPHOUSE) + ggtitle("By house type")

# housing status
p4 + geom_bar(position = "fill") + aes(Q23_r, fill = PPHOUSE) + facet_wrap(~Q23_q)

p4 + geom_bar() + aes(PPHOUSE, fill = Q23_r) + facet_wrap(~Q23_q) + ggtitle("By housing")

# by internet availability
p4 + geom_bar(position = "fill") + aes(Q23_r, fill = PPNET) + facet_wrap(~Q23_q)

p4 + geom_bar(position = "fill") + aes(PPNET, fill = Q23_r) + facet_wrap(~Q23_q) + ggtitle("By internet availability")

LS0tCnRpdGxlOiAnUTIyLCAyMywgMjUnCm91dHB1dDoKICBodG1sX25vdGVib29rOiAKICAgIHRoZW1lOiBwYXBlcgogICAgdG9jOiB5ZXMKICAgIHRvY19kZXB0aDogMgogIGh0bWxfZG9jdW1lbnQ6CiAgICBmaWdfaGVpZ2h0OiA1CiAgICBmaWdfd2lkdGg6IDcKICAgIHRoZW1lOiBwYXBlcgogICAga2VlcF9tZDogeWVzCiAgICB0b2M6IHllcwogICAgdG9jX2RlcHRoOiAyCi0tLQoKUXVlc3Rpb25zIDIyLCAyMywgMjUKCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZ9CiMjIFNldHVwLgprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFQsIGNhY2hlID0gVCwgY2FjaGUuY29tbWVudHMgPSBGLCB3YXJuaW5nID0gRiwgbWVzc2FnZSA9IEYsIHNpemUgPSAic21hbGwiKQpybShsaXN0ID0gbHMoYWxsLm5hbWVzID0gVCkpCmxpYnJhcnkocm1hcmtkb3duKTsgbGlicmFyeShrbml0cik7IGxpYnJhcnkoZ3JpZEV4dHJhKQpsaWJyYXJ5KHRpZHlyKTsgbGlicmFyeShkcGx5cik7IGxpYnJhcnkoZ2dwbG90Mik7IGxpYnJhcnkoc3VydmV5KQpgYGAKCmBgYHtyIGxvYWQtZGF0YSwgaW5jbHVkZT1GfQojIyBMb2FkIGRhdGEuCmxvYWQoIn4vZ2l0L2ZsdS1zdXJ2ZXkvZGF0YS9jbGVhbmluZzIuUkRhdGEiKQpsb2FkKCJ+L2dpdC9mbHUtc3VydmV5L2RhdGEvcmVjb2RpbmcuUkRhdGEiKSAgIyBsb2FkICJkYXRhciIKZGYgPC0gZGF0YXIgICMgcmVjb2RlZCB2YXJpYWJsZXMKYGBgCgpgYGB7ciBncm91cC1kYXRhLCBpbmNsdWRlPUZ9CiMjIFJlZ3JvdXAgdmFyaWFibGVzLgojIGluY29tZQppbmNvbWUubWFwIDwtIGMocmVwKCJ1bmRlciAkMTBrIiwgMyksIHJlcCgiJDEwayB0byAkMjVrIiwgNCksCiAgICAgICAgICAgICAgICByZXAoIiQyNWsgdG8gJDUwayIsIDQpLCByZXAoIiQ1MGsgdG8gJDc1ayIsIDIpLAogICAgICAgICAgICAgICAgcmVwKCIkNzVrIHRvICQxMDBrIiwgMiksIHJlcCgiJDEwMGsgdG8gJDE1MGsiLCAyKSwKICAgICAgICAgICAgICAgIHJlcCgib3ZlciAkMTUwayIsIDIpKQpkZiRpbmNvbWUgPC0gY29kZShkYXRhciRQUElOQ0lNUCwgaW5jb21lLm1hcCwgInVuZGVyICQxMGsiKQppbmNvbWUubGFiIDwtIGMoInVuZGVyICQxMGsiLCAiJDEwayB0byAkMjVrIiwgIiQyNWsgdG8gJDUwayIsCiAgICAgICAgICAgICAgICAiJDUwayB0byAkNzVrIiwgIiQ3NWsgdG8gJDEwMGsiLCAiJDEwMGsgdG8gJDE1MGsiLAogICAgICAgICAgICAgICAgIm92ZXIgJDE1MGsiKQpkZiRpbmNvbWUgPC0gZmFjdG9yKGRmJGluY29tZSwgbGV2ZWxzID0gaW5jb21lLmxhYikKCiMgbWFyaXRhbCBzdGF1cwptYXJpdGFsLm1hcCA8LSBjKCJzaW5nbGUiLCAicGFydG5lcmVkIiwgInBhcnRuZXJlZCIsICJzaW5nbGUiLCAic2luZ2xlIiwgInNpbmdsZSIpCmRmJG1hcml0YWwgPC0gY29kZShkYXRhZiRQUE1BUklULCBtYXJpdGFsLm1hcCwgInNpbmdsZSIpCgojIHdvcmsgc3RhdHVzCndvcmsubWFwIDwtIGMocmVwKCJ1bmVtcGxveWVkIiwgNSksCiAgICAgICAgICAgICAgcmVwKCJlbXBsb3llZCIsIDIpKQpkZiR3b3JrIDwtIGNvZGUoZGF0YWYkUFBXT1JLLCB3b3JrLm1hcCwgInVuZW1wbG95ZWQiKQpgYGAKCmBgYHtyIGRlcy1zdXJ2ZXl9CiMjIENyZWF0ZSBzdXJ2ZXkgb2JqZWN0LgpvcHRpb25zKGRpZ2l0cyA9IDQpCm9wdGlvbnMoc3VydmV5LmxvbmVseS5wc3UgPSAiYWRqdXN0IikKCmRlcyA8LSBzdnlkZXNpZ24oaWRzID0gfjEsIHdlaWdodHMgPSB+d2VpZ2h0LCBkYXRhID0gZGZbaXMubmEoZGYkd2VpZ2h0KT09RiwgXSkKYGBgCgpgYGB7ciBwbG90LXRlbXAsIGluY2x1ZGU9Rn0KIyMgQ3JlYXRlIGdncGxvdCB0ZW1wbGF0ZXMuCnB0ZXh0IDwtIHRoZW1lKGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gcmVsKDAuOSkpLAogICAgICAgICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEpKQpwdGV4dDIgPC0gcHRleHQgKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfYmxhbmsoKSkKYGBgCgoKIyMgUTIyLiBEbyB5b3UgZG8gYW55IG9mIHRoZSBmb2xsb3dpbmcgd2hlbiB5b3UgaGF2ZSBpbmZsdWVuemEgc3ltcHRvbXM/CgoKYGBge3IgcTIyLWRhdGF9CiMgc3Vic2V0IHF1ZXN0aW9uIGRhdGEsIHJlbmFtZSBjb2x1bW5zLCBnYXRoZXIgaW50byBzaW5nbGUgY29sdW1uCnEyMl9kZiA8LSBkZiAlPiUKICBzZWxlY3QoQ2FzZUlELCBQUEdFTkRFUiwgUFBBR0UsIHBwYWdlY2F0LCBQUEVUSE0sIFBQSU5DSU1QLCBQUEVEVUMsIFBQRURVQ0FULAogICAgICAgICB3b3JrLCBQUFdPUkssIG1hcml0YWwsIFBQTUFSSVQsIFBQTVNBQ0FULCBwcHJlZzksIFBQU1RBVEVOLCBQUEhPVVNFLCBQUFJFTlQsIFBQTkVULCBRMjJfMTpRMjJfOSwgd2VpZ2h0KSAlPiUKICByZW5hbWUoIlEyMl8xX0dvLnRvLmEuZG9jdG9yX3Mub2ZmaWNlLm9yLm1lZGljYWwuY2xpbmljIiA9IFEyMl8xLAogICAgICAgICAiUTIyXzJfRGVjaWRlLm9uLnRyZWF0bWVudC53aXRob3V0LmNvbnN1bHRpbmcuYS5oZWFsdGgucHJhY3RpdGlvbmVyIiA9IFEyMl8yLAogICAgICAgICAiUTIyXzNfU2VhcmNoLnRoZS5pbnRlcm5ldC5mb3IuYS50cmVhdG1lbnQiID0gUTIyXzMsCiAgICAgICAgICJRMjJfNF9HZXQuYWRlcXVhdGUuc2xlZXAiID0gUTIyXzQsCiAgICAgICAgICJRMjJfNV9FYXQubnV0cml0aW91cy5mb29kIiA9IFEyMl81LAogICAgICAgICAiUTIyXzZfVGFrZS1vdmVyLWNvdW50ZXIubWVkaWNhdGlvbi5mb3Iuc3ltcHRvbXMiID0gUTIyXzYsCiAgICAgICAgICJRMjJfN19UYWtlLmFuLmFudGl2aXJhbC5tZWRpY2luZSIgPSBRMjJfNywKICAgICAgICAgIlEyMl84X1Rha2Uubm8uYWN0aW9uLnRvLnRyZWF0LnRoZS5pbGxuZXNzIiA9IFEyMl84LAogICAgICAgICAiUTIyXzlfT3RoZXIiID0gUTIyXzkpICU+JQogIGdhdGhlcihRMjJfcSwgUTIyX3IsIFEyMl8xX0dvLnRvLmEuZG9jdG9yX3Mub2ZmaWNlLm9yLm1lZGljYWwuY2xpbmljOlEyMl84X1Rha2Uubm8uYWN0aW9uLnRvLnRyZWF0LnRoZS5pbGxuZXNzLAogICAgICAgICBuYS5ybSA9IFQpICU+JQogIG11dGF0ZShRMjJfcSA9IGFzLmZhY3RvcihRMjJfcSkpJT4lCiAgbXV0YXRlKFEyMl9yID0gZmFjdG9yKFEyMl9yLCBsZXZlbHMgPSBjKCJBbHdheXMiLCAiU29tZXRpbWVzIiwgIk5ldmVyIikpKQoKCiMgc3VydmV5IGRlc2lnbgpvcHRpb25zKGRpZ2l0cyA9IDQpCm9wdGlvbnMoc3VydmV5LmxvbmVseS5wc3UgPSAiYWRqdXN0IikKZGVzMjIgPC0gc3Z5ZGVzaWduKGlkcyA9IH4xLCB3ZWlnaHRzID0gfndlaWdodCwgZGF0YSA9IHEyMl9kZltpcy5uYShxMjJfZGYkd2VpZ2h0KT09RiwgXSkKYGBgCgpgYGB7ciBxMjItcGxvdC0xLCBmaWcuaGVpZ2h0PTMsIGZpZy53aWR0aD04fQojIHdlaWdodGVkIGRhdGEgZnJhbWUKcTIyIDwtIGRhdGEuZnJhbWUoc3Z5dGFibGUoflEyMl9xICsgUTIyX3IgKyBQUEdFTkRFUiArIHBwYWdlY2F0ICsgUFBFVEhNICsgUFBJTkNJTVAsIGRlczIyLCByb3VuZCA9IFQpKQoKIyBwbG90IHRlbXBsYXRlcwp0aXRsZSA8LSBnZ3RpdGxlKCJEbyB5b3UgZG8gYW55IG9mIHRoZSBmb2xsb3dpbmcgd2hlbiB5b3UgaGF2ZSBpbmZsdWVuemEgc3ltcHRvbXM/IikKCiMjIG1haW4gcGxvdApwIDwtIGdncGxvdChxMjIsIGFlcyhRMjJfcSwgd2VpZ2h0ID0gRnJlcSkpICsgcHRleHQKcCArIGdlb21fYmFyKHBvc2l0aW9uID0gJ2ZpbGwnKSArIGFlcyhmaWxsID0gUTIyX3IpICsgdGl0bGUgKyBjb29yZF9mbGlwKCkKCmBgYAoKCmBgYHtyIHEyMi1wbG90LTFiLCBmaWcuaGVpZ2h0PTQsIGZpZy53aWR0aD04fQpwMiA8LSBnZ3Bsb3QocTIyLCBhZXMoUTIyX3EsIHdlaWdodCA9IEZyZXEpKSArIHB0ZXh0CnAyICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsgYWVzKFEyMl9xLCBmaWxsID0gUTIyX3IpICsgY29vcmRfZmxpcCgpCnAyICsgZ2VvbV9iYXIoKSArIGFlcyhRMjJfciwgZmlsbCA9IFEyMl9yKSArIGZhY2V0X3dyYXAoflEyMl9xKSArIHB0ZXh0MgpwMiArIGdlb21fYmFyKCkgKyBhZXMoUTIyX3EsIGZpbGwgPSBRMjJfcSkgKyBmYWNldF93cmFwKH5RMjJfcikgKyBwdGV4dDIKCmBgYAoKCmBgYHtyfQojIGJ5IGdlbmRlcgpwMiArIGdlb21fYmFyKCkgKyBhZXMoUFBHRU5ERVIsIGZpbGwgPSBRMjJfcikgKyBmYWNldF93cmFwKH5RMjJfcSkgKyBnZ3RpdGxlKCJCeSBnZW5kZXIiKQpwMiArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhQUEdFTkRFUiwgZmlsbCA9IFEyMl9yKSArIGZhY2V0X3dyYXAoflEyMl9xKQpwMiArIGdlb21fYmFyKCkgKyBhZXMoUTIyX3EsIGZpbGwgPSBQUEdFTkRFUikgKyBmYWNldF93cmFwKH5RMjJfcikKcDIgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICdmaWxsJykgKyBhZXMoUTIyX3EsIGZpbGwgPSBQUEdFTkRFUikgKyBmYWNldF93cmFwKH5RMjJfcikgKyBnZ3RpdGxlKCJCeSBnZW5kZXIiKQpwMiArIGdlb21fYmFyKCkgKyBhZXMoUFBHRU5ERVIsIGZpbGwgPSBQUEdFTkRFUikgKyBmYWNldF9ncmlkKFEyMl9xflEyMl9yKSArIGNvb3JkX2ZsaXAoKSArIHB0ZXh0MgpgYGAKCgpgYGB7cn0KIyBieSBhZ2UgZ3JvdXAKcDIgKyBnZW9tX2JhcigpICsgYWVzKHBwYWdlY2F0LCBmaWxsID0gUTIyX3IpICsgZmFjZXRfd3JhcCh+UTIyX3EpICsgZ2d0aXRsZSgiQnkgYWdlIGdyb3VwIikKcDIgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKyBhZXMocHBhZ2VjYXQsIGZpbGwgPSBRMjJfcikgKyBmYWNldF93cmFwKH5RMjJfcSkKcDIgKyBnZW9tX2JhcigpICsgYWVzKFEyMl9xLCBmaWxsID0gcHBhZ2VjYXQpICsgZmFjZXRfd3JhcCh+UTIyX3IpCnAyICsgZ2VvbV9iYXIocG9zaXRpb24gPSAnZmlsbCcpICsgYWVzKFEyMl9xLCBmaWxsID0gcHBhZ2VjYXQpICsgZmFjZXRfd3JhcCh+UTIyX3IpICsgZ2d0aXRsZSgiQnkgYWdlIGdyb3VwIikKcDIgKyBnZW9tX2JhcigpICsgYWVzKHBwYWdlY2F0LCBmaWxsID0gcHBhZ2VjYXQpICsgZmFjZXRfZ3JpZChRMjJfcX5RMjJfcikgKyBwdGV4dDIKYGBgCgoKYGBge3J9CiMgYnkgZXRobmljIGdyb3VwCnAyICsgZ2VvbV9iYXIoKSArIGFlcyhQUEVUSE0sIGZpbGwgPSBRMjJfcikgKyBmYWNldF93cmFwKH5RMjJfcSkgKyBnZ3RpdGxlKCJCeSBldGhuaWMgZ3JvdXAiKQpwMiArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhQUEVUSE0sIGZpbGwgPSBRMjJfcikgKyBmYWNldF93cmFwKH5RMjJfcSkKcDIgKyBnZW9tX2JhcigpICsgYWVzKFEyMl9xLCBmaWxsID0gUFBFVEhNKSArIGZhY2V0X3dyYXAoflEyMl9yKQpwMiArIGdlb21fYmFyKHBvc2l0aW9uID0gJ2ZpbGwnKSArIGFlcyhRMjJfcSwgZmlsbCA9IFBQRVRITSkgKyBmYWNldF93cmFwKH5RMjJfcikgKyBnZ3RpdGxlKCJCeSBldGhuaWMgZ3JvdXAiKQpwMiArIGdlb21fYmFyKCkgKyBhZXMoUFBFVEhNLCBmaWxsID0gUFBFVEhNKSArIGZhY2V0X2dyaWQoUTIyX3F+UTIyX3IpICsgcHRleHQyCnAyICsgZ2VvbV9iYXIoKSArIGFlcyhRMjJfciwgZmlsbCA9IFEyMl9yKSArIGZhY2V0X2dyaWQoUTIyX3F+UFBFVEhNKSArIHB0ZXh0MgpgYGAKCgpgYGB7cn0KIyBieSBpbmNvbWUKcDIgKyBnZW9tX2JhcigpICsgYWVzKFBQSU5DSU1QLCBmaWxsID0gUTIyX3IpICsgZmFjZXRfd3JhcCh+UTIyX3EpICsgZ2d0aXRsZSgiQnkgaW5jb21lIikgKyBwdGV4dDIKcDIgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKyBhZXMoUFBJTkNJTVAsIGZpbGwgPSBRMjJfcikgKyBmYWNldF93cmFwKH5RMjJfcSkgKyBwdGV4dDIKcDIgKyBnZW9tX2JhcigpICsgYWVzKFEyMl9xLCBmaWxsID0gUFBJTkNJTVApICsgZmFjZXRfd3JhcCh+UTIyX3IpCnAyICsgZ2VvbV9iYXIocG9zaXRpb24gPSAnZmlsbCcpICsgYWVzKFEyMl9xLCBmaWxsID0gUFBJTkNJTVApICsgZmFjZXRfd3JhcCh+UTIyX3IpICsgZ2d0aXRsZSgiQnkgaW5jb21lIGdyb3VwIikKcDIgKyBnZW9tX2JhcigpICsgYWVzKFBQSU5DSU1QLCBmaWxsID0gUFBJTkNJTVApICsgZmFjZXRfZ3JpZChRMjJfcX5RMjJfcikgKyBwdGV4dDIKCmBgYAoKIyMjIEVkdWNhdGlvbiwgd29yaywgbWFyaXRhbCBzdGF0dXMKCmBgYHtyIHEyMi1wbG90LTJ9CiMgdXBkYXRlIHdlaWdodGVkIGRhdGEgZnJhbWUKcTIyLjIgPC0gZGF0YS5mcmFtZShzdnl0YWJsZSh+UTIyX3EgKyBRMjJfciArIFBQRURVQyArIFBQRURVQ0FUICsgd29yayArIFBQV09SSyArIG1hcml0YWwgKyBQUE1BUklULCBkZXMyMiwgcm91bmQgPSBUKSkKCiMgcmVzdGF0ZSBwbG90cwpwMyA8LSBnZ3Bsb3QocTIyLjIsIGFlcyhRMjJfcSwgd2VpZ2h0ID0gRnJlcSkpICsgcHRleHQKYGBgCgpgYGB7ciBxMjItcGxvdC0yYn0KIyBieSBlZHVjYXRpb24KcDMgKyBnZW9tX2JhcigpICsgYWVzKFBQRURVQ0FULCBmaWxsID0gUTIyX3IpICsgZmFjZXRfd3JhcCh+UTIyX3EpICsgZ2d0aXRsZSgiQnkgZWR1Y2F0aW9uIikKcDMgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKyBhZXMoUFBFRFVDQVQsIGZpbGwgPSBRMjJfcikgKyBmYWNldF93cmFwKH5RMjJfcSkKcDMgKyBnZW9tX2JhcigpICsgYWVzKFEyMl9xLCBmaWxsID0gUFBFRFVDQVQpICsgZmFjZXRfd3JhcCh+UTIyX3IpCnAzICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsgYWVzKFEyMl9xLCBmaWxsID0gUFBFRFVDQVQpICsgZmFjZXRfd3JhcCh+UTIyX3IpICsgZ2d0aXRsZSgiQnkgZWR1Y2F0aW9uIikKcDMgKyBnZW9tX2JhcigpICsgYWVzKFBQRURVQ0FULCBmaWxsID0gUFBFRFVDQVQpICsgZmFjZXRfZ3JpZChRMjJfcX5RMjJfcikgKyBwdGV4dDIKcDMgKyBnZW9tX2JhcigpICsgYWVzKFEyMl9yLCBmaWxsID0gUTIyX3IpICsgZmFjZXRfZ3JpZChRMjJfcX5QUEVEVUNBVCkgKyBwdGV4dDIKYGBgCgoKYGBge3J9CiMgYnkgd29yawpwMyArIGdlb21fYmFyKCkgKyBhZXMod29yaywgZmlsbCA9IFEyMl9yKSArIGZhY2V0X3dyYXAoflEyMl9xKSArIGdndGl0bGUoIkJ5IGVtcGxveW1lbnQgc3RhdHVzIikKcDMgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKyBhZXMod29yaywgZmlsbCA9IFEyMl9yKSArIGZhY2V0X3dyYXAoflEyMl9xKQpgYGAKCgpgYGB7cn0KIyBieSBtYXJpdGFsCnAzICsgZ2VvbV9iYXIoKSArIGFlcyhtYXJpdGFsLCBmaWxsID0gUTIyX3IpICsgZmFjZXRfd3JhcCh+UTIyX3EpICsgZ2d0aXRsZSgiQnkgbWFyaXRhbCBzdGF0dXMiKQpwMyArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhtYXJpdGFsLCBmaWxsID0gUTIyX3IpICsgZmFjZXRfd3JhcCh+UTIyX3EpCgpgYGAKCiMjIyBNZXRybyBzdGF0dXMsIHJlZ2lvbiwgc3RhdGUsIGhvdXNlIHR5cGUsIGhvdXNpbmcgc3RhdHVzLCBpbnRlcm5ldCBhdmFpbGFiaWxpdHkKCmBgYHtyIHEyMi1wbG90LTN9CiMgdXBkYXRlIHdlaWdodGVkIGRhdGEgZnJhbWUKcTIyLjMgPC0gZGF0YS5mcmFtZShzdnl0YWJsZSh+UTIyX3EgKyBRMjJfciArIFBQTVNBQ0FUICsgcHByZWc5ICsgUFBTVEFURU4gKyBQUEhPVVNFICsgUFBSRU5UICsgUFBORVQsIGRlczIyLCByb3VuZCA9IFQpKQoKIyByZXN0YXRlIHBsb3RzCnA0IDwtIGdncGxvdChxMjIuMywgYWVzKFEyMl9xLCB3ZWlnaHQgPSBGcmVxKSkgKyBwdGV4dApgYGAKCmBgYHtyIHEyMi1wbG90LTNifQojIGJ5IG1ldHJvIHN0YXR1cwpwNCArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhRMjJfciwgZmlsbCA9IFBQTVNBQ0FUKSArIGZhY2V0X3dyYXAoflEyMl9xKSArIGdndGl0bGUoIkJ5IG1ldHJvIHN0YXR1cyIpCnA0ICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsgYWVzKFBQTVNBQ0FULCBmaWxsID0gUTIyX3IpICsgZmFjZXRfd3JhcCh+UTIyX3EpCgojIGJ5IHJlZ2lvbgpwNCArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhRMjJfciwgZmlsbCA9IHBwcmVnOSkgKyBmYWNldF93cmFwKH5RMjJfcSkgKyBnZ3RpdGxlKCJCeSByZWdpb24iKQpwNCArIGdlb21fYmFyKCkgKyBhZXMocHByZWc5LCBmaWxsID0gUTIyX3IpICsgZmFjZXRfd3JhcCh+UTIyX3EpICsgZ2d0aXRsZSgiQnkgcmVnaW9uIikKCiMgYnkgc3RhdGUKcDQgKyBnZW9tX2JhcigpICsgYWVzKFEyMl9yLCBmaWxsID0gUFBTVEFURU4pICsgZmFjZXRfd3JhcCh+UTIyX3EpICsgZ2d0aXRsZSgiQnkgc3RhdGUiKQpwNCArIGdlb21fYmFyKCkgKyBhZXMoUFBTVEFURU4sIGZpbGwgPSBRMjJfcSkgKyBjb29yZF9mbGlwKCkgKyBnZ3RpdGxlKCJCeSBzdGF0ZSIpCmBgYAoKCmBgYHtyfQojIGJ5IGhvdXNlIHR5cGUKcDQgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKyBhZXMoUTIyX3IsIGZpbGwgPSBQUEhPVVNFKSArIGZhY2V0X3dyYXAoflEyMl9xKQpwNCArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhmaWxsID0gUFBIT1VTRSkgKyBnZ3RpdGxlKCJCeSBob3VzZSB0eXBlIikKCiMgaG91c2luZyBzdGF0dXMKcDQgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKyBhZXMoUTIyX3IsIGZpbGwgPSBQUEhPVVNFKSArIGZhY2V0X3dyYXAoflEyMl9xKQpwNCArIGdlb21fYmFyKCkgKyBhZXMoUFBIT1VTRSwgZmlsbCA9IFEyMl9yKSArIGZhY2V0X3dyYXAoflEyMl9xKSArIGdndGl0bGUoIkJ5IGhvdXNpbmciKQoKIyBieSBpbnRlcm5ldCBhdmFpbGFiaWxpdHkKcDQgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKyBhZXMoUTIyX3IsIGZpbGwgPSBQUE5FVCkgKyBmYWNldF93cmFwKH5RMjJfcSkKcDQgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKyBhZXMoUFBORVQsIGZpbGwgPSBRMjJfcikgKyBmYWNldF93cmFwKH5RMjJfcSkgKyBnZ3RpdGxlKCJCeSBpbnRlcm5ldCBhdmFpbGFiaWxpdHkiKQoKYGBgCgoKCgoKIyMgUTIzLiBXaGljaCBvZiB0aGUgZm9sbG93aW5nIGFjdGlvbnMgZG8geW91IHRha2Ugd2hlbiB5b3UgaGF2ZSBpbmZsdWVuemEgc3ltcHRvbXMgdG8gYXZvaWQgc29tZW9uZSBlbHNlIGZyb20gZ2V0dGluZyBzaWNrPwoKYGBge3IgcTIzLWRhdGF9CiMgc3Vic2V0IHF1ZXN0aW9uIGRhdGEsIHJlbmFtZSBjb2x1bW5zLCBnYXRoZXIgaW50byBzaW5nbGUgY29sdW1uCnEyM19kZiA8LSBkZiAlPiUKICBzZWxlY3QoQ2FzZUlELCBQUEdFTkRFUiwgUFBBR0UsIHBwYWdlY2F0LCBQUEVUSE0sIFBQSU5DSU1QLCBQUEVEVUMsIFBQRURVQ0FULAogICAgICAgICB3b3JrLCBQUFdPUkssIG1hcml0YWwsIFBQTUFSSVQsIFBQTVNBQ0FULCBwcHJlZzksIFBQU1RBVEVOLCBQUEhPVVNFLCBQUFJFTlQsIFBQTkVULCBRMjNfMTpRMjNfMTEsIHdlaWdodCkgJT4lCiAgZ2F0aGVyKFEyM19xLCBRMjNfciwgUTIzXzE6UTIzXzExLCBuYS5ybSA9IFQpICU+JQogIG11dGF0ZShRMjNfcSA9IGFzLmZhY3RvcihRMjNfcSkpCgojIHN1cnZleSBkZXNpZ24Kb3B0aW9ucyhkaWdpdHMgPSA0KQpvcHRpb25zKHN1cnZleS5sb25lbHkucHN1ID0gImFkanVzdCIpCmRlczIzIDwtIHN2eWRlc2lnbihpZHMgPSB+MSwgd2VpZ2h0cyA9IH53ZWlnaHQsIGRhdGEgPSBxMjNfZGZbaXMubmEocTIzX2RmJHdlaWdodCk9PUYsIF0pCmBgYAoKIyMjIEdlbmRlciwgYWdlLCBldGhuaWNpdHksIGluY29tZQoKYGBge3IgcTIzLXBsb3QtMX0KIyB3ZWlnaHRlZCBkYXRhIGZyYW1lCnEyMyA8LSBkYXRhLmZyYW1lKHN2eXRhYmxlKH5RMjNfcSArIFEyM19yICsgUFBHRU5ERVIgKyBwcGFnZWNhdCArIFBQRVRITSArIFBQSU5DSU1QLCBkZXMyMywgcm91bmQgPSBUKSkKCiMgcGxvdCB0ZW1wbGF0ZXMKdGl0bGUgPC0gZ2d0aXRsZSgiV2hpY2ggb2YgdGhlIGZvbGxvd2luZyBhY3Rpb25zIGRvIHlvdSB0YWtlIHdoZW4geW91IGhhdmUgaW5mbHVlbnphIHN5bXB0b21zIHRvIGF2b2lkIHNvbWVvbmUgZWxzZSBmcm9tIGdldHRpbmcgc2ljaz8iKQoKIyMgbWFpbiBwbG90CnAgPC0gZ2dwbG90KHEyMywgYWVzKFEyM19xLCB3ZWlnaHQgPSBGcmVxKSkgKyBwdGV4dApwICsgZ2VvbV9iYXIocG9zaXRpb24gPSAnZmlsbCcpICsgYWVzKGZpbGwgPSBRMjNfcikgKyB0aXRsZQpgYGAKCmBgYHtyIHEyMy1wbG90LTFifQpwMiA8LSBnZ3Bsb3QocTIzLCBhZXMoUTIzX3EsIHdlaWdodCA9IEZyZXEpKSArIHB0ZXh0CnAyICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsgYWVzKFEyM19xLCBmaWxsID0gUTIzX3IpCnAyICsgZ2VvbV9iYXIoKSArIGFlcyhRMjNfciwgZmlsbCA9IFEyM19yKSArIGZhY2V0X3dyYXAoflEyM19xKSArIHB0ZXh0MgpwMiArIGdlb21fYmFyKCkgKyBhZXMoUTIzX3EsIGZpbGwgPSBRMjNfcSkgKyBmYWNldF93cmFwKH5RMjNfcikgKyBwdGV4dDIKCiMgYnkgZ2VuZGVyCnAyICsgZ2VvbV9iYXIoKSArIGFlcyhQUEdFTkRFUiwgZmlsbCA9IFEyM19yKSArIGZhY2V0X3dyYXAoflEyM19xKSArIGdndGl0bGUoIkJ5IGdlbmRlciIpCnAyICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsgYWVzKFBQR0VOREVSLCBmaWxsID0gUTIzX3IpICsgZmFjZXRfd3JhcCh+UTIzX3EpCnAyICsgZ2VvbV9iYXIoKSArIGFlcyhRMjNfcSwgZmlsbCA9IFBQR0VOREVSKSArIGZhY2V0X3dyYXAoflEyM19yKQpwMiArIGdlb21fYmFyKHBvc2l0aW9uID0gJ2ZpbGwnKSArIGFlcyhRMjNfcSwgZmlsbCA9IFBQR0VOREVSKSArIGZhY2V0X3dyYXAoflEyM19yKSArIGdndGl0bGUoIkJ5IGdlbmRlciIpCnAyICsgZ2VvbV9iYXIoKSArIGFlcyhQUEdFTkRFUiwgZmlsbCA9IFBQR0VOREVSKSArIGZhY2V0X2dyaWQoUTIzX3F+UTIzX3IpICsgY29vcmRfZmxpcCgpICsgcHRleHQyCgojIGJ5IGFnZSBncm91cApwMiArIGdlb21fYmFyKCkgKyBhZXMocHBhZ2VjYXQsIGZpbGwgPSBRMjNfcikgKyBmYWNldF93cmFwKH5RMjNfcSkgKyBnZ3RpdGxlKCJCeSBhZ2UgZ3JvdXAiKQpwMiArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhwcGFnZWNhdCwgZmlsbCA9IFEyM19yKSArIGZhY2V0X3dyYXAoflEyM19xKQpwMiArIGdlb21fYmFyKCkgKyBhZXMoUTIzX3EsIGZpbGwgPSBwcGFnZWNhdCkgKyBmYWNldF93cmFwKH5RMjNfcikKcDIgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICdmaWxsJykgKyBhZXMoUTIzX3EsIGZpbGwgPSBwcGFnZWNhdCkgKyBmYWNldF93cmFwKH5RMjNfcikgKyBnZ3RpdGxlKCJCeSBhZ2UgZ3JvdXAiKQpwMiArIGdlb21fYmFyKCkgKyBhZXMocHBhZ2VjYXQsIGZpbGwgPSBwcGFnZWNhdCkgKyBmYWNldF9ncmlkKFEyM19xflEyM19yKSArIHB0ZXh0MgoKIyBieSBldGhuaWMgZ3JvdXAKcDIgKyBnZW9tX2JhcigpICsgYWVzKFBQRVRITSwgZmlsbCA9IFEyM19yKSArIGZhY2V0X3dyYXAoflEyM19xKSArIGdndGl0bGUoIkJ5IGV0aG5pYyBncm91cCIpCnAyICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsgYWVzKFBQRVRITSwgZmlsbCA9IFEyM19yKSArIGZhY2V0X3dyYXAoflEyM19xKQpwMiArIGdlb21fYmFyKCkgKyBhZXMoUTIzX3EsIGZpbGwgPSBQUEVUSE0pICsgZmFjZXRfd3JhcCh+UTIzX3IpCnAyICsgZ2VvbV9iYXIocG9zaXRpb24gPSAnZmlsbCcpICsgYWVzKFEyM19xLCBmaWxsID0gUFBFVEhNKSArIGZhY2V0X3dyYXAoflEyM19yKSArIGdndGl0bGUoIkJ5IGV0aG5pYyBncm91cCIpCnAyICsgZ2VvbV9iYXIoKSArIGFlcyhQUEVUSE0sIGZpbGwgPSBQUEVUSE0pICsgZmFjZXRfZ3JpZChRMjNfcX5RMjNfcikgKyBwdGV4dDIKcDIgKyBnZW9tX2JhcigpICsgYWVzKFEyM19yLCBmaWxsID0gUTIzX3IpICsgZmFjZXRfZ3JpZChRMjNfcX5QUEVUSE0pICsgcHRleHQyCmBgYAoKCmBgYHtyfQojIGJ5IGluY29tZQpwMiArIGdlb21fYmFyKCkgKyBhZXMoUFBJTkNJTVAsIGZpbGwgPSBRMjNfcikgKyBmYWNldF93cmFwKH5RMjNfcSkgKyBnZ3RpdGxlKCJCeSBpbmNvbWUiKSArIHB0ZXh0MgpwMiArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhQUElOQ0lNUCwgZmlsbCA9IFEyM19yKSArIGZhY2V0X3dyYXAoflEyM19xKSArIHB0ZXh0MgpwMiArIGdlb21fYmFyKCkgKyBhZXMoUTIzX3EsIGZpbGwgPSBQUElOQ0lNUCkgKyBmYWNldF93cmFwKH5RMjNfcikKcDIgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICdmaWxsJykgKyBhZXMoUTIzX3EsIGZpbGwgPSBQUElOQ0lNUCkgKyBmYWNldF93cmFwKH5RMjNfcikgKyBnZ3RpdGxlKCJCeSBpbmNvbWUgZ3JvdXAiKQpwMiArIGdlb21fYmFyKCkgKyBhZXMoUFBJTkNJTVAsIGZpbGwgPSBQUElOQ0lNUCkgKyBmYWNldF9ncmlkKFEyM19xflEyM19yKSArIHB0ZXh0MgoKYGBgCgojIyMgRWR1Y2F0aW9uLCB3b3JrLCBtYXJpdGFsIHN0YXR1cwoKYGBge3IgcTIzLXBsb3QtMn0KIyB1cGRhdGUgd2VpZ2h0ZWQgZGF0YSBmcmFtZQpxMjMuMiA8LSBkYXRhLmZyYW1lKHN2eXRhYmxlKH5RMjNfcSArIFEyM19yICsgUFBFRFVDICsgUFBFRFVDQVQgKyB3b3JrICsgUFBXT1JLICsgbWFyaXRhbCArIFBQTUFSSVQsIGRlczIzLCByb3VuZCA9IFQpKQoKIyByZXN0YXRlIHBsb3RzCnAzIDwtIGdncGxvdChxMjMuMiwgYWVzKFEyM19xLCB3ZWlnaHQgPSBGcmVxKSkgKyBwdGV4dApgYGAKCmBgYHtyIHEyMy1wbG90LTJifQojIGJ5IGVkdWNhdGlvbgpwMyArIGdlb21fYmFyKCkgKyBhZXMoUFBFRFVDQVQsIGZpbGwgPSBRMjNfcikgKyBmYWNldF93cmFwKH5RMjNfcSkgKyBnZ3RpdGxlKCJCeSBlZHVjYXRpb24iKQpwMyArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhQUEVEVUNBVCwgZmlsbCA9IFEyM19yKSArIGZhY2V0X3dyYXAoflEyM19xKQpwMyArIGdlb21fYmFyKCkgKyBhZXMoUTIzX3EsIGZpbGwgPSBQUEVEVUNBVCkgKyBmYWNldF93cmFwKH5RMjNfcikKcDMgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKyBhZXMoUTIzX3EsIGZpbGwgPSBQUEVEVUNBVCkgKyBmYWNldF93cmFwKH5RMjNfcikgKyBnZ3RpdGxlKCJCeSBlZHVjYXRpb24iKQpwMyArIGdlb21fYmFyKCkgKyBhZXMoUFBFRFVDQVQsIGZpbGwgPSBQUEVEVUNBVCkgKyBmYWNldF9ncmlkKFEyM19xflEyM19yKSArIHB0ZXh0MgpwMyArIGdlb21fYmFyKCkgKyBhZXMoUTIzX3IsIGZpbGwgPSBRMjNfcikgKyBmYWNldF9ncmlkKFEyM19xflBQRURVQ0FUKSArIHB0ZXh0MgpgYGAKCmBgYHtyfQojIGJ5IHdvcmsKcDMgKyBnZW9tX2JhcigpICsgYWVzKHdvcmssIGZpbGwgPSBRMjNfcikgKyBmYWNldF93cmFwKH5RMjNfcSkgKyBnZ3RpdGxlKCJCeSBlbXBsb3ltZW50IHN0YXR1cyIpCnAzICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsgYWVzKHdvcmssIGZpbGwgPSBRMjNfcikgKyBmYWNldF93cmFwKH5RMjNfcSkKYGBgCgpgYGB7cn0KIyBieSBtYXJpdGFsCnAzICsgZ2VvbV9iYXIoKSArIGFlcyhtYXJpdGFsLCBmaWxsID0gUTIzX3IpICsgZmFjZXRfd3JhcCh+UTIzX3EpICsgZ2d0aXRsZSgiQnkgbWFyaXRhbCBzdGF0dXMiKQpwMyArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhtYXJpdGFsLCBmaWxsID0gUTIzX3IpICsgZmFjZXRfd3JhcCh+UTIzX3EpCgpgYGAKCiMjIyBNZXRybyBzdGF0dXMsIHJlZ2lvbiwgc3RhdGUsIGhvdXNlIHR5cGUsIGhvdXNpbmcgc3RhdHVzLCBpbnRlcm5ldCBhdmFpbGFiaWxpdHkKCmBgYHtyIHEyMy1wbG90LTN9CiMgdXBkYXRlIHdlaWdodGVkIGRhdGEgZnJhbWUKcTIzLjMgPC0gZGF0YS5mcmFtZShzdnl0YWJsZSh+UTIzX3EgKyBRMjNfciArIFBQTVNBQ0FUICsgcHByZWc5ICsgUFBTVEFURU4gKyBQUEhPVVNFICsgUFBSRU5UICsgUFBORVQsIGRlczIzLCByb3VuZCA9IFQpKQoKIyByZXN0YXRlIHBsb3RzCnA0IDwtIGdncGxvdChxMjMuMywgYWVzKFEyM19xLCB3ZWlnaHQgPSBGcmVxKSkgKyBwdGV4dApgYGAKCmBgYHtyIHEyMy1wbG90LTNifQojIGJ5IG1ldHJvIHN0YXR1cwpwNCArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhRMjNfciwgZmlsbCA9IFBQTVNBQ0FUKSArIGZhY2V0X3dyYXAoflEyM19xKSArIGdndGl0bGUoIkJ5IG1ldHJvIHN0YXR1cyIpCnA0ICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsgYWVzKFBQTVNBQ0FULCBmaWxsID0gUTIzX3IpICsgZmFjZXRfd3JhcCh+UTIzX3EpCmBgYAoKYGBge3J9CiMgYnkgcmVnaW9uCnA0ICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsgYWVzKFEyM19yLCBmaWxsID0gcHByZWc5KSArIGZhY2V0X3dyYXAoflEyM19xKSArIGdndGl0bGUoIkJ5IHJlZ2lvbiIpCnA0ICsgZ2VvbV9iYXIoKSArIGFlcyhwcHJlZzksIGZpbGwgPSBRMjNfcikgKyBmYWNldF93cmFwKH5RMjNfcSkgKyBnZ3RpdGxlKCJCeSByZWdpb24iKQoKIyBieSBzdGF0ZQpwNCArIGdlb21fYmFyKCkgKyBhZXMoUTIzX3IsIGZpbGwgPSBQUFNUQVRFTikgKyBmYWNldF93cmFwKH5RMjNfcSkgKyBnZ3RpdGxlKCJCeSBzdGF0ZSIpCnA0ICsgZ2VvbV9iYXIoKSArIGFlcyhQUFNUQVRFTiwgZmlsbCA9IFEyM19xKSArIGNvb3JkX2ZsaXAoKSArIGdndGl0bGUoIkJ5IHN0YXRlIikKYGBgCgpgYGB7cn0KIyBieSBob3VzZSB0eXBlCnA0ICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsgYWVzKFEyM19yLCBmaWxsID0gUFBIT1VTRSkgKyBmYWNldF93cmFwKH5RMjNfcSkKcDQgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKyBhZXMoZmlsbCA9IFBQSE9VU0UpICsgZ2d0aXRsZSgiQnkgaG91c2UgdHlwZSIpCgojIGhvdXNpbmcgc3RhdHVzCnA0ICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsgYWVzKFEyM19yLCBmaWxsID0gUFBIT1VTRSkgKyBmYWNldF93cmFwKH5RMjNfcSkKcDQgKyBnZW9tX2JhcigpICsgYWVzKFBQSE9VU0UsIGZpbGwgPSBRMjNfcikgKyBmYWNldF93cmFwKH5RMjNfcSkgKyBnZ3RpdGxlKCJCeSBob3VzaW5nIikKYGBgCgpgYGB7cn0KIyBieSBpbnRlcm5ldCBhdmFpbGFiaWxpdHkKcDQgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKyBhZXMoUTIzX3IsIGZpbGwgPSBQUE5FVCkgKyBmYWNldF93cmFwKH5RMjNfcSkKcDQgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKyBhZXMoUFBORVQsIGZpbGwgPSBRMjNfcikgKyBmYWNldF93cmFwKH5RMjNfcSkgKyBnZ3RpdGxlKCJCeSBpbnRlcm5ldCBhdmFpbGFiaWxpdHkiKQoKYGBgCgoKCgo=