C. Data setup
You can safely ignore the text, just evaluate the code chunks.
R packages contain not only code, but also often data. The data are bound to (variable) names. SCAN comes with a number of such data sets, for instance with GruenkeWilbert2014, the data from the study described above.
D. Single Case analysis
The data take the form of six objects (each a list with a dataframe plus some meta-data) that go by the names of the pupils: Anna, Bella, Christina, Dunja, Egor and Fabian. The same pseudonames as used in the publication of the study.
Let’s look at Anna, the first case. The data:
Anna
#A single-case data frame with one case
# ... up to 3 more rows
Graphically, Anna’s comprehension scores look like this:
plotSC(Anna)

Let’s add some more information to the plot, namely, a media line for the A and B phase:
plotSC(Anna,
xlab = "Training session", ylab = "Comprehension Score",
phase.names = c("Baseline", "Intervention"),
lines = list("median", col = "red" ))

NA
It is also helpful sometimes to highligt particular measurements:
plotSC(Anna,
phase.names = c("baseline", "reading intervention"),
xlab="days",
ylab="reading score",
marks = list(positions = c(4, 9), col = "red", cex =2))

Question Q3: How can you add a red dot for day 18?
# Your answer here
writeLines(Q3)
plotSC(Anna,
phase.names = c("baseline", "reading intervention"),
xlab="days",
ylab="reading score",
marks = list(positions = c(4, 9, 18), col = "red", cex = 2))
Overlap indices for a single case
Percentage of non-overlapping data (PND)
Staying with Anna, we can calculate an overlap index such as PND: The percentage of non-overlapping data (PND) effect size measure was described by Scruggs, Mastropieri, & Casto (1987) . It is the percentage of all data-points of the second phase of a single-case study exceeding the maximum value of the first phase. In case you have a study where you expect a decrease of values in the second phase, PND is calculated as the percentage of data-point of the second phase below the minimum of the first phase.
Question: Before you run the chunk below, What do you expect the PND to be for Anna, from looking at one of the plots above?
pnd(Anna)
Percent Non-Overlapping Data
Mean : 100 %
These indices are more useful when comparing multiple cases. Let’s look at Fabian.
plotSC(Fabian,
xlab = "Training session", ylab = "Comprehension Score",
phase.names = c("Baseline", "Intervention"),
lines = list("median", col = "red" ))

Question: Before the next step: What do you expect the PND for Fabian to be?
pnd(Fabian)
Percent Non-Overlapping Data
Mean : 0 %
We can directly plot the two cases like so:
pnd(c(Anna, Fabian))
Percent Non-Overlapping Data
Mean : 50 %
Question Q4: What is your conclusion regarding the effectiveness of the treatment in the cases of Anna and Fabian?
writeLines(Q4)
As both the AB plot and the PND statistics show, we cannot be quite as sure
in Fabian's case that the effect was due to the reading program.
LS0tCnRpdGxlOiAiVHV0b3JpYWwgQSIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKIyBCLiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgR3J1ZW5rZSBldCBhbCAyMDE0IHN0dWR5CgojIyBSZWxldmFuY2UgYW5kIGludGVydmVudGlvbiBsb2dpYwoKUmVhZGluZyBjb21wcmVoZW5zaW9uIGlzIHRoZSBhYmlsaXR5IHRvIGNvbnN0cnVjdCBhbmQgZXh0cmFjdCBtZWFuaW5nIGZyb20gYSB3cml0dGVuIHRleHQuIEl0IGlzIGNvbnNpZGVyZWQgdG8gYmUgdGhlIG1vc3QgY3JpdGljYWwgc2tpbGwgdGhhdCBpcyBuZWVkZWQgdG8gc3VjY2VlZCBpbiBzY2hvb2wuIElmIHJlYWRlcnMgaGF2ZSBzZXJpb3VzIGRpZu+sgWN1bHRpZXMgdG8gZ2F0aGVyIHJlbGV2YW50IGluZm9ybWF0aW9uIGZyb20gYSBoaXN0b3JpY2FsIGFjY291bnQsIGEgbWF0aGVtYXRpY2FsIHdvcmQgcHJvYmxlbSwgb3IgYSBwYXNzYWdlIGluIGEgYmlvbG9neSBib29rLCB0aGV5IGFyZSBib3VuZCB0byBmYWlsIGluIG1vc3QgZXZlcnkgdGFzayB0aGF0IGlzIHB1dCBiZWZvcmUgdGhlbS4gCgpUaGlzIHNpbmdsZS1jYXNlIHN0dWR5IGV4YW1pbmVkIHRoZSBlZmZlY3RzIG9mIGEgZ3JhcGhpYyBvcmdhbml6aW5nIHN0cmF0ZWd5IG9uIHRoZSBhYmlsaXR5IG9mIGNoaWxkcmVuIHRvIGltcHJvdmUgdGhlaXIgdGV4dCBjb21wcmVoZW5zaW9uIGFiaWxpdGllcy4gUGFydGljaXBhbnRzIHdlcmUgc2l4IHN0dWRlbnRzIGJldHdlZW4gdGVuIGFuZCBmb3VydGVlbiB5ZWFycyBvbGQgd2l0aCBtYWpvciBwcm9ibGVtcyBpbiB1bmRlcnN0YW5kaW5nIHdoYXQgdGhleSByZWFkLiBUaGUgaW50ZXJ2ZW50aW9uIGludGVuZGVkIHRvIHRlYWNoIHRoZW0gdG8gdmlzdWFsbHkgaGlnaGxpZ2h0IGtleSBlbGVtZW50cyBvZiBhIHBhc3NhZ2UsIGFuZCB0aHVzLCB0byBkZWVwZW4gdGhlaXIgdW5kZXJzdGFuZGluZyBvZiBpdCAoc3RvcnkgbWFwcGluZykuIAoKVGhlIHN0dWR5IHdhcyBjb25kdWN0ZWQgaW4gR2VybWFueS4gVGhyZWUgNXRoIGdyYWRlIHN0dWRlbnRzIGZyb20gYSByZWd1bGFyIGVkdWNhdGlvbiBwdWJsaWMgc2Nob29sIGFuZCB0aHJlZSA4dGggZ3JhZGUgc3R1ZGVudHMgZnJvbSBhIHNjaG9vbCBmb3IgY2hpbGRyZW4gd2l0aCBsZWFybmluZyBkaWbvrIFjdWx0aWVzIHNlcnZlZCBhcyBzdWJqZWN0cy4gRm91ciBvZiB0aGVtIHdlcmUgZmVtYWxlIChBbm5hLCBCZWxsYSwgQ2hyaXN0aW5hLCBhbmQgRHVuamEpLCB0d28gb2YgdGhlbSB3ZXJlIG1hbGUgKEVnb3IgYW5kIEZhYmlhbikgKG5hbWVzIGFsdGVyZWQsIGZvciBhbm9ueW1pdHkpLgoKIyMgRGVwZW5kZW50IHZhcmlhYmxlIG1lYXN1cmVtZW50CgoxOCBuYXJyYXRpdmVzIGZyb20gdGhyZWUgZGlmZmVyZW50IEdlcm1hbiBzdG9yeSBib29rcyB3ZXJlIHNlbGVjdGVkLiBBbGwgb2YgdGhlbSB3ZXJlIGFsdGVyZWQgaW4gYSB3YXkgdGhhdCBpdCB3YXMgcG9zc2libGUgdG8gZm9ybXVsYXRlIGV4YWN0bHkgdGVuIGNvbXByZWhlbnNpb24gcXVlc3Rpb25zIGFib3V0IGVhY2ggdGFsZSB0aGF0IGNvdmVyZWQgaXRzIG1haW4gY29udGVudC4gVGhlIGNvbXByZWhlbnNpb24gcXVlc3Rpb25zIHdlcmUgc3RhdGVkIGluIGEgd2F5IHRoYXQgb25seSBvbmUgc3BlY2nvrIFjIGFuZCBkaXN0aW5jdCBhbnN3ZXIgd2FzIHBvc3NpYmxlIHRvIGJlIGNvdW50ZWQgYXMgY29ycmVjdC4gU3Vic2VxdWVudGx5LCB3ZSBzdGFuZGFyZGl6ZWQgdGhlIHRleHRzLCBzbyB0aGF0IGVhY2ggb2YgdGhlbSBjb25zaXN0ZWQgb2YgZXhhY3RseSAxNTAgd29yZHMuIEluIGEgcHJlbGltaW5hcnkgc3VydmV5LCB0aGUgc3RvcmllcyBhbmQgY29tcHJlaGVuc2lvbiBxdWVzdGlvbnMgd2VyZSBwcmVzZW50ZWQgdG8gdHdlbnR5IGxvdyBhY2hpZXZpbmcgY2hpbGRyZW4gYmV0d2VlbiA5IGFuZCAxMCB5ZWFycyBvbGQgaW4gb3JkZXIgdG8gaWRlbnRpZnkgaXRlbXMgdGhhdCB3ZXJlIGVpdGhlciB0b28gZWFzeSBvciB0b28gaGFyZCB0byBzb2x2ZS4gV2UgaW52b2x2ZWQgdGhlIGluc2lnaHRzIGZyb20gdGhpcyBwcmVsaW1pbmFyeSBzdXJ2ZXkgdG8gY29tcG9zZSB0aGUg76yBbmFsIHZlcnNpb24gb2Ygb3VyIHF1ZXN0aW9uIHNldHMuCgoqKlF1ZXN0aW9uOioqIFdoYXQgZG9lcyB0aGUgY29tcHJlaGVuc2lvbiBzY29yZSBpbiB0aGlzIHN0dWR5IG1lYW4sIHRoZW4sIGFuZCB3aGF0IGlzIGl0J3MgbWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZT8gCgpgYGB7cn0Kd3JpdGVMaW5lcyhRX0ludHJvXzMpCmBgYAoKSW4gdGhlIGNvdXJzZSBvZiB0aGUgc3R1ZHksIGVhY2ggc3R1ZGVudCB3YXMgaW5kaXZpZHVhbGx5IHByZXNlbnRlZCB3aXRoIGEgZGlmZmVyZW50IHN0b3J5IGFuZCBhIGRpZmZlcmVudCBzZXQgb2YgY29tcHJlaGVuc2lvbiBxdWVzdGlvbnMgZm9yIDE4IGNvbnNlY3V0aXZlIHNjaG9vbCBkYXlzLiBUaGUgb3JkZXIgb2YgdGhlIHRhbGVzIHdhcyByYW5kb21seSBjaG9zZW4gZm9yIGVhY2ggY2hpbGQuIEVhY2ggc3R1ZGVudCB3YXMgYXNrZWQgdG8gcmVhZCBhIHJlc3BlY3RpdmUgc3Rvcnkgb3V0IGxvdWQgYW5kIHRoZW4gdG8gd3JpdGUgZG93biB0aGUgYW5zd2VycyB0byB0aGUgY29ycmVzcG9uZGluZyBxdWVzdGlvbnMgb24gYSB3b3Jrc2hlZXQuCgoqKlF1ZXN0aW9uOioqIFdoeSB3YXMgdGhlIG9yZGVyIG9mIHRoZSB0YWxlcyByYW5kb21seSBjaG9zZW4/IAoKCmBgYHtyfQp3cml0ZUxpbmVzKFFfSW50cm9fNCkKYGBgCgoKIyMgVGhlIGludGVydmVudGlvbgoKVG8gdGVhY2ggdGhlIGJveXMgYW5kIGdpcmxzIGhvdyB0byBiZXR0ZXIgY29tcHJlaGVuZCBuYXJyYXRpdmUgdGV4dHMgYnkgdXNpbmcgYSBzdG9yeSBtYXAsIHRoZSBzdHVkZW50IGluc3RydWN0b3IgZm9sbG93ZWQgYSBwcm9jZWR1cmUgb3V0bGluZWQgYnkgSWRvbCAoMTk4Nyk6IAoKMS4gIE1vZGVsaW5nIHBoYXNlOiB0aGUgdGVhY2hlciBkZW1vbnN0cmF0ZXMgaG93IGEgc3RvcnkgbWFwIGlzIHVzZWQgYnkgcmVhZGluZyBhIHRhbGUgb3V0IGxvdWQgYW5kIGJ5IHN0b3BwaW5nIHdoZW5ldmVyIGltcG9ydGFudCBpbmZvcm1hdGlvbiBpcyBtZW50aW9uZWQgdG8g76yBbGwgb3V0IHBhcnRzIG9mIGhpcyBvciBoZXIgd29ya3NoZWV0LAoyLiBsZWFkIHBoYXNlOiB0aGUgY2hpbGRyZW4gcmVhZCBzdG9yaWVzIGluZGVwZW5kZW50bHkgYW5kIGNvbXBsZXRlIHRoZWlyIG1hcHMgd2hpbGUgdGhlIHRlYWNoZXIgcHJvbXB0cyBhbmQgZW5jb3VyYWdlcyB0aGVtIHRvIHJldmlldyB0aGVpciB3b3JrIHJlc3VsdHMgYW5kIHRvIGFkZCBkZXRhaWxzIHRoYXQgdGhleSBtaWdodCBoYXZlIG92ZXJsb29rZWQsIAozLiAgdGVzdCBwaGFzZTogdGhlIGNoaWxkcmVuIHJlYWQgdGV4dHMsIGRyYXcgbWFwcyBvZiB0aGVpciBvd24sIGFzayBxdWVzdGlvbnMgcGVydGFpbmluZyB0byB0aGUgY29udGVudCwgYW5zd2VyIHRoZW0sIGFuZCDvrIFsbCBpbiB0aGUgY29tcG9uZW50cyBpbnRvIHRoZWlyIG1hcHMgd2l0aG91dCBjbG9zZSBzdXBlcnZpc2lvbiBieSB0aGUgdGVhY2hlcjsgdGhlIHRlYWNoZXIgb25seSBpbnRlcnZlbmVzIGlmIHRoZSBzdHVkZW50cyBhc2sgZm9yIG9yIG9idmlvdXNseSBuZWVkcyBoZWxwLgoKIyMgRGVzaWduCgpBbiBBQiBtdWx0aXBsZSBiYXNlbGluZSBkZXNpZ24gKE1CRCkgYWNyb3NzIHN1YmplY3RzIHdhcyBhcHBsaWVkLiBXZSdsbCBjb3ZlciB3aGF0IHRoYXQgbWVhbnMgaW4gZGV0YWlsIGxhdGVyLiBGb3IgdGhlIG1vbWVudCwgbGV0J3MgbG9vayBhdCBvbmUgb2YgdGhlIHNpeCBjYXNlcywgQW5uYSwgdG8gdW5kZXJzdGFuZCB0aGUgYmFzaWMgQUIgYXBwcm9hY2ggYW5kIHdoYXQgZGF0YSBpdCB5aWVsZHMuIAoKCmBgYHtyIGluY2x1ZGU9RkFMU0V9CmxpYnJhcnkoc2NhbikKYGBgCgojIEMuIERhdGEgc2V0dXAgCgpZb3UgY2FuIHNhZmVseSBpZ25vcmUgdGhlIHRleHQsIGp1c3QgZXZhbHVhdGUgdGhlIGNvZGUgY2h1bmtzLiAKClIgcGFja2FnZXMgY29udGFpbiBub3Qgb25seSBjb2RlLCBidXQgYWxzbyBvZnRlbiBkYXRhLiBUaGUgZGF0YSBhcmUgYm91bmQgdG8gKHZhcmlhYmxlKSBuYW1lcy4gU0NBTiBjb21lcyB3aXRoIGEgbnVtYmVyIG9mIHN1Y2ggZGF0YSBzZXRzLCBmb3IgaW5zdGFuY2Ugd2l0aCBgR3J1ZW5rZVdpbGJlcnQyMDE0YCwgdGhlIGRhdGEgZnJvbSB0aGUgc3R1ZHkgZGVzY3JpYmVkIGFib3ZlLiAKCjwhLS0gcmFuc2Zvcm1pbmcgdGhlIGRhdGFzZXQgZm9yIHVzZSB3aXRoIHJlY2VudCB2ZXJzaW9uIG9mIFNDQU4gLS0+Cgo8IS0tIEZpcnN0LCB3ZSBnaXZlIHRoZSBjYXNlIGRhdGEgdGhlIChHZXJtYW4pIG5hbWVzIGZyb20gdGhlIHN0dWR5IHJhdGhlciB0aGFuIGtlZXBpbmcgdGhlIG5hbWVzIGZyb20gdGhlIGRhdGEgZmlsZS4tLT4KCgpgYGB7ciBkYXRhLXNldHVwLTEsIGluY2x1ZGU9RkFMU0V9CkFubmEgIDwtIEdydWVua2VXaWxiZXJ0MjAxNFtbIkFudG9uIl1dCkJlbGxhICA8LSBHcnVlbmtlV2lsYmVydDIwMTRbWyJCb2IiXV0KQ2hyaXN0aW5hICA8LSBHcnVlbmtlV2lsYmVydDIwMTRbWyJQYXVsIl1dCkR1bmphICA8LSBHcnVlbmtlV2lsYmVydDIwMTRbWyJSb2JlcnQiXV0KRWdvciA8LSBHcnVlbmtlV2lsYmVydDIwMTRbWyJTYW0iXV0KRmFiaWFuIDwtIEdydWVua2VXaWxiZXJ0MjAxNFtbIlRpbSJdXQpgYGAKCgo8IS0tTmV4dCB3ZSB0cmFuc2Zvcm0gdGhlc2UgZGF0YSBmcmFtZXMgdG8gc2NkZiBvYmplY3RzIGJlY2F1c2UgdGhlIGZ1bmN0aW9ucyBuZWVkIGRhdGEgaW4gdGhlIHNjZGYgZm9ybWF0IC0tPgoKCmBgYHtyIGRhdGEtc2V0dXAtMiwgaW5jbHVkZT1GQUxTRX0KQW5uYSA8LSBzY2RmKEFubmFbLCAyXSwgcGhhc2UuZGVzaWduID0gYyhBPTQsIEI9MTQpLCBuYW1lID0gIkFubmEiKQpCZWxsYSA8LXNjZGYoQmVsbGFbLCAyXSwgcGhhc2UuZGVzaWduID0gYyhBPTcsIEI9MTEpLCBuYW1lID0gIkJlbGxhIikKQ2hyaXN0aW5hIDwtIHNjZGYoQ2hyaXN0aW5hWywgMl0sIHBoYXNlLmRlc2lnbiA9IGMoQT00LCBCPTE0KSwgbmFtZSA9ICJDaHJpc3RpbmEiKQpEdW5qYSA8LSBzY2RmKER1bmphWywgMl0sIHBoYXNlLmRlc2lnbiA9IGMoQT02LCBCPTEyKSwgbmFtZSA9ICJEdW5qYSIpCkVnb3IgPC0gc2NkZihFZ29yWywgMl0sIHBoYXNlLmRlc2lnbiA9IGMoQT01LCBCPTEzKSwgbmFtZSA9ICJFZ29yIikKRmFiaWFuIDwtIHNjZGYoRmFiaWFuWywgMl0sIHBoYXNlLmRlc2lnbiA9IGMoQT04LCBCPTEwKSwgbmFtZSA9ICJGYWJpYW4iKQpgYGAKCjwhLS1XZSBuZWVkIHRoZSBgWywgMl1gIGNvbnN0cnVjdGlvbiB0byB0dXJuIHRoZSBjb2x1bW4gYHNjb3JlYCBvZiB0aGUgZGF0YSBmcmFtZSBgYm9iYCBpbnRvIGEgbGlzdC4gYHNjZGYoKWAgbmVlZHMgYSBsaXN0L3ZlY3RvciBvZiB2YWx1ZXMuIGBwaGFzZS5kZXNpZ25gIHByb3ZpZGVzIHRoZSBuYW1lIGFuZCBsZW5ndGggb2YgZWFjaCBwaGFzZS4pIEEgY2FzZSBvYmplY3Qgc2NkZiBpcyBzaW1wbHkgYSBsaXN0IHdpdGggdGhlIGRhdGFmcmFtZSBwbHVzIHNvbWUgbWV0YSBkYXRhLi0tPgoKIyBELiBTaW5nbGUgQ2FzZSBhbmFseXNpcwoKVGhlIGRhdGEgIHRha2UgdGhlIGZvcm0gb2Ygc2l4IG9iamVjdHMgKGVhY2ggYSBsaXN0IHdpdGggYSBkYXRhZnJhbWUgcGx1cyBzb21lIG1ldGEtZGF0YSkgdGhhdCBnbyBieSB0aGUgbmFtZXMgb2YgdGhlIHB1cGlsczogQW5uYSwgQmVsbGEsIENocmlzdGluYSwgRHVuamEsIEVnb3IgYW5kIEZhYmlhbi4gVGhlIHNhbWUgcHNldWRvbmFtZXMgYXMgdXNlZCBpbiB0aGUgcHVibGljYXRpb24gb2YgdGhlIHN0dWR5LiAKCgpMZXQncyBsb29rIGF0IEFubmEsIHRoZSBmaXJzdCBjYXNlLiBUaGUgZGF0YTogCgpgYGB7cn0KQW5uYQpgYGAKCkdyYXBoaWNhbGx5LCBBbm5hJ3MgY29tcHJlaGVuc2lvbiBzY29yZXMgbG9vayBsaWtlIHRoaXM6IAoKYGBge3J9CnBsb3RTQyhBbm5hKQpgYGAKCgpMZXQncyBhZGQgc29tZSBtb3JlIGluZm9ybWF0aW9uIHRvIHRoZSBwbG90LCBuYW1lbHksIGEgbWVkaWEgbGluZSBmb3IgdGhlIEEgYW5kIEIgcGhhc2U6IAoKYGBge3J9CnBsb3RTQyhBbm5hLCAKICAgICAgIHhsYWIgPSAiVHJhaW5pbmcgc2Vzc2lvbiIsIHlsYWIgPSAiQ29tcHJlaGVuc2lvbiBTY29yZSIsCiAgICAgICBwaGFzZS5uYW1lcyA9IGMoIkJhc2VsaW5lIiwgIkludGVydmVudGlvbiIpLCAKICAgICAgbGluZXMgPSBsaXN0KCJtZWRpYW4iLCBjb2wgPSAicmVkIiApKQogICAgCmBgYAoKCkl0IGlzIGFsc28gaGVscGZ1bCBzb21ldGltZXMgdG8gaGlnaGxpZ3QgcGFydGljdWxhciBtZWFzdXJlbWVudHM6CgpgYGB7cn0KcGxvdFNDKEFubmEsIAogICAgICAgcGhhc2UubmFtZXMgPSBjKCJiYXNlbGluZSIsICJyZWFkaW5nIGludGVydmVudGlvbiIpLCAKICAgICAgIHhsYWI9ImRheXMiLCAKICAgICAgIHlsYWI9InJlYWRpbmcgc2NvcmUiLCAKICAgICAgIG1hcmtzID0gbGlzdChwb3NpdGlvbnMgPSBjKDQsIDkpLCBjb2wgPSAicmVkIiwgY2V4ID0yKSkKYGBgCgoqKlF1ZXN0aW9uIFEzOioqIEhvdyBjYW4geW91IGFkZCBhIHJlZCBkb3QgZm9yIGRheSAxOD8KCmBgYHtyIFEzfQojIFlvdXIgYW5zd2VyIGhlcmUKYGBgCgpgYGB7ciBRMyBzb2x1dGlvbn0Kd3JpdGVMaW5lcyhRMykKYGBgCgoKIyMjIE92ZXJsYXAgaW5kaWNlcyBmb3IgYSBzaW5nbGUgY2FzZQoKIyMjIyBQZXJjZW50YWdlIG9mIG5vbi1vdmVybGFwcGluZyBkYXRhIChQTkQpCgpTdGF5aW5nIHdpdGggQW5uYSwgd2UgY2FuIGNhbGN1bGF0ZSBhbiBvdmVybGFwIGluZGV4IHN1Y2ggYXMgUE5EOiBUaGUgcGVyY2VudGFnZSBvZiBub24tb3ZlcmxhcHBpbmcgZGF0YSAoUE5EKSBlZmZlY3Qgc2l6ZSBtZWFzdXJlIHdhcyBkZXNjcmliZWQgYnkgU2NydWdncywgTWFzdHJvcGllcmksICYgQ2FzdG8gKDE5ODcpIC4gSXQgaXMgdGhlIHBlcmNlbnRhZ2Ugb2YgYWxsIGRhdGEtcG9pbnRzIG9mIHRoZSBzZWNvbmQgcGhhc2Ugb2YgYSBzaW5nbGUtY2FzZSBzdHVkeSBleGNlZWRpbmcgdGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGZpcnN0IHBoYXNlLiBJbiBjYXNlIHlvdSBoYXZlIGEgc3R1ZHkgd2hlcmUgeW91IGV4cGVjdCBhIGRlY3JlYXNlIG9mIHZhbHVlcyBpbiB0aGUgc2Vjb25kIHBoYXNlLCBQTkQgaXMgY2FsY3VsYXRlZCBhcyB0aGUgcGVyY2VudGFnZSBvZiBkYXRhLXBvaW50IG9mIHRoZSBzZWNvbmQgcGhhc2UgYmVsb3cgdGhlIG1pbmltdW0gb2YgdGhlIGZpcnN0IHBoYXNlLgoKKipRdWVzdGlvbjogKiogQmVmb3JlIHlvdSBydW4gdGhlIGNodW5rIGJlbG93LCBXaGF0IGRvIHlvdSBleHBlY3QgdGhlIFBORCB0byBiZSBmb3IgQW5uYSwgZnJvbSBsb29raW5nIGF0IG9uZSBvZiB0aGUgcGxvdHMgYWJvdmU/IAoKYGBge3J9CnBuZChBbm5hKQpgYGAKCgpUaGVzZSBpbmRpY2VzIGFyZSBtb3JlIHVzZWZ1bCB3aGVuIGNvbXBhcmluZyBtdWx0aXBsZSBjYXNlcy4gTGV0J3MgbG9vayBhdCBGYWJpYW4uIAoKYGBge3J9CnBsb3RTQyhGYWJpYW4sIAogICAgICAgeGxhYiA9ICJUcmFpbmluZyBzZXNzaW9uIiwgeWxhYiA9ICJDb21wcmVoZW5zaW9uIFNjb3JlIiwKICAgICAgIHBoYXNlLm5hbWVzID0gYygiQmFzZWxpbmUiLCAiSW50ZXJ2ZW50aW9uIiksIAogICAgICBsaW5lcyA9IGxpc3QoIm1lZGlhbiIsIGNvbCA9ICJyZWQiICkpCmBgYAoKKipRdWVzdGlvbjoqKiBCZWZvcmUgdGhlIG5leHQgc3RlcDogV2hhdCBkbyB5b3UgZXhwZWN0IHRoZSBQTkQgZm9yIEZhYmlhbiB0byBiZT8KCmBgYHtyfQpwbmQoRmFiaWFuKQpgYGAKCldlIGNhbiBkaXJlY3RseSBwbG90IHRoZSB0d28gY2FzZXMgbGlrZSBzbzogCgpgYGB7cn0KcG5kKGMoQW5uYSwgRmFiaWFuKSkKYGBgCgoqKlF1ZXN0aW9uIFE0OioqIFdoYXQgaXMgeW91ciBjb25jbHVzaW9uIHJlZ2FyZGluZyB0aGUgZWZmZWN0aXZlbmVzcyBvZiB0aGUgdHJlYXRtZW50IGluIHRoZSBjYXNlcyBvZiBBbm5hIGFuZCBGYWJpYW4/IAoKYGBge3IgUTQgc29sdXRpb259CndyaXRlTGluZXMoUTQpCmBgYAoKCiMjIyMgUGVyY2VudGFnZSBleGNlZWRpbmcgdGhlIG1lZGlhbiAoUEVNKQoKVGhlIHBlbSBmdW5jdGlvbiByZXR1cm5zIHRoZSBwZXJjZW50YWdlIG9mIHBoYXNlIEIgZGF0YSBleGNlZWRpbmcgdGhlIHBoYXNlIEEgbWVkaWFuLiBBZGRpdGlvbmFsbHksIGEgYmlub21pYWwgdGVzdCBhZ2FpbnN0IGEgNTAvNTAgZGlzdHJpYnV0aW9uIGlzIGNvbXB1dGVkLiBEaWZmZXJlbnQgbWVhc3VyZXMgb2YgY2VudHJhbCB0ZW5kZW5jeSBjYW4gYmUgdXNlZCAgZm9yIGFsdGVybmF0aXZlIGFuYWx5c2VzLgoKYGBge3J9CnBlbShjKEFubmEsIEZhYmlhbikpCmBgYAo=