<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE module [
  <!ELEMENT module (dtdversion,name,version,description*,help*,about*,requires*,file+)>
  <!ELEMENT dtdversion (#PCDATA)>
  <!ELEMENT name (#PCDATA)>
  <!ELEMENT version (#PCDATA)>
  <!ELEMENT mincmsversion (#PCDATA)>
  <!ELEMENT description (#PCDATA)>
  <!ELEMENT help (#PCDATA)>
  <!ELEMENT about (#PCDATA)>
  <!ELEMENT requires (requiredname,requiredversion)>
  <!ELEMENT requiredname (#PCDATA)>
  <!ELEMENT requiredversion (#PCDATA)>
  <!ELEMENT file (filename,isdir,data)>
  <!ELEMENT filename (#PCDATA)>
  <!ELEMENT isdir (#PCDATA)>
  <!ELEMENT data (#PCDATA)>
]>
<module>
	<dtdversion>1.3</dtdversion>
	<name>CREA_Simple</name>
	<version>1.2.1</version>
  <mincmsversion>1.11.8</mincmsversion>
	<help><![CDATA[PGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPlRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZmxleGlibGUgd2F5IG9mIGNhY2hpbmcgYW5kIGRpc3BsYXlpbmcgcmVhbC1lc3RhdGUgbGlzdGluZ3MgZnJvbSB0aGUgQ2FuYWRpYW4gUmVhbCBFc3RhdGUgQXNzb2NpYXRpb24gPGVtPihDUkVBKTwvZW0+IFJFVFMgYmFzZWQgd2Vic2VydmljZS48L3A+CjxoMz5CZWhhdmlvcjwvaDM+CjxwPlRoaXMgbW9kdWxlIGNhY2hlcyB0aGUgYXZhaWxhYmxlIGxpc3RpbmdzIGZyb20gQ1JFQSBhbmQgZGlzcGxheXMgaXQuICBJbmZvcm1hdGlvbiBpcyByZWd1bGFybHkgcmUtZmV0Y2hlZCBmcm9tIHRoZSBkYXRhYmFzZSB1c2luZyBhIENHSm9iTUdSIEpvYi48L3A+CjxoMz5GZWF0dXJlczwvaDM+CiAgPHVsPgogICAgPGxpPlN1bW1hcnkgdmlldyB3aXRoIHBhZ2luYXRpb248L2xpPgogICAgPGxpPkRldGFpbCB2aWV3IHdpdGggY2Fub25pY2FsIFVSTDwvbGk+CiAgICA8bGk+UHJldHR5IFVSTFM8L2xpPgogICAgPGxpPkZsZXhpYmxlIHRlbXBsYXRlIGNvbnRyb2wuPC9saT4KICAgIDxsaT5TdXBwb3J0IGZvciBudW1lcm91cyBpbWFnZXMgcGVyIGxpc3Rpbmc8L2xpPgogIDwvdWw+CjxoMz5Ib3cgZG8gSSB1c2UgaXQ6PC9oMz4KPHVsPgogICA8bGk+MS4gIEluc3RhbGwgYW5kIGNvbmZpZ3VyZSB0aGUgcHJlcmVxdWlzaXRlIG1vZHVsZShzKQogICAgPHA+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBUaGlzIG1vZHVsZSBtYWtlcyB1c2Ugb2YgdGhlIENHSm9iTWdyIG1vZHVsZSBmb3IgcmVwZXRpdGl2ZSwgYXN5bmNob3Jub3VzIHRhc2tzLiAgVGhpcyBtb2R1bGUgbXVzdCBiZSBpbnN0YWxsZWQgYW5kIHByb3Blcmx5IGNvbmZpZ3VyZWQgdG8gb3BlcmF0ZSB2aWEgY3Jvbi48L3A+CiAgIDwvbGk+CiAgIDxsaT4yLiAgSW5zdGFsbCBhbmQgY29uZmlndXJlIHRoZSBtb2R1bGUuCiAgICAgIDxwPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gVmFsaWQgQ1JFQSBjcmVkZW50aWFscyBhcmUgcmVxdWlyZWQuICBUaGlzIG1vZHVsZSBjYW4gb25seSByZWFkIHRoZSBsaXN0aW5ncyBmb3Igd2hpY2ggdGhlIENSRUEgYWNjb3VudCBpcyBhdXRob3JpemVkLjwvcD4KICAgPC9saT4KICAgPGxpPkNhbGwgdGhlIG1vZHVsZQogICAgICA8cD5BZGRpbmcge0NSRUFfU2ltcGxlfSB0byB0aGUgY29udGVudCBhcmVhIG9mIGEgQ01TTVMgcGFnZSBzaG91bGQgYmUgc3VmZmljaWVudC48L3A+CiAgIDwvbGk+CiAgIDxsaT5DcmVhdGUgbmV3IGN1c3RvbWl6ZWQgc3VtbWFyeSBhbmQgZGV0YWlsIHRlbXBsYXRlcy48L2xpPgo8L3VsPgo8cD48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IEFmdGVyIHN1Y2Nlc3NmdWwgY29uZmlndXJhdGlvbiwgaXQgY291bGQgdGFrZSBzZXZlcmFsIG1pbnV0ZXMgZm9yIGRhdGEgdG8gYmUgZG93bmxvYWRlZCBhbmQgY2FjaGVkIGZyb20gQ1JFQS48L3A+CjxwPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gVGhlIHNhbXBsZSB0ZW1wbGF0ZXMgb25seSBzaG93IHRoZSBiYXNpY3Mgb2YgZXh0cmFjdGluZyBkYXRhIGZyb20gdGhlIENSRUEgcmVjb3JkcyBhbmQgZGlzcGxheWluZyBpdC4gIEl0IGNvdWxkIHRha2Ugc29tZSBlZmZvcnQgdG8gY3VzdG9taXplIHRoZSB0ZW1wbGF0ZXMgdG8geW91ciBsaWtpbmcsIHRoZXJlIGlzIGEgZ3JlYXQgZGVhbCBvZiBkYXRhIGF2YWlsYWJsZS48L3A+Cgo8aDM+U3VwcG9ydDwvaDM+CjxwPlRoaXMgbW9kdWxlIGRvZXMgbm90IGluY2x1ZGUgY29tbWVyY2lhbCBzdXBwb3J0LiBIb3dldmVyLCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcmVzb3VyY2VzIGF2YWlsYWJsZSB0byBoZWxwIHlvdSB3aXRoIGl0OjwvcD4KPHVsPgo8bGk+Rm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZSwgRkFRcywgb3IgdG8gZmlsZSBhIEJ1ZyBSZXBvcnQgb3IgYnV5IGNvbW1lcmNpYWwgc3VwcG9ydCwgcGxlYXNlIHZpc2l0IGNhbGd1eVwncwptb2R1bGUgaG9tZXBhZ2UgYXQgPGEgaHJlZj0iaHR0cDovL2NhbGd1eTEwMDAuY29tIj5jYWxndXkxMDAwLmNvbTwvYT4uPC9saT4KPGxpPkFkZGl0aW9uYWwgZGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYWxzbyBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnIj5DTVMgTWFkZSBTaW1wbGUgRm9ydW1zPC9hPi48L2xpPgo8bGk+VGhlIGF1dGhvciwgY2FsZ3V5MTAwMCwgY2FuIG9mdGVuIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSJpcmM6Ly9pcmMuZnJlZW5vZGUubmV0LyNjbXMiPkNNUyBJUkMgQ2hhbm5lbDwvYT4uPC9saT4KPGxpPkxhc3RseSwgeW91IG1heSBoYXZlIHNvbWUgc3VjY2VzcyBlbWFpbGluZyB0aGUgYXV0aG9yIGRpcmVjdGx5LjwvbGk+ICAKPC91bD4KPGgzPlJlcXVpcmVtZW50czwvaDM+Cjx1bD4KICA8bGk+UEhQIDUuMys8L2xpPgogIDxsaT5jdXJsIGV4dGVuc2lvbnM8L2xpPgogIDxsaT5qc29uIGV4dGVuc2lvbnM8L2xpPgogIDxsaT5TaW1wbGVYTUwgc3VwcG9ydDwvbGk+CiAgPGxpPlZhbGlkIENSRUEgYWNjb3VudDwvbGk+CjwvdWw+CjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPgo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMDgsIFJvYmVydCBDYW1wYmVsIDxhIGhyZWY9Im1haWx0bzpjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnIj4mbHQ7Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZyZndDs8L2E+LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+CjxwPlRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cml0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CnRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCihhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uPC9wPgo8cD5Ib3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlCmluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIApzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLjwvcD4KPHA+VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCmJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKT3IgcmVhZCBpdCA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiPm9ubGluZTwvYT48L3A+CjxoMz5EZXBlbmRlbmNpZXM8L2gzPjx1bD48bGk+Q0dFeHRlbnNpb25zID0mZ3Q7IDEuMzguNDwvbGk+PGxpPkNHSm9iTWdyID0mZ3Q7IDEuMi4xNTwvbGk+PC91bD48aDM+UGFyYW1ldGVyczwvaDM+PHVsPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGxhbmc9ImVuX1VTIiAtIFBhcmFtZXRlciBpcyB1c2VkIHRvIHNwZWNpZnkgd2hhdCBsYW5ndWFnZSB0byB1c2UgZm9yIGRpc3BsYXkgb24gdGhlIGZyb250ZW5kLiBOb3QgYWxsIG1vZHVsZXMgc3VwcG9ydCBvciBuZWVkIHRoaXMuPC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiB1bml0PSIiIC0gQXBwbGljYWJsZSBvbmx5IHRvIHRoZSBkZXRhaWwgYWN0aW9uLCB0aGlzIHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIGlkZW50aWZpZXIgb2YgdGhlIGxpc3RpbmcgdG8gZGlzcGxheTwvbGk+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gbGltaXQ9IjEwIiAtIEFwcGxpY2FibGUgb25seSB0byB0aGUgZGVmYXVsdCBzdW1tYXJ5IGFjdGlvbiwgdGhpcyBwYXJhbWV0ZXIgYWxsb3dzIHNwZWNpZnlpbmcgdGhlIG51bWJlciBvZiBsaXN0aW5ncyB0byBkaXNwbGF5IGluIGVhY2ggcGFnZTwvbGk+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gcGFnZT0iMSIgLSBBcHBsaWNhYmxlIG9ubHkgdG8gdGhlIGRlZmF1bHQgc3VtbWFyeSBhY3Rpb24sIHRoaXMgcGFyYW1ldGVyIGFsbG93cyBzcGVjaWZ5aW5nIHRoZSBwYWdlIG51bWJlciAoc2VlIHRoZSBsaW1pdCBwYXJhbWV0ZXIpPC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBwcm9wZXJ0eWNsYXNzPSIiIC0gQXBwbGljYWJsZSBvbmx5IHRvIHRoZSBkZWZhdWx0IHN1bW1hcnkgYWN0aW9uLCB0aGlzIHBhcmFtZXRlciBhbGxvd3MgZmlsdGVyaW5nIGJ5IHByb3BlcnR5IGNsYXNzLiAgVmFsaWQgdmFsdWVzIGFyZSBsYW5kLHJlc2lkZW50aWFsLGNvbW1lcmNpYWw8L2xpPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IHJlYWx0b3I9IiIgLSBBcHBsaWNhYmxlIG9ubHkgdG8gdGhlIGRlZmF1bHQgc3VtbWFyeSBhY3Rpb24sIHRoaXMgcGFyYW1ldGVyIGFsbG93cyBmaWx0ZXJpbmcgdGhlIHJlc3VsdHMgYnkgYSBzdWJzdHJpbmcgb2YgdGhlIHJlYWx0b3IgbmFtZS4gIGkuZTogcmVhbHRvcj0mcXVvdDtTbWl0aCZxdW90OzwvbGk+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gc3VtbWFyeXRlbXBsYXRlPSIiIC0gQXBwbGljYWJsZSBvbmx5IHRvIHRoZSBkZWZhdWx0IHN1bW1hcnkgYWN0aW9uLCB0aGlzIHBhcmFtZXRlciBhbGxvd3Mgc3BlY2lmeWluZyBhIG5vbiBkZWZhdWx0IHN1bW1hcnkgdGVtcGxhdGU8L2xpPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGRldGFpbHBhZ2U9IiIgLSBBcHBsaWNhYmxlIG9ubHkgdG8gdGhlIHN1bW1hcnkgYWN0aW9uLCB0aGlzIHBhcmFtZXRlciBhbGxvd3Mgc3BlY2lmeWluZyBhIGRpZmZlcmVudCBwYWdlIChhbmQgdGhlcmVmb3JlIHRlbXBsYXRlKSBmb3IgdGhlIGRldGFpbCB2aWV3PC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBkZXRhaWx0ZW1wbGF0ZT0iIiAtIEFwcGxpY2FibGUgb25seSB0byB0aGUgZGV0YWlsIGFjdGlvbiwgdGhpcyBwYXJhbWV0ZXIgYWxsb3dzIHNwZWNpZnlpbmcgYSBub24gZGVmYXVsdCBkZXRhaWwgdGVtcGxhdGU8L2xpPjwvdWw+]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBjYWxndXkxMDAwICZsdDtjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnJmd0OzxiciAvPjxiciAvPlZlcnNpb246IDEuMi4xPGJyIC8+PGJyIC8+Q2hhbmdlIEhpc3Rvcnk6PGJyIC8+PHVsPgogIDxsaT5WZXJzaW9uIDEuMCAtIGluaXRpYWwgcmVsZWFzZS48L2xpPgogIDxsaT5WZXJzaW9uIDEuMSAtIG9wdGlvbmFsIGZpbHRlcmluZyBieSByZWFsdG9yIGFuZCBwcm9wZXJ0eWNsYXNzLjwvbGk+CiAgPGxpPlZlcnNpb24gMS4yIC0gc29ydGluZyBieSBhc2NlbmRpbmcgcHJpY2UuPC9saT4KPC91bD48YnIgLz4=]]></about>
	<description><![CDATA[-- Missing Languagestring - module:CREA_Simple string:moddescription--]]></description>
	<requires>
	  <requiredname>CGExtensions</requiredname>
	  <requiredversion>1.38.4</requiredversion>
	</requires>
	<requires>
	  <requiredname>CGJobMgr</requiredname>
	  <requiredversion>1.2.15</requiredversion>
	</requires>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.admin_classifications_tab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENSRUFfU2ltcGxlIChjKSAyMDEzIGJ5IFJvYmVydCBDYW1wYmVsbCAKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBwcm92aWRlIGEgc2ltcGxlIGludGVyZmFjZQojICB0byB0aGUgQ1JFQSB3ZWIgc2VydmljZS4KIyAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIAojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICEkZ0NtcyApIGV4aXQ7CmlmKCAhJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKSApIHJldHVybjsKJHRoaXMtPlNldEN1cnJlbnRUYWIoJ2NsYXNzaWZpY2F0aW9ucycpOwoKJF9wYXJzZV90eXBlcyA9IGZ1bmN0aW9uKCRwYXJhbXMsJGtleSwkY2xhc3MpIHsKICAkb3V0ID0gbnVsbDsKICAkY29tbWVyY2lhbF90eXBlcyA9IHRyaW0oZ2V0X3BhcmFtZXRlcl92YWx1ZSgkcGFyYW1zLCRrZXkpKTsKICBpZiggJGNvbW1lcmNpYWxfdHlwZXMgKSB7CiAgICAkdG1wID0gZXhwbG9kZSgiXG4iLCRjb21tZXJjaWFsX3R5cGVzKTsKICAgIGlmKCBpc19hcnJheSgkdG1wKSAmJiBjb3VudCgkdG1wKSApIHsKICAgICAgJG91dCA9IGFycmF5KCk7CiAgICAgIGZvcmVhY2goICR0bXAgYXMgJiRsaW5lICkgewoJJGxpbmUgPSB0cmltKCRsaW5lKTsKCWlmKCAkbGluZSApICRvdXRbXSA9ICRsaW5lOwogICAgICB9CiAgICAgICRvdXQgPSBzZXJpYWxpemUoJG91dCk7CiAgICB9CiAgfQoKICAkcHJlZiA9ICdjbGFzc2lmaWNhdGlvbl8nLiRjbGFzczsKICAkbW9kID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdDUkVBX1NpbXBsZScpOwogIGlmKCAhJG91dCApIHsKICAgICRtb2QtPlJlbW92ZVByZWZlcmVuY2UoJHByZWYpOwogIH0KICBlbHNlIHsKICAgICRtb2QtPlNldFByZWZlcmVuY2UoJHByZWYsJG91dCk7CiAgfQp9OwoKJF9wYXJzZV90eXBlcygkcGFyYW1zLCdjb21tZXJjaWFsX3R5cGVzJywnY29tbWVyY2lhbCcpOwokX3BhcnNlX3R5cGVzKCRwYXJhbXMsJ3Jlc2lkZW50aWFsX3R5cGVzJywncmVzaWRlbnRpYWwnKTsKJF9wYXJzZV90eXBlcygkcGFyYW1zLCdsYW5kX3R5cGVzJywnbGFuZCcpOwoKJHRoaXMtPlJlZGlyZWN0VG9UYWIoJGlkKTsKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/action.admin_clear.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENSRUFfU2ltcGxlIChjKSAyMDEzIGJ5IFJvYmVydCBDYW1wYmVsbCAKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBwcm92aWRlIGEgc2ltcGxlIGludGVyZmFjZQojICB0byB0aGUgQ1JFQSB3ZWIgc2VydmljZS4KIyAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIAojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICEkZ0NtcyApIGV4aXQ7CmlmKCAhJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKSApIHJldHVybjsKJHRoaXMtPlNldEN1cnJlbnRUYWIoJ3NldHRpbmdzJyk7CgpjZ2VfZGlyOjpyZWN1cnNpdmVfcm1kaXIoY3JlYV91dGlsczo6Z2V0X2NhY2hlX2RpcigpKTsKCiR0aGlzLT5TZXRNZXNzYWdlKCR0aGlzLT5MYW5nKCdtc2dfY2FjaGVjbGVhcmVkJykpOwokdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCRpZCk7CgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.admin_settings_tab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENSRUFfU2ltcGxlIChjKSAyMDEzIGJ5IFJvYmVydCBDYW1wYmVsbCAKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBwcm92aWRlIGEgc2ltcGxlIGludGVyZmFjZQojICB0byB0aGUgQ1JFQSB3ZWIgc2VydmljZS4KIyAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIAojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICEkZ0NtcyApIGV4aXQ7CmlmKCAhJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFRlbXBsYXRlcycpICkgcmV0dXJuOwokdGhpcy0+U2V0Q3VycmVudFRhYignc2V0dGluZ3MnKTsKCmlmKCBpc3NldCgkcGFyYW1zWyd0ZXN0J10pICkgewogIHRyeSB7CiAgICAkcmV0cyA9IG5ldyBjcmVhX3JldHMoKTsKICAgICR0aGlzLT5TZXRNZXNzYWdlKCR0aGlzLT5MYW5nKCdtc2dfdGVzdHBhc3NlZCcpKTsKICAgICR0aGlzLT5SZWRpcmVjdFRvVGFiKCRpZCk7CiAgfQogIGNhdGNoKCBFeGNlcHRpb24gJGUgKSB7CiAgICAkdGhpcy0+U2V0RXJyb3IoJGUtPkdldE1lc3NhZ2UoKSk7CiAgICAkdGhpcy0+UmVkaXJlY3RUb1RhYigkaWQpOwogIH0KfQplbHNlIGlmKCBpc3NldCgkcGFyYW1zWydzdWJtaXQnXSkgKSB7CiAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2NyZWFfdXNlcm5hbWUnLHRyaW0oJHBhcmFtc1snY3JlYV91c2VybmFtZSddKSk7CiAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2NyZWFfcGFzc3dvcmQnLHRyaW0oJHBhcmFtc1snY3JlYV9wYXNzd29yZCddKSk7CiAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2RldGFpbHBhZ2UnLHRyaW0oJHBhcmFtc1snZGV0YWlscGFnZSddKSk7CiAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ3VybHByZWZpeCcsdHJpbSgkcGFyYW1zWyd1cmxwcmVmaXgnXSkpOwogICRuID0gKGludCkkcGFyYW1zWydjYWNoZV9saWZldGltZSddOwogICRuID0gbWF4KDEsbWluKDI0LCRuKSk7CiAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2NhY2hlX2xpZmV0aW1lJywkbik7CgogICRjZ2pvYm1nciA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnQ0dKb2JNZ3InLCcxLjIuMTUnKTsKICBpZiggIWlzX29iamVjdCgkY2dqb2JtZ3IpICkgewogICAgJHRoaXMtPlNldEVycm9yKCR0aGlzLT5MYW5nKCdlcnJvcl9jZ2pvYm1ncicpKTsKICAgICR0aGlzLT5SZWRpcmVjdFRvVGFiKCRpZCk7CiAgfQoKICAvLyB1cGRhdGUgam9icwogICRqb2JzID0gY2dqb2JtZ3JfdXRpbHM6OmdldF9qb2JzKGFycmF5KCduYW1lJz0+JHRoaXMtPkdldE5hbWUoKS4nKicpKTsKICBpZiggaXNfYXJyYXkoJGpvYnMpICYmIGNvdW50KCRqb2JzKSApIHsKICAgIGZvcmVhY2goICRqb2JzIGFzICYkam9iICkgewogICAgICAkam9iLT5kZWxldGUoKTsKICAgIH0KICB9CgogICRqb2IgPSBuZXcgY2dqb2JtZ3Jfam9iKCR0aGlzLT5HZXROYW1lKCkuJyB1cGRhdGUgY2FjaGUnKTsKICAkam9iLT5zZXRfcmVjdXJfaW50ZXJ2YWwoJG4gKiA2MCk7CiAgJHRhc2sgPSBuZXcgY2dqb2JtZ3Jfc2ltcGxldGFzaygnY2xlYXIgY2FjaGUnKTsKICAkdGFzay0+c2V0X2Z1bmN0aW9uKGFycmF5KCdjcmVhX3Rhc2tzJywnY2xlYXJfY2FjaGUnKSk7CiAgJGpvYi0+YWRkX3Rhc2soJHRhc2spOwoKICAkdGFzayA9IG5ldyBjZ2pvYm1ncl9pdGVyYXRpdmV0YXNrKCR0aGlzLT5HZXROYW1lKCkuJyBwcm9jZXNzIG9uZSBwcm9wZXJ0eScpOwogICR0YXNrLT5zZXRfZnVuY3Rpb24oYXJyYXkoJ2NyZWFfdGFza3MnLCdwcm9jZXNzX29uZV9saXN0aW5nJykpOwogICRqb2ItPmFkZF90YXNrKCR0YXNrKTsKCiAgJGpvYi0+c2F2ZSgpOwoKICAvLyBkb25lCiAgJHRoaXMtPlNldE1lc3NhZ2UoJHRoaXMtPkxhbmcoJ21zZ19wcmVmc3NhdmVkJykpOwogICR0aGlzLT5SZWRpcmVjdFRvVGFiKCRpZCk7Cn0KCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.admin_update.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENSRUFfU2ltcGxlIChjKSAyMDEzIGJ5IFJvYmVydCBDYW1wYmVsbCAKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBwcm92aWRlIGEgc2ltcGxlIGludGVyZmFjZQojICB0byB0aGUgQ1JFQSB3ZWIgc2VydmljZS4KIyAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIAojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICEkZ0NtcyApIGV4aXQ7CmlmKCAhJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFRlbXBsYXRlcycpICkgcmV0dXJuOwokdGhpcy0+U2V0Q3VycmVudFRhYignc2V0dGluZ3MnKTsKCnRyeSB7CiAgc2V0X3RpbWVfbGltaXQoOTk5OSk7CiAgLy9jcmVhX3V0aWxzOjpjbGVhcl9jYWNoZSgpOwogIGxpc3QoJGFkZF9saXN0LCR1cGRhdGVfbGlzdCwkZGVsZXRlX2xpc3QpID0gY3JlYV91dGlsczo6Z2V0X3JldmlzaW9ucygpOwogIGlmKCBjb3VudCgkYWRkX2xpc3QpID09IDAgJiYgY291bnQoJHVwZGF0ZV9saXN0KSA9PSAwICYmIGNvdW50KCRkZWxldGVfbGlzdCkgPT0gMCApIHsKICAgIHRocm93IG5ldyBFeGNlcHRpb24oJHRoaXMtPkxhbmcoJ2Vycm9yX25vdXBkYXRlc25lZWRlZCcpKTsKICB9CiAgJGRyaXZlciA9IGNyZWFfdXRpbHM6OmdldF9jYWNoZV9kcml2ZXIoKTsKICAkZmlsZV9tYXN0ZXJsaXN0ID0gJGRyaXZlci0+Z2V0KCdtYXN0ZXJfbGlzdCcpOwogICRmaWxlX21ldGFkYXRhID0gJGRyaXZlci0+Z2V0KCdtZXRhZGF0YScpOwogIGlmKCAhJGZpbGVfbWV0YWRhdGEgKSAkZmlsZV9tZXRhZGF0YSA9IGFycmF5KCk7CgogICRjaGFuZ2VkID0gRkFMU0U7CiAgJHJldHMgPSBuZXcgY3JlYV9yZXRzOwogIGlmKCBpc19hcnJheSgkYWRkX2xpc3QpICYmIGNvdW50KCRhZGRfbGlzdCkgKSB7CiAgICAkYWRkX2xpc3QgPSBhcnJheV9zbGljZSgkYWRkX2xpc3QsMCwxMDApOwogICAgZm9yZWFjaCggJGFkZF9saXN0IGFzICRyZWMgKSB7CiAgICAgICRpZCA9ICRyZWNbJ0lEJ107CgogICAgICAvLyBnZXQgdGhlIHByb3BlcnR5CiAgICAgICRycyA9ICRyZXRzLT5nZXRfcHJvcGVydHkoJGlkKTsKICAgICAgaWYoICEkcnMgKSB7CglhdWRpdCgnJywkdGhpcy0+R2V0TmFtZSgpLidQcm9ibGVtIHJldHJpZXZpbmcgZGV0YWlscyBmb3IgcHJvcGVydHkgJy4kaWQpOwoJY29udGludWU7CiAgICAgIH0KICAgICAgJHByb3AgPSBjcmVhX3V0aWxzOjphZGp1c3RfcHJvcGVydHkoJHJzLT5maWVsZHMpOwoKICAgICAgaWYoICEkcHJvcCApIHsKCWF1ZGl0KCcnLCR0aGlzLT5HZXROYW1lKCkuJ1Byb2JsZW0gcmV0cmlldmluZyBkZXRhaWxzIGZvciBwcm9wZXJ0eSAnLiRpZCk7Cgljb250aW51ZTsKICAgICAgfQoKICAgICAgLy8gc2V0IHRoZSBwcm9wZXJ0eQogICAgICAkZHJpdmVyLT5zZXQoJGlkLCRwcm9wKTsKCiAgICAgIC8vIHNldCB0aGUgbWV0YWRhdGEKICAgICAgJG1ldGEgPSBhcnJheSgpOwogICAgICAkbWV0YVsnaWQnXSA9ICRpZDsKICAgICAgaWYoIGlzc2V0KCRwcm9wWydBZ2VudERldGFpbHMnXVsnTmFtZSddKSApICRtZXRhWydhZ2VudCddID0gJHByb3BbJ0FnZW50RGV0YWlscyddWydOYW1lJ107CiAgICAgIGlmKCBpc3NldCgkcHJvcFsnUHJpY2UnXSkgKSAkbWV0YVsncHJpY2UnXSA9ICRwcm9wWydQcmljZSddOwogICAgICBpZiggaXNzZXQoJHByb3BbJ1Byb3BlcnR5VHlwZSddKSApIHsKCSRtZXRhWydwcm9wZXJ0eXR5cGUnXSA9ICRwcm9wWydQcm9wZXJ0eVR5cGUnXTsKCSRtZXRhWydwcm9wZXJ0eWNsYXNzJ10gPSBjcmVhX3V0aWxzOjpnZXRfcHJvcGVydHljbGFzcygkbWV0YVsncHJvcGVydHl0eXBlJ10pOwogICAgICB9CiAgICAgIGlmKCBjb3VudCgkbWV0YSkgKSAkZmlsZV9tZXRhZGF0YVskaWRdID0gJG1ldGE7CgogICAgICAvLyBnZXQgdGhlIGltYWdlcwogICAgICAkaW1hZ2VzID0gJHJldHMtPmdldF9waG90b3MoJGlkKTsKICAgICAgY3JlYV91dGlsczo6c3RvcmVfcGhvdG9zKCRpZCwkaW1hZ2VzKTsKCiAgICAgIC8vIGFkZCB0aGUgaXRlbSB0byB0aGUgbWFzdGVyIGluZGV4CiAgICAgICRmaWxlX21hc3Rlcmxpc3RbJGlkXSA9ICRyZWM7CiAgICAgICRjaGFuZ2VkID0gVFJVRTsKICAgIH0KICB9CgogIGlmKCBpc19hcnJheSgkdXBkYXRlX2xpc3QpICYmIGNvdW50KCR1cGRhdGVfbGlzdCkgKSB7CiAgICBmb3JlYWNoKCAkdXBkYXRlX2xpc3QgYXMgJHJlYyApIHsKICAgICAgJGlkID0gJHJlY1snSUQnXTsKCiAgICAgIC8vIGdldCB0aGUgcHJvcGVydHkKICAgICAgJHJzID0gJHJldHMtPmdldF9wcm9wZXJ0eSgkaWQpOwogICAgICBpZiggISRycyApIHsKCWF1ZGl0KCcnLCR0aGlzLT5HZXROYW1lKCkuJ1Byb2JsZW0gcmV0cmlldmluZyBkZXRhaWxzIGZvciBwcm9wZXJ0eSAnLiRpZCk7Cgljb250aW51ZTsKICAgICAgfQogICAgICAkcHJvcCA9IGNyZWFfdXRpbHM6OmFkanVzdF9wcm9wZXJ0eSgkcnMtPmZpZWxkcyk7CiAgICAgIGlmKCAhJHByb3AgKSB7CglhdWRpdCgnJywkdGhpcy0+R2V0TmFtZSgpLidQcm9ibGVtIHJldHJpZXZpbmcgZGV0YWlscyBmb3IgcHJvcGVydHkgJy4kaWQpOwoJY29udGludWU7CiAgICAgIH0KCiAgICAgIC8vIHNldCB0aGUgcHJvcGVydHkKICAgICAgJGRyaXZlci0+c2V0KCRpZCwkcHJvcCk7CgogICAgICAvLyBnZXQgdGhlIGltYWdlcwogICAgICB0cnkgewoJJGltYWdlcyA9ICRyZXRzLT5nZXRfcGhvdG9zKCRpZCk7CgkkZGlyID0gY3JlYV91dGlsczo6Z2V0X2NhY2hlX2RpcigkaWQpOwoJY2dlX2Rpcjo6cmVjdXJzaXZlX3JtZGlyKCRkaXIpOwoJY3JlYV91dGlsczo6c3RvcmVfcGhvdG9zKCRpZCwkaW1hZ2VzKTsKICAgICAgfQogICAgICBjYXRjaCggRXhjZXB0aW9uICRlICkgewoJYXVkaXQoJGlkLCR0aGlzLT5HZXROYW1lKCksJ1Byb2JsZW0gbWFuYWdpbmcgaW1hZ2VzIGZvciBsaXN0aW5nICcuJGlkKTsKICAgICAgfQoKICAgICAgLy8gdXBkYXRlIHRoZSBpdGVtIGluIHRoZSBtYXN0ZXIgaW5kZXgKICAgICAgJGZpbGVfbWFzdGVybGlzdFskaWRdID0gJHJlYzsKICAgICAgJGNoYW5nZWQgPSBUUlVFOwogICAgfQogIH0KCiAgaWYoIGlzX2FycmF5KCRkZWxldGVfbGlzdCkgJiYgY291bnQoJGRlbGV0ZV9saXN0KSApIHsKICAgIGZvcmVhY2goICRkZWxldGVfbGlzdCBhcyAkcmVjICkgewogICAgICAkaWQgPSAkcmVjWydJRCddOwoKICAgICAgLy8gZGVsZXRlIHRoZSBwcm9wZXJ0eQogICAgICBjcmVhX3V0aWxzOjpkZWxldGVfcmVjb3JkKCRpZCk7CgogICAgICB1bnNldCgkZmlsZV9tZXRhZGF0YVskaWRdKTsKCiAgICAgIC8vIGRlbGV0ZSB0aGUgaXRlbSBmcm9tIHRoZSBtYXN0ZXIgaW5kZXguCiAgICAgIHVuc2V0KCRmaWxlX21hc3Rlcmxpc3RbJGlkXSk7CiAgICAgICRjaGFuZ2VkID0gVFJVRTsKICAgIH0KICB9CgogIGlmKCAkY2hhbmdlZCApIHsKICAgICRkcml2ZXItPnNldCgnbWFzdGVyX2xpc3QnLCRmaWxlX21hc3Rlcmxpc3QpOwogICAgJGRyaXZlci0+c2V0KCdtZXRhZGF0YScsJGZpbGVfbWV0YWRhdGEpOwogIH0KCiAgJHRoaXMtPlNldE1lc3NhZ2UoJHRoaXMtPkxhbmcoJ21zZ19jYWNoZXVwZGF0ZWQnKSk7Cn0KY2F0Y2goIEV4Y2VwdGlvbiAkZSApIHsKICBhdWRpdCgnJywkdGhpcy0+R2V0TmFtZSgpLCRlLT5HZXRNZXNzYWdlKCkpOwogICR0aGlzLT5TZXRFcnJvcigkZS0+R2V0TWVzc2FnZSgpKTsKfQoKJHRoaXMtPlJlZGlyZWN0VG9BZG1pblRhYigpOwoKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENSRUFfU2ltcGxlIChjKSAyMDEzIGJ5IFJvYmVydCBDYW1wYmVsbCAKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBwcm92aWRlIGEgc2ltcGxlIGludGVyZmFjZQojICB0byB0aGUgQ1JFQSB3ZWIgc2VydmljZS4KIyAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIAojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICEkZ0NtcyApIGV4aXQ7CgovLyBnZXQgdGhlIG1hc3RlciBsaXN0CiRwcm9wZXJ0eWNsYXNzPSB0cmltKGdldF9wYXJhbWV0ZXJfdmFsdWUoJHBhcmFtcywncHJvcGVydHljbGFzcycpKTsKJHJlYWx0b3IgPSBnZXRfcGFyYW1ldGVyX3ZhbHVlKCRwYXJhbXMsJ3JlYWx0b3InKTsKCnRyeSB7CiAgJGRyaXZlciA9IGNyZWFfdXRpbHM6OmdldF9jYWNoZV9kcml2ZXIoMCk7CiAgJG1hc3Rlcl9saXN0ID0gJGRyaXZlci0+Z2V0KCdtYXN0ZXJfbGlzdCcpOwogICRtZXRhZGF0YSA9ICRkcml2ZXItPmdldCgnbWV0YWRhdGEnKTsKCiAgaWYoICFpc19hcnJheSgkbWFzdGVyX2xpc3QpIHx8IGNvdW50KCRtYXN0ZXJfbGlzdCkgPT0gMCApIHRocm93IG5ldyBFeGNlcHRpb24oJHRoaXMtPkxhbmcoJ2Vycm9yX2NhY2hlZW1wdHknKSk7CiAgaWYoICFpc19hcnJheSgkbWV0YWRhdGEpIHx8IGNvdW50KCRtZXRhZGF0YSkgPT0gMCApIHRocm93IG5ldyBFeGNlcHRpb24oJHRoaXMtPkxhbmcoJ2Vycm9yX2NhY2hlZW1wdHknKSk7CgogICRkZXRhaWxwYWdlID0gJHJldHVybmlkOwogIGlmKCBpc3NldCgkcGFyYW1zWydkZXRhaWxwYWdlJ10pICkgewogICAgJHRtcCA9ICR0aGlzLT5yZXNvbHZlX2FsaWFzX29yX2lkKCRwYXJhbXNbJ2RldGFpbHBhZ2UnXSk7CiAgICBpZiggJHRtcCApICRkZXRhaWxwYWdlID0gJHRtcDsKICB9CgogIC8vIHNvcnQgdGhlIG1ldGFkYXRhIGJ5IGRlc2NlbmRpbmcgcHJpY2UKICB1YXNvcnQoJG1ldGFkYXRhLGZ1bmN0aW9uKCRhLCRiKSB7CiAgICBpZiggaXNzZXQoJGFbJ3ByaWNlJ10pICYmICRhWydwcmljZSddICYmIGlzc2V0KCRiWydwcmljZSddKSAmJiAkYlsncHJpY2UnXSApIHsKICAgICAgJHRfYSA9IGZsb2F0dmFsKCRhWydwcmljZSddKTsKICAgICAgJHRfYiA9IGZsb2F0dmFsKCRiWydwcmljZSddKTsKICAgICAgaWYoICR0X2EgPCAkdF9iICkgcmV0dXJuIDE7CiAgICAgIGlmKCAkdF9hID4gJHRfYiApIHJldHVybiAtMTsKICAgIH0KICAgIHJldHVybiAwOwogIH0pOwogIAogIC8vIG1hc3RlciBpZCBsaXN0CiAgJGlkbGlzdCA9IGFycmF5X2tleXMoJG1ldGFkYXRhKTsKCiAgLy8gZmlsdGVyIGlkIGxpc3QKICBpZiggJHByb3BlcnR5Y2xhc3MgKSB7CiAgICAvLyBwcm9wZXJ0eWNsYXNzIHNwZWNpZmllZAogICAgJHByb3BlcnR5Y2xhc3MgPSBzdHJ0b2xvd2VyKCRwcm9wZXJ0eWNsYXNzKTsKICAgIHN3aXRjaCggJHByb3BlcnR5Y2xhc3MgKSB7CiAgICBjYXNlICdyZXMnOgogICAgY2FzZSAncmVzaWRlbnRpYWwnOgogICAgICAkcHJvcGVydHljbGFzcyA9IGNyZWFfdXRpbHM6OkNMQVNTX1JFU0lERU5USUFMOwogICAgICBicmVhazsKICAgIGNhc2UgJ2NvbSc6CiAgICBjYXNlICdjb21tZXJjaWFsJzoKICAgICAgJHByb3BlcnR5Y2xhc3MgPSBjcmVhX3V0aWxzOjpDTEFTU19DT01NRVJDSUFMOwogICAgICBicmVhazsKICAgIGNhc2UgJ2xhbmQnOgogICAgICAkcHJvcGVydHljbGFzcyA9IGNyZWFfdXRpbHM6OkNMQVNTX0xBTkQ7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigkdGhpcy0+TGFuZygnZXJyb3JfaW52YWxpZHBhcmFtJywncHJvcGVydHljbGFzcycpKTsKICAgIH0KCiAgICAvLyBpbmNsdWRlIG9ubHkgZW50cmllcyB0aGF0IG1hdGNoIHRoZSBzcGVjaWZpZWQgcHJvcGVydHljbGFzcy4KICAgICRpZGxpc3QgPSBhcnJheSgpOwogICAgZm9yZWFjaCggJG1ldGFkYXRhIGFzICRpZCA9PiAkbWV0YSApIHsKICAgICAgaWYoIGlzc2V0KCRtZXRhWydwcm9wZXJ0eWNsYXNzJ10pICYmICRtZXRhWydwcm9wZXJ0eWNsYXNzJ10gPT0gJHByb3BlcnR5Y2xhc3MgKSAkaWRsaXN0W10gPSAkaWQ7CiAgICB9CiAgfQoKICBpZiggJHJlYWx0b3IgKSB7CiAgICAvLyBpbmNsdWRlIG9ubHkgZW50cmllcyB0aGF0IG1hdGNoIHRoZSBzcGVjaWZpZWQgYWdlbnQuCiAgICAkbmV3X2lkbGlzdCA9IGFycmF5KCk7CiAgICBmb3JlYWNoKCAkbWV0YWRhdGEgYXMgJGlkID0+ICRtZXRhICkgewogICAgICBpZiggaXNzZXQoJG1ldGFbJ2FnZW50J10pICYmIHN0cnBvcygkbWV0YVsnYWdlbnQnXSwkcmVhbHRvcikgIT09IEZBTFNFICkgewoJaWYoIGluX2FycmF5KCRpZCwkaWRsaXN0KSApICRuZXdfaWRsaXN0W10gPSAkaWQ7CiAgICAgIH0KICAgIH0KICAgICRpZGxpc3QgPSAkbmV3X2lkbGlzdDsKICB9CiAKICAkbGltaXQgPSBnZXRfcGFyYW1ldGVyX3ZhbHVlKCRwYXJhbXMsJ2xpbWl0JywxMCk7CiAgJGxpbWl0ID0gbWF4KDEsbWluKGNvdW50KCRpZGxpc3QpLCRsaW1pdCkpOwogICRwYWdlID0gZ2V0X3BhcmFtZXRlcl92YWx1ZSgkcGFyYW1zLCdwYWdlJywxKTsKICAkbnBhZ2VzID0gY2VpbChjb3VudCgkaWRsaXN0KS8kbGltaXQpOwogICRwYWdlID0gbWF4KDEsbWluKCRucGFnZXMsJHBhZ2UpKTsKICAkb2Zmc2V0ID0gKGludCkoKCRwYWdlIC0gMSkgKiAkbGltaXQpOwoKICAkcGFnaW5hdGlvbiA9IGFycmF5KCk7CiAgJHBhZ2luYXRpb25bJ251bV9wYWdlcyddID0gJG5wYWdlczsKICAkcGFnaW5hdGlvblsndG90YWwnXSA9IGNvdW50KCRpZGxpc3QpOwogICRwYWdpbmF0aW9uWydwYWdlJ10gPSAkcGFnZTsKICAkcGFnaW5hdGlvblsnb2Zmc2V0J10gPSAkb2Zmc2V0OwogIGlmKCAkbnBhZ2VzID4gMSApIHsKICAgICRwYWdpbmF0aW9uWydwYWdlX2xpbmt0cyddID0gYXJyYXkoKTsKICAgIGZvciggJGkgPSAwOyAkaSA8ICRucGFnZXM7ICRpKysgKSB7CiAgICAgICRwYXJtcyA9IGFycmF5KCdwYWdlJz0+JGkrMSk7CiAgICAgIGlmKCBpc3NldCgkcGFyYW1zWydsaW1pdCddKSApICRwYXJtc1snbGltaXQnXSA9ICRwYXJhbXNbJ2xpbWl0J107CiAgICAgIGlmKCBpc3NldCgkcGFyYW1zWydkZXRhaWxwYWdlJ10pICkgJHBhcm1zWydkZXRhaWxwYWdlJ10gPSAkcGFyYW1zWydkZXRhaWxwYWdlJ107CiAgICAgIGlmKCBpc3NldCgkcGFyYW1zWydkZXRhaWx0ZW1wbGF0ZSddKSApICRwYXJtc1snZGV0YWlsdGVtcGxhdGUnXSA9ICRwYXJhbXNbJ2RldGFpbHRlbXBsYXRlJ107CiAgICAgIGlmKCBpc3NldCgkcGFyYW1zWydzdW1tYXJ5dGVtcGxhdGUnXSkgKSAkcGFybXNbJ3N1bW1hcnl0ZW1wbGF0ZSddID0gJHBhcmFtc1snc3VtbWFyeXRlbXBsYXRlJ107CiAgICAgIGlmKCBpc3NldCgkcGFyYW1zWydwcm9wZXJ0eWNsYXNzJ10pICkgJHBhcm1zWydwcm9wZXJ0eWNsYXNzJ10gPSAkcGFyYW1zWydwcm9wZXJ0eWNsYXNzJ107CiAgICAgIGlmKCBpc3NldCgkcGFyYW1zWydyZWFsdG9yJ10pICkgJHBhcm1zWydyZWFsdG9yJ10gPSAkcGFyYW1zWydyZWFsdG9yJ107CiAgICAgICRwYWdpbmF0aW9uWydwYWdlX2xpbmtzJ11bJGkrMV0gPSAkdGhpcy0+Y3JlYXRlX3VybCgkaWQsJ2RlZmF1bHQnLCRyZXR1cm5pZCwkcGFybXMpOwogICAgfQogIH0KICAkc21hcnR5LT5hc3NpZ24oJ3BhZ2luYXRpb24nLCRwYWdpbmF0aW9uKTsKCiAgLy8gZ2V0IHdoaWNoIHVuaXRzIHdlJ3JlIGdvaW5nIHRvIGRpc3BsYXkKICAkdW5pdHMgPSBhcnJheV9zbGljZSgkaWRsaXN0LCRvZmZzZXQsJGxpbWl0KTsKCiAgJG91dCA9IGFycmF5KCk7CiAgZm9yZWFjaCggJHVuaXRzIGFzICR1bml0aWQgKSB7CiAgICAkcmVjID0gJGRyaXZlci0+Z2V0KCR1bml0aWQpOwogICAgaWYoICFpc19hcnJheSgkcmVjKSApIHsKICAgICAgLy8gb29wcy4uLgogICAgICBhdWRpdCgkdW5pdGlkLCR0aGlzLT5HZXROYW1lKCksJ1Byb2JsZW0gcmVhZGluZyByZWNvcmQgJy4kdW5pdGlkKTsKICAgICAgY29udGludWU7CiAgICB9CgogICAgJHJlY1snX2RldGFpbHVybCddID0gY3JlYV91dGlsczo6Y3JlYXRlX2RldGFpbF91cmwoJHVuaXRpZCwkcmVjWydfbmFtZSddLCRkZXRhaWxwYWdlKTsKICAgICRkaXIgPSBjcmVhX3V0aWxzOjpnZXRfY2FjaGVfZGlyKCR1bml0aWQpOwogICAgaWYoIGlzX2RpcigkZGlyKSApIHsKICAgICAgJHJlY1snX2ltYWdlZGlyJ10gPSAkZGlyOwogICAgICAkcmVjWydfaW1hZ2V1cmwnXSA9IGNyZWFfdXRpbHM6OmdldF9jYWNoZV91cmxiYXNlKCR1bml0aWQpOwogICAgICAkZmlsZXMgPSBnbG9iKCRkaXIuJy8qJyk7CiAgICAgIGlmKCBpc19hcnJheSgkZmlsZXMpICYmIGNvdW50KCRmaWxlcykgKSB7CgkkaW1ncyA9IGFycmF5KCk7Cglmb3JlYWNoKCAkZmlsZXMgYXMgJG9uZSApIHsKCSAgJGltZ3NbXSA9IGJhc2VuYW1lKCRvbmUpOwoJfQoJJHJlY1snX2ltYWdlcyddID0gJGltZ3M7CiAgICAgIH0KICAgIH0KICAgICRvdXRbXSA9ICRyZWM7CiAgfQogICRzbWFydHktPmFzc2lnbignbGlzdGluZ3MnLCRvdXQpOwp9CmNhdGNoKCBFeGNlcHRpb24gJGUgKSB7CiAgJHNtYXJ0eS0+YXNzaWduKCdlcnJvcicsMSk7CiAgJHNtYXJ0eS0+YXNzaWduKCdlcnJvcl9tZXNzYWdlJywkZS0+R2V0TWVzc2FnZSgpKTsKfQoKJHN1bW1hcnl0ZW1wbGF0ZSA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdjdXJyZW50X3N1bW1hcnknKTsKJHN1bW1hcnl0ZW1wbGF0ZSA9IGdldF9wYXJhbWV0ZXJfdmFsdWUoJHBhcmFtcywnc3VtbWFyeXRlbXBsYXRlJywkc3VtbWFyeXRlbXBsYXRlKTsKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlRnJvbURhdGFiYXNlKCdzdW1tYXJ5Jy4kc3VtbWFyeXRlbXBsYXRlKTsKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENSRUFfU2ltcGxlIChjKSAyMDEzIGJ5IFJvYmVydCBDYW1wYmVsbCAKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBwcm92aWRlIGEgc2ltcGxlIGludGVyZmFjZQojICB0byB0aGUgQ1JFQSB3ZWIgc2VydmljZS4KIyAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIAojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwoKZWNobyAkdGhpcy0+U3RhcnRUYWJIZWFkZXJzKCk7CmlmKCAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpICkgewogIGVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignc2V0dGluZ3MnLCR0aGlzLT5MYW5nKCdzZXR0aW5ncycpKTsKICBlY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ2NsYXNzaWZpY2F0aW9ucycsJHRoaXMtPkxhbmcoJ2NsYXNzaWZpY2F0aW9ucycpKTsKfQppZiggJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFRlbXBsYXRlcycpICkgewogIGVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignc3VtbWFyeXRlbXBsYXRlcycsJHRoaXMtPkxhbmcoJ3RhYl9zdW1tYXJ5dGVtcGxhdGVzJykpOwogIGVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignZGV0YWlsdGVtcGxhdGVzJywkdGhpcy0+TGFuZygndGFiX2RldGFpbHRlbXBsYXRlcycpKTsKICBlY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ3Byb3RvdHlwZXRlbXBsYXRlcycsJHRoaXMtPkxhbmcoJ3RhYl9wcm90b3R5cGV0ZW1wbGF0ZXMnKSk7Cn0KZWNobyAkdGhpcy0+RW5kVGFiSGVhZGVycygpOwoKZWNobyAkdGhpcy0+U3RhcnRUYWJDb250ZW50KCk7CmlmKCAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpICkgewogIGVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdzZXR0aW5ncycsJHBhcmFtcyk7CiAgaW5jbHVkZShfX0RJUl9fLicvZnVuY3Rpb24uYWRtaW5fc2V0dGluZ3NfdGFiLnBocCcpOwogIGVjaG8gJHRoaXMtPkVuZFRhYigpOwoKICBlY2hvICR0aGlzLT5TdGFydFRhYignY2xhc3NpZmljYXRpb25zJywkcGFyYW1zKTsKICBpbmNsdWRlKF9fRElSX18uJy9mdW5jdGlvbi5hZG1pbl9jbGFzc2lmaWNhdGlvbnNfdGFiLnBocCcpOwogIGVjaG8gJHRoaXMtPkVuZFRhYigpOwp9CmlmKCAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgVGVtcGxhdGVzJykgKSB7CiAgZWNobyAkdGhpcy0+U3RhcnRUYWIoJ3N1bW1hcnl0ZW1wbGF0ZXMnLCRwYXJhbXMpOwogIGluY2x1ZGUoX19ESVJfXy4nL2Z1bmN0aW9uLmFkbWluX3N1bW1hcnl0ZW1wbGF0ZXNfdGFiLnBocCcpOwogIGVjaG8gJHRoaXMtPkVuZFRhYigpOwoKICBlY2hvICR0aGlzLT5TdGFydFRhYignZGV0YWlsdGVtcGxhdGVzJywkcGFyYW1zKTsKICBpbmNsdWRlKF9fRElSX18uJy9mdW5jdGlvbi5hZG1pbl9kZXRhaWx0ZW1wbGF0ZXNfdGFiLnBocCcpOwogIGVjaG8gJHRoaXMtPkVuZFRhYigpOwoKICBlY2hvICR0aGlzLT5TdGFydFRhYigncHJvdG90eXBldGVtcGxhdGVzJywkcGFyYW1zKTsKICBpbmNsdWRlKF9fRElSX18uJy9mdW5jdGlvbi5hZG1pbl9wcm90b3R5cGV0ZW1wbGF0ZXNfdGFiLnBocCcpOwogIGVjaG8gJHRoaXMtPkVuZFRhYigpOwoKfQplY2hvICR0aGlzLT5FbmRUYWJjb250ZW50KCk7CiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.detail.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENSRUFfU2ltcGxlIChjKSAyMDEzIGJ5IFJvYmVydCBDYW1wYmVsbCAKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBwcm92aWRlIGEgc2ltcGxlIGludGVyZmFjZQojICB0byB0aGUgQ1JFQSB3ZWIgc2VydmljZS4KIyAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIAojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICEkZ0NtcyApIGV4aXQ7CgokdW5pdGlkID0gZ2V0X3BhcmFtZXRlcl92YWx1ZSgkcGFyYW1zLCd1bml0Jyk7CmlmKCAhJHVuaXRpZCApIHsKICB0aHJvdyBuZXcgQ21zRXJyb3I0MDRFeGNlcHRpb24oJ0NSRUEgbGlzdGluZyBpZCBub3Qgc3BlY2lmaWVkJyk7Cn0KCiRkcml2ZXIgPSBjcmVhX3V0aWxzOjpnZXRfY2FjaGVfZHJpdmVyKDApOwokcmVjID0gJGRyaXZlci0+Z2V0KCR1bml0aWQpOwppZiggIWlzX2FycmF5KCRyZWMpICkgewogIHRocm93IG5ldyBDbXNFcnJvcjQwNEV4Y2VwdGlvbignQ1JFQSBsaXN0aW5nICcuJHVuaXRpZC4nIG5vdCBmb3VuZCcpOwp9CgokZGlyID0gY3JlYV91dGlsczo6Z2V0X2NhY2hlX2RpcigkdW5pdGlkKTsKaWYoIGlzX2RpcigkZGlyKSApIHsKICAkcmVjWydfaW1hZ2VkaXInXSA9ICRkaXI7CiAgJHJlY1snX2ltYWdldXJsJ10gPSBjcmVhX3V0aWxzOjpnZXRfY2FjaGVfdXJsYmFzZSgkdW5pdGlkKTsKICAkZmlsZXMgPSBnbG9iKCRkaXIuJy8qJyk7CiAgaWYoIGlzX2FycmF5KCRmaWxlcykgJiYgY291bnQoJGZpbGVzKSApIHsKICAgICRpbWdzID0gYXJyYXkoKTsKICAgIGZvcmVhY2goICRmaWxlcyBhcyAkb25lICkgewogICAgICAkaW1nc1tdID0gYmFzZW5hbWUoJG9uZSk7CiAgICB9CiAgICAkcmVjWydfaW1hZ2VzJ10gPSAkaW1nczsKICB9CgogICRyZWNbJ19jYW5vbmljYWwnXSA9IGNyZWFfdXRpbHM6OmNyZWF0ZV9kZXRhaWxfdXJsKCR1bml0aWQsJHJlY1snX25hbWUnXSk7Cn0KCiRzbWFydHktPmFzc2lnbignZW50cnknLCRyZWMpOwoKJHRlbXBsYXRlID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2N1cnJlbnRfZGV0YWlsJyk7CiR0ZW1wbGF0ZSA9IGdldF9wYXJhbWV0ZXJfdmFsdWUoJHBhcmFtcywnZGV0YWlsdGVtcGxhdGUnLCR0ZW1wbGF0ZSk7CmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZUZyb21EYXRhYmFzZSgnZGV0YWlsJy4kdGVtcGxhdGUpOwovL2VjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnb3JpZ19kZXRhaWxfdGVtcGxhdGUudHBsJyk7CgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/changelog.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHVsPgogIDxsaT5WZXJzaW9uIDEuMCAtIGluaXRpYWwgcmVsZWFzZS48L2xpPgogIDxsaT5WZXJzaW9uIDEuMSAtIG9wdGlvbmFsIGZpbHRlcmluZyBieSByZWFsdG9yIGFuZCBwcm9wZXJ0eWNsYXNzLjwvbGk+CiAgPGxpPlZlcnNpb24gMS4yIC0gc29ydGluZyBieSBhc2NlbmRpbmcgcHJpY2UuPC9saT4KPC91bD4=]]></data>
	</file>
	<file>
	  <filename>/CREA_Simple.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENSRUFfU2ltcGxlIChjKSAyMDEzIGJ5IFJvYmVydCBDYW1wYmVsbCAKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBwcm92aWRlIGEgc2ltcGxlIGludGVyZmFjZQojICB0byB0aGUgQ1JFQSB3ZWIgc2VydmljZS4KIyAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIAojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKCmNsYXNzIENSRUFfU2ltcGxlIGV4dGVuZHMgQ0dFeHRlbnNpb25zCnsKICBmdW5jdGlvbiBHZXROYW1lKCkgeyByZXR1cm4gZ2V0X2NsYXNzKCR0aGlzKTsgfQogIGZ1bmN0aW9uIEdldEZyaWVuZGx5TmFtZSgpIHsgcmV0dXJuICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKTsgfQogIGZ1bmN0aW9uIEdldFZlcnNpb24oKSB7IHJldHVybiAnMS4yLjEnOyB9CiAgZnVuY3Rpb24gTWluaW11bUNNU1ZlcnNpb24oKSB7IHJldHVybiAnMS4xMS44JzsgfQogIGZ1bmN0aW9uIEdldEhlbHAoKSB7IHJldHVybiBmaWxlX2dldF9jb250ZW50cyhkaXJuYW1lKF9fRklMRV9fKS4nL2hlbHAuaW5jJyk7IH0KICBmdW5jdGlvbiBHZXRBdXRob3IoKSB7IHJldHVybiAnY2FsZ3V5MTAwMCc7IH0KICBmdW5jdGlvbiBHZXRBdXRob3JFbWFpbCgpIHsgcmV0dXJuICdjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnJzsgfQogIGZ1bmN0aW9uIEdldENoYW5nZUxvZygpIHsgcmV0dXJuIEBmaWxlX2dldF9jb250ZW50cyhkaXJuYW1lKF9fRklMRV9fKS4nL2NoYW5nZWxvZy5pbmMnKTsgfQogIGZ1bmN0aW9uIElzUGx1Z2luTW9kdWxlKCkgeyByZXR1cm4gVFJVRTsgfQogIGZ1bmN0aW9uIEdldEFkbWluRGVzY3JpcHRpb24oKSB7IHJldHVybiAkdGhpcy0+TGFuZygnbW9kZGVzY3JpcHRpb24nKTsgfQogIGZ1bmN0aW9uIEdldERlcGVuZGVuY2llcygpIHsgcmV0dXJuIGFycmF5KCdDR0V4dGVuc2lvbnMnPT4nMS4zOC40JywnQ0dKb2JNZ3InPT4nMS4yLjE1Jyk7IH0KICBmdW5jdGlvbiBIYXNBZG1pbigpIHsgcmV0dXJuIFRSVUU7IH0KICBmdW5jdGlvbiBWaXNpYmxlVG9BZG1pblVzZXIoKSB7IHJldHVybiAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpIHx8ICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBUZW1wbGF0ZXMnKTsgfQogIGZ1bmN0aW9uIEluc3RhbGxQb3N0TWVzc2FnZSgpIHsgcmV0dXJuICR0aGlzLT5MYW5nKCdwb3N0aW5zdGFsbCcpOyB9CiAgZnVuY3Rpb24gVW5pbnN0YWxsUG9zdE1lc3NhZ2UoKSB7IHJldHVybiAkdGhpcy0+TGFuZygncG9zdHVuaW5zdGFsbCcpOyB9CiAgZnVuY3Rpb24gTGF6eUxvYWRGcm9udGVuZCgpIHsgcmV0dXJuIEZBTFNFOyB9CiAgZnVuY3Rpb24gTGF6eUxvYWRBZG1pbigpIHsgcmV0dXJuIFRSVUU7IH0KICBmdW5jdGlvbiBBbGxvd0F1dG9JbnN0YWxsKCkgeyByZXR1cm4gRkFMU0U7IH0KICBmdW5jdGlvbiBBbGxvd0F1dG9VcGdyYWRlKCkgeyByZXR1cm4gRkFMU0U7IH0KICAKICBmdW5jdGlvbiBJbml0aWFsaXplRnJvbnRlbmQoKQogIHsKICAgICR0aGlzLT5SZXN0cmljdFVua25vd25QYXJhbXMoKTsKICAgICR0aGlzLT5SZWdpc3Rlck1vZHVsZVBsdWdpbigpOwoKICAgICRzdHIgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgndXJscHJlZml4JywnY3JlYScpOwogICAgJHRoaXMtPlJlZ2lzdGVyUm91dGUoIi97JHN0cn1cLyg/UDx1bml0PlswLTldKylcLyg/UDxyZXR1cm5pZD5bMC05XSspXC8oP1A8anVuaz4uKj8pJC8iLGFycmF5KCdhY3Rpb24nPT4nZGV0YWlsJykpOwoKICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCd1bml0JyxDTEVBTl9JTlQpOwogICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2xpbWl0JyxDTEVBTl9JTlQpOwogICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3BhZ2UnLENMRUFOX0lOVCk7CiAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgncHJvcGVydHljbGFzcycsQ0xFQU5fU1RSSU5HKTsKICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdyZWFsdG9yJyxDTEVBTl9TVFJJTkcpOwogICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3N1bW1hcnl0ZW1wbGF0ZScsQ0xFQU5fU1RSSU5HKTsKICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdkZXRhaWxwYWdlJyxDTEVBTl9TVFJJTkcpOwogICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2RldGFpbHRlbXBsYXRlJyxDTEVBTl9TVFJJTkcpOwogICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2p1bmsnLENMRUFOX1NUUklORyk7CiAgfQoKICBmdW5jdGlvbiBJbml0aWFsaXplQWRtaW4oKQogIHsKICAgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ3VuaXQnLCcnLCR0aGlzLT5MYW5nKCdoZWxwX3VuaXQnKSk7CiAgICAkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdsaW1pdCcsMTAsJHRoaXMtPkxhbmcoJ2hlbHBfbGltaXQnKSk7CiAgICAkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdwYWdlJywxLCR0aGlzLT5MYW5nKCdoZWxwX3BhZ2UnKSk7CiAgICAkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdwcm9wZXJ0eWNsYXNzJywnJywkdGhpcy0+TGFuZygnaGVscF9wcm9wZXJ0eWNsYXNzJykpOwogICAgJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcigncmVhbHRvcicsJycsJHRoaXMtPkxhbmcoJ2hlbHBfcmVhbHRvcicpKTsKICAgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ3N1bW1hcnl0ZW1wbGF0ZScsJycsJHRoaXMtPkxhbmcoJ2hlbHBfc3VtbWFyeXRlbXBsYXRlJykpOwogICAgJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignZGV0YWlscGFnZScsJycsJHRoaXMtPkxhbmcoJ2hlbHBfZGV0YWlscGFnZScpKTsKICAgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ2RldGFpbHRlbXBsYXRlJywnJywkdGhpcy0+TGFuZygnaGVscF9kZXRhaWx0ZW1wbGF0ZScpKTsKICB9Cn0gLy8gZW5kIG9mIGNsYXNzcwoKPz4K]]></data>
	</file>
	<file>
	  <filename>/doc/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/doc/COPYING</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ICAgICAgICAgICAgICAgICAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQogICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMywgMjkgSnVuZSAyMDA3CgogQ29weXJpZ2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiA8aHR0cDovL2ZzZi5vcmcvPgogRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCiBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVhbWJsZQoKICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgYSBmcmVlLCBjb3B5bGVmdCBsaWNlbnNlIGZvcgpzb2Z0d2FyZSBhbmQgb3RoZXIga2luZHMgb2Ygd29ya3MuCgogIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhbmQgb3RoZXIgcHJhY3RpY2FsIHdvcmtzIGFyZSBkZXNpZ25lZAp0byB0YWtlIGF3YXkgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgdGhlIHdvcmtzLiAgQnkgY29udHJhc3QsCnRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvCnNoYXJlIGFuZCBjaGFuZ2UgYWxsIHZlcnNpb25zIG9mIGEgcHJvZ3JhbS0tdG8gbWFrZSBzdXJlIGl0IHJlbWFpbnMgZnJlZQpzb2Z0d2FyZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFdlLCB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB1c2UgdGhlCkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3N0IG9mIG91ciBzb2Z0d2FyZTsgaXQgYXBwbGllcyBhbHNvIHRvCmFueSBvdGhlciB3b3JrIHJlbGVhc2VkIHRoaXMgd2F5IGJ5IGl0cyBhdXRob3JzLiAgWW91IGNhbiBhcHBseSBpdCB0bwp5b3VyIHByb2dyYW1zLCB0b28uCgogIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQpoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCnRoZW0gaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQgaWYgeW91CndhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3CmZyZWUgcHJvZ3JhbXMsIGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgoKICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIHByZXZlbnQgb3RoZXJzIGZyb20gZGVueWluZyB5b3UKdGhlc2UgcmlnaHRzIG9yIGFza2luZyB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuICBUaGVyZWZvcmUsIHlvdSBoYXZlCmNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZgp5b3UgbW9kaWZ5IGl0OiByZXNwb25zaWJpbGl0aWVzIHRvIHJlc3BlY3QgdGhlIGZyZWVkb20gb2Ygb3RoZXJzLgoKICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCmdyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IHBhc3Mgb24gdG8gdGhlIHJlY2lwaWVudHMgdGhlIHNhbWUKZnJlZWRvbXMgdGhhdCB5b3UgcmVjZWl2ZWQuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUKb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkKa25vdyB0aGVpciByaWdodHMuCgogIERldmVsb3BlcnMgdGhhdCB1c2UgdGhlIEdOVSBHUEwgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczoKKDEpIGFzc2VydCBjb3B5cmlnaHQgb24gdGhlIHNvZnR3YXJlLCBhbmQgKDIpIG9mZmVyIHlvdSB0aGlzIExpY2Vuc2UKZ2l2aW5nIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSBpdC4KCiAgRm9yIHRoZSBkZXZlbG9wZXJzJyBhbmQgYXV0aG9ycycgcHJvdGVjdGlvbiwgdGhlIEdQTCBjbGVhcmx5IGV4cGxhaW5zCnRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gIEZvciBib3RoIHVzZXJzJyBhbmQKYXV0aG9ycycgc2FrZSwgdGhlIEdQTCByZXF1aXJlcyB0aGF0IG1vZGlmaWVkIHZlcnNpb25zIGJlIG1hcmtlZCBhcwpjaGFuZ2VkLCBzbyB0aGF0IHRoZWlyIHByb2JsZW1zIHdpbGwgbm90IGJlIGF0dHJpYnV0ZWQgZXJyb25lb3VzbHkgdG8KYXV0aG9ycyBvZiBwcmV2aW91cyB2ZXJzaW9ucy4KCiAgU29tZSBkZXZpY2VzIGFyZSBkZXNpZ25lZCB0byBkZW55IHVzZXJzIGFjY2VzcyB0byBpbnN0YWxsIG9yIHJ1bgptb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgc29mdHdhcmUgaW5zaWRlIHRoZW0sIGFsdGhvdWdoIHRoZSBtYW51ZmFjdHVyZXIKY2FuIGRvIHNvLiAgVGhpcyBpcyBmdW5kYW1lbnRhbGx5IGluY29tcGF0aWJsZSB3aXRoIHRoZSBhaW0gb2YKcHJvdGVjdGluZyB1c2VycycgZnJlZWRvbSB0byBjaGFuZ2UgdGhlIHNvZnR3YXJlLiAgVGhlIHN5c3RlbWF0aWMKcGF0dGVybiBvZiBzdWNoIGFidXNlIG9jY3VycyBpbiB0aGUgYXJlYSBvZiBwcm9kdWN0cyBmb3IgaW5kaXZpZHVhbHMgdG8KdXNlLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hlcmUgaXQgaXMgbW9zdCB1bmFjY2VwdGFibGUuICBUaGVyZWZvcmUsIHdlCmhhdmUgZGVzaWduZWQgdGhpcyB2ZXJzaW9uIG9mIHRoZSBHUEwgdG8gcHJvaGliaXQgdGhlIHByYWN0aWNlIGZvciB0aG9zZQpwcm9kdWN0cy4gIElmIHN1Y2ggcHJvYmxlbXMgYXJpc2Ugc3Vic3RhbnRpYWxseSBpbiBvdGhlciBkb21haW5zLCB3ZQpzdGFuZCByZWFkeSB0byBleHRlbmQgdGhpcyBwcm92aXNpb24gdG8gdGhvc2UgZG9tYWlucyBpbiBmdXR1cmUgdmVyc2lvbnMKb2YgdGhlIEdQTCwgYXMgbmVlZGVkIHRvIHByb3RlY3QgdGhlIGZyZWVkb20gb2YgdXNlcnMuCgogIEZpbmFsbHksIGV2ZXJ5IHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlIHBhdGVudHMuClN0YXRlcyBzaG91bGQgbm90IGFsbG93IHBhdGVudHMgdG8gcmVzdHJpY3QgZGV2ZWxvcG1lbnQgYW5kIHVzZSBvZgpzb2Z0d2FyZSBvbiBnZW5lcmFsLXB1cnBvc2UgY29tcHV0ZXJzLCBidXQgaW4gdGhvc2UgdGhhdCBkbywgd2Ugd2lzaCB0bwphdm9pZCB0aGUgc3BlY2lhbCBkYW5nZXIgdGhhdCBwYXRlbnRzIGFwcGxpZWQgdG8gYSBmcmVlIHByb2dyYW0gY291bGQKbWFrZSBpdCBlZmZlY3RpdmVseSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgdGhlIEdQTCBhc3N1cmVzIHRoYXQKcGF0ZW50cyBjYW5ub3QgYmUgdXNlZCB0byByZW5kZXIgdGhlIHByb2dyYW0gbm9uLWZyZWUuCgogIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCm1vZGlmaWNhdGlvbiBmb2xsb3cuCgogICAgICAgICAgICAgICAgICAgICAgIFRFUk1TIEFORCBDT05ESVRJT05TCgogIDAuIERlZmluaXRpb25zLgoKICAiVGhpcyBMaWNlbnNlIiByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KCiAgIkNvcHlyaWdodCIgYWxzbyBtZWFucyBjb3B5cmlnaHQtbGlrZSBsYXdzIHRoYXQgYXBwbHkgdG8gb3RoZXIga2luZHMgb2YKd29ya3MsIHN1Y2ggYXMgc2VtaWNvbmR1Y3RvciBtYXNrcy4KCiAgIlRoZSBQcm9ncmFtIiByZWZlcnMgdG8gYW55IGNvcHlyaWdodGFibGUgd29yayBsaWNlbnNlZCB1bmRlciB0aGlzCkxpY2Vuc2UuICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4gICJMaWNlbnNlZXMiIGFuZAoicmVjaXBpZW50cyIgbWF5IGJlIGluZGl2aWR1YWxzIG9yIG9yZ2FuaXphdGlvbnMuCgogIFRvICJtb2RpZnkiIGEgd29yayBtZWFucyB0byBjb3B5IGZyb20gb3IgYWRhcHQgYWxsIG9yIHBhcnQgb2YgdGhlIHdvcmsKaW4gYSBmYXNoaW9uIHJlcXVpcmluZyBjb3B5cmlnaHQgcGVybWlzc2lvbiwgb3RoZXIgdGhhbiB0aGUgbWFraW5nIG9mIGFuCmV4YWN0IGNvcHkuICBUaGUgcmVzdWx0aW5nIHdvcmsgaXMgY2FsbGVkIGEgIm1vZGlmaWVkIHZlcnNpb24iIG9mIHRoZQplYXJsaWVyIHdvcmsgb3IgYSB3b3JrICJiYXNlZCBvbiIgdGhlIGVhcmxpZXIgd29yay4KCiAgQSAiY292ZXJlZCB3b3JrIiBtZWFucyBlaXRoZXIgdGhlIHVubW9kaWZpZWQgUHJvZ3JhbSBvciBhIHdvcmsgYmFzZWQKb24gdGhlIFByb2dyYW0uCgogIFRvICJwcm9wYWdhdGUiIGEgd29yayBtZWFucyB0byBkbyBhbnl0aGluZyB3aXRoIGl0IHRoYXQsIHdpdGhvdXQKcGVybWlzc2lvbiwgd291bGQgbWFrZSB5b3UgZGlyZWN0bHkgb3Igc2Vjb25kYXJpbHkgbGlhYmxlIGZvcgppbmZyaW5nZW1lbnQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3LCBleGNlcHQgZXhlY3V0aW5nIGl0IG9uIGEKY29tcHV0ZXIgb3IgbW9kaWZ5aW5nIGEgcHJpdmF0ZSBjb3B5LiAgUHJvcGFnYXRpb24gaW5jbHVkZXMgY29weWluZywKZGlzdHJpYnV0aW9uICh3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uKSwgbWFraW5nIGF2YWlsYWJsZSB0byB0aGUKcHVibGljLCBhbmQgaW4gc29tZSBjb3VudHJpZXMgb3RoZXIgYWN0aXZpdGllcyBhcyB3ZWxsLgoKICBUbyAiY29udmV5IiBhIHdvcmsgbWVhbnMgYW55IGtpbmQgb2YgcHJvcGFnYXRpb24gdGhhdCBlbmFibGVzIG90aGVyCnBhcnRpZXMgdG8gbWFrZSBvciByZWNlaXZlIGNvcGllcy4gIE1lcmUgaW50ZXJhY3Rpb24gd2l0aCBhIHVzZXIgdGhyb3VnaAphIGNvbXB1dGVyIG5ldHdvcmssIHdpdGggbm8gdHJhbnNmZXIgb2YgYSBjb3B5LCBpcyBub3QgY29udmV5aW5nLgoKICBBbiBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZSBkaXNwbGF5cyAiQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcyIKdG8gdGhlIGV4dGVudCB0aGF0IGl0IGluY2x1ZGVzIGEgY29udmVuaWVudCBhbmQgcHJvbWluZW50bHkgdmlzaWJsZQpmZWF0dXJlIHRoYXQgKDEpIGRpc3BsYXlzIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UsIGFuZCAoMikKdGVsbHMgdGhlIHVzZXIgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhlIHdvcmsgKGV4Y2VwdCB0byB0aGUKZXh0ZW50IHRoYXQgd2FycmFudGllcyBhcmUgcHJvdmlkZWQpLCB0aGF0IGxpY2Vuc2VlcyBtYXkgY29udmV5IHRoZQp3b3JrIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZgp0aGUgaW50ZXJmYWNlIHByZXNlbnRzIGEgbGlzdCBvZiB1c2VyIGNvbW1hbmRzIG9yIG9wdGlvbnMsIHN1Y2ggYXMgYQptZW51LCBhIHByb21pbmVudCBpdGVtIGluIHRoZSBsaXN0IG1lZXRzIHRoaXMgY3JpdGVyaW9uLgoKICAxLiBTb3VyY2UgQ29kZS4KCiAgVGhlICJzb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsKZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgIk9iamVjdCBjb2RlIiBtZWFucyBhbnkgbm9uLXNvdXJjZQpmb3JtIG9mIGEgd29yay4KCiAgQSAiU3RhbmRhcmQgSW50ZXJmYWNlIiBtZWFucyBhbiBpbnRlcmZhY2UgdGhhdCBlaXRoZXIgaXMgYW4gb2ZmaWNpYWwKc3RhbmRhcmQgZGVmaW5lZCBieSBhIHJlY29nbml6ZWQgc3RhbmRhcmRzIGJvZHksIG9yLCBpbiB0aGUgY2FzZSBvZgppbnRlcmZhY2VzIHNwZWNpZmllZCBmb3IgYSBwYXJ0aWN1bGFyIHByb2dyYW1taW5nIGxhbmd1YWdlLCBvbmUgdGhhdAppcyB3aWRlbHkgdXNlZCBhbW9uZyBkZXZlbG9wZXJzIHdvcmtpbmcgaW4gdGhhdCBsYW5ndWFnZS4KCiAgVGhlICJTeXN0ZW0gTGlicmFyaWVzIiBvZiBhbiBleGVjdXRhYmxlIHdvcmsgaW5jbHVkZSBhbnl0aGluZywgb3RoZXIKdGhhbiB0aGUgd29yayBhcyBhIHdob2xlLCB0aGF0IChhKSBpcyBpbmNsdWRlZCBpbiB0aGUgbm9ybWFsIGZvcm0gb2YKcGFja2FnaW5nIGEgTWFqb3IgQ29tcG9uZW50LCBidXQgd2hpY2ggaXMgbm90IHBhcnQgb2YgdGhhdCBNYWpvcgpDb21wb25lbnQsIGFuZCAoYikgc2VydmVzIG9ubHkgdG8gZW5hYmxlIHVzZSBvZiB0aGUgd29yayB3aXRoIHRoYXQKTWFqb3IgQ29tcG9uZW50LCBvciB0byBpbXBsZW1lbnQgYSBTdGFuZGFyZCBJbnRlcmZhY2UgZm9yIHdoaWNoIGFuCmltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluIHNvdXJjZSBjb2RlIGZvcm0uICBBCiJNYWpvciBDb21wb25lbnQiLCBpbiB0aGlzIGNvbnRleHQsIG1lYW5zIGEgbWFqb3IgZXNzZW50aWFsIGNvbXBvbmVudAooa2VybmVsLCB3aW5kb3cgc3lzdGVtLCBhbmQgc28gb24pIG9mIHRoZSBzcGVjaWZpYyBvcGVyYXRpbmcgc3lzdGVtCihpZiBhbnkpIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHdvcmsgcnVucywgb3IgYSBjb21waWxlciB1c2VkIHRvCnByb2R1Y2UgdGhlIHdvcmssIG9yIGFuIG9iamVjdCBjb2RlIGludGVycHJldGVyIHVzZWQgdG8gcnVuIGl0LgoKICBUaGUgIkNvcnJlc3BvbmRpbmcgU291cmNlIiBmb3IgYSB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gbWVhbnMgYWxsCnRoZSBzb3VyY2UgY29kZSBuZWVkZWQgdG8gZ2VuZXJhdGUsIGluc3RhbGwsIGFuZCAoZm9yIGFuIGV4ZWN1dGFibGUKd29yaykgcnVuIHRoZSBvYmplY3QgY29kZSBhbmQgdG8gbW9kaWZ5IHRoZSB3b3JrLCBpbmNsdWRpbmcgc2NyaXB0cyB0bwpjb250cm9sIHRob3NlIGFjdGl2aXRpZXMuICBIb3dldmVyLCBpdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSB3b3JrJ3MKU3lzdGVtIExpYnJhcmllcywgb3IgZ2VuZXJhbC1wdXJwb3NlIHRvb2xzIG9yIGdlbmVyYWxseSBhdmFpbGFibGUgZnJlZQpwcm9ncmFtcyB3aGljaCBhcmUgdXNlZCB1bm1vZGlmaWVkIGluIHBlcmZvcm1pbmcgdGhvc2UgYWN0aXZpdGllcyBidXQKd2hpY2ggYXJlIG5vdCBwYXJ0IG9mIHRoZSB3b3JrLiAgRm9yIGV4YW1wbGUsIENvcnJlc3BvbmRpbmcgU291cmNlCmluY2x1ZGVzIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBzb3VyY2UgZmlsZXMgZm9yCnRoZSB3b3JrLCBhbmQgdGhlIHNvdXJjZSBjb2RlIGZvciBzaGFyZWQgbGlicmFyaWVzIGFuZCBkeW5hbWljYWxseQpsaW5rZWQgc3VicHJvZ3JhbXMgdGhhdCB0aGUgd29yayBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gcmVxdWlyZSwKc3VjaCBhcyBieSBpbnRpbWF0ZSBkYXRhIGNvbW11bmljYXRpb24gb3IgY29udHJvbCBmbG93IGJldHdlZW4gdGhvc2UKc3VicHJvZ3JhbXMgYW5kIG90aGVyIHBhcnRzIG9mIHRoZSB3b3JrLgoKICBUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IHVzZXJzCmNhbiByZWdlbmVyYXRlIGF1dG9tYXRpY2FsbHkgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgQ29ycmVzcG9uZGluZwpTb3VyY2UuCgogIFRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYSB3b3JrIGluIHNvdXJjZSBjb2RlIGZvcm0gaXMgdGhhdApzYW1lIHdvcmsuCgogIDIuIEJhc2ljIFBlcm1pc3Npb25zLgoKICBBbGwgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFyZSBncmFudGVkIGZvciB0aGUgdGVybSBvZgpjb3B5cmlnaHQgb24gdGhlIFByb2dyYW0sIGFuZCBhcmUgaXJyZXZvY2FibGUgcHJvdmlkZWQgdGhlIHN0YXRlZApjb25kaXRpb25zIGFyZSBtZXQuICBUaGlzIExpY2Vuc2UgZXhwbGljaXRseSBhZmZpcm1zIHlvdXIgdW5saW1pdGVkCnBlcm1pc3Npb24gdG8gcnVuIHRoZSB1bm1vZGlmaWVkIFByb2dyYW0uICBUaGUgb3V0cHV0IGZyb20gcnVubmluZyBhCmNvdmVyZWQgd29yayBpcyBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSBvbmx5IGlmIHRoZSBvdXRwdXQsIGdpdmVuIGl0cwpjb250ZW50LCBjb25zdGl0dXRlcyBhIGNvdmVyZWQgd29yay4gIFRoaXMgTGljZW5zZSBhY2tub3dsZWRnZXMgeW91cgpyaWdodHMgb2YgZmFpciB1c2Ugb3Igb3RoZXIgZXF1aXZhbGVudCwgYXMgcHJvdmlkZWQgYnkgY29weXJpZ2h0IGxhdy4KCiAgWW91IG1heSBtYWtlLCBydW4gYW5kIHByb3BhZ2F0ZSBjb3ZlcmVkIHdvcmtzIHRoYXQgeW91IGRvIG5vdApjb252ZXksIHdpdGhvdXQgY29uZGl0aW9ucyBzbyBsb25nIGFzIHlvdXIgbGljZW5zZSBvdGhlcndpc2UgcmVtYWlucwppbiBmb3JjZS4gIFlvdSBtYXkgY29udmV5IGNvdmVyZWQgd29ya3MgdG8gb3RoZXJzIGZvciB0aGUgc29sZSBwdXJwb3NlCm9mIGhhdmluZyB0aGVtIG1ha2UgbW9kaWZpY2F0aW9ucyBleGNsdXNpdmVseSBmb3IgeW91LCBvciBwcm92aWRlIHlvdQp3aXRoIGZhY2lsaXRpZXMgZm9yIHJ1bm5pbmcgdGhvc2Ugd29ya3MsIHByb3ZpZGVkIHRoYXQgeW91IGNvbXBseSB3aXRoCnRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW4gY29udmV5aW5nIGFsbCBtYXRlcmlhbCBmb3Igd2hpY2ggeW91IGRvCm5vdCBjb250cm9sIGNvcHlyaWdodC4gIFRob3NlIHRodXMgbWFraW5nIG9yIHJ1bm5pbmcgdGhlIGNvdmVyZWQgd29ya3MKZm9yIHlvdSBtdXN0IGRvIHNvIGV4Y2x1c2l2ZWx5IG9uIHlvdXIgYmVoYWxmLCB1bmRlciB5b3VyIGRpcmVjdGlvbgphbmQgY29udHJvbCwgb24gdGVybXMgdGhhdCBwcm9oaWJpdCB0aGVtIGZyb20gbWFraW5nIGFueSBjb3BpZXMgb2YKeW91ciBjb3B5cmlnaHRlZCBtYXRlcmlhbCBvdXRzaWRlIHRoZWlyIHJlbGF0aW9uc2hpcCB3aXRoIHlvdS4KCiAgQ29udmV5aW5nIHVuZGVyIGFueSBvdGhlciBjaXJjdW1zdGFuY2VzIGlzIHBlcm1pdHRlZCBzb2xlbHkgdW5kZXIKdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGJlbG93LiAgU3VibGljZW5zaW5nIGlzIG5vdCBhbGxvd2VkOyBzZWN0aW9uIDEwCm1ha2VzIGl0IHVubmVjZXNzYXJ5LgoKICAzLiBQcm90ZWN0aW5nIFVzZXJzJyBMZWdhbCBSaWdodHMgRnJvbSBBbnRpLUNpcmN1bXZlbnRpb24gTGF3LgoKICBObyBjb3ZlcmVkIHdvcmsgc2hhbGwgYmUgZGVlbWVkIHBhcnQgb2YgYW4gZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwKbWVhc3VyZSB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcgZnVsZmlsbGluZyBvYmxpZ2F0aW9ucyB1bmRlciBhcnRpY2xlCjExIG9mIHRoZSBXSVBPIGNvcHlyaWdodCB0cmVhdHkgYWRvcHRlZCBvbiAyMCBEZWNlbWJlciAxOTk2LCBvcgpzaW1pbGFyIGxhd3MgcHJvaGliaXRpbmcgb3IgcmVzdHJpY3RpbmcgY2lyY3VtdmVudGlvbiBvZiBzdWNoCm1lYXN1cmVzLgoKICBXaGVuIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIHlvdSB3YWl2ZSBhbnkgbGVnYWwgcG93ZXIgdG8gZm9yYmlkCmNpcmN1bXZlbnRpb24gb2YgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0byB0aGUgZXh0ZW50IHN1Y2ggY2lyY3VtdmVudGlvbgppcyBlZmZlY3RlZCBieSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvCnRoZSBjb3ZlcmVkIHdvcmssIGFuZCB5b3UgZGlzY2xhaW0gYW55IGludGVudGlvbiB0byBsaW1pdCBvcGVyYXRpb24gb3IKbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGFzIGEgbWVhbnMgb2YgZW5mb3JjaW5nLCBhZ2FpbnN0IHRoZSB3b3JrJ3MKdXNlcnMsIHlvdXIgb3IgdGhpcmQgcGFydGllcycgbGVnYWwgcmlnaHRzIHRvIGZvcmJpZCBjaXJjdW12ZW50aW9uIG9mCnRlY2hub2xvZ2ljYWwgbWVhc3VyZXMuCgogIDQuIENvbnZleWluZyBWZXJiYXRpbSBDb3BpZXMuCgogIFlvdSBtYXkgY29udmV5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzIHNvdXJjZSBjb2RlIGFzIHlvdQpyZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZAphcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2U7CmtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHN0YXRpbmcgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFueQpub24tcGVybWlzc2l2ZSB0ZXJtcyBhZGRlZCBpbiBhY2NvcmQgd2l0aCBzZWN0aW9uIDcgYXBwbHkgdG8gdGhlIGNvZGU7CmtlZXAgaW50YWN0IGFsbCBub3RpY2VzIG9mIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYWxsCnJlY2lwaWVudHMgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgoKICBZb3UgbWF5IGNoYXJnZSBhbnkgcHJpY2Ugb3Igbm8gcHJpY2UgZm9yIGVhY2ggY29weSB0aGF0IHlvdSBjb252ZXksCmFuZCB5b3UgbWF5IG9mZmVyIHN1cHBvcnQgb3Igd2FycmFudHkgcHJvdGVjdGlvbiBmb3IgYSBmZWUuCgogIDUuIENvbnZleWluZyBNb2RpZmllZCBTb3VyY2UgVmVyc2lvbnMuCgogIFlvdSBtYXkgY29udmV5IGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgb3IgdGhlIG1vZGlmaWNhdGlvbnMgdG8KcHJvZHVjZSBpdCBmcm9tIHRoZSBQcm9ncmFtLCBpbiB0aGUgZm9ybSBvZiBzb3VyY2UgY29kZSB1bmRlciB0aGUKdGVybXMgb2Ygc2VjdGlvbiA0LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CgogICAgYSkgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IG1vZGlmaWVkCiAgICBpdCwgYW5kIGdpdmluZyBhIHJlbGV2YW50IGRhdGUuCgogICAgYikgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgaXQgaXMKICAgIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IGNvbmRpdGlvbnMgYWRkZWQgdW5kZXIgc2VjdGlvbgogICAgNy4gIFRoaXMgcmVxdWlyZW1lbnQgbW9kaWZpZXMgdGhlIHJlcXVpcmVtZW50IGluIHNlY3Rpb24gNCB0bwogICAgImtlZXAgaW50YWN0IGFsbCBub3RpY2VzIi4KCiAgICBjKSBZb3UgbXVzdCBsaWNlbnNlIHRoZSBlbnRpcmUgd29yaywgYXMgYSB3aG9sZSwgdW5kZXIgdGhpcwogICAgTGljZW5zZSB0byBhbnlvbmUgd2hvIGNvbWVzIGludG8gcG9zc2Vzc2lvbiBvZiBhIGNvcHkuICBUaGlzCiAgICBMaWNlbnNlIHdpbGwgdGhlcmVmb3JlIGFwcGx5LCBhbG9uZyB3aXRoIGFueSBhcHBsaWNhYmxlIHNlY3Rpb24gNwogICAgYWRkaXRpb25hbCB0ZXJtcywgdG8gdGhlIHdob2xlIG9mIHRoZSB3b3JrLCBhbmQgYWxsIGl0cyBwYXJ0cywKICAgIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZXkgYXJlIHBhY2thZ2VkLiAgVGhpcyBMaWNlbnNlIGdpdmVzIG5vCiAgICBwZXJtaXNzaW9uIHRvIGxpY2Vuc2UgdGhlIHdvcmsgaW4gYW55IG90aGVyIHdheSwgYnV0IGl0IGRvZXMgbm90CiAgICBpbnZhbGlkYXRlIHN1Y2ggcGVybWlzc2lvbiBpZiB5b3UgaGF2ZSBzZXBhcmF0ZWx5IHJlY2VpdmVkIGl0LgoKICAgIGQpIElmIHRoZSB3b3JrIGhhcyBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZXMsIGVhY2ggbXVzdCBkaXNwbGF5CiAgICBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzOyBob3dldmVyLCBpZiB0aGUgUHJvZ3JhbSBoYXMgaW50ZXJhY3RpdmUKICAgIGludGVyZmFjZXMgdGhhdCBkbyBub3QgZGlzcGxheSBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzLCB5b3VyCiAgICB3b3JrIG5lZWQgbm90IG1ha2UgdGhlbSBkbyBzby4KCiAgQSBjb21waWxhdGlvbiBvZiBhIGNvdmVyZWQgd29yayB3aXRoIG90aGVyIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudAp3b3Jrcywgd2hpY2ggYXJlIG5vdCBieSB0aGVpciBuYXR1cmUgZXh0ZW5zaW9ucyBvZiB0aGUgY292ZXJlZCB3b3JrLAphbmQgd2hpY2ggYXJlIG5vdCBjb21iaW5lZCB3aXRoIGl0IHN1Y2ggYXMgdG8gZm9ybSBhIGxhcmdlciBwcm9ncmFtLAppbiBvciBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSwgaXMgY2FsbGVkIGFuCiJhZ2dyZWdhdGUiIGlmIHRoZSBjb21waWxhdGlvbiBhbmQgaXRzIHJlc3VsdGluZyBjb3B5cmlnaHQgYXJlIG5vdAp1c2VkIHRvIGxpbWl0IHRoZSBhY2Nlc3Mgb3IgbGVnYWwgcmlnaHRzIG9mIHRoZSBjb21waWxhdGlvbidzIHVzZXJzCmJleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4gIEluY2x1c2lvbiBvZiBhIGNvdmVyZWQgd29yawppbiBhbiBhZ2dyZWdhdGUgZG9lcyBub3QgY2F1c2UgdGhpcyBMaWNlbnNlIHRvIGFwcGx5IHRvIHRoZSBvdGhlcgpwYXJ0cyBvZiB0aGUgYWdncmVnYXRlLgoKICA2LiBDb252ZXlpbmcgTm9uLVNvdXJjZSBGb3Jtcy4KCiAgWW91IG1heSBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMKb2Ygc2VjdGlvbnMgNCBhbmQgNSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBjb252ZXkgdGhlCm1hY2hpbmUtcmVhZGFibGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwKaW4gb25lIG9mIHRoZXNlIHdheXM6CgogICAgYSkgQ29udmV5IHRoZSBvYmplY3QgY29kZSBpbiwgb3IgZW1ib2RpZWQgaW4sIGEgcGh5c2ljYWwgcHJvZHVjdAogICAgKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiBtZWRpdW0pLCBhY2NvbXBhbmllZCBieSB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGZpeGVkIG9uIGEgZHVyYWJsZSBwaHlzaWNhbCBtZWRpdW0KICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgoKICAgIGIpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKICAgIChpbmNsdWRpbmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgYQogICAgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzIGFuZCB2YWxpZCBmb3IgYXMKICAgIGxvbmcgYXMgeW91IG9mZmVyIHNwYXJlIHBhcnRzIG9yIGN1c3RvbWVyIHN1cHBvcnQgZm9yIHRoYXQgcHJvZHVjdAogICAgbW9kZWwsIHRvIGdpdmUgYW55b25lIHdobyBwb3NzZXNzZXMgdGhlIG9iamVjdCBjb2RlIGVpdGhlciAoMSkgYQogICAgY29weSBvZiB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGFsbCB0aGUgc29mdHdhcmUgaW4gdGhlCiAgICBwcm9kdWN0IHRoYXQgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIG9uIGEgZHVyYWJsZSBwaHlzaWNhbAogICAgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLCBmb3IgYSBwcmljZSBubwogICAgbW9yZSB0aGFuIHlvdXIgcmVhc29uYWJsZSBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyB0aGlzCiAgICBjb252ZXlpbmcgb2Ygc291cmNlLCBvciAoMikgYWNjZXNzIHRvIGNvcHkgdGhlCiAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBmcm9tIGEgbmV0d29yayBzZXJ2ZXIgYXQgbm8gY2hhcmdlLgoKICAgIGMpIENvbnZleSBpbmRpdmlkdWFsIGNvcGllcyBvZiB0aGUgb2JqZWN0IGNvZGUgd2l0aCBhIGNvcHkgb2YgdGhlCiAgICB3cml0dGVuIG9mZmVyIHRvIHByb3ZpZGUgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhpcwogICAgYWx0ZXJuYXRpdmUgaXMgYWxsb3dlZCBvbmx5IG9jY2FzaW9uYWxseSBhbmQgbm9uY29tbWVyY2lhbGx5LCBhbmQKICAgIG9ubHkgaWYgeW91IHJlY2VpdmVkIHRoZSBvYmplY3QgY29kZSB3aXRoIHN1Y2ggYW4gb2ZmZXIsIGluIGFjY29yZAogICAgd2l0aCBzdWJzZWN0aW9uIDZiLgoKICAgIGQpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIGZyb20gYSBkZXNpZ25hdGVkCiAgICBwbGFjZSAoZ3JhdGlzIG9yIGZvciBhIGNoYXJnZSksIGFuZCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGluIHRoZSBzYW1lIHdheSB0aHJvdWdoIHRoZSBzYW1lIHBsYWNlIGF0IG5vCiAgICBmdXJ0aGVyIGNoYXJnZS4gIFlvdSBuZWVkIG5vdCByZXF1aXJlIHJlY2lwaWVudHMgdG8gY29weSB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLiAgSWYgdGhlIHBsYWNlIHRvCiAgICBjb3B5IHRoZSBvYmplY3QgY29kZSBpcyBhIG5ldHdvcmsgc2VydmVyLCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UKICAgIG1heSBiZSBvbiBhIGRpZmZlcmVudCBzZXJ2ZXIgKG9wZXJhdGVkIGJ5IHlvdSBvciBhIHRoaXJkIHBhcnR5KQogICAgdGhhdCBzdXBwb3J0cyBlcXVpdmFsZW50IGNvcHlpbmcgZmFjaWxpdGllcywgcHJvdmlkZWQgeW91IG1haW50YWluCiAgICBjbGVhciBkaXJlY3Rpb25zIG5leHQgdG8gdGhlIG9iamVjdCBjb2RlIHNheWluZyB3aGVyZSB0byBmaW5kIHRoZQogICAgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBSZWdhcmRsZXNzIG9mIHdoYXQgc2VydmVyIGhvc3RzIHRoZQogICAgQ29ycmVzcG9uZGluZyBTb3VyY2UsIHlvdSByZW1haW4gb2JsaWdhdGVkIHRvIGVuc3VyZSB0aGF0IGl0IGlzCiAgICBhdmFpbGFibGUgZm9yIGFzIGxvbmcgYXMgbmVlZGVkIHRvIHNhdGlzZnkgdGhlc2UgcmVxdWlyZW1lbnRzLgoKICAgIGUpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbiwgcHJvdmlkZWQKICAgIHlvdSBpbmZvcm0gb3RoZXIgcGVlcnMgd2hlcmUgdGhlIG9iamVjdCBjb2RlIGFuZCBDb3JyZXNwb25kaW5nCiAgICBTb3VyY2Ugb2YgdGhlIHdvcmsgYXJlIGJlaW5nIG9mZmVyZWQgdG8gdGhlIGdlbmVyYWwgcHVibGljIGF0IG5vCiAgICBjaGFyZ2UgdW5kZXIgc3Vic2VjdGlvbiA2ZC4KCiAgQSBzZXBhcmFibGUgcG9ydGlvbiBvZiB0aGUgb2JqZWN0IGNvZGUsIHdob3NlIHNvdXJjZSBjb2RlIGlzIGV4Y2x1ZGVkCmZyb20gdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGFzIGEgU3lzdGVtIExpYnJhcnksIG5lZWQgbm90IGJlCmluY2x1ZGVkIGluIGNvbnZleWluZyB0aGUgb2JqZWN0IGNvZGUgd29yay4KCiAgQSAiVXNlciBQcm9kdWN0IiBpcyBlaXRoZXIgKDEpIGEgImNvbnN1bWVyIHByb2R1Y3QiLCB3aGljaCBtZWFucyBhbnkKdGFuZ2libGUgcGVyc29uYWwgcHJvcGVydHkgd2hpY2ggaXMgbm9ybWFsbHkgdXNlZCBmb3IgcGVyc29uYWwsIGZhbWlseSwKb3IgaG91c2Vob2xkIHB1cnBvc2VzLCBvciAoMikgYW55dGhpbmcgZGVzaWduZWQgb3Igc29sZCBmb3IgaW5jb3Jwb3JhdGlvbgppbnRvIGEgZHdlbGxpbmcuICBJbiBkZXRlcm1pbmluZyB3aGV0aGVyIGEgcHJvZHVjdCBpcyBhIGNvbnN1bWVyIHByb2R1Y3QsCmRvdWJ0ZnVsIGNhc2VzIHNoYWxsIGJlIHJlc29sdmVkIGluIGZhdm9yIG9mIGNvdmVyYWdlLiAgRm9yIGEgcGFydGljdWxhcgpwcm9kdWN0IHJlY2VpdmVkIGJ5IGEgcGFydGljdWxhciB1c2VyLCAibm9ybWFsbHkgdXNlZCIgcmVmZXJzIHRvIGEKdHlwaWNhbCBvciBjb21tb24gdXNlIG9mIHRoYXQgY2xhc3Mgb2YgcHJvZHVjdCwgcmVnYXJkbGVzcyBvZiB0aGUgc3RhdHVzCm9mIHRoZSBwYXJ0aWN1bGFyIHVzZXIgb3Igb2YgdGhlIHdheSBpbiB3aGljaCB0aGUgcGFydGljdWxhciB1c2VyCmFjdHVhbGx5IHVzZXMsIG9yIGV4cGVjdHMgb3IgaXMgZXhwZWN0ZWQgdG8gdXNlLCB0aGUgcHJvZHVjdC4gIEEgcHJvZHVjdAppcyBhIGNvbnN1bWVyIHByb2R1Y3QgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBwcm9kdWN0IGhhcyBzdWJzdGFudGlhbApjb21tZXJjaWFsLCBpbmR1c3RyaWFsIG9yIG5vbi1jb25zdW1lciB1c2VzLCB1bmxlc3Mgc3VjaCB1c2VzIHJlcHJlc2VudAp0aGUgb25seSBzaWduaWZpY2FudCBtb2RlIG9mIHVzZSBvZiB0aGUgcHJvZHVjdC4KCiAgIkluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiIgZm9yIGEgVXNlciBQcm9kdWN0IG1lYW5zIGFueSBtZXRob2RzLApwcm9jZWR1cmVzLCBhdXRob3JpemF0aW9uIGtleXMsIG9yIG90aGVyIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGluc3RhbGwKYW5kIGV4ZWN1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgYSBjb3ZlcmVkIHdvcmsgaW4gdGhhdCBVc2VyIFByb2R1Y3QgZnJvbQphIG1vZGlmaWVkIHZlcnNpb24gb2YgaXRzIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhlIGluZm9ybWF0aW9uIG11c3QKc3VmZmljZSB0byBlbnN1cmUgdGhhdCB0aGUgY29udGludWVkIGZ1bmN0aW9uaW5nIG9mIHRoZSBtb2RpZmllZCBvYmplY3QKY29kZSBpcyBpbiBubyBjYXNlIHByZXZlbnRlZCBvciBpbnRlcmZlcmVkIHdpdGggc29sZWx5IGJlY2F1c2UKbW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUuCgogIElmIHlvdSBjb252ZXkgYW4gb2JqZWN0IGNvZGUgd29yayB1bmRlciB0aGlzIHNlY3Rpb24gaW4sIG9yIHdpdGgsIG9yCnNwZWNpZmljYWxseSBmb3IgdXNlIGluLCBhIFVzZXIgUHJvZHVjdCwgYW5kIHRoZSBjb252ZXlpbmcgb2NjdXJzIGFzCnBhcnQgb2YgYSB0cmFuc2FjdGlvbiBpbiB3aGljaCB0aGUgcmlnaHQgb2YgcG9zc2Vzc2lvbiBhbmQgdXNlIG9mIHRoZQpVc2VyIFByb2R1Y3QgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHJlY2lwaWVudCBpbiBwZXJwZXR1aXR5IG9yIGZvciBhCmZpeGVkIHRlcm0gKHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSB0cmFuc2FjdGlvbiBpcyBjaGFyYWN0ZXJpemVkKSwgdGhlCkNvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkIHVuZGVyIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGFjY29tcGFuaWVkCmJ5IHRoZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24uICBCdXQgdGhpcyByZXF1aXJlbWVudCBkb2VzIG5vdCBhcHBseQppZiBuZWl0aGVyIHlvdSBub3IgYW55IHRoaXJkIHBhcnR5IHJldGFpbnMgdGhlIGFiaWxpdHkgdG8gaW5zdGFsbAptb2RpZmllZCBvYmplY3QgY29kZSBvbiB0aGUgVXNlciBQcm9kdWN0IChmb3IgZXhhbXBsZSwgdGhlIHdvcmsgaGFzCmJlZW4gaW5zdGFsbGVkIGluIFJPTSkuCgogIFRoZSByZXF1aXJlbWVudCB0byBwcm92aWRlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBkb2VzIG5vdCBpbmNsdWRlIGEKcmVxdWlyZW1lbnQgdG8gY29udGludWUgdG8gcHJvdmlkZSBzdXBwb3J0IHNlcnZpY2UsIHdhcnJhbnR5LCBvciB1cGRhdGVzCmZvciBhIHdvcmsgdGhhdCBoYXMgYmVlbiBtb2RpZmllZCBvciBpbnN0YWxsZWQgYnkgdGhlIHJlY2lwaWVudCwgb3IgZm9yCnRoZSBVc2VyIFByb2R1Y3QgaW4gd2hpY2ggaXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IgaW5zdGFsbGVkLiAgQWNjZXNzIHRvIGEKbmV0d29yayBtYXkgYmUgZGVuaWVkIHdoZW4gdGhlIG1vZGlmaWNhdGlvbiBpdHNlbGYgbWF0ZXJpYWxseSBhbmQKYWR2ZXJzZWx5IGFmZmVjdHMgdGhlIG9wZXJhdGlvbiBvZiB0aGUgbmV0d29yayBvciB2aW9sYXRlcyB0aGUgcnVsZXMgYW5kCnByb3RvY29scyBmb3IgY29tbXVuaWNhdGlvbiBhY3Jvc3MgdGhlIG5ldHdvcmsuCgogIENvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkLCBhbmQgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIHByb3ZpZGVkLAppbiBhY2NvcmQgd2l0aCB0aGlzIHNlY3Rpb24gbXVzdCBiZSBpbiBhIGZvcm1hdCB0aGF0IGlzIHB1YmxpY2x5CmRvY3VtZW50ZWQgKGFuZCB3aXRoIGFuIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluCnNvdXJjZSBjb2RlIGZvcm0pLCBhbmQgbXVzdCByZXF1aXJlIG5vIHNwZWNpYWwgcGFzc3dvcmQgb3Iga2V5IGZvcgp1bnBhY2tpbmcsIHJlYWRpbmcgb3IgY29weWluZy4KCiAgNy4gQWRkaXRpb25hbCBUZXJtcy4KCiAgIkFkZGl0aW9uYWwgcGVybWlzc2lvbnMiIGFyZSB0ZXJtcyB0aGF0IHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMKTGljZW5zZSBieSBtYWtpbmcgZXhjZXB0aW9ucyBmcm9tIG9uZSBvciBtb3JlIG9mIGl0cyBjb25kaXRpb25zLgpBZGRpdGlvbmFsIHBlcm1pc3Npb25zIHRoYXQgYXJlIGFwcGxpY2FibGUgdG8gdGhlIGVudGlyZSBQcm9ncmFtIHNoYWxsCmJlIHRyZWF0ZWQgYXMgdGhvdWdoIHRoZXkgd2VyZSBpbmNsdWRlZCBpbiB0aGlzIExpY2Vuc2UsIHRvIHRoZSBleHRlbnQKdGhhdCB0aGV5IGFyZSB2YWxpZCB1bmRlciBhcHBsaWNhYmxlIGxhdy4gIElmIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMKYXBwbHkgb25seSB0byBwYXJ0IG9mIHRoZSBQcm9ncmFtLCB0aGF0IHBhcnQgbWF5IGJlIHVzZWQgc2VwYXJhdGVseQp1bmRlciB0aG9zZSBwZXJtaXNzaW9ucywgYnV0IHRoZSBlbnRpcmUgUHJvZ3JhbSByZW1haW5zIGdvdmVybmVkIGJ5CnRoaXMgTGljZW5zZSB3aXRob3V0IHJlZ2FyZCB0byB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucy4KCiAgV2hlbiB5b3UgY29udmV5IGEgY29weSBvZiBhIGNvdmVyZWQgd29yaywgeW91IG1heSBhdCB5b3VyIG9wdGlvbgpyZW1vdmUgYW55IGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgZnJvbSB0aGF0IGNvcHksIG9yIGZyb20gYW55IHBhcnQgb2YKaXQuICAoQWRkaXRpb25hbCBwZXJtaXNzaW9ucyBtYXkgYmUgd3JpdHRlbiB0byByZXF1aXJlIHRoZWlyIG93bgpyZW1vdmFsIGluIGNlcnRhaW4gY2FzZXMgd2hlbiB5b3UgbW9kaWZ5IHRoZSB3b3JrLikgIFlvdSBtYXkgcGxhY2UKYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBvbiBtYXRlcmlhbCwgYWRkZWQgYnkgeW91IHRvIGEgY292ZXJlZCB3b3JrLApmb3Igd2hpY2ggeW91IGhhdmUgb3IgY2FuIGdpdmUgYXBwcm9wcmlhdGUgY29weXJpZ2h0IHBlcm1pc3Npb24uCgogIE5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgZm9yIG1hdGVyaWFsIHlvdQphZGQgdG8gYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgKGlmIGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mCnRoYXQgbWF0ZXJpYWwpIHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRlcm1zOgoKICAgIGEpIERpc2NsYWltaW5nIHdhcnJhbnR5IG9yIGxpbWl0aW5nIGxpYWJpbGl0eSBkaWZmZXJlbnRseSBmcm9tIHRoZQogICAgdGVybXMgb2Ygc2VjdGlvbnMgMTUgYW5kIDE2IG9mIHRoaXMgTGljZW5zZTsgb3IKCiAgICBiKSBSZXF1aXJpbmcgcHJlc2VydmF0aW9uIG9mIHNwZWNpZmllZCByZWFzb25hYmxlIGxlZ2FsIG5vdGljZXMgb3IKICAgIGF1dGhvciBhdHRyaWJ1dGlvbnMgaW4gdGhhdCBtYXRlcmlhbCBvciBpbiB0aGUgQXBwcm9wcmlhdGUgTGVnYWwKICAgIE5vdGljZXMgZGlzcGxheWVkIGJ5IHdvcmtzIGNvbnRhaW5pbmcgaXQ7IG9yCgogICAgYykgUHJvaGliaXRpbmcgbWlzcmVwcmVzZW50YXRpb24gb2YgdGhlIG9yaWdpbiBvZiB0aGF0IG1hdGVyaWFsLCBvcgogICAgcmVxdWlyaW5nIHRoYXQgbW9kaWZpZWQgdmVyc2lvbnMgb2Ygc3VjaCBtYXRlcmlhbCBiZSBtYXJrZWQgaW4KICAgIHJlYXNvbmFibGUgd2F5cyBhcyBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgdmVyc2lvbjsgb3IKCiAgICBkKSBMaW1pdGluZyB0aGUgdXNlIGZvciBwdWJsaWNpdHkgcHVycG9zZXMgb2YgbmFtZXMgb2YgbGljZW5zb3JzIG9yCiAgICBhdXRob3JzIG9mIHRoZSBtYXRlcmlhbDsgb3IKCiAgICBlKSBEZWNsaW5pbmcgdG8gZ3JhbnQgcmlnaHRzIHVuZGVyIHRyYWRlbWFyayBsYXcgZm9yIHVzZSBvZiBzb21lCiAgICB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgb3Igc2VydmljZSBtYXJrczsgb3IKCiAgICBmKSBSZXF1aXJpbmcgaW5kZW1uaWZpY2F0aW9uIG9mIGxpY2Vuc29ycyBhbmQgYXV0aG9ycyBvZiB0aGF0CiAgICBtYXRlcmlhbCBieSBhbnlvbmUgd2hvIGNvbnZleXMgdGhlIG1hdGVyaWFsIChvciBtb2RpZmllZCB2ZXJzaW9ucyBvZgogICAgaXQpIHdpdGggY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgb2YgbGlhYmlsaXR5IHRvIHRoZSByZWNpcGllbnQsIGZvcgogICAgYW55IGxpYWJpbGl0eSB0aGF0IHRoZXNlIGNvbnRyYWN0dWFsIGFzc3VtcHRpb25zIGRpcmVjdGx5IGltcG9zZSBvbgogICAgdGhvc2UgbGljZW5zb3JzIGFuZCBhdXRob3JzLgoKICBBbGwgb3RoZXIgbm9uLXBlcm1pc3NpdmUgYWRkaXRpb25hbCB0ZXJtcyBhcmUgY29uc2lkZXJlZCAiZnVydGhlcgpyZXN0cmljdGlvbnMiIHdpdGhpbiB0aGUgbWVhbmluZyBvZiBzZWN0aW9uIDEwLiAgSWYgdGhlIFByb2dyYW0gYXMgeW91CnJlY2VpdmVkIGl0LCBvciBhbnkgcGFydCBvZiBpdCwgY29udGFpbnMgYSBub3RpY2Ugc3RhdGluZyB0aGF0IGl0IGlzCmdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIGEgdGVybSB0aGF0IGlzIGEgZnVydGhlcgpyZXN0cmljdGlvbiwgeW91IG1heSByZW1vdmUgdGhhdCB0ZXJtLiAgSWYgYSBsaWNlbnNlIGRvY3VtZW50IGNvbnRhaW5zCmEgZnVydGhlciByZXN0cmljdGlvbiBidXQgcGVybWl0cyByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcgdW5kZXIgdGhpcwpMaWNlbnNlLCB5b3UgbWF5IGFkZCB0byBhIGNvdmVyZWQgd29yayBtYXRlcmlhbCBnb3Zlcm5lZCBieSB0aGUgdGVybXMKb2YgdGhhdCBsaWNlbnNlIGRvY3VtZW50LCBwcm92aWRlZCB0aGF0IHRoZSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGRvZXMKbm90IHN1cnZpdmUgc3VjaCByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcuCgogIElmIHlvdSBhZGQgdGVybXMgdG8gYSBjb3ZlcmVkIHdvcmsgaW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uLCB5b3UKbXVzdCBwbGFjZSwgaW4gdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcywgYSBzdGF0ZW1lbnQgb2YgdGhlCmFkZGl0aW9uYWwgdGVybXMgdGhhdCBhcHBseSB0byB0aG9zZSBmaWxlcywgb3IgYSBub3RpY2UgaW5kaWNhdGluZwp3aGVyZSB0byBmaW5kIHRoZSBhcHBsaWNhYmxlIHRlcm1zLgoKICBBZGRpdGlvbmFsIHRlcm1zLCBwZXJtaXNzaXZlIG9yIG5vbi1wZXJtaXNzaXZlLCBtYXkgYmUgc3RhdGVkIGluIHRoZQpmb3JtIG9mIGEgc2VwYXJhdGVseSB3cml0dGVuIGxpY2Vuc2UsIG9yIHN0YXRlZCBhcyBleGNlcHRpb25zOwp0aGUgYWJvdmUgcmVxdWlyZW1lbnRzIGFwcGx5IGVpdGhlciB3YXkuCgogIDguIFRlcm1pbmF0aW9uLgoKICBZb3UgbWF5IG5vdCBwcm9wYWdhdGUgb3IgbW9kaWZ5IGEgY292ZXJlZCB3b3JrIGV4Y2VwdCBhcyBleHByZXNzbHkKcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIHByb3BhZ2F0ZSBvcgptb2RpZnkgaXQgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIKdGhpcyBMaWNlbnNlIChpbmNsdWRpbmcgYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoZSB0aGlyZApwYXJhZ3JhcGggb2Ygc2VjdGlvbiAxMSkuCgogIEhvd2V2ZXIsIGlmIHlvdSBjZWFzZSBhbGwgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgdGhlbiB5b3VyCmxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIChhKQpwcm92aXNpb25hbGx5LCB1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxpY2l0bHkgYW5kCmZpbmFsbHkgdGVybWluYXRlcyB5b3VyIGxpY2Vuc2UsIGFuZCAoYikgcGVybWFuZW50bHksIGlmIHRoZSBjb3B5cmlnaHQKaG9sZGVyIGZhaWxzIHRvIG5vdGlmeSB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMKcHJpb3IgdG8gNjAgZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLgoKICBNb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMKcmVpbnN0YXRlZCBwZXJtYW5lbnRseSBpZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3RpZmllcyB5b3Ugb2YgdGhlCnZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMsIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgeW91IGhhdmUKcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbSB0aGF0CmNvcHlyaWdodCBob2xkZXIsIGFuZCB5b3UgY3VyZSB0aGUgdmlvbGF0aW9uIHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIKeW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuCgogIFRlcm1pbmF0aW9uIG9mIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgc2VjdGlvbiBkb2VzIG5vdCB0ZXJtaW5hdGUgdGhlCmxpY2Vuc2VzIG9mIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tIHlvdSB1bmRlcgp0aGlzIExpY2Vuc2UuICBJZiB5b3VyIHJpZ2h0cyBoYXZlIGJlZW4gdGVybWluYXRlZCBhbmQgbm90IHBlcm1hbmVudGx5CnJlaW5zdGF0ZWQsIHlvdSBkbyBub3QgcXVhbGlmeSB0byByZWNlaXZlIG5ldyBsaWNlbnNlcyBmb3IgdGhlIHNhbWUKbWF0ZXJpYWwgdW5kZXIgc2VjdGlvbiAxMC4KCiAgOS4gQWNjZXB0YW5jZSBOb3QgUmVxdWlyZWQgZm9yIEhhdmluZyBDb3BpZXMuCgogIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gcmVjZWl2ZSBvcgpydW4gYSBjb3B5IG9mIHRoZSBQcm9ncmFtLiAgQW5jaWxsYXJ5IHByb3BhZ2F0aW9uIG9mIGEgY292ZXJlZCB3b3JrCm9jY3VycmluZyBzb2xlbHkgYXMgYSBjb25zZXF1ZW5jZSBvZiB1c2luZyBwZWVyLXRvLXBlZXIgdHJhbnNtaXNzaW9uCnRvIHJlY2VpdmUgYSBjb3B5IGxpa2V3aXNlIGRvZXMgbm90IHJlcXVpcmUgYWNjZXB0YW5jZS4gIEhvd2V2ZXIsCm5vdGhpbmcgb3RoZXIgdGhhbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIHByb3BhZ2F0ZSBvcgptb2RpZnkgYW55IGNvdmVyZWQgd29yay4gIFRoZXNlIGFjdGlvbnMgaW5mcmluZ2UgY29weXJpZ2h0IGlmIHlvdSBkbwpub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIHByb3BhZ2F0aW5nIGEKY292ZXJlZCB3b3JrLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzby4KCiAgMTAuIEF1dG9tYXRpYyBMaWNlbnNpbmcgb2YgRG93bnN0cmVhbSBSZWNpcGllbnRzLgoKICBFYWNoIHRpbWUgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5CnJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvcnMsIHRvIHJ1biwgbW9kaWZ5IGFuZApwcm9wYWdhdGUgdGhhdCB3b3JrLCBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlCmZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHdpdGggdGhpcyBMaWNlbnNlLgoKICBBbiAiZW50aXR5IHRyYW5zYWN0aW9uIiBpcyBhIHRyYW5zYWN0aW9uIHRyYW5zZmVycmluZyBjb250cm9sIG9mIGFuCm9yZ2FuaXphdGlvbiwgb3Igc3Vic3RhbnRpYWxseSBhbGwgYXNzZXRzIG9mIG9uZSwgb3Igc3ViZGl2aWRpbmcgYW4Kb3JnYW5pemF0aW9uLCBvciBtZXJnaW5nIG9yZ2FuaXphdGlvbnMuICBJZiBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQKd29yayByZXN1bHRzIGZyb20gYW4gZW50aXR5IHRyYW5zYWN0aW9uLCBlYWNoIHBhcnR5IHRvIHRoYXQKdHJhbnNhY3Rpb24gd2hvIHJlY2VpdmVzIGEgY29weSBvZiB0aGUgd29yayBhbHNvIHJlY2VpdmVzIHdoYXRldmVyCmxpY2Vuc2VzIHRvIHRoZSB3b3JrIHRoZSBwYXJ0eSdzIHByZWRlY2Vzc29yIGluIGludGVyZXN0IGhhZCBvciBjb3VsZApnaXZlIHVuZGVyIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGgsIHBsdXMgYSByaWdodCB0byBwb3NzZXNzaW9uIG9mIHRoZQpDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBmcm9tIHRoZSBwcmVkZWNlc3NvciBpbiBpbnRlcmVzdCwgaWYKdGhlIHByZWRlY2Vzc29yIGhhcyBpdCBvciBjYW4gZ2V0IGl0IHdpdGggcmVhc29uYWJsZSBlZmZvcnRzLgoKICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSBleGVyY2lzZSBvZiB0aGUKcmlnaHRzIGdyYW50ZWQgb3IgYWZmaXJtZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgRm9yIGV4YW1wbGUsIHlvdSBtYXkKbm90IGltcG9zZSBhIGxpY2Vuc2UgZmVlLCByb3lhbHR5LCBvciBvdGhlciBjaGFyZ2UgZm9yIGV4ZXJjaXNlIG9mCnJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHlvdSBtYXkgbm90IGluaXRpYXRlIGxpdGlnYXRpb24KKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQKYW55IHBhdGVudCBjbGFpbSBpcyBpbmZyaW5nZWQgYnkgbWFraW5nLCB1c2luZywgc2VsbGluZywgb2ZmZXJpbmcgZm9yCnNhbGUsIG9yIGltcG9ydGluZyB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbiBvZiBpdC4KCiAgMTEuIFBhdGVudHMuCgogIEEgImNvbnRyaWJ1dG9yIiBpcyBhIGNvcHlyaWdodCBob2xkZXIgd2hvIGF1dGhvcml6ZXMgdXNlIHVuZGVyIHRoaXMKTGljZW5zZSBvZiB0aGUgUHJvZ3JhbSBvciBhIHdvcmsgb24gd2hpY2ggdGhlIFByb2dyYW0gaXMgYmFzZWQuICBUaGUKd29yayB0aHVzIGxpY2Vuc2VkIGlzIGNhbGxlZCB0aGUgY29udHJpYnV0b3IncyAiY29udHJpYnV0b3IgdmVyc2lvbiIuCgogIEEgY29udHJpYnV0b3IncyAiZXNzZW50aWFsIHBhdGVudCBjbGFpbXMiIGFyZSBhbGwgcGF0ZW50IGNsYWltcwpvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBjb250cmlidXRvciwgd2hldGhlciBhbHJlYWR5IGFjcXVpcmVkIG9yCmhlcmVhZnRlciBhY3F1aXJlZCwgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgYnkgc29tZSBtYW5uZXIsIHBlcm1pdHRlZApieSB0aGlzIExpY2Vuc2UsIG9mIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24sCmJ1dCBkbyBub3QgaW5jbHVkZSBjbGFpbXMgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgb25seSBhcyBhCmNvbnNlcXVlbmNlIG9mIGZ1cnRoZXIgbW9kaWZpY2F0aW9uIG9mIHRoZSBjb250cmlidXRvciB2ZXJzaW9uLiAgRm9yCnB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIGluY2x1ZGVzIHRoZSByaWdodCB0byBncmFudApwYXRlbnQgc3VibGljZW5zZXMgaW4gYSBtYW5uZXIgY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YKdGhpcyBMaWNlbnNlLgoKICBFYWNoIGNvbnRyaWJ1dG9yIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZQpwYXRlbnQgbGljZW5zZSB1bmRlciB0aGUgY29udHJpYnV0b3IncyBlc3NlbnRpYWwgcGF0ZW50IGNsYWltcywgdG8KbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0IGFuZCBvdGhlcndpc2UgcnVuLCBtb2RpZnkgYW5kCnByb3BhZ2F0ZSB0aGUgY29udGVudHMgb2YgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24uCgogIEluIHRoZSBmb2xsb3dpbmcgdGhyZWUgcGFyYWdyYXBocywgYSAicGF0ZW50IGxpY2Vuc2UiIGlzIGFueSBleHByZXNzCmFncmVlbWVudCBvciBjb21taXRtZW50LCBob3dldmVyIGRlbm9taW5hdGVkLCBub3QgdG8gZW5mb3JjZSBhIHBhdGVudAooc3VjaCBhcyBhbiBleHByZXNzIHBlcm1pc3Npb24gdG8gcHJhY3RpY2UgYSBwYXRlbnQgb3IgY292ZW5hbnQgbm90IHRvCnN1ZSBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCkuICBUbyAiZ3JhbnQiIHN1Y2ggYSBwYXRlbnQgbGljZW5zZSB0byBhCnBhcnR5IG1lYW5zIHRvIG1ha2Ugc3VjaCBhbiBhZ3JlZW1lbnQgb3IgY29tbWl0bWVudCBub3QgdG8gZW5mb3JjZSBhCnBhdGVudCBhZ2FpbnN0IHRoZSBwYXJ0eS4KCiAgSWYgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywga25vd2luZ2x5IHJlbHlpbmcgb24gYSBwYXRlbnQgbGljZW5zZSwKYW5kIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBpcyBub3QgYXZhaWxhYmxlIGZvciBhbnlvbmUKdG8gY29weSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHRocm91Z2ggYQpwdWJsaWNseSBhdmFpbGFibGUgbmV0d29yayBzZXJ2ZXIgb3Igb3RoZXIgcmVhZGlseSBhY2Nlc3NpYmxlIG1lYW5zLAp0aGVuIHlvdSBtdXN0IGVpdGhlciAoMSkgY2F1c2UgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIHRvIGJlIHNvCmF2YWlsYWJsZSwgb3IgKDIpIGFycmFuZ2UgdG8gZGVwcml2ZSB5b3Vyc2VsZiBvZiB0aGUgYmVuZWZpdCBvZiB0aGUKcGF0ZW50IGxpY2Vuc2UgZm9yIHRoaXMgcGFydGljdWxhciB3b3JrLCBvciAoMykgYXJyYW5nZSwgaW4gYSBtYW5uZXIKY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlLCB0byBleHRlbmQgdGhlIHBhdGVudApsaWNlbnNlIHRvIGRvd25zdHJlYW0gcmVjaXBpZW50cy4gICJLbm93aW5nbHkgcmVseWluZyIgbWVhbnMgeW91IGhhdmUKYWN0dWFsIGtub3dsZWRnZSB0aGF0LCBidXQgZm9yIHRoZSBwYXRlbnQgbGljZW5zZSwgeW91ciBjb252ZXlpbmcgdGhlCmNvdmVyZWQgd29yayBpbiBhIGNvdW50cnksIG9yIHlvdXIgcmVjaXBpZW50J3MgdXNlIG9mIHRoZSBjb3ZlcmVkIHdvcmsKaW4gYSBjb3VudHJ5LCB3b3VsZCBpbmZyaW5nZSBvbmUgb3IgbW9yZSBpZGVudGlmaWFibGUgcGF0ZW50cyBpbiB0aGF0CmNvdW50cnkgdGhhdCB5b3UgaGF2ZSByZWFzb24gdG8gYmVsaWV2ZSBhcmUgdmFsaWQuCgogIElmLCBwdXJzdWFudCB0byBvciBpbiBjb25uZWN0aW9uIHdpdGggYSBzaW5nbGUgdHJhbnNhY3Rpb24gb3IKYXJyYW5nZW1lbnQsIHlvdSBjb252ZXksIG9yIHByb3BhZ2F0ZSBieSBwcm9jdXJpbmcgY29udmV5YW5jZSBvZiwgYQpjb3ZlcmVkIHdvcmssIGFuZCBncmFudCBhIHBhdGVudCBsaWNlbnNlIHRvIHNvbWUgb2YgdGhlIHBhcnRpZXMKcmVjZWl2aW5nIHRoZSBjb3ZlcmVkIHdvcmsgYXV0aG9yaXppbmcgdGhlbSB0byB1c2UsIHByb3BhZ2F0ZSwgbW9kaWZ5Cm9yIGNvbnZleSBhIHNwZWNpZmljIGNvcHkgb2YgdGhlIGNvdmVyZWQgd29yaywgdGhlbiB0aGUgcGF0ZW50IGxpY2Vuc2UKeW91IGdyYW50IGlzIGF1dG9tYXRpY2FsbHkgZXh0ZW5kZWQgdG8gYWxsIHJlY2lwaWVudHMgb2YgdGhlIGNvdmVyZWQKd29yayBhbmQgd29ya3MgYmFzZWQgb24gaXQuCgogIEEgcGF0ZW50IGxpY2Vuc2UgaXMgImRpc2NyaW1pbmF0b3J5IiBpZiBpdCBkb2VzIG5vdCBpbmNsdWRlIHdpdGhpbgp0aGUgc2NvcGUgb2YgaXRzIGNvdmVyYWdlLCBwcm9oaWJpdHMgdGhlIGV4ZXJjaXNlIG9mLCBvciBpcwpjb25kaXRpb25lZCBvbiB0aGUgbm9uLWV4ZXJjaXNlIG9mIG9uZSBvciBtb3JlIG9mIHRoZSByaWdodHMgdGhhdCBhcmUKc3BlY2lmaWNhbGx5IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgWW91IG1heSBub3QgY29udmV5IGEgY292ZXJlZAp3b3JrIGlmIHlvdSBhcmUgYSBwYXJ0eSB0byBhbiBhcnJhbmdlbWVudCB3aXRoIGEgdGhpcmQgcGFydHkgdGhhdCBpcwppbiB0aGUgYnVzaW5lc3Mgb2YgZGlzdHJpYnV0aW5nIHNvZnR3YXJlLCB1bmRlciB3aGljaCB5b3UgbWFrZSBwYXltZW50CnRvIHRoZSB0aGlyZCBwYXJ0eSBiYXNlZCBvbiB0aGUgZXh0ZW50IG9mIHlvdXIgYWN0aXZpdHkgb2YgY29udmV5aW5nCnRoZSB3b3JrLCBhbmQgdW5kZXIgd2hpY2ggdGhlIHRoaXJkIHBhcnR5IGdyYW50cywgdG8gYW55IG9mIHRoZQpwYXJ0aWVzIHdobyB3b3VsZCByZWNlaXZlIHRoZSBjb3ZlcmVkIHdvcmsgZnJvbSB5b3UsIGEgZGlzY3JpbWluYXRvcnkKcGF0ZW50IGxpY2Vuc2UgKGEpIGluIGNvbm5lY3Rpb24gd2l0aCBjb3BpZXMgb2YgdGhlIGNvdmVyZWQgd29yawpjb252ZXllZCBieSB5b3UgKG9yIGNvcGllcyBtYWRlIGZyb20gdGhvc2UgY29waWVzKSwgb3IgKGIpIHByaW1hcmlseQpmb3IgYW5kIGluIGNvbm5lY3Rpb24gd2l0aCBzcGVjaWZpYyBwcm9kdWN0cyBvciBjb21waWxhdGlvbnMgdGhhdApjb250YWluIHRoZSBjb3ZlcmVkIHdvcmssIHVubGVzcyB5b3UgZW50ZXJlZCBpbnRvIHRoYXQgYXJyYW5nZW1lbnQsCm9yIHRoYXQgcGF0ZW50IGxpY2Vuc2Ugd2FzIGdyYW50ZWQsIHByaW9yIHRvIDI4IE1hcmNoIDIwMDcuCgogIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGNvbnN0cnVlZCBhcyBleGNsdWRpbmcgb3IgbGltaXRpbmcKYW55IGltcGxpZWQgbGljZW5zZSBvciBvdGhlciBkZWZlbnNlcyB0byBpbmZyaW5nZW1lbnQgdGhhdCBtYXkKb3RoZXJ3aXNlIGJlIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYXBwbGljYWJsZSBwYXRlbnQgbGF3LgoKICAxMi4gTm8gU3VycmVuZGVyIG9mIE90aGVycycgRnJlZWRvbS4KCiAgSWYgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgpvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CmV4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90IGNvbnZleSBhCmNvdmVyZWQgd29yayBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcwpMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91IG1heQpub3QgY29udmV5IGl0IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiB5b3UgYWdyZWUgdG8gdGVybXMgdGhhdCBvYmxpZ2F0ZSB5b3UKdG8gY29sbGVjdCBhIHJveWFsdHkgZm9yIGZ1cnRoZXIgY29udmV5aW5nIGZyb20gdGhvc2UgdG8gd2hvbSB5b3UgY29udmV5CnRoZSBQcm9ncmFtLCB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCB0aG9zZSB0ZXJtcyBhbmQgdGhpcwpMaWNlbnNlIHdvdWxkIGJlIHRvIHJlZnJhaW4gZW50aXJlbHkgZnJvbSBjb252ZXlpbmcgdGhlIFByb2dyYW0uCgogIDEzLiBVc2Ugd2l0aCB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgoKICBOb3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIHlvdSBoYXZlCnBlcm1pc3Npb24gdG8gbGluayBvciBjb21iaW5lIGFueSBjb3ZlcmVkIHdvcmsgd2l0aCBhIHdvcmsgbGljZW5zZWQKdW5kZXIgdmVyc2lvbiAzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW50byBhIHNpbmdsZQpjb21iaW5lZCB3b3JrLCBhbmQgdG8gY29udmV5IHRoZSByZXN1bHRpbmcgd29yay4gIFRoZSB0ZXJtcyBvZiB0aGlzCkxpY2Vuc2Ugd2lsbCBjb250aW51ZSB0byBhcHBseSB0byB0aGUgcGFydCB3aGljaCBpcyB0aGUgY292ZXJlZCB3b3JrLApidXQgdGhlIHNwZWNpYWwgcmVxdWlyZW1lbnRzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCnNlY3Rpb24gMTMsIGNvbmNlcm5pbmcgaW50ZXJhY3Rpb24gdGhyb3VnaCBhIG5ldHdvcmsgd2lsbCBhcHBseSB0byB0aGUKY29tYmluYXRpb24gYXMgc3VjaC4KCiAgMTQuIFJldmlzZWQgVmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlLgoKICBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZgp0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCmJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bwphZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KCiAgRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUKUHJvZ3JhbSBzcGVjaWZpZXMgdGhhdCBhIGNlcnRhaW4gbnVtYmVyZWQgdmVyc2lvbiBvZiB0aGUgR05VIEdlbmVyYWwKUHVibGljIExpY2Vuc2UgIm9yIGFueSBsYXRlciB2ZXJzaW9uIiBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUKb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgbnVtYmVyZWQKdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGUKR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkCmJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCgogIElmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGljaCBmdXR1cmUKdmVyc2lvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGNhbiBiZSB1c2VkLCB0aGF0IHByb3h5J3MKcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGEgdmVyc2lvbiBwZXJtYW5lbnRseSBhdXRob3JpemVzIHlvdQp0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUgUHJvZ3JhbS4KCiAgTGF0ZXIgbGljZW5zZSB2ZXJzaW9ucyBtYXkgZ2l2ZSB5b3UgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQKcGVybWlzc2lvbnMuICBIb3dldmVyLCBubyBhZGRpdGlvbmFsIG9ibGlnYXRpb25zIGFyZSBpbXBvc2VkIG9uIGFueQphdXRob3Igb3IgY29weXJpZ2h0IGhvbGRlciBhcyBhIHJlc3VsdCBvZiB5b3VyIGNob29zaW5nIHRvIGZvbGxvdyBhCmxhdGVyIHZlcnNpb24uCgogIDE1LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LgoKICBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZCkFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQKSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWQpPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgpQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTQpJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YKQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgoKICAxNi4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuCgogIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORwpXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1PRElGSUVTIEFORC9PUiBDT05WRVlTClRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWQpHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUKVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRgpEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRApQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwKRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgpTVUNIIERBTUFHRVMuCgogIDE3LiBJbnRlcnByZXRhdGlvbiBvZiBTZWN0aW9ucyAxNSBhbmQgMTYuCgogIElmIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGFuZCBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBwcm92aWRlZAphYm92ZSBjYW5ub3QgYmUgZ2l2ZW4gbG9jYWwgbGVnYWwgZWZmZWN0IGFjY29yZGluZyB0byB0aGVpciB0ZXJtcywKcmV2aWV3aW5nIGNvdXJ0cyBzaGFsbCBhcHBseSBsb2NhbCBsYXcgdGhhdCBtb3N0IGNsb3NlbHkgYXBwcm94aW1hdGVzCmFuIGFic29sdXRlIHdhaXZlciBvZiBhbGwgY2l2aWwgbGlhYmlsaXR5IGluIGNvbm5lY3Rpb24gd2l0aCB0aGUKUHJvZ3JhbSwgdW5sZXNzIGEgd2FycmFudHkgb3IgYXNzdW1wdGlvbiBvZiBsaWFiaWxpdHkgYWNjb21wYW5pZXMgYQpjb3B5IG9mIHRoZSBQcm9ncmFtIGluIHJldHVybiBmb3IgYSBmZWUuCgogICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKCiAgICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcwoKICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0CnBvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCgogIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0CnRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKc3RhdGUgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAp0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KCiAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgogICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KCiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCgogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCgogIElmIHRoZSBwcm9ncmFtIGRvZXMgdGVybWluYWwgaW50ZXJhY3Rpb24sIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQKbm90aWNlIGxpa2UgdGhpcyB3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgoKICAgIDxwcm9ncmFtPiAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KICAgIFRoaXMgcHJvZ3JhbSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCiAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CiAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCgpUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHlvdXIgcHJvZ3JhbSdzIGNvbW1hbmRzCm1pZ2h0IGJlIGRpZmZlcmVudDsgZm9yIGEgR1VJIGludGVyZmFjZSwgeW91IHdvdWxkIHVzZSBhbiAiYWJvdXQgYm94Ii4KCiAgWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHNjaG9vbCwKaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmIG5lY2Vzc2FyeS4KRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcywgYW5kIGhvdyB0byBhcHBseSBhbmQgZm9sbG93IHRoZSBHTlUgR1BMLCBzZWUKPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtCmludG8gcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdQptYXkgY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGgKdGhlIGxpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsClB1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLiAgQnV0IGZpcnN0LCBwbGVhc2UgcmVhZAo8aHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkvd2h5LW5vdC1sZ3BsLmh0bWw+Lgo=]]></data>
	</file>
	<file>
	  <filename>/function.admin_classifications_tab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENSRUFfU2ltcGxlIChjKSAyMDEzIGJ5IFJvYmVydCBDYW1wYmVsbCAKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBwcm92aWRlIGEgc2ltcGxlIGludGVyZmFjZQojICB0byB0aGUgQ1JFQSB3ZWIgc2VydmljZS4KIyAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIAojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiggISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJykgKSByZXR1cm47Cgokc21hcnR5LT5hc3NpZ24oJ2Zvcm1zdGFydCcsJHRoaXMtPkNHQ3JlYXRlRm9ybVN0YXJ0KCRpZCwnYWRtaW5fY2xhc3NpZmljYXRpb25zX3RhYicpKTsKJHNtYXJ0eS0+YXNzaWduKCdmb3JtZW5kJywkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKCiRjb21tZXJjaWFsX3R5cGVzID0gY3JlYV91dGlsczo6Z2V0X3Byb3BlcnR5dHlwZXMoY3JlYV91dGlsczo6Q0xBU1NfQ09NTUVSQ0lBTCk7CiRzbWFydHktPmFzc2lnbignY29tbWVyY2lhbF90eXBlcycsaW1wbG9kZSgiXG4iLCRjb21tZXJjaWFsX3R5cGVzKSk7CgokcmVzaWRlbnRpYWxfdHlwZXMgPSBjcmVhX3V0aWxzOjpnZXRfcHJvcGVydHl0eXBlcyhjcmVhX3V0aWxzOjpDTEFTU19SRVNJREVOVElBTCk7CiRzbWFydHktPmFzc2lnbigncmVzaWRlbnRpYWxfdHlwZXMnLGltcGxvZGUoIlxuIiwkcmVzaWRlbnRpYWxfdHlwZXMpKTsKCiRsYW5kX3R5cGVzID0gY3JlYV91dGlsczo6Z2V0X3Byb3BlcnR5dHlwZXMoY3JlYV91dGlsczo6Q0xBU1NfTEFORCk7CiRzbWFydHktPmFzc2lnbignbGFuZF90eXBlcycsaW1wbG9kZSgiXG4iLCRsYW5kX3R5cGVzKSk7CgplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2FkbWluX2NsYXNzaWZpY2F0aW9uc190YWIudHBsJyk7CgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/function.admin_detailtemplates_tab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENSRUFfU2ltcGxlIChjKSAyMDEzIGJ5IFJvYmVydCBDYW1wYmVsbCAKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBwcm92aWRlIGEgc2ltcGxlIGludGVyZmFjZQojICB0byB0aGUgQ1JFQSB3ZWIgc2VydmljZS4KIyAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIAojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICEkZ0NtcyApIGV4aXQ7CmlmKCAhJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFRlbXBsYXRlcycpICkgcmV0dXJuOwoKZWNobyAnPGRpdiBjbGFzcz0iaW5mb3JtYXRpb24iPicuJHRoaXMtPkxhbmcoJ2luZm9fZGV0YWlsX3RlbXBsYXRlcycpLic8L2Rpdj4nOwplY2hvICR0aGlzLT5TaG93VGVtcGxhdGVMaXN0KCRpZCwkcmV0dXJuaWQsJ2RldGFpbCcsCgkJCSAgICAgJ2RlZmF1bHRfZGV0YWlsX3RlbXBsYXRlX2NvbnRlbnRzJywKCQkJICAgICAnZGV0YWlsdGVtcGxhdGVzJywKCQkJICAgICAnY3VycmVudF9kZXRhaWwnLAoJCQkgICAgICR0aGlzLT5MYW5nKCdhZGRlZGl0X2RldGFpbF90ZW1wbGF0ZScpKTsKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/function.admin_prototypetemplates_tab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENSRUFfU2ltcGxlIChjKSAyMDEzIGJ5IFJvYmVydCBDYW1wYmVsbCAKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBwcm92aWRlIGEgc2ltcGxlIGludGVyZmFjZQojICB0byB0aGUgQ1JFQSB3ZWIgc2VydmljZS4KIyAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIAojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICEkZ0NtcyApIGV4aXQ7CmlmKCAhJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFRlbXBsYXRlcycpICkgcmV0dXJuOwoKZWNobyAnPGRpdiBjbGFzcz0iaW5mb3JtYXRpb24iPicuJHRoaXMtPkxhbmcoJ2luZm9fcHJvdG90eXBlX3RlbXBsYXRlJykuJzwvZGl2Pic7CgplY2hvICR0aGlzLT5HZXREZWZhdWx0VGVtcGxhdGVGb3JtKCR0aGlzLCRpZCwkcmV0dXJuaWQsJ2RlZmF1bHRfc3VtbWFyeV90ZW1wbGF0ZV9jb250ZW50cycsCgkJCQkgICAnZGVmYXVsdGFkbWluJywncHJvdG90eXBldGVtcGxhdGVzJywKCQkJCSAgICR0aGlzLT5MYW5nKCd0aXRsZV9wcm90b3R5cGVfc3VtbWFyeV90ZW1wbGF0ZScpLAoJCQkJICAgJ29yaWdfc3VtbWFyeV90ZW1wbGF0ZS50cGwnKTsKCmVjaG8gJzxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206IDAuNWVtOyBoZWlnaHQ6IDAuNWVtOyBib3JkZXItdG9wOiAxcHggc29saWQgIzAwMDsgd2lkdGg6IDgwJTsiPjwvZGl2PicuIlxuIjsKCmVjaG8gJHRoaXMtPkdldERlZmF1bHRUZW1wbGF0ZUZvcm0oJHRoaXMsJGlkLCRyZXR1cm5pZCwnZGVmYXVsdF9kZXRhaWxfdGVtcGxhdGVfY29udGVudHMnLAoJCQkJICAgJ2RlZmF1bHRhZG1pbicsJ3Byb3RvdHlwZXRlbXBsYXRlcycsCgkJCQkgICAkdGhpcy0+TGFuZygndGl0bGVfcHJvdG90eXBlX2RldGFpbF90ZW1wbGF0ZScpLAoJCQkJICAgJ29yaWdfZGV0YWlsX3RlbXBsYXRlLnRwbCcpOwoKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/function.admin_settings_tab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENSRUFfU2ltcGxlIChjKSAyMDEzIGJ5IFJvYmVydCBDYW1wYmVsbCAKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBwcm92aWRlIGEgc2ltcGxlIGludGVyZmFjZQojICB0byB0aGUgQ1JFQSB3ZWIgc2VydmljZS4KIyAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIAojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICEkZ0NtcyApIGV4aXQ7CmlmKCAhJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKSApIHJldHVybjsKCiRzbWFydHktPmFzc2lnbignY3JlYV91c2VybmFtZScsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2NyZWFfdXNlcm5hbWUnKSk7CiRzbWFydHktPmFzc2lnbignY3JlYV9wYXNzd29yZCcsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2NyZWFfcGFzc3dvcmQnKSk7CiRzbWFydHktPmFzc2lnbignY2FjaGVfbGlmZXRpbWUnLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdjYWNoZV9saWZldGltZScsMikpOwokc21hcnR5LT5hc3NpZ24oJ2RldGFpbHBhZ2UnLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdkZXRhaWxwYWdlJykpOwokc21hcnR5LT5hc3NpZ24oJ3VybHByZWZpeCcsJHRoaXMtPkdldFByZWZlcmVuY2UoJ3VybHByZWZpeCcpKTsKCiR0bXAgPSBhcnJheSgpOwpmb3IoICRpID0gMTsgJGkgPD0gMjQ7ICRpKysgKSB7CiAgJHRtcFskaV0gPSAkaTsKfQokc21hcnR5LT5hc3NpZ24oJ2NhY2hlX29wdGlvbnMnLCR0bXApOwoKJHNtYXJ0eS0+YXNzaWduKCdmb3Jtc3RhcnQnLCR0aGlzLT5DR0NyZWF0ZUZvcm1TdGFydCgkaWQsJ2FkbWluX3NldHRpbmdzX3RhYicsJHJldHVybmlkKSk7CiRzbWFydHktPmFzc2lnbignZm9ybWVuZCcsJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CgplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2FkbWluX3NldHRpbmdzX3RhYi50cGwnKTsKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/function.admin_summarytemplates_tab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENSRUFfU2ltcGxlIChjKSAyMDEzIGJ5IFJvYmVydCBDYW1wYmVsbCAKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBwcm92aWRlIGEgc2ltcGxlIGludGVyZmFjZQojICB0byB0aGUgQ1JFQSB3ZWIgc2VydmljZS4KIyAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIAojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICEkZ0NtcyApIGV4aXQ7CmlmKCAhJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFRlbXBsYXRlcycpICkgcmV0dXJuOwoKZWNobyAnPGRpdiBjbGFzcz0iaW5mb3JtYXRpb24iPicuJHRoaXMtPkxhbmcoJ2luZm9fc3VtbWFyeV90ZW1wbGF0ZXMnKS4nPC9kaXY+JzsKZWNobyAkdGhpcy0+U2hvd1RlbXBsYXRlTGlzdCgkaWQsJHJldHVybmlkLCdzdW1tYXJ5JywKCQkJICAgICAnZGVmYXVsdF9zdW1tYXJ5X3RlbXBsYXRlX2NvbnRlbnRzJywKCQkJICAgICAnc3VtbWFyeXRlbXBsYXRlcycsCgkJCSAgICAgJ2N1cnJlbnRfc3VtbWFyeScsCgkJCSAgICAgJHRoaXMtPkxhbmcoJ2FkZGVkaXRfc3VtbWFyeV90ZW1wbGF0ZScpKTsKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/help.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPlRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZmxleGlibGUgd2F5IG9mIGNhY2hpbmcgYW5kIGRpc3BsYXlpbmcgcmVhbC1lc3RhdGUgbGlzdGluZ3MgZnJvbSB0aGUgQ2FuYWRpYW4gUmVhbCBFc3RhdGUgQXNzb2NpYXRpb24gPGVtPihDUkVBKTwvZW0+IFJFVFMgYmFzZWQgd2Vic2VydmljZS48L3A+CjxoMz5CZWhhdmlvcjwvaDM+CjxwPlRoaXMgbW9kdWxlIGNhY2hlcyB0aGUgYXZhaWxhYmxlIGxpc3RpbmdzIGZyb20gQ1JFQSBhbmQgZGlzcGxheXMgaXQuICBJbmZvcm1hdGlvbiBpcyByZWd1bGFybHkgcmUtZmV0Y2hlZCBmcm9tIHRoZSBkYXRhYmFzZSB1c2luZyBhIENHSm9iTUdSIEpvYi48L3A+CjxoMz5GZWF0dXJlczwvaDM+CiAgPHVsPgogICAgPGxpPlN1bW1hcnkgdmlldyB3aXRoIHBhZ2luYXRpb248L2xpPgogICAgPGxpPkRldGFpbCB2aWV3IHdpdGggY2Fub25pY2FsIFVSTDwvbGk+CiAgICA8bGk+UHJldHR5IFVSTFM8L2xpPgogICAgPGxpPkZsZXhpYmxlIHRlbXBsYXRlIGNvbnRyb2wuPC9saT4KICAgIDxsaT5TdXBwb3J0IGZvciBudW1lcm91cyBpbWFnZXMgcGVyIGxpc3Rpbmc8L2xpPgogIDwvdWw+CjxoMz5Ib3cgZG8gSSB1c2UgaXQ6PC9oMz4KPHVsPgogICA8bGk+MS4gIEluc3RhbGwgYW5kIGNvbmZpZ3VyZSB0aGUgcHJlcmVxdWlzaXRlIG1vZHVsZShzKQogICAgPHA+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBUaGlzIG1vZHVsZSBtYWtlcyB1c2Ugb2YgdGhlIENHSm9iTWdyIG1vZHVsZSBmb3IgcmVwZXRpdGl2ZSwgYXN5bmNob3Jub3VzIHRhc2tzLiAgVGhpcyBtb2R1bGUgbXVzdCBiZSBpbnN0YWxsZWQgYW5kIHByb3Blcmx5IGNvbmZpZ3VyZWQgdG8gb3BlcmF0ZSB2aWEgY3Jvbi48L3A+CiAgIDwvbGk+CiAgIDxsaT4yLiAgSW5zdGFsbCBhbmQgY29uZmlndXJlIHRoZSBtb2R1bGUuCiAgICAgIDxwPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gVmFsaWQgQ1JFQSBjcmVkZW50aWFscyBhcmUgcmVxdWlyZWQuICBUaGlzIG1vZHVsZSBjYW4gb25seSByZWFkIHRoZSBsaXN0aW5ncyBmb3Igd2hpY2ggdGhlIENSRUEgYWNjb3VudCBpcyBhdXRob3JpemVkLjwvcD4KICAgPC9saT4KICAgPGxpPkNhbGwgdGhlIG1vZHVsZQogICAgICA8cD5BZGRpbmcge0NSRUFfU2ltcGxlfSB0byB0aGUgY29udGVudCBhcmVhIG9mIGEgQ01TTVMgcGFnZSBzaG91bGQgYmUgc3VmZmljaWVudC48L3A+CiAgIDwvbGk+CiAgIDxsaT5DcmVhdGUgbmV3IGN1c3RvbWl6ZWQgc3VtbWFyeSBhbmQgZGV0YWlsIHRlbXBsYXRlcy48L2xpPgo8L3VsPgo8cD48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IEFmdGVyIHN1Y2Nlc3NmdWwgY29uZmlndXJhdGlvbiwgaXQgY291bGQgdGFrZSBzZXZlcmFsIG1pbnV0ZXMgZm9yIGRhdGEgdG8gYmUgZG93bmxvYWRlZCBhbmQgY2FjaGVkIGZyb20gQ1JFQS48L3A+CjxwPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gVGhlIHNhbXBsZSB0ZW1wbGF0ZXMgb25seSBzaG93IHRoZSBiYXNpY3Mgb2YgZXh0cmFjdGluZyBkYXRhIGZyb20gdGhlIENSRUEgcmVjb3JkcyBhbmQgZGlzcGxheWluZyBpdC4gIEl0IGNvdWxkIHRha2Ugc29tZSBlZmZvcnQgdG8gY3VzdG9taXplIHRoZSB0ZW1wbGF0ZXMgdG8geW91ciBsaWtpbmcsIHRoZXJlIGlzIGEgZ3JlYXQgZGVhbCBvZiBkYXRhIGF2YWlsYWJsZS48L3A+Cgo8aDM+U3VwcG9ydDwvaDM+CjxwPlRoaXMgbW9kdWxlIGRvZXMgbm90IGluY2x1ZGUgY29tbWVyY2lhbCBzdXBwb3J0LiBIb3dldmVyLCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcmVzb3VyY2VzIGF2YWlsYWJsZSB0byBoZWxwIHlvdSB3aXRoIGl0OjwvcD4KPHVsPgo8bGk+Rm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZSwgRkFRcywgb3IgdG8gZmlsZSBhIEJ1ZyBSZXBvcnQgb3IgYnV5IGNvbW1lcmNpYWwgc3VwcG9ydCwgcGxlYXNlIHZpc2l0IGNhbGd1eVwncwptb2R1bGUgaG9tZXBhZ2UgYXQgPGEgaHJlZj0iaHR0cDovL2NhbGd1eTEwMDAuY29tIj5jYWxndXkxMDAwLmNvbTwvYT4uPC9saT4KPGxpPkFkZGl0aW9uYWwgZGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYWxzbyBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnIj5DTVMgTWFkZSBTaW1wbGUgRm9ydW1zPC9hPi48L2xpPgo8bGk+VGhlIGF1dGhvciwgY2FsZ3V5MTAwMCwgY2FuIG9mdGVuIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSJpcmM6Ly9pcmMuZnJlZW5vZGUubmV0LyNjbXMiPkNNUyBJUkMgQ2hhbm5lbDwvYT4uPC9saT4KPGxpPkxhc3RseSwgeW91IG1heSBoYXZlIHNvbWUgc3VjY2VzcyBlbWFpbGluZyB0aGUgYXV0aG9yIGRpcmVjdGx5LjwvbGk+ICAKPC91bD4KPGgzPlJlcXVpcmVtZW50czwvaDM+Cjx1bD4KICA8bGk+UEhQIDUuMys8L2xpPgogIDxsaT5jdXJsIGV4dGVuc2lvbnM8L2xpPgogIDxsaT5qc29uIGV4dGVuc2lvbnM8L2xpPgogIDxsaT5TaW1wbGVYTUwgc3VwcG9ydDwvbGk+CiAgPGxpPlZhbGlkIENSRUEgYWNjb3VudDwvbGk+CjwvdWw+CjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPgo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMDgsIFJvYmVydCBDYW1wYmVsIDxhIGhyZWY9Im1haWx0bzpjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnIj4mbHQ7Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZyZndDs8L2E+LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+CjxwPlRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cml0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CnRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCihhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uPC9wPgo8cD5Ib3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlCmluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIApzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLjwvcD4KPHA+VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCmJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKT3IgcmVhZCBpdCA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiPm9ubGluZTwvYT48L3A+Cg==]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0EKJGxhbmdbJ2FkZGVkaXRfZGV0YWlsX3RlbXBsYXRlJ10gPSAnQWRkL0VkaXQgYSBkZXRhaWwgdGVtcGxhdGUnOwokbGFuZ1snYWRkZWRpdF9zdW1tYXJ5X3RlbXBsYXRlJ10gPSAnQWRkL0VkaXQgYSBzdW1tYXJ5IHRlbXBsYXRlJzsKCiNCCgojQwokbGFuZ1snY2xhc3NpZmljYXRpb25zJ10gPSAnQ2xhc3NpZmljYXRpb25zJzsKJGxhbmdbJ2NvbmZpcm1fY2xlYXJjYWNoZSddID0gJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBwZXJtYW5lbnRseSBjbGVhciBhbGwgY2FjaGVkIGRhdGE/ICBOb3RoaW5nIHdpbGwgYmUgdmlzaWJsZSBmcm9tIHRoZSBmcm9udGVuZCB1bnRpbCB0aGUgbmV4dCB1cGRhdGU/JzsKJGxhbmdbJ2NvbmZpcm1fc3VibWl0J10gPSAnVGhpcyB3aWxsIGRlbGV0ZSwgYW5kIHJlLWNyZWF0ZSBhbnkgcnVubmluZyBDR0pvYk1nciBqb2JzIGZvciB0aGlzIG1vZHVsZSc7CiRsYW5nWydjb25maXJtX3VwZGF0ZWNhY2hlJ10gPSAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHVwZGF0ZSB0aGUgY2FjaGUgbm93Pyc7CgojRAoKI0UKJGxhbmdbJ2Vycm9yX2NhY2hlZW1wdHknXSA9ICdUaGVyZSBpcyBjdXJyZXRseSBubyBkYXRhIGF2YWlsYWJsZSB0byB2aWV3Li4uIHdlIG11c3QgYmUgcmVmcmVzaGluZyBpdC4gIFBsZWFzZSB0cnkgYWdhaW4gaW4gYSBmZXcgbWludXRlcyc7CiRsYW5nWydlcnJvcl9jZ2pvYm1nciddID0gJ0NHSm9iTWdyIG1vZHVsZSBub3QgZm91bmQgb3IgdG9vIG9sZCc7CiRsYW5nWydlcnJvcl9jb25uZWN0J10gPSAnVW5rbm93biBjb25uZWN0aW9uIGVycm9yJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRwYXJhbSddID0gJ0ludmFsaWQgb3IgbWlzc2luZyBwYXJhbWV0ZXI6ICVzJzsKJGxhbmdbJ2Vycm9yX25vZGF0YSddID0gJ09vb3BzLi4uIHNvbWV0aGluZyBoYXBwZW5lZCwgYW5kIHdlIGNhbnQgZmluZCBhbnkgbGlzdGluZ3MuICBQbGVhc2UgdHJ5IGFnYWluIGluIGEgZmV3IG1pbnV0ZXMnOwokbGFuZ1snZXJyb3Jfbm91cGRhdGVzbmVlZGVkJ10gPSAnTm8gdXBkYXRlcyBuZWVkZWQnOwoKI0YKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ1NpbXBsZSBDUkVBIExpc3RpbmdzJzsKCiNHCgojSAokbGFuZ1snaGVscF9kZXRhaWxwYWdlJ10gPSAnQXBwbGljYWJsZSBvbmx5IHRvIHRoZSBzdW1tYXJ5IGFjdGlvbiwgdGhpcyBwYXJhbWV0ZXIgYWxsb3dzIHNwZWNpZnlpbmcgYSBkaWZmZXJlbnQgcGFnZSAoYW5kIHRoZXJlZm9yZSB0ZW1wbGF0ZSkgZm9yIHRoZSBkZXRhaWwgdmlldyc7CiRsYW5nWydoZWxwX2RldGFpbHRlbXBsYXRlJ10gPSAnQXBwbGljYWJsZSBvbmx5IHRvIHRoZSBkZXRhaWwgYWN0aW9uLCB0aGlzIHBhcmFtZXRlciBhbGxvd3Mgc3BlY2lmeWluZyBhIG5vbiBkZWZhdWx0IGRldGFpbCB0ZW1wbGF0ZSc7CiRsYW5nWydoZWxwX2xpbWl0J10gPSAnQXBwbGljYWJsZSBvbmx5IHRvIHRoZSBkZWZhdWx0IHN1bW1hcnkgYWN0aW9uLCB0aGlzIHBhcmFtZXRlciBhbGxvd3Mgc3BlY2lmeWluZyB0aGUgbnVtYmVyIG9mIGxpc3RpbmdzIHRvIGRpc3BsYXkgaW4gZWFjaCBwYWdlJzsKJGxhbmdbJ2hlbHBfcHJvcGVydHljbGFzcyddID0gJ0FwcGxpY2FibGUgb25seSB0byB0aGUgZGVmYXVsdCBzdW1tYXJ5IGFjdGlvbiwgdGhpcyBwYXJhbWV0ZXIgYWxsb3dzIGZpbHRlcmluZyBieSBwcm9wZXJ0eSBjbGFzcy4gIFZhbGlkIHZhbHVlcyBhcmUgbGFuZCxyZXNpZGVudGlhbCxjb21tZXJjaWFsJzsKJGxhbmdbJ2hlbHBfcmVhbHRvciddID0gJ0FwcGxpY2FibGUgb25seSB0byB0aGUgZGVmYXVsdCBzdW1tYXJ5IGFjdGlvbiwgdGhpcyBwYXJhbWV0ZXIgYWxsb3dzIGZpbHRlcmluZyB0aGUgcmVzdWx0cyBieSBhIHN1YnN0cmluZyBvZiB0aGUgcmVhbHRvciBuYW1lLiAgaS5lOiByZWFsdG9yPSZxdW90O1NtaXRoJnF1b3Q7JzsKJGxhbmdbJ2hlbHBfc3VtbWFyeXRlbXBsYXRlJ10gPSAnQXBwbGljYWJsZSBvbmx5IHRvIHRoZSBkZWZhdWx0IHN1bW1hcnkgYWN0aW9uLCB0aGlzIHBhcmFtZXRlciBhbGxvd3Mgc3BlY2lmeWluZyBhIG5vbiBkZWZhdWx0IHN1bW1hcnkgdGVtcGxhdGUnOwokbGFuZ1snaGVscF9wYWdlJ10gPSAnQXBwbGljYWJsZSBvbmx5IHRvIHRoZSBkZWZhdWx0IHN1bW1hcnkgYWN0aW9uLCB0aGlzIHBhcmFtZXRlciBhbGxvd3Mgc3BlY2lmeWluZyB0aGUgcGFnZSBudW1iZXIgKHNlZSB0aGUgbGltaXQgcGFyYW1ldGVyKSc7CiRsYW5nWydoZWxwX3VuaXQnXSA9ICdBcHBsaWNhYmxlIG9ubHkgdG8gdGhlIGRldGFpbCBhY3Rpb24sIHRoaXMgcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgaWRlbnRpZmllciBvZiB0aGUgbGlzdGluZyB0byBkaXNwbGF5JzsKCiNJCiRsYW5nWydpbmZvX2RldGFpbHBhZ2UnXSA9ICdTcGVjaWZ5IGEgZGV0YWlscGFnZSAoaWQgb3IgYWxpYXMpIHRvIHVzZSB3aGVuIG5vIHBhcmFtZXRlciBpcyBzcGVjaWZpZWQsIG9yIGZvciBjYW5vbmljYWwgVVJMUy4gIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCB0aGUgY3VycmVudCBwYWdlIGlzIHVzZWQnOwokbGFuZ1snaW5mb19kZXRhaWxfdGVtcGxhdGVzJ10gPSAnRGV0YWlsIHRlbXBsYXRlcyBkaXNwbGF5IGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IGEgc2luZ2xlLCBzcGVjaWZpYyByZWNvcmQnOwokbGFuZ1snaW5mb19wcm9wZXJ0eXR5cGVfY2xhc3NpZmljYXRpb24nXSA9ICdTcGVjaWZ5IHN0cmluZ3MgdG8gYWxsb3cgY2xhc3NpZnlpbmcgdmFyaW91cyBwcm9wZXJ0eSB0eXBlcy4gIFRoZSBjbGFzc2lmaWNhdGlvbnMgYXJlIHVzZWQgYnkgdGhlICZxdW90O3Byb3BlcnR5Y2xhc3MmcXVvdDsgcGFyYW1ldGVyLic7CiRsYW5nWydpbmZvX3Byb3RvdHlwZV90ZW1wbGF0ZSddID0gJ0FsdGVyaW5nIHRoZXNlIHRlbXBsYXRlcyB3aWxsIGhhdmUgbm8gaW1tZWRpYXRlIGVmZmVjdC4gIFRoZXNlIHRlbXBsYXRlcyBhcmUgdXNlZCB3aGVuIGNyZWF0aW5nIGEgbmV3IHRlbXBsYXRlIG9mIHRoZSBhcHByb3ByaWF0ZSB0eXBlJzsKJGxhbmdbJ2luZm9fc3VtbWFyeV90ZW1wbGF0ZXMnXSA9ICdTdW1tYXJ5IHRlbXBsYXRlcyBkaXNwbGF5IGEgbGlzdCBvZiByZWNvcmRzLiAgVGhleSBhcmUgaW50ZW5kZWQgdG8gcHJvdmlkZSBicmllZiBzdW1tYXJ5IGluZm9ybWF0aW9uLCBhbmQgcHJvdmlkZSBhIGxpbmsgdG8gZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgYSBzcGVjaWZpYyByZWNvcmQuJzsKJGxhbmdbJ2luZm9fdXJscHJlZml4J10gPSAnU3BlY2lmeSBhIGJyaWVmIHByZWZpeCB0byB1c2UgZm9yIFNFTyBmcmllbmRseSB1cmxzICh3aGVuIHByZXR0eSB1cmxzIGFyZSBlbmFibGVkKSc7CgojSgoKI0sKCiNMCgojTQokbGFuZ1snbW9kZGVzY3JpdGlvbiddID0gJ0EgbW9kdWxlIHRvIGNhY2hlIGFuZCBkaXNwbGF5IENSRUEgbGlzdGluZ3MnOwokbGFuZ1snbXNnX2NhY2hlY2xlYXJlZCddID0gJ0NhY2hlIGNsZWFyZWQnOwokbGFuZ1snbXNnX2NhY2hldXBkYXRlZCddID0gJ0NhY2hlIHVwZGF0ZWQnOwokbGFuZ1snbXNnX3ByZWZzc2F2ZWQnXSA9ICdTZXR0aW5ncyB1cGRhdGVkJzsKJGxhbmdbJ21zZ190ZXN0cGFzc2VkJ10gPSAnQ29ubmVjdGlvbiB0ZXN0IHBhc3NlZCc7CgojTgokbGFuZ1snbm90c3BlY2lmaWVkJ10gPSAnTm90IHNwZWNpZmllZCc7CgojTwoKI1AKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnVGhlIENSRUFfU2ltcGxlIG1vZHVsZSBpcyBpbnN0YWxsZWQsIHBsZWFzZSB2aXNpdCB0aGUgbW9kdWxlcyBhZG1pbiBwYW5lbCB0byBlbnRlciBjcmVkZW50aWFscyc7CiRsYW5nWydwb3N0dW5pbnN0YWxsJ10gPSAnVGhlIENSRUFfU2ltcGxlIG1vZHVsZSBoYXMgYmVlbiB1bmluc3RhbGxlZC4gYWxsIGFzc29jaWF0ZWQgZGF0YSBpbiB0aGUgZGF0YWJhc2UgaGFzIGJlZW4gcmVtb3ZlZCc7CiRsYW5nWydwcm9tcHRfYWRkcmVzcyddID0gJ0FkZHJlc3MnOwokbGFuZ1sncHJvbXB0X2FkZHJlc3MxJ10gPSAnQWRkcmVzcyAxJzsKJGxhbmdbJ3Byb21wdF9hZGRyZXNzMiddID0gJ0FkZHJlc3MgMic7CiRsYW5nWydwcm9tcHRfYmFzZW1lbnRkZXZlbG9wbWVudCddID0gJ0Jhc2VtZW50IERldmVsb3BtZW50JzsKJGxhbmdbJ3Byb21wdF9iYXNlbWVudHR5cGUnXSA9ICdCYXNlbWVudCBUeXBlJzsKJGxhbmdbJ3Byb21wdF9iYXRocm9vbXMnXSA9ICdOdW1iZXIgb2YgQmF0aHJvb21zJzsKJGxhbmdbJ3Byb21wdF9iZWRyb29tcyddID0gJ051bWJlciBvZiBCZWRyb29tcyc7CiRsYW5nWydwcm9tcHRfYnVpbGRpbmdpbmZvJ10gPSAnQnVpbGRpbmcgSW5mb3JtYXRpb24nOwokbGFuZ1sncHJvbXB0X2NhY2hlX2xpZmV0aW1lJ10gPSAnQ2FjaGUgTGlmZXRpbWUgKGhvdXJzKSc7CiRsYW5nWydwcm9tcHRfY2l0eSddID0gJ0NpdHkvVG93bic7CiRsYW5nWydwcm9tcHRfY2xlYXJjYWNoZSddID0gJ0NsZWFyIGFsbCBjYWNoZWQgZGF0YSc7CiRsYW5nWydwcm9tcHRfY29tbWVyY2lhbF90eXBlcyddID0gJ0NvbW1lcmNpYWwgUHJvcGVydHkgVHlwZXMnOwokbGFuZ1sncHJvbXB0X2NvbnN0cnVjdGlvbnR5cGUnXSA9ICdCdWlsZGluZyBUeXBlJzsKJGxhbmdbJ3Byb21wdF9jb25zdHJ1Y3Rpb25zdG9yaWVzJ10gPSAnTnVtYmVyIG9mIFN0b3JpZXMnOwokbGFuZ1sncHJvbXB0X2NvbnN0cnVjdGlvbnN0eWxlJ10gPSAnQ29uc3RydWN0aW9uIFN0eWxlJzsKJGxhbmdbJ3Byb21wdF9jb3VudHJ5J10gPSAnQ291bnRyeSc7CiRsYW5nWydwcm9tcHRfZGVzY3JpcHRpb24nXSA9ICdEZXNjcmlwdGlvbic7CiRsYW5nWydwcm9tcHRfZGV0YWlscGFnZSddID0gJ0RlZmF1bHQgRGV0YWlsIFBhZ2UnOwokbGFuZ1sncHJvbXB0X2xhbmQnXSA9ICdMYW5kJzsKJGxhbmdbJ3Byb21wdF9sYW5kX3R5cGVzJ10gPSAnTGFuZCBQcm9wZXJ0eSBUeXBlcyc7CiRsYW5nWydwcm9tcHRfbGFuZHNpemUnXSA9ICdMYW5kIFNpemUnOwokbGFuZ1sncHJvbXB0X2xpc3RpbmdpZCddID0gJ0xpc3RpbmcgSUQnOwokbGFuZ1sncHJvbXB0X3Bhc3N3b3JkJ10gPSAnQ1JFQSBQYXNzd29yZCc7CiRsYW5nWydwcm9tcHRfcGhvbmUnXSA9ICdQaG9uZSc7CiRsYW5nWydwcm9tcHRfcG9zdGFsY29kZSddID0gJ1Bvc3RhbCBDb2RlJzsKJGxhbmdbJ3Byb21wdF9wcmljZSddID0gJ1ByaWNlJzsKJGxhbmdbJ3Byb21wdF9wcm9wZXJ0eXR5cGUnXSA9ICdQcm9wZXJ0eSBUeXBlJzsKJGxhbmdbJ3Byb21wdF9wcm92aW5jZSddID0gJ1Byb3ZpbmNlJzsKJGxhbmdbJ3Byb21wdF9yZWFsdG9yJ10gPSAnUmVhbHRvcic7CiRsYW5nWydwcm9tcHRfcmVhbHRvcmluZm8nXSA9ICdSZWFsdG9yIEluZm8nOwokbGFuZ1sncHJvbXB0X3JlYWx0b3Jfb2ZmaWNlJ10gPSAnT2ZmaWNlJzsKJGxhbmdbJ3Byb21wdF9yZXNpZGVudGlhbF90eXBlcyddID0gJ1Jlc2lkZW50aWFsIFByb3BlcnR5IFR5cGVzJzsKJGxhbmdbJ3Byb21wdF9yb29tcyddID0gJ1Jvb21zJzsKJGxhbmdbJ3Byb21wdF9yb29tbGVuZ3RoJ10gPSAnTGVuZ3RoJzsKJGxhbmdbJ3Byb21wdF9yb29tbGV2ZWwnXSA9ICdMZXZlbCc7CiRsYW5nWydwcm9tcHRfcm9vbXdpZHRoJ10gPSAnV2lkdGgnOwokbGFuZ1sncHJvbXB0X3NlZW1vcmUnXSA9ICdDbGljayBoZXJlIHRvIHNlZSBtb3JlIGluZm8gYWJvdXQgdGhpcyBsaXN0aW5nJzsKJGxhbmdbJ3Byb21wdF91cGRhdGVub3cnXSA9ICdVcGRhdGUgTGlzdGluZ3MgTm93JzsKJGxhbmdbJ3Byb21wdF91cmxwcmVmaXgnXSA9ICdTRU8gRnJpZW5kbHkgVVJMIFByZWZpeCc7CiRsYW5nWydwcm9tcHRfdXNlcm5hbWUnXSA9ICdDUkVBIFVzZXJuYW1lJzsKJGxhbmdbJ3Byb21wdF93ZWJzaXRlJ10gPSAnV2Vic2l0ZSc7CgojUQoKI1IKCiNTCiRsYW5nWydzZXR0aW5ncyddID0gJ1NldHRpbmdzJzsKJGxhbmdbJ3N1Ym1pdCddID0gJ1N1Ym1pdCc7CiRsYW5nWydzdHJfbm90YXZhaWxhYmxlJ10gPSAnRGF0YSBub3QgYXZhaWxhYmxlJzsKJGxhbmdbJ3N0cl91bmtub3duJ10gPSAnVW5rbm93bic7CgojVAokbGFuZ1sndGFiX2RldGFpbHRlbXBsYXRlcyddID0gJ0RldGFpbCBUZW1wbGF0ZXMnOwokbGFuZ1sndGFiX3Byb3RvdHlwZXRlbXBsYXRlcyddID0gJ1Byb3RvdHlwZSBUZW1wbGF0ZXMnOwokbGFuZ1sndGFiX3N1bW1hcnl0ZW1wbGF0ZXMnXSA9ICdTdW1tYXJ5IFRlbXBsYXRlcyc7CiRsYW5nWyd0ZXN0J10gPSAnVGVzdCc7CiRsYW5nWyd0aXRsZV9wcm90b3R5cGVfZGV0YWlsX3RlbXBsYXRlJ10gPSAnUHJvdG90eXBlIERldGFpbCBUZW1wbGF0ZSc7CiRsYW5nWyd0aXRsZV9wcm90b3R5cGVfc3VtbWFyeV90ZW1wbGF0ZSddID0gJ1Byb3RvdHlwZSBTdW1tYXJ5IFRlbXBsYXRlJzsKCiNVCgojVgoKI1cKCiNYCgojWQoKI1oKPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/class.crea_resultset.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmNsYXNzIGNyZWFfcmVzdWx0c2V0CnsKICBwcml2YXRlICRfcmV0czsKICBwcml2YXRlICRfcXVlcnk7CiAgcHJpdmF0ZSAkX3BhcmFtczsKICBwcml2YXRlICRfcnNyYyA9ICdQcm9wZXJ0eSc7CiAgcHJpdmF0ZSAkX2NsYXNzID0gJ1Byb3BlcnR5JzsKICBwcml2YXRlICRfZGF0YTsKICBwcml2YXRlICRfaWR4ID0gMDsKICBwcml2YXRlICRfdG90YWxfY291bnQ7CiAgcHJpdmF0ZSAkX2NiOwoKICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QocGhSRVRTICRyZXRzLCRxdWVyeSA9ICcnLCRwYXJhbXMgPSBudWxsLCRjYiA9IG51bGwpCiAgewogICAgJHRoaXMtPl9yZXRzID0gJHJldHM7CiAgICBpZiggJGNiICYmIGlzX2NhbGxhYmxlKCRjYikgKSAkdGhpcy0+X2NiID0gJGNiOwogICAgJHRoaXMtPmV4ZWN1dGUoJHF1ZXJ5LCRwYXJhbXMpOwogIH0KCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIGV4ZWN1dGUoJHF1ZXJ5ID0gJycsJHBhcmFtcyA9IG51bGwpCiAgewogICAgJG9wdHMgPSBhcnJheSgpOwogICAgJG9wdHNbJ1F1ZXJ5VHlwZSddID0gJ0RNUUwyJzsKICAgICRvcHRzWydTZWFyY2hUeXBlJ10gPSAkdGhpcy0+X3JzcmM7CiAgICAkb3B0c1snQ2xhc3MnXSA9ICR0aGlzLT5fY2xhc3M7CiAgICAkb3B0c1snUXVlcnknXSA9ICRxdWVyeTsKICAgICRvcHRzWydGb3JtYXQnXSA9IGdldF9wYXJhbWV0ZXJfdmFsdWUoJHBhcmFtcywnRm9ybWF0JywnU1RBTkRBUkQtWE1MJyk7CiAgICAkb3B0c1snTGltaXQnXSA9IChpbnQpZ2V0X3BhcmFtZXRlcl92YWx1ZSgkcGFyYW1zLCdMaW1pdCcsMTAwKTsKICAgICRvcHRzWydDb3VudCddID0gKGludClnZXRfcGFyYW1ldGVyX3ZhbHVlKCRwYXJhbXMsJ0NvdW50JywxKTsKICAgICRvcHRzWydPZmZzZXQnXSA9IChpbnQpZ2V0X3BhcmFtZXRlcl92YWx1ZSgkcGFyYW1zLCdPZmZzZXQnLDApOwoKICAgICRvcHRzWydMaW1pdCddID0gbWF4KDEsbWluKDEwMCwkb3B0c1snTGltaXQnXSkpOwogICAgaWYoICRvcHRzWydPZmZzZXQnXSA9PSAwICkgdW5zZXQoJG9wdHNbJ09mZnNldCddKTsKICAgIAogICAgaWYoICFpc3NldCgkdGhpcy0+X3JldHMtPmNhcGFiaWxpdHlfdXJsWydTZWFyY2gnXSkgKSByZXR1cm4gRkFMU0U7CgogICAgJHVybCA9ICR0aGlzLT5fcmV0cy0+Y2FwYWJpbGl0eV91cmxbJ1NlYXJjaCddOwogICAgJHJlc3VsdCA9ICR0aGlzLT5fcmV0cy0+UkVUU1JlcXVlc3QoJHVybCwkb3B0cyk7CiAgICBpZiggISRyZXN1bHQgKSByZXR1cm4gRkFMU0U7CgogICAgbGlzdCgkaGRycywkYm9keSkgPSAkcmVzdWx0OwogICAgJHhtbCA9ICR0aGlzLT5fcmV0cy0+UGFyc2VYTUxSZXNwb25zZSgkYm9keSk7CiAgICBpZiggISR4bWwgKSByZXR1cm4gRkFMU0U7CgogICAgaWYoICR4bWxbJ1JlcGx5Q29kZSddICE9IDAgKSB0aHJvdyBuZXcgcGhwUkVUU19FeGNlcHRpb24oInskeG1sWydSZXBseUNvZGUnXX0geyR4bWxbJ1JlcGx5VGV4dCddfSIpOwogICAgJGtleT0nUkVUUy1SRVNQT05TRSc7CiAgICBpZiggIWlzc2V0KCR4bWwtPiRrZXkpICkgcmV0dXJuIEZBTFNFOyAvLyB0b2RvIHRocm93IGV4Y2VwdGlvbi4KCiAgICAkdGhpcy0+X2RhdGEgPSBhcnJheSgpOwogICAgaWYoIGlzX2NhbGxhYmxlKCR0aGlzLT5fY2IpICkgewogICAgICBpZiggaXNfb2JqZWN0KCR0aGlzLT5fY2IpICYmICgkdGhpcy0+X2NiIGluc3RhbmNlb2YgQ2xvc3VyZSkgKSB7CgkkY2IgPSAkdGhpcy0+X2NiOwoJZm9yZWFjaCggJHhtbC0+JGtleS0+Y2hpbGRyZW4oKSBhcyAkbmFtZSA9PiAkZGF0YSApIHsKCSAgaWYoICRuYW1lID09ICdQYWdpbmF0aW9uJyApIGNvbnRpbnVlOwoJICAkdGhpcy0+X2RhdGFbXSA9ICRjYigkZGF0YSk7Cgl9CiAgICAgIH0KICAgICAgZWxzZSB7Cglmb3JlYWNoKCAkeG1sLT4ka2V5LT5jaGlsZHJlbigpIGFzICRuYW1lID0+ICRkYXRhICkgewoJICBpZiggJG5hbWUgPT0gJ1BhZ2luYXRpb24nICkgY29udGludWU7CgkgICR0aGlzLT5fZGF0YVtdID0gY2FsbF91c2VyX2Z1bmMoJHRoaXMtPmNiLCRkYXRhKTsKCX0KICAgICAgfQogICAgfQoKICAgIGlmKCBpc3NldCgkeG1sLT5DT1VOVCkgKSAkdGhpcy0+X3RvdGFsX2NvdW50ID0gKGludCkieyR4bWwtPkNPVU5ULT5hdHRyaWJ1dGVzKCktPlJlY29yZHN9IjsKCi8vICAgICBpZiggaXNzZXQoJHhtbC0+TUFYUk9XUykgKSB7Ci8vICAgICAgIC8vIE1BWFJPV1MgdGFnIGZvdW5kLiAgdGhlIFJFVFMgc2VydmVyIHdpdGhoZWxkIHJlY29yZHMuCi8vICAgICAgIC8vIGlmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgT2Zmc2V0LCBtb3JlIHJlcXVlc3RzIGNhbiBiZSBzZW50IHRvIHBhZ2UgdGhyb3VnaCByZXN1bHRzCi8vICAgICAgIC8vIHVudGlsIHRoaXMgdGFnIGlzbid0IGZvdW5kIGFueW1vcmUuCi8vICAgICB9CgogICAgdW5zZXQoJHhtbCk7CiAgfQoKICAvLyBtYXkgcmV0dXJuIDAgaWYgY291bnQgcGFyYW1ldGVyIHdhcyBzZXQgdG8gMCBpbiB0aGUgcXVlcnkuCiAgcHVibGljIGZ1bmN0aW9uIFRvdGFsTWF0Y2hlcygpCiAgewogICAgcmV0dXJuICR0aGlzLT5fdG90YWxfY291bnQ7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gUmVjb3JkQ291bnQoKQogIHsKICAgIHJldHVybiBjb3VudCgkdGhpcy0+X2RhdGEpOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIEVPRigpCiAgewogICAgaWYoICR0aGlzLT5faWR4ID49ICR0aGlzLT5SZWNvcmRDb3VudCgpICkgcmV0dXJuIFRSVUU7CiAgICByZXR1cm4gRkFMU0U7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gTW92ZUZpcnN0KCkKICB7CiAgICBpZiggJHRoaXMtPlJlY29yZENvdW50KCkgKSAkdGhpcy0+X2lkeCA9IDA7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gTW92ZU5leHQoKQogIHsKICAgIGlmKCAkdGhpcy0+X2lkeCA8ICR0aGlzLT5SZWNvcmRDb3VudCgpICkgJHRoaXMtPl9pZHgrKzsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBNb3ZlUHJldigpCiAgewogICAgaWYoICR0aGlzLT5faWR4ID4gMCApICR0aGlzLT5faWR4LS07CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gTW92ZUxhc3QoKQogIHsKICAgIGlmKCAoJG4gPSAkdGhpcy0+UmVjb3JkQ291bnQoKSkgKSAkdGhpcy0+X2lkeCA9ICRuIC0gMTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBSZXdpbmQoKQogIHsKICAgICR0aGlzLT5Nb3ZlRmlyc3QoKTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBGaWVsZHMoKQogIHsKICAgIHJldHVybiAkdGhpcy0+X2RhdGFbJHRoaXMtPl9pZHhdOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIF9fZ2V0KCRrZXkpCiAgewogICAgc3dpdGNoKCAka2V5ICkgewogICAgY2FzZSAnRU9GJzoKICAgICAgcmV0dXJuICR0aGlzLT5FT0YoKTsKCiAgICBjYXNlICdmaWVsZHMnOgogICAgICByZXR1cm4gJHRoaXMtPkZpZWxkcygpOwogICAgfQogIH0KfSAvLyBlbmQgb2YgY2xhc3MKCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/class.crea_rets.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmNsYXNzIGNyZWFfcmV0cwp7CiAgcHJpdmF0ZSAkX3JldHM7CgogIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCiAgewogICAgJG1vZCA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnQ1JFQV9TaW1wbGUnKTsKICAgICR1c2VyID0gJG1vZC0+R2V0UHJlZmVyZW5jZSgnY3JlYV91c2VybmFtZScpOwogICAgJHBhc3N3ID0gJG1vZC0+R2V0UHJlZmVyZW5jZSgnY3JlYV9wYXNzd29yZCcpOwoKICAgICR0aGlzLT5fcmV0cyA9IG5ldyBwaFJFVFM7CiAgICAkdGhpcy0+X3JldHMtPlNldFBhcmFtKCdjb21wcmVzc2lvbl9lbmFibGVkJywgdHJ1ZSk7CiAgICAkdGhpcy0+X3JldHMtPlNldFBhcmFtKCdjb29raWVfZmlsZScsVE1QX0NBQ0hFX0xPQ0FUSU9OLicvJy5tZDUoX19DTEFTU19fKS4nZGF0Jyk7CiAgICAkdGhpcy0+X3JldHMtPkFkZEhlYWRlcignUkVUUy1WZXJzaW9uJywgJ1JFVFMvMS43LjInKTsKICAgICR0aGlzLT5fcmV0cy0+QWRkSGVhZGVyKCdBY2NlcHQnLCAnLycpOwkKCiAgICAkdGhpcy0+X3JldHMtPkNvbm5lY3QoJ2h0dHA6Ly9kYXRhLmNyZWEuY2EvTG9naW4uc3ZjL0xvZ2luJywkdXNlciwkcGFzc3cpOwogIH0KCiAgcHJvdGVjdGVkIGZ1bmN0aW9uICZleGVjdXRlKCRxdWVyeSwkcGFyYW1zID0gYXJyYXkoKSwkY2IgPSBudWxsKQogIHsKICAgICRvYmogPSBuZXcgY3JlYV9yZXN1bHRzZXQoJHRoaXMtPl9yZXRzLCRxdWVyeSwkcGFyYW1zLCRjYik7CiAgICByZXR1cm4gJG9iajsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBfX2Rlc3RydWN0KCkKICB7CiAgICAkdGhpcy0+X3JldHMtPkRpc2Nvbm5lY3QoKTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiAmZ2V0X21hc3Rlcmxpc3QoKQogIHsKICAgICRwYXJzZXIgPSBmdW5jdGlvbihTaW1wbGVYTUxFbGVtZW50ICRvYikgewogICAgICAkcmVjID0gYXJyYXkoKTsKICAgICAgZm9yZWFjaCggJG9iLT5hdHRyaWJ1dGVzKCkgYXMgJGNvbCA9PiAkdmFsdWUgKSB7CgkkcmVjWyRjb2xdID0gInskdmFsdWV9IjsKCWlmKCAkY29sID09ICdMYXN0VXBkYXRlZCcgKSAkcmVjWyRjb2xdID0gc3RydG90aW1lKCRyZWNbJGNvbF0pOwogICAgICB9CiAgICAgIHJldHVybiAkcmVjOwogICAgfTsKCiAgICByZXR1cm4gJHRoaXMtPmV4ZWN1dGUoJyhJRD0qKScsbnVsbCwkcGFyc2VyKTsKICB9CgoKICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2NvdW50KCkKICB7CiAgICByZXR1cm4gY291bnQoJHRoaXMtPmdldF9tYXN0ZXJsaXN0KCkpOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uICZnZXRfdXBkYXRlZF9zaW5jZSgkZGF5cykKICB7CiAgICAkcGFyc2VyID0gZnVuY3Rpb24oU2ltcGxlWE1MRWxlbWVudCAkb2IpIHsKICAgICAgJHJlYyA9IGFycmF5KCk7CiAgICAgIGZvcmVhY2goICRvYi0+YXR0cmlidXRlcygpIGFzICRjb2wgPT4gJHZhbHVlICkgewoJJHJlY1skY29sXSA9ICJ7JHZhbHVlfSI7CglpZiggJGNvbCA9PSAnTGFzdFVwZGF0ZWQnICkgJHJlY1skY29sXSA9IHN0cnRvdGltZSgkcmVjWyRjb2xdKTsKICAgICAgfQogICAgICByZXR1cm4gJHJlYzsKICAgIH07CgogICAgJGRheXMgPSBtYXgoMCxtaW4oMzY1LChpbnQpJGRheXMpKTsKICAgICR0aW1lID0gdGltZSgpLSRkYXlzKjI0KjM2MDA7CgogICAgJHN0ciA9ICcoTGFzdFVwZGF0ZWQ9Jy5zdHJmdGltZSgnJVktJW0tJWQnLCR0aW1lKS4nKSc7CiAgICByZXR1cm4gJHRoaXMtPmV4ZWN1dGUoJHN0cixudWxsLCRwYXJzZXIpOwogIH0KCiAgLyoqCiAgICogR2V0IGluZm8gZm9yIHNwZWNpZmljIGlkJ3MgCiAgICoKICAgKiBAcGFyYW0gbWl4ZWQgYSBzaW5nbGUgcHJvcGVydHkgaWQsIG9yIGFuIGFycmF5IG9mIHByb3BlcnR5IGlkJ3MgKG1heGltdW0gMTAwKQogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBnZXRfcHJvcGVydHkoJGlkbGlzdCkKICB7CiAgICAkcGFyc2VyID0gZnVuY3Rpb24oU2ltcGxlWE1MRWxlbWVudCAkeG1sKSB7CiAgICAgIHJldHVybiBjcmVhX3V0aWxzOjp4bWxfdG9fYXJyYXkoJHhtbCk7CiAgICB9OwoKICAgIGlmKCAhaXNfYXJyYXkoJGlkbGlzdCkgJiYgaXNfbnVtZXJpYygkaWRsaXN0KSApICRpZGxpc3QgPSBhcnJheSgkaWRsaXN0KTsKICAgIGlmKCBjb3VudCgkaWRsaXN0KSA+IDEwMCApICRpZGxpc3QgPSBhcnJheV9zbGljZSgkaWRsaXN0LDAsMTAwKTsKCiAgICAkc3RyID0gJyhJRD0nLmltcGxvZGUoJywnLCRpZGxpc3QpLicpJzsKICAgIHJldHVybiAkdGhpcy0+ZXhlY3V0ZSgkc3RyLG51bGwsJHBhcnNlcik7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gZ2V0X3Bob3RvcygkaWQsJHNpemUgPSAyKQogIHsKICAgICR0eXBlID0gJ0xhcmdlUGhvdG8nOwogICAgc3dpdGNoKCAkc2l6ZSApIHsKICAgIGNhc2UgMDoKICAgICAgJHR5cGUgPSAnVGh1bWJuYWlsUGhvdG8nOwogICAgICBicmVhazsKICAgIGNhc2UgMToKICAgICAgJHR5cGUgPSAnUGhvdG8nOwogICAgICBicmVhazsKICAgIGNhc2UgMjoKICAgIGRlZmF1bHQ6CiAgICAgICR0eXBlID0gJ0xhcmdlUGhvdG8nOwogICAgICBicmVhazsKICAgIH0KCiAgICAkcmVzID0gJHRoaXMtPl9yZXRzLT5HZXRPYmplY3QoJ1Byb3BlcnR5JywkdHlwZSwkaWQpOwogICAgaWYoIGlzX2FycmF5KCRyZXMpICYmIGNvdW50KCRyZXMpICkgewogICAgICBmb3JlYWNoKCAkcmVzIGFzICYkcmVjICkgewoJJHJlY1snX190eXBlJ10gPSAkdHlwZTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiAkcmVzOwogIH0KCn0gLy8gZW5kIG9mIGNsYXNzCgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.crea_tasks.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENSRUFfU2ltcGxlIChjKSAyMDEzIGJ5IFJvYmVydCBDYW1wYmVsbCAKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBwcm92aWRlIGEgc2ltcGxlIGludGVyZmFjZQojICB0byB0aGUgQ1JFQSB3ZWIgc2VydmljZS4KIyAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIAojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKCmZpbmFsIGNsYXNzIGNyZWFfdGFza3MKewogIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQoKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNsZWFyX2NhY2hlKGNnam9ibWdyX3Rhc2smICR0YXNrKQogIHsKICAgIC8vIG5vdGUsIHRoaXMgZG9lc24ndCBjbGVhciB0aGUgY2FjaGUuLi4gYnV0IGp1c3QgZ2V0cyB0aGUgYWRkL3VwZGF0ZS9kZWxldGUgbGlzdCBhbmQgc3RvcmVzIGl0LgogICAgJGRyaXZlciA9IGNyZWFfdXRpbHM6OmdldF9jYWNoZV9kcml2ZXIoKTsKICAgIGxpc3QoJGFkZF9saXN0LCR1cGRhdGVfbGlzdCwkZGVsZXRlX2xpc3QpID0gY3JlYV91dGlsczo6Z2V0X3JldmlzaW9ucygpOwogICAgaWYoIGNvdW50KCRhZGRfbGlzdCkgPT0gMCAmJiBjb3VudCgkdXBkYXRlX2xpc3QpID09IDAgJiYgY291bnQoJGRlbGV0ZV9saXN0KSA9PSAwICkgewogICAgICAkZHJpdmVyLT5lcmFzZSgnam9iJyk7CiAgICAgIGF1ZGl0KCcnLCdDUkVBX1NpbXBsZScsIlN0YXJ0OiBub3RoaW5nIHRvIGRvIik7CiAgICAgIHJldHVybiBjZ2pvYm1ncl90YXNrOjpTVEFUVVNfQ09NUExFVEU7CiAgICB9CgogICAgJGRyaXZlci0+c2V0KCdqb2InLGFycmF5KCRhZGRfbGlzdCwkdXBkYXRlX2xpc3QsJGRlbGV0ZV9saXN0KSk7CiAgICAkY291bnQxID0gY291bnQoJGFkZF9saXN0KTsKICAgICRjb3VudDIgPSBjb3VudCgkdXBkYXRlX2xpc3QpOwogICAgJGNvdW50MyA9IGNvdW50KCRkZWxldGVfbGlzdCk7CiAgICBhdWRpdCgnJywnQ1JFQV9TaW1wbGUnLCJTdGFydDogRm91bmQgJGNvdW50MSB0byBhZGQsICRjb3VudDIgbGlzdGluZ3MgdG8gdXBkYXRlIGFuZCAkY291bnQyIHRvIGRlbGV0ZSIpOwogICAgcmV0dXJuIGNnam9ibWdyX3Rhc2s6OlNUQVRVU19DT01QTEVURTsKICB9CgogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcHJvY2Vzc19vbmVfbGlzdGluZyhjZ2pvYm1ncl90YXNrJiAkdGFzaykKICB7CiAgICAkZHJpdmVyID0gY3JlYV91dGlsczo6Z2V0X2NhY2hlX2RyaXZlcigwKTsKICAgICR0bXAgPSAkZHJpdmVyLT5nZXQoJ2pvYicpOwogICAgaWYoICEkdG1wICkgcmV0dXJuIGNnam9ibWdyX3Rhc2s6OlNUQVRVU19DT01QTEVURTsKCiAgICAkZmlsZV9tYXN0ZXJsaXN0ID0gJGRyaXZlci0+Z2V0KCdtYXN0ZXJfbGlzdCcpOwogICAgaWYoICFpc19hcnJheSgkZmlsZV9tYXN0ZXJsaXN0KSApICRmaWxlX21hc3Rlcmxpc3QgPSBhcnJheSgpOwoKICAgICRmaWxlX21ldGFkYXRhID0gJGRyaXZlci0+Z2V0KCdtZXRhZGF0YScpOwogICAgaWYoICEkZmlsZV9tZXRhZGF0YSApICRmaWxlX21ldGFkYXRhID0gYXJyYXkoKTsKCiAgICBsaXN0KCRhZGRfbGlzdCwkdXBkYXRlX2xpc3QsJGRlbGV0ZV9saXN0KSA9ICR0bXA7CgogICAgJHJldHMgPSBuZXcgY3JlYV9yZXRzOwogICAgaWYoIGNvdW50KCRhZGRfbGlzdCkgKSB7CiAgICAgICRyZWMgPSBhcnJheV9wb3AoJGFkZF9saXN0KTsKICAgICAgJGlkID0gJHJlY1snSUQnXTsKCiAgICAgIC8vIGdldCB0aGUgcHJvcGVydHkKICAgICAgJHJzID0gJHJldHMtPmdldF9wcm9wZXJ0eSgkaWQpOwogICAgICBpZiggISRycyApIHsKCWF1ZGl0KCcnLCdDUkVBX1NpbXBsZScuJ1Byb2JsZW0gcmV0cmlldmluZyBkZXRhaWxzIGZvciBwcm9wZXJ0eSAnLiRpZCk7Cgljb250aW51ZTsKICAgICAgfQogICAgICAkcHJvcCA9IGNyZWFfdXRpbHM6OmFkanVzdF9wcm9wZXJ0eSgkcnMtPmZpZWxkcyk7CiAgICAgIGlmKCAhJHByb3AgKSB7CglhdWRpdCgnJywnQ1JFQV9TaW1wbGUnLidQcm9ibGVtIHJldHJpZXZpbmcgZGV0YWlscyBmb3IgcHJvcGVydHkgJy4kaWQpOwoJY29udGludWU7CiAgICAgIH0KCiAgICAgIC8vIHNldCB0aGUgcHJvcGVydHkKICAgICAgJGRyaXZlci0+c2V0KCRpZCwkcHJvcCk7CgogICAgICAvLyBzZXQgdGhlIG1ldGFkYXRhCiAgICAgICRtZXRhID0gYXJyYXkoKTsKICAgICAgJG1ldGFbJ2lkJ10gPSAkaWQ7CiAgICAgIGlmKCBpc3NldCgkcHJvcFsnQWdlbnREZXRhaWxzJ11bJ05hbWUnXSkgKSAkbWV0YVsnYWdlbnQnXSA9ICRwcm9wWydBZ2VudERldGFpbHMnXVsnTmFtZSddOwogICAgICBpZiggaXNzZXQoJHByb3BbJ1ByaWNlJ10pICkgJG1ldGFbJ3ByaWNlJ10gPSAkcHJvcFsnUHJpY2UnXTsKICAgICAgaWYoIGlzc2V0KCRwcm9wWydQcm9wZXJ0eVR5cGUnXSkgKSB7CgkkbWV0YVsncHJvcGVydHl0eXBlJ10gPSAkcHJvcFsnUHJvcGVydHlUeXBlJ107CgkkbWV0YVsncHJvcGVydHljbGFzcyddID0gY3JlYV91dGlsczo6Z2V0X3Byb3BlcnR5Y2xhc3MoJG1ldGFbJ3Byb3BlcnR5dHlwZSddKTsKICAgICAgfQogICAgICBpZiggY291bnQoJG1ldGEpICkgJGZpbGVfbWV0YWRhdGFbJGlkXSA9ICRtZXRhOwoKICAgICAgLy8gZ2V0IHRoZSBpbWFnZXMKICAgICAgJGltYWdlcyA9ICRyZXRzLT5nZXRfcGhvdG9zKCRpZCk7CiAgICAgIGNyZWFfdXRpbHM6OnN0b3JlX3Bob3RvcygkaWQsJGltYWdlcyk7CgogICAgICAvLyBhZGQgdGhlIGl0ZW0gdG8gdGhlIG1hc3RlciBpbmRleAogICAgICAkZmlsZV9tYXN0ZXJsaXN0WyRpZF0gPSAkcmVjOwogICAgICBhdWRpdCgkaWQsJ0NSRUFfU2ltcGxlJywnQWRkZWQgbGlzdGluZyAnLiRpZCk7CiAgICAgICRjaGFuZ2VkID0gVFJVRTsKICAgIH0KICAgIGVsc2UgaWYoIGNvdW50KCR1cGRhdGVfbGlzdCkgKSB7IAogICAgICAkcmVjID0gYXJyYXlfcG9wKCR1cGRhdGVfbGlzdCk7CiAgICAgICRpZCA9ICRyZWNbJ0lEJ107CgogICAgICAvLyBnZXQgdGhlIHByb3BlcnR5CiAgICAgICRycyA9ICRyZXRzLT5nZXRfcHJvcGVydHkoJGlkKTsKICAgICAgaWYoICEkcnMgKSB7CglhdWRpdCgnJywnQ1JFQV9TaW1wbGUnLidQcm9ibGVtIHJldHJpZXZpbmcgZGV0YWlscyBmb3IgcHJvcGVydHkgJy4kaWQpOwoJY29udGludWU7CiAgICAgIH0KICAgICAgJHByb3AgPSBjcmVhX3V0aWxzOjphZGp1c3RfcHJvcGVydHkoJHJzLT5maWVsZHMpOwogICAgICBpZiggISRwcm9wICkgewoJYXVkaXQoJycsJ0NSRUFfU2ltcGxlJy4nUHJvYmxlbSByZXRyaWV2aW5nIGRldGFpbHMgZm9yIHByb3BlcnR5ICcuJGlkKTsKCWNvbnRpbnVlOwogICAgICB9CgogICAgICAvLyBzZXQgdGhlIHByb3BlcnR5CiAgICAgICRkcml2ZXItPnNldCgkaWQsJHByb3ApOwoKICAgICAgLy8gZ2V0IHRoZSBpbWFnZXMKICAgICAgJGltYWdlcyA9ICRyZXRzLT5nZXRfcGhvdG9zKCRpZCk7CiAgICAgICRkaXIgPSBjcmVhX3V0aWxzOjpnZXRfY2FjaGVfZGlyKCRpZCk7CiAgICAgIGNnZV9kaXI6OnJlY3Vyc2l2ZV9ybWRpcigkZGlyKTsKICAgICAgY3JlYV91dGlsczo6c3RvcmVfcGhvdG9zKCRpZCwkaW1hZ2VzKTsKCiAgICAgIC8vIHVwZGF0ZSB0aGUgaXRlbSBpbiB0aGUgbWFzdGVyIGluZGV4CiAgICAgICRmaWxlX21hc3Rlcmxpc3RbJGlkXSA9ICRyZWM7CiAgICAgIGF1ZGl0KCRpZCwnQ1JFQV9TaW1wbGUnLCdVcGRhdGVkIGxpc3RpbmcgJy4kaWQpOwogICAgICAkY2hhbmdlZCA9IFRSVUU7CiAgICB9CiAgICBlbHNlIGlmKCBjb3VudCgkZGVsZXRlX2xpc3QpICkgewogICAgICAkcmVjID0gYXJyYXlfcG9wKCRkZWxldGVfbGlzdCk7CiAgICAgICRpZCA9ICRyZWNbJ0lEJ107CgogICAgICAvLyBkZWxldGUgdGhlIHByb3BlcnR5CiAgICAgIGNyZWFfdXRpbHM6OmRlbGV0ZV9yZWNvcmQoJGlkKTsKCiAgICAgIC8vIGRlbGV0ZSBkYXRhIGZyb20gbWV0YWRhdGEuCiAgICAgIHVuc2V0KCRmaWxlX21ldGFkYXRhWyRpZF0pOwoKICAgICAgLy8gZGVsZXRlIHRoZSBpdGVtIGZyb20gdGhlIG1hc3RlciBpbmRleC4KICAgICAgdW5zZXQoJGZpbGVfbWFzdGVybGlzdFskaWRdKTsKICAgICAgYXVkaXQoJycsJ0NSRUFfU2ltcGxlJywiZGVsZXRlZCBsaXN0aW5nICRpZCIpOwogICAgICAkY2hhbmdlZCA9IFRSVUU7CiAgICB9CgogICAgaWYoICRjaGFuZ2VkICkgewogICAgICAkZHJpdmVyLT5zZXQoJ21hc3Rlcl9saXN0JywkZmlsZV9tYXN0ZXJsaXN0KTsKICAgICAgJGRyaXZlci0+c2V0KCdtZXRhZGF0YScsJGZpbGVfbWV0YWRhdGEpOwogICAgfQoKICAgIC8vIHNhdmUgdGhlIGpvYiBkYXRhIGFnYWluCiAgICBpZiggY291bnQoJGFkZF9saXN0KSB8fCBjb3VudCgkdXBkYXRlX2xpc3QpIHx8IGNvdW50KCRkZWxldGVfbGlzdCkgKSB7CiAgICAgICRkcml2ZXItPnNldCgnam9iJyxhcnJheSgkYWRkX2xpc3QsJHVwZGF0ZV9saXN0LCRkZWxldGVfbGlzdCkpOwogICAgICByZXR1cm4gY2dqb2JtZ3JfdGFzazo6U1RBVFVTX0lOQ09NUExFVEU7CiAgICB9CiAgICBlbHNlIHsKICAgICAgJGRyaXZlci0+ZXJhc2UoJ2pvYicpOwogICAgICByZXR1cm4gY2dqb2JtZ3JfdGFzazo6U1RBVFVTX0NPTVBMRVRFOwogICAgfQogIH0KCn0gLy8gZW5kIG9mIGNsYXNzCgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/class.crea_utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmZpbmFsIGNsYXNzIGNyZWFfdXRpbHMKewogIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQoKICAvKioKICAgKiBSZXR1cm4gbGlzdHMgb2YgaXRlbXMgdGhhdCBlaXRoZXIgbmVlZCB0byBiZSBkZWxldGVkLCBvciB1cGRhdGVkCiAgICogCiAgICogQHJldHVybiBhcnJheSBvZiBhcnJheXMuICBmaXJzdCBlbGVtZW50IGlzIGFkZCBsaXN0LCBzZWNvbmQgZWxlbWVudCBpcyB1cGRhdGUgbGlzdCwgdGhpcmQgZWxlbWVudCBpcyBkZWxldGUgbGlzdAogICAqLwogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0X3JldmlzaW9ucygpCiAgewogICAgJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKICAgICRkcml2ZXIgPSBzZWxmOjpnZXRfY2FjaGVfZHJpdmVyKCk7CiAgICAkZmlsZV9tYXN0ZXJsaXN0ID0gJGRyaXZlci0+Z2V0KCdtYXN0ZXJfbGlzdCcpOwogICAgJGRyaXZlci0+dG91Y2goJ21hc3Rlcl9saXN0Jyk7CgogICAgJHJldHMgPSBuZXcgY3JlYV9yZXRzKCk7CiAgICAkbWFzdGVybGlzdF9ycyA9ICRyZXRzLT5nZXRfbWFzdGVybGlzdCgpOwoKICAgICRkZWxldGVfbGlzdCA9IGFycmF5KCk7CiAgICAkdXBkYXRlX2xpc3QgPSBhcnJheSgpOwogICAgJGFkZF9saXN0ID0gYXJyYXkoKTsKICAgICRtYXN0ZXJfaWRsaXN0ID0gYXJyYXkoKTsKICAgIHdoaWxlKCAkbWFzdGVybGlzdF9ycyAmJiAhJG1hc3Rlcmxpc3RfcnMtPkVPRigpICkgewogICAgICAkcmVjID0gJG1hc3Rlcmxpc3RfcnMtPmZpZWxkczsKICAgICAgJGlkID0gJHJlY1snSUQnXTsKICAgICAgJG1hc3Rlcl9pZGxpc3RbJGlkXSA9ICRyZWM7CgogICAgICBpZiggaXNzZXQoJGZpbGVfbWFzdGVybGlzdFskaWRdKSApIHsKCS8vIG1ha2Ugc3VyZSBpdCBpc24ndCBtaXNzaW5nLi4uLgoJJHRtcCA9ICRkcml2ZXItPmdldCgkaWQpOwoJaWYoICFpc19hcnJheSgkdG1wKSApIHsKCSAgJGFkZF9saXN0WyRpZF0gPSAkcmVjOwoJfQoJZWxzZSBpZiggJGZpbGVfbWFzdGVybGlzdFskaWRdWydMYXN0VXBkYXRlZCddIDwgJHJlY1snTGFzdFVwZGF0ZWQnXSApIHsKCSAgLy8gZW50cnkgaGFzIGJlZW4gY2hhbmdlZAoJICAkdXBkYXRlX2xpc3RbJGlkXSA9ICRyZWM7Cgl9CgllbHNlIHsKCSAgJGRyaXZlci0+dG91Y2goJGlkKTsKCX0KICAgICAgfQogICAgICBlbHNlIHsKCS8vIGl0cyBhIG5ldyBlbnRyeS4KCSRhZGRfbGlzdFskaWRdID0gJHJlYzsKICAgICAgfSAKICAgICAgJG1hc3Rlcmxpc3RfcnMtPk1vdmVOZXh0KCk7CiAgICB9CgogICAgLy8gZmluZCBpdGVtcyB0byBkZWxldGUKICAgIGlmKCBpc19hcnJheSgkZmlsZV9tYXN0ZXJsaXN0KSAmJiBjb3VudCgkZmlsZV9tYXN0ZXJsaXN0KSApIHsKICAgICAgZm9yZWFjaCggJGZpbGVfbWFzdGVybGlzdCBhcyAkaWQgPT4gJiRyZWMgKSB7CglpZiggIWlzc2V0KCRtYXN0ZXJfaWRsaXN0WyRpZF0pICkgJGRlbGV0ZV9saXN0W10gPSAkcmVjOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gYXJyYXkoJGFkZF9saXN0LCR1cGRhdGVfbGlzdCwkZGVsZXRlX2xpc3QpOwogIH0KCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkZWxldGVfcmVjb3JkKCRpZCkKICB7CiAgICAkZHJpdmVyID0gc2VsZjo6Z2V0X2NhY2hlX2RyaXZlcigpOwogICAgJGRpciA9IHNlbGY6OmdldF9jYWNoZV9kaXIoJGlkKTsKICAgIGNnZV9kaXI6OnJlY3Vyc2l2ZV9ybWRpcigkZGlyKTsKICAgICRkcml2ZXItPmVyYXNlKCRpZCk7CiAgfQogIAogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24geG1sX3RvX2FycmF5KFNpbXBsZVhNTEVsZW1lbnQgJG9iaikgeyAKICAgICR0bXAgPSBqc29uX2RlY29kZShqc29uX2VuY29kZSgkb2JqKSwgVFJVRSk7CgogICAgJF9jbGVhbl9hcnIgPSBmdW5jdGlvbigkYXJyKSB1c2UgKCYkX2NsZWFuX2FycikgewogICAgICBpZiggaXNzZXQoJGFyclsnQGF0dHJpYnV0ZXMnXSkgKSB7CgkkYXJyWydfYXR0cmlidXRlcyddID0gJGFyclsnQGF0dHJpYnV0ZXMnXTsKCXVuc2V0KCRhcnJbJ0BhdHRyaWJ1dGVzJ10pOwogICAgICB9CgogICAgICBmb3JlYWNoKCAkYXJyIGFzICRrZXkgPT4gJHZhbHVlICkgewoJaWYoIGlzX2FycmF5KCR2YWx1ZSkgKSB7IAoJICAkdG1wID0gJF9jbGVhbl9hcnIoJHZhbHVlKTsKCSAgJGFyclska2V5XSA9ICR0bXA7Cgl9CiAgICAgIH0KCiAgICAgIHJldHVybiAkYXJyOwogICAgfTsKCiAgICAkdG1wID0gJF9jbGVhbl9hcnIoJHRtcCk7CiAgICByZXR1cm4gJHRtcDsKICB9IAoKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uICZnZXRfY2FjaGVfZHJpdmVyKCRsaWZldGltZSA9IC0xKQogIHsKICAgICRsaWZldGltZSA9IChpbnQpJGxpZmV0aW1lOwogICAgJG1vZCA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnQ1JFQV9TaW1wbGUnKTsKICAgIGlmKCAkbGlmZXRpbWUgPCAwICkgewogICAgICAkbmhvdXJzID0gKGludCkkbW9kLT5HZXRQcmVmZXJlbmNlKCdjYWNoZV9saWZldGltZScsMik7CiAgICAgICRuaG91cnMgPSBtYXgoMSxtaW4oMjQsJG5ob3VycykpOwogICAgICAkbGlmZXRpbWUgPSAoJG5ob3VycysxKSozNjAwOwogICAgfQogICAgZWxzZSBpZiggJGxpZmV0aW1lID4gMCApIHsKICAgICAgJG5ob3VycyA9IG1heCgxLG1pbigyNCwkbGlmZXRpbWUpKTsKICAgICAgJGxpZmV0aW1lID0gKCRuaG91cnMrMSkqMzYwMDsKICAgIH0KICAgIGVsc2UgewogICAgICAkbGlmZXRpbWUgPSBudWxsOwogICAgfQogICAgCiAgICAkZGlyID0gY21zX2pvaW5fcGF0aChzZWxmOjpnZXRfY2FjaGVfZGlyKCksJ19jYWNoZScpOwogICAgY2dlX2Rpcjo6bWtkaXJyKCRkaXIpOwogICAgJGRyaXZlciA9IG5ldyBjbXNfZmlsZWNhY2hlX2RyaXZlcihhcnJheSgnbGlmZXRpbWUnPT4kbGlmZXRpbWUsJ2xvY2tpbmcnPT4xLAoJCQkJCSAgICAgJ2NhY2hlX2Rpcic9PiRkaXIsJ2Jsb2NraW5nJz0+ZmFsc2UsCgkJCQkJICAgICAnZ3JvdXAnPT4kbW9kLT5HZXROYW1lKCkpKTsKICAgIHJldHVybiAkZHJpdmVyOwogIH0KCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRfY2FjaGVfdXJsYmFzZSgkaWQpCiAgewogICAgJG1vZCA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnQ1JFQV9TaW1wbGUnKTsKICAgICRkaXIgPSAnXycuc3RydG9sb3dlcigkbW9kLT5HZXROYW1lKCkpOwogICAgJGNvbmZpZyA9IGNtc21zKCktPkdldENvbmZpZygpOwogICAgJGRpciA9ICRjb25maWdbJ3VwbG9hZHNfdXJsJ10uIi8kZGlyL2lkX3skaWR9IjsKICAgIHJldHVybiAkZGlyOwogIH0KCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRfY2FjaGVfZGlyKCRpZCA9IG51bGwpCiAgewogICAgJG1vZCA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnQ1JFQV9TaW1wbGUnKTsKICAgICRkaXIgPSAnXycuc3RydG9sb3dlcigkbW9kLT5HZXROYW1lKCkpOwogICAgJGNvbmZpZyA9IGNtc21zKCktPkdldENvbmZpZygpOwogICAgJGRpciA9IGNtc19qb2luX3BhdGgoJGNvbmZpZ1sndXBsb2Fkc19wYXRoJ10sJGRpcik7CiAgICBpZiggJGlkICkgewogICAgICAkZGlyID0gY21zX2pvaW5fcGF0aCgkZGlyLCdpZF8nLiRpZCk7CiAgICB9CiAgICByZXR1cm4gJGRpcjsKICB9CgogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2xlYXJfY2FjaGUoKQogIHsKICAgICRkcml2ZXIgPSBjcmVhX3V0aWxzOjpnZXRfY2FjaGVfZHJpdmVyKCk7CiAgICAkZHJpdmVyLT5jbGVhcigpOwogICAgY2dlX2Rpcjo6cmVjdXJzaXZlX3JtZGlyKHNlbGY6OmdldF9jYWNoZV9kaXIoKSk7CiAgfQoKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHN0b3JlX3Bob3RvcygkaWQsJGltYWdlbGlzdCkKICB7CiAgICBpZiggJGlkIDwgMSB8fCAhaXNfYXJyYXkoJGltYWdlbGlzdCkgfHwgY291bnQoJGltYWdlbGlzdCkgPT0gMCApIHsKICAgICAgdGhyb3cgbmV3IENtc0ludmFsaWREYXRhRXhjZXB0aW9uKCdJbnZhbGlkIGFyZ3VtZW50cyBwYXNzZWQgdG8gY3JlYV91dGlsczo6c3RvcmVfcGhvdG9zJyk7CiAgICB9CgogICAgY2dlX2Rpcjo6bWtkaXJyKHNlbGY6OmdldF9jYWNoZV9kaXIoJGlkKSk7CgogICAgZm9yZWFjaCggJGltYWdlbGlzdCBhcyAkcm93ICkgewogICAgICBpZiggIWlzc2V0KCRyb3dbJ1N1Y2Nlc3MnXSkgfHwgJHJvd1snU3VjY2VzcyddICE9IDEgKSBjb250aW51ZTsgLy8gaWdub3JlIHRoaXMgaW1hZ2UKICAgICAgaWYoICFpc3NldCgkcm93WydDb250ZW50LUlEJ10pIHx8ICRyb3dbJ0NvbnRlbnQtSUQnXSAhPSAkaWQgKSB7CglkZWJ1Z190b19sb2coJ2ludmFsaWQgaW1hZ2VsaXN0IGNvbnRlbnQgaWQnKTsKCWRlYnVnX3RvX2xvZygkcm93KTsKCXRocm93IG5ldyBDbXNJbnZhbGlkRGF0YUV4Y2VwdGlvbignUmV0dXJuZWQgaW1hZ2VzIGZvciBkaWZmZXJlbnQgcHJvcGVydHkgaWQgJy4kaWQuJyB2cyAnLiRyb3dbJ0NvbnRlbnQtSUQnXSk7CiAgICAgIH0KICAgICAgaWYoICFpc3NldCgkcm93WydDb250ZW50LVR5cGUnXSkgKSB0aHJvdyBuZXcgQ21zSW52YWxpZERhdGFFeGNlcHRpb24oJ0ludmFsaWQvRW1wdHkgY29udGVudC10eXBlJyk7CiAgICAgIGlmKCAhaXNzZXQoJHJvd1snT2JqZWN0LUlEJ10pICkgdGhyb3cgbmV3IENtc0ludmFsaWREYXRhRXhjZXB0aW9uKCdJbnZhbGlkL0VtcHR5IG9iamVjdC1pZCcpOwogICAgICBpZiggIWlzc2V0KCRyb3dbJ0RhdGEnXSkgKSB0aHJvdyBuZXcgQ21zSW52YWxpZERhdGFFeGNlcHRpb24oJ0ludmFsaWQvRW1wdHkgRGF0YScpOwoKICAgICAgJHByZWZpeCA9ICdfdW5rbm93bl8nOwogICAgICBpZiggaXNzZXQoJHJvd1snX190eXBlJ10pICkgJHByZWZpeCA9ICdfJy50cmltKCRyb3dbJ19fdHlwZSddKS4nXycuCgogICAgICAkb2JqZWN0X2lkID0gJHJvd1snT2JqZWN0LUlEJ107CiAgICAgIHN3aXRjaCggJHJvd1snQ29udGVudC1UeXBlJ10gKSB7CiAgICAgIGNhc2UgJ2ltYWdlL3BuZyc6CgkkZm4gPSBzZWxmOjpnZXRfY2FjaGVfZGlyKCRpZCkuJy9pbWcnLiRwcmVmaXguJG9iamVjdF9pZC4nLnBuZyc7CglmaWxlX3B1dF9jb250ZW50cygkZm4sJHJvd1snRGF0YSddKTsKCWJyZWFrOwoKICAgICAgY2FzZSAnaW1hZ2UvZ2lmJzoKCSRmbiA9IHNlbGY6OmdldF9jYWNoZV9kaXIoJGlkKS4nL2ltZycuJHByZWZpeC4kb2JqZWN0X2lkLicuZ2lmJzsKCWZpbGVfcHV0X2NvbnRlbnRzKCRmbiwkcm93WydEYXRhJ10pOwoJYnJlYWs7CgogICAgICBjYXNlICdpbWFnZS9qcGVnJzoKCSRmbiA9IHNlbGY6OmdldF9jYWNoZV9kaXIoJGlkKS4nL2ltZycuJHByZWZpeC4kb2JqZWN0X2lkLicuanBnJzsKCWZpbGVfcHV0X2NvbnRlbnRzKCRmbiwkcm93WydEYXRhJ10pOwoJYnJlYWs7CgogICAgICBkZWZhdWx0OgoJdGhyb3cgbmV3IENtc0ludmFsaWREYXRhRXhjZXB0aW9uKCdJbnZhbGlkL0VtcHR5IGNvbnRlbnQtdHlwZScpOwogICAgICB9CiAgICB9CiAgfQoKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGFkanVzdF9wcm9wZXJ0eSgkcmVjKQogIHsKICAgIGlmKCAhaXNfYXJyYXkoJHJlYykgKSByZXR1cm47CgogICAgaWYoIGlzc2V0KCRyZWNbJ0FkZHJlc3MnXSkgKSB7CiAgICAgICRhZGRyID0gJHJlY1snQWRkcmVzcyddOwogICAgICAkcmVjWydfYWRkcmVzcyddID0gJGFkZHJbJ0FkZHJlc3NMaW5lMSddOwogICAgICBpZiggaXNzZXQoJGFkZHJbJ0FkZHJlc3NMaW5lMiddKSApICRyZWNbJ2FkZHJlc3MnXSAuPSAnICcgLiAkYWRkclsnQWRkcmVzc0xpbmUyJ107CiAgICAgICRyZWNbJ19hZGRyZXNzJ10gLj0gJyAnIC4gJGFkZHJbJ0NpdHknXTsKICAgICAgJHJlY1snX2FkZHJlc3MnXSAuPSAnICcgLiAkYWRkclsnUHJvdmluY2UnXTsKICAgICAgaWYoIGlzc2V0KCRhZGRyWydQb3N0YWxDb2RlJ10pICkgICRyZWNbJ19hZGRyZXNzJ10gLj0gJyAnIC4gJGFkZHJbJ1Bvc3RhbENvZGUnXTsKICAgICAgJHJlY1snX2FkZHJlc3MnXSAuPSAnICcgLiAkYWRkclsnQ291bnRyeSddOwogICAgICAkcmVjWydfbmFtZSddID0gJHJlY1snTGlzdGluZ0lEJ10uJyAnLiRhZGRyWydDaXR5J10uJyAnLiRhZGRyWydQcm92aW5jZSddOwogICAgfQoKICAgIHJldHVybiAkcmVjOwogIH0KCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVfZGV0YWlsX3VybCgkdW5pdGlkLCRuYW1lLCRkZXRhaWxwYWdlID0gbnVsbCkKICB7CiAgICAkbW9kID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdDUkVBX1NpbXBsZScpOwogICAgaWYoICEkZGV0YWlscGFnZSApIHsKICAgICAgJHRtcCA9ICRtb2QtPkdldFByZWZlcmVuY2UoJ2RldGFpbHBhZ2UnKTsKICAgICAgaWYoICR0bXAgKSAkZGV0YWlscGFnZSA9ICRtb2QtPnJlc29sdmVfYWxpYXNfb3JfaWQoJHRtcCk7CiAgICAgIGlmKCAhJGRldGFpbHBhZ2UgKSAkZGV0YWlscGFnZSA9IENvbnRlbnRPcGVyYXRpb25zOjpnZXRfaW5zdGFuY2UoKS0+R2V0RGVmYXVsdENvbnRlbnQoKTsKICAgIH0KICAgIAogICAgJHByZWZpeCA9ICRtb2QtPkdldFByZWZlcmVuY2UoJ3VybHByZWZpeCcpOwogICAgaWYoICEkcHJlZml4ICkgJHByZWZpeCA9ICdjcmVhJzsKICAgICRwcmV0dHl1cmwgPSAiJHByZWZpeC97JHVuaXRpZH0veyRkZXRhaWxwYWdlfS8iLm11bmdlX3N0cmluZ190b191cmwoJG5hbWUpOwogICAgJHR4dCA9ICRtb2QtPmNyZWF0ZV91cmwoJ2NudG50MDEnLCdkZXRhaWwnLCRkZXRhaWxwYWdlLGFycmF5KCd1bml0Jz0+JHVuaXRpZCksRkFMU0UsRkFMU0UsJHByZXR0eXVybCk7CiAgICByZXR1cm4gJHR4dDsKICB9CgogIGNvbnN0IENMQVNTX0NPTU1FUkNJQUwgPSAnY29tbWVyY2lhbCc7CiAgY29uc3QgQ0xBU1NfUkVTSURFTlRJQUwgPSAncmVzaWRlbnRpYWwnOwogIGNvbnN0IENMQVNTX0xBTkQgPSAnbGFuZCc7CgogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0X3Byb3BlcnR5dHlwZXMoJGNsYXNzKQogIHsKICAgICRtb2QgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0NSRUFfU2ltcGxlJyk7CiAgICAkZGZsdCA9IG51bGw7CiAgICAkcHJlZiA9IG51bGw7CgogICAgc3dpdGNoKCAkY2xhc3MgKSB7CiAgICBjYXNlIHNlbGY6OkNMQVNTX0NPTU1FUkNJQUw6CiAgICAgICRkZmx0ID0gYXJyYXkoJ2J1c2luZXNzJywnb2ZmaWNlJywncmVjcmVhdGlvbmFsJywnaW5kdXN0cmlhbCcsJ2FncmljdWx0dXJlJyk7CiAgICAgIGJyZWFrOwoKICAgIGNhc2Ugc2VsZjo6Q0xBU1NfUkVTSURFTlRJQUw6CiAgICAgICRkZmx0ID0gYXJyYXkoJ3NpbmdsZSBmYW1pbHknLCdtb2JpbGUgaG9tZScsJ2FwYXJ0bWVudCcsJ2ZvdXJwbGV4Jywncm93IC8gdG93bmhvdXNlJywnY29uZG8nLCdyZWNyZWF0aW9uYWwnKTsKICAgICAgYnJlYWs7CgogICAgY2FzZSBzZWxmOjpDTEFTU19MQU5EOgogICAgICAkZGZsdCA9IGFycmF5KCd2YWNhbnQgbGFuZCcpOwogICAgICBicmVhazsKCiAgICBkZWZhdWx0OgogICAgICB0aHJvdyBuZXcgRXhjZXB0aW4oJ0ludmFsaWQgcHJvcGVydHkgY2xhc3MgJy4kY2xhc3MpOwogICAgfQoKICAgICRyZXMgPSAkbW9kLT5HZXRQcmVmZXJlbmNlKCdjbGFzc2lmaWNhdGlvbl8nLiRjbGFzcyk7CiAgICBpZiggISRyZXMgKSByZXR1cm4gJGRmbHQ7CiAgICByZXR1cm4gdW5zZXJpYWxpemUoJHJlcyk7CiAgfQoKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldF9wcm9wZXJ0eWNsYXNzKCRwcm9wZXJ0eV90eXBlKQogIHsKICAgICRwcm9wZXJ0eV90eXBlID0gdHJpbShzdHJ0b2xvd2VyKCRwcm9wZXJ0eV90eXBlKSk7CiAgICAkY2xhc3NlcyA9IGFycmF5KHNlbGY6OkNMQVNTX1JFU0lERU5USUFMLHNlbGY6OkNMQVNTX0NPTU1FUkNJQUwsc2VsZjo6Q0xBU1NfTEFORCk7CiAgICBmb3JlYWNoKCAkY2xhc3NlcyBhcyAkY2xhc3MgKSB7CiAgICAgICR0eXBlcyA9IHNlbGY6OmdldF9wcm9wZXJ0eXR5cGVzKCRjbGFzcyk7CiAgICAgIGlmKCBpc19hcnJheSgkdHlwZXMpICYmIGNvdW50KCR0eXBlcykgJiYgaW5fYXJyYXkoJHByb3BlcnR5X3R5cGUsJHR5cGVzKSApIHJldHVybiAkY2xhc3M7CiAgICB9CgogICAgLy8gYnkgZGVmYXVsdCwgYXNzdW1lIHJlc2lkZW50aWFsCiAgICByZXR1cm4gc2VsZjo6Q0xBU1NfUkVTSURFTlRJQUw7CiAgfQp9IC8vIGVuZCBvZiBjbGFzcwoKPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/class.phRETS.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmNsYXNzIHBocFJFVFNfRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHt9CgpjbGFzcyBwaFJFVFMgewoKLyoqCiogIFBIUkVUUyAtIFBIUCBsaWJyYXJ5IGZvciBSRVRTCiogIHZlcnNpb24gMS4wLjEKKiAgaHR0cDovL3Ryb2RhLmNvbS9wcm9qZWN0cy9waHJldHMvCiogIENvcHlyaWdodCAoQykgMjAwNy0yMDEyIFRyb3kgRGF2aXNzb24KKiAgcGxlYXNlIHN1Ym1pdCBwcm9ibGVtIG9yIGVycm9yIHJlcG9ydHMgdG8gaHR0cHM6Ly9naXRodWIuY29tL3Ryb3lkYXZpc3Nvbi9QSFJFVFMvaXNzdWVzCioKKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKiAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIHVzZSwgY29weSBvciBtb2RpZnkgdGhpcyBzb2Z0d2FyZS4gIFVzZSBhdCB5b3VyIG93biByaXNrLgoqCiogIFRoaXMgbGlicmFyeSBpcyBkaXZpZGVkIGludG8gMiBzZWN0aW9uczogaGlnaCBsZXZlbCBhbmQgbG93IGxldmVsCiogICAgSGlnaCBsZXZlbDogSGVscGZ1bCBmdW5jdGlvbnMgdGhhdCB0YWtlIG11Y2ggb2YgdGhlIGJ1cmRlbiBvdXQgb2YgcHJvY2Vzc2luZyBSRVRTIGRhdGEKKiAgICBMb3cgbGV2ZWw6IEZyYW1ld29yayBmb3IgY29tbXVuaWNhdGluZyB3aXRoIGEgUkVUUyBzZXJ2ZXIuICBIaWdoIGxldmVsIGZ1bmN0aW9ucyBzaXQgb24gdG9wIG9mIHRoZXNlCioKKi8KCglwdWJsaWMgJGNhcGFiaWxpdHlfdXJsID0gYXJyYXkoKTsKCXByaXZhdGUgJGNoOwoJcHJpdmF0ZSAkc2VydmVyX2hvc3RuYW1lOwoJcHJpdmF0ZSAkc2VydmVyX3BvcnQ7Cglwcml2YXRlICRzZXJ2ZXJfcHJvdG9jb2w7Cglwcml2YXRlICRzZXJ2ZXJfdmVyc2lvbjsKCXByaXZhdGUgJHNlcnZlcl9zb2Z0d2FyZTsKCXByaXZhdGUgJHN0YXRpY19oZWFkZXJzID0gYXJyYXkoKTsKCXByaXZhdGUgJHNlcnZlcl9pbmZvcm1hdGlvbiA9IGFycmF5KCk7Cglwcml2YXRlICRjb29raWVfZmlsZSA9ICIiOwoJcHJpdmF0ZSAkZGVidWdfZmlsZSA9ICJyZXRzX2RlYnVnLnR4dCI7Cglwcml2YXRlICRkZWJ1Z19tb2RlOwoJcHJpdmF0ZSAkYWxsb3dlZF9jYXBhYmlsaXRpZXMgPSBhcnJheSgKCQkJIkFjdGlvbiIgPT4gMSwKCQkJIkNoYW5nZVBhc3N3b3JkIiA9PiAxLAoJCQkiR2V0T2JqZWN0IiA9PiAxLAoJCQkiTG9naW4iID0+IDEsCgkJCSJMb2dpbkNvbXBsZXRlIiA9PiAxLAoJCQkiTG9nb3V0IiA9PiAxLAoJCQkiU2VhcmNoIiA9PiAxLAoJCQkiR2V0TWV0YWRhdGEiID0+IDEsCgkJCSJTZXJ2ZXJJbmZvcm1hdGlvbiIgPT4gMSwKCQkJIlVwZGF0ZSIgPT4gMSwKCQkJIlBvc3RPYmplY3QiID0+IDEsCgkJCSJHZXRQYXlsb2FkTGlzdCIgPT4gMQoJCQkpOwoJcHJpdmF0ZSAkbGFzdF9yZXF1ZXN0ID0gYXJyYXkoKTsKCXByaXZhdGUgJGF1dGhfc3VwcG9ydF9iYXNpYyA9IGZhbHNlOwoJcHJpdmF0ZSAkYXV0aF9zdXBwb3J0X2RpZ2VzdCA9IGZhbHNlOwoJcHJpdmF0ZSAkbGFzdF9yZXNwb25zZV9oZWFkZXJzID0gYXJyYXkoKTsKCXByaXZhdGUgJGxhc3RfcmVzcG9uc2VfaGVhZGVyc19yYXcgPSAiIjsKCXByaXZhdGUgJGxhc3RfcmVtZW1iZXJlZF9oZWFkZXIgPSAiIjsKCXByaXZhdGUgJGNvbXByZXNzaW9uX2VuYWJsZWQgPSBmYWxzZTsKCXByaXZhdGUgJHVhX3B3ZCA9ICIiOwoJcHJpdmF0ZSAkdWFfYXV0aCA9IGZhbHNlOwoJcHJpdmF0ZSAkcmVxdWVzdF9pZCA9ICIiOwoJcHJpdmF0ZSAkZGlzYWJsZV9mb2xsb3dfbG9jYXRpb24gPSBmYWxzZTsKCXByaXZhdGUgJGZvcmNlX2Jhc2ljX2F1dGhlbnRpY2F0aW9uID0gZmFsc2U7Cglwcml2YXRlICR1c2VfaW50ZXJlYWx0eV91YV9hdXRoID0gZmFsc2U7Cglwcml2YXRlICRpbnRfcmVzdWx0X3BvaW50ZXIgPSAwOwoJcHJpdmF0ZSAkZXJyb3JfaW5mbyA9IGFycmF5KCk7Cglwcml2YXRlICRsYXN0X3JlcXVlc3RfdXJsOwoJcHJpdmF0ZSAkbGFzdF9zZXJ2ZXJfcmVzcG9uc2U7Cglwcml2YXRlICRzZXNzaW9uX2lkOwoJcHJpdmF0ZSAkY2F0Y2hfbGFzdF9yZXNwb25zZSA9IGZhbHNlOwoJcHJpdmF0ZSAkZGlzYWJsZV9lbmNvZGluZ19maXggPSBmYWxzZTsKCXByaXZhdGUgJG9mZnNldF9zdXBwb3J0ID0gZmFsc2U7Cglwcml2YXRlICRvdmVycmlkZV9vZmZzZXRfcHJvdGVjdGlvbiA9IGZhbHNlOwoKCXB1YmxpYyBmdW5jdGlvbiBHZXRMYXN0U2VydmVyUmVzcG9uc2UoKSB7CgkJcmV0dXJuICR0aGlzLT5sYXN0X3NlcnZlcl9yZXNwb25zZTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gR2V0T2JqZWN0KCRyZXNvdXJjZSwgJHR5cGUsICRpZCwgJHBob3RvX251bWJlciA9ICcqJywgJGxvY2F0aW9uID0gMCkgewoJCSR0aGlzLT5yZXNldF9lcnJvcl9pbmZvKCk7CgkJJHJldHVybl9waG90b3MgPSBhcnJheSgpOwoKCQlpZiAoZW1wdHkoJHJlc291cmNlKSkgewoJCQl0aHJvdyBuZXcgcGhwUmV0c19FeGNlcHRpb24oIlJlc291cmNlIHBhcmFtZXRlciBpcyByZXF1aXJlZCBmb3IgR2V0T2JqZWN0KCkgcmVxdWVzdC4iKTsKCQl9CgkJaWYgKGVtcHR5KCR0eXBlKSkgewoJCQl0aHJvdyBuZXcgcGhwUmV0c19FeGNlcHRpb24oIlR5cGUgcGFyYW1ldGVyIGlzIHJlcXVpcmVkIGZvciBHZXRPYmplY3QoKSByZXF1ZXN0LiIpOwoJCX0KCQlpZiAoZW1wdHkoJGlkKSkgewoJCQl0aHJvdyBuZXcgcGhwUmV0c19FeGNlcHRpb24oIklEIHBhcmFtZXRlciBpcyByZXF1aXJlZCBmb3IgR2V0T2JqZWN0KCkgcmVxdWVzdC4iKTsKCQl9CgkJaWYgKGVtcHR5KCR0aGlzLT5jYXBhYmlsaXR5X3VybFsnR2V0T2JqZWN0J10pKSB7CgkJCXRocm93IG5ldyBwaHBSZXRzX0V4Y2VwdGlvbigiR2V0T2JqZWN0KCkgY2FsbGVkIGJ1dCB1bmFibGUgdG8gZmluZCBHZXRPYmplY3QgbG9jYXRpb24uICBGYWlsZWQgbG9naW4/XG4iKTsKCQl9CgoJCSRzZW5kX2lkID0gIiI7CgkJJHNlbmRfbnVtYiA9ICIiOwoKCQkvLyBjaGVjayBpZiAkcGhvdG9fbnVtYmVyIG5lZWRzIGZpeGluZwoJCWlmIChzdHJwb3MoJHBob3RvX251bWJlciwgJywnKSAhPT0gZmFsc2UpIHsKCQkJLy8gY2hhbmdlIHRoZSBjb21tYXMgdG8gY29sb25zIGZvciB0aGUgcmVxdWVzdAoJCQkkcGhvdG9fbnVtYmVyID0gcHJlZ19yZXBsYWNlKCcvXCwvJywgJzonLCAkcGhvdG9fbnVtYmVyKTsKCQl9CgoJCWlmIChzdHJwb3MoJHBob3RvX251bWJlciwgJzonKSAhPT0gZmFsc2UpIHsKCQkJLy8gcGhvdG8gbnVtYmVyIGNvbnRhaW5zIG11bHRpcGxlIG9iamVjdHMKCQkJLy8gY2hvcHBpbmcgYW5kIGNsZWFuaW5nCgkJCSRyZXF1ZXN0ZWRfbnVtYmVycyA9IGV4cGxvZGUoIjoiLCAkcGhvdG9fbnVtYmVyKTsKCQkJaWYgKGlzX2FycmF5KCRyZXF1ZXN0ZWRfbnVtYmVycykpIHsKCQkJCWZvcmVhY2ggKCRyZXF1ZXN0ZWRfbnVtYmVycyBhcyAkbnVtYikgewoJCQkJCSRudW1iID0gdHJpbSgkbnVtYik7CgkJCQkJaWYgKCFlbXB0eSgkbnVtYikgfHwgJG51bWIgPT0gIjAiKSB7CgkJCQkJJHNlbmRfbnVtYiAuPSAieyRudW1ifToiOwoJCQkJCX0KCQkJCX0KCQkJfQoJCQkkc2VuZF9udW1iID0gcHJlZ19yZXBsYWNlKCcvXDokLycsICcnLCAkc2VuZF9udW1iKTsKCQl9CgkJZWxzZSB7CgkJCSRzZW5kX251bWIgPSB0cmltKCRwaG90b19udW1iZXIpOwoJCX0KCgkJaWYgKHN0cnBvcygkaWQsICcsJykgIT09IGZhbHNlKSB7CgkJCS8vIGlkIGNvbnRhaW5zIG11bHRpcGxlIG9iamVjdHMuCgkJCS8vIGNob3BwaW5nIGFuZCBjb21iaW5pbmcgd2l0aCBwaG90b19udW1iZXIKCQkJJHJlcXVlc3RlZF9pZHMgPSBleHBsb2RlKCIsIiwgJGlkKTsKCQkJaWYgKGlzX2FycmF5KCRyZXF1ZXN0ZWRfaWRzKSkgewoJCQkJZm9yZWFjaCAoJHJlcXVlc3RlZF9pZHMgYXMgJHJlcV9pZCkgewoJCQkJJHJlcV9pZCA9IHRyaW0oJHJlcV9pZCk7CgkJCQkJaWYgKCFlbXB0eSgkcmVxX2lkKSAmJiAkcmVxX2lkICE9ICIwIikgewoJCQkJCQkkc2VuZF9pZCAuPSAieyRyZXFfaWR9Onskc2VuZF9udW1ifSwiOwoJCQkJCX0KCQkJCX0KCQkJfQoJCQkkc2VuZF9pZCA9IHByZWdfcmVwbGFjZSgnL1wsJC8nLCAnJywgJHNlbmRfaWQpOwoJCX0KCQllbHNlIHsKCQkJJHNlbmRfaWQgPSB0cmltKCRpZCkuJzonLiRzZW5kX251bWI7CgkJfQoKCQkvLyBtYWtlIHJlcXVlc3QKCQkkcmVzdWx0ID0gJHRoaXMtPlJFVFNSZXF1ZXN0KCR0aGlzLT5jYXBhYmlsaXR5X3VybFsnR2V0T2JqZWN0J10sCgkJCQkJCWFycmF5KAoJCQkJCQkJCSdSZXNvdXJjZScgPT4gJHJlc291cmNlLAoJCQkJCQkJCSdUeXBlJyA9PiAkdHlwZSwKCQkJCQkJCQknSUQnID0+ICRzZW5kX2lkLAoJCQkJCQkJCSdMb2NhdGlvbicgPT4gJGxvY2F0aW9uCgkJCQkJCQkJKQoJCQkJCQkpOwoKCQlpZiAoISRyZXN1bHQpIHsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQlsaXN0KCRoZWFkZXJzLCAkYm9keSkgPSAkcmVzdWx0OwoKCQkvLyBmaXggY2FzZSBpc3N1ZSBpZiBleGlzdHMKCQlpZiAoaXNzZXQoJHRoaXMtPmxhc3RfcmVzcG9uc2VfaGVhZGVyc1snQ29udGVudC10eXBlJ10pICYmICFpc3NldCgkdGhpcy0+bGFzdF9yZXNwb25zZV9oZWFkZXJzWydDb250ZW50LVR5cGUnXSkpIHsKCQkJJHRoaXMtPmxhc3RfcmVzcG9uc2VfaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSAkdGhpcy0+bGFzdF9yZXNwb25zZV9oZWFkZXJzWydDb250ZW50LXR5cGUnXTsKCQl9CgoJCWlmICghaXNzZXQoJHRoaXMtPmxhc3RfcmVzcG9uc2VfaGVhZGVyc1snQ29udGVudC1UeXBlJ10pKSB7CgkJCSR0aGlzLT5sYXN0X3Jlc3BvbnNlX2hlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gIiI7CgkJfQoKCQkvLyBjaGVjayB3aGF0IHR5cGUgb2YgcmVzcG9uc2UgY2FtZSBiYWNrCgkJaWYgKHN0cnBvcygkdGhpcy0+bGFzdF9yZXNwb25zZV9oZWFkZXJzWydDb250ZW50LVR5cGUnXSwgJ211bHRpcGFydCcpICE9PSBmYWxzZSkgewoKCQkJLy8gaGVscCBiYWQgcmVzcG9uc2VzIGJlIG1vcmUgbXVsdGlwYXJ0IGNvbXBsaWFudAoJCQkkYm9keSA9ICJcclxueyRib2R5fVxyXG4iOwoKCQkJLy8gbXVsdGlwYXJ0CgkJCXByZWdfbWF0Y2goJy9ib3VuZGFyeVw9XCIoLio/KVwiLycsICR0aGlzLT5sYXN0X3Jlc3BvbnNlX2hlYWRlcnNbJ0NvbnRlbnQtVHlwZSddLCAkbWF0Y2hlcyk7CgkJCWlmIChpc3NldCgkbWF0Y2hlc1sxXSkpIHsKCQkJCSRib3VuZGFyeSA9ICRtYXRjaGVzWzFdOwoJCQl9CgkJCWVsc2UgewoJCQkJcHJlZ19tYXRjaCgnL2JvdW5kYXJ5XD0oLio/KShcc3wkfFw7KS8nLCAkdGhpcy0+bGFzdF9yZXNwb25zZV9oZWFkZXJzWydDb250ZW50LVR5cGUnXSwgJG1hdGNoZXMpOwoJCQkJJGJvdW5kYXJ5ID0gJG1hdGNoZXNbMV07CgkJCX0KCQkJLy8gc3RyaXAgcXVvdGVzIG9mZiBvZiB0aGUgYm91bmRhcnkKCQkJJGJvdW5kYXJ5ID0gcHJlZ19yZXBsYWNlKCcvXlwiKC4qPylcIiQvJywgJ1wxJywgJGJvdW5kYXJ5KTsKCgkJCS8vIGNsZWFuIHVwIHRoZSBib2R5IHRvIHJlbW92ZSBhIHJlYW1ibGUgYW5kIGVwaWxvZ3VlCgkJCSRib2R5ID0gcHJlZ19yZXBsYWNlKCcvXiguKj8pXHJcbi0tJy4kYm91bmRhcnkuJ1xyXG4vJywgIlxyXG4tLXskYm91bmRhcnl9XHJcbiIsICRib2R5KTsKCQkJLy8gbWFrZSB0aGUgbGFzdCBvbmUgbG9vayBsaWtlIHRoZSByZXN0IGZvciBlYXNpZXIgcGFyc2luZwoJCQkkYm9keSA9IHByZWdfcmVwbGFjZSgnL1xyXG4tLScuJGJvdW5kYXJ5LictLS8nLCAiXHJcbi0teyRib3VuZGFyeX1cclxuIiwgJGJvZHkpOwoKCQkJLy8gY3V0IHVwIHRoZSBtZXNzYWdlCgkJCSRtdWx0aV9wYXJ0cyA9IGFycmF5KCk7CgkJCSRtdWx0aV9wYXJ0cyA9IGV4cGxvZGUoIlxyXG4tLXskYm91bmRhcnl9XHJcbiIsICRib2R5KTsKCQkJLy8gdGFrZSBvZmYgYW55dGhpbmcgdGhhdCBoYXBwZW5zIGJlZm9yZSB0aGUgZmlyc3QgYm91bmRhcnkgKHRoZSBwcmVhbWJsZSkKCQkJYXJyYXlfc2hpZnQoJG11bHRpX3BhcnRzKTsKCQkJLy8gdGFrZSBvZmYgYW55dGhpbmcgYWZ0ZXIgdGhlIGxhc3QgYm91bmRhcnkgKHRoZSBlcGlsb2d1ZSkKCQkJYXJyYXlfcG9wKCRtdWx0aV9wYXJ0cyk7CgoJCQkvLyBnbyB0aHJvdWdoIGVhY2ggcGFydCBvZiB0aGUgbXVsdGlwYXJ0IG1lc3NhZ2UKCQkJZm9yZWFjaCAoJG11bHRpX3BhcnRzIGFzICRwYXJ0KSB7CgkJCQkvLyBkZWZhdWx0IHRvIHByb2Nlc3NpbmcgaGVhZGVycwoJCQkJJG9uX2hlYWRlcnMgPSB0cnVlOwoJCQkJJG9uX2JvZHkgPSBmYWxzZTsKCQkJCSRmaXJzdF9ib2R5X2ZvdW5kID0gZmFsc2U7CgkJCQkkdGhpc19waG90byA9IGFycmF5KCk7CgoJCQkJLy8gZ28gdGhyb3VnaCB0aGUgbXVsdGlwYXJ0IGNodW5rIGxpbmUtYnktbGluZQoJCQkJJGJvZHlfcGFydHMgPSBhcnJheSgpOwoJCQkJJGJvZHlfcGFydHMgPSBleHBsb2RlKCJcclxuIiwgJHBhcnQpOwoJCQkJJHRoaXNfcGhvdG9bJ0RhdGEnXSA9ICIiOwoJCQkJZm9yZWFjaCAoJGJvZHlfcGFydHMgYXMgJGxpbmUpIHsKCQkJCQlpZiAoZW1wdHkoJGxpbmUpICYmICRvbl9oZWFkZXJzID09IHRydWUpIHsKCQkJCQkJLy8gYmxhbmsgbGluZS4gIHN3aXRjaGluZyB0byBwcm9jZXNzaW5nIGEgYm9keSBhbmQgbW92aW5nIG9uCgkJCQkJCSRvbl9oZWFkZXJzID0gZmFsc2U7CgkJCQkJCSRvbl9ib2R5ID0gdHJ1ZTsKCQkJCQkJY29udGludWU7CgkJCQkJfQoJCQkJCWlmICgkb25faGVhZGVycyA9PSB0cnVlKSB7CgkJCQkJCS8vIG5vbiBibGFuayBsaW5lIGFuZCB3ZSdyZSBwcm9jZXNzaW5nIGhlYWRlcnMgc28gc2F2ZSB0aGUgaGVhZGVyCgkJCQkJCSRoZWFkZXIgPSBudWxsOwoJCQkJCQkkdmFsdWUgPSBudWxsOwoKCQkJCQkJaWYgKHN0cnBvcygkbGluZSwgJzonKSAhPT0gZmFsc2UpIHsKCQkJCQkJCUBsaXN0KCRoZWFkZXIsICR2YWx1ZSkgPSBleHBsb2RlKCc6JywgJGxpbmUsIDIpOwoJCQkJCQl9CgoJCQkJCQkkaGVhZGVyID0gdHJpbSgkaGVhZGVyKTsKCQkJCQkJJHZhbHVlID0gdHJpbSgkdmFsdWUpOwoJCQkJCQlpZiAoIWVtcHR5KCRoZWFkZXIpKSB7CgkJCQkJCQlpZiAoJGhlYWRlciA9PSAiRGVzY3JpcHRpb24iKSB7CgkJCQkJCQkJLy8gZm9yIHNlcnZlcnMgd2hlcmUgdGhlIGltcGxlbWVudG9ycyBkaWRuJ3QgcmVhZCB0aGUgbmV4dCB3b3JkIGluIHRoZSBSRVRTIHNwZWMuCgkJCQkJCQkJLy8gJ0Rlc2NyaXB0aW9uJyBpcyB0aGUgQk5GIHRlcm0uIENvbnRlbnQtRGVzY3JpcHRpb24gaXMgdGhlIGNvcnJlY3QgaGVhZGVyLgoJCQkJCQkJCS8vIGZpeGluZyBmb3Igc2FuaXR5CgkJCQkJCQkJJGhlYWRlciA9ICJDb250ZW50LURlc2NyaXB0aW9uIjsKCQkJCQkJCX0KCQkJCQkJCS8vIGZpeCBjYXNlIGlzc3VlIGlmIGV4aXN0cwoJCQkJCQkJaWYgKCRoZWFkZXIgPT0gIkNvbnRlbnQtdHlwZSIpIHsKCQkJCQkJCQkkaGVhZGVyID0gIkNvbnRlbnQtVHlwZSI7CgkJCQkJCQl9CgkJCQkJCQkkdGhpc19waG90b1skaGVhZGVyXSA9ICR2YWx1ZTsKCQkJCQkJfQoJCQkJCX0KCQkJCQlpZiAoJG9uX2JvZHkgPT0gdHJ1ZSkgewoJCQkJCQlpZiAoJGZpcnN0X2JvZHlfZm91bmQgPT0gdHJ1ZSkgewoJCQkJCQkJLy8gaGVyZSBhZ2FpbiBiZWNhdXNlIGEgbGluZWJyZWFrIGluIHRoZSBib2R5IHNlY3Rpb24gd2hpY2ggd2FzIGN1dCBvdXQgaW4gdGhlIGV4cGxvZGUKCQkJCQkJCS8vIGFkZCB0aGUgQ1JMRiBiYWNrCgkJCQkJCQkkdGhpc19waG90b1snRGF0YSddIC49ICJcclxuIjsKCQkJCQkJfQoJCQkJCQkvLyBub24gYmxhbmsgbGluZSBhbmQgd2UncmUgcHJvY2Vzc2luZyBhIGJvZHkgc28gc2F2ZSB0aGUgbGluZSBhcyBwYXJ0IG9mIERhdGEKCQkJCQkJJGZpcnN0X2JvZHlfZm91bmQgPSB0cnVlOwoJCQkJCQkkdGhpc19waG90b1snRGF0YSddIC49ICRsaW5lOwoJCQkJCX0KCQkJCX0KCQkJCS8vIGRvbmUgd2l0aCBwYXJzaW5nIG91dCB0aGUgbXVsdGlwYXJ0IHJlc3BvbnNlCgkJCQkvLyBjaGVjayBmb3IgZXJyb3JzIGFuZCBmaW5pc2ggdXAKCgkJCQkkdGhpc19waG90b1snU3VjY2VzcyddID0gdHJ1ZTsgLy8gYXNzdW1pbmcgZm9yIG5vdwoKCQkJCWlmIChzdHJwb3MoJHRoaXNfcGhvdG9bJ0NvbnRlbnQtVHlwZSddLCAneG1sJykgIT09IGZhbHNlKSB7CgkJCQkJLy8gdGhpcyBtdWx0aXBhcnQgbWlnaHQgaW5jbHVkZSBhIFJFVFMgZXJyb3IKCQkJCQkkeG1sID0gJHRoaXMtPlBhcnNlWE1MUmVzcG9uc2UoJHRoaXNfcGhvdG9bJ0RhdGEnXSk7CgoJCQkJCWlmICgkeG1sWydSZXBseUNvZGUnXSA9PSAwIHx8IGVtcHR5KCR0aGlzX3Bob3RvWydEYXRhJ10pKSB7CgkJCQkJCS8vIHN1Y2Nlc3MgYnV0IG5vIGJvZHkKCQkJCQkJJHRoaXNfcGhvdG9bJ1N1Y2Nlc3MnXSA9IHRydWU7CgkJCQkJfQoJCQkJCWVsc2UgewoJCQkJCQkvLyBSRVRTIGVycm9yIGluIHRoaXMgbXVsdGlwYXJ0IHNlY3Rpb24KCQkJCQkJJHRoaXNfcGhvdG9bJ1N1Y2Nlc3MnXSA9IGZhbHNlOwoJCQkJCQkkdGhpc19waG90b1snUmVwbHlDb2RlJ10gPSAieyR4bWxbJ1JlcGx5Q29kZSddfSI7CgkJCQkJCSR0aGlzX3Bob3RvWydSZXBseVRleHQnXSA9ICJ7JHhtbFsnUmVwbHlUZXh0J119IjsKCQkJCQl9CgkJCQl9CgoJCQkJLy8gYWRkIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgbXVsdGlwYXJ0IHRvIHRoZSByZXR1cm5lZCBhcnJheQoJCQkJJHJldHVybl9waG90b3NbXSA9ICR0aGlzX3Bob3RvOwoJCQl9CgkJfQoJCWVsc2UgewoJCQkvLyBhbGwgd2Uga25vdyBpcyB0aGF0IHRoZSByZXNwb25zZSB3YXNuJ3QgYSBtdWx0aXBhcnQgc28gaXQncyBlaXRoZXIgYSBzaW5nbGUgcGhvdG8gb3IgZXJyb3IKCQkJJHRoaXNfcGhvdG8gPSBhcnJheSgpOwoKCQkJJHRoaXNfcGhvdG9bJ1N1Y2Nlc3MnXSA9IHRydWU7IC8vIGFzc3VtaW5nIGZvciBub3cKCQkJaWYgKGlzc2V0KCR0aGlzLT5sYXN0X3Jlc3BvbnNlX2hlYWRlcnNbJ0NvbnRlbnQtSUQnXSkpIHsKCQkJCSR0aGlzX3Bob3RvWydDb250ZW50LUlEJ10gPSAkdGhpcy0+bGFzdF9yZXNwb25zZV9oZWFkZXJzWydDb250ZW50LUlEJ107CgkJCX0KCQkJaWYgKGlzc2V0KCR0aGlzLT5sYXN0X3Jlc3BvbnNlX2hlYWRlcnNbJ09iamVjdC1JRCddKSkgewoJCQkJJHRoaXNfcGhvdG9bJ09iamVjdC1JRCddID0gJHRoaXMtPmxhc3RfcmVzcG9uc2VfaGVhZGVyc1snT2JqZWN0LUlEJ107CgkJCX0KCQkJaWYgKGlzc2V0KCR0aGlzLT5sYXN0X3Jlc3BvbnNlX2hlYWRlcnNbJ0NvbnRlbnQtVHlwZSddKSkgewoJCQkJJHRoaXNfcGhvdG9bJ0NvbnRlbnQtVHlwZSddID0gJHRoaXMtPmxhc3RfcmVzcG9uc2VfaGVhZGVyc1snQ29udGVudC1UeXBlJ107CgkJCX0KCQkJaWYgKGlzc2V0KCR0aGlzLT5sYXN0X3Jlc3BvbnNlX2hlYWRlcnNbJ01JTUUtVmVyc2lvbiddKSkgewoJCQkJJHRoaXNfcGhvdG9bJ01JTUUtVmVyc2lvbiddID0gJHRoaXMtPmxhc3RfcmVzcG9uc2VfaGVhZGVyc1snTUlNRS1WZXJzaW9uJ107CgkJCX0KCQkJaWYgKGlzc2V0KCR0aGlzLT5sYXN0X3Jlc3BvbnNlX2hlYWRlcnNbJ0xvY2F0aW9uJ10pKSB7CgkJCQkkdGhpc19waG90b1snTG9jYXRpb24nXSA9ICR0aGlzLT5sYXN0X3Jlc3BvbnNlX2hlYWRlcnNbJ0xvY2F0aW9uJ107CgkJCX0KCQkJaWYgKGlzc2V0KCR0aGlzLT5sYXN0X3Jlc3BvbnNlX2hlYWRlcnNbJ1ByZWZlcnJlZCddKSkgewoJCQkJJHRoaXNfcGhvdG9bJ1ByZWZlcnJlZCddID0gJHRoaXMtPmxhc3RfcmVzcG9uc2VfaGVhZGVyc1snUHJlZmVycmVkJ107CgkJCX0KCgkJCWlmIChpc3NldCgkdGhpcy0+bGFzdF9yZXNwb25zZV9oZWFkZXJzWydEZXNjcmlwdGlvbiddKSkgewoJCQkJaWYgKCFlbXB0eSgkdGhpcy0+bGFzdF9yZXNwb25zZV9oZWFkZXJzWydEZXNjcmlwdGlvbiddKSkgewoJCQkJCS8vIGZvciBzZXJ2ZXJzIHdoZXJlIHRoZSBpbXBsZW1lbnRvcnMgZGlkbid0IHJlYWQgdGhlIG5leHQgd29yZCBpbiB0aGUgUkVUUyBzcGVjLgoJCQkJCS8vICdEZXNjcmlwdGlvbicgaXMgdGhlIEJORiB0ZXJtLiBDb250ZW50LURlc2NyaXB0aW9uIGlzIHRoZSBjb3JyZWN0IGhlYWRlci4KCQkJCQkvLyBmaXhpbmcgZm9yIHNhbml0eQoJCQkJCSR0aGlzX3Bob3RvWydDb250ZW50LURlc2NyaXB0aW9uJ10gPSAkdGhpcy0+bGFzdF9yZXNwb25zZV9oZWFkZXJzWydEZXNjcmlwdGlvbiddOwoJCQkJfQoJCQl9CgkJCWlmIChpc3NldCgkdGhpcy0+bGFzdF9yZXNwb25zZV9oZWFkZXJzWydDb250ZW50LURlc2NyaXB0aW9uJ10pKSB7CgkJCQkkdGhpc19waG90b1snQ29udGVudC1EZXNjcmlwdGlvbiddID0gJHRoaXMtPmxhc3RfcmVzcG9uc2VfaGVhZGVyc1snQ29udGVudC1EZXNjcmlwdGlvbiddOwoJCQl9CgoJCQkkdGhpc19waG90b1snTGVuZ3RoJ10gPSBzdHJsZW4oJGJvZHkpOwoJCQkkdGhpc19waG90b1snRGF0YSddID0gJGJvZHk7CgoJCQlpZiAoaXNzZXQoJHRoaXMtPmxhc3RfcmVzcG9uc2VfaGVhZGVyc1snQ29udGVudC1UeXBlJ10pKSB7CgkJCQlpZiAoc3RycG9zKCR0aGlzLT5sYXN0X3Jlc3BvbnNlX2hlYWRlcnNbJ0NvbnRlbnQtVHlwZSddLCAneG1sJykgIT09IGZhbHNlKSB7CgkJCQkJLy8gUkVUUyBlcnJvciBtYXliZT8KCQkJCQkkeG1sID0gJHRoaXMtPlBhcnNlWE1MUmVzcG9uc2UoJGJvZHkpOwoKCQkJCQlpZiAoJHhtbFsnUmVwbHlDb2RlJ10gPT0gMCB8fCBlbXB0eSgkYm9keSkpIHsKCQkJCQkJLy8gZmFsc2UgYWxhcm0uICB3ZSdyZSBnb29kCgkJCQkJCSR0aGlzX3Bob3RvWydTdWNjZXNzJ10gPSB0cnVlOwoJCQkJCX0KCQkJCQllbHNlIHsKCQkJCQkJLy8geWVzLCBSRVRTIGVycm9yCgkJCQkJCSR0aGlzLT5sYXN0X3JlcXVlc3RbJ1JlcGx5Q29kZSddID0gInskeG1sWydSZXBseUNvZGUnXX0iOwoJCQkJCQkkdGhpcy0+bGFzdF9yZXF1ZXN0WydSZXBseVRleHQnXSA9ICJ7JHhtbFsnUmVwbHlUZXh0J119IjsKCQkJCQkJJHRoaXNfcGhvdG9bJ1JlcGx5Q29kZSddID0gInskeG1sWydSZXBseUNvZGUnXX0iOwoJCQkJCQkkdGhpc19waG90b1snUmVwbHlUZXh0J10gPSAieyR4bWxbJ1JlcGx5VGV4dCddfSI7CgkJCQkJCSR0aGlzX3Bob3RvWydTdWNjZXNzJ10gPSBmYWxzZTsKCQkJCQl9CgkJCQl9CgkJCX0KCgkJCS8vIGFkZCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHBob3RvIHRvIHRoZSByZXR1cm5lZCBhcnJheQoJCQkkcmV0dXJuX3Bob3Rvc1tdID0gJHRoaXNfcGhvdG87CgkJfQoKCQkvLyByZXR1cm4gZXZlcnl0aGluZwoJCXJldHVybiAkcmV0dXJuX3Bob3RvczsKCX0KCgoJcHVibGljIGZ1bmN0aW9uIElzTWF4cm93c1JlYWNoZWQoJHBvaW50ZXJfaWQgPSAiIikgewoJCWlmIChlbXB0eSgkcG9pbnRlcl9pZCkpIHsKCQkJJHBvaW50ZXJfaWQgPSAkdGhpcy0+aW50X3Jlc3VsdF9wb2ludGVyOwoJCX0KCQlyZXR1cm4gJHRoaXMtPnNlYXJjaF9kYXRhWyRwb2ludGVyX2lkXVsnbWF4cm93c19yZWFjaGVkJ107Cgl9CgoKCXB1YmxpYyBmdW5jdGlvbiBUb3RhbFJlY29yZHNGb3VuZCgkcG9pbnRlcl9pZCA9ICIiKSB7CgkJaWYgKGVtcHR5KCRwb2ludGVyX2lkKSkgewoJCQkkcG9pbnRlcl9pZCA9ICR0aGlzLT5pbnRfcmVzdWx0X3BvaW50ZXI7CgkJfQoJCXJldHVybiAkdGhpcy0+c2VhcmNoX2RhdGFbJHBvaW50ZXJfaWRdWyd0b3RhbF9yZWNvcmRzX2ZvdW5kJ107Cgl9CgoKCXB1YmxpYyBmdW5jdGlvbiBOdW1Sb3dzKCRwb2ludGVyX2lkID0gIiIpIHsKCQlpZiAoZW1wdHkoJHBvaW50ZXJfaWQpKSB7CgkJCSRwb2ludGVyX2lkID0gJHRoaXMtPmludF9yZXN1bHRfcG9pbnRlcjsKCQl9CgkJcmV0dXJuICR0aGlzLT5zZWFyY2hfZGF0YVskcG9pbnRlcl9pZF1bJ2xhc3Rfc2VhcmNoX3JldHVybmVkJ107Cgl9CgoKCXB1YmxpYyBmdW5jdGlvbiBTZWFyY2hHZXRGaWVsZHMoJHBvaW50ZXJfaWQpIHsKCQlpZiAoIWVtcHR5KCRwb2ludGVyX2lkKSkgewoJCQlyZXR1cm4gJHRoaXMtPnNlYXJjaF9kYXRhWyRwb2ludGVyX2lkXVsnY29sdW1uX25hbWVzJ107CgkJfQoJCWVsc2UgewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJfQoKCglwdWJsaWMgZnVuY3Rpb24gRnJlZVJlc3VsdCgkcG9pbnRlcl9pZCkgewoJCWlmICghZW1wdHkoJHBvaW50ZXJfaWQpKSB7CgkJCXVuc2V0KCR0aGlzLT5zZWFyY2hfZGF0YVskcG9pbnRlcl9pZF1bJ2RhdGEnXSk7CgkJCXVuc2V0KCR0aGlzLT5zZWFyY2hfZGF0YVskcG9pbnRlcl9pZF1bJ2RlbGltaXRlcl9jaGFyYWN0ZXInXSk7CgkJCXVuc2V0KCR0aGlzLT5zZWFyY2hfZGF0YVskcG9pbnRlcl9pZF1bJ2NvbHVtbl9uYW1lcyddKTsKCQkJcmV0dXJuIHRydWU7CgkJfQoJCWVsc2UgewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJfQoKCglwdWJsaWMgZnVuY3Rpb24gRmV0Y2hSb3coJHBvaW50ZXJfaWQsJGlkeCA9IG51bGwpIHsKCgkJJHRoaXNfcm93ID0gZmFsc2U7CgoJCWlmICghZW1wdHkoJHBvaW50ZXJfaWQpKSB7CgoJCQlpZiAoaXNzZXQoJHRoaXMtPnNlYXJjaF9kYXRhWyRwb2ludGVyX2lkXVsnZGF0YSddKSkgewoJCQkJJGZpZWxkX2RhdGEgPSBjdXJyZW50KCR0aGlzLT5zZWFyY2hfZGF0YVskcG9pbnRlcl9pZF1bJ2RhdGEnXSk7CgkJCQluZXh0KCR0aGlzLT5zZWFyY2hfZGF0YVskcG9pbnRlcl9pZF1bJ2RhdGEnXSk7CgkJCX0KCgkJCWlmICghZW1wdHkoJGZpZWxkX2RhdGEpKSB7CgkJCQkkdGhpc19yb3cgPSBhcnJheSgpOwoKCQkJCS8vIHNwbGl0IHVwIERBVEEgcm93IG9uIGRlbGltaXRlciBmb3VuZCBlYXJsaWVyCgkJCQkkZmllbGRfZGF0YSA9IHByZWdfcmVwbGFjZSgiL157JHRoaXMtPnNlYXJjaF9kYXRhWyRwb2ludGVyX2lkXVsnZGVsaW1pdGVyX2NoYXJhY3RlciddfS8iLCAiIiwgJGZpZWxkX2RhdGEpOwoJCQkJJGZpZWxkX2RhdGEgPSBwcmVnX3JlcGxhY2UoIi97JHRoaXMtPnNlYXJjaF9kYXRhWyRwb2ludGVyX2lkXVsnZGVsaW1pdGVyX2NoYXJhY3RlciddfVwkLyIsICIiLCAkZmllbGRfZGF0YSk7CgkJCQkkZmllbGRfZGF0YSA9IGV4cGxvZGUoJHRoaXMtPnNlYXJjaF9kYXRhWyRwb2ludGVyX2lkXVsnZGVsaW1pdGVyX2NoYXJhY3RlciddLCAkZmllbGRfZGF0YSk7CgoJCQkJZm9yZWFjaCAoJHRoaXMtPnNlYXJjaF9kYXRhWyRwb2ludGVyX2lkXVsnY29sdW1uX25hbWVzJ10gYXMgJGtleSA9PiAkbmFtZSkgewoJCQkJCS8vIGFzc2lnbiBlYWNoIHZhbHVlIHRvIGl0J3MgbmFtZSByZXRyaWV2ZWQgaW4gdGhlIENPTFVNTlMgZWFybGllcgoJCQkJCSR0aGlzX3Jvd1skbmFtZV0gPSAkZmllbGRfZGF0YVska2V5XTsKCQkJCX0KCQkJfQoJCX0KCgkJcmV0dXJuICR0aGlzX3JvdzsKCgl9CgoKCXB1YmxpYyBmdW5jdGlvbiBTZWFyY2hRdWVyeSgkcmVzb3VyY2UsICRjbGFzcywgJHF1ZXJ5ID0gIiIsICRvcHRpb25hbF9wYXJhbXMgPSBhcnJheSgpKSB7CgkJJHRoaXMtPnJlc2V0X2Vycm9yX2luZm8oKTsKCgkJaWYgKGVtcHR5KCRyZXNvdXJjZSkpIHsKCQkJdGhyb3cgbmV3IHBocFJldHNfRXhjZXB0aW9uKCJSZXNvdXJjZSBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQgaW4gU2VhcmNoUXVlcnkoKSByZXF1ZXN0LiIpOwoJCX0KCQlpZiAoZW1wdHkoJGNsYXNzKSkgewoJCQl0aHJvdyBuZXcgcGhwUmV0c19FeGNlcHRpb24oIkNsYXNzIHBhcmFtZXRlciBpcyByZXF1aXJlZCBpbiBTZWFyY2hRdWVyeSgpIHJlcXVlc3QuIik7CgkJfQoJCWlmIChlbXB0eSgkdGhpcy0+Y2FwYWJpbGl0eV91cmxbJ1NlYXJjaCddKSkgewoJCQl0aHJvdyBuZXcgcGhwUmV0c19FeGNlcHRpb24oIlNlYXJjaFF1ZXJ5KCkgY2FsbGVkIGJ1dCB1bmFibGUgdG8gZmluZCBTZWFyY2ggbG9jYXRpb24uICBGYWlsZWQgbG9naW4/XG4iKTsKCQl9CgoJCSR0aGlzLT5pbnRfcmVzdWx0X3BvaW50ZXIrKzsKCQkkdGhpcy0+c2VhcmNoX2RhdGFbJHRoaXMtPmludF9yZXN1bHRfcG9pbnRlcl1bJ2xhc3Rfc2VhcmNoX3JldHVybmVkJ10gPSAwOwoJCSR0aGlzLT5zZWFyY2hfZGF0YVskdGhpcy0+aW50X3Jlc3VsdF9wb2ludGVyXVsndG90YWxfcmVjb3Jkc19mb3VuZCddID0gMDsKCQkkdGhpcy0+c2VhcmNoX2RhdGFbJHRoaXMtPmludF9yZXN1bHRfcG9pbnRlcl1bJ2NvbHVtbl9uYW1lcyddID0gIiI7CgkJJHRoaXMtPnNlYXJjaF9kYXRhWyR0aGlzLT5pbnRfcmVzdWx0X3BvaW50ZXJdWydkZWxpbWl0ZXJfY2hhcmFjdGVyJ10gPSAiIjsKCQkkdGhpcy0+c2VhcmNoX2RhdGFbJHRoaXMtPmludF9yZXN1bHRfcG9pbnRlcl1bJ3NlYXJjaF9yZXF1ZXN0cyddID0gMDsKCgkJLy8gc2V0dXAgcmVxdWVzdCBhcmd1bWVudHMKCQkkc2VhcmNoX2FyZ3VtZW50cyA9IGFycmF5KCk7CgoJCSRzZWFyY2hfYXJndW1lbnRzWydTZWFyY2hUeXBlJ10gPSAkcmVzb3VyY2U7CgkJJHNlYXJjaF9hcmd1bWVudHNbJ0NsYXNzJ10gPSAkY2xhc3M7CgoJCS8vIGR1ZSB0byBhIGxhY2sgb2YgZm9yd2FyZC10aGlua2luZywgcmV2ZXJzaW5nIGEgcHJldmlvdXMgZGVjaXNpb24KCQkvLyBjaGVjayBpZiB0aGUgcXVlcnkgcGFzc2VkIGlzIG1pc3NpbmcgdGhlIG91dGVyIHBhcmVudGhlc2lzCgkJLy8gaWYgc28sIGFkZCB0aGVtCgkJaWYgKGVtcHR5KCRxdWVyeSkpIHsKCQkJLy8gZG8gbm90aGluZy4gIGh0dHA6Ly9yZXRzZG9jLm9uY29uZmx1ZW5jZS5jb20vZGlzcGxheS9yY3BjZW50ZXIvUkNQKzgwKy0rT3B0aW9uYWwrUXVlcnkKCQl9CgkJZWxzZWlmICgkcXVlcnkgPT0gIioiIHx8IHByZWdfbWF0Y2goJy9eXCgoLiopXCkkLycsICRxdWVyeSkpIHsKCQkJJHNlYXJjaF9hcmd1bWVudHNbJ1F1ZXJ5J10gPSAkcXVlcnk7CgkJfQoJCWVsc2UgewoJCQkkc2VhcmNoX2FyZ3VtZW50c1snUXVlcnknXSA9ICcoJy4kcXVlcnkuJyknOwoJCX0KCgoJCWlmIChpc3NldCgkc2VhcmNoX2FyZ3VtZW50c1snUXVlcnknXSkpIHsKCQkJJHNlYXJjaF9hcmd1bWVudHNbJ1F1ZXJ5VHlwZSddID0gIkRNUUwyIjsKCQl9CgoJCWlmICghZW1wdHkoJG9wdGlvbmFsX3BhcmFtc1snUXVlcnlUeXBlJ10pKSB7CgkJCSRzZWFyY2hfYXJndW1lbnRzWydRdWVyeVR5cGUnXSA9ICRvcHRpb25hbF9wYXJhbXNbJ1F1ZXJ5VHlwZSddOwoJCX0KCgkJLy8gc2V0dXAgYWRkaXRpb25hbCwgb3B0aW9uYWwgcmVxdWVzdCBhcmd1bWVudHMKCQkkc2VhcmNoX2FyZ3VtZW50c1snQ291bnQnXSA9ICghYXJyYXlfa2V5X2V4aXN0cygnQ291bnQnLCAkb3B0aW9uYWxfcGFyYW1zKSkgPyAxIDogJG9wdGlvbmFsX3BhcmFtc1snQ291bnQnXTsKCQkkc2VhcmNoX2FyZ3VtZW50c1snRm9ybWF0J10gPSBlbXB0eSgkb3B0aW9uYWxfcGFyYW1zWydGb3JtYXQnXSkgPyAiQ09NUEFDVC1ERUNPREVEIiA6ICRvcHRpb25hbF9wYXJhbXNbJ0Zvcm1hdCddOwoJCWlmKCBpc3NldCgkb3B0aW9uYWxfcGFyYW1zWydMaW1pdCddKSApICRzZWFyY2hfYXJndW1lbnRzWydMaW1pdCddID0gKGludCkkb3B0aW9uYWxfcGFyYW1zWydMaW1pdCddOwoJCS8vJHNlYXJjaF9hcmd1bWVudHNbJ0xpbWl0J10gPSBlbXB0eSgkb3B0aW9uYWxfcGFyYW1zWydMaW1pdCddKSA/IDk5OTk5OTkgOiAkb3B0aW9uYWxfcGFyYW1zWydMaW1pdCddOwoKCQlpZiAoaXNzZXQoJG9wdGlvbmFsX3BhcmFtc1snT2Zmc2V0J10pKSB7CgkJCSRzZWFyY2hfYXJndW1lbnRzWydPZmZzZXQnXSA9ICRvcHRpb25hbF9wYXJhbXNbJ09mZnNldCddOwoJCX0KCQllbHNlaWYgKCR0aGlzLT5vZmZzZXRfc3VwcG9ydCAmJiBlbXB0eSgkb3B0aW9uYWxfcGFyYW1zWydPZmZzZXQnXSkpIHsKCQkJLy8gc3RhcnQgYXV0by1vZmZzZXQgbG9vcGluZyB3aXRoIE9mZnNldCBhdCAxCgkJCSRzZWFyY2hfYXJndW1lbnRzWydPZmZzZXQnXSA9IDE7CgkJfQoJCWVsc2UgeyB9CgoJCWlmICghZW1wdHkoJG9wdGlvbmFsX3BhcmFtc1snU2VsZWN0J10pKSB7CgkJCSRzZWFyY2hfYXJndW1lbnRzWydTZWxlY3QnXSA9ICRvcHRpb25hbF9wYXJhbXNbJ1NlbGVjdCddOwoJCX0KCQlpZiAoIWVtcHR5KCRvcHRpb25hbF9wYXJhbXNbJ1Jlc3RyaWN0ZWRJbmRpY2F0b3InXSkpIHsKCQkJJHNlYXJjaF9hcmd1bWVudHNbJ1Jlc3RyaWN0ZWRJbmRpY2F0b3InXSA9ICRvcHRpb25hbF9wYXJhbXNbJ1Jlc3RyaWN0ZWRJbmRpY2F0b3InXTsKCQl9CgoJCSRzZWFyY2hfYXJndW1lbnRzWydTdGFuZGFyZE5hbWVzJ10gPSBlbXB0eSgkb3B0aW9uYWxfcGFyYW1zWydTdGFuZGFyZE5hbWVzJ10pID8gMCA6ICRvcHRpb25hbF9wYXJhbXNbJ1N0YW5kYXJkTmFtZXMnXTsKCgkJJGNvbnRpbnVlX3NlYXJjaGluZyA9IHRydWU7IC8vIEtlZXAgc2VhcmNoaW5nIGlmIE1BWCBST1dTIGlzIHJlYWNoZWQgYW5kIG9mZnNldF9zdXBwb3J0IGlzIHRydWUKCQl3aGlsZSAoJGNvbnRpbnVlX3NlYXJjaGluZykgewoKCQkJJHRoaXMtPnNlYXJjaF9kYXRhWyR0aGlzLT5pbnRfcmVzdWx0X3BvaW50ZXJdWydtYXhyb3dzX3JlYWNoZWQnXSA9IGZhbHNlOwoJCQkkdGhpcy0+c2VhcmNoX2RhdGFbJHRoaXMtPmludF9yZXN1bHRfcG9pbnRlcl1bJ3NlYXJjaF9yZXF1ZXN0cyddKys7CgoJCQlpZiAoJHRoaXMtPnNlYXJjaF9kYXRhWyR0aGlzLT5pbnRfcmVzdWx0X3BvaW50ZXJdWydzZWFyY2hfcmVxdWVzdHMnXSA9PSAzMDAgJiYgISR0aGlzLT5vdmVycmlkZV9vZmZzZXRfcHJvdGVjdGlvbikgewoJCQkJLy8gdGhpcyBjYWxsIGZvciBTZWFyY2hRdWVyeSgpIGhhcyByZXN1bHRlZCBpbiBYIG51bWJlciBvZiBzZWFyY2ggcmVxdWVzdHMKCQkJCS8vIHdoaWNoIGlzIGNvbnNpZGVyZWQgZXhjZXNzaXZlLiAgc3RvcHBpbmcgdGhlIHByb2Nlc3MgaW4gb3JkZXIgdG8gcHJldmVudAoJCQkJLy8gYWJ1c2UgYWdhaW5zdCB0aGUgc2VydmVyLiAgYWxtb3N0IEFMV0FZUyBoYXBwZW5zIHdoZW4gdGhlIHVzZXIgdGhpbmtzIE9mZnNldAoJCQkJLy8gaXMgc3VwcG9ydGVkIGJ5IHRoZSBzZXJ2ZXIgd2hlbiBpdCdzIGFjdHVhbGx5IE5PVCBzdXBwb3J0ZWQKCQkJCSR0aGlzLT5zZXRfZXJyb3JfaW5mbygicGhyZXRzIiwgLTEsICJMYXN0IFNlYXJjaFF1ZXJ5KCkgaGFzIHJlc3VsdGVkIGluIDMwMCsgcmVxdWVzdHMgdG8gdGhlIHNlcnZlci4gIFN0b3BwaW5nIHRvIHByZXZlbnQgYWJ1c2UiKTsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoKCQkJLy8gbWFrZSByZXF1ZXN0CgkJCSRyZXN1bHQgPSAkdGhpcy0+UkVUU1JlcXVlc3QoJHRoaXMtPmNhcGFiaWxpdHlfdXJsWydTZWFyY2gnXSwgJHNlYXJjaF9hcmd1bWVudHMpOwoJCQlpZiAoISRyZXN1bHQpIHsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCQlsaXN0KCRoZWFkZXJzLCAkYm9keSkgPSAkcmVzdWx0OwoKCQkJJGJvZHkgPSAkdGhpcy0+Zml4X2VuY29kaW5nKCRib2R5KTsKCgkJCSR4bWwgPSAkdGhpcy0+UGFyc2VYTUxSZXNwb25zZSgkYm9keSk7CgkJCWlmICghJHhtbCkgewoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgoJCQkvLyBsb2cgcmVwbHljb2RlIGFuZCByZXBseXRleHQgZm9yIHJlZmVyZW5jZSBsYXRlcgoJCQkkdGhpcy0+bGFzdF9yZXF1ZXN0WydSZXBseUNvZGUnXSA9ICJ7JHhtbFsnUmVwbHlDb2RlJ119IjsKCQkJJHRoaXMtPmxhc3RfcmVxdWVzdFsnUmVwbHlUZXh0J10gPSAieyR4bWxbJ1JlcGx5VGV4dCddfSI7CgoJCQlpZiAoJHhtbFsnUmVwbHlDb2RlJ10gIT0gMCkgewoJCQkJJHRoaXMtPnNldF9lcnJvcl9pbmZvKCJyZXRzIiwgInskeG1sWydSZXBseUNvZGUnXX0iLCAieyR4bWxbJ1JlcGx5VGV4dCddfSIpOwoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgoJCQlpZiAoaXNzZXQoJHhtbC0+REVMSU1JVEVSKSkgewoJCQkJLy8gZGVsaW1pdGVyIGZvdW5kIHNvIHdlIGhhdmUgYXQgbGVhc3QgYSBDT0xVTU5TIHJvdyB0byBwYXJzZQoJCQkJJGRlbGltaXRlcl9jaGFyYWN0ZXIgPSBjaHIoInskeG1sLT5ERUxJTUlURVItPmF0dHJpYnV0ZXMoKS0+dmFsdWV9Iik7CgkJCQkkdGhpcy0+c2VhcmNoX2RhdGFbJHRoaXMtPmludF9yZXN1bHRfcG9pbnRlcl1bJ2RlbGltaXRlcl9jaGFyYWN0ZXInXSA9ICRkZWxpbWl0ZXJfY2hhcmFjdGVyOwoJCQkJJGNvbHVtbl9uYW1lcyA9ICJ7JHhtbC0+Q09MVU1OU1swXX0iOwoJCQkJJGNvbHVtbl9uYW1lcyA9IHByZWdfcmVwbGFjZSgiL157JGRlbGltaXRlcl9jaGFyYWN0ZXJ9LyIsICIiLCAkY29sdW1uX25hbWVzKTsKCQkJCSRjb2x1bW5fbmFtZXMgPSBwcmVnX3JlcGxhY2UoIi97JGRlbGltaXRlcl9jaGFyYWN0ZXJ9XCQvIiwgIiIsICRjb2x1bW5fbmFtZXMpOwoJCQkJJHRoaXMtPnNlYXJjaF9kYXRhWyR0aGlzLT5pbnRfcmVzdWx0X3BvaW50ZXJdWydjb2x1bW5fbmFtZXMnXSA9IGV4cGxvZGUoJGRlbGltaXRlcl9jaGFyYWN0ZXIsICRjb2x1bW5fbmFtZXMpOwoJCQl9CgoJCQlpZiAoaXNzZXQoJHhtbC0+REFUQSkpIHsKCQkJCWZvcmVhY2ggKCR4bWwtPkRBVEEgYXMgJGtleSkgewoJCQkJCSRmaWVsZF9kYXRhID0gInska2V5fSI7CgkJCQkJLy8gc3BsaXQgdXAgREFUQSByb3cgb24gZGVsaW1pdGVyIGZvdW5kIGVhcmxpZXIKCQkJCQkkdGhpcy0+c2VhcmNoX2RhdGFbJHRoaXMtPmludF9yZXN1bHRfcG9pbnRlcl1bJ2RhdGEnXVtdID0gJGZpZWxkX2RhdGE7CgkJCQkJJHRoaXMtPnNlYXJjaF9kYXRhWyR0aGlzLT5pbnRfcmVzdWx0X3BvaW50ZXJdWydsYXN0X3NlYXJjaF9yZXR1cm5lZCddKys7CgkJCQl9CgkJCX0KCgkJCWlmIChpc3NldCgkeG1sLT5NQVhST1dTKSkgewoJCQkJLy8gTUFYUk9XUyB0YWcgZm91bmQuICB0aGUgUkVUUyBzZXJ2ZXIgd2l0aGhlbGQgcmVjb3Jkcy4KCQkJCS8vIGlmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgT2Zmc2V0LCBtb3JlIHJlcXVlc3RzIGNhbiBiZSBzZW50IHRvIHBhZ2UgdGhyb3VnaCByZXN1bHRzCgkJCQkvLyB1bnRpbCB0aGlzIHRhZyBpc24ndCBmb3VuZCBhbnltb3JlLgoJCQkJJHRoaXMtPnNlYXJjaF9kYXRhWyR0aGlzLT5pbnRfcmVzdWx0X3BvaW50ZXJdWydtYXhyb3dzX3JlYWNoZWQnXSA9IHRydWU7CgkJCX0KCgkJCWlmIChpc3NldCgkeG1sLT5DT1VOVCkpIHsKCQkJCS8vIGZvdW5kIHRoZSByZWNvcmQgY291bnQgcmV0dXJuZWQuICBzYXZlIGl0CgkJCQkkdGhpcy0+c2VhcmNoX2RhdGFbJHRoaXMtPmludF9yZXN1bHRfcG9pbnRlcl1bJ3RvdGFsX3JlY29yZHNfZm91bmQnXSA9ICJ7JHhtbC0+Q09VTlQtPmF0dHJpYnV0ZXMoKS0+UmVjb3Jkc30iOwoJCQl9CgoJCQlpZiAoaXNzZXQoJHhtbCkpIHsKCQkJCXVuc2V0KCR4bWwpOwoJCQl9CgoJCQlpZiAoJHRoaXMtPklzTWF4cm93c1JlYWNoZWQoJHRoaXMtPmludF9yZXN1bHRfcG9pbnRlcikgJiYgJHRoaXMtPm9mZnNldF9zdXBwb3J0KSB7CgkJCQkkY29udGludWVfc2VhcmNoaW5nID0gdHJ1ZTsKCQkJCSRzZWFyY2hfYXJndW1lbnRzWydPZmZzZXQnXSA9ICR0aGlzLT5OdW1Sb3dzKCR0aGlzLT5pbnRfcmVzdWx0X3BvaW50ZXIpICsgMTsKCQkJfQoJCQllbHNlIHsKCQkJCSRjb250aW51ZV9zZWFyY2hpbmcgPSBmYWxzZTsKCQkJfQoJCX0KCgkJcmV0dXJuICR0aGlzLT5pbnRfcmVzdWx0X3BvaW50ZXI7Cgl9CgoKCXB1YmxpYyBmdW5jdGlvbiBTZWFyY2goJHJlc291cmNlLCAkY2xhc3MsICRxdWVyeSA9ICIiLCAkb3B0aW9uYWxfcGFyYW1zID0gYXJyYXkoKSkgewoJCSRkYXRhX3RhYmxlID0gYXJyYXkoKTsKCgkJJGludF9yZXN1bHRfcG9pbnRlciA9ICR0aGlzLT5TZWFyY2hRdWVyeSgkcmVzb3VyY2UsICRjbGFzcywgJHF1ZXJ5LCAkb3B0aW9uYWxfcGFyYW1zKTsKCgkJd2hpbGUgKCRyb3cgPSAkdGhpcy0+RmV0Y2hSb3coJGludF9yZXN1bHRfcG9pbnRlcikpIHsKCQkJJGRhdGFfdGFibGVbXSA9ICRyb3c7CgkJfQoKCQlyZXR1cm4gJGRhdGFfdGFibGU7Cgl9CgoKCXB1YmxpYyBmdW5jdGlvbiBHZXRBbGxMb29rdXBWYWx1ZXMoJHJlc291cmNlKSB7CgkJJHRoaXMtPnJlc2V0X2Vycm9yX2luZm8oKTsKCgkJaWYgKGVtcHR5KCRyZXNvdXJjZSkpIHsKCQkJdGhyb3cgbmV3IHBocFJldHNfRXhjZXB0aW9uKCJSZXNvdXJjZSBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQgaW4gR2V0QWxsTG9va3VwVmFsdWVzKCkgcmVxdWVzdC4iKTsKCQl9CgkJaWYgKGVtcHR5KCR0aGlzLT5jYXBhYmlsaXR5X3VybFsnR2V0TWV0YWRhdGEnXSkpIHsKCQkJdGhyb3cgbmV3IHBocFJldHNfRXhjZXB0aW9uKCJHZXRBbGxMb29rdXBWYWx1ZXMoKSBjYWxsZWQgYnV0IHVuYWJsZSB0byBmaW5kIEdldE1ldGFkYXRhIGxvY2F0aW9uLiAgRmFpbGVkIGxvZ2luP1xuIik7CgkJfQoKCQkvLyBtYWtlIHJlcXVlc3QKCQkkcmVzdWx0ID0gJHRoaXMtPlJFVFNSZXF1ZXN0KCR0aGlzLT5jYXBhYmlsaXR5X3VybFsnR2V0TWV0YWRhdGEnXSwKCQkJCQkJYXJyYXkoCgkJCQkJCQkJJ1R5cGUnID0+ICdNRVRBREFUQS1MT09LVVBfVFlQRScsCgkJCQkJCQkJJ0lEJyA9PiAkcmVzb3VyY2UuJzoqJywKCQkJCQkJCQknRm9ybWF0JyA9PiAnU1RBTkRBUkQtWE1MJwoJCQkJCQkJCSkKCQkJCQkJKTsKCgkJaWYgKCEkcmVzdWx0KSB7CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJbGlzdCgkaGVhZGVycywgJGJvZHkpID0gJHJlc3VsdDsKCgkJJHhtbCA9ICR0aGlzLT5QYXJzZVhNTFJlc3BvbnNlKCRib2R5KTsKCQlpZiAoISR4bWwpIHsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCgkJaWYgKCR4bWxbJ1JlcGx5Q29kZSddICE9IDApIHsKCQkJJHRoaXMtPnNldF9lcnJvcl9pbmZvKCJyZXRzIiwgInskeG1sWydSZXBseUNvZGUnXX0iLCAieyR4bWxbJ1JlcGx5VGV4dCddfSIpOwoJCQlyZXR1cm4gZmFsc2U7CgkJfQoKCQkkdGhpc190YWJsZSA9IGFycmF5KCk7CgoJCS8vIHBhcnNlIFhNTCBpbnRvIGEgbmljZSBhcnJheQoJCWlmICgkeG1sLT5NRVRBREFUQSAmJiAkeG1sLT5NRVRBREFUQS0+eydNRVRBREFUQS1MT09LVVBfVFlQRSd9KSB7CgoJCQlmb3JlYWNoICgkeG1sLT5NRVRBREFUQS0+eydNRVRBREFUQS1MT09LVVBfVFlQRSd9IGFzICRrZXkpIHsKCQkJCWlmICghZW1wdHkoJGtleS0+YXR0cmlidXRlcygpLT5Mb29rdXApKSB7CgkJCQkJJHRoaXNfbG9va3VwID0gYXJyYXkoKTsKCgkJCQkJJGxvb2t1cF94bWxfYXJyYXkgPSBhcnJheSgpOwoJCQkJCWlmICghZW1wdHkoJGtleS0+TG9va3VwVHlwZSkpIHsKCQkJCQkJJGxvb2t1cF94bWxfYXJyYXkgPSAka2V5LT5Mb29rdXBUeXBlOwoJCQkJCX0KCQkJCQllbHNlIHsKCQkJCQkJJGxvb2t1cF94bWxfYXJyYXkgPSAka2V5LT5Mb29rdXA7CgkJCQkJfQoKCQkJCQlpZiAoaXNfb2JqZWN0KCRsb29rdXBfeG1sX2FycmF5KSkgewoJCQkJCQlmb3JlYWNoICgkbG9va3VwX3htbF9hcnJheSBhcyAkbG9vaykgewoJCQkJCQkJJG1ldGFkYXRhZW50cnlpZCA9IGlzc2V0KCRsb29rLT5NZXRhZGF0YUVudHJ5SUQpID8gInskbG9vay0+TWV0YWRhdGFFbnRyeUlEfSIgOiAiIjsKCQkJCQkJCSR2YWx1ZSA9IGlzc2V0KCRsb29rLT5WYWx1ZSkgPyAieyRsb29rLT5WYWx1ZX0iIDogIiI7CgkJCQkJCQkkc2hvcnR2YWx1ZSA9IGlzc2V0KCRsb29rLT5TaG9ydFZhbHVlKSA/ICJ7JGxvb2stPlNob3J0VmFsdWV9IiA6ICIiOwoJCQkJCQkJJGxvbmd2YWx1ZSA9IGlzc2V0KCRsb29rLT5Mb25nVmFsdWUpID8gInskbG9vay0+TG9uZ1ZhbHVlfSIgOiAiIjsKCgkJCQkJCQkkdGhpc19sb29rdXBbXSA9IGFycmF5KAoJCQkJCQkJCQknTWV0YWRhdGFFbnRyeUlEJyA9PiAkbWV0YWRhdGFlbnRyeWlkLAoJCQkJCQkJCQknVmFsdWUnID0+ICR2YWx1ZSwKCQkJCQkJCQkJJ1Nob3J0VmFsdWUnID0+ICRzaG9ydHZhbHVlLAoJCQkJCQkJCQknTG9uZ1ZhbHVlJyA9PiAkbG9uZ3ZhbHVlCgkJCQkJCQkJCSk7CgkJCQkJCX0KCQkJCQl9CgoJCQkJCSR0aGlzX3RhYmxlW10gPSBhcnJheSgnTG9va3VwJyA9PiAieyRrZXktPmF0dHJpYnV0ZXMoKS0+TG9va3VwfSIsICdWYWx1ZXMnID0+ICR0aGlzX2xvb2t1cCk7CgkJCQl9CgkJCX0KCQl9CgoJCS8vIHJldHVybiB0aGUgYmlnIGFycmF5CgkJcmV0dXJuICR0aGlzX3RhYmxlOwoJfQoKCglwdWJsaWMgZnVuY3Rpb24gR2V0TG9va3VwVmFsdWVzKCRyZXNvdXJjZSwgJGxvb2t1cG5hbWUpIHsKCQkkdGhpcy0+cmVzZXRfZXJyb3JfaW5mbygpOwoKCQlpZiAoZW1wdHkoJHJlc291cmNlKSkgewoJCQl0aHJvdyBuZXcgcGhwUmV0c19FeGNlcHRpb24oIlJlc291cmNlIHBhcmFtZXRlciBpcyByZXF1aXJlZCBpbiBHZXRMb29rdXBWYWx1ZXMoKSByZXF1ZXN0LiIpOwoJCX0KCQlpZiAoZW1wdHkoJGxvb2t1cG5hbWUpKSB7CgkJCXRocm93IG5ldyBwaHBSZXRzX0V4Y2VwdGlvbigiTG9va3VwIE5hbWUgcGFyYW1ldGVyIGlzIHJlcXVpcmVkIGluIEdldExvb2t1cFZhbHVlcygpIHJlcXVlc3QuIik7CgkJfQoJCWlmIChlbXB0eSgkdGhpcy0+Y2FwYWJpbGl0eV91cmxbJ0dldE1ldGFkYXRhJ10pKSB7CgkJCXRocm93IG5ldyBwaHBSZXRzX0V4Y2VwdGlvbigiR2V0TG9va3VwVmFsdWVzKCkgY2FsbGVkIGJ1dCB1bmFibGUgdG8gZmluZCBHZXRNZXRhZGF0YSBsb2NhdGlvbi4gIEZhaWxlZCBsb2dpbj9cbiIpOwoJCX0KCgkJLy8gbWFrZSByZXF1ZXN0CgkJJHJlc3VsdCA9ICR0aGlzLT5SRVRTUmVxdWVzdCgkdGhpcy0+Y2FwYWJpbGl0eV91cmxbJ0dldE1ldGFkYXRhJ10sCgkJCQkJCWFycmF5KAoJCQkJCQkJCSdUeXBlJyA9PiAnTUVUQURBVEEtTE9PS1VQX1RZUEUnLAoJCQkJCQkJCSdJRCcgPT4gJHJlc291cmNlLic6Jy4kbG9va3VwbmFtZSwKCQkJCQkJCQknRm9ybWF0JyA9PiAnU1RBTkRBUkQtWE1MJwoJCQkJCQkJCSkKCQkJCQkJKTsKCgkJaWYgKCEkcmVzdWx0KSB7CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJbGlzdCgkaGVhZGVycywgJGJvZHkpID0gJHJlc3VsdDsKCgkJJHhtbCA9ICR0aGlzLT5QYXJzZVhNTFJlc3BvbnNlKCRib2R5KTsKCQlpZiAoISR4bWwpIHsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCgkJaWYgKCR4bWxbJ1JlcGx5Q29kZSddICE9IDApIHsKCQkJJHRoaXMtPnNldF9lcnJvcl9pbmZvKCJyZXRzIiwgInskeG1sWydSZXBseUNvZGUnXX0iLCAieyR4bWxbJ1JlcGx5VGV4dCddfSIpOwoJCQlyZXR1cm4gZmFsc2U7CgkJfQoKCQkkdGhpc190YWJsZSA9IGFycmF5KCk7CgoJCS8vIHBhcnNlIFhNTCBpbnRvIGEgbmljZSBhcnJheQoJCWlmICgkeG1sLT5NRVRBREFUQSAmJiAkeG1sLT5NRVRBREFUQS0+eydNRVRBREFUQS1MT09LVVBfVFlQRSd9KSB7CgoJCQkkbG9va3VwX3htbF9hcnJheSA9IGFycmF5KCk7CgkJCWlmICghZW1wdHkoJHhtbC0+TUVUQURBVEEtPnsnTUVUQURBVEEtTE9PS1VQX1RZUEUnfS0+TG9va3VwVHlwZSkpIHsKCQkJCSRsb29rdXBfeG1sX2FycmF5ID0gJHhtbC0+TUVUQURBVEEtPnsnTUVUQURBVEEtTE9PS1VQX1RZUEUnfS0+TG9va3VwVHlwZTsKCQkJfQoJCQllbHNlIHsKCQkJCSRsb29rdXBfeG1sX2FycmF5ID0gJHhtbC0+TUVUQURBVEEtPnsnTUVUQURBVEEtTE9PS1VQX1RZUEUnfS0+TG9va3VwOwoJCQl9CgoJCQlpZiAoaXNfb2JqZWN0KCRsb29rdXBfeG1sX2FycmF5KSkgewoJCQkJZm9yZWFjaCAoJGxvb2t1cF94bWxfYXJyYXkgYXMgJGtleSkgewoJCQkJCWlmIChpc3NldCgka2V5LT5WYWx1ZSkpIHsKCQkJCQkJJG1ldGFkYXRhZW50cnlpZCA9IGlzc2V0KCRrZXktPk1ldGFkYXRhRW50cnlJRCkgPyAieyRrZXktPk1ldGFkYXRhRW50cnlJRH0iIDogIiI7CgkJCQkJCSR2YWx1ZSA9IGlzc2V0KCRrZXktPlZhbHVlKSA/ICJ7JGtleS0+VmFsdWV9IiA6ICIiOwoJCQkJCQkkc2hvcnR2YWx1ZSA9IGlzc2V0KCRrZXktPlNob3J0VmFsdWUpID8gInska2V5LT5TaG9ydFZhbHVlfSIgOiAiIjsKCQkJCQkJJGxvbmd2YWx1ZSA9IGlzc2V0KCRrZXktPkxvbmdWYWx1ZSkgPyAieyRrZXktPkxvbmdWYWx1ZX0iIDogIiI7CgoJCQkJCQkkdGhpc190YWJsZVtdID0gYXJyYXkoCgkJCQkJCQkJJ01ldGFkYXRhRW50cnlJRCcgPT4gJG1ldGFkYXRhZW50cnlpZCwKCQkJCQkJCQknVmFsdWUnID0+ICR2YWx1ZSwKCQkJCQkJCQknU2hvcnRWYWx1ZScgPT4gJHNob3J0dmFsdWUsCgkJCQkJCQkJJ0xvbmdWYWx1ZScgPT4gJGxvbmd2YWx1ZQoJCQkJCQkJCSk7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoKCQkvLyByZXR1cm4gdGhlIGJpZyBhcnJheQoJCXJldHVybiAkdGhpc190YWJsZTsKCX0KCgoJcHVibGljIGZ1bmN0aW9uIEdldE1ldGFkYXRhUmVzb3VyY2VzKCRpZCA9IDApIHsKCQkkdGhpcy0+cmVzZXRfZXJyb3JfaW5mbygpOwoKCQlpZiAoZW1wdHkoJHRoaXMtPmNhcGFiaWxpdHlfdXJsWydHZXRNZXRhZGF0YSddKSkgewoJCQl0aHJvdyBuZXcgcGhwUmV0c19FeGNlcHRpb24oIkdldE1ldGFkYXRhUmVzb3VyY2VzKCkgY2FsbGVkIGJ1dCB1bmFibGUgdG8gZmluZCBHZXRNZXRhZGF0YSBsb2NhdGlvbi4gIEZhaWxlZCBsb2dpbj9cbiIpOwoJCX0KCgkJLy8gbWFrZSByZXF1ZXN0CgkJJHJlc3VsdCA9ICR0aGlzLT5SRVRTUmVxdWVzdCgkdGhpcy0+Y2FwYWJpbGl0eV91cmxbJ0dldE1ldGFkYXRhJ10sCgkJCQkJCWFycmF5KAoJCQkJCQkJCSdUeXBlJyA9PiAnTUVUQURBVEEtUkVTT1VSQ0UnLAoJCQkJCQkJCSdJRCcgPT4gJGlkLAoJCQkJCQkJCSdGb3JtYXQnID0+ICdTVEFOREFSRC1YTUwnCgkJCQkJCQkJKQoJCQkJCQkpOwoKCQlpZiAoISRyZXN1bHQpIHsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQlsaXN0KCRoZWFkZXJzLCAkYm9keSkgPSAkcmVzdWx0OwoKCQkkeG1sID0gJHRoaXMtPlBhcnNlWE1MUmVzcG9uc2UoJGJvZHkpOwoJCWlmICghJHhtbCkgewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoKCQlpZiAoJHhtbFsnUmVwbHlDb2RlJ10gIT0gMCkgewoJCQkkdGhpcy0+c2V0X2Vycm9yX2luZm8oInJldHMiLCAieyR4bWxbJ1JlcGx5Q29kZSddfSIsICJ7JHhtbFsnUmVwbHlUZXh0J119Iik7CgkJCXJldHVybiBmYWxzZTsKCQl9CgoJCSR0aGlzX3Jlc291cmNlID0gYXJyYXkoKTsKCgkJLy8gcGFyc2UgWE1MIGludG8gYSBuaWNlIGFycmF5CgkJaWYgKCR4bWwtPk1FVEFEQVRBKSB7CgkJCWZvcmVhY2ggKCR4bWwtPk1FVEFEQVRBLT57J01FVEFEQVRBLVJFU09VUkNFJ30tPlJlc291cmNlIGFzICRrZXkgPT4gJHZhbHVlKSB7CgkJCQkkdGhpc19yZXNvdXJjZVsieyR2YWx1ZS0+UmVzb3VyY2VJRH0iXSA9IGFycmF5KAoJCQkJCQknUmVzb3VyY2VJRCcgPT4gInskdmFsdWUtPlJlc291cmNlSUR9IiwKCQkJCQkJJ1N0YW5kYXJkTmFtZSc9PiJ7JHZhbHVlLT5TdGFuZGFyZE5hbWV9IiwKCQkJCQkJJ1Zpc2libGVOYW1lJyA9PiAieyR2YWx1ZS0+VmlzaWJsZU5hbWV9IiwKCQkJCQkJJ0Rlc2NyaXB0aW9uJyA9PiAieyR2YWx1ZS0+RGVzY3JpcHRpb259IiwKCQkJCQkJJ0tleUZpZWxkJyA9PiAieyR2YWx1ZS0+S2V5RmllbGR9IiwKCQkJCQkJJ0NsYXNzQ291bnQnID0+ICJ7JHZhbHVlLT5DbGFzc0NvdW50fSIsCgkJCQkJCSdDbGFzc1ZlcnNpb24nID0+ICJ7JHZhbHVlLT5DbGFzc1ZlcnNpb259IiwKCQkJCQkJJ0NsYXNzRGF0ZScgPT4gInskdmFsdWUtPkNsYXNzRGF0ZX0iLAoJCQkJCQknT2JqZWN0VmVyc2lvbicgPT4gInskdmFsdWUtPk9iamVjdFZlcnNpb259IiwKCQkJCQkJJ09iamVjdERhdGUnID0+ICJ7JHZhbHVlLT5PYmplY3REYXRlfSIsCgkJCQkJCSdTZWFyY2hIZWxwVmVyc2lvbicgPT4gInskdmFsdWUtPlNlYXJjaEhlbHBWZXJzaW9ufSIsCgkJCQkJCSdTZWFyY2hIZWxwRGF0ZScgPT4gInskdmFsdWUtPlNlYXJjaEhlbHBEYXRlfSIsCgkJCQkJCSdFZGl0TWFza1ZlcnNpb24nID0+ICJ7JHZhbHVlLT5FZGl0TWFza1ZlcnNpb259IiwKCQkJCQkJJ0VkaXRNYXNrRGF0ZScgPT4gInskdmFsdWUtPkVkaXRNYXNrRGF0ZX0iLAoJCQkJCQknTG9va3VwVmVyc2lvbicgPT4gInskdmFsdWUtPkxvb2t1cFZlcnNpb259IiwKCQkJCQkJJ0xvb2t1cERhdGUnID0+ICJ7JHZhbHVlLT5Mb29rdXBEYXRlfSIsCgkJCQkJCSdVcGRhdGVIZWxwVmVyc2lvbicgPT4gInskdmFsdWUtPlVwZGF0ZUhlbHBWZXJzaW9ufSIsCgkJCQkJCSdVcGRhdGVIZWxwRGF0ZScgPT4gInskdmFsdWUtPlVwZGF0ZUhlbHBEYXRlfSIsCgkJCQkJCSdWYWxpZGF0aW9uRXhwcmVzc2lvblZlcnNpb24nID0+ICJ7JHZhbHVlLT5WYWxpZGF0aW9uRXhwcmVzc2lvblZlcnNpb259IiwKCQkJCQkJJ1ZhbGlkYXRpb25FeHByZXNzaW9uRGF0ZScgPT4gInskdmFsdWUtPlZhbGlkYXRpb25FeHByZXNzaW9uRGF0ZX0iLAoJCQkJCQknVmFsaWRhdGlvbkxvb2t1cFZlcnNpb24nID0+ICJ7JHZhbHVlLT5WYWxpZGF0aW9uTG9va3VwVmVyc2lvbn0iLAoJCQkJCQknVmFsaWRhdGlvbkxvb2t1cERhdGUnID0+ICJ7JHZhbHVlLT5WYWxpZGF0aW9uTG9va3VwRGF0ZX0iLAoJCQkJCQknVmFsaWRhdGlvbkV4dGVybmFsVmVyc2lvbicgPT4gInskdmFsdWUtPlZhbGlkYXRpb25FeHRlcm5hbFZlcnNpb259IiwKCQkJCQkJJ1ZhbGlkYXRpb25FeHRlcm5hbERhdGUnID0+ICJ7JHZhbHVlLT5WYWxpZGF0aW9uRXh0ZXJuYWxEYXRlfSIKCQkJCQkJKTsKCQkJfQoJCX0KCgkJLy8gc2VuZCBiYWNrIGFycmF5CgkJcmV0dXJuICR0aGlzX3Jlc291cmNlOwoJfQoKCglwdWJsaWMgZnVuY3Rpb24gR2V0TWV0YWRhdGFJbmZvKCRpZCA9IDApIHsKCQlpZiAoZW1wdHkoJHRoaXMtPmNhcGFiaWxpdHlfdXJsWydHZXRNZXRhZGF0YSddKSkgewoJCQl0aHJvdyBuZXcgcGhwUmV0c19FeGNlcHRpb24oIkdldE1ldGFkYXRhSW5mbygpIGNhbGxlZCBidXQgdW5hYmxlIHRvIGZpbmQgR2V0TWV0YWRhdGEgbG9jYXRpb24uICBGYWlsZWQgbG9naW4/XG4iKTsKCQl9CgkJcmV0dXJuICR0aGlzLT5HZXRNZXRhZGF0YVJlc291cmNlcygkaWQpOwoJfQoKCglwdWJsaWMgZnVuY3Rpb24gR2V0TWV0YWRhdGFUYWJsZSgkcmVzb3VyY2UsICRjbGFzcykgewoJCSR0aGlzLT5yZXNldF9lcnJvcl9pbmZvKCk7CgoJCSRpZCA9ICRyZXNvdXJjZS4nOicuJGNsYXNzOwoJCWlmIChlbXB0eSgkcmVzb3VyY2UpKSB7CgkJCXRocm93IG5ldyBwaHBSZXRzX0V4Y2VwdGlvbigiUmVzb3VyY2UgcGFyYW1ldGVyIGlzIHJlcXVpcmVkIGluIEdldE1ldGFkYXRhKCkgcmVxdWVzdC4iKTsKCQl9CgkJaWYgKGVtcHR5KCRjbGFzcykpIHsKCQkJdGhyb3cgbmV3IHBocFJldHNfRXhjZXB0aW9uKCJDbGFzcyBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQgaW4gR2V0TWV0YWRhdGEoKSByZXF1ZXN0LiIpOwoJCX0KCQlpZiAoZW1wdHkoJHRoaXMtPmNhcGFiaWxpdHlfdXJsWydHZXRNZXRhZGF0YSddKSkgewoJCQl0aHJvdyBuZXcgcGhwUmV0c19FeGNlcHRpb24oIkdldE1ldGFkYXRhVGFibGUoKSBjYWxsZWQgYnV0IHVuYWJsZSB0byBmaW5kIEdldE1ldGFkYXRhIGxvY2F0aW9uLiAgRmFpbGVkIGxvZ2luP1xuIik7CgkJfQoKCQkvLyByZXF1ZXN0IHNwZWNpZmljIG1ldGFkYXRhCgkJJHJlc3VsdCA9ICR0aGlzLT5SRVRTUmVxdWVzdCgkdGhpcy0+Y2FwYWJpbGl0eV91cmxbJ0dldE1ldGFkYXRhJ10sCgkJCQkJCWFycmF5KAoJCQkJCQkJCSdUeXBlJyA9PiAnTUVUQURBVEEtVEFCTEUnLAoJCQkJCQkJCSdJRCcgPT4gJGlkLAoJCQkJCQkJCSdGb3JtYXQnID0+ICdTVEFOREFSRC1YTUwnCgkJCQkJCQkJKQoJCQkJCQkpOwoKCQlpZiAoISRyZXN1bHQpIHsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQlsaXN0KCRoZWFkZXJzLCAkYm9keSkgPSAkcmVzdWx0OwoKCQkkeG1sID0gJHRoaXMtPlBhcnNlWE1MUmVzcG9uc2UoJGJvZHkpOwoJCWlmICghJHhtbCkgewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoKCQkvLyBsb2cgcmVwbHljb2RlIGFuZCByZXBseXRleHQgZm9yIHJlZmVyZW5jZSBsYXRlcgoJCSR0aGlzLT5sYXN0X3JlcXVlc3RbJ1JlcGx5Q29kZSddID0gInskeG1sWydSZXBseUNvZGUnXX0iOwoJCSR0aGlzLT5sYXN0X3JlcXVlc3RbJ1JlcGx5VGV4dCddID0gInskeG1sWydSZXBseVRleHQnXX0iOwoKCQlpZiAoJHhtbFsnUmVwbHlDb2RlJ10gIT0gMCkgewoJCQkkdGhpcy0+c2V0X2Vycm9yX2luZm8oInJldHMiLCAieyR4bWxbJ1JlcGx5Q29kZSddfSIsICJ7JHhtbFsnUmVwbHlUZXh0J119Iik7CgkJCXJldHVybiBmYWxzZTsKCQl9CgoJCSR0aGlzX3RhYmxlID0gYXJyYXkoKTsKCgkJLy8gcGFyc2UgWE1MIGludG8gYSBuaWNlIGFycmF5CgkJaWYgKCR4bWwtPk1FVEFEQVRBKSB7CgkJCWZvcmVhY2ggKCR4bWwtPk1FVEFEQVRBLT57J01FVEFEQVRBLVRBQkxFJ30tPkZpZWxkIGFzICRrZXkpIHsKCQkJCSR0aGlzX3RhYmxlW10gPSBhcnJheSgKCQkJCQkJJ1N5c3RlbU5hbWUnID0+ICJ7JGtleS0+U3lzdGVtTmFtZX0iLAoJCQkJCQknU3RhbmRhcmROYW1lJyA9PiAieyRrZXktPlN0YW5kYXJkTmFtZX0iLAoJCQkJCQknTG9uZ05hbWUnID0+ICJ7JGtleS0+TG9uZ05hbWV9IiwKCQkJCQkJJ0RCTmFtZScgPT4gInska2V5LT5EQk5hbWV9IiwKCQkJCQkJJ1Nob3J0TmFtZScgPT4gInska2V5LT5TaG9ydE5hbWV9IiwKCQkJCQkJJ01heGltdW1MZW5ndGgnID0+ICJ7JGtleS0+TWF4aW11bUxlbmd0aH0iLAoJCQkJCQknRGF0YVR5cGUnID0+ICJ7JGtleS0+RGF0YVR5cGV9IiwKCQkJCQkJJ1ByZWNpc2lvbicgPT4gInska2V5LT5QcmVjaXNpb259IiwKCQkJCQkJJ1NlYXJjaGFibGUnID0+ICJ7JGtleS0+U2VhcmNoYWJsZX0iLAoJCQkJCQknSW50ZXJwcmV0YXRpb24nID0+ICJ7JGtleS0+SW50ZXJwcmV0YXRpb259IiwKCQkJCQkJJ0FsaWdubWVudCcgPT4gInska2V5LT5BbGlnbm1lbnR9IiwKCQkJCQkJJ1VzZVNlcGFyYXRvcicgPT4gInska2V5LT5Vc2VTZXBhcmF0b3J9IiwKCQkJCQkJJ0VkaXRNYXNrSUQnID0+ICJ7JGtleS0+RWRpdE1hc2tJRH0iLAoJCQkJCQknTG9va3VwTmFtZScgPT4gInska2V5LT5Mb29rdXBOYW1lfSIsCgkJCQkJCSdNYXhTZWxlY3QnID0+ICJ7JGtleS0+TWF4U2VsZWN0fSIsCgkJCQkJCSdVbml0cycgPT4gInska2V5LT5Vbml0c30iLAoJCQkJCQknSW5kZXgnID0+ICJ7JGtleS0+SW5kZXh9IiwKCQkJCQkJJ01pbmltdW0nID0+ICJ7JGtleS0+TWluaW11bX0iLAoJCQkJCQknTWF4aW11bScgPT4gInska2V5LT5NYXhpbXVtfSIsCgkJCQkJCSdEZWZhdWx0JyA9PiAieyRrZXktPkRlZmF1bHR9IiwKCQkJCQkJJ1JlcXVpcmVkJyA9PiAieyRrZXktPlJlcXVpcmVkfSIsCgkJCQkJCSdTZWFyY2hIZWxwSUQnID0+ICJ7JGtleS0+U2VhcmNoSGVscElEfSIsCgkJCQkJCSdVbmlxdWUnID0+ICJ7JGtleS0+VW5pcXVlfSIsCgkJCQkJCSdNZXRhZGF0YUVudHJ5SUQnID0+ICJ7JGtleS0+TWV0YWRhdGFFbnRyeUlEfSIsCgkJCQkJCSdNb2RUaW1lU3RhbXAnID0+ICJ7JGtleS0+TW9kVGltZVN0YW1wfSIsCgkJCQkJCSdGb3JlaWduS2V5TmFtZScgPT4gInska2V5LT5Gb3JpZW5nS2V5TmFtZX0iLAoJCQkJCQknRm9yZWlnbkZpZWxkJyA9PiAieyRrZXktPkZvcmVpZ25GaWVsZH0iLAoJCQkJCQknSW5LZXlJbmRleCcgPT4gInska2V5LT5JbktleUluZGV4fSIKCQkJCQkJKTsKCQkJfQoJCX0KCgkJLy8gcmV0dXJuIHRoZSBiaWcgYXJyYXkKCQlyZXR1cm4gJHRoaXNfdGFibGU7Cgl9CgoKCXB1YmxpYyBmdW5jdGlvbiBHZXRNZXRhZGF0YSgkcmVzb3VyY2UsICRjbGFzcykgewoJCWlmIChlbXB0eSgkdGhpcy0+Y2FwYWJpbGl0eV91cmxbJ0dldE1ldGFkYXRhJ10pKSB7CgkJCXRocm93IG5ldyBwaHBSZXRzX0V4Y2VwdGlvbigiR2V0TWV0YWRhdGEoKSBjYWxsZWQgYnV0IHVuYWJsZSB0byBmaW5kIEdldE1ldGFkYXRhIGxvY2F0aW9uLiAgRmFpbGVkIGxvZ2luP1xuIik7CgkJfQoJCXJldHVybiAkdGhpcy0+R2V0TWV0YWRhdGFUYWJsZSgkcmVzb3VyY2UsICRjbGFzcyk7Cgl9CgoKCXB1YmxpYyBmdW5jdGlvbiBHZXRNZXRhZGF0YU9iamVjdHMoJGlkKSB7CgkJJHRoaXMtPnJlc2V0X2Vycm9yX2luZm8oKTsKCgkJaWYgKGVtcHR5KCRpZCkpIHsKCQkJdGhyb3cgbmV3IHBocFJldHNfRXhjZXB0aW9uKCJJRCBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQgaW4gR2V0TWV0YWRhdGFPYmplY3RzKCkgcmVxdWVzdC4iKTsKCQl9CgkJaWYgKGVtcHR5KCR0aGlzLT5jYXBhYmlsaXR5X3VybFsnR2V0TWV0YWRhdGEnXSkpIHsKCQkJdGhyb3cgbmV3IHBocFJldHNfRXhjZXB0aW9uKCJHZXRNZXRhZGF0YU9iamVjdHMoKSBjYWxsZWQgYnV0IHVuYWJsZSB0byBmaW5kIEdldE1ldGFkYXRhIGxvY2F0aW9uLiAgRmFpbGVkIGxvZ2luP1xuIik7CgkJfQoKCQkvLyByZXF1ZXN0IGJhc2ljIG1ldGFkYXRhIGluZm9ybWF0aW9uCgkJJHJlc3VsdCA9ICR0aGlzLT5SRVRTUmVxdWVzdCgkdGhpcy0+Y2FwYWJpbGl0eV91cmxbJ0dldE1ldGFkYXRhJ10sCgkJCQkJCWFycmF5KAoJCQkJCQkJCSdUeXBlJyA9PiAnTUVUQURBVEEtT0JKRUNUJywKCQkJCQkJCQknSUQnID0+ICRpZCwKCQkJCQkJCQknRm9ybWF0JyA9PiAnU1RBTkRBUkQtWE1MJwoJCQkJCQkJCSkKCQkJCQkJKTsKCgkJaWYgKCEkcmVzdWx0KSB7CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJbGlzdCgkaGVhZGVycywgJGJvZHkpID0gJHJlc3VsdDsKCgkJJHhtbCA9ICR0aGlzLT5QYXJzZVhNTFJlc3BvbnNlKCRib2R5KTsKCQlpZiAoISR4bWwpIHsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCgkJLy8gbG9nIHJlcGx5Y29kZSBhbmQgcmVwbHl0ZXh0IGZvciByZWZlcmVuY2UgbGF0ZXIKCQkkdGhpcy0+bGFzdF9yZXF1ZXN0WydSZXBseUNvZGUnXSA9ICJ7JHhtbFsnUmVwbHlDb2RlJ119IjsKCQkkdGhpcy0+bGFzdF9yZXF1ZXN0WydSZXBseVRleHQnXSA9ICJ7JHhtbFsnUmVwbHlUZXh0J119IjsKCgkJaWYgKCR4bWxbJ1JlcGx5Q29kZSddICE9IDApIHsKCQkJJHRoaXMtPnNldF9lcnJvcl9pbmZvKCJyZXRzIiwgInskeG1sWydSZXBseUNvZGUnXX0iLCAieyR4bWxbJ1JlcGx5VGV4dCddfSIpOwoJCQlyZXR1cm4gZmFsc2U7CgkJfQoKCQkkcmV0dXJuX2RhdGEgPSBhcnJheSgpOwoKCQlpZiAoaXNzZXQoJHhtbC0+TUVUQURBVEEtPnsnTUVUQURBVEEtT0JKRUNUJ30pKSB7CgkJCS8vIHBhcnNlIFhNTCBpbnRvIGEgbmljZSBhcnJheQoJCQlmb3JlYWNoICgkeG1sLT5NRVRBREFUQS0+eydNRVRBREFUQS1PQkpFQ1QnfSBhcyAka2V5ID0+ICR2YWx1ZSkgewoJCQkJZm9yZWFjaCAoJHZhbHVlLT5PYmplY3QgYXMgJGtleSkgewoJCQkJCWlmICghZW1wdHkoJGtleS0+T2JqZWN0VHlwZSkpIHsKCQkJCQkJJHJldHVybl9kYXRhW10gPSBhcnJheSgKCQkJCQkJCQknTWV0YWRhdGFFbnRyeUlEJyA9PiAieyRrZXktPk1ldGFkYXRhRW50cnlJRH0iLAoJCQkJCQkJCSdWaXNpYmxlTmFtZScgPT4gInska2V5LT5WaXNpYmxlTmFtZX0iLAoJCQkJCQkJCSdPYmplY3RUaW1lU3RhbXAnID0+ICJ7JGtleS0+T2JqZWN0VGltZVN0YW1wfSIsCgkJCQkJCQkJJ09iamVjdENvdW50JyA9PiAieyRrZXktPk9iamVjdENvdW50fSIsCgkJCQkJCQkJJ09iamVjdFR5cGUnID0+ICJ7JGtleS0+T2JqZWN0VHlwZX0iLAoJCQkJCQkJCSdTdGFuZGFyZE5hbWUnID0+ICJ7JGtleS0+U3RhbmRhcmROYW1lfSIsCgkJCQkJCQkJJ01pbWVUeXBlJyA9PiAieyRrZXktPk1pbWVUeXBlfSIsCgkJCQkJCQkJJ0Rlc2NyaXB0aW9uJyA9PiAieyRrZXktPkRlc2NyaXB0aW9ufSIKCQkJCQkJCQkpOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCgkJLy8gc2VuZCBiYWNrIGFycmF5CgkJcmV0dXJuICRyZXR1cm5fZGF0YTsKCX0KCgoJcHVibGljIGZ1bmN0aW9uIEdldE1ldGFkYXRhQ2xhc3NlcygkaWQpIHsKCQkkdGhpcy0+cmVzZXRfZXJyb3JfaW5mbygpOwoKCQlpZiAoZW1wdHkoJGlkKSkgewoJCQl0aHJvdyBuZXcgcGhwUmV0c19FeGNlcHRpb24oIklEIHBhcmFtZXRlciBpcyByZXF1aXJlZCBpbiBHZXRNZXRhZGF0YUNsYXNzZXMoKSByZXF1ZXN0LiIpOwoJCX0KCQlpZiAoZW1wdHkoJHRoaXMtPmNhcGFiaWxpdHlfdXJsWydHZXRNZXRhZGF0YSddKSkgewoJCQl0aHJvdyBuZXcgcGhwUmV0c19FeGNlcHRpb24oIkdldE1ldGFkYXRhQ2xhc3NlcygpIGNhbGxlZCBidXQgdW5hYmxlIHRvIGZpbmQgR2V0TWV0YWRhdGEgbG9jYXRpb24uICBGYWlsZWQgbG9naW4/XG4iKTsKCQl9CgoJCS8vIHJlcXVlc3QgYmFzaWMgbWV0YWRhdGEgaW5mb3JtYXRpb24KCQkkcmVzdWx0ID0gJHRoaXMtPlJFVFNSZXF1ZXN0KCR0aGlzLT5jYXBhYmlsaXR5X3VybFsnR2V0TWV0YWRhdGEnXSwKCQkJCQkJYXJyYXkoCgkJCQkJCQkJJ1R5cGUnID0+ICdNRVRBREFUQS1DTEFTUycsCgkJCQkJCQkJJ0lEJyA9PiAkaWQsCgkJCQkJCQkJJ0Zvcm1hdCcgPT4gJ1NUQU5EQVJELVhNTCcKCQkJCQkJCQkpCgkJCQkJCSk7CgoJCWlmICghJHJlc3VsdCkgewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCWxpc3QoJGhlYWRlcnMsICRib2R5KSA9ICRyZXN1bHQ7CgoJCSR4bWwgPSAkdGhpcy0+UGFyc2VYTUxSZXNwb25zZSgkYm9keSk7CgkJaWYgKCEkeG1sKSB7CgkJCXJldHVybiBmYWxzZTsKCQl9CgoJCS8vIGxvZyByZXBseWNvZGUgYW5kIHJlcGx5dGV4dCBmb3IgcmVmZXJlbmNlIGxhdGVyCgkJJHRoaXMtPmxhc3RfcmVxdWVzdFsnUmVwbHlDb2RlJ10gPSAieyR4bWxbJ1JlcGx5Q29kZSddfSI7CgkJJHRoaXMtPmxhc3RfcmVxdWVzdFsnUmVwbHlUZXh0J10gPSAieyR4bWxbJ1JlcGx5VGV4dCddfSI7CgoJCWlmICgkeG1sWydSZXBseUNvZGUnXSAhPSAwKSB7CgkJCSR0aGlzLT5zZXRfZXJyb3JfaW5mbygicmV0cyIsICJ7JHhtbFsnUmVwbHlDb2RlJ119IiwgInskeG1sWydSZXBseVRleHQnXX0iKTsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCgkJJHJldHVybl9kYXRhID0gYXJyYXkoKTsKCgkJLy8gcGFyc2UgWE1MIGludG8gYSBuaWNlIGFycmF5CgkJaWYgKCR4bWwtPk1FVEFEQVRBKSB7CgkJCWZvcmVhY2ggKCR4bWwtPk1FVEFEQVRBLT57J01FVEFEQVRBLUNMQVNTJ30gYXMgJGtleSA9PiAkdmFsdWUpIHsKCQkJCWZvcmVhY2ggKCR2YWx1ZS0+Q2xhc3MgYXMgJGtleSkgewoJCQkJCWlmICghZW1wdHkoJGtleS0+Q2xhc3NOYW1lKSkgewoJCQkJCQkkcmV0dXJuX2RhdGFbXSA9IGFycmF5KAoJCQkJCQkJCSdDbGFzc05hbWUnID0+ICJ7JGtleS0+Q2xhc3NOYW1lfSIsCgkJCQkJCQkJJ1Zpc2libGVOYW1lJyA9PiAieyRrZXktPlZpc2libGVOYW1lfSIsCgkJCQkJCQkJJ1N0YW5kYXJkTmFtZScgPT4gInska2V5LT5TdGFuZGFyZE5hbWV9IiwKCQkJCQkJCQknRGVzY3JpcHRpb24nID0+ICJ7JGtleS0+RGVzY3JpcHRpb259IiwKCQkJCQkJCQknVGFibGVWZXJzaW9uJyA9PiAieyRrZXktPlRhYmxlVmVyc2lvbn0iLAoJCQkJCQkJCSdUYWJsZURhdGUnID0+ICJ7JGtleS0+VGFibGVEYXRlfSIsCgkJCQkJCQkJJ1VwZGF0ZVZlcnNpb24nID0+ICJ7JGtleS0+VXBkYXRlVmVyc2lvbn0iLAoJCQkJCQkJCSdVcGRhdGVEYXRlJyA9PiAieyRrZXktPlVwZGF0ZURhdGV9IiwKCQkJCQkJCQknQ2xhc3NUaW1lU3RhbXAnID0+ICJ7JGtleS0+Q2xhc3NUaW1lU3RhbXB9IiwKCQkJCQkJCQknRGVsZXRlZEZsYWdGaWVsZCcgPT4gInska2V5LT5EZWxldGVkRmxhZ0ZpZWxkfSIsCgkJCQkJCQkJJ0RlbGV0ZWRGbGFnVmFsdWUnID0+ICJ7JGtleS0+RGVsZXRlZEZsYWdWYWx1ZX0iLAoJCQkJCQkJCSdIYXNLZXlJbmRleCcgPT4gInska2V5LT5IYXNLZXlJbmRleH0iCgkJCQkJCQkJKTsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgoJCS8vIHNlbmQgYmFjayBhcnJheQoJCXJldHVybiAkcmV0dXJuX2RhdGE7Cgl9CgoKCXB1YmxpYyBmdW5jdGlvbiBHZXRNZXRhZGF0YVR5cGVzKCRpZCA9IDApIHsKCQkkdGhpcy0+cmVzZXRfZXJyb3JfaW5mbygpOwoKCQlpZiAoZW1wdHkoJHRoaXMtPmNhcGFiaWxpdHlfdXJsWydHZXRNZXRhZGF0YSddKSkgewoJCQl0aHJvdyBuZXcgcGhwUmV0c19FeGNlcHRpb24oIkdldE1ldGFkYXRhVHlwZXMoKSBjYWxsZWQgYnV0IHVuYWJsZSB0byBmaW5kIEdldE1ldGFkYXRhIGxvY2F0aW9uLiAgRmFpbGVkIGxvZ2luP1xuIik7CgkJfQoKCQkvLyByZXF1ZXN0IGJhc2ljIG1ldGFkYXRhIGluZm9ybWF0aW9uCgkJJHJlc3VsdCA9ICR0aGlzLT5SRVRTUmVxdWVzdCgkdGhpcy0+Y2FwYWJpbGl0eV91cmxbJ0dldE1ldGFkYXRhJ10sCgkJCQkJCWFycmF5KAoJCQkJCQkJCSdUeXBlJyA9PiAnTUVUQURBVEEtQ0xBU1MnLAoJCQkJCQkJCSdJRCcgPT4gJGlkLAoJCQkJCQkJCSdGb3JtYXQnID0+ICdTVEFOREFSRC1YTUwnCgkJCQkJCQkJKQoJCQkJCQkpOwoKCQlpZiAoISRyZXN1bHQpIHsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQlsaXN0KCRoZWFkZXJzLCAkYm9keSkgPSAkcmVzdWx0OwoJCSR4bWwgPSAkdGhpcy0+UGFyc2VYTUxSZXNwb25zZSgkYm9keSk7CgkJaWYgKCEkeG1sKSB7CgkJCXJldHVybiBmYWxzZTsKCQl9CgoJCS8vIGxvZyByZXBseWNvZGUgYW5kIHJlcGx5dGV4dCBmb3IgcmVmZXJlbmNlIGxhdGVyCgkJJHRoaXMtPmxhc3RfcmVxdWVzdFsnUmVwbHlDb2RlJ10gPSAieyR4bWxbJ1JlcGx5Q29kZSddfSI7CgkJJHRoaXMtPmxhc3RfcmVxdWVzdFsnUmVwbHlUZXh0J10gPSAieyR4bWxbJ1JlcGx5VGV4dCddfSI7CgoJCWlmICgkeG1sWydSZXBseUNvZGUnXSAhPSAwKSB7CgkJCSR0aGlzLT5zZXRfZXJyb3JfaW5mbygicmV0cyIsICJ7JHhtbFsnUmVwbHlDb2RlJ119IiwgInskeG1sWydSZXBseVRleHQnXX0iKTsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCgkJJHJldHVybl9kYXRhID0gYXJyYXkoKTsKCgkJLy8gcGFyc2UgWE1MIGludG8gYSBuaWNlIGFycmF5CgkJaWYgKCR4bWwtPk1FVEFEQVRBKSB7CgkJCWZvcmVhY2ggKCR4bWwtPk1FVEFEQVRBLT57J01FVEFEQVRBLUNMQVNTJ30gYXMgJGtleSA9PiAkdmFsdWUpIHsKCQkJCSRyZXNvdXJjZSA9ICR2YWx1ZVsnUmVzb3VyY2UnXTsKCQkJCSR0aGlzX3Jlc291cmNlID0gYXJyYXkoKTsKCQkJCWZvcmVhY2ggKCR2YWx1ZS0+Q2xhc3MgYXMgJGtleSkgewoJCQkJCWlmICghZW1wdHkoJGtleS0+Q2xhc3NOYW1lKSkgewoJCQkJCQkkdGhpc19yZXNvdXJjZVtdID0gYXJyYXkoCgkJCQkJCQkJJ0NsYXNzTmFtZScgPT4gInska2V5LT5DbGFzc05hbWV9IiwKCQkJCQkJCQknVmlzaWJsZU5hbWUnID0+ICJ7JGtleS0+VmlzaWJsZU5hbWV9IiwKCQkJCQkJCQknU3RhbmRhcmROYW1lJyA9PiAieyRrZXktPlN0YW5kYXJkTmFtZX0iLAoJCQkJCQkJCSdEZXNjcmlwdGlvbicgPT4gInska2V5LT5EZXNjcmlwdGlvbn0iLAoJCQkJCQkJCSdUYWJsZVZlcnNpb24nID0+ICJ7JGtleS0+VGFibGVWZXJzaW9ufSIsCgkJCQkJCQkJJ1RhYmxlRGF0ZScgPT4gInska2V5LT5UYWJsZURhdGV9IiwKCQkJCQkJCQknVXBkYXRlVmVyc2lvbicgPT4gInska2V5LT5VcGRhdGVWZXJzaW9ufSIsCgkJCQkJCQkJJ1VwZGF0ZURhdGUnID0+ICJ7JGtleS0+VXBkYXRlRGF0ZX0iCgkJCQkJCQkJKTsKCQkJCQl9CgkJCQl9CgoJCQkJLy8gcHJlcGFyZSAyLWRlZXAgYXJyYXkKCQkJCSRyZXR1cm5fZGF0YVtdID0gYXJyYXkoJ1Jlc291cmNlJyA9PiAieyRyZXNvdXJjZX0iLCAnRGF0YScgPT4gJHRoaXNfcmVzb3VyY2UpOwoJCQl9CgkJfQoKCQkvLyBzZW5kIGJhY2sgYXJyYXkKCQlyZXR1cm4gJHJldHVybl9kYXRhOwoJfQoKCglwdWJsaWMgZnVuY3Rpb24gR2V0U2VydmVyU29mdHdhcmUoKSB7CgkJcmV0dXJuICR0aGlzLT5zZXJ2ZXJfc29mdHdhcmU7Cgl9CgoKCXB1YmxpYyBmdW5jdGlvbiBHZXRTZXJ2ZXJWZXJzaW9uKCkgewoJCXJldHVybiAkdGhpcy0+c2VydmVyX3ZlcnNpb247Cgl9CgoKCXB1YmxpYyBmdW5jdGlvbiBDaGVja0F1dGhTdXBwb3J0KCR0eXBlID0gIiIpIHsKCQlpZiAoJHR5cGUgPT0gImJhc2ljIikgewoJCQlyZXR1cm4gJHRoaXMtPmF1dGhfc3VwcG9ydF9iYXNpYzsKCQl9CgkJaWYgKCR0eXBlID09ICJkaWdlc3QiKSB7CgkJCXJldHVybiAkdGhpcy0+YXV0aF9zdXBwb3J0X2RpZ2VzdDsKCQl9CgkJJHRoaXMtPnNldF9lcnJvcl9pbmZvKCJwaHJldHMiLCAtMSwgIlVua25vd24gYXV0aCB0eXBlIHJlcXVlc3RlZC4iKTsKCQlyZXR1cm4gZmFsc2U7Cgl9CgoKCXB1YmxpYyBmdW5jdGlvbiBHZXRBbGxUcmFuc2FjdGlvbnMoKSB7CgkJLy8gcmVhZCB0aHJvdWdoIGNhcGFiaWxpdHlfdXJscyByZWFkIGR1cmluZyB0aGUgTG9naW4gYW5kIHJldHVybgoJCSR0cmFuc2FjdGlvbnMgPSBhcnJheSgpOwoJCWlmIChpc19hcnJheSgkdGhpcy0+Y2FwYWJpbGl0eV91cmwpKSB7CgkJCWZvcmVhY2ggKCR0aGlzLT5jYXBhYmlsaXR5X3VybCBhcyAka2V5ID0+ICR2YWx1ZSkgewoJCQkJJHRyYW5zYWN0aW9uc1tdID0gJGtleTsKCQkJfQoJCX0KCQlyZXR1cm4gJHRyYW5zYWN0aW9uczsKCX0KCgoJcHVibGljIGZ1bmN0aW9uIExhc3RSZXF1ZXN0VVJMKCkgewoJCXJldHVybiAkdGhpcy0+bGFzdF9yZXF1ZXN0X3VybDsKCX0KCgoJcHVibGljIGZ1bmN0aW9uIEdldExvZ2luVVJMKCkgewoJCS8vIHNlZSBpZiB0aGUgc2F2ZWQgTG9naW4gVVJMIGhhcyBhIGhvc3RuYW1lIGluY2x1ZGVkLgoJCS8vIGlmIG5vdCwgbWFrZSBpdCBiYXNlZCBvbiB0aGUgVVJMIGdpdmVuIGluIHRoZSBDb25uZWN0KCkgY2FsbAoJCSRwYXJzZV9yZXN1bHRzID0gcGFyc2VfdXJsKCR0aGlzLT5jYXBhYmlsaXR5X3VybFsnTG9naW4nXSwgUEhQX1VSTF9IT1NUKTsKCQlpZiAoZW1wdHkoJHBhcnNlX3Jlc3VsdHMpKSB7CgkJCS8vIGxvZ2luIHRyYW5zYWN0aW9uIGdhdmUgYSByZWxhdGl2ZSBwYXRoIGZvciB0aGlzIGFjdGlvbgoJCQkkcmVxdWVzdF91cmwgPSAkdGhpcy0+c2VydmVyX3Byb3RvY29sLic6Ly8nLiR0aGlzLT5zZXJ2ZXJfaG9zdG5hbWUuJzonLiR0aGlzLT5zZXJ2ZXJfcG9ydC4nJy4kdGhpcy0+Y2FwYWJpbGl0eV91cmxbJ0xvZ2luJ107CgkJfQoJCWVsc2UgewoJCQkvLyBsb2dpbiB0cmFuc2FjdGlvbiBnYXZlIGFuIGFic29sdXRlIHBhdGggZm9yIHRoaXMgYWN0aW9uCgkJCSRyZXF1ZXN0X3VybCA9ICR0aGlzLT5jYXBhYmlsaXR5X3VybFsnTG9naW4nXTsKCQl9CgkJaWYgKGVtcHR5KCRyZXF1ZXN0X3VybCkpIHsKCQkJJHRoaXMtPnNldF9lcnJvcl9pbmZvKCJwaHJldHMiLCAtMSwgIlVuYWJsZSB0byBmaW5kIGEgbG9naW4gVVJMLiAgRGlkIGluaXRpYWwgbG9naW4gZmFpbD8iKTsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQlyZXR1cm4gJHJlcXVlc3RfdXJsOwoJfQoKCglwdWJsaWMgZnVuY3Rpb24gR2V0U2VydmVySW5mb3JtYXRpb24oKSB7CgkJJHRoaXMtPnJlc2V0X2Vycm9yX2luZm8oKTsKCgkJaWYgKGVtcHR5KCR0aGlzLT5jYXBhYmlsaXR5X3VybFsnR2V0TWV0YWRhdGEnXSkpIHsKCQkJdGhyb3cgbmV3IHBocFJldHNfRXhjZXB0aW9uKCJHZXRTZXJ2ZXJJbmZvcm1hdGlvbigpIGNhbGxlZCBidXQgdW5hYmxlIHRvIGZpbmQgR2V0TWV0YWRhdGEgbG9jYXRpb24uICBGYWlsZWQgbG9naW4/XG4iKTsKCQl9CgoJCS8vIHJlcXVlc3Qgc2VydmVyIGluZm9ybWF0aW9uCgkJJHJlc3VsdCA9ICR0aGlzLT5SRVRTUmVxdWVzdCgkdGhpcy0+Y2FwYWJpbGl0eV91cmxbJ0dldE1ldGFkYXRhJ10sCgkJCQkJCWFycmF5KAoJCQkJCQkJCSdUeXBlJyA9PiAnTUVUQURBVEEtU1lTVEVNJywKCQkJCQkJCQknSUQnID0+IDAsCgkJCQkJCQkJJ0Zvcm1hdCcgPT4gJ1NUQU5EQVJELVhNTCcKCQkJCQkJCQkpCgkJCQkJCSk7CgoJCWlmICghJHJlc3VsdCkgewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCWxpc3QoJGhlYWRlcnMsICRib2R5KSA9ICRyZXN1bHQ7CgoJCSR4bWwgPSAkdGhpcy0+UGFyc2VYTUxSZXNwb25zZSgkYm9keSk7CgkJaWYgKCEkeG1sKSB7CgkJCXJldHVybiBmYWxzZTsKCQl9CgoJCWlmICgkeG1sWydSZXBseUNvZGUnXSAhPSAwKSB7CgkJCSR0aGlzLT5zZXRfZXJyb3JfaW5mbygicmV0cyIsICJ7JHhtbFsnUmVwbHlDb2RlJ119IiwgInskeG1sWydSZXBseVRleHQnXX0iKTsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCgkJJHN5c3RlbV9pZCA9ICIiOwoJCSRzeXN0ZW1fZGVzY3JpcHRpb24gPSAiIjsKCQkkc3lzdGVtX2NvbW1lbnRzID0gIiI7CgkJJHN5c3RlbV92ZXJzaW9uID0gIiI7CiAgICAgICAgJHRpbWV6b25lX29mZnNldCA9ICIiOwoKCQlpZiAoJHRoaXMtPmlzX3NlcnZlcl92ZXJzaW9uKCIxXzVfb3JfYmVsb3ciKSkgewoJCQlpZiAoaXNzZXQoJHhtbC0+TUVUQURBVEEtPnsnTUVUQURBVEEtU1lTVEVNJ30tPlN5c3RlbS0+U3lzdGVtSUQpKSB7CgkJCQkkc3lzdGVtX2lkID0gInskeG1sLT5NRVRBREFUQS0+eydNRVRBREFUQS1TWVNURU0nfS0+U3lzdGVtLT5TeXN0ZW1JRH0iOwoJCQl9CgkJCWlmIChpc3NldCgkeG1sLT5NRVRBREFUQS0+eydNRVRBREFUQS1TWVNURU0nfS0+U3lzdGVtLT5TeXN0ZW1EZXNjcmlwdGlvbikpIHsKCQkJCSRzeXN0ZW1fZGVzY3JpcHRpb24gPSAieyR4bWwtPk1FVEFEQVRBLT57J01FVEFEQVRBLVNZU1RFTSd9LT5TeXN0ZW0tPlN5c3RlbURlc2NyaXB0aW9ufSI7CgkJCX0KCQl9CgkJZWxzZSB7CgkJCWlmIChpc3NldCgkeG1sLT5NRVRBREFUQS0+eydNRVRBREFUQS1TWVNURU0nfS0+U1lTVEVNLT5hdHRyaWJ1dGVzKCktPlN5c3RlbUlEKSkgewoJCQkJJHN5c3RlbV9pZCA9ICJ7JHhtbC0+TUVUQURBVEEtPnsnTUVUQURBVEEtU1lTVEVNJ30tPlNZU1RFTS0+YXR0cmlidXRlcygpLT5TeXN0ZW1JRH0iOwoJCQl9CgkJCWlmIChpc3NldCgkeG1sLT5NRVRBREFUQS0+eydNRVRBREFUQS1TWVNURU0nfS0+U1lTVEVNLT5hdHRyaWJ1dGVzKCktPlN5c3RlbURlc2NyaXB0aW9uKSkgewoJCQkJJHN5c3RlbV9kZXNjcmlwdGlvbiA9ICJ7JHhtbC0+TUVUQURBVEEtPnsnTUVUQURBVEEtU1lTVEVNJ30tPlNZU1RFTS0+YXR0cmlidXRlcygpLT5TeXN0ZW1EZXNjcmlwdGlvbn0iOwoJCQl9CgkJCWlmIChpc3NldCgkeG1sLT5NRVRBREFUQS0+eydNRVRBREFUQS1TWVNURU0nfS0+U1lTVEVNLT5hdHRyaWJ1dGVzKCktPlRpbWVab25lT2Zmc2V0KSkgewoJCQkJJHRpbWV6b25lX29mZnNldCA9ICJ7JHhtbC0+TUVUQURBVEEtPnsnTUVUQURBVEEtU1lTVEVNJ30tPlNZU1RFTS0+YXR0cmlidXRlcygpLT5UaW1lWm9uZU9mZnNldH0iOwoJCQl9CgkJfQoKCQlpZiAoaXNzZXQoJHhtbC0+TUVUQURBVEEtPnsnTUVUQURBVEEtU1lTVEVNJ30tPlNZU1RFTS0+Q29tbWVudHMpKSB7CgkJCSRzeXN0ZW1fY29tbWVudHMgPSAieyR4bWwtPk1FVEFEQVRBLT57J01FVEFEQVRBLVNZU1RFTSd9LT5TWVNURU0tPkNvbW1lbnRzfSI7CgkJfQoJCWlmIChpc3NldCgkeG1sLT5NRVRBREFUQS0+eydNRVRBREFUQS1TWVNURU0nfS0+YXR0cmlidXRlcygpLT5WZXJzaW9uKSkgewoJCQkkc3lzdGVtX3ZlcnNpb24gPSAoc3RyaW5nKSAkeG1sLT5NRVRBREFUQS0+eydNRVRBREFUQS1TWVNURU0nfS0+YXR0cmlidXRlcygpLT5WZXJzaW9uOwoJCX0KCgkJcmV0dXJuIGFycmF5KAoJCQkJJ1N5c3RlbUlEJyA9PiAkc3lzdGVtX2lkLAoJCQkJJ1N5c3RlbURlc2NyaXB0aW9uJyA9PiAkc3lzdGVtX2Rlc2NyaXB0aW9uLAoJCQkJJ1RpbWVab25lT2Zmc2V0JyA9PiAkdGltZXpvbmVfb2Zmc2V0LAoJCQkJJ0NvbW1lbnRzJyA9PiAkc3lzdGVtX2NvbW1lbnRzLAoJCQkJJ1ZlcnNpb24nID0+ICRzeXN0ZW1fdmVyc2lvbgoJCQkJKTsKCX0KCgoJcHVibGljIGZ1bmN0aW9uIERpc2Nvbm5lY3QoKSB7CgkJJHRoaXMtPnJlc2V0X2Vycm9yX2luZm8oKTsKCgkJaWYgKGVtcHR5KCR0aGlzLT5jYXBhYmlsaXR5X3VybFsnTG9nb3V0J10pKSB7CgkJCXRocm93IG5ldyBwaHBSZXRzX0V4Y2VwdGlvbigiRGlzY29ubmVjdCgpIGNhbGxlZCBidXQgdW5hYmxlIHRvIGZpbmQgTG9nb3V0IGxvY2F0aW9uLiAgRmFpbGVkIGxvZ2luP1xuIik7CgkJfQoKCQkvLyBtYWtlIHJlcXVlc3QKCQkkcmVzdWx0ID0gJHRoaXMtPlJFVFNSZXF1ZXN0KCR0aGlzLT5jYXBhYmlsaXR5X3VybFsnTG9nb3V0J10pOwoJCWlmICghJHJlc3VsdCkgewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCWxpc3QoJGhlYWRlcnMsJGJvZHkpID0gJHJlc3VsdDsKCgkJLy8gY2xvc2UgY1VSTCBjb25uZWN0aW9uCgkJY3VybF9jbG9zZSgkdGhpcy0+Y2gpOwoKCQlpZiAoJHRoaXMtPmRlYnVnX21vZGUgPT0gdHJ1ZSkgewoJCQkvLyBjbG9zZSBjVVJMIGRlYnVnIGxvZyBmaWxlIGhhbmRsZXIKCQkJZmNsb3NlKCR0aGlzLT5kZWJ1Z19sb2cpOwoJCX0KCgkJaWYgKGZpbGVfZXhpc3RzKCR0aGlzLT5jb29raWVfZmlsZSkpIHsKCQkJQHVubGluaygkdGhpcy0+Y29va2llX2ZpbGUpOwoJCX0KCgkJcmV0dXJuIHRydWU7CgoJfQoKCglwdWJsaWMgZnVuY3Rpb24gQ29ubmVjdCgkbG9naW5fdXJsLCAkdXNlcm5hbWUsICRwYXNzd29yZCwgJHVhX3B3ZCA9ICIiKSB7CgkJJHRoaXMtPnJlc2V0X2Vycm9yX2luZm8oKTsKCgkJaWYgKGVtcHR5KCRsb2dpbl91cmwpKSB7CgkJCXRocm93IG5ldyBwaHBSZXRzX0V4Y2VwdGlvbigiUEhSRVRTOiBMb2dpbiBVUkwgbWlzc2luZyBmcm9tIENvbm5lY3QoKSIpOwoJCX0KCQlpZiAoZW1wdHkoJHVzZXJuYW1lKSkgewoJCQl0aHJvdyBuZXcgcGhwUmV0c19FeGNlcHRpb24oIlBIUkVUUzogVXNlcm5hbWUgbWlzc2luZyBmcm9tIENvbm5lY3QoKSIpOwoJCX0KCQlpZiAoZW1wdHkoJHBhc3N3b3JkKSkgewoJCQl0aHJvdyBuZXcgcGhwUmV0c19FeGNlcHRpb24oIlBIUkVUUzogUGFzc3dvcmQgbWlzc2luZyBmcm9tIENvbm5lY3QoKSIpOwoJCX0KCQlpZiAoZW1wdHkoJHRoaXMtPnN0YXRpY19oZWFkZXJzWydSRVRTLVZlcnNpb24nXSkpIHsKCQkJJHRoaXMtPkFkZEhlYWRlcigiUkVUUy1WZXJzaW9uIiwgIlJFVFMvMS41Iik7CgkJfQoJCWlmIChlbXB0eSgkdGhpcy0+c3RhdGljX2hlYWRlcnNbJ1VzZXItQWdlbnQnXSkpIHsKCQkJJHRoaXMtPkFkZEhlYWRlcigiVXNlci1BZ2VudCIsICJQSFJFVFMvMS4wIik7CgkJfQoJCWlmIChlbXB0eSgkdGhpcy0+c3RhdGljX2hlYWRlcnNbJ0FjY2VwdCddKSAmJiAkdGhpcy0+c3RhdGljX2hlYWRlcnNbJ1JFVFMtVmVyc2lvbiddID09ICJSRVRTLzEuNSIpIHsKCQkJJHRoaXMtPkFkZEhlYWRlcigiQWNjZXB0IiwgIiovKiIpOwoJCX0KCgkJLy8gY2hvcCB1cCBMb2dpbiBVUkwgdG8gdXNlIGZvciBsYXRlciByZXF1ZXN0cwoJCSR1cmxfcGFydHMgPSBwYXJzZV91cmwoJGxvZ2luX3VybCk7CgkJJHRoaXMtPnNlcnZlcl9ob3N0bmFtZSA9ICR1cmxfcGFydHNbJ2hvc3QnXTsKCQkkdGhpcy0+c2VydmVyX3BvcnQgPSAoZW1wdHkoJHVybF9wYXJ0c1sncG9ydCddKSkgPyA4MCA6ICR1cmxfcGFydHNbJ3BvcnQnXTsKCQkkdGhpcy0+c2VydmVyX3Byb3RvY29sID0gJHVybF9wYXJ0c1snc2NoZW1lJ107CgoJCSR0aGlzLT5jYXBhYmlsaXR5X3VybFsnTG9naW4nXSA9ICR1cmxfcGFydHNbJ3BhdGgnXTsKCgkJaWYgKGlzc2V0KCR1cmxfcGFydHNbJ3F1ZXJ5J10pICYmICFlbXB0eSgkdXJsX3BhcnRzWydxdWVyeSddKSkgewoJCQkkdGhpcy0+Y2FwYWJpbGl0eV91cmxbJ0xvZ2luJ10gLj0gIj97JHVybF9wYXJ0c1sncXVlcnknXX0iOwoJCX0KCgkJJHRoaXMtPnVzZXJuYW1lID0gJHVzZXJuYW1lOwoJCSR0aGlzLT5wYXNzd29yZCA9ICRwYXNzd29yZDsKCgkJaWYgKCFlbXB0eSgkdWFfcHdkKSkgewoJCQkvLyBmb3JjZSB1c2Ugb2YgUkVUUyAxLjcgVXNlci1BZ2VudCBBdXRoZW50aWNhdGlvbgoJCQkkdGhpcy0+dWFfYXV0aCA9IHRydWU7CgkJCSR0aGlzLT51YV9wd2QgPSAkdWFfcHdkOwoJCX0KCgkJaWYgKGVtcHR5KCR0aGlzLT5jb29raWVfZmlsZSkpIHsKCQkJJHRoaXMtPmNvb2tpZV9maWxlID0gdGVtcG5hbSgiIiwgInBocmV0cyIpOwoJCX0KCgkJQHRvdWNoKCR0aGlzLT5jb29raWVfZmlsZSk7CgoJCWlmICghaXNfd3JpdGFibGUoJHRoaXMtPmNvb2tpZV9maWxlKSkgewoJCSAgdGhyb3cgbmV3IHBocFJFVFNfRXhjZXB0aW9uKCJDb29raWUgZmlsZSBcInskdGhpcy0+Y29va2llX2ZpbGV9XCIgY2Fubm90IGJlIHdyaXR0ZW4gdG8uICBNdXN0IGJlIGFuIGFic29sdXRlIHBhdGggYW5kIG11c3QgYmUgd3JpdGFibGUiKTsKCQl9CgoJCS8vIHN0YXJ0IGNVUkwgbWFnaWMKCQkkdGhpcy0+Y2ggPSBjdXJsX2luaXQoKTsKCQljdXJsX3NldG9wdCgkdGhpcy0+Y2gsIENVUkxPUFRfSEVBREVSRlVOQ1RJT04sIGFycmF5KCYkdGhpcywgJ3JlYWRfY3VzdG9tX2N1cmxfaGVhZGVycycpKTsKCQlpZiAoJHRoaXMtPmRlYnVnX21vZGUgPT0gdHJ1ZSkgewoJCQkvLyBvcGVuIGZpbGUgaGFuZGxlciB0byBiZSB1c2VkIGJ5IGNVUkwgZGVidWcgbG9nCgkJCSR0aGlzLT5kZWJ1Z19sb2cgPSBAZm9wZW4oJHRoaXMtPmRlYnVnX2ZpbGUsICdhJyk7CgoJCQlpZiAoJHRoaXMtPmRlYnVnX2xvZykgewoJCQkJY3VybF9zZXRvcHQoJHRoaXMtPmNoLCBDVVJMT1BUX1ZFUkJPU0UsIDEpOwoJCQkJY3VybF9zZXRvcHQoJHRoaXMtPmNoLCBDVVJMT1BUX1NUREVSUiwgJHRoaXMtPmRlYnVnX2xvZyk7CgkJCX0KCQkJZWxzZSB7CgkJCQllY2hvICJVbmFibGUgdG8gc2F2ZSBkZWJ1ZyBsb2cgdG8geyR0aGlzLT5kZWJ1Z19maWxlfVxuIjsKCQkJfQoJCX0KCQljdXJsX3NldG9wdCgkdGhpcy0+Y2gsIENVUkxPUFRfSEVBREVSLCBmYWxzZSk7CgkJaWYgKCR0aGlzLT5mb3JjZV9iYXNpY19hdXRoZW50aWNhdGlvbiA9PSB0cnVlKSB7CgkJCWN1cmxfc2V0b3B0KCR0aGlzLT5jaCwgQ1VSTE9QVF9IVFRQQVVUSCwgQ1VSTEFVVEhfQkFTSUMpOwoJCX0KCQllbHNlIHsKCQkJY3VybF9zZXRvcHQoJHRoaXMtPmNoLCBDVVJMT1BUX0hUVFBBVVRILCBDVVJMQVVUSF9ESUdFU1R8Q1VSTEFVVEhfQkFTSUMpOwoJCX0KCQlpZiAoJHRoaXMtPmRpc2FibGVfZm9sbG93X2xvY2F0aW9uICE9IHRydWUpIHsKCQkJY3VybF9zZXRvcHQoJHRoaXMtPmNoLCBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OLCAxKTsKCQl9CgkJY3VybF9zZXRvcHQoJHRoaXMtPmNoLCBDVVJMT1BUX1VTRVJQV0QsICR0aGlzLT51c2VybmFtZS4iOiIuJHRoaXMtPnBhc3N3b3JkKTsKCQljdXJsX3NldG9wdCgkdGhpcy0+Y2gsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIHRydWUpOwoJCWN1cmxfc2V0b3B0KCR0aGlzLT5jaCwgQ1VSTE9QVF9DT09LSUVGSUxFLCAkdGhpcy0+Y29va2llX2ZpbGUpOwoJCWN1cmxfc2V0b3B0KCR0aGlzLT5jaCwgQ1VSTE9QVF9USU1FT1VULCAwKTsKCQljdXJsX3NldG9wdCgkdGhpcy0+Y2gsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIGZhbHNlKTsKCgkJLy8gbWFrZSByZXF1ZXN0IHRvIExvZ2luIHRyYW5zYWN0aW9uCgkJJHJlc3VsdCA9ICAkdGhpcy0+UkVUU1JlcXVlc3QoJHRoaXMtPmNhcGFiaWxpdHlfdXJsWydMb2dpbiddKTsKCQlpZiAoISRyZXN1bHQpIHsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCgkJbGlzdCgkaGVhZGVycywkYm9keSkgPSAkcmVzdWx0OwoKCQkvLyBwYXJzZSBib2R5IHJlc3BvbnNlCgkJJHhtbCA9ICR0aGlzLT5QYXJzZVhNTFJlc3BvbnNlKCRib2R5KTsKCQlpZiAoISR4bWwpIHsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCgkJLy8gbG9nIHJlcGx5Y29kZSBhbmQgcmVwbHl0ZXh0IGZvciByZWZlcmVuY2UgbGF0ZXIKCQkkdGhpcy0+bGFzdF9yZXF1ZXN0WydSZXBseUNvZGUnXSA9ICJ7JHhtbFsnUmVwbHlDb2RlJ119IjsKCQkkdGhpcy0+bGFzdF9yZXF1ZXN0WydSZXBseVRleHQnXSA9ICJ7JHhtbFsnUmVwbHlUZXh0J119IjsKCgkJLy8gY2hvcCB1cCBsb2dpbiByZXNwb25zZQoJCS8vIGlmIG11bHRpcGxlIHBhcnRzIG9mIHRoZSBsb2dpbiByZXNwb25zZSBhcmVuJ3QgZm91bmQgc3BsaXR0aW5nIG9uIFxyXG4sIHJlZG8gdXNpbmcganVzdCBcbgoJCSRsb2dpbl9yZXNwb25zZSA9IGFycmF5KCk7CgoJCWlmICgkdGhpcy0+c2VydmVyX3ZlcnNpb24gPT0gIlJFVFMvMS4wIikgewoJCQlpZiAoaXNzZXQoJHhtbCkpIHsKCQkJCSRsb2dpbl9yZXNwb25zZSA9IGV4cGxvZGUoIlxyXG4iLCAkeG1sKTsKCQkJCWlmIChlbXB0eSgkbG9naW5fcmVzcG9uc2VbM10pKSB7CgkJCQkJJGxvZ2luX3Jlc3BvbnNlID0gZXhwbG9kZSgiXG4iLCAkeG1sKTsKCQkJCX0KCQkJfQoJCX0KCQllbHNlIHsKCQkJaWYgKGlzc2V0KCR4bWwtPnsnUkVUUy1SRVNQT05TRSd9KSkgewoJCQkJJGxvZ2luX3Jlc3BvbnNlID0gZXhwbG9kZSgiXHJcbiIsICR4bWwtPnsnUkVUUy1SRVNQT05TRSd9KTsKCQkJCWlmIChlbXB0eSgkbG9naW5fcmVzcG9uc2VbM10pKSB7CgkJCQkJJGxvZ2luX3Jlc3BvbnNlID0gZXhwbG9kZSgiXG4iLCAkeG1sLT57J1JFVFMtUkVTUE9OU0UnfSk7CgkJCQl9CgkJCX0KCQl9CgoJCS8vIHBhcnNlIGxvZ2luIHJlc3BvbnNlLiAgZ3JhYiBhbGwgY2FwYWJpbGl0eSBVUkxzIGtub3duIGFuZCBvbmVzIHRoYXQgYmVnaW4gd2l0aCBYLQoJCS8vIG90aGVyd2lzZSwgaXQncyBhIHBpZWNlIG9mIHNlcnZlciBpbmZvcm1hdGlvbiB0byBzYXZlIGZvciByZWZlcmVuY2UKCQlmb3JlYWNoICgkbG9naW5fcmVzcG9uc2UgYXMgJGxpbmUpIHsKCQkJJG5hbWUgPSBudWxsOwoJCQkkdmFsdWUgPSBudWxsOwoKCQkJaWYgKHN0cnBvcygkbGluZSwgJz0nKSAhPT0gZmFsc2UpIHsKCQkJQGxpc3QoJG5hbWUsJHZhbHVlKSA9IGV4cGxvZGUoIj0iLCAkbGluZSwgMik7CgkJCX0KCgkJCSRuYW1lID0gdHJpbSgkbmFtZSk7CgkJCSR2YWx1ZSA9IHRyaW0oJHZhbHVlKTsKCQkJaWYgKCFlbXB0eSgkbmFtZSkgJiYgIWVtcHR5KCR2YWx1ZSkpIHsKCQkJCWlmIChpc3NldCgkdGhpcy0+YWxsb3dlZF9jYXBhYmlsaXRpZXNbJG5hbWVdKSB8fCBwcmVnX21hdGNoKCcvXlhcLS8nLCAkbmFtZSkgPT0gdHJ1ZSkgewoJCQkJCSR0aGlzLT5jYXBhYmlsaXR5X3VybFskbmFtZV0gPSAkdmFsdWU7CgkJCQl9CgkJCQllbHNlIHsKCQkJCQkkdGhpcy0+c2VydmVyX2luZm9ybWF0aW9uWyRuYW1lXSA9ICR2YWx1ZTsKCQkJCX0KCQkJfQoJCX0KCgkJLy8gaWYgJ0FjdGlvbicgY2FwYWJpbGl0eSBVUkwgaXMgcHJvdmlkZWQsIHdlIE1VU1QgcmVxdWVzdCBpdCBmb2xsb3dpbmcgdGhlIHN1Y2Nlc3NmdWwgTG9naW4KCQlpZiAoaXNzZXQoJHRoaXMtPmNhcGFiaWxpdHlfdXJsWydBY3Rpb24nXSkgJiYgIWVtcHR5KCR0aGlzLT5jYXBhYmlsaXR5X3VybFsnQWN0aW9uJ10pKSB7CgkJCSRyZXN1bHQgPSAkdGhpcy0+UkVUU1JlcXVlc3QoJHRoaXMtPmNhcGFiaWxpdHlfdXJsWydBY3Rpb24nXSk7CgkJCWlmICghJHJlc3VsdCkgewoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgkJCWxpc3QoJGhlYWRlcnMsJGJvZHkpID0gJHJlc3VsdDsKCQl9CgoJCWlmICgkdGhpcy0+Y29tcHJlc3Npb25fZW5hYmxlZCA9PSB0cnVlKSB7CgkJCWN1cmxfc2V0b3B0KCR0aGlzLT5jaCwgQ1VSTE9QVF9FTkNPRElORywgImd6aXAiKTsKCQl9CgoJCWlmICgkdGhpcy0+bGFzdF9yZXF1ZXN0WydSZXBseUNvZGUnXSA9PSAwKSB7CgkJCXJldHVybiB0cnVlOwoJCX0KCQllbHNlIHsKCQkJJHRoaXMtPnNldF9lcnJvcl9pbmZvKCJyZXRzIiwgJHRoaXMtPmxhc3RfcmVxdWVzdFsnUmVwbHlDb2RlJ10sICR0aGlzLT5sYXN0X3JlcXVlc3RbJ1JlcGx5VGV4dCddKTsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCgl9CgoKCXB1YmxpYyBmdW5jdGlvbiBMYXN0UmVxdWVzdCgpIHsKCQkvLyByZXR1cm4gcmVwbHljb2RlIGFuZCByZXBseXRleHQgZnJvbSBsYXN0IHJlcXVlc3QKCQlyZXR1cm4gJHRoaXMtPmxhc3RfcmVxdWVzdDsKCX0KCgoJcHVibGljIGZ1bmN0aW9uIEFkZEhlYWRlcigkbmFtZSwgJHZhbHVlKSB7CgkJLy8gYWRkIHN0YXRpYyBoZWFkZXIgZm9yIGNVUkwgcmVxdWVzdHMKCQkkdGhpcy0+c3RhdGljX2hlYWRlcnNbJG5hbWVdID0gJHZhbHVlOwoJCXJldHVybiB0cnVlOwoJfQoKCglwdWJsaWMgZnVuY3Rpb24gRGVsZXRlSGVhZGVyKCRuYW1lKSB7CgkJLy8gZGVsZXRlIHN0YXRpYyBoZWFkZXIgZnJvbSBjVVJMIHJlcXVlc3RzCgkJdW5zZXQoJHRoaXMtPnN0YXRpY19oZWFkZXJzWyRuYW1lXSk7CgkJcmV0dXJuIHRydWU7Cgl9CgoKCXB1YmxpYyBmdW5jdGlvbiBQYXJzZVhNTFJlc3BvbnNlKCRkYXRhID0gIiIpIHsKCQkkdGhpcy0+cmVzZXRfZXJyb3JfaW5mbygpOwoKCQlpZiAoIWVtcHR5KCRkYXRhKSkgewoJCQkvLyBwYXJzZSBYTUwgZnVuY3Rpb24uICBhYmlsaXR5IHRvIHJlcGxhY2UgU2ltcGxlWE1MIHdpdGggc29tZXRoaW5nIGxhdGVyIGZhaXJseSBlYXNpbHkKCQkJaWYgKGRlZmluZWQoJ0xJQlhNTF9QQVJTRUhVR0UnKSkgewoJCQkJJHhtbCA9IEBzaW1wbGV4bWxfbG9hZF9zdHJpbmcoJGRhdGEsICdTaW1wbGVYTUxFbGVtZW50JywgTElCWE1MX1BBUlNFSFVHRSk7CgkJCX0gZWxzZSB7CgkJCQkkeG1sID0gQHNpbXBsZXhtbF9sb2FkX3N0cmluZygkZGF0YSk7CgkJCX0KCQkJaWYgKCFpc19vYmplY3QoJHhtbCkpIHsKCQkJCSR0aGlzLT5zZXRfZXJyb3JfaW5mbygieG1sIiwgLTEsICJYTUwgcGFyc2luZyBlcnJvcjogeyRkYXRhfSIpOwoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgkJCXJldHVybiAkeG1sOwoJCX0KCQllbHNlIHsKCQkJJHRoaXMtPnNldF9lcnJvcl9pbmZvKCJ4bWwiLCAtMSwgIlhNTCBwYXJzaW5nIGVycm9yLiAgTm8gZGF0YSB0byBwYXJzZSIpOwoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJfQoKCglwdWJsaWMgZnVuY3Rpb24gUkVUU1JlcXVlc3QoJGFjdGlvbiwgJHBhcmFtZXRlcnMgPSAiIikgewoJCSR0aGlzLT5yZXNldF9lcnJvcl9pbmZvKCk7CgoJCSR0aGlzLT5sYXN0X3Jlc3BvbnNlX2hlYWRlcnMgPSBhcnJheSgpOwoJCSR0aGlzLT5sYXN0X3Jlc3BvbnNlX2hlYWRlcnNfcmF3ID0gIiI7CgkJJHRoaXMtPmxhc3RfcmVtZW1iZXJlZF9oZWFkZXIgPSAiIjsKCgkJLy8gZXhwb3NlZCByYXcgUkVUUyByZXF1ZXN0IGZ1bmN0aW9uLiAgdXNlZCBpbnRlcm5hbGx5IGFuZCBleHRlcm5hbGx5CgoJCWlmIChlbXB0eSgkYWN0aW9uKSkgewoJCQl0aHJvdyBuZXcgcGhwUmV0c19FeGNlcHRpb24oIlJFVFNSZXF1ZXN0IGNhbGxlZCBidXQgQWN0aW9uIHBhc3NlZCBoYXMgbm8gdmFsdWUuICBGYWlsZWQgbG9naW4/XG4iKTsKCQl9CgoJCSRwYXJzZV9yZXN1bHRzID0gcGFyc2VfdXJsKCRhY3Rpb24sIFBIUF9VUkxfSE9TVCk7CgkJaWYgKGVtcHR5KCRwYXJzZV9yZXN1bHRzKSkgewoJCQkvLyBsb2dpbiB0cmFuc2FjdGlvbiBnYXZlIGEgcmVsYXRpdmUgcGF0aCBmb3IgdGhpcyBhY3Rpb24KCQkJJHJlcXVlc3RfdXJsID0gJHRoaXMtPnNlcnZlcl9wcm90b2NvbC4nOi8vJy4kdGhpcy0+c2VydmVyX2hvc3RuYW1lLic6Jy4kdGhpcy0+c2VydmVyX3BvcnQuJycuJGFjdGlvbjsKCQl9CgkJZWxzZSB7CgkJCS8vIGxvZ2luIHRyYW5zYWN0aW9uIGdhdmUgYW4gYWJzb2x1dGUgcGF0aCBmb3IgdGhpcyBhY3Rpb24KCQkJJHJlcXVlc3RfdXJsID0gJGFjdGlvbjsKCQl9CgoJCS8vIGJ1aWxkIHF1ZXJ5IHN0cmluZyBmcm9tIGFyZ3VtZW50cwoJCSRyZXF1ZXN0X2FyZ3VtZW50cyA9ICIiOwoJCWlmIChpc19hcnJheSgkcGFyYW1ldGVycykpIHsKCQkJJHJlcXVlc3RfYXJndW1lbnRzID0gaHR0cF9idWlsZF9xdWVyeSgkcGFyYW1ldGVycywgJycsICcmJyk7CgkJfQoKCQkvLyBidWlsZCBlbnRpcmUgVVJMIGlmIG5lZWRlZAoJCWlmICghZW1wdHkoJHJlcXVlc3RfYXJndW1lbnRzKSkgewoJCQkkcmVxdWVzdF91cmwgPSAkcmVxdWVzdF91cmwgLic/Jy4gJHJlcXVlc3RfYXJndW1lbnRzOwoJCX0KCgkJLy8gYnVpbGQgaGVhZGVycyB0byBwYXNzIGluIGNVUkwKCQkkcmVxdWVzdF9oZWFkZXJzID0gIiI7CgkJaWYgKGlzX2FycmF5KCR0aGlzLT5zdGF0aWNfaGVhZGVycykpIHsKCQkJZm9yZWFjaCAoJHRoaXMtPnN0YXRpY19oZWFkZXJzIGFzICRrZXkgPT4gJHZhbHVlKSB7CgkJCQkkcmVxdWVzdF9oZWFkZXJzIC49ICJ7JGtleX06IHskdmFsdWV9XHJcbiI7CgkJCX0KCQl9CgoJCWlmICgkdGhpcy0+dWFfYXV0aCA9PSB0cnVlKSB7CgkJCSRzZXNzaW9uX2lkX3RvX2NhbGN1bGF0ZV93aXRoID0gIiI7CgoJCQkvLyBjYWxjdWxhdGUgUkVUUy1VQS1BdXRob3JpemF0aW9uIGhlYWRlcgoJCQkkdWFfYTEgPSBtZDUoJHRoaXMtPnN0YXRpY19oZWFkZXJzWydVc2VyLUFnZW50J10gLic6Jy4gJHRoaXMtPnVhX3B3ZCk7CgkJCSRzZXNzaW9uX2lkX3RvX2NhbGN1bGF0ZV93aXRoID0gKCR0aGlzLT51c2VfaW50ZXJlYWx0eV91YV9hdXRoID09IHRydWUpID8gIiIgOiAkdGhpcy0+c2Vzc2lvbl9pZDsKCQkJJHVhX2RpZ19yZXNwID0gbWQ1KHRyaW0oJHVhX2ExKSAuJzonLiB0cmltKCR0aGlzLT5yZXF1ZXN0X2lkKSAuJzonLiB0cmltKCRzZXNzaW9uX2lkX3RvX2NhbGN1bGF0ZV93aXRoKSAuJzonLiB0cmltKCR0aGlzLT5zdGF0aWNfaGVhZGVyc1snUkVUUy1WZXJzaW9uJ10pKTsKCQkJJHJlcXVlc3RfaGVhZGVycyAuPSAiUkVUUy1VQS1BdXRob3JpemF0aW9uOiBEaWdlc3QgeyR1YV9kaWdfcmVzcH1cclxuIjsKCQl9CgoJCSR0aGlzLT5sYXN0X3JlcXVlc3RfdXJsID0gJHJlcXVlc3RfdXJsOwoJCWN1cmxfc2V0b3B0KCR0aGlzLT5jaCwgQ1VSTE9QVF9VUkwsICRyZXF1ZXN0X3VybCk7CgoJCWN1cmxfc2V0b3B0KCR0aGlzLT5jaCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBhcnJheSh0cmltKCRyZXF1ZXN0X2hlYWRlcnMpKSk7CgkJLy8gZG8gaXQKCQkkcmVzcG9uc2VfYm9keSA9IGN1cmxfZXhlYygkdGhpcy0+Y2gpOwoJCSRyZXNwb25zZV9jb2RlID0gY3VybF9nZXRpbmZvKCR0aGlzLT5jaCwgQ1VSTElORk9fSFRUUF9DT0RFKTsKCgkJaWYgKCR0aGlzLT5kZWJ1Z19tb2RlID09IHRydWUpIHsKCQkJZndyaXRlKCR0aGlzLT5kZWJ1Z19sb2csICRyZXNwb25zZV9ib2R5IC4iXG4iKTsKCQl9CgoJCWlmICgkdGhpcy0+Y2F0Y2hfbGFzdF9yZXNwb25zZSA9PSB0cnVlKSB7CgkJCSR0aGlzLT5sYXN0X3NlcnZlcl9yZXNwb25zZSA9ICR0aGlzLT5sYXN0X3Jlc3BvbnNlX2hlYWRlcnNfcmF3IC4gJHJlc3BvbnNlX2JvZHk7CgkJfQoKCQlpZiAoaXNzZXQoJHRoaXMtPmxhc3RfcmVzcG9uc2VfaGVhZGVyc1snV1dXLUF1dGhlbnRpY2F0ZSddKSkgewoJCQlpZiAoc3RycG9zKCR0aGlzLT5sYXN0X3Jlc3BvbnNlX2hlYWRlcnNbJ1dXVy1BdXRoZW50aWNhdGUnXSwgJ0Jhc2ljJykgIT09IGZhbHNlKSB7CgkJCQkkdGhpcy0+YXV0aF9zdXBwb3J0X2Jhc2ljID0gdHJ1ZTsKCQkJfQoJCQlpZiAoc3RycG9zKCR0aGlzLT5sYXN0X3Jlc3BvbnNlX2hlYWRlcnNbJ1dXVy1BdXRoZW50aWNhdGUnXSwgJ0RpZ2VzdCcpICE9PSBmYWxzZSkgewoJCQkJJHRoaXMtPmF1dGhfc3VwcG9ydF9kaWdlc3QgPSB0cnVlOwoJCQl9CgkJfQoKCQlpZiAoaXNzZXQoJHRoaXMtPmxhc3RfcmVzcG9uc2VfaGVhZGVyc1snUkVUUy1WZXJzaW9uJ10pKSB7CgkJCSR0aGlzLT5zZXJ2ZXJfdmVyc2lvbiA9ICR0aGlzLT5sYXN0X3Jlc3BvbnNlX2hlYWRlcnNbJ1JFVFMtVmVyc2lvbiddOwoJCX0KCgkJaWYgKGlzc2V0KCR0aGlzLT5sYXN0X3Jlc3BvbnNlX2hlYWRlcnNbJ1NlcnZlciddKSkgewoJCQkkdGhpcy0+c2VydmVyX3NvZnR3YXJlID0gJHRoaXMtPmxhc3RfcmVzcG9uc2VfaGVhZGVyc1snU2VydmVyJ107CgkJfQoKCQlpZiAoaXNzZXQoJHRoaXMtPmxhc3RfcmVzcG9uc2VfaGVhZGVyc1snU2V0LUNvb2tpZSddKSkgewoJCQlpZiAocHJlZ19tYXRjaCgnL1JFVFMtU2Vzc2lvbi1JRFw9KC4qPykoXDt8XHMrfCQpLycsICR0aGlzLT5sYXN0X3Jlc3BvbnNlX2hlYWRlcnNbJ1NldC1Db29raWUnXSwgJG1hdGNoZXMpKSB7CgkJCQkkdGhpcy0+c2Vzc2lvbl9pZCA9ICRtYXRjaGVzWzFdOwoJCQl9CgkJfQoKCQlpZiAoJHJlc3BvbnNlX2NvZGUgIT0gMjAwKSB7CgkJICBpZiggJHJlc3BvbnNlX2NvZGUgPT0gNDAxICkgdGhyb3cgbmV3IHBocFJFVFNfRXhjZXB0aW9uKCdQSFJFVFM6IFVuYXV0aG9yaXplZCAoNDAxKScpOwoJCSAgJHRoaXMtPnNldF9lcnJvcl9pbmZvKCJodHRwIiwgJHJlc3BvbnNlX2NvZGUsICRyZXNwb25zZV9ib2R5KTsKCQkgIHJldHVybiBmYWxzZTsKCQl9CgoJCS8vIHJldHVybiByYXcgaGVhZGVycyBhbmQgYm9keQoJCXJldHVybiBhcnJheSgkdGhpcy0+bGFzdF9yZXNwb25zZV9oZWFkZXJzX3JhdywgJHJlc3BvbnNlX2JvZHkpOwoJfQoKCglwcml2YXRlIGZ1bmN0aW9uIHJlYWRfY3VzdG9tX2N1cmxfaGVhZGVycygkaGFuZGxlLCAkY2FsbF9zdHJpbmcpIHsKCQkkdGhpcy0+bGFzdF9yZXNwb25zZV9oZWFkZXJzX3JhdyAuPSAkY2FsbF9zdHJpbmc7CgkJJGhlYWRlciA9IG51bGw7CgkJJHZhbHVlID0gbnVsbDsKCgkJJHRyaW1tZWRfY2FsbF9zdHJpbmcgPSB0cmltKCRjYWxsX3N0cmluZyk7CgoJCWlmIChzdHJwb3MoJGNhbGxfc3RyaW5nLCAnOicpICE9PSBmYWxzZSkgewoJCQlAbGlzdCgkaGVhZGVyLCAkdmFsdWUpID0gZXhwbG9kZSgnOicsICR0cmltbWVkX2NhbGxfc3RyaW5nLCAyKTsKCQl9CgoJCSRoZWFkZXIgPSB0cmltKCRoZWFkZXIpOwoJCSR2YWx1ZSA9IHRyaW0oJHZhbHVlKTsKCgkJaWYgKCBwcmVnX21hdGNoKCcvXkhUVFBcLzEvJywgJHRyaW1tZWRfY2FsbF9zdHJpbmcpICkgewoJCQkkdmFsdWUgPSAkdHJpbW1lZF9jYWxsX3N0cmluZzsKCQkJJGhlYWRlciA9ICJIVFRQIjsKCQl9CgoJCWlmICghZW1wdHkoJGhlYWRlcikpIHsKCQkJLy8gbmV3IGhlYWRlcgoJCQkkdGhpcy0+bGFzdF9yZXNwb25zZV9oZWFkZXJzWyRoZWFkZXJdID0gJHZhbHVlOwoJCQkkbGFzdF9yZW1lbWJlcmVkX2hlYWRlciA9ICRoZWFkZXI7CgkJfQoJCWVsc2VpZiAoIWVtcHR5KCAkdHJpbW1lZF9jYWxsX3N0cmluZyApKSB7CgkJCS8vIGNvbnRpbnVhdGlvbiBvZiBsYXN0IGhlYWRlci4gIGFwcGVuZCB0byBwcmV2aW91cwoJCQkkdGhpcy0+bGFzdF9yZXNwb25zZV9oZWFkZXJzWyR0aGlzLT5sYXN0X3JlbWVtYmVyZWRfaGVhZGVyXSAuPSAkdHJpbW1lZF9jYWxsX3N0cmluZzsKCQl9CgkJZWxzZSB7IH0KCgkJcmV0dXJuIHN0cmxlbigkY2FsbF9zdHJpbmcpOwoJfQoKCglwdWJsaWMgZnVuY3Rpb24gRXJyb3IoKSB7CgkJaWYgKGlzc2V0KCR0aGlzLT5lcnJvcl9pbmZvWyd0eXBlJ10pICYmICFlbXB0eSgkdGhpcy0+ZXJyb3JfaW5mb1sndHlwZSddKSkgewoJCQlyZXR1cm4gJHRoaXMtPmVycm9yX2luZm87CgkJfQoJCWVsc2UgewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJfQoKCglwcml2YXRlIGZ1bmN0aW9uIHNldF9lcnJvcl9pbmZvKCR0eXBlLCAkY29kZSwgJHRleHQpIHsKCQkkdGhpcy0+ZXJyb3JfaW5mb1sndHlwZSddID0gJHR5cGU7CgkJJHRoaXMtPmVycm9yX2luZm9bJ2NvZGUnXSA9ICRjb2RlOwoJCSR0aGlzLT5lcnJvcl9pbmZvWyd0ZXh0J10gPSAkdGV4dDsKCQlyZXR1cm4gdHJ1ZTsKCX0KCgoJcHJpdmF0ZSBmdW5jdGlvbiByZXNldF9lcnJvcl9pbmZvKCkgewoJCSR0aGlzLT5lcnJvcl9pbmZvWyd0eXBlJ10gPSAiIjsKCQkkdGhpcy0+ZXJyb3JfaW5mb1snY29kZSddID0gIiI7CgkJJHRoaXMtPmVycm9yX2luZm9bJ3RleHQnXSA9ICIiOwoJCXJldHVybiB0cnVlOwoJfQoKCglwcml2YXRlIGZ1bmN0aW9uIGlzX3NlcnZlcl92ZXJzaW9uKCRjaGVja192ZXJzaW9uKSB7CgkJaWYgKCRjaGVja192ZXJzaW9uID09ICIxXzVfb3JfYmVsb3ciKSB7CgkJCWlmICgkdGhpcy0+R2V0U2VydmVyVmVyc2lvbigpID09ICJSRVRTLzEuNSIgfHwgJHRoaXMtPkdldFNlcnZlclZlcnNpb24oKSA9PSAiUkVUUy8xLjAiKSB7CgkJCQlyZXR1cm4gdHJ1ZTsKCQkJfQoJCQllbHNlIHsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCX0KCQlpZiAoJGNoZWNrX3ZlcnNpb24gPT0gIjFfN19vcl9oaWdoZXIiKSB7CgkJCWlmICgkdGhpcy0+R2V0U2VydmVyVmVyc2lvbigpID09ICJSRVRTLzEuNyIgfHwgJHRoaXMtPkdldFNlcnZlclZlcnNpb24oKSA9PSAiUkVUUy8xLjcuMSIgfHwgJHRoaXMtPkdldFNlcnZlclZlcnNpb24oKSA9PSAiUkVUUy8xLjcuMiIgfHwgJHRoaXMtPkdldFNlcnZlclZlcnNpb24oKSA9PSAiUkVUUy8xLjgiKSB7CgkJCQlyZXR1cm4gdHJ1ZTsKCQkJfQoJCQllbHNlIHsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCX0KCQlyZXR1cm4gZmFsc2U7Cgl9CgoKCXByaXZhdGUgZnVuY3Rpb24gZml4X2VuY29kaW5nKCRpbl9zdHIpIHsKCQlpZiAoJHRoaXMtPmRpc2FibGVfZW5jb2RpbmdfZml4ID09IHRydWUgfHwgIWZ1bmN0aW9uX2V4aXN0cygibWJfZGV0ZWN0X2VuY29kaW5nIikpIHsKCQkJcmV0dXJuICRpbl9zdHI7CgkJfQoKCQkkaW5fc3RyID0gcHJlZ19yZXBsYWNlKCcvXCZccy8nLCAnJmFtcDsgJywgJGluX3N0cik7CgkJJGN1cl9lbmNvZGluZyA9IG1iX2RldGVjdF9lbmNvZGluZygkaW5fc3RyKTsKCQlpZiAoJGN1cl9lbmNvZGluZyA9PSAiVVRGLTgiICYmIG1iX2NoZWNrX2VuY29kaW5nKCRpbl9zdHIsICJVVEYtOCIpKSB7CgkJCXJldHVybiAkaW5fc3RyOwoJCX0KCQllbHNlIHsKCQkJcmV0dXJuIHV0ZjhfZW5jb2RlKCRpbl9zdHIpOwoJCX0KCX0KCgoJcHVibGljIGZ1bmN0aW9uIFNlcnZlckRldGFpbCgkZGV0YWlsKSB7CgkJaWYgKGlzc2V0KCR0aGlzLT5zZXJ2ZXJfaW5mb3JtYXRpb25bJGRldGFpbF0pKSB7CgkJCXJldHVybiAkdGhpcy0+c2VydmVyX2luZm9ybWF0aW9uWyRkZXRhaWxdOwoJCX0KCQllbHNlIHsKCQkJcmV0dXJuICIiOwoJCX0KCX0KCgoJcHVibGljIGZ1bmN0aW9uIFNldFBhcmFtKCRuYW1lLCAkdmFsdWUpIHsKCQlzd2l0Y2ggKCRuYW1lKSB7CgkJCWNhc2UgImNvb2tpZV9maWxlIjoKCQkJCSR0aGlzLT5jb29raWVfZmlsZSA9ICR2YWx1ZTsKCQkJCWJyZWFrOwoJCQljYXNlICJkZWJ1Z19maWxlIjoKCQkJCSR0aGlzLT5kZWJ1Z19maWxlID0gJHZhbHVlOwoJCQkJYnJlYWs7CgkJCWNhc2UgImRlYnVnX21vZGUiOgoJCQkJJHRoaXMtPmRlYnVnX21vZGUgPSAkdmFsdWU7CgkJCQlicmVhazsKCQkJY2FzZSAiY29tcHJlc3Npb25fZW5hYmxlZCI6CgkJCQkkdGhpcy0+Y29tcHJlc3Npb25fZW5hYmxlZCA9ICR2YWx1ZTsKCQkJCWJyZWFrOwoJCQljYXNlICJmb3JjZV91YV9hdXRoZW50aWNhdGlvbiI6CgkJCQkkdGhpcy0+dWFfYXV0aCA9ICR2YWx1ZTsKCQkJCWJyZWFrOwoJCQljYXNlICJkaXNhYmxlX2ZvbGxvd19sb2NhdGlvbiI6CgkJCQkkdGhpcy0+ZGlzYWJsZV9mb2xsb3dfbG9jYXRpb24gPSAkdmFsdWU7CgkJCQlicmVhazsKCQkJY2FzZSAiZm9yY2VfYmFzaWNfYXV0aGVudGljYXRpb24iOgoJCQkJJHRoaXMtPmZvcmNlX2Jhc2ljX2F1dGhlbnRpY2F0aW9uID0gJHZhbHVlOwoJCQkJYnJlYWs7CgkJCWNhc2UgInVzZV9pbnRlcmVhbHR5X3VhX2F1dGgiOgoJCQkJJHRoaXMtPnVzZV9pbnRlcmVhbHR5X3VhX2F1dGggPSAkdmFsdWU7CgkJCQlicmVhazsKCQkJY2FzZSAiY2F0Y2hfbGFzdF9yZXNwb25zZSI6CgkJCQkkdGhpcy0+Y2F0Y2hfbGFzdF9yZXNwb25zZSA9ICR2YWx1ZTsKCQkJCWJyZWFrOwoJCQljYXNlICJkaXNhYmxlX2VuY29kaW5nX2ZpeCI6CgkJCQkkdGhpcy0+ZGlzYWJsZV9lbmNvZGluZ19maXggPSAkdmFsdWU7CgkJCQlicmVhazsKCQkJY2FzZSAib2Zmc2V0X3N1cHBvcnQiOgoJCQkJJHRoaXMtPm9mZnNldF9zdXBwb3J0ID0gJHZhbHVlOwoJCQkJYnJlYWs7CgkJCWNhc2UgIm92ZXJyaWRlX29mZnNldF9wcm90ZWN0aW9uIjoKCQkJCSR0aGlzLT5vdmVycmlkZV9vZmZzZXRfcHJvdGVjdGlvbiA9ICR2YWx1ZTsKCQkJCWJyZWFrOwoJCQlkZWZhdWx0OgoJCQkJcmV0dXJuIGZhbHNlOwoJCX0KCgkJcmV0dXJuIHRydWU7Cgl9CgoKfQo=]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENSRUFfU2ltcGxlIChjKSAyMDEzIGJ5IFJvYmVydCBDYW1wYmVsbCAKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBwcm92aWRlIGEgc2ltcGxlIGludGVyZmFjZQojICB0byB0aGUgQ1JFQSB3ZWIgc2VydmljZS4KIyAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIAojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwoKJHRhYm9wdGFycmF5ID0gYXJyYXkoJ215c3FsJyA9PiAnVFlQRT1NeUlTQU0nKTsKJGRiID0gJHRoaXMtPkdldERiKCk7CiRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKJGZsZHMgPSAiaWQgSSBLRVksCiAgICAgICAgIHVwZGF0ZWQgSSwKICAgICAgICAgcmF3ICBYMgogICAgICAgICI7CiRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9jcmVhc2ltcGxlIiwgJGZsZHMsICR0YWJvcHRhcnJheSk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCiRmbiA9IF9fRElSX18uJy90ZW1wbGF0ZXMvb3JpZ19zdW1tYXJ5X3RlbXBsYXRlLnRwbCc7CmlmKCBmaWxlX2V4aXN0cygkZm4pICkgewogICR0ZW1wbGF0ZSA9IEBmaWxlX2dldF9jb250ZW50cygkZm4pOwogICR0aGlzLT5TZXRUZW1wbGF0ZSgnZGVmYXVsdF9zdW1tYXJ5X3RlbXBsYXRlX2NvbnRlbnRzJywkdGVtcGxhdGUpOwogICR0aGlzLT5TZXRUZW1wbGF0ZSgnc3VtbWFyeVNhbXBsZScsJHRlbXBsYXRlKTsKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnY3VycmVudF9zdW1tYXJ5JywnU2FtcGxlJyk7Cn0KCiRmbiA9IF9fRElSX18uJy90ZW1wbGF0ZXMvb3JpZ19kZXRhaWxfdGVtcGxhdGUudHBsJzsKaWYoIGZpbGVfZXhpc3RzKCRmbikgKSB7CiAgJHRlbXBsYXRlID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRmbik7CiAgJHRoaXMtPlNldFRlbXBsYXRlKCdkZWZhdWx0X2RldGFpbF90ZW1wbGF0ZV9jb250ZW50cycsJHRlbXBsYXRlKTsKICAkdGhpcy0+U2V0VGVtcGxhdGUoJ2RldGFpbFNhbXBsZScsJHRlbXBsYXRlKTsKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnY3VycmVudF9kZXRhaWwnLCdTYW1wbGUnKTsKfQoKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENSRUFfU2ltcGxlIChjKSAyMDEzIGJ5IFJvYmVydCBDYW1wYmVsbCAKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBwcm92aWRlIGEgc2ltcGxlIGludGVyZmFjZQojICB0byB0aGUgQ1JFQSB3ZWIgc2VydmljZS4KIyAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIAojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwoKJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSggJGRiICk7Cgokc3FsYXJyYXkgPSAkZGljdC0+RHJvcFRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9jcmVhc2ltcGxlIiApOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENSRUFfU2ltcGxlIChjKSAyMDEzIGJ5IFJvYmVydCBDYW1wYmVsbCAKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBwcm92aWRlIGEgc2ltcGxlIGludGVyZmFjZQojICB0byB0aGUgQ1JFQSB3ZWIgc2VydmljZS4KIyAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIAojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICEkZ0NtcyApIGV4aXQ7CgppZiggdmVyc2lvbl9jb21wYXJlKCRvbGR2ZXJzaW9uLCcxLjEnKSA8IDEgKSB7CiAgLy8gY2xlYXIgdGhlIGNhY2hlLgogIGNnZV9kaXI6OnJlY3Vyc2l2ZV9ybWRpcihjcmVhX3V0aWxzOjpnZXRfY2FjaGVfZGlyKCkpOwp9CiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/admin_classifications_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0iaW5mb3JtYXRpb24iPnskbW9kLT5MYW5nKCdpbmZvX3Byb3BlcnR5dHlwZV9jbGFzc2lmaWNhdGlvbicpfTwvZGl2PgoKeyRmb3Jtc3RhcnR9CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X2NvbW1lcmNpYWxfdHlwZXMnKX06PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgPHRleHRhcmVhIG5hbWU9InskYWN0aW9uaWR9Y29tbWVyY2lhbF90eXBlcyIgcm93cz0iNSIgY29scz0iMzAiPnskY29tbWVyY2lhbF90eXBlc308L3RleHRhcmVhPgogIDwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X3Jlc2lkZW50aWFsX3R5cGVzJyl9OjwvcD4KICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgIDx0ZXh0YXJlYSBuYW1lPSJ7JGFjdGlvbmlkfXJlc2lkZW50aWFsX3R5cGVzIiByb3dzPSI1IiBjb2xzPSIzMCI+eyRyZXNpZGVudGlhbF90eXBlc308L3RleHRhcmVhPgogIDwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X2xhbmRfdHlwZXMnKX06PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgPHRleHRhcmVhIG5hbWU9InskYWN0aW9uaWR9bGFuZF90eXBlcyIgcm93cz0iNSIgY29scz0iMzAiPnskbGFuZF90eXBlc308L3RleHRhcmVhPgogIDwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij48L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CQogICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ieyRhY3Rpb25pZH1zdWJtaXQiIHZhbHVlPSJ7JG1vZC0+TGFuZygnc3VibWl0Jyl9Ii8+CiAgPC9wPgo8L2Rpdj4KeyRmb3JtZW5kfQ==]]></data>
	</file>
	<file>
	  <filename>/templates/admin_settings_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgokKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpewogICQoJyN1c2VybmFtZSwjcGFzc3dvcmQnKS5jaGFuZ2UoZnVuY3Rpb24oKXsKICAgICQoJyN0ZXN0JykuYXR0cignZGlzYWJsZWQnLCdkaXNhYmxlZCcpOwogICAgJCgnI3Rlc3QnKS5idXR0b24oJ29wdGlvbicsJ2Rpc2FibGVkJyx0cnVlKTsKICB9KTsKICAkKGRvY3VtZW50KS5vbignY2xpY2snLCcjYWN0X3N1Ym1pdCcsZnVuY3Rpb24oKXsKICAgIHJldHVybiBjb25maXJtKCd7JG1vZC0+TGFuZygnY29uZmlybV9zdWJtaXQnKX0nKTsKICB9KTsKICAkKCcuYWN0X2NsZWFyJykuY2xpY2soZnVuY3Rpb24oKXsKICAgIHJldHVybiBjb25maXJtKCd7JG1vZC0+TGFuZygnY29uZmlybV9jbGVhcmNhY2hlJyl9Jyk7CiAgfSk7CiAgJCgnLmFjdF91cGRhdGUnKS5jbGljayhmdW5jdGlvbigpewogICAgcmV0dXJuIGNvbmZpcm0oJ3skbW9kLT5MYW5nKCdjb25maXJtX3VwZGF0ZWNhY2hlJyl9Jyk7CiAgfSk7Cn0pOwo8L3NjcmlwdD4KCnskZm9ybXN0YXJ0fQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF91c2VybmFtZScpfTo8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9InVzZXJuYW1lIiBuYW1lPSJ7JGFjdGlvbmlkfWNyZWFfdXNlcm5hbWUiIHZhbHVlPSJ7JGNyZWFfdXNlcm5hbWV9IiBzaXplPSI1MCIgbWF4bGVuZ3RoPSI1MCIvPgogIDwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X3Bhc3N3b3JkJyl9OjwvcD4KICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0icGFzc3dvcmQiIG5hbWU9InskYWN0aW9uaWR9Y3JlYV9wYXNzd29yZCIgdmFsdWU9InskY3JlYV9wYXNzd29yZH0iIHNpemU9IjUwIiBtYXhsZW5ndGg9IjUwIi8+CiAgPC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZXRleHQiPjwvcD4KICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIGlkPSJ0ZXN0IiBuYW1lPSJ7JGFjdGlvbmlkfXRlc3QiIHZhbHVlPSJ7JG1vZC0+TGFuZygndGVzdCcpfSIvPgogIDwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X2NhY2hlX2xpZmV0aW1lJyl9OjwvcD4KICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgIDxzZWxlY3QgbmFtZT0ieyRhY3Rpb25pZH1jYWNoZV9saWZldGltZSI+CiAgICB7aHRtbF9vcHRpb25zIG9wdGlvbnM9JGNhY2hlX29wdGlvbnMgc2VsZWN0ZWQ9JGNhY2hlX2xpZmV0aW1lfQogICAgPC9zZWxlY3Q+CiAgPC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfZGV0YWlscGFnZScpfTo8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1kZXRhaWxwYWdlIiB2YWx1ZT0ieyRkZXRhaWxwYWdlfSIvPgogICAgPGJyLz57JG1vZC0+TGFuZygnaW5mb19kZXRhaWxwYWdlJyl9CiAgPC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfdXJscHJlZml4Jyl9OjwvcD4KICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfXVybHByZWZpeCIgdmFsdWU9InskdXJscHJlZml4fSIvPgogICAgPGJyLz57JG1vZC0+TGFuZygnaW5mb191cmxwcmVmaXgnKX0KICA8L3A+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdldGV4dCI+PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgaWQ9ImFjdF9zdWJtaXQiIG5hbWU9InskYWN0aW9uaWR9c3VibWl0IiB2YWx1ZT0ieyRtb2QtPkxhbmcoJ3N1Ym1pdCcpfSIvPgogICAge21vZHVsZV9hY3Rpb25fbGluayBjbGFzcz0iYWN0X2NsZWFyIiBtb2R1bGU9J0NSRUFfU2ltcGxlJyBhY3Rpb249J2FkbWluX2NsZWFyJyBpbWFnZT0naWNvbnMvc3lzdGVtL3J1bi5naWYnIHRleHQ9JG1vZC0+TGFuZygncHJvbXB0X2NsZWFyY2FjaGUnKX0KICAgIHttb2R1bGVfYWN0aW9uX2xpbmsgY2xhc3M9ImFjdF91cGRhdGUiIG1vZHVsZT0nQ1JFQV9TaW1wbGUnIGFjdGlvbj0nYWRtaW5fdXBkYXRlJyBpbWFnZT0naWNvbnMvc3lzdGVtL3J1bi5naWYnIHRleHQ9JG1vZC0+TGFuZygncHJvbXB0X3VwZGF0ZW5vdycpfQogIDwvcD4KPC9kaXY+CnskZm9ybWVuZH0=]]></data>
	</file>
	<file>
	  <filename>/templates/admin_update.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2Ntc19qcXVlcnl9Cgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CnZhciBfX21heHZhbCA9IDA7CmZ1bmN0aW9uIF9tYXgobikgewogIF9fbWF4dmFsID0gbjsKICAkKCcjcHJvZ3Jzc3MnKS5wcm9ncmVzc2Jhcignb3B0aW9uJywnbWF4JyxuKTsKICAkKCcjcHJvZ3Jzc3MnKS5wcm9ncmVzc2JhcigndmFsdWUnLDApOwp9CmZ1bmN0aW9uIF92YWx1ZShuKSB7CiAgcGN0ID0gTWF0aC5yb3VuZChuIC8gX19tYXh2YWwgKiAxMDAuMCk7CiAgJCgnI3Byb2dyZXNzdGV4dCcpLmh0bWwocGN0KyclJyk7CiAgJCgnI3Byb2dyc3NzJykucHJvZ3Jlc3NiYXIoJ3ZhbHVlJyxuKTsKfQpmdW5jdGlvbiBfc3RhdHVzKHR4dCkgewogICQoJyNzdGF0dXMnKS5odG1sKHR4dCk7Cn0KCiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7CiAkKCcjcHJvZ3Jlc3MnKS5wcm9ncmVzc2Jhcih7IHZhbHVlOiBmYWxzZSwgbWF4OiAxMDAgfSk7Cn0pOwo8L3NjcmlwdD4KCjxoMz5VcGRhdGUgQ2FjaGU8L2gzPgo8ZGl2IGlkPSJwcm9ncmVzcyIgc3R5bGU9ImhlaWdodDogMWVtOyB3aWR0aDogMTAwJTsiPjwvZGl2Pgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdldGV4dCI+UHJvZ3Jlc3M8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCIgaWQ9InByb2dyZXNzdGV4dCIgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsiPjwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5TdGF0dXM6PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiIGlkPSJzdGF0dXMiIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Ij48L3A+CjwvZGl2PgoK]]></data>
	</file>
	<file>
	  <filename>/templates/orig_detail_template.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogQ1JFQV9zaW1wbGUgZGV0YWlsIHRlbXBsYXRlICp9CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Ci5wcm9tcHQgewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICB3aWR0aDogMTBlbTsKfQouY3JlYV9kZXRhaWwgZmllbGRzZXQgewogIHBhZGRpbmc6IDEuNWVtOwogIHBhZGRpbmctdG9wOiAwOwogIHBhZGRpbmctYm90dG9tOiAwOwogIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOwogIG1hcmdpbi10b3A6IDAuNWVtOwogIG1hcmdpbi1ib3R0b206IDAuNWVtOwp9CnVsLmNyZWFfZGV0YWlsX2FsYnVtIHsKICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7Cn0KdWwuY3JlYV9kZXRhaWxfYWxidW0gbGkgewogIGZsb2F0OiBsZWZ0OwogIHdpZHRoOiAyNCU7Cn0KPC9zdHlsZT4KCnsqIDxwcmU+eyRlbnRyeXxAcHJpbnRfcn08L3ByZT4gKn0KCnsqIHNldCB0aGUgY2Fub25pY2FsIHVybCAqfQp7aWYgaXNzZXQoJGVudHJ5Ll9jYW5vbmljYWwpfXskY2Fub25pY2FsPSRlbnRyeS5fY2Fub25pY2FsfXsvaWZ9Cgo8ZGl2IGNsYXNzPSJjcmVhX2RldGFpbCI+CiAgPGRpdiBjbGFzcz0icm93Ij4KICAgIDxzcGFuIGNsYXNzPSJwcm9tcHQiPnskQ1JFQV9TaW1wbGUtPkxhbmcoJ3Byb21wdF9saXN0aW5naWQnKX08L3NwYW4+CiAgICA8c3BhbiBjbGFzcz0idmFsdWUiPnskZW50cnkuTGlzdGluZ0lEfTwvc3Bhbj4KICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgIDxzcGFuIGNsYXNzPSJwcm9tcHQiPnskQ1JFQV9TaW1wbGUtPkxhbmcoJ3Byb21wdF9hZGRyZXNzJyl9PC9zcGFuPgogICAgICA8c3BhbiBjbGFzcz0idmFsdWUiPntpZiBpc3NldCgkZW50cnkuX2FkZHJlc3MpfXskZW50cnkuX2FkZHJlc3N9e2Vsc2V9eyRDUkVBX1NpbXBsZS0+TGFuZygnc3RyX25vdGF2YWlsYWJsZScpfXsvaWZ9PC9zcGFuPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICA8c3BhbiBjbGFzcz0icHJvbXB0Ij57JENSRUFfU2ltcGxlLT5MYW5nKCdwcm9tcHRfcHJvcGVydHl0eXBlJyl9PC9zcGFuPgogICAgICA8c3BhbiBjbGFzcz0idmFsdWUiPnskZW50cnkuUHJvcGVydHlUeXBlfGRlZmF1bHQ6JENSRUFfU2ltcGxlLT5MYW5nKCdzdHJfdW5rbm93bicpfTwvc3Bhbj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgPHNwYW4gY2xhc3M9InByb21wdCI+eyRDUkVBX1NpbXBsZS0+TGFuZygncHJvbXB0X3ByaWNlJyl9PC9zcGFuPgogICAgICA8c3BhbiBjbGFzcz0idmFsdWUiPiR7JGVudHJ5LlByaWNlfGRlZmF1bHQ6JENSRUFfU2ltcGxlLT5MYW5nKCdzdHJfdW5rbm93bicpfTwvc3Bhbj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgPHNwYW4gY2xhc3M9InByb21wdCI+eyRDUkVBX1NpbXBsZS0+TGFuZygncHJvbXB0X2Rlc2NyaXB0aW9uJyl9PC9zcGFuPgogICAgICA8c3BhbiBjbGFzcz0idmFsdWUiPnskZW50cnkuUHVibGljUmVtYXJrc3xkZWZhdWx0OicnfTwvc3Bhbj4KICAgIDwvZGl2PgogICAgeyogZGlzcGxheSB0aGUgYWRkcmVzcyAqfQogICAgPGZpZWxkc2V0IGNsYXNzPSJibG9jayI+CiAgICAgIDxsZWdlbmQ+eyRDUkVBX1NpbXBsZS0+TGFuZygncHJvbXB0X2FkZHJlc3MnKX08L2xlZ2VuZD4KICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICA8c3BhbiBjbGFzcz0icHJvbXB0Ij57JENSRUFfU2ltcGxlLT5MYW5nKCdwcm9tcHRfYWRkcmVzczEnKX08L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3M9InZhbHVlIj57JGVudHJ5LkFkZHJlc3MuQWRkcmVzc0xpbmUxfTwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICAgIHtpZiBpc3NldCgkZW50cnkuQWRkcmVzcy5BZGRyZXNzTGluZTIpfQogICAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgIDxzcGFuIGNsYXNzPSJwcm9tcHQiPnskQ1JFQV9TaW1wbGUtPkxhbmcoJ3Byb21wdF9hZGRyZXNzMicpfTwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0idmFsdWUiPnskZW50cnkuQWRkcmVzcy5BZGRyZXNzTGluZTJ9PC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgey9pZn0KICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICA8c3BhbiBjbGFzcz0icHJvbXB0Ij57JENSRUFfU2ltcGxlLT5MYW5nKCdwcm9tcHRfY2l0eScpfTwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0idmFsdWUiPnskZW50cnkuQWRkcmVzcy5DaXR5fTwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgPHNwYW4gY2xhc3M9InByb21wdCI+eyRDUkVBX1NpbXBsZS0+TGFuZygncHJvbXB0X3Byb3ZpbmNlJyl9PC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJ2YWx1ZSI+eyRlbnRyeS5BZGRyZXNzLlByb3ZpbmNlfTwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgPHNwYW4gY2xhc3M9InByb21wdCI+eyRDUkVBX1NpbXBsZS0+TGFuZygncHJvbXB0X3Bvc3RhbGNvZGUnKX08L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3M9InZhbHVlIj57JGVudHJ5LkFkZHJlc3MuUG9zdGFsQ29kZX08L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgIDxzcGFuIGNsYXNzPSJwcm9tcHQiPnskQ1JFQV9TaW1wbGUtPkxhbmcoJ3Byb21wdF9jb3VudHJ5Jyl9PC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJ2YWx1ZSI+eyRlbnRyeS5BZGRyZXNzLkNvdW50cnl9PC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvZmllbGRzZXQ+CgogICAgeyogZGlzcGxheSB0aGUgbGFuZCBpbmZvICp9CiAgICB7aWYgaXNzZXQoJGVudHJ5LkxhbmQpfQogICAgPGZpZWxkc2V0PgogICAgICA8bGVnZW5kPnskQ1JFQV9TaW1wbGUtPkxhbmcoJ3Byb21wdF9sYW5kJyl9PC9sZWdlbmQ+CiAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgPHNwYW4gY2xhc3M9InByb21wdCI+eyRDUkVBX1NpbXBsZS0+TGFuZygncHJvbXB0X2xhbmRzaXplJyl9PC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJ2YWx1ZSI+eyRlbnRyeS5MYW5kLlNpemVUb3RhbFRleHR8ZGVmYXVsdDokbW9kLT5MYW5nKCdzdHJfbm90YXZhaWxhYmxlJyl9PC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvZmllbGRzZXQ+CiAgICB7L2lmfQoKICAgIHsqIGRpc3BsYXkgdGhlIGJ1aWxkaW5nIGluZm9zICp9CiAgICB7aWYgaXNzZXQoJGVudHJ5LkJ1aWxkaW5nKX0KICAgIDxmaWVsZHNldD4KICAgICAgPGxlZ2VuZD57JENSRUFfU2ltcGxlLT5MYW5nKCdwcm9tcHRfYnVpbGRpbmdpbmZvJyl9PC9sZWdlbmQ+CiAgICAgIHtpZiBpc3NldCgkZW50cnkuQnVpbGRpbmcuVHlwZSl9CiAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgPHNwYW4gY2xhc3M9InByb21wdCI+eyRDUkVBX1NpbXBsZS0+TGFuZygncHJvbXB0X2NvbnN0cnVjdGlvbnR5cGUnKX08L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3M9InZhbHVlIj57JGVudHJ5LkJ1aWxkaW5nLlR5cGV9PC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgey9pZn0KCiAgICAgIHtpZiBpc3NldCgkZW50cnkuQnVpbGRpbmcuU3Rvcmllc1RvdGFsKX0KICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICA8c3BhbiBjbGFzcz0icHJvbXB0Ij57JENSRUFfU2ltcGxlLT5MYW5nKCdwcm9tcHRfY29uc3RydWN0aW9uc3RvcmllcycpfTwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0idmFsdWUiPnskZW50cnkuQnVpbGRpbmcuU3Rvcmllc1RvdGFsfTwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICAgIHsvaWZ9CgogICAgICB7aWYgaXNzZXQoJGVudHJ5LkJ1aWxkaW5nLkNvbnN0cnVjdGlvblN0eWxlQXR0YWNobWVudCl9CiAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgPHNwYW4gY2xhc3M9InByb21wdCI+eyRDUkVBX1NpbXBsZS0+TGFuZygncHJvbXB0X2NvbnN0cnVjdGlvbnN0eWxlJyl9PC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJ2YWx1ZSI+eyRlbnRyeS5CdWlsZGluZy5Db25zdHJ1Y3Rpb25TdHlsZUF0dGFjaG1lbnR9PC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgey9pZn0KCiAgICAgIHtpZiBpc3NldCgkZW50cnkuQnVpbGRpbmcuQmVkcm9vbXNUb3RhbCl9CiAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgPHNwYW4gY2xhc3M9InByb21wdCI+eyRDUkVBX1NpbXBsZS0+TGFuZygncHJvbXB0X2JlZHJvb21zJyl9PC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJ2YWx1ZSI+eyRlbnRyeS5CdWlsZGluZy5CZWRyb29tc1RvdGFsfTwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICAgIHsvaWZ9CgogICAgICB7aWYgaXNzZXQoJGVudHJ5LkJ1aWxkaW5nLkJhdGhyb29tVG90YWwpfQogICAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgIDxzcGFuIGNsYXNzPSJwcm9tcHQiPnskQ1JFQV9TaW1wbGUtPkxhbmcoJ3Byb21wdF9iYXRocm9vbXMnKX08L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3M9InZhbHVlIj57JGVudHJ5LkJ1aWxkaW5nLkJhdGhyb29tVG90YWx9PC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgey9pZn0KCiAgICAgIHtpZiBpc3NldCgkZW50cnkuQnVpbGRpbmcuQmFzZW1lbnRUeXBlKX0KICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICA8c3BhbiBjbGFzcz0icHJvbXB0Ij57JENSRUFfU2ltcGxlLT5MYW5nKCdwcm9tcHRfYmFzZW1lbnR0eXBlJyl9PC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJ2YWx1ZSI+eyRlbnRyeS5CdWlsZGluZy5CYXNlbWVudFR5cGV9PC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgey9pZn0KCiAgICAgIHtpZiBpc3NldCgkZW50cnkuQnVpbGRpbmcuQmFzZW1lbnREZXZlbG9wbWVudCl9CiAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgPHNwYW4gY2xhc3M9InByb21wdCI+eyRDUkVBX1NpbXBsZS0+TGFuZygncHJvbXB0X2Jhc2VtZW50ZGV2ZWxvcG1lbnQnKX08L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3M9InZhbHVlIj57JGVudHJ5LkJ1aWxkaW5nLkJhc2VtZW50RGV2ZWxvcG1lbnR9PC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgey9pZn0KCiAgICAgIHtpZiBpc3NldCgkZW50cnkuQnVpbGRpbmcuUm9vbXMuUm9vbSl9CiAgICAgICAgPGZpZWxkc2V0PgogICAgICAgICAgPGxlZ2VuZD57JENSRUFfU2ltcGxlLT5MYW5nKCdwcm9tcHRfcm9vbXMnKX08L2xlZ2VuZD4KICAgICAgICAgIDxkaXYgaWQ9InJvb21saXN0Ij4KICAgICAgICAgIHtmb3JlYWNoICRlbnRyeS5CdWlsZGluZy5Sb29tcy5Sb29tIGFzICRyb29tfQogICAgICAgICAgICAgPGgzPnskcm9vbS5UeXBlfTwvaDM+CiAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwcm9tcHQiPnskQ1JFQV9TaW1wbGUtPkxhbmcoJ3Byb21wdF9yb29td2lkdGgnKX08L3NwYW4+CiAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZhbHVlIj57JHJvb20uV2lkdGh9PC9zcGFuPgogICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icHJvbXB0Ij57JENSRUFfU2ltcGxlLT5MYW5nKCdwcm9tcHRfcm9vbWxlbmd0aCcpfTwvc3Bhbj4KICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idmFsdWUiPnskcm9vbS5MZW5ndGh9PC9zcGFuPgogICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icHJvbXB0Ij57JENSRUFfU2ltcGxlLT5MYW5nKCdwcm9tcHRfcm9vbWxldmVsJyl9PC9zcGFuPgogICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2YWx1ZSI+eyRyb29tLkxldmVsfTwvc3Bhbj4KICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIHsvZm9yZWFjaH0KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC91bD4KICAgICAgICA8L2ZpZWxkc2V0PgogICAgICB7L2lmfQogICAgPC9maWVsZHNldD4KICAgIHsvaWZ9CgogICAgeyogZGlzcGxheSB0aGUgbGlzdGVyICp9CiAgICA8ZmllbGRzZXQ+CiAgICAgIDxsZWdlbmQ+eyRDUkVBX1NpbXBsZS0+TGFuZygncHJvbXB0X3JlYWx0b3JpbmZvJyl9PC9sZWdlbmQ+CiAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgPHNwYW4gY2xhc3M9InByb21wdCI+eyRDUkVBX1NpbXBsZS0+TGFuZygncHJvbXB0X3JlYWx0b3InKX08L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3M9InZhbHVlIj57JGVudHJ5LkFnZW50RGV0YWlscy5OYW1lfTwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgPHNwYW4gY2xhc3M9InByb21wdCI+eyRDUkVBX1NpbXBsZS0+TGFuZygncHJvbXB0X3JlYWx0b3Jfb2ZmaWNlJyl9PC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJ2YWx1ZSI+eyRlbnRyeS5BZ2VudERldGFpbHMuT2ZmaWNlLk5hbWV9PC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICA8c3BhbiBjbGFzcz0icHJvbXB0Ij57JENSRUFfU2ltcGxlLT5MYW5nKCdwcm9tcHRfcGhvbmUnKX08L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3M9InZhbHVlIj57JGVudHJ5LkFnZW50RGV0YWlscy5PZmZpY2UuUGhvbmVzLlBob25lWzBdfTwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICAgIHtpZiBpc3NldCgkZW50cnkuQWdlbnREZXRhaWxzLk9mZmljZS5QaG9uZXMuUGhvbmVbMV0pfQogICAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgIDxzcGFuIGNsYXNzPSJwcm9tcHQiPnskQ1JFQV9TaW1wbGUtPkxhbmcoJ3Byb21wdF9waG9uZScpfTwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0idmFsdWUiPnskZW50cnkuQWdlbnREZXRhaWxzLk9mZmljZS5QaG9uZXMuUGhvbmVbMV19PC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgey9pZn0KICAgICAge2lmIGlzc2V0KCRlbnRyeS5BZ2VudERldGFpbHMuT2ZmaWNlLldlYnNpdGVzLldlYnNpdGUpfQogICAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgIDxzcGFuIGNsYXNzPSJwcm9tcHQiPnskQ1JFQV9TaW1wbGUtPkxhbmcoJ3Byb21wdF93ZWJzaXRlJyl9PC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJ2YWx1ZSI+PGEgaHJlZj0ieyRlbnRyeS5BZ2VudERldGFpbHMuT2ZmaWNlLldlYnNpdGVzLldlYnNpdGV9Ij57JGVudHJ5LkFnZW50RGV0YWlscy5PZmZpY2UuV2Vic2l0ZXMuV2Vic2l0ZX08L2E+PC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgey9pZn0KICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICA8c3BhbiBjbGFzcz0icHJvbXB0Ij57JENSRUFfU2ltcGxlLT5MYW5nKCdwcm9tcHRfYWRkcmVzczEnKX08L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3M9InZhbHVlIj57JGVudHJ5LkFnZW50RGV0YWlscy5PZmZpY2UuQWRkcmVzcy5BZGRyZXNzTGluZTF9PC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAge2lmIGlzc2V0KCRlbnRyeS5BZ2VudERldGFpbHMuT2ZmaWNlLkFkZHJlc3MuQWRkcmVzc0xpbmUyKX0KICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICA8c3BhbiBjbGFzcz0icHJvbXB0Ij57JENSRUFfU2ltcGxlLT5MYW5nKCdwcm9tcHRfYWRkcmVzczInKX08L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3M9InZhbHVlIj57JGVudHJ5LkFnZW50RGV0YWlscy5PZmZpY2UuQWRkcmVzcy5BZGRyZXNzTGluZTJ9PC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgey9pZn0KICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICA8c3BhbiBjbGFzcz0icHJvbXB0Ij57JENSRUFfU2ltcGxlLT5MYW5nKCdwcm9tcHRfY2l0eScpfTwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0idmFsdWUiPnskZW50cnkuQWdlbnREZXRhaWxzLk9mZmljZS5BZGRyZXNzLkNpdHl9PC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICA8c3BhbiBjbGFzcz0icHJvbXB0Ij57JENSRUFfU2ltcGxlLT5MYW5nKCdwcm9tcHRfcG9zdGFsY29kZScpfTwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0idmFsdWUiPnskZW50cnkuQWdlbnREZXRhaWxzLk9mZmljZS5BZGRyZXNzLlBvc3RhbENvZGV9PC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvZmllbGRzZXQ+CiAgICB7KiBNT1JFIElORk8gKHJlYWx0b3IuY2Egc2l0ZSkgKn0KCiAgICB7KiBkaXNwbGF5IGFuIGFsYnVtICp9CiAgICB7aWYgaXNzZXQoJGVudHJ5Ll9pbWFnZXMpICYmIGNvdW50KCRlbnRyeS5faW1hZ2VzKSA+IDB9CiAgICAgIDx1bCBjbGFzcz0iY3JlYV9kZXRhaWxfYWxidW0iPgogICAgICB7Zm9yZWFjaCAkZW50cnkuX2ltYWdlcyBhcyAkaW1hZ2V9CiAgICAgICAgPGxpPgogICAgICAgICAgPGEgaHJlZj0ieyRlbnRyeS5faW1hZ2V1cmx9L3skaW1hZ2V9IiBjbGFzcz0iZmFuY3lib3giIHJlbD0iYWxidW0iPgogICAgICAgICAgICB7Q0dTbWFydEltYWdlIHNyYz0kZW50cnkuX2ltYWdldXJsIHNyYzI9JGltYWdlIGhlaWdodD0xNTAgd2lkdGg9MTUwfQogICAgICAgICAgPC9hPgogICAgICAgIDwvbGk+CiAgICAgIHsvZm9yZWFjaH0KICAgICAgPC91bD4KICAgICAgPGRpdiBzdHlsZT0iY2xlYXI6IGJvdGg7Ij48L2Rpdj4KICAgIHsvaWZ9CjwvZGl2PnsqIC5jcmVhX2RldGFpbCAqfQo=]]></data>
	</file>
	<file>
	  <filename>/templates/orig_summary_template.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogb3JpZyBzdW1tYXJ5IHRlbXBsYXRlICp9CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Ci5jcmVhX3N1bW1hcnlfbGlzdGluZyB7CiAgbWFyZ2luLWJvdHRvbTogMmVtOwp9Ci5wcm9tcHQgewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICB3aWR0aDogMTBlbTsKfQo8L3N0eWxlPgoKe2lmIGlzc2V0KCRlcnJvcikgJiYgJGVycm9yID09IDF9CiAgPGRpdiBjbGFzcz0id2FybmluZyI+eyRlcnJvcl9tZXNzYWdlfGRlZmF1bHQ6JENSRUFfU2ltcGxlLT5MYW5nKCdlcnJvcl9ub2RhdGEnKX08L2Rpdj4Key9pZn0KCnsqIHBhZ2luYXRpb24gc3R1ZmYgZ29lcyBoZXJlICp9CntpZiBpc3NldCgkcGFnaW5hdGlvbikgJiYgaXNzZXQoJHBhZ2luYXRpb24ucGFnZV9saW5rcyl9CjxkaXYgY2xhc3M9ImNyZWFfc3VtbWFyeV9wYWdpbmF0aW9uIj4KICB7Zm9yZWFjaCAkcGFnaW5hdGlvbi5wYWdlX2xpbmtzIGFzICRwYWdlbnVtID0+ICR1cmx9CiAgPGEgaHJlZj0ieyR1cmx9IiBjbGFzcz0iY3JlYV9wYWdlX2xpbmsiPnskcGFnZW51bX08L2E+CiAgey9mb3JlYWNofQo8L2Rpdj4Key9pZn0KCntpZiBpc3NldCgkbGlzdGluZ3MpfQp7Zm9yZWFjaCAkbGlzdGluZ3MgYXMgJHJlY30KICA8ZGl2IGNsYXNzPSJjcmVhX3N1bW1hcnlfbGlzdGluZyI+CiAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICA8c3BhbiBjbGFzcz0icHJvbXB0Ij57JENSRUFfU2ltcGxlLT5MYW5nKCdwcm9tcHRfbGlzdGluZ2lkJyl9PC9zcGFuPgogICAgICA8c3BhbiBjbGFzcz0idmFsdWUiPjxhIGhyZWY9InskcmVjLl9kZXRhaWx1cmx9IiB0aXRsZT0ieyRDUkVBX1NpbXBsZS0+TGFuZygncHJvbXB0X3NlZW1vcmUnKX0iPnskcmVjLkxpc3RpbmdJRH08L2E+PC9zcGFuPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICA8c3BhbiBjbGFzcz0icHJvbXB0Ij57JENSRUFfU2ltcGxlLT5MYW5nKCdwcm9tcHRfYWRkcmVzcycpfTwvc3Bhbj4KICAgICAgPHNwYW4gY2xhc3M9InZhbHVlIj57aWYgaXNzZXQoJHJlYy5fYWRkcmVzcyl9eyRyZWMuX2FkZHJlc3N9e2Vsc2V9eyRDUkVBX1NpbXBsZS0+TGFuZygnc3RyX25vdGF2YWlsYWJsZScpfXsvaWZ9PC9zcGFuPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICA8c3BhbiBjbGFzcz0icHJvbXB0Ij57JENSRUFfU2ltcGxlLT5MYW5nKCdwcm9tcHRfcHJvcGVydHl0eXBlJyl9PC9zcGFuPgogICAgICA8c3BhbiBjbGFzcz0idmFsdWUiPnskcmVjLlByb3BlcnR5VHlwZXxkZWZhdWx0OiRDUkVBX1NpbXBsZS0+TGFuZygnc3RyX3Vua25vd24nKX08L3NwYW4+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgIDxzcGFuIGNsYXNzPSJwcm9tcHQiPnskQ1JFQV9TaW1wbGUtPkxhbmcoJ3Byb21wdF9wcmljZScpfTwvc3Bhbj4KICAgICAgPHNwYW4gY2xhc3M9InZhbHVlIj4keyRyZWMuUHJpY2V8ZGVmYXVsdDokQ1JFQV9TaW1wbGUtPkxhbmcoJ3N0cl91bmtub3duJyl9PC9zcGFuPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICA8c3BhbiBjbGFzcz0icHJvbXB0Ij57JENSRUFfU2ltcGxlLT5MYW5nKCdwcm9tcHRfZGVzY3JpcHRpb24nKX08L3NwYW4+CiAgICAgIDxzcGFuIGNsYXNzPSJ2YWx1ZSI+eyRyZWMuUHVibGljUmVtYXJrc3xkZWZhdWx0OicnfTwvc3Bhbj4KICAgIDwvZGl2PgogICAgeyogZGlzcGxheSB0aGUgZmlyc3QgaW1hZ2UgKGlmIGF2YWlsYWJsZSkgKn0KICAgIHtpZiBpc3NldCgkcmVjLl9pbWFnZXMpICYmIGNvdW50KCRyZWMuX2ltYWdlcykgPiAwfQogICAgICA8ZGl2IGNsYXNzPSJpbWFnZSI+CiAgICAgICAgPGEgaHJlZj0ieyRyZWMuX2ltYWdldXJsfS97JHJlYy5faW1hZ2VzWzBdfSIgY2xhc3M9ImZhbmN5Ym94Ij4KICAgICAgICAgIHskdG1wPSRyZWMuX2ltYWdlc1swXX0KICAgICAgICAgIHtDR1NtYXJ0SW1hZ2Ugc3JjMT0kcmVjLl9pbWFnZXVybCBzcmMyPSR0bXAgaGVpZ2h0PTE1MCB3aWR0aD0xNTB9CiAgICAgICAgPC9hPgogICAgICA8L2Rpdj4KICAgIHsvaWZ9CiAgPC9kaXY+eyogLmNyZWFfc3VtbWFyeV9saXN0aW5nICp9CnsvZm9yZWFjaH0Key9pZn0=]]></data>
	</file>
</module>
