Setup

library(ithi.utils)
load_base_libs()

library(methods)
library(bedr)
library(biomaRt)
library(BSgenome.Hsapiens.UCSC.hg19)
library(gdata)

library(ithi.meta)
library(ithi.figures)
library(ithi.utils)
library(ithi.expr)
library(ithi.seq)
library(ithi.bed)
library(ithi.clones)
library(ithi.supp)
nanostring_data_path <- snakemake@input$nanostring_data
nanostring_annotations_path <- snakemake@input$nanostring_annotations
ihc_table_path <- snakemake@input$ihc_table
master_variant_file <- snakemake@input$snv_table
master_breakpoint_file <- snakemake@input$breakpoint_table
somatic_coding_result_dir <- snakemake@input$somatic_coding_result_dir
neoediting_outdir <- snakemake@input$neoediting_outdir
snv_cluster_files <- snakemake@input$snv_cluster_files
clone_tree_file <- snakemake@input$clone_tree_file
clone_branch_length_file <- snakemake@input$clone_branch_length_file
clone_prevalence_file <- snakemake@input$clone_prevalence_file

rooney_full_mutsigcv_list_file <- snakemake@params$rooney_mutsigcv_file
refseq_gene_file <- snakemake@params$refseq_gene_file
db_path <- snakemake@params$db

all_tiltypes <- snakemake@params$all_tiltypes
annotation_colours <- ithi.figures::get_annotation_colours()
ihc_table <- fread(ihc_table_path)

mart <- useDataset("hsapiens_gene_ensembl", useMart(biomart = "ENSEMBL_MART_ENSEMBL", 
    host = "feb2014.archive.ensembl.org"))

titan_file <- file.path(somatic_coding_result_dir, "somatic_cnv_titan.tsv")
somatic_snv_file <- file.path(somatic_coding_result_dir, "somatic_snvs.tsv")
somatic_indel_file <- file.path(somatic_coding_result_dir, "somatic_indels.tsv")
titan_cnv <- fread(titan_file)
somatic_snvs <- fread(somatic_snv_file)
somatic_indels <- fread(somatic_indel_file)

master_variant_table <- read_variant_file(master_variant_file, db_path)

Read 0.0% of 682516 rows
Read 682516 rows and 9 (of 9) columns from 0.026 GB file in 00:00:04
master_breakpoint_table <- read_variant_file(master_breakpoint_file, db_path)

exprs <- fread(nanostring_data_path)
nanostring_labels <- fread(nanostring_annotations_path)

tree_branch_data <- read_clone_tree_data(clone_tree_file, clone_branch_length_file, 
    clone_prevalence_file, db_path)

Rooney comparison

In this document, we’ll compare to both the Rooney variant-immune association findings and the neoepitope elimination findings.

Analysis

First, we’ll see whether or not particular mutations (the same set as Rooney) are associated with immune activity (cytotoxicity gene signature or IHC variables) in our cohort.

somatic_snvs_filtered <- plyr::join(somatic_snvs, master_variant_table %>% subset(is_present == 
    1), type = "inner")
somatic_indels_filtered <- subset(somatic_indels, mappability == 1)

titan_bed <- convert_to_bed(titan_cnv)
refseq_bed <- read_bed(refseq_gene_file)

gene_names <- getBM(attributes = c("refseq_mrna", "hgnc_symbol"), values = refseq_bed$refseq_id, 
    mart = mart)

refseq_bed_annotated <- merge(refseq_bed, gene_names %>% subset(refseq_mrna != 
    "") %>% plyr::rename(c(refseq_mrna = "refseq_id")), by = c("refseq_id"))

refseq_bed_annotated <- subset(refseq_bed_annotated, select = c("chr", "start", 
    "end", "hgnc_symbol", "refseq_id"))
refseq_bed_annotated <- bedr.sort.region(refseq_bed_annotated)

titan_merged <- bedr(engine = "bedtools", input = list(a = titan_bed, b = refseq_bed_annotated), 
    method = "intersect", params = "-loj")
titan_merged <- data.frame(titan_merged)
titan_merged$median_logR <- as.numeric(titan_merged$median_logR)
titan_merged$total <- as.numeric(titan_merged$total)
titan_merged$major <- as.numeric(titan_merged$major)
titan_merged$minor <- as.numeric(titan_merged$minor)
rooney_cytolytic_pancancer_association_genes <- c("CASP8", "B2M", "PIK3CA", 
    "SMC1A", "TET2", "ARID5B", "ALPK2", "LPAR2", "COL5A1", "TP53", "NCOR1", 
    "SSX5", "DNER", "MORC4", "IRF6", "MYOCD", "CIC", "SLC22A14", "CNKSR1", "NF1", 
    "SOS1", "CUL4B", "DDX3X", "FUBP1", "HLA-A", "HLA-B", "HLA-C", "ARID2", "TCP11L2", 
    "MET", "CSNK2A1", "ASXL1", "TMEM88", "DNMT3A", "EP300", "MUC17", "OVOL1")

rooney_mutsigcv_table <- read.xls(rooney_full_mutsigcv_list_file, sheet = 1, 
    header = FALSE, stringsAsFactors = FALSE)
rooney_mutsigcv_genes <- sapply(strsplit(rooney_mutsigcv_table$V1, ":"), function(x) x[1])
rooney_mutsigcv_genes <- rooney_mutsigcv_genes[rooney_mutsigcv_genes != "HLA-A,B,C"]
rooney_mutsigcv_genes <- c(rooney_mutsigcv_genes, c("HLA-A", "HLA-B", "HLA-C"))

Linear modeling for mutations

Check whether this is done only for point mutations or indels too.

They only do it for point mutations; I think this makes sense because of the low indel count. Let’s do it similarly, then.

somatic_snvs_rooney <- subset(somatic_snvs_filtered, gene_name %in% rooney_mutsigcv_genes)
somatic_indels_rooney <- subset(somatic_indels_filtered, gene_name %in% rooney_mutsigcv_genes)
titan_merged_rooney <- subset(titan_merged, hgnc_symbol %in% rooney_mutsigcv_genes)
perc.rank <- function(x) trunc(rank(x))/length(x)

compute_num_transition_events <- function(titan_merged) {
    titan_merged_unique <- subset(titan_merged, select = c(chr, start, end, 
        patient_id, condensed_id, median_logR, major, minor, total)) %>% unique
    titan_merged_unique_ordered <- titan_merged_unique[with(titan_merged_unique, 
        order(condensed_id, chr, start, end)), ]
    
    dfs <- split(titan_merged_unique_ordered, f = titan_merged_unique_ordered$condensed_id)
    event_counts <- lapply(dfs, function(x) {
        counter <- 0
        prev_chrom <- "chr0"
        prev_cn_sign <- 1
        for (i in 1:nrow(x)) {
            row <- x[i, ]
            if ((row$chr == prev_chrom) & (sign(row$total - 2) != prev_cn_sign)) {
                counter <- counter + 1
            }
            prev_chrom <- row$chr
            prev_logR_sgn <- sign(row$total)
        }
        return(counter)
    })
    
    event_df <- data.frame(event_counts, check.names = FALSE) %>% t %>% as.data.frame
    colnames(event_df) <- "chr_events"
    event_df <- event_df %>% rownames_to_column(var = "condensed_id")
    return(event_df)
}


transition_events <- compute_num_transition_events(titan_merged)

cyt_expr <- subset(exprs, Name %in% c("GZMA", "PRF1"), select = -c(Code.Class, 
    Accession))
cyt_expr_combined <- cyt_expr %>% as.data.frame %>% column_to_rownames(var = "Name") %>% 
    t %>% as.data.frame
cyt_expr_combined$CYT <- with(cyt_expr_combined, ithi.utils::p.geomean(GZMA, 
    PRF1))
cyt_expr_combined <- subset(cyt_expr_combined, select = -c(GZMA, PRF1))
cyt_expr_df <- cyt_expr_combined %>% rownames_to_column(var = "condensed_id")
cyt_expr_df$condensed_id <- cyt_expr_df$condensed_id %>% ithi.meta::map_id(from = "voa", 
    to = "condensed_id", db_path)

linear_model_til_variant <- function(selected_variants, all_variants, ihc_table, 
    cyt_expr_df, rank_transform = TRUE, control_patient = TRUE, immune_variable = "CYT", 
    variant_type = "snv", cn_type = "amp", transition_events = NULL) {
    if (variant_type == "snv") {
        background_variant_rate <- all_variants %>% group_by(condensed_id) %>% 
            summarise(nvariant = n())
    } else if (variant_type == "cnv") {
        all_variants_filtered <- subset(all_variants, total != 2)
        all_variants_filtered_unique <- subset(all_variants_filtered, select = c(chr, 
            start, end, patient_id, condensed_id, median_logR, major, minor, 
            total)) %>% unique
        all_variants_filtered_unique$event_type <- sign(all_variants_filtered_unique$total - 
            2)
        background_variant_rate <- all_variants_filtered_unique %>% group_by(condensed_id, 
            event_type) %>% summarise(nvariant = n())
        
        background_variant_rate_expanded <- dcast(background_variant_rate, formula = condensed_id ~ 
            event_type, value.var = "nvariant") %>% plyr::rename(c(`-1` = "ndel", 
            `1` = "namp"))
        
        background_variant_rate <- merge(background_variant_rate_expanded, transition_events, 
            all = TRUE)
        ## Transition events is the number of chromosomal transitions between +/-
        ## logR's, as per Rooney.
    }
    
    ihc_table_subset <- subset(ihc_table, condensed_id %in% background_variant_rate$condensed_id, 
        select = c("condensed_id", all_tiltypes))
    
    other_tables <- Reduce(function(x, y) merge(x, y, all = TRUE), list(background_variant_rate, 
        ihc_table_subset, cyt_expr_df))
    other_tables <- subset(other_tables, !str_detect(condensed_id, "^SP"))
    other_tables$patient_id <- ithi.meta::map_id(other_tables$condensed_id, 
        from = "condensed_id", to = "patient_id", db_path)
    
    selected_variants$condensed_id <- ithi.meta::factor_id(selected_variants$condensed_id, 
        type = "condensed_id", db_path)
    if (variant_type == "cnv") {
        if (cn_type == "amp") {
            selected_variants <- subset(selected_variants, total > 2)
        } else if (cn_type == "del") {
            selected_variants <- subset(selected_variants, total < 2)
        }
        selected_variants$gene_name <- selected_variants$hgnc_symbol
        
        selected_variants <- subset(selected_variants, select = c(chr, start, 
            end, patient_id, condensed_id, median_logR, major, minor, total, 
            gene_name)) %>% unique
        
        selected_variants <- selected_variants %>% group_by(gene_name, condensed_id, 
            patient_id) %>% summarise(median_logR = max(abs(median_logR)) * 
            sign(median_logR[which.max(abs(median_logR))]))
        
        foreground_table <- as.data.frame.matrix(xtabs(median_logR ~ condensed_id + 
            gene_name, data = selected_variants))
    } else {
        foreground_table <- as.data.frame.matrix(xtabs(~condensed_id + gene_name, 
            data = selected_variants))
    }
    
    gene_names <- colnames(foreground_table)
    
    test_results <- rbind.fill(lapply(gene_names, function(gene) {
        # print(gene)
        x <- foreground_table[, gene, drop = FALSE] %>% tibble::rownames_to_column(var = "condensed_id")
        x <- merge(other_tables, x, all = TRUE)
        x[, gene][is.na(x[, gene]) & (x$condensed_id %in% background_variant_rate$condensed_id)] <- 0
        
        if (variant_type == "cnv") {
            if (cn_type == "amp") {
                x[, gene][!is.na(x[, gene]) & (x[, gene] < 0)] <- 0
            } else if (cn_type == "del") {
                x[, gene][!is.na(x[, gene]) & (x[, gene] > 0)] <- 0
                x[, gene] <- -1 * x[, gene]
            }
        }
        
        
        if (rank_transform) {
            if (variant_type == "snv") {
                x[, "nvariant"] <- perc.rank(x[, "nvariant"])
            } else if (variant_type == "cnv") {
                x[, "chr_events"] <- perc.rank(x[, "chr_events"])
                x[, "namp"] <- perc.rank(x[, "namp"])
                x[, "ndel"] <- perc.rank(x[, "ndel"])
            }
            x[, immune_variable] <- perc.rank(x[, immune_variable])
        }
        
        if (str_detect(gene, "\\-")) {
            gene_name_mod <- paste0("`", gene, "`")
        } else {
            gene_name_mod <- gene
        }
        
        if (variant_type == "snv") {
            if (control_patient) {
                mod <- lmer(as.formula(paste0(immune_variable, "~", gene_name_mod, 
                  "+", "nvariant", "+", "(1|patient_id)")), data = x[!is.na(x[, 
                  gene]), ])
            } else {
                mod <- lm(as.formula(paste0(immune_variable, "~", gene_name_mod, 
                  "+", "nvariant")), data = x[!is.na(x[, gene]), ])
            }
        } else if (variant_type == "cnv") {
            if (control_patient) {
                mod <- lmer(as.formula(paste0(immune_variable, "~", gene_name_mod, 
                  "+", "namp+ndel+chr_events", "+", "(1|patient_id)")), data = x[!is.na(x[, 
                  gene]), ])
            } else {
                mod <- lm(as.formula(paste0(immune_variable, "~", gene_name_mod, 
                  "+", "namp+ndel+chr_events")), data = x[!is.na(x[, gene]), 
                  ])
            }
        }
        pval <- unname(summary(mod)$coefficients[, 5][gene_name_mod])
        coeff <- unname(summary(mod)$coefficients[, 1][gene_name_mod])
        
        return(data.frame(gene = gene, immune_variable = immune_variable, p.value = pval, 
            coef = coeff, n = nrow(x[!is.na(x[, gene]), ])))
    }))
    
    test_results$p.adj <- p.adjust(test_results$p.value, method = "BH")
    return(test_results)
}
snv_cyt_patient_rank <- linear_model_til_variant(somatic_snvs_rooney, somatic_snvs_filtered, 
    ihc_table, cyt_expr_df, rank_transform = TRUE, control_patient = TRUE, immune_variable = "CYT", 
    variant_type = "snv")
snv_ecd8_patient_rank <- linear_model_til_variant(somatic_snvs_rooney, somatic_snvs_filtered, 
    ihc_table, cyt_expr_df, rank_transform = TRUE, control_patient = TRUE, immune_variable = "E_CD8_density", 
    variant_type = "snv")
print(snv_cyt_patient_rank)
        gene immune_variable    p.value         coef  n     p.adj
1       ANK3             CYT 0.25854215  0.240153334 66 0.8338131
2        APC             CYT 0.47917542 -0.068488526 66 0.9342232
3   ARHGAP35             CYT 0.02600806 -0.326131817 66 0.2860886
4      AXIN2             CYT 0.57064596  0.042833163 66 0.9342232
5      BRCA2             CYT 0.75599939  0.107637049 66 0.9342232
6      CCDC6             CYT 0.80265166 -0.037541699 66 0.9459823
7    CD300LG             CYT 0.47390514 -0.245355174 66 0.9342232
8     COL5A1             CYT 0.57064596  0.042833163 66 0.9342232
9     CYP7B1             CYT 0.73290290  0.057842676 66 0.9342232
10    DNAH12             CYT 0.55431705 -0.127321847 66 0.9342232
11     ERCC2             CYT 0.02600806 -0.326131817 66 0.2860886
12      FAT1             CYT 0.75599939  0.107637049 66 0.9342232
13       FLG             CYT 0.69660040 -0.034815283 66 0.9342232
14      GZMA             CYT 0.75599939  0.107637049 66 0.9342232
15      IRF4             CYT 0.15324640  0.239887097 66 0.6321414
16     ITPKB             CYT 0.99053177 -0.001940611 66 0.9905318
17       MPO             CYT 0.13520502 -0.273831365 66 0.6321414
18      MYCN             CYT 0.93320742  0.029185253 66 0.9905318
19   NUP210L             CYT 0.53146580  0.115532561 66 0.9342232
20     PLCG2             CYT 0.58438080 -0.194001758 66 0.9342232
21      POLE             CYT 0.27793771 -0.183311630 66 0.8338131
22      SELP             CYT 0.14233519  0.218947279 66 0.6321414
23 SERPINB13             CYT 0.02600806 -0.326131817 66 0.2860886
24   SLC17A8             CYT 0.98952671 -0.002216283 66 0.9905318
25     SMAP1             CYT 0.25854215  0.240153334 66 0.8338131
26      SOS1             CYT 0.71951600 -0.066630679 66 0.9342232
27      TET2             CYT 0.99053177 -0.001940611 66 0.9905318
28      TP53             CYT 0.03910878  0.481741461 66 0.3226475
29      TSC1             CYT 0.85245667 -0.033847667 66 0.9700369
30      USO1             CYT 0.76436440  0.054579164 66 0.9342232
31     XIRP2             CYT 0.31089339 -0.343493160 66 0.8549568
32     ZFHX3             CYT 0.08451637  0.250288735 66 0.5578080
33    ZNF180             CYT 0.68610433  0.033092946 66 0.9342232
print(snv_ecd8_patient_rank)
        gene immune_variable     p.value         coef  n      p.adj
1       ANK3   E_CD8_density 0.266056723  0.196115914 66 0.89830494
2        APC   E_CD8_density 0.744104867 -0.026429982 66 0.94812867
3   ARHGAP35   E_CD8_density 0.434679773 -0.095919150 66 0.89830494
4      AXIN2   E_CD8_density 0.789597469 -0.017051081 66 0.94812867
5      BRCA2   E_CD8_density 0.544427234  0.131510389 66 0.89830494
6      CCDC6   E_CD8_density 0.460431775 -0.092882173 66 0.89830494
7    CD300LG   E_CD8_density 0.435632825 -0.168878952 66 0.89830494
8     COL5A1   E_CD8_density 0.789597469 -0.017051081 66 0.94812867
9     CYP7B1   E_CD8_density 0.627111238 -0.065550545 66 0.94066686
10    DNAH12   E_CD8_density 0.495899491  0.120206533 66 0.89830494
11     ERCC2   E_CD8_density 0.434679773 -0.095919150 66 0.89830494
12      FAT1   E_CD8_density 0.544427234  0.131510389 66 0.89830494
13       FLG   E_CD8_density 0.678594174 -0.030547819 66 0.94812867
14      GZMA   E_CD8_density 0.544427234  0.131510389 66 0.89830494
15      IRF4   E_CD8_density 0.889493148 -0.018812144 66 0.96445935
16     ITPKB   E_CD8_density 0.306757003  0.137202574 66 0.89830494
17       MPO   E_CD8_density 0.896988369  0.020365897 66 0.96445935
18      MYCN   E_CD8_density 0.966752914 -0.009142713 66 0.96675291
19   NUP210L   E_CD8_density 0.001222884 -0.481123354 66 0.04035516
20     PLCG2   E_CD8_density 0.504415205 -0.153067844 66 0.89830494
21      POLE   E_CD8_density 0.698144426 -0.052599377 66 0.94812867
22      SELP   E_CD8_density 0.372913527 -0.111658913 66 0.89830494
23 SERPINB13   E_CD8_density 0.434679773 -0.095919150 66 0.89830494
24   SLC17A8   E_CD8_density 0.247814402 -0.161164987 66 0.89830494
25     SMAP1   E_CD8_density 0.266056723  0.196115914 66 0.89830494
26      SOS1   E_CD8_density 0.338479026  0.150087372 66 0.89830494
27      TET2   E_CD8_density 0.306757003  0.137202574 66 0.89830494
28      TP53   E_CD8_density 0.582883694  0.087776273 66 0.91596009
29      TSC1   E_CD8_density 0.906007269 -0.018264872 66 0.96445935
30      USO1   E_CD8_density 0.936884538 -0.012250237 66 0.96616218
31     XIRP2   E_CD8_density 0.195208549 -0.272017121 66 0.89830494
32     ZFHX3   E_CD8_density 0.022448147  0.272732111 66 0.37039442
33    ZNF180   E_CD8_density 0.804472808 -0.016967522 66 0.94812867

Using the same regression approach as Rooney, none of the SNVs are significantly correlated with the status of any of these point mutations. Note that TP53, which was reported to be significant by them, has a significant uncorrected p-value, but not after BH adjustment.

Linear modeling for copy number

cnvamp_cyt_patient_rank <- linear_model_til_variant(titan_merged_rooney, titan_merged, 
    ihc_table, cyt_expr_df, rank_transform = TRUE, control_patient = TRUE, immune_variable = "CYT", 
    variant_type = "cnv", cn_type = "amp", transition_events)
cnvdel_cyt_patient_rank <- linear_model_til_variant(titan_merged_rooney, titan_merged, 
    ihc_table, cyt_expr_df, rank_transform = TRUE, control_patient = TRUE, immune_variable = "CYT", 
    variant_type = "cnv", cn_type = "del", transition_events)
print(cnvamp_cyt_patient_rank)
            gene immune_variable     p.value          coef  n     p.adj
1           ACO1             CYT 0.315367454  0.1723804964 66 0.7992756
2         ACVR1B             CYT 0.833045016  0.0416486987 66 0.9845359
3         ACVR2B             CYT 0.861388671  0.0422001361 66 0.9860212
4           ADNP             CYT 0.132647977 -0.2069951704 66 0.7464542
5          AGBL5             CYT 0.435932526 -0.1138656481 66 0.8513337
6          AJUBA             CYT 0.837671410  0.0248187346 66 0.9845359
7           AKT1             CYT 0.514234035  0.1651238030 66 0.8578466
8            ALB             CYT 0.443381875 -0.2059351969 66 0.8513337
9            ALK             CYT 0.333920187 -0.1425551069 66 0.8162483
10        ALKBH6             CYT 0.018612720 -0.1557109991 66 0.6593230
11         ALPK2             CYT 0.680953901 -0.1769513651 66 0.9564089
12          ANK3             CYT 0.479815169  0.1873756991 66 0.8513337
13           APC             CYT 0.227994261 -0.7497631243 66 0.7533660
14         APOL2             CYT 0.754200268  0.0822014380 66 0.9619797
15      ARHGAP35             CYT 0.900015968  0.0446417027 66 0.9876376
16        ARID1A             CYT 0.549521193 -0.5510204774 66 0.8754804
17         ARID2             CYT 0.842535991  0.0219635875 66 0.9860212
18        ARID5B             CYT 0.508156007  0.1788050827 66 0.8578466
19         ARL15             CYT 0.737187842  0.0830858572 66 0.9619797
20          ARL2             CYT 0.522030277 -0.1479350941 66 0.8622150
21       ARL6IP1             CYT 0.279745416 -0.3446144002 66 0.7730370
22        ARMCX1             CYT 0.110442766 -0.4253497346 66 0.6908155
23         ASXL1             CYT 0.017224099 -0.2980920118 66 0.6593230
24         ASXL2             CYT 0.385616201 -0.1248442823 66 0.8374803
25           ATM             CYT 0.461277193 -0.1062600302 66 0.8513337
26        ATP1B4             CYT 0.726840499 -0.0597037678 66 0.9619797
27         ATP5B             CYT 0.644754543 -0.0937366426 66 0.9361273
28          ATRX             CYT 0.987715180 -0.0070191765 66 0.9991821
29         AXIN2             CYT 0.513097333  0.1778664862 66 0.8578466
30         AZGP1             CYT 0.411635666  0.1498416484 66 0.8513337
31           B2M             CYT 0.897337891 -0.0377209607 66 0.9876376
32          BAP1             CYT 0.945269943 -0.0329427076 66 0.9925265
33        BCLAF1             CYT 0.474650167  0.4806771755 66 0.8513337
34          BCOR             CYT 0.622922794  0.3271541988 66 0.9318101
35         BHMT2             CYT 0.076953362 -0.7742051168 66 0.6593230
36       BLOC1S3             CYT 0.616798891 -0.0790562176 66 0.9298897
37          BRAF             CYT 0.789809189 -0.0385218073 66 0.9779504
38         BRCA1             CYT 0.725293239  0.0995158193 66 0.9619797
39         BRCA2             CYT 0.110139988 -0.5228948835 66 0.6908155
40           BRE             CYT 0.328105013 -0.1388715023 66 0.8162483
41      C12orf39             CYT 0.134031831 -0.2283200510 66 0.7464542
42      C12orf57             CYT 0.185308589 -0.1455091930 66 0.7533660
43      C19orf33             CYT 0.232155580 -0.1060974416 66 0.7533660
44         C1QL2             CYT 0.223588882 -0.3963219058 66 0.7533660
45       C3orf62             CYT 0.687074157  0.2136193353 66 0.9566186
46       C3orf70             CYT 0.141358333 -0.1218289813 66 0.7533660
47          CAP2             CYT 0.246129846 -0.1681102595 66 0.7533660
48        CARD11             CYT 0.474461585  0.2005207642 66 0.8513337
49         CASP8             CYT 0.068246835 -0.3891903904 66 0.6593230
50          CBFB             CYT 0.734287546  0.1385907160 66 0.9619797
51        CC2D1B             CYT 0.846809951 -0.0578846258 66 0.9860212
52       CCDC101             CYT 0.642691791 -0.1138744444 66 0.9361273
53       CCDC120             CYT 0.307759417  0.3602042522 66 0.7992756
54        CCDC36             CYT 0.496641474 -0.1662654774 66 0.8561153
55         CCDC6             CYT 0.466593632  0.2115260067 66 0.8513337
56         CCND1             CYT 0.684281494 -0.0521356392 66 0.9564089
57          CD1D             CYT 0.173004675 -0.2220401850 66 0.7533660
58       CD300LG             CYT 0.568856694  0.1606613345 66 0.8876126
59          CD38             CYT 0.073700690 -0.6434904843 66 0.6593230
60          CD5L             CYT 0.173004675 -0.2220401850 66 0.7533660
61          CD70             CYT 0.239311380  0.4834226665 66 0.7533660
62         CD79B             CYT 0.371800811  0.2343211794 66 0.8374803
63         CDC27             CYT 0.492610988  0.1549272320 66 0.8561153
64          CDH1             CYT 0.734287546  0.1385907160 66 0.9619797
65         CDK12             CYT 0.376122235 -0.2921784942 66 0.8374803
66          CDK4             CYT 0.809312665  0.0443568374 66 0.9784506
67        CDKN1A             CYT 0.100886756 -0.2063373144 66 0.6908155
68        CDKN1B             CYT 0.043449806 -0.3172314490 66 0.6593230
69        CDKN2A             CYT 0.806908894  0.0559188504 66 0.9784506
70          CDX1             CYT 0.346942963  0.3039797041 66 0.8257971
71         CEBPA             CYT 0.024853263 -0.1397488000 66 0.6593230
72         CEP76             CYT 0.922871064  0.0142384263 66 0.9876376
73          CHD4             CYT 0.110683153 -0.1850221152 66 0.6908155
74          CHD8             CYT 0.754702291  0.0383482559 66 0.9619797
75           CIC             CYT 0.398831752 -0.1575221640 66 0.8489077
76        CLEC4E             CYT 0.031851213 -0.2469836624 66 0.6593230
77         CNBD1             CYT 0.619070187 -0.0485600985 66 0.9298897
78        CNKSR1             CYT 0.665527404 -0.3683005391 66 0.9484739
79        COL5A1             CYT 0.791545455  0.0586726771 66 0.9779504
80        COL5A3             CYT 0.050536432 -0.1276926786 66 0.6593230
81          CPS1             CYT 0.058687371 -0.4110879170 66 0.6593230
82        CREBBP             CYT 0.216789479 -0.2997710468 66 0.7533660
83         CSAG1             CYT 0.175870249  0.2001330420 66 0.7533660
84       CSNK2A1             CYT 0.712187276 -0.0400524844 66 0.9619797
85          CTCF             CYT 0.734287546  0.1385907160 66 0.9619797
86        CTNNB1             CYT 0.749620465  0.1477302608 66 0.9619797
87         CUL4B             CYT 0.562833313 -0.0958351414 66 0.8820158
88          CUX1             CYT 0.593622307 -0.0910542026 66 0.9128389
89         CXCL9             CYT 0.385215708 -0.2212720899 66 0.8374803
90        CYP7B1             CYT 0.224414154 -0.1199988233 66 0.7533660
91         DDX3X             CYT 0.973732767 -0.0186938282 66 0.9991821
92          DDX5             CYT 0.468159448  0.1992093526 66 0.8513337
93          DHDH             CYT 0.963068030  0.0267443861 66 0.9989416
94        DIAPH1             CYT 0.639376441  0.1249103226 66 0.9361273
95          DIS3             CYT 0.057057344 -0.4131613342 66 0.6593230
96        DNAH12             CYT 0.874276313  0.0778984389 66 0.9876376
97          DNER             CYT 0.279438659 -0.2638682315 66 0.7730370
98        DNMT3A             CYT 0.385616201 -0.1248442823 66 0.8374803
99          DPRX             CYT 0.858388929  0.0962125328 66 0.9860212
100       DUSP19             CYT 0.134030025 -0.3653515521 66 0.7464542
101         EAF1             CYT 0.642009731 -0.1464042245 66 0.9361273
102       EEF1A1             CYT 0.233680747  0.3677223461 66 0.7533660
103         EGFR             CYT 0.871414197 -0.0353306073 66 0.9876376
104       EIF1AX             CYT 0.472920530 -0.2437729136 66 0.8513337
105       EIF2S2             CYT 0.046656444 -0.2274077888 66 0.6593230
106         ELF3             CYT 0.042272733 -0.4162445628 66 0.6593230
107        ELTD1             CYT 0.269636614 -0.4324889675 66 0.7625660
108        EP300             CYT 0.853498427 -0.0906221673 66 0.9860212
109      EPB41L3             CYT 0.940891992 -0.0086784747 66 0.9925265
110        EPHA2             CYT 0.058483524 -0.5775123093 66 0.6593230
111         EPS8             CYT 0.090299692 -0.2429152295 66 0.6637271
112        ERBB2             CYT 0.919036242  0.0054033647 66 0.9876376
113        ERBB3             CYT 0.648594170 -0.0922996636 66 0.9361273
114        ERCC2             CYT 0.958277914  0.0055461301 66 0.9968293
115        ETHE1             CYT 0.247653459 -0.0921611059 66 0.7533660
116         EZH1             CYT 0.648204837 -0.1840373701 66 0.9361273
117         EZH2             CYT 0.652971908 -0.0504517759 66 0.9361273
118          EZR             CYT 0.892634925  0.0811862739 66 0.9876376
119      FAM166A             CYT 0.481221944  0.1621547634 66 0.8513337
120       FAM46C             CYT 0.229343637 -0.2039885046 66 0.7533660
121       FAM8A1             CYT 0.195230276 -0.2084311912 66 0.7533660
122         FAT1             CYT 0.773554346 -0.0580370733 66 0.9723148
123        FBXW7             CYT 0.998733556 -0.0004373475 66 0.9991821
124       FGFBP1             CYT 0.073700690 -0.6434904843 66 0.6593230
125        FGFR2             CYT 0.951904567  0.0104687502 66 0.9930532
126        FGFR3             CYT 0.707032928  0.0808309954 66 0.9619797
127        FKBP2             CYT 0.226680162 -0.2689862199 66 0.7533660
128          FLG             CYT 0.183849342 -0.2328752102 66 0.7533660
129         FLT3             CYT 0.164322667 -0.4125817910 66 0.7533660
130        FOXA1             CYT 0.579502337  0.1400495124 66 0.8964951
131        FOXQ1             CYT 0.969284618 -0.0065043108 66 0.9991821
132         FRG1             CYT 0.999182075 -0.0002149795 66 0.9991821
133        FRMD7             CYT 0.349981557  0.2383909443 66 0.8257971
134        FUBP1             CYT 0.249824364 -0.4919920056 66 0.7536368
135        GATA3             CYT 0.604191711  0.0746758422 66 0.9151356
136         GFER             CYT 0.056366267 -0.4215757897 66 0.6593230
137        GNA13             CYT 0.513097333  0.1778664862 66 0.8578466
138         GNB1             CYT 0.225295892 -0.3286785069 66 0.7533660
139       GNPTAB             CYT 0.682221523  0.0857010694 66 0.9564089
140         GOT1             CYT 0.112708729 -0.4246878244 66 0.6915349
141      GPATCH4             CYT 0.073709488 -0.2781768669 66 0.6593230
142         GPS2             CYT 0.206009670 -1.0633139137 66 0.7533660
143         GUSB             CYT 0.990338599 -0.0020316006 66 0.9991821
144         GZMA             CYT 0.318151886  0.3551357167 66 0.7997985
145        HIF1A             CYT 0.472640555 -0.1393402728 66 0.8513337
146     HIST1H1E             CYT 0.083781381 -0.3052292666 66 0.6593230
147    HIST1H2BN             CYT 0.522534818 -0.0922833859 66 0.8622150
148     HIST1H3B             CYT 0.087819057 -0.2984969273 66 0.6623021
149     HIST1H3C             CYT 0.087819057 -0.2984969273 66 0.6623021
150     HIST1H4E             CYT 0.083781381 -0.3052292666 66 0.6593230
151        HLA-A             CYT 0.264870332 -0.1422419492 66 0.7625660
152        HLA-B             CYT 0.380567003 -0.1121878301 66 0.8374803
153        HLA-C             CYT 0.315735952 -0.1146997963 66 0.7992756
154         HRAS             CYT 0.553825993 -0.2535428624 66 0.8754804
155     HSP90AB1             CYT 0.194160353 -0.1668747817 66 0.7533660
156        HSPA6             CYT 0.140544018 -0.2661824246 66 0.7533660
157         IDH1             CYT 0.048214043 -0.4313548973 66 0.6593230
158         IDH2             CYT 0.877332034 -0.0244844212 66 0.9876376
159       IFITM1             CYT 0.553825993 -0.2535428624 66 0.8754804
160         IL32             CYT 0.203131110 -0.3069877789 66 0.7533660
161         IL7R             CYT 0.198710061 -0.1829922391 66 0.7533660
162         ING1             CYT 0.081618445 -0.4996043210 66 0.6593230
163       INPPL1             CYT 0.723830257 -0.0483261159 66 0.9619797
164       INTS12             CYT 0.150452771 -0.4394991629 66 0.7533660
165         IPO7             CYT 0.750748227 -0.1419373442 66 0.9619797
166         IRF4             CYT 0.995036656  0.0010964654 66 0.9991821
167         IRF6             CYT 0.212771132 -0.2255456125 66 0.7533660
168        ITGB7             CYT 0.780041721 -0.0500358643 66 0.9770765
169        ITPKB             CYT 0.175587672 -0.2905481789 66 0.7533660
170          JTB             CYT 0.385168369 -0.1123527899 66 0.8374803
171        KDM5C             CYT 0.301121276  0.3643076292 66 0.7992756
172        KDM6A             CYT 0.923288307  0.0288622701 66 0.9876376
173        KEAP1             CYT 0.074273279 -0.1225619034 66 0.6593230
174          KEL             CYT 0.925414961  0.0103733369 66 0.9876376
175          KIT             CYT 0.430760232 -0.1517548753 66 0.8513337
176        KLHL8             CYT 0.026124008 -0.7034259102 66 0.6593230
177         KRAS             CYT 0.082382719 -0.2306246454 66 0.6593230
178       LARP4B             CYT 0.469624607  0.0897795971 66 0.8513337
179        LASP1             CYT 0.388664874 -0.3535084941 66 0.8374803
180        LCE4A             CYT 0.351305958 -0.1505813635 66 0.8257971
181         LCTL             CYT 0.862335269  0.0495881126 66 0.9860212
182        LMAN1             CYT 0.257522500 -0.2697165736 66 0.7625660
183        LPAR2             CYT 0.534110846  0.1055656546 66 0.8631613
184        LZTR1             CYT 0.820069198 -0.0599526080 66 0.9797526
185       MAP2K1             CYT 0.862335269  0.0495881126 66 0.9860212
186       MAP2K4             CYT 0.292799645 -0.8792766924 66 0.7969434
187       MAP3K1             CYT 0.494930984  0.3526408005 66 0.8561153
188       MAP4K3             CYT 0.171084913 -0.2084046494 66 0.7533660
189         MBD1             CYT 0.414747288 -0.1260875219 66 0.8513337
190         MBD6             CYT 0.903658403 -0.0215662690 66 0.9876376
191        MED12             CYT 0.979176434  0.0088592233 66 0.9991821
192        MED23             CYT 0.950135535 -0.0292663381 66 0.9930532
193          MET             CYT 0.811762221  0.0317553107 66 0.9784506
194          MGA             CYT 0.809174128  0.0738892070 66 0.9784506
195      MICALCL             CYT 0.668123897  0.0952915788 66 0.9484739
196         MLF2             CYT 0.110683153 -0.1850221152 66 0.6908155
197          MMD             CYT 0.331782147  0.2065144681 66 0.8162483
198        MORC4             CYT 0.106496049 -0.3959057504 66 0.6908155
199          MPO             CYT 0.473242324  0.1941813564 66 0.8513337
200       MRPS25             CYT 0.706115969 -0.0946591079 66 0.9619797
201         MTOR             CYT 0.401003361 -0.2241767841 66 0.8489077
202        MUC17             CYT 0.495222497  0.1264128718 66 0.8561153
203         MUC4             CYT 0.188906296 -0.1055207969 66 0.7533660
204         MUC7             CYT 0.411321777 -0.2249297811 66 0.8513337
205        MXRA5             CYT 0.489925262 -0.1805940940 66 0.8561153
206          MYB             CYT 0.642645096  0.3604702113 66 0.9361273
207         MYCN             CYT 0.245575722 -0.1624608236 66 0.7533660
208        MYD88             CYT 0.807822570  0.0590115254 66 0.9784506
209        MYOCD             CYT 0.292799645 -0.8792766924 66 0.7969434
210        NBPF1             CYT 0.054834818 -0.3507883275 66 0.6593230
211        NCOR1             CYT 0.863449479 -0.0116941731 66 0.9860212
212          NF1             CYT 0.527011167 -0.7704612637 66 0.8622150
213       NFE2L2             CYT 0.595110454 -0.1196570946 66 0.9128389
214      NKIRAS2             CYT 0.384297250 -0.3643869929 66 0.8374803
215       NOTCH1             CYT 0.893889348 -0.0386783847 66 0.9876376
216         NPM1             CYT 0.235057872 -0.2417853804 66 0.7533660
217         NRAS             CYT 0.177475826 -0.2372414828 66 0.7533660
218         NSD1             CYT 0.298183122 -0.1755221062 66 0.7992756
219         NTN4             CYT 0.764565839  0.0563018401 66 0.9677372
220      NUP210L             CYT 0.385168369 -0.1123527899 66 0.8374803
221         ODAM             CYT 0.444047790 -0.2130731667 66 0.8513337
222         OMA1             CYT 0.817641027 -0.0643732455 66 0.9797526
223       OR4A16             CYT 0.128663191 -0.4112023780 66 0.7464542
224       OR52N1             CYT 0.265920413 -0.7285233120 66 0.7625660
225       OTUD7A             CYT 0.101574961 -0.3388254422 66 0.6908155
226        OVOL1             CYT 0.202866892 -0.2805071065 66 0.7533660
227        PAPD5             CYT 0.539943858  0.1687550291 66 0.8674929
228        PBRM1             CYT 0.921554464 -0.0471732030 66 0.9876376
229        PCBP1             CYT 0.158285893 -0.2071749896 66 0.7533660
230        PDAP1             CYT 0.477853001  0.1298889051 66 0.8513337
231       PDCD2L             CYT 0.058026646 -0.1138646436 66 0.6593230
232        PDSS2             CYT 0.024685841 -0.1015804124 66 0.6593230
233         PHF6             CYT 0.417295630  0.1933891739 66 0.8513337
234         PIGB             CYT 0.767952833 -0.1282173380 66 0.9686374
235         PIGZ             CYT 0.315181178 -0.0851596608 66 0.7992756
236       PIK3CA             CYT 0.047508708 -0.2154473159 66 0.6593230
237       PIK3R1             CYT 0.054314783 -1.7048118641 66 0.6593230
238        PLCG2             CYT 0.452656615  0.2453796504 66 0.8513337
239         POLE             CYT 0.160211662 -0.2865203078 66 0.7533660
240      POU2AF1             CYT 0.630248029 -0.0732557621 66 0.9361273
241       POU2F2             CYT 0.145523244 -0.1761379472 66 0.7533660
242        PPM1D             CYT 0.703771868  0.0789689921 66 0.9619797
243        PPM1F             CYT 0.463713445 -0.1876684185 66 0.8513337
244      PPP2R1A             CYT 0.787968953  0.1245312314 66 0.9779504
245       PPP2R4             CYT 0.908802152  0.0330144002 66 0.9876376
246        PPP6C             CYT 0.736578917  0.0642582210 66 0.9619797
247        PRDM1             CYT 0.023416847 -0.1593541918 66 0.6593230
248       PRKRIR             CYT 0.809739705  0.0268707025 66 0.9784506
249         PTEN             CYT 0.671718437  0.1159856635 66 0.9498519
250         PTH2             CYT 0.899688880  0.0724328853 66 0.9876376
251       PTPN11             CYT 0.382443575  0.1484076116 66 0.8374803
252       PTPN12             CYT 0.007468472  0.5904820357 66 0.6593230
253          QKI             CYT 0.921628308  0.0640657300 66 0.9876376
254       RAB40A             CYT 0.075885537 -0.4302628848 66 0.6593230
255         RAC1             CYT 0.373192457  0.2496248922 66 0.8374803
256        RAD21             CYT 0.246809953 -0.0988655623 66 0.7533660
257       RAD51C             CYT 0.743651798  0.0821303365 66 0.9619797
258        RASA1             CYT 0.068139100 -0.7872919474 66 0.6593230
259          RB1             CYT 0.148431461 -0.2971574018 66 0.7533660
260        RBM10             CYT 0.344419948  0.3313778207 66 0.8257971
261         RGS2             CYT 0.466915660 -0.1392261530 66 0.8513337
262         RHEB             CYT 0.723182280 -0.0411681734 66 0.9619797
263         RHOA             CYT 0.933305082  0.0411186309 66 0.9907813
264        RIMS2             CYT 0.455855222 -0.0675550362 66 0.8513337
265         RIT1             CYT 0.101015946 -0.2445901454 66 0.6908155
266        RNF43             CYT 0.473242324  0.1941813564 66 0.8513337
267        RPL19             CYT 0.388664874 -0.3535084941 66 0.8374803
268        RPL22             CYT 0.178118180 -0.3227276354 66 0.7533660
269         RPL5             CYT 0.003837472 -0.4876529656 66 0.6593230
270        RPS15             CYT          NA            NA 66        NA
271         RPS2             CYT 0.056366267 -0.4215757897 66 0.6593230
272         RPSA             CYT 0.942261090 -0.0171224243 66 0.9925265
273         RPTN             CYT 0.188501992 -0.2311848019 66 0.7533660
274       RSBN1L             CYT 0.007468472  0.5904820357 66 0.6593230
275        RUNX1             CYT 0.993928752  0.0025354820 66 0.9991821
276         RXRA             CYT 0.923984352  0.0212185744 66 0.9876376
277         RYBP             CYT 0.927615459 -0.0295496156 66 0.9876376
278         SACS             CYT 0.020632071 -0.7511121748 66 0.6593230
279         SELP             CYT 0.347429490 -0.1903315928 66 0.8257971
280       SEPT12             CYT 0.245741149 -0.2932769048 66 0.7533660
281    SERPINB13             CYT 0.482108891 -0.0776268720 66 0.8513337
282        SETD2             CYT 0.690117509 -0.1426081335 66 0.9571745
283       SETDB1             CYT 0.335969597 -0.1511392876 66 0.8162483
284        SF3B1             CYT 0.465245720 -0.1836093240 66 0.8513337
285         SGK1             CYT 0.945916152 -0.0314912740 66 0.9925265
286        SIRT4             CYT 0.178421188 -0.3083077872 66 0.7533660
287      SLC17A8             CYT 0.813573601  0.0454171429 66 0.9784506
288       SLC1A3             CYT 0.254439990 -0.1460932300 66 0.7612172
289     SLC22A14             CYT 0.861388671  0.0422001361 66 0.9860212
290     SLC25A15             CYT 0.031560284 -0.4936147175 66 0.6593230
291      SLC25A5             CYT 0.428953714 -0.1162819009 66 0.8513337
292      SLC26A3             CYT 0.560270914 -0.0719577569 66 0.8818177
293      SLC44A3             CYT 0.003003064 -0.4932150254 66 0.6593230
294       SLC4A5             CYT 0.541583977 -0.1151750104 66 0.8674929
295        SMAD2             CYT 0.832805799 -0.0370574951 66 0.9845359
296        SMAD4             CYT 0.411682153 -0.2607811942 66 0.8513337
297        SMAP1             CYT 0.306148632  0.3097690456 66 0.7992756
298      SMARCA4             CYT 0.710174987 -0.0473075630 66 0.9619797
299      SMARCB1             CYT 0.718284007 -0.0903725956 66 0.9619797
300        SMC1A             CYT 0.301121276  0.3643076292 66 0.7992756
301         SMC3             CYT 0.243339239 -0.3864000022 66 0.7533660
302         SOS1             CYT 0.268405698 -0.1660798422 66 0.7625660
303        SOX17             CYT 0.527257518  0.0728758493 66 0.8622150
304         SOX9             CYT 0.189276290  0.2974765645 66 0.7533660
305          SP8             CYT 0.788126329  0.0657980478 66 0.9779504
306         SPEN             CYT 0.068577887 -0.6551697648 66 0.6593230
307         SPOP             CYT 0.730093548 -0.0581370221 66 0.9619797
308         SSX5             CYT 0.307759417  0.3602042522 66 0.7992756
309        STAG2             CYT 0.741027903 -0.0558846483 66 0.9619797
310        STK11             CYT          NA            NA 66        NA
311        STK19             CYT 0.155763260 -0.2136903314 66 0.7533660
312         STX2             CYT 0.133026108 -0.3309870273 66 0.7464542
313         TAP1             CYT 0.189059934 -0.1865114470 66 0.7533660
314      TBC1D12             CYT 0.836801173  0.0468159806 66 0.9845359
315      TBL1XR1             CYT 0.020112038 -0.2358050560 66 0.6593230
316         TBX3             CYT 0.455020360  0.1345317725 66 0.8513337
317         TCAP             CYT 0.905114877  0.0063268246 66 0.9876376
318        TCEB1             CYT 0.823164915 -0.0228021112 66 0.9802161
319       TCF7L2             CYT 0.893795483 -0.0237669717 66 0.9876376
320      TCP11L2             CYT 0.984620021 -0.0036642957 66 0.9991821
321       TDRD10             CYT 0.396614003 -0.1104446763 66 0.8489077
322         TET2             CYT 0.236477626 -0.3586615158 66 0.7533660
323       TGFBR2             CYT 0.760219440  0.0651950797 66 0.9656121
324      TIMM17A             CYT 0.042272733 -0.4162445628 66 0.6593230
325       TM4SF1             CYT 0.654254744 -0.0621239474 66 0.9361273
326        TMCO2             CYT 0.499748621  0.2097417924 66 0.8573886
327       TMED10             CYT 0.333752336 -0.1878924512 66 0.8162483
328      TMEM30B             CYT 0.079597749 -0.3205144467 66 0.6593230
329       TMEM88             CYT 0.188268716 -1.0176324491 66 0.7533660
330       TMEM92             CYT 0.600781791 -0.0975089589 66 0.9137942
331          TNF             CYT 0.116889607 -0.2400320402 66 0.7052340
332     TNFRSF14             CYT 0.236866146 -0.3259742436 66 0.7533660
333         TP53             CYT 0.268564277 -0.8738113548 66 0.7625660
334      TP53BP1             CYT 0.507181187 -0.1210987740 66 0.8578466
335         TPX2             CYT 0.015795091 -0.3021709270 66 0.6593230
336        TRAF3             CYT 0.990612095  0.0028786151 66 0.9991821
337        TRAT1             CYT 0.798896140 -0.0484212285 66 0.9784506
338       TRIM23             CYT 0.054314783 -1.7048118641 66 0.6593230
339 TRIM6-TRIM34             CYT 0.265920413 -0.7285233120 66 0.7625660
340         TSC1             CYT 0.531143509 -0.1868079964 66 0.8622150
341        TTLL9             CYT 0.019860653 -0.2898873651 66 0.6593230
342        TXLNA             CYT 0.898704932  0.0432618544 66 0.9876376
343       TXNDC8             CYT 0.530399957 -0.1522143625 66 0.8622150
344        U2AF1             CYT 0.238863276 -0.5271291600 66 0.7533660
345          UBC             CYT 0.475134620 -0.1613879862 66 0.8513337
346        UBXN4             CYT 0.431782473 -0.2159273037 66 0.8513337
347         UPP1             CYT 0.200620932  0.2961809154 66 0.7533660
348         USO1             CYT 0.385215708 -0.2212720899 66 0.8374803
349          VHL             CYT 0.654095168  0.1063201395 66 0.9361273
350        WASF3             CYT 0.091675011 -0.5756945777 66 0.6637271
351          WT1             CYT 0.878553116  0.0465933380 66 0.9876376
352         XCL1             CYT 0.314744488 -0.2177889764 66 0.7992756
353        XIRP2             CYT 0.966657568 -0.0106970417 66 0.9991821
354         XPO1             CYT 0.578505609 -0.0843602360 66 0.8964951
355        ZFHX3             CYT 0.887350892  0.0584048522 66 0.9876376
356      ZFP36L1             CYT 0.146089217 -0.2882439553 66 0.7533660
357       ZNF180             CYT 0.277080360 -0.1696273753 66 0.7730370
358       ZNF471             CYT 0.457366397 -0.1343817931 66 0.8513337
359       ZNF483             CYT 0.504966174 -0.1617692707 66 0.8578466
360       ZNF492             CYT 0.193591121 -0.1943602580 66 0.7533660
361       ZNF620             CYT 0.752446387 -0.0548929110 66 0.9619797
362       ZNF706             CYT 0.599108308 -0.0467750420 66 0.9137942
363       ZNF750             CYT 0.989875975  0.0021615254 66 0.9991821
364       ZRANB3             CYT 0.405906557 -0.2296248736 66 0.8513337
print(cnvdel_cyt_patient_rank)
            gene immune_variable      p.value          coef  n     p.adj
1           ACO1             CYT 0.6959188811  0.0596576244 66 0.9155831
2         ACVR1B             CYT           NA            NA 66        NA
3         ACVR2B             CYT 0.1454485935 -0.1972880225 66 0.4623534
4           ADNP             CYT 0.2440439799  0.6379883534 66 0.5727406
5          AGBL5             CYT 0.2522623072 -0.2484739685 66 0.5780215
6          AJUBA             CYT 0.8256796810  0.0514137241 66 0.9380171
7           AKT1             CYT 0.4914213479 -0.1609610019 66 0.7927810
8            ALB             CYT 0.6445945027 -0.0853058049 66 0.9008141
9            ALK             CYT 0.1745052388 -0.3362698931 66 0.4843293
10        ALKBH6             CYT 0.2788384258 -0.1581697742 66 0.6035564
11         ALPK2             CYT 0.1342348582 -0.1195302153 66 0.4623534
12          ANK3             CYT 0.0134833687 -0.5988061852 66 0.1645371
13           APC             CYT 0.7590745422 -0.0400395508 66 0.9155831
14         APOL2             CYT 0.4609132250 -0.1068632094 66 0.7695583
15      ARHGAP35             CYT 0.1526156409 -0.1287981629 66 0.4623534
16        ARID1A             CYT 0.4886448819  0.0783276621 66 0.7927810
17         ARID2             CYT 0.0234501921 -1.4574698236 66 0.1645371
18        ARID5B             CYT 0.0045214258 -0.5531770835 66 0.1645371
19         ARL15             CYT 0.1121408840 -0.2067422061 66 0.4406477
20          ARL2             CYT 0.1277321656 -0.7831140130 66 0.4623534
21       ARL6IP1             CYT 0.5933898888 -0.1314255614 66 0.8730935
22        ARMCX1             CYT 0.0300224530 -0.1807624218 66 0.1928365
23         ASXL1             CYT           NA            NA 66        NA
24         ASXL2             CYT 0.2435552637 -0.2537565941 66 0.5727406
25           ATM             CYT 0.1886866909 -0.4809682127 66 0.4962311
26        ATP1B4             CYT 0.7370857272 -0.0360029087 66 0.9155831
27         ATP5B             CYT 0.0234501921 -1.4574698236 66 0.1645371
28          ATRX             CYT 0.0262219261 -0.1808058802 66 0.1763110
29         AXIN2             CYT 0.6641113866 -0.1291162985 66 0.9016797
30         AZGP1             CYT 0.1177083442 -1.0959387601 66 0.4478793
31           B2M             CYT 0.0019768208 -0.4904547726 66 0.1173852
32          BAP1             CYT 0.0538343033 -0.2684849013 66 0.2644214
33        BCLAF1             CYT 0.0263938630 -0.2436620876 66 0.1763110
34          BCOR             CYT 0.6164564652 -0.0443806777 66 0.8864464
35         BHMT2             CYT 0.1433553227 -0.1817361762 66 0.4623534
36       BLOC1S3             CYT 0.5726983387 -0.0738069190 66 0.8501389
37          BRAF             CYT 0.6699026530  0.0900398230 66 0.9022076
38         BRCA1             CYT 0.3739022742 -0.1254247557 66 0.7197151
39         BRCA2             CYT 0.0185900672 -0.3268695622 66 0.1645371
40           BRE             CYT 0.1745052388 -0.3362698931 66 0.4843293
41      C12orf39             CYT 0.4465475597  0.1556534283 66 0.7648558
42      C12orf57             CYT 0.4017694638  0.1774479032 66 0.7197151
43      C19orf33             CYT 0.1073849342 -0.2971827473 66 0.4373972
44         C1QL2             CYT 0.7087385265  0.3004301093 66 0.9155831
45       C3orf62             CYT 0.0153504357 -0.1212401301 66 0.1645371
46          CAP2             CYT 0.5450880718  0.1793164864 66 0.8368765
47        CARD11             CYT 0.4427752217 -0.1081763661 66 0.7648558
48         CASP8             CYT 0.7532185791  0.2505735829 66 0.9155831
49          CBFB             CYT 0.3914267750 -0.0955423706 66 0.7197151
50        CC2D1B             CYT 0.8956012321  0.0332069817 66 0.9615861
51       CCDC101             CYT 0.1725235953 -0.3865133369 66 0.4843293
52       CCDC120             CYT 0.0176896125 -0.2782387347 66 0.1645371
53        CCDC36             CYT 0.0153504357 -0.1212401301 66 0.1645371
54         CCDC6             CYT 0.0177969092 -0.7147708718 66 0.1645371
55         CCND1             CYT           NA            NA 66        NA
56          CD1D             CYT           NA            NA 66        NA
57       CD300LG             CYT 0.9225733917  0.0141593594 66 0.9659546
58          CD38             CYT 0.9133032009  0.0168912609 66 0.9653268
59          CD5L             CYT           NA            NA 66        NA
60          CD70             CYT 0.1053138442 -0.1382358398 66 0.4342571
61         CD79B             CYT 0.6641113866 -0.1291162985 66 0.9016797
62         CDC27             CYT 0.5027662345 -0.1147173030 66 0.7996377
63          CDH1             CYT 0.3914267750 -0.0955423706 66 0.7197151
64         CDK12             CYT 0.3645908959 -0.1233407222 66 0.7079846
65          CDK4             CYT 0.7863266757  0.1838175031 66 0.9247645
66        CDKN1A             CYT 0.3975640272 -0.3399699092 66 0.7197151
67        CDKN1B             CYT 0.4465475597  0.1556534283 66 0.7648558
68        CDKN2A             CYT 0.7816643798  0.0138492489 66 0.9247645
69          CDX1             CYT 0.0054010197 -0.6449545399 66 0.1645371
70         CEBPA             CYT 0.6115357158 -0.0909788521 66 0.8864464
71         CEP76             CYT 0.9764995590 -0.0113769647 66 0.9883359
72          CHD4             CYT 0.4017694638  0.1774479032 66 0.7197151
73          CHD8             CYT 0.8614651788 -0.0375097942 66 0.9471238
74           CIC             CYT 0.5611224266 -0.0857694335 66 0.8404255
75        CLEC4E             CYT 0.9873575507 -0.0048920742 66 0.9933055
76         CNBD1             CYT 0.0063098236  0.4346036520 66 0.1645371
77        CNKSR1             CYT 0.5932706842 -0.0799667528 66 0.8730935
78        COL5A1             CYT 0.3626283977 -0.0990493142 66 0.7079846
79        COL5A3             CYT 0.7530358545  0.0528559382 66 0.9155831
80          CPS1             CYT 0.0829751644 -0.4318077927 66 0.3745095
81        CREBBP             CYT 0.8310863844 -0.0389231700 66 0.9409588
82         CSAG1             CYT 0.4575499261 -0.0676145756 66 0.7679481
83       CSNK2A1             CYT 0.5530633320 -0.1664015053 66 0.8368765
84          CTCF             CYT 0.3914267750 -0.0955423706 66 0.7197151
85        CTNNB1             CYT 0.1446213643 -0.1980497415 66 0.4623534
86         CUL4B             CYT 0.7370857272 -0.0360029087 66 0.9155831
87          CUX1             CYT 0.9970242772  0.0011678622 66 0.9970243
88         CXCL9             CYT 0.6857671167 -0.0727370874 66 0.9155831
89        CYP7B1             CYT 0.5537416389  0.3796111409 66 0.8368765
90         DDX3X             CYT 0.8102005544 -0.0206924171 66 0.9306562
91          DDX5             CYT 0.6641113866 -0.1291162985 66 0.9016797
92          DHDH             CYT 0.1499771211 -0.1291591934 66 0.4623534
93        DIAPH1             CYT 0.1612348081 -0.2502170777 66 0.4768173
94          DIS3             CYT 0.0603692023 -0.2593224386 66 0.2880473
95        DNAH12             CYT 0.1645910582 -0.2099418841 66 0.4822229
96          DNER             CYT 0.8069069732 -0.0150261493 66 0.9306562
97        DNMT3A             CYT 0.2660025877 -0.2402592787 66 0.5922991
98          DPRX             CYT 0.4695179390 -0.0757210795 66 0.7695583
99        DUSP19             CYT 0.4659765102  0.1892658660 66 0.7695583
100         EAF1             CYT 0.0024601680 -0.6324156925 66 0.1173852
101       EEF1A1             CYT 0.6511268913 -0.1026013010 66 0.9016797
102         EGFR             CYT 0.6670832010 -0.1154809136 66 0.9020477
103       EIF1AX             CYT 0.4029542371 -0.0643190591 66 0.7197151
104       EIF2S2             CYT 0.7863266758  5.6983425958 66 0.9247645
105         ELF3             CYT 0.1480621334 -0.5680835180 66 0.4623534
106        ELTD1             CYT 0.0222513215 -0.5070475910 66 0.1645371
107        EP300             CYT 0.7757842160 -0.0339705488 66 0.9234906
108      EPB41L3             CYT 0.7769487027 -0.1440266432 66 0.9234906
109        EPHA2             CYT 0.2137844209 -0.1987981697 66 0.5328656
110         EPS8             CYT 0.4465475597  0.1556534283 66 0.7648558
111        ERBB2             CYT 0.7690752856 -0.0382707544 66 0.9206851
112        ERBB3             CYT 0.0234501921 -1.4574698236 66 0.1645371
113        ERCC2             CYT 0.4228586301 -0.1036554897 66 0.7433410
114        ETHE1             CYT 0.3036415358 -0.1336957114 66 0.6378382
115         EZH1             CYT 0.7300351296  0.0406419519 66 0.9155831
116         EZH2             CYT 0.8982481281 -0.0411443191 66 0.9615861
117          EZR             CYT 0.0292228636 -0.2324319155 66 0.1913811
118      FAM166A             CYT 0.3505128027 -0.1004054749 66 0.7010256
119       FAM46C             CYT           NA            NA 66        NA
120       FAM8A1             CYT 0.5450880718  0.1793164864 66 0.8368765
121         FAT1             CYT 0.0057515380 -0.2674531953 66 0.1645371
122        FBXW7             CYT 0.0152421422 -0.3082982958 66 0.1645371
123       FGFBP1             CYT 0.9133032009  0.0168912609 66 0.9653268
124        FGFR2             CYT 0.0139286574 -0.5571592972 66 0.1645371
125        FGFR3             CYT 0.6400090377  0.0568105249 66 0.8994256
126        FKBP2             CYT 0.1277321656 -0.7831140130 66 0.4623534
127          FLG             CYT           NA            NA 66        NA
128         FLT3             CYT 0.1023852290 -0.1179211851 66 0.4274583
129        FOXA1             CYT 0.8060897498  0.0561399745 66 0.9306562
130        FOXQ1             CYT 0.7289617579  0.1727462280 66 0.9155831
131         FRG1             CYT 0.0572374973 -0.2651081868 66 0.2770627
132        FRMD7             CYT 0.6944121618 -0.0414351890 66 0.9155831
133        FUBP1             CYT 0.0229119869 -0.5018165446 66 0.1645371
134        GATA3             CYT 0.0451944092 -0.3740597229 66 0.2396021
135         GFER             CYT 0.6231261480  0.0912817210 66 0.8864464
136        GNA13             CYT 0.6641113866 -0.1291162985 66 0.9016797
137         GNB1             CYT 0.1827631233 -0.2121225960 66 0.4883431
138       GNPTAB             CYT 0.0234501921 -1.4574698236 66 0.1645371
139         GOT1             CYT 0.0016079048 -0.5695084591 66 0.1173852
140      GPATCH4             CYT           NA            NA 66        NA
141         GPS2             CYT 0.1020526494 -0.2279628834 66 0.4274583
142         GUSB             CYT 0.2064524541 -0.3996749696 66 0.5304240
143         GZMA             CYT 0.1121408840 -0.2067422061 66 0.4406477
144        HIF1A             CYT 0.9333244960 -0.0150375852 66 0.9741574
145     HIST1H1E             CYT 0.7593309201 -0.0750955473 66 0.9155831
146    HIST1H2BN             CYT 0.7593309201 -0.0750955473 66 0.9155831
147     HIST1H3B             CYT 0.8837560237 -0.0337698770 66 0.9552573
148     HIST1H3C             CYT 0.7593309201 -0.0750955473 66 0.9155831
149     HIST1H4E             CYT 0.7593309201 -0.0750955473 66 0.9155831
150        HLA-A             CYT 0.9730771345  0.0088113456 66 0.9883359
151        HLA-B             CYT 0.7402282475 -0.0590710099 66 0.9155831
152        HLA-C             CYT 0.7447668756  0.0585249297 66 0.9155831
153         HRAS             CYT 0.4023571728 -0.1059277535 66 0.7197151
154     HSP90AB1             CYT 0.7171684568  0.1570738415 66 0.9155831
155        HSPA6             CYT           NA            NA 66        NA
156         IDH1             CYT 0.7532185791  0.2505735829 66 0.9155831
157         IDH2             CYT 0.2628578663 -0.2105840702 66 0.5892250
158       IFITM1             CYT 0.4023571728 -0.1059277535 66 0.7197151
159         IL32             CYT 0.8381209868 -0.0372219888 66 0.9457176
160         IL7R             CYT 0.2595405181 -0.4356758237 66 0.5857198
161         ING1             CYT 0.0434034302 -0.2629600211 66 0.2338185
162       INPPL1             CYT 0.8731433361 -0.0568125194 66 0.9471238
163       INTS12             CYT 0.8700391371  0.0251787359 66 0.9471238
164         IPO7             CYT 0.1270796348 -0.2451955036 66 0.4623534
165         IRF4             CYT 0.9803003575 -0.0090924343 66 0.9891853
166         IRF6             CYT 0.1613184197 -0.7239824299 66 0.4768173
167        ITGB7             CYT           NA            NA 66        NA
168        ITPKB             CYT 0.1521615029 -0.7272323626 66 0.4623534
169          JTB             CYT           NA            NA 66        NA
170        KDM5C             CYT 0.0378109452 -0.2455181865 66 0.2177389
171        KDM6A             CYT 0.4188972404 -0.1073434685 66 0.7402734
172        KEAP1             CYT 0.7530358545  0.0528559382 66 0.9155831
173          KEL             CYT 0.8147413771 -0.0818196404 66 0.9319302
174          KIT             CYT 0.2526680781 -0.3521386928 66 0.5780215
175        KLHL8             CYT 0.8025295736  0.0322672647 66 0.9306562
176         KRAS             CYT 0.3203004928  0.4945679523 66 0.6603726
177       LARP4B             CYT 0.0474512758 -0.3702877447 66 0.2476363
178        LASP1             CYT 0.3982403094 -0.1163850739 66 0.7197151
179        LCE4A             CYT           NA            NA 66        NA
180         LCTL             CYT 0.0503846773 -0.3513223178 66 0.2549770
181        LMAN1             CYT 0.0119756963 -0.2240004271 66 0.1645371
182        LPAR2             CYT 0.9550507013 -0.0151688448 66 0.9883359
183        LZTR1             CYT 0.2452152673 -0.1734356212 66 0.5727406
184       MAP2K1             CYT 0.0503846773 -0.3513223178 66 0.2549770
185       MAP2K4             CYT 0.0154938938 -0.3081352391 66 0.1645371
186       MAP3K1             CYT 0.2261919989 -0.1437116527 66 0.5555009
187       MAP4K3             CYT 0.1853476126 -0.3444392709 66 0.4913183
188         MBD1             CYT 0.0114108841 -0.2293717101 66 0.1645371
189         MBD6             CYT           NA            NA 66        NA
190        MED12             CYT 0.0236460455 -0.1777921166 66 0.1645371
191        MED23             CYT 0.0407211946 -0.2222590402 66 0.2229652
192          MET             CYT 0.8656788183  0.0492360642 66 0.9471238
193          MGA             CYT 0.0737161838 -0.2986174929 66 0.3372768
194      MICALCL             CYT 0.9965403636 -0.0007249317 66 0.9970243
195         MLF2             CYT 0.4017694638  0.1774479032 66 0.7197151
196          MMD             CYT 0.2686289043 -0.1839831727 66 0.5941858
197        MORC4             CYT 0.7581204368 -0.0316598194 66 0.9155831
198          MPO             CYT 0.9755611951  0.0067984529 66 0.9883359
199       MRPS25             CYT 0.0024601680 -0.6324156925 66 0.1173852
200         MTOR             CYT 0.4020618089 -0.1344400038 66 0.7197151
201        MUC17             CYT 0.7418557903 -0.1658068294 66 0.9155831
202         MUC4             CYT 0.0145252709 -0.5641653968 66 0.1645371
203         MUC7             CYT 0.8596616859 -0.0366810501 66 0.9471238
204        MXRA5             CYT 0.2863237754  0.0931386720 66 0.6130265
205          MYB             CYT 0.0213530192 -0.2504981711 66 0.1645371
206         MYCN             CYT 0.2567938648 -0.2450321689 66 0.5834636
207        MYD88             CYT 0.1454485935 -0.1972880225 66 0.4623534
208        MYOCD             CYT 0.0154328399 -0.3064214837 66 0.1645371
209        NBPF1             CYT 0.1356961700 -0.2466847471 66 0.4623534
210        NCOR1             CYT 0.2011181425 -0.1504855798 66 0.5225317
211          NF1             CYT 0.2237493547 -0.0847316298 66 0.5535725
212       NFE2L2             CYT 0.4643249005  0.1893158476 66 0.7695583
213      NKIRAS2             CYT 0.8549832717 -0.0228297780 66 0.9471238
214       NOTCH1             CYT 0.5269192849 -0.0680209826 66 0.8262490
215         NPM1             CYT 0.2924551831  0.1266797425 66 0.6187137
216         NRAS             CYT 0.0184108387 -1.5653474002 66 0.1645371
217         NSD1             CYT 0.7923405484  0.0468964460 66 0.9285232
218         NTN4             CYT 0.0234501921 -1.4574698236 66 0.1645371
219      NUP210L             CYT           NA            NA 66        NA
220         ODAM             CYT 0.6409080508  0.0956258367 66 0.8994256
221         OMA1             CYT 0.9671958317  0.0127634729 66 0.9883359
222       OR4A16             CYT 0.1783607912 -0.6317851210 66 0.4843293
223       OR52N1             CYT 0.3495761886 -0.1412690677 66 0.7010256
224       OTUD7A             CYT 0.0006714359 -0.5878706221 66 0.1173852
225        OVOL1             CYT 0.1277321656 -0.7831140130 66 0.4623534
226        PAPD5             CYT 0.8917165549  0.0145342308 66 0.9607527
227        PBRM1             CYT 0.0538343033 -0.2684849013 66 0.2644214
228        PCBP1             CYT           NA            NA 66        NA
229        PDAP1             CYT 0.1177083442 -1.0959387601 66 0.4478793
230       PDCD2L             CYT 0.4572014531 -0.1373221732 66 0.7679481
231        PDSS2             CYT 0.6534238378  0.0473575320 66 0.9016797
232         PHF6             CYT 0.4532393789 -0.0728446604 66 0.7679481
233         PIGB             CYT 0.1091762023 -0.2495161136 66 0.4393356
234         PIGZ             CYT 0.0145252709 -0.5641653968 66 0.1645371
235       PIK3R1             CYT 0.1427527111 -0.1817633024 66 0.4623534
236        PLCG2             CYT 0.8733956204  0.0179988691 66 0.9471238
237         POLE             CYT 0.5598356412  0.1269367667 66 0.8404255
238      POU2AF1             CYT 0.1802558848 -0.4912397502 66 0.4855279
239       POU2F2             CYT 0.5700826428 -0.0821178801 66 0.8500339
240        PPM1D             CYT 0.5112196539 -0.1815044847 66 0.8092292
241        PPM1F             CYT 0.2452152673 -0.1734356212 66 0.5727406
242      PPP2R1A             CYT 0.2115945438 -0.1384371340 66 0.5328656
243       PPP2R4             CYT 0.6350780181 -0.0935157590 66 0.8987969
244        PPP6C             CYT 0.5215831723 -0.1767879731 66 0.8217395
245        PRDM1             CYT 0.7123950331 -0.0561071391 66 0.9155831
246       PRKRIR             CYT 0.9097034954 -0.1291723871 66 0.9653268
247         PTEN             CYT 0.0014025486 -0.5751086925 66 0.1173852
248         PTH2             CYT 0.1714867962 -0.1654913462 66 0.4843293
249       PTPN11             CYT 0.0234501924 -1.4119238916 66 0.1645371
250       PTPN12             CYT 0.6236973504 -0.1706110847 66 0.8864464
251          QKI             CYT 0.0351915732 -0.2181926783 66 0.2098926
252       RAB40A             CYT 0.6139788585 -0.0427455540 66 0.8864464
253         RAC1             CYT 0.8530313084  0.0284350107 66 0.9471238
254       RAD51C             CYT 0.3872434064 -0.1891007555 66 0.7197151
255        RASA1             CYT 0.2319029671 -0.1507565177 66 0.5653693
256          RB1             CYT 0.0339721482 -0.2187596400 66 0.2063036
257        RBM10             CYT 0.0180314647 -0.2780764438 66 0.1645371
258         RGS2             CYT 0.2401138586 -0.5325414955 66 0.5727406
259         RHEB             CYT 0.9727251763 -0.0118782161 66 0.9883359
260         RHOA             CYT 0.3810562091 -0.1340246574 66 0.7197151
261        RIMS2             CYT 0.5474010318  1.2613520190 66 0.8368765
262         RIT1             CYT           NA            NA 66        NA
263        RNF43             CYT 0.9755611951  0.0067984529 66 0.9883359
264        RPL19             CYT 0.3645908959 -0.1233407222 66 0.7079846
265        RPL22             CYT 0.2137844209 -0.1987981697 66 0.5328656
266         RPL5             CYT 0.1367965756  0.2088042453 66 0.4623534
267        RPS15             CYT 0.2800935211 -0.0953693531 66 0.6035564
268         RPS2             CYT 0.6231261480  0.0912817210 66 0.8864464
269         RPSA             CYT 0.1536563721 -0.1899454511 66 0.4623534
270         RPTN             CYT           NA            NA 66        NA
271       RSBN1L             CYT 0.6236973504 -0.1706110847 66 0.8864464
272        RUNX1             CYT 0.4985322000 -0.0965986634 66 0.7966974
273         RXRA             CYT 0.3636113103 -0.0983793039 66 0.7079846
274         RYBP             CYT 0.2018161317 -0.1971802950 66 0.5225317
275         SACS             CYT 0.0666687799 -0.2285883635 66 0.3136250
276         SELP             CYT           NA            NA 66        NA
277       SEPT12             CYT 0.8547357187 -0.0333660753 66 0.9471238
278    SERPINB13             CYT 0.3552482892 -0.1470112788 66 0.7062674
279        SETD2             CYT 0.3322893429 -0.1437690531 66 0.6808874
280       SETDB1             CYT 0.4700295979 -1.1181771517 66 0.7695583
281        SF3B1             CYT 0.7532185791  0.2505735829 66 0.9155831
282         SGK1             CYT 0.0407211946 -0.2222590402 66 0.2229652
283        SIRT4             CYT 0.4339226613 -0.3196291637 66 0.7587967
284      SLC17A8             CYT 0.0234501921 -1.4574698236 66 0.1645371
285       SLC1A3             CYT 0.2926849401 -0.3646459702 66 0.6187137
286     SLC22A14             CYT 0.1454485935 -0.1972880225 66 0.4623534
287     SLC25A15             CYT 0.0386418770 -0.2275599837 66 0.2187523
288      SLC25A5             CYT 0.7370857272 -0.0360029087 66 0.9155831
289      SLC26A3             CYT 0.0336632318 -2.9042687421 66 0.2063036
290      SLC44A3             CYT 0.1304335242  0.2134593351 66 0.4623534
291       SLC4A5             CYT           NA            NA 66        NA
292        SMAD2             CYT 0.0112164693 -0.2292000909 66 0.1645371
293        SMAD4             CYT 0.1433857889 -0.1328422338 66 0.4623534
294        SMAP1             CYT 0.1338077897 -0.3294801167 66 0.4623534
295      SMARCA4             CYT 0.7950827176  0.0433894555 66 0.9285232
296      SMARCB1             CYT 0.8603959917  0.0302431783 66 0.9471238
297        SMC1A             CYT 0.0378109452 -0.2455181865 66 0.2177389
298         SMC3             CYT 0.0106476354 -0.4794027756 66 0.1645371
299         SOS1             CYT 0.0735742008 -0.5106359678 66 0.3372768
300        SOX17             CYT           NA            NA 66        NA
301         SOX9             CYT 0.2720990408 -0.2880975660 66 0.5979018
302          SP8             CYT 0.6056335422 -0.0795371917 66 0.8864464
303         SPEN             CYT 0.4137381383 -0.1307578841 66 0.7350454
304         SPOP             CYT 0.4937079040 -0.1163255943 66 0.7927810
305         SSX5             CYT 0.0176896125 -0.2782387347 66 0.1645371
306        STAG2             CYT 0.7358351496 -0.0361668776 66 0.9155831
307        STK11             CYT 0.2756778070 -0.0962675375 66 0.6018065
308        STK19             CYT 0.9195002559 -0.0339570139 66 0.9657644
309         STX2             CYT 0.8614639322  0.0596590221 66 0.9471238
310         TAP1             CYT 0.8217923994 -0.0541674515 66 0.9367872
311      TBC1D12             CYT 0.0030629097 -0.6510756786 66 0.1278765
312         TBX3             CYT 0.0211902359 -1.4307695771 66 0.1645371
313         TCAP             CYT 0.7690752856 -0.0382707544 66 0.9206851
314        TCEB1             CYT 0.5537416381  0.6922320814 66 0.8368765
315       TCF7L2             CYT 0.0139286574 -0.5571592972 66 0.1645371
316      TCP11L2             CYT 0.0234501924 -1.4119238916 66 0.1645371
317       TDRD10             CYT           NA            NA 66        NA
318         TET2             CYT 0.8700391371  0.0251787359 66 0.9471238
319       TGFBR2             CYT 0.2410159651 -0.1709532693 66 0.5727406
320      TIMM17A             CYT 0.0886635488 -1.0126795815 66 0.3948483
321       TM4SF1             CYT           NA            NA 66        NA
322        TMCO2             CYT 0.0226321903 -0.4299189438 66 0.1645371
323       TMED10             CYT 0.9754496157 -0.0064733788 66 0.9883359
324      TMEM30B             CYT 0.8108411658  0.0456299567 66 0.9306562
325       TMEM88             CYT 0.0306728186 -0.2893176470 66 0.1932966
326       TMEM92             CYT 0.4937079040 -0.1163255943 66 0.7927810
327          TNF             CYT 0.9195002559 -0.0339570139 66 0.9657644
328     TNFRSF14             CYT 0.2137844209 -0.1987981697 66 0.5328656
329         TP53             CYT 0.1020526494 -0.2279628834 66 0.4274583
330      TP53BP1             CYT 0.0019768208 -0.4904547726 66 0.1173852
331         TPX2             CYT           NA            NA 66        NA
332        TRAF3             CYT 0.7145524048 -0.0785929550 66 0.9155831
333        TRAT1             CYT 0.9097034969 -0.0064229363 66 0.9653268
334       TRIM23             CYT 0.1518926906 -0.1737585260 66 0.4623534
335 TRIM6-TRIM34             CYT 0.3495761886 -0.1412690677 66 0.7010256
336         TSC1             CYT 0.4559656564 -0.0779377154 66 0.7679481
337        TTLL9             CYT           NA            NA 66        NA
338        TXLNA             CYT 0.1772431861 -0.2342395151 66 0.4843293
339       TXNDC8             CYT 0.1749327333 -0.1604550403 66 0.4843293
340        U2AF1             CYT 0.3430449908 -0.1260023839 66 0.6986404
341          UBC             CYT 0.7315886825  0.1163753977 66 0.9155831
342        UBXN4             CYT 0.3088094380 -0.1240598018 66 0.6406357
343         UPP1             CYT 0.0993374304 -0.3126746418 66 0.4274583
344         USO1             CYT 0.9648816765  0.0075206341 66 0.9883359
345          VHL             CYT 0.0195090338 -0.5278277048 66 0.1645371
346        WASF3             CYT 0.0189776363 -0.3252356569 66 0.1645371
347          WT1             CYT 0.6494505788  0.1684013295 66 0.9016797
348         XCL1             CYT           NA            NA 66        NA
349        XIRP2             CYT 0.1763654104 -0.3196851763 66 0.4843293
350         XPO1             CYT           NA            NA 66        NA
351        ZFHX3             CYT 0.2504392309 -0.1235388227 66 0.5780215
352      ZFP36L1             CYT 0.9719159506  0.0053788423 66 0.9883359
353       ZNF180             CYT 0.5350707548 -0.0811770146 66 0.8351104
354       ZNF471             CYT 0.1180041343 -0.1343807268 66 0.4478793
355       ZNF483             CYT 0.1749327333 -0.1604550403 66 0.4843293
356       ZNF492             CYT 0.7081611335  0.0598735317 66 0.9155831
357       ZNF620             CYT 0.1446213643 -0.1980497415 66 0.4623534
358       ZNF706             CYT 0.5537416381  0.6922320814 66 0.8368765
359       ZNF750             CYT 0.1003821088 -0.4756575155 66 0.4274583
360       ZRANB3             CYT 0.3088094380 -0.1240598018 66 0.6406357

I don’t believe there’s anything here, but I haven’t run the most recent version. So run this.

Total nonsynonymous variant burden

Next, we’ll look at the overall distribution of neoepitope burden and neoepitope elimination scores in our cohort.

Control for tumour content.

Neoepitope burden

neoediting_res <- supp_neoediting(neoediting_outdir, ihc_table, db_path, tree_branch_data, 
    wtfilter = TRUE, full_epitopes = FALSE, snv_cluster_files = snv_cluster_files)

snv_load <- neoediting_res$nonsynonymous %>% group_by(sample_id, patient_id) %>% 
    summarise(nnonsyn = n(), nepitopes = length(which(`NetMHCpan MT Percentile` <= 
        2))) %>% plyr::rename(c(sample_id = "condensed_id"))

snv_load$epitope_pct <- with(snv_load, nepitopes/nnonsyn)
median(snv_load$epitope_pct)
[1] 0.6875
ihc_table_subset <- subset(ihc_table, condensed_id %in% unique(somatic_snvs_filtered$condensed_id), 
    select = c("condensed_id", all_tiltypes))
ihc_cyt <- plyr::join(ihc_table_subset, cyt_expr_df)

ihc_cyt_snv <- plyr::join(snv_load %>% as.data.frame, ihc_cyt %>% as.data.frame)
cor1 <- with(ihc_cyt_snv, cor.test(E_CD8_density, nepitopes, method = "spearman"))

cor2 <- with(ihc_cyt_snv, cor.test(CYT, nepitopes, method = "spearman"))

pvals <- p.adjust(c(cor1$p.value, cor2$p.value), method = "BH")

pvals
[1] 0.07771216 0.21730229

None of these are significant after BH correction. Therefore, consistent with the findings in the Brown et al. paper, there is no significant correlation between neoepitope burden and immune covariates in HGSC. And note that these are technically done incorrectly, more correctly we should be either considering patient as a random effect or taking the average within each patient, i.e. as:

Random effect patient

mod1 <- lmer(E_CD8_density ~ nepitopes + (1 | patient_id), data = ihc_cyt_snv %>% 
    subset(!is.na(E_CD8_density)))
mod2 <- lmer(CYT ~ nepitopes + (1 | patient_id), data = ihc_cyt_snv %>% subset(!is.na(CYT)))
mod3 <- lmer(E_CD8_density ~ nnonsyn + (1 | patient_id), data = ihc_cyt_snv %>% 
    subset(!is.na(E_CD8_density)))
mod4 <- lmer(CYT ~ nnonsyn + (1 | patient_id), data = ihc_cyt_snv %>% subset(!is.na(CYT)))

mod1 %>% summary
Linear mixed model fit by REML t-tests use Satterthwaite approximations
  to degrees of freedom [lmerMod]
Formula: E_CD8_density ~ nepitopes + (1 | patient_id)
   Data: ihc_cyt_snv %>% subset(!is.na(E_CD8_density))

REML criterion at convergence: 547.5

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.0589 -0.3780 -0.1331  0.0828  3.4086 

Random effects:
 Groups     Name        Variance Std.Dev.
 patient_id (Intercept) 1841.0   42.91   
 Residual                845.8   29.08   
Number of obs: 55, groups:  patient_id, 13

Fixed effects:
            Estimate Std. Error       df t value Pr(>|t|)  
(Intercept) 38.18691   16.99028 23.97000   2.248   0.0341 *
nepitopes   -0.09494    0.38669 50.71000  -0.246   0.8070  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Correlation of Fixed Effects:
          (Intr)
nepitopes -0.669
mod2 %>% summary
Linear mixed model fit by REML t-tests use Satterthwaite approximations
  to degrees of freedom [lmerMod]
Formula: CYT ~ nepitopes + (1 | patient_id)
   Data: ihc_cyt_snv %>% subset(!is.na(CYT))

REML criterion at convergence: 163.6

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.08774 -0.53765  0.07283  0.47628  2.41896 

Random effects:
 Groups     Name        Variance Std.Dev.
 patient_id (Intercept) 1.2556   1.1205  
 Residual               0.5704   0.7552  
Number of obs: 56, groups:  patient_id, 13

Fixed effects:
             Estimate Std. Error        df t value Pr(>|t|)    
(Intercept)  7.170960   0.435442 22.980000  16.468 3.24e-14 ***
nepitopes   -0.004100   0.009981 51.420000  -0.411    0.683    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Correlation of Fixed Effects:
          (Intr)
nepitopes -0.660
mod3 %>% summary
Linear mixed model fit by REML t-tests use Satterthwaite approximations
  to degrees of freedom [lmerMod]
Formula: E_CD8_density ~ nnonsyn + (1 | patient_id)
   Data: ihc_cyt_snv %>% subset(!is.na(E_CD8_density))

REML criterion at convergence: 548

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.0510 -0.3571 -0.1283  0.0561  3.3920 

Random effects:
 Groups     Name        Variance Std.Dev.
 patient_id (Intercept) 1890.9   43.48   
 Residual                841.2   29.00   
Number of obs: 55, groups:  patient_id, 13

Fixed effects:
            Estimate Std. Error      df t value Pr(>|t|)  
(Intercept)  33.9913    18.3691 26.1300   1.850   0.0756 .
nnonsyn       0.0338     0.3206 50.3600   0.105   0.9165  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Correlation of Fixed Effects:
        (Intr)
nnonsyn -0.719
mod4 %>% summary
Linear mixed model fit by REML t-tests use Satterthwaite approximations
  to degrees of freedom [lmerMod]
Formula: CYT ~ nnonsyn + (1 | patient_id)
   Data: ihc_cyt_snv %>% subset(!is.na(CYT))

REML criterion at convergence: 162.5

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.00118 -0.53648  0.04014  0.52850  2.44067 

Random effects:
 Groups     Name        Variance Std.Dev.
 patient_id (Intercept) 1.2521   1.1190  
 Residual               0.5518   0.7428  
Number of obs: 56, groups:  patient_id, 13

Fixed effects:
             Estimate Std. Error        df t value Pr(>|t|)    
(Intercept)  7.486128   0.468666 26.310000  15.973 4.66e-15 ***
nnonsyn     -0.010580   0.008215 51.370000  -1.288    0.204    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Correlation of Fixed Effects:
        (Intr)
nnonsyn -0.718

Number of neoepitopes is still not significantly correlated with TIL or CYT within patients.

Patient average

ihc_cyt_snv_mean <- ihc_cyt_snv %>% subset(select = -c(condensed_id)) %>% group_by(patient_id) %>% 
    summarise_all(.funs = function(x) mean(x, na.rm = TRUE))
mod1 <- lm(E_CD8_density ~ nepitopes, data = ihc_cyt_snv_mean %>% subset(!is.na(E_CD8_density)))
mod2 <- lm(CYT ~ nepitopes, data = ihc_cyt_snv_mean %>% subset(!is.na(CYT)))
mod3 <- lm(E_CD8_density ~ nnonsyn, data = ihc_cyt_snv_mean %>% subset(!is.na(E_CD8_density)))
mod4 <- lm(CYT ~ nnonsyn, data = ihc_cyt_snv_mean %>% subset(!is.na(CYT)))

mod1 %>% summary

Call:
lm(formula = E_CD8_density ~ nepitopes, data = ihc_cyt_snv_mean %>% 
    subset(!is.na(E_CD8_density)))

Residuals:
   Min     1Q Median     3Q    Max 
-38.13 -27.02 -19.55  18.52 120.44 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)  
(Intercept)  45.7207    23.7871   1.922   0.0809 .
nepitopes    -0.3807     0.7019  -0.542   0.5983  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 45.92 on 11 degrees of freedom
Multiple R-squared:  0.02605,   Adjusted R-squared:  -0.06249 
F-statistic: 0.2942 on 1 and 11 DF,  p-value: 0.5983
mod2 %>% summary

Call:
lm(formula = CYT ~ nepitopes, data = ihc_cyt_snv_mean %>% subset(!is.na(CYT)))

Residuals:
     Min       1Q   Median       3Q      Max 
-2.04869 -0.77185  0.05659  0.42544  2.07090 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  7.36250    0.62851   11.71 1.49e-07 ***
nepitopes   -0.01094    0.01855   -0.59    0.567    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 1.213 on 11 degrees of freedom
Multiple R-squared:  0.03066,   Adjusted R-squared:  -0.05747 
F-statistic: 0.3479 on 1 and 11 DF,  p-value: 0.5672
mod3 %>% summary

Call:
lm(formula = E_CD8_density ~ nnonsyn, data = ihc_cyt_snv_mean %>% 
    subset(!is.na(E_CD8_density)))

Residuals:
   Min     1Q Median     3Q    Max 
-39.23 -27.20 -17.18  20.69 116.09 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)  
(Intercept)  55.2690    26.2040   2.109   0.0587 .
nnonsyn      -0.5028     0.5668  -0.887   0.3940  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 44.95 on 11 degrees of freedom
Multiple R-squared:  0.06676,   Adjusted R-squared:  -0.01808 
F-statistic: 0.7869 on 1 and 11 DF,  p-value: 0.394
mod4 %>% summary

Call:
lm(formula = CYT ~ nnonsyn, data = ihc_cyt_snv_mean %>% subset(!is.na(CYT)))

Residuals:
     Min       1Q   Median       3Q      Max 
-1.99441 -0.82854  0.04783  0.41722  2.18126 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)  7.373379   0.709770  10.388 5.05e-07 ***
nnonsyn     -0.007967   0.015353  -0.519    0.614    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 1.218 on 11 degrees of freedom
Multiple R-squared:  0.0239,    Adjusted R-squared:  -0.06484 
F-statistic: 0.2693 on 1 and 11 DF,  p-value: 0.6141

Still no significant correlation for either nonsynonymous SNV or neoantigen load. In fact, effect sizes are negative, not positive as typically seen (i.e. usually more neoepitopes = higher TIL densities/CYT activity).

Total neoepitope depletion signal

subclonal_rates <- data.frame(neoediting_res$subclonal_rates, muttype = "subclonal")
clonal_rates <- data.frame(neoediting_res$subclonal_rates, muttype = "clonal")

bound_rates <- rbind.fill(list(subclonal_rates, clonal_rates))

bound_rates$neoepitope_depletion <- with(bound_rates, obsratio/expratio)
p_neodepletion <- ggplot(bound_rates, aes(x = muttype, y = neoepitope_depletion)) + 
    stat_boxplot(geom = "errorbar", width = 0.3) + geom_boxplot(width = 0.5) + 
    theme_bw() + theme_Publication() + ithi.utils::theme_nature()

p_neodepletion

In other words, neoepitope depletion values do not significantly differ from 0 – consistent with the Hacohen results reported for ovarian (LINK FIGURE).

The difference between our analysis and Rooney’s, though, is that we look at INTRA-patient trends, whereas they look at INTER-patient trends. As with the Rooney paper, we do not find anything for ovarian when looking inter-patient (CONFIRM WHETHER THEY SPECIFICALLY REPORTED THIS).

LS0tCnRpdGxlOiAiUm9vbmV5IGNvbXBhcmlzb24iCi0tLQogICAgICAgICAgICAgICAgICAgICAgICBgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KCiMjIyMjIyMjIFNuYWtlbWFrZSBoZWFkZXIgIyMjIyMjIyMKbGlicmFyeShtZXRob2RzKQpTbmFrZW1ha2UgPC0gc2V0Q2xhc3MoCiAgICAiU25ha2VtYWtlIiwKICAgIHNsb3RzID0gYygKICAgICAgICBpbnB1dCA9ICJsaXN0IiwKICAgICAgICBvdXRwdXQgPSAibGlzdCIsCiAgICAgICAgcGFyYW1zID0gImxpc3QiLAogICAgICAgIHdpbGRjYXJkcyA9ICJsaXN0IiwKICAgICAgICB0aHJlYWRzID0gIm51bWVyaWMiLAogICAgICAgIGxvZyA9ICJsaXN0IiwKICAgICAgICByZXNvdXJjZXMgPSAibGlzdCIsCiAgICAgICAgY29uZmlnID0gImxpc3QiLAogICAgICAgIHJ1bGUgPSAiY2hhcmFjdGVyIgogICAgKQopCnNuYWtlbWFrZSA8LSBTbmFrZW1ha2UoCiAgICBpbnB1dCA9IGxpc3QoJy9zaGFobGFiL2FtY3BoZXJzb24vcHJvamVjdHMvaXRoMy9pdGgzL25vdGVib29rcy9iZXNwb2tlL2l0aF9zbnZzLnRzdicsICcvc2hhaGxhYi9hbHpoYW5nL3Byb2plY3RzL0lUSF9JbW11bmUvcmVzdWx0cy9uYW5vc3RyaW5nX3Jlc3VsdHMvaXRoX2Z1bGwvcWMvbGltbWFfcXVhbnRpbGUvbm9ybWFsaXplZF9leHByZXNzaW9uX3ZvYV9sYWJlbHNfZmlsdGVyZWQudHN2JywgJy9zaGFobGFiL2FsemhhbmcvcHJvamVjdHMvSVRIX0ltbXVuZS9wYXBlci9yZXN1bHRzL3RhYmxlcy9ydW4yL2Nsb25lcy9jbG9uZV9kYXRhLnRzdicsICcvc2hhaGxhYi9hbHpoYW5nL3Byb2plY3RzL0lUSF9JbW11bmUvcGFwZXIvcmVzdWx0cy90YWJsZXMvcnVuMi9paGNfdGFibGUudHN2JywgJ25vdGVib29rcy9yb29uZXlfY29tcGFyaXNvbi5SbWQnLCAnL3NoYWhsYWIvYWx6aGFuZy9wcm9qZWN0cy9JVEhfSW1tdW5lL3BhcGVyL3Jlc3VsdHMvdGFibGVzL3J1bjIvY2xvbmVzL2JyYW5jaF9kYXRhLnRzdicsICcvc2hhaGxhYi9hbHpoYW5nL3Byb2plY3RzL0lUSF9JbW11bmUvZGF0YS9leHByZXNzaW9uL25hbm9zdHJpbmcvcGFuY2FuY2VyX2Fubm90YXRpb25zLnRzdicsICcvc2hhaGxhYi9hbHpoYW5nL3Byb2plY3RzL0lUSF9JbW11bmUvcGFwZXIvcmVzdWx0cy90YWJsZXMvcnVuMi9zb21hdGljX2NvZGluZ192YXJpYW50cycsICcvc2hhaGxhYi9hbHpoYW5nL3BpcGVsaW5lX291dHB1dHMvaXRoX2ltbXVuZS9uZW9lZGl0aW5nL3J1bjYnLCAnL3NoYWhsYWIvYWx6aGFuZy9wcm9qZWN0cy9JVEhfSW1tdW5lL3BhcGVyL3Jlc3VsdHMvdGFibGVzL3J1bjIvY2xvbmVzL3Nudl9jbHVzdGVyL3BhdGllbnRfMS50c3YnLCAnL3NoYWhsYWIvYWx6aGFuZy9wcm9qZWN0cy9JVEhfSW1tdW5lL3BhcGVyL3Jlc3VsdHMvdGFibGVzL3J1bjIvY2xvbmVzL3Nudl9jbHVzdGVyL3BhdGllbnRfMi50c3YnLCAnL3NoYWhsYWIvYWx6aGFuZy9wcm9qZWN0cy9JVEhfSW1tdW5lL3BhcGVyL3Jlc3VsdHMvdGFibGVzL3J1bjIvY2xvbmVzL3Nudl9jbHVzdGVyL3BhdGllbnRfMy50c3YnLCAnL3NoYWhsYWIvYWx6aGFuZy9wcm9qZWN0cy9JVEhfSW1tdW5lL3BhcGVyL3Jlc3VsdHMvdGFibGVzL3J1bjIvY2xvbmVzL3Nudl9jbHVzdGVyL3BhdGllbnRfNC50c3YnLCAnL3NoYWhsYWIvYWx6aGFuZy9wcm9qZWN0cy9JVEhfSW1tdW5lL3BhcGVyL3Jlc3VsdHMvdGFibGVzL3J1bjIvY2xvbmVzL3Nudl9jbHVzdGVyL3BhdGllbnRfNy50c3YnLCAnL3NoYWhsYWIvYWx6aGFuZy9wcm9qZWN0cy9JVEhfSW1tdW5lL3BhcGVyL3Jlc3VsdHMvdGFibGVzL3J1bjIvY2xvbmVzL3Nudl9jbHVzdGVyL3BhdGllbnRfOS50c3YnLCAnL3NoYWhsYWIvYWx6aGFuZy9wcm9qZWN0cy9JVEhfSW1tdW5lL3BhcGVyL3Jlc3VsdHMvdGFibGVzL3J1bjIvY2xvbmVzL3Nudl9jbHVzdGVyL3BhdGllbnRfMTAudHN2JywgJy9zaGFobGFiL2FsemhhbmcvcHJvamVjdHMvSVRIX0ltbXVuZS9wYXBlci9yZXN1bHRzL3RhYmxlcy9ydW4yL2Nsb25lcy9zbnZfY2x1c3Rlci9wYXRpZW50XzExLnRzdicsICcvc2hhaGxhYi9hbHpoYW5nL3Byb2plY3RzL0lUSF9JbW11bmUvcGFwZXIvcmVzdWx0cy90YWJsZXMvcnVuMi9jbG9uZXMvc252X2NsdXN0ZXIvcGF0aWVudF8xMi50c3YnLCAnL3NoYWhsYWIvYWx6aGFuZy9wcm9qZWN0cy9JVEhfSW1tdW5lL3BhcGVyL3Jlc3VsdHMvdGFibGVzL3J1bjIvY2xvbmVzL3Nudl9jbHVzdGVyL3BhdGllbnRfMTMudHN2JywgJy9zaGFobGFiL2FsemhhbmcvcHJvamVjdHMvSVRIX0ltbXVuZS9wYXBlci9yZXN1bHRzL3RhYmxlcy9ydW4yL2Nsb25lcy9zbnZfY2x1c3Rlci9wYXRpZW50XzE0LnRzdicsICcvc2hhaGxhYi9hbHpoYW5nL3Byb2plY3RzL0lUSF9JbW11bmUvcGFwZXIvcmVzdWx0cy90YWJsZXMvcnVuMi9jbG9uZXMvc252X2NsdXN0ZXIvcGF0aWVudF8xNS50c3YnLCAnL3NoYWhsYWIvYWx6aGFuZy9wcm9qZWN0cy9JVEhfSW1tdW5lL3BhcGVyL3Jlc3VsdHMvdGFibGVzL3J1bjIvY2xvbmVzL3Nudl9jbHVzdGVyL3BhdGllbnRfMTYudHN2JywgJy9zaGFobGFiL2FsemhhbmcvcHJvamVjdHMvSVRIX0ltbXVuZS9wYXBlci9yZXN1bHRzL3RhYmxlcy9ydW4yL2Nsb25lcy9zbnZfY2x1c3Rlci9wYXRpZW50XzE3LnRzdicsICcvc2hhaGxhYi9hbHpoYW5nL3Byb2plY3RzL0lUSF9JbW11bmUvcGFwZXIvcmVzdWx0cy90YWJsZXMvcnVuMi9jbG9uZXMvdHJlZV9kYXRhLnRzdicsICcvc2hhaGxhYi9hbWNwaGVyc29uL3Byb2plY3RzL2l0aDMvaXRoMy9ub3RlYm9va3MvYmVzcG9rZS9pdGhfYnJlYWtwb2ludHMudHN2JywgIm5hbm9zdHJpbmdfZGF0YSIgPSAnL3NoYWhsYWIvYWx6aGFuZy9wcm9qZWN0cy9JVEhfSW1tdW5lL3Jlc3VsdHMvbmFub3N0cmluZ19yZXN1bHRzL2l0aF9mdWxsL3FjL2xpbW1hX3F1YW50aWxlL25vcm1hbGl6ZWRfZXhwcmVzc2lvbl92b2FfbGFiZWxzX2ZpbHRlcmVkLnRzdicsICJjbG9uZV9wcmV2YWxlbmNlX2ZpbGUiID0gJy9zaGFobGFiL2FsemhhbmcvcHJvamVjdHMvSVRIX0ltbXVuZS9wYXBlci9yZXN1bHRzL3RhYmxlcy9ydW4yL2Nsb25lcy9jbG9uZV9kYXRhLnRzdicsICJpaGNfdGFibGUiID0gJy9zaGFobGFiL2FsemhhbmcvcHJvamVjdHMvSVRIX0ltbXVuZS9wYXBlci9yZXN1bHRzL3RhYmxlcy9ydW4yL2loY190YWJsZS50c3YnLCAic252X3RhYmxlIiA9ICcvc2hhaGxhYi9hbWNwaGVyc29uL3Byb2plY3RzL2l0aDMvaXRoMy9ub3RlYm9va3MvYmVzcG9rZS9pdGhfc252cy50c3YnLCAiY2xvbmVfYnJhbmNoX2xlbmd0aF9maWxlIiA9ICcvc2hhaGxhYi9hbHpoYW5nL3Byb2plY3RzL0lUSF9JbW11bmUvcGFwZXIvcmVzdWx0cy90YWJsZXMvcnVuMi9jbG9uZXMvYnJhbmNoX2RhdGEudHN2JywgIm5hbm9zdHJpbmdfYW5ub3RhdGlvbnMiID0gJy9zaGFobGFiL2FsemhhbmcvcHJvamVjdHMvSVRIX0ltbXVuZS9kYXRhL2V4cHJlc3Npb24vbmFub3N0cmluZy9wYW5jYW5jZXJfYW5ub3RhdGlvbnMudHN2JywgInNvbWF0aWNfY29kaW5nX3Jlc3VsdF9kaXIiID0gJy9zaGFobGFiL2FsemhhbmcvcHJvamVjdHMvSVRIX0ltbXVuZS9wYXBlci9yZXN1bHRzL3RhYmxlcy9ydW4yL3NvbWF0aWNfY29kaW5nX3ZhcmlhbnRzJywgIm5lb2VkaXRpbmdfb3V0ZGlyIiA9ICcvc2hhaGxhYi9hbHpoYW5nL3BpcGVsaW5lX291dHB1dHMvaXRoX2ltbXVuZS9uZW9lZGl0aW5nL3J1bjYnLCAic252X2NsdXN0ZXJfZmlsZXMiID0gYygnL3NoYWhsYWIvYWx6aGFuZy9wcm9qZWN0cy9JVEhfSW1tdW5lL3BhcGVyL3Jlc3VsdHMvdGFibGVzL3J1bjIvY2xvbmVzL3Nudl9jbHVzdGVyL3BhdGllbnRfMS50c3YnLCAnL3NoYWhsYWIvYWx6aGFuZy9wcm9qZWN0cy9JVEhfSW1tdW5lL3BhcGVyL3Jlc3VsdHMvdGFibGVzL3J1bjIvY2xvbmVzL3Nudl9jbHVzdGVyL3BhdGllbnRfMi50c3YnLCAnL3NoYWhsYWIvYWx6aGFuZy9wcm9qZWN0cy9JVEhfSW1tdW5lL3BhcGVyL3Jlc3VsdHMvdGFibGVzL3J1bjIvY2xvbmVzL3Nudl9jbHVzdGVyL3BhdGllbnRfMy50c3YnLCAnL3NoYWhsYWIvYWx6aGFuZy9wcm9qZWN0cy9JVEhfSW1tdW5lL3BhcGVyL3Jlc3VsdHMvdGFibGVzL3J1bjIvY2xvbmVzL3Nudl9jbHVzdGVyL3BhdGllbnRfNC50c3YnLCAnL3NoYWhsYWIvYWx6aGFuZy9wcm9qZWN0cy9JVEhfSW1tdW5lL3BhcGVyL3Jlc3VsdHMvdGFibGVzL3J1bjIvY2xvbmVzL3Nudl9jbHVzdGVyL3BhdGllbnRfNy50c3YnLCAnL3NoYWhsYWIvYWx6aGFuZy9wcm9qZWN0cy9JVEhfSW1tdW5lL3BhcGVyL3Jlc3VsdHMvdGFibGVzL3J1bjIvY2xvbmVzL3Nudl9jbHVzdGVyL3BhdGllbnRfOS50c3YnLCAnL3NoYWhsYWIvYWx6aGFuZy9wcm9qZWN0cy9JVEhfSW1tdW5lL3BhcGVyL3Jlc3VsdHMvdGFibGVzL3J1bjIvY2xvbmVzL3Nudl9jbHVzdGVyL3BhdGllbnRfMTAudHN2JywgJy9zaGFobGFiL2FsemhhbmcvcHJvamVjdHMvSVRIX0ltbXVuZS9wYXBlci9yZXN1bHRzL3RhYmxlcy9ydW4yL2Nsb25lcy9zbnZfY2x1c3Rlci9wYXRpZW50XzExLnRzdicsICcvc2hhaGxhYi9hbHpoYW5nL3Byb2plY3RzL0lUSF9JbW11bmUvcGFwZXIvcmVzdWx0cy90YWJsZXMvcnVuMi9jbG9uZXMvc252X2NsdXN0ZXIvcGF0aWVudF8xMi50c3YnLCAnL3NoYWhsYWIvYWx6aGFuZy9wcm9qZWN0cy9JVEhfSW1tdW5lL3BhcGVyL3Jlc3VsdHMvdGFibGVzL3J1bjIvY2xvbmVzL3Nudl9jbHVzdGVyL3BhdGllbnRfMTMudHN2JywgJy9zaGFobGFiL2FsemhhbmcvcHJvamVjdHMvSVRIX0ltbXVuZS9wYXBlci9yZXN1bHRzL3RhYmxlcy9ydW4yL2Nsb25lcy9zbnZfY2x1c3Rlci9wYXRpZW50XzE0LnRzdicsICcvc2hhaGxhYi9hbHpoYW5nL3Byb2plY3RzL0lUSF9JbW11bmUvcGFwZXIvcmVzdWx0cy90YWJsZXMvcnVuMi9jbG9uZXMvc252X2NsdXN0ZXIvcGF0aWVudF8xNS50c3YnLCAnL3NoYWhsYWIvYWx6aGFuZy9wcm9qZWN0cy9JVEhfSW1tdW5lL3BhcGVyL3Jlc3VsdHMvdGFibGVzL3J1bjIvY2xvbmVzL3Nudl9jbHVzdGVyL3BhdGllbnRfMTYudHN2JywgJy9zaGFobGFiL2FsemhhbmcvcHJvamVjdHMvSVRIX0ltbXVuZS9wYXBlci9yZXN1bHRzL3RhYmxlcy9ydW4yL2Nsb25lcy9zbnZfY2x1c3Rlci9wYXRpZW50XzE3LnRzdicpLCAibm90ZWJvb2siID0gJ25vdGVib29rcy9yb29uZXlfY29tcGFyaXNvbi5SbWQnLCAiY2xvbmVfdHJlZV9maWxlIiA9ICcvc2hhaGxhYi9hbHpoYW5nL3Byb2plY3RzL0lUSF9JbW11bmUvcGFwZXIvcmVzdWx0cy90YWJsZXMvcnVuMi9jbG9uZXMvdHJlZV9kYXRhLnRzdicsICJicmVha3BvaW50X3RhYmxlIiA9ICcvc2hhaGxhYi9hbWNwaGVyc29uL3Byb2plY3RzL2l0aDMvaXRoMy9ub3RlYm9va3MvYmVzcG9rZS9pdGhfYnJlYWtwb2ludHMudHN2JyksCiAgICBvdXRwdXQgPSBsaXN0KCcvc2hhaGxhYi9hbHpoYW5nL3Byb2plY3RzL0lUSF9JbW11bmUvcGFwZXIvcmVzdWx0cy9yZXZpZXcvbm90ZWJvb2tzL3J1bjIvcm9vbmV5X2NvbXBhcmlzb24ubmIuaHRtbCcpLAogICAgcGFyYW1zID0gbGlzdChjKCdUX0NEOF9kZW5zaXR5JywgJ1RfQ0Q0X2RlbnNpdHknLCAnVF9DRDIwX2RlbnNpdHknLCAnVF9QbGFzbWFfZGVuc2l0eScsICdFX0NEOF9kZW5zaXR5JywgJ0VfQ0Q0X2RlbnNpdHknLCAnRV9DRDIwX2RlbnNpdHknLCAnRV9QbGFzbWFfZGVuc2l0eScsICdTX0NEOF9kZW5zaXR5JywgJ1NfQ0Q0X2RlbnNpdHknLCAnU19DRDIwX2RlbnNpdHknLCAnU19QbGFzbWFfZGVuc2l0eScpLCAnL3NoYWhsYWIvYWx6aGFuZy9wcm9qZWN0cy9JVEhfSW1tdW5lL2V4dGVybmFsL290aGVyX3BhcGVycy9tbWM2Lnhsc3gnLCAncm9vbmV5X2NvbXBhcmlzb25fYW5hbHlzaXMnLCAnL3NoYWhsYWIvYWx6aGFuZy9wcm9qZWN0cy9JVEhfSW1tdW5lL21ldGFkYXRhL2RiL2ltbXVuZV9wcm9qZWN0LnNxbGl0ZTMnLCAnL3NoYWhsYWIvYWx6aGFuZy9kYXRhL2dlbm9tZS9oZzE5L3JlZnNlcV9nZW5lcy5iZWQnLCAiYWxsX3RpbHR5cGVzIiA9IGMoJ1RfQ0Q4X2RlbnNpdHknLCAnVF9DRDRfZGVuc2l0eScsICdUX0NEMjBfZGVuc2l0eScsICdUX1BsYXNtYV9kZW5zaXR5JywgJ0VfQ0Q4X2RlbnNpdHknLCAnRV9DRDRfZGVuc2l0eScsICdFX0NEMjBfZGVuc2l0eScsICdFX1BsYXNtYV9kZW5zaXR5JywgJ1NfQ0Q4X2RlbnNpdHknLCAnU19DRDRfZGVuc2l0eScsICdTX0NEMjBfZGVuc2l0eScsICdTX1BsYXNtYV9kZW5zaXR5JyksICJyZWZzZXFfZ2VuZV9maWxlIiA9ICcvc2hhaGxhYi9hbHpoYW5nL2RhdGEvZ2Vub21lL2hnMTkvcmVmc2VxX2dlbmVzLmJlZCcsICJuYW1lIiA9ICdyb29uZXlfY29tcGFyaXNvbl9hbmFseXNpcycsICJkYiIgPSAnL3NoYWhsYWIvYWx6aGFuZy9wcm9qZWN0cy9JVEhfSW1tdW5lL21ldGFkYXRhL2RiL2ltbXVuZV9wcm9qZWN0LnNxbGl0ZTMnLCAicm9vbmV5X211dHNpZ2N2X2ZpbGUiID0gJy9zaGFobGFiL2FsemhhbmcvcHJvamVjdHMvSVRIX0ltbXVuZS9leHRlcm5hbC9vdGhlcl9wYXBlcnMvbW1jNi54bHN4JyksCiAgICB3aWxkY2FyZHMgPSBsaXN0KCksCiAgICB0aHJlYWRzID0gMSwKICAgIGxvZyA9IGxpc3QoJy9zaGFobGFiL2FsemhhbmcvY2x1c3R0bXAvcGFwZXJyZXZpZXcyL25vdGVib29rcy9yb29uZXlfY29tcGFyaXNvbl9hbmFseXNpcy5sb2cnKSwKICAgIHJlc291cmNlcyA9IGxpc3QoKSwKICAgIGNvbmZpZyA9IGxpc3QoIm5hbm9zdHJpbmdfZGF0YSIgPSAnL3NoYWhsYWIvYWx6aGFuZy9wcm9qZWN0cy9JVEhfSW1tdW5lL3Jlc3VsdHMvbmFub3N0cmluZ19yZXN1bHRzL2l0aF9mdWxsL3FjL2xpbW1hX3F1YW50aWxlL25vcm1hbGl6ZWRfZXhwcmVzc2lvbl92b2FfbGFiZWxzX2ZpbHRlcmVkLnRzdicsICJ0aWxzX2Zvcl92YXJpYWJpbGl0eSIgPSBjKCdUX0NEOF9kZW5zaXR5JywgJ1RfQ0Q0X2RlbnNpdHknLCAnVF9DRDIwX2RlbnNpdHknLCAnVF9QbGFzbWFfZGVuc2l0eScpLCAibmVvZWRpdGluZ19vdXRkaXIiID0gJy9zaGFobGFiL2FsemhhbmcvcGlwZWxpbmVfb3V0cHV0cy9pdGhfaW1tdW5lL25lb2VkaXRpbmcvcnVuNicsICJzbnZfdGFibGUiID0gJy9zaGFobGFiL2FtY3BoZXJzb24vcHJvamVjdHMvaXRoMy9pdGgzL25vdGVib29rcy9iZXNwb2tlL2l0aF9zbnZzLnRzdicsICJ0b3RhbF90aWx0eXBlcyIgPSBjKCdUX0NEOF9kZW5zaXR5JywgJ1RfQ0Q0X2RlbnNpdHknLCAnVF9DRDIwX2RlbnNpdHknLCAnVF9QbGFzbWFfZGVuc2l0eScpLCAiaXRoX3N0YXRfdHlwZXMiID0gYygnZW50cm9weScsICdwb3N0cHJvY2Vzc2VkX2RpdmVyZ2VuY2UnLCAnY29tYmluZWRfaXRoX25vcm1hbGl6ZWQnLCAncHJvcG9ydGlvbl9zdWJjbG9uYWwnKSwgImNsb2xhX3Jlc3VsdF9maWxlIiA9ICcvc2hhaGxhYi9hbHpoYW5nL3BpcGVsaW5lX291dHB1dHMvaXRoX2ltbXVuZS9jbG9sYS9ydW40L2Nsb2xhX2NvbmRlbnNlZF9yZXN1bHRzL2JldGEvY2xvbGFfcmVzdWx0cy50c3YnLCAibG9nZGlyIiA9ICcvc2hhaGxhYi9hbHpoYW5nL2NsdXN0dG1wL3BhcGVycmV2aWV3MicsICJ0aWxjbHVzdGVyX3N1cGVydmlzZWRfaXB5bmIiID0gJy9zaGFobGFiL2FsemhhbmcvcHJvamVjdHMvSVRIX0ltbXVuZS9wYXBlci9yZXZpZXcvaXB5L3RpbGNsdXN0ZXJfc3VwZXJ2aXNlZG11bHRpY2xhc3MuaXB5bmInLCAiaWNnY19zdWJ0eXBlcyIgPSAnL3NoYWhsYWIvYWx6aGFuZy9kYXRhL0lDR0MvaWNnY19wcmltYXJ5X3R1bW91cl9zdWJ0eXBlcy50c3YnLCAiZXBpdG9wZXNfdW5pcXVlX2ZpbHRlcmVkIiA9ICcvc2hhaGxhYi9hbHpoYW5nL3Byb2plY3RzL0lUSF9JbW11bmUvcGFwZXIvcmVzdWx0cy90YWJsZXMvcnVuMi9lcGl0b3Blc191bmlxdWVfZmlsdGVyZWQudHN2JywgImJlbmNobWFya2RpciIgPSAnL3NoYWhsYWIvYWx6aGFuZy9iZW5jaG1hcmtzL3BhcGVycmV2aWV3MicsICJpdGhfc3RhdHMiID0gJy9zaGFobGFiL2FsemhhbmcvcHJvamVjdHMvSVRIX0ltbXVuZS9wYXBlci9yZXN1bHRzL3RhYmxlcy9ydW4yL2l0aF9zdGF0aXN0aWNzLnRzdicsICJpZ3BhcnRpdGlvbl9vdXRkaXIiID0gJy9zaGFobGFiL2FsemhhbmcvcGlwZWxpbmVfb3V0cHV0cy9pdGhfaW1tdW5lL2lncGFydGl0aW9uL3J1bjIyJywgImljZ2Nfc3BlY2ltZW4iID0gJy9zaGFobGFiL2FsemhhbmcvZGF0YS9JQ0dDL3NwZWNpbWVuLnRzdicsICJwcmV2YWxlbmNlX3RocmVzaG9sZCIgPSAwLjAxLCAicGF0aWVudHNfZm9yX2Nsb25hbCIgPSBjKDEsIDIsIDMsIDQsIDcsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNyksICJpaGNfZmVhdHVyZXNfb3V0cHV0IiA9ICcvc2hhaGxhYi9hbHpoYW5nL3Byb2plY3RzL0lUSF9JbW11bmUvcGFwZXIvcmVzdWx0cy9pbnRlcm1lZGlhdGVzL3J1bjIvaWhjX2ZlYXR1cmVzX291dHB1dC50eHQnLCAidGlsX2NsdXN0ZXJzX291dHB1dCIgPSAnL3NoYWhsYWIvYWx6aGFuZy9wcm9qZWN0cy9JVEhfSW1tdW5lL3BhcGVyL3Jlc3VsdHMvaW50ZXJtZWRpYXRlcy9ydW4yL3RpbF9jbHVzdGVyc19vdXRwdXQudHh0JywgInJvb25leV9tdXRzaWdjdl9maWxlIiA9ICcvc2hhaGxhYi9hbHpoYW5nL3Byb2plY3RzL0lUSF9JbW11bmUvZXh0ZXJuYWwvb3RoZXJfcGFwZXJzL21tYzYueGxzeCcsICJ4Y3JfdGFibGUiID0gJy9zaGFobGFiL2FsemhhbmcvcHJvamVjdHMvSVRIX0ltbXVuZS9wYXBlci9yZXN1bHRzL3RhYmxlcy9ydW4yL3hjcl90YWJsZS50c3YnLCAiaW1hZ2Vfc3VtbWFyeSIgPSAnL3NoYWhsYWIvYWx6aGFuZy9kYXRhL2l0aGkveXVhbl9oZWNyX2ltYWdlX3Jlc3VsdHMuY3N2JywgInNudl9jbHVzdGVyX2RpciIgPSAnL3NoYWhsYWIvYWx6aGFuZy9wcm9qZWN0cy9JVEhfSW1tdW5lL3BhcGVyL3Jlc3VsdHMvdGFibGVzL3J1bjIvY2xvbmVzL3Nudl9jbHVzdGVyJywgInRpbHNfZm9yX2NsdXN0ZXIiID0gYygnRV9DRDhfZGVuc2l0eScsICdFX0NENF9kZW5zaXR5JywgJ0VfQ0QyMF9kZW5zaXR5JywgJ0VfUGxhc21hX2RlbnNpdHknLCAnU19DRDhfZGVuc2l0eScsICdTX0NENF9kZW5zaXR5JywgJ1NfQ0QyMF9kZW5zaXR5JywgJ1NfUGxhc21hX2RlbnNpdHknKSwgIml0aF9pY2djX2JjIiA9ICcvc2hhaGxhYi9hbHpoYW5nL3Byb2plY3RzL0lUSF9JbW11bmUvcGFwZXIvcmVzdWx0cy90YWJsZXMvcnVuMi9pdGhfaWNnY19tZXJnZWRfYmMudHN2JywgImRpc3RhbmNlX21ldGhvZCIgPSAnaG9ybicsICJyZW1peHRfY2VsbHVsYXJpdHlfcGxvaWR5IiA9ICcvc2hhaGxhYi9hbHpoYW5nL3Byb2plY3RzL0lUSF9JbW11bmUvcGFwZXIvcmVzdWx0cy90YWJsZXMvcnVuMi9yZW1peHRfY2VsbHVsYXJpdHlfcGxvaWR5LnRzdicsICJyZWZzZXFfZ2VuZV9maWxlIiA9ICcvc2hhaGxhYi9hbHpoYW5nL2RhdGEvZ2Vub21lL2hnMTkvcmVmc2VxX2dlbmVzLmJlZCcsICJjbG9uZV90cmVlcyIgPSAnL3NoYWhsYWIvYWx6aGFuZy9wcm9qZWN0cy9JVEhfSW1tdW5lL3BhcGVyL3Jlc3VsdHMvdGFibGVzL3J1bjIvY2xvbmVzL3RyZWVfZGF0YS50c3YnLCAibW9sc3VidHlwZXMiID0gJy9zaGFobGFiL2FsemhhbmcvcHJvamVjdHMvSVRIX0ltbXVuZS9wYXBlci9yZXN1bHRzL3RhYmxlcy9ydW4yL21vbHN1YnR5cGVzLnRzdicsICJuYW5vc3RyaW5nX2Fubm90YXRpb25zIiA9ICcvc2hhaGxhYi9hbHpoYW5nL3Byb2plY3RzL0lUSF9JbW11bmUvZGF0YS9leHByZXNzaW9uL25hbm9zdHJpbmcvcGFuY2FuY2VyX2Fubm90YXRpb25zLnRzdicsICJhbGxfdGlsdHlwZXMiID0gYygnVF9DRDhfZGVuc2l0eScsICdUX0NENF9kZW5zaXR5JywgJ1RfQ0QyMF9kZW5zaXR5JywgJ1RfUGxhc21hX2RlbnNpdHknLCAnRV9DRDhfZGVuc2l0eScsICdFX0NENF9kZW5zaXR5JywgJ0VfQ0QyMF9kZW5zaXR5JywgJ0VfUGxhc21hX2RlbnNpdHknLCAnU19DRDhfZGVuc2l0eScsICdTX0NENF9kZW5zaXR5JywgJ1NfQ0QyMF9kZW5zaXR5JywgJ1NfUGxhc21hX2RlbnNpdHknKSwgIm1tY3RtX2ZpbmFsX3BhdGllbnRfZGlyIiA9ICcvc2hhaGxhYi9hbHpoYW5nL3Byb2plY3RzL0lUSF9JbW11bmUvcmVzdWx0cy9tbWN0bV9yZXN1bHRzL2l0aF9ieS1wYXRpZW50X3dpdGgtb3YnLCAidGFibGVfZGlyIiA9ICcvc2hhaGxhYi9hbHpoYW5nL3Byb2plY3RzL0lUSF9JbW11bmUvcGFwZXIvcmVzdWx0cy9yZXZpZXcvdGFibGVzL3J1bjInLCAiaW1hZ2Vfc3VtbWFyeTIiID0gJy9zaGFobGFiL2FsemhhbmcvZGF0YS9pdGhpL3l1YW5faGVjcl9pbWFnZV9yZXN1bHRzXzIuY3N2JywgInR1bW91cl9wdXJpdHkiID0gJy9zaGFobGFiL2FsemhhbmcvcHJvamVjdHMvSVRIX0ltbXVuZS9wYXBlci9yZXN1bHRzL3RhYmxlcy9ydW4yL3R1bW91cl9wdXJpdHkudHN2JywgImJjcl9kaXZlcnNpdHkiID0gJy9zaGFobGFiL2FsemhhbmcvcGlwZWxpbmVfb3V0cHV0cy9pdGhfaW1tdW5lL21peGNyL21peGNyX3J1bnMvaXRoXzFfMl8zL21peGNyNS9wb3N0cHJvY2Vzcy9JR0gvcG9zdGZpbHRlcl9kaXZlcnNpdHlfc3RhdHMvZGl2ZXJzaXR5LnN0cmljdC5yZXNhbXBsZWQudHh0JywgImloY190YWJsZSIgPSAnL3NoYWhsYWIvYWx6aGFuZy9wcm9qZWN0cy9JVEhfSW1tdW5lL3BhcGVyL3Jlc3VsdHMvdGFibGVzL3J1bjIvaWhjX3RhYmxlLnRzdicsICJjbG9uZV9icmFuY2hfbGVuZ3RocyIgPSAnL3NoYWhsYWIvYWx6aGFuZy9wcm9qZWN0cy9JVEhfSW1tdW5lL3BhcGVyL3Jlc3VsdHMvdGFibGVzL3J1bjIvY2xvbmVzL2JyYW5jaF9kYXRhLnRzdicsICJjbG9uZV9wcmV2YWxlbmNlcyIgPSAnL3NoYWhsYWIvYWx6aGFuZy9wcm9qZWN0cy9JVEhfSW1tdW5lL3BhcGVyL3Jlc3VsdHMvdGFibGVzL3J1bjIvY2xvbmVzL2Nsb25lX2RhdGEudHN2JywgImNvcHludW1iZXJfdGFibGUiID0gJy9zaGFobGFiL2FsemhhbmcvZGF0YS9pdGhpL21hc3Rlcl9jb3B5bnVtYmVyX2ZpbGUudHN2JywgImhlX3Jlc3VsdHNfZGlyIiA9ICcvc2hhaGxhYi9hbHpoYW5nL2RhdGEvaXRoaS9maW5uX3Jlc3VsdHMvaGVfb3V0cHV0X05vdjI5JywgImRiIiA9ICcvc2hhaGxhYi9hbHpoYW5nL3Byb2plY3RzL0lUSF9JbW11bmUvbWV0YWRhdGEvZGIvaW1tdW5lX3Byb2plY3Quc3FsaXRlMycsICJzb21hdGljX2NvZGluZ19yZXN1bHRfZGlyIiA9ICcvc2hhaGxhYi9hbHpoYW5nL3Byb2plY3RzL0lUSF9JbW11bmUvcGFwZXIvcmVzdWx0cy90YWJsZXMvcnVuMi9zb21hdGljX2NvZGluZ192YXJpYW50cycsICJhcnJheV9leHByZXNzaW9uX2ZpbGUiID0gJy9zaGFobGFiL2FsemhhbmcvcHJvamVjdHMvSVRIX0ltbXVuZS9kYXRhL2V4cHJlc3Npb24vYXJyYXkvZ2VuZV9leHByc19ybWFfYmF0Y2hfY29ycmVjdGVkLnR4dCcsICJub3RlYm9va19kaXIiID0gJy9zaGFobGFiL2FsemhhbmcvcHJvamVjdHMvSVRIX0ltbXVuZS9wYXBlci9yZXN1bHRzL3Jldmlldy9ub3RlYm9va3MvcnVuMicsICJrbm93bl9zdWJ0eXBlc19hcnJheSIgPSAnL3NoYWhsYWIvYWx6aGFuZy9wcm9qZWN0cy9JVEhfSW1tdW5lL2RhdGEvZXhwcmVzc2lvbi9hcnJheS9zdWJ0eXBlcy9rbm93bl9zdWJ0eXBlcy50c3YnLCAidmFyaWFiaWxpdHlfdHlwZSIgPSAnc3RhYmlsaXplJywgInRjcl9kaXZlcnNpdHkiID0gJy9zaGFobGFiL2FsemhhbmcvcGlwZWxpbmVfb3V0cHV0cy9pdGhfaW1tdW5lL21peGNyL21peGNyX3J1bnMvaXRoXzFfMl8zL21peGNyNS9wb3N0cHJvY2Vzcy9UUkIvcG9zdGZpbHRlcl9kaXZlcnNpdHlfc3RhdHMvZGl2ZXJzaXR5LnN0cmljdC5yZXNhbXBsZWQudHh0JywgImJyZWFrcG9pbnRfdGFibGUiID0gJy9zaGFobGFiL2FtY3BoZXJzb24vcHJvamVjdHMvaXRoMy9pdGgzL25vdGVib29rcy9iZXNwb2tlL2l0aF9icmVha3BvaW50cy50c3YnLCAiZmlubmhlX3BpcGVsaW5lX3Jlc3VsdHNfZGlyIiA9ICcvc2hhaGxhYi9hbHpoYW5nL3BpcGVsaW5lX291dHB1dHMvaXRoX2ltbXVuZS9maW5uaGUvcnVuMScpLAogICAgcnVsZSA9ICdyb29uZXlfY29tcGFyaXNvbl9hbmFseXNpcycKKQojIyMjIyMjIyBPcmlnaW5hbCBzY3JpcHQgIyMjIyMjIyMjCgogICAgICAgICAgICAgICAgICAgICAgICBgYGAKCgojIyBTZXR1cAoKYGBge3IgZ2xvYmFsX2NodW5rX29wdGlvbnMsIGluY2x1ZGU9RkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSwgdGlkeT1UUlVFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBjYWNoZT1UUlVFKSAjY2FjaGU9VFJVRQpgYGAKCmBgYHtyfQpsaWJyYXJ5KGl0aGkudXRpbHMpCmxvYWRfYmFzZV9saWJzKCkKCmxpYnJhcnkobWV0aG9kcykKbGlicmFyeShiZWRyKQpsaWJyYXJ5KGJpb21hUnQpCmxpYnJhcnkoQlNnZW5vbWUuSHNhcGllbnMuVUNTQy5oZzE5KQpsaWJyYXJ5KGdkYXRhKQoKbGlicmFyeShpdGhpLm1ldGEpCmxpYnJhcnkoaXRoaS5maWd1cmVzKQpsaWJyYXJ5KGl0aGkudXRpbHMpCmxpYnJhcnkoaXRoaS5leHByKQpsaWJyYXJ5KGl0aGkuc2VxKQpsaWJyYXJ5KGl0aGkuYmVkKQpsaWJyYXJ5KGl0aGkuY2xvbmVzKQpsaWJyYXJ5KGl0aGkuc3VwcCkKYGBgCgpgYGB7cn0KbmFub3N0cmluZ19kYXRhX3BhdGggPC0gc25ha2VtYWtlQGlucHV0JG5hbm9zdHJpbmdfZGF0YQpuYW5vc3RyaW5nX2Fubm90YXRpb25zX3BhdGggPC0gc25ha2VtYWtlQGlucHV0JG5hbm9zdHJpbmdfYW5ub3RhdGlvbnMKaWhjX3RhYmxlX3BhdGggPC0gc25ha2VtYWtlQGlucHV0JGloY190YWJsZQptYXN0ZXJfdmFyaWFudF9maWxlIDwtIHNuYWtlbWFrZUBpbnB1dCRzbnZfdGFibGUKbWFzdGVyX2JyZWFrcG9pbnRfZmlsZSA8LSBzbmFrZW1ha2VAaW5wdXQkYnJlYWtwb2ludF90YWJsZQpzb21hdGljX2NvZGluZ19yZXN1bHRfZGlyIDwtIHNuYWtlbWFrZUBpbnB1dCRzb21hdGljX2NvZGluZ19yZXN1bHRfZGlyCm5lb2VkaXRpbmdfb3V0ZGlyIDwtIHNuYWtlbWFrZUBpbnB1dCRuZW9lZGl0aW5nX291dGRpcgpzbnZfY2x1c3Rlcl9maWxlcyA8LSBzbmFrZW1ha2VAaW5wdXQkc252X2NsdXN0ZXJfZmlsZXMKY2xvbmVfdHJlZV9maWxlIDwtIHNuYWtlbWFrZUBpbnB1dCRjbG9uZV90cmVlX2ZpbGUKY2xvbmVfYnJhbmNoX2xlbmd0aF9maWxlIDwtIHNuYWtlbWFrZUBpbnB1dCRjbG9uZV9icmFuY2hfbGVuZ3RoX2ZpbGUKY2xvbmVfcHJldmFsZW5jZV9maWxlIDwtIHNuYWtlbWFrZUBpbnB1dCRjbG9uZV9wcmV2YWxlbmNlX2ZpbGUKCnJvb25leV9mdWxsX211dHNpZ2N2X2xpc3RfZmlsZSA8LSBzbmFrZW1ha2VAcGFyYW1zJHJvb25leV9tdXRzaWdjdl9maWxlCnJlZnNlcV9nZW5lX2ZpbGUgPC0gc25ha2VtYWtlQHBhcmFtcyRyZWZzZXFfZ2VuZV9maWxlCmRiX3BhdGggPC0gc25ha2VtYWtlQHBhcmFtcyRkYgoKYWxsX3RpbHR5cGVzIDwtIHNuYWtlbWFrZUBwYXJhbXMkYWxsX3RpbHR5cGVzCmBgYAoKYGBge3J9CmFubm90YXRpb25fY29sb3VycyA8LSBpdGhpLmZpZ3VyZXM6OmdldF9hbm5vdGF0aW9uX2NvbG91cnMoKQppaGNfdGFibGUgPC0gZnJlYWQoaWhjX3RhYmxlX3BhdGgpCgptYXJ0IDwtIHVzZURhdGFzZXQoImhzYXBpZW5zX2dlbmVfZW5zZW1ibCIsIHVzZU1hcnQoYmlvbWFydCA9ICJFTlNFTUJMX01BUlRfRU5TRU1CTCIsIGhvc3QgPSAiZmViMjAxNC5hcmNoaXZlLmVuc2VtYmwub3JnIikpCgp0aXRhbl9maWxlIDwtIGZpbGUucGF0aChzb21hdGljX2NvZGluZ19yZXN1bHRfZGlyLCAic29tYXRpY19jbnZfdGl0YW4udHN2IikKc29tYXRpY19zbnZfZmlsZSA8LSBmaWxlLnBhdGgoc29tYXRpY19jb2RpbmdfcmVzdWx0X2RpciwgInNvbWF0aWNfc252cy50c3YiKQpzb21hdGljX2luZGVsX2ZpbGUgPC0gZmlsZS5wYXRoKHNvbWF0aWNfY29kaW5nX3Jlc3VsdF9kaXIsICJzb21hdGljX2luZGVscy50c3YiKQp0aXRhbl9jbnYgPC0gZnJlYWQodGl0YW5fZmlsZSkKc29tYXRpY19zbnZzIDwtIGZyZWFkKHNvbWF0aWNfc252X2ZpbGUpCnNvbWF0aWNfaW5kZWxzIDwtIGZyZWFkKHNvbWF0aWNfaW5kZWxfZmlsZSkKCm1hc3Rlcl92YXJpYW50X3RhYmxlIDwtIHJlYWRfdmFyaWFudF9maWxlKG1hc3Rlcl92YXJpYW50X2ZpbGUsIGRiX3BhdGgpCm1hc3Rlcl9icmVha3BvaW50X3RhYmxlIDwtIHJlYWRfdmFyaWFudF9maWxlKG1hc3Rlcl9icmVha3BvaW50X2ZpbGUsIGRiX3BhdGgpCgpleHBycyA8LSBmcmVhZChuYW5vc3RyaW5nX2RhdGFfcGF0aCkKbmFub3N0cmluZ19sYWJlbHMgPC0gZnJlYWQobmFub3N0cmluZ19hbm5vdGF0aW9uc19wYXRoKQoKdHJlZV9icmFuY2hfZGF0YSA8LSByZWFkX2Nsb25lX3RyZWVfZGF0YShjbG9uZV90cmVlX2ZpbGUsIGNsb25lX2JyYW5jaF9sZW5ndGhfZmlsZSwgY2xvbmVfcHJldmFsZW5jZV9maWxlLCBkYl9wYXRoKQpgYGAKCiMjIFJvb25leSBjb21wYXJpc29uCgpJbiB0aGlzIGRvY3VtZW50LCB3ZSdsbCBjb21wYXJlIHRvIGJvdGggdGhlIFJvb25leSB2YXJpYW50LWltbXVuZSBhc3NvY2lhdGlvbiBmaW5kaW5ncyBhbmQgdGhlIG5lb2VwaXRvcGUgZWxpbWluYXRpb24gZmluZGluZ3MuIAoKIyMgQW5hbHlzaXMKCkZpcnN0LCB3ZSdsbCBzZWUgd2hldGhlciBvciBub3QgcGFydGljdWxhciBtdXRhdGlvbnMgKHRoZSBzYW1lIHNldCBhcyBSb29uZXkpIGFyZSBhc3NvY2lhdGVkIHdpdGggaW1tdW5lIGFjdGl2aXR5IChjeXRvdG94aWNpdHkgZ2VuZSBzaWduYXR1cmUgb3IgSUhDIHZhcmlhYmxlcykgaW4gb3VyIGNvaG9ydC4gCgpgYGB7ciwgY2FjaGU9VFJVRSwgcmVzdWx0cz0naGlkZSd9CnNvbWF0aWNfc252c19maWx0ZXJlZCA8LSBwbHlyOjpqb2luKHNvbWF0aWNfc252cywgbWFzdGVyX3ZhcmlhbnRfdGFibGUgJT4lIHN1YnNldChpc19wcmVzZW50ID09IDEpLCB0eXBlID0gJ2lubmVyJykKc29tYXRpY19pbmRlbHNfZmlsdGVyZWQgPC0gc3Vic2V0KHNvbWF0aWNfaW5kZWxzLCBtYXBwYWJpbGl0eSA9PSAxKQoKdGl0YW5fYmVkIDwtIGNvbnZlcnRfdG9fYmVkKHRpdGFuX2NudikKcmVmc2VxX2JlZCA8LSByZWFkX2JlZChyZWZzZXFfZ2VuZV9maWxlKQoKZ2VuZV9uYW1lcyA8LSBnZXRCTShhdHRyaWJ1dGVzID0gYygicmVmc2VxX21ybmEiLCAiaGduY19zeW1ib2wiKSwgdmFsdWVzID0gcmVmc2VxX2JlZCRyZWZzZXFfaWQsIG1hcnQgPSBtYXJ0KQoKcmVmc2VxX2JlZF9hbm5vdGF0ZWQgPC0gbWVyZ2UocmVmc2VxX2JlZCwgZ2VuZV9uYW1lcyAlPiUgc3Vic2V0KHJlZnNlcV9tcm5hICE9ICIiKSAlPiUgcGx5cjo6cmVuYW1lKGMoJ3JlZnNlcV9tcm5hJz0ncmVmc2VxX2lkJykpLCBieSA9IGMoJ3JlZnNlcV9pZCcpKQoKcmVmc2VxX2JlZF9hbm5vdGF0ZWQgPC0gc3Vic2V0KHJlZnNlcV9iZWRfYW5ub3RhdGVkLCBzZWxlY3Q9YygiY2hyIiwgInN0YXJ0IiwgImVuZCIsICJoZ25jX3N5bWJvbCIsICJyZWZzZXFfaWQiKSkKcmVmc2VxX2JlZF9hbm5vdGF0ZWQgPC0gYmVkci5zb3J0LnJlZ2lvbihyZWZzZXFfYmVkX2Fubm90YXRlZCkKCnRpdGFuX21lcmdlZCA8LSBiZWRyKGVuZ2luZSA9ICJiZWR0b29scyIsIGlucHV0ID0gbGlzdChhPXRpdGFuX2JlZCwgYj1yZWZzZXFfYmVkX2Fubm90YXRlZCksIG1ldGhvZCA9ICJpbnRlcnNlY3QiLCBwYXJhbXMgPSAiLWxvaiIpCnRpdGFuX21lcmdlZCA8LSBkYXRhLmZyYW1lKHRpdGFuX21lcmdlZCkKdGl0YW5fbWVyZ2VkJG1lZGlhbl9sb2dSIDwtIGFzLm51bWVyaWModGl0YW5fbWVyZ2VkJG1lZGlhbl9sb2dSKQp0aXRhbl9tZXJnZWQkdG90YWwgPC0gYXMubnVtZXJpYyh0aXRhbl9tZXJnZWQkdG90YWwpCnRpdGFuX21lcmdlZCRtYWpvciA8LSBhcy5udW1lcmljKHRpdGFuX21lcmdlZCRtYWpvcikKdGl0YW5fbWVyZ2VkJG1pbm9yIDwtIGFzLm51bWVyaWModGl0YW5fbWVyZ2VkJG1pbm9yKQpgYGAKCmBgYHtyfQpyb29uZXlfY3l0b2x5dGljX3BhbmNhbmNlcl9hc3NvY2lhdGlvbl9nZW5lcyA8LSBjKCJDQVNQOCIsICJCMk0iLCAiUElLM0NBIiwgIlNNQzFBIiwgIlRFVDIiLCAiQVJJRDVCIiwgIkFMUEsyIiwgIkxQQVIyIiwgIkNPTDVBMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRQNTMiLCAiTkNPUjEiLCAiU1NYNSIsICJETkVSIiwgIk1PUkM0IiwgIklSRjYiLCAiTVlPQ0QiLCAiQ0lDIiwgIlNMQzIyQTE0IiwgIkNOS1NSMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5GMSIsICJTT1MxIiwgIkNVTDRCIiwgIkREWDNYIiwgIkZVQlAxIiwgIkhMQS1BIiwgIkhMQS1CIiwgIkhMQS1DIiwgIkFSSUQyIiwgIlRDUDExTDIiLCAiTUVUIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ1NOSzJBMSIsICJBU1hMMSIsICJUTUVNODgiLCAiRE5NVDNBIiwgIkVQMzAwIiwgIk1VQzE3IiwgIk9WT0wxIikKCnJvb25leV9tdXRzaWdjdl90YWJsZSA8LSByZWFkLnhscyhyb29uZXlfZnVsbF9tdXRzaWdjdl9saXN0X2ZpbGUsIHNoZWV0ID0gMSwgaGVhZGVyID0gRkFMU0UsIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkKcm9vbmV5X211dHNpZ2N2X2dlbmVzIDwtIHNhcHBseShzdHJzcGxpdChyb29uZXlfbXV0c2lnY3ZfdGFibGUkVjEsICI6IiksIGZ1bmN0aW9uKHgpIHhbMV0pCnJvb25leV9tdXRzaWdjdl9nZW5lcyA8LSByb29uZXlfbXV0c2lnY3ZfZ2VuZXNbcm9vbmV5X211dHNpZ2N2X2dlbmVzICE9ICJITEEtQSxCLEMiXQpyb29uZXlfbXV0c2lnY3ZfZ2VuZXMgPC0gYyhyb29uZXlfbXV0c2lnY3ZfZ2VuZXMsIGMoIkhMQS1BIiwgIkhMQS1CIiwgIkhMQS1DIikpCmBgYAoKIyMjIExpbmVhciBtb2RlbGluZyBmb3IgbXV0YXRpb25zCgpDaGVjayB3aGV0aGVyIHRoaXMgaXMgZG9uZSBvbmx5IGZvciBwb2ludCBtdXRhdGlvbnMgb3IgaW5kZWxzIHRvby4gCgpUaGV5IG9ubHkgZG8gaXQgZm9yIHBvaW50IG11dGF0aW9uczsgSSB0aGluayB0aGlzIG1ha2VzIHNlbnNlIGJlY2F1c2Ugb2YgdGhlIGxvdyBpbmRlbCBjb3VudC4gTGV0J3MgZG8gaXQgc2ltaWxhcmx5LCB0aGVuLiAKCmBgYHtyfQpzb21hdGljX3NudnNfcm9vbmV5IDwtIHN1YnNldChzb21hdGljX3NudnNfZmlsdGVyZWQsIGdlbmVfbmFtZSAlaW4lIHJvb25leV9tdXRzaWdjdl9nZW5lcykKc29tYXRpY19pbmRlbHNfcm9vbmV5IDwtIHN1YnNldChzb21hdGljX2luZGVsc19maWx0ZXJlZCwgZ2VuZV9uYW1lICVpbiUgcm9vbmV5X211dHNpZ2N2X2dlbmVzKQp0aXRhbl9tZXJnZWRfcm9vbmV5IDwtIHN1YnNldCh0aXRhbl9tZXJnZWQsIGhnbmNfc3ltYm9sICVpbiUgcm9vbmV5X211dHNpZ2N2X2dlbmVzKQpgYGAKCmBgYHtyfQpwZXJjLnJhbmsgPC0gZnVuY3Rpb24oeCkgdHJ1bmMocmFuayh4KSkvbGVuZ3RoKHgpCgpjb21wdXRlX251bV90cmFuc2l0aW9uX2V2ZW50cyA8LSBmdW5jdGlvbih0aXRhbl9tZXJnZWQpIHsKICB0aXRhbl9tZXJnZWRfdW5pcXVlIDwtIHN1YnNldCh0aXRhbl9tZXJnZWQsIHNlbGVjdD1jKGNociwgc3RhcnQsIGVuZCwgcGF0aWVudF9pZCwgY29uZGVuc2VkX2lkLCBtZWRpYW5fbG9nUiwgbWFqb3IsIG1pbm9yLCB0b3RhbCkpICU+JSB1bmlxdWUKICB0aXRhbl9tZXJnZWRfdW5pcXVlX29yZGVyZWQgPC0gdGl0YW5fbWVyZ2VkX3VuaXF1ZVt3aXRoKHRpdGFuX21lcmdlZF91bmlxdWUsIG9yZGVyKGNvbmRlbnNlZF9pZCwgY2hyLCBzdGFydCwgZW5kKSksXQogIAogIGRmcyA8LSBzcGxpdCh0aXRhbl9tZXJnZWRfdW5pcXVlX29yZGVyZWQsIGYgPSB0aXRhbl9tZXJnZWRfdW5pcXVlX29yZGVyZWQkY29uZGVuc2VkX2lkKQogIGV2ZW50X2NvdW50cyA8LSBsYXBwbHkoZGZzLCBmdW5jdGlvbih4KSB7CiAgICBjb3VudGVyIDwtIDAKICAgIHByZXZfY2hyb20gPC0gImNocjAiCiAgICBwcmV2X2NuX3NpZ24gPC0gMQogICAgZm9yIChpIGluIDE6bnJvdyh4KSkgewogICAgICByb3cgPC0geFtpLF0KICAgICAgaWYgKChyb3ckY2hyID09IHByZXZfY2hyb20pICYgKHNpZ24ocm93JHRvdGFsIC0gMikgIT0gcHJldl9jbl9zaWduKSkgewogICAgICAgIGNvdW50ZXIgPC0gY291bnRlciArIDEKICAgICAgfQogICAgICBwcmV2X2Nocm9tIDwtIHJvdyRjaHIKICAgICAgcHJldl9sb2dSX3NnbiA8LSBzaWduKHJvdyR0b3RhbCkKICAgIH0KICAgIHJldHVybihjb3VudGVyKQogIH0pCiAgCiAgZXZlbnRfZGYgPC0gZGF0YS5mcmFtZShldmVudF9jb3VudHMsIGNoZWNrLm5hbWVzID0gRkFMU0UpICU+JSB0ICU+JSBhcy5kYXRhLmZyYW1lCiAgY29sbmFtZXMoZXZlbnRfZGYpIDwtICJjaHJfZXZlbnRzIgogIGV2ZW50X2RmIDwtIGV2ZW50X2RmICU+JSByb3duYW1lc190b19jb2x1bW4odmFyID0gImNvbmRlbnNlZF9pZCIpCiAgcmV0dXJuKGV2ZW50X2RmKQp9CgoKdHJhbnNpdGlvbl9ldmVudHMgPC0gY29tcHV0ZV9udW1fdHJhbnNpdGlvbl9ldmVudHModGl0YW5fbWVyZ2VkKQoKY3l0X2V4cHIgPC0gc3Vic2V0KGV4cHJzLCBOYW1lICVpbiUgYygiR1pNQSIsICJQUkYxIiksIHNlbGVjdCA9LWMoQ29kZS5DbGFzcywgQWNjZXNzaW9uKSkKY3l0X2V4cHJfY29tYmluZWQgPC0gY3l0X2V4cHIgJT4lIGFzLmRhdGEuZnJhbWUgJT4lIGNvbHVtbl90b19yb3duYW1lcyh2YXIgPSAiTmFtZSIpICU+JSB0ICU+JSBhcy5kYXRhLmZyYW1lCmN5dF9leHByX2NvbWJpbmVkJENZVCA8LSB3aXRoKGN5dF9leHByX2NvbWJpbmVkLCBpdGhpLnV0aWxzOjpwLmdlb21lYW4oR1pNQSwgUFJGMSkpCmN5dF9leHByX2NvbWJpbmVkIDwtIHN1YnNldChjeXRfZXhwcl9jb21iaW5lZCwgc2VsZWN0PS1jKEdaTUEsIFBSRjEpKQpjeXRfZXhwcl9kZiA8LSBjeXRfZXhwcl9jb21iaW5lZCAlPiUgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJjb25kZW5zZWRfaWQiKQpjeXRfZXhwcl9kZiRjb25kZW5zZWRfaWQgPC0gY3l0X2V4cHJfZGYkY29uZGVuc2VkX2lkICU+JSBpdGhpLm1ldGE6Om1hcF9pZChmcm9tID0gInZvYSIsIHRvID0gImNvbmRlbnNlZF9pZCIsIGRiX3BhdGgpCgpsaW5lYXJfbW9kZWxfdGlsX3ZhcmlhbnQgPC0gZnVuY3Rpb24oc2VsZWN0ZWRfdmFyaWFudHMsIGFsbF92YXJpYW50cywgaWhjX3RhYmxlLCBjeXRfZXhwcl9kZiwgcmFua190cmFuc2Zvcm0gPSBUUlVFLCBjb250cm9sX3BhdGllbnQgPSBUUlVFLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1tdW5lX3ZhcmlhYmxlID0gIkNZVCIsIHZhcmlhbnRfdHlwZSA9ICJzbnYiLCBjbl90eXBlID0gImFtcCIsIHRyYW5zaXRpb25fZXZlbnRzID0gTlVMTCkgewogIGlmICh2YXJpYW50X3R5cGUgPT0gInNudiIpIHsKICAgIGJhY2tncm91bmRfdmFyaWFudF9yYXRlIDwtIGFsbF92YXJpYW50cyAlPiUgZ3JvdXBfYnkoY29uZGVuc2VkX2lkKSAlPiUgc3VtbWFyaXNlKG52YXJpYW50PW4oKSkKICB9IGVsc2UgaWYgKHZhcmlhbnRfdHlwZSA9PSAiY252IikgewogICAgYWxsX3ZhcmlhbnRzX2ZpbHRlcmVkIDwtIHN1YnNldChhbGxfdmFyaWFudHMsIHRvdGFsICE9IDIpCiAgICBhbGxfdmFyaWFudHNfZmlsdGVyZWRfdW5pcXVlIDwtIHN1YnNldChhbGxfdmFyaWFudHNfZmlsdGVyZWQsIHNlbGVjdD1jKGNociwgc3RhcnQsIGVuZCwgcGF0aWVudF9pZCwgY29uZGVuc2VkX2lkLCBtZWRpYW5fbG9nUiwgbWFqb3IsIG1pbm9yLCB0b3RhbCkpICU+JSB1bmlxdWUKICAgIGFsbF92YXJpYW50c19maWx0ZXJlZF91bmlxdWUkZXZlbnRfdHlwZSA8LSBzaWduKGFsbF92YXJpYW50c19maWx0ZXJlZF91bmlxdWUkdG90YWwgLSAyKQogICAgYmFja2dyb3VuZF92YXJpYW50X3JhdGUgPC0gYWxsX3ZhcmlhbnRzX2ZpbHRlcmVkX3VuaXF1ZSAlPiUgZ3JvdXBfYnkoY29uZGVuc2VkX2lkLCBldmVudF90eXBlKSAlPiUgc3VtbWFyaXNlKG52YXJpYW50PW4oKSkKICAgIAogICAgYmFja2dyb3VuZF92YXJpYW50X3JhdGVfZXhwYW5kZWQgPC0gZGNhc3QoYmFja2dyb3VuZF92YXJpYW50X3JhdGUsIGZvcm11bGEgPSBjb25kZW5zZWRfaWQgfiBldmVudF90eXBlLCB2YWx1ZS52YXIgPSAibnZhcmlhbnQiKSAlPiUgCiAgICAgIHBseXI6OnJlbmFtZShjKCctMSc9J25kZWwnLCAnMSc9J25hbXAnKSkKICAgIAogICAgYmFja2dyb3VuZF92YXJpYW50X3JhdGUgPC0gbWVyZ2UoYmFja2dyb3VuZF92YXJpYW50X3JhdGVfZXhwYW5kZWQsIHRyYW5zaXRpb25fZXZlbnRzLCBhbGw9VFJVRSkKICAgICMjIFRyYW5zaXRpb24gZXZlbnRzIGlzIHRoZSBudW1iZXIgb2YgY2hyb21vc29tYWwgdHJhbnNpdGlvbnMgYmV0d2VlbiArLy0gbG9nUidzLCBhcyBwZXIgUm9vbmV5LiAKICB9CiAgCiAgaWhjX3RhYmxlX3N1YnNldCA8LSBzdWJzZXQoaWhjX3RhYmxlLCBjb25kZW5zZWRfaWQgJWluJSBiYWNrZ3JvdW5kX3ZhcmlhbnRfcmF0ZSRjb25kZW5zZWRfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ID0gYygiY29uZGVuc2VkX2lkIiwgYWxsX3RpbHR5cGVzKSkKICAKICBvdGhlcl90YWJsZXMgPC0gUmVkdWNlKGZ1bmN0aW9uKHgseSkgbWVyZ2UoeCx5LGFsbD1UUlVFKSwgbGlzdChiYWNrZ3JvdW5kX3ZhcmlhbnRfcmF0ZSwgaWhjX3RhYmxlX3N1YnNldCwgY3l0X2V4cHJfZGYpKQogIG90aGVyX3RhYmxlcyA8LSBzdWJzZXQob3RoZXJfdGFibGVzLCAhc3RyX2RldGVjdChjb25kZW5zZWRfaWQsICJeU1AiKSkKICBvdGhlcl90YWJsZXMkcGF0aWVudF9pZCA8LSBpdGhpLm1ldGE6Om1hcF9pZChvdGhlcl90YWJsZXMkY29uZGVuc2VkX2lkLCBmcm9tID0gImNvbmRlbnNlZF9pZCIsIHRvID0gInBhdGllbnRfaWQiLCBkYl9wYXRoKQogIAogIHNlbGVjdGVkX3ZhcmlhbnRzJGNvbmRlbnNlZF9pZCA8LSBpdGhpLm1ldGE6OmZhY3Rvcl9pZChzZWxlY3RlZF92YXJpYW50cyRjb25kZW5zZWRfaWQsIHR5cGUgPSAiY29uZGVuc2VkX2lkIiwgZGJfcGF0aCkKICBpZiAodmFyaWFudF90eXBlID09ICJjbnYiKSB7CiAgICBpZiAoY25fdHlwZSA9PSAiYW1wIikgewogICAgICBzZWxlY3RlZF92YXJpYW50cyA8LSBzdWJzZXQoc2VsZWN0ZWRfdmFyaWFudHMsIHRvdGFsID4gMikKICAgIH0gZWxzZSBpZiAoY25fdHlwZSA9PSAiZGVsIikgewogICAgICBzZWxlY3RlZF92YXJpYW50cyA8LSBzdWJzZXQoc2VsZWN0ZWRfdmFyaWFudHMsIHRvdGFsIDwgMikKICAgIH0KICAgIHNlbGVjdGVkX3ZhcmlhbnRzJGdlbmVfbmFtZSA8LSBzZWxlY3RlZF92YXJpYW50cyRoZ25jX3N5bWJvbAogICAgCiAgICBzZWxlY3RlZF92YXJpYW50cyA8LSBzdWJzZXQoc2VsZWN0ZWRfdmFyaWFudHMsIHNlbGVjdD1jKGNociwgc3RhcnQsIGVuZCwgcGF0aWVudF9pZCwgY29uZGVuc2VkX2lkLCBtZWRpYW5fbG9nUiwgbWFqb3IsIG1pbm9yLCB0b3RhbCwgZ2VuZV9uYW1lKSkgJT4lIHVuaXF1ZQogICAgCiAgICBzZWxlY3RlZF92YXJpYW50cyA8LSBzZWxlY3RlZF92YXJpYW50cyAlPiUgZ3JvdXBfYnkoZ2VuZV9uYW1lLCBjb25kZW5zZWRfaWQsIHBhdGllbnRfaWQpICU+JSBzdW1tYXJpc2UobWVkaWFuX2xvZ1I9bWF4KGFicyhtZWRpYW5fbG9nUikpKnNpZ24obWVkaWFuX2xvZ1Jbd2hpY2gubWF4KGFicyhtZWRpYW5fbG9nUikpXSkpCiAgICAKICAgIGZvcmVncm91bmRfdGFibGUgPC0gYXMuZGF0YS5mcmFtZS5tYXRyaXgoeHRhYnMobWVkaWFuX2xvZ1IgfiBjb25kZW5zZWRfaWQgKyBnZW5lX25hbWUsIGRhdGEgPSBzZWxlY3RlZF92YXJpYW50cykpCiAgfSBlbHNlIHsKICAgIGZvcmVncm91bmRfdGFibGUgPC0gYXMuZGF0YS5mcmFtZS5tYXRyaXgoeHRhYnMoIH4gY29uZGVuc2VkX2lkICsgZ2VuZV9uYW1lLCBkYXRhID0gc2VsZWN0ZWRfdmFyaWFudHMpKQogIH0KICAKICBnZW5lX25hbWVzIDwtIGNvbG5hbWVzKGZvcmVncm91bmRfdGFibGUpCiAgCiAgdGVzdF9yZXN1bHRzIDwtIHJiaW5kLmZpbGwobGFwcGx5KGdlbmVfbmFtZXMsIGZ1bmN0aW9uKGdlbmUpIHsKICAgICNwcmludChnZW5lKQogICAgeCA8LSBmb3JlZ3JvdW5kX3RhYmxlWyxnZW5lLGRyb3A9RkFMU0VdICU+JSB0aWJibGU6OnJvd25hbWVzX3RvX2NvbHVtbih2YXIgPSAiY29uZGVuc2VkX2lkIikKICAgIHggPC0gbWVyZ2Uob3RoZXJfdGFibGVzLCB4LCBhbGw9VFJVRSkKICAgIHhbLGdlbmVdW2lzLm5hKHhbLGdlbmVdKSAmICh4JGNvbmRlbnNlZF9pZCAlaW4lIGJhY2tncm91bmRfdmFyaWFudF9yYXRlJGNvbmRlbnNlZF9pZCldPC0gMAogICAgCiAgICBpZiAodmFyaWFudF90eXBlID09ICJjbnYiKSB7CiAgICAgIGlmIChjbl90eXBlID09ICJhbXAiKSB7CiAgICAgICAgeFssZ2VuZV1bIWlzLm5hKHhbLGdlbmVdKSAmICh4WyxnZW5lXSA8IDApXSA8LSAwCiAgICAgIH0gZWxzZSBpZiAoY25fdHlwZSA9PSAiZGVsIikgewogICAgICAgIHhbLGdlbmVdWyFpcy5uYSh4WyxnZW5lXSkgJiAoeFssZ2VuZV0gPiAwKV0gPC0gMAogICAgICAgIHhbLGdlbmVdIDwtIC0xKnhbLGdlbmVdCiAgICAgIH0KICAgIH0KCiAgICAKICAgIGlmIChyYW5rX3RyYW5zZm9ybSkgewogICAgICBpZiAodmFyaWFudF90eXBlID09ICJzbnYiKSB7CiAgICAgICAgeFssIm52YXJpYW50Il0gPC0gcGVyYy5yYW5rKHhbLCJudmFyaWFudCJdKQogICAgICB9IGVsc2UgaWYgKHZhcmlhbnRfdHlwZSA9PSAiY252IikgewogICAgICAgIHhbLCJjaHJfZXZlbnRzIl0gPC0gcGVyYy5yYW5rKHhbLCJjaHJfZXZlbnRzIl0pCiAgICAgICAgeFssIm5hbXAiXSA8LSBwZXJjLnJhbmsoeFssIm5hbXAiXSkKICAgICAgICB4WywibmRlbCJdIDwtIHBlcmMucmFuayh4WywibmRlbCJdKQogICAgICB9CiAgICAgIHhbLGltbXVuZV92YXJpYWJsZV0gPC0gcGVyYy5yYW5rKHhbLGltbXVuZV92YXJpYWJsZV0pCiAgICB9CiAgICAKICAgIGlmIChzdHJfZGV0ZWN0KGdlbmUsICJcXC0iKSkgewogICAgICBnZW5lX25hbWVfbW9kIDwtIHBhc3RlMCgiYCIsIGdlbmUsICJgIikKICAgIH0gZWxzZSB7CiAgICAgIGdlbmVfbmFtZV9tb2QgPC0gZ2VuZQogICAgfQogICAgCiAgICBpZiAodmFyaWFudF90eXBlID09ICJzbnYiKSB7CiAgICAgIGlmIChjb250cm9sX3BhdGllbnQpIHsKICAgICAgICBtb2QgPC0gbG1lcihhcy5mb3JtdWxhKHBhc3RlMChpbW11bmVfdmFyaWFibGUsICJ+IiwgZ2VuZV9uYW1lX21vZCwgIisiLCAibnZhcmlhbnQiLCAiKyIsICIoMXxwYXRpZW50X2lkKSIpKSwgZGF0YSA9IHhbIWlzLm5hKHhbLGdlbmVdKSxdKQogICAgICB9IGVsc2UgewogICAgICAgIG1vZCA8LSBsbShhcy5mb3JtdWxhKHBhc3RlMChpbW11bmVfdmFyaWFibGUsICJ+IiwgZ2VuZV9uYW1lX21vZCwgIisiLCAibnZhcmlhbnQiKSksIGRhdGEgPSB4WyFpcy5uYSh4WyxnZW5lXSksXSkKICAgICAgfQogICAgfSBlbHNlIGlmICh2YXJpYW50X3R5cGUgPT0gImNudiIpIHsKICAgICAgIGlmIChjb250cm9sX3BhdGllbnQpIHsKICAgICAgICBtb2QgPC0gbG1lcihhcy5mb3JtdWxhKHBhc3RlMChpbW11bmVfdmFyaWFibGUsICJ+IiwgZ2VuZV9uYW1lX21vZCwgIisiLCAibmFtcCtuZGVsK2Nocl9ldmVudHMiLCAiKyIsICIoMXxwYXRpZW50X2lkKSIpKSwgZGF0YSA9IHhbIWlzLm5hKHhbLGdlbmVdKSxdKQogICAgICB9IGVsc2UgewogICAgICAgIG1vZCA8LSBsbShhcy5mb3JtdWxhKHBhc3RlMChpbW11bmVfdmFyaWFibGUsICJ+IiwgZ2VuZV9uYW1lX21vZCwgIisiLCAibmFtcCtuZGVsK2Nocl9ldmVudHMiKSksIGRhdGEgPSB4WyFpcy5uYSh4WyxnZW5lXSksXSkKICAgICAgfQogICAgfQogICAgcHZhbCA8LSB1bm5hbWUoc3VtbWFyeShtb2QpJGNvZWZmaWNpZW50c1ssNV1bZ2VuZV9uYW1lX21vZF0pCiAgICBjb2VmZiA8LSB1bm5hbWUoc3VtbWFyeShtb2QpJGNvZWZmaWNpZW50c1ssMV1bZ2VuZV9uYW1lX21vZF0pCiAgICAKICAgIHJldHVybihkYXRhLmZyYW1lKGdlbmU9Z2VuZSwgaW1tdW5lX3ZhcmlhYmxlPWltbXVuZV92YXJpYWJsZSwgcC52YWx1ZT1wdmFsLCBjb2VmPWNvZWZmLCBuPW5yb3coeFshaXMubmEoeFssZ2VuZV0pLF0pKSkKICB9KSkKICAKICB0ZXN0X3Jlc3VsdHMkcC5hZGogPC0gcC5hZGp1c3QodGVzdF9yZXN1bHRzJHAudmFsdWUsIG1ldGhvZCA9ICJCSCIpCiAgcmV0dXJuKHRlc3RfcmVzdWx0cykKfQpgYGAKCmBgYHtyLCByZXN1bHRzPSdoaWRlJywgY2FjaGU9VFJVRX0Kc252X2N5dF9wYXRpZW50X3JhbmsgPC0gbGluZWFyX21vZGVsX3RpbF92YXJpYW50KHNvbWF0aWNfc252c19yb29uZXksIHNvbWF0aWNfc252c19maWx0ZXJlZCwgaWhjX3RhYmxlLCBjeXRfZXhwcl9kZiwgcmFua190cmFuc2Zvcm0gPSBUUlVFLCBjb250cm9sX3BhdGllbnQgPSBUUlVFLCBpbW11bmVfdmFyaWFibGUgPSAiQ1lUIiwgdmFyaWFudF90eXBlID0gInNudiIpCnNudl9lY2Q4X3BhdGllbnRfcmFuayA8LSBsaW5lYXJfbW9kZWxfdGlsX3ZhcmlhbnQoc29tYXRpY19zbnZzX3Jvb25leSwgc29tYXRpY19zbnZzX2ZpbHRlcmVkLCBpaGNfdGFibGUsIGN5dF9leHByX2RmLCByYW5rX3RyYW5zZm9ybSA9IFRSVUUsIGNvbnRyb2xfcGF0aWVudCA9IFRSVUUsIGltbXVuZV92YXJpYWJsZSA9ICJFX0NEOF9kZW5zaXR5IiwgdmFyaWFudF90eXBlID0gInNudiIpCmBgYAoKYGBge3J9CnByaW50KHNudl9jeXRfcGF0aWVudF9yYW5rKQpwcmludChzbnZfZWNkOF9wYXRpZW50X3JhbmspCmBgYAoKVXNpbmcgdGhlIHNhbWUgcmVncmVzc2lvbiBhcHByb2FjaCBhcyBSb29uZXksIG5vbmUgb2YgdGhlIFNOVnMgYXJlIHNpZ25pZmljYW50bHkgY29ycmVsYXRlZCB3aXRoIHRoZSBzdGF0dXMgb2YgYW55IG9mIHRoZXNlIHBvaW50IG11dGF0aW9ucy4gTm90ZSB0aGF0IFRQNTMsIHdoaWNoIHdhcyByZXBvcnRlZCB0byBiZSBzaWduaWZpY2FudCBieSB0aGVtLCBoYXMgYSBzaWduaWZpY2FudCB1bmNvcnJlY3RlZCBwLXZhbHVlLCBidXQgbm90IGFmdGVyIEJIIGFkanVzdG1lbnQuIAoKIyMjIExpbmVhciBtb2RlbGluZyBmb3IgY29weSBudW1iZXIKCmBgYHtyLCByZXN1bHRzPSdoaWRlJywgY2FjaGU9VFJVRX0KY252YW1wX2N5dF9wYXRpZW50X3JhbmsgPC0gbGluZWFyX21vZGVsX3RpbF92YXJpYW50KHRpdGFuX21lcmdlZF9yb29uZXksIHRpdGFuX21lcmdlZCwgaWhjX3RhYmxlLCBjeXRfZXhwcl9kZiwgcmFua190cmFuc2Zvcm0gPSBUUlVFLCBjb250cm9sX3BhdGllbnQgPSBUUlVFLCBpbW11bmVfdmFyaWFibGUgPSAiQ1lUIiwgdmFyaWFudF90eXBlID0gImNudiIsIGNuX3R5cGUgPSAiYW1wIiwgdHJhbnNpdGlvbl9ldmVudHMpCmNudmRlbF9jeXRfcGF0aWVudF9yYW5rIDwtIGxpbmVhcl9tb2RlbF90aWxfdmFyaWFudCh0aXRhbl9tZXJnZWRfcm9vbmV5LCB0aXRhbl9tZXJnZWQsIGloY190YWJsZSwgY3l0X2V4cHJfZGYsIHJhbmtfdHJhbnNmb3JtID0gVFJVRSwgY29udHJvbF9wYXRpZW50ID0gVFJVRSwgaW1tdW5lX3ZhcmlhYmxlID0gIkNZVCIsIHZhcmlhbnRfdHlwZSA9ICJjbnYiLCBjbl90eXBlID0gImRlbCIsIHRyYW5zaXRpb25fZXZlbnRzKQpgYGAKCmBgYHtyfQpwcmludChjbnZhbXBfY3l0X3BhdGllbnRfcmFuaykKcHJpbnQoY252ZGVsX2N5dF9wYXRpZW50X3JhbmspCmBgYAoKSSBkb24ndCBiZWxpZXZlIHRoZXJlJ3MgYW55dGhpbmcgaGVyZSwgYnV0IEkgaGF2ZW4ndCBydW4gdGhlIG1vc3QgcmVjZW50IHZlcnNpb24uIFNvIHJ1biB0aGlzLiAKCiMjIyBUb3RhbCBub25zeW5vbnltb3VzIHZhcmlhbnQgYnVyZGVuCgpOZXh0LCB3ZSdsbCBsb29rIGF0IHRoZSBvdmVyYWxsIGRpc3RyaWJ1dGlvbiBvZiBuZW9lcGl0b3BlIGJ1cmRlbiBhbmQgbmVvZXBpdG9wZSBlbGltaW5hdGlvbiBzY29yZXMgaW4gb3VyIGNvaG9ydC4gCgpDb250cm9sIGZvciB0dW1vdXIgY29udGVudC4gIAoKIyMjIE5lb2VwaXRvcGUgYnVyZGVuCgpgYGB7ciwgY2FjaGUgPSBUUlVFfQpuZW9lZGl0aW5nX3JlcyA8LSBzdXBwX25lb2VkaXRpbmcobmVvZWRpdGluZ19vdXRkaXIsIGloY190YWJsZSwgZGJfcGF0aCwgdHJlZV9icmFuY2hfZGF0YSwgd3RmaWx0ZXIgPSBUUlVFLCBmdWxsX2VwaXRvcGVzID0gRkFMU0UsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc252X2NsdXN0ZXJfZmlsZXMgPSBzbnZfY2x1c3Rlcl9maWxlcykKCnNudl9sb2FkIDwtIG5lb2VkaXRpbmdfcmVzJG5vbnN5bm9ueW1vdXMgJT4lIGdyb3VwX2J5KHNhbXBsZV9pZCwgcGF0aWVudF9pZCkgJT4lIHN1bW1hcmlzZShubm9uc3luPW4oKSwgbmVwaXRvcGVzPWxlbmd0aCh3aGljaChgTmV0TUhDcGFuIE1UIFBlcmNlbnRpbGVgIDw9IDIpKSkgJT4lIHBseXI6OnJlbmFtZShjKCdzYW1wbGVfaWQnPSdjb25kZW5zZWRfaWQnKSkKCnNudl9sb2FkJGVwaXRvcGVfcGN0IDwtIHdpdGgoc252X2xvYWQsIG5lcGl0b3Blcy9ubm9uc3luKQptZWRpYW4oc252X2xvYWQkZXBpdG9wZV9wY3QpCmBgYAoKYGBge3J9CmloY190YWJsZV9zdWJzZXQgPC0gc3Vic2V0KGloY190YWJsZSwgY29uZGVuc2VkX2lkICVpbiUgdW5pcXVlKHNvbWF0aWNfc252c19maWx0ZXJlZCRjb25kZW5zZWRfaWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCA9IGMoImNvbmRlbnNlZF9pZCIsIGFsbF90aWx0eXBlcykpCmloY19jeXQgPC0gcGx5cjo6am9pbihpaGNfdGFibGVfc3Vic2V0LCBjeXRfZXhwcl9kZikKCmloY19jeXRfc252IDwtIHBseXI6OmpvaW4oc252X2xvYWQgJT4lIGFzLmRhdGEuZnJhbWUsIGloY19jeXQgJT4lIGFzLmRhdGEuZnJhbWUpCmBgYAoKYGBge3J9CmNvcjEgPC0gd2l0aChpaGNfY3l0X3NudiwgY29yLnRlc3QoRV9DRDhfZGVuc2l0eSwgbmVwaXRvcGVzLCBtZXRob2QgPSAic3BlYXJtYW4iKSkKCmNvcjIgPC0gd2l0aChpaGNfY3l0X3NudiwgY29yLnRlc3QoQ1lULCBuZXBpdG9wZXMsIG1ldGhvZCA9ICJzcGVhcm1hbiIpKQoKcHZhbHMgPC0gcC5hZGp1c3QoYyhjb3IxJHAudmFsdWUsIGNvcjIkcC52YWx1ZSksIG1ldGhvZCA9ICJCSCIpCgpwdmFscwpgYGAKCk5vbmUgb2YgdGhlc2UgYXJlIHNpZ25pZmljYW50IGFmdGVyIEJIIGNvcnJlY3Rpb24uIFRoZXJlZm9yZSwgY29uc2lzdGVudCB3aXRoIHRoZSBmaW5kaW5ncyBpbiB0aGUgQnJvd24gZXQgYWwuIHBhcGVyLCB0aGVyZSBpcyBubyBzaWduaWZpY2FudCBjb3JyZWxhdGlvbiBiZXR3ZWVuIG5lb2VwaXRvcGUgYnVyZGVuIGFuZCBpbW11bmUgY292YXJpYXRlcyBpbiBIR1NDLiBBbmQgbm90ZSB0aGF0IHRoZXNlIGFyZSB0ZWNobmljYWxseSBkb25lIGluY29ycmVjdGx5LCBtb3JlIGNvcnJlY3RseSB3ZSBzaG91bGQgYmUgZWl0aGVyIGNvbnNpZGVyaW5nIHBhdGllbnQgYXMgYSByYW5kb20gZWZmZWN0IG9yIHRha2luZyB0aGUgYXZlcmFnZSB3aXRoaW4gZWFjaCBwYXRpZW50LCBpLmUuIGFzOgoKIyMjIyBSYW5kb20gZWZmZWN0IHBhdGllbnQKCmBgYHtyfQptb2QxIDwtIGxtZXIoRV9DRDhfZGVuc2l0eSB+IG5lcGl0b3BlcyArICgxfHBhdGllbnRfaWQpLCBkYXRhID0gaWhjX2N5dF9zbnYgJT4lIHN1YnNldCghaXMubmEoRV9DRDhfZGVuc2l0eSkpKQptb2QyIDwtIGxtZXIoQ1lUIH4gbmVwaXRvcGVzKyAoMXxwYXRpZW50X2lkKSwgZGF0YSA9IGloY19jeXRfc252ICU+JSBzdWJzZXQoIWlzLm5hKENZVCkpKQptb2QzIDwtIGxtZXIoRV9DRDhfZGVuc2l0eSB+IG5ub25zeW4gKyAoMXxwYXRpZW50X2lkKSwgZGF0YSA9IGloY19jeXRfc252ICU+JSBzdWJzZXQoIWlzLm5hKEVfQ0Q4X2RlbnNpdHkpKSkKbW9kNCA8LSBsbWVyKENZVCB+IG5ub25zeW4rICgxfHBhdGllbnRfaWQpLCBkYXRhID0gaWhjX2N5dF9zbnYgJT4lIHN1YnNldCghaXMubmEoQ1lUKSkpCgptb2QxICU+JSBzdW1tYXJ5Cm1vZDIgJT4lIHN1bW1hcnkKbW9kMyAlPiUgc3VtbWFyeQptb2Q0ICU+JSBzdW1tYXJ5CmBgYAoKTnVtYmVyIG9mIG5lb2VwaXRvcGVzIGlzIHN0aWxsIG5vdCBzaWduaWZpY2FudGx5IGNvcnJlbGF0ZWQgd2l0aCBUSUwgb3IgQ1lUIHdpdGhpbiBwYXRpZW50cy4gCgojIyMjIFBhdGllbnQgYXZlcmFnZQoKYGBge3J9CmloY19jeXRfc252X21lYW4gPC0gaWhjX2N5dF9zbnYgJT4lIHN1YnNldChzZWxlY3Q9LWMoY29uZGVuc2VkX2lkKSkgJT4lIGdyb3VwX2J5KHBhdGllbnRfaWQpICU+JSBzdW1tYXJpc2VfYWxsKC5mdW5zID0gZnVuY3Rpb24oeCkgbWVhbih4LG5hLnJtPVRSVUUpKQpgYGAKCmBgYHtyfQptb2QxIDwtIGxtKEVfQ0Q4X2RlbnNpdHkgfiBuZXBpdG9wZXMsIGRhdGEgPSBpaGNfY3l0X3Nudl9tZWFuICU+JSBzdWJzZXQoIWlzLm5hKEVfQ0Q4X2RlbnNpdHkpKSkKbW9kMiA8LSBsbShDWVQgfiBuZXBpdG9wZXMsIGRhdGEgPSBpaGNfY3l0X3Nudl9tZWFuICU+JSBzdWJzZXQoIWlzLm5hKENZVCkpKQptb2QzIDwtIGxtKEVfQ0Q4X2RlbnNpdHkgfiBubm9uc3luLCBkYXRhID0gaWhjX2N5dF9zbnZfbWVhbiAlPiUgc3Vic2V0KCFpcy5uYShFX0NEOF9kZW5zaXR5KSkpCm1vZDQgPC0gbG0oQ1lUIH4gbm5vbnN5biwgZGF0YSA9IGloY19jeXRfc252X21lYW4gJT4lIHN1YnNldCghaXMubmEoQ1lUKSkpCgptb2QxICU+JSBzdW1tYXJ5Cm1vZDIgJT4lIHN1bW1hcnkKbW9kMyAlPiUgc3VtbWFyeQptb2Q0ICU+JSBzdW1tYXJ5CmBgYAoKU3RpbGwgbm8gc2lnbmlmaWNhbnQgY29ycmVsYXRpb24gZm9yIGVpdGhlciBub25zeW5vbnltb3VzIFNOViBvciBuZW9hbnRpZ2VuIGxvYWQuIEluIGZhY3QsIGVmZmVjdCBzaXplcyBhcmUgbmVnYXRpdmUsIG5vdCBwb3NpdGl2ZSBhcyB0eXBpY2FsbHkgc2VlbiAoaS5lLiB1c3VhbGx5IG1vcmUgbmVvZXBpdG9wZXMgPSBoaWdoZXIgVElMIGRlbnNpdGllcy9DWVQgYWN0aXZpdHkpLgoKIyMjIFRvdGFsIG5lb2VwaXRvcGUgZGVwbGV0aW9uIHNpZ25hbAoKYGBge3J9CnN1YmNsb25hbF9yYXRlcyA8LSBkYXRhLmZyYW1lKG5lb2VkaXRpbmdfcmVzJHN1YmNsb25hbF9yYXRlcywgbXV0dHlwZT0ic3ViY2xvbmFsIikKY2xvbmFsX3JhdGVzIDwtIGRhdGEuZnJhbWUobmVvZWRpdGluZ19yZXMkc3ViY2xvbmFsX3JhdGVzLCBtdXR0eXBlPSJjbG9uYWwiKQoKYm91bmRfcmF0ZXMgPC0gcmJpbmQuZmlsbChsaXN0KHN1YmNsb25hbF9yYXRlcywgY2xvbmFsX3JhdGVzKSkKCmJvdW5kX3JhdGVzJG5lb2VwaXRvcGVfZGVwbGV0aW9uIDwtIHdpdGgoYm91bmRfcmF0ZXMsIG9ic3JhdGlvL2V4cHJhdGlvKQpgYGAKCmBgYHtyfQpwX25lb2RlcGxldGlvbiA8LSBnZ3Bsb3QoYm91bmRfcmF0ZXMsIGFlcyh4PW11dHR5cGUsIHkgPSBuZW9lcGl0b3BlX2RlcGxldGlvbikpICsgc3RhdF9ib3hwbG90KGdlb20gPSAnZXJyb3JiYXInLCB3aWR0aCA9IDAuMykgKyBnZW9tX2JveHBsb3Qod2lkdGggPSAwLjUpICsgdGhlbWVfYncoKSArIHRoZW1lX1B1YmxpY2F0aW9uKCkgKyBpdGhpLnV0aWxzOjp0aGVtZV9uYXR1cmUoKSAKCnBfbmVvZGVwbGV0aW9uCmBgYAoKSW4gb3RoZXIgd29yZHMsIG5lb2VwaXRvcGUgZGVwbGV0aW9uIHZhbHVlcyBkbyBub3Qgc2lnbmlmaWNhbnRseSBkaWZmZXIgZnJvbSAwIC0tIGNvbnNpc3RlbnQgd2l0aCB0aGUgSGFjb2hlbiByZXN1bHRzIHJlcG9ydGVkIGZvciBvdmFyaWFuIChMSU5LIEZJR1VSRSkuIAoKVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBvdXIgYW5hbHlzaXMgYW5kIFJvb25leSdzLCB0aG91Z2gsIGlzIHRoYXQgd2UgbG9vayBhdCBJTlRSQS1wYXRpZW50IHRyZW5kcywgd2hlcmVhcyB0aGV5IGxvb2sgYXQgSU5URVItcGF0aWVudCB0cmVuZHMuIEFzIHdpdGggdGhlIFJvb25leSBwYXBlciwgd2UgZG8gbm90IGZpbmQgYW55dGhpbmcgZm9yIG92YXJpYW4gd2hlbiBsb29raW5nIGludGVyLXBhdGllbnQgKENPTkZJUk0gV0hFVEhFUiBUSEVZIFNQRUNJRklDQUxMWSBSRVBPUlRFRCBUSElTKS4gCgo=