# Name: cbe_helpful v0.6 # Type: Admin/Client side plugin # Visitors can rate articles (based on wlk_helpful) # 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: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjExOiJjYmVfaGVscGZ1bCI7czo2OiJhdXRob3IiO3M6MTM6 IkNsYWlyZSBCcmlvbmUiO3M6MTA6ImF1dGhvcl91cmkiO3M6Mjg6Imh0dHA6Ly93d3cuY2xh aXJlYnJpb25lLmNvbS8iO3M6NzoidmVyc2lvbiI7czozOiIwLjYiO3M6MTE6ImRlc2NyaXB0 aW9uIjtzOjQ5OiJWaXNpdG9ycyBjYW4gcmF0ZSBhcnRpY2xlcyAoYmFzZWQgb24gd2xrX2hl bHBmdWwpIjtzOjQ6ImhlbHAiO3M6MTU1Njc6IjxkaXYgaWQ9ImNiZS1wbHVnaW4taGVscCI+ DQo8aDE+Y2JlX2hlbHBmdWw8L2gxPg0KDQo8aDI+VGFibGUgb2YgY29udGVudHM8L2gyPg0K PHVsPg0KICA8bGk+PGEgaHJlZj0iI2NyZWRpdHMiPkNyZWRpdHM8L2E+PC9saT4NCiAgPGxp PjxhIGhyZWY9IiNyZXF1aXJlZCI+UHJlcmVxdWlzaXRlczwvYT48L2xpPg0KICA8bGk+PGEg aHJlZj0iI2ZlYXR1cmVzIj5GZWF0dXJlczwvYT48L2xpPg0KICA8bGk+PGEgaHJlZj0iI2Rs LXN1cHAiPkRvd25sb2FkIGFuZCBzdXBwb3J0PC9hPjwvbGk+DQogIDxsaT48YSBocmVmPSIj aW5zdC1zZXR1cCI+SW5zdGFsbGF0aW9uIGFuZCBzZXR1cDwvYT48L2xpPg0KICA8bGk+PGEg aHJlZj0iI2FkbS11c2FnZSI+QWRtaW4gc2lkZSB1c2FnZTwvYT48L2xpPg0KICA8bGk+PGEg aHJlZj0iI2Zyb250LXVzYWdlIj5DbGllbnQgc2lkZSB1c2FnZTwvYT48L2xpPg0KICA8bGk+ PGEgaHJlZj0iI2V4YW1wbGVzIj5FeGFtcGxlczwvYT48L2xpPg0KICA8bGk+PGEgaHJlZj0i I2NoYW5nZWxvZyI+Q2hhbmdlbG9nPC9hPjwvbGk+DQo8L3VsPg0KDQo8aDIgaWQ9ImNyZWRp dHMiPkNyZWRpdHM8L2gyPg0KPHVsPg0KICA8bGk+PGEgaHJlZj0iaHR0cDovL3dhbGtlcmhh bWlsdG9uLmNvbS8iPjxiPldhbGtlciBIYW1pbHRvbjwvYj48L2E+LCBmb3Igd2xrX2hlbHBm dWwgb24gd2hpY2ggdGhpcyBwbHVnaW4gaXMgYmFzZWQ8L2xpPg0KICA8bGk+PGEgaHJlZj0i aHR0cDovL3JhaGZvcnVtLmJpei8iPjxiPkp1a2thIFN2YWhuPC9iPjwvYT4sIGZvciByYWhf ZXh0ZXJuYWxfb3V0cHV0ICh2MS4wIG1pbmltdW0pIG9uIHdoaWNoIHRoZSBwbHVnaW4gaGVh dmlseSByZWxpZXMgb248L2xpPg0KICA8bGk+PGEgaHJlZj0iaHR0cDovL3R4cC1mci5uZXQv Ij48Yj5QYXQ2NDwvYj48L2E+LCB3aG8gdG9vayB0aW1lIHRvIHRlc3QsIGZlZWRiYWNrLCB0 ZXN0LCBmZWVkYmFjaywgdGVzdCAuLi4gZmVlZGJhY2sgLi4uIGFuZCBzbyBvbjwvbGk+DQo8 L3VsPg0KDQo8aDIgaWQ9InJlcXVpcmVkIj5QcmVyZXF1aXNpdGVzPC9oMj4NCjxwPlRoaXMg cGx1Z2luIHJlcXVpcmVzPC9wPg0KPHVsPg0KICA8bGk+dGhlIDxhIGhyZWY9Imh0dHA6Ly9q cXVlcnkuY29tIj5qUXVlcnkgbGlicmFyeTwvYT48L2xpPg0KICA8bGk+dGhlIHBsdWdpbiA8 YSBocmVmPSJodHRwOi8vcmFoZm9ydW0uYml6L3BsdWdpbnMvcmFoX2V4dGVybmFsX291dHB1 dCI+cmFoX2V4dGVybmFsX291dHB1dCB2MS4wIG1pbmltdW08L2E+PC9saT4NCjwvdWw+DQoN CjxoMiBpZD0iZmVhdHVyZXMiPkZlYXR1cmVzPC9oMj4NCjx1bD4NCiAgPGxpPmp1c3QgaW5z dGFsbCBhbmQgYWN0aXZhdGUsIG5vIG5lZWQgdG8gd29ycnkgYWJvdXQgYWRkaXRpb25hbCBz Y3JpcHRzPC9saT4NCiAgPGxpPmF1dG9tYXRpY2FsbHkgcmV0cmlldmVzIGRhdGEgZnJvbSB3 bGtfaGVscGZ1bCBpZiBpbnN0YWxsZWQgYW5kIGFjdGl2ZTwvbGk+DQogIDxsaT5zZXQgdGlt ZSB0aHJlc2hvbGQgYmV0d2VlbiB0d28gdm90ZXMgaGF2aW5nIHRoZSBzYW1lIElQPC9saT4N CiAgPGxpPmRlZmluZSB5b3VyIG93biBwcmVzZW50YXRpb248L2xpPg0KPC91bD4NCg0KPGgy IGlkPSIjZGwtc3VwcCI+RG93bmxvYWQgYW5kIHN1cHBvcnQ8L2gyPg0KPHA+RG93bmxvYWQg ZnJvbSB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5jbGFpcmVicmlvbmUuY29tL2NiZV9oZWxw ZnVsIj5wbHVnaW4gcGFnZTwvYT4uPC9wPg0KPHA+VmlzaXQgdGhlIDxhIGhyZWY9Imh0dHA6 Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0zNjQzNSI+Zm9ydW0g dGhyZWFkPC9hPiBmb3Igc3VwcG9ydC48L3A+DQoNCjxoMiBpZD0iaW5zdC1zZXR1cCI+SW5z dGFsbGF0aW9uIGFuZCBzZXR1cDwvaDI+DQo8cD48c3BhbiBzdHlsZT0iY29sb3I6IHJlZDsg Zm9udC13ZWlnaHQ6IGJvbGQ7Ij5yYWhfZXh0ZXJuYWxfb3V0cHV0IHYxLjAgbWluaW11bSBt dXN0IGJlIGluc3RhbGxlZCBhbmQgYWN0aXZlPC9zcGFuPiBvdGhlcndpc2UgY2JlX2hlbHBm dWwgd29uJ3QgYmUgYWN0aXZhdGVkIGFuZCB5b3Ugd2lsbCByZWNlaXZlIGEgbWVzc2FnZSBz dGF0aW5nIHRoYXQgeW91IGhhdmUgdG8gaW5zdGFsbC9hY3RpdmF0ZSByYWhfZXh0ZXJuYWxf b3V0cHV0LjwvcD4NCjxwPkNvcHkvcGFzdGUgaW4gdGhlIEFkbWluID4gUGx1Z2lucyB0YWIg dG8gaW5zdGFsbC48L3A+DQo8cD5TZXR1cCBpcyBhdXRvbWF0aWMgYXQgYWN0aXZhdGlvbi48 L3A+DQoNCjxoMiBpZD0iYWRtLXVzYWdlIj5BZG1pbiBzaWRlIHVzYWdlPC9oMj4NCk9wdGlv bnMgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBwbHVnaW5zIHBhbmUsIG9yIGdvIHRvIEV4dGVu c2lvbnMgPiBBcnRpY2xlIFJhdGluZ3MuDQoNCjxoMiBpZD0iZnJvbnQtdXNhZ2UiPkNsaWVu dCBzaWRlIHVzYWdlPC9oMj4NCjxwIHN0eWxlPSJjb2xvcjogcmVkOyBmb250LXdlaWdodDog Ym9sZDsiPlRoZSBqUXVlcnkgbGlicmFyeSBtdXN0IGJlIGxvYWRlZCwgYW55d2hlcmUgaW4g dGhlIHBhZ2UuPC9wPg0KDQo8dWw+DQogIDxsaT48YSBocmVmPSIjdGFnLXdpZGdldCI+Jmx0 O3R4cDpjYmVfaGVscGZ1bCAvJmd0OzwvYT48L2xpPg0KICA8bGk+PGEgaHJlZj0iI3RhZy1s YWJlbCI+Jmx0O3R4cDpjYmVfaGVscGZ1bF9sYWJlbCAvJmd0OzwvYT48L2xpPg0KICA8bGk+ PGEgaHJlZj0iI3RhZy1zY29yZSI+Jmx0O3R4cDpjYmVfaGVscGZ1bF9zY29yZSAvJmd0Ozwv YT48L2xpPg0KICA8bGk+PGEgaHJlZj0iI3RhZy15ZXNubyI+Jmx0O3R4cDpjYmVfaGVscGZ1 bF95ZXMgLyZndDs8L2E+PC9saT4NCiAgPGxpPjxhIGhyZWY9IiN0YWcteWVzbm8iPiZsdDt0 eHA6Y2JlX2hlbHBmdWxfbm8gLyZndDs8L2E+PC9saT4NCiAgPGxpPjxhIGhyZWY9IiN0YWct eWVzbm8iPiZsdDt0eHA6Y2JlX2hlbHBmdWxfdG90YWxfdm90ZXMgLyZndDs8L2E+PC9saT4N CiAgPGxpPjxhIGhyZWY9IiN0YWctbGlzdCI+Jmx0O3R4cDpjYmVfaGVscGZ1bF9saXN0IC8m Z3Q7PC9hPjwvbGk+DQo8L3VsPg0KDQo8aDMgaWQ9InRhZy13aWRnZXQiPlZvdGUgd2lkZ2V0 OiAmbHQ7dHhwOmNiZV9oZWxwZnVsIC8mZ3Q7PC9oMz4NCjxwPkp1c3QgcHV0IGl0IGluIGFu IDxiPmluZGl2aWR1YWwgYXJ0aWNsZTwvYj4gd2hlcmUgeW91IHdhbnQgaXQgdG8gYXBwZWFy LiBDYW4gYmUgdXNlZCBlaXRoZXIgYXMgYSBzaW5nbGUgdGFnIG9yIGFzIGEgcGFpci48L3A+ DQoNCjx0YWJsZSBjbGFzcz0ibGlzdCI+DQogIDx0cj4NCiAgICA8dGg+QXR0cmlidXRlPC90 aD4gPHRoPkRlc2NyaXB0aW9uIGFuZCB2YWx1ZXM8L3RoPiA8dGg+RXhhbXBsZTwvdGg+DQog IDwvdHI+DQogIDx0cj4NCiAgICA8dGQ+PGNvZGU+bGFiZWw8L2NvZGU+PC90ZD4NCiAgICA8 dGQ+TGFiZWwgdG8gcHJlcGVuZCB0byB0aGUgb3V0cHV0LjxiciAvPkRlZmF1bHQgOiBhcyBk ZWZpbmVkIGluIGFkbWluIHNpZGU8L3RkPg0KICAgIDx0ZD48Y29kZT5sYWJlbD0iUmF0ZSBp dCAhIjwvY29kZT48L3RkPg0KICA8L3RyPg0KICA8dHI+DQogICAgPHRkPjxjb2RlPmxhYmVs dGFnPC9jb2RlPjwvdGQ+DQogICAgPHRkPlRhZyB3cmFwcGluZyB0aGUgbGFiZWwgd2l0aG91 dCBicmFja2V0cy48YnIgLz5EZWZhdWx0OiA8Y29kZT5oMjwvY29kZT48L3RkPg0KICAgIDx0 ZD48Y29kZT5sYWJlbHRhZz0iaDMiPC9jb2RlPjwvdGQ+DQogIDwvdHI+DQogIDx0cj4NCiAg ICA8dGQ+PGNvZGU+bGFiZWxjbGFzczwvY29kZT48L3RkPg0KICAgIDx0ZD4oWClIVE1MIGNs YXNzIGF0dHJpYnV0ZSB0byBhcHBseSB0byA8Y29kZT5sYWJlbHRhZzwvY29kZT4uPGJyIC8+ RGVmYXVsdDogdW5zZXQ8L3RkPg0KICAgIDx0ZD48Y29kZT5sYWJlbGNsYXNzPSJ3aWRnZXQt dGl0bGUiPC9jb2RlPjwvdGQ+DQogIDwvdHI+DQogIDx0cj4NCiAgICA8dGQ+PGNvZGU+d3Jh cHRhZzwvY29kZT48L3RkPg0KICAgIDx0ZD5UYWcgd3JhcHBpbmcgdGhlIHdpZGdldCB3aXRo b3V0IGJyYWNrZXRzLiBFZmZlY3RpdmUgb25seSBpZiB1c2VkIHdpdGggdGhlIDxjb2RlPmZv cm08L2NvZGU+IGF0dHJpYnV0ZSBvciBhcyBhIHBhaXIuPGJyIC8+RGVmYXVsdDogPGNvZGU+ ZGl2PC9jb2RlPjwvdGQ+DQogICAgPHRkPjxjb2RlPndyYXB0YWc9InVsIjwvY29kZT48L3Rk Pg0KICA8L3RyPg0KICA8dHI+DQogICAgPHRkPjxjb2RlPmNsYXNzPC9jb2RlPjwvdGQ+DQog ICAgPHRkPihYKUhUTUwgY2xhc3MgYXR0cmlidXRlIHRvIGFwcGx5IHRvIDxjb2RlPndyYXB0 YWc8L2NvZGU+PGJyIC8+RGVmYXVsdDogdW5zZXQ8L3RkPg0KICAgIDx0ZD48Y29kZT5jbGFz cz0id2lkZ2V0IjwvY29kZT48L3RkPg0KICA8L3RyPg0KICA8dHI+DQogICAgPHRkPjxjb2Rl PnNob3dvbmx5PC9jb2RlPjwvdGQ+DQogICAgPHRkPldoZXRoZXIgdG8gYXV0aG9yaXplIHZv dGluZyBvciBub3QuIFVzZSBpdCwgZm9yIGV4YW1wbGUsIHRvIGp1c3QgZGlzcGxheSBjb3Vu dHMgaW4gYW4gYXJ0aWNsZSBsaXN0IGNvbnRleHQuPGJyIC8+VmFsdWVzOiAwLCAxPGJyIC8+ RGVmYXVsdDogPGNvZGU+MDwvY29kZT48L3RkPg0KICAgIDx0ZD48Y29kZT5zaG93b25seT0i MSI8L2NvZGU+PC90ZD4NCiAgPC90cj4NCiAgPHRyPg0KICAgIDx0ZD48Y29kZT5mb3JtPC9j b2RlPjwvdGQ+DQogICAgPHRkPkZvcm0gdXNlZCB0byBkaXNwbGF5IHRoZSB3aWRnZXQuPGJy IC8+RGVmYXVsdDogdW5zZXQ8L3RkPg0KICAgIDx0ZD48Y29kZT5mb3JtPSJiYWxsb3QiPC9j b2RlPjwvdGQ+DQogIDwvdHI+DQo8L3RhYmxlPg0KDQo8cD5Vc2VkIGFzIGEgc2luZ2xlIHRh Zywgb3V0cHV0cyB0aGUgbWluaW1hbCBtYXJrdXAgbmVlZGVkIGFzIGFuIHVub3JkZXJlZCBs aXN0LjwvcD4NCjxwPlVzZWQgYXMgYSBwYWlyIG9yIHdpdGggdGhlIDxjb2RlPmZvcm08L2Nv ZGU+IGF0dHJpYnV0ZSwgbGV0cyB5b3UgY3VzdG9taXplIHRoZSB3YXkgaXQgaXMgZGlzcGxh eWVkIHdpdGggdGhlIGZvbGxvd2luZyB0YWdzIDo8L3A+DQoNCjxoMyBpZD0idGFnLWxhYmVs Ij4mbHQ7dHhwOmNiZV9oZWxwZnVsX2xhYmVsIC8mZ3Q7PC9oMz4NCjxwPkRpc3BsYXlzIHRo ZSB3aWRnZXQgbGFiZWwgYXMgZGVmaW5lZCBpbiBhZG1pbiBzaWRlLiBDYW4gYWxzbyBiZSB1 c2VkIGFzIGEgc3RhbmRhbG9uZSB0YWcgKGkuZS4gb3V0c2lkZSA8Y29kZT4mbHQ7dHhwOmNi ZV9oZWxwZnVsJmd0OzwvY29kZT4pLjwvcD4NCg0KPHRhYmxlIGNsYXNzPSJsaXN0Ij4NCiAg PHRyPg0KICAgIDx0aD5BdHRyaWJ1dGU8L3RoPiA8dGg+RGVzY3JpcHRpb24gYW5kIHZhbHVl czwvdGg+IDx0aD5FeGFtcGxlPC90aD4NCiAgPC90cj4NCiAgPHRyPg0KICAgIDx0ZD48Y29k ZT53cmFwdGFnPC9jb2RlPjwvdGQ+DQogICAgPHRkPlRhZyB3cmFwcGluZyB0aGUgd2lkZ2V0 IHdpdGhvdXQgYnJhY2tldHMuPGJyIC8+RGVmYXVsdDogdW5zZXQ8L3RkPg0KICAgIDx0ZD48 Y29kZT53cmFwdGFnPSJoMiI8L2NvZGU+PC90ZD4NCiAgPC90cj4NCiAgPHRyPg0KICAgIDx0 ZD48Y29kZT5jbGFzczwvY29kZT48L3RkPg0KICAgIDx0ZD5DbGFzcyBmb3IgdGhlIGxhYmVs LjxiciAvPkRlZmF1bHQ6IHVuc2V0PC90ZD4NCiAgICA8dGQ+PGNvZGU+Y2xhc3M9IndpZGdl dCI8L2NvZGU+PC90ZD4NCiAgPC90cj4NCjwvdGFibGU+DQoNCjxoMyBpZD0idGFnLXNjb3Jl Ij4mbHQ7dHhwOmNiZV9oZWxwZnVsX3Njb3JlIC8mZ3Q7PC9oMz4NCjxwPkRpc3BsYXlzIHRo ZSBzY29yZSBmb3JtYXR0ZWQgYXMgc3BlY2lmaWVkIGluIGFkbWluIHNpZGUgOiBhYnNvbHV0 ZSB2YWx1ZSwgcmF0aW8gb3IgcGVyY2VudGFnZSBvZiBwb3NpdGl2ZSB2b3RlczwvcD4NCjxw PkNhbiBiZSB1c2VkIGFzIGEgc3RhbmRhbG9uZSB0YWcgb3IgZW5jbG9zZWQgaW4gPGNvZGU+ Y2JlX2hlbHBmdWw8L2NvZGU+IG9yIDxjb2RlPmNiZV9oZWxwZnVsX2xpc3Q8L2NvZGU+Ljwv cD4NCg0KPHRhYmxlIGNsYXNzPSJsaXN0Ij4NCiAgPHRyPg0KICAgIDx0aD5BdHRyaWJ1dGU8 L3RoPiA8dGg+RGVzY3JpcHRpb24gYW5kIHZhbHVlczwvdGg+IDx0aD5FeGFtcGxlPC90aD4N CiAgPC90cj4NCiAgPHRyPg0KICAgIDx0ZD48Y29kZT53cmFwdGFnPC9jb2RlPjwvdGQ+DQog ICAgPHRkPlRhZyB3cmFwcGluZyB0aGUgc2NvcmUgd2l0aG91dCBicmFja2V0cywgY2FuIG5v dCBiZSBibGFuay48YnIgLz5EZWZhdWx0OiBzcGFuPC90ZD4NCiAgICA8dGQ+PGNvZGU+d3Jh cHRhZz0icCI8L2NvZGU+PC90ZD4NCiAgPC90cj4NCiAgPHRyPg0KICAgIDx0ZD48Y29kZT5j bGFzczwvY29kZT48L3RkPg0KICAgIDx0ZD5DbGFzcyBmb3Igc3R5bGluZy48YnIgLz5EZWZh dWx0OiB1bnNldDwvdGQ+DQogICAgPHRkPjxjb2RlPmNsYXNzPSJzY29yZSI8L2NvZGU+PC90 ZD4NCiAgPC90cj4NCjwvdGFibGU+DQoNCjxoMyBpZD0idGFnLXllc25vIj4mbHQ7dHhwOmNi ZV9oZWxwZnVsX3llcyAvJmd0OywgJmx0O3R4cDpjYmVfaGVscGZ1bF9ubyAvJmd0OywgJmx0 O3R4cDpjYmVfaGVscGZ1bF90b3RhbF92b3RlcyAvJmd0OzwvaDM+DQo8cD5EaXNwbGF5cyBu dW1iZXIgb2YgcG9zaXRpdmUgW3Jlc3AuIG5lZ2F0aXZlLCB0b3RhbF0gdm90ZXMsIGZvciAm bHQ7dHhwOmNiZV9oZWxwZnVsX3llcyAvJmd0OyBhbmQgJmx0O3R4cDpjYmVfaGVscGZ1bF9u byAvJmd0OyBvbmx5IGEgbGluayB0byBjbGljayBpZiB0aGUgdm90ZSBpZiBwb3NzaWJsZS48 L3A+DQo8cD5NdXN0IGJlIGVuY2xvc2VkIGluIDxjb2RlPmNiZV9oZWxwZnVsPC9jb2RlPiBv ciA8Y29kZT5jYmVfaGVscGZ1bF9saXN0PC9jb2RlPi48L3A+DQo8cD5JbiBhIGxpc3QgYmFz ZWQgb24gdGltZSAoc2VlIDxhIGhyZWY9IiN0YWctbGlzdCI+Jmx0O3R4cDpjYmVfaGVscGZ1 bF9saXN0IC8mZ3Q7PC9hPiksIHRoZSBkaXNwbGF5ZWQgdmFsdWVzIGFyZSBmb3IgdGhlIGNv bnNpZGVyZWQgcGVyaW9kIG9ubHkuPC9wPg0KDQo8dGFibGUgY2xhc3M9Imxpc3QiPg0KICA8 dHI+DQogICAgPHRoPkF0dHJpYnV0ZTwvdGg+IDx0aD5EZXNjcmlwdGlvbiBhbmQgdmFsdWVz PC90aD4gPHRoPkV4YW1wbGU8L3RoPg0KICA8L3RyPg0KICA8dHI+DQogICAgPHRkPjxjb2Rl PndyYXB0YWc8L2NvZGU+PC90ZD4NCiAgICA8dGQ+VGFnIHdyYXBwaW5nIHRoZSBudW1iZXIg d2l0aG91dCBicmFja2V0cywgY2FuIG5vdCBiZSBibGFuay48YnIgLz5EZWZhdWx0OiBzcGFu PC90ZD4NCiAgICA8dGQ+PGNvZGU+d3JhcHRhZz0icCI8L2NvZGU+PC90ZD4NCiAgPC90cj4N CiAgPHRyPg0KICAgIDx0ZD48Y29kZT5jbGFzczwvY29kZT48L3RkPg0KICAgIDx0ZD5DbGFz cyB1c2VkIHRvIHN0eWxlIHRoZSBudW1iZXIuPGJyIC8+RGVmYXVsdDogdW5zZXQ8L3RkPg0K ICAgIDx0ZD48Y29kZT5jbGFzcz0idm9pY2VzIjwvY29kZT48L3RkPg0KICA8L3RyPg0KICA8 dHI+DQogICAgPHRkPjxjb2RlPnZvdGVjbGFzczwvY29kZT48L3RkPg0KICAgIDx0ZD5DbGFz cyB1c2VkIHRvIHN0eWxlIHRoZSBsaW5rLjxiciAvPkRlZmF1bHQ6IHVuc2V0PC90ZD4NCiAg ICA8dGQ+PGNvZGU+Y2xhc3M9InZvdGUiPC9jb2RlPjwvdGQ+DQogIDwvdHI+DQogIDx0cj4N CiAgICA8dGQ+PGNvZGU+c2hvd29ubHk8L2NvZGU+PC90ZD4NCiAgICA8dGQ+PHNwYW4gY2xh c3M9ImhpZ2hsaWdodCI+dHhwOmNiZV9oZWxwZnVsX3llcyBhbmQgdHhwOmNiZV9oZWxwZnVs X25vIG9ubHkgITwvc3Bhbj48YnIgLz5MaWtlIGluIDxjb2RlPnR4cDpjYmVfaGVscGZ1bDwv Y29kZT46IHdoZXRoZXIgdG8gYXV0aG9yaXplIHZvdGluZyBvciBub3QuIFVzZSBpdCwgZm9y IGV4YW1wbGUsIHRvIGp1c3QgZGlzcGxheSBjb3VudHMgaW4gYW4gYXJ0aWNsZSBsaXN0IGNv bnRleHQuPGJyIC8+RGVmYXVsdDogPGNvZGU+MDwvY29kZT48L3RkPg0KICAgIDx0ZD5TZWUg YmVsb3c8L3RkPg0KICA8L3RyPg0KICAgIDx0ZD48Y29kZT5sYWJlbHNob3dvbmx5PC9jb2Rl PjwvdGQ+DQogICAgPHRkPjxzcGFuIGNsYXNzPSJoaWdobGlnaHQiPnR4cDpjYmVfaGVscGZ1 bF95ZXMgYW5kIHR4cDpjYmVfaGVscGZ1bF9ubyBvbmx5Ljwvc3Bhbj48YnIgLz5JZiBzZXQg QU5EIG5vIHZvdGluZyBhdXRob3JpemVkICg8Y29kZT5zaG93b25seT0iMSI8L2NvZGU+KTog bGFiZWwgdG8gZGlzcGxheSBpbnN0ZWFkIG9mIHRoZSBvbmUgZGVmaW5lZCBpbiBwcmVmZXJl bmNlcy48YnIgLz48c3BhbiBjbGFzcz0iaGlnaGxpZ2h0Ij50eHA6Y2JlX2hlbHBmdWxfdG90 YWxfdm90ZXMgb25seS48L3NwYW4+PGJyIC8+SWYgc2V0OiBsYWJlbCB0byBkaXNwbGF5IGlu c3RlYWQgb2YgdGhlIG9uZSBkZWZpbmVkIGluIHByZWZlcmVuY2VzLjxiciAvPkRlZmF1bHQ6 IHVuc2V0PC90ZD4NCiAgICA8dGQ+PGNvZGU+Jmx0O3R4cDpjYmVfaGVscGZ1bF95ZXMgc2hv d29ubHk9IjEiIGxhYmVsc2hvd29ubHk9InBlb3BsZSBmb3VuZCB0aGlzIGhlbHBmdWxmdWwi IC8mZ3Q7PC9jb2RlPjwvdGQ+DQogIDwvdHI+DQo8L3RhYmxlPg0KDQo8aDMgaWQ9InRhZy1s aXN0Ij5Ub3BzIGFuZCBmbG9wczogJmx0O3R4cDpjYmVfaGVscGZ1bF9saXN0IC8mZ3Q7PC9o Mz4NCjxwPkNhbiBiZSB1c2VkIGVpdGhlciBhcyBhIHNpbmdsZSB0YWcgb3IgYXMgYSBwYWly LjwvcD4NCjxwPkRpc3BsYXlzIGFuIG9yZGVyZWQgbGlzdCBvZiBhcnRpY2xlIHRpdGxlcyBz ZWxlY3RlZCBhbmQgc29ydGVkIGFzIGZvbGxvd3MgKGRlZmF1bHQgaXMgdGhlIHRpdGxlcyBv ZiB0aGUgNSBiZXN0IHJhdGVkIGFydGljbGVzKTo8L3A+DQoNCjx0YWJsZSBjbGFzcz0ibGlz dCI+DQogIDx0cj4NCiAgICA8dGg+QXR0cmlidXRlPC90aD4gPHRoPkRlc2NyaXB0aW9uIGFu ZCB2YWx1ZXM8L3RoPiA8dGg+RXhhbXBsZTwvdGg+DQogIDwvdHI+DQogIDx0cj4NCiAgICA8 dGQ+PGNvZGU+bGFiZWw8L2NvZGU+PC90ZD4NCiAgICA8dGQ+TGFiZWwgdG8gcHJlcGVuZCB0 byB0aGUgb3V0cHV0LjxiciAvPkRlZmF1bHQgOiB1bnNldDwvdGQ+DQogICAgPHRkPjxjb2Rl PmxhYmVsPSJSYXRpbmdzIjwvY29kZT48L3RkPg0KICA8L3RyPg0KICA8dHI+DQogICAgPHRk Pjxjb2RlPmxhYmVsdGFnPC9jb2RlPjwvdGQ+DQogICAgPHRkPlRhZyB3cmFwcGluZyB0aGUg bGFiZWwgd2l0aG91dCBicmFja2V0cy48YnIgLz5EZWZhdWx0OiA8Y29kZT5oMjwvY29kZT48 L3RkPg0KICAgIDx0ZD48Y29kZT5sYWJlbHRhZz0iaDMiPC9jb2RlPjwvdGQ+DQogIDwvdHI+ DQogIDx0cj4NCiAgICA8dGQ+PGNvZGU+bGFiZWxjbGFzczwvY29kZT48L3RkPg0KICAgIDx0 ZD4oWClIVE1MIGNsYXNzIGF0dHJpYnV0ZSB0byBhcHBseSB0byA8Y29kZT5sYWJlbHRhZzwv Y29kZT4uPGJyIC8+RGVmYXVsdDogdW5zZXQ8L3RkPg0KICAgIDx0ZD48Y29kZT5sYWJlbGNs YXNzPSJzdW1tYXJ5LXRpdGxlIjwvY29kZT48L3RkPg0KICA8L3RyPg0KICA8dHI+DQogICAg PHRkPjxjb2RlPndyYXB0YWc8L2NvZGU+PC90ZD4NCiAgICA8dGQ+SFRNTCB0YWcgd3JhcHBp bmcgdGhlIHJlc3VsdGluZyBsaXN0LjxiciAvPkRlZmF1bHQ6IDxjb2RlPm9sPC9jb2RlPjwv dGQ+DQogICAgPHRkPjxjb2RlPndyYXB0YWc9InAiPC9jb2RlPjwvdGQ+DQogIDwvdHI+DQog IDx0cj4NCiAgICA8dGQ+PGNvZGU+YnJlYWs8L2NvZGU+PC90ZD4NCiAgICA8dGQ+SFRNTCB0 YWcgc2VwYXJhdGluZyBlbGVtZW50cyBvZiB0aGUgb3V0cHV0LjxiciAvPkRlZmF1bHQ6IDxj b2RlPmxpPC9jb2RlPjwvdGQ+DQogICAgPHRkPjxjb2RlPmJyZWFrPSJiciI8L2NvZGU+PC90 ZD4NCiAgPC90cj4NCiAgPHRyPg0KICAgIDx0ZD48Y29kZT5jbGFzczwvY29kZT48L3RkPg0K ICAgIDx0ZD5DbGFzcyBmb3IgdGhlIGxpc3QuPGJyIC8+RGVmYXVsdDogY2JlX2hlbHBmdWxf bGlzdDwvdGQ+DQogICAgPHRkPjxjb2RlPmNsYXNzPSJwYXJhZGUiPC9jb2RlPjwvdGQ+DQog IDwvdHI+DQogIDx0cj4NCiAgICA8dGQ+PGNvZGU+YnJlYWtjbGFzczwvY29kZT48L3RkPg0K ICAgIDx0ZD5DbGFzcyBmb3IgdGhlIEhUTUwgYnJlYWsgdGFnLjxiciAvPkRlZmF1bHQ6IHVu c2V0PC90ZD4NCiAgICA8dGQ+PGNvZGU+YnJlYWtjbGFzcz0iZWxlbWVudCI8L2NvZGU+PC90 ZD4NCiAgPC90cj4NCiAgPHRyPg0KICAgIDx0ZD48Y29kZT5mb3JtPC9jb2RlPjwvdGQ+DQog ICAgPHRkPkZvcm0gdXNlZCB0byBkaXNwbGF5IHNvbWUgYXJ0aWNsZSBkZXRhaWxzIChzdGFu ZGFyZCBhcnRpY2xlIHRhZ3MsIG9yIGNiZV9oZWxwZnVsIHRhZ3MpLjxiciAvPkRlZmF1bHQ6 IHVuc2V0PC90ZD4NCiAgICA8dGQ+PGNvZGU+Zm9ybT0icHJpemVfbGlzdCI8L2NvZGU+PC90 ZD4NCiAgPC90cj4NCiAgPHRyPg0KICAgIDx0ZD48Y29kZT5saW1pdDwvY29kZT48L3RkPg0K ICAgIDx0ZD5OdW1iZXIgb2YgaXRlbXMgdG8gZGlzcGxheS48YnIgLz5EZWZhdWx0OiA1PC90 ZD4NCiAgICA8dGQ+PGNvZGU+bGltaXQ9IjEwIjwvY29kZT48L3RkPg0KICA8L3RyPg0KICA8 dHI+DQogICAgPHRkPjxjb2RlPndoaWNoPC9jb2RlPjwvdGQ+DQogICAgPHRkPldoZXRoZXIg dG8gZGlzcGxheSB0aGUgYmVzdCByYXRpbmdzICh0b3ApIG9yIHRoZSB3b3JzdCAoYW55dGhp bmcgZWxzZSkuPGJyIC8+RGVmYXVsdDogdG9wPC90ZD4NCiAgICA8dGQ+PGNvZGU+d2hpY2g9 ImZsb3AiPC9jb2RlPjwvdGQ+DQogIDwvdHI+DQogIDx0cj4NCiAgICA8dGQ+PGNvZGU+b3Jk ZXI8L2NvZGU+PC90ZD4NCiAgICA8dGQ+SG93IHRvIHNvcnQgdGhlIGxpc3QsIGFzY2VuZGlu ZyBvciBkZXNjZW5kaW5nIG9yZGVyLjxiciAvPkRlZmF1bHQ6IGFzYzwvdGQ+DQogICAgPHRk Pjxjb2RlPm9yZGVyPSJkZXNjIjwvY29kZT48L3RkPg0KICA8L3RyPg0KICA8dHI+DQogICAg PHRkPjxjb2RlPnBlcmlvZDwvY29kZT48L3RkPg0KICAgIDx0ZD5MaXN0ZSBhcnRpY2xlcyB0 aGF0IGhhdmUgYmVlbiByYXRlZCBpbiBhIGdpdmVuIHRpbWUgaW50ZXJ2YWwuPGJyIC8+UG9z c2libGUgdmFsdWVzOiB0b2RheSAob3IgdGhpcyBkYXkpLCB5ZXN0ZXJkYXkgKG9yIGxhc3Qg ZGF5KSwgdGhpcyB3ZWVrLCBsYXN0IHdlZWssIHRoaXMgbW9udGgsIGxhc3QgbW9udGgsIHRo aXMgeWVhciwgbGFzdCB5ZWFyPGJyIC8+RGVmYXVsdDogdW5zZXQgKGFsbCB0aW1lKTwvdGQ+ DQogICAgPHRkPjxjb2RlPnBlcmlvZD0idGhpcyBtb250aCI8L2NvZGU+PC90ZD4NCiAgPC90 cj4NCjwvdGFibGU+DQoNCjxoMiBpZD0iZXhhbXBsZXMiPkV4YW1wbGVzPC9oMj4NCg0KPGgz PlNpbXBsZSB3aWRnZXQ8L2gzPg0KPHByZT48Y29kZT4mbHQ7dHhwOmNiZV9oZWxwZnVsIC8m Z3Q7PC9jb2RlPjwvcHJlPg0KDQo8aDM+TW9yZSBlbGFib3JhdGUgd2lkZ2V0PC9oMz4NCjxw cmU+PGNvZGU+Jmx0O3R4cDpjYmVfaGVscGZ1bCBsYWJlbHRhZz0iaDIiPg0KICAmbHQ7cCZn dDsmbHQ7dHhwOmNiZV9oZWxwZnVsX3Njb3JlIC8mZ3Q7IHBlb3BsZSBmb3VuZCB0aGlzIGFy dGljbGUgdXNlZnVsLiBEbyB5b3UgPyZsdDsvcCZndDsNCiAgJmx0O3AmZ3Q7DQogICZsdDt0 eHA6Y2JlX2hlbHBmdWxfeWVzIGNsYXNzPSJncmVlbiIgLyZndDsNCiAgJmx0O3R4cDpjYmVf aGVscGZ1bF9ubyBjbGFzcz0icmVkIiAvJmd0Ow0KICAmbHQ7L3AmZ3Q7DQombHQ7L3R4cDpj YmVfaGVscGZ1bCZndDs8L2NvZGU+PC9wcmU+DQoNCjxoMz5EZXRhaWxlZCBUb3AgMTA8L2gz Pg0KPHByZT48Y29kZT4mbHQ7dHhwOmNiZV9oZWxwZnVsX2xpc3QgbGFiZWw9IlRvcCAxMCIg bGFiZWx0YWc9ImgyIiBsaW1pdD0iMTAiJmd0Ow0KICAmbHQ7dHhwOnBlcm1saW5rJmd0OyZs dDt0eHA6dGl0bGUgLyZndDsmbHQ7L3R4cDpwZXJtbGluayZndDsNCiAgJmx0O3R4cDpleGNl cnB0IC8mZ3Q7DQombHQ7L3R4cDpjYmVfaGVscGZ1bF9saXN0Jmd0OzwvY29kZT48L3ByZT4N CjxwPm9yPC9wPg0KPHByZT48Y29kZT4mbHQ7dHhwOmNiZV9oZWxwZnVsX2xpc3QgbGltaXQ9 IjEwIiBmb3JtPSJ0b3B0ZW4iIC8mZ3Q7PC9jb2RlPjwvcHJlPg0KPHA+d2l0aCB0aGUgYWNj dXJhdGUgInRvcHRlbiIgZm9ybS48L3A+DQoNCjxoMz5GbG9wNSBiZWdpbm5pbmcgd2l0aCB0 aGUgd29yc3Q8L2gzPg0KPHByZT48Y29kZT4mbHQ7dHhwOmNiZV9oZWxwZnVsX2xpc3Qgd2hp Y2g9ImZsb3AiIG9yZGVyPSJhc2MiIC8mZ3Q7PC9jb2RlPjwvcHJlPg0KDQo8aDM+RGlzcGxh eSBvbmx5IGNvdW50IGluIGFydGljbGUgbGlzdCBjb250ZXh0PC9oMz4NCjxwPkluIHlvdXIg YXJ0aWNsZSBmb3JtOjwvcD4NCjxwcmU+PGNvZGU+Jmx0O3R4cDppZl9hcnRpY2xlX2xpc3Qm Z3Q7DQogICZsdDt0eHA6Y2JlX2hlbHBmdWwgc2hvd29ubHk9IjEiJmd0Ow0KICAgICZsdDt0 eHA6Y2JlX2hlbHBmdWxfeWVzIGxhYmVsc2hvd29ubHk9InBlb3BsZSBmaW5kIHRoaXMgdXNl ZnVsIiAvJmd0Ow0KICAgICZsdDt0eHA6Y2JlX2hlbHBmdWxfbm8gbGFiZWxzaG93b25seT0i cGVvcGxlIGZpbmQgdGhpcyB1c2VsZXNzIiAvJmd0Ow0KICAmbHQ7L3R4cDpjYmVfaGVscGZ1 bCZndDsNCiZsdDt0eHA6ZWxzZSAvJmd0Ow0KICAmbHQ7dHhwOmNiZV9oZWxwZnVsJmd0Ow0K ICAgICZsdDt0eHA6Y2JlX2hlbHBmdWxfeWVzIC8mZ3Q7DQogICAgJmx0O3R4cDpjYmVfaGVs cGZ1bF9ubyAvJmd0Ow0KICAmbHQ7L3R4cDpjYmVfaGVscGZ1bCZndDsNCiZsdDsvdHhwOmlm X2FydGljbGVfbGlzdCZndDs8L2NvZGU+PC9wcmU+DQoNCjxoMiBpZD0iY2hhbmdlbG9nIj5D aGFuZ2Vsb2c8L2gyPg0KPHVsPg0KICA8bGk+MzAgQXByIDEzIC0gdjAuNg0KICA8dWw+DQog ICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGlj LnBocD9waWQ9MjY2ODQyI3AyNjY4NDIiPmRpc3BsYXkgb25seSAobm90IGNsaWNrYWJsZSkg dGhlIHNlcGFyYXRlIHllcyBhbmQgbm8gbnVtYmVycyBpbiBhbiBhcnRpY2xlLWxpc3QgY29u dGV4dDwvYT4gLSB0aHggPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS9w cm9maWxlLnBocD9pZD05OTg2Ij5kb3VnbGdtPC9hPi4gQWRkZWQgYXR0cmlidXRlczo8YnIg Lz5zaG93b25seSAoY2JlX2hlbHBmdWwsIGNiZV9oZWxwZnVsX3llcywgY2JlX2hlbHBmdWxf bm8pPGJyIC8+bGFiZWxzaG93b25seSAoY2JlX2hlbHBmdWxfeWVzLCBjYmVfaGVscGZ1bF9u bywgY2JlX2hlbHBmdWxfc2NvcmUsIGNiZV9oZWxwZnVsX3RvdGFsX3ZvdGVzKTwvbGk+DQog ICAgPGxpPkFkZGVkIHRvbzogbGFiZWxjbGFzcyAoY2JlX2hlbHBmdWwsIGNiZV9oZWxwZnVs X2xpc3QpPC9saT4NCiAgICA8bGk+Rml4IGF0dGVtcHQ6IDxhIGhyZWY9Imh0dHA6Ly9mb3J1 bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9waWQ9MjY3OTYzI3AyNjc5NjMiPm1h cmt1cCBhcyBzcG90dGVkIGhlcmU8L2E+IC0gdGh4IDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50 ZXh0cGF0dGVybi5jb20vcHJvZmlsZS5waHA/aWQ9MTQ2NjQiPlN1c2FubmU8L2E+PC9saT4N CiAgPC91bD4NCiAgPC9saT4NCiAgPGxpPjE4IEp1bCAxMiAtdjAuNS4xLSBGaXhlZDogPGEg aHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP3BpZD0y NjMzMDgjcDI2MzMwOCI+cGF0aCBmb3IgLz9yYWhfZXh0ZXJuYWxfb3V0cHV0PWNiZV9oZWxw ZnVsX3tqc3xhamF4fTwvYT4gLSB0aHggPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0 ZXJuLmNvbS9wcm9maWxlLnBocD9pZD05OTg2Ij5kb3VnbGdtPC9hPjwvbGk+DQogIDxsaT4x NiBKdWwgMTIgLSB2MC41IC0gTm93IHN1cHBvcnRzIHJhaF9leHRlcm5hbF9vdXRwdXQgdjEu MCBuZXcgZGIgc3RydWN0dXJlLiBQcmV2aW91cyBzdHJ1Y3R1cmUgaXMgbm8gbG9uZ2VyIHN1 cHBvcnRlZC4gUGx1Z2luIG5vdCBhY3RpdmF0ZWQgaWYgYW4gZXJyb3Igb2NjdXJzIG9uIHJh aF9leHRlcm5hbF9vdXRwdXQgY29udHJvbHMuIENoZWNrcyBpZiBhbGwgdGFibGVzIGFyZSBw cmVzZW50IGFuZCByZXN0b3JlIHRoZW0gaWYgbm90LjwvbGk+DQogIDxsaT4zMCBNYXkgMTIg LSB2MC40IC0gPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9w aWMucGhwP3BpZD0yNjA5NDYjcDI2MDk0NiI+VG90YWwgdm90ZXM8L2E+IC0gdGh4IDxhIGhy ZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vcHJvZmlsZS5waHA/aWQ9NjgxMyI+ bWlsb3NldmljPC9hPiwgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92 aWV3dG9waWMucGhwP3BpZD0yNTc4ODcjcDI1Nzg4NyI+bGlzdCBiYXNlZCBvbiB0aW1lPC9h PiAtIHRoeCA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3Byb2ZpbGUu cGhwP2lkPTU3NTEiPnR5ZTwvYT4sIGZpeGVkOiBtaXNjYWxjdWxhdGlvbiBpbiBjYmVfaGVs cGZ1bF9saXN0IHdoZW4gc29ydGluZyBvbiBzY29yZTwvbGk+DQogIDxsaT4wNCBKYW4gMTIg LSB2MC4zIC0gZml4ZWQ6IDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20v dmlld3RvcGljLnBocD9waWQ9MjU2MzE4I3AyNTYzMTgiPnVud2FudGVkIG1hcmt1cCBpZiBq dXN0IGRpc3BsYXlpbmcgc2NvcmU8L2E+LCB0aHggbWlsb3NldmljOyBmaXhlZDogY2JlX2hl bHBmdWxfbGFiZWwgbm90IHdvcmtpbmcgaWYgc3RhbmRhbG9uZTsgZml4ZWQ6IGF2b2lkIG11 bHRpcGxlIGNhbGxzIHRvIF9jYmVfaGVscGZ1bF9mb290IHdoZW4gZGlzcGxheWluZyBhIGxp c3Q7IEpTIGNvZGUgc2xpZ2h0bHkgcmV2aXNpdGVkPC9saT4NCiAgPGxpPjE5IEp1bCAxMSAt djAuMi4xLSBmaXhlZDogbm9uLXZhbGlkIGh0bWwgb3V0cHV0IGZvciBhcnRpY2xlIGlkIGFu ZCB1bml0IC0gdGh4IDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vcHJv ZmlsZS5waHA/aWQ9NzY2MCI+UGF0NjQ8L2E+PC9saT4NCiAgPGxpPjEzIEp1bCAxMSAtIHYw LjIgLSBjYmVfaGVscGZ1bF9saXN0IGNhbiBub3cgZGlzcGxheSBjYmVfaGVscGZ1bF9zY29y ZSwgY2JlX2hlbHBmdWxfeWVzLCBjYmVfaGVscGZ1bF9ubzsgZml4ZWQ6IGJ1ZyBpbiBsaXN0 IHNvcnRpbmcgd2hlbiB1c2luZyByYXRpbyBvciBwZXJjZW50IGRpc3BsYXk7IHJlcG9wdWxh dGUgdGFibGUgcHJlZnMgd2l0aCBkZWZhdWx0cyBpZiBkYW1hZ2VkIG9yIGRlc3Ryb3llZDwv bGk+DQogIDxsaT4xMiBKdWwgMTEgLXYwLjEuMS0gQWRkZWQgY29udHJvbCBvbiB2YWx1ZSBy ZXR1cm5lZCBieSBnZXRSb3dzIChjYmVfaGVscGZ1bF9saXN0KQ0KICA8bGk+MDggSnVsIDEx IC0gdjAuMSAtIEluaXRpYWwgcmVsZWFzZTwvbGk+DQo8L3VsPg0KDQo8L2Rpdj4KPCEtLSAt LS0gQkVHSU4gUExVR0lOIENTUyAtLS0gLS0+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQou bGlzdCB0aHsNCgl0ZXh0LWFsaWduOmxlZnQ7DQoJY29sb3I6I2ZmZjsNCgliYWNrZ3JvdW5k OiM1NTU7DQoJcGFkZGluZzo2cHggMTZweCA2cHggNHB4Ow0KCWJvcmRlci1yaWdodDoxcHgg c29saWQgIzk5OTsNCglmb250LXdlaWdodDpub3JtYWw7DQp9DQoubGlzdCB0aCBhew0KCWNv bG9yOiNmZmY7DQoJZGlzcGxheTpibG9jazsNCn0NCi5saXN0IHRoIGgyew0KCW1hcmdpbjow Ow0KCWZvbnQtc2l6ZToxMXB4Ow0KfQ0KLmxpc3QgdGR7DQoJcGFkZGluZzo2cHggNHB4Ow0K fQ0KPC9zdHlsZT4KPCEtLSAtLS0gRU5EIFBMVUdJTiBDU1MgLS0tIC0tPiI7czo0OiJjb2Rl IjtzOjI5MTcxOiIvKg0KKiogY2JlX2hlbHBmdWwNCioqIExldCB5b3VyIHJlYWRlcnMgcmF0 ZSB5b3VyIGFydGljbGVzDQoqKiBDbGFpcmUgQnJpb25lIC0gaHR0cDovL3d3dy5jbGFpcmVi cmlvbmUuY29tLw0KKioNCioqIDAuMSAtIDA4IEp1bCAyMDExIC0gSW5pdGlhbCByZWxlYXNl DQoqKiAwLjEuMSAxMiBKdWwgMjAxMSAtIEFkZGVkIGNvbnRyb2wgb24gdmFsdWUgcmV0dXJu ZWQgYnkgZ2V0Um93cyAoY2JlX2hlbHBmdWxfbGlzdCksIHRoeCBQYXQ2NA0KKiogMC4yIC0g MTMgSnVsIDIwMTEgLSBjYmVfaGVscGZ1bF9saXN0IGNhbiBub3cgZGlzcGxheSBjYmVfaGVs cGZ1bF9zY29yZSwgY2JlX2hlbHBmdWxfeWVzLCBjYmVfaGVscGZ1bF9ubw0KKiogICAgICAg ICAgICAgICAgICAgICBGaXhlZDogYnVnIGluIGxpc3Qgc29ydGluZyB3aGVuIHVzaW5nIHJh dGlvIG9yIHBlcmNlbnQgZGlzcGxheQ0KKiogICAgICAgICAgICAgICAgICAgICBSZXBvcHVs YXRlIHRhYmxlIHByZWZzIHdpdGggZGVmYXVsdHMgaWYgZGFtYWdlZCBvciBkZXN0cm95ZWQN CioqIDAuMi4xIDE5IEp1bCAyMDExIC0gRml4ZWQ6IG5vbi12YWxpZCBodG1sIG91dHB1dCBm b3IgYXJ0aWNsZSBpZCBhbmQgdW5pdCwgdGh4IFBhdDY0DQoqKiAwLjMgLSAwNCBKYW4gMjAx MiAtIEZpeGVkOiB1bndhbnRlZCBtYXJrdXAgaWYganVzdCBkaXNwbGF5aW5nIHNjb3JlLCB0 aHggbWlsb3NldmljDQoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaHR0cDovL2Zv cnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP3BpZD0yNTYzMTgjcDI1NjMxOCkN CioqICAgICAgICAgICAgICAgICAgICAgRml4ZWQ6IGNiZV9oZWxwZnVsX2xhYmVsIG5vdCB3 b3JraW5nIGlmIHN0YW5kYWxvbmUNCioqICAgICAgICAgICAgICAgICAgICAgRml4ZWQ6IGF2 b2lkIG11bHRpcGxlIGNhbGxzIHRvIF9jYmVfaGVscGZ1bF9mb290IHdoZW4gZGlzcGxheWlu ZyBhIGxpc3QNCioqICAgICAgICAgICAgICAgICAgICAgSlMgY29kZSBzbGlnaHRseSByZXZp c2l0ZWQNCioqIDAuNCAtIDMwIE1heSAyMDEyIC0gVG90YWwgdm90ZXMgaHR0cDovL2ZvcnVt LnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP3BpZD0yNjA5NDYjcDI2MDk0Ng0KKiog ICAgICAgICAgICAgICAgICAgICBMaXN0IGJhc2VkIG9uIHRpbWUgaHR0cDovL2ZvcnVtLnRl eHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP3BpZD0yNTc4ODcjcDI1Nzg4Nw0KKiogICAg ICAgICAgICAgICAgICAgICBGaXhlZDogbWlzY2FsY3VsYXRpb24gaW4gY2JlX2hlbHBmdWxf bGlzdCB3aGVuIHNvcnRpbmcgb24gc2NvcmUNCioqIDAuNSAtIDE2IEp1bCAyMDEyIC0gcmFo X2V4dGVybmFsX291dHB1dCB2MS4wOiBuZXcgZGIgc3RydWN0dXJlLiBQcmV2aW91cyBzdHJ1 Y3R1cmUgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZA0KKiogICAgICAgICAgICAgICAgICAgICBQ bHVnaW4gbm90IGFjdGl2YXRlZCBpZiBhbiBlcnJvciBvY2N1cnMgb24gcmFoX2V4dGVybmFs X291dHB1dCBjb250cm9scw0KKiogICAgICAgICAgICAgICAgICAgICBDaGVja3MgaWYgYWxs IHRhYmxlcyBhcmUgcHJlc2VudCBhbmQgcmVzdG9yZSB0aGVtIGlmIG5vdA0KKiogMC41LjEg MTggSnVsIDIwMTIgLSBGaXhlZDogcGF0aCBmb3IgLz9yYWhfZXh0ZXJuYWxfb3V0cHV0PWNi ZV9oZWxwZnVsX3tqc3xhamF4fSwgdGh4IGRvdWdsZ20NCioqICAgICAgICAgICAgICAgICAg ICAgKGh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9waWQ9MjYz MzA4I3AyNjMzMDgpDQoqKiAwLjYgLSAzMCBBcHIgMjAxMyAtIGRpc3BsYXkgb25seSAobm90 IGNsaWNrYWJsZSkgdGhlIHNlcGFyYXRlIHllcyBhbmQgbm8gbnVtYmVycyBpbiBhbiBhcnRp Y2xlLWxpc3QgY29udGV4dCwgdGh4IGRvdWdsZ20NCioqICAgICAgICAgICAgICAgICAgICAg KGh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9waWQ9MjY2ODQy I3AyNjY4NDIpDQoqKiAgICAgICAgICAgICAgICAgICAgIEFkZGVkOiBhdHRyaWJ1dGVzIHNo b3dvbmx5IChjYmVfaGVscGZ1bCwgY2JlX2hlbHBmdWxfeWVzLCBjYmVfaGVscGZ1bF9ubyks DQoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsc2hvd29u bHkgKGNiZV9oZWxwZnVsX3llcywgY2JlX2hlbHBmdWxfbm8sIGNiZV9oZWxwZnVsX3Njb3Jl LCBjYmVfaGVscGZ1bF90b3RhbF92b3RlcykNCioqICAgICAgICAgICAgICAgICAgICAgQWRk ZWQgdG9vOiAgICAgICAgbGFiZWxjbGFzcyAoY2JlX2hlbHBmdWwsIGNiZV9oZWxwZnVsX2xp c3QpLA0KKiogICAgICAgICAgICAgICAgICAgICBGaXggYXR0ZW1wdDogbWFya3VwLCB0aHgg U3VzYW5uZSAoaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP3Bp ZD0yNjc5NjMjcDI2Nzk2MykNCioqDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KDQovKiA9PT09 PT09PT09PT09PSBQb3NzaWJsZSBhZG1pbi1zaWRlIGN1c3RvbWlzYXRpb24gaGVyZSA9PT09 PT09PT09PT09PSAqLw0KZnVuY3Rpb24gY2JlX2hlbHBmdWxfbGFiZWxzX3ByZWZzKCkNCnsN CiAgICByZXR1cm4oIGFycmF5KCAnbGFiZWwnICAgICAgPT4gIldpZGdldCBsYWJlbCINCiAg ICAgICAgICAgICAgICAgLCAnc2NvcmUnICAgICAgPT4gIlJhdGUgbGFiZWwiDQogICAgICAg ICAgICAgICAgICwgJ3llcycgICAgICAgID0+ICJQb3NpdGl2ZSB2b3RlIGxhYmVsIg0KICAg ICAgICAgICAgICAgICAsICdubycgICAgICAgICA9PiAiTmVnYXRpdmUgdm90ZSBsYWJlbCIN CiAgICAgICAgICAgICAgICAgLCAndm90ZXMnICAgICAgPT4gIlRvdGFsIHZvdGVzIGxhYmVs Ig0KICAgICAgICAgICAgICAgICAsICd5ZXN0b29sdGlwJyA9PiAiUG9zaXRpdmUgdm90ZSB0 b29sdGlwIg0KICAgICAgICAgICAgICAgICAsICdub3Rvb2x0aXAnICA9PiAiTmVnYXRpdmUg dm90ZSB0b29sdGlwIg0KICAgICAgICAgICAgICAgICAsICdmaW5hbHJhdGUnICA9PiAiUmF0 ZSB1bml0OiB2YWx1ZSAoc2ltcGxlKSwgcmF0aW8gb3IgcGVyY2VudGFnZSBvZiBwb3NpdGl2 ZSB2b3RlcyINCiAgICAgICAgICAgICAgICAgLCAnaXBjaGVjaycgICAgPT4gIkludGVydmFs IGFsbG93ZWQgYmV0d2VlbiB2b3RlcyBmb3IgYW4gSVAgKGhvdXJzIC0gMCBpZiBub3QgdXNl ZCkiDQogICAgICAgICAgICAgICAgICkNCiAgICAgICAgICApIDsNCn0NCi8qID09PT09PT09 PT09PT09PT09PT09PT09PT09PSBTdG9wIGVkaXRpbmcgPT09PT09PT09PT09PT09PT09PT09 PT09PT09ICovDQoNCmlmKCBAdHhwaW50ZXJmYWNlID09ICdhZG1pbicgKQ0Kew0KICAgIGFk ZF9wcml2cyggJ2NiZV9oZWxwZnVsX2FkbWluJywgJzEsMicgKSA7DQogICAgYWRkX3ByaXZz KCAncGx1Z2luX3ByZWZzLmNiZV9oZWxwZnVsJywgJzEsMicgKTsNCiAgICByZWdpc3Rlcl90 YWIoICdleHRlbnNpb25zJywgJ2NiZV9oZWxwZnVsX2FkbWluJywgJ0FydGljbGUgUmF0aW5n cycgKSA7DQogICAgcmVnaXN0ZXJfY2FsbGJhY2soICdjYmVfaGVscGZ1bF9hZG1pbicsICdw bHVnaW5fcHJlZnMuY2JlX2hlbHBmdWwnKTsNCiAgICByZWdpc3Rlcl9jYWxsYmFjayggJ2Ni ZV9oZWxwZnVsX2FkbWluJywgJ2NiZV9oZWxwZnVsX2FkbWluJyApIDsNCiAgICByZWdpc3Rl cl9jYWxsYmFjayggJ2NiZV9oZWxwZnVsX2hlYWQnLCdhZG1pbl9zaWRlJywnaGVhZF9lbmQn KSA7DQogICAgcmVnaXN0ZXJfY2FsbGJhY2soICdjYmVfaGVscGZ1bF9saWZlY3ljbGUnLCAn cGx1Z2luX2xpZmVjeWNsZS5jYmVfaGVscGZ1bCcgKSA7DQp9DQoNCi8qID09PT09PT09PT09 PT09PT09PT09IEJvdGggc2lkZXMgPT09PT09PT09PT09PT09PT09PT0gKi8NCg0KZnVuY3Rp b24gY2JlX2hlbHBmdWxfZGVmX3ByZWZzKCkNCnsNCiAgICByZXR1cm4oIGFycmF5KCAnbGFi ZWwnICAgICAgPT4gJ0hlbHBmdWwgPycNCiAgICAgICAgICAgICAgICAgLCAnc2NvcmUnICAg ICAgPT4gJ1Njb3JlOiAnDQogICAgICAgICAgICAgICAgICwgJ3llcycgICAgICAgID0+ICdZ ZXMnDQogICAgICAgICAgICAgICAgICwgJ25vJyAgICAgICAgID0+ICdObycNCiAgICAgICAg ICAgICAgICAgLCAndm90ZXMnICAgICAgPT4gJ1RvdGFsIHZvdGVzJw0KICAgICAgICAgICAg ICAgICAsICd5ZXN0b29sdGlwJyA9PiAnJw0KICAgICAgICAgICAgICAgICAsICdub3Rvb2x0 aXAnICA9PiAnJw0KICAgICAgICAgICAgICAgICAsICdmaW5hbHJhdGUnICA9PiAnc2ltcGxl Jw0KICAgICAgICAgICAgICAgICAsICdpcGNoZWNrJyAgICA9PiAnMjQnDQogICAgICAgICAg ICAgICAgICkNCiAgICAgICAgICApIDsNCn0NCg0KZnVuY3Rpb24gY2JlX2hlbHBmdWxfZ2V0 X3ByZWZzKCkNCnsNCiAgICAkb3V0ID0gYXJyYXkoKTsNCiAgICAkc29ydG9yZGVyID0gam9p biggIiwiLCBkb0FycmF5KCBhcnJheV9rZXlzKCBjYmVfaGVscGZ1bF9kZWZfcHJlZnMoKSAp LCAnZG9RdW90ZScgKSApIDsNCiAgICAkcnMgPSBzYWZlX3Jvd3MoICJuYW1lLHZhbHVlIiwg ImNiZV9oZWxwZnVsX3ByZWZzIiwgIjE9MSBPUkRFUiBCWSBmaWVsZCggYG5hbWVgLCAkc29y dG9yZGVyICkiICk7DQoJCQ0KICAgIGZvcmVhY2goJHJzIGFzICRyb3cpDQogICAgICAkb3V0 WyAkcm93WyduYW1lJ10gXSA9ICRyb3dbJ3ZhbHVlJ10gOw0KCQkJDQogICAgcmV0dXJuKCAk b3V0ICkgOw0KfQ0KDQovKiA9PT09PT09PT09PT09PT09PT09PSBBZG1pbiBzaWRlID09PT09 PT09PT09PT09PT09PT09ICovDQoNCmZ1bmN0aW9uIGNiZV9oZWxwZnVsX2hlYWQoKQ0Kew0K ICAgIGdsb2JhbCAkZXZlbnQgOw0KICAgIGlmKCAkZXZlbnQgIT0gJ2NiZV9oZWxwZnVsX2Fk bWluJyAmJiAkZXZlbnQgIT0gJ3BsdWdpbl9wcmVmcy5jYmVfaGVscGZ1bCcgKQ0KICAgICAg ICByZXR1cm4gOw0KDQogICAgZWNobyA8PDxFT0YNCiAgICAgICAgPHN0eWxlIHR5cGU9InRl eHQvY3NzIj4NCiAgICAgICAgdGFibGUudHhwLWxpc3QgeyB3aWR0aDphdXRvOyBtYXJnaW46 MCBhdXRvIH0NCiAgICAgICAgI3R4cC1jb250ZW50IHRhYmxlI2xpc3QgeyB3aWR0aDphdXRv ICFpbXBvcnRhbnQgfQ0KICAgICAgICBmb3JtIGRpdiB7IG1hcmdpbi10b3A6MS41ZW07IHRl eHQtYWxpZ246Y2VudGVyIH0NCiAgICAgICAgdGQudGQtbGFiZWwgew0KICAgICAgICAgICAg dGV4dC1hbGlnbjogcmlnaHQgOw0KICAgICAgICB9DQogICAgICAgIDwvc3R5bGU+DQpFT0Y7 DQoNCiAgICByZXR1cm4gOw0KfQ0KDQpmdW5jdGlvbiBjYmVfaGxwX2NyZWF0ZV90YWJsZXMo ICYkaGxwX3ByZWZzID0gbnVsbCApDQp7DQogICAgc2FmZV9xdWVyeSggJ0NSRUFURSBUQUJM RSBJRiBOT1QgRVhJU1RTICcuc2FmZV9wZngoJ2NiZV9oZWxwZnVsX3ZvdGVzJykuJyAoDQog ICAgICAgIGBpZGAgaW50KDExKSBOT1QgTlVMTCBBVVRPX0lOQ1JFTUVOVCwNCiAgICAgICAg YHRleHRwYXR0ZXJuX2lkYCBpbnQoMTEpIE5PVCBOVUxMLA0KICAgICAgICBgcGx1c2Agc21h bGxpbnQoNikgTk9UIE5VTEwgREVGQVVMVCBcJzBcJywNCiAgICAgICAgYG1pbnVzYCBzbWFs bGludCg2KSBOT1QgTlVMTCBERUZBVUxUIFwnMFwnLA0KICAgICAgICBgaXBgIHZhcmNoYXIo MTUpIE5PVCBOVUxMIERFRkFVTFQgXCcwMDAuMDAwLjAwMC4wMDBcJywNCiAgICAgICAgYGR2 b3RlYCBkYXRldGltZSBOT1QgTlVMTCBERUZBVUxUIFwnMDAwMC0wMC0wMCAwMDowMDowMFwn LA0KICAgICAgICBQUklNQVJZIEtFWSAoYGlkYCkNCiAgICAgICAgKScgKSA7DQogICAgc2Fm ZV9xdWVyeSggJ0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTICcuc2FmZV9wZngoJ2NiZV9o ZWxwZnVsX2NvdW50cycpLicgKA0KICAgICAgICBgdGV4dHBhdHRlcm5faWRgIGludCgxMSkg Tk9UIE5VTEwsDQogICAgICAgIGBjb3VudGAgaW50KDExKSBOT1QgTlVMTCBERUZBVUxUIFwn MFwnLA0KICAgICAgICBgcGx1c2VzYCBzbWFsbGludCg2KSBOT1QgTlVMTCBERUZBVUxUIFwn MFwnLA0KICAgICAgICBgbWludXNlc2Agc21hbGxpbnQoNikgTk9UIE5VTEwgREVGQVVMVCBc JzBcJywNCiAgICAgICAgUFJJTUFSWSBLRVkgKGB0ZXh0cGF0dGVybl9pZGApDQogICAgICAg ICknICkgIDsNCiAgICBzYWZlX3F1ZXJ5KCdDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyAn LnNhZmVfcGZ4KCdjYmVfaGVscGZ1bF9wcmVmcycpLicgKA0KICAgICAgICBgbmFtZWAgVkFS Q0hBUigyNTUpIE5PVCBOVUxMLA0KICAgICAgICBgdmFsdWVgIExPTkdURVhUIE5PVCBOVUxM LA0KICAgICAgICBQUklNQVJZIEtFWShgbmFtZWApDQogICAgICAgICknICk7DQoNCiAgICAv KiBQb3B1bGF0ZSBwcmVmZXJlbmNlIHRhYmxlIGZyb20gZGVmYXVsdHMgKi8NCiAgICBmb3Jl YWNoKCBjYmVfaGVscGZ1bF9kZWZfcHJlZnMoKSBhcyAkbmFtZSA9PiAkdmFsdWUgKQ0KICAg IHsNCiAgICAgICAgaWYoIHNhZmVfY291bnQoICdjYmVfaGVscGZ1bF9wcmVmcycsICJuYW1l PSckbmFtZSciICkgPT0gMCApDQogICAgICAgIHsNCiAgICAgICAgICAgIHNhZmVfaW5zZXJ0 KCdjYmVfaGVscGZ1bF9wcmVmcycsICJuYW1lPSckbmFtZScsIHZhbHVlPSckdmFsdWUnIiAp IDsNCiAgICAgICAgICAgIGlmKCAkaGxwX3ByZWZzICE9PSBudWxsICkNCiAgICAgICAgICAg ICAgICAkaGxwX3ByZWZzWyRuYW1lXSA9ICR2YWx1ZSA7DQogICAgICAgIH0NCiAgICB9DQp9 DQoNCmZ1bmN0aW9uIGNiZV9obHBfcHJlZnNfdXBkYXRlKCAmJGhscF9wcmVmcywgJHVwZGF0 ZXMgKQ0Kew0KICAgIGV4dHJhY3QoICR1cGRhdGVzICkgOw0KICAgIGZvcmVhY2goICRobHBf cHJlZnMgYXMgJG5hbWUgPT4gJHZhbHVlICkNCiAgICB7DQogICAgICAgIGlmKCAkJG5hbWUg IT09ICR2YWx1ZSApDQogICAgICAgIHsNCiAgICAgICAgICAgIHNhZmVfdXBzZXJ0KCAnY2Jl X2hlbHBmdWxfcHJlZnMnLCAiYHZhbHVlYD0nIi5kb1NsYXNoKCQkbmFtZSkuIiciDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgImBuYW1lYD0nIi5k b1NsYXNoKCRuYW1lKS4iJyIgKSA7DQogICAgICAgICAgICAkaGxwX3ByZWZzWyRuYW1lXSA9 ICQkbmFtZSA7DQogICAgICAgIH0NCiAgICB9DQp9DQoNCmZ1bmN0aW9uIGNiZV9oZWxwZnVs X2FkbWluKCkNCnsNCiAgICBnbG9iYWwgJGV2ZW50LCAkc3RlcCA7DQogICAgcmVxdWlyZV9w cml2cyggJ2NiZV9oZWxwZnVsX2FkbWluJyApIDsNCiAgICBAJGhscF9wcmVmcyA9IGNiZV9o ZWxwZnVsX2dldF9wcmVmcygpIDsNCiAgICAkbWVzc2FnZSA9ICIiIDsNCiAgICAkYXJyVW5p dCA9IGFycmF5KCAnc2ltcGxlJywgJ3JhdGlvJywgJ3BlcmNlbnQnICkgOw0KDQogICAgaWYo ICRzdGVwID09ICdzYXZlJyApDQogICAgew0KICAgICAgICAkdXBkYXRlcyA9IHBzYSggYXJy YXlfa2V5cyggJGhscF9wcmVmcyApICkgOw0KICAgICAgICBjYmVfaGxwX3ByZWZzX3VwZGF0 ZSggJGhscF9wcmVmcywgJHVwZGF0ZXMgKSA7DQogICAgICAgICRtZXNzYWdlID0gZ1R4dCgg J3ByZWZlcmVuY2VzX3NhdmVkJyApIDsNCiAgICB9DQogICAgZWxzZWlmKCAkc3RlcCA9PSAn cmVzdG9yZScgKQ0KICAgIHsNCiAgICAgICAgY2JlX2hscF9jcmVhdGVfdGFibGVzKCAkaGxw X3ByZWZzICkgOw0KICAgICAgICAkbWVzc2FnZSA9ICJQcmVmZXJlbmNlcyByZXN0b3JlZCIg Ow0KICAgIH0NCg0KICAgICRlcnJvciA9IGFycmF5KCkgOw0KICAgIGlmKCBAZ2V0VGhpbmco J2Rlc2NyaWJlIGAnLnNhZmVfcGZ4KCdjYmVfaGVscGZ1bF92b3RlcycpLidgJykgID09PSBm YWxzZSApDQogICAgICAgICRlcnJvcltdID0gIm1pc3NpbmcgIiAuIHNhZmVfcGZ4KCdjYmVf aGVscGZ1bF92b3RlcycpIDsNCiAgICBpZiggQGdldFRoaW5nKCdkZXNjcmliZSBgJy5zYWZl X3BmeCgnY2JlX2hlbHBmdWxfY291bnRzJykuJ2AnKSAgPT09IGZhbHNlICkNCiAgICAgICAg JGVycm9yW10gPSAibWlzc2luZyAiIC4gc2FmZV9wZngoJ2NiZV9oZWxwZnVsX2NvdW50cycp IDsNCg0KICAgIGZvcmVhY2goIGFycmF5X2tleXMoIGNiZV9oZWxwZnVsX2RlZl9wcmVmcygp ICkgYXMgJHByZWYgKQ0KICAgIHsNCiAgICAgICAgaWYoICEgYXJyYXlfa2V5X2V4aXN0cygg JHByZWYsICRobHBfcHJlZnMgKSApDQogICAgICAgIHsNCiAgICAgICAgICAgICRlcnJvcltd IC49IGdUeHQoICdtaXNzaW5nX3ByZWZzJyApIDsNCiAgICAgICAgICAgIGJyZWFrIDsNCiAg ICAgICAgfQ0KICAgIH0NCg0KICAgIGlmKCBjb3VudCggJGVycm9yICkgKQ0KICAgIHsNCiAg ICAgICAgJG91dCAgPSBzdGFydFRhYmxlKCAnbGlzdCcsICcnLCAndHhwLWxpc3QnICkgOw0K ICAgICAgICAkb3V0IC49IHRyKCB0ZGEoIGZvcm0oIGZJbnB1dCggJ3N1Ym1pdCcsICdwbHVn aW4nICwgJ0JhY2sgdG8gcGx1Z2lucycsICdzbWFsbGVyYm94JykNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLiBlSW5wdXQoICdwbHVnaW4nICkgKSwgJyBzdHlsZT0idGV4dC1h bGlnbjogcmlnaHQ7IicgKQ0KICAgICAgICAgICAgICAgICAgLiB0ZCggZm9ybSggZklucHV0 KCAnc3VibWl0JywgJ3Jlc3RvcmUnLCAnUmVzdG9yZSBkZWZhdWx0cycgICAsICdzbWFsbGVy Ym94JykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuIHNJbnB1dCggJ3Jlc3RvcmUn ICkgLiBlSW5wdXQoICRldmVudCApICkgKQ0KICAgICAgICAgICAgICAgICAgKSA7DQogICAg ICAgIHBhZ2V0b3AoICJQcmVmZXJlbmNlcyIsIGdUeHQoICdicm9rZW5fcGx1Z2luJyApIC4g IjogIiAuIGpvaW4oICIsICIsICRlcnJvciApICkgOw0KICAgICAgICAkb3V0IC49IGVuZFRh YmxlKCkgOw0KICAgICAgICBlY2hvKCAkb3V0ICkgOw0KICAgICAgICAkZXJyb3IgPSBhcnJh eSgpIDsNCiAgICAgICAgcmV0dXJuIDsNCiAgICB9DQoNCiAgICAkbGFiZWxzID0gY2JlX2hl bHBmdWxfbGFiZWxzX3ByZWZzKCkgOw0KICAgIHBhZ2V0b3AoICJjYmVfaGVscGZ1bCBQcmVm ZXJlbmNlcyIsICRtZXNzYWdlICkgOw0KICAgICRvdXQgID0gdGFnKCAnY2JlX2hlbHBmdWwg UHJlZmVyZW5jZXMnLCAnaDInICkgOw0KICAgICRvdXQgLj0gc3RhcnRUYWJsZSggJ2xpc3Qn LCAnJywgJ3R4cC1saXN0JyApIDsNCiAgICBmb3JlYWNoKCAkaGxwX3ByZWZzIGFzICRuYW1l ID0+ICR2YWx1ZSApDQogICAgew0KICAgICAgICBpZiggJG5hbWUgPT09ICdmaW5hbHJhdGUn ICkNCiAgICAgICAgICAgICRmb3JtX2ZpZWxkID0gc2VsZWN0SW5wdXQoICRuYW1lLCBhcnJh eV9jb21iaW5lKCAkYXJyVW5pdCwgJGFyclVuaXQgKSwgJHZhbHVlLCBmYWxzZSwgJycsICRu YW1lICkgOw0KICAgICAgICBlbHNlDQogICAgICAgICAgICAkZm9ybV9maWVsZCA9IGZJbnB1 dCggJ3RleHQnLCAkbmFtZSwgJHZhbHVlLCAnZWRpdCcsICcnLCAnJywgJycsICcnLCAkbmFt ZSApIDsNCg0KICAgICAgICAkb3V0IC49IHRyKCB0ZCggJGxhYmVsc1skbmFtZV0sICcnLCAn dGQtbGFiZWwnICkudGQoICRmb3JtX2ZpZWxkICkgKSA7DQogICAgfQ0KICAgICRvdXQgLj0g ZW5kVGFibGUoKSA7DQogICAgJG91dCAuPSB0YWcoIGZJbnB1dCggJ3N1Ym1pdCcsICdzdWJt aXQnLCBnVHh0KCdzYXZlJyksICdzbWFsbGVyYm94Jykuc0lucHV0KCAnc2F2ZScgKS5lSW5w dXQoICRldmVudCApLCAnZGl2JyApIDsNCiAgICBlY2hvKCBmb3JtKCAkb3V0ICkgKSA7DQog ICAgcmV0dXJuIDsNCn0NCg0KZnVuY3Rpb24gY2JlX2hlbHBmdWxfaW5zdGFsbGVkKCkNCnsN CiAgICAvKiBVcGRhdGUgdmVyc2lvbiBpbiB0eHBfcHJlZnMgKi8NCiAgICBzZXRfcHJlZigg J2NiZV9oZWxwZnVsX3ZlcnNpb24nLCAnMC42JywgJ2NiZV9oZWxwZnVsJywgUFJFRl9ISURE RU4sICcnICkgOw0KDQogICAgLyogQUpBWCBzbmlwcGV0cyAqLw0KICAgICRjb2RlID0gYmFz ZTY0X2RlY29kZSggIk95QkRiMjUwWlc1MExYUjVjR1U2SUhSbGVIUXZhSFJ0YkZ4eVhHNDhk SGh3T25Cb2NENWNjbHh1SUNCbGVIUnlZV04wS0NCd2MyRW9JR0Z5Y21GNUtDQW5KMkZ5ZEds amJHVmZhV1FuSnl3Z0p5ZDFjRjlrYjNkdUp5Y3NJQ2NuZFc1cGRDY25JQ2tnS1NBcE8xeHlY RzRnSUNSMWNDQTlJQ1JrYjNkdUlEMGdNQ0E3WEhKY2JseHlYRzRnSUdsbUtDQWtZWEowYVdO c1pWOXBaQ0FoUFQwZ0p5Y25KeUFtSmlBa2RYQmZaRzkzYmlBaFBUMGdKeWNuSnlBbUppQnBj M05sZENnZ0pGOVRSVkpXUlZKYkp5ZFNSVTFQVkVWZlFVUkVVaWNuWFNBcElDbGNjbHh1SUNC N1hISmNiaUFnSUNBa0pIVndYMlJ2ZDI0Z1BTQXhJRHRjY2x4dUlDQWdJQ1JwY0NBOUlDUmZV MFZTVmtWU1d5Y25Va1ZOVDFSRlgwRkVSRkluSjEwZ08xeHlYRzRnSUNBZ0pHUjJiM1JsSUQw Z1pHRjBaU2dnSnlkWkxXMHRaQ0JJT21rNmN5Y25JQ2tnTzF4eVhHNWNjbHh1SUNBZ0lITmha bVZmYVc1elpYSjBLQ0FuSjJOaVpWOW9aV3h3Wm5Wc1gzWnZkR1Z6Snljc0lDSjBaWGgwY0dG MGRHVnlibDlwWkQwbkp5UmhjblJwWTJ4bFgybGtKeWNzSUhCc2RYTTlKeWNrZFhBbkp5d2di V2x1ZFhNOUp5Y2taRzkzYmljbkxDQnBjRDBuSnlScGNDY25MQ0JrZG05MFpUMG5KeVJrZG05 MFpTY25JaUFwSUR0Y2NseHVJQ0FnSUhOaFptVmZkWEJ6WlhKMEtDQW5KMk5pWlY5b1pXeHda blZzWDJOdmRXNTBjeWNuTENBaVkyOTFiblE5WTI5MWJuUXJKSFZ3TFNSa2IzZHVMQ0J3YkhW elpYTTljR3gxYzJWekt5UjFjQ3dnYldsdWRYTmxjejF0YVc1MWMyVnpLeVJrYjNkdUlpd2dJ blJsZUhSd1lYUjBaWEp1WDJsa1BTY25KR0Z5ZEdsamJHVmZhV1FuSnlJZ0tTQTdYSEpjYmx4 eVhHNGdJQ0FnWlhoMGNtRmpkQ2dnYzJGbVpWOXliM2NvSUNjblkyOTFiblFzSUhCc2RYTmxj eXdnYldsdWRYTmxjeWNuTENBbkoyTmlaVjlvWld4d1puVnNYMk52ZFc1MGN5Y25MQ0FpZEdW NGRIQmhkSFJsY201ZmFXUTlKeWNrWVhKMGFXTnNaVjlwWkNjbklpQXBJQ2tnTzF4eVhHNGdJ Q0FnYVdZb0lDUjFibWwwSUQwOVBTQW5KM05wYlhCc1pTY25JQ2xjY2x4dUlDQWdJQ0FnSUNB a2MyTnZjbVVnUFNBa1kyOTFiblFnTzF4eVhHNGdJQ0FnWld4elpWeHlYRzRnSUNBZ2UxeHlY RzRnSUNBZ0lDQWdJQ1J6WTI5eVpTQTlJQ1J3YkhWelpYTXZLQ1J3YkhWelpYTXJKRzFwYm5W elpYTXBJRHRjY2x4dUlDQWdJQ0FnSUNBa2MyTnZjbVVnUFNBb0pIVnVhWFFnUFQwOUlDY25j bUYwYVc4bkp5a2dQeUJ6Y0hKcGJuUm1LQ0FpSlRRdU1tWWlJQ0FnTENCeWIzVnVaQ2dnSkhO amIzSmxMQ0F5SUNrZ0tWeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJ Q0FnSUNBZ0lDQWdJQ0FnT2lCemNISnBiblJtS0NBaUpUVXVNbVlnSlNVaUxDQnliM1Z1WkNn Z01UQXdMakFxSkhOamIzSmxMQ0F5SUNrZ0tTQTdYSEpjYmlBZ0lDQjlYSEpjYmx4eVhHNGdJ Q0FnWldOb2J5QnFjMjl1WDJWdVkyOWtaU2dnWVhKeVlYa29JQ2NuY0d4MWN5Y25JRDArSUNS MWNDd2dKeWR0YVc1MWN5Y25JRDArSUNSa2IzZHVMQ0FuSjNOamIzSmxKeWNnUFQ0Z0pITmpi M0psSUNrZ0tTQTdYSEpjYmlBZ2ZWeHlYRzQ4TDNSNGNEcHdhSEErIiApIDsNCiAgICAkanMg PSBiYXNlNjRfZGVjb2RlKCAiT3lCRGIyNTBaVzUwTFhSNWNHVTZJSFJsZUhRdmFtRjJZWE5q Y21sd2RGeHlYRzRrS0dSdlkzVnRaVzUwS1M1eVpXRmtlU2htZFc1amRHbHZiaWdwZTJaMWJt TjBhVzl1SUdFb1lTeGlLWHQyWVhJZ1l6MWhMbkJoY21WdWRITW9JaTVvWld4d1puVnNjbUYw WlhJaUtUdDJZWElnWkQxaExuQmhjbVZ1ZENnaUxuQnNkWE1pS1M1amFHbHNaSEpsYmlnaUxu Um9aV052ZFc1MElpazdkbUZ5SUdVOVlTNXdZWEpsYm5Rb0lpNXRhVzUxY3lJcExtTm9hV3hr Y21WdUtDSXVkR2hsWTI5MWJuUWlLVHQyWVhJZ1pqMWpMbVpwYm1Rb0lpNW9iSEJmZG05MFpY TWlLVHQxYm1sMFBXTXVZMmhwYkdSeVpXNG9JaTUxYm1sMElpa3VhSFJ0YkNncE8yRnlkR2xq YkdWZmFXUTlZeTVqYUdsc1pISmxiaWdpTG5Sb2FYTnBaQ0lwTG1oMGJXd29LVHR3YkhWelpY TTlaQzVvZEcxc0tDazdiV2x1ZFhObGN6MWxMbWgwYld3b0tUdDJiM1JsY3oxbUxtaDBiV3dv S1Rza0xuQnZjM1FvSWk4L2NtRm9YMlY0ZEdWeWJtRnNYMjkxZEhCMWREMWpZbVZmYUdWc2NH WjFiRjloYW1GNElpeDdZWEowYVdOc1pWOXBaRHBoY25ScFkyeGxYMmxrTEhWd1gyUnZkMjQ2 WWl4MWJtbDBPblZ1YVhSOUxHWjFibU4wYVc5dUtHY3BlMlF1YUhSdGJDaHdZWEp6WlVsdWRD aHdiSFZ6WlhNcEsyY3VjR3gxY3lrN1pTNW9kRzFzS0hCaGNuTmxTVzUwS0cxcGJuVnpaWE1w SzJjdWJXbHVkWE1wTzJNdVptbHVaQ2dpTG5aaGJIVmxJaWt1YUhSdGJDaG5Mbk5qYjNKbEtU dG1MbWgwYld3b2NHRnljMlZKYm5Rb2RtOTBaWE1wS3pFcE8yRXVZMmhwYkdSeVpXNG9JaTVr YVhOMFpYaDBJaWt1Y21WdGIzWmxLQ2s3YVdZb1lqMDlJblZ3SWlsN1lTNXdZWEpsYm5Rb0tT NXphV0pzYVc1bmN5Z2lMbTFwYm5Weklpa3VabWx1WkNnaUxtUnBjM1JsZUhRaUtTNXlaVzF2 ZG1Vb0tYMWxiSE5sZTJFdWNHRnlaVzUwS0NrdWMybGliR2x1WjNNb0lpNXdiSFZ6SWlrdVpt bHVaQ2dpTG1ScGMzUmxlSFFpS1M1eVpXMXZkbVVvS1gxOUxDSnFjMjl1SWlsOUpDZ2lMbWhs YkhCbWRXeHdiSFZ6SWlrdVkyeHBZMnNvWm5WdVkzUnBiMjRvS1h0aEtDUW9kR2hwY3lrc0lu VndJaWs3Y21WMGRYSnVJR1poYkhObGZTazdKQ2dpTG1obGJIQm1kV3h0YVc1MWN5SXBMbU5z YVdOcktHWjFibU4wYVc5dUtDbDdZU2drS0hSb2FYTXBMQ0prYjNkdUlpazdjbVYwZFhKdUlH WmhiSE5sZlNsOUtRPT0iICkgOw0KICAgICRqcyA9IHN0cl9yZXBsYWNlKCAiLz9yYWhfZXh0 ZXJuYWxfb3V0cHV0IiwgaHUuIj9yYWhfZXh0ZXJuYWxfb3V0cHV0IiwgJGpzICkgOw0KICAg IHNhZmVfdXBzZXJ0KCAndHhwX2Zvcm0nDQogICAgICAgICAgICAgICAsICJgRm9ybWA9JyRj b2RlJw0KICAgICAgICAgICAgICAgLCAgYHR5cGVgPSdtaXNjJyINCiAgICAgICAgICAgICAg ICwgImBuYW1lYD0ncmFoX2VvX2NiZV9oZWxwZnVsX2FqYXgnIg0KICAgICAgICAgICAgICAg KSA7DQogICAgc2FmZV91cHNlcnQoICd0eHBfZm9ybScNCiAgICAgICAgICAgICAgICwgImBG b3JtYD0nJGpzJw0KICAgICAgICAgICAgICAgLCAgYHR5cGVgPSdtaXNjJyINCiAgICAgICAg ICAgICAgICwgImBuYW1lYD0ncmFoX2VvX2NiZV9oZWxwZnVsX2pzJyINCiAgICAgICAgICAg ICAgICkgOw0KDQogICAgcmV0dXJuIDsNCn0NCg0KZnVuY3Rpb24gY2JlX2hlbHBmdWxfZW5h YmxlZCgpDQp7DQogICAgQCRobHBfcHJlZnMgPSBjYmVfaGVscGZ1bF9nZXRfcHJlZnMoKSA7 DQoNCiAgICAkcnMgPSBzYWZlX3JvdygidmVyc2lvbiIsInR4cF9wbHVnaW4iLCJzdGF0dXMg PSAxIEFORCBuYW1lPSdyYWhfZXh0ZXJuYWxfb3V0cHV0JyIpIDsNCiAgICBpZiggISRycyB8 fCB2ZXJzaW9uX2NvbXBhcmUoICRyc1sndmVyc2lvbiddLCAiMS4wIiApIDwgMCApDQogICAg ew0KICAgICAgICBzYWZlX3VwZGF0ZSggJ3R4cF9wbHVnaW4nLCAic3RhdHVzID0gMCIsICJu YW1lID0gJ2NiZV9oZWxwZnVsJyIgKSA7DQogICAgICAgIHJldHVybiggIlBsdWdpbiBOT04g aW5pdGlhbGlzw6kgOiByYWhfZXh0ZXJuYWxfb3V0cHV0IHYxLjAgTUlOSU1VTSByZXF1aXMi ICkgOw0KICAgIH0NCg0KICAgIC8qIENyZWF0ZSB0YWJsZXMgKi8NCiAgICBjYmVfaGxwX2Ny ZWF0ZV90YWJsZXMoKSA7DQoNCiAgICAvKiBJZiBmaXJzdCBpbnN0YWxsLCBwb3B1bGF0ZSBk YXRhIHRhYmxlcyBmcm9tIHdsa19oZWxwZnVsIGlmIGFjdGl2ZSAqLw0KICAgIGlmKCAhIGlz c2V0KCAkaGxwX3ByZWZzWydpcGNoZWNrJ10gKQ0KICAgICAgICYmIHNhZmVfcm93KCAidmVy c2lvbiIsInR4cF9wbHVnaW4iLCJzdGF0dXMgPSAxIEFORCBuYW1lPSd3bGtfaGVscGZ1bCci ICkNCiAgICAgICAmJiBteXNxbF9udW1fcm93cyggc2FmZV9xdWVyeSggInNob3cgdGFibGVz IGxpa2UgJyV3bGslJyIgKSApDQogICAgICApDQogICAgew0KICAgICAgICAkZG1pZ3IgPSBk YXRlKCAnWS1tLWQgSDppOnMnICkgOw0KICAgICAgICAkcnMgPSBzYWZlX3Jvd3Nfc3RhcnQo ICcqJywgJ3R4cF93bGtfaGVscGZ1bCcsICdOT1QgKGBwbHVzYCA8IDEgQU5EIGBtaW51c2Ag PCAxKSBPUkRFUiBCWSBgaWRgIEFTQycgKTsNCiAgICAgICAgaWYoIGNvdW50KCAkcnMgKSAp DQogICAgICAgIHsNCiAgICAgICAgICAgIHdoaWxlKCAkYSA9IG5leHRSb3coICRycyApICkN CiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBleHRyYWN0KCAkYSApIDsNCiAgICAg ICAgICAgICAgICBzYWZlX2luc2VydCggImNiZV9oZWxwZnVsX3ZvdGVzIg0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgLCAiYHRleHRwYXR0ZXJuX2lkYD0nJHRleHRwYXR0ZXJuX2lk Jw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBgcGx1c2A9JyRwbHVzJw0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgLCBgbWludXNgPSckbWludXMnDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAsIGBpcGA9JyRpcCcNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICwgYGR2b3RlYD0nJGRtaWdyJyINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOw0K ICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgc2FmZV9xdWVyeSggIklOU0VS VCBJTlRPICIuc2FmZV9wZngoJ2NiZV9oZWxwZnVsX2NvdW50cycpLg0KICAgICAgICAgICAg ICAgICAgICAiIFNFTEVDVCBgdGV4dHBhdHRlcm5faWRgLCBzdW0oYHBsdXNgKS1zdW0oYG1p bnVzYCkgYXMgY291bnQsIHN1bShgcGx1c2ApIGFzIHBsdXNlcywgc3VtKGBtaW51c2ApIGFz IG1pbnVzZXMNCiAgICAgICAgICAgICAgICAgICAgRlJPTSAiLnNhZmVfcGZ4KCdjYmVfaGVs cGZ1bF92b3RlcycpLiIgV0hFUkUgMSBHUk9VUCBCWSBgdGV4dHBhdHRlcm5faWRgIg0KICAg ICAgICAgICAgICAgICAgKSA7DQogICAgfQ0KDQogICAgcmV0dXJuIDsNCn0NCg0KZnVuY3Rp b24gY2JlX2hlbHBmdWxfZGVsZXRlZCgpDQp7DQogICAgc2FmZV9kZWxldGUoICd0eHBfZm9y bScsICJgbmFtZWA9J3JhaF9lb19jYmVfaGVscGZ1bF9hamF4JyIgKSA7DQogICAgc2FmZV9k ZWxldGUoICd0eHBfZm9ybScsICJgbmFtZWA9J3JhaF9lb19jYmVfaGVscGZ1bF9qcyciICkg Ow0KICAgIHNhZmVfcXVlcnkoICdEUk9QIFRBQkxFIElGIEVYSVNUUyAnIC4gc2FmZV9wZngo J2NiZV9oZWxwZnVsX3ZvdGVzJykgICk7DQogICAgc2FmZV9xdWVyeSggJ0RST1AgVEFCTEUg SUYgRVhJU1RTICcgLiBzYWZlX3BmeCgnY2JlX2hlbHBmdWxfY291bnRzJykgKTsNCiAgICBz YWZlX3F1ZXJ5KCAnRFJPUCBUQUJMRSBJRiBFWElTVFMgJyAuIHNhZmVfcGZ4KCdjYmVfaGVs cGZ1bF9wcmVmcycpICApOw0KICAgIHNhZmVfZGVsZXRlKCAndHhwX3ByZWZzJywgIm5hbWU9 J2NiZV9oZWxwZnVsX3ZlcnNpb24nIiApOw0KfQ0KDQpmdW5jdGlvbiBjYmVfaGVscGZ1bF9s aWZlY3ljbGUoICRldmVudCA9ICcnLCAkc3RlcCA9ICcnICkNCnsNCiAgICAkZnVuYyA9ICJj YmVfaGVscGZ1bF8kc3RlcCIgOw0KICAgIGlmKCBpc19jYWxsYWJsZSggJGZ1bmMgKSApDQog ICAgICAgIHJldHVybiggJGZ1bmMoKSApIDsNCn0NCg0KLyogPT09PT09PT09PT09PT09PT09 PT0gQ2xpZW50IHNpZGUgPT09PT09PT09PT09PT09PT09PT0gKi8NCg0KLyoqDQogKiogVXRp bGl0aWVzDQogKiovDQoNCmZ1bmN0aW9uIF9jYmVfaGVscGZ1bF9jb21wdXRlc2NvcmUoICRw bHVzZXMsICRtaW51c2VzICkNCnsNCiAgICBnbG9iYWwgJGhscF9wcmVmcyA7DQoNCiAgICAv KiBBVFRFTlRJT04gcydpbCB5IGEgZHUgY2hhbmdlbWVudCBpY2k6IGxlIHNjcmlwdCBhamF4 IGRvaXQgYXVzc2kgw6p0cmUgcmV2dSBkZSBsYSBtw6ptZSBmYcOnb24gKi8NCiAgICBpZigg KCR1bml0PSRobHBfcHJlZnNbJ2ZpbmFscmF0ZSddKSA9PT0gJ3NpbXBsZScgKQ0KICAgICAg ICAkc2NvcmUgPSAkcGx1c2VzIC0gJG1pbnVzZXMgOw0KICAgIGVsc2UNCiAgICB7DQogICAg ICAgICRzY29yZSA9ICggKCR2b3Rlcz0kcGx1c2VzKyRtaW51c2VzKSA+IDAgKSA/ICRwbHVz ZXMvJHZvdGVzIDogMCA7DQogICAgICAgICRzY29yZSA9ICgkdW5pdCA9PT0gJ3JhdGlvJykg PyBzcHJpbnRmKCAiJTQuMmYiICAgLCByb3VuZCggJHNjb3JlLCAyICkgKQ0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc3ByaW50ZiggIiU1LjJmICUlIiwgcm91 bmQoIDEwMC4wKiRzY29yZSwgMiApICkgOw0KICAgIH0NCg0KICAgIHJldHVybiggJHNjb3Jl ICkgOw0KfQ0KDQpmdW5jdGlvbiBfY2JlX2hlbHBmdWxfZ2V0cmF0ZXMoICRhcnRfaWQgKQ0K ew0KICAgIGdsb2JhbCAkaGxwX3ByZWZzIDsNCg0KICAgICRjb3VudCA9ICRwbHVzZXMgPSAk bWludXNlcyA9ICIwIiA7DQogICAgJGlwICAgID0gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ10g Ow0KDQogICAgJGNhbnZvdGUgPSBzYWZlX2NvdW50KCAnY2JlX2hlbHBmdWxfdm90ZXMnLCAi dGV4dHBhdHRlcm5faWQ9JyRhcnRfaWQnIEFORCBpcD0nJGlwJyBBTkQgQUREREFURShkdm90 ZSwgSU5URVJWQUwgeyRobHBfcHJlZnNbJ2lwY2hlY2snXX0gSE9VUikgPiBOT1coKSIgKSA9 PSAwIDsNCg0KICAgIGlmKCBjb3VudCggJHNjb3JlcyA9IHNhZmVfcm93KCAnY291bnQsIHBs dXNlcywgbWludXNlcycNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgJ2Ni ZV9oZWxwZnVsX2NvdW50cycsICJ0ZXh0cGF0dGVybl9pZD0nJGFydF9pZCciICkgKSApDQog ICAgICAgIGV4dHJhY3QoICRzY29yZXMgKTsNCg0KICAgICRzY29yZSA9IF9jYmVfaGVscGZ1 bF9jb21wdXRlc2NvcmUoICRwbHVzZXMsICRtaW51c2VzICkgOw0KDQogICAgcmV0dXJuKCBj b21wYWN0KCAiY2Fudm90ZSIsICJjb3VudCIsICJwbHVzZXMiLCAibWludXNlcyIsICJzY29y ZSIgKSApIDsNCn0NCg0KZnVuY3Rpb24gX2NiZV9oZWxwZnVsX3llc25vKCAkYXR0cywgJHN3 aXRjaCApDQp7DQogICAgZ2xvYmFsICRobHBfcHJlZnMsICRwbHVzZXMsICRtaW51c2VzLCAk Y2Fudm90ZSwgJHNob3dvbmx5LCAkYklzbGlzdCA7DQoNCiAgICAkdm90YWJsZSA9ICggISRz aG93b25seSAmJiBpc19ib29sKCRzd2l0Y2gpICkgPyAkY2Fudm90ZSA6IGZhbHNlIDsNCg0K ICAgICRqc2NsYXNzICAgICA9ICR2b3RhYmxlID8gKCAkc3dpdGNoID8gInBsdXMiICAgICAg ICA6ICJtaW51cyIgKSA6ICIiIDsNCiAgICAkanN2b3RlY2xhc3MgPSAkdm90YWJsZSA/ICgg JHN3aXRjaCA/ICJoZWxwZnVscGx1cyIgOiAiaGVscGZ1bG1pbnVzIiApIDogIiIgOw0KICAg ICRqc2NvdW50ICAgICA9ICR2b3RhYmxlID8gInRoZWNvdW50IiA6ICIiIDsNCiAgICAkanN0 ZXh0ICAgICAgPSAkdm90YWJsZSA/ICJkaXN0ZXh0IiA6ICIiIDsNCiAgICBleHRyYWN0KCBs QXR0cyggYXJyYXkgKCAnd3JhcHRhZycgICAgICAgPT4gJycNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgLCAnY2xhc3MnICAgICAgICAgPT4gJycNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgLCAndm90ZWNsYXNzJyAgICAgPT4gJycNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgLCAnc2hvd29ubHknICAgICAgPT4gaXNzZXQoICRzaG93b25seSApID8gJHNob3dvbmx5 IDogJzAnDQogICAgICAgICAgICAgICAgICAgICAgICAgICwgJ2xhYmVsc2hvd29ubHknID0+ ICcnDQogICAgICAgICAgICAgICAgICAgICAgICAgICkNCiAgICAgICAgICAgICAgICAgICwg JGF0dHMNCiAgICAgICAgICAgICAgICAgICkNCiAgICAgICAgICAgKSA7DQoNCiAgICAkb3V0 ID0gYXJyYXkoKSA7DQoNCiAgICBpZiggJHZvdGFibGUgKQ0KICAgIHsgICAvKiBjbGlja2Fi bGUgeWVzL25vICovDQogICAgICAgICR2b3RlY2xhc3MgPSAkdm90ZWNsYXNzICE9ICcnID8g IiRqc3ZvdGVjbGFzcyAkdm90ZWNsYXNzIiA6ICRqc3ZvdGVjbGFzcyA7DQogICAgICAgICRz d2l0Y2ggPSAkc3dpdGNoID8gJ3llcycgOiAnbm8nIDsNCiAgICAgICAgJG91dFtdID0gZG9X cmFwKCBhcnJheSggJHN3aXRjaD09J3llcycgPyAkcGx1c2VzIDogJG1pbnVzZXMgKSwgInNw YW4iLCAnJywgJGpzY291bnQgKSA7DQogICAgICAgICRvdXRbXSA9IGhyZWYoIGRvVGFnKCAk aGxwX3ByZWZzWyRzd2l0Y2hdLCAic3BhbiIsICRqc3RleHQgKSwgJyMnDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgLCAnIHRpdGxlPSInLiRobHBfcHJlZnNbJHN3aXRjaC4ndG9v bHRpcCddLiciIGNsYXNzPSInLiR2b3RlY2xhc3MuJyInICkgOw0KICAgIH0NCiAgICBlbHNl aWYoICEgaXNfYm9vbCggJHN3aXRjaCApICkNCiAgICB7ICAgLyogdG90YWxfdm90ZXMgKi8N CiAgICAgICAgJG91dFtdID0gZG9XcmFwKCBhcnJheSggJHBsdXNlcyArICRtaW51c2VzICks ICJzcGFuIiwgJycsICJobHBfJHN3aXRjaCIgKSA7DQogICAgICAgIGlmKCAkc2hvd29ubHkg KQ0KICAgICAgICAgICAgJG91dFtdID0gZG9UYWcoICgkbGFiZWxzaG93b25seSA/ICRsYWJl bHNob3dvbmx5IDogJGhscF9wcmVmc1skc3dpdGNoXSksICdzcGFuJyApIDsNCiAgICAgICAg ZWxzZQ0KICAgICAgICAgICAgJG91dFtdID0gZG9UYWcoICgkaGxwX3ByZWZzWyRzd2l0Y2hd ID8gJGhscF9wcmVmc1skc3dpdGNoXSA6ICRsYWJlbHNob3dvbmx5KSwgJ3NwYW4nICkgOw0K ICAgIH0NCiAgICBlbHNlDQogICAgeyAgIC8qIG5vbi1jbGlja2FibGUgeWVzL25vICovDQog ICAgICAgICRvdXRbXSA9ICRzd2l0Y2ggPyAkcGx1c2VzIDogJG1pbnVzZXMgOw0KICAgICAg ICBpZiggJHNob3dvbmx5ICkNCiAgICAgICAgICAgICRvdXRbXSA9IGRvVGFnKCAoJGxhYmVs c2hvd29ubHkgPyAkbGFiZWxzaG93b25seSA6ICRobHBfcHJlZnNbJHN3aXRjaF0pLCAic3Bh biIgKSA7DQogICAgfQ0KICAgIC8qID09IE5vdGU6ICRsYWJlbHNob3dvbmx5ICYgJGhscF9w cmVmc1skc3dpdGNoXSBhcmUgYSBmYWxsYmFjayBmb3IgZWFjaCBvdGhlciA9PSAqLw0KDQog ICAgcmV0dXJuKCBkb1dyYXAoICRvdXQsICR3cmFwdGFnID8gJHdyYXB0YWcgOiAoIChpc3Nl dCggJGJJc2xpc3QgKSAmJiAkYklzbGlzdCkgPyAnbGknIDogJ3NwYW4nICksICcgJw0KICAg ICAgICAgICAgICAgICAgLCAkY2xhc3MgIT0gJycgPyAiJGpzY2xhc3MgJGNsYXNzIiA6ICRq c2NsYXNzDQogICAgICAgICAgICAgICAgICApICkgOw0KfQ0KDQpmdW5jdGlvbiBfY2JlX2hl bHBmdWxfZm9vdCggJGh0bWwgKQ0KeyAgIC8qIFB1dCBzcGVjaWZpYyBqYXZhc2NyaXB0IGp1 c3QgYmVmb3JlIDwvYm9keT4gKi8NCiAgICAkanMgPSAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph dmFzY3JpcHQiIHNyYz0iJy5odS4nP3JhaF9leHRlcm5hbF9vdXRwdXQ9Y2JlX2hlbHBmdWxf anMiPjwvc2NyaXB0PicgOw0KICAgICRwYXR0ZXJuID0gJy8oPz0oPFwvYm9keT4pKS9zaSc7 DQogICAgJGh0bWwgPSBwcmVnX3JlcGxhY2UoICRwYXR0ZXJuLCAkanMsICRodG1sICk7DQog ICAgcmV0dXJuICRodG1sOw0KfQ0KDQovKioNCiAqKiBBdmFpbGFibGUgdGFncw0KICoqLw0K DQpmdW5jdGlvbiBjYmVfaGVscGZ1bCggJGF0dHMsICR0aGluZyA9ICcnICkNCnsgICAvKiBW b3RlIHdpZGdldCAqLw0KICAgIHN0YXRpYyAkYWpheF9tb2R1bGUgPSBmYWxzZSA7DQogICAg YXNzZXJ0X2FydGljbGUoKSA7DQogICAgaWYoICEgJGFqYXhfbW9kdWxlICkNCiAgICB7DQov LyAgICAgICAgb2Jfc3RhcnQoIGFycmF5KCAmJHRoaXMsICdfY2JlX2hlbHBmdWxfZm9vdCcg KSApIDsNCiAgICAgICAgb2Jfc3RhcnQoICdfY2JlX2hlbHBmdWxfZm9vdCcgKSA7DQogICAg ICAgICRhamF4X21vZHVsZSA9IHRydWUgOw0KICAgIH0NCiAgICBnbG9iYWwgJHRoaXNhcnRp Y2xlIDsNCiAgICAkY2JlX2hscF9nbG9iYWxzID0gYXJyYXkoICdobHBfcHJlZnMnLCAnc2Nv cmUnLCAncGx1c2VzJywgJ21pbnVzZXMnLCAnY2Fudm90ZScsICdzaG93b25seScsICdiSXNs aXN0JyApIDsNCiAgICBmb3JlYWNoKCAkY2JlX2hscF9nbG9iYWxzIGFzICRjYmVfaGxwX2ds b2JhbCApDQogICAgICAgIGdsb2JhbCAkJGNiZV9obHBfZ2xvYmFsIDsNCg0KDQogICAgJGpz Y2xhc3MgPSAiaGVscGZ1bHJhdGVyIiA7DQogICAgJGpzdW5pdCAgPSAidW5pdCIgOw0KICAg ICRqc3RoaWQgID0gInRoaXNpZCIgOw0KICAgICRobHBfcHJlZnMgPSBjYmVfaGVscGZ1bF9n ZXRfcHJlZnMoKSA7DQoNCiAgICBleHRyYWN0KCBsQXR0cyggYXJyYXkgKCAnbGFiZWwnICAg ICAgPT4gJGhscF9wcmVmc1snbGFiZWwnXQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAs ICdsYWJlbHRhZycgICA9PiAnaDInDQogICAgICAgICAgICAgICAgICAgICAgICAgICwgJ2xh YmVsY2xhc3MnID0+ICcnDQogICAgICAgICAgICAgICAgICAgICAgICAgICwgJ3dyYXB0YWcn ICAgID0+ICdkaXYnDQogICAgICAgICAgICAgICAgICAgICAgICAgICwgJ2NsYXNzJyAgICAg ID0+ICcnDQogICAgICAgICAgICAgICAgICAgICAgICAgICwgJ3Nob3dvbmx5JyAgID0+ICcw Jw0KICAgICAgICAgICAgICAgICAgICAgICAgICAsICdmb3JtJyAgICAgICA9PiAnJw0KICAg ICAgICAgICAgICAgICAgICAgICAgICApDQogICAgICAgICAgICAgICAgICAsICRhdHRzDQog ICAgICAgICAgICAgICAgICApDQogICAgICAgICAgICkgOw0KDQogICAgJGFydF9pZCA9ICR0 aGlzYXJ0aWNsZVsgJ3RoaXNpZCcgXSA7DQoNCiAgICBleHRyYWN0KCBfY2JlX2hlbHBmdWxf Z2V0cmF0ZXMoICRhcnRfaWQgKSApIDsNCiAgICAkY2xhc3MgPSAkY2xhc3MgIT0gJycgPyAi JGpzY2xhc3MgJGNsYXNzIiA6ICRqc2NsYXNzIDsNCg0KICAgICRwYXJzZWQgPSBhcnJheSgp IDsNCg0KICAgIGlmIChlbXB0eSgkZm9ybSkgJiYgZW1wdHkoJHRoaW5nKSkNCiAgICB7DQog ICAgICAgICRwYXJzZWRbXSA9IGRvVGFnKCAkYXJ0X2lkLCAgICAgICAgICAgICAgICAgJ2xp JywgJGpzdGhpZCwgJyBzdHlsZT0iZGlzcGxheTpub25lOyInICkgOw0KICAgICAgICAkcGFy c2VkW10gPSBkb1RhZyggJGhscF9wcmVmc1snZmluYWxyYXRlJ10sICdsaScsICRqc3VuaXQs ICcgc3R5bGU9ImRpc3BsYXk6bm9uZTsiJyApIDsNCiAgICAgICAgJHBhcnNlZFtdID0gY2Jl X2hlbHBmdWxfc2NvcmUoIGFycmF5KCAnd3JhcHRhZyc9PidsaScgKSApIDsNCiAgICAgICAg JHBhcnNlZFtdID0gY2JlX2hlbHBmdWxfbGFiZWwoIGFycmF5KCAnY2xhc3MnPT4naGVscGZ1 bCcsICd3cmFwdGFnJz0+J2xpJyApICkgOw0KICAgICAgICAkcGFyc2VkW10gPSBjYmVfaGVs cGZ1bF95ZXMoIGFycmF5KCAnd3JhcHRhZyc9PidsaScsICdzaG93b25seSc9PiRzaG93b25s eSApICkgOw0KICAgICAgICAkcGFyc2VkW10gPSBjYmVfaGVscGZ1bF9ubyAoIGFycmF5KCAn d3JhcHRhZyc9PidsaScsICdzaG93b25seSc9PiRzaG93b25seSApICkgOw0KICAgICAgICAk cGFyc2VkW10gPSBjYmVfaGVscGZ1bF90b3RhbF92b3RlcyggYXJyYXkoICd3cmFwdGFnJz0+ J2xpJyApICkgOw0KICAgICAgICAkb3V0ID0gZG9XcmFwKCAkcGFyc2VkLCAndWwnLCAnJywg JGNsYXNzICkgOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICAkYklzbGlzdCAg PSAoJHdyYXB0YWcgPT0gJ3VsJyB8fCAkd3JhcHRhZyA9PSAnb2wnKSA7DQogICAgICAgICRw YXJzZWRbXSA9IGRvVGFnKCAkYXJ0X2lkLCAgICAgICAgICAgICAgICAgJGJJc2xpc3QgPyAn bGknIDogJ3NwYW4nLCAkanN0aGlkLCAnIHN0eWxlPSJkaXNwbGF5Om5vbmU7IicgKSA7DQog ICAgICAgICRwYXJzZWRbXSA9IGRvVGFnKCAkaGxwX3ByZWZzWydmaW5hbHJhdGUnXSwgJGJJ c2xpc3QgPyAnbGknIDogJ3NwYW4nLCAkanN1bml0LCAnIHN0eWxlPSJkaXNwbGF5Om5vbmU7 IicgKSA7DQogICAgICAgICRwYXJzZWRbXSA9IHBhcnNlKCAkdGhpbmcgPyAkdGhpbmcgOiAk Zm9ybSApIDsNCiAgICAgICAgJG91dCA9ICgkbGFiZWwgPyBkb1RhZyggJGxhYmVsLCAkbGFi ZWx0YWcsICRsYWJlbGNsYXNzICkgOiAnJykNCiAgICAgICAgICAgICAuIGRvV3JhcCggJHBh cnNlZCwgJHdyYXB0YWcgPyAkd3JhcHRhZyA6ICdkaXYnLCAnJywgJGNsYXNzICkgOw0KICAg IH0NCg0KICAgIGZvcmVhY2goICRjYmVfaGxwX2dsb2JhbHMgYXMgJGNiZV9obHBfZ2xvYmFs ICkgew0KICAgICAgICB1bnNldCggJCRjYmVfaGxwX2dsb2JhbCApIDsNCiAgICAgICAgdW5z ZXQoICRHTE9CQUxTWyRjYmVfaGxwX2dsb2JhbF0gKSA7DQogICAgfQ0KDQogICAgcmV0dXJu KCAkb3V0ICkgOw0KfQ0KDQpmdW5jdGlvbiBjYmVfaGVscGZ1bF9sYWJlbCggJGF0dHMgKQ0K ew0KICAgIGdsb2JhbCAkaGxwX3ByZWZzIDsNCiAgICBleHRyYWN0KCBsQXR0cyggYXJyYXkg KCAnd3JhcHRhZycgICAgPT4gJycNCiAgICAgICAgICAgICAgICAgICAgICAgICAgLCAnY2xh c3MnICAgICAgPT4gJycNCiAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KICAgICAgICAg ICAgICAgICAgLCAkYXR0cw0KICAgICAgICAgICAgICAgICAgKQ0KICAgICAgICAgICApIDsN Cg0KICAgIGlmKCAkaGxwX3ByZWZzID09PSBOVUxMICkNCiAgICAgICAgJGhscF9wcmVmcyA9 IGNiZV9oZWxwZnVsX2dldF9wcmVmcygpIDsNCiAgICByZXR1cm4oIGRvVGFnKCAkaGxwX3By ZWZzWydsYWJlbCddLCAkd3JhcHRhZywgJGNsYXNzICkgKSA7DQp9DQoNCmZ1bmN0aW9uIGNi ZV9oZWxwZnVsX3Njb3JlKCAkYXR0cyApDQp7DQogICAgZ2xvYmFsICRobHBfcHJlZnMsICRz Y29yZSwgJGNhbnZvdGUsICRzaG93b25seSwgJGJJc2xpc3QgOw0KDQogICAgaWYoICRzY29y ZSA9PT0gTlVMTCApDQogICAgew0KICAgICAgICBhc3NlcnRfYXJ0aWNsZSgpIDsNCiAgICAg ICAgb2Jfc3RhcnQoIGFycmF5KCAmJHRoaXMsICdfY2JlX2hlbHBmdWxfZm9vdCcgKSApIDsN CiAgICAgICAgZ2xvYmFsICR0aGlzYXJ0aWNsZSA7DQogICAgICAgICRobHBfcHJlZnMgPSBj YmVfaGVscGZ1bF9nZXRfcHJlZnMoKSA7DQogICAgICAgIGV4dHJhY3QoIF9jYmVfaGVscGZ1 bF9nZXRyYXRlcyggJHRoaXNhcnRpY2xlWyAndGhpc2lkJyBdICkgKSA7DQogICAgICAgICR0 ZW1wX3Njb3JlID0gJHNjb3JlIDsNCiAgICAgICAgJHNjb3JlID0gTlVMTCA7DQogICAgfQ0K DQogICAgJGpzY2xhc3MgPSAkY2Fudm90ZSA/ICJ2YWx1ZSIgOiAiIiA7DQogICAgZXh0cmFj dCggbEF0dHMoIGFycmF5ICggJ3dyYXB0YWcnICAgICAgID0+ICcnDQogICAgICAgICAgICAg ICAgICAgICAgICAgICwgJ2NsYXNzJyAgICAgICAgID0+ICcnDQogICAgICAgICAgICAgICAg ICAgICAgICAgICwgJ2xhYmVsc2hvd29ubHknID0+ICcnDQogICAgICAgICAgICAgICAgICAg ICAgICAgICkNCiAgICAgICAgICAgICAgICAgICwgJGF0dHMNCiAgICAgICAgICAgICAgICAg ICkNCiAgICAgICAgICAgKSA7DQoNCiAgICAkb3V0ID0gYXJyYXkoKSA7DQoNCiAgICBpZigg JHNob3dvbmx5ICkNCiAgICAgICAgJG91dFtdID0gZG9UYWcoICgkbGFiZWxzaG93b25seSA/ ICRsYWJlbHNob3dvbmx5IDogJGhscF9wcmVmc1snc2NvcmUnXSksICdzcGFuJyApIDsNCiAg ICBlbHNlDQogICAgICAgICRvdXRbXSA9IGRvVGFnKCAoJGhscF9wcmVmc1snc2NvcmUnXSA/ ICRobHBfcHJlZnNbJ3Njb3JlJ10gOiAkbGFiZWxzaG93b25seSksICdzcGFuJyApIDsNCiAg ICAvKiA9PSBOb3RlOiAkbGFiZWxzaG93b25seSAmICRobHBfcHJlZnNbJ3Njb3JlJ10gYXJl IGEgZmFsbGJhY2sgZm9yIGVhY2ggb3RoZXIgPT0gKi8NCg0KICAgICRvdXRbXSA9IGRvV3Jh cCggYXJyYXkoICRzY29yZSAhPT0gTlVMTCA/ICRzY29yZSA6ICR0ZW1wX3Njb3JlICkNCiAg ICAgICAgICAgICAgICAgICAsICdzcGFuJywgJycNCiAgICAgICAgICAgICAgICAgICAsICRq c2NsYXNzLCAnJw0KICAgICAgICAgICAgICAgICAgICwgIiB0aXRsZT1cInskaGxwX3ByZWZz WydzY29yZSddfVwiIg0KICAgICAgICAgICAgICAgICAgICkgOw0KDQogICAgcmV0dXJuKCBk b1dyYXAoICRvdXQsIChpc3NldCggJGJJc2xpc3QgKSAmJiAkYklzbGlzdCkgPyAnbGknIDog JHdyYXB0YWcsICcnLCAkY2xhc3MgKSApIDsNCn0NCg0KZnVuY3Rpb24gY2JlX2hlbHBmdWxf eWVzKCAkYXR0cyApDQp7DQogICAgcmV0dXJuKCBfY2JlX2hlbHBmdWxfeWVzbm8oICRhdHRz LCB0cnVlICkgKSA7DQp9DQpmdW5jdGlvbiBjYmVfaGVscGZ1bF9ubyggJGF0dHMgKQ0Kew0K ICAgIHJldHVybiggX2NiZV9oZWxwZnVsX3llc25vKCAkYXR0cywgZmFsc2UgKSApIDsNCn0N CmZ1bmN0aW9uIGNiZV9oZWxwZnVsX3RvdGFsX3ZvdGVzKCAkYXR0cyApDQp7DQogICAgcmV0 dXJuKCBfY2JlX2hlbHBmdWxfeWVzbm8oICRhdHRzLCAidm90ZXMiICkgKSA7DQp9DQoNCi8q IFRvcHMgYW5kIGZsb3BzICovDQpmdW5jdGlvbiBjYmVfaGVscGZ1bF9saXN0KCAkYXR0cywg JHRoaW5nID0gJycgKQ0Kew0KICAgIGdsb2JhbCAkdGhpc2FydGljbGUsICRwcmVmcywgJGhs cF9wcmVmcywgJHNjb3JlLCAkcGx1c2VzLCAkbWludXNlcywgJGNhbnZvdGUsICRzaG93b25s eSwgJGJJc2xpc3QgOw0KICAgIGV4dHJhY3QoIGxBdHRzKCBhcnJheSAoICdsYWJlbCcgICAg ICA9PiAnJw0KICAgICAgICAgICAgICAgICAgICAgICAgICAsICdsYWJlbHRhZycgICA9PiAn aDInDQogICAgICAgICAgICAgICAgICAgICAgICAgICwgJ2xhYmVsY2xhc3MnID0+ICcnDQog ICAgICAgICAgICAgICAgICAgICAgICAgICwgJ3dyYXB0YWcnICAgID0+ICdvbCcNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgLCAnYnJlYWsnICAgICAgPT4gJ2xpJw0KICAgICAgICAg ICAgICAgICAgICAgICAgICAsICdjbGFzcycgICAgICA9PiBfX0ZVTkNUSU9OX18NCiAgICAg ICAgICAgICAgICAgICAgICAgICAgLCAnYnJlYWtjbGFzcycgPT4gJycNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgLCAnZm9ybScgICAgICAgPT4gJycNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgLCAnd2hpY2gnICAgICAgPT4gJ3RvcCcNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgLCAnb3JkZXInICAgICAgPT4gJ2Rlc2MnDQogICAgICAgICAgICAgICAgICAgICAg ICAgICwgJ2xpbWl0JyAgICAgID0+ICc1Jw0KICAgICAgICAgICAgICAgICAgICAgICAgICAs ICdwZXJpb2QnICAgICA9PiAnJw0KICAgICAgICAgICAgICAgICAgICAgICAgICApDQogICAg ICAgICAgICAgICAgICAsICRhdHRzDQogICAgICAgICAgICAgICAgICApDQogICAgICAgICAg ICkgOw0KDQogICAgJGhscF9wcmVmcyA9IGNiZV9oZWxwZnVsX2dldF9wcmVmcygpIDsNCiAg ICAkdGltZWxpbWl0ID0gJycgOw0KICAgICRzb3J0b3JkZXIgPSAkd2hpY2g9PSd0b3AnID8g J2Rlc2MnIDogJ2FzYycgOw0KICAgICRzb3J0d2hhdCAgPSAkaGxwX3ByZWZzWydmaW5hbHJh dGUnXSA9PT0gJ3NpbXBsZScNCiAgICAgICAgICAgICAgID8gImhlbHBmdWwuY291bnQgJHNv cnRvcmRlciwgaGVscGZ1bC5wbHVzZXMgJHNvcnRvcmRlciINCiAgICAgICAgICAgICAgIDog InBjdCAkc29ydG9yZGVyLCBoZWxwZnVsLnBsdXNlcyAkc29ydG9yZGVyIiA7DQoNCiAgICBp ZiggJHBlcmlvZCAhPT0gJycgKQ0KICAgIHsNCiAgICAgICAgJHBlcmlvZCA9IHN0cl9yZXBs YWNlKCBhcnJheSggInRvZGF5IiwgInllc3RlcmRheSIgKSwgYXJyYXkoICJ0aGlzIGRheSIs ICJsYXN0IGRheSIpLCAkcGVyaW9kICkgOw0KICAgICAgICBwcmVnX21hdGNoKCAnLyg/UDx3 aGVuPlx3KykgKD9QPHdoYXQ+XHcrKS8nLCAkcGVyaW9kLCAkbWF0Y2hlcyApIDsNCiAgICAg ICAgJGFXaGF0ID0gYXJyYXkoICd5ZWFyJyAgPT4gIjEvMSINCiAgICAgICAgICAgICAgICAg ICAgICAsICdtb250aCcgPT4gIm1pZG5pZ2h0IGZpcnN0IGRheSBvZiINCiAgICAgICAgICAg ICAgICAgICAgICAsICd3ZWVrJyAgPT4gIm1pZG5pZ2h0Ig0KICAgICAgICAgICAgICAgICAg ICAgICwgJ2RheScgICA9PiAibWlkbmlnaHQiDQogICAgICAgICAgICAgICAgICAgICAgKSA7 DQogICAgICAgICRhV2hlbiA9IGFycmF5KCAndGhpcycgPT4gYXJyYXkoICdiZWcnID0+ICJ0 aGlzIiwgJ2VuZCcgPT4gIm5leHQiICkNCiAgICAgICAgICAgICAgICAgICAgICAsICdsYXN0 JyA9PiBhcnJheSggJ2JlZycgPT4gImxhc3QiLCAnZW5kJyA9PiAidGhpcyIgKQ0KICAgICAg ICAgICAgICAgICAgICAgICkgOw0KICAgICAgICBpZiggaXNzZXQoICRhV2hhdFsgJG1hdGNo ZXNbICd3aGF0JyBdIF0gKSAmJiBpc3NldCggJGFXaGVuWyAkbWF0Y2hlc1sgJ3doZW4nIF0g XSApICkNCiAgICAgICAgew0KICAgICAgICAgICAgJHRpbWVmcm9tID0gZGF0ZSggIlktbS1k IEg6aTpzIiwgc3RydG90aW1lKCAieyRhV2hhdFsgJG1hdGNoZXNbICd3aGF0JyBdIF19IHsk YVdoZW5bICRtYXRjaGVzWyAnd2hlbicgXSBdWyAnYmVnJyBdfSB7JG1hdGNoZXNbICd3aGF0 JyBdfSIgKSApIDsNCiAgICAgICAgICAgICR0aW1ldG8gPSBkYXRlKCAiWS1tLWQgSDppOnMi LCBzdHJ0b3RpbWUoICItMSBzZWNvbmQgeyRhV2hhdFsgJG1hdGNoZXNbICd3aGF0JyBdIF19 IHskYVdoZW5bICRtYXRjaGVzWyAnd2hlbicgXSBdWyAnZW5kJyBdfSB7JG1hdGNoZXNbICd3 aGF0JyBdfSIgKSApIDsNCiAgICAgICAgICAgICR0aW1lbGltaXQgPSAiIFdIRVJFIGhlbHBm dWwuZHZvdGUgQkVUV0VFTiAnJHRpbWVmcm9tJyBBTkQgJyR0aW1ldG8nIiA7DQogICAgICAg ICAgICAkc3FsUm93cyA9ICdTRUxFQ1QgKiwgdW5peF90aW1lc3RhbXAoUG9zdGVkKSBhcyBw b3N0ZWQsIHVuaXhfdGltZXN0YW1wKExhc3RNb2QpIGFzIHVMYXN0TW9kLCB1bml4X3RpbWVz dGFtcChFeHBpcmVzKSBhcyB1RXhwaXJlcywgc3VtKGhlbHBmdWwucGx1cykgQVMgcGx1c2Vz LCBzdW0oaGVscGZ1bC5taW51cykgQVMgbWludXNlcywgc3VtKGhlbHBmdWwucGx1cyktc3Vt KGhlbHBmdWwubWludXMpIEFTIGNvdW50LCBzdW0oaGVscGZ1bC5wbHVzKS8oc3VtKGhlbHBm dWwucGx1cykrc3VtKGhlbHBmdWwubWludXMpKSBBUyBwY3QgRlJPTSAnLnNhZmVfcGZ4KCd0 ZXh0cGF0dGVybicpLicgQVMgdHhwIEpPSU4gJy5zYWZlX3BmeCgnY2JlX2hlbHBmdWxfdm90 ZXMnKS4nIEFTIGhlbHBmdWwgT04gdHhwLklEPWhlbHBmdWwudGV4dHBhdHRlcm5faWQnLiR0 aW1lbGltaXQuJyBHUk9VUCBCWSBoZWxwZnVsLnRleHRwYXR0ZXJuX2lkIE9SREVSIEJZICcu c3RyX3JlcGxhY2UoImhlbHBmdWwuIiwgIiIsICRzb3J0d2hhdCkuJyBMSU1JVCAwLCAnLmlu dHZhbCgkbGltaXQpIDsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgICAgICB0 cmlnZ2VyX2Vycm9yKCAiQmFkIHBlcmlvZCBmb3JtYXQiICkgOw0KICAgIH0NCiAgICBlbHNl DQogICAgICAgICRzcWxSb3dzID0gJ1NFTEVDVCAqLCB1bml4X3RpbWVzdGFtcChQb3N0ZWQp IGFzIHBvc3RlZCwgdW5peF90aW1lc3RhbXAoTGFzdE1vZCkgYXMgdUxhc3RNb2QsIHVuaXhf dGltZXN0YW1wKEV4cGlyZXMpIGFzIHVFeHBpcmVzLCBoZWxwZnVsLnBsdXNlcy8oaGVscGZ1 bC5wbHVzZXMraGVscGZ1bC5taW51c2VzKSBBUyBwY3QgRlJPTSAnLnNhZmVfcGZ4KCd0ZXh0 cGF0dGVybicpLicgQVMgdHhwIEpPSU4gJy5zYWZlX3BmeCgnY2JlX2hlbHBmdWxfY291bnRz JykuJyBBUyBoZWxwZnVsIE9OIHR4cC5JRD1oZWxwZnVsLnRleHRwYXR0ZXJuX2lkIE9SREVS IEJZICcuJHNvcnR3aGF0LicgTElNSVQgMCwgJy5pbnR2YWwoJGxpbWl0KSA7DQoNCiAgICAk cnMgPSBpc3NldCggJHNxbFJvd3MgKSA/IGdldFJvd3MoICRzcWxSb3dzICkgOiBmYWxzZSA7 DQogICAgaWYoICRycyA9PT0gZmFsc2UgfHwgIWNvdW50KCAkcnMgKSApDQogICAgICAgIHJl dHVybiA7DQoNCiAgICBpZiggJHNvcnRvcmRlciAhPSAkb3JkZXIgKQ0KICAgICAgICAkcnMg PSBhcnJheV9yZXZlcnNlKCAkcnMgKSA7DQoNCiAgICAkb3V0ID0gYXJyYXkoKSA7DQogICAg JG9sZF9hcnRpY2xlICA9ICR0aGlzYXJ0aWNsZSA7DQogICAgJG9sZF9zY29yZSAgICA9ICRz Y29yZSA7DQogICAgJG9sZF9wbHVzZXMgICA9ICRwbHVzZXMgOw0KICAgICRvbGRfbWludXNl cyAgPSAkbWludXNlcyA7DQogICAgJG9sZF9jYW52b3RlICA9ICRjYW52b3RlIDsNCiAgICAk b2xkX3Nob3dvbmx5ID0gJHNob3dvbmx5IDsNCg0KICAgICRjYW52b3RlICA9IGZhbHNlIDsN CiAgICAkc2hvd29ubHkgPSB0cnVlICA7DQogICAgDQogICAgZm9yZWFjaCggJHJzIGFzICRh ICkNCiAgICB7DQogICAgICAgICRhWydUaXRsZSddID0gKCRwcmVmc1sndGl0bGVfbm9fd2lk b3cnXSkgPyBub1dpZG93KGVzY2FwZV90aXRsZSgkYVsnVGl0bGUnXSkpDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlc2NhcGVfdGl0bGUo JGFbJ1RpdGxlJ10pOw0KICAgICAgICAkYVsndVBvc3RlZCddID0gJGFbJ3Bvc3RlZCddIDsN Cg0KICAgICAgICBpZiAoZW1wdHkoJGZvcm0pICYmIGVtcHR5KCR0aGluZykpDQogICAgICAg IHsNCiAgICAgICAgICAgICRvdXRbXSA9IGhyZWYoJGFbJ1RpdGxlJ10sIHBlcm1saW5rdXJs KCRhKSk7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAg ICBwb3B1bGF0ZUFydGljbGVEYXRhKCRhKTsNCiAgICAgICAgICAgICRwbHVzZXMgID0gJGFb ICdwbHVzZXMnIF0gOw0KICAgICAgICAgICAgJG1pbnVzZXMgPSAkYVsgJ21pbnVzZXMnIF0g Ow0KICAgICAgICAgICAgJHNjb3JlID0gX2NiZV9oZWxwZnVsX2NvbXB1dGVzY29yZSggJHBs dXNlcywgJG1pbnVzZXMgKSA7DQogICAgICAgICAgICAkb3V0W10gPSAoJHRoaW5nKSA/ICBw YXJzZSgkdGhpbmcpIDogcGFyc2VfZm9ybSgkZm9ybSk7DQogICAgICAgIH0NCiAgICB9DQoN CiAgICAkdGhpc2FydGljbGUgPSAkb2xkX2FydGljbGUgOw0KICAgICRzY29yZSAgICAgICA9 ICRvbGRfc2NvcmUgOw0KICAgICRwbHVzZXMgICAgICA9ICRvbGRfcGx1c2VzIDsNCiAgICAk bWludXNlcyAgICAgPSAkb2xkX21pbnVzZXMgOw0KICAgICRjYW52b3RlICAgICA9ICRvbGRf Y2Fudm90ZSA7DQogICAgJHNob3dvbmx5ICAgID0gJG9sZF9zaG93b25seSA7DQoNCiAgICBp ZiggIWNvdW50KCAkb3V0ICkgKQ0KICAgICAgICByZXR1cm4gOw0KDQogICAgcmV0dXJuKCAo JGxhYmVsID8gZG9UYWcoICRsYWJlbCwgJGxhYmVsdGFnLCAkbGFiZWxjbGFzcyApIDogJycp DQogICAgICAgICAgLiBkb1dyYXAoICRvdXQsICR3cmFwdGFnLCAkYnJlYWssICRjbGFzcywg JGJyZWFrY2xhc3MgKSApIDsNCn0NCiI7czo0OiJ0eXBlIjtzOjE6IjEiO3M6NToiZmxhZ3Mi O3M6MToiMyI7czo1OiJvcmRlciI7czoxOiI1IjtzOjM6Im1kNSI7czozMjoiNjFlYWMzNWJh YjgyOTZiNjhlZWQ4MWM2MDAyODgwNTQiO30=