ALL IMPORTED FILES MUST BE IN THE SAME DIRECTORY AS THIS SCRIPT

Load tidyverse package

library("tidyverse")

Import raw vcf data from “masterfile” and exclude variants with GnomAD non-cancer AF > 0.001

masterfile <- read.delim("masterfile.tsv", header=TRUE, row.names=NULL, na.strings = ".", stringsAsFactors=FALSE) %>% 
  dplyr::rename("Sample"="X.Sample") %>% 
  filter(GnomAD_v2.1_non_cancer_AF<=0.001)

Exclude non-epithelial, uterine-only, BRCA +ve and other mutation +ve samples

ViP_Discovery_Cohort <- read.delim("ViP_LoF_Discovery_Cohort.txt", stringsAsFactors=FALSE)
ViP_Discovery_Cohort_list <- ViP_Discovery_Cohort[,1]

masterfile_eoc <- filter(masterfile,Sample%in%c(ViP_Discovery_Cohort_list))
rm(masterfile)

Append patient path data

ViP_OvCa_Path_Data <- read.delim("ViP_OvCa_Path_Data.txt", header=TRUE, row.names=NULL, stringsAsFactors=FALSE) %>% 
  dplyr::rename("Sample"=Exome.ID)
masterfile_eoc_withPath <- left_join(masterfile_eoc,ViP_OvCa_Path_Data,by="Sample",copy=FALSE)
rm(ViP_OvCa_Path_Data,masterfile_eoc)

Exclude low-grade tumour samples

masterfile_eoc2 <- filter(masterfile_eoc_withPath,(Histopath.Type!="Borderline tumour")&
                            (Histopath.Type!="Mucinous")&
                            (Histopath.Type!="Clear cell")&
                            (Histopath.Type!="Low-grade serous")&
                            (Histopath.Type!="Low-grade endometrioid")&
                            (Histopath.Type!="Serous (?low-grade/borderline)")&
                            (Histopath.Type!="Mixed Mullerian")&
                            (Histopath.Type!="Mixed EAOC"))
rm(masterfile_eoc_withPath)

Exclude low-quality variants, GnomAD RF-flagged variants and non-protein-coding genes

masterfile_eoc_goodQ <- filter(masterfile_eoc2, (QUAL>=30)&
                                 (Identified!="FilteredInAll")&
                                 (Sample.PMCDP>=10)&
                                 (Sample.PMCFREQ>=0.25)) %>% 
                                 filter((!str_detect(GnomAD_v2.1_FILTER_exome,"InbreedingCoeff")&
                                           !str_detect(GnomAD_v2.1_FILTER_exome,"RF"))|
                                       is.na(GnomAD_v2.1_FILTER_exome)) %>% 
  filter((!str_detect(GnomAD_v2.1_FILTER_genome,"InbreedingCoeff")&
            !str_detect(GnomAD_v2.1_FILTER_genome,"RF"))|
           is.na(GnomAD_v2.1_FILTER_genome)) %>% 
  filter(BIOTYPE%in%c("protein_coding"))
Total_Sample_Alleles <- (n_distinct(masterfile_eoc_goodQ$Sample)*2)
rm(masterfile_eoc2)

Exclude HIGH impact variants (including variants with Consequence == “protein_altering_variant”) retain only genes present in masterfile_eoc_goodQ2_HIGH_ENSTcanonical_sampleAF0.01 file (from LoF Variant Filtering and Ranking Script- see (https://rpubs.com/deepsubs/nature_comms_paper_2020) with minimum ratio > 3/6/12.

HIGHgenes_ratio6 <- read.delim("HIGHgenes_list.txt", stringsAsFactors=FALSE) %>% 
  # filter(Sample_Gene_LOF_Freq_Ratio_GnomAD_NFE_0.005>3)
  filter(Sample_Gene_LOF_Freq_Ratio_GnomAD_NFE_0.005>6)
  # filter(Sample_Gene_LOF_Freq_Ratio_GnomAD_NFE_0.005>12)
HIGHgenes_candidates <- read.delim("HIGHgenes_list.txt", stringsAsFactors=FALSE) %>% 
  filter(Candidate_Gene%in%("YES"))
HIGHgenes_ratio6_list <- HIGHgenes_ratio6[,2]
HIGHgenes_candidates_list <- HIGHgenes_candidates[,2]

masterfile_eoc_goodQ_biotype_MS <- filter(masterfile_eoc_goodQ, IMPACT=="MODERATE") %>% 
  filter(str_detect(Consequence,"missense_variant")) %>% 
  filter(Feature%in%(HIGHgenes_ratio6_list))

Exclude NM canonical (RefSeq) variants and convert MPC strings to integers/doubles

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical <- filter(masterfile_eoc_goodQ_biotype_MS, CANONICAL=="YES") 
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical$MPC <- as.numeric(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical$MPC) %>% replace_na(0)
rm(masterfile_eoc_goodQ_biotype_MS)

Divide data into different prediction score groups

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (MPC<2))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (MPC>=2))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (MPC>=2.5))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (MPC>=3))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (CADD_PHRED<15))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (CADD_PHRED>=15))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (CADD_PHRED>=20))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (CADD_PHRED>=25))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (CADD_PHRED>=30))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (REVEL_score<0.45))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (REVEL_score>=0.45))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (REVEL_score>=0.5))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (REVEL_score>=0.55))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (REVEL_score>=0.6))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (REVEL_score>=0.7))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (REVEL_score>=0.8))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (CADD_PHRED>=15)&(REVEL_score>=0.45))  
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (CADD_PHRED>=15)&(REVEL_score>=0.45)&(MPC>=2))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8 <- bind_rows(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8,.id=NULL) %>% 
  distinct(.keep_all=TRUE)

rm(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical)

Sample variant counts and AFs

variant_counts_AFs <- function(vcf){
variants_heterozygous <- vcf %>% 
  select(HGVSc,Sample.GT) %>% 
  group_by(HGVSc,Sample.GT) %>% 
  summarise(n()) %>% 
  filter((Sample.GT%in%c("'0/1","'1/0"))) %>% 
  dplyr::rename(alleles = "n()") %>% 
  group_by(HGVSc) %>% 
  summarise(sum(alleles))
variants_homozygous <- vcf %>% 
  select(HGVSc,Sample.GT) %>% 
  group_by(HGVSc,Sample.GT) %>% 
  summarise(n()) %>% 
  filter((Sample.GT!="'0/1")&(Sample.GT!="'1/0")) %>% 
  mutate(alleles = `n()`*2) %>% 
  select(-`n()`) %>% 
  group_by(HGVSc) %>% 
  summarise(sum(alleles))
variants <- full_join(variants_heterozygous,variants_homozygous,by="HGVSc",copy=FALSE,suffix=c(".x",".y")) %>%
  mutate_all(funs(replace(., is.na(.), 0))) %>% 
  mutate(Total_Allele_Count=`sum(alleles).x`+`sum(alleles).y`) %>% 
  mutate(Sample_AF=Total_Allele_Count/Total_Sample_Alleles)
vcf <- left_join(vcf, variants[,c(1,4:5)],by="HGVSc",copy=FALSE)
}

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2  <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3)

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30)

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8)

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8)

rm(list=(ls(pattern="^variants")))

Output list of genes and variants with sample AF > 0.01

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_genesandvariants0.01 <- bind_rows(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8) %>% 
  filter(Sample_AF > 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_genesandvariants0.01[,c(2:6,25:54)] %>% 
  distinct(.keep_all = FALSE) %>% 
  write_excel_csv(path="masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_genesandvariants0.01.csv",na=".",append=FALSE,col_names=TRUE)
rm(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_genesandvariants0.01)

Output list of genes and variants with sample AF < 0.01

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_sample0.01_HIGHgenes_ratio6 <- bind_rows(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8) %>%
  filter(Sample_AF < 0.01) %>%
  write_excel_csv(path="masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_0.001_sample0.01_HIGHgenes_ratio6.csv",na=".",append=FALSE,col_names=TRUE)

Output list of LoF candidate genes with sample AF < 0.1 MS variants

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_sample0.01_HIGHgenes_candidates <- bind_rows(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8) %>%
  filter(Sample_AF < 0.01) %>%
  filter(Feature%in%(HIGHgenes_candidates_list)) %>% 
  write_excel_csv(path="masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_0.001_sample0.01_HIGHgenes_candidates_ratio6.csv",na=".",append=FALSE,col_names=TRUE)

Exclude variants with sample AF >0.01̛

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3,Sample_AF < 0.01)

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30,Sample_AF < 0.01)

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8,Sample_AF < 0.01)

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8,Sample_AF < 0.01)

rm(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8)

Sample gene counts and frequencies

gene_counts_AF <- function(vcf){
genes_oneVarAllele <- vcf %>% select(SYMBOL,Sample.GT) %>% 
  select(SYMBOL,Sample.GT) %>% 
  group_by(SYMBOL,Sample.GT) %>% 
  summarise(n()) %>% 
  filter((Sample.GT%in%c("'0/1","'1/0"))) %>% 
  dplyr::rename(gene_Var = "n()") %>% 
  group_by(SYMBOL) %>% 
  summarise(sum(gene_Var))
genes_twoVarAllele <- vcf %>% select(SYMBOL,Sample.GT) %>% 
  select(SYMBOL,Sample.GT) %>% 
  group_by(SYMBOL,Sample.GT) %>% 
  summarise(n()) %>% 
  filter((Sample.GT!="'0/1")&(Sample.GT!="'1/0")) %>% 
  mutate(gene_Var = `n()`*2) %>% 
  select(-`n()`) %>% 
  group_by(SYMBOL) %>% 
  summarise(sum(gene_Var))
genes <- full_join(genes_oneVarAllele,genes_twoVarAllele,by="SYMBOL",copy=FALSE,suffix=c(".x",".y")) %>% 
  mutate_all(funs(replace(., is.na(.), 0))) %>% 
  mutate(Total_Gene_Count=`sum(gene_Var).x`+`sum(gene_Var).y`) %>% 
  mutate(Sample_Gene_Freq=Total_Gene_Count/Total_Sample_Alleles)
vcf <- left_join(vcf, genes[,c(1,4:5)],by="SYMBOL",copy=FALSE)
}

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3_sampleAF0.01)

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30_sampleAF0.01)

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8_sampleAF0.01)

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_sampleAF0.01)

rm(list=(ls(pattern="^genes")))

Add GnomAD gene-level data

GnomAD_stats_MS <- read.delim("GnomAD.gene.stats.v2.1_missense_AF_0.001.tsv", header=TRUE, row.names=NULL, stringsAsFactors=FALSE) %>% 
  dplyr::rename(SYMBOL=X.Symbol) 
GnomAD_stats_MS <- GnomAD_stats_MS[,c(1:13,156:281)] 

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,14:19)],by="Feature",copy=FALSE) 
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>% 
  mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>% 
  mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,20:25)],by="Feature",copy=FALSE) 
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>% 
  mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>% 
  mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,26:31)],by="Feature",copy=FALSE) 
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>% 
  mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>% 
  mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,32:37)],by="Feature",copy=FALSE) 
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>% 
  mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>% 
  mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,38:43)],by="Feature",copy=FALSE)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>% 
  mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>% 
  mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,44:49)],by="Feature",copy=FALSE)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>% 
  mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>% 
  mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,50:55)],by="Feature",copy=FALSE)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>% 
  mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>% 
  mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,56:61)],by="Feature",copy=FALSE)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>% 
  mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>% 
  mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,62:67)],by="Feature",copy=FALSE)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>% 
  mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>% 
  mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,68:73)],by="Feature",copy=FALSE) 
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>% 
  mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>% 
  mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,74:79)],by="Feature",copy=FALSE) 
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>% 
  mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>% 
  mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,80:85)],by="Feature",copy=FALSE) 
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>% 
  mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>% 
  mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,86:91)],by="Feature",copy=FALSE) 
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>% 
  mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>% 
  mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,92:97)],by="Feature",copy=FALSE) 
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>% 
  mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>% 
  mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,104:109)],by="Feature",copy=FALSE) 
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>% 
  mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>% 
  mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,116:121)],by="Feature",copy=FALSE) 
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>% 
  mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>% 
  mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,134:139)],by="Feature",copy=FALSE) 
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>% 
  mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>% 
  mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,122:127)],by="Feature",copy=FALSE) 
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>% 
  mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>% 
  mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,128:133)],by="Feature",copy=FALSE) 
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>% 
  mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>% 
  mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))

rm(list=(ls(pattern="_sampleAF0.01$")))

Create data frames with Agilent SureSelect whole exome genes (ENST and protein-coding) and MPC-only transcripts

ensembl_biotypes <- read.delim("ensembl_biotypes.tsv", stringsAsFactors=FALSE) %>% 
  select(ensembl_transcript_id,transcript_biotype) %>% 
  dplyr::rename("Feature"="ensembl_transcript_id","BIOTYPE"="transcript_biotype")
GnomAD_stats_AgilentSSv6_LOF_VEP_ENSTcanonical_protein_coding <- read.delim("GnomAD.gene.stats.v2.RF.only.agilent.v6.only.tsv", header=TRUE, row.names=NULL, stringsAsFactors=FALSE) %>% 
  filter(CANONICAL=="YES") %>% 
  dplyr::rename("SYMBOL"="X.Symbol") %>% 
  dplyr::rename("Gene"="ENSG") %>% 
  left_join(ensembl_biotypes,by="Feature",copy=FALSE) %>% 
  filter(BIOTYPE%in%c("protein_coding"))
MPC_transcripts <- read.delim("MPC_transcripts_with_canonicity.tsv", header=TRUE, row.names=NULL, stringsAsFactors=FALSE) %>% 
  filter(CANONICAL%in%c("YES")) %>% 
  select(Feature,CANONICAL)

allGenes_AgilentSSv6_list_protein_coding_only <- tibble("SYMBOL"=GnomAD_stats_AgilentSSv6_LOF_VEP_ENSTcanonical_protein_coding$SYMBOL,"Gene"=GnomAD_stats_AgilentSSv6_LOF_VEP_ENSTcanonical_protein_coding$Gene,"Feature"=GnomAD_stats_AgilentSSv6_LOF_VEP_ENSTcanonical_protein_coding$Feature, "AgilentSSv6"="YES") %>% 
  distinct(.keep_all=TRUE) %>% 
  arrange(SYMBOL) %>% 
  filter(Feature%in%(HIGHgenes_ratio6_list))

allGenes_AgilentSSv6_list_protein_coding_MPConly<- tibble("SYMBOL"=GnomAD_stats_AgilentSSv6_LOF_VEP_ENSTcanonical_protein_coding$SYMBOL,"Gene"=GnomAD_stats_AgilentSSv6_LOF_VEP_ENSTcanonical_protein_coding$Gene,"Feature"=GnomAD_stats_AgilentSSv6_LOF_VEP_ENSTcanonical_protein_coding$Feature, "AgilentSSv6"="YES") %>% 
  distinct(.keep_all=TRUE) %>% 
  left_join(MPC_transcripts,by="Feature",copy=FALSE) %>% 
  filter(CANONICAL%in%c("YES")) %>% 
  filter(Feature%in%(HIGHgenes_ratio6_list))

allGenes_AgilentSSv6_list_protein_coding_only2 <- select(allGenes_AgilentSSv6_list_protein_coding_only,Feature,AgilentSSv6)

Sum ACs across sample/GnomAD for each prediction score class (MPC figures include transcripts with MPC scores only)

GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding <- filter(GnomAD_stats_MS,CANONICAL%in%c("YES")) %>% 
  dplyr::rename("Gene"="ENSG") %>% 
  left_join(ensembl_biotypes,by="Feature",copy=FALSE) %>% 
  filter(BIOTYPE%in%c("protein_coding")) %>% 
  left_join(allGenes_AgilentSSv6_list_protein_coding_only2,by="Feature",copy=FALSE) %>% 
  filter(AgilentSSv6%in%c("YES"))
  
GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC <- filter(GnomAD_stats_MS,CANONICAL%in%c("YES")) %>% 
  dplyr::rename("Gene"="ENSG") %>% 
  left_join(ensembl_biotypes,by="Feature",copy=FALSE) %>% 
  filter(BIOTYPE%in%c("protein_coding")) %>% 
  left_join(allGenes_AgilentSSv6_list_protein_coding_only2,by="Feature",copy=FALSE) %>% 
  filter(AgilentSSv6%in%c("YES")) %>% 
  left_join(MPC_transcripts,by="Feature",copy=FALSE) %>% 
  filter(CANONICAL.y%in%c("YES"))

GnomAD_stats_MS_MAX_AN_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,6]) %>% as.numeric()
GnomAD_stats_MS_MAX_AN_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,10]) %>% as.numeric()
GnomAD_stats_MS_MAX_AN_MPC_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,6]) %>% as.numeric()
GnomAD_stats_MS_MAX_AN_MPC_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,10]) %>% as.numeric()
GnomAD_stats_MS_MPC.2_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,14]) %>% as.numeric()
GnomAD_stats_MS_MPC.2_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,17]) %>% as.numeric()
GnomAD_stats_MS_MPC2_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,20]) %>% as.numeric()
GnomAD_stats_MS_MPC2_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,23]) %>% as.numeric()
GnomAD_stats_MS_MPC2.5_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,26]) %>% as.numeric()
GnomAD_stats_MS_MPC2.5_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,29]) %>% as.numeric()
GnomAD_stats_MS_MPC3_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,32]) %>% as.numeric()
GnomAD_stats_MS_MPC3_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,35]) %>% as.numeric()
GnomAD_stats_MS_CADD.15_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,38]) %>% as.numeric()
GnomAD_stats_MS_CADD.15_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,41]) %>% as.numeric()
GnomAD_stats_MS_CADD15_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,44]) %>% as.numeric()
GnomAD_stats_MS_CADD15_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,47]) %>% as.numeric()
GnomAD_stats_MS_CADD20_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,50]) %>% as.numeric()
GnomAD_stats_MS_CADD20_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,53]) %>% as.numeric()
GnomAD_stats_MS_CADD25_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,56]) %>% as.numeric()
GnomAD_stats_MS_CADD25_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,59]) %>% as.numeric()
GnomAD_stats_MS_CADD30_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,62]) %>% as.numeric()
GnomAD_stats_MS_CADD30_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,65]) %>% as.numeric()
GnomAD_stats_MS_REVEL.0.45_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,68]) %>% as.numeric()
GnomAD_stats_MS_REVEL.0.45_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,71]) %>% as.numeric()
GnomAD_stats_MS_REVEL0.45_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,74]) %>% as.numeric()
GnomAD_stats_MS_REVEL0.45_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,77]) %>% as.numeric()
GnomAD_stats_MS_REVEL0.5_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,80]) %>% as.numeric()
GnomAD_stats_MS_REVEL0.5_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,83]) %>% as.numeric()
GnomAD_stats_MS_REVEL0.55_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,86]) %>% as.numeric()
GnomAD_stats_MS_REVEL0.55_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,89]) %>% as.numeric()
GnomAD_stats_MS_REVEL0.6_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,92]) %>% as.numeric()
GnomAD_stats_MS_REVEL0.6_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,95]) %>% as.numeric()
GnomAD_stats_MS_REVEL0.7_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,104]) %>% as.numeric()
GnomAD_stats_MS_REVEL0.7_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,107]) %>% as.numeric()
GnomAD_stats_MS_REVEL0.8_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,116]) %>% as.numeric()
GnomAD_stats_MS_REVEL0.8_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,119]) %>% as.numeric()
GnomAD_stats_MS_CADD15REVEL0.45_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,134]) %>% as.numeric()
GnomAD_stats_MS_CADD15REVEL0.45_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,137]) %>% as.numeric()
GnomAD_stats_MS_MPC2CADD15REVEL0.45_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,122]) %>% as.numeric()
GnomAD_stats_MS_MPC2CADD15REVEL0.45_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,125]) %>% as.numeric()
GnomAD_stats_MS_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,128]) %>% as.numeric()
GnomAD_stats_MS_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,131]) %>% as.numeric()

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total <- Total_Sample_Alleles*(nrow(allGenes_AgilentSSv6_list_protein_coding_only)) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_MPConly_total <- Total_Sample_Alleles*(nrow(allGenes_AgilentSSv6_list_protein_coding_MPConly)) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()

Calculate odds ratios using matrices

MPC.2 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2_total,
                 masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_MPConly_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2_total,
                 GnomAD_stats_MS_MPC.2_total,
                 GnomAD_stats_MS_MAX_AN_MPC_total-GnomAD_stats_MS_MPC.2_total),
               nrow=2,byrow=TRUE)
MPC.2_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2_total,
                     masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_MPConly_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2_total,
                     GnomAD_stats_MS_MPC.2_NFE_total,
                     GnomAD_stats_MS_MAX_AN_MPC_NFE_total-GnomAD_stats_MS_MPC.2_NFE_total),
                   nrow=2,byrow=TRUE)
MPC2 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_total,
                     masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_MPConly_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_total,
                     GnomAD_stats_MS_MPC2_total,
                     GnomAD_stats_MS_MAX_AN_MPC_total-GnomAD_stats_MS_MPC2_total),
                   nrow=2,byrow=TRUE)
MPC2_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_total,
                         masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_MPConly_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_total,
                         GnomAD_stats_MS_MPC2_NFE_total,
                         GnomAD_stats_MS_MAX_AN_MPC_NFE_total-GnomAD_stats_MS_MPC2_NFE_total),
                       nrow=2,byrow=TRUE)
MPC2.5 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5_total,
                     masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_MPConly_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5_total,
                     GnomAD_stats_MS_MPC2.5_total,
                     GnomAD_stats_MS_MAX_AN_MPC_total-GnomAD_stats_MS_MPC2.5_total),
                   nrow=2,byrow=TRUE)
MPC2.5_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5_total,
                         masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_MPConly_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5_total,
                         GnomAD_stats_MS_MPC2.5_NFE_total,
                         GnomAD_stats_MS_MAX_AN_MPC_NFE_total-GnomAD_stats_MS_MPC2.5_NFE_total),
                       nrow=2,byrow=TRUE)
MPC3 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3_total,
                 masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_MPConly_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3_total,
                 GnomAD_stats_MS_MPC3_total,
                 GnomAD_stats_MS_MAX_AN_MPC_total-GnomAD_stats_MS_MPC3_total),
               nrow=2,byrow=TRUE)
MPC3_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3_total,
                     masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_MPConly_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3_total,
                     GnomAD_stats_MS_MPC3_NFE_total,
                     GnomAD_stats_MS_MAX_AN_MPC_NFE_total-GnomAD_stats_MS_MPC3_NFE_total),
                   nrow=2,byrow=TRUE)
CADD.15 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15_total,
                   masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15_total,
                   GnomAD_stats_MS_CADD.15_total,
                   GnomAD_stats_MS_MAX_AN_total-GnomAD_stats_MS_CADD.15_total),
                 nrow=2,byrow=TRUE)
CADD.15_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15_total,
                       masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15_total,
                       GnomAD_stats_MS_CADD.15_NFE_total,
                       GnomAD_stats_MS_MAX_AN_NFE_total-GnomAD_stats_MS_CADD.15_NFE_total),
                     nrow=2,byrow=TRUE)
CADD15 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15_total,
                      masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15_total,
                      GnomAD_stats_MS_CADD15_total,
                      GnomAD_stats_MS_MAX_AN_total-GnomAD_stats_MS_CADD15_total),
                    nrow=2,byrow=TRUE)
CADD15_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15_total,
                          masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15_total,
                          GnomAD_stats_MS_CADD15_NFE_total,
                          GnomAD_stats_MS_MAX_AN_NFE_total-GnomAD_stats_MS_CADD15_NFE_total),
                        nrow=2,byrow=TRUE)
CADD20 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20_total,
                      masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20_total,
                      GnomAD_stats_MS_CADD20_total,
                      GnomAD_stats_MS_MAX_AN_total-GnomAD_stats_MS_CADD20_total),
                    nrow=2,byrow=TRUE)
CADD20_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20_total,
                          masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20_total,
                          GnomAD_stats_MS_CADD20_NFE_total,
                          GnomAD_stats_MS_MAX_AN_NFE_total-GnomAD_stats_MS_CADD20_NFE_total),
                        nrow=2,byrow=TRUE)
CADD25 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25_total,
                      masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25_total,
                      GnomAD_stats_MS_CADD25_total,
                      GnomAD_stats_MS_MAX_AN_total-GnomAD_stats_MS_CADD25_total),
                    nrow=2,byrow=TRUE)
CADD25_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25_total,
                          masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25_total,
                          GnomAD_stats_MS_CADD25_NFE_total,
                          GnomAD_stats_MS_MAX_AN_NFE_total-GnomAD_stats_MS_CADD25_NFE_total),
                        nrow=2,byrow=TRUE)
CADD30 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30_total,
                   masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30_total,
                   GnomAD_stats_MS_CADD30_total,
                   GnomAD_stats_MS_MAX_AN_total-GnomAD_stats_MS_CADD30_total),
                 nrow=2,byrow=TRUE)
CADD30_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30_total,
                       masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30_total,
                       GnomAD_stats_MS_CADD30_NFE_total,
                       GnomAD_stats_MS_MAX_AN_NFE_total-GnomAD_stats_MS_CADD30_NFE_total),
                     nrow=2,byrow=TRUE)
REVEL.0.45 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45_total,
                      masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45_total,
                      GnomAD_stats_MS_REVEL.0.45_total,
                      GnomAD_stats_MS_MAX_AN_total-GnomAD_stats_MS_REVEL.0.45_total),
                    nrow=2,byrow=TRUE)
REVEL.0.45_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45_total,
                          masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45_total,
                          GnomAD_stats_MS_REVEL.0.45_NFE_total,
                          GnomAD_stats_MS_MAX_AN_NFE_total-GnomAD_stats_MS_REVEL.0.45_NFE_total),
                        nrow=2,byrow=TRUE)
REVEL0.45 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_total,
                          masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_total,
                          GnomAD_stats_MS_REVEL0.45_total,
                          GnomAD_stats_MS_MAX_AN_total-GnomAD_stats_MS_REVEL0.45_total),
                        nrow=2,byrow=TRUE)
REVEL0.45_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_total,
                              masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_total,
                              GnomAD_stats_MS_REVEL0.45_NFE_total,
                              GnomAD_stats_MS_MAX_AN_NFE_total-GnomAD_stats_MS_REVEL0.45_NFE_total),
                            nrow=2,byrow=TRUE)
REVEL0.5 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5_total,
                          masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5_total,
                          GnomAD_stats_MS_REVEL0.5_total,
                          GnomAD_stats_MS_MAX_AN_total-GnomAD_stats_MS_REVEL0.5_total),
                        nrow=2,byrow=TRUE)
REVEL0.5_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5_total,
                              masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5_total,
                              GnomAD_stats_MS_REVEL0.5_NFE_total,
                              GnomAD_stats_MS_MAX_AN_NFE_total-GnomAD_stats_MS_REVEL0.5_NFE_total),
                            nrow=2,byrow=TRUE)
REVEL0.55 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55_total,
                          masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55_total,
                          GnomAD_stats_MS_REVEL0.55_total,
                          GnomAD_stats_MS_MAX_AN_total-GnomAD_stats_MS_REVEL0.55_total),
                        nrow=2,byrow=TRUE)
REVEL0.55_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55_total,
                              masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55_total,
                              GnomAD_stats_MS_REVEL0.55_NFE_total,
                              GnomAD_stats_MS_MAX_AN_NFE_total-GnomAD_stats_MS_REVEL0.55_NFE_total),nrow=2,byrow=TRUE)
REVEL0.6 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6_total,
                         masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6_total,
                         GnomAD_stats_MS_REVEL0.6_total,
                         GnomAD_stats_MS_MAX_AN_total-GnomAD_stats_MS_REVEL0.6_total),
                       nrow=2,byrow=TRUE)
REVEL0.6_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6_total,
                             masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6_total,
                             GnomAD_stats_MS_REVEL0.6_NFE_total,
                             GnomAD_stats_MS_MAX_AN_NFE_total-GnomAD_stats_MS_REVEL0.6_NFE_total),
                           nrow=2,byrow=TRUE)
REVEL0.7 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_total,
                         masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_total,
                         GnomAD_stats_MS_REVEL0.7_total,
                         GnomAD_stats_MS_MAX_AN_total-GnomAD_stats_MS_REVEL0.7_total),
                       nrow=2,byrow=TRUE)
REVEL0.7_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_total,
                             masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_total,
                             GnomAD_stats_MS_REVEL0.7_NFE_total,
                             GnomAD_stats_MS_MAX_AN_NFE_total-GnomAD_stats_MS_REVEL0.7_NFE_total),
                           nrow=2,byrow=TRUE)
REVEL0.8 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8_total,
                     masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8_total,
                     GnomAD_stats_MS_REVEL0.8_total,
                     GnomAD_stats_MS_MAX_AN_total-GnomAD_stats_MS_REVEL0.8_total),
                   nrow=2,byrow=TRUE)
REVEL0.8_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8_total,
                         masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8_total,
                         GnomAD_stats_MS_REVEL0.8_NFE_total,
                         GnomAD_stats_MS_MAX_AN_NFE_total-GnomAD_stats_MS_REVEL0.8_NFE_total),
                       nrow=2,byrow=TRUE)
CADD15REVEL0.45 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45_total,
                            masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45_total,
                            GnomAD_stats_MS_CADD15REVEL0.45_total,
                            GnomAD_stats_MS_MAX_AN_total-GnomAD_stats_MS_CADD15REVEL0.45_total),
                          nrow=2,byrow=TRUE)
CADD15REVEL0.45_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45_total,
                                masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45_total,
                                GnomAD_stats_MS_CADD15REVEL0.45_NFE_total,
                                GnomAD_stats_MS_MAX_AN_NFE_total-GnomAD_stats_MS_CADD15REVEL0.45_NFE_total),
                              nrow=2,byrow=TRUE)
MPC2CADD15REVEL0.45 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45_total,
                                masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_MPConly_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45_total,
                                GnomAD_stats_MS_MPC2CADD15REVEL0.45_total,
                                GnomAD_stats_MS_MAX_AN_MPC_total-GnomAD_stats_MS_MPC2CADD15REVEL0.45_total),
                              nrow=2,byrow=TRUE)
MPC2CADD15REVEL0.45_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45_total,
                                    masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_MPConly_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45_total,
                                    GnomAD_stats_MS_MPC2CADD15REVEL0.45_NFE_total,
                                    GnomAD_stats_MS_MAX_AN_MPC_NFE_total-GnomAD_stats_MS_MPC2CADD15REVEL0.45_NFE_total),nrow=2,byrow=TRUE)
MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_total,
                                                          masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_MPConly_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_total,
                                                          GnomAD_stats_MS_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_total,
                                                          GnomAD_stats_MS_MAX_AN_MPC_total-GnomAD_stats_MS_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_total),
                                                        nrow=2,byrow=TRUE)
MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_total,
                                                              masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_MPConly_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_total,
                                                              GnomAD_stats_MS_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_NFE_total,
                                                              GnomAD_stats_MS_MAX_AN_MPC_NFE_total-GnomAD_stats_MS_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_NFE_total),
                                                            nrow=2,byrow=TRUE)

oddsratio <- function (a, b = NULL, c = NULL, d = NULL, conf.level = 0.95, 
    p.calc.by.independence = TRUE) 
{
    if (is.matrix(a)) {
        if ((dim(a)[1] != 2L) | (dim(a)[2] != 2L)) {
            stop("Input matrix must be a 2x2 table.")
        }
        .a <- a[1, 1]
        .b <- a[1, 2]
        .c <- a[2, 1]
        .d <- a[2, 2]
        .data.name <- deparse(substitute(a))
    }
    else {
        .a <- a
        .b <- b
        .c <- c
        .d <- d
        .data.name <- paste(deparse(substitute(a)), deparse(substitute(b)), 
            deparse(substitute(c)), deparse(substitute(d)))
    }
    .MAT <- matrix(c(.a, .b, M1 <- .a + .b, .c, .d, M0 <- .c + 
        .d, N1 <- .a + .c, N0 <- .b + .d, Total <- .a + .b + 
        .c + .d), 3, 3)
    colnames(.MAT) <- c("Sample", "GnomAD", "Total") #("Disease", "Nondisease", "Total")
    rownames(.MAT) <- c("MS", "No MS", "Total") #("Exposed", "Nonexposed", "Total")
    class(.MAT) <- "table"
    print(.MAT)
    ESTIMATE <- (.a /.b)/(.c/.d)
    norm.pp <- qnorm(1 - (1 - conf.level)/2)
    if (p.calc.by.independence) {
        p.v <- 2 * (1 - pnorm(abs((.a - N1 * M1/Total)/sqrt(N1 * 
            N0 * M1 * M0/Total/Total/(Total - 1)))))
    }
    else {
        p.v <- 2 * (1 - pnorm(log(ifelse(ESTIMATE > 1, ESTIMATE, 
            1/ESTIMATE))/sqrt(1/.a + 1/.b + 1/.c + 1/.d)))
    }
    ORL <- ESTIMATE * exp(-norm.pp * sqrt(1/.a + 1/.b + 1/.c + 
        1/.d))
    ORU <- ESTIMATE * exp(norm.pp * sqrt(1/.a + 1/.b + 1/.c + 
        1/.d)) %>% signif(digits=7)
    CINT <- paste(signif(ORL,digits = 7),signif(ORU,digits = 7),sep="~")
    attr(CINT, "conf.level") <- conf.level
    RVAL <- list(p.value = p.v, conf.int = CINT, estimate = ESTIMATE, 
        method = "Odds ratio estimate and its significance probability", 
        data.name = .data.name)
    class(RVAL) <- "htest"
    return(RVAL)
}

OR_MPC.2 <- oddsratio(MPC.2,p.calc.by.independence=TRUE)
OR_MPC.2_NFE <- oddsratio(MPC.2_NFE,p.calc.by.independence=TRUE)
OR_MPC2 <- oddsratio(MPC2,p.calc.by.independence=TRUE)
OR_MPC2_NFE <- oddsratio(MPC2_NFE,p.calc.by.independence=TRUE)
OR_MPC2.5 <- oddsratio(MPC2.5,p.calc.by.independence=TRUE)
OR_MPC2.5_NFE <- oddsratio(MPC2.5_NFE,p.calc.by.independence=TRUE)
OR_MPC3 <- oddsratio(MPC3,p.calc.by.independence=TRUE)
OR_MPC3_NFE <- oddsratio(MPC3_NFE,p.calc.by.independence=TRUE)
OR_CADD.15 <- oddsratio(CADD.15,p.calc.by.independence=TRUE)
OR_CADD.15_NFE <- oddsratio(CADD.15_NFE,p.calc.by.independence=TRUE)
OR_CADD15 <- oddsratio(CADD15,p.calc.by.independence=TRUE)
OR_CADD15_NFE <- oddsratio(CADD15_NFE,p.calc.by.independence=TRUE)
OR_CADD20 <- oddsratio(CADD20,p.calc.by.independence=TRUE)
OR_CADD20_NFE <- oddsratio(CADD20_NFE,p.calc.by.independence=TRUE)
OR_CADD25 <- oddsratio(CADD25,p.calc.by.independence=TRUE)
OR_CADD25_NFE <- oddsratio(CADD25_NFE,p.calc.by.independence=TRUE)
OR_CADD30 <- oddsratio(CADD30,p.calc.by.independence=TRUE)
OR_CADD30_NFE <- oddsratio(CADD30_NFE,p.calc.by.independence=TRUE)
OR_REVEL.0.45 <- oddsratio(REVEL.0.45,p.calc.by.independence=TRUE)
OR_REVEL.0.45_NFE <- oddsratio(REVEL.0.45_NFE,p.calc.by.independence=TRUE)
OR_REVEL0.45 <- oddsratio(REVEL0.45,p.calc.by.independence=TRUE)
OR_REVEL0.45_NFE <- oddsratio(REVEL0.45_NFE,p.calc.by.independence=TRUE)
OR_REVEL0.5 <- oddsratio(REVEL0.5,p.calc.by.independence=TRUE)
OR_REVEL0.5_NFE <- oddsratio(REVEL0.5_NFE,p.calc.by.independence=TRUE)
OR_REVEL0.55 <- oddsratio(REVEL0.55,p.calc.by.independence=TRUE)
OR_REVEL0.55_NFE <- oddsratio(REVEL0.55_NFE,p.calc.by.independence=TRUE)
OR_REVEL0.6 <- oddsratio(REVEL0.6,p.calc.by.independence=TRUE)
OR_REVEL0.6_NFE <- oddsratio(REVEL0.6_NFE,p.calc.by.independence=TRUE)
OR_REVEL0.7 <- oddsratio(REVEL0.7,p.calc.by.independence=TRUE)
OR_REVEL0.7_NFE <- oddsratio(REVEL0.7_NFE,p.calc.by.independence=TRUE)
OR_REVEL0.8 <- oddsratio(REVEL0.8,p.calc.by.independence=TRUE)
OR_REVEL0.8_NFE <- oddsratio(REVEL0.8_NFE,p.calc.by.independence=TRUE)
OR_CADD15REVEL0.45 <- oddsratio(CADD15REVEL0.45,p.calc.by.independence=TRUE)
OR_CADD15REVEL0.45_NFE <- oddsratio(CADD15REVEL0.45_NFE,p.calc.by.independence=TRUE)
OR_MPC2CADD15REVEL0.45 <- oddsratio(MPC2CADD15REVEL0.45,p.calc.by.independence=TRUE)
OR_MPC2CADD15REVEL0.45_NFE <- oddsratio(MPC2CADD15REVEL0.45_NFE,p.calc.by.independence=TRUE)
OR_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8 <- oddsratio(MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8,p.calc.by.independence=TRUE)
OR_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_NFE <- oddsratio(MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_NFE,p.calc.by.independence=TRUE)

Combine all results into one spreadsheet, and save

a = c(OR_MPC.2$data.name,OR_MPC.2_NFE$data.name,OR_MPC2$data.name,OR_MPC2_NFE$data.name,OR_MPC2.5$data.name,OR_MPC2.5_NFE$data.name,OR_MPC3$data.name,OR_MPC3_NFE$data.name,OR_CADD.15$data.name,OR_CADD.15_NFE$data.name,OR_CADD15$data.name,OR_CADD15_NFE$data.name,OR_CADD20$data.name,OR_CADD20_NFE$data.name,OR_CADD25$data.name,OR_CADD25_NFE$data.name,OR_CADD30$data.name,OR_CADD30_NFE$data.name,OR_REVEL.0.45$data.name,OR_REVEL.0.45_NFE$data.name,OR_REVEL0.45$data.name,OR_REVEL0.45_NFE$data.name,OR_REVEL0.5$data.name,OR_REVEL0.5_NFE$data.name,OR_REVEL0.55$data.name,OR_REVEL0.55_NFE$data.name,OR_REVEL0.6$data.name,OR_REVEL0.6_NFE$data.name,OR_REVEL0.7$data.name,OR_REVEL0.7_NFE$data.name,OR_REVEL0.8$data.name,OR_REVEL0.8_NFE$data.name,OR_CADD15REVEL0.45$data.name,OR_CADD15REVEL0.45_NFE$data.name,OR_MPC2CADD15REVEL0.45$data.name,OR_MPC2CADD15REVEL0.45_NFE$data.name,OR_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8$data.name,OR_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_NFE$data.name)
b = c(OR_MPC.2$estimate,OR_MPC.2_NFE$estimate,OR_MPC2$estimate,OR_MPC2_NFE$estimate,OR_MPC2.5$estimate,OR_MPC2.5_NFE$estimate,OR_MPC3$estimate,OR_MPC3_NFE$estimate,OR_CADD.15$estimate,OR_CADD.15_NFE$estimate,OR_CADD15$estimate,OR_CADD15_NFE$estimate,OR_CADD20$estimate,OR_CADD20_NFE$estimate,OR_CADD25$estimate,OR_CADD25_NFE$estimate,OR_CADD30$estimate,OR_CADD30_NFE$estimate,OR_REVEL.0.45$estimate,OR_REVEL.0.45_NFE$estimate,OR_REVEL0.45$estimate,OR_REVEL0.45_NFE$estimate,OR_REVEL0.5$estimate,OR_REVEL0.5_NFE$estimate,OR_REVEL0.55$estimate,OR_REVEL0.55_NFE$estimate,OR_REVEL0.6$estimate,OR_REVEL0.6_NFE$estimate,OR_REVEL0.7$estimate,OR_REVEL0.7_NFE$estimate,OR_REVEL0.8$estimate,OR_REVEL0.8_NFE$estimate,OR_CADD15REVEL0.45$estimate,OR_CADD15REVEL0.45_NFE$estimate,OR_MPC2CADD15REVEL0.45$estimate,OR_MPC2CADD15REVEL0.45_NFE$estimate,OR_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8$estimate,OR_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_NFE$estimate)
c = c(OR_MPC.2$conf.int,OR_MPC.2_NFE$conf.int,OR_MPC2$conf.int,OR_MPC2_NFE$conf.int,OR_MPC2.5$conf.int,OR_MPC2.5_NFE$conf.int,OR_MPC3$conf.int,OR_MPC3_NFE$conf.int,OR_CADD.15$conf.int,OR_CADD.15_NFE$conf.int,OR_CADD15$conf.int,OR_CADD15_NFE$conf.int,OR_CADD20$conf.int,OR_CADD20_NFE$conf.int,OR_CADD25$conf.int,OR_CADD25_NFE$conf.int,OR_CADD30$conf.int,OR_CADD30_NFE$conf.int,OR_REVEL.0.45$conf.int,OR_REVEL.0.45_NFE$conf.int,OR_REVEL0.45$conf.int,OR_REVEL0.45_NFE$conf.int,OR_REVEL0.5$conf.int,OR_REVEL0.5_NFE$conf.int,OR_REVEL0.55$conf.int,OR_REVEL0.55_NFE$conf.int,OR_REVEL0.6$conf.int,OR_REVEL0.6_NFE$conf.int,OR_REVEL0.7$conf.int,OR_REVEL0.7_NFE$conf.int,OR_REVEL0.8$conf.int,OR_REVEL0.8_NFE$conf.int,OR_CADD15REVEL0.45$conf.int,OR_CADD15REVEL0.45_NFE$conf.int,OR_MPC2CADD15REVEL0.45$conf.int,OR_MPC2CADD15REVEL0.45_NFE$conf.int,OR_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8$conf.int,OR_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_NFE$conf.int)
d = c(OR_MPC.2$p.value,OR_MPC.2_NFE$p.value,OR_MPC2$p.value,OR_MPC2_NFE$p.value,OR_MPC2.5$p.value,OR_MPC2.5_NFE$p.value,OR_MPC3$p.value,OR_MPC3_NFE$p.value,OR_CADD.15$p.value,OR_CADD.15_NFE$p.value,OR_CADD15$p.value,OR_CADD15_NFE$p.value,OR_CADD20$p.value,OR_CADD20_NFE$p.value,OR_CADD25$p.value,OR_CADD25_NFE$p.value,OR_CADD30$p.value,OR_CADD30_NFE$p.value,OR_REVEL.0.45$p.value,OR_REVEL.0.45_NFE$p.value,OR_REVEL0.45$p.value,OR_REVEL0.45_NFE$p.value,OR_REVEL0.5$p.value,OR_REVEL0.5_NFE$p.value,OR_REVEL0.55$p.value,OR_REVEL0.55_NFE$p.value,OR_REVEL0.6$p.value,OR_REVEL0.6_NFE$p.value,OR_REVEL0.7$p.value,OR_REVEL0.7_NFE$p.value,OR_REVEL0.8$p.value,OR_REVEL0.8_NFE$p.value,OR_CADD15REVEL0.45$p.value,OR_CADD15REVEL0.45_NFE$p.value,OR_MPC2CADD15REVEL0.45$p.value,OR_MPC2CADD15REVEL0.45_NFE$p.value,OR_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8$p.value,OR_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_NFE$p.value)

ORs_masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_sample0.01 <- tibble(
  "Filtering"=a,
  "Odds_ratio"=b,
  "95%_CI"=c,
  "p_value"=d
)

write_tsv(ORs_masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_sample0.01, path="ORs_masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_0.001_sample0.01_HIGHGenes_ratio6only.tsv")

Calculate ratios and Fisher’s test values for genes containing enriched variants with corresponding prediction scores, and save output

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios <- 
  mutate(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats,
         "Sample_Gene_LOF_Freq_Ratio_GnomAD_0.001"=Sample_Gene_Freq/FILTER_RF_MS_AF_0.001_REVEL0.7_ADJ,
         "Sample_Gene_LOF_Freq_Ratio_GnomAD_NFE_0.001"=Sample_Gene_Freq/FILTER_RF_MS_AF_0.001_REVEL0.7_NFE_ADJ)

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios2 <- mutate(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios, "Sample_Gene_LOF_AF_Ratio"=Sample_AF/GnomAD_v2.1_non_cancer_AF, 
"Sample_Gene_LOF_AF_Ratio_NFE"=Sample_AF/GnomAD_v2.1_non_cancer_AF_nfe)

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults <- mutate(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios2,Total_Case_Alleles=Total_Sample_Alleles)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults2 <- mutate(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults, MAX_AN=replace(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults$MAX_AN, is.na(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults$MAX_AN), max(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults$MAX_AN, na.rm=TRUE))) %>% 
  mutate(MAX_AN_NFE=replace(.$MAX_AN_NFE, is.na(.$MAX_AN_NFE), max(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults$MAX_AN_NFE, na.rm=TRUE)))

fisherresults_ENST <- apply(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults2[,c(221,231,241,223)],1,function(x) {fisher.test(rbind(x[1:2],c(x[3]-x[1],x[4]-x[2])))})

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults2$P_value_Fisher_0.005 = sapply(fisherresults_ENST,function(x) round(x$p.value,12))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults2$OR_0.005 = sapply(fisherresults_ENST,function(x) round(x$estimate,4))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults2$`95%CI_0.005` = sapply(fisherresults_ENST,function(x) paste(round(x$conf.int[1:2],2),collapse="~"))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults2$BH_0.005 = p.adjust(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults2$P_value_Fisher_0.005,method = "BH")

fisherresults2_ENST <- apply(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults2[,c(221,234,241,227)],1,function(x) {fisher.test(rbind(x[1:2],c(x[3]-x[1],x[4]-x[2])))})

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults2$P_value_Fisher_0.005_NFE = sapply(fisherresults2_ENST,function(x) round(x$p.value,12))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults2$OR_0.005_NFE = sapply(fisherresults2_ENST,function(x) round(x$estimate,4))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults2$`95%CI_0.005_NFE` = sapply(fisherresults2_ENST,function(x) paste(round(x$conf.int[1:2],2),collapse="~"))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults2$BH_0.005_NFE = p.adjust(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults2$P_value_Fisher_0.005_NFE,method = "BH")

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults3 <- mutate(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults2, FilteringAF_95_Exceeds_MaxCredPopAF=((GnomAD_v2.1_non_cancer_Filtering_AF_95)>0.000181)) %>% 
  mutate(FilteringAF_95_NFE_Exceeds_MaxCredPopAF=((GnomAD_v2.1_non_cancer_Filtering_AF_95_nfe)>0.000181))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults3 %>% 
  write_excel_csv(path="masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_0.001_REVEL0.7_sample0.01_HIGHgenes_ratio6.csv",na=".",append=FALSE,col_names=TRUE)

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults3 %>% 
  filter(Feature%in%(HIGHgenes_candidates_list)) %>% 
  write_excel_csv(path="masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_0.001_REVEL0.7_sample0.01_HIGHgenes_candidates_ratio6.csv",na=".",append=FALSE,col_names=TRUE)
LS0tCnRpdGxlOiAiVGhlc2lzIE1pc3NlbnNlIFZhcmlhbnQgTG9GLUVucmljaGVkIEdlbmVzIFNjcmlwdCIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQpBTEwgSU1QT1JURUQgRklMRVMgTVVTVCBCRSBJTiBUSEUgU0FNRSBESVJFQ1RPUlkgQVMgVEhJUyBTQ1JJUFQKCkxvYWQgdGlkeXZlcnNlIHBhY2thZ2UKYGBge3J9CmxpYnJhcnkoInRpZHl2ZXJzZSIpCmBgYAoKSW1wb3J0IHJhdyB2Y2YgZGF0YSBmcm9tICJtYXN0ZXJmaWxlIiBhbmQgZXhjbHVkZSB2YXJpYW50cyB3aXRoIEdub21BRCBub24tY2FuY2VyIEFGID4gMC4wMDEKYGBge3J9Cm1hc3RlcmZpbGUgPC0gcmVhZC5kZWxpbSgibWFzdGVyZmlsZS50c3YiLCBoZWFkZXI9VFJVRSwgcm93Lm5hbWVzPU5VTEwsIG5hLnN0cmluZ3MgPSAiLiIsIHN0cmluZ3NBc0ZhY3RvcnM9RkFMU0UpICU+JSAKICBkcGx5cjo6cmVuYW1lKCJTYW1wbGUiPSJYLlNhbXBsZSIpICU+JSAKICBmaWx0ZXIoR25vbUFEX3YyLjFfbm9uX2NhbmNlcl9BRjw9MC4wMDEpCmBgYAoKRXhjbHVkZSBub24tZXBpdGhlbGlhbCwgdXRlcmluZS1vbmx5LCBCUkNBICt2ZSBhbmQgb3RoZXIgbXV0YXRpb24gK3ZlIHNhbXBsZXMKYGBge3J9ClZpUF9EaXNjb3ZlcnlfQ29ob3J0IDwtIHJlYWQuZGVsaW0oIlZpUF9Mb0ZfRGlzY292ZXJ5X0NvaG9ydC50eHQiLCBzdHJpbmdzQXNGYWN0b3JzPUZBTFNFKQpWaVBfRGlzY292ZXJ5X0NvaG9ydF9saXN0IDwtIFZpUF9EaXNjb3ZlcnlfQ29ob3J0WywxXQoKbWFzdGVyZmlsZV9lb2MgPC0gZmlsdGVyKG1hc3RlcmZpbGUsU2FtcGxlJWluJWMoVmlQX0Rpc2NvdmVyeV9Db2hvcnRfbGlzdCkpCnJtKG1hc3RlcmZpbGUpCmBgYAoKQXBwZW5kIHBhdGllbnQgcGF0aCBkYXRhCmBgYHtyfQpWaVBfT3ZDYV9QYXRoX0RhdGEgPC0gcmVhZC5kZWxpbSgiVmlQX092Q2FfUGF0aF9EYXRhLnR4dCIsIGhlYWRlcj1UUlVFLCByb3cubmFtZXM9TlVMTCwgc3RyaW5nc0FzRmFjdG9ycz1GQUxTRSkgJT4lIAogIGRwbHlyOjpyZW5hbWUoIlNhbXBsZSI9RXhvbWUuSUQpCm1hc3RlcmZpbGVfZW9jX3dpdGhQYXRoIDwtIGxlZnRfam9pbihtYXN0ZXJmaWxlX2VvYyxWaVBfT3ZDYV9QYXRoX0RhdGEsYnk9IlNhbXBsZSIsY29weT1GQUxTRSkKcm0oVmlQX092Q2FfUGF0aF9EYXRhLG1hc3RlcmZpbGVfZW9jKQpgYGAKCkV4Y2x1ZGUgbG93LWdyYWRlIHR1bW91ciBzYW1wbGVzCmBgYHtyfQptYXN0ZXJmaWxlX2VvYzIgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX3dpdGhQYXRoLChIaXN0b3BhdGguVHlwZSE9IkJvcmRlcmxpbmUgdHVtb3VyIikmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSGlzdG9wYXRoLlR5cGUhPSJNdWNpbm91cyIpJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKEhpc3RvcGF0aC5UeXBlIT0iQ2xlYXIgY2VsbCIpJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKEhpc3RvcGF0aC5UeXBlIT0iTG93LWdyYWRlIHNlcm91cyIpJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKEhpc3RvcGF0aC5UeXBlIT0iTG93LWdyYWRlIGVuZG9tZXRyaW9pZCIpJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKEhpc3RvcGF0aC5UeXBlIT0iU2Vyb3VzICg/bG93LWdyYWRlL2JvcmRlcmxpbmUpIikmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSGlzdG9wYXRoLlR5cGUhPSJNaXhlZCBNdWxsZXJpYW4iKSYKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChIaXN0b3BhdGguVHlwZSE9Ik1peGVkIEVBT0MiKSkKcm0obWFzdGVyZmlsZV9lb2Nfd2l0aFBhdGgpCmBgYAoKRXhjbHVkZSBsb3ctcXVhbGl0eSB2YXJpYW50cywgR25vbUFEIFJGLWZsYWdnZWQgdmFyaWFudHMgYW5kIG5vbi1wcm90ZWluLWNvZGluZyBnZW5lcwpgYGB7cn0KbWFzdGVyZmlsZV9lb2NfZ29vZFEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jMiwgKFFVQUw+PTMwKSYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKElkZW50aWZpZWQhPSJGaWx0ZXJlZEluQWxsIikmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTYW1wbGUuUE1DRFA+PTEwKSYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNhbXBsZS5QTUNGUkVRPj0wLjI1KSkgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKCFzdHJfZGV0ZWN0KEdub21BRF92Mi4xX0ZJTFRFUl9leG9tZSwiSW5icmVlZGluZ0NvZWZmIikmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhc3RyX2RldGVjdChHbm9tQURfdjIuMV9GSUxURVJfZXhvbWUsIlJGIikpfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcy5uYShHbm9tQURfdjIuMV9GSUxURVJfZXhvbWUpKSAlPiUgCiAgZmlsdGVyKCghc3RyX2RldGVjdChHbm9tQURfdjIuMV9GSUxURVJfZ2Vub21lLCJJbmJyZWVkaW5nQ29lZmYiKSYKICAgICAgICAgICAgIXN0cl9kZXRlY3QoR25vbUFEX3YyLjFfRklMVEVSX2dlbm9tZSwiUkYiKSl8CiAgICAgICAgICAgaXMubmEoR25vbUFEX3YyLjFfRklMVEVSX2dlbm9tZSkpICU+JSAKICBmaWx0ZXIoQklPVFlQRSVpbiVjKCJwcm90ZWluX2NvZGluZyIpKQpUb3RhbF9TYW1wbGVfQWxsZWxlcyA8LSAobl9kaXN0aW5jdChtYXN0ZXJmaWxlX2VvY19nb29kUSRTYW1wbGUpKjIpCnJtKG1hc3RlcmZpbGVfZW9jMikKYGBgCgpFeGNsdWRlIEhJR0ggaW1wYWN0IHZhcmlhbnRzIChpbmNsdWRpbmcgdmFyaWFudHMgd2l0aCBDb25zZXF1ZW5jZSA9PSAicHJvdGVpbl9hbHRlcmluZ192YXJpYW50IikgcmV0YWluIG9ubHkgZ2VuZXMgcHJlc2VudCBpbiBtYXN0ZXJmaWxlX2VvY19nb29kUTJfSElHSF9FTlNUY2Fub25pY2FsX3NhbXBsZUFGMC4wMSBmaWxlIChmcm9tIExvRiBWYXJpYW50IEZpbHRlcmluZyBhbmQgUmFua2luZyBTY3JpcHQtIHNlZSAoaHR0cHM6Ly9ycHVicy5jb20vZGVlcHN1YnMvbmF0dXJlX2NvbW1zX3BhcGVyXzIwMjApIHdpdGggbWluaW11bSByYXRpbyA+IDMvNi8xMi4KYGBge3J9CkhJR0hnZW5lc19yYXRpbzYgPC0gcmVhZC5kZWxpbSgiSElHSGdlbmVzX2xpc3QudHh0Iiwgc3RyaW5nc0FzRmFjdG9ycz1GQUxTRSkgJT4lIAogICMgZmlsdGVyKFNhbXBsZV9HZW5lX0xPRl9GcmVxX1JhdGlvX0dub21BRF9ORkVfMC4wMDU+MykKICBmaWx0ZXIoU2FtcGxlX0dlbmVfTE9GX0ZyZXFfUmF0aW9fR25vbUFEX05GRV8wLjAwNT42KQogICMgZmlsdGVyKFNhbXBsZV9HZW5lX0xPRl9GcmVxX1JhdGlvX0dub21BRF9ORkVfMC4wMDU+MTIpCkhJR0hnZW5lc19jYW5kaWRhdGVzIDwtIHJlYWQuZGVsaW0oIkhJR0hnZW5lc19saXN0LnR4dCIsIHN0cmluZ3NBc0ZhY3RvcnM9RkFMU0UpICU+JSAKICBmaWx0ZXIoQ2FuZGlkYXRlX0dlbmUlaW4lKCJZRVMiKSkKSElHSGdlbmVzX3JhdGlvNl9saXN0IDwtIEhJR0hnZW5lc19yYXRpbzZbLDJdCkhJR0hnZW5lc19jYW5kaWRhdGVzX2xpc3QgPC0gSElHSGdlbmVzX2NhbmRpZGF0ZXNbLDJdCgptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUSwgSU1QQUNUPT0iTU9ERVJBVEUiKSAlPiUgCiAgZmlsdGVyKHN0cl9kZXRlY3QoQ29uc2VxdWVuY2UsIm1pc3NlbnNlX3ZhcmlhbnQiKSkgJT4lIAogIGZpbHRlcihGZWF0dXJlJWluJShISUdIZ2VuZXNfcmF0aW82X2xpc3QpKQpgYGAKCkV4Y2x1ZGUgTk0gY2Fub25pY2FsIChSZWZTZXEpIHZhcmlhbnRzIGFuZCBjb252ZXJ0IE1QQyBzdHJpbmdzIHRvIGludGVnZXJzL2RvdWJsZXMKYGBge3J9Cm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NUywgQ0FOT05JQ0FMPT0iWUVTIikgCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCRNUEMgPC0gYXMubnVtZXJpYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWwkTVBDKSAlPiUgcmVwbGFjZV9uYSgwKQpybShtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TKQpgYGAKCkRpdmlkZSBkYXRhIGludG8gZGlmZmVyZW50IHByZWRpY3Rpb24gc2NvcmUgZ3JvdXBzCmBgYHtyfQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjIgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCwgKE1QQzwyKSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCwgKE1QQz49MikpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjUgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCwgKE1QQz49Mi41KSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzMgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCwgKE1QQz49MykpCgptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERC4xNSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoQ0FERF9QSFJFRDwxNSkpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTUgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCwgKENBRERfUEhSRUQ+PTE1KSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyMCA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoQ0FERF9QSFJFRD49MjApKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1IDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWwsIChDQUREX1BIUkVEPj0yNSkpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMzAgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCwgKENBRERfUEhSRUQ+PTMwKSkKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTC4wLjQ1IDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWwsIChSRVZFTF9zY29yZTwwLjQ1KSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoUkVWRUxfc2NvcmU+PTAuNDUpKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjUgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCwgKFJFVkVMX3Njb3JlPj0wLjUpKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1IDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWwsIChSRVZFTF9zY29yZT49MC41NSkpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNiA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoUkVWRUxfc2NvcmU+PTAuNikpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNyA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoUkVWRUxfc2NvcmU+PTAuNykpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuOCA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoUkVWRUxfc2NvcmU+PTAuOCkpCgptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1UkVWRUwwLjQ1IDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWwsIChDQUREX1BIUkVEPj0xNSkmKFJFVkVMX3Njb3JlPj0wLjQ1KSkgIAptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoQ0FERF9QSFJFRD49MTUpJihSRVZFTF9zY29yZT49MC40NSkmKE1QQz49MikpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjggPC0gYmluZF9yb3dzKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDUsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMCxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjgsLmlkPU5VTEwpICU+JSAKICBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkKCnJtKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCkKYGBgCgpTYW1wbGUgdmFyaWFudCBjb3VudHMgYW5kIEFGcwpgYGB7cn0KdmFyaWFudF9jb3VudHNfQUZzIDwtIGZ1bmN0aW9uKHZjZil7CnZhcmlhbnRzX2hldGVyb3p5Z291cyA8LSB2Y2YgJT4lIAogIHNlbGVjdChIR1ZTYyxTYW1wbGUuR1QpICU+JSAKICBncm91cF9ieShIR1ZTYyxTYW1wbGUuR1QpICU+JSAKICBzdW1tYXJpc2UobigpKSAlPiUgCiAgZmlsdGVyKChTYW1wbGUuR1QlaW4lYygiJzAvMSIsIicxLzAiKSkpICU+JSAKICBkcGx5cjo6cmVuYW1lKGFsbGVsZXMgPSAibigpIikgJT4lIAogIGdyb3VwX2J5KEhHVlNjKSAlPiUgCiAgc3VtbWFyaXNlKHN1bShhbGxlbGVzKSkKdmFyaWFudHNfaG9tb3p5Z291cyA8LSB2Y2YgJT4lIAogIHNlbGVjdChIR1ZTYyxTYW1wbGUuR1QpICU+JSAKICBncm91cF9ieShIR1ZTYyxTYW1wbGUuR1QpICU+JSAKICBzdW1tYXJpc2UobigpKSAlPiUgCiAgZmlsdGVyKChTYW1wbGUuR1QhPSInMC8xIikmKFNhbXBsZS5HVCE9IicxLzAiKSkgJT4lIAogIG11dGF0ZShhbGxlbGVzID0gYG4oKWAqMikgJT4lIAogIHNlbGVjdCgtYG4oKWApICU+JSAKICBncm91cF9ieShIR1ZTYykgJT4lIAogIHN1bW1hcmlzZShzdW0oYWxsZWxlcykpCnZhcmlhbnRzIDwtIGZ1bGxfam9pbih2YXJpYW50c19oZXRlcm96eWdvdXMsdmFyaWFudHNfaG9tb3p5Z291cyxieT0iSEdWU2MiLGNvcHk9RkFMU0Usc3VmZml4PWMoIi54IiwiLnkiKSkgJT4lCiAgbXV0YXRlX2FsbChmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogIG11dGF0ZShUb3RhbF9BbGxlbGVfQ291bnQ9YHN1bShhbGxlbGVzKS54YCtgc3VtKGFsbGVsZXMpLnlgKSAlPiUgCiAgbXV0YXRlKFNhbXBsZV9BRj1Ub3RhbF9BbGxlbGVfQ291bnQvVG90YWxfU2FtcGxlX0FsbGVsZXMpCnZjZiA8LSBsZWZ0X2pvaW4odmNmLCB2YXJpYW50c1ssYygxLDQ6NSldLGJ5PSJIR1ZTYyIsY29weT1GQUxTRSkKfQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQy4yICA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQy4yKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMiA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjUgPC0gdmFyaWFudF9jb3VudHNfQUZzKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjUpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMzIDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMykKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQURELjE1IDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERC4xNSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNSA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyMCA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyMCkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyNSA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyNSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMCA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMCkKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTC4wLjQ1IDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwuMC40NSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NSA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41IDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjUpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNTUgPC0gdmFyaWFudF9jb3VudHNfQUZzKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNTUpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNiA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42KQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjcgPC0gdmFyaWFudF9jb3VudHNfQUZzKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNykKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44IDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjgpCgptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1UkVWRUwwLjQ1IDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1UkVWRUwwLjQ1KQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NSA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJDQUREMTVSRVZFTDAuNDUpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjggPC0gdmFyaWFudF9jb3VudHNfQUZzKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjgpCgpybShsaXN0PShscyhwYXR0ZXJuPSJedmFyaWFudHMiKSkpCmBgYAoKT3V0cHV0IGxpc3Qgb2YgZ2VuZXMgYW5kIHZhcmlhbnRzIHdpdGggc2FtcGxlIEFGID4gMC4wMQpgYGB7cn0KbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2dlbmVzYW5kdmFyaWFudHMwLjAxIDwtIGJpbmRfcm93cyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjIsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIuNSxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMyxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERC4xNSxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjAsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyNSxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwLG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTC4wLjQ1LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDUsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNTUsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNyxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjgsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNVJFVkVMMC40NSxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44KSAlPiUgCiAgZmlsdGVyKFNhbXBsZV9BRiA+IDAuMDEpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9nZW5lc2FuZHZhcmlhbnRzMC4wMVssYygyOjYsMjU6NTQpXSAlPiUgCiAgZGlzdGluY3QoLmtlZXBfYWxsID0gRkFMU0UpICU+JSAKICB3cml0ZV9leGNlbF9jc3YocGF0aD0ibWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2dlbmVzYW5kdmFyaWFudHMwLjAxLmNzdiIsbmE9Ii4iLGFwcGVuZD1GQUxTRSxjb2xfbmFtZXM9VFJVRSkKcm0obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2dlbmVzYW5kdmFyaWFudHMwLjAxKQpgYGAKCk91dHB1dCBsaXN0IG9mIGdlbmVzIGFuZCB2YXJpYW50cyB3aXRoIHNhbXBsZSBBRiA8IDAuMDEKYGBge3J9Cm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9zYW1wbGUwLjAxX0hJR0hnZW5lc19yYXRpbzYgPC0gYmluZF9yb3dzKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMuMixtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMixtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMi41LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMzLG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQURELjE1LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTUsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyMCxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMzAsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDUsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NSxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjUsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41NSxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjYsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuOCxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1UkVWRUwwLjQ1LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjgpICU+JQogIGZpbHRlcihTYW1wbGVfQUYgPCAwLjAxKSAlPiUKICB3cml0ZV9leGNlbF9jc3YocGF0aD0ibWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsXzAuMDAxX3NhbXBsZTAuMDFfSElHSGdlbmVzX3JhdGlvNi5jc3YiLG5hPSIuIixhcHBlbmQ9RkFMU0UsY29sX25hbWVzPVRSVUUpCmBgYAoKT3V0cHV0IGxpc3Qgb2YgTG9GIGNhbmRpZGF0ZSBnZW5lcyB3aXRoIHNhbXBsZSBBRiA8IDAuMSBNUyB2YXJpYW50cyAKYGBge3J9Cm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9zYW1wbGUwLjAxX0hJR0hnZW5lc19jYW5kaWRhdGVzIDwtIGJpbmRfcm93cyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjIsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIuNSxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMyxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERC4xNSxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjAsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyNSxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwLG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTC4wLjQ1LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDUsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNTUsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNyxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjgsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNVJFVkVMMC40NSxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44KSAlPiUKICBmaWx0ZXIoU2FtcGxlX0FGIDwgMC4wMSkgJT4lCiAgZmlsdGVyKEZlYXR1cmUlaW4lKEhJR0hnZW5lc19jYW5kaWRhdGVzX2xpc3QpKSAlPiUgCiAgd3JpdGVfZXhjZWxfY3N2KHBhdGg9Im1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF8wLjAwMV9zYW1wbGUwLjAxX0hJR0hnZW5lc19jYW5kaWRhdGVzX3JhdGlvNi5jc3YiLG5hPSIuIixhcHBlbmQ9RkFMU0UsY29sX25hbWVzPVRSVUUpCmBgYAoKRXhjbHVkZSB2YXJpYW50cyB3aXRoIHNhbXBsZSBBRiA+MC4wMcybCmBgYHtyfQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjJfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjIsU2FtcGxlX0FGIDwgMC4wMSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMixTYW1wbGVfQUYgPCAwLjAxKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMi41X3NhbXBsZUFGMC4wMSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIuNSxTYW1wbGVfQUYgPCAwLjAxKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDM19zYW1wbGVBRjAuMDEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMzLFNhbXBsZV9BRiA8IDAuMDEpCgptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERC4xNV9zYW1wbGVBRjAuMDEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQURELjE1LFNhbXBsZV9BRiA8IDAuMDEpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1LFNhbXBsZV9BRiA8IDAuMDEpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjBfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwLFNhbXBsZV9BRiA8IDAuMDEpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjVfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1LFNhbXBsZV9BRiA8IDAuMDEpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMzBfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwLFNhbXBsZV9BRiA8IDAuMDEpCgptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwuMC40NV9zYW1wbGVBRjAuMDEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTC4wLjQ1LFNhbXBsZV9BRiA8IDAuMDEpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDVfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1LFNhbXBsZV9BRiA8IDAuMDEpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNV9zYW1wbGVBRjAuMDEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNSxTYW1wbGVfQUYgPCAwLjAxKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1X3NhbXBsZUFGMC4wMSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41NSxTYW1wbGVfQUYgPCAwLjAxKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjZfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjYsU2FtcGxlX0FGIDwgMC4wMSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3NhbXBsZUFGMC4wMSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43LFNhbXBsZV9BRiA8IDAuMDEpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuOF9zYW1wbGVBRjAuMDEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuOCxTYW1wbGVfQUYgPCAwLjAxKQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNVJFVkVMMC40NV9zYW1wbGVBRjAuMDEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDUsU2FtcGxlX0FGIDwgMC4wMSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJDQUREMTVSRVZFTDAuNDVfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NSxTYW1wbGVfQUYgPCAwLjAxKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X3NhbXBsZUFGMC4wMSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOCxTYW1wbGVfQUYgPCAwLjAxKQoKcm0obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQy4yLG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjUsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzMsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTUsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNSxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwLG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjUsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMCxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwuMC40NSxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNSxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNixtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjcsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDUsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJDQUREMTVSRVZFTDAuNDUsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOCkKYGBgCgpTYW1wbGUgZ2VuZSBjb3VudHMgYW5kIGZyZXF1ZW5jaWVzCmBgYHtyfQpnZW5lX2NvdW50c19BRiA8LSBmdW5jdGlvbih2Y2YpewpnZW5lc19vbmVWYXJBbGxlbGUgPC0gdmNmICU+JSBzZWxlY3QoU1lNQk9MLFNhbXBsZS5HVCkgJT4lIAogIHNlbGVjdChTWU1CT0wsU2FtcGxlLkdUKSAlPiUgCiAgZ3JvdXBfYnkoU1lNQk9MLFNhbXBsZS5HVCkgJT4lIAogIHN1bW1hcmlzZShuKCkpICU+JSAKICBmaWx0ZXIoKFNhbXBsZS5HVCVpbiVjKCInMC8xIiwiJzEvMCIpKSkgJT4lIAogIGRwbHlyOjpyZW5hbWUoZ2VuZV9WYXIgPSAibigpIikgJT4lIAogIGdyb3VwX2J5KFNZTUJPTCkgJT4lIAogIHN1bW1hcmlzZShzdW0oZ2VuZV9WYXIpKQpnZW5lc190d29WYXJBbGxlbGUgPC0gdmNmICU+JSBzZWxlY3QoU1lNQk9MLFNhbXBsZS5HVCkgJT4lIAogIHNlbGVjdChTWU1CT0wsU2FtcGxlLkdUKSAlPiUgCiAgZ3JvdXBfYnkoU1lNQk9MLFNhbXBsZS5HVCkgJT4lIAogIHN1bW1hcmlzZShuKCkpICU+JSAKICBmaWx0ZXIoKFNhbXBsZS5HVCE9IicwLzEiKSYoU2FtcGxlLkdUIT0iJzEvMCIpKSAlPiUgCiAgbXV0YXRlKGdlbmVfVmFyID0gYG4oKWAqMikgJT4lIAogIHNlbGVjdCgtYG4oKWApICU+JSAKICBncm91cF9ieShTWU1CT0wpICU+JSAKICBzdW1tYXJpc2Uoc3VtKGdlbmVfVmFyKSkKZ2VuZXMgPC0gZnVsbF9qb2luKGdlbmVzX29uZVZhckFsbGVsZSxnZW5lc190d29WYXJBbGxlbGUsYnk9IlNZTUJPTCIsY29weT1GQUxTRSxzdWZmaXg9YygiLngiLCIueSIpKSAlPiUgCiAgbXV0YXRlX2FsbChmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogIG11dGF0ZShUb3RhbF9HZW5lX0NvdW50PWBzdW0oZ2VuZV9WYXIpLnhgK2BzdW0oZ2VuZV9WYXIpLnlgKSAlPiUgCiAgbXV0YXRlKFNhbXBsZV9HZW5lX0ZyZXE9VG90YWxfR2VuZV9Db3VudC9Ub3RhbF9TYW1wbGVfQWxsZWxlcykKdmNmIDwtIGxlZnRfam9pbih2Y2YsIGdlbmVzWyxjKDEsNDo1KV0sYnk9IlNZTUJPTCIsY29weT1GQUxTRSkKfQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQy4yX3NhbXBsZUFGMC4wMSA8LSBnZW5lX2NvdW50c19BRihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjJfc2FtcGxlQUYwLjAxKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9zYW1wbGVBRjAuMDEgPC0gZ2VuZV9jb3VudHNfQUYobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfc2FtcGxlQUYwLjAxKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMi41X3NhbXBsZUFGMC4wMSA8LSBnZW5lX2NvdW50c19BRihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMi41X3NhbXBsZUFGMC4wMSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzNfc2FtcGxlQUYwLjAxIDwtIGdlbmVfY291bnRzX0FGKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMzX3NhbXBsZUFGMC4wMSkKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQURELjE1X3NhbXBsZUFGMC4wMSA8LSBnZW5lX2NvdW50c19BRihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERC4xNV9zYW1wbGVBRjAuMDEpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVfc2FtcGxlQUYwLjAxIDwtIGdlbmVfY291bnRzX0FGKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVfc2FtcGxlQUYwLjAxKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwX3NhbXBsZUFGMC4wMSA8LSBnZW5lX2NvdW50c19BRihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwX3NhbXBsZUFGMC4wMSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyNV9zYW1wbGVBRjAuMDEgPC0gZ2VuZV9jb3VudHNfQUYobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyNV9zYW1wbGVBRjAuMDEpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMzBfc2FtcGxlQUYwLjAxIDwtIGdlbmVfY291bnRzX0FGKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMzBfc2FtcGxlQUYwLjAxKQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDVfc2FtcGxlQUYwLjAxIDwtIGdlbmVfY291bnRzX0FGKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTC4wLjQ1X3NhbXBsZUFGMC4wMSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NV9zYW1wbGVBRjAuMDEgPC0gZ2VuZV9jb3VudHNfQUYobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NV9zYW1wbGVBRjAuMDEpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNV9zYW1wbGVBRjAuMDEgPC0gZ2VuZV9jb3VudHNfQUYobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41X3NhbXBsZUFGMC4wMSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41NV9zYW1wbGVBRjAuMDEgPC0gZ2VuZV9jb3VudHNfQUYobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41NV9zYW1wbGVBRjAuMDEpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNl9zYW1wbGVBRjAuMDEgPC0gZ2VuZV9jb3VudHNfQUYobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42X3NhbXBsZUFGMC4wMSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3NhbXBsZUFGMC4wMSA8LSBnZW5lX2NvdW50c19BRihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfc2FtcGxlQUYwLjAxKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjhfc2FtcGxlQUYwLjAxIDwtIGdlbmVfY291bnRzX0FGKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuOF9zYW1wbGVBRjAuMDEpCgptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1UkVWRUwwLjQ1X3NhbXBsZUFGMC4wMSA8LSBnZW5lX2NvdW50c19BRihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1UkVWRUwwLjQ1X3NhbXBsZUFGMC4wMSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJDQUREMTVSRVZFTDAuNDVfc2FtcGxlQUYwLjAxIDwtIGdlbmVfY291bnRzX0FGKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyQ0FERDE1UkVWRUwwLjQ1X3NhbXBsZUFGMC4wMSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF9zYW1wbGVBRjAuMDEgPC0gZ2VuZV9jb3VudHNfQUYobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF9zYW1wbGVBRjAuMDEpCgpybShsaXN0PShscyhwYXR0ZXJuPSJeZ2VuZXMiKSkpCmBgYAoKQWRkIEdub21BRCBnZW5lLWxldmVsIGRhdGEKYGBge3J9Ckdub21BRF9zdGF0c19NUyA8LSByZWFkLmRlbGltKCJHbm9tQUQuZ2VuZS5zdGF0cy52Mi4xX21pc3NlbnNlX0FGXzAuMDAxLnRzdiIsIGhlYWRlcj1UUlVFLCByb3cubmFtZXM9TlVMTCwgc3RyaW5nc0FzRmFjdG9ycz1GQUxTRSkgJT4lIAogIGRwbHlyOjpyZW5hbWUoU1lNQk9MPVguU3ltYm9sKSAKR25vbUFEX3N0YXRzX01TIDwtIEdub21BRF9zdGF0c19NU1ssYygxOjEzLDE1NjoyODEpXSAKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMuMl9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtIGxlZnRfam9pbihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjJfc2FtcGxlQUYwLjAxLEdub21BRF9zdGF0c19NU1ssYygyLDY6MTMsMTQ6MTkpXSxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMuMl9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtCm11dGF0ZV9hdChtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjJfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyx2YXJzKHN0YXJ0c193aXRoKCJGSUxURVJfIikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUgCiAgbXV0YXRlX2lmKGdyZXBsKCJwb3BtYXgkIiwgbmFtZXMoLikpLGZ1bnMoaWZlbHNlKC4gPT0gIk5BIiwgMCwgYXMubnVtZXJpYyguKSkpKSAlPiUgCiAgbXV0YXRlX2F0KHZhcnMoZW5kc193aXRoKCJwb3BtYXgiKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpCgptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtIGxlZnRfam9pbihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9zYW1wbGVBRjAuMDEsR25vbUFEX3N0YXRzX01TWyxjKDIsNjoxMywyMDoyNSldLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKSAKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LQptdXRhdGVfYXQobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyx2YXJzKHN0YXJ0c193aXRoKCJGSUxURVJfIikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUgCiAgbXV0YXRlX2lmKGdyZXBsKCJwb3BtYXgkIiwgbmFtZXMoLikpLGZ1bnMoaWZlbHNlKC4gPT0gIk5BIiwgMCwgYXMubnVtZXJpYyguKSkpKSAlPiUgCiAgbXV0YXRlX2F0KHZhcnMoZW5kc193aXRoKCJwb3BtYXgiKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpCgptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMi41X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjVfc2FtcGxlQUYwLjAxLEdub21BRF9zdGF0c19NU1ssYygyLDY6MTMsMjY6MzEpXSxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LQptdXRhdGVfYXQobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIuNV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLHZhcnMoc3RhcnRzX3dpdGgoIkZJTFRFUl8iKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICBtdXRhdGVfaWYoZ3JlcGwoInBvcG1heCQiLCBuYW1lcyguKSksZnVucyhpZmVsc2UoLiA9PSAiTkEiLCAwLCBhcy5udW1lcmljKC4pKSkpICU+JSAKICBtdXRhdGVfYXQodmFycyhlbmRzX3dpdGgoInBvcG1heCIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMzX3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMzX3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDMyOjM3KV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpIAptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDM19zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtCm11dGF0ZV9hdChtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDM19zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLHZhcnMoc3RhcnRzX3dpdGgoIkZJTFRFUl8iKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICBtdXRhdGVfaWYoZ3JlcGwoInBvcG1heCQiLCBuYW1lcyguKSksZnVucyhpZmVsc2UoLiA9PSAiTkEiLCAwLCBhcy5udW1lcmljKC4pKSkpICU+JSAKICBtdXRhdGVfYXQodmFycyhlbmRzX3dpdGgoInBvcG1heCIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQURELjE1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQURELjE1X3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDM4OjQzKV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQURELjE1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQURELjE1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtIGxlZnRfam9pbihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1X3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDQ0OjQ5KV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LQptdXRhdGVfYXQobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLHZhcnMoc3RhcnRzX3dpdGgoIkZJTFRFUl8iKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICBtdXRhdGVfaWYoZ3JlcGwoInBvcG1heCQiLCBuYW1lcyguKSksZnVucyhpZmVsc2UoLiA9PSAiTkEiLCAwLCBhcy5udW1lcmljKC4pKSkpICU+JSAKICBtdXRhdGVfYXQodmFycyhlbmRzX3dpdGgoInBvcG1heCIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjBfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LSBsZWZ0X2pvaW4obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyMF9zYW1wbGVBRjAuMDEsR25vbUFEX3N0YXRzX01TWyxjKDIsNjoxMyw1MDo1NSldLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwX3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjBfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyx2YXJzKHN0YXJ0c193aXRoKCJGSUxURVJfIikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUgCiAgbXV0YXRlX2lmKGdyZXBsKCJwb3BtYXgkIiwgbmFtZXMoLikpLGZ1bnMoaWZlbHNlKC4gPT0gIk5BIiwgMCwgYXMubnVtZXJpYyguKSkpKSAlPiUgCiAgbXV0YXRlX2F0KHZhcnMoZW5kc193aXRoKCJwb3BtYXgiKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpCgptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjVfc2FtcGxlQUYwLjAxLEdub21BRF9zdGF0c19NU1ssYygyLDY6MTMsNTY6NjEpXSxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyNV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtCm11dGF0ZV9hdChtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMF9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtIGxlZnRfam9pbihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwX3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDYyOjY3KV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMzBfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LQptdXRhdGVfYXQobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMF9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLHZhcnMoc3RhcnRzX3dpdGgoIkZJTFRFUl8iKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICBtdXRhdGVfaWYoZ3JlcGwoInBvcG1heCQiLCBuYW1lcyguKSksZnVucyhpZmVsc2UoLiA9PSAiTkEiLCAwLCBhcy5udW1lcmljKC4pKSkpICU+JSAKICBtdXRhdGVfYXQodmFycyhlbmRzX3dpdGgoInBvcG1heCIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTC4wLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTC4wLjQ1X3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDY4OjczKV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpIAptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwuMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtCm11dGF0ZV9hdChtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwuMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLHZhcnMoc3RhcnRzX3dpdGgoIkZJTFRFUl8iKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICBtdXRhdGVfaWYoZ3JlcGwoInBvcG1heCQiLCBuYW1lcyguKSksZnVucyhpZmVsc2UoLiA9PSAiTkEiLCAwLCBhcy5udW1lcmljKC4pKSkpICU+JSAKICBtdXRhdGVfYXQodmFycyhlbmRzX3dpdGgoInBvcG1heCIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LSBsZWZ0X2pvaW4obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NV9zYW1wbGVBRjAuMDEsR25vbUFEX3N0YXRzX01TWyxjKDIsNjoxMyw3NDo3OSldLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKSAKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtCm11dGF0ZV9hdChtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNV9zYW1wbGVBRjAuMDEsR25vbUFEX3N0YXRzX01TWyxjKDIsNjoxMyw4MDo4NSldLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKSAKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLHZhcnMoc3RhcnRzX3dpdGgoIkZJTFRFUl8iKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICBtdXRhdGVfaWYoZ3JlcGwoInBvcG1heCQiLCBuYW1lcyguKSksZnVucyhpZmVsc2UoLiA9PSAiTkEiLCAwLCBhcy5udW1lcmljKC4pKSkpICU+JSAKICBtdXRhdGVfYXQodmFycyhlbmRzX3dpdGgoInBvcG1heCIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNTVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LSBsZWZ0X2pvaW4obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41NV9zYW1wbGVBRjAuMDEsR25vbUFEX3N0YXRzX01TWyxjKDIsNjoxMyw4Njo5MSldLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKSAKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtCm11dGF0ZV9hdChtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNl9zYW1wbGVBRjAuMDEsR25vbUFEX3N0YXRzX01TWyxjKDIsNjoxMyw5Mjo5NyldLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKSAKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNl9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLHZhcnMoc3RhcnRzX3dpdGgoIkZJTFRFUl8iKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICBtdXRhdGVfaWYoZ3JlcGwoInBvcG1heCQiLCBuYW1lcyguKSksZnVucyhpZmVsc2UoLiA9PSAiTkEiLCAwLCBhcy5udW1lcmljKC4pKSkpICU+JSAKICBtdXRhdGVfYXQodmFycyhlbmRzX3dpdGgoInBvcG1heCIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN19zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtIGxlZnRfam9pbihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfc2FtcGxlQUYwLjAxLEdub21BRF9zdGF0c19NU1ssYygyLDY6MTMsMTA0OjEwOSldLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKSAKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN19zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLHZhcnMoc3RhcnRzX3dpdGgoIkZJTFRFUl8iKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICBtdXRhdGVfaWYoZ3JlcGwoInBvcG1heCQiLCBuYW1lcyguKSksZnVucyhpZmVsc2UoLiA9PSAiTkEiLCAwLCBhcy5udW1lcmljKC4pKSkpICU+JSAKICBtdXRhdGVfYXQodmFycyhlbmRzX3dpdGgoInBvcG1heCIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuOF9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtIGxlZnRfam9pbihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjhfc2FtcGxlQUYwLjAxLEdub21BRF9zdGF0c19NU1ssYygyLDY6MTMsMTE2OjEyMSldLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKSAKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuOF9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLHZhcnMoc3RhcnRzX3dpdGgoIkZJTFRFUl8iKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICBtdXRhdGVfaWYoZ3JlcGwoInBvcG1heCQiLCBuYW1lcyguKSksZnVucyhpZmVsc2UoLiA9PSAiTkEiLCAwLCBhcy5udW1lcmljKC4pKSkpICU+JSAKICBtdXRhdGVfYXQodmFycyhlbmRzX3dpdGgoInBvcG1heCIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LSBsZWZ0X2pvaW4obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNVJFVkVMMC40NV9zYW1wbGVBRjAuMDEsR25vbUFEX3N0YXRzX01TWyxjKDIsNjoxMywxMzQ6MTM5KV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpIAptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1UkVWRUwwLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyx2YXJzKHN0YXJ0c193aXRoKCJGSUxURVJfIikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUgCiAgbXV0YXRlX2lmKGdyZXBsKCJwb3BtYXgkIiwgbmFtZXMoLikpLGZ1bnMoaWZlbHNlKC4gPT0gIk5BIiwgMCwgYXMubnVtZXJpYyguKSkpKSAlPiUgCiAgbXV0YXRlX2F0KHZhcnMoZW5kc193aXRoKCJwb3BtYXgiKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpCgptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtIGxlZnRfam9pbihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NV9zYW1wbGVBRjAuMDEsR25vbUFEX3N0YXRzX01TWyxjKDIsNjoxMywxMjI6MTI3KV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpIAptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtCm11dGF0ZV9hdChtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLHZhcnMoc3RhcnRzX3dpdGgoIkZJTFRFUl8iKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICBtdXRhdGVfaWYoZ3JlcGwoInBvcG1heCQiLCBuYW1lcyguKSksZnVucyhpZmVsc2UoLiA9PSAiTkEiLCAwLCBhcy5udW1lcmljKC4pKSkpICU+JSAKICBtdXRhdGVfYXQodmFycyhlbmRzX3dpdGgoInBvcG1heCIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LSBsZWZ0X2pvaW4obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF9zYW1wbGVBRjAuMDEsR25vbUFEX3N0YXRzX01TWyxjKDIsNjoxMywxMjg6MTMzKV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpIAptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyx2YXJzKHN0YXJ0c193aXRoKCJGSUxURVJfIikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUgCiAgbXV0YXRlX2lmKGdyZXBsKCJwb3BtYXgkIiwgbmFtZXMoLikpLGZ1bnMoaWZlbHNlKC4gPT0gIk5BIiwgMCwgYXMubnVtZXJpYyguKSkpKSAlPiUgCiAgbXV0YXRlX2F0KHZhcnMoZW5kc193aXRoKCJwb3BtYXgiKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpCgpybShsaXN0PShscyhwYXR0ZXJuPSJfc2FtcGxlQUYwLjAxJCIpKSkKYGBgCgpDcmVhdGUgZGF0YSBmcmFtZXMgd2l0aCBBZ2lsZW50IFN1cmVTZWxlY3Qgd2hvbGUgZXhvbWUgZ2VuZXMgKEVOU1QgYW5kIHByb3RlaW4tY29kaW5nKSBhbmQgTVBDLW9ubHkgdHJhbnNjcmlwdHMKYGBge3J9CmVuc2VtYmxfYmlvdHlwZXMgPC0gcmVhZC5kZWxpbSgiZW5zZW1ibF9iaW90eXBlcy50c3YiLCBzdHJpbmdzQXNGYWN0b3JzPUZBTFNFKSAlPiUgCiAgc2VsZWN0KGVuc2VtYmxfdHJhbnNjcmlwdF9pZCx0cmFuc2NyaXB0X2Jpb3R5cGUpICU+JSAKICBkcGx5cjo6cmVuYW1lKCJGZWF0dXJlIj0iZW5zZW1ibF90cmFuc2NyaXB0X2lkIiwiQklPVFlQRSI9InRyYW5zY3JpcHRfYmlvdHlwZSIpCkdub21BRF9zdGF0c19BZ2lsZW50U1N2Nl9MT0ZfVkVQX0VOU1RjYW5vbmljYWxfcHJvdGVpbl9jb2RpbmcgPC0gcmVhZC5kZWxpbSgiR25vbUFELmdlbmUuc3RhdHMudjIuUkYub25seS5hZ2lsZW50LnY2Lm9ubHkudHN2IiwgaGVhZGVyPVRSVUUsIHJvdy5uYW1lcz1OVUxMLCBzdHJpbmdzQXNGYWN0b3JzPUZBTFNFKSAlPiUgCiAgZmlsdGVyKENBTk9OSUNBTD09IllFUyIpICU+JSAKICBkcGx5cjo6cmVuYW1lKCJTWU1CT0wiPSJYLlN5bWJvbCIpICU+JSAKICBkcGx5cjo6cmVuYW1lKCJHZW5lIj0iRU5TRyIpICU+JSAKICBsZWZ0X2pvaW4oZW5zZW1ibF9iaW90eXBlcyxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgJT4lIAogIGZpbHRlcihCSU9UWVBFJWluJWMoInByb3RlaW5fY29kaW5nIikpCk1QQ190cmFuc2NyaXB0cyA8LSByZWFkLmRlbGltKCJNUENfdHJhbnNjcmlwdHNfd2l0aF9jYW5vbmljaXR5LnRzdiIsIGhlYWRlcj1UUlVFLCByb3cubmFtZXM9TlVMTCwgc3RyaW5nc0FzRmFjdG9ycz1GQUxTRSkgJT4lIAogIGZpbHRlcihDQU5PTklDQUwlaW4lYygiWUVTIikpICU+JSAKICBzZWxlY3QoRmVhdHVyZSxDQU5PTklDQUwpCgphbGxHZW5lc19BZ2lsZW50U1N2Nl9saXN0X3Byb3RlaW5fY29kaW5nX29ubHkgPC0gdGliYmxlKCJTWU1CT0wiPUdub21BRF9zdGF0c19BZ2lsZW50U1N2Nl9MT0ZfVkVQX0VOU1RjYW5vbmljYWxfcHJvdGVpbl9jb2RpbmckU1lNQk9MLCJHZW5lIj1Hbm9tQURfc3RhdHNfQWdpbGVudFNTdjZfTE9GX1ZFUF9FTlNUY2Fub25pY2FsX3Byb3RlaW5fY29kaW5nJEdlbmUsIkZlYXR1cmUiPUdub21BRF9zdGF0c19BZ2lsZW50U1N2Nl9MT0ZfVkVQX0VOU1RjYW5vbmljYWxfcHJvdGVpbl9jb2RpbmckRmVhdHVyZSwgIkFnaWxlbnRTU3Y2Ij0iWUVTIikgJT4lIAogIGRpc3RpbmN0KC5rZWVwX2FsbD1UUlVFKSAlPiUgCiAgYXJyYW5nZShTWU1CT0wpICU+JSAKICBmaWx0ZXIoRmVhdHVyZSVpbiUoSElHSGdlbmVzX3JhdGlvNl9saXN0KSkKCmFsbEdlbmVzX0FnaWxlbnRTU3Y2X2xpc3RfcHJvdGVpbl9jb2RpbmdfTVBDb25seTwtIHRpYmJsZSgiU1lNQk9MIj1Hbm9tQURfc3RhdHNfQWdpbGVudFNTdjZfTE9GX1ZFUF9FTlNUY2Fub25pY2FsX3Byb3RlaW5fY29kaW5nJFNZTUJPTCwiR2VuZSI9R25vbUFEX3N0YXRzX0FnaWxlbnRTU3Y2X0xPRl9WRVBfRU5TVGNhbm9uaWNhbF9wcm90ZWluX2NvZGluZyRHZW5lLCJGZWF0dXJlIj1Hbm9tQURfc3RhdHNfQWdpbGVudFNTdjZfTE9GX1ZFUF9FTlNUY2Fub25pY2FsX3Byb3RlaW5fY29kaW5nJEZlYXR1cmUsICJBZ2lsZW50U1N2NiI9IllFUyIpICU+JSAKICBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIAogIGxlZnRfam9pbihNUENfdHJhbnNjcmlwdHMsYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpICU+JSAKICBmaWx0ZXIoQ0FOT05JQ0FMJWluJWMoIllFUyIpKSAlPiUgCiAgZmlsdGVyKEZlYXR1cmUlaW4lKEhJR0hnZW5lc19yYXRpbzZfbGlzdCkpCgphbGxHZW5lc19BZ2lsZW50U1N2Nl9saXN0X3Byb3RlaW5fY29kaW5nX29ubHkyIDwtIHNlbGVjdChhbGxHZW5lc19BZ2lsZW50U1N2Nl9saXN0X3Byb3RlaW5fY29kaW5nX29ubHksRmVhdHVyZSxBZ2lsZW50U1N2NikKYGBgCgpTdW0gQUNzIGFjcm9zcyBzYW1wbGUvR25vbUFEIGZvciBlYWNoIHByZWRpY3Rpb24gc2NvcmUgY2xhc3MgKE1QQyBmaWd1cmVzIGluY2x1ZGUgdHJhbnNjcmlwdHMgd2l0aCBNUEMgc2NvcmVzIG9ubHkpCmBgYHtyfQpHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZyA8LSBmaWx0ZXIoR25vbUFEX3N0YXRzX01TLENBTk9OSUNBTCVpbiVjKCJZRVMiKSkgJT4lIAogIGRwbHlyOjpyZW5hbWUoIkdlbmUiPSJFTlNHIikgJT4lIAogIGxlZnRfam9pbihlbnNlbWJsX2Jpb3R5cGVzLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKSAlPiUgCiAgZmlsdGVyKEJJT1RZUEUlaW4lYygicHJvdGVpbl9jb2RpbmciKSkgJT4lIAogIGxlZnRfam9pbihhbGxHZW5lc19BZ2lsZW50U1N2Nl9saXN0X3Byb3RlaW5fY29kaW5nX29ubHkyLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKSAlPiUgCiAgZmlsdGVyKEFnaWxlbnRTU3Y2JWluJWMoIllFUyIpKQogIApHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ19NUEMgPC0gZmlsdGVyKEdub21BRF9zdGF0c19NUyxDQU5PTklDQUwlaW4lYygiWUVTIikpICU+JSAKICBkcGx5cjo6cmVuYW1lKCJHZW5lIj0iRU5TRyIpICU+JSAKICBsZWZ0X2pvaW4oZW5zZW1ibF9iaW90eXBlcyxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgJT4lIAogIGZpbHRlcihCSU9UWVBFJWluJWMoInByb3RlaW5fY29kaW5nIikpICU+JSAKICBsZWZ0X2pvaW4oYWxsR2VuZXNfQWdpbGVudFNTdjZfbGlzdF9wcm90ZWluX2NvZGluZ19vbmx5MixieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgJT4lIAogIGZpbHRlcihBZ2lsZW50U1N2NiVpbiVjKCJZRVMiKSkgJT4lIAogIGxlZnRfam9pbihNUENfdHJhbnNjcmlwdHMsYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpICU+JSAKICBmaWx0ZXIoQ0FOT05JQ0FMLnklaW4lYygiWUVTIikpCgpHbm9tQURfc3RhdHNfTVNfTUFYX0FOX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssNl0pICU+JSBhcy5udW1lcmljKCkKR25vbUFEX3N0YXRzX01TX01BWF9BTl9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWywxMF0pICU+JSBhcy5udW1lcmljKCkKR25vbUFEX3N0YXRzX01TX01BWF9BTl9NUENfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nX01QQ1ssNl0pICU+JSBhcy5udW1lcmljKCkKR25vbUFEX3N0YXRzX01TX01BWF9BTl9NUENfTkZFX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ19NUENbLDEwXSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfTVBDLjJfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nX01QQ1ssMTRdKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19NUEMuMl9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nX01QQ1ssMTddKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19NUEMyX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ19NUENbLDIwXSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfTVBDMl9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nX01QQ1ssMjNdKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19NUEMyLjVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nX01QQ1ssMjZdKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19NUEMyLjVfTkZFX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ19NUENbLDI5XSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfTVBDM190b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdfTVBDWywzMl0pICU+JSBhcy5udW1lcmljKCkKR25vbUFEX3N0YXRzX01TX01QQzNfTkZFX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ19NUENbLDM1XSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfQ0FERC4xNV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDM4XSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfQ0FERC4xNV9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw0MV0pICU+JSBhcy5udW1lcmljKCkKR25vbUFEX3N0YXRzX01TX0NBREQxNV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDQ0XSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfQ0FERDE1X05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDQ3XSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfQ0FERDIwX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssNTBdKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19DQUREMjBfTkZFX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssNTNdKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19DQUREMjVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw1Nl0pICU+JSBhcy5udW1lcmljKCkKR25vbUFEX3N0YXRzX01TX0NBREQyNV9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw1OV0pICU+JSBhcy5udW1lcmljKCkKR25vbUFEX3N0YXRzX01TX0NBREQzMF90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDYyXSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfQ0FERDMwX05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDY1XSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfUkVWRUwuMC40NV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDY4XSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfUkVWRUwuMC40NV9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw3MV0pICU+JSBhcy5udW1lcmljKCkKR25vbUFEX3N0YXRzX01TX1JFVkVMMC40NV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDc0XSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjQ1X05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDc3XSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw4MF0pICU+JSBhcy5udW1lcmljKCkKR25vbUFEX3N0YXRzX01TX1JFVkVMMC41X05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDgzXSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjU1X3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssODZdKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19SRVZFTDAuNTVfTkZFX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssODldKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19SRVZFTDAuNl90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDkyXSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjZfTkZFX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssOTVdKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19SRVZFTDAuN190b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDEwNF0pICU+JSBhcy5udW1lcmljKCkKR25vbUFEX3N0YXRzX01TX1JFVkVMMC43X05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDEwN10pICU+JSBhcy5udW1lcmljKCkKR25vbUFEX3N0YXRzX01TX1JFVkVMMC44X3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssMTE2XSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjhfTkZFX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssMTE5XSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfQ0FERDE1UkVWRUwwLjQ1X3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssMTM0XSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfQ0FERDE1UkVWRUwwLjQ1X05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDEzN10pICU+JSBhcy5udW1lcmljKCkKR25vbUFEX3N0YXRzX01TX01QQzJDQUREMTVSRVZFTDAuNDVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nX01QQ1ssMTIyXSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfTVBDMkNBREQxNVJFVkVMMC40NV9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nX01QQ1ssMTI1XSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ19NUENbLDEyOF0pICU+JSBhcy5udW1lcmljKCkKR25vbUFEX3N0YXRzX01TX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nX01QQ1ssMTMxXSkgJT4lIGFzLm51bWVyaWMoKQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsIDwtIFRvdGFsX1NhbXBsZV9BbGxlbGVzKihucm93KGFsbEdlbmVzX0FnaWxlbnRTU3Y2X2xpc3RfcHJvdGVpbl9jb2Rpbmdfb25seSkpICU+JSBhcy5udW1lcmljKCkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX01QQ29ubHlfdG90YWwgPC0gVG90YWxfU2FtcGxlX0FsbGVsZXMqKG5yb3coYWxsR2VuZXNfQWdpbGVudFNTdjZfbGlzdF9wcm90ZWluX2NvZGluZ19NUENvbmx5KSkgJT4lIGFzLm51bWVyaWMoKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjJfdG90YWwgPC0gbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQy4yX3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNbLGMoMzEsMzYsMzcsMjIxKV0gJT4lIGRpc3RpbmN0KC5rZWVwX2FsbD1UUlVFKSAlPiUgc2VsZWN0KDQpICU+JSBjb2xTdW1zKG5hLnJtPVRSVUUpICU+JSBhcy5udW1lcmljKCkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfdG90YWwgPC0gbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMi41X3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDM190b3RhbCA8LSBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDM19zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzWyxjKDMxLDM2LDM3LDIyMSldICU+JSBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIHNlbGVjdCg0KSAlPiUgY29sU3VtcyhuYS5ybT1UUlVFKSAlPiUgYXMubnVtZXJpYygpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQURELjE1X3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQURELjE1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNbLGMoMzEsMzYsMzcsMjIxKV0gJT4lIGRpc3RpbmN0KC5rZWVwX2FsbD1UUlVFKSAlPiUgc2VsZWN0KDQpICU+JSBjb2xTdW1zKG5hLnJtPVRSVUUpICU+JSBhcy5udW1lcmljKCkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNV90b3RhbCA8LSBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNbLGMoMzEsMzYsMzcsMjIxKV0gJT4lIGRpc3RpbmN0KC5rZWVwX2FsbD1UUlVFKSAlPiUgc2VsZWN0KDQpICU+JSBjb2xTdW1zKG5hLnJtPVRSVUUpICU+JSBhcy5udW1lcmljKCkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyMF90b3RhbCA8LSBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwX3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNbLGMoMzEsMzYsMzcsMjIxKV0gJT4lIGRpc3RpbmN0KC5rZWVwX2FsbD1UUlVFKSAlPiUgc2VsZWN0KDQpICU+JSBjb2xTdW1zKG5hLnJtPVRSVUUpICU+JSBhcy5udW1lcmljKCkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyNV90b3RhbCA8LSBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNbLGMoMzEsMzYsMzcsMjIxKV0gJT4lIGRpc3RpbmN0KC5rZWVwX2FsbD1UUlVFKSAlPiUgc2VsZWN0KDQpICU+JSBjb2xTdW1zKG5hLnJtPVRSVUUpICU+JSBhcy5udW1lcmljKCkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMF90b3RhbCA8LSBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwX3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNbLGMoMzEsMzYsMzcsMjIxKV0gJT4lIGRpc3RpbmN0KC5rZWVwX2FsbD1UUlVFKSAlPiUgc2VsZWN0KDQpICU+JSBjb2xTdW1zKG5hLnJtPVRSVUUpICU+JSBhcy5udW1lcmljKCkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDVfdG90YWwgPC0gbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1X3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjVfdG90YWwgPC0gbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNbLGMoMzEsMzYsMzcsMjIxKV0gJT4lIGRpc3RpbmN0KC5rZWVwX2FsbD1UUlVFKSAlPiUgc2VsZWN0KDQpICU+JSBjb2xTdW1zKG5hLnJtPVRSVUUpICU+JSBhcy5udW1lcmljKCkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41NV90b3RhbCA8LSBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNbLGMoMzEsMzYsMzcsMjIxKV0gJT4lIGRpc3RpbmN0KC5rZWVwX2FsbD1UUlVFKSAlPiUgc2VsZWN0KDQpICU+JSBjb2xTdW1zKG5hLnJtPVRSVUUpICU+JSBhcy5udW1lcmljKCkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42X3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNl9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzWyxjKDMxLDM2LDM3LDIyMSldICU+JSBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIHNlbGVjdCg0KSAlPiUgY29sU3VtcyhuYS5ybT1UUlVFKSAlPiUgYXMubnVtZXJpYygpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN190b3RhbCA8LSBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjhfdG90YWwgPC0gbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNbLGMoMzEsMzYsMzcsMjIxKV0gJT4lIGRpc3RpbmN0KC5rZWVwX2FsbD1UUlVFKSAlPiUgc2VsZWN0KDQpICU+JSBjb2xTdW1zKG5hLnJtPVRSVUUpICU+JSBhcy5udW1lcmljKCkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNVJFVkVMMC40NV90b3RhbCA8LSBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1UkVWRUwwLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNbLGMoMzEsMzYsMzcsMjIxKV0gJT4lIGRpc3RpbmN0KC5rZWVwX2FsbD1UUlVFKSAlPiUgc2VsZWN0KDQpICU+JSBjb2xTdW1zKG5hLnJtPVRSVUUpICU+JSBhcy5udW1lcmljKCkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJDQUREMTVSRVZFTDAuNDVfdG90YWwgPC0gbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJDQUREMTVSRVZFTDAuNDVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQpgYGAKCkNhbGN1bGF0ZSBvZGRzIHJhdGlvcyB1c2luZyBtYXRyaWNlcwpgYGB7cn0KTVBDLjIgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQy4yX3RvdGFsLAogICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc19NUENvbmx5X3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMuMl90b3RhbCwKICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTVBDLjJfdG90YWwsCiAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9NUENfdG90YWwtR25vbUFEX3N0YXRzX01TX01QQy4yX3RvdGFsKSwKICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCk1QQy4yX05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjJfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc19NUENvbmx5X3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMuMl90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01QQy4yX05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9NUENfTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19NUEMuMl9ORkVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCk1QQzIgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc19NUENvbmx5X3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTVBDMl90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9NUENfdG90YWwtR25vbUFEX3N0YXRzX01TX01QQzJfdG90YWwpLAogICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCk1QQzJfTkZFIDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX01QQ29ubHlfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTVBDMl9ORkVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX01QQ19ORkVfdG90YWwtR25vbUFEX3N0YXRzX01TX01QQzJfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKTVBDMi41IDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc19NUENvbmx5X3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NUEMyLjVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTVBDX3RvdGFsLUdub21BRF9zdGF0c19NU19NUEMyLjVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCk1QQzIuNV9ORkUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIuNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc19NUENvbmx5X3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTVBDMi41X05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTVBDX05GRV90b3RhbC1Hbm9tQURfc3RhdHNfTVNfTVBDMi41X05GRV90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCk1QQzMgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzNfdG90YWwsCiAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX01QQ29ubHlfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzNfdG90YWwsCiAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01QQzNfdG90YWwsCiAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9NUENfdG90YWwtR25vbUFEX3N0YXRzX01TX01QQzNfdG90YWwpLAogICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKTVBDM19ORkUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzNfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc19NUENvbmx5X3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMzX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTVBDM19ORkVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTVBDX05GRV90b3RhbC1Hbm9tQURfc3RhdHNfTVNfTVBDM19ORkVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCkNBREQuMTUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTVfdG90YWwsCiAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTVfdG90YWwsCiAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfQ0FERC4xNV90b3RhbCwKICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fdG90YWwtR25vbUFEX3N0YXRzX01TX0NBREQuMTVfdG90YWwpLAogICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQpDQURELjE1X05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERC4xNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX0NBREQuMTVfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19DQURELjE1X05GRV90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQpDQUREMTUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX0NBREQxNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fdG90YWwtR25vbUFEX3N0YXRzX01TX0NBREQxNV90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCkNBREQxNV9ORkUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfQ0FERDE1X05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX05GRV90b3RhbC1Hbm9tQURfc3RhdHNfTVNfQ0FERDE1X05GRV90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQpDQUREMjAgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyMF90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX0NBREQyMF90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fdG90YWwtR25vbUFEX3N0YXRzX01TX0NBREQyMF90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCkNBREQyMF9ORkUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyMF90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyMF90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfQ0FERDIwX05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX05GRV90b3RhbC1Hbm9tQURfc3RhdHNfTVNfQ0FERDIwX05GRV90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQpDQUREMjUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX0NBREQyNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fdG90YWwtR25vbUFEX3N0YXRzX01TX0NBREQyNV90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCkNBREQyNV9ORkUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfQ0FERDI1X05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX05GRV90b3RhbC1Hbm9tQURfc3RhdHNfTVNfQ0FERDI1X05GRV90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQpDQUREMzAgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMF90b3RhbCwKICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwX3RvdGFsLAogICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX0NBREQzMF90b3RhbCwKICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fdG90YWwtR25vbUFEX3N0YXRzX01TX0NBREQzMF90b3RhbCksCiAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCkNBREQzMF9ORkUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMF90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMF90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfQ0FERDMwX05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX05GRV90b3RhbC1Hbm9tQURfc3RhdHNfTVNfQ0FERDMwX05GRV90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQpSRVZFTC4wLjQ1IDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTC4wLjQ1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTC4wLjQ1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX1JFVkVMLjAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX3RvdGFsLUdub21BRF9zdGF0c19NU19SRVZFTC4wLjQ1X3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKUkVWRUwuMC40NV9ORkUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTC4wLjQ1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19SRVZFTC4wLjQ1X05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX05GRV90b3RhbC1Hbm9tQURfc3RhdHNfTVNfUkVWRUwuMC40NV9ORkVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKUkVWRUwwLjQ1IDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX1JFVkVMMC40NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX3RvdGFsLUdub21BRF9zdGF0c19NU19SRVZFTDAuNDVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKUkVWRUwwLjQ1X05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX1JFVkVMMC40NV9ORkVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19SRVZFTDAuNDVfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQpSRVZFTDAuNSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl90b3RhbC1Hbm9tQURfc3RhdHNfTVNfUkVWRUwwLjVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKUkVWRUwwLjVfTkZFIDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX1JFVkVMMC41X05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9ORkVfdG90YWwtR25vbUFEX3N0YXRzX01TX1JFVkVMMC41X05GRV90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKUkVWRUwwLjU1IDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNTVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNTVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX1JFVkVMMC41NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX3RvdGFsLUdub21BRF9zdGF0c19NU19SRVZFTDAuNTVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKUkVWRUwwLjU1X05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX1JFVkVMMC41NV9ORkVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19SRVZFTDAuNTVfTkZFX3RvdGFsKSxucm93PTIsYnlyb3c9VFJVRSkKUkVWRUwwLjYgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNl90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19SRVZFTDAuNl90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fdG90YWwtR25vbUFEX3N0YXRzX01TX1JFVkVMMC42X3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKUkVWRUwwLjZfTkZFIDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNl90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19SRVZFTDAuNl9ORkVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9ORkVfdG90YWwtR25vbUFEX3N0YXRzX01TX1JFVkVMMC42X05GRV90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQpSRVZFTDAuNyA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX1JFVkVMMC43X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl90b3RhbC1Hbm9tQURfc3RhdHNfTVNfUkVWRUwwLjdfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQpSRVZFTDAuN19ORkUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX1JFVkVMMC43X05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX05GRV90b3RhbC1Hbm9tQURfc3RhdHNfTVNfUkVWRUwwLjdfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpClJFVkVMMC44IDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuOF90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuOF90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX1JFVkVMMC44X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX3RvdGFsLUdub21BRF9zdGF0c19NU19SRVZFTDAuOF90b3RhbCksCiAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKUkVWRUwwLjhfTkZFIDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuOF90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjhfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjhfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9ORkVfdG90YWwtR25vbUFEX3N0YXRzX01TX1JFVkVMMC44X05GRV90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCkNBREQxNVJFVkVMMC40NSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1UkVWRUwwLjQ1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfQ0FERDE1UkVWRUwwLjQ1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl90b3RhbC1Hbm9tQURfc3RhdHNfTVNfQ0FERDE1UkVWRUwwLjQ1X3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKQ0FERDE1UkVWRUwwLjQ1X05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1UkVWRUwwLjQ1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1UkVWRUwwLjQ1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19DQUREMTVSRVZFTDAuNDVfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19DQUREMTVSRVZFTDAuNDVfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCk1QQzJDQUREMTVSRVZFTDAuNDUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJDQUREMTVSRVZFTDAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX01QQ29ubHlfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJDQUREMTVSRVZFTDAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01QQzJDQUREMTVSRVZFTDAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9NUENfdG90YWwtR25vbUFEX3N0YXRzX01TX01QQzJDQUREMTVSRVZFTDAuNDVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKTVBDMkNBREQxNVJFVkVMMC40NV9ORkUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJDQUREMTVSRVZFTDAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc19NUENvbmx5X3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyQ0FERDE1UkVWRUwwLjQ1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTVBDMkNBREQxNVJFVkVMMC40NV9ORkVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTVBDX05GRV90b3RhbC1Hbm9tQURfc3RhdHNfTVNfTVBDMkNBREQxNVJFVkVMMC40NV9ORkVfdG90YWwpLG5yb3c9MixieXJvdz1UUlVFKQpNUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjggPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc19NUENvbmx5X3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9NUENfdG90YWwtR25vbUFEX3N0YXRzX01TX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCk1QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF9ORkUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfTVBDb25seV90b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTVBDX05GRV90b3RhbC1Hbm9tQURfc3RhdHNfTVNfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X05GRV90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQoKb2Rkc3JhdGlvIDwtIGZ1bmN0aW9uIChhLCBiID0gTlVMTCwgYyA9IE5VTEwsIGQgPSBOVUxMLCBjb25mLmxldmVsID0gMC45NSwgCiAgICBwLmNhbGMuYnkuaW5kZXBlbmRlbmNlID0gVFJVRSkgCnsKICAgIGlmIChpcy5tYXRyaXgoYSkpIHsKICAgICAgICBpZiAoKGRpbShhKVsxXSAhPSAyTCkgfCAoZGltKGEpWzJdICE9IDJMKSkgewogICAgICAgICAgICBzdG9wKCJJbnB1dCBtYXRyaXggbXVzdCBiZSBhIDJ4MiB0YWJsZS4iKQogICAgICAgIH0KICAgICAgICAuYSA8LSBhWzEsIDFdCiAgICAgICAgLmIgPC0gYVsxLCAyXQogICAgICAgIC5jIDwtIGFbMiwgMV0KICAgICAgICAuZCA8LSBhWzIsIDJdCiAgICAgICAgLmRhdGEubmFtZSA8LSBkZXBhcnNlKHN1YnN0aXR1dGUoYSkpCiAgICB9CiAgICBlbHNlIHsKICAgICAgICAuYSA8LSBhCiAgICAgICAgLmIgPC0gYgogICAgICAgIC5jIDwtIGMKICAgICAgICAuZCA8LSBkCiAgICAgICAgLmRhdGEubmFtZSA8LSBwYXN0ZShkZXBhcnNlKHN1YnN0aXR1dGUoYSkpLCBkZXBhcnNlKHN1YnN0aXR1dGUoYikpLCAKICAgICAgICAgICAgZGVwYXJzZShzdWJzdGl0dXRlKGMpKSwgZGVwYXJzZShzdWJzdGl0dXRlKGQpKSkKICAgIH0KICAgIC5NQVQgPC0gbWF0cml4KGMoLmEsIC5iLCBNMSA8LSAuYSArIC5iLCAuYywgLmQsIE0wIDwtIC5jICsgCiAgICAgICAgLmQsIE4xIDwtIC5hICsgLmMsIE4wIDwtIC5iICsgLmQsIFRvdGFsIDwtIC5hICsgLmIgKyAKICAgICAgICAuYyArIC5kKSwgMywgMykKICAgIGNvbG5hbWVzKC5NQVQpIDwtIGMoIlNhbXBsZSIsICJHbm9tQUQiLCAiVG90YWwiKSAjKCJEaXNlYXNlIiwgIk5vbmRpc2Vhc2UiLCAiVG90YWwiKQogICAgcm93bmFtZXMoLk1BVCkgPC0gYygiTVMiLCAiTm8gTVMiLCAiVG90YWwiKSAjKCJFeHBvc2VkIiwgIk5vbmV4cG9zZWQiLCAiVG90YWwiKQogICAgY2xhc3MoLk1BVCkgPC0gInRhYmxlIgogICAgcHJpbnQoLk1BVCkKICAgIEVTVElNQVRFIDwtICguYSAvLmIpLyguYy8uZCkKICAgIG5vcm0ucHAgPC0gcW5vcm0oMSAtICgxIC0gY29uZi5sZXZlbCkvMikKICAgIGlmIChwLmNhbGMuYnkuaW5kZXBlbmRlbmNlKSB7CiAgICAgICAgcC52IDwtIDIgKiAoMSAtIHBub3JtKGFicygoLmEgLSBOMSAqIE0xL1RvdGFsKS9zcXJ0KE4xICogCiAgICAgICAgICAgIE4wICogTTEgKiBNMC9Ub3RhbC9Ub3RhbC8oVG90YWwgLSAxKSkpKSkKICAgIH0KICAgIGVsc2UgewogICAgICAgIHAudiA8LSAyICogKDEgLSBwbm9ybShsb2coaWZlbHNlKEVTVElNQVRFID4gMSwgRVNUSU1BVEUsIAogICAgICAgICAgICAxL0VTVElNQVRFKSkvc3FydCgxLy5hICsgMS8uYiArIDEvLmMgKyAxLy5kKSkpCiAgICB9CiAgICBPUkwgPC0gRVNUSU1BVEUgKiBleHAoLW5vcm0ucHAgKiBzcXJ0KDEvLmEgKyAxLy5iICsgMS8uYyArIAogICAgICAgIDEvLmQpKQogICAgT1JVIDwtIEVTVElNQVRFICogZXhwKG5vcm0ucHAgKiBzcXJ0KDEvLmEgKyAxLy5iICsgMS8uYyArIAogICAgICAgIDEvLmQpKSAlPiUgc2lnbmlmKGRpZ2l0cz03KQogICAgQ0lOVCA8LSBwYXN0ZShzaWduaWYoT1JMLGRpZ2l0cyA9IDcpLHNpZ25pZihPUlUsZGlnaXRzID0gNyksc2VwPSJ+IikKICAgIGF0dHIoQ0lOVCwgImNvbmYubGV2ZWwiKSA8LSBjb25mLmxldmVsCiAgICBSVkFMIDwtIGxpc3QocC52YWx1ZSA9IHAudiwgY29uZi5pbnQgPSBDSU5ULCBlc3RpbWF0ZSA9IEVTVElNQVRFLCAKICAgICAgICBtZXRob2QgPSAiT2RkcyByYXRpbyBlc3RpbWF0ZSBhbmQgaXRzIHNpZ25pZmljYW5jZSBwcm9iYWJpbGl0eSIsIAogICAgICAgIGRhdGEubmFtZSA9IC5kYXRhLm5hbWUpCiAgICBjbGFzcyhSVkFMKSA8LSAiaHRlc3QiCiAgICByZXR1cm4oUlZBTCkKfQoKT1JfTVBDLjIgPC0gb2Rkc3JhdGlvKE1QQy4yLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKT1JfTVBDLjJfTkZFIDwtIG9kZHNyYXRpbyhNUEMuMl9ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpPUl9NUEMyIDwtIG9kZHNyYXRpbyhNUEMyLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKT1JfTVBDMl9ORkUgPC0gb2Rkc3JhdGlvKE1QQzJfTkZFLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKT1JfTVBDMi41IDwtIG9kZHNyYXRpbyhNUEMyLjUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpPUl9NUEMyLjVfTkZFIDwtIG9kZHNyYXRpbyhNUEMyLjVfTkZFLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKT1JfTVBDMyA8LSBvZGRzcmF0aW8oTVBDMyxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX01QQzNfTkZFIDwtIG9kZHNyYXRpbyhNUEMzX05GRSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX0NBREQuMTUgPC0gb2Rkc3JhdGlvKENBREQuMTUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpPUl9DQURELjE1X05GRSA8LSBvZGRzcmF0aW8oQ0FERC4xNV9ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpPUl9DQUREMTUgPC0gb2Rkc3JhdGlvKENBREQxNSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX0NBREQxNV9ORkUgPC0gb2Rkc3JhdGlvKENBREQxNV9ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpPUl9DQUREMjAgPC0gb2Rkc3JhdGlvKENBREQyMCxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX0NBREQyMF9ORkUgPC0gb2Rkc3JhdGlvKENBREQyMF9ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpPUl9DQUREMjUgPC0gb2Rkc3JhdGlvKENBREQyNSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX0NBREQyNV9ORkUgPC0gb2Rkc3JhdGlvKENBREQyNV9ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpPUl9DQUREMzAgPC0gb2Rkc3JhdGlvKENBREQzMCxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX0NBREQzMF9ORkUgPC0gb2Rkc3JhdGlvKENBREQzMF9ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpPUl9SRVZFTC4wLjQ1IDwtIG9kZHNyYXRpbyhSRVZFTC4wLjQ1LHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKT1JfUkVWRUwuMC40NV9ORkUgPC0gb2Rkc3JhdGlvKFJFVkVMLjAuNDVfTkZFLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKT1JfUkVWRUwwLjQ1IDwtIG9kZHNyYXRpbyhSRVZFTDAuNDUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpPUl9SRVZFTDAuNDVfTkZFIDwtIG9kZHNyYXRpbyhSRVZFTDAuNDVfTkZFLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKT1JfUkVWRUwwLjUgPC0gb2Rkc3JhdGlvKFJFVkVMMC41LHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKT1JfUkVWRUwwLjVfTkZFIDwtIG9kZHNyYXRpbyhSRVZFTDAuNV9ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpPUl9SRVZFTDAuNTUgPC0gb2Rkc3JhdGlvKFJFVkVMMC41NSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX1JFVkVMMC41NV9ORkUgPC0gb2Rkc3JhdGlvKFJFVkVMMC41NV9ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpPUl9SRVZFTDAuNiA8LSBvZGRzcmF0aW8oUkVWRUwwLjYscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpPUl9SRVZFTDAuNl9ORkUgPC0gb2Rkc3JhdGlvKFJFVkVMMC42X05GRSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX1JFVkVMMC43IDwtIG9kZHNyYXRpbyhSRVZFTDAuNyxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX1JFVkVMMC43X05GRSA8LSBvZGRzcmF0aW8oUkVWRUwwLjdfTkZFLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKT1JfUkVWRUwwLjggPC0gb2Rkc3JhdGlvKFJFVkVMMC44LHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKT1JfUkVWRUwwLjhfTkZFIDwtIG9kZHNyYXRpbyhSRVZFTDAuOF9ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpPUl9DQUREMTVSRVZFTDAuNDUgPC0gb2Rkc3JhdGlvKENBREQxNVJFVkVMMC40NSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX0NBREQxNVJFVkVMMC40NV9ORkUgPC0gb2Rkc3JhdGlvKENBREQxNVJFVkVMMC40NV9ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpPUl9NUEMyQ0FERDE1UkVWRUwwLjQ1IDwtIG9kZHNyYXRpbyhNUEMyQ0FERDE1UkVWRUwwLjQ1LHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKT1JfTVBDMkNBREQxNVJFVkVMMC40NV9ORkUgPC0gb2Rkc3JhdGlvKE1QQzJDQUREMTVSRVZFTDAuNDVfTkZFLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKT1JfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44IDwtIG9kZHNyYXRpbyhNUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjgscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpPUl9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfTkZFIDwtIG9kZHNyYXRpbyhNUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfTkZFLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKYGBgCgpDb21iaW5lIGFsbCByZXN1bHRzIGludG8gb25lIHNwcmVhZHNoZWV0LCBhbmQgc2F2ZQpgYGB7cn0KYSA9IGMoT1JfTVBDLjIkZGF0YS5uYW1lLE9SX01QQy4yX05GRSRkYXRhLm5hbWUsT1JfTVBDMiRkYXRhLm5hbWUsT1JfTVBDMl9ORkUkZGF0YS5uYW1lLE9SX01QQzIuNSRkYXRhLm5hbWUsT1JfTVBDMi41X05GRSRkYXRhLm5hbWUsT1JfTVBDMyRkYXRhLm5hbWUsT1JfTVBDM19ORkUkZGF0YS5uYW1lLE9SX0NBREQuMTUkZGF0YS5uYW1lLE9SX0NBREQuMTVfTkZFJGRhdGEubmFtZSxPUl9DQUREMTUkZGF0YS5uYW1lLE9SX0NBREQxNV9ORkUkZGF0YS5uYW1lLE9SX0NBREQyMCRkYXRhLm5hbWUsT1JfQ0FERDIwX05GRSRkYXRhLm5hbWUsT1JfQ0FERDI1JGRhdGEubmFtZSxPUl9DQUREMjVfTkZFJGRhdGEubmFtZSxPUl9DQUREMzAkZGF0YS5uYW1lLE9SX0NBREQzMF9ORkUkZGF0YS5uYW1lLE9SX1JFVkVMLjAuNDUkZGF0YS5uYW1lLE9SX1JFVkVMLjAuNDVfTkZFJGRhdGEubmFtZSxPUl9SRVZFTDAuNDUkZGF0YS5uYW1lLE9SX1JFVkVMMC40NV9ORkUkZGF0YS5uYW1lLE9SX1JFVkVMMC41JGRhdGEubmFtZSxPUl9SRVZFTDAuNV9ORkUkZGF0YS5uYW1lLE9SX1JFVkVMMC41NSRkYXRhLm5hbWUsT1JfUkVWRUwwLjU1X05GRSRkYXRhLm5hbWUsT1JfUkVWRUwwLjYkZGF0YS5uYW1lLE9SX1JFVkVMMC42X05GRSRkYXRhLm5hbWUsT1JfUkVWRUwwLjckZGF0YS5uYW1lLE9SX1JFVkVMMC43X05GRSRkYXRhLm5hbWUsT1JfUkVWRUwwLjgkZGF0YS5uYW1lLE9SX1JFVkVMMC44X05GRSRkYXRhLm5hbWUsT1JfQ0FERDE1UkVWRUwwLjQ1JGRhdGEubmFtZSxPUl9DQUREMTVSRVZFTDAuNDVfTkZFJGRhdGEubmFtZSxPUl9NUEMyQ0FERDE1UkVWRUwwLjQ1JGRhdGEubmFtZSxPUl9NUEMyQ0FERDE1UkVWRUwwLjQ1X05GRSRkYXRhLm5hbWUsT1JfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44JGRhdGEubmFtZSxPUl9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfTkZFJGRhdGEubmFtZSkKYiA9IGMoT1JfTVBDLjIkZXN0aW1hdGUsT1JfTVBDLjJfTkZFJGVzdGltYXRlLE9SX01QQzIkZXN0aW1hdGUsT1JfTVBDMl9ORkUkZXN0aW1hdGUsT1JfTVBDMi41JGVzdGltYXRlLE9SX01QQzIuNV9ORkUkZXN0aW1hdGUsT1JfTVBDMyRlc3RpbWF0ZSxPUl9NUEMzX05GRSRlc3RpbWF0ZSxPUl9DQURELjE1JGVzdGltYXRlLE9SX0NBREQuMTVfTkZFJGVzdGltYXRlLE9SX0NBREQxNSRlc3RpbWF0ZSxPUl9DQUREMTVfTkZFJGVzdGltYXRlLE9SX0NBREQyMCRlc3RpbWF0ZSxPUl9DQUREMjBfTkZFJGVzdGltYXRlLE9SX0NBREQyNSRlc3RpbWF0ZSxPUl9DQUREMjVfTkZFJGVzdGltYXRlLE9SX0NBREQzMCRlc3RpbWF0ZSxPUl9DQUREMzBfTkZFJGVzdGltYXRlLE9SX1JFVkVMLjAuNDUkZXN0aW1hdGUsT1JfUkVWRUwuMC40NV9ORkUkZXN0aW1hdGUsT1JfUkVWRUwwLjQ1JGVzdGltYXRlLE9SX1JFVkVMMC40NV9ORkUkZXN0aW1hdGUsT1JfUkVWRUwwLjUkZXN0aW1hdGUsT1JfUkVWRUwwLjVfTkZFJGVzdGltYXRlLE9SX1JFVkVMMC41NSRlc3RpbWF0ZSxPUl9SRVZFTDAuNTVfTkZFJGVzdGltYXRlLE9SX1JFVkVMMC42JGVzdGltYXRlLE9SX1JFVkVMMC42X05GRSRlc3RpbWF0ZSxPUl9SRVZFTDAuNyRlc3RpbWF0ZSxPUl9SRVZFTDAuN19ORkUkZXN0aW1hdGUsT1JfUkVWRUwwLjgkZXN0aW1hdGUsT1JfUkVWRUwwLjhfTkZFJGVzdGltYXRlLE9SX0NBREQxNVJFVkVMMC40NSRlc3RpbWF0ZSxPUl9DQUREMTVSRVZFTDAuNDVfTkZFJGVzdGltYXRlLE9SX01QQzJDQUREMTVSRVZFTDAuNDUkZXN0aW1hdGUsT1JfTVBDMkNBREQxNVJFVkVMMC40NV9ORkUkZXN0aW1hdGUsT1JfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44JGVzdGltYXRlLE9SX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF9ORkUkZXN0aW1hdGUpCmMgPSBjKE9SX01QQy4yJGNvbmYuaW50LE9SX01QQy4yX05GRSRjb25mLmludCxPUl9NUEMyJGNvbmYuaW50LE9SX01QQzJfTkZFJGNvbmYuaW50LE9SX01QQzIuNSRjb25mLmludCxPUl9NUEMyLjVfTkZFJGNvbmYuaW50LE9SX01QQzMkY29uZi5pbnQsT1JfTVBDM19ORkUkY29uZi5pbnQsT1JfQ0FERC4xNSRjb25mLmludCxPUl9DQURELjE1X05GRSRjb25mLmludCxPUl9DQUREMTUkY29uZi5pbnQsT1JfQ0FERDE1X05GRSRjb25mLmludCxPUl9DQUREMjAkY29uZi5pbnQsT1JfQ0FERDIwX05GRSRjb25mLmludCxPUl9DQUREMjUkY29uZi5pbnQsT1JfQ0FERDI1X05GRSRjb25mLmludCxPUl9DQUREMzAkY29uZi5pbnQsT1JfQ0FERDMwX05GRSRjb25mLmludCxPUl9SRVZFTC4wLjQ1JGNvbmYuaW50LE9SX1JFVkVMLjAuNDVfTkZFJGNvbmYuaW50LE9SX1JFVkVMMC40NSRjb25mLmludCxPUl9SRVZFTDAuNDVfTkZFJGNvbmYuaW50LE9SX1JFVkVMMC41JGNvbmYuaW50LE9SX1JFVkVMMC41X05GRSRjb25mLmludCxPUl9SRVZFTDAuNTUkY29uZi5pbnQsT1JfUkVWRUwwLjU1X05GRSRjb25mLmludCxPUl9SRVZFTDAuNiRjb25mLmludCxPUl9SRVZFTDAuNl9ORkUkY29uZi5pbnQsT1JfUkVWRUwwLjckY29uZi5pbnQsT1JfUkVWRUwwLjdfTkZFJGNvbmYuaW50LE9SX1JFVkVMMC44JGNvbmYuaW50LE9SX1JFVkVMMC44X05GRSRjb25mLmludCxPUl9DQUREMTVSRVZFTDAuNDUkY29uZi5pbnQsT1JfQ0FERDE1UkVWRUwwLjQ1X05GRSRjb25mLmludCxPUl9NUEMyQ0FERDE1UkVWRUwwLjQ1JGNvbmYuaW50LE9SX01QQzJDQUREMTVSRVZFTDAuNDVfTkZFJGNvbmYuaW50LE9SX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOCRjb25mLmludCxPUl9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfTkZFJGNvbmYuaW50KQpkID0gYyhPUl9NUEMuMiRwLnZhbHVlLE9SX01QQy4yX05GRSRwLnZhbHVlLE9SX01QQzIkcC52YWx1ZSxPUl9NUEMyX05GRSRwLnZhbHVlLE9SX01QQzIuNSRwLnZhbHVlLE9SX01QQzIuNV9ORkUkcC52YWx1ZSxPUl9NUEMzJHAudmFsdWUsT1JfTVBDM19ORkUkcC52YWx1ZSxPUl9DQURELjE1JHAudmFsdWUsT1JfQ0FERC4xNV9ORkUkcC52YWx1ZSxPUl9DQUREMTUkcC52YWx1ZSxPUl9DQUREMTVfTkZFJHAudmFsdWUsT1JfQ0FERDIwJHAudmFsdWUsT1JfQ0FERDIwX05GRSRwLnZhbHVlLE9SX0NBREQyNSRwLnZhbHVlLE9SX0NBREQyNV9ORkUkcC52YWx1ZSxPUl9DQUREMzAkcC52YWx1ZSxPUl9DQUREMzBfTkZFJHAudmFsdWUsT1JfUkVWRUwuMC40NSRwLnZhbHVlLE9SX1JFVkVMLjAuNDVfTkZFJHAudmFsdWUsT1JfUkVWRUwwLjQ1JHAudmFsdWUsT1JfUkVWRUwwLjQ1X05GRSRwLnZhbHVlLE9SX1JFVkVMMC41JHAudmFsdWUsT1JfUkVWRUwwLjVfTkZFJHAudmFsdWUsT1JfUkVWRUwwLjU1JHAudmFsdWUsT1JfUkVWRUwwLjU1X05GRSRwLnZhbHVlLE9SX1JFVkVMMC42JHAudmFsdWUsT1JfUkVWRUwwLjZfTkZFJHAudmFsdWUsT1JfUkVWRUwwLjckcC52YWx1ZSxPUl9SRVZFTDAuN19ORkUkcC52YWx1ZSxPUl9SRVZFTDAuOCRwLnZhbHVlLE9SX1JFVkVMMC44X05GRSRwLnZhbHVlLE9SX0NBREQxNVJFVkVMMC40NSRwLnZhbHVlLE9SX0NBREQxNVJFVkVMMC40NV9ORkUkcC52YWx1ZSxPUl9NUEMyQ0FERDE1UkVWRUwwLjQ1JHAudmFsdWUsT1JfTVBDMkNBREQxNVJFVkVMMC40NV9ORkUkcC52YWx1ZSxPUl9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjgkcC52YWx1ZSxPUl9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfTkZFJHAudmFsdWUpCgpPUnNfbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX3NhbXBsZTAuMDEgPC0gdGliYmxlKAogICJGaWx0ZXJpbmciPWEsCiAgIk9kZHNfcmF0aW8iPWIsCiAgIjk1JV9DSSI9YywKICAicF92YWx1ZSI9ZAopCgp3cml0ZV90c3YoT1JzX21hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9zYW1wbGUwLjAxLCBwYXRoPSJPUnNfbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsXzAuMDAxX3NhbXBsZTAuMDFfSElHSEdlbmVzX3JhdGlvNm9ubHkudHN2IikKYGBgCgpDYWxjdWxhdGUgcmF0aW9zIGFuZCBGaXNoZXIncyB0ZXN0IHZhbHVlcyBmb3IgZ2VuZXMgY29udGFpbmluZyBlbnJpY2hlZCB2YXJpYW50cyB3aXRoIGNvcnJlc3BvbmRpbmcgcHJlZGljdGlvbiBzY29yZXMsIGFuZCBzYXZlIG91dHB1dApgYGB7cn0KbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNfcmF0aW9zIDwtIAogIG11dGF0ZShtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cywKICAgICAgICAgIlNhbXBsZV9HZW5lX0xPRl9GcmVxX1JhdGlvX0dub21BRF8wLjAwMSI9U2FtcGxlX0dlbmVfRnJlcS9GSUxURVJfUkZfTVNfQUZfMC4wMDFfUkVWRUwwLjdfQURKLAogICAgICAgICAiU2FtcGxlX0dlbmVfTE9GX0ZyZXFfUmF0aW9fR25vbUFEX05GRV8wLjAwMSI9U2FtcGxlX0dlbmVfRnJlcS9GSUxURVJfUkZfTVNfQUZfMC4wMDFfUkVWRUwwLjdfTkZFX0FESikKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN19zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzX3JhdGlvczIgPC0gbXV0YXRlKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN19zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzX3JhdGlvcywgIlNhbXBsZV9HZW5lX0xPRl9BRl9SYXRpbyI9U2FtcGxlX0FGL0dub21BRF92Mi4xX25vbl9jYW5jZXJfQUYsIAoiU2FtcGxlX0dlbmVfTE9GX0FGX1JhdGlvX05GRSI9U2FtcGxlX0FGL0dub21BRF92Mi4xX25vbl9jYW5jZXJfQUZfbmZlKQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNfcmF0aW9zX2Zpc2hlcnJlc3VsdHMgPC0gbXV0YXRlKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN19zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzX3JhdGlvczIsVG90YWxfQ2FzZV9BbGxlbGVzPVRvdGFsX1NhbXBsZV9BbGxlbGVzKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c19yYXRpb3NfZmlzaGVycmVzdWx0czIgPC0gbXV0YXRlKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN19zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzX3JhdGlvc19maXNoZXJyZXN1bHRzLCBNQVhfQU49cmVwbGFjZShtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c19yYXRpb3NfZmlzaGVycmVzdWx0cyRNQVhfQU4sIGlzLm5hKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN19zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzX3JhdGlvc19maXNoZXJyZXN1bHRzJE1BWF9BTiksIG1heChtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c19yYXRpb3NfZmlzaGVycmVzdWx0cyRNQVhfQU4sIG5hLnJtPVRSVUUpKSkgJT4lIAogIG11dGF0ZShNQVhfQU5fTkZFPXJlcGxhY2UoLiRNQVhfQU5fTkZFLCBpcy5uYSguJE1BWF9BTl9ORkUpLCBtYXgobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNfcmF0aW9zX2Zpc2hlcnJlc3VsdHMkTUFYX0FOX05GRSwgbmEucm09VFJVRSkpKQoKZmlzaGVycmVzdWx0c19FTlNUIDwtIGFwcGx5KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN19zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzX3JhdGlvc19maXNoZXJyZXN1bHRzMlssYygyMjEsMjMxLDI0MSwyMjMpXSwxLGZ1bmN0aW9uKHgpIHtmaXNoZXIudGVzdChyYmluZCh4WzE6Ml0sYyh4WzNdLXhbMV0seFs0XS14WzJdKSkpfSkKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN19zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzX3JhdGlvc19maXNoZXJyZXN1bHRzMiRQX3ZhbHVlX0Zpc2hlcl8wLjAwNSA9IHNhcHBseShmaXNoZXJyZXN1bHRzX0VOU1QsZnVuY3Rpb24oeCkgcm91bmQoeCRwLnZhbHVlLDEyKSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNfcmF0aW9zX2Zpc2hlcnJlc3VsdHMyJE9SXzAuMDA1ID0gc2FwcGx5KGZpc2hlcnJlc3VsdHNfRU5TVCxmdW5jdGlvbih4KSByb3VuZCh4JGVzdGltYXRlLDQpKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c19yYXRpb3NfZmlzaGVycmVzdWx0czIkYDk1JUNJXzAuMDA1YCA9IHNhcHBseShmaXNoZXJyZXN1bHRzX0VOU1QsZnVuY3Rpb24oeCkgcGFzdGUocm91bmQoeCRjb25mLmludFsxOjJdLDIpLGNvbGxhcHNlPSJ+IikpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN19zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzX3JhdGlvc19maXNoZXJyZXN1bHRzMiRCSF8wLjAwNSA9IHAuYWRqdXN0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN19zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzX3JhdGlvc19maXNoZXJyZXN1bHRzMiRQX3ZhbHVlX0Zpc2hlcl8wLjAwNSxtZXRob2QgPSAiQkgiKQoKZmlzaGVycmVzdWx0czJfRU5TVCA8LSBhcHBseShtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c19yYXRpb3NfZmlzaGVycmVzdWx0czJbLGMoMjIxLDIzNCwyNDEsMjI3KV0sMSxmdW5jdGlvbih4KSB7ZmlzaGVyLnRlc3QocmJpbmQoeFsxOjJdLGMoeFszXS14WzFdLHhbNF0teFsyXSkpKX0pCgptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c19yYXRpb3NfZmlzaGVycmVzdWx0czIkUF92YWx1ZV9GaXNoZXJfMC4wMDVfTkZFID0gc2FwcGx5KGZpc2hlcnJlc3VsdHMyX0VOU1QsZnVuY3Rpb24oeCkgcm91bmQoeCRwLnZhbHVlLDEyKSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNfcmF0aW9zX2Zpc2hlcnJlc3VsdHMyJE9SXzAuMDA1X05GRSA9IHNhcHBseShmaXNoZXJyZXN1bHRzMl9FTlNULGZ1bmN0aW9uKHgpIHJvdW5kKHgkZXN0aW1hdGUsNCkpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN19zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzX3JhdGlvc19maXNoZXJyZXN1bHRzMiRgOTUlQ0lfMC4wMDVfTkZFYCA9IHNhcHBseShmaXNoZXJyZXN1bHRzMl9FTlNULGZ1bmN0aW9uKHgpIHBhc3RlKHJvdW5kKHgkY29uZi5pbnRbMToyXSwyKSxjb2xsYXBzZT0ifiIpKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c19yYXRpb3NfZmlzaGVycmVzdWx0czIkQkhfMC4wMDVfTkZFID0gcC5hZGp1c3QobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNfcmF0aW9zX2Zpc2hlcnJlc3VsdHMyJFBfdmFsdWVfRmlzaGVyXzAuMDA1X05GRSxtZXRob2QgPSAiQkgiKQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNfcmF0aW9zX2Zpc2hlcnJlc3VsdHMzIDwtIG11dGF0ZShtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c19yYXRpb3NfZmlzaGVycmVzdWx0czIsIEZpbHRlcmluZ0FGXzk1X0V4Y2VlZHNfTWF4Q3JlZFBvcEFGPSgoR25vbUFEX3YyLjFfbm9uX2NhbmNlcl9GaWx0ZXJpbmdfQUZfOTUpPjAuMDAwMTgxKSkgJT4lIAogIG11dGF0ZShGaWx0ZXJpbmdBRl85NV9ORkVfRXhjZWVkc19NYXhDcmVkUG9wQUY9KChHbm9tQURfdjIuMV9ub25fY2FuY2VyX0ZpbHRlcmluZ19BRl85NV9uZmUpPjAuMDAwMTgxKSkKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN19zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzX3JhdGlvc19maXNoZXJyZXN1bHRzMyAlPiUgCiAgd3JpdGVfZXhjZWxfY3N2KHBhdGg9Im1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF8wLjAwMV9SRVZFTDAuN19zYW1wbGUwLjAxX0hJR0hnZW5lc19yYXRpbzYuY3N2IixuYT0iLiIsYXBwZW5kPUZBTFNFLGNvbF9uYW1lcz1UUlVFKQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNfcmF0aW9zX2Zpc2hlcnJlc3VsdHMzICU+JSAKICBmaWx0ZXIoRmVhdHVyZSVpbiUoSElHSGdlbmVzX2NhbmRpZGF0ZXNfbGlzdCkpICU+JSAKICB3cml0ZV9leGNlbF9jc3YocGF0aD0ibWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsXzAuMDAxX1JFVkVMMC43X3NhbXBsZTAuMDFfSElHSGdlbmVzX2NhbmRpZGF0ZXNfcmF0aW82LmNzdiIsbmE9Ii4iLGFwcGVuZD1GQUxTRSxjb2xfbmFtZXM9VFJVRSkKYGBgCg==