library(gridExtra)
library(ggplot2)
a3$type<-"glmnet200"
a4$type<-"glmnet250"
a5$type<-"glmnet350"
a6$type<-"glmnet500"
x1$type<-"svr200"
x2$type<-"svr250"
x3$type<-"svr300"
x4$type<-"svr500"
z4$type<-"pls500"
z3$type<-"pls350"
z2$type<-"pls250"
z1$type<-"pls200"
heatmap <-rbind(a3,a4,a5,a6,
x1,x2,x4,x5,
z1,z2,z3,z4)
Heatmap per dataset (Pearson)
#library(ggplotify)
#par(mfrow=c(2,1))
pattern="DS"
heatmap %>% group_by(type,datasets) %>% summarise(pearson=mean(pearson)) %>% reshape2::acast(type ~datasets) %>% as.matrix() %>% d3heatmap::d3heatmap(colors = "Blues")
Heatmap per dataset rnaseq (Pearson)
heatmap %>% filter(datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% group_by(type,datasets) %>% summarise(pearson=mean(pearson)) %>% reshape2::acast(type ~datasets) %>% as.matrix() %>% d3heatmap::d3heatmap(colors = "Blues")
Heatmap per dataset (Spearman)
heatmap %>% group_by(type,datasets) %>% summarise(spearman=mean(spearman)) %>% reshape2::acast(type ~datasets) %>% as.matrix() %>% d3heatmap::d3heatmap(colors = "Reds")
Heatmap per dataset rnaseq (Spearman)
heatmap %>% filter(datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% group_by(type,datasets) %>% summarise(spearman=mean(spearman)) %>% reshape2::acast(type ~datasets) %>% as.matrix() %>% d3heatmap::d3heatmap(colors = "Reds")
a3 [glmnet200] Results for glmnet 200 features over 20000 (RF2)
filename<-"./devcon_challenge.glmnet_results_noscale_rf_selected_features_200_20000_all_lines_test_added.csv"
#readr::write_csv(RESULTS,path = filename)
a3<-readr::read_csv(filename) %>% filter(!is.na(pearson))
a3
readr::read_csv(filename) %>% filter(!is.na(pearson)) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
readr::read_csv(filename) %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
a4 [glmnet250] Results for glmnet 250 features over 20000 (RF2)
filename<-"./devcon_challenge.glmnet_results_noscale_rf_selected_features_250_20000_all_lines_test_added.csv"
#readr::write_csv(RESULTS,path = filename)
a4<-readr::read_csv(filename) %>% filter(!is.na(pearson))
a4
readr::read_csv(filename) %>% filter(!is.na(pearson)) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
readr::read_csv(filename) %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
a5 [glmnet350] Results for glmnet 350 features over 20000 (RF2)
filename<-"./devcon_challenge.glmnet_results_noscale_rf_selected_features_350_20000_all_lines_test_added.csv"
#readr::write_csv(RESULTS,path = filename)
a5<-readr::read_csv(filename) %>% filter(!is.na(pearson))
a5
readr::read_csv(filename) %>% filter(!is.na(pearson)) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
readr::read_csv(filename) %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
a6 [glmnet500] Results for glmnet 500 features over 20000 (RF2)
filename<-"./devcon_challenge.glmnet_results_noscale_rf_selected_features_500_20000_all_lines_test_added.csv"
#readr::write_csv(RESULTS,path = filename)
a6<-readr::read_csv(filename) %>% filter(!is.na(pearson))
a6
readr::read_csv(filename) %>% filter(!is.na(pearson)) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
readr::read_csv(filename) %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
NA
x1 [svr200] Results for svr radial noscale 200 features over 20000 (RF2)
filename<-"./devcon_challenge.svr_results_rf_selected_features_200_20000_noscale_all_lines_test_added.csv"
#readr::write_csv(RESULTS,path = filename)
x1<-readr::read_csv(filename) %>% filter(!is.na(pearson))
x1
readr::read_csv(filename) %>% filter(!is.na(pearson)) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
readr::read_csv(filename) %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
x2 [svr250] Results for svr radial noscale 250 features over 20000 (RF2)
filename<-"./devcon_challenge.svr_results_rf_selected_features_250_20000_noscale_all_lines_test_added.csv"
#readr::write_csv(RESULTS,path = filename)
x2<-readr::read_csv(filename) %>% filter(!is.na(pearson))
x2
readr::read_csv(filename) %>% filter(!is.na(pearson)) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
readr::read_csv(filename) %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
x3 [svr350] Results for svr radial noscale 350 features over 20000 (RF2)
filename<-"./devcon_challenge.svr_results_rf_selected_features_350_20000_noscale_all_lines_test_added.csv"
#readr::write_csv(RESULTS,path = filename)
x3<-readr::read_csv(filename) %>% filter(!is.na(pearson))
x3
readr::read_csv(filename) %>% filter(!is.na(pearson)) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
readr::read_csv(filename) %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
x4 [svr500] Results for svr radial noscale 500 features over 20000 (RF2)
filename<-"./devcon_challenge.svr_results_rf_selected_features_500_20000_noscale_all_lines_test_added.csv"
#readr::write_csv(RESULTS,path = filename)
x4<-readr::read_csv(filename) %>% filter(!is.na(pearson))
x4
readr::read_csv(filename) %>% filter(!is.na(pearson)) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
readr::read_csv(filename) %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
z4 [pls500] Results for pls 500 features (RF)
filename<-"./devcon_challenge.pls_results_rf_selected_features_500_20000_noscale_all_lines_test_added.csv"
#readr::write_csv(RESULTS,path = filename)
z4<-readr::read_csv(filename) %>% filter(!is.na(pearson))
z4
readr::read_csv(filename) %>% filter(!is.na(pearson)) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
readr::read_csv(filename) %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
z3 [pls350] Results for pls 350 features (RF)
filename<-"./devcon_challenge.pls_results_rf_selected_features_350_20000_noscale_all_lines_test_added.csv"
#readr::write_csv(RESULTS,path = filename)
z3<-readr::read_csv(filename) %>% filter(!is.na(pearson))
z3
readr::read_csv(filename) %>% filter(!is.na(pearson)) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
readr::read_csv(filename) %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
z2 [pls250] Results for pls 250 features (RF)
filename<-"./devcon_challenge.pls_results_rf_selected_features_250_20000_noscale_all_lines_test_added.csv"
#readr::write_csv(RESULTS,path = filename)
z2<-readr::read_csv(filename) %>% filter(!is.na(pearson))
z2
readr::read_csv(filename) %>% filter(!is.na(pearson)) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
readr::read_csv(filename) %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
z1 [pls200] Results for pls 200 features (RF)
filename<-"./devcon_challenge.pls_results_rf_selected_features_200_20000_noscale_all_lines_test_added.csv"
#readr::write_csv(RESULTS,path = filename)
z1<-readr::read_csv(filename) %>% filter(!is.na(pearson))
z1
readr::read_csv(filename) %>% filter(!is.na(pearson)) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
readr::read_csv(filename) %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
LS0tCnRpdGxlOiAiREVDT05WIERSRUFNIENoYWxsZW5lZ2UgMjAyMCAoMykiCm91dHB1dDogCiAgaHRtbF9ub3RlYm9vazogCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUKICAgIHRvYzogeWVzCi0tLQoKCgpgYGB7ciBmaWcuaGVpZ2h0PTgsIGZpZy53aWR0aD04fQpsaWJyYXJ5KGdyaWRFeHRyYSkKbGlicmFyeShnZ3Bsb3QyKQphMyR0eXBlPC0iZ2xtbmV0MjAwIgphNCR0eXBlPC0iZ2xtbmV0MjUwIgphNSR0eXBlPC0iZ2xtbmV0MzUwIgphNiR0eXBlPC0iZ2xtbmV0NTAwIgp4MSR0eXBlPC0ic3ZyMjAwIgp4MiR0eXBlPC0ic3ZyMjUwIgp4MyR0eXBlPC0ic3ZyMzAwIgp4NCR0eXBlPC0ic3ZyNTAwIgoKejQkdHlwZTwtInBsczUwMCIKejMkdHlwZTwtInBsczM1MCIKejIkdHlwZTwtInBsczI1MCIKejEkdHlwZTwtInBsczIwMCIKCmhlYXRtYXAgPC1yYmluZChhMyxhNCxhNSxhNiwKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgeDEseDIseDQseDUsCiAgICAgICAgICAgICAgICB6MSx6Mix6Myx6NCkKCiAKYGBgCgoKIyMgSGVhdG1hcCBwZXIgZGF0YXNldCAoUGVhcnNvbikKYGBge3IgZmlnLndpZHRoPTcsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiNsaWJyYXJ5KGdncGxvdGlmeSkKI3BhcihtZnJvdz1jKDIsMSkpCnBhdHRlcm49IkRTIgoKaGVhdG1hcCAlPiUgZ3JvdXBfYnkodHlwZSxkYXRhc2V0cykgJT4lICBzdW1tYXJpc2UocGVhcnNvbj1tZWFuKHBlYXJzb24pKSAlPiUgcmVzaGFwZTI6OmFjYXN0KHR5cGUgfmRhdGFzZXRzKSAlPiUgYXMubWF0cml4KCkgJT4lIGQzaGVhdG1hcDo6ZDNoZWF0bWFwKGNvbG9ycyA9ICJCbHVlcyIpCmBgYAojIyBIZWF0bWFwIHBlciBkYXRhc2V0IHJuYXNlcSAoUGVhcnNvbikKYGBge3IgZmlnLndpZHRoPTcsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CgpoZWF0bWFwICU+JSBmaWx0ZXIoZGF0YXNldHMgJWluJSBjKCJEUzQ0NjM5NSIsIkRTNTAwIiwiQ0lBUzQiLCJDSVZBMyIpKSAlPiUgZ3JvdXBfYnkodHlwZSxkYXRhc2V0cykgJT4lICBzdW1tYXJpc2UocGVhcnNvbj1tZWFuKHBlYXJzb24pKSAlPiUgcmVzaGFwZTI6OmFjYXN0KHR5cGUgfmRhdGFzZXRzKSAlPiUgYXMubWF0cml4KCkgJT4lIGQzaGVhdG1hcDo6ZDNoZWF0bWFwKGNvbG9ycyA9ICJCbHVlcyIpCmBgYAoKIyMgSGVhdG1hcCBwZXIgZGF0YXNldCAoU3BlYXJtYW4pCmBgYHtyIGZpZy53aWR0aD03LCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpoZWF0bWFwICU+JSBncm91cF9ieSh0eXBlLGRhdGFzZXRzKSAlPiUgc3VtbWFyaXNlKHNwZWFybWFuPW1lYW4oc3BlYXJtYW4pKSAlPiUgcmVzaGFwZTI6OmFjYXN0KHR5cGUgfmRhdGFzZXRzKSAlPiUgYXMubWF0cml4KCkgJT4lIGQzaGVhdG1hcDo6ZDNoZWF0bWFwKGNvbG9ycyA9ICJSZWRzIikKYGBgCgojIyBIZWF0bWFwIHBlciBkYXRhc2V0IHJuYXNlcSAoU3BlYXJtYW4pCmBgYHtyIGZpZy53aWR0aD03LCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpoZWF0bWFwICAlPiUgZmlsdGVyKGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgJT4lIGdyb3VwX2J5KHR5cGUsZGF0YXNldHMpICU+JSBzdW1tYXJpc2Uoc3BlYXJtYW49bWVhbihzcGVhcm1hbikpICU+JSByZXNoYXBlMjo6YWNhc3QodHlwZSB+ZGF0YXNldHMpICU+JSBhcy5tYXRyaXgoKSAlPiUgZDNoZWF0bWFwOjpkM2hlYXRtYXAoY29sb3JzID0gIlJlZHMiKQpgYGAKCiMjIGEzIFtnbG1uZXQyMDBdIFJlc3VsdHMgZm9yIGdsbW5ldCAyMDAgZmVhdHVyZXMgb3ZlciAyMDAwMCAoUkYyKQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpmaWxlbmFtZTwtIi4vZGV2Y29uX2NoYWxsZW5nZS5nbG1uZXRfcmVzdWx0c19ub3NjYWxlX3JmX3NlbGVjdGVkX2ZlYXR1cmVzXzIwMF8yMDAwMF9hbGxfbGluZXNfdGVzdF9hZGRlZC5jc3YiCiNyZWFkcjo6d3JpdGVfY3N2KFJFU1VMVFMscGF0aCA9IGZpbGVuYW1lKQphMzwtcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgCmEzCnJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICU+JSAgc3VtbWFyaXNlKHBlYXJzb25fbWVhbj1tZWFuKHBlYXJzb24pLHNwZWFybWFuX21lYW49bWVhbihzcGVhcm1hbikpCnJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICAlPiUgZmlsdGVyKCBkYXRhc2V0cyAlaW4lIGMoIkRTNDQ2Mzk1IiwiRFM1MDAiLCJDSUFTNCIsIkNJVkEzIikpICU+JSAgc3VtbWFyaXNlKHBlYXJzb25fbWVhbj1tZWFuKHBlYXJzb24pLHNwZWFybWFuX21lYW49bWVhbihzcGVhcm1hbikpCmBgYAoKCiMjIGE0IFtnbG1uZXQyNTBdIFJlc3VsdHMgZm9yIGdsbW5ldCAyNTAgZmVhdHVyZXMgb3ZlciAyMDAwMCAoUkYyKQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpmaWxlbmFtZTwtIi4vZGV2Y29uX2NoYWxsZW5nZS5nbG1uZXRfcmVzdWx0c19ub3NjYWxlX3JmX3NlbGVjdGVkX2ZlYXR1cmVzXzI1MF8yMDAwMF9hbGxfbGluZXNfdGVzdF9hZGRlZC5jc3YiCiNyZWFkcjo6d3JpdGVfY3N2KFJFU1VMVFMscGF0aCA9IGZpbGVuYW1lKQphNDwtcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgCmE0CnJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICU+JSAgc3VtbWFyaXNlKHBlYXJzb25fbWVhbj1tZWFuKHBlYXJzb24pLHNwZWFybWFuX21lYW49bWVhbihzcGVhcm1hbikpCnJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICAlPiUgZmlsdGVyKCBkYXRhc2V0cyAlaW4lIGMoIkRTNDQ2Mzk1IiwiRFM1MDAiLCJDSUFTNCIsIkNJVkEzIikpICU+JSAgc3VtbWFyaXNlKHBlYXJzb25fbWVhbj1tZWFuKHBlYXJzb24pLHNwZWFybWFuX21lYW49bWVhbihzcGVhcm1hbikpCmBgYAoKIyMgYTUgW2dsbW5ldDM1MF0gUmVzdWx0cyBmb3IgZ2xtbmV0IDM1MCBmZWF0dXJlcyBvdmVyIDIwMDAwIChSRjIpCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmZpbGVuYW1lPC0iLi9kZXZjb25fY2hhbGxlbmdlLmdsbW5ldF9yZXN1bHRzX25vc2NhbGVfcmZfc2VsZWN0ZWRfZmVhdHVyZXNfMzUwXzIwMDAwX2FsbF9saW5lc190ZXN0X2FkZGVkLmNzdiIKI3JlYWRyOjp3cml0ZV9jc3YoUkVTVUxUUyxwYXRoID0gZmlsZW5hbWUpCmE1PC1yZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAKYTUKcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgICU+JSBmaWx0ZXIoIGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKYGBgCgojIyBhNiBbZ2xtbmV0NTAwXSBSZXN1bHRzIGZvciBnbG1uZXQgNTAwIGZlYXR1cmVzIG92ZXIgMjAwMDAgKFJGMikKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KZmlsZW5hbWU8LSIuL2RldmNvbl9jaGFsbGVuZ2UuZ2xtbmV0X3Jlc3VsdHNfbm9zY2FsZV9yZl9zZWxlY3RlZF9mZWF0dXJlc181MDBfMjAwMDBfYWxsX2xpbmVzX3Rlc3RfYWRkZWQuY3N2IgojcmVhZHI6OndyaXRlX2NzdihSRVNVTFRTLHBhdGggPSBmaWxlbmFtZSkKYTY8LXJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpIAphNgpyZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAlPiUgIHN1bW1hcmlzZShwZWFyc29uX21lYW49bWVhbihwZWFyc29uKSxzcGVhcm1hbl9tZWFuPW1lYW4oc3BlYXJtYW4pKQpyZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAgJT4lIGZpbHRlciggZGF0YXNldHMgJWluJSBjKCJEUzQ0NjM5NSIsIkRTNTAwIiwiQ0lBUzQiLCJDSVZBMyIpKSAlPiUgIHN1bW1hcmlzZShwZWFyc29uX21lYW49bWVhbihwZWFyc29uKSxzcGVhcm1hbl9tZWFuPW1lYW4oc3BlYXJtYW4pKQoKYGBgCiMjIHgxIFtzdnIyMDBdIFJlc3VsdHMgZm9yIHN2ciByYWRpYWwgbm9zY2FsZSAyMDAgZmVhdHVyZXMgb3ZlciAyMDAwMCAoUkYyKSAKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KZmlsZW5hbWU8LSIuL2RldmNvbl9jaGFsbGVuZ2Uuc3ZyX3Jlc3VsdHNfcmZfc2VsZWN0ZWRfZmVhdHVyZXNfMjAwXzIwMDAwX25vc2NhbGVfYWxsX2xpbmVzX3Rlc3RfYWRkZWQuY3N2IgojcmVhZHI6OndyaXRlX2NzdihSRVNVTFRTLHBhdGggPSBmaWxlbmFtZSkKeDE8LXJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpIAp4MQpyZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAlPiUgIHN1bW1hcmlzZShwZWFyc29uX21lYW49bWVhbihwZWFyc29uKSxzcGVhcm1hbl9tZWFuPW1lYW4oc3BlYXJtYW4pKQpyZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAgJT4lIGZpbHRlciggZGF0YXNldHMgJWluJSBjKCJEUzQ0NjM5NSIsIkRTNTAwIiwiQ0lBUzQiLCJDSVZBMyIpKSAlPiUgIHN1bW1hcmlzZShwZWFyc29uX21lYW49bWVhbihwZWFyc29uKSxzcGVhcm1hbl9tZWFuPW1lYW4oc3BlYXJtYW4pKQpgYGAKCgoKIyMgeDIgW3N2cjI1MF0gUmVzdWx0cyBmb3Igc3ZyIHJhZGlhbCBub3NjYWxlIDI1MCBmZWF0dXJlcyBvdmVyIDIwMDAwIChSRjIpIApgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpmaWxlbmFtZTwtIi4vZGV2Y29uX2NoYWxsZW5nZS5zdnJfcmVzdWx0c19yZl9zZWxlY3RlZF9mZWF0dXJlc18yNTBfMjAwMDBfbm9zY2FsZV9hbGxfbGluZXNfdGVzdF9hZGRlZC5jc3YiCiNyZWFkcjo6d3JpdGVfY3N2KFJFU1VMVFMscGF0aCA9IGZpbGVuYW1lKQp4MjwtcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgCngyCnJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICU+JSAgc3VtbWFyaXNlKHBlYXJzb25fbWVhbj1tZWFuKHBlYXJzb24pLHNwZWFybWFuX21lYW49bWVhbihzcGVhcm1hbikpCnJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICAlPiUgZmlsdGVyKCBkYXRhc2V0cyAlaW4lIGMoIkRTNDQ2Mzk1IiwiRFM1MDAiLCJDSUFTNCIsIkNJVkEzIikpICU+JSAgc3VtbWFyaXNlKHBlYXJzb25fbWVhbj1tZWFuKHBlYXJzb24pLHNwZWFybWFuX21lYW49bWVhbihzcGVhcm1hbikpCmBgYAoKCiMjIHgzIFtzdnIzNTBdIFJlc3VsdHMgZm9yIHN2ciByYWRpYWwgbm9zY2FsZSAzNTAgZmVhdHVyZXMgb3ZlciAyMDAwMCAoUkYyKSAKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KZmlsZW5hbWU8LSIuL2RldmNvbl9jaGFsbGVuZ2Uuc3ZyX3Jlc3VsdHNfcmZfc2VsZWN0ZWRfZmVhdHVyZXNfMzUwXzIwMDAwX25vc2NhbGVfYWxsX2xpbmVzX3Rlc3RfYWRkZWQuY3N2IgojcmVhZHI6OndyaXRlX2NzdihSRVNVTFRTLHBhdGggPSBmaWxlbmFtZSkKeDM8LXJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpIAp4MwpyZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAlPiUgIHN1bW1hcmlzZShwZWFyc29uX21lYW49bWVhbihwZWFyc29uKSxzcGVhcm1hbl9tZWFuPW1lYW4oc3BlYXJtYW4pKQpyZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAgJT4lIGZpbHRlciggZGF0YXNldHMgJWluJSBjKCJEUzQ0NjM5NSIsIkRTNTAwIiwiQ0lBUzQiLCJDSVZBMyIpKSAlPiUgIHN1bW1hcmlzZShwZWFyc29uX21lYW49bWVhbihwZWFyc29uKSxzcGVhcm1hbl9tZWFuPW1lYW4oc3BlYXJtYW4pKQpgYGAKCgojIyB4NCBbc3ZyNTAwXSBSZXN1bHRzIGZvciBzdnIgcmFkaWFsIG5vc2NhbGUgNTAwIGZlYXR1cmVzIG92ZXIgMjAwMDAgKFJGMikgCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmZpbGVuYW1lPC0iLi9kZXZjb25fY2hhbGxlbmdlLnN2cl9yZXN1bHRzX3JmX3NlbGVjdGVkX2ZlYXR1cmVzXzUwMF8yMDAwMF9ub3NjYWxlX2FsbF9saW5lc190ZXN0X2FkZGVkLmNzdiIKI3JlYWRyOjp3cml0ZV9jc3YoUkVTVUxUUyxwYXRoID0gZmlsZW5hbWUpCng0PC1yZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAKeDQKcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgICU+JSBmaWx0ZXIoIGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKYGBgCgojIyB6NCBbcGxzNTAwXSBSZXN1bHRzIGZvciBwbHMgNTAwIGZlYXR1cmVzIChSRikKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KZmlsZW5hbWU8LSIuL2RldmNvbl9jaGFsbGVuZ2UucGxzX3Jlc3VsdHNfcmZfc2VsZWN0ZWRfZmVhdHVyZXNfNTAwXzIwMDAwX25vc2NhbGVfYWxsX2xpbmVzX3Rlc3RfYWRkZWQuY3N2IgojcmVhZHI6OndyaXRlX2NzdihSRVNVTFRTLHBhdGggPSBmaWxlbmFtZSkKejQ8LXJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpIAp6NApyZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAlPiUgIHN1bW1hcmlzZShwZWFyc29uX21lYW49bWVhbihwZWFyc29uKSxzcGVhcm1hbl9tZWFuPW1lYW4oc3BlYXJtYW4pKQpyZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAgJT4lIGZpbHRlciggZGF0YXNldHMgJWluJSBjKCJEUzQ0NjM5NSIsIkRTNTAwIiwiQ0lBUzQiLCJDSVZBMyIpKSAlPiUgIHN1bW1hcmlzZShwZWFyc29uX21lYW49bWVhbihwZWFyc29uKSxzcGVhcm1hbl9tZWFuPW1lYW4oc3BlYXJtYW4pKQpgYGAKIyMgejMgW3BsczM1MF0gUmVzdWx0cyBmb3IgcGxzIDM1MCBmZWF0dXJlcyAoUkYpCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmZpbGVuYW1lPC0iLi9kZXZjb25fY2hhbGxlbmdlLnBsc19yZXN1bHRzX3JmX3NlbGVjdGVkX2ZlYXR1cmVzXzM1MF8yMDAwMF9ub3NjYWxlX2FsbF9saW5lc190ZXN0X2FkZGVkLmNzdiIKI3JlYWRyOjp3cml0ZV9jc3YoUkVTVUxUUyxwYXRoID0gZmlsZW5hbWUpCnozPC1yZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAKejMKcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgICU+JSBmaWx0ZXIoIGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKYGBgCiMjIHoyIFtwbHMyNTBdIFJlc3VsdHMgZm9yIHBscyAyNTAgZmVhdHVyZXMgKFJGKQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpmaWxlbmFtZTwtIi4vZGV2Y29uX2NoYWxsZW5nZS5wbHNfcmVzdWx0c19yZl9zZWxlY3RlZF9mZWF0dXJlc18yNTBfMjAwMDBfbm9zY2FsZV9hbGxfbGluZXNfdGVzdF9hZGRlZC5jc3YiCiNyZWFkcjo6d3JpdGVfY3N2KFJFU1VMVFMscGF0aCA9IGZpbGVuYW1lKQp6MjwtcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgCnoyCnJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICU+JSAgc3VtbWFyaXNlKHBlYXJzb25fbWVhbj1tZWFuKHBlYXJzb24pLHNwZWFybWFuX21lYW49bWVhbihzcGVhcm1hbikpCnJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICAlPiUgZmlsdGVyKCBkYXRhc2V0cyAlaW4lIGMoIkRTNDQ2Mzk1IiwiRFM1MDAiLCJDSUFTNCIsIkNJVkEzIikpICU+JSAgc3VtbWFyaXNlKHBlYXJzb25fbWVhbj1tZWFuKHBlYXJzb24pLHNwZWFybWFuX21lYW49bWVhbihzcGVhcm1hbikpCmBgYAoKIyMgejEgW3BsczIwMF0gUmVzdWx0cyBmb3IgcGxzIDIwMCBmZWF0dXJlcyAoUkYpCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmZpbGVuYW1lPC0iLi9kZXZjb25fY2hhbGxlbmdlLnBsc19yZXN1bHRzX3JmX3NlbGVjdGVkX2ZlYXR1cmVzXzIwMF8yMDAwMF9ub3NjYWxlX2FsbF9saW5lc190ZXN0X2FkZGVkLmNzdiIKI3JlYWRyOjp3cml0ZV9jc3YoUkVTVUxUUyxwYXRoID0gZmlsZW5hbWUpCnoxPC1yZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAKejEKcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgICU+JSBmaWx0ZXIoIGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKYGBgCg==