# Name: cbe_keywords v0.2 # Type: Client side plugin # A keywords usage: counts and lists, tagclouds, hashtags # Author: Claire Brione # URL: http://www.clairebrione.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjEyOiJjYmVfa2V5d29yZHMiO3M6NjoiYXV0aG9yIjtzOjEz OiJDbGFpcmUgQnJpb25lIjtzOjEwOiJhdXRob3JfdXJpIjtzOjI4OiJodHRwOi8vd3d3LmNs YWlyZWJyaW9uZS5jb20vIjtzOjc6InZlcnNpb24iO3M6MzoiMC4yIjtzOjExOiJkZXNjcmlw dGlvbiI7czo1NToiQSBrZXl3b3JkcyB1c2FnZTogY291bnRzIGFuZCBsaXN0cywgdGFnY2xv dWRzLCBoYXNodGFncyI7czo0OiJoZWxwIjtzOjE0NDMxOiI8ZGl2IGlkPSJjYmUtcGx1Z2lu LWhlbHAiPgo8aDE+Y2JlX2tleXdvcmRzPC9oMT4KCjxwPkRldmVsb3BlZCB3aXRoIGEgdGFn Y2xvdWQgaW4gbWluZC48L3A+CjxwPklkZWEgaW5zcGlyZWQgYnkgPGEgaHJlZj0iaHR0cDov L3RleHRwYXR0ZXJuLm9yZy9wbHVnaW5zLzU4NC90cnVfdGFncyI+dHJ1X3RhZ3M8L2E+IGFu ZCA8YSBocmVmPSJodHRwOi8vdGV4dHBhdHRlcm4ub3JnL3BsdWdpbnMvNTIzL2NoaF9rZXl3 b3JkcyI+Y2hoX2tleXdvcmRzPC9hPiwgcGllY2VzIG9mIGNvZGUgZ3JhYmJlZCBhbG1vc3Qg ZXZlcnl3aGVyZSwgYm9ycm93ZWQgZnJvbSBtYW55IHBsdWdpbnMgZGV2ZWxvcGVycywgeW91 IGtub3cgd2hvIHlvdSBhcmUgLi4uIHRoYW5rIHlvdSAhPC9wPgoKPGgyPlRhYmxlIG9mIGNv bnRlbnRzPC9oMj4KPHVsPgogIDxsaT48YSBocmVmPSIjZmVhdHVyZXMiPkZlYXR1cmVzPC9h PjwvbGk+CiAgPGxpPjxhIGhyZWY9IiNkbC1pbnN0YWxsLXN1cHAiPkRvd25sb2FkLCBpbnN0 YWxsYXRpb24sIHN1cHBvcnQ8L2E+PC9saT4KICA8bGk+PGEgaHJlZj0iI3RhZ3MtYW5kLWF0 dHJpYnV0ZXMiPlRhZ3MgYW5kIGF0dHJpYnV0ZXM8L2E+PC9saT4KICA8bGk+PGEgaHJlZj0i I2V4YW1wbGVzIj5FeGFtcGxlczwvYT48L2xpPgogIDxsaT48YSBocmVmPSIjY2hhbmdlbG9n Ij5DaGFuZ2Vsb2c8L2E+PC9saT4KPC91bD4KCjxoMiBpZD0iZmVhdHVyZXMiPkZlYXR1cmVz PC9oMj4KCjx1bD4KICA8bGk+Z2V0IGEgc2ltcGxlIGxpc3Qgb2YgYWxsIGtleXdvcmRzIHVz ZWQgKDxhIGhyZWY9IiNleC1iYXNpYyI+ZXhhbXBsZTwvYT4pPC9saT4KICA8bGk+Z2V0IGEg bGlzdCB3aXRoIG51bWJlciBvZiBvY2N1cmVuY2VzIGZvciBlYWNoIGtleXdvcmQgKDxhIGhy ZWY9IiNleC10b3B0ZW4iPmV4YW1wbGU8L2E+KTwvbGk+CiAgPGxpPmJ1aWxkIGEgdGFnIGNs b3VkICg8YSBocmVmPSIjZXgtdGFnY2xvdWQiPmV4YW1wbGU8L2E+KTwvbGk+CiAgPGxpPmJ1 aWxkIGEgZm9ybWF0dGVkIGxpc3QgcmVhZHkgdG8gcGFzcyBhcyBhIHBhcmFtZXRlciB0byBh IHNjcmlwdCAoPGEgaHJlZj0iI2V4LWZsYXNoIj5leGFtcGxlPC9hPik8L2xpPgogIDxsaT5n ZXQgYXJ0aWNsZXMgdGhhdCBzaGFyZSBzYW1lIGtleXdvcmRzIHdpdGggdGhlIGN1cnJlbnQg b25lICg8YSBocmVmPSIjZXgtcmVsYXRlZCI+ZXhhbXBsZTwvYT4pPC9saT4KICA8bGk+dHVy biBhcnRpY2xlIGtleXdvcmRzIGludG8gaGFzaHRhZ3MgKDxhIGhyZWY9IiNleC1oYXNodGFn cyI+ZXhhbXBsZTwvYT4pPC9saT4KPC91bD4KCjxoMiBpZD0iZGwtaW5zdGFsbC1zdXBwIj5E b3dubG9hZCwgaW5zdGFsbGF0aW9uLCBzdXBwb3J0PC9oMj4KPHA+RG93bmxvYWQgZnJvbSB0 aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5jbGFpcmVicmlvbmUuY29tL2NiZV9rZXl3b3JkcyI+ cGx1Z2luIHBhZ2U8L2E+LjwvcD4KPHA+Q29weS9wYXN0ZSBpbiB0aGUgQWRtaW4gPiBQbHVn aW5zIHRhYiB0byBpbnN0YWxsIG9yIHVuaW5zdGFsbCwgYWN0aXZhdGUgb3IgZGVzYWN0aXZh dGUuPC9wPgo8cD5WaXNpdCB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJu LmNvbS92aWV3dG9waWMucGhwP2lkPTM2NDU1Ij5mb3J1bSB0aHJlYWQ8L2E+IGZvciBzdXBw b3J0LjwvcD4KCjxoMiBpZD0idGFncy1hbmQtYXR0cmlidXRlcyI+VGFncyBhbmQgYXR0cmli dXRlczwvaDI+Cgo8cD5BbGwgdGFncyBzaGFyZSB0aGUgY29tbW9uIHByZXNlbnRhdGlvbmFs IGF0dHJpYnV0ZXMgPGNvZGU+d3JhcHRhZzwvY29kZT4sIDxjb2RlPmJyZWFrPC9jb2RlPiwg PGNvZGU+Y2xhc3M8L2NvZGU+LCA8Y29kZT5icmVha2NsYXNzPC9jb2RlPi4gRGVmYXVsdCB2 YWx1ZXMgYXJlIHVuc2V0LiBTZWUgPGEgaHJlZj0iaHR0cDovL3RleHRwYXR0ZXJuLm5ldC93 aWtpL2luZGV4LnBocD90aXRsZT1BdHRyaWJ1dGVzX0Nyb3NzLXJlZmVyZW5jZSI+QXR0cmli dXRlcyBDcm9zcy1yZWZlcmVuY2U8L2E+IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLjwvcD4K Cjx1bD4KICA8bGk+PGEgaHJlZj0iI3RhZy1hbGwta2V5d29yZHMiPiZsdDt0eHA6Y2JlX2Fs bF9rZXl3b3JkcyAvJmd0OzwvYT48L2xpPgogIDxsaT48YSBocmVmPSIjdGFnLWtleXdvcmQi PiZsdDt0eHA6Y2JlX2tleXdvcmQgLyZndDs8L2E+PC9saT4KICA8bGk+PGEgaHJlZj0iI3Rh Zy1rZXl3b3JkLWNvdW50Ij4mbHQ7dHhwOmNiZV9rZXl3b3JkX2NvdW50IC8mZ3Q7PC9hPjwv bGk+CiAgPGxpPjxhIGhyZWY9IiN0YWcta2V5d29yZC1yYXRpbyI+Jmx0O3R4cDpjYmVfa2V5 d29yZF9yYXRpbyAvJmd0OzwvYT48L2xpPgogIDxsaT48YSBocmVmPSIjdGFnLWtleXdvcmRz LXJlbGF0ZWQiPiZsdDt0eHA6Y2JlX2tleXdvcmRzX3JlbGF0ZWQgLyZndDs8L2E+PC9saT4K ICA8bGk+PGEgaHJlZj0iI3RhZy1rZXl3b3Jkcy1oYXNodGFncyI+Jmx0O3R4cDpjYmVfa2V5 d29yZHNfaGFzaHRhZ3MgLyZndDs8L2E+PC9saT4KPC91bD4KCjxoMyBpZD0idGFnLWFsbC1r ZXl3b3JkcyI+Jmx0O3R4cDpjYmVfYWxsX2tleXdvcmRzIC8mZ3Q7PC9oMz4KCjxwPkdldCBh IGxpc3Qgb2YgYWxsIGtleXdvcmRzLjwvcD4KPHA+Q2FuIGJlIHVzZWQgaW4gYSBwYWdlIG9y IGZvcm0gdGVtcGxhdGUsIGVpdGhlciBhcyBhIHNpbmdsZSBvciBjb250YWluZXIgdGFnLjwv cD4KCjx0YWJsZSBjbGFzcz0ibGlzdCI+CiAgPHRyPgogICAgPHRoPkF0dHJpYnV0ZTwvdGg+ IDx0aD5EZXNjcmlwdGlvbiBhbmQgdmFsdWVzIChkZWZhdWx0IHVuZGVybGluZWQpPC90aD4g PHRoPkV4YW1wbGU8L3RoPgogIDwvdHI+CiAgPHRyPgogICAgPHRkPjxjb2RlPnN0YXR1czwv Y29kZT48L3RkPgogICAgPHRkPlNlYXJjaCBrZXl3b3JkcyBpbiBhcnRpY2xlcyBoYXZpbmcg dGhlIHNwZWNpZmllZCBzdGF0dXMKICAgIDxiciAvPjxiPjx1PmxpdmU8L3U+PC9iPjogc2Vs ZWN0cyBsaXZlIGFydGljbGVzIG9ubHkKICAgIDxiciAvPjxiPnN0aWNreTwvYj46IHNlbGVj dHMgc3RpY2t5IGFydGljbGVzIG9ubHkKICAgIDxiciAvPjxiPmFsbDwvYj46IHNlbGVjdHMg bGl2ZSBhbmQgc3RpY2t5IGFydGljbGVzPC90ZD4KICAgIDx0ZD48Y29kZT5zdGF0dXM9ImFs bCI8L2NvZGU+PC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD48Y29kZT50aW1lPC9jb2Rl PjwvdGQ+CiAgICA8dGQ+U2VhcmNoIGtleXdvcmRzIGluIGFydGljbGVzIHBvc3RlZCBpbiB0 aGUgc3BlY2lmaWVkIHRpbWVmcmFtZQogICAgPGJyIC8+PGI+PHU+cGFzdDwvdT48L2I+OiBz ZWxlY3RzIHBhc3QgYXJ0aWNsZXMgb25seQogICAgPGJyIC8+PGI+ZnV0dXJlPC9iPjogc2Vs ZWN0cyBmdXR1cmUgYXJ0aWNsZXMgb25seQogICAgPGJyIC8+PGI+YW55PC9iPjogc2VsZWN0 cyBwYXN0IGFuZCBmdXR1cmUgYXJ0aWNsZXMKICAgIDxiciAvPm5vdGU6IHNlbGVjdGluZyBl eHBpcmVkIGFydGljbGUgb3Igbm90IGRlcGVuZHMgb24gYWRtaW4gcHJlZmVyZW5jZXM8L3Rk PgogICAgPHRkPjxjb2RlPnRpbWU9ImFueSI8L2NvZGU+PC90ZD4KICA8L3RyPgogIDx0cj4K ICAgIDx0ZD48Y29kZT5saW1pdDwvY29kZT48L3RkPgogICAgPHRkPk51bWJlciBvZiBrZXl3 b3JkcyB0byBwcm9jZXNzL2Rpc3BsYXkKICAgIDxiciAvPjxiPjx1PnVuc2V0PC91PjwvYj46 IGFsbCBrZXl3b3JkcwogICAgPGJyIC8+PGI+aW50ZWdlcjwvYj46IG9ubHkgdGhpcyBzcGVj aWZpZWQgbnVtYmVyPC90ZD4KICAgIDx0ZD48Y29kZT5saW1pdD0iMTAiPC9jb2RlPjwvdGQ+ CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+PGNvZGU+c29ydGJ5PC9jb2RlPjwvdGQ+CiAgICA8 dGQ+SG93IHRvIHNvcnQgcmVzdWx0aW5nIGxpc3QKICAgIDxiciAvPjxiPjx1PnVuc2V0PC91 PjwvYj46IG5vIHNvcnRpbmcKICAgIDxiciAvPjxiPmFscGhhPC9iPjogc29ydCBieSBhbHBo YWJldGljYWwgb3JkZXIKICAgIDxiciAvPjxiPndlaWdodDwvYj46IHNvcnQgYnkgZnJlcXVl bmN5PC90ZD4KICAgIDx0ZD48Y29kZT5zb3J0Ynk9IndlaWdodCI8L2NvZGU+PC90ZD4KICA8 L3RyPgogIDx0cj4KICAgIDx0ZD48Y29kZT5zb3J0ZGlyPC9jb2RlPjwvdGQ+CiAgICA8dGQ+ SWYgc29ydGluZyB0aGUgbGlzdCwgZGlyZWN0aW9uIHRvIHVzZQogICAgPGJyIC8+PGI+PHU+ YXNjPC91PjwvYj46IGFzY2VuZGluZyBvcmRlcgogICAgPGJyIC8+PGI+ZGVzYzwvYj46IGRl c2NlbmRpbmcgb3JkZXI8L3RkPgogICAgPHRkPjxjb2RlPnNvcnRkaXI9ImRlc2MiPC9jb2Rl PjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+PGNvZGU+c2VjdGlvbjwvY29kZT48L3Rk PgogICAgPHRkPlJlc3RyaWN0IHRvIHRoZSAobGlzdCBvZikgc2VjdGlvbihzKSBwcm92aWRl ZC4gQ2FuIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgY2F0ZWdvcnkgYXR0cmli dXRlCiAgICA8YnIgLz48Yj48dT51bnNldDwvdT48L2I+OiBhbGwgc2VjdGlvbnMKICAgIDxi ciAvPjxiPnN0cmluZzwvYj46IGEgc2VjdGlvbiBuYW1lCiAgICA8YnIgLz48Yj5zdHJpbmc8 L2I+OiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHNlY3Rpb24gbmFtZXM8L3RkPgogICAg PHRkPjxjb2RlPnNlY3Rpb249Im15LXNlY3Rpb24iPC9jb2RlPjwvdGQ+CiAgPC90cj4KICA8 dHI+CiAgICA8dGQ+PGNvZGU+Y2F0ZWdvcnk8L2NvZGU+PC90ZD4KICAgIDx0ZD5SZXN0cmlj dCB0byB0aGUgKGxpc3Qgb2YpIGNhdGVnb3J5KGllcykgcHJvdmlkZWQuIENhbiBiZSB1c2Vk IGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIHNlY3Rpb24gYXR0cmlidXRlCiAgICA8YnIgLz48 Yj48dT51bnNldDwvdT48L2I+OiBhbGwgY2F0ZWdvcmllcwogICAgPGJyIC8+PGI+c3RyaW5n PC9iPjogYSBjYXRlZ29yeSBuYW1lCiAgICA8YnIgLz48Yj5zdHJpbmc8L2I+OiBhIGNvbW1h LXNlcGFyYXRlZCBsaXN0IG9mIGNhdGVnb3J5IG5hbWVzPC90ZD4KICAgIDx0ZD48Y29kZT5j YXRlZ29yeT0ibXktY2F0IjwvY29kZT48L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkPjxj b2RlPmZvcm08L2NvZGU+PC90ZD4KICAgIDx0ZD5Gb3JtIHVzZWQgdG8gcHJvY2VzcyBlYWNo IGtleXdvcmQKICAgIDxiciAvPjxiPjx1PnVuc2V0PC91PjwvYj46IG5vIG91dHB1dAogICAg PGJyIC8+PGI+c3RyaW5nPC9iPjogYSBmb3JtIG5hbWU8L3RkPgogICAgPHRkPjxjb2RlPmZv cm09ImtleXdfZm9ybSI8L2NvZGU+PC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD48Y29k ZT5taW5mb250c2l6ZTwvY29kZT48L3RkPgogICAgPHRkPkZvciBhIHdlaWdodGVkIGxpc3Qg b3IgYSB0YWdjbG91ZDogdGhlIG1pbmltdW0gZm9udCBzaXplIHRvIHVzZSAoc2VlIDxhIGhy ZWY9ImV4YW1wbGVzIj5leGFtcGxlczwvYT4gYmVsb3cpCiAgICA8YnIgLz48Yj48dT5mYWxz ZTwvdT48L2I+OiBubyBjYWxjdWxhdGlvbiBuZWVkZWQKICAgIDxiciAvPjxiPmludGVnZXI8 L2I+OiBudW1iZXIgcmVwcmVzZW50aW5nIHRoZSBtaW5pbXVtIGNoYXJhY3RlciBzaXplPC90 ZD4KICAgIDx0ZD48Y29kZT5taW5mb250c2l6ZT0iMTIiPC9jb2RlPjwvdGQ+CiAgPC90cj4K ICA8dHI+CiAgICA8dGQ+PGNvZGU+bWF4Zm9udHNpemU8L2NvZGU+PC90ZD4KICAgIDx0ZD5G b3IgYSB3ZWlnaHRlZCBsaXN0IG9yIGEgdGFnY2xvdWQ6IHRoZSBtYXhpbXVtIGZvbnQgc2l6 ZSB0byB1c2UgKHNlZSA8YSBocmVmPSJleGFtcGxlcyI+ZXhhbXBsZXM8L2E+IGJlbG93KQog ICAgPGJyIC8+PjxiPjx1PmZhbHNlPC91PjwvYj46IG5vIGNhbGN1bGF0aW9uIG5lZWRlZAog ICAgPGJyIC8+PGI+aW50ZWdlcjwvYj46IG51bWJlciByZXByZXNlbnRpbmcgdGhlIG1heGlt dW0gY2hhcmFjdGVyIHNpemU8L3RkPgogICAgPHRkPjxjb2RlPm1heGZvbnRzaXplPSIyNCI8 L2NvZGU+PC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD48Y29kZT5sYWJlbDwvY29kZT48 L3RkPgogICAgPHRkPkxhYmVsIHRvIHByZXBlbmQgdG8gdGhlIG91dHB1dAogICAgPGJyIC8+ PGI+PHU+dW5zZXQ8L3U+PC9iPjogbm8gbGFiZWwKICAgIDxiciAvPj48Yj5zdHJpbmc8L2I+ OiB0ZXh0IGZvciB0aGUgbGFiZWw8L3RkPgogICAgPHRkPjxjb2RlPmxhYmVsPSJUYWdzIjwv Y29kZT48L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkPjxjb2RlPmxhYmVsdGFnPC9jb2Rl PjwvdGQ+CiAgICA8dGQ+VGFnIHdyYXBwaW5nIHRoZSBsYWJlbAogICAgPGJyIC8+PGI+PHU+ dW5zZXQ8L3U+PC9iPjogbm8gdGFnCiAgICA8YnIgLz48Yj5zdHJpbmc8L2I+OiBhIHRhZyB3 aXRob3V0IGJyYWNrZXRzPC90ZD4KICAgIDx0ZD48Y29kZT5sYWJlbHRhZz0iaDIiPC9jb2Rl PjwvdGQ+CiAgPC90cj4KPC90YWJsZT4KCjxoMyBpZD0idGFnLWtleXdvcmQiPiZsdDt0eHA6 Y2JlX2tleXdvcmQgLyZndDs8L2gzPgoKPHA+VmFsdWUgb2YgdGhlIGN1cnJlbnQga2V5d29y ZC48L3A+CjxwPlVzZWQgYXMgYSBzaW5nbGUgdGFnLjwvcD4KPHA+QXR0cmlidXRlOgo8YnIg Lz48Y29kZT5lc2NhcGU8L2NvZGU+OiBjb252ZXJ0IGNoYXJhY3RlcnMgdG8gSFRNTCBlbnRp dGllcyAtIHZhbHVlczo8L3A+Cjx1bD4KICA8bGk+PGI+PHU+dW5zZXQ8L3U+PC9iPjogdXNl IFVURjggY2hhcmFjdGVyIHNldDwvbGk+CiAgPGxpPjxiPmh0bWw8L2I+OiB1c2UgSVNPLTg4 NTktMSBjaGFyYWN0ZXIgc2V0IG9ubHk8L2xpPgogIDxsaT48Yj5odG1sc3BlY2lhbDwvYj46 IGNvbnZlcnQgb25seSBzcGVjaWFsIGNoYXJhY3RlcnMgKCZhbXA7LCAiLCAnLCAmbHQ7LCAm Z3Q7KTwvbGk+CjwvdWw+Cgo8aDMgaWQ9InRhZy1rZXl3b3JkLWNvdW50Ij4mbHQ7dHhwOmNi ZV9rZXl3b3JkX2NvdW50IC8mZ3Q7PC9oMz4KCjxwPkhvdyBtYW55IHRpbWVzIHRoZSBjdXJy ZW50IGtleXdvcmQgaXMgYmVpbmcgdXNlZC48L3A+CjxwPkF0dHJpYnV0ZXM6IG5vIG90aGVy IHRoYW4gdGhlIGNvbW1vbiBwcmVzZW50YXRpb25hbCBhdHRyaWJ1dGVzLjwvcD4KCjxoMyBp ZD0idGFnLWtleXdvcmQtcmF0aW8iPiZsdDt0eHA6Y2JlX2tleXdvcmRfcmF0aW8gLyZndDs8 L2gzPgoKPHA+SG93IG1hbnkgdGltZXMgdGhlIGN1cnJlbnQga2V5d29yZCBpcyBiZWluZyB1 c2VkIGFtb25nc3QgYWxsIHRoZSBvdGhlciBrZXl3b3Jkcy48L3A+CjxwPkF0dHJpYnV0ZXM6 IG5vIG90aGVyIHRoYW4gdGhlIGNvbW1vbiBwcmVzZW50YXRpb25hbCBhdHRyaWJ1dGVzLjwv cD4KCjxoMyBpZD0idGFnLWtleXdvcmRzLXJlbGF0ZWQiPiZsdDt0eHA6Y2JlX2tleXdvcmRz X3JlbGF0ZWQgLyZndDs8L2gzPgoKPHA+V29ya3MgYXMgPGNvZGU+Jmx0O3R4cDpyZWxhdGVk X2FydGljbGVzIC8mZ3Q7PC9jb2RlPiwgYnV0IG9uIGEga2V5d29yZHMgYmFzaXMuPC9wPgoK PHRhYmxlIGNsYXNzPSJsaXN0Ij4KICA8dHI+CiAgICA8dGg+QXR0cmlidXRlPC90aD4gPHRo PkRlc2NyaXB0aW9uIGFuZCB2YWx1ZXMgKGRlZmF1bHQgdW5kZXJsaW5lZCk8L3RoPiA8dGg+ RXhhbXBsZTwvdGg+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+PGNvZGU+c3RhdHVzPC9jb2Rl PjwvdGQ+CiAgICA8dGQ+UmVzdHJpY3QgdG8gYXJ0aWNsZXMgaGF2aW5nIHRoZSBzcGVjaWZp ZWQgc3RhdHVzCiAgICA8YnIgLz48Yj48dT5saXZlPC91PjwvYj46IHNlbGVjdHMgbGl2ZSBh cnRpY2xlcyBvbmx5CiAgICA8YnIgLz48Yj5zdGlja3k8L2I+OiBzZWxlY3RzIHN0aWNreSBh cnRpY2xlcyBvbmx5CiAgICA8YnIgLz48Yj5hbGw8L2I+OiBzZWxlY3RzIGxpdmUgYW5kIHN0 aWNreSBhcnRpY2xlczwvdGQ+CiAgICA8dGQ+PGNvZGU+c3RhdHVzPSJhbGwiPC9jb2RlPjwv dGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+PGNvZGU+dGltZTwvY29kZT48L3RkPgogICAg PHRkPlJlc3RyaWN0IHRvIGFydGljbGVzIHBvc3RlZCBpbiB0aGUgc3BlY2lmaWVkIHRpbWVm cmFtZQogICAgPGJyIC8+PGI+PHU+cGFzdDwvdT48L2I+OiBzZWxlY3RzIHBhc3QgYXJ0aWNs ZXMgb25seQogICAgPGJyIC8+PGI+ZnV0dXJlPC9iPjogc2VsZWN0cyBmdXR1cmUgYXJ0aWNs ZXMgb25seQogICAgPGJyIC8+PGI+YW55PC9iPjogc2VsZWN0cyBwYXN0IGFuZCBmdXR1cmUg YXJ0aWNsZXMKICAgIDxiciAvPjxiPm5ld2VyPC9iPjogc2VsZWN0cyBvbmx5IGFydGljbGVz IG5ld2VyIHRoYW4gdGhlIG9uZSBkaXNwbGF5ZWQKICAgIDxiciAvPjxiPm9sZGVyPC9iPjog c2VsZWN0cyBvbmx5IGFydGljbGVzIG9sZGVyIHRoYW4gdGhlIG9uZSBkaXNwbGF5ZWQKICAg IDxiciAvPm5vdGU6IHNlbGVjdGluZyBleHBpcmVkIGFydGljbGUgb3Igbm90IGRlcGVuZHMg b24gYWRtaW4gcHJlZmVyZW5jZXM8L3RkPgogICAgPHRkPjxjb2RlPnRpbWU9ImFueSI8L2Nv ZGU+PC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD48Y29kZT5saW1pdDwvY29kZT48L3Rk PgogICAgPHRkPk51bWJlciBvZiBhcnRpY2xlcyB0byByZXRyaWV2ZQogICAgPGJyIC8+PGI+ PHU+ZGVmYXVsdDwvdT48L2I+OiAxMDwvdGQ+CiAgICA8dGQ+PGNvZGU+bGltaXQ9IjUiPC9j b2RlPjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+PGNvZGU+c29ydDwvY29kZT48L3Rk PgogICAgPHRkPkhvdyB0byBzb3J0IHJlc3VsdGluZyBsaXN0CiAgICA8YnIgLz48Yj48dT5k ZWZhdWx0PC91PjwvYj46IFBvc3RlZCBkZXNjCiAgICA8YnIgLz5FYWNoIGZpZWxkIGluIHRo ZSAidGV4dHBhdHRlcm4i4oiSdGFibGUgY2FuIGJlIHVzZWQgYXMgYSBzb3J0IGtleTwvdGQ+ CiAgICA8dGQ+PGNvZGU+c29ydD0iVGl0bGUgYXNjIjwvY29kZT48L3RkPgogIDwvdHI+CiAg PHRyPgogICAgPHRkPjxjb2RlPnNlY3Rpb248L2NvZGU+PC90ZD4KICAgIDx0ZD5SZXN0cmlj dCB0byB0aGUgKGxpc3Qgb2YpIHNlY3Rpb24ocykgcHJvdmlkZWQuIENhbiBiZSB1c2VkIGlu IGNvbmp1bmN0aW9uIHdpdGggdGhlIGNhdGVnb3J5IGF0dHJpYnV0ZQogICAgPGJyIC8+PGI+ PHU+dW5zZXQ8L3U+PC9iPjogYWxsIHNlY3Rpb25zCiAgICA8YnIgLz48Yj5zdHJpbmc8L2I+ OiBhIHNlY3Rpb24gbmFtZQogICAgPGJyIC8+PGI+c3RyaW5nPC9iPjogYSBjb21tYS1zZXBh cmF0ZWQgbGlzdCBvZiBzZWN0aW9uIG5hbWVzPC90ZD4KICAgIDx0ZD48Y29kZT5zZWN0aW9u PSJteS1zZWN0aW9uIjwvY29kZT48L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkPjxjb2Rl PmNhdGVnb3J5PC9jb2RlPjwvdGQ+CiAgICA8dGQ+UmVzdHJpY3QgdG8gdGhlIChsaXN0IG9m KSBjYXRlZ29yeShpZXMpIHByb3ZpZGVkLiBDYW4gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3 aXRoIHRoZSBzZWN0aW9uIGF0dHJpYnV0ZQogICAgPGJyIC8+PGI+PHU+dW5zZXQ8L3U+PC9i PjogYWxsIGNhdGVnb3JpZXMKICAgIDxiciAvPjxiPnN0cmluZzwvYj46IGEgY2F0ZWdvcnkg bmFtZQogICAgPGJyIC8+PGI+c3RyaW5nPC9iPjogYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBv ZiBjYXRlZ29yeSBuYW1lczwvdGQ+CiAgICA8dGQ+PGNvZGU+Y2F0ZWdvcnk9Im15LWNhdCI8 L2NvZGU+PC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD48Y29kZT5mb3JtPC9jb2RlPjwv dGQ+CiAgICA8dGQ+Rm9ybSB1c2VkIHRvIHByb2Nlc3MgZWFjaCBhcnRpY2xlCiAgICA8YnIg Lz48Yj48dT51bnNldDwvdT48L2I+OiBubyBvdXRwdXQKICAgIDxiciAvPjxiPnN0cmluZzwv Yj46IGEgZm9ybSBuYW1lPC90ZD4KICAgIDx0ZD48Y29kZT5mb3JtPSJrZXl3cmVsX2Zvcm0i PC9jb2RlPjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+PGNvZGU+bGFiZWw8L2NvZGU+ PC90ZD4KICAgIDx0ZD5MYWJlbCB0byBwcmVwZW5kIHRvIHRoZSBvdXRwdXQKICAgIDxiciAv PjxiPjx1PnVuc2V0PC91PjwvYj46IG5vIGxhYmVsCiAgICA8YnIgLz48Yj5zdHJpbmc8L2I+ OiB0ZXh0IGZvciB0aGUgbGFiZWw8L3RkPgogICAgPHRkPjxjb2RlPmxhYmVsPSJSZWxhdGVk IjwvY29kZT48L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkPjxjb2RlPmxhYmVsdGFnPC9j b2RlPjwvdGQ+CiAgICA8dGQ+VGFnIHdyYXBwaW5nIHRoZSBsYWJlbAogICAgPGJyIC8+PGI+ PHU+dW5zZXQ8L3U+PC9iPjogbm8gdGFnCiAgICA8YnIgLz48Yj5zdHJpbmc8L2I+OiBhIHRh ZyB3aXRob3V0IGJyYWNrZXRzPC90ZD4KICAgIDx0ZD48Y29kZT5sYWJlbHRhZz0iaDIiPC9j b2RlPjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+PGNvZGU+bm9fd2lkb3c8L2NvZGU+ PC90ZD4KICAgIDx0ZD5XaGV0aGVyIHRvIGluaGliaXQgbGluZSBicmVha3MgaW4gdGl0bGVz IGJlZm9yZSB0aGUgbGFzdCB3b3JkCiAgICA8YnIgLz48Yj48dT5kZWZhdWx0PC91PjwvYj46 IGFjY29yZGluZyB0byBBZHZhbmNlZCBQcmVmZXJlbmNlcwogICAgPGJyIC8+PGI+Ym9vbGVh bjwvYj46IDxjb2RlPjA8L2NvZGU+IDogYXV0aG9yaXplIGxpbmVicmVhaywgPGNvZGU+MTwv Y29kZT4gOiBpbmhpYml0cyBsaW5lYnJlYWs8L3RkPgogICAgPHRkPjxjb2RlPm5vX3dpZG93 PSIxIjwvY29kZT48L3RkPgogIDwvdHI+CjwvdGFibGU+Cgo8aDMgaWQ9InRhZy1rZXl3b3Jk cy1oYXNodGFncyI+Jmx0O3R4cDpjYmVfa2V5d29yZHNfaGFzaHRhZ3MgLyZndDs8L2gzPgoK PHA+a2V5d29yZDEsIGtleXdvcmQyLCBrZXl3b3JkMyBiZWNvbWUgI2tleXdvcmQxICNrZXl3 b3JkMiAja2V5d29yZDM8L3A+CjxwPkF0dHJpYnV0ZXM6IHRoZSBjb21tb24gcHJlc2VudGF0 aW9uYWwgYXR0cmlidXRlcywgcGx1czxiciAvPgo8Y29kZT5saW1pdDwvY29kZT46IGxpbWl0 cyB0aGUgb3V0cHV0IHRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyLCBjYW4gYmUgYSBuZWdhdGl2 ZSB2YWx1ZSB0byByZXR1cm4gdGhlIDxpPm4gbGFzdDwvaT4ga2V5d29yZHMuPC9wPgoKPGgy IGlkPSJleGFtcGxlcyI+RXhhbXBsZXM8L2gyPgoKPGgzIGlkPSJleC1iYXNpYyI+QmFzaWMg dXNhZ2U8L2gzPgo8cHJlPjxjb2RlPiZsdDt0eHA6Y2JlX2FsbF9rZXl3b3JkcyBicmVhaz0i ICIgLyZndDs8L2NvZGU+PC9wcmU+Cgo8cD5vdXRwdXRzIGEgc2luZ2xlIGxpbmUgY29udGFp bmluZyBhbGwga2V5d29yZHMuPC9wPgoKPGgzIGlkPSJleC10YWdjbG91ZCI+VGV4dCB0YWdj bG91ZDwvaDM+Cgo8cHJlPjxjb2RlPiZsdDt0eHA6Y2JlX2FsbF9rZXl3b3JkcyBtaW5mb250 c2l6ZT0iMTIiIG1heGZvbnRzaXplPSIyNCIgc29ydGJ5PSJhbHBoYSIgc29ydGRpcj0iYXNj IiBsYWJlbD0iVGFnY2xvdWQiIGxhYmVsdGFnPSJoMiIgd3JhcHRhZz0iZGl2IiBjbGFzcz0i dGFnY2xvdWQiJmd0OwogICZsdDtzcGFuIHN0eWxlPSJmb250LXNpemU6ICZsdDt0eHA6Y2Jl X2tleXdvcmRfcmF0aW8gLyZndDtweDsiJmd0OyZsdDt0eHA6Y2JlX2tleXdvcmQgLyZndDsm bHQ7L3NwYW4mZ3Q7CiZsdDsvdHhwOmNiZV9hbGxfa2V5d29yZHMmZ3Q7PC9jb2RlPjwvcHJl PgoKPHA+VHJ5IHdpdGggPGNvZGU+bWluZm9udHNpemU9IjEwMCIgbWF4Zm9udHNpemU9IjIw MCI8L2NvZGU+IGFuZCA8Y29kZT5zdHlsZT0iZm9udC1zaXplOiAmbHQ7dHhwOmNiZV9rZXl3 b3JkX3JhdGlvIC8mZ3Q7JTsiPC9jb2RlPjwvcD4KCjxoMyBpZD0iZXgtZmxhc2giPkZsYXNo IHRhZ2Nsb3VkPC9oMz4KCjxwPlRoaXMgaXMgaG93IHRvIGNvbnN0cnVjdCB0aGUgcGFyYW1l dGVyIHRvIHBhc3MgdG8gPGEgaHJlZj0iaHR0cDovL3dvcmRwcmVzcy5vcmcvZXh0ZW5kL3Bs dWdpbnMvd3AtY3VtdWx1cy8iPldQLUN1bXVsdXM8L2E+LCB1c2luZyB0aGUgaW50ZXJuYWwg dGV4dHBhdHRlcm4gc2VhcmNoIGVuZ2luZSwgYW5kIGFzc3VtaW5nIHlvdSBoYXZlIHRoZSBm bGFzaCBmaWxlIGF2YWlsYWJsZTo8L3A+Cgo8b2w+CiAgPGxpPkNyZWF0ZSBhIGZvcm0sIG5h bWUgaXQgZm9yIGV4YW1wbGUgcGFyYW1fY3VtdWx1cyBhbmQgcHV0IHRoZSBmb2xsb3dpbmcg Y29kZSAoaW4gb25lIHNpbmdsZSBsaW5lKTo8YnIgLz4KPHByZT48Y29kZT4mbHQ7dHhwOmNi ZV9hbGxfa2V5d29yZHMgbWluZm9udHNpemU9IjgiIG1heGZvbnRzaXplPSIyMiImZ3Q7Jmx0 O2EgaHJlZj0nJmx0O3R4cDpzaXRlX3VybCAvJmd0Oz9xPSZsdDt0eHA6Y2JlX2tleXdvcmQg ZXNjYXBlPSJodG1sIiAvJmd0Oycgc3R5bGU9J2ZvbnQtc2l6ZTombHQ7dHhwOmNiZV9rZXl3 b3JkX3JhdGlvIC8mZ3Q7cHg7JyZndDsmbHQ7dHhwOmNiZV9rZXl3b3JkIC8mZ3Q7Jmx0Oy9h Jmd0OyZsdDsvdHhwOmNiZV9hbGxfa2V5d29yZHMmZ3Q7PC9jb2RlPjwvcHJlPgogIDwvbGk+ CiAgPGxpPkluIHRoZSBzY3JpcHQsIHBhc3MgdGhlIHBhcmFtYXRlcnMgdGhpcyB3YXk6Cjxw cmU+PGNvZGU+Jmx0O3NjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiJmd0OwouLi4KICAg IHNvLmFkZFZhcmlhYmxlKCJ0YWdjbG91ZCIsICImbHQ7dGFncyZndDsmbHQ7dHhwOm91dHB1 dF9mb3JtIGZvcm09InBhcmFtX2N1bXVsdXMiIC8mZ3Q7Jmx0Oy90YWdzJmd0OyIpOwouLi4K Jmx0Oy9zY3JpcHQmZ3Q7PC9jb2RlPjwvcHJlPgogIDwvbGk+Cjwvb2w+Cgo8aDMgaWQ9ImV4 LXRvcHRlbiI+VG9wIDEwIGtleXdvcmRzPC9oMz4KCjxwcmU+PGNvZGU+Jmx0O3R4cDpjYmVf YWxsX2tleXdvcmRzIGxpbWl0PSIxMCIgc29ydGJ5PSJ3ZWlnaHQiIHNvcnRkaXI9ImRlc2Mi IHdyYXB0YWc9InRhYmxlIiBjbGFzcz0iYWxsa3ciJmd0OwombHQ7dHImZ3Q7CiAgJmx0O3R4 cDpjYmVfa2V5d29yZCB3cmFwdGFnPSJ0ZCIgY2xhc3M9Imt3IiAvJmd0OwogICZsdDt0eHA6 Y2JlX2tleXdvcmRfY291bnQgd3JhcHRhZz0idGQiIGNsYXNzPSJjb3VudCIgLyZndDsKICAm bHQ7dHhwOmNiZV9rZXl3b3JkX3JhdGlvIHdyYXB0YWc9InRkIiBjbGFzcz0icmF0aW8iIC8m Z3Q7CiZsdDsvdHImZ3Q7CiZsdDsvdHhwOmNiZV9hbGxfa2V5d29yZHMmZ3Q7PC9jb2RlPjwv cHJlPgoKPGgzIGlkPSJleC1yZWxhdGVkIj5SZWxhdGVkIGFydGljbGVzPC9oMz4KCjxwPlRp dGxlcyBvZiB0aGUgKGF0IG1vc3QpIGZpdmUgbGF0ZXN0IHJlbGF0ZWQgYXJ0aWNsZXMgOjwv cD4KCjxwcmU+PGNvZGU+Jmx0O3R4cDpjYmVfa2V5d29yZHNfcmVsYXRlZCBsaW1pdD0iNSIg YnJlYWs9ImJyIiB3cmFwdGFnPSJkaXYiJmd0OwogICZsdDt0eHA6dGl0bGUgLyZndDsKJmx0 Oy90eHA6Y2JlX2tleXdvcmRzX3JlbGF0ZWQmZ3Q7PC9jb2RlPjwvcHJlPgoKPHA+TGlua3Mg dG8gdGhlIChhdCBtb3N0KSB0ZW4gcmVsYXRlZCBhcnRpY2xlcyBvbGRlciB0aGFuIHRoZSBj dXJyZW50IG9uZSwgYW5kIHB1Ymxpc2hlZCBmYXIgaW4gdGhlIHBhc3QgOjwvcD4KCjxwcmU+ PGNvZGU+Jmx0O3R4cDpjYmVfa2V5d29yZHNfcmVsYXRlZCB0aW1lPSJvbGRlciIgc29ydD0i UG9zdGVkIGFzYyIgLyZndDs8L2NvZGU+PC9wcmU+Cgo8cD5MaW5rcyB0byB0aGUgKGF0IG1v c3QpIHRlbiByZWxhdGVkIGFydGljbGVzIHRoYXQgd2VyZSBpbW1lZGlhdGVseSBwdWJsaXNo ZWQgYWZ0ZXIgdGhlIGN1cnJlbnQgb25lIDo8L3A+Cgo8cHJlPjxjb2RlPiZsdDt0eHA6Y2Jl X2tleXdvcmRzX3JlbGF0ZWQgdGltZT0ibmV3ZXIiIHNvcnQ9IlBvc3RlZCBhc2MiIC8mZ3Q7 PC9jb2RlPjwvcHJlPgoKPGgzIGlkPSJleC1oYXNodGFncyI+SGFzaHRhZ3M8L2gzPgoKPHBy ZT48Y29kZT4mbHQ7dHhwOmNiZV9rZXl3b3Jkc19oYXNodGFncyB3cmFwdGFnPSJwIiBicmVh az0ic3BhbiIgY2xhc3M9Imhhc2h0YWdzIiBicmVha2NsYXNzPSJ0YWciIC8+PC9jb2RlPjwv cHJlPgoKPHA+d2lsbCBnZW5lcmF0ZSBzb21ldGhpbmcgbGlrZSB0aGlzIDo8L3A+Cgo8cHJl Pjxjb2RlPiZsdDtwIGNsYXNzPSJoYXNodGFncyImZ3Q7CgkmbHQ7c3BhbiBjbGFzcz0idGFn IiZndDsjdGV4dHBhdHRlcm4mbHQ7L3NwYW4mZ3Q7CgkmbHQ7c3BhbiBjbGFzcz0idGFnIiZn dDsjamF2YXNjcmlwdCZsdDsvc3BhbiZndDsKCSZsdDtzcGFuIGNsYXNzPSJ0YWciJmd0OyNq cXVlcnkmbHQ7L3NwYW4mZ3Q7CiZsdDsvcCZndDs8L2NvZGU+PC9wcmU+Cgo8aDIgaWQ9ImNo YW5nZWxvZyI+Q2hhbmdlbG9nPC9oMj4KCjx1bD4KICA8bGk+MDQgQXByIDEzIC0gdjAuMiAt IEFkZGVkIHZhbHVlcyA8Y29kZT50aW1lPSduZXdlciB8IG9sZGVyJzwvY29kZT4gKHRoYW4g ZGlzcGxheWVkIGFydGljbGUpIGZvciA8Y29kZT4mbHQ7dHhwOmNiZV9rZXl3b3Jkc19yZWxh dGVkIC8mZ3Q7PC9jb2RlPgogIDxsaT4xMSBKdWwgMTEgLSB2MC4xIC0gSW5pdGlhbCByZWxl YXNlCjwvdWw+Cgo8L2Rpdj4KPCEtLSAqKiogQkVHSU4gUExVR0lOIENTUyAqKiogLS0+Cjxz dHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Ci5saXN0IHRoewoJdGV4dC1hbGlnbjpsZWZ0OwoJY29s b3I6I2ZmZjsKCWJhY2tncm91bmQ6IzU1NTsKCXBhZGRpbmc6NnB4IDE2cHggNnB4IDRweDsK CWJvcmRlci1yaWdodDoxcHggc29saWQgIzk5OTsKCWZvbnQtd2VpZ2h0Om5vcm1hbDsKfQou bGlzdCB0aCBhewoJY29sb3I6I2ZmZjsKCWRpc3BsYXk6YmxvY2s7Cn0KLmxpc3QgdGggaDJ7 CgltYXJnaW46MDsKCWZvbnQtc2l6ZToxMXB4Owp9Ci5saXN0IHRkewoJcGFkZGluZzo2cHgg NHB4Owp9Cjwvc3R5bGU+CjwhLS0gKioqIEVORCBQTFVHSU4gQ1NTICoqKiAtLT4KIjtzOjQ6 ImNvZGUiO3M6MTAzNDc6Ii8qDQoqKg0KKiogY2JlX2tleXdvcmRzIHYwLjINCioqIENsYWly ZSBCcmlvbmUgLSBodHRwOi8vd3d3LmNsYWlyZWJyaW9uZS5jb20vDQoqKg0KKiogMC4xIC0g MTEgSnVsIDIwMTEgLSBJbml0aWFsIHJlbGVhc2UNCioqIDAuMiAtIDA0IEFwciAyMDEzIC0g PHR4cDpjYmVfa2V5d29yZHNfcmVsYXRlZCAvPiA6IG5ldyB2YWx1ZXMgKCdvbGRlcicgYW5k ICduZXdlcicpIGZvciAndGltZScgYXR0cmlidXRlDQoqKg0KICoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8NCg0KLyoNCiAqIHByZWxpbWluYXJ5IGZ1bmN0aW9ucw0KICovDQpmdW5jdGlvbiBjYmVf YWxsa3dfYXJncygpDQp7DQogICAgcmV0dXJuKCBhcnJheSggJ3N0YXR1cycgICAgICA9PiAn bGl2ZScNCiAgICAgICAgICAgICAgICAgLCAndGltZScgICAgICAgID0+ICdwYXN0Jw0KICAg ICAgICAgICAgICAgICAsICdsaW1pdCcgICAgICAgPT4gJycNCiAgICAgICAgICAgICAgICAg LCAnc29ydGJ5JyAgICAgID0+ICcnDQogICAgICAgICAgICAgICAgICwgJ3NvcnRkaXInICAg ICA9PiAnYXNjJw0KICAgICAgICAgICAgICAgICAsICdzZWN0aW9uJyAgICAgPT4gJycNCiAg ICAgICAgICAgICAgICAgLCAnY2F0ZWdvcnknICAgID0+ICcnDQogICAgICAgICAgICAgICAg ICwgJ2Zvcm0nICAgICAgICA9PiAnJw0KICAgICAgICAgICAgICAgICAsICdtaW5mb250c2l6 ZScgPT4gJ2ZhbHNlJw0KICAgICAgICAgICAgICAgICAsICdtYXhmb250c2l6ZScgPT4gJ2Zh bHNlJw0KICAgICAgICAgICAgICAgICAsICdsYWJlbCcgICAgICAgPT4gJycNCiAgICAgICAg ICAgICAgICAgLCAnbGFiZWx0YWcnICAgID0+ICcnDQogICAgICAgICAgICAgICAgICkNCiAg ICAgICAgICApIDsNCn0NCg0KZnVuY3Rpb24gY2JlX29uZWt3X2FyZ3MoKQ0Kew0KICAgIHJl dHVybiggYXJyYXkoICdlc2NhcGUnID0+ICcnDQogICAgICAgICAgICAgICAgICkNCiAgICAg ICAgICApIDsNCn0NCg0KZnVuY3Rpb24gY2JlX2t3X2Zvcm1hdCgpDQp7DQogICAgcmV0dXJu KCBhcnJheSggJ3dyYXB0YWcnICAgID0+ICcnDQogICAgICAgICAgICAgICAgICwgJ2JyZWFr JyAgICAgID0+ICcnDQogICAgICAgICAgICAgICAgICwgJ2NsYXNzJyAgICAgID0+ICcnDQog ICAgICAgICAgICAgICAgICwgJ2JyZWFrY2xhc3MnID0+ICcnDQogICAgICAgICAgICAgICAg ICkNCiAgICAgICAgICApIDsNCn0NCg0KZnVuY3Rpb24gY2JlX3JlbGt3X2FyZ3MoKQ0Kew0K ICAgIGdsb2JhbCAkcHJlZnMgOw0KICAgIHJldHVybiggYXJyYXkoICdzdGF0dXMnICAgPT4g J2xpdmUnDQogICAgICAgICAgICAgICAgICwgJ3RpbWUnICAgICA9PiAncGFzdCcNCiAgICAg ICAgICAgICAgICAgLCAnZm9ybScgICAgID0+ICcnDQogICAgICAgICAgICAgICAgICwgJ2xh YmVsJyAgICA9PiAnJw0KICAgICAgICAgICAgICAgICAsICdsYWJlbHRhZycgPT4gJycNCiAg ICAgICAgICAgICAgICAgLCAnbGltaXQnICAgID0+IDEwDQogICAgICAgICAgICAgICAgICwg J2NhdGVnb3J5JyA9PiAnJw0KICAgICAgICAgICAgICAgICAsICdub193aWRvdycgPT4gQCRw cmVmc1sndGl0bGVfbm9fd2lkb3cnXQ0KICAgICAgICAgICAgICAgICAsICdzZWN0aW9uJyAg PT4gJycNCiAgICAgICAgICAgICAgICAgLCAnc29ydCcgICAgID0+ICdQb3N0ZWQgZGVzYycN CiAgICAgICAgICAgICAgICAgKQ0KICAgICAgICAgICkgOw0KfQ0KDQpmdW5jdGlvbiBjYmVf YWxsX2tleXdvcmRzX29wdGlvbnMoKQ0Kew0KICAgIHJldHVybiggY2JlX2FsbGt3X2FyZ3Mo KStjYmVfa3dfZm9ybWF0KCkgKSA7DQp9DQoNCmZ1bmN0aW9uIGNiZV9rZXl3b3JkX29wdGlv bnMoKQ0Kew0KICAgIHJldHVybiggY2JlX29uZWt3X2FyZ3MoKStjYmVfa3dfZm9ybWF0KCkg KSA7DQp9DQoNCmZ1bmN0aW9uIGNiZV9rZXl3b3Jkc19yZWxhdGVkX29wdGlvbnMoKQ0Kew0K ICAgIHJldHVybiggY2JlX3JlbGt3X2FyZ3MoKStjYmVfa3dfZm9ybWF0KCkgKSA7DQp9DQoN CmZ1bmN0aW9uIGNiZV9zcWxfd2hlcmUoICRjYXRlZ29yeSwgJHNlY3Rpb24sICRzdGF0dXMs ICR0aW1lICkNCnsNCiAgICAkY2F0ZWdvcnkgPSBqb2luKCInLCciLCBkb1NsYXNoKGRvX2xp c3QoJGNhdGVnb3J5KSkpOw0KICAgICRjYXRlZ29yeSA9ICEkY2F0ZWdvcnkgPyAiIiA6ICJB TkQgKENhdGVnb3J5MSBJTiAoJyIuJGNhdGVnb3J5LiInKSBvciBDYXRlZ29yeTIgSU4gKCci LiRjYXRlZ29yeS4iJykpIjsNCiAgICAkc2VjdGlvbiAgPSAhJHNlY3Rpb24gID8gIiIgOiAi QU5EIFNlY3Rpb24gSU4gKCciLmpvaW4oICInLCciLCBkb1NsYXNoKGRvX2xpc3QoJHNlY3Rp b24pKSApLiInKSIgOw0KICAgICRxc3RhdHVzICA9IGFycmF5KCAnbGl2ZScgICA9PiAiQU5E IFN0YXR1cz0nNCciDQogICAgICAgICAgICAgICAgICAgICAsICdzdGlja3knID0+ICJBTkQg U3RhdHVzPSc1JyINCiAgICAgICAgICAgICAgICAgICAgICwgJ2FsbCcgICAgPT4gIkFORCBT dGF0dXM+PSc0JyINCiAgICAgICAgICAgICAgICAgICAgICkgOw0KICAgICRxdGltZSAgICA9 IGFycmF5KCAncGFzdCcgICA9PiAiQU5EIFBvc3RlZCA8PSBub3coKSINCiAgICAgICAgICAg ICAgICAgICAgICwgJ2Z1dHVyZScgPT4gIkFORCBQb3N0ZWQgPiBub3coKSINCiAgICAgICAg ICAgICAgICAgICAgICwgJ29sZGVyJyAgPT4gIkFORCBQb3N0ZWQgPCAnXCRjcG9zdGVkJyIN CiAgICAgICAgICAgICAgICAgICAgICwgJ25ld2VyJyAgPT4gIkFORCBQb3N0ZWQgPiAnXCRj cG9zdGVkJyINCiAgICAgICAgICAgICAgICAgICAgICwgJ2FueScgICAgPT4gIiINCiAgICAg ICAgICAgICAgICAgICAgICkgOw0KDQogICAgZ2xvYmFsICRwdWJsaXNoX2V4cGlyZWRfYXJ0 aWNsZXM7DQogICAgJGV4cGlyZXMgPSAkcHVibGlzaF9leHBpcmVkX2FydGljbGVzDQogICAg ICAgICAgICAgICA/ICIiDQogICAgICAgICAgICAgICA6ICJBTkQgKEV4cGlyZXMgPiBub3co KSBPUiBFeHBpcmVzID0gIi5OVUxMREFURVRJTUUuIikiIDsNCg0KICAgIHJldHVybiggYXJy YXkoICdzdGF0dXMnICAgPT4gJHFzdGF0dXNbJHN0YXR1c10NCiAgICAgICAgICAgICAgICAg LCAndGltZScgICAgID0+ICRxdGltZVskdGltZV0NCiAgICAgICAgICAgICAgICAgLCAnZXhw aXJlcycgID0+ICRleHBpcmVzDQogICAgICAgICAgICAgICAgICwgJ3NlY3Rpb24nICA9PiAk c2VjdGlvbg0KICAgICAgICAgICAgICAgICAsICdjYXRlZ29yeScgPT4gJGNhdGVnb3J5DQog ICAgICAgICAgICAgICAgICkNCiAgICAgICAgICApIDsNCn0NCg0KLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIHRoaW5ncyBiZWdp biBoZXJlDQogKi8NCmZ1bmN0aW9uIGNiZV9hbGxfa2V5d29yZHMoICRhdHRzLCAkdGhpbmcg PSAnJyApDQp7ICAgLyogUmV0cmlldmUgYSBsaXN0IG9mIGFsbCBrZXl3b3JkcyB1c2VkIGlu IGFsbCBhcnRpY2xlcywgcGFyc2Ugc3RhdGVtZW50IGlmIG5lY2Vzc2FyeSAqLw0KICAgICRj YmVfa3dfZ2xvYmFscyA9IGFycmF5KCAnbWluZm9udHNpemUnLCAnbWF4Zm9udHNpemUnLCAn a3dtaW51c2VkJywgJ2t3bWF4dXNlZCcsICdkaXN0cmlidXRpb24nLCAncHJvcG9ydGlvbnMn LCAnbmFtZScgKSA7DQogICAgZm9yZWFjaCggJGNiZV9rd19nbG9iYWxzIGFzICRjYmVfa3df Z2xvYmFsICkNCiAgICAgICAgZ2xvYmFsICQkY2JlX2t3X2dsb2JhbCA7DQoNCiAgICBleHRy YWN0KCBsQXR0cyggY2JlX2FsbF9rZXl3b3Jkc19vcHRpb25zKCksICRhdHRzICkgKSA7DQog ICAgDQogICAgJGJFdmFsdWF0ZSA9ICgkdGltZSA9PT0gJ29sZGVyJyB8fCAkdGltZSA9PT0g J25ld2VyJykgOw0KICAgIGV4dHJhY3QoIGNiZV9zcWxfd2hlcmUoICRjYXRlZ29yeSwgJHNl Y3Rpb24sICRzdGF0dXMsICR0aW1lICkgKSA7DQogICAgaWYoICRiRXZhbHVhdGUgKQ0KICAg IHsNCiAgICAgICAgJGNwb3N0ZWQgPSAibm93KCkiIDsNCiAgICAgICAgZXZhbCggIlwkdGlt ZSA9IFwiJHRpbWVcIjsiICk7DQogICAgfQ0KDQogICAgJHJzID0gc2FmZV9yb3dzKCAiS2V5 d29yZHMiDQogICAgICAgICAgICAgICAgICAgLCAidGV4dHBhdHRlcm4iDQogICAgICAgICAg ICAgICAgICAgLCAiS2V5d29yZHMgIT0gJycgJHN0YXR1cyAkdGltZSAkZXhwaXJlcyAkc2Vj dGlvbiAkY2F0ZWdvcnkgT1JERVIgQlkgcmFuZCgpIg0KICAgICAgICAgICAgICAgICAgICkg Ow0KDQogICAgaWYoICFjb3VudCggJHJzICkgKQ0KICAgICAgICByZXR1cm4gOw0KDQogICAg JGFsbGt3ID0gYXJyYXkoKSA7DQogICAgZm9yZWFjaCggJHJzIGFzICRrd2xpc3QgKQ0KICAg ICAgICAkYWxsa3cgPSBhcnJheV9tZXJnZSggJGFsbGt3LCBleHBsb2RlKCAiLCIsICRrd2xp c3RbICdLZXl3b3JkcycgXSApICkgOw0KDQogICAgJGRpc3RyaWJ1dGlvbiA9IGFycmF5X2Nv dW50X3ZhbHVlcyggJGFsbGt3ICkgOyAgLy8gYXJyYXkoIChzdHIpInZhbHVlICRhbGxrdyIg PT4gKGludCkjIGFwcGVhcnMNCiAgICAka3dtYXh1c2VkICAgID0gbWF4KCAkZGlzdHJpYnV0 aW9uICkgOyAgICAgICAgICAvLyAoaW50KSBtb3N0IHVzZWQga2V5d29yZHMgYXBwZWFyICMg dGltZQ0KICAgICRrd21pbnVzZWQgICAgPSBtaW4oICRkaXN0cmlidXRpb24gKSA7ICAgICAg ICAgIC8vIChpbnQpIGxlc3MgdXNlZCBrZXl3b3JkcyBhcHBlYXIgIyB0aW1lDQoNCiAgICBp ZiggJHNvcnRieSA9PSAnYWxwaGEnICkNCiAgICAgICAgeyBpZiggJHNvcnRkaXIgPT0gJ2Fz YycgKSBrc29ydCggJGRpc3RyaWJ1dGlvbiApIDsgZWxzZSBrcnNvcnQoICRkaXN0cmlidXRp b24gKSA7IH0NCiAgICBlbHNlaWYoICRzb3J0YnkgPT0gJ3dlaWdodCcgKQ0KICAgICAgICB7 IGlmKCAkc29ydGRpciA9PSAnYXNjJyApIGFzb3J0KCAkZGlzdHJpYnV0aW9uICkgOyBlbHNl IGFyc29ydCggJGRpc3RyaWJ1dGlvbiApIDsgfQ0KIA0KICAgIGlmKCAkbGltaXQgIT0gJycg KQ0KICAgIHsNCiAgICAgICAgJGFsbGt3ICAgICAgICA9IGFycmF5X3NsaWNlKCAkYWxsa3cg ICAgICAgLCAwLCAkbGltaXQsIHRydWUgKSA7DQogICAgICAgICRkaXN0cmlidXRpb24gPSBh cnJheV9zbGljZSggJGRpc3RyaWJ1dGlvbiwgMCwgJGxpbWl0LCB0cnVlICkgOw0KICAgIH0N Cg0KICAgICRwcm9wb3J0aW9ucyAgPSBhcnJheV9tYXAoIGNyZWF0ZV9mdW5jdGlvbiggJyRh Jw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgJ2ds b2JhbCAka3dtYXh1c2VkOyByZXR1cm4oICRhIC8gJGt3bWF4dXNlZCApOycNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICwgJGRpc3RyaWJ1dGlvbg0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApIDsgICAgICAgICAgICAgICAgICAgIC8vIGFycmF5KCAoc3RyKSJ2YWx1ZSAk YWxsa3ciID0+IChmbG9hdCklYXBwZWFycyApIDsNCg0KICAgIGlmKCBlbXB0eSggJHRoaW5n ICkgJiYgZW1wdHkoICRmb3JtICkgKQ0KICAgIHsNCiAgICAgICAgJG91dCA9IGFycmF5X2tl eXMoICRkaXN0cmlidXRpb24gKSA7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAg IGZvcmVhY2goICRkaXN0cmlidXRpb24gYXMgJG5hbWUgPT4gJHYgKQ0KICAgICAgICB7DQog ICAgICAgICAgICAkb3V0W10gPSAgJHRoaW5nID8gcGFyc2UoICR0aGluZyApIDogcGFyc2Vf Zm9ybSggJGZvcm0gKSA7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBmb3JlYWNoKCAkY2Jl X2t3X2dsb2JhbHMgYXMgJGNiZV9rd19nbG9iYWwgKQ0KICAgICAgICB1bnNldCggJCRjYmVf a3dfZ2xvYmFsICkgOw0KDQogICAgcmV0dXJuKCBkb0xhYmVsKCAkbGFiZWwsICRsYWJlbHRh ZyApDQogICAgICAgICAgLiBkb1dyYXAoICRvdXQsICR3cmFwdGFnLCAkYnJlYWssICRjbGFz cywgJGJyZWFrY2xhc3MgKSApIDsNCn0NCg0KZnVuY3Rpb24gY2JlX2tleXdvcmRfY291bnQo ICRhdHRzICkNCnsgICAvKiBIb3cgbWFueSB0aW1lcyBkb2VzIHRoZSBjdXJyZW50IGtleXdv cmQgYXBwZWFyIGFjcm9zcyB0aGUgc2l0ZSA/ICovDQogICAgZ2xvYmFsICRkaXN0cmlidXRp b24sICRuYW1lIDsNCiANCiAgICBleHRyYWN0KCBsQXR0cyggY2JlX2t3X2Zvcm1hdCgpLCAk YXR0cyApICkgOw0KICAgIHJldHVybiggZG9XcmFwKCBhcnJheSggJGRpc3RyaWJ1dGlvblsg JG5hbWUgXSApLCAkd3JhcHRhZywgJGJyZWFrLCAkY2xhc3MsICRicmVha2NsYXNzICkgKSA7 DQp9DQoNCmZ1bmN0aW9uIGNiZV9rZXl3b3JkX3JhdGlvKCAkYXR0cyApDQp7ICAgLyogSW4g d2hhdCBwcm9wb3J0aW9uIGlzIHRoZSBjdXJyZW50IGtleXdvcmQgdXNlZCBhY3Jvc3MgdGhl IHNpdGUgPyBTZXRzIGZvbnRzaXplIGlmIHJlcXVpcmVkICovDQogICAgZ2xvYmFsICRuYW1l LCAkcHJvcG9ydGlvbnMsICRkaXN0cmlidXRpb24sICRtaW5mb250c2l6ZSwgJG1heGZvbnRz aXplLCAka3dtaW51c2VkLCAka3dtYXh1c2VkIDsNCiAgICBleHRyYWN0KCBsQXR0cyggY2Jl X2t3X2Zvcm1hdCgpLCAkYXR0cyApICkgOw0KDQogICAgaWYoICRtaW5mb250c2l6ZSA9PSAn ZmFsc2UnICYmICRtYXhmb250c2l6ZSA9PSAnZmFsc2UnICkNCiAgICAgICAgJG91dFtdID0g bnVtYmVyX2Zvcm1hdCggJHByb3BvcnRpb25zWyAkbmFtZSBdLCAyLCAnLicsICcnICkgOw0K ICAgIGVsc2VpZiggJG1pbmZvbnRzaXplICE9ICdmYWxzZScgJiYgJG1heGZvbnRzaXplICE9 ICdmYWxzZScgJiYgJGt3bWF4dXNlZCAhPSAka3dtaW51c2VkICkNCiAgICAgICAgJG91dFtd ID0gbnVtYmVyX2Zvcm1hdCggJG1pbmZvbnRzaXplICsgKCAkZGlzdHJpYnV0aW9uWyAkbmFt ZSBdIC0gMSApICogKCAoJG1heGZvbnRzaXplIC0gJG1pbmZvbnRzaXplKSAvICggJGt3bWF4 dXNlZCAtICRrd21pbnVzZWQpICksIDIsICcuJywgJycgKSA7DQogICAgZWxzZQ0KICAgICAg ICAkb3V0W10gPSAoJGNoYXJzaXplID0gbnVtYmVyX2Zvcm1hdCggJG1heGZvbnRzaXplICog JHByb3BvcnRpb25zWyAkbmFtZSBdLCAyLCAnLicsICcnICkpIDwgJG1pbmZvbnRzaXplDQog ICAgICAgICAgICAgICAgID8gJG1pbmZvbnRzaXplDQogICAgICAgICAgICAgICAgIDogJGNo YXJzaXplIDsNCg0KICAgIHJldHVybiggZG9XcmFwKCAkb3V0LCAkd3JhcHRhZywgJGJyZWFr LCAkY2xhc3MsICRicmVha2NsYXNzICkgKSA7DQp9DQoNCmZ1bmN0aW9uIGNiZV9rZXl3b3Jk KCAkYXR0cyApDQp7ICAvKiBSZXR1cm5zIHRoZSBjdXJyZW50IGtleXdvcmQgKGxpdHRlcmFs bHkpICovDQogICAgZ2xvYmFsICRuYW1lIDsNCiAgICBleHRyYWN0KCBsQXR0cyggY2JlX2tl eXdvcmRfb3B0aW9ucygpLCAkYXR0cyApICkgOw0KDQogICAgaWYoICRlc2NhcGUgKQ0KICAg IHsNCiAgICAgICAgaWYoICRlc2NhcGUgPT0gJ2h0bWwnICAgICAgICApICRvdXRbXSA9IGh0 bWxlbnRpdGllcyggJG5hbWUgKSA7DQogICAgICAgIGlmKCAkZXNjYXBlID09ICdodG1sc3Bl Y2lhbCcgKSAkb3V0W10gPSBodG1sc3BlY2lhbGNoYXJzKCAkbmFtZSApIDsNCiAgICB9DQog ICAgZWxzZQ0KICAgICAgICAkb3V0W10gPSBodG1sZW50aXRpZXMoICRuYW1lLCBFTlRfQ09N UEFULCAnVVRGLTgnICkgOw0KDQogICAgcmV0dXJuKCBkb1dyYXAoICRvdXQsICR3cmFwdGFn LCAkYnJlYWssICRjbGFzcywgJGJyZWFrY2xhc3MgKSApIDsNCn0NCg0KZnVuY3Rpb24gY2Jl X2tleXdvcmRzX3JlbGF0ZWQoICRhdHRzLCAkdGhpbmcgPSAnJyApDQp7ICAgLyogYXJ0aWNs ZV9yZWxhdGVkIGJhc2VkIG9uIGtleXdvcmRzICovDQogICAgZ2xvYmFsICR0aGlzYXJ0aWNs ZSwgJHByZWZzIDsNCg0KICAgIGFzc2VydF9hcnRpY2xlKCkgOw0KICAgIGV4dHJhY3QoIGxB dHRzKCBjYmVfa2V5d29yZHNfcmVsYXRlZF9vcHRpb25zKCksICRhdHRzICkgKSA7DQoNCiAg ICAkYkV2YWx1YXRlID0gKCR0aW1lID09PSAnb2xkZXInIHx8ICR0aW1lID09PSAnbmV3ZXIn KSA7DQogICAgZXh0cmFjdCggY2JlX3NxbF93aGVyZSggJGNhdGVnb3J5LCAkc2VjdGlvbiwg JHN0YXR1cywgJHRpbWUgKSApIDsNCg0KICAgICRpZCA9ICJJRCAhPSAiIC4gaW50dmFsKCAk dGhpc2FydGljbGVbJ3RoaXNpZCddICkgOw0KICAgIGlmKCAkYkV2YWx1YXRlICkNCiAgICB7 DQogICAgICAgICRjcG9zdGVkID0gZGF0ZSggJ1ktbS1kIEg6aTpzJywgJHRoaXNhcnRpY2xl Wydwb3N0ZWQnXSApIDsNCiAgICAgICAgZXZhbCggIlwkdGltZSA9IFwiJHRpbWVcIjsiICk7 DQogICAgfQ0KDQogICAgJGtleXMgPSBkb1NsYXNoKCBkb19saXN0KCAkdGhpc2FydGljbGVb J2tleXdvcmRzJ10gKSApIDsNCiAgICBmb3JlYWNoKCAka2V5cyBhcyAka2V5ICkNCiAgICB7 DQogICAgICAgICRrZXlwYXJ0c1tdID0gIkZJTkRfSU5fU0VUKCciLiRrZXkuIicsS2V5d29y ZHMpIjsNCiAgICB9DQogICAgJGtleXdvcmRzID0gIiBBTkQgKCIgLiBqb2luKCAnIE9SICcs ICRrZXlwYXJ0cyApIC4gIikiIDsNCiAgICANCiAgICAkc29ydCA9IGRvU2xhc2goICRzb3J0 ICkgOw0KICAgICRsaW1pdCA9ICIgbGltaXQgMCwiIC4gaW50dmFsKCAkbGltaXQgKSA7DQoN CiAgICAkcnMgPSBzYWZlX3Jvd3Nfc3RhcnQoICIqLCB1bml4X3RpbWVzdGFtcChQb3N0ZWQp IGFzIHBvc3RlZCwgdW5peF90aW1lc3RhbXAoTGFzdE1vZCkgYXMgdUxhc3RNb2QsIHVuaXhf dGltZXN0YW1wKEV4cGlyZXMpIGFzIHVFeHBpcmVzIg0KICAgICAgICAgICAgICAgICAgICAg ICAgICwgInRleHRwYXR0ZXJuIg0KICAgICAgICAgICAgICAgICAgICAgICAgICwgIiRpZCAk a2V5d29yZHMgJHN0YXR1cyAkdGltZSAkZXhwaXJlcyAkc2VjdGlvbiAkY2F0ZWdvcnkgT1JE RVIgQlkgJHNvcnQgJGxpbWl0Ig0KICAgICAgICAgICAgICAgICAgICAgICAgICkgOw0KDQog ICAgaWYoICFjb3VudCggJHJzICkgKQ0KICAgICAgICByZXR1cm4gOw0KDQogICAgJG91dCA9 IGFycmF5KCkgOw0KICAgICRvbGRfYXJ0aWNsZSA9ICR0aGlzYXJ0aWNsZSA7DQogICAgDQog ICAgd2hpbGUgKCRhID0gbmV4dFJvdygkcnMpKQ0KICAgIHsNCiAgICAgICAgJGFbJ1RpdGxl J10gPSAoJG5vX3dpZG93KSA/IG5vV2lkb3coZXNjYXBlX3RpdGxlKCRhWydUaXRsZSddKSkg OiBlc2NhcGVfdGl0bGUoJGFbJ1RpdGxlJ10pOw0KICAgICAgICAkYVsndVBvc3RlZCddID0g JGFbJ3Bvc3RlZCddIDsNCg0KICAgICAgICBpZiAoZW1wdHkoJGZvcm0pICYmIGVtcHR5KCR0 aGluZykpDQogICAgICAgIHsNCiAgICAgICAgICAgICRvdXRbXSA9IGhyZWYoJGFbJ1RpdGxl J10sIHBlcm1saW5rdXJsKCRhKSk7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAg ICB7DQogICAgICAgICAgICBwb3B1bGF0ZUFydGljbGVEYXRhKCRhKTsNCiAgICAgICAgICAg ICRvdXRbXSA9ICgkdGhpbmcpID8gIHBhcnNlKCR0aGluZykgOiBwYXJzZV9mb3JtKCRmb3Jt KTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgICR0aGlzYXJ0aWNsZSA9ICRvbGRfYXJ0aWNs ZSA7DQogICAgaWYoICFjb3VudCggJG91dCApICkNCiAgICAgICAgcmV0dXJuIDsNCg0KICAg IHJldHVybiggZG9MYWJlbCggJGxhYmVsLCAkbGFiZWx0YWcgKQ0KICAgICAgICAgIC4gZG9X cmFwKCAkb3V0LCAkd3JhcHRhZywgJGJyZWFrLCAkY2xhc3MsICRicmVha2NsYXNzICkgKSA7 DQp9DQoNCmZ1bmN0aW9uIGNiZV9rZXl3b3Jkc19oYXNodGFncyggJGF0dHMsICR0aGluZyA9 ICcnICkNCnsgICAvKiBUd2l0dGVyIGRlZGljYXRlZCA6IHR1cm5zIGtleXdvcmRzIGludG8g aGFzaHRhZ3MgKi8NCiAgICBnbG9iYWwgJHRoaXNhcnRpY2xlLCAkcHJlZnMgOw0KDQogICAg YXNzZXJ0X2FydGljbGUoKSA7DQogICAgZXh0cmFjdCggbEF0dHMoIGFycmF5KCdsaW1pdCcg PT4gJycpICsgY2JlX2t3X2Zvcm1hdCgpLCAkYXR0cyApICkgOw0KDQogICAgaWYoICR0aGlz YXJ0aWNsZVsna2V5d29yZHMnXSE9PSAnJyApDQogICAgew0KICAgICAgICAka2V5cyA9IGRv U2xhc2goIGRvX2xpc3QoICR0aGlzYXJ0aWNsZVsna2V5d29yZHMnXSApICkgOw0KICAgICAg ICBpZiggJGxpbWl0ICE9ICcnICkNCiAgICAgICAgICAgICRrZXlzID0gYXJyYXlfc2xpY2Uo ICRrZXlzLCAwLCAkbGltaXQgKSA7DQogICAgICAgIGZvcmVhY2goICRrZXlzIGFzICRrZXkg KQ0KICAgICAgICB7DQogICAgICAgICAgICAkb3V0W10gPSAnIycuJGtleSA7DQogICAgICAg IH0NCiAgICAgICAgcmV0dXJuKCBkb1dyYXAoICRvdXQsICR3cmFwdGFnLCAkYnJlYWssICRj bGFzcywgJGJyZWFrY2xhc3MgKSApIDsNCiAgICB9DQoNCiAgICByZXR1cm4gOw0KfSI7czo0 OiJ0eXBlIjtzOjE6IjAiO3M6NToiZmxhZ3MiO3M6MToiMCI7czo1OiJvcmRlciI7czoxOiI1 IjtzOjM6Im1kNSI7czozMjoiNDJhZTVhZWE5YmQ2YjU3OTVlMzcxZTY0MDgxZjNkYTYiO30=