Custum functions
All the steps in the data preparation are save in custom functions.
In this section all the custom functions that we used in the data
preparation are listed alphabetically.
Age
#Age from date of birth function
age_from_birth <- function(x) {
date_list <- x %>%
select(V9) %>%
as.list()
#replace " " and "/" with "-"
date_list <-
str_replace_all(date_list$V9, pattern = "/", replacement = "-")
date_list <-
str_replace_all(date_list, pattern = " ", replacement = "-")
#extract year of birth from date of birth and remove date of birth from data.
x$year_birth <- year(dmy(date_list))
x$age <- 2022 - x$year_birth
df <- x %>%
select(-V9)
return(df)
}
Children
#children prep
prepare_children <- function(x) {#x = nells_nsum
df <- x %>%
mutate(across(.cols = V62:V65,
.fns = ~ as.numeric(x = .x))) %>%
rename(
nr_children = V62,
age_oldest_child = V63,
age_youngest_child = V64,
age_only_child = V65
) %>%
mutate(oldest_child_education = ifelse(V66 == 1, 1, 0),
only_child_education = ifelse(Q230 == 1, 1, 0),
age_youngest_child_combined = ifelse(nr_children == 1, age_only_child, NA),
age_youngest_child_combined = ifelse(nr_children > 1, age_youngest_child, age_youngest_child_combined),
age_child_below12 = ifelse(age_youngest_child_combined < 13, 1, 0)
)
}
Education
prepare_education <- function(x) {
df <- x %>%
mutate(education_completed_highest = factor(
V28,
levels = 1:15,
labels = c(
"No education",
"Primary education",
"lbo, vmbo-kb",
"mavo, vmbo-gl/tl",
"havo",
"vwo/gymnasium",
"mbo-kort",
"mbo-tussen/lang",
"hbo",
"university bachelor",
"university master",
"PhD",
"foreign, primary education",
"foreign, secundary education",
"foreign, tertiary education"
)
),
in_education = ifelse(V26 == 3, 0, 1),
education_level_attend = factor(
V27,
levels = 1:12,
labels = c(
"Primary education",
"lbo, vmbo-kb",
"mavo, vmbo-gl/tl",
"havo",
"vwo/gymnasium",
"mbo-kort",
"mbo-tussen/lang",
"hbo",
"university bachelor",
"university master",
"PhD",
"Foreign"
)
)
)
}
Gender
#Gender recode
prepare_gender <- function(x) {
df <- x %>%
mutate(gender = factor(
V10,
levels = 1:3,
labels = c("Male", "Female", "Other")
))
}
Migration age
prepare_migration_age <- function(x){
df <- x %>%
mutate(migration_age = as.numeric(V18))
}
Migration background
prepare_migration <- function(x) {
df <- x %>%
mutate(
V13 = as.numeric(V13),
V14 = as.numeric(V14),
V15 = as.numeric(V15),
country_birth = ifelse(V13 == 130, 2, V13),
country_birth = ifelse(country_birth == 220, 3, country_birth),
country_birth = ifelse(country_birth > 3, 4, country_birth),
country_birth_mother = ifelse(V14 == 130, 2, V14),
country_birth_mother = ifelse(country_birth_mother == 220, 3, country_birth_mother),
country_birth_mother = ifelse(country_birth_mother > 3, 4, country_birth_mother),
country_birth_father = ifelse(V15 == 130, 2, V15),
country_birth_father = ifelse(country_birth_father == 220, 3, country_birth_father),
country_birth_father = ifelse(country_birth_father > 3, 4, country_birth_father),
country_birth_fac = factor(
country_birth,
levels = 1:4,
labels = c("Dutch", "Moroccan", "Turkish", "Other")
),
country_birth_mother_fac = factor(
country_birth_mother,
levels = 1:4,
labels = c("Dutch", "Moroccan", "Turkish", "Other")
),
country_birth_father_fac = factor(
country_birth_father,
levels = 1:4,
labels = c("Dutch", "Moroccan", "Turkish", "Other")
),
migration_background = ifelse(
country_birth_fac == "Dutch" &
country_birth_mother_fac == "Dutch" |
country_birth_father_fac == "Dutch",
1,
NA
),
migration_background = ifelse(
country_birth_fac == "Dutch" &
(
country_birth_mother_fac == "Other" |
country_birth_father_fac == "Other"
),
1,
migration_background
),
migration_background = ifelse(
country_birth_fac == "Other" &
(
country_birth_mother_fac == "Other" |
country_birth_father_fac == "Other"
),
6,
migration_background
),
migration_background = ifelse(
country_birth_fac == "Dutch" &
(
country_birth_mother_fac == "Moroccan" |
country_birth_father_fac == "Moroccan"
),
2,
migration_background
),
migration_background = ifelse(
country_birth_fac == "Dutch" &
(
country_birth_mother_fac == "Turkish" |
country_birth_father_fac == "Turkish"
),
3,
migration_background
),
migration_background = ifelse(
country_birth_fac == "Turkish" &
(
country_birth_mother_fac == "Turkish" |
country_birth_father_fac == "Turkish"
),
4,
migration_background
),
migration_background = ifelse(
country_birth_fac == "Moroccan" &
(
country_birth_mother_fac == "Moroccan" |
country_birth_father_fac == "Moroccan"
),
5,
migration_background
),
migration_background = ifelse(
country_birth_fac == "Other" &
(
country_birth_mother_fac == "Moroccan" |
country_birth_father_fac == "Moroccan"
),
2,
migration_background
),
migration_background = ifelse(
country_birth_fac == "Other" &
(
country_birth_mother_fac == "Turkish" |
country_birth_father_fac == "Turkish"
),
3,
migration_background
),
migration_background = ifelse(
country_birth_fac == "Turkish" &
(
country_birth_mother_fac == "Other" |
country_birth_father_fac == "Other"
),
4,
migration_background
),
migration_background = ifelse(
country_birth_fac == "Moroccan" &
(
country_birth_mother_fac == "Other" |
country_birth_father_fac == "Other"
),
5,
migration_background
),
migration_background_fac = factor(
migration_background,
levels = 1:6,
labels = c(
"Dutch",
"2nd gen Moroccan",
"2nd gen Turkish",
"1st gen Turkish",
"1st gen Moroccan",
"Other"
)
)
)
}
Migration motive
prepare_migration_motive <- function(x) {
df <- x %>%
mutate(across(starts_with("V21"), ~ factor(
.x,
levels = 1:3,
labels = c("Yes,strongly", "Yes, somewhwat", "None")
))) %>%
rename(
mig_motive_work_income = V21_1,
mig_motive_study = V21_2,
mig_motive_politics = V21_3,
mig_motive_familiy = V21_4
)
}
NSUM variable prep
#Rename NSUM variables
rename_nells_variables <- function(x) {
df <- x %>%
rename(
knows_daan = V122_1,
knows_kevin = V122_2,
knows_edwin = V122_3,
knows_albert = V122_4,
knows_emma = V122_5,
knows_linda = V122_6,
knows_ingrid = V122_7,
knows_willemina = V122_8,
knows_mohammed = V122_9,
knows_fatima = V122_10,
knows_esra = V122_11,
knows_ibrahim = V122_12,
knows_prison = V123_1,
knows_mbo = V123_2,
knows_hbo = V123_3,
knows_university = V123_4,
knows_secundary = V123_5,
knows_unemployed = V123_6,
knows_secondhome = V123_7,
knows_turkishmigration = V123_8,
knows_moroccanmigration = V123_9,
knows_hoofddoek = V123_10,
knows_ramadan = V123_11
)
}
#Midpoint recode function
midpoint_recode <- function(x) {
case_when(x == 1 ~ 0,
x == 2 ~ 1,
x == 3 ~ 3,
x == 4 ~ 8,
x == 5 ~ 15,
x == 6 ~ 35,
x == 7 ~ 50)
}
#NSUM midpoint recode function
prepare_nsum <- function(x){
df_names <- x %>%
select(id, starts_with("V122")) %>%
mutate(across(starts_with("V12"), ~ midpoint_recode(.x))) %>%
mutate(across(starts_with("V122"), ~ ifelse(.x > 8, 11, .x))) %>%
rename(knows_daan_boundary = V122_1,
knows_kevin_boundary = V122_2,
knows_edwin_boundary = V122_3,
knows_albert_boundary = V122_4,
knows_emma_boundary = V122_5,
knows_linda_boundary = V122_6,
knows_ingrid_boundary = V122_7,
knows_willemina_boundary = V122_8,
knows_mohammed_boundary = V122_9,
knows_fatima_boundary = V122_10,
knows_esra_boundary = V122_11,
knows_ibrahim_boundary = V122_12)
df <- x %>%
mutate(across(starts_with("V12"), ~ midpoint_recode(.x))) %>%
mutate(knows_prison_boundary = ifelse(V123_1 > 8, 11, V123_1)) %>%
left_join(df_names, by = "id")
}
Paid work
#paid work
prepare_paid_work <- function(x) {
df <- x %>%
mutate(paid_work = ifelse(V29 == 1, 1, 0))
}
Partner status
prepare_partner <- function(x) {
df <- x %>%
mutate(
partner_extended = factor(
V53,
levels = 1:4,
labels = c(
"Does not have a partner",
"Has a partner, lives seperately",
"Lives together, unmarried",
"Married"
)
),
partner = if_else(V53 == 1, 0, 1)
)
}
Outgroup attitudes
prepare_therm <- function(x) {
df <- x %>%
mutate(across(.cols = starts_with("Q225"),
.fns = ~ as.numeric(.))) %>%
rename(
therm_dutch_maj = Q225_24,
therm_mor = Q225_25,
therm_tur = Q225_26
)
}
Partner migration background
prepare_migration_partner <- function(x) {
df <- x %>%
mutate(
V55 = as.numeric(V55),
V56 = as.numeric(V56),
V57 = as.numeric(V57),
country_birth_partner = ifelse(V55 == 130, 2, V55),
country_birth_partner = ifelse(country_birth_partner == 220, 3, country_birth_partner),
country_birth_partner = ifelse(country_birth_partner > 3, 4, country_birth_partner),
country_birth_mother_partner = ifelse(V57 == 130, 2, V57),
country_birth_mother_partner = ifelse(
country_birth_mother_partner == 220,
3,
country_birth_mother_partner
),
country_birth_mother_partner = ifelse(
country_birth_mother_partner > 3,
4,
country_birth_mother_partner
),
country_birth_father_partner = ifelse(V56 == 130, 2, V56),
country_birth_father_partner = ifelse(
country_birth_father_partner == 220,
3,
country_birth_father_partner
),
country_birth_father_partner = ifelse(
country_birth_father_partner > 3,
4,
country_birth_father_partner
),
country_birth_partner_fac = factor(
country_birth_partner,
levels = 1:4,
labels = c("Dutch", "Moroccan", "Turkish", "Other")
),
country_birth_mother_partner_fac = factor(
country_birth_mother_partner,
levels = 1:4,
labels = c("Dutch", "Moroccan", "Turkish", "Other")
),
country_birth_father_partner_fac = factor(
country_birth_father_partner,
levels = 1:4,
labels = c("Dutch", "Moroccan", "Turkish", "Other")
),
migration_background_partner = ifelse(
country_birth_partner_fac == "Dutch" &
country_birth_mother_partner_fac == "Dutch" |
country_birth_father_partner_fac == "Dutch",
1,
NA
),
migration_background_partner = ifelse(
country_birth_partner_fac == "Dutch" &
(
country_birth_mother_partner_fac == "Other" |
country_birth_father_partner_fac == "Other"
),
1,
migration_background_partner
),
migration_background_partner = ifelse(
country_birth_partner_fac == "Other" &
(
country_birth_mother_partner_fac == "Other" |
country_birth_father_partner_fac == "Other"
),
6,
migration_background_partner
),
migration_background_partner = ifelse(
country_birth_partner_fac == "Dutch" &
(
country_birth_mother_partner_fac == "Moroccan" |
country_birth_father_partner_fac == "Moroccan"
),
2,
migration_background_partner
),
migration_background_partner = ifelse(
country_birth_partner_fac == "Dutch" &
(
country_birth_mother_partner_fac == "Turkish" |
country_birth_father_partner_fac == "Turkish"
),
3,
migration_background_partner
),
migration_background_partner = ifelse(
country_birth_partner_fac == "Turkish" &
(
country_birth_mother_partner_fac == "Turkish" |
country_birth_father_partner_fac == "Turkish"
),
4,
migration_background_partner
),
migration_background_partner = ifelse(
country_birth_partner_fac == "Moroccan" &
(
country_birth_mother_partner_fac == "Moroccan" |
country_birth_father_partner_fac == "Moroccan"
),
5,
migration_background_partner
),
migration_background_partner = ifelse(
country_birth_partner_fac == "Other" &
(
country_birth_mother_partner_fac == "Moroccan" |
country_birth_father_partner_fac == "Moroccan"
),
2,
migration_background_partner
),
migration_background_partner = ifelse(
country_birth_partner_fac == "Other" &
(
country_birth_mother_partner_fac == "Turkish" |
country_birth_father_partner_fac == "Turkish"
),
3,
migration_background_partner
),
migration_background_partner = ifelse(
country_birth_partner_fac == "Turkish" &
(
country_birth_mother_partner_fac == "Other" |
country_birth_father_partner_fac == "Other"
),
4,
migration_background_partner
),
migration_background_partner = ifelse(
country_birth_partner_fac == "Moroccan" &
(
country_birth_mother_partner_fac == "Other" |
country_birth_father_partner_fac == "Other"
),
5,
migration_background_partner
),
migration_background_partner_fac = factor(
migration_background_partner,
levels = 1:6,
labels = c(
"Dutch",
"2nd gen Moroccan",
"2nd gen Turkish",
"1st gen Turkish",
"1st gen Moroccan",
"Other"
)
)
)
}
Religion
religion_prep <- function(x) {#x = nells_nsum
df <- x %>%
mutate(religious_denom = ifelse(as.numeric(V89) == 2, 13, as.numeric(V90)),
religious_denom = factor(
religious_denom,
levels = 1:13,
labels = c(
"Catholic",
"PKN (hervormd)",
"PKN (reformed)",
"PKN (luthers)",
"Protestant other",
"Islam sunni",
"Islam shia",
"Islam other",
"Judaism",
"Hindu",
"Budhism",
"Other",
"None"
)
),
rel_attendance = factor(
as.numeric(V91),
levels = 1:7,
labels = c(
"Never",
"1-2 a year",
"3-11 a year",
"Once a month",
"2-3 a month",
"Every week",
"Multiple times a week"
)
)
)
}
Export data
Only select the variables that we need for the analyses. Save the
data as seperate .rds.
nells_nsum <- nells_nsum %>%
select(id,
mun_code,
pc_code,
age,
gender,
partner_extended,
partner,
nr_children,
age_oldest_child,
age_youngest_child,
age_youngest_child_combined,
age_child_below12,
age_only_child,
oldest_child_education,
only_child_education,
in_education,
education_level_attend,
education_completed_highest,
paid_work,
religious_denom,
rel_attendance,
migration_age,
starts_with("mig_motive"),
contains("country_birth"),
migration_background,
migration_background_fac,
migration_background_partner,
migration_background_partner_fac,
starts_with("therm"),
contains("knows_"),
ends_with("gem"),
ends_with("pc4"),
mean_woz_gem,
mean_p_koop_gem)
save(nells_nsum,
file = "data_analysis/data/data_processed/nells_data/2022-05-08_nells_nsum_data.rds")
LS0tDQp0aXRsZTogIkRhdGFwcmVwYXJhdGlvbiINCmF1dGhvcjogIlRoaWptZW4gSmVyb2Vuc2UiDQpkYXRlOiAiTGFzdCBjb21waWxlZCBvbiBgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVkICVCLCAlWScpYCINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IFRSVUUNCiAgICB0b2NfZGVwdGg6IDMNCiAgICB0b2NfZmxvYXQ6IFRSVUUNCiAgICBjb2RlX2ZvbGRpbmc6IHNob3cNCiAgICBjb2RlX2Rvd25sb2FkOiBUUlVFDQplZGl0b3Jfb3B0aW9uczogDQogIGNodW5rX291dHB1dF90eXBlOiBjb25zb2xlDQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoY2FjaGUgPSBUUlVFLCBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRSwgcmVzdWx0cyA9ICJhc2lzIiwNCiAgICAgICAgICAgICAgICAgICAgICBmaWcuYWxpZ24gPSAiY2VudGVyIikNCmBgYA0KDQojIERhdGEgcHJlcGFyYXRpb24gc2NyaXB0IE5FTExTIGRhdGENCg0KIyMgTGlicmFyaWVzDQoNCmBgYHtyIGxpYnJhcmllcywgcmVzdWx0cz0naGlkZSd9DQojIGdldCBwYWNrYWdlcyBuZWVkZWQNCmZwYWNrYWdlLmNoZWNrIDwtIGZ1bmN0aW9uKHBhY2thZ2VzKSB7ICMgKGMpIEpvY2hlbSBUb2xzbWENCiAgbGFwcGx5KHBhY2thZ2VzLCBGVU4gPSBmdW5jdGlvbih4KSB7DQogICAgaWYgKCFyZXF1aXJlKHgsIGNoYXJhY3Rlci5vbmx5ID0gVFJVRSkpIHsNCiAgICAgIGluc3RhbGwucGFja2FnZXMoeCwgZGVwZW5kZW5jaWVzID0gVFJVRSkNCiAgICAgIGxpYnJhcnkoeCwgY2hhcmFjdGVyLm9ubHkgPSBUUlVFKQ0KICAgIH0NCiAgfSkNCn0NCnBhY2thZ2VzID0gYygidGlkeXZlcnNlIiwgImx1YnJpZGF0ZSIpDQpmcGFja2FnZS5jaGVjayhwYWNrYWdlcykNCmBgYA0KDQojIyBORUxMUyBjb21iaW5lZCBpbXByb3QNCg0KSW1wb3J0IHRoZSBORUxMUyBkYXRhZmlsZSB3aXRoIHNlbGVjdGVkIG5laWdiaG91cmhvb2QgdmFyaWFibGVzLiANCg0KYGBge3IgZGF0YSBpbXBvcnR9DQpsb2FkKGZpbGUgPSAgImRhdGFfYW5hbHlzaXMvZGF0YS9kYXRhX3Byb2Nlc3NlZC9uZWxsc19kYXRhLzIwMjMtMDUtMDhfbmVsbHNfY29tYmluZWQucmRzIikNCmBgYA0KDQoNCiMgQ3VzdHVtIGZ1bmN0aW9ucw0KDQpBbGwgdGhlIHN0ZXBzIGluIHRoZSBkYXRhIHByZXBhcmF0aW9uIGFyZSBzYXZlIGluIGN1c3RvbSBmdW5jdGlvbnMuIEluIHRoaXMgc2VjdGlvbiBhbGwgdGhlIGN1c3RvbSBmdW5jdGlvbnMgdGhhdCB3ZSB1c2VkIGluIHRoZSBkYXRhIHByZXBhcmF0aW9uIGFyZSBsaXN0ZWQgYWxwaGFiZXRpY2FsbHkuIA0KDQojIyBBZ2UgDQoNCmBgYHtyIGFnZSBwcmVwfQ0KI0FnZSBmcm9tIGRhdGUgb2YgYmlydGggZnVuY3Rpb24NCmFnZV9mcm9tX2JpcnRoIDwtIGZ1bmN0aW9uKHgpIHsNCiAgZGF0ZV9saXN0IDwtIHggJT4lDQogICAgc2VsZWN0KFY5KSAlPiUNCiAgICBhcy5saXN0KCkNCiAgDQogICNyZXBsYWNlICIgIiBhbmQgIi8iIHdpdGggIi0iDQogIGRhdGVfbGlzdCA8LQ0KICAgIHN0cl9yZXBsYWNlX2FsbChkYXRlX2xpc3QkVjksIHBhdHRlcm4gPSAiLyIsIHJlcGxhY2VtZW50ID0gIi0iKQ0KICBkYXRlX2xpc3QgPC0NCiAgICBzdHJfcmVwbGFjZV9hbGwoZGF0ZV9saXN0LCBwYXR0ZXJuID0gIiAiLCByZXBsYWNlbWVudCA9ICItIikNCiAgDQogICNleHRyYWN0IHllYXIgb2YgYmlydGggZnJvbSBkYXRlIG9mIGJpcnRoIGFuZCByZW1vdmUgZGF0ZSBvZiBiaXJ0aCBmcm9tIGRhdGEuDQogIHgkeWVhcl9iaXJ0aCA8LSB5ZWFyKGRteShkYXRlX2xpc3QpKQ0KICB4JGFnZSA8LSAyMDIyIC0geCR5ZWFyX2JpcnRoDQogDQogIGRmIDwtIHggJT4lIA0KICAgIHNlbGVjdCgtVjkpDQogIA0KICByZXR1cm4oZGYpDQp9DQpgYGANCg0KIyMgQ2hpbGRyZW4NCg0KYGBge3IgY2hpbGRyZW59DQojY2hpbGRyZW4gcHJlcA0KcHJlcGFyZV9jaGlsZHJlbiA8LSBmdW5jdGlvbih4KSB7I3ggPSAgbmVsbHNfbnN1bQ0KICBkZiA8LSB4ICU+JQ0KICAgIG11dGF0ZShhY3Jvc3MoLmNvbHMgPSBWNjI6VjY1LA0KICAgICAgICAgICAgICAgICAgLmZucyA9IH4gYXMubnVtZXJpYyh4ID0gLngpKSkgJT4lDQogICAgcmVuYW1lKA0KICAgICAgbnJfY2hpbGRyZW4gPSBWNjIsDQogICAgICBhZ2Vfb2xkZXN0X2NoaWxkID0gVjYzLA0KICAgICAgYWdlX3lvdW5nZXN0X2NoaWxkID0gVjY0LA0KICAgICAgYWdlX29ubHlfY2hpbGQgPSBWNjUNCiAgICApICU+JQ0KICAgIG11dGF0ZShvbGRlc3RfY2hpbGRfZWR1Y2F0aW9uID0gaWZlbHNlKFY2NiA9PSAxLCAxLCAwKSwNCiAgICAgICAgICAgb25seV9jaGlsZF9lZHVjYXRpb24gPSBpZmVsc2UoUTIzMCA9PSAxLCAxLCAwKSwNCiAgICAgICAgICAgYWdlX3lvdW5nZXN0X2NoaWxkX2NvbWJpbmVkID0gaWZlbHNlKG5yX2NoaWxkcmVuID09IDEsIGFnZV9vbmx5X2NoaWxkLCBOQSksDQogICAgICAgICAgIGFnZV95b3VuZ2VzdF9jaGlsZF9jb21iaW5lZCA9IGlmZWxzZShucl9jaGlsZHJlbiA+IDEsIGFnZV95b3VuZ2VzdF9jaGlsZCwgYWdlX3lvdW5nZXN0X2NoaWxkX2NvbWJpbmVkKSwNCiAgICAgICAgICAgYWdlX2NoaWxkX2JlbG93MTIgPSBpZmVsc2UoYWdlX3lvdW5nZXN0X2NoaWxkX2NvbWJpbmVkIDwgMTMsIDEsIDApDQogICAgICAgICAgICkgDQp9DQpgYGANCg0KIyMgRWR1Y2F0aW9uDQoNCmBgYHtyIGVkdWNhdGlvbiB9DQpwcmVwYXJlX2VkdWNhdGlvbiA8LSBmdW5jdGlvbih4KSB7DQogIGRmIDwtIHggJT4lDQogICAgbXV0YXRlKGVkdWNhdGlvbl9jb21wbGV0ZWRfaGlnaGVzdCA9IGZhY3RvcigNCiAgICAgIFYyOCwNCiAgICAgIGxldmVscyA9IDE6MTUsDQogICAgICBsYWJlbHMgPSBjKA0KICAgICAgICAiTm8gZWR1Y2F0aW9uIiwNCiAgICAgICAgIlByaW1hcnkgZWR1Y2F0aW9uIiwNCiAgICAgICAgImxibywgdm1iby1rYiIsDQogICAgICAgICJtYXZvLCB2bWJvLWdsL3RsIiwNCiAgICAgICAgImhhdm8iLA0KICAgICAgICAidndvL2d5bW5hc2l1bSIsDQogICAgICAgICJtYm8ta29ydCIsDQogICAgICAgICJtYm8tdHVzc2VuL2xhbmciLA0KICAgICAgICAiaGJvIiwNCiAgICAgICAgInVuaXZlcnNpdHkgYmFjaGVsb3IiLA0KICAgICAgICAidW5pdmVyc2l0eSBtYXN0ZXIiLA0KICAgICAgICAiUGhEIiwNCiAgICAgICAgImZvcmVpZ24sIHByaW1hcnkgZWR1Y2F0aW9uIiwNCiAgICAgICAgImZvcmVpZ24sIHNlY3VuZGFyeSBlZHVjYXRpb24iLA0KICAgICAgICAiZm9yZWlnbiwgdGVydGlhcnkgZWR1Y2F0aW9uIg0KICAgICAgKQ0KICAgICksDQogICAgaW5fZWR1Y2F0aW9uID0gaWZlbHNlKFYyNiA9PSAzLCAwLCAxKSwNCiAgICBlZHVjYXRpb25fbGV2ZWxfYXR0ZW5kID0gZmFjdG9yKA0KICAgICAgVjI3LA0KICAgICAgbGV2ZWxzID0gMToxMiwNCiAgICAgIGxhYmVscyA9IGMoDQogICAgICAgICJQcmltYXJ5IGVkdWNhdGlvbiIsDQogICAgICAgICJsYm8sIHZtYm8ta2IiLA0KICAgICAgICAibWF2bywgdm1iby1nbC90bCIsDQogICAgICAgICJoYXZvIiwNCiAgICAgICAgInZ3by9neW1uYXNpdW0iLA0KICAgICAgICAibWJvLWtvcnQiLA0KICAgICAgICAibWJvLXR1c3Nlbi9sYW5nIiwNCiAgICAgICAgImhibyIsDQogICAgICAgICJ1bml2ZXJzaXR5IGJhY2hlbG9yIiwNCiAgICAgICAgInVuaXZlcnNpdHkgbWFzdGVyIiwNCiAgICAgICAgIlBoRCIsDQogICAgICAgICJGb3JlaWduIg0KICAgICAgKQ0KICAgICkNCiAgICApDQp9DQpgYGANCg0KDQojIyBHZW5kZXINCg0KYGBge3IgZ2VuZGVyfQ0KI0dlbmRlciByZWNvZGUNCnByZXBhcmVfZ2VuZGVyIDwtIGZ1bmN0aW9uKHgpIHsNCiAgZGYgPC0geCAlPiUNCiAgICBtdXRhdGUoZ2VuZGVyID0gZmFjdG9yKA0KICAgICAgVjEwLA0KICAgICAgbGV2ZWxzID0gMTozLA0KICAgICAgbGFiZWxzID0gYygiTWFsZSIsICJGZW1hbGUiLCAiT3RoZXIiKQ0KICAgICkpDQp9DQoNCmBgYA0KDQojIyBNaWdyYXRpb24gYWdlDQoNCmBgYHtyIGFnZX0NCnByZXBhcmVfbWlncmF0aW9uX2FnZSA8LSBmdW5jdGlvbih4KXsNCiAgZGYgPC0geCAlPiUgDQogICAgbXV0YXRlKG1pZ3JhdGlvbl9hZ2UgPSBhcy5udW1lcmljKFYxOCkpDQp9DQpgYGANCg0KDQojIyBNaWdyYXRpb24gYmFja2dyb3VuZA0KDQpgYGB7ciBtaWdyYXRpb24gYmFja2dyb3VuZH0NCnByZXBhcmVfbWlncmF0aW9uIDwtIGZ1bmN0aW9uKHgpIHsNCiAgZGYgPC0geCAlPiUNCiAgICBtdXRhdGUoDQogICAgICBWMTMgPSBhcy5udW1lcmljKFYxMyksDQogICAgICBWMTQgPSBhcy5udW1lcmljKFYxNCksDQogICAgICBWMTUgPSBhcy5udW1lcmljKFYxNSksDQogICAgICBjb3VudHJ5X2JpcnRoID0gaWZlbHNlKFYxMyA9PSAxMzAsIDIsIFYxMyksDQogICAgICBjb3VudHJ5X2JpcnRoID0gaWZlbHNlKGNvdW50cnlfYmlydGggPT0gMjIwLCAzLCBjb3VudHJ5X2JpcnRoKSwNCiAgICAgIGNvdW50cnlfYmlydGggPSBpZmVsc2UoY291bnRyeV9iaXJ0aCA+IDMsIDQsIGNvdW50cnlfYmlydGgpLA0KICAgICAgY291bnRyeV9iaXJ0aF9tb3RoZXIgPSBpZmVsc2UoVjE0ID09IDEzMCwgMiwgVjE0KSwNCiAgICAgIGNvdW50cnlfYmlydGhfbW90aGVyID0gaWZlbHNlKGNvdW50cnlfYmlydGhfbW90aGVyID09IDIyMCwgMywgY291bnRyeV9iaXJ0aF9tb3RoZXIpLA0KICAgICAgY291bnRyeV9iaXJ0aF9tb3RoZXIgPSBpZmVsc2UoY291bnRyeV9iaXJ0aF9tb3RoZXIgPiAzLCA0LCBjb3VudHJ5X2JpcnRoX21vdGhlciksDQogICAgICBjb3VudHJ5X2JpcnRoX2ZhdGhlciA9IGlmZWxzZShWMTUgPT0gMTMwLCAyLCBWMTUpLA0KICAgICAgY291bnRyeV9iaXJ0aF9mYXRoZXIgPSBpZmVsc2UoY291bnRyeV9iaXJ0aF9mYXRoZXIgPT0gMjIwLCAzLCBjb3VudHJ5X2JpcnRoX2ZhdGhlciksDQogICAgICBjb3VudHJ5X2JpcnRoX2ZhdGhlciA9IGlmZWxzZShjb3VudHJ5X2JpcnRoX2ZhdGhlciA+IDMsIDQsIGNvdW50cnlfYmlydGhfZmF0aGVyKSwNCiAgICAgIGNvdW50cnlfYmlydGhfZmFjID0gZmFjdG9yKA0KICAgICAgICBjb3VudHJ5X2JpcnRoLA0KICAgICAgICBsZXZlbHMgPSAxOjQsDQogICAgICAgIGxhYmVscyA9IGMoIkR1dGNoIiwgIk1vcm9jY2FuIiwgIlR1cmtpc2giLCAiT3RoZXIiKQ0KICAgICAgKSwNCiAgICAgIGNvdW50cnlfYmlydGhfbW90aGVyX2ZhYyA9IGZhY3RvcigNCiAgICAgICAgY291bnRyeV9iaXJ0aF9tb3RoZXIsDQogICAgICAgIGxldmVscyA9IDE6NCwNCiAgICAgICAgbGFiZWxzID0gYygiRHV0Y2giLCAiTW9yb2NjYW4iLCAiVHVya2lzaCIsICJPdGhlciIpDQogICAgICApLA0KICAgICAgY291bnRyeV9iaXJ0aF9mYXRoZXJfZmFjID0gZmFjdG9yKA0KICAgICAgICBjb3VudHJ5X2JpcnRoX2ZhdGhlciwNCiAgICAgICAgbGV2ZWxzID0gMTo0LA0KICAgICAgICBsYWJlbHMgPSBjKCJEdXRjaCIsICJNb3JvY2NhbiIsICJUdXJraXNoIiwgIk90aGVyIikNCiAgICAgICksDQogICAgICBtaWdyYXRpb25fYmFja2dyb3VuZCA9IGlmZWxzZSgNCiAgICAgICAgY291bnRyeV9iaXJ0aF9mYWMgPT0gIkR1dGNoIiAmDQogICAgICAgICAgY291bnRyeV9iaXJ0aF9tb3RoZXJfZmFjID09ICJEdXRjaCIgfA0KICAgICAgICAgIGNvdW50cnlfYmlydGhfZmF0aGVyX2ZhYyA9PSAiRHV0Y2giLA0KICAgICAgICAxLA0KICAgICAgICBOQQ0KICAgICAgKSwNCiAgICAgIG1pZ3JhdGlvbl9iYWNrZ3JvdW5kID0gaWZlbHNlKA0KICAgICAgICBjb3VudHJ5X2JpcnRoX2ZhYyA9PSAiRHV0Y2giICYNCiAgICAgICAgICAoDQogICAgICAgICAgICBjb3VudHJ5X2JpcnRoX21vdGhlcl9mYWMgPT0gIk90aGVyIiB8DQogICAgICAgICAgICAgIGNvdW50cnlfYmlydGhfZmF0aGVyX2ZhYyA9PSAiT3RoZXIiDQogICAgICAgICAgKSwNCiAgICAgICAgMSwNCiAgICAgICAgbWlncmF0aW9uX2JhY2tncm91bmQNCiAgICAgICksDQogICAgICBtaWdyYXRpb25fYmFja2dyb3VuZCA9IGlmZWxzZSgNCiAgICAgICAgY291bnRyeV9iaXJ0aF9mYWMgPT0gIk90aGVyIiAmDQogICAgICAgICAgKA0KICAgICAgICAgICAgY291bnRyeV9iaXJ0aF9tb3RoZXJfZmFjID09ICJPdGhlciIgfA0KICAgICAgICAgICAgICBjb3VudHJ5X2JpcnRoX2ZhdGhlcl9mYWMgPT0gIk90aGVyIg0KICAgICAgICAgICksDQogICAgICAgIDYsDQogICAgICAgIG1pZ3JhdGlvbl9iYWNrZ3JvdW5kDQogICAgICApLA0KICAgICAgbWlncmF0aW9uX2JhY2tncm91bmQgPSBpZmVsc2UoDQogICAgICAgIGNvdW50cnlfYmlydGhfZmFjID09ICJEdXRjaCIgJg0KICAgICAgICAgICgNCiAgICAgICAgICAgIGNvdW50cnlfYmlydGhfbW90aGVyX2ZhYyA9PSAiTW9yb2NjYW4iIHwNCiAgICAgICAgICAgICAgY291bnRyeV9iaXJ0aF9mYXRoZXJfZmFjID09ICJNb3JvY2NhbiINCiAgICAgICAgICApLA0KICAgICAgICAyLA0KICAgICAgICBtaWdyYXRpb25fYmFja2dyb3VuZA0KICAgICAgKSwNCiAgICAgIG1pZ3JhdGlvbl9iYWNrZ3JvdW5kID0gaWZlbHNlKA0KICAgICAgICBjb3VudHJ5X2JpcnRoX2ZhYyA9PSAiRHV0Y2giICYNCiAgICAgICAgICAoDQogICAgICAgICAgICBjb3VudHJ5X2JpcnRoX21vdGhlcl9mYWMgPT0gIlR1cmtpc2giIHwNCiAgICAgICAgICAgICAgY291bnRyeV9iaXJ0aF9mYXRoZXJfZmFjID09ICJUdXJraXNoIg0KICAgICAgICAgICksDQogICAgICAgIDMsDQogICAgICAgIG1pZ3JhdGlvbl9iYWNrZ3JvdW5kDQogICAgICApLA0KICAgICAgbWlncmF0aW9uX2JhY2tncm91bmQgPSBpZmVsc2UoDQogICAgICAgIGNvdW50cnlfYmlydGhfZmFjID09ICJUdXJraXNoIiAmDQogICAgICAgICAgKA0KICAgICAgICAgICAgY291bnRyeV9iaXJ0aF9tb3RoZXJfZmFjID09ICJUdXJraXNoIiB8DQogICAgICAgICAgICAgIGNvdW50cnlfYmlydGhfZmF0aGVyX2ZhYyA9PSAiVHVya2lzaCINCiAgICAgICAgICApLA0KICAgICAgICA0LA0KICAgICAgICBtaWdyYXRpb25fYmFja2dyb3VuZA0KICAgICAgKSwNCiAgICAgIG1pZ3JhdGlvbl9iYWNrZ3JvdW5kID0gaWZlbHNlKA0KICAgICAgICBjb3VudHJ5X2JpcnRoX2ZhYyA9PSAiTW9yb2NjYW4iICYNCiAgICAgICAgICAoDQogICAgICAgICAgICBjb3VudHJ5X2JpcnRoX21vdGhlcl9mYWMgPT0gIk1vcm9jY2FuIiB8DQogICAgICAgICAgICAgIGNvdW50cnlfYmlydGhfZmF0aGVyX2ZhYyA9PSAiTW9yb2NjYW4iDQogICAgICAgICAgKSwNCiAgICAgICAgNSwNCiAgICAgICAgbWlncmF0aW9uX2JhY2tncm91bmQNCiAgICAgICksDQogICAgICBtaWdyYXRpb25fYmFja2dyb3VuZCA9IGlmZWxzZSgNCiAgICAgICAgY291bnRyeV9iaXJ0aF9mYWMgPT0gIk90aGVyIiAmDQogICAgICAgICAgKA0KICAgICAgICAgICAgY291bnRyeV9iaXJ0aF9tb3RoZXJfZmFjID09ICJNb3JvY2NhbiIgfA0KICAgICAgICAgICAgICBjb3VudHJ5X2JpcnRoX2ZhdGhlcl9mYWMgPT0gIk1vcm9jY2FuIg0KICAgICAgICAgICksDQogICAgICAgIDIsDQogICAgICAgIG1pZ3JhdGlvbl9iYWNrZ3JvdW5kDQogICAgICApLA0KICAgICAgbWlncmF0aW9uX2JhY2tncm91bmQgPSBpZmVsc2UoDQogICAgICAgIGNvdW50cnlfYmlydGhfZmFjID09ICJPdGhlciIgJg0KICAgICAgICAgICgNCiAgICAgICAgICAgIGNvdW50cnlfYmlydGhfbW90aGVyX2ZhYyA9PSAiVHVya2lzaCIgfA0KICAgICAgICAgICAgICBjb3VudHJ5X2JpcnRoX2ZhdGhlcl9mYWMgPT0gIlR1cmtpc2giDQogICAgICAgICAgKSwNCiAgICAgICAgMywNCiAgICAgICAgbWlncmF0aW9uX2JhY2tncm91bmQNCiAgICAgICksDQogICAgICBtaWdyYXRpb25fYmFja2dyb3VuZCA9IGlmZWxzZSgNCiAgICAgICAgY291bnRyeV9iaXJ0aF9mYWMgPT0gIlR1cmtpc2giICYNCiAgICAgICAgICAoDQogICAgICAgICAgICBjb3VudHJ5X2JpcnRoX21vdGhlcl9mYWMgPT0gIk90aGVyIiB8DQogICAgICAgICAgICAgIGNvdW50cnlfYmlydGhfZmF0aGVyX2ZhYyA9PSAiT3RoZXIiDQogICAgICAgICAgKSwNCiAgICAgICAgNCwNCiAgICAgICAgbWlncmF0aW9uX2JhY2tncm91bmQNCiAgICAgICksDQogICAgICBtaWdyYXRpb25fYmFja2dyb3VuZCA9IGlmZWxzZSgNCiAgICAgICAgY291bnRyeV9iaXJ0aF9mYWMgPT0gIk1vcm9jY2FuIiAmDQogICAgICAgICAgKA0KICAgICAgICAgICAgY291bnRyeV9iaXJ0aF9tb3RoZXJfZmFjID09ICJPdGhlciIgfA0KICAgICAgICAgICAgICBjb3VudHJ5X2JpcnRoX2ZhdGhlcl9mYWMgPT0gIk90aGVyIg0KICAgICAgICAgICksDQogICAgICAgIDUsDQogICAgICAgIG1pZ3JhdGlvbl9iYWNrZ3JvdW5kDQogICAgICApLA0KICAgICAgbWlncmF0aW9uX2JhY2tncm91bmRfZmFjID0gZmFjdG9yKA0KICAgICAgICBtaWdyYXRpb25fYmFja2dyb3VuZCwNCiAgICAgICAgbGV2ZWxzID0gMTo2LA0KICAgICAgICBsYWJlbHMgPSBjKA0KICAgICAgICAgICJEdXRjaCIsDQogICAgICAgICAgIjJuZCBnZW4gTW9yb2NjYW4iLA0KICAgICAgICAgICIybmQgZ2VuIFR1cmtpc2giLA0KICAgICAgICAgICIxc3QgZ2VuIFR1cmtpc2giLA0KICAgICAgICAgICIxc3QgZ2VuIE1vcm9jY2FuIiwNCiAgICAgICAgICAiT3RoZXIiDQogICAgICAgICkNCiAgICAgICkNCiAgICApDQp9DQpgYGANCg0KIyMgTWlncmF0aW9uIG1vdGl2ZQ0KDQpgYGB7ciBtaWdyYXRpb24gbW90aXZlfQ0KcHJlcGFyZV9taWdyYXRpb25fbW90aXZlIDwtIGZ1bmN0aW9uKHgpIHsNCiAgZGYgPC0geCAlPiUNCiAgICBtdXRhdGUoYWNyb3NzKHN0YXJ0c193aXRoKCJWMjEiKSwgfiBmYWN0b3IoDQogICAgICAueCwNCiAgICAgIGxldmVscyA9IDE6MywNCiAgICAgIGxhYmVscyA9IGMoIlllcyxzdHJvbmdseSIsICJZZXMsIHNvbWV3aHdhdCIsICJOb25lIikNCiAgICApKSkgJT4lDQogICAgcmVuYW1lKA0KICAgICAgbWlnX21vdGl2ZV93b3JrX2luY29tZSA9IFYyMV8xLA0KICAgICAgbWlnX21vdGl2ZV9zdHVkeSA9IFYyMV8yLA0KICAgICAgbWlnX21vdGl2ZV9wb2xpdGljcyA9IFYyMV8zLA0KICAgICAgbWlnX21vdGl2ZV9mYW1pbGl5ID0gVjIxXzQNCiAgICApDQp9DQoNCmBgYA0KDQojIyBOU1VNIHZhcmlhYmxlIHByZXANCg0KYGBge3IgbnN1bX0NCiNSZW5hbWUgTlNVTSB2YXJpYWJsZXMNCnJlbmFtZV9uZWxsc192YXJpYWJsZXMgPC0gZnVuY3Rpb24oeCkgew0KICBkZiA8LSB4ICU+JQ0KICAgIHJlbmFtZSgNCiAgICAgIGtub3dzX2RhYW4gPSBWMTIyXzEsDQogICAgICBrbm93c19rZXZpbiA9IFYxMjJfMiwNCiAgICAgIGtub3dzX2Vkd2luID0gVjEyMl8zLA0KICAgICAga25vd3NfYWxiZXJ0ID0gVjEyMl80LA0KICAgICAga25vd3NfZW1tYSA9IFYxMjJfNSwNCiAgICAgIGtub3dzX2xpbmRhID0gVjEyMl82LA0KICAgICAga25vd3NfaW5ncmlkID0gVjEyMl83LA0KICAgICAga25vd3Nfd2lsbGVtaW5hID0gVjEyMl84LA0KICAgICAga25vd3NfbW9oYW1tZWQgPSBWMTIyXzksDQogICAgICBrbm93c19mYXRpbWEgPSBWMTIyXzEwLA0KICAgICAga25vd3NfZXNyYSA9IFYxMjJfMTEsDQogICAgICBrbm93c19pYnJhaGltID0gVjEyMl8xMiwNCiAgICAgIGtub3dzX3ByaXNvbiA9IFYxMjNfMSwNCiAgICAgIGtub3dzX21ibyA9IFYxMjNfMiwNCiAgICAgIGtub3dzX2hibyA9IFYxMjNfMywNCiAgICAgIGtub3dzX3VuaXZlcnNpdHkgPSBWMTIzXzQsDQogICAgICBrbm93c19zZWN1bmRhcnkgPSBWMTIzXzUsDQogICAgICBrbm93c191bmVtcGxveWVkID0gVjEyM182LA0KICAgICAga25vd3Nfc2Vjb25kaG9tZSA9IFYxMjNfNywNCiAgICAgIGtub3dzX3R1cmtpc2htaWdyYXRpb24gPSBWMTIzXzgsDQogICAgICBrbm93c19tb3JvY2Nhbm1pZ3JhdGlvbiA9IFYxMjNfOSwNCiAgICAgIGtub3dzX2hvb2ZkZG9layA9IFYxMjNfMTAsDQogICAgICBrbm93c19yYW1hZGFuID0gVjEyM18xMQ0KICAgICkNCn0NCg0KI01pZHBvaW50IHJlY29kZSBmdW5jdGlvbg0KbWlkcG9pbnRfcmVjb2RlIDwtIGZ1bmN0aW9uKHgpIHsNCiAgY2FzZV93aGVuKHggPT0gMSB+IDAsDQogICAgICAgICAgICB4ID09IDIgfiAxLA0KICAgICAgICAgICAgeCA9PSAzIH4gMywNCiAgICAgICAgICAgIHggPT0gNCB+IDgsDQogICAgICAgICAgICB4ID09IDUgfiAxNSwNCiAgICAgICAgICAgIHggPT0gNiB+IDM1LA0KICAgICAgICAgICAgeCA9PSA3IH4gNTApDQp9DQoNCiNOU1VNIG1pZHBvaW50IHJlY29kZSBmdW5jdGlvbg0KcHJlcGFyZV9uc3VtIDwtIGZ1bmN0aW9uKHgpew0KICBkZl9uYW1lcyA8LSB4ICU+JSANCiAgICBzZWxlY3QoaWQsIHN0YXJ0c193aXRoKCJWMTIyIikpICU+JQ0KICAgIG11dGF0ZShhY3Jvc3Moc3RhcnRzX3dpdGgoIlYxMiIpLCB+IG1pZHBvaW50X3JlY29kZSgueCkpKSAlPiUgDQogICAgbXV0YXRlKGFjcm9zcyhzdGFydHNfd2l0aCgiVjEyMiIpLCB+IGlmZWxzZSgueCA+IDgsIDExLCAueCkpKSAlPiUgDQogICAgcmVuYW1lKGtub3dzX2RhYW5fYm91bmRhcnkgPSBWMTIyXzEsDQogICAgICAgICAgIGtub3dzX2tldmluX2JvdW5kYXJ5ID0gVjEyMl8yLA0KICAgICAgICAgICBrbm93c19lZHdpbl9ib3VuZGFyeSA9IFYxMjJfMywNCiAgICAgICAgICAga25vd3NfYWxiZXJ0X2JvdW5kYXJ5ID0gVjEyMl80LA0KICAgICAgICAgICBrbm93c19lbW1hX2JvdW5kYXJ5ID0gVjEyMl81LA0KICAgICAgICAgICBrbm93c19saW5kYV9ib3VuZGFyeSA9IFYxMjJfNiwNCiAgICAgICAgICAga25vd3NfaW5ncmlkX2JvdW5kYXJ5ID0gVjEyMl83LA0KICAgICAgICAgICBrbm93c193aWxsZW1pbmFfYm91bmRhcnkgPSBWMTIyXzgsDQogICAgICAgICAgIGtub3dzX21vaGFtbWVkX2JvdW5kYXJ5ID0gVjEyMl85LA0KICAgICAgICAgICBrbm93c19mYXRpbWFfYm91bmRhcnkgPSBWMTIyXzEwLA0KICAgICAgICAgICBrbm93c19lc3JhX2JvdW5kYXJ5ID0gVjEyMl8xMSwNCiAgICAgICAgICAga25vd3NfaWJyYWhpbV9ib3VuZGFyeSA9IFYxMjJfMTIpDQogICAgDQogIA0KICBkZiA8LSB4ICU+JSANCiAgICBtdXRhdGUoYWNyb3NzKHN0YXJ0c193aXRoKCJWMTIiKSwgfiBtaWRwb2ludF9yZWNvZGUoLngpKSkgJT4lIA0KICAgIG11dGF0ZShrbm93c19wcmlzb25fYm91bmRhcnkgPSBpZmVsc2UoVjEyM18xID4gOCwgMTEsIFYxMjNfMSkpICU+JSANCiAgICBsZWZ0X2pvaW4oZGZfbmFtZXMsIGJ5ID0gImlkIikNCn0NCmBgYA0KDQojIyBQYWlkIHdvcmsNCg0KYGBge3IgcGFpZCB3b3JrfQ0KI3BhaWQgd29yaw0KcHJlcGFyZV9wYWlkX3dvcmsgPC0gZnVuY3Rpb24oeCkgew0KICBkZiA8LSB4ICU+JSANCiAgICBtdXRhdGUocGFpZF93b3JrID0gaWZlbHNlKFYyOSA9PSAxLCAxLCAwKSkNCn0NCmBgYA0KDQojIyBQYXJ0bmVyIHN0YXR1cw0KDQpgYGB7ciBwYXJ0bmVyfQ0KcHJlcGFyZV9wYXJ0bmVyIDwtIGZ1bmN0aW9uKHgpIHsNCiAgZGYgPC0geCAlPiUNCiAgICBtdXRhdGUoDQogICAgICBwYXJ0bmVyX2V4dGVuZGVkID0gZmFjdG9yKA0KICAgICAgICBWNTMsDQogICAgICAgIGxldmVscyA9IDE6NCwNCiAgICAgICAgbGFiZWxzID0gYygNCiAgICAgICAgICAiRG9lcyBub3QgaGF2ZSBhIHBhcnRuZXIiLA0KICAgICAgICAgICJIYXMgYSBwYXJ0bmVyLCBsaXZlcyBzZXBlcmF0ZWx5IiwNCiAgICAgICAgICAiTGl2ZXMgdG9nZXRoZXIsIHVubWFycmllZCIsDQogICAgICAgICAgIk1hcnJpZWQiDQogICAgICAgICkNCiAgICAgICksDQogICAgICBwYXJ0bmVyID0gaWZfZWxzZShWNTMgPT0gMSwgMCwgMSkNCiAgICApDQp9DQpgYGANCg0KIyMgT3V0Z3JvdXAgYXR0aXR1ZGVzDQoNCmBgYHtyIG91dGdyb3VwIGF0dGl0ZGVzfQ0KcHJlcGFyZV90aGVybSA8LSBmdW5jdGlvbih4KSB7DQogIGRmIDwtICB4ICU+JQ0KICAgIG11dGF0ZShhY3Jvc3MoLmNvbHMgPSBzdGFydHNfd2l0aCgiUTIyNSIpLA0KICAgICAgICAgICAgICAgICAgLmZucyA9IH4gYXMubnVtZXJpYyguKSkpICU+JQ0KICAgIHJlbmFtZSgNCiAgICAgIHRoZXJtX2R1dGNoX21haiA9IFEyMjVfMjQsDQogICAgICB0aGVybV9tb3IgPSBRMjI1XzI1LA0KICAgICAgdGhlcm1fdHVyID0gUTIyNV8yNg0KICAgICkNCn0NCg0KDQpgYGANCg0KIyMgUGFydG5lciBtaWdyYXRpb24gYmFja2dyb3VuZA0KDQpgYGB7ciBwYXJ0bmVyIG1pZ3JhdGlvbiBiYWNrZ3JvdW5kfQ0KcHJlcGFyZV9taWdyYXRpb25fcGFydG5lciA8LSBmdW5jdGlvbih4KSB7DQogIGRmIDwtIHggJT4lDQogICAgbXV0YXRlKA0KICAgICAgVjU1ID0gYXMubnVtZXJpYyhWNTUpLA0KICAgICAgVjU2ID0gYXMubnVtZXJpYyhWNTYpLA0KICAgICAgVjU3ID0gYXMubnVtZXJpYyhWNTcpLA0KICAgICAgY291bnRyeV9iaXJ0aF9wYXJ0bmVyID0gaWZlbHNlKFY1NSA9PSAxMzAsIDIsIFY1NSksDQogICAgICBjb3VudHJ5X2JpcnRoX3BhcnRuZXIgPSBpZmVsc2UoY291bnRyeV9iaXJ0aF9wYXJ0bmVyID09IDIyMCwgMywgY291bnRyeV9iaXJ0aF9wYXJ0bmVyKSwNCiAgICAgIGNvdW50cnlfYmlydGhfcGFydG5lciA9IGlmZWxzZShjb3VudHJ5X2JpcnRoX3BhcnRuZXIgPiAzLCA0LCBjb3VudHJ5X2JpcnRoX3BhcnRuZXIpLA0KICAgICAgY291bnRyeV9iaXJ0aF9tb3RoZXJfcGFydG5lciA9IGlmZWxzZShWNTcgPT0gMTMwLCAyLCBWNTcpLA0KICAgICAgY291bnRyeV9iaXJ0aF9tb3RoZXJfcGFydG5lciA9IGlmZWxzZSgNCiAgICAgICAgY291bnRyeV9iaXJ0aF9tb3RoZXJfcGFydG5lciA9PSAyMjAsDQogICAgICAgIDMsDQogICAgICAgIGNvdW50cnlfYmlydGhfbW90aGVyX3BhcnRuZXINCiAgICAgICksDQogICAgICBjb3VudHJ5X2JpcnRoX21vdGhlcl9wYXJ0bmVyID0gaWZlbHNlKA0KICAgICAgICBjb3VudHJ5X2JpcnRoX21vdGhlcl9wYXJ0bmVyID4gMywNCiAgICAgICAgNCwNCiAgICAgICAgY291bnRyeV9iaXJ0aF9tb3RoZXJfcGFydG5lcg0KICAgICAgKSwNCiAgICAgIGNvdW50cnlfYmlydGhfZmF0aGVyX3BhcnRuZXIgPSBpZmVsc2UoVjU2ID09IDEzMCwgMiwgVjU2KSwNCiAgICAgIGNvdW50cnlfYmlydGhfZmF0aGVyX3BhcnRuZXIgPSBpZmVsc2UoDQogICAgICAgIGNvdW50cnlfYmlydGhfZmF0aGVyX3BhcnRuZXIgPT0gMjIwLA0KICAgICAgICAzLA0KICAgICAgICBjb3VudHJ5X2JpcnRoX2ZhdGhlcl9wYXJ0bmVyDQogICAgICApLA0KICAgICAgY291bnRyeV9iaXJ0aF9mYXRoZXJfcGFydG5lciA9IGlmZWxzZSgNCiAgICAgICAgY291bnRyeV9iaXJ0aF9mYXRoZXJfcGFydG5lciA+IDMsDQogICAgICAgIDQsDQogICAgICAgIGNvdW50cnlfYmlydGhfZmF0aGVyX3BhcnRuZXINCiAgICAgICksDQogICAgICBjb3VudHJ5X2JpcnRoX3BhcnRuZXJfZmFjID0gZmFjdG9yKA0KICAgICAgICBjb3VudHJ5X2JpcnRoX3BhcnRuZXIsDQogICAgICAgIGxldmVscyA9IDE6NCwNCiAgICAgICAgbGFiZWxzID0gYygiRHV0Y2giLCAiTW9yb2NjYW4iLCAiVHVya2lzaCIsICJPdGhlciIpDQogICAgICApLA0KICAgICAgY291bnRyeV9iaXJ0aF9tb3RoZXJfcGFydG5lcl9mYWMgPSBmYWN0b3IoDQogICAgICAgIGNvdW50cnlfYmlydGhfbW90aGVyX3BhcnRuZXIsDQogICAgICAgIGxldmVscyA9IDE6NCwNCiAgICAgICAgbGFiZWxzID0gYygiRHV0Y2giLCAiTW9yb2NjYW4iLCAiVHVya2lzaCIsICJPdGhlciIpDQogICAgICApLA0KICAgICAgY291bnRyeV9iaXJ0aF9mYXRoZXJfcGFydG5lcl9mYWMgPSBmYWN0b3IoDQogICAgICAgIGNvdW50cnlfYmlydGhfZmF0aGVyX3BhcnRuZXIsDQogICAgICAgIGxldmVscyA9IDE6NCwNCiAgICAgICAgbGFiZWxzID0gYygiRHV0Y2giLCAiTW9yb2NjYW4iLCAiVHVya2lzaCIsICJPdGhlciIpDQogICAgICApLA0KICAgICAgbWlncmF0aW9uX2JhY2tncm91bmRfcGFydG5lciA9IGlmZWxzZSgNCiAgICAgICAgY291bnRyeV9iaXJ0aF9wYXJ0bmVyX2ZhYyA9PSAiRHV0Y2giICYNCiAgICAgICAgICBjb3VudHJ5X2JpcnRoX21vdGhlcl9wYXJ0bmVyX2ZhYyA9PSAiRHV0Y2giIHwNCiAgICAgICAgICBjb3VudHJ5X2JpcnRoX2ZhdGhlcl9wYXJ0bmVyX2ZhYyA9PSAiRHV0Y2giLA0KICAgICAgICAxLA0KICAgICAgICBOQQ0KICAgICAgKSwNCiAgICAgIG1pZ3JhdGlvbl9iYWNrZ3JvdW5kX3BhcnRuZXIgPSBpZmVsc2UoDQogICAgICAgIGNvdW50cnlfYmlydGhfcGFydG5lcl9mYWMgPT0gIkR1dGNoIiAmDQogICAgICAgICAgKA0KICAgICAgICAgICAgY291bnRyeV9iaXJ0aF9tb3RoZXJfcGFydG5lcl9mYWMgPT0gIk90aGVyIiB8DQogICAgICAgICAgICAgIGNvdW50cnlfYmlydGhfZmF0aGVyX3BhcnRuZXJfZmFjID09ICJPdGhlciINCiAgICAgICAgICApLA0KICAgICAgICAxLA0KICAgICAgICBtaWdyYXRpb25fYmFja2dyb3VuZF9wYXJ0bmVyDQogICAgICApLA0KICAgICAgbWlncmF0aW9uX2JhY2tncm91bmRfcGFydG5lciA9IGlmZWxzZSgNCiAgICAgICAgY291bnRyeV9iaXJ0aF9wYXJ0bmVyX2ZhYyA9PSAiT3RoZXIiICYNCiAgICAgICAgICAoDQogICAgICAgICAgICBjb3VudHJ5X2JpcnRoX21vdGhlcl9wYXJ0bmVyX2ZhYyA9PSAiT3RoZXIiIHwNCiAgICAgICAgICAgICAgY291bnRyeV9iaXJ0aF9mYXRoZXJfcGFydG5lcl9mYWMgPT0gIk90aGVyIg0KICAgICAgICAgICksDQogICAgICAgIDYsDQogICAgICAgIG1pZ3JhdGlvbl9iYWNrZ3JvdW5kX3BhcnRuZXINCiAgICAgICksDQogICAgICBtaWdyYXRpb25fYmFja2dyb3VuZF9wYXJ0bmVyID0gaWZlbHNlKA0KICAgICAgICBjb3VudHJ5X2JpcnRoX3BhcnRuZXJfZmFjID09ICJEdXRjaCIgJg0KICAgICAgICAgICgNCiAgICAgICAgICAgIGNvdW50cnlfYmlydGhfbW90aGVyX3BhcnRuZXJfZmFjID09ICJNb3JvY2NhbiIgfA0KICAgICAgICAgICAgICBjb3VudHJ5X2JpcnRoX2ZhdGhlcl9wYXJ0bmVyX2ZhYyA9PSAiTW9yb2NjYW4iDQogICAgICAgICAgKSwNCiAgICAgICAgMiwNCiAgICAgICAgbWlncmF0aW9uX2JhY2tncm91bmRfcGFydG5lcg0KICAgICAgKSwNCiAgICAgIG1pZ3JhdGlvbl9iYWNrZ3JvdW5kX3BhcnRuZXIgPSBpZmVsc2UoDQogICAgICAgIGNvdW50cnlfYmlydGhfcGFydG5lcl9mYWMgPT0gIkR1dGNoIiAmDQogICAgICAgICAgKA0KICAgICAgICAgICAgY291bnRyeV9iaXJ0aF9tb3RoZXJfcGFydG5lcl9mYWMgPT0gIlR1cmtpc2giIHwNCiAgICAgICAgICAgICAgY291bnRyeV9iaXJ0aF9mYXRoZXJfcGFydG5lcl9mYWMgPT0gIlR1cmtpc2giDQogICAgICAgICAgKSwNCiAgICAgICAgMywNCiAgICAgICAgbWlncmF0aW9uX2JhY2tncm91bmRfcGFydG5lcg0KICAgICAgKSwNCiAgICAgIG1pZ3JhdGlvbl9iYWNrZ3JvdW5kX3BhcnRuZXIgPSBpZmVsc2UoDQogICAgICAgIGNvdW50cnlfYmlydGhfcGFydG5lcl9mYWMgPT0gIlR1cmtpc2giICYNCiAgICAgICAgICAoDQogICAgICAgICAgICBjb3VudHJ5X2JpcnRoX21vdGhlcl9wYXJ0bmVyX2ZhYyA9PSAiVHVya2lzaCIgfA0KICAgICAgICAgICAgICBjb3VudHJ5X2JpcnRoX2ZhdGhlcl9wYXJ0bmVyX2ZhYyA9PSAiVHVya2lzaCINCiAgICAgICAgICApLA0KICAgICAgICA0LA0KICAgICAgICBtaWdyYXRpb25fYmFja2dyb3VuZF9wYXJ0bmVyDQogICAgICApLA0KICAgICAgbWlncmF0aW9uX2JhY2tncm91bmRfcGFydG5lciA9IGlmZWxzZSgNCiAgICAgICAgY291bnRyeV9iaXJ0aF9wYXJ0bmVyX2ZhYyA9PSAiTW9yb2NjYW4iICYNCiAgICAgICAgICAoDQogICAgICAgICAgICBjb3VudHJ5X2JpcnRoX21vdGhlcl9wYXJ0bmVyX2ZhYyA9PSAiTW9yb2NjYW4iIHwNCiAgICAgICAgICAgICAgY291bnRyeV9iaXJ0aF9mYXRoZXJfcGFydG5lcl9mYWMgPT0gIk1vcm9jY2FuIg0KICAgICAgICAgICksDQogICAgICAgIDUsDQogICAgICAgIG1pZ3JhdGlvbl9iYWNrZ3JvdW5kX3BhcnRuZXINCiAgICAgICksDQogICAgICBtaWdyYXRpb25fYmFja2dyb3VuZF9wYXJ0bmVyID0gaWZlbHNlKA0KICAgICAgICBjb3VudHJ5X2JpcnRoX3BhcnRuZXJfZmFjID09ICJPdGhlciIgJg0KICAgICAgICAgICgNCiAgICAgICAgICAgIGNvdW50cnlfYmlydGhfbW90aGVyX3BhcnRuZXJfZmFjID09ICJNb3JvY2NhbiIgfA0KICAgICAgICAgICAgICBjb3VudHJ5X2JpcnRoX2ZhdGhlcl9wYXJ0bmVyX2ZhYyA9PSAiTW9yb2NjYW4iDQogICAgICAgICAgKSwNCiAgICAgICAgMiwNCiAgICAgICAgbWlncmF0aW9uX2JhY2tncm91bmRfcGFydG5lcg0KICAgICAgKSwNCiAgICAgIG1pZ3JhdGlvbl9iYWNrZ3JvdW5kX3BhcnRuZXIgPSBpZmVsc2UoDQogICAgICAgIGNvdW50cnlfYmlydGhfcGFydG5lcl9mYWMgPT0gIk90aGVyIiAmDQogICAgICAgICAgKA0KICAgICAgICAgICAgY291bnRyeV9iaXJ0aF9tb3RoZXJfcGFydG5lcl9mYWMgPT0gIlR1cmtpc2giIHwNCiAgICAgICAgICAgICAgY291bnRyeV9iaXJ0aF9mYXRoZXJfcGFydG5lcl9mYWMgPT0gIlR1cmtpc2giDQogICAgICAgICAgKSwNCiAgICAgICAgMywNCiAgICAgICAgbWlncmF0aW9uX2JhY2tncm91bmRfcGFydG5lcg0KICAgICAgKSwNCiAgICAgIG1pZ3JhdGlvbl9iYWNrZ3JvdW5kX3BhcnRuZXIgPSBpZmVsc2UoDQogICAgICAgIGNvdW50cnlfYmlydGhfcGFydG5lcl9mYWMgPT0gIlR1cmtpc2giICYNCiAgICAgICAgICAoDQogICAgICAgICAgICBjb3VudHJ5X2JpcnRoX21vdGhlcl9wYXJ0bmVyX2ZhYyA9PSAiT3RoZXIiIHwNCiAgICAgICAgICAgICAgY291bnRyeV9iaXJ0aF9mYXRoZXJfcGFydG5lcl9mYWMgPT0gIk90aGVyIg0KICAgICAgICAgICksDQogICAgICAgIDQsDQogICAgICAgIG1pZ3JhdGlvbl9iYWNrZ3JvdW5kX3BhcnRuZXINCiAgICAgICksDQogICAgICBtaWdyYXRpb25fYmFja2dyb3VuZF9wYXJ0bmVyID0gaWZlbHNlKA0KICAgICAgICBjb3VudHJ5X2JpcnRoX3BhcnRuZXJfZmFjID09ICJNb3JvY2NhbiIgJg0KICAgICAgICAgICgNCiAgICAgICAgICAgIGNvdW50cnlfYmlydGhfbW90aGVyX3BhcnRuZXJfZmFjID09ICJPdGhlciIgfA0KICAgICAgICAgICAgICBjb3VudHJ5X2JpcnRoX2ZhdGhlcl9wYXJ0bmVyX2ZhYyA9PSAiT3RoZXIiDQogICAgICAgICAgKSwNCiAgICAgICAgNSwNCiAgICAgICAgbWlncmF0aW9uX2JhY2tncm91bmRfcGFydG5lcg0KICAgICAgKSwNCiAgICAgIG1pZ3JhdGlvbl9iYWNrZ3JvdW5kX3BhcnRuZXJfZmFjID0gZmFjdG9yKA0KICAgICAgICBtaWdyYXRpb25fYmFja2dyb3VuZF9wYXJ0bmVyLA0KICAgICAgICBsZXZlbHMgPSAxOjYsDQogICAgICAgIGxhYmVscyA9IGMoDQogICAgICAgICAgIkR1dGNoIiwNCiAgICAgICAgICAiMm5kIGdlbiBNb3JvY2NhbiIsDQogICAgICAgICAgIjJuZCBnZW4gVHVya2lzaCIsDQogICAgICAgICAgIjFzdCBnZW4gVHVya2lzaCIsDQogICAgICAgICAgIjFzdCBnZW4gTW9yb2NjYW4iLA0KICAgICAgICAgICJPdGhlciINCiAgICAgICAgKQ0KICAgICAgKQ0KICAgICkNCn0NCmBgYA0KDQoNCg0KIyMgUmVsaWdpb24NCg0KYGBge3IgcmVsaWdpb259DQpyZWxpZ2lvbl9wcmVwIDwtIGZ1bmN0aW9uKHgpIHsjeCA9IG5lbGxzX25zdW0NCiAgZGYgPC0geCAlPiUNCiAgICBtdXRhdGUocmVsaWdpb3VzX2Rlbm9tID0gaWZlbHNlKGFzLm51bWVyaWMoVjg5KSA9PSAyLCAxMywgYXMubnVtZXJpYyhWOTApKSwNCiAgICAgICAgICAgcmVsaWdpb3VzX2Rlbm9tID0gZmFjdG9yKA0KICAgICAgICAgICAgIHJlbGlnaW91c19kZW5vbSwNCiAgICAgICAgICAgICBsZXZlbHMgPSAxOjEzLA0KICAgICAgICAgICAgIGxhYmVscyA9IGMoDQogICAgICAgICAgICAgICAiQ2F0aG9saWMiLA0KICAgICAgICAgICAgICAgIlBLTiAoaGVydm9ybWQpIiwNCiAgICAgICAgICAgICAgICJQS04gKHJlZm9ybWVkKSIsDQogICAgICAgICAgICAgICAiUEtOIChsdXRoZXJzKSIsDQogICAgICAgICAgICAgICAiUHJvdGVzdGFudCBvdGhlciIsDQogICAgICAgICAgICAgICAiSXNsYW0gc3VubmkiLA0KICAgICAgICAgICAgICAgIklzbGFtIHNoaWEiLA0KICAgICAgICAgICAgICAgIklzbGFtIG90aGVyIiwNCiAgICAgICAgICAgICAgICJKdWRhaXNtIiwNCiAgICAgICAgICAgICAgICJIaW5kdSIsDQogICAgICAgICAgICAgICAiQnVkaGlzbSIsDQogICAgICAgICAgICAgICAiT3RoZXIiLA0KICAgICAgICAgICAgICAgIk5vbmUiDQogICAgICAgICAgICAgKQ0KICAgICAgICAgICApLA0KICAgICAgICAgICByZWxfYXR0ZW5kYW5jZSA9IGZhY3RvcigNCiAgICAgICAgICAgICBhcy5udW1lcmljKFY5MSksDQogICAgICAgICAgICAgbGV2ZWxzID0gMTo3LA0KICAgICAgICAgICAgIGxhYmVscyA9IGMoDQogICAgICAgICAgICAgICAiTmV2ZXIiLA0KICAgICAgICAgICAgICAgIjEtMiBhIHllYXIiLA0KICAgICAgICAgICAgICAgIjMtMTEgYSB5ZWFyIiwNCiAgICAgICAgICAgICAgICJPbmNlIGEgbW9udGgiLA0KICAgICAgICAgICAgICAgIjItMyBhIG1vbnRoIiwNCiAgICAgICAgICAgICAgICJFdmVyeSB3ZWVrIiwNCiAgICAgICAgICAgICAgICJNdWx0aXBsZSB0aW1lcyBhIHdlZWsiDQogICAgICAgICAgICAgKQ0KICAgICAgICAgICAgICkNCiAgICApIA0KfQ0KYGBgDQoNCiMgRGF0YSBwcmVwYXJhdGlvbg0KDQpQcmVwYXJlIHRoZSBkYXRhIHdpdGggdGhlIGN1c3RvbSBmdW5jdGlvbnMuIA0KDQojIyBJbmRlcGVuZGVudCBhbmQgY29udHJvbCB2YXJpYWJsZXMNCg0KYGBge3IgaW5kZXAgcHJlcH0NCg0KI0FHRQ0KI2VkaXQgZGF0ZSBpbnRvIHllYXINCm5lbGxzX25zdW0gPC0gYWdlX2Zyb21fYmlydGgobmVsbHNfbnN1bSkNCg0KI0dFTkRFUg0KbmVsbHNfbnN1bTwtIHByZXBhcmVfZ2VuZGVyKG5lbGxzX25zdW0pDQojQ0hJTERSRU4NCm5lbGxzX25zdW0gPC0gcHJlcGFyZV9jaGlsZHJlbihuZWxsc19uc3VtKQ0KDQojRURVQ0FUSU9ODQpuZWxsc19uc3VtIDwtIHByZXBhcmVfZWR1Y2F0aW9uKG5lbGxzX25zdW0pDQoNCiNNSUdSQVRJT04gQkFDS0dST1VORA0KbmVsbHNfbnN1bSA8LSBwcmVwYXJlX21pZ3JhdGlvbihuZWxsc19uc3VtKQ0KbmVsbHNfbnN1bSA8LSBwcmVwYXJlX21pZ3JhdGlvbl9hZ2UobmVsbHNfbnN1bSkNCm5lbGxzX25zdW0gPC0gcHJlcGFyZV9taWdyYXRpb25fbW90aXZlKG5lbGxzX25zdW0pDQoNCiNNSUdSQVRJT04gQkFDS0dST1VORCBQQVJUTkVSDQpuZWxsc19uc3VtIDwtIHByZXBhcmVfbWlncmF0aW9uX3BhcnRuZXIobmVsbHNfbnN1bSkNCg0KI1BBSUQgV09SSw0KbmVsbHNfbnN1bSA8LSBwcmVwYXJlX3BhaWRfd29yayhuZWxsc19uc3VtKQ0KDQojUEFSVE5FUg0KbmVsbHNfbnN1bSA8LSBwcmVwYXJlX3BhcnRuZXIobmVsbHNfbnN1bSkNCg0KI1JFTElHSU9ODQpuZWxsc19uc3VtIDwtIHJlbGlnaW9uX3ByZXAobmVsbHNfbnN1bSkNCg0KI1RIRVJNT01FVEVSDQpuZWxsc19uc3VtIDwtIHByZXBhcmVfdGhlcm0obmVsbHNfbnN1bSkNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmBgYA0KDQojIyBOU1VNIHZhcmlhYmxlcw0KDQpgYGB7ciBuc3VtIHZhcmlhYmxlcyBwcmVwfQ0KIyBEYXRhIHByZXBhcmF0aW9uIE5TVU0gdmFyaWFibGVzDQpuZWxsc19uc3VtIDwtIHByZXBhcmVfbnN1bShuZWxsc19uc3VtKQ0KbmVsbHNfbnN1bSA8LSByZW5hbWVfbmVsbHNfdmFyaWFibGVzKG5lbGxzX25zdW0pDQpgYGANCg0KIyBFeHBvcnQgZGF0YQ0KDQpPbmx5IHNlbGVjdCB0aGUgdmFyaWFibGVzIHRoYXQgd2UgbmVlZCBmb3IgdGhlIGFuYWx5c2VzLiBTYXZlIHRoZSBkYXRhIGFzIHNlcGVyYXRlIC5yZHMuIA0KDQpgYGB7ciBzZWxlY3QgYW5kIGV4cG9ydCBkYXRhfQ0KbmVsbHNfbnN1bSA8LSBuZWxsc19uc3VtICU+JSANCiAgc2VsZWN0KGlkLA0KICAgICAgICAgbXVuX2NvZGUsDQogICAgICAgICBwY19jb2RlLA0KICAgICAgICAgYWdlLA0KICAgICAgICAgZ2VuZGVyLA0KICAgICAgICAgcGFydG5lcl9leHRlbmRlZCwNCiAgICAgICAgIHBhcnRuZXIsDQogICAgICAgICBucl9jaGlsZHJlbiwNCiAgICAgICAgIGFnZV9vbGRlc3RfY2hpbGQsDQogICAgICAgICBhZ2VfeW91bmdlc3RfY2hpbGQsDQogICAgICAgICBhZ2VfeW91bmdlc3RfY2hpbGRfY29tYmluZWQsDQogICAgICAgICBhZ2VfY2hpbGRfYmVsb3cxMiwNCiAgICAgICAgIGFnZV9vbmx5X2NoaWxkLA0KICAgICAgICAgb2xkZXN0X2NoaWxkX2VkdWNhdGlvbiwNCiAgICAgICAgIG9ubHlfY2hpbGRfZWR1Y2F0aW9uLA0KICAgICAgICAgaW5fZWR1Y2F0aW9uLA0KICAgICAgICAgZWR1Y2F0aW9uX2xldmVsX2F0dGVuZCwNCiAgICAgICAgIGVkdWNhdGlvbl9jb21wbGV0ZWRfaGlnaGVzdCwNCiAgICAgICAgIHBhaWRfd29yaywNCiAgICAgICAgIHJlbGlnaW91c19kZW5vbSwNCiAgICAgICAgIHJlbF9hdHRlbmRhbmNlLA0KICAgICAgICAgbWlncmF0aW9uX2FnZSwNCiAgICAgICAgIHN0YXJ0c193aXRoKCJtaWdfbW90aXZlIiksDQogICAgICAgICBjb250YWlucygiY291bnRyeV9iaXJ0aCIpLA0KICAgICAgICAgbWlncmF0aW9uX2JhY2tncm91bmQsDQogICAgICAgICBtaWdyYXRpb25fYmFja2dyb3VuZF9mYWMsDQogICAgICAgICBtaWdyYXRpb25fYmFja2dyb3VuZF9wYXJ0bmVyLA0KICAgICAgICAgbWlncmF0aW9uX2JhY2tncm91bmRfcGFydG5lcl9mYWMsDQogICAgICAgICBzdGFydHNfd2l0aCgidGhlcm0iKSwNCiAgICAgICAgIGNvbnRhaW5zKCJrbm93c18iKSwNCiAgICAgICAgIGVuZHNfd2l0aCgiZ2VtIiksDQogICAgICAgICBlbmRzX3dpdGgoInBjNCIpLA0KICAgICAgICAgbWVhbl93b3pfZ2VtLA0KICAgICAgICAgbWVhbl9wX2tvb3BfZ2VtKQ0KDQoNCnNhdmUobmVsbHNfbnN1bSwNCiAgICAgICAgZmlsZSA9ICJkYXRhX2FuYWx5c2lzL2RhdGEvZGF0YV9wcm9jZXNzZWQvbmVsbHNfZGF0YS8yMDIyLTA1LTA4X25lbGxzX25zdW1fZGF0YS5yZHMiKQ0KDQpgYGANCg0K