Description

Figures

load("~/GIT/tcgaMut/ppts/kgca_filtered_mr_gtype3_expr.Rda")
fread("/home/tc/DATA/dataset/pan20/covar") ->covar
kgca_filtered_mr_gtype3_expr <-
  left_join(kgca_filtered_mr_gtype3_expr,covar,by=c("Hugo_Symbol"="gene"))
Pyrimidine_pathway <- c("CAD", "UMPS", "DHODH", "CPS1")
sig22 <-
  c(
  "TP53",
  "PIK3CA",
  "PTEN",
  "RB1",
  "KRAS",
  "NRAS",
  "BRAF",
  "CDKN2A",
  "FBXW7",
  "ARID1A" ,
  "MLL2", # not found
  "STAG2",
  "ATM",
  "CASP8",
  "CTCF",
  "ERBB3",
  "HLA-A",
  "HRAS",
  "IDH1",
  "NF1",
  "NFE2L2",
  "PIK3R1"
  )
oppallate <- c("#000000","#0072B2")
gg <- ggplot(data=kgca_filtered_mr_gtype3_expr,aes(x=log2(expr),y=mrca)) +
#  geom_point(alpha=0.01)+
#  stat_smooth()+
#  geom_hex()+lo
  
    geom_smooth(se=FALSE, colour="grey")+
  stat_summary_bin(fun.data= "median_hilow",geom="errorbar",bins=20,width=0.2,colour="grey")+
    stat_summary_bin(fun.data= "median_hilow",geom="pointrange",bins=20,width=0.2,colour="grey")+
  
  geom_point(data=kgca_filtered_mr_gtype3_expr %>% filter(Genetype %in% c("oncogene","TSG")),aes(colour=Genetype),shape=21)+
  geom_point(data=kgca_filtered_mr_gtype3_expr %>% filter(Genetype %in% c("Pyrimidine_biosyn")),colour="red")+
  scale_colour_manual(values=oppallate)+
  scale_y_log10()+
#  scale_x_log10()+
   geom_text_repel(data=kgca_filtered_mr_gtype3_expr %>% filter(Hugo_Symbol %in% c(Pyrimidine_pathway)),aes(label = Hugo_Symbol),colour="red")+
  
  xlab("Gene expression level (log2)")+
  ylab("Gene mutation rate (#Mutations / bp)")+
  theme_classic()
print(gg)

#fread("~/Downloads/Census_allSat May 20 05-12-33 2017.csv") ->cgc
#cgc %>% filter(grepl("Mis|N|F|S",`Mutation Types`)) ->cgc.filtered
#cgc %>% filter(grepl("Mis|N|F|S",`Mutation Types`)) ->cgc.filtered
#cgc.filtered %>% mutate(Hugo_Symbol=`Gene Symbol`,Genetype=`Role in Cancer`) %>% select(Hugo_Symbol,Genetype) ->cgc.filtered.min
#load("~/GIT/tcgaMut/data/CG.uni_cgc_filtered.rda")
fread("~/Downloads/Census_allSat May 20 05-12-33 2017.csv") ->cgc
#cgc %>% filter(grepl("Mis|N|F|S",`Mutation Types`)) ->cgc.filtered
cgc %>% filter(grepl("Mis|N|F|S",`Mutation Types`)) ->cgc.filtered
#Pyrimidine_pathway <- c("CAD", "UMPS", "DHODH", "CPS1")
cgc.filtered %>% mutate(Hugo_Symbol=`Gene Symbol`,Genetype=`Role in Cancer`) %>% select(Hugo_Symbol,Genetype) ->cgc.filtered.min
fread("~/DATA/dataset/pan20/pan20_out.sig_genes.txt") ->
  pan20.sigg
  left_join(pan20.sigg, cgc.filtered.min, by = c("gene" = "Hugo_Symbol")) -> pan20.sigg.cgc
  pan20.sigg.cgc %>% mutate(q2 = ifelse(q < 2.2e-16, 2.2e-16, q)) -> pan20.sigg.cgc
  pan20.sigg.cgc %>% mutate(Genetype = ifelse(is.na(Genetype), "Non-cancer", Genetype)) ->
  pan20.sigg.cgc
# pan20.sigg.cgc <-
#   left_join(pan20.sigg.cgc,covar,by="gene")
  
  
gg <-
  ggplot(data = pan20.sigg.cgc %>% filter(Genetype %in% c("oncogene", "TSG", "Non-cancer")), aes(x =                                                                                            log2(expr), y = q)) +
#  geom_smooth(se=FALSE, colour="grey") +
  #  geom_point()+
  #  stat_summary_bin(data= pan20.sigg.cgc %>% filter(Genetype %in% c("oncogene","TSG")),fun.data= "median_hilow",geom="errorbar",bins=20,width=0.2,alpha=0.2,colour="blue")+
  stat_summary_bin(
    data = pan20.sigg.cgc %>% filter(Genetype %in% c("Non-cancer")),
    fun.data = "median_hilow",
    geom = "errorbar",
    bins = 10,
    width = 0.2,
    colour = "grey"
  ) +
  stat_summary_bin(
    data = pan20.sigg.cgc %>% filter(Genetype %in% c("Non-cancer")),
    fun.data = "median_hilow",
    geom = "pointrange",
    bins = 10,
    width = 0.2,
    colour = "grey"
  ) +
  # geom_point(
  #   data = pan20.sigg.cgc %>% filter(Genetype %in% c("Non-cancer")),
  #   alpha=0.05
  #   ) +
  geom_point(data = pan20.sigg.cgc %>% filter(Genetype %in% c("oncogene", "TSG")),
             aes(colour = Genetype),
             shape=21,
             ) +
  
  geom_point(
    data = pan20.sigg.cgc %>% filter(gene %in% Pyrimidine_pathway),
    colour = "red",
    size = 2
  ) +
  geom_text_repel(
    data = pan20.sigg.cgc %>% filter(gene %in% Pyrimidine_pathway),
    aes(label = gene),
    colour = "blue"
  ) +
  ylim(1, 0) +
  scale_colour_manual(values = oppallate) +
  
  
  ylab("MutsigCV Q-value")+
  theme_classic()
#  theme_classic()
  print(gg)

  gg <-
    ggplot(data = pan20.sigg.cgc %>% filter(
      Genetype %in% c("oncogene", "TSG", "Non-cancer")
      ), aes(x = Genetype, y = q2)) +
    scale_y_log10() +
    geom_jitter() +
    geom_point(data = pan20.sigg.cgc %>% filter(gene %in% Pyrimidine_pathway),colour = "yellow") +
    geom_text_repel(
      data = pan20.sigg.cgc %>% filter(gene %in% Pyrimidine_pathway),
      aes(label = gene),
      colour = "blue") +
    ylab("MutsigCV Q-value")
    
    
    
  print(gg)
# pan20.sigg.violin <-
#  pan20.sigg.cgc %>% mutate(Genetype= ifelse(gene %in% Pyrimidine_pathway,"Pyrimidine_biosyn",Genetype))
  gg <-
    ggplot(data = pan20.sigg.cgc %>% filter(
      Genetype %in% c("oncogene", "TSG", "Non-cancer")
      ), aes(x = Genetype, y = q2)) +
    scale_y_log10() +
    geom_violin() +
    geom_point(data = pan20.sigg.cgc %>% filter(gene %in% Pyrimidine_pathway),colour="red")+
  
  #  geom_jitter(data = pan20.sigg.cgc %>% filter(Genetype %in% c("oncogene", "TSG")),
   #   aes(colour=Genetype),size=2,height=0,alpha=0.33) +
     geom_text_repel(
       data = pan20.sigg.cgc %>% filter(gene %in% Pyrimidine_pathway),
       aes(label = gene),
       colour = "blue") +
    ylab("MutsigCV Q-value")
    
    
    
  print(gg)

# pan20.sigg.violin <-
#  pan20.sigg.cgc %>% mutate(Genetype= ifelse(gene %in% Pyrimidine_pathway,"Pyrimidine_biosyn",Genetype))
  gg <-
    ggplot(data = pan20.sigg.cgc %>% filter(
      Genetype %in% c("oncogene", "TSG", "Non-cancer")
      ), aes(x = Genetype, y = q2)) +
    scale_y_log10() +
    geom_boxplot() +
    geom_point(data = pan20.sigg.cgc %>% filter(gene %in% Pyrimidine_pathway),colour="red")+
  #  geom_jitter(data = pan20.sigg.cgc %>% filter(Genetype %in% c("oncogene", "TSG")),
   #   aes(colour=Genetype),size=2,height=0,alpha=0.33) +
     geom_text_repel(
       data = pan20.sigg.cgc %>% filter(gene %in% Pyrimidine_pathway),
       aes(label = gene),
       colour = "blue") +
    ylab("MutsigCV Q-value")
    
    
    
  print(gg)

LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OgogIGJvb2tkb3duOjpodG1sX2RvY3VtZW50MjoKICAgIGZpZ19jYXB0aW9uOiB5ZXMKICAgIHRvYzogbm8KICAgIG51bWJlcl9zZWN0aW9uOiBubwogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQKLS0tCgoKLSBtZXRob2QgcGFyYWcKLSBkZXNjcmlwdAoKLSBjYXB0aW9uCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGNhY2hlPVRSVUUsIGVjaG8gPSBGQUxTRSxyZXN1bHRzID0gJ2FzaXMnLGZpZy5hbGlnbiA9ICJjZW50ZXIiLHdhcm5pbmcgPSBGQUxTRSkKCmRvd25sb2FkX2FuZF9vcl9sb2FkIDwtIGZ1bmN0aW9uKHgpIHsKICB5IDwtIHhbISh4ICVpbiUgaW5zdGFsbGVkLnBhY2thZ2VzKClbLCAiUGFja2FnZSJdKV0KICBpZiAobGVuZ3RoKHkpKXsKICBpbnN0YWxsLnBhY2thZ2VzKHksIGRlcGVuZGVuY2llcyA9IFRSVUUpCiAgfQogIHNhcHBseSh4LCByZXF1aXJlLCBjaGFyYWN0ZXIub25seSA9IFRSVUUpCn0KCm15X2xpYnJhcmllcyA8LSBjKCJnZ3Bsb3QyIiwgImRwbHlyIiwidGlkeXIiLCJjaXRyIiwia25pdHIiLCJ4dGFibGUiLCJwYW5kZXIiLCJkYXRhLnRhYmxlIiwiZ2dyZXBlbCIpCmRvd25sb2FkX2FuZF9vcl9sb2FkKG15X2xpYnJhcmllcykKCgoKYGBgCgojIyBEZXNjcmlwdGlvbgoKLSBGaWd1cmUgXEByZWYoZmlnOmZpZzEpCiAgICAtIFNjYXR0ZXJwbG90IG9mIGdlbmUgbXV0YXRpb24gcmF0ZSBhZ2FpbnN0IGF2ZXJhZ2UgZXhwcmVzc2lvbiBsZXZlbCBhY3Jvc3MgOTEgY2VsbCBsaW5lcyBpbiB0aGUgQ0NMRSAoTWljcm9hcnJheSkKICAgIC0gZXJyb3JiYXJzIHNob3cgbWVkaWFuLCAyNSUgcXVhbnRpbGUgYW5kIDc1JSBxdWFudGlsZSBnZW5lIG11dGF0aW9uIHJhdGVzIAogICAgLSBzbW9vdGggbGluZSBpcyBjYWxjdWxhdGVkIHVzaW5nIGdlbmVyYWxpemVkIGFkZGl0aXZlIG1vZGVsIChHQU0pIGluIGdncGxvdDIKICAgIAotIEZpZ3VyZSBcQHJlZihmaWc6ZmlnMikgaXMgdGhlIG11dHNpZ0NWIHEtdmFsdWUgYWdhaW5zdCBleHByZXNzaW9uLiAKICAgIC0gZXJyb3JiYXJzIHNob3cgbWVkaWFuLCAyNSUgcXVhbnRpbGUgYW5kIDc1JSBxdWFudGlsZSBxLXZhbHVlLCB3aGljaCBhcmUgY29tcHJlc3NlZCB0byAxLjAwLCBtZWFuaW5nIHRoZXkgYXJlIGluc2lnbmlmaWNhbnQKCgoKLSBGaWd1cmUgXEByZWYoZmlnOmZpZzMpIG1pZ2h0IGJlIG1vcmUgaW50ZXJlc3RpbmcuIEl0IGlzIGEgdmlvbGluIHBsb3Qgb2YgbXV0c2lnQ1YgcS12YWx1ZSBpbiBub24tY2FuY2VyIGdlbmVzLCBvbmNvZ2VuZXMgYW5kIFRTR3MuIHdoaWNoIGhhcyBtb3JlIGRldGFpbHMgb24gZGVuc2l0eSB0aGFuIHRoZSBib3hwbG90IGFzIGluIFxAcmVmKGZpZzpmaWc0KQoKIyMgRmlndXJlcwoKCmBgYHtyfQpsb2FkKCJ+L0dJVC90Y2dhTXV0L3BwdHMva2djYV9maWx0ZXJlZF9tcl9ndHlwZTNfZXhwci5SZGEiKQpmcmVhZCgiL2hvbWUvdGMvREFUQS9kYXRhc2V0L3BhbjIwL2NvdmFyIikgLT5jb3ZhcgoKa2djYV9maWx0ZXJlZF9tcl9ndHlwZTNfZXhwciA8LQogIGxlZnRfam9pbihrZ2NhX2ZpbHRlcmVkX21yX2d0eXBlM19leHByLGNvdmFyLGJ5PWMoIkh1Z29fU3ltYm9sIj0iZ2VuZSIpKQoKUHlyaW1pZGluZV9wYXRod2F5IDwtIGMoIkNBRCIsICJVTVBTIiwgIkRIT0RIIiwgIkNQUzEiKQoKc2lnMjIgPC0KICBjKAogICJUUDUzIiwKICAiUElLM0NBIiwKICAiUFRFTiIsCiAgIlJCMSIsCiAgIktSQVMiLAogICJOUkFTIiwKICAiQlJBRiIsCiAgIkNES04yQSIsCiAgIkZCWFc3IiwKICAiQVJJRDFBIiAsCiAgIk1MTDIiLCAjIG5vdCBmb3VuZAogICJTVEFHMiIsCiAgIkFUTSIsCiAgIkNBU1A4IiwKICAiQ1RDRiIsCiAgIkVSQkIzIiwKICAiSExBLUEiLAogICJIUkFTIiwKICAiSURIMSIsCiAgIk5GMSIsCiAgIk5GRTJMMiIsCiAgIlBJSzNSMSIKICApCgpgYGAKCgoKCgoKCgoKCgpgYGB7ciBmaWcxLCB3YXJuaW5nPUZBTFNFLG1lc3NhZ2U9RkFMU0UsZmlnLmNhcD0iR2VuZSBtdXRhdGlvbiByYXRlIGFnYWluc3QgZXhwcmVzc2lvbiBsZXZlbCJ9CgpvcHBhbGxhdGUgPC0gYygiIzAwMDAwMCIsIiMwMDcyQjIiKQoKZ2cgPC0gZ2dwbG90KGRhdGE9a2djYV9maWx0ZXJlZF9tcl9ndHlwZTNfZXhwcixhZXMoeD1sb2cyKGV4cHIpLHk9bXJjYSkpICsKIyAgZ2VvbV9wb2ludChhbHBoYT0wLjAxKSsKIyAgc3RhdF9zbW9vdGgoKSsKIyAgZ2VvbV9oZXgoKStsbwogIAogICAgZ2VvbV9zbW9vdGgoc2U9RkFMU0UsIGNvbG91cj0iZ3JleSIpKwogIHN0YXRfc3VtbWFyeV9iaW4oZnVuLmRhdGE9ICJtZWRpYW5faGlsb3ciLGdlb209ImVycm9yYmFyIixiaW5zPTIwLHdpZHRoPTAuMixjb2xvdXI9ImdyZXkiKSsKICAgIHN0YXRfc3VtbWFyeV9iaW4oZnVuLmRhdGE9ICJtZWRpYW5faGlsb3ciLGdlb209InBvaW50cmFuZ2UiLGJpbnM9MjAsd2lkdGg9MC4yLGNvbG91cj0iZ3JleSIpKwoKICAKICBnZW9tX3BvaW50KGRhdGE9a2djYV9maWx0ZXJlZF9tcl9ndHlwZTNfZXhwciAlPiUgZmlsdGVyKEdlbmV0eXBlICVpbiUgYygib25jb2dlbmUiLCJUU0ciKSksYWVzKGNvbG91cj1HZW5ldHlwZSksc2hhcGU9MjEpKwogIGdlb21fcG9pbnQoZGF0YT1rZ2NhX2ZpbHRlcmVkX21yX2d0eXBlM19leHByICU+JSBmaWx0ZXIoR2VuZXR5cGUgJWluJSBjKCJQeXJpbWlkaW5lX2Jpb3N5biIpKSxjb2xvdXI9InJlZCIpKwogIHNjYWxlX2NvbG91cl9tYW51YWwodmFsdWVzPW9wcGFsbGF0ZSkrCgoKICBzY2FsZV95X2xvZzEwKCkrCiMgIHNjYWxlX3hfbG9nMTAoKSsKIyAgIGdlb21fdGV4dF9yZXBlbChkYXRhPWtnY2FfZmlsdGVyZWRfbXJfZ3R5cGUzX2V4cHIgJT4lIGZpbHRlcihIdWdvX1N5bWJvbCAlaW4lIGMoUHlyaW1pZGluZV9wYXRod2F5KSksYWVzKGxhYmVsID0gSHVnb19TeW1ib2wpLGNvbG91cj0icmVkIikrCiAgCiAgeGxhYigiR2VuZSBleHByZXNzaW9uIGxldmVsIChsb2cyKSIpKwogIHlsYWIoIkdlbmUgbXV0YXRpb24gcmF0ZSAoI011dGF0aW9ucyAvIGJwKSIpKwogIHRoZW1lX2NsYXNzaWMoKQoKCnByaW50KGdnKQoKCmBgYAoKYGBge3J9CgpgYGAKCgpgYGB7cn0KI2ZyZWFkKCJ+L0Rvd25sb2Fkcy9DZW5zdXNfYWxsU2F0IE1heSAyMCAwNS0xMi0zMyAyMDE3LmNzdiIpIC0+Y2djCiNjZ2MgJT4lIGZpbHRlcihncmVwbCgiTWlzfE58RnxTIixgTXV0YXRpb24gVHlwZXNgKSkgLT5jZ2MuZmlsdGVyZWQKI2NnYyAlPiUgZmlsdGVyKGdyZXBsKCJNaXN8TnxGfFMiLGBNdXRhdGlvbiBUeXBlc2ApKSAtPmNnYy5maWx0ZXJlZAoKI2NnYy5maWx0ZXJlZCAlPiUgbXV0YXRlKEh1Z29fU3ltYm9sPWBHZW5lIFN5bWJvbGAsR2VuZXR5cGU9YFJvbGUgaW4gQ2FuY2VyYCkgJT4lIHNlbGVjdChIdWdvX1N5bWJvbCxHZW5ldHlwZSkgLT5jZ2MuZmlsdGVyZWQubWluCgojbG9hZCgifi9HSVQvdGNnYU11dC9kYXRhL0NHLnVuaV9jZ2NfZmlsdGVyZWQucmRhIikKCmZyZWFkKCJ+L0Rvd25sb2Fkcy9DZW5zdXNfYWxsU2F0IE1heSAyMCAwNS0xMi0zMyAyMDE3LmNzdiIpIC0+Y2djCiNjZ2MgJT4lIGZpbHRlcihncmVwbCgiTWlzfE58RnxTIixgTXV0YXRpb24gVHlwZXNgKSkgLT5jZ2MuZmlsdGVyZWQKY2djICU+JSBmaWx0ZXIoZ3JlcGwoIk1pc3xOfEZ8UyIsYE11dGF0aW9uIFR5cGVzYCkpIC0+Y2djLmZpbHRlcmVkCiNQeXJpbWlkaW5lX3BhdGh3YXkgPC0gYygiQ0FEIiwgIlVNUFMiLCAiREhPREgiLCAiQ1BTMSIpCmNnYy5maWx0ZXJlZCAlPiUgbXV0YXRlKEh1Z29fU3ltYm9sPWBHZW5lIFN5bWJvbGAsR2VuZXR5cGU9YFJvbGUgaW4gQ2FuY2VyYCkgJT4lIHNlbGVjdChIdWdvX1N5bWJvbCxHZW5ldHlwZSkgLT5jZ2MuZmlsdGVyZWQubWluCgoKZnJlYWQoIn4vREFUQS9kYXRhc2V0L3BhbjIwL3BhbjIwX291dC5zaWdfZ2VuZXMudHh0IikgLT4KICBwYW4yMC5zaWdnCgogIGxlZnRfam9pbihwYW4yMC5zaWdnLCBjZ2MuZmlsdGVyZWQubWluLCBieSA9IGMoImdlbmUiID0gIkh1Z29fU3ltYm9sIikpIC0+IHBhbjIwLnNpZ2cuY2djCgogIHBhbjIwLnNpZ2cuY2djICU+JSBtdXRhdGUocTIgPSBpZmVsc2UocSA8IDIuMmUtMTYsIDIuMmUtMTYsIHEpKSAtPiBwYW4yMC5zaWdnLmNnYwoKICBwYW4yMC5zaWdnLmNnYyAlPiUgbXV0YXRlKEdlbmV0eXBlID0gaWZlbHNlKGlzLm5hKEdlbmV0eXBlKSwgIk5vbi1jYW5jZXIiLCBHZW5ldHlwZSkpIC0+CiAgcGFuMjAuc2lnZy5jZ2MKCiMgcGFuMjAuc2lnZy5jZ2MgPC0KIyAgIGxlZnRfam9pbihwYW4yMC5zaWdnLmNnYyxjb3ZhcixieT0iZ2VuZSIpCiAgCiAgCmBgYAoKCmBgYHtyIGZpZzIsZmlnLmNhcD0iTXV0c2lnQ1YgcS12YWx1ZSBhZ2FpbnN0IGV4cHJlc3Npb24gbGV2ZWwifQpnZyA8LQogIGdncGxvdChkYXRhID0gcGFuMjAuc2lnZy5jZ2MgJT4lIGZpbHRlcihHZW5ldHlwZSAlaW4lIGMoIm9uY29nZW5lIiwgIlRTRyIsICJOb24tY2FuY2VyIikpLCBhZXMoeCA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2cyKGV4cHIpLCB5ID0gcSkpICsKIyAgZ2VvbV9zbW9vdGgoc2U9RkFMU0UsIGNvbG91cj0iZ3JleSIpICsKICAjICBnZW9tX3BvaW50KCkrCiAgIyAgc3RhdF9zdW1tYXJ5X2JpbihkYXRhPSBwYW4yMC5zaWdnLmNnYyAlPiUgZmlsdGVyKEdlbmV0eXBlICVpbiUgYygib25jb2dlbmUiLCJUU0ciKSksZnVuLmRhdGE9ICJtZWRpYW5faGlsb3ciLGdlb209ImVycm9yYmFyIixiaW5zPTIwLHdpZHRoPTAuMixhbHBoYT0wLjIsY29sb3VyPSJibHVlIikrCiAgc3RhdF9zdW1tYXJ5X2JpbigKICAgIGRhdGEgPSBwYW4yMC5zaWdnLmNnYyAlPiUgZmlsdGVyKEdlbmV0eXBlICVpbiUgYygiTm9uLWNhbmNlciIpKSwKICAgIGZ1bi5kYXRhID0gIm1lZGlhbl9oaWxvdyIsCiAgICBnZW9tID0gImVycm9yYmFyIiwKICAgIGJpbnMgPSAxMCwKICAgIHdpZHRoID0gMC4yLAogICAgY29sb3VyID0gImdyZXkiCiAgKSArCiAgc3RhdF9zdW1tYXJ5X2JpbigKICAgIGRhdGEgPSBwYW4yMC5zaWdnLmNnYyAlPiUgZmlsdGVyKEdlbmV0eXBlICVpbiUgYygiTm9uLWNhbmNlciIpKSwKICAgIGZ1bi5kYXRhID0gIm1lZGlhbl9oaWxvdyIsCiAgICBnZW9tID0gInBvaW50cmFuZ2UiLAogICAgYmlucyA9IDEwLAogICAgd2lkdGggPSAwLjIsCiAgICBjb2xvdXIgPSAiZ3JleSIKICApICsKICAjIGdlb21fcG9pbnQoCiAgIyAgIGRhdGEgPSBwYW4yMC5zaWdnLmNnYyAlPiUgZmlsdGVyKEdlbmV0eXBlICVpbiUgYygiTm9uLWNhbmNlciIpKSwKICAjICAgYWxwaGE9MC4wNQogICMgICApICsKICBnZW9tX3BvaW50KGRhdGEgPSBwYW4yMC5zaWdnLmNnYyAlPiUgZmlsdGVyKEdlbmV0eXBlICVpbiUgYygib25jb2dlbmUiLCAiVFNHIikpLAogICAgICAgICAgICAgYWVzKGNvbG91ciA9IEdlbmV0eXBlKSwKICAgICAgICAgICAgIHNoYXBlPTIxLAogICAgICAgICAgICAgKSArCiAgCiAgZ2VvbV9wb2ludCgKICAgIGRhdGEgPSBwYW4yMC5zaWdnLmNnYyAlPiUgZmlsdGVyKGdlbmUgJWluJSBQeXJpbWlkaW5lX3BhdGh3YXkpLAogICAgY29sb3VyID0gInJlZCIsCiAgICBzaXplID0gMgogICkgKwogIGdlb21fdGV4dF9yZXBlbCgKICAgIGRhdGEgPSBwYW4yMC5zaWdnLmNnYyAlPiUgZmlsdGVyKGdlbmUgJWluJSBQeXJpbWlkaW5lX3BhdGh3YXkpLAogICAgYWVzKGxhYmVsID0gZ2VuZSksCiAgICBjb2xvdXIgPSAiYmx1ZSIKICApICsKICB5bGltKDEsIDApICsKICBzY2FsZV9jb2xvdXJfbWFudWFsKHZhbHVlcyA9IG9wcGFsbGF0ZSkgKwogIAogIAogIHlsYWIoIk11dHNpZ0NWIFEtdmFsdWUiKSsKICB0aGVtZV9jbGFzc2ljKCkKCiMgIHRoZW1lX2NsYXNzaWMoKQoKICBwcmludChnZykKYGBgCgoKCmBgYHtyIGV2YWw9RkFMU0V9CgoKICBnZyA8LQogICAgZ2dwbG90KGRhdGEgPSBwYW4yMC5zaWdnLmNnYyAlPiUgZmlsdGVyKAogICAgICBHZW5ldHlwZSAlaW4lIGMoIm9uY29nZW5lIiwgIlRTRyIsICJOb24tY2FuY2VyIikKICAgICAgKSwgYWVzKHggPSBHZW5ldHlwZSwgeSA9IHEyKSkgKwogICAgc2NhbGVfeV9sb2cxMCgpICsKICAgIGdlb21faml0dGVyKCkgKwogICAgZ2VvbV9wb2ludChkYXRhID0gcGFuMjAuc2lnZy5jZ2MgJT4lIGZpbHRlcihnZW5lICVpbiUgUHlyaW1pZGluZV9wYXRod2F5KSxjb2xvdXIgPSAieWVsbG93IikgKwogICAgZ2VvbV90ZXh0X3JlcGVsKAogICAgICBkYXRhID0gcGFuMjAuc2lnZy5jZ2MgJT4lIGZpbHRlcihnZW5lICVpbiUgUHlyaW1pZGluZV9wYXRod2F5KSwKICAgICAgYWVzKGxhYmVsID0gZ2VuZSksCiAgICAgIGNvbG91ciA9ICJibHVlIikgKwogICAgeWxhYigiTXV0c2lnQ1YgUS12YWx1ZSIpCiAgICAKICAgIAogICAgCiAgcHJpbnQoZ2cpCmBgYAoKCgoKCgpgYGB7ciBmaWczLGZpZy5jYXA9ICJNdXRzaWdDViBRLXZhbHVlIGRpc3RyaWJ1dGlvbiJ9CiMgcGFuMjAuc2lnZy52aW9saW4gPC0KIyAgcGFuMjAuc2lnZy5jZ2MgJT4lIG11dGF0ZShHZW5ldHlwZT0gaWZlbHNlKGdlbmUgJWluJSBQeXJpbWlkaW5lX3BhdGh3YXksIlB5cmltaWRpbmVfYmlvc3luIixHZW5ldHlwZSkpCgogIGdnIDwtCiAgICBnZ3Bsb3QoZGF0YSA9IHBhbjIwLnNpZ2cuY2djICU+JSBmaWx0ZXIoCiAgICAgIEdlbmV0eXBlICVpbiUgYygib25jb2dlbmUiLCAiVFNHIiwgIk5vbi1jYW5jZXIiKQogICAgICApLCBhZXMoeCA9IEdlbmV0eXBlLCB5ID0gcTIpKSArCiAgICBzY2FsZV95X2xvZzEwKCkgKwogICAgZ2VvbV92aW9saW4oKSArCiAgICBnZW9tX3BvaW50KGRhdGEgPSBwYW4yMC5zaWdnLmNnYyAlPiUgZmlsdGVyKGdlbmUgJWluJSBQeXJpbWlkaW5lX3BhdGh3YXkpLGNvbG91cj0icmVkIikrCiAgCiAgIyAgZ2VvbV9qaXR0ZXIoZGF0YSA9IHBhbjIwLnNpZ2cuY2djICU+JSBmaWx0ZXIoR2VuZXR5cGUgJWluJSBjKCJvbmNvZ2VuZSIsICJUU0ciKSksCiAgICMgICBhZXMoY29sb3VyPUdlbmV0eXBlKSxzaXplPTIsaGVpZ2h0PTAsYWxwaGE9MC4zMykgKwogICAgIGdlb21fdGV4dF9yZXBlbCgKICAgICAgIGRhdGEgPSBwYW4yMC5zaWdnLmNnYyAlPiUgZmlsdGVyKGdlbmUgJWluJSBQeXJpbWlkaW5lX3BhdGh3YXkpLAogICAgICAgYWVzKGxhYmVsID0gZ2VuZSksCiAgICAgICBjb2xvdXIgPSAiYmx1ZSIpICsKICAgIHlsYWIoIk11dHNpZ0NWIFEtdmFsdWUiKQogICAgCiAgICAKICAgIAogIHByaW50KGdnKQoKYGBgCgoKCmBgYHtyIGZpZzR9CiMgcGFuMjAuc2lnZy52aW9saW4gPC0KIyAgcGFuMjAuc2lnZy5jZ2MgJT4lIG11dGF0ZShHZW5ldHlwZT0gaWZlbHNlKGdlbmUgJWluJSBQeXJpbWlkaW5lX3BhdGh3YXksIlB5cmltaWRpbmVfYmlvc3luIixHZW5ldHlwZSkpCgogIGdnIDwtCiAgICBnZ3Bsb3QoZGF0YSA9IHBhbjIwLnNpZ2cuY2djICU+JSBmaWx0ZXIoCiAgICAgIEdlbmV0eXBlICVpbiUgYygib25jb2dlbmUiLCAiVFNHIiwgIk5vbi1jYW5jZXIiKQogICAgICApLCBhZXMoeCA9IEdlbmV0eXBlLCB5ID0gcTIpKSArCiAgICBzY2FsZV95X2xvZzEwKCkgKwogICAgZ2VvbV9ib3hwbG90KCkgKwogICAgZ2VvbV9wb2ludChkYXRhID0gcGFuMjAuc2lnZy5jZ2MgJT4lIGZpbHRlcihnZW5lICVpbiUgUHlyaW1pZGluZV9wYXRod2F5KSxjb2xvdXI9InJlZCIpKwogICMgIGdlb21faml0dGVyKGRhdGEgPSBwYW4yMC5zaWdnLmNnYyAlPiUgZmlsdGVyKEdlbmV0eXBlICVpbiUgYygib25jb2dlbmUiLCAiVFNHIikpLAogICAjICAgYWVzKGNvbG91cj1HZW5ldHlwZSksc2l6ZT0yLGhlaWdodD0wLGFscGhhPTAuMzMpICsKICAgICBnZW9tX3RleHRfcmVwZWwoCiAgICAgICBkYXRhID0gcGFuMjAuc2lnZy5jZ2MgJT4lIGZpbHRlcihnZW5lICVpbiUgUHlyaW1pZGluZV9wYXRod2F5KSwKICAgICAgIGFlcyhsYWJlbCA9IGdlbmUpLAogICAgICAgY29sb3VyID0gImJsdWUiKSArCiAgICB5bGFiKCJNdXRzaWdDViBRLXZhbHVlIikKICAgIAogICAgCiAgICAKICBwcmludChnZykKCmBgYAoK