Submission Graph
As word count goes up, on average, sales will improve.

Appendix
For more data exploration and my rough work, I have attached my experimentation notebook. This file is downloadable to explore the current code being utilizing.
All Materials below have been attached to submission separately as well. Attached will be:
- “Final Submission Graph.png”–the first graph on this document
- “Hand_Drawn_Draft_Edited.png”–the second graph on this document, which is an image
- “Scatter Plot Graph.png”–the third graph on this document
- “Facet Graph.png”–the fourth graph on this document
The bottom of the document is the full raw data table for your personal exploration
Handdrawn Rough Draft
Due to problems with the data, it was not possible to make a comparision between Taylor Swift and Beyonce sales by avgerage word count per song, in each album. Thus instead of faceting by artist, I faceted by country.
Individual Graphs
The submission graph is comrpised of two ggplot graphs appended toegther by GridExtra and arrange.
Scatterplot Graph
The scatter plot below shows the sales per ablum across each country on recond. Note that several countries were removed from the final graph due to a poor sample size of ablum sales.

Facet Graph
Unfortuantely, not all countries possessed a large enough sample size album sales. Countries left out include Australia, Canada, France and Japan. Thus to compare the largest sample sizes, I limited my dataset to the United Kingdom, United States and the aggregate World Wide Sales.

Raw Data Table
The graph was developed from two different data sets, using the join function. From the swift_lyrics dataframe, each word was counted through data manipulation. Then this dataframe was agumeneted using the group_by function to find standard measures. Finally the join function was implimented to connect the sales dataframe to the swift_data dataframe, developed from the initial swift_lyrics datatrfame. Please download this file to review the full code. Or select the “show option” in the dropdown menue found in thh upper right hand corner.
|
country
|
Album
|
release_year
|
avg_sales
|
avg_word
|
med_sales
|
med_word
|
max_word
|
min_word
|
total_sales
|
total_word
|
facets
|
|
AUS
|
Fearless
|
2008
|
500000
|
1633.444
|
500000
|
1625.5
|
2048
|
1077
|
9000000
|
29402
|
Australia Sales
|
|
CAN
|
1989
|
2014
|
542000
|
2143.267
|
542000
|
1962.0
|
2985
|
1546
|
8130000
|
32149
|
Canada Sales
|
|
CAN
|
Lover
|
2019
|
61000
|
1847.611
|
61000
|
1807.5
|
2663
|
781
|
1098000
|
33257
|
Canada Sales
|
|
CAN
|
Reputation
|
2017
|
80000
|
NA
|
80000
|
NA
|
NA
|
NA
|
80000
|
NA
|
Canada Sales
|
|
FRA
|
1989
|
2014
|
70000
|
2143.267
|
70000
|
1962.0
|
2985
|
1546
|
1050000
|
32149
|
France Sales
|
|
FRA
|
Lover
|
2019
|
5700
|
1847.611
|
5700
|
1807.5
|
2663
|
781
|
102600
|
33257
|
France Sales
|
|
FRA
|
Reputation
|
2017
|
13000
|
NA
|
13000
|
NA
|
NA
|
NA
|
13000
|
NA
|
France Sales
|
|
JPN
|
1989
|
2014
|
268200
|
2143.267
|
268200
|
1962.0
|
2985
|
1546
|
4023000
|
32149
|
Japan Sales
|
|
JPN
|
Lover
|
2019
|
32601
|
1847.611
|
32601
|
1807.5
|
2663
|
781
|
586818
|
33257
|
Japan Sales
|
|
JPN
|
Red
|
2012
|
256000
|
1728.474
|
256000
|
1742.0
|
2280
|
993
|
4864000
|
32841
|
Japan Sales
|
|
UK
|
1989
|
2014
|
1250000
|
2143.267
|
1250000
|
1962.0
|
2985
|
1546
|
18750000
|
32149
|
United Kindom Sales
|
|
UK
|
Fearless
|
2008
|
609000
|
1633.444
|
609000
|
1625.5
|
2048
|
1077
|
10962000
|
29402
|
United Kindom Sales
|
|
UK
|
Lover
|
2019
|
221654
|
1847.611
|
221654
|
1807.5
|
2663
|
781
|
3989772
|
33257
|
United Kindom Sales
|
|
UK
|
Red
|
2012
|
693000
|
1728.474
|
693000
|
1742.0
|
2280
|
993
|
13167000
|
32841
|
United Kindom Sales
|
|
UK
|
Reputation
|
2017
|
378000
|
NA
|
378000
|
NA
|
NA
|
NA
|
378000
|
NA
|
United Kindom Sales
|
|
UK
|
Speak Now
|
2010
|
169281
|
1946.118
|
169281
|
1928.0
|
2554
|
1616
|
2877777
|
33084
|
United Kindom Sales
|
|
US
|
1989
|
2014
|
6215000
|
2143.267
|
6215000
|
1962.0
|
2985
|
1546
|
93225000
|
32149
|
United Sates Sales
|
|
US
|
Fearless
|
2008
|
7180000
|
1633.444
|
7180000
|
1625.5
|
2048
|
1077
|
129240000
|
29402
|
United Sates Sales
|
|
US
|
Lover
|
2019
|
1085000
|
1847.611
|
1085000
|
1807.5
|
2663
|
781
|
19530000
|
33257
|
United Sates Sales
|
|
US
|
Red
|
2012
|
4465000
|
1728.474
|
4465000
|
1742.0
|
2280
|
993
|
84835000
|
32841
|
United Sates Sales
|
|
US
|
Reputation
|
2017
|
2300000
|
NA
|
2300000
|
NA
|
NA
|
NA
|
2300000
|
NA
|
United Sates Sales
|
|
US
|
Speak Now
|
2010
|
4694000
|
1946.118
|
4694000
|
1928.0
|
2554
|
1616
|
79798000
|
33084
|
United Sates Sales
|
|
US
|
Taylor Swift
|
2006
|
5720000
|
1393.214
|
5720000
|
1396.5
|
1803
|
1069
|
80080000
|
19505
|
United Sates Sales
|
|
WW
|
1989
|
2014
|
10100000
|
2143.267
|
10100000
|
1962.0
|
2985
|
1546
|
151500000
|
32149
|
World Wide Sales
|
|
WW
|
Fearless
|
2008
|
12000000
|
1633.444
|
12000000
|
1625.5
|
2048
|
1077
|
216000000
|
29402
|
World Wide Sales
|
|
WW
|
Lover
|
2019
|
3200000
|
1847.611
|
3200000
|
1807.5
|
2663
|
781
|
57600000
|
33257
|
World Wide Sales
|
|
WW
|
Red
|
2012
|
6000000
|
1728.474
|
6000000
|
1742.0
|
2280
|
993
|
114000000
|
32841
|
World Wide Sales
|
|
WW
|
Reputation
|
2017
|
4500000
|
NA
|
4500000
|
NA
|
NA
|
NA
|
4500000
|
NA
|
World Wide Sales
|
|
WW
|
Speak Now
|
2010
|
5000000
|
1946.118
|
5000000
|
1928.0
|
2554
|
1616
|
85000000
|
33084
|
World Wide Sales
|
|
NA
|
Folklore
|
2020
|
NA
|
NA
|
NA
|
NA
|
NA
|
NA
|
NA
|
NA
|
NA
|
LS0tDQp0aXRsZTogIkhvbWV3b3JrIDYtLUx5cmljcyINCmF1dGhvcjogIkVtaWx5IFRlbm55c29uIg0KZGF0ZTogIjEwLzIxLzIwMjAiDQoNCm91dHB1dDogDQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZmxvYXQ6IHRydWUNCiAgICB0b2NfZGVwdGg6IDQNCiAgICBjb2RlX2ZvbGRpbmcgOiAic2hvdyINCiAgICBjb2RlX2Rvd25sb2FkOiBUUlVFDQotLS0NCg0KPHN0eWxlPg0KYm9keSB7DQp0ZXh0LWFsaWduOiBqdXN0aWZ5fQ0KPC9zdHlsZT4NCg0KYGBge3Igc2V0dXAsIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFLCBpbmNsdWRlID0gRkFMU0V9DQpybShsaXN0PWxzKGFsbD1UUlVFKSkNCg0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPUZBTFNFLCB3YXJuaW5nID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRSkNCg0KbGlicmFyeSgidGlkeXZlcnNlIikNCmxpYnJhcnkoInZ0YWJsZSIpDQoNCmxpYnJhcnkoImRicGx5ciIpDQojIGlicmFyeSgicmVhZHhsIikNCmxpYnJhcnkoImx1YnJpZGF0ZSIpDQpsaWJyYXJ5KCJtYWdyaXR0ciIpDQpsaWJyYXJ5KCJwYWxldHRlZXIiKQ0KbGlicmFyeSgiZ2dlYXN5IikNCmxpYnJhcnkoImdncHViciIpDQpsaWJyYXJ5KCJnZ2hpZ2hsaWdodCIpDQpsaWJyYXJ5KCJkaXJlY3RsYWJlbHMiKQ0KbGlicmFyeSgibnVtZm9ybSIpDQpsaWJyYXJ5KCJqYW5pdG9yIikNCmxpYnJhcnkoInBtZHBseXIiKQ0KbGlicmFyeSgiZ2dyZXBlbCIpDQpsaWJyYXJ5KCJydmVzdCIpDQpsaWJyYXJ5KGdyaWRFeHRyYSkNCmxpYnJhcnkocmVzaGFwZTIpDQpsaWJyYXJ5KGdyaWQpDQpsaWJyYXJ5KGd0YWJsZSkNCmxpYnJhcnkoImthYmxlRXh0cmEiKQ0KDQpgYGANCg0KYGBge3J9DQpiZXlvbmNlX3JhdyA8LSByZWFkLmNzdigiYmV5b25jZV9seXJpY3MuY3N2IikNCnN3aWZ0X3JhdyA8LSByZWFkLmNzdigidGF5bG9yX3N3aWZ0X2x5cmljcy5jc3YiKQ0Kc2FsZXNfcmF3IDwtIHJlYWQuY3N2KCJzYWxlcy5jc3YiKQ0KY2hhcnRzX3JhdyA8LSByZWFkLmNzdigiY2hhcnRzLmNzdiIpDQoNCmBgYA0KDQpgYGB7cn0NCnNhbGVzX2VkaXRlZCA8LSBzYWxlc19yYXcNCnNhbGVzX2VkaXRlZCRyZWxlYXNlX3llYXIgPC0geWVhcihtZHkoc2FsZXNfZWRpdGVkJHJlbGVhc2VkKSkNCg0Kc3dpZnRfZGF0YSA8LSBsZWZ0X2pvaW4oDQogIHN1YnNldChzYWxlc19lZGl0ZWRbYygiYXJ0aXN0IiwgInRpdGxlIiwgImNvdW50cnkiLCAic2FsZXMiLCAicmVsZWFzZV95ZWFyIildLCBhcnRpc3QgPT0gIlRheWxvciBTd2lmdCIpLA0KICBjYmluZCgNCiAgc3dpZnRfcmF3ICU+JSANCiAgICBncm91cF9ieShBcnRpc3QsIEFsYnVtLCBUaXRsZSkgJT4lDQogICAgc3VtbWFyaXplKA0KICAgICAgd29yZF9jb3VudCA9IHN0cl9jb3VudChMeXJpY3MpDQogICAgICApKSwNCiAgYnkgPSBjKCJhcnRpc3QiID0gIkFydGlzdCIsICJ0aXRsZSIgPSAiQWxidW0iKQ0KKQ0KDQpzd2lmdF9kYXRhIDwtIHJlbmFtZShzd2lmdF9kYXRhLCAiQWxidW0iID0gInRpdGxlIiwgIlNvbmciID0gIlRpdGxlIikNCiANCnN3aWZ0X2FsYnVtX2RhdGEgPC0gc3dpZnRfZGF0YSAlPiUNCiAgZ3JvdXBfYnkoY291bnRyeSwgQWxidW0sIHJlbGVhc2VfeWVhcikgJT4lDQogIHN1bW1hcml6ZSgNCiAgICBhdmdfc2FsZXMgPSBtZWFuKHNhbGVzKSwNCiAgICBhdmdfd29yZCA9IG1lYW4od29yZF9jb3VudCksDQogICAgbWVkX3NhbGVzID0gbWVkaWFuKHNhbGVzKSwNCiAgICBtZWRfd29yZCA9IG1lZGlhbih3b3JkX2NvdW50KSwNCiAgICBtYXhfd29yZCA9IG1heCh3b3JkX2NvdW50KSwNCiAgICBtaW5fd29yZCA9IG1pbih3b3JkX2NvdW50KSwNCiAgICB0b3RhbF9zYWxlcyA9IHN1bShzYWxlcyksDQogICAgdG90YWxfd29yZCA9IHN1bSh3b3JkX2NvdW50KQ0KICApICU+JQ0KICBtdXRhdGUoZmFjZXRzID0gY291bnRyeSkNCg0Kc3dpZnRfYWxidW1fZGF0YSRmYWNldHMgPC0gaWZlbHNlKHN3aWZ0X2FsYnVtX2RhdGEkZmFjZXRzID09ICJBVVMiLCAiQXVzdHJhbGlhIFxuIFNhbGVzIiwNCiAgICAgICBpZmVsc2Uoc3dpZnRfYWxidW1fZGF0YSRmYWNldHMgPT0gIkNBTiIsICJDYW5hZGEgXG4gU2FsZXMiLA0KICAgICAgICAgICAgICBpZmVsc2Uoc3dpZnRfYWxidW1fZGF0YSRmYWNldHMgPT0gIkZSQSIsICJGcmFuY2UgXG4gU2FsZXMiLA0KICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHN3aWZ0X2FsYnVtX2RhdGEkZmFjZXRzID09ICJKUE4iLCAiSmFwYW4gXG4gU2FsZXMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShzd2lmdF9hbGJ1bV9kYXRhJGZhY2V0cyA9PSAiVUsiLCAiVW5pdGVkIEtpbmRvbSBcbiBTYWxlcyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShzd2lmdF9hbGJ1bV9kYXRhJGZhY2V0cyA9PSAiVVMiLCAiVW5pdGVkIFNhdGVzIFxuIFNhbGVzIiwgIldvcmxkIFdpZGUgXG4gU2FsZXMiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpKSkpKQ0KDQoNCiMgc3dpZnRfYWxidW1fZGF0YQ0KYGBgDQoNCiMgU3VibWlzc2lvbiBHcmFwaA0KDQoNCg0KDQojIyMjIyBBcyB3b3JkIGNvdW50IGdvZXMgdXAsIG9uIGF2ZXJhZ2UsIHNhbGVzIHdpbGwgaW1wcm92ZS4gDQoNCg0KDQoNCg0KDQpgYGB7ciwgZmlnLmhlaWdodCA9IDksIGZpZy53aWR0aCA9IDE3LCBmaWcuYWxpZ24gPSAiY2VudGVyIn0NCmdyaWRFeHRyYTo6Z3JpZC5hcnJhbmdlKA0KICAoZ2dwbG90KHN3aWZ0X2FsYnVtX2RhdGEsIGFlcyh5ID0gYXZnX3NhbGVzLCB4ID0gYXZnX3dvcmQsIGNvbG9yID0gQWxidW0pKSArDQogICAgICBnZW9tX2ppdHRlcihzaXplID0gNCkgKw0KICAgIA0KICAgICAgc2NhbGVfeF9jb250aW51b3VzKGxpbSA9IGMoMTIwMCwgMjIwMCksIA0KICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBOVUxMKSArDQogICAgICBzY2FsZV95X2NvbnRpbnVvdXMobGltID0gYygwLCAxMzAwMDAwMCksDQogICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gcGFzdGUwKCIkIiwgYygwLCAyNTAwMDAwLCA1MDAwMDAwLCA3NTAwMDAwLCAxMDAwMDAwMCwgMTI1MDAwMDApLzEwMDAwMDAsIk0iKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBjKDAsIDI1MDAwMDAsIDUwMDAwMDAsIDc1MDAwMDAsIDEwMDAwMDAwLCAxMjUwMDAwMCksDQogICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IE5VTEwpICsNCiAgICAgIA0KICAgICAgZ2d0aXRsZSgiQWxidW0gU2FsZXMgYnkgQXZnZXJhZ2UgV29yZCBDb3VudCIpICsNCiAgICAgIA0KICAgICAgdGhlbWUoYXhpcy5saW5lID0gZWxlbWVudF9saW5lKGNvbG91ciA9ICJibGFjayIpLA0KICAgICAgICAgICAgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGNvbG91ciA9ICJibGFjayIsIGZpbGwgPSBOQSksDQogICAgICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiKSwNCiAgICAgICAgICAgIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgICAgICBheGlzLnRpY2tzLnggPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IC41LCBzaXplID0gMTEpLA0KICAgICAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDExKSwNCiAgICAgICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE0LCBmYWNlID0gIml0YWxpYyIpLA0KICAgICAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgc2l6ZSA9IDIwLCBmYWNlID0gImJvbGQiKSwNCiAgICAgICAgICAgICAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiDQoNCiAgICAgICAgICAgICkpLA0KICANCiAgDQogIChnZ3Bsb3Qoc3dpZnRfYWxidW1fZGF0YSAlPiUgDQogICAgICAgICBmaWx0ZXIoY291bnRyeSA9PSAiVVMiIHwgY291bnRyeSA9PSAiVUsiIHwgY291bnRyeSA9PSAiV1ciKSwgDQogICAgICAgYWVzKHkgPSBhdmdfc2FsZXMsIHggPSBtZWRfd29yZCwgY29sb3IgPSBBbGJ1bSwgc2hvdy5sZWdlbmQgPSBGQUxTRSkpICsNCiAgZ2VvbV9wb2ludChzaXplID0gMy41LCBzaG93LmxlZ2VuZCA9IEZBTFNFKSArDQogIA0KICBmYWNldF93cmFwKC5+IGZhY2V0cykgKyANCiAgDQogIHNjYWxlX3hfY29udGludW91cyhsaW0gPSBjKDEyMDAsIDIwMDApLCANCiAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBOVUxMKSArDQogIHNjYWxlX3lfY29udGludW91cyhsaW0gPSBjKDAsIDEzMDAwMDAwKSwNCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IHBhc3RlMCgiJCIsIGMoMCwgMjUwMDAwMCwgNTAwMDAwMCwgNzUwMDAwMCwgMTAwMDAwMDAsIDEyNTAwMDAwKS8xMDAwMDAwLCJNIiksDQogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBjKDAsIDI1MDAwMDAsIDUwMDAwMDAsIDc1MDAwMDAsIDEwMDAwMDAwLCAxMjUwMDAwMCksDQogICAgICAgICAgICAgICAgICAgICBuYW1lID0gTlVMTCkgKw0KICANCiAgZ2VvbV9sYWJlbF9yZXBlbChkYXRhID0gc3dpZnRfYWxidW1fZGF0YSAlPiUgDQogICAgICAgICBmaWx0ZXIoY291bnRyeSA9PSAiVVMiICAmIEFsYnVtID09ICJGZWFybGVzcyIgfCANCiAgICAgICAgICAgICAgICAgIGNvdW50cnkgPT0gIlVLIiAgJiBBbGJ1bSA9PSAiRmVhcmxlc3MiIHwgDQogICAgICAgICAgICAgICAgICBjb3VudHJ5ID09ICJXVyIgJiBBbGJ1bSA9PSAiRmVhcmxlc3MiKSwNCiAgICAgICAgIGFlcyhsYWJlbCA9IEFsYnVtLCB2anVzdCA9IC0xLCBoanVzdCA9IDEpKSArDQogIGdlb21fbGFiZWxfcmVwZWwoZGF0YSA9IHN3aWZ0X2FsYnVtX2RhdGEgJT4lIA0KICAgICAgICAgZmlsdGVyKGNvdW50cnkgPT0gIlVTIiAgJiBBbGJ1bSA9PSAiMTk4OSIgfCANCiAgICAgICAgICAgICAgICAgIGNvdW50cnkgPT0gIlVLIiAgJiBBbGJ1bSA9PSAiMTk4OSIgfCANCiAgICAgICAgICAgICAgICAgIGNvdW50cnkgPT0gIldXIiAmIEFsYnVtID09ICIxOTg5IiksDQogICAgICAgICBhZXMobGFiZWwgPSBBbGJ1bSwgdmp1c3QgPSAtMSkpICsNCiAgDQogICAgDQogIGdlb21fbGFiZWxfcmVwZWwoZGF0YSA9IHN3aWZ0X2FsYnVtX2RhdGEgJT4lIA0KICAgICAgICAgZmlsdGVyKCNjb3VudHJ5ID09ICJVUyIgICYgQWxidW0gPT0gIkZlYXJsZXNzIiB8IA0KICAgICAgICAgICAgICAgICAgY291bnRyeSA9PSAiVUsiICAmIEFsYnVtID09ICJGZWFybGVzcyIgfCANCiAgICAgICAgICAgICAgICAgIGNvdW50cnkgPT0gIldXIiAmIEFsYnVtID09ICJGZWFybGVzcyIpLA0KICAgICAgICAgYWVzKGxhYmVsID0gIHBhc3RlMCgiUmVsZWFzZSBZZWFyIFxuIiwgcmVsZWFzZV95ZWFyKSwgdmp1c3QgPSAxLjUsIGhqdXN0ID0gMSksIHNpemUgPSAyLjUpICsNCiAgZ2VvbV9sYWJlbF9yZXBlbChkYXRhID0gc3dpZnRfYWxidW1fZGF0YSAlPiUgDQogICAgICAgICBmaWx0ZXIoY291bnRyeSA9PSAiVVMiICAmIEFsYnVtID09ICIxOTg5IiB8IA0KICAgICAgICAgICAgICAgICAgI2NvdW50cnkgPT0gIlVLIiAgJiBBbGJ1bSA9PSAiMTk4OSIgfCANCiAgICAgICAgICAgICAgICAgIGNvdW50cnkgPT0gIldXIiAmIEFsYnVtID09ICIxOTg5IiksDQogICAgICAgICBhZXMobGFiZWwgPSBwYXN0ZTAoIlJlbGVhc2UgWWVhciBcbiIsIHJlbGVhc2VfeWVhciksIHZqdXN0ID0gMS41LCBoanVzdCA9IC0uNSksIHNpemUgPSAyLjUpICsNCiAgZ2VvbV9sYWJlbF9yZXBlbChkYXRhID0gc3dpZnRfYWxidW1fZGF0YSAlPiUgDQogICAgICAgICBmaWx0ZXIoY291bnRyeSA9PSAiVVMiICAmIEFsYnVtID09ICJGZWFybGVzcyIpLA0KICAgICAgICAgYWVzKGxhYmVsID0gIHBhc3RlMCgiUmVsZWFzZSBZZWFyIFxuIiwgcmVsZWFzZV95ZWFyKSwgdmp1c3QgPSAtMSwgaGp1c3QgPSAtLjUpLCBzaXplID0gMi41KSArDQogICBnZW9tX2xhYmVsX3JlcGVsKGRhdGEgPSBzd2lmdF9hbGJ1bV9kYXRhICU+JSANCiAgICAgICAgIGZpbHRlcihjb3VudHJ5ID09ICJVSyIgICYgQWxidW0gPT0gIjE5ODkiKSwNCiAgICAgICAgIGFlcyhsYWJlbCA9IHBhc3RlMCgiUmVsZWFzZSBZZWFyIFxuIiwgcmVsZWFzZV95ZWFyKSwgdmp1c3QgPSAtLjUsIGhqdXN0ID0gMS41KSwgc2l6ZSA9IDIuNSkgKw0KICANCiAgDQogIGdndGl0bGUoIkFsYnVtIFNhbGVzIGJ5IENvdW50cnkiKSArDQogIA0KICAgIHRoZW1lKGF4aXMubGluZSA9IGVsZW1lbnRfbGluZShjb2xvdXIgPSAiYmxhY2siKSwNCiAgICAgICAgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGNvbG91ciA9ICJibGFjayIsIGZpbGwgPSBOQSksDQogICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIpLA0KICAgICAgICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9saW5lKGNvbG91ciA9ICJsaWdodCBncmF5IiksDQogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgYXhpcy50aWNrcy54ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IC41LCBzaXplID0gMTEpLA0KICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTEpLA0KICAgICAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNCwgZmFjZSA9ICJpdGFsaWMiKSwNCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgc2l6ZSA9IDIwLCBmYWNlID0gImJvbGQiKSwNCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiDQogICAgICAgICkpLA0KICBsZWdlbmQgPSBndGFibGVfZmlsdGVyKGdncGxvdEdyb2IoZ2dwbG90KHN3aWZ0X2FsYnVtX2RhdGEsIGFlcyh5ID0gYXZnX3NhbGVzLCB4ID0gYXZnX3dvcmQsIGNvbG9yID0gQWxidW0pKSArDQogICAgICBnZW9tX2ppdHRlcihzaXplID0gNCkgKw0KICAgIA0KICAgICAgc2NhbGVfeF9jb250aW51b3VzKGxpbSA9IGMoMTIwMCwgMjIwMCksIA0KICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBOVUxMKSArDQogICAgICBzY2FsZV95X2NvbnRpbnVvdXMobGltID0gYygwLCAxMzAwMDAwMCksDQogICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gcGFzdGUwKCIkIiwgYygwLCAyNTAwMDAwLCA1MDAwMDAwLCA3NTAwMDAwLCAxMDAwMDAwMCwgMTI1MDAwMDApLzEwMDAwMDAsIk0iKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBjKDAsIDI1MDAwMDAsIDUwMDAwMDAsIDc1MDAwMDAsIDEwMDAwMDAwLCAxMjUwMDAwMCksDQogICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IE5VTEwpICsNCiAgICAgIA0KICAgICAgZ2d0aXRsZSgiQWxidW0gU2FsZXMgYnkgQXZnZXJhZ2UgV29yZCBDb3VudCIpICsNCiAgICAgIA0KICAgICAgdGhlbWUoYXhpcy5saW5lID0gZWxlbWVudF9saW5lKGNvbG91ciA9ICJibGFjayIpLA0KICAgICAgICAgICAgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGNvbG91ciA9ICJibGFjayIsIGZpbGwgPSBOQSksDQogICAgICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiKSwNCiAgICAgICAgICAgIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgICAgICBheGlzLnRpY2tzLnggPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IC41LCBzaXplID0gMTEpLA0KICAgICAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDExKSwNCiAgICAgICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE0LCBmYWNlID0gIml0YWxpYyIpLA0KICAgICAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgc2l6ZSA9IDIwLCBmYWNlID0gImJvbGQiKQ0KICAgICAgICAgICAgKSksICJndWlkZS1ib3giKSAsDQogIG5jb2wgPSAzLA0KICBsZWZ0ID0gICB0ZXh0R3JvYihleHByZXNzaW9uKGJvbGQoIkF2ZXJhZ2UgUmV2ZW51ZSBwZXIgQWxidW0iKSksIGdwID0gZ3Bhcihmb250c2l6ZT0xNSxmb250PTgpLCByb3QgPSA5MCwgdmp1c3QgPSAwLjUpLA0KICBib3R0b20gPSAgIHRleHRHcm9iKGV4cHJlc3Npb24oYm9sZCgiQXZlcmFnZSBXb3JkIENvdW50IEluIFNvbmdzIHBlciBBbGJ1bSIpKSwgZ3AgPSBncGFyKGZvbnRzaXplPTE1LGZvbnQ9OCksIHZqdXN0ID0gMC41KSwNCiAgd2lkdGhzID0gYygzLCAzLCAuNSkpDQoNCg0KYGBgDQoNCiMgQXBwZW5kaXgNCg0KIyMjIyMgRm9yIG1vcmUgZGF0YSBleHBsb3JhdGlvbiBhbmQgbXkgcm91Z2ggd29yaywgSSBoYXZlIGF0dGFjaGVkIG15IGV4cGVyaW1lbnRhdGlvbiBub3RlYm9vay4gVGhpcyBmaWxlIGlzIGRvd25sb2FkYWJsZSB0byBleHBsb3JlIHRoZSBjdXJyZW50IGNvZGUgYmVpbmcgdXRpbGl6aW5nLg0KIyMjIyMgQWxsIE1hdGVyaWFscyBiZWxvdyBoYXZlIGJlZW4gYXR0YWNoZWQgdG8gc3VibWlzc2lvbiBzZXBhcmF0ZWx5IGFzIHdlbGwuIEF0dGFjaGVkIHdpbGwgYmU6DQoqICJGaW5hbCBTdWJtaXNzaW9uIEdyYXBoLnBuZyItLXRoZSBmaXJzdCBncmFwaCBvbiB0aGlzIGRvY3VtZW50DQoqICJIYW5kX0RyYXduX0RyYWZ0X0VkaXRlZC5wbmciLS10aGUgc2Vjb25kIGdyYXBoIG9uIHRoaXMgZG9jdW1lbnQsIHdoaWNoIGlzIGFuIGltYWdlIA0KKiAiU2NhdHRlciBQbG90IEdyYXBoLnBuZyItLXRoZSB0aGlyZCBncmFwaCBvbiB0aGlzIGRvY3VtZW50DQoqICJGYWNldCBHcmFwaC5wbmciLS10aGUgZm91cnRoIGdyYXBoIG9uIHRoaXMgZG9jdW1lbnQNCg0KIyMjIyMgVGhlIGJvdHRvbSBvZiB0aGUgZG9jdW1lbnQgaXMgdGhlIGZ1bGwgcmF3IGRhdGEgdGFibGUgZm9yIHlvdXIgcGVyc29uYWwgZXhwbG9yYXRpb24NCg0KIyMjIyMNCg0KDQojIyBIYW5kZHJhd24gUm91Z2ggRHJhZnQNCg0KIyMjIyMgRHVlIHRvIHByb2JsZW1zIHdpdGggdGhlIGRhdGEsIGl0IHdhcyBub3QgcG9zc2libGUgdG8gbWFrZSBhIGNvbXBhcmlzaW9uIGJldHdlZW4gVGF5bG9yIFN3aWZ0IGFuZCBCZXlvbmNlIHNhbGVzIGJ5IGF2Z2VyYWdlIHdvcmQgY291bnQgcGVyIHNvbmcsIGluIGVhY2ggYWxidW0uIFRodXMgaW5zdGVhZCBvZiBmYWNldGluZyBieSBhcnRpc3QsIEkgZmFjZXRlZCBieSBjb3VudHJ5Lg0KDQo8Y2VudGVyPg0KIVtdKEhhbmRfRHJhd25fRHJhZnRfRWRpdGVkLnBuZyl7d2lkdGg9NjUlfQ0KPC9jZW50ZXI+DQoNCg0KIyMgSW5kaXZpZHVhbCBHcmFwaHMNCg0KIyMjIyMgVGhlIHN1Ym1pc3Npb24gZ3JhcGggaXMgY29tcnBpc2VkIG9mIHR3byBnZ3Bsb3QgZ3JhcGhzIGFwcGVuZGVkIHRvZWd0aGVyIGJ5IGBHcmlkRXh0cmFgIGFuZCBgYXJyYW5nZWAuDQoNCiMjIyBTY2F0dGVycGxvdCBHcmFwaA0KDQojIyMjIyBUaGUgc2NhdHRlciBwbG90IGJlbG93IHNob3dzIHRoZSBzYWxlcyBwZXIgYWJsdW0gYWNyb3NzIGVhY2ggY291bnRyeSBvbiByZWNvbmQuIE5vdGUgdGhhdCBzZXZlcmFsIGNvdW50cmllcyB3ZXJlIHJlbW92ZWQgZnJvbSB0aGUgZmluYWwgZ3JhcGggZHVlIHRvIGEgcG9vciBzYW1wbGUgc2l6ZSBvZiBhYmx1bSBzYWxlcy4NCg0KYGBge3IgZmlnLmFsaWduID0gImNlbnRlciJ9DQpnZ3Bsb3Qoc3dpZnRfYWxidW1fZGF0YSwgYWVzKHkgPSBhdmdfc2FsZXMsIHggPSBhdmdfd29yZCwgY29sb3IgPSBBbGJ1bSkpICsNCiAgZ2VvbV9qaXR0ZXIoc2l6ZSA9IDQpICsNCg0KICBzY2FsZV94X2NvbnRpbnVvdXMobGltID0gYygxMjAwLCAyMjAwKSwgDQogICAgICAgICAgICAgICAgICAgICBuYW1lID0gIkF2ZXJhZ2UgV29yZCBDb3VudCBJbiBTb25ncyBwZXIgQWxidW0iKSArDQogIHNjYWxlX3lfY29udGludW91cyhsaW0gPSBjKDAsIDEzMDAwMDAwKSwNCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IHBhc3RlMCgiJCIsIGMoMCwgMjUwMDAwMCwgNTAwMDAwMCwgNzUwMDAwMCwgMTAwMDAwMDAsIDEyNTAwMDAwKS8xMDAwMDAwLCJNIiksDQogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBjKDAsIDI1MDAwMDAsIDUwMDAwMDAsIDc1MDAwMDAsIDEwMDAwMDAwLCAxMjUwMDAwMCksDQogICAgICAgICAgICAgICAgICAgICBuYW1lID0gIkF2ZXJhZ2UgUmV2ZW51ZSBwZXIgQWxidW0iKSArDQogIA0KICBnZ3RpdGxlKCJBbGJ1bSBTYWxlcyBieSBBdmdlcmFnZSBXb3JkIENvdW50IikgKw0KICANCiAgdGhlbWUoYXhpcy5saW5lID0gZWxlbWVudF9saW5lKGNvbG91ciA9ICJibGFjayIpLA0KICAgICAgICBwYW5lbC5ib3JkZXIgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gImJsYWNrIiwgZmlsbCA9IE5BKSwNCiAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiksDQogICAgICAgIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgYXhpcy50aWNrcy54ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IC41LCBzaXplID0gMTEpLA0KICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTEpLA0KICAgICAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNCwgZmFjZSA9ICJpdGFsaWMiKSwNCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgc2l6ZSA9IDE2LCBmYWNlID0gImJvbGQiKQ0KICAgICAgICApICANCmBgYA0KDQoNCg0KDQojIyMgRmFjZXQgR3JhcGgNCg0KIyMjIyMgVW5mb3J0dWFudGVseSwgbm90IGFsbCBjb3VudHJpZXMgcG9zc2Vzc2VkIGEgbGFyZ2UgZW5vdWdoIHNhbXBsZSBzaXplIGFsYnVtIHNhbGVzLiBDb3VudHJpZXMgbGVmdCBvdXQgaW5jbHVkZSBBdXN0cmFsaWEsIENhbmFkYSwgRnJhbmNlIGFuZCBKYXBhbi4gVGh1cyB0byBjb21wYXJlIHRoZSBsYXJnZXN0IHNhbXBsZSBzaXplcywgSSBsaW1pdGVkIG15IGRhdGFzZXQgdG8gdGhlIFVuaXRlZCBLaW5nZG9tLCBVbml0ZWQgU3RhdGVzIGFuZCB0aGUgYWdncmVnYXRlIFdvcmxkIFdpZGUgU2FsZXMuDQoNCmBgYHtyIGZpZy5oZWlnaHQgPSA3LCBmaWcuYWxpZ24gPSAiY2VudGVyIn0NCmdncGxvdChzd2lmdF9hbGJ1bV9kYXRhICU+JSANCiAgICAgICAgIGZpbHRlcihjb3VudHJ5ID09ICJVUyIgfCBjb3VudHJ5ID09ICJVSyIgfCBjb3VudHJ5ID09ICJXVyIpLCANCiAgICAgICBhZXMoeSA9IGF2Z19zYWxlcywgeCA9IG1lZF93b3JkLCBjb2xvciA9IEFsYnVtLCBzaG93LmxlZ2VuZCA9IEZBTFNFKSkgKw0KICBnZW9tX3BvaW50KHNpemUgPSAzLjUsIHNob3cubGVnZW5kID0gRkFMU0UpICsNCiAgDQogIGZhY2V0X3dyYXAoLn4gZmFjZXRzKSArIA0KICANCiAgc2NhbGVfeF9jb250aW51b3VzKGxpbSA9IGMoMTIwMCwgMjAwMCksIA0KICAgICAgICAgICAgICAgICAgICAgbmFtZSA9ICJBdmVyYWdlIFdvcmQgQ291bnQgSW4gU29uZ3MgcGVyIEFsYnVtIikgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobGltID0gYygwLCAxMzAwMDAwMCksDQogICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBwYXN0ZTAoIiQiLCBjKDAsIDI1MDAwMDAsIDUwMDAwMDAsIDc1MDAwMDAsIDEwMDAwMDAwLCAxMjUwMDAwMCkvMTAwMDAwMCwiTSIpLA0KICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gYygwLCAyNTAwMDAwLCA1MDAwMDAwLCA3NTAwMDAwLCAxMDAwMDAwMCwgMTI1MDAwMDApLA0KICAgICAgICAgICAgICAgICAgICAgbmFtZSA9ICJBdmVyYWdlIFJldmVudWUgcGVyIEFsYnVtIikgKw0KICANCiAgZ2VvbV9sYWJlbF9yZXBlbChkYXRhID0gc3dpZnRfYWxidW1fZGF0YSAlPiUgDQogICAgICAgICBmaWx0ZXIoY291bnRyeSA9PSAiVVMiICAmIEFsYnVtID09ICJGZWFybGVzcyIgfCANCiAgICAgICAgICAgICAgICAgIGNvdW50cnkgPT0gIlVLIiAgJiBBbGJ1bSA9PSAiRmVhcmxlc3MiIHwgDQogICAgICAgICAgICAgICAgICBjb3VudHJ5ID09ICJXVyIgJiBBbGJ1bSA9PSAiRmVhcmxlc3MiKSwNCiAgICAgICAgIGFlcyhsYWJlbCA9IEFsYnVtLCB2anVzdCA9IC0xLCBoanVzdCA9IDEpKSArDQogIGdlb21fbGFiZWxfcmVwZWwoZGF0YSA9IHN3aWZ0X2FsYnVtX2RhdGEgJT4lIA0KICAgICAgICAgZmlsdGVyKGNvdW50cnkgPT0gIlVTIiAgJiBBbGJ1bSA9PSAiMTk4OSIgfCANCiAgICAgICAgICAgICAgICAgIGNvdW50cnkgPT0gIlVLIiAgJiBBbGJ1bSA9PSAiMTk4OSIgfCANCiAgICAgICAgICAgICAgICAgIGNvdW50cnkgPT0gIldXIiAmIEFsYnVtID09ICIxOTg5IiksDQogICAgICAgICBhZXMobGFiZWwgPSBBbGJ1bSwgdmp1c3QgPSAtMSkpICsNCiAgDQogICAgDQogIGdlb21fbGFiZWxfcmVwZWwoZGF0YSA9IHN3aWZ0X2FsYnVtX2RhdGEgJT4lIA0KICAgICAgICAgZmlsdGVyKCNjb3VudHJ5ID09ICJVUyIgICYgQWxidW0gPT0gIkZlYXJsZXNzIiB8IA0KICAgICAgICAgICAgICAgICAgY291bnRyeSA9PSAiVUsiICAmIEFsYnVtID09ICJGZWFybGVzcyIgfCANCiAgICAgICAgICAgICAgICAgIGNvdW50cnkgPT0gIldXIiAmIEFsYnVtID09ICJGZWFybGVzcyIpLA0KICAgICAgICAgYWVzKGxhYmVsID0gIHBhc3RlMCgiUmVsZWFzZSBZZWFyIFxuIiwgcmVsZWFzZV95ZWFyKSwgdmp1c3QgPSAxLjUsIGhqdXN0ID0gMSksIHNpemUgPSAyLjUpICsNCiAgZ2VvbV9sYWJlbF9yZXBlbChkYXRhID0gc3dpZnRfYWxidW1fZGF0YSAlPiUgDQogICAgICAgICBmaWx0ZXIoY291bnRyeSA9PSAiVVMiICAmIEFsYnVtID09ICIxOTg5IiB8IA0KICAgICAgICAgICAgICAgICAgI2NvdW50cnkgPT0gIlVLIiAgJiBBbGJ1bSA9PSAiMTk4OSIgfCANCiAgICAgICAgICAgICAgICAgIGNvdW50cnkgPT0gIldXIiAmIEFsYnVtID09ICIxOTg5IiksDQogICAgICAgICBhZXMobGFiZWwgPSBwYXN0ZTAoIlJlbGVhc2UgWWVhciBcbiIsIHJlbGVhc2VfeWVhciksIHZqdXN0ID0gMS41LCBoanVzdCA9IC0uNSksIHNpemUgPSAyLjUpICsNCiAgZ2VvbV9sYWJlbF9yZXBlbChkYXRhID0gc3dpZnRfYWxidW1fZGF0YSAlPiUgDQogICAgICAgICBmaWx0ZXIoY291bnRyeSA9PSAiVVMiICAmIEFsYnVtID09ICJGZWFybGVzcyIpLA0KICAgICAgICAgYWVzKGxhYmVsID0gIHBhc3RlMCgiUmVsZWFzZSBZZWFyIFxuIiwgcmVsZWFzZV95ZWFyKSwgdmp1c3QgPSAtMSwgaGp1c3QgPSAtLjUpLCBzaXplID0gMi41KSArDQogICBnZW9tX2xhYmVsX3JlcGVsKGRhdGEgPSBzd2lmdF9hbGJ1bV9kYXRhICU+JSANCiAgICAgICAgIGZpbHRlcihjb3VudHJ5ID09ICJVSyIgICYgQWxidW0gPT0gIjE5ODkiKSwNCiAgICAgICAgIGFlcyhsYWJlbCA9IHBhc3RlMCgiUmVsZWFzZSBZZWFyIFxuIiwgcmVsZWFzZV95ZWFyKSwgdmp1c3QgPSAtLjUsIGhqdXN0ID0gMS41KSwgc2l6ZSA9IDIuNSkgKw0KICANCiAgDQogIGdndGl0bGUoIkFsYnVtIFNhbGVzIGJ5IENvdW50cnkiKSArDQogIA0KICAgIHRoZW1lKGF4aXMubGluZSA9IGVsZW1lbnRfbGluZShjb2xvdXIgPSAiYmxhY2siKSwNCiAgICAgICAgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGNvbG91ciA9ICJibGFjayIsIGZpbGwgPSBOQSksDQogICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIpLA0KICAgICAgICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9saW5lKGNvbG91ciA9ICJsaWdodCBncmF5IiksDQogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgYXhpcy50aWNrcy54ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IC41LCBzaXplID0gMTEpLA0KICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTEpLA0KICAgICAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNCwgZmFjZSA9ICJpdGFsaWMiKSwNCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgc2l6ZSA9IDE2LCBmYWNlID0gImJvbGQiKSwNCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiDQogICAgICAgICkgIA0KYGBgDQoNCiMjIFJhdyBEYXRhIFRhYmxlDQoNCiMjIyMjIFRoZSBncmFwaCB3YXMgZGV2ZWxvcGVkIGZyb20gdHdvIGRpZmZlcmVudCBkYXRhIHNldHMsIHVzaW5nIHRoZSBgam9pbmAgZnVuY3Rpb24uIEZyb20gdGhlIGBzd2lmdF9seXJpY3NgIGRhdGFmcmFtZSwgZWFjaCB3b3JkIHdhcyBjb3VudGVkIHRocm91Z2ggZGF0YSBtYW5pcHVsYXRpb24uIFRoZW4gdGhpcyBkYXRhZnJhbWUgd2FzIGFndW1lbmV0ZWQgdXNpbmcgdGhlIGBncm91cF9ieWAgZnVuY3Rpb24gdG8gZmluZCBzdGFuZGFyZCBtZWFzdXJlcy4gRmluYWxseSB0aGUgYGpvaW5gIGZ1bmN0aW9uIHdhcyBpbXBsaW1lbnRlZCB0byBjb25uZWN0IHRoZSBgc2FsZXNgIGRhdGFmcmFtZSB0byB0aGUgYHN3aWZ0X2RhdGFgIGRhdGFmcmFtZSwgZGV2ZWxvcGVkIGZyb20gdGhlIGluaXRpYWwgYHN3aWZ0X2x5cmljc2AgZGF0YXRyZmFtZS4gUGxlYXNlIGRvd25sb2FkIHRoaXMgZmlsZSB0byByZXZpZXcgdGhlIGZ1bGwgY29kZS4gT3Igc2VsZWN0IHRoZSAic2hvdyBvcHRpb24iIGluIHRoZSBkcm9wZG93biBtZW51ZSBmb3VuZCBpbiB0aGggdXBwZXIgcmlnaHQgaGFuZCBjb3JuZXIuDQoNCmBgYHtyfQ0Kc3dpZnRfYWxidW1fZGF0YSAlPiUNCiAga2JsKCkgJT4lDQogICAga2FibGVfbWF0ZXJpYWwoYygic3RyaXBlZCIsICJob3ZlciIpKQ0KDQpgYGANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg==