In this script I extract the coefficients for gender, age and education and their interaction variables and put them in a dataset together, to use them as input for the meta-regression.

rm(list=ls())
library(tidyverse)
library(dplyr)
library(gamlss)

ESS

load("./data/final_data/regression_outputs/ess_list_interactions_w_new.RData")

# Store the results in a new dataframe
ess_inter_preds_df <- data.frame(dep_var = character())

# Loop over the list of models
for (i in seq_along(ess_list_interactions)) {

  # Extract the dependent variable so that we know for which dep var the effects are
  dep_var <- as.character(ess_list_interactions[[i]]$mu.terms[[2]])
  
    # Summarize the model
  sum <- summary(ess_list_interactions[[i]])
  
  # Extract the intercept and standard deviation for mu and sigma
   mu_sex_est <- sum[[3]]
  mu_sex_sd <- sum[[3,2]]
  mu_isced_med_est <- sum[[4]]
  mu_isced_med_sd <- sum[[4,2]]
  mu_isced_high_est <- sum[[5]]
  mu_isced_high_sd <- sum[[5,2]]
  mu_age_est <- sum[[6]]
  mu_age_sd <- sum[[6,2]]
  
   mu_sex_est_inter <- sum[[8]]
  mu_sex_sd_inter <- sum[[8,2]]
  mu_isced_med_est_inter <- sum[[9]]
  mu_isced_med_sd_inter <- sum[[9,2]]
  mu_isced_high_est_inter <- sum[[10]]
  mu_isced_high_sd_inter <- sum[[10,2]]
  mu_age_est_inter <- sum[[7]]
  mu_age_sd_inter <- sum[[7,2]]

  # Variance
  sig_sex_est <- sum[[9]]
  sig_sex_sd <- sum[[9,2]]
  sig_isced_med_est <- sum[[10]]
  sig_isced_med_sd <- sum[[10,2]]
  sig_isced_high_est <- sum[[11]]
  sig_isced_high_sd <- sum[[11,2]]
  sig_age_est <- sum[[12]]
  sig_age_sd <- sum[[12,2]]
  
  sig_sex_est_inter <- sum[[18]]
  sig_sex_sd_inter <- sum[[18,2]]
  sig_isced_med_est_inter <- sum[[19]]
  sig_isced_med_sd_inter <- sum[[19,2]]
  sig_isced_high_est_inter <- sum[[20]]
  sig_isced_high_sd_inter <- sum[[20,2]]
  sig_age_est_inter <- sum[[17]]
  sig_age_sd_inter <- sum[[17,2]]

  # Put the results 
  ess_inter_preds_df <- rbind(ess_inter_preds_df, data.frame(dep_var = dep_var, mu_sex_est, mu_sex_sd, mu_isced_med_est, mu_isced_med_sd, mu_isced_high_est, mu_isced_high_sd, mu_age_est, mu_age_sd, sig_sex_est, sig_sex_sd, sig_isced_med_est, sig_isced_med_sd, sig_isced_high_est, sig_isced_high_sd, sig_age_est, sig_age_sd, mu_sex_est_inter, mu_sex_sd_inter, mu_isced_med_est_inter, mu_isced_med_sd_inter, mu_isced_high_est_inter, mu_isced_high_sd_inter, mu_age_est_inter, mu_age_sd_inter, sig_sex_est_inter, sig_sex_sd_inter, sig_isced_med_est_inter, sig_isced_med_sd_inter, sig_isced_high_est_inter, sig_isced_high_sd_inter, sig_age_est_inter, sig_age_sd_inter))
}

save(ess_inter_preds_df, file="./data/final_data/indep_var/ess_inter_var_new.RData")

EVS

# Now the same for the EVS
rm(list=ls())
load("./data/final_data/regression_outputs/evs_list_interactions_w_new.RData")

# Store the results in a new dataframe
evs_indep_interactions_df <- data.frame(dep_var = character())

# Loop over the list of models
for (i in seq_along(evs_list_interactions)) {

  # Extract the dependent variable so that we know for which dep var the effects are
  dep_var <- as.character(evs_list_interactions[[i]]$mu.terms[[2]])
  
    # Summarize the model
  sum <- summary(evs_list_interactions[[i]])
  
  # Extract the interaction effects for sex, education and age
   mu_sex_est <- sum[[3]]
  mu_sex_sd <- sum[[3,2]]
  mu_isced_med_est <- sum[[4]]
  mu_isced_med_sd <- sum[[4,2]]
  mu_isced_high_est <- sum[[5]]
  mu_isced_high_sd <- sum[[5,2]]
  mu_age_est <- sum[[6]]
  mu_age_sd <- sum[[6,2]]
  
   mu_sex_est_inter <- sum[[8]]
  mu_sex_sd_inter <- sum[[8,2]]
  mu_isced_med_est_inter <- sum[[9]]
  mu_isced_med_sd_inter <- sum[[9,2]]
  mu_isced_high_est_inter <- sum[[10]]
  mu_isced_high_sd_inter <- sum[[10,2]]
  mu_age_est_inter <- sum[[7]]
  mu_age_sd_inter <- sum[[7,2]]

  # Variance
  sig_sex_est <- sum[[9]]
  sig_sex_sd <- sum[[9,2]]
  sig_isced_med_est <- sum[[10]]
  sig_isced_med_sd <- sum[[10,2]]
  sig_isced_high_est <- sum[[11]]
  sig_isced_high_sd <- sum[[11,2]]
  sig_age_est <- sum[[12]]
  sig_age_sd <- sum[[12,2]]
  
  sig_sex_est_inter <- sum[[18]]
  sig_sex_sd_inter <- sum[[18,2]]
  sig_isced_med_est_inter <- sum[[19]]
  sig_isced_med_sd_inter <- sum[[19,2]]
  sig_isced_high_est_inter <- sum[[20]]
  sig_isced_high_sd_inter <- sum[[20,2]]
  sig_age_est_inter <- sum[[17]]
  sig_age_sd_inter <- sum[[17,2]]

  # Put the results 
  evs_indep_interactions_df <- rbind(evs_indep_interactions_df, data.frame(dep_var = dep_var, mu_sex_est, mu_sex_sd, mu_isced_med_est, mu_isced_med_sd, mu_isced_high_est, mu_isced_high_sd, mu_age_est, mu_age_sd, sig_sex_est, sig_sex_sd, sig_isced_med_est, sig_isced_med_sd, sig_isced_high_est, sig_isced_high_sd, sig_age_est, sig_age_sd, mu_sex_est_inter, mu_sex_sd_inter, mu_isced_med_est_inter, mu_isced_med_sd_inter, mu_isced_high_est_inter, mu_isced_high_sd_inter, mu_age_est_inter, mu_age_sd_inter, sig_sex_est_inter, sig_sex_sd_inter, sig_isced_med_est_inter, sig_isced_med_sd_inter, sig_isced_high_est_inter, sig_isced_high_sd_inter, sig_age_est_inter, sig_age_sd_inter))
}

save(evs_indep_interactions_df, file="./data/final_data/indep_var/evs_inter_var_new.RData")

I&O Research

# Now for I&O research
rm(list=ls())
load("./data/final_data/regression_outputs/io_list_interactions_w_new.RData")

# Store the results in a new dataframe
io_indep_interactions_df <- data.frame(dep_var = character())

# Loop over the list of models
for (i in seq_along(io_list_interactions)) {

  # Extract the dependent variable so that we know for which dep var the effects are
  dep_var <- as.character(io_list_interactions[[i]]$mu.terms[[2]])
  
    # Summarize the model
  sum <- summary(io_list_interactions[[i]])
  
   mu_sex_est <- sum[[3]]
  mu_sex_sd <- sum[[3,2]]
  mu_isced_med_est <- sum[[4]]
  mu_isced_med_sd <- sum[[4,2]]
  mu_isced_high_est <- sum[[5]]
  mu_isced_high_sd <- sum[[5,2]]
  mu_age_est <- sum[[6]]
  mu_age_sd <- sum[[6,2]]
  
   mu_sex_est_inter <- sum[[8]]
  mu_sex_sd_inter <- sum[[8,2]]
  mu_isced_med_est_inter <- sum[[9]]
  mu_isced_med_sd_inter <- sum[[9,2]]
  mu_isced_high_est_inter <- sum[[10]]
  mu_isced_high_sd_inter <- sum[[10,2]]
  mu_age_est_inter <- sum[[7]]
  mu_age_sd_inter <- sum[[7,2]]

  # Variance
  sig_sex_est <- sum[[9]]
  sig_sex_sd <- sum[[9,2]]
  sig_isced_med_est <- sum[[10]]
  sig_isced_med_sd <- sum[[10,2]]
  sig_isced_high_est <- sum[[11]]
  sig_isced_high_sd <- sum[[11,2]]
  sig_age_est <- sum[[12]]
  sig_age_sd <- sum[[12,2]]
  
  sig_sex_est_inter <- sum[[18]]
  sig_sex_sd_inter <- sum[[18,2]]
  sig_isced_med_est_inter <- sum[[19]]
  sig_isced_med_sd_inter <- sum[[19,2]]
  sig_isced_high_est_inter <- sum[[20]]
  sig_isced_high_sd_inter <- sum[[20,2]]
  sig_age_est_inter <- sum[[17]]
  sig_age_sd_inter <- sum[[17,2]]

  
  # Put the results 
  io_indep_interactions_df <- rbind(io_indep_interactions_df, data.frame(dep_var = dep_var, mu_sex_est, mu_sex_sd, mu_isced_med_est, mu_isced_med_sd, mu_isced_high_est, mu_isced_high_sd, mu_age_est, mu_age_sd, sig_sex_est, sig_sex_sd, sig_isced_med_est, sig_isced_med_sd, sig_isced_high_est, sig_isced_high_sd, sig_age_est, sig_age_sd, mu_sex_est_inter, mu_sex_sd_inter, mu_isced_med_est_inter, mu_isced_med_sd_inter, mu_isced_high_est_inter, mu_isced_high_sd_inter, mu_age_est_inter, mu_age_sd_inter, sig_sex_est_inter, sig_sex_sd_inter, sig_isced_med_est_inter, sig_isced_med_sd_inter, sig_isced_high_est_inter, sig_isced_high_sd_inter, sig_age_est_inter, sig_age_sd_inter))
}

save(io_indep_interactions_df, file="./data/final_data/indep_var/io_inter_var_new.RData")

ISSP

# Now for ISSP, which has to happen twice (bc 2 subsets based on dependent vars)
rm(list=ls())
load("./data/final_data/regression_outputs/issp_list_interactions_w_new.RData")

# Store the results in a new dataframe
issp_indep_interactions_df <- data.frame(dep_var = character())

# Loop over the list of models
for (i in seq_along(issp_list_interactions)) {

  # Extract the dependent variable so that we know for which dep var the effects are
  dep_var <- as.character(issp_list_interactions[[i]]$mu.terms[[2]])
  
    # Summarize the model
  sum <- summary(issp_list_interactions[[i]])
  
  # Extract the intercept and standard deviatisspn for mu and sigma
     mu_sex_est <- sum[[3]]
  mu_sex_sd <- sum[[3,2]]
  mu_isced_med_est <- sum[[4]]
  mu_isced_med_sd <- sum[[4,2]]
  mu_isced_high_est <- sum[[5]]
  mu_isced_high_sd <- sum[[5,2]]
  mu_age_est <- sum[[6]]
  mu_age_sd <- sum[[6,2]]
  
   mu_sex_est_inter <- sum[[8]]
  mu_sex_sd_inter <- sum[[8,2]]
  mu_isced_med_est_inter <- sum[[9]]
  mu_isced_med_sd_inter <- sum[[9,2]]
  mu_isced_high_est_inter <- sum[[10]]
  mu_isced_high_sd_inter <- sum[[10,2]]
  mu_age_est_inter <- sum[[7]]
  mu_age_sd_inter <- sum[[7,2]]

  # Variance
  sig_sex_est <- sum[[9]]
  sig_sex_sd <- sum[[9,2]]
  sig_isced_med_est <- sum[[10]]
  sig_isced_med_sd <- sum[[10,2]]
  sig_isced_high_est <- sum[[11]]
  sig_isced_high_sd <- sum[[11,2]]
  sig_age_est <- sum[[12]]
  sig_age_sd <- sum[[12,2]]
  
  sig_sex_est_inter <- sum[[18]]
  sig_sex_sd_inter <- sum[[18,2]]
  sig_isced_med_est_inter <- sum[[19]]
  sig_isced_med_sd_inter <- sum[[19,2]]
  sig_isced_high_est_inter <- sum[[20]]
  sig_isced_high_sd_inter <- sum[[20,2]]
  sig_age_est_inter <- sum[[17]]
  sig_age_sd_inter <- sum[[17,2]]

  
  # Put the results 
  issp_indep_interactions_df <- rbind(issp_indep_interactions_df, data.frame(dep_var = dep_var, mu_sex_est, mu_sex_sd, mu_isced_med_est, mu_isced_med_sd, mu_isced_high_est, mu_isced_high_sd, mu_age_est, mu_age_sd, sig_sex_est, sig_sex_sd, sig_isced_med_est, sig_isced_med_sd, sig_isced_high_est, sig_isced_high_sd, sig_age_est, sig_age_sd, mu_sex_est_inter, mu_sex_sd_inter, mu_isced_med_est_inter, mu_isced_med_sd_inter, mu_isced_high_est_inter, mu_isced_high_sd_inter, mu_age_est_inter, mu_age_sd_inter, sig_sex_est_inter, sig_sex_sd_inter, sig_isced_med_est_inter, sig_isced_med_sd_inter, sig_isced_high_est_inter, sig_isced_high_sd_inter, sig_age_est_inter, sig_age_sd_inter))
}

save(issp_indep_interactions_df, file="./data/final_data/indep_var/issp_inter_var_new.RData")

# For the other indep vars as well
rm(list=ls())
load("./data/final_data/regression_outputs/issp_list_interactions_2_waves_w_new.RData")

# Store the results in a new dataframe
issp_2_indep_interactions_df <- data.frame(dep_var = character())

# Loop over the list of models
for (i in seq_along(issp_list_interactions_2_waves)) {

  # Extract the dependent variable so that we know for which dep var the effects are
  dep_var <- as.character(issp_list_interactions_2_waves[[i]]$mu.terms[[2]])
  
    # Summarize the model
  sum <- summary(issp_list_interactions_2_waves[[i]])
  
  # Extract the intercept and standard deviation for mu and sigma
     mu_sex_est <- sum[[3]]
  mu_sex_sd <- sum[[3,2]]
  mu_isced_med_est <- sum[[4]]
  mu_isced_med_sd <- sum[[4,2]]
  mu_isced_high_est <- sum[[5]]
  mu_isced_high_sd <- sum[[5,2]]
  mu_age_est <- sum[[6]]
  mu_age_sd <- sum[[6,2]]
  
   mu_sex_est_inter <- sum[[8]]
  mu_sex_sd_inter <- sum[[8,2]]
  mu_isced_med_est_inter <- sum[[9]]
  mu_isced_med_sd_inter <- sum[[9,2]]
  mu_isced_high_est_inter <- sum[[10]]
  mu_isced_high_sd_inter <- sum[[10,2]]
  mu_age_est_inter <- sum[[7]]
  mu_age_sd_inter <- sum[[7,2]]

  # Variance
  sig_sex_est <- sum[[9]]
  sig_sex_sd <- sum[[9,2]]
  sig_isced_med_est <- sum[[10]]
  sig_isced_med_sd <- sum[[10,2]]
  sig_isced_high_est <- sum[[11]]
  sig_isced_high_sd <- sum[[11,2]]
  sig_age_est <- sum[[12]]
  sig_age_sd <- sum[[12,2]]
  
  sig_sex_est_inter <- sum[[18]]
  sig_sex_sd_inter <- sum[[18,2]]
  sig_isced_med_est_inter <- sum[[19]]
  sig_isced_med_sd_inter <- sum[[19,2]]
  sig_isced_high_est_inter <- sum[[20]]
  sig_isced_high_sd_inter <- sum[[20,2]]
  sig_age_est_inter <- sum[[17]]
  sig_age_sd_inter <- sum[[17,2]]

  
  # Put the results 
  issp_2_indep_interactions_df <- rbind(issp_2_indep_interactions_df, data.frame(dep_var = dep_var, mu_sex_est, mu_sex_sd, mu_isced_med_est, mu_isced_med_sd, mu_isced_high_est, mu_isced_high_sd, mu_age_est, mu_age_sd, sig_sex_est, sig_sex_sd, sig_isced_med_est, sig_isced_med_sd, sig_isced_high_est, sig_isced_high_sd, sig_age_est, sig_age_sd, mu_sex_est_inter, mu_sex_sd_inter, mu_isced_med_est_inter, mu_isced_med_sd_inter, mu_isced_high_est_inter, mu_isced_high_sd_inter, mu_age_est_inter, mu_age_sd_inter, sig_sex_est_inter, sig_sex_sd_inter, sig_isced_med_est_inter, sig_isced_med_sd_inter, sig_isced_high_est_inter, sig_isced_high_sd_inter, sig_age_est_inter, sig_age_sd_inter))
}

save(issp_2_indep_interactions_df, file="./data/final_data/indep_var/issp_2_inter_var_new.RData")

EB

# Unfortunately, the loop I used in the other scripts does not seem to work for the interaction effects, so I need to do them one by one
rm(list=ls())
load("./data/final_data/regression_outputs/eb_list_interactions_1986_w_new.RData")

# Store the results in a new dataframe
eb_interactions_1986_df <- data.frame(dep_var = character())

# Loop over the list 
for (i in seq_along(eb_list_interactions_1986)) {

  # Extract the dependent variable so that we know for which dep var the effects are
  dep_var <- as.character(eb_list_interactions_1986[[i]]$mu.terms[[2]])
  
    # Summarize the model
  sum <- summary(eb_list_interactions_1986[[i]])
  
  # Extract info
     mu_sex_est <- sum[[3]]
  mu_sex_sd <- sum[[3,2]]
  mu_isced_med_est <- sum[[4]]
  mu_isced_med_sd <- sum[[4,2]]
  mu_isced_high_est <- sum[[5]]
  mu_isced_high_sd <- sum[[5,2]]
  mu_age_est <- sum[[6]]
  mu_age_sd <- sum[[6,2]]
  
   mu_sex_est_inter <- sum[[8]]
  mu_sex_sd_inter <- sum[[8,2]]
  mu_isced_med_est_inter <- sum[[9]]
  mu_isced_med_sd_inter <- sum[[9,2]]
  mu_isced_high_est_inter <- sum[[10]]
  mu_isced_high_sd_inter <- sum[[10,2]]
  mu_age_est_inter <- sum[[7]]
  mu_age_sd_inter <- sum[[7,2]]

  # Variance
  sig_sex_est <- sum[[9]]
  sig_sex_sd <- sum[[9,2]]
  sig_isced_med_est <- sum[[10]]
  sig_isced_med_sd <- sum[[10,2]]
  sig_isced_high_est <- sum[[11]]
  sig_isced_high_sd <- sum[[11,2]]
  sig_age_est <- sum[[12]]
  sig_age_sd <- sum[[12,2]]
  
  sig_sex_est_inter <- sum[[18]]
  sig_sex_sd_inter <- sum[[18,2]]
  sig_isced_med_est_inter <- sum[[19]]
  sig_isced_med_sd_inter <- sum[[19,2]]
  sig_isced_high_est_inter <- sum[[20]]
  sig_isced_high_sd_inter <- sum[[20,2]]
  sig_age_est_inter <- sum[[17]]
  sig_age_sd_inter <- sum[[17,2]]


  # Put the results in a dataframe
  eb_interactions_1986_df <- rbind(eb_interactions_1986_df, data.frame(dep_var = dep_var, mu_sex_est, mu_sex_sd, mu_isced_med_est, mu_isced_med_sd, mu_isced_high_est, mu_isced_high_sd, mu_age_est, mu_age_sd, sig_sex_est, sig_sex_sd, sig_isced_med_est, sig_isced_med_sd, sig_isced_high_est, sig_isced_high_sd, sig_age_est, sig_age_sd, mu_sex_est_inter, mu_sex_sd_inter, mu_isced_med_est_inter, mu_isced_med_sd_inter, mu_isced_high_est_inter, mu_isced_high_sd_inter, mu_age_est_inter, mu_age_sd_inter, sig_sex_est_inter, sig_sex_sd_inter, sig_isced_med_est_inter, sig_isced_med_sd_inter, sig_isced_high_est_inter, sig_isced_high_sd_inter, sig_age_est_inter, sig_age_sd_inter))
}

save(eb_interactions_1986_df, file="./data/final_data/indep_var/eb_1986_inter_var_new.RData")
# Extract the indep vars from the regressions Eurobarometer one by one
rm(list=ls())
load("./data/final_data/regression_outputs/eb_list_interactions_2007_w_new.RData")
load("./data/final_data/regression_outputs/eb_list_interactions_2008_w_new.RData")
load("./data/final_data/regression_outputs/eb_list_interactions_2009_w_new.RData")
load("./data/final_data/regression_outputs/eb_list_interactions_2011_w_new.RData")
load("./data/final_data/regression_outputs/eb_list_interactions_buyprod_w_new.RData")
load("./data/final_data/regression_outputs/eb_list_interactions_cchange2_w_new.RData")
load("./data/final_data/regression_outputs/eb_list_interactions_doprot_w_new.RData")
load("./data/final_data/regression_outputs/eb_list_interactions_eff_daily_w_new.RData")
load("./data/final_data/regression_outputs/eb_list_interactions_pers_imp_w_new.RData")
load("./data/final_data/regression_outputs/eb_list_interactions_prsaction_w_new.RData")
load("./data/final_data/regression_outputs/eb_list_interactions_quallife_w_new.RData")
load("./data/final_data/regression_outputs/eb_list_interactions_doprot_city_w_new.RData")


  # Store the results in a new dataframe
eb_indep_interactions_2007_df <- data.frame(dep_var = character())

# Loop over the list 
for (i in seq_along(eb_list_interactions_2007)) {

  # Extract the dependent variable so that we know for which dep var the effects are
  dep_var <- as.character(eb_list_interactions_2007[[i]]$mu.terms[[2]])
  
    # Summarize the model
  sum <- summary(eb_list_interactions_2007[[i]])
  
     mu_sex_est <- sum[[3]]
  mu_sex_sd <- sum[[3,2]]
  mu_isced_med_est <- sum[[4]]
  mu_isced_med_sd <- sum[[4,2]]
  mu_isced_high_est <- sum[[5]]
  mu_isced_high_sd <- sum[[5,2]]
  mu_age_est <- sum[[6]]
  mu_age_sd <- sum[[6,2]]
  
   mu_sex_est_inter <- sum[[8]]
  mu_sex_sd_inter <- sum[[8,2]]
  mu_isced_med_est_inter <- sum[[9]]
  mu_isced_med_sd_inter <- sum[[9,2]]
  mu_isced_high_est_inter <- sum[[10]]
  mu_isced_high_sd_inter <- sum[[10,2]]
  mu_age_est_inter <- sum[[7]]
  mu_age_sd_inter <- sum[[7,2]]

  # Variance
  sig_sex_est <- sum[[9]]
  sig_sex_sd <- sum[[9,2]]
  sig_isced_med_est <- sum[[10]]
  sig_isced_med_sd <- sum[[10,2]]
  sig_isced_high_est <- sum[[11]]
  sig_isced_high_sd <- sum[[11,2]]
  sig_age_est <- sum[[12]]
  sig_age_sd <- sum[[12,2]]
  
  sig_sex_est_inter <- sum[[18]]
  sig_sex_sd_inter <- sum[[18,2]]
  sig_isced_med_est_inter <- sum[[19]]
  sig_isced_med_sd_inter <- sum[[19,2]]
  sig_isced_high_est_inter <- sum[[20]]
  sig_isced_high_sd_inter <- sum[[20,2]]
  sig_age_est_inter <- sum[[17]]
  sig_age_sd_inter <- sum[[17,2]]


  # Put the results in a dataframe
  eb_indep_interactions_2007_df <- rbind(eb_indep_interactions_2007_df, data.frame(dep_var = dep_var, mu_sex_est, mu_sex_sd, mu_isced_med_est, mu_isced_med_sd, mu_isced_high_est, mu_isced_high_sd, mu_age_est, mu_age_sd, sig_sex_est, sig_sex_sd, sig_isced_med_est, sig_isced_med_sd, sig_isced_high_est, sig_isced_high_sd, sig_age_est, sig_age_sd, mu_sex_est_inter, mu_sex_sd_inter, mu_isced_med_est_inter, mu_isced_med_sd_inter, mu_isced_high_est_inter, mu_isced_high_sd_inter, mu_age_est_inter, mu_age_sd_inter, sig_sex_est_inter, sig_sex_sd_inter, sig_isced_med_est_inter, sig_isced_med_sd_inter, sig_isced_high_est_inter, sig_isced_high_sd_inter, sig_age_est_inter, sig_age_sd_inter))
    }
# 2008

  # Store the results in a new dataframe
eb_indep_interactions_2008_df <- data.frame(dep_var = character())

# Loop over the list 
for (i in seq_along(eb_list_interactions_2008)) {

  # Extract the dependent variable so that we know for which dep var the effects are
  dep_var <- as.character(eb_list_interactions_2008[[i]]$mu.terms[[2]])
  
    # Summarize the model
  sum <- summary(eb_list_interactions_2008[[i]])
  
     mu_sex_est <- sum[[3]]
  mu_sex_sd <- sum[[3,2]]
  mu_isced_med_est <- sum[[4]]
  mu_isced_med_sd <- sum[[4,2]]
  mu_isced_high_est <- sum[[5]]
  mu_isced_high_sd <- sum[[5,2]]
  mu_age_est <- sum[[6]]
  mu_age_sd <- sum[[6,2]]
  
   mu_sex_est_inter <- sum[[8]]
  mu_sex_sd_inter <- sum[[8,2]]
  mu_isced_med_est_inter <- sum[[9]]
  mu_isced_med_sd_inter <- sum[[9,2]]
  mu_isced_high_est_inter <- sum[[10]]
  mu_isced_high_sd_inter <- sum[[10,2]]
  mu_age_est_inter <- sum[[7]]
  mu_age_sd_inter <- sum[[7,2]]

  # Variance
  sig_sex_est <- sum[[9]]
  sig_sex_sd <- sum[[9,2]]
  sig_isced_med_est <- sum[[10]]
  sig_isced_med_sd <- sum[[10,2]]
  sig_isced_high_est <- sum[[11]]
  sig_isced_high_sd <- sum[[11,2]]
  sig_age_est <- sum[[12]]
  sig_age_sd <- sum[[12,2]]
  
  sig_sex_est_inter <- sum[[18]]
  sig_sex_sd_inter <- sum[[18,2]]
  sig_isced_med_est_inter <- sum[[19]]
  sig_isced_med_sd_inter <- sum[[19,2]]
  sig_isced_high_est_inter <- sum[[20]]
  sig_isced_high_sd_inter <- sum[[20,2]]
  sig_age_est_inter <- sum[[17]]
  sig_age_sd_inter <- sum[[17,2]]


  # Put the results in a dataframe
  eb_indep_interactions_2008_df <- rbind(eb_indep_interactions_2008_df, data.frame(dep_var = dep_var, mu_sex_est, mu_sex_sd, mu_isced_med_est, mu_isced_med_sd, mu_isced_high_est, mu_isced_high_sd, mu_age_est, mu_age_sd, sig_sex_est, sig_sex_sd, sig_isced_med_est, sig_isced_med_sd, sig_isced_high_est, sig_isced_high_sd, sig_age_est, sig_age_sd, mu_sex_est_inter, mu_sex_sd_inter, mu_isced_med_est_inter, mu_isced_med_sd_inter, mu_isced_high_est_inter, mu_isced_high_sd_inter, mu_age_est_inter, mu_age_sd_inter, sig_sex_est_inter, sig_sex_sd_inter, sig_isced_med_est_inter, sig_isced_med_sd_inter, sig_isced_high_est_inter, sig_isced_high_sd_inter, sig_age_est_inter, sig_age_sd_inter))
    }
# Store the results in a new dataframe
eb_indep_interactions_2009_df <- data.frame(dep_var = character())

# Loop over the list 
for (i in seq_along(eb_list_interactions_2009)) {

  # Extract the dependent variable so that we know for which dep var the effects are
  dep_var <- as.character(eb_list_interactions_2009[[i]]$mu.terms[[2]])
  
    # Summarize the model
  sum <- summary(eb_list_interactions_2009[[i]])
  
     mu_sex_est <- sum[[3]]
  mu_sex_sd <- sum[[3,2]]
  mu_isced_med_est <- sum[[4]]
  mu_isced_med_sd <- sum[[4,2]]
  mu_isced_high_est <- sum[[5]]
  mu_isced_high_sd <- sum[[5,2]]
  mu_age_est <- sum[[6]]
  mu_age_sd <- sum[[6,2]]
  
   mu_sex_est_inter <- sum[[8]]
  mu_sex_sd_inter <- sum[[8,2]]
  mu_isced_med_est_inter <- sum[[9]]
  mu_isced_med_sd_inter <- sum[[9,2]]
  mu_isced_high_est_inter <- sum[[10]]
  mu_isced_high_sd_inter <- sum[[10,2]]
  mu_age_est_inter <- sum[[7]]
  mu_age_sd_inter <- sum[[7,2]]

  # Variance
  sig_sex_est <- sum[[9]]
  sig_sex_sd <- sum[[9,2]]
  sig_isced_med_est <- sum[[10]]
  sig_isced_med_sd <- sum[[10,2]]
  sig_isced_high_est <- sum[[11]]
  sig_isced_high_sd <- sum[[11,2]]
  sig_age_est <- sum[[12]]
  sig_age_sd <- sum[[12,2]]
  
  sig_sex_est_inter <- sum[[18]]
  sig_sex_sd_inter <- sum[[18,2]]
  sig_isced_med_est_inter <- sum[[19]]
  sig_isced_med_sd_inter <- sum[[19,2]]
  sig_isced_high_est_inter <- sum[[20]]
  sig_isced_high_sd_inter <- sum[[20,2]]
  sig_age_est_inter <- sum[[17]]
  sig_age_sd_inter <- sum[[17,2]]


  # Put the results in a dataframe
  eb_indep_interactions_2009_df <- rbind(eb_indep_interactions_2009_df, data.frame(dep_var = dep_var, mu_sex_est, mu_sex_sd, mu_isced_med_est, mu_isced_med_sd, mu_isced_high_est, mu_isced_high_sd, mu_age_est, mu_age_sd, sig_sex_est, sig_sex_sd, sig_isced_med_est, sig_isced_med_sd, sig_isced_high_est, sig_isced_high_sd, sig_age_est, sig_age_sd, mu_sex_est_inter, mu_sex_sd_inter, mu_isced_med_est_inter, mu_isced_med_sd_inter, mu_isced_high_est_inter, mu_isced_high_sd_inter, mu_age_est_inter, mu_age_sd_inter, sig_sex_est_inter, sig_sex_sd_inter, sig_isced_med_est_inter, sig_isced_med_sd_inter, sig_isced_high_est_inter, sig_isced_high_sd_inter, sig_age_est_inter, sig_age_sd_inter))
    }
# Store the results in a new dataframe
eb_indep_interactions_2011_df <- data.frame(dep_var = character())

# Loop over the list 
for (i in seq_along(eb_list_interactions_2011)) {

  # Extract the dependent variable so that we know for which dep var the effects are
  dep_var <- as.character(eb_list_interactions_2011[[i]]$mu.terms[[2]])
  
    # Summarize the model
  sum <- summary(eb_list_interactions_2011[[i]])
  
     mu_sex_est <- sum[[3]]
  mu_sex_sd <- sum[[3,2]]
  mu_isced_med_est <- sum[[4]]
  mu_isced_med_sd <- sum[[4,2]]
  mu_isced_high_est <- sum[[5]]
  mu_isced_high_sd <- sum[[5,2]]
  mu_age_est <- sum[[6]]
  mu_age_sd <- sum[[6,2]]
  
   mu_sex_est_inter <- sum[[8]]
  mu_sex_sd_inter <- sum[[8,2]]
  mu_isced_med_est_inter <- sum[[9]]
  mu_isced_med_sd_inter <- sum[[9,2]]
  mu_isced_high_est_inter <- sum[[10]]
  mu_isced_high_sd_inter <- sum[[10,2]]
  mu_age_est_inter <- sum[[7]]
  mu_age_sd_inter <- sum[[7,2]]

  # Variance
  sig_sex_est <- sum[[9]]
  sig_sex_sd <- sum[[9,2]]
  sig_isced_med_est <- sum[[10]]
  sig_isced_med_sd <- sum[[10,2]]
  sig_isced_high_est <- sum[[11]]
  sig_isced_high_sd <- sum[[11,2]]
  sig_age_est <- sum[[12]]
  sig_age_sd <- sum[[12,2]]
  
  sig_sex_est_inter <- sum[[18]]
  sig_sex_sd_inter <- sum[[18,2]]
  sig_isced_med_est_inter <- sum[[19]]
  sig_isced_med_sd_inter <- sum[[19,2]]
  sig_isced_high_est_inter <- sum[[20]]
  sig_isced_high_sd_inter <- sum[[20,2]]
  sig_age_est_inter <- sum[[17]]
  sig_age_sd_inter <- sum[[17,2]]


  # Put the results in a dataframe
  eb_indep_interactions_2011_df <- rbind(eb_indep_interactions_2011_df, data.frame(dep_var = dep_var, mu_sex_est, mu_sex_sd, mu_isced_med_est, mu_isced_med_sd, mu_isced_high_est, mu_isced_high_sd, mu_age_est, mu_age_sd, sig_sex_est, sig_sex_sd, sig_isced_med_est, sig_isced_med_sd, sig_isced_high_est, sig_isced_high_sd, sig_age_est, sig_age_sd, mu_sex_est_inter, mu_sex_sd_inter, mu_isced_med_est_inter, mu_isced_med_sd_inter, mu_isced_high_est_inter, mu_isced_high_sd_inter, mu_age_est_inter, mu_age_sd_inter, sig_sex_est_inter, sig_sex_sd_inter, sig_isced_med_est_inter, sig_isced_med_sd_inter, sig_isced_high_est_inter, sig_isced_high_sd_inter, sig_age_est_inter, sig_age_sd_inter))
    }
# Store the results in a new dataframe
eb_indep_interactions_buyprod_df <- data.frame(dep_var = character())

# Loop over the list 
for (i in seq_along(eb_list_interactions_buyprod)) {

  # Extract the dependent variable so that we know for which dep var the effects are
  dep_var <- as.character(eb_list_interactions_buyprod[[i]]$mu.terms[[2]])
  
    # Summarize the model
  sum <- summary(eb_list_interactions_buyprod[[i]])
  
     mu_sex_est <- sum[[3]]
  mu_sex_sd <- sum[[3,2]]
  mu_isced_med_est <- sum[[4]]
  mu_isced_med_sd <- sum[[4,2]]
  mu_isced_high_est <- sum[[5]]
  mu_isced_high_sd <- sum[[5,2]]
  mu_age_est <- sum[[6]]
  mu_age_sd <- sum[[6,2]]
  
   mu_sex_est_inter <- sum[[8]]
  mu_sex_sd_inter <- sum[[8,2]]
  mu_isced_med_est_inter <- sum[[9]]
  mu_isced_med_sd_inter <- sum[[9,2]]
  mu_isced_high_est_inter <- sum[[10]]
  mu_isced_high_sd_inter <- sum[[10,2]]
  mu_age_est_inter <- sum[[7]]
  mu_age_sd_inter <- sum[[7,2]]

  # Variance
  sig_sex_est <- sum[[9]]
  sig_sex_sd <- sum[[9,2]]
  sig_isced_med_est <- sum[[10]]
  sig_isced_med_sd <- sum[[10,2]]
  sig_isced_high_est <- sum[[11]]
  sig_isced_high_sd <- sum[[11,2]]
  sig_age_est <- sum[[12]]
  sig_age_sd <- sum[[12,2]]
  
  sig_sex_est_inter <- sum[[18]]
  sig_sex_sd_inter <- sum[[18,2]]
  sig_isced_med_est_inter <- sum[[19]]
  sig_isced_med_sd_inter <- sum[[19,2]]
  sig_isced_high_est_inter <- sum[[20]]
  sig_isced_high_sd_inter <- sum[[20,2]]
  sig_age_est_inter <- sum[[17]]
  sig_age_sd_inter <- sum[[17,2]]


  # Put the results in a dataframe
  eb_indep_interactions_buyprod_df <- rbind(eb_indep_interactions_buyprod_df, data.frame(dep_var = dep_var, mu_sex_est, mu_sex_sd, mu_isced_med_est, mu_isced_med_sd, mu_isced_high_est, mu_isced_high_sd, mu_age_est, mu_age_sd, sig_sex_est, sig_sex_sd, sig_isced_med_est, sig_isced_med_sd, sig_isced_high_est, sig_isced_high_sd, sig_age_est, sig_age_sd, mu_sex_est_inter, mu_sex_sd_inter, mu_isced_med_est_inter, mu_isced_med_sd_inter, mu_isced_high_est_inter, mu_isced_high_sd_inter, mu_age_est_inter, mu_age_sd_inter, sig_sex_est_inter, sig_sex_sd_inter, sig_isced_med_est_inter, sig_isced_med_sd_inter, sig_isced_high_est_inter, sig_isced_high_sd_inter, sig_age_est_inter, sig_age_sd_inter))
    }
# Store the results in a new dataframe
eb_indep_interactions_cchange2_df <- data.frame(dep_var = character())

# Loop over the list 
for (i in seq_along(eb_list_interactions_cchange2)) {

  # Extract the dependent variable so that we know for which dep var the effects are
  dep_var <- as.character(eb_list_interactions_cchange2[[i]]$mu.terms[[2]])
  
    # Summarize the model
  sum <- summary(eb_list_interactions_cchange2[[i]])
  
     mu_sex_est <- sum[[3]]
  mu_sex_sd <- sum[[3,2]]
  mu_isced_med_est <- sum[[4]]
  mu_isced_med_sd <- sum[[4,2]]
  mu_isced_high_est <- sum[[5]]
  mu_isced_high_sd <- sum[[5,2]]
  mu_age_est <- sum[[6]]
  mu_age_sd <- sum[[6,2]]
  
   mu_sex_est_inter <- sum[[8]]
  mu_sex_sd_inter <- sum[[8,2]]
  mu_isced_med_est_inter <- sum[[9]]
  mu_isced_med_sd_inter <- sum[[9,2]]
  mu_isced_high_est_inter <- sum[[10]]
  mu_isced_high_sd_inter <- sum[[10,2]]
  mu_age_est_inter <- sum[[7]]
  mu_age_sd_inter <- sum[[7,2]]

  # Variance
  sig_sex_est <- sum[[9]]
  sig_sex_sd <- sum[[9,2]]
  sig_isced_med_est <- sum[[10]]
  sig_isced_med_sd <- sum[[10,2]]
  sig_isced_high_est <- sum[[11]]
  sig_isced_high_sd <- sum[[11,2]]
  sig_age_est <- sum[[12]]
  sig_age_sd <- sum[[12,2]]
  
  sig_sex_est_inter <- sum[[18]]
  sig_sex_sd_inter <- sum[[18,2]]
  sig_isced_med_est_inter <- sum[[19]]
  sig_isced_med_sd_inter <- sum[[19,2]]
  sig_isced_high_est_inter <- sum[[20]]
  sig_isced_high_sd_inter <- sum[[20,2]]
  sig_age_est_inter <- sum[[17]]
  sig_age_sd_inter <- sum[[17,2]]


  # Put the results in a dataframe
  eb_indep_interactions_cchange2_df <- rbind(eb_indep_interactions_cchange2_df, data.frame(dep_var = dep_var, mu_sex_est, mu_sex_sd, mu_isced_med_est, mu_isced_med_sd, mu_isced_high_est, mu_isced_high_sd, mu_age_est, mu_age_sd, sig_sex_est, sig_sex_sd, sig_isced_med_est, sig_isced_med_sd, sig_isced_high_est, sig_isced_high_sd, sig_age_est, sig_age_sd, mu_sex_est_inter, mu_sex_sd_inter, mu_isced_med_est_inter, mu_isced_med_sd_inter, mu_isced_high_est_inter, mu_isced_high_sd_inter, mu_age_est_inter, mu_age_sd_inter, sig_sex_est_inter, sig_sex_sd_inter, sig_isced_med_est_inter, sig_isced_med_sd_inter, sig_isced_high_est_inter, sig_isced_high_sd_inter, sig_age_est_inter, sig_age_sd_inter))
    }
# Store the results in a new dataframe
eb_indep_interactions_doprot_df <- data.frame(dep_var = character())

# Loop over the list 
for (i in seq_along(eb_list_interactions_doprot)) {

  # Extract the dependent variable so that we know for which dep var the effects are
  dep_var <- as.character(eb_list_interactions_doprot[[i]]$mu.terms[[2]])
  
    # Summarize the model
  sum <- summary(eb_list_interactions_doprot[[i]])
  
     mu_sex_est <- sum[[3]]
  mu_sex_sd <- sum[[3,2]]
  mu_isced_med_est <- sum[[4]]
  mu_isced_med_sd <- sum[[4,2]]
  mu_isced_high_est <- sum[[5]]
  mu_isced_high_sd <- sum[[5,2]]
  mu_age_est <- sum[[6]]
  mu_age_sd <- sum[[6,2]]
  
   mu_sex_est_inter <- sum[[8]]
  mu_sex_sd_inter <- sum[[8,2]]
  mu_isced_med_est_inter <- sum[[9]]
  mu_isced_med_sd_inter <- sum[[9,2]]
  mu_isced_high_est_inter <- sum[[10]]
  mu_isced_high_sd_inter <- sum[[10,2]]
  mu_age_est_inter <- sum[[7]]
  mu_age_sd_inter <- sum[[7,2]]

  # Variance
  sig_sex_est <- sum[[9]]
  sig_sex_sd <- sum[[9,2]]
  sig_isced_med_est <- sum[[10]]
  sig_isced_med_sd <- sum[[10,2]]
  sig_isced_high_est <- sum[[11]]
  sig_isced_high_sd <- sum[[11,2]]
  sig_age_est <- sum[[12]]
  sig_age_sd <- sum[[12,2]]
  
  sig_sex_est_inter <- sum[[18]]
  sig_sex_sd_inter <- sum[[18,2]]
  sig_isced_med_est_inter <- sum[[19]]
  sig_isced_med_sd_inter <- sum[[19,2]]
  sig_isced_high_est_inter <- sum[[20]]
  sig_isced_high_sd_inter <- sum[[20,2]]
  sig_age_est_inter <- sum[[17]]
  sig_age_sd_inter <- sum[[17,2]]


  # Put the results in a dataframe
  eb_indep_interactions_doprot_df <- rbind(eb_indep_interactions_doprot_df, data.frame(dep_var = dep_var, mu_sex_est, mu_sex_sd, mu_isced_med_est, mu_isced_med_sd, mu_isced_high_est, mu_isced_high_sd, mu_age_est, mu_age_sd, sig_sex_est, sig_sex_sd, sig_isced_med_est, sig_isced_med_sd, sig_isced_high_est, sig_isced_high_sd, sig_age_est, sig_age_sd, mu_sex_est_inter, mu_sex_sd_inter, mu_isced_med_est_inter, mu_isced_med_sd_inter, mu_isced_high_est_inter, mu_isced_high_sd_inter, mu_age_est_inter, mu_age_sd_inter, sig_sex_est_inter, sig_sex_sd_inter, sig_isced_med_est_inter, sig_isced_med_sd_inter, sig_isced_high_est_inter, sig_isced_high_sd_inter, sig_age_est_inter, sig_age_sd_inter))
    }
# Store the results in a new dataframe
eb_indep_interactions_doprot_city_df <- data.frame(dep_var = character())

# Loop over the list 
for (i in seq_along(eb_list_interactions_doprot_city)) {

  # Extract the dependent variable so that we know for which dep var the effects are
  dep_var <- as.character(eb_list_interactions_doprot_city[[i]]$mu.terms[[2]])
  
    # Summarize the model
  sum <- summary(eb_list_interactions_doprot_city[[i]])
  
     mu_sex_est <- sum[[3]]
  mu_sex_sd <- sum[[3,2]]
  mu_isced_med_est <- sum[[4]]
  mu_isced_med_sd <- sum[[4,2]]
  mu_isced_high_est <- sum[[5]]
  mu_isced_high_sd <- sum[[5,2]]
  mu_age_est <- sum[[6]]
  mu_age_sd <- sum[[6,2]]
  
   mu_sex_est_inter <- sum[[8]]
  mu_sex_sd_inter <- sum[[8,2]]
  mu_isced_med_est_inter <- sum[[9]]
  mu_isced_med_sd_inter <- sum[[9,2]]
  mu_isced_high_est_inter <- sum[[10]]
  mu_isced_high_sd_inter <- sum[[10,2]]
  mu_age_est_inter <- sum[[7]]
  mu_age_sd_inter <- sum[[7,2]]

  # Variance
  sig_sex_est <- sum[[9]]
  sig_sex_sd <- sum[[9,2]]
  sig_isced_med_est <- sum[[10]]
  sig_isced_med_sd <- sum[[10,2]]
  sig_isced_high_est <- sum[[11]]
  sig_isced_high_sd <- sum[[11,2]]
  sig_age_est <- sum[[12]]
  sig_age_sd <- sum[[12,2]]
  
  sig_sex_est_inter <- sum[[18]]
  sig_sex_sd_inter <- sum[[18,2]]
  sig_isced_med_est_inter <- sum[[19]]
  sig_isced_med_sd_inter <- sum[[19,2]]
  sig_isced_high_est_inter <- sum[[20]]
  sig_isced_high_sd_inter <- sum[[20,2]]
  sig_age_est_inter <- sum[[17]]
  sig_age_sd_inter <- sum[[17,2]]


  # Put the results in a dataframe
  eb_indep_interactions_doprot_city_df <- rbind(eb_indep_interactions_doprot_city_df, data.frame(dep_var = dep_var, mu_sex_est, mu_sex_sd, mu_isced_med_est, mu_isced_med_sd, mu_isced_high_est, mu_isced_high_sd, mu_age_est, mu_age_sd, sig_sex_est, sig_sex_sd, sig_isced_med_est, sig_isced_med_sd, sig_isced_high_est, sig_isced_high_sd, sig_age_est, sig_age_sd, mu_sex_est_inter, mu_sex_sd_inter, mu_isced_med_est_inter, mu_isced_med_sd_inter, mu_isced_high_est_inter, mu_isced_high_sd_inter, mu_age_est_inter, mu_age_sd_inter, sig_sex_est_inter, sig_sex_sd_inter, sig_isced_med_est_inter, sig_isced_med_sd_inter, sig_isced_high_est_inter, sig_isced_high_sd_inter, sig_age_est_inter, sig_age_sd_inter))
    }
# Store the results in a new dataframe
eb_indep_interactions_eff_daily_df <- data.frame(dep_var = character())

# Loop over the list 
for (i in seq_along(eb_list_interactions_eff_daily)) {

  # Extract the dependent variable so that we know for which dep var the effects are
  dep_var <- as.character(eb_list_interactions_eff_daily[[i]]$mu.terms[[2]])
  
    # Summarize the model
  sum <- summary(eb_list_interactions_eff_daily[[i]])
  
     mu_sex_est <- sum[[3]]
  mu_sex_sd <- sum[[3,2]]
  mu_isced_med_est <- sum[[4]]
  mu_isced_med_sd <- sum[[4,2]]
  mu_isced_high_est <- sum[[5]]
  mu_isced_high_sd <- sum[[5,2]]
  mu_age_est <- sum[[6]]
  mu_age_sd <- sum[[6,2]]
  
   mu_sex_est_inter <- sum[[8]]
  mu_sex_sd_inter <- sum[[8,2]]
  mu_isced_med_est_inter <- sum[[9]]
  mu_isced_med_sd_inter <- sum[[9,2]]
  mu_isced_high_est_inter <- sum[[10]]
  mu_isced_high_sd_inter <- sum[[10,2]]
  mu_age_est_inter <- sum[[7]]
  mu_age_sd_inter <- sum[[7,2]]

  # Variance
  sig_sex_est <- sum[[9]]
  sig_sex_sd <- sum[[9,2]]
  sig_isced_med_est <- sum[[10]]
  sig_isced_med_sd <- sum[[10,2]]
  sig_isced_high_est <- sum[[11]]
  sig_isced_high_sd <- sum[[11,2]]
  sig_age_est <- sum[[12]]
  sig_age_sd <- sum[[12,2]]
  
  sig_sex_est_inter <- sum[[18]]
  sig_sex_sd_inter <- sum[[18,2]]
  sig_isced_med_est_inter <- sum[[19]]
  sig_isced_med_sd_inter <- sum[[19,2]]
  sig_isced_high_est_inter <- sum[[20]]
  sig_isced_high_sd_inter <- sum[[20,2]]
  sig_age_est_inter <- sum[[17]]
  sig_age_sd_inter <- sum[[17,2]]


  # Put the results in a dataframe
  eb_indep_interactions_eff_daily_df <- rbind(eb_indep_interactions_eff_daily_df, data.frame(dep_var = dep_var, mu_sex_est, mu_sex_sd, mu_isced_med_est, mu_isced_med_sd, mu_isced_high_est, mu_isced_high_sd, mu_age_est, mu_age_sd, sig_sex_est, sig_sex_sd, sig_isced_med_est, sig_isced_med_sd, sig_isced_high_est, sig_isced_high_sd, sig_age_est, sig_age_sd, mu_sex_est_inter, mu_sex_sd_inter, mu_isced_med_est_inter, mu_isced_med_sd_inter, mu_isced_high_est_inter, mu_isced_high_sd_inter, mu_age_est_inter, mu_age_sd_inter, sig_sex_est_inter, sig_sex_sd_inter, sig_isced_med_est_inter, sig_isced_med_sd_inter, sig_isced_high_est_inter, sig_isced_high_sd_inter, sig_age_est_inter, sig_age_sd_inter))
}
# Store the results in a new dataframe
eb_indep_interactions_pers_imp_df <- data.frame(dep_var = character())

# Loop over the list 
for (i in seq_along(eb_list_interactions_pers_imp)) {

  # Extract the dependent variable so that we know for which dep var the effects are
  dep_var <- as.character(eb_list_interactions_pers_imp[[i]]$mu.terms[[2]])
  
    # Summarize the model
  sum <- summary(eb_list_interactions_pers_imp[[i]])
  
     mu_sex_est <- sum[[3]]
  mu_sex_sd <- sum[[3,2]]
  mu_isced_med_est <- sum[[4]]
  mu_isced_med_sd <- sum[[4,2]]
  mu_isced_high_est <- sum[[5]]
  mu_isced_high_sd <- sum[[5,2]]
  mu_age_est <- sum[[6]]
  mu_age_sd <- sum[[6,2]]
  
   mu_sex_est_inter <- sum[[8]]
  mu_sex_sd_inter <- sum[[8,2]]
  mu_isced_med_est_inter <- sum[[9]]
  mu_isced_med_sd_inter <- sum[[9,2]]
  mu_isced_high_est_inter <- sum[[10]]
  mu_isced_high_sd_inter <- sum[[10,2]]
  mu_age_est_inter <- sum[[7]]
  mu_age_sd_inter <- sum[[7,2]]

  # Variance
  sig_sex_est <- sum[[9]]
  sig_sex_sd <- sum[[9,2]]
  sig_isced_med_est <- sum[[10]]
  sig_isced_med_sd <- sum[[10,2]]
  sig_isced_high_est <- sum[[11]]
  sig_isced_high_sd <- sum[[11,2]]
  sig_age_est <- sum[[12]]
  sig_age_sd <- sum[[12,2]]
  
  sig_sex_est_inter <- sum[[18]]
  sig_sex_sd_inter <- sum[[18,2]]
  sig_isced_med_est_inter <- sum[[19]]
  sig_isced_med_sd_inter <- sum[[19,2]]
  sig_isced_high_est_inter <- sum[[20]]
  sig_isced_high_sd_inter <- sum[[20,2]]
  sig_age_est_inter <- sum[[17]]
  sig_age_sd_inter <- sum[[17,2]]


  # Put the results in a dataframe
  eb_indep_interactions_pers_imp_df <- rbind(eb_indep_interactions_pers_imp_df, data.frame(dep_var = dep_var, mu_sex_est, mu_sex_sd, mu_isced_med_est, mu_isced_med_sd, mu_isced_high_est, mu_isced_high_sd, mu_age_est, mu_age_sd, sig_sex_est, sig_sex_sd, sig_isced_med_est, sig_isced_med_sd, sig_isced_high_est, sig_isced_high_sd, sig_age_est, sig_age_sd, mu_sex_est_inter, mu_sex_sd_inter, mu_isced_med_est_inter, mu_isced_med_sd_inter, mu_isced_high_est_inter, mu_isced_high_sd_inter, mu_age_est_inter, mu_age_sd_inter, sig_sex_est_inter, sig_sex_sd_inter, sig_isced_med_est_inter, sig_isced_med_sd_inter, sig_isced_high_est_inter, sig_isced_high_sd_inter, sig_age_est_inter, sig_age_sd_inter))
    }
# Store the results in a new dataframe
eb_indep_interactions_prsaction_df <- data.frame(dep_var = character())

# Loop over the list 
for (i in seq_along(eb_list_interactions_prsaction)) {

  # Extract the dependent variable so that we know for which dep var the effects are
  dep_var <- as.character(eb_list_interactions_prsaction[[i]]$mu.terms[[2]])
  
    # Summarize the model
  sum <- summary(eb_list_interactions_prsaction[[i]])
  
     mu_sex_est <- sum[[3]]
  mu_sex_sd <- sum[[3,2]]
  mu_isced_med_est <- sum[[4]]
  mu_isced_med_sd <- sum[[4,2]]
  mu_isced_high_est <- sum[[5]]
  mu_isced_high_sd <- sum[[5,2]]
  mu_age_est <- sum[[6]]
  mu_age_sd <- sum[[6,2]]
  
   mu_sex_est_inter <- sum[[8]]
  mu_sex_sd_inter <- sum[[8,2]]
  mu_isced_med_est_inter <- sum[[9]]
  mu_isced_med_sd_inter <- sum[[9,2]]
  mu_isced_high_est_inter <- sum[[10]]
  mu_isced_high_sd_inter <- sum[[10,2]]
  mu_age_est_inter <- sum[[7]]
  mu_age_sd_inter <- sum[[7,2]]

  # Variance
  sig_sex_est <- sum[[9]]
  sig_sex_sd <- sum[[9,2]]
  sig_isced_med_est <- sum[[10]]
  sig_isced_med_sd <- sum[[10,2]]
  sig_isced_high_est <- sum[[11]]
  sig_isced_high_sd <- sum[[11,2]]
  sig_age_est <- sum[[12]]
  sig_age_sd <- sum[[12,2]]
  
  sig_sex_est_inter <- sum[[18]]
  sig_sex_sd_inter <- sum[[18,2]]
  sig_isced_med_est_inter <- sum[[19]]
  sig_isced_med_sd_inter <- sum[[19,2]]
  sig_isced_high_est_inter <- sum[[20]]
  sig_isced_high_sd_inter <- sum[[20,2]]
  sig_age_est_inter <- sum[[17]]
  sig_age_sd_inter <- sum[[17,2]]


  # Put the results in a dataframe
  eb_indep_interactions_prsaction_df <- rbind(eb_indep_interactions_prsaction_df, data.frame(dep_var = dep_var, mu_sex_est, mu_sex_sd, mu_isced_med_est, mu_isced_med_sd, mu_isced_high_est, mu_isced_high_sd, mu_age_est, mu_age_sd, sig_sex_est, sig_sex_sd, sig_isced_med_est, sig_isced_med_sd, sig_isced_high_est, sig_isced_high_sd, sig_age_est, sig_age_sd, mu_sex_est_inter, mu_sex_sd_inter, mu_isced_med_est_inter, mu_isced_med_sd_inter, mu_isced_high_est_inter, mu_isced_high_sd_inter, mu_age_est_inter, mu_age_sd_inter, sig_sex_est_inter, sig_sex_sd_inter, sig_isced_med_est_inter, sig_isced_med_sd_inter, sig_isced_high_est_inter, sig_isced_high_sd_inter, sig_age_est_inter, sig_age_sd_inter))
}
# Store the results in a new dataframe
eb_indep_interactions_quallife_df <- data.frame(dep_var = character())

# Loop over the list 
for (i in seq_along(eb_list_interactions_quallife)) {

  # Extract the dependent variable so that we know for which dep var the effects are
  dep_var <- as.character(eb_list_interactions_quallife[[i]]$mu.terms[[2]])
  
    # Summarize the model
  sum <- summary(eb_list_interactions_quallife[[i]])
  
     mu_sex_est <- sum[[3]]
  mu_sex_sd <- sum[[3,2]]
  mu_isced_med_est <- sum[[4]]
  mu_isced_med_sd <- sum[[4,2]]
  mu_isced_high_est <- sum[[5]]
  mu_isced_high_sd <- sum[[5,2]]
  mu_age_est <- sum[[6]]
  mu_age_sd <- sum[[6,2]]
  
   mu_sex_est_inter <- sum[[8]]
  mu_sex_sd_inter <- sum[[8,2]]
  mu_isced_med_est_inter <- sum[[9]]
  mu_isced_med_sd_inter <- sum[[9,2]]
  mu_isced_high_est_inter <- sum[[10]]
  mu_isced_high_sd_inter <- sum[[10,2]]
  mu_age_est_inter <- sum[[7]]
  mu_age_sd_inter <- sum[[7,2]]

  # Variance
  sig_sex_est <- sum[[9]]
  sig_sex_sd <- sum[[9,2]]
  sig_isced_med_est <- sum[[10]]
  sig_isced_med_sd <- sum[[10,2]]
  sig_isced_high_est <- sum[[11]]
  sig_isced_high_sd <- sum[[11,2]]
  sig_age_est <- sum[[12]]
  sig_age_sd <- sum[[12,2]]
  
  sig_sex_est_inter <- sum[[18]]
  sig_sex_sd_inter <- sum[[18,2]]
  sig_isced_med_est_inter <- sum[[19]]
  sig_isced_med_sd_inter <- sum[[19,2]]
  sig_isced_high_est_inter <- sum[[20]]
  sig_isced_high_sd_inter <- sum[[20,2]]
  sig_age_est_inter <- sum[[17]]
  sig_age_sd_inter <- sum[[17,2]]


  # Put the results in a dataframe
  eb_indep_interactions_quallife_df <- rbind(eb_indep_interactions_quallife_df, data.frame(dep_var = dep_var, mu_sex_est, mu_sex_sd, mu_isced_med_est, mu_isced_med_sd, mu_isced_high_est, mu_isced_high_sd, mu_age_est, mu_age_sd, sig_sex_est, sig_sex_sd, sig_isced_med_est, sig_isced_med_sd, sig_isced_high_est, sig_isced_high_sd, sig_age_est, sig_age_sd, mu_sex_est_inter, mu_sex_sd_inter, mu_isced_med_est_inter, mu_isced_med_sd_inter, mu_isced_high_est_inter, mu_isced_high_sd_inter, mu_age_est_inter, mu_age_sd_inter, sig_sex_est_inter, sig_sex_sd_inter, sig_isced_med_est_inter, sig_isced_med_sd_inter, sig_isced_high_est_inter, sig_isced_high_sd_inter, sig_age_est_inter, sig_age_sd_inter))
} 

load("./data/final_data/indep_var/eb_1986_inter_var_new.RData")
eb_indep_interactions_df <- rbind(eb_interactions_1986_df, eb_indep_interactions_2007_df, eb_indep_interactions_2008_df, eb_indep_interactions_2009_df, eb_indep_interactions_2011_df, eb_indep_interactions_buyprod_df, eb_indep_interactions_cchange2_df, eb_indep_interactions_doprot_city_df, eb_indep_interactions_doprot_df, eb_indep_interactions_eff_daily_df, eb_indep_interactions_pers_imp_df, eb_indep_interactions_prsaction_df, eb_indep_interactions_quallife_df)

save(eb_indep_interactions_df, file= "./data/final_data/indep_var/eb_inter_var_new.RData" )

0.1 Merge everything into one dataset

# The final step is to merge all results into one dataframe
rm(list=ls())
load("./data/final_data/indep_var/eb_inter_var_new.RData")
load("./data/final_data/indep_var/ess_inter_var_new.RData")
load("./data/final_data/indep_var/evs_inter_var_new.RData")
load("./data/final_data/indep_var/io_inter_var_new.RData")
load("./data/final_data/indep_var/issp_2_inter_var_new.RData")
load("./data/final_data/indep_var/issp_inter_var_new.RData")


total_inter_results <- rbind(eb_indep_interactions_df, ess_inter_preds_df, evs_indep_interactions_df, io_indep_interactions_df, issp_indep_interactions_df, issp_2_indep_interactions_df) 

save(total_inter_results, file= "./data/meta_analysis/total_inter_results_new.RData" )
LS0tDQp0aXRsZTogIkV4dHJhY3QgY29lZmZpY2llbnRzIG9mIGludGVyYWN0aW9uIG1vZGVscyINCmF1dGhvcjogIkFudXNjaGthIFBlZWxlbiINCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCINCm91dHB1dDogaHRtbF9kb2N1bWVudA0KLS0tDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGV2YWwgPSBGQUxTRSkNCmtuaXRyOjpvcHRzX2NodW5rJHNldChudW1iZXJfc2VjdGlvbnMgPSBGQUxTRSkNCm9wdGlvbnMod2lkdGggPSAxMDApDQpjb2xvcml6ZSA8LSBmdW5jdGlvbih4LCBjb2xvcikge3NwcmludGYoIjxzcGFuIHN0eWxlPSdjb2xvcjogJXM7Jz4lczwvc3Bhbj4iLCBjb2xvciwgeCkgfQ0KYGBgDQoNCmBgYHtjc3MsIGVjaG89RkFMU0V9DQpwcmUgew0KICBtYXgtaGVpZ2h0OiAzMDBweDsNCiAgb3ZlcmZsb3cteTogYXV0bzsNCn0NCg0KcHJlW2NsYXNzXSB7DQogIG1heC1oZWlnaHQ6IDEwMHB4Ow0KfQ0KYGBgDQoNCkluIHRoaXMgc2NyaXB0IEkgZXh0cmFjdCB0aGUgY29lZmZpY2llbnRzIGZvciBnZW5kZXIsIGFnZSBhbmQgZWR1Y2F0aW9uIGFuZCB0aGVpciBpbnRlcmFjdGlvbiB2YXJpYWJsZXMgYW5kIHB1dCB0aGVtIGluIGEgZGF0YXNldCB0b2dldGhlciwgdG8gdXNlIHRoZW0gYXMgaW5wdXQgZm9yIHRoZSBtZXRhLXJlZ3Jlc3Npb24uDQoNCmBgYHtyfQ0Kcm0obGlzdD1scygpKQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShnYW1sc3MpDQpgYGANCg0KIyBFU1Mgey19DQoNCmBgYHtyfQ0KbG9hZCgiLi9kYXRhL2ZpbmFsX2RhdGEvcmVncmVzc2lvbl9vdXRwdXRzL2Vzc19saXN0X2ludGVyYWN0aW9uc193X25ldy5SRGF0YSIpDQoNCiMgU3RvcmUgdGhlIHJlc3VsdHMgaW4gYSBuZXcgZGF0YWZyYW1lDQplc3NfaW50ZXJfcHJlZHNfZGYgPC0gZGF0YS5mcmFtZShkZXBfdmFyID0gY2hhcmFjdGVyKCkpDQoNCiMgTG9vcCBvdmVyIHRoZSBsaXN0IG9mIG1vZGVscw0KZm9yIChpIGluIHNlcV9hbG9uZyhlc3NfbGlzdF9pbnRlcmFjdGlvbnMpKSB7DQoNCiAgIyBFeHRyYWN0IHRoZSBkZXBlbmRlbnQgdmFyaWFibGUgc28gdGhhdCB3ZSBrbm93IGZvciB3aGljaCBkZXAgdmFyIHRoZSBlZmZlY3RzIGFyZQ0KICBkZXBfdmFyIDwtIGFzLmNoYXJhY3Rlcihlc3NfbGlzdF9pbnRlcmFjdGlvbnNbW2ldXSRtdS50ZXJtc1tbMl1dKQ0KICANCiAgICAjIFN1bW1hcml6ZSB0aGUgbW9kZWwNCiAgc3VtIDwtIHN1bW1hcnkoZXNzX2xpc3RfaW50ZXJhY3Rpb25zW1tpXV0pDQogIA0KICAjIEV4dHJhY3QgdGhlIGludGVyY2VwdCBhbmQgc3RhbmRhcmQgZGV2aWF0aW9uIGZvciBtdSBhbmQgc2lnbWENCiAgIG11X3NleF9lc3QgPC0gc3VtW1szXV0NCiAgbXVfc2V4X3NkIDwtIHN1bVtbMywyXV0NCiAgbXVfaXNjZWRfbWVkX2VzdCA8LSBzdW1bWzRdXQ0KICBtdV9pc2NlZF9tZWRfc2QgPC0gc3VtW1s0LDJdXQ0KICBtdV9pc2NlZF9oaWdoX2VzdCA8LSBzdW1bWzVdXQ0KICBtdV9pc2NlZF9oaWdoX3NkIDwtIHN1bVtbNSwyXV0NCiAgbXVfYWdlX2VzdCA8LSBzdW1bWzZdXQ0KICBtdV9hZ2Vfc2QgPC0gc3VtW1s2LDJdXQ0KICANCiAgIG11X3NleF9lc3RfaW50ZXIgPC0gc3VtW1s4XV0NCiAgbXVfc2V4X3NkX2ludGVyIDwtIHN1bVtbOCwyXV0NCiAgbXVfaXNjZWRfbWVkX2VzdF9pbnRlciA8LSBzdW1bWzldXQ0KICBtdV9pc2NlZF9tZWRfc2RfaW50ZXIgPC0gc3VtW1s5LDJdXQ0KICBtdV9pc2NlZF9oaWdoX2VzdF9pbnRlciA8LSBzdW1bWzEwXV0NCiAgbXVfaXNjZWRfaGlnaF9zZF9pbnRlciA8LSBzdW1bWzEwLDJdXQ0KICBtdV9hZ2VfZXN0X2ludGVyIDwtIHN1bVtbN11dDQogIG11X2FnZV9zZF9pbnRlciA8LSBzdW1bWzcsMl1dDQoNCiAgIyBWYXJpYW5jZQ0KICBzaWdfc2V4X2VzdCA8LSBzdW1bWzldXQ0KICBzaWdfc2V4X3NkIDwtIHN1bVtbOSwyXV0NCiAgc2lnX2lzY2VkX21lZF9lc3QgPC0gc3VtW1sxMF1dDQogIHNpZ19pc2NlZF9tZWRfc2QgPC0gc3VtW1sxMCwyXV0NCiAgc2lnX2lzY2VkX2hpZ2hfZXN0IDwtIHN1bVtbMTFdXQ0KICBzaWdfaXNjZWRfaGlnaF9zZCA8LSBzdW1bWzExLDJdXQ0KICBzaWdfYWdlX2VzdCA8LSBzdW1bWzEyXV0NCiAgc2lnX2FnZV9zZCA8LSBzdW1bWzEyLDJdXQ0KICANCiAgc2lnX3NleF9lc3RfaW50ZXIgPC0gc3VtW1sxOF1dDQogIHNpZ19zZXhfc2RfaW50ZXIgPC0gc3VtW1sxOCwyXV0NCiAgc2lnX2lzY2VkX21lZF9lc3RfaW50ZXIgPC0gc3VtW1sxOV1dDQogIHNpZ19pc2NlZF9tZWRfc2RfaW50ZXIgPC0gc3VtW1sxOSwyXV0NCiAgc2lnX2lzY2VkX2hpZ2hfZXN0X2ludGVyIDwtIHN1bVtbMjBdXQ0KICBzaWdfaXNjZWRfaGlnaF9zZF9pbnRlciA8LSBzdW1bWzIwLDJdXQ0KICBzaWdfYWdlX2VzdF9pbnRlciA8LSBzdW1bWzE3XV0NCiAgc2lnX2FnZV9zZF9pbnRlciA8LSBzdW1bWzE3LDJdXQ0KDQogICMgUHV0IHRoZSByZXN1bHRzIA0KICBlc3NfaW50ZXJfcHJlZHNfZGYgPC0gcmJpbmQoZXNzX2ludGVyX3ByZWRzX2RmLCBkYXRhLmZyYW1lKGRlcF92YXIgPSBkZXBfdmFyLCBtdV9zZXhfZXN0LCBtdV9zZXhfc2QsIG11X2lzY2VkX21lZF9lc3QsIG11X2lzY2VkX21lZF9zZCwgbXVfaXNjZWRfaGlnaF9lc3QsIG11X2lzY2VkX2hpZ2hfc2QsIG11X2FnZV9lc3QsIG11X2FnZV9zZCwgc2lnX3NleF9lc3QsIHNpZ19zZXhfc2QsIHNpZ19pc2NlZF9tZWRfZXN0LCBzaWdfaXNjZWRfbWVkX3NkLCBzaWdfaXNjZWRfaGlnaF9lc3QsIHNpZ19pc2NlZF9oaWdoX3NkLCBzaWdfYWdlX2VzdCwgc2lnX2FnZV9zZCwgbXVfc2V4X2VzdF9pbnRlciwgbXVfc2V4X3NkX2ludGVyLCBtdV9pc2NlZF9tZWRfZXN0X2ludGVyLCBtdV9pc2NlZF9tZWRfc2RfaW50ZXIsIG11X2lzY2VkX2hpZ2hfZXN0X2ludGVyLCBtdV9pc2NlZF9oaWdoX3NkX2ludGVyLCBtdV9hZ2VfZXN0X2ludGVyLCBtdV9hZ2Vfc2RfaW50ZXIsIHNpZ19zZXhfZXN0X2ludGVyLCBzaWdfc2V4X3NkX2ludGVyLCBzaWdfaXNjZWRfbWVkX2VzdF9pbnRlciwgc2lnX2lzY2VkX21lZF9zZF9pbnRlciwgc2lnX2lzY2VkX2hpZ2hfZXN0X2ludGVyLCBzaWdfaXNjZWRfaGlnaF9zZF9pbnRlciwgc2lnX2FnZV9lc3RfaW50ZXIsIHNpZ19hZ2Vfc2RfaW50ZXIpKQ0KfQ0KDQpzYXZlKGVzc19pbnRlcl9wcmVkc19kZiwgZmlsZT0iLi9kYXRhL2ZpbmFsX2RhdGEvaW5kZXBfdmFyL2Vzc19pbnRlcl92YXJfbmV3LlJEYXRhIikNCg0KYGBgDQoNCiMjIEVWUyB7LX0NCg0KYGBge3J9DQojIE5vdyB0aGUgc2FtZSBmb3IgdGhlIEVWUw0Kcm0obGlzdD1scygpKQ0KbG9hZCgiLi9kYXRhL2ZpbmFsX2RhdGEvcmVncmVzc2lvbl9vdXRwdXRzL2V2c19saXN0X2ludGVyYWN0aW9uc193X25ldy5SRGF0YSIpDQoNCiMgU3RvcmUgdGhlIHJlc3VsdHMgaW4gYSBuZXcgZGF0YWZyYW1lDQpldnNfaW5kZXBfaW50ZXJhY3Rpb25zX2RmIDwtIGRhdGEuZnJhbWUoZGVwX3ZhciA9IGNoYXJhY3RlcigpKQ0KDQojIExvb3Agb3ZlciB0aGUgbGlzdCBvZiBtb2RlbHMNCmZvciAoaSBpbiBzZXFfYWxvbmcoZXZzX2xpc3RfaW50ZXJhY3Rpb25zKSkgew0KDQogICMgRXh0cmFjdCB0aGUgZGVwZW5kZW50IHZhcmlhYmxlIHNvIHRoYXQgd2Uga25vdyBmb3Igd2hpY2ggZGVwIHZhciB0aGUgZWZmZWN0cyBhcmUNCiAgZGVwX3ZhciA8LSBhcy5jaGFyYWN0ZXIoZXZzX2xpc3RfaW50ZXJhY3Rpb25zW1tpXV0kbXUudGVybXNbWzJdXSkNCiAgDQogICAgIyBTdW1tYXJpemUgdGhlIG1vZGVsDQogIHN1bSA8LSBzdW1tYXJ5KGV2c19saXN0X2ludGVyYWN0aW9uc1tbaV1dKQ0KICANCiAgIyBFeHRyYWN0IHRoZSBpbnRlcmFjdGlvbiBlZmZlY3RzIGZvciBzZXgsIGVkdWNhdGlvbiBhbmQgYWdlDQogICBtdV9zZXhfZXN0IDwtIHN1bVtbM11dDQogIG11X3NleF9zZCA8LSBzdW1bWzMsMl1dDQogIG11X2lzY2VkX21lZF9lc3QgPC0gc3VtW1s0XV0NCiAgbXVfaXNjZWRfbWVkX3NkIDwtIHN1bVtbNCwyXV0NCiAgbXVfaXNjZWRfaGlnaF9lc3QgPC0gc3VtW1s1XV0NCiAgbXVfaXNjZWRfaGlnaF9zZCA8LSBzdW1bWzUsMl1dDQogIG11X2FnZV9lc3QgPC0gc3VtW1s2XV0NCiAgbXVfYWdlX3NkIDwtIHN1bVtbNiwyXV0NCiAgDQogICBtdV9zZXhfZXN0X2ludGVyIDwtIHN1bVtbOF1dDQogIG11X3NleF9zZF9pbnRlciA8LSBzdW1bWzgsMl1dDQogIG11X2lzY2VkX21lZF9lc3RfaW50ZXIgPC0gc3VtW1s5XV0NCiAgbXVfaXNjZWRfbWVkX3NkX2ludGVyIDwtIHN1bVtbOSwyXV0NCiAgbXVfaXNjZWRfaGlnaF9lc3RfaW50ZXIgPC0gc3VtW1sxMF1dDQogIG11X2lzY2VkX2hpZ2hfc2RfaW50ZXIgPC0gc3VtW1sxMCwyXV0NCiAgbXVfYWdlX2VzdF9pbnRlciA8LSBzdW1bWzddXQ0KICBtdV9hZ2Vfc2RfaW50ZXIgPC0gc3VtW1s3LDJdXQ0KDQogICMgVmFyaWFuY2UNCiAgc2lnX3NleF9lc3QgPC0gc3VtW1s5XV0NCiAgc2lnX3NleF9zZCA8LSBzdW1bWzksMl1dDQogIHNpZ19pc2NlZF9tZWRfZXN0IDwtIHN1bVtbMTBdXQ0KICBzaWdfaXNjZWRfbWVkX3NkIDwtIHN1bVtbMTAsMl1dDQogIHNpZ19pc2NlZF9oaWdoX2VzdCA8LSBzdW1bWzExXV0NCiAgc2lnX2lzY2VkX2hpZ2hfc2QgPC0gc3VtW1sxMSwyXV0NCiAgc2lnX2FnZV9lc3QgPC0gc3VtW1sxMl1dDQogIHNpZ19hZ2Vfc2QgPC0gc3VtW1sxMiwyXV0NCiAgDQogIHNpZ19zZXhfZXN0X2ludGVyIDwtIHN1bVtbMThdXQ0KICBzaWdfc2V4X3NkX2ludGVyIDwtIHN1bVtbMTgsMl1dDQogIHNpZ19pc2NlZF9tZWRfZXN0X2ludGVyIDwtIHN1bVtbMTldXQ0KICBzaWdfaXNjZWRfbWVkX3NkX2ludGVyIDwtIHN1bVtbMTksMl1dDQogIHNpZ19pc2NlZF9oaWdoX2VzdF9pbnRlciA8LSBzdW1bWzIwXV0NCiAgc2lnX2lzY2VkX2hpZ2hfc2RfaW50ZXIgPC0gc3VtW1syMCwyXV0NCiAgc2lnX2FnZV9lc3RfaW50ZXIgPC0gc3VtW1sxN11dDQogIHNpZ19hZ2Vfc2RfaW50ZXIgPC0gc3VtW1sxNywyXV0NCg0KICAjIFB1dCB0aGUgcmVzdWx0cyANCiAgZXZzX2luZGVwX2ludGVyYWN0aW9uc19kZiA8LSByYmluZChldnNfaW5kZXBfaW50ZXJhY3Rpb25zX2RmLCBkYXRhLmZyYW1lKGRlcF92YXIgPSBkZXBfdmFyLCBtdV9zZXhfZXN0LCBtdV9zZXhfc2QsIG11X2lzY2VkX21lZF9lc3QsIG11X2lzY2VkX21lZF9zZCwgbXVfaXNjZWRfaGlnaF9lc3QsIG11X2lzY2VkX2hpZ2hfc2QsIG11X2FnZV9lc3QsIG11X2FnZV9zZCwgc2lnX3NleF9lc3QsIHNpZ19zZXhfc2QsIHNpZ19pc2NlZF9tZWRfZXN0LCBzaWdfaXNjZWRfbWVkX3NkLCBzaWdfaXNjZWRfaGlnaF9lc3QsIHNpZ19pc2NlZF9oaWdoX3NkLCBzaWdfYWdlX2VzdCwgc2lnX2FnZV9zZCwgbXVfc2V4X2VzdF9pbnRlciwgbXVfc2V4X3NkX2ludGVyLCBtdV9pc2NlZF9tZWRfZXN0X2ludGVyLCBtdV9pc2NlZF9tZWRfc2RfaW50ZXIsIG11X2lzY2VkX2hpZ2hfZXN0X2ludGVyLCBtdV9pc2NlZF9oaWdoX3NkX2ludGVyLCBtdV9hZ2VfZXN0X2ludGVyLCBtdV9hZ2Vfc2RfaW50ZXIsIHNpZ19zZXhfZXN0X2ludGVyLCBzaWdfc2V4X3NkX2ludGVyLCBzaWdfaXNjZWRfbWVkX2VzdF9pbnRlciwgc2lnX2lzY2VkX21lZF9zZF9pbnRlciwgc2lnX2lzY2VkX2hpZ2hfZXN0X2ludGVyLCBzaWdfaXNjZWRfaGlnaF9zZF9pbnRlciwgc2lnX2FnZV9lc3RfaW50ZXIsIHNpZ19hZ2Vfc2RfaW50ZXIpKQ0KfQ0KDQpzYXZlKGV2c19pbmRlcF9pbnRlcmFjdGlvbnNfZGYsIGZpbGU9Ii4vZGF0YS9maW5hbF9kYXRhL2luZGVwX3Zhci9ldnNfaW50ZXJfdmFyX25ldy5SRGF0YSIpDQpgYGANCg0KIyMgSSZPIFJlc2VhcmNoIHstfQ0KDQpgYGB7cn0NCiMgTm93IGZvciBJJk8gcmVzZWFyY2gNCnJtKGxpc3Q9bHMoKSkNCmxvYWQoIi4vZGF0YS9maW5hbF9kYXRhL3JlZ3Jlc3Npb25fb3V0cHV0cy9pb19saXN0X2ludGVyYWN0aW9uc193X25ldy5SRGF0YSIpDQoNCiMgU3RvcmUgdGhlIHJlc3VsdHMgaW4gYSBuZXcgZGF0YWZyYW1lDQppb19pbmRlcF9pbnRlcmFjdGlvbnNfZGYgPC0gZGF0YS5mcmFtZShkZXBfdmFyID0gY2hhcmFjdGVyKCkpDQoNCiMgTG9vcCBvdmVyIHRoZSBsaXN0IG9mIG1vZGVscw0KZm9yIChpIGluIHNlcV9hbG9uZyhpb19saXN0X2ludGVyYWN0aW9ucykpIHsNCg0KICAjIEV4dHJhY3QgdGhlIGRlcGVuZGVudCB2YXJpYWJsZSBzbyB0aGF0IHdlIGtub3cgZm9yIHdoaWNoIGRlcCB2YXIgdGhlIGVmZmVjdHMgYXJlDQogIGRlcF92YXIgPC0gYXMuY2hhcmFjdGVyKGlvX2xpc3RfaW50ZXJhY3Rpb25zW1tpXV0kbXUudGVybXNbWzJdXSkNCiAgDQogICAgIyBTdW1tYXJpemUgdGhlIG1vZGVsDQogIHN1bSA8LSBzdW1tYXJ5KGlvX2xpc3RfaW50ZXJhY3Rpb25zW1tpXV0pDQogIA0KICAgbXVfc2V4X2VzdCA8LSBzdW1bWzNdXQ0KICBtdV9zZXhfc2QgPC0gc3VtW1szLDJdXQ0KICBtdV9pc2NlZF9tZWRfZXN0IDwtIHN1bVtbNF1dDQogIG11X2lzY2VkX21lZF9zZCA8LSBzdW1bWzQsMl1dDQogIG11X2lzY2VkX2hpZ2hfZXN0IDwtIHN1bVtbNV1dDQogIG11X2lzY2VkX2hpZ2hfc2QgPC0gc3VtW1s1LDJdXQ0KICBtdV9hZ2VfZXN0IDwtIHN1bVtbNl1dDQogIG11X2FnZV9zZCA8LSBzdW1bWzYsMl1dDQogIA0KICAgbXVfc2V4X2VzdF9pbnRlciA8LSBzdW1bWzhdXQ0KICBtdV9zZXhfc2RfaW50ZXIgPC0gc3VtW1s4LDJdXQ0KICBtdV9pc2NlZF9tZWRfZXN0X2ludGVyIDwtIHN1bVtbOV1dDQogIG11X2lzY2VkX21lZF9zZF9pbnRlciA8LSBzdW1bWzksMl1dDQogIG11X2lzY2VkX2hpZ2hfZXN0X2ludGVyIDwtIHN1bVtbMTBdXQ0KICBtdV9pc2NlZF9oaWdoX3NkX2ludGVyIDwtIHN1bVtbMTAsMl1dDQogIG11X2FnZV9lc3RfaW50ZXIgPC0gc3VtW1s3XV0NCiAgbXVfYWdlX3NkX2ludGVyIDwtIHN1bVtbNywyXV0NCg0KICAjIFZhcmlhbmNlDQogIHNpZ19zZXhfZXN0IDwtIHN1bVtbOV1dDQogIHNpZ19zZXhfc2QgPC0gc3VtW1s5LDJdXQ0KICBzaWdfaXNjZWRfbWVkX2VzdCA8LSBzdW1bWzEwXV0NCiAgc2lnX2lzY2VkX21lZF9zZCA8LSBzdW1bWzEwLDJdXQ0KICBzaWdfaXNjZWRfaGlnaF9lc3QgPC0gc3VtW1sxMV1dDQogIHNpZ19pc2NlZF9oaWdoX3NkIDwtIHN1bVtbMTEsMl1dDQogIHNpZ19hZ2VfZXN0IDwtIHN1bVtbMTJdXQ0KICBzaWdfYWdlX3NkIDwtIHN1bVtbMTIsMl1dDQogIA0KICBzaWdfc2V4X2VzdF9pbnRlciA8LSBzdW1bWzE4XV0NCiAgc2lnX3NleF9zZF9pbnRlciA8LSBzdW1bWzE4LDJdXQ0KICBzaWdfaXNjZWRfbWVkX2VzdF9pbnRlciA8LSBzdW1bWzE5XV0NCiAgc2lnX2lzY2VkX21lZF9zZF9pbnRlciA8LSBzdW1bWzE5LDJdXQ0KICBzaWdfaXNjZWRfaGlnaF9lc3RfaW50ZXIgPC0gc3VtW1syMF1dDQogIHNpZ19pc2NlZF9oaWdoX3NkX2ludGVyIDwtIHN1bVtbMjAsMl1dDQogIHNpZ19hZ2VfZXN0X2ludGVyIDwtIHN1bVtbMTddXQ0KICBzaWdfYWdlX3NkX2ludGVyIDwtIHN1bVtbMTcsMl1dDQoNCiAgDQogICMgUHV0IHRoZSByZXN1bHRzIA0KICBpb19pbmRlcF9pbnRlcmFjdGlvbnNfZGYgPC0gcmJpbmQoaW9faW5kZXBfaW50ZXJhY3Rpb25zX2RmLCBkYXRhLmZyYW1lKGRlcF92YXIgPSBkZXBfdmFyLCBtdV9zZXhfZXN0LCBtdV9zZXhfc2QsIG11X2lzY2VkX21lZF9lc3QsIG11X2lzY2VkX21lZF9zZCwgbXVfaXNjZWRfaGlnaF9lc3QsIG11X2lzY2VkX2hpZ2hfc2QsIG11X2FnZV9lc3QsIG11X2FnZV9zZCwgc2lnX3NleF9lc3QsIHNpZ19zZXhfc2QsIHNpZ19pc2NlZF9tZWRfZXN0LCBzaWdfaXNjZWRfbWVkX3NkLCBzaWdfaXNjZWRfaGlnaF9lc3QsIHNpZ19pc2NlZF9oaWdoX3NkLCBzaWdfYWdlX2VzdCwgc2lnX2FnZV9zZCwgbXVfc2V4X2VzdF9pbnRlciwgbXVfc2V4X3NkX2ludGVyLCBtdV9pc2NlZF9tZWRfZXN0X2ludGVyLCBtdV9pc2NlZF9tZWRfc2RfaW50ZXIsIG11X2lzY2VkX2hpZ2hfZXN0X2ludGVyLCBtdV9pc2NlZF9oaWdoX3NkX2ludGVyLCBtdV9hZ2VfZXN0X2ludGVyLCBtdV9hZ2Vfc2RfaW50ZXIsIHNpZ19zZXhfZXN0X2ludGVyLCBzaWdfc2V4X3NkX2ludGVyLCBzaWdfaXNjZWRfbWVkX2VzdF9pbnRlciwgc2lnX2lzY2VkX21lZF9zZF9pbnRlciwgc2lnX2lzY2VkX2hpZ2hfZXN0X2ludGVyLCBzaWdfaXNjZWRfaGlnaF9zZF9pbnRlciwgc2lnX2FnZV9lc3RfaW50ZXIsIHNpZ19hZ2Vfc2RfaW50ZXIpKQ0KfQ0KDQpzYXZlKGlvX2luZGVwX2ludGVyYWN0aW9uc19kZiwgZmlsZT0iLi9kYXRhL2ZpbmFsX2RhdGEvaW5kZXBfdmFyL2lvX2ludGVyX3Zhcl9uZXcuUkRhdGEiKQ0KDQpgYGANCg0KIyMgSVNTUCB7LX0NCg0KYGBge3J9DQojIE5vdyBmb3IgSVNTUCwgd2hpY2ggaGFzIHRvIGhhcHBlbiB0d2ljZSAoYmMgMiBzdWJzZXRzIGJhc2VkIG9uIGRlcGVuZGVudCB2YXJzKQ0Kcm0obGlzdD1scygpKQ0KbG9hZCgiLi9kYXRhL2ZpbmFsX2RhdGEvcmVncmVzc2lvbl9vdXRwdXRzL2lzc3BfbGlzdF9pbnRlcmFjdGlvbnNfd19uZXcuUkRhdGEiKQ0KDQojIFN0b3JlIHRoZSByZXN1bHRzIGluIGEgbmV3IGRhdGFmcmFtZQ0KaXNzcF9pbmRlcF9pbnRlcmFjdGlvbnNfZGYgPC0gZGF0YS5mcmFtZShkZXBfdmFyID0gY2hhcmFjdGVyKCkpDQoNCiMgTG9vcCBvdmVyIHRoZSBsaXN0IG9mIG1vZGVscw0KZm9yIChpIGluIHNlcV9hbG9uZyhpc3NwX2xpc3RfaW50ZXJhY3Rpb25zKSkgew0KDQogICMgRXh0cmFjdCB0aGUgZGVwZW5kZW50IHZhcmlhYmxlIHNvIHRoYXQgd2Uga25vdyBmb3Igd2hpY2ggZGVwIHZhciB0aGUgZWZmZWN0cyBhcmUNCiAgZGVwX3ZhciA8LSBhcy5jaGFyYWN0ZXIoaXNzcF9saXN0X2ludGVyYWN0aW9uc1tbaV1dJG11LnRlcm1zW1syXV0pDQogIA0KICAgICMgU3VtbWFyaXplIHRoZSBtb2RlbA0KICBzdW0gPC0gc3VtbWFyeShpc3NwX2xpc3RfaW50ZXJhY3Rpb25zW1tpXV0pDQogIA0KICAjIEV4dHJhY3QgdGhlIGludGVyY2VwdCBhbmQgc3RhbmRhcmQgZGV2aWF0aXNzcG4gZm9yIG11IGFuZCBzaWdtYQ0KICAgICBtdV9zZXhfZXN0IDwtIHN1bVtbM11dDQogIG11X3NleF9zZCA8LSBzdW1bWzMsMl1dDQogIG11X2lzY2VkX21lZF9lc3QgPC0gc3VtW1s0XV0NCiAgbXVfaXNjZWRfbWVkX3NkIDwtIHN1bVtbNCwyXV0NCiAgbXVfaXNjZWRfaGlnaF9lc3QgPC0gc3VtW1s1XV0NCiAgbXVfaXNjZWRfaGlnaF9zZCA8LSBzdW1bWzUsMl1dDQogIG11X2FnZV9lc3QgPC0gc3VtW1s2XV0NCiAgbXVfYWdlX3NkIDwtIHN1bVtbNiwyXV0NCiAgDQogICBtdV9zZXhfZXN0X2ludGVyIDwtIHN1bVtbOF1dDQogIG11X3NleF9zZF9pbnRlciA8LSBzdW1bWzgsMl1dDQogIG11X2lzY2VkX21lZF9lc3RfaW50ZXIgPC0gc3VtW1s5XV0NCiAgbXVfaXNjZWRfbWVkX3NkX2ludGVyIDwtIHN1bVtbOSwyXV0NCiAgbXVfaXNjZWRfaGlnaF9lc3RfaW50ZXIgPC0gc3VtW1sxMF1dDQogIG11X2lzY2VkX2hpZ2hfc2RfaW50ZXIgPC0gc3VtW1sxMCwyXV0NCiAgbXVfYWdlX2VzdF9pbnRlciA8LSBzdW1bWzddXQ0KICBtdV9hZ2Vfc2RfaW50ZXIgPC0gc3VtW1s3LDJdXQ0KDQogICMgVmFyaWFuY2UNCiAgc2lnX3NleF9lc3QgPC0gc3VtW1s5XV0NCiAgc2lnX3NleF9zZCA8LSBzdW1bWzksMl1dDQogIHNpZ19pc2NlZF9tZWRfZXN0IDwtIHN1bVtbMTBdXQ0KICBzaWdfaXNjZWRfbWVkX3NkIDwtIHN1bVtbMTAsMl1dDQogIHNpZ19pc2NlZF9oaWdoX2VzdCA8LSBzdW1bWzExXV0NCiAgc2lnX2lzY2VkX2hpZ2hfc2QgPC0gc3VtW1sxMSwyXV0NCiAgc2lnX2FnZV9lc3QgPC0gc3VtW1sxMl1dDQogIHNpZ19hZ2Vfc2QgPC0gc3VtW1sxMiwyXV0NCiAgDQogIHNpZ19zZXhfZXN0X2ludGVyIDwtIHN1bVtbMThdXQ0KICBzaWdfc2V4X3NkX2ludGVyIDwtIHN1bVtbMTgsMl1dDQogIHNpZ19pc2NlZF9tZWRfZXN0X2ludGVyIDwtIHN1bVtbMTldXQ0KICBzaWdfaXNjZWRfbWVkX3NkX2ludGVyIDwtIHN1bVtbMTksMl1dDQogIHNpZ19pc2NlZF9oaWdoX2VzdF9pbnRlciA8LSBzdW1bWzIwXV0NCiAgc2lnX2lzY2VkX2hpZ2hfc2RfaW50ZXIgPC0gc3VtW1syMCwyXV0NCiAgc2lnX2FnZV9lc3RfaW50ZXIgPC0gc3VtW1sxN11dDQogIHNpZ19hZ2Vfc2RfaW50ZXIgPC0gc3VtW1sxNywyXV0NCg0KICANCiAgIyBQdXQgdGhlIHJlc3VsdHMgDQogIGlzc3BfaW5kZXBfaW50ZXJhY3Rpb25zX2RmIDwtIHJiaW5kKGlzc3BfaW5kZXBfaW50ZXJhY3Rpb25zX2RmLCBkYXRhLmZyYW1lKGRlcF92YXIgPSBkZXBfdmFyLCBtdV9zZXhfZXN0LCBtdV9zZXhfc2QsIG11X2lzY2VkX21lZF9lc3QsIG11X2lzY2VkX21lZF9zZCwgbXVfaXNjZWRfaGlnaF9lc3QsIG11X2lzY2VkX2hpZ2hfc2QsIG11X2FnZV9lc3QsIG11X2FnZV9zZCwgc2lnX3NleF9lc3QsIHNpZ19zZXhfc2QsIHNpZ19pc2NlZF9tZWRfZXN0LCBzaWdfaXNjZWRfbWVkX3NkLCBzaWdfaXNjZWRfaGlnaF9lc3QsIHNpZ19pc2NlZF9oaWdoX3NkLCBzaWdfYWdlX2VzdCwgc2lnX2FnZV9zZCwgbXVfc2V4X2VzdF9pbnRlciwgbXVfc2V4X3NkX2ludGVyLCBtdV9pc2NlZF9tZWRfZXN0X2ludGVyLCBtdV9pc2NlZF9tZWRfc2RfaW50ZXIsIG11X2lzY2VkX2hpZ2hfZXN0X2ludGVyLCBtdV9pc2NlZF9oaWdoX3NkX2ludGVyLCBtdV9hZ2VfZXN0X2ludGVyLCBtdV9hZ2Vfc2RfaW50ZXIsIHNpZ19zZXhfZXN0X2ludGVyLCBzaWdfc2V4X3NkX2ludGVyLCBzaWdfaXNjZWRfbWVkX2VzdF9pbnRlciwgc2lnX2lzY2VkX21lZF9zZF9pbnRlciwgc2lnX2lzY2VkX2hpZ2hfZXN0X2ludGVyLCBzaWdfaXNjZWRfaGlnaF9zZF9pbnRlciwgc2lnX2FnZV9lc3RfaW50ZXIsIHNpZ19hZ2Vfc2RfaW50ZXIpKQ0KfQ0KDQpzYXZlKGlzc3BfaW5kZXBfaW50ZXJhY3Rpb25zX2RmLCBmaWxlPSIuL2RhdGEvZmluYWxfZGF0YS9pbmRlcF92YXIvaXNzcF9pbnRlcl92YXJfbmV3LlJEYXRhIikNCg0KIyBGb3IgdGhlIG90aGVyIGluZGVwIHZhcnMgYXMgd2VsbA0Kcm0obGlzdD1scygpKQ0KbG9hZCgiLi9kYXRhL2ZpbmFsX2RhdGEvcmVncmVzc2lvbl9vdXRwdXRzL2lzc3BfbGlzdF9pbnRlcmFjdGlvbnNfMl93YXZlc193X25ldy5SRGF0YSIpDQoNCiMgU3RvcmUgdGhlIHJlc3VsdHMgaW4gYSBuZXcgZGF0YWZyYW1lDQppc3NwXzJfaW5kZXBfaW50ZXJhY3Rpb25zX2RmIDwtIGRhdGEuZnJhbWUoZGVwX3ZhciA9IGNoYXJhY3RlcigpKQ0KDQojIExvb3Agb3ZlciB0aGUgbGlzdCBvZiBtb2RlbHMNCmZvciAoaSBpbiBzZXFfYWxvbmcoaXNzcF9saXN0X2ludGVyYWN0aW9uc18yX3dhdmVzKSkgew0KDQogICMgRXh0cmFjdCB0aGUgZGVwZW5kZW50IHZhcmlhYmxlIHNvIHRoYXQgd2Uga25vdyBmb3Igd2hpY2ggZGVwIHZhciB0aGUgZWZmZWN0cyBhcmUNCiAgZGVwX3ZhciA8LSBhcy5jaGFyYWN0ZXIoaXNzcF9saXN0X2ludGVyYWN0aW9uc18yX3dhdmVzW1tpXV0kbXUudGVybXNbWzJdXSkNCiAgDQogICAgIyBTdW1tYXJpemUgdGhlIG1vZGVsDQogIHN1bSA8LSBzdW1tYXJ5KGlzc3BfbGlzdF9pbnRlcmFjdGlvbnNfMl93YXZlc1tbaV1dKQ0KICANCiAgIyBFeHRyYWN0IHRoZSBpbnRlcmNlcHQgYW5kIHN0YW5kYXJkIGRldmlhdGlvbiBmb3IgbXUgYW5kIHNpZ21hDQogICAgIG11X3NleF9lc3QgPC0gc3VtW1szXV0NCiAgbXVfc2V4X3NkIDwtIHN1bVtbMywyXV0NCiAgbXVfaXNjZWRfbWVkX2VzdCA8LSBzdW1bWzRdXQ0KICBtdV9pc2NlZF9tZWRfc2QgPC0gc3VtW1s0LDJdXQ0KICBtdV9pc2NlZF9oaWdoX2VzdCA8LSBzdW1bWzVdXQ0KICBtdV9pc2NlZF9oaWdoX3NkIDwtIHN1bVtbNSwyXV0NCiAgbXVfYWdlX2VzdCA8LSBzdW1bWzZdXQ0KICBtdV9hZ2Vfc2QgPC0gc3VtW1s2LDJdXQ0KICANCiAgIG11X3NleF9lc3RfaW50ZXIgPC0gc3VtW1s4XV0NCiAgbXVfc2V4X3NkX2ludGVyIDwtIHN1bVtbOCwyXV0NCiAgbXVfaXNjZWRfbWVkX2VzdF9pbnRlciA8LSBzdW1bWzldXQ0KICBtdV9pc2NlZF9tZWRfc2RfaW50ZXIgPC0gc3VtW1s5LDJdXQ0KICBtdV9pc2NlZF9oaWdoX2VzdF9pbnRlciA8LSBzdW1bWzEwXV0NCiAgbXVfaXNjZWRfaGlnaF9zZF9pbnRlciA8LSBzdW1bWzEwLDJdXQ0KICBtdV9hZ2VfZXN0X2ludGVyIDwtIHN1bVtbN11dDQogIG11X2FnZV9zZF9pbnRlciA8LSBzdW1bWzcsMl1dDQoNCiAgIyBWYXJpYW5jZQ0KICBzaWdfc2V4X2VzdCA8LSBzdW1bWzldXQ0KICBzaWdfc2V4X3NkIDwtIHN1bVtbOSwyXV0NCiAgc2lnX2lzY2VkX21lZF9lc3QgPC0gc3VtW1sxMF1dDQogIHNpZ19pc2NlZF9tZWRfc2QgPC0gc3VtW1sxMCwyXV0NCiAgc2lnX2lzY2VkX2hpZ2hfZXN0IDwtIHN1bVtbMTFdXQ0KICBzaWdfaXNjZWRfaGlnaF9zZCA8LSBzdW1bWzExLDJdXQ0KICBzaWdfYWdlX2VzdCA8LSBzdW1bWzEyXV0NCiAgc2lnX2FnZV9zZCA8LSBzdW1bWzEyLDJdXQ0KICANCiAgc2lnX3NleF9lc3RfaW50ZXIgPC0gc3VtW1sxOF1dDQogIHNpZ19zZXhfc2RfaW50ZXIgPC0gc3VtW1sxOCwyXV0NCiAgc2lnX2lzY2VkX21lZF9lc3RfaW50ZXIgPC0gc3VtW1sxOV1dDQogIHNpZ19pc2NlZF9tZWRfc2RfaW50ZXIgPC0gc3VtW1sxOSwyXV0NCiAgc2lnX2lzY2VkX2hpZ2hfZXN0X2ludGVyIDwtIHN1bVtbMjBdXQ0KICBzaWdfaXNjZWRfaGlnaF9zZF9pbnRlciA8LSBzdW1bWzIwLDJdXQ0KICBzaWdfYWdlX2VzdF9pbnRlciA8LSBzdW1bWzE3XV0NCiAgc2lnX2FnZV9zZF9pbnRlciA8LSBzdW1bWzE3LDJdXQ0KDQogIA0KICAjIFB1dCB0aGUgcmVzdWx0cyANCiAgaXNzcF8yX2luZGVwX2ludGVyYWN0aW9uc19kZiA8LSByYmluZChpc3NwXzJfaW5kZXBfaW50ZXJhY3Rpb25zX2RmLCBkYXRhLmZyYW1lKGRlcF92YXIgPSBkZXBfdmFyLCBtdV9zZXhfZXN0LCBtdV9zZXhfc2QsIG11X2lzY2VkX21lZF9lc3QsIG11X2lzY2VkX21lZF9zZCwgbXVfaXNjZWRfaGlnaF9lc3QsIG11X2lzY2VkX2hpZ2hfc2QsIG11X2FnZV9lc3QsIG11X2FnZV9zZCwgc2lnX3NleF9lc3QsIHNpZ19zZXhfc2QsIHNpZ19pc2NlZF9tZWRfZXN0LCBzaWdfaXNjZWRfbWVkX3NkLCBzaWdfaXNjZWRfaGlnaF9lc3QsIHNpZ19pc2NlZF9oaWdoX3NkLCBzaWdfYWdlX2VzdCwgc2lnX2FnZV9zZCwgbXVfc2V4X2VzdF9pbnRlciwgbXVfc2V4X3NkX2ludGVyLCBtdV9pc2NlZF9tZWRfZXN0X2ludGVyLCBtdV9pc2NlZF9tZWRfc2RfaW50ZXIsIG11X2lzY2VkX2hpZ2hfZXN0X2ludGVyLCBtdV9pc2NlZF9oaWdoX3NkX2ludGVyLCBtdV9hZ2VfZXN0X2ludGVyLCBtdV9hZ2Vfc2RfaW50ZXIsIHNpZ19zZXhfZXN0X2ludGVyLCBzaWdfc2V4X3NkX2ludGVyLCBzaWdfaXNjZWRfbWVkX2VzdF9pbnRlciwgc2lnX2lzY2VkX21lZF9zZF9pbnRlciwgc2lnX2lzY2VkX2hpZ2hfZXN0X2ludGVyLCBzaWdfaXNjZWRfaGlnaF9zZF9pbnRlciwgc2lnX2FnZV9lc3RfaW50ZXIsIHNpZ19hZ2Vfc2RfaW50ZXIpKQ0KfQ0KDQpzYXZlKGlzc3BfMl9pbmRlcF9pbnRlcmFjdGlvbnNfZGYsIGZpbGU9Ii4vZGF0YS9maW5hbF9kYXRhL2luZGVwX3Zhci9pc3NwXzJfaW50ZXJfdmFyX25ldy5SRGF0YSIpDQpgYGANCg0KIyMgRUIgey19DQoNCmBgYHtyfQ0KIyBVbmZvcnR1bmF0ZWx5LCB0aGUgbG9vcCBJIHVzZWQgaW4gdGhlIG90aGVyIHNjcmlwdHMgZG9lcyBub3Qgc2VlbSB0byB3b3JrIGZvciB0aGUgaW50ZXJhY3Rpb24gZWZmZWN0cywgc28gSSBuZWVkIHRvIGRvIHRoZW0gb25lIGJ5IG9uZQ0Kcm0obGlzdD1scygpKQ0KbG9hZCgiLi9kYXRhL2ZpbmFsX2RhdGEvcmVncmVzc2lvbl9vdXRwdXRzL2ViX2xpc3RfaW50ZXJhY3Rpb25zXzE5ODZfd19uZXcuUkRhdGEiKQ0KDQojIFN0b3JlIHRoZSByZXN1bHRzIGluIGEgbmV3IGRhdGFmcmFtZQ0KZWJfaW50ZXJhY3Rpb25zXzE5ODZfZGYgPC0gZGF0YS5mcmFtZShkZXBfdmFyID0gY2hhcmFjdGVyKCkpDQoNCiMgTG9vcCBvdmVyIHRoZSBsaXN0IA0KZm9yIChpIGluIHNlcV9hbG9uZyhlYl9saXN0X2ludGVyYWN0aW9uc18xOTg2KSkgew0KDQogICMgRXh0cmFjdCB0aGUgZGVwZW5kZW50IHZhcmlhYmxlIHNvIHRoYXQgd2Uga25vdyBmb3Igd2hpY2ggZGVwIHZhciB0aGUgZWZmZWN0cyBhcmUNCiAgZGVwX3ZhciA8LSBhcy5jaGFyYWN0ZXIoZWJfbGlzdF9pbnRlcmFjdGlvbnNfMTk4NltbaV1dJG11LnRlcm1zW1syXV0pDQogIA0KICAgICMgU3VtbWFyaXplIHRoZSBtb2RlbA0KICBzdW0gPC0gc3VtbWFyeShlYl9saXN0X2ludGVyYWN0aW9uc18xOTg2W1tpXV0pDQogIA0KICAjIEV4dHJhY3QgaW5mbw0KICAgICBtdV9zZXhfZXN0IDwtIHN1bVtbM11dDQogIG11X3NleF9zZCA8LSBzdW1bWzMsMl1dDQogIG11X2lzY2VkX21lZF9lc3QgPC0gc3VtW1s0XV0NCiAgbXVfaXNjZWRfbWVkX3NkIDwtIHN1bVtbNCwyXV0NCiAgbXVfaXNjZWRfaGlnaF9lc3QgPC0gc3VtW1s1XV0NCiAgbXVfaXNjZWRfaGlnaF9zZCA8LSBzdW1bWzUsMl1dDQogIG11X2FnZV9lc3QgPC0gc3VtW1s2XV0NCiAgbXVfYWdlX3NkIDwtIHN1bVtbNiwyXV0NCiAgDQogICBtdV9zZXhfZXN0X2ludGVyIDwtIHN1bVtbOF1dDQogIG11X3NleF9zZF9pbnRlciA8LSBzdW1bWzgsMl1dDQogIG11X2lzY2VkX21lZF9lc3RfaW50ZXIgPC0gc3VtW1s5XV0NCiAgbXVfaXNjZWRfbWVkX3NkX2ludGVyIDwtIHN1bVtbOSwyXV0NCiAgbXVfaXNjZWRfaGlnaF9lc3RfaW50ZXIgPC0gc3VtW1sxMF1dDQogIG11X2lzY2VkX2hpZ2hfc2RfaW50ZXIgPC0gc3VtW1sxMCwyXV0NCiAgbXVfYWdlX2VzdF9pbnRlciA8LSBzdW1bWzddXQ0KICBtdV9hZ2Vfc2RfaW50ZXIgPC0gc3VtW1s3LDJdXQ0KDQogICMgVmFyaWFuY2UNCiAgc2lnX3NleF9lc3QgPC0gc3VtW1s5XV0NCiAgc2lnX3NleF9zZCA8LSBzdW1bWzksMl1dDQogIHNpZ19pc2NlZF9tZWRfZXN0IDwtIHN1bVtbMTBdXQ0KICBzaWdfaXNjZWRfbWVkX3NkIDwtIHN1bVtbMTAsMl1dDQogIHNpZ19pc2NlZF9oaWdoX2VzdCA8LSBzdW1bWzExXV0NCiAgc2lnX2lzY2VkX2hpZ2hfc2QgPC0gc3VtW1sxMSwyXV0NCiAgc2lnX2FnZV9lc3QgPC0gc3VtW1sxMl1dDQogIHNpZ19hZ2Vfc2QgPC0gc3VtW1sxMiwyXV0NCiAgDQogIHNpZ19zZXhfZXN0X2ludGVyIDwtIHN1bVtbMThdXQ0KICBzaWdfc2V4X3NkX2ludGVyIDwtIHN1bVtbMTgsMl1dDQogIHNpZ19pc2NlZF9tZWRfZXN0X2ludGVyIDwtIHN1bVtbMTldXQ0KICBzaWdfaXNjZWRfbWVkX3NkX2ludGVyIDwtIHN1bVtbMTksMl1dDQogIHNpZ19pc2NlZF9oaWdoX2VzdF9pbnRlciA8LSBzdW1bWzIwXV0NCiAgc2lnX2lzY2VkX2hpZ2hfc2RfaW50ZXIgPC0gc3VtW1syMCwyXV0NCiAgc2lnX2FnZV9lc3RfaW50ZXIgPC0gc3VtW1sxN11dDQogIHNpZ19hZ2Vfc2RfaW50ZXIgPC0gc3VtW1sxNywyXV0NCg0KDQogICMgUHV0IHRoZSByZXN1bHRzIGluIGEgZGF0YWZyYW1lDQogIGViX2ludGVyYWN0aW9uc18xOTg2X2RmIDwtIHJiaW5kKGViX2ludGVyYWN0aW9uc18xOTg2X2RmLCBkYXRhLmZyYW1lKGRlcF92YXIgPSBkZXBfdmFyLCBtdV9zZXhfZXN0LCBtdV9zZXhfc2QsIG11X2lzY2VkX21lZF9lc3QsIG11X2lzY2VkX21lZF9zZCwgbXVfaXNjZWRfaGlnaF9lc3QsIG11X2lzY2VkX2hpZ2hfc2QsIG11X2FnZV9lc3QsIG11X2FnZV9zZCwgc2lnX3NleF9lc3QsIHNpZ19zZXhfc2QsIHNpZ19pc2NlZF9tZWRfZXN0LCBzaWdfaXNjZWRfbWVkX3NkLCBzaWdfaXNjZWRfaGlnaF9lc3QsIHNpZ19pc2NlZF9oaWdoX3NkLCBzaWdfYWdlX2VzdCwgc2lnX2FnZV9zZCwgbXVfc2V4X2VzdF9pbnRlciwgbXVfc2V4X3NkX2ludGVyLCBtdV9pc2NlZF9tZWRfZXN0X2ludGVyLCBtdV9pc2NlZF9tZWRfc2RfaW50ZXIsIG11X2lzY2VkX2hpZ2hfZXN0X2ludGVyLCBtdV9pc2NlZF9oaWdoX3NkX2ludGVyLCBtdV9hZ2VfZXN0X2ludGVyLCBtdV9hZ2Vfc2RfaW50ZXIsIHNpZ19zZXhfZXN0X2ludGVyLCBzaWdfc2V4X3NkX2ludGVyLCBzaWdfaXNjZWRfbWVkX2VzdF9pbnRlciwgc2lnX2lzY2VkX21lZF9zZF9pbnRlciwgc2lnX2lzY2VkX2hpZ2hfZXN0X2ludGVyLCBzaWdfaXNjZWRfaGlnaF9zZF9pbnRlciwgc2lnX2FnZV9lc3RfaW50ZXIsIHNpZ19hZ2Vfc2RfaW50ZXIpKQ0KfQ0KDQpzYXZlKGViX2ludGVyYWN0aW9uc18xOTg2X2RmLCBmaWxlPSIuL2RhdGEvZmluYWxfZGF0YS9pbmRlcF92YXIvZWJfMTk4Nl9pbnRlcl92YXJfbmV3LlJEYXRhIikNCg0KYGBgDQoNCmBgYHtyfQ0KIyBFeHRyYWN0IHRoZSBpbmRlcCB2YXJzIGZyb20gdGhlIHJlZ3Jlc3Npb25zIEV1cm9iYXJvbWV0ZXIgb25lIGJ5IG9uZQ0Kcm0obGlzdD1scygpKQ0KbG9hZCgiLi9kYXRhL2ZpbmFsX2RhdGEvcmVncmVzc2lvbl9vdXRwdXRzL2ViX2xpc3RfaW50ZXJhY3Rpb25zXzIwMDdfd19uZXcuUkRhdGEiKQ0KbG9hZCgiLi9kYXRhL2ZpbmFsX2RhdGEvcmVncmVzc2lvbl9vdXRwdXRzL2ViX2xpc3RfaW50ZXJhY3Rpb25zXzIwMDhfd19uZXcuUkRhdGEiKQ0KbG9hZCgiLi9kYXRhL2ZpbmFsX2RhdGEvcmVncmVzc2lvbl9vdXRwdXRzL2ViX2xpc3RfaW50ZXJhY3Rpb25zXzIwMDlfd19uZXcuUkRhdGEiKQ0KbG9hZCgiLi9kYXRhL2ZpbmFsX2RhdGEvcmVncmVzc2lvbl9vdXRwdXRzL2ViX2xpc3RfaW50ZXJhY3Rpb25zXzIwMTFfd19uZXcuUkRhdGEiKQ0KbG9hZCgiLi9kYXRhL2ZpbmFsX2RhdGEvcmVncmVzc2lvbl9vdXRwdXRzL2ViX2xpc3RfaW50ZXJhY3Rpb25zX2J1eXByb2Rfd19uZXcuUkRhdGEiKQ0KbG9hZCgiLi9kYXRhL2ZpbmFsX2RhdGEvcmVncmVzc2lvbl9vdXRwdXRzL2ViX2xpc3RfaW50ZXJhY3Rpb25zX2NjaGFuZ2UyX3dfbmV3LlJEYXRhIikNCmxvYWQoIi4vZGF0YS9maW5hbF9kYXRhL3JlZ3Jlc3Npb25fb3V0cHV0cy9lYl9saXN0X2ludGVyYWN0aW9uc19kb3Byb3Rfd19uZXcuUkRhdGEiKQ0KbG9hZCgiLi9kYXRhL2ZpbmFsX2RhdGEvcmVncmVzc2lvbl9vdXRwdXRzL2ViX2xpc3RfaW50ZXJhY3Rpb25zX2VmZl9kYWlseV93X25ldy5SRGF0YSIpDQpsb2FkKCIuL2RhdGEvZmluYWxfZGF0YS9yZWdyZXNzaW9uX291dHB1dHMvZWJfbGlzdF9pbnRlcmFjdGlvbnNfcGVyc19pbXBfd19uZXcuUkRhdGEiKQ0KbG9hZCgiLi9kYXRhL2ZpbmFsX2RhdGEvcmVncmVzc2lvbl9vdXRwdXRzL2ViX2xpc3RfaW50ZXJhY3Rpb25zX3Byc2FjdGlvbl93X25ldy5SRGF0YSIpDQpsb2FkKCIuL2RhdGEvZmluYWxfZGF0YS9yZWdyZXNzaW9uX291dHB1dHMvZWJfbGlzdF9pbnRlcmFjdGlvbnNfcXVhbGxpZmVfd19uZXcuUkRhdGEiKQ0KbG9hZCgiLi9kYXRhL2ZpbmFsX2RhdGEvcmVncmVzc2lvbl9vdXRwdXRzL2ViX2xpc3RfaW50ZXJhY3Rpb25zX2RvcHJvdF9jaXR5X3dfbmV3LlJEYXRhIikNCg0KDQogICMgU3RvcmUgdGhlIHJlc3VsdHMgaW4gYSBuZXcgZGF0YWZyYW1lDQplYl9pbmRlcF9pbnRlcmFjdGlvbnNfMjAwN19kZiA8LSBkYXRhLmZyYW1lKGRlcF92YXIgPSBjaGFyYWN0ZXIoKSkNCg0KIyBMb29wIG92ZXIgdGhlIGxpc3QgDQpmb3IgKGkgaW4gc2VxX2Fsb25nKGViX2xpc3RfaW50ZXJhY3Rpb25zXzIwMDcpKSB7DQoNCiAgIyBFeHRyYWN0IHRoZSBkZXBlbmRlbnQgdmFyaWFibGUgc28gdGhhdCB3ZSBrbm93IGZvciB3aGljaCBkZXAgdmFyIHRoZSBlZmZlY3RzIGFyZQ0KICBkZXBfdmFyIDwtIGFzLmNoYXJhY3RlcihlYl9saXN0X2ludGVyYWN0aW9uc18yMDA3W1tpXV0kbXUudGVybXNbWzJdXSkNCiAgDQogICAgIyBTdW1tYXJpemUgdGhlIG1vZGVsDQogIHN1bSA8LSBzdW1tYXJ5KGViX2xpc3RfaW50ZXJhY3Rpb25zXzIwMDdbW2ldXSkNCiAgDQogICAgIG11X3NleF9lc3QgPC0gc3VtW1szXV0NCiAgbXVfc2V4X3NkIDwtIHN1bVtbMywyXV0NCiAgbXVfaXNjZWRfbWVkX2VzdCA8LSBzdW1bWzRdXQ0KICBtdV9pc2NlZF9tZWRfc2QgPC0gc3VtW1s0LDJdXQ0KICBtdV9pc2NlZF9oaWdoX2VzdCA8LSBzdW1bWzVdXQ0KICBtdV9pc2NlZF9oaWdoX3NkIDwtIHN1bVtbNSwyXV0NCiAgbXVfYWdlX2VzdCA8LSBzdW1bWzZdXQ0KICBtdV9hZ2Vfc2QgPC0gc3VtW1s2LDJdXQ0KICANCiAgIG11X3NleF9lc3RfaW50ZXIgPC0gc3VtW1s4XV0NCiAgbXVfc2V4X3NkX2ludGVyIDwtIHN1bVtbOCwyXV0NCiAgbXVfaXNjZWRfbWVkX2VzdF9pbnRlciA8LSBzdW1bWzldXQ0KICBtdV9pc2NlZF9tZWRfc2RfaW50ZXIgPC0gc3VtW1s5LDJdXQ0KICBtdV9pc2NlZF9oaWdoX2VzdF9pbnRlciA8LSBzdW1bWzEwXV0NCiAgbXVfaXNjZWRfaGlnaF9zZF9pbnRlciA8LSBzdW1bWzEwLDJdXQ0KICBtdV9hZ2VfZXN0X2ludGVyIDwtIHN1bVtbN11dDQogIG11X2FnZV9zZF9pbnRlciA8LSBzdW1bWzcsMl1dDQoNCiAgIyBWYXJpYW5jZQ0KICBzaWdfc2V4X2VzdCA8LSBzdW1bWzldXQ0KICBzaWdfc2V4X3NkIDwtIHN1bVtbOSwyXV0NCiAgc2lnX2lzY2VkX21lZF9lc3QgPC0gc3VtW1sxMF1dDQogIHNpZ19pc2NlZF9tZWRfc2QgPC0gc3VtW1sxMCwyXV0NCiAgc2lnX2lzY2VkX2hpZ2hfZXN0IDwtIHN1bVtbMTFdXQ0KICBzaWdfaXNjZWRfaGlnaF9zZCA8LSBzdW1bWzExLDJdXQ0KICBzaWdfYWdlX2VzdCA8LSBzdW1bWzEyXV0NCiAgc2lnX2FnZV9zZCA8LSBzdW1bWzEyLDJdXQ0KICANCiAgc2lnX3NleF9lc3RfaW50ZXIgPC0gc3VtW1sxOF1dDQogIHNpZ19zZXhfc2RfaW50ZXIgPC0gc3VtW1sxOCwyXV0NCiAgc2lnX2lzY2VkX21lZF9lc3RfaW50ZXIgPC0gc3VtW1sxOV1dDQogIHNpZ19pc2NlZF9tZWRfc2RfaW50ZXIgPC0gc3VtW1sxOSwyXV0NCiAgc2lnX2lzY2VkX2hpZ2hfZXN0X2ludGVyIDwtIHN1bVtbMjBdXQ0KICBzaWdfaXNjZWRfaGlnaF9zZF9pbnRlciA8LSBzdW1bWzIwLDJdXQ0KICBzaWdfYWdlX2VzdF9pbnRlciA8LSBzdW1bWzE3XV0NCiAgc2lnX2FnZV9zZF9pbnRlciA8LSBzdW1bWzE3LDJdXQ0KDQoNCiAgIyBQdXQgdGhlIHJlc3VsdHMgaW4gYSBkYXRhZnJhbWUNCiAgZWJfaW5kZXBfaW50ZXJhY3Rpb25zXzIwMDdfZGYgPC0gcmJpbmQoZWJfaW5kZXBfaW50ZXJhY3Rpb25zXzIwMDdfZGYsIGRhdGEuZnJhbWUoZGVwX3ZhciA9IGRlcF92YXIsIG11X3NleF9lc3QsIG11X3NleF9zZCwgbXVfaXNjZWRfbWVkX2VzdCwgbXVfaXNjZWRfbWVkX3NkLCBtdV9pc2NlZF9oaWdoX2VzdCwgbXVfaXNjZWRfaGlnaF9zZCwgbXVfYWdlX2VzdCwgbXVfYWdlX3NkLCBzaWdfc2V4X2VzdCwgc2lnX3NleF9zZCwgc2lnX2lzY2VkX21lZF9lc3QsIHNpZ19pc2NlZF9tZWRfc2QsIHNpZ19pc2NlZF9oaWdoX2VzdCwgc2lnX2lzY2VkX2hpZ2hfc2QsIHNpZ19hZ2VfZXN0LCBzaWdfYWdlX3NkLCBtdV9zZXhfZXN0X2ludGVyLCBtdV9zZXhfc2RfaW50ZXIsIG11X2lzY2VkX21lZF9lc3RfaW50ZXIsIG11X2lzY2VkX21lZF9zZF9pbnRlciwgbXVfaXNjZWRfaGlnaF9lc3RfaW50ZXIsIG11X2lzY2VkX2hpZ2hfc2RfaW50ZXIsIG11X2FnZV9lc3RfaW50ZXIsIG11X2FnZV9zZF9pbnRlciwgc2lnX3NleF9lc3RfaW50ZXIsIHNpZ19zZXhfc2RfaW50ZXIsIHNpZ19pc2NlZF9tZWRfZXN0X2ludGVyLCBzaWdfaXNjZWRfbWVkX3NkX2ludGVyLCBzaWdfaXNjZWRfaGlnaF9lc3RfaW50ZXIsIHNpZ19pc2NlZF9oaWdoX3NkX2ludGVyLCBzaWdfYWdlX2VzdF9pbnRlciwgc2lnX2FnZV9zZF9pbnRlcikpDQogICAgfQ0KYGBgDQoNCg0KYGBge3J9DQojIDIwMDgNCg0KICAjIFN0b3JlIHRoZSByZXN1bHRzIGluIGEgbmV3IGRhdGFmcmFtZQ0KZWJfaW5kZXBfaW50ZXJhY3Rpb25zXzIwMDhfZGYgPC0gZGF0YS5mcmFtZShkZXBfdmFyID0gY2hhcmFjdGVyKCkpDQoNCiMgTG9vcCBvdmVyIHRoZSBsaXN0IA0KZm9yIChpIGluIHNlcV9hbG9uZyhlYl9saXN0X2ludGVyYWN0aW9uc18yMDA4KSkgew0KDQogICMgRXh0cmFjdCB0aGUgZGVwZW5kZW50IHZhcmlhYmxlIHNvIHRoYXQgd2Uga25vdyBmb3Igd2hpY2ggZGVwIHZhciB0aGUgZWZmZWN0cyBhcmUNCiAgZGVwX3ZhciA8LSBhcy5jaGFyYWN0ZXIoZWJfbGlzdF9pbnRlcmFjdGlvbnNfMjAwOFtbaV1dJG11LnRlcm1zW1syXV0pDQogIA0KICAgICMgU3VtbWFyaXplIHRoZSBtb2RlbA0KICBzdW0gPC0gc3VtbWFyeShlYl9saXN0X2ludGVyYWN0aW9uc18yMDA4W1tpXV0pDQogIA0KICAgICBtdV9zZXhfZXN0IDwtIHN1bVtbM11dDQogIG11X3NleF9zZCA8LSBzdW1bWzMsMl1dDQogIG11X2lzY2VkX21lZF9lc3QgPC0gc3VtW1s0XV0NCiAgbXVfaXNjZWRfbWVkX3NkIDwtIHN1bVtbNCwyXV0NCiAgbXVfaXNjZWRfaGlnaF9lc3QgPC0gc3VtW1s1XV0NCiAgbXVfaXNjZWRfaGlnaF9zZCA8LSBzdW1bWzUsMl1dDQogIG11X2FnZV9lc3QgPC0gc3VtW1s2XV0NCiAgbXVfYWdlX3NkIDwtIHN1bVtbNiwyXV0NCiAgDQogICBtdV9zZXhfZXN0X2ludGVyIDwtIHN1bVtbOF1dDQogIG11X3NleF9zZF9pbnRlciA8LSBzdW1bWzgsMl1dDQogIG11X2lzY2VkX21lZF9lc3RfaW50ZXIgPC0gc3VtW1s5XV0NCiAgbXVfaXNjZWRfbWVkX3NkX2ludGVyIDwtIHN1bVtbOSwyXV0NCiAgbXVfaXNjZWRfaGlnaF9lc3RfaW50ZXIgPC0gc3VtW1sxMF1dDQogIG11X2lzY2VkX2hpZ2hfc2RfaW50ZXIgPC0gc3VtW1sxMCwyXV0NCiAgbXVfYWdlX2VzdF9pbnRlciA8LSBzdW1bWzddXQ0KICBtdV9hZ2Vfc2RfaW50ZXIgPC0gc3VtW1s3LDJdXQ0KDQogICMgVmFyaWFuY2UNCiAgc2lnX3NleF9lc3QgPC0gc3VtW1s5XV0NCiAgc2lnX3NleF9zZCA8LSBzdW1bWzksMl1dDQogIHNpZ19pc2NlZF9tZWRfZXN0IDwtIHN1bVtbMTBdXQ0KICBzaWdfaXNjZWRfbWVkX3NkIDwtIHN1bVtbMTAsMl1dDQogIHNpZ19pc2NlZF9oaWdoX2VzdCA8LSBzdW1bWzExXV0NCiAgc2lnX2lzY2VkX2hpZ2hfc2QgPC0gc3VtW1sxMSwyXV0NCiAgc2lnX2FnZV9lc3QgPC0gc3VtW1sxMl1dDQogIHNpZ19hZ2Vfc2QgPC0gc3VtW1sxMiwyXV0NCiAgDQogIHNpZ19zZXhfZXN0X2ludGVyIDwtIHN1bVtbMThdXQ0KICBzaWdfc2V4X3NkX2ludGVyIDwtIHN1bVtbMTgsMl1dDQogIHNpZ19pc2NlZF9tZWRfZXN0X2ludGVyIDwtIHN1bVtbMTldXQ0KICBzaWdfaXNjZWRfbWVkX3NkX2ludGVyIDwtIHN1bVtbMTksMl1dDQogIHNpZ19pc2NlZF9oaWdoX2VzdF9pbnRlciA8LSBzdW1bWzIwXV0NCiAgc2lnX2lzY2VkX2hpZ2hfc2RfaW50ZXIgPC0gc3VtW1syMCwyXV0NCiAgc2lnX2FnZV9lc3RfaW50ZXIgPC0gc3VtW1sxN11dDQogIHNpZ19hZ2Vfc2RfaW50ZXIgPC0gc3VtW1sxNywyXV0NCg0KDQogICMgUHV0IHRoZSByZXN1bHRzIGluIGEgZGF0YWZyYW1lDQogIGViX2luZGVwX2ludGVyYWN0aW9uc18yMDA4X2RmIDwtIHJiaW5kKGViX2luZGVwX2ludGVyYWN0aW9uc18yMDA4X2RmLCBkYXRhLmZyYW1lKGRlcF92YXIgPSBkZXBfdmFyLCBtdV9zZXhfZXN0LCBtdV9zZXhfc2QsIG11X2lzY2VkX21lZF9lc3QsIG11X2lzY2VkX21lZF9zZCwgbXVfaXNjZWRfaGlnaF9lc3QsIG11X2lzY2VkX2hpZ2hfc2QsIG11X2FnZV9lc3QsIG11X2FnZV9zZCwgc2lnX3NleF9lc3QsIHNpZ19zZXhfc2QsIHNpZ19pc2NlZF9tZWRfZXN0LCBzaWdfaXNjZWRfbWVkX3NkLCBzaWdfaXNjZWRfaGlnaF9lc3QsIHNpZ19pc2NlZF9oaWdoX3NkLCBzaWdfYWdlX2VzdCwgc2lnX2FnZV9zZCwgbXVfc2V4X2VzdF9pbnRlciwgbXVfc2V4X3NkX2ludGVyLCBtdV9pc2NlZF9tZWRfZXN0X2ludGVyLCBtdV9pc2NlZF9tZWRfc2RfaW50ZXIsIG11X2lzY2VkX2hpZ2hfZXN0X2ludGVyLCBtdV9pc2NlZF9oaWdoX3NkX2ludGVyLCBtdV9hZ2VfZXN0X2ludGVyLCBtdV9hZ2Vfc2RfaW50ZXIsIHNpZ19zZXhfZXN0X2ludGVyLCBzaWdfc2V4X3NkX2ludGVyLCBzaWdfaXNjZWRfbWVkX2VzdF9pbnRlciwgc2lnX2lzY2VkX21lZF9zZF9pbnRlciwgc2lnX2lzY2VkX2hpZ2hfZXN0X2ludGVyLCBzaWdfaXNjZWRfaGlnaF9zZF9pbnRlciwgc2lnX2FnZV9lc3RfaW50ZXIsIHNpZ19hZ2Vfc2RfaW50ZXIpKQ0KICAgIH0NCmBgYA0KDQoNCmBgYHtyfQ0KIyBTdG9yZSB0aGUgcmVzdWx0cyBpbiBhIG5ldyBkYXRhZnJhbWUNCmViX2luZGVwX2ludGVyYWN0aW9uc18yMDA5X2RmIDwtIGRhdGEuZnJhbWUoZGVwX3ZhciA9IGNoYXJhY3RlcigpKQ0KDQojIExvb3Agb3ZlciB0aGUgbGlzdCANCmZvciAoaSBpbiBzZXFfYWxvbmcoZWJfbGlzdF9pbnRlcmFjdGlvbnNfMjAwOSkpIHsNCg0KICAjIEV4dHJhY3QgdGhlIGRlcGVuZGVudCB2YXJpYWJsZSBzbyB0aGF0IHdlIGtub3cgZm9yIHdoaWNoIGRlcCB2YXIgdGhlIGVmZmVjdHMgYXJlDQogIGRlcF92YXIgPC0gYXMuY2hhcmFjdGVyKGViX2xpc3RfaW50ZXJhY3Rpb25zXzIwMDlbW2ldXSRtdS50ZXJtc1tbMl1dKQ0KICANCiAgICAjIFN1bW1hcml6ZSB0aGUgbW9kZWwNCiAgc3VtIDwtIHN1bW1hcnkoZWJfbGlzdF9pbnRlcmFjdGlvbnNfMjAwOVtbaV1dKQ0KICANCiAgICAgbXVfc2V4X2VzdCA8LSBzdW1bWzNdXQ0KICBtdV9zZXhfc2QgPC0gc3VtW1szLDJdXQ0KICBtdV9pc2NlZF9tZWRfZXN0IDwtIHN1bVtbNF1dDQogIG11X2lzY2VkX21lZF9zZCA8LSBzdW1bWzQsMl1dDQogIG11X2lzY2VkX2hpZ2hfZXN0IDwtIHN1bVtbNV1dDQogIG11X2lzY2VkX2hpZ2hfc2QgPC0gc3VtW1s1LDJdXQ0KICBtdV9hZ2VfZXN0IDwtIHN1bVtbNl1dDQogIG11X2FnZV9zZCA8LSBzdW1bWzYsMl1dDQogIA0KICAgbXVfc2V4X2VzdF9pbnRlciA8LSBzdW1bWzhdXQ0KICBtdV9zZXhfc2RfaW50ZXIgPC0gc3VtW1s4LDJdXQ0KICBtdV9pc2NlZF9tZWRfZXN0X2ludGVyIDwtIHN1bVtbOV1dDQogIG11X2lzY2VkX21lZF9zZF9pbnRlciA8LSBzdW1bWzksMl1dDQogIG11X2lzY2VkX2hpZ2hfZXN0X2ludGVyIDwtIHN1bVtbMTBdXQ0KICBtdV9pc2NlZF9oaWdoX3NkX2ludGVyIDwtIHN1bVtbMTAsMl1dDQogIG11X2FnZV9lc3RfaW50ZXIgPC0gc3VtW1s3XV0NCiAgbXVfYWdlX3NkX2ludGVyIDwtIHN1bVtbNywyXV0NCg0KICAjIFZhcmlhbmNlDQogIHNpZ19zZXhfZXN0IDwtIHN1bVtbOV1dDQogIHNpZ19zZXhfc2QgPC0gc3VtW1s5LDJdXQ0KICBzaWdfaXNjZWRfbWVkX2VzdCA8LSBzdW1bWzEwXV0NCiAgc2lnX2lzY2VkX21lZF9zZCA8LSBzdW1bWzEwLDJdXQ0KICBzaWdfaXNjZWRfaGlnaF9lc3QgPC0gc3VtW1sxMV1dDQogIHNpZ19pc2NlZF9oaWdoX3NkIDwtIHN1bVtbMTEsMl1dDQogIHNpZ19hZ2VfZXN0IDwtIHN1bVtbMTJdXQ0KICBzaWdfYWdlX3NkIDwtIHN1bVtbMTIsMl1dDQogIA0KICBzaWdfc2V4X2VzdF9pbnRlciA8LSBzdW1bWzE4XV0NCiAgc2lnX3NleF9zZF9pbnRlciA8LSBzdW1bWzE4LDJdXQ0KICBzaWdfaXNjZWRfbWVkX2VzdF9pbnRlciA8LSBzdW1bWzE5XV0NCiAgc2lnX2lzY2VkX21lZF9zZF9pbnRlciA8LSBzdW1bWzE5LDJdXQ0KICBzaWdfaXNjZWRfaGlnaF9lc3RfaW50ZXIgPC0gc3VtW1syMF1dDQogIHNpZ19pc2NlZF9oaWdoX3NkX2ludGVyIDwtIHN1bVtbMjAsMl1dDQogIHNpZ19hZ2VfZXN0X2ludGVyIDwtIHN1bVtbMTddXQ0KICBzaWdfYWdlX3NkX2ludGVyIDwtIHN1bVtbMTcsMl1dDQoNCg0KICAjIFB1dCB0aGUgcmVzdWx0cyBpbiBhIGRhdGFmcmFtZQ0KICBlYl9pbmRlcF9pbnRlcmFjdGlvbnNfMjAwOV9kZiA8LSByYmluZChlYl9pbmRlcF9pbnRlcmFjdGlvbnNfMjAwOV9kZiwgZGF0YS5mcmFtZShkZXBfdmFyID0gZGVwX3ZhciwgbXVfc2V4X2VzdCwgbXVfc2V4X3NkLCBtdV9pc2NlZF9tZWRfZXN0LCBtdV9pc2NlZF9tZWRfc2QsIG11X2lzY2VkX2hpZ2hfZXN0LCBtdV9pc2NlZF9oaWdoX3NkLCBtdV9hZ2VfZXN0LCBtdV9hZ2Vfc2QsIHNpZ19zZXhfZXN0LCBzaWdfc2V4X3NkLCBzaWdfaXNjZWRfbWVkX2VzdCwgc2lnX2lzY2VkX21lZF9zZCwgc2lnX2lzY2VkX2hpZ2hfZXN0LCBzaWdfaXNjZWRfaGlnaF9zZCwgc2lnX2FnZV9lc3QsIHNpZ19hZ2Vfc2QsIG11X3NleF9lc3RfaW50ZXIsIG11X3NleF9zZF9pbnRlciwgbXVfaXNjZWRfbWVkX2VzdF9pbnRlciwgbXVfaXNjZWRfbWVkX3NkX2ludGVyLCBtdV9pc2NlZF9oaWdoX2VzdF9pbnRlciwgbXVfaXNjZWRfaGlnaF9zZF9pbnRlciwgbXVfYWdlX2VzdF9pbnRlciwgbXVfYWdlX3NkX2ludGVyLCBzaWdfc2V4X2VzdF9pbnRlciwgc2lnX3NleF9zZF9pbnRlciwgc2lnX2lzY2VkX21lZF9lc3RfaW50ZXIsIHNpZ19pc2NlZF9tZWRfc2RfaW50ZXIsIHNpZ19pc2NlZF9oaWdoX2VzdF9pbnRlciwgc2lnX2lzY2VkX2hpZ2hfc2RfaW50ZXIsIHNpZ19hZ2VfZXN0X2ludGVyLCBzaWdfYWdlX3NkX2ludGVyKSkNCiAgICB9DQpgYGANCg0KDQpgYGB7cn0NCiMgU3RvcmUgdGhlIHJlc3VsdHMgaW4gYSBuZXcgZGF0YWZyYW1lDQplYl9pbmRlcF9pbnRlcmFjdGlvbnNfMjAxMV9kZiA8LSBkYXRhLmZyYW1lKGRlcF92YXIgPSBjaGFyYWN0ZXIoKSkNCg0KIyBMb29wIG92ZXIgdGhlIGxpc3QgDQpmb3IgKGkgaW4gc2VxX2Fsb25nKGViX2xpc3RfaW50ZXJhY3Rpb25zXzIwMTEpKSB7DQoNCiAgIyBFeHRyYWN0IHRoZSBkZXBlbmRlbnQgdmFyaWFibGUgc28gdGhhdCB3ZSBrbm93IGZvciB3aGljaCBkZXAgdmFyIHRoZSBlZmZlY3RzIGFyZQ0KICBkZXBfdmFyIDwtIGFzLmNoYXJhY3RlcihlYl9saXN0X2ludGVyYWN0aW9uc18yMDExW1tpXV0kbXUudGVybXNbWzJdXSkNCiAgDQogICAgIyBTdW1tYXJpemUgdGhlIG1vZGVsDQogIHN1bSA8LSBzdW1tYXJ5KGViX2xpc3RfaW50ZXJhY3Rpb25zXzIwMTFbW2ldXSkNCiAgDQogICAgIG11X3NleF9lc3QgPC0gc3VtW1szXV0NCiAgbXVfc2V4X3NkIDwtIHN1bVtbMywyXV0NCiAgbXVfaXNjZWRfbWVkX2VzdCA8LSBzdW1bWzRdXQ0KICBtdV9pc2NlZF9tZWRfc2QgPC0gc3VtW1s0LDJdXQ0KICBtdV9pc2NlZF9oaWdoX2VzdCA8LSBzdW1bWzVdXQ0KICBtdV9pc2NlZF9oaWdoX3NkIDwtIHN1bVtbNSwyXV0NCiAgbXVfYWdlX2VzdCA8LSBzdW1bWzZdXQ0KICBtdV9hZ2Vfc2QgPC0gc3VtW1s2LDJdXQ0KICANCiAgIG11X3NleF9lc3RfaW50ZXIgPC0gc3VtW1s4XV0NCiAgbXVfc2V4X3NkX2ludGVyIDwtIHN1bVtbOCwyXV0NCiAgbXVfaXNjZWRfbWVkX2VzdF9pbnRlciA8LSBzdW1bWzldXQ0KICBtdV9pc2NlZF9tZWRfc2RfaW50ZXIgPC0gc3VtW1s5LDJdXQ0KICBtdV9pc2NlZF9oaWdoX2VzdF9pbnRlciA8LSBzdW1bWzEwXV0NCiAgbXVfaXNjZWRfaGlnaF9zZF9pbnRlciA8LSBzdW1bWzEwLDJdXQ0KICBtdV9hZ2VfZXN0X2ludGVyIDwtIHN1bVtbN11dDQogIG11X2FnZV9zZF9pbnRlciA8LSBzdW1bWzcsMl1dDQoNCiAgIyBWYXJpYW5jZQ0KICBzaWdfc2V4X2VzdCA8LSBzdW1bWzldXQ0KICBzaWdfc2V4X3NkIDwtIHN1bVtbOSwyXV0NCiAgc2lnX2lzY2VkX21lZF9lc3QgPC0gc3VtW1sxMF1dDQogIHNpZ19pc2NlZF9tZWRfc2QgPC0gc3VtW1sxMCwyXV0NCiAgc2lnX2lzY2VkX2hpZ2hfZXN0IDwtIHN1bVtbMTFdXQ0KICBzaWdfaXNjZWRfaGlnaF9zZCA8LSBzdW1bWzExLDJdXQ0KICBzaWdfYWdlX2VzdCA8LSBzdW1bWzEyXV0NCiAgc2lnX2FnZV9zZCA8LSBzdW1bWzEyLDJdXQ0KICANCiAgc2lnX3NleF9lc3RfaW50ZXIgPC0gc3VtW1sxOF1dDQogIHNpZ19zZXhfc2RfaW50ZXIgPC0gc3VtW1sxOCwyXV0NCiAgc2lnX2lzY2VkX21lZF9lc3RfaW50ZXIgPC0gc3VtW1sxOV1dDQogIHNpZ19pc2NlZF9tZWRfc2RfaW50ZXIgPC0gc3VtW1sxOSwyXV0NCiAgc2lnX2lzY2VkX2hpZ2hfZXN0X2ludGVyIDwtIHN1bVtbMjBdXQ0KICBzaWdfaXNjZWRfaGlnaF9zZF9pbnRlciA8LSBzdW1bWzIwLDJdXQ0KICBzaWdfYWdlX2VzdF9pbnRlciA8LSBzdW1bWzE3XV0NCiAgc2lnX2FnZV9zZF9pbnRlciA8LSBzdW1bWzE3LDJdXQ0KDQoNCiAgIyBQdXQgdGhlIHJlc3VsdHMgaW4gYSBkYXRhZnJhbWUNCiAgZWJfaW5kZXBfaW50ZXJhY3Rpb25zXzIwMTFfZGYgPC0gcmJpbmQoZWJfaW5kZXBfaW50ZXJhY3Rpb25zXzIwMTFfZGYsIGRhdGEuZnJhbWUoZGVwX3ZhciA9IGRlcF92YXIsIG11X3NleF9lc3QsIG11X3NleF9zZCwgbXVfaXNjZWRfbWVkX2VzdCwgbXVfaXNjZWRfbWVkX3NkLCBtdV9pc2NlZF9oaWdoX2VzdCwgbXVfaXNjZWRfaGlnaF9zZCwgbXVfYWdlX2VzdCwgbXVfYWdlX3NkLCBzaWdfc2V4X2VzdCwgc2lnX3NleF9zZCwgc2lnX2lzY2VkX21lZF9lc3QsIHNpZ19pc2NlZF9tZWRfc2QsIHNpZ19pc2NlZF9oaWdoX2VzdCwgc2lnX2lzY2VkX2hpZ2hfc2QsIHNpZ19hZ2VfZXN0LCBzaWdfYWdlX3NkLCBtdV9zZXhfZXN0X2ludGVyLCBtdV9zZXhfc2RfaW50ZXIsIG11X2lzY2VkX21lZF9lc3RfaW50ZXIsIG11X2lzY2VkX21lZF9zZF9pbnRlciwgbXVfaXNjZWRfaGlnaF9lc3RfaW50ZXIsIG11X2lzY2VkX2hpZ2hfc2RfaW50ZXIsIG11X2FnZV9lc3RfaW50ZXIsIG11X2FnZV9zZF9pbnRlciwgc2lnX3NleF9lc3RfaW50ZXIsIHNpZ19zZXhfc2RfaW50ZXIsIHNpZ19pc2NlZF9tZWRfZXN0X2ludGVyLCBzaWdfaXNjZWRfbWVkX3NkX2ludGVyLCBzaWdfaXNjZWRfaGlnaF9lc3RfaW50ZXIsIHNpZ19pc2NlZF9oaWdoX3NkX2ludGVyLCBzaWdfYWdlX2VzdF9pbnRlciwgc2lnX2FnZV9zZF9pbnRlcikpDQogICAgfQ0KYGBgDQoNCg0KYGBge3J9DQojIFN0b3JlIHRoZSByZXN1bHRzIGluIGEgbmV3IGRhdGFmcmFtZQ0KZWJfaW5kZXBfaW50ZXJhY3Rpb25zX2J1eXByb2RfZGYgPC0gZGF0YS5mcmFtZShkZXBfdmFyID0gY2hhcmFjdGVyKCkpDQoNCiMgTG9vcCBvdmVyIHRoZSBsaXN0IA0KZm9yIChpIGluIHNlcV9hbG9uZyhlYl9saXN0X2ludGVyYWN0aW9uc19idXlwcm9kKSkgew0KDQogICMgRXh0cmFjdCB0aGUgZGVwZW5kZW50IHZhcmlhYmxlIHNvIHRoYXQgd2Uga25vdyBmb3Igd2hpY2ggZGVwIHZhciB0aGUgZWZmZWN0cyBhcmUNCiAgZGVwX3ZhciA8LSBhcy5jaGFyYWN0ZXIoZWJfbGlzdF9pbnRlcmFjdGlvbnNfYnV5cHJvZFtbaV1dJG11LnRlcm1zW1syXV0pDQogIA0KICAgICMgU3VtbWFyaXplIHRoZSBtb2RlbA0KICBzdW0gPC0gc3VtbWFyeShlYl9saXN0X2ludGVyYWN0aW9uc19idXlwcm9kW1tpXV0pDQogIA0KICAgICBtdV9zZXhfZXN0IDwtIHN1bVtbM11dDQogIG11X3NleF9zZCA8LSBzdW1bWzMsMl1dDQogIG11X2lzY2VkX21lZF9lc3QgPC0gc3VtW1s0XV0NCiAgbXVfaXNjZWRfbWVkX3NkIDwtIHN1bVtbNCwyXV0NCiAgbXVfaXNjZWRfaGlnaF9lc3QgPC0gc3VtW1s1XV0NCiAgbXVfaXNjZWRfaGlnaF9zZCA8LSBzdW1bWzUsMl1dDQogIG11X2FnZV9lc3QgPC0gc3VtW1s2XV0NCiAgbXVfYWdlX3NkIDwtIHN1bVtbNiwyXV0NCiAgDQogICBtdV9zZXhfZXN0X2ludGVyIDwtIHN1bVtbOF1dDQogIG11X3NleF9zZF9pbnRlciA8LSBzdW1bWzgsMl1dDQogIG11X2lzY2VkX21lZF9lc3RfaW50ZXIgPC0gc3VtW1s5XV0NCiAgbXVfaXNjZWRfbWVkX3NkX2ludGVyIDwtIHN1bVtbOSwyXV0NCiAgbXVfaXNjZWRfaGlnaF9lc3RfaW50ZXIgPC0gc3VtW1sxMF1dDQogIG11X2lzY2VkX2hpZ2hfc2RfaW50ZXIgPC0gc3VtW1sxMCwyXV0NCiAgbXVfYWdlX2VzdF9pbnRlciA8LSBzdW1bWzddXQ0KICBtdV9hZ2Vfc2RfaW50ZXIgPC0gc3VtW1s3LDJdXQ0KDQogICMgVmFyaWFuY2UNCiAgc2lnX3NleF9lc3QgPC0gc3VtW1s5XV0NCiAgc2lnX3NleF9zZCA8LSBzdW1bWzksMl1dDQogIHNpZ19pc2NlZF9tZWRfZXN0IDwtIHN1bVtbMTBdXQ0KICBzaWdfaXNjZWRfbWVkX3NkIDwtIHN1bVtbMTAsMl1dDQogIHNpZ19pc2NlZF9oaWdoX2VzdCA8LSBzdW1bWzExXV0NCiAgc2lnX2lzY2VkX2hpZ2hfc2QgPC0gc3VtW1sxMSwyXV0NCiAgc2lnX2FnZV9lc3QgPC0gc3VtW1sxMl1dDQogIHNpZ19hZ2Vfc2QgPC0gc3VtW1sxMiwyXV0NCiAgDQogIHNpZ19zZXhfZXN0X2ludGVyIDwtIHN1bVtbMThdXQ0KICBzaWdfc2V4X3NkX2ludGVyIDwtIHN1bVtbMTgsMl1dDQogIHNpZ19pc2NlZF9tZWRfZXN0X2ludGVyIDwtIHN1bVtbMTldXQ0KICBzaWdfaXNjZWRfbWVkX3NkX2ludGVyIDwtIHN1bVtbMTksMl1dDQogIHNpZ19pc2NlZF9oaWdoX2VzdF9pbnRlciA8LSBzdW1bWzIwXV0NCiAgc2lnX2lzY2VkX2hpZ2hfc2RfaW50ZXIgPC0gc3VtW1syMCwyXV0NCiAgc2lnX2FnZV9lc3RfaW50ZXIgPC0gc3VtW1sxN11dDQogIHNpZ19hZ2Vfc2RfaW50ZXIgPC0gc3VtW1sxNywyXV0NCg0KDQogICMgUHV0IHRoZSByZXN1bHRzIGluIGEgZGF0YWZyYW1lDQogIGViX2luZGVwX2ludGVyYWN0aW9uc19idXlwcm9kX2RmIDwtIHJiaW5kKGViX2luZGVwX2ludGVyYWN0aW9uc19idXlwcm9kX2RmLCBkYXRhLmZyYW1lKGRlcF92YXIgPSBkZXBfdmFyLCBtdV9zZXhfZXN0LCBtdV9zZXhfc2QsIG11X2lzY2VkX21lZF9lc3QsIG11X2lzY2VkX21lZF9zZCwgbXVfaXNjZWRfaGlnaF9lc3QsIG11X2lzY2VkX2hpZ2hfc2QsIG11X2FnZV9lc3QsIG11X2FnZV9zZCwgc2lnX3NleF9lc3QsIHNpZ19zZXhfc2QsIHNpZ19pc2NlZF9tZWRfZXN0LCBzaWdfaXNjZWRfbWVkX3NkLCBzaWdfaXNjZWRfaGlnaF9lc3QsIHNpZ19pc2NlZF9oaWdoX3NkLCBzaWdfYWdlX2VzdCwgc2lnX2FnZV9zZCwgbXVfc2V4X2VzdF9pbnRlciwgbXVfc2V4X3NkX2ludGVyLCBtdV9pc2NlZF9tZWRfZXN0X2ludGVyLCBtdV9pc2NlZF9tZWRfc2RfaW50ZXIsIG11X2lzY2VkX2hpZ2hfZXN0X2ludGVyLCBtdV9pc2NlZF9oaWdoX3NkX2ludGVyLCBtdV9hZ2VfZXN0X2ludGVyLCBtdV9hZ2Vfc2RfaW50ZXIsIHNpZ19zZXhfZXN0X2ludGVyLCBzaWdfc2V4X3NkX2ludGVyLCBzaWdfaXNjZWRfbWVkX2VzdF9pbnRlciwgc2lnX2lzY2VkX21lZF9zZF9pbnRlciwgc2lnX2lzY2VkX2hpZ2hfZXN0X2ludGVyLCBzaWdfaXNjZWRfaGlnaF9zZF9pbnRlciwgc2lnX2FnZV9lc3RfaW50ZXIsIHNpZ19hZ2Vfc2RfaW50ZXIpKQ0KICAgIH0NCmBgYA0KDQoNCmBgYHtyfQ0KIyBTdG9yZSB0aGUgcmVzdWx0cyBpbiBhIG5ldyBkYXRhZnJhbWUNCmViX2luZGVwX2ludGVyYWN0aW9uc19jY2hhbmdlMl9kZiA8LSBkYXRhLmZyYW1lKGRlcF92YXIgPSBjaGFyYWN0ZXIoKSkNCg0KIyBMb29wIG92ZXIgdGhlIGxpc3QgDQpmb3IgKGkgaW4gc2VxX2Fsb25nKGViX2xpc3RfaW50ZXJhY3Rpb25zX2NjaGFuZ2UyKSkgew0KDQogICMgRXh0cmFjdCB0aGUgZGVwZW5kZW50IHZhcmlhYmxlIHNvIHRoYXQgd2Uga25vdyBmb3Igd2hpY2ggZGVwIHZhciB0aGUgZWZmZWN0cyBhcmUNCiAgZGVwX3ZhciA8LSBhcy5jaGFyYWN0ZXIoZWJfbGlzdF9pbnRlcmFjdGlvbnNfY2NoYW5nZTJbW2ldXSRtdS50ZXJtc1tbMl1dKQ0KICANCiAgICAjIFN1bW1hcml6ZSB0aGUgbW9kZWwNCiAgc3VtIDwtIHN1bW1hcnkoZWJfbGlzdF9pbnRlcmFjdGlvbnNfY2NoYW5nZTJbW2ldXSkNCiAgDQogICAgIG11X3NleF9lc3QgPC0gc3VtW1szXV0NCiAgbXVfc2V4X3NkIDwtIHN1bVtbMywyXV0NCiAgbXVfaXNjZWRfbWVkX2VzdCA8LSBzdW1bWzRdXQ0KICBtdV9pc2NlZF9tZWRfc2QgPC0gc3VtW1s0LDJdXQ0KICBtdV9pc2NlZF9oaWdoX2VzdCA8LSBzdW1bWzVdXQ0KICBtdV9pc2NlZF9oaWdoX3NkIDwtIHN1bVtbNSwyXV0NCiAgbXVfYWdlX2VzdCA8LSBzdW1bWzZdXQ0KICBtdV9hZ2Vfc2QgPC0gc3VtW1s2LDJdXQ0KICANCiAgIG11X3NleF9lc3RfaW50ZXIgPC0gc3VtW1s4XV0NCiAgbXVfc2V4X3NkX2ludGVyIDwtIHN1bVtbOCwyXV0NCiAgbXVfaXNjZWRfbWVkX2VzdF9pbnRlciA8LSBzdW1bWzldXQ0KICBtdV9pc2NlZF9tZWRfc2RfaW50ZXIgPC0gc3VtW1s5LDJdXQ0KICBtdV9pc2NlZF9oaWdoX2VzdF9pbnRlciA8LSBzdW1bWzEwXV0NCiAgbXVfaXNjZWRfaGlnaF9zZF9pbnRlciA8LSBzdW1bWzEwLDJdXQ0KICBtdV9hZ2VfZXN0X2ludGVyIDwtIHN1bVtbN11dDQogIG11X2FnZV9zZF9pbnRlciA8LSBzdW1bWzcsMl1dDQoNCiAgIyBWYXJpYW5jZQ0KICBzaWdfc2V4X2VzdCA8LSBzdW1bWzldXQ0KICBzaWdfc2V4X3NkIDwtIHN1bVtbOSwyXV0NCiAgc2lnX2lzY2VkX21lZF9lc3QgPC0gc3VtW1sxMF1dDQogIHNpZ19pc2NlZF9tZWRfc2QgPC0gc3VtW1sxMCwyXV0NCiAgc2lnX2lzY2VkX2hpZ2hfZXN0IDwtIHN1bVtbMTFdXQ0KICBzaWdfaXNjZWRfaGlnaF9zZCA8LSBzdW1bWzExLDJdXQ0KICBzaWdfYWdlX2VzdCA8LSBzdW1bWzEyXV0NCiAgc2lnX2FnZV9zZCA8LSBzdW1bWzEyLDJdXQ0KICANCiAgc2lnX3NleF9lc3RfaW50ZXIgPC0gc3VtW1sxOF1dDQogIHNpZ19zZXhfc2RfaW50ZXIgPC0gc3VtW1sxOCwyXV0NCiAgc2lnX2lzY2VkX21lZF9lc3RfaW50ZXIgPC0gc3VtW1sxOV1dDQogIHNpZ19pc2NlZF9tZWRfc2RfaW50ZXIgPC0gc3VtW1sxOSwyXV0NCiAgc2lnX2lzY2VkX2hpZ2hfZXN0X2ludGVyIDwtIHN1bVtbMjBdXQ0KICBzaWdfaXNjZWRfaGlnaF9zZF9pbnRlciA8LSBzdW1bWzIwLDJdXQ0KICBzaWdfYWdlX2VzdF9pbnRlciA8LSBzdW1bWzE3XV0NCiAgc2lnX2FnZV9zZF9pbnRlciA8LSBzdW1bWzE3LDJdXQ0KDQoNCiAgIyBQdXQgdGhlIHJlc3VsdHMgaW4gYSBkYXRhZnJhbWUNCiAgZWJfaW5kZXBfaW50ZXJhY3Rpb25zX2NjaGFuZ2UyX2RmIDwtIHJiaW5kKGViX2luZGVwX2ludGVyYWN0aW9uc19jY2hhbmdlMl9kZiwgZGF0YS5mcmFtZShkZXBfdmFyID0gZGVwX3ZhciwgbXVfc2V4X2VzdCwgbXVfc2V4X3NkLCBtdV9pc2NlZF9tZWRfZXN0LCBtdV9pc2NlZF9tZWRfc2QsIG11X2lzY2VkX2hpZ2hfZXN0LCBtdV9pc2NlZF9oaWdoX3NkLCBtdV9hZ2VfZXN0LCBtdV9hZ2Vfc2QsIHNpZ19zZXhfZXN0LCBzaWdfc2V4X3NkLCBzaWdfaXNjZWRfbWVkX2VzdCwgc2lnX2lzY2VkX21lZF9zZCwgc2lnX2lzY2VkX2hpZ2hfZXN0LCBzaWdfaXNjZWRfaGlnaF9zZCwgc2lnX2FnZV9lc3QsIHNpZ19hZ2Vfc2QsIG11X3NleF9lc3RfaW50ZXIsIG11X3NleF9zZF9pbnRlciwgbXVfaXNjZWRfbWVkX2VzdF9pbnRlciwgbXVfaXNjZWRfbWVkX3NkX2ludGVyLCBtdV9pc2NlZF9oaWdoX2VzdF9pbnRlciwgbXVfaXNjZWRfaGlnaF9zZF9pbnRlciwgbXVfYWdlX2VzdF9pbnRlciwgbXVfYWdlX3NkX2ludGVyLCBzaWdfc2V4X2VzdF9pbnRlciwgc2lnX3NleF9zZF9pbnRlciwgc2lnX2lzY2VkX21lZF9lc3RfaW50ZXIsIHNpZ19pc2NlZF9tZWRfc2RfaW50ZXIsIHNpZ19pc2NlZF9oaWdoX2VzdF9pbnRlciwgc2lnX2lzY2VkX2hpZ2hfc2RfaW50ZXIsIHNpZ19hZ2VfZXN0X2ludGVyLCBzaWdfYWdlX3NkX2ludGVyKSkNCiAgICB9DQpgYGANCg0KDQpgYGB7cn0NCiMgU3RvcmUgdGhlIHJlc3VsdHMgaW4gYSBuZXcgZGF0YWZyYW1lDQplYl9pbmRlcF9pbnRlcmFjdGlvbnNfZG9wcm90X2RmIDwtIGRhdGEuZnJhbWUoZGVwX3ZhciA9IGNoYXJhY3RlcigpKQ0KDQojIExvb3Agb3ZlciB0aGUgbGlzdCANCmZvciAoaSBpbiBzZXFfYWxvbmcoZWJfbGlzdF9pbnRlcmFjdGlvbnNfZG9wcm90KSkgew0KDQogICMgRXh0cmFjdCB0aGUgZGVwZW5kZW50IHZhcmlhYmxlIHNvIHRoYXQgd2Uga25vdyBmb3Igd2hpY2ggZGVwIHZhciB0aGUgZWZmZWN0cyBhcmUNCiAgZGVwX3ZhciA8LSBhcy5jaGFyYWN0ZXIoZWJfbGlzdF9pbnRlcmFjdGlvbnNfZG9wcm90W1tpXV0kbXUudGVybXNbWzJdXSkNCiAgDQogICAgIyBTdW1tYXJpemUgdGhlIG1vZGVsDQogIHN1bSA8LSBzdW1tYXJ5KGViX2xpc3RfaW50ZXJhY3Rpb25zX2RvcHJvdFtbaV1dKQ0KICANCiAgICAgbXVfc2V4X2VzdCA8LSBzdW1bWzNdXQ0KICBtdV9zZXhfc2QgPC0gc3VtW1szLDJdXQ0KICBtdV9pc2NlZF9tZWRfZXN0IDwtIHN1bVtbNF1dDQogIG11X2lzY2VkX21lZF9zZCA8LSBzdW1bWzQsMl1dDQogIG11X2lzY2VkX2hpZ2hfZXN0IDwtIHN1bVtbNV1dDQogIG11X2lzY2VkX2hpZ2hfc2QgPC0gc3VtW1s1LDJdXQ0KICBtdV9hZ2VfZXN0IDwtIHN1bVtbNl1dDQogIG11X2FnZV9zZCA8LSBzdW1bWzYsMl1dDQogIA0KICAgbXVfc2V4X2VzdF9pbnRlciA8LSBzdW1bWzhdXQ0KICBtdV9zZXhfc2RfaW50ZXIgPC0gc3VtW1s4LDJdXQ0KICBtdV9pc2NlZF9tZWRfZXN0X2ludGVyIDwtIHN1bVtbOV1dDQogIG11X2lzY2VkX21lZF9zZF9pbnRlciA8LSBzdW1bWzksMl1dDQogIG11X2lzY2VkX2hpZ2hfZXN0X2ludGVyIDwtIHN1bVtbMTBdXQ0KICBtdV9pc2NlZF9oaWdoX3NkX2ludGVyIDwtIHN1bVtbMTAsMl1dDQogIG11X2FnZV9lc3RfaW50ZXIgPC0gc3VtW1s3XV0NCiAgbXVfYWdlX3NkX2ludGVyIDwtIHN1bVtbNywyXV0NCg0KICAjIFZhcmlhbmNlDQogIHNpZ19zZXhfZXN0IDwtIHN1bVtbOV1dDQogIHNpZ19zZXhfc2QgPC0gc3VtW1s5LDJdXQ0KICBzaWdfaXNjZWRfbWVkX2VzdCA8LSBzdW1bWzEwXV0NCiAgc2lnX2lzY2VkX21lZF9zZCA8LSBzdW1bWzEwLDJdXQ0KICBzaWdfaXNjZWRfaGlnaF9lc3QgPC0gc3VtW1sxMV1dDQogIHNpZ19pc2NlZF9oaWdoX3NkIDwtIHN1bVtbMTEsMl1dDQogIHNpZ19hZ2VfZXN0IDwtIHN1bVtbMTJdXQ0KICBzaWdfYWdlX3NkIDwtIHN1bVtbMTIsMl1dDQogIA0KICBzaWdfc2V4X2VzdF9pbnRlciA8LSBzdW1bWzE4XV0NCiAgc2lnX3NleF9zZF9pbnRlciA8LSBzdW1bWzE4LDJdXQ0KICBzaWdfaXNjZWRfbWVkX2VzdF9pbnRlciA8LSBzdW1bWzE5XV0NCiAgc2lnX2lzY2VkX21lZF9zZF9pbnRlciA8LSBzdW1bWzE5LDJdXQ0KICBzaWdfaXNjZWRfaGlnaF9lc3RfaW50ZXIgPC0gc3VtW1syMF1dDQogIHNpZ19pc2NlZF9oaWdoX3NkX2ludGVyIDwtIHN1bVtbMjAsMl1dDQogIHNpZ19hZ2VfZXN0X2ludGVyIDwtIHN1bVtbMTddXQ0KICBzaWdfYWdlX3NkX2ludGVyIDwtIHN1bVtbMTcsMl1dDQoNCg0KICAjIFB1dCB0aGUgcmVzdWx0cyBpbiBhIGRhdGFmcmFtZQ0KICBlYl9pbmRlcF9pbnRlcmFjdGlvbnNfZG9wcm90X2RmIDwtIHJiaW5kKGViX2luZGVwX2ludGVyYWN0aW9uc19kb3Byb3RfZGYsIGRhdGEuZnJhbWUoZGVwX3ZhciA9IGRlcF92YXIsIG11X3NleF9lc3QsIG11X3NleF9zZCwgbXVfaXNjZWRfbWVkX2VzdCwgbXVfaXNjZWRfbWVkX3NkLCBtdV9pc2NlZF9oaWdoX2VzdCwgbXVfaXNjZWRfaGlnaF9zZCwgbXVfYWdlX2VzdCwgbXVfYWdlX3NkLCBzaWdfc2V4X2VzdCwgc2lnX3NleF9zZCwgc2lnX2lzY2VkX21lZF9lc3QsIHNpZ19pc2NlZF9tZWRfc2QsIHNpZ19pc2NlZF9oaWdoX2VzdCwgc2lnX2lzY2VkX2hpZ2hfc2QsIHNpZ19hZ2VfZXN0LCBzaWdfYWdlX3NkLCBtdV9zZXhfZXN0X2ludGVyLCBtdV9zZXhfc2RfaW50ZXIsIG11X2lzY2VkX21lZF9lc3RfaW50ZXIsIG11X2lzY2VkX21lZF9zZF9pbnRlciwgbXVfaXNjZWRfaGlnaF9lc3RfaW50ZXIsIG11X2lzY2VkX2hpZ2hfc2RfaW50ZXIsIG11X2FnZV9lc3RfaW50ZXIsIG11X2FnZV9zZF9pbnRlciwgc2lnX3NleF9lc3RfaW50ZXIsIHNpZ19zZXhfc2RfaW50ZXIsIHNpZ19pc2NlZF9tZWRfZXN0X2ludGVyLCBzaWdfaXNjZWRfbWVkX3NkX2ludGVyLCBzaWdfaXNjZWRfaGlnaF9lc3RfaW50ZXIsIHNpZ19pc2NlZF9oaWdoX3NkX2ludGVyLCBzaWdfYWdlX2VzdF9pbnRlciwgc2lnX2FnZV9zZF9pbnRlcikpDQogICAgfQ0KYGBgDQoNCg0KYGBge3J9DQojIFN0b3JlIHRoZSByZXN1bHRzIGluIGEgbmV3IGRhdGFmcmFtZQ0KZWJfaW5kZXBfaW50ZXJhY3Rpb25zX2RvcHJvdF9jaXR5X2RmIDwtIGRhdGEuZnJhbWUoZGVwX3ZhciA9IGNoYXJhY3RlcigpKQ0KDQojIExvb3Agb3ZlciB0aGUgbGlzdCANCmZvciAoaSBpbiBzZXFfYWxvbmcoZWJfbGlzdF9pbnRlcmFjdGlvbnNfZG9wcm90X2NpdHkpKSB7DQoNCiAgIyBFeHRyYWN0IHRoZSBkZXBlbmRlbnQgdmFyaWFibGUgc28gdGhhdCB3ZSBrbm93IGZvciB3aGljaCBkZXAgdmFyIHRoZSBlZmZlY3RzIGFyZQ0KICBkZXBfdmFyIDwtIGFzLmNoYXJhY3RlcihlYl9saXN0X2ludGVyYWN0aW9uc19kb3Byb3RfY2l0eVtbaV1dJG11LnRlcm1zW1syXV0pDQogIA0KICAgICMgU3VtbWFyaXplIHRoZSBtb2RlbA0KICBzdW0gPC0gc3VtbWFyeShlYl9saXN0X2ludGVyYWN0aW9uc19kb3Byb3RfY2l0eVtbaV1dKQ0KICANCiAgICAgbXVfc2V4X2VzdCA8LSBzdW1bWzNdXQ0KICBtdV9zZXhfc2QgPC0gc3VtW1szLDJdXQ0KICBtdV9pc2NlZF9tZWRfZXN0IDwtIHN1bVtbNF1dDQogIG11X2lzY2VkX21lZF9zZCA8LSBzdW1bWzQsMl1dDQogIG11X2lzY2VkX2hpZ2hfZXN0IDwtIHN1bVtbNV1dDQogIG11X2lzY2VkX2hpZ2hfc2QgPC0gc3VtW1s1LDJdXQ0KICBtdV9hZ2VfZXN0IDwtIHN1bVtbNl1dDQogIG11X2FnZV9zZCA8LSBzdW1bWzYsMl1dDQogIA0KICAgbXVfc2V4X2VzdF9pbnRlciA8LSBzdW1bWzhdXQ0KICBtdV9zZXhfc2RfaW50ZXIgPC0gc3VtW1s4LDJdXQ0KICBtdV9pc2NlZF9tZWRfZXN0X2ludGVyIDwtIHN1bVtbOV1dDQogIG11X2lzY2VkX21lZF9zZF9pbnRlciA8LSBzdW1bWzksMl1dDQogIG11X2lzY2VkX2hpZ2hfZXN0X2ludGVyIDwtIHN1bVtbMTBdXQ0KICBtdV9pc2NlZF9oaWdoX3NkX2ludGVyIDwtIHN1bVtbMTAsMl1dDQogIG11X2FnZV9lc3RfaW50ZXIgPC0gc3VtW1s3XV0NCiAgbXVfYWdlX3NkX2ludGVyIDwtIHN1bVtbNywyXV0NCg0KICAjIFZhcmlhbmNlDQogIHNpZ19zZXhfZXN0IDwtIHN1bVtbOV1dDQogIHNpZ19zZXhfc2QgPC0gc3VtW1s5LDJdXQ0KICBzaWdfaXNjZWRfbWVkX2VzdCA8LSBzdW1bWzEwXV0NCiAgc2lnX2lzY2VkX21lZF9zZCA8LSBzdW1bWzEwLDJdXQ0KICBzaWdfaXNjZWRfaGlnaF9lc3QgPC0gc3VtW1sxMV1dDQogIHNpZ19pc2NlZF9oaWdoX3NkIDwtIHN1bVtbMTEsMl1dDQogIHNpZ19hZ2VfZXN0IDwtIHN1bVtbMTJdXQ0KICBzaWdfYWdlX3NkIDwtIHN1bVtbMTIsMl1dDQogIA0KICBzaWdfc2V4X2VzdF9pbnRlciA8LSBzdW1bWzE4XV0NCiAgc2lnX3NleF9zZF9pbnRlciA8LSBzdW1bWzE4LDJdXQ0KICBzaWdfaXNjZWRfbWVkX2VzdF9pbnRlciA8LSBzdW1bWzE5XV0NCiAgc2lnX2lzY2VkX21lZF9zZF9pbnRlciA8LSBzdW1bWzE5LDJdXQ0KICBzaWdfaXNjZWRfaGlnaF9lc3RfaW50ZXIgPC0gc3VtW1syMF1dDQogIHNpZ19pc2NlZF9oaWdoX3NkX2ludGVyIDwtIHN1bVtbMjAsMl1dDQogIHNpZ19hZ2VfZXN0X2ludGVyIDwtIHN1bVtbMTddXQ0KICBzaWdfYWdlX3NkX2ludGVyIDwtIHN1bVtbMTcsMl1dDQoNCg0KICAjIFB1dCB0aGUgcmVzdWx0cyBpbiBhIGRhdGFmcmFtZQ0KICBlYl9pbmRlcF9pbnRlcmFjdGlvbnNfZG9wcm90X2NpdHlfZGYgPC0gcmJpbmQoZWJfaW5kZXBfaW50ZXJhY3Rpb25zX2RvcHJvdF9jaXR5X2RmLCBkYXRhLmZyYW1lKGRlcF92YXIgPSBkZXBfdmFyLCBtdV9zZXhfZXN0LCBtdV9zZXhfc2QsIG11X2lzY2VkX21lZF9lc3QsIG11X2lzY2VkX21lZF9zZCwgbXVfaXNjZWRfaGlnaF9lc3QsIG11X2lzY2VkX2hpZ2hfc2QsIG11X2FnZV9lc3QsIG11X2FnZV9zZCwgc2lnX3NleF9lc3QsIHNpZ19zZXhfc2QsIHNpZ19pc2NlZF9tZWRfZXN0LCBzaWdfaXNjZWRfbWVkX3NkLCBzaWdfaXNjZWRfaGlnaF9lc3QsIHNpZ19pc2NlZF9oaWdoX3NkLCBzaWdfYWdlX2VzdCwgc2lnX2FnZV9zZCwgbXVfc2V4X2VzdF9pbnRlciwgbXVfc2V4X3NkX2ludGVyLCBtdV9pc2NlZF9tZWRfZXN0X2ludGVyLCBtdV9pc2NlZF9tZWRfc2RfaW50ZXIsIG11X2lzY2VkX2hpZ2hfZXN0X2ludGVyLCBtdV9pc2NlZF9oaWdoX3NkX2ludGVyLCBtdV9hZ2VfZXN0X2ludGVyLCBtdV9hZ2Vfc2RfaW50ZXIsIHNpZ19zZXhfZXN0X2ludGVyLCBzaWdfc2V4X3NkX2ludGVyLCBzaWdfaXNjZWRfbWVkX2VzdF9pbnRlciwgc2lnX2lzY2VkX21lZF9zZF9pbnRlciwgc2lnX2lzY2VkX2hpZ2hfZXN0X2ludGVyLCBzaWdfaXNjZWRfaGlnaF9zZF9pbnRlciwgc2lnX2FnZV9lc3RfaW50ZXIsIHNpZ19hZ2Vfc2RfaW50ZXIpKQ0KICAgIH0NCmBgYA0KDQoNCmBgYHtyfQ0KIyBTdG9yZSB0aGUgcmVzdWx0cyBpbiBhIG5ldyBkYXRhZnJhbWUNCmViX2luZGVwX2ludGVyYWN0aW9uc19lZmZfZGFpbHlfZGYgPC0gZGF0YS5mcmFtZShkZXBfdmFyID0gY2hhcmFjdGVyKCkpDQoNCiMgTG9vcCBvdmVyIHRoZSBsaXN0IA0KZm9yIChpIGluIHNlcV9hbG9uZyhlYl9saXN0X2ludGVyYWN0aW9uc19lZmZfZGFpbHkpKSB7DQoNCiAgIyBFeHRyYWN0IHRoZSBkZXBlbmRlbnQgdmFyaWFibGUgc28gdGhhdCB3ZSBrbm93IGZvciB3aGljaCBkZXAgdmFyIHRoZSBlZmZlY3RzIGFyZQ0KICBkZXBfdmFyIDwtIGFzLmNoYXJhY3RlcihlYl9saXN0X2ludGVyYWN0aW9uc19lZmZfZGFpbHlbW2ldXSRtdS50ZXJtc1tbMl1dKQ0KICANCiAgICAjIFN1bW1hcml6ZSB0aGUgbW9kZWwNCiAgc3VtIDwtIHN1bW1hcnkoZWJfbGlzdF9pbnRlcmFjdGlvbnNfZWZmX2RhaWx5W1tpXV0pDQogIA0KICAgICBtdV9zZXhfZXN0IDwtIHN1bVtbM11dDQogIG11X3NleF9zZCA8LSBzdW1bWzMsMl1dDQogIG11X2lzY2VkX21lZF9lc3QgPC0gc3VtW1s0XV0NCiAgbXVfaXNjZWRfbWVkX3NkIDwtIHN1bVtbNCwyXV0NCiAgbXVfaXNjZWRfaGlnaF9lc3QgPC0gc3VtW1s1XV0NCiAgbXVfaXNjZWRfaGlnaF9zZCA8LSBzdW1bWzUsMl1dDQogIG11X2FnZV9lc3QgPC0gc3VtW1s2XV0NCiAgbXVfYWdlX3NkIDwtIHN1bVtbNiwyXV0NCiAgDQogICBtdV9zZXhfZXN0X2ludGVyIDwtIHN1bVtbOF1dDQogIG11X3NleF9zZF9pbnRlciA8LSBzdW1bWzgsMl1dDQogIG11X2lzY2VkX21lZF9lc3RfaW50ZXIgPC0gc3VtW1s5XV0NCiAgbXVfaXNjZWRfbWVkX3NkX2ludGVyIDwtIHN1bVtbOSwyXV0NCiAgbXVfaXNjZWRfaGlnaF9lc3RfaW50ZXIgPC0gc3VtW1sxMF1dDQogIG11X2lzY2VkX2hpZ2hfc2RfaW50ZXIgPC0gc3VtW1sxMCwyXV0NCiAgbXVfYWdlX2VzdF9pbnRlciA8LSBzdW1bWzddXQ0KICBtdV9hZ2Vfc2RfaW50ZXIgPC0gc3VtW1s3LDJdXQ0KDQogICMgVmFyaWFuY2UNCiAgc2lnX3NleF9lc3QgPC0gc3VtW1s5XV0NCiAgc2lnX3NleF9zZCA8LSBzdW1bWzksMl1dDQogIHNpZ19pc2NlZF9tZWRfZXN0IDwtIHN1bVtbMTBdXQ0KICBzaWdfaXNjZWRfbWVkX3NkIDwtIHN1bVtbMTAsMl1dDQogIHNpZ19pc2NlZF9oaWdoX2VzdCA8LSBzdW1bWzExXV0NCiAgc2lnX2lzY2VkX2hpZ2hfc2QgPC0gc3VtW1sxMSwyXV0NCiAgc2lnX2FnZV9lc3QgPC0gc3VtW1sxMl1dDQogIHNpZ19hZ2Vfc2QgPC0gc3VtW1sxMiwyXV0NCiAgDQogIHNpZ19zZXhfZXN0X2ludGVyIDwtIHN1bVtbMThdXQ0KICBzaWdfc2V4X3NkX2ludGVyIDwtIHN1bVtbMTgsMl1dDQogIHNpZ19pc2NlZF9tZWRfZXN0X2ludGVyIDwtIHN1bVtbMTldXQ0KICBzaWdfaXNjZWRfbWVkX3NkX2ludGVyIDwtIHN1bVtbMTksMl1dDQogIHNpZ19pc2NlZF9oaWdoX2VzdF9pbnRlciA8LSBzdW1bWzIwXV0NCiAgc2lnX2lzY2VkX2hpZ2hfc2RfaW50ZXIgPC0gc3VtW1syMCwyXV0NCiAgc2lnX2FnZV9lc3RfaW50ZXIgPC0gc3VtW1sxN11dDQogIHNpZ19hZ2Vfc2RfaW50ZXIgPC0gc3VtW1sxNywyXV0NCg0KDQogICMgUHV0IHRoZSByZXN1bHRzIGluIGEgZGF0YWZyYW1lDQogIGViX2luZGVwX2ludGVyYWN0aW9uc19lZmZfZGFpbHlfZGYgPC0gcmJpbmQoZWJfaW5kZXBfaW50ZXJhY3Rpb25zX2VmZl9kYWlseV9kZiwgZGF0YS5mcmFtZShkZXBfdmFyID0gZGVwX3ZhciwgbXVfc2V4X2VzdCwgbXVfc2V4X3NkLCBtdV9pc2NlZF9tZWRfZXN0LCBtdV9pc2NlZF9tZWRfc2QsIG11X2lzY2VkX2hpZ2hfZXN0LCBtdV9pc2NlZF9oaWdoX3NkLCBtdV9hZ2VfZXN0LCBtdV9hZ2Vfc2QsIHNpZ19zZXhfZXN0LCBzaWdfc2V4X3NkLCBzaWdfaXNjZWRfbWVkX2VzdCwgc2lnX2lzY2VkX21lZF9zZCwgc2lnX2lzY2VkX2hpZ2hfZXN0LCBzaWdfaXNjZWRfaGlnaF9zZCwgc2lnX2FnZV9lc3QsIHNpZ19hZ2Vfc2QsIG11X3NleF9lc3RfaW50ZXIsIG11X3NleF9zZF9pbnRlciwgbXVfaXNjZWRfbWVkX2VzdF9pbnRlciwgbXVfaXNjZWRfbWVkX3NkX2ludGVyLCBtdV9pc2NlZF9oaWdoX2VzdF9pbnRlciwgbXVfaXNjZWRfaGlnaF9zZF9pbnRlciwgbXVfYWdlX2VzdF9pbnRlciwgbXVfYWdlX3NkX2ludGVyLCBzaWdfc2V4X2VzdF9pbnRlciwgc2lnX3NleF9zZF9pbnRlciwgc2lnX2lzY2VkX21lZF9lc3RfaW50ZXIsIHNpZ19pc2NlZF9tZWRfc2RfaW50ZXIsIHNpZ19pc2NlZF9oaWdoX2VzdF9pbnRlciwgc2lnX2lzY2VkX2hpZ2hfc2RfaW50ZXIsIHNpZ19hZ2VfZXN0X2ludGVyLCBzaWdfYWdlX3NkX2ludGVyKSkNCn0NCmBgYA0KDQoNCmBgYHtyfQ0KIyBTdG9yZSB0aGUgcmVzdWx0cyBpbiBhIG5ldyBkYXRhZnJhbWUNCmViX2luZGVwX2ludGVyYWN0aW9uc19wZXJzX2ltcF9kZiA8LSBkYXRhLmZyYW1lKGRlcF92YXIgPSBjaGFyYWN0ZXIoKSkNCg0KIyBMb29wIG92ZXIgdGhlIGxpc3QgDQpmb3IgKGkgaW4gc2VxX2Fsb25nKGViX2xpc3RfaW50ZXJhY3Rpb25zX3BlcnNfaW1wKSkgew0KDQogICMgRXh0cmFjdCB0aGUgZGVwZW5kZW50IHZhcmlhYmxlIHNvIHRoYXQgd2Uga25vdyBmb3Igd2hpY2ggZGVwIHZhciB0aGUgZWZmZWN0cyBhcmUNCiAgZGVwX3ZhciA8LSBhcy5jaGFyYWN0ZXIoZWJfbGlzdF9pbnRlcmFjdGlvbnNfcGVyc19pbXBbW2ldXSRtdS50ZXJtc1tbMl1dKQ0KICANCiAgICAjIFN1bW1hcml6ZSB0aGUgbW9kZWwNCiAgc3VtIDwtIHN1bW1hcnkoZWJfbGlzdF9pbnRlcmFjdGlvbnNfcGVyc19pbXBbW2ldXSkNCiAgDQogICAgIG11X3NleF9lc3QgPC0gc3VtW1szXV0NCiAgbXVfc2V4X3NkIDwtIHN1bVtbMywyXV0NCiAgbXVfaXNjZWRfbWVkX2VzdCA8LSBzdW1bWzRdXQ0KICBtdV9pc2NlZF9tZWRfc2QgPC0gc3VtW1s0LDJdXQ0KICBtdV9pc2NlZF9oaWdoX2VzdCA8LSBzdW1bWzVdXQ0KICBtdV9pc2NlZF9oaWdoX3NkIDwtIHN1bVtbNSwyXV0NCiAgbXVfYWdlX2VzdCA8LSBzdW1bWzZdXQ0KICBtdV9hZ2Vfc2QgPC0gc3VtW1s2LDJdXQ0KICANCiAgIG11X3NleF9lc3RfaW50ZXIgPC0gc3VtW1s4XV0NCiAgbXVfc2V4X3NkX2ludGVyIDwtIHN1bVtbOCwyXV0NCiAgbXVfaXNjZWRfbWVkX2VzdF9pbnRlciA8LSBzdW1bWzldXQ0KICBtdV9pc2NlZF9tZWRfc2RfaW50ZXIgPC0gc3VtW1s5LDJdXQ0KICBtdV9pc2NlZF9oaWdoX2VzdF9pbnRlciA8LSBzdW1bWzEwXV0NCiAgbXVfaXNjZWRfaGlnaF9zZF9pbnRlciA8LSBzdW1bWzEwLDJdXQ0KICBtdV9hZ2VfZXN0X2ludGVyIDwtIHN1bVtbN11dDQogIG11X2FnZV9zZF9pbnRlciA8LSBzdW1bWzcsMl1dDQoNCiAgIyBWYXJpYW5jZQ0KICBzaWdfc2V4X2VzdCA8LSBzdW1bWzldXQ0KICBzaWdfc2V4X3NkIDwtIHN1bVtbOSwyXV0NCiAgc2lnX2lzY2VkX21lZF9lc3QgPC0gc3VtW1sxMF1dDQogIHNpZ19pc2NlZF9tZWRfc2QgPC0gc3VtW1sxMCwyXV0NCiAgc2lnX2lzY2VkX2hpZ2hfZXN0IDwtIHN1bVtbMTFdXQ0KICBzaWdfaXNjZWRfaGlnaF9zZCA8LSBzdW1bWzExLDJdXQ0KICBzaWdfYWdlX2VzdCA8LSBzdW1bWzEyXV0NCiAgc2lnX2FnZV9zZCA8LSBzdW1bWzEyLDJdXQ0KICANCiAgc2lnX3NleF9lc3RfaW50ZXIgPC0gc3VtW1sxOF1dDQogIHNpZ19zZXhfc2RfaW50ZXIgPC0gc3VtW1sxOCwyXV0NCiAgc2lnX2lzY2VkX21lZF9lc3RfaW50ZXIgPC0gc3VtW1sxOV1dDQogIHNpZ19pc2NlZF9tZWRfc2RfaW50ZXIgPC0gc3VtW1sxOSwyXV0NCiAgc2lnX2lzY2VkX2hpZ2hfZXN0X2ludGVyIDwtIHN1bVtbMjBdXQ0KICBzaWdfaXNjZWRfaGlnaF9zZF9pbnRlciA8LSBzdW1bWzIwLDJdXQ0KICBzaWdfYWdlX2VzdF9pbnRlciA8LSBzdW1bWzE3XV0NCiAgc2lnX2FnZV9zZF9pbnRlciA8LSBzdW1bWzE3LDJdXQ0KDQoNCiAgIyBQdXQgdGhlIHJlc3VsdHMgaW4gYSBkYXRhZnJhbWUNCiAgZWJfaW5kZXBfaW50ZXJhY3Rpb25zX3BlcnNfaW1wX2RmIDwtIHJiaW5kKGViX2luZGVwX2ludGVyYWN0aW9uc19wZXJzX2ltcF9kZiwgZGF0YS5mcmFtZShkZXBfdmFyID0gZGVwX3ZhciwgbXVfc2V4X2VzdCwgbXVfc2V4X3NkLCBtdV9pc2NlZF9tZWRfZXN0LCBtdV9pc2NlZF9tZWRfc2QsIG11X2lzY2VkX2hpZ2hfZXN0LCBtdV9pc2NlZF9oaWdoX3NkLCBtdV9hZ2VfZXN0LCBtdV9hZ2Vfc2QsIHNpZ19zZXhfZXN0LCBzaWdfc2V4X3NkLCBzaWdfaXNjZWRfbWVkX2VzdCwgc2lnX2lzY2VkX21lZF9zZCwgc2lnX2lzY2VkX2hpZ2hfZXN0LCBzaWdfaXNjZWRfaGlnaF9zZCwgc2lnX2FnZV9lc3QsIHNpZ19hZ2Vfc2QsIG11X3NleF9lc3RfaW50ZXIsIG11X3NleF9zZF9pbnRlciwgbXVfaXNjZWRfbWVkX2VzdF9pbnRlciwgbXVfaXNjZWRfbWVkX3NkX2ludGVyLCBtdV9pc2NlZF9oaWdoX2VzdF9pbnRlciwgbXVfaXNjZWRfaGlnaF9zZF9pbnRlciwgbXVfYWdlX2VzdF9pbnRlciwgbXVfYWdlX3NkX2ludGVyLCBzaWdfc2V4X2VzdF9pbnRlciwgc2lnX3NleF9zZF9pbnRlciwgc2lnX2lzY2VkX21lZF9lc3RfaW50ZXIsIHNpZ19pc2NlZF9tZWRfc2RfaW50ZXIsIHNpZ19pc2NlZF9oaWdoX2VzdF9pbnRlciwgc2lnX2lzY2VkX2hpZ2hfc2RfaW50ZXIsIHNpZ19hZ2VfZXN0X2ludGVyLCBzaWdfYWdlX3NkX2ludGVyKSkNCiAgICB9DQpgYGANCg0KDQpgYGB7cn0NCiMgU3RvcmUgdGhlIHJlc3VsdHMgaW4gYSBuZXcgZGF0YWZyYW1lDQplYl9pbmRlcF9pbnRlcmFjdGlvbnNfcHJzYWN0aW9uX2RmIDwtIGRhdGEuZnJhbWUoZGVwX3ZhciA9IGNoYXJhY3RlcigpKQ0KDQojIExvb3Agb3ZlciB0aGUgbGlzdCANCmZvciAoaSBpbiBzZXFfYWxvbmcoZWJfbGlzdF9pbnRlcmFjdGlvbnNfcHJzYWN0aW9uKSkgew0KDQogICMgRXh0cmFjdCB0aGUgZGVwZW5kZW50IHZhcmlhYmxlIHNvIHRoYXQgd2Uga25vdyBmb3Igd2hpY2ggZGVwIHZhciB0aGUgZWZmZWN0cyBhcmUNCiAgZGVwX3ZhciA8LSBhcy5jaGFyYWN0ZXIoZWJfbGlzdF9pbnRlcmFjdGlvbnNfcHJzYWN0aW9uW1tpXV0kbXUudGVybXNbWzJdXSkNCiAgDQogICAgIyBTdW1tYXJpemUgdGhlIG1vZGVsDQogIHN1bSA8LSBzdW1tYXJ5KGViX2xpc3RfaW50ZXJhY3Rpb25zX3Byc2FjdGlvbltbaV1dKQ0KICANCiAgICAgbXVfc2V4X2VzdCA8LSBzdW1bWzNdXQ0KICBtdV9zZXhfc2QgPC0gc3VtW1szLDJdXQ0KICBtdV9pc2NlZF9tZWRfZXN0IDwtIHN1bVtbNF1dDQogIG11X2lzY2VkX21lZF9zZCA8LSBzdW1bWzQsMl1dDQogIG11X2lzY2VkX2hpZ2hfZXN0IDwtIHN1bVtbNV1dDQogIG11X2lzY2VkX2hpZ2hfc2QgPC0gc3VtW1s1LDJdXQ0KICBtdV9hZ2VfZXN0IDwtIHN1bVtbNl1dDQogIG11X2FnZV9zZCA8LSBzdW1bWzYsMl1dDQogIA0KICAgbXVfc2V4X2VzdF9pbnRlciA8LSBzdW1bWzhdXQ0KICBtdV9zZXhfc2RfaW50ZXIgPC0gc3VtW1s4LDJdXQ0KICBtdV9pc2NlZF9tZWRfZXN0X2ludGVyIDwtIHN1bVtbOV1dDQogIG11X2lzY2VkX21lZF9zZF9pbnRlciA8LSBzdW1bWzksMl1dDQogIG11X2lzY2VkX2hpZ2hfZXN0X2ludGVyIDwtIHN1bVtbMTBdXQ0KICBtdV9pc2NlZF9oaWdoX3NkX2ludGVyIDwtIHN1bVtbMTAsMl1dDQogIG11X2FnZV9lc3RfaW50ZXIgPC0gc3VtW1s3XV0NCiAgbXVfYWdlX3NkX2ludGVyIDwtIHN1bVtbNywyXV0NCg0KICAjIFZhcmlhbmNlDQogIHNpZ19zZXhfZXN0IDwtIHN1bVtbOV1dDQogIHNpZ19zZXhfc2QgPC0gc3VtW1s5LDJdXQ0KICBzaWdfaXNjZWRfbWVkX2VzdCA8LSBzdW1bWzEwXV0NCiAgc2lnX2lzY2VkX21lZF9zZCA8LSBzdW1bWzEwLDJdXQ0KICBzaWdfaXNjZWRfaGlnaF9lc3QgPC0gc3VtW1sxMV1dDQogIHNpZ19pc2NlZF9oaWdoX3NkIDwtIHN1bVtbMTEsMl1dDQogIHNpZ19hZ2VfZXN0IDwtIHN1bVtbMTJdXQ0KICBzaWdfYWdlX3NkIDwtIHN1bVtbMTIsMl1dDQogIA0KICBzaWdfc2V4X2VzdF9pbnRlciA8LSBzdW1bWzE4XV0NCiAgc2lnX3NleF9zZF9pbnRlciA8LSBzdW1bWzE4LDJdXQ0KICBzaWdfaXNjZWRfbWVkX2VzdF9pbnRlciA8LSBzdW1bWzE5XV0NCiAgc2lnX2lzY2VkX21lZF9zZF9pbnRlciA8LSBzdW1bWzE5LDJdXQ0KICBzaWdfaXNjZWRfaGlnaF9lc3RfaW50ZXIgPC0gc3VtW1syMF1dDQogIHNpZ19pc2NlZF9oaWdoX3NkX2ludGVyIDwtIHN1bVtbMjAsMl1dDQogIHNpZ19hZ2VfZXN0X2ludGVyIDwtIHN1bVtbMTddXQ0KICBzaWdfYWdlX3NkX2ludGVyIDwtIHN1bVtbMTcsMl1dDQoNCg0KICAjIFB1dCB0aGUgcmVzdWx0cyBpbiBhIGRhdGFmcmFtZQ0KICBlYl9pbmRlcF9pbnRlcmFjdGlvbnNfcHJzYWN0aW9uX2RmIDwtIHJiaW5kKGViX2luZGVwX2ludGVyYWN0aW9uc19wcnNhY3Rpb25fZGYsIGRhdGEuZnJhbWUoZGVwX3ZhciA9IGRlcF92YXIsIG11X3NleF9lc3QsIG11X3NleF9zZCwgbXVfaXNjZWRfbWVkX2VzdCwgbXVfaXNjZWRfbWVkX3NkLCBtdV9pc2NlZF9oaWdoX2VzdCwgbXVfaXNjZWRfaGlnaF9zZCwgbXVfYWdlX2VzdCwgbXVfYWdlX3NkLCBzaWdfc2V4X2VzdCwgc2lnX3NleF9zZCwgc2lnX2lzY2VkX21lZF9lc3QsIHNpZ19pc2NlZF9tZWRfc2QsIHNpZ19pc2NlZF9oaWdoX2VzdCwgc2lnX2lzY2VkX2hpZ2hfc2QsIHNpZ19hZ2VfZXN0LCBzaWdfYWdlX3NkLCBtdV9zZXhfZXN0X2ludGVyLCBtdV9zZXhfc2RfaW50ZXIsIG11X2lzY2VkX21lZF9lc3RfaW50ZXIsIG11X2lzY2VkX21lZF9zZF9pbnRlciwgbXVfaXNjZWRfaGlnaF9lc3RfaW50ZXIsIG11X2lzY2VkX2hpZ2hfc2RfaW50ZXIsIG11X2FnZV9lc3RfaW50ZXIsIG11X2FnZV9zZF9pbnRlciwgc2lnX3NleF9lc3RfaW50ZXIsIHNpZ19zZXhfc2RfaW50ZXIsIHNpZ19pc2NlZF9tZWRfZXN0X2ludGVyLCBzaWdfaXNjZWRfbWVkX3NkX2ludGVyLCBzaWdfaXNjZWRfaGlnaF9lc3RfaW50ZXIsIHNpZ19pc2NlZF9oaWdoX3NkX2ludGVyLCBzaWdfYWdlX2VzdF9pbnRlciwgc2lnX2FnZV9zZF9pbnRlcikpDQp9DQpgYGANCg0KDQpgYGB7cn0NCiMgU3RvcmUgdGhlIHJlc3VsdHMgaW4gYSBuZXcgZGF0YWZyYW1lDQplYl9pbmRlcF9pbnRlcmFjdGlvbnNfcXVhbGxpZmVfZGYgPC0gZGF0YS5mcmFtZShkZXBfdmFyID0gY2hhcmFjdGVyKCkpDQoNCiMgTG9vcCBvdmVyIHRoZSBsaXN0IA0KZm9yIChpIGluIHNlcV9hbG9uZyhlYl9saXN0X2ludGVyYWN0aW9uc19xdWFsbGlmZSkpIHsNCg0KICAjIEV4dHJhY3QgdGhlIGRlcGVuZGVudCB2YXJpYWJsZSBzbyB0aGF0IHdlIGtub3cgZm9yIHdoaWNoIGRlcCB2YXIgdGhlIGVmZmVjdHMgYXJlDQogIGRlcF92YXIgPC0gYXMuY2hhcmFjdGVyKGViX2xpc3RfaW50ZXJhY3Rpb25zX3F1YWxsaWZlW1tpXV0kbXUudGVybXNbWzJdXSkNCiAgDQogICAgIyBTdW1tYXJpemUgdGhlIG1vZGVsDQogIHN1bSA8LSBzdW1tYXJ5KGViX2xpc3RfaW50ZXJhY3Rpb25zX3F1YWxsaWZlW1tpXV0pDQogIA0KICAgICBtdV9zZXhfZXN0IDwtIHN1bVtbM11dDQogIG11X3NleF9zZCA8LSBzdW1bWzMsMl1dDQogIG11X2lzY2VkX21lZF9lc3QgPC0gc3VtW1s0XV0NCiAgbXVfaXNjZWRfbWVkX3NkIDwtIHN1bVtbNCwyXV0NCiAgbXVfaXNjZWRfaGlnaF9lc3QgPC0gc3VtW1s1XV0NCiAgbXVfaXNjZWRfaGlnaF9zZCA8LSBzdW1bWzUsMl1dDQogIG11X2FnZV9lc3QgPC0gc3VtW1s2XV0NCiAgbXVfYWdlX3NkIDwtIHN1bVtbNiwyXV0NCiAgDQogICBtdV9zZXhfZXN0X2ludGVyIDwtIHN1bVtbOF1dDQogIG11X3NleF9zZF9pbnRlciA8LSBzdW1bWzgsMl1dDQogIG11X2lzY2VkX21lZF9lc3RfaW50ZXIgPC0gc3VtW1s5XV0NCiAgbXVfaXNjZWRfbWVkX3NkX2ludGVyIDwtIHN1bVtbOSwyXV0NCiAgbXVfaXNjZWRfaGlnaF9lc3RfaW50ZXIgPC0gc3VtW1sxMF1dDQogIG11X2lzY2VkX2hpZ2hfc2RfaW50ZXIgPC0gc3VtW1sxMCwyXV0NCiAgbXVfYWdlX2VzdF9pbnRlciA8LSBzdW1bWzddXQ0KICBtdV9hZ2Vfc2RfaW50ZXIgPC0gc3VtW1s3LDJdXQ0KDQogICMgVmFyaWFuY2UNCiAgc2lnX3NleF9lc3QgPC0gc3VtW1s5XV0NCiAgc2lnX3NleF9zZCA8LSBzdW1bWzksMl1dDQogIHNpZ19pc2NlZF9tZWRfZXN0IDwtIHN1bVtbMTBdXQ0KICBzaWdfaXNjZWRfbWVkX3NkIDwtIHN1bVtbMTAsMl1dDQogIHNpZ19pc2NlZF9oaWdoX2VzdCA8LSBzdW1bWzExXV0NCiAgc2lnX2lzY2VkX2hpZ2hfc2QgPC0gc3VtW1sxMSwyXV0NCiAgc2lnX2FnZV9lc3QgPC0gc3VtW1sxMl1dDQogIHNpZ19hZ2Vfc2QgPC0gc3VtW1sxMiwyXV0NCiAgDQogIHNpZ19zZXhfZXN0X2ludGVyIDwtIHN1bVtbMThdXQ0KICBzaWdfc2V4X3NkX2ludGVyIDwtIHN1bVtbMTgsMl1dDQogIHNpZ19pc2NlZF9tZWRfZXN0X2ludGVyIDwtIHN1bVtbMTldXQ0KICBzaWdfaXNjZWRfbWVkX3NkX2ludGVyIDwtIHN1bVtbMTksMl1dDQogIHNpZ19pc2NlZF9oaWdoX2VzdF9pbnRlciA8LSBzdW1bWzIwXV0NCiAgc2lnX2lzY2VkX2hpZ2hfc2RfaW50ZXIgPC0gc3VtW1syMCwyXV0NCiAgc2lnX2FnZV9lc3RfaW50ZXIgPC0gc3VtW1sxN11dDQogIHNpZ19hZ2Vfc2RfaW50ZXIgPC0gc3VtW1sxNywyXV0NCg0KDQogICMgUHV0IHRoZSByZXN1bHRzIGluIGEgZGF0YWZyYW1lDQogIGViX2luZGVwX2ludGVyYWN0aW9uc19xdWFsbGlmZV9kZiA8LSByYmluZChlYl9pbmRlcF9pbnRlcmFjdGlvbnNfcXVhbGxpZmVfZGYsIGRhdGEuZnJhbWUoZGVwX3ZhciA9IGRlcF92YXIsIG11X3NleF9lc3QsIG11X3NleF9zZCwgbXVfaXNjZWRfbWVkX2VzdCwgbXVfaXNjZWRfbWVkX3NkLCBtdV9pc2NlZF9oaWdoX2VzdCwgbXVfaXNjZWRfaGlnaF9zZCwgbXVfYWdlX2VzdCwgbXVfYWdlX3NkLCBzaWdfc2V4X2VzdCwgc2lnX3NleF9zZCwgc2lnX2lzY2VkX21lZF9lc3QsIHNpZ19pc2NlZF9tZWRfc2QsIHNpZ19pc2NlZF9oaWdoX2VzdCwgc2lnX2lzY2VkX2hpZ2hfc2QsIHNpZ19hZ2VfZXN0LCBzaWdfYWdlX3NkLCBtdV9zZXhfZXN0X2ludGVyLCBtdV9zZXhfc2RfaW50ZXIsIG11X2lzY2VkX21lZF9lc3RfaW50ZXIsIG11X2lzY2VkX21lZF9zZF9pbnRlciwgbXVfaXNjZWRfaGlnaF9lc3RfaW50ZXIsIG11X2lzY2VkX2hpZ2hfc2RfaW50ZXIsIG11X2FnZV9lc3RfaW50ZXIsIG11X2FnZV9zZF9pbnRlciwgc2lnX3NleF9lc3RfaW50ZXIsIHNpZ19zZXhfc2RfaW50ZXIsIHNpZ19pc2NlZF9tZWRfZXN0X2ludGVyLCBzaWdfaXNjZWRfbWVkX3NkX2ludGVyLCBzaWdfaXNjZWRfaGlnaF9lc3RfaW50ZXIsIHNpZ19pc2NlZF9oaWdoX3NkX2ludGVyLCBzaWdfYWdlX2VzdF9pbnRlciwgc2lnX2FnZV9zZF9pbnRlcikpDQp9IA0KDQpsb2FkKCIuL2RhdGEvZmluYWxfZGF0YS9pbmRlcF92YXIvZWJfMTk4Nl9pbnRlcl92YXJfbmV3LlJEYXRhIikNCmViX2luZGVwX2ludGVyYWN0aW9uc19kZiA8LSByYmluZChlYl9pbnRlcmFjdGlvbnNfMTk4Nl9kZiwgZWJfaW5kZXBfaW50ZXJhY3Rpb25zXzIwMDdfZGYsIGViX2luZGVwX2ludGVyYWN0aW9uc18yMDA4X2RmLCBlYl9pbmRlcF9pbnRlcmFjdGlvbnNfMjAwOV9kZiwgZWJfaW5kZXBfaW50ZXJhY3Rpb25zXzIwMTFfZGYsIGViX2luZGVwX2ludGVyYWN0aW9uc19idXlwcm9kX2RmLCBlYl9pbmRlcF9pbnRlcmFjdGlvbnNfY2NoYW5nZTJfZGYsIGViX2luZGVwX2ludGVyYWN0aW9uc19kb3Byb3RfY2l0eV9kZiwgZWJfaW5kZXBfaW50ZXJhY3Rpb25zX2RvcHJvdF9kZiwgZWJfaW5kZXBfaW50ZXJhY3Rpb25zX2VmZl9kYWlseV9kZiwgZWJfaW5kZXBfaW50ZXJhY3Rpb25zX3BlcnNfaW1wX2RmLCBlYl9pbmRlcF9pbnRlcmFjdGlvbnNfcHJzYWN0aW9uX2RmLCBlYl9pbmRlcF9pbnRlcmFjdGlvbnNfcXVhbGxpZmVfZGYpDQoNCnNhdmUoZWJfaW5kZXBfaW50ZXJhY3Rpb25zX2RmLCBmaWxlPSAiLi9kYXRhL2ZpbmFsX2RhdGEvaW5kZXBfdmFyL2ViX2ludGVyX3Zhcl9uZXcuUkRhdGEiICkNCmBgYA0KDQojIyBNZXJnZSBldmVyeXRoaW5nIGludG8gb25lIGRhdGFzZXQgDQoNCmBgYHtyfQ0KIyBUaGUgZmluYWwgc3RlcCBpcyB0byBtZXJnZSBhbGwgcmVzdWx0cyBpbnRvIG9uZSBkYXRhZnJhbWUNCnJtKGxpc3Q9bHMoKSkNCmxvYWQoIi4vZGF0YS9maW5hbF9kYXRhL2luZGVwX3Zhci9lYl9pbnRlcl92YXJfbmV3LlJEYXRhIikNCmxvYWQoIi4vZGF0YS9maW5hbF9kYXRhL2luZGVwX3Zhci9lc3NfaW50ZXJfdmFyX25ldy5SRGF0YSIpDQpsb2FkKCIuL2RhdGEvZmluYWxfZGF0YS9pbmRlcF92YXIvZXZzX2ludGVyX3Zhcl9uZXcuUkRhdGEiKQ0KbG9hZCgiLi9kYXRhL2ZpbmFsX2RhdGEvaW5kZXBfdmFyL2lvX2ludGVyX3Zhcl9uZXcuUkRhdGEiKQ0KbG9hZCgiLi9kYXRhL2ZpbmFsX2RhdGEvaW5kZXBfdmFyL2lzc3BfMl9pbnRlcl92YXJfbmV3LlJEYXRhIikNCmxvYWQoIi4vZGF0YS9maW5hbF9kYXRhL2luZGVwX3Zhci9pc3NwX2ludGVyX3Zhcl9uZXcuUkRhdGEiKQ0KDQoNCnRvdGFsX2ludGVyX3Jlc3VsdHMgPC0gcmJpbmQoZWJfaW5kZXBfaW50ZXJhY3Rpb25zX2RmLCBlc3NfaW50ZXJfcHJlZHNfZGYsIGV2c19pbmRlcF9pbnRlcmFjdGlvbnNfZGYsIGlvX2luZGVwX2ludGVyYWN0aW9uc19kZiwgaXNzcF9pbmRlcF9pbnRlcmFjdGlvbnNfZGYsIGlzc3BfMl9pbmRlcF9pbnRlcmFjdGlvbnNfZGYpIA0KDQpzYXZlKHRvdGFsX2ludGVyX3Jlc3VsdHMsIGZpbGU9ICIuL2RhdGEvbWV0YV9hbmFseXNpcy90b3RhbF9pbnRlcl9yZXN1bHRzX25ldy5SRGF0YSIgKQ0KYGBgDQoNCg==