rm(list=ls())

1 Packages

library(tidyverse)
library(lme4)

2 Input

load(file="H:/processed_data/df_mmfc.rda")

load(file="H:/processed_data/df_mmfc_r2.rda")

load(file="H:/processed_data/df_noother.rda")

3 Non-linear effects of time (in year since Phd)

Creating variables for t^2, t^3 up to t^6

df_mmfc$t2 <- df_mmfc$t^2
df_mmfc$t3 <- df_mmfc$t^3
df_mmfc$t4 <- df_mmfc$t^4
df_mmfc$t5 <- df_mmfc$t^5
df_mmfc$t6 <- df_mmfc$t^6

4 Check linearity t and log real pay

linearmod <- lm(log_realpay ~ t, data=df_mmfc)

ggplot(broom::augment(linearmod), aes(t, log_realpay)) +
 geom_point() +
 stat_smooth(method="lm", se=FALSE) +
 geom_segment(aes(xend = t, yend = .fitted), color="red", size=0.3)
par(mfrow = c(2,2))
plot(linearmod)
lm1 <- lm(log_realpay ~ t, data=df_mmfc)
lm2 <- lm(log_realpay ~ t + t2, data=df_mmfc)
lm3 <- lm(log_realpay ~ t + t2 + t3, data=df_mmfc)
lm4 <- lm(log_realpay ~ t + t2 + t3 + t4, data=df_mmfc)
lm5 <- lm(log_realpay ~ t + t2 + t3 + t4 + t5, data=df_mmfc)
lm6 <- lm(log_realpay ~ t + t2 + t3 + t4 + t5 + t6, data=df_mmfc)

5 Some releveling

levels(as.factor(df_mmfc$phd_disci))
summary(as.factor(df_mmfc$phd_disci))

df_mmfc$phd_disci <- factor(df_mmfc$phd_disci, levels=c("Health sciences", "Social sciences", "Natural sciences and mathematics", "Engineering", "Humanities"))

df_mmfc <- df_mmfc %>% 
  mutate(gender = ifelse(gender==1, "men", "women"))

df_mmfc$gender <- factor(df_mmfc$gender, levels=c("men", "women"))


df_mmfc$temporary_emp <- haven::zap_labels(df_mmfc$temporary_emp)

6 Overall - pay

# Null model: random intercept
M0 <- lmer(log_realpay ~ 1 + t*as.factor(gender) + t2*as.factor(gender) + t3*as.factor(gender) + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_mmfc)

# Compute ICC
icc_ip <- as.data.frame(VarCorr(M0))[4]
icc <- icc_ip[1,1] / sum(icc_ip)

# M1: Transition effect and controls
M1 <- lmer(log_realpay ~ 1 + t*as.factor(gender) + t2*as.factor(gender) + t3*as.factor(gender) + as.factor(trans_st)*as.factor(gender) + as.factor(trans_lt)*as.factor(gender) + trans_lt_b*as.factor(gender) + phd_coh*as.factor(gender) + phd_sat*as.factor(gender) + as.factor(partnered)*as.factor(gender) + partnered_b*as.factor(gender) + as.factor(sector_gov)*as.factor(gender) + as.factor(sector_nonpr)*as.factor(gender) + sector_gov_b*as.factor(gender) + sector_nonpr_b*as.factor(gender) + break_job*as.factor(gender) + break_job_b*as.factor(gender) + abroad_time*as.factor(gender) + abroad_time_b*as.factor(gender) + as.factor(otherjob)*as.factor(gender) + otherjob_b*as.factor(gender) + as.factor(trans_lt)*t*as.factor(gender) + trans_lt_b*t*as.factor(gender) + phd_coh*t*as.factor(gender) + phd_sat*t*as.factor(gender) + partnered_b*t*as.factor(gender) + sector_gov_b*t*as.factor(gender) + sector_nonpr_b*t*as.factor(gender) + break_job_b*t*as.factor(gender) + abroad_time_b*t*as.factor(gender) + otherjob_b*t*as.factor(gender) + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_mmfc)

# M2: Adding explanatory variables (hours worked, discipline, parental status, temporary contract)
M2 <- lmer(log_realpay ~ 1 + t*as.factor(gender) + t2*as.factor(gender) + t3*as.factor(gender) + as.factor(trans_st)*as.factor(gender) + as.factor(trans_lt)*as.factor(gender) + trans_lt_b*as.factor(gender) + as.factor(phd_disci)*as.factor(gender) + as.factor(child_u5)*as.factor(gender) + child_u5_b*as.factor(gender) + log_hrs*as.factor(gender) + log_hrs_b*as.factor(gender) + as.factor(temporary_emp)*as.factor(gender) + temporary_emp_b*as.factor(gender) + phd_coh*as.factor(gender) + phd_sat*as.factor(gender) + as.factor(partnered)*as.factor(gender) + partnered_b*as.factor(gender) + as.factor(sector_gov)*as.factor(gender) + as.factor(sector_nonpr)*as.factor(gender) + sector_gov_b*as.factor(gender) + sector_nonpr_b*as.factor(gender) + break_job*as.factor(gender) + break_job_b*as.factor(gender) + abroad_time*as.factor(gender) + abroad_time_b*as.factor(gender) + as.factor(otherjob)*as.factor(gender) + otherjob_b*as.factor(gender) + as.factor(trans_lt)*t*as.factor(gender) + trans_lt_b*t*as.factor(gender) + phd_coh*t*as.factor(gender) + phd_sat*t*as.factor(gender) + partnered_b*t*as.factor(gender) + sector_gov_b*t*as.factor(gender) + sector_nonpr_b*t*as.factor(gender) + break_job_b*t*as.factor(gender) + abroad_time_b*t*as.factor(gender) + otherjob_b*t*as.factor(gender) + phd_disci*t*as.factor(gender) + child_u5_b*t*as.factor(gender) + log_hrs_b*t*as.factor(gender) + temporary_emp_b*t*as.factor(gender) + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_mmfc)

7 By gender: pay

Creating separate datasets for men and women, for the separated analyses

df_men <- df_mmfc %>% filter(gender=="men")
df_wom <- df_mmfc %>% filter(gender=="women")

7.1 MEN

# Null model: random intercept
M0m <- lmer(log_realpay ~ 1 + t + t2 + t3 + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_men)

# Compute ICC
icc_ip <- as.data.frame(VarCorr(M0m))[4]
icc_m <- icc_ip[1,1] / sum(icc_ip)

# M1: Transition effect and controls
M1m <- lmer(log_realpay ~ 1 + t + t2 + t3 + as.factor(trans_st) + as.factor(trans_lt) + trans_lt_b + phd_coh + phd_sat + as.factor(partnered) + partnered_b + as.factor(sector_gov) + as.factor(sector_nonpr) + sector_gov_b + sector_nonpr_b + break_job + break_job_b + abroad_time + abroad_time_b + as.factor(otherjob) + otherjob_b + as.factor(trans_lt)*t + trans_lt_b*t + phd_coh*t + phd_sat*t + partnered_b*t + sector_gov_b*t + sector_nonpr_b*t + break_job_b*t + abroad_time_b*t + otherjob_b*t + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_men)

# M2: Adding explanatory variables (hours worked, discipline, parental status, temporary contract)
M2m <- lmer(log_realpay ~ 1 + t + t2 + t3 + as.factor(trans_st) + as.factor(trans_lt) + trans_lt_b + as.factor(phd_disci) + as.factor(child_u5) + child_u5_b + log_hrs + log_hrs_b + as.factor(temporary_emp) + temporary_emp_b + phd_coh + phd_sat + as.factor(partnered) + partnered_b + as.factor(sector_gov) + as.factor(sector_nonpr) + sector_gov_b + sector_nonpr_b + break_job + break_job_b + abroad_time + abroad_time_b + as.factor(otherjob) + otherjob_b + as.factor(trans_lt)*t + trans_lt_b*t + phd_coh*t + phd_sat*t + partnered_b*t + sector_gov_b*t + sector_nonpr_b*t + break_job_b*t + abroad_time_b*t + otherjob_b*t + phd_disci*t + child_u5_b*t + log_hrs_b*t + temporary_emp_b*t + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_men)

7.2 WOMEN

# Null model: random intercept
M0w <- lmer(log_realpay ~ 1 + t + t2 + t3 + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_wom)

# Compute ICC
icc_ip <- as.data.frame(VarCorr(M0w))[4]
icc_w <- icc_ip[1,1] / sum(icc_ip)

# M1: Transition effect and controls
M1w <- lmer(log_realpay ~ 1 + t + t2 + t3 + as.factor(trans_st) + as.factor(trans_lt) + trans_lt_b + phd_coh + phd_sat + as.factor(partnered) + partnered_b + as.factor(sector_gov) + as.factor(sector_nonpr) + sector_gov_b + sector_nonpr_b + break_job + break_job_b + abroad_time + abroad_time_b + as.factor(otherjob) + otherjob_b + as.factor(trans_lt)*t + trans_lt_b*t + phd_coh*t + phd_sat*t + partnered_b*t + sector_gov_b*t + + sector_nonpr_b*t + break_job_b*t + abroad_time_b*t + otherjob_b*t + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_wom)

# M2: Adding explanatory variables (hours worked, discipline, parental status, temporary contract)
M2w <- lmer(log_realpay ~ 1 + t + t2 + t3 + as.factor(trans_st) + as.factor(trans_lt) + trans_lt_b + as.factor(phd_disci) + as.factor(child_u5) + child_u5_b + log_hrs + log_hrs_b + as.factor(temporary_emp) + temporary_emp_b + phd_coh + phd_sat + as.factor(partnered) + partnered_b + as.factor(sector_gov) + as.factor(sector_nonpr) + sector_gov_b + sector_nonpr_b + break_job + break_job_b + abroad_time + abroad_time_b + as.factor(otherjob) + otherjob_b + as.factor(trans_lt)*t + trans_lt_b*t + phd_coh*t + phd_sat*t + partnered_b*t + sector_gov_b*t + sector_nonpr_b*t + break_job_b*t + abroad_time_b*t + otherjob_b*t + phd_disci*t + child_u5_b*t + log_hrs_b*t + temporary_emp_b*t + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_wom)

8 Adding mechanisms step-by-step

8.1 Discipline

M2_disci <- lmer(log_realpay ~ 1 + t*as.factor(gender) + t2*as.factor(gender) + t3*as.factor(gender) + as.factor(trans_st)*as.factor(gender) + as.factor(trans_lt)*as.factor(gender) + trans_lt_b*as.factor(gender) + as.factor(phd_disci)*as.factor(gender) + phd_coh*as.factor(gender) + phd_sat*as.factor(gender) + as.factor(partnered)*as.factor(gender) + partnered_b*as.factor(gender) + as.factor(sector_gov)*as.factor(gender) + as.factor(sector_nonpr)*as.factor(gender) + sector_gov_b*as.factor(gender) + sector_nonpr_b*as.factor(gender) + break_job*as.factor(gender) + break_job_b*as.factor(gender) + abroad_time*as.factor(gender) + abroad_time_b*as.factor(gender) + as.factor(otherjob)*as.factor(gender) + otherjob_b*as.factor(gender) + as.factor(trans_lt)*t*as.factor(gender) + trans_lt_b*t*as.factor(gender) + phd_coh*t*as.factor(gender) + phd_sat*t*as.factor(gender) + partnered_b*t*as.factor(gender) + sector_gov_b*t*as.factor(gender) + sector_nonpr_b*t*as.factor(gender) + break_job_b*t*as.factor(gender) + abroad_time_b*t*as.factor(gender) + otherjob_b*t*as.factor(gender) + phd_disci*t*as.factor(gender) + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_mmfc)

# men
M2m_disci <- lmer(log_realpay ~ 1 + t + t2 + t3 + as.factor(trans_st) + as.factor(trans_lt) + trans_lt_b + as.factor(phd_disci) + phd_coh + phd_sat + as.factor(partnered) + partnered_b + as.factor(sector_gov) + as.factor(sector_nonpr) + sector_gov_b + sector_nonpr_b + break_job + break_job_b + abroad_time + abroad_time_b + as.factor(otherjob) + otherjob_b + as.factor(trans_lt)*t + trans_lt_b*t + phd_coh*t + phd_sat*t + partnered_b*t + sector_gov_b*t + sector_nonpr_b*t + break_job_b*t + abroad_time_b*t + otherjob_b*t + phd_disci*t + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_men)

# women
M2w_disci <- lmer(log_realpay ~ 1 + t + t2 + t3 + as.factor(trans_st) + as.factor(trans_lt) + trans_lt_b + as.factor(phd_disci) + phd_coh + phd_sat + as.factor(partnered) + partnered_b + as.factor(sector_gov) + as.factor(sector_nonpr) + sector_gov_b + sector_nonpr_b + break_job + break_job_b + abroad_time + abroad_time_b + as.factor(otherjob) + otherjob_b + as.factor(trans_lt)*t + trans_lt_b*t + phd_coh*t + phd_sat*t + partnered_b*t + sector_gov_b*t + sector_nonpr_b*t + break_job_b*t + abroad_time_b*t + otherjob_b*t + phd_disci*t + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_wom)

8.2 Child < 5

M2_child <- lmer(log_realpay ~ 1 + t*as.factor(gender) + t2*as.factor(gender) + t3*as.factor(gender) + as.factor(trans_st)*as.factor(gender) + as.factor(trans_lt)*as.factor(gender) + trans_lt_b*as.factor(gender) + as.factor(phd_disci)*as.factor(gender) + as.factor(child_u5)*as.factor(gender) + child_u5_b*as.factor(gender) + phd_coh*as.factor(gender) + phd_sat*as.factor(gender) + as.factor(partnered)*as.factor(gender) + partnered_b*as.factor(gender) + as.factor(sector_gov)*as.factor(gender) + as.factor(sector_nonpr)*as.factor(gender) + sector_gov_b*as.factor(gender) + sector_nonpr_b*as.factor(gender) + break_job*as.factor(gender) + break_job_b*as.factor(gender) + abroad_time*as.factor(gender) + abroad_time_b*as.factor(gender) + as.factor(otherjob)*as.factor(gender) + otherjob_b*as.factor(gender) + as.factor(trans_lt)*t*as.factor(gender) + trans_lt_b*t*as.factor(gender) + phd_coh*t*as.factor(gender) + phd_sat*t*as.factor(gender) + partnered_b*t*as.factor(gender) + sector_gov_b*t*as.factor(gender) + sector_nonpr_b*t*as.factor(gender) + break_job_b*t*as.factor(gender) + abroad_time_b*t*as.factor(gender) + otherjob_b*t*as.factor(gender) + phd_disci*t*as.factor(gender) + child_u5_b*t*as.factor(gender) + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_mmfc)

# men
M2m_child <- lmer(log_realpay ~ 1 + t + t2 + t3 + as.factor(trans_st) + as.factor(trans_lt) + trans_lt_b + as.factor(phd_disci) + as.factor(child_u5) + child_u5_b + phd_coh + phd_sat + as.factor(partnered) + partnered_b + as.factor(sector_gov) + as.factor(sector_nonpr) + sector_gov_b + sector_nonpr_b + break_job + break_job_b + abroad_time + abroad_time_b + as.factor(otherjob) + otherjob_b + as.factor(trans_lt)*t + trans_lt_b*t + phd_coh*t + phd_sat*t + partnered_b*t + sector_gov_b*t + sector_nonpr_b*t + break_job_b*t + abroad_time_b*t + otherjob_b*t + phd_disci*t + child_u5_b*t + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_men)

# women
M2w_child <- lmer(log_realpay ~ 1 + t + t2 + t3 + as.factor(trans_st) + as.factor(trans_lt) + trans_lt_b + as.factor(phd_disci) + as.factor(child_u5) + child_u5_b + phd_coh + phd_sat + as.factor(partnered) + partnered_b + as.factor(sector_gov) + as.factor(sector_nonpr) + sector_gov_b + sector_nonpr_b + break_job + break_job_b + abroad_time + abroad_time_b + as.factor(otherjob) + otherjob_b + as.factor(trans_lt)*t + trans_lt_b*t + phd_coh*t + phd_sat*t + partnered_b*t + sector_gov_b*t + sector_nonpr_b*t + break_job_b*t + abroad_time_b*t + otherjob_b*t + phd_disci*t + child_u5_b*t + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_wom)

8.3 Hours

M2_hrs <- lmer(log_realpay ~ 1 + t*as.factor(gender) + t2*as.factor(gender) + t3*as.factor(gender) + as.factor(trans_st)*as.factor(gender) + as.factor(trans_lt)*as.factor(gender) + trans_lt_b*as.factor(gender) + as.factor(phd_disci)*as.factor(gender) + as.factor(child_u5)*as.factor(gender) + child_u5_b*as.factor(gender) + log_hrs*as.factor(gender) + log_hrs_b*as.factor(gender) + phd_coh*as.factor(gender) + phd_sat*as.factor(gender) + as.factor(partnered)*as.factor(gender) + partnered_b*as.factor(gender) + as.factor(sector_gov)*as.factor(gender) + as.factor(sector_nonpr)*as.factor(gender) + sector_gov_b*as.factor(gender) + sector_nonpr_b*as.factor(gender) + break_job*as.factor(gender) + break_job_b*as.factor(gender) + abroad_time*as.factor(gender) + abroad_time_b*as.factor(gender) + as.factor(otherjob)*as.factor(gender) + otherjob_b*as.factor(gender) + as.factor(trans_lt)*t*as.factor(gender) + trans_lt_b*t*as.factor(gender) + phd_coh*t*as.factor(gender) + phd_sat*t*as.factor(gender) + partnered_b*t*as.factor(gender) + sector_gov_b*t*as.factor(gender) + sector_nonpr_b*t*as.factor(gender) + break_job_b*t*as.factor(gender) + abroad_time_b*t*as.factor(gender) + otherjob_b*t*as.factor(gender) + phd_disci*t*as.factor(gender) + child_u5_b*t*as.factor(gender) + log_hrs_b*t*as.factor(gender) + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_mmfc)

# men
M2m_hrs <- lmer(log_realpay ~ 1 + t + t2 + t3 + as.factor(trans_st) + as.factor(trans_lt) + trans_lt_b + as.factor(phd_disci) + as.factor(child_u5) + child_u5_b + log_hrs + log_hrs_b + phd_coh + phd_sat + as.factor(partnered) + partnered_b + as.factor(sector_gov) + as.factor(sector_nonpr) + sector_gov_b + sector_nonpr_b + break_job + break_job_b + abroad_time + abroad_time_b + as.factor(otherjob) + otherjob_b + as.factor(trans_lt)*t + trans_lt_b*t + phd_coh*t + phd_sat*t + partnered_b*t + sector_gov_b*t + sector_nonpr_b*t + break_job_b*t + abroad_time_b*t + otherjob_b*t + phd_disci*t + child_u5_b*t + log_hrs_b*t + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_men)

# women
M2w_hrs <- lmer(log_realpay ~ 1 + t + t2 + t3 + as.factor(trans_st) + as.factor(trans_lt) + trans_lt_b + as.factor(phd_disci) + as.factor(child_u5) + child_u5_b + log_hrs + log_hrs_b + phd_coh + phd_sat + as.factor(partnered) + partnered_b + as.factor(sector_gov) + as.factor(sector_nonpr) + sector_gov_b + sector_nonpr_b + break_job + break_job_b + abroad_time + abroad_time_b + as.factor(otherjob) + otherjob_b + as.factor(trans_lt)*t + trans_lt_b*t + phd_coh*t + phd_sat*t + partnered_b*t + sector_gov_b*t + sector_nonpr_b*t + break_job_b*t + abroad_time_b*t + otherjob_b*t + phd_disci*t + child_u5_b*t + log_hrs_b*t + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_wom)

8.4 Temporary employment

(These are the original models)

9 Robustness checks

9.1 Max 5 years post-PhD

df_mmfc %>%
  filter(t<6) -> df_mmfc_r5


df_men_r5 <- df_mmfc_r5 %>% filter(gender=="men")
df_wom_r5 <- df_mmfc_r5 %>% filter(gender=="women")

Men

# MAX 5 YEARS POST-PHD
# M0
R5_M0m <- lmer(log_realpay ~ 1 + t + t2 + t3 + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_men_r5)

# M1
R5_M1m <- lmer(log_realpay ~ 1 + t + t2 + t3 + as.factor(trans_st) + as.factor(trans_lt) + trans_lt_b + phd_coh + phd_sat + as.factor(partnered) + partnered_b + as.factor(sector_gov) + as.factor(sector_nonpr) + sector_gov_b + sector_nonpr_b + break_job + break_job_b + abroad_time + abroad_time_b + as.factor(otherjob) + otherjob_b + as.factor(trans_lt)*t + trans_lt_b*t + phd_coh*t + phd_sat*t + partnered_b*t + sector_gov_b*t + sector_nonpr_b*t + break_job_b*t + abroad_time_b*t + otherjob_b*t + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_men_r5)

# M2
R5_M2m <- lmer(log_realpay ~ 1 + t + t2 + t3 + as.factor(trans_st) + as.factor(trans_lt) + trans_lt_b + as.factor(phd_disci) + as.factor(child_u5) + child_u5_b + log_hrs + log_hrs_b + as.factor(temporary_emp) + temporary_emp_b + phd_coh + phd_sat + as.factor(partnered) + partnered_b + as.factor(sector_gov) + as.factor(sector_nonpr) + sector_gov_b + sector_nonpr_b + break_job + break_job_b + abroad_time + abroad_time_b + as.factor(otherjob) + otherjob_b + as.factor(trans_lt)*t + trans_lt_b*t + phd_coh*t + phd_sat*t + partnered_b*t + sector_gov_b*t + sector_nonpr_b*t + break_job_b*t + abroad_time_b*t + otherjob_b*t + phd_disci*t + child_u5_b*t + log_hrs_b*t + temporary_emp_b*t + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_men_r5)

Women

# MAX 5 YEARS POST-PHD
# M0
R5_M0w <- lmer(log_realpay ~ 1 + t + t2 + t3 + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_wom_r5)

# M1
R5_M1w <- lmer(log_realpay ~ 1 + t + t2 + t3 + as.factor(trans_st) + as.factor(trans_lt) + trans_lt_b + phd_coh + phd_sat + as.factor(partnered) + partnered_b + as.factor(sector_gov) + as.factor(sector_nonpr) + sector_gov_b + sector_nonpr_b + break_job + break_job_b + abroad_time + abroad_time_b + as.factor(otherjob) + otherjob_b + as.factor(trans_lt)*t + trans_lt_b*t + phd_coh*t + phd_sat*t + partnered_b*t + sector_gov_b*t + sector_nonpr_b*t + break_job_b*t + abroad_time_b*t + otherjob_b*t + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_wom_r5)

# M2
R5_M2w <- lmer(log_realpay ~ 1 + t + t2 + t3 + as.factor(trans_st) + as.factor(trans_lt) + trans_lt_b + as.factor(phd_disci) + as.factor(child_u5) + child_u5_b + log_hrs + log_hrs_b + as.factor(temporary_emp) + temporary_emp_b + phd_coh + phd_sat + as.factor(partnered) + partnered_b + as.factor(sector_gov) + as.factor(sector_nonpr) + sector_gov_b + sector_nonpr_b + break_job + break_job_b + abroad_time + abroad_time_b + as.factor(otherjob) + otherjob_b + as.factor(trans_lt)*t + trans_lt_b*t + phd_coh*t + phd_sat*t + partnered_b*t + sector_gov_b*t + sector_nonpr_b*t + break_job_b*t + abroad_time_b*t + otherjob_b*t + phd_disci*t + child_u5_b*t + log_hrs_b*t + temporary_emp_b*t + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_wom_r5)

Overall results

# MAX 5 YEARS POST-PHD
# M0
R5_M0 <- lmer(log_realpay ~ 1 + t*as.factor(gender) + t2*as.factor(gender) + t3*as.factor(gender) + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_mmfc_r5)

# M1
R5_M1 <- lmer(log_realpay ~ 1 + t*as.factor(gender) + t2*as.factor(gender) + t3*as.factor(gender) + as.factor(trans_st)*as.factor(gender) + as.factor(trans_lt)*as.factor(gender) + trans_lt_b*as.factor(gender) + phd_coh*as.factor(gender) + phd_sat*as.factor(gender) + as.factor(partnered)*as.factor(gender) + partnered_b*as.factor(gender) + as.factor(sector_gov)*as.factor(gender) + as.factor(sector_nonpr)*as.factor(gender) + sector_gov_b*as.factor(gender) + sector_nonpr_b*as.factor(gender) + break_job*as.factor(gender) + break_job_b*as.factor(gender) + abroad_time*as.factor(gender) + abroad_time_b*as.factor(gender) + as.factor(otherjob)*as.factor(gender) + otherjob_b*as.factor(gender) + as.factor(trans_lt)*t*as.factor(gender) + trans_lt_b*t*as.factor(gender) + phd_coh*t*as.factor(gender) + phd_sat*t*as.factor(gender) + partnered_b*t*as.factor(gender) + sector_gov_b*t*as.factor(gender) + sector_nonpr_b*t*as.factor(gender) + break_job_b*t*as.factor(gender) + abroad_time_b*t*as.factor(gender) + otherjob_b*t*as.factor(gender) + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_mmfc_r5)

# M2
R5_M2 <- lmer(log_realpay ~ 1 + t*as.factor(gender) + t2*as.factor(gender) + t3*as.factor(gender) + as.factor(trans_st)*as.factor(gender) + as.factor(trans_lt)*as.factor(gender) + trans_lt_b*as.factor(gender) + as.factor(phd_disci)*as.factor(gender) + as.factor(child_u5)*as.factor(gender) + child_u5_b*as.factor(gender) + log_hrs*as.factor(gender) + log_hrs_b*as.factor(gender) + as.factor(temporary_emp)*as.factor(gender) + temporary_emp_b*as.factor(gender) + phd_coh*as.factor(gender) + phd_sat*as.factor(gender) + as.factor(partnered)*as.factor(gender) + partnered_b*as.factor(gender) + as.factor(sector_gov)*as.factor(gender) + as.factor(sector_nonpr)*as.factor(gender) + sector_gov_b*as.factor(gender) + sector_nonpr_b*as.factor(gender) + break_job*as.factor(gender) + break_job_b*as.factor(gender) + abroad_time*as.factor(gender) + abroad_time_b*as.factor(gender) + as.factor(otherjob)*as.factor(gender) + otherjob_b*as.factor(gender) + as.factor(trans_lt)*t*as.factor(gender) + trans_lt_b*t*as.factor(gender) + phd_coh*t*as.factor(gender) + phd_sat*t*as.factor(gender) + partnered_b*t*as.factor(gender) + sector_gov_b*t*as.factor(gender) + sector_nonpr_b*t*as.factor(gender) + break_job_b*t*as.factor(gender) + abroad_time_b*t*as.factor(gender) + otherjob_b*t*as.factor(gender) + phd_disci*t*as.factor(gender) + child_u5_b*t*as.factor(gender) + log_hrs_b*t*as.factor(gender) + temporary_emp_b*t*as.factor(gender) + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_mmfc_r5)

9.2 Transition * t^2 / t^3

# OVERALL 
# Null model: random intercept
R7_M0 <- lmer(log_realpay ~ 1 + t*as.factor(gender) + t2*as.factor(gender) + t3*as.factor(gender) + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_mmfc)

# M1: Transition effect and controls
R7_M1 <- lmer(log_realpay ~ 1 + t*as.factor(gender) + t2*as.factor(gender) + t3*as.factor(gender) + as.factor(trans_st)*as.factor(gender) + as.factor(trans_lt)*as.factor(gender) + trans_lt_b*as.factor(gender) + phd_coh*as.factor(gender) + phd_sat*as.factor(gender) + as.factor(partnered)*as.factor(gender) + partnered_b*as.factor(gender) + as.factor(sector_gov)*as.factor(gender) + as.factor(sector_nonpr)*as.factor(gender) + sector_gov_b*as.factor(gender) + sector_nonpr_b*as.factor(gender) + break_job*as.factor(gender) + break_job_b*as.factor(gender) + abroad_time*as.factor(gender) + abroad_time_b*as.factor(gender) + as.factor(otherjob)*as.factor(gender) + otherjob_b*as.factor(gender) + as.factor(trans_lt)*t*as.factor(gender) + trans_lt_b*t*as.factor(gender) + as.factor(trans_lt)*t2*as.factor(gender) + trans_lt_b*t2*as.factor(gender) + as.factor(trans_lt)*t3*as.factor(gender) + trans_lt_b*t3*as.factor(gender) + phd_coh*t*as.factor(gender) + phd_sat*t*as.factor(gender) + partnered_b*t*as.factor(gender) + sector_gov_b*t*as.factor(gender) + sector_nonpr_b*t*as.factor(gender) + break_job_b*t*as.factor(gender) + abroad_time_b*t*as.factor(gender) + otherjob_b*t*as.factor(gender) + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_mmfc)

# M2: Adding explanatory variables (hours worked, discipline, parental status, temporary contract)
R7_M2 <- lmer(log_realpay ~ 1 + t*as.factor(gender) + t2*as.factor(gender) + t3*as.factor(gender) + as.factor(trans_st)*as.factor(gender) + as.factor(trans_lt)*as.factor(gender) + trans_lt_b*as.factor(gender) + as.factor(phd_disci)*as.factor(gender) + as.factor(child_u5)*as.factor(gender) + child_u5_b*as.factor(gender) + log_hrs*as.factor(gender) + log_hrs_b*as.factor(gender) + as.factor(temporary_emp)*as.factor(gender) + temporary_emp_b*as.factor(gender) + phd_coh*as.factor(gender) + phd_sat*as.factor(gender) + as.factor(partnered)*as.factor(gender) + partnered_b*as.factor(gender) + as.factor(sector_gov)*as.factor(gender) + as.factor(sector_nonpr)*as.factor(gender) + sector_gov_b*as.factor(gender) + sector_nonpr_b*as.factor(gender) + break_job*as.factor(gender) + break_job_b*as.factor(gender) + abroad_time*as.factor(gender) + abroad_time_b*as.factor(gender) + as.factor(otherjob)*as.factor(gender) + otherjob_b*as.factor(gender) + as.factor(trans_lt)*t*as.factor(gender) + trans_lt_b*t*as.factor(gender) + as.factor(trans_lt)*t2*as.factor(gender) + trans_lt_b*t2*as.factor(gender) + as.factor(trans_lt)*t3*as.factor(gender) + trans_lt_b*t3*as.factor(gender) + phd_coh*t*as.factor(gender) + phd_sat*t*as.factor(gender) + partnered_b*t*as.factor(gender) + sector_gov_b*t*as.factor(gender) + sector_nonpr_b*t*as.factor(gender) + break_job_b*t*as.factor(gender) + abroad_time_b*t*as.factor(gender) + otherjob_b*t*as.factor(gender) + phd_disci*t*as.factor(gender) + child_u5_b*t*as.factor(gender) + log_hrs_b*t*as.factor(gender) + temporary_emp_b*t*as.factor(gender) + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_mmfc)

# BY GENDER

# MEN
# Null model: random intercept
R7_M0m <- lmer(log_realpay ~ 1 + t + t2 + t3 + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_men)

# M1: Transition effect and controls
R7_M1m <- lmer(log_realpay ~ 1 + t + t2 + t3 + as.factor(trans_st) + as.factor(trans_lt) + trans_lt_b + phd_coh + phd_sat + as.factor(partnered) + partnered_b + as.factor(sector_gov) + as.factor(sector_nonpr) + sector_gov_b + sector_nonpr_b + break_job + break_job_b + abroad_time + abroad_time_b + as.factor(otherjob) + otherjob_b + as.factor(trans_lt)*t + trans_lt_b*t + as.factor(trans_lt)*t2 + trans_lt_b*t2 + as.factor(trans_lt)*t3 + trans_lt_b*t3 + phd_coh*t + phd_sat*t + partnered_b*t + sector_gov_b*t + sector_nonpr_b*t + break_job_b*t + abroad_time_b*t + otherjob_b*t + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_men)

# M2: Adding explanatory variables (hours worked, discipline, parental status, temporary contract)
R7_M2m <- lmer(log_realpay ~ 1 + t + t2 + t3 + as.factor(trans_st) + as.factor(trans_lt) + trans_lt_b + as.factor(phd_disci) + as.factor(child_u5) + child_u5_b + log_hrs + log_hrs_b + as.factor(temporary_emp) + temporary_emp_b + phd_coh + phd_sat + as.factor(partnered) + partnered_b + as.factor(sector_gov) + as.factor(sector_nonpr) + sector_gov_b + sector_nonpr_b + break_job + break_job_b + abroad_time + abroad_time_b + as.factor(otherjob) + otherjob_b + as.factor(trans_lt)*t + trans_lt_b*t  + as.factor(trans_lt)*t2 + trans_lt_b*t2 + as.factor(trans_lt)*t3 + trans_lt_b*t3 + phd_coh*t + phd_sat*t + partnered_b*t + sector_gov_b*t + sector_nonpr_b*t + break_job_b*t + abroad_time_b*t + otherjob_b*t + phd_disci*t + child_u5_b*t + log_hrs_b*t + temporary_emp_b*t + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_men)

# WOMEN


# Null model: random intercept
R7_M0w <- lmer(log_realpay ~ 1 + t + t2 + t3 + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_wom)

# M1: Transition effect and controls
R7_M1w <- lmer(log_realpay ~ 1 + t + t2 + t3 + as.factor(trans_st) + as.factor(trans_lt) + trans_lt_b + phd_coh + phd_sat + as.factor(partnered) + partnered_b + as.factor(sector_gov) + as.factor(sector_nonpr) + sector_gov_b + sector_nonpr_b + break_job + break_job_b + abroad_time + abroad_time_b + as.factor(otherjob) + otherjob_b + as.factor(trans_lt)*t + trans_lt_b*t + as.factor(trans_lt)*t2 + trans_lt_b*t2 + as.factor(trans_lt)*t3 + trans_lt_b*t3 + phd_coh*t + phd_sat*t + partnered_b*t + sector_gov_b*t + + sector_nonpr_b*t + break_job_b*t + abroad_time_b*t + otherjob_b*t + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_wom)

# M2: Adding explanatory variables (hours worked, discipline, parental status, temporary contract)
R7_M2w <- lmer(log_realpay ~ 1 + t + t2 + t3 + as.factor(trans_st) + as.factor(trans_lt) + trans_lt_b + as.factor(phd_disci) + as.factor(child_u5) + child_u5_b + log_hrs + log_hrs_b + as.factor(temporary_emp) + temporary_emp_b + phd_coh + phd_sat + as.factor(partnered) + partnered_b + as.factor(sector_gov) + as.factor(sector_nonpr) + sector_gov_b + sector_nonpr_b + break_job + break_job_b + abroad_time + abroad_time_b + as.factor(otherjob) + otherjob_b + as.factor(trans_lt)*t + trans_lt_b*t + as.factor(trans_lt)*t2 + trans_lt_b*t2 + as.factor(trans_lt)*t3 + trans_lt_b*t3 + phd_coh*t + phd_sat*t + partnered_b*t + sector_gov_b*t + sector_nonpr_b*t + break_job_b*t + abroad_time_b*t + otherjob_b*t + phd_disci*t + child_u5_b*t + log_hrs_b*t + temporary_emp_b*t + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_wom)

9.3 No other job

df_noother$t2 <- df_noother$t^2
df_noother$t3 <- df_noother$t^3
df_noother$t4 <- df_noother$t^4
df_noother$t5 <- df_noother$t^5
df_noother$t6 <- df_noother$t^6

df_noother$phd_disci <- factor(df_noother$phd_disci, levels=c("Health sciences", "Social sciences", "Natural sciences and mathematics", "Engineering", "Humanities"))

df_noother$temporary_emp <- haven::zap_labels(df_noother$temporary_emp)

df_noother <- df_noother %>% 
  mutate(gender = ifelse(gender==1, "men", "women"))

df_noother$gender <- factor(df_noother$gender, levels=c("men", "women"))

df_noother %>% filter(gender=="men") -> df_men_noo
df_noother %>% filter(gender=="women") -> df_wom_noo


# OVERALL 
# Null model: random intercept
R9_M0 <- lmer(log_realpay ~ 1 + t*as.factor(gender) + t2*as.factor(gender) + t3*as.factor(gender) + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_noother)


# M1: Transition effect and controls
R9_M1 <- lmer(log_realpay ~ 1 + t*as.factor(gender) + t2*as.factor(gender) + t3*as.factor(gender) + as.factor(trans_st)*as.factor(gender) + as.factor(trans_lt)*as.factor(gender) + trans_lt_b*as.factor(gender) + phd_coh*as.factor(gender) + phd_sat*as.factor(gender) + as.factor(partnered)*as.factor(gender) + partnered_b*as.factor(gender) + as.factor(sector_gov)*as.factor(gender) + as.factor(sector_nonpr)*as.factor(gender) + sector_gov_b*as.factor(gender) + sector_nonpr_b*as.factor(gender) + break_job*as.factor(gender) + break_job_b*as.factor(gender) + abroad_time*as.factor(gender) + abroad_time_b*as.factor(gender) + as.factor(trans_lt)*t*as.factor(gender) + trans_lt_b*t*as.factor(gender) + phd_coh*t*as.factor(gender) + phd_sat*t*as.factor(gender) + partnered_b*t*as.factor(gender) + sector_gov_b*t*as.factor(gender) + sector_nonpr_b*t*as.factor(gender) + break_job_b*t*as.factor(gender) + abroad_time_b*t*as.factor(gender) + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_noother)


# M2: Adding explanatory variables (hours worked, discipline, parental status, temporary contract)
R9_M2 <- lmer(log_realpay ~ 1 + t*as.factor(gender) + t2*as.factor(gender) + t3*as.factor(gender) + as.factor(trans_st)*as.factor(gender) + as.factor(trans_lt)*as.factor(gender) + trans_lt_b*as.factor(gender) + as.factor(phd_disci)*as.factor(gender) + as.factor(child_u5)*as.factor(gender) + child_u5_b*as.factor(gender) + log_hrs*as.factor(gender) + log_hrs_b*as.factor(gender) + as.factor(temporary_emp)*as.factor(gender) + temporary_emp_b*as.factor(gender) + phd_coh*as.factor(gender) + phd_sat*as.factor(gender) + as.factor(partnered)*as.factor(gender) + partnered_b*as.factor(gender) + as.factor(sector_gov)*as.factor(gender) + as.factor(sector_nonpr)*as.factor(gender) + sector_gov_b*as.factor(gender) + sector_nonpr_b*as.factor(gender) + break_job*as.factor(gender) + break_job_b*as.factor(gender) + abroad_time*as.factor(gender) + abroad_time_b*as.factor(gender) +  as.factor(trans_lt)*t*as.factor(gender) + trans_lt_b*t*as.factor(gender) + phd_coh*t*as.factor(gender) + phd_sat*t*as.factor(gender) + partnered_b*t*as.factor(gender) + sector_gov_b*t*as.factor(gender) + sector_nonpr_b*t*as.factor(gender) + break_job_b*t*as.factor(gender) + abroad_time_b*t*as.factor(gender) + phd_disci*t*as.factor(gender) + child_u5_b*t*as.factor(gender) + log_hrs_b*t*as.factor(gender) + temporary_emp_b*t*as.factor(gender) + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_noother)


# BY GENDER

# MEN

# Null model: random intercept
R9_M0m <- lmer(log_realpay ~ 1 + t + t2 + t3 + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_men_noo)


# M1: Transition effect and controls
R9_M1m <- lmer(log_realpay ~ 1 + t + t2 + t3 + as.factor(trans_st) + as.factor(trans_lt) + trans_lt_b + phd_coh + phd_sat + as.factor(partnered) + partnered_b + as.factor(sector_gov) + as.factor(sector_nonpr) + sector_gov_b + sector_nonpr_b + break_job + break_job_b + abroad_time + abroad_time_b + as.factor(trans_lt)*t + trans_lt_b*t + phd_coh*t + phd_sat*t + partnered_b*t + sector_gov_b*t + sector_nonpr_b*t + break_job_b*t + abroad_time_b*t + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_men_noo)


# M2: Adding explanatory variables (hours worked, discipline, parental status, temporary contract)
R9_M2m <- lmer(log_realpay ~ 1 + t + t2 + t3 + as.factor(trans_st) + as.factor(trans_lt) + trans_lt_b + as.factor(phd_disci) + as.factor(child_u5) + child_u5_b + log_hrs + log_hrs_b + as.factor(temporary_emp) + temporary_emp_b + phd_coh + phd_sat + as.factor(partnered) + partnered_b + as.factor(sector_gov) + as.factor(sector_nonpr) + sector_gov_b + sector_nonpr_b + break_job + break_job_b + abroad_time + abroad_time_b + as.factor(trans_lt)*t + trans_lt_b*t  + phd_coh*t + phd_sat*t + partnered_b*t + sector_gov_b*t + sector_nonpr_b*t + break_job_b*t + abroad_time_b*t + phd_disci*t + child_u5_b*t + log_hrs_b*t + temporary_emp_b*t + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_men_noo)


# WOMEN


# Null model: random intercept
R9_M0w <- lmer(log_realpay ~ 1 + t + t2 + t3 + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_wom_noo)


# M1: Transition effect and controls
R9_M1w <- lmer(log_realpay ~ 1 + t + t2 + t3 + as.factor(trans_st) + as.factor(trans_lt) + trans_lt_b + phd_coh + phd_sat + as.factor(partnered) + partnered_b + as.factor(sector_gov) + as.factor(sector_nonpr) + sector_gov_b + sector_nonpr_b + break_job + break_job_b + abroad_time + abroad_time_b + as.factor(trans_lt)*t + trans_lt_b*t + phd_coh*t + phd_sat*t + partnered_b*t + sector_gov_b*t + + sector_nonpr_b*t + break_job_b*t + abroad_time_b*t + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_wom_noo)


# M2: Adding explanatory variables (hours worked, discipline, parental status, temporary contract)
R9_M2w <- lmer(log_realpay ~ 1 + t + t2 + t3 + as.factor(trans_st) + as.factor(trans_lt) + trans_lt_b + as.factor(phd_disci) + as.factor(child_u5) + child_u5_b + log_hrs + log_hrs_b + as.factor(temporary_emp) + temporary_emp_b + phd_coh + phd_sat + as.factor(partnered) + partnered_b + as.factor(sector_gov) + as.factor(sector_nonpr) + sector_gov_b + sector_nonpr_b + break_job + break_job_b + abroad_time + abroad_time_b + as.factor(trans_lt)*t + trans_lt_b*t + phd_coh*t + phd_sat*t + partnered_b*t + sector_gov_b*t + sector_nonpr_b*t + break_job_b*t + abroad_time_b*t +  phd_disci*t + child_u5_b*t + log_hrs_b*t + temporary_emp_b*t + (1 + t + t2 | RINPERSOON) + (-1 + t3 | RINPERSOON), data=df_wom_noo)
LS0tDQp0aXRsZTogIkxlYXZpbmcgZm9yIG1vcmUgb3Igc2V0dGxpbmcgZm9yIGxlc3M6IEFuYWx5c2VzIChsb2cgaG91cmx5IHdhZ2VzKSINCmRhdGU6ICJMYXN0IGNvbXBpbGVkIG9uIGByIFN5cy5EYXRlKClgIg0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDoNCiAgICBjc3M6IHR3ZWFrcy5jc3MNCiAgICB0b2M6ICB0cnVlDQogICAgdG9jX2Zsb2F0OiB0cnVlDQogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlDQogICAgY29kZV9mb2xkaW5nOiBzaG93DQogICAgY29kZV9kb3dubG9hZDogeWVzDQotLS0NCg0KDQoNCmBgYHtyLCBldmFsPUZBTFNFfQ0KDQpybShsaXN0PWxzKCkpDQoNCmBgYA0KDQoNCg0KIyBQYWNrYWdlcw0KDQoNCmBgYHtyLCBldmFsPUZBTFNFfQ0KDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkobG1lNCkNCg0KYGBgDQoNCg0KDQojIElucHV0IA0KDQoNCmBgYHtyLCBldmFsPUZBTFNFfQ0KDQpsb2FkKGZpbGU9Ikg6L3Byb2Nlc3NlZF9kYXRhL2RmX21tZmMucmRhIikNCg0KbG9hZChmaWxlPSJIOi9wcm9jZXNzZWRfZGF0YS9kZl9tbWZjX3IyLnJkYSIpDQoNCmxvYWQoZmlsZT0iSDovcHJvY2Vzc2VkX2RhdGEvZGZfbm9vdGhlci5yZGEiKQ0KDQoNCg0KYGBgDQoNCg0KDQojIE5vbi1saW5lYXIgZWZmZWN0cyBvZiB0aW1lIChpbiB5ZWFyIHNpbmNlIFBoZCkNCg0KQ3JlYXRpbmcgdmFyaWFibGVzIGZvciB0XjIsIHReMyB1cCB0byB0XjYNCg0KDQpgYGB7ciwgZXZhbD1GQUxTRX0NCg0KDQpkZl9tbWZjJHQyIDwtIGRmX21tZmMkdF4yDQpkZl9tbWZjJHQzIDwtIGRmX21tZmMkdF4zDQpkZl9tbWZjJHQ0IDwtIGRmX21tZmMkdF40DQpkZl9tbWZjJHQ1IDwtIGRmX21tZmMkdF41DQpkZl9tbWZjJHQ2IDwtIGRmX21tZmMkdF42DQoNCmBgYA0KDQoNCg0KIyBDaGVjayBsaW5lYXJpdHkgdCBhbmQgbG9nIHJlYWwgcGF5DQoNCg0KYGBge3IsIGV2YWw9RkFMU0V9DQoNCmxpbmVhcm1vZCA8LSBsbShsb2dfcmVhbHBheSB+IHQsIGRhdGE9ZGZfbW1mYykNCg0KZ2dwbG90KGJyb29tOjphdWdtZW50KGxpbmVhcm1vZCksIGFlcyh0LCBsb2dfcmVhbHBheSkpICsNCiBnZW9tX3BvaW50KCkgKw0KIHN0YXRfc21vb3RoKG1ldGhvZD0ibG0iLCBzZT1GQUxTRSkgKw0KIGdlb21fc2VnbWVudChhZXMoeGVuZCA9IHQsIHllbmQgPSAuZml0dGVkKSwgY29sb3I9InJlZCIsIHNpemU9MC4zKQ0KDQpgYGANCg0KDQpgYGB7ciwgZXZhbD1GQUxTRX0NCg0KcGFyKG1mcm93ID0gYygyLDIpKQ0KcGxvdChsaW5lYXJtb2QpDQoNCmBgYA0KDQoNCmBgYHtyLCBldmFsPUZBTFNFfQ0KDQpsbTEgPC0gbG0obG9nX3JlYWxwYXkgfiB0LCBkYXRhPWRmX21tZmMpDQpsbTIgPC0gbG0obG9nX3JlYWxwYXkgfiB0ICsgdDIsIGRhdGE9ZGZfbW1mYykNCmxtMyA8LSBsbShsb2dfcmVhbHBheSB+IHQgKyB0MiArIHQzLCBkYXRhPWRmX21tZmMpDQpsbTQgPC0gbG0obG9nX3JlYWxwYXkgfiB0ICsgdDIgKyB0MyArIHQ0LCBkYXRhPWRmX21tZmMpDQpsbTUgPC0gbG0obG9nX3JlYWxwYXkgfiB0ICsgdDIgKyB0MyArIHQ0ICsgdDUsIGRhdGE9ZGZfbW1mYykNCmxtNiA8LSBsbShsb2dfcmVhbHBheSB+IHQgKyB0MiArIHQzICsgdDQgKyB0NSArIHQ2LCBkYXRhPWRmX21tZmMpDQoNCmBgYA0KDQoNCiMgU29tZSByZWxldmVsaW5nIA0KDQoNCmBgYHtyLCBldmFsPUZBTFNFfQ0KDQpsZXZlbHMoYXMuZmFjdG9yKGRmX21tZmMkcGhkX2Rpc2NpKSkNCnN1bW1hcnkoYXMuZmFjdG9yKGRmX21tZmMkcGhkX2Rpc2NpKSkNCg0KZGZfbW1mYyRwaGRfZGlzY2kgPC0gZmFjdG9yKGRmX21tZmMkcGhkX2Rpc2NpLCBsZXZlbHM9YygiSGVhbHRoIHNjaWVuY2VzIiwgIlNvY2lhbCBzY2llbmNlcyIsICJOYXR1cmFsIHNjaWVuY2VzIGFuZCBtYXRoZW1hdGljcyIsICJFbmdpbmVlcmluZyIsICJIdW1hbml0aWVzIikpDQoNCmRmX21tZmMgPC0gZGZfbW1mYyAlPiUgDQogIG11dGF0ZShnZW5kZXIgPSBpZmVsc2UoZ2VuZGVyPT0xLCAibWVuIiwgIndvbWVuIikpDQoNCmRmX21tZmMkZ2VuZGVyIDwtIGZhY3RvcihkZl9tbWZjJGdlbmRlciwgbGV2ZWxzPWMoIm1lbiIsICJ3b21lbiIpKQ0KDQoNCmRmX21tZmMkdGVtcG9yYXJ5X2VtcCA8LSBoYXZlbjo6emFwX2xhYmVscyhkZl9tbWZjJHRlbXBvcmFyeV9lbXApDQoNCmBgYA0KDQoNCg0KIyBPdmVyYWxsIC0gcGF5DQoNCg0KYGBge3IsIGV2YWw9RkFMU0V9DQoNCiMgTnVsbCBtb2RlbDogcmFuZG9tIGludGVyY2VwdA0KTTAgPC0gbG1lcihsb2dfcmVhbHBheSB+IDEgKyB0KmFzLmZhY3RvcihnZW5kZXIpICsgdDIqYXMuZmFjdG9yKGdlbmRlcikgKyB0Myphcy5mYWN0b3IoZ2VuZGVyKSArICgxICsgdCArIHQyIHwgUklOUEVSU09PTikgKyAoLTEgKyB0MyB8IFJJTlBFUlNPT04pLCBkYXRhPWRmX21tZmMpDQoNCiMgQ29tcHV0ZSBJQ0MNCmljY19pcCA8LSBhcy5kYXRhLmZyYW1lKFZhckNvcnIoTTApKVs0XQ0KaWNjIDwtIGljY19pcFsxLDFdIC8gc3VtKGljY19pcCkNCg0KIyBNMTogVHJhbnNpdGlvbiBlZmZlY3QgYW5kIGNvbnRyb2xzDQpNMSA8LSBsbWVyKGxvZ19yZWFscGF5IH4gMSArIHQqYXMuZmFjdG9yKGdlbmRlcikgKyB0Miphcy5mYWN0b3IoZ2VuZGVyKSArIHQzKmFzLmZhY3RvcihnZW5kZXIpICsgYXMuZmFjdG9yKHRyYW5zX3N0KSphcy5mYWN0b3IoZ2VuZGVyKSArIGFzLmZhY3Rvcih0cmFuc19sdCkqYXMuZmFjdG9yKGdlbmRlcikgKyB0cmFuc19sdF9iKmFzLmZhY3RvcihnZW5kZXIpICsgcGhkX2NvaCphcy5mYWN0b3IoZ2VuZGVyKSArIHBoZF9zYXQqYXMuZmFjdG9yKGdlbmRlcikgKyBhcy5mYWN0b3IocGFydG5lcmVkKSphcy5mYWN0b3IoZ2VuZGVyKSArIHBhcnRuZXJlZF9iKmFzLmZhY3RvcihnZW5kZXIpICsgYXMuZmFjdG9yKHNlY3Rvcl9nb3YpKmFzLmZhY3RvcihnZW5kZXIpICsgYXMuZmFjdG9yKHNlY3Rvcl9ub25wcikqYXMuZmFjdG9yKGdlbmRlcikgKyBzZWN0b3JfZ292X2IqYXMuZmFjdG9yKGdlbmRlcikgKyBzZWN0b3Jfbm9ucHJfYiphcy5mYWN0b3IoZ2VuZGVyKSArIGJyZWFrX2pvYiphcy5mYWN0b3IoZ2VuZGVyKSArIGJyZWFrX2pvYl9iKmFzLmZhY3RvcihnZW5kZXIpICsgYWJyb2FkX3RpbWUqYXMuZmFjdG9yKGdlbmRlcikgKyBhYnJvYWRfdGltZV9iKmFzLmZhY3RvcihnZW5kZXIpICsgYXMuZmFjdG9yKG90aGVyam9iKSphcy5mYWN0b3IoZ2VuZGVyKSArIG90aGVyam9iX2IqYXMuZmFjdG9yKGdlbmRlcikgKyBhcy5mYWN0b3IodHJhbnNfbHQpKnQqYXMuZmFjdG9yKGdlbmRlcikgKyB0cmFuc19sdF9iKnQqYXMuZmFjdG9yKGdlbmRlcikgKyBwaGRfY29oKnQqYXMuZmFjdG9yKGdlbmRlcikgKyBwaGRfc2F0KnQqYXMuZmFjdG9yKGdlbmRlcikgKyBwYXJ0bmVyZWRfYip0KmFzLmZhY3RvcihnZW5kZXIpICsgc2VjdG9yX2dvdl9iKnQqYXMuZmFjdG9yKGdlbmRlcikgKyBzZWN0b3Jfbm9ucHJfYip0KmFzLmZhY3RvcihnZW5kZXIpICsgYnJlYWtfam9iX2IqdCphcy5mYWN0b3IoZ2VuZGVyKSArIGFicm9hZF90aW1lX2IqdCphcy5mYWN0b3IoZ2VuZGVyKSArIG90aGVyam9iX2IqdCphcy5mYWN0b3IoZ2VuZGVyKSArICgxICsgdCArIHQyIHwgUklOUEVSU09PTikgKyAoLTEgKyB0MyB8IFJJTlBFUlNPT04pLCBkYXRhPWRmX21tZmMpDQoNCiMgTTI6IEFkZGluZyBleHBsYW5hdG9yeSB2YXJpYWJsZXMgKGhvdXJzIHdvcmtlZCwgZGlzY2lwbGluZSwgcGFyZW50YWwgc3RhdHVzLCB0ZW1wb3JhcnkgY29udHJhY3QpDQpNMiA8LSBsbWVyKGxvZ19yZWFscGF5IH4gMSArIHQqYXMuZmFjdG9yKGdlbmRlcikgKyB0Miphcy5mYWN0b3IoZ2VuZGVyKSArIHQzKmFzLmZhY3RvcihnZW5kZXIpICsgYXMuZmFjdG9yKHRyYW5zX3N0KSphcy5mYWN0b3IoZ2VuZGVyKSArIGFzLmZhY3Rvcih0cmFuc19sdCkqYXMuZmFjdG9yKGdlbmRlcikgKyB0cmFuc19sdF9iKmFzLmZhY3RvcihnZW5kZXIpICsgYXMuZmFjdG9yKHBoZF9kaXNjaSkqYXMuZmFjdG9yKGdlbmRlcikgKyBhcy5mYWN0b3IoY2hpbGRfdTUpKmFzLmZhY3RvcihnZW5kZXIpICsgY2hpbGRfdTVfYiphcy5mYWN0b3IoZ2VuZGVyKSArIGxvZ19ocnMqYXMuZmFjdG9yKGdlbmRlcikgKyBsb2dfaHJzX2IqYXMuZmFjdG9yKGdlbmRlcikgKyBhcy5mYWN0b3IodGVtcG9yYXJ5X2VtcCkqYXMuZmFjdG9yKGdlbmRlcikgKyB0ZW1wb3JhcnlfZW1wX2IqYXMuZmFjdG9yKGdlbmRlcikgKyBwaGRfY29oKmFzLmZhY3RvcihnZW5kZXIpICsgcGhkX3NhdCphcy5mYWN0b3IoZ2VuZGVyKSArIGFzLmZhY3RvcihwYXJ0bmVyZWQpKmFzLmZhY3RvcihnZW5kZXIpICsgcGFydG5lcmVkX2IqYXMuZmFjdG9yKGdlbmRlcikgKyBhcy5mYWN0b3Ioc2VjdG9yX2dvdikqYXMuZmFjdG9yKGdlbmRlcikgKyBhcy5mYWN0b3Ioc2VjdG9yX25vbnByKSphcy5mYWN0b3IoZ2VuZGVyKSArIHNlY3Rvcl9nb3ZfYiphcy5mYWN0b3IoZ2VuZGVyKSArIHNlY3Rvcl9ub25wcl9iKmFzLmZhY3RvcihnZW5kZXIpICsgYnJlYWtfam9iKmFzLmZhY3RvcihnZW5kZXIpICsgYnJlYWtfam9iX2IqYXMuZmFjdG9yKGdlbmRlcikgKyBhYnJvYWRfdGltZSphcy5mYWN0b3IoZ2VuZGVyKSArIGFicm9hZF90aW1lX2IqYXMuZmFjdG9yKGdlbmRlcikgKyBhcy5mYWN0b3Iob3RoZXJqb2IpKmFzLmZhY3RvcihnZW5kZXIpICsgb3RoZXJqb2JfYiphcy5mYWN0b3IoZ2VuZGVyKSArIGFzLmZhY3Rvcih0cmFuc19sdCkqdCphcy5mYWN0b3IoZ2VuZGVyKSArIHRyYW5zX2x0X2IqdCphcy5mYWN0b3IoZ2VuZGVyKSArIHBoZF9jb2gqdCphcy5mYWN0b3IoZ2VuZGVyKSArIHBoZF9zYXQqdCphcy5mYWN0b3IoZ2VuZGVyKSArIHBhcnRuZXJlZF9iKnQqYXMuZmFjdG9yKGdlbmRlcikgKyBzZWN0b3JfZ292X2IqdCphcy5mYWN0b3IoZ2VuZGVyKSArIHNlY3Rvcl9ub25wcl9iKnQqYXMuZmFjdG9yKGdlbmRlcikgKyBicmVha19qb2JfYip0KmFzLmZhY3RvcihnZW5kZXIpICsgYWJyb2FkX3RpbWVfYip0KmFzLmZhY3RvcihnZW5kZXIpICsgb3RoZXJqb2JfYip0KmFzLmZhY3RvcihnZW5kZXIpICsgcGhkX2Rpc2NpKnQqYXMuZmFjdG9yKGdlbmRlcikgKyBjaGlsZF91NV9iKnQqYXMuZmFjdG9yKGdlbmRlcikgKyBsb2dfaHJzX2IqdCphcy5mYWN0b3IoZ2VuZGVyKSArIHRlbXBvcmFyeV9lbXBfYip0KmFzLmZhY3RvcihnZW5kZXIpICsgKDEgKyB0ICsgdDIgfCBSSU5QRVJTT09OKSArICgtMSArIHQzIHwgUklOUEVSU09PTiksIGRhdGE9ZGZfbW1mYykNCg0KYGBgDQoNCg0KDQoNCiMgQnkgZ2VuZGVyOiBwYXkNCg0KDQpDcmVhdGluZyBzZXBhcmF0ZSBkYXRhc2V0cyBmb3IgbWVuIGFuZCB3b21lbiwgZm9yIHRoZSBzZXBhcmF0ZWQgYW5hbHlzZXMNCg0KDQpgYGB7ciwgZXZhbD1GQUxTRX0NCg0KZGZfbWVuIDwtIGRmX21tZmMgJT4lIGZpbHRlcihnZW5kZXI9PSJtZW4iKQ0KZGZfd29tIDwtIGRmX21tZmMgJT4lIGZpbHRlcihnZW5kZXI9PSJ3b21lbiIpDQogDQpgYGANCg0KDQoNCiMjIE1FTg0KDQoNCmBgYHtyLCBldmFsPUZBTFNFfQ0KDQojIE51bGwgbW9kZWw6IHJhbmRvbSBpbnRlcmNlcHQNCk0wbSA8LSBsbWVyKGxvZ19yZWFscGF5IH4gMSArIHQgKyB0MiArIHQzICsgKDEgKyB0ICsgdDIgfCBSSU5QRVJTT09OKSArICgtMSArIHQzIHwgUklOUEVSU09PTiksIGRhdGE9ZGZfbWVuKQ0KDQojIENvbXB1dGUgSUNDDQppY2NfaXAgPC0gYXMuZGF0YS5mcmFtZShWYXJDb3JyKE0wbSkpWzRdDQppY2NfbSA8LSBpY2NfaXBbMSwxXSAvIHN1bShpY2NfaXApDQoNCiMgTTE6IFRyYW5zaXRpb24gZWZmZWN0IGFuZCBjb250cm9scw0KTTFtIDwtIGxtZXIobG9nX3JlYWxwYXkgfiAxICsgdCArIHQyICsgdDMgKyBhcy5mYWN0b3IodHJhbnNfc3QpICsgYXMuZmFjdG9yKHRyYW5zX2x0KSArIHRyYW5zX2x0X2IgKyBwaGRfY29oICsgcGhkX3NhdCArIGFzLmZhY3RvcihwYXJ0bmVyZWQpICsgcGFydG5lcmVkX2IgKyBhcy5mYWN0b3Ioc2VjdG9yX2dvdikgKyBhcy5mYWN0b3Ioc2VjdG9yX25vbnByKSArIHNlY3Rvcl9nb3ZfYiArIHNlY3Rvcl9ub25wcl9iICsgYnJlYWtfam9iICsgYnJlYWtfam9iX2IgKyBhYnJvYWRfdGltZSArIGFicm9hZF90aW1lX2IgKyBhcy5mYWN0b3Iob3RoZXJqb2IpICsgb3RoZXJqb2JfYiArIGFzLmZhY3Rvcih0cmFuc19sdCkqdCArIHRyYW5zX2x0X2IqdCArIHBoZF9jb2gqdCArIHBoZF9zYXQqdCArIHBhcnRuZXJlZF9iKnQgKyBzZWN0b3JfZ292X2IqdCArIHNlY3Rvcl9ub25wcl9iKnQgKyBicmVha19qb2JfYip0ICsgYWJyb2FkX3RpbWVfYip0ICsgb3RoZXJqb2JfYip0ICsgKDEgKyB0ICsgdDIgfCBSSU5QRVJTT09OKSArICgtMSArIHQzIHwgUklOUEVSU09PTiksIGRhdGE9ZGZfbWVuKQ0KDQojIE0yOiBBZGRpbmcgZXhwbGFuYXRvcnkgdmFyaWFibGVzIChob3VycyB3b3JrZWQsIGRpc2NpcGxpbmUsIHBhcmVudGFsIHN0YXR1cywgdGVtcG9yYXJ5IGNvbnRyYWN0KQ0KTTJtIDwtIGxtZXIobG9nX3JlYWxwYXkgfiAxICsgdCArIHQyICsgdDMgKyBhcy5mYWN0b3IodHJhbnNfc3QpICsgYXMuZmFjdG9yKHRyYW5zX2x0KSArIHRyYW5zX2x0X2IgKyBhcy5mYWN0b3IocGhkX2Rpc2NpKSArIGFzLmZhY3RvcihjaGlsZF91NSkgKyBjaGlsZF91NV9iICsgbG9nX2hycyArIGxvZ19ocnNfYiArIGFzLmZhY3Rvcih0ZW1wb3JhcnlfZW1wKSArIHRlbXBvcmFyeV9lbXBfYiArIHBoZF9jb2ggKyBwaGRfc2F0ICsgYXMuZmFjdG9yKHBhcnRuZXJlZCkgKyBwYXJ0bmVyZWRfYiArIGFzLmZhY3RvcihzZWN0b3JfZ292KSArIGFzLmZhY3RvcihzZWN0b3Jfbm9ucHIpICsgc2VjdG9yX2dvdl9iICsgc2VjdG9yX25vbnByX2IgKyBicmVha19qb2IgKyBicmVha19qb2JfYiArIGFicm9hZF90aW1lICsgYWJyb2FkX3RpbWVfYiArIGFzLmZhY3RvcihvdGhlcmpvYikgKyBvdGhlcmpvYl9iICsgYXMuZmFjdG9yKHRyYW5zX2x0KSp0ICsgdHJhbnNfbHRfYip0ICsgcGhkX2NvaCp0ICsgcGhkX3NhdCp0ICsgcGFydG5lcmVkX2IqdCArIHNlY3Rvcl9nb3ZfYip0ICsgc2VjdG9yX25vbnByX2IqdCArIGJyZWFrX2pvYl9iKnQgKyBhYnJvYWRfdGltZV9iKnQgKyBvdGhlcmpvYl9iKnQgKyBwaGRfZGlzY2kqdCArIGNoaWxkX3U1X2IqdCArIGxvZ19ocnNfYip0ICsgdGVtcG9yYXJ5X2VtcF9iKnQgKyAoMSArIHQgKyB0MiB8IFJJTlBFUlNPT04pICsgKC0xICsgdDMgfCBSSU5QRVJTT09OKSwgZGF0YT1kZl9tZW4pDQoNCmBgYA0KDQoNCg0KIyMgV09NRU4NCg0KDQpgYGB7ciwgZXZhbD1GQUxTRX0NCg0KIyBOdWxsIG1vZGVsOiByYW5kb20gaW50ZXJjZXB0DQpNMHcgPC0gbG1lcihsb2dfcmVhbHBheSB+IDEgKyB0ICsgdDIgKyB0MyArICgxICsgdCArIHQyIHwgUklOUEVSU09PTikgKyAoLTEgKyB0MyB8IFJJTlBFUlNPT04pLCBkYXRhPWRmX3dvbSkNCg0KIyBDb21wdXRlIElDQw0KaWNjX2lwIDwtIGFzLmRhdGEuZnJhbWUoVmFyQ29ycihNMHcpKVs0XQ0KaWNjX3cgPC0gaWNjX2lwWzEsMV0gLyBzdW0oaWNjX2lwKQ0KDQojIE0xOiBUcmFuc2l0aW9uIGVmZmVjdCBhbmQgY29udHJvbHMNCk0xdyA8LSBsbWVyKGxvZ19yZWFscGF5IH4gMSArIHQgKyB0MiArIHQzICsgYXMuZmFjdG9yKHRyYW5zX3N0KSArIGFzLmZhY3Rvcih0cmFuc19sdCkgKyB0cmFuc19sdF9iICsgcGhkX2NvaCArIHBoZF9zYXQgKyBhcy5mYWN0b3IocGFydG5lcmVkKSArIHBhcnRuZXJlZF9iICsgYXMuZmFjdG9yKHNlY3Rvcl9nb3YpICsgYXMuZmFjdG9yKHNlY3Rvcl9ub25wcikgKyBzZWN0b3JfZ292X2IgKyBzZWN0b3Jfbm9ucHJfYiArIGJyZWFrX2pvYiArIGJyZWFrX2pvYl9iICsgYWJyb2FkX3RpbWUgKyBhYnJvYWRfdGltZV9iICsgYXMuZmFjdG9yKG90aGVyam9iKSArIG90aGVyam9iX2IgKyBhcy5mYWN0b3IodHJhbnNfbHQpKnQgKyB0cmFuc19sdF9iKnQgKyBwaGRfY29oKnQgKyBwaGRfc2F0KnQgKyBwYXJ0bmVyZWRfYip0ICsgc2VjdG9yX2dvdl9iKnQgKyArIHNlY3Rvcl9ub25wcl9iKnQgKyBicmVha19qb2JfYip0ICsgYWJyb2FkX3RpbWVfYip0ICsgb3RoZXJqb2JfYip0ICsgKDEgKyB0ICsgdDIgfCBSSU5QRVJTT09OKSArICgtMSArIHQzIHwgUklOUEVSU09PTiksIGRhdGE9ZGZfd29tKQ0KDQojIE0yOiBBZGRpbmcgZXhwbGFuYXRvcnkgdmFyaWFibGVzIChob3VycyB3b3JrZWQsIGRpc2NpcGxpbmUsIHBhcmVudGFsIHN0YXR1cywgdGVtcG9yYXJ5IGNvbnRyYWN0KQ0KTTJ3IDwtIGxtZXIobG9nX3JlYWxwYXkgfiAxICsgdCArIHQyICsgdDMgKyBhcy5mYWN0b3IodHJhbnNfc3QpICsgYXMuZmFjdG9yKHRyYW5zX2x0KSArIHRyYW5zX2x0X2IgKyBhcy5mYWN0b3IocGhkX2Rpc2NpKSArIGFzLmZhY3RvcihjaGlsZF91NSkgKyBjaGlsZF91NV9iICsgbG9nX2hycyArIGxvZ19ocnNfYiArIGFzLmZhY3Rvcih0ZW1wb3JhcnlfZW1wKSArIHRlbXBvcmFyeV9lbXBfYiArIHBoZF9jb2ggKyBwaGRfc2F0ICsgYXMuZmFjdG9yKHBhcnRuZXJlZCkgKyBwYXJ0bmVyZWRfYiArIGFzLmZhY3RvcihzZWN0b3JfZ292KSArIGFzLmZhY3RvcihzZWN0b3Jfbm9ucHIpICsgc2VjdG9yX2dvdl9iICsgc2VjdG9yX25vbnByX2IgKyBicmVha19qb2IgKyBicmVha19qb2JfYiArIGFicm9hZF90aW1lICsgYWJyb2FkX3RpbWVfYiArIGFzLmZhY3RvcihvdGhlcmpvYikgKyBvdGhlcmpvYl9iICsgYXMuZmFjdG9yKHRyYW5zX2x0KSp0ICsgdHJhbnNfbHRfYip0ICsgcGhkX2NvaCp0ICsgcGhkX3NhdCp0ICsgcGFydG5lcmVkX2IqdCArIHNlY3Rvcl9nb3ZfYip0ICsgc2VjdG9yX25vbnByX2IqdCArIGJyZWFrX2pvYl9iKnQgKyBhYnJvYWRfdGltZV9iKnQgKyBvdGhlcmpvYl9iKnQgKyBwaGRfZGlzY2kqdCArIGNoaWxkX3U1X2IqdCArIGxvZ19ocnNfYip0ICsgdGVtcG9yYXJ5X2VtcF9iKnQgKyAoMSArIHQgKyB0MiB8IFJJTlBFUlNPT04pICsgKC0xICsgdDMgfCBSSU5QRVJTT09OKSwgZGF0YT1kZl93b20pDQoNCmBgYA0KDQoNCg0KDQojIEFkZGluZyBtZWNoYW5pc21zIHN0ZXAtYnktc3RlcA0KDQoNCiMjIERpc2NpcGxpbmUNCg0KDQpgYGB7ciwgZXZhbD1GQUxTRX0NCg0KTTJfZGlzY2kgPC0gbG1lcihsb2dfcmVhbHBheSB+IDEgKyB0KmFzLmZhY3RvcihnZW5kZXIpICsgdDIqYXMuZmFjdG9yKGdlbmRlcikgKyB0Myphcy5mYWN0b3IoZ2VuZGVyKSArIGFzLmZhY3Rvcih0cmFuc19zdCkqYXMuZmFjdG9yKGdlbmRlcikgKyBhcy5mYWN0b3IodHJhbnNfbHQpKmFzLmZhY3RvcihnZW5kZXIpICsgdHJhbnNfbHRfYiphcy5mYWN0b3IoZ2VuZGVyKSArIGFzLmZhY3RvcihwaGRfZGlzY2kpKmFzLmZhY3RvcihnZW5kZXIpICsgcGhkX2NvaCphcy5mYWN0b3IoZ2VuZGVyKSArIHBoZF9zYXQqYXMuZmFjdG9yKGdlbmRlcikgKyBhcy5mYWN0b3IocGFydG5lcmVkKSphcy5mYWN0b3IoZ2VuZGVyKSArIHBhcnRuZXJlZF9iKmFzLmZhY3RvcihnZW5kZXIpICsgYXMuZmFjdG9yKHNlY3Rvcl9nb3YpKmFzLmZhY3RvcihnZW5kZXIpICsgYXMuZmFjdG9yKHNlY3Rvcl9ub25wcikqYXMuZmFjdG9yKGdlbmRlcikgKyBzZWN0b3JfZ292X2IqYXMuZmFjdG9yKGdlbmRlcikgKyBzZWN0b3Jfbm9ucHJfYiphcy5mYWN0b3IoZ2VuZGVyKSArIGJyZWFrX2pvYiphcy5mYWN0b3IoZ2VuZGVyKSArIGJyZWFrX2pvYl9iKmFzLmZhY3RvcihnZW5kZXIpICsgYWJyb2FkX3RpbWUqYXMuZmFjdG9yKGdlbmRlcikgKyBhYnJvYWRfdGltZV9iKmFzLmZhY3RvcihnZW5kZXIpICsgYXMuZmFjdG9yKG90aGVyam9iKSphcy5mYWN0b3IoZ2VuZGVyKSArIG90aGVyam9iX2IqYXMuZmFjdG9yKGdlbmRlcikgKyBhcy5mYWN0b3IodHJhbnNfbHQpKnQqYXMuZmFjdG9yKGdlbmRlcikgKyB0cmFuc19sdF9iKnQqYXMuZmFjdG9yKGdlbmRlcikgKyBwaGRfY29oKnQqYXMuZmFjdG9yKGdlbmRlcikgKyBwaGRfc2F0KnQqYXMuZmFjdG9yKGdlbmRlcikgKyBwYXJ0bmVyZWRfYip0KmFzLmZhY3RvcihnZW5kZXIpICsgc2VjdG9yX2dvdl9iKnQqYXMuZmFjdG9yKGdlbmRlcikgKyBzZWN0b3Jfbm9ucHJfYip0KmFzLmZhY3RvcihnZW5kZXIpICsgYnJlYWtfam9iX2IqdCphcy5mYWN0b3IoZ2VuZGVyKSArIGFicm9hZF90aW1lX2IqdCphcy5mYWN0b3IoZ2VuZGVyKSArIG90aGVyam9iX2IqdCphcy5mYWN0b3IoZ2VuZGVyKSArIHBoZF9kaXNjaSp0KmFzLmZhY3RvcihnZW5kZXIpICsgKDEgKyB0ICsgdDIgfCBSSU5QRVJTT09OKSArICgtMSArIHQzIHwgUklOUEVSU09PTiksIGRhdGE9ZGZfbW1mYykNCg0KIyBtZW4NCk0ybV9kaXNjaSA8LSBsbWVyKGxvZ19yZWFscGF5IH4gMSArIHQgKyB0MiArIHQzICsgYXMuZmFjdG9yKHRyYW5zX3N0KSArIGFzLmZhY3Rvcih0cmFuc19sdCkgKyB0cmFuc19sdF9iICsgYXMuZmFjdG9yKHBoZF9kaXNjaSkgKyBwaGRfY29oICsgcGhkX3NhdCArIGFzLmZhY3RvcihwYXJ0bmVyZWQpICsgcGFydG5lcmVkX2IgKyBhcy5mYWN0b3Ioc2VjdG9yX2dvdikgKyBhcy5mYWN0b3Ioc2VjdG9yX25vbnByKSArIHNlY3Rvcl9nb3ZfYiArIHNlY3Rvcl9ub25wcl9iICsgYnJlYWtfam9iICsgYnJlYWtfam9iX2IgKyBhYnJvYWRfdGltZSArIGFicm9hZF90aW1lX2IgKyBhcy5mYWN0b3Iob3RoZXJqb2IpICsgb3RoZXJqb2JfYiArIGFzLmZhY3Rvcih0cmFuc19sdCkqdCArIHRyYW5zX2x0X2IqdCArIHBoZF9jb2gqdCArIHBoZF9zYXQqdCArIHBhcnRuZXJlZF9iKnQgKyBzZWN0b3JfZ292X2IqdCArIHNlY3Rvcl9ub25wcl9iKnQgKyBicmVha19qb2JfYip0ICsgYWJyb2FkX3RpbWVfYip0ICsgb3RoZXJqb2JfYip0ICsgcGhkX2Rpc2NpKnQgKyAoMSArIHQgKyB0MiB8IFJJTlBFUlNPT04pICsgKC0xICsgdDMgfCBSSU5QRVJTT09OKSwgZGF0YT1kZl9tZW4pDQoNCiMgd29tZW4NCk0yd19kaXNjaSA8LSBsbWVyKGxvZ19yZWFscGF5IH4gMSArIHQgKyB0MiArIHQzICsgYXMuZmFjdG9yKHRyYW5zX3N0KSArIGFzLmZhY3Rvcih0cmFuc19sdCkgKyB0cmFuc19sdF9iICsgYXMuZmFjdG9yKHBoZF9kaXNjaSkgKyBwaGRfY29oICsgcGhkX3NhdCArIGFzLmZhY3RvcihwYXJ0bmVyZWQpICsgcGFydG5lcmVkX2IgKyBhcy5mYWN0b3Ioc2VjdG9yX2dvdikgKyBhcy5mYWN0b3Ioc2VjdG9yX25vbnByKSArIHNlY3Rvcl9nb3ZfYiArIHNlY3Rvcl9ub25wcl9iICsgYnJlYWtfam9iICsgYnJlYWtfam9iX2IgKyBhYnJvYWRfdGltZSArIGFicm9hZF90aW1lX2IgKyBhcy5mYWN0b3Iob3RoZXJqb2IpICsgb3RoZXJqb2JfYiArIGFzLmZhY3Rvcih0cmFuc19sdCkqdCArIHRyYW5zX2x0X2IqdCArIHBoZF9jb2gqdCArIHBoZF9zYXQqdCArIHBhcnRuZXJlZF9iKnQgKyBzZWN0b3JfZ292X2IqdCArIHNlY3Rvcl9ub25wcl9iKnQgKyBicmVha19qb2JfYip0ICsgYWJyb2FkX3RpbWVfYip0ICsgb3RoZXJqb2JfYip0ICsgcGhkX2Rpc2NpKnQgKyAoMSArIHQgKyB0MiB8IFJJTlBFUlNPT04pICsgKC0xICsgdDMgfCBSSU5QRVJTT09OKSwgZGF0YT1kZl93b20pDQoNCg0KDQpgYGANCg0KDQoNCiMjIENoaWxkIDwgNQ0KDQoNCmBgYHtyLCBldmFsPUZBTFNFfQ0KDQpNMl9jaGlsZCA8LSBsbWVyKGxvZ19yZWFscGF5IH4gMSArIHQqYXMuZmFjdG9yKGdlbmRlcikgKyB0Miphcy5mYWN0b3IoZ2VuZGVyKSArIHQzKmFzLmZhY3RvcihnZW5kZXIpICsgYXMuZmFjdG9yKHRyYW5zX3N0KSphcy5mYWN0b3IoZ2VuZGVyKSArIGFzLmZhY3Rvcih0cmFuc19sdCkqYXMuZmFjdG9yKGdlbmRlcikgKyB0cmFuc19sdF9iKmFzLmZhY3RvcihnZW5kZXIpICsgYXMuZmFjdG9yKHBoZF9kaXNjaSkqYXMuZmFjdG9yKGdlbmRlcikgKyBhcy5mYWN0b3IoY2hpbGRfdTUpKmFzLmZhY3RvcihnZW5kZXIpICsgY2hpbGRfdTVfYiphcy5mYWN0b3IoZ2VuZGVyKSArIHBoZF9jb2gqYXMuZmFjdG9yKGdlbmRlcikgKyBwaGRfc2F0KmFzLmZhY3RvcihnZW5kZXIpICsgYXMuZmFjdG9yKHBhcnRuZXJlZCkqYXMuZmFjdG9yKGdlbmRlcikgKyBwYXJ0bmVyZWRfYiphcy5mYWN0b3IoZ2VuZGVyKSArIGFzLmZhY3RvcihzZWN0b3JfZ292KSphcy5mYWN0b3IoZ2VuZGVyKSArIGFzLmZhY3RvcihzZWN0b3Jfbm9ucHIpKmFzLmZhY3RvcihnZW5kZXIpICsgc2VjdG9yX2dvdl9iKmFzLmZhY3RvcihnZW5kZXIpICsgc2VjdG9yX25vbnByX2IqYXMuZmFjdG9yKGdlbmRlcikgKyBicmVha19qb2IqYXMuZmFjdG9yKGdlbmRlcikgKyBicmVha19qb2JfYiphcy5mYWN0b3IoZ2VuZGVyKSArIGFicm9hZF90aW1lKmFzLmZhY3RvcihnZW5kZXIpICsgYWJyb2FkX3RpbWVfYiphcy5mYWN0b3IoZ2VuZGVyKSArIGFzLmZhY3RvcihvdGhlcmpvYikqYXMuZmFjdG9yKGdlbmRlcikgKyBvdGhlcmpvYl9iKmFzLmZhY3RvcihnZW5kZXIpICsgYXMuZmFjdG9yKHRyYW5zX2x0KSp0KmFzLmZhY3RvcihnZW5kZXIpICsgdHJhbnNfbHRfYip0KmFzLmZhY3RvcihnZW5kZXIpICsgcGhkX2NvaCp0KmFzLmZhY3RvcihnZW5kZXIpICsgcGhkX3NhdCp0KmFzLmZhY3RvcihnZW5kZXIpICsgcGFydG5lcmVkX2IqdCphcy5mYWN0b3IoZ2VuZGVyKSArIHNlY3Rvcl9nb3ZfYip0KmFzLmZhY3RvcihnZW5kZXIpICsgc2VjdG9yX25vbnByX2IqdCphcy5mYWN0b3IoZ2VuZGVyKSArIGJyZWFrX2pvYl9iKnQqYXMuZmFjdG9yKGdlbmRlcikgKyBhYnJvYWRfdGltZV9iKnQqYXMuZmFjdG9yKGdlbmRlcikgKyBvdGhlcmpvYl9iKnQqYXMuZmFjdG9yKGdlbmRlcikgKyBwaGRfZGlzY2kqdCphcy5mYWN0b3IoZ2VuZGVyKSArIGNoaWxkX3U1X2IqdCphcy5mYWN0b3IoZ2VuZGVyKSArICgxICsgdCArIHQyIHwgUklOUEVSU09PTikgKyAoLTEgKyB0MyB8IFJJTlBFUlNPT04pLCBkYXRhPWRmX21tZmMpDQoNCiMgbWVuDQpNMm1fY2hpbGQgPC0gbG1lcihsb2dfcmVhbHBheSB+IDEgKyB0ICsgdDIgKyB0MyArIGFzLmZhY3Rvcih0cmFuc19zdCkgKyBhcy5mYWN0b3IodHJhbnNfbHQpICsgdHJhbnNfbHRfYiArIGFzLmZhY3RvcihwaGRfZGlzY2kpICsgYXMuZmFjdG9yKGNoaWxkX3U1KSArIGNoaWxkX3U1X2IgKyBwaGRfY29oICsgcGhkX3NhdCArIGFzLmZhY3RvcihwYXJ0bmVyZWQpICsgcGFydG5lcmVkX2IgKyBhcy5mYWN0b3Ioc2VjdG9yX2dvdikgKyBhcy5mYWN0b3Ioc2VjdG9yX25vbnByKSArIHNlY3Rvcl9nb3ZfYiArIHNlY3Rvcl9ub25wcl9iICsgYnJlYWtfam9iICsgYnJlYWtfam9iX2IgKyBhYnJvYWRfdGltZSArIGFicm9hZF90aW1lX2IgKyBhcy5mYWN0b3Iob3RoZXJqb2IpICsgb3RoZXJqb2JfYiArIGFzLmZhY3Rvcih0cmFuc19sdCkqdCArIHRyYW5zX2x0X2IqdCArIHBoZF9jb2gqdCArIHBoZF9zYXQqdCArIHBhcnRuZXJlZF9iKnQgKyBzZWN0b3JfZ292X2IqdCArIHNlY3Rvcl9ub25wcl9iKnQgKyBicmVha19qb2JfYip0ICsgYWJyb2FkX3RpbWVfYip0ICsgb3RoZXJqb2JfYip0ICsgcGhkX2Rpc2NpKnQgKyBjaGlsZF91NV9iKnQgKyAoMSArIHQgKyB0MiB8IFJJTlBFUlNPT04pICsgKC0xICsgdDMgfCBSSU5QRVJTT09OKSwgZGF0YT1kZl9tZW4pDQoNCiMgd29tZW4NCk0yd19jaGlsZCA8LSBsbWVyKGxvZ19yZWFscGF5IH4gMSArIHQgKyB0MiArIHQzICsgYXMuZmFjdG9yKHRyYW5zX3N0KSArIGFzLmZhY3Rvcih0cmFuc19sdCkgKyB0cmFuc19sdF9iICsgYXMuZmFjdG9yKHBoZF9kaXNjaSkgKyBhcy5mYWN0b3IoY2hpbGRfdTUpICsgY2hpbGRfdTVfYiArIHBoZF9jb2ggKyBwaGRfc2F0ICsgYXMuZmFjdG9yKHBhcnRuZXJlZCkgKyBwYXJ0bmVyZWRfYiArIGFzLmZhY3RvcihzZWN0b3JfZ292KSArIGFzLmZhY3RvcihzZWN0b3Jfbm9ucHIpICsgc2VjdG9yX2dvdl9iICsgc2VjdG9yX25vbnByX2IgKyBicmVha19qb2IgKyBicmVha19qb2JfYiArIGFicm9hZF90aW1lICsgYWJyb2FkX3RpbWVfYiArIGFzLmZhY3RvcihvdGhlcmpvYikgKyBvdGhlcmpvYl9iICsgYXMuZmFjdG9yKHRyYW5zX2x0KSp0ICsgdHJhbnNfbHRfYip0ICsgcGhkX2NvaCp0ICsgcGhkX3NhdCp0ICsgcGFydG5lcmVkX2IqdCArIHNlY3Rvcl9nb3ZfYip0ICsgc2VjdG9yX25vbnByX2IqdCArIGJyZWFrX2pvYl9iKnQgKyBhYnJvYWRfdGltZV9iKnQgKyBvdGhlcmpvYl9iKnQgKyBwaGRfZGlzY2kqdCArIGNoaWxkX3U1X2IqdCArICgxICsgdCArIHQyIHwgUklOUEVSU09PTikgKyAoLTEgKyB0MyB8IFJJTlBFUlNPT04pLCBkYXRhPWRmX3dvbSkNCg0KYGBgDQoNCg0KDQojIyBIb3Vycw0KDQoNCmBgYHtyLCBldmFsPUZBTFNFfQ0KDQpNMl9ocnMgPC0gbG1lcihsb2dfcmVhbHBheSB+IDEgKyB0KmFzLmZhY3RvcihnZW5kZXIpICsgdDIqYXMuZmFjdG9yKGdlbmRlcikgKyB0Myphcy5mYWN0b3IoZ2VuZGVyKSArIGFzLmZhY3Rvcih0cmFuc19zdCkqYXMuZmFjdG9yKGdlbmRlcikgKyBhcy5mYWN0b3IodHJhbnNfbHQpKmFzLmZhY3RvcihnZW5kZXIpICsgdHJhbnNfbHRfYiphcy5mYWN0b3IoZ2VuZGVyKSArIGFzLmZhY3RvcihwaGRfZGlzY2kpKmFzLmZhY3RvcihnZW5kZXIpICsgYXMuZmFjdG9yKGNoaWxkX3U1KSphcy5mYWN0b3IoZ2VuZGVyKSArIGNoaWxkX3U1X2IqYXMuZmFjdG9yKGdlbmRlcikgKyBsb2dfaHJzKmFzLmZhY3RvcihnZW5kZXIpICsgbG9nX2hyc19iKmFzLmZhY3RvcihnZW5kZXIpICsgcGhkX2NvaCphcy5mYWN0b3IoZ2VuZGVyKSArIHBoZF9zYXQqYXMuZmFjdG9yKGdlbmRlcikgKyBhcy5mYWN0b3IocGFydG5lcmVkKSphcy5mYWN0b3IoZ2VuZGVyKSArIHBhcnRuZXJlZF9iKmFzLmZhY3RvcihnZW5kZXIpICsgYXMuZmFjdG9yKHNlY3Rvcl9nb3YpKmFzLmZhY3RvcihnZW5kZXIpICsgYXMuZmFjdG9yKHNlY3Rvcl9ub25wcikqYXMuZmFjdG9yKGdlbmRlcikgKyBzZWN0b3JfZ292X2IqYXMuZmFjdG9yKGdlbmRlcikgKyBzZWN0b3Jfbm9ucHJfYiphcy5mYWN0b3IoZ2VuZGVyKSArIGJyZWFrX2pvYiphcy5mYWN0b3IoZ2VuZGVyKSArIGJyZWFrX2pvYl9iKmFzLmZhY3RvcihnZW5kZXIpICsgYWJyb2FkX3RpbWUqYXMuZmFjdG9yKGdlbmRlcikgKyBhYnJvYWRfdGltZV9iKmFzLmZhY3RvcihnZW5kZXIpICsgYXMuZmFjdG9yKG90aGVyam9iKSphcy5mYWN0b3IoZ2VuZGVyKSArIG90aGVyam9iX2IqYXMuZmFjdG9yKGdlbmRlcikgKyBhcy5mYWN0b3IodHJhbnNfbHQpKnQqYXMuZmFjdG9yKGdlbmRlcikgKyB0cmFuc19sdF9iKnQqYXMuZmFjdG9yKGdlbmRlcikgKyBwaGRfY29oKnQqYXMuZmFjdG9yKGdlbmRlcikgKyBwaGRfc2F0KnQqYXMuZmFjdG9yKGdlbmRlcikgKyBwYXJ0bmVyZWRfYip0KmFzLmZhY3RvcihnZW5kZXIpICsgc2VjdG9yX2dvdl9iKnQqYXMuZmFjdG9yKGdlbmRlcikgKyBzZWN0b3Jfbm9ucHJfYip0KmFzLmZhY3RvcihnZW5kZXIpICsgYnJlYWtfam9iX2IqdCphcy5mYWN0b3IoZ2VuZGVyKSArIGFicm9hZF90aW1lX2IqdCphcy5mYWN0b3IoZ2VuZGVyKSArIG90aGVyam9iX2IqdCphcy5mYWN0b3IoZ2VuZGVyKSArIHBoZF9kaXNjaSp0KmFzLmZhY3RvcihnZW5kZXIpICsgY2hpbGRfdTVfYip0KmFzLmZhY3RvcihnZW5kZXIpICsgbG9nX2hyc19iKnQqYXMuZmFjdG9yKGdlbmRlcikgKyAoMSArIHQgKyB0MiB8IFJJTlBFUlNPT04pICsgKC0xICsgdDMgfCBSSU5QRVJTT09OKSwgZGF0YT1kZl9tbWZjKQ0KDQojIG1lbg0KTTJtX2hycyA8LSBsbWVyKGxvZ19yZWFscGF5IH4gMSArIHQgKyB0MiArIHQzICsgYXMuZmFjdG9yKHRyYW5zX3N0KSArIGFzLmZhY3Rvcih0cmFuc19sdCkgKyB0cmFuc19sdF9iICsgYXMuZmFjdG9yKHBoZF9kaXNjaSkgKyBhcy5mYWN0b3IoY2hpbGRfdTUpICsgY2hpbGRfdTVfYiArIGxvZ19ocnMgKyBsb2dfaHJzX2IgKyBwaGRfY29oICsgcGhkX3NhdCArIGFzLmZhY3RvcihwYXJ0bmVyZWQpICsgcGFydG5lcmVkX2IgKyBhcy5mYWN0b3Ioc2VjdG9yX2dvdikgKyBhcy5mYWN0b3Ioc2VjdG9yX25vbnByKSArIHNlY3Rvcl9nb3ZfYiArIHNlY3Rvcl9ub25wcl9iICsgYnJlYWtfam9iICsgYnJlYWtfam9iX2IgKyBhYnJvYWRfdGltZSArIGFicm9hZF90aW1lX2IgKyBhcy5mYWN0b3Iob3RoZXJqb2IpICsgb3RoZXJqb2JfYiArIGFzLmZhY3Rvcih0cmFuc19sdCkqdCArIHRyYW5zX2x0X2IqdCArIHBoZF9jb2gqdCArIHBoZF9zYXQqdCArIHBhcnRuZXJlZF9iKnQgKyBzZWN0b3JfZ292X2IqdCArIHNlY3Rvcl9ub25wcl9iKnQgKyBicmVha19qb2JfYip0ICsgYWJyb2FkX3RpbWVfYip0ICsgb3RoZXJqb2JfYip0ICsgcGhkX2Rpc2NpKnQgKyBjaGlsZF91NV9iKnQgKyBsb2dfaHJzX2IqdCArICgxICsgdCArIHQyIHwgUklOUEVSU09PTikgKyAoLTEgKyB0MyB8IFJJTlBFUlNPT04pLCBkYXRhPWRmX21lbikNCg0KIyB3b21lbg0KTTJ3X2hycyA8LSBsbWVyKGxvZ19yZWFscGF5IH4gMSArIHQgKyB0MiArIHQzICsgYXMuZmFjdG9yKHRyYW5zX3N0KSArIGFzLmZhY3Rvcih0cmFuc19sdCkgKyB0cmFuc19sdF9iICsgYXMuZmFjdG9yKHBoZF9kaXNjaSkgKyBhcy5mYWN0b3IoY2hpbGRfdTUpICsgY2hpbGRfdTVfYiArIGxvZ19ocnMgKyBsb2dfaHJzX2IgKyBwaGRfY29oICsgcGhkX3NhdCArIGFzLmZhY3RvcihwYXJ0bmVyZWQpICsgcGFydG5lcmVkX2IgKyBhcy5mYWN0b3Ioc2VjdG9yX2dvdikgKyBhcy5mYWN0b3Ioc2VjdG9yX25vbnByKSArIHNlY3Rvcl9nb3ZfYiArIHNlY3Rvcl9ub25wcl9iICsgYnJlYWtfam9iICsgYnJlYWtfam9iX2IgKyBhYnJvYWRfdGltZSArIGFicm9hZF90aW1lX2IgKyBhcy5mYWN0b3Iob3RoZXJqb2IpICsgb3RoZXJqb2JfYiArIGFzLmZhY3Rvcih0cmFuc19sdCkqdCArIHRyYW5zX2x0X2IqdCArIHBoZF9jb2gqdCArIHBoZF9zYXQqdCArIHBhcnRuZXJlZF9iKnQgKyBzZWN0b3JfZ292X2IqdCArIHNlY3Rvcl9ub25wcl9iKnQgKyBicmVha19qb2JfYip0ICsgYWJyb2FkX3RpbWVfYip0ICsgb3RoZXJqb2JfYip0ICsgcGhkX2Rpc2NpKnQgKyBjaGlsZF91NV9iKnQgKyBsb2dfaHJzX2IqdCArICgxICsgdCArIHQyIHwgUklOUEVSU09PTikgKyAoLTEgKyB0MyB8IFJJTlBFUlNPT04pLCBkYXRhPWRmX3dvbSkNCg0KYGBgDQoNCg0KDQoNCiMjIFRlbXBvcmFyeSBlbXBsb3ltZW50DQoNCg0KKFRoZXNlIGFyZSB0aGUgb3JpZ2luYWwgbW9kZWxzKQ0KDQoNCg0KDQojIFJvYnVzdG5lc3MgY2hlY2tzDQoNCg0KIyMgTWF4IDUgeWVhcnMgcG9zdC1QaEQNCg0KDQpgYGB7ciwgZXZhbD1GQUxTRX0NCg0KZGZfbW1mYyAlPiUNCiAgZmlsdGVyKHQ8NikgLT4gZGZfbW1mY19yNQ0KDQoNCmRmX21lbl9yNSA8LSBkZl9tbWZjX3I1ICU+JSBmaWx0ZXIoZ2VuZGVyPT0ibWVuIikNCmRmX3dvbV9yNSA8LSBkZl9tbWZjX3I1ICU+JSBmaWx0ZXIoZ2VuZGVyPT0id29tZW4iKQ0KDQoNCmBgYA0KDQoNCk1lbiANCg0KDQpgYGB7ciwgZXZhbD1GQUxTRX0NCg0KIyBNQVggNSBZRUFSUyBQT1NULVBIRA0KIyBNMA0KUjVfTTBtIDwtIGxtZXIobG9nX3JlYWxwYXkgfiAxICsgdCArIHQyICsgdDMgKyAoMSArIHQgKyB0MiB8IFJJTlBFUlNPT04pICsgKC0xICsgdDMgfCBSSU5QRVJTT09OKSwgZGF0YT1kZl9tZW5fcjUpDQoNCiMgTTENClI1X00xbSA8LSBsbWVyKGxvZ19yZWFscGF5IH4gMSArIHQgKyB0MiArIHQzICsgYXMuZmFjdG9yKHRyYW5zX3N0KSArIGFzLmZhY3Rvcih0cmFuc19sdCkgKyB0cmFuc19sdF9iICsgcGhkX2NvaCArIHBoZF9zYXQgKyBhcy5mYWN0b3IocGFydG5lcmVkKSArIHBhcnRuZXJlZF9iICsgYXMuZmFjdG9yKHNlY3Rvcl9nb3YpICsgYXMuZmFjdG9yKHNlY3Rvcl9ub25wcikgKyBzZWN0b3JfZ292X2IgKyBzZWN0b3Jfbm9ucHJfYiArIGJyZWFrX2pvYiArIGJyZWFrX2pvYl9iICsgYWJyb2FkX3RpbWUgKyBhYnJvYWRfdGltZV9iICsgYXMuZmFjdG9yKG90aGVyam9iKSArIG90aGVyam9iX2IgKyBhcy5mYWN0b3IodHJhbnNfbHQpKnQgKyB0cmFuc19sdF9iKnQgKyBwaGRfY29oKnQgKyBwaGRfc2F0KnQgKyBwYXJ0bmVyZWRfYip0ICsgc2VjdG9yX2dvdl9iKnQgKyBzZWN0b3Jfbm9ucHJfYip0ICsgYnJlYWtfam9iX2IqdCArIGFicm9hZF90aW1lX2IqdCArIG90aGVyam9iX2IqdCArICgxICsgdCArIHQyIHwgUklOUEVSU09PTikgKyAoLTEgKyB0MyB8IFJJTlBFUlNPT04pLCBkYXRhPWRmX21lbl9yNSkNCg0KIyBNMg0KUjVfTTJtIDwtIGxtZXIobG9nX3JlYWxwYXkgfiAxICsgdCArIHQyICsgdDMgKyBhcy5mYWN0b3IodHJhbnNfc3QpICsgYXMuZmFjdG9yKHRyYW5zX2x0KSArIHRyYW5zX2x0X2IgKyBhcy5mYWN0b3IocGhkX2Rpc2NpKSArIGFzLmZhY3RvcihjaGlsZF91NSkgKyBjaGlsZF91NV9iICsgbG9nX2hycyArIGxvZ19ocnNfYiArIGFzLmZhY3Rvcih0ZW1wb3JhcnlfZW1wKSArIHRlbXBvcmFyeV9lbXBfYiArIHBoZF9jb2ggKyBwaGRfc2F0ICsgYXMuZmFjdG9yKHBhcnRuZXJlZCkgKyBwYXJ0bmVyZWRfYiArIGFzLmZhY3RvcihzZWN0b3JfZ292KSArIGFzLmZhY3RvcihzZWN0b3Jfbm9ucHIpICsgc2VjdG9yX2dvdl9iICsgc2VjdG9yX25vbnByX2IgKyBicmVha19qb2IgKyBicmVha19qb2JfYiArIGFicm9hZF90aW1lICsgYWJyb2FkX3RpbWVfYiArIGFzLmZhY3RvcihvdGhlcmpvYikgKyBvdGhlcmpvYl9iICsgYXMuZmFjdG9yKHRyYW5zX2x0KSp0ICsgdHJhbnNfbHRfYip0ICsgcGhkX2NvaCp0ICsgcGhkX3NhdCp0ICsgcGFydG5lcmVkX2IqdCArIHNlY3Rvcl9nb3ZfYip0ICsgc2VjdG9yX25vbnByX2IqdCArIGJyZWFrX2pvYl9iKnQgKyBhYnJvYWRfdGltZV9iKnQgKyBvdGhlcmpvYl9iKnQgKyBwaGRfZGlzY2kqdCArIGNoaWxkX3U1X2IqdCArIGxvZ19ocnNfYip0ICsgdGVtcG9yYXJ5X2VtcF9iKnQgKyAoMSArIHQgKyB0MiB8IFJJTlBFUlNPT04pICsgKC0xICsgdDMgfCBSSU5QRVJTT09OKSwgZGF0YT1kZl9tZW5fcjUpDQoNCg0KYGBgDQoNCg0KDQpXb21lbiANCg0KDQpgYGB7ciwgZXZhbD1GQUxTRX0NCg0KIyBNQVggNSBZRUFSUyBQT1NULVBIRA0KIyBNMA0KUjVfTTB3IDwtIGxtZXIobG9nX3JlYWxwYXkgfiAxICsgdCArIHQyICsgdDMgKyAoMSArIHQgKyB0MiB8IFJJTlBFUlNPT04pICsgKC0xICsgdDMgfCBSSU5QRVJTT09OKSwgZGF0YT1kZl93b21fcjUpDQoNCiMgTTENClI1X00xdyA8LSBsbWVyKGxvZ19yZWFscGF5IH4gMSArIHQgKyB0MiArIHQzICsgYXMuZmFjdG9yKHRyYW5zX3N0KSArIGFzLmZhY3Rvcih0cmFuc19sdCkgKyB0cmFuc19sdF9iICsgcGhkX2NvaCArIHBoZF9zYXQgKyBhcy5mYWN0b3IocGFydG5lcmVkKSArIHBhcnRuZXJlZF9iICsgYXMuZmFjdG9yKHNlY3Rvcl9nb3YpICsgYXMuZmFjdG9yKHNlY3Rvcl9ub25wcikgKyBzZWN0b3JfZ292X2IgKyBzZWN0b3Jfbm9ucHJfYiArIGJyZWFrX2pvYiArIGJyZWFrX2pvYl9iICsgYWJyb2FkX3RpbWUgKyBhYnJvYWRfdGltZV9iICsgYXMuZmFjdG9yKG90aGVyam9iKSArIG90aGVyam9iX2IgKyBhcy5mYWN0b3IodHJhbnNfbHQpKnQgKyB0cmFuc19sdF9iKnQgKyBwaGRfY29oKnQgKyBwaGRfc2F0KnQgKyBwYXJ0bmVyZWRfYip0ICsgc2VjdG9yX2dvdl9iKnQgKyBzZWN0b3Jfbm9ucHJfYip0ICsgYnJlYWtfam9iX2IqdCArIGFicm9hZF90aW1lX2IqdCArIG90aGVyam9iX2IqdCArICgxICsgdCArIHQyIHwgUklOUEVSU09PTikgKyAoLTEgKyB0MyB8IFJJTlBFUlNPT04pLCBkYXRhPWRmX3dvbV9yNSkNCg0KIyBNMg0KUjVfTTJ3IDwtIGxtZXIobG9nX3JlYWxwYXkgfiAxICsgdCArIHQyICsgdDMgKyBhcy5mYWN0b3IodHJhbnNfc3QpICsgYXMuZmFjdG9yKHRyYW5zX2x0KSArIHRyYW5zX2x0X2IgKyBhcy5mYWN0b3IocGhkX2Rpc2NpKSArIGFzLmZhY3RvcihjaGlsZF91NSkgKyBjaGlsZF91NV9iICsgbG9nX2hycyArIGxvZ19ocnNfYiArIGFzLmZhY3Rvcih0ZW1wb3JhcnlfZW1wKSArIHRlbXBvcmFyeV9lbXBfYiArIHBoZF9jb2ggKyBwaGRfc2F0ICsgYXMuZmFjdG9yKHBhcnRuZXJlZCkgKyBwYXJ0bmVyZWRfYiArIGFzLmZhY3RvcihzZWN0b3JfZ292KSArIGFzLmZhY3RvcihzZWN0b3Jfbm9ucHIpICsgc2VjdG9yX2dvdl9iICsgc2VjdG9yX25vbnByX2IgKyBicmVha19qb2IgKyBicmVha19qb2JfYiArIGFicm9hZF90aW1lICsgYWJyb2FkX3RpbWVfYiArIGFzLmZhY3RvcihvdGhlcmpvYikgKyBvdGhlcmpvYl9iICsgYXMuZmFjdG9yKHRyYW5zX2x0KSp0ICsgdHJhbnNfbHRfYip0ICsgcGhkX2NvaCp0ICsgcGhkX3NhdCp0ICsgcGFydG5lcmVkX2IqdCArIHNlY3Rvcl9nb3ZfYip0ICsgc2VjdG9yX25vbnByX2IqdCArIGJyZWFrX2pvYl9iKnQgKyBhYnJvYWRfdGltZV9iKnQgKyBvdGhlcmpvYl9iKnQgKyBwaGRfZGlzY2kqdCArIGNoaWxkX3U1X2IqdCArIGxvZ19ocnNfYip0ICsgdGVtcG9yYXJ5X2VtcF9iKnQgKyAoMSArIHQgKyB0MiB8IFJJTlBFUlNPT04pICsgKC0xICsgdDMgfCBSSU5QRVJTT09OKSwgZGF0YT1kZl93b21fcjUpDQoNCmBgYA0KDQoNCg0KT3ZlcmFsbCByZXN1bHRzDQoNCg0KYGBge3IsIGV2YWw9RkFMU0V9DQoNCiMgTUFYIDUgWUVBUlMgUE9TVC1QSEQNCiMgTTANClI1X00wIDwtIGxtZXIobG9nX3JlYWxwYXkgfiAxICsgdCphcy5mYWN0b3IoZ2VuZGVyKSArIHQyKmFzLmZhY3RvcihnZW5kZXIpICsgdDMqYXMuZmFjdG9yKGdlbmRlcikgKyAoMSArIHQgKyB0MiB8IFJJTlBFUlNPT04pICsgKC0xICsgdDMgfCBSSU5QRVJTT09OKSwgZGF0YT1kZl9tbWZjX3I1KQ0KDQojIE0xDQpSNV9NMSA8LSBsbWVyKGxvZ19yZWFscGF5IH4gMSArIHQqYXMuZmFjdG9yKGdlbmRlcikgKyB0Miphcy5mYWN0b3IoZ2VuZGVyKSArIHQzKmFzLmZhY3RvcihnZW5kZXIpICsgYXMuZmFjdG9yKHRyYW5zX3N0KSphcy5mYWN0b3IoZ2VuZGVyKSArIGFzLmZhY3Rvcih0cmFuc19sdCkqYXMuZmFjdG9yKGdlbmRlcikgKyB0cmFuc19sdF9iKmFzLmZhY3RvcihnZW5kZXIpICsgcGhkX2NvaCphcy5mYWN0b3IoZ2VuZGVyKSArIHBoZF9zYXQqYXMuZmFjdG9yKGdlbmRlcikgKyBhcy5mYWN0b3IocGFydG5lcmVkKSphcy5mYWN0b3IoZ2VuZGVyKSArIHBhcnRuZXJlZF9iKmFzLmZhY3RvcihnZW5kZXIpICsgYXMuZmFjdG9yKHNlY3Rvcl9nb3YpKmFzLmZhY3RvcihnZW5kZXIpICsgYXMuZmFjdG9yKHNlY3Rvcl9ub25wcikqYXMuZmFjdG9yKGdlbmRlcikgKyBzZWN0b3JfZ292X2IqYXMuZmFjdG9yKGdlbmRlcikgKyBzZWN0b3Jfbm9ucHJfYiphcy5mYWN0b3IoZ2VuZGVyKSArIGJyZWFrX2pvYiphcy5mYWN0b3IoZ2VuZGVyKSArIGJyZWFrX2pvYl9iKmFzLmZhY3RvcihnZW5kZXIpICsgYWJyb2FkX3RpbWUqYXMuZmFjdG9yKGdlbmRlcikgKyBhYnJvYWRfdGltZV9iKmFzLmZhY3RvcihnZW5kZXIpICsgYXMuZmFjdG9yKG90aGVyam9iKSphcy5mYWN0b3IoZ2VuZGVyKSArIG90aGVyam9iX2IqYXMuZmFjdG9yKGdlbmRlcikgKyBhcy5mYWN0b3IodHJhbnNfbHQpKnQqYXMuZmFjdG9yKGdlbmRlcikgKyB0cmFuc19sdF9iKnQqYXMuZmFjdG9yKGdlbmRlcikgKyBwaGRfY29oKnQqYXMuZmFjdG9yKGdlbmRlcikgKyBwaGRfc2F0KnQqYXMuZmFjdG9yKGdlbmRlcikgKyBwYXJ0bmVyZWRfYip0KmFzLmZhY3RvcihnZW5kZXIpICsgc2VjdG9yX2dvdl9iKnQqYXMuZmFjdG9yKGdlbmRlcikgKyBzZWN0b3Jfbm9ucHJfYip0KmFzLmZhY3RvcihnZW5kZXIpICsgYnJlYWtfam9iX2IqdCphcy5mYWN0b3IoZ2VuZGVyKSArIGFicm9hZF90aW1lX2IqdCphcy5mYWN0b3IoZ2VuZGVyKSArIG90aGVyam9iX2IqdCphcy5mYWN0b3IoZ2VuZGVyKSArICgxICsgdCArIHQyIHwgUklOUEVSU09PTikgKyAoLTEgKyB0MyB8IFJJTlBFUlNPT04pLCBkYXRhPWRmX21tZmNfcjUpDQoNCiMgTTINClI1X00yIDwtIGxtZXIobG9nX3JlYWxwYXkgfiAxICsgdCphcy5mYWN0b3IoZ2VuZGVyKSArIHQyKmFzLmZhY3RvcihnZW5kZXIpICsgdDMqYXMuZmFjdG9yKGdlbmRlcikgKyBhcy5mYWN0b3IodHJhbnNfc3QpKmFzLmZhY3RvcihnZW5kZXIpICsgYXMuZmFjdG9yKHRyYW5zX2x0KSphcy5mYWN0b3IoZ2VuZGVyKSArIHRyYW5zX2x0X2IqYXMuZmFjdG9yKGdlbmRlcikgKyBhcy5mYWN0b3IocGhkX2Rpc2NpKSphcy5mYWN0b3IoZ2VuZGVyKSArIGFzLmZhY3RvcihjaGlsZF91NSkqYXMuZmFjdG9yKGdlbmRlcikgKyBjaGlsZF91NV9iKmFzLmZhY3RvcihnZW5kZXIpICsgbG9nX2hycyphcy5mYWN0b3IoZ2VuZGVyKSArIGxvZ19ocnNfYiphcy5mYWN0b3IoZ2VuZGVyKSArIGFzLmZhY3Rvcih0ZW1wb3JhcnlfZW1wKSphcy5mYWN0b3IoZ2VuZGVyKSArIHRlbXBvcmFyeV9lbXBfYiphcy5mYWN0b3IoZ2VuZGVyKSArIHBoZF9jb2gqYXMuZmFjdG9yKGdlbmRlcikgKyBwaGRfc2F0KmFzLmZhY3RvcihnZW5kZXIpICsgYXMuZmFjdG9yKHBhcnRuZXJlZCkqYXMuZmFjdG9yKGdlbmRlcikgKyBwYXJ0bmVyZWRfYiphcy5mYWN0b3IoZ2VuZGVyKSArIGFzLmZhY3RvcihzZWN0b3JfZ292KSphcy5mYWN0b3IoZ2VuZGVyKSArIGFzLmZhY3RvcihzZWN0b3Jfbm9ucHIpKmFzLmZhY3RvcihnZW5kZXIpICsgc2VjdG9yX2dvdl9iKmFzLmZhY3RvcihnZW5kZXIpICsgc2VjdG9yX25vbnByX2IqYXMuZmFjdG9yKGdlbmRlcikgKyBicmVha19qb2IqYXMuZmFjdG9yKGdlbmRlcikgKyBicmVha19qb2JfYiphcy5mYWN0b3IoZ2VuZGVyKSArIGFicm9hZF90aW1lKmFzLmZhY3RvcihnZW5kZXIpICsgYWJyb2FkX3RpbWVfYiphcy5mYWN0b3IoZ2VuZGVyKSArIGFzLmZhY3RvcihvdGhlcmpvYikqYXMuZmFjdG9yKGdlbmRlcikgKyBvdGhlcmpvYl9iKmFzLmZhY3RvcihnZW5kZXIpICsgYXMuZmFjdG9yKHRyYW5zX2x0KSp0KmFzLmZhY3RvcihnZW5kZXIpICsgdHJhbnNfbHRfYip0KmFzLmZhY3RvcihnZW5kZXIpICsgcGhkX2NvaCp0KmFzLmZhY3RvcihnZW5kZXIpICsgcGhkX3NhdCp0KmFzLmZhY3RvcihnZW5kZXIpICsgcGFydG5lcmVkX2IqdCphcy5mYWN0b3IoZ2VuZGVyKSArIHNlY3Rvcl9nb3ZfYip0KmFzLmZhY3RvcihnZW5kZXIpICsgc2VjdG9yX25vbnByX2IqdCphcy5mYWN0b3IoZ2VuZGVyKSArIGJyZWFrX2pvYl9iKnQqYXMuZmFjdG9yKGdlbmRlcikgKyBhYnJvYWRfdGltZV9iKnQqYXMuZmFjdG9yKGdlbmRlcikgKyBvdGhlcmpvYl9iKnQqYXMuZmFjdG9yKGdlbmRlcikgKyBwaGRfZGlzY2kqdCphcy5mYWN0b3IoZ2VuZGVyKSArIGNoaWxkX3U1X2IqdCphcy5mYWN0b3IoZ2VuZGVyKSArIGxvZ19ocnNfYip0KmFzLmZhY3RvcihnZW5kZXIpICsgdGVtcG9yYXJ5X2VtcF9iKnQqYXMuZmFjdG9yKGdlbmRlcikgKyAoMSArIHQgKyB0MiB8IFJJTlBFUlNPT04pICsgKC0xICsgdDMgfCBSSU5QRVJTT09OKSwgZGF0YT1kZl9tbWZjX3I1KQ0KDQpgYGANCg0KDQoNCiMjIFRyYW5zaXRpb24gKiB0XjIgLyB0XjMNCg0KDQpgYGB7ciwgZXZhbD1GQUxTRX0NCg0KIyBPVkVSQUxMIA0KIyBOdWxsIG1vZGVsOiByYW5kb20gaW50ZXJjZXB0DQpSN19NMCA8LSBsbWVyKGxvZ19yZWFscGF5IH4gMSArIHQqYXMuZmFjdG9yKGdlbmRlcikgKyB0Miphcy5mYWN0b3IoZ2VuZGVyKSArIHQzKmFzLmZhY3RvcihnZW5kZXIpICsgKDEgKyB0ICsgdDIgfCBSSU5QRVJTT09OKSArICgtMSArIHQzIHwgUklOUEVSU09PTiksIGRhdGE9ZGZfbW1mYykNCg0KIyBNMTogVHJhbnNpdGlvbiBlZmZlY3QgYW5kIGNvbnRyb2xzDQpSN19NMSA8LSBsbWVyKGxvZ19yZWFscGF5IH4gMSArIHQqYXMuZmFjdG9yKGdlbmRlcikgKyB0Miphcy5mYWN0b3IoZ2VuZGVyKSArIHQzKmFzLmZhY3RvcihnZW5kZXIpICsgYXMuZmFjdG9yKHRyYW5zX3N0KSphcy5mYWN0b3IoZ2VuZGVyKSArIGFzLmZhY3Rvcih0cmFuc19sdCkqYXMuZmFjdG9yKGdlbmRlcikgKyB0cmFuc19sdF9iKmFzLmZhY3RvcihnZW5kZXIpICsgcGhkX2NvaCphcy5mYWN0b3IoZ2VuZGVyKSArIHBoZF9zYXQqYXMuZmFjdG9yKGdlbmRlcikgKyBhcy5mYWN0b3IocGFydG5lcmVkKSphcy5mYWN0b3IoZ2VuZGVyKSArIHBhcnRuZXJlZF9iKmFzLmZhY3RvcihnZW5kZXIpICsgYXMuZmFjdG9yKHNlY3Rvcl9nb3YpKmFzLmZhY3RvcihnZW5kZXIpICsgYXMuZmFjdG9yKHNlY3Rvcl9ub25wcikqYXMuZmFjdG9yKGdlbmRlcikgKyBzZWN0b3JfZ292X2IqYXMuZmFjdG9yKGdlbmRlcikgKyBzZWN0b3Jfbm9ucHJfYiphcy5mYWN0b3IoZ2VuZGVyKSArIGJyZWFrX2pvYiphcy5mYWN0b3IoZ2VuZGVyKSArIGJyZWFrX2pvYl9iKmFzLmZhY3RvcihnZW5kZXIpICsgYWJyb2FkX3RpbWUqYXMuZmFjdG9yKGdlbmRlcikgKyBhYnJvYWRfdGltZV9iKmFzLmZhY3RvcihnZW5kZXIpICsgYXMuZmFjdG9yKG90aGVyam9iKSphcy5mYWN0b3IoZ2VuZGVyKSArIG90aGVyam9iX2IqYXMuZmFjdG9yKGdlbmRlcikgKyBhcy5mYWN0b3IodHJhbnNfbHQpKnQqYXMuZmFjdG9yKGdlbmRlcikgKyB0cmFuc19sdF9iKnQqYXMuZmFjdG9yKGdlbmRlcikgKyBhcy5mYWN0b3IodHJhbnNfbHQpKnQyKmFzLmZhY3RvcihnZW5kZXIpICsgdHJhbnNfbHRfYip0Miphcy5mYWN0b3IoZ2VuZGVyKSArIGFzLmZhY3Rvcih0cmFuc19sdCkqdDMqYXMuZmFjdG9yKGdlbmRlcikgKyB0cmFuc19sdF9iKnQzKmFzLmZhY3RvcihnZW5kZXIpICsgcGhkX2NvaCp0KmFzLmZhY3RvcihnZW5kZXIpICsgcGhkX3NhdCp0KmFzLmZhY3RvcihnZW5kZXIpICsgcGFydG5lcmVkX2IqdCphcy5mYWN0b3IoZ2VuZGVyKSArIHNlY3Rvcl9nb3ZfYip0KmFzLmZhY3RvcihnZW5kZXIpICsgc2VjdG9yX25vbnByX2IqdCphcy5mYWN0b3IoZ2VuZGVyKSArIGJyZWFrX2pvYl9iKnQqYXMuZmFjdG9yKGdlbmRlcikgKyBhYnJvYWRfdGltZV9iKnQqYXMuZmFjdG9yKGdlbmRlcikgKyBvdGhlcmpvYl9iKnQqYXMuZmFjdG9yKGdlbmRlcikgKyAoMSArIHQgKyB0MiB8IFJJTlBFUlNPT04pICsgKC0xICsgdDMgfCBSSU5QRVJTT09OKSwgZGF0YT1kZl9tbWZjKQ0KDQojIE0yOiBBZGRpbmcgZXhwbGFuYXRvcnkgdmFyaWFibGVzIChob3VycyB3b3JrZWQsIGRpc2NpcGxpbmUsIHBhcmVudGFsIHN0YXR1cywgdGVtcG9yYXJ5IGNvbnRyYWN0KQ0KUjdfTTIgPC0gbG1lcihsb2dfcmVhbHBheSB+IDEgKyB0KmFzLmZhY3RvcihnZW5kZXIpICsgdDIqYXMuZmFjdG9yKGdlbmRlcikgKyB0Myphcy5mYWN0b3IoZ2VuZGVyKSArIGFzLmZhY3Rvcih0cmFuc19zdCkqYXMuZmFjdG9yKGdlbmRlcikgKyBhcy5mYWN0b3IodHJhbnNfbHQpKmFzLmZhY3RvcihnZW5kZXIpICsgdHJhbnNfbHRfYiphcy5mYWN0b3IoZ2VuZGVyKSArIGFzLmZhY3RvcihwaGRfZGlzY2kpKmFzLmZhY3RvcihnZW5kZXIpICsgYXMuZmFjdG9yKGNoaWxkX3U1KSphcy5mYWN0b3IoZ2VuZGVyKSArIGNoaWxkX3U1X2IqYXMuZmFjdG9yKGdlbmRlcikgKyBsb2dfaHJzKmFzLmZhY3RvcihnZW5kZXIpICsgbG9nX2hyc19iKmFzLmZhY3RvcihnZW5kZXIpICsgYXMuZmFjdG9yKHRlbXBvcmFyeV9lbXApKmFzLmZhY3RvcihnZW5kZXIpICsgdGVtcG9yYXJ5X2VtcF9iKmFzLmZhY3RvcihnZW5kZXIpICsgcGhkX2NvaCphcy5mYWN0b3IoZ2VuZGVyKSArIHBoZF9zYXQqYXMuZmFjdG9yKGdlbmRlcikgKyBhcy5mYWN0b3IocGFydG5lcmVkKSphcy5mYWN0b3IoZ2VuZGVyKSArIHBhcnRuZXJlZF9iKmFzLmZhY3RvcihnZW5kZXIpICsgYXMuZmFjdG9yKHNlY3Rvcl9nb3YpKmFzLmZhY3RvcihnZW5kZXIpICsgYXMuZmFjdG9yKHNlY3Rvcl9ub25wcikqYXMuZmFjdG9yKGdlbmRlcikgKyBzZWN0b3JfZ292X2IqYXMuZmFjdG9yKGdlbmRlcikgKyBzZWN0b3Jfbm9ucHJfYiphcy5mYWN0b3IoZ2VuZGVyKSArIGJyZWFrX2pvYiphcy5mYWN0b3IoZ2VuZGVyKSArIGJyZWFrX2pvYl9iKmFzLmZhY3RvcihnZW5kZXIpICsgYWJyb2FkX3RpbWUqYXMuZmFjdG9yKGdlbmRlcikgKyBhYnJvYWRfdGltZV9iKmFzLmZhY3RvcihnZW5kZXIpICsgYXMuZmFjdG9yKG90aGVyam9iKSphcy5mYWN0b3IoZ2VuZGVyKSArIG90aGVyam9iX2IqYXMuZmFjdG9yKGdlbmRlcikgKyBhcy5mYWN0b3IodHJhbnNfbHQpKnQqYXMuZmFjdG9yKGdlbmRlcikgKyB0cmFuc19sdF9iKnQqYXMuZmFjdG9yKGdlbmRlcikgKyBhcy5mYWN0b3IodHJhbnNfbHQpKnQyKmFzLmZhY3RvcihnZW5kZXIpICsgdHJhbnNfbHRfYip0Miphcy5mYWN0b3IoZ2VuZGVyKSArIGFzLmZhY3Rvcih0cmFuc19sdCkqdDMqYXMuZmFjdG9yKGdlbmRlcikgKyB0cmFuc19sdF9iKnQzKmFzLmZhY3RvcihnZW5kZXIpICsgcGhkX2NvaCp0KmFzLmZhY3RvcihnZW5kZXIpICsgcGhkX3NhdCp0KmFzLmZhY3RvcihnZW5kZXIpICsgcGFydG5lcmVkX2IqdCphcy5mYWN0b3IoZ2VuZGVyKSArIHNlY3Rvcl9nb3ZfYip0KmFzLmZhY3RvcihnZW5kZXIpICsgc2VjdG9yX25vbnByX2IqdCphcy5mYWN0b3IoZ2VuZGVyKSArIGJyZWFrX2pvYl9iKnQqYXMuZmFjdG9yKGdlbmRlcikgKyBhYnJvYWRfdGltZV9iKnQqYXMuZmFjdG9yKGdlbmRlcikgKyBvdGhlcmpvYl9iKnQqYXMuZmFjdG9yKGdlbmRlcikgKyBwaGRfZGlzY2kqdCphcy5mYWN0b3IoZ2VuZGVyKSArIGNoaWxkX3U1X2IqdCphcy5mYWN0b3IoZ2VuZGVyKSArIGxvZ19ocnNfYip0KmFzLmZhY3RvcihnZW5kZXIpICsgdGVtcG9yYXJ5X2VtcF9iKnQqYXMuZmFjdG9yKGdlbmRlcikgKyAoMSArIHQgKyB0MiB8IFJJTlBFUlNPT04pICsgKC0xICsgdDMgfCBSSU5QRVJTT09OKSwgZGF0YT1kZl9tbWZjKQ0KDQojIEJZIEdFTkRFUg0KDQojIE1FTg0KIyBOdWxsIG1vZGVsOiByYW5kb20gaW50ZXJjZXB0DQpSN19NMG0gPC0gbG1lcihsb2dfcmVhbHBheSB+IDEgKyB0ICsgdDIgKyB0MyArICgxICsgdCArIHQyIHwgUklOUEVSU09PTikgKyAoLTEgKyB0MyB8IFJJTlBFUlNPT04pLCBkYXRhPWRmX21lbikNCg0KIyBNMTogVHJhbnNpdGlvbiBlZmZlY3QgYW5kIGNvbnRyb2xzDQpSN19NMW0gPC0gbG1lcihsb2dfcmVhbHBheSB+IDEgKyB0ICsgdDIgKyB0MyArIGFzLmZhY3Rvcih0cmFuc19zdCkgKyBhcy5mYWN0b3IodHJhbnNfbHQpICsgdHJhbnNfbHRfYiArIHBoZF9jb2ggKyBwaGRfc2F0ICsgYXMuZmFjdG9yKHBhcnRuZXJlZCkgKyBwYXJ0bmVyZWRfYiArIGFzLmZhY3RvcihzZWN0b3JfZ292KSArIGFzLmZhY3RvcihzZWN0b3Jfbm9ucHIpICsgc2VjdG9yX2dvdl9iICsgc2VjdG9yX25vbnByX2IgKyBicmVha19qb2IgKyBicmVha19qb2JfYiArIGFicm9hZF90aW1lICsgYWJyb2FkX3RpbWVfYiArIGFzLmZhY3RvcihvdGhlcmpvYikgKyBvdGhlcmpvYl9iICsgYXMuZmFjdG9yKHRyYW5zX2x0KSp0ICsgdHJhbnNfbHRfYip0ICsgYXMuZmFjdG9yKHRyYW5zX2x0KSp0MiArIHRyYW5zX2x0X2IqdDIgKyBhcy5mYWN0b3IodHJhbnNfbHQpKnQzICsgdHJhbnNfbHRfYip0MyArIHBoZF9jb2gqdCArIHBoZF9zYXQqdCArIHBhcnRuZXJlZF9iKnQgKyBzZWN0b3JfZ292X2IqdCArIHNlY3Rvcl9ub25wcl9iKnQgKyBicmVha19qb2JfYip0ICsgYWJyb2FkX3RpbWVfYip0ICsgb3RoZXJqb2JfYip0ICsgKDEgKyB0ICsgdDIgfCBSSU5QRVJTT09OKSArICgtMSArIHQzIHwgUklOUEVSU09PTiksIGRhdGE9ZGZfbWVuKQ0KDQojIE0yOiBBZGRpbmcgZXhwbGFuYXRvcnkgdmFyaWFibGVzIChob3VycyB3b3JrZWQsIGRpc2NpcGxpbmUsIHBhcmVudGFsIHN0YXR1cywgdGVtcG9yYXJ5IGNvbnRyYWN0KQ0KUjdfTTJtIDwtIGxtZXIobG9nX3JlYWxwYXkgfiAxICsgdCArIHQyICsgdDMgKyBhcy5mYWN0b3IodHJhbnNfc3QpICsgYXMuZmFjdG9yKHRyYW5zX2x0KSArIHRyYW5zX2x0X2IgKyBhcy5mYWN0b3IocGhkX2Rpc2NpKSArIGFzLmZhY3RvcihjaGlsZF91NSkgKyBjaGlsZF91NV9iICsgbG9nX2hycyArIGxvZ19ocnNfYiArIGFzLmZhY3Rvcih0ZW1wb3JhcnlfZW1wKSArIHRlbXBvcmFyeV9lbXBfYiArIHBoZF9jb2ggKyBwaGRfc2F0ICsgYXMuZmFjdG9yKHBhcnRuZXJlZCkgKyBwYXJ0bmVyZWRfYiArIGFzLmZhY3RvcihzZWN0b3JfZ292KSArIGFzLmZhY3RvcihzZWN0b3Jfbm9ucHIpICsgc2VjdG9yX2dvdl9iICsgc2VjdG9yX25vbnByX2IgKyBicmVha19qb2IgKyBicmVha19qb2JfYiArIGFicm9hZF90aW1lICsgYWJyb2FkX3RpbWVfYiArIGFzLmZhY3RvcihvdGhlcmpvYikgKyBvdGhlcmpvYl9iICsgYXMuZmFjdG9yKHRyYW5zX2x0KSp0ICsgdHJhbnNfbHRfYip0ICArIGFzLmZhY3Rvcih0cmFuc19sdCkqdDIgKyB0cmFuc19sdF9iKnQyICsgYXMuZmFjdG9yKHRyYW5zX2x0KSp0MyArIHRyYW5zX2x0X2IqdDMgKyBwaGRfY29oKnQgKyBwaGRfc2F0KnQgKyBwYXJ0bmVyZWRfYip0ICsgc2VjdG9yX2dvdl9iKnQgKyBzZWN0b3Jfbm9ucHJfYip0ICsgYnJlYWtfam9iX2IqdCArIGFicm9hZF90aW1lX2IqdCArIG90aGVyam9iX2IqdCArIHBoZF9kaXNjaSp0ICsgY2hpbGRfdTVfYip0ICsgbG9nX2hyc19iKnQgKyB0ZW1wb3JhcnlfZW1wX2IqdCArICgxICsgdCArIHQyIHwgUklOUEVSU09PTikgKyAoLTEgKyB0MyB8IFJJTlBFUlNPT04pLCBkYXRhPWRmX21lbikNCg0KIyBXT01FTg0KDQoNCiMgTnVsbCBtb2RlbDogcmFuZG9tIGludGVyY2VwdA0KUjdfTTB3IDwtIGxtZXIobG9nX3JlYWxwYXkgfiAxICsgdCArIHQyICsgdDMgKyAoMSArIHQgKyB0MiB8IFJJTlBFUlNPT04pICsgKC0xICsgdDMgfCBSSU5QRVJTT09OKSwgZGF0YT1kZl93b20pDQoNCiMgTTE6IFRyYW5zaXRpb24gZWZmZWN0IGFuZCBjb250cm9scw0KUjdfTTF3IDwtIGxtZXIobG9nX3JlYWxwYXkgfiAxICsgdCArIHQyICsgdDMgKyBhcy5mYWN0b3IodHJhbnNfc3QpICsgYXMuZmFjdG9yKHRyYW5zX2x0KSArIHRyYW5zX2x0X2IgKyBwaGRfY29oICsgcGhkX3NhdCArIGFzLmZhY3RvcihwYXJ0bmVyZWQpICsgcGFydG5lcmVkX2IgKyBhcy5mYWN0b3Ioc2VjdG9yX2dvdikgKyBhcy5mYWN0b3Ioc2VjdG9yX25vbnByKSArIHNlY3Rvcl9nb3ZfYiArIHNlY3Rvcl9ub25wcl9iICsgYnJlYWtfam9iICsgYnJlYWtfam9iX2IgKyBhYnJvYWRfdGltZSArIGFicm9hZF90aW1lX2IgKyBhcy5mYWN0b3Iob3RoZXJqb2IpICsgb3RoZXJqb2JfYiArIGFzLmZhY3Rvcih0cmFuc19sdCkqdCArIHRyYW5zX2x0X2IqdCArIGFzLmZhY3Rvcih0cmFuc19sdCkqdDIgKyB0cmFuc19sdF9iKnQyICsgYXMuZmFjdG9yKHRyYW5zX2x0KSp0MyArIHRyYW5zX2x0X2IqdDMgKyBwaGRfY29oKnQgKyBwaGRfc2F0KnQgKyBwYXJ0bmVyZWRfYip0ICsgc2VjdG9yX2dvdl9iKnQgKyArIHNlY3Rvcl9ub25wcl9iKnQgKyBicmVha19qb2JfYip0ICsgYWJyb2FkX3RpbWVfYip0ICsgb3RoZXJqb2JfYip0ICsgKDEgKyB0ICsgdDIgfCBSSU5QRVJTT09OKSArICgtMSArIHQzIHwgUklOUEVSU09PTiksIGRhdGE9ZGZfd29tKQ0KDQojIE0yOiBBZGRpbmcgZXhwbGFuYXRvcnkgdmFyaWFibGVzIChob3VycyB3b3JrZWQsIGRpc2NpcGxpbmUsIHBhcmVudGFsIHN0YXR1cywgdGVtcG9yYXJ5IGNvbnRyYWN0KQ0KUjdfTTJ3IDwtIGxtZXIobG9nX3JlYWxwYXkgfiAxICsgdCArIHQyICsgdDMgKyBhcy5mYWN0b3IodHJhbnNfc3QpICsgYXMuZmFjdG9yKHRyYW5zX2x0KSArIHRyYW5zX2x0X2IgKyBhcy5mYWN0b3IocGhkX2Rpc2NpKSArIGFzLmZhY3RvcihjaGlsZF91NSkgKyBjaGlsZF91NV9iICsgbG9nX2hycyArIGxvZ19ocnNfYiArIGFzLmZhY3Rvcih0ZW1wb3JhcnlfZW1wKSArIHRlbXBvcmFyeV9lbXBfYiArIHBoZF9jb2ggKyBwaGRfc2F0ICsgYXMuZmFjdG9yKHBhcnRuZXJlZCkgKyBwYXJ0bmVyZWRfYiArIGFzLmZhY3RvcihzZWN0b3JfZ292KSArIGFzLmZhY3RvcihzZWN0b3Jfbm9ucHIpICsgc2VjdG9yX2dvdl9iICsgc2VjdG9yX25vbnByX2IgKyBicmVha19qb2IgKyBicmVha19qb2JfYiArIGFicm9hZF90aW1lICsgYWJyb2FkX3RpbWVfYiArIGFzLmZhY3RvcihvdGhlcmpvYikgKyBvdGhlcmpvYl9iICsgYXMuZmFjdG9yKHRyYW5zX2x0KSp0ICsgdHJhbnNfbHRfYip0ICsgYXMuZmFjdG9yKHRyYW5zX2x0KSp0MiArIHRyYW5zX2x0X2IqdDIgKyBhcy5mYWN0b3IodHJhbnNfbHQpKnQzICsgdHJhbnNfbHRfYip0MyArIHBoZF9jb2gqdCArIHBoZF9zYXQqdCArIHBhcnRuZXJlZF9iKnQgKyBzZWN0b3JfZ292X2IqdCArIHNlY3Rvcl9ub25wcl9iKnQgKyBicmVha19qb2JfYip0ICsgYWJyb2FkX3RpbWVfYip0ICsgb3RoZXJqb2JfYip0ICsgcGhkX2Rpc2NpKnQgKyBjaGlsZF91NV9iKnQgKyBsb2dfaHJzX2IqdCArIHRlbXBvcmFyeV9lbXBfYip0ICsgKDEgKyB0ICsgdDIgfCBSSU5QRVJTT09OKSArICgtMSArIHQzIHwgUklOUEVSU09PTiksIGRhdGE9ZGZfd29tKQ0KDQoNCmBgYA0KDQoNCg0KIyMgTm8gb3RoZXIgam9iDQoNCg0KYGBge3IsIGV2YWw9RkFMU0V9DQoNCmRmX25vb3RoZXIkdDIgPC0gZGZfbm9vdGhlciR0XjINCmRmX25vb3RoZXIkdDMgPC0gZGZfbm9vdGhlciR0XjMNCmRmX25vb3RoZXIkdDQgPC0gZGZfbm9vdGhlciR0XjQNCmRmX25vb3RoZXIkdDUgPC0gZGZfbm9vdGhlciR0XjUNCmRmX25vb3RoZXIkdDYgPC0gZGZfbm9vdGhlciR0XjYNCg0KZGZfbm9vdGhlciRwaGRfZGlzY2kgPC0gZmFjdG9yKGRmX25vb3RoZXIkcGhkX2Rpc2NpLCBsZXZlbHM9YygiSGVhbHRoIHNjaWVuY2VzIiwgIlNvY2lhbCBzY2llbmNlcyIsICJOYXR1cmFsIHNjaWVuY2VzIGFuZCBtYXRoZW1hdGljcyIsICJFbmdpbmVlcmluZyIsICJIdW1hbml0aWVzIikpDQoNCmRmX25vb3RoZXIkdGVtcG9yYXJ5X2VtcCA8LSBoYXZlbjo6emFwX2xhYmVscyhkZl9ub290aGVyJHRlbXBvcmFyeV9lbXApDQoNCmRmX25vb3RoZXIgPC0gZGZfbm9vdGhlciAlPiUgDQogIG11dGF0ZShnZW5kZXIgPSBpZmVsc2UoZ2VuZGVyPT0xLCAibWVuIiwgIndvbWVuIikpDQoNCmRmX25vb3RoZXIkZ2VuZGVyIDwtIGZhY3RvcihkZl9ub290aGVyJGdlbmRlciwgbGV2ZWxzPWMoIm1lbiIsICJ3b21lbiIpKQ0KDQpkZl9ub290aGVyICU+JSBmaWx0ZXIoZ2VuZGVyPT0ibWVuIikgLT4gZGZfbWVuX25vbw0KZGZfbm9vdGhlciAlPiUgZmlsdGVyKGdlbmRlcj09IndvbWVuIikgLT4gZGZfd29tX25vbw0KDQoNCiMgT1ZFUkFMTCANCiMgTnVsbCBtb2RlbDogcmFuZG9tIGludGVyY2VwdA0KUjlfTTAgPC0gbG1lcihsb2dfcmVhbHBheSB+IDEgKyB0KmFzLmZhY3RvcihnZW5kZXIpICsgdDIqYXMuZmFjdG9yKGdlbmRlcikgKyB0Myphcy5mYWN0b3IoZ2VuZGVyKSArICgxICsgdCArIHQyIHwgUklOUEVSU09PTikgKyAoLTEgKyB0MyB8IFJJTlBFUlNPT04pLCBkYXRhPWRmX25vb3RoZXIpDQoNCg0KIyBNMTogVHJhbnNpdGlvbiBlZmZlY3QgYW5kIGNvbnRyb2xzDQpSOV9NMSA8LSBsbWVyKGxvZ19yZWFscGF5IH4gMSArIHQqYXMuZmFjdG9yKGdlbmRlcikgKyB0Miphcy5mYWN0b3IoZ2VuZGVyKSArIHQzKmFzLmZhY3RvcihnZW5kZXIpICsgYXMuZmFjdG9yKHRyYW5zX3N0KSphcy5mYWN0b3IoZ2VuZGVyKSArIGFzLmZhY3Rvcih0cmFuc19sdCkqYXMuZmFjdG9yKGdlbmRlcikgKyB0cmFuc19sdF9iKmFzLmZhY3RvcihnZW5kZXIpICsgcGhkX2NvaCphcy5mYWN0b3IoZ2VuZGVyKSArIHBoZF9zYXQqYXMuZmFjdG9yKGdlbmRlcikgKyBhcy5mYWN0b3IocGFydG5lcmVkKSphcy5mYWN0b3IoZ2VuZGVyKSArIHBhcnRuZXJlZF9iKmFzLmZhY3RvcihnZW5kZXIpICsgYXMuZmFjdG9yKHNlY3Rvcl9nb3YpKmFzLmZhY3RvcihnZW5kZXIpICsgYXMuZmFjdG9yKHNlY3Rvcl9ub25wcikqYXMuZmFjdG9yKGdlbmRlcikgKyBzZWN0b3JfZ292X2IqYXMuZmFjdG9yKGdlbmRlcikgKyBzZWN0b3Jfbm9ucHJfYiphcy5mYWN0b3IoZ2VuZGVyKSArIGJyZWFrX2pvYiphcy5mYWN0b3IoZ2VuZGVyKSArIGJyZWFrX2pvYl9iKmFzLmZhY3RvcihnZW5kZXIpICsgYWJyb2FkX3RpbWUqYXMuZmFjdG9yKGdlbmRlcikgKyBhYnJvYWRfdGltZV9iKmFzLmZhY3RvcihnZW5kZXIpICsgYXMuZmFjdG9yKHRyYW5zX2x0KSp0KmFzLmZhY3RvcihnZW5kZXIpICsgdHJhbnNfbHRfYip0KmFzLmZhY3RvcihnZW5kZXIpICsgcGhkX2NvaCp0KmFzLmZhY3RvcihnZW5kZXIpICsgcGhkX3NhdCp0KmFzLmZhY3RvcihnZW5kZXIpICsgcGFydG5lcmVkX2IqdCphcy5mYWN0b3IoZ2VuZGVyKSArIHNlY3Rvcl9nb3ZfYip0KmFzLmZhY3RvcihnZW5kZXIpICsgc2VjdG9yX25vbnByX2IqdCphcy5mYWN0b3IoZ2VuZGVyKSArIGJyZWFrX2pvYl9iKnQqYXMuZmFjdG9yKGdlbmRlcikgKyBhYnJvYWRfdGltZV9iKnQqYXMuZmFjdG9yKGdlbmRlcikgKyAoMSArIHQgKyB0MiB8IFJJTlBFUlNPT04pICsgKC0xICsgdDMgfCBSSU5QRVJTT09OKSwgZGF0YT1kZl9ub290aGVyKQ0KDQoNCiMgTTI6IEFkZGluZyBleHBsYW5hdG9yeSB2YXJpYWJsZXMgKGhvdXJzIHdvcmtlZCwgZGlzY2lwbGluZSwgcGFyZW50YWwgc3RhdHVzLCB0ZW1wb3JhcnkgY29udHJhY3QpDQpSOV9NMiA8LSBsbWVyKGxvZ19yZWFscGF5IH4gMSArIHQqYXMuZmFjdG9yKGdlbmRlcikgKyB0Miphcy5mYWN0b3IoZ2VuZGVyKSArIHQzKmFzLmZhY3RvcihnZW5kZXIpICsgYXMuZmFjdG9yKHRyYW5zX3N0KSphcy5mYWN0b3IoZ2VuZGVyKSArIGFzLmZhY3Rvcih0cmFuc19sdCkqYXMuZmFjdG9yKGdlbmRlcikgKyB0cmFuc19sdF9iKmFzLmZhY3RvcihnZW5kZXIpICsgYXMuZmFjdG9yKHBoZF9kaXNjaSkqYXMuZmFjdG9yKGdlbmRlcikgKyBhcy5mYWN0b3IoY2hpbGRfdTUpKmFzLmZhY3RvcihnZW5kZXIpICsgY2hpbGRfdTVfYiphcy5mYWN0b3IoZ2VuZGVyKSArIGxvZ19ocnMqYXMuZmFjdG9yKGdlbmRlcikgKyBsb2dfaHJzX2IqYXMuZmFjdG9yKGdlbmRlcikgKyBhcy5mYWN0b3IodGVtcG9yYXJ5X2VtcCkqYXMuZmFjdG9yKGdlbmRlcikgKyB0ZW1wb3JhcnlfZW1wX2IqYXMuZmFjdG9yKGdlbmRlcikgKyBwaGRfY29oKmFzLmZhY3RvcihnZW5kZXIpICsgcGhkX3NhdCphcy5mYWN0b3IoZ2VuZGVyKSArIGFzLmZhY3RvcihwYXJ0bmVyZWQpKmFzLmZhY3RvcihnZW5kZXIpICsgcGFydG5lcmVkX2IqYXMuZmFjdG9yKGdlbmRlcikgKyBhcy5mYWN0b3Ioc2VjdG9yX2dvdikqYXMuZmFjdG9yKGdlbmRlcikgKyBhcy5mYWN0b3Ioc2VjdG9yX25vbnByKSphcy5mYWN0b3IoZ2VuZGVyKSArIHNlY3Rvcl9nb3ZfYiphcy5mYWN0b3IoZ2VuZGVyKSArIHNlY3Rvcl9ub25wcl9iKmFzLmZhY3RvcihnZW5kZXIpICsgYnJlYWtfam9iKmFzLmZhY3RvcihnZW5kZXIpICsgYnJlYWtfam9iX2IqYXMuZmFjdG9yKGdlbmRlcikgKyBhYnJvYWRfdGltZSphcy5mYWN0b3IoZ2VuZGVyKSArIGFicm9hZF90aW1lX2IqYXMuZmFjdG9yKGdlbmRlcikgKyAgYXMuZmFjdG9yKHRyYW5zX2x0KSp0KmFzLmZhY3RvcihnZW5kZXIpICsgdHJhbnNfbHRfYip0KmFzLmZhY3RvcihnZW5kZXIpICsgcGhkX2NvaCp0KmFzLmZhY3RvcihnZW5kZXIpICsgcGhkX3NhdCp0KmFzLmZhY3RvcihnZW5kZXIpICsgcGFydG5lcmVkX2IqdCphcy5mYWN0b3IoZ2VuZGVyKSArIHNlY3Rvcl9nb3ZfYip0KmFzLmZhY3RvcihnZW5kZXIpICsgc2VjdG9yX25vbnByX2IqdCphcy5mYWN0b3IoZ2VuZGVyKSArIGJyZWFrX2pvYl9iKnQqYXMuZmFjdG9yKGdlbmRlcikgKyBhYnJvYWRfdGltZV9iKnQqYXMuZmFjdG9yKGdlbmRlcikgKyBwaGRfZGlzY2kqdCphcy5mYWN0b3IoZ2VuZGVyKSArIGNoaWxkX3U1X2IqdCphcy5mYWN0b3IoZ2VuZGVyKSArIGxvZ19ocnNfYip0KmFzLmZhY3RvcihnZW5kZXIpICsgdGVtcG9yYXJ5X2VtcF9iKnQqYXMuZmFjdG9yKGdlbmRlcikgKyAoMSArIHQgKyB0MiB8IFJJTlBFUlNPT04pICsgKC0xICsgdDMgfCBSSU5QRVJTT09OKSwgZGF0YT1kZl9ub290aGVyKQ0KDQoNCiMgQlkgR0VOREVSDQoNCiMgTUVODQoNCiMgTnVsbCBtb2RlbDogcmFuZG9tIGludGVyY2VwdA0KUjlfTTBtIDwtIGxtZXIobG9nX3JlYWxwYXkgfiAxICsgdCArIHQyICsgdDMgKyAoMSArIHQgKyB0MiB8IFJJTlBFUlNPT04pICsgKC0xICsgdDMgfCBSSU5QRVJTT09OKSwgZGF0YT1kZl9tZW5fbm9vKQ0KDQoNCiMgTTE6IFRyYW5zaXRpb24gZWZmZWN0IGFuZCBjb250cm9scw0KUjlfTTFtIDwtIGxtZXIobG9nX3JlYWxwYXkgfiAxICsgdCArIHQyICsgdDMgKyBhcy5mYWN0b3IodHJhbnNfc3QpICsgYXMuZmFjdG9yKHRyYW5zX2x0KSArIHRyYW5zX2x0X2IgKyBwaGRfY29oICsgcGhkX3NhdCArIGFzLmZhY3RvcihwYXJ0bmVyZWQpICsgcGFydG5lcmVkX2IgKyBhcy5mYWN0b3Ioc2VjdG9yX2dvdikgKyBhcy5mYWN0b3Ioc2VjdG9yX25vbnByKSArIHNlY3Rvcl9nb3ZfYiArIHNlY3Rvcl9ub25wcl9iICsgYnJlYWtfam9iICsgYnJlYWtfam9iX2IgKyBhYnJvYWRfdGltZSArIGFicm9hZF90aW1lX2IgKyBhcy5mYWN0b3IodHJhbnNfbHQpKnQgKyB0cmFuc19sdF9iKnQgKyBwaGRfY29oKnQgKyBwaGRfc2F0KnQgKyBwYXJ0bmVyZWRfYip0ICsgc2VjdG9yX2dvdl9iKnQgKyBzZWN0b3Jfbm9ucHJfYip0ICsgYnJlYWtfam9iX2IqdCArIGFicm9hZF90aW1lX2IqdCArICgxICsgdCArIHQyIHwgUklOUEVSU09PTikgKyAoLTEgKyB0MyB8IFJJTlBFUlNPT04pLCBkYXRhPWRmX21lbl9ub28pDQoNCg0KIyBNMjogQWRkaW5nIGV4cGxhbmF0b3J5IHZhcmlhYmxlcyAoaG91cnMgd29ya2VkLCBkaXNjaXBsaW5lLCBwYXJlbnRhbCBzdGF0dXMsIHRlbXBvcmFyeSBjb250cmFjdCkNClI5X00ybSA8LSBsbWVyKGxvZ19yZWFscGF5IH4gMSArIHQgKyB0MiArIHQzICsgYXMuZmFjdG9yKHRyYW5zX3N0KSArIGFzLmZhY3Rvcih0cmFuc19sdCkgKyB0cmFuc19sdF9iICsgYXMuZmFjdG9yKHBoZF9kaXNjaSkgKyBhcy5mYWN0b3IoY2hpbGRfdTUpICsgY2hpbGRfdTVfYiArIGxvZ19ocnMgKyBsb2dfaHJzX2IgKyBhcy5mYWN0b3IodGVtcG9yYXJ5X2VtcCkgKyB0ZW1wb3JhcnlfZW1wX2IgKyBwaGRfY29oICsgcGhkX3NhdCArIGFzLmZhY3RvcihwYXJ0bmVyZWQpICsgcGFydG5lcmVkX2IgKyBhcy5mYWN0b3Ioc2VjdG9yX2dvdikgKyBhcy5mYWN0b3Ioc2VjdG9yX25vbnByKSArIHNlY3Rvcl9nb3ZfYiArIHNlY3Rvcl9ub25wcl9iICsgYnJlYWtfam9iICsgYnJlYWtfam9iX2IgKyBhYnJvYWRfdGltZSArIGFicm9hZF90aW1lX2IgKyBhcy5mYWN0b3IodHJhbnNfbHQpKnQgKyB0cmFuc19sdF9iKnQgICsgcGhkX2NvaCp0ICsgcGhkX3NhdCp0ICsgcGFydG5lcmVkX2IqdCArIHNlY3Rvcl9nb3ZfYip0ICsgc2VjdG9yX25vbnByX2IqdCArIGJyZWFrX2pvYl9iKnQgKyBhYnJvYWRfdGltZV9iKnQgKyBwaGRfZGlzY2kqdCArIGNoaWxkX3U1X2IqdCArIGxvZ19ocnNfYip0ICsgdGVtcG9yYXJ5X2VtcF9iKnQgKyAoMSArIHQgKyB0MiB8IFJJTlBFUlNPT04pICsgKC0xICsgdDMgfCBSSU5QRVJTT09OKSwgZGF0YT1kZl9tZW5fbm9vKQ0KDQoNCiMgV09NRU4NCg0KDQojIE51bGwgbW9kZWw6IHJhbmRvbSBpbnRlcmNlcHQNClI5X00wdyA8LSBsbWVyKGxvZ19yZWFscGF5IH4gMSArIHQgKyB0MiArIHQzICsgKDEgKyB0ICsgdDIgfCBSSU5QRVJTT09OKSArICgtMSArIHQzIHwgUklOUEVSU09PTiksIGRhdGE9ZGZfd29tX25vbykNCg0KDQojIE0xOiBUcmFuc2l0aW9uIGVmZmVjdCBhbmQgY29udHJvbHMNClI5X00xdyA8LSBsbWVyKGxvZ19yZWFscGF5IH4gMSArIHQgKyB0MiArIHQzICsgYXMuZmFjdG9yKHRyYW5zX3N0KSArIGFzLmZhY3Rvcih0cmFuc19sdCkgKyB0cmFuc19sdF9iICsgcGhkX2NvaCArIHBoZF9zYXQgKyBhcy5mYWN0b3IocGFydG5lcmVkKSArIHBhcnRuZXJlZF9iICsgYXMuZmFjdG9yKHNlY3Rvcl9nb3YpICsgYXMuZmFjdG9yKHNlY3Rvcl9ub25wcikgKyBzZWN0b3JfZ292X2IgKyBzZWN0b3Jfbm9ucHJfYiArIGJyZWFrX2pvYiArIGJyZWFrX2pvYl9iICsgYWJyb2FkX3RpbWUgKyBhYnJvYWRfdGltZV9iICsgYXMuZmFjdG9yKHRyYW5zX2x0KSp0ICsgdHJhbnNfbHRfYip0ICsgcGhkX2NvaCp0ICsgcGhkX3NhdCp0ICsgcGFydG5lcmVkX2IqdCArIHNlY3Rvcl9nb3ZfYip0ICsgKyBzZWN0b3Jfbm9ucHJfYip0ICsgYnJlYWtfam9iX2IqdCArIGFicm9hZF90aW1lX2IqdCArICgxICsgdCArIHQyIHwgUklOUEVSU09PTikgKyAoLTEgKyB0MyB8IFJJTlBFUlNPT04pLCBkYXRhPWRmX3dvbV9ub28pDQoNCg0KIyBNMjogQWRkaW5nIGV4cGxhbmF0b3J5IHZhcmlhYmxlcyAoaG91cnMgd29ya2VkLCBkaXNjaXBsaW5lLCBwYXJlbnRhbCBzdGF0dXMsIHRlbXBvcmFyeSBjb250cmFjdCkNClI5X00ydyA8LSBsbWVyKGxvZ19yZWFscGF5IH4gMSArIHQgKyB0MiArIHQzICsgYXMuZmFjdG9yKHRyYW5zX3N0KSArIGFzLmZhY3Rvcih0cmFuc19sdCkgKyB0cmFuc19sdF9iICsgYXMuZmFjdG9yKHBoZF9kaXNjaSkgKyBhcy5mYWN0b3IoY2hpbGRfdTUpICsgY2hpbGRfdTVfYiArIGxvZ19ocnMgKyBsb2dfaHJzX2IgKyBhcy5mYWN0b3IodGVtcG9yYXJ5X2VtcCkgKyB0ZW1wb3JhcnlfZW1wX2IgKyBwaGRfY29oICsgcGhkX3NhdCArIGFzLmZhY3RvcihwYXJ0bmVyZWQpICsgcGFydG5lcmVkX2IgKyBhcy5mYWN0b3Ioc2VjdG9yX2dvdikgKyBhcy5mYWN0b3Ioc2VjdG9yX25vbnByKSArIHNlY3Rvcl9nb3ZfYiArIHNlY3Rvcl9ub25wcl9iICsgYnJlYWtfam9iICsgYnJlYWtfam9iX2IgKyBhYnJvYWRfdGltZSArIGFicm9hZF90aW1lX2IgKyBhcy5mYWN0b3IodHJhbnNfbHQpKnQgKyB0cmFuc19sdF9iKnQgKyBwaGRfY29oKnQgKyBwaGRfc2F0KnQgKyBwYXJ0bmVyZWRfYip0ICsgc2VjdG9yX2dvdl9iKnQgKyBzZWN0b3Jfbm9ucHJfYip0ICsgYnJlYWtfam9iX2IqdCArIGFicm9hZF90aW1lX2IqdCArICBwaGRfZGlzY2kqdCArIGNoaWxkX3U1X2IqdCArIGxvZ19ocnNfYip0ICsgdGVtcG9yYXJ5X2VtcF9iKnQgKyAoMSArIHQgKyB0MiB8IFJJTlBFUlNPT04pICsgKC0xICsgdDMgfCBSSU5QRVJTT09OKSwgZGF0YT1kZl93b21fbm9vKQ0KDQpgYGANCg==


Copyright © 2025