Phyloseq dataset
Probiotics Intervention Data (peerj32)
From microbiome pachage
Description The peerj32 data set contains high-through profiling data from 389 human blood serum lipids and 130 intestinal genus-level bacteria from 44 samples (22 subjects from 2 time points; before and after probiotic/placebo intervention). The data set can be used to investigate associations between intestinal bacteria and host lipid metabolism. For details, see http://dx.doi.org/10.7717/peerj.32.
phyloseq-class experiment-level object
otu_table() OTU Table: [ 130 taxa and 44 samples ]
sample_data() Sample Data: [ 44 samples by 5 sample variables ]
tax_table() Taxonomy Table: [ 130 taxa by 3 taxonomic ranks ]
Number of taxonomic groups: 130
Number of samples: 44
Number of metadata fields: 5:
Metadata variables are: time, sex, subject, sample, group
Hierarchical Clustering
For more info, see!
Hierarchical Clustering
It is the clustering of the relative abundances of the samples; called compositional; by Ward’s method when consider joining two clusters, how does it change the total distance (TD) from the centroid. The distance between samples is specified by Bray Curtis distance
Ward’s method
Where we start by pretending to merge the two clusters a bit similar to complete link clustering, but instead of looking for the diameter of the result, we look for the aggregate deviation. We look to the sum of squared deviation of all the points from the new formed centroid, and for different merging pairs. We will end up with different deviations, then we choose the smallest one and clustering according to it Ward’s Hierarchical Clustering Method
By groups

- The number of Placebo is: 28
- The number of LGG is: 16
By sex

- The number of female is: 30
- The number of male is: 14
By time points 1 & 2

NULL
Redundancy analysis (RDA)
For better understanding of the multivariate models, see!
For Hypertensive.Disorder
Standard redundancy analysis
It is the Bray distance between compositional-transformed taxa abundances

Based on Aitchison distance
It is the Euclidean distance between CLR-transformed species abundances see.

For Race
Standard redundancy analysis
It is the Bray distance between compositional-transformed taxa abundances

Based on Aitchison distance
It is the Euclidean distance between CLR-transformed species abundances see.

For SES_household_income
Standard redundancy analysis
It is the Bray distance between compositional-transformed taxa abundances

Based on Aitchison distance
It is the Euclidean distance between CLR-transformed species abundances see.

For SES_maternal_education
Standard redundancy analysis
It is the Bray distance between compositional-transformed taxa abundances

Based on Aitchison distance
It is the Euclidean distance between CLR-transformed species abundances see.

LS0tDQp0aXRsZTogIk11bHRpdmFyaWF0ZSBhbmFseXNpcyINCmF1dGhvcjogIldpc2FtIg0KZGF0ZTogImByIFN5cy5EYXRlKClgIg0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZGVwdGg6IDQNCiAgICB0b2NfZmxvYXQ6IHRydWUNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQotLS0NCg0KDQpgYGB7ciBwaHlsb3NlcSwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgZXJyb3I9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KGtuaXRyKQ0KbGlicmFyeShwaHlsb3NlcSkNCmxpYnJhcnkodmVnYW4pDQojbGlicmFyeShtaXhPbWljcykNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkodmVnYW4pDQpsaWJyYXJ5KHRpY3RvYykNCmxpYnJhcnkodGlkeXIpDQpsaWJyYXJ5KHBlcm11dGUpDQpsaWJyYXJ5KGxhdHRpY2UpDQpvcHRpb25zKG1heC5wcmludD0iNzUiKQ0KICBrbml0cjo6b3B0c19jaHVuayRzZXQoZmlnLndpZHRoPTgsDQogICAgICAgICAgICAgICAgICAgICAgICBmaWcuaGVpZ2h0PTYsDQogICAgICAgICAgICAgICAgICAgICAgICBldmFsPVRSVUUsDQogICAgICAgICAgICAgICAgICAgICAgICBjYWNoZT1UUlVFLA0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobz1UUlVFLA0KICAgICAgICAgICAgICAgICAgICAgICAgcHJvbXB0PUZBTFNFLA0KICAgICAgICAgICAgICAgICAgICAgICAgdGlkeT1UUlVFLA0KICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudD1OQSwNCiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9RkFMU0UsDQogICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nPUZBTFNFKQ0Kb3B0c19rbml0JHNldCh3aWR0aD03NSkNCmBgYA0KDQojIFBoeWxvc2VxIGRhdGFzZXQNCiMjIFByb2Jpb3RpY3MgSW50ZXJ2ZW50aW9uIERhdGEgKHBlZXJqMzIpIA0KDQoqKkZyb20gbWljcm9iaW9tZSBwYWNoYWdlKioNCg0KRGVzY3JpcHRpb24NClRoZSBwZWVyajMyIGRhdGEgc2V0IGNvbnRhaW5zIGhpZ2gtdGhyb3VnaCBwcm9maWxpbmcgZGF0YSBmcm9tIDM4OSBodW1hbiBibG9vZCBzZXJ1bSBsaXBpZHMgYW5kIDEzMCBpbnRlc3RpbmFsIGdlbnVzLWxldmVsIGJhY3RlcmlhIGZyb20gNDQgc2FtcGxlcyAoMjIgc3ViamVjdHMgZnJvbSAyIHRpbWUgcG9pbnRzOyBiZWZvcmUgYW5kIGFmdGVyIHByb2Jpb3RpYy9wbGFjZWJvIGludGVydmVudGlvbikuIFRoZSBkYXRhIHNldCBjYW4gYmUgdXNlZCB0byBpbnZlc3RpZ2F0ZSBhc3NvY2lhdGlvbnMgYmV0d2VlbiBpbnRlc3RpbmFsIGJhY3RlcmlhIGFuZCBob3N0IGxpcGlkIG1ldGFib2xpc20uIEZvciBkZXRhaWxzLCBzZWUgaHR0cDovL2R4LmRvaS5vcmcvMTAuNzcxNy9wZWVyai4zMi4NCg0KYGBge3IgZGF0YXNldCwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgZXJyb3I9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KG1pY3JvYmlvbWUpDQpkYXRhKCJwZWVyajMyIikNCnBoeTwtIHBlZXJqMzIkcGh5bG9zZXENCnBoeQ0KDQpgYGANCiAqIE51bWJlciBvZiB0YXhvbm9taWMgZ3JvdXBzOiBgciBudGF4YShwaHkpYA0KICogTnVtYmVyIG9mIHNhbXBsZXM6IGByIG5zYW1wbGVzKHBoeSlgDQogKiBOdW1iZXIgb2YgbWV0YWRhdGEgZmllbGRzOiBgciBuY29sKGdldF92YXJpYWJsZShwaHkpKWA6ICANCg0KICogTWV0YWRhdGEgdmFyaWFibGVzIGFyZTogYHIgc2FtcGxlX3ZhcmlhYmxlcyhwaHkpYA0KDQoNCg0KDQojIEhpZXJhcmNoaWNhbCBDbHVzdGVyaW5nDQpGb3IgbW9yZSBpbmZvLCBbc2VlIV0oaHR0cHM6Ly93d3cuc2NpZW5jZWRpcmVjdC5jb20vdG9waWNzL2NvbXB1dGVyLXNjaWVuY2UvaGllcmFyY2hpY2FsLWNsdXN0ZXItYW5hbHlzaXMpDQoNCiMjIyAqSGllcmFyY2hpY2FsIENsdXN0ZXJpbmcqDQoNCkl0IGlzIHRoZSBjbHVzdGVyaW5nIG9mIHRoZSByZWxhdGl2ZSBhYnVuZGFuY2VzIG9mIHRoZSBzYW1wbGVzOyBjYWxsZWQgY29tcG9zaXRpb25hbDsgYnkgV2FyZOKAmXMgbWV0aG9kIHdoZW4gY29uc2lkZXIgam9pbmluZyB0d28gY2x1c3RlcnMsIGhvdyBkb2VzIGl0IGNoYW5nZSB0aGUgdG90YWwgZGlzdGFuY2UgKFREKSBmcm9tIHRoZSBjZW50cm9pZC4gVGhlIGRpc3RhbmNlIGJldHdlZW4gc2FtcGxlcyBpcyBzcGVjaWZpZWQgYnkgQnJheSBDdXJ0aXMgZGlzdGFuY2UNCg0KIyMjICpXYXJk4oCZcyBtZXRob2QqDQoNCldoZXJlIHdlIHN0YXJ0IGJ5IHByZXRlbmRpbmcgdG8gbWVyZ2UgdGhlIHR3byBjbHVzdGVycyBhIGJpdCBzaW1pbGFyIHRvIGNvbXBsZXRlIGxpbmsgY2x1c3RlcmluZywgYnV0IGluc3RlYWQgb2YgbG9va2luZyBmb3IgdGhlIGRpYW1ldGVyIG9mIHRoZSByZXN1bHQsIHdlIGxvb2sgZm9yIHRoZSBhZ2dyZWdhdGUgZGV2aWF0aW9uLiBXZSBsb29rIHRvIHRoZSBzdW0gb2Ygc3F1YXJlZCBkZXZpYXRpb24gb2YgYWxsIHRoZSBwb2ludHMgZnJvbSB0aGUgbmV3IGZvcm1lZCBjZW50cm9pZCwgYW5kIGZvciBkaWZmZXJlbnQgbWVyZ2luZyBwYWlycy4gV2Ugd2lsbCBlbmQgdXAgd2l0aCBkaWZmZXJlbnQgZGV2aWF0aW9ucywgdGhlbiB3ZSBjaG9vc2UgdGhlIHNtYWxsZXN0IG9uZSBhbmQgY2x1c3RlcmluZyBhY2NvcmRpbmcgdG8gaXQNCltXYXJkJ3MgSGllcmFyY2hpY2FsIENsdXN0ZXJpbmcgTWV0aG9kXShodHRwczovL2FyeGl2Lm9yZy9hYnMvMTExMS42Mjg1KQ0KDQo8ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOjMwcHg7Ij4NCjwvZGl2Pg0KDQojIyMgQnkgZ3JvdXBzDQoNCmBgYHtyIGdyb3VwcywgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgZXJyb3I9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQp0aGVtZV9zZXQodGhlbWVfYncoMTApKQ0KcGhfY29tcCA8LSB0cmFuc2Zvcm1fc2FtcGxlX2NvdW50cyhwaHksIGZ1bmN0aW9uKE9UVSkgT1RVL3N1bShPVFUpKQ0KDQpkaXMgPC0gdmVnZGlzdCh0KG90dV90YWJsZShwaF9jb21wKUAuRGF0YSksICdicmF5JykNCmhjIDwtIGhjbHVzdChkaXMsIG1ldGhvZCA9ICJ3YXJkLkQyIikNCnBsb3QoaGMsIGhhbmc9MC41LCB4bGFiID0gImdyb3VwIiwgeSA9ICJEaXNzaW1pbGFyaXR5IiwgbGFiZWxzID0gZ2V0X3ZhcmlhYmxlKHBoeSkkZ3JvdXAsIG1haW4gPSBwYXN0ZSgiY29tcG9zaXRpb25hbCIsICJicmF5IiwgIndhcmQuRDIiLCBzZXAgPSAiLyIpKQ0KDQpgYGANCg0KKiBUaGUgbnVtYmVyIG9mIFBsYWNlYm8gaXM6IGByIGRpbShzdWJzZXQoZ2V0X3ZhcmlhYmxlKHBoeSksIGdyb3VwID09ICdQbGFjZWJvJykpWzFdYA0KKiBUaGUgbnVtYmVyIG9mIExHRyBpczogYHIgZGltKHN1YnNldChnZXRfdmFyaWFibGUocGh5KSwgZ3JvdXAgPT0gJ0xHRycpKVsxXWANCg0KDQo8ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOjMwcHg7Ij4NCjwvZGl2Pg0KDQojIyMgQnkgc2V4DQoNCmBgYHtyIHNleCwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgZXJyb3I9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQp0aGVtZV9zZXQodGhlbWVfYncoMTApKQ0KcGxvdChoYywgaGFuZz0wLjUsIHhsYWIgPSAic2V4IiwgeSA9ICJEaXNzaW1pbGFyaXR5IiwgbGFiZWxzID0gZ2V0X3ZhcmlhYmxlKHBoeSkkc2V4LCBtYWluID0gcGFzdGUoImNvbXBvc2l0aW9uYWwiLCAiYnJheSIsICJ3YXJkLkQyIiwgc2VwID0gIi8iKSkjIysgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDMpKQ0KYGBgDQoNCiogVGhlIG51bWJlciBvZiBmZW1hbGUgaXM6IGByIGRpbShzdWJzZXQoZ2V0X3ZhcmlhYmxlKHBoeSksIHNleCA9PSAnZmVtYWxlJykpWzFdYA0KKiBUaGUgbnVtYmVyIG9mIG1hbGUgaXM6IGByIGRpbShzdWJzZXQoZ2V0X3ZhcmlhYmxlKHBoeSksIHNleCA9PSAnbWFsZScpKVsxXWANCg0KDQo8ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOjMwcHg7Ij4NCjwvZGl2Pg0KDQoNCiMjIyBCeSB0aW1lIHBvaW50cyAxICYgMg0KDQpgYGB7ciB0aW1lLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBlcnJvcj1GQUxTRSwgd2FybmluZz1GQUxTRX0NCnRoZW1lX3NldCh0aGVtZV9idygxMCkpDQpwbG90KGhjLCBoYW5nPTAuNSwgeGxhYiA9ICJ0aW1lIiwgeSA9ICJEaXNzaW1pbGFyaXR5IiwgbGFiZWxzID0gZ2V0X3ZhcmlhYmxlKHBoeSkkdGltZSwgbWFpbiA9IHBhc3RlKCJjb21wb3NpdGlvbmFsIiwgImJyYXkiLCAid2FyZC5EMiIsIHNlcCA9ICIvIikpICsgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDMpKQ0KYGBgDQoNCg0KDQoqIE51bWJlciBvZiBzYW1wbGVzIGF0IHRoZSBmaXJzdCB0aW1lIHBvaW50IGlzOiBgciBkaW0oc3Vic2V0KGdldF92YXJpYWJsZShwaHkpLCB0aW1lID09ICcxJykpWzFdYA0KDQoqIE51bWJlciBvZiBzYW1wbGVzIGF0IHRoZSBzZWNvbmQgdGltZSBwb2ludCBpczogYHIgZGltKHN1YnNldChnZXRfdmFyaWFibGUocGh5KSwgdGltZSA9PSAnMicpKVsxXWANCg0KDQo8ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOjMwcHg7Ij4NCjwvZGl2Pg0KDQoNCg0KIyBSZWR1bmRhbmN5IGFuYWx5c2lzIChSREEpDQpGb3IgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG11bHRpdmFyaWF0ZSBtb2RlbHMsIFtzZWUhXShodHRwOi8vZG1jZ2xpbm4uZ2l0aHViLmlvL3F1YW50X21ldGhvZHMvbGVzc29ucy9tdWx0aXZhcmlhdGVfbW9kZWxzLmh0bWwpDQoNCiogKipQaHlsb3NlcSBkYXRhc2V0KioNCkZvciBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGlzIHNlY3Rpb24sIEkgaGF2ZSB1c2VkIGFub3RoZXIgcGh5bG9zZXEgZGF0YXNldCBmcm9tIHRoaXMgcGFwZXIgW1RlbXBvcmFsIGFuZCBzcGF0aWFsIHZhcmlhdGlvbiBvZiB0aGUgaHVtYW4gbWljcm9iaW90YSBkdXJpbmcgcHJlZ25hbmN5XShodHRwczovL3d3dy5wbmFzLm9yZy9jb250ZW50LzExMi8zNS8xMTA2MCkNCg0KIyMjIyBEYXRhc2V0IGZyb20gc3Rvb2wNCg0KDQpgYGB7ciBkYXRhX3ZhZ2luYSwgZWNobz1ULCBtZXNzYWdlPUZBTFNFLCBlcnJvcj1GQUxTRX0NCg0KZGE8LSBsb2FkKCdSREEvUHJlZ25hbmN5Q2xvc2VkMTUuUmRhdGEnKQ0Kc2l0ZSA8LSAiU3Rvb2wiDQpwaHkgPC0gUFNQcmVnW1tzaXRlXV0NCnBoeQ0KDQpgYGANCg0KICogTnVtYmVyIG9mIHRheG9ub21pYyBncm91cHM6IGByIG50YXhhKHBoeSlgDQogKiBOdW1iZXIgb2Ygc2FtcGxlczogYHIgbnNhbXBsZXMocGh5KWANCiAqIE51bWJlciBvZiBtZXRhZGF0YSBmaWVsZHM6IGByIG5jb2woZ2V0X3ZhcmlhYmxlKHBoeSkpYDogIA0KICogTWV0YWRhdGEgdmFyaWFibGVzIGFyZTogYHIgc2FtcGxlX3ZhcmlhYmxlcyhwaHkpYA0KDQo8ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOjMwcHg7Ij4NCjwvZGl2Pg0KDQojIyMgRm9yIEh5cGVydGVuc2l2ZS5EaXNvcmRlcg0KIyMjIyBTdGFuZGFyZCByZWR1bmRhbmN5IGFuYWx5c2lzDQpJdCBpcyB0aGUgQnJheSBkaXN0YW5jZSBiZXR3ZWVuIGNvbXBvc2l0aW9uYWwtdHJhbnNmb3JtZWQgdGF4YSBhYnVuZGFuY2VzDQoNCmBgYHtyIHNfcmVkdW5kYW5jeSwgZWNobz1GLCBtZXNzYWdlPUZBTFNFLCBlcnJvcj1GQUxTRX0NCnRoZW1lX3NldCh0aGVtZV9idygxMCkpDQpwaHlfY29tcCA8LSB0cmFuc2Zvcm1fc2FtcGxlX2NvdW50cyhwaHksIGZ1bmN0aW9uKE9UVSkgT1RVL3N1bShPVFUpKQ0Kb3JkX3MgPC0gb3JkaW5hdGUocGh5X2NvbXAsIGZvcm11bGEgPSB+IEh5cGVydGVuc2l2ZS5EaXNvcmRlcg0KLCAnUkRBJywgImJyYXkiKQ0KcDEgPC0gcGxvdF9vcmRpbmF0aW9uKHBoeV9jb21wLCBvcmRfcywgY29sb3I9Ikh5cGVydGVuc2l2ZS5EaXNvcmRlciIpICsNCiAgICAgICBzdGF0X2VsbGlwc2UodHlwZSA9ICJub3JtIiwgbGluZXR5cGUgPSAxKSArDQogICAgICAgbGFicyh0aXRsZSA9ICJyZWR1bmRhbmN5IGFuYWx5c2lzIChQQ0EgdmlhIHJkYSkiKQ0KcHJpbnQocDEpDQpgYGANCg0KPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbTozMHB4OyI+DQo8L2Rpdj4NCg0KIyMjIyBCYXNlZCBvbiBBaXRjaGlzb24gZGlzdGFuY2UNCg0KSXQgaXMgdGhlIEV1Y2xpZGVhbiBkaXN0YW5jZSBiZXR3ZWVuIENMUi10cmFuc2Zvcm1lZCBzcGVjaWVzIGFidW5kYW5jZXMgW3NlZV0oaHR0cHM6Ly93d3cuanN0b3Iub3JnL3N0YWJsZS8yMzQ1ODIxP3NlcT0xI21ldGFkYXRhX2luZm9fdGFiX2NvbnRlbnRzKS4NCg0KYGBge3IgYV9yZWR1bmRhbmN5LCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBlcnJvcj1GQUxTRSwgd2FybmluZz1GQUxTRX0NCnRoZW1lX3NldCh0aGVtZV9idygxMCkpDQpwaHlfY2xyIDwtIG1pY3JvYmlvbWU6OnRyYW5zZm9ybShwaHksICdjbHInKQ0Kb3JkIDwtIG9yZGluYXRlKHBoeV9jbHIsIGZvcm11bGEgPSB+IEh5cGVydGVuc2l2ZS5EaXNvcmRlciwgJ1JEQScsICJldWNsaWRlYW4iKQ0KcDEgPC0gcGxvdF9vcmRpbmF0aW9uKHBoeV9jbHIsIG9yZCwgY29sb3I9Ikh5cGVydGVuc2l2ZS5EaXNvcmRlciIpICsNCiAgICAgICBzdGF0X2VsbGlwc2UodHlwZSA9ICJub3JtIiwgbGluZXR5cGUgPSAxKSArDQogICAgICAgbGFicyh0aXRsZSA9ICJyZWR1bmRhbmN5IGFuYWx5c2lzIChQQ0EgdmlhIHJkYSkiKQ0KcHJpbnQocDEpDQpgYGANCg0KPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbTozMHB4OyI+DQo8L2Rpdj4NCg0KIyMjIEZvciBSYWNlDQojIyMjIFN0YW5kYXJkIHJlZHVuZGFuY3kgYW5hbHlzaXMNCkl0IGlzIHRoZSBCcmF5IGRpc3RhbmNlIGJldHdlZW4gY29tcG9zaXRpb25hbC10cmFuc2Zvcm1lZCB0YXhhIGFidW5kYW5jZXMNCg0KYGBge3Igc19yZWR1bmRhbmN5X2dyLCBlY2hvPUYsIG1lc3NhZ2U9RkFMU0UsIGVycm9yPUZBTFNFfQ0KdGhlbWVfc2V0KHRoZW1lX2J3KDEwKSkNCnBoeV9jb21wIDwtIHRyYW5zZm9ybV9zYW1wbGVfY291bnRzKHBoeSwgZnVuY3Rpb24oT1RVKSBPVFUvc3VtKE9UVSkpDQpvcmRfcyA8LSBvcmRpbmF0ZShwaHlfY29tcCwgZm9ybXVsYSA9IH5SYWNlLCAnUkRBJywgImJyYXkiKQ0KcDEgPC0gcGxvdF9vcmRpbmF0aW9uKHBoeV9jb21wLCBvcmRfcywgY29sb3I9IlJhY2UiKSArDQogICAgICAgc3RhdF9lbGxpcHNlKHR5cGUgPSAibm9ybSIsIGxpbmV0eXBlID0gMSkgKw0KICAgICAgIGxhYnModGl0bGUgPSAicmVkdW5kYW5jeSBhbmFseXNpcyAoUENBIHZpYSByZGEpIikNCnByaW50KHAxKQ0KYGBgDQoNCjxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206MzBweDsiPg0KPC9kaXY+DQoNCiMjIyMgQmFzZWQgb24gQWl0Y2hpc29uIGRpc3RhbmNlDQoNCkl0IGlzIHRoZSBFdWNsaWRlYW4gZGlzdGFuY2UgYmV0d2VlbiBDTFItdHJhbnNmb3JtZWQgc3BlY2llcyBhYnVuZGFuY2VzIFtzZWVdKGh0dHBzOi8vd3d3LmpzdG9yLm9yZy9zdGFibGUvMjM0NTgyMT9zZXE9MSNtZXRhZGF0YV9pbmZvX3RhYl9jb250ZW50cykuDQoNCmBgYHtyIGFfcmVkdW5kYW5jeV9nciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgZXJyb3I9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQp0aGVtZV9zZXQodGhlbWVfYncoMTApKQ0KcGh5X2NsciA8LSBtaWNyb2Jpb21lOjp0cmFuc2Zvcm0ocGh5LCAnY2xyJykNCm9yZCA8LSBvcmRpbmF0ZShwaHlfY2xyLCBmb3JtdWxhID0gfiBSYWNlLCAnUkRBJywgImV1Y2xpZGVhbiIpDQpwMSA8LSBwbG90X29yZGluYXRpb24ocGh5X2Nsciwgb3JkLCBjb2xvcj0iUmFjZSIpICsNCiAgICAgICBzdGF0X2VsbGlwc2UodHlwZSA9ICJub3JtIiwgbGluZXR5cGUgPSAxKSArDQogICAgICAgbGFicyh0aXRsZSA9ICJyZWR1bmRhbmN5IGFuYWx5c2lzIChQQ0EgdmlhIHJkYSkiKQ0KcHJpbnQocDEpDQpgYGANCg0KPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbTozMHB4OyI+DQo8L2Rpdj4NCg0KIyMjIEZvciBTRVNfaG91c2Vob2xkX2luY29tZQ0KDQojIyMjIFN0YW5kYXJkIHJlZHVuZGFuY3kgYW5hbHlzaXMNCg0KSXQgaXMgdGhlIEJyYXkgZGlzdGFuY2UgYmV0d2VlbiBjb21wb3NpdGlvbmFsLXRyYW5zZm9ybWVkIHRheGEgYWJ1bmRhbmNlcw0KDQpgYGB7ciBzX3JlZHVuZGFuY3lfdGksIGVjaG89RiwgbWVzc2FnZT1GQUxTRSwgZXJyb3I9RkFMU0V9DQp0aGVtZV9zZXQodGhlbWVfYncoMTApKQ0KcGh5X2NvbXAgPC0gdHJhbnNmb3JtX3NhbXBsZV9jb3VudHMocGh5LCBmdW5jdGlvbihPVFUpIE9UVS9zdW0oT1RVKSkNCm9yZF9zIDwtIG9yZGluYXRlKHBoeV9jb21wLCBmb3JtdWxhID0gflNFU19ob3VzZWhvbGRfaW5jb21lLCAnUkRBJywgImJyYXkiKQ0KcDEgPC0gcGxvdF9vcmRpbmF0aW9uKHBoeV9jb21wLCBvcmRfcywgY29sb3I9IlNFU19ob3VzZWhvbGRfaW5jb21lIikgKw0KICAgICAgIHN0YXRfZWxsaXBzZSh0eXBlID0gIm5vcm0iLCBsaW5ldHlwZSA9IDEpICsNCiAgICAgICBsYWJzKHRpdGxlID0gInJlZHVuZGFuY3kgYW5hbHlzaXMgKFBDQSB2aWEgcmRhKSIpDQpwcmludChwMSkNCmBgYA0KDQo8ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOjMwcHg7Ij4NCjwvZGl2Pg0KDQojIyMgQmFzZWQgb24gQWl0Y2hpc29uIGRpc3RhbmNlDQoNCkl0IGlzIHRoZSBFdWNsaWRlYW4gZGlzdGFuY2UgYmV0d2VlbiBDTFItdHJhbnNmb3JtZWQgc3BlY2llcyBhYnVuZGFuY2VzIFtzZWVdKGh0dHBzOi8vd3d3LmpzdG9yLm9yZy9zdGFibGUvMjM0NTgyMT9zZXE9MSNtZXRhZGF0YV9pbmZvX3RhYl9jb250ZW50cykuDQoNCmBgYHtyIGFfcmVkdW5kYW5jeV90LCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBlcnJvcj1GQUxTRSwgd2FybmluZz1GQUxTRX0NCnRoZW1lX3NldCh0aGVtZV9idygxMCkpDQpwaHlfY2xyIDwtIG1pY3JvYmlvbWU6OnRyYW5zZm9ybShwaHksICdjbHInKQ0Kb3JkIDwtIG9yZGluYXRlKHBoeV9jbHIsIGZvcm11bGEgPSB+U0VTX2hvdXNlaG9sZF9pbmNvbWUsICdSREEnLCAiZXVjbGlkZWFuIikNCnAxIDwtIHBsb3Rfb3JkaW5hdGlvbihwaHlfY2xyLCBvcmQsIGNvbG9yPSJTRVNfaG91c2Vob2xkX2luY29tZSIpICsNCiAgICAgICBzdGF0X2VsbGlwc2UodHlwZSA9ICJub3JtIiwgbGluZXR5cGUgPSAxKSArDQogICAgICAgbGFicyh0aXRsZSA9ICJyZWR1bmRhbmN5IGFuYWx5c2lzIChQQ0EgdmlhIHJkYSkiKQ0KcHJpbnQocDEpDQpgYGANCg0KIyMjIEZvciBTRVNfbWF0ZXJuYWxfZWR1Y2F0aW9uDQoNCiMjIyMgU3RhbmRhcmQgcmVkdW5kYW5jeSBhbmFseXNpcw0KDQpJdCBpcyB0aGUgQnJheSBkaXN0YW5jZSBiZXR3ZWVuIGNvbXBvc2l0aW9uYWwtdHJhbnNmb3JtZWQgdGF4YSBhYnVuZGFuY2VzDQoNCmBgYHtyIHNfcmVkdW5kYW5jeV9lLCBlY2hvPUYsIG1lc3NhZ2U9RkFMU0UsIGVycm9yPUZBTFNFfQ0KdGhlbWVfc2V0KHRoZW1lX2J3KDEwKSkNCnBoeV9jb21wIDwtIHRyYW5zZm9ybV9zYW1wbGVfY291bnRzKHBoeSwgZnVuY3Rpb24oT1RVKSBPVFUvc3VtKE9UVSkpDQpvcmRfcyA8LSBvcmRpbmF0ZShwaHlfY29tcCwgZm9ybXVsYSA9IH5TRVNfbWF0ZXJuYWxfZWR1Y2F0aW9uLCAnUkRBJywgImJyYXkiKQ0KcDEgPC0gcGxvdF9vcmRpbmF0aW9uKHBoeV9jb21wLCBvcmRfcywgY29sb3I9IlNFU19tYXRlcm5hbF9lZHVjYXRpb24iKSArDQogICAgICAgc3RhdF9lbGxpcHNlKHR5cGUgPSAibm9ybSIsIGxpbmV0eXBlID0gMSkgKw0KICAgICAgIGxhYnModGl0bGUgPSAicmVkdW5kYW5jeSBhbmFseXNpcyAoUENBIHZpYSByZGEpIikNCnByaW50KHAxKQ0KYGBgDQoNCjxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206MzBweDsiPg0KPC9kaXY+DQoNCiMjIyMgQmFzZWQgb24gQWl0Y2hpc29uIGRpc3RhbmNlDQoNCkl0IGlzIHRoZSBFdWNsaWRlYW4gZGlzdGFuY2UgYmV0d2VlbiBDTFItdHJhbnNmb3JtZWQgc3BlY2llcyBhYnVuZGFuY2VzIFtzZWVdKGh0dHBzOi8vd3d3LmpzdG9yLm9yZy9zdGFibGUvMjM0NTgyMT9zZXE9MSNtZXRhZGF0YV9pbmZvX3RhYl9jb250ZW50cykuDQoNCmBgYHtyIGFfcmVkdW5kYW5jeV9lLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBlcnJvcj1GQUxTRSwgd2FybmluZz1GQUxTRX0NCnRoZW1lX3NldCh0aGVtZV9idygxMCkpDQpwaHlfY2xyIDwtIG1pY3JvYmlvbWU6OnRyYW5zZm9ybShwaHksICdjbHInKQ0Kb3JkIDwtIG9yZGluYXRlKHBoeV9jbHIsIGZvcm11bGEgPSB+U0VTX21hdGVybmFsX2VkdWNhdGlvbiwgJ1JEQScsICJldWNsaWRlYW4iKQ0KcDEgPC0gcGxvdF9vcmRpbmF0aW9uKHBoeV9jbHIsIG9yZCwgY29sb3I9IlNFU19tYXRlcm5hbF9lZHVjYXRpb24iKSArDQogICAgICAgc3RhdF9lbGxpcHNlKHR5cGUgPSAibm9ybSIsIGxpbmV0eXBlID0gMSkgKw0KICAgICAgIGxhYnModGl0bGUgPSAicmVkdW5kYW5jeSBhbmFseXNpcyAoUENBIHZpYSByZGEpIikNCnByaW50KHAxKQ0KYGBgDQoNCg==