B. Information about the Gruenke et al 2014 study

Relevance and intervention logic

Reading comprehension is the ability to construct and extract meaning from a written text. It is considered to be the most critical skill that is needed to succeed in school. If readers have serious difficulties to gather relevant information from a historical account, a mathematical word problem, or a passage in a biology book, they are bound to fail in most every task that is put before them.

This single-case study examined the effects of a graphic organizing strategy on the ability of children to improve their text comprehension abilities. Participants were six students between ten and fourteen years old with major problems in understanding what they read. The intervention intended to teach them to visually highlight key elements of a passage, and thus, to deepen their understanding of it (story mapping).

The study was conducted in Germany. Three 5th grade students from a regular education public school and three 8th grade students from a school for children with learning difficulties served as subjects. Four of them were female (Anna, Bella, Christina, and Dunja), two of them were male (Egor and Fabian) (names altered, for anonymity).

Dependent variable measurement

18 narratives from three different German story books were selected. All of them were altered in a way that it was possible to formulate exactly ten comprehension questions about each tale that covered its main content. The comprehension questions were stated in a way that only one specific and distinct answer was possible to be counted as correct. Subsequently, we standardized the texts, so that each of them consisted of exactly 150 words. In a preliminary survey, the stories and comprehension questions were presented to twenty low achieving children between 9 and 10 years old in order to identify items that were either too easy or too hard to solve. We involved the insights from this preliminary survey to compose the final version of our question sets.

Question: What does the comprehension score in this study mean, then, and what is it’s minimum and maximum value?

writeLines(Q_Intro_3)
The score is the number of correctly answered questions. 
The minimum score is zero, the maximum 10.

In the course of the study, each student was individually presented with a different story and a different set of comprehension questions for 18 consecutive school days. The order of the tales was randomly chosen for each child. Each student was asked to read a respective story out loud and then to write down the answers to the corresponding questions on a worksheet.

Question: Why was the order of the tales randomly chosen?

writeLines(Q_Intro_4)
To avoid sytematic learning based on the stories themselves, 
and, hence, on their sequence. While there is nothing wrong with that in principle, 
it is not the kind of learning studied in this research. In statistical terms, 
randomising the sequence of stories allows to generalise: For *any* sequence of 
stories, the intervention is likely to be effective (if it is effective)

The intervention

To teach the boys and girls how to better comprehend narrative texts by using a story map, the student instructor followed a procedure outlined by Idol (1987):

  1. Modeling phase: the teacher demonstrates how a story map is used by reading a tale out loud and by stopping whenever important information is mentioned to fill out parts of his or her worksheet,
  2. lead phase: the children read stories independently and complete their maps while the teacher prompts and encourages them to review their work results and to add details that they might have overlooked,
  3. test phase: the children read texts, draw maps of their own, ask questions pertaining to the content, answer them, and fill in the components into their maps without close supervision by the teacher; the teacher only intervenes if the students ask for or obviously needs help.

Design

An AB multiple baseline design (MBD) across subjects was applied. We’ll cover what that means in detail later. For the moment, let’s look at one of the six cases, Anna, to understand the basic AB approach and what data it yields.

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.

Percentage exceeding the median (PEM)

The pem function returns the percentage of phase B data exceeding the phase A median. Additionally, a binomial test against a 50/50 distribution is computed. Different measures of central tendency can be used for alternative analyses.

pem(c(Anna, Fabian))
Percent Exceeding the Median

       PEM positives total binom.p
Anna   100        14    14   0.000
Fabian 100        10    10   0.001

Alternative hypothesis: true probability > 50%
LS0tCnRpdGxlOiAiVHV0b3JpYWwgQSIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKIyBCLiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgR3J1ZW5rZSBldCBhbCAyMDE0IHN0dWR5CgojIyBSZWxldmFuY2UgYW5kIGludGVydmVudGlvbiBsb2dpYwoKUmVhZGluZyBjb21wcmVoZW5zaW9uIGlzIHRoZSBhYmlsaXR5IHRvIGNvbnN0cnVjdCBhbmQgZXh0cmFjdCBtZWFuaW5nIGZyb20gYSB3cml0dGVuIHRleHQuIEl0IGlzIGNvbnNpZGVyZWQgdG8gYmUgdGhlIG1vc3QgY3JpdGljYWwgc2tpbGwgdGhhdCBpcyBuZWVkZWQgdG8gc3VjY2VlZCBpbiBzY2hvb2wuIElmIHJlYWRlcnMgaGF2ZSBzZXJpb3VzIGRpZu+sgWN1bHRpZXMgdG8gZ2F0aGVyIHJlbGV2YW50IGluZm9ybWF0aW9uIGZyb20gYSBoaXN0b3JpY2FsIGFjY291bnQsIGEgbWF0aGVtYXRpY2FsIHdvcmQgcHJvYmxlbSwgb3IgYSBwYXNzYWdlIGluIGEgYmlvbG9neSBib29rLCB0aGV5IGFyZSBib3VuZCB0byBmYWlsIGluIG1vc3QgZXZlcnkgdGFzayB0aGF0IGlzIHB1dCBiZWZvcmUgdGhlbS4gCgpUaGlzIHNpbmdsZS1jYXNlIHN0dWR5IGV4YW1pbmVkIHRoZSBlZmZlY3RzIG9mIGEgZ3JhcGhpYyBvcmdhbml6aW5nIHN0cmF0ZWd5IG9uIHRoZSBhYmlsaXR5IG9mIGNoaWxkcmVuIHRvIGltcHJvdmUgdGhlaXIgdGV4dCBjb21wcmVoZW5zaW9uIGFiaWxpdGllcy4gUGFydGljaXBhbnRzIHdlcmUgc2l4IHN0dWRlbnRzIGJldHdlZW4gdGVuIGFuZCBmb3VydGVlbiB5ZWFycyBvbGQgd2l0aCBtYWpvciBwcm9ibGVtcyBpbiB1bmRlcnN0YW5kaW5nIHdoYXQgdGhleSByZWFkLiBUaGUgaW50ZXJ2ZW50aW9uIGludGVuZGVkIHRvIHRlYWNoIHRoZW0gdG8gdmlzdWFsbHkgaGlnaGxpZ2h0IGtleSBlbGVtZW50cyBvZiBhIHBhc3NhZ2UsIGFuZCB0aHVzLCB0byBkZWVwZW4gdGhlaXIgdW5kZXJzdGFuZGluZyBvZiBpdCAoc3RvcnkgbWFwcGluZykuIAoKVGhlIHN0dWR5IHdhcyBjb25kdWN0ZWQgaW4gR2VybWFueS4gVGhyZWUgNXRoIGdyYWRlIHN0dWRlbnRzIGZyb20gYSByZWd1bGFyIGVkdWNhdGlvbiBwdWJsaWMgc2Nob29sIGFuZCB0aHJlZSA4dGggZ3JhZGUgc3R1ZGVudHMgZnJvbSBhIHNjaG9vbCBmb3IgY2hpbGRyZW4gd2l0aCBsZWFybmluZyBkaWbvrIFjdWx0aWVzIHNlcnZlZCBhcyBzdWJqZWN0cy4gRm91ciBvZiB0aGVtIHdlcmUgZmVtYWxlIChBbm5hLCBCZWxsYSwgQ2hyaXN0aW5hLCBhbmQgRHVuamEpLCB0d28gb2YgdGhlbSB3ZXJlIG1hbGUgKEVnb3IgYW5kIEZhYmlhbikgKG5hbWVzIGFsdGVyZWQsIGZvciBhbm9ueW1pdHkpLgoKIyMgRGVwZW5kZW50IHZhcmlhYmxlIG1lYXN1cmVtZW50CgoxOCBuYXJyYXRpdmVzIGZyb20gdGhyZWUgZGlmZmVyZW50IEdlcm1hbiBzdG9yeSBib29rcyB3ZXJlIHNlbGVjdGVkLiBBbGwgb2YgdGhlbSB3ZXJlIGFsdGVyZWQgaW4gYSB3YXkgdGhhdCBpdCB3YXMgcG9zc2libGUgdG8gZm9ybXVsYXRlIGV4YWN0bHkgdGVuIGNvbXByZWhlbnNpb24gcXVlc3Rpb25zIGFib3V0IGVhY2ggdGFsZSB0aGF0IGNvdmVyZWQgaXRzIG1haW4gY29udGVudC4gVGhlIGNvbXByZWhlbnNpb24gcXVlc3Rpb25zIHdlcmUgc3RhdGVkIGluIGEgd2F5IHRoYXQgb25seSBvbmUgc3BlY2nvrIFjIGFuZCBkaXN0aW5jdCBhbnN3ZXIgd2FzIHBvc3NpYmxlIHRvIGJlIGNvdW50ZWQgYXMgY29ycmVjdC4gU3Vic2VxdWVudGx5LCB3ZSBzdGFuZGFyZGl6ZWQgdGhlIHRleHRzLCBzbyB0aGF0IGVhY2ggb2YgdGhlbSBjb25zaXN0ZWQgb2YgZXhhY3RseSAxNTAgd29yZHMuIEluIGEgcHJlbGltaW5hcnkgc3VydmV5LCB0aGUgc3RvcmllcyBhbmQgY29tcHJlaGVuc2lvbiBxdWVzdGlvbnMgd2VyZSBwcmVzZW50ZWQgdG8gdHdlbnR5IGxvdyBhY2hpZXZpbmcgY2hpbGRyZW4gYmV0d2VlbiA5IGFuZCAxMCB5ZWFycyBvbGQgaW4gb3JkZXIgdG8gaWRlbnRpZnkgaXRlbXMgdGhhdCB3ZXJlIGVpdGhlciB0b28gZWFzeSBvciB0b28gaGFyZCB0byBzb2x2ZS4gV2UgaW52b2x2ZWQgdGhlIGluc2lnaHRzIGZyb20gdGhpcyBwcmVsaW1pbmFyeSBzdXJ2ZXkgdG8gY29tcG9zZSB0aGUg76yBbmFsIHZlcnNpb24gb2Ygb3VyIHF1ZXN0aW9uIHNldHMuCgoqKlF1ZXN0aW9uOioqIFdoYXQgZG9lcyB0aGUgY29tcHJlaGVuc2lvbiBzY29yZSBpbiB0aGlzIHN0dWR5IG1lYW4sIHRoZW4sIGFuZCB3aGF0IGlzIGl0J3MgbWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZT8gCgpgYGB7cn0Kd3JpdGVMaW5lcyhRX0ludHJvXzMpCmBgYAoKSW4gdGhlIGNvdXJzZSBvZiB0aGUgc3R1ZHksIGVhY2ggc3R1ZGVudCB3YXMgaW5kaXZpZHVhbGx5IHByZXNlbnRlZCB3aXRoIGEgZGlmZmVyZW50IHN0b3J5IGFuZCBhIGRpZmZlcmVudCBzZXQgb2YgY29tcHJlaGVuc2lvbiBxdWVzdGlvbnMgZm9yIDE4IGNvbnNlY3V0aXZlIHNjaG9vbCBkYXlzLiBUaGUgb3JkZXIgb2YgdGhlIHRhbGVzIHdhcyByYW5kb21seSBjaG9zZW4gZm9yIGVhY2ggY2hpbGQuIEVhY2ggc3R1ZGVudCB3YXMgYXNrZWQgdG8gcmVhZCBhIHJlc3BlY3RpdmUgc3Rvcnkgb3V0IGxvdWQgYW5kIHRoZW4gdG8gd3JpdGUgZG93biB0aGUgYW5zd2VycyB0byB0aGUgY29ycmVzcG9uZGluZyBxdWVzdGlvbnMgb24gYSB3b3Jrc2hlZXQuCgoqKlF1ZXN0aW9uOioqIFdoeSB3YXMgdGhlIG9yZGVyIG9mIHRoZSB0YWxlcyByYW5kb21seSBjaG9zZW4/IAoKCmBgYHtyfQp3cml0ZUxpbmVzKFFfSW50cm9fNCkKYGBgCgoKIyMgVGhlIGludGVydmVudGlvbgoKVG8gdGVhY2ggdGhlIGJveXMgYW5kIGdpcmxzIGhvdyB0byBiZXR0ZXIgY29tcHJlaGVuZCBuYXJyYXRpdmUgdGV4dHMgYnkgdXNpbmcgYSBzdG9yeSBtYXAsIHRoZSBzdHVkZW50IGluc3RydWN0b3IgZm9sbG93ZWQgYSBwcm9jZWR1cmUgb3V0bGluZWQgYnkgSWRvbCAoMTk4Nyk6IAoKMS4gIE1vZGVsaW5nIHBoYXNlOiB0aGUgdGVhY2hlciBkZW1vbnN0cmF0ZXMgaG93IGEgc3RvcnkgbWFwIGlzIHVzZWQgYnkgcmVhZGluZyBhIHRhbGUgb3V0IGxvdWQgYW5kIGJ5IHN0b3BwaW5nIHdoZW5ldmVyIGltcG9ydGFudCBpbmZvcm1hdGlvbiBpcyBtZW50aW9uZWQgdG8g76yBbGwgb3V0IHBhcnRzIG9mIGhpcyBvciBoZXIgd29ya3NoZWV0LAoyLiBsZWFkIHBoYXNlOiB0aGUgY2hpbGRyZW4gcmVhZCBzdG9yaWVzIGluZGVwZW5kZW50bHkgYW5kIGNvbXBsZXRlIHRoZWlyIG1hcHMgd2hpbGUgdGhlIHRlYWNoZXIgcHJvbXB0cyBhbmQgZW5jb3VyYWdlcyB0aGVtIHRvIHJldmlldyB0aGVpciB3b3JrIHJlc3VsdHMgYW5kIHRvIGFkZCBkZXRhaWxzIHRoYXQgdGhleSBtaWdodCBoYXZlIG92ZXJsb29rZWQsIAozLiAgdGVzdCBwaGFzZTogdGhlIGNoaWxkcmVuIHJlYWQgdGV4dHMsIGRyYXcgbWFwcyBvZiB0aGVpciBvd24sIGFzayBxdWVzdGlvbnMgcGVydGFpbmluZyB0byB0aGUgY29udGVudCwgYW5zd2VyIHRoZW0sIGFuZCDvrIFsbCBpbiB0aGUgY29tcG9uZW50cyBpbnRvIHRoZWlyIG1hcHMgd2l0aG91dCBjbG9zZSBzdXBlcnZpc2lvbiBieSB0aGUgdGVhY2hlcjsgdGhlIHRlYWNoZXIgb25seSBpbnRlcnZlbmVzIGlmIHRoZSBzdHVkZW50cyBhc2sgZm9yIG9yIG9idmlvdXNseSBuZWVkcyBoZWxwLgoKIyMgRGVzaWduCgpBbiBBQiBtdWx0aXBsZSBiYXNlbGluZSBkZXNpZ24gKE1CRCkgYWNyb3NzIHN1YmplY3RzIHdhcyBhcHBsaWVkLiBXZSdsbCBjb3ZlciB3aGF0IHRoYXQgbWVhbnMgaW4gZGV0YWlsIGxhdGVyLiBGb3IgdGhlIG1vbWVudCwgbGV0J3MgbG9vayBhdCBvbmUgb2YgdGhlIHNpeCBjYXNlcywgQW5uYSwgdG8gdW5kZXJzdGFuZCB0aGUgYmFzaWMgQUIgYXBwcm9hY2ggYW5kIHdoYXQgZGF0YSBpdCB5aWVsZHMuIAoKCmBgYHtyIGluY2x1ZGU9RkFMU0V9CmxpYnJhcnkoc2NhbikKYGBgCgojIEMuIERhdGEgc2V0dXAgCgpZb3UgY2FuIHNhZmVseSBpZ25vcmUgdGhlIHRleHQsIGp1c3QgZXZhbHVhdGUgdGhlIGNvZGUgY2h1bmtzLiAKClIgcGFja2FnZXMgY29udGFpbiBub3Qgb25seSBjb2RlLCBidXQgYWxzbyBvZnRlbiBkYXRhLiBUaGUgZGF0YSBhcmUgYm91bmQgdG8gKHZhcmlhYmxlKSBuYW1lcy4gU0NBTiBjb21lcyB3aXRoIGEgbnVtYmVyIG9mIHN1Y2ggZGF0YSBzZXRzLCBmb3IgaW5zdGFuY2Ugd2l0aCBgR3J1ZW5rZVdpbGJlcnQyMDE0YCwgdGhlIGRhdGEgZnJvbSB0aGUgc3R1ZHkgZGVzY3JpYmVkIGFib3ZlLiAKCjwhLS0gcmFuc2Zvcm1pbmcgdGhlIGRhdGFzZXQgZm9yIHVzZSB3aXRoIHJlY2VudCB2ZXJzaW9uIG9mIFNDQU4gLS0+Cgo8IS0tIEZpcnN0LCB3ZSBnaXZlIHRoZSBjYXNlIGRhdGEgdGhlIChHZXJtYW4pIG5hbWVzIGZyb20gdGhlIHN0dWR5IHJhdGhlciB0aGFuIGtlZXBpbmcgdGhlIG5hbWVzIGZyb20gdGhlIGRhdGEgZmlsZS4tLT4KCgpgYGB7ciBkYXRhLXNldHVwLTEsIGluY2x1ZGU9RkFMU0V9CkFubmEgIDwtIEdydWVua2VXaWxiZXJ0MjAxNFtbIkFudG9uIl1dCkJlbGxhICA8LSBHcnVlbmtlV2lsYmVydDIwMTRbWyJCb2IiXV0KQ2hyaXN0aW5hICA8LSBHcnVlbmtlV2lsYmVydDIwMTRbWyJQYXVsIl1dCkR1bmphICA8LSBHcnVlbmtlV2lsYmVydDIwMTRbWyJSb2JlcnQiXV0KRWdvciA8LSBHcnVlbmtlV2lsYmVydDIwMTRbWyJTYW0iXV0KRmFiaWFuIDwtIEdydWVua2VXaWxiZXJ0MjAxNFtbIlRpbSJdXQpgYGAKCgo8IS0tTmV4dCB3ZSB0cmFuc2Zvcm0gdGhlc2UgZGF0YSBmcmFtZXMgdG8gc2NkZiBvYmplY3RzIGJlY2F1c2UgdGhlIGZ1bmN0aW9ucyBuZWVkIGRhdGEgaW4gdGhlIHNjZGYgZm9ybWF0IC0tPgoKCmBgYHtyIGRhdGEtc2V0dXAtMiwgaW5jbHVkZT1GQUxTRX0KQW5uYSA8LSBzY2RmKEFubmFbLCAyXSwgcGhhc2UuZGVzaWduID0gYyhBPTQsIEI9MTQpLCBuYW1lID0gIkFubmEiKQpCZWxsYSA8LXNjZGYoQmVsbGFbLCAyXSwgcGhhc2UuZGVzaWduID0gYyhBPTcsIEI9MTEpLCBuYW1lID0gIkJlbGxhIikKQ2hyaXN0aW5hIDwtIHNjZGYoQ2hyaXN0aW5hWywgMl0sIHBoYXNlLmRlc2lnbiA9IGMoQT00LCBCPTE0KSwgbmFtZSA9ICJDaHJpc3RpbmEiKQpEdW5qYSA8LSBzY2RmKER1bmphWywgMl0sIHBoYXNlLmRlc2lnbiA9IGMoQT02LCBCPTEyKSwgbmFtZSA9ICJEdW5qYSIpCkVnb3IgPC0gc2NkZihFZ29yWywgMl0sIHBoYXNlLmRlc2lnbiA9IGMoQT01LCBCPTEzKSwgbmFtZSA9ICJFZ29yIikKRmFiaWFuIDwtIHNjZGYoRmFiaWFuWywgMl0sIHBoYXNlLmRlc2lnbiA9IGMoQT04LCBCPTEwKSwgbmFtZSA9ICJGYWJpYW4iKQpgYGAKCjwhLS1XZSBuZWVkIHRoZSBgWywgMl1gIGNvbnN0cnVjdGlvbiB0byB0dXJuIHRoZSBjb2x1bW4gYHNjb3JlYCBvZiB0aGUgZGF0YSBmcmFtZSBgYm9iYCBpbnRvIGEgbGlzdC4gYHNjZGYoKWAgbmVlZHMgYSBsaXN0L3ZlY3RvciBvZiB2YWx1ZXMuIGBwaGFzZS5kZXNpZ25gIHByb3ZpZGVzIHRoZSBuYW1lIGFuZCBsZW5ndGggb2YgZWFjaCBwaGFzZS4pIEEgY2FzZSBvYmplY3Qgc2NkZiBpcyBzaW1wbHkgYSBsaXN0IHdpdGggdGhlIGRhdGFmcmFtZSBwbHVzIHNvbWUgbWV0YSBkYXRhLi0tPgoKIyBELiBTaW5nbGUgQ2FzZSBhbmFseXNpcwoKVGhlIGRhdGEgIHRha2UgdGhlIGZvcm0gb2Ygc2l4IG9iamVjdHMgKGVhY2ggYSBsaXN0IHdpdGggYSBkYXRhZnJhbWUgcGx1cyBzb21lIG1ldGEtZGF0YSkgdGhhdCBnbyBieSB0aGUgbmFtZXMgb2YgdGhlIHB1cGlsczogQW5uYSwgQmVsbGEsIENocmlzdGluYSwgRHVuamEsIEVnb3IgYW5kIEZhYmlhbi4gVGhlIHNhbWUgcHNldWRvbmFtZXMgYXMgdXNlZCBpbiB0aGUgcHVibGljYXRpb24gb2YgdGhlIHN0dWR5LiAKCgpMZXQncyBsb29rIGF0IEFubmEsIHRoZSBmaXJzdCBjYXNlLiBUaGUgZGF0YTogCgpgYGB7cn0KQW5uYQpgYGAKCkdyYXBoaWNhbGx5LCBBbm5hJ3MgY29tcHJlaGVuc2lvbiBzY29yZXMgbG9vayBsaWtlIHRoaXM6IAoKYGBge3J9CnBsb3RTQyhBbm5hKQpgYGAKCgpMZXQncyBhZGQgc29tZSBtb3JlIGluZm9ybWF0aW9uIHRvIHRoZSBwbG90LCBuYW1lbHksIGEgbWVkaWEgbGluZSBmb3IgdGhlIEEgYW5kIEIgcGhhc2U6IAoKYGBge3J9CnBsb3RTQyhBbm5hLCAKICAgICAgIHhsYWIgPSAiVHJhaW5pbmcgc2Vzc2lvbiIsIHlsYWIgPSAiQ29tcHJlaGVuc2lvbiBTY29yZSIsCiAgICAgICBwaGFzZS5uYW1lcyA9IGMoIkJhc2VsaW5lIiwgIkludGVydmVudGlvbiIpLCAKICAgICAgbGluZXMgPSBsaXN0KCJtZWRpYW4iLCBjb2wgPSAicmVkIiApKQogICAgCmBgYAoKCkl0IGlzIGFsc28gaGVscGZ1bCBzb21ldGltZXMgdG8gaGlnaGxpZ3QgcGFydGljdWxhciBtZWFzdXJlbWVudHM6CgpgYGB7cn0KcGxvdFNDKEFubmEsIAogICAgICAgcGhhc2UubmFtZXMgPSBjKCJiYXNlbGluZSIsICJyZWFkaW5nIGludGVydmVudGlvbiIpLCAKICAgICAgIHhsYWI9ImRheXMiLCAKICAgICAgIHlsYWI9InJlYWRpbmcgc2NvcmUiLCAKICAgICAgIG1hcmtzID0gbGlzdChwb3NpdGlvbnMgPSBjKDQsIDkpLCBjb2wgPSAicmVkIiwgY2V4ID0yKSkKYGBgCgoqKlF1ZXN0aW9uIFEzOioqIEhvdyBjYW4geW91IGFkZCBhIHJlZCBkb3QgZm9yIGRheSAxOD8KCmBgYHtyIFEzfQojIFlvdXIgYW5zd2VyIGhlcmUKYGBgCgpgYGB7ciBRMyBzb2x1dGlvbn0Kd3JpdGVMaW5lcyhRMykKYGBgCgoKIyMjIE92ZXJsYXAgaW5kaWNlcyBmb3IgYSBzaW5nbGUgY2FzZQoKIyMjIyBQZXJjZW50YWdlIG9mIG5vbi1vdmVybGFwcGluZyBkYXRhIChQTkQpCgpTdGF5aW5nIHdpdGggQW5uYSwgd2UgY2FuIGNhbGN1bGF0ZSBhbiBvdmVybGFwIGluZGV4IHN1Y2ggYXMgUE5EOiBUaGUgcGVyY2VudGFnZSBvZiBub24tb3ZlcmxhcHBpbmcgZGF0YSAoUE5EKSBlZmZlY3Qgc2l6ZSBtZWFzdXJlIHdhcyBkZXNjcmliZWQgYnkgU2NydWdncywgTWFzdHJvcGllcmksICYgQ2FzdG8gKDE5ODcpIC4gSXQgaXMgdGhlIHBlcmNlbnRhZ2Ugb2YgYWxsIGRhdGEtcG9pbnRzIG9mIHRoZSBzZWNvbmQgcGhhc2Ugb2YgYSBzaW5nbGUtY2FzZSBzdHVkeSBleGNlZWRpbmcgdGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGZpcnN0IHBoYXNlLiBJbiBjYXNlIHlvdSBoYXZlIGEgc3R1ZHkgd2hlcmUgeW91IGV4cGVjdCBhIGRlY3JlYXNlIG9mIHZhbHVlcyBpbiB0aGUgc2Vjb25kIHBoYXNlLCBQTkQgaXMgY2FsY3VsYXRlZCBhcyB0aGUgcGVyY2VudGFnZSBvZiBkYXRhLXBvaW50IG9mIHRoZSBzZWNvbmQgcGhhc2UgYmVsb3cgdGhlIG1pbmltdW0gb2YgdGhlIGZpcnN0IHBoYXNlLgoKKipRdWVzdGlvbjogKiogQmVmb3JlIHlvdSBydW4gdGhlIGNodW5rIGJlbG93LCBXaGF0IGRvIHlvdSBleHBlY3QgdGhlIFBORCB0byBiZSBmb3IgQW5uYSwgZnJvbSBsb29raW5nIGF0IG9uZSBvZiB0aGUgcGxvdHMgYWJvdmU/IAoKYGBge3J9CnBuZChBbm5hKQpgYGAKCgpUaGVzZSBpbmRpY2VzIGFyZSBtb3JlIHVzZWZ1bCB3aGVuIGNvbXBhcmluZyBtdWx0aXBsZSBjYXNlcy4gTGV0J3MgbG9vayBhdCBGYWJpYW4uIAoKYGBge3J9CnBsb3RTQyhGYWJpYW4sIAogICAgICAgeGxhYiA9ICJUcmFpbmluZyBzZXNzaW9uIiwgeWxhYiA9ICJDb21wcmVoZW5zaW9uIFNjb3JlIiwKICAgICAgIHBoYXNlLm5hbWVzID0gYygiQmFzZWxpbmUiLCAiSW50ZXJ2ZW50aW9uIiksIAogICAgICBsaW5lcyA9IGxpc3QoIm1lZGlhbiIsIGNvbCA9ICJyZWQiICkpCmBgYAoKKipRdWVzdGlvbjoqKiBCZWZvcmUgdGhlIG5leHQgc3RlcDogV2hhdCBkbyB5b3UgZXhwZWN0IHRoZSBQTkQgZm9yIEZhYmlhbiB0byBiZT8KCmBgYHtyfQpwbmQoRmFiaWFuKQpgYGAKCldlIGNhbiBkaXJlY3RseSBwbG90IHRoZSB0d28gY2FzZXMgbGlrZSBzbzogCgpgYGB7cn0KcG5kKGMoQW5uYSwgRmFiaWFuKSkKYGBgCgoqKlF1ZXN0aW9uIFE0OioqIFdoYXQgaXMgeW91ciBjb25jbHVzaW9uIHJlZ2FyZGluZyB0aGUgZWZmZWN0aXZlbmVzcyBvZiB0aGUgdHJlYXRtZW50IGluIHRoZSBjYXNlcyBvZiBBbm5hIGFuZCBGYWJpYW4/IAoKYGBge3IgUTQgc29sdXRpb259CndyaXRlTGluZXMoUTQpCmBgYAoKCiMjIyMgUGVyY2VudGFnZSBleGNlZWRpbmcgdGhlIG1lZGlhbiAoUEVNKQoKVGhlIHBlbSBmdW5jdGlvbiByZXR1cm5zIHRoZSBwZXJjZW50YWdlIG9mIHBoYXNlIEIgZGF0YSBleGNlZWRpbmcgdGhlIHBoYXNlIEEgbWVkaWFuLiBBZGRpdGlvbmFsbHksIGEgYmlub21pYWwgdGVzdCBhZ2FpbnN0IGEgNTAvNTAgZGlzdHJpYnV0aW9uIGlzIGNvbXB1dGVkLiBEaWZmZXJlbnQgbWVhc3VyZXMgb2YgY2VudHJhbCB0ZW5kZW5jeSBjYW4gYmUgdXNlZCAgZm9yIGFsdGVybmF0aXZlIGFuYWx5c2VzLgoKYGBge3J9CnBlbShjKEFubmEsIEZhYmlhbikpCmBgYAo=