getwd()
[1] "C:/Users/J Lab/Desktop"
setwd("C:/Users/J Lab/Desktop")
list.files(pattern=".csv")
[1] "20240402_CSHL-15-TEST.csv" "cowpea_combining_csv"
[3] "day 1 pot weights - Sheet1.csv" "Exp_90_Arabidopsis_DUF247_BEFORE_curated.csv"
[5] "Exp_91_Arabidopsis_DUF247_AFTER_curated.csv" "gprofiler_results_Mov10oe.csv"
[7] "ICPMS_average_HS_20240529.csv" "ICPMS_curated_HS_20240530.csv"
[9] "LncRNA_20201030_meta.csv" "multifacet_test.csv"
[11] "PhotosynQ_aeroponics_HS_20240313.csv" "RSA_RNAi_1.csv"
[13] "RSA_RNAi_2.csv" "RSA_RNAi_3_4.csv"
[15] "RSA_RNAi_dufOE_updated.csv" "RSA2_improved_tracing.csv"
[17] "RSA3_root_tracing_HS.csv" "RSA4_20231016_24_HS.csv"
[19] "Tray_key_match.csv"
aero_ICPMS <- read.csv("ICPMS_curated_HS_20240530.csv")
aero_ICPMS
#Get rid of roots, since most nutrients accumulate in shoot
aero_ICPMS <- subset(aero_ICPMS, aero_ICPMS$Sample != "root")
aero_ICPMS
aero_ICPMS$Treatment2 <- aero_ICPMS$Treatment
unique(aero_ICPMS$Treatment2)
[1] "control" "timed" "soil"
aero_ICPMS$Treatment2 <- gsub("control", "aero", aero_ICPMS$Treatment2)
aero_ICPMS$Treatment2 <- gsub("timed", "aero", aero_ICPMS$Treatment2)
library(ggplot2)
library(ggpubr)

Al_errorplot <- ggerrorplot(aero_ICPMS, y="Al", x="Sample", fill="Sample", color = "Treatment",
desc_stat = "mean_sd", add="jitter",
xlab="", ylab="Amount in 20 mL (mg/L)", main = "Al accumulation in aeroponics vs soil") + theme(axis.text.x = element_text(angle = 90))
Al_errorplot <- Al_errorplot + stat_compare_means(method = "t.test", ref.group = "leaf", label = "p.signif")
Al_errorplot

B_errorplot <- ggerrorplot(aero_ICPMS, y="B", x="Sample", fill="Sample",color = "Treatment",
desc_stat = "mean_sd", add="jitter",
xlab="", ylab="Amount in 20 mL (mg/L)", main = "B accumulation in aeroponics vs soil") + theme(axis.text.x = element_text(angle = 90))
B_errorplot <- B_errorplot + stat_compare_means(method = "t.test", ref.group = "leaf", label = "p.signif")
B_errorplot

Ca_errorplot <- ggerrorplot(aero_ICPMS, y="Ca", x="Sample", fill="Sample", color = "Treatment",
desc_stat = "mean_sd", add="jitter",
xlab="", ylab="Amount in 20 mL (mg/L)", main = "Ca accumulation in aeroponics vs soil") + theme(axis.text.x = element_text(angle = 90))
Ca_errorplot <- Ca_errorplot + stat_compare_means(method = "t.test", ref.group = "leaf", label = "p.signif")
Ca_errorplot

Fe_errorplot <- ggerrorplot(aero_ICPMS, y="Fe", x="Sample", fill="Sample", color = "Treatment",
desc_stat = "mean_sd", add="jitter",
xlab="", ylab="Amount in 20 mL (mg/L)", main = "Fe accumulation in aeroponics vs soil") + theme(axis.text.x = element_text(angle = 90))
Fe_errorplot <- Fe_errorplot + stat_compare_means(method = "t.test", ref.group = "leaf", label = "p.signif")
Fe_errorplot

K_errorplot <- ggerrorplot(aero_ICPMS, y="K", x="Sample", fill="Sample", color = "Treatment",
desc_stat = "mean_sd", add="jitter",
xlab="", ylab="Amount in 20 mL (mg/L)", main = "K accumulation in aeroponics vs soil") + theme(axis.text.x = element_text(angle = 90))
K_errorplot <- K_errorplot + stat_compare_means(method = "t.test", ref.group = "leaf", label = "p.signif")
K_errorplot

Mg_errorplot <- ggerrorplot(aero_ICPMS, y="Mg", x="Sample", fill="Sample", color = "Treatment",
desc_stat = "mean_sd", add="jitter",
xlab="", ylab="Amount in 20 mL (mg/L)", main = "Mg accumulation in aeroponics vs soil") + theme(axis.text.x = element_text(angle = 90))
Mg_errorplot <- Mg_errorplot + stat_compare_means(method = "t.test", ref.group = "leaf", label = "p.signif")
Mg_errorplot

Mn_errorplot <- ggerrorplot(aero_ICPMS, y="Mn", x="Sample", fill="Sample",color = "Treatment",
desc_stat = "mean_sd", add="jitter",
xlab="", ylab="Amount in 20 mL (mg/L)", main = "Mn accumulation in aeroponics vs soil") + theme(axis.text.x = element_text(angle = 90))
Mn_errorplot <- Mn_errorplot + stat_compare_means(method = "t.test", ref.group = "leaf", label = "p.signif")
Mn_errorplot

Mo_errorplot <- ggerrorplot(aero_ICPMS, y="Mo", x="Sample", fill="Sample", color = "Treatment",
desc_stat = "mean_sd", add="jitter",
xlab="", ylab="Amount in 20 mL (mg/L)", main = "Mo accumulation in aeroponics vs soil") + theme(axis.text.x = element_text(angle = 90))
Mo_errorplot <- Mo_errorplot + stat_compare_means(method = "t.test", ref.group = "leaf", label = "p.signif")
Mo_errorplot

Ni_errorplot <- ggerrorplot(aero_ICPMS, y="Ni", x="Sample", fill="Sample", color = "Treatment",
desc_stat = "mean_sd", add="jitter",
xlab="", ylab="Amount in 20 mL (mg/L)", main = "Ni accumulation in aeroponics vs soil") + theme(axis.text.x = element_text(angle = 90))
Ni_errorplot <- Ni_errorplot + stat_compare_means(method = "t.test", ref.group = "leaf", label = "p.signif")
Ni_errorplot

P_errorplot <- ggerrorplot(aero_ICPMS, y="P", x="Sample", fill="Sample", color = "Treatment",
desc_stat = "mean_sd", add="jitter",
xlab="", ylab="Amount in 20 mL (mg/L)", main = "P accumulation in aeroponics vs soil") + theme(axis.text.x = element_text(angle = 90))
P_errorplot <- P_errorplot + stat_compare_means(method = "t.test", ref.group = "leaf", label = "p.signif")
P_errorplot

S_errorplot <- ggerrorplot(aero_ICPMS, y="S", x="Sample", fill="Sample", color = "Treatment",
desc_stat = "mean_sd", add="jitter",
xlab="", ylab="Amount in 20 mL (mg/L)", main = "S accumulation in aeroponics vs soil") + theme(axis.text.x = element_text(angle = 90))
S_errorplot <- S_errorplot + stat_compare_means(method = "t.test", ref.group = "leaf", label = "p.signif")
S_errorplot

Zn_errorplot <- ggerrorplot(aero_ICPMS, y="Zn", x="Sample", fill="Sample", color = "Treatment",
desc_stat = "mean_sd", add="jitter",
xlab="", ylab="Amount in 20 mL (mg/L)", main = "Zn accumulation in aeroponics vs soil") + theme(axis.text.x = element_text(angle = 90))
Zn_errorplot <- Zn_errorplot + stat_compare_means(method = "t.test", ref.group = "leaf", label = "p.signif")
Zn_errorplot

Na_errorplot <- ggerrorplot(aero_ICPMS, y="Na", x="Sample", fill="Sample", color = "Treatment",
desc_stat = "mean_sd", add="jitter",
xlab="", ylab="Amount in 20 mL (mg/L)", main = "Na accumulation in aeroponics vs soil") + theme(axis.text.x = element_text(angle = 90))
Na_errorplot <- Na_errorplot + stat_compare_means(method = "t.test", ref.group = "leaf", label = "p.signif")
Na_errorplot

Cu_errorplot <- ggerrorplot(aero_ICPMS, y="Cu", x="Sample", fill="Sample", color = "Treatment",
desc_stat = "mean_sd", add="jitter",
xlab="", ylab="Amount in 20 mL (mg/L)", main = "Cu accumulation in aeroponics vs soil") + theme(axis.text.x = element_text(angle = 90))
Cu_errorplot <- Cu_errorplot + stat_compare_means(method = "t.test", ref.group = "leaf", label = "p.signif")
Cu_errorplot

#conclusions
#shoot accumulation of Al, Fe, K, Mg, Mn, Mo, P, S, Zn, Na, and Cu are all not significantly different than leaf, but all are much more varied than the leaf samples
#shoot accumulation of B, Ca, and Ni are (*) significantly higher than leaf, but all are much more varied than the leaf samples
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQoNCmBgYHtyfQ0KZ2V0d2QoKQ0Kc2V0d2QoIkM6L1VzZXJzL0ogTGFiL0Rlc2t0b3AiKQ0KbGlzdC5maWxlcyhwYXR0ZXJuPSIuY3N2IikNCg0KYWVyb19JQ1BNUyA8LSByZWFkLmNzdigiSUNQTVNfY3VyYXRlZF9IU18yMDI0MDUzMC5jc3YiKQ0KYWVyb19JQ1BNUw0KYGBgDQpgYGB7cn0NCiNHZXQgcmlkIG9mIHJvb3RzLCBzaW5jZSBtb3N0IG51dHJpZW50cyBhY2N1bXVsYXRlIGluIHNob290DQphZXJvX0lDUE1TIDwtIHN1YnNldChhZXJvX0lDUE1TLCBhZXJvX0lDUE1TJFNhbXBsZSAhPSAicm9vdCIpDQphZXJvX0lDUE1TDQpgYGANCmBgYHtyfQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShnZ3B1YnIpDQpgYGANCg0KYGBge3J9DQojQWx1bWludW0gDQojIEFsIDwtIGdncGxvdChhZXJvX0lDUE1TLCBhZXMoeCA9IFNhbXBsZSwgeSA9IEFsKSwgZ3JvdXBfYnkoVHJlYXRtZW50KSkNCiMgQWwgPC0gQWwgKyBnZW9tX2JveHBsb3QoKSArIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTApKQ0KIyBBbA0KYGBgDQpgYGB7cn0NCkFsX2Vycm9ycGxvdCA8LSBnZ2Vycm9ycGxvdChhZXJvX0lDUE1TLCB5PSJBbCIsIHg9IlNhbXBsZSIsIGZpbGw9IlNhbXBsZSIsIGNvbG9yID0gIlRyZWF0bWVudCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2Nfc3RhdCA9ICJtZWFuX3NkIiwgYWRkPSJqaXR0ZXIiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bGFiPSIiLCB5bGFiPSJBbW91bnQgaW4gMjAgbUwgKG1nL0wpIiwgbWFpbiA9ICJBbCBhY2N1bXVsYXRpb24gaW4gYWVyb3BvbmljcyB2cyBzb2lsIikgKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwKSkNCkFsX2Vycm9ycGxvdCA8LSBBbF9lcnJvcnBsb3QgKyBzdGF0X2NvbXBhcmVfbWVhbnMobWV0aG9kID0gInQudGVzdCIsIHJlZi5ncm91cCA9ICJsZWFmIiwgbGFiZWwgPSAicC5zaWduaWYiKQ0KQWxfZXJyb3JwbG90DQoNCkJfZXJyb3JwbG90IDwtIGdnZXJyb3JwbG90KGFlcm9fSUNQTVMsIHk9IkIiLCB4PSJTYW1wbGUiLCBmaWxsPSJTYW1wbGUiLGNvbG9yID0gIlRyZWF0bWVudCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2Nfc3RhdCA9ICJtZWFuX3NkIiwgYWRkPSJqaXR0ZXIiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bGFiPSIiLCB5bGFiPSJBbW91bnQgaW4gMjAgbUwgKG1nL0wpIiwgbWFpbiA9ICJCIGFjY3VtdWxhdGlvbiBpbiBhZXJvcG9uaWNzIHZzIHNvaWwiKSArIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTApKQ0KQl9lcnJvcnBsb3QgPC0gQl9lcnJvcnBsb3QgKyBzdGF0X2NvbXBhcmVfbWVhbnMobWV0aG9kID0gInQudGVzdCIsIHJlZi5ncm91cCA9ICJsZWFmIiwgbGFiZWwgPSAicC5zaWduaWYiKQ0KQl9lcnJvcnBsb3QNCg0KQ2FfZXJyb3JwbG90IDwtIGdnZXJyb3JwbG90KGFlcm9fSUNQTVMsIHk9IkNhIiwgeD0iU2FtcGxlIiwgZmlsbD0iU2FtcGxlIiwgY29sb3IgPSAiVHJlYXRtZW50IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY19zdGF0ID0gIm1lYW5fc2QiLCBhZGQ9ImppdHRlciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhsYWI9IiIsIHlsYWI9IkFtb3VudCBpbiAyMCBtTCAobWcvTCkiLCBtYWluID0gIkNhIGFjY3VtdWxhdGlvbiBpbiBhZXJvcG9uaWNzIHZzIHNvaWwiKSArIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTApKQ0KQ2FfZXJyb3JwbG90IDwtIENhX2Vycm9ycGxvdCArIHN0YXRfY29tcGFyZV9tZWFucyhtZXRob2QgPSAidC50ZXN0IiwgcmVmLmdyb3VwID0gImxlYWYiLCBsYWJlbCA9ICJwLnNpZ25pZiIpDQpDYV9lcnJvcnBsb3QNCg0KRmVfZXJyb3JwbG90IDwtIGdnZXJyb3JwbG90KGFlcm9fSUNQTVMsIHk9IkZlIiwgeD0iU2FtcGxlIiwgZmlsbD0iU2FtcGxlIiwgY29sb3IgPSAiVHJlYXRtZW50IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY19zdGF0ID0gIm1lYW5fc2QiLCBhZGQ9ImppdHRlciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhsYWI9IiIsIHlsYWI9IkFtb3VudCBpbiAyMCBtTCAobWcvTCkiLCBtYWluID0gIkZlIGFjY3VtdWxhdGlvbiBpbiBhZXJvcG9uaWNzIHZzIHNvaWwiKSArIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTApKQ0KRmVfZXJyb3JwbG90IDwtIEZlX2Vycm9ycGxvdCArIHN0YXRfY29tcGFyZV9tZWFucyhtZXRob2QgPSAidC50ZXN0IiwgcmVmLmdyb3VwID0gImxlYWYiLCBsYWJlbCA9ICJwLnNpZ25pZiIpDQpGZV9lcnJvcnBsb3QNCg0KS19lcnJvcnBsb3QgPC0gZ2dlcnJvcnBsb3QoYWVyb19JQ1BNUywgeT0iSyIsIHg9IlNhbXBsZSIsIGZpbGw9IlNhbXBsZSIsIGNvbG9yID0gIlRyZWF0bWVudCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2Nfc3RhdCA9ICJtZWFuX3NkIiwgYWRkPSJqaXR0ZXIiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bGFiPSIiLCB5bGFiPSJBbW91bnQgaW4gMjAgbUwgKG1nL0wpIiwgbWFpbiA9ICJLIGFjY3VtdWxhdGlvbiBpbiBhZXJvcG9uaWNzIHZzIHNvaWwiKSArIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTApKQ0KS19lcnJvcnBsb3QgPC0gS19lcnJvcnBsb3QgKyBzdGF0X2NvbXBhcmVfbWVhbnMobWV0aG9kID0gInQudGVzdCIsIHJlZi5ncm91cCA9ICJsZWFmIiwgbGFiZWwgPSAicC5zaWduaWYiKQ0KS19lcnJvcnBsb3QNCg0KTWdfZXJyb3JwbG90IDwtIGdnZXJyb3JwbG90KGFlcm9fSUNQTVMsIHk9Ik1nIiwgeD0iU2FtcGxlIiwgZmlsbD0iU2FtcGxlIiwgY29sb3IgPSAiVHJlYXRtZW50IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY19zdGF0ID0gIm1lYW5fc2QiLCBhZGQ9ImppdHRlciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhsYWI9IiIsIHlsYWI9IkFtb3VudCBpbiAyMCBtTCAobWcvTCkiLCBtYWluID0gIk1nIGFjY3VtdWxhdGlvbiBpbiBhZXJvcG9uaWNzIHZzIHNvaWwiKSArIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTApKQ0KTWdfZXJyb3JwbG90IDwtIE1nX2Vycm9ycGxvdCArIHN0YXRfY29tcGFyZV9tZWFucyhtZXRob2QgPSAidC50ZXN0IiwgcmVmLmdyb3VwID0gImxlYWYiLCBsYWJlbCA9ICJwLnNpZ25pZiIpDQpNZ19lcnJvcnBsb3QNCg0KTW5fZXJyb3JwbG90IDwtIGdnZXJyb3JwbG90KGFlcm9fSUNQTVMsIHk9Ik1uIiwgeD0iU2FtcGxlIiwgZmlsbD0iU2FtcGxlIixjb2xvciA9ICJUcmVhdG1lbnQiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjX3N0YXQgPSAibWVhbl9zZCIsIGFkZD0iaml0dGVyIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhsYWI9IiIsIHlsYWI9IkFtb3VudCBpbiAyMCBtTCAobWcvTCkiLCBtYWluID0gIk1uIGFjY3VtdWxhdGlvbiBpbiBhZXJvcG9uaWNzIHZzIHNvaWwiKSArIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTApKQ0KTW5fZXJyb3JwbG90IDwtIE1uX2Vycm9ycGxvdCArIHN0YXRfY29tcGFyZV9tZWFucyhtZXRob2QgPSAidC50ZXN0IiwgcmVmLmdyb3VwID0gImxlYWYiLCBsYWJlbCA9ICJwLnNpZ25pZiIpDQpNbl9lcnJvcnBsb3QNCg0KTW9fZXJyb3JwbG90IDwtIGdnZXJyb3JwbG90KGFlcm9fSUNQTVMsIHk9Ik1vIiwgeD0iU2FtcGxlIiwgZmlsbD0iU2FtcGxlIiwgY29sb3IgPSAiVHJlYXRtZW50IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY19zdGF0ID0gIm1lYW5fc2QiLCBhZGQ9ImppdHRlciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhsYWI9IiIsIHlsYWI9IkFtb3VudCBpbiAyMCBtTCAobWcvTCkiLCBtYWluID0gIk1vIGFjY3VtdWxhdGlvbiBpbiBhZXJvcG9uaWNzIHZzIHNvaWwiKSArIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTApKQ0KTW9fZXJyb3JwbG90IDwtIE1vX2Vycm9ycGxvdCArIHN0YXRfY29tcGFyZV9tZWFucyhtZXRob2QgPSAidC50ZXN0IiwgcmVmLmdyb3VwID0gImxlYWYiLCBsYWJlbCA9ICJwLnNpZ25pZiIpDQpNb19lcnJvcnBsb3QNCg0KTmlfZXJyb3JwbG90IDwtIGdnZXJyb3JwbG90KGFlcm9fSUNQTVMsIHk9Ik5pIiwgeD0iU2FtcGxlIiwgZmlsbD0iU2FtcGxlIiwgY29sb3IgPSAiVHJlYXRtZW50IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY19zdGF0ID0gIm1lYW5fc2QiLCBhZGQ9ImppdHRlciIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bGFiPSIiLCB5bGFiPSJBbW91bnQgaW4gMjAgbUwgKG1nL0wpIiwgbWFpbiA9ICJOaSBhY2N1bXVsYXRpb24gaW4gYWVyb3BvbmljcyB2cyBzb2lsIikgKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwKSkNCk5pX2Vycm9ycGxvdCA8LSBOaV9lcnJvcnBsb3QgKyBzdGF0X2NvbXBhcmVfbWVhbnMobWV0aG9kID0gInQudGVzdCIsIHJlZi5ncm91cCA9ICJsZWFmIiwgbGFiZWwgPSAicC5zaWduaWYiKQ0KTmlfZXJyb3JwbG90DQoNClBfZXJyb3JwbG90IDwtIGdnZXJyb3JwbG90KGFlcm9fSUNQTVMsIHk9IlAiLCB4PSJTYW1wbGUiLCBmaWxsPSJTYW1wbGUiLCBjb2xvciA9ICJUcmVhdG1lbnQiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjX3N0YXQgPSAibWVhbl9zZCIsIGFkZD0iaml0dGVyIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGxhYj0iIiwgeWxhYj0iQW1vdW50IGluIDIwIG1MIChtZy9MKSIsIG1haW4gPSAiUCBhY2N1bXVsYXRpb24gaW4gYWVyb3BvbmljcyB2cyBzb2lsIikgKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwKSkNClBfZXJyb3JwbG90IDwtIFBfZXJyb3JwbG90ICsgc3RhdF9jb21wYXJlX21lYW5zKG1ldGhvZCA9ICJ0LnRlc3QiLCByZWYuZ3JvdXAgPSAibGVhZiIsIGxhYmVsID0gInAuc2lnbmlmIikNClBfZXJyb3JwbG90DQoNClNfZXJyb3JwbG90IDwtIGdnZXJyb3JwbG90KGFlcm9fSUNQTVMsIHk9IlMiLCB4PSJTYW1wbGUiLCBmaWxsPSJTYW1wbGUiLCBjb2xvciA9ICJUcmVhdG1lbnQiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjX3N0YXQgPSAibWVhbl9zZCIsIGFkZD0iaml0dGVyIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGxhYj0iIiwgeWxhYj0iQW1vdW50IGluIDIwIG1MIChtZy9MKSIsIG1haW4gPSAiUyBhY2N1bXVsYXRpb24gaW4gYWVyb3BvbmljcyB2cyBzb2lsIikgKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwKSkNClNfZXJyb3JwbG90IDwtIFNfZXJyb3JwbG90ICsgc3RhdF9jb21wYXJlX21lYW5zKG1ldGhvZCA9ICJ0LnRlc3QiLCByZWYuZ3JvdXAgPSAibGVhZiIsIGxhYmVsID0gInAuc2lnbmlmIikNClNfZXJyb3JwbG90DQoNClpuX2Vycm9ycGxvdCA8LSBnZ2Vycm9ycGxvdChhZXJvX0lDUE1TLCB5PSJabiIsIHg9IlNhbXBsZSIsIGZpbGw9IlNhbXBsZSIsIGNvbG9yID0gIlRyZWF0bWVudCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2Nfc3RhdCA9ICJtZWFuX3NkIiwgYWRkPSJqaXR0ZXIiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bGFiPSIiLCB5bGFiPSJBbW91bnQgaW4gMjAgbUwgKG1nL0wpIiwgbWFpbiA9ICJabiBhY2N1bXVsYXRpb24gaW4gYWVyb3BvbmljcyB2cyBzb2lsIikgKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwKSkNClpuX2Vycm9ycGxvdCA8LSBabl9lcnJvcnBsb3QgKyBzdGF0X2NvbXBhcmVfbWVhbnMobWV0aG9kID0gInQudGVzdCIsIHJlZi5ncm91cCA9ICJsZWFmIiwgbGFiZWwgPSAicC5zaWduaWYiKQ0KWm5fZXJyb3JwbG90DQoNCk5hX2Vycm9ycGxvdCA8LSBnZ2Vycm9ycGxvdChhZXJvX0lDUE1TLCB5PSJOYSIsIHg9IlNhbXBsZSIsIGZpbGw9IlNhbXBsZSIsIGNvbG9yID0gIlRyZWF0bWVudCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2Nfc3RhdCA9ICJtZWFuX3NkIiwgYWRkPSJqaXR0ZXIiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bGFiPSIiLCB5bGFiPSJBbW91bnQgaW4gMjAgbUwgKG1nL0wpIiwgbWFpbiA9ICJOYSBhY2N1bXVsYXRpb24gaW4gYWVyb3BvbmljcyB2cyBzb2lsIikgKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwKSkNCk5hX2Vycm9ycGxvdCA8LSBOYV9lcnJvcnBsb3QgKyBzdGF0X2NvbXBhcmVfbWVhbnMobWV0aG9kID0gInQudGVzdCIsIHJlZi5ncm91cCA9ICJsZWFmIiwgbGFiZWwgPSAicC5zaWduaWYiKQ0KTmFfZXJyb3JwbG90DQoNCkN1X2Vycm9ycGxvdCA8LSBnZ2Vycm9ycGxvdChhZXJvX0lDUE1TLCB5PSJDdSIsIHg9IlNhbXBsZSIsIGZpbGw9IlNhbXBsZSIsIGNvbG9yID0gIlRyZWF0bWVudCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2Nfc3RhdCA9ICJtZWFuX3NkIiwgYWRkPSJqaXR0ZXIiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bGFiPSIiLCB5bGFiPSJBbW91bnQgaW4gMjAgbUwgKG1nL0wpIiwgbWFpbiA9ICJDdSBhY2N1bXVsYXRpb24gaW4gYWVyb3BvbmljcyB2cyBzb2lsIikgKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwKSkNCkN1X2Vycm9ycGxvdCA8LSBDdV9lcnJvcnBsb3QgKyBzdGF0X2NvbXBhcmVfbWVhbnMobWV0aG9kID0gInQudGVzdCIsIHJlZi5ncm91cCA9ICJsZWFmIiwgbGFiZWwgPSAicC5zaWduaWYiKQ0KQ3VfZXJyb3JwbG90DQpgYGANCmBgYHtyfQ0KI2NvbmNsdXNpb25zDQojc2hvb3QgYWNjdW11bGF0aW9uIG9mIEFsLCBGZSwgSywgTWcsIE1uLCBNbywgUCwgUywgWm4sIE5hLCBhbmQgQ3UgYXJlIGFsbCBub3Qgc2lnbmlmaWNhbnRseSBkaWZmZXJlbnQgdGhhbiBsZWFmLCBidXQgYWxsIGFyZSBtdWNoIG1vcmUgdmFyaWVkIHRoYW4gdGhlIGxlYWYgc2FtcGxlcw0KI3Nob290IGFjY3VtdWxhdGlvbiBvZiBCLCBDYSwgYW5kIE5pIGFyZSAoKikgc2lnbmlmaWNhbnRseSBoaWdoZXIgdGhhbiBsZWFmLCBidXQgYWxsIGFyZSBtdWNoIG1vcmUgdmFyaWVkIHRoYW4gdGhlIGxlYWYgc2FtcGxlcw0KYGBgDQoNCg0K