knitr::opts_chunk$set(echo = TRUE)
rm(list = ls(all.names = TRUE))
library(readxl)
library(janitor)
library(dplyr)
library(tidyr)
library(lubridate)
library(forcats)
library(ggplot2)
# all counties
master_all <- readxl::read_excel("master_data.xlsx", sheet = "MASTER")
# view master columns
names(master_all)
[1] "Region" "Week" "Report_Date" "Data_Date" "County"
[6] "State" "Pop" "FIPS" "Census_4" "Urban_3"
[11] "Urban_6" "New_Status" "Tribal" "Driver_1" "Driver_2"
[16] "Driver_3" "Driver_4" "Driver_5" "Drivers" "Demographics"
[21] "Cases" "Testing" "Location" "Prev_Report" "Narrative"
[26] "Outreach_Date" "Outreach_Team" "Outreach_Type"
table(master_all$Driver_1, useNA = "always")
C D F L M P S T TR U UU W <NA>
3584 60 253 512 83 334 5 363 9 2256 218 117 0
table(master_all$Driver_2, useNA = "always")
C D F L M P S T TR U W <NA>
506 153 188 748 112 257 17 479 40 83 279 4932
table(master_all$Driver_3, useNA = "always")
C D F L M P S T TR U W <NA>
70 14 45 171 39 89 7 36 22 20 60 7221
table(master_all$Driver_4, useNA = "always")
C D F L M P S T W <NA>
18 1 5 51 12 9 10 11 5 7672
table(master_all$Driver_5, useNA = "always")
<NA>
7794
# 882 = total counties
summarise(master_all, n_distinct(FIPS))
# 735 = new counties
filter(master_all, New_Status == 1) %>%
summarise(n_distinct(FIPS))
# set dataframe to analyze drivers
master <- master_all
# subset long
long <- dplyr::select(master, c(Region:Driver_5)) %>%
tidyr::pivot_longer(Driver_1:Driver_5) %>% # group driver cols together
#tidyr::drop_na() %>%
dplyr::mutate(Month = lubridate::month(Data_Date)) %>%
dplyr::mutate(Week = lubridate::epiweek(Data_Date)) # add in month
# 38,970 rows
long
# 882 unique counties with drivers
summarise(long, n_distinct(FIPS))
# count of each driver by FIPS
drivers_fips <- long %>%
dplyr::group_by(FIPS, Region, State, County, Tribal, Census_4, Urban_3, Urban_6) %>%
dplyr::count(value) %>%
tidyr::drop_na() %>%
tidyr::pivot_wider(names_from = value, values_from = n)
# 882 rows
drivers_fips
# 882 unique counties
summarise(long, n_distinct(FIPS))
# count number of days per county
ndays_fips <- long %>%
dplyr::group_by(FIPS, Region, State, County, Tribal, Census_4, Urban_3, Urban_6) %>%
dplyr::summarise(ndays = n_distinct(Data_Date)) %>%
arrange(desc(ndays)) # sort by ndays
`summarise()` regrouping output by 'FIPS', 'Region', 'State', 'County', 'Tribal', 'Census_4', 'Urban_3' (override with `.groups` argument)
# join tables
ndays_drivers_fips <- dplyr::full_join(drivers_fips, ndays_fips,
by = c("FIPS", "Region", "State", "County", "Tribal",
"Census_4", "Urban_3", "Urban_6")) %>%
dplyr::select(Census_4, Urban_3, Urban_6, FIPS, ndays, everything()) # reorder columns
# 822 rows
ndays_drivers_fips
#write.csv(ndays_drivers_fips, "by_county.csv")
# create table of drivers with time periods
week_drivers_regions <- long %>%
dplyr::group_by(Week, Month, FIPS, Region, State, County, Tribal, Census_4, Urban_3, Urban_6) %>%
dplyr::count(value) %>%
tidyr::drop_na() %>%
tidyr::pivot_wider(names_from = value, values_from = n)
# 2,912 rows
week_drivers_regions
#write.csv(week_drivers_regions, "by_week.csv")
## plot ndays histogram
# number of unique counties by ndays
ndays_drivers_fips # 822 rows
p_hist <- ggplot(ndays_drivers_fips) +
geom_bar(mapping = aes(x = ndays))
p_hist

# facet ndays histogram by region
p_hist_region <- p_hist + facet_wrap(~Region)
p_hist_region

# more histograms
p_hist + facet_wrap(~Census_4)

p_hist + facet_wrap(~Urban_3)

p_hist + facet_wrap(~Urban_6)

p_hist + facet_grid(Census_4 ~ Urban_3)

p_hist + facet_grid(Census_4 ~ Urban_6)

LS0tDQp0aXRsZTogImRyaXZlcnMtMSINCm91dHB1dDoNCiAgaHRtbF9ub3RlYm9vazogDQogICAgdG9jOiB5ZXMNCiAgICBoaWdobGlnaHQ6IHRhbmdvDQogICAgdGhlbWU6IGNvc21vDQogIGh0bWxfZG9jdW1lbnQ6IA0KICAgIHRvYzogeWVzDQogICAgaGlnaGxpZ2h0OiB0YW5nbw0KICAgIHRoZW1lOiBjb3Ntbw0KICAgIGtlZXBfbWQ6IHllcw0KZWRpdG9yX29wdGlvbnM6DQogIGNodW5rX291dHB1dF90eXBlOiBpbmxpbmUNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgY2FjaGU9VFJVRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkNCmBgYA0KDQpgYGB7cn0NCnJtKGxpc3QgPSBscyhhbGwubmFtZXMgPSBUUlVFKSkNCg0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KGphbml0b3IpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeSh0aWR5cikNCmxpYnJhcnkobHVicmlkYXRlKQ0KbGlicmFyeShmb3JjYXRzKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KYGBgDQoNCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiMgYWxsIGNvdW50aWVzDQptYXN0ZXJfYWxsIDwtIHJlYWR4bDo6cmVhZF9leGNlbCgibWFzdGVyX2RhdGEueGxzeCIsIHNoZWV0ID0gIk1BU1RFUiIpDQpgYGANCg0KDQpgYGB7cn0NCiMgdmlldyBtYXN0ZXIgY29sdW1ucw0KbmFtZXMobWFzdGVyX2FsbCkNCg0KIyA3LDc5NCByb3dzDQptYXN0ZXJfYWxsDQoNCnRhYmxlKG1hc3Rlcl9hbGwkRHJpdmVyXzEsIHVzZU5BID0gImFsd2F5cyIpDQp0YWJsZShtYXN0ZXJfYWxsJERyaXZlcl8yLCB1c2VOQSA9ICJhbHdheXMiKQ0KdGFibGUobWFzdGVyX2FsbCREcml2ZXJfMywgdXNlTkEgPSAiYWx3YXlzIikNCnRhYmxlKG1hc3Rlcl9hbGwkRHJpdmVyXzQsIHVzZU5BID0gImFsd2F5cyIpDQp0YWJsZShtYXN0ZXJfYWxsJERyaXZlcl81LCB1c2VOQSA9ICJhbHdheXMiKQ0KDQojIDg4MiA9IHRvdGFsIGNvdW50aWVzDQpzdW1tYXJpc2UobWFzdGVyX2FsbCwgbl9kaXN0aW5jdChGSVBTKSkNCg0KIyA3MzUgPSBuZXcgY291bnRpZXMNCmZpbHRlcihtYXN0ZXJfYWxsLCBOZXdfU3RhdHVzID09IDEpICU+JQ0KICBzdW1tYXJpc2Uobl9kaXN0aW5jdChGSVBTKSkNCmBgYA0KDQoNCmBgYHtyfQ0KIyBzZXQgZGF0YWZyYW1lIHRvIGFuYWx5emUgZHJpdmVycw0KbWFzdGVyIDwtIG1hc3Rlcl9hbGwNCmBgYA0KDQoNCmBgYHtyfQ0KIyBzdWJzZXQgbG9uZw0KbG9uZyA8LSBkcGx5cjo6c2VsZWN0KG1hc3RlciwgYyhSZWdpb246RHJpdmVyXzUpKSAlPiUNCiAgdGlkeXI6OnBpdm90X2xvbmdlcihEcml2ZXJfMTpEcml2ZXJfNSkgJT4lICAjIGdyb3VwIGRyaXZlciBjb2xzIHRvZ2V0aGVyDQogICN0aWR5cjo6ZHJvcF9uYSgpICU+JQ0KICBkcGx5cjo6bXV0YXRlKE1vbnRoID0gbHVicmlkYXRlOjptb250aChEYXRhX0RhdGUpKSAlPiUNCiAgZHBseXI6Om11dGF0ZShXZWVrID0gbHVicmlkYXRlOjplcGl3ZWVrKERhdGFfRGF0ZSkpICMgYWRkIGluIG1vbnRoDQoNCiMgMzgsOTcwIHJvd3MNCmxvbmcNCg0KIyA4ODIgdW5pcXVlIGNvdW50aWVzIHdpdGggZHJpdmVycw0Kc3VtbWFyaXNlKGxvbmcsIG5fZGlzdGluY3QoRklQUykpDQpgYGANCg0KDQpgYGB7cn0NCiMgY291bnQgb2YgZWFjaCBkcml2ZXIgYnkgRklQUw0KZHJpdmVyc19maXBzIDwtIGxvbmcgJT4lDQogIGRwbHlyOjpncm91cF9ieShGSVBTLCBSZWdpb24sIFN0YXRlLCBDb3VudHksIFRyaWJhbCwgQ2Vuc3VzXzQsIFVyYmFuXzMsIFVyYmFuXzYpICU+JQ0KICBkcGx5cjo6Y291bnQodmFsdWUpICU+JQ0KICB0aWR5cjo6ZHJvcF9uYSgpICU+JQ0KICB0aWR5cjo6cGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9IHZhbHVlLCB2YWx1ZXNfZnJvbSA9IG4pDQoNCiMgODgyIHJvd3MNCmRyaXZlcnNfZmlwcw0KDQojIDg4MiB1bmlxdWUgY291bnRpZXMNCnN1bW1hcmlzZShsb25nLCBuX2Rpc3RpbmN0KEZJUFMpKQ0KYGBgDQoNCg0KYGBge3J9DQojIGNvdW50IG51bWJlciBvZiBkYXlzIHBlciBjb3VudHkNCm5kYXlzX2ZpcHMgPC0gbG9uZyAlPiUNCiAgZHBseXI6Omdyb3VwX2J5KEZJUFMsIFJlZ2lvbiwgU3RhdGUsIENvdW50eSwgVHJpYmFsLCBDZW5zdXNfNCwgVXJiYW5fMywgVXJiYW5fNikgJT4lDQogIGRwbHlyOjpzdW1tYXJpc2UobmRheXMgPSBuX2Rpc3RpbmN0KERhdGFfRGF0ZSkpICU+JQ0KICBhcnJhbmdlKGRlc2MobmRheXMpKSAgIyBzb3J0IGJ5IG5kYXlzDQoNCiMgODgyIHJvd3MNCm5kYXlzX2ZpcHMNCmBgYA0KDQoNCmBgYHtyfQ0KIyBqb2luIHRhYmxlcw0KbmRheXNfZHJpdmVyc19maXBzIDwtIGRwbHlyOjpmdWxsX2pvaW4oZHJpdmVyc19maXBzLCBuZGF5c19maXBzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5ID0gYygiRklQUyIsICJSZWdpb24iLCAiU3RhdGUiLCAiQ291bnR5IiwgIlRyaWJhbCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDZW5zdXNfNCIsICJVcmJhbl8zIiwgIlVyYmFuXzYiKSkgJT4lDQogIGRwbHlyOjpzZWxlY3QoQ2Vuc3VzXzQsIFVyYmFuXzMsIFVyYmFuXzYsIEZJUFMsIG5kYXlzLCBldmVyeXRoaW5nKCkpICMgcmVvcmRlciBjb2x1bW5zDQoNCiMgODIyIHJvd3MNCm5kYXlzX2RyaXZlcnNfZmlwcw0KDQojd3JpdGUuY3N2KG5kYXlzX2RyaXZlcnNfZmlwcywgImJ5X2NvdW50eS5jc3YiKQ0KYGBgDQoNCmBgYHtyfQ0KIyBjcmVhdGUgdGFibGUgb2YgZHJpdmVycyB3aXRoIHRpbWUgcGVyaW9kcw0Kd2Vla19kcml2ZXJzX3JlZ2lvbnMgPC0gbG9uZyAlPiUNCiAgZHBseXI6Omdyb3VwX2J5KFdlZWssIE1vbnRoLCBGSVBTLCBSZWdpb24sIFN0YXRlLCBDb3VudHksIFRyaWJhbCwgQ2Vuc3VzXzQsIFVyYmFuXzMsIFVyYmFuXzYpICU+JQ0KICBkcGx5cjo6Y291bnQodmFsdWUpICU+JQ0KICB0aWR5cjo6ZHJvcF9uYSgpICU+JQ0KICB0aWR5cjo6cGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9IHZhbHVlLCB2YWx1ZXNfZnJvbSA9IG4pDQoNCiMgMiw5MTIgcm93cw0Kd2Vla19kcml2ZXJzX3JlZ2lvbnMNCg0KI3dyaXRlLmNzdih3ZWVrX2RyaXZlcnNfcmVnaW9ucywgImJ5X3dlZWsuY3N2IikNCmBgYA0KDQoNCmBgYHtyfQ0KIyMgcGxvdCBuZGF5cyBoaXN0b2dyYW0NCg0KIyBudW1iZXIgb2YgdW5pcXVlIGNvdW50aWVzIGJ5IG5kYXlzDQpuZGF5c19kcml2ZXJzX2ZpcHMgICMgODIyIHJvd3MNCg0KcF9oaXN0IDwtIGdncGxvdChuZGF5c19kcml2ZXJzX2ZpcHMpICsNCiAgZ2VvbV9iYXIobWFwcGluZyA9IGFlcyh4ID0gbmRheXMpKQ0KcF9oaXN0DQoNCiMgZmFjZXQgbmRheXMgaGlzdG9ncmFtIGJ5IHJlZ2lvbg0KcF9oaXN0X3JlZ2lvbiA8LSBwX2hpc3QgKyBmYWNldF93cmFwKH5SZWdpb24pDQpwX2hpc3RfcmVnaW9uDQpgYGANCg0KDQpgYGB7cn0NCiMgbW9yZSBoaXN0b2dyYW1zDQpwX2hpc3QgKyBmYWNldF93cmFwKH5DZW5zdXNfNCkNCg0KcF9oaXN0ICsgZmFjZXRfd3JhcCh+VXJiYW5fMykNCg0KcF9oaXN0ICsgZmFjZXRfd3JhcCh+VXJiYW5fNikNCg0KcF9oaXN0ICsgZmFjZXRfZ3JpZChDZW5zdXNfNCB+IFVyYmFuXzMpDQoNCnBfaGlzdCArIGZhY2V0X2dyaWQoQ2Vuc3VzXzQgfiBVcmJhbl82KQ0KYGBgDQoNCmBgYHtyIGV2YWw9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQojIyBwbG90IGRyaXZlciBjb3VudHMgb3ZlciB0aW1lIHBlcmlvZCBhbmQgYnkgcmVnaW9uDQoNCiMgZHJpdmVyIGNvdW50cyBieSB0aW1lIGFuZCByZWdpb24NCm5kcml2ZXJzX2J5X3RpbWVfcmVnaW9uIDwtIGxvbmcgJT4lDQogIHNlbGVjdChDZW5zdXNfNCwgVXJiYW5fMywgVXJiYW5fNiwgRklQUywgTW9udGgsIFdlZWssIHZhbHVlKSAlPiUNCiAgZGlzdGluY3QoKSAlPiUNCiAgZHBseXI6Omdyb3VwX2J5KENlbnN1c180LCBVcmJhbl8zLCBVcmJhbl82LCBNb250aCwgV2VlaykgJT4lDQogIGRwbHlyOjpjb3VudCh2YWx1ZSkgJT4lDQogIHRpZHlyOjpkcm9wX25hKCkgJT4lDQogIGRwbHlyOjpmaWx0ZXIodmFsdWUgIT0gIm4vYSIpDQoNCiMgMSwzMTkgcm93cw0KbmRyaXZlcnNfYnlfdGltZV9yZWdpb24NCg0KIyBzZXQgdXAgd2Vla2x5IHBsb3QNCmcgPC0gZ2dwbG90KG5kcml2ZXJzX2J5X3RpbWVfcmVnaW9uLA0KICAgICAgICAgICAgYWVzKHggPSBhcy5mYWN0b3IoV2VlayksDQogICAgICAgICAgICAgICAgeSA9IG4sDQogICAgICAgICAgICAgICAgZmlsbCA9IGZvcmNhdHM6OmZjdF9yZW9yZGVyKHZhbHVlLCBuKSkpICsNCiAgdGhlbWVfbWluaW1hbCgpDQoNCg0KIyBzdGFja2VkIGJhciBjaGFydCBvZiBkcml2ZXIgY291bnRzIGJ5IHdlZWsNCmcgKyBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSAic3RhY2siKQ0KI2dnc2F2ZSgiZmlnMS5wZGYiKQ0KDQojIGJhciBjaGFydA0KZyArIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCBwb3NpdGlvbiA9ICJkb2RnZSIpDQojZ2dzYXZlKCJmaWcyLnBkZiIpDQoNCiMgc3RhY2tlZCBiYXIgY2hhcnQgYnkgcHJvcG9ydGlvbiANCmcgKyBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSAiZmlsbCIpDQojZ2dzYXZlKCJmaWczLnBkZiIpDQoNCmBgYA0KDQpgYGB7ciBldmFsPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQ0KIyMgZmFjZXQgYnkgcmVnaW9ucyBvdmVyIHRpbWUNCg0KIyBiYXIgY2hhcnQNCmcgKyBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSAiZG9kZ2UiKSArDQogICAgZmFjZXRfd3JhcCh+Q2Vuc3VzXzQpDQoNCmcgKyBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSAiZG9kZ2UiKSArDQogICAgZmFjZXRfd3JhcCh+VXJiYW5fMykNCg0KZyArIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCBwb3NpdGlvbiA9ICJkb2RnZSIpICsNCiAgICBmYWNldF93cmFwKH5VcmJhbl82LCBucm93ID0gMikNCg0KDQoNCiMgc3RhY2tlZCBiYXIgY2hhcnQgb2YgZHJpdmVyIGNvdW50cyBieSB3ZWVrDQpnICsgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gInN0YWNrIikgKw0KICBmYWNldF9ncmlkKENlbnN1c180IH4gVXJiYW5fMykNCg0KZyArIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCBwb3NpdGlvbiA9ICJzdGFjayIpICsNCiAgZmFjZXRfZ3JpZChDZW5zdXNfNCB+IFVyYmFuXzYpDQoNCg0KDQojIHN0YWNrZWQgYmFyIGNoYXJ0IGJ5IHByb3BvcnRpb24gDQpnICsgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gImZpbGwiKSArDQogICAgZmFjZXRfd3JhcCh+Q2Vuc3VzXzQpDQoNCmcgKyBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSAiZmlsbCIpICsNCiAgICBmYWNldF9ncmlkKENlbnN1c180IH4gVXJiYW5fMykNCg0KZyArIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCBwb3NpdGlvbiA9ICJmaWxsIikgKw0KICAgIGZhY2V0X3dyYXAoflVyYmFuXzMsIG5yb3cgPSAzKQ0KDQpnICsgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gImZpbGwiKSArDQogICAgZmFjZXRfd3JhcCh+VXJiYW5fNikNCg0KYGBgDQoNCmBgYHtyIGV2YWw9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQojIyBwbG90IGJ5IGRyaXZlciBhbmQgY2Vuc3VzIHJlZ2lvbiBvdmVyIHRpbWUNCiMgZ3JvdXAgYnkgY2Vuc3VzIHJlZ2lvbiBhbmQgd2Vlaw0KbmRyaXZlcnNfYnlfcmVnaW9uX3dlZWsgPC0gbG9uZyAlPiUNCiAgZHBseXI6Omdyb3VwX2J5KENlbnN1c180LCBXZWVrKSAlPiUNCiAgZHBseXI6OmNvdW50KHZhbHVlKSAlPiUNCiAgdGlkeXI6OmRyb3BfbmEoKSAlPiUNCiAgZHBseXI6OmZpbHRlcih2YWx1ZSAhPSAibi9hIikNCg0KDQojIDI2NiByb3dzDQpuZHJpdmVyc19ieV9yZWdpb25fd2Vlaw0KDQoNCiMgZmlsbCBieSBjZW5zdXMgcmVnaW9uDQpnMiA8LSBnZ3Bsb3QobmRyaXZlcnNfYnlfdGltZV9yZWdpb24sDQogICAgICAgICAgICBhZXMoeCA9IGFzLmZhY3RvcihXZWVrKSwNCiAgICAgICAgICAgICAgICB5ID0gbiwNCiAgICAgICAgICAgICAgICBmaWxsID0gQ2Vuc3VzXzQpKSArDQogIHRoZW1lX21pbmltYWwoKQ0KDQoNCiMgZ3JvdXBlZCBieSBjZW5zdXMgcmVnaW9uDQpnMiArIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCBwb3NpdGlvbiA9ICJkb2RnZSIpDQpnMiArIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCBwb3NpdGlvbiA9ICJzdGFjayIpDQpnMiArIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCBwb3NpdGlvbiA9ICJmaWxsIikNCg0KDQojIGJhciBwbG90cw0KZzIgKyBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSAiZG9kZ2UiKSArDQogICAgZmFjZXRfd3JhcCh+dmFsdWUpDQoNCmcyICsgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gImRvZGdlIikgKw0KICAgIGZhY2V0X2dyaWQodmFsdWUgfiBVcmJhbl8zKQ0KDQoNCg0KIyBzdGFja2VkIGJhciBjaGFydCBvZiBkcml2ZXIgY291bnRzIGJ5IHdlZWsNCmcgKyBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSAic3RhY2siKSArDQogIGZhY2V0X2dyaWQodmFsdWUgfiBVcmJhbl8zKQ0KDQpnICsgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gInN0YWNrIikgKw0KICBmYWNldF9ncmlkKHZhbHVlIH4gVXJiYW5fNikNCg0KDQoNCiMgc3RhY2tlZCBiYXIgY2hhcnQgYnkgcHJvcG9ydGlvbiANCmcyICsgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gImZpbGwiKSArDQogICAgZmFjZXRfd3JhcCh+dmFsdWUpDQoNCmcyICsgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gImZpbGwiKSArDQogICAgZmFjZXRfZ3JpZCh2YWx1ZSB+IFVyYmFuXzMpDQoNCmcyICsgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gImZpbGwiKSArDQogICAgZmFjZXRfd3JhcCh+VXJiYW5fMykNCg0KZzIgKyBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSAiZmlsbCIpICsNCiAgICBmYWNldF93cmFwKH5VcmJhbl82KQ0KDQpgYGANCg0KYGBge3IgZXZhbD1GQUxTRSwgaW5jbHVkZT1GQUxTRX0NCiMgcGxvdCByZWdpb25zIG92ZXIgdGltZSBmYWNldHRlZCBieSBkcml2ZXINCmdncGxvdChuZHJpdmVyc19ieV9yZWdpb25fd2VlaywNCiAgICAgICBhZXMoeCA9IFdlZWssDQogICAgICAgICAgIHkgPSBuLA0KICAgICAgICAgICBjb2xvciA9IGFzLmZhY3RvcihDZW5zdXNfNCkpKSArDQogIGdlb21fbGluZSgpICsNCiAgZmFjZXRfd3JhcCh+dmFsdWUpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgZ2d0aXRsZSgiRHJpdmVyIHRyZW5kIGJ5IHJlZ2lvbiIpDQoNCiNnZ3NhdmUoImZpZzYucGRmIikNCg0KDQojIGNvbnZlcnQgdGhlIGFib3ZlIGNvZGUgaW50byByZWFkYWJsZSB0YWJsZQ0KbmRyaXZlcnNfYnlfcmVnaW9uX3dlZWsgJT4lDQogIHRpZHlyOjpwaXZvdF93aWRlcihuYW1lc19mcm9tID0gdmFsdWUsIHZhbHVlc19mcm9tID0gbikNCg0KYGBgDQo=