1 Abstract

Shoe size and length of stride were tested as potential predictors of body height. Length of stride proved to be the more reliable predictor of body height. All phases of this project were conducted, analyzed and documented within this RMarkdown file as well as all the code fragments developed. This file illustrates the full range of flexibility of the RMarkdown system and can be used for teaching RMarkdown techniques.

2 Keywords

  • R Markdown
  • Predicting body height
  • Stride length
  • Foot length

3 Introduction

This is a mini data science project to illustrate how RMarkdown can be used to capture all components of a project can be captured within an R Notebook. The research topic was inspired by quote of Sherlock Holmes:

“Yes,” he reported, after a short examination of the grass bed, “a number twelve shoe, I should say. If he was all on the same scale as his foot he must certainly have been a giant.”
\(\quad\quad\) Sherlock Holmes in The Adventure of Wisteria Lodge (Doyle 1907)

Since the early days of the forensic science, there have been many attempts to use measurements of footprints and stride to estimate the height of suspects. While the correlation between height and either of these measurements has known, extensive research has shown that these correlations are modified by terrain, health, nutrition, and age. (Giles and Vallandigham 1991)

3.1 Key reseach questions:

This paper will revisit this topic by analyzing some relevant data downloaded from the Internet in an attempt to answer the following questions.

  • Is there a reliable correlation between foot and stride measures of length of the height of the corresponding individual?

  • Is there a difference in the reliability of these two measures as predictors of height?

  • Can RMarkdown really capture all the information of a project in publishable format?

4 Methodology

The key data comes from an mathematic exercise posted to help high school teachers to demonstrate the use of a statistic calculator in solving a crime scene problem. (Texas Instruments Instruments 2005) The sample data from this hand out were typed into a csv file that could be loaded into R for analysis. The following graph shows the relationships between the various parameters in this dataset.

This graph clearly suggests a strong correlation between \(StrideLength\) and \(Height\). At the same time, there was only a weak correlations between \(ShoeLength\) and the other 2 parameters.

The second dataset came from an Open Science Foundation study of the foot size of 100 men and women. (Sauer 2017) However, some preprocessing was required as the height of some of the data points were encoded in metres instead of cm. The spurious entries of individuals taller than 3m were removed.

5 Results

The relationship between the parameters can be modelled mathematically as a linear equation that can be derived from the data:

\[Height = Factor \times Measurement + Constant\]

The following graph plots the actual data points and the corresponding predicted values of height based on footprint and stride lengths. The different shading levels illustrate the 80 and 95% confidence limits of the model.

This graph clearly shows the differences between footprint and stride lengths as predictors of height. The statistics of the linear model are given in the following table.

Parameter Shoe Length Stride Length
Factor 3.4 \(\pm\) 1.1 1.33 \(\pm\) 0.09
Constant 81.1 \(\pm\) 29.8 67.6 \(\pm\) 6.7
\(R^2\) 0.363 0.944
\(p\ value\) 0.01 9.55 \(\times\) 10\({}^{-10}\)
Mean Average Error (MAD) 57.3cm 13.45cm
Residual standard error 11.63\({}_{(DF=13)}\) 3.438\({}_{(DF=13)}\)

These findings are collaborated by the shoe size data for 99 individuals (81 women, 18 men) given in the second dataset.

This graph clearly shows that among the undergraduate students measured, women were shorter and had smaller feet than their male classmates. However, as shown in the following table, there was no significant gender differences in the slope or intersection of the resulting linear models. Nonetheless the correlation coefficent for these male students were nearly twice that of female students. More studies are required to determine if this difference can be seen in other populations.

Parameter Male Students Female Students
Mean Shoe size 43.9 \(\pm\) 2.4 38.3 \(\pm\) 1.3
Factor 3.67 \(\pm\) 0.48 3.02 \(\pm\) 0.41
Constant 21.9 \(\pm\) 21.3 51.7 \(\pm\) 15.5
\(R^2\) 0.7693 0.405
\(p\ value\) 1.08 \(\times\) 10\({}^-6\) 1.03 \(\times\) 10\({}^{-10}\)
Mean Average Error (MAD) 58.3cm 31.1cm
Residual standard error 4.783\({}_{(DF=16)}\) 4.856\({}_{(DF=79)}\)

6 Conclusion

In summary, this paper has attempted to address the 3 key research questions posed in the Introduction, namely:

  1. Correlation between height and foot and stride measurements: Given the available data of foot and stride measurements exhibited \(R^2\) values of 0.363 and 0.944, respectively. This would suggest that the footprint length is a poor predictor of height while stride length tends to be a fairly reliable predictor. The shoe size dataset also confirmed this finding.

  2. Comparision of foot and stride lengths as predictors of height: Given that an average foot measurement is expected to have an average mean error of 50cm, foot print size are poor predictors of height. On the other hand, average stride lengths exhibited an average mean error of 13.5cm.

  3. Using RMarkdown to capture all information of a project in publishable format: This document is vivid proof that RMarkdown can manage not only the text of the background and findings but also all data and statistical processes as well. Some code blocks required special parameters to remove unwanted messages and warnings. The authors were able to run all the analysis within code blocks while controlling the display of code through the echo and evaluation parameters of code blocks. Inline code blocks can provide insertion of key information without the need for cut and paste. Citations and links to sources were handled using bibtex textbase which extracted, arranged and inserted relevant references automatically. The resulting document is similar in format to technical notes seen in ACM and IEEE journals but with full transparency to the reader of the sources and methods used in the research.

Althought this study was conducted using 2 separate datasets, the sampling sizes were relatively small (i.e. 20 and 99) and did not address other known factors that effect shoe size and stride lengths. (Giles and Vallandigham 1991) It would be interesting to explore the impact these and other factors on the ability to predict the height of individuals, especially given the economics and lifestyle changes that are happening worldwide.

7 Bibliography

Doyle, Arthur Conan. 1907. “The Adventure of Wisteria Lodge.” In His Last Bow: Some Reminiscences of Sherlock Holmes. London, England: John Murray Publishers.

Giles, Eugene, and Paul Vallandigham. 1991. “Height Estimation from Foot and Shoeprint Length.” Journal of Forensic Sciences 36 (4): 1134–51. https://www.dentalage.co.uk/wp-content/uploads/2014/09/giles_e_et_al_1990_foot_length__height.pdf.

Sauer, Sebastian. 2017. “Dataset "Height and Shoe Size.” Available online from Open Science Framework Storage and retreaved 9 May 2019. https://osf.io/66fvm/.

Texas Instruments Instruments. 2005. “Analyze the Relationships Between Shoe Size, Stride Length, and Height, and Then Use That Information to Identify the Likely Killer.” Available online and retrieved 9 May 2019. https://docplayer.net/50175537-Analyze-the-relationships-between-shoe-size-stride-length-and-height-and-then-use-that-information-to-identify-the-likely-killer.html.

LS0tCnRpdGxlOiAiRXN0aW1hdGluZyBoZWlnaHQgYmFzZWQgb248YnI+Zm9vdHByaW50IGFuZCBzdHJpZGUgbWVhc3VyZW1lbnRzOjxicj48c21hbGw+PGI+QW4gZXhhbXBsZSBvZiBhIGRhdGEgcHJvamVjdCBjYXB0dXJlZCBpbiBSTWFya2Rvd248Yj48L3NtYWxsPiIKYXV0aG9yOgogLSAiQXV0aG9yczoiCiAtICJSb2JlcnQgUCBCYXR6aW5nZXIsIFBheWFwIFVuaXZlcnNpdHkiCiAtICJULlIuIFNpdmFwcml5YSwgTGFkeSBEb2FrIENvbGxlZ2UiCiAtICJEYWxpYSBJZ25hdGl1cywgTGFkeSBEb2FrIENvbGxlZ2UiCiAtICJQYWRtYWphLCBMYWR5IERvYWsgQ29sbGVnZSIKIC0gIkRldmlwcml5YSwgTGFkeSBEb2FrIENvbGxlZ2UiCiAtICJLYXZpdGhhLCBMYWR5IERvYWsgQ29sbGVnZSIKIC0gIk4uIEpheWFjaGFuZHJhLCBMYWR5IERvYWsgQ29sbGVnZSIKIC0gIjxicj4iCgpkYXRlOiAiRGF0ZSBvZiBEcmFmdDogTWF5IDIwMTk8YnI+PGJyPlRhYmxlIG9mIENvbnRlbnRzOiIKb3V0cHV0OiAKICBodG1sX25vdGVib29rOgogICAgdG9jOiBUcnVlCiAgICB0b2NfZGVwdGg6IDIKICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQpiaWJsaW9ncmFwaHk6IHByb2plY3QuYmliCmxpbmstY2l0YXRpb25zOiB5ZXMKLS0tCiMgQWJzdHJhY3QKCj4gU2hvZSBzaXplIGFuZCBsZW5ndGggb2Ygc3RyaWRlIHdlcmUgdGVzdGVkIGFzIHBvdGVudGlhbCBwcmVkaWN0b3JzIG9mIGJvZHkgaGVpZ2h0LiBMZW5ndGggb2Ygc3RyaWRlIHByb3ZlZCB0byBiZSB0aGUgbW9yZSByZWxpYWJsZSBwcmVkaWN0b3Igb2YgYm9keSBoZWlnaHQuCkFsbCBwaGFzZXMgb2YgdGhpcyBwcm9qZWN0IHdlcmUgY29uZHVjdGVkLCBhbmFseXplZCBhbmQgZG9jdW1lbnRlZCB3aXRoaW4gdGhpcyBSTWFya2Rvd24gZmlsZSBhcyB3ZWxsIGFzIGFsbCB0aGUgY29kZSBmcmFnbWVudHMgZGV2ZWxvcGVkLiBUaGlzIGZpbGUgaWxsdXN0cmF0ZXMgdGhlIGZ1bGwgcmFuZ2Ugb2YgZmxleGliaWxpdHkgb2YgdGhlIFJNYXJrZG93biBzeXN0ZW0gYW5kIGNhbiBiZSB1c2VkIGZvciB0ZWFjaGluZyBSTWFya2Rvd24gdGVjaG5pcXVlcy4KCiMgS2V5d29yZHMKCiogUiBNYXJrZG93bgoqIFByZWRpY3RpbmcgYm9keSBoZWlnaHQKKiBTdHJpZGUgbGVuZ3RoCiogRm9vdCBsZW5ndGgKCiMgSW50cm9kdWN0aW9uCgpUaGlzIGlzIGEgbWluaSBkYXRhIHNjaWVuY2UgcHJvamVjdCB0byBpbGx1c3RyYXRlIGhvdyBSTWFya2Rvd24gY2FuIGJlIHVzZWQgdG8gY2FwdHVyZSBhbGwgY29tcG9uZW50cyBvZiBhIHByb2plY3QgY2FuIGJlIGNhcHR1cmVkIHdpdGhpbiBhbiBSIE5vdGVib29rLiBUaGUgcmVzZWFyY2ggdG9waWMgd2FzIGluc3BpcmVkIGJ5IHF1b3RlIG9mIFNoZXJsb2NrIEhvbG1lczoKCj4gIlllcywiIGhlIHJlcG9ydGVkLCBhZnRlciBhIHNob3J0IGV4YW1pbmF0aW9uIG9mIHRoZSBncmFzcyBiZWQsICJhIG51bWJlciB0d2VsdmUgc2hvZSwgSSBzaG91bGQgc2F5LiBJZiBoZSB3YXMgYWxsIG9uIHRoZSBzYW1lIHNjYWxlIGFzIGhpcyBmb290IGhlIG11c3QgY2VydGFpbmx5IGhhdmUgYmVlbiBhIGdpYW50LiI8YnI+ICRccXVhZFxxdWFkJCAgICoqU2hlcmxvY2sgSG9sbWVzKiogaW4gKioqVGhlIEFkdmVudHVyZSBvZiBXaXN0ZXJpYSBMb2RnZSoqKiBbQERveWxlMTkwN10KClNpbmNlIHRoZSBlYXJseSBkYXlzIG9mIHRoZSBmb3JlbnNpYyBzY2llbmNlLCAgdGhlcmUgaGF2ZSBiZWVuIG1hbnkgYXR0ZW1wdHMgdG8gdXNlIG1lYXN1cmVtZW50cyBvZiBmb290cHJpbnRzIGFuZCBzdHJpZGUgdG8gZXN0aW1hdGUgdGhlIGhlaWdodCBvZiBzdXNwZWN0cy4gV2hpbGUgdGhlIGNvcnJlbGF0aW9uIGJldHdlZW4gaGVpZ2h0IGFuZCBlaXRoZXIgb2YgdGhlc2UgbWVhc3VyZW1lbnRzIGhhcyBrbm93biwgZXh0ZW5zaXZlIHJlc2VhcmNoIGhhcyBzaG93biB0aGF0IHRoZXNlIGNvcnJlbGF0aW9ucyBhcmUgbW9kaWZpZWQgYnkgdGVycmFpbiwgaGVhbHRoLCBudXRyaXRpb24sIGFuZCBhZ2UuIFtAR2lsZXMxOTkxXQoKCiMjIEtleSByZXNlYWNoIHF1ZXN0aW9uczogeyNyZXNlYXJjaHF1ZXN0aW9uc30KClRoaXMgcGFwZXIgd2lsbCByZXZpc2l0IHRoaXMgdG9waWMgYnkgYW5hbHl6aW5nIHNvbWUgcmVsZXZhbnQgZGF0YSBkb3dubG9hZGVkIGZyb20gdGhlIEludGVybmV0IGluIGFuIGF0dGVtcHQgdG8gYW5zd2VyIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLgoKKiBJcyB0aGVyZSBhIHJlbGlhYmxlIGNvcnJlbGF0aW9uIGJldHdlZW4gZm9vdCBhbmQgc3RyaWRlIG1lYXN1cmVzIG9mIGxlbmd0aCBvZiB0aGUgaGVpZ2h0IG9mIHRoZSBjb3JyZXNwb25kaW5nIGluZGl2aWR1YWw/CgoqIElzIHRoZXJlIGEgZGlmZmVyZW5jZSBpbiB0aGUgcmVsaWFiaWxpdHkgb2YgdGhlc2UgdHdvIG1lYXN1cmVzIGFzIHByZWRpY3RvcnMgb2YgaGVpZ2h0PwoKKiBDYW4gUk1hcmtkb3duIHJlYWxseSBjYXB0dXJlIGFsbCB0aGUgaW5mb3JtYXRpb24gb2YgYSBwcm9qZWN0IGluIHB1Ymxpc2hhYmxlIGZvcm1hdD8KCgojIE1ldGhvZG9sb2d5CgpUaGUga2V5IGRhdGEgY29tZXMgZnJvbSBhbiBtYXRoZW1hdGljIGV4ZXJjaXNlIHBvc3RlZCB0byBoZWxwIGhpZ2ggc2Nob29sIHRlYWNoZXJzIHRvIGRlbW9uc3RyYXRlIHRoZSB1c2Ugb2YgYSBzdGF0aXN0aWMgY2FsY3VsYXRvciBpbiBzb2x2aW5nIGEgY3JpbWUgc2NlbmUgcHJvYmxlbS4gW0BUSTIwMDVdIFRoZSBzYW1wbGUgZGF0YSBmcm9tIHRoaXMgaGFuZCBvdXQgd2VyZSB0eXBlZCBpbnRvIGEgY3N2IGZpbGUgdGhhdCBjb3VsZCBiZSBsb2FkZWQgaW50byBSIGZvciBhbmFseXNpcy4gVGhlIGZvbGxvd2luZyBncmFwaCBzaG93cyB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSB2YXJpb3VzIHBhcmFtZXRlcnMgaW4gdGhpcyBkYXRhc2V0LgoKYGBge3IsbWVzc2FnZT1GQUxTRSxlY2hvPUZBTFNFfQpsaWJyYXJ5KHRpZHlyKQpsaWJyYXJ5KHJlYWRyKQpkYXQgPSByZWFkX2NzdigiZm9vdHN0cmlkZWhlaWdodC5jc3YiKQpwYWlycyhkYXQsY29sPSJibHVlIixwY2g9MTkpCmBgYAoKVGhpcyBncmFwaCBjbGVhcmx5IHN1Z2dlc3RzIGEgc3Ryb25nIGNvcnJlbGF0aW9uIGJldHdlZW4gJFN0cmlkZUxlbmd0aCQgYW5kICRIZWlnaHQkLiBBdCB0aGUgc2FtZSB0aW1lLCB0aGVyZSB3YXMgb25seSBhIHdlYWsgY29ycmVsYXRpb25zIGJldHdlZW4gJFNob2VMZW5ndGgkIGFuZCB0aGUgb3RoZXIgMiBwYXJhbWV0ZXJzLgoKClRoZSBzZWNvbmQgZGF0YXNldCBjYW1lIGZyb20gYW4gT3BlbiBTY2llbmNlIEZvdW5kYXRpb24gc3R1ZHkgb2YgdGhlIGZvb3Qgc2l6ZSBvZiAxMDAgbWVuIGFuZCB3b21lbi4gW0BTYXVlcjIwMTddIEhvd2V2ZXIsIHNvbWUgcHJlcHJvY2Vzc2luZyB3YXMgcmVxdWlyZWQgYXMgdGhlIGhlaWdodCBvZiBzb21lIG9mIHRoZSBkYXRhIHBvaW50cyB3ZXJlIGVuY29kZWQgaW4gbWV0cmVzIGluc3RlYWQgb2YgY20uIFRoZSBzcHVyaW91cyBlbnRyaWVzIG9mIGluZGl2aWR1YWxzIHRhbGxlciB0aGFuIDNtIHdlcmUgcmVtb3ZlZC4KCmBgYHtyLG1lc3NhZ2U9RkFMU0UsZWNobz1GQUxTRX0Kd20wIDwtIHJlYWRfY3N2KCJ3b19tZW4uY3N2IikKcGFyKG1mcm93PWMoMSwyKSkKaGlzdCh3bTAkaGVpZ2h0LGJyZWFrcz0xMixtYWluPSJPcmlnaW5hbCBkYXRhc2V0Iix4bGFiPSJ2YWx1ZXMiLGNvbD0iYmx1ZSIpCndpeCA8LSB3bTAkaGVpZ2h0IDwgMyAKd20xIDwtIHdtMAp3bTFbd2l4LDJdID0gd20xW3dpeCwyXSAqIDEwMAp3aXgyID0gd20xJGhlaWdodCA8IDMwMAp3bTIgPC0gd20xW3dpeDIsXQpoaXN0KHdtMiRoZWlnaHQsIGJyZWFrcz0xMixtYWluPSJNb2RpZmllZCBkYXRhc2V0Iix4bGFiPSJ2YWx1ZXMiLGNvbD0iYmx1ZSIpCmlzd29tYW4gPSAod20yJHNleCA9PSAid29tYW4iKQpwYXIobWZyb3c9YygxLDEpKQpgYGAKCgojIFJlc3VsdHMKClRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgcGFyYW1ldGVycyBjYW4gYmUgbW9kZWxsZWQgbWF0aGVtYXRpY2FsbHkgYXMgYSBsaW5lYXIgZXF1YXRpb24gdGhhdCBjYW4gYmUgZGVyaXZlZCBmcm9tIHRoZSBkYXRhOgoKJCRIZWlnaHQgPSBGYWN0b3IgXHRpbWVzIE1lYXN1cmVtZW50ICsgQ29uc3RhbnQkJAoKClRoZSBmb2xsb3dpbmcgZ3JhcGggcGxvdHMgdGhlIGFjdHVhbCBkYXRhIHBvaW50cyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgcHJlZGljdGVkIHZhbHVlcyBvZiBoZWlnaHQgYmFzZWQgb24gZm9vdHByaW50IGFuZCBzdHJpZGUgbGVuZ3Rocy4gVGhlIGRpZmZlcmVudCBzaGFkaW5nIGxldmVscyBpbGx1c3RyYXRlIHRoZSA4MCBhbmQgOTUlIGNvbmZpZGVuY2UgbGltaXRzIG9mIHRoZSBtb2RlbC4KCmBgYHtyLHdhcm5pbmc9RkFMU0UsZWNobz1GQUxTRX0KbGlicmFyeShmb3JlY2FzdCkKCnBsb3QoZGF0JFN0cmlkZUxlbmd0aCxkYXQkSGVpZ2h0LHBjaD0xOSxjb2w9ImJsdWUiLCB4bGltPWMoMTUsOTApLAogICAgIHhsYWI9Ikxlbmd0aCAoY20pIix5bGFiPSJIZWlnaHQgKGNtKSIsCiAgICAgbWFpbj0iRm9vdCB2cyBTdHJpZGUgTGVuZ3RocyBhcyBQcmVkaWN0b3JzIG9mIEhlaWdodCIpCmxtMSA9IGxtKEhlaWdodCB+IFN0cmlkZUxlbmd0aCwgZGF0YSA9IGRhdCkKZjEgPSBmb3JlY2FzdChsbTEsNTA6MTAwKQp4MSA9IGYxJG5ld2RhdGFbLDFdCnBvbHlnb24oYyh4MSxyZXYoeDEpKSxjKGYxJGxvd2VyWywyXSxyZXYoZjEkdXBwZXJbLDJdKSksY29sPSJMaWdodFNreUJsdWUxIixsdHk9MykKcG9seWdvbihjKHgxLHJldih4MSkpLGMoZjEkbG93ZXJbLDFdLHJldihmMSR1cHBlclssMV0pKSxjb2w9IlNreUJsdWUiLGJvcmRlcj0iU2t5Qmx1ZSIpCmxpbmVzKHgxLGYxJG1lYW4sY29sPSJibHVlIikKcG9pbnRzKGRhdCRTdHJpZGVMZW5ndGgsZGF0JEhlaWdodCxjb2w9ImJsdWUiLHBjaD0xOSkKdGV4dCg2NSwxNzAsIlN0cmlkZSIsY29sPSJibHVlIikKbG0yID0gbG0oSGVpZ2h0IH4gU2hvZUxlbmd0aCwgZGF0YSA9IGRhdCkKZjIgPSBmb3JlY2FzdChsbTIsMTA6NTUpCngyID0gZjIkbmV3ZGF0YVssMV0KcG9seWdvbihjKHgyLHJldih4MikpLGMoZjIkbG93ZXJbLDJdLHJldihmMiR1cHBlclssMl0pKSxjb2w9ImJpc3F1ZSIsbHR5PTMpCnBvbHlnb24oYyh4MixyZXYoeDIpKSxjKGYyJGxvd2VyWywxXSxyZXYoZjIkdXBwZXJbLDFdKSksY29sPSJwaW5rIixib3JkZXI9InBpbmsiKQpsaW5lcyh4MixmMiRtZWFuLGNvbD0icmVkIikKcG9pbnRzKGRhdCRTaG9lTGVuZ3RoLGRhdCRIZWlnaHQscGNoPTE3LGNvbD0icmVkIikKbGluZXMoeDIsZjIkbWVhbixjb2w9InJlZCIpCnRleHQoNDAsMTg1LCJGb290cHJpbnQiLGNvbD0icmVkIikKCgpgYGAKClRoaXMgZ3JhcGggY2xlYXJseSBzaG93cyB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBmb290cHJpbnQgYW5kIHN0cmlkZSBsZW5ndGhzIGFzIHByZWRpY3RvcnMgb2YgaGVpZ2h0LiBUaGUgc3RhdGlzdGljcyBvZiB0aGUgbGluZWFyIG1vZGVsIGFyZSBnaXZlbiBpbiB0aGUgZm9sbG93aW5nIHRhYmxlLgoKfCAgICB8IFBhcmFtZXRlciB8IFNob2UgTGVuZ3RoIHwgU3RyaWRlIExlbmd0aCB8IHwKfC0tLS18LS0tLS0tLS0tLS06fDotLS0tLS0tLS0tLS0tOnw6LS0tLS0tLS0tLS0tLS0tOnwtLS0tfAp8ICAgIHwgRmFjdG9yICAgIHwgIDMuNCAkXHBtJCAxLjEgfCAgIDEuMzMgJFxwbSQgMC4wOSB8ICB8CnwgICAgfCBDb25zdGFudCAgfCA4MS4xICRccG0kIDI5LjggfCAgNjcuNiAkXHBtJCA2LjcgfCAgfAp8ICAgIHwgJFJeMiQgICAgIHwgICAgMC4zNjMgfCAgICAgMC45NDQgICAgfCAgfAp8ICAgIHwgJHBcIHZhbHVlJCB8ICAwLjAxICAgIHwgICAgOS41NSAkXHRpbWVzJCAxMCR7fV57LTEwfSQgfCAgfAp8ICAgIHwgTWVhbiBBdmVyYWdlIEVycm9yIChNQUQpIHwgNTcuM2NtIHwgMTMuNDVjbSB8IHwKfCAgICB8IFJlc2lkdWFsIHN0YW5kYXJkIGVycm9yIHwgMTEuNjMke31feyhERj0xMyl9JCB8IDMuNDM4JHt9X3soREY9MTMpfSQgfCB8CgpUaGVzZSBmaW5kaW5ncyBhcmUgY29sbGFib3JhdGVkIGJ5IHRoZSBzaG9lIHNpemUgZGF0YSBmb3IgYHIgc3VtKHdpeDIpYCBpbmRpdmlkdWFscyAoYHIgc3VtKGlzd29tYW4pYCB3b21lbiwgYHIgc3VtKCFpc3dvbWFuKWAgbWVuKSBnaXZlbiBpbiB0aGUgc2Vjb25kIGRhdGFzZXQuCgpgYGB7cixtZXNzYWdlPUZBTFNFLGVjaG89RkFMU0Usd2FybmluZz1GQUxTRX0KY29sb3JzID0gYygiIzAwMDBGRjk5IiwiI0ZGMDAwMDk5IikKd20ydyA9IHdtMltpc3dvbWFuLF0Kd20ybSA9IHdtMlsoIWlzd29tYW4pLF0KbG13ID0gbG0oaGVpZ2h0IH4gc2hvZV9zaXplLCBkYXRhPXdtMncpCmxtbSA9IGxtKGhlaWdodCB+IHNob2Vfc2l6ZSwgZGF0YT13bTJtKQpsbWIgPSBsbShoZWlnaHQgfiBzaG9lX3NpemUsIGRhdGE9d20yKQphcmVhID0gMzA6NTUKZncgPSBmb3JlY2FzdChsbXcsbmV3ZGF0YT1hcmVhKQpmbSA9IGZvcmVjYXN0KGxtbSxuZXdkYXRhPWFyZWEpCmZiID0gZm9yZWNhc3QobG1iLG5ld2RhdGE9YXJlYSkKcGxvdCgwLDAseGxpbT1jKDM1LDQ2KSx5bGltPWMoMTUwLDE5NSksCiAgICAgbWFpbj0iU2hvZSBzaXplIGFzIGEgcHJlZGljdG9yIG9mIGhlaWdodCIsCiAgICAgeGxhYj0iU2hvZSBzaXplIiwgeWxhYj0iSGVpZ2h0IChjbSkiKQpwb2x5Z29uKGMoYXJlYSxyZXYoYXJlYSkpLGMoZmIkbG93ZXJbLDJdLHJldihmYiR1cHBlclssMl0pKSxjb2w9IiNGRkRERkY2NiIsbHR5PTMsCiAgICAgICAgYm9yZGVyPSIjRkZEREZGIikKcG9seWdvbihjKGFyZWEscmV2KGFyZWEpKSxjKGZ3JGxvd2VyWywxXSxyZXYoZnckdXBwZXJbLDFdKSksY29sPSIjRkZDQ0ZGNjYiLAogICAgICAgIGJvcmRlcj0iI0ZGQ0NGRiIpCmxpbmVzKGFyZWEsZmIkbWVhbixjb2w9IiNGRjk5RkY5OSIpCnBvaW50cyh3bTIkc2hvZV9zaXplLGppdHRlcih3bTIkaGVpZ2h0LDUpLCAKICAgICBjb2w9Y29sb3JzWygxICsgaXN3b21hbildLHBjaD0oMTYgKyBpc3dvbWFuKSkKbGVnZW5kKDQyLDE2NSxjKCJNZW4iLCJXb21lbiIpLGZpbGw9Y29sb3JzKQpgYGAKClRoaXMgZ3JhcGggY2xlYXJseSBzaG93cyB0aGF0IGFtb25nIHRoZSB1bmRlcmdyYWR1YXRlIHN0dWRlbnRzIG1lYXN1cmVkLCB3b21lbiB3ZXJlIHNob3J0ZXIgYW5kIGhhZCBzbWFsbGVyIGZlZXQgdGhhbiB0aGVpciBtYWxlIGNsYXNzbWF0ZXMuIEhvd2V2ZXIsIGFzIHNob3duIGluIHRoZSBmb2xsb3dpbmcgdGFibGUsIHRoZXJlIHdhcyBubyBzaWduaWZpY2FudCBnZW5kZXIgZGlmZmVyZW5jZXMgaW4gdGhlIHNsb3BlIG9yIGludGVyc2VjdGlvbiBvZiB0aGUgcmVzdWx0aW5nIGxpbmVhciBtb2RlbHMuIE5vbmV0aGVsZXNzIHRoZSBjb3JyZWxhdGlvbiBjb2VmZmljZW50IGZvciB0aGVzZSBtYWxlIHN0dWRlbnRzIHdlcmUgbmVhcmx5IHR3aWNlIHRoYXQgb2YgZmVtYWxlIHN0dWRlbnRzLiBNb3JlIHN0dWRpZXMgYXJlIHJlcXVpcmVkIHRvIGRldGVybWluZSBpZiB0aGlzIGRpZmZlcmVuY2UgY2FuIGJlIHNlZW4gaW4gb3RoZXIgcG9wdWxhdGlvbnMuICAKCnwgICAgfCBQYXJhbWV0ZXIgfCBNYWxlIFN0dWRlbnRzIHwgRmVtYWxlIFN0dWRlbnRzIHwgfAp8LS0tLXwtLS0tLS0tLS0tLTp8Oi0tLS0tLS0tLS0tLS06fDotLS0tLS0tLS0tLS0tLS06fC0tLS18CnwgICAgfCBNZWFuIFNob2Ugc2l6ZSB8IDQzLjkgJFxwbSQgMi40IHwgMzguMyAkXHBtJCAxLjMgfCB8ICAKfCAgICB8IEZhY3RvciAgICB8ICAzLjY3ICRccG0kIDAuNDggfCAgIDMuMDIgJFxwbSQgMC40MSB8ICB8CnwgICAgfCBDb25zdGFudCAgfCAyMS45ICRccG0kIDIxLjMgfCAgNTEuNyAkXHBtJCAxNS41IHwgIHwKfCAgICB8ICRSXjIkICAgICB8ICAgIDAuNzY5MyB8ICAgICAwLjQwNSAgICB8ICB8CnwgICAgfCAkcFwgdmFsdWUkIHwgIDEuMDggJFx0aW1lcyQgMTAke31eLTYkIHwgIDEuMDMgJFx0aW1lcyQgMTAke31eey0xMH0kIHwgIHwKfCAgICB8IE1lYW4gQXZlcmFnZSBFcnJvciAoTUFEKSB8IDU4LjNjbSB8IDMxLjFjbSB8IHwKfCAgICB8IFJlc2lkdWFsIHN0YW5kYXJkIGVycm9yIHwgNC43ODMke31feyhERj0xNil9JCB8IDQuODU2JHt9X3soREY9NzkpfSQgfCB8CgoKIyBDb25jbHVzaW9uCgpJbiBzdW1tYXJ5LCB0aGlzIHBhcGVyIGhhcyBhdHRlbXB0ZWQgdG8gYWRkcmVzcyB0aGUgMyBrZXkgcmVzZWFyY2ggcXVlc3Rpb25zIHBvc2VkIGluIHRoZSBbSW50cm9kdWN0aW9uXSgjcmVzZWFyY2hxdWVzdGlvbnMpLCBuYW1lbHk6CgoxLiAqKkNvcnJlbGF0aW9uIGJldHdlZW4gaGVpZ2h0IGFuZCBmb290IGFuZCBzdHJpZGUgbWVhc3VyZW1lbnRzOioqIEdpdmVuIHRoZSBhdmFpbGFibGUgZGF0YSBvZiBmb290IGFuZCBzdHJpZGUgbWVhc3VyZW1lbnRzIGV4aGliaXRlZCAkUl4yJCB2YWx1ZXMgb2YgMC4zNjMgYW5kIDAuOTQ0LCByZXNwZWN0aXZlbHkuIFRoaXMgd291bGQgc3VnZ2VzdCB0aGF0IHRoZSBmb290cHJpbnQgbGVuZ3RoIGlzIGEgcG9vciBwcmVkaWN0b3Igb2YgaGVpZ2h0IHdoaWxlIHN0cmlkZSBsZW5ndGggdGVuZHMgdG8gYmUgYSBmYWlybHkgcmVsaWFibGUgcHJlZGljdG9yLiBUaGUgc2hvZSBzaXplIGRhdGFzZXQgYWxzbyBjb25maXJtZWQgdGhpcyBmaW5kaW5nLgoKMi4gKipDb21wYXJpc2lvbiBvZiBmb290IGFuZCBzdHJpZGUgbGVuZ3RocyBhcyBwcmVkaWN0b3JzIG9mIGhlaWdodDoqKiBHaXZlbiB0aGF0IGFuIGF2ZXJhZ2UgZm9vdCBtZWFzdXJlbWVudCBpcyBleHBlY3RlZCB0byBoYXZlIGFuIGF2ZXJhZ2UgbWVhbiBlcnJvciBvZiA1MGNtLCBmb290IHByaW50IHNpemUgYXJlIHBvb3IgcHJlZGljdG9ycyBvZiBoZWlnaHQuIE9uIHRoZSBvdGhlciBoYW5kLCBhdmVyYWdlIHN0cmlkZSBsZW5ndGhzIGV4aGliaXRlZCBhbiBhdmVyYWdlIG1lYW4gZXJyb3Igb2YgMTMuNWNtLgoKMy4gKipVc2luZyBSTWFya2Rvd24gdG8gY2FwdHVyZSBhbGwgaW5mb3JtYXRpb24gb2YgYSBwcm9qZWN0IGluIHB1Ymxpc2hhYmxlIGZvcm1hdDoqKiBUaGlzIGRvY3VtZW50IGlzIHZpdmlkIHByb29mIHRoYXQgUk1hcmtkb3duIGNhbiBtYW5hZ2Ugbm90IG9ubHkgdGhlIHRleHQgb2YgdGhlIGJhY2tncm91bmQgYW5kIGZpbmRpbmdzIGJ1dCBhbHNvIGFsbCBkYXRhIGFuZCBzdGF0aXN0aWNhbCBwcm9jZXNzZXMgYXMgd2VsbC4gU29tZSBjb2RlIGJsb2NrcyByZXF1aXJlZCBzcGVjaWFsIHBhcmFtZXRlcnMgdG8gcmVtb3ZlIHVud2FudGVkIG1lc3NhZ2VzIGFuZCB3YXJuaW5ncy4gVGhlIGF1dGhvcnMgd2VyZSBhYmxlIHRvIHJ1biBhbGwgdGhlIGFuYWx5c2lzIHdpdGhpbiBjb2RlIGJsb2NrcyB3aGlsZSBjb250cm9sbGluZyB0aGUgZGlzcGxheSBvZiBjb2RlIHRocm91Z2ggdGhlIGVjaG8gYW5kIGV2YWx1YXRpb24gcGFyYW1ldGVycyBvZiBjb2RlIGJsb2Nrcy4gSW5saW5lIGNvZGUgYmxvY2tzIGNhbiBwcm92aWRlIGluc2VydGlvbiBvZiBrZXkgaW5mb3JtYXRpb24gd2l0aG91dCB0aGUgbmVlZCBmb3IgY3V0IGFuZCBwYXN0ZS4gQ2l0YXRpb25zIGFuZCBsaW5rcyB0byBzb3VyY2VzIHdlcmUgaGFuZGxlZCB1c2luZyBiaWJ0ZXggdGV4dGJhc2Ugd2hpY2ggZXh0cmFjdGVkLCBhcnJhbmdlZCBhbmQgaW5zZXJ0ZWQgcmVsZXZhbnQgcmVmZXJlbmNlcyBhdXRvbWF0aWNhbGx5LiAKVGhlIHJlc3VsdGluZyBkb2N1bWVudCBpcyBzaW1pbGFyIGluIGZvcm1hdCB0byB0ZWNobmljYWwgbm90ZXMgc2VlbiBpbiBBQ00gYW5kIElFRUUgam91cm5hbHMgYnV0IHdpdGggZnVsbCB0cmFuc3BhcmVuY3kgdG8gdGhlIHJlYWRlciBvZiB0aGUgc291cmNlcyBhbmQgbWV0aG9kcyB1c2VkIGluIHRoZSByZXNlYXJjaC4KCkFsdGhvdWdodCB0aGlzIHN0dWR5IHdhcyBjb25kdWN0ZWQgdXNpbmcgMiBzZXBhcmF0ZSBkYXRhc2V0cywgdGhlIHNhbXBsaW5nIHNpemVzIHdlcmUgcmVsYXRpdmVseSBzbWFsbCAoaS5lLiAyMCBhbmQgOTkpIGFuZCBkaWQgbm90IGFkZHJlc3Mgb3RoZXIga25vd24gZmFjdG9ycyB0aGF0IGVmZmVjdCBzaG9lIHNpemUgYW5kIHN0cmlkZSBsZW5ndGhzLiBbQEdpbGVzMTk5MV0gSXQgd291bGQgYmUgaW50ZXJlc3RpbmcgdG8gZXhwbG9yZSB0aGUgaW1wYWN0IHRoZXNlIGFuZCBvdGhlciBmYWN0b3JzIG9uIHRoZSBhYmlsaXR5IHRvIHByZWRpY3QgdGhlIGhlaWdodCBvZiBpbmRpdmlkdWFscywgZXNwZWNpYWxseSBnaXZlbiB0aGUgZWNvbm9taWNzIGFuZCBsaWZlc3R5bGUgY2hhbmdlcyB0aGF0IGFyZSBoYXBwZW5pbmcgd29ybGR3aWRlLgoKIyBCaWJsaW9ncmFwaHkK