# Name: soo_image v1.0.b.9 # Type: Admin/Client side plugin # Simple yet powerful image tags # Author: Jeff Soo # URL: http://ipsedixit.net/txp/ # 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: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjk6InNvb19pbWFnZSI7czo2OiJhdXRob3IiO3M6ODoiSmVm ZiBTb28iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjU6Imh0dHA6Ly9pcHNlZGl4aXQubmV0L3R4 cC8iO3M6NzoidmVyc2lvbiI7czo3OiIxLjAuYi45IjtzOjExOiJkZXNjcmlwdGlvbiI7czoz MDoiU2ltcGxlIHlldCBwb3dlcmZ1bCBpbWFnZSB0YWdzIjtzOjQ6ImhlbHAiO3M6MzkyMjg6 IjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CmRpdiNzZWRfaGVscCBwcmUge3BhZGRpbmc6IDAu NWVtIDFlbTsgYmFja2dyb3VuZDogI2VlZTsgYm9yZGVyOiAxcHggZGFzaGVkICNjY2M7fQpk aXYjc2VkX2hlbHAgaDEsIGRpdiNzZWRfaGVscCBoMiwgZGl2I3NlZF9oZWxwIGgzLCBkaXYj c2VkX2hlbHAgaDMgY29kZSB7Zm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0 OiBib2xkO30KZGl2I3NlZF9oZWxwIGgxLCBkaXYjc2VkX2hlbHAgaDIsIGRpdiNzZWRfaGVs cCBoMyB7bWFyZ2luLWxlZnQ6IC0xZW07fQpkaXYjc2VkX2hlbHAgaDIsIGRpdiNzZWRfaGVs cCBoMyB7bWFyZ2luLXRvcDogMmVtO30KZGl2I3NlZF9oZWxwIGgxIHtmb250LXNpemU6IDIu NGVtO30KZGl2I3NlZF9oZWxwIGgyIHtmb250LXNpemU6IDEuOGVtO30KZGl2I3NlZF9oZWxw IGgzIHtmb250LXNpemU6IDEuNGVtO30KZGl2I3NlZF9oZWxwIGg0IHtmb250LXNpemU6IDEu MmVtO30KZGl2I3NlZF9oZWxwIGg1IHtmb250LXNpemU6IDFlbTttYXJnaW4tbGVmdDoxZW07 Zm9udC1zdHlsZTpvYmxpcXVlO30KZGl2I3NlZF9oZWxwIGg2IHtmb250LXNpemU6IDFlbTtt YXJnaW4tbGVmdDoyZW07Zm9udC1zdHlsZTpvYmxpcXVlO30KZGl2I3NlZF9oZWxwIGxpIHts aXN0LXN0eWxlLXR5cGU6IGRpc2M7fQpkaXYjc2VkX2hlbHAgbGkgbGkge2xpc3Qtc3R5bGUt dHlwZTogY2lyY2xlO30KZGl2I3NlZF9oZWxwIGxpIGxpIGxpIHtsaXN0LXN0eWxlLXR5cGU6 IHNxdWFyZTt9CmRpdiNzZWRfaGVscCBsaSBhIGNvZGUge2ZvbnQtd2VpZ2h0OiBub3JtYWw7 fQpkaXYjc2VkX2hlbHAgbGkgY29kZTpmaXJzdC1jaGlsZCB7YmFja2dyb3VuZDogI2RkZDtw YWRkaW5nOjAgLjNlbTttYXJnaW4tbGVmdDotLjNlbTt9CmRpdiNzZWRfaGVscCBsaSBsaSBj b2RlOmZpcnN0LWNoaWxkIHtiYWNrZ3JvdW5kOm5vbmU7cGFkZGluZzowO21hcmdpbi1sZWZ0 OjA7fQpkaXYjc2VkX2hlbHAgZGZuIHtmb250LXdlaWdodDpib2xkO2ZvbnQtc3R5bGU6b2Js aXF1ZTt9CmRpdiNzZWRfaGVscCAucmVxdWlyZWQsIGRpdiNzZWRfaGVscCAud2FybmluZyB7 Y29sb3I6cmVkO30KZGl2I3NlZF9oZWxwIC5kZWZhdWx0IHtjb2xvcjpncmVlbjt9Cjwvc3R5 bGU+CiA8ZGl2IGlkPSJzZWRfaGVscCI+CgoJPGgxPnNvb19pbWFnZTwvaDE+CgoJPGgyPkNv bnRlbnRzPC9oMj4KCgk8dWw+CgkJPGxpPjxhIGhyZWY9IiNvdmVydmlldyI+T3ZlcnZpZXc8 L2E+PC9saT4KCQk8bGk+PGEgaHJlZj0iI3VzYWdlIj5Vc2FnZTwvYT48L2xpPgoJCTxsaT48 YSBocmVmPSIjaW1hZ2VfY29udGV4dCI+SW1hZ2UgQ29udGV4dDwvYT48L2xpPgoJCTxsaT48 YSBocmVmPSIjdGFncyI+VGFnczwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIjY29udHJvbGxl cl90YWciPkNvbnRyb2xsZXIgdGFnPC9hPgoJPHVsPgoJCTxsaT48YSBocmVmPSIjc29vX2lt YWdlX3NlbGVjdCI+c29vX2ltYWdlX3NlbGVjdDwvYT48L2xpPgoJPC91bD48L2xpPgoJPHVs PgoJCTxsaT48YSBocmVmPSIjb3V0cHV0X3RhZ3MiPk91dHB1dCB0YWdzPC9hPgoJPHVsPgoJ CTxsaT48YSBocmVmPSIjc29vX2ltYWdlIj5zb29faW1hZ2U8L2E+PC9saT4KCQk8bGk+PGEg aHJlZj0iI3Nvb19pbWFnZV8iPnNvb19pbWFnZV8qPC9hPiA8ZW0+KC1hdXRob3IsIC1jYXB0 aW9uLCBldGMuKTwvZW0+PC9saT4KCQk8bGk+PGEgaHJlZj0iI3Nvb190aHVtYm5haWxfIj5z b29fdGh1bWJuYWlsXyo8L2E+IDxlbT4oLXVybCwgLWhlaWdodCwgLXdpZHRoKTwvZW0+PC9s aT4KCQk8bGk+PGEgaHJlZj0iI3Nvb19leGlmIj5zb29fZXhpZjwvYT48L2xpPgoJCTxsaT48 YSBocmVmPSIjcGFnaW5hdGlvbiI+UGFnaW5hdGlvbjwvYT48L2xpPgoJPC91bD48L2xpPgoJ CTxsaT48YSBocmVmPSIjY29uZGl0aW9uYWxfdGFncyI+Q29uZGl0aW9uYWwgdGFnczwvYT4K CTx1bD4KCQk8bGk+PGEgaHJlZj0iI3Nvb19pZl90eHBfaW1hZ2UiPnNvb19pZl90eHBfaW1h Z2U8L2E+PC9saT4KCQk8bGk+PGEgaHJlZj0iI3Nvb19pZl9pbWFnZV8iPnNvb19pZl9pbWFn ZV8qPC9hPiA8ZW0+KC1hdXRob3IsIC1jYXRlZ29yeSwgZXRjLik8L2VtPjwvbGk+CgkJPGxp PjxhIGhyZWY9IiNzb29faWZfaW1hZ2VfY291bnQiPnNvb19pZl9pbWFnZV9jb3VudDwvYT48 L2xpPgoJPC91bD48L2xpPgoJPC91bD48L2xpPgoJCTxsaT48YSBocmVmPSIjcmVxdWlyZW1l bnRzIj5SZXF1aXJlbWVudHMgJiMzODsgSW5zdGFsbGF0aW9uPC9hPjwvbGk+CgkJPGxpPjxh IGhyZWY9IiNwcmVmZXJlbmNlcyI+UHJlZmVyZW5jZXM8L2E+PC9saT4KCQk8bGk+PGEgaHJl Zj0iI2V4YW1wbGVzIj5FeGFtcGxlczwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIjaGlzdG9y eSI+SGlzdG9yeTwvYT48L2xpPgoJPC91bD4KCgk8cD5BIGZ1bGwgPGEgaHJlZj0iaHR0cDov L2lwc2VkaXhpdC5uZXQvdHhwLzU1L3Nvb19pbWFnZS11c2VyLWd1aWRlIj5Vc2VyIEd1aWRl PC9hPiBpcyBhdmFpbGFibGUgYXQgdGhlIDxhIGhyZWY9Imh0dHA6Ly9pcHNlZGl4aXQubmV0 LyI+YXV0aG9yJiM4MjE3O3Mgd2Vic2l0ZTwvYT4uPC9wPgoKCTxoMiBpZD0ib3ZlcnZpZXci Pk92ZXJ2aWV3PC9oMj4KCgk8cD5ZZXMsIGl0JiM4MjE3O3MgPGVtPllldCBBbm90aGVyIElt YWdlIFBsdWdpbjwvZW0+JiMxNzQ7LiBUaGlzIG9uZSwgdGhvdWdoLCBmaXRzIHJpZ2h0IGlu dG8gPGVtPlRoZSBUZXh0cGF0dGVybiBXYXk8L2VtPiYjODQ4MjsuIFNlcmlvdXNseSwgaXQg ZG9lcyBhaW0gdG8gYmUgYXMgVHhwLWlzaCBhcyBwb3NzaWJsZS4gTm8gZmFuY3kgc3R1ZmYg KHdpdGggYWxsIHRoZSBsb2NrZWQtaW4gZm9ybWF0dGluZyB0aGF0IHR5cGljYWxseSBnb2Vz IGFsb25nIHdpdGggaXQpLCBidXQgc2ltcGxlIHRhZ3MgdGhhdCBicmluZyBpbWFnZSBkaXNw bGF5IHRoZSBzYW1lIGtpbmQgb2YgZmxleGlibGUgcG93ZXIgVHhwIG9mZmVycyBmb3IgYXJ0 aWNsZSBkaXNwbGF5LjwvcD4KCgk8cD5CYXNpYyBmZWF0dXJlcyBpbmNsdWRlIHRhZ3MgZm9y IGRpc3BsYXlpbmcgaW1hZ2VzIGFuZCBhc3NvY2lhdGVkIGluZm8gKHN1Y2ggYXMgPGNvZGU+ YXV0aG9yPC9jb2RlPiAmIzM4OyA8Y29kZT5jYXB0aW9uPC9jb2RlPikuIFRoZXJlIGFyZSBh bHNvIDxhIGhyZWY9IiNjb25kaXRpb25hbF90YWdzIj5jb25kaXRpb25hbCB0YWdzPC9hPiBm b3IgY2hlY2tpbmcgYWdhaW5zdCB0aGF0IGluZm8sIGFuZCA8YSBocmVmPSIjc29vX2V4aWYi PnRhZ3MgZm9yIHJlYWRpbmcgYW5kIGRpc3BsYXlpbmcgPHNwYW4gY2xhc3M9ImNhcHMiPkVY SUY8L3NwYW4+IG1ldGFkYXRhPC9hPiBkaXJlY3RseSBmcm9tIGltYWdlIGZpbGVzLjwvcD4K Cgk8cD5UaGUga2V5IGZlYXR1cmUgaXMgZmxleGlibGUgaW1hZ2Ugc2VsZWN0aW9uIGNvbWJp bmVkIHdpdGggVHhwIGZvcm1zLiBSZXRyaWV2ZSBpbWFnZXMgc2luZ2x5IG9yIGluIGdyb3Vw cy4gU2VsZWN0IHBhcnRpY3VsYXIgaW1hZ2VzIG9yIHNlYXJjaCBvbiBjYXRlZ29yeSwgYXV0 aG9yLCBhc3BlY3QgcmF0aW8sIGFuZC9vciBmaWxlIHR5cGUuIFlvdXIgc2VsZWN0aW9uIHdv cmtzIHdpdGggPGVtPmltYWdlIGZvcm1zPC9lbT4gZm9yIHlvdXIgY2hvaWNlIG9mIGZvcm1h dHRpbmcuIFlvdXIgYXV0b21hdGljYWxseS1mb3JtYXR0ZWQgaW1hZ2VzIGNhbiBiZSBwbGFj ZWQgYW55d2hlcmUsIGluY2x1ZGluZyBkaXJlY3RseSBpbnRvIGFydGljbGUgYm9keSB0ZXh0 LiBZb3UgY2FuIGNyZWF0ZSBhbmQgY29udHJvbCBnYWxsZXJpZXMgd2l0aCB5b3VyIGNob2lj ZSBvZiBUeHAgdGFncyBhbmQgPHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IG1hcmt1 cC4gWW91IGNhbiBhc3NpZ24gbXVsdGlwbGUgaW1hZ2VzIHRvIGFuIGFydGljbGUuPC9wPgoK CTxwPjxzdHJvbmc+c29vX2ltYWdlPC9zdHJvbmc+IGlzIGRlc2lnbmVkIGZvciBpbWFnZXMg bWFuYWdlZCB0aHJvdWdoIHRoZSBUeHAgSW1hZ2VzIHRhYiAoaXQmIzgyMTc7cyA8ZW0+VGhl IFRleHRwYXR0ZXJuIFdheTwvZW0+JiM4NDgyOywgYWZ0ZXIgYWxsKSwgYnV0IGFsc28gYWxs b3dzIGRpcmVjdCBzZWxlY3Rpb24gYnkgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4g KG9mIGNvdXJzZSB0aGVzZSB3b24mIzgyMTc7dCBoYXZlIGNhcHRpb25zIGV0Yy4pLjwvcD4K Cgk8aDIgaWQ9InVzYWdlIj5Vc2FnZTwvaDI+CgoJPHA+VGhlIDxhIGhyZWY9IiNzb29faW1h Z2UiPjxjb2RlPnNvb19pbWFnZTwvY29kZT48L2E+IHRhZyBjYW4gYmUgdXNlZCBzdGFuZGFs b25lLCBpbiBwbGFjZSBvZiA8YSBocmVmPSJodHRwOi8vdGV4dGJvb2sudGV4dHBhdHRlcm4u bmV0L3dpa2kvaW5kZXgucGhwP3RpdGxlPWltYWdlIj48Y29kZT5pbWFnZTwvY29kZT48L2E+ LCA8YSBocmVmPSJodHRwOi8vdGV4dGJvb2sudGV4dHBhdHRlcm4ubmV0L3dpa2kvaW5kZXgu cGhwP3RpdGxlPXRodW1ibmFpbCI+PGNvZGU+dGh1bWJuYWlsPC9jb2RlPjwvYT4sIG9yIDxh IGhyZWY9Imh0dHA6Ly90ZXh0Ym9vay50ZXh0cGF0dGVybi5uZXQvd2lraS9pbmRleC5waHA/ dGl0bGU9YXJ0aWNsZV9pbWFnZSI+PGNvZGU+YXJ0aWNsZV9pbWFnZTwvY29kZT48L2E+LiBP bmUgYWR2YW50YWdlIGlzIGNvbnRyb2wgb3ZlciB0aGUgPGNvZGU+aGVpZ2h0PC9jb2RlPiBh bmQgPGNvZGU+d2lkdGg8L2NvZGU+IGF0dHJpYnV0ZXMgaW4gdGhlIDxjb2RlPmltZzwvY29k ZT4gdGFnLCBtYWtpbmcgaXQgZWFzaWVyIHRvIGNyZWF0ZSBsYXlvdXRzIGluIHdoaWNoIHRo ZSBpbWFnZXMgc2NhbGUgYWxvbmcgd2l0aCB0aGUgdGV4dCBzaXplLCB1c2luZyBvbmx5IDxz cGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+LiBUaGVyZSBpcyBhIDxjb2RlPnRpdGxlPC9j b2RlPiBhdHRyaWJ1dGUgZm9yIGNvbnRyb2wgb3ZlciB0aGUgY29ycmVzcG9uZGluZyA8Y29k ZT50aXRsZTwvY29kZT4gaW4gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiBv dXRwdXQuIDxjb2RlPnNvb19pbWFnZTwvY29kZT4gYWxzbyBhY2NlcHRzIDxjb2RlPmxpbmtf cmVsPC9jb2RlPiBhbmQgPGNvZGU+b25jbGljazwvY29kZT4gYXR0cmlidXRlcywgaGVscGZ1 bCBmb3IgaG9va2luZyBpbnRvIGphdmFzY3JpcHQtYmFzZWQgZ2FsbGVyaWVzLjwvcD4KCgk8 cD48Y29kZT5zb29faW1hZ2U8L2NvZGU+IGNhbiBnbyBpbiBhbiBpbWFnZSBmb3JtIHRvIGRp c3BsYXkgaW1hZ2VzIHJldHJpZXZlZCBieSA8YSBocmVmPSIjc29vX2ltYWdlX3NlbGVjdCI+ PGNvZGU+c29vX2ltYWdlX3NlbGVjdDwvY29kZT48L2E+LiBUeHAgZG9lc24mIzgyMTc7dCBo YXZlIGltYWdlIGZvcm1zIHBlciBzZSwgc28gYW4gPGRmbj5pbWFnZSBmb3JtPC9kZm4+IGlz IGEgZm9ybSBvZiB0eXBlICYjODIyMDttaXNjJiM4MjIxOyB0aGF0IGlzIGNhbGxlZCBieSA8 Y29kZT5zb29faW1hZ2Vfc2VsZWN0PC9jb2RlPiBhbmQgdGhhdCBjb250YWlucyBvbmUgb3Ig bW9yZSA8c3Ryb25nPnNvb19pbWFnZTwvc3Ryb25nPiB0YWdzLjwvcD4KCgk8cD48Y29kZT5z b29faW1hZ2Vfc2VsZWN0PC9jb2RlPiBpcyBnZW5lcmFsbHkgdXNlZCBpbiBjb25qdW5jdGlv biB3aXRoIGFuIGltYWdlIGZvcm0uIFdoYXQgPGEgaHJlZj0iaHR0cDovL3RleHRib29rLnRl eHRwYXR0ZXJuLm5ldC93aWtpL2luZGV4LnBocD90aXRsZT1hcnRpY2xlIj48Y29kZT5hcnRp Y2xlPC9jb2RlPjwvYT4gYW5kIDxhIGhyZWY9Imh0dHA6Ly90ZXh0Ym9vay50ZXh0cGF0dGVy bi5uZXQvd2lraS9pbmRleC5waHA/dGl0bGU9YXJ0aWNsZV9jdXN0b20iPjxjb2RlPmFydGlj bGVfY3VzdG9tPC9jb2RlPjwvYT4gZG8gZm9yIGFydGljbGVzLCA8Y29kZT5zb29faW1hZ2Vf c2VsZWN0PC9jb2RlPiBkb2VzIGZvciBpbWFnZXMuIFRoZSB0YWcgaXRzZWxmIGNhbiBnbyBu ZWFybHkgYW55d2hlcmUgKGJ1dCA8c3BhbiBjbGFzcz0id2FybmluZyI+bm90PC9zcGFuPiBp biBhbiBpbWFnZSBmb3JtKS4gSXQgcmV0cmlldmVzIGltYWdlcyBiYXNlZCBvbiB5b3VyIGNy aXRlcmlhIGFuZCB0aGVuIHNlbmRzIHRoZW0gdG8gdGhlIGltYWdlIGZvcm0gZm9yIGRpc3Bs YXkuIEl0IHBsdXMgYW4gaW1hZ2UgZm9ybSBjYW4gcmVwbGFjZSA8Y29kZT5hcnRpY2xlX2lt YWdlPC9jb2RlPiwgYWxsb3dpbmcgeW91IHRvIGFzc2lnbiBtdWx0aXBsZSBpbWFnZXMgcGVy IGFydGljbGUuPC9wPgoKCTxwPkluc3RlYWQgb2YgdXNpbmcgYW4gaW1hZ2UgZm9ybSwgeW91 IGNhbiBhbHNvIHVzZSA8Y29kZT5zb29faW1hZ2Vfc2VsZWN0PC9jb2RlPiBhcyBhIGNvbnRh aW5lciB0YWcgKGluIHRoZSBzYW1lIHdheSA8Y29kZT5hcnRpY2xlPC9jb2RlPiBhbmQgPGNv ZGU+YXJ0aWNsZV9jdXN0b208L2NvZGU+IHdvcmsgZWl0aGVyIGFzIHNpbmdsZSBvciBjb250 YWluZXIgdGFncykuIFNvbWV0aW1lcyB0aGlzIGlzIG1vcmUgZXhwZWRpZW50IHRoYW4gY3Jl YXRpbmcgYSBuZXcgZm9ybS48L3A+CgoJPHA+VGhlIG90aGVyIHRhZ3Mgd29yayB3aGVyZXZl ciB0aGVyZSBpcyA8YSBocmVmPSIjaW1hZ2VfY29udGV4dCI+aW1hZ2UgY29udGV4dDwvYT4u PC9wPgoKCTxoMiBpZD0iaW1hZ2VfY29udGV4dCI+SW1hZ2UgQ29udGV4dCBhbmQgRm9ybXM8 L2gyPgoKCTxwPk1vc3QgPHN0cm9uZz5zb29faW1hZ2U8L3N0cm9uZz4gdGFncyByZXF1aXJl IGltYWdlIGNvbnRleHQgdG8gcHJvZHVjZSBvdXRwdXQuIChUaGUgZXhjZXB0aW9ucyBhcmUg PGNvZGU+c29vX2ltYWdlX3NlbGVjdDwvY29kZT4sIHdoaWNoIGlzIGEgY29udHJvbGxlciBy YXRoZXIgdGhhbiBhbiBvdXRwdXQgdGFnIHBlciBzZSwgYW5kIDxjb2RlPnNvb19pbWFnZTwv Y29kZT4gaWYgaXQgaXMgdXNlZCB3aXRoIGEgc3BlY2lmaWVkIDxjb2RlPmlkPC9jb2RlPiBv ciA8Y29kZT5uYW1lPC9jb2RlPiB2YWx1ZS4gQWxzbywgPHN0cm9uZz5zb29faW1hZ2U8L3N0 cm9uZz4gY29uZGl0aW9uYWwgdGFncyB3b3JrIGFueXdoZXJlLCBidXQgd2lsbCBhbHdheXMg ZXZhbHVhdGUgdG8gZmFsc2UgaWYgdGhlcmUgaXMgbm8gaW1hZ2UgY29udGV4dDsgbm90ZSB0 aGF0IDxjb2RlPnNvb19pZl9pbWFnZV9jb3VudDwvY29kZT4gdXNlcyBhIG1vcmUgZXhwYW5z aXZlIGRlZmluaXRpb24gb2YgaW1hZ2UgY29udGV4dC4pPC9wPgoKCTxwPjxkZm4+SW1hZ2Ug Y29udGV4dDwvZGZuPiBpcyBwcm92aWRlZCBieSB0aGUgZmlyc3Qgb2YsIGluIGRlc2NlbmRp bmcgb3JkZXIgb2YgcHJpb3JpdHk6PC9wPgoKCTx1bD4KCQk8bGk+SW5zaWRlIGFuIGltYWdl IGZvcm0sIHRoZSBpbWFnZXMgc2VsZWN0ZWQgYnkgPGNvZGU+c29vX2ltYWdlX3NlbGVjdDwv Y29kZT4KCTx1bD4KCQk8bGk+c3BlY2lmaWVkIDxjb2RlPm5hbWU8L2NvZGU+IHZhbHVlcywg b3I7PC9saT4KCQk8bGk+c3BlY2lmaWVkIDxjb2RlPmlkPC9jb2RlPiB2YWx1ZXMsIG9yOzwv bGk+CgkJPGxpPnNwZWNpZmllZCA8Y29kZT5jYXRlZ29yeTwvY29kZT4sIDxjb2RlPmF1dGhv cjwvY29kZT4sIDxjb2RlPmV4dDwvY29kZT4gKGZpbGUgdHlwZSksIG9yIDxjb2RlPmFzcGVj dF9yYXRpbzwvY29kZT4gdmFsdWVzLCBvcjs8L2xpPgoJCTxsaT5hcnRpY2xlIGltYWdlcywg b3I7PC9saT4KCTwvdWw+PC9saT4KCQk8bGk+T3V0c2lkZSBhbiBpbWFnZSBmb3JtIGJ1dCBp bnNpZGUgYW4gYXJ0aWNsZSBmb3JtIChvciB0YWcpCgk8dWw+CgkJPGxpPihmaXJzdCkgYXJ0 aWNsZSBpbWFnZSwgb3I7PC9saT4KCQk8bGk+KG9wdGlvbmFsbHkpIGZpcnN0IGltYWdlIHNl bGVjdGVkIGJ5IHByZXZpb3VzIDxjb2RlPnNvb19pbWFnZV9zZWxlY3Q8L2NvZGU+IHRhZyAo cGVyc2lzdGVudCBjb250ZXh0KTwvbGk+Cgk8L3VsPjwvbGk+Cgk8L3VsPgoKCTxwPkluc2lk ZSBhbiA8ZGZuPmltYWdlIGZvcm08L2Rmbj4sIGkuZS4gYSBmb3JtIGNhbGxlZCBieSA8Y29k ZT5zb29faW1hZ2Vfc2VsZWN0PC9jb2RlPiAob3IgdGhlIGNvbnRlbnRzIG9mIGEgPGNvZGU+ c29vX2ltYWdlX3NlbGVjdDwvY29kZT4gY29udGFpbmVyIHRhZyksIGFsbCBvZiB0aGUgc2Vs ZWN0ZWQgaW1hZ2VzIHdpbGwgYmUgcGFzc2VkLCBvbmUgYXQgYSB0aW1lLCB0byBhbnkgPHN0 cm9uZz5zb29faW1hZ2U8L3N0cm9uZz4gdGFncy4gT3V0c2lkZSBhbiBpbWFnZSBmb3JtLCBh IDxzdHJvbmc+c29vX2ltYWdlPC9zdHJvbmc+IHRhZyBvbmx5IHNlZXMgdGhlIGZpcnN0IGlt YWdlIGluIHRoZSBjdXJyZW50IGNvbnRleHQuIFRoaXMgd2lsbCBiZSB0aGUgZmlyc3QgYXJ0 aWNsZSBpbWFnZSBvciwgaWYgdGhlcmUgaXMgbm8gYXJ0aWNsZSBpbWFnZSwgdGhlIGZpcnN0 IGltYWdlIGZyb20gdGhlIHByZXZpb3VzIDxjb2RlPnNvb19pbWFnZV9zZWxlY3Q8L2NvZGU+ IHRhZy48L3A+CgoJPHA+VGhpcyBsYXN0IGVsZW1lbnQsIHRoZSBmaXJzdCBpbWFnZSBmcm9t IHRoZSBwcmV2aW91cyA8Y29kZT5zb29faW1hZ2Vfc2VsZWN0PC9jb2RlPiB0YWcsIGlzIGNh bGxlZCA8ZGZuPnBlcnNpc3RlbnQgY29udGV4dDwvZGZuPi4gSXQgaXMgb3B0aW9uYWwgYmVj YXVzZSBpdCBjYW4gYmUgZGlzYWJsZWQgZWl0aGVyIGluIHByZWZlcmVuY2VzIG9yIGluIDxj b2RlPnNvb19pbWFnZV9zZWxlY3Q8L2NvZGU+JiM4MjE3O3MgYXR0cmlidXRlcy4gU2VlIDxh IGhyZWY9Imh0dHA6Ly9pcHNlZGl4aXQubmV0L3R4cC82MS9wYWdpbmF0aW9uI3BlcnNpc3Rl bnRfY29udGV4dCI+cGFnaW5hdGlvbjwvYT4gZm9yIGEgdXNlZnVsIGV4YW1wbGUgb2YgcGVy c2lzdGVudCBjb250ZXh0LjwvcD4KCgk8cD5Ob3RlIHRoYXQgPGNvZGU+c29vX2ltYWdlX3Nl bGVjdDwvY29kZT4gdXN1YWxseSBuZWVkcyB0byBhcHBlYXIgYmVmb3JlIGFueSBvdGhlciA8 c3Ryb25nPnNvb19pbWFnZTwvc3Ryb25nPiB0YWdzIGluIG9yZGVyIHRvIHByb3ZpZGUgdGhp cyBjb250ZXh0LiBUaGUgPGEgaHJlZj0iI3BhZ2luYXRpb24iPnBhZ2luYXRpb24gdGFnczwv YT4gYXJlIGFuIGV4Y2VwdGlvbjsgdGhleSBjYW4gZ28gYW55d2hlcmUgb24gdGhlIHBhZ2Uu PC9wPgoKCTxwPjxjb2RlPnNvb19pZl9pbWFnZV9jb3VudDwvY29kZT4gd29ya3MgZGlmZmVy ZW50bHk7IHNlZSB0aGUgPGEgaHJlZj0iI3Nvb19pZl9pbWFnZV9jb3VudCI+dGFnIGhlbHA8 L2E+IGJlbG93LjwvcD4KCgk8aDIgaWQ9InRhZ3MiPlRhZ3M8L2gyPgoKCTxoMyBpZD0iY29u dHJvbGxlcl90YWciPkNvbnRyb2xsZXIgdGFnPC9oMz4KCgk8aDQgaWQ9InNvb19pbWFnZV9z ZWxlY3QiPnNvb19pbWFnZV9zZWxlY3Q8L2g0PgoKCTxwPlNlbGVjdCBpbWFnZXMgZm9yIGRp c3BsYXkgdmlhIG90aGVyIDxzdHJvbmc+c29vX2ltYWdlPC9zdHJvbmc+IHRhZ3MuIFNlbGVj dCBzcGVjaWZpYyBpbWFnZXMgYnkgbmFtZSBvciBpZDsgc2VhcmNoIGZvciBpbWFnZXMgYnkg YXV0aG9yLCBjYXRlZ29yeSwgYXNwZWN0IHJhdGlvLCBvciBmaWxlIHR5cGUsIHJldHJpZXZl IGFydGljbGUgaW1hZ2UocyksIG9yIHNlbGVjdCBpbWFnZXMgZnJvbSBUeHAgNC4zLjAmIzgy MTc7cyBuZXcgaW1hZ2UgY29udGV4dC4gRWFjaCBzZWxlY3RlZCBpbWFnZSB3aWxsIGJlIHBh c3NlZCB0byB0aGUgaW1hZ2UgZm9ybSBvciBjb250YWluZXIgY29udGVudHMuPC9wPgoKCTxw PkNhbiBiZSB1c2VkIGFsbW9zdCBhbnl3aGVyZSwgYnV0IDxzcGFuIGNsYXNzPSJ3YXJuaW5n Ij5kbyBub3QgdXNlIHJlY3Vyc2l2ZWx5PC9zcGFuPiwgaS5lLiBpbnNpZGUgYW5vdGhlciA8 c3Ryb25nPnNvb19pbWFnZTwvc3Ryb25nPiBpbWFnZSBmb3JtIG9yIDxjb2RlPnNvb19pbWFn ZV9zZWxlY3Q8L2NvZGU+IGNvbnRhaW5lciB0YWcuIEluIGdlbmVyYWwgeW91IG11c3QgcGxh Y2UgPGNvZGU+c29vX2ltYWdlX3NlbGVjdDwvY29kZT4gYWJvdmUgYW55IG90aGVyIDxzdHJv bmc+c29vX2ltYWdlPC9zdHJvbmc+IHRhZ3MgaWYgPGNvZGU+c29vX2ltYWdlX3NlbGVjdDwv Y29kZT4gaXMgZXhwZWN0ZWQgdG8gcHJvdmlkZSB0aGUgaW1hZ2UgY29udGV4dCBmb3IgdGhl IG90aGVyIHRhZ3MuICg8c3Ryb25nPnNvb19pbWFnZTwvc3Ryb25nPiBwYWdpbmF0aW9uIHRh Z3MgYXJlIGFuIGV4Y2VwdGlvbiwgYW5kIGNhbiBiZSBwbGFjZWQgYW55d2hlcmUuKTwvcD4K Cgk8cD5Vc2UgYXMgYSBzaW5nbGUgdGFnIChpbiB3aGljaCBjYXNlIHRoZSA8Y29kZT5mb3Jt PC9jb2RlPiBhdHRyaWJ1dGUgaXMgPHNwYW4gY2xhc3M9InJlcXVpcmVkIj5yZXF1aXJlZDwv c3Bhbj4pPC9wPgoKPHByZT4mIzYwO3R4cDpzb29faW1hZ2Vfc2VsZWN0IC8mIzYyOwo8L3By ZT4KCgk8cD5vciBhcyBhIGNvbnRhaW5lciAoaW4gd2hpY2ggY2FzZSA8Y29kZT5mb3JtPC9j b2RlPiBhbmQgPGNvZGU+bGlzdGZvcm08L2NvZGU+IHdpbGwgYmUgb3ZlcnJpZGRlbik8L3A+ Cgo8cHJlPiYjNjA7dHhwOnNvb19pbWFnZV9zZWxlY3QmIzYyOwouLi4gKnNvb19pbWFnZSog dGFncyBhbmQgb3RoZXIgY29udGVudAomIzYwOy90eHA6c29vX2ltYWdlX3NlbGVjdCYjNjI7 CjwvcHJlPgoKCTxoNT5BdHRyaWJ1dGVzPC9oNT4KCgk8cD5Vbmxlc3Mgb3RoZXJ3aXNlIHN0 YXRlZCwgYWxsIGF0dHJpYnV0ZXMgZGVmYXVsdCB0byB1bnNldCAoJiM4MjIwOzAmIzgyMjE7 IG9yIGVtcHR5KS48L3A+CgoJPHA+Tm90ZSB0aGF0IDxjb2RlPm5hbWU8L2NvZGU+IHdpbGwg b3ZlcnJpZGUgPGNvZGU+aWQ8L2NvZGU+LCBhbmQgZWl0aGVyIG9mIHRoZXNlIHdpbGwgb3Zl cnJpZGUgPGNvZGU+YXV0aG9yPC9jb2RlPiwgPGNvZGU+Y2F0ZWdvcnk8L2NvZGU+LCA8Y29k ZT5hc3BlY3RfcmF0aW88L2NvZGU+LCBhbmQgPGNvZGU+ZXh0PC9jb2RlPi4gSWYgbm9uZSBv ZiB0aGVzZSBpcyBkZWNsYXJlZCwgaW5zaWRlIGFuIGFydGljbGUgZm9ybSA8Y29kZT5zb29f aW1hZ2Vfc2VsZWN0PC9jb2RlPiBsb29rcyBmb3IgdGhlIGFydGljbGUgaW1hZ2UocykgKGFu ZCBzbyA8c3BhbiBjbGFzcz0icmVxdWlyZWQiPnJlcXVpcmVzPC9zcGFuPiBhbiBhcnRpY2xl IGNvbnRleHQpLiBBbmQgaWYgbmVpdGhlciBhcHBsaWVzLCA8Y29kZT5zb29faW1hZ2Vfc2Vs ZWN0PC9jb2RlPiBjaGVja3MgZm9yIGdsb2JhbCBpbWFnZSBjb250ZXh0IChuZXcgaW4gVHhw IDQuMy4wKS48L3A+CgoJPHA+PGNvZGU+YXV0aG9yPC9jb2RlPiwgPGNvZGU+Y2F0ZWdvcnk8 L2NvZGU+LCA8Y29kZT5hc3BlY3RfcmF0aW88L2NvZGU+LCBhbmQgPGNvZGU+ZXh0PC9jb2Rl PiBjYW4gYmUgdXNlZCB0b2dldGhlciBmb3IgYSBjb21wbGV4IHNlbGVjdGlvbi4gRWFjaCBh dHRyaWJ1dGUgYWNjZXB0cyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0LCBhbmQgd2l0aGluIGVh Y2ggYXR0cmlidXRlIHRoZSByZXN1bHQgaXMgYW4gT1IgKGRpc2p1bmN0aXZlKSBzZWFyY2gs IHdpZGVuaW5nIHRoZSBzZWFyY2guIEhvd2V2ZXIsIGFjcm9zcyBhdHRyaWJ1dGVzIHRoZSBy ZXN1bHQgaXMgYW4gPHNwYW4gY2xhc3M9ImNhcHMiPkFORDwvc3Bhbj4gKGNvbmp1bmN0aXZl KSBzZWFyY2gsIG5hcnJvd2luZyB0aGUgc2VhcmNoLiBFLmcuLCA8Y29kZT4mIzYwO3R4cDpz b29faW1hZ2Vfc2VsZWN0IGNhdGVnb3J5PSYjMzQ7YSxiJiMzNDsgYXV0aG9yPSYjMzQ7YyYj MzQ7IC8mIzYyOzwvY29kZT4gc2VhcmNoZXMgZm9yIGltYWdlcyB0aGF0IGFyZSBlaXRoZXIg aW4gY2F0ZWdvcnkgJiM4MjIwO2EmIzgyMjE7IG9yICYjODIyMDtiJiM4MjIxOywgYnV0IG9u bHkgdGhvc2UgdGhhdCBhcmUgYnkgYXV0aG9yICYjODIyMDtjJiM4MjIxOy48L3A+CgoJPHA+ PGNvZGU+Zm9ybTwvY29kZT4gYW5kIDxjb2RlPmxpc3Rmb3JtPC9jb2RlPiBhcmUgb3ZlcnJp ZGRlbiBieSB0aGUgdGFnIGNvbnRlbnRzIHdoZW4gPGNvZGU+c29vX2ltYWdlX3NlbGVjdDwv Y29kZT4gaXMgdXNlZCBhcyBhIGNvbnRhaW5lciB0YWcuPC9wPgoKCTxoNj5JbWFnZSBzZWxl Y3Rpb24gYXR0cmlidXRlczwvaDY+CgoJPHVsPgoJCTxsaT48Y29kZT5uYW1lPC9jb2RlPiA8 ZW0+KHRleHQpPC9lbT48YnIgLz4KVHhwIG5hbWUgKGZyb20gQ29udGVudC0mIzYyO0ltYWdl cykgb2YgaW1hZ2UgdG8gc2VsZWN0IGZvciBkaXNwbGF5LiBXaWxsIGFjY2VwdCBhIGNvbW1h LXNlcGFyYXRlZCBsaXN0IGZvciBtdWx0aXBsZSBpbWFnZXMuPC9saT4KCQk8bGk+PGNvZGU+ aWQ8L2NvZGU+IDxlbT4oaW50ZWdlcik8L2VtPjxiciAvPgpUeHAgSUQgKGZyb20gQ29udGVu dC0mIzYyO0ltYWdlcykgZm9yIGltYWdlIHNlbGVjdGlvbi4gV2lsbCBhY2NlcHQgYSBjb21t YS1zZXBhcmF0ZWQgbGlzdCBmb3IgbXVsdGlwbGUgaW1hZ2VzOyBtdWx0aXBsZSBpZCB2YWx1 ZXMgY2FuIGFsc28gYmUgZW50ZXJlZCBhcyByYW5nZXMgKCYjODIyMDtpZDppZCYjODIyMTsg b3IgJiM4MjIwO2lkLWlkJiM4MjIxOyksIGluY2x1ZGluZyBtdWx0aXBsZSByYW5nZXMsIHBy ZXNlcnZpbmcgb3JkZXIgKGUuZy4sICYjODIyMDs0NC00NiwgMTE6OSYjODIyMTsgZXF1aXZh bGVudCB0byAmIzgyMjA7NDQsNDUsNDYsMTEsMTAsOSYjODIyMTspPC9saT4KCQk8bGk+PGNv ZGU+YXNwZWN0X3JhdGlvPC9jb2RlPiA8ZW0+KHRleHQpPC9lbT48YnIgLz4KSW1hZ2UgYXNw ZWN0IHJhdGlvICh3aWR0aDpoZWlnaHQpLCB3cml0dGVuIGFzIGEgbnVtYmVyIChlLmcuICYj ODIyMDsxLjUmIzgyMjE7KSBvciByYXRpbyAoZS5nLiAmIzgyMjA7MzoyJiM4MjIxOyBvciAm IzgyMjA7My8yJiM4MjIxOykuIE9wdGlvbmFsbHkgcHJlZml4ICYjODIyMDsrJiM4MjIxOyB0 byBnZXQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHNwZWNpZmllZCBhc3BlY3QgcmF0aW8s IG9yICYjODIyMDsmbWludXM7JiM4MjIxOyB0byBnZXQgbGVzcyB0aGFuIG9yIGVxdWFsIHRv IChlLmcuLCAmIzgyMjA7KzM6MiYjODIyMTsgcmV0dXJucyBpbWFnZXMgd2l0aCBhbiBhc3Bl Y3QgcmF0aW8gb2YgMzoyIG9yIGdyZWF0ZXIpLiBPciwgb3B0aW9uYWxseSBnaXZlIHR3byBy YXRpb3Mgc2VwYXJhdGVkIGJ5ICYjODIyMDsmbWludXM7JiM4MjIxOyB0byBzcGVjaWZ5IGEg cmFuZ2UgKGUuZy4sICYjODIyMDsxLTImIzgyMjE7LCAmIzgyMjA7NDozLTM6MiYjODIyMTss IGV0Yy4pPC9saT4KCQk8bGk+PGNvZGU+YXV0aG9yPC9jb2RlPiA8ZW0+KHRleHQpPC9lbT48 YnIgLz4KQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgYXV0aG9yIG5hbWVzIChsb2dpbiBuYW1l cykgZm9yIGltYWdlIHNlbGVjdGlvbi48L2xpPgoJCTxsaT48Y29kZT5jYXRlZ29yeTwvY29k ZT4gPGVtPih0ZXh0KTwvZW0+PGJyIC8+CkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNhdGVn b3JpZXMgZm9yIGltYWdlIHNlbGVjdGlvbi48L2xpPgoJCTxsaT48Y29kZT5leHQ8L2NvZGU+ IDxlbT4oZmlsZW5hbWUgZXh0ZW5zaW9uKTwvZW0+PGJyIC8+CkNvbW1hLXNlcGFyYXRlZCBs aXN0IG9mIGZpbGUgdHlwZXMgZm9yIGltYWdlIHNlbGVjdGlvbiwgZS5nLiAmIzgyMjA7cG5n LGpwZyYjODIyMTsuPC9saT4KCQk8bGk+PGNvZGU+bGltaXQ8L2NvZGU+IDxlbT4oaW50ZWdl cik8L2VtPjxiciAvPgpMaW1pdCBvbiBudW1iZXIgb2YgaW1hZ2VzIHRvIHJldHVybiBwZXIg cGFnZS4gRGVmYXVsdHMgdG8gJiM4MjIwOzAmIzgyMjE7LCBubyBsaW1pdC48L2xpPgoJCTxs aT48Y29kZT5zb3J0PC9jb2RlPiA8ZW0+KE15U1FMIHNvcnQgdmFsdWUpPC9lbT48YnIgLz4K U29ydCBvcmRlciB0byB1c2Ugd2hlbiBzZWxlY3RpbmcgYnkgPGNvZGU+YXV0aG9yPC9jb2Rl PiwgPGNvZGU+Y2F0ZWdvcnk8L2NvZGU+LCA8Y29kZT5hc3BlY3RfcmF0aW88L2NvZGU+IGFu ZC9vciA8Y29kZT5leHQ8L2NvZGU+LiBEZWZhdWx0cyB0byAmIzgyMjA7bmFtZSBhc2MmIzgy MjE7IChhbHBoYWJldGljYWwgYnkgaW1hZ2UgbmFtZSkuIE90aGVyIHBvc3NpYmlsaXRpZXMg aW5jbHVkZSAmIzgyMjA7ZGF0ZSBkZXNjJiM4MjIxOyAobW9zdCByZWNlbnQgZmlyc3QpIGFu ZCAmIzgyMjA7cmFuZCYjODIyMTsgb3IgJiM4MjIwO3JhbmRvbSYjODIyMTsgKHJhbmRvbSku IDxjb2RlPnNvcnQ8L2NvZGU+IGlzIG92ZXJyaWRlbiB3aGVuIHNlbGVjdGlvbiBpcyBieSA8 Y29kZT5uYW1lPC9jb2RlPiwgPGNvZGU+aWQ8L2NvZGU+LCBvciBhcnRpY2xlIGltYWdlLjwv bGk+CgkJPGxpPjxjb2RlPnBhZ2luYXRpb248L2NvZGU+IDxlbT4oYm9vbGVhbik8L2VtPjxi ciAvPgo8c3BhbiBjbGFzcz0iZGVmYXVsdCI+RW5hYmxlZCBieSBkZWZhdWx0PC9zcGFuPi4g U2V0IDxjb2RlPnBhZ2luYXRpb249JiMzNDswJiMzNDs8L2NvZGU+IHRvIHByZXZlbnQgdGhp cyB0YWcgZnJvbSBjaGFuZ2luZyBvciB1c2luZyBwYWdpbmF0aW9uIHZhcmlhYmxlcy4gSW4g Z2VuZXJhbCB0aGlzIGlzIG9ubHkgbmVlZGVkIHdoZW4gdXNpbmcgbXVsdGlwbGUgPGNvZGU+ c29vX2ltYWdlX3NlbGVjdDwvY29kZT4gdGFncyBvbiBhIHNpbmdsZSBwYWdlLCBhbmQgd2hl cmUgbW9yZSB0aGFuIG9uZSBvZiB0aGVzZSB0YWdzIGhhcyBhIDxjb2RlPmxpbWl0PC9jb2Rl PiBzZXQuPC9saT4KCQk8bGk+PGNvZGU+cGVyc2lzdGVudF9jb250ZXh0PC9jb2RlPiA8ZW0+ KGJvb2xlYW4pPC9lbT48YnIgLz4KPHNwYW4gY2xhc3M9ImRlZmF1bHQiPkVuYWJsZWQgYnkg ZGVmYXVsdDwvc3Bhbj4sIHNvIHRoYXQgbGF0ZXIgPGNvZGU+c29vX2ltYWdlPC9jb2RlPiB0 YWdzIHdpbGwgZmluZCB0aGUgZmlyc3Qgc2VsZWN0ZWQgaW1hZ2UgaWYgdGhleSBkb24mIzgy MTc7dCBmaW5kIHNvbWV0aGluZyBlbHNlIGZpcnN0LiBTZXQgPGNvZGU+cGVyc2lzdGVudF9j b250ZXh0PSYjMzQ7MCYjMzQ7PC9jb2RlPiB0byBwcmV2ZW50IHRoaXMgYmVoYXZpb3IuPC9s aT4KCTwvdWw+CgoJPGg2PkZvcm0gb3V0cHV0IGF0dHJpYnV0ZXM8L2g2PgoKCTx1bD4KCQk8 bGk+PGNvZGU+Zm9ybTwvY29kZT4gPGVtPih0ZXh0KTwvZW0+IDxzcGFuIGNsYXNzPSJyZXF1 aXJlZCI+UmVxdWlyZWQ8L3NwYW4+IChleGNlcHQgd2hlbiB1c2luZyA8Y29kZT5zb29faW1h Z2Vfc2VsZWN0PC9jb2RlPiBhcyBhIGNvbnRhaW5lciB0YWcpPGJyIC8+Ck5hbWUgb2YgVHhw IGZvcm0gdG8gYXBwbHkgdG8gdGhlIGltYWdlKHMpLiBEZWZhdWx0cyB0byAmIzgyMjA7c29v X2ltYWdlJiM4MjIxOyAob3IgdGhlIHBsdWdpbiYjODIxNztzIHByZWZlcmVuY2UgdmFsdWUs IGlmIHlvdSBoYXZlIGFzc2lnbmVkIG9uZSkuPC9saT4KCQk8bGk+PGNvZGU+bGlzdGZvcm08 L2NvZGU+IDxlbT4odGV4dCk8L2VtPjxiciAvPgpOYW1lIG9mIFR4cCBmb3JtIHRvIHVzZSBp ZiBtdWx0aXBsZSBpbWFnZXMgYXJlIHJldHJpZXZlZC4gRGVmYXVsdHMgdG8gdGhlIHNhbWUg dmFsdWUgYXMgPGNvZGU+Zm9ybTwvY29kZT4gKG9yIHdoYXRldmVyIHZhbHVlIHlvdSBoYXZl IGFzc2lnbmVkIHRvIHRoZSBnbG9iYWwgYXJyYXkpLjwvbGk+CgkJPGxpPjxjb2RlPmJyZWFr PC9jb2RlPiA8ZW0+KHRleHQpPC9lbT48YnIgLz4KPHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8 L3NwYW4+IHRhZyBuYW1lIChubyBicmFja2V0cykgb3IgdGV4dCB0byBzZXBhcmF0ZSBtdWx0 aXBsZSBpbWFnZXMuPC9saT4KCQk8bGk+PGNvZGU+d3JhcHRhZzwvY29kZT4gPGVtPig8c3Bh biBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gdGFnIG5hbWUpPC9lbT48YnIgLz4KPHNwYW4g Y2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IHRhZyBuYW1lIChubyBicmFja2V0cykgZm9yIGVs ZW1lbnQgdG8gd3JhcCB0aGUgaW1hZ2UocykuPC9saT4KCQk8bGk+PGNvZGU+Y2xhc3M8L2Nv ZGU+IDxlbT4odGV4dCk8L2VtPjxiciAvPgo8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9U Ui9odG1sNDAxL3N0cnVjdC9nbG9iYWwuaHRtbCNhZGVmLWNsYXNzIiB0aXRsZT0icyI+PHNw YW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IGNsYXNzIG5hbWU8L2E+IGZvciB0aGUgPGNv ZGU+d3JhcHRhZzwvY29kZT4uPC9saT4KCQk8bGk+PGNvZGU+aHRtbF9pZDwvY29kZT4gPGVt Pih0ZXh0KTwvZW0+PGJyIC8+CjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0 MDEvc3RydWN0L2dsb2JhbC5odG1sI2FkZWYtaWQiPjxzcGFuIGNsYXNzPSJjYXBzIj5IVE1M PC9zcGFuPiBpZDwvYT4gZm9yIHRoZSA8Y29kZT53cmFwdGFnPC9jb2RlPi48L2xpPgoJPC91 bD4KCgk8aDMgaWQ9Im91dHB1dF90YWdzIj5PdXRwdXQgdGFnczwvaDM+CgoJPGg0IGlkPSJz b29faW1hZ2UiPnNvb19pbWFnZTwvaDQ+Cgo8cHJlPiYjNjA7dHhwOnNvb19pbWFnZSAvJiM2 MjsKPC9wcmU+CgoJPHA+RGlzcGxheSBhIHNpbmdsZSBpbWFnZS48L3A+CgoJPGg1PkF0dHJp YnV0ZXM8L2g1PgoKCTxwPk5vbmUgcmVxdWlyZWQgKGJ1dCBzZWUgcGFyYWdyYXBoIGJlbG93 KS4gVW5sZXNzIG90aGVyd2lzZSBzdGF0ZWQsIGFsbCBhdHRyaWJ1dGVzIGRlZmF1bHQgdG8g dW5zZXQgKCYjODIyMDswJiM4MjIxOyBvciBlbXB0eSkuPC9wPgoKCTxwPk5vdGUgdGhhdCA8 Y29kZT5uYW1lPC9jb2RlPiB3aWxsIG92ZXJyaWRlIDxjb2RlPmlkPC9jb2RlPi4gSWYgbmVp dGhlciBpcyBkZWNsYXJlZCwgPGNvZGU+c29vX2ltYWdlPC9jb2RlPiA8c3BhbiBjbGFzcz0i cmVxdWlyZWQiPnJlcXVpcmVzPC9zcGFuPiBhcnRpY2xlIG9yIGltYWdlIGNvbnRleHQuPC9w PgoKCTxwPkJ5IGRlZmF1bHQsIHRoZSA8Y29kZT5pbWc8L2NvZGU+IHRhZyBwcm9kdWNlZCBi eSA8Y29kZT5zb29faW1hZ2U8L2NvZGU+IGhhcyA8Y29kZT5oZWlnaHQ8L2NvZGU+IGFuZCA8 Y29kZT53aWR0aDwvY29kZT4gYXR0cmlidXRlcyBzZXQgdG8gdGhlIGFjdHVhbCBpbWFnZSBk aW1lbnNpb25zLCBpbiBwaXhlbHMuIFlvdSBjYW4gY2hhbmdlIHRoaXMgaW4gdGhlIHBsdWdp biYjODIxNztzIHByZWZlcmVuY2VzIHNvIHRoYXQgdGhlc2UgYXR0cmlidXRlcyBhcmUgbm90 IGFkZGVkLiBJbiBlaXRoZXIgY2FzZSB5b3UgY2FuIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHNl dHRpbmcgYnkgc3BlY2lmeWluZyA8Y29kZT5oZWlnaHQ8L2NvZGU+IGFuZC9vciA8Y29kZT53 aWR0aDwvY29kZT4gaW4gPGNvZGU+c29vX2ltYWdlPC9jb2RlPjo8L3A+CgoJPHVsPgoJCTxs aT5JZiB5b3VyIHByZWZlcmVuY2Ugc2V0dGluZyBpcyB0byBkaXNwbGF5IDxjb2RlPmhlaWdo dDwvY29kZT4gYW5kIDxjb2RlPndpZHRoPC9jb2RlPiBieSBkZWZhdWx0LCB5b3UgY2FuIHN1 cHByZXNzIHRoaXMgYnkgZGVjbGFyaW5nIDxjb2RlPmhlaWdodD0mIzM0OzAmIzM0OzwvY29k ZT4gb3IgPGNvZGU+d2lkdGg9JiMzNDswJiMzNDs8L2NvZGU+IGluIHRoZSA8Y29kZT5zb29f aW1hZ2U8L2NvZGU+IHRhZy4gWW91IGRvbiYjODIxNzt0IG5lZWQgdG8gZGVjbGFyZSBib3Ro OyBzZXR0aW5nIGVpdGhlciBvZiB0aGVtIHdpbGwgc3VwcHJlc3MgYm90aC48L2xpPgoJCTxs aT5JZiB5b3VyIHByZWZlcmVuY2Ugc2V0dGluZyBpcyB0byBzdXBwcmVzcyBib3RoIGJ5IGRl ZmF1bHQsIHlvdSBjYW4gb3ZlcnJpZGUgdGhpcyBieSBkZWNsYXJpbmcgPGNvZGU+aGVpZ2h0 PSYjMzQ7MSYjMzQ7PC9jb2RlPiBvciA8Y29kZT53aWR0aD0mIzM0OzEmIzM0OzwvY29kZT4g aW4gdGhlIDxjb2RlPnNvb19pbWFnZTwvY29kZT4gdGFnLiBBZ2FpbiwgeW91IGRvbiYjODIx Nzt0IG5lZWQgdG8gZGVjbGFyZSBib3RoLjwvbGk+CgkJPGxpPkFzIG9mIHZlcnNpb24gMS4w LmIuNywgdGh1bWJuYWlsIGF0dHJpYnV0ZXMgYXJlIHRyZWF0ZWQgdGhlIHNhbWUgd2F5IChU eHAgdmVyc2lvbiA0LjIuMCBvciBsYXRlcjsgbm90ZSB0aGF0IHRoZSBUeHAgNC4yLjAgdXBn cmFkZSBkb2VzIG5vdCBhdXRvbWF0aWNhbGx5IGFkZCB0aHVtYm5haWwgaGVpZ2h0IGFuZCB3 aWR0aCB0byB0aGUgZGF0YWJhc2UgZm9yIGV4aXN0aW5nIGltYWdlcykuPC9saT4KCTwvdWw+ CgoJPHA+WW91IGNhbiBhbHNvIGFzc2lnbiBhcmJpdHJhcnkgPGEgaHJlZj0iaHR0cDovL3d3 dy53My5vcmcvVFIvMjAwOC9SRUMtQ1NTMi0yMDA4MDQxMS9zeW5kYXRhLmh0bWwjbGVuZ3Ro LXVuaXRzIj48c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBsZW5ndGggdmFsdWVzPC9h PiB0byBlaXRoZXIgYXR0cmlidXRlLiBJbiB0aGlzIGNhc2UsIHRoZSB2YWx1ZSB3aWxsIGJl IHBhc3NlZCBkaXJlY3RseSB0byB0aGUgPGNvZGU+aW1nPC9jb2RlPiB0YWcuIElmIHlvdSBh c3NpZ24gPGNvZGU+aGVpZ2h0PC9jb2RlPiBzdWNoIGEgdmFsdWUsIGJ1dCBkZWNsYXJlIG5v dGhpbmcgZm9yIDxjb2RlPndpZHRoPC9jb2RlPiwgdGhlIDxjb2RlPmltZzwvY29kZT4gdGFn IHdpbGwgaGF2ZSB0aGUgc3BlY2lmaWVkIDxjb2RlPmhlaWdodDwvY29kZT4gYnV0IHdpbGwg bm90IGhhdmUgYSA8Y29kZT53aWR0aDwvY29kZT4gYXR0cmlidXRlIChhbmQgdmljZSB2ZXJz YSk7IHRoaXMgcHJlc2VydmVzIHRoZSBjb3JyZWN0IGFzcGVjdCByYXRpby48L3A+CgoJPHA+ U2V0dGluZyBhbnkgb2YgdGhlIGxpbmstcmVsYXRlZCBhdHRyaWJ1dGVzICg8Y29kZT5saW5r PC9jb2RlPiwgPGNvZGU+bGlua19jbGFzczwvY29kZT4sIDxjb2RlPmxpbmtfaWQ8L2NvZGU+ LCA8Y29kZT5saW5rX3JlbDwvY29kZT4sIDxjb2RlPmxpbmtfdG88L2NvZGU+LCBvciA8Y29k ZT5vbmNsaWNrPC9jb2RlPikgYXV0b21hdGljYWxseSBlbmFibGVzIGJvdGggPGNvZGU+bGlu azwvY29kZT4gYW5kIDxjb2RlPnRodW1ibmFpbDwvY29kZT4uPC9wPgoKCTxoNj5JbWFnZSBz ZWxlY3Rpb24gYXR0cmlidXRlczwvaDY+CgoJPHVsPgoJCTxsaT48Y29kZT5uYW1lPC9jb2Rl PiA8ZW0+KHRleHQpPC9lbT48YnIgLz4KVHhwIG5hbWUgKGZyb20gQ29udGVudC0mIzYyO0lt YWdlcykgb2YgaW1hZ2UgdG8gZGlzcGxheS48L2xpPgoJCTxsaT48Y29kZT5pZDwvY29kZT4g PGVtPihpbnRlZ2VyKTwvZW0+PGJyIC8+ClR4cCBJRCAoZnJvbSBDb250ZW50LSYjNjI7SW1h Z2VzKSBvZiBpbWFnZSB0byBkaXNwbGF5LjwvbGk+CgkJPGxpPjxjb2RlPnRodW1ibmFpbDwv Y29kZT4gPGVtPihib29sZWFuKTwvZW0+PGJyIC8+ClNldCB0byBkaXNwbGF5IHRoZSB0aHVt Ym5haWwgaW5zdGVhZCBvZiB0aGUgZnVsbC1zaXplIGltYWdlLjwvbGk+Cgk8L3VsPgoKCTxo Nj5JbWFnZSB0YWcgYXR0cmlidXRlczwvaDY+CgoJPHVsPgoJCTxsaT48Y29kZT5oZWlnaHQ8 L2NvZGU+IDxlbT4obWl4ZWQpPC9lbT4KCTx1bD4KCQk8bGk+ZW1wdHkgKDxzcGFuIGNsYXNz PSJkZWZhdWx0Ij5kZWZhdWx0PC9zcGFuPik6IGFkZCBzdGFuZGFyZCA8Y29kZT5oZWlnaHQ8 L2NvZGU+IGF0dHJpYnV0ZSAoYWN0dWFsIGltYWdlIGhlaWdodCBpbiBwaXhlbHMpIGlmIDxj b2RlPmRlZmF1bHRfZGltZW5zaW9uczwvY29kZT4gcHJlZmVyZW5jZSBpcyBvbi48L2xpPgoJ CTxsaT48Y29kZT4wPC9jb2RlPiA6IFN1cHByZXNzIDxjb2RlPmhlaWdodDwvY29kZT4gYW5k IDxjb2RlPndpZHRoPC9jb2RlPiBhdHRyaWJ1dGVzIGlmIDxjb2RlPmRlZmF1bHRfZGltZW5z aW9uczwvY29kZT4gcHJlZmVyZW5jZSBpcyBvbi48L2xpPgoJCTxsaT48Y29kZT4xPC9jb2Rl PiA6IGZvcmNlIHN0YW5kYXJkIDxjb2RlPmhlaWdodDwvY29kZT4gYW5kIDxjb2RlPndpZHRo PC9jb2RlPiBhdHRyaWJ1dGVzIHdoZW4gPGNvZGU+ZGVmYXVsdF9kaW1lbnNpb25zPC9jb2Rl PiBwcmVmZXJlbmNlIGlzIG9mZi48L2xpPgoJCTxsaT48YSBocmVmPSJodHRwOi8vd3d3Lncz Lm9yZy9UUi9odG1sNDAxL3R5cGVzLmh0bWwjdHlwZS1sZW5ndGgiPjxzcGFuIGNsYXNzPSJj YXBzIj5IVE1MPC9zcGFuPiBsZW5ndGggdmFsdWU8L2E+IGZvciB0aGUgPGNvZGU+aGVpZ2h0 PC9jb2RlPiBhdHRyaWJ1dGUgKGUuZy4gJiM4MjIwOzUwJSYjODIyMTspLjwvbGk+Cgk8L3Vs PjwvbGk+CgkJPGxpPjxjb2RlPndpZHRoPC9jb2RlPiA8ZW0+KG1peGVkKTwvZW0+PGJyIC8+ Ckxpa2UgPGNvZGU+aGVpZ2h0PC9jb2RlPi48L2xpPgoJCTxsaT48Y29kZT5lc2NhcGU8L2Nv ZGU+IDxlbT4oYm9vbGVhbik8L2VtPjxiciAvPgo8c3BhbiBjbGFzcz0iZGVmYXVsdCI+VHJ1 ZSBieSBkZWZhdWx0PC9zcGFuPi4gRXNjYXBlIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9z cGFuPiBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gdGhlIDxjb2RlPmFsdDwvY29kZT4gYW5kIDxj b2RlPnRpdGxlPC9jb2RlPiBhdHRyaWJ1dGVzLiBTZXQgdG8gJiM4MjIwOzAmIzgyMjE7IHRv IGxlYXZlIHVuZXNjYXBlZC48L2xpPgoJCTxsaT48Y29kZT5jbGFzczwvY29kZT4gPGVtPih0 ZXh0KTwvZW0+PGJyIC8+CjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0MDEv c3RydWN0L2dsb2JhbC5odG1sI2FkZWYtY2xhc3MiIHRpdGxlPSJzIj48c3BhbiBjbGFzcz0i Y2FwcyI+SFRNTDwvc3Bhbj4gY2xhc3MgbmFtZTwvYT4gZm9yIHRoZSA8Y29kZT5pbWc8L2Nv ZGU+IHRhZy48L2xpPgoJCTxsaT48Y29kZT5odG1sX2lkPC9jb2RlPiA8ZW0+KHRleHQpPC9l bT48YnIgLz4KPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQwMS9zdHJ1Y3Qv Z2xvYmFsLmh0bWwjYWRlZi1pZCI+PHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IGlk PC9hPiBmb3IgdGhlIDxjb2RlPmltZzwvY29kZT4gdGFnLjwvbGk+CgkJPGxpPjxjb2RlPnRp dGxlPC9jb2RlPiA8ZW0+KGZvcm1hdCBzdHJpbmcpPC9lbT48YnIgLz4KPGEgaHJlZj0iaHR0 cDovL3d3dy53My5vcmcvVFIvMTk5OS9SRUMtaHRtbDQwMS0xOTk5MTIyNC9zdHJ1Y3QvZ2xv YmFsLmh0bWwjYWRlZi10aXRsZSI+PHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IHRp dGxlIGF0dHJpYnV0ZTwvYT4gZm9yIHRoZSA8Y29kZT5pbWc8L2NvZGU+IHRhZyAoYW5kIDxj b2RlPmE8L2NvZGU+IHRhZyBmb3IgbGlua2VkIHRodW1ibmFpbHMpLiBBbnkgb2NjdXJyZW5j ZXMgb2YgJiM4MjIwO3tjYXB0aW9ufSYjODIyMTsgd2lsbCBiZSByZXBsYWNlZCBieSB0aGUg aW1hZ2UgY2FwdGlvbiBmcm9tIHRoZSBUeHAgZGF0YWJhc2U7IGxpa2V3aXNlIGZvciAmIzgy MjA7e2F1dGhvcn0mIzgyMjE7IGFuZCAmIzgyMjA7e2FsdH0mIzgyMjE7LiA8c3BhbiBjbGFz cz0iZGVmYXVsdCI+RGVmYXVsdDwvc3Bhbj4gaXMgJiM4MjIwO3tjYXB0aW9ufSYjODIyMTsu PC9saT4KCTwvdWw+CgoJPGg2PkxpbmtlZCB0aHVtYm5haWwgYXR0cmlidXRlczwvaDY+CgoJ PHA+PHNwYW4gY2xhc3M9Indhcm5pbmciPk5vdGU6PC9zcGFuPiBzZXR0aW5nIGFueSBvZiB0 aGVzZSBhdXRvbWF0aWNhbGx5IGVuYWJsZXMgYm90aCA8Y29kZT5saW5rPC9jb2RlPiBhbmQg PGNvZGU+dGh1bWJuYWlsPC9jb2RlPi48L3A+CgoJPHVsPgoJCTxsaT48Y29kZT5saW5rPC9j b2RlPiA8ZW0+KGJvb2xlYW4pPC9lbT48YnIgLz4KRGlzcGxheSB0aGUgdGh1bWJuYWlsIGFz IGEgbGluayB0byB0aGUgZnVsbC1zaXplIGltYWdlLjwvbGk+CgkJPGxpPjxjb2RlPmxpbmtf Y2xhc3M8L2NvZGU+IDxlbT4odGV4dCk8L2VtPjxiciAvPgo8YSBocmVmPSJodHRwOi8vd3d3 LnczLm9yZy9UUi9odG1sNDAxL3N0cnVjdC9nbG9iYWwuaHRtbCNhZGVmLWNsYXNzIiB0aXRs ZT0icyI+PHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IGNsYXNzIG5hbWU8L2E+IGZv ciB0aGUgPGNvZGU+YTwvY29kZT4gdGFnLjwvbGk+CgkJPGxpPjxjb2RlPmxpbmtfaWQ8L2Nv ZGU+IDxlbT4odGV4dCk8L2VtPjxiciAvPgo8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9U Ui9odG1sNDAxL3N0cnVjdC9nbG9iYWwuaHRtbCNhZGVmLWlkIj48c3BhbiBjbGFzcz0iY2Fw cyI+SFRNTDwvc3Bhbj4gaWQ8L2E+IGZvciB0aGUgPGNvZGU+YTwvY29kZT4gdGFnLjwvbGk+ CgkJPGxpPjxjb2RlPmxpbmtfcmVsPC9jb2RlPiA8ZW0+KHJlbGF0aW9uKTwvZW0+PGJyIC8+ CjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0MDEvc3RydWN0L2xpbmtzLmh0 bWwjYWRlZi1yZWwiPjxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiA8Y29kZT5yZWw8 L2NvZGU+IGF0dHJpYnV0ZTwvYT4gZm9yIHRoZSA8Y29kZT5hPC9jb2RlPiB0YWcuPC9saT4K CQk8bGk+PGNvZGU+b25jbGljazwvY29kZT4gPGVtPih0ZXh0KTwvZW0+PGJyIC8+CjxhIGhy ZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSLzE5OTkvUkVDLWh0bWw0MDEtMTk5OTEyMjQvaW50 ZXJhY3Qvc2NyaXB0cy5odG1sI2FkZWYtb25jbGljayI+PHNwYW4gY2xhc3M9ImNhcHMiPkhU TUw8L3NwYW4+IDxjb2RlPm9uY2xpY2s8L2NvZGU+IGF0dHJpYnV0ZTwvYT4gZm9yIHRoZSA8 Y29kZT5hPC9jb2RlPiB0YWcuPC9saT4KCQk8bGk+PGNvZGU+bGlua190bzwvY29kZT4gPGVt Pig8c3BhbiBjbGFzcz0iY2FwcyI+VVJJPC9zcGFuPik8L2VtPjxiciAvPgpSb290LXJlbGF0 aXZlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkk8L3NwYW4+IHRvIGxpbmsgdG87IGlmIHRoYXQg PHNwYW4gY2xhc3M9ImNhcHMiPlVSSTwvc3Bhbj4gY29udGFpbnMgYSA8c3Ryb25nPnNvb19p bWFnZTwvc3Ryb25nPiBnYWxsZXJ5IHRoYXQgaW5jbHVkZXMgdGhpcyBpbWFnZSwgdGhlIGxp bmsgd2lsbCBiZSB0byB0aGF0IHBvaW50IGluIHRoZSBnYWxsZXJ5ICh3b3JrcyBmb3IgbXVs dGktcGFnZSBnYWxsZXJpZXMpLjwvbGk+Cgk8L3VsPgoKCTxoNCBpZD0ibWV0YWRhdGEiPlR4 cCBNZXRhZGF0YSB0YWdzPC9oND4KCgk8cD5EaXNwbGF5IG1ldGFkYXRhIGZpZWxkcyBmcm9t IHRoZSBUeHAgaW1hZ2UgdGFibGUuIFRoZXNlIHRhZ3MgY2FuIGJlIHVzZWQgYW55d2hlcmUs IGJ1dCByZXF1aXJlIGltYWdlIGNvbnRleHQuPC9wPgoKPHByZT4mIzYwO3R4cDpzb29faW1h Z2VfYWx0IC8mIzYyOwomIzYwO3R4cDpzb29faW1hZ2VfYXV0aG9yIC8mIzYyOwomIzYwO3R4 cDpzb29faW1hZ2VfY2FwdGlvbiAvJiM2MjsKJiM2MDt0eHA6c29vX2ltYWdlX2NhdGVnb3J5 IC8mIzYyOwomIzYwO3R4cDpzb29faW1hZ2VfZGF0ZSAvJiM2MjsKJiM2MDt0eHA6c29vX2lt YWdlX2hlaWdodCAvJiM2MjsKJiM2MDt0eHA6c29vX2ltYWdlX2lkIC8mIzYyOwomIzYwO3R4 cDpzb29faW1hZ2VfbmFtZSAvJiM2MjsKJiM2MDt0eHA6c29vX2ltYWdlX3VybCAvJiM2MjsK JiM2MDt0eHA6c29vX2ltYWdlX3dpZHRoIC8mIzYyOwomIzYwO3R4cDpzb29fdGh1bWJuYWls X3VybCAvJiM2MjsKJiM2MDt0eHA6c29vX3RodW1ibmFpbF9oZWlnaHQgLyYjNjI7CiYjNjA7 dHhwOnNvb190aHVtYm5haWxfd2lkdGggLyYjNjI7CjwvcHJlPgoKCTxwPjxjb2RlPnNvb19p bWFnZV9kYXRlPC9jb2RlPiByZXR1cm5zIHRoZSBkYXRlIHN0b3JlZCBieSBUeHAsIHdoaWNo IGlzIHRoZSBpbWFnZSB1cGxvYWQgZGF0ZSwgd2hpY2ggaXMgbm90IGFsbCB0aGF0IHVzZWZ1 bC4gU2VlIDxjb2RlPnNvb19leGlmPC9jb2RlPiBmb3IgaG93IHRvIHNob3cgdGhlIGV4cG9z dXJlIGRhdGUgZm9yIGltYWdlcyBjb250YWluaW5nIDxzcGFuIGNsYXNzPSJjYXBzIj5FWElG PC9zcGFuPiBkYXRhLjwvcD4KCgk8cD48Y29kZT5zb29faW1hZ2VfYXV0aG9yPC9jb2RlPiBy ZXR1cm5zIHRoZSBhdXRob3ImIzgyMTc7cyBmdWxsIG5hbWUgcmF0aGVyIHRoYW4gdGhlIGxv Z2luIG5hbWUgc3RvcmVkIGluIHRoZSBpbWFnZSB0YWJsZS48L3A+CgoJPHA+Tm90ZSB0aGF0 IHRodW1ibmFpbCBoZWlnaHQgYW5kIHdpZHRoIGFyZSBhdmFpbGFibGUgb25seSBpbiBUeHAg NC4yLjAgb3IgbGF0ZXIuIEFsc28gbm90ZSB0aGF0IHRoZSBUeHAgNC4yLjAgdXBkYXRlIHNj cmlwdCBkb2VzIG5vdCB1cGRhdGUgdGhlc2UgZmllbGRzIGZvciBpbWFnZXMgYWxyZWFkeSBp biB0aGUgZGF0YWJhc2UgKHRoZSA8YSBocmVmPSJodHRwOi8vaXBzZWRpeGl0Lm5ldC90eHAv OTEvc29vX3RodW1iX2F0dHMiPnNvb190aHVtYl9hdHRzPC9hPiBwbHVnaW4gb2ZmZXJzIGEg c29sdXRpb24pLjwvcD4KCgk8aDU+QXR0cmlidXRlczwvaDU+CgoJPHA+QWxsIG9mIHRoZXNl IHRhZ3MgYWNjZXB0IHN0YW5kYXJkIDxjb2RlPndyYXB0YWc8L2NvZGU+LCA8Y29kZT5jbGFz czwvY29kZT4sIGFuZCA8Y29kZT5odG1sX2lkPC9jb2RlPiBhdHRyaWJ1dGVzLjwvcD4KCgk8 cD5BZGRpdGlvbmFsbHksIDxjb2RlPnNvb19pbWFnZV9hbHQ8L2NvZGU+IGFuZCA8Y29kZT5z b29faW1hZ2VfY2FwdGlvbjwvY29kZT4gZWFjaCBhY2NlcHQgdGhlIGZvbGxvd2luZyBvcHRp b25hbCBhdHRyaWJ1dGU6PC9wPgoKCTx1bD4KCQk8bGk+PGNvZGU+ZXNjYXBlPC9jb2RlPiA8 ZW0+KGJvb2xlYW4pPC9lbT48YnIgLz4KU2V0IGJ5IGRlZmF1bHQsIDxzcGFuIGNsYXNzPSJj YXBzIj5IVE1MPC9zcGFuPiBzcGVjaWFsIGNoYXJhY3RlcnMgd2lsbCBiZSBjb252ZXJ0ZWQu IFNldCB0byAmIzgyMjA7MCYjODIyMTsgdG8gbGVhdmUgdGhlIG91dHB1dCB1bmNvbnZlcnRl ZC48L2xpPgoJPC91bD4KCgk8cD48Y29kZT5zb29faW1hZ2VfY2FwdGlvbjwvY29kZT4gYWNj ZXB0cyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZTo8L3A+CgoJPHVsPgoJCTxsaT48Y29kZT5u b193aWRvdzwvY29kZT4gPGVtPihib29sZWFuKTwvZW0+PGJyIC8+ClNldCBieSBkZWZhdWx0 LCB3aWxsIGluc2VydCBhIG5vbi1icmVha2luZyBzcGFjZSBiZXR3ZWVuIHRoZSBsYXN0IHR3 byB3b3JkcyBpbiB0aGUgY2FwdGlvbi4gU2V0IHRvICYjODIyMDswJiM4MjIxOyB0byBsZWF2 ZSB0aGUgb3V0cHV0IHVuY29udmVydGVkLjwvbGk+Cgk8L3VsPgoKCTxwPjxjb2RlPnNvb19p bWFnZV9kYXRlPC9jb2RlPiBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlOjwvcD4K Cgk8dWw+CgkJPGxpPjxjb2RlPmZvcm1hdDwvY29kZT4gPGVtPihmb3JtYXQgc3RyaW5nKTwv ZW0+PGJyIC8+ClNldCB0byBhIHZhbGlkIDxhIGhyZWY9Imh0dHA6Ly91czIucGhwLm5ldC9z dHJmdGltZSI+c3RyZnRpbWUoKTwvYT4gdmFsdWUgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQg ZGF0ZSBmb3JtYXQgc2V0IGluIHNpdGUgcHJlZmVyZW5jZXMuPC9saT4KCTwvdWw+CgoJPGg0 IGlkPSJzb29fZXhpZiI+RXhpZiB0YWdzPC9oND4KCgk8dWw+CgkJPGxpPjxzdHJvbmc+c29v X2V4aWY8L3N0cm9uZz48L2xpPgoJCTxsaT48c3Ryb25nPnNvb19leGlmX2ZpZWxkPC9zdHJv bmc+PC9saT4KCQk8bGk+PHN0cm9uZz5zb29fZXhpZl92YWx1ZTwvc3Ryb25nPjwvbGk+Cgk8 L3VsPgoKCTxwPlJldHJpZXZlIGFuZCBkaXNwbGF5IDxzcGFuIGNsYXNzPSJjYXBzIj5FWElG PC9zcGFuPiBtZXRhZGF0YSBkaXJlY3RseSBmcm9tIGltYWdlIGZpbGVzLiBJbiBzaW5nbGUt dGFnIG1vZGUgZWFjaCBmaWVsZCB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUgZm9ybWF0ICYj ODIyMDtmaWVsZDogdmFsdWUmIzgyMjE7LiBUaGlzIGNhbiBiZSBjdXN0b21pemVkIHdpdGgg dGhlIDxjb2RlPmZvcm1hdDwvY29kZT4gYXR0cmlidXRlLjwvcD4KCgk8cD5JbiBjb250YWlu ZXItdGFnIG1vZGUgdGhlIHRhZyBjb250ZW50cyBhcmUgaXRlcmF0ZWQgb3Zlciwgb25jZSBm b3IgZWFjaCA8c3BhbiBjbGFzcz0iY2FwcyI+RVhJRjwvc3Bhbj4gZmllbGQ7IHVzZSB0aGUg PGNvZGU+c29vX2V4aWZfZmllbGQ8L2NvZGU+IGFuZCA8Y29kZT5zb29fZXhpZl92YWx1ZTwv Y29kZT4gdGFncyB0byBkaXNwbGF5IHRoZSBkYXRhLiBUaGF0IGlzLCB0aGUgdGFnIGNvbnRl bnRzIGFyZSBsaWtlIGEgVHhwIGZvcm0uIFRoZSBmb2xsb3dpbmcgdHdvIGJsb2NrcyBhcmUg ZXF1aXZhbGVudDo8L3A+Cgo8cHJlPiYjNjA7dHhwOnNvb19leGlmIC8mIzYyOwo8L3ByZT4K CjxwcmU+JiM2MDt0eHA6c29vX2V4aWYmIzYyOwomIzYwO3R4cDpzb29fZXhpZl9maWVsZCAv JiM2Mjs6ICYjNjA7dHhwOnNvb19leGlmX3ZhbHVlIC8mIzYyOwomIzYwOy90eHA6c29vX2V4 aWYmIzYyOwo8L3ByZT4KCgk8aDU+UmVxdWlyZW1lbnRzPC9oNT4KCgk8cD48Y29kZT5zb29f ZXhpZjwvY29kZT4gdXNlcyA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiYjODIxNztz IDxjb2RlPmV4aWZfcmVhZF9kYXRhKCk8L2NvZGU+IGZ1bmN0aW9uLCB3aGljaCA8c3BhbiBj bGFzcz0icmVxdWlyZWQiPnJlcXVpcmVzPC9zcGFuPiA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQ PC9zcGFuPiB0byBiZSBjb21waWxlZCB3aXRoICZtaW51czsmbWludXM7PGNvZGU+ZW5hYmxl LWV4aWY8L2NvZGU+ICh5b3UgY2FuIGNoZWNrIHRoaXMgYnkgcnVubmluZyA8YSBocmVmPSJo dHRwOi8vcGhwLmFib3V0LmNvbS9vZC9sZWFybnBocC9wL1BIUF9pbmZvLmh0bSI+cGhwaW5m bygpPC9hPikuIEl0IHJlcXVpcmVzIGEgZnVsbCBmaWxlIHBhdGggZm9yIHRoZSBpbWFnZTsg dGhpcyBwbHVnaW4gb25seSB3b3JrcyBmb3IgaW1hZ2UgZmlsZXMgaW4geW91ciBkZWZhdWx0 IFR4cCBpbWFnZSBkaXJlY3RvcnkgKHRoZXkgZG9uJiM4MjE3O3QgaGF2ZSB0byBiZSBpbiB0 aGUgVHhwIGRhdGFiYXNlLCB0aG91Z2gpLjwvcD4KCgk8aDU+QXR0cmlidXRlczwvaDU+CgoJ PHVsPgoJCTxsaT48Y29kZT5maWVsZDwvY29kZT4gPGVtPih0ZXh0KTwvZW0+IENvbW1hLXNl cGFyYXRlZCBsaXN0IG9mIGZpZWxkcyB0byBkaXNwbGF5LiBVc2Ugc3RhbmRhcmQgPHNwYW4g Y2xhc3M9ImNhcHMiPkVYSUY8L3NwYW4+IGZpZWxkIG5hbWVzIG9yIHNob3J0Y3V0cyAoc2Vl IGJlbG93KS4gQWRkaXRpb25hbCBvcHRpb25zOgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0i ZGVmYXVsdCI+ZGVmYXVsdDwvc3Bhbj4gPGVtPihlbXB0eSk8L2VtPiA6IERpc3BsYXkgYSBw cmUtc2V0IGxpc3Qgb2YgY29tbW9uIGZpZWxkczwvbGk+CgkJPGxpPjxjb2RlPmR1bXA8L2Nv ZGU+IDogRGlzcGxheSBhbGwgZmllbGRzPC9saT4KCTwvdWw+PC9saT4KCQk8bGk+PGNvZGU+ Zm9ybWF0PSYjMzQ7Zm9ybWF0IHN0cmluZyYjMzQ7PC9jb2RlPiBEZWZhdWx0IGlzICYjODIy MDt7ZmllbGR9OiB7dmFsdWV9JiM4MjIxOy4gSW4gc2luZ2xlLXRhZyBtb2RlIHRoZSB0YWcg d2lsbCBvdXRwdXQgdGhpcyBzdHJpbmcsIGFmdGVyIGFueSBvY2N1cmVuY2VzIG9mICYjODIy MDt7ZmllbGR9JiM4MjIxOyBoYXZlIGJlZW4gcmVwbGFjZWQgd2l0aCB0aGUgPHNwYW4gY2xh c3M9ImNhcHMiPkVYSUY8L3NwYW4+IGZpZWxkIG5hbWU7IGxpa2V3aXNlIGZvciAmIzgyMjA7 e3ZhbHVlfSYjODIyMTsgYW5kIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+RVhJRjwvc3Bhbj4g ZmllbGQgdmFsdWUuPC9saT4KCQk8bGk+PGNvZGU+d3JhcHRhZz0mIzM0O3RhZyBuYW1lJiMz NDs8L2NvZGU+IFRhZyBuYW1lIChubyBicmFja2V0cykgZm9yIGVsZW1lbnQgdG8gd3JhcCB0 aGUgYW5jaG9yPC9saT4KCQk8bGk+PGNvZGU+YnJlYWs9JiMzNDttaXhlZCYjMzQ7PC9jb2Rl PiBUYWcgbmFtZSAobm8gYnJhY2tldHMpIG9yIHRleHQgdG8gYWRkIGJldHdlZW4gaXRlbXM8 L2xpPgoJPC91bD4KCgk8aDU+RmllbGQtbmFtZSBzaG9ydGN1dHM8L2g1PgoKCTxwPlRoZXNl IGFyZSB0aGUgc2FtZSBhcyB1c2VkIGJ5IDxhIGhyZWY9Imh0dHA6Ly93d3cuaHVnc2FuLmNv bS9FWElGdXRpbHMvIj48c3BhbiBjbGFzcz0iY2FwcyI+RVhJRlU8L3NwYW4+dGlsczwvYT4s IGEgY29tbWFuZC1saW5lIHV0aWxpdHkgZm9yIG1hbmlwdWxhdGluZyA8c3BhbiBjbGFzcz0i Y2FwcyI+RVhJRjwvc3Bhbj4gZGF0YS48L3A+CgoJPHRhYmxlPgoJCTx0cj4KCQkJPHRoPjxz cGFuIGNsYXNzPSJjYXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+RVhJRjwvc3Bhbj48L3NwYW4+ IGZpZWxkIDwvdGg+CgkJCTx0aD5TaG9ydGN1dDwvdGg+CgkJPC90cj4KCQk8dHI+CgkJCTx0 ZD5Nb2RlbDwvdGQ+CgkJCTx0ZD5tb2RlbDwvdGQ+CgkJPC90cj4KCQk8dHI+CgkJCTx0ZD5F eHBvc3VyZVRpbWU8L3RkPgoJCQk8dGQ+ZXhwLXRpbWU8L3RkPgoJCTwvdHI+CgkJPHRyPgoJ CQk8dGQ+Rk51bWJlcjwvdGQ+CgkJCTx0ZD5mLW51bWJlcjwvdGQ+CgkJPC90cj4KCQk8dHI+ CgkJCTx0ZD5JU09TcGVlZFJhdGluZ3M8L3RkPgoJCQk8dGQ+aXNvLXNwZWVkPC90ZD4KCQk8 L3RyPgoJCTx0cj4KCQkJPHRkPkRhdGVUaW1lT3JpZ2luYWw8L3RkPgoJCQk8dGQ+ZGF0ZS10 YWtlbjwvdGQ+CgkJPC90cj4KCQk8dHI+CgkJCTx0ZD5Gb2NhbExlbmd0aDwvdGQ+CgkJCTx0 ZD5mb2NhbC1sZW48L3RkPgoJCTwvdHI+CgkJPHRyPgoJCQk8dGQ+SW1hZ2VIaXN0b3J5PC90 ZD4KCQkJPHRkPmhpc3Rvcnk8L3RkPgoJCTwvdHI+Cgk8L3RhYmxlPgoKCTxoNT5BZGRpdGlv bmFsIGZpZWxkczwvaDU+CgoJPHA+SWYgdGhlIDxjb2RlPkZvY2FsTGVuZ3RoSW4zNW1tRmls bTwvY29kZT4gZmllbGQgaXMgYXZhaWxhYmxlLCA8c3Ryb25nPnNvb19leGlmPC9zdHJvbmc+ IGNvbXB1dGVzIHR3byBhZGRpdGlvbmFsIHZhbHVlczo8L3A+CgoJPHRhYmxlPgoJCTx0cj4K CQkJPHRoPkNvbXB1dGVkIGZpZWxkIDwvdGg+CgkJCTx0aD5TaG9ydGN1dCA8L3RoPgoJCQk8 dGg+RGVzY3JpcHRpb248L3RoPgoJCTwvdHI+CgkJPHRyPgoJCQk8dGQ+PHNwYW4gY2xhc3M9 ImNhcHMiPjxzcGFuIGNsYXNzPSJjYXBzIj5GT1Y8L3NwYW4+PC9zcGFuPjwvdGQ+CgkJCTx0 ZD5mb3Y8L3RkPgoJCQk8dGQ+RmllbGQgb2YgdmlldyAoYXNzdW1lcyByZWN0aWxpbmVhciBs ZW5zKTwvdGQ+CgkJPC90cj4KCQk8dHI+CgkJCTx0ZD5Dcm9wRmFjdG9yPC90ZD4KCQkJPHRk PmNyb3A8L3RkPgoJCQk8dGQ+Q3JvcCBmYWN0b3I8L3RkPgoJCTwvdHI+Cgk8L3RhYmxlPgoK CTxoNT5EZWZhdWx0IGZpZWxkczwvaDU+CgoJPHA+SWYgbm8gPGNvZGU+ZmllbGQ8L2NvZGU+ IGlzIHNwZWNpZmllZCwgPGNvZGU+c29vX2V4aWY8L2NvZGU+IHdpbGwgc2hvdyB0aGUgYWxs IGZpZWxkcyBsaXN0ZWQgYWJvdmUuPC9wPgoKCTxoNT5zb29fZXhpZl9maWVsZCwgc29vX2V4 aWZfdmFsdWU8L2g1PgoKCTxwPldoZW4gcGxhY2VkIGluIGEgPGNvZGU+c29vX2V4aWY8L2Nv ZGU+IGNvbnRhaW5lciB0YWcsIHRoZXNlIHRhZ3MgZGlzcGxheSB0aGUgPHNwYW4gY2xhc3M9 ImNhcHMiPkVYSUY8L3NwYW4+IGZpZWxkIG5hbWUgYW5kIHZhbHVlLCByZXNwZWN0aXZlbHku IEVhY2ggaXMgYSBzaW5nbGUgdGFnIGFuZCBhY2NlcHRzIHRoZSBzdGFuZGFyZCA8Y29kZT53 cmFwdGFnPC9jb2RlPiBhdHRyaWJ1dGUuIEFzIHNob3duIGFib3ZlLCA8Y29kZT5zb29fZXhp ZjwvY29kZT4gY29udmVydHMgc29tZSBmaWVsZCBuYW1lcyB0byBhIG1vcmUgcmVhZGFibGUg Zm9ybWF0OyB0aGUgc2FtZSBpcyB0cnVlIGZvciBzb21lIGZpZWxkIHZhbHVlcy4gKFRoZSA8 Y29kZT5EYXRlVGltZU9yaWdpbmFsPC9jb2RlPiBmaWVsZCBpcyBjb252ZXJ0ZWQgdG8gdGhl IGRhdGUgZm9ybWF0IGZyb20geW91ciBUeHAgcHJlZmVyZW5jZXMuKTwvcD4KCgk8aDQgaWQ9 InBhZ2luYXRpb24iPlBhZ2luYXRpb24gdGFnczwvaDQ+CgoJPHVsPgoJCTxsaT48c3Ryb25n PnNvb19pbWFnZV9wcmV2PC9zdHJvbmc+PC9saT4KCQk8bGk+PHN0cm9uZz5zb29faW1hZ2Vf bmV4dDwvc3Ryb25nPjwvbGk+CgkJPGxpPjxzdHJvbmc+c29vX2ltYWdlX3BhZ2VfY291bnQ8 L3N0cm9uZz48L2xpPgoJPC91bD4KCgk8cD5Gb3IgdXNlIHdoZW4gPGNvZGU+c29vX2ltYWdl X3NlbGVjdDwvY29kZT4gaGFzIGEgPGNvZGU+bGltaXQ8L2NvZGU+LiBUaGUgZmlyc3QgdHdv IGNhbiBiZSB1c2VkIGFzIHNpbmdsZSB0YWdzIG9yIGNvbnRhaW5lcnMuIEFueSBvZiB0aGVz ZSBjYW4gYmUgcGxhY2VkIGFueXdoZXJlIG9uIHRoZSBwYWdlLCBldmVuIGJlZm9yZSB0aGUg YXNzb2NpYXRlZCA8Y29kZT5zb29faW1hZ2Vfc2VsZWN0PC9jb2RlPiB0YWcuIChOb3RlIHRo YXQgaWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSA8Y29kZT5zb29faW1hZ2Vfc2VsZWN0PC9j b2RlPiB0YWcgb24gdGhlIHBhZ2UsIHlvdSBzaG91bGQgdXNlIHRoZSA8Y29kZT5wYWdpbmF0 aW9uPC9jb2RlPiBhdHRyaWJ1dGUgdG8gZGlzYWJsZSBwYWdpbmF0aW9uIGluIGFsbCBidXQg b25lIG9mIHRoZSB0YWdzLik8L3A+Cgo8cHJlPiYjNjA7dHhwOnNvb19pbWFnZV9wcmV2IC8m IzYyOwomIzYwO3R4cDpzb29faW1hZ2VfbmV4dCYjNjI7TmV4dCYjNjA7L3R4cDpzb29faW1h Z2VfbmV4dCYjNjI7CiYjNjA7dHhwOnNvb19pbWFnZV9wYWdlX2NvdW50IC8mIzYyOwo8L3By ZT4KCgk8aDU+QXR0cmlidXRlczwvaDU+CgoJPHA+PGNvZGU+c29vX2ltYWdlX3ByZXY8L2Nv ZGU+IGFuZCA8Y29kZT5zb29faW1hZ2VfbmV4dDwvY29kZT4gZWFjaCBhY2NlcHQgdGhlIGZv bGxvd2luZyBvcHRpb25hbCBhdHRyaWJ1dGVzOgoJPHVsPgoJCTxsaT48Y29kZT5jbGFzczwv Y29kZT4gPGVtPih0ZXh0KTwvZW0+PGJyIC8+CjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3Jn L1RSL2h0bWw0MDEvc3RydWN0L2dsb2JhbC5odG1sI2FkZWYtY2xhc3MiIHRpdGxlPSJzIj48 c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gY2xhc3MgbmFtZTwvYT4gZm9yIHRoZSA8 Y29kZT5hPC9jb2RlPiB0YWcuPC9saT4KCQk8bGk+PGNvZGU+aHRtbF9pZDwvY29kZT4gPGVt Pih0ZXh0KTwvZW0+PGJyIC8+CjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0 MDEvc3RydWN0L2dsb2JhbC5odG1sI2FkZWYtaWQiPjxzcGFuIGNsYXNzPSJjYXBzIj5IVE1M PC9zcGFuPiBpZDwvYT4gZm9yIHRoZSA8Y29kZT5hPC9jb2RlPiB0YWcuPC9saT4KCQk8bGk+ PGNvZGU+bGlua190ZXh0PC9jb2RlPiA8ZW0+KHRleHQpPC9lbT48YnIgLz4KTGluayB0ZXh0 LiBEZWZhdWx0IGlzICYjODIyMDsmbGFycjsmIzgyMjE7IGZvciA8Y29kZT5zb29faW1hZ2Vf cHJldjwvY29kZT4gYW5kICYjODIyMDsmcmFycjsmIzgyMjE7IGZvciA8Y29kZT5zb29faW1h Z2VfbmV4dDwvY29kZT4uIEl0IGlzIG92ZXJyaWRlbiBieSB0aGUgdGFnIGNvbnRlbnRzIGlm IGl0IGlzIGEgY29udGFpbmVyIHRhZy48L2xpPgoJPC91bD48L3A+CgoJPHA+PGNvZGU+c29v X2ltYWdlX3BhZ2VfY291bnQ8L2NvZGU+IGFjY2VwdHMgdGhlIGZvbGxvd2luZyBvcHRpb25h bCBhdHRyaWJ1dGVzOjwvcD4KCgk8dWw+CgkJPGxpPjxjb2RlPmZvcm1hdDwvY29kZT4gPGVt Pihmb3JtYXQgc3RyaW5nKTwvZW0+IDxzcGFuIGNsYXNzPSJkZWZhdWx0Ij5kZWZhdWx0PC9z cGFuPiA8Y29kZT4gJiMzNDtQYWdlIHtjdXJyZW50fSBvZiB7dG90YWx9JiMzNDsgPC9jb2Rl PjxiciAvPgpUYWcgd2lsbCBvdXRwdXQgdGhpcyBzdHJpbmcgYWZ0ZXIgcmVwbGFjaW5nIDxj b2RlPntjdXJyZW50fTwvY29kZT4gYW5kIDxjb2RlPnt0b3RhbH08L2NvZGU+IHdpdGggcGFn ZSBudW1iZXJzPC9saT4KCQk8bGk+PGNvZGU+c2hvd2Fsd2F5czwvY29kZT4gPGVtPihib29s ZWFuKTwvZW0+IDxzcGFuIGNsYXNzPSJkZWZhdWx0Ij5kZWZhdWx0PC9zcGFuPiA8Y29kZT4w PC9jb2RlPjxiciAvPgpXaGV0aGVyIG9yIG5vdCB0byBzaG93IG91dHB1dCB3aGVuIHRoZSBs aXN0IGlzIGEgc2luZ2xlIHBhZ2U8L2xpPgoJPC91bD4KCgk8aDMgaWQ9ImNvbmRpdGlvbmFs X3RhZ3MiPkNvbmRpdGlvbmFsIHRhZ3M8L2gzPgoKCTxwPlN0YW5kYXJkIGNvbmRpdGlvbmFs IHRhZyBiZWhhdmlvciwgY29tcGF0aWJsZSB3aXRoIDxhIGhyZWY9Imh0dHA6Ly90ZXh0Ym9v ay50ZXh0cGF0dGVybi5uZXQvd2lraS9pbmRleC5waHA/dGl0bGU9VHhwOmVsc2VfLyI+PGNv ZGU+ZWxzZTwvY29kZT48L2E+LiBDYW4gYmUgdXNlZCBhbnl3aGVyZS4gVGhleSA8c3BhbiBj bGFzcz0icmVxdWlyZWQiPnJlcXVpcmU8L3NwYW4+IGltYWdlIGNvbnRleHQgb3IgZWxzZSB0 aGV5IHdpbGwgYWx3YXlzIGV2YWx1YXRlIHRvIDxjb2RlPmZhbHNlPC9jb2RlPiAob3IgZW1w dHkgaW4gdGhlIGNhc2Ugb2YgPGNvZGU+c29vX2lmX2ltYWdlX2NvdW50PC9jb2RlPiwgd2hp Y2ggdHJlYXRzIGNvbnRleHQgc29tZXdoYXQgZGlmZmVyZW50bHkpLjwvcD4KCgk8aDQgaWQ9 InNvb19pZl90eHBfaW1hZ2UiPnNvb19pZl90eHBfaW1hZ2U8L2g0PgoKPHByZT4mIzYwO3R4 cDpzb29faWZfdHhwX2ltYWdlJiM2MjsuLi4mIzYwO3R4cDplbHNlIC8mIzYyOy4uLiYjNjA7 L3R4cDpzb29faWZfdHhwX2ltYWdlJiM2MjsKPC9wcmU+CgoJPGg1PkF0dHJpYnV0ZXM8L2g1 PgoKCTxwPjxjb2RlPnNvb19pZl90eHBfaW1hZ2U8L2NvZGU+IGRvZXMgbm90IGFjY2VwdCBh bnkgYXR0cmlidXRlczsgaXQgc2ltcGx5IGNoZWNrcyB3aGV0aGVyIG9yIG5vdCB0aGUgaW1h Z2UgaXMgc3RvcmVkIGluIHRoZSBUeHAgaW1hZ2UgdGFibGUgKGFzIG9wcG9zZWQgdG8gYW4g YXJ0aWNsZSBpbWFnZSBkZWNsYXJlZCBieSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFu PikuPC9wPgoKCTxoNCBpZD0ic29vX2lmX2ltYWdlXyI+c29vX2lmX2ltYWdlXyogPGVtPigt YXV0aG9yLCAtY2F0ZWdvcnksIC10aHVtYm5haWwpPC9lbT48L2g0PgoKPHByZT4mIzYwO3R4 cDpzb29faWZfaW1hZ2VfYXV0aG9yJiM2MjsuLi4mIzYwO3R4cDplbHNlIC8mIzYyOy4uLiYj NjA7L3R4cDpzb29faWZfaW1hZ2VfYXV0aG9yJiM2MjsKJiM2MDt0eHA6c29vX2lmX2ltYWdl X2NhdGVnb3J5JiM2MjsuLi4mIzYwO3R4cDplbHNlIC8mIzYyOy4uLiYjNjA7L3R4cDpzb29f aWZfaW1hZ2VfY2F0ZWdvcnkmIzYyOwomIzYwO3R4cDpzb29faWZfaW1hZ2VfdGh1bWJuYWls JiM2MjsuLi4mIzYwO3R4cDplbHNlIC8mIzYyOy4uLiYjNjA7L3R4cDpzb29faWZfaW1hZ2Vf dGh1bWJuYWlsJiM2MjsKPC9wcmU+CgoJPGg1PkF0dHJpYnV0ZXM8L2g1PgoKCTxwPjxjb2Rl PnNvb19pZl9pbWFnZV90aHVtYm5haWw8L2NvZGU+IGRvZXMgbm90IGFjY2VwdCBhbnkgYXR0 cmlidXRlczsgaXQgc2ltcGx5IGNoZWNrcyB3aGV0aGVyIG9yIG5vdCB0aGUgaW1hZ2UgaGFz IGEgdGh1bWJuYWlsLjwvcD4KCgk8cD48Y29kZT5zb29faWZfaW1hZ2VfYXV0aG9yPC9jb2Rl PiBhbmQgPGNvZGU+c29vX2lmX2ltYWdlX2NhdGVnb3J5PC9jb2RlPiBlYWNoIGFjY2VwdCB0 aGUgZm9sbG93aW5nIGF0dHJpYnV0ZTo8L3A+CgoJPHVsPgoJCTxsaT48Y29kZT5uYW1lPC9j b2RlPiA8ZW0+KHRleHQpPC9lbT48YnIgLz4KQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgdmFs dWVzLiBDb25kaXRpb24gaXMgdHJ1ZSBpZiB0aGUgdmFsdWUgZnJvbSB0aGUgaW1hZ2UgaXMg aW4gdGhpcyBsaXN0LiA8c3BhbiBjbGFzcz0id2FybmluZyI+SW1wb3J0YW50Ojwvc3Bhbj4g Zm9yIDxjb2RlPnNvb19pZl9pbWFnZV9hdXRob3I8L2NvZGU+LCB1c2UgYXV0aG9yIGxvZ2lu IG5hbWVzLCBub3QgZnVsbCBuYW1lcy4gSWYgdW5zZXQgKHRoZSBkZWZhdWx0KSwgY29uZGl0 aW9uIGlzIHRydWUgaWYgdGhlIHZhbHVlIGZyb20gdGhlIGltYWdlIGlzIGVtcHR5IG9yIDAu PC9saT4KCTwvdWw+CgoJPGg0IGlkPSJzb29faWZfaW1hZ2VfY291bnQiPnNvb19pZl9pbWFn ZV9jb3VudDwvaDQ+Cgo8cHJlPiYjNjA7dHhwOnNvb19pZl9pbWFnZV9jb3VudCYjNjI7Li4u JiM2MDt0eHA6ZWxzZSAvJiM2MjsuLi4mIzYwOy90eHA6c29vX2lmX2ltYWdlX2NvdW50JiM2 MjsKPC9wcmU+CgoJPHA+Q291bnRzIHRoZSBpbWFnZXMgYXZhaWxhYmxlIGFuZCBhbGxvd3Mg Y29uZGl0aW9uYWwgY2hlY2tzIGFnYWluc3QgdGhhdCBudW1iZXIuIEl0IGNoZWNrcyB0aGUg Zm9sbG93aW5nIGNvbnRleHRzLCBpbiBvcmRlciBvZiBwcmlvcml0eTo8L3A+CgoJPHVsPgoJ CTxsaT5JbnNpZGUgYSA8Y29kZT5zb29faW1hZ2Vfc2VsZWN0PC9jb2RlPiB0YWcgb3IgZm9y bTwvbGk+CgkJPGxpPkluc2lkZSBhbiA8Y29kZT5hcnRpY2xlPC9jb2RlPiBvciA8Y29kZT5h cnRpY2xlX2N1c3RvbTwvY29kZT4gdGFnIG9yIGZvcm0gKGNoZWNrcyBhcnRpY2xlIGltYWdl cyk8L2xpPgoJCTxsaT5JbiBhbiBpbWFnZSBjYXRlZ29yeSBwYWdlIChUeHAgNC4zLjAgb3Ig bGF0ZXIpLjwvbGk+Cgk8L3VsPgoKCTxwPk91dHNpZGUgYW55IG9mIHRoZXNlIGNvbnRleHRz LCB0aGUgdGFnIGRvZXMgbm90IHJldHVybiBhbnkgb3V0cHV0LjwvcD4KCgk8aDU+QXR0cmli dXRlczwvaDU+CgoJPHVsPgoJCTxsaT48Y29kZT5leGFjdDwvY29kZT4gPGVtPihpbnRlZ2Vy KTwvZW0+IEV4YWN0IG51bWJlciBvZiBpbWFnZXMgdG8gY2hlY2sgZm9yPC9saT4KCQk8bGk+ PGNvZGU+bWluPC9jb2RlPiA8ZW0+KGludGVnZXIpPC9lbT4gTWluaW11bSBudW1iZXIgb2Yg aW1hZ2VzIHRvIGNoZWNrIGZvcjwvbGk+CgkJPGxpPjxjb2RlPm1heDwvY29kZT4gPGVtPihp bnRlZ2VyKTwvZW0+IE1heGltdW0gbnVtYmVyIG9mIGltYWdlcyB0byBjaGVjayBmb3I8L2xp PgoJPC91bD4KCgk8cD5BbGwgYXR0cmlidXRlcyBkZWZhdWx0IHRvIGVtcHR5OyB5b3UgbXVz dCBzZXQgb25lIG9yIHRoZSB0YWcgcmV0dXJucyBubyBvdXRwdXQuPC9wPgoKCTxoMiBpZD0i cmVxdWlyZW1lbnRzIj5SZXF1aXJlbWVudHMgJiMzODsgSW5zdGFsbGF0aW9uPC9oMj4KCgk8 cD5UaGlzIHBsdWdpbiA8c3BhbiBjbGFzcz0icmVxdWlyZWQiPnJlcXVpcmVzIDxzcGFuIGNs YXNzPSJjYXBzIj5QSFA8L3NwYW4+IDUgb3IgZ3JlYXRlciBhbmQgdGhlPC9zcGFuPiA8YSBo cmVmPSJodHRwOi8vaXBzZWRpeGl0Lm5ldC90eHAvMjEvc29vLXR4cC1vYmoiPnNvb190eHBf b2JqIGxpYnJhcnkgcGx1Z2luPC9hPi4gRm9yIGRldGFpbHMgc2VlIDxhIGhyZWY9Imh0dHA6 Ly9pcHNlZGl4aXQubmV0L3R4cC8yMC9pbnN0YWxsYXRpb24iPmh0dHA6Ly9pcHNlZGl4aXQu bmV0L3R4cC8yMC9pbnN0YWxsYXRpb248L2E+LjwvcD4KCgk8aDIgaWQ9InByZWZlcmVuY2Vz Ij5QcmVmZXJlbmNlczwvaDI+CgoJPHA+VGhpcyBwbHVnaW4gaXMgY29tcGF0aWJsZSB3aXRo IDxhIGhyZWY9Imh0dHA6Ly9pcHNlZGl4aXQubmV0L3R4cC85Mi9zb29fcGx1Z2luX3ByZWYi PnNvb19wbHVnaW5fcHJlZjwvYT4sIGFsbG93aW5nIHlvdSB0byBzZXQgZGVmYXVsdCB2YWx1 ZXMgZm9yIGltYWdlIGZvcm0sIGltYWdlIGxpc3QgZm9ybSwgd2hldGhlciBvciBub3QgaW1h Z2UgZGltZW5zaW9ucyBhcmUgaW5jbHVkZWQgaW4gPGNvZGU+aW1nPC9jb2RlPiB0YWcgb3V0 cHV0IGJ5IGRlZmF1bHQsIGFuZCB3aGV0aGVyIG9yIG5vdCB0byB1c2UgPGEgaHJlZj0iI2lt YWdlX2NvbnRleHQiPnBlcnNpc3RlbnQgY29udGV4dDwvYT4gZm9yIGlzb2xhdGVkIDxjb2Rl PnNvb19pbWFnZTwvY29kZT4gdGFncy48L3A+CgoJPGgyIGlkPSJleGFtcGxlcyI+RXhhbXBs ZXM8L2gyPgoKCTxwPlNlZSA8YSBocmVmPSJodHRwOi8vaXBzZWRpeGl0Lm5ldC90eHAvNTUv c29vX2ltYWdlLXVzZXItZ3VpZGUiPmh0dHA6Ly9pcHNlZGl4aXQubmV0L3R4cC81NS9zb29f aW1hZ2UtdXNlci1ndWlkZTwvYT4gdG8gc2VlIDxzdHJvbmc+c29vX2ltYWdlPC9zdHJvbmc+ IGluIGFjdGlvbi48L3A+CgoJPGgyIGlkPSJoaXN0b3J5Ij5WZXJzaW9uIEhpc3Rvcnk8L2gy PgoKCTxoMz4xLjAuYi45ICgyMDE3LzAyLzE0KTwvaDM+CgoJPHVsPgoJCTxsaT5UeHAgNC42 IGNvbXBhdGliaWxpdHkgdXBkYXRlPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImNhcHMiPlBI UDwvc3Bhbj4gNS4zKyBjb21wYXRpYmlsaXR5IHVwZGF0ZTwvbGk+Cgk8L3VsPgoKCTxoMz4x LjAuYi44ICgxMi8xOC8yMDEwKTwvaDM+CgoJPHVsPgoJCTxsaT48Y29kZT5zb29faW1hZ2Vf c2VsZWN0PC9jb2RlPiwgd2hlbiB1c2VkIHdpdGhvdXQgc2VsZWN0aW9uIGF0dHJpYnV0ZXMg KGlkLCBjYXRlZ29yeSwgZXRjLikgYW5kIG91dHNpZGUgYXJ0aWNsZSBjb250ZXh0IHdpbGwg bm93IGNoZWNrIGZvciBpbWFnZSBjYXRlZ29yeSBjb250ZXh0IChyZXF1aXJlcyBUeHAgNC4z LjApLjwvbGk+CgkJPGxpPk5ldyBjb25kaXRpb25hbCB0YWcsIDxjb2RlPnNvb19pZl9pbWFn ZV9jb3VudDwvY29kZT4uPC9saT4KCTwvdWw+CgoJPGgzPjEuMC5iLjcgKDcvNC8yMDEwLCA8 c3BhbiBjbGFzcz0iY2FwcyI+VVNBPC9zcGFuPiBJbmRlcGVuZGVuY2UgRGF5KTwvaDM+CgoJ PHVsPgoJCTxsaT5UaHVtYm5haWwgPGNvZGU+aGVpZ2h0PC9jb2RlPiBhbmQgPGNvZGU+d2lk dGg8L2NvZGU+IGF0dHJpYnV0ZXMgKFR4cCA0LjIuMCBvciBsYXRlcikgYWRkZWQgYXV0b21h dGljYWxseSwgYWNjb3JkaW5nIHRvIDxjb2RlPmRlZmF1bHRfZGltZW5zaW9uczwvY29kZT4g cHJlZmVyZW5jZSAocmVxdWlyZXMgc29vX3R4cF9vYmogdiAxLjAuYi43KS48L2xpPgoJCTxs aT5IZWxwIHRleHQgdXBkYXRlcy48L2xpPgoJPC91bD4KCgk8aDM+MS4wLmIuNiAoNi8yOS8y MDEwKTwvaDM+CgoJPHVsPgoJCTxsaT5OZXcgYmVoYXZpb3IgZm9yIDxjb2RlPnNvb19pbWFn ZTwvY29kZT46IHdoZW4gdXNlZCBvdXRzaWRlIDxjb2RlPnNvb19pbWFnZV9zZWxlY3Q8L2Nv ZGU+LCBhbmQgd2l0aG91dCA8Y29kZT5pZDwvY29kZT4gb3IgPGNvZGU+bmFtZTwvY29kZT4s IGFydGljbGUgaW1hZ2Ugbm93IHRha2VzIHByaW9yaXR5IG92ZXIgYW55IGltYWdlcyBmcm9t IDxjb2RlPnNvb19pbWFnZV9zZWxlY3Q8L2NvZGU+IHRhZ3MgZWFybGllciBvbiB0aGUgcGFn ZSAoaS5lLiwgcGVyc2lzdGVudCBjb250ZXh0KS4gVGhpcyBnaXZlcyBtb3JlIHByZWRpY3Rh YmxlIGJlaGF2aW9yIGluIGFuIGFydGljbGUgbGlzdC4gKFRoYW5rcyB0byBBZGkgZm9yIHNw b3R0aW5nIHRoaXMuKTwvbGk+CgkJPGxpPk5ldyBwcmVmZXJlbmNlIHNldHRpbmcgdG8gZW5h YmxlL2Rpc2FibGUgcGVyc2lzdGVudCBjb250ZXh0LjwvbGk+CgkJPGxpPkNvZGUgY2xlYW5p bmcgKHNvb190eHBfb2JqIDEuMC5iLjYgbm93IHJlcXVpcmVkKS48L2xpPgoJPC91bD4KCgk8 aDM+MS4wLmIuNSAoNi8yMS8yMDEwKTwvaDM+CgoJPHVsPgoJCTxsaT5GaXhlZCBidWcgaW4g PGNvZGU+c29vX2ltYWdlPC9jb2RlPiB3aGVyZSA8Y29kZT53aWR0aD0mIzM0OzAmIzM0Ozwv Y29kZT4gd2FzIG5vdCBzdXBwcmVzc2luZyBkaW1lbnNpb24gYXR0cmlidXRlcyBhcyBleHBl Y3RlZDwvbGk+CgkJPGxpPkFkZGVkIDxjb2RlPndyYXB0YWc8L2NvZGU+LCA8Y29kZT5jbGFz czwvY29kZT4sIGFuZCA8Y29kZT5odG1sX2lkPC9jb2RlPiBhdHRyaWJ1dGVzIHRvIHZhcmlv dXMgdGFncyAocmVxdWVzdGVkIGJ5IEFkaSk8L2xpPgoJPC91bD4KCgk8aDM+MS4wLmIuNCAo NC85LzIwMTApPC9oMz4KCgk8dWw+CgkJPGxpPk5ldyB0YWc6IDxjb2RlPnNvb19pbWFnZV9p ZDwvY29kZT4gKG91dHB1dCBpbWFnZSBJRCk8L2xpPgoJPC91bD4KCgk8aDM+MS4wLmIuMyAo My8yOS8yMDEwKTwvaDM+CgoJPHVsPgoJCTxsaT5GaXhlZCBkZWZhdWx0IHRleHQgZm9yIDxj b2RlPnNvb19pbWFnZV9wcmV2PC9jb2RlPjwvbGk+CgkJPGxpPkFkZGVkIDxjb2RlPnBhZ2lu YXRpb248L2NvZGU+IGF0dHJpYnV0ZSB0byA8Y29kZT5zb29faW1hZ2Vfc2VsZWN0PC9jb2Rl PiwgZm9yIGJldHRlciBwYWdpbmF0aW9uIGNvbnRyb2wgd2hlbiB0aGVyZSBhcmUgbXVsdGlw bGUgPGNvZGU+c29vX2ltYWdlX3NlbGVjdDwvY29kZT4gdGFncyBvbiBhIHBhZ2U8L2xpPgoJ PC91bD4KCgk8aDM+MS4wLmIuMiAoOS8xOC8yMDA5KTwvaDM+CgoJPHVsPgoJCTxsaT5GaXhl ZCBidWcgaW4gPGNvZGU+c29vX2ltYWdlX2RhdGU8L2NvZGU+ICh3YXMgZGlzcGxheWluZyBp bmNvcnJlY3QgZGF0ZSBvciB0aW1lIHpvbmUgaW4gc29tZSBjYXNlcyk8L2xpPgoJCTxsaT5O ZXcgdGFnczoKCTx1bD4KCQk8bGk+PGNvZGU+c29vX3RodW1ibmFpbF91cmw8L2NvZGU+PC9s aT4KCQk8bGk+PGNvZGU+c29vX3RodW1ibmFpbF9oZWlnaHQ8L2NvZGU+IChUeHAgNC4yLjAg b3IgaGlnaGVyKTwvbGk+CgkJPGxpPjxjb2RlPnNvb190aHVtYm5haWxfd2lkdGg8L2NvZGU+ IChUeHAgNC4yLjAgb3IgaGlnaGVyKTwvbGk+CgkJPGxpPjxjb2RlPnNvb19pbWFnZV9wYWdl X2NvdW50PC9jb2RlPjwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPkNoYW5nZWQgYmVoYXZpb3I6 IG5vdyB1c2VzIChvcHRpb25hbGx5KSBzb29fcGx1Z2luX3ByZWYuIFRoZSBvbGQgc29vX3Bs dWdpbl9wcmVmcyBpcyBubyBsb25nZXIgc3VwcG9ydGVkLjwvbGk+Cgk8L3VsPgoKCTxoMz4x LjAuYi4xICg3LzUvMjAwOSk8L2gzPgoKCTx1bD4KCQk8bGk+TmV3IDxjb2RlPmxpbmtfdG88 L2NvZGU+IGF0dHJpYnV0ZSBmb3IgPGNvZGU+c29vX2ltYWdlPC9jb2RlPjwvbGk+CgkJPGxp Pjxjb2RlPnNvb19pbWFnZV9uZXh0PC9jb2RlPiBjYW4gbm93IGJlIHVzZWQgYmVmb3JlIGl0 cyBhc3NvY2lhdGVkIDxjb2RlPnNvb19pbWFnZV9zZWxlY3Q8L2NvZGU+IHRhZzwvbGk+CgkJ PGxpPlVuZGVybHlpbmcgc29vX3R4cF9vYmogbGlicmFyeSBoYXMgYmVlbiBsYXJnZWx5IHJl d3JpdHRlbjwvbGk+CgkJPGxpPmRvd25zaGlmdCB0byB2Mi4wIG9mIHRoZSA8c3BhbiBjbGFz cz0iY2FwcyI+R1BMPC9zcGFuPjwvbGk+Cgk8L3VsPgoKCTxoMz4xLjAuYS41ICg1LzE4LzIw MDkpIChub3QgcmVsZWFzZWQgcHVibGljbHkpPC9oMz4KCgk8dWw+CgkJPGxpPkNoYW5nZXMg dG8gdGhlIDxjb2RlPnNvb19pbWFnZTwvY29kZT4gdGFnOgoJPHVsPgoJCTxsaT5OZXcgYXR0 cmlidXRlczogPGNvZGU+dGl0bGU8L2NvZGU+LCA8Y29kZT5saW5rX2NsYXNzPC9jb2RlPiwg PGNvZGU+bGlua19pZDwvY29kZT48L2xpPgoJCTxsaT5OZXcgYmVoYXZpb3I6IFNldHRpbmcg YW55IGxpbmstcmVsYXRlZCBhdHRyaWJ1dGUgc2V0cyA8Y29kZT50aHVtYm5haWw8L2NvZGU+ IGFuZCA8Y29kZT5saW5rPC9jb2RlPiB0byB0cnVlPC9saT4KCTwvdWw+PC9saT4KCTwvdWw+ CgoJPGgzPjEuMC5hLjQgKDUvMTcvMjAwOSk8L2gzPgoKCTx1bD4KCQk8bGk+QWRkZWQgPGNv ZGU+c29vX2V4aWY8L2NvZGU+IGFuZCByZWxhdGVkIHRhZ3MgZm9yIHJlYWRpbmcgYW5kIGRp c3BsYXlpbmcgPHNwYW4gY2xhc3M9ImNhcHMiPkVYSUY8L3NwYW4+IG1ldGFkYXRhPC9saT4K CQk8bGk+Q2FuIG5vdyBlbnRlciByYW5nZXMgb2YgaWRzIChlLmcuLCAmIzgyMjA7NDQtNDgs IDEyLTkmIzgyMjE7KSBmb3IgYXJ0aWNsZSBpbWFnZSBvciA8Y29kZT5zb29faW1hZ2Vfc2Vs ZWN0PC9jb2RlPiBpZDwvbGk+CgkJPGxpPkZpeGVkIGJ1ZyBpbiBhc3BlY3QgcmF0aW8gdXNp bmcgcmF0aW8gc3ludGF4IChlLmcuLCAmIzgyMjA7NDozJiM4MjIxOyBvciAmIzgyMjA7NC8z JiM4MjIxOyk8L2xpPgoJPC91bD4KCgk8aDM+MS4wLmEuMyAoNS8xNC8yMDA5KTwvaDM+CgoJ PHA+PGNvZGU+c29vX2ltYWdlX3NlbGVjdDwvY29kZT4gY2FuIG5vdyBiZSB1c2VkIGFzIGEg c2luZ2xlIG9yIGNvbnRhaW5lciB0YWc8L3A+CgoJPGgzPjEuMC5hLjIgKDUvMTMvMjAwOSk8 L2gzPgoKCTx1bD4KCQk8bGk+QWRkZWQgPGNvZGU+c29vX2ltYWdlX3VybDwvY29kZT4gdGFn PC9saT4KCQk8bGk+Rml4ZWQgaW5jb3JyZWN0IDxzcGFuIGNsYXNzPSJjYXBzIj5PUkRFUjwv c3Bhbj4gQlkgPHNwYW4gY2xhc3M9ImNhcHMiPkZJRUxEPC9zcGFuPiBzeW50YXg8L2xpPgoJ CTxsaT5VcGdyYWRlZCA8c3Ryb25nPnNvb190eHBfb2JqPC9zdHJvbmc+IHRvIGRlYWwgd2l0 aCBhIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+IDUuMi4wICYjODIxMTsgNS4yLjMg YnVnPC9saT4KCTwvdWw+CgoJPGgzPjEuMC5hLjEgKDUvMi8yMDA5KTwvaDM+CgoJPHA+SW5p dGlhbCByZWxlYXNlPC9wPgoKIDwvZGl2PiI7czo0OiJjb2RlIjtzOjIyNzA5OiIKaWYoY2xh c3NfZXhpc3RzKCdcVGV4dHBhdHRlcm5cVGFnXFJlZ2lzdHJ5JykpIHsKCVR4cDo6Z2V0KCdc VGV4dHBhdHRlcm5cVGFnXFJlZ2lzdHJ5JykKCQktPnJlZ2lzdGVyKCdzb29faW1hZ2Vfc2Vs ZWN0JykKCQktPnJlZ2lzdGVyKCdzb29faW1hZ2UnKQoJCS0+cmVnaXN0ZXIoJ3Nvb19pbWFn ZV9hbHQnKQoJCS0+cmVnaXN0ZXIoJ3Nvb19pbWFnZV9hdXRob3InKQoJCS0+cmVnaXN0ZXIo J3Nvb19pbWFnZV9jYXB0aW9uJykKCQktPnJlZ2lzdGVyKCdzb29faW1hZ2VfY2F0ZWdvcnkn KQoJCS0+cmVnaXN0ZXIoJ3Nvb19pbWFnZV9kYXRlJykKCQktPnJlZ2lzdGVyKCdzb29faW1h Z2VfaGVpZ2h0JykKCQktPnJlZ2lzdGVyKCdzb29faW1hZ2VfaWQnKQoJCS0+cmVnaXN0ZXIo J3Nvb19pbWFnZV9uYW1lJykKCQktPnJlZ2lzdGVyKCdzb29faW1hZ2VfdXJsJykKCQktPnJl Z2lzdGVyKCdzb29faW1hZ2Vfd2lkdGgnKQoJCS0+cmVnaXN0ZXIoJ3Nvb19pbWFnZV90aHVt Ym5haWxfaGVpZ2h0JykKCQktPnJlZ2lzdGVyKCdzb29faW1hZ2VfdGh1bWJuYWlsX3VybCcp CgkJLT5yZWdpc3Rlcignc29vX2ltYWdlX3RodW1ibmFpbF93aWR0aCcpCgkJLT5yZWdpc3Rl cignc29vX2lmX3R4cF9pbWFnZScpCgkJLT5yZWdpc3Rlcignc29vX2lmX2ltYWdlX2F1dGhv cicpCgkJLT5yZWdpc3Rlcignc29vX2lmX2ltYWdlX2NhdGVnb3J5JykKCQktPnJlZ2lzdGVy KCdzb29faWZfaW1hZ2VfdGh1bWJuYWlsJykKCQktPnJlZ2lzdGVyKCdzb29faWZfaW1hZ2Vf Y291bnQnKQoJCS0+cmVnaXN0ZXIoJ3Nvb19pbWFnZV9uZXh0JykKCQktPnJlZ2lzdGVyKCdz b29faW1hZ2VfcHJldicpCgkJLT5yZWdpc3Rlcignc29vX2ltYWdlX3BhZ2VfY291bnQnKQoJ CS0+cmVnaXN0ZXIoJ3Nvb19leGlmJykKCQktPnJlZ2lzdGVyKCdzb29fZXhpZl9maWVsZCcp CgkJLT5yZWdpc3Rlcignc29vX2V4aWZfdmFsdWUnKQoJCTsKfQoKcmVxdWlyZV9wbHVnaW4o J3Nvb190eHBfb2JqJyk7CkByZXF1aXJlX3BsdWdpbignc29vX3BsdWdpbl9wcmVmJyk7CQkv LyBvcHRpb25hbAoKLy8gUGx1Z2luIGluaXQgbm90IG5lZWRlZCBvbiBhZG1pbiBzaWRlCmlm ICggQHR4cGludGVyZmFjZSA9PSAncHVibGljJyApCnsKCWdsb2JhbCAkc29vX2ltYWdlOwoJ JHNvb19pbWFnZSA9IGZ1bmN0aW9uX2V4aXN0cygnc29vX3BsdWdpbl9wcmVmX3ZhbHMnKSA/ CgkJYXJyYXlfbWVyZ2Uoc29vX2ltYWdlX2RlZmF1bHRzKHRydWUpLCBzb29fcGx1Z2luX3By ZWZfdmFscygnc29vX2ltYWdlJykpCgkJOiBzb29faW1hZ2VfZGVmYXVsdHModHJ1ZSk7Cgkk c29vX2ltYWdlWydwYWdlX3BhcmFtJ10gPSAnc29vX2ltZ19wZyc7Cgkkc29vX2ltYWdlWydq dW1wX3BhcmFtJ10gPSAnc29vX2ltZ19qcCc7Cn0KZWxzZWlmICggQHR4cGludGVyZmFjZSA9 PSAnYWRtaW4nICkKewoJYWRkX3ByaXZzKCdwbHVnaW5fcHJlZnMuc29vX2ltYWdlJywnMSwy Jyk7CglhZGRfcHJpdnMoJ3BsdWdpbl9saWZlY3ljbGUuc29vX2ltYWdlJywnMSwyJyk7Cgly ZWdpc3Rlcl9jYWxsYmFjaygnc29vX2ltYWdlX3ByZWZzJywgJ3BsdWdpbl9wcmVmcy5zb29f aW1hZ2UnKTsKCXJlZ2lzdGVyX2NhbGxiYWNrKCdzb29faW1hZ2VfcHJlZnMnLCAncGx1Z2lu X2xpZmVjeWNsZS5zb29faW1hZ2UnKTsKfQoKZnVuY3Rpb24gc29vX2ltYWdlX3ByZWZzKCAk ZXZlbnQsICRzdGVwICkgewoJaWYgKCBmdW5jdGlvbl9leGlzdHMoJ3Nvb19wbHVnaW5fcHJl ZicpICkKCQlyZXR1cm4gc29vX3BsdWdpbl9wcmVmKCRldmVudCwgJHN0ZXAsIHNvb19pbWFn ZV9kZWZhdWx0cygpKTsKCWlmICggc3Vic3RyKCRldmVudCwgMCwgMTIpID09ICdwbHVnaW5f cHJlZnMnICkgewoJCSRwbHVnaW4gPSBzdWJzdHIoJGV2ZW50LCAxMik7CgkJJG1lc3NhZ2Ug PSAnPHA+PGJyIC8+PHN0cm9uZz4nIC4gZ1R4dCgnZWRpdCcpIC4gIiAkcGx1Z2luICIgLgoJ CQlnVHh0KCdlZGl0X3ByZWZlcmVuY2VzJykgLiAnOjwvc3Ryb25nPjxiciAvPicgLiBnVHh0 KCdpbnN0YWxsX3BsdWdpbicpCgkJCS4gJyA8YSBocmVmPSJodHRwOi8vaXBzZWRpeGl0Lm5l dC90eHAvOTIvc29vX3BsdWdpbl9wcmVmIj5zb29fcGx1Z2luX3ByZWY8L2E+PC9wPic7CgkJ cGFnZXRvcChnVHh0KCdlZGl0X3ByZWZlcmVuY2VzJykgLiAiICYjODI1MDsgJHBsdWdpbiIs ICRtZXNzYWdlKTsKCX0KfQoKZnVuY3Rpb24gc29vX2ltYWdlX2RlZmF1bHRzKCAkdmFsc19v bmx5ID0gZmFsc2UgKSB7CgkkZGVmYXVsdHMgPSBhcnJheSgKCQknZGVmYXVsdF9mb3JtJwkJ CT0+CWFycmF5KAoJCQkndmFsJwk9Pgknc29vX2ltYWdlJywKCQkJJ2h0bWwnCT0+CSd0ZXh0 X2lucHV0JywKCQkJJ3RleHQnCT0+CSdEZWZhdWx0IGltYWdlIGZvcm0nLAoJCSksCgkJJ2Rl ZmF1bHRfbGlzdGZvcm0nCQk9PglhcnJheSgKCQkJJ3ZhbCcJPT4JJycsCgkJCSdodG1sJwk9 PgkndGV4dF9pbnB1dCcsCgkJCSd0ZXh0Jwk9PgknRGVmYXVsdCBpbWFnZSBsaXN0IGZvcm0n LAoJCSksCgkJJ2RlZmF1bHRfZGltZW5zaW9ucycJPT4JYXJyYXkoCgkJCSd2YWwnCT0+CTEs CgkJCSdodG1sJwk9PgkneWVzbm9yYWRpbycsCgkJCSd0ZXh0Jwk9PgknQWRkIGhlaWdodCBh bmQgd2lkdGggaW4gcGl4ZWxzIHRvIGltZyB0YWcgYnkgZGVmYXVsdD8nLAoJCSksCgkJJ3Bl cnNpc3RlbnRfY29udGV4dCcJPT4JYXJyYXkoCgkJCSd2YWwnCT0+CTEsCgkJCSdodG1sJwk9 PgkneWVzbm9yYWRpbycsCgkJCSd0ZXh0Jwk9PgknVXNlIHBlcnNpc3RlbnQgY29udGV4dCBm b3IgdGFncyBvdXRzaWRlIGFuIGltYWdlIGZvcm0/JywKCQkpLAoJKTsKCWlmICggJHZhbHNf b25seSApCgkJZm9yZWFjaCAoICRkZWZhdWx0cyBhcyAkbmFtZSA9PiAkYXJyICkKCQkJJGRl ZmF1bHRzWyRuYW1lXSA9ICRhcnJbJ3ZhbCddOwoJcmV0dXJuICRkZWZhdWx0czsKfQoKICAv Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS8vCiAvLwkJCQkJCQkJCVRhZ3MJCQkJCQkJCS8vCi8vLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLy8KCmZ1bmN0aW9uIHNvb19pbWFnZV9zZWxlY3QoICRhdHRzLCAkdGhpbmcg PSBudWxsICkgewoKLy8gQ29udHJvbGxlciBmb3IgdGhlIHNvb19pbWFnZSBwbHVnaW4uCi8v Ci8vIERldGVybWluZSB3aGF0IGltYWdlcyB0aGUgdXNlciBpcyByZXF1ZXN0aW5nLCBmZXRj aCBpbWFnZSBkYXRhIG9iamVjdHMKLy8gKG9yIHJhdyBVUkxzLCBhcyBhcHByb3ByaWF0ZSkg Zm9yIHRob3NlIGltYWdlcywgYW5kIHBhc3MgdGhpcyBhbG9uZwovLyB0byBhbiBpbWFnZSBm b3JtIChpLmUuLCBhIGZvcm0gY2FsbGVkIGJ5IHRoaXMgdGFnLCBjb250YWluaW5nIG9uZSBv cgovLyBtb3JlIG9mIHNvb19pbWFnZSdzIG91dHB1dCB0YWdzKSBmb3IgZGlzcGxheS4KCgln bG9iYWwgJHNvb19pbWFnZSwgJHRoaXNhcnRpY2xlLCAkY29udGV4dCwgJGM7CgoJZXh0cmFj dChsQXR0cyhhcnJheSgKCQknYXNwZWN0X3JhdGlvJwk9PgknJywKCQknYXV0aG9yJwkJPT4J JycsCgkJJ2JyZWFrJwkJCT0+CScnLAoJCSdjYXRlZ29yeScJCT0+CScnLAoJCSdjbGFzcycJ CQk9PgknJywKCQknZXh0JwkJCT0+CScnLAoJCSdmb3JtJwkJCT0+CSRzb29faW1hZ2VbJ2Rl ZmF1bHRfZm9ybSddLAkJLy8gcmVxdWlyZWQKCQknaHRtbF9pZCcJCT0+CScnLAoJCSdpZCcJ CQk9PgknJywKCQknbGltaXQnCQkJPT4JMCwKCQknbGlzdGZvcm0nCQk9Pgkkc29vX2ltYWdl WydkZWZhdWx0X2xpc3Rmb3JtJ10sCgkJJ25hbWUnCQkJPT4JJycsCgkJJ3BhZ2luYXRpb24n CT0+CXRydWUsCgkJJ3BlcnNpc3RlbnRfY29udGV4dCcJPT4gJHNvb19pbWFnZVsncGVyc2lz dGVudF9jb250ZXh0J10sCgkJJ3NvcnQnCQkJPT4JJ25hbWUgYXNjJywJCS8vIGFjY2VwdHMg bGlzdHMsIGUuZy4gImEgYXNjLGIsYyBkZXNjIgoJCSd3cmFwdGFnJwkJPT4JJycsCgkpLCAk YXR0cykpOwoKCSRwYWdlID0gaW50dmFsKGdwcygkc29vX2ltYWdlWydwYWdlX3BhcmFtJ10p KTsKCWlmICggJHBhZ2UgPCAxICkgJHBhZ2UgPSAxOwoJJG9mZnNldCA9ICRwYWdpbmF0aW9u ID8gKCRwYWdlIC0gMSkgKiAkbGltaXQgOiAwOwoKCSRqdW1wX3RvID0gaW50dmFsKGdwcygk c29vX2ltYWdlWydqdW1wX3BhcmFtJ10pKTsKCgkkcXVlcnkgPSBuZXcgc29vX3R4cF9zZWxl Y3QoJ3R4cF9pbWFnZScpOwoKLy8gU2VsZWN0aW9uIHByaW9yaXR5OiBuYW1lOyBpZDsgKGNh dGVnb3J5fGF1dGhvcnxleHR8YXNwZWN0X3JhdGlvKTsgYXJ0aWNsZSBpbWFnZS4KLy8gQ29t bWEtc2VwYXJhdGVkIGxpc3RzIGFsbG93ZWQgZm9yIGFsbCBjcml0ZXJpYTsgcHJlc2VydmUg bGlzdCBvcmRlciBmb3IgbmFtZXxpZC4KCglpZiAoICRuYW1lIG9yICRpZCApIHsKCQkkc29y dCA9ICcnOwoJCWlmICggJG5hbWUgKQoJCQkkcXVlcnktPmluKCduYW1lJywgJG5hbWUpLT5v cmRlcl9ieV9maWVsZCgnbmFtZScsICRuYW1lKTsKCQllbHNlCgkJCSRpZHMgPSBfc29vX3Jh bmdlX3RvX2xpc3QoJGlkKTsKCX0KCgllbHNlaWYgKCAkY2F0ZWdvcnkgb3IgJGF1dGhvciBv ciAkZXh0IG9yICRhc3BlY3RfcmF0aW8gKSB7CgkJaWYgKCAkY2F0ZWdvcnkgKSAkcXVlcnkt PmluKCdjYXRlZ29yeScsICRjYXRlZ29yeSk7CgkJaWYgKCAkYXV0aG9yICkgJHF1ZXJ5LT5p bignYXV0aG9yJywgJGF1dGhvcik7CgkJaWYgKCAkZXh0ICkgewoJCQlpZiAoICRleHQgPSBf c29vX3ZhbGlkX2V4dCgkZXh0KSApCgkJCQkkcXVlcnktPmluKCdleHQnLCAkZXh0KTsKCQkJ ZWxzZQoJCQkJcmV0dXJuOwoJCX0KCQlpZiAoICRhc3BlY3RfcmF0aW8gKSBfc29vX2ltYWdl X2FzcGVjdF9yYXRpbygkcXVlcnksIHRyaW0oJGFzcGVjdF9yYXRpbykpOwoJfQoKCWVsc2Vp ZiAoICEgZW1wdHkoJHRoaXNhcnRpY2xlKSApIHsKCQkkaW1hZ2VfYXJyYXkgPSBfc29vX2Fy dGljbGVfaW1hZ2VfbGlzdCgpOwoJCWlmICggISAkaW1hZ2VfYXJyYXkgKQoJCQlyZXR1cm4g ZmFsc2U7CgkJZm9yZWFjaCAoICRpbWFnZV9hcnJheSBhcyAkaW1nICkgewoJCQlpZiAoIGlz X251bWVyaWMoJGltZykgKQoJCQkJJGlkc1tdID0gJGltZzsKCQkJZWxzZQoJCQkJJHVybHNb XSA9ICRpbWc7CgkJfQoJfQoKCWVsc2VpZiAoICRjb250ZXh0ID09IGdUeHQoJ2ltYWdlX2Nv bnRleHQnKSBhbmQgJGMgKSB7CgkJJHF1ZXJ5LT5pbignY2F0ZWdvcnknLCAkYyk7Cgl9CgoJ ZWxzZSByZXR1cm47CgoJaWYgKCBpc3NldCgkaWRzKSApIHsKCQkkc29ydCA9ICcnOwoJCSRx dWVyeS0+aW4oJ2lkJywgJGlkcyktPm9yZGVyX2J5X2ZpZWxkKCdpZCcsICRpZHMpOwoJfQoK CSRmdWxsX2NvdW50ID0gJHF1ZXJ5LT5jb3VudCgpOwoJaWYgKCAkcGFnaW5hdGlvbiAmJiAk ZnVsbF9jb3VudCA8PSAkb2Zmc2V0ICkgewkJLy8gaW4gY2FzZSBvZiBkaXJlY3QgVVJJIG1h bmlwdWxhdGlvbiBhbmQgaW52YWxpZCAjCgkJJHBhZ2UgPSAkbGltaXQgPyBjZWlsKCRmdWxs X2NvdW50IC8gJGxpbWl0KSA6IDE7CS8vIGdvIHRvIGxhc3QgcGFnZQoJCSRvZmZzZXQgPSAo JHBhZ2UgLSAxKSAqICRsaW1pdDsKCX0KCgkkc29vX2ltYWdlWyd0aGlzX3BhZ2UnXSA9ICRw YWdlOwoJaWYgKCAkcGFnaW5hdGlvbiApICRzb29faW1hZ2VbJ3RvdGFsX3BhZ2VzJ10gPSAk bGltaXQgPyBjZWlsKCRmdWxsX2NvdW50IC8gJGxpbWl0KSA6IDE7CgoJaWYgKCAkanVtcF90 byBhbmQgaXNfbnVtZXJpYygkanVtcF90bykgKSB7CgkJJHVyaSA9IG5ldyBzb29fdXJpOwoJ CSR1cmktPnNldF9xdWVyeV9wYXJhbSgkc29vX2ltYWdlWydqdW1wX3BhcmFtJ10pOwoJCSRh bGxfaWRzID0gbmV3IHNvb190eHBfcm93c2V0KCRxdWVyeS0+b3JkZXJfYnkoJHNvcnQpKTsK CQkkYWxsX2lkcyA9IGFycmF5X2ZsaXAoJGFsbF9pZHMtPmZpZWxkX3ZhbHMoJ2lkJykpOwoJ CWlmICggaXNzZXQoJGFsbF9pZHNbJGp1bXBfdG9dKSApIHsKCQkJJGp1bXBfaW5kZXggPSAk YWxsX2lkc1skanVtcF90b107CgkJCWlmICggJGxpbWl0ICkgewoJCQkJJHBhZ2UgPSBjZWls KCgkanVtcF9pbmRleCArIDEpIC8gJGxpbWl0KTsKCQkJCSRvZmZzZXQgPSAoJHBhZ2UgLSAx KSAqICRsaW1pdDsKCQkJCSRfUE9TVFskc29vX2ltYWdlWydwYWdlX3BhcmFtJ11dID0gJHBh Z2U7CgkJCX0KCQl9Cgl9CgoJJHF1ZXJ5LT5vcmRlcl9ieSgkc29ydCktPmxpbWl0KCRsaW1p dCktPm9mZnNldCgkb2Zmc2V0KTsKCSRycyA9IG5ldyBzb29fdHhwX3Jvd3NldCgkcXVlcnkp OwoJdW5zZXQoJHF1ZXJ5KTsKCglpZiAoIGlzc2V0KCR1cmxzKSApCgkJZm9yZWFjaCAoICRp bWFnZV9hcnJheSBhcyAkaSA9PiAkaW1nICkgewoJCQlpZiAoIGlzc2V0KCRycy0+cm93c1sk aW1nXSkgKQoJCQkJJGltYWdlX2FycmF5WyRpXSA9ICRycy0+cm93c1skaW1nXTsKCQkJZWxz ZWlmICggISBpbl9hcnJheSgkaW1nLCAkdXJscykgKQoJCQkJdW5zZXQoJGltYWdlX2FycmF5 WyRpXSk7CgkJfQoJZWxzZQoJCSRpbWFnZV9hcnJheSA9ICRycy0+cm93czsKCglpZiAoIGVt cHR5KCRpbWFnZV9hcnJheSkgKQoJCXJldHVybiBmYWxzZTsKCgkkc29vX2ltYWdlWydjb3Vu dCddID0gY291bnQoJGltYWdlX2FycmF5KTsKCglpZiAoICRwYWdpbmF0aW9uICYmICRsaW1p dCAmJiAoICRvZmZzZXQgKyAkbGltaXQgPCAkZnVsbF9jb3VudCApICkKCQkkc29vX2ltYWdl WyduZXh0J10gPSAkcGFnZSArIDE7CgoJLy8gJGltYWdlX2FycmF5IG5vdyBjb250YWlucyBk YXRhIG9iamVjdHMgYW5kL29yIHByZXN1bWVkIFVSTHMKCglpZiAoICggJHNvb19pbWFnZVsn Y291bnQnXSA+IDEgb3IgJHBhZ2UgPiAxKSBhbmQgJGxpc3Rmb3JtICkKCQkkZm9ybSA9ICRs aXN0Zm9ybTsKCgkkc29vX2ltYWdlWydmaXJzdF9zZWxlY3Rpb24nXSA9IGlzc2V0KCRqdW1w X2luZGV4KSA/IG5ldyBzb29fdHhwX2ltZygkanVtcF90bykgOiBjdXJyZW50KCRpbWFnZV9h cnJheSk7CgoJZm9yZWFjaCAoICRpbWFnZV9hcnJheSBhcyAkaW1nICkgewoJCWlmICggJGlt ZyBpbnN0YW5jZW9mIHNvb190eHBfaW1nICkKCQkJJHNvb19pbWFnZVsnZGF0YV9vYmonXSA9 ICRpbWc7CgkJZWxzZQoJCQkkc29vX2ltYWdlWyd1cmwnXSA9ICRpbWc7CgkJJHBhcnNlZCA9 IGlzX251bGwoJHRoaW5nKSA/IHBhcnNlX2Zvcm0oJGZvcm0pIDogcGFyc2UoJHRoaW5nKTsK CQlpZiAoICRwYXJzZWQgKSAkb3V0W10gPSAkcGFyc2VkOwoJCXVuc2V0KCRzb29faW1hZ2Vb J2RhdGFfb2JqJ10pOwoJCXVuc2V0KCRzb29faW1hZ2VbJ3VybCddKTsKCX0KCglpZiAoICEg JHBlcnNpc3RlbnRfY29udGV4dCApCgkJdW5zZXQoJHNvb19pbWFnZVsnZmlyc3Rfc2VsZWN0 aW9uJ10pOwoKCXVuc2V0KCRzb29faW1hZ2VbJ2NvdW50J10pOwoKCXJldHVybiBpc3NldCgk b3V0KSA/IGRvV3JhcCgkb3V0LCAkd3JhcHRhZywgJGJyZWFrLCAkY2xhc3MsICcnLCAnJywg JycsICRodG1sX2lkKSA6IGZhbHNlOwoKfQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vIGVuZCBv ZiBzb29faW1hZ2Vfc2VsZWN0IC8vLy8vLy8vLy8vLy8vLy8vLy8vLwoKZnVuY3Rpb24gc29v X2ltYWdlKCAkYXR0cyApIHsKLy8gRGlzcGxheSBhbiBpbWFnZS4gU2VsZWN0aW9uIGJ5LCBp biBkZXNjZW5kaW5nIG9yZGVyIG9mIHByaW9yaXR5OgoJLy8gdGhlIHRhZydzICduYW1lJyBh dHRyaWJ1dGU7CgkvLyB0aGUgdGFnJ3MgJ2lkJyBhdHRyaWJ1dGU7CgkvLyB0aGUgaW1hZ2Ug Y29udGV4dDoKCQkvLyBpZCBvciB1cmwgc2VudCBieSAkc29vX2ltYWdlIHRvIGFuIGltYWdl IGZvcm0KCQkvLyBhcnRpY2xlIGltYWdlCgkJLy8gZmlyc3Qgc2VsZWN0aW9uIGZyb20gcHJp b3Igc29vX2ltYWdlX3NlbGVjdCAoc3ViamVjdCB0byBwcmVmIHNldHRpbmcpCgoJZXh0cmFj dChsQXR0cyhhcnJheSgKCQknaWQnCQkJPT4JJycsCgkJJ25hbWUnCQkJPT4JJycsCgkJJ3Ro dW1ibmFpbCcJCT0+CWZhbHNlLAoJCSdoZWlnaHQnCQk9PgknJywKCQknd2lkdGgnCQkJPT4J JycsCgkJJ2h0bWxfaWQnCQk9PgknJywKCQknY2xhc3MnCQkJPT4JJycsCgkJJ3RpdGxlJwkJ CT0+CSd7Y2FwdGlvbn0nLAoJCSdsaW5rJwkJCT0+CWZhbHNlLAoJCSdsaW5rX2NsYXNzJwk9 PgknJywKCQknbGlua19pZCcJCT0+CScnLAoJCSdsaW5rX3JlbCcJCT0+CScnLAoJCSdsaW5r X3RvJwkJPT4JJycsCgkJJ2VzY2FwZScJCT0+CXRydWUsCgkJJ29uY2xpY2snCQk9PgknJywJ CS8vIG9ubHkgZm9yIGxpbmtlZCB0aHVtYm5haWxzCgkpLCAkYXR0cykpOwoKCWdsb2JhbCAk c29vX2ltYWdlOwoKCWlmICggJGxpbmtfY2xhc3Mgb3IgJGxpbmtfaWQgb3IgJGxpbmtfcmVs IG9yICRvbmNsaWNrIG9yICRsaW5rX3RvICkKCQkkbGluayA9IHRydWU7CgoJaWYgKCAkbGlu ayApCgkJJHRodW1ibmFpbCA9IHRydWU7CgoJaWYgKCAkbmFtZSBvciAkaWQgKQoJCSRpbWFn ZSA9IG5ldyBzb29fdHhwX2ltZygkbmFtZSA/ICRuYW1lIDogJGlkKTsKCWVsc2UKCQkkaW1h Z2UgPSBfc29vX2ltYWdlX2J5X2NvbnRleHQoKTsKCQkJLy8gZmFsc2UgaWYgaW1hZ2UgY29u dGV4dCBpcyBlbXB0eQoJCQkvLyBvdGhlcndpc2UgYSBzb29fdHhwX2ltZyBvciBzb29faHRt bF9pbWcgb2JqZWN0CgkJCS8vIGlmIHNvb19odG1sX2ltZyBpdCB3aWxsIGJlIFVSTCBvbmx5 LCBubyBvdGhlciBwcm9wZXJ0aWVzCgoJaWYgKCAkaW1hZ2UgaW5zdGFuY2VvZiBzb29faHRt bF9pbWcgYW5kICR0aHVtYm5haWwgKQoJCXJldHVybiBmYWxzZTsKCglpZiAoICRpbWFnZSBp bnN0YW5jZW9mIHNvb190eHBfaW1nICkgewoJCWlmICggJHRodW1ibmFpbCBhbmQgISRpbWFn ZS0+dGh1bWJuYWlsICkKCQkJcmV0dXJuIGZhbHNlOwoJCSRpbWFnZV9kYXRhID0gJGltYWdl OwoJCSRpbWFnZSA9IG5ldyBzb29faHRtbF9pbWcoJGltYWdlX2RhdGEsICR0aHVtYm5haWws ICRlc2NhcGUpOwoJCWlmICggJHRpdGxlICkKCQl7CgkJCSR0b2tlbnMgPSBhcnJheSgne2Fs dH0nLCAne2NhcHRpb259Jyk7CgkJCSRyZXBsYWNlID0gYXJyYXkoJGltYWdlLT5hbHQsICRp bWFnZS0+dGl0bGUpOwoJCQlpZiAoIHN0cnBvcygkdGl0bGUsICd7YXV0aG9yfScpICE9PSBm YWxzZSApCgkJCXsKCQkJCSR0b2tlbnNbXSA9ICd7YXV0aG9yfSc7CgkJCQkkcmVwbGFjZVtd ID0gZ2V0X2F1dGhvcl9uYW1lKCRpbWFnZV9kYXRhLT5hdXRob3IpOwoJCQl9CgkJCSR0aXRs ZSA9IHN0cl9yZXBsYWNlKCR0b2tlbnMsICRyZXBsYWNlLCAkdGl0bGUpOwoJCX0KCX0KCglp ZiAoICEgKCAkaW1hZ2UgaW5zdGFuY2VvZiBzb29faHRtbF9pbWcgKSApCgkJcmV0dXJuIGZh bHNlOwoKLy8gU3RhbmRhcmQgaGVpZ2h0IGFuZCB3aWR0aCBhdHRyaWJ1dGVzIChpLmUuLCBh Y3R1YWwgc2l6ZSBpbiBwaXhlbHMpCi8vIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGltZyB0YWcg aWYgdGhlIGRlZmF1bHRfZGltZW5zaW9ucyBwcmVmZXJlbmNlIGlzIHRydWUKLy8gYW5kIGhh cyBub3QgYmVlbiBvdmVycmlkZW4gKGJ5IHNwZWNpZnlpbmcgaGVpZ2h0IG9yIHdpZHRoIG90 aGVyIHRoYW4gMSksCi8vIG9yIGlmIGVpdGhlciBhdHRyaWJ1dGUgaGFzIGJlZW4gc2V0IHRv IDEuIE90aGVyd2lzZSwgaGVpZ2h0IGFuZCB3aWR0aAovLyBhdHRyaWJ1dGVzIHdpbGwgYmUg cGFzc2VkIHRocm91Z2ggYXMgaXMgKGluIHdoaWNoIGNhc2UgYSB2YWx1ZSBvZiAwCi8vIG9y IGVtcHR5IHdpbGwgcmVzdWx0IGluIG5vIGF0dHJpYnV0ZSBpbiB0aGUgaW1nIHRhZykuCgoJ aWYgKCAkd2lkdGggPT09ICcwJyBvciAkaGVpZ2h0ID09PSAnMCcgb3IgJHdpZHRoID4gMSBv ciAkaGVpZ2h0ID4gMSApCgkJJHNvb19pbWFnZVsnZGVmYXVsdF9kaW1lbnNpb25zJ10gPSBm YWxzZTsKCglpZiAoICEgJHNvb19pbWFnZVsnZGVmYXVsdF9kaW1lbnNpb25zJ10gYW5kICRo ZWlnaHQgIT0gMSBhbmQgJHdpZHRoICE9IDEgKQoJCSRpbWFnZS0+aGVpZ2h0KCRoZWlnaHQp LT53aWR0aCgkd2lkdGgpOwoKCSRpbWFnZS0+Y2xhc3MoJGNsYXNzKQoJCS0+aWQoJGh0bWxf aWQpCgkJLT50aXRsZSgkdGl0bGUpOwoKCS8vIFNoYWRvd2JveC1zcGVjaWZpYyBibG9jayB0 byBjcmVhdGUgZ2FsbGVyaWVzCiAJaWYgKCBzdHJ0b2xvd2VyKCRsaW5rX3JlbCkgPT0gInNo YWRvd2JveCIKIAkJYW5kIGlzc2V0KCRzb29faW1hZ2VbJ2ZpcnN0X3NlbGVjdGlvbiddKQog CQlhbmQgJHNvb19pbWFnZVsnZmlyc3Rfc2VsZWN0aW9uJ10gaW5zdGFuY2VvZiBzb29fdHhw X2ltZyApIHsKIAkJCSRpbWdfb2JqID0gJHNvb19pbWFnZVsnZmlyc3Rfc2VsZWN0aW9uJ107 CiAJCQkkbGlua19yZWwgLj0gJ1snIC4gJGltZ19vYmotPmlkIC4gJ10nOwoJfQoKCWlmICgg JHRodW1ibmFpbCBhbmQgJGxpbmsgKSB7CgkJaWYgKCAkbGlua190byApCgkJCSR1cmwgPSBo dSAuICRsaW5rX3RvIC4gJz8nIC4gJHNvb19pbWFnZVsnanVtcF9wYXJhbSddCgkJCQkuICc9 JyAuICRpbWFnZV9kYXRhLT5pZDsKCQllbHNlCgkJCSR1cmwgPSAkaW1hZ2VfZGF0YS0+ZnVs bF91cmw7CgkJJGFuY2hvciA9IG5ldyBzb29faHRtbF9hbmNob3IoJHVybCwgJGltYWdlKTsK CQkkYW5jaG9yLT50aXRsZSgkdGl0bGUpCgkJCS0+b25jbGljaygkb25jbGljaykKCQkJLT5y ZWwoJGxpbmtfcmVsKQoJCQktPmNsYXNzKCRsaW5rX2NsYXNzKQoJCQktPmlkKCRsaW5rX2lk KTsKCX0KCglyZXR1cm4gaXNzZXQoJGFuY2hvcikgPyAkYW5jaG9yLT50YWcoKSA6ICRpbWFn ZS0+dGFnKCk7Cn0KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBlbmQgb2Ygc29vX2ltYWdl IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCgpmdW5jdGlvbiBzb29faW1hZ2VfYWx0KCRh dHRzKSB7IHJldHVybiBfc29vX2ltYWdlX2RhdGEoJ2FsdCcsICRhdHRzKTsgfQpmdW5jdGlv biBzb29faW1hZ2VfYXV0aG9yKCRhdHRzKSB7IHJldHVybiBfc29vX2ltYWdlX2RhdGEoJ2F1 dGhvcicsICRhdHRzKTsgfQpmdW5jdGlvbiBzb29faW1hZ2VfY2FwdGlvbigkYXR0cykgewly ZXR1cm4gX3Nvb19pbWFnZV9kYXRhKCdjYXB0aW9uJywgJGF0dHMpOyB9CmZ1bmN0aW9uIHNv b19pbWFnZV9jYXRlZ29yeSgkYXR0cykgeyByZXR1cm4gX3Nvb19pbWFnZV9kYXRhKCdjYXRl Z29yeScsICRhdHRzKTsgfQpmdW5jdGlvbiBzb29faW1hZ2VfZGF0ZSgkYXR0cykgeyByZXR1 cm4gX3Nvb19pbWFnZV9kYXRhKCdkYXRlJywgJGF0dHMpOyB9CmZ1bmN0aW9uIHNvb19pbWFn ZV9oZWlnaHQoJGF0dHMpIHsgcmV0dXJuIF9zb29faW1hZ2VfZGF0YSgnaCcsICRhdHRzKTsg fQpmdW5jdGlvbiBzb29faW1hZ2VfaWQoJGF0dHMpIHsgcmV0dXJuIF9zb29faW1hZ2VfZGF0 YSgnaWQnLCAkYXR0cyk7IH0KZnVuY3Rpb24gc29vX2ltYWdlX25hbWUoJGF0dHMpIHsgcmV0 dXJuIF9zb29faW1hZ2VfZGF0YSgnbmFtZScsICRhdHRzKTsgfQpmdW5jdGlvbiBzb29faW1h Z2VfdXJsKCRhdHRzKSB7IHJldHVybiBfc29vX2ltYWdlX2RhdGEoJ2Z1bGxfdXJsJywgJGF0 dHMpOyB9CmZ1bmN0aW9uIHNvb19pbWFnZV93aWR0aCgkYXR0cykgeyByZXR1cm4gX3Nvb19p bWFnZV9kYXRhKCd3JywgJGF0dHMpOyB9CmZ1bmN0aW9uIHNvb190aHVtYm5haWxfaGVpZ2h0 KCRhdHRzKSB7IHJldHVybiBfc29vX2ltYWdlX2RhdGEoJ3RodW1iX2gnLCAkYXR0cyk7IH0K ZnVuY3Rpb24gc29vX3RodW1ibmFpbF91cmwoJGF0dHMpIHsgcmV0dXJuIF9zb29faW1hZ2Vf ZGF0YSgndGh1bWJfdXJsJywgJGF0dHMpOyB9CmZ1bmN0aW9uIHNvb190aHVtYm5haWxfd2lk dGgoJGF0dHMpIHsgcmV0dXJuIF9zb29faW1hZ2VfZGF0YSgndGh1bWJfdycsICRhdHRzKTsg fQoKZnVuY3Rpb24gX3Nvb19pbWFnZV9kYXRhKCRmaWVsZCwgJGF0dHMgPSBhcnJheSgpKSB7 CglleHRyYWN0KGxBdHRzKGFycmF5KAoJCSdmb3JtYXQnCT0+CScnLAoJCSdlc2NhcGUnCT0+ CTEsCgkJJ25vX3dpZG93Jwk9PgkxLAoJCSd3cmFwdGFnJwk9PiAnJywKCQknY2xhc3MnCQk9 PiAnJywKCQknaHRtbF9pZCcJPT4gJycsCgkpLCAkYXR0cykpOwoJJGltYWdlID0gX3Nvb19p bWFnZV9ieV9jb250ZXh0KCk7CglpZiAoICEgJGltYWdlIGluc3RhbmNlb2Ygc29vX3R4cF9p bWcgKQoJCSRvdXQgPSAkZmllbGQgPT0gJ3VybCcgPyAkaW1hZ2UgOiAnJzsKCWVsc2UKCQlz d2l0Y2ggKCAkZmllbGQgKSB7CgkJCWNhc2UgJ2FsdCc6CgkJCQkkb3V0ID0gJGVzY2FwZSA/ IGh0bWxzcGVjaWFsY2hhcnMoJGltYWdlLT5hbHQpIDogJGltYWdlLT5hbHQ7CgkJCQlicmVh azsKCQkJY2FzZSAnYXV0aG9yJzoKCQkJCSRvdXQgPSBnZXRfYXV0aG9yX25hbWUoJGltYWdl LT5hdXRob3IpOwoJCQkJYnJlYWs7CgkJCWNhc2UgJ2NhcHRpb24nOgoJCQkJJG91dCA9ICRl c2NhcGUgPyBodG1sc3BlY2lhbGNoYXJzKCRpbWFnZS0+Y2FwdGlvbikgOiAkaW1hZ2UtPmNh cHRpb247CgkJCQkkb3V0ID0gJG5vX3dpZG93ID8gcHJlZ19yZXBsYWNlKCcvXHMrKFxTKykk LycsICcmbmJzcDtcMScsICRvdXQpIDogJG91dDsKCQkJCWJyZWFrOwoJCQljYXNlICdkYXRl JzoKCQkJCWdsb2JhbCAkZGF0ZWZvcm1hdDsKCQkJCSRmID0gJGZvcm1hdCA/ICRmb3JtYXQg OiAkZGF0ZWZvcm1hdDsKCQkJCSR1dGltZSA9IHNhZmVfc3RydG90aW1lKCRpbWFnZS0+ZGF0 ZSk7CgkJCQkkb3V0ID0gJGltYWdlLT5kYXRlID8gc2FmZV9zdHJmdGltZSgkZiwgJHV0aW1l KSA6ICcnOwoJCQkJYnJlYWs7CgkJCWRlZmF1bHQ6CgkJCQkkb3V0ID0gJGltYWdlLT4kZmll bGQ7CgkJfQoJcmV0dXJuIGRvV3JhcChhcnJheSgkb3V0KSwgJHdyYXB0YWcsICcnLCAkY2xh c3MsICcnLCAnJywgJycsICRodG1sX2lkKTsKfQoKZnVuY3Rpb24gc29vX2lmX3R4cF9pbWFn ZSgkYXR0cywgJHRoaW5nKSB7CgoJJGltYWdlID0gX3Nvb19pbWFnZV9ieV9jb250ZXh0KCk7 CglyZXR1cm4gcGFyc2UoRXZhbEVsc2UoJHRoaW5nLCAkaW1hZ2UgaW5zdGFuY2VvZiBzb29f dHhwX2ltZyApKTsKfQoKZnVuY3Rpb24gc29vX2lmX2ltYWdlX2F1dGhvcigkYXR0cywgJHRo aW5nKSB7CgoJZXh0cmFjdChsQXR0cyhhcnJheSgnbmFtZScgPT4gJycpLCAkYXR0cykpOwoJ JGltYWdlID0gX3Nvb19pbWFnZV9ieV9jb250ZXh0KCk7CglyZXR1cm4gcGFyc2UoRXZhbEVs c2UoJHRoaW5nLCAkaW1hZ2UgaW5zdGFuY2VvZiBzb29fdHhwX2ltZyBhbmQgaW5fbGlzdCgk aW1hZ2UtPmF1dGhvciwgJG5hbWUpICkpOwp9CgpmdW5jdGlvbiBzb29faWZfaW1hZ2VfY2F0 ZWdvcnkoJGF0dHMsICR0aGluZykgewoKCWV4dHJhY3QobEF0dHMoYXJyYXkoJ25hbWUnID0+ ICcnKSwgJGF0dHMpKTsKCSRpbWFnZSA9IF9zb29faW1hZ2VfYnlfY29udGV4dCgpOwoJcmV0 dXJuIHBhcnNlKEV2YWxFbHNlKCR0aGluZywgJGltYWdlIGluc3RhbmNlb2Ygc29vX3R4cF9p bWcgYW5kIGluX2xpc3QoJGltYWdlLT5jYXRlZ29yeSwgJG5hbWUpICkpOwp9CgpmdW5jdGlv biBzb29faWZfaW1hZ2VfdGh1bWJuYWlsKCRhdHRzLCAkdGhpbmcpIHsKCgkkaW1hZ2UgPSBf c29vX2ltYWdlX2J5X2NvbnRleHQoKTsKCXJldHVybiBwYXJzZShFdmFsRWxzZSgkdGhpbmcs ICRpbWFnZSBpbnN0YW5jZW9mIHNvb190eHBfaW1nIGFuZCAkaW1hZ2UtPnRodW1ibmFpbCkp Owp9CgpmdW5jdGlvbiBzb29faWZfaW1hZ2VfY291bnQoJGF0dHMsICR0aGluZykgewovLyBF eHBlY3RlZCBjb250ZXh0OgovLyAgIC0gSW5zaWRlIGEgc29vX2ltYWdlX3NlbGVjdCB0YWcv Zm9ybSwgZWxzZQovLyAgIC0gSW5zaWRlIGFuIGFydGljbGUvYXJ0aWNsZV9jdXN0b20gdGFn L2Zvcm0sIGVsc2UKLy8gICAtIE9uIGFuIGltYWdlIGNhdGVnb3J5IHBhZ2UKLy8gT3RoZXJ3 aXNlIHRoZSB0YWcgcmV0dXJucyBlbXB0eS4KCWV4dHJhY3QobEF0dHMoYXJyYXkoCgkJJ2V4 YWN0JwkJPT4gbnVsbCwKCQknbWluJwkJPT4gbnVsbCwKCQknbWF4JwkJPT4gbnVsbCwKCSks ICRhdHRzKSk7CglnbG9iYWwgJHNvb19pbWFnZSwgJHRoaXNhcnRpY2xlLCAkY29udGV4dCwg JGM7CgoJaWYgKCBpc3NldCgkc29vX2ltYWdlWydjb3VudCddKSApCS8vIGluc2lkZSBhIHNv b19pbWFnZV9zZWxlY3QKCQkkY291bnQgPSAkc29vX2ltYWdlWydjb3VudCddOwoJZWxzZWlm ICggISBlbXB0eSgkdGhpc2FydGljbGUpICkKCQkkY291bnQgPSAkdGhpc2FydGljbGVbJ2Fy dGljbGVfaW1hZ2UnXSA/IGNvdW50KGRvX2xpc3QoJHRoaXNhcnRpY2xlWydhcnRpY2xlX2lt YWdlJ10pKSA6IDA7CgllbHNlaWYgKCAkY29udGV4dCA9PSBnVHh0KCdpbWFnZV9jb250ZXh0 JykgYW5kICEgZW1wdHkoJGMpICkKCQkkY291bnQgPSBzYWZlX2NvdW50KCd0eHBfaW1hZ2Un LCAnY2F0ZWdvcnkgPSAiJyAuICRjIC4gJyInKTsKCWVsc2UgcmV0dXJuOwoKCWlmICggISBp c19udWxsKCRleGFjdCkgKQoJCSRjb25kaXRpb24gPSAkY291bnQgPT0gJGV4YWN0OwoJZWxz ZWlmICggISBpc19udWxsKCRtaW4pICkKCQkkY29uZGl0aW9uID0gJGNvdW50ID49ICRtaW47 CgllbHNlaWYgKCAhIGlzX251bGwoJG1heCkgKQoJCSRjb25kaXRpb24gPSAkY291bnQgPD0g JG1heDsKCWVsc2UgcmV0dXJuOwoKCXJldHVybiBwYXJzZShFdmFsRWxzZSgkdGhpbmcsICRj b25kaXRpb24pKTsKfQoKZnVuY3Rpb24gc29vX2ltYWdlX25leHQoJGF0dHMsICR0aGluZyA9 IG51bGwpIHsKCglleHRyYWN0KGxBdHRzKGFycmF5KAoJCSdsaW5rX3RleHQnCQk9PiAnJnJh cnI7JywKCQknY2xhc3MnCQkJPT4gJycsCgkJJ2h0bWxfaWQnCQk9PiAnJywKCSksICRhdHRz KSk7CglnbG9iYWwgJHNvb19pbWFnZTsKCglpZiAoICEgaXNzZXQoJHNvb19pbWFnZVsnbmV4 dCddKSApCgkJcmV0dXJuIHNvb191dGlsOjpzZWNvbmRwYXNzKF9fRlVOQ1RJT05fXywgJGF0 dHMsICR0aGluZyk7CgkkdXJpID0gbmV3IHNvb191cmk7CgkkdXJpLT5zZXRfcXVlcnlfcGFy YW0oJHNvb19pbWFnZVsnanVtcF9wYXJhbSddKTsKCSR1cmktPnNldF9xdWVyeV9wYXJhbSgk c29vX2ltYWdlWydwYWdlX3BhcmFtJ10sICRzb29faW1hZ2VbJ25leHQnXSk7Cgkkb3V0ID0g bmV3IHNvb19odG1sX2FuY2hvcigkdXJpLT5mdWxsLCAkdGhpbmcgPyAkdGhpbmcgOiAkbGlu a190ZXh0KTsKCXJldHVybiAkb3V0LT5jbGFzcygkY2xhc3MpLT5pZCgkaHRtbF9pZCktPnRh ZygpOwp9CgpmdW5jdGlvbiBzb29faW1hZ2VfcHJldigkYXR0cywgJHRoaW5nID0gbnVsbCkg ewoKCWV4dHJhY3QobEF0dHMoYXJyYXkoCgkJJ2xpbmtfdGV4dCcJCT0+ICcmbGFycjsnLAoJ CSdjbGFzcycJCQk9PiAnJywKCQknaHRtbF9pZCcJCT0+ICcnLAoJKSwgJGF0dHMpKTsKCWds b2JhbCAkc29vX2ltYWdlOwoKCSRwcmV2ID0gaW50dmFsKGdwcygkc29vX2ltYWdlWydwYWdl X3BhcmFtJ10pKSAtIDE7CglpZiAoICRwcmV2IDwgMSApCgkJcmV0dXJuIHNvb191dGlsOjpz ZWNvbmRwYXNzKF9fRlVOQ1RJT05fXywgJGF0dHMsICR0aGluZyk7CgkkdXJpID0gbmV3IHNv b191cmk7CgkkdXJpLT5zZXRfcXVlcnlfcGFyYW0oJHNvb19pbWFnZVsnanVtcF9wYXJhbSdd KTsKCSR1cmktPnNldF9xdWVyeV9wYXJhbSgkc29vX2ltYWdlWydwYWdlX3BhcmFtJ10sICRw cmV2ID4gMSA/ICRwcmV2IDogbnVsbCk7Cgkkb3V0ID0gbmV3IHNvb19odG1sX2FuY2hvcigk dXJpLT5mdWxsLCAkdGhpbmcgPyAkdGhpbmcgOiAkbGlua190ZXh0KTsKCXJldHVybiAkb3V0 LT5jbGFzcygkY2xhc3MpLT5pZCgkaHRtbF9pZCktPnRhZygpOwp9CgpmdW5jdGlvbiBzb29f aW1hZ2VfcGFnZV9jb3VudCgkYXR0cykgewoKCWV4dHJhY3QobEF0dHMoYXJyYXkoCgkJJ2Zv cm1hdCcgCQk9PgknUGFnZSB7Y3VycmVudH0gb2Yge3RvdGFsfScsCgkJJ3Nob3dhbHdheXMn CT0+CWZhbHNlLAoJKSwgJGF0dHMpKTsKCWdsb2JhbCAkc29vX2ltYWdlOwoKCWlmICggISBp c3NldCgkc29vX2ltYWdlWyd0aGlzX3BhZ2UnXSkgKQoJCXJldHVybiBzb29fdXRpbDo6c2Vj b25kcGFzcyhfX0ZVTkNUSU9OX18sICRhdHRzKTsKCglpZiAoICEgJHNob3dhbHdheXMgYW5k ICRzb29faW1hZ2VbJ3RvdGFsX3BhZ2VzJ10gPD0gMSApIHJldHVybjsKCglyZXR1cm4gc3Ry X3JlcGxhY2UoYXJyYXkoJ3tjdXJyZW50fScsICd7dG90YWx9JyksCgkJYXJyYXkoJHNvb19p bWFnZVsndGhpc19wYWdlJ10sICRzb29faW1hZ2VbJ3RvdGFsX3BhZ2VzJ10pLCAkZm9ybWF0 KTsKfQoKZnVuY3Rpb24gc29vX2V4aWYoJGF0dHMsICR0aGluZykgewoKCWdsb2JhbCAkZGF0 ZWZvcm1hdCwgJHNvb19leGlmX2ZpZWxkLCAkc29vX2V4aWZfdmFsdWU7CglleHRyYWN0KGxB dHRzKGFycmF5KAoJCSdmaWVsZCcJCT0+CScnLAoJCSdmb3JtYXQnCT0+CSd7ZmllbGR9OiB7 dmFsdWV9JywKCQknd3JhcHRhZycJPT4JJycsCgkJJ2JyZWFrJwkJPT4JJycsCgkpLCAkYXR0 cykpOwoKCSRkaXNwbGF5ID0gYXJyYXkoCgkJJ01vZGVsJwkJCQkJPT4JJ0NhbWVyYScsCgkJ J0V4cG9zdXJlVGltZScJCQk9PgknU2h1dHRlciBzcGVlZCcsCgkJJ0ZOdW1iZXInCQkJCT0+ CSdGLXN0b3AnLAoJCSdJU09TcGVlZFJhdGluZ3MnCQk9PgknSVNPIHNwZWVkJywKCQknRGF0 ZVRpbWVPcmlnaW5hbCcJCT0+CSdFeHBvc3VyZSBkYXRlJywKCQknRm9jYWxMZW5ndGgnCQkJ PT4JJ0ZvY2FsIGxlbmd0aCcsCgkJJ0Nyb3BGYWN0b3InCQkJPT4JJ0Nyb3AgZmFjdG9yJywK CQknRk9WJwkJCQkJPT4JJ0NvbXB1dGVkIEZPVicsCgkJJ0ltYWdlSGlzdG9yeScJCQk9Pgkn SGlzdG9yeScsCgkJKTsKCgkkc2hvcnRjdXRzID0gYXJyYXkoCgkJJ21vZGVsJwkJCQkJPT4J J01vZGVsJywKCQknZXhwLXRpbWUnCQkJCT0+CSdFeHBvc3VyZVRpbWUnLAoJCSdmLW51bWJl cicJCQkJPT4JJ0ZOdW1iZXInLAoJCSdpc28tc3BlZWQnCQkJCT0+CSdJU09TcGVlZFJhdGlu Z3MnLAoJCSdkYXRlLXRha2VuJwkJCT0+CSdEYXRlVGltZU9yaWdpbmFsJywKCQknZm9jYWwt bGVuJwkJCQk9PgknRm9jYWxMZW5ndGgnLAoJCSdjcm9wJwkJCQkJPT4JJ0Nyb3BGYWN0b3In LAoJCSdoaXN0b3J5JwkJCQk9PgknSW1hZ2VIaXN0b3J5JywKCSk7CgoJaWYgKCBlbXB0eSgk ZmllbGQpICkKCQkkZmllbGRzID0gYXJyYXlfa2V5cygkZGlzcGxheSk7CgoJZWxzZSB7CgkJ JGZpZWxkcyA9IGRvX2xpc3QoJGZpZWxkKTsKCQlmb3JlYWNoICggJGZpZWxkcyBhcyAkaSA9 PiAkZiApCgkJCWlmICggYXJyYXlfa2V5X2V4aXN0cyhzdHJ0b2xvd2VyKCRmKSwgJHNob3J0 Y3V0cykgKQoJCQkJJGZpZWxkc1skaV0gPSAkc2hvcnRjdXRzWyRmXTsKCX0KCgkkZXhpZiA9 IGV4aWZfcmVhZF9kYXRhKF9zb29faW1hZ2VfcGF0aCgpKTsKCglleHRyYWN0KCRleGlmKTsK CglpZiAoIGlzc2V0KCRGTnVtYmVyKSApCgkJJGV4aWZbJ0ZOdW1iZXInXSA9ICcmZm5vZjsv JyAuIHJvdW5kKF9zb29faW1hZ2VfY29udmVydF9yYXRpbygkRk51bWJlciksIDEpOwoKCWlm ICggaXNzZXQoJEZvY2FsTGVuZ3RoKSApCgkJJGV4aWZbJ0ZvY2FsTGVuZ3RoJ10gPSBfc29v X2ltYWdlX2NvbnZlcnRfcmF0aW8oJEZvY2FsTGVuZ3RoKSAuICdtbSc7CgoJaWYgKCBpc3Nl dCgkRm9jYWxMZW5ndGhJbjM1bW1GaWxtKSApIHsKCQkkZmwzNSA9IF9zb29faW1hZ2VfY29u dmVydF9yYXRpbygkRm9jYWxMZW5ndGhJbjM1bW1GaWxtKTsKCQlpZiAoIGlzc2V0KCRGb2Nh bExlbmd0aCkgKQoJCQkkZXhpZlsnQ3JvcEZhY3RvciddID0gcm91bmQoJGZsMzUgLyBfc29v X2ltYWdlX2NvbnZlcnRfcmF0aW8oJEZvY2FsTGVuZ3RoKSwgMSk7CgkJJGV4aWZbJ0ZvY2Fs TGVuZ3RoSW4zNW1tRmlsbSddID0gJGZsMzUgLiAnbW0nOwoJCS8vIDQzLjI3IGlzIHRoZSBk aWFnb25hbCBsZW5ndGggKG1tKSBvZiBhIGZ1bGwtZnJhbWUgc2Vuc29yCgkJJGV4aWZbJ0ZP ViddID0gcm91bmQocmFkMmRlZygyICogYXRhbig0My4yNyAvICggMiAqICRmbDM1ICkpKSwg MSkgLiAnJmRlZzsnOwoJfQoKCWlmICggaXNzZXQoJERhdGVUaW1lT3JpZ2luYWwpICkKCQkk ZXhpZlsnRGF0ZVRpbWVPcmlnaW5hbCddID0KCQkJc2FmZV9zdHJmdGltZSgkZGF0ZWZvcm1h dCwgc3RydG90aW1lKCREYXRlVGltZU9yaWdpbmFsKSk7CgoJaWYgKCBzdHJ0b2xvd2VyKCRm aWVsZHNbMF0pID09ICdkdW1wJyApCgkJJGZpZWxkcyA9IGFycmF5X2tleXMoJGV4aWYpOwoK CWZvcmVhY2ggKCAkZmllbGRzIGFzICRrICkgewoJCWlmICggaXNzZXQoJGV4aWZbJGtdKSAp IHsKCQkJJHYgPSAkZXhpZlska107CgkJCSRzb29fZXhpZl9maWVsZCA9IGlzc2V0KCRkaXNw bGF5WyRrXSkgPyAkZGlzcGxheVska10gOiAkazsKCQkJJHNvb19leGlmX3ZhbHVlID0gaXNf YXJyYXkoJHYpID8gaW1wbG9kZSgnICcsICR2KSA6IHRyaW0oJHYpOwoJCQkkcl9mb3JtYXQg PSBzdHJfcmVwbGFjZSgne2ZpZWxkfScsICRzb29fZXhpZl9maWVsZCwgJGZvcm1hdCk7CgkJ CSRyX2Zvcm1hdCA9IHN0cl9yZXBsYWNlKCd7dmFsdWV9JywgJHNvb19leGlmX3ZhbHVlLCAk cl9mb3JtYXQpOwoJCQkkb3V0W10gPSAkdGhpbmcgPyBwYXJzZSgkdGhpbmcpIDogJHJfZm9y bWF0OwoJCX0KCX0KCXJldHVybiBpc3NldCgkb3V0KSA/IGRvV3JhcCgkb3V0LCAkd3JhcHRh ZywgJGJyZWFrKSA6ICcnOwp9CgpmdW5jdGlvbiBzb29fZXhpZl9maWVsZCgkYXR0cykgewoK CWdsb2JhbCAkc29vX2V4aWZfZmllbGQ7CglleHRyYWN0KGxBdHRzKGFycmF5KAoJCSd3cmFw dGFnJwk9PgknJywKCSksICRhdHRzKSk7CgoJaWYgKCAkc29vX2V4aWZfZmllbGQgKQoJCXJl dHVybiBkb1dyYXAoYXJyYXkoJHNvb19leGlmX2ZpZWxkKSwgJHdyYXB0YWcsICcnKTsKfQoK ZnVuY3Rpb24gc29vX2V4aWZfdmFsdWUoJGF0dHMpIHsKCglnbG9iYWwgJHNvb19leGlmX3Zh bHVlOwoJZXh0cmFjdChsQXR0cyhhcnJheSgKCQknd3JhcHRhZycJPT4JJycsCgkpLCAkYXR0 cykpOwoKCWlmICggJHNvb19leGlmX3ZhbHVlICkgewoJCWlmICggISBpc19hcnJheSgkc29v X2V4aWZfdmFsdWUpICkKCQkJJHNvb19leGlmX3ZhbHVlID0gYXJyYXkoJHNvb19leGlmX3Zh bHVlKTsKCQlyZXR1cm4gZG9XcmFwKCRzb29fZXhpZl92YWx1ZSwgJHdyYXB0YWcsICcnKTsK CX0KfQoKICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCiAvLwkJCQkJCQlTdXBwb3J0IEZ1bmN0aW9u cwkJCQkJCQkvLwovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCgpmdW5jdGlvbiBfc29vX2ltYWdlX3Bh dGgoKSB7CgoJZ2xvYmFsICRpbWdfZGlyOwoKCSRpbWdfZGlyX3BhdGggPSAkX1NFUlZFUlsn RE9DVU1FTlRfUk9PVCddIC4gIi8kaW1nX2Rpci8iOwoJJGltYWdlID0gX3Nvb19pbWFnZV9i eV9jb250ZXh0KCk7CgoJaWYgKCAkaW1hZ2UgaW5zdGFuY2VvZiBzb29fdHhwX2ltZyApCgkJ JGZpbGVfcGF0aCA9ICRpbWdfZGlyX3BhdGggLiAkaW1hZ2UtPmlkIC4gJGltYWdlLT5leHQ7 CgoJZWxzZWlmICggJGltYWdlIGluc3RhbmNlb2Ygc29vX2h0bWxfaW1nICkgewoJCSRwYXR0 ZXJuID0gJyZeKCcgLiBzdHJfcmVwbGFjZSgnLicsICdcLicsIGh1KSAuICJ8XC8pKCRpbWdf ZGlyLispJiI7CgkJaWYgKCBwcmVnX21hdGNoKCRwYXR0ZXJuLCAkaW1hZ2UtPnNyYywgJG1h dGNoKSApCgkJCSRmaWxlX3BhdGggPSAkbWF0Y2hbMl07Cgl9CgoJaWYgKCBlbXB0eSgkZmls ZV9wYXRoKSBvciAhIGZpbGVfZXhpc3RzKCRmaWxlX3BhdGgpICkKCQlyZXR1cm4gbnVsbDsK CglyZXR1cm4gJGZpbGVfcGF0aDsKfQoKZnVuY3Rpb24gX3Nvb19hcnRpY2xlX2ltYWdlX2xp c3QoKSB7CglnbG9iYWwgJHRoaXNhcnRpY2xlOwoJcmV0dXJuIGVtcHR5KCR0aGlzYXJ0aWNs ZVsnYXJ0aWNsZV9pbWFnZSddKSA/CgkJYXJyYXkoKSA6IF9zb29fcmFuZ2VfdG9fbGlzdCgk dGhpc2FydGljbGVbJ2FydGljbGVfaW1hZ2UnXSk7Cn0KCmZ1bmN0aW9uIF9zb29fcmFuZ2Vf dG9fbGlzdCggJGNzdiApIHsKCgkkaXRlbXMgPSBkb19saXN0KCRjc3YpOwoJZm9yZWFjaCAo ICRpdGVtcyBhcyAkaXRlbSApCgkJaWYgKCBwcmVnX21hdGNoKCcvKFxkKykoOnwtKShcZCsp LycsICRpdGVtLCAkbWF0Y2gpICkgewoJCQlpZiAoICRtYXRjaFszXSA+ICRtYXRjaFsxXSAp CgkJCQlmb3IgKCAkaSA9ICRtYXRjaFsxXTsgJGkgPD0gJG1hdGNoWzNdOyAkaSsrICkKCQkJ CQkkb3V0W10gPSAkaTsKCQkJZWxzZQoJCQkJZm9yICggJGkgPSAkbWF0Y2hbMV07ICRpID49 ICRtYXRjaFszXTsgJGktLSApCgkJCQkJJG91dFtdID0gJGk7CgkJfQoJCWVsc2UKCQkJJG91 dFtdID0gJGl0ZW07CglyZXR1cm4gJG91dDsKfQoKZnVuY3Rpb24gX3Nvb192YWxpZF9leHQo ICRpbiApIHsKCSRvayA9IGFycmF5KCcuanBnJywgJy5qcGVnJywgJy5naWYnLCAnLnBuZycs ICcuYm1wJyk7CgkkZXh0cyA9IGlzX2FycmF5KCRpbikgPyAkaW4gOiBkb19saXN0KCRpbik7 Cgkkb3V0ID0gYXJyYXkoKTsKCWZvcmVhY2ggKCRleHRzIGFzICRleHQpIHsKCQkkZXh0ID0g Jy4nIC4gbHRyaW0oJGV4dCwgJy4nKTsKCQlpZiAoIGluX2FycmF5KCRleHQsICRvaykgKQoJ CQkkb3V0W10gPSAkZXh0OwoJfQoJcmV0dXJuICRvdXQ7Cn0KCmZ1bmN0aW9uIF9zb29faW1h Z2VfY29udmVydF9yYXRpbyggJHIgKSB7CglpZiAoIGlzX251bWVyaWMoJHIpICkKCQlyZXR1 cm4gJHI7CglpZiAoICEgcHJlZ19tYXRjaCgnLyguKykoOnxcLykoLispLycsICRyLCAkbWF0 Y2gpICkKCQlyZXR1cm4gbnVsbDsKCWlmICggaXNfbnVtZXJpYygkbWF0Y2hbMV0pIGFuZCBp c19udW1lcmljKCRtYXRjaFszXSkgYW5kICRtYXRjaFszXSAhPSAwICkKCQlyZXR1cm4gJG1h dGNoWzFdIC8gJG1hdGNoWzNdOwoJZWxzZQoJCXJldHVybiBudWxsOwp9CgpmdW5jdGlvbiBf c29vX2ltYWdlX2FzcGVjdF9yYXRpbyggJHF1ZXJ5LCAkYXNwZWN0X3JhdGlvICkgewoKCSRm dWRnZSA9IDAuMDE7CgkkcGF0dGVybiA9ICcvXihcK3wtKT8oW14tXSspKC0pPyguKyk/JC8n OwoJaWYgKCAhIHByZWdfbWF0Y2goJHBhdHRlcm4sICRhc3BlY3RfcmF0aW8sICRtYXRjaCkg KQoJCXJldHVybjsKCglpZiAoICRtYXRjaFsxXSA9PSAnKycgKSB7CgkJJG1pbl9hciA9IF9z b29faW1hZ2VfY29udmVydF9yYXRpbygkbWF0Y2hbMl0pOwoJCWlmICggaXNfbnVsbCgkbWlu X2FyKSApCgkJCXJldHVybjsKCX0KCWVsc2VpZiAoICRtYXRjaFsxXSA9PSAnLScgKSB7CgkJ JG1heF9hciA9IF9zb29faW1hZ2VfY29udmVydF9yYXRpbygkbWF0Y2hbMl0pOwoJCWlmICgg aXNfbnVsbCgkbWF4X2FyKSApCgkJCXJldHVybjsKCX0KCgllbHNlaWYgKCBpc3NldCgkbWF0 Y2hbM10pICkgewoJCSRtaW5fYXIgPSBfc29vX2ltYWdlX2NvbnZlcnRfcmF0aW8oJG1hdGNo WzJdKTsKCQkkbWF4X2FyID0gX3Nvb19pbWFnZV9jb252ZXJ0X3JhdGlvKCRtYXRjaFs0XSk7 CgkJaWYgKCBpc19udWxsKCRtaW5fYXIpIG9yIGlzX251bGwoJG1heF9hcikgKQoJCQlyZXR1 cm47CgkJaWYgKCAkbWF4X2FyIDwgJG1pbl9hciApCgkJCWxpc3QoJG1heF9hciwgJG1pbl9h cikgPSBhcnJheSgkbWluX2FyLCAkbWF4X2FyKTsKCX0KCWVsc2UgewoJCSRhciA9IF9zb29f aW1hZ2VfY29udmVydF9yYXRpbygkbWF0Y2hbMl0pOwoJCWlmICggaXNfbnVsbCgkYXIpICkK CQkJcmV0dXJuOwoJCSRxdWVyeS0+d2hlcmUoJ3cvaCcsICRhciArICRmdWRnZSwgJzwnKQoJ CQktPndoZXJlKCd3L2gnLCAkYXIgLSAkZnVkZ2UsICc+Jyk7CgkJcmV0dXJuOwoJfQoJaWYg KCBpc3NldCgkbWluX2FyKSApCgkJJHF1ZXJ5LT53aGVyZSgndy9oJywgJG1pbl9hciAtICRm dWRnZSwgJz49Jyk7CglpZiAoIGlzc2V0KCRtYXhfYXIpICkKCQkkcXVlcnktPndoZXJlKCd3 L2gnLCAkbWF4X2FyICsgJGZ1ZGdlLCAnPD0nKTsKCn0KCmZ1bmN0aW9uIF9zb29faW1hZ2Vf YnlfY29udGV4dCggKSB7Ci8vIFJldHVybiBhIHNpbmdsZSBpbWFnZSBvYmplY3QgKFR4cCBv ciBIdG1sKSBmb3IgdGhlIGN1cnJlbnQgaW1hZ2UgY29udGV4dC4KCS8vIEltYWdlIHBhc3Nl ZCBieSBwYXJlbnQgc29vX2ltYWdlX3NlbGVjdCB0YWcsIG9yOwoJLy8gZmlyc3QgYXJ0aWNs ZSBpbWFnZSwgb3I7CgkvLyBmaXJzdCBzZWxlY3Rpb24gZnJvbSBwcmV2aW91cyBzb29faW1h Z2Vfc2VsZWN0IHRhZyAoc3ViamVjdCB0byBwcmVmcykuCi8vIFJldHVybiBmYWxzZSBpZiBp bWFnZSBjb250ZXh0IGlzIGVtcHR5CgoJZ2xvYmFsICRzb29faW1hZ2U7CgoJJF9zb29fYXJ0 aWNsZV9pbWFnZV9saXN0ID0gX3Nvb19hcnRpY2xlX2ltYWdlX2xpc3QoKTsKCSRhcnRpY2xl X2ltYWdlID0gYXJyYXlfc2hpZnQoJF9zb29fYXJ0aWNsZV9pbWFnZV9saXN0KTsKCglpZiAo IGlzc2V0KCRzb29faW1hZ2VbJ2RhdGFfb2JqJ10pICkKCQkkaW1nID0gJHNvb19pbWFnZVsn ZGF0YV9vYmonXTsKCgllbHNlaWYgKCBpc3NldCgkc29vX2ltYWdlWyd1cmwnXSkgKQoJCSRp bWcgPSAkc29vX2ltYWdlWyd1cmwnXTsKCgllbHNlaWYgKCAkYXJ0aWNsZV9pbWFnZSApCgkJ JGltZyA9ICRhcnRpY2xlX2ltYWdlOwoKCWVsc2VpZiAoICEgZW1wdHkoJHNvb19pbWFnZVsn Zmlyc3Rfc2VsZWN0aW9uJ10pICkKCQkkaW1nID0gJHNvb19pbWFnZVsnZmlyc3Rfc2VsZWN0 aW9uJ107CgoJaWYgKCBlbXB0eSgkaW1nKSApIHJldHVybiBmYWxzZTsKCWlmICggaXNfb2Jq ZWN0KCRpbWcpICkgcmV0dXJuICRpbWc7CglpZiAoIGlzX251bWVyaWMoJGltZykgKSByZXR1 cm4gbmV3IHNvb190eHBfaW1nKCRpbWcpOwoJcmV0dXJuIG5ldyBzb29faHRtbF9pbWcoYXJy YXkoJ3NyYycgPT4gJGltZykpOwp9CiI7czo0OiJ0eXBlIjtzOjE6IjEiO3M6NToiZmxhZ3Mi O3M6MToiMyI7czo1OiJvcmRlciI7czoxOiI1IjtzOjM6Im1kNSI7czozMjoiMjc0NTRmZDZk OWE4ZmEwOGNkYzM2ZGQ1YTVlYWZjMGUiO30=