#setwd("~/Documents/PMC_SRTT_Analysis")
require(ggplot2)
Loading required package: ggplot2
require(xlsx)
Loading required package: xlsx
react_data = read.xlsx("2021SRTTMastersheet.xlsx",sheetIndex = 2)
#react_data = read.csv2("2021SRTTMastersheet.xlsx", header = T)
react_data = react_data[react_data$Task.Difficulty == "4-color",]
ss_data = read.xlsx("2021SRTTMastersheet.xlsx", sheetIndex = 3)
ss_data = ss_data[ss_data$Task.Difficulty == "4-color",]
mp_data = read.xlsx("2021SRTTMastersheet.xlsx", sheetIndex = 4)

#Q1: Are/Is PMC/M1 necessary for skill acquisition?

H1a: deltaSS (BLOCKSSpost - BLOCKSSpre)

oneway.test(Change.SS.POST ~ TMS.Group, data = ss_data, var.equal = T)

    One-way analysis of means

data:  Change.SS.POST and TMS.Group
F = 0.31215, num df = 2, denom df = 26, p-value = 0.7346

Plot

ggplot(ss_data, aes(x=TMS.Group, y=Change.SS.POST, color = TMS.Group)) + 
  geom_boxplot()+
  geom_dotplot(binaxis='y', stackdir='center') +
  ylab(expression(paste(Delta,"SSacq"))) + xlab("TMS Groups") + 
  theme(text = element_text(size = 24))      


#+ ylim(-10,10)

H1b: MP (RANDpost - RANDpre)

oneway.test(RandDiff ~ TMS.Group, data = react_data, var.equal = T)

    One-way analysis of means

data:  RandDiff and TMS.Group
F = 2.6299, num df = 2, denom df = 26, p-value = 0.09116

Plot

react_data = react_data[1:40,]
ggplot(react_data, aes(x=TMS.Group, y=RandDiff, color = TMS.Group)) + 
  geom_boxplot()+
  geom_dotplot(binaxis='y', stackdir='center') + 
  ylab(expression(paste(Delta,"MPacq"))) + xlab("TMS Groups") + scale_x_discrete(limits=c("Control","M1","PMC")) + 
  theme(text = element_text(size = 24))      


# + ylim(-10,10)

Q2: Task difficulty on skill learning

to reintroduce the 2-color data

ss_data = read.xlsx("2021SRTTMastersheet.xlsx", sheetIndex = 3)

H2a: skill acq. (deltaSS_post-pre)

ss_data = ss_data[ss_data$TMS.Group == "Control",]
t.test(Change.SS.POST ~ Task.Difficulty, data = ss_data)

    Welch Two Sample t-test

data:  Change.SS.POST by Task.Difficulty
t = 0.86286, df = 14.289, p-value = 0.4025
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -22.73287  53.43287
sample estimates:
mean in group 2-color mean in group 4-color 
                 4.20                -11.15 

Plot

ss_data$Task.Difficulty = as.factor(ss_data$Task.Difficulty)
ggplot(ss_data, aes(x=Task.Difficulty, y=Change.SS.POST, color = Task.Difficulty)) + 
  geom_boxplot()+
  geom_dotplot(binaxis='y', stackdir='center') + scale_color_manual(values=c("#999999", "#F8766D")) + 
  ylab(expression(paste(Delta, "SSacq"))) + xlab("Task Difficulty") + 
  theme(text = element_text(size = 24))      


#+ ylim(-10,10)

H2b: skill ret. (deltaSS_ret-post)

t.test(Change.SS.RET ~ Task.Difficulty, data = ss_data)

    Welch Two Sample t-test

data:  Change.SS.RET by Task.Difficulty
t = -4.1777, df = 17.957, p-value = 0.0005682
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -30.059632  -9.940368
sample estimates:
mean in group 2-color mean in group 4-color 
                 -8.2                  11.8 

Plot

ggplot(ss_data, aes(x=Task.Difficulty, y=Change.SS.RET, color = Task.Difficulty)) + 
  geom_boxplot()+
  geom_dotplot(binaxis='y', stackdir='center') + scale_color_manual(values=c("#999999", "#F8766D")) + 
  ylab(expression(paste(Delta,"SSret"))) + xlab("Task Difficulty") + 
  theme(text = element_text(size = 24))      

H2c: Skill Gen. (deltaSS_gen-ret)

t.test(Change.SS.GEN ~ Task.Difficulty, data = ss_data)

    Welch Two Sample t-test

data:  Change.SS.GEN by Task.Difficulty
t = 2.9073, df = 13.01, p-value = 0.01223
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
  14.75019 100.04981
sample estimates:
mean in group 2-color mean in group 4-color 
                65.75                  8.35 

Plot

ggplot(ss_data, aes(x=Task.Difficulty, y=Change.SS.GEN, color = Task.Difficulty)) + 
  geom_boxplot()+
  geom_dotplot(binaxis='y', stackdir='center') + scale_color_manual(values=c("#999999", "#F8766D")) +
  ylab(expression(paste(Delta, "SSgen"))) + xlab("Task Difficulty") + 
  theme(text = element_text(size = 24))      

DeltaMPacq

t.test(ΔMPacq ~ Task.Difficulty, data = mp_data)

    Welch Two Sample t-test

data:  ΔMPacq by Task.Difficulty
t = 2.2394, df = 12.137, p-value = 0.04461
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
   1.89192 132.00808
sample estimates:
mean in group 2-color mean in group 4-color 
               -75.50               -142.45 

Plot: DeltaMPacq

ggplot(mp_data, aes(x=Task.Difficulty, y= ΔMPacq, color = Task.Difficulty)) + 
  geom_boxplot()+
  geom_dotplot(binaxis='y', stackdir='center') + scale_color_manual(values=c("#999999", "#F8766D")) +
  ylab(expression(paste(Delta, "MPacq"))) + xlab("Task Difficulty") + 
  theme(text = element_text(size = 24))      

DeltaMPacq

t.test(ΔMPret ~ Task.Difficulty, data = mp_data)

    Welch Two Sample t-test

data:  ΔMPret by Task.Difficulty
t = 0.32761, df = 17.679, p-value = 0.7471
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -29.54551  40.44551
sample estimates:
mean in group 2-color mean in group 4-color 
               -11.45                -16.90 

Plot: DeltaMPret

ggplot(mp_data, aes(x=Task.Difficulty, y= ΔMPret, color = Task.Difficulty)) + 
  geom_boxplot()+
  geom_dotplot(binaxis='y', stackdir='center') + scale_color_manual(values=c("#999999", "#F8766D")) +
  ylab(expression(paste(Delta, "MPret"))) + xlab("Task Difficulty") + 
  theme(text = element_text(size = 24))      

Exploratory: Control vs M1 on RandDiff

react_data = read.xlsx("2021SRTTMastersheet.xlsx",sheetIndex = 2)

react_data = react_data[react_data$TMS.Group != "PMC",]
react_data$Task.Difficulty = factor(react_data$Task.Difficulty)
react_data = react_data[react_data$Task.Difficulty == "4-color",]
t.test(RandDiff ~ TMS.Group, data = react_data)

    Welch Two Sample t-test

data:  RandDiff by TMS.Group
t = -2.4388, df = 12.653, p-value = 0.03029
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -139.545074   -8.254926
sample estimates:
mean in group Control      mean in group M1 
              -142.45                -68.55 

Plot: DeltaMPacq

ggplot(react_data, aes(x=TMS.Group, y= RandDiff, color = TMS.Group)) + 
  geom_boxplot()+
  geom_dotplot(binaxis='y', stackdir='center') + scale_color_manual(values=c("#999999", "#F8766D")) +
  ylab(expression(paste(Delta, "MPacq"))) + xlab("Task Difficulty") + 
  theme(text = element_text(size = 24))      

2 V 4 RandGen

react_data = read.xlsx("2021SRTTMastersheet.xlsx",sheetIndex = 2)
react_data = react_data[react_data$TMS.Group == "Control",]
t.test(deltaMPgen ~ Task.Difficulty, data = react_data, alternative = "two.sided", na.rm = T)

    Welch Two Sample t-test

data:  deltaMPgen by Task.Difficulty
t = 6.8003, df = 11.403, p-value = 2.464e-05
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 141.1367 275.3633
sample estimates:
mean in group 2-color mean in group 4-color 
               191.60                -16.65 

Plot: DeltaMPgen

ggplot(react_data, aes(x=Task.Difficulty, y= deltaMPgen, color = Task.Difficulty)) + 
  geom_boxplot()+
  geom_dotplot(binaxis='y', stackdir='center') + scale_color_manual(values=c("#999999", "#F8766D")) +
  ylab(expression(paste(Delta, "MPgen"))) + xlab("Task Difficulty") + 
  theme(text = element_text(size = 24)) + scale_x_discrete(limits=c("2-color","4-color"))

SRTT All conditions: sub 44

srtt = read.xlsx("Response_timeX_Timepoint.xlsx",sheetIndex = 1)
#srtt$sub44 = as.factor(srtt$sub44)
ggplot(data = srtt, aes(x = Timepoint, y = sub44, group = 1))  + geom_line() + geom_point() +
  theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust=1)) + ylab("Response Time (ms)") +
  scale_x_discrete(limits=c("RandPRE1", "RepPRE", "RandPRE2", "Train1", "Train2", "Train3", "Train4", "Train5", "RandPOST1", "RepPOST", "RandPOST2", "RandRET1", "RepRET", "RandRET2", "RandGEN1", "RepGEN","RandGEN2")) + 
  theme(text = element_text(size = 22))      

SRTT All conditions: sub 39

srtt = read.xlsx("Response_timeX_Timepoint.xlsx",sheetIndex = 1)
ggplot(data = srtt, aes(x = Timepoint, y = sub39, group = 1))  + geom_line() + geom_point() +
  theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust=1)) + ylab("Response Time (ms)") +   scale_x_discrete(limits=c("RandPRE1", "RepPRE", "RandPRE2", "Train1", "Train2", "Train3", "Train4", "Train5", "RandPOST1", "RepPOST", "RandPOST2", "RandRET1", "RepRET", "RandRET2", "RandGEN1", "RepGEN","RandGEN2")) + 
  theme(text = element_text(size = 22))      

SRTT All conditions: sub 31

srtt = read.xlsx("Response_timeX_Timepoint.xlsx",sheetIndex = 1)
ggplot(data = srtt, aes(x = Timepoint, y = sub31, group = 1))  + geom_line() + geom_point() +
  theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust=1)) + ylab("Response Time (ms)") +   scale_x_discrete(limits=c("RandPRE1", "RepPRE", "RandPRE2", "Train1", "Train2", "Train3", "Train4", "Train5", "RandPOST1", "RepPOST", "RandPOST2", "RandRET1", "RepRET", "RandRET2", "RandGEN1", "RepGEN","RandGEN2")) + 
  theme(text = element_text(size = 22))      

LS0tCnRpdGxlOiAiUE1DIFNSVFQgQW5hbHlzZXMiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCgoKYGBge3J9CiNzZXR3ZCgifi9Eb2N1bWVudHMvUE1DX1NSVFRfQW5hbHlzaXMiKQpyZXF1aXJlKGdncGxvdDIpCnJlcXVpcmUoeGxzeCkKYGBgCgpgYGB7cn0KcmVhY3RfZGF0YSA9IHJlYWQueGxzeCgiMjAyMVNSVFRNYXN0ZXJzaGVldC54bHN4IixzaGVldEluZGV4ID0gMikKI3JlYWN0X2RhdGEgPSByZWFkLmNzdjIoIjIwMjFTUlRUTWFzdGVyc2hlZXQueGxzeCIsIGhlYWRlciA9IFQpCnJlYWN0X2RhdGEgPSByZWFjdF9kYXRhW3JlYWN0X2RhdGEkVGFzay5EaWZmaWN1bHR5ID09ICI0LWNvbG9yIixdCnNzX2RhdGEgPSByZWFkLnhsc3goIjIwMjFTUlRUTWFzdGVyc2hlZXQueGxzeCIsIHNoZWV0SW5kZXggPSAzKQpzc19kYXRhID0gc3NfZGF0YVtzc19kYXRhJFRhc2suRGlmZmljdWx0eSA9PSAiNC1jb2xvciIsXQptcF9kYXRhID0gcmVhZC54bHN4KCIyMDIxU1JUVE1hc3RlcnNoZWV0Lnhsc3giLCBzaGVldEluZGV4ID0gNCkKYGBgCgojUTE6IEFyZS9JcyBQTUMvTTEgbmVjZXNzYXJ5IGZvciBza2lsbCBhY3F1aXNpdGlvbj8KCgpIMWE6IGRlbHRhU1MgKEJMT0NLU1Nwb3N0IC0gQkxPQ0tTU3ByZSkKCmBgYHtyfQpvbmV3YXkudGVzdChDaGFuZ2UuU1MuUE9TVCB+IFRNUy5Hcm91cCwgZGF0YSA9IHNzX2RhdGEsIHZhci5lcXVhbCA9IFQpCmBgYAoKUGxvdApgYGB7cn0KZ2dwbG90KHNzX2RhdGEsIGFlcyh4PVRNUy5Hcm91cCwgeT1DaGFuZ2UuU1MuUE9TVCwgY29sb3IgPSBUTVMuR3JvdXApKSArIAogIGdlb21fYm94cGxvdCgpKwogIGdlb21fZG90cGxvdChiaW5heGlzPSd5Jywgc3RhY2tkaXI9J2NlbnRlcicpICsKICB5bGFiKGV4cHJlc3Npb24ocGFzdGUoRGVsdGEsIlNTYWNxIikpKSArIHhsYWIoIlRNUyBHcm91cHMiKSArIAogIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDI0KSkgICAgICAKCiMrIHlsaW0oLTEwLDEwKQpgYGAKCgpIMWI6IE1QIChSQU5EcG9zdCAtIFJBTkRwcmUpCgpgYGB7cn0Kb25ld2F5LnRlc3QoUmFuZERpZmYgfiBUTVMuR3JvdXAsIGRhdGEgPSByZWFjdF9kYXRhLCB2YXIuZXF1YWwgPSBUKQpgYGAKCgpQbG90CmBgYHtyfQpyZWFjdF9kYXRhID0gcmVhY3RfZGF0YVsxOjQwLF0KZ2dwbG90KHJlYWN0X2RhdGEsIGFlcyh4PVRNUy5Hcm91cCwgeT1SYW5kRGlmZiwgY29sb3IgPSBUTVMuR3JvdXApKSArIAogIGdlb21fYm94cGxvdCgpKwogIGdlb21fZG90cGxvdChiaW5heGlzPSd5Jywgc3RhY2tkaXI9J2NlbnRlcicpICsgCiAgeWxhYihleHByZXNzaW9uKHBhc3RlKERlbHRhLCJNUGFjcSIpKSkgKyB4bGFiKCJUTVMgR3JvdXBzIikgKyBzY2FsZV94X2Rpc2NyZXRlKGxpbWl0cz1jKCJDb250cm9sIiwiTTEiLCJQTUMiKSkgKyAKICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyNCkpICAgICAgCgojICsgeWxpbSgtMTAsMTApCmBgYAoKClEyOiBUYXNrIGRpZmZpY3VsdHkgb24gc2tpbGwgbGVhcm5pbmcKCgp0byByZWludHJvZHVjZSB0aGUgMi1jb2xvciBkYXRhCmBgYHtyfQpzc19kYXRhID0gcmVhZC54bHN4KCIyMDIxU1JUVE1hc3RlcnNoZWV0Lnhsc3giLCBzaGVldEluZGV4ID0gMykKYGBgCgoKSDJhOiBza2lsbCBhY3EuIChkZWx0YVNTX3Bvc3QtcHJlKQpgYGB7cn0Kc3NfZGF0YSA9IHNzX2RhdGFbc3NfZGF0YSRUTVMuR3JvdXAgPT0gIkNvbnRyb2wiLF0KdC50ZXN0KENoYW5nZS5TUy5QT1NUIH4gVGFzay5EaWZmaWN1bHR5LCBkYXRhID0gc3NfZGF0YSkKYGBgCgpQbG90CmBgYHtyfQpzc19kYXRhJFRhc2suRGlmZmljdWx0eSA9IGFzLmZhY3Rvcihzc19kYXRhJFRhc2suRGlmZmljdWx0eSkKZ2dwbG90KHNzX2RhdGEsIGFlcyh4PVRhc2suRGlmZmljdWx0eSwgeT1DaGFuZ2UuU1MuUE9TVCwgY29sb3IgPSBUYXNrLkRpZmZpY3VsdHkpKSArIAogIGdlb21fYm94cGxvdCgpKwogIGdlb21fZG90cGxvdChiaW5heGlzPSd5Jywgc3RhY2tkaXI9J2NlbnRlcicpICsgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcz1jKCIjOTk5OTk5IiwgIiNGODc2NkQiKSkgKyAKICB5bGFiKGV4cHJlc3Npb24ocGFzdGUoRGVsdGEsICJTU2FjcSIpKSkgKyB4bGFiKCJUYXNrIERpZmZpY3VsdHkiKSArIAogIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDI0KSkgICAgICAKCiMrIHlsaW0oLTEwLDEwKQpgYGAKCgpIMmI6IHNraWxsIHJldC4gKGRlbHRhU1NfcmV0LXBvc3QpCgoKYGBge3J9CnQudGVzdChDaGFuZ2UuU1MuUkVUIH4gVGFzay5EaWZmaWN1bHR5LCBkYXRhID0gc3NfZGF0YSkKYGBgCgpQbG90CmBgYHtyfQpnZ3Bsb3Qoc3NfZGF0YSwgYWVzKHg9VGFzay5EaWZmaWN1bHR5LCB5PUNoYW5nZS5TUy5SRVQsIGNvbG9yID0gVGFzay5EaWZmaWN1bHR5KSkgKyAKICBnZW9tX2JveHBsb3QoKSsKICBnZW9tX2RvdHBsb3QoYmluYXhpcz0neScsIHN0YWNrZGlyPSdjZW50ZXInKSArIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXM9YygiIzk5OTk5OSIsICIjRjg3NjZEIikpICsgCiAgeWxhYihleHByZXNzaW9uKHBhc3RlKERlbHRhLCJTU3JldCIpKSkgKyB4bGFiKCJUYXNrIERpZmZpY3VsdHkiKSArIAogIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDI0KSkgICAgICAKYGBgCgoKSDJjOiBTa2lsbCBHZW4uIChkZWx0YVNTX2dlbi1yZXQpCmBgYHtyfQp0LnRlc3QoQ2hhbmdlLlNTLkdFTiB+IFRhc2suRGlmZmljdWx0eSwgZGF0YSA9IHNzX2RhdGEpCmBgYAoKUGxvdApgYGB7cn0KZ2dwbG90KHNzX2RhdGEsIGFlcyh4PVRhc2suRGlmZmljdWx0eSwgeT1DaGFuZ2UuU1MuR0VOLCBjb2xvciA9IFRhc2suRGlmZmljdWx0eSkpICsgCiAgZ2VvbV9ib3hwbG90KCkrCiAgZ2VvbV9kb3RwbG90KGJpbmF4aXM9J3knLCBzdGFja2Rpcj0nY2VudGVyJykgKyBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoIiM5OTk5OTkiLCAiI0Y4NzY2RCIpKSArCiAgeWxhYihleHByZXNzaW9uKHBhc3RlKERlbHRhLCAiU1NnZW4iKSkpICsgeGxhYigiVGFzayBEaWZmaWN1bHR5IikgKyAKICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyNCkpICAgICAgCmBgYApEZWx0YU1QYWNxCmBgYHtyfQp0LnRlc3QozpRNUGFjcSB+IFRhc2suRGlmZmljdWx0eSwgZGF0YSA9IG1wX2RhdGEpCmBgYAoKUGxvdDogRGVsdGFNUGFjcQpgYGB7cn0KZ2dwbG90KG1wX2RhdGEsIGFlcyh4PVRhc2suRGlmZmljdWx0eSwgeT0gzpRNUGFjcSwgY29sb3IgPSBUYXNrLkRpZmZpY3VsdHkpKSArIAogIGdlb21fYm94cGxvdCgpKwogIGdlb21fZG90cGxvdChiaW5heGlzPSd5Jywgc3RhY2tkaXI9J2NlbnRlcicpICsgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcz1jKCIjOTk5OTk5IiwgIiNGODc2NkQiKSkgKwogIHlsYWIoZXhwcmVzc2lvbihwYXN0ZShEZWx0YSwgIk1QYWNxIikpKSArIHhsYWIoIlRhc2sgRGlmZmljdWx0eSIpICsgCiAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjQpKSAgICAgIApgYGAKRGVsdGFNUGFjcQpgYGB7cn0KdC50ZXN0KM6UTVByZXQgfiBUYXNrLkRpZmZpY3VsdHksIGRhdGEgPSBtcF9kYXRhKQpgYGAKUGxvdDogRGVsdGFNUHJldApgYGB7cn0KZ2dwbG90KG1wX2RhdGEsIGFlcyh4PVRhc2suRGlmZmljdWx0eSwgeT0gzpRNUHJldCwgY29sb3IgPSBUYXNrLkRpZmZpY3VsdHkpKSArIAogIGdlb21fYm94cGxvdCgpKwogIGdlb21fZG90cGxvdChiaW5heGlzPSd5Jywgc3RhY2tkaXI9J2NlbnRlcicpICsgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcz1jKCIjOTk5OTk5IiwgIiNGODc2NkQiKSkgKwogIHlsYWIoZXhwcmVzc2lvbihwYXN0ZShEZWx0YSwgIk1QcmV0IikpKSArIHhsYWIoIlRhc2sgRGlmZmljdWx0eSIpICsgCiAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjQpKSAgICAgIApgYGAKCkV4cGxvcmF0b3J5OiBDb250cm9sIHZzIE0xIG9uIFJhbmREaWZmCmBgYHtyfQpyZWFjdF9kYXRhID0gcmVhZC54bHN4KCIyMDIxU1JUVE1hc3RlcnNoZWV0Lnhsc3giLHNoZWV0SW5kZXggPSAyKQoKcmVhY3RfZGF0YSA9IHJlYWN0X2RhdGFbcmVhY3RfZGF0YSRUTVMuR3JvdXAgIT0gIlBNQyIsXQpyZWFjdF9kYXRhJFRhc2suRGlmZmljdWx0eSA9IGZhY3RvcihyZWFjdF9kYXRhJFRhc2suRGlmZmljdWx0eSkKcmVhY3RfZGF0YSA9IHJlYWN0X2RhdGFbcmVhY3RfZGF0YSRUYXNrLkRpZmZpY3VsdHkgPT0gIjQtY29sb3IiLF0KdC50ZXN0KFJhbmREaWZmIH4gVE1TLkdyb3VwLCBkYXRhID0gcmVhY3RfZGF0YSkKYGBgCgpQbG90OiBEZWx0YU1QYWNxCmBgYHtyfQpnZ3Bsb3QocmVhY3RfZGF0YSwgYWVzKHg9VE1TLkdyb3VwLCB5PSBSYW5kRGlmZiwgY29sb3IgPSBUTVMuR3JvdXApKSArIAogIGdlb21fYm94cGxvdCgpKwogIGdlb21fZG90cGxvdChiaW5heGlzPSd5Jywgc3RhY2tkaXI9J2NlbnRlcicpICsgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcz1jKCIjOTk5OTk5IiwgIiNGODc2NkQiKSkgKwogIHlsYWIoZXhwcmVzc2lvbihwYXN0ZShEZWx0YSwgIk1QYWNxIikpKSArIHhsYWIoIlRhc2sgRGlmZmljdWx0eSIpICsgCiAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjQpKSAgICAgIApgYGAKCgoyIFYgNCBSYW5kR2VuCmBgYHtyfQpyZWFjdF9kYXRhID0gcmVhZC54bHN4KCIyMDIxU1JUVE1hc3RlcnNoZWV0Lnhsc3giLHNoZWV0SW5kZXggPSAyKQpyZWFjdF9kYXRhID0gcmVhY3RfZGF0YVtyZWFjdF9kYXRhJFRNUy5Hcm91cCA9PSAiQ29udHJvbCIsXQp0LnRlc3QoZGVsdGFNUGdlbiB+IFRhc2suRGlmZmljdWx0eSwgZGF0YSA9IHJlYWN0X2RhdGEsIGFsdGVybmF0aXZlID0gInR3by5zaWRlZCIsIG5hLnJtID0gVCkKYGBgCgpQbG90OiBEZWx0YU1QZ2VuCmBgYHtyfQpnZ3Bsb3QocmVhY3RfZGF0YSwgYWVzKHg9VGFzay5EaWZmaWN1bHR5LCB5PSBkZWx0YU1QZ2VuLCBjb2xvciA9IFRhc2suRGlmZmljdWx0eSkpICsgCiAgZ2VvbV9ib3hwbG90KCkrCiAgZ2VvbV9kb3RwbG90KGJpbmF4aXM9J3knLCBzdGFja2Rpcj0nY2VudGVyJykgKyBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoIiM5OTk5OTkiLCAiI0Y4NzY2RCIpKSArCiAgeWxhYihleHByZXNzaW9uKHBhc3RlKERlbHRhLCAiTVBnZW4iKSkpICsgeGxhYigiVGFzayBEaWZmaWN1bHR5IikgKyAKICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyNCkpICsgc2NhbGVfeF9kaXNjcmV0ZShsaW1pdHM9YygiMi1jb2xvciIsIjQtY29sb3IiKSkKYGBgCgoKU1JUVCBBbGwgY29uZGl0aW9uczogc3ViIDQ0CmBgYHtyfQpzcnR0ID0gcmVhZC54bHN4KCJSZXNwb25zZV90aW1lWF9UaW1lcG9pbnQueGxzeCIsc2hlZXRJbmRleCA9IDEpCiNzcnR0JHN1YjQ0ID0gYXMuZmFjdG9yKHNydHQkc3ViNDQpCmdncGxvdChkYXRhID0gc3J0dCwgYWVzKHggPSBUaW1lcG9pbnQsIHkgPSBzdWI0NCwgZ3JvdXAgPSAxKSkgICsgZ2VvbV9saW5lKCkgKyBnZW9tX3BvaW50KCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIHZqdXN0ID0gMSwgaGp1c3Q9MSkpICsgeWxhYigiUmVzcG9uc2UgVGltZSAobXMpIikgKwogIHNjYWxlX3hfZGlzY3JldGUobGltaXRzPWMoIlJhbmRQUkUxIiwgIlJlcFBSRSIsICJSYW5kUFJFMiIsICJUcmFpbjEiLCAiVHJhaW4yIiwgIlRyYWluMyIsICJUcmFpbjQiLCAiVHJhaW41IiwgIlJhbmRQT1NUMSIsICJSZXBQT1NUIiwgIlJhbmRQT1NUMiIsICJSYW5kUkVUMSIsICJSZXBSRVQiLCAiUmFuZFJFVDIiLCAiUmFuZEdFTjEiLCAiUmVwR0VOIiwiUmFuZEdFTjIiKSkgKyAKICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyMikpICAgICAgCmBgYAoKU1JUVCBBbGwgY29uZGl0aW9uczogc3ViIDM5CmBgYHtyfQpzcnR0ID0gcmVhZC54bHN4KCJSZXNwb25zZV90aW1lWF9UaW1lcG9pbnQueGxzeCIsc2hlZXRJbmRleCA9IDEpCmdncGxvdChkYXRhID0gc3J0dCwgYWVzKHggPSBUaW1lcG9pbnQsIHkgPSBzdWIzOSwgZ3JvdXAgPSAxKSkgICsgZ2VvbV9saW5lKCkgKyBnZW9tX3BvaW50KCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIHZqdXN0ID0gMSwgaGp1c3Q9MSkpICsgeWxhYigiUmVzcG9uc2UgVGltZSAobXMpIikgKyAgIHNjYWxlX3hfZGlzY3JldGUobGltaXRzPWMoIlJhbmRQUkUxIiwgIlJlcFBSRSIsICJSYW5kUFJFMiIsICJUcmFpbjEiLCAiVHJhaW4yIiwgIlRyYWluMyIsICJUcmFpbjQiLCAiVHJhaW41IiwgIlJhbmRQT1NUMSIsICJSZXBQT1NUIiwgIlJhbmRQT1NUMiIsICJSYW5kUkVUMSIsICJSZXBSRVQiLCAiUmFuZFJFVDIiLCAiUmFuZEdFTjEiLCAiUmVwR0VOIiwiUmFuZEdFTjIiKSkgKyAKICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyMikpICAgICAgCmBgYAoKU1JUVCBBbGwgY29uZGl0aW9uczogc3ViIDMxCmBgYHtyfQpzcnR0ID0gcmVhZC54bHN4KCJSZXNwb25zZV90aW1lWF9UaW1lcG9pbnQueGxzeCIsc2hlZXRJbmRleCA9IDEpCmdncGxvdChkYXRhID0gc3J0dCwgYWVzKHggPSBUaW1lcG9pbnQsIHkgPSBzdWIzMSwgZ3JvdXAgPSAxKSkgICsgZ2VvbV9saW5lKCkgKyBnZW9tX3BvaW50KCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIHZqdXN0ID0gMSwgaGp1c3Q9MSkpICsgeWxhYigiUmVzcG9uc2UgVGltZSAobXMpIikgKyAgIHNjYWxlX3hfZGlzY3JldGUobGltaXRzPWMoIlJhbmRQUkUxIiwgIlJlcFBSRSIsICJSYW5kUFJFMiIsICJUcmFpbjEiLCAiVHJhaW4yIiwgIlRyYWluMyIsICJUcmFpbjQiLCAiVHJhaW41IiwgIlJhbmRQT1NUMSIsICJSZXBQT1NUIiwgIlJhbmRQT1NUMiIsICJSYW5kUkVUMSIsICJSZXBSRVQiLCAiUmFuZFJFVDIiLCAiUmFuZEdFTjEiLCAiUmVwR0VOIiwiUmFuZEdFTjIiKSkgKyAKICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyMikpICAgICAgCmBgYA==