# jmc_event_display.0.3.1 v0.3.1beta # Front End Component of the Event Manager for Textpattern # Joel Courtney # http://euphemize.net/ # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YTo5OntzOjc6InZlcnNpb24iO3M6OToiMC4zLjFiZXRhIjtzOjY6ImF1dGhvciI7czoxMzoi Sm9lbCBDb3VydG5leSI7czoxMDoiYXV0aG9yX3VyaSI7czoyMToiaHR0cDovL2V1cGhlbWl6 ZS5uZXQvIjtzOjExOiJkZXNjcmlwdGlvbiI7czo1NjoiRnJvbnQgRW5kIENvbXBvbmVudCBv ZiB0aGUgRXZlbnQgTWFuYWdlciBmb3IgVGV4dHBhdHRlcm4iO3M6NDoidHlwZSI7aToxO3M6 NDoibmFtZSI7czoyMzoiam1jX2V2ZW50X2Rpc3BsYXkuMC4zLjEiO3M6NDoiaGVscCI7czox MzAxNToiPGgyIGNsYXNzPSJlbnRyeS10aXRsZSI+am1jX2V2ZW50X21hbmFnZXI8L2gyPgo8 aDM+PGEgaHJlZj0iaHR0cDovL2ZpbGVzLmV1cGhlbWl6ZS5uZXQvdGV4dHBhdHRlcm4vam1j X2V2ZW50X21hbmFnZXIudHh0Ij5Eb3dubG9hZCBqbWNfZXZlbnRfbWFuYWdlciB2MC4yYmV0 YTwvYT48L2gzPgo8aDI+UHJlYW1ibGU8L2gyPgo8cD5UaGUgam1jX2V2ZW50X21hbmFnZXIg aXMgYSBwbHVnaW4vaGFjayBmb3IgdGV4dHBhdHRlcm4gY3JlYXRlZCB0byBhbGxvdyB1c2Vy cyB0byBjcmVhdGUgZXZlbnRzIGF0IHZhcmlvdXMgdmVudWVzLiBJdCBoYXMgYmVlbiBkb25l IHNvIGNvbXBsZXRlbHkgYnkgJiM4MjE2O2p1OmZlbWFpeiBAIDxhIGhyZWY9Imh0dHA6Ly9l dXBoZW1pemUubmV0Ij5ldXBoZW1pemUubmV0PC9hPi4gQW55IGNvbW1lbnRzIG9yIHN1Z2dl c3Rpb25zIHdvdWxkIGJlIGFwcHJlY2lhdGVkIGFuZCB0aGUgc3VwcG9ydCB0aHJlYWQgYXQg PGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbSI+Zm9ydW0udGV4dHBhdHRl cm4uY29tPC9hPiBpcyA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3Zp ZXd0b3BpYy5waHA/aWQ9MTExMzciPmF2YWlsYWJsZSBoZXJlPC9hPi4gV2hpbGUgdGhpcyBo ZWxwIGZpbGUgaGFzIGF0dGVtcHRlZCB0byBiZSBhcyB0aG9yb3VnaCBhcyBwb3NzaWJsZSwg dGhpbmdzIGRvIGZhbGwgdGhyb3VnaCB0aGUgY3JhY2tzLiBTaW5jZSBqbWNfZXZlbnRfbWFu YWdlciBpcyAoc3RpbGwpIGluIGEgYmV0YSBzdGFnZSwgdGhlcmUgbWF5IGV4aXN0IHNvbWUg YnVncyBpbiB0aGUgb3BlcmF0aW9uLiBBZGRpdGlvbmFsbHksIHRoZSBwbHVnaW4vaGFjayBp cyBhbiBvbmdvaW5nIHByb2plY3QgYW5kIG1heSBiZSB1cGRhdGVkIGZyb20gdGltZSB0byB0 aW1lLiBUbyBlbnN1cmUgdGhhdCB5b3UgaGF2ZSB0aGUgbW9zdCB1cCB0byBkYXRlIHZlcnNp b24sIHBsZWFzZSBlbnN1cmUgeW91IHZpc2l0IHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0u dGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9MTExMzciPnN1cHBvcnQgZm9ydW0g dGhyZWFkPC9hPiByZWd1bGFybHkuPC9wPgo8cD5qbWNfZXZlbnRfbWFuYWdlciBpcyBkaXN0 cmlidXRlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIEZvciBtb3Jl IGluZm9ybWF0aW9uIHBsZWFzZSB2aXNpdCA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcv Y29weWxlZnQvZ3BsLmh0bWwiPkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlPC9hPi48L3A+ CjxoMj5JbnN0YWxsYXRpb248L2gyPgo8cD5UaGUgaW5zdGFsbGF0aW9uIHBhY2thZ2UgaXMg YSBzaW1wbGUgcHJvY2Vzcy4gRm9yIHRob3NlIG9mIHlvdSB1cGdyYWRpbmcsIHRoZXJlIGFy ZSBhZGRpdGlvbmFsIHJlcXVpcmVtZW50cyBvbiB5b3VyIGJlaGFsZiBkdWUgdG8gdGhlIGFk ZGl0aW9uIG9mIGNhdGVnb3JpZXMgdG8gam1jX2V2ZW50X21hbmFnZXIuPC9wPgo8aDM+RnJl c2ggSW5zdGFsbDwvaDM+CjxwPkZvciB0aG9zZSB1bmRlcmdvaW5nIGEgZnJlc2ggaW5zdGFs bCwgcGxlYXNlIGdvIHRocm91Z2ggdGhlIGZvbGxvd2luZyBzdGVwczo8L3A+CjxvbD4KPGxp PlR1cm4gdGhlIHBsdWdpbiB0byBhY3RpdmU8L2xpPgo8bGk+R28gdG8gQ29udGVudCBhbmQg RXZlbnQgTWFuYWdlciB0YWJzPC9saT4KPGxpPkRvIGEgbGl0dGxlIGRhbmNlIGFuZCB5b3Um IzgyMTc7bGwgZmluZCB0aGF0IHlvdSYjODIxNztyZSByZWFkeSB0byBnbyE8L2xpPgo8L29s Pgo8aDM+VXBncmFkZSBvbiBQYXN0IFZlcnNpb248L2gzPgo8cD5BcyB3aXRoIGFsbCB1cGRh dGVzLCBwbGVhc2UgYmFja3VwIHlvdXIgZGF0YWJhc2UsIHRoZW4gZ28gdGhyb3VnaCB0aGUg Zm9sbG93aW5nIHN0ZXBzOjwvcD4KPG9sPgo8bGk+VGhyb3VnaCB5b3VyIGRhdGFiYXNlIGFk bWluLCBhZGQgdGhlIGZvbGxvd2luZyBjb2x1bW5zIHRvIHRoZQo8cHJlPnR4cF9qbWNfZXZl bnQ8L3ByZT4KPHA+YW5kPC9wPgo8cHJlPnR4cF9qbWNfZXZlbnRfdmVudWU8L3ByZT4KPHA+ c2V0IGFzIE5VTEwgKG9yIGVxdWl2YWxlbnQgb24geW91ciBUZXh0cGF0dGVybiBpbnN0YWxs YXRpb24pPC9saT4KPGxpPkFjdGl2YXRlIHBsdWdpbjwvbGk+CjxsaT5HbyB0byBDb250ZW50 IGFuZCB0aGVuIEV2ZW50IE1hbmFnZXIgdGFiPC9saT4KPGxpPkRvIGEgbGl0dGxlIGppZyBh bmQgeW91IHNob3VsZCBiZSByaWdodCArIHJlYWR5IHRvIGdvITwvbGk+Cjwvb2w+CjxoMj5J bnRyb2R1Y3Rpb24gdG8gdGhlIEV2ZW50IE1hbmFnZXI8L2gyPgo8cD5UaGUgZXZlbnQgbWFu YWdlciBoYXMgdHdvIGNvbXBvbmVudHMgLSB0aGUgYWRtaW4gc2lkZSBjb250cm9scyBhbmQg dGhlIHB1YmxpYyBzaWRlIG91dHB1dC4gT24gaW5zdGFsbGF0aW9uIGl0IHdpbGwgZW5zdXJl IHRoYXQgYSBkYXRhYmFzZSBleGlzdHMsIHRoZSB0YWJsZXMgZXhpc3QsIGluc3RhbGxpbmcg aWYgdGhleSYjODIxNztyZSBtaXNzaW5nLCBhbmQgdGhhdCBhbiBlbnRyeSBleGlzdHMgaW4g dGhlIHRhYmxlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGV2ZW50IG1hbmFnZXIgKGluIHRoaXMg d2F5IEkgY29uc2lkZXIgaXQgYSBoYWNrKS48L3A+CjxoMj5FdmVudCBNYW5hZ2VyIFRhYjwv aDI+CjxwPldoZW4geW91IGdvIHRvIHRoZSBldmVudCBtYW5hZ2VyIHRhYiB5b3Ugd2lsbCBi ZSBwcmVzZW50ZWQgd2l0aCBhIGxpc3Qgb2YgZXZlbnRzIHRoYXQgaGF2ZSBiZWVuIGVudGVy ZWQuIEN1cnJlbnRseSwgdGhlICYjODIyMDtldmVudHMgcGVyIHBhZ2UmIzgyMjE7IGlzIGEg bWlycm9yIG9mIHRoYXQgdXNlZCBvbiB0aGUgYXJ0aWNsZSBwYWdlLCBhbmQgYW55IGFsdGVy YXRpb24gdG8gdGhlICYjODIyMDtldmVudHMgcGVyIHBhZ2UmIzgyMjE7IHdpbGwgYWxzbyBh bHRlciB0aGUgJiM4MjIwO2FydGljbGVzIHBlciBwYWdlJiM4MjIxOyB1bmRlciB0aGUgJiM4 MjIwO2FydGljbGVzIHRhYiYjODIyMTsuPC9wPgo8cD5UaGVyZSBhcmUgY3VycmVudGx5IGZv dXIgdG9wIGxldmVsIGJ1dHRvbnMgZm9yIHRoZSBFdmVudCBNYW5hZ2VyOjwvcD4KPHVsPgo8 bGk+RXZlbnQgTWFuYWdlciAtIE1hbmFnZXMgdGhlIGFjdHVhbCBldmVudHM8L2xpPgo8bGk+ VmVudWUgTWFuYWdlciAtIE1hbmFnZXMgdGhlIHZlbnVlcyBmb3IgdGhlIGV2ZW50cy4gRWFj aCBldmVudCBtdXN0IGJlICYjODIyMDthdCYjODIyMTsgYSB2ZW51ZTwvbGk+CjxsaT5DYXRl Z29yeSBNYW5hZ2VyIC0gTWFuYWdlcyB0aGUgbmV3IGNhdGVnb3JpZXMgYXZhaWxhYmxlIGZv ciB0aGUgcGx1Z2luPC9saT4KPGxpPlJTUyBGZWVkIC0gRm9yIGZ1dHVyZSB2ZXJzaW9ucyB3 aWxsIGFsbG93IGFjY2VzcyB0byBhbHRlcmF0aW9ucyB0byB0aGUgUlNTIGZvcm1hdDwvbGk+ CjwvdWw+CjxoMz5FdmVudCBNYW5hZ2VyPC9oMz4KPHA+VGhlIGRlZmF1bHQgcGFnZSBvZiB0 aGUgcGx1Z2luJiM4MjE3O3MgdGFiLiBHaXZlcyB0d28gb3B0aW9uczo8L3A+Cjx1bD4KPGxp PkFkZCBFdmVudDwvbGk+CjxsaT5FdmVudCBMaXN0aW5nIChkZWZhdWx0KTwvbGk+CjwvdWw+ CjxoND5BZGQgRXZlbnQ8L2g0Pgo8cD5BbGxvd3MgdGhlIGFkbWluaXN0cmF0b3IgdG8gYWRk IGFuIGV2ZW50LiBVdGlsaXNlcyA8YSBocmVmPSJodHRwOi8vbWljcm9mb3JtYXRzLm9yZy8i Pm1pY3JvZm9ybWF0czwvYT4gc3R5bGUgPGEgaHJlZj0iaHR0cDovL21pY3JvZm9ybWF0cy5v cmcvd2lraS9oY2FsZW5kYXIiPmhDYWxlbmRhcjwvYT4uPGEgaHJlZj0iaHR0cDovL21pY3Jv Zm9ybWF0cy5vcmcvd2lraS9oY2FsZW5kYXIiPjwvYT48L3A+CjxwPk9wdGlvbmFsOjwvcD4K PHVsPgo8bGk+Q2F0ZWdvcnk8L2xpPgo8bGk+RXZlbnQgTmFtZTwvbGk+CjxsaT5QcmljZTwv bGk+CjxsaT5PdGhlciBCYW5kczwvbGk+CjxsaT5PdGhlciBJbmZvPC9saT4KPC91bD4KPHA+ UmVxdWlyZWQ6PC9wPgo8dWw+CjxsaT5TdGFydCBEYXRlICsgVGltZTwvbGk+CjxsaT5GaW5p c2ggRGF0ZSArIFRpbWU8L2xpPgo8bGk+VmVudWU8L2xpPgo8L3VsPgo8cD48c3Ryb25nPk5v dGU8L3N0cm9uZz46IEV2ZW50IG11c3QgRmluaXNoIDxlbT5hZnRlcjwvZW0+IGl0IGJlZ2lu cy48L3A+CjxoND5FdmVudCBMaXN0aW5nPC9oND4KPHA+QmFzaWMgbGlzdGluZyBvZiBhbGwg ZXZlbnRzIHBhc3QsIHByZXNlbnQgYW5kIGZ1dHVyZS48L3A+CjxoMz5WZW51ZSBMaXN0aW5n PC9oMz4KPHA+R2l2ZXMgdHdvIG9wdGlvbnM6PC9wPgo8dWw+CjxsaT5BZGQgVmVudWU8L2xp Pgo8bGk+VmVudWUgTGlzdGluZyAoZGVmYXVsdCk8L2xpPgo8L3VsPgo8aDQ+QWRkIFZlbnVl PC9oND4KPHA+QWxsb3dzIHRoZSBhZG1pbmlzdHJhdG9yIHRvIGFkZCBhIHZlbnVlLiBPbmx5 IHRoZSB2ZW51ZSBuYW1lIGlzIHJlcXVpcmVkLiBVdGlsaXNlcyA8YSBocmVmPSJodHRwOi8v bWljcm9mb3JtYXRzLm9yZy8iPm1pY3JvZm9ybWF0PC9hPiBzdHlsZSA8YSBocmVmPSJodHRw Oi8vbWljcm9mb3JtYXRzLm9yZy93aWtpL2hjYXJkIj5oQ2FyZDwvYT4uPC9wPgo8aDQ+VmVu dWUgTGlzdGluZzwvaDQ+CjxwPkJhc2ljIGxpc3Rpbmcgb2YgYWxsIHZlbnVlcy48L3A+Cjxo Mz5DYXRlZ29yeSBNYW5hZ2VyPC9oMz4KPHA+R2l2ZXMgdHdvIG9wdGlvbnM6PC9wPgo8dWw+ CjxsaT5BZGQgQ2F0ZWdvcnk8L2xpPgo8bGk+Q2F0ZWdvcnkgTGlzdGluZyAoZGVmYXVsdCk8 L2xpPgo8L3VsPgo8aDQ+QWRkIENhdGVnb3J5PC9oND4KPHA+QWxsb3dzIHRoZSBhZG1pbmlz dHJhdG9yIHRvIGFkZCBhbiBjYXRlZ29yeS4gT25seSB0aGUgY2F0ZWdvcnkgbmFtZSBpcyBy ZXF1aXJlZC48L3A+CjxoND5DYXRlZ29yeSBMaXN0aW5nPC9oND4KPHA+QmFzaWMgbGlzdGlu ZyBvZiBhbGwgY2F0ZWdvcmllcy48L3A+CjxoMz5SU1MgRmVlZDwvaDM+CjxwPlN0aWxsIHRv IGNvbWUgaW4gZnV0dXJlIHVwZGF0ZXMuIFVuc3VyZSBhcyBvZiB5ZXQgYXMgdG8gdGhlIGRl c2lnbiwgbGF5b3V0IGFuZCBvcHRpb25zLiBJZiB5b3UgaGF2ZSBpZGVhcywgcGxlYXNlIGNv bnRhY3QgbWUgdGhyb3VnaCB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJu LmNvbS92aWV3dG9waWMucGhwP2lkPTExMTM3Ij5qbWNfZXZlbnRfbWFuYWdlciBwbHVnaW4g Zm9ydW0gdGhyZWFkPC9hPi48L3A+CjxoMj5DcmVhdGluZyBFdmVudCBNYW5hZ2VyIE91dHB1 dDwvaDI+CjxwPlRoZSBqbWNfZXZlbnRfbWFuYWdlciB1c2VzIHRoZSBmb3JtcyBpbiB0ZXh0 cGF0dGVybiB0byBjcmVhdGUgdGhlIHRlbXBsYXRlIGZvciB0aGUgb3V0cHV0LiBZb3UgbWF5 IHVzZSBhbnkgZm9ybSB5b3UgbGlrZSwgcHJvdmlkaW5nIHRoYXQgaXQgaGFzIHRoZSByZWxl dmFudCBkZXRhaWxzLCBpLmUuIHlvdSBjYW4gY2FsbCBpdCBmcm9tIHdpdGhpbiBhbiBhcnRp Y2xlLCBmcm9tIGEgcGFnZSBvciBldmVuIGZyb20gYSBmb3JtIGl0c2VsZiAoPGVtPnlldCB0 byBiZSB0ZXN0ZWQ8L2VtPikuPC9wPgo8aDM+Q2FsbGluZyB0aGUgRXZlbnQgTWFuYWdlcjwv aDM+CjxwPkluIG9yZGVyIHRvIGNhbGwgdGhlIGV2ZW50IG1hbmFnZXIsIGEgc2ltcGxlIFRl eHRwYXR0ZXJuIHN0eWxlIHRhZyBpcyB1c2VkOjwvcD4KPHA+PGNvZGU+PCB0eHAgOmptY19l dmVudHMgZm9ybT0iZm9ybV9uYW1lIiAvPjwvY29kZT48L3A+CjxwPlRoZSBmb3JtX25hbWUg aXMgdGhlIG5hbWUgb2YgdGhlIGZvcm0geW91IHdvdWxkIGxpa2UgdG8gY2FsbCBhcyB0aGUg dGVtcGxhdGUuIGptY19ldmVudHMgY3ljbGVzIHRocm91Z2ggPGVtPmFsbDwvZW0+IGV2ZW50 cyBhbnN3ZXJpbmcgaXRzIHJlc3RyaWN0aW9ucywgdGhhdCBpcyBpdCBjeWNsZXMgdGhyb3Vn aCBlYWNoIHJlbGV2YW50IGVudHJ5LjwvcD4KPHA+VGhlcmUgYXJlIG1hbnkgb3B0aW9ucyBh cyB0byBob3cgdG8gbGltaXQgdGhlIG51bWJlciBhbmQgdHlwZSBvZiBldmVudHMgYmVpbmcg Y2FsbGVkLiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgb3B0aW9ucywgZ2l2ZW4gd2l0aCBkZXRh aWxzIGFsc28gb2YgdGhlIGRlZmF1bHQgKGlmIGFueSkuPC9wPgo8cD5Gb3JtYXR0aW5nIGZv ciB2ZW51ZXMgaXMgZG9uZSBpbmRlcGVuZGVudGx5IG9mLCBvciB3aXRoaW4sIHRoZSBldmVu dCBmb3JtLjwvcD4KPGg0PmxpbWl0PC9oND4KPHA+VXNlZCB0byByZXN0cmljdCB0aGUgbnVt YmVyIG9mIGV2ZW50cy48L3A+CjxwPkV4YW1wbGUgdXNhZ2U6PC9wPgo8ZGw+CjxkdD5MaW1p dCB0byB0ZW4gZXZlbnRzOjwvZHQ+CjxkZD48Y29kZT48IHR4cCA6am1jX2V2ZW50cyBmb3Jt PSJmb3JtX25hbWUiIGxpbWl0PSIxMCIgLz48L2NvZGU+PC9kZD4KPGR0PlZhbHVlczo8L2R0 Pgo8ZGQ+CjxwcmU+MHwxPC9wcmU+CjwvZGQ+CjxkdD5EZWZhdWx0OjwvZHQ+CjxkZD4KPHBy ZT4xPC9wcmU+CjwvZGQ+CjwvZGw+CjxoND5mdXR1cmU8L2g0Pgo8cD5Vc2VkIHRvIHJlc3Ry aWN0IHRoZSBldmVudHMgdG8gdGhvc2UgdGhhdCB3aWxsIHN0YXJ0IGluIHRoZSBmdXR1cmUu PC9wPgo8cD5FeGFtcGxlIHVzYWdlOjwvcD4KPGRsPgo8ZHQ+TGltaXQgdG8gZnV0dXJlOjwv ZHQ+CjxkZD48Y29kZT48IHR4cCA6am1jX2V2ZW50cyBmb3JtPSJmb3JtX25hbWUiIGZ1dHVy ZT0iMSIgLz48L2NvZGU+PC9kZD4KPGR0PlZhbHVlczo8L2R0Pgo8ZGQ+CjxwcmU+MHwxPC9w cmU+CjwvZGQ+CjxkdD5EZWZhdWx0OjwvZHQ+CjxkZD4KPHByZT4xPC9wcmU+CjwvZGQ+Cjwv ZGw+CjxoND5wYXN0PC9oND4KPHA+VXNlZCB0byByZXN0cmljdCB0aGUgZXZlbnRzIHRvIHRo b3NlIHRoYXQgd2lsbCBzdGFydCBpbiB0aGUgcGFzdC48L3A+CjxwPkV4YW1wbGUgdXNhZ2U6 PC9wPgo8ZGw+CjxkdD5QYXN0IG9ubHk6PC9kdD4KPGRkPjxjb2RlPjwgdHhwIDpqbWNfZXZl bnRzIGZvcm09ImZvcm1fbmFtZSIgcGFzdD0iMSIgZnV0dXJlPSIwIiAvPjwvY29kZT48L2Rk Pgo8ZHQ+UGFzdCBhbmQgZnV0dXJlOjwvZHQ+CjxkZD48Y29kZT48IHR4cCA6am1jX2V2ZW50 cyBmb3JtPSJmb3JtX25hbWUiIHBhc3Q9IjEiIGZ1dHVyZT0iMCIgLz48L2NvZGU+PC9kZD4K PGR0PlZhbHVlczo8L2R0Pgo8ZGQ+CjxwcmU+MHwxPC9wcmU+CjwvZGQ+CjxkdD5EZWZhdWx0 OjwvZHQ+CjxkZD4KPHByZT4xPC9wcmU+CjwvZGQ+CjwvZGw+CjxoND5jdXJyZW50PC9oND4K PHA+VXNlZCB0byByZXN0cmljdCB0aGUgZXZlbnRzIHRvIHRob3NlIHRoYXQgd2lsbCBoYXZl IHN0YXJ0ZWQsIGJ1dCBoYXZlIG5vdCB5ZXQgZmluaXNoZWQuPC9wPgo8cD5FeGFtcGxlIHVz YWdlOjwvcD4KPGRsPgo8ZHQ+Q3VycmVudCBvbmx5OjwvZHQ+CjxkZD48Y29kZT48IHR4cCA6 am1jX2V2ZW50cyBmb3JtPSJmb3JtX25hbWUiIGN1cnJlbnQ9IjEiIGZ1dHVyZT0iMCIgLz48 L2NvZGU+PC9kZD4KPGR0PkN1cnJlbnQgYW5kIEZ1dHVyZTo8L2R0Pgo8ZGQ+PGNvZGU+PCB0 eHAgOmptY19ldmVudHMgZm9ybT0iZm9ybV9uYW1lIiBjdXJyZW50PSIxIiBmdXR1cmU9IjEi IC8+PC9jb2RlPjwvZGQ+CjxkdD5DdXJyZW50IGFuZCBQYXN0OjwvZHQ+CjxkZD48Y29kZT48 IHR4cCA6am1jX2V2ZW50cyBmb3JtPSJmb3JtX25hbWUiIGN1cnJlbnQ9IjEiIHBhc3Q9IjEi IGZ1dHVyZT0iMCIgLz48L2NvZGU+PC9kZD4KPGR0PkN1cnJlbnQsIFBhc3QgYW5kIGZ1dHVy ZTo8L2R0Pgo8ZGQ+PGNvZGU+PCB0eHAgOmptY19ldmVudHMgZm9ybT0iZm9ybV9uYW1lIiBj dXJyZW50PSIxIiBwYXN0PSIxIiBmdXR1cmU9IjEiIC8+PC9jb2RlPjwvZGQ+CjxkdD5WYWx1 ZXM6PC9kdD4KPGRkPgo8cHJlPjB8MTwvcHJlPgo8L2RkPgo8ZHQ+RGVmYXVsdDo8L2R0Pgo8 ZGQ+CjxwcmU+MTwvcHJlPgo8L2RkPgo8L2RsPgo8aDQ+Y2F0ZWdvcnlfaWQ8L2g0Pgo8cD5V c2VkIHRvIHJlc3RyaWN0IHRoZSBldmVudHMgdG8gdGhvc2Ugb2YgYSBwYXJ0aWN1bGFyIGNh dGVnb3J5IG9yIGNhdGVnb3JpZXMuPC9wPgo8cD5FeGFtcGxlIHVzYWdlOjwvcD4KPGRsPgo8 ZHQ+U2luZ2xlIGNhdGVnb3J5ICh3aGVyZSBjYXRlZ29yeSYjODIxNztzIElEPTIpOjwvZHQ+ CjxkZD48Y29kZT48IHR4cCA6am1jX2V2ZW50cyBmb3JtPSJmb3JtX25hbWUiIGNhdGVnb3J5 X2lkPSIyIiAvPjwvY29kZT48L2RkPgo8ZHQ+TXVsdGlwbGUgY2F0ZWdvcmllcyAod2hlcmUg Y2F0ZWdvcnkmIzgyMTc7cyBJRCBpcyBpbiBhcnJheSgyLDQpKTo8L2R0Pgo8ZGQ+PGNvZGU+ PCB0eHAgOmptY19ldmVudHMgZm9ybT0iZm9ybV9uYW1lIiBjYXRlZ29yeV9pZD0iMiw0IiAv PjwvY29kZT48L2RkPgo8ZHQ+VmFsdWVzOjwvZHQ+CjxkZD4KPHByZT5WYWxpZCBJRCBmcm9t IHR4cF9qbWNfZXZlbnRfY2F0ZWdvcnk8L3ByZT4KPC9kZD4KPGR0PkRlZmF1bHQ6PC9kdD4K PGRkPgo8cHJlPk5VTEw8L3ByZT4KPC9kZD4KPC9kbD4KPGg0PnZlbnVlX2lkPC9oND4KPHA+ VXNlZCB0byByZXN0cmljdCB0aGUgZXZlbnRzIHRvIHRob3NlIHRoYXQgd2lsbCBvY2N1ciBh dCBhIHNwZWNpZmllZCB2ZW51ZSBvciB2ZW51ZXMuPC9wPgo8cD5FeGFtcGxlIHVzYWdlOjwv cD4KPGRsPgo8ZHQ+U2luZ2xlIHZlbnVlICh3aGVyZSB2ZW51ZeKAmXMgSUQ9Mik6PC9kdD4K PGRkPjxjb2RlPjwgdHhwIDpqbWNfZXZlbnRzIGZvcm09ImZvcm1fbmFtZSIgdmVudWVfaWQ9 IjIiIC8+PC9jb2RlPjwvZGQ+CjxkdD5NdWx0aXBsZSB2ZW51ZXMgKHdoZXJlIHZlbnVl4oCZ cyBJRCBpcyBpbiBhcnJheSgyLDQpKTo8L2R0Pgo8ZGQ+PGNvZGU+PCB0eHAgOmptY19ldmVu dHMgZm9ybT0iZm9ybV9uYW1lIiB2ZW51ZV9pZD0iMiw0IiAvPjwvY29kZT48L2RkPgo8ZHQ+ VmFsdWVzOjwvZHQ+CjxkZD4KPHByZT5WYWxpZCBJRCBmcm9tIHR4cF9qbWNfZXZlbnRfdmVu dWU8L3ByZT4KPC9kZD4KPGR0PkRlZmF1bHQ6PC9kdD4KPGRkPgo8cHJlPk5VTEw8L3ByZT4K PC9kZD4KPC9kbD4KPGg0PmV2ZW50X2lkPC9oND4KPHA+VXNlZCB0byByZXN0cmljdCB0aGUg ZXZlbnRzIHRvIGEgcGFydGljdWxhciBldmVudCBvciBncm91cCBvZiBldmVudHMuIFBsZWFz ZSBub3RlIHRoYXQgdGhpcyBvdmVycmlkZXMgPHN0cm9uZz5hbGw8L3N0cm9uZz4gb3RoZXIg dmFyaWFibGVzITwvcD4KPHA+RXhhbXBsZSB1c2FnZTo8L3A+CjxkbD4KPGR0PlNpbmdsZSBl dmVudCAod2hlcmUgZXZlbnTigJlzIElEPTIpOjwvZHQ+CjxkZD48Y29kZT48IHR4cCA6am1j X2V2ZW50cyBmb3JtPSJmb3JtX25hbWUiIGV2ZW50X2lkPSIyIiAvPjwvY29kZT48L2RkPgo8 ZHQ+TXVsdGlwbGUgZXZlbnRzICh3aGVyZSBldmVudOKAmXMgSUQgaXMgaW4gYXJyYXkoMiw0 KSk6PC9kdD4KPGRkPjxjb2RlPjwgdHhwIDpqbWNfZXZlbnRzIGZvcm09ImZvcm1fbmFtZSIg ZXZlbnRfaWQ9IjIsNCIgLz48L2NvZGU+PC9kZD4KPGR0PlZhbHVlczo8L2R0Pgo8ZGQ+Cjxw cmU+VmFsaWQgSUQgZnJvbSB0eHBfam1jX2V2ZW50PC9wcmU+CjwvZGQ+CjxkdD5EZWZhdWx0 OjwvZHQ+CjxkZD4KPHByZT5OVUxMPC9wcmU+CjwvZGQ+CjwvZGw+CjxoND5zb3J0X2J5PC9o ND4KPHA+UHV0cyBpbiBwbGFjZSB0aGUgTXlTUUwgc29ydCBieSBhIHZhcmlhYmxlIG5hbWUu IFVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBzb3J0X29yZGVyLjwvcD4KPGRsPgo8ZHQ+VmFs dWVzOjwvZHQ+CjxkZD4KPHByZT5JRCB8IG5hbWUgfCBzdGFydF9EYXRlVGltZSB8IGZpbmlz aF9EYXRlVGltZSB8IEF1dGhvcklEIHwgTGFzdE1vZElEIHwgVmVudWVJRCB8IFByaWNlIHwg T3RoZXJCYW5kcyB8IE90aGVyQmFuZHNfaHRtbCB8IE90aGVySW5mbyB8T3RoZXJJbmZvX2h0 bWwgfCBDYXRlZ29yeUlEPC9wcmU+CjwvZGQ+CjxkdD5EZWZhdWx0OjwvZHQ+CjxkZD4KPHBy ZT5zdGFydF9EYXRlVGltZTwvcHJlPgo8L2RkPgo8L2RsPgo8aDQ+c29ydF9vcmRlcjwvaDQ+ CjxwPkRldGVybWluZ3MgdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBldmVudHMgd2lsbCBiZSBk aXNwbGF5ZWQuPC9wPgo8ZGw+CjxkdD5WYWx1ZXM6PC9kdD4KPGRkPgo8cHJlPmFzY3xkZXNj PC9wcmU+CjwvZGQ+CjxkdD5EZWZhdWx0OjwvZHQ+CjxkZD4KPHByZT5hc2M8L3ByZT4KPC9k ZD4KPC9kbD4KPGgyPkZvcm1zPC9oMj4KPHA+RXZlbnRzIGFuZCB2ZW51ZXMgZWFjaCBoYXZl IHRoZWlyIG93biBmb3JtcyB3aXRoIHRoZWlyIG93biB2YXJpYWJsZXMuPC9wPgo8aDM+RXZl bnQgRm9ybXM8L2gzPgo8aDQ+RXZlbnQgTmFtZTwvaDQ+CjxoND5FdmVudCBJRDwvaDQ+Cjxo ND5FdmVudCBQcmljZTwvaDQ+CjxoND5PdGhlciBCYW5kczwvaDQ+CjxwPkluc2VydHMgdGhl IGh0bWwgZm9yIG90aGVyIGJhbmQgaW5mb3JtYXRpb24uPC9wPgo8aDQ+T3RoZXIgSW5mb3Jt YXRpb248L2g0Pgo8aDM+VmVudWUgRm9ybXM8L2gzPgo8cD5WZW51ZSBmb3JtIG9wdGlvbnMg Y2FuIGJlIGNhbGxlZCBlaXRoZXIgZnJvbSB0aGUgZXZlbnQgZm9ybSBkaXJlY3RseSwgb3Ig ZnJvbSBhIHNlcGFyYXRlIGZvcm0gdXNpbmcgdGhlIHRhZzo8L3A+CjxoND5WZW51ZSBOYW1l PC9oND4KPGg0PlZlbnVlIElEPC9oND4KPGg0PlZlbnVlIEFkZHJlc3MgMTwvaDQ+CjxoND5W ZW51ZSBBZGRyZXNzIDI8L2g0Pgo8aDQ+VmVudWUgU3VidXJiPC9oND4KPGg0PlZlbnVlIFN0 YXRlPC9oND4KPGg0PlZlbnVlIENvdW50cnk8L2g0Pgo8aDQ+VmVudWUgUG9zdGNvZGU8L2g0 Pgo8aDQ+VmVudWUgUGhvbmU8L2g0Pgo8aDQ+VmVudWUgVVJMPC9oND4KPGg0PlZlbnVlIEVt YWlsPC9oND4KPGg0PlZlbnVlIE90aGVyIEluZm9ybWF0aW9uPC9oND4KPGgzPlVzZWZ1bCBG dW5jdGlvbjwvaDM+CjxwPkluIG9yZGVyIHRvIGV4ZWN1dGUgYSBmZXcgbW9yZSBvcHRpb25z LCB0aGVyZSBpcyBhIHJlcXVpcmVtZW50IHRvIG1hbmlwdWxhdGUgdGhpbmdzIHN1Y2ggYXMg ZGF0ZXMuPC9wPgo8aDQ+RXZlbnQgVGltZXM8L2g0Pgo8cD5FdmVudCB0aW1lcyBnaXZlIG91 dHB1dCBvZiBlaXRoZXIgdGhlIHN0YXJ0IG9yIGZpbmlzaCBkYXRlIGFuZCB0aW1lIG9mIGFu IGV2ZW50IGFuZCB1c2VzIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LnBocC5uZXQvZGF0ZXRp bWUiPlBIUCBEYXRlVGltZSBmdW5jdGlvbmFsaXR5PC9hPiBmb3IgZm9ybWF0dGluZy4gPGNv ZGU+PCB0eHAgOmptY19ldmVudF90aW1lIHBocF9kYXRlPSJwaHBEYXRlRnVuY3Rpb24iIC8+ PC9jb2RlPjwvcD4KPHA+T3B0aW9uczo8L3A+CjxwPjxzdHJvbmc+c3RhcnQ8L3N0cm9uZz4g KGlmIHN0YXJ0PTAgdGhlbiBnaXZlcyBmaW5pc2ggdGltZSk8L3A+CjxkbD4KPGR0PlZhbHVl czwvZHQ+CjxkZD4KPHByZT4wfDE8L3ByZT4KPC9kZD4KPGR0PkRlZmF1bHQ8L2R0Pgo8ZGQ+ CjxwcmU+MTwvcHJlPgo8L2RkPgo8L2RsPgo8aDQ+SWYgVmFyaWFibGU8L2g0Pgo8cD5DaGVj a3MgdG8gc2VlIGlmIGEgdmFyaWFibGUgZXhpc3RzLiBJZiBpdCBkb2VzIG5vdCwgdGhlbiBk ZWxldGVzIHdoYXQgdGhlIHRhZ3MgZW5jbG9zZS48L3A+CjxwIHN0eWxlPSJib3JkZXI6IDFw eCBzb2xpZCByZWQ7IG1hcmdpbjogMTBweCA1MHB4OyBwYWRkaW5nOiAxMHB4OyBiYWNrZ3Jv dW5kOiAjZmZlZWVlIG5vbmUgcmVwZWF0IHNjcm9sbCAwJSA1MCU7IGNvbG9yOiBkYXJrcmVk OyAtbW96LWJhY2tncm91bmQtY2xpcDogLW1vei1pbml0aWFsOyAtbW96LWJhY2tncm91bmQt b3JpZ2luOiAtbW96LWluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1pbmxpbmUtcG9saWN5OiAt bW96LWluaXRpYWwiPjxzdHJvbmc+V2FybmluZzwvc3Ryb25nPjogRXhwZXJpbWVudGFsIChz dGlsbCwgc29ycnkgZ3V5cyBvPSkgKTwvcD4KPHA+PGNvZGU+PCB0eHAgOmptY19pZl92YXJp YWJsZSB2YXJpYWJsZT0idmFyaWFibGVOYW1lIj48IC8gdHhwIDpqbWNfaWZfdmFyaWFibGU+ PC9jb2RlPk9wdGlvbnM6PC9wPgo8cD48c3Ryb25nPnZhcmlhYmxlPC9zdHJvbmc+PC9wPgo8 ZGw+CjxkdD5WYWx1ZXM6PC9kdD4KPGRkPgo8cHJlPmFueSBpbiB0aGUgZGF0YWJhc2UgZm9y IGEgcGFydGljdWxhciBldmVudCBvciB2ZW51ZTwvcHJlPgo8L2RkPgo8ZHQ+RGVmYXVsdDo8 L2R0Pgo8ZGQ+CjxwcmU+TlVMTDwvcHJlPgo8L2RkPgo8L2RsPgo8aDI+RnV0dXJlIFVwZGF0 ZXM8L2gyPgo8cD5UaGUgZm9sbG93aW5nIGZ1dHVyZSB1cGRhdGVzIGFyZSBiZWluZyBjb25z aWRlcmVkIG9yIHdvcmtlZCBvbjo8L3A+Cjx1bD4KPGxpPlJTUyBmZWVkIGZvciB0aGUgRXZl bnQgTWFuYWdlciAobWFueSBvZiB5b3Ugd2lsbCBmaW5kIHRoaXMgYSBiaWcgYm9udXMhKTwv bGk+CjxsaT5Qcm9wZXIgQWRtaW4gUGFuZWwgKHRoaXMgd2lsbCBkZWFsIHdpdGggc29tZSB0 aW1lIGlzc3Vlcywgd2hlcmUgY3VycmVudGx5IGhhdmUgYWxsb3dlZCBvbmx5IDAwLCAxNSwg MzAgYW5kIDQ1IG1pbnV0ZXMgZm9yIHRoZSB0aW1lLCBmdXR1cmUgb3B0aW9ucyB3aWxsIGFs bG93IHRoZSBhZG1pbmlzdHJhdG9ycyB0byBkZWNpZGVkIGhvdyB0aGV5IHdhbnQgdGhlIG1p bnV0ZXMgdG8gYmUgbGltaXRlZCkuPC9saT4KPGxpPlZlbnVlIGRyb3Bkb3duIGFuZCBsaXN0 cyBieSA8ZW0+Y291bnRyeTwvZW0+IHRoZW4gPGVtPnN0YXRlPC9lbT4gKHdoZXJlIGFwcGxp Y2FibGUpLjwvbGk+CjxsaT5Ecm9wZG93biBpbiBBZGQgVmVudWUgdG8gdXNlIDxlbT5jb3Vu dHJ5IGNvZGVzPC9lbT48L2xpPgo8bGk+SW5zdGFsbCBwYWNrKHMpIHdpdGggTmV3IFNvdXRo IFdhbGVzIGFuZCBWaWN0b3JpYW4gbGl2ZSBtdXNpYyB2ZW51ZXMgKEkmIzgyMTc7bSBhbiBh dXNzaWUgYWZ0ZXIgYWxsISkuPC9saT4KPC91bD4KPGgyPkFkZGl0aW9uYWwgRmVhdHVyZXMg YW5kIEJ1ZyBGaXhlczwvaDI+CjxwPlRoZSBmb2xsb3dpbmcgYnVncyBoYXZlIGJlZW4gZml4 ZWQgYW5kIGZlYXR1cmVzIGFkZGVkOjwvcD4KPGgzPnYwLjMgYmV0YTwvaDM+Cjx1bD4KPGxp PlNwbGl0IGludG8gdHdvIHBsdWdpbnM7PC9saT4KPGxpPldyYXB0YWdzLCBJRCBhbmQgQ2xh c3NOYW1lcyBhdmFpbGFibGU7PC9saT4KPGxpPmR0c3RhcnQgYW5kIGR0ZW5kIGZvciBtaWNy b2Zvcm1hdHM8L2xpPgo8L3VsPgo8aDM+djAuMiBiZXRhPC9oMz4KPHVsPgo8bGk+Q2F0ZWdv cmllczwvbGk+CjxsaT5DdXJyZW50IGV2ZW50IG9wdGlvbiBmb3IgY2FsbGluZyBvZjwvbGk+ CjwvdWw+CiI7czo0OiJjb2RlIjtzOjE0MzQ3OiIvLyBQbHVnaW4gY29kZSBnb2VzIGhlcmUu ICBObyBuZWVkIHRvIGVzY2FwZSBxdW90ZXMuCi8qIC1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy0gKi8KLyogRlJPTlQgRU5EIE9VVFBVVCBGUk9OVCBFTkQg T1VUUFVUIEZST05UIEVORCBPVVRQVVQgRlJPTlQgRU5EIE9VVFBVVCBGUk9OVCBFTkQgT1VU UFVUIEZST05UIEVORCBPVSAqLwovKiAtXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tICovCgoJLyogLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLSAqLwoJLy8gRnVuY3Rpb246CQlqbWNfZXZlbnRzCgkvLyBVc2U6 CQkJCUNyZWF0ZXMgdGhlIG91dHB1dCBmb3IgZnJvbnRlbmQKCS8vIElucHV0czoJCQkkYXR0 cwkJCUFSUkFZCgkvLyBPdXRwdXRzOgkJCWh0bWwgdG8gYmUgb3V0cHV0CgkvKiBfLV8tXy1f LV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fICovCglmdW5jdGlv biBqbWNfZXZlbnRzKCRhdHRzID0gJycpCgl7CgkJIyBTZXQgdXAgdGhlIGdsb2JhbCB2YXJp YWJsZXMgZm9yIGFsbCBldmVudHMsIHZlbnVlcyBhbmQgY2F0ZWdvcmllcwoJCWdsb2JhbCAk am1jX2V2ZW50cywgJGptY192ZW51ZXMsICRqbWNfY2F0ZWdvcmllczsKCQkkam1jX2V2ZW50 cyA9IGFycmF5KCk7CgkJJGptY192ZW51ZXMgPSBhcnJheSgpOwoJCSRqbWNfY2F0ZWdvcmll cyA9IGFycmF5KCk7CgoJCSMgQXR0cmlidXRlIGV4dHJhY3Rpb24gLSBvbmx5IHdoYXQgaXMg bmVlZGVkIHRob3VnaAoJCSRhdHRycyA9IGxBdHRzKGFycmF5KAoJCQkjIGZvcm0KCQkJJ2Zv cm0nID0+IGZhbHNlLAoJCQkjIFdoYXQgZGV0YWlscyBhcmUgdG8gYmUgZ2F0aGVyZWQgLSBm dXR1cmUsIGN1cnJlbnQsIHBhc3QKCQkJJ2Z1dHVyZScgPT4gdHJ1ZSwKCQkJJ3Bhc3QnID0+ IGZhbHNlLAoJCQknY3VycmVudCcgPT4gZmFsc2UsCgkJCSMgU29ydCBkZXRhaWxzCgkJCSdz b3J0X2J5JyA9PiAnc3RhcnRfRGF0ZVRpbWUnLAoJCQknc29ydF9vcmRlcicgPT4gJ2FzYycs CgkJCSdsaW1pdCcgPT4gJycsCgkJCSMgR2V0IHBhcnRpY3VsYXIgcGllY2Ugb2YgaW5mbwoJ CQknZXZlbnRfaWQnID0+ICAnJywKCQkJJ3ZlbnVlX2lkJyA9PicnLAoJCQknY2F0ZWdvcnlf aWQnID0+ICcnLAoJCQkjIFdyYXBwaW5nCgkJCSd3cmFwdGFnJyA9PiAnJywKCQkJJ2NsYXNz JyA9PiAnJwoJCQkpLCRhdHRzKTsKCgkJZXh0cmFjdCgkYXR0cnMpOwoKCQkjIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJCSMgUXVlcnkgQ3JlYXRpb24KCQkjIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCQkjIFNvcnQgZGlyZWN0aW9uIGFuZCB3 aGVyZSBjbGF1c3NlcwoJCWlmKCRmdXR1cmUgJiYgJHBhc3QpewoJCQkkc3FsX3doZXJlID0g IiI7CgkJfWVsc2UgaWYgKCEkZnV0dXJlICYmICEkcGFzdCAmJiAhJGN1cnJlbnQpewoJCQly ZXR1cm4gJzx0eHA6bm90aWNlIG1lc3NhZ2U9Im1hbGZvcm1lZCBldmVudHMgdGFnIiAvPic7 CgkJfWVsc2UgaWYgKCRjdXJyZW50KXsKCQkJaWYoJGZ1dHVyZSB8fCAkcGFzdCkKCQkJCSRz cWxfd2hlcmUgPSAiKCh1bml4X3RpbWVzdGFtcChzdGFydF9EYXRlVGltZSk8Ii50aW1lKCku IiBBTkQgdW5peF90aW1lc3RhbXAoZmluaXNoX0RhdGVUaW1lKT4iLnRpbWUoKS4iKSBPUiAi LiJ1bml4X3RpbWVzdGFtcChzdGFydF9EYXRlVGltZSkiLigkZnV0dXJlPyI+IjoiPCIpLnRp bWUoKS4iKSAiOwoJCQllbHNlCgkJCQkkc3FsX3doZXJlID0gInVuaXhfdGltZXN0YW1wKHN0 YXJ0X0RhdGVUaW1lKTwiLnRpbWUoKS4iIEFORCB1bml4X3RpbWVzdGFtcChmaW5pc2hfRGF0 ZVRpbWUpPiIudGltZSgpLiIgIjsKCQl9ZWxzZXsKCQkJJHNxbF93aGVyZSA9ICJ1bml4X3Rp bWVzdGFtcChzdGFydF9EYXRlVGltZSkiLigkZnV0dXJlPyI+IjoiPCIpLnRpbWUoKS4iICI7 CgkJfQoKCQkjIExpbWl0IGNoZWNrCgkJJHNvcnRfbGltaXQgPSAoJGxpbWl0PyJsaW1pdCAk bGltaXQiOiIiKTsKCgkJIyBMaW1pdCB0byBhIHBhcnRpY3VsYXIgVmVudWUgW2FycmF5XQoJ CWlmKCR2ZW51ZV9pZCAhPSAnJyl7CgkJCWlmICgkc3FsX3doZXJlICE9ICIiKQoJCQkJJHNx bF93aGVyZSAuPSAiIEFORCBWZW51ZUlEIElOICgiLmRvU2xhc2goJHZlbnVlX2lkKS4iKSAi OwoJCQllbHNlCgkJCQkkc3FsX3doZXJlIC49ICIgVmVudWVJRCBJTiAoIi5kb1NsYXNoKCR2 ZW51ZV9pZCkuIikgIjsKCQl9CgoJCSMgTGltaXQgdG8gYSBwYXJ0aWN1bGFyIENhdGVnb3J5 IFthcnJheV0KCQlpZigkY2F0ZWdvcnlfaWQgIT0gJycpewoJCQlpZigoJHZlbnVlX2lkICE9 ICcnKSBPUiAoJHNxbF93aGVyZSAhPSAiIikpCgkJCQkkc3FsX3doZXJlIC49ICIgQU5EIENh dGVnb3J5SUQgSU4gKCIuZG9TbGFzaCgkY2F0ZWdvcnlfaWQpLiIpICI7CgkJCWVsc2UKCQkJ CSRzcWxfd2hlcmUgLj0gIiBDYXRlZ29yeUlEIElOICgiLmRvU2xhc2goJGNhdGVnb3J5X2lk KS4iKSAiOwoJCX0KCgkJIyBMaW1pdCB0byBhIHBhcnRpY3VsYXIgRXZlbnQocykgW2lkXSBP UiBnZXQgYWxsIHdpdGggYWJvdmUgY2xhdXNlcwoJCWlmKCRldmVudF9pZCAhPSAnJyl7CgkJ CSRldmVudF9pZCA9IGRvU2xhc2goJGV2ZW50X2lkKTsKCQkJJHRtcHMgPSBzYWZlX3Jvd3Mo CgkJCQkiKiwgdW5peF90aW1lc3RhbXAoc3RhcnRfRGF0ZVRpbWUpIGFzIHVTdGFydCwgdW5p eF90aW1lc3RhbXAoZmluaXNoX0RhdGVUaW1lKSBhcyB1RmluaXNoIiwKCQkJCSJ0eHBfam1j X2V2ZW50IiwKCQkJCSJpZCBJTiAoJGV2ZW50X2lkKSIKCQkJKTsKCQkJIyBTYXZlIGludG8g R0xPQkFMICRqbWNfZXZlbnRzCgkJCWZvcmVhY2goJHRtcHMgYXMgJHRtcCl7CgkJCQkkam1j X2V2ZW50c1skdG1wWydJRCddXSA9ICR0bXA7CgkJCX0KCQkJJHJzID0gc2FmZV9yb3dzX3N0 YXJ0KCIqIiwgInR4cF9qbWNfZXZlbnQiLCAiaWQgSU4gKCRldmVudF9pZCkiKTsKCQl9ZWxz ZXsKCQkJJHNxbF93aGVyZSA9ICgkc3FsX3doZXJlPyRzcWxfd2hlcmU6IklEIik7CgkJCSR0 bXBzID0gc2FmZV9yb3dzKAoJCQkJIiosIHVuaXhfdGltZXN0YW1wKHN0YXJ0X0RhdGVUaW1l KSBhcyB1U3RhcnQsIHVuaXhfdGltZXN0YW1wKGZpbmlzaF9EYXRlVGltZSkgYXMgdUZpbmlz aCIsCgkJCQkidHhwX2ptY19ldmVudCIsCgkJCQkiJHNxbF93aGVyZSBPUkRFUiBCWSAkc29y dF9ieSAkc29ydF9vcmRlciAkc29ydF9saW1pdCIKCQkJKTsKCQkJIyBTYXZlIGludG8gR0xP QkFMICRqbWNfZXZlbnRzCgkJCWZvcmVhY2goJHRtcHMgYXMgJHRtcCl7CgkJCQkkam1jX2V2 ZW50c1skdG1wWydJRCddXSA9ICR0bXA7CgkJCX0KCQkJJHJzID0gc2FmZV9yb3dzX3N0YXJ0 KAoJCQkJIiosIHVuaXhfdGltZXN0YW1wKHN0YXJ0X0RhdGVUaW1lKSBhcyB1U3RhcnQsIHVu aXhfdGltZXN0YW1wKGZpbmlzaF9EYXRlVGltZSkgYXMgdUZpbmlzaCIsCgkJCQkidHhwX2pt Y19ldmVudCIsCgkJCQkiJHNxbF93aGVyZSBPUkRFUiBCWSAkc29ydF9ieSAkc29ydF9vcmRl ciAkc29ydF9saW1pdCIKCQkJKTsKCQl9CgoJCSMgQ3JlYXRlIEdMT0JBTCAkam1jX3ZlbnVl cyB2ZW51ZSBhcnJheQoJCSR0bXBzID0gc2FmZV9yb3dzKAoJCQkiKiIsCgkJCSJ0eHBfam1j X2V2ZW50X3ZlbnVlIiwKCQkJIklEIE9SREVSIEJZIElEIEFTQyIKCQkpOwoJCWZvcmVhY2go JHRtcHMgYXMgJHRtcCl7CgkJCSRqbWNfdmVudWVzWyR0bXBbJ0lEJ11dID0gJHRtcDsKCQl9 CgoJCSMgQ3JlYXRlIEdMT0JBTCAkam1jX2NhdGVnb3JpZXMgY2F0ZWdvcnkgYXJyYXkKCQkk dG1wcyA9IHNhZmVfcm93cygKCQkJIioiLAoJCQkidHhwX2ptY19ldmVudF9jYXRlZ29yeSIs CgkJCSJJRCBPUkRFUiBCWSBJRCBBU0MiCgkJKTsKCQlmb3JlYWNoKCR0bXBzIGFzICR0bXAp ewoJCQkkam1jX2NhdGVnb3JpZXNbJHRtcFsnSUQnXV0gPSAkdG1wOwoJCX0KCgkJIyBSdW4g dGhlIGZvcm0gZGV0YWlscyB0byBwYXJzZSB0YWdzIGV0YwoJCWlmKCRqbWNfZXZlbnRzKQoJ CXsKCQkJaWYoJGZvcm0pCgkJCQlyZXR1cm4gam1jX2V2ZW50X2Zvcm0oJGF0dHJzKTsKCQkJ ZWxzZQoJCQkJcmV0dXJuIGptY19ldmVudF9kZWZhdWx0KCRhdHRycyk7CgkJfQoJfQoKCS8q IC1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy0gKi8K CS8vIEZ1bmN0aW9uOgkJam1jX2V2ZW50X2RlZmF1bHQKCS8vIFVzZToJCQkJQ3JlYXRlcyB0 aGUgb3V0cHV0IGZvciBmcm9udGVuZAoJLy8gSW5wdXRzOgkJCSRycwkJCUZpcnN0IHJvdyBm cm9tIERCCgkvLwkJCQkJJGZvcm1fbmFtZQlOYW1lIG9mIGZvcm0gdG8gdXNlCgkvLyBPdXRw dXRzOgkJCWh0bWwgdG8gYmUgb3V0cHV0CgkvLyBOb3RlOgkJCUZ1dHVyZSBpbXBsZW1lbnRh dGlvbnMgd2lsbCB1c2UKCS8vCQkJCXRoaXMgYXMgdGhlIGRlZmF1bHQgbWljcm9mb3JtYXQg Zm9ybS4KCS8qIF8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8gKi8KCWZ1bmN0aW9uIGptY19ldmVudF9kZWZhdWx0KCRhdHRycykKCXsKCQkjIFNl dCB1cCB0aGUgZ2xvYmFsIHZhcmlhYmxlcyBmb3IgYWxsIGV2ZW50cywgdmVudWVzIGFuZCBj YXRlZ29yaWVzCgkJZ2xvYmFsICRqbWNfZXZlbnRzLCAkam1jX3ZlbnVlcywgJGptY19jYXRl Z29yaWVzOwoKCQkjIFNldHVwIHRoZSBnbG9iYWwgZGV0YWlscyBmb3IgYSBmZXcgb3RoZXIg dGhpbmdzLi4uCgkJZ2xvYmFsICRpbWdfZGlyLCAkZXZlbnRfc2VhcmNoLCAkdmVudWVfc2Vh cmNoLCAkdmVudWVfaW1hZ2Vfc2VhcmNoOwoKCQkjIEdyYWIgYWxsIHRoZSBhdHRycyBmcm9t IHByZXZpb3VzCgkJZXh0cmFjdCgkYXR0cnMpOwoKCQkkZm9ybSA9IDw8PEVPRgoJCQkJPGxp IGNsYXNzPSJ2ZXZlbnQgPHR4cDpqbWNfZXZlbl9vZGQgLz4iPgoJCQkJCTx0eHA6am1jX2V2 ZW50X25hbWUgd3JhcHRhZz0ic3BhbiIgY2xhc3M9InN1bW1hcnkiIC8+CgkJCQkJPHVsPgoJ CQkJCQk8bGk+c3RhcnQ6IDx0eHA6am1jX2V2ZW50X3RpbWUgd3JhcHRhZz0iYWJicmV2IiBz dGFydD0iMSIgcGhwX2RhdGU9ImMiIC8+PC9saT4KCQkJCQkJPGxpPmVuZDogPHR4cDpqbWNf ZXZlbnRfdGltZSB3cmFwdGFnPSJhYmJyZXYiIHN0YXJ0PSIwIiBwaHBfZGF0ZT0iYyIgLz48 L2xpPgoJCQkJCTwvdWw+CgkJCQkJPHVsIGNsYXNzPSJkZXNjcmlwdGlvbiI+CgkJCQkJCTxs aT5wcmljZTogPHR4cDpqbWNfZXZlbnRfcHJpY2UgLz48L2xpPgoJCQkJCQk8bGk+b3RoZXJi YW5kczogPHR4cDpqbWNfZXZlbnRfb3RoZXJiYW5kcyAvPjwvbGk+CgkJCQkJCTxsaT5vdGhl cmluZm86IDx0eHA6am1jX2V2ZW50X290aGVyaW5mbyAvPjwvbGk+CgkJCQkJCTxsaT5jYXRl Z29yeTogPHR4cDpqbWNfZXZlbnRfY2F0ZWdvcnkgLz48L2xpPgoJCQkJCTwvdWw+CgkJCQkJ PHVsPgoJCQkJCQk8bGkgY2xhc3M9ImxvY2F0aW9uIHZjYXJkIj4KCQkJCQkJCTx0eHA6am1j X3ZlbnVlX25hbWUgbGlua2VkPSIxIiBjbGFzcz0idXJsIG9yZyIgLz4KCQkJCQkJCTx0eHA6 am1jX3ZlbnVlX2VtYWlsIGxpbmtlZD0iMSIgd3JhcHRhZz0iZGl2IiBjbGFzcz0iZW1haWwi IC8+CgkJCQkJCQk8ZGl2IGNsYXNzPSJhZHIiPgoJCQkJCQkJCTx0eHA6am1jX3ZlbnVlX2Fk ZHJlc3MxIHdyYXB0YWc9ImRpdiIgY2xhc3M9InN0cmVldC1hZGRyZXNzIiAvPjx0eHA6am1j X3ZlbnVlX2FkZHJlc3MyIHdyYXB0YWc9ImRpdiIgY2xhc3M9InN0cmVldC1hZGRyZXNzIiAv PgoJCQkJCQkJCTx0eHA6am1jX3ZlbnVlX3N1YnVyYiB3cmFwdGFnPSJzcGFuIiBjbGFzcz0i bG9jYWxpdHkiIC8+CgkJCQkJCQkJPHR4cDpqbWNfdmVudWVfc3RhdGUgd3JhcHRhZz0ic3Bh biIgY2xhc3M9InJlZ2lvbiIgLz4KCQkJCQkJCQk8dHhwOmptY192ZW51ZV9wb3N0Y29kZSB3 cmFwdGFnPSJzcGFuIiBjbGFzcz0icG9zdGFsLWNvZGUiIC8+CgkJCQkJCQkJPHR4cDpqbWNf dmVudWVfY291bnRyeSB3cmFwdGFnPSJzcGFuIiBjbGFzcz0iY291bnRyeS1uYW1lIiAvPgoJ CQkJCQkJPC9kaXY+CgkJCQkJCQk8dHhwOmptY192ZW51ZV9vdGhlcmluZm8gd3JhcHRhZz0i ZGl2IiBjbGFzcz0ib3RoZXJpbmZvIiAvPgoJCQkJCQk8L2xpPgoJCQkJCTwvdWw+CgkJCQk8 L2xpPgpFT0Y7CgoJCWlmKCRmb3JtKQoJCXsKCQkJIyBTdGFydCB0aGUgb3V0cHV0IC0gcmVt ZW1iZXIgd2UnbGwgaGF2ZSB0byB3cmFwIGl0IHRvby4uLgoJCQkkb3V0cHV0ID0gIiI7CgkJ CSMgQ291bnRlciAtIHVzZWQgZm9yIGV2ZW4vb2RkIDpECgkJCSRjb3VudGVyID0gMTsKCQkJ JGNvdW50ZXJfY2xhc3MgPSBhcnJheSgiZXZlbiIsICJvZGQiKTsKCgkJCSMgR28gdGhyb3Vn aCBlYWNoIGV2ZW50IGluIHRoZSAkam1jX2V2ZW50cyBhcnJheQoJCQlmb3JlYWNoKCRqbWNf ZXZlbnRzIGFzICRldmVudCkKCQkJewoJCQkJJHRlbXAgPSAkZm9ybTsKCgkJCQkjIFJlcGxh Y2UgdGhlIHZhcmlvdXMgY29tcG9uZW50cwoJCQkJJHRlbXAgPSBwcmVnX3JlcGxhY2UoJy8o PHR4cDpqbWNfZXZlbl9vZGQgXC8+KS8nLCAkY291bnRlcl9jbGFzc1skY291bnRlciUyXSwg JHRlbXApOwoJCQkJJHRlbXAgPSBwcmVnX3JlcGxhY2UoJy8oPHR4cDpqbWNfZXZlbnRfKShb YS16XSopLycsICdcXDEgaWQ9IicuJGV2ZW50WydJRCddLiciIGVsZW1lbnQ9IlxcMiInLCAk dGVtcCk7CgkJCQkkdGVtcCA9IHByZWdfcmVwbGFjZSgnLyg8dHhwOmptY192ZW51ZV8pKFth LXowLTldKikvJywgJ1xcMSBpZD0iJy4kZXZlbnRbJ0lEJ10uJyIgZWxlbWVudD0iXFwyIics ICR0ZW1wKTsKCQkJCSRjb3VudGVyKys7CgoJCQkJIyBGb3IgdGhlIHRpbWVzIGFuZCBkYXRl cywgd2UnbGwgbmVlZCB0byBwYXJzZSB0aGlzLi4uCgkJCQkjIGFuZCBhZ2FpbiBiZWNhdXNl IG9mIHRoZSB2ZW51ZSBmb3JtIDpcCgkJCQkkdGVtcCA9IHBhcnNlKCR0ZW1wKTsKCgkJCQkk b3V0cHV0IC49ICR0ZW1wOwoJCQl9CgkJCWlmKCR3cmFwdGFnICYmICRqbWNfZXZlbnRzKQoJ CQkJcmV0dXJuICI8JHdyYXB0YWciLigkY2xhc3M/IiBjbGFzcz1cIiRjbGFzc1wiIjoiIiku KCR0aXRsZT8iIHRpdGxlPVwiJHRpdGxlXCIiOiIiKS4iPiIuJG91dHB1dC4iPC8kd3JhcHRh Zz4iOwoJCQllbHNlCgkJCQlyZXR1cm4gJzx1bCBjbGFzcz0iam1jX2V2ZW50cyI+Jy4kb3V0 cHV0Lic8L3VsPic7CgkJfQoJCWVsc2UKCQl7CgkJCXJldHVybiAnPHR4cDpub3RpY2UgbWVz c2FnZT0ibWFsZm9ybWVkIGV2ZW50IHRhZyAtIGZvcm0gZG9lc25cJ3QgZXhpc3QiIC8+JzsK CQl9Cgl9CgoJLyogLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1f LV8tXy1fLSAqLwoJLy8gRnVuY3Rpb246CQlqbWNfZXZlbnRfZm9ybQoJLy8gVXNlOgkJCQlD cmVhdGVzIHRoZSBvdXRwdXQgZm9yIGFuIGV2ZW50IGZvcm0KCS8vIElucHV0czoJCQkkcnMJ CQlGaXJzdCByb3cgZnJvbSBEQgoJLy8JCQkJCSRmb3JtX25hbWUJTmFtZSBvZiBmb3JtIHRv IHVzZQoJLy8gT3V0cHV0czoJCQlodG1sIHRvIGJlIG91dHB1dAoJLy8gTm90ZToJCQlGdXR1 cmUgaW1wbGVtZW50YXRpb25zIHdpbGwgdXNlCgkvLwkJCQl0aGlzIGFzIHRoZSBkZWZhdWx0 IG1pY3JvZm9ybWF0IGZvcm0uCgkvKiBfLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1f LV8tXy1fLV8tXy1fLV8tXy1fICovCglmdW5jdGlvbiBqbWNfZXZlbnRfZm9ybSgkYXR0cnMp Cgl7CgkJIyBTZXQgdXAgdGhlIGdsb2JhbCB2YXJpYWJsZXMgZm9yIGFsbCBldmVudHMsIHZl bnVlcyBhbmQgY2F0ZWdvcmllcwoJCWdsb2JhbCAkam1jX2V2ZW50cywgJGptY192ZW51ZXMs ICRqbWNfY2F0ZWdvcmllczsKCgkJIyBTZXR1cCB0aGUgZ2xvYmFsIGRldGFpbHMgZm9yIGEg ZmV3IG90aGVyIHRoaW5ncy4uLgoJCWdsb2JhbCAkaW1nX2RpciwgJGV2ZW50X3NlYXJjaCwg JHZlbnVlX3NlYXJjaCwgJHZlbnVlX2ltYWdlX3NlYXJjaDsKCgkJIyBHcmFiIGFsbCB0aGUg YXR0cnMgZnJvbSBwcmV2aW91cwoJCWV4dHJhY3QoJGF0dHJzKTsKCgkJIyBUaWR5IHVwIHRo ZSBmb3JtIG5hbWUgKyByZXRyZWl2ZSBpdCBmcm9tIHRoZSBkYXRhYmFzZQoJCSRmb3JtX25h bWUgPSBkb1NsYXNoKCRmb3JtKTsKCQkkZm9ybSA9IHNhZmVfZmllbGQoIkZvcm0iLCAidHhw X2Zvcm0iLCAibmFtZSA9ICckZm9ybV9uYW1lJyIpOwoKCQkjIFVzZSBpdCBpZiB3ZSd2ZSBn b3QgYSBmb3JtIHRoYXQgbWF0Y2hlcywgb3RoZXJ3aXNlIHJldHVybiBlcnJvciBtZXNzYWdl CgkJaWYoJGZvcm0pCgkJewoJCQkjIFN0YXJ0IHRoZSBvdXRwdXQgLSByZW1lbWJlciB3ZSds bCBoYXZlIHRvIHdyYXAgaXQgdG9vLi4uCgkJCSRvdXRwdXQgPSAiIjsKCQkJIyBDb3VudGVy IC0gdXNlZCBmb3IgZXZlbi9vZGQgOkQKCQkJJGNvdW50ZXIgPSAwOwoJCQkkY291bnRlcl9j bGFzcyA9IGFycmF5KCJldmVuIiwgIm9kZCIpOwoKCQkJIyBHbyB0aHJvdWdoIGVhY2ggZXZl bnQgaW4gdGhlICRqbWNfZXZlbnRzIGFycmF5CgkJCWZvcmVhY2goJGptY19ldmVudHMgYXMg JGV2ZW50KQoJCQl7CgkJCQkkdGVtcCA9ICRmb3JtOwoKCQkJCSMgUmVwbGFjZSB0aGUgdmFy aW91cyBjb21wb25lbnRzCgkJCQkkdGVtcCA9IHByZWdfcmVwbGFjZSgnLyg8dHhwOmptY19l dmVuX29kZCBcLz4pLycsICRjb3VudGVyX2NsYXNzWyRjb3VudGVyJTJdLCAkdGVtcCk7CgkJ CQkkdGVtcCA9IHByZWdfcmVwbGFjZSgnLyg8dHhwOmptY192ZW51ZSkvJywgcGFyc2UoJ1xc MSBpZD0iJy4kZXZlbnRbJ0lEJ10uJyIgXFwyJyksICR0ZW1wKTsKCQkJCSR0ZW1wID0gcHJl Z19yZXBsYWNlKCcvKDx0eHA6am1jX2V2ZW50XykoW2Etel0qKS8nLCAnXFwxIGlkPSInLiRl dmVudFsnSUQnXS4nIiBlbGVtZW50PSJcXDIiJywgJHRlbXApOwoJCQkJJHRlbXAgPSBwcmVn X3JlcGxhY2UoJy8oPHR4cDpqbWNfdmVudWVfKShbYS16MC05XSopLycsICdcXDEgaWQ9Iicu JGV2ZW50WydJRCddLiciIGVsZW1lbnQ9IlxcMiInLCAkdGVtcCk7CgkJCQkkY291bnRlcisr OwoKCQkJCSMgRm9yIHRoZSB0aW1lcyBhbmQgZGF0ZXMsIHdlJ2xsIG5lZWQgdG8gcGFyc2Ug dGhpcy4uLgoJCQkJIyBhbmQgYWdhaW4gYmVjYXVzZSBvZiB0aGUgdmVudWUgZm9ybSA6XAoJ CQkJJHRlbXAgPSBwYXJzZSgkdGVtcCk7CgoJCQkJJG91dHB1dCAuPSAkdGVtcDsKCQkJfQoJ CQlpZigkd3JhcHRhZyAmJiAkam1jX2V2ZW50cykKCQkJCXJldHVybiAiPCR3cmFwdGFnIi4o JGNsYXNzPyIgY2xhc3M9XCIkY2xhc3NcIiI6IiIpLigkdGl0bGU/IiB0aXRsZT1cIiR0aXRs ZVwiIjoiIikuIj4iLiRvdXRwdXQuIjwvJHdyYXB0YWc+IjsKCQkJZWxzZQoJCQkJcmV0dXJu ICRvdXRwdXQ7CgkJfQoJCWVsc2UKCQl7CgkJCXJldHVybiAnPHR4cDpub3RpY2UgbWVzc2Fn ZT0ibWFsZm9ybWVkIGV2ZW50IHRhZyAtIGZvcm0gZG9lc25cJ3QgZXhpc3QiIC8+JzsKCQl9 Cgl9CgkvKiAtXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1f LV8tICovCgkvLyBGdW5jdGlvbjoJCWptY192ZW51ZQoJLy8gVXNlOgkJCQlDcmVhdGVzIHRo ZSBvdXRwdXQgZm9yIGZyb250ZW5kCgkvLyBJbnB1dHM6CQkJJGF0dHMJCUFSUkFZCgkvLwkJ CQkJJHRoaW5nCQk/CgkvLyBPdXRwdXRzOgkJCWh0bWwgdG8gYmUgb3V0cHV0CgkvLyBOb3Rl OgkJCUZ1dHVyZSBpbXBsZW1lbnRhdGlvbnMgd2lsbCB1c2UKCS8vCQkJCXRoaXMgYXMgdGhl IGRlZmF1bHQgbWljcm9mb3JtYXQgZm9ybS4KCS8qIF8tXy1fLV8tXy1fLV8tXy1fLV8tXy1f LV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8gKi8KCWZ1bmN0aW9uIGptY192ZW51ZSgkYXR0 cywgJHRoaW5nID0gJycpCgl7CgkJIyBTZXQgdXAgdGhlIGdsb2JhbCB2YXJpYWJsZXMgZm9y IGFsbCBldmVudHMsIHZlbnVlcyBhbmQgY2F0ZWdvcmllcwoJCWdsb2JhbCAkam1jX2V2ZW50 cywgJGptY192ZW51ZXMsICRqbWNfY2F0ZWdvcmllczsKCgkJJGF0dHJzID0gbEF0dHMoYXJy YXkoCgkJCSdpZCcgPT4nJywKCQkJJ2Zvcm0nID0+IGZhbHNlLAoJCQknd3JhcHRhZycgPT4g JycsCgkJCSdjbGFzcycgPT4gJycsCgkJCSd0aXRsZScgPT4gJycKCQkJKSwkYXR0cyk7CgkJ ZXh0cmFjdCgkYXR0cnMpOwoKCQlpZigkZm9ybSAmJiAkdGVtcCA9IHNhZmVfZmllbGQoIkZv cm0iLCAidHhwX2Zvcm0iLCAibmFtZSA9ICckZm9ybSciKSkKCQl7CgkJCSR0ZW1wID0gcHJl Z19yZXBsYWNlKCcvKDx0eHA6am1jX3ZlbnVlXykoW2EtejAtOV0qKS8nLCAnXFwxIGlkPSIn LiRpZC4nIiBlbGVtZW50PSJcXDIiJywgJHRlbXApOwoJCQlyZXR1cm4gJHRlbXA7CgkJfQoJ CWVsc2UKCQl7CgkJCXJldHVybiAkdGVtcDsKCQl9Cgl9CgoJLyogLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLSAqLwoJLyoJRnVuY3Rpb246CQlq bWNfZXZlbnRfCgkvKglVc2U6CQkJCVJldHVybnMgd3JhcHBlZCBldmVudCBkZXRhaWxzCgkv KiBfLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fICov CglmdW5jdGlvbiBqbWNfZXZlbnRfKCRhdHRzKXsKCQkjIFNldCB1cCB0aGUgZ2xvYmFsIHZh cmlhYmxlcyBmb3IgYWxsIGV2ZW50cywgdmVudWVzIGFuZCBjYXRlZ29yaWVzCgkJZ2xvYmFs ICRqbWNfZXZlbnRzLCAkam1jX2NhdGVnb3JpZXMsICRqbWNfYXR0cnM7CgoJCSRhdHRycyA9 IGxBdHRzKCRqbWNfYXR0cnNbJ2ptY19ldmVudF8nXSwkYXR0cyk7CgkJZXh0cmFjdCgkYXR0 cnMpOwoKCQkkam1jX2V2ZW50XyA9ICRqbWNfZXZlbnRzWyRpZF07CgoJCSMgQ29udmVyc2lv biBmb3IgREIgU2NoZW1lIERPSCEKCQlzd2l0Y2goJGVsZW1lbnQpewoJCQljYXNlICdpZCc6 CgkJCQkkZSA9ICdJRCc7CgkJCQlicmVhazsKCQkJY2FzZSAncHJpY2UnOgoJCQkJJGUgPSAn UHJpY2UnOwoJCQkJYnJlYWs7CgkJCWNhc2UgJ290aGVyYmFuZHMnOgoJCQkJJGUgPSAnT3Ro ZXJCYW5kcyc7CgkJCQlicmVhazsKCQkJY2FzZSAnb3RoZXJpbmZvJzoKCQkJCSRlID0gJ090 aGVySW5mbyc7CgkJCQlicmVhazsKCQkJY2FzZSAndGltZSc6CgkJCQkkZSA9ICgkc3RhcnQ/ J3VTdGFydCc6J3VGaW5pc2gnKTsKCQkJCSRpc28gPSBkYXRlKCJZbWQiLCAkam1jX2V2ZW50 X1skZV0gKyB0el9vZmZzZXQoKSkuIlQiLmRhdGUoIkhpIiwgJGptY19ldmVudF9bJGVdICsg dHpfb2Zmc2V0KCkpOwoJCQkJJGlzbyAuPSAoZGF0ZSgiWiIsICRqbWNfZXZlbnRfWyRlXSAr IHR6X29mZnNldCgpKT49MD8iKyI6IiIpLmZsb29yKGRhdGUoIloiLCAkam1jX2V2ZW50X1sk ZV0gKyB0el9vZmZzZXQoKSkvMzYwMCk7CgkJCQkkbWluID0gZmxvb3IoKGRhdGUoIloiLCAk am1jX2V2ZW50X1skZV0gKyB0el9vZmZzZXQoKSklMzYwMCkvNjApOwoJCQkJJG1pbiA9IChz dHJsZW4oJG1pbik9PTE/JG1pbi4iMCI6JG1pbik7CgkJCQkkaXNvIC49ICRtaW47CgkJCQli cmVhazsKCQkJZGVmYXVsdDoKCQkJCSRlID0gJ25hbWUnOwoJCX0KCgkJc3dpdGNoKCRlbGVt ZW50KXsKCQkJY2FzZSAnY2F0ZWdvcnknOgoJCQkJJHZhbHVlID0gKCRuYW1lPyRqbWNfY2F0 ZWdvcmllc1skam1jX2V2ZW50X1snQ2F0ZWdvcnlJRCddXVsnbmFtZSddOiRqbWNfY2F0ZWdv cmllc1skam1jX2V2ZW50X1snQ2F0ZWdvcnlJRCddXVsnaWQnXSk7CgkJCQlicmVhazsKCQkJ Y2FzZSAndGltZSc6CgkJCQkkdmFsdWUgPSBkYXRlKCRwaHBfZGF0ZSwgJGptY19ldmVudF9b JGVdICsgdHpfb2Zmc2V0KCkpOwoJCQkJaWYoJHdyYXB0YWcgJiYgJGptY19ldmVudHNbJGlk XVskZV0pCgkJCQkJcmV0dXJuICI8JHdyYXB0YWcgIi4oJHN0YXJ0ID09ICcxJz8iY2xhc3M9 XCJkdHN0YXJ0IjoiY2xhc3M9XCJkdGVuZCIpLigkY2xhc3M/IiAkY2xhc3NcIiI6IlwiIiku KCIgdGl0bGU9XCIkaXNvXCIiKS4iPiIuJHZhbHVlLiI8LyR3cmFwdGFnPiI7CgkJCQllbHNl CgkJCQkJcmV0dXJuICR2YWx1ZTsKCQkJCWJyZWFrOwoJCQljYXNlICdvdGhlcmJhbmRzJzoK CQkJCSR2YWx1ZSA9ICgkam1jX2V2ZW50X1skZV0/JGptY19ldmVudF9bJ090aGVyQmFuZHNf aHRtbCddOiIiKTsKCQkJCWJyZWFrOwoJCQljYXNlICdvdGhlcmluZm8nOgoJCQkJJHZhbHVl ID0gKCRqbWNfZXZlbnRfWyRlXT8kam1jX2V2ZW50X1snT3RoZXJJbmZvX2h0bWwnXToiIik7 CgkJCQlicmVhazsKCQkJZGVmYXVsdDoKCQkJCSR2YWx1ZSA9ICRqbWNfZXZlbnRfWyRlXTsK CQkJCWJyZWFrOwoJCX0KCQlpZigkd3JhcHRhZyAmJiAoc3RybGVuKCR2YWx1ZSkgPiAwKSkK CQkJcmV0dXJuICI8JHdyYXB0YWciLigkY2xhc3M/IiBjbGFzcz1cIiRjbGFzc1wiIjoiIiku KCR0aXRsZT8iIHRpdGxlPVwiJHRpdGxlXCIiOiIiKS4iPiIuJHZhbHVlLiI8LyR3cmFwdGFn PiI7CgkJZWxzZQoJCQlyZXR1cm4gJHZhbHVlOwoJfQoKCgkvKiAtXy1fLV8tXy1fLV8tXy1f LV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tICovCgkvKglGdW5jdGlvbjoJCWpt Y192ZW51ZV8KCS8qCVVzZToJCQkJUmV0dXJucyB3cmFwcGVkIHZlbnVlIGRldGFpbHMKCS8q IF8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8gKi8K CWZ1bmN0aW9uIGptY192ZW51ZV8oJGF0dHMpewoKCQkjIFNldCB1cCB0aGUgZ2xvYmFsIHZh cmlhYmxlcyBmb3IgYWxsIGV2ZW50cywgdmVudWVzIGFuZCBjYXRlZ29yaWVzCgkJZ2xvYmFs ICRqbWNfZXZlbnRzLCAkam1jX3ZlbnVlcywgJGptY19jYXRlZ29yaWVzLCAkam1jX2F0dHJz OwoKCQkkYXR0cnMgPSBsQXR0cygkam1jX2F0dHJzWydqbWNfdmVudWVfJ10sJGF0dHMpOwoJ CWV4dHJhY3QoJGF0dHJzKTsKCgkJJGptY19ldmVudF8gPSAkam1jX2V2ZW50c1skaWRdOwoJ CSRqbWNfdmVudWVfID0gJGptY192ZW51ZXNbJGptY19ldmVudF9bJ1ZlbnVlSUQnXV07CgoJ CSMgQ29udmVyc2lvbiBmb3IgREIgU2NoZW1lIERPSCEKCQlzd2l0Y2goJGVsZW1lbnQpewoJ CQljYXNlICdpZCc6CgkJCQkkZSA9ICdJRCc7CgkJCQlicmVhazsKCQkJY2FzZSAnb3RoZXJp bmZvJzoKCQkJCSRlID0gJ090aGVySW5mbyc7CgkJCQlicmVhazsKCQkJZGVmYXVsdDoKCQkJ CSRlID0gJGVsZW1lbnQ7CgkJCQlicmVhazsKCQl9CgoJCXN3aXRjaCgkZWxlbWVudCl7CgkJ CWNhc2UgJ2NhdGVnb3J5JzoKCQkJCSR2YWx1ZSA9ICgkbmFtZT8kam1jX2NhdGVnb3JpZXNb JGptY192ZW51ZV9bJ0NhdGVnb3J5SUQnXV1bJ25hbWUnXTokam1jX2NhdGVnb3JpZXNbJGpt Y192ZW51ZV9bJ0NhdGVnb3J5SUQnXV1bJ2lkJ10pOwoJCQkJYnJlYWs7CgkJCWNhc2UgJ290 aGVyaW5mbyc6CgkJCQkkdmFsdWUgPSAoJGptY192ZW51ZV9bJGVdPyRqbWNfdmVudWVfWydP dGhlckluZm9faHRtbCddOiIiKTsKCQkJCWJyZWFrOwoJCQlkZWZhdWx0OgoJCQkJJHZhbHVl ID0gJGptY192ZW51ZV9bJGVdOwoJCQkJYnJlYWs7CgkJfQoKCQlpZigoJGxpbmtlZCB8fCAk ZSA9PSAndXJsJykgJiYgJGptY192ZW51ZV9bJ3VybCddKQoJCQkkdmFsdWUgPSAiPGEgaHJl Zj1cIiIuJGptY192ZW51ZV9bJ3VybCddLiJcIj4iLiR2YWx1ZS4iPC9hPiI7CgkJZWxzZSBp ZiAoJGUgPT0gJ2VtYWlsJykKCQkJJHZhbHVlID0gIjxhIGhyZWY9XCJtYWlsdG86Ii4kam1j X3ZlbnVlX1snZW1haWwnXS4iXCI+Ii4kdmFsdWUuIjwvYT4iOwoKCQlpZigkd3JhcHRhZyAm JiAoc3RybGVuKCR2YWx1ZSkgPiAwKSkKCQkJcmV0dXJuICI8JHdyYXB0YWciLigkY2xhc3M/ IiBjbGFzcz1cIiRjbGFzc1wiIjoiIikuIj4iLiR2YWx1ZS4iPC8kd3JhcHRhZz4iOwoJCWVs c2UKCQkJcmV0dXJuICR2YWx1ZTsKCX0KCgkjIEdsb2JhbHMgZm9yIHRoZSBvdXRwdXQgdGFn cy4uLiBEb2RneSBoYWNrLCBidXQgbWVoIDpcCglnbG9iYWwgJGptY19hdHRyczsKCgkkam1j X2F0dHJzWydqbWNfZXZlbnRfJ10gPSBhcnJheSgKCQkjIERldGFpbAoJCSdpZCcgPT4gJycs CgkJJ25hbWUnID0+IHRydWUsCgkJJ2VsZW1lbnQnID0+IGZhbHNlLAoJCSdzdGFydCcgPT4g dHJ1ZSwKCQkncGhwX2RhdGUnID0+ICdyJywKCQkjIFdyYXBwaW5nCgkJJ3dyYXB0YWcnID0+ ICcnLAoJCSdjbGFzcycgPT4gJycsCgkJJ3RpdGxlJyA9PiAnJwoJKTsKCSRqbWNfYXR0cnNb J2ptY192ZW51ZV8nXSA9IGFycmF5KAoJCSMgRGV0YWlsCgkJJ2lkJyA9PiAnJywKCQknbmFt ZScgPT4gdHJ1ZSwKCQknbGlua2VkJyA9PiBmYWxzZSwKCQknZWxlbWVudCcgPT4gJycsCgkJ IyBXcmFwcGluZwoJCSd3cmFwdGFnJyA9PiAnJywKCQknY2xhc3MnID0+ICcnLAoJCSd0aXRs ZScgPT4gJycKCSk7IjtzOjM6Im1kNSI7czozMjoiYTIyMmEzYWZkMmI5MjhkNGJhZmFiNjZh ODEwNjJhNDIiO30=