# smd_slimbox 0.1 # Lightweight image gallery lightbox wrapper from Christophe Beyl's Slimbox # Stefan Dawson # http://www.stefdawson.com # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YTo5OntzOjQ6Im5hbWUiO3M6MTE6InNtZF9zbGltYm94IjtzOjY6ImF1dGhvciI7czoxMzoiU3RlZmFuIERhd3NvbiI7czoxMDoiYXV0aG9yX3VyaSI7czoyNToiaHR0cDovL3d3dy5zdGVmZGF3c29uLmNvbSI7czo3OiJ2ZXJzaW9uIjtzOjM6IjAuMSI7czoxMToiZGVzY3JpcHRpb24iO3M6NzM6IkxpZ2h0d2VpZ2h0IGltYWdlIGdhbGxlcnkgbGlnaHRib3ggd3JhcHBlciBmcm9tIENocmlzdG9waGUgQmV5bCdzIFNsaW1ib3giO3M6NDoiaGVscCI7czo4OTEyOiI8aDE+c21kX3NsaW1ib3g8L2gxPg0KDQo8cD5ZZWFoLCB5ZWFoIDxlbT5hbm90aGVyPC9lbT4gbGlnaHRib3gtc3R5bGUgaW1hZ2UgZ2FsbGVyeSEgQnV0IHRoaXMgdGltZSB1c2luZyA8YSBocmVmPSJodHRwOi8vd3d3LmRpZ2l0YWxpYS5iZS9zb2Z0d2FyZS9zbGltYm94Ij5DaHJpc3RvcGhlIEJleWwnczwvYT4gdWx0cmEtbGlnaHR3ZWlnaHQgU2xpbWJveCAoZGlldCBjb2tlIHZlcnNpb24gb2YgbGlnaHRib3gpIGFuZCBtb290b29scy4gQWxzbyBwbGFnaWFyaXNlcyBjaHVua3Mgb2YgY29kZSBmcm9tIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD01MTc2Ij5Sb2IgU2FibGUncyByc3NfdGh1bWJwb3A8L2E+LiBNYW55IHRoYW5rcyB0byB0aGUgb3JpZ2luYWwgYXV0aG9ycy48L3A+DQoNCjxoMj5JbnN0YWxsYXRpb248L2gyPg0KDQo8cD5FbnN1cmUgdGhhdCB0aGUgY29udGVudHMgb2YgdGhlIGpzIGZvbGRlciAoPGNvZGU+bW9vdG9vbHMuanM8L2NvZGU+IGFuZCA8Y29kZT5zbGltYm94LmpzPC9jb2RlPikgYW5kIHRoZSBjc3MgZm9sZGVyICg8Y29kZT5zbGltYm94LmNzczwvY29kZT4gYW5kIDQgaW1hZ2VzKSBhcmUgdXBsb2FkZWQgdG8geW91ciBzZXJ2ZXIuIFlvdSBjYW4gcHV0IHRoZSBkaXJlY3RvcmllcyBpbiB0aGUgdGV4dHBhdHRlcm4gcm9vdCBmb2xkZXIgb3Igc29tZXdoZXJlIGVsc2Ugb2YgeW91ciBjaG9pY2UuIEl0IGRvZXNuJ3QgcmVhbGx5IG1hdHRlciB3aGVyZSB5b3UgcHV0IHRoZW0sIHlvdSBqdXN0IGhhdmUgdG8gdGVsbCB0aGUgcGx1Z2luIHdoZXJlIGl0IGlzLjwvcD4NCg0KPHA+V2hlbiBpbnN0YWxsZWQsIHRoaXMgcGx1Z2luIGFkZHMgdHdvIHRhZ3MuIFRoZSBmaXJzdCAoPGNvZGU+c21kX3NsaW1ib3hfaW5jPC9jb2RlPikgZ29lcyBpbiB0aGUgJmx0O2hlYWQmZ3Q7IHNlY3Rpb24gb2YgeW91ciBwYWdlIGFuZCBsb2FkcyB0aGUgcmVxdWlyZWQgbGlicmFyaWVzLiBUaGUgc2Vjb25kICg8Y29kZT5zbWRfc2xpbWJveDwvY29kZT4pIGlzIHRoZSBhY3R1YWwgcGx1Z2luIHRoYXQgZGlzcGxheXMgeW91ciBpbWFnZSBnYWxsZXJ5IChvciBnYWxsZXJpZXMgaWYgeW91J3JlIGZlZWxpbmcgYWR2ZW50dXJvdXMpLjwvcD4NCg0KPHA+QSBxdWljayB3b3JkIGFib3V0IGhvdyBpdCBhbGwgd29ya3M6IHRoZSBwbHVnaW4gb3B0aW9ucyBnb3Zlcm4gd2hpY2ggdGh1bWJuYWlscyB0byB1c2UgYW5kIGhvdyB0aGV5IGFyZSBkaXNwbGF5ZWQgb25seS4gT25jZSB0aGUgdGh1bWJzIGFyZSBjbGlja2VkLCBjb250cm9sIGlzIGhhbmRlZCBvdmVyIHRvIHNsaW1ib3ggYW5kIG1vb3Rvb2xzIHRvIGRvIHRoZSBmYW5jeSB3b3JrLiBUaGVyZWZvcmUsIGlmIHlvdSB3aXNoIHRvIGNvbmZpZ3VyZSB0aGUgbG9vayBvZiB0aGUgImxpZ2h0Ym94IiBwYXJ0LCB5b3UgbmVlZCB0byBlZGl0IDxjb2RlPnNsaW1ib3guanM8L2NvZGU+IGFuZC9vciA8Y29kZT5zbGltYm94LmNzczwvY29kZT4uIE1vcmUgaW5mbyBjYW4gYmUgZm91bmQgb24gPGEgaHJlZj0iaHR0cDovL3d3dy5kaWdpdGFsaWEuYmUvc29mdHdhcmUvc2xpbWJveCI+Q2hyaXN0b3BoZSBCZXlsJ3MgcGFnZTwvYT4uPC9wPg0KDQo8cD5BbHNvLCBpZiB5b3UgYWxyZWFkeSB1c2UgbW9vdG9vbHMgZm9yIHlvdXIgcGFnZSB5b3UgZG9uJ3QgbmVlZCB0byB1cGxvYWQgaXQgYWdhaW4uIEp1c3QgbWFrZSBzdXJlIHRoZSB2ZXJzaW9uIHlvdSB1c2UgaGFzIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgcGx1cyB0aGUgImZ4IiBhbmQgIndpbmRvdyIgbW9kdWxlcy48L3A+DQoNCjxoMj5Vc2FnZTwvaDI+DQoNCjxwPlNvbWV3aGVyZSBpbiB0aGUgJmx0O2hlYWQmZ3Q7IG9mIHRoZSBwYWdlIHRoYXQgeW91IHdhbnQgeW91ciBnYWxsZXJ5IG9uLCBhZGQ6PC9wPg0KDQo8cD48Y29kZT4mbHQ7dHhwOnNtZF9zbGltYm94X2luYyBqc2Rpcj0iL2pzIiBjc3NkaXI9Ii9jc3MiIC8mZ3Q7PC9jb2RlPjwvcD4NCg0KPHA+SWYgeW91IGhhdmUgdGhlIGxpYnJhcmllcyBpbiB0aGUganMgYW5kIGNzcyBmb2xkZXJzIGluIHlvdXIgdGV4dHBhdHRlcm4gcm9vdCBmb2xkZXIsIHRoYXQgd2lsbCBiZSBmaW5lLiBJZiBub3QsIHlvdSBjYW4gY2hhbmdlIHdoZXJlIHRoZSBwbHVnaW4gbG9va3MgZm9yIHRoZSBsaWJyYXJpZXMgYnkgYWRqdXN0aW5nIHRoZSB0d28gb3B0aW9ucy48L3A+DQoNCjxwPk9uY2UgdGhhdCBpcyBkb25lIHlvdSBjYW4gdXNlIDxjb2RlPiZsdDt0eHA6c21kX3NsaW1ib3ggLyZndDs8L2NvZGU+IHRvIGRpc3BsYXkgYW4gaW1hZ2UgZ2FsbGVyeS4gV2l0aG91dCBhbnkgb3B0aW9ucyBpdCBkaXNwbGF5cyBldmVyeSBpbWFnZSBpbiB5b3VyIGVudGlyZSBjb2xsZWN0aW9uIGFuZCB3b24ndCBsb29rIHZlcnkgcHJldHR5ICh0aG91Z2ggeW91IGNhbiBoZWxwIGEgYml0IGJ5IHN0YXJ0aW5nIHdpdGggdGhlIDxhIGhyZWY9IiNTdHlsaW5nIj5leGFtcGxlIENTUzwvYT4gZ2l2ZW4gbGF0ZXIpLiBUaGUgZm9sbG93aW5nIG9wdGlvbnMgdGFtZSB0aGUgcGx1Z2luIGEgbGl0dGxlOjwvcD4NCg0KPHA+DQo8dWw+DQo8bGk+PGI+Y2F0ZWdvcnk8L2I+PGJyIC8+Y29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgaW1hZ2UgY2F0ZWdvcnkgbmFtZXMgdG8gc2hvdy4NCjxiciAvPlVzaW5nICI/YyIgYXMgb25lIG9mIHRoZSBvcHRpb25zIHVzZXMgdGV4dHBhdHRlcm4ncyBnbG9iYWwgY2F0ZWdvcnkuDQo8YnIgLz5UbyBtYWtlIGEgcGVyLWFydGljbGUgaW1hZ2UgZ2FsbGVyeSwgdXNlICI/aWQiIHRvIHRha2UgdGhlIGN1cnJlbnQgYXJ0aWNsZSBJRDogaXQgbWFrZXMgdXAgYSBjYXRlZ29yeSBuYW1lIHVzaW5nIHRoZSA8Y29kZT5jYXRsYWJlbDwvY29kZT4gb3B0aW9uIGFuZCB0aGUgSUQgZmllbGQuIEJ5IGRlZmF1bHQgdGhpcyB3aWxsIGJlICJhcnRpY2xlLUlEIg0KPGJyIC8+WW91IGNhbiBhbHNvIHVzZSAiP2ZpZWxkbmFtZSIgd2hpY2ggd2lsbCBwaWNrIHVwIGNhdGVnb3JpZXMgZnJvbSB0aGUgZ2l2ZW4gZmllbGRuYW1lIG9mIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIGFydGljbGUuIERlc2lnbmVkIHByaW1hcmlseSBmb3IgdXNlIHdpdGggY3VzdG9tIGZpZWxkcyAoZS5nLiA/Y3VzdG9tMSksIGl0IGNvdWxkIGFsc28gYmUgYW55IG90aGVyIGZpZWxkIChvciBmaWVsZHMpIGZyb20geW91ciBhcnRpY2xlcyAoZS5nLiA/ZXhjZXJwdCBvciA/Y2F0ZWdvcnkxIG9yID9rZXl3b3JkcyBvciA/YXV0aG9yaWQsIGV0Yy4pIFRoZSBza3kncyB0aGUgbGltaXQgYmVjYXVzZSB0aG9zZSBmaWVsZHMgY291bGQgY29udGFpbiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNhdGVnb3JpZXMuLi48L2xpPg0KPGxpPjxiPmNhdGxhYmVsPC9iPjxiciAvPnRoZSBsYWJlbCB1c2VkIGluIGZyb250IG9mIHRoZSBjYXRlZ29yeSBpZiB0aGUgIj9pZCIgb3B0aW9uIGlzIHVzZWQ7IGRlZmF1bHQ6ICJhcnRpY2xlLSI8L2xpPg0KPGxpPjxiPmxpbWl0PC9iPjxiciAvPjAgKG9yIG9taXR0ZWQpPXVubGltaXRlZDsgb3IgdGhlIG51bWJlciBvZiBpbWFnZSB0aHVtYm5haWxzIHRvIHNob3cgcGVyIHBhZ2U8L2xpPg0KPGxpPjxiPm9yZGVyYnk8L2I+PGJyIC8+Y29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygd2F5cyB0byBvcmRlciB0aGUgcmVzdWx0cy4gQ2hvb3NlIGZyb206IGNhdGVnb3J5ICh0aGUgZGVmYXVsdCksIG5hbWUsIGlkLCBkYXRlLCBhbHQsIGNhcHRpb24gb3IgcmFuZG9tLiBZb3UgY2FuIGFsc28gc3BlY2lmeSB0aGUgb3JkZXIgYnkgYWRkaW5nIDphc2Mgb3IgOmRlc2MgdG8gYW55IHZhbHVlIChlLmcgY2F0ZWdvcnksIGRhdGU6ZGVzYyB3b3VsZCBzb3J0IGJ5IGNhdGVnb3J5IGZpcnN0LCB0aGVuIGRlc2NlbmRpbmcgZGF0ZSk8L2xpPg0KPGxpPjxiPmdyb3VwbmFtZTwvYj48YnIgLz50aGUgbmFtZSB0byBhcHBlbmQgdG8gdGhlIFtyZWxdIGFyZ3VtZW50IGluIG9yZGVyIHRvIGxvZ2ljYWxseSBncm91cCBpbWFnZXMuICI/YyIgdXNlcyB0aGUgaW1hZ2UgY2F0ZWdvcnksIG9yIHRyeSAiP2ZpZWxkbmFtZSIgdG8gcHVsbCB0aGUgZ3JvdXBuYW1lIGZyb20gdGhlIGdpdmVuIGZpZWxkIGluIHRoZSBjdXJyZW50IGFydGljbGUuIFNlZSB0aGUgPGEgaHJlZj0iI0V4YW1wbGVzIj5leGFtcGxlczwvYT4gYW5kIHRoZSBTbGltYm94IGRvY3VtZW50YXRpb24gZm9yIG1vcmUgb24gdGhpcyBmZWF0dXJlLiBEZWZhdWx0OiAic21kIjwvbGk+DQo8bGk+PGI+c2hvd2NhcHRpb248L2I+PGJyIC8+MT15ZXM7IDA9bm87IHRvIGRpc3BsYXkgdGhlIGltYWdlJ3MgY2FwdGlvbiB3aXRoIHRoZSBpbWFnZS4gT2ZmIGJ5IGRlZmF1bHQ8L2xpPg0KPGxpPjxiPnNob3dhbHQ8L2I+PGJyIC8+MT15ZXM7IDA9bm87IHRvIGRpc3BsYXkgdGhlIGltYWdlJ3MgYWx0IHRhZyB3aXRoIHRoZSBpbWFnZS4gT2ZmIGJ5IGRlZmF1bHQ8L2xpPg0KPGxpPjxiPnNob3dwYWdlbGlua3M8L2I+PGJyIC8+MT15ZXM7IDA9bm87IHRvIGRpc3BsYXkgY2xpY2thYmxlIG5leHQvcHJldmlvdXMgbGlua3MuIE9uIGJ5IGRlZmF1bHQgKGlmIGxpbWl0IGlzIGdyZWF0ZXIgdGhhbiAwKTwvbGk+DQo8bGk+PGI+cHJldmxhYmVsPC9iPjxiciAvPkxhYmVsIGZvciB0aGUgJ3ByZXZpb3VzIHBhZ2UnIG9mIHBpY3R1cmVzIHdoZW4gdXNpbmcgc2hvd3BhZ2VsaW5rcy4gRGVmYXVsdDogIlByZXYiPC9saT4NCjxsaT48Yj5uZXh0bGFiZWw8L2I+PGJyIC8+TGFiZWwgZm9yIHRoZSAnbmV4dCBwYWdlJyBvZiBwaWN0dXJlcyB3aGVuIHVzaW5nIHNob3dwYWdlbGlua3MuIERlZmF1bHQ6ICJOZXh0IjwvbGk+DQo8bGk+PGI+Y2VsbGNsYXNzPC9iPjxiciAvPkNTUyBjbGFzcyBmb3IgZWFjaCAnY2VsbCcgdGhhdCBkaXNwbGF5cyBhIHRodW1ibmFpbC4gRGVmYXVsdDogY2VsbDwvbGk+DQo8bGk+PGI+Y2FwdGlvbmNsYXNzPC9iPjxiciAvPkNTUyBjbGFzcyBmb3IgdGhlIGNhcHRpb24gdGV4dC4gRGVmYXVsdDogY2FwPC9saT4NCjxsaT48Yj5hbHRjbGFzczwvYj48YnIgLz5DU1MgY2xhc3MgZm9yIHRoZSBhbHQgdGV4dC4gRGVmYXVsdDogYWx0PC9saT4NCjxsaT48Yj5uYXZjbGFzczwvYj48YnIgLz5DU1MgY2xhc3MgZm9yIHRoZSBuZXh0L3ByZXYgY29udGFpbmVyLiBEZWZhdWx0OiBzbWRfc2xpbWJveF9uYXY8L2xpPg0KPGxpPjxiPnByZXZjbGFzczwvYj48YnIgLz5DU1MgY2xhc3MgZm9yIHRoZSAncHJldicgbGluay4gRGVmYXVsdDogc21kX3NsaW1ib3hfcHJldjwvbGk+DQo8bGk+PGI+bmV4dGNsYXNzPC9iPjxiciAvPkNTUyBjbGFzcyBmb3IgdGhlICduZXh0JyBsaW5rLiBEZWZhdWx0OiBzbWRfc2xpbWJveF9uZXh0PC9saT4NCjwvdWw+DQo8L3A+DQoNCjxoMj48YSBuYW1lPSJFeGFtcGxlcyI+PC9hPkV4YW1wbGVzPC9oMj4NCg0KPGNvZGU+Jmx0O3R4cDpzbWRfc2xpbWJveCBjYXRlZ29yeT0ibGFuZHNjYXBlIiBsaW1pdD0iMTAiIC8mZ3Q7PC9jb2RlPg0KPHA+U2hvdyBhbGwgaW1hZ2VzIGluIHRoZSBsYW5kc2NhcGUgY2F0ZWdvcnksIHRlbiBhdCBhIHRpbWUuPC9wPg0KDQo8Y29kZT4mbHQ7dHhwOnNtZF9zbGltYm94IGNhdGVnb3J5PSJkb2dzLCBiaXJkcyIgbGltaXQ9IjkiIHNob3djYXB0aW9ucz0iMSIgLyZndDs8L2NvZGU+DQo8cD5TaG93IGFsbCBpbWFnZXMgaW4gdGhlIGRvZ3MgYW5kIGJpcmRzIGNhdGVnb3JpZXMsIDkgcGVyIHBhZ2UuIEFkZCB0aGUgY2FwdGlvbnMgdG8gdGhlIHRodW1ibmFpbHMuPC9wPg0KDQo8Y29kZT4mbHQ7dHhwOnNtZF9zbGltYm94IGNhdGVnb3J5PSJkb2dzLCA/Y3VzdG9tMSIgbGltaXQ9IjIwIiBwcmV2bGFiZWw9IkJhY2siIG9yZGVyYnk9Im5hbWU6ZGVzYywgY2F0ZWdvcnkiIC8mZ3Q7PC9jb2RlPg0KPHA+U2hvdyBhbGwgaW1hZ2VzIGluIHRoZSBkb2dzIGNhdGVnb3J5IGFuZCBhbHNvIHB1bGwgdGhlIGltYWdlIGNhdGVnb3J5IG5hbWVzIGZyb20gdGhlIGN1cnJlbnQgYXJ0aWNsZSdzIGN1c3RvbTEgZmllbGQgKGlmIGN1c3RvbTEgaGVsZCAiYmlyZHMsIGxhbmRzY2FwZXMiICh3aXRob3V0IHRoZSBxdW90ZXMpIHlvdSdkIGdldCBwaWN0dXJlcyBmcm9tIGFsbCB0aHJlZSBjYXRlZ29yaWVzKS4gTGltaXQgdGhlIG51bWJlciBwZXIgcGFnZSB0byAyMCwgY2hhbmdlIHRoZSBwcmV2aW91cyBwYWdlIGxhYmVsIHRvICJCYWNrIiBhbmQgc29ydCB0aGUgaW1hZ2VzIGluIGRlc2NlbmRpbmcgb3JkZXIgb2YgbmFtZSwgdGhlbiBjYXRlZ29yeS48L3A+DQoNCjxjb2RlPiZsdDt0eHA6c21kX3NsaW1ib3ggY2F0ZWdvcnk9ImZpeGVkLCA/aWQiIGxpbWl0PSI2IiBncm91cG5hbWU9Ij9jIiBzaG93cGFnZWxpbmtzPSIwIiAvJmd0OzwvY29kZT4NCjxwPklmIHRoZSBwZXJzb24gaXMgY3VycmVudGx5IHZpZXdpbmcgYXJ0aWNsZSBJRCA2Nywgc2hvdyBhbGwgaW1hZ2VzIGZyb20gdGhlICdmaXhlZCcgY2F0ZWdvcnkgYW5kIHRoZSAnYXJ0aWNsZS02NycgY2F0ZWdvcnkuIE9ubHkgc2hvdyA2IHBpY3R1cmVzIGFuZCBkb24ndCBzaG93IHRoZSBuZXh0L3ByZXYgbGlua3Mgb24gdGhlIHBhZ2UuIEFsc28sIGdyb3VwIHRoZSBTbGltYm94IHBpY3R1cmVzIGJ5IGltYWdlIGNhdGVnb3J5LiBUaGlzIG1lYW5zIHRoYXQgaWYgc29tZW9uZSBjbGlja3Mgb24gYSBwaWN0dXJlIGZyb20gdGhlICJmaXhlZCIgY2F0ZWdvcnksIHRoZSBTbGltYm94IG5leHQvcHJldiBsaW5rcyBvbmx5IG5hdmlnYXRlIGJldHdlZW4gdGhvc2UgcGljdHVyZXMuIFRoZSB1c2VyIHdpbGwgaGF2ZSB0byBjbG9zZSB0aGUgbGlnaHRib3ggYW5kIGNsaWNrIGEgcGljdHVyZSBpbiB0aGUgYXJ0aWNsZS02NyBjYXRlZ29yeSB0byBzaG93IHBpY3R1cmVzIGZyb20gdGhlIG90aGVyIGdyb3VwLjwvcD4NCjxwPk9uIHRoZSBzdXJmYWNlIHRoZSBncm91cG5hbWUgb3B0aW9uIG1heSBzZWVtIGEgbGl0dGxlIHN1cGVyZmx1b3VzIGJ1dCBpdCBjYW4gYmUgdXNlZnVsIHRvIGFsbG93IHBlb3BsZSB0byBvbmx5IGZsaWNrIHRocm91Z2ggYSBzdWJzZXQgb2YgdGhlIHBpY3R1cmVzIG9uIGVhY2ggcGFnZSwgYmFzZWQgb24gdGhlaXIgY2F0ZWdvcnkgKG9yIGEgZml4ZWQgdmFsdWUgcmVhZCBmcm9tIGEgZmllbGQgaW4gdGhlIGN1cnJlbnQgYXJ0aWNsZSwgZS5nLiBncm91cG5hbWU9Ij9jdXN0b20yIikuIEl0IGNvbWVzIGludG8gaXRzIG93biB3aGVuIHlvdSB1c2UgQ1NTMiB0byBzdHlsZSBncm91cHMgb2YgaW1hZ2VzIGJhc2VkIG9uIHRoZWlyIFtyZWxdIGF0dHJpYnV0ZSBiZWNhdXNlIHlvdSBjYW4gc3ViLWRpdmlkZSB5b3VyIHBpY3R1cmVzIGZ1cnRoZXIgdGhhbiB5b3Ugd291bGQgbm9ybWFsbHkgYmUgYWJsZS48L3A+DQoNCjxoMj48YSBuYW1lPSJTdHlsaW5nIj48L2E+U3R5bGluZyB3aXRoIENTUzwvaDI+DQoNCjxwPlRoZXJlIGFyZSAoZGVsaWJlcmF0ZWx5KSB2ZXJ5IGZldyBsYXlvdXQgYXR0cmlidXRlcyBmb3IgdGhlIHBsdWdpbiBiZWNhdXNlIHByZXR0eSBtdWNoIGV2ZXJ5dGhpbmcgY2FuIGJlIGFjY2Vzc2VkIGZyb20gQ1NTIHRvIGxheSB5b3VyIGltYWdlcyBvdXQgaG93ZXZlciB5b3UgbGlrZSB0aGVtLiBXYW50IHRvIGNoYW5nZSB0aGUgbnVtYmVyIG9mIGltYWdlcyBwZXIgcm93PyBDaGFuZ2UgdGhlIHdpZHRoIG9mIHRoZSBjb250YWluaW5nICZsdDtkaXYmZ3Q7IGFuZCBzZXQgdGhlIHdpZHRoIG9mIGVhY2ggdGh1bWJuYWlsIHNwYWNlIHRvIGEgcGFydGljdWxhciBzaXplLjwvcD4NCg0KPHA+VGhlIGZvbGxvd2luZyBsb2dpY2FsIENTUyBzdHJ1Y3R1cmUgYXBwbGllczo8L3A+DQoNCjx1bD4NCjxsaT5FYWNoIHBpY3R1cmUgaXMgaW4gaXRzIG93biBzcGFjZTogYSAmbHQ7ZGl2Jmd0OyB3aXRoIGEgY2xhc3MgbmFtZSBvZiAiY2VsbCI8L2xpPg0KPGxpPlRoZSBjYXB0aW9uL2FsdCBpcyBhICZsdDtzcGFuJmd0OyB3aXRoIGEgY2xhc3MgbmFtZWQgImNhcCIgb3IgImFsdCIgcmVzcGVjdGl2ZWx5PC9saT4NCjxsaT5UaGUgbmV4dC9wcmV2IGxpbmtzIGFyZSBpbiBhICZsdDtkaXYmZ3Q7IGNvbnRhaW5lciB3aXRoIGNsYXNzICJzbWRfc2xpbWJveF9uYXYiPC9saT4NCjxsaT5UaGUgbmV4dCBsaW5rIGhhcyBhIGNsYXNzIG9mICJzbWRfc2xpbWJveF9uZXh0IiBhbmQgcHJldiBoYXMgInNtZF9zbGltYm94X3ByZXYiPC9saT4NCjwvdWw+DQoNCjxwPkFmdGVyIHdyYXBwaW5nIHRoZSB3aG9sZSBwbHVnaW4gdGFnIHdpdGggYSBuYW1lZCAgKG9yIGNsYXNzZWQpICZsdDtkaXYmZ3Q7LCB1c2luZyBDU1Mgc2VsZWN0b3JzIHlvdSBjYW4gYWNjZXNzIGV2ZXJ5IHBhcnQgb2YgdGhlIHN0cnVjdHVyZS4gQW4gZXhhbXBsZSBDU1MgbGF5b3V0IGlzIGdpdmVuIGhlcmUgdG8gZ2V0IHlvdSBzdGFydGVkIChhc3N1bWVzIGEgY29udGFpbmluZyBkaXYgYXJvdW5kIHRoZSBwbHVnaW4gdGFnIHdpdGggYSBjbGFzcyBvZiA8Y29kZT5zbWRfc2xpbWJveDwvY29kZT4pLiBQYXN0ZSBpdCBpbnRvIHlvdXIgQ1NTIHRlbXBsYXRlIGFuZCB5b3UncmUgZ29vZCB0byBnby48L3A+DQoNCjxwcmU+DQouc21kX3NsaW1ib3ggew0KCWZsb2F0OmxlZnQ7DQoJd2lkdGg6NjAwcHg7DQoJbWFyZ2luOjFlbSAwOw0KCWNsZWFyOmJvdGg7DQp9DQouc21kX3NsaW1ib3ggLmNlbGwgew0KCXdpZHRoOjE1MHB4Ow0KCWhlaWdodDoxNTBweDsNCglmbG9hdDpsZWZ0Ow0KCW1hcmdpbjoxZW0gYXV0bzsNCgl0ZXh0LWFsaWduOmNlbnRlcjsNCn0NCi5zbWRfc2xpbWJveCBpbWcgew0KCW1hcmdpbjowIGF1dG87DQp9DQouc21kX3NsaW1ib3ggLmNhcCB7DQoJZmxvYXQ6bGVmdDsNCgl3aWR0aDoxNDBweDsNCglwYWRkaW5nOjJweCAwIDAgNXB4Ow0KfQ0KLnNtZF9zbGltYm94X25hdiB7DQoJY2xlYXI6Ym90aDsNCgl3aWR0aDo1MDBweDsNCglwYWRkaW5nOjIwcHg7DQp9DQouc21kX3NsaW1ib3hfcHJldiB7DQoJZmxvYXQ6bGVmdDsNCn0NCi5zbWRfc2xpbWJveF9uZXh0IHsNCglmbG9hdDpyaWdodDsNCn0NCjwvcHJlPiI7czo0OiJjb2RlIjtzOjc3NjY6Ii8vIHYwLjEgIEluaXRpYWwgcHVibGljIHJlbGVhc2UNCg0KLy8gVXNlIHRoaXMgdG8gaW5jbHVkZSB0aGUgbGlicmFyaWVzIGluIHRoZSA8aGVhZD4gc2VjdGlvbiBvZiB0aGUgcGFnZQ0KZnVuY3Rpb24gc21kX3NsaW1ib3hfaW5jKCRhdHRzKSB7DQoJZ2xvYmFsICRzbGltYm94X2xpYnM7DQoNCgkkanNkaXIgPSAnJzsNCgkkY3NzZGlyID0gJyc7DQoNCglpZiAoaXNfYXJyYXkoJGF0dHMpKSBleHRyYWN0KCRhdHRzKTsNCgkkb3V0U3RyID0gJyc7DQoNCgkvLyBJbmNsdWRlIHRoZSByZXF1aXJlZCBqcyBhbmQgY3NzIGxpYnJhcmllcw0KCSRvdXRTdHIgLj0gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicgLiRqc2Rpci4gJy9tb290b29scy5qcyI+PC9zY3JpcHQ+Jy5uOw0KCSRvdXRTdHIgLj0gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicgLiRqc2Rpci4gJy9zbGltYm94LmpzIj48L3NjcmlwdD4nLm47DQoJJG91dFN0ciAuPSAnPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSInIC4kY3NzZGlyLiAnL3NsaW1ib3guY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InNjcmVlbiIgLz4nLm47DQoNCgkvLyBTZXQgdGhlIGZsYWcgdG8gc2F5IHRoZSBsaWJzIGFyZSBvay4gU2hhbWUgdGhlcmUncyBubyBlYXN5IHByb3Zpc2lvbiBmb3INCgkvLyBjaGVja2luZyB0aGUgbGlicyBhY3R1YWxseSBleGlzdCBhdCB0aGUgZ2l2ZW4gbG9jYXRpb25zLCBidXQgaGV5DQoJJHNsaW1ib3hfbGlicyA9IHRydWU7DQoNCglyZXR1cm4gJG91dFN0cjsNCn0NCg0KZnVuY3Rpb24gc21kX3NsaW1ib3goJGF0dHMpIHsNCglnbG9iYWwgJHByZXRleHQsICR0aGlzYXJ0aWNsZSwgJGltZ19kaXI7DQoJZ2xvYmFsICRzbGltYm94X2xpYnM7DQoJJG1heGxpbWl0ID0gOTk5OTk7DQoNCglpZiAoaXNfYXJyYXkoJGF0dHMpKSBleHRyYWN0KCRhdHRzKTsNCg0KCS8vIFBsdWdpbiBvcHRpb25zDQoJJGNhdGVnb3J5ID0gaXNzZXQoJGNhdGVnb3J5KSA/IGRvU2xhc2goJGNhdGVnb3J5KSA6ICRwcmV0ZXh0WydjJ107DQoJJGNhdGxhYmVsID0gaXNzZXQoJGNhdGxhYmVsKSA/ICRjYXRsYWJlbDogImFydGljbGUtIjsNCgkkZ3JvdXBuYW1lID0gaXNzZXQoJGdyb3VwbmFtZSkgPyAkZ3JvdXBuYW1lOiAic21kIjsNCgkkbGltaXQgPSBpc3NldCgkbGltaXQpID8gJGxpbWl0OiAiMCI7DQoJJHNob3dwYWdlbGlua3MgPSBpc3NldCgkc2hvd3BhZ2VsaW5rcykgPyAkc2hvd3BhZ2VsaW5rczogIjEiOw0KCSRvcmRlcmJ5ID0gaXNzZXQoJG9yZGVyYnkpID8gJG9yZGVyYnk6ICJjYXRlZ29yeSI7DQoJJHByZXZsYWJlbD0gaXNzZXQoJHByZXZsYWJlbCkgPyAkcHJldmxhYmVsOiAiUHJldiI7DQoJJG5leHRsYWJlbD0gaXNzZXQoJG5leHRsYWJlbCkgPyAkbmV4dGxhYmVsOiAiTmV4dCI7DQoJJHNob3djYXB0aW9uID0gaXNzZXQoJHNob3djYXB0aW9uKSA/ICRzaG93Y2FwdGlvbjogIjAiOw0KCSRzaG93YWx0ID0gaXNzZXQoJHNob3dhbHQpID8gJHNob3dhbHQ6ICIwIjsNCgkkY2VsbGNsYXNzID0gaXNzZXQoJGNlbGxjbGFzcykgPyAkY2VsbGNsYXNzOiAiY2VsbCI7DQoJJG5hdmNsYXNzID0gaXNzZXQoJG5hdmNsYXNzKSA/ICRuYXZjbGFzczogInNtZF9zbGltYm94X25hdiI7DQoJJHByZXZjbGFzcyA9IGlzc2V0KCRwcmV2Y2xhc3MpID8gJHByZXZjbGFzczogInNtZF9zbGltYm94X3ByZXYiOw0KCSRuZXh0Y2xhc3MgPSBpc3NldCgkbmV4dGNsYXNzKSA/ICRuZXh0Y2xhc3M6ICJzbWRfc2xpbWJveF9uZXh0IjsNCgkkY2FwdGlvbmNsYXNzID0gaXNzZXQoJGNhcHRpb25jbGFzcykgPyAkY2FwdGlvbmNsYXNzOiAiY2FwIjsNCgkkYWx0Y2xhc3MgPSBpc3NldCgkYWx0Y2xhc3MpID8gJGFsdGNsYXNzOiAiYWx0IjsNCg0KCS8vIE1haW4gY29kZSBib2R5DQoJaWYgKCRzbGltYm94X2xpYnMgPT0gZmFsc2UpIHsNCgkJJG91dFN0ciA9ICdTbGltYm94OiBSZXF1aXJlZCBsaWJyYXJpZXMgbm90IGxvYWRlZC4gQ2FsbCAmbHQ7dHhwOnNtZF9zbGltYm94X2luYyAvJmd0OyBpbiB0aGUgJmx0O2hlYWQmZ3Q7IG9mIHRoaXMgcGFnZS4nOw0KCX0gZWxzZSB7DQoJCS8vIFRoZSBkYXRhYmFzZSBmaWVsZHMgcmVxdWlyZWQNCgkJJGZpZWxkcyA9ICdpZCxuYW1lLGNhcHRpb24sYWx0LGNhdGVnb3J5LGV4dCc7DQoJCSRzdWJDYXRMaXN0ID0gYXJyYXkoKTsNCgkJJGZ1bGxDYXRMaXN0ID0gYXJyYXkoKTsNCg0KCQkvLyBDb252ZXJ0IHRoZSBjYXRlZ29yeSAocG9zc2libHkgYSBjb21tYS1zZXAgbGlzdCkgaW50byBhbiBTUUwtc3R5bGUgJ2luJyBsaXN0Lg0KCQkvLyBQcm9jZXNzIHRoZSBzcGVjaWFsICgnP3NvbWV0aGluZycpIGNhc2VzIHRvby4NCgkJJGNhdExpc3QgPSBwcmVnX3NwbGl0KCcvWyxcc10rLycsJGNhdGVnb3J5LC0xLFBSRUdfU1BMSVRfTk9fRU1QVFkpOw0KDQoJCWZvciAoJGlkeCA9IDA7ICRpZHggPCBjb3VudCgkY2F0TGlzdCk7ICRpZHgrKykgew0KCQkJJGNhdG5hbWUgPSAkY2F0TGlzdFskaWR4XTsNCgkJCWlmICgkY2F0bmFtZSA9PT0gIj9jIikgew0KCQkJCS8vIFVzZSB0aGUgZ2xvYmFsIGFydGljbGUgY2F0ZWdvcnkNCgkJCQlpZiAoIWluX2FycmF5KCRwcmV0ZXh0WydjJ10sICRmdWxsQ2F0TGlzdCkpIHsNCgkJCQkJJGZ1bGxDYXRMaXN0W10gPSAkcHJldGV4dFsnYyddOw0KCQkJCX0NCgkJCX0gZWxzZSBpZiAoJGNhdG5hbWUgPT09ICI/aWQiKSB7DQoJCQkJLy8gVXNlIHRoZSBnbG9iYWwgYXJ0aWNsZSBJRA0KCQkJCWlmICghaW5fYXJyYXkoJGNhdGxhYmVsIC4gJHByZXRleHRbJ2lkJ10sICRmdWxsQ2F0TGlzdCkpIHsNCgkJCQkJJGZ1bGxDYXRMaXN0W10gPSAkY2F0bGFiZWwgLiAkcHJldGV4dFsnaWQnXTsNCgkJCQl9DQoJCQl9IGVsc2UgaWYgKCRjYXRuYW1lWzBdID09PSAiPyIpIHsNCgkJCQkvLyBVc2UgdGhlIGdpdmVuIGZpZWxkIG5hbWU7IHdoaWNoIG1heSBiZSBhIGNvbW1hLXNlcGFyYXRlZCBzdWJsaXN0Lg0KCQkJCS8vIFNwbGl0IG9mZiB0aGUgZmllbGQgbmFtZSBmcm9tIHRoZSBxdWVzdGlvbiBtYXJrDQoJCQkJJGZpZWxkbmFtZSA9IHN1YnN0cigkY2F0bmFtZSwxKTsNCgkJCQlpZiAoaXNzZXQoJHRoaXNhcnRpY2xlWyRmaWVsZG5hbWVdKSkgew0KCQkJCQkkZmllbGRDb250ZW50cyA9ICR0aGlzYXJ0aWNsZVskZmllbGRuYW1lXTsNCgkJCQl9IGVsc2Ugew0KCQkJCQkkZmllbGRDb250ZW50cyA9ICcnOw0KCQkJCX0NCg0KCQkJCWlmICghZW1wdHkoJGZpZWxkQ29udGVudHMpKSB7DQoJCQkJCSRzdWJDYXRMaXN0ID0gcHJlZ19zcGxpdCgnL1ssXHNdKy8nLCAkZmllbGRDb250ZW50cywgLTEsIFBSRUdfU1BMSVRfTk9fRU1QVFkpOw0KCQkJCQlmb3JlYWNoICgkc3ViQ2F0TGlzdCBhcyAkc3ViY2F0bmFtZSkgew0KCQkJCQkJaWYgKCFpbl9hcnJheSgkc3ViY2F0bmFtZSwgJGZ1bGxDYXRMaXN0KSkgew0KCQkJCQkJCSRmdWxsQ2F0TGlzdFtdID0gJHN1YmNhdG5hbWU7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQl9IGVsc2Ugew0KCQkJCWlmICghaW5fYXJyYXkoJGNhdG5hbWUsICRmdWxsQ2F0TGlzdCkpIHsNCgkJCQkJJGZ1bGxDYXRMaXN0W10gPSAkY2F0bmFtZTsNCgkJCQl9DQoJCQl9DQoJCX0NCg0KCQkvLyBNYWtlIHVwIHRoZSBXSEVSRSBzdGF0ZW1lbnQgZnJvbSB0aGUgY29tYmluZWQgbGlzdCBvZiBjYXRlZ29yaWVzDQoJCWlmIChjb3VudCgkZnVsbENhdExpc3QpID4gMCkgew0KCQkJJHdoZXJlID0gJ2NhdGVnb3J5IGluICgnOw0KCQkJZm9yICgkaWR4ID0gY291bnQoJGZ1bGxDYXRMaXN0KTsgJGlkeCA+PTA7ICRpZHgtLSkgew0KCQkJCWlmIChlbXB0eSgkZnVsbENhdExpc3RbJGlkeF0pKSB7DQoJCQkJCXVuc2V0KCRmdWxsQ2F0TGlzdFskaWR4XSk7DQoJCQkJfSBlbHNlIHsNCgkJCQkJJGZ1bGxDYXRMaXN0WyRpZHhdID0gIiciIC4gJGZ1bGxDYXRMaXN0WyRpZHhdIC4gIiciOw0KCQkJCX0NCgkJCX0NCgkJCSR3aGVyZSAuPSBpbXBsb2RlKCIsIiwkZnVsbENhdExpc3QpOw0KCQkJJHdoZXJlIC49ICcpJzsNCgkJfSBlbHNlIHsNCgkJCSR3aGVyZSA9ICcxPTEnOw0KCQl9DQoNCgkJLy8gQ29udmVydCB0aGUgb3JkZXJieSBpbnRvIGEgdmFsaWQgT1JERVIgQlkgY2xhdXNlDQoJCSRvYkxpc3QgPSBwcmVnX3NwbGl0KCcvWyxcc10rLycsJG9yZGVyYnksLTEsUFJFR19TUExJVF9OT19FTVBUWSk7DQoJCWlmIChjb3VudCgkb2JMaXN0KSA+IDApIHsNCgkJCSR3aGVyZSAuPSAnIE9SREVSIEJZICc7DQoJCX0NCgkJZm9yICgkaWR4ID0gMDsgJGlkeCA8IGNvdW50KCRvYkxpc3QpOyAkaWR4KyspIHsNCgkJCSRvYl9kaXIgPSBleHBsb2RlKCc6Jywkb2JMaXN0WyRpZHhdKTsNCg0KCQkJaWYgKCRpZHggPiAwKSB7DQoJCQkJJHdoZXJlIC49ICIsIjsNCgkJCX0NCgkJCXN3aXRjaCAoJG9iX2RpclswXSkgew0KCQkJCWNhc2UgJ25hbWUnOg0KCQkJCQkkd2hlcmUgLj0gJ25hbWUnOw0KCQkJCQlicmVhazsNCgkJCQljYXNlICdpZCc6DQoJCQkJCSR3aGVyZSAuPSAnaWQnOw0KCQkJCQlicmVhazsNCgkJCQljYXNlICdhbHQnOg0KCQkJCQkkd2hlcmUgLj0gJ2FsdCc7DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ2NhcHRpb24nOg0KCQkJCQkkd2hlcmUgLj0gJ2NhcHRpb24nOw0KCQkJCQlicmVhazsNCgkJCQljYXNlICdkYXRlJzoNCgkJCQkJJHdoZXJlIC49ICdkYXRlJzsNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAncmFuZG9tJzoNCgkJCQkJJHdoZXJlIC49ICdyYW5kKCknOw0KCQkJCQlicmVhazsNCgkJCQljYXNlICdjYXRlZ29yeSc6DQoJCQkJZGVmYXVsdDoNCgkJCQkJJHdoZXJlIC49ICdjYXRlZ29yeSc7DQoJCQkJCWJyZWFrOw0KCQkJfQ0KDQoJCQlpZiAoY291bnQoJG9iX2RpcikgPiAxKSB7DQoJCQkJaWYoJG9iX2RpclsxXSA9PSAiZGVzYyIpIHsNCgkJCQkJJHdoZXJlIC49ICcgZGVzYyc7DQoJCQkJfSBlbHNlIHsNCgkJCQkJJHdoZXJlIC49ICcgYXNjJzsNCgkJCQl9DQoJCQl9DQoJCX0NCg0KCQkvLyBIYW5kbGUgcGFnaW5nDQoJCWlmICgoJGxpbWl0ID4gMCkgJiYgJHNob3dwYWdlbGlua3MpIHsNCgkJCSRycyA9IHNhZmVfcm93cygkZmllbGRzLCAndHhwX2ltYWdlJywgJHdoZXJlIC4nIExJTUlUIDAsJy4kbWF4bGltaXQpOw0KCQkJJG51bXRodW0gPSBjb3VudCgkcnMpOw0KCQkJJG51bVBhZ2VzID0gKCRudW10aHVtID4gMCkgPyBjZWlsKCRudW10aHVtLyRsaW1pdCkgOiAxOw0KCQkJJHRodW1icGFnZSA9ICghZ3BzKCd0cGcnKSkgPyAxIDogZ3BzKCd0cGcnKTsNCgkJCSRvZmZzZXQgPSAoJHRodW1icGFnZSAtIDEpICogJGxpbWl0Ow0KCQkJJHJzID0gc2FmZV9yb3dzKCRmaWVsZHMsICd0eHBfaW1hZ2UnLCAkd2hlcmUgLicgTElNSVQgJy4kb2Zmc2V0LicsJy4kbGltaXQpOw0KCQl9IGVsc2Ugew0KCQkJLy8gTm8gcGFnaW5nIHJlcXVpcmVkDQoJCQkkbnVtUGFnZXMgPSAxOw0KCQkJJHRodW1icGFnZSA9IDE7DQoJCQkkcnMgPSBzYWZlX3Jvd3MoJGZpZWxkcywgJ3R4cF9pbWFnZScsICR3aGVyZSAuJyBMSU1JVCAwLCcuICgoJGxpbWl0PT0wKSA/ICRtYXhsaW1pdCA6ICRsaW1pdCkpOw0KCQl9DQoNCgkJLy8gQ29uc3RydWN0IHRoZSBvdXRwdXQNCgkJJG91dFN0ciA9ICcnOw0KCQlpZigkcnMpIHsNCgkJCWZvcmVhY2goJHJzIGFzICRyb3cpIHsNCgkJCQkkdGh1bWIgPSBodS4kaW1nX2Rpci4nLycgLiAkcm93WydpZCddIC4gJ3QnIC4gJHJvd1snZXh0J107DQoJCQkJJGZ1bGwgPSBodS4kaW1nX2Rpci4nLycgLiAkcm93WydpZCddIC4gJHJvd1snZXh0J107DQoJCQkJaWYgKCRncm91cG5hbWUgPT09ICI/YyIpIHsNCgkJCQkJJGdycCA9ICRyb3dbJ2NhdGVnb3J5J107DQoJCQkJfSBlbHNlIGlmICgkZ3JvdXBuYW1lWzBdID09PSAiPyIpIHsNCgkJCQkJLy8gU3BsaXQgb2ZmIHRoZSBmaWVsZCBuYW1lIGZyb20gdGhlIHF1ZXN0aW9uIG1hcmsNCgkJCQkJJGZpZWxkbmFtZSA9IHN1YnN0cigkZ3JvdXBuYW1lLDEpOw0KCQkJCQlpZiAoaXNzZXQoJHRoaXNhcnRpY2xlWyRmaWVsZG5hbWVdKSkgew0KCQkJCQkJJGdycCA9ICR0aGlzYXJ0aWNsZVskZmllbGRuYW1lXTsNCgkJCQkJfSBlbHNlIHsNCgkJCQkJCSRncnAgPSAnJzsNCgkJCQkJfQ0KCQkJCX0gZWxzZSB7DQoJCQkJCSRncnAgPSAkZ3JvdXBuYW1lOw0KCQkJCX0NCgkJCQkkb3V0U3RyIC49ICc8ZGl2IGNsYXNzPSInIC4kY2VsbGNsYXNzLiAnIj48YSBocmVmPSInLiRmdWxsLiciIHJlbD0ibGlnaHRib3gtJyAuJGdycC4gJyIgdGl0bGU9IicgLiRyb3dbJ2NhcHRpb24nXS4gJyI+PGltZyBzcmM9IicgLiR0aHVtYi4gJyIgYWx0PSInIC4kcm93WydhbHQnXS4gJyIgLz48L2E+Jy5uOw0KDQoJCQkJLy8gQWRkIHRoZSBjYXB0aW9uL2FsdCBpZiByZXF1cmllZA0KCQkJCSRvdXRTdHIgLj0gKCRzaG93YWx0ICYmICRyb3dbJ2FsdCddKSA/ICc8c3BhbiBjbGFzcz0iJyAuJGFsdGNsYXNzLiAnIj4nIC4kcm93WydhbHQnXS4gJzwvc3Bhbj4nIDogJyc7DQoJCQkJJG91dFN0ciAuPSAoJHNob3djYXB0aW9uICYmICRyb3dbJ2NhcHRpb24nXSkgPyAnPHNwYW4gY2xhc3M9IicgLiRjYXB0aW9uY2xhc3MuICciPicgLiRyb3dbJ2NhcHRpb24nXS4gJzwvc3Bhbj4nIDogJyc7DQoNCgkJCQkkb3V0U3RyIC49ICc8L2Rpdj4nLm47DQoJCQl9DQoNCgkJCS8vIEFkZCB0aGUgcGFnaW5nIGZlYXR1cmVzIGlmIHJlcXVpcmVkDQoJCQlpZiAoKCRsaW1pdCA+IDApICYmICRzaG93cGFnZWxpbmtzKSB7DQoJCQkJJG5leHQgPSAoJG51bVBhZ2VzID4gMSAmJiAkdGh1bWJwYWdlICE9ICRudW1QYWdlcyk7DQoJCQkJJHByZXYgPSAoJG51bVBhZ2VzID4gMSAmJiAkdGh1bWJwYWdlID4gMSk7DQoNCgkJCQkvLyBSZXBsYWNlIGFueSBwYWdpbmcgaW5mbyBpbiB0aGUgcXVlcnkgc3RyaW5nDQoJCQkJJHByZXZQYWdlID0gYWRkUXVlcnlzdHJpbmdWYXIoJHByZXRleHRbJ3JlcSddLCAndHBnJywgJHRodW1icGFnZS0xKTsNCgkJCQkkbmV4dFBhZ2UgPSBhZGRRdWVyeXN0cmluZ1ZhcigkcHJldGV4dFsncmVxJ10sICd0cGcnLCAkdGh1bWJwYWdlKzEpOw0KDQoJCQkJJG91dFN0ciAuPSAnPGRpdiBjbGFzcz0iJyAuJG5hdmNsYXNzLiAnIj4nLm47DQoJCQkJJG91dFN0ciAuPSAoJHByZXYpID8gJzxhIGNsYXNzPSInIC4kcHJldmNsYXNzLiAnIiBocmVmPSInIC4kcHJldlBhZ2UuICciPicgLiRwcmV2bGFiZWwuICc8L2E+Jy5uIDogJyc7DQoJCQkJJG91dFN0ciAuPSAoJG5leHQpID8gJzxhIGNsYXNzPSInIC4kbmV4dGNsYXNzLiAnIiBocmVmPSInIC4kbmV4dFBhZ2UuICciPicgLiRuZXh0bGFiZWwuICc8L2E+Jy5uIDogJyc7DQoJCQkJJG91dFN0ciAuPSAnPC9kaXY+JzsNCgkJCX0NCgkJfQ0KCX0NCg0KCXJldHVybiAkb3V0U3RyOw0KfQ0KDQpmdW5jdGlvbiBhZGRRdWVyeXN0cmluZ1ZhcigkdXJsLCAka2V5LCAkdmFsdWUpIHsNCgkkdXJsID0gcmVtb3ZlUXVlcnlzdHJpbmdWYXIoJHVybCwgJGtleSk7DQoJaWYgKHN0cnBvcygkdXJsLCAnPycpID09PSBmYWxzZSkgew0KCQlyZXR1cm4gKCR1cmwgLiAnPycgLiAka2V5IC4gJz0nIC4gJHZhbHVlKTsNCgl9IGVsc2Ugew0KCQlyZXR1cm4gKCR1cmwgLiAnJicgLiAka2V5IC4gJz0nIC4gJHZhbHVlKTsNCgl9DQp9DQpmdW5jdGlvbiByZW1vdmVRdWVyeXN0cmluZ1ZhcigkdXJsLCAka2V5KSB7DQoJJHVybCA9IHByZWdfcmVwbGFjZSgnLyguKikoXD98JiknIC4gJGtleSAuICc9W14mXSs/KCYpKC4qKS9pJywgJyQxJDIkNCcsICR1cmwgLiAnJicpOw0KCSR1cmwgPSBzdWJzdHIoJHVybCwgMCwgLTEpOw0KCXJldHVybiAoJHVybCk7DQp9IjtzOjQ6InR5cGUiO3M6MToiMCI7czozOiJtZDUiO3M6MzI6ImZkZTJkYTUzOWFlYjNmMGQ0YjRiMjY4N2Q4YTY2YjY5Ijt9