I conducted an analysis of public Facebook pages and groups that support US Presidential Candidates Donald Trump and Joe Biden to determine what pages are be most influential, may be coordinating to amplify content, and what topics they are discussing.

To identify pages and groups that support the candidates, I used the CrowdTangle API to search for pages and groups that have shared posts from the official Facebook pages of the candidates any time in the past year (October 2018 and October 2019). Below is the number of pages that were found which comprise the support “ecosystems” of pro-Trump and pro-Biden used in this analysis:

To identify which pages may be most influential among those identified, I used the CrowdTangle API to extract “Leaderboard” data from lists of pages and groups. Leaderboard data includes the number users that follow or are members of pages or groups and the number of interactions (likes, comments, and shares) that posts have received.

INFLUENCE ANALYSIS: PRO-TRUMP PAGES

In the pro-Trump Pages ecosystem, the most prominent pages ranked by number of interactions (likes, comments and shares) were “Pro-Trump” and “Pro-Republican” judging by the page names. Excluding the official page of Donald Trump, eight of the top 10 pages had over 2,000,000 interactions.

COORDINATION ANALYSIS: PRO-TRUMP PAGES

A social network analysis shows a large cluster of Pro-Trump pages that seem to engage in relatively loose coordination and share the same content. Two other small clusters also clearly emerged: one comprised of four influential pages “Trump2020”, “Conservative Renaissance”, “Red Symposium”, and “QCN”, and another comprised of three less influential pages from Illinois, North Dakota and South Dakota “Against the Illegal Alien Invasion.” - these smaller clusters clearly engage in coordinated efforts to amplify content.

TOPIC ANALYSIS: PRO-TRUMP PAGES

Democrats, borders, and the House of Representatives featured prominently. Mentions of Democrats were associated with “lies” and “political narratives”, borders with crisis and wall, and the House of Representatives with Nancy Pelosi and the Judiciary Committee. Fake news was also a notable topic and there was quite a bit of discussion of Hollywood (presumably anti).

COORDINATED CLUSTER TOPIC ANALYSIS: PRO-TRUMP PAGES

A closer look at the topics of posts in the coordination cluster comprised of “Red Symposium”, “QCN”, “Trump 2020”, “Conservative Renaissance” highlights strongly divisive anti-Democrat and anti-Liberal messaging. Mentions of “Democrats” or “Democratic Party” are associated with words such as “lies”, “extreme politics”, “identity politics”, and “America hating” while the term “Liberals” is associated with “violent.” There is also an association of “liberal”, “media”, and “hypocrisy” as well as a small, but strong clustering of the terms “god”, “bless”, “president” and “trump”.

A closer look at the topics of posts in the coordination cluster comprised of“Stand With Illinois Against The Illegal Alien Invasion”, “Stand With South Dakota Against The Illegal Alien Invasion”, “Stand With North Dakota Against The Illegal Alien Invasion” is a bit more narrowly focused on the topic of border security (this is not terribly surprising given the page names in the cluster).

INFLUENCE ANALYSIS: PRO-BIDEN PAGES

In the pro-Biden Pages ecosystem, the most prominent pages ranked by number of interactions (likes, comments and shares of posts) include a mix of pages that appear to be anti-Trump, pro-Obama, and pro-Democrat in general. The first page that mentions Joe Biden in its name (beyond the official page) is “Joe Biden for President 2020” which ranks 14th and has 4,519 followers. By contrast, there are four anti-Trump pages ranked in the top 10.

COORDINATION ANALYSIS: PRO-BIDEN PAGES

A social network analysis indicates that a cluster of lesser popular and distinctly location or identity-specific pro-Biden Pages (e.g. “Utah for Biden”, “Milwaukee for Joe Biden”, “Women For Biden”) are seemingly coordinating to amplify the same content. There appeared to be otherwise little coordination among other pages, such as anti-Trump or pro-Obama pages.

TOPIC ANALYSIS: PRO-BIDEN PAGES

A social network analysis of posts in pro-Biden Pages highlights health care and the Democratic primary race as prominent topics of conversation. A word association of those topics indicates that mentions of the Affordable Care Act and pre-existing conditions were referenced in posts about health care. Mentions of polls Elizabeth Warren, Bernie Sanders and Kamala Harris were associated with posts about the Democratic primary race. Donald Trump is frequently referenced along with mentions of Ukraine. Barack Obama and the House of Representatives were also frequent topics and there was some discussion of white supremacy (presumably anti).

INFLUENCE ANALYSIS: PRO-TRUMP GROUPS

In the pro-Trump Groups ecosystem, the most prominent groups were predominantly “Pro-Trump” and “Pro-Conservative” groups. Several groups had more than 5,000,000 interactions.

TOPIC ANALYSIS: PRO-TRUMP GROUPS

The Bidens, impeachment and the House of Representatives featured prominently. There was quite a bit of inter-related discussion on these topics with Donald Trump and impeachment at the center. Mentions of the Bidens were associated with Hunter and prosecutor, and the House of Representatives with the Intelligence Committee. Mainstream and fake news as well as god were also notable topics of conversation.

INFLUENCE ANALYSIS: PRO-BIDEN GROUPS

In the pro-Biden Groups ecosystem, the most prominent groups were predominantly “Anti-Trump” and “Pro-Democrat” groups. The most popular groups were “anti-Trump”, two of which - “FU Trump” and “A SKUNK NAMED TRUMP” receiving more than 5,000,000 interactions.

TOPIC ANALYSIS: PRO-BIDEN GROUPS

Donald Trump, Ukraine and Impeachment featured prominently. There was quite a bit of inter-related discussion on these topics with Donald Trump at the center of it. Mentions of Ukraine were associated with Giuliani and Zelensky, and impeachment with inquiry and Nancy Pelosi. Elizabeth Warren was mentioned, but other candidates did not feature prominently. Fake news was also a notable topic of conversation (presumably anti).

LS0tCnRpdGxlOiAiQ29vcmRpbmF0aW9uICYgVG9waWMgQW5hbHlzaXMgaW4gcHJvLVRydW1wICYgcHJvLUJpZGVuIEZhY2Vib29rIEVjb3N5c3RlbXMiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCkkgY29uZHVjdGVkIGFuIGFuYWx5c2lzIG9mIHB1YmxpYyBGYWNlYm9vayBwYWdlcyBhbmQgZ3JvdXBzIHRoYXQgc3VwcG9ydCBVUyBQcmVzaWRlbnRpYWwgQ2FuZGlkYXRlcyBEb25hbGQgVHJ1bXAgYW5kIEpvZSBCaWRlbiB0byBkZXRlcm1pbmUgd2hhdCBwYWdlcyBhcmUgYmUgbW9zdCBpbmZsdWVudGlhbCwgbWF5IGJlIGNvb3JkaW5hdGluZyB0byBhbXBsaWZ5IGNvbnRlbnQsIGFuZCB3aGF0IHRvcGljcyB0aGV5IGFyZSBkaXNjdXNzaW5nLiAKClRvIGlkZW50aWZ5IHBhZ2VzIGFuZCBncm91cHMgdGhhdCBzdXBwb3J0IHRoZSBjYW5kaWRhdGVzLCBJIHVzZWQgdGhlIENyb3dkVGFuZ2xlIEFQSSB0byBzZWFyY2ggZm9yIHBhZ2VzIGFuZCBncm91cHMgdGhhdCBoYXZlIHNoYXJlZCBwb3N0cyBmcm9tIHRoZSBvZmZpY2lhbCBGYWNlYm9vayBwYWdlcyBvZiB0aGUgY2FuZGlkYXRlcyBhbnkgdGltZSBpbiB0aGUgcGFzdCB5ZWFyIChPY3RvYmVyIDIwMTggYW5kIE9jdG9iZXIgMjAxOSkuIEJlbG93IGlzIHRoZSBudW1iZXIgb2YgcGFnZXMgdGhhdCB3ZXJlIGZvdW5kIHdoaWNoIGNvbXByaXNlIHRoZSBzdXBwb3J0ICJlY29zeXN0ZW1zIiBvZiBwcm8tVHJ1bXAgYW5kIHByby1CaWRlbiB1c2VkIGluIHRoaXMgYW5hbHlzaXM6CgoqIDEwMCBwcm8tVHJ1bXAgUGFnZXMgKDI5OSw5OTYgUG9zdHMpCiogMjE2IHByby1UcnVtcCBHcm91cHMgKDI5OSw5NzQgUG9zdHMpCiogNDggcHJvLUJpZGVuIFBhZ2VzICg4NiwzODcgUG9zdHMpCiogNzcgcHJvLUJpZGVuIEdyb3VwcyAoMjk5LDk5NSBQb3N0cykKClRvIGlkZW50aWZ5IHdoaWNoIHBhZ2VzIG1heSBiZSBtb3N0IGluZmx1ZW50aWFsIGFtb25nIHRob3NlIGlkZW50aWZpZWQsIEkgdXNlZCB0aGUgQ3Jvd2RUYW5nbGUgQVBJIHRvIGV4dHJhY3QgIkxlYWRlcmJvYXJkIiBkYXRhIGZyb20gbGlzdHMgb2YgcGFnZXMgYW5kIGdyb3Vwcy4gTGVhZGVyYm9hcmQgZGF0YSBpbmNsdWRlcyB0aGUgbnVtYmVyIHVzZXJzIHRoYXQgZm9sbG93IG9yIGFyZSBtZW1iZXJzIG9mIHBhZ2VzIG9yIGdyb3VwcyBhbmQgdGhlIG51bWJlciBvZiBpbnRlcmFjdGlvbnMgKGxpa2VzLCBjb21tZW50cywgYW5kIHNoYXJlcykgdGhhdCBwb3N0cyBoYXZlIHJlY2VpdmVkLiAKCmBgYHtyIGluY2x1ZGU9RkFMU0V9CiNMb2FkIFJlcXVpcmVkIFBhY2thZ2VzCnJlcXVpcmUoImRwbHlyIikKcmVxdWlyZSgic3RyaW5nciIpCnJlcXVpcmUoImdncGxvdDIiKQpyZXF1aXJlKCJ0aWR5dGV4dCIpCnJlcXVpcmUoInRpZHlyIikKcmVxdWlyZSgidGV4dG1pbmVSIikKcmVxdWlyZSgid2lkeXIiKQpyZXF1aXJlKCJ0b3BpY21vZGVscyIpCnJlcXVpcmUoImRybGliIikKcmVxdWlyZSgiaWdyYXBoIikKcmVxdWlyZSgiZ2dyYXBoIikKcmVxdWlyZSgiZHJsaWIiKQpyZXF1aXJlKCJzY2FsZXMiKQpyZXF1aXJlKCJqYW5pdG9yIikKcmVxdWlyZSgiRFQiKQpgYGAKCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQojUmVhZCBpbiBEYXRhIGZvciB0b3BpYyBhbmFseXNpcwpqYnBhZ2VzIDwtIHJlYWRSRFMoZmlsZT0iamJwYWdlc19vY3QxOC1vY3QxOS5yZGEiKQpkdHBhZ2VzIDwtIHJlYWRSRFMoZmlsZT0iZHRwYWdlc19vY3QxOC1vY3QxOS5yZGEiKQpqYmdyb3VwcyA8LSByZWFkUkRTKGZpbGU9ImpiZ3JvdXBzX29jdDE4LW9jdDE5LnJkYSIpCmR0Z3JvdXBzIDwtIHJlYWRSRFMoZmlsZT0iZHRncm91cHNfb2N0MTgtb2N0MTkucmRhIikKYGBgCgpgYGB7ciBpbmNsdWRlPUZBTFNFfQojUmVhZCBJbiBEYXRhIGZvciBMZWFkZXIgQW5hbHlzaXMgCmpicGFnZXNfbGVhZGVycyA8LSByZWFkUkRTKCJqYnBhZ2VzX2xlYWRlcnMucmRhIikKZHRwYWdlc19sZWFkZXJzIDwtIHJlYWRSRFMoImR0cGFnZXNfbGVhZGVycy5yZGEiKQpqYmdyb3Vwc19sZWFkZXJzIDwtIHJlYWRSRFMoImpiZ3JvdXBzX2xlYWRlcnMucmRhIikKZHRncm91cHNfbGVhZGVycyA8LSByZWFkUkRTKCJkdGdyb3Vwc19sZWFkZXJzLnJkYSIpCmBgYAoKYGBge3IgaW5jbHVkZT1GQUxTRX0KI1J1biBGdW5jdGlvbnMgZm9yIENsZWFuaW5nLCBUb2tlbml6aW5nICYgQ29ycmVsYXRpbmcgRGF0YQp0ZXh0X2NsZWFuIDwtIGZ1bmN0aW9uKGRhdGEsIHRleHQpIHsKICByZXF1aXJlKCJkcGx5ciIpCiAgdGV4dCA8LSBlbnF1byh0ZXh0KQogIGRhdGEgPC0gZGF0YSAlPiUgc2VsZWN0KCEhdGV4dCkgJT4lIGZpbHRlcighIXRleHQgIT0gIiIpICNyZW1vdmUgZW1wdHkgbWVzc2FnZXMKICBkYXRhIDwtIGRhdGEgJT4lIG11dGF0ZSh0ZXh0PWFzLmNoYXJhY3RlcighIXRleHQpKQogIGRhdGEgPC0gZGF0YSAlPiUgbXV0YXRlKHRleHQ9Z3N1YigiaHR0cFteWzpzcGFjZTpdXSoiLCAnJywgdGV4dCkpCiAgZGF0YSA8LSBkYXRhICU+JSBtdXRhdGUodGV4dD1nc3ViKCIjXFx3KyAqIiwgJycsIHRleHQpKQogIGRhdGEgPC0gZGF0YSAlPiUgbXV0YXRlKHRleHQ9Z3N1YigiQFxcdysgKiIsICcnLCB0ZXh0KSkKICBkYXRhIDwtIGRhdGEgJT4lIG11dGF0ZSh0ZXh0PWdzdWIoIlJUXFx3KyAqOiIsICcnLCB0ZXh0KSkgCiAgZGF0YSA8LSBkYXRhICU+JSBtdXRhdGUodGV4dD1nc3ViKCJbWzpkaWdpdDpdXSsiLCAnJywgdGV4dCkpCiAgZGF0YSA8LSBkYXRhICU+JSBtdXRhdGUodGV4dD1nc3ViKCJbWzpwdW5jdDpdXSsiLCAnJywgdGV4dCkpIAogIGRhdGEgPC0gZGF0YSAlPiUgbXV0YXRlKHRleHQ9Z3N1YigiW15bOmFsbnVtOl1dIiwnICcsIHRleHQpKQogIGRhdGEgPC0gZGF0YSAlPiUgZmlsdGVyKHRleHQgIT0gIiIpICU+JSBtdXRhdGUoaWQgPSByb3dfbnVtYmVyKCkpICU+JSB0cmFuc211dGUoaWQ9aWQsIHRleHQ9dGV4dCkgIAogIHJldHVybihkYXRhKQp9Cgp0ZXh0X3Rva2VuaXplIDwtIGZ1bmN0aW9uKGRhdGEsIHRleHQsIHN0b3B3b3Jkcz1OVUxMLCBuPU5VTEwpIHsKICByZXF1aXJlKCJkcGx5ciIpCiAgcmVxdWlyZSgidGlkeXIiKQogIHJlcXVpcmUoInRpZHl0ZXh0IikKICB0ZXh0PWVucXVvKHRleHQpCiAgaWYoaXMubnVsbChzdG9wd29yZHMpKSB7IHN0b3B3b3JkcyA8LSB0aWR5dGV4dDo6c3RvcF93b3JkcyB9CiAgaWYoaXMubnVsbChuKSkgeyBuIDwtIDEgfQogIHRva2VucyA8LSBkYXRhICU+JSB1bm5lc3RfdG9rZW5zKHdvcmQsICEhdGV4dCkKICB0b2tlbnMgPC0gdG9rZW5zICU+JSBmaWx0ZXIoIShuY2hhcih3b3JkKT09MSkpICU+JSBhbnRpX2pvaW4oc3RvcHdvcmRzKSAKICB0b2tlbnMgPC0gdG9rZW5zICU+JSBtdXRhdGUoaW5kPXJvd19udW1iZXIoKSkKICB0b2tlbnMgPC0gdG9rZW5zICU+JSBncm91cF9ieShpZCkgJT4lIG11dGF0ZShpbmQ9cm93X251bWJlcigpKSAlPiUgc3ByZWFkKGtleT1pbmQsIHZhbHVlPXdvcmQpIAogIHRva2Vuc1tpcy5uYSh0b2tlbnMpXSA8LSAiIgogIHRva2VucyA8LSB1bml0ZSh0b2tlbnMsIHRleHQsIC1pZCwgc2VwPSIgIikKICB0b2tlbnMkdGV4dCA8LSB0cmltd3ModG9rZW5zJHRleHQpCiAgdG9rZW5zIDwtIHRva2VucyAlPiUgdW5uZXN0X3Rva2VucyhuZ3JhbSwgdGV4dCwgdG9rZW49Im5ncmFtcyIsIG49bikKICByZXR1cm4odG9rZW5zKQp9Cgp0ZXh0X2NvcnJlbGF0aW9uIDwtIGZ1bmN0aW9uKGRhdGEsIG5ncmFtLCB0b3A9TlVMTCwgbWVudGlvbnM9TlVMTCkgewogIHJlcXVpcmUoImRwbHlyIikKICByZXF1aXJlKCJ3aWR5ciIpCiAgbmdyYW0gPC0gZW5xdW8obmdyYW0pCiAgaWYoaXMubnVsbCh0b3ApKSB7IHRvcCA8LSAyMCB9CiAgaWYoaXMubnVsbChtZW50aW9ucykpIHsgbWVudGlvbnMgPC0gMSB9CiAgdG9wX25ncmFtcyA8LSBkYXRhICU+JSBncm91cF9ieSghIW5ncmFtKSAlPiUgY291bnQoKSAlPiUgYXJyYW5nZShkZXNjKG4pKSAlPiUgaGVhZCh0b3ApCiAgdG9wX25ncmFtcyA8LSB0b3BfbmdyYW1zJG5ncmFtCiAgY29ycmVsYXRpb24gPC0gZGF0YSAlPiUgZ3JvdXBfYnkoISFuZ3JhbSkgJT4lIGZpbHRlcihuKCkgPj0gbWVudGlvbnMpICU+JSBwYWlyd2lzZV9jb3IobmdyYW0sIGlkLCBzb3J0PVQpCiAgdG9wX3RvcGljcyA8LSBjb3JyZWxhdGlvbiAlPiUgZmlsdGVyKGl0ZW0xICVpbiUgdG9wX25ncmFtcykgJT4lIHRyYW5zbXV0ZSh0b3BpYz1pdGVtMSwgbWVudGlvbj1pdGVtMiwgY29ycmVsYXRpb249Y29ycmVsYXRpb24pCiAgcmV0dXJuKHRvcF90b3BpY3MpCn0KCnRvcGljX3JlZHVjZSA8LSBmdW5jdGlvbihkYXRhLCB0b3BpYywgbWVudGlvbnM9TlVMTCkgewogIHJlcXVpcmUoImRwbHlyIikKICB0b3BpYyA8LSBlbnF1byh0b3BpYykKICAjc29ydCA8LSBlbnF1byhzb3J0KQogICNpZihpcy5udWxsKHNvcnQpKSB7IHNvcnQgPC0gY29ycmVsYXRpb24gfQogIGlmKGlzLm51bGwobWVudGlvbnMpKSB7IG1lbnRpb25zIDwtIDEwIH0KICBjbGVhbiA8LSBkYXRhICU+JSBncm91cF9ieSghIXRvcGljKSAlPiUgdG9wX24obWVudGlvbnMsIHd0PWNvcnJlbGF0aW9uKSAlPiUgdW5ncm91cCgpICU+JSBhcnJhbmdlKCEhdG9waWMsIGNvcnJlbGF0aW9uKSAlPiUgbXV0YXRlKC5yID0gcm93X251bWJlcigpKQogIHJldHVybihjbGVhbikKfQoKYGBgCiMjIyMgSU5GTFVFTkNFIEFOQUxZU0lTOiBQUk8tVFJVTVAgUEFHRVMKSW4gdGhlICoqcHJvLVRydW1wIFBhZ2VzIGVjb3N5c3RlbSoqLCB0aGUgbW9zdCBwcm9taW5lbnQgcGFnZXMgcmFua2VkIGJ5IG51bWJlciBvZiBpbnRlcmFjdGlvbnMgKGxpa2VzLCBjb21tZW50cyBhbmQgc2hhcmVzKSB3ZXJlIOKAnFByby1UcnVtcOKAnSBhbmQg4oCcUHJvLVJlcHVibGljYW4iIGp1ZGdpbmcgYnkgdGhlIHBhZ2UgbmFtZXMuIEV4Y2x1ZGluZyB0aGUgb2ZmaWNpYWwgcGFnZSBvZiBEb25hbGQgVHJ1bXAsIGVpZ2h0IG9mIHRoZSB0b3AgMTAgcGFnZXMgaGFkIG92ZXIgMiwwMDAsMDAwIGludGVyYWN0aW9ucy4KPGJyLz4KPGJyLz4KYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGV2YWw9VFJVRX0KZHRwYWdlc19pbnQgPC0gZHRwYWdlc19sZWFkZXJzICU+JSByZW5hbWUoTmFtZT1QYWdlKSAKCmRhdGF0YWJsZShkdHBhZ2VzX2ludCwgb3B0aW9ucz1saXN0KG9yZGVyPWxpc3QobGlzdCgzLCAnZGVzYycpKSkpCmBgYAoKIyMjIyBDT09SRElOQVRJT04gQU5BTFlTSVM6IFBSTy1UUlVNUCBQQUdFUwpBIHNvY2lhbCBuZXR3b3JrIGFuYWx5c2lzIHNob3dzIGEgbGFyZ2UgY2x1c3RlciBvZiBQcm8tVHJ1bXAgcGFnZXMgdGhhdCBzZWVtIHRvIGVuZ2FnZSBpbiByZWxhdGl2ZWx5IGxvb3NlIGNvb3JkaW5hdGlvbiBhbmQgc2hhcmUgdGhlIHNhbWUgY29udGVudC4gVHdvIG90aGVyIHNtYWxsIGNsdXN0ZXJzIGFsc28gY2xlYXJseSBlbWVyZ2VkOiBvbmUgY29tcHJpc2VkIG9mIGZvdXIgaW5mbHVlbnRpYWwgcGFnZXMg4oCcVHJ1bXAyMDIw4oCdLCDigJxDb25zZXJ2YXRpdmUgUmVuYWlzc2FuY2XigJ0sIOKAnFJlZCBTeW1wb3NpdW3igJ0sIGFuZCDigJxRQ07igJ0sIGFuZCBhbm90aGVyIGNvbXByaXNlZCBvZiB0aHJlZSBsZXNzIGluZmx1ZW50aWFsIHBhZ2VzIGZyb20gSWxsaW5vaXMsIE5vcnRoIERha290YSBhbmQgU291dGggRGFrb3RhIOKAnEFnYWluc3QgdGhlIElsbGVnYWwgQWxpZW4gSW52YXNpb24u4oCdIC0gdGhlc2Ugc21hbGxlciBjbHVzdGVycyBjbGVhcmx5IGVuZ2FnZSBpbiBjb29yZGluYXRlZCBlZmZvcnRzIHRvIGFtcGxpZnkgY29udGVudC4gCjxici8+Cjxici8+CmBgYHtyLCBpbmNsdWRlPUZBTFNFfQpkdHBhZ2VzX2ZhY2Vib29rIDwtIGR0cGFnZXMgJT4lIGZpbHRlcihzdHJfZGV0ZWN0KExpbmssICJodHRwczovL3d3dy5mYWNlYm9vay5jb20iKSkgJT4lIG11dGF0ZShTaGFyZWQuUGFnZSA9IHN0cl9tYXRjaChMaW5rLCAiOi8vKC4qPykvKC4qPykvIilbLDNdKQojaGVhZChkdHBhZ2VzX2ZhY2Vib29rMikKCmR0cGFnZXNfZmFjZWJvb2tfbmV0d29yayA8LSBkdHBhZ2VzX2ZhY2Vib29rICU+JSBmaWx0ZXIoUGFnZS5OYW1lICE9IFNoYXJlZC5QYWdlKSAlPiUgc2VsZWN0KFNoYXJlZC5QYWdlLCBQYWdlLk5hbWUpCmR0cGFnZXNfY291bnRzIDwtIGR0cGFnZXNfZmFjZWJvb2tfbmV0d29yayAlPiUgY291bnQoUGFnZS5OYW1lKSAlPiUgYXJyYW5nZShkZXNjKG4pKQpkdHBhZ2VzX3BhZ2VfY29ycmVsYXRpb25zIDwtIGR0cGFnZXNfZmFjZWJvb2tfbmV0d29yayAlPiUgc2VtaV9qb2luKGR0cGFnZXNfY291bnRzKSAlPiUgcGFpcndpc2VfY29yKFBhZ2UuTmFtZSwgU2hhcmVkLlBhZ2UsIHNvcnQ9VCwgdXBwZXI9IEYpCmBgYAoKYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGV2YWw9VFJVRX0Kc2V0LnNlZWQoMjAxOSkKCmR0cF9jb29yZGluYXRpb25fc25hIDwtIGR0cGFnZXNfcGFnZV9jb3JyZWxhdGlvbnMgJT4lCiAgZmlsdGVyKGNvcnJlbGF0aW9uID4gLjMpICU+JQogIGdyYXBoX2Zyb21fZGF0YV9mcmFtZShkaXJlY3RlZCA9IFQpICU+JQogIGdncmFwaChsYXlvdXQgPSAiZnIiKSArCiAgZ2VvbV9lZGdlX2xpbmsoYWVzKGVkZ2VfYWxwaGEgPSBjb3JyZWxhdGlvbiksIHNob3cubGVnZW5kID0gRkFMU0UpICsKICBnZW9tX25vZGVfcG9pbnQoY29sb3IgPSAicmVkIiwgc2l6ZSA9IDMpICsKICBnZW9tX25vZGVfdGV4dChhZXMobGFiZWwgPSBuYW1lKSwgcmVwZWwgPSBUUlVFKSArCiAgdGhlbWVfdm9pZCgpCgpkdHBfY29vcmRpbmF0aW9uX3NuYQpgYGAKCiMjIyMgVE9QSUMgQU5BTFlTSVM6IFBSTy1UUlVNUCBQQUdFUwpEZW1vY3JhdHMsIGJvcmRlcnMsIGFuZCB0aGUgSG91c2Ugb2YgUmVwcmVzZW50YXRpdmVzIGZlYXR1cmVkIHByb21pbmVudGx5LiBNZW50aW9ucyBvZiBEZW1vY3JhdHMgd2VyZSBhc3NvY2lhdGVkIHdpdGgg4oCcbGllc+KAnSBhbmQg4oCccG9saXRpY2FsIG5hcnJhdGl2ZXPigJ0sIGJvcmRlcnMgd2l0aCBjcmlzaXMgYW5kIHdhbGwsIGFuZCB0aGUgSG91c2Ugb2YgUmVwcmVzZW50YXRpdmVzIHdpdGggTmFuY3kgUGVsb3NpIGFuZCB0aGUgSnVkaWNpYXJ5IENvbW1pdHRlZS4gRmFrZSBuZXdzIHdhcyBhbHNvIGEgbm90YWJsZSB0b3BpYyBhbmQgdGhlcmUgd2FzIHF1aXRlIGEgYml0IG9mIGRpc2N1c3Npb24gb2YgSG9sbHl3b29kIChwcmVzdW1hYmx5IGFudGkpLgoKYGBge3IsIGluY2x1ZGU9RkFMU0V9CmR0cGFnZXMyIDwtIGR0cGFnZXMgJT4lIHVuZ3JvdXAoKQpkdHBhZ2VzX3RleHQgPC0gdGV4dF9jbGVhbihkYXRhPWR0cGFnZXMyLCB0ZXh0PU1lc3NhZ2UpCmR0cGFnZXNfdG9rZW5zIDwtIHRleHRfdG9rZW5pemUoZGF0YT1kdHBhZ2VzX3RleHQsIHRleHQ9dGV4dCwgc3RvcHdvcmRzPU5VTEwsIG49MSkgIApkdHBhZ2VzX2NvcnJlbGF0aW9uIDwtIHRleHRfY29ycmVsYXRpb24oZGF0YT1kdHBhZ2VzX3Rva2VucywgbmdyYW09bmdyYW0sIHRvcD0yMCwgbWVudGlvbnM9MjApCgojQ2xlYW4gVGV4dCBmb3IgV29yZHMgVGhhdCBBcmUgTm90IFJlbGV2YW50CmR0cGFnZXNfY29ycmVsYXRpb24gJT4lIGdyb3VwX2J5KHRvcGljKSAlPiUgdG9wX24obj0xMCwgd3Q9Y29ycmVsYXRpb24pICU+JSBhcnJhbmdlKHRvcGljKQojSW5zcGVjdCBvbmUtYnktb25lIHRvIG1ha2Ugc3VyZSB5b3UncmUgbm90IG1pc3Npbmcgc29tZXRoaW5nCmR0cGFnZXNfdG9waWNzX2NsZWFuIDwtIGR0cGFnZXNfY29ycmVsYXRpb24gJT4lIGZpbHRlcighdG9waWMgJWluJSBjKCJ3YXJyaW9yIiwgImFuZ2VsIiwgInJlYmVsIiwgInJvdXNlciIsICJ0aW1lIiwgImRvbnQiLCAiYW1lcmljYW4iLCAiZG9uYWxkIikpCiNSZWR1Y2UgVG9waWNzICYgUHJlcCBGb3IgUGxvdHRpbmcKZHRwYWdlc190b3BpY3MgPC0gdG9waWNfcmVkdWNlKGR0cGFnZXNfdG9waWNzX2NsZWFuLCB0b3BpYz10b3BpYywgbWVudGlvbnM9MTApCiNkdHBhZ2VzX3RvcGljcyAKYGBgCgpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgZXZhbD1UUlVFfQpkdHBfdG9waWNzX2JhciA8LSBkdHBhZ2VzX3RvcGljcyAlPiUgZ2dwbG90KGFlcyh4PS5yLCB5PWNvcnJlbGF0aW9uKSkgKwogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCBjb2xvcj0ncmVkJyxmaWxsPSdmaXJlYnJpY2snKSArCiAgZmFjZXRfd3JhcCh+IHRvcGljLCBzY2FsZXMgPSAiZnJlZSIpICsKICBjb29yZF9mbGlwKCkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBkdHBhZ2VzX3RvcGljcyQuciwKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gZHRwYWdlc190b3BpY3MkbWVudGlvbikKCnNldC5zZWVkKDIwMTkpCmR0cF90b3BpY3Nfc25hIDwtIGR0cGFnZXNfdG9waWNzICU+JQogIGZpbHRlcihjb3JyZWxhdGlvbiA+IC4xNSkgJT4lCiAgZ3JhcGhfZnJvbV9kYXRhX2ZyYW1lKCkgJT4lCiAgZ2dyYXBoKGxheW91dCA9ICJmciIpICsKICBnZW9tX2VkZ2VfbGluayhhZXMoZWRnZV9hbHBoYSA9IGNvcnJlbGF0aW9uKSwgc2hvdy5sZWdlbmQgPSBGQUxTRSkgKwogIGdlb21fbm9kZV9wb2ludChjb2xvciA9ICJyZWQiLCBzaXplID0gMykgKwogIGdlb21fbm9kZV90ZXh0KGFlcyhsYWJlbCA9IG5hbWUpLCByZXBlbCA9IFRSVUUpICsKICB0aGVtZV92b2lkKCkKCmR0cF90b3BpY3Nfc25hCmR0cF90b3BpY3NfYmFyCgpgYGAKCiMjI0NPT1JESU5BVEVEIENMVVNURVIgVE9QSUMgQU5BTFlTSVM6IFBSTy1UUlVNUCBQQUdFUwpBIGNsb3NlciBsb29rIGF0IHRoZSB0b3BpY3Mgb2YgcG9zdHMgaW4gdGhlIGNvb3JkaW5hdGlvbiBjbHVzdGVyIGNvbXByaXNlZCBvZiAiUmVkIFN5bXBvc2l1bSIsICJRQ04iLCAiVHJ1bXAgMjAyMCIsICJDb25zZXJ2YXRpdmUgUmVuYWlzc2FuY2UiIGhpZ2hsaWdodHMgc3Ryb25nbHkgZGl2aXNpdmUgYW50aS1EZW1vY3JhdCBhbmQgYW50aS1MaWJlcmFsIG1lc3NhZ2luZy4gTWVudGlvbnMgb2YgIkRlbW9jcmF0cyIgb3IgIkRlbW9jcmF0aWMgUGFydHkiIGFyZSBhc3NvY2lhdGVkIHdpdGggd29yZHMgc3VjaCBhcyAibGllcyIsICJleHRyZW1lIHBvbGl0aWNzIiwgImlkZW50aXR5IHBvbGl0aWNzIiwgYW5kICJBbWVyaWNhIGhhdGluZyIgd2hpbGUgdGhlIHRlcm0gIkxpYmVyYWxzIiBpcyBhc3NvY2lhdGVkIHdpdGggInZpb2xlbnQuIiBUaGVyZSBpcyBhbHNvIGFuIGFzc29jaWF0aW9uIG9mICJsaWJlcmFsIiwgIm1lZGlhIiwgYW5kICJoeXBvY3Jpc3kiIGFzIHdlbGwgYXMgYSBzbWFsbCwgYnV0IHN0cm9uZyBjbHVzdGVyaW5nIG9mIHRoZSB0ZXJtcyAiZ29kIiwgImJsZXNzIiwgInByZXNpZGVudCIgYW5kICJ0cnVtcCIuCgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KY2x1c3Rlcl80IDwtIGMoIlJlZCBTeW1wb3NpdW0iLCAiUUNOIiwgIlRydW1wIDIwMjAiLCAiQ29uc2VydmF0aXZlIFJlbmFpc3NhbmNlIikKZHRwYWdlczMgPC0gZHRwYWdlczIgJT4lIGZpbHRlcihQYWdlLk5hbWUgJWluJSBjbHVzdGVyXzQpCmR0cGFnZXNfdGV4dF9jbHVzdGVyXzQgPC0gdGV4dF9jbGVhbihkYXRhPWR0cGFnZXMzLCB0ZXh0PU1lc3NhZ2UpCmR0cGFnZXNfdG9rZW5zX2NsdXN0ZXJfNCA8LSB0ZXh0X3Rva2VuaXplKGRhdGE9ZHRwYWdlc190ZXh0X2NsdXN0ZXJfNCwgdGV4dD10ZXh0LCBzdG9wd29yZHM9TlVMTCwgbj0xKSAgCmR0cGFnZXNfY29ycmVsYXRpb25fY2x1c3Rlcl80IDwtIHRleHRfY29ycmVsYXRpb24oZGF0YT1kdHBhZ2VzX3Rva2Vuc19jbHVzdGVyXzQsIG5ncmFtPW5ncmFtLCB0b3A9MjAsIG1lbnRpb25zPTIwKQoKI0NsZWFuIFRleHQgZm9yIFdvcmRzIFRoYXQgQXJlIE5vdCBSZWxldmFudApkdHBhZ2VzX2NvcnJlbGF0aW9uX2NsdXN0ZXJfNCAlPiUgZ3JvdXBfYnkodG9waWMpICU+JSB0b3BfbihuPTEwLCB3dD1jb3JyZWxhdGlvbikgJT4lIGFycmFuZ2UodG9waWMpCiNJbnNwZWN0IG9uZS1ieS1vbmUgdG8gbWFrZSBzdXJlIHlvdSdyZSBub3QgbWlzc2luZyBzb21ldGhpbmcKI2R0cGFnZXNfdG9waWNzX2NsZWFuIDwtIGR0cGFnZXNfY29ycmVsYXRpb24gJT4lIGZpbHRlcighdG9waWMgJWluJSBjKCJ3YXJyaW9yIiwgImFuZ2VsIiwgInJlYmVsIiwgInJvdXNlciIsICJ0aW1lIiwgImRvbnQiLCAiYW1lcmljYW4iLCAiZG9uYWxkIikpCiNSZWR1Y2UgVG9waWNzICYgUHJlcCBGb3IgUGxvdHRpbmcKZHRwYWdlc190b3BpY3NfY2x1c3Rlcl80IDwtIHRvcGljX3JlZHVjZShkdHBhZ2VzX2NvcnJlbGF0aW9uX2NsdXN0ZXJfNCwgdG9waWM9dG9waWMsIG1lbnRpb25zPTEwKQojZHRwYWdlc190b3BpY3MgCmBgYAoKYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGV2YWw9VFJVRX0KI2R0cF90b3BpY3NfYmFyIDwtIGR0cGFnZXNfdG9waWNzICU+JSBnZ3Bsb3QoYWVzKHg9LnIsIHk9Y29ycmVsYXRpb24pKSArCiMgIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCBjb2xvcj0ncmVkJyxmaWxsPSdmaXJlYnJpY2snKSArCiMgIGZhY2V0X3dyYXAofiB0b3BpYywgc2NhbGVzID0gImZyZWUiKSArCiMgIGNvb3JkX2ZsaXAoKSArCiMgIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBkdHBhZ2VzX3RvcGljcyQuciwKIyAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGR0cGFnZXNfdG9waWNzJG1lbnRpb24pCgpzZXQuc2VlZCgyMDE5KQpkdHBfdG9waWNzX3NuYV9jbHVzdGVyXzQgPC0gZHRwYWdlc190b3BpY3NfY2x1c3Rlcl80ICU+JQogIGZpbHRlcihjb3JyZWxhdGlvbiA+IC4xNSkgJT4lCiAgZ3JhcGhfZnJvbV9kYXRhX2ZyYW1lKCkgJT4lCiAgZ2dyYXBoKGxheW91dCA9ICJmciIpICsKICBnZW9tX2VkZ2VfbGluayhhZXMoZWRnZV9hbHBoYSA9IGNvcnJlbGF0aW9uKSwgc2hvdy5sZWdlbmQgPSBGQUxTRSkgKwogIGdlb21fbm9kZV9wb2ludChjb2xvciA9ICJyZWQiLCBzaXplID0gMykgKwogIGdlb21fbm9kZV90ZXh0KGFlcyhsYWJlbCA9IG5hbWUpLCByZXBlbCA9IFRSVUUpICsKICB0aGVtZV92b2lkKCkKCmR0cF90b3BpY3Nfc25hX2NsdXN0ZXJfNAojZHRwX3RvcGljc19iYXIKYGBgCgpBIGNsb3NlciBsb29rIGF0IHRoZSB0b3BpY3Mgb2YgcG9zdHMgaW4gdGhlIGNvb3JkaW5hdGlvbiBjbHVzdGVyIGNvbXByaXNlZCBvZiJTdGFuZCBXaXRoIElsbGlub2lzIEFnYWluc3QgVGhlIElsbGVnYWwgQWxpZW4gSW52YXNpb24iLCAiU3RhbmQgV2l0aCBTb3V0aCBEYWtvdGEgQWdhaW5zdCBUaGUgSWxsZWdhbCBBbGllbiBJbnZhc2lvbiIsICJTdGFuZCBXaXRoIE5vcnRoIERha290YSBBZ2FpbnN0IFRoZSBJbGxlZ2FsIEFsaWVuIEludmFzaW9uIiBpcyBhIGJpdCBtb3JlIG5hcnJvd2x5IGZvY3VzZWQgb24gdGhlIHRvcGljIG9mIGJvcmRlciBzZWN1cml0eSAodGhpcyBpcyBub3QgdGVycmlibHkgc3VycHJpc2luZyBnaXZlbiB0aGUgcGFnZSBuYW1lcyBpbiB0aGUgY2x1c3RlcikuICAgCgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KY2x1c3Rlcl8zIDwtIGMoIlN0YW5kIFdpdGggSWxsaW5vaXMgQWdhaW5zdCBUaGUgSWxsZWdhbCBBbGllbiBJbnZhc2lvbiIsICJTdGFuZCBXaXRoIFNvdXRoIERha290YSBBZ2FpbnN0IFRoZSBJbGxlZ2FsIEFsaWVuIEludmFzaW9uIiwgIlN0YW5kIFdpdGggTm9ydGggRGFrb3RhIEFnYWluc3QgVGhlIElsbGVnYWwgQWxpZW4gSW52YXNpb24iKQpkdHBhZ2VzNCA8LSBkdHBhZ2VzMiAlPiUgZmlsdGVyKFBhZ2UuTmFtZSAlaW4lIGNsdXN0ZXJfMykKZHRwYWdlc190ZXh0X2NsdXN0ZXJfMyA8LSB0ZXh0X2NsZWFuKGRhdGE9ZHRwYWdlczQsIHRleHQ9TWVzc2FnZSkKZHRwYWdlc190b2tlbnNfY2x1c3Rlcl8zIDwtIHRleHRfdG9rZW5pemUoZGF0YT1kdHBhZ2VzX3RleHRfY2x1c3Rlcl8zLCB0ZXh0PXRleHQsIHN0b3B3b3Jkcz1OVUxMLCBuPTEpICAKZHRwYWdlc19jb3JyZWxhdGlvbl9jbHVzdGVyXzMgPC0gdGV4dF9jb3JyZWxhdGlvbihkYXRhPWR0cGFnZXNfdG9rZW5zX2NsdXN0ZXJfMywgbmdyYW09bmdyYW0sIHRvcD0yMCwgbWVudGlvbnM9MjApCgojQ2xlYW4gVGV4dCBmb3IgV29yZHMgVGhhdCBBcmUgTm90IFJlbGV2YW50CmR0cGFnZXNfY29ycmVsYXRpb25fY2x1c3Rlcl8zICU+JSBncm91cF9ieSh0b3BpYykgJT4lIHRvcF9uKG49MTAsIHd0PWNvcnJlbGF0aW9uKSAlPiUgYXJyYW5nZSh0b3BpYykKI0luc3BlY3Qgb25lLWJ5LW9uZSB0byBtYWtlIHN1cmUgeW91J3JlIG5vdCBtaXNzaW5nIHNvbWV0aGluZwpkdHBhZ2VzX3RvcGljc19jbGVhbl9jbHVzdGVyXzMgPC0gZHRwYWdlc19jb3JyZWxhdGlvbl9jbHVzdGVyXzMgJT4lIGZpbHRlcighdG9waWMgJWluJSBjKCJydXRoaWUiKSkKI1JlZHVjZSBUb3BpY3MgJiBQcmVwIEZvciBQbG90dGluZwpkdHBhZ2VzX3RvcGljc19jbHVzdGVyXzMgPC0gdG9waWNfcmVkdWNlKGR0cGFnZXNfY29ycmVsYXRpb25fY2x1c3Rlcl8zLCB0b3BpYz10b3BpYywgbWVudGlvbnM9MTApCiNkdHBhZ2VzX3RvcGljcyAKYGBgCgpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgZXZhbD1UUlVFfQojZHRwX3RvcGljc19iYXIgPC0gZHRwYWdlc190b3BpY3MgJT4lIGdncGxvdChhZXMoeD0uciwgeT1jb3JyZWxhdGlvbikpICsKIyAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIGNvbG9yPSdyZWQnLGZpbGw9J2ZpcmVicmljaycpICsKIyAgZmFjZXRfd3JhcCh+IHRvcGljLCBzY2FsZXMgPSAiZnJlZSIpICsKIyAgY29vcmRfZmxpcCgpICsKIyAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IGR0cGFnZXNfdG9waWNzJC5yLAojICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gZHRwYWdlc190b3BpY3MkbWVudGlvbikKCnNldC5zZWVkKDIwMTkpCmR0cF90b3BpY3Nfc25hX2NsdXN0ZXJfMyA8LSBkdHBhZ2VzX3RvcGljc19jbHVzdGVyXzMgJT4lCiAgZmlsdGVyKGNvcnJlbGF0aW9uID4gLjE1KSAlPiUKICBncmFwaF9mcm9tX2RhdGFfZnJhbWUoKSAlPiUKICBnZ3JhcGgobGF5b3V0ID0gImZyIikgKwogIGdlb21fZWRnZV9saW5rKGFlcyhlZGdlX2FscGhhID0gY29ycmVsYXRpb24pLCBzaG93LmxlZ2VuZCA9IEZBTFNFKSArCiAgZ2VvbV9ub2RlX3BvaW50KGNvbG9yID0gInJlZCIsIHNpemUgPSAzKSArCiAgZ2VvbV9ub2RlX3RleHQoYWVzKGxhYmVsID0gbmFtZSksIHJlcGVsID0gVFJVRSkgKwogIHRoZW1lX3ZvaWQoKQoKZHRwX3RvcGljc19zbmFfY2x1c3Rlcl8zCiNkdHBfdG9waWNzX2JhcgpgYGAKCiMjIyMgSU5GTFVFTkNFIEFOQUxZU0lTOiBQUk8tQklERU4gUEFHRVMKSW4gdGhlICoqcHJvLUJpZGVuIFBhZ2VzIGVjb3N5c3RlbSoqLCB0aGUgbW9zdCBwcm9taW5lbnQgcGFnZXMgcmFua2VkIGJ5IG51bWJlciBvZiBpbnRlcmFjdGlvbnMgKGxpa2VzLCBjb21tZW50cyBhbmQgc2hhcmVzIG9mIHBvc3RzKSBpbmNsdWRlIGEgbWl4IG9mIHBhZ2VzIHRoYXQgYXBwZWFyIHRvIGJlIGFudGktVHJ1bXAsIHByby1PYmFtYSwgYW5kIHByby1EZW1vY3JhdCBpbiBnZW5lcmFsLiBUaGUgZmlyc3QgcGFnZSB0aGF0IG1lbnRpb25zIEpvZSBCaWRlbiBpbiBpdHMgbmFtZSAoYmV5b25kIHRoZSBvZmZpY2lhbCBwYWdlKSBpcyAiSm9lIEJpZGVuIGZvciBQcmVzaWRlbnQgMjAyMCIgd2hpY2ggcmFua3MgMTR0aCBhbmQgaGFzIDQsNTE5IGZvbGxvd2Vycy4gQnkgY29udHJhc3QsIHRoZXJlIGFyZSBmb3VyIGFudGktVHJ1bXAgcGFnZXMgcmFua2VkIGluIHRoZSB0b3AgMTAuCjxici8+Cjxici8+CmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBldmFsPVRSVUV9CmpicGFnZXNfaW50IDwtIGpicGFnZXNfbGVhZGVycyAlPiUgcmVuYW1lKE5hbWU9UGFnZSkgJT4lIGZpbHRlcighTmFtZSAlaW4lIGMoIktsYXVzIElvaGFubmlzIC0gUHJlc2VkaW50ZWxlIFJvbWFuaWVpIiwgIs6oIHwg0JzQmCDQn9CQ0KLQoNCG0J7QotCYINCj0JrQoNCQ0IfQndCYIHwgzqgiLCAiV2UgQXJlIFEiLCAiRGFjaWFuIENpb2xvcyIpKQoKZGF0YXRhYmxlKGpicGFnZXNfaW50LCBvcHRpb25zPWxpc3Qob3JkZXI9bGlzdChsaXN0KDMsICdkZXNjJykpKSkKYGBgCgojIyMjIENPT1JESU5BVElPTiBBTkFMWVNJUzogUFJPLUJJREVOIFBBR0VTCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQpqYnBhZ2VzX2ZhY2Vib29rIDwtIGpicGFnZXMgJT4lIGZpbHRlcihzdHJfZGV0ZWN0KExpbmssICJodHRwczovL3d3dy5mYWNlYm9vay5jb20iKSkgJT4lIG11dGF0ZShTaGFyZWQuUGFnZSA9IHN0cl9tYXRjaChMaW5rLCAiOi8vKC4qPykvKC4qPykvIilbLDNdKQojaGVhZChqYnBhZ2VzX2ZhY2Vib29rKQoKamJwYWdlc19mYWNlYm9va19uZXR3b3JrIDwtIGpicGFnZXNfZmFjZWJvb2sgJT4lIGZpbHRlcihQYWdlLk5hbWUgIT0gU2hhcmVkLlBhZ2UpICU+JSBzZWxlY3QoU2hhcmVkLlBhZ2UsIFBhZ2UuTmFtZSkKamJwYWdlc19jb3VudHMgPC0gamJwYWdlc19mYWNlYm9va19uZXR3b3JrICU+JSBjb3VudChQYWdlLk5hbWUpICU+JSBhcnJhbmdlKGRlc2MobikpCmpicGFnZXNfcGFnZV9jb3JyZWxhdGlvbnMgPC0gamJwYWdlc19mYWNlYm9va19uZXR3b3JrICU+JSBzZW1pX2pvaW4oamJwYWdlc19jb3VudHMpICU+JSBwYWlyd2lzZV9jb3IoUGFnZS5OYW1lLCBTaGFyZWQuUGFnZSwgc29ydD1ULCB1cHBlcj0gRikKYGBgCgpBIHNvY2lhbCBuZXR3b3JrIGFuYWx5c2lzIGluZGljYXRlcyB0aGF0IGEgY2x1c3RlciBvZiBsZXNzZXIgcG9wdWxhciBhbmQgZGlzdGluY3RseSBsb2NhdGlvbiBvciBpZGVudGl0eS1zcGVjaWZpYyBwcm8tQmlkZW4gUGFnZXMgKGUuZy4gIlV0YWggZm9yIEJpZGVuIiwgIk1pbHdhdWtlZSBmb3IgSm9lIEJpZGVuIiwgIldvbWVuIEZvciBCaWRlbiIpIGFyZSBzZWVtaW5nbHkgY29vcmRpbmF0aW5nIHRvIGFtcGxpZnkgdGhlIHNhbWUgY29udGVudC4gVGhlcmUgYXBwZWFyZWQgdG8gYmUgb3RoZXJ3aXNlIGxpdHRsZSBjb29yZGluYXRpb24gYW1vbmcgb3RoZXIgcGFnZXMsIHN1Y2ggYXMgYW50aS1UcnVtcCBvciBwcm8tT2JhbWEgcGFnZXMuCjxici8+Cjxici8+CgpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgZXZhbD1UUlVFfQpzZXQuc2VlZCgyMDE5KQoKamJwX2Nvb3JkaW5hdGlvbl9zbmEgPC0gamJwYWdlc19wYWdlX2NvcnJlbGF0aW9ucyAlPiUKICBmaWx0ZXIoY29ycmVsYXRpb24gPiAuMykgJT4lCiAgZ3JhcGhfZnJvbV9kYXRhX2ZyYW1lKGRpcmVjdGVkID0gVCkgJT4lCiAgZ2dyYXBoKGxheW91dCA9ICJmciIpICsKICBnZW9tX2VkZ2VfbGluayhhZXMoZWRnZV9hbHBoYSA9IGNvcnJlbGF0aW9uKSwgc2hvdy5sZWdlbmQgPSBGQUxTRSkgKwogIGdlb21fbm9kZV9wb2ludChjb2xvciA9ICJibHVlIiwgc2l6ZSA9IDMpICsKICBnZW9tX25vZGVfdGV4dChhZXMobGFiZWwgPSBuYW1lKSwgcmVwZWwgPSBUUlVFKSArCiAgdGhlbWVfdm9pZCgpCgojZHRwYWdlc19wYWdlX2NvcnJlbGF0aW9ucyAlPiUgZGF0YXRhYmxlKGNsYXNzID0gJ2NlbGwtYm9yZGVyIHN0cmlwZScsIGNhcHRpb24gPSAnVG9wIHNoYXJlZCBGYWNlYm9vayBQYWdlcywgR3JvdXBzLCBvciBwcm9maWxlcyBieSBzaGFyZXInKQpqYnBfY29vcmRpbmF0aW9uX3NuYQpgYGAKCiMjIyMgVE9QSUMgQU5BTFlTSVM6IFBSTy1CSURFTiBQQUdFUwpBIHNvY2lhbCBuZXR3b3JrIGFuYWx5c2lzIG9mIHBvc3RzIGluIHByby1CaWRlbiBQYWdlcyBoaWdobGlnaHRzIGhlYWx0aCBjYXJlIGFuZCB0aGUgRGVtb2NyYXRpYyBwcmltYXJ5IHJhY2UgYXMgcHJvbWluZW50IHRvcGljcyBvZiBjb252ZXJzYXRpb24uIEEgd29yZCBhc3NvY2lhdGlvbiBvZiB0aG9zZSB0b3BpY3MgaW5kaWNhdGVzIHRoYXQgbWVudGlvbnMgb2YgdGhlIEFmZm9yZGFibGUgQ2FyZSBBY3QgYW5kIHByZS1leGlzdGluZyBjb25kaXRpb25zIHdlcmUgcmVmZXJlbmNlZCBpbiBwb3N0cyBhYm91dCBoZWFsdGggY2FyZS4gTWVudGlvbnMgb2YgcG9sbHMgRWxpemFiZXRoIFdhcnJlbiwgQmVybmllIFNhbmRlcnMgYW5kIEthbWFsYSBIYXJyaXMgd2VyZSBhc3NvY2lhdGVkIHdpdGggcG9zdHMgYWJvdXQgdGhlIERlbW9jcmF0aWMgcHJpbWFyeSByYWNlLiBEb25hbGQgVHJ1bXAgaXMgZnJlcXVlbnRseSByZWZlcmVuY2VkIGFsb25nIHdpdGggbWVudGlvbnMgb2YgVWtyYWluZS4gQmFyYWNrIE9iYW1hIGFuZCB0aGUgSG91c2Ugb2YgUmVwcmVzZW50YXRpdmVzIHdlcmUgYWxzbyBmcmVxdWVudCB0b3BpY3MgYW5kIHRoZXJlIHdhcyBzb21lIGRpc2N1c3Npb24gb2Ygd2hpdGUgc3VwcmVtYWN5IChwcmVzdW1hYmx5IGFudGkpLiAgCgpgYGB7ciBpbmNsdWRlPUZBTFNFfQojUHJlcCBEYXRhIGZvciBUb3BpYyBBbmFseXNpcwpqYnBhZ2VzMiA8LSBqYnBhZ2VzICU+JSB1bmdyb3VwKCkKamJwYWdlc190ZXh0IDwtIHRleHRfY2xlYW4oZGF0YT1qYnBhZ2VzMiwgdGV4dD1NZXNzYWdlKQpqYnBhZ2VzX3Rva2VucyA8LSB0ZXh0X3Rva2VuaXplKGRhdGE9amJwYWdlc190ZXh0LCB0ZXh0PXRleHQsIHN0b3B3b3Jkcz1OVUxMLCBuPTEpICAKamJwYWdlc19jb3JyZWxhdGlvbiA8LSB0ZXh0X2NvcnJlbGF0aW9uKGRhdGE9amJwYWdlc190b2tlbnMsIG5ncmFtPW5ncmFtLCB0b3A9MjAsIG1lbnRpb25zPTEwKQoKI0NsZWFuIFRleHQgZm9yIFdvcmRzIFRoYXQgQXJlIE5vdCBSZWxldmFudAojamJwYWdlc19jb3JyZWxhdGlvbiAlPiUgZ3JvdXBfYnkodG9waWMpICU+JSB0b3BfbihuPTEwLCB3dD1jb3JyZWxhdGlvbikgJT4lIGFycmFuZ2UodG9waWMpCmpicGFnZXNfdG9waWNzX2NsZWFuIDwtIGpicGFnZXNfY29ycmVsYXRpb24gJT4lIGZpbHRlcighdG9waWMgJWluJSBjKCJwZm0iLCAiZWRlZ2JlIiwgImJhbmsiLCAic3VwcG9ydCIsICJ0aW1lIiwgImRheSIsICJoYXBweSIsICJwZW9wbGUiKSkgCgojUmVkdWNlIFRvcGljcyAmIFByZXAgRm9yIFBsb3R0aW5nCmpicGFnZXNfdG9waWNzIDwtIHRvcGljX3JlZHVjZShqYnBhZ2VzX3RvcGljc19jbGVhbiwgdG9waWM9dG9waWMsIG1lbnRpb25zPTEwKQojamJwYWdlc190b3BpY3MgJT4lIGdyb3VwX2J5KHRvcGljKSAKYGBgCgpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgZXZhbD1UUlVFfQpqYnBfdG9waWNzX2JhciA8LSBqYnBhZ2VzX3RvcGljcyAlPiUgZ2dwbG90KGFlcyh4PS5yLCB5PWNvcnJlbGF0aW9uKSkgKwogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCBjb2xvcj0nc2t5Ymx1ZScsZmlsbD0nc3RlZWxibHVlJykgKwogIGZhY2V0X3dyYXAofiB0b3BpYywgc2NhbGVzID0gImZyZWUiKSArCiAgY29vcmRfZmxpcCgpICsKICB4bGFiKCJXb3JkcyBBc3NvY2lhdGVkIHdpdGggVG9waWMiKSArIHlsYWIoIkNvcnJlbGF0aW9uIikgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBqYnBhZ2VzX3RvcGljcyQuciwKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gamJwYWdlc190b3BpY3MkbWVudGlvbikKCnNldC5zZWVkKDIwMTkpCmpicF90b3BpY3Nfc25hIDwtIGpicGFnZXNfdG9waWNzICU+JQogIGZpbHRlcihjb3JyZWxhdGlvbiA+IC4xNSkgJT4lCiAgZ3JhcGhfZnJvbV9kYXRhX2ZyYW1lKCkgJT4lCiAgZ2dyYXBoKGxheW91dCA9ICJmciIpICsKICBnZW9tX2VkZ2VfbGluayhhZXMoZWRnZV9hbHBoYSA9IGNvcnJlbGF0aW9uKSwgc2hvdy5sZWdlbmQgPSBGQUxTRSkgKwogIGdlb21fbm9kZV9wb2ludChjb2xvciA9ICJsaWdodGJsdWUiLCBzaXplID0gMykgKwogIGdlb21fbm9kZV90ZXh0KGFlcyhsYWJlbCA9IG5hbWUpLCByZXBlbCA9IFRSVUUpICsKICB0aGVtZV92b2lkKCkKCmpicF90b3BpY3Nfc25hCmpicF90b3BpY3NfYmFyCmBgYAoKIyMjIyBJTkZMVUVOQ0UgQU5BTFlTSVM6IFBSTy1UUlVNUCBHUk9VUFMKSW4gdGhlICoqcHJvLVRydW1wIEdyb3VwcyBlY29zeXN0ZW0qKiwgdGhlIG1vc3QgcHJvbWluZW50IGdyb3VwcyB3ZXJlIHByZWRvbWluYW50bHkg4oCcUHJvLVRydW1w4oCdIGFuZCDigJxQcm8tQ29uc2VydmF0aXZl4oCdIGdyb3Vwcy4gU2V2ZXJhbCBncm91cHMgaGFkIG1vcmUgdGhhbiA1LDAwMCwwMDAgaW50ZXJhY3Rpb25zLiAKPGJyLz4KPGJyLz4KCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBldmFsPVRSVUV9CmR0Z3JvdXBzX2ludCA8LSBkdGdyb3Vwc19sZWFkZXJzICU+JSByZW5hbWUoTmFtZT1Hcm91cCkgCgpkYXRhdGFibGUoZHRncm91cHNfaW50LCBvcHRpb25zPWxpc3Qob3JkZXI9bGlzdChsaXN0KDMsICdkZXNjJykpKSkKYGBgCgojIyMjIFRPUElDIEFOQUxZU0lTOiBQUk8tVFJVTVAgR1JPVVBTClRoZSBCaWRlbnMsIGltcGVhY2htZW50IGFuZCB0aGUgSG91c2Ugb2YgUmVwcmVzZW50YXRpdmVzIGZlYXR1cmVkIHByb21pbmVudGx5LiBUaGVyZSB3YXMgcXVpdGUgYSBiaXQgb2YgaW50ZXItcmVsYXRlZCBkaXNjdXNzaW9uIG9uIHRoZXNlIHRvcGljcyB3aXRoIERvbmFsZCBUcnVtcCBhbmQgaW1wZWFjaG1lbnQgYXQgdGhlIGNlbnRlci4gTWVudGlvbnMgb2YgdGhlIEJpZGVucyB3ZXJlIGFzc29jaWF0ZWQgd2l0aCBIdW50ZXIgYW5kIHByb3NlY3V0b3IsIGFuZCB0aGUgSG91c2Ugb2YgUmVwcmVzZW50YXRpdmVzIHdpdGggdGhlIEludGVsbGlnZW5jZSBDb21taXR0ZWUuIE1haW5zdHJlYW0gYW5kIGZha2UgbmV3cyBhcyB3ZWxsIGFzIGdvZCB3ZXJlIGFsc28gbm90YWJsZSB0b3BpY3Mgb2YgY29udmVyc2F0aW9uLiAKPGJyLz4KPGJyLz4KCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQpkdGdyb3VwczIgPC0gZHRncm91cHMgJT4lIHVuZ3JvdXAoKQpkdGdyb3Vwc190ZXh0IDwtIHRleHRfY2xlYW4oZGF0YT1kdGdyb3VwczIsIHRleHQ9TWVzc2FnZSkKZHRncm91cHNfdG9rZW5zIDwtIHRleHRfdG9rZW5pemUoZGF0YT1kdGdyb3Vwc190ZXh0LCB0ZXh0PXRleHQsIHN0b3B3b3Jkcz1OVUxMLCBuPTEpICAKZHRncm91cHNfY29ycmVsYXRpb24gPC0gdGV4dF9jb3JyZWxhdGlvbihkYXRhPWR0Z3JvdXBzX3Rva2VucywgbmdyYW09bmdyYW0sIHRvcD0yMCwgbWVudGlvbnM9MjApCgojQ2xlYW4gVGV4dCBmb3IgV29yZHMgVGhhdCBBcmUgTm90IFJlbGV2YW50CmR0Z3JvdXBzX2NvcnJlbGF0aW9uICU+JSBncm91cF9ieSh0b3BpYykgJT4lIHRvcF9uKG49MTAsIHd0PWNvcnJlbGF0aW9uKSAlPiUgYXJyYW5nZSh0b3BpYykKI0luc3BlY3Qgb25lLWJ5LW9uZSB0byBtYWtlIHN1cmUgeW91J3JlIG5vdCBtaXNzaW5nIHNvbWV0aGluZwpkdGdyb3Vwc190b3BpY3NfY2xlYW4gPC0gZHRncm91cHNfY29ycmVsYXRpb24gJT4lIGZpbHRlcighdG9waWMgJWluJSBjKCJ0aW1lIiwgImRvbnQiLCAicGVvcGxlIiwgImRvbmFsZCIsICJhbWVyaWNhbiIsICJjb3VudHJ5IiwgIm5ld3MiLCAicHJlc2lkZW50IikpIAojUmVkdWNlIFRvcGljcyAmIFByZXAgRm9yIFBsb3R0aW5nCmR0Z3JvdXBzX3RvcGljcyA8LSB0b3BpY19yZWR1Y2UoZHRncm91cHNfdG9waWNzX2NsZWFuLCB0b3BpYz10b3BpYywgbWVudGlvbnM9MTApCmBgYAoKYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGV2YWw9VFJVRX0KZHRnX3RvcGljc19iYXIgPC0gZHRncm91cHNfdG9waWNzICU+JSBnZ3Bsb3QoYWVzKHg9LnIsIHk9Y29ycmVsYXRpb24pKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIGNvbG9yPSdyZWQnLGZpbGw9J2ZpcmVicmljaycpICsKICBmYWNldF93cmFwKH4gdG9waWMsIHNjYWxlcyA9ICJmcmVlIikgKwogIGNvb3JkX2ZsaXAoKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IGR0cGFnZXNfdG9waWNzJC5yLAogICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBkdHBhZ2VzX3RvcGljcyRtZW50aW9uKQoKc2V0LnNlZWQoMjAxOSkKZHRnX3RvcGljc19zbmEgPC0gZHRncm91cHNfdG9waWNzICU+JQogIGZpbHRlcihjb3JyZWxhdGlvbiA+IC4xNSkgJT4lCiAgZ3JhcGhfZnJvbV9kYXRhX2ZyYW1lKCkgJT4lCiAgZ2dyYXBoKGxheW91dCA9ICJmciIpICsKICBnZW9tX2VkZ2VfbGluayhhZXMoZWRnZV9hbHBoYSA9IGNvcnJlbGF0aW9uKSwgc2hvdy5sZWdlbmQgPSBGQUxTRSkgKwogIGdlb21fbm9kZV9wb2ludChjb2xvciA9ICJyZWQiLCBzaXplID0gMykgKwogIGdlb21fbm9kZV90ZXh0KGFlcyhsYWJlbCA9IG5hbWUpLCByZXBlbCA9IFRSVUUpICsKICB0aGVtZV92b2lkKCkKCmR0Z190b3BpY3Nfc25hCmR0Z190b3BpY3NfYmFyCmBgYAoKIyMjIyBJTkZMVUVOQ0UgQU5BTFlTSVM6IFBSTy1CSURFTiBHUk9VUFMKSW4gdGhlICoqcHJvLUJpZGVuIEdyb3VwcyBlY29zeXN0ZW0qKiwgdGhlIG1vc3QgcHJvbWluZW50IGdyb3VwcyB3ZXJlIHByZWRvbWluYW50bHkg4oCcQW50aS1UcnVtcOKAnSBhbmQg4oCcUHJvLURlbW9jcmF04oCdIGdyb3Vwcy4gVGhlIG1vc3QgcG9wdWxhciBncm91cHMgd2VyZSDigJxhbnRpLVRydW1w4oCdLCB0d28gb2Ygd2hpY2ggLSDigJxGVSBUcnVtcOKAnSBhbmQg4oCcQSBTS1VOSyBOQU1FRCBUUlVNUOKAnSByZWNlaXZpbmcgbW9yZSB0aGFuIDUsMDAwLDAwMCBpbnRlcmFjdGlvbnMuIAo8YnIvPgo8YnIvPgpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgZXZhbD1UUlVFfQpqYmdyb3Vwc19pbnQgPC0gamJncm91cHNfbGVhZGVycyAlPiUgcmVuYW1lKE5hbWU9R3JvdXApICU+JSBmaWx0ZXIoIU5hbWUgJWluJSBjKCJLbGF1cyBJb2hhbm5pcyAtIFByZXNlZGludGVsZSBSb21hbmllaSIsICLOqCB8INCc0Jgg0J/QkNCi0KDQhtCe0KLQmCDQo9Ca0KDQkNCH0J3QmCB8IM6oIiwgIldlIEFyZSBRIiwgIkRhY2lhbiBDaW9sb3MiKSkgCgpkYXRhdGFibGUoamJncm91cHNfaW50LCBvcHRpb25zPWxpc3Qob3JkZXI9bGlzdChsaXN0KDMsICdkZXNjJykpKSkKYGBgCgojIyMjIFRPUElDIEFOQUxZU0lTOiBQUk8tQklERU4gR1JPVVBTCkRvbmFsZCBUcnVtcCwgVWtyYWluZSBhbmQgSW1wZWFjaG1lbnQgZmVhdHVyZWQgcHJvbWluZW50bHkuIFRoZXJlIHdhcyBxdWl0ZSBhIGJpdCBvZiBpbnRlci1yZWxhdGVkIGRpc2N1c3Npb24gb24gdGhlc2UgdG9waWNzIHdpdGggRG9uYWxkIFRydW1wIGF0IHRoZSBjZW50ZXIgb2YgaXQuIE1lbnRpb25zIG9mIFVrcmFpbmUgd2VyZSBhc3NvY2lhdGVkIHdpdGggR2l1bGlhbmkgYW5kIFplbGVuc2t5LCBhbmQgaW1wZWFjaG1lbnQgd2l0aCBpbnF1aXJ5IGFuZCBOYW5jeSBQZWxvc2kuIEVsaXphYmV0aCBXYXJyZW4gd2FzIG1lbnRpb25lZCwgYnV0IG90aGVyIGNhbmRpZGF0ZXMgZGlkIG5vdCBmZWF0dXJlIHByb21pbmVudGx5LiBGYWtlIG5ld3Mgd2FzIGFsc28gYSBub3RhYmxlIHRvcGljIG9mIGNvbnZlcnNhdGlvbiAocHJlc3VtYWJseSBhbnRpKS4KPGJyLz4KPGJyLz4KCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQpqYmdyb3VwczIgPC0gamJncm91cHMgJT4lIHVuZ3JvdXAoKQpqYmdyb3Vwc190ZXh0IDwtIHRleHRfY2xlYW4oZGF0YT1qYmdyb3VwczIsIHRleHQ9TWVzc2FnZSkKamJncm91cHNfdG9rZW5zIDwtIHRleHRfdG9rZW5pemUoZGF0YT1qYmdyb3Vwc190ZXh0LCB0ZXh0PXRleHQsIHN0b3B3b3Jkcz1OVUxMLCBuPTEpICAKamJncm91cF9jb3JyZWxhdGlvbiA8LSB0ZXh0X2NvcnJlbGF0aW9uKGRhdGE9amJncm91cHNfdG9rZW5zLCBuZ3JhbT1uZ3JhbSwgdG9wPTIwLCBtZW50aW9ucz0yMCkKCiNDbGVhbiBUZXh0IGZvciBXb3JkcyBUaGF0IEFyZSBOb3QgUmVsZXZhbnQKamJncm91cF9jb3JyZWxhdGlvbiAlPiUgZ3JvdXBfYnkodG9waWMpICU+JSB0b3BfbihuPTEwLCB3dD1jb3JyZWxhdGlvbikgJT4lIGFycmFuZ2UodG9waWMpCmpiZ3JvdXBzX3RvcGljc19jbGVhbiA8LSBqYmdyb3VwX2NvcnJlbGF0aW9uICU+JSBmaWx0ZXIoIXRvcGljICVpbiUgYygiZGUiLCAidGltZSIsICJkb250IiwgImxhIiwgImhlcyIsICLQvdC1IiwgItC90LAiLCAiY2FyZSIpKQoKI1JlZHVjZSBUb3BpY3MgJiBQcmVwIEZvciBQbG90dGluZwpqYmdyb3Vwc190b3BpY3MgPC0gdG9waWNfcmVkdWNlKGpiZ3JvdXBzX3RvcGljc19jbGVhbiwgdG9waWM9dG9waWMsIG1lbnRpb25zPTEwKQojamJncm91cHNfdG9waWNzICU+JSBzYXZlUkRTKGZpbGU9ImFwcC9qYmdfdG9waWNzLnJkYSIpCmBgYAoKYGBge3IsIGV2YWw9VFJVRSwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KamJnX3RvcGljc19iYXIgPC0gamJncm91cHNfdG9waWNzICU+JSBnZ3Bsb3QoYWVzKHg9LnIsIHk9Y29ycmVsYXRpb24pKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIGNvbG9yPSdza3libHVlJyxmaWxsPSdzdGVlbGJsdWUnKSArCiAgZmFjZXRfd3JhcCh+IHRvcGljLCBzY2FsZXMgPSAiZnJlZSIpICsKICBjb29yZF9mbGlwKCkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBqYmdyb3Vwc190b3BpY3MkLnIsCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGpiZ3JvdXBzX3RvcGljcyRtZW50aW9uKQoKc2V0LnNlZWQoMjAxOSkKamJnX3RvcGljc19zbmEgPC0gamJncm91cHNfdG9waWNzICU+JQogIGZpbHRlcihjb3JyZWxhdGlvbiA+IC4xNSkgJT4lCiAgZ3JhcGhfZnJvbV9kYXRhX2ZyYW1lKCkgJT4lCiAgZ2dyYXBoKGxheW91dCA9ICJmciIpICsKICBnZW9tX2VkZ2VfbGluayhhZXMoZWRnZV9hbHBoYSA9IGNvcnJlbGF0aW9uKSwgc2hvdy5sZWdlbmQgPSBGQUxTRSkgKwogIGdlb21fbm9kZV9wb2ludChjb2xvciA9ICJsaWdodGJsdWUiLCBzaXplID0gMykgKwogIGdlb21fbm9kZV90ZXh0KGFlcyhsYWJlbCA9IG5hbWUpLCByZXBlbCA9IFRSVUUpICsKICB0aGVtZV92b2lkKCkKCmpiZ190b3BpY3Nfc25hCmpiZ190b3BpY3NfYmFyCgpgYGAKCmBgYHtyfQoKYGBg