On the fourth day of the “Practical Statistics for the Life Sciences” course, we will have 9 tutorials on multiple linear regression, based on different datasets:

1 The poison dataset

In this experiment, 96 fish (dojofish, goldfish and zebrafish) were placed separately in a tank with two liters of water and a certain dose (in mg) of the poison EI-43,064. The resistance of the fish against the poison was measured as the amount of minutes the fish survived after being exposed to the poison (Surv_time, in minutes). Additionally, the weight of each fish was measured.

In this tutorial session we will focus on Dojofish, and we will model the survival time in function of the poison dose while correcting for the weight of the fish.

  1. We will first analyse the survival data by only considering the dose as an explanatory variable for survival time

  2. Next we will model the survival data with and additive model for dose and weight


2 The poison dataset (2)

Again, we will work with the poison dataset. In contrast to the exercise above, we here we will model the survival time in function of the dose and the weight of the fish, and including an interaction between dose and weight.

  • Exercise: Exercise2

  • Data path:

    https://raw.githubusercontent.com/statOmics/PSLSData/main/poison.csv

  • Solution2: Solution2


3 The puromycin dataset

Data on the velocity of an enzymatic reaction were obtained by Treloar (1974). The number of counts per minute of radioactive product from the reaction was measured as a function of substrate concentration in parts per million (ppm) and from these counts the initial rate (or velocity) of the reaction was calculated (counts/min/min). The experiment was conducted once with the enzyme treated with Puromycin, and once with the enzyme untreated.

Assess if there is an association between the substrate concentration and rate for both the treated and untreated enzymes. To do this, fit a model that includes a main effect for concentration, a main effect for enzyme state, and an interaction term between these two variables.


4 The KPNA2 dataset

Histologic grade in breast cancer provides clinically important prognostic information. Researchers examined whether histologic grade was associated with gene expression profiles of breast cancers and whether such profiles could be used to improve histologic grading.

In this tutorial we will assess the association between histologic grade and the expression of the KPNA2 gene that is known to be associated with poor breast cancer prognosis. The patients, however, do not only differ in the histologic grade, but also on their lymph node status. The lymph nodes were not affected (0) or surgically removed (1).

  • Exercise: Exercise4

  • Data path:

    https://raw.githubusercontent.com/statOmics/SGA21/master/data/kpna2.txt

  • Solution: Solution4


5 Blocking: the rats dataset (1)

Researchers are studying the impact of protein sources and protein levels in the diet on the weight of rats. They feed the rats with diets of beef, cereal and pork and use a low and high protein level for each diet type. The researchers can include 60 rats in the experiment. Prior to the experiment, the rats were divided in 10 homogeneous groups of 6 rats based on characteristics such as initial weight, appetite, etc.

Within each group a rat is randomly assigned to a diet. The rats are fed during a month and the weight gain in grams is recorded for each rat.

The researchers want to assess the effect of the type of diet and the protein level on the weight of the rats.

In this exercise we will perform the data exploration using all diets, but, to keep the data analysis simple we will only assess the beef and cereal diets.

  • Exercise: Exercise5

  • Data path:

    https://raw.githubusercontent.com/statOmics/PSLSData/main/dietRats.txt


6 Blocking: the rats dataset (2)

Again, we make use of the rats dataset defined above. In contrast to the previous exercise, we perform the analysis for all three diets in the dataset.

  • Exercise: Exercise6

  • Data path:

    https://raw.githubusercontent.com/statOmics/PSLSData/main/dietRats.txt


7 Power analysis: the rodents dataset

A biologist examined the effect of a fungal infection on the eating behavior of rodents. Infected apples were offered to a group of eight rodents, and sterile apples were offered to a group of 4 rodents. The amount of grams of apples consumed per kg body weight are given in the dataset.

We will answer four research questions:

  • What is the power of the experiment if the effect size and standard deviation in the population would be equal to the ones you observed in the experiment?

  • What would the power by if number of rodents would balanced in both groups?

  • How many observations would you need to pick up the treatment effect with a power of 90%?

  • Suppose that we would like to pick up an effect size of \(\beta_1 = 60 g/kg\). How many samples would be required in each group to obtain a power of 90%?

  • Exercise: Exercise7

  • Data path: Not required


8 Power analysis: the Puromycin dataset

Data on the velocity of an enzymatic reaction were obtained by Treloar (1974). The number of counts per minute of radioactive product from the reaction was measured as a function of substrate concentration in parts per million (ppm) and from these counts the initial rate (or velocity) of the reaction was c alculated (counts/min/min). The experiment was conducted once with the enzyme treated with Puromycin, and once with the enzyme untreated.

We will answer four research questions:

  • Use the data to calculate the power to pick up an association that is as least as strong as the association you observed in the dataset when using an experiment with the same design.

  • Use the data to calculate the power to pick up an association where the reaction rate increases on average with 10 counts/min when the substrate concentration is 10 times higher (\(\beta_1=10\)).

  • Use the data to calculate the number of repeats you need for each concentration to pick up an association where the reaction rate increases on average with 10 counts/min when the substrate concentration is 10 times higher with a power of at least 90%. (\(\beta_1=10\))

  • Suppose that you would setup an experiment with a design similar with the same concentrations as in the puromycin dataset and you have the following restriction: you need to use each concentration at least once and can setup at most 12 reactions, how would you choose your design points? Calculate the power for this design when the effect size is 10 counts/min per 10 times increase in the substrate concentration (\(\beta_1=10\)).

  • Exercise: Exercise8

  • Data path: Not required


9 Power analysis: the KPNA2 dataset

Histologic grade in breast cancer provides clinically important prognostic information. Researchers examined whether histologic grade was associated with gene expression profiles of breast cancers and whether such profiles could be used to improve histologic grading.

In this tutorial we will assess the association between histologic grade and the expression of the KPNA2 gene that is known to be associated with poor breast cancer prognosis. The patients, however, do not only differ in the histologic grade, but also on their lymph node status. The lymph nodes were not affected (0) or surgically removed (1).

We will answer three research questions:

  • What is the power to pick up each of the contrasts when their real effect sizes would be equal to the effect sizes we observed in the study?

  • How does the power evolves if we have 2 upto 10 repeats for each factor combination of grade and node when their real effect sizes would be equal to the ones we observed in the study?

  • What is the power to pick up each of the contrasts when the FC for grade for patients with unaffected lymph nodes equals 1.5 (\(\beta_g = log2(1.5)\))?

  • Data path:

    https://raw.githubusercontent.com/statOmics/SGA21/master/data/kpna2.txt

LS0tCnRpdGxlOiAiRXhlcmNpc2VzIG9uIGNoYXB0ZXIgODogTXVsdGlwbGUgbGluZWFyIHJlZ3Jlc3Npb24iCmF1dGhvcjogIkxpZXZlbiBDbGVtZW50LCBKZXJvZW4gR2lsaXMgYW5kIE1pbGFuIE1hbGZhaXQiCmRhdGU6ICJzdGF0T21pY3MsIEdoZW50IFVuaXZlcnNpdHkgKGh0dHBzOi8vc3RhdG9taWNzLmdpdGh1Yi5pbykiCi0tLQoKT24gdGhlIGZvdXJ0aCBkYXkgb2YgdGhlICJQcmFjdGljYWwgU3RhdGlzdGljcyBmb3IgdGhlIExpZmUgU2NpZW5jZXMiCmNvdXJzZSwgd2Ugd2lsbCBoYXZlIDkgdHV0b3JpYWxzIG9uIG11bHRpcGxlIGxpbmVhciByZWdyZXNzaW9uLCBiYXNlZCBvbgpkaWZmZXJlbnQgZGF0YXNldHM6CgotIFtUaGUgcG9pc29uIGRhdGFzZXRdCi0gW1RoZSBwb2lzb24gZGF0YXNldCAoMildCi0gW1RoZSBwdXJvbXljaW4gZGF0YXNldF0KLSBbVGhlIEtQTkEyIGRhdGFzZXRdCi0gW0Jsb2NraW5nOiB0aGUgcmF0cyBkYXRhc2V0ICgxKV0KLSBbQmxvY2tpbmc6IHRoZSByYXRzIGRhdGFzZXQgKDIpXQotIFtQb3dlciBhbmFseXNpczogdGhlIHJvZGVudHMgZGF0YXNldF0KLSBbUG93ZXIgYW5hbHlzaXM6IHRoZSBQdXJvbXljaW4gZGF0YXNldF0KLSBbUG93ZXIgYW5hbHlzaXM6IHRoZSBLUE5BMiBkYXRhc2V0XQoKCiMgVGhlIHBvaXNvbiBkYXRhc2V0CgpJbiB0aGlzIGV4cGVyaW1lbnQsIDk2IGZpc2ggKGRvam9maXNoLCBnb2xkZmlzaCBhbmQgemVicmFmaXNoKQp3ZXJlIHBsYWNlZCBzZXBhcmF0ZWx5IGluIGEgdGFuayB3aXRoIHR3byBsaXRlcnMgb2Ygd2F0ZXIgYW5kCmEgY2VydGFpbiBkb3NlIChpbiBtZykgb2YgdGhlIHBvaXNvbiBFSS00MywwNjQuIFRoZSByZXNpc3RhbmNlCm9mIHRoZSBmaXNoIGFnYWluc3QgdGhlIHBvaXNvbiB3YXMgbWVhc3VyZWQgYXMgdGhlIGFtb3VudCBvZgptaW51dGVzIHRoZSBmaXNoIHN1cnZpdmVkIGFmdGVyIGJlaW5nIGV4cG9zZWQgdG8gdGhlIHBvaXNvbiAoYFN1cnZfdGltZWAsIGluCm1pbnV0ZXMpLiBBZGRpdGlvbmFsbHksIHRoZSB3ZWlnaHQgb2YgZWFjaCBmaXNoIHdhcyBtZWFzdXJlZC4KCkluIHRoaXMgdHV0b3JpYWwgc2Vzc2lvbiB3ZSB3aWxsIGZvY3VzIG9uIERvam9maXNoLCBhbmQgd2Ugd2lsbCBtb2RlbCB0aGUKc3Vydml2YWwgdGltZSBpbiBmdW5jdGlvbiBvZiB0aGUgcG9pc29uIGRvc2Ugd2hpbGUgY29ycmVjdGluZyBmb3IgdGhlIHdlaWdodCBvZgp0aGUgZmlzaC4KCjEuIFdlIHdpbGwgZmlyc3QgYW5hbHlzZSB0aGUgc3Vydml2YWwgZGF0YSBieSBvbmx5IGNvbnNpZGVyaW5nIHRoZSBkb3NlIGFzIGFuCmV4cGxhbmF0b3J5IHZhcmlhYmxlIGZvciBzdXJ2aXZhbCB0aW1lCgoyLiBOZXh0IHdlIHdpbGwgbW9kZWwgdGhlIHN1cnZpdmFsIGRhdGEgd2l0aCBhbmQgKiphZGRpdGl2ZSBtb2RlbCoqIGZvciBkb3NlIGFuZAp3ZWlnaHQKCi0gRXhlcmNpc2U6IFtFeGVyY2lzZTFdKC4vMDhfMV9wb2lzb24xLmh0bWwpCi0gRGF0YSBwYXRoOiAiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3N0YXRPbWljcy9QU0xTRGF0YS9tYWluL3BvaXNvbi5jc3YiCi0gU29sdXRpb24xOiBbU29sdXRpb24xXSguLzA4XzFfcG9pc29uMV9zb2wuaHRtbCkKCi0tLQoKIyBUaGUgcG9pc29uIGRhdGFzZXQgKDIpCgpBZ2Fpbiwgd2Ugd2lsbCB3b3JrIHdpdGggdGhlIHBvaXNvbiBkYXRhc2V0LiBJbiBjb250cmFzdCB0byB0aGUgZXhlcmNpc2UKYWJvdmUsIHdlIGhlcmUgd2Ugd2lsbCBtb2RlbCB0aGUgc3Vydml2YWwgdGltZSBpbiBmdW5jdGlvbiBvZiB0aGUgZG9zZSBhbmQgdGhlCndlaWdodCBvZiB0aGUgZmlzaCwgKiphbmQgaW5jbHVkaW5nIGFuIGludGVyYWN0aW9uIGJldHdlZW4gZG9zZSBhbmQgd2VpZ2h0LioqCgotIEV4ZXJjaXNlOiBbRXhlcmNpc2UyXSguLzA4XzJfcG9pc29uMi5odG1sKQotIERhdGEgcGF0aDoKCiAgYGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9zdGF0T21pY3MvUFNMU0RhdGEvbWFpbi9wb2lzb24uY3N2YAoKLSBTb2x1dGlvbjI6IFtTb2x1dGlvbjJdKC4vMDhfMl9wb2lzb24yX3NvbC5odG1sKQoKLS0tCgojIFRoZSBwdXJvbXljaW4gZGF0YXNldAoKRGF0YSBvbiB0aGUgdmVsb2NpdHkgb2YgYW4gZW56eW1hdGljIHJlYWN0aW9uIHdlcmUgb2J0YWluZWQgYnkgVHJlbG9hciAoMTk3NCkuClRoZSBudW1iZXIgb2YgY291bnRzIHBlciBtaW51dGUgb2YgcmFkaW9hY3RpdmUgcHJvZHVjdCBmcm9tIHRoZSByZWFjdGlvbiB3YXMKbWVhc3VyZWQgYXMgYSBmdW5jdGlvbiBvZiBzdWJzdHJhdGUgY29uY2VudHJhdGlvbiBpbiBwYXJ0cyBwZXIgbWlsbGlvbiAocHBtKSBhbmQKZnJvbSB0aGVzZSBjb3VudHMgdGhlIGluaXRpYWwgcmF0ZSAob3IgdmVsb2NpdHkpIG9mIHRoZSByZWFjdGlvbiB3YXMgY2FsY3VsYXRlZCAoY291bnRzL21pbi9taW4pLiBUaGUgZXhwZXJpbWVudCB3YXMgY29uZHVjdGVkIG9uY2Ugd2l0aCB0aGUgZW56eW1lIHRyZWF0ZWQKd2l0aCBQdXJvbXljaW4sIGFuZCBvbmNlIHdpdGggdGhlIGVuenltZSB1bnRyZWF0ZWQuCgpBc3Nlc3MgaWYgdGhlcmUgaXMgYW4gYXNzb2NpYXRpb24gYmV0d2VlbiB0aGUgc3Vic3RyYXRlIGNvbmNlbnRyYXRpb24gYW5kIHJhdGUKKipmb3IgYm90aCB0aGUgdHJlYXRlZCBhbmQgdW50cmVhdGVkIGVuenltZXMuKiogVG8gZG8gdGhpcywgZml0IGEgbW9kZWwgdGhhdAppbmNsdWRlcyBhIG1haW4gZWZmZWN0IGZvciBjb25jZW50cmF0aW9uLCBhIG1haW4gZWZmZWN0IGZvciBlbnp5bWUgc3RhdGUsIGFuZAphbiBpbnRlcmFjdGlvbiB0ZXJtIGJldHdlZW4gdGhlc2UgdHdvIHZhcmlhYmxlcy4KCi0gRXhlcmNpc2U6IFtFeGVyY2lzZTNdKC4vMDhfM19wdXJvbXljaW4uaHRtbCkKLSBEYXRhIHBhdGg6IE5vdCByZXF1aXJlZAotIFNvbHV0aW9uOiBbU29sdXRpb24zXSguLzA4XzNfcHVyb215Y2luX3NvbC5odG1sKQoKLSBbV3JhcHVwIHN1bW1hcnldKC4vMDgtd3JhcHVwLXB1cm9teWNpbi5odG1sKQoKLS0tCgojIFRoZSBLUE5BMiBkYXRhc2V0CgpIaXN0b2xvZ2ljIGdyYWRlIGluIGJyZWFzdCBjYW5jZXIgcHJvdmlkZXMgY2xpbmljYWxseSBpbXBvcnRhbnQgcHJvZ25vc3RpYwppbmZvcm1hdGlvbi4gUmVzZWFyY2hlcnMgZXhhbWluZWQgd2hldGhlciBoaXN0b2xvZ2ljIGdyYWRlIHdhcyBhc3NvY2lhdGVkIHdpdGgKZ2VuZSBleHByZXNzaW9uIHByb2ZpbGVzIG9mIGJyZWFzdCBjYW5jZXJzIGFuZCB3aGV0aGVyIHN1Y2ggcHJvZmlsZXMgY291bGQgYmUKdXNlZCB0byBpbXByb3ZlIGhpc3RvbG9naWMgZ3JhZGluZy4KCkluIHRoaXMgdHV0b3JpYWwgd2Ugd2lsbCBhc3Nlc3MgdGhlIGFzc29jaWF0aW9uIGJldHdlZW4gaGlzdG9sb2dpYyBncmFkZSBhbmQKdGhlIGV4cHJlc3Npb24gb2YgdGhlIEtQTkEyIGdlbmUgdGhhdCBpcyBrbm93biB0byBiZSBhc3NvY2lhdGVkIHdpdGggcG9vciBicmVhc3QKY2FuY2VyIHByb2dub3Npcy4gVGhlIHBhdGllbnRzLCBob3dldmVyLCBkbyBub3Qgb25seSBkaWZmZXIgaW4gdGhlIGhpc3RvbG9naWMKZ3JhZGUsIGJ1dCBhbHNvIG9uIHRoZWlyIGx5bXBoIG5vZGUgc3RhdHVzLiBUaGUgbHltcGggbm9kZXMgd2VyZQpub3QgYWZmZWN0ZWQgKDApIG9yIHN1cmdpY2FsbHkgcmVtb3ZlZCAoMSkuCgotIEV4ZXJjaXNlOiBbRXhlcmNpc2U0XSguLzA4XzRfa3BuYTIuaHRtbCkKLSBEYXRhIHBhdGg6CgogIGBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vc3RhdE9taWNzL1NHQTIxL21hc3Rlci9kYXRhL2twbmEyLnR4dGAKCi0gU29sdXRpb246IFtTb2x1dGlvbjRdKC4vMDhfNF9rcG5hMl9zb2wuaHRtbCkKCi0tLQoKIyBCbG9ja2luZzogdGhlIHJhdHMgZGF0YXNldCAoMSkKClJlc2VhcmNoZXJzIGFyZSBzdHVkeWluZyB0aGUgaW1wYWN0IG9mIHByb3RlaW4gc291cmNlcyBhbmQgcHJvdGVpbiBsZXZlbHMgaW4KdGhlIGRpZXQgb24gdGhlIHdlaWdodCBvZiByYXRzLiBUaGV5IGZlZWQgdGhlIHJhdHMgd2l0aCBkaWV0cyBvZiBiZWVmLCBjZXJlYWwKYW5kIHBvcmsgYW5kIHVzZSBhIGxvdyBhbmQgaGlnaCBwcm90ZWluIGxldmVsIGZvciBlYWNoIGRpZXQgdHlwZS4KVGhlIHJlc2VhcmNoZXJzIGNhbiBpbmNsdWRlIDYwIHJhdHMgaW4gdGhlIGV4cGVyaW1lbnQuIFByaW9yIHRvIHRoZSBleHBlcmltZW50LAp0aGUgcmF0cyB3ZXJlIGRpdmlkZWQgaW4gMTAgaG9tb2dlbmVvdXMgZ3JvdXBzIG9mIDYgcmF0cyBiYXNlZCBvbgpjaGFyYWN0ZXJpc3RpY3Mgc3VjaCBhcyBpbml0aWFsIHdlaWdodCwgYXBwZXRpdGUsIGV0Yy4KCldpdGhpbiBlYWNoIGdyb3VwIGEgcmF0IGlzIHJhbmRvbWx5IGFzc2lnbmVkIHRvIGEgZGlldC4gVGhlIHJhdHMgYXJlIGZlZCBkdXJpbmcKYSBtb250aCBhbmQgdGhlIHdlaWdodCBnYWluIGluIGdyYW1zIGlzIHJlY29yZGVkIGZvciBlYWNoIHJhdC4KClRoZSByZXNlYXJjaGVycyB3YW50IHRvIGFzc2VzcyB0aGUgZWZmZWN0IG9mIHRoZSB0eXBlIG9mIGRpZXQgYW5kIHRoZSBwcm90ZWluCmxldmVsIG9uIHRoZSB3ZWlnaHQgb2YgdGhlIHJhdHMuCgpJbiB0aGlzIGV4ZXJjaXNlIHdlIHdpbGwgcGVyZm9ybSB0aGUgZGF0YSBleHBsb3JhdGlvbiB1c2luZyBhbGwgZGlldHMsIGJ1dCwKdG8ga2VlcCB0aGUgZGF0YSBhbmFseXNpcyBzaW1wbGUgd2Ugd2lsbCBvbmx5IGFzc2VzcyB0aGUgYmVlZiBhbmQgY2VyZWFsIGRpZXRzLgoKLSBFeGVyY2lzZTogW0V4ZXJjaXNlNV0oLi8wOF81X3JhdHMuaHRtbCkKLSBEYXRhIHBhdGg6CgogIGBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vc3RhdE9taWNzL1BTTFNEYXRhL21haW4vZGlldFJhdHMudHh0YAoKPCEtLSAtIEV4ZXJjaXNlOiBbU29sdXRpb241XSguLzA4XzVfcmF0c19zb2wuaHRtbCkgLS0+CgotLS0KCiMgQmxvY2tpbmc6IHRoZSByYXRzIGRhdGFzZXQgKDIpCgpBZ2Fpbiwgd2UgbWFrZSB1c2Ugb2YgdGhlICpyYXRzKiBkYXRhc2V0IGRlZmluZWQgYWJvdmUuIEluIGNvbnRyYXN0IHRvIHRoZQpwcmV2aW91cyBleGVyY2lzZSwgd2UgcGVyZm9ybSB0aGUgYW5hbHlzaXMgZm9yIGFsbCB0aHJlZSBkaWV0cyBpbiB0aGUgZGF0YXNldC4KCi0gRXhlcmNpc2U6IFtFeGVyY2lzZTZdKC4vMDhfNl9yYXRzLmh0bWwpCi0gRGF0YSBwYXRoOgoKICBgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3N0YXRPbWljcy9QU0xTRGF0YS9tYWluL2RpZXRSYXRzLnR4dGAKCjwhLS0gLSBFeGVyY2lzZTogW1NvbHV0aW9uNl0oLi8wOF82X3JhdHNfc29sLmh0bWwpIC0tPgoKCi0tLQoKIyBQb3dlciBhbmFseXNpczogdGhlIHJvZGVudHMgZGF0YXNldAoKQSBiaW9sb2dpc3QgZXhhbWluZWQgdGhlIGVmZmVjdCBvZiBhIGZ1bmdhbCBpbmZlY3Rpb24gb24gdGhlIGVhdGluZyBiZWhhdmlvcgpvZiByb2RlbnRzLiBJbmZlY3RlZCBhcHBsZXMgd2VyZSBvZmZlcmVkIHRvIGEgZ3JvdXAgb2YgZWlnaHQgcm9kZW50cywKYW5kIHN0ZXJpbGUgYXBwbGVzIHdlcmUgb2ZmZXJlZCB0byBhIGdyb3VwIG9mIDQgcm9kZW50cy4gVGhlIGFtb3VudCBvZiBncmFtcwpvZiBhcHBsZXMgY29uc3VtZWQgcGVyIGtnIGJvZHkgd2VpZ2h0IGFyZSBnaXZlbiBpbiB0aGUgZGF0YXNldC4KCldlIHdpbGwgYW5zd2VyIGZvdXIgcmVzZWFyY2ggcXVlc3Rpb25zOgoKLSBXaGF0IGlzIHRoZSBwb3dlciBvZiB0aGUgZXhwZXJpbWVudCBpZiB0aGUgZWZmZWN0IHNpemUgYW5kIHN0YW5kYXJkIGRldmlhdGlvbgppbiB0aGUgcG9wdWxhdGlvbiB3b3VsZCBiZSBlcXVhbCB0byB0aGUgb25lcyB5b3Ugb2JzZXJ2ZWQgaW4gdGhlIGV4cGVyaW1lbnQ/CgotIFdoYXQgd291bGQgdGhlIHBvd2VyIGJ5IGlmIG51bWJlciBvZiByb2RlbnRzIHdvdWxkICBiYWxhbmNlZCBpbiBib3RoIGdyb3Vwcz8KCi0gSG93IG1hbnkgb2JzZXJ2YXRpb25zIHdvdWxkIHlvdSBuZWVkIHRvIHBpY2sgdXAgdGhlIHRyZWF0bWVudCBlZmZlY3Qgd2l0aAphIHBvd2VyIG9mIDkwJT8KCi0gU3VwcG9zZSB0aGF0IHdlIHdvdWxkIGxpa2UgdG8gcGljayB1cCBhbiBlZmZlY3Qgc2l6ZSBvZiAkXGJldGFfMSA9IDYwIGcva2ckLgpIb3cgbWFueSBzYW1wbGVzIHdvdWxkIGJlIHJlcXVpcmVkIGluIGVhY2ggZ3JvdXAgdG8gb2J0YWluIGEgcG93ZXIgb2YgOTAlPwoKLSBFeGVyY2lzZTogW0V4ZXJjaXNlN10oLi8wOF9FeHBlcmltZW50YWxEZXNpZ25JSV8xX3JvZGVudHMuaHRtbCkKLSBEYXRhIHBhdGg6IE5vdCByZXF1aXJlZAo8IS0tIC0gU29sdXRpb246IFtTb2x1dGlvbjddKC4vMDhfRXhwZXJpbWVudGFsRGVzaWduSUlfMV9yb2RlbnRzX3NvbC5odG1sKSAtLT4KCi0tLQoKIyBQb3dlciBhbmFseXNpczogdGhlIFB1cm9teWNpbiBkYXRhc2V0CgpEYXRhIG9uIHRoZSB2ZWxvY2l0eSBvZiBhbiBlbnp5bWF0aWMgcmVhY3Rpb24gd2VyZSBvYnRhaW5lZCBieSBUcmVsb2FyICgxOTc0KS4KVGhlIG51bWJlciBvZiBjb3VudHMgcGVyIG1pbnV0ZSBvZiByYWRpb2FjdGl2ZSBwcm9kdWN0IGZyb20gdGhlIHJlYWN0aW9uIHdhcwptZWFzdXJlZCBhcyBhIGZ1bmN0aW9uIG9mIHN1YnN0cmF0ZSBjb25jZW50cmF0aW9uIGluIHBhcnRzIHBlciBtaWxsaW9uIChwcG0pCmFuZCBmcm9tIHRoZXNlIGNvdW50cyB0aGUgaW5pdGlhbCByYXRlIChvciB2ZWxvY2l0eSkgb2YgdGhlIHJlYWN0aW9uIHdhcyBjCmFsY3VsYXRlZCAoY291bnRzL21pbi9taW4pLiBUaGUgZXhwZXJpbWVudCB3YXMgY29uZHVjdGVkIG9uY2Ugd2l0aAp0aGUgZW56eW1lIHRyZWF0ZWQgd2l0aCBQdXJvbXljaW4sIGFuZCBvbmNlIHdpdGggdGhlIGVuenltZSB1bnRyZWF0ZWQuCgpXZSB3aWxsIGFuc3dlciBmb3VyIHJlc2VhcmNoIHF1ZXN0aW9uczoKCi0gVXNlIHRoZSBkYXRhIHRvIGNhbGN1bGF0ZSB0aGUgcG93ZXIgdG8gcGljayB1cCBhbiBhc3NvY2lhdGlvbiB0aGF0IGlzIGFzCmxlYXN0IGFzIHN0cm9uZyBhcyB0aGUgYXNzb2NpYXRpb24geW91IG9ic2VydmVkIGluIHRoZSBkYXRhc2V0IHdoZW4gdXNpbmcKYW4gZXhwZXJpbWVudCB3aXRoIHRoZSBzYW1lIGRlc2lnbi4KCi0gVXNlIHRoZSBkYXRhIHRvIGNhbGN1bGF0ZSB0aGUgcG93ZXIgdG8gcGljayB1cCBhbiBhc3NvY2lhdGlvbiB3aGVyZQp0aGUgcmVhY3Rpb24gcmF0ZSBpbmNyZWFzZXMgb24gYXZlcmFnZSB3aXRoIDEwIGNvdW50cy9taW4gd2hlbiB0aGUgc3Vic3RyYXRlCmNvbmNlbnRyYXRpb24gaXMgMTAgdGltZXMgaGlnaGVyICgkXGJldGFfMT0xMCQpLgoKLSBVc2UgdGhlIGRhdGEgdG8gY2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgcmVwZWF0cyB5b3UgbmVlZCBmb3IgZWFjaApjb25jZW50cmF0aW9uIHRvIHBpY2sgdXAgYW4gYXNzb2NpYXRpb24gd2hlcmUgdGhlIHJlYWN0aW9uIHJhdGUgaW5jcmVhc2VzCm9uIGF2ZXJhZ2Ugd2l0aCAxMCBjb3VudHMvbWluIHdoZW4gdGhlIHN1YnN0cmF0ZSBjb25jZW50cmF0aW9uIGlzIDEwIHRpbWVzCmhpZ2hlciB3aXRoIGEgcG93ZXIgb2YgYXQgbGVhc3QgOTAlLiAoJFxiZXRhXzE9MTAkKQoKLSBTdXBwb3NlIHRoYXQgeW91IHdvdWxkIHNldHVwIGFuIGV4cGVyaW1lbnQgd2l0aCBhIGRlc2lnbiBzaW1pbGFyIHdpdGggdGhlCnNhbWUgY29uY2VudHJhdGlvbnMgYXMgaW4gdGhlIHB1cm9teWNpbiBkYXRhc2V0IGFuZCB5b3UgaGF2ZSB0aGUgZm9sbG93aW5nCnJlc3RyaWN0aW9uOiB5b3UgbmVlZCB0byB1c2UgZWFjaCBjb25jZW50cmF0aW9uIGF0IGxlYXN0IG9uY2UgYW5kIGNhbiBzZXR1cAphdCBtb3N0IDEyIHJlYWN0aW9ucywgaG93IHdvdWxkIHlvdSBjaG9vc2UgeW91ciBkZXNpZ24gcG9pbnRzPyBDYWxjdWxhdGUKdGhlIHBvd2VyIGZvciB0aGlzIGRlc2lnbiB3aGVuIHRoZSBlZmZlY3Qgc2l6ZSBpcyAxMCBjb3VudHMvbWluIHBlciAxMCB0aW1lcwppbmNyZWFzZSBpbiB0aGUgc3Vic3RyYXRlIGNvbmNlbnRyYXRpb24gKCRcYmV0YV8xPTEwJCkuCgotIEV4ZXJjaXNlOiBbRXhlcmNpc2U4XSguLzA4X0V4cGVyaW1lbnRhbERlc2lnbklJXzJfcHVyb215Y2luLmh0bWwpCi0gRGF0YSBwYXRoOiBOb3QgcmVxdWlyZWQKPCEtLSAtIFNvbHV0aW9uOiBbU29sdXRpb244XSguLzA4X0V4cGVyaW1lbnRhbERlc2lnbklJXzJfcHVyb215Y2luX3NvbC5odG1sKSAtLT4KCi0tLQoKCiMgUG93ZXIgYW5hbHlzaXM6IHRoZSBLUE5BMiBkYXRhc2V0CgpIaXN0b2xvZ2ljIGdyYWRlIGluIGJyZWFzdCBjYW5jZXIgcHJvdmlkZXMgY2xpbmljYWxseSBpbXBvcnRhbnQgcHJvZ25vc3RpYwppbmZvcm1hdGlvbi4gUmVzZWFyY2hlcnMgZXhhbWluZWQgd2hldGhlciBoaXN0b2xvZ2ljIGdyYWRlIHdhcyBhc3NvY2lhdGVkIHdpdGgKZ2VuZSBleHByZXNzaW9uIHByb2ZpbGVzIG9mIGJyZWFzdCBjYW5jZXJzIGFuZCB3aGV0aGVyIHN1Y2ggcHJvZmlsZXMgY291bGQgYmUKdXNlZCB0byBpbXByb3ZlIGhpc3RvbG9naWMgZ3JhZGluZy4KCkluIHRoaXMgdHV0b3JpYWwgd2Ugd2lsbCBhc3Nlc3MgdGhlIGFzc29jaWF0aW9uIGJldHdlZW4gaGlzdG9sb2dpYyBncmFkZSBhbmQKdGhlIGV4cHJlc3Npb24gb2YgdGhlIEtQTkEyIGdlbmUgdGhhdCBpcyBrbm93biB0byBiZSBhc3NvY2lhdGVkIHdpdGggcG9vciBicmVhc3QKY2FuY2VyIHByb2dub3Npcy4gVGhlIHBhdGllbnRzLCBob3dldmVyLCBkbyBub3Qgb25seSBkaWZmZXIgaW4gdGhlIGhpc3RvbG9naWMKZ3JhZGUsIGJ1dCBhbHNvIG9uIHRoZWlyIGx5bXBoIG5vZGUgc3RhdHVzLiBUaGUgbHltcGggbm9kZXMgd2VyZQpub3QgYWZmZWN0ZWQgKDApIG9yIHN1cmdpY2FsbHkgcmVtb3ZlZCAoMSkuCgpXZSB3aWxsIGFuc3dlciB0aHJlZSByZXNlYXJjaCBxdWVzdGlvbnM6CgotIFdoYXQgaXMgdGhlIHBvd2VyIHRvIHBpY2sgdXAgZWFjaCBvZiB0aGUgY29udHJhc3RzIHdoZW4gdGhlaXIgcmVhbCBlZmZlY3QKc2l6ZXMgd291bGQgYmUgZXF1YWwgdG8gdGhlIGVmZmVjdCBzaXplcyB3ZSBvYnNlcnZlZCBpbiB0aGUgc3R1ZHk/CgotIEhvdyBkb2VzIHRoZSBwb3dlciBldm9sdmVzIGlmIHdlIGhhdmUgMiB1cHRvIDEwIHJlcGVhdHMgZm9yIGVhY2ggZmFjdG9yCmNvbWJpbmF0aW9uIG9mIGdyYWRlIGFuZCBub2RlIHdoZW4gdGhlaXIgcmVhbCBlZmZlY3Qgc2l6ZXMgd291bGQgYmUgZXF1YWwgdG8KdGhlIG9uZXMgd2Ugb2JzZXJ2ZWQgaW4gdGhlIHN0dWR5PwoKLSBXaGF0IGlzIHRoZSBwb3dlciB0byBwaWNrIHVwIGVhY2ggb2YgdGhlIGNvbnRyYXN0cyB3aGVuIHRoZSBGQyBmb3IgZ3JhZGUgZm9yIHBhdGllbnRzIHdpdGggdW5hZmZlY3RlZCBseW1waCBub2RlcyBlcXVhbHMgMS41ICgkXGJldGFfZyA9IGxvZzIoMS41KSQpPwoKLSBEYXRhIHBhdGg6CgogIGBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vc3RhdE9taWNzL1NHQTIxL21hc3Rlci9kYXRhL2twbmEyLnR4dGAKCjwhLS0gLSBTb2x1dGlvbjogW1NvbHV0aW9uOV0oLi8wOF9FeHBlcmltZW50YWxEZXNpZ25JSV8zX2twbmEyX3NvbC5SbWQuaHRtbCkgLS0+Cg==