# smd_slimbox 0.29b # Image gallery lightbox wrapper using Christophe Beyl's Slimbox # Stef Dawson # http://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: # ..................................................................... YTo5OntzOjQ6Im5hbWUiO3M6MTE6InNtZF9zbGltYm94IjtzOjY6ImF1dGhvciI7czoxMToiU3RlZiBEYXdzb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjE6Imh0dHA6Ly9zdGVmZGF3c29uLmNvbSI7czo3OiJ2ZXJzaW9uIjtzOjU6IjAuMjliIjtzOjExOiJkZXNjcmlwdGlvbiI7czo2MjoiSW1hZ2UgZ2FsbGVyeSBsaWdodGJveCB3cmFwcGVyIHVzaW5nIENocmlzdG9waGUgQmV5bCdzIFNsaW1ib3giO3M6NDoiaGVscCI7czoyOTk5NDoiPHN0eWxlPg0KY29kZSB7Y29sb3I6ICMyMDQ2NmZ9DQpwcmUge3BhZGRpbmc6IDAuNWVtIDFlbTsgYmFja2dyb3VuZDogI2VlZTsgYm9yZGVyOiAxcHggZGFzaGVkICNjY2M7fQ0KaDEsIGgyLCBoMywgaDMgY29kZSB7Zm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0OiBib2xkO30NCmgxLCBoMiwgaDMge21hcmdpbi1sZWZ0OiAtMWVtO30NCmgyLCBoMyB7bWFyZ2luLXRvcDogMmVtO30NCmgxIHtmb250LXNpemU6IDNlbTt9DQpoMiB7Zm9udC1zaXplOiAyZW07fQ0KaDMge2ZvbnQtc2l6ZTogMS41ZW07fQ0KbGkgYSBjb2RlIHtmb250LXdlaWdodDogbm9ybWFsO30NCi5yZXF1aXJlZCwgLndhcm5pbmcge2NvbG9yOnJlZDt9DQojZWd0YWIgdGQsI2VndGFiIHRoIHtwYWRkaW5nOi43ZW07IGJvcmRlcjoxcHggc29saWQgIzg4ODt0ZXh0LWFsaWduOmNlbnRlcjt9DQo8L3N0eWxlPg0KPGgxIGlkPSJ0b3AiPnNtZF9zbGltYm94PC9oMT4NCjxwPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzYWdlLCBidWdzLCBmZWF0dXJlcyBldGMsIHBsZWFzZSA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9MjA3MTQiPnZpc2l0IHRoZSBmb3J1bSB0aHJlYWQ8L2E+LjwvcD4NCg0KPHAgY2xhc3M9InJlcXVpcmVkIj5SZXF1aXJlcyA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vZG93bmxvYWRzL3NtZF9saWJfdjAuMjIudHh0Ij5zbWRfbGliIHYwLjIyPC9hPiB0byBiZSBpbnN0YWxsZWQgYW5kIGFjdGl2YXRlZC48cD4NCg0KPGgyIGlkPSJjb250ZW50cyI+Q29udGVudHM8L2gyPg0KPHVsPg0KPGxpPjxhIGhyZWY9IiNvdmVydmlldyI+T3ZlcnZpZXc8L2E+PC9saT4NCjxsaT48YSBocmVmPSIjaW5zdGFsbCI+SW5zdGFsbGF0aW9uPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iI2luYyI+TG9hZGluZyBpbmNsdWRlZCBmaWxlczogc21kX3NsaW1ib3hfaW5jPC9hPg0KPHVsPg0KPGxpPjxhIGhyZWY9IiNqc2RpciI+anNkaXIgYW5kIGNzc2RpcjwvYT48L2xpPg0KPGxpPjxhIGhyZWY9IiNzY3JpcHRzIj5zY3JpcHRzPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iI3NraXAiPnNraXA8L2E+PC9saT4NCjwvdWw+PC9saT4NCjxsaT48YSBocmVmPSIjc2xpbWJveCI+VGhlIHBsdWdpbjogc21kX3NsaW1ib3g8L2E+DQo8dWw+DQo8bGk+PGEgaHJlZj0iI2NhdGVnb3J5Ij5jYXRlZ29yeTwvYT48L2xpPg0KPGxpPjxhIGhyZWY9IiNzdWJjYXRzIj5zdWJjYXRzPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iI2NhdGxhYmVsIj5jYXRsYWJlbDwvYT48L2xpPg0KPGxpPjxhIGhyZWY9IiNpbWFnZWlkIj5pbWFnZWlkPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iI2ltYWdlY2FwdGlvbiI+aW1hZ2VjYXB0aW9uPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iI3RodW1iIj50aHVtYjwvYT48L2xpPg0KPGxpPjxhIGhyZWY9IiNsaW1pdCI+bGltaXQ8L2E+PC9saT4NCjxsaT48YSBocmVmPSIjbWF4bGltaXQiPm1heGxpbWl0PC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iI29yZGVyYnkiPm9yZGVyYnk8L2E+PC9saT4NCjxsaT48YSBocmVmPSIjc2hvd2NhcHRpb24iPnNob3djYXB0aW9uPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iI3Nob3dhbHQiPnNob3dhbHQ8L2E+PC9saT4NCjxsaT48YSBocmVmPSIjdGV4dHBvcyI+dGV4dHBvczwvYT48L2xpPg0KPGxpPjxhIGhyZWY9IiNzaG93cGFnZWxpbmtzIj5zaG93cGFnZWxpbmtzPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iI2dhbGxlcnlpZCI+Z2FsbGVyeWlkPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iI3RodW1ic2l6ZSI+dGh1bWJzaXplPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iI3ByZXZsYWJlbCI+cHJldmxhYmVsPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iI25leHRsYWJlbCI+bmV4dGxhYmVsPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iI3dyYXB0YWciPndyYXB0YWc8L2E+PC9saT4NCjxsaT48YSBocmVmPSIjY2VsbGNsYXNzIj5jZWxsY2xhc3M8L2E+PC9saT4NCjxsaT48YSBocmVmPSIjY2FwdGlvbmNsYXNzIj5jYXB0aW9uY2xhc3M8L2E+PC9saT4NCjxsaT48YSBocmVmPSIjYWx0Y2xhc3MiPmFsdGNsYXNzPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iI25hdmNsYXNzIj5uYXZjbGFzczwvYT48L2xpPg0KPGxpPjxhIGhyZWY9IiNwcmV2Y2xhc3MiPnByZXZjbGFzczwvYT48L2xpPg0KPGxpPjxhIGhyZWY9IiNuZXh0Y2xhc3MiPm5leHRjbGFzczwvYT48L2xpPg0KPGxpPjxhIGhyZWY9IiNsaWJjaGVjayI+bGliY2hlY2s8L2E+PC9saT4NCjwvdWw+PC9saT4NCjxsaT48YSBocmVmPSIjZXhhbXBsZXMiPkV4YW1wbGVzPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iI3N0eWxlIj5TdHlsaW5nPC9hPjwvbGk+DQo8L3VsPg0KDQo8aDIgaWQ9Im92ZXJ2aWV3Ij5PdmVydmlldzwvaDI+DQo8cD5ZZWFoLCB5ZWFoIDxlbT5hbm90aGVyPC9lbT4gbGlnaHRib3gtc3R5bGUgaW1hZ2UgZ2FsbGVyeSEgQnV0IHRoaXMgdGltZSB1c2luZyA8YSBocmVmPSJodHRwOi8vd3d3LmRpZ2l0YWxpYS5iZS9zb2Z0d2FyZS9zbGltYm94Ij5DaHJpc3RvcGhlIEJleWwnczwvYT4gdWx0cmEtbGlnaHR3ZWlnaHQgU2xpbWJveCAoZGlldCBjb2tlIHZlcnNpb24gb2YgbGlnaHRib3gpIGFuZCBtb290b29scy48L3A+DQo8cD5GZWF0dXJlczo8L3A+DQo8dWw+DQo8bGk+VGh1bWJuYWlsIGdhbGxlcmllcyBkZXJpdmVkIGZyb20gbmFtZWQgY2F0ZWdvcmllcywgaW1hZ2UgSURzLCBhcnRpY2xlIGZpZWxkcyBvciBjdXN0b20gbGlzdHM8L2xpPg0KPGxpPkFyYml0cmFyeSBpbmNsdXNpb24vZXhjbHVzaW9uIG9mIGNhdGVnb3JpZXMgb3IgaW1hZ2UgSURzPC9saT4NCjxsaT5TdWJjYXRlZ29yaWVzOiBzcGVjaWZ5IGEgcGFyZW50IGFuZCBhbGwgY2hpbGQgY2F0ZWdvcmllcyBhcmUgYXV0b21hdGljYWxseSBpbmNsdWRlZDwvbGk+DQo8bGk+U2hvdyBjYXB0aW9uL2FsdCBpbiB2YXJpb3VzIGxvY2F0aW9ucyBuZWFyIHRoZSB0aHVtYm5haWw8L2xpPg0KPGxpPlBhZ2luZyBhbmQgbXVsdGlwbGUgZ2FsbGVyaWVzIHBlciBwYWdlPC9saT4NCjxsaT48YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9MjA2OTIiPk11bHRpLWxpbmd1YWwgUGFjayAoTUxQKTwvYT4gYXdhcmU8L2xpPg0KPC91bD4NCg0KPHA+SXQgcGxhZ2lhcmlzZXMgaWRlYXMgZnJvbSA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9NTE3NiI+Um9iIFNhYmxlJ3MgcnNzX3RodW1icG9wPC9hPiBhbmQgdmFyaW91cyBUWFBlcnMgaW4gdGhlIGNvbW11bml0eSB3aG8gaGF2ZSBzdWdnZXN0ZWQgZmVhdHVyZXMgYW5kIGltcHJvdmVtZW50cy4gTWFueSB0aGFua3MgdG8gYWxsIHdobyBoYXZlIGhlbHBlZCBjcmFmdCB0aGlzIHBsdWdpbi48L3A+DQoNCjxoMiBpZD0iaW5zdGFsbCI+SW5zdGFsbGF0aW9uPC9oMj4NCg0KPHA+RW5zdXJlIHRoYXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBqcyBmb2xkZXIgKDxjb2RlPm1vb3Rvb2xzLmpzPC9jb2RlPiBhbmQgPGNvZGU+c2xpbWJveC5qczwvY29kZT4pIGFuZCB0aGUgY3NzIGZvbGRlciAoPGNvZGU+c2xpbWJveC5jc3M8L2NvZGU+IGFuZCA0IGltYWdlcykgYXJlIHVwbG9hZGVkIHRvIHlvdXIgc2VydmVyLiBZb3UgY2FuIHB1dCB0aGUgZGlyZWN0b3JpZXMgaW4gdGhlIHRleHRwYXR0ZXJuIHJvb3QgZm9sZGVyIG9yIHNvbWV3aGVyZSBlbHNlIG9mIHlvdXIgY2hvaWNlLiBJdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgd2hlcmUgeW91IHB1dCB0aGVtLCB5b3UganVzdCBoYXZlIHRvIHRlbGwgdGhlIHBsdWdpbiB3aGVyZSBpdCBpcy48L3A+DQoNCjxwPlRoZW4gbWFrZSBzdXJlIHRoYXQgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2Rvd25sb2Fkcy9zbWRfbGliX3YwLjIxYy50eHQiPnNtZF9saWI8L2E+IGlzIGluc3RhbGxlZCBhbmQgYWN0aXZhdGVkLiBGaW5hbGx5LCBpbnN0YWxsIHRoZSBzbWRfc2xpbWJveCBwbHVnaW4gYW5kIGFjdGl2YXRlIGl0LjwvcD4NCg0KPHA+T25jZSBpbnN0YWxsZWQsIHRoaXMgcGx1Z2luIGFkZHMgdHdvIHRhZ3MuIFRoZSBmaXJzdCAoPGEgaHJlZj0iI2luYyI+c21kX3NsaW1ib3hfaW5jPC9hPikgdXN1YWxseSBnb2VzIGluIHRoZSAmbHQ7aGVhZCZndDsgc2VjdGlvbiBvZiB5b3VyIHBhZ2UgYW5kIGxvYWRzIHRoZSByZXF1aXJlZCBsaWJyYXJpZXMgJiM4MjExOyB0aGUganMvY3NzIGZpbGVzIHlvdSBqdXN0IHVwbG9hZGVkIHRvIHlvdXIgc2VydmVyLiBUaGUgc2Vjb25kICg8YSBocmVmPSIjc2xpbWJveCI+c21kX3NsaW1ib3g8L2E+KSBpcyB0aGUgYWN0dWFsIHBsdWdpbiB0aGF0IGRpc3BsYXlzIHlvdXIgaW1hZ2UgZ2FsbGVyeSAob3IgZ2FsbGVyaWVzIGlmIHlvdSdyZSBmZWVsaW5nIGFkdmVudHVyb3VzKS48L3A+DQoNCjxwPkEgcXVpY2sgd29yZCBhYm91dCBob3cgaXQgYWxsIHdvcmtzOiB0aGUgcGx1Z2luIG9wdGlvbnMgZ292ZXJuIHdoaWNoIHRodW1ibmFpbHMgdG8gdXNlIGFuZCBob3cgdGhleSBhcmUgZGlzcGxheWVkIG9ubHkuIE9uY2UgdGhlIHRodW1icyBhcmUgY2xpY2tlZCwgY29udHJvbCBpcyBoYW5kZWQgb3ZlciB0byBzbGltYm94IGFuZCBtb290b29scyB0byBkbyB0aGUgZmFuY3kgd29yay4gVGhlcmVmb3JlLCBpZiB5b3Ugd2lzaCB0byBjb25maWd1cmUgdGhlIGxvb2sgb2YgdGhlICJsaWdodGJveCIgcGFydCwgeW91IG5lZWQgdG8gZWRpdCA8Y29kZT5zbGltYm94LmpzPC9jb2RlPiBhbmQvb3IgPGNvZGU+c2xpbWJveC5jc3M8L2NvZGU+LiBNb3JlIGluZm8gY2FuIGJlIGZvdW5kIG9uIDxhIGhyZWY9Imh0dHA6Ly93d3cuZGlnaXRhbGlhLmJlL3NvZnR3YXJlL3NsaW1ib3giPkNocmlzdG9waGUgQmV5bCdzIHBhZ2U8L2E+LjwvcD4NCg0KPHA+QWxzbywgaWYgeW91IGFscmVhZHkgdXNlIG1vb3Rvb2xzIGZvciB5b3VyIHBhZ2UgeW91IGRvbid0IG5lZWQgdG8gdXBsb2FkIGl0IGFnYWluLiBKdXN0IG1ha2Ugc3VyZSB0aGUgdmVyc2lvbiB5b3UgdXNlIGhhcyB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IHBsdXMgdGhlICJmeCIgYW5kICJ3aW5kb3ciIG1vZHVsZXMgbGlzdGVkIG9uIENocmlzdG9waGUncyBwYWdlLiBCZSBjYXJlZnVsIGlmIHlvdSB1c2Ugb3RoZXIgamF2YXNjcmlwdCBsaWJyYXJpZXMgc3VjaCBhcyBqUXVlcnkgYmVjYXVzZSB0aGV5IG1heSBjbGFzaC4gU2VlIDxhIGhyZWY9Imh0dHA6Ly9kb2NzLmpxdWVyeS5jb20vVXNpbmdfalF1ZXJ5X3dpdGhfT3RoZXJfTGlicmFyaWVzIj5ob3cgdG8gdXNlIGpRdWVyeSB3aXRoIG90aGVyIGxpYnJhcmllczwvYT4gZm9yIGFuIGV4YW1wbGUgb2YgaW50ZWdyYXRpbmcgdGhlIHR3by48L3A+DQoNCjxoMiBpZD0iaW5jIj5Mb2FkaW5nIGluY2x1ZGUgZmlsZXM6IHNtZF9zbGltYm94X2luYzwvaDI+DQo8cD5CZWZvcmUgeW91IGNhbiB1c2Ugc21kX3NsaW1ib3ggeW91IGhhdmUgdG8gZW5zdXJlIHRoYXQgdGhlIHBsdWdpbiBrbm93cyB3aGVyZSB0IG9maW5kIHRoZSBleHRlcm5hbCBpbmNsdWRlL2xpYnJhcnkgZmlsZXMuIFlvdSBkbyB0aGlzIHdpdGggPGNvZGU+c21kX3NsaW1ib3hfaW5jPC9jb2RlPi4gTm90ZSB0aGF0IHRoZSBwbHVnaW4gZG9lcyBub3QgY2hlY2sgdGhhdCB5b3UgaGF2ZSBnaXZlbiBpdCBjb3JyZWN0IGZpbGUgbG9jYXRpb25zIHRvIHZhbGlkLCByZWFkYWJsZSBmaWxlcyBzbyBpZiB5b3UgaGF2ZSBwcm9ibGVtcyBtYWtpbmcgaXQgd29yaywgY2hlY2sgdGhlIHNvdXJjZSBjb2RlIG9mIHRoZSBwYWdlIHRvIHNlZSBpZiB5b3UncmUgbG9hZGluZyB3aGF0IHlvdSB0aGluayB5b3UncmUgbG9hZGluZyBmcm9tIHRoZSBjb3JyZWN0IHBsYWNlcyE8L3A+DQoNCjxoMyBpZD0ianNkaXIiPkF0dHJpYnV0ZXM6IGpzZGlyIGFuZCBjc3NkaXI8L2gzPg0KPHA+QXNzdW1pbmcgeW91J3ZlIHB1dCB0aGUganMgYW5kIGNzcyBkaXJlY3RvcmllcyBpbiB5b3VyIHRleHRwYXR0ZXJuIHJvb3QgKGkuZS4gYXQgdGhlIHNhbWUgbGV2ZWwgYXMgdGhlIDxjb2RlPmltYWdlczwvY29kZT4sIDxjb2RlPmZpbGVzPC9jb2RlPiBhbmQgPGNvZGU+dGV4dHBhdHRlcm48L2NvZGU+IGRpcmVjdG9yaWVzKSwgYWRkIHRoaXMgc29tZXdoZXJlIGluIHRoZSAmbHQ7aGVhZCZndDsgb2YgdGhlIHBhZ2UgdGhhdCB5b3Ugd2FudCB5b3VyIGdhbGxlcnk6PC9wPg0KDQo8cHJlPiZsdDt0eHA6c21kX3NsaW1ib3hfaW5jIGpzZGlyPSIvanMiIGNzc2Rpcj0iL2NzcyIgLyZndDs8L3ByZT4NCg0KPHA+SWYgeW91IGhhdmUgdGhlIGxpYnJhcmllcyBlbHNld2hlcmUsIGNoYW5nZSB3aGVyZSB0aGUgcGx1Z2luIGxvb2tzIGZvciB0aGUgbGlicmFyaWVzIGJ5IGFkanVzdGluZyB0aGUgdHdvIG9wdGlvbnMuIFBheSBhdHRlbnRpb24gdG8gdGhlIGZvcndhcmQgc2xhc2ggYXQgdGhlIHN0YXJ0OyB3aXRob3V0IGl0LCB0aGUgc2NyaXB0IHdpbGwgbG9vayBmb3IgdGhlIGZpbGVzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGFydGljbGUvc2VjdGlvbiB3aGljaCBtYXkgKG9yIG1heSBub3QpIGJlIHdoYXQgeW91IHdhbnQuPC9wPg0KDQo8aDMgaWQ9InNjcmlwdHMiPkF0dHJpYnV0ZTogc2NyaXB0czwvaDM+DQo8cD5JZiB5b3Ugd2FudCBtb3JlIGNvbnRyb2wgb3ZlciB0aGUgZmlsZSBsb2NhdGlvbnMsIHlvdSBoYXZlIHR3byBtb3JlIG9wdGlvbnMgYXZhaWxhYmxlLiBUaGUgZmlyc3QgaXMgPGNvZGU+c2NyaXB0czwvY29kZT4uIFRoaXMgdGFrZXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB1cCB0byAzIGFyZ3VtZW50cyBpbiB0aGlzIG9yZGVyOjwvcD4NCjx1bD4NCjxsaT5tb290b29scy5qcyBsb2NhdGlvbjwvbGk+DQo8bGk+c2xpbWJveC5qcyBsb2NhdGlvbjwvbGk+DQo8bGk+c2xpbWJveC5jc3MgbG9jYXRpb248L2xpPg0KPC91bD4NCg0KPHA+VGhlIG9yZGVyIGlzIGltcG9ydGFudDogbW9vdG9vbHMgbXVzdCBhcHBlYXIgb24gdGhlIHBhZ2UgYmVmb3JlIHNsaW1ib3guanMhIFNvIGlmIHlvdSBoYXZlIHlvdXIgc2NyaXB0cyBpbiBkaWZmZXJlbnQgZGlyZWN0b3JpZXMgb3IgaGF2ZSByZW5hbWVkIHRoZSBmaWxlcywgeW91IGNvdWxkIGRvIHRoaXMgaW5zdGVhZCBvZiB0aGUgPGNvZGU+Y3NzZGlyPC9jb2RlPiBhbmQgPGNvZGU+anNkaXI8L2NvZGU+IG9wdGlvbnM6PC9wPg0KDQo8cHJlPiZsdDt0eHA6c21kX3NsaW1ib3hfaW5jIHNjcmlwdHM9Ii9zY3JpcHRzL21vb3Rvb2xzLmpzLCAvc2JveC9zbGltYm94LmpzLCAvc2Jjc3Mvc2xpbWJveC5jc3MiIC8mZ3Q7PC9wcmU+DQoNCjxwPlRoZSB0aHJlZSBvcHRpb25zIGNhbiBlaXRoZXIgYmUgZGlyZWN0IGZpbGUgcGF0aHMsIGFzIGluIHRoZSBleGFtcGxlIGFib3ZlLCBvciBmdWxsIFhIVE1MIHRhZ3MgaW5jbHVkaW5nIDxjb2RlPiZsdDtzY3JpcHQmZ3Q7PC9jb2RlPiBvciA8Y29kZT4mbHQ7bGluayZndDs8L2NvZGU+dGFncy4gWW91IGNhbiBtaXggYW5kIG1hdGNoIHRoZSBvcHRpb25zIGluIGFueSB3YXkgeW91IGxpa2UsIGFzIGxvbmcgYXMgdGhlIHRvdGFsIG51bWJlciBvZiBzY3JpcHRzIHlvdSB0ZWxsIHRoZSB0YWcgdG8gbG9hZCBkb2Vzbid0IGV4Y2VlZCAzLiBTbyBhbiBlcXVpdmFsZW50IHRvIHRoZSBhYm92ZSBpczo8L3A+DQoNCjxwcmU+Jmx0O3R4cDpzbWRfc2xpbWJveF9pbmMgc2NyaXB0cz0iL3NjcmlwdHMvbW9vdG9vbHMuanMsIC9zYm94L3NsaW1ib3guanMiIGNzc2Rpcj0iL3NiY3NzIiAvJmd0OzwvcHJlPg0KDQo8aDMgaWQ9InNraXAiPkF0dHJpYnV0ZTogc2tpcDwvaDM+DQo8cD5JZiB5b3Ugd2lzaCB0byBsb2FkIHNvbWUgb3IgYWxsIG9mIHRoZSBzY3JpcHRzICJvdXRzaWRlIiB0aGUgc21kX3NsaW1ib3hfaW5jIGZ1bmN0aW9uIHlvdSBjYW4gdXNlIHRoZSA8Y29kZT5za2lwPC9jb2RlPiBvcHRpb24gdG8gdGVsbCBpdCBob3cgbWFueSB5b3UgaGF2ZSBsb2FkZWQuIElmLCBmb3IgZXhhbXBsZSwgeW91IGhhdmUgc3RtX2phdmFzY3JpcHQgaW5zdGFsbGVkIHlvdSBjb3VsZCBkbzo8L3A+DQoNCjxwcmU+Jmx0O3R4cDpqcyBuPSJtb290b29scyIgLyZndDsNCiZsdDt0eHA6c21kX3NsaW1ib3hfaW5jIHNraXA9IjEiIHNjcmlwdHM9IiwgL3Nib3gvc2xpbWJveC5qcywgL3NiY3NzL3NsaW1ib3guY3NzIiAvJmd0OzwvcHJlPg0KDQo8cD5Ob3RlIHRoZSBlbXB0eSBvcHRpb24gYXQgdGhlIHN0YXJ0IGJlZm9yZSB0aGUgY29tbWEuIFlvdSBkb24ndCBoYXZlIHRvIGRvIHRoYXQgKGJlY2F1c2UgPGNvZGU+c2tpcDwvY29kZT4gd2lsbCBqdW1wIG92ZXIgaXQgZm9yIHlvdSkgYnV0IGlmIHlvdSBsaWtlIHRvIG1ha2UgaXQgb2J2aW91cywgaXQgZG9lcyBubyBoYXJtLiBVc2luZyB0aGUgc29sZSBvcHRpb24gPGNvZGU+c2tpcD0iMyI8L2NvZGU+IG1lYW5zICJJJ3ZlIGxvYWRlZCB0aGVtIGFsbCBteXNlbGYsIEkga25vdyB3aGF0IEknbSBkb2luZyIgOi0pPC9wPg0KDQo8cD5PbmUgbW9yZSB0aGluZyB3aXRoIHRoaXMgZmVhdHVyZTogVFhQIGRvZXMgbm90IGFsbG93IHlvdSB0byBkaXJlY3RseSBlbWJlZCBvdGhlciB0YWdzIGFzIGF0dHJpYnV0ZXMgKHNvIHVuZm9ydHVuYXRlbHkgPGNvZGU+c2NyaXB0cz0iJmx0O3R4cDpjc3MgLyZndDsiPC9jb2RlPiBmYWlscykuIElmIHlvdSBhYnNvbHV0ZWx5IG11c3QgZG8gaXQsIHlvdSBjYW4gY2hlYXQgKHNlZSBXZXQncyBleGNlbGxlbnQgcG9zdCBvbiA8YSBocmVmPSJodHRwOi8vYXdhc3Rlb2Z3b3Jkcy5jb20vYXJ0aWNsZS90ZXh0cGF0dGVybi10YWdzLWluLXRhZ3MtdGhlLWdvcmRpYW4ta25vdCI+dGFncyBpbiB0YWdzPC9hPiBmb3IgbW9yZSBkZXRhaWxzKSBieSBkcm9wcGluZyBpbnRvIFBIUCBhbmQgZG9pbmcgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZzo8L3A+DQoNCjxwcmU+Jmx0O3R4cDpzbWRfc2xpbWJveF9pbmMgY3NzZGlyPSIvY3NzIiBzY3JpcHRzPSIvc2NyaXB0cy9tb290b29scy5qcywgJmx0O3R4cDpwaHAmZ3Q7ZWNobyBqcyhhcnJheSggJ24nID0+ICdzbGltYm94JykpOyZsdDsvdHhwOnBocCZndDsgLyZndDs8L3ByZT4NCg0KPHA+SWYgeW91IHN1cHBseWluZyB0aHVtYm5haWxzIGluIFJTUyBmZWVkcyBvciBqdXN0IGRvbid0IHdhbnQgdG8gdXNlIHNtZF9zbGltYm94X2luYywgeW91IGNhbiB0dXJuIGl0IG9mZiBieSB1c2luZyB0aGUgPGEgaHJlZj0iI2xpYmNoZWNrIj5saWJjaGVjaz0iMCI8L2E+IHRvIHRoZSBzbWRfc2xpbWJveCB0YWcuPC9wPg0KDQo8aDIgaWQ9InNsaW1ib3giPlRoZSBwbHVnaW46IHNtZF9zbGltYm94PC9oMj4NCg0KPHA+T25jZSB0aGUgPGEgaHJlZj0iI2luYyI+c2NyaXB0cyBhcmUgbG9hZGVkPC9hPiwgeW91IGFyZSBmcmVlIHRvIHVzZSA8Y29kZT4mbHQ7dHhwOnNtZF9zbGltYm94IC8mZ3Q7PC9jb2RlPiB0byBkaXNwbGF5IGFuIGltYWdlIGdhbGxlcnkuIFdpdGhvdXQgYW55IG9wdGlvbnMgaXQgZGlzcGxheXMgZXZlcnkgaW1hZ2UgaW4geW91ciBlbnRpcmUgY29sbGVjdGlvbiBhbmQgd29uJ3QgbG9vayB2ZXJ5IHByZXR0eSAodGhvdWdoIHlvdSBjYW4gaGVscCBhIGJpdCBieSBzdGFydGluZyB3aXRoIHRoZSA8YSBocmVmPSIjc3R5bGUiPmV4YW1wbGUgQ1NTPC9hPiBnaXZlbiBsYXRlcikuIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyB0YW1lIHRoZSBwbHVnaW4gYSBsaXR0bGU6PC9wPg0KDQo8aDMgaWQ9ImNhdGVnb3J5Ij48Y29kZT5jYXRlZ29yeTwvY29kZT48L2gzPg0KPHA+QSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBpbWFnZSBjYXRlZ29yeSBuYW1lcyB0byBzaG93LjwvcD4NCg0KPGg0Pk9wdGlvbnM8L2g0Pg0KPHVsPg0KPGxpPjxjb2RlPj9jPC9jb2RlPjxiciAvPg0KdXNlIHRoZSBjdXJyZW50IGdsb2JhbCAoYXJ0aWNsZSkgY2F0ZWdvcnkgYXMgdGhlIG5hbWUgb2YgYW4gaW1hZ2UgY2F0ZWdvcnk8L2xpPg0KPGxpPjxjb2RlPiFjPC9jb2RlPjxiciAvPg0KdXNlcyBldmVyeXRoaW5nIGV4Y2VwdCB0aGUgY3VycmVudCBnbG9iYWwgY2F0ZWdvcnk8L2xpPg0KPGxpPjxjb2RlPj9zPC9jb2RlPjxiciAvPg0KdXNlIHRoZSBjdXJyZW50IFRYUCBzZWN0aW9uIGFzIHRoZSBuYW1lIG9mIGFuIGltYWdlIGNhdGVnb3J5PC9saT4NCjxsaT48Y29kZT4hczwvY29kZT48YnIgLz4NCnVzZXMgZXZlcnl0aGluZyBleGNlcHQgdGhlIGN1cnJlbnQgc2VjdGlvbjwvbGk+DQo8bGk+PGNvZGU+P3Q8L2NvZGU+PGJyIC8+DQp1c2UgdGhlIGN1cnJlbnQgYXJ0aWNsZSdzIHVybC10aXRsZSBhcyB0aGUgbmFtZSBvZiBhbiBpbWFnZSBjYXRlZ29yeTwvbGk+DQo8bGk+PGNvZGU+IXQ8L2NvZGU+PGJyIC8+DQp1c2VzIGFsbCB1cmwtdGl0bGVzIGV4Y2VwdCB0aGUgY3VycmVudCBhcnRpY2xlIChwcm9iYWJseSBub3QgbXVjaCB1c2UhKTwvbGk+DQo8bGk+PGNvZGU+P2lkPC9jb2RlPjxiciAvPg0KdXNlIHRoZSBjdXJyZW50IGFydGljbGUncyBJRCBhcyB0aGUgbmFtZSBvZiBhbiBpbWFnZSBjYXRlZ29yeS4gVGhlIGNhdGVnb3J5IG5hbWUgaXMgbWFkZSB1cCBvZiB0aGUgPGEgaHJlZj0iI2NhdGxhYmVsIj5jYXRsYWJlbDwvYT4gb3B0aW9uIGFuZCB0aGUgSUQgc28sIGJ5IGRlZmF1bHQsIGl0IHdpbGwgYmUgYXJ0aWNsZS08Y29kZT5JRDwvY29kZT4uIFVzZWZ1bCB0byBtYWtlIGEgcGVyLWFydGljbGUgaW1hZ2UgZ2FsbGVyeTwvbGk+DQo8bGk+PGNvZGU+IWlkPC9jb2RlPjxiciAvPg0KdXNlcyBhbGwgaW1hZ2UgSURzIGV4Y2VwdCB0aGUgY3VycmVudCBhcnRpY2xlPC9saT4NCjxsaT48Y29kZT4/ZmllbGRuYW1lPC9jb2RlPjxiciAvPg0KbG9va3MgaW4gdGhlIGdpdmVuIGZpZWxkbmFtZSBvZiB0aGUgY3VycmVudCBhcnRpY2xlIGFuZCB0cmVhdHMgdGhlIGNvbnRlbnRzIGFzIGEgbGlzdCBvZiBjYXRlZ29yaWVzLiBEZXNpZ25lZCBwcmltYXJpbHkgZm9yIHVzZSB3aXRoIGN1c3RvbSBmaWVsZHMgKGUuZy4gPGNvZGU+P2N1c3RvbTE8L2NvZGU+KSwgaXQgY291bGQgYWxzbyBiZSBhbnkgb3RoZXIgZmllbGQgKG9yIGZpZWxkcykgZnJvbSB5b3VyIGFydGljbGVzIChlLmcuIDxjb2RlPj9leGNlcnB0PC9jb2RlPiBvciA8Y29kZT4/Y2F0ZWdvcnkxPC9jb2RlPiBvciA8Y29kZT4/a2V5d29yZHM8L2NvZGU+IG9yIDxjb2RlPj9hdXRob3JpZDwvY29kZT4sIGV0YykuIEJlIHdhcm5lZDogaWYgeW91IHVzZSA8Y29kZT4/Ym9keTwvY29kZT4gb3Igc29tZXRoaW5nIGVxdWFsbHkgb3V0cmFnZW91cywgY2hhbmNlcyBhcmUgdGhlIHBsdWdpbiB3aWxsIGV4cGxvZGU8L2xpPg0KPC91bD4NCg0KPHA+VG8gbmVnYXRlIGFueSBjYXRlZ29yeSBzZWxlY3Rpb24sIHVzZSA8Y29kZT4hY2F0ZWdvcnk8L2NvZGU+IG9yIDxjb2RlPiFmaWVsZF9uYW1lPC9jb2RlPi4gSWYgeW91IGxpc3Qgc3BlY2lmaWMgaW1hZ2UgY2F0ZWdvcmllcyAoZS5nLiA8Y29kZT4hbGFuZHNjYXBlLCAhYmlyZHM8L2NvZGU+KSB0aG9zZSBjYXRlZ29yaWVzIHdpbGwgYmUgZXhjbHVkZWQuIElmIHlvdSBzcGVjaWZ5IGEgZmllbGQgbmFtZSBzdWNoIGFzIDxjb2RlPiFrZXl3b3JkczwvY29kZT4gb3IgPGNvZGU+IWN1c3RvbTE8L2NvZGU+LCB0aGUgY29udGVudHMgb2YgdGhhdCBmaWVsZCB3aWxsIGJlIHJlYWQgYW5kIHRoZSBsaXN0IG9mIGltYWdlIGNhdGVnb3JpZXMgZm91bmQgdGhlcmUgd2lsbCBiZSBleGNsdWRlZC48L3A+DQoNCjxwPk5vdGUgdGhhdCBpZiB5b3Ugc3BlY2lmeSBhIGZpZWxkIG5hbWUgYW5kIHRoYXQgZmllbGQgaW4gdGhlIGFydGljbGUgaXMgZW1wdHksIHRoZSBuYW1lIHdpbGwgYmUgdHJlYXRlZCBhcyBpZiBpdCB3YXMgYW4gYWN0dWFsIGltYWdlIGNhdGVnb3J5LiBTbyBpZiB5b3Ugc3BlY2lmaWVkIDxjb2RlPj9rZXl3b3JkczwvY29kZT4gYW5kIHRoZSBrZXl3b3JkcyBmaWVsZCBpbiB0aGUgY3VycmVudCBhcnRpY2xlIHdhcyBlbXB0eSwgaXQgd291bGQgbG9vayBmb3IgYW4gaW1hZ2UgY2F0ZWdvcnkgbmFtZWQgImtleXdvcmRzIi48L3A+DQoNCjxwPkFsc28gbm90ZSB0aGF0LCByZWdhcmRsZXNzIG9mIHRoZSBvcmRlciB5b3UgbGlzdCB0aGVtLCBhbGwgJ3Bvc2l0aXZlcycgd2lsbCBiZSBwcm9jZXNzZWQgZmlyc3QsIHRoZW4gYW55IGV4Y2x1c2lvbnMgYXBwbGllZC48L3A+DQoNCjxoMyBpZD0ic3ViY2F0cyI+PGNvZGU+c3ViY2F0czwvY29kZT48L2gzPg0KPHA+QXV0b21hdGljYWxseSBpbmNsdWRlcyBhbGwgc3ViLWNhdGVnb3JpZXMgb2YgdGhlIGNob3NlbiBpbWFnZSBjYXRlZ29yaWVzLjwvcD4NCjxoND5PcHRpb25zPC9oND4NCjx1bD4NCjxsaT48Y29kZT4xPC9jb2RlPjxiciAvPg0Kc3dpdGNoZXMgdGhlIG9wdGlvbiBvbi4gSXQgaXMgbWlzc2luZyAoaS5lLiBvZmYpIGJ5IGRlZmF1bHQ8L2xpPg0KPC91bD4NCg0KPGgzIGlkPSJjYXRsYWJlbCI+PGNvZGU+Y2F0bGFiZWw8L2NvZGU+PC9oMz4NCjxwPnRoZSBsYWJlbCB1c2VkIGluIGZyb250IG9mIHRoZSBjYXRlZ29yeSBpZiB0aGUgIj9pZCIgb3IgIiFpZCIgPGEgaHJlZj0iI2NhdGVnb3J5Ij5jYXRlZ29yeTwvYT4gb3B0aW9uIGlzIHVzZWQ7IGRlZmF1bHQ6ICJhcnRpY2xlLSI8L3A+DQoNCjxoMyBpZD0iaW1hZ2VpZCI+PGNvZGU+aW1hZ2VpZDwvY29kZT48L2gzPg0KPHA+QSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBpbWFnZSBJRHMgdG8gc2hvdy4gVGhlc2UgYXJlIGFkZGVkIHRvIGFueSBpbWFnZXMgZnJvbSB0aGUgPGEgaHJlZj0iI2NhdGVnb3J5Ij5jYXRlZ29yeTwvYT4gb3B0aW9uIEJFRk9SRSBhbnkgZXhjbHVzaW9ucyBhcmUgYXBwbGllZC48L3A+DQoNCjxwPkFzIHdpdGggdGhlIGNhdGVnb3J5IG9wdGlvbiwgeW91IGNhbiBhbHNvIHVzZSAiP2lkIiBhbmQgIj9maWVsZG5hbWUiIHdoaWNoIHdpbGwgcGljayB1cCBpbWFnZSBJRHMgZnJvbSB0aGUgZ2l2ZW4gZmllbGRuYW1lIG9mIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIGFydGljbGUuIEludGVyZXN0aW5nIGlmIHlvdSBjaG9vc2UgPGNvZGU+P2FydGljbGVfaW1hZ2U8L2NvZGU+IGJlY2F1c2UgeW91IGNhbiBtYWtlIHlvdXIgYXJ0aWNsZSBpbWFnZSB2aWV3YWJsZSBpbiBhIGxpZ2h0Ym94ISBJdCBhbHNvIHN1cHBvcnRzIElEIGFuZCBmaWVsZCBuZWdhdGlvbiB1c2luZyB0aGUgc2FtZSB0ZXJtaW5vbG9neSBhcyB0aGUgY2F0ZWdvcnkgb3B0aW9uLjwvcD4NCg0KPGgzIGlkPSJpbWFnZWNhcHRpb24iPjxjb2RlPmltYWdlY2FwdGlvbjwvY29kZT48L2gzPg0KPHA+VGhlIHRleHQgdG8gZGlzcGxheSB1bmRlciB0aGUgbGFyZ2Ugc2xpbWJveCBpbWFnZS4gSXQgY2FuIGJlIGFueSBmaXhlZCBzdHJpbmcgKHJhdGhlciBwb2ludGxlc3MhKSBvciBhIGNvbWJpbmF0aW9uIG9mIGZpeGVkIHRleHQgYW5kIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyB0byBwdWxsIHRoZSByZWxldmFudCBmaWVsZCBmcm9tIHRoZSBpbWFnZS48L3A+DQo8aDQ+T3B0aW9uczwvaDQ+DQo8dWw+DQo8bGk+PGNvZGU+P2NhcHRpb248L2NvZGU+PGJyIC8+DQpUaGUgZGVmYXVsdDwvbGk+DQo8bGk+PGNvZGU+P2FsdDwvY29kZT48L2xpPg0KPGxpPjxjb2RlPj9uYW1lPC9jb2RlPjwvbGk+DQo8bGk+PGNvZGU+P2lkPC9jb2RlPjwvbGk+DQo8bGk+PGNvZGU+P2RhdGU8L2NvZGU+PC9saT4NCjxsaT48Y29kZT4/Y2F0ZWdvcnk8L2NvZGU+PC9saT4NCjxsaT48Y29kZT4/YXV0aG9yPC9jb2RlPjwvbGk+DQo8bGk+PGNvZGU+P2V4dDwvY29kZT48L2xpPg0KPGxpPjxjb2RlPj93aWR0aDwvY29kZT48L2xpPg0KPGxpPjxjb2RlPj9oZWlnaHQ8L2NvZGU+PC9saT4NCjwvdWw+DQoNCjxwPkZvciBleGFtcGxlOjwvcD4NCjxwcmU+aW1hZ2VjYXB0aW9uPSI/YWx0IjwvcHJlPg0KPHA+IHdvdWxkIHNob3cgdGhlIGFsdCB0ZXh0IHVuZGVyIHRoZSBtYWluIGltYWdlIGluc3RlYWQgb2YgdGhlIGNhcHRpb24gKHdoaWNoIGl0IHVzZXMgYnkgZGVmYXVsdCkuPC9wPg0KDQo8cD5PciwgZm9yIHRoZSBhZHZlbnR1cm91czo8L3A+DQo8cHJlPmltYWdlY2FwdGlvbj0iP2NhcHRpb24gYnkgP2F1dGhvciBbID9leHQgcGljdHVyZTogP3dpZHRoIHggP2hlaWdodCBdIjwvcHJlPg0KPHA+IG1pZ2h0IHNob3cgYSBjYXB0aW9uIHN1Y2ggYXMgIkxha2UgV2luZGVybWVyZSBhdCBuaWdodCBieSBTdGVmIFsganBnIHBpY3R1cmU6IDgwMCB4IDYwMCBdIi48L3A+DQoNCjxwPlRoZXJlIGlzIG9uZSBsaW1pdGF0aW9uIGluc29mYXIgYXMgZWFjaCA/dmFyaWFibGUgPGk+bXVzdDwvaT4gYmUgYWxvbmUsIHN1cnJvdW5kZWQgYnkgd2hpdGVzcGFjZS4gU28sIDxjb2RlPj9jYXB0aW9uOiBwaG90b2dyYXBoZWQgYnkgP2F1dGhvci48L2NvZGU+IHdvbid0IHdvcmsuPC9wPg0KDQo8aDMgaWQ9InRodW1iIj48Y29kZT50aHVtYjwvY29kZT48L2gzPg0KPHA+SWYgeW91IHdpc2ggdGhlIGZ1bGxzaXplIGltYWdlcyBkaXNwbGF5ZWQgaW4gdGhlIHNsaW1ib3ggd2luZG93IHRvIGJlIHRoZSB0aHVtYm5haWxzIGluc3RlYWQuPC9wPg0KPGg0Pk9wdGlvbnM8L2g0Pg0KPHVsPg0KPGxpPjxjb2RlPjE8L2NvZGU+PGJyIC8+DQpzd2l0Y2hlcyB0aGUgb3B0aW9uIG9uLiBJdCBpcyBtaXNzaW5nIChpLmUuIG9mZikgYnkgZGVmYXVsdDwvbGk+DQo8L3VsPg0KDQo8aDMgaWQ9ImxpbWl0Ij48Y29kZT5saW1pdDwvY29kZT48L2gzPg0KPHA+VGhlIG51bWJlciBvZiBpbWFnZSB0aHVtYm5haWxzIHRvIHNob3cgcGVyIHBhZ2UuIDAgKG9yIG9taXR0ZWQpPWVzc2VudGlhbGx5IHVubGltaXRlZC48L3A+DQoNCjxoMyBpZD0ibWF4bGltaXQiPjxjb2RlPm1heGxpbWl0PC9jb2RlPjwvaDM+DQo8cD5UaGUgYWJzb2x1dGUgbWF4aW11bSBudW1iZXIgb2YgaW1hZ2VzIHRvIHB1bGwgZnJvbSB0aGUgZGF0YWJhc2UuIDAgKG9yIG9taXR0ZWQpPWVzc2VudGlhbGx5IHVubGltaXRlZC48L3A+DQoNCjxoMyBpZD0ib3JkZXJieSI+PGNvZGU+b3JkZXJieTwvY29kZT48L2gzPg0KPHA+QSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB3YXlzIHRvIG9yZGVyIHRoZSByZXN1bHRzLjwvcD4NCjxoND5PcHRpb25zPC9oND4NCjx1bD4NCjxsaT48Y29kZT5jYXRlZ29yeTwvY29kZT48YnIgLz4NClRoZSBkZWZhdWx0IHNvcnQgb3JkZXI8L2xpPg0KPGxpPjxjb2RlPm5hbWU8L2NvZGU+PC9saT4NCjxsaT48Y29kZT5pZDwvY29kZT48L2xpPg0KPGxpPjxjb2RlPmRhdGU8L2NvZGU+PC9saT4NCjxsaT48Y29kZT5hbHQ8L2NvZGU+PC9saT4NCjxsaT48Y29kZT5jYXB0aW9uPC9jb2RlPjwvbGk+DQo8bGk+PGNvZGU+YXV0aG9yPC9jb2RlPjwvbGk+DQo8bGk+PGNvZGU+ZXh0PC9jb2RlPjwvbGk+DQo8bGk+PGNvZGU+d2lkdGg8L2NvZGU+PC9saT4NCjxsaT48Y29kZT5oZWlnaHQ8L2NvZGU+PC9saT4NCjxsaT48Y29kZT5yYW5kb208L2NvZGU+PC9saT4NCjxsaT48Y29kZT5maXhlZDwvY29kZT48L2xpPg0KPC91bD4NCg0KPHA+WW91IGNhbiBhbHNvIHNwZWNpZnkgdGhlIGRpcmVjdGlvbiBvZiB0aGUgc29ydCBvcmRlciBieSBhZGRpbmcgOmFzYyBvciA6ZGVzYyB0byBhbnkgdmFsdWUuIEZvciBleGFtcGxlOjwvcD4NCjxwcmU+Y2F0ZWdvcnksIGRhdGU6ZGVzYzwvcHJlPg0KPHA+IHdvdWxkIHNvcnQgYnkgY2F0ZWdvcnkgZmlyc3QsIHRoZW4gZGVzY2VuZGluZyBkYXRlLjwvcD4NCg0KPHA+VGhlIHNwZWNpYWwsIG92ZXJyaWRpbmcsIG9wdGlvbiA8Y29kZT5maXhlZDwvY29kZT4gZm9yY2VzIHRodW1icyB0byBiZSBvdXRwdXQgaW4gdGhlIG9yZGVyIGdpdmVuIGluIHRoZSA8YSBocmVmPSIjaW1hZ2VpZCI+aW1hZ2VpZDwvYT4gdGFnLg0KDQo8cD5Ob3RlIHRoYXQgPGNvZGU+cmFuZG9tPC9jb2RlPiBhY3RzIHNsaWdodGx5IGRpZmZlcmVudGx5IGZyb20gdGhlIG90aGVycy4gSWYgaXQgYXBwZWFycyBhcyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdCwgcmFuZG9tIGltYWdlcyB3aWxsIGJlIHB1bGxlZCBmcm9tIHRoZSBkYXRhYmFzZSBhbmQgdGhleSB3aWxsIHRoZW4gYmUgc29ydGVkIGFjY29yZGluZyB0byB0aGUgb3B0aW9ucyBsaXN0ZWQgYWZ0ZXIgaXQuPC9wPg0KDQo8cD5JZiBpdCBhcHBlYXJzIGFueXdoZXJlIGVsc2UgaW4gdGhlIGxpc3QsIGFueSBzb3J0IGl0ZW1zIGJlZm9yZSBpdCB3aWxsIGRldGVybWluZSB0aGUgb3JkZXIgb2YgZGF0YSBwdWxsZWQgZnJvbSB0aGUgZGF0YWJhc2UsIGFuZCB0aGUgcmVzdWx0cyB3aWxsIHRoZW4gYmUgb3JkZXJlZCByYW5kb21seSAoaW4gdGhhdCBjYXNlLCBhbnkgaXRlbXMgIGxpc3RlZCBhZnRlciA8Y29kZT5yYW5kb208L2NvZGU+IHdpbGwgYmUgaWdub3JlZC4gPGNvZGU+Zml4ZWQ8L2NvZGU+IGlzIHN0aWxsIGhvbm91cmVkLCBob3dldmVyKS4gU2VlIHRoZSA8YSBocmVmPSIjZWcyIj5leGFtcGxlczwvYT4gZm9yIG1vcmUgb24gdGhpcyBmZWF0dXJlLjwvcD4NCg0KPGgzIGlkPSJncm91cG5hbWUiPjxjb2RlPmdyb3VwbmFtZTwvY29kZT48L2gzPg0KPHA+VGhlIG5hbWUgdG8gYXBwZW5kIHRvIHRoZSBbcmVsXSBhcmd1bWVudCBpbiBvcmRlciB0byBsb2dpY2FsbHkgZ3JvdXAgaW1hZ2VzLiBEZWZhdWx0OiAic21kIi48L3A+DQoNCjxwPk9uY2UgYSB2aXNpdG9yIGNsaWNrcyBhIHRodW1ibmFpbCBhbmQgY29udHJvbCBpcyBwYXNzZWQgdG8gdGhlIHNsaW1ib3ggY29kZSwgbmF2aWdhdGlvbiBpcyB2aWEgdGhlIE5leHQvUHJldiBsaW5rcyAob3IgdGhlICduJy8ncCcgb3IgYXJyb3cga2V5cykuIFdpdGhvdXQgc3VwcGx5aW5nIGEgZ3JvdXBuYW1lLCBhbGwgbGlnaHRib3hhYmxlIGltYWdlcyBmcm9tIGFsbCBzbGltYm94IHRhZ3Mgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgbmF2aWdhdGlvbi4gU28gaWYgeW91IGhhZCAzIHNsaW1ib3ggdGFncyBvbiB0aGUgcGFnZSwgZWFjaCB3aXRoIDIwIGltYWdlcyBpbiB0aGVtLCB0aGUgbGlnaHRib3ggd291bGQgc2hvdyAiSW1hZ2UgMSBvZiA2MCIuPC9wPg0KDQo8cD5UbyBieXBhc3MgdGhpcyBmZWF0dXJlLCBnaXZlIGVhY2ggc2xpbWJveCB0YWcgYSB1bmlxdWUgZ3JvdXBuYW1lOyB0aGF0IHdpbGwgbGltaXQgdGhlIG5hdmlnYXRpb24gb25seSB0byB0aGUgZ3JvdXAgb2YgaW1hZ2VzIHRoYXQgbWF0Y2guIEl0IGNhbiBiZSBhbnl0aGluZyB5b3UgbGlrZSwgb3IgeW91IGNhbiBzdXBwbHkgb25lIG9mIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyB0byBwdWxsIHRoZSBncm91cG5hbWUgZnJvbSB0aGUgcmVsZXZhbnQgZmllbGQ6PC9wPg0KDQo8dWw+DQo8bGk+PGNvZGU+P2M8L2NvZGU+PGJyIC8+DQp0aGUgaW1hZ2UgY2F0ZWdvcnk8L2xpPg0KPGxpPjxjb2RlPj9pZDwvY29kZT48YnIgLz4NCnRoZSBpbWFnZSBJRCAod2hpY2ggZWZmZWN0aXZlbHkgbWFrZXMgZXZleSBpbWFnZSBhIHNlcGFyYXRlIGVudGl0aXksIGRpc2FibGluZyB0aGUgcHJldmlvdXMvbmV4dCBuYXZpZ2F0aW9uIGFuZCByZXF1aXJpbmcgdGhlIHZpZXdlciB0byBjbG9zZSB0aGUgbGlnaHRib3ggdG8gdmlldyBhbm90aGVyIGltYWdlKTwvbGk+DQo8bGk+PGNvZGU+P2F1dGhvcjwvY29kZT48YnIgLz4NCnRoZSBpbWFnZSBhdXRob3IvdXBsb2FkZXI8L2xpPg0KPGxpPjxjb2RlPj9kYXRlPC9jb2RlPjxiciAvPg0KdGhlIGltYWdlIHVwbG9hZCBkYXRlPC9saT4NCjxsaT48Y29kZT4/bmFtZTwvY29kZT48YnIgLz4NCnRoZSBpbWFnZSBmaWxlbmFtZTwvbGk+DQo8bGk+PGNvZGU+P2V4dDwvY29kZT48YnIgLz4NCnRoZSBpbWFnZSBmaWxlIGV4dGVuc2lvbjwvbGk+DQo8bGk+PGNvZGU+P2FsdDwvY29kZT48YnIgLz4NCnRoZSBpbWFnZSdzIGFsdCB0ZXh0PC9saT4NCjxsaT48Y29kZT4/Y2FwdGlvbjwvY29kZT48YnIgLz4NCnRoZSBpbWFnZSdzIGNhcHRpb24gdGV4dDwvbGk+DQo8bGk+PGNvZGU+P3dpZHRoPC9jb2RlPjxiciAvPg0KdGhlIGltYWdlIHdpZHRoPC9saT4NCjxsaT48Y29kZT4/aGVpZ2h0PC9jb2RlPjxiciAvPg0KdGhlIGltYWdlIGhlaWdodDwvbGk+DQo8bGk+PGNvZGU+P2ZpZWxkbmFtZTwvY29kZT48YnIgLz4NCmFueSB2YWxpZCBhcnRpY2xlIGZpZWxkIChlLmcuIDxjb2RlPj9leGNlcnB0PC9jb2RlPiwgPGNvZGU+P2N1c3RvbTE8L2NvZGU+LCA8Y29kZT4/YXJ0aWNsZS1pbWFnZTwvY29kZT4pIHRvIHB1bGwgdGhlIGdyb3VwbmFtZSBmcm9tIHRoYXQgZmllbGQ8L2xpPg0KPC91bD4NCg0KPHA+IFNlZSB0aGUgPGEgaHJlZj0iI2VnNCI+ZXhhbXBsZXM8L2E+IGZvciBtb3JlLjwvcD4NCg0KPGgzIGlkPSJzaG93Y2FwdGlvbiI+PGNvZGU+c2hvd2NhcHRpb248L2NvZGU+PC9oMz4NCjxwPkRpc3BsYXkgdGhlIGltYWdlJ3MgY2FwdGlvbiB3aXRoIHRoZSBpbWFnZS4gT2ZmIGJ5IGRlZmF1bHQuIFNlZSA8YSBocmVmPSIjdGV4dHBvcyI+dGV4dHBvczwvYT4gZm9yIHBvc2l0aW9uaW5nLjwvcD4NCjxoND5PcHRpb25zPC9oND4NCjx1bD4NCjxsaT48Y29kZT4wPC9jb2RlPjxiciAvPg0KTm8sIGRvbid0IGRpc3BsYXkgaXQ8L2xpPg0KPGxpPjxjb2RlPjE8L2NvZGU+PGJyIC8+DQpZZXMsIGRpc3BsYXkgaXQ8L2xpPg0KPC91bD4NCg0KPGgzIGlkPSJzaG93YWx0Ij48Y29kZT5zaG93YWx0PC9jb2RlPjwvaDM+DQo8cD5EaXNwbGF5IHRoZSBpbWFnZSdzIGFsdCB0ZXh0IHdpdGggdGhlIGltYWdlLiBPZmYgYnkgZGVmYXVsdC4gU2VlIDxhIGhyZWY9IiN0ZXh0cG9zIj50ZXh0cG9zPC9hPiBmb3IgcG9zaXRpb25pbmcuPC9wPg0KPGg0Pk9wdGlvbnM8L2g0Pg0KPHVsPg0KPGxpPjxjb2RlPjA8L2NvZGU+PGJyIC8+DQpObywgZG9uJ3QgZGlzcGxheSBpdDwvbGk+DQo8bGk+PGNvZGU+MTwvY29kZT48YnIgLz4NClllcywgZGlzcGxheSBpdDwvbGk+DQo8L3VsPg0KDQo8aDMgaWQ9InRleHRwb3MiPjxjb2RlPnRleHRwb3M8L2NvZGU+PC9oMz4NCjxwPlBvc2l0aW9uIG9mIHRoZSA8YSBocmVmPSIjc2hvd2FsdCI+YWx0PC9hPi88YSBocmVmPSIjc2hvd2NhcHRpb24iPmNhcHRpb248L2E+IGluZm9ybWF0aW9uLjwvcD4NCjxoND5PcHRpb25zPC9oND4NCjx1bD4NCjxsaT48Y29kZT5hYm92ZTwvY29kZT48YnIgLz4NCmFib3ZlIHRoZSB0aHVtYm5haWwsIG5vdCBjbGlja2FibGU8L2xpPg0KPGxpPjxjb2RlPmJlbG93PC9jb2RlPjxiciAvPg0KYmVsb3cgdGhlIHRodW1ibmFpbCwgbm90IGNsaWNrYWJsZSAoZGVmYXVsdCk8L2xpPg0KPGxpPjxjb2RlPmJlZm9yZTwvY29kZT48YnIgLz4NCmltbWVkaWF0ZWx5IGFib3ZlIHRoZSB0aHVtYm5haWwsIGNsaWNrYWJsZSBhcyBwYXJ0IG9mIHRoZSBsaW5rPC9saT4NCjxsaT48Y29kZT5hZnRlcjwvY29kZT48YnIgLz4NCmltbWVkaWF0ZWx5IGJlbG93IHRoZSB0aHVtYm5haWwsIGNsaWNrYWJsZSBhcyBwYXJ0IG9mIHRoZSBsaW5rPC9saT4NCjwvdWw+DQoNCjxoMyBpZD0ic2hvd3BhZ2VsaW5rcyI+PGNvZGU+c2hvd3BhZ2VsaW5rczwvY29kZT48L2gzPg0KPHA+RGlzcGxheXMgY2xpY2thYmxlIG5leHQvcHJldmlvdXMgbGlua3MgdW5kZXIgdGhlIHRodW1ibmFpbHMuIE9uIGJ5IGRlZmF1bHQgKGlmIDxhIGhyZWY9IiNsaW1pdCI+bGltaXQ8L2E+IGlzIGdyZWF0ZXIgdGhhbiAwKS48L3A+DQo8aDQ+T3B0aW9uczwvaDQ+DQo8dWw+DQo8bGk+PGNvZGU+MTwvY29kZT48YnIgLz4NClllcywgZGlzcGxheSBpdDwvbGk+DQo8bGk+PGNvZGU+MDwvY29kZT48YnIgLz4NCk5vLCBkb24ndCBkaXNwbGF5IGl0PC9saT4NCjwvdWw+DQoNCjxoMyBpZD0iZ2FsbGVyeWlkIj48Y29kZT5nYWxsZXJ5aWQ8L2NvZGU+PC9oMz4NCjxwPklmIHVzaW5nIDxhIGhyZWY9IiNzaG93cGFnZWxpbmtzIj5zaG93cGFnZWxpbmtzPC9hPiwgdGhpcyBpcyB0aGUgc3RyaW5nIHRoYXQgaXMgdXNlZCB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gbXVsdGlwbGUgc2xpbWJveCBnYWxsZXJpZXMgb24gYSBzaW5nbGUgcGFnZS4gSXQgYWxsb3dzIHBhZ2luZyB0byBiZSBjb250cm9sbGVkIG9uIGEgcGVyLWdhbGxlcnkgYmFzaXMsIHNvIGNsaWNraW5nIE5leHQvUHJldiBpbiBvbmUgZ2FsbGVyeSB3b24ndCBhZmZlY3QgdGhlIHRodW1ibmFpbHMgaW4gb3RoZXIgZ2FsbGVyaWVzIG9uIHRoZSBzYW1lIHBhZ2UuIEVhY2ggZ2FsbGVyeSBvbiBhIHBhZ2UgPGk+bXVzdDwvaT5oYXZlIGEgdW5pcXVlIGdhbGxlcnlpZCBpbiBvcmRlciBmb3IgcGFnaW5nIHRvIHdvcmsuIFRoZSBnb29kIG5ld3MgaXMgeW91J2xsIHByb2JhYmx5IG5ldmVyIGhhdmUgdG8gdXNlIHRoaXMgYXR0cmlidXRlIGJlY2F1c2UgaXQgd29ya3MgYXV0b21hdGljYWxseSBmb3IgeW91LiBJbiB0aGUgKHZlcnkpIHVubGlrZWx5IGV2ZW50IGl0IGdlbmVyYXRlcyB0d28gaWRlbnRpY2FsIHN0cmluZ3MsIHlvdSBjYW4gdXNlIHRoaXMgb3B0aW9uIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGJlaGF2aW91ci48L3A+DQo8cD5JdCB0YWtlcyBlaXRoZXIgYSBmaXhlZCBzdHJpbmcgKGUuZy4gPGNvZGU+Z2FsbGVyeWlkPSJNeUdhbDEiPC9jb2RlPik7IG9yIGEgcXVlc3Rpb24gbWFyayBmb2xsb3dlZCBieSB1cCB0byB0d28gbnVtYmVycyBzZXBhcmF0ZWQgYnkgYSBjb2xvbi4gSW4gdGhlIGxhdHRlciBtb2RlLCB0aGUgcGx1Z2luIGdlbmVyYXRlcyBhIHVuaXF1ZSAoMzItY2hhcmFjdGVyKSBzdHJpbmcgYmFzZWQgb24gdGhlIG90aGVyIGF0dHJpYnV0ZXMgZ2l2ZW4uIFlvdSB1c2UgdGhlIHR3byBudW1iZXJzIHRvIGNvbnRyb2wgd2hpY2ggY2hhcmFjdGVycyBmcm9tIHRoaXMgc3RyaW5nIHRvIHVzZSBpbiB5b3VyIHVuaXF1ZSBjb2RlLiBUaGUgZmlyc3QgbnVtYmVyIGlzIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyB0byBnZW5lcmF0ZSBhbmQgdGhlIDJuZCBudW1iZXIgaXMgaG93IG1hbnkgY2hhcmFjdGVycyB0byBza2lwIGVhY2ggdGltZSBpdCBwaWNrcyBvbmUgZnJvbSB0aGUgc3RyaW5nICh3cmFwcGluZyBiYWNrIHRvIHRoZSBzdGFydCBvZiB0aGUgc3RyaW5nIGlmIGl0IGZhbGxzIG9mZiB0aGUgZW5kKS48L3A+DQo8cD5BbiBleGFtcGxlOiBzdXBwb3NlIHRoZSB0YWcgZ2VuZXJhdGVkIHRoaXMgc3RyaW5nIGludGVybmFsbHk6IDxjb2RlPjJjYjViYmY4YjBjMmMwMjhkOGYyMzRiNGJkNDZmZGRlPC9jb2RlPi4gVGhlc2UgYXJlIHRoZSByZXN1bHRzIG9mIHZhcmlvdXMgdmFsdWVzOjwvcD4NCg0KPHRhYmxlIGlkPSJlZ3RhYiI+DQo8dHI+PHRoPmdhbGxlcnlpZD08L3RoPjx0aD5yZXN1bHQ8L3RoPjx0aD5yZW1hcmtzPC90aD48L3RyPg0KPHRyPjx0ZD4iIiBvciAiPzQ6NiI8L3RkPjx0ZD4yZmNmPC90ZD48dGQ+dGhlIGRlZmF1bHQ8L3RkPjwvdHI+DQo8dHI+PHRkPiI/OCI8L3RkPjx0ZD4yY2I1YmJmODwvdGQ+PHRkPnRoZSBmaXJzdCA4IGNoYXJhY3RlcnM8L3RkPjwvdHI+DQo8dHI+PHRkPiI/NzozIjwvdGQ+PHRkPjI1ZjBjOGY8L3RkPjx0ZD5sZW5ndGggNywgY2hvb3NpbmcgZXZlcnkgM3JkIGNoYXJhY3RlcjwvdGQ+PC90cj4NCjx0cj48dGQ+Ij84OjciPC90ZD48dGQ+MjgyNGY1Yzg8L3RkPjx0ZD5sZW5ndGggOCwgY2hvb3NpbmcgZXZlcnkgN3RoIGNoYXJhY3RlciAod3JhcHMpPC90ZD48L3RyPg0KPC90YWJsZT4NCg0KPGgzIGlkPSJ0aHVtYnNpemUiPjxjb2RlPnRodW1ic2l6ZTwvY29kZT48L2gzPg0KPHA+RWl0aGVyIGZvciBzcGVjaWFsIGVmZmVjdHMsIG9yIGluIG9yZGVyIHRvIHZhbGlkYXRlIGFnYWluc3QgWEhUTUwsIHRoZSBpbWFnZSB0aHVtYm5haWxzIHNob3VsZCBoYXZlIDxjb2RlPndpZHRoPC9jb2RlPiBhbmQgPGNvZGU+aGVpZ2h0PC9jb2RlPiBhdHRyaWJ1dGVzLiBUWFAgY2Fubm90IHN1cHBseSB0aGlzIGF1dG9tYXRpY2FsbHksIGJ1dCB0aGUgPGNvZGU+dGh1bWJzaXplPC9jb2RlPiBvcHRpb24gd2lsbC48L3A+DQoNCjxwPlNpbXBseSBzcGVjaWZ5IHVwIHRvIHR3byB2YWx1ZXMgc2VwYXJhdGVkIGJ5IGEgY29tbWEgdG8gZGVmaW5lIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHlvdXIgdGh1bWJuYWlscyAoaW4gcGl4ZWxzIGJ5IGRlZmF1bHQpLiBGb3IgZXhhbXBsZTogPGNvZGU+dGh1bWJzaXplPSI0MCwgNjAiPC9jb2RlPiB0byBzZXQgNDAtcGl4ZWwgeCA2MC1waXhlbCB0aHVtYm5haWxzLiBTdXBwbHlpbmcgb25seSBvbmUgdmFsdWUgd2lsbCBzZXQgYm90aCB3aWR0aCBhbmQgaGVpZ2h0IHRvIHRoZSBzYW1lIHZhbHVlLiBBZGRpbmcgdW5pdHMgYWZ0ZXIgZWFjaCB2YWx1ZSAoInB4IiwgImVtIiwgIiUiIGV0Yykgd2lsbCB1c2UgdGhvc2UgdW5pdHMgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCAicHgiLjwvcD4NCg0KPHA+VG8gc3BlY2lmeSBqdXN0IHRoZSB3aWR0aCwgcHV0IHRoZSBjb21tYSBpbiBidXQgbGVhdmUgdGhlIHNlY29uZCBwYXJhbWV0ZXIgZW1wdHkgKGUuZy4gPGNvZGU+dGh1bWJzaXplPSIyZW0sIjwvY29kZT4pLiBTaW1pbGFybHkgdG8gc3BlY2lmeSB0aGUgaGVpZ2h0IG9ubHksIGxlYXZlIHRoZSBmaXJzdCB2YWx1ZSBlbXB0eSBieSBzdGFydGluZyB3aXRoIGEgY29tbWEgKGUuZy4gPGNvZGU+dGh1bWJzaXplPSIsMTAlIjwvY29kZT4pLjwvcD4NCg0KPGgzIGlkPSJwcmV2bGFiZWwiPjxjb2RlPnByZXZsYWJlbDwvY29kZT48L2gzPg0KPHA+TGFiZWwgZm9yIHRoZSAncHJldmlvdXMgcGFnZScgb2YgcGljdHVyZXMgd2hlbiB1c2luZyA8YSBocmVmPSIjc2hvd3BhZ2VsaW5rcyI+c2hvd3BhZ2VsaW5rczwvYT4uIERlZmF1bHQ6ICJQcmV2IiBhbmQgY3VzdG9taXNhYmxlIGluIGRpZmZlcmVudCBsYW5ndWFnZXMgdmlhIE1MUC48L3A+DQoNCjxoMyBpZD0ibmV4dGxhYmVsIj48Y29kZT5uZXh0bGFiZWw8L2NvZGU+PC9oMz4NCjxwPkxhYmVsIGZvciB0aGUgJ25leHQgcGFnZScgb2YgcGljdHVyZXMgd2hlbiB1c2luZyA8YSBocmVmPSIjc2hvd3BhZ2VsaW5rcyI+c2hvd3BhZ2VsaW5rczwvYT4uIERlZmF1bHQ6ICJOZXh0IiBhbmQgY3VzdG9taXNhYmxlIGluIGRpZmZlcmVudCBsYW5ndWFnZXMgdmlhIE1MUC48L3A+DQoNCjxoMyBpZD0id3JhcHRhZyI+PGNvZGU+d3JhcHRhZzwvY29kZT48L2gzPg0KPHA+WEhUTUwgdGFnIHRvIHdyYXAgZWFjaCAnY2VsbCcgKGVmZmVjdGl2ZWx5IGEgdGh1bWJuYWlsIGltYWdlKSB3aXRoLiBEbyBub3Qgc3BlY2lmeSB0aGUgJmx0OyBvciAmZ3Q7IGNoYXJhY3RlcnMuIEZvciBhIHZhbGlkIHBhZ2UsIHRoZSBvbmx5IHVzZWZ1bCBvcHRpb25zIGFyZSAiZGl2IiwgImxpIiBvciAicCIuIERlZmF1bHQ6IGVtcHR5IChpLmUuIG5vIHRhZykuPC9wPg0KDQo8aDMgaWQ9ImNlbGxjbGFzcyI+PGNvZGU+Y2VsbGNsYXNzPC9jb2RlPjwvaDM+DQo8cD5DU1MgY2xhc3MgZm9yIGVhY2ggJ2NlbGwnIHRoYXQgZGlzcGxheXMgYSB0aHVtYm5haWwuIERlZmF1bHQ6IGVtcHR5IChpLmUuIG5vIGNsYXNzKS48L3A+DQoNCjxoMyBpZD0iY2FwdGlvbmNsYXNzIj48Y29kZT5jYXB0aW9uY2xhc3M8L2NvZGU+PC9oMz4NCjxwPkNTUyBjbGFzcyBmb3IgdGhlIGNhcHRpb24gdGV4dC4gRGVmYXVsdDogZW1wdHkgKGkuZS4gbm8gY2xhc3MpLjwvcD4NCg0KPGgzIGlkPSJhbHRjbGFzcyI+PGNvZGU+YWx0Y2xhc3M8L2NvZGU+PC9oMz4NCjxwPkNTUyBjbGFzcyBmb3IgdGhlIGFsdCB0ZXh0LiBEZWZhdWx0OiBlbXB0eSAoaS5lLiBubyBjbGFzcykuPC9wPg0KDQo8aDMgaWQ9Im5hdmNsYXNzIj48Y29kZT5uYXZjbGFzczwvY29kZT48L2gzPg0KPHA+Q1NTIGNsYXNzIGZvciB0aGUgbmV4dC9wcmV2IGNvbnRhaW5lci4gRGVmYXVsdDogZW1wdHkgKGkuZS4gbm8gY2xhc3MpLjwvcD4NCg0KPGgzIGlkPSJwcmV2Y2xhc3MiPjxjb2RlPnByZXZjbGFzczwvY29kZT48L2gzPg0KPHA+Q1NTIGNsYXNzIGZvciB0aGUgJ3ByZXYnIGxpbmsuIERlZmF1bHQ6IHNtZF9zbGltYm94X3ByZXYuPC9wPg0KDQo8aDMgaWQ9Im5leHRjbGFzcyI+PGNvZGU+bmV4dGNsYXNzPC9jb2RlPjwvaDM+DQo8cD5DU1MgY2xhc3MgZm9yIHRoZSAnbmV4dCcgbGluay4gRGVmYXVsdDogc21kX3NsaW1ib3hfbmV4dC48L3A+DQoNCjxoMyBpZD0ibGliY2hlY2siPjxjb2RlPmxpYmNoZWNrPC9jb2RlPjwvaDM+DQo8cD5TZXQgdGhpcyB0byAwIHRvIGJ5cGFzcyB0aGUgbGlicmFyeSBjaGVjay4gVXNlZnVsIGlmIHlvdSB3YW50IHRoZSB0aHVtYnMgdG8gYmUgaW5jbHVkZWQgaW4gYW4gUlNTIGZlZWQgd2l0aG91dCB0aGUgcGx1Z2luIGNvbXBsYWluaW5nIHRoZSBsaWJyYXJpZXMgYXJlIG1pc3NpbmcuIERlZmF1bHQ6IDEgKG9uKS48L3A+DQo8aDQ+T3B0aW9uczwvaDQ+DQo8dWw+DQo8bGk+PGNvZGU+MTwvY29kZT48YnIgLz4NClllcywgY2hlY2sgdGhlIDxhIGhyZWY9IiNpbmMiPnNtZF9zbGltYm94X2luYzwvYT4gdGFnIGhhcyBiZWVuIGNhbGxlZDwvbGk+DQo8bGk+PGNvZGU+MDwvY29kZT48YnIgLz4NCk5vLCBkb24ndCBjaGVjazwvbGk+DQo8L3VsPg0KDQo8aDI+PGEgaWQ9ImV4YW1wbGVzIj48L2E+RXhhbXBsZXM8L2gyPg0KDQo8aDMgaWQ9ImVnMSI+RXhhbXBsZSAxPC9oMz4NCjxwcmU+Jmx0O3R4cDpzbWRfc2xpbWJveCBjYXRlZ29yeT0ibGFuZHNjYXBlIiBsaW1pdD0iMTAiIC8mZ3Q7PC9wcmU+DQoNCjxwPlNob3cgYWxsIGltYWdlcyBpbiB0aGUgbGFuZHNjYXBlIGNhdGVnb3J5LCB0ZW4gYXQgYSB0aW1lLjwvcD4NCg0KPGgzIGlkPSJlZzIiPkV4YW1wbGUgMjwvaDM+DQo8cHJlPiZsdDt0eHA6c21kX3NsaW1ib3ggY2F0ZWdvcnk9ImRvZ3MsIGJpcmRzIiBsaW1pdD0iOSIgc2hvd2NhcHRpb25zPSIxIiB0ZXh0cG9zPSJhZnRlciIgd3JhcHRhZz0ibGkiIGNlbGxjbGFzcz0iY2VsbCIgLyZndDs8L3ByZT4NCg0KPHA+U2hvdyBhbGwgaW1hZ2VzIGluIHRoZSBkb2dzIGFuZCBiaXJkcyBjYXRlZ29yaWVzLCA5IHBlciBwYWdlLiBBZGQgdGhlIGNhcHRpb25zIHVuZGVyIHRoZSB0aHVtYm5haWxzIGFuZCBtYWtlIHRoZW0gY2xpY2thYmxlIHRvby4gV3JhcCBlYWNoIGltYWdlIGluIGEgPGNvZGU+bGk8L2NvZGU+IHRhZyBhbmQgZ2l2ZSBlYWNoIGEgY2xhc3Mgb2YgJ2NlbGwnIChpbXBsaWVzIHlvdSBtdXN0IG1hbnVhbGx5IGFkZCBhIGNvcnJlc3BvbmRpbmcgPGNvZGU+Jmx0O3VsJmd0OzwvY29kZT4gdGFnIGFyb3VuZCB0aGUgcGx1Z2luIGluIG9yZGVyIHRvIG1haW50YWluIHBhZ2UgdmFsaWRpdHkpLjwvcD4NCg0KPHA+SWYgeW91IGFkZGVkIDxjb2RlPm9yZGVyYnk9ImRhdGU6ZGVzYywgcmFuZG9tIjwvY29kZT4gdG8gdGhlIGFib3ZlIHRhZywgeW91IHdvdWxkIGdldCB0aGUgbW9zdCByZWNlbnQgOSBpbWFnZXMgb24gdGhlIGZpcnN0IHBhZ2UsIGJ1dCBzaG93biBpbiBhIHJhbmRvbSBvcmRlci4gVGhlIG5leHQgcGFnZSB3b3VsZCBzaG93IHRoZSBuZXh0IG1vc3QtcmVjZW50IDkgaW1hZ2VzLCBhZ2FpbiBzb3J0ZWQgcmFuZG9tbHkgd2l0aGluIHRoZW1zZWx2ZXMuPC9wPg0KDQo8cD5Td2l0Y2hpbmcgdGhlIHNvcnQgdG86IDxjb2RlPm9yZGVyYnk9InJhbmRvbSwgZGF0ZTpkZXNjIjwvY29kZT4gd291bGQgY2hhbmdlIHRoZSBvdXRwdXQuIFlvdSB3b3VsZCB0aGVuIGdldCA5IHJhbmRvbSBpbWFnZXMgb24gdGhlIGZpcnN0IHBhZ2UsIHdpdGggdGhlIG1vc3QgcmVjZW50IG9uZXMgb2YgdGhlIGdyb3VwIHNob3duIGZpcnN0LiBDbGlja2luZyAnTmV4dCcgd291bGQgc2hvdyBhbm90aGVyIDkgcmFuZG9tIGltYWdlcyAoc29tZSBtYXkgYmUgdGhlIHNhbWUgYXMgcGFnZSAxKSwgYWdhaW4gc29ydGVkIGluIGRlc2NlbmRpbmcgb3JkZXIgb2YgZGF0ZS4gRm9yIHRoaXMgcmVhc29uICh1bmxlc3MgeW91J3JlIHNpbXBseSB1c2luZyB0aGUgcGx1Z2luIHRvIHByZXR0eSB1cCBhIHBhZ2Ugd2l0aCByYW5kb20gaW1hZ2VzKSBpZiB5b3UncmUgdXNpbmcgcmFuZG9tIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBvcmRlcmJ5LCB5b3UgcHJvYmFibHkgd2FudCB0byBkaXNhYmxlIHBhZ2luZyBieSBzZXR0aW5nIHNob3dwYWdlbGlua3M9IjAiLjwvcD4NCg0KPGgzIGlkPSJlZzMiPkV4YW1wbGUgMzwvaDM+DQo8cHJlPiZsdDt0eHA6c21kX3NsaW1ib3ggaW1hZ2VpZD0iNDgsIDI1LCA0IiBjYXRlZ29yeT0iZG9ncywgP2N1c3RvbTEiIHN1YmNhdHM9IjEiIGxpbWl0PSIyMCIgcHJldmxhYmVsPSJCYWNrIiBvcmRlcmJ5PSJuYW1lOmRlc2MsIGNhdGVnb3J5IiAvJmd0OzwvcHJlPg0KDQo8cD5TaG93IGltYWdlcyB3aXRoIElEcyA0OCwgMjUgYW5kIDQgYXMgd2VsbCBhcyBhbGwgaW1hZ2VzIGluIHRoZSBkb2dzIGNhdGVnb3J5IGFuZCBhbHNvIHB1bGwgdGhlIGltYWdlIGNhdGVnb3J5IG5hbWVzIGZyb20gdGhlIGN1cnJlbnQgYXJ0aWNsZSdzIGN1c3RvbTEgZmllbGQgKGlmIGN1c3RvbTEgaGVsZCAiYmlyZHMsIGxhbmRzY2FwZXMiICh3aXRob3V0IHRoZSBxdW90ZXMpIHlvdSdkIGdldCBwaWN0dXJlcyBmcm9tIGFsbCB0aHJlZSBjYXRlZ29yaWVzIGFuZCBhbGwgdGhlaXIgc3ViY2F0ZWdvcmllcykuIExpbWl0IHRoZSBudW1iZXIgcGVyIHBhZ2UgdG8gMjAsIGNoYW5nZSB0aGUgcHJldmlvdXMgcGFnZSBsYWJlbCB0byAiQmFjayIgYW5kIHNvcnQgdGhlIGltYWdlcyBpbiBkZXNjZW5kaW5nIG9yZGVyIG9mIG5hbWUsIHRoZW4gY2F0ZWdvcnkuPC9wPg0KDQo8aDMgaWQ9ImVnNCI+RXhhbXBsZSA0PC9oMz4NCjxwcmU+Jmx0O3R4cDpzbWRfc2xpbWJveCBjYXRlZ29yeT0ic3RhdGljLCA/aWQiIGltYWdlaWQ9IiFhcnRpY2xlX2ltYWdlIiBsaW1pdD0iNiIgZ3JvdXBuYW1lPSI/YyIgc2hvd3BhZ2VsaW5rcz0iMCIgLyZndDs8L3ByZT4NCg0KPHA+SWYgdGhlIHBlcnNvbiBpcyBjdXJyZW50bHkgdmlld2luZyBhcnRpY2xlIElEIDY3LCBzaG93IGFsbCBpbWFnZXMgZnJvbSB0aGUgJ3N0YXRpYycgY2F0ZWdvcnkgYW5kIHRoZSAnYXJ0aWNsZS02NycgY2F0ZWdvcnkuIElmIGFueSBpbWFnZSBpbiBlaXRoZXIgb2YgdGhvc2UgY2F0ZWdvcmllcyBpcyBmb3VuZCB0byBoYXZlIGFuIElEIG9mIHRoZSBhcnRpY2xlIGltYWdlIGZyb20gdGhlIGN1cnJlbnQgYXJ0aWNsZSwgdGhhdCBwaWN0dXJlIHdpbGwgYmUgaWdub3JlZC4gT25seSBzaG93IDYgcGljdHVyZXMgYW5kIGRvbid0IHNob3cgdGhlIG5leHQvcHJldiBsaW5rcyBvbiB0aGUgcGFnZS48L3A+DQoNCjxwPkFsc28sIGdyb3VwIHRoZSBTbGltYm94IHBpY3R1cmVzIGJ5IGltYWdlIGNhdGVnb3J5LiBUaGlzIG1lYW5zIHRoYXQgaWYgc29tZW9uZSBjbGlja3Mgb24gYSBwaWN0dXJlIGZyb20gdGhlICJzdGF0aWMiIGNhdGVnb3J5LCB0aGUgU2xpbWJveCBuZXh0L3ByZXYgbGlua3Mgb25seSBuYXZpZ2F0ZSBiZXR3ZWVuIHRob3NlIHBpY3R1cmVzLiBUaGUgdXNlciB3aWxsIGhhdmUgdG8gY2xvc2UgdGhlIGxpZ2h0Ym94IGFuZCBjbGljayBhIHBpY3R1cmUgaW4gdGhlIGFydGljbGUtNjcgY2F0ZWdvcnkgdG8gc2hvdyBwaWN0dXJlcyBmcm9tIHRoZSBvdGhlciBncm91cC48L3A+DQoNCjxwPk9uIHRoZSBzdXJmYWNlIHRoZSBncm91cG5hbWUgb3B0aW9uIG1heSBzZWVtIGEgbGl0dGxlIHN1cGVyZmx1b3VzIGJ1dCBpdCBjYW4gYmUgdXNlZnVsIHRvIGFsbG93IHBlb3BsZSB0byBvbmx5IGZsaWNrIHRocm91Z2ggYSBzdWJzZXQgb2YgdGhlIHBpY3R1cmVzIG9uIGVhY2ggcGFnZSwgYmFzZWQgb24gdGhlaXIgY2F0ZWdvcnksIGZpbGUgbmFtZSwgYXV0aG9yLCB3aWR0aC9oZWlnaHQsIGFsdC9jYXB0aW9uLCBldmVuIElEIGlmIHlvdSB3YW50IHRoZW0gdG8gYWxsIGJlIHVuaXF1ZSBlbnRpdGllcy4gWW91IGNhbiBhbHNvIHVzZSBhIGZpeGVkIHZhbHVlIHJlYWQgZnJvbSBhIGZpZWxkIGluIHRoZSBjdXJyZW50IGFydGljbGUsIGUuZy4gZ3JvdXBuYW1lPSI/Y3VzdG9tMiIuIFVzZWZ1bCB3aGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBvcmRlcmJ5LjwvcD4NCg0KPGgzIGlkPSJlZzUiPkV4YW1wbGUgNTwvaDM+DQo8cHJlPiZsdDt0eHA6c21kX3NsaW1ib3ggY2F0ZWdvcnk9Ij9jLCA/Y3VzdG9tMSwgIWN1c3RvbTIsICFzdGF0aWMiIGxpbWl0PSI4IiBtYXhsaW1pdD0iMzIiIC8mZ3Q7PC9wcmU+DQo8cD5BIGJpdCBvZiBhIGNvbnRyaXZlZCBleGFtcGxlIHRoYXQgc2hvd3MgaG93IGNyYXp5IHlvdSBjYW4gZ2V0OiBUaGlzIHdpbGwgc2hvdyBhIG1heGltdW0gb2YgMzIgaW1hZ2VzIGZyb20gYW4gaW1hZ2UgY2F0ZWdvcnkgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBjdXJyZW50IGdsb2JhbCBjYXRlZ29yeSwgcGx1cyBhbGwgaW1hZ2VzIGZyb20gY2F0ZWdvcmllcyBsaXN0ZWQgaW4gdGhlIGN1c3RvbTEgZmllbGQgb2YgdGhlIGN1cnJlbnQgYXJ0aWNsZSBidXQgPGVtPmV4Y2x1ZGluZzwvZW0+IGltYWdlcyBmcm9tIGNhdGVnb3JpZXMgbGlzdGVkIGluIGN1c3RvbTIgYW5kIGFsc28gZXhjbHVkaW5nIHRoZSAnc3RhdGljJyBjYXRlZ29yeS4gU2hvdyA4IGltYWdlIHRodW1ibmFpbHMgYXQgYSB0aW1lLjwvcD4NCg0KPGgyPjxhIG5hbWU9InN0eWxlIj48L2E+U3R5bGluZyB3aXRoIENTUzwvaDI+DQoNCjxwPlRoZXJlIGFyZSAoZGVsaWJlcmF0ZWx5KSB2ZXJ5IGZldyBsYXlvdXQgYXR0cmlidXRlcyBmb3IgdGhlIHBsdWdpbiBiZWNhdXNlIHByZXR0eSBtdWNoIGV2ZXJ5dGhpbmcgY2FuIGJlIGFjY2Vzc2VkIGZyb20gQ1NTIHRvIGxheSB5b3VyIGltYWdlcyBvdXQgaG93ZXZlciB5b3UgbGlrZSB0aGVtLiBXYW50IHRvIGNoYW5nZSB0aGUgbnVtYmVyIG9mIGltYWdlcyBwZXIgcm93PyBDaGFuZ2UgdGhlIHdpZHRoIG9mIHRoZSBjb250YWluaW5nICZsdDtkaXYmZ3Q7IGFuZCBzZXQgdGhlIHdpZHRoIG9mIGVhY2ggdGh1bWJuYWlsIHNwYWNlIHRvIGEgcGFydGljdWxhciBzaXplLjwvcD4NCg0KPHA+VGhlIGZvbGxvd2luZyBsb2dpY2FsIHN0cnVjdHVyZSBhcHBsaWVzOjwvcD4NCg0KPHVsPg0KPGxpPkFuIG9wdGlvbmFsIHdyYXB0YWcgYW5kIGNsYXNzIG5hbWUgYXJvdW5kIGVhY2ggImNlbGwiIChpLmUuIHRodW1ibmFpbCk8L2xpPg0KPGxpPkEgbGluayBlbGVtZW50IGNvbnRhaW5pbmcgdGhlIHRodW1ibmFpbCdzIDxjb2RlPiZsdDtpbWcmZ3Q7PC9jb2RlPiB0YWc8L2xpPg0KPGxpPlRoZSBjYXB0aW9uL2FsdCBpcyBhICZsdDtzcGFuJmd0OyB3aXRoIGFuIG9wdGlvbmFsIGNsYXNzIGFuZCBjYW4gYXBwZWFyIGFib3ZlLCBiZWxvdyBvciB3aXRoaW4gdGhlIGxpbmsgZWxlbWVudDwvbGk+DQo8bGk+VGhlIG5leHQvcHJldiBsaW5rcyBhcmUgd3JhcHBlZCBpbiB0aGUgb3B0aW9uYWwgd3JhcHRhZyBjb250YWluZXIgYW5kIGNhbiBiZSBnaXZlbiBhbiBvcHRpb25hbCBjbGFzcyBuYW1lPC9saT4NCjxsaT5UaGUgbmV4dCBsaW5rIGhhcyBhIChkZWZhdWx0KSBjbGFzcyBvZiAic21kX3NsaW1ib3hfbmV4dCIgYW5kIHByZXYgaGFzICJzbWRfc2xpbWJveF9wcmV2Ii4gVGhlc2UgY2FuIGJlIGNoYW5nZWQgb3IgcmVtb3ZlZCBpZiB5b3Ugd2lzaC48L2xpPg0KPC91bD4NCg0KPHA+VXNpbmcgQ1NTIHNlbGVjdG9ycyB5b3UgY2FuIGFjY2VzcyBldmVyeSBwYXJ0IG9mIHRoZSBzdHJ1Y3R1cmUuIEFuIGV4YW1wbGUgQ1NTIGxheW91dCBpcyBnaXZlbiBoZXJlIHRvIGdldCB5b3Ugc3RhcnRlZCAoYXNzdW1lcyBhIHdyYXB0YWcgb2YgJ2xpJywgYSBjb250YWluaW5nICd1bCcgYXJvdW5kIHRoZSBwbHVnaW4gdGFnIHdpdGggYSBjbGFzcyBvZiA8Y29kZT5zbWRfc2xpbWJveDwvY29kZT4gYW5kIDxjb2RlPm5hdmNsYXNzPSJzbWRfc2xpbWJveF9uYXYiPC9jb2RlPikuIFBhc3RlIGl0IGludG8geW91ciBDU1MgdGVtcGxhdGUgYW5kIHlvdSdyZSBnb29kIHRvIGdvLjwvcD4NCg0KPHByZT4NCi5zbWRfc2xpbWJveCB7DQoJZmxvYXQ6bGVmdDsNCgl3aWR0aDo2MDBweDsNCgltYXJnaW46MWVtIDA7DQoJY2xlYXI6Ym90aDsNCglsaXN0LXN0eWxlOm5vbmU7DQp9DQouc21kX3NsaW1ib3ggbGkgew0KCXdpZHRoOjE1MHB4Ow0KCWhlaWdodDoxNTBweDsNCglmbG9hdDpsZWZ0Ow0KCW1hcmdpbjoxZW0gYXV0bzsNCgl0ZXh0LWFsaWduOmNlbnRlcjsNCn0NCi5zbWRfc2xpbWJveCBpbWcgew0KCW1hcmdpbjowIGF1dG87DQp9DQouc21kX3NsaW1ib3ggc3BhbiB7DQoJZmxvYXQ6bGVmdDsNCgl3aWR0aDoxNDBweDsNCglwYWRkaW5nOjJweCAwIDAgNXB4Ow0KfQ0KbGkuc21kX3NsaW1ib3hfbmF2IHsNCgljbGVhcjpib3RoOw0KCXdpZHRoOjUwMHB4Ow0KCXBhZGRpbmc6MjBweDsNCn0NCi5zbWRfc2xpbWJveF9wcmV2IHsNCglmbG9hdDpsZWZ0Ow0KfQ0KLnNtZF9zbGltYm94X25leHQgew0KCWZsb2F0OnJpZ2h0Ow0KfQ0KPC9wcmU+IjtzOjQ6ImNvZGUiO3M6MTk5MDY6Ii8vIHYwLjEgICBJbml0aWFsIHB1YmxpYyByZWxlYXNlDQovLyB2MC4xMSBBZGRlZCAhY2F0ZWdvcnkgc3VwcG9ydA0KLy8gdjAuMTIgQWRkZWQgdGV4dHBvcyBvcHRpb24gKHRoYW5rcyBsZWUpIGFuZCBpbWFnZWlkIG9wdGlvbiAodGhhbmtzIHdvdWFyZW4pDQovLyB2MC4yICAganMgYW5kIGNzcyBjYW4gbm93IGJlIGxvYWRlZCBlbHNld2hlcmUgKHRoYW5rcyBqc3R1YmJzKS4gQWRkZWQgd3JhcHRhZyBhbmQgY2hhbmdlZCBkZWZhdWx0cyB0byBtYWtlIG91dHB1dCBsZXNzIGxpa2UgdGFnLXNvdXAgKHRoYW5rcyB3b3VhcmVuKQ0KLy8gdjAuMjEgQWRkZWQgb3JkZXJieT0iZml4ZWQiIHRvIGFsbG93ZWQgZml4ZWQgaW1hZ2VpZCBvcmRlcmluZyAodGhhbmtzIGxlZSkuICR3aGVyZSB3YXJuaW5nIHNxdWFzaGVkICh0aGFua3MgYmVuamlib3QpDQovLyB2MC4yMiBOb3cgdXNlcyBzbWRfbGliIGFuZCBzdWJjYXRzLiBBbHNvIE1MUChNdWx0aS1saW5ndWFsKS1hd2FyZS4NCi8vIHYwLjIzIEZpeGVkIG9yZGVyYnkgd2hlbiB1c2luZyByYW5kb20gKHRoYW5rcyBtcmRhbGUpIGFuZCBhZGRlZCBhYmlsaXR5IHRvIG92ZXJyaWRlIG1heGxpbWl0DQovLyB2MC4yNCBBZGRlZCBsaWJjaGVjayAodGhhbmtzIHBhcHVhc3MpLiBOdW1lcmljIHJhbmdlcyBub3cgYWxsb3dlZCBmb3IgSURzIChzbWRfbGliKS4gRml4ZWQgZW1wdHkgZmllbGQvaW1hZ2VpZCBuZWdhdGlvbiBidWdzLiBGaXhlZCBuZXh0L3ByZXYgYnV0dG9ucyBmb3IgTUxQLg0KLy8gdjAuMjRiIEZpeGVkIHBhZ2luZyBpbiBzdWJkaXJlY3RvcnkgaW5zdGFsbGF0aW9ucyAodGhhbmtzIHVsdHJhbWVnYSBhbmQgUXdlc3QpDQovLyB2MC4yNSBFeHRlbmRlZCBncm91cG5hbWUgKHRoYW5rcyBbQXhlbF0pDQovLyB2MC4yNWEgQnVuZGxlZCBsYXRlc3QgdmVyc2lvbiBvZiBzbGltYm94IGluIHRoZSBwYWNrYWdlLiBNYWRlIHRoZSBkb2NzIGVhc2llciB0byByZWFkLg0KLy8gdjAuMjYgQWRkZWQgdHJ1ZSBtdWx0aXBsZSBnYWxsZXJ5IHN1cHBvcnQgKHRoYW5rcyB3aGVhdGljdXMpDQovLyB2MC4yNyBBZGRlZCB0aHVtYiAodGhhbmtzIHByb2dyZTU1KQ0KLy8gdjAuMjggQWRkZWQgaW1hZ2VjYXB0aW9uICh0aGFua3MgQWRhbV9WKQ0KLy8gdjAuMjkgQWRkZWQgdGh1bWJzaXplICh0aGFua3MgU2ltYW5laykNCi8vIHYwLjI5YSBGaXhlZCB1bmRlZmluZWQgaW5kZXggd2FybmluZ3MgKHRoYW5rcyBBbWJpdGlvdXNsZW1vbikNCi8vIHYwLjI5YiBGaXhlZCB0aGUgZml4IGZyb20gdjAuMjQgcmVnYXJkaW5nIGFuIFNRTCBlcnJvciBpZiB0aGUgY2F0ZWdvcnkgaXMgbm90IHNldCB3aGVuIHVzaW5nID9jICh0aGFua3MgTXIuU21pdGgpLiBBbHNvIGZpeGVkICdweCcgaW4gdGh1bWJzaXplICh0aGFua3Mgcm9iaW43NDYpDQoNCnJlcXVpcmVfcGx1Z2luKCdzbWRfbGliJyk7DQpyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3Nib3hfZW51bV9zdHInLCAnbDEwbi5lbnVtZXJhdGVfc3RyaW5ncycpOw0KZ2xvYmFsICRzbWRfc2JveF9saWJzOw0KZ2xvYmFsICRzbWRfc2JveF9zdHI7DQokc21kX3Nib3hfc3RyID0gYXJyYXkoDQoJJ2luY2VycicgPT4gJ0lmIHVzaW5nIHRoZSBzY3JpcHRzIG9wdGlvbiwgc3BlY2lmeSB1cCB0byB0aHJlZSByZXF1aXJlZCBzY3JpcHRzIGluIHRoaXMgb3JkZXI6ICZsdDt0eHA6c21kX3NsaW1ib3hfaW5jIHNjcmlwdHM9Im1vb3Rvb2xzSlNMb2NhdGlvbiwgc2xpbWJveEpTTG9jYXRpb24sIHNsaW1ib3hDU1NMb2NhdGlvbiIgLyZndDsuIElmIGFueSBwb3NpdGlvbnMgYXJlIGxlZnQgZW1wdHksIHRoZSBtaXNzaW5nIHNjcmlwdHMgbXVzdCBiZSBzdXBwbGllZCB2aWEgdGhlIGpzZGlyL2Nzc2RpciBvcHRpb25zLCBvciBsb2FkZWQgZXh0ZXJuYWxseSBhbmQgdG9sZCB0byBza2lwIHRoaXMgc3RlcC4gVGhlIHRocmVlIHZhbHVlcyBjYW4gZWl0aGVyIGJlIGEgZnVsbCBYSFRNTCBzdHJpbmcgKGUuZy4gYXMgcmV0dXJuZWQgYnkgdHhwOnN0bV9qYXZhc2NyaXB0IG9yIHR4cDpjc3MsIGFsdGhvdWdoIHRoZXkgbWF5IG5vdCB3b3JrIGRpcmVjdGx5IHdpdGhpbiB0aGUgdGFnOyBzZWUgdGhlIGRvY3MpIG9yIHNpbXBseSBwYXRocyB0byB0aGUgZmlsZXMuIE5vdGUgdGhhdCBubyB2YWxpZGF0aW9uIGlzIHBlcmZvcm1lZCB0byBjaGVjayBpZiB0aGUgZmlsZXMgZXhpc3QuJywNCgknbm9pbmMnID0+ICdSZXF1aXJlZCBsaWJyYXJpZXMgbm90IGxvYWRlZC4gQ2FsbCAmbHQ7dHhwOnNtZF9zbGltYm94X2luYyAvJmd0OyBpbiB0aGUgJmx0O2hlYWQmZ3Q7IG9mIHRoaXMgcGFnZS4nLA0KCSduZXh0X2xibCcgPT4gJ05leHQnLA0KCSdwcmV2X2xibCcgPT4gJ1ByZXYnLA0KKTsNCg0KLy8gVXNlIHRoaXMgdG8gaW5jbHVkZSB0aGUgbGlicmFyaWVzIGluIHRoZSA8aGVhZD4gc2VjdGlvbiBvZiB0aGUgcGFnZQ0KZnVuY3Rpb24gc21kX3NsaW1ib3hfaW5jKCRhdHRzKSB7DQoJZ2xvYmFsICRzbWRfc2JveF9saWJzOw0KCWdsb2JhbCAkc21kX3Nib3hfc3RyOw0KDQoJaWYgKGlzX2FycmF5KCRhdHRzKSkgZXh0cmFjdCgkYXR0cyk7DQoNCgkvLyBGdW5jdGlvbiBvcHRpb25zDQoJJGpzZGlyID0gaXNzZXQoJGpzZGlyKSA/IGRvU2xhc2goJGpzZGlyKSA6ICcnOw0KCSRjc3NkaXIgPSBpc3NldCgkY3NzZGlyKSA/IGRvU2xhc2goJGNzc2RpcikgOiAnJzsNCgkkc2NyaXB0cyA9IGlzc2V0KCRzY3JpcHRzKSA/ICRzY3JpcHRzIDogJyc7DQoJJHNraXAgPSBpc3NldCgkc2tpcCkgPyAkc2tpcCA6ICIwIjsNCg0KCSRtb2RzUmVxdWlyZWQgPSAzOw0KCSRtb2RzTG9hZGVkID0gMDsNCgkkb3V0U3RyID0gJyc7DQoNCglpZiAoJHNraXAgPiAwKSB7DQoJCSRtb2RzTG9hZGVkID0gJHNraXA7DQoJfQ0KDQoJLy8gSW5jbHVkZSB0aGUganMgbGlicyBpZiByZXF1aXJlZA0KCWlmICgkanNkaXIgIT0gJycpIHsNCgkJJG91dFN0ciAuPSAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJyAuJGpzZGlyLiAnL21vb3Rvb2xzLmpzIj48L3NjcmlwdD4nLm47DQoJCSRvdXRTdHIgLj0gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicgLiRqc2Rpci4gJy9zbGltYm94LmpzIj48L3NjcmlwdD4nLm47DQoJCSRtb2RzTG9hZGVkICs9IDI7DQoJfQ0KDQoJLy8gRmluZCB3aGljaCBzY3JpcHRzIHRvIGF1dG8tbG9hZA0KCWlmICgoJHNjcmlwdHMgIT0gJycpICYmICgkbW9kc0xvYWRlZCA8ICRtb2RzUmVxdWlyZWQpKSB7DQoJCSRtb2RzTGlzdCA9IHByZWdfc3BsaXQoJy9bLF0rLycsJHNjcmlwdHMsJG1vZHNSZXF1aXJlZCk7DQoJCSRqc3ByZWZpeCA9ICI8c2NyaXB0IjsNCgkJJGNzc3ByZWZpeCA9ICI8bGluayI7DQoJCSR0eHBwcmVmaXggPSAiPHR4cCI7DQoJCWZvcmVhY2ggKCRtb2RzTGlzdCBhcyAkZmlsZW9iaikgew0KCQkJJGZpbGVvYmogPSB0cmltKCRmaWxlb2JqKTsNCgkJCWlmICgkZmlsZW9iaiA9PSAnJykgew0KCQkJCSRtb2RzTG9hZGVkLS07DQoJCQl9IGVsc2UgaWYgKHN1YnN0cigkZmlsZW9iaiwgMCwgc3RybGVuKCRqc3ByZWZpeCkpID09PSAkanNwcmVmaXgpIHsNCgkJCQkkb3V0U3RyIC49ICRmaWxlb2JqLm47DQoJCQl9IGVsc2UgaWYgKHN1YnN0cigkZmlsZW9iaiwgMCwgc3RybGVuKCRjc3NwcmVmaXgpKSA9PT0gJGNzc3ByZWZpeCkgew0KCQkJCSRvdXRTdHIgLj0gJGZpbGVvYmoubjsNCgkJCX0gZWxzZSBpZiAoc3Vic3RyKCRmaWxlb2JqLCAwLCBzdHJsZW4oJHR4cHByZWZpeCkpID09PSAkdHhwcHJlZml4KSB7DQoJCQkJJG91dFN0ciAuPSBwYXJzZSgkZmlsZW9iaik7DQoJCQl9IGVsc2Ugew0KCQkJCWlmICgkbW9kc0xvYWRlZCA8IDIpIHsNCgkJCQkJJG91dFN0ciAuPSAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJyAuJGZpbGVvYmouICciPjwvc2NyaXB0PicubjsNCgkJCQl9IGVsc2Ugew0KCQkJCQkkb3V0U3RyIC49ICc8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9IicgLiRmaWxlb2JqLiAnIiB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InNjcmVlbiIgLz4nLm47DQoJCQkJfQ0KCQkJfQ0KCQkJJG1vZHNMb2FkZWQrKzsNCgkJfQ0KCX0NCg0KCS8vIEluY2x1ZGUgdGhlIGNzcyBmaWxlIGlmIHJlcXVpcmVkDQoJaWYgKCRjc3NkaXIgIT0gJycpIHsNCgkJJG91dFN0ciAuPSAnPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSInIC4kY3NzZGlyLiAnL3NsaW1ib3guY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InNjcmVlbiIgLz4nLm47DQoJCSRtb2RzTG9hZGVkKys7DQoJfQ0KDQoJLy8gU2V0IHRoZSBmbGFnIHRvIHNheSB0aGUgbGlicyBhcmUgb2suIFNoYW1lIHRoZXJlJ3Mgbm8gZWFzeSBwcm92aXNpb24gZm9yDQoJLy8gY2hlY2tpbmcgdGhlIGZpbGVzIGFjdHVhbGx5IGV4aXN0IGF0IHRoZSBnaXZlbiBsb2NhdGlvbnMsIGJ1dCBoZXkNCglpZiAoJG1vZHNMb2FkZWQgPT0gJG1vZHNSZXF1aXJlZCkgew0KCQkkc21kX3Nib3hfbGlicyA9IHRydWU7DQoJfSBlbHNlIHsNCgkJJHNtZF9zYm94X2xpYnMgPSBmYWxzZTsNCgkJJG91dFN0ciA9IHNtZF9nVHh0KCRzbWRfc2JveF9zdHIsJ2luY2VycicpLm47DQoJfQ0KDQoJcmV0dXJuICRvdXRTdHI7DQp9DQoNCmZ1bmN0aW9uIHNtZF9zbGltYm94KCRhdHRzKSB7DQoJZ2xvYmFsICRwcmV0ZXh0LCAkdGhpc2FydGljbGUsICRpbWdfZGlyOw0KCWdsb2JhbCAkc21kX3Nib3hfbGlicywgJHNtZF9zYm94X3N0cjsNCg0KCWlmIChpc19hcnJheSgkYXR0cykpIGV4dHJhY3QoJGF0dHMpOw0KCSRjYXRpZG9wdHMgPSAoaXNzZXQoJGNhdGVnb3J5KSB8fCBpc3NldCgkaW1hZ2VpZCkpID8gdHJ1ZSA6IGZhbHNlOw0KDQoJLy8gUGx1Z2luIG9wdGlvbnMNCgkkbGliY2hlY2sgPSBpc3NldCgkbGliY2hlY2spID8gJGxpYmNoZWNrOiAiMSI7DQoJJGltYWdlaWQgPSBpc3NldCgkaW1hZ2VpZCkgPyBkb1NsYXNoKCRpbWFnZWlkKSA6ICcnOw0KCSRjYXRlZ29yeSA9IGlzc2V0KCRjYXRlZ29yeSkgPyBkb1NsYXNoKCRjYXRlZ29yeSkgOiAoKCRpbWFnZWlkPT0iIikgPyAkcHJldGV4dFsnYyddOiAnJyk7DQoJJHN1YmNhdHMgPSBpc3NldCgkc3ViY2F0cykgPyB0cnVlIDogZmFsc2U7DQoJJGNhdGxhYmVsID0gaXNzZXQoJGNhdGxhYmVsKSA/ICRjYXRsYWJlbDogImFydGljbGUtIjsNCgkkZ3JvdXBuYW1lID0gaXNzZXQoJGdyb3VwbmFtZSkgPyAkZ3JvdXBuYW1lOiAic21kIjsNCgkkdGh1bWIgPSBpc3NldCgkdGh1bWIpID8gdHJ1ZSA6IGZhbHNlOw0KCSRtYXhsaW1pdCA9IGlzc2V0KCRtYXhsaW1pdCkgPyAkbWF4bGltaXQ6ICI5OTk5OSI7DQoJJGxpbWl0ID0gaXNzZXQoJGxpbWl0KSA/ICRsaW1pdDogIjAiOw0KCSRvcmRlcmJ5ID0gaXNzZXQoJG9yZGVyYnkpID8gJG9yZGVyYnk6ICJjYXRlZ29yeSI7DQoJJHNob3dwYWdlbGlua3MgPSBpc3NldCgkc2hvd3BhZ2VsaW5rcykgPyAkc2hvd3BhZ2VsaW5rczogIjEiOw0KCSRnYWxsZXJ5aWQgPSBpc3NldCgkZ2FsbGVyeWlkKSA/ICRnYWxsZXJ5aWQ6ICI/NDo2IjsNCgkkdGh1bWJzaXplID0gaXNzZXQoJHRodW1ic2l6ZSkgPyAkdGh1bWJzaXplIDogIiI7DQoJJHByZXZsYWJlbD0gaXNzZXQoJHByZXZsYWJlbCkgPyAkcHJldmxhYmVsOiBzbWRfZ1R4dCgkc21kX3Nib3hfc3RyLCAncHJldl9sYmwnKTsNCgkkbmV4dGxhYmVsPSBpc3NldCgkbmV4dGxhYmVsKSA/ICRuZXh0bGFiZWw6IHNtZF9nVHh0KCRzbWRfc2JveF9zdHIsICduZXh0X2xibCcpOw0KCSRpbWFnZWNhcHRpb24gPSBpc3NldCgkaW1hZ2VjYXB0aW9uKSA/ICRpbWFnZWNhcHRpb246ICI/Y2FwdGlvbiI7DQoJJHNob3djYXB0aW9uID0gaXNzZXQoJHNob3djYXB0aW9uKSA/ICRzaG93Y2FwdGlvbjogIjAiOw0KCSRzaG93YWx0ID0gaXNzZXQoJHNob3dhbHQpID8gJHNob3dhbHQ6ICIwIjsNCgkkdGV4dHBvcyA9IGlzc2V0KCR0ZXh0cG9zKSA/ICR0ZXh0cG9zOiAiYmVsb3ciOw0KCSR3cmFwdGFnID0gaXNzZXQoJHdyYXB0YWcpID8gJHdyYXB0YWc6ICIiOw0KCSRjZWxsY2xhc3MgPSBpc3NldCgkY2VsbGNsYXNzKSA/ICRjZWxsY2xhc3M6ICIiOw0KCSRpbWdjbGFzcyA9IGlzc2V0KCRpbWdjbGFzcykgPyAkaW1nY2xhc3M6ICIiOw0KCSRuYXZjbGFzcyA9IGlzc2V0KCRuYXZjbGFzcykgPyAkbmF2Y2xhc3M6ICIiOw0KCSRwcmV2Y2xhc3MgPSBpc3NldCgkcHJldmNsYXNzKSA/ICRwcmV2Y2xhc3M6ICJzbWRfc2xpbWJveF9wcmV2IjsNCgkkbmV4dGNsYXNzID0gaXNzZXQoJG5leHRjbGFzcykgPyAkbmV4dGNsYXNzOiAic21kX3NsaW1ib3hfbmV4dCI7DQoJJGNhcHRpb25jbGFzcyA9IGlzc2V0KCRjYXB0aW9uY2xhc3MpID8gJGNhcHRpb25jbGFzczogIiI7DQoJJGFsdGNsYXNzID0gaXNzZXQoJGFsdGNsYXNzKSA/ICRhbHRjbGFzczogIiI7DQoNCgkkZml4ZWRPcmRlciA9IGZhbHNlOw0KCSRnYWxsSUQgPSAiIjsNCgkkZmllbGRNYXAgPSBhcnJheSgibmFtZSIgPT4gIm5hbWUiLA0KCQkJCQkJCSJpZCIgPT4gImlkIiwNCgkJCQkJCQkiYWx0IiA9PiAiYWx0IiwNCgkJCQkJCQkiY2FwdGlvbiIgPT4gImNhcHRpb24iLA0KCQkJCQkJCSJjYXRlZ29yeSIgPT4gImNhdGVnb3J5IiwNCgkJCQkJCQkiYXV0aG9yIiA9PiAiYXV0aG9yIiwNCgkJCQkJCQkiZGF0ZSIgPT4gImRhdGUiLA0KCQkJCQkJCSJleHQiID0+ICJleHQiLA0KCQkJCQkJCSJ3IiA9PiAid2lkdGgiLA0KCQkJCQkJCSJoIiA9PiAiaGVpZ2h0Iik7DQoNCgkvLyBUaGUgZ2FsbGVyeSBpZGVudGlmaWVyIGlzIHVzZWQgZm9yIGtlZXBpbmcgdHJhY2sgb2YgbmV4dC9wcmV2IHRodW1icGFnZSBsaW5rcw0KCWlmICgkZ2FsbGVyeWlkID09ICIiIHx8IHN1YnN0cigkZ2FsbGVyeWlkLDAsMSkgPT0gIj8iKSB7DQoJCS8vIEdlbmVyYXRlIGEgdW5pcXVlIElEIGZvciB0aGlzIGdhbGxlcnkgaW5zdGFuY2UNCgkJJGdhbGxUbXAgPSBtZDUoJGNhdGVnb3J5LiRpbWFnZWlkLiRvcmRlcmJ5LiRsaW1pdC4kbWF4bGltaXQuJHdyYXB0YWcpOw0KCQlsaXN0KCRnYWxsTGVuLCAkZ2FsbFNraXApID0gZXhwbG9kZSgiOiIsIHN1YnN0cigkZ2FsbGVyeWlkLDEpKTsNCgkJJGdhbGxMZW4gPSAgKGVtcHR5KCRnYWxsTGVuKSkgPyAiNCIgOiAkZ2FsbExlbjsNCgkJJGdhbGxTa2lwID0gIChlbXB0eSgkZ2FsbFNraXApKSA/ICIxIiA6ICRnYWxsU2tpcDsNCgkJZm9yICgkaWR4ID0gMCwgJGNudCA9IDA7ICRjbnQgPCAkZ2FsbExlbjsgJGNudCsrLCAkaWR4ID0gKCgkaWR4KyRnYWxsU2tpcCkgJSBzdHJsZW4oJGdhbGxUbXApKSkgew0KCQkJJGdhbGxJRCAuPSAkZ2FsbFRtcFskaWR4XTsNCgkJfQ0KCX0gZWxzZSB7DQoJCSRnYWxsSUQgPSAkZ2FsbGVyeWlkOw0KCX0NCg0KCS8vIE1haW4gY29kZSBib2R5DQoJaWYgKCgkbGliY2hlY2sgPT0gMSkgJiYgKCRzbWRfc2JveF9saWJzID09IGZhbHNlKSkgew0KCQkkb3V0U3RyID0gc21kX2dUeHQoJHNtZF9zYm94X3N0ciwnbm9pbmMnKTsNCgl9IGVsc2Ugew0KCQkvLyBUaGUgZGF0YWJhc2UgZmllbGRzIHJlcXVpcmVkDQoJCSRmaWVsZHMgPSAnaWQsbmFtZSxjYXB0aW9uLGFsdCxjYXRlZ29yeSxkYXRlLGF1dGhvcixleHQsdyxoJzsNCg0KCQkvLyBDb252ZXJ0IHRoZSBjYXRlZ29yeSAocG9zc2libHkgYSBjb21tYS1zZXAgbGlzdCkgaW50byBhbiBTUUwtc3R5bGUgJ2luJyBsaXN0Lg0KCQkkZnVsbENhdExpc3QgPSBhcnJheSgpOw0KCQkkbm90Q2F0TGlzdCA9IGFycmF5KCk7DQoJCSRjYXRWYXJzID0gYXJyYXkoIj9jIiwgIiFjIiwgIj9zIiwgIiFzIiwgIj90IiwgIiF0IiwgIj9pZCIsICIhaWQiLCAiP2ZpZWxkIiwgIiFmaWVsZCIpOw0KCQkkcmV0QXJyYXkgPSBzbWRfZ2V0QXR0cygkY2F0ZWdvcnksICRjYXRWYXJzLCAkY2F0bGFiZWwpOw0KCQkkZnVsbENhdExpc3QgPSAkcmV0QXJyYXlbMF07DQoJCSRub3RDYXRMaXN0ID0gJHJldEFycmF5WzFdOw0KDQoJCS8vIENvbnZlcnQgdGhlIGltYWdlaWQgKHBvc3NpYmx5IGEgY29tbWEtc2VwIGxpc3QpIGludG8gYW4gU1FMLXN0eWxlICdpbicgbGlzdC4NCgkJJGZ1bGxJRExpc3QgPSBhcnJheSgpOw0KCQkkbm90SURMaXN0ID0gYXJyYXkoKTsNCgkJJGlkVmFycyA9IGFycmF5KCI/aWQiLCAiIWlkIiwgIj9maWVsZCIsICIhZmllbGQiKTsNCgkJJHJldEFycmF5ID0gc21kX2dldEF0dHMoJGltYWdlaWQsICRpZFZhcnMpOw0KCQkkZnVsbElETGlzdCA9ICRyZXRBcnJheVswXTsNCgkJJG5vdElETGlzdCA9ICRyZXRBcnJheVsxXTsNCg0KCQkvLyBNYWtlIHVwIHRoZSBXSEVSRSBzdGF0ZW1lbnQgZnJvbSB0aGUgY29tYmluZWQgbGlzdHMuDQoJCS8vIFRoZSBjYXRlZ29yaWVzL2ltYWdlIElEcyBhcmUgT1JlZCB0b2dldGhlciBpbiBicmFja2V0cyBmaXJzdA0KCQkvLyBiZWZvcmUgdGhlIG5lZ2F0aW9uIG9wdGlvbnMgYXJlIHRhY2tlZCBvbiBhcyBBTkRzIGFmdGVyd2FyZHMNCgkJJHdoZXJlT1IgPSBhcnJheSgpOw0KCQkkd2hlcmVBTkQgPSBhcnJheSgpOw0KDQoJCS8vIFN0YXJ0IHRoZSBXSEVSRSBzdGF0ZW1lbnQgd2l0aCB0aGUgY29tYmluZWQgbGlzdCBvZiBpbWFnZSBJRHMNCgkJaWYgKGNvdW50KCRmdWxsSURMaXN0KSA+IDApIHsNCgkJCWZvciAoJGlkeCA9IGNvdW50KCRmdWxsSURMaXN0KTsgJGlkeCA+PTA7ICRpZHgtLSkgew0KCQkJCWlmIChlbXB0eSgkZnVsbElETGlzdFskaWR4XSkpIHsNCgkJCQkJdW5zZXQoJGZ1bGxJRExpc3RbJGlkeF0pOw0KCQkJCX0gZWxzZSB7DQoJCQkJCSRmdWxsSURMaXN0WyRpZHhdID0gIiciIC4gJGZ1bGxJRExpc3RbJGlkeF0gLiAiJyI7DQoJCQkJfQ0KCQkJfQ0KCQkJaWYgKGNvdW50KCRmdWxsSURMaXN0KSA+IDApIHsNCgkJCQkkd2hlcmVPUltdID0gImlkIElOICgiIC4gaW1wbG9kZSgiLCIsICRmdWxsSURMaXN0KS4gIikiOw0KCQkJfQ0KCQl9DQoNCgkJLy8gaW5jbHVkZWQgY2F0ZWdvcmllcyAtIHNvbWUgbWF5IGJlIHN1YmNhdHMNCgkJJHRtcGEgPSBhcnJheSgpOw0KCQlmb3IgKCRpZHggPSAwOyAkaWR4IDwgY291bnQoJGZ1bGxDYXRMaXN0KTsgJGlkeCsrKSB7DQoJCQlpZiAoJHN1YmNhdHMpIHsNCgkJCQkkY2F0ZWdzID0gc21kX2dldFN1YkNhdHMoJGZ1bGxDYXRMaXN0WyRpZHhdLCdpbWFnZScpOw0KCQkJCWZvciAoJGpkeCA9IDA7ICRqZHggPCBjb3VudCgkY2F0ZWdzKTsgJGpkeCsrKSB7DQoJCQkJCWlmICgkY2F0ZWdzWyRqZHhdWyduYW1lJ10gIT0gInJvb3QiKSB7DQoJCQkJCQkkdG1wYVtdID0gIiciIC4kY2F0ZWdzWyRqZHhdWyduYW1lJ10uICInIjsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0gZWxzZSB7DQoJCQkJJHRtcGFbXSA9ICInIiAuJGZ1bGxDYXRMaXN0WyRpZHhdLiAiJyI7DQoJCQl9DQoJCX0NCgkJaWYgKGNvdW50KCR0bXBhKSA+IDApIHsNCgkJCSR3aGVyZU9SW10gPSAiY2F0ZWdvcnkgSU4gKCIgLmltcGxvZGUoIiwiLCAkdG1wYSkuICIpIjsNCgkJfQ0KDQoJCWlmIChjb3VudCgkd2hlcmVPUikgPiAwKSB7DQoJCQkkd2hlcmUgPSAiKCIgLiBpbXBsb2RlKCIgT1IgIiwgJHdoZXJlT1IpIC4gIikiOw0KCQl9IGVsc2Ugew0KCQkJJHdoZXJlID0gIiI7DQoJCX0NCg0KCQkvLyBleGNsdWRlZCBjYXRlZ29yaWVzDQoJCSR0bXBhID0gYXJyYXkoKTsNCgkJZm9yICgkaWR4ID0gMDsgJGlkeCA8IGNvdW50KCRub3RDYXRMaXN0KTsgJGlkeCsrKSB7DQoJCQlpZiAoJHN1YmNhdHMpIHsNCgkJCQkkY2F0ZWdzID0gc21kX2dldFN1YkNhdHMoJG5vdENhdExpc3RbJGlkeF0sJ2ltYWdlJyk7DQoJCQkJZm9yICgkamR4ID0gMDsgJGpkeCA8IGNvdW50KCRjYXRlZ3MpOyAkamR4KyspIHsNCgkJCQkJaWYgKCRjYXRlZ3NbJGpkeF1bJ25hbWUnXSAhPSAicm9vdCIpIHsNCgkJCQkJCSR0bXBhW10gPSAiJyIgLiRjYXRlZ3NbJGpkeF1bJ25hbWUnXS4gIiciOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfSBlbHNlIHsNCgkJCQkkdG1wYVtdID0gIiciIC4kbm90Q2F0TGlzdFskaWR4XS4gIiciOw0KCQkJfQ0KCQl9DQoJCWlmIChjb3VudCgkdG1wYSkgPiAwKSB7DQoJCQkkd2hlcmVBTkRbXSA9ICJjYXRlZ29yeSBOT1QgSU4gKCIgLmltcGxvZGUoIiwiLCAkdG1wYSkuICIpIjsNCgkJfQ0KDQoJCS8vIEFkZCB0byB0aGUgV0hFUkUgc3RhdGVtZW50IHRoZSBjb21iaW5lZCBsaXN0IG9mIE5PVCBpbWFnZSBJRHMNCgkJaWYgKGNvdW50KCRub3RJRExpc3QpID4gMCkgew0KCQkJZm9yICgkaWR4ID0gY291bnQoJG5vdElETGlzdCk7ICRpZHggPj0wOyAkaWR4LS0pIHsNCgkJCQlpZiAoZW1wdHkoJG5vdElETGlzdFskaWR4XSkpIHsNCgkJCQkJdW5zZXQoJG5vdElETGlzdFskaWR4XSk7DQoJCQkJfSBlbHNlIHsNCgkJCQkJJG5vdElETGlzdFskaWR4XSA9ICInIiAuICRub3RJRExpc3RbJGlkeF0gLiAiJyI7DQoJCQkJfQ0KCQkJfQ0KCQkJaWYgKGNvdW50KCRub3RJRExpc3QpID4gMCkgew0KCQkJCSR3aGVyZUFORFtdID0gImlkIE5PVCBJTiAoIiAuIGltcGxvZGUoIiwiLCAkbm90SURMaXN0KS4gIikiOw0KCQkJfQ0KCQl9DQoNCgkJaWYgKGNvdW50KCR3aGVyZUFORCkgPiAwKSB7DQoJCQkkd2hlcmUgLj0gKCgkd2hlcmU9PSIiKSA/ICIiIDogIiBBTkQgIikgLiBpbXBsb2RlKCIgQU5EICIsICR3aGVyZUFORCk7DQoJCX0NCg0KCQlpZiAoJHdoZXJlID09ICIiKSB7DQoJCQlpZiAoISRjYXRpZG9wdHMpIHsNCgkJCQkvLyBJZiBubyBjYXRlZ29yeS9pZCBvcHRpb25zIGdpdmVuLCBjaG9vc2UgZnJvbSB0aGUgd2hvbGUgZGF0YWJhc2UNCgkJCQkkd2hlcmUgPSAiMT0xIjsNCgkJCX0gZWxzZSB7DQoJCQkJLy8gSWYgYSBjYXRlZ29yeS9pZCBvcHRpb24gd2FzIGNob3NlbiB0aGVuIHRoZSB2YWx1ZXMgbXVzdCBiZSBlbXB0eS4NCgkJCQkvLyBJbiB0aGlzIGNhc2UgdGhlIHBsdWdpbiBzaG91bGQgY2hvb3NlIGZyb20gYSBib2d1cyBjYXRlZ29yeSB0aGF0IHNob3VsZCBub3QgZXhpc3QuDQoJCQkJJHdoZXJlID0gImNhdGVnb3J5PSdzbWRfIi5tdF9yYW5kKCkuIiciOw0KCQkJfQ0KCQl9DQoNCgkJLy8gQ29udmVydCB0aGUgb3JkZXJieSBpbnRvIGEgdmFsaWQgc29ydGluZyBoaWVyYXJjaHkuDQoJCS8vIE5vdGUgdGhhdCByYW5kb20gaXMgYSBzcGVjaWFsIGNhc2UgYW5kIHRoZSBmb2xsb3dpbmcgcnVsZXMgYXBwbHk6DQoJCS8vICAxKSBBbnl0aGluZyBhcHBlYXJpbmcgYmVmb3JlIHJhbmRvbSBpcyBwYXNzZWQgdG8gdGhlIGRhdGFiYXNlIHF1ZXJ5IGZvciBvcmRlcmluZw0KCQkvLyAgMikgQXMgc29vbiBhcyByYW5kb20gaXMgZW5jb3VudGVyZWQsIHRoZSBvcmRlcmJ5IHN0cmluZyBpcyBpZ25vcmVkLg0KCQkvLyAgICAgVGhlIHJlc3VsdHNldCB3aWxsIGJlIHNvcnRlZCByYW5kb21seSBpbnN0ZWFkDQoJCS8vICAzKSBJZiByYW5kb20gYXBwZWFycyBmaXJzdCBpbiB0aGUgbGlzdCwgdGhlIGRhdGEgaXMgcmV0cmlldmVkIHJhbmRvbWx5IHRoZW4gdGhlDQoJCS8vICAgICByZW1haW5pbmcgb3B0aW9ucyBzb3J0IHRoZSByZXN1bHRzZXQNCgkJJHdoZXJlT0IgPSBBcnJheSgpOw0KCQkkcG9zdE9yZGVyID0gYXJyYXkoKTsNCgkJJHJ1bGUgPSAic3FsIjsNCgkJJHBvc3RQcmVmaXggPSAiU09SVF8iOw0KCQkkcmFuZHNvcnQgPSBmYWxzZTsNCgkJJG9iTGlzdCA9IHByZWdfc3BsaXQoJy9bLFxzXSsvJywkb3JkZXJieSwtMSxQUkVHX1NQTElUX05PX0VNUFRZKTsNCgkJZm9yICgkaWR4ID0gMDsgJGlkeCA8IGNvdW50KCRvYkxpc3QpOyAkaWR4KyspIHsNCgkJCSRvYl9kaXIgPSBleHBsb2RlKCc6Jywkb2JMaXN0WyRpZHhdKTsNCgkJCSRkaXJlY3Rpb24gPSAnJzsNCgkJCSRjb2xSZWYgPSAnJzsNCgkJCWlmIChjb3VudCgkb2JfZGlyKSA8PSAxKSB7DQoJCQkJJG9iX2RpclsxXSA9ICJhc2MiOw0KCQkJfQ0KCQkJaWYgKCRydWxlID09ICJzcWwiKSB7DQoJCQkJJGRpcmVjdGlvbiA9ICgkb2JfZGlyWzFdID09ICJkZXNjIikgPyAnIGRlc2MnIDogJyBhc2MnOw0KCQkJfSBlbHNlIHsNCgkJCQkkZGlyZWN0aW9uID0gKCRvYl9kaXJbMV0gPT0gImRlc2MiKSA/ICRwb3N0UHJlZml4LidERVNDJyA6ICRwb3N0UHJlZml4LidBU0MnOw0KCQkJfQ0KDQoJCQlzd2l0Y2ggKCRvYl9kaXJbMF0pIHsNCgkJCQljYXNlICdyYW5kb20nOg0KCQkJCQkkcnVsZSA9ICJwb3N0IjsNCgkJCQkJaWYgKCRpZHggPT0gMCkgew0KCQkJCQkJJHdoZXJlT0JbXSA9ICdyYW5kKCknOw0KCQkJCQl9IGVsc2Ugew0KCQkJCQkJJHJhbmRzb3J0ID0gdHJ1ZTsNCgkJCQkJfQ0KCQkJCQlicmVhazsNCgkJCQljYXNlICdmaXhlZCc6DQoJCQkJCS8vICdmaXhlZCcgb25seSB3b3JrcyBvbiBpbWFnZSBpZHMNCgkJCQkJaWYgKCRpbWFnZWlkICE9ICIiKSB7DQoJCQkJCQkkZml4ZWRPcmRlciA9IHRydWU7DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJZGVmYXVsdDoNCgkJCQkJJGNvbFJlZiA9IGFycmF5X3NlYXJjaCgkb2JfZGlyWzBdLCAkZmllbGRNYXApOw0KCQkJCQlicmVhazsNCgkJCX0NCgkJCWlmICgkcnVsZSA9PSAic3FsIikgew0KCQkJCWlmICgkY29sUmVmICE9ICIiKSB7DQoJCQkJCSR3aGVyZU9CW10gPSAkY29sUmVmLiRkaXJlY3Rpb247DQoJCQkJfQ0KCQkJfSBlbHNlIHsNCgkJCQlpZiAoISRyYW5kc29ydCkgew0KCQkJCQlpZiAoJGNvbFJlZiAhPSAiIikgew0KCQkJCQkJJHBvc3RPcmRlcltdID0gYXJyYXkoImNvbCIgPT4gJGNvbFJlZiwgInNvcnQiID0+ICRkaXJlY3Rpb24pOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoNCgkJaWYgKGNvdW50KCR3aGVyZU9CKSA+IDApIHsNCgkJCSR3aGVyZSAuPSAnIE9SREVSIEJZICcgLiBpbXBsb2RlKCIsIiwkd2hlcmVPQik7DQoJCX0NCg0KCQkvLyBIYW5kbGUgcGFnaW5nDQoJCWlmICgoJGxpbWl0ID4gMCkgJiYgJHNob3dwYWdlbGlua3MpIHsNCgkJCSRycyA9IHNhZmVfcm93cygkZmllbGRzLCAndHhwX2ltYWdlJywgJHdoZXJlIC4nIExJTUlUIDAsJy4kbWF4bGltaXQpOw0KCQkJJG51bXRodW0gPSBjb3VudCgkcnMpOw0KCQkJJG51bVBhZ2VzID0gKCRudW10aHVtID4gMCkgPyBjZWlsKCRudW10aHVtLyRsaW1pdCkgOiAxOw0KCQkJJHRodW1icGFnZSA9ICghZ3BzKCRnYWxsSUQpKSA/IDEgOiBncHMoJGdhbGxJRCk7DQoJCQkkb2Zmc2V0ID0gKCR0aHVtYnBhZ2UgLSAxKSAqICRsaW1pdDsNCgkJCSRycyA9IHNhZmVfcm93cygkZmllbGRzLCAndHhwX2ltYWdlJywgJHdoZXJlIC4nIExJTUlUICcuJG9mZnNldC4nLCcuJGxpbWl0KTsNCgkJfSBlbHNlIHsNCgkJCS8vIE5vIHBhZ2luZyByZXF1aXJlZA0KCQkJJG51bVBhZ2VzID0gMTsNCgkJCSR0aHVtYnBhZ2UgPSAxOw0KCQkJJHJzID0gc2FmZV9yb3dzKCRmaWVsZHMsICd0eHBfaW1hZ2UnLCAkd2hlcmUgLicgTElNSVQgMCwnLiAoKCRsaW1pdD09MCkgPyAkbWF4bGltaXQgOiAkbGltaXQpKTsNCgkJfQ0KDQoJCS8vIElzIHBvc3Qtb3JkZXJpbmcgcmVxdWlyZWQ/IERvIGl0DQoJCWlmICgkcmFuZHNvcnQpIHsNCgkJCXNodWZmbGUoJHJzKTsNCgkJfSBlbHNlIGlmIChjb3VudCgkcG9zdE9yZGVyKSA+IDApIHsNCgkJCS8vIFRyYW5zbGF0ZSB0aGUgcm93cyBpbnRvIGNvbHVtbnMgdGhhdCBjYW4gYmUgc29ydGVkDQoJCQlmb3JlYWNoKCRycyBhcyAka2V5ID0+ICRyb3cpIHsNCgkJCQkkY29sX2lkWyRrZXldID0gJHJvd1snaWQnXTsNCgkJCQkkY29sX25hbWVbJGtleV0gPSAkcm93WyduYW1lJ107DQoJCQkJJGNvbF9jYXB0aW9uWyRrZXldID0gJHJvd1snY2FwdGlvbiddOw0KCQkJCSRjb2xfYWx0WyRrZXldID0gJHJvd1snYWx0J107DQoJCQkJJGNvbF9jYXRlZ29yeVska2V5XSA9ICRyb3dbJ2NhdGVnb3J5J107DQoJCQkJJGNvbF9kYXRlWyRrZXldID0gJHJvd1snZGF0ZSddOw0KCQkJCSRjb2xfZXh0WyRrZXldID0gJHJvd1snZXh0J107DQoJCQkJJGNvbF9hdXRob3JbJGtleV0gPSAkcm93WydhdXRob3InXTsNCgkJCQkkY29sX3dbJGtleV0gPSAkcm93Wyd3J107DQoJCQkJJGNvbF9oWyRrZXldID0gJHJvd1snaCddOw0KCQkJfQ0KCQkJLy8gTWFrZSB1cCBhbiBhcnJheV9tdWx0aXNvcnQgYXJnIGxpc3QgYW5kIGV4ZWN1dGUgaXQNCgkJCWZvciAoJGlkeCA9IDA7ICRpZHggPCBjb3VudCgkcG9zdE9yZGVyKTsgJGlkeCsrKSB7DQoJCQkJJHNvcnRhcmdzW10gPSAnJGNvbF8nLiRwb3N0T3JkZXJbJGlkeF1bJ2NvbCddOw0KCQkJCSRzb3J0YXJnc1tdID0gJHBvc3RPcmRlclskaWR4XVsnc29ydCddOw0KCQkJfQ0KCQkJJHNvcnRpdCA9ICdhcnJheV9tdWx0aXNvcnQoJy5pbXBsb2RlKCIsICIsJHNvcnRhcmdzKS4nLCAkcnMpOyc7DQoJCQlldmFsKCRzb3J0aXQpOw0KCQl9DQoNCgkJLy8gSXMgZml4ZWQtb3JkZXIgb3V0cHV0IGRlc2lyZWQ/IElmIHNvLCByZS1vcmRlciB0aGUgJHJzDQoJCWlmICgkZml4ZWRPcmRlcikgew0KCQkJJG9yZGVyZWRSUyA9IEFycmF5KCk7DQoJCQkkaWdub3JlTGlzdCA9IEFycmF5KCk7DQoJCQkkcmVtYWluaW5nUlMgPSBBcnJheSgpOw0KCQkJLy8gU3VjayBvdXQgdGhlIGZpeGVkIGl0ZW1zIGZpcnN0DQoJCQlmb3IgKCRpZHggPSAwOyAkaWR4IDwgY291bnQoJGZ1bGxJRExpc3QpOyAkaWR4KyspIHsNCgkJCQlmb3JlYWNoKCRycyBhcyAkcm93KSB7DQoJCQkJCWlmICgiJyIuJHJvd1snaWQnXS4iJyIgPT0gJGZ1bGxJRExpc3RbJGlkeF0pIHsNCgkJCQkJCSRvcmRlcmVkUlNbXSA9ICRyb3c7DQoJCQkJCQkkaWdub3JlTGlzdFtdID0gJHJvd1snaWQnXTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCS8vIFRhY2sgb24gdGhlIHJlbWFpbmluZyByb3dzDQoJCQlmb3JlYWNoKCRycyBhcyAkcm93KSB7DQoJCQkJaWYgKCFpbl9hcnJheSgkcm93WydpZCddLCAkaWdub3JlTGlzdCkpIHsNCgkJCQkJJHJlbWFpbmluZ1JTW10gPSAkcm93Ow0KCQkJCX0NCgkJCX0NCgkJCSRycyA9IGFycmF5X21lcmdlKCRvcmRlcmVkUlMsICRyZW1haW5pbmdSUyk7DQoJCX0NCg0KCQkvLyBIYW5kbGUgdGh1bWJzaXplDQoJCSR0aHVtYldpZHRoID0gJHRodW1iSGVpZ2h0ID0gIiI7DQoJCSR0aHVtYldVbml0cyA9ICR0aHVtYkhVbml0cyA9ICIiOw0KCQlpZiAoJHRodW1ic2l6ZSkgew0KCQkJJHRodW1iU2l6ZXMgPSBzbWRfc3BsaXRSYW5nZSgkdGh1bWJzaXplLCAiLFxzIiwgMCk7DQoJCQlpZiAoY291bnQoJHRodW1iU2l6ZXMpID09IDEpIHsNCgkJCQkkdGh1bWJXaWR0aCA9ICR0aHVtYkhlaWdodCA9IGVyZWdfcmVwbGFjZSgiW14wLTldIiwgIiIsICR0aHVtYlNpemVzWzBdKTsNCgkJCQkkdW5pdHMgPSBlcmVnX3JlcGxhY2UoIlswLTldIiwgIiIsICR0aHVtYlNpemVzWzBdKTsNCgkJCQkkdGh1bWJXVW5pdHMgPSAkdGh1bWJIVW5pdHMgPSAoJHVuaXRzID09ICIiKSA/ICR0aHVtYldVbml0cyA6ICR1bml0czsNCgkJCX0gZWxzZSB7DQoJCQkJJHRodW1iV2lkdGggPSBlcmVnX3JlcGxhY2UoIlteMC05XSIsICIiLCAkdGh1bWJTaXplc1swXSk7DQoJCQkJJHRodW1iSGVpZ2h0ID0gZXJlZ19yZXBsYWNlKCJbXjAtOV0iLCAiIiwgJHRodW1iU2l6ZXNbMV0pOw0KCQkJCSR1bml0cyA9IGVyZWdfcmVwbGFjZSgiWzAtOV0iLCAiIiwgJHRodW1iU2l6ZXNbMF0pOw0KCQkJCSR0aHVtYldVbml0cyA9ICgkdW5pdHMgPT0gIiIgJiYgJHRodW1iV2lkdGggIT0gIiIpID8gJHRodW1iV1VuaXRzIDogJHVuaXRzOw0KCQkJCSR1bml0cyA9IGVyZWdfcmVwbGFjZSgiWzAtOV0iLCAiIiwgJHRodW1iU2l6ZXNbMV0pOw0KCQkJCSR0aHVtYkhVbml0cyA9ICgkdW5pdHMgPT0gIiIgJiYgJHRodW1iSGVpZ2h0ICE9ICIiKSA/ICR0aHVtYkhVbml0cyA6ICR1bml0czsNCgkJCX0NCgkJfQ0KDQoJCS8vIENvbnN0cnVjdCB0aGUgb3V0cHV0DQoJCSRjYXB0aW9uSXRlbXMgPSBzbWRfc3BsaXRSYW5nZSgkaW1hZ2VjYXB0aW9uLCAiXHMiKTsNCgkJJG91dFN0ciA9ICcnOw0KCQlpZigkcnMpIHsNCgkJCWZvcmVhY2goJHJzIGFzICRyb3cpIHsNCgkJCQkkdGhlVGh1bWIgPSBodS4kaW1nX2Rpci4nLycgLiAkcm93WydpZCddIC4gJ3QnIC4gJHJvd1snZXh0J107DQoJCQkJJGZ1bGwgPSBodS4kaW1nX2Rpci4nLycgLiAkcm93WydpZCddIC4gKCgkdGh1bWIpID8gInQiIDogIiIpIC4kcm93WydleHQnXTsNCgkJCQlpZiAoJGdyb3VwbmFtZSA9PT0gIj9jIikgew0KCQkJCQkkZ3JwID0gJHJvd1snY2F0ZWdvcnknXTsNCgkJCQl9IGVsc2UgaWYgKCRncm91cG5hbWUgPT09ICI/aWQiKSB7DQoJCQkJCSRncnAgPSAkcm93WydpZCddOw0KCQkJCX0gZWxzZSBpZiAoJGdyb3VwbmFtZSA9PT0gIj9hdXRob3IiKSB7DQoJCQkJCSRncnAgPSAkcm93WydhdXRob3InXTsNCgkJCQl9IGVsc2UgaWYgKCRncm91cG5hbWUgPT09ICI/ZGF0ZSIpIHsNCgkJCQkJJGdycCA9ICRyb3dbJ2RhdGUnXTsNCgkJCQl9IGVsc2UgaWYgKCRncm91cG5hbWUgPT09ICI/YWx0Iikgew0KCQkJCQkkZ3JwID0gJHJvd1snYWx0J107DQoJCQkJfSBlbHNlIGlmICgkZ3JvdXBuYW1lID09PSAiP2NhcHRpb24iKSB7DQoJCQkJCSRncnAgPSAkcm93WydjYXB0aW9uJ107DQoJCQkJfSBlbHNlIGlmICgkZ3JvdXBuYW1lID09PSAiP2V4dCIpIHsNCgkJCQkJJGdycCA9ICRyb3dbJ2V4dCddOw0KCQkJCX0gZWxzZSBpZiAoJGdyb3VwbmFtZSA9PT0gIj9uYW1lIikgew0KCQkJCQkkZ3JwID0gJHJvd1snbmFtZSddOw0KCQkJCX0gZWxzZSBpZiAoJGdyb3VwbmFtZSA9PT0gIj93aWR0aCIpIHsNCgkJCQkJJGdycCA9ICRyb3dbJ3cnXTsNCgkJCQl9IGVsc2UgaWYgKCRncm91cG5hbWUgPT09ICI/aGVpZ2h0Iikgew0KCQkJCQkkZ3JwID0gJHJvd1snaCddOw0KCQkJCX0gZWxzZSBpZiAoc3Vic3RyKCRncm91cG5hbWUsMCwxKSA9PT0gIj8iKSB7DQoJCQkJCS8vIFNwbGl0IG9mZiB0aGUgZmllbGQgbmFtZSBmcm9tIHRoZSBxdWVzdGlvbiBtYXJrDQoJCQkJCSRmaWVsZG5hbWUgPSBzdWJzdHIoJGdyb3VwbmFtZSwxKTsNCgkJCQkJaWYgKGlzc2V0KCR0aGlzYXJ0aWNsZVskZmllbGRuYW1lXSkpIHsNCgkJCQkJCSRncnAgPSAkdGhpc2FydGljbGVbJGZpZWxkbmFtZV07DQoJCQkJCX0gZWxzZSB7DQoJCQkJCQkkZ3JwID0gJyc7DQoJCQkJCX0NCgkJCQl9IGVsc2Ugew0KCQkJCQkkZ3JwID0gJGdyb3VwbmFtZTsNCgkJCQl9DQoNCgkJCQkvLyBIYW5kbGUgaW1hZ2VjYXB0aW9uDQoJCQkJJGNhcHRpb25BcnJheSA9IGFycmF5KCk7DQoJCQkJZm9yZWFjaCAoJGNhcHRpb25JdGVtcyBhcyAkaXRlbSkgew0KCQkJCQlpZiAoc3Vic3RyKCRpdGVtLDAsMSkgPT09ICI/Iikgew0KCQkJCQkJJGZpZWxkbmFtZSA9IHN1YnN0cigkaXRlbSwxKTsNCgkJCQkJCSRrZXkgPSBhcnJheV9zZWFyY2goJGZpZWxkbmFtZSwgJGZpZWxkTWFwKTsNCgkJCQkJCWlmICgka2V5KSB7DQoJCQkJCQkJJGNhcHRpb25BcnJheVtdID0gJHJvd1ska2V5XTsNCgkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJJGNhcHRpb25BcnJheVtdID0gJGZpZWxkbmFtZTsNCgkJCQkJCX0NCgkJCQkJfSBlbHNlIHsNCgkJCQkJCSRjYXB0aW9uQXJyYXlbXSA9ICRpdGVtOw0KCQkJCQl9DQoJCQkJfQ0KDQoJCQkJLy8gR2VuZXJhdGUgdGhlIGNhcHRpb24vYWx0IGlmIHJlcXVpcmVkDQoJCQkJJGNhcFN0ciA9ICgkc2hvd2FsdCAmJiAkcm93WydhbHQnXSkgPyAnPHNwYW4nIC4gKCgkYWx0Y2xhc3MgIT0gIiIpID8gJyBjbGFzcz0iJyAuJGFsdGNsYXNzLiAnIicgOiAnJykgLiAnPicgLiRyb3dbJ2FsdCddLiAnPC9zcGFuPicgOiAnJzsNCgkJCQkkY2FwU3RyIC49ICgkc2hvd2NhcHRpb24gJiYgJHJvd1snY2FwdGlvbiddKSA/ICc8c3BhbicgLiAoKCRjYXB0aW9uY2xhc3MgIT0gIiIpID8gJyBjbGFzcz0iJyAuJGNhcHRpb25jbGFzcy4gJyInIDogJycpIC4gJz4nIC4kcm93WydjYXB0aW9uJ10uICc8L3NwYW4+JyA6ICcnOw0KDQoJCQkJLy8gQ29uc3RydWN0IHRoZSBsaW5rIGFuZCBwdXQgY2FwdGlvbi9hbHQgaW4gdGhlIGFwcHJvcHJpYXRlIHBvc2l0aW9uDQoJCQkJJG91dFN0ciAuPSAoJHdyYXB0YWcgIT0gIiIpID8gJzwnIC4kd3JhcHRhZy4gKCgkY2VsbGNsYXNzICE9ICIiKSA/ICcgY2xhc3M9IicgLiRjZWxsY2xhc3MuICciJyA6ICcnKSAuICc+JyA6ICcnOw0KCQkJCSRvdXRTdHIgLj0gKCR0ZXh0cG9zID09ICJhYm92ZSIpID8gJGNhcFN0ciA6ICcnOw0KCQkJCSRvdXRTdHIgLj0gJzxhIGhyZWY9IicuJGZ1bGwuJyIgcmVsPSJsaWdodGJveC0nIC4kZ3JwLiAnIiB0aXRsZT0iJyAuaW1wbG9kZSgiICIsICRjYXB0aW9uQXJyYXkpLiAnIj4nIC4oKCR0ZXh0cG9zID09ICJiZWZvcmUiKSA/ICRjYXBTdHIgOiAnJykuICc8aW1nIHNyYz0iJyAuJHRoZVRodW1iLiAnIiBhbHQ9IicgLiRyb3dbJ2FsdCddLiAnIicgLiAoKCRpbWdjbGFzcyAhPSAiIikgPyAnIGNsYXNzPSInIC4kaW1nY2xhc3MuICciJyA6ICcnKSAuICgoJHRodW1iV2lkdGgpID8gJyB3aWR0aD0iJyAuICR0aHVtYldpZHRoLiR0aHVtYldVbml0cy4gJyInIDogJycpIC4gKCgkdGh1bWJIZWlnaHQpID8gJyBoZWlnaHQ9IicgLiAkdGh1bWJIZWlnaHQuJHRodW1iSFVuaXRzLiAnIicgOiAnJykgLiAnIC8+JyAuKCgkdGV4dHBvcyA9PSAiYWZ0ZXIiKSA/ICRjYXBTdHIgOiAnJykuICc8L2E+Jy5uOw0KCQkJCSRvdXRTdHIgLj0gKCR0ZXh0cG9zID09ICJiZWxvdyIpID8gJGNhcFN0ciA6ICcnOw0KCQkJCSRvdXRTdHIgLj0gKCR3cmFwdGFnICE9ICIiKSA/ICc8LycgLiR3cmFwdGFnLiAnPicgOiAnJzsNCgkJCQkkb3V0U3RyIC49IG47DQoJCQl9DQoNCgkJCS8vIEFkZCB0aGUgcGFnaW5nIGZlYXR1cmVzIGlmIHJlcXVpcmVkDQoJCQlpZiAoKCRsaW1pdCA+IDApICYmICRzaG93cGFnZWxpbmtzKSB7DQoJCQkJJG5leHQgPSAoJG51bVBhZ2VzID4gMSAmJiAkdGh1bWJwYWdlICE9ICRudW1QYWdlcyk7DQoJCQkJJHByZXYgPSAoJG51bVBhZ2VzID4gMSAmJiAkdGh1bWJwYWdlID4gMSk7DQoNCgkJCQkvLyBSZXBsYWNlIGFueSBwYWdpbmcgaW5mbyBpbiB0aGUgcXVlcnkgc3RyaW5nDQoJCQkJJHByZXZQYWdlID0gc21kX2FkZFFTVmFyKCRwcmV0ZXh0WydyZXF1ZXN0X3VyaSddLCAkZ2FsbElELCAkdGh1bWJwYWdlLTEpOw0KCQkJCSRuZXh0UGFnZSA9IHNtZF9hZGRRU1ZhcigkcHJldGV4dFsncmVxdWVzdF91cmknXSwgJGdhbGxJRCwgJHRodW1icGFnZSsxKTsNCg0KCQkJCSRvdXRTdHIgLj0gKCR3cmFwdGFnICE9ICIiKSA/ICc8JyAuJHdyYXB0YWcuICgoJG5hdmNsYXNzICE9ICIiKSA/ICcgY2xhc3M9IicgLiRuYXZjbGFzcy4gJyInIDogJycpIC4gJz4nIDogJyc7DQoJCQkJJG91dFN0ciAuPSAoJHByZXYpID8gJzxhJyAuICgoJHByZXZjbGFzcyAhPSAiIikgPyAnIGNsYXNzPSInIC4kcHJldmNsYXNzLiAnIicgOiAnJykgLiAnIGhyZWY9IicgLiRwcmV2UGFnZS4gJyI+JyAuJHByZXZsYWJlbC4gJzwvYT4nLm4gOiAnJzsNCgkJCQkkb3V0U3RyIC49ICgkbmV4dCkgPyAnPGEnIC4gKCgkbmV4dGNsYXNzICE9ICIiKSA/ICcgY2xhc3M9IicgLiRuZXh0Y2xhc3MuICciJyA6ICcnKSAuICcgaHJlZj0iJyAuJG5leHRQYWdlLiAnIj4nIC4kbmV4dGxhYmVsLiAnPC9hPicubiA6ICcnOw0KCQkJCSRvdXRTdHIgLj0gKCR3cmFwdGFnICE9ICIiKSA/ICc8LycgLiR3cmFwdGFnLiAnPicgOiAnJzsNCgkJCQkkb3V0U3RyIC49IG47DQoJCQl9DQoJCX0NCgl9DQoNCglyZXR1cm4gJG91dFN0cjsNCn0NCg0KLy8gQ2FsbGJhY2sgZm9yIE1MUCBzdHJpbmcgcmVwbGFjZW1lbnQNCmZ1bmN0aW9uIHNtZF9zYm94X2VudW1fc3RyKCRldmVudCwgJHN0ZXA9JycsICRwcmU9MCkgew0KCWdsb2JhbCAkc21kX3Nib3hfc3RyLCAkc21kTUxQOw0KCSRyID0gYXJyYXkJKA0KCQkJJ293bmVyJyA9PiAnc21kX3NsaW1ib3gnLA0KCQkJJ3ByZWZpeCcgPT4gJHNtZE1MUFsnc21kX3NsaW1ib3gnXSwNCgkJCSdsYW5nJyA9PiAnZW4tZ2InLCAvLyBEZWZhdWx0IGxhbmd1YWdlDQoJCQknZXZlbnQnID0+ICdwdWJsaWMnLCAvLyBwdWJsaWMvYWRtaW4vY29tbW9uID0gd2hpY2ggaW50ZXJmYWNlIHRoZSBzdHJpbmdzIHdpbGwgYmUgbG9hZGVkIGludG8NCgkJCSdzdHJpbmdzJyA9PiAkc21kX3Nib3hfc3RyLA0KCQkpOw0KCXJldHVybiAkcjsNCn0iO3M6NDoidHlwZSI7czoxOiIwIjtzOjM6Im1kNSI7czozMjoiZTE2NjJiZDIwMzQ2YjQ5OTAwZDdkZTE0ZTdiNzFiMjciO30=