<?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>LightBox</name>
	<version>1.0.1</version>
  <mincmsversion>1.2.3</mincmsversion>
	<help>PGgzPldoYXQgZG9lcyBpdCBkbzwvaDM+CjxwPlRoaXMgaXMgYSBzaW1wbGUgd3JhcHBlciBhcm91bmQgdGhlIExpZ2h0Ym94MiBKYXZhc2NyaXB0IHV0aWxpdGllcyBhcyB3cml0dGVuIGJ5IExva2VzaCBEaGFrYXIgKDxhIGhyZWY9Imh0dHA6Ly93d3cuaHVkZGxldG9nZXRoZXIuY29tL3Byb2plY3RzL2xpZ2h0Ym94Ij5odHRwOi8vd3d3Lmh1ZGRsZXRvZ2V0aGVyLmNvbS9wcm9qZWN0cy9saWdodGJveDwvYT4pIHRvIGFsbG93IHlvdSB0byBjcmVhdGUgcG9wdXAgaW1hZ2VzIGluIHlvdXIgQ01TIE1hZGUgc2ltcGxlIHdlYiBwYWdlLjwvcD4KCQkJCQkJCQkJCQkJICAgPHA+VGhpcyBtb2R1bGUgc3VwcG9ydHMgdXNpbmcgdGh1bWJuYWlscywgb3IgYSBkZWZhdWx0IGltYWdlIGFzIGFuIGljb24uICBTdXBwb3J0cyB0aXRsZXMsIGFuZCBhbHRlcm5hdGUgdGV4dCBpbiB0aGUgaW1hZ2UgdGFnLCBhbmQgc3VwcG9ydHMgc2ltcGxlIGltYWdlIGdhbGxlcmllcy48L3A+CjxoMz5Ib3cgRG8gSSBVc2UgSXQ8L2gzPgo8cD5UbyB1c2UgaXQgeW91IG5lZWQgdGhyZWUgdGFncyB0byBiZSBwbGFjZWQgc29tZXdoZXJlIGluIHlvdXIgb3V0cHV0OjwvcD4KPHVsPgogIDxsaT57TGlnaHRCb3ggYWN0aW9uPSdjc3MnfSAtIE91dHB1dCB0aGUgY3NzIHRhZyByZXF1aXJlZCBmb3IgbGlnaHRib3g8L2xpPgogIDxsaT57TGlnaHRCb3ggYWN0aW9uPSdqcyd9IC0gT3V0cHV0IHRoZSBqYXZhc2NyaXB0IHRhZ3MgcmVxdWlyZWQgZm9yIGxpZ2h0Ym94PC9saT4KICA8bGk+e0xpZ2h0Qm94IGltYWdlPSdpbWFnZWZpbGUuZ2lmJ30gLSBSZXBlYXQgYXMgbWFueSB0aW1lcyBhcyBuZWNlc3NhcnkgdG8gY3JlYXRlIGltYWdlIHBvcHVwczwvbGk+CjwvdWw+PGgzPkRlcGVuZGVuY2llczwvaDM+PHVsPjxsaT5DR0V4dGVuc2lvbnMgPSZndDsgMS44PC9saT48L3VsPjxoMz5QYXJhbWV0ZXJzPC9oMz48dWw+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gdGl0bGU9IiIgLSBTcGVjaWZ5IGFuIG9wdGlvbmFsIHRpdGxlIGZvciB5b3VyIHBvcHVwIGltYWdlPC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiB0ZXh0PSIiIC0gU3BlY2lmeSBhZGRpdGlvbmFsIHRleHQgZm9yIHRoZSBpbWFnZSBsaW5rPC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBhZGR0ZXh0PSIiIC0gU3BlY2lmeSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHRoZSBpbWFnZSB0YWcgaW4gdGhlIGxpbms8L2xpPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IG5hbWU9IiIgLSBTcGVjaWZ5IGEgbmFtZSBmb3IgdGhlIHJlbCBsaW5rLiAgVGhpcyBjYW4gYmUgdXNlZCB0byBncm91cCBpbWFnZXMgdG9nZXRoZXIgYW5kIHRvIGFsbG93IHBhZ2luZyBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIHRoZW08L2xpPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IHRodW1iPSIiIC0gLS1BZGQgTWUgLSBtb2R1bGU6TGlnaHRCb3ggc3RyaW5nOmhlbHBfdGh1bWItLTwvbGk+PGxpPmltYWdlPSIiIC0gU3BlY2lmeSBhbiBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gdGhlIGltYWdlIHRvIGJlIGRpc3BsYXllZDwvbGk+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gbGFuZz0iZW5fVVMiIC0gUGFyYW1ldGVyIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGF0IGxhbmd1YWdlIHRvIHVzZSBmb3IgZGlzcGxheSBvbiB0aGUgZnJvbnRlbmQuIE5vdCBhbGwgbW9kdWxlcyBzdXBwb3J0IG9yIG5lZWQgdGhpcy48L2xpPjwvdWw+</help>
	<about>PGJyIC8+QXV0aG9yOiBjYWxndXkxMDAwICZsdDtjYWxndXkxMDAwQGhvdG1haWwuY29tJmd0OzxiciAvPjxiciAvPlZlcnNpb246IDEuMC4xPGJyIC8+PGJyIC8+Q2hhbmdlIEhpc3Rvcnk6PGJyIC8+PHVsPgo8bGk+VmVyc2lvbiAxLjAgLSAoRmVicnVhcnkgMjAwOCkgSW5pdGlhbCBSZWxlYXNlPC9saT4KPGxpPlZlcnNpb24gMS4wLjEgLSAoTWFyY2ggMjAwOCkKICAgIDxwPkZpeGVzIHBvdGVudGlhbCBuYW1pbmcgY29uZmxpY3RzIGluIHNtYXJ0eSB2YXJpYWJsZXM8L3A+CiAgICA8cD5GaXhlcyBwYXRoIGlzc3VlcyBpbiB0aGUgamF2YXNjcmlwdDwvcD4KICAgIDxwPkFkZHMgdGhlIGFiaWxpdHkgdG8gcHV0IGEgZG93bmxvYWQgbGluayBpbnRvIHRoZSBwb3B1cDwvcD4KICAgIDxwPkFkZHMgdGhlIGFiaWxpdHkgdG8gc2V0IGEgbWF4aW11bSBwb3B1cCB3aW5kb3cgc2l6ZTwvcD4KPC9saT4KPC91bD48YnIgLz4=</about>
	<description>A simple way to use lightbox in your templates</description>
	<requires>
	  <requiredname>CGExtensions</requiredname>
	  <requiredversion>1.8</requiredversion>
	</requires>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.css.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IExpZ2h0Qm94IC0gQSBzaW1wbGUgd3JhcHBlciBhcm91bmQgdGhlIExpZ2h0Ym94IGphdmFzY3JpcHQgY29kZQojICAgICAgICAgQ29weXJpZ2h0IChjKSBjYWxndXkxMDAwIDxjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnPgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9za2VsZXRvbi8KIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpnbG9iYWwgJGdDbXM7CiRkaXIgPSAkZ0Ntcy0+Y29uZmlnWydyb290X3VybCddLicvbW9kdWxlcy8nLiR0aGlzLT5HZXROYW1lKCk7Cgokc3RyID0gJzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iJXMvY3NzL2xpZ2h0Ym94LmNzcyIgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iIC8+JzsKCiRvdXQgPSBzcHJpbnRmKCRzdHIsJGRpcik7CmVjaG8gJG91dC4iXG4iOwoKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IExpZ2h0Qm94IC0gQSBzaW1wbGUgd3JhcHBlciBhcm91bmQgdGhlIExpZ2h0Ym94IGphdmFzY3JpcHQgY29kZQojICAgICAgICAgQ29weXJpZ2h0IChjKSBjYWxndXkxMDAwIDxjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnPgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9za2VsZXRvbi8KIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgojIHtMaWdodGJveCBpbWFnZT0ndXBsb2Fkcy9pbWFnZXMvYmxhaC5qcGcnIG5hbWU9J2dyb3VwbmFtZScgdGh1bWI9J3NvbWV0aGluZ2R1bWIuanBnJ30KCmdsb2JhbCAkZ0NtczsKJHRodW1iPSRnQ21zLT5jb25maWdbJ3Jvb3RfdXJsJ10uJy9tb2R1bGVzLycuJHRoaXMtPkdldE5hbWUoKS4nL2ljb25zL3ZpZXcuZ2lmJzsKJGltYWdlID0gJyc7CgppZiggIWlzc2V0KCRwYXJhbXNbJ2ltYWdlJ10pICkKICB7CiAgICAvLyBtaXNzaW5nIHJlcXVpcmVkIHBhcmFtZXRlcgogICAgcmV0dXJuOwogIH0KaWYoIHN0YXJ0c3dpdGgoJHBhcmFtc1snaW1hZ2UnXSwnaHR0cDonKSApCiAgewogICAgJGltYWdlID0gJHBhcmFtc1snaW1hZ2UnXTsKICB9CmVsc2UKICB7CiAgICAkaW1hZ2UgPSAkZ0Ntcy0+Y29uZmlnWydyb290X3VybCddLnRyaW0oJHBhcmFtc1snaW1hZ2UnXSk7CiAgfQokc21hcnR5LT5hc3NpZ24oJ2xiaW1hZ2UnLCRpbWFnZSk7CgppZiggIWVtcHR5KCRwYXJhbXNbJ25hbWUnXSkgKQogIHsKICAgICRzbWFydHktPmFzc2lnbignbGJuYW1lJyx0cmltKCRwYXJhbXNbJ25hbWUnXSkpOwogIH0KCmlmKCAhZW1wdHkoJHBhcmFtc1sndGh1bWInXSkgKQogIHsKICAgICR0aHVtYiA9IHRyaW0oJHBhcmFtc1sndGh1bWInXSk7CiAgfQokc21hcnR5LT5hc3NpZ24oJ2xidGh1bWInLCR0aHVtYik7CgppZiggIWVtcHR5KCRwYXJhbXNbJ3RleHQnXSkgKQogIHsKICAgICRzbWFydHktPmFzc2lnbignbGJ0ZXh0Jyx0cmltKCRwYXJhbXNbJ3RleHQnXSkpOwogIH0KCmlmKCAhZW1wdHkoJHBhcmFtc1sndGl0bGUnXSkgKQogIHsKICAgICRzbWFydHktPmFzc2lnbignbGJ0aXRsZScsdHJpbSgkcGFyYW1zWyd0aXRsZSddKSk7CiAgfQppZiggIWVtcHR5KCRwYXJhbXNbJ2FkZHRleHQnXSkgKQogIHsKICAgICRzbWFydHktPmFzc2lnbignbGJhZGR0ZXh0Jyx0cmltKCRwYXJhbXNbJ2FkZHRleHQnXSkpOwogIH0KCiR0bXBsID0gJzxhIGhyZWY9InskbGJpbWFnZX0iIHtpZiBpc3NldCgkbGJ0aXRsZSl9dGl0bGU9InskbGJ0aXRsZX0iey9pZn0gcmVsPSJsaWdodGJveHtpZiBpc3NldCgkbGJuYW1lKX1beyRsYm5hbWV9XXsvaWZ9Ij48aW1nIHNyYz0ieyRsYnRodW1ifSJ7aWYgaXNzZXQoJGxiYWRkdGV4dCl9IHskbGJhZGR0ZXh0fXsvaWZ9Lz57aWYgaXNzZXQoJGxidGV4dCl9eyRsYnRleHR9ey9pZn08L2E+JzsKCiRvdXQgPSAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlRnJvbURhdGEoJHRtcGwpOwplY2hvICRvdXQuIlxuIjsKCiMKIyBFT0YKIwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/action.js.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IExpZ2h0Qm94IC0gQSBzaW1wbGUgd3JhcHBlciBhcm91bmQgdGhlIExpZ2h0Ym94IGphdmFzY3JpcHQgY29kZQojICAgICAgICAgQ29weXJpZ2h0IChjKSBjYWxndXkxMDAwIDxjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnPgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9za2VsZXRvbi8KIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpnbG9iYWwgJGdDbXM7CiRkaXIgPSAkZ0Ntcy0+Y29uZmlnWydyb290X3VybCddLicvbW9kdWxlcy8nLiR0aGlzLT5HZXROYW1lKCk7CiRzbWFydHktPmFzc2lnbignbGJkaXInLCRkaXIpOwoKJHByZWZpeCA9ICcnOwppZiggJHJldHVybmlkID09ICcnICkKICB7CiAgICAkcHJlZml4ID0gJy4uLyc7CiAgfQoKZWNobyAiPCEtLSBkZWJ1ZzogZGlyID0gJGRpciAtLT5cbiI7CmVjaG8gIjwhLS0gZGVidWc6IGxiZGlyID0gIi4kc21hcnR5LT5nZXRfdGVtcGxhdGVfdmFycygnbGJkaXInKS4iIC0tPlxuIjsKJHRtcGwgPSA8PDxFT1QKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgp2YXIgZmlsZUxvYWRpbmdJbWFnZSA9ICIlc21vZHVsZXMvTGlnaHRCb3gvaW1hZ2VzL2xvYWRpbmcuZ2lmIjsKdmFyIGZpbGVCb3R0b21OYXZDbG9zZUltYWdlID0gIiVzbW9kdWxlcy9MaWdodEJveC9pbWFnZXMvY2xvc2VsYWJlbC5naWYiOwp2YXIgb3ZlcmxheU9wYWNpdHkgPSAwLjg7CnZhciBhbmltYXRlID0gdHJ1ZTsKdmFyIHJlc2l6ZVNwZWVkID0gNzsKdmFyIGJvcmRlclNpemUgPSAxMDsKdmFyIGltZ01heFdpZHRoPTgwMDsKdmFyIHNhdmVJbWFnZT10cnVlOwo8L3NjcmlwdD4KPHNjcmlwdCBzcmM9IiVzbW9kdWxlcy9MaWdodEJveC9qcy9wcm90b3R5cGUuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+CjxzY3JpcHQgc3JjPSIlc21vZHVsZXMvTGlnaHRCb3gvanMvc2NyaXB0YWN1bG91cy5qcz9sb2FkPWVmZmVjdHMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+CjxzY3JpcHQgc3JjPSIlc21vZHVsZXMvTGlnaHRCb3gvanMvbGlnaHRib3guanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+CkVPVDsKCi8vJHRtcCA9ICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YSgkdG1wbCk7Ci8vIGRvbid0IGtub3cgd2h5IEkgZ290dGEgZG8gdGhpcwokdHh0ID0gc3ByaW50ZigkdG1wbCwkcHJlZml4LCRwcmVmaXgsJHByZWZpeCwkcHJlZml4LCRwcmVmaXgpOwplY2hvICR0eHQ7CgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/css/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/css/lightbox.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[I2xpZ2h0Ym94ewoJcG9zaXRpb246IGFic29sdXRlOwoJbGVmdDogMDsKCXdpZHRoOiAxMDAlOwoJei1pbmRleDogMTAwOwoJdGV4dC1hbGlnbjogY2VudGVyOwoJbGluZS1oZWlnaHQ6IDA7Cgl9CgojbGlnaHRib3ggYSBpbWd7IGJvcmRlcjogbm9uZTsgfQoKI291dGVySW1hZ2VDb250YWluZXJ7Cglwb3NpdGlvbjogcmVsYXRpdmU7CgliYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwoJd2lkdGg6IDI1MHB4OwoJaGVpZ2h0OiAyNTBweDsKCW1hcmdpbjogMCBhdXRvOwoJfQoKI2ltYWdlQ29udGFpbmVyewoJcGFkZGluZzogMTBweDsKCX0KCiNsb2FkaW5newoJcG9zaXRpb246IGFic29sdXRlOwoJdG9wOiA0MCU7CglsZWZ0OiAwJTsKCWhlaWdodDogMjUlOwoJd2lkdGg6IDEwMCU7Cgl0ZXh0LWFsaWduOiBjZW50ZXI7CglsaW5lLWhlaWdodDogMDsKCX0KI2hvdmVyTmF2ewoJcG9zaXRpb246IGFic29sdXRlOwoJdG9wOiAwOwoJbGVmdDogMDsKCWhlaWdodDogMTAwJTsKCXdpZHRoOiAxMDAlOwoJei1pbmRleDogMTA7Cgl9CiNpbWFnZUNvbnRhaW5lcj4jaG92ZXJOYXZ7IGxlZnQ6IDA7fQojaG92ZXJOYXYgYXsgb3V0bGluZTogbm9uZTt9CgojcHJldkxpbmssICNuZXh0TGlua3sKCXdpZHRoOiA0OSU7CgloZWlnaHQ6IDEwMCU7CgliYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCB1cmwoL21vZHVsZXMvTGlnaHRCb3gvaW1hZ2VzL2JsYW5rLmdpZikgbm8tcmVwZWF0OyAvKiBUcmljayBJRSBpbnRvIHNob3dpbmcgaG92ZXIgKi8KCWRpc3BsYXk6IGJsb2NrOwoJfQojcHJldkxpbmsgeyBsZWZ0OiAwOyBmbG9hdDogbGVmdDt9CiNuZXh0TGluayB7IHJpZ2h0OiAwOyBmbG9hdDogcmlnaHQ7fQojcHJldkxpbms6aG92ZXIsICNwcmV2TGluazp2aXNpdGVkOmhvdmVyIHsgYmFja2dyb3VuZDogdXJsKG1vZHVsZXMvTGlnaHRCb3gvaW1hZ2VzL3ByZXZsYWJlbC5naWYpIGxlZnQgMTUlIG5vLXJlcGVhdDsgfQojbmV4dExpbms6aG92ZXIsICNuZXh0TGluazp2aXNpdGVkOmhvdmVyIHsgYmFja2dyb3VuZDogdXJsKG1vZHVsZXMvTGlnaHRCb3gvaW1hZ2VzL25leHRsYWJlbC5naWYpIHJpZ2h0IDE1JSBuby1yZXBlYXQ7IH0KCgojaW1hZ2VEYXRhQ29udGFpbmVyewoJZm9udDogMTBweCBWZXJkYW5hLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7CgliYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwoJbWFyZ2luOiAwIGF1dG87CglsaW5lLWhlaWdodDogMS40ZW07CglvdmVyZmxvdzogYXV0bzsKCXdpZHRoOiAxMDAlCQoJfQoKI2ltYWdlRGF0YXsJcGFkZGluZzowIDEwcHg7IGNvbG9yOiAjNjY2OyB9CiNpbWFnZURhdGEgI2ltYWdlRGV0YWlsc3sgd2lkdGg6IDcwJTsgZmxvYXQ6IGxlZnQ7IHRleHQtYWxpZ246IGxlZnQ7IH0JCiNpbWFnZURhdGEgI2NhcHRpb257IGZvbnQtd2VpZ2h0OiBib2xkOwl9CiNpbWFnZURhdGEgI251bWJlckRpc3BsYXl7IGRpc3BsYXk6IGJsb2NrOyBjbGVhcjogbGVmdDsgcGFkZGluZy1ib3R0b206IDEuMGVtOwl9CQkJCiNpbWFnZURhdGEgI2JvdHRvbU5hdkNsb3NleyB3aWR0aDogNjZweDsgZmxvYXQ6IHJpZ2h0OyAgcGFkZGluZy1ib3R0b206IDAuN2VtOwl9CQoJCQojb3ZlcmxheXsKCXBvc2l0aW9uOiBhYnNvbHV0ZTsKCXRvcDogMDsKCWxlZnQ6IDA7Cgl6LWluZGV4OiA5MDsKCXdpZHRoOiAxMDAlOwoJaGVpZ2h0OiA1MDBweDsKCWJhY2tncm91bmQtY29sb3I6ICMwMDA7Cgl9Cg==]]></data>
	</file>
	<file>
	  <filename>/docs/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/docs/COPYING</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ICAgICAgICAgICAgICAgICAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQogICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMywgMjkgSnVuZSAyMDA3CgogQ29weXJpZ2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiA8aHR0cDovL2ZzZi5vcmcvPgogRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCiBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVhbWJsZQoKICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgYSBmcmVlLCBjb3B5bGVmdCBsaWNlbnNlIGZvcgpzb2Z0d2FyZSBhbmQgb3RoZXIga2luZHMgb2Ygd29ya3MuCgogIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhbmQgb3RoZXIgcHJhY3RpY2FsIHdvcmtzIGFyZSBkZXNpZ25lZAp0byB0YWtlIGF3YXkgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgdGhlIHdvcmtzLiAgQnkgY29udHJhc3QsCnRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvCnNoYXJlIGFuZCBjaGFuZ2UgYWxsIHZlcnNpb25zIG9mIGEgcHJvZ3JhbS0tdG8gbWFrZSBzdXJlIGl0IHJlbWFpbnMgZnJlZQpzb2Z0d2FyZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFdlLCB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB1c2UgdGhlCkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3N0IG9mIG91ciBzb2Z0d2FyZTsgaXQgYXBwbGllcyBhbHNvIHRvCmFueSBvdGhlciB3b3JrIHJlbGVhc2VkIHRoaXMgd2F5IGJ5IGl0cyBhdXRob3JzLiAgWW91IGNhbiBhcHBseSBpdCB0bwp5b3VyIHByb2dyYW1zLCB0b28uCgogIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQpoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCnRoZW0gaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQgaWYgeW91CndhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3CmZyZWUgcHJvZ3JhbXMsIGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgoKICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIHByZXZlbnQgb3RoZXJzIGZyb20gZGVueWluZyB5b3UKdGhlc2UgcmlnaHRzIG9yIGFza2luZyB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuICBUaGVyZWZvcmUsIHlvdSBoYXZlCmNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZgp5b3UgbW9kaWZ5IGl0OiByZXNwb25zaWJpbGl0aWVzIHRvIHJlc3BlY3QgdGhlIGZyZWVkb20gb2Ygb3RoZXJzLgoKICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCmdyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IHBhc3Mgb24gdG8gdGhlIHJlY2lwaWVudHMgdGhlIHNhbWUKZnJlZWRvbXMgdGhhdCB5b3UgcmVjZWl2ZWQuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUKb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkKa25vdyB0aGVpciByaWdodHMuCgogIERldmVsb3BlcnMgdGhhdCB1c2UgdGhlIEdOVSBHUEwgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczoKKDEpIGFzc2VydCBjb3B5cmlnaHQgb24gdGhlIHNvZnR3YXJlLCBhbmQgKDIpIG9mZmVyIHlvdSB0aGlzIExpY2Vuc2UKZ2l2aW5nIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSBpdC4KCiAgRm9yIHRoZSBkZXZlbG9wZXJzJyBhbmQgYXV0aG9ycycgcHJvdGVjdGlvbiwgdGhlIEdQTCBjbGVhcmx5IGV4cGxhaW5zCnRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gIEZvciBib3RoIHVzZXJzJyBhbmQKYXV0aG9ycycgc2FrZSwgdGhlIEdQTCByZXF1aXJlcyB0aGF0IG1vZGlmaWVkIHZlcnNpb25zIGJlIG1hcmtlZCBhcwpjaGFuZ2VkLCBzbyB0aGF0IHRoZWlyIHByb2JsZW1zIHdpbGwgbm90IGJlIGF0dHJpYnV0ZWQgZXJyb25lb3VzbHkgdG8KYXV0aG9ycyBvZiBwcmV2aW91cyB2ZXJzaW9ucy4KCiAgU29tZSBkZXZpY2VzIGFyZSBkZXNpZ25lZCB0byBkZW55IHVzZXJzIGFjY2VzcyB0byBpbnN0YWxsIG9yIHJ1bgptb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgc29mdHdhcmUgaW5zaWRlIHRoZW0sIGFsdGhvdWdoIHRoZSBtYW51ZmFjdHVyZXIKY2FuIGRvIHNvLiAgVGhpcyBpcyBmdW5kYW1lbnRhbGx5IGluY29tcGF0aWJsZSB3aXRoIHRoZSBhaW0gb2YKcHJvdGVjdGluZyB1c2VycycgZnJlZWRvbSB0byBjaGFuZ2UgdGhlIHNvZnR3YXJlLiAgVGhlIHN5c3RlbWF0aWMKcGF0dGVybiBvZiBzdWNoIGFidXNlIG9jY3VycyBpbiB0aGUgYXJlYSBvZiBwcm9kdWN0cyBmb3IgaW5kaXZpZHVhbHMgdG8KdXNlLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hlcmUgaXQgaXMgbW9zdCB1bmFjY2VwdGFibGUuICBUaGVyZWZvcmUsIHdlCmhhdmUgZGVzaWduZWQgdGhpcyB2ZXJzaW9uIG9mIHRoZSBHUEwgdG8gcHJvaGliaXQgdGhlIHByYWN0aWNlIGZvciB0aG9zZQpwcm9kdWN0cy4gIElmIHN1Y2ggcHJvYmxlbXMgYXJpc2Ugc3Vic3RhbnRpYWxseSBpbiBvdGhlciBkb21haW5zLCB3ZQpzdGFuZCByZWFkeSB0byBleHRlbmQgdGhpcyBwcm92aXNpb24gdG8gdGhvc2UgZG9tYWlucyBpbiBmdXR1cmUgdmVyc2lvbnMKb2YgdGhlIEdQTCwgYXMgbmVlZGVkIHRvIHByb3RlY3QgdGhlIGZyZWVkb20gb2YgdXNlcnMuCgogIEZpbmFsbHksIGV2ZXJ5IHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlIHBhdGVudHMuClN0YXRlcyBzaG91bGQgbm90IGFsbG93IHBhdGVudHMgdG8gcmVzdHJpY3QgZGV2ZWxvcG1lbnQgYW5kIHVzZSBvZgpzb2Z0d2FyZSBvbiBnZW5lcmFsLXB1cnBvc2UgY29tcHV0ZXJzLCBidXQgaW4gdGhvc2UgdGhhdCBkbywgd2Ugd2lzaCB0bwphdm9pZCB0aGUgc3BlY2lhbCBkYW5nZXIgdGhhdCBwYXRlbnRzIGFwcGxpZWQgdG8gYSBmcmVlIHByb2dyYW0gY291bGQKbWFrZSBpdCBlZmZlY3RpdmVseSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgdGhlIEdQTCBhc3N1cmVzIHRoYXQKcGF0ZW50cyBjYW5ub3QgYmUgdXNlZCB0byByZW5kZXIgdGhlIHByb2dyYW0gbm9uLWZyZWUuCgogIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCm1vZGlmaWNhdGlvbiBmb2xsb3cuCgogICAgICAgICAgICAgICAgICAgICAgIFRFUk1TIEFORCBDT05ESVRJT05TCgogIDAuIERlZmluaXRpb25zLgoKICAiVGhpcyBMaWNlbnNlIiByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KCiAgIkNvcHlyaWdodCIgYWxzbyBtZWFucyBjb3B5cmlnaHQtbGlrZSBsYXdzIHRoYXQgYXBwbHkgdG8gb3RoZXIga2luZHMgb2YKd29ya3MsIHN1Y2ggYXMgc2VtaWNvbmR1Y3RvciBtYXNrcy4KCiAgIlRoZSBQcm9ncmFtIiByZWZlcnMgdG8gYW55IGNvcHlyaWdodGFibGUgd29yayBsaWNlbnNlZCB1bmRlciB0aGlzCkxpY2Vuc2UuICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4gICJMaWNlbnNlZXMiIGFuZAoicmVjaXBpZW50cyIgbWF5IGJlIGluZGl2aWR1YWxzIG9yIG9yZ2FuaXphdGlvbnMuCgogIFRvICJtb2RpZnkiIGEgd29yayBtZWFucyB0byBjb3B5IGZyb20gb3IgYWRhcHQgYWxsIG9yIHBhcnQgb2YgdGhlIHdvcmsKaW4gYSBmYXNoaW9uIHJlcXVpcmluZyBjb3B5cmlnaHQgcGVybWlzc2lvbiwgb3RoZXIgdGhhbiB0aGUgbWFraW5nIG9mIGFuCmV4YWN0IGNvcHkuICBUaGUgcmVzdWx0aW5nIHdvcmsgaXMgY2FsbGVkIGEgIm1vZGlmaWVkIHZlcnNpb24iIG9mIHRoZQplYXJsaWVyIHdvcmsgb3IgYSB3b3JrICJiYXNlZCBvbiIgdGhlIGVhcmxpZXIgd29yay4KCiAgQSAiY292ZXJlZCB3b3JrIiBtZWFucyBlaXRoZXIgdGhlIHVubW9kaWZpZWQgUHJvZ3JhbSBvciBhIHdvcmsgYmFzZWQKb24gdGhlIFByb2dyYW0uCgogIFRvICJwcm9wYWdhdGUiIGEgd29yayBtZWFucyB0byBkbyBhbnl0aGluZyB3aXRoIGl0IHRoYXQsIHdpdGhvdXQKcGVybWlzc2lvbiwgd291bGQgbWFrZSB5b3UgZGlyZWN0bHkgb3Igc2Vjb25kYXJpbHkgbGlhYmxlIGZvcgppbmZyaW5nZW1lbnQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3LCBleGNlcHQgZXhlY3V0aW5nIGl0IG9uIGEKY29tcHV0ZXIgb3IgbW9kaWZ5aW5nIGEgcHJpdmF0ZSBjb3B5LiAgUHJvcGFnYXRpb24gaW5jbHVkZXMgY29weWluZywKZGlzdHJpYnV0aW9uICh3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uKSwgbWFraW5nIGF2YWlsYWJsZSB0byB0aGUKcHVibGljLCBhbmQgaW4gc29tZSBjb3VudHJpZXMgb3RoZXIgYWN0aXZpdGllcyBhcyB3ZWxsLgoKICBUbyAiY29udmV5IiBhIHdvcmsgbWVhbnMgYW55IGtpbmQgb2YgcHJvcGFnYXRpb24gdGhhdCBlbmFibGVzIG90aGVyCnBhcnRpZXMgdG8gbWFrZSBvciByZWNlaXZlIGNvcGllcy4gIE1lcmUgaW50ZXJhY3Rpb24gd2l0aCBhIHVzZXIgdGhyb3VnaAphIGNvbXB1dGVyIG5ldHdvcmssIHdpdGggbm8gdHJhbnNmZXIgb2YgYSBjb3B5LCBpcyBub3QgY29udmV5aW5nLgoKICBBbiBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZSBkaXNwbGF5cyAiQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcyIKdG8gdGhlIGV4dGVudCB0aGF0IGl0IGluY2x1ZGVzIGEgY29udmVuaWVudCBhbmQgcHJvbWluZW50bHkgdmlzaWJsZQpmZWF0dXJlIHRoYXQgKDEpIGRpc3BsYXlzIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UsIGFuZCAoMikKdGVsbHMgdGhlIHVzZXIgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhlIHdvcmsgKGV4Y2VwdCB0byB0aGUKZXh0ZW50IHRoYXQgd2FycmFudGllcyBhcmUgcHJvdmlkZWQpLCB0aGF0IGxpY2Vuc2VlcyBtYXkgY29udmV5IHRoZQp3b3JrIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZgp0aGUgaW50ZXJmYWNlIHByZXNlbnRzIGEgbGlzdCBvZiB1c2VyIGNvbW1hbmRzIG9yIG9wdGlvbnMsIHN1Y2ggYXMgYQptZW51LCBhIHByb21pbmVudCBpdGVtIGluIHRoZSBsaXN0IG1lZXRzIHRoaXMgY3JpdGVyaW9uLgoKICAxLiBTb3VyY2UgQ29kZS4KCiAgVGhlICJzb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsKZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgIk9iamVjdCBjb2RlIiBtZWFucyBhbnkgbm9uLXNvdXJjZQpmb3JtIG9mIGEgd29yay4KCiAgQSAiU3RhbmRhcmQgSW50ZXJmYWNlIiBtZWFucyBhbiBpbnRlcmZhY2UgdGhhdCBlaXRoZXIgaXMgYW4gb2ZmaWNpYWwKc3RhbmRhcmQgZGVmaW5lZCBieSBhIHJlY29nbml6ZWQgc3RhbmRhcmRzIGJvZHksIG9yLCBpbiB0aGUgY2FzZSBvZgppbnRlcmZhY2VzIHNwZWNpZmllZCBmb3IgYSBwYXJ0aWN1bGFyIHByb2dyYW1taW5nIGxhbmd1YWdlLCBvbmUgdGhhdAppcyB3aWRlbHkgdXNlZCBhbW9uZyBkZXZlbG9wZXJzIHdvcmtpbmcgaW4gdGhhdCBsYW5ndWFnZS4KCiAgVGhlICJTeXN0ZW0gTGlicmFyaWVzIiBvZiBhbiBleGVjdXRhYmxlIHdvcmsgaW5jbHVkZSBhbnl0aGluZywgb3RoZXIKdGhhbiB0aGUgd29yayBhcyBhIHdob2xlLCB0aGF0IChhKSBpcyBpbmNsdWRlZCBpbiB0aGUgbm9ybWFsIGZvcm0gb2YKcGFja2FnaW5nIGEgTWFqb3IgQ29tcG9uZW50LCBidXQgd2hpY2ggaXMgbm90IHBhcnQgb2YgdGhhdCBNYWpvcgpDb21wb25lbnQsIGFuZCAoYikgc2VydmVzIG9ubHkgdG8gZW5hYmxlIHVzZSBvZiB0aGUgd29yayB3aXRoIHRoYXQKTWFqb3IgQ29tcG9uZW50LCBvciB0byBpbXBsZW1lbnQgYSBTdGFuZGFyZCBJbnRlcmZhY2UgZm9yIHdoaWNoIGFuCmltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluIHNvdXJjZSBjb2RlIGZvcm0uICBBCiJNYWpvciBDb21wb25lbnQiLCBpbiB0aGlzIGNvbnRleHQsIG1lYW5zIGEgbWFqb3IgZXNzZW50aWFsIGNvbXBvbmVudAooa2VybmVsLCB3aW5kb3cgc3lzdGVtLCBhbmQgc28gb24pIG9mIHRoZSBzcGVjaWZpYyBvcGVyYXRpbmcgc3lzdGVtCihpZiBhbnkpIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHdvcmsgcnVucywgb3IgYSBjb21waWxlciB1c2VkIHRvCnByb2R1Y2UgdGhlIHdvcmssIG9yIGFuIG9iamVjdCBjb2RlIGludGVycHJldGVyIHVzZWQgdG8gcnVuIGl0LgoKICBUaGUgIkNvcnJlc3BvbmRpbmcgU291cmNlIiBmb3IgYSB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gbWVhbnMgYWxsCnRoZSBzb3VyY2UgY29kZSBuZWVkZWQgdG8gZ2VuZXJhdGUsIGluc3RhbGwsIGFuZCAoZm9yIGFuIGV4ZWN1dGFibGUKd29yaykgcnVuIHRoZSBvYmplY3QgY29kZSBhbmQgdG8gbW9kaWZ5IHRoZSB3b3JrLCBpbmNsdWRpbmcgc2NyaXB0cyB0bwpjb250cm9sIHRob3NlIGFjdGl2aXRpZXMuICBIb3dldmVyLCBpdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSB3b3JrJ3MKU3lzdGVtIExpYnJhcmllcywgb3IgZ2VuZXJhbC1wdXJwb3NlIHRvb2xzIG9yIGdlbmVyYWxseSBhdmFpbGFibGUgZnJlZQpwcm9ncmFtcyB3aGljaCBhcmUgdXNlZCB1bm1vZGlmaWVkIGluIHBlcmZvcm1pbmcgdGhvc2UgYWN0aXZpdGllcyBidXQKd2hpY2ggYXJlIG5vdCBwYXJ0IG9mIHRoZSB3b3JrLiAgRm9yIGV4YW1wbGUsIENvcnJlc3BvbmRpbmcgU291cmNlCmluY2x1ZGVzIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBzb3VyY2UgZmlsZXMgZm9yCnRoZSB3b3JrLCBhbmQgdGhlIHNvdXJjZSBjb2RlIGZvciBzaGFyZWQgbGlicmFyaWVzIGFuZCBkeW5hbWljYWxseQpsaW5rZWQgc3VicHJvZ3JhbXMgdGhhdCB0aGUgd29yayBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gcmVxdWlyZSwKc3VjaCBhcyBieSBpbnRpbWF0ZSBkYXRhIGNvbW11bmljYXRpb24gb3IgY29udHJvbCBmbG93IGJldHdlZW4gdGhvc2UKc3VicHJvZ3JhbXMgYW5kIG90aGVyIHBhcnRzIG9mIHRoZSB3b3JrLgoKICBUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IHVzZXJzCmNhbiByZWdlbmVyYXRlIGF1dG9tYXRpY2FsbHkgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgQ29ycmVzcG9uZGluZwpTb3VyY2UuCgogIFRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYSB3b3JrIGluIHNvdXJjZSBjb2RlIGZvcm0gaXMgdGhhdApzYW1lIHdvcmsuCgogIDIuIEJhc2ljIFBlcm1pc3Npb25zLgoKICBBbGwgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFyZSBncmFudGVkIGZvciB0aGUgdGVybSBvZgpjb3B5cmlnaHQgb24gdGhlIFByb2dyYW0sIGFuZCBhcmUgaXJyZXZvY2FibGUgcHJvdmlkZWQgdGhlIHN0YXRlZApjb25kaXRpb25zIGFyZSBtZXQuICBUaGlzIExpY2Vuc2UgZXhwbGljaXRseSBhZmZpcm1zIHlvdXIgdW5saW1pdGVkCnBlcm1pc3Npb24gdG8gcnVuIHRoZSB1bm1vZGlmaWVkIFByb2dyYW0uICBUaGUgb3V0cHV0IGZyb20gcnVubmluZyBhCmNvdmVyZWQgd29yayBpcyBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSBvbmx5IGlmIHRoZSBvdXRwdXQsIGdpdmVuIGl0cwpjb250ZW50LCBjb25zdGl0dXRlcyBhIGNvdmVyZWQgd29yay4gIFRoaXMgTGljZW5zZSBhY2tub3dsZWRnZXMgeW91cgpyaWdodHMgb2YgZmFpciB1c2Ugb3Igb3RoZXIgZXF1aXZhbGVudCwgYXMgcHJvdmlkZWQgYnkgY29weXJpZ2h0IGxhdy4KCiAgWW91IG1heSBtYWtlLCBydW4gYW5kIHByb3BhZ2F0ZSBjb3ZlcmVkIHdvcmtzIHRoYXQgeW91IGRvIG5vdApjb252ZXksIHdpdGhvdXQgY29uZGl0aW9ucyBzbyBsb25nIGFzIHlvdXIgbGljZW5zZSBvdGhlcndpc2UgcmVtYWlucwppbiBmb3JjZS4gIFlvdSBtYXkgY29udmV5IGNvdmVyZWQgd29ya3MgdG8gb3RoZXJzIGZvciB0aGUgc29sZSBwdXJwb3NlCm9mIGhhdmluZyB0aGVtIG1ha2UgbW9kaWZpY2F0aW9ucyBleGNsdXNpdmVseSBmb3IgeW91LCBvciBwcm92aWRlIHlvdQp3aXRoIGZhY2lsaXRpZXMgZm9yIHJ1bm5pbmcgdGhvc2Ugd29ya3MsIHByb3ZpZGVkIHRoYXQgeW91IGNvbXBseSB3aXRoCnRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW4gY29udmV5aW5nIGFsbCBtYXRlcmlhbCBmb3Igd2hpY2ggeW91IGRvCm5vdCBjb250cm9sIGNvcHlyaWdodC4gIFRob3NlIHRodXMgbWFraW5nIG9yIHJ1bm5pbmcgdGhlIGNvdmVyZWQgd29ya3MKZm9yIHlvdSBtdXN0IGRvIHNvIGV4Y2x1c2l2ZWx5IG9uIHlvdXIgYmVoYWxmLCB1bmRlciB5b3VyIGRpcmVjdGlvbgphbmQgY29udHJvbCwgb24gdGVybXMgdGhhdCBwcm9oaWJpdCB0aGVtIGZyb20gbWFraW5nIGFueSBjb3BpZXMgb2YKeW91ciBjb3B5cmlnaHRlZCBtYXRlcmlhbCBvdXRzaWRlIHRoZWlyIHJlbGF0aW9uc2hpcCB3aXRoIHlvdS4KCiAgQ29udmV5aW5nIHVuZGVyIGFueSBvdGhlciBjaXJjdW1zdGFuY2VzIGlzIHBlcm1pdHRlZCBzb2xlbHkgdW5kZXIKdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGJlbG93LiAgU3VibGljZW5zaW5nIGlzIG5vdCBhbGxvd2VkOyBzZWN0aW9uIDEwCm1ha2VzIGl0IHVubmVjZXNzYXJ5LgoKICAzLiBQcm90ZWN0aW5nIFVzZXJzJyBMZWdhbCBSaWdodHMgRnJvbSBBbnRpLUNpcmN1bXZlbnRpb24gTGF3LgoKICBObyBjb3ZlcmVkIHdvcmsgc2hhbGwgYmUgZGVlbWVkIHBhcnQgb2YgYW4gZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwKbWVhc3VyZSB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcgZnVsZmlsbGluZyBvYmxpZ2F0aW9ucyB1bmRlciBhcnRpY2xlCjExIG9mIHRoZSBXSVBPIGNvcHlyaWdodCB0cmVhdHkgYWRvcHRlZCBvbiAyMCBEZWNlbWJlciAxOTk2LCBvcgpzaW1pbGFyIGxhd3MgcHJvaGliaXRpbmcgb3IgcmVzdHJpY3RpbmcgY2lyY3VtdmVudGlvbiBvZiBzdWNoCm1lYXN1cmVzLgoKICBXaGVuIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIHlvdSB3YWl2ZSBhbnkgbGVnYWwgcG93ZXIgdG8gZm9yYmlkCmNpcmN1bXZlbnRpb24gb2YgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0byB0aGUgZXh0ZW50IHN1Y2ggY2lyY3VtdmVudGlvbgppcyBlZmZlY3RlZCBieSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvCnRoZSBjb3ZlcmVkIHdvcmssIGFuZCB5b3UgZGlzY2xhaW0gYW55IGludGVudGlvbiB0byBsaW1pdCBvcGVyYXRpb24gb3IKbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGFzIGEgbWVhbnMgb2YgZW5mb3JjaW5nLCBhZ2FpbnN0IHRoZSB3b3JrJ3MKdXNlcnMsIHlvdXIgb3IgdGhpcmQgcGFydGllcycgbGVnYWwgcmlnaHRzIHRvIGZvcmJpZCBjaXJjdW12ZW50aW9uIG9mCnRlY2hub2xvZ2ljYWwgbWVhc3VyZXMuCgogIDQuIENvbnZleWluZyBWZXJiYXRpbSBDb3BpZXMuCgogIFlvdSBtYXkgY29udmV5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzIHNvdXJjZSBjb2RlIGFzIHlvdQpyZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZAphcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2U7CmtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHN0YXRpbmcgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFueQpub24tcGVybWlzc2l2ZSB0ZXJtcyBhZGRlZCBpbiBhY2NvcmQgd2l0aCBzZWN0aW9uIDcgYXBwbHkgdG8gdGhlIGNvZGU7CmtlZXAgaW50YWN0IGFsbCBub3RpY2VzIG9mIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYWxsCnJlY2lwaWVudHMgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgoKICBZb3UgbWF5IGNoYXJnZSBhbnkgcHJpY2Ugb3Igbm8gcHJpY2UgZm9yIGVhY2ggY29weSB0aGF0IHlvdSBjb252ZXksCmFuZCB5b3UgbWF5IG9mZmVyIHN1cHBvcnQgb3Igd2FycmFudHkgcHJvdGVjdGlvbiBmb3IgYSBmZWUuCgogIDUuIENvbnZleWluZyBNb2RpZmllZCBTb3VyY2UgVmVyc2lvbnMuCgogIFlvdSBtYXkgY29udmV5IGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgb3IgdGhlIG1vZGlmaWNhdGlvbnMgdG8KcHJvZHVjZSBpdCBmcm9tIHRoZSBQcm9ncmFtLCBpbiB0aGUgZm9ybSBvZiBzb3VyY2UgY29kZSB1bmRlciB0aGUKdGVybXMgb2Ygc2VjdGlvbiA0LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CgogICAgYSkgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IG1vZGlmaWVkCiAgICBpdCwgYW5kIGdpdmluZyBhIHJlbGV2YW50IGRhdGUuCgogICAgYikgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgaXQgaXMKICAgIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IGNvbmRpdGlvbnMgYWRkZWQgdW5kZXIgc2VjdGlvbgogICAgNy4gIFRoaXMgcmVxdWlyZW1lbnQgbW9kaWZpZXMgdGhlIHJlcXVpcmVtZW50IGluIHNlY3Rpb24gNCB0bwogICAgImtlZXAgaW50YWN0IGFsbCBub3RpY2VzIi4KCiAgICBjKSBZb3UgbXVzdCBsaWNlbnNlIHRoZSBlbnRpcmUgd29yaywgYXMgYSB3aG9sZSwgdW5kZXIgdGhpcwogICAgTGljZW5zZSB0byBhbnlvbmUgd2hvIGNvbWVzIGludG8gcG9zc2Vzc2lvbiBvZiBhIGNvcHkuICBUaGlzCiAgICBMaWNlbnNlIHdpbGwgdGhlcmVmb3JlIGFwcGx5LCBhbG9uZyB3aXRoIGFueSBhcHBsaWNhYmxlIHNlY3Rpb24gNwogICAgYWRkaXRpb25hbCB0ZXJtcywgdG8gdGhlIHdob2xlIG9mIHRoZSB3b3JrLCBhbmQgYWxsIGl0cyBwYXJ0cywKICAgIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZXkgYXJlIHBhY2thZ2VkLiAgVGhpcyBMaWNlbnNlIGdpdmVzIG5vCiAgICBwZXJtaXNzaW9uIHRvIGxpY2Vuc2UgdGhlIHdvcmsgaW4gYW55IG90aGVyIHdheSwgYnV0IGl0IGRvZXMgbm90CiAgICBpbnZhbGlkYXRlIHN1Y2ggcGVybWlzc2lvbiBpZiB5b3UgaGF2ZSBzZXBhcmF0ZWx5IHJlY2VpdmVkIGl0LgoKICAgIGQpIElmIHRoZSB3b3JrIGhhcyBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZXMsIGVhY2ggbXVzdCBkaXNwbGF5CiAgICBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzOyBob3dldmVyLCBpZiB0aGUgUHJvZ3JhbSBoYXMgaW50ZXJhY3RpdmUKICAgIGludGVyZmFjZXMgdGhhdCBkbyBub3QgZGlzcGxheSBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzLCB5b3VyCiAgICB3b3JrIG5lZWQgbm90IG1ha2UgdGhlbSBkbyBzby4KCiAgQSBjb21waWxhdGlvbiBvZiBhIGNvdmVyZWQgd29yayB3aXRoIG90aGVyIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudAp3b3Jrcywgd2hpY2ggYXJlIG5vdCBieSB0aGVpciBuYXR1cmUgZXh0ZW5zaW9ucyBvZiB0aGUgY292ZXJlZCB3b3JrLAphbmQgd2hpY2ggYXJlIG5vdCBjb21iaW5lZCB3aXRoIGl0IHN1Y2ggYXMgdG8gZm9ybSBhIGxhcmdlciBwcm9ncmFtLAppbiBvciBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSwgaXMgY2FsbGVkIGFuCiJhZ2dyZWdhdGUiIGlmIHRoZSBjb21waWxhdGlvbiBhbmQgaXRzIHJlc3VsdGluZyBjb3B5cmlnaHQgYXJlIG5vdAp1c2VkIHRvIGxpbWl0IHRoZSBhY2Nlc3Mgb3IgbGVnYWwgcmlnaHRzIG9mIHRoZSBjb21waWxhdGlvbidzIHVzZXJzCmJleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4gIEluY2x1c2lvbiBvZiBhIGNvdmVyZWQgd29yawppbiBhbiBhZ2dyZWdhdGUgZG9lcyBub3QgY2F1c2UgdGhpcyBMaWNlbnNlIHRvIGFwcGx5IHRvIHRoZSBvdGhlcgpwYXJ0cyBvZiB0aGUgYWdncmVnYXRlLgoKICA2LiBDb252ZXlpbmcgTm9uLVNvdXJjZSBGb3Jtcy4KCiAgWW91IG1heSBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMKb2Ygc2VjdGlvbnMgNCBhbmQgNSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBjb252ZXkgdGhlCm1hY2hpbmUtcmVhZGFibGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwKaW4gb25lIG9mIHRoZXNlIHdheXM6CgogICAgYSkgQ29udmV5IHRoZSBvYmplY3QgY29kZSBpbiwgb3IgZW1ib2RpZWQgaW4sIGEgcGh5c2ljYWwgcHJvZHVjdAogICAgKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiBtZWRpdW0pLCBhY2NvbXBhbmllZCBieSB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGZpeGVkIG9uIGEgZHVyYWJsZSBwaHlzaWNhbCBtZWRpdW0KICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgoKICAgIGIpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKICAgIChpbmNsdWRpbmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgYQogICAgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzIGFuZCB2YWxpZCBmb3IgYXMKICAgIGxvbmcgYXMgeW91IG9mZmVyIHNwYXJlIHBhcnRzIG9yIGN1c3RvbWVyIHN1cHBvcnQgZm9yIHRoYXQgcHJvZHVjdAogICAgbW9kZWwsIHRvIGdpdmUgYW55b25lIHdobyBwb3NzZXNzZXMgdGhlIG9iamVjdCBjb2RlIGVpdGhlciAoMSkgYQogICAgY29weSBvZiB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGFsbCB0aGUgc29mdHdhcmUgaW4gdGhlCiAgICBwcm9kdWN0IHRoYXQgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIG9uIGEgZHVyYWJsZSBwaHlzaWNhbAogICAgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLCBmb3IgYSBwcmljZSBubwogICAgbW9yZSB0aGFuIHlvdXIgcmVhc29uYWJsZSBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyB0aGlzCiAgICBjb252ZXlpbmcgb2Ygc291cmNlLCBvciAoMikgYWNjZXNzIHRvIGNvcHkgdGhlCiAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBmcm9tIGEgbmV0d29yayBzZXJ2ZXIgYXQgbm8gY2hhcmdlLgoKICAgIGMpIENvbnZleSBpbmRpdmlkdWFsIGNvcGllcyBvZiB0aGUgb2JqZWN0IGNvZGUgd2l0aCBhIGNvcHkgb2YgdGhlCiAgICB3cml0dGVuIG9mZmVyIHRvIHByb3ZpZGUgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhpcwogICAgYWx0ZXJuYXRpdmUgaXMgYWxsb3dlZCBvbmx5IG9jY2FzaW9uYWxseSBhbmQgbm9uY29tbWVyY2lhbGx5LCBhbmQKICAgIG9ubHkgaWYgeW91IHJlY2VpdmVkIHRoZSBvYmplY3QgY29kZSB3aXRoIHN1Y2ggYW4gb2ZmZXIsIGluIGFjY29yZAogICAgd2l0aCBzdWJzZWN0aW9uIDZiLgoKICAgIGQpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIGZyb20gYSBkZXNpZ25hdGVkCiAgICBwbGFjZSAoZ3JhdGlzIG9yIGZvciBhIGNoYXJnZSksIGFuZCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGluIHRoZSBzYW1lIHdheSB0aHJvdWdoIHRoZSBzYW1lIHBsYWNlIGF0IG5vCiAgICBmdXJ0aGVyIGNoYXJnZS4gIFlvdSBuZWVkIG5vdCByZXF1aXJlIHJlY2lwaWVudHMgdG8gY29weSB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLiAgSWYgdGhlIHBsYWNlIHRvCiAgICBjb3B5IHRoZSBvYmplY3QgY29kZSBpcyBhIG5ldHdvcmsgc2VydmVyLCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UKICAgIG1heSBiZSBvbiBhIGRpZmZlcmVudCBzZXJ2ZXIgKG9wZXJhdGVkIGJ5IHlvdSBvciBhIHRoaXJkIHBhcnR5KQogICAgdGhhdCBzdXBwb3J0cyBlcXVpdmFsZW50IGNvcHlpbmcgZmFjaWxpdGllcywgcHJvdmlkZWQgeW91IG1haW50YWluCiAgICBjbGVhciBkaXJlY3Rpb25zIG5leHQgdG8gdGhlIG9iamVjdCBjb2RlIHNheWluZyB3aGVyZSB0byBmaW5kIHRoZQogICAgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBSZWdhcmRsZXNzIG9mIHdoYXQgc2VydmVyIGhvc3RzIHRoZQogICAgQ29ycmVzcG9uZGluZyBTb3VyY2UsIHlvdSByZW1haW4gb2JsaWdhdGVkIHRvIGVuc3VyZSB0aGF0IGl0IGlzCiAgICBhdmFpbGFibGUgZm9yIGFzIGxvbmcgYXMgbmVlZGVkIHRvIHNhdGlzZnkgdGhlc2UgcmVxdWlyZW1lbnRzLgoKICAgIGUpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbiwgcHJvdmlkZWQKICAgIHlvdSBpbmZvcm0gb3RoZXIgcGVlcnMgd2hlcmUgdGhlIG9iamVjdCBjb2RlIGFuZCBDb3JyZXNwb25kaW5nCiAgICBTb3VyY2Ugb2YgdGhlIHdvcmsgYXJlIGJlaW5nIG9mZmVyZWQgdG8gdGhlIGdlbmVyYWwgcHVibGljIGF0IG5vCiAgICBjaGFyZ2UgdW5kZXIgc3Vic2VjdGlvbiA2ZC4KCiAgQSBzZXBhcmFibGUgcG9ydGlvbiBvZiB0aGUgb2JqZWN0IGNvZGUsIHdob3NlIHNvdXJjZSBjb2RlIGlzIGV4Y2x1ZGVkCmZyb20gdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGFzIGEgU3lzdGVtIExpYnJhcnksIG5lZWQgbm90IGJlCmluY2x1ZGVkIGluIGNvbnZleWluZyB0aGUgb2JqZWN0IGNvZGUgd29yay4KCiAgQSAiVXNlciBQcm9kdWN0IiBpcyBlaXRoZXIgKDEpIGEgImNvbnN1bWVyIHByb2R1Y3QiLCB3aGljaCBtZWFucyBhbnkKdGFuZ2libGUgcGVyc29uYWwgcHJvcGVydHkgd2hpY2ggaXMgbm9ybWFsbHkgdXNlZCBmb3IgcGVyc29uYWwsIGZhbWlseSwKb3IgaG91c2Vob2xkIHB1cnBvc2VzLCBvciAoMikgYW55dGhpbmcgZGVzaWduZWQgb3Igc29sZCBmb3IgaW5jb3Jwb3JhdGlvbgppbnRvIGEgZHdlbGxpbmcuICBJbiBkZXRlcm1pbmluZyB3aGV0aGVyIGEgcHJvZHVjdCBpcyBhIGNvbnN1bWVyIHByb2R1Y3QsCmRvdWJ0ZnVsIGNhc2VzIHNoYWxsIGJlIHJlc29sdmVkIGluIGZhdm9yIG9mIGNvdmVyYWdlLiAgRm9yIGEgcGFydGljdWxhcgpwcm9kdWN0IHJlY2VpdmVkIGJ5IGEgcGFydGljdWxhciB1c2VyLCAibm9ybWFsbHkgdXNlZCIgcmVmZXJzIHRvIGEKdHlwaWNhbCBvciBjb21tb24gdXNlIG9mIHRoYXQgY2xhc3Mgb2YgcHJvZHVjdCwgcmVnYXJkbGVzcyBvZiB0aGUgc3RhdHVzCm9mIHRoZSBwYXJ0aWN1bGFyIHVzZXIgb3Igb2YgdGhlIHdheSBpbiB3aGljaCB0aGUgcGFydGljdWxhciB1c2VyCmFjdHVhbGx5IHVzZXMsIG9yIGV4cGVjdHMgb3IgaXMgZXhwZWN0ZWQgdG8gdXNlLCB0aGUgcHJvZHVjdC4gIEEgcHJvZHVjdAppcyBhIGNvbnN1bWVyIHByb2R1Y3QgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBwcm9kdWN0IGhhcyBzdWJzdGFudGlhbApjb21tZXJjaWFsLCBpbmR1c3RyaWFsIG9yIG5vbi1jb25zdW1lciB1c2VzLCB1bmxlc3Mgc3VjaCB1c2VzIHJlcHJlc2VudAp0aGUgb25seSBzaWduaWZpY2FudCBtb2RlIG9mIHVzZSBvZiB0aGUgcHJvZHVjdC4KCiAgIkluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiIgZm9yIGEgVXNlciBQcm9kdWN0IG1lYW5zIGFueSBtZXRob2RzLApwcm9jZWR1cmVzLCBhdXRob3JpemF0aW9uIGtleXMsIG9yIG90aGVyIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGluc3RhbGwKYW5kIGV4ZWN1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgYSBjb3ZlcmVkIHdvcmsgaW4gdGhhdCBVc2VyIFByb2R1Y3QgZnJvbQphIG1vZGlmaWVkIHZlcnNpb24gb2YgaXRzIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhlIGluZm9ybWF0aW9uIG11c3QKc3VmZmljZSB0byBlbnN1cmUgdGhhdCB0aGUgY29udGludWVkIGZ1bmN0aW9uaW5nIG9mIHRoZSBtb2RpZmllZCBvYmplY3QKY29kZSBpcyBpbiBubyBjYXNlIHByZXZlbnRlZCBvciBpbnRlcmZlcmVkIHdpdGggc29sZWx5IGJlY2F1c2UKbW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUuCgogIElmIHlvdSBjb252ZXkgYW4gb2JqZWN0IGNvZGUgd29yayB1bmRlciB0aGlzIHNlY3Rpb24gaW4sIG9yIHdpdGgsIG9yCnNwZWNpZmljYWxseSBmb3IgdXNlIGluLCBhIFVzZXIgUHJvZHVjdCwgYW5kIHRoZSBjb252ZXlpbmcgb2NjdXJzIGFzCnBhcnQgb2YgYSB0cmFuc2FjdGlvbiBpbiB3aGljaCB0aGUgcmlnaHQgb2YgcG9zc2Vzc2lvbiBhbmQgdXNlIG9mIHRoZQpVc2VyIFByb2R1Y3QgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHJlY2lwaWVudCBpbiBwZXJwZXR1aXR5IG9yIGZvciBhCmZpeGVkIHRlcm0gKHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSB0cmFuc2FjdGlvbiBpcyBjaGFyYWN0ZXJpemVkKSwgdGhlCkNvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkIHVuZGVyIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGFjY29tcGFuaWVkCmJ5IHRoZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24uICBCdXQgdGhpcyByZXF1aXJlbWVudCBkb2VzIG5vdCBhcHBseQppZiBuZWl0aGVyIHlvdSBub3IgYW55IHRoaXJkIHBhcnR5IHJldGFpbnMgdGhlIGFiaWxpdHkgdG8gaW5zdGFsbAptb2RpZmllZCBvYmplY3QgY29kZSBvbiB0aGUgVXNlciBQcm9kdWN0IChmb3IgZXhhbXBsZSwgdGhlIHdvcmsgaGFzCmJlZW4gaW5zdGFsbGVkIGluIFJPTSkuCgogIFRoZSByZXF1aXJlbWVudCB0byBwcm92aWRlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBkb2VzIG5vdCBpbmNsdWRlIGEKcmVxdWlyZW1lbnQgdG8gY29udGludWUgdG8gcHJvdmlkZSBzdXBwb3J0IHNlcnZpY2UsIHdhcnJhbnR5LCBvciB1cGRhdGVzCmZvciBhIHdvcmsgdGhhdCBoYXMgYmVlbiBtb2RpZmllZCBvciBpbnN0YWxsZWQgYnkgdGhlIHJlY2lwaWVudCwgb3IgZm9yCnRoZSBVc2VyIFByb2R1Y3QgaW4gd2hpY2ggaXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IgaW5zdGFsbGVkLiAgQWNjZXNzIHRvIGEKbmV0d29yayBtYXkgYmUgZGVuaWVkIHdoZW4gdGhlIG1vZGlmaWNhdGlvbiBpdHNlbGYgbWF0ZXJpYWxseSBhbmQKYWR2ZXJzZWx5IGFmZmVjdHMgdGhlIG9wZXJhdGlvbiBvZiB0aGUgbmV0d29yayBvciB2aW9sYXRlcyB0aGUgcnVsZXMgYW5kCnByb3RvY29scyBmb3IgY29tbXVuaWNhdGlvbiBhY3Jvc3MgdGhlIG5ldHdvcmsuCgogIENvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkLCBhbmQgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIHByb3ZpZGVkLAppbiBhY2NvcmQgd2l0aCB0aGlzIHNlY3Rpb24gbXVzdCBiZSBpbiBhIGZvcm1hdCB0aGF0IGlzIHB1YmxpY2x5CmRvY3VtZW50ZWQgKGFuZCB3aXRoIGFuIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluCnNvdXJjZSBjb2RlIGZvcm0pLCBhbmQgbXVzdCByZXF1aXJlIG5vIHNwZWNpYWwgcGFzc3dvcmQgb3Iga2V5IGZvcgp1bnBhY2tpbmcsIHJlYWRpbmcgb3IgY29weWluZy4KCiAgNy4gQWRkaXRpb25hbCBUZXJtcy4KCiAgIkFkZGl0aW9uYWwgcGVybWlzc2lvbnMiIGFyZSB0ZXJtcyB0aGF0IHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMKTGljZW5zZSBieSBtYWtpbmcgZXhjZXB0aW9ucyBmcm9tIG9uZSBvciBtb3JlIG9mIGl0cyBjb25kaXRpb25zLgpBZGRpdGlvbmFsIHBlcm1pc3Npb25zIHRoYXQgYXJlIGFwcGxpY2FibGUgdG8gdGhlIGVudGlyZSBQcm9ncmFtIHNoYWxsCmJlIHRyZWF0ZWQgYXMgdGhvdWdoIHRoZXkgd2VyZSBpbmNsdWRlZCBpbiB0aGlzIExpY2Vuc2UsIHRvIHRoZSBleHRlbnQKdGhhdCB0aGV5IGFyZSB2YWxpZCB1bmRlciBhcHBsaWNhYmxlIGxhdy4gIElmIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMKYXBwbHkgb25seSB0byBwYXJ0IG9mIHRoZSBQcm9ncmFtLCB0aGF0IHBhcnQgbWF5IGJlIHVzZWQgc2VwYXJhdGVseQp1bmRlciB0aG9zZSBwZXJtaXNzaW9ucywgYnV0IHRoZSBlbnRpcmUgUHJvZ3JhbSByZW1haW5zIGdvdmVybmVkIGJ5CnRoaXMgTGljZW5zZSB3aXRob3V0IHJlZ2FyZCB0byB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucy4KCiAgV2hlbiB5b3UgY29udmV5IGEgY29weSBvZiBhIGNvdmVyZWQgd29yaywgeW91IG1heSBhdCB5b3VyIG9wdGlvbgpyZW1vdmUgYW55IGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgZnJvbSB0aGF0IGNvcHksIG9yIGZyb20gYW55IHBhcnQgb2YKaXQuICAoQWRkaXRpb25hbCBwZXJtaXNzaW9ucyBtYXkgYmUgd3JpdHRlbiB0byByZXF1aXJlIHRoZWlyIG93bgpyZW1vdmFsIGluIGNlcnRhaW4gY2FzZXMgd2hlbiB5b3UgbW9kaWZ5IHRoZSB3b3JrLikgIFlvdSBtYXkgcGxhY2UKYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBvbiBtYXRlcmlhbCwgYWRkZWQgYnkgeW91IHRvIGEgY292ZXJlZCB3b3JrLApmb3Igd2hpY2ggeW91IGhhdmUgb3IgY2FuIGdpdmUgYXBwcm9wcmlhdGUgY29weXJpZ2h0IHBlcm1pc3Npb24uCgogIE5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgZm9yIG1hdGVyaWFsIHlvdQphZGQgdG8gYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgKGlmIGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mCnRoYXQgbWF0ZXJpYWwpIHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRlcm1zOgoKICAgIGEpIERpc2NsYWltaW5nIHdhcnJhbnR5IG9yIGxpbWl0aW5nIGxpYWJpbGl0eSBkaWZmZXJlbnRseSBmcm9tIHRoZQogICAgdGVybXMgb2Ygc2VjdGlvbnMgMTUgYW5kIDE2IG9mIHRoaXMgTGljZW5zZTsgb3IKCiAgICBiKSBSZXF1aXJpbmcgcHJlc2VydmF0aW9uIG9mIHNwZWNpZmllZCByZWFzb25hYmxlIGxlZ2FsIG5vdGljZXMgb3IKICAgIGF1dGhvciBhdHRyaWJ1dGlvbnMgaW4gdGhhdCBtYXRlcmlhbCBvciBpbiB0aGUgQXBwcm9wcmlhdGUgTGVnYWwKICAgIE5vdGljZXMgZGlzcGxheWVkIGJ5IHdvcmtzIGNvbnRhaW5pbmcgaXQ7IG9yCgogICAgYykgUHJvaGliaXRpbmcgbWlzcmVwcmVzZW50YXRpb24gb2YgdGhlIG9yaWdpbiBvZiB0aGF0IG1hdGVyaWFsLCBvcgogICAgcmVxdWlyaW5nIHRoYXQgbW9kaWZpZWQgdmVyc2lvbnMgb2Ygc3VjaCBtYXRlcmlhbCBiZSBtYXJrZWQgaW4KICAgIHJlYXNvbmFibGUgd2F5cyBhcyBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgdmVyc2lvbjsgb3IKCiAgICBkKSBMaW1pdGluZyB0aGUgdXNlIGZvciBwdWJsaWNpdHkgcHVycG9zZXMgb2YgbmFtZXMgb2YgbGljZW5zb3JzIG9yCiAgICBhdXRob3JzIG9mIHRoZSBtYXRlcmlhbDsgb3IKCiAgICBlKSBEZWNsaW5pbmcgdG8gZ3JhbnQgcmlnaHRzIHVuZGVyIHRyYWRlbWFyayBsYXcgZm9yIHVzZSBvZiBzb21lCiAgICB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgb3Igc2VydmljZSBtYXJrczsgb3IKCiAgICBmKSBSZXF1aXJpbmcgaW5kZW1uaWZpY2F0aW9uIG9mIGxpY2Vuc29ycyBhbmQgYXV0aG9ycyBvZiB0aGF0CiAgICBtYXRlcmlhbCBieSBhbnlvbmUgd2hvIGNvbnZleXMgdGhlIG1hdGVyaWFsIChvciBtb2RpZmllZCB2ZXJzaW9ucyBvZgogICAgaXQpIHdpdGggY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgb2YgbGlhYmlsaXR5IHRvIHRoZSByZWNpcGllbnQsIGZvcgogICAgYW55IGxpYWJpbGl0eSB0aGF0IHRoZXNlIGNvbnRyYWN0dWFsIGFzc3VtcHRpb25zIGRpcmVjdGx5IGltcG9zZSBvbgogICAgdGhvc2UgbGljZW5zb3JzIGFuZCBhdXRob3JzLgoKICBBbGwgb3RoZXIgbm9uLXBlcm1pc3NpdmUgYWRkaXRpb25hbCB0ZXJtcyBhcmUgY29uc2lkZXJlZCAiZnVydGhlcgpyZXN0cmljdGlvbnMiIHdpdGhpbiB0aGUgbWVhbmluZyBvZiBzZWN0aW9uIDEwLiAgSWYgdGhlIFByb2dyYW0gYXMgeW91CnJlY2VpdmVkIGl0LCBvciBhbnkgcGFydCBvZiBpdCwgY29udGFpbnMgYSBub3RpY2Ugc3RhdGluZyB0aGF0IGl0IGlzCmdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIGEgdGVybSB0aGF0IGlzIGEgZnVydGhlcgpyZXN0cmljdGlvbiwgeW91IG1heSByZW1vdmUgdGhhdCB0ZXJtLiAgSWYgYSBsaWNlbnNlIGRvY3VtZW50IGNvbnRhaW5zCmEgZnVydGhlciByZXN0cmljdGlvbiBidXQgcGVybWl0cyByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcgdW5kZXIgdGhpcwpMaWNlbnNlLCB5b3UgbWF5IGFkZCB0byBhIGNvdmVyZWQgd29yayBtYXRlcmlhbCBnb3Zlcm5lZCBieSB0aGUgdGVybXMKb2YgdGhhdCBsaWNlbnNlIGRvY3VtZW50LCBwcm92aWRlZCB0aGF0IHRoZSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGRvZXMKbm90IHN1cnZpdmUgc3VjaCByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcuCgogIElmIHlvdSBhZGQgdGVybXMgdG8gYSBjb3ZlcmVkIHdvcmsgaW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uLCB5b3UKbXVzdCBwbGFjZSwgaW4gdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcywgYSBzdGF0ZW1lbnQgb2YgdGhlCmFkZGl0aW9uYWwgdGVybXMgdGhhdCBhcHBseSB0byB0aG9zZSBmaWxlcywgb3IgYSBub3RpY2UgaW5kaWNhdGluZwp3aGVyZSB0byBmaW5kIHRoZSBhcHBsaWNhYmxlIHRlcm1zLgoKICBBZGRpdGlvbmFsIHRlcm1zLCBwZXJtaXNzaXZlIG9yIG5vbi1wZXJtaXNzaXZlLCBtYXkgYmUgc3RhdGVkIGluIHRoZQpmb3JtIG9mIGEgc2VwYXJhdGVseSB3cml0dGVuIGxpY2Vuc2UsIG9yIHN0YXRlZCBhcyBleGNlcHRpb25zOwp0aGUgYWJvdmUgcmVxdWlyZW1lbnRzIGFwcGx5IGVpdGhlciB3YXkuCgogIDguIFRlcm1pbmF0aW9uLgoKICBZb3UgbWF5IG5vdCBwcm9wYWdhdGUgb3IgbW9kaWZ5IGEgY292ZXJlZCB3b3JrIGV4Y2VwdCBhcyBleHByZXNzbHkKcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIHByb3BhZ2F0ZSBvcgptb2RpZnkgaXQgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIKdGhpcyBMaWNlbnNlIChpbmNsdWRpbmcgYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoZSB0aGlyZApwYXJhZ3JhcGggb2Ygc2VjdGlvbiAxMSkuCgogIEhvd2V2ZXIsIGlmIHlvdSBjZWFzZSBhbGwgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgdGhlbiB5b3VyCmxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIChhKQpwcm92aXNpb25hbGx5LCB1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxpY2l0bHkgYW5kCmZpbmFsbHkgdGVybWluYXRlcyB5b3VyIGxpY2Vuc2UsIGFuZCAoYikgcGVybWFuZW50bHksIGlmIHRoZSBjb3B5cmlnaHQKaG9sZGVyIGZhaWxzIHRvIG5vdGlmeSB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMKcHJpb3IgdG8gNjAgZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLgoKICBNb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMKcmVpbnN0YXRlZCBwZXJtYW5lbnRseSBpZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3RpZmllcyB5b3Ugb2YgdGhlCnZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMsIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgeW91IGhhdmUKcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbSB0aGF0CmNvcHlyaWdodCBob2xkZXIsIGFuZCB5b3UgY3VyZSB0aGUgdmlvbGF0aW9uIHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIKeW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuCgogIFRlcm1pbmF0aW9uIG9mIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgc2VjdGlvbiBkb2VzIG5vdCB0ZXJtaW5hdGUgdGhlCmxpY2Vuc2VzIG9mIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tIHlvdSB1bmRlcgp0aGlzIExpY2Vuc2UuICBJZiB5b3VyIHJpZ2h0cyBoYXZlIGJlZW4gdGVybWluYXRlZCBhbmQgbm90IHBlcm1hbmVudGx5CnJlaW5zdGF0ZWQsIHlvdSBkbyBub3QgcXVhbGlmeSB0byByZWNlaXZlIG5ldyBsaWNlbnNlcyBmb3IgdGhlIHNhbWUKbWF0ZXJpYWwgdW5kZXIgc2VjdGlvbiAxMC4KCiAgOS4gQWNjZXB0YW5jZSBOb3QgUmVxdWlyZWQgZm9yIEhhdmluZyBDb3BpZXMuCgogIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gcmVjZWl2ZSBvcgpydW4gYSBjb3B5IG9mIHRoZSBQcm9ncmFtLiAgQW5jaWxsYXJ5IHByb3BhZ2F0aW9uIG9mIGEgY292ZXJlZCB3b3JrCm9jY3VycmluZyBzb2xlbHkgYXMgYSBjb25zZXF1ZW5jZSBvZiB1c2luZyBwZWVyLXRvLXBlZXIgdHJhbnNtaXNzaW9uCnRvIHJlY2VpdmUgYSBjb3B5IGxpa2V3aXNlIGRvZXMgbm90IHJlcXVpcmUgYWNjZXB0YW5jZS4gIEhvd2V2ZXIsCm5vdGhpbmcgb3RoZXIgdGhhbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIHByb3BhZ2F0ZSBvcgptb2RpZnkgYW55IGNvdmVyZWQgd29yay4gIFRoZXNlIGFjdGlvbnMgaW5mcmluZ2UgY29weXJpZ2h0IGlmIHlvdSBkbwpub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIHByb3BhZ2F0aW5nIGEKY292ZXJlZCB3b3JrLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzby4KCiAgMTAuIEF1dG9tYXRpYyBMaWNlbnNpbmcgb2YgRG93bnN0cmVhbSBSZWNpcGllbnRzLgoKICBFYWNoIHRpbWUgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5CnJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvcnMsIHRvIHJ1biwgbW9kaWZ5IGFuZApwcm9wYWdhdGUgdGhhdCB3b3JrLCBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlCmZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHdpdGggdGhpcyBMaWNlbnNlLgoKICBBbiAiZW50aXR5IHRyYW5zYWN0aW9uIiBpcyBhIHRyYW5zYWN0aW9uIHRyYW5zZmVycmluZyBjb250cm9sIG9mIGFuCm9yZ2FuaXphdGlvbiwgb3Igc3Vic3RhbnRpYWxseSBhbGwgYXNzZXRzIG9mIG9uZSwgb3Igc3ViZGl2aWRpbmcgYW4Kb3JnYW5pemF0aW9uLCBvciBtZXJnaW5nIG9yZ2FuaXphdGlvbnMuICBJZiBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQKd29yayByZXN1bHRzIGZyb20gYW4gZW50aXR5IHRyYW5zYWN0aW9uLCBlYWNoIHBhcnR5IHRvIHRoYXQKdHJhbnNhY3Rpb24gd2hvIHJlY2VpdmVzIGEgY29weSBvZiB0aGUgd29yayBhbHNvIHJlY2VpdmVzIHdoYXRldmVyCmxpY2Vuc2VzIHRvIHRoZSB3b3JrIHRoZSBwYXJ0eSdzIHByZWRlY2Vzc29yIGluIGludGVyZXN0IGhhZCBvciBjb3VsZApnaXZlIHVuZGVyIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGgsIHBsdXMgYSByaWdodCB0byBwb3NzZXNzaW9uIG9mIHRoZQpDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBmcm9tIHRoZSBwcmVkZWNlc3NvciBpbiBpbnRlcmVzdCwgaWYKdGhlIHByZWRlY2Vzc29yIGhhcyBpdCBvciBjYW4gZ2V0IGl0IHdpdGggcmVhc29uYWJsZSBlZmZvcnRzLgoKICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSBleGVyY2lzZSBvZiB0aGUKcmlnaHRzIGdyYW50ZWQgb3IgYWZmaXJtZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgRm9yIGV4YW1wbGUsIHlvdSBtYXkKbm90IGltcG9zZSBhIGxpY2Vuc2UgZmVlLCByb3lhbHR5LCBvciBvdGhlciBjaGFyZ2UgZm9yIGV4ZXJjaXNlIG9mCnJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHlvdSBtYXkgbm90IGluaXRpYXRlIGxpdGlnYXRpb24KKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQKYW55IHBhdGVudCBjbGFpbSBpcyBpbmZyaW5nZWQgYnkgbWFraW5nLCB1c2luZywgc2VsbGluZywgb2ZmZXJpbmcgZm9yCnNhbGUsIG9yIGltcG9ydGluZyB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbiBvZiBpdC4KCiAgMTEuIFBhdGVudHMuCgogIEEgImNvbnRyaWJ1dG9yIiBpcyBhIGNvcHlyaWdodCBob2xkZXIgd2hvIGF1dGhvcml6ZXMgdXNlIHVuZGVyIHRoaXMKTGljZW5zZSBvZiB0aGUgUHJvZ3JhbSBvciBhIHdvcmsgb24gd2hpY2ggdGhlIFByb2dyYW0gaXMgYmFzZWQuICBUaGUKd29yayB0aHVzIGxpY2Vuc2VkIGlzIGNhbGxlZCB0aGUgY29udHJpYnV0b3IncyAiY29udHJpYnV0b3IgdmVyc2lvbiIuCgogIEEgY29udHJpYnV0b3IncyAiZXNzZW50aWFsIHBhdGVudCBjbGFpbXMiIGFyZSBhbGwgcGF0ZW50IGNsYWltcwpvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBjb250cmlidXRvciwgd2hldGhlciBhbHJlYWR5IGFjcXVpcmVkIG9yCmhlcmVhZnRlciBhY3F1aXJlZCwgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgYnkgc29tZSBtYW5uZXIsIHBlcm1pdHRlZApieSB0aGlzIExpY2Vuc2UsIG9mIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24sCmJ1dCBkbyBub3QgaW5jbHVkZSBjbGFpbXMgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgb25seSBhcyBhCmNvbnNlcXVlbmNlIG9mIGZ1cnRoZXIgbW9kaWZpY2F0aW9uIG9mIHRoZSBjb250cmlidXRvciB2ZXJzaW9uLiAgRm9yCnB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIGluY2x1ZGVzIHRoZSByaWdodCB0byBncmFudApwYXRlbnQgc3VibGljZW5zZXMgaW4gYSBtYW5uZXIgY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YKdGhpcyBMaWNlbnNlLgoKICBFYWNoIGNvbnRyaWJ1dG9yIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZQpwYXRlbnQgbGljZW5zZSB1bmRlciB0aGUgY29udHJpYnV0b3IncyBlc3NlbnRpYWwgcGF0ZW50IGNsYWltcywgdG8KbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0IGFuZCBvdGhlcndpc2UgcnVuLCBtb2RpZnkgYW5kCnByb3BhZ2F0ZSB0aGUgY29udGVudHMgb2YgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24uCgogIEluIHRoZSBmb2xsb3dpbmcgdGhyZWUgcGFyYWdyYXBocywgYSAicGF0ZW50IGxpY2Vuc2UiIGlzIGFueSBleHByZXNzCmFncmVlbWVudCBvciBjb21taXRtZW50LCBob3dldmVyIGRlbm9taW5hdGVkLCBub3QgdG8gZW5mb3JjZSBhIHBhdGVudAooc3VjaCBhcyBhbiBleHByZXNzIHBlcm1pc3Npb24gdG8gcHJhY3RpY2UgYSBwYXRlbnQgb3IgY292ZW5hbnQgbm90IHRvCnN1ZSBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCkuICBUbyAiZ3JhbnQiIHN1Y2ggYSBwYXRlbnQgbGljZW5zZSB0byBhCnBhcnR5IG1lYW5zIHRvIG1ha2Ugc3VjaCBhbiBhZ3JlZW1lbnQgb3IgY29tbWl0bWVudCBub3QgdG8gZW5mb3JjZSBhCnBhdGVudCBhZ2FpbnN0IHRoZSBwYXJ0eS4KCiAgSWYgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywga25vd2luZ2x5IHJlbHlpbmcgb24gYSBwYXRlbnQgbGljZW5zZSwKYW5kIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBpcyBub3QgYXZhaWxhYmxlIGZvciBhbnlvbmUKdG8gY29weSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHRocm91Z2ggYQpwdWJsaWNseSBhdmFpbGFibGUgbmV0d29yayBzZXJ2ZXIgb3Igb3RoZXIgcmVhZGlseSBhY2Nlc3NpYmxlIG1lYW5zLAp0aGVuIHlvdSBtdXN0IGVpdGhlciAoMSkgY2F1c2UgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIHRvIGJlIHNvCmF2YWlsYWJsZSwgb3IgKDIpIGFycmFuZ2UgdG8gZGVwcml2ZSB5b3Vyc2VsZiBvZiB0aGUgYmVuZWZpdCBvZiB0aGUKcGF0ZW50IGxpY2Vuc2UgZm9yIHRoaXMgcGFydGljdWxhciB3b3JrLCBvciAoMykgYXJyYW5nZSwgaW4gYSBtYW5uZXIKY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlLCB0byBleHRlbmQgdGhlIHBhdGVudApsaWNlbnNlIHRvIGRvd25zdHJlYW0gcmVjaXBpZW50cy4gICJLbm93aW5nbHkgcmVseWluZyIgbWVhbnMgeW91IGhhdmUKYWN0dWFsIGtub3dsZWRnZSB0aGF0LCBidXQgZm9yIHRoZSBwYXRlbnQgbGljZW5zZSwgeW91ciBjb252ZXlpbmcgdGhlCmNvdmVyZWQgd29yayBpbiBhIGNvdW50cnksIG9yIHlvdXIgcmVjaXBpZW50J3MgdXNlIG9mIHRoZSBjb3ZlcmVkIHdvcmsKaW4gYSBjb3VudHJ5LCB3b3VsZCBpbmZyaW5nZSBvbmUgb3IgbW9yZSBpZGVudGlmaWFibGUgcGF0ZW50cyBpbiB0aGF0CmNvdW50cnkgdGhhdCB5b3UgaGF2ZSByZWFzb24gdG8gYmVsaWV2ZSBhcmUgdmFsaWQuCgogIElmLCBwdXJzdWFudCB0byBvciBpbiBjb25uZWN0aW9uIHdpdGggYSBzaW5nbGUgdHJhbnNhY3Rpb24gb3IKYXJyYW5nZW1lbnQsIHlvdSBjb252ZXksIG9yIHByb3BhZ2F0ZSBieSBwcm9jdXJpbmcgY29udmV5YW5jZSBvZiwgYQpjb3ZlcmVkIHdvcmssIGFuZCBncmFudCBhIHBhdGVudCBsaWNlbnNlIHRvIHNvbWUgb2YgdGhlIHBhcnRpZXMKcmVjZWl2aW5nIHRoZSBjb3ZlcmVkIHdvcmsgYXV0aG9yaXppbmcgdGhlbSB0byB1c2UsIHByb3BhZ2F0ZSwgbW9kaWZ5Cm9yIGNvbnZleSBhIHNwZWNpZmljIGNvcHkgb2YgdGhlIGNvdmVyZWQgd29yaywgdGhlbiB0aGUgcGF0ZW50IGxpY2Vuc2UKeW91IGdyYW50IGlzIGF1dG9tYXRpY2FsbHkgZXh0ZW5kZWQgdG8gYWxsIHJlY2lwaWVudHMgb2YgdGhlIGNvdmVyZWQKd29yayBhbmQgd29ya3MgYmFzZWQgb24gaXQuCgogIEEgcGF0ZW50IGxpY2Vuc2UgaXMgImRpc2NyaW1pbmF0b3J5IiBpZiBpdCBkb2VzIG5vdCBpbmNsdWRlIHdpdGhpbgp0aGUgc2NvcGUgb2YgaXRzIGNvdmVyYWdlLCBwcm9oaWJpdHMgdGhlIGV4ZXJjaXNlIG9mLCBvciBpcwpjb25kaXRpb25lZCBvbiB0aGUgbm9uLWV4ZXJjaXNlIG9mIG9uZSBvciBtb3JlIG9mIHRoZSByaWdodHMgdGhhdCBhcmUKc3BlY2lmaWNhbGx5IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgWW91IG1heSBub3QgY29udmV5IGEgY292ZXJlZAp3b3JrIGlmIHlvdSBhcmUgYSBwYXJ0eSB0byBhbiBhcnJhbmdlbWVudCB3aXRoIGEgdGhpcmQgcGFydHkgdGhhdCBpcwppbiB0aGUgYnVzaW5lc3Mgb2YgZGlzdHJpYnV0aW5nIHNvZnR3YXJlLCB1bmRlciB3aGljaCB5b3UgbWFrZSBwYXltZW50CnRvIHRoZSB0aGlyZCBwYXJ0eSBiYXNlZCBvbiB0aGUgZXh0ZW50IG9mIHlvdXIgYWN0aXZpdHkgb2YgY29udmV5aW5nCnRoZSB3b3JrLCBhbmQgdW5kZXIgd2hpY2ggdGhlIHRoaXJkIHBhcnR5IGdyYW50cywgdG8gYW55IG9mIHRoZQpwYXJ0aWVzIHdobyB3b3VsZCByZWNlaXZlIHRoZSBjb3ZlcmVkIHdvcmsgZnJvbSB5b3UsIGEgZGlzY3JpbWluYXRvcnkKcGF0ZW50IGxpY2Vuc2UgKGEpIGluIGNvbm5lY3Rpb24gd2l0aCBjb3BpZXMgb2YgdGhlIGNvdmVyZWQgd29yawpjb252ZXllZCBieSB5b3UgKG9yIGNvcGllcyBtYWRlIGZyb20gdGhvc2UgY29waWVzKSwgb3IgKGIpIHByaW1hcmlseQpmb3IgYW5kIGluIGNvbm5lY3Rpb24gd2l0aCBzcGVjaWZpYyBwcm9kdWN0cyBvciBjb21waWxhdGlvbnMgdGhhdApjb250YWluIHRoZSBjb3ZlcmVkIHdvcmssIHVubGVzcyB5b3UgZW50ZXJlZCBpbnRvIHRoYXQgYXJyYW5nZW1lbnQsCm9yIHRoYXQgcGF0ZW50IGxpY2Vuc2Ugd2FzIGdyYW50ZWQsIHByaW9yIHRvIDI4IE1hcmNoIDIwMDcuCgogIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGNvbnN0cnVlZCBhcyBleGNsdWRpbmcgb3IgbGltaXRpbmcKYW55IGltcGxpZWQgbGljZW5zZSBvciBvdGhlciBkZWZlbnNlcyB0byBpbmZyaW5nZW1lbnQgdGhhdCBtYXkKb3RoZXJ3aXNlIGJlIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYXBwbGljYWJsZSBwYXRlbnQgbGF3LgoKICAxMi4gTm8gU3VycmVuZGVyIG9mIE90aGVycycgRnJlZWRvbS4KCiAgSWYgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgpvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CmV4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90IGNvbnZleSBhCmNvdmVyZWQgd29yayBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcwpMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91IG1heQpub3QgY29udmV5IGl0IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiB5b3UgYWdyZWUgdG8gdGVybXMgdGhhdCBvYmxpZ2F0ZSB5b3UKdG8gY29sbGVjdCBhIHJveWFsdHkgZm9yIGZ1cnRoZXIgY29udmV5aW5nIGZyb20gdGhvc2UgdG8gd2hvbSB5b3UgY29udmV5CnRoZSBQcm9ncmFtLCB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCB0aG9zZSB0ZXJtcyBhbmQgdGhpcwpMaWNlbnNlIHdvdWxkIGJlIHRvIHJlZnJhaW4gZW50aXJlbHkgZnJvbSBjb252ZXlpbmcgdGhlIFByb2dyYW0uCgogIDEzLiBVc2Ugd2l0aCB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgoKICBOb3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIHlvdSBoYXZlCnBlcm1pc3Npb24gdG8gbGluayBvciBjb21iaW5lIGFueSBjb3ZlcmVkIHdvcmsgd2l0aCBhIHdvcmsgbGljZW5zZWQKdW5kZXIgdmVyc2lvbiAzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW50byBhIHNpbmdsZQpjb21iaW5lZCB3b3JrLCBhbmQgdG8gY29udmV5IHRoZSByZXN1bHRpbmcgd29yay4gIFRoZSB0ZXJtcyBvZiB0aGlzCkxpY2Vuc2Ugd2lsbCBjb250aW51ZSB0byBhcHBseSB0byB0aGUgcGFydCB3aGljaCBpcyB0aGUgY292ZXJlZCB3b3JrLApidXQgdGhlIHNwZWNpYWwgcmVxdWlyZW1lbnRzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCnNlY3Rpb24gMTMsIGNvbmNlcm5pbmcgaW50ZXJhY3Rpb24gdGhyb3VnaCBhIG5ldHdvcmsgd2lsbCBhcHBseSB0byB0aGUKY29tYmluYXRpb24gYXMgc3VjaC4KCiAgMTQuIFJldmlzZWQgVmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlLgoKICBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZgp0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCmJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bwphZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KCiAgRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUKUHJvZ3JhbSBzcGVjaWZpZXMgdGhhdCBhIGNlcnRhaW4gbnVtYmVyZWQgdmVyc2lvbiBvZiB0aGUgR05VIEdlbmVyYWwKUHVibGljIExpY2Vuc2UgIm9yIGFueSBsYXRlciB2ZXJzaW9uIiBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUKb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgbnVtYmVyZWQKdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGUKR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkCmJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCgogIElmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGljaCBmdXR1cmUKdmVyc2lvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGNhbiBiZSB1c2VkLCB0aGF0IHByb3h5J3MKcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGEgdmVyc2lvbiBwZXJtYW5lbnRseSBhdXRob3JpemVzIHlvdQp0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUgUHJvZ3JhbS4KCiAgTGF0ZXIgbGljZW5zZSB2ZXJzaW9ucyBtYXkgZ2l2ZSB5b3UgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQKcGVybWlzc2lvbnMuICBIb3dldmVyLCBubyBhZGRpdGlvbmFsIG9ibGlnYXRpb25zIGFyZSBpbXBvc2VkIG9uIGFueQphdXRob3Igb3IgY29weXJpZ2h0IGhvbGRlciBhcyBhIHJlc3VsdCBvZiB5b3VyIGNob29zaW5nIHRvIGZvbGxvdyBhCmxhdGVyIHZlcnNpb24uCgogIDE1LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LgoKICBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZCkFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQKSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWQpPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgpQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTQpJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YKQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgoKICAxNi4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuCgogIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORwpXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1PRElGSUVTIEFORC9PUiBDT05WRVlTClRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWQpHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUKVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRgpEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRApQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwKRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgpTVUNIIERBTUFHRVMuCgogIDE3LiBJbnRlcnByZXRhdGlvbiBvZiBTZWN0aW9ucyAxNSBhbmQgMTYuCgogIElmIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGFuZCBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBwcm92aWRlZAphYm92ZSBjYW5ub3QgYmUgZ2l2ZW4gbG9jYWwgbGVnYWwgZWZmZWN0IGFjY29yZGluZyB0byB0aGVpciB0ZXJtcywKcmV2aWV3aW5nIGNvdXJ0cyBzaGFsbCBhcHBseSBsb2NhbCBsYXcgdGhhdCBtb3N0IGNsb3NlbHkgYXBwcm94aW1hdGVzCmFuIGFic29sdXRlIHdhaXZlciBvZiBhbGwgY2l2aWwgbGlhYmlsaXR5IGluIGNvbm5lY3Rpb24gd2l0aCB0aGUKUHJvZ3JhbSwgdW5sZXNzIGEgd2FycmFudHkgb3IgYXNzdW1wdGlvbiBvZiBsaWFiaWxpdHkgYWNjb21wYW5pZXMgYQpjb3B5IG9mIHRoZSBQcm9ncmFtIGluIHJldHVybiBmb3IgYSBmZWUuCgogICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKCiAgICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcwoKICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0CnBvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCgogIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0CnRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKc3RhdGUgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAp0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KCiAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgogICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KCiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCgogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCgogIElmIHRoZSBwcm9ncmFtIGRvZXMgdGVybWluYWwgaW50ZXJhY3Rpb24sIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQKbm90aWNlIGxpa2UgdGhpcyB3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgoKICAgIDxwcm9ncmFtPiAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KICAgIFRoaXMgcHJvZ3JhbSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCiAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CiAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCgpUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHlvdXIgcHJvZ3JhbSdzIGNvbW1hbmRzCm1pZ2h0IGJlIGRpZmZlcmVudDsgZm9yIGEgR1VJIGludGVyZmFjZSwgeW91IHdvdWxkIHVzZSBhbiAiYWJvdXQgYm94Ii4KCiAgWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHNjaG9vbCwKaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmIG5lY2Vzc2FyeS4KRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcywgYW5kIGhvdyB0byBhcHBseSBhbmQgZm9sbG93IHRoZSBHTlUgR1BMLCBzZWUKPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtCmludG8gcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdQptYXkgY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGgKdGhlIGxpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsClB1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLiAgQnV0IGZpcnN0LCBwbGVhc2UgcmVhZAo8aHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkvd2h5LW5vdC1sZ3BsLmh0bWw+Lgo=]]></data>
	</file>
	<file>
	  <filename>/icons/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/icons/view.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAOZyAJrN/9Ls/6jU/5zP/8Dg/9Xr/6WkpI6Ojszm/8fm/8S+vrfT7cbl///HNY2Ojunp6Z6goqqvtLq5ub7j/8bBwb3h/9/x/7fd/5/S//DFT8fGxry9vsLf+//INqmusqnY/92loK+vr6zM66qclbK4vszLyqmop7jc/7O7wqyrqpvK+bW/yI+Pj6DN+c+imuXMirvAxcPDwqfW/7nc/KNmR5mcn6LR/5+susjp/9br/6HR/9DQz7bd/+33//K7QOz3/+rq6s/Ozp6ipL29vLy7u9zx/83MzK3X/6ifnNXi7dLf6tDm97R9Q93d3bTD0dprGrrg/5iXlqKuua3U+7i+xJWXmeWwrJzQ/8W/v7nd/6vX/7i4uMTDw+7z9/D1+NjNzdZjHbjEz7CHgvPHUL3i///FNby9vc/k9M9kIeHh4cvl/7nBypOTkpnO/6y3udfX176+vdeloOzs7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAHIALAAAAAAQABAAAAeXgHKCg4SFhDsSG2ZbJYaDXDBKXV5Ja3BAhkEoHEU/PRYMTiaGISJQagU5CBVTNWmFESpaJwQEWUdXNzGFHi1tOgICNgAYUkOFKQsfAwAAAzIzVW+FRCQJExc8ZDhhLI5RVGcBAUsrbiNWjgYHEEIObGIvPiCOD0YaTXJfTx1jcY6FsIBpkMEFQEIU0JRhcpCQAhpIGjoKBAA7]]></data>
	</file>
	<file>
	  <filename>/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/images/blank.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==]]></data>
	</file>
	<file>
	  <filename>/images/close.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhGgAaALMJAHt7e8jIyJycnPT09JiYmL29vWVlZd7e3lpaWv///wAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAkALAAAAAAaABoAAASLMEl5pr0YH1PzDZxmIEjnJQUZThtJmljqrsnovpl8r8HtwigfbqKbmYq/mDCEHCp9AIKwdApOd8DcVZX1NEmA7kmwHFQxA5tPcLYcANtCO9HaIuTV+k6IzxymAgNwPn1uU3h6LoV0h25qiiyNF39CAXSPJIuRPgYUj5qGRiw2oJNckwaWcxticywWEQA7]]></data>
	</file>
	<file>
	  <filename>/images/closelabel.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhQgAWAOYAAMDAwMHBwZ2dnVlZWdLS0oODg6+vr/X19eTk5FBQULi4uIyMjJSUlFRUVFZWVtzc3FJSUsnJyVFRUVhYWFVVVezs7FNTU/b29v39/erq6vr6+qampldXV6KiokxMTE9PT2ZmZvf3993d3czMzGBgYHt7e6Ghofz8/PDw8N7e3mxsbLW1tfv7+5WVlc3NzcrKynh4eOvr60tLS+Dg4F9fX7m5ud/f37S0tIaGhnBwcGNjY+Xl5ZKSkoiIiKmpqW5ubpeXl29vb9XV1Y6Oju3t7WVlZXZ2dpiYmG1tbXx8fO/v7+fn57GxsbOzs/Hx8Xl5eVpaWmRkZE1NTXNzc2dnZ5aWloeHh+Pj405OTmlpadvb23p6ev////7+/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAABCABYAAAf/gFyCg4SFhoeIiYqLjI2Oj4xdkpOUlZaXl5BcJ42Ynp+YkZJcLEdCXJZcIwIaqKCvoKJdIUAeUSKuXYIuNB5VF5QVWgiwXQjDlwdaWrqLo00yAxZFWq6qJA0DHj6SBAtb4AsEXQBbzJUABeBbBQCUCusFL1wB6+uDoxlbHwMJVDaCRtCwMAALDhRdImxZEEFLhAIGyJmrZGALAwJaCDDYElGigYwbLtDjGKBkAHz5SiQY0EDFDBfYBkixEgJVgQIHJuWUeE4Sgi0CKgmYOJSSoHoPDhmtUIIfBSTYJiToIbKLli3uLJXrybPSVQVdKirYeXRLUkOVuMRIAmGAAw4D/yAMqSlp6yW7k4paAtqlgrotGxCUbSGgsAKURlEYoTBgQoMOrSbhRTcx75ZLfLscAPDN7EjChhFP4qIkCGOWDHRNIoD1bmVJ8MZRYp1VMseRZwulnTElGwUHcU1gcHXg5k5jOSdbzWyZmOZJQHErHZ1ChQRpWUA4mAChw3BJChk6LLBgM0cA6JlVvJhxI9iw7DdsOVnPgMkARARRB3E9AYwrLziwnQTCueJNPOOUY09W6ayzQG0NgnPYSPZ4Zo0IIEAARQIlZCBIDQJOIEEHJ1ByjHOvnHjJMjlFwsUDOqzkXwyoCLKCBBxwIMMNxfSYijNcOMEABB9s4aFRK1iQQDAOIvjo5CjO6MICD09UkAuUTPyww5VPwiILFxpUdQkGS3DZ5SuyNOOJfmf6mGaPgQAAOw==]]></data>
	</file>
	<file>
	  <filename>/images/image-1.jpg</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/images/loading.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/images/next.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhLQAtAMQQAPT09LGxsWJiYunp6dLS0oSEhG1tbd3d3aWlpZqamry8vI+Pj8fHx3l5eVdXV////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABAALAAAAAAtAC0AAAWuIAQ9ZGmeaKqm4+q+cCzPdG3feK7vfO//wNIAEIwhHI7EoLgCIJGCADNFeD4NhKlpYLUmiNpHofuMhgEL8rNwCBMaaiQCPA0I4gbGORF3FJZaB2NqZmEKBnELYQ8AAXFZiwNwXVJhA3xklXV3ZAJ0QQSIhJBBA4Nqc0WNfWxMCpydmkCCfV+ufVhasFaFU1Vkf4sHXXmLJaIOqcYkAwgBgMvR0tPU1dbXNC3VItYhADs=]]></data>
	</file>
	<file>
	  <filename>/images/nextlabel.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhPwAgAPeDAP39/enp6UdHR6mpqY+Pj+bm5tDQ0MLCwuzs7O/v76qqqvHx8fb29vr6+v7+/lxcXPf39+3t7WdnZ2VlZV9fX0lJSc3Nze7u7ltbW/v7+7y8vKampurq6qenp3BwcPDw8FpaWoCAgLGxsWNjY2BgYPn5+ejo6ExMTFRUVE5OTqOjo9LS0mJiYufn52hoaI6OjldXV2FhYVFRUaioqNXV1d/f38HBwfz8/Pj4+JGRkbS0tF1dXd7e3oODg3p6eoGBgfLy8mZmZoKCgs/Pz1JSUllZWaurq4WFhW1tbWRkZOLi4srKylZWVqSkpLW1tbKysre3t0VFRV5eXqKiovPz88vLy8bGxmtra3V1dcjIyJqamlVVVXh4eIiIiEhISHd3d9jY2I2Njbq6upmZmeDg4G5ubktLS9bW1tzc3FNTU6WlpWpqap2dnU9PT66urr6+voyMjE1NTYaGhuTk5OHh4dfX16ysrOvr68PDw0JCQlhYWH5+fnNzc3l5eZubm+Pj42xsbPT09P///zMzMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAIMALAAAAAA/ACAAAAj/AAcNEkSwoMGDCBMqXMgQ4cCGECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKEECsDLDQsEbNkQICuREwYCbHZTQaOKSIAIFeOaoGGDEjYIOOiB4BECgQgweBBvseSDIBAsUE0aM2GGhxRUMZAQ5IHCiigEYIzAQIUHiy4KlOVCkOIJDUIMQUgQFeNAjggkTLZQuiQPHQZYUWhyUKMCBTYUVHDgAWErARZg2OgRl+EFBL4gXCcekeeKhTAKDRgQECMl0TQEuRf4I4qw3BhIFalTYYUAQQh8ZIFYcHCCgAGsCEnDU2SIHgpDOAZJg4OMBSYi3ggD08LKjxvDixyUAwXEw5YSCLiT0PjiSIAICBJMFiSCygYUPIAaJG1eJ/IMgBoA8MEEQnuWAEA96hCAIFBV0kB94/EngnyBDMCGDC3pRgIUGHIpBRwlCwICGXT6gAEZB+rH2wgQTCuJHBQQGMMEJAtSYxwYimLFBQTQU4QF2M0SxH0hUJBCfZgicBkB7FzQZAQML3HGkIAsEkAFBDCBwQ0pcVtTAEAaEKaYBFnjXJUQl2HDAmmwe8MYZZ8Yp55x01mnnnQo9hCdEAu0JUUAAOw==]]></data>
	</file>
	<file>
	  <filename>/images/prev.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhLQAtAMQQALGxsWJiYvT09G1tbdLS0t3d3YSEhOnp6cfHx5qamqWlpXl5eby8vI+Pj1dXV////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABAALAAAAAAtAC0AAAWw4COOZGme6AlBaeu+IgvPdG3feK7vfO//wCCtIHwJAAHHophCDBxQB4JZOhiiUQB1hMRGGVvC0wsNCJiCBDm6IBa76wC4WLiuHYqzUKC4OwxuQk53A1NMAHcBAHpFAklkDQdbDwRkAQSTIgVrBpiZdmQJjEwHC4lak3BkA55UaX6Rk2J+i6mPq4ZUVn4JmYNrga59ZKiZdV7FmQ+qksojRwqtztPU1dbX2NnaDzLWKyEAOw==]]></data>
	</file>
	<file>
	  <filename>/images/prevlabel.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhPwAgAPeJANzc3P39/fb29rq6utra2v7+/ltbW8HBwfX19fz8/F5eXk1NTV9fX/r6+uDg4NXV1djY2ICAgGBgYFFRUVRUVEpKSt3d3eLi4tnZ2cDAwOPj4/n5+cLCwsPDw/Dw8PLy8ru7u6CgoN/f34ODg0JCQktLS11dXVpaWnJycmpqar6+vpCQkJSUlMzMzPj4+KSkpFJSUmVlZcbGxsTExGxsbIGBgba2tuXl5WNjY3BwcHZ2dmZmZufn5+vr687OztfX18rKysnJyejo6FxcXFBQUKGhoY2NjZubm3h4eHt7e5iYmN7e3tPT00BAQLi4uEdHR39/f3p6evPz89bW1qenp+bm5k9PT3d3d2RkZEhISHl5eby8vPT09HR0dG9vb62traOjo/v7+66urr+/v25ubmFhYWlpadTU1I6OjrW1tb29vaKiourq6p2dnbm5uVVVVZqamqampvHx8ff396qqqtDQ0IyMjMjIyKioqKurq2JiYoaGhklJSVhYWLOzs+Hh4UFBQXFxcc/Pz8vLy3Nzc+/v71dXV+7u7v///zMzMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAIkALAAAAAA/ACAAAAj/ABEJHEiwoMGDCBMqNJgo0cKHECM+dCixosWLGDNq3Mixo8ePIEOKHEmypMmTKFNubOBjTAYOU1wIJJAhg4oWQgR+6HCg5wEOPAbJKDBwQ5A7IhHUmMCgaRIHiIrAUKCgTIw8iCwYMGTgxAkFddBMADCQgAkjIgVA8SLgQ5oSdhKsMQBgg4UcfX5osLJCBIS/BQ4sCDEQTwUfaSMQSoCowAkdUl4ouCEwDhEOVRZQKeghBQ0EiBBcCUQ0pIAIOTwgsJHFSAAwBrZgUINDgoMLFEaocOOkA2M4FIAgYlIBxEgBI4iYGCIBCQZEL2DEGEIBxQxEAAyYMLMDx4gGiDAszVCCSIkEHsdr7Ogw48ccgUUMAPlSYoBAABNYaBCx5ELpJGQ4gAULjCXWhUEhMNBDAjro8QF2C9BxkAwL7CGBICSdhgJ4BIWgwAWIgFBCG1lNsMIDKJ5xiECF0FBBFAFkqEUKHA50xBsiIMIFEnwE8QcFT5AgZBN+CFTAEYCIUVIAGjhQ2kBsACATIj08IMQGABCgpZYeDCQHBKCpJOZFNxAAwJlonhnjmA+1YMMAcMY5AAhhsPlQAQHkqaeedvbp55+ABiqonxQNulBDAQEAOw==]]></data>
	</file>
	<file>
	  <filename>/images/thumb-1.jpg</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/js/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/effects.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gQ29weXJpZ2h0IChjKSAyMDA1IFRob21hcyBGdWNocyAoaHR0cDovL3NjcmlwdC5hY3Vsby51cywgaHR0cDovL21pci5hY3Vsby51cykKLy8gQ29udHJpYnV0b3JzOgovLyAgSnVzdGluIFBhbG1lciAoaHR0cDovL2VuY3l0ZW1lZGlhLmNvbS8pCi8vICBNYXJrIFBpbGdyaW0gKGh0dHA6Ly9kaXZlaW50b21hcmsub3JnLykKLy8gIE1hcnRpbiBCaWFsYXNpbmtpCi8vIAovLyBTZWUgc2NyaXB0YWN1bG91cy5qcyBmb3IgZnVsbCBsaWNlbnNlLiAgCgovKiAtLS0tLS0tLS0tLS0tIGVsZW1lbnQgZXh0IC0tLS0tLS0tLS0tLS0tICovICAKIAovLyBjb252ZXJ0cyByZ2IoKSBhbmQgI3h4eCB0byAjeHh4eHh4IGZvcm1hdCwgIAovLyByZXR1cm5zIHNlbGYgKG9yIGZpcnN0IGFyZ3VtZW50KSBpZiBub3QgY29udmVydGFibGUgIApTdHJpbmcucHJvdG90eXBlLnBhcnNlQ29sb3IgPSBmdW5jdGlvbigpIHsgIAogIHZhciBjb2xvciA9ICcjJzsgIAogIGlmKHRoaXMuc2xpY2UoMCw0KSA9PSAncmdiKCcpIHsgIAogICAgdmFyIGNvbHMgPSB0aGlzLnNsaWNlKDQsdGhpcy5sZW5ndGgtMSkuc3BsaXQoJywnKTsgIAogICAgdmFyIGk9MDsgZG8geyBjb2xvciArPSBwYXJzZUludChjb2xzW2ldKS50b0NvbG9yUGFydCgpIH0gd2hpbGUgKCsraTwzKTsgIAogIH0gZWxzZSB7ICAKICAgIGlmKHRoaXMuc2xpY2UoMCwxKSA9PSAnIycpIHsgIAogICAgICBpZih0aGlzLmxlbmd0aD09NCkgZm9yKHZhciBpPTE7aTw0O2krKykgY29sb3IgKz0gKHRoaXMuY2hhckF0KGkpICsgdGhpcy5jaGFyQXQoaSkpLnRvTG93ZXJDYXNlKCk7ICAKICAgICAgaWYodGhpcy5sZW5ndGg9PTcpIGNvbG9yID0gdGhpcy50b0xvd2VyQ2FzZSgpOyAgCiAgICB9ICAKICB9ICAKICByZXR1cm4oY29sb3IubGVuZ3RoPT03ID8gY29sb3IgOiAoYXJndW1lbnRzWzBdIHx8IHRoaXMpKTsgIAp9CgpFbGVtZW50LmNvbGxlY3RUZXh0Tm9kZXMgPSBmdW5jdGlvbihlbGVtZW50KSB7ICAKICByZXR1cm4gJEEoJChlbGVtZW50KS5jaGlsZE5vZGVzKS5jb2xsZWN0KCBmdW5jdGlvbihub2RlKSB7CiAgICByZXR1cm4gKG5vZGUubm9kZVR5cGU9PTMgPyBub2RlLm5vZGVWYWx1ZSA6IAogICAgICAobm9kZS5oYXNDaGlsZE5vZGVzKCkgPyBFbGVtZW50LmNvbGxlY3RUZXh0Tm9kZXMobm9kZSkgOiAnJykpOwogIH0pLmZsYXR0ZW4oKS5qb2luKCcnKTsKfQoKRWxlbWVudC5jb2xsZWN0VGV4dE5vZGVzSWdub3JlQ2xhc3MgPSBmdW5jdGlvbihlbGVtZW50LCBjbGFzc05hbWUpIHsgIAogIHJldHVybiAkQSgkKGVsZW1lbnQpLmNoaWxkTm9kZXMpLmNvbGxlY3QoIGZ1bmN0aW9uKG5vZGUpIHsKICAgIHJldHVybiAobm9kZS5ub2RlVHlwZT09MyA/IG5vZGUubm9kZVZhbHVlIDogCiAgICAgICgobm9kZS5oYXNDaGlsZE5vZGVzKCkgJiYgIUVsZW1lbnQuaGFzQ2xhc3NOYW1lKG5vZGUsY2xhc3NOYW1lKSkgPyAKICAgICAgICBFbGVtZW50LmNvbGxlY3RUZXh0Tm9kZXMobm9kZSkgOiAnJykpOwogIH0pLmZsYXR0ZW4oKS5qb2luKCcnKTsKfQoKRWxlbWVudC5zZXRTdHlsZSA9IGZ1bmN0aW9uKGVsZW1lbnQsIHN0eWxlKSB7CiAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgZm9yKGsgaW4gc3R5bGUpIGVsZW1lbnQuc3R5bGVbay5jYW1lbGl6ZSgpXSA9IHN0eWxlW2tdOwp9CgpFbGVtZW50LnNldENvbnRlbnRab29tID0gZnVuY3Rpb24oZWxlbWVudCwgcGVyY2VudCkgeyAgCiAgRWxlbWVudC5zZXRTdHlsZShlbGVtZW50LCB7Zm9udFNpemU6IChwZXJjZW50LzEwMCkgKyAnZW0nfSk7ICAgCiAgaWYobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5kZXhPZignQXBwbGVXZWJLaXQnKT4wKSB3aW5kb3cuc2Nyb2xsQnkoMCwwKTsgIAp9CgpFbGVtZW50LmdldE9wYWNpdHkgPSBmdW5jdGlvbihlbGVtZW50KXsgIAogIHZhciBvcGFjaXR5OwogIGlmIChvcGFjaXR5ID0gRWxlbWVudC5nZXRTdHlsZShlbGVtZW50LCAnb3BhY2l0eScpKSAgCiAgICByZXR1cm4gcGFyc2VGbG9hdChvcGFjaXR5KTsgIAogIGlmIChvcGFjaXR5ID0gKEVsZW1lbnQuZ2V0U3R5bGUoZWxlbWVudCwgJ2ZpbHRlcicpIHx8ICcnKS5tYXRjaCgvYWxwaGFcKG9wYWNpdHk9KC4qKVwpLykpICAKICAgIGlmKG9wYWNpdHlbMV0pIHJldHVybiBwYXJzZUZsb2F0KG9wYWNpdHlbMV0pIC8gMTAwOyAgCiAgcmV0dXJuIDEuMDsgIAp9CgpFbGVtZW50LnNldE9wYWNpdHkgPSBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZSl7ICAKICBlbGVtZW50PSAkKGVsZW1lbnQpOyAgCiAgaWYgKHZhbHVlID09IDEpewogICAgRWxlbWVudC5zZXRTdHlsZShlbGVtZW50LCB7IG9wYWNpdHk6IAogICAgICAoL0dlY2tvLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpICYmICEvS29ucXVlcm9yfFNhZmFyaXxLSFRNTC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkgPyAKICAgICAgMC45OTk5OTkgOiBudWxsIH0pOwogICAgaWYoL01TSUUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpICAKICAgICAgRWxlbWVudC5zZXRTdHlsZShlbGVtZW50LCB7ZmlsdGVyOiBFbGVtZW50LmdldFN0eWxlKGVsZW1lbnQsJ2ZpbHRlcicpLnJlcGxhY2UoL2FscGhhXChbXlwpXSpcKS9naSwnJyl9KTsgIAogIH0gZWxzZSB7ICAKICAgIGlmKHZhbHVlIDwgMC4wMDAwMSkgdmFsdWUgPSAwOyAgCiAgICBFbGVtZW50LnNldFN0eWxlKGVsZW1lbnQsIHtvcGFjaXR5OiB2YWx1ZX0pOwogICAgaWYoL01TSUUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpICAKICAgICBFbGVtZW50LnNldFN0eWxlKGVsZW1lbnQsIAogICAgICAgeyBmaWx0ZXI6IEVsZW1lbnQuZ2V0U3R5bGUoZWxlbWVudCwnZmlsdGVyJykucmVwbGFjZSgvYWxwaGFcKFteXCldKlwpL2dpLCcnKSArCiAgICAgICAgICAgICAgICAgJ2FscGhhKG9wYWNpdHk9Jyt2YWx1ZSoxMDArJyknIH0pOyAgCiAgfSAgIAp9ICAKIApFbGVtZW50LmdldElubGluZU9wYWNpdHkgPSBmdW5jdGlvbihlbGVtZW50KXsgIAogIHJldHVybiAkKGVsZW1lbnQpLnN0eWxlLm9wYWNpdHkgfHwgJyc7Cn0gIAoKRWxlbWVudC5jaGlsZHJlbldpdGhDbGFzc05hbWUgPSBmdW5jdGlvbihlbGVtZW50LCBjbGFzc05hbWUpIHsgIAogIHJldHVybiAkQSgkKGVsZW1lbnQpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykpLnNlbGVjdCgKICAgIGZ1bmN0aW9uKGMpIHsgcmV0dXJuIEVsZW1lbnQuaGFzQ2xhc3NOYW1lKGMsIGNsYXNzTmFtZSkgfSk7Cn0KCkFycmF5LnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24oKSB7CiAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7CiAgdGhpcy5lYWNoKGZ1bmN0aW9uKGYpeyBmLmFwcGx5KHRoaXMsIGFyZ3MpIH0pOwp9CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCnZhciBFZmZlY3QgPSB7CiAgdGFnaWZ5VGV4dDogZnVuY3Rpb24oZWxlbWVudCkgewogICAgdmFyIHRhZ2lmeVN0eWxlID0gJ3Bvc2l0aW9uOnJlbGF0aXZlJzsKICAgIGlmKC9NU0lFLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKSB0YWdpZnlTdHlsZSArPSAnO3pvb206MSc7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgICRBKGVsZW1lbnQuY2hpbGROb2RlcykuZWFjaCggZnVuY3Rpb24oY2hpbGQpIHsKICAgICAgaWYoY2hpbGQubm9kZVR5cGU9PTMpIHsKICAgICAgICBjaGlsZC5ub2RlVmFsdWUudG9BcnJheSgpLmVhY2goIGZ1bmN0aW9uKGNoYXJhY3RlcikgewogICAgICAgICAgZWxlbWVudC5pbnNlcnRCZWZvcmUoCiAgICAgICAgICAgIEJ1aWxkZXIubm9kZSgnc3Bhbicse3N0eWxlOiB0YWdpZnlTdHlsZX0sCiAgICAgICAgICAgICAgY2hhcmFjdGVyID09ICcgJyA/IFN0cmluZy5mcm9tQ2hhckNvZGUoMTYwKSA6IGNoYXJhY3RlciksIAogICAgICAgICAgICAgIGNoaWxkKTsKICAgICAgICB9KTsKICAgICAgICBFbGVtZW50LnJlbW92ZShjaGlsZCk7CiAgICAgIH0KICAgIH0pOwogIH0sCiAgbXVsdGlwbGU6IGZ1bmN0aW9uKGVsZW1lbnQsIGVmZmVjdCkgewogICAgdmFyIGVsZW1lbnRzOwogICAgaWYoKCh0eXBlb2YgZWxlbWVudCA9PSAnb2JqZWN0JykgfHwgCiAgICAgICAgKHR5cGVvZiBlbGVtZW50ID09ICdmdW5jdGlvbicpKSAmJiAKICAgICAgIChlbGVtZW50Lmxlbmd0aCkpCiAgICAgIGVsZW1lbnRzID0gZWxlbWVudDsKICAgIGVsc2UKICAgICAgZWxlbWVudHMgPSAkKGVsZW1lbnQpLmNoaWxkTm9kZXM7CiAgICAgIAogICAgdmFyIG9wdGlvbnMgPSBPYmplY3QuZXh0ZW5kKHsKICAgICAgc3BlZWQ6IDAuMSwKICAgICAgZGVsYXk6IDAuMAogICAgfSwgYXJndW1lbnRzWzJdIHx8IHt9KTsKICAgIHZhciBtYXN0ZXJEZWxheSA9IG9wdGlvbnMuZGVsYXk7CgogICAgJEEoZWxlbWVudHMpLmVhY2goIGZ1bmN0aW9uKGVsZW1lbnQsIGluZGV4KSB7CiAgICAgIG5ldyBlZmZlY3QoZWxlbWVudCwgT2JqZWN0LmV4dGVuZChvcHRpb25zLCB7IGRlbGF5OiBpbmRleCAqIG9wdGlvbnMuc3BlZWQgKyBtYXN0ZXJEZWxheSB9KSk7CiAgICB9KTsKICB9LAogIFBBSVJTOiB7CiAgICAnc2xpZGUnOiAgWydTbGlkZURvd24nLCdTbGlkZVVwJ10sCiAgICAnYmxpbmQnOiAgWydCbGluZERvd24nLCdCbGluZFVwJ10sCiAgICAnYXBwZWFyJzogWydBcHBlYXInLCdGYWRlJ10KICB9LAogIHRvZ2dsZTogZnVuY3Rpb24oZWxlbWVudCwgZWZmZWN0KSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgIGVmZmVjdCA9IChlZmZlY3QgfHwgJ2FwcGVhcicpLnRvTG93ZXJDYXNlKCk7CiAgICB2YXIgb3B0aW9ucyA9IE9iamVjdC5leHRlbmQoewogICAgICBxdWV1ZTogeyBwb3NpdGlvbjonZW5kJywgc2NvcGU6KGVsZW1lbnQuaWQgfHwgJ2dsb2JhbCcpIH0KICAgIH0sIGFyZ3VtZW50c1syXSB8fCB7fSk7CiAgICBFZmZlY3RbRWxlbWVudC52aXNpYmxlKGVsZW1lbnQpID8gCiAgICAgIEVmZmVjdC5QQUlSU1tlZmZlY3RdWzFdIDogRWZmZWN0LlBBSVJTW2VmZmVjdF1bMF1dKGVsZW1lbnQsIG9wdGlvbnMpOwogIH0KfTsKCnZhciBFZmZlY3QyID0gRWZmZWN0OyAvLyBkZXByZWNhdGVkCgovKiAtLS0tLS0tLS0tLS0tIHRyYW5zaXRpb25zIC0tLS0tLS0tLS0tLS0gKi8KCkVmZmVjdC5UcmFuc2l0aW9ucyA9IHt9CgpFZmZlY3QuVHJhbnNpdGlvbnMubGluZWFyID0gZnVuY3Rpb24ocG9zKSB7CiAgcmV0dXJuIHBvczsKfQpFZmZlY3QuVHJhbnNpdGlvbnMuc2lub2lkYWwgPSBmdW5jdGlvbihwb3MpIHsKICByZXR1cm4gKC1NYXRoLmNvcyhwb3MqTWF0aC5QSSkvMikgKyAwLjU7Cn0KRWZmZWN0LlRyYW5zaXRpb25zLnJldmVyc2UgID0gZnVuY3Rpb24ocG9zKSB7CiAgcmV0dXJuIDEtcG9zOwp9CkVmZmVjdC5UcmFuc2l0aW9ucy5mbGlja2VyID0gZnVuY3Rpb24ocG9zKSB7CiAgcmV0dXJuICgoLU1hdGguY29zKHBvcypNYXRoLlBJKS80KSArIDAuNzUpICsgTWF0aC5yYW5kb20oKS80Owp9CkVmZmVjdC5UcmFuc2l0aW9ucy53b2JibGUgPSBmdW5jdGlvbihwb3MpIHsKICByZXR1cm4gKC1NYXRoLmNvcyhwb3MqTWF0aC5QSSooOSpwb3MpKS8yKSArIDAuNTsKfQpFZmZlY3QuVHJhbnNpdGlvbnMucHVsc2UgPSBmdW5jdGlvbihwb3MpIHsKICByZXR1cm4gKE1hdGguZmxvb3IocG9zKjEwKSAlIDIgPT0gMCA/IAogICAgKHBvcyoxMC1NYXRoLmZsb29yKHBvcyoxMCkpIDogMS0ocG9zKjEwLU1hdGguZmxvb3IocG9zKjEwKSkpOwp9CkVmZmVjdC5UcmFuc2l0aW9ucy5ub25lID0gZnVuY3Rpb24ocG9zKSB7CiAgcmV0dXJuIDA7Cn0KRWZmZWN0LlRyYW5zaXRpb25zLmZ1bGwgPSBmdW5jdGlvbihwb3MpIHsKICByZXR1cm4gMTsKfQoKLyogLS0tLS0tLS0tLS0tLSBjb3JlIGVmZmVjdHMgLS0tLS0tLS0tLS0tLSAqLwoKRWZmZWN0LlNjb3BlZFF1ZXVlID0gQ2xhc3MuY3JlYXRlKCk7Ck9iamVjdC5leHRlbmQoT2JqZWN0LmV4dGVuZChFZmZlY3QuU2NvcGVkUXVldWUucHJvdG90eXBlLCBFbnVtZXJhYmxlKSwgewogIGluaXRpYWxpemU6IGZ1bmN0aW9uKCkgewogICAgdGhpcy5lZmZlY3RzICA9IFtdOwogICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7CiAgfSwKICBfZWFjaDogZnVuY3Rpb24oaXRlcmF0b3IpIHsKICAgIHRoaXMuZWZmZWN0cy5fZWFjaChpdGVyYXRvcik7CiAgfSwKICBhZGQ6IGZ1bmN0aW9uKGVmZmVjdCkgewogICAgdmFyIHRpbWVzdGFtcCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpOwogICAgCiAgICB2YXIgcG9zaXRpb24gPSAodHlwZW9mIGVmZmVjdC5vcHRpb25zLnF1ZXVlID09ICdzdHJpbmcnKSA/IAogICAgICBlZmZlY3Qub3B0aW9ucy5xdWV1ZSA6IGVmZmVjdC5vcHRpb25zLnF1ZXVlLnBvc2l0aW9uOwogICAgCiAgICBzd2l0Y2gocG9zaXRpb24pIHsKICAgICAgY2FzZSAnZnJvbnQnOgogICAgICAgIC8vIG1vdmUgdW5zdGFydGVkIGVmZmVjdHMgYWZ0ZXIgdGhpcyBlZmZlY3QgIAogICAgICAgIHRoaXMuZWZmZWN0cy5maW5kQWxsKGZ1bmN0aW9uKGUpeyByZXR1cm4gZS5zdGF0ZT09J2lkbGUnIH0pLmVhY2goIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgZS5zdGFydE9uICArPSBlZmZlY3QuZmluaXNoT247CiAgICAgICAgICAgIGUuZmluaXNoT24gKz0gZWZmZWN0LmZpbmlzaE9uOwogICAgICAgICAgfSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgJ2VuZCc6CiAgICAgICAgLy8gc3RhcnQgZWZmZWN0IGFmdGVyIGxhc3QgcXVldWVkIGVmZmVjdCBoYXMgZmluaXNoZWQKICAgICAgICB0aW1lc3RhbXAgPSB0aGlzLmVmZmVjdHMucGx1Y2soJ2ZpbmlzaE9uJykubWF4KCkgfHwgdGltZXN0YW1wOwogICAgICAgIGJyZWFrOwogICAgfQogICAgCiAgICBlZmZlY3Quc3RhcnRPbiAgKz0gdGltZXN0YW1wOwogICAgZWZmZWN0LmZpbmlzaE9uICs9IHRpbWVzdGFtcDsKICAgIHRoaXMuZWZmZWN0cy5wdXNoKGVmZmVjdCk7CiAgICBpZighdGhpcy5pbnRlcnZhbCkgCiAgICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCh0aGlzLmxvb3AuYmluZCh0aGlzKSwgNDApOwogIH0sCiAgcmVtb3ZlOiBmdW5jdGlvbihlZmZlY3QpIHsKICAgIHRoaXMuZWZmZWN0cyA9IHRoaXMuZWZmZWN0cy5yZWplY3QoZnVuY3Rpb24oZSkgeyByZXR1cm4gZT09ZWZmZWN0IH0pOwogICAgaWYodGhpcy5lZmZlY3RzLmxlbmd0aCA9PSAwKSB7CiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCk7CiAgICAgIHRoaXMuaW50ZXJ2YWwgPSBudWxsOwogICAgfQogIH0sCiAgbG9vcDogZnVuY3Rpb24oKSB7CiAgICB2YXIgdGltZVBvcyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpOwogICAgdGhpcy5lZmZlY3RzLmludm9rZSgnbG9vcCcsIHRpbWVQb3MpOwogIH0KfSk7CgpFZmZlY3QuUXVldWVzID0gewogIGluc3RhbmNlczogJEgoKSwKICBnZXQ6IGZ1bmN0aW9uKHF1ZXVlTmFtZSkgewogICAgaWYodHlwZW9mIHF1ZXVlTmFtZSAhPSAnc3RyaW5nJykgcmV0dXJuIHF1ZXVlTmFtZTsKICAgIAogICAgaWYoIXRoaXMuaW5zdGFuY2VzW3F1ZXVlTmFtZV0pCiAgICAgIHRoaXMuaW5zdGFuY2VzW3F1ZXVlTmFtZV0gPSBuZXcgRWZmZWN0LlNjb3BlZFF1ZXVlKCk7CiAgICAgIAogICAgcmV0dXJuIHRoaXMuaW5zdGFuY2VzW3F1ZXVlTmFtZV07CiAgfQp9CkVmZmVjdC5RdWV1ZSA9IEVmZmVjdC5RdWV1ZXMuZ2V0KCdnbG9iYWwnKTsKCkVmZmVjdC5EZWZhdWx0T3B0aW9ucyA9IHsKICB0cmFuc2l0aW9uOiBFZmZlY3QuVHJhbnNpdGlvbnMuc2lub2lkYWwsCiAgZHVyYXRpb246ICAgMS4wLCAgIC8vIHNlY29uZHMKICBmcHM6ICAgICAgICAyNS4wLCAgLy8gbWF4LiAyNWZwcyBkdWUgdG8gRWZmZWN0LlF1ZXVlIGltcGxlbWVudGF0aW9uCiAgc3luYzogICAgICAgZmFsc2UsIC8vIHRydWUgZm9yIGNvbWJpbmluZwogIGZyb206ICAgICAgIDAuMCwKICB0bzogICAgICAgICAxLjAsCiAgZGVsYXk6ICAgICAgMC4wLAogIHF1ZXVlOiAgICAgICdwYXJhbGxlbCcKfQoKRWZmZWN0LkJhc2UgPSBmdW5jdGlvbigpIHt9OwpFZmZlY3QuQmFzZS5wcm90b3R5cGUgPSB7CiAgcG9zaXRpb246IG51bGwsCiAgc3RhcnQ6IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgIHRoaXMub3B0aW9ucyAgICAgID0gT2JqZWN0LmV4dGVuZChPYmplY3QuZXh0ZW5kKHt9LEVmZmVjdC5EZWZhdWx0T3B0aW9ucyksIG9wdGlvbnMgfHwge30pOwogICAgdGhpcy5jdXJyZW50RnJhbWUgPSAwOwogICAgdGhpcy5zdGF0ZSAgICAgICAgPSAnaWRsZSc7CiAgICB0aGlzLnN0YXJ0T24gICAgICA9IHRoaXMub3B0aW9ucy5kZWxheSoxMDAwOwogICAgdGhpcy5maW5pc2hPbiAgICAgPSB0aGlzLnN0YXJ0T24gKyAodGhpcy5vcHRpb25zLmR1cmF0aW9uKjEwMDApOwogICAgdGhpcy5ldmVudCgnYmVmb3JlU3RhcnQnKTsKICAgIGlmKCF0aGlzLm9wdGlvbnMuc3luYykKICAgICAgRWZmZWN0LlF1ZXVlcy5nZXQodHlwZW9mIHRoaXMub3B0aW9ucy5xdWV1ZSA9PSAnc3RyaW5nJyA/IAogICAgICAgICdnbG9iYWwnIDogdGhpcy5vcHRpb25zLnF1ZXVlLnNjb3BlKS5hZGQodGhpcyk7CiAgfSwKICBsb29wOiBmdW5jdGlvbih0aW1lUG9zKSB7CiAgICBpZih0aW1lUG9zID49IHRoaXMuc3RhcnRPbikgewogICAgICBpZih0aW1lUG9zID49IHRoaXMuZmluaXNoT24pIHsKICAgICAgICB0aGlzLnJlbmRlcigxLjApOwogICAgICAgIHRoaXMuY2FuY2VsKCk7CiAgICAgICAgdGhpcy5ldmVudCgnYmVmb3JlRmluaXNoJyk7CiAgICAgICAgaWYodGhpcy5maW5pc2gpIHRoaXMuZmluaXNoKCk7IAogICAgICAgIHRoaXMuZXZlbnQoJ2FmdGVyRmluaXNoJyk7CiAgICAgICAgcmV0dXJuOyAgCiAgICAgIH0KICAgICAgdmFyIHBvcyAgID0gKHRpbWVQb3MgLSB0aGlzLnN0YXJ0T24pIC8gKHRoaXMuZmluaXNoT24gLSB0aGlzLnN0YXJ0T24pOwogICAgICB2YXIgZnJhbWUgPSBNYXRoLnJvdW5kKHBvcyAqIHRoaXMub3B0aW9ucy5mcHMgKiB0aGlzLm9wdGlvbnMuZHVyYXRpb24pOwogICAgICBpZihmcmFtZSA+IHRoaXMuY3VycmVudEZyYW1lKSB7CiAgICAgICAgdGhpcy5yZW5kZXIocG9zKTsKICAgICAgICB0aGlzLmN1cnJlbnRGcmFtZSA9IGZyYW1lOwogICAgICB9CiAgICB9CiAgfSwKICByZW5kZXI6IGZ1bmN0aW9uKHBvcykgewogICAgaWYodGhpcy5zdGF0ZSA9PSAnaWRsZScpIHsKICAgICAgdGhpcy5zdGF0ZSA9ICdydW5uaW5nJzsKICAgICAgdGhpcy5ldmVudCgnYmVmb3JlU2V0dXAnKTsKICAgICAgaWYodGhpcy5zZXR1cCkgdGhpcy5zZXR1cCgpOwogICAgICB0aGlzLmV2ZW50KCdhZnRlclNldHVwJyk7CiAgICB9CiAgICBpZih0aGlzLnN0YXRlID09ICdydW5uaW5nJykgewogICAgICBpZih0aGlzLm9wdGlvbnMudHJhbnNpdGlvbikgcG9zID0gdGhpcy5vcHRpb25zLnRyYW5zaXRpb24ocG9zKTsKICAgICAgcG9zICo9ICh0aGlzLm9wdGlvbnMudG8tdGhpcy5vcHRpb25zLmZyb20pOwogICAgICBwb3MgKz0gdGhpcy5vcHRpb25zLmZyb207CiAgICAgIHRoaXMucG9zaXRpb24gPSBwb3M7CiAgICAgIHRoaXMuZXZlbnQoJ2JlZm9yZVVwZGF0ZScpOwogICAgICBpZih0aGlzLnVwZGF0ZSkgdGhpcy51cGRhdGUocG9zKTsKICAgICAgdGhpcy5ldmVudCgnYWZ0ZXJVcGRhdGUnKTsKICAgIH0KICB9LAogIGNhbmNlbDogZnVuY3Rpb24oKSB7CiAgICBpZighdGhpcy5vcHRpb25zLnN5bmMpCiAgICAgIEVmZmVjdC5RdWV1ZXMuZ2V0KHR5cGVvZiB0aGlzLm9wdGlvbnMucXVldWUgPT0gJ3N0cmluZycgPyAKICAgICAgICAnZ2xvYmFsJyA6IHRoaXMub3B0aW9ucy5xdWV1ZS5zY29wZSkucmVtb3ZlKHRoaXMpOwogICAgdGhpcy5zdGF0ZSA9ICdmaW5pc2hlZCc7CiAgfSwKICBldmVudDogZnVuY3Rpb24oZXZlbnROYW1lKSB7CiAgICBpZih0aGlzLm9wdGlvbnNbZXZlbnROYW1lICsgJ0ludGVybmFsJ10pIHRoaXMub3B0aW9uc1tldmVudE5hbWUgKyAnSW50ZXJuYWwnXSh0aGlzKTsKICAgIGlmKHRoaXMub3B0aW9uc1tldmVudE5hbWVdKSB0aGlzLm9wdGlvbnNbZXZlbnROYW1lXSh0aGlzKTsKICB9LAogIGluc3BlY3Q6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuICcjPEVmZmVjdDonICsgJEgodGhpcykuaW5zcGVjdCgpICsgJyxvcHRpb25zOicgKyAkSCh0aGlzLm9wdGlvbnMpLmluc3BlY3QoKSArICc+JzsKICB9Cn0KCkVmZmVjdC5QYXJhbGxlbCA9IENsYXNzLmNyZWF0ZSgpOwpPYmplY3QuZXh0ZW5kKE9iamVjdC5leHRlbmQoRWZmZWN0LlBhcmFsbGVsLnByb3RvdHlwZSwgRWZmZWN0LkJhc2UucHJvdG90eXBlKSwgewogIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVmZmVjdHMpIHsKICAgIHRoaXMuZWZmZWN0cyA9IGVmZmVjdHMgfHwgW107CiAgICB0aGlzLnN0YXJ0KGFyZ3VtZW50c1sxXSk7CiAgfSwKICB1cGRhdGU6IGZ1bmN0aW9uKHBvc2l0aW9uKSB7CiAgICB0aGlzLmVmZmVjdHMuaW52b2tlKCdyZW5kZXInLCBwb3NpdGlvbik7CiAgfSwKICBmaW5pc2g6IGZ1bmN0aW9uKHBvc2l0aW9uKSB7CiAgICB0aGlzLmVmZmVjdHMuZWFjaCggZnVuY3Rpb24oZWZmZWN0KSB7CiAgICAgIGVmZmVjdC5yZW5kZXIoMS4wKTsKICAgICAgZWZmZWN0LmNhbmNlbCgpOwogICAgICBlZmZlY3QuZXZlbnQoJ2JlZm9yZUZpbmlzaCcpOwogICAgICBpZihlZmZlY3QuZmluaXNoKSBlZmZlY3QuZmluaXNoKHBvc2l0aW9uKTsKICAgICAgZWZmZWN0LmV2ZW50KCdhZnRlckZpbmlzaCcpOwogICAgfSk7CiAgfQp9KTsKCkVmZmVjdC5PcGFjaXR5ID0gQ2xhc3MuY3JlYXRlKCk7Ck9iamVjdC5leHRlbmQoT2JqZWN0LmV4dGVuZChFZmZlY3QuT3BhY2l0eS5wcm90b3R5cGUsIEVmZmVjdC5CYXNlLnByb3RvdHlwZSksIHsKICBpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICB0aGlzLmVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgLy8gbWFrZSB0aGlzIHdvcmsgb24gSUUgb24gZWxlbWVudHMgd2l0aG91dCAnbGF5b3V0JwogICAgaWYoL01TSUUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgKCF0aGlzLmVsZW1lbnQuaGFzTGF5b3V0KSkKICAgICAgRWxlbWVudC5zZXRTdHlsZSh0aGlzLmVsZW1lbnQsIHt6b29tOiAxfSk7CiAgICB2YXIgb3B0aW9ucyA9IE9iamVjdC5leHRlbmQoewogICAgICBmcm9tOiBFbGVtZW50LmdldE9wYWNpdHkodGhpcy5lbGVtZW50KSB8fCAwLjAsCiAgICAgIHRvOiAgIDEuMAogICAgfSwgYXJndW1lbnRzWzFdIHx8IHt9KTsKICAgIHRoaXMuc3RhcnQob3B0aW9ucyk7CiAgfSwKICB1cGRhdGU6IGZ1bmN0aW9uKHBvc2l0aW9uKSB7CiAgICBFbGVtZW50LnNldE9wYWNpdHkodGhpcy5lbGVtZW50LCBwb3NpdGlvbik7CiAgfQp9KTsKCkVmZmVjdC5Nb3ZlID0gQ2xhc3MuY3JlYXRlKCk7Ck9iamVjdC5leHRlbmQoT2JqZWN0LmV4dGVuZChFZmZlY3QuTW92ZS5wcm90b3R5cGUsIEVmZmVjdC5CYXNlLnByb3RvdHlwZSksIHsKICBpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICB0aGlzLmVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgdmFyIG9wdGlvbnMgPSBPYmplY3QuZXh0ZW5kKHsKICAgICAgeDogICAgMCwKICAgICAgeTogICAgMCwKICAgICAgbW9kZTogJ3JlbGF0aXZlJwogICAgfSwgYXJndW1lbnRzWzFdIHx8IHt9KTsKICAgIHRoaXMuc3RhcnQob3B0aW9ucyk7CiAgfSwKICBzZXR1cDogZnVuY3Rpb24oKSB7CiAgICAvLyBCdWcgaW4gT3BlcmE6IE9wZXJhIHJldHVybnMgdGhlICJyZWFsIiBwb3NpdGlvbiBvZiBhIHN0YXRpYyBlbGVtZW50IG9yCiAgICAvLyByZWxhdGl2ZSBlbGVtZW50IHRoYXQgZG9lcyBub3QgaGF2ZSB0b3AvbGVmdCBleHBsaWNpdGx5IHNldC4KICAgIC8vID09PiBBbHdheXMgc2V0IHRvcCBhbmQgbGVmdCBmb3IgcG9zaXRpb24gcmVsYXRpdmUgZWxlbWVudHMgaW4geW91ciBzdHlsZXNoZWV0cyAKICAgIC8vICh0byAwIGlmIHlvdSBkbyBub3QgbmVlZCB0aGVtKSAKICAgIEVsZW1lbnQubWFrZVBvc2l0aW9uZWQodGhpcy5lbGVtZW50KTsKICAgIHRoaXMub3JpZ2luYWxMZWZ0ID0gcGFyc2VGbG9hdChFbGVtZW50LmdldFN0eWxlKHRoaXMuZWxlbWVudCwnbGVmdCcpIHx8ICcwJyk7CiAgICB0aGlzLm9yaWdpbmFsVG9wICA9IHBhcnNlRmxvYXQoRWxlbWVudC5nZXRTdHlsZSh0aGlzLmVsZW1lbnQsJ3RvcCcpICB8fCAnMCcpOwogICAgaWYodGhpcy5vcHRpb25zLm1vZGUgPT0gJ2Fic29sdXRlJykgewogICAgICAvLyBhYnNvbHV0ZSBtb3ZlbWVudCwgc28gd2UgbmVlZCB0byBjYWxjIGRlbHRhWCBhbmQgZGVsdGFZCiAgICAgIHRoaXMub3B0aW9ucy54ID0gdGhpcy5vcHRpb25zLnggLSB0aGlzLm9yaWdpbmFsTGVmdDsKICAgICAgdGhpcy5vcHRpb25zLnkgPSB0aGlzLm9wdGlvbnMueSAtIHRoaXMub3JpZ2luYWxUb3A7CiAgICB9CiAgfSwKICB1cGRhdGU6IGZ1bmN0aW9uKHBvc2l0aW9uKSB7CiAgICBFbGVtZW50LnNldFN0eWxlKHRoaXMuZWxlbWVudCwgewogICAgICBsZWZ0OiB0aGlzLm9wdGlvbnMueCAgKiBwb3NpdGlvbiArIHRoaXMub3JpZ2luYWxMZWZ0ICsgJ3B4JywKICAgICAgdG9wOiAgdGhpcy5vcHRpb25zLnkgICogcG9zaXRpb24gKyB0aGlzLm9yaWdpbmFsVG9wICArICdweCcKICAgIH0pOwogIH0KfSk7CgovLyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKRWZmZWN0Lk1vdmVCeSA9IGZ1bmN0aW9uKGVsZW1lbnQsIHRvVG9wLCB0b0xlZnQpIHsKICByZXR1cm4gbmV3IEVmZmVjdC5Nb3ZlKGVsZW1lbnQsIAogICAgT2JqZWN0LmV4dGVuZCh7IHg6IHRvTGVmdCwgeTogdG9Ub3AgfSwgYXJndW1lbnRzWzNdIHx8IHt9KSk7Cn07CgpFZmZlY3QuU2NhbGUgPSBDbGFzcy5jcmVhdGUoKTsKT2JqZWN0LmV4dGVuZChPYmplY3QuZXh0ZW5kKEVmZmVjdC5TY2FsZS5wcm90b3R5cGUsIEVmZmVjdC5CYXNlLnByb3RvdHlwZSksIHsKICBpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50LCBwZXJjZW50KSB7CiAgICB0aGlzLmVsZW1lbnQgPSAkKGVsZW1lbnQpCiAgICB2YXIgb3B0aW9ucyA9IE9iamVjdC5leHRlbmQoewogICAgICBzY2FsZVg6IHRydWUsCiAgICAgIHNjYWxlWTogdHJ1ZSwKICAgICAgc2NhbGVDb250ZW50OiB0cnVlLAogICAgICBzY2FsZUZyb21DZW50ZXI6IGZhbHNlLAogICAgICBzY2FsZU1vZGU6ICdib3gnLCAgICAgICAgLy8gJ2JveCcgb3IgJ2NvbnRlbnRzJyBvciB7fSB3aXRoIHByb3ZpZGVkIHZhbHVlcwogICAgICBzY2FsZUZyb206IDEwMC4wLAogICAgICBzY2FsZVRvOiAgIHBlcmNlbnQKICAgIH0sIGFyZ3VtZW50c1syXSB8fCB7fSk7CiAgICB0aGlzLnN0YXJ0KG9wdGlvbnMpOwogIH0sCiAgc2V0dXA6IGZ1bmN0aW9uKCkgewogICAgdGhpcy5yZXN0b3JlQWZ0ZXJGaW5pc2ggPSB0aGlzLm9wdGlvbnMucmVzdG9yZUFmdGVyRmluaXNoIHx8IGZhbHNlOwogICAgdGhpcy5lbGVtZW50UG9zaXRpb25pbmcgPSBFbGVtZW50LmdldFN0eWxlKHRoaXMuZWxlbWVudCwncG9zaXRpb24nKTsKICAgIAogICAgdGhpcy5vcmlnaW5hbFN0eWxlID0ge307CiAgICBbJ3RvcCcsJ2xlZnQnLCd3aWR0aCcsJ2hlaWdodCcsJ2ZvbnRTaXplJ10uZWFjaCggZnVuY3Rpb24oaykgewogICAgICB0aGlzLm9yaWdpbmFsU3R5bGVba10gPSB0aGlzLmVsZW1lbnQuc3R5bGVba107CiAgICB9LmJpbmQodGhpcykpOwogICAgICAKICAgIHRoaXMub3JpZ2luYWxUb3AgID0gdGhpcy5lbGVtZW50Lm9mZnNldFRvcDsKICAgIHRoaXMub3JpZ2luYWxMZWZ0ID0gdGhpcy5lbGVtZW50Lm9mZnNldExlZnQ7CiAgICAKICAgIHZhciBmb250U2l6ZSA9IEVsZW1lbnQuZ2V0U3R5bGUodGhpcy5lbGVtZW50LCdmb250LXNpemUnKSB8fCAnMTAwJSc7CiAgICBbJ2VtJywncHgnLCclJ10uZWFjaCggZnVuY3Rpb24oZm9udFNpemVUeXBlKSB7CiAgICAgIGlmKGZvbnRTaXplLmluZGV4T2YoZm9udFNpemVUeXBlKT4wKSB7CiAgICAgICAgdGhpcy5mb250U2l6ZSAgICAgPSBwYXJzZUZsb2F0KGZvbnRTaXplKTsKICAgICAgICB0aGlzLmZvbnRTaXplVHlwZSA9IGZvbnRTaXplVHlwZTsKICAgICAgfQogICAgfS5iaW5kKHRoaXMpKTsKICAgIAogICAgdGhpcy5mYWN0b3IgPSAodGhpcy5vcHRpb25zLnNjYWxlVG8gLSB0aGlzLm9wdGlvbnMuc2NhbGVGcm9tKS8xMDA7CiAgICAKICAgIHRoaXMuZGltcyA9IG51bGw7CiAgICBpZih0aGlzLm9wdGlvbnMuc2NhbGVNb2RlPT0nYm94JykKICAgICAgdGhpcy5kaW1zID0gW3RoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHQsIHRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aF07CiAgICBpZigvXmNvbnRlbnQvLnRlc3QodGhpcy5vcHRpb25zLnNjYWxlTW9kZSkpCiAgICAgIHRoaXMuZGltcyA9IFt0aGlzLmVsZW1lbnQuc2Nyb2xsSGVpZ2h0LCB0aGlzLmVsZW1lbnQuc2Nyb2xsV2lkdGhdOwogICAgaWYoIXRoaXMuZGltcykKICAgICAgdGhpcy5kaW1zID0gW3RoaXMub3B0aW9ucy5zY2FsZU1vZGUub3JpZ2luYWxIZWlnaHQsCiAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuc2NhbGVNb2RlLm9yaWdpbmFsV2lkdGhdOwogIH0sCiAgdXBkYXRlOiBmdW5jdGlvbihwb3NpdGlvbikgewogICAgdmFyIGN1cnJlbnRTY2FsZSA9ICh0aGlzLm9wdGlvbnMuc2NhbGVGcm9tLzEwMC4wKSArICh0aGlzLmZhY3RvciAqIHBvc2l0aW9uKTsKICAgIGlmKHRoaXMub3B0aW9ucy5zY2FsZUNvbnRlbnQgJiYgdGhpcy5mb250U2l6ZSkKICAgICAgRWxlbWVudC5zZXRTdHlsZSh0aGlzLmVsZW1lbnQsIHtmb250U2l6ZTogdGhpcy5mb250U2l6ZSAqIGN1cnJlbnRTY2FsZSArIHRoaXMuZm9udFNpemVUeXBlIH0pOwogICAgdGhpcy5zZXREaW1lbnNpb25zKHRoaXMuZGltc1swXSAqIGN1cnJlbnRTY2FsZSwgdGhpcy5kaW1zWzFdICogY3VycmVudFNjYWxlKTsKICB9LAogIGZpbmlzaDogZnVuY3Rpb24ocG9zaXRpb24pIHsKICAgIGlmICh0aGlzLnJlc3RvcmVBZnRlckZpbmlzaCkgRWxlbWVudC5zZXRTdHlsZSh0aGlzLmVsZW1lbnQsIHRoaXMub3JpZ2luYWxTdHlsZSk7CiAgfSwKICBzZXREaW1lbnNpb25zOiBmdW5jdGlvbihoZWlnaHQsIHdpZHRoKSB7CiAgICB2YXIgZCA9IHt9OwogICAgaWYodGhpcy5vcHRpb25zLnNjYWxlWCkgZC53aWR0aCA9IHdpZHRoICsgJ3B4JzsKICAgIGlmKHRoaXMub3B0aW9ucy5zY2FsZVkpIGQuaGVpZ2h0ID0gaGVpZ2h0ICsgJ3B4JzsKICAgIGlmKHRoaXMub3B0aW9ucy5zY2FsZUZyb21DZW50ZXIpIHsKICAgICAgdmFyIHRvcGQgID0gKGhlaWdodCAtIHRoaXMuZGltc1swXSkvMjsKICAgICAgdmFyIGxlZnRkID0gKHdpZHRoICAtIHRoaXMuZGltc1sxXSkvMjsKICAgICAgaWYodGhpcy5lbGVtZW50UG9zaXRpb25pbmcgPT0gJ2Fic29sdXRlJykgewogICAgICAgIGlmKHRoaXMub3B0aW9ucy5zY2FsZVkpIGQudG9wID0gdGhpcy5vcmlnaW5hbFRvcC10b3BkICsgJ3B4JzsKICAgICAgICBpZih0aGlzLm9wdGlvbnMuc2NhbGVYKSBkLmxlZnQgPSB0aGlzLm9yaWdpbmFsTGVmdC1sZWZ0ZCArICdweCc7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYodGhpcy5vcHRpb25zLnNjYWxlWSkgZC50b3AgPSAtdG9wZCArICdweCc7CiAgICAgICAgaWYodGhpcy5vcHRpb25zLnNjYWxlWCkgZC5sZWZ0ID0gLWxlZnRkICsgJ3B4JzsKICAgICAgfQogICAgfQogICAgRWxlbWVudC5zZXRTdHlsZSh0aGlzLmVsZW1lbnQsIGQpOwogIH0KfSk7CgpFZmZlY3QuSGlnaGxpZ2h0ID0gQ2xhc3MuY3JlYXRlKCk7Ck9iamVjdC5leHRlbmQoT2JqZWN0LmV4dGVuZChFZmZlY3QuSGlnaGxpZ2h0LnByb3RvdHlwZSwgRWZmZWN0LkJhc2UucHJvdG90eXBlKSwgewogIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIHRoaXMuZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICB2YXIgb3B0aW9ucyA9IE9iamVjdC5leHRlbmQoeyBzdGFydGNvbG9yOiAnI2ZmZmY5OScgfSwgYXJndW1lbnRzWzFdIHx8IHt9KTsKICAgIHRoaXMuc3RhcnQob3B0aW9ucyk7CiAgfSwKICBzZXR1cDogZnVuY3Rpb24oKSB7CiAgICAvLyBQcmV2ZW50IGV4ZWN1dGluZyBvbiBlbGVtZW50cyBub3QgaW4gdGhlIGxheW91dCBmbG93CiAgICBpZihFbGVtZW50LmdldFN0eWxlKHRoaXMuZWxlbWVudCwgJ2Rpc3BsYXknKT09J25vbmUnKSB7IHRoaXMuY2FuY2VsKCk7IHJldHVybjsgfQogICAgLy8gRGlzYWJsZSBiYWNrZ3JvdW5kIGltYWdlIGR1cmluZyB0aGUgZWZmZWN0CiAgICB0aGlzLm9sZFN0eWxlID0gewogICAgICBiYWNrZ3JvdW5kSW1hZ2U6IEVsZW1lbnQuZ2V0U3R5bGUodGhpcy5lbGVtZW50LCAnYmFja2dyb3VuZC1pbWFnZScpIH07CiAgICBFbGVtZW50LnNldFN0eWxlKHRoaXMuZWxlbWVudCwge2JhY2tncm91bmRJbWFnZTogJ25vbmUnfSk7CiAgICBpZighdGhpcy5vcHRpb25zLmVuZGNvbG9yKQogICAgICB0aGlzLm9wdGlvbnMuZW5kY29sb3IgPSBFbGVtZW50LmdldFN0eWxlKHRoaXMuZWxlbWVudCwgJ2JhY2tncm91bmQtY29sb3InKS5wYXJzZUNvbG9yKCcjZmZmZmZmJyk7CiAgICBpZighdGhpcy5vcHRpb25zLnJlc3RvcmVjb2xvcikKICAgICAgdGhpcy5vcHRpb25zLnJlc3RvcmVjb2xvciA9IEVsZW1lbnQuZ2V0U3R5bGUodGhpcy5lbGVtZW50LCAnYmFja2dyb3VuZC1jb2xvcicpOwogICAgLy8gaW5pdCBjb2xvciBjYWxjdWxhdGlvbnMKICAgIHRoaXMuX2Jhc2UgID0gJFIoMCwyKS5tYXAoZnVuY3Rpb24oaSl7IHJldHVybiBwYXJzZUludCh0aGlzLm9wdGlvbnMuc3RhcnRjb2xvci5zbGljZShpKjIrMSxpKjIrMyksMTYpIH0uYmluZCh0aGlzKSk7CiAgICB0aGlzLl9kZWx0YSA9ICRSKDAsMikubWFwKGZ1bmN0aW9uKGkpeyByZXR1cm4gcGFyc2VJbnQodGhpcy5vcHRpb25zLmVuZGNvbG9yLnNsaWNlKGkqMisxLGkqMiszKSwxNiktdGhpcy5fYmFzZVtpXSB9LmJpbmQodGhpcykpOwogIH0sCiAgdXBkYXRlOiBmdW5jdGlvbihwb3NpdGlvbikgewogICAgRWxlbWVudC5zZXRTdHlsZSh0aGlzLmVsZW1lbnQse2JhY2tncm91bmRDb2xvcjogJFIoMCwyKS5pbmplY3QoJyMnLGZ1bmN0aW9uKG0sdixpKXsKICAgICAgcmV0dXJuIG0rKE1hdGgucm91bmQodGhpcy5fYmFzZVtpXSsodGhpcy5fZGVsdGFbaV0qcG9zaXRpb24pKS50b0NvbG9yUGFydCgpKTsgfS5iaW5kKHRoaXMpKSB9KTsKICB9LAogIGZpbmlzaDogZnVuY3Rpb24oKSB7CiAgICBFbGVtZW50LnNldFN0eWxlKHRoaXMuZWxlbWVudCwgT2JqZWN0LmV4dGVuZCh0aGlzLm9sZFN0eWxlLCB7CiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy5vcHRpb25zLnJlc3RvcmVjb2xvcgogICAgfSkpOwogIH0KfSk7CgpFZmZlY3QuU2Nyb2xsVG8gPSBDbGFzcy5jcmVhdGUoKTsKT2JqZWN0LmV4dGVuZChPYmplY3QuZXh0ZW5kKEVmZmVjdC5TY3JvbGxUby5wcm90b3R5cGUsIEVmZmVjdC5CYXNlLnByb3RvdHlwZSksIHsKICBpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICB0aGlzLmVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgdGhpcy5zdGFydChhcmd1bWVudHNbMV0gfHwge30pOwogIH0sCiAgc2V0dXA6IGZ1bmN0aW9uKCkgewogICAgUG9zaXRpb24ucHJlcGFyZSgpOwogICAgdmFyIG9mZnNldHMgPSBQb3NpdGlvbi5jdW11bGF0aXZlT2Zmc2V0KHRoaXMuZWxlbWVudCk7CiAgICBpZih0aGlzLm9wdGlvbnMub2Zmc2V0KSBvZmZzZXRzWzFdICs9IHRoaXMub3B0aW9ucy5vZmZzZXQ7CiAgICB2YXIgbWF4ID0gd2luZG93LmlubmVySGVpZ2h0ID8gCiAgICAgIHdpbmRvdy5oZWlnaHQgLSB3aW5kb3cuaW5uZXJIZWlnaHQgOgogICAgICBkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodCAtIAogICAgICAgIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0ID8gCiAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0IDogZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQpOwogICAgdGhpcy5zY3JvbGxTdGFydCA9IFBvc2l0aW9uLmRlbHRhWTsKICAgIHRoaXMuZGVsdGEgPSAob2Zmc2V0c1sxXSA+IG1heCA/IG1heCA6IG9mZnNldHNbMV0pIC0gdGhpcy5zY3JvbGxTdGFydDsKICB9LAogIHVwZGF0ZTogZnVuY3Rpb24ocG9zaXRpb24pIHsKICAgIFBvc2l0aW9uLnByZXBhcmUoKTsKICAgIHdpbmRvdy5zY3JvbGxUbyhQb3NpdGlvbi5kZWx0YVgsIAogICAgICB0aGlzLnNjcm9sbFN0YXJ0ICsgKHBvc2l0aW9uKnRoaXMuZGVsdGEpKTsKICB9Cn0pOwoKLyogLS0tLS0tLS0tLS0tLSBjb21iaW5hdGlvbiBlZmZlY3RzIC0tLS0tLS0tLS0tLS0gKi8KCkVmZmVjdC5GYWRlID0gZnVuY3Rpb24oZWxlbWVudCkgewogIHZhciBvbGRPcGFjaXR5ID0gRWxlbWVudC5nZXRJbmxpbmVPcGFjaXR5KGVsZW1lbnQpOwogIHZhciBvcHRpb25zID0gT2JqZWN0LmV4dGVuZCh7CiAgZnJvbTogRWxlbWVudC5nZXRPcGFjaXR5KGVsZW1lbnQpIHx8IDEuMCwKICB0bzogICAwLjAsCiAgYWZ0ZXJGaW5pc2hJbnRlcm5hbDogZnVuY3Rpb24oZWZmZWN0KSB7IHdpdGgoRWxlbWVudCkgeyAKICAgIGlmKGVmZmVjdC5vcHRpb25zLnRvIT0wKSByZXR1cm47CiAgICBoaWRlKGVmZmVjdC5lbGVtZW50KTsKICAgIHNldFN0eWxlKGVmZmVjdC5lbGVtZW50LCB7b3BhY2l0eTogb2xkT3BhY2l0eX0pOyB9fQogIH0sIGFyZ3VtZW50c1sxXSB8fCB7fSk7CiAgcmV0dXJuIG5ldyBFZmZlY3QuT3BhY2l0eShlbGVtZW50LG9wdGlvbnMpOwp9CgpFZmZlY3QuQXBwZWFyID0gZnVuY3Rpb24oZWxlbWVudCkgewogIHZhciBvcHRpb25zID0gT2JqZWN0LmV4dGVuZCh7CiAgZnJvbTogKEVsZW1lbnQuZ2V0U3R5bGUoZWxlbWVudCwgJ2Rpc3BsYXknKSA9PSAnbm9uZScgPyAwLjAgOiBFbGVtZW50LmdldE9wYWNpdHkoZWxlbWVudCkgfHwgMC4wKSwKICB0bzogICAxLjAsCiAgYmVmb3JlU2V0dXA6IGZ1bmN0aW9uKGVmZmVjdCkgeyB3aXRoKEVsZW1lbnQpIHsKICAgIHNldE9wYWNpdHkoZWZmZWN0LmVsZW1lbnQsIGVmZmVjdC5vcHRpb25zLmZyb20pOwogICAgc2hvdyhlZmZlY3QuZWxlbWVudCk7IH19CiAgfSwgYXJndW1lbnRzWzFdIHx8IHt9KTsKICByZXR1cm4gbmV3IEVmZmVjdC5PcGFjaXR5KGVsZW1lbnQsb3B0aW9ucyk7Cn0KCkVmZmVjdC5QdWZmID0gZnVuY3Rpb24oZWxlbWVudCkgewogIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogIHZhciBvbGRTdHlsZSA9IHsgb3BhY2l0eTogRWxlbWVudC5nZXRJbmxpbmVPcGFjaXR5KGVsZW1lbnQpLCBwb3NpdGlvbjogRWxlbWVudC5nZXRTdHlsZShlbGVtZW50LCAncG9zaXRpb24nKSB9OwogIHJldHVybiBuZXcgRWZmZWN0LlBhcmFsbGVsKAogICBbIG5ldyBFZmZlY3QuU2NhbGUoZWxlbWVudCwgMjAwLCAKICAgICAgeyBzeW5jOiB0cnVlLCBzY2FsZUZyb21DZW50ZXI6IHRydWUsIHNjYWxlQ29udGVudDogdHJ1ZSwgcmVzdG9yZUFmdGVyRmluaXNoOiB0cnVlIH0pLCAKICAgICBuZXcgRWZmZWN0Lk9wYWNpdHkoZWxlbWVudCwgeyBzeW5jOiB0cnVlLCB0bzogMC4wIH0gKSBdLCAKICAgICBPYmplY3QuZXh0ZW5kKHsgZHVyYXRpb246IDEuMCwgCiAgICAgIGJlZm9yZVNldHVwSW50ZXJuYWw6IGZ1bmN0aW9uKGVmZmVjdCkgeyB3aXRoKEVsZW1lbnQpIHsKICAgICAgICBzZXRTdHlsZShlZmZlY3QuZWZmZWN0c1swXS5lbGVtZW50LCB7cG9zaXRpb246ICdhYnNvbHV0ZSd9KTsgfX0sCiAgICAgIGFmdGVyRmluaXNoSW50ZXJuYWw6IGZ1bmN0aW9uKGVmZmVjdCkgeyB3aXRoKEVsZW1lbnQpIHsKICAgICAgICAgaGlkZShlZmZlY3QuZWZmZWN0c1swXS5lbGVtZW50KTsKICAgICAgICAgc2V0U3R5bGUoZWZmZWN0LmVmZmVjdHNbMF0uZWxlbWVudCwgb2xkU3R5bGUpOyB9fQogICAgIH0sIGFyZ3VtZW50c1sxXSB8fCB7fSkKICAgKTsKfQoKRWZmZWN0LkJsaW5kVXAgPSBmdW5jdGlvbihlbGVtZW50KSB7CiAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgRWxlbWVudC5tYWtlQ2xpcHBpbmcoZWxlbWVudCk7CiAgcmV0dXJuIG5ldyBFZmZlY3QuU2NhbGUoZWxlbWVudCwgMCwgCiAgICBPYmplY3QuZXh0ZW5kKHsgc2NhbGVDb250ZW50OiBmYWxzZSwgCiAgICAgIHNjYWxlWDogZmFsc2UsIAogICAgICByZXN0b3JlQWZ0ZXJGaW5pc2g6IHRydWUsCiAgICAgIGFmdGVyRmluaXNoSW50ZXJuYWw6IGZ1bmN0aW9uKGVmZmVjdCkgeyB3aXRoKEVsZW1lbnQpIHsKICAgICAgICBbaGlkZSwgdW5kb0NsaXBwaW5nXS5jYWxsKGVmZmVjdC5lbGVtZW50KTsgfX0gCiAgICB9LCBhcmd1bWVudHNbMV0gfHwge30pCiAgKTsKfQoKRWZmZWN0LkJsaW5kRG93biA9IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICBlbGVtZW50ID0gJChlbGVtZW50KTsKICB2YXIgb2xkSGVpZ2h0ID0gRWxlbWVudC5nZXRTdHlsZShlbGVtZW50LCAnaGVpZ2h0Jyk7CiAgdmFyIGVsZW1lbnREaW1lbnNpb25zID0gRWxlbWVudC5nZXREaW1lbnNpb25zKGVsZW1lbnQpOwogIHJldHVybiBuZXcgRWZmZWN0LlNjYWxlKGVsZW1lbnQsIDEwMCwgCiAgICBPYmplY3QuZXh0ZW5kKHsgc2NhbGVDb250ZW50OiBmYWxzZSwgCiAgICAgIHNjYWxlWDogZmFsc2UsCiAgICAgIHNjYWxlRnJvbTogMCwKICAgICAgc2NhbGVNb2RlOiB7b3JpZ2luYWxIZWlnaHQ6IGVsZW1lbnREaW1lbnNpb25zLmhlaWdodCwgb3JpZ2luYWxXaWR0aDogZWxlbWVudERpbWVuc2lvbnMud2lkdGh9LAogICAgICByZXN0b3JlQWZ0ZXJGaW5pc2g6IHRydWUsCiAgICAgIGFmdGVyU2V0dXA6IGZ1bmN0aW9uKGVmZmVjdCkgeyB3aXRoKEVsZW1lbnQpIHsKICAgICAgICBtYWtlQ2xpcHBpbmcoZWZmZWN0LmVsZW1lbnQpOwogICAgICAgIHNldFN0eWxlKGVmZmVjdC5lbGVtZW50LCB7aGVpZ2h0OiAnMHB4J30pOwogICAgICAgIHNob3coZWZmZWN0LmVsZW1lbnQpOyAKICAgICAgfX0sICAKICAgICAgYWZ0ZXJGaW5pc2hJbnRlcm5hbDogZnVuY3Rpb24oZWZmZWN0KSB7IHdpdGgoRWxlbWVudCkgewogICAgICAgIHVuZG9DbGlwcGluZyhlZmZlY3QuZWxlbWVudCk7CiAgICAgICAgc2V0U3R5bGUoZWZmZWN0LmVsZW1lbnQsIHtoZWlnaHQ6IG9sZEhlaWdodH0pOwogICAgICB9fQogICAgfSwgYXJndW1lbnRzWzFdIHx8IHt9KQogICk7Cn0KCkVmZmVjdC5Td2l0Y2hPZmYgPSBmdW5jdGlvbihlbGVtZW50KSB7CiAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgdmFyIG9sZE9wYWNpdHkgPSBFbGVtZW50LmdldElubGluZU9wYWNpdHkoZWxlbWVudCk7CiAgcmV0dXJuIG5ldyBFZmZlY3QuQXBwZWFyKGVsZW1lbnQsIHsgCiAgICBkdXJhdGlvbjogMC40LAogICAgZnJvbTogMCwKICAgIHRyYW5zaXRpb246IEVmZmVjdC5UcmFuc2l0aW9ucy5mbGlja2VyLAogICAgYWZ0ZXJGaW5pc2hJbnRlcm5hbDogZnVuY3Rpb24oZWZmZWN0KSB7CiAgICAgIG5ldyBFZmZlY3QuU2NhbGUoZWZmZWN0LmVsZW1lbnQsIDEsIHsgCiAgICAgICAgZHVyYXRpb246IDAuMywgc2NhbGVGcm9tQ2VudGVyOiB0cnVlLAogICAgICAgIHNjYWxlWDogZmFsc2UsIHNjYWxlQ29udGVudDogZmFsc2UsIHJlc3RvcmVBZnRlckZpbmlzaDogdHJ1ZSwKICAgICAgICBiZWZvcmVTZXR1cDogZnVuY3Rpb24oZWZmZWN0KSB7IHdpdGgoRWxlbWVudCkgewogICAgICAgICAgW21ha2VQb3NpdGlvbmVkLG1ha2VDbGlwcGluZ10uY2FsbChlZmZlY3QuZWxlbWVudCk7CiAgICAgICAgfX0sCiAgICAgICAgYWZ0ZXJGaW5pc2hJbnRlcm5hbDogZnVuY3Rpb24oZWZmZWN0KSB7IHdpdGgoRWxlbWVudCkgewogICAgICAgICAgW2hpZGUsdW5kb0NsaXBwaW5nLHVuZG9Qb3NpdGlvbmVkXS5jYWxsKGVmZmVjdC5lbGVtZW50KTsKICAgICAgICAgIHNldFN0eWxlKGVmZmVjdC5lbGVtZW50LCB7b3BhY2l0eTogb2xkT3BhY2l0eX0pOwogICAgICAgIH19CiAgICAgIH0pCiAgICB9CiAgfSk7Cn0KCkVmZmVjdC5Ecm9wT3V0ID0gZnVuY3Rpb24oZWxlbWVudCkgewogIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogIHZhciBvbGRTdHlsZSA9IHsKICAgIHRvcDogRWxlbWVudC5nZXRTdHlsZShlbGVtZW50LCAndG9wJyksCiAgICBsZWZ0OiBFbGVtZW50LmdldFN0eWxlKGVsZW1lbnQsICdsZWZ0JyksCiAgICBvcGFjaXR5OiBFbGVtZW50LmdldElubGluZU9wYWNpdHkoZWxlbWVudCkgfTsKICByZXR1cm4gbmV3IEVmZmVjdC5QYXJhbGxlbCgKICAgIFsgbmV3IEVmZmVjdC5Nb3ZlKGVsZW1lbnQsIHt4OiAwLCB5OiAxMDAsIHN5bmM6IHRydWUgfSksIAogICAgICBuZXcgRWZmZWN0Lk9wYWNpdHkoZWxlbWVudCwgeyBzeW5jOiB0cnVlLCB0bzogMC4wIH0pIF0sCiAgICBPYmplY3QuZXh0ZW5kKAogICAgICB7IGR1cmF0aW9uOiAwLjUsCiAgICAgICAgYmVmb3JlU2V0dXA6IGZ1bmN0aW9uKGVmZmVjdCkgeyB3aXRoKEVsZW1lbnQpIHsKICAgICAgICAgIG1ha2VQb3NpdGlvbmVkKGVmZmVjdC5lZmZlY3RzWzBdLmVsZW1lbnQpOyB9fSwKICAgICAgICBhZnRlckZpbmlzaEludGVybmFsOiBmdW5jdGlvbihlZmZlY3QpIHsgd2l0aChFbGVtZW50KSB7CiAgICAgICAgICBbaGlkZSwgdW5kb1Bvc2l0aW9uZWRdLmNhbGwoZWZmZWN0LmVmZmVjdHNbMF0uZWxlbWVudCk7CiAgICAgICAgICBzZXRTdHlsZShlZmZlY3QuZWZmZWN0c1swXS5lbGVtZW50LCBvbGRTdHlsZSk7IH19IAogICAgICB9LCBhcmd1bWVudHNbMV0gfHwge30pKTsKfQoKRWZmZWN0LlNoYWtlID0gZnVuY3Rpb24oZWxlbWVudCkgewogIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogIHZhciBvbGRTdHlsZSA9IHsKICAgIHRvcDogRWxlbWVudC5nZXRTdHlsZShlbGVtZW50LCAndG9wJyksCiAgICBsZWZ0OiBFbGVtZW50LmdldFN0eWxlKGVsZW1lbnQsICdsZWZ0JykgfTsKCSAgcmV0dXJuIG5ldyBFZmZlY3QuTW92ZShlbGVtZW50LCAKCSAgICB7IHg6ICAyMCwgeTogMCwgZHVyYXRpb246IDAuMDUsIGFmdGVyRmluaXNoSW50ZXJuYWw6IGZ1bmN0aW9uKGVmZmVjdCkgewoJICBuZXcgRWZmZWN0Lk1vdmUoZWZmZWN0LmVsZW1lbnQsCgkgICAgeyB4OiAtNDAsIHk6IDAsIGR1cmF0aW9uOiAwLjEsICBhZnRlckZpbmlzaEludGVybmFsOiBmdW5jdGlvbihlZmZlY3QpIHsKCSAgbmV3IEVmZmVjdC5Nb3ZlKGVmZmVjdC5lbGVtZW50LAoJICAgIHsgeDogIDQwLCB5OiAwLCBkdXJhdGlvbjogMC4xLCAgYWZ0ZXJGaW5pc2hJbnRlcm5hbDogZnVuY3Rpb24oZWZmZWN0KSB7CgkgIG5ldyBFZmZlY3QuTW92ZShlZmZlY3QuZWxlbWVudCwKCSAgICB7IHg6IC00MCwgeTogMCwgZHVyYXRpb246IDAuMSwgIGFmdGVyRmluaXNoSW50ZXJuYWw6IGZ1bmN0aW9uKGVmZmVjdCkgewoJICBuZXcgRWZmZWN0Lk1vdmUoZWZmZWN0LmVsZW1lbnQsCgkgICAgeyB4OiAgNDAsIHk6IDAsIGR1cmF0aW9uOiAwLjEsICBhZnRlckZpbmlzaEludGVybmFsOiBmdW5jdGlvbihlZmZlY3QpIHsKCSAgbmV3IEVmZmVjdC5Nb3ZlKGVmZmVjdC5lbGVtZW50LAoJICAgIHsgeDogLTIwLCB5OiAwLCBkdXJhdGlvbjogMC4wNSwgYWZ0ZXJGaW5pc2hJbnRlcm5hbDogZnVuY3Rpb24oZWZmZWN0KSB7IHdpdGgoRWxlbWVudCkgewogICAgICAgIHVuZG9Qb3NpdGlvbmVkKGVmZmVjdC5lbGVtZW50KTsKICAgICAgICBzZXRTdHlsZShlZmZlY3QuZWxlbWVudCwgb2xkU3R5bGUpOwogIH19fSkgfX0pIH19KSB9fSkgfX0pIH19KTsKfQoKRWZmZWN0LlNsaWRlRG93biA9IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICBlbGVtZW50ID0gJChlbGVtZW50KTsKICBFbGVtZW50LmNsZWFuV2hpdGVzcGFjZShlbGVtZW50KTsKICAvLyBTbGlkZURvd24gbmVlZCB0byBoYXZlIHRoZSBjb250ZW50IG9mIHRoZSBlbGVtZW50IHdyYXBwZWQgaW4gYSBjb250YWluZXIgZWxlbWVudCB3aXRoIGZpeGVkIGhlaWdodCEKICB2YXIgb2xkSW5uZXJCb3R0b20gPSBFbGVtZW50LmdldFN0eWxlKGVsZW1lbnQuZmlyc3RDaGlsZCwgJ2JvdHRvbScpOwogIHZhciBlbGVtZW50RGltZW5zaW9ucyA9IEVsZW1lbnQuZ2V0RGltZW5zaW9ucyhlbGVtZW50KTsKICByZXR1cm4gbmV3IEVmZmVjdC5TY2FsZShlbGVtZW50LCAxMDAsIE9iamVjdC5leHRlbmQoeyAKICAgIHNjYWxlQ29udGVudDogZmFsc2UsIAogICAgc2NhbGVYOiBmYWxzZSwgCiAgICBzY2FsZUZyb206IDAsCiAgICBzY2FsZU1vZGU6IHtvcmlnaW5hbEhlaWdodDogZWxlbWVudERpbWVuc2lvbnMuaGVpZ2h0LCBvcmlnaW5hbFdpZHRoOiBlbGVtZW50RGltZW5zaW9ucy53aWR0aH0sCiAgICByZXN0b3JlQWZ0ZXJGaW5pc2g6IHRydWUsCiAgICBhZnRlclNldHVwOiBmdW5jdGlvbihlZmZlY3QpIHsgd2l0aChFbGVtZW50KSB7CiAgICAgIG1ha2VQb3NpdGlvbmVkKGVmZmVjdC5lbGVtZW50KTsKICAgICAgbWFrZVBvc2l0aW9uZWQoZWZmZWN0LmVsZW1lbnQuZmlyc3RDaGlsZCk7CiAgICAgIGlmKHdpbmRvdy5vcGVyYSkgc2V0U3R5bGUoZWZmZWN0LmVsZW1lbnQsIHt0b3A6ICcnfSk7CiAgICAgIG1ha2VDbGlwcGluZyhlZmZlY3QuZWxlbWVudCk7CiAgICAgIHNldFN0eWxlKGVmZmVjdC5lbGVtZW50LCB7aGVpZ2h0OiAnMHB4J30pOwogICAgICBzaG93KGVsZW1lbnQpOyB9fSwKICAgIGFmdGVyVXBkYXRlSW50ZXJuYWw6IGZ1bmN0aW9uKGVmZmVjdCkgeyB3aXRoKEVsZW1lbnQpIHsKICAgICAgc2V0U3R5bGUoZWZmZWN0LmVsZW1lbnQuZmlyc3RDaGlsZCwge2JvdHRvbToKICAgICAgICAoZWZmZWN0LmRpbXNbMF0gLSBlZmZlY3QuZWxlbWVudC5jbGllbnRIZWlnaHQpICsgJ3B4JyB9KTsgfX0sCiAgICBhZnRlckZpbmlzaEludGVybmFsOiBmdW5jdGlvbihlZmZlY3QpIHsgd2l0aChFbGVtZW50KSB7CiAgICAgIHVuZG9DbGlwcGluZyhlZmZlY3QuZWxlbWVudCk7IAogICAgICB1bmRvUG9zaXRpb25lZChlZmZlY3QuZWxlbWVudC5maXJzdENoaWxkKTsKICAgICAgdW5kb1Bvc2l0aW9uZWQoZWZmZWN0LmVsZW1lbnQpOwogICAgICBzZXRTdHlsZShlZmZlY3QuZWxlbWVudC5maXJzdENoaWxkLCB7Ym90dG9tOiBvbGRJbm5lckJvdHRvbX0pOyB9fQogICAgfSwgYXJndW1lbnRzWzFdIHx8IHt9KQogICk7Cn0KICAKRWZmZWN0LlNsaWRlVXAgPSBmdW5jdGlvbihlbGVtZW50KSB7CiAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgRWxlbWVudC5jbGVhbldoaXRlc3BhY2UoZWxlbWVudCk7CiAgdmFyIG9sZElubmVyQm90dG9tID0gRWxlbWVudC5nZXRTdHlsZShlbGVtZW50LmZpcnN0Q2hpbGQsICdib3R0b20nKTsKICByZXR1cm4gbmV3IEVmZmVjdC5TY2FsZShlbGVtZW50LCAwLCAKICAgT2JqZWN0LmV4dGVuZCh7IHNjYWxlQ29udGVudDogZmFsc2UsIAogICAgc2NhbGVYOiBmYWxzZSwgCiAgICBzY2FsZU1vZGU6ICdib3gnLAogICAgc2NhbGVGcm9tOiAxMDAsCiAgICByZXN0b3JlQWZ0ZXJGaW5pc2g6IHRydWUsCiAgICBiZWZvcmVTdGFydEludGVybmFsOiBmdW5jdGlvbihlZmZlY3QpIHsgd2l0aChFbGVtZW50KSB7CiAgICAgIG1ha2VQb3NpdGlvbmVkKGVmZmVjdC5lbGVtZW50KTsKICAgICAgbWFrZVBvc2l0aW9uZWQoZWZmZWN0LmVsZW1lbnQuZmlyc3RDaGlsZCk7CiAgICAgIGlmKHdpbmRvdy5vcGVyYSkgc2V0U3R5bGUoZWZmZWN0LmVsZW1lbnQsIHt0b3A6ICcnfSk7CiAgICAgIG1ha2VDbGlwcGluZyhlZmZlY3QuZWxlbWVudCk7CiAgICAgIHNob3coZWxlbWVudCk7IH19LCAgCiAgICBhZnRlclVwZGF0ZUludGVybmFsOiBmdW5jdGlvbihlZmZlY3QpIHsgd2l0aChFbGVtZW50KSB7CiAgICAgIHNldFN0eWxlKGVmZmVjdC5lbGVtZW50LmZpcnN0Q2hpbGQsIHtib3R0b206CiAgICAgICAgKGVmZmVjdC5kaW1zWzBdIC0gZWZmZWN0LmVsZW1lbnQuY2xpZW50SGVpZ2h0KSArICdweCcgfSk7IH19LAogICAgYWZ0ZXJGaW5pc2hJbnRlcm5hbDogZnVuY3Rpb24oZWZmZWN0KSB7IHdpdGgoRWxlbWVudCkgewogICAgICAgIFtoaWRlLCB1bmRvQ2xpcHBpbmddLmNhbGwoZWZmZWN0LmVsZW1lbnQpOyAKICAgICAgICB1bmRvUG9zaXRpb25lZChlZmZlY3QuZWxlbWVudC5maXJzdENoaWxkKTsKICAgICAgICB1bmRvUG9zaXRpb25lZChlZmZlY3QuZWxlbWVudCk7CiAgICAgICAgc2V0U3R5bGUoZWZmZWN0LmVsZW1lbnQuZmlyc3RDaGlsZCwge2JvdHRvbTogb2xkSW5uZXJCb3R0b219KTsgfX0KICAgfSwgYXJndW1lbnRzWzFdIHx8IHt9KQogICk7Cn0KCi8vIEJ1ZyBpbiBvcGVyYSBtYWtlcyB0aGUgVEQgY29udGFpbmluZyB0aGlzIGVsZW1lbnQgZXhwYW5kIGZvciBhIGluc3RhbmNlIGFmdGVyIGZpbmlzaCAKRWZmZWN0LlNxdWlzaCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICByZXR1cm4gbmV3IEVmZmVjdC5TY2FsZShlbGVtZW50LCB3aW5kb3cub3BlcmEgPyAxIDogMCwgCiAgICB7IHJlc3RvcmVBZnRlckZpbmlzaDogdHJ1ZSwKICAgICAgYmVmb3JlU2V0dXA6IGZ1bmN0aW9uKGVmZmVjdCkgeyB3aXRoKEVsZW1lbnQpIHsKICAgICAgICBtYWtlQ2xpcHBpbmcoZWZmZWN0LmVsZW1lbnQpOyB9fSwgIAogICAgICBhZnRlckZpbmlzaEludGVybmFsOiBmdW5jdGlvbihlZmZlY3QpIHsgd2l0aChFbGVtZW50KSB7CiAgICAgICAgaGlkZShlZmZlY3QuZWxlbWVudCk7IAogICAgICAgIHVuZG9DbGlwcGluZyhlZmZlY3QuZWxlbWVudCk7IH19CiAgfSk7Cn0KCkVmZmVjdC5Hcm93ID0gZnVuY3Rpb24oZWxlbWVudCkgewogIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogIHZhciBvcHRpb25zID0gT2JqZWN0LmV4dGVuZCh7CiAgICBkaXJlY3Rpb246ICdjZW50ZXInLAogICAgbW92ZVRyYW5zaXN0aW9uOiBFZmZlY3QuVHJhbnNpdGlvbnMuc2lub2lkYWwsCiAgICBzY2FsZVRyYW5zaXRpb246IEVmZmVjdC5UcmFuc2l0aW9ucy5zaW5vaWRhbCwKICAgIG9wYWNpdHlUcmFuc2l0aW9uOiBFZmZlY3QuVHJhbnNpdGlvbnMuZnVsbAogIH0sIGFyZ3VtZW50c1sxXSB8fCB7fSk7CiAgdmFyIG9sZFN0eWxlID0gewogICAgdG9wOiBlbGVtZW50LnN0eWxlLnRvcCwKICAgIGxlZnQ6IGVsZW1lbnQuc3R5bGUubGVmdCwKICAgIGhlaWdodDogZWxlbWVudC5zdHlsZS5oZWlnaHQsCiAgICB3aWR0aDogZWxlbWVudC5zdHlsZS53aWR0aCwKICAgIG9wYWNpdHk6IEVsZW1lbnQuZ2V0SW5saW5lT3BhY2l0eShlbGVtZW50KSB9OwoKICB2YXIgZGltcyA9IEVsZW1lbnQuZ2V0RGltZW5zaW9ucyhlbGVtZW50KTsgICAgCiAgdmFyIGluaXRpYWxNb3ZlWCwgaW5pdGlhbE1vdmVZOwogIHZhciBtb3ZlWCwgbW92ZVk7CiAgCiAgc3dpdGNoIChvcHRpb25zLmRpcmVjdGlvbikgewogICAgY2FzZSAndG9wLWxlZnQnOgogICAgICBpbml0aWFsTW92ZVggPSBpbml0aWFsTW92ZVkgPSBtb3ZlWCA9IG1vdmVZID0gMDsgCiAgICAgIGJyZWFrOwogICAgY2FzZSAndG9wLXJpZ2h0JzoKICAgICAgaW5pdGlhbE1vdmVYID0gZGltcy53aWR0aDsKICAgICAgaW5pdGlhbE1vdmVZID0gbW92ZVkgPSAwOwogICAgICBtb3ZlWCA9IC1kaW1zLndpZHRoOwogICAgICBicmVhazsKICAgIGNhc2UgJ2JvdHRvbS1sZWZ0JzoKICAgICAgaW5pdGlhbE1vdmVYID0gbW92ZVggPSAwOwogICAgICBpbml0aWFsTW92ZVkgPSBkaW1zLmhlaWdodDsKICAgICAgbW92ZVkgPSAtZGltcy5oZWlnaHQ7CiAgICAgIGJyZWFrOwogICAgY2FzZSAnYm90dG9tLXJpZ2h0JzoKICAgICAgaW5pdGlhbE1vdmVYID0gZGltcy53aWR0aDsKICAgICAgaW5pdGlhbE1vdmVZID0gZGltcy5oZWlnaHQ7CiAgICAgIG1vdmVYID0gLWRpbXMud2lkdGg7CiAgICAgIG1vdmVZID0gLWRpbXMuaGVpZ2h0OwogICAgICBicmVhazsKICAgIGNhc2UgJ2NlbnRlcic6CiAgICAgIGluaXRpYWxNb3ZlWCA9IGRpbXMud2lkdGggLyAyOwogICAgICBpbml0aWFsTW92ZVkgPSBkaW1zLmhlaWdodCAvIDI7CiAgICAgIG1vdmVYID0gLWRpbXMud2lkdGggLyAyOwogICAgICBtb3ZlWSA9IC1kaW1zLmhlaWdodCAvIDI7CiAgICAgIGJyZWFrOwogIH0KICAKICByZXR1cm4gbmV3IEVmZmVjdC5Nb3ZlKGVsZW1lbnQsIHsKICAgIHg6IGluaXRpYWxNb3ZlWCwKICAgIHk6IGluaXRpYWxNb3ZlWSwKICAgIGR1cmF0aW9uOiAwLjAxLCAKICAgIGJlZm9yZVNldHVwOiBmdW5jdGlvbihlZmZlY3QpIHsgd2l0aChFbGVtZW50KSB7CiAgICAgIGhpZGUoZWZmZWN0LmVsZW1lbnQpOwogICAgICBtYWtlQ2xpcHBpbmcoZWZmZWN0LmVsZW1lbnQpOwogICAgICBtYWtlUG9zaXRpb25lZChlZmZlY3QuZWxlbWVudCk7CiAgICB9fSwKICAgIGFmdGVyRmluaXNoSW50ZXJuYWw6IGZ1bmN0aW9uKGVmZmVjdCkgewogICAgICBuZXcgRWZmZWN0LlBhcmFsbGVsKAogICAgICAgIFsgbmV3IEVmZmVjdC5PcGFjaXR5KGVmZmVjdC5lbGVtZW50LCB7IHN5bmM6IHRydWUsIHRvOiAxLjAsIGZyb206IDAuMCwgdHJhbnNpdGlvbjogb3B0aW9ucy5vcGFjaXR5VHJhbnNpdGlvbiB9KSwKICAgICAgICAgIG5ldyBFZmZlY3QuTW92ZShlZmZlY3QuZWxlbWVudCwgeyB4OiBtb3ZlWCwgeTogbW92ZVksIHN5bmM6IHRydWUsIHRyYW5zaXRpb246IG9wdGlvbnMubW92ZVRyYW5zaXRpb24gfSksCiAgICAgICAgICBuZXcgRWZmZWN0LlNjYWxlKGVmZmVjdC5lbGVtZW50LCAxMDAsIHsKICAgICAgICAgICAgc2NhbGVNb2RlOiB7IG9yaWdpbmFsSGVpZ2h0OiBkaW1zLmhlaWdodCwgb3JpZ2luYWxXaWR0aDogZGltcy53aWR0aCB9LCAKICAgICAgICAgICAgc3luYzogdHJ1ZSwgc2NhbGVGcm9tOiB3aW5kb3cub3BlcmEgPyAxIDogMCwgdHJhbnNpdGlvbjogb3B0aW9ucy5zY2FsZVRyYW5zaXRpb24sIHJlc3RvcmVBZnRlckZpbmlzaDogdHJ1ZX0pCiAgICAgICAgXSwgT2JqZWN0LmV4dGVuZCh7CiAgICAgICAgICAgICBiZWZvcmVTZXR1cDogZnVuY3Rpb24oZWZmZWN0KSB7IHdpdGgoRWxlbWVudCkgewogICAgICAgICAgICAgICBzZXRTdHlsZShlZmZlY3QuZWZmZWN0c1swXS5lbGVtZW50LCB7aGVpZ2h0OiAnMHB4J30pOwogICAgICAgICAgICAgICBzaG93KGVmZmVjdC5lZmZlY3RzWzBdLmVsZW1lbnQpOyB9fSwKICAgICAgICAgICAgIGFmdGVyRmluaXNoSW50ZXJuYWw6IGZ1bmN0aW9uKGVmZmVjdCkgeyB3aXRoKEVsZW1lbnQpIHsKICAgICAgICAgICAgICAgW3VuZG9DbGlwcGluZywgdW5kb1Bvc2l0aW9uZWRdLmNhbGwoZWZmZWN0LmVmZmVjdHNbMF0uZWxlbWVudCk7IAogICAgICAgICAgICAgICBzZXRTdHlsZShlZmZlY3QuZWZmZWN0c1swXS5lbGVtZW50LCBvbGRTdHlsZSk7IH19CiAgICAgICAgICAgfSwgb3B0aW9ucykKICAgICAgKQogICAgfQogIH0pOwp9CgpFZmZlY3QuU2hyaW5rID0gZnVuY3Rpb24oZWxlbWVudCkgewogIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogIHZhciBvcHRpb25zID0gT2JqZWN0LmV4dGVuZCh7CiAgICBkaXJlY3Rpb246ICdjZW50ZXInLAogICAgbW92ZVRyYW5zaXN0aW9uOiBFZmZlY3QuVHJhbnNpdGlvbnMuc2lub2lkYWwsCiAgICBzY2FsZVRyYW5zaXRpb246IEVmZmVjdC5UcmFuc2l0aW9ucy5zaW5vaWRhbCwKICAgIG9wYWNpdHlUcmFuc2l0aW9uOiBFZmZlY3QuVHJhbnNpdGlvbnMubm9uZQogIH0sIGFyZ3VtZW50c1sxXSB8fCB7fSk7CiAgdmFyIG9sZFN0eWxlID0gewogICAgdG9wOiBlbGVtZW50LnN0eWxlLnRvcCwKICAgIGxlZnQ6IGVsZW1lbnQuc3R5bGUubGVmdCwKICAgIGhlaWdodDogZWxlbWVudC5zdHlsZS5oZWlnaHQsCiAgICB3aWR0aDogZWxlbWVudC5zdHlsZS53aWR0aCwKICAgIG9wYWNpdHk6IEVsZW1lbnQuZ2V0SW5saW5lT3BhY2l0eShlbGVtZW50KSB9OwoKICB2YXIgZGltcyA9IEVsZW1lbnQuZ2V0RGltZW5zaW9ucyhlbGVtZW50KTsKICB2YXIgbW92ZVgsIG1vdmVZOwogIAogIHN3aXRjaCAob3B0aW9ucy5kaXJlY3Rpb24pIHsKICAgIGNhc2UgJ3RvcC1sZWZ0JzoKICAgICAgbW92ZVggPSBtb3ZlWSA9IDA7CiAgICAgIGJyZWFrOwogICAgY2FzZSAndG9wLXJpZ2h0JzoKICAgICAgbW92ZVggPSBkaW1zLndpZHRoOwogICAgICBtb3ZlWSA9IDA7CiAgICAgIGJyZWFrOwogICAgY2FzZSAnYm90dG9tLWxlZnQnOgogICAgICBtb3ZlWCA9IDA7CiAgICAgIG1vdmVZID0gZGltcy5oZWlnaHQ7CiAgICAgIGJyZWFrOwogICAgY2FzZSAnYm90dG9tLXJpZ2h0JzoKICAgICAgbW92ZVggPSBkaW1zLndpZHRoOwogICAgICBtb3ZlWSA9IGRpbXMuaGVpZ2h0OwogICAgICBicmVhazsKICAgIGNhc2UgJ2NlbnRlcic6ICAKICAgICAgbW92ZVggPSBkaW1zLndpZHRoIC8gMjsKICAgICAgbW92ZVkgPSBkaW1zLmhlaWdodCAvIDI7CiAgICAgIGJyZWFrOwogIH0KICAKICByZXR1cm4gbmV3IEVmZmVjdC5QYXJhbGxlbCgKICAgIFsgbmV3IEVmZmVjdC5PcGFjaXR5KGVsZW1lbnQsIHsgc3luYzogdHJ1ZSwgdG86IDAuMCwgZnJvbTogMS4wLCB0cmFuc2l0aW9uOiBvcHRpb25zLm9wYWNpdHlUcmFuc2l0aW9uIH0pLAogICAgICBuZXcgRWZmZWN0LlNjYWxlKGVsZW1lbnQsIHdpbmRvdy5vcGVyYSA/IDEgOiAwLCB7IHN5bmM6IHRydWUsIHRyYW5zaXRpb246IG9wdGlvbnMuc2NhbGVUcmFuc2l0aW9uLCByZXN0b3JlQWZ0ZXJGaW5pc2g6IHRydWV9KSwKICAgICAgbmV3IEVmZmVjdC5Nb3ZlKGVsZW1lbnQsIHsgeDogbW92ZVgsIHk6IG1vdmVZLCBzeW5jOiB0cnVlLCB0cmFuc2l0aW9uOiBvcHRpb25zLm1vdmVUcmFuc2l0aW9uIH0pCiAgICBdLCBPYmplY3QuZXh0ZW5kKHsgICAgICAgICAgICAKICAgICAgICAgYmVmb3JlU3RhcnRJbnRlcm5hbDogZnVuY3Rpb24oZWZmZWN0KSB7IHdpdGgoRWxlbWVudCkgewogICAgICAgICAgIFttYWtlUG9zaXRpb25lZCwgbWFrZUNsaXBwaW5nXS5jYWxsKGVmZmVjdC5lZmZlY3RzWzBdLmVsZW1lbnQpIH19LAogICAgICAgICBhZnRlckZpbmlzaEludGVybmFsOiBmdW5jdGlvbihlZmZlY3QpIHsgd2l0aChFbGVtZW50KSB7CiAgICAgICAgICAgW2hpZGUsIHVuZG9DbGlwcGluZywgdW5kb1Bvc2l0aW9uZWRdLmNhbGwoZWZmZWN0LmVmZmVjdHNbMF0uZWxlbWVudCk7CiAgICAgICAgICAgc2V0U3R5bGUoZWZmZWN0LmVmZmVjdHNbMF0uZWxlbWVudCwgb2xkU3R5bGUpOyB9fQogICAgICAgfSwgb3B0aW9ucykKICApOwp9CgpFZmZlY3QuUHVsc2F0ZSA9IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICBlbGVtZW50ID0gJChlbGVtZW50KTsKICB2YXIgb3B0aW9ucyAgICA9IGFyZ3VtZW50c1sxXSB8fCB7fTsKICB2YXIgb2xkT3BhY2l0eSA9IEVsZW1lbnQuZ2V0SW5saW5lT3BhY2l0eShlbGVtZW50KTsKICB2YXIgdHJhbnNpdGlvbiA9IG9wdGlvbnMudHJhbnNpdGlvbiB8fCBFZmZlY3QuVHJhbnNpdGlvbnMuc2lub2lkYWw7CiAgdmFyIHJldmVyc2VyICAgPSBmdW5jdGlvbihwb3MpeyByZXR1cm4gdHJhbnNpdGlvbigxLUVmZmVjdC5UcmFuc2l0aW9ucy5wdWxzZShwb3MpKSB9OwogIHJldmVyc2VyLmJpbmQodHJhbnNpdGlvbik7CiAgcmV0dXJuIG5ldyBFZmZlY3QuT3BhY2l0eShlbGVtZW50LCAKICAgIE9iamVjdC5leHRlbmQoT2JqZWN0LmV4dGVuZCh7ICBkdXJhdGlvbjogMy4wLCBmcm9tOiAwLAogICAgICBhZnRlckZpbmlzaEludGVybmFsOiBmdW5jdGlvbihlZmZlY3QpIHsgRWxlbWVudC5zZXRTdHlsZShlZmZlY3QuZWxlbWVudCwge29wYWNpdHk6IG9sZE9wYWNpdHl9KTsgfQogICAgfSwgb3B0aW9ucyksIHt0cmFuc2l0aW9uOiByZXZlcnNlcn0pKTsKfQoKRWZmZWN0LkZvbGQgPSBmdW5jdGlvbihlbGVtZW50KSB7CiAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgdmFyIG9sZFN0eWxlID0gewogICAgdG9wOiBlbGVtZW50LnN0eWxlLnRvcCwKICAgIGxlZnQ6IGVsZW1lbnQuc3R5bGUubGVmdCwKICAgIHdpZHRoOiBlbGVtZW50LnN0eWxlLndpZHRoLAogICAgaGVpZ2h0OiBlbGVtZW50LnN0eWxlLmhlaWdodCB9OwogIEVsZW1lbnQubWFrZUNsaXBwaW5nKGVsZW1lbnQpOwogIHJldHVybiBuZXcgRWZmZWN0LlNjYWxlKGVsZW1lbnQsIDUsIE9iamVjdC5leHRlbmQoeyAgIAogICAgc2NhbGVDb250ZW50OiBmYWxzZSwKICAgIHNjYWxlWDogZmFsc2UsCiAgICBhZnRlckZpbmlzaEludGVybmFsOiBmdW5jdGlvbihlZmZlY3QpIHsKICAgIG5ldyBFZmZlY3QuU2NhbGUoZWxlbWVudCwgMSwgeyAKICAgICAgc2NhbGVDb250ZW50OiBmYWxzZSwgCiAgICAgIHNjYWxlWTogZmFsc2UsCiAgICAgIGFmdGVyRmluaXNoSW50ZXJuYWw6IGZ1bmN0aW9uKGVmZmVjdCkgeyB3aXRoKEVsZW1lbnQpIHsKICAgICAgICBbaGlkZSwgdW5kb0NsaXBwaW5nXS5jYWxsKGVmZmVjdC5lbGVtZW50KTsgCiAgICAgICAgc2V0U3R5bGUoZWZmZWN0LmVsZW1lbnQsIG9sZFN0eWxlKTsKICAgICAgfX0gfSk7CiAgfX0sIGFyZ3VtZW50c1sxXSB8fCB7fSkpOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/js/lightbox.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8KLy8JTGlnaHRib3ggdjIuMDMuMwovLwlieSBMb2tlc2ggRGhha2FyIC0gaHR0cDovL3d3dy5odWRkbGV0b2dldGhlci5jb20KLy8JNS8yMS8wNgovLwovLwlGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIHNjcmlwdCwgdmlzaXQ6Ci8vCWh0dHA6Ly9odWRkbGV0b2dldGhlci5jb20vcHJvamVjdHMvbGlnaHRib3gyLwovLwovLwlMaWNlbnNlZCB1bmRlciB0aGUgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbiAyLjUgTGljZW5zZSAtIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzIuNS8KLy8JCi8vCUNyZWRpdCBhbHNvIGR1ZSB0byB0aG9zZSB3aG8gaGF2ZSBoZWxwZWQsIGluc3BpcmVkLCBhbmQgbWFkZSB0aGVpciBjb2RlIGF2YWlsYWJsZSB0byB0aGUgcHVibGljLgovLwlJbmNsdWRpbmc6IFNjb3R0IFVwdG9uKHVwdG9uaWMuY29tKSwgUGV0ZXItUGF1bCBLb2NoKHF1aXJrc21vZGUuY29tKSwgVGhvbWFzIEZ1Y2hzKG1pci5hY3Vsby51cyksIGFuZCBvdGhlcnMuCi8vCi8vCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8qCgoJVGFibGUgb2YgQ29udGVudHMKCS0tLS0tLS0tLS0tLS0tLS0tCglDb25maWd1cmF0aW9uCglHbG9iYWwgVmFyaWFibGVzCgoJRXh0ZW5kaW5nIEJ1aWx0LWluIE9iamVjdHMJCgktIE9iamVjdC5leHRlbmQoRWxlbWVudCkKCS0gQXJyYXkucHJvdG90eXBlLnJlbW92ZUR1cGxpY2F0ZXMoKQoJLSBBcnJheS5wcm90b3R5cGUuZW1wdHkoKQoKCUxpZ2h0Ym94IENsYXNzIERlY2xhcmF0aW9uCgktIGluaXRpYWxpemUoKQoJLSB1cGRhdGVJbWFnZUxpc3QoKQoJLSBzdGFydCgpCgktIGNoYW5nZUltYWdlKCkKCS0gcmVzaXplSW1hZ2VDb250YWluZXIoKQoJLSBzaG93SW1hZ2UoKQoJLSB1cGRhdGVEZXRhaWxzKCkKCS0gdXBkYXRlTmF2KCkKCS0gZW5hYmxlS2V5Ym9hcmROYXYoKQoJLSBkaXNhYmxlS2V5Ym9hcmROYXYoKQoJLSBrZXlib2FyZEFjdGlvbigpCgktIHByZWxvYWROZWlnaGJvckltYWdlcygpCgktIGVuZCgpCgkKCU1pc2NlbGxhbmVvdXMgRnVuY3Rpb25zCgktIGdldFBhZ2VTY3JvbGwoKQoJLSBnZXRQYWdlU2l6ZSgpCgktIGdldEtleSgpCgktIGxpc3RlbktleSgpCgktIHNob3dTZWxlY3RCb3hlcygpCgktIGhpZGVTZWxlY3RCb3hlcygpCgktIHNob3dGbGFzaCgpCgktIGhpZGVGbGFzaCgpCgktIHBhdXNlKCkKCS0gaW5pdExpZ2h0Ym94KCkKCQoJRnVuY3Rpb24gQ2FsbHMKCS0gYWRkTG9hZEV2ZW50KGluaXRMaWdodGJveCkKCQoqLwovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy8KLy8JQ29uZmlndXJhdGlvbgovLwovKgp2YXIgZmlsZUxvYWRpbmdJbWFnZSA9ICJpbWFnZXMvbG9hZGluZy5naWYiOwkJCnZhciBmaWxlQm90dG9tTmF2Q2xvc2VJbWFnZSA9ICJpbWFnZXMvY2xvc2VsYWJlbC5naWYiOwoKdmFyIG92ZXJsYXlPcGFjaXR5ID0gMC44OwkvLyBjb250cm9scyB0cmFuc3BhcmVuY3kgb2Ygc2hhZG93IG92ZXJsYXkKCnZhciBhbmltYXRlID0gdHJ1ZTsJCQkvLyB0b2dnbGVzIHJlc2l6aW5nIGFuaW1hdGlvbnMKdmFyIHJlc2l6ZVNwZWVkID0gNzsJCS8vIGNvbnRyb2xzIHRoZSBzcGVlZCBvZiB0aGUgaW1hZ2UgcmVzaXppbmcgYW5pbWF0aW9ucyAoMT1zbG93ZXN0IGFuZCAxMD1mYXN0ZXN0KQoKdmFyIGJvcmRlclNpemUgPSAxMDsJCS8vaWYgeW91IGFkanVzdCB0aGUgcGFkZGluZyBpbiB0aGUgQ1NTLCB5b3Ugd2lsbCBuZWVkIHRvIHVwZGF0ZSB0aGlzIHZhcmlhYmxlCgoqLwovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy8KLy8JR2xvYmFsIFZhcmlhYmxlcwovLwp2YXIgaW1hZ2VBcnJheSA9IG5ldyBBcnJheTsKdmFyIGFjdGl2ZUltYWdlOwoKaWYoYW5pbWF0ZSA9PSB0cnVlKXsKCW92ZXJsYXlEdXJhdGlvbiA9IDAuMjsJLy8gc2hhZG93IGZhZGUgaW4vb3V0IGR1cmF0aW9uCglpZihyZXNpemVTcGVlZCA+IDEwKXsgcmVzaXplU3BlZWQgPSAxMDt9CglpZihyZXNpemVTcGVlZCA8IDEpeyByZXNpemVTcGVlZCA9IDE7fQoJcmVzaXplRHVyYXRpb24gPSAoMTEgLSByZXNpemVTcGVlZCkgKiAwLjE1Owp9IGVsc2UgeyAKCW92ZXJsYXlEdXJhdGlvbiA9IDA7CglyZXNpemVEdXJhdGlvbiA9IDA7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovLwovLwlBZGRpdGlvbmFsIG1ldGhvZHMgZm9yIEVsZW1lbnQgYWRkZWQgYnkgU1UsIENvdWxvaXIKLy8JLSBmdXJ0aGVyIGFkZGl0aW9ucyBieSBMb2tlc2ggRGhha2FyIChodWRkbGV0b2dldGhlci5jb20pCi8vCk9iamVjdC5leHRlbmQoRWxlbWVudCwgewoJZ2V0V2lkdGg6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKCSAgIAllbGVtZW50ID0gJChlbGVtZW50KTsKCSAgIAlyZXR1cm4gZWxlbWVudC5vZmZzZXRXaWR0aDsgCgl9LAoJc2V0V2lkdGg6IGZ1bmN0aW9uKGVsZW1lbnQsdykgewoJICAgCWVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgCWVsZW1lbnQuc3R5bGUud2lkdGggPSB3ICsicHgiOwoJfSwKCXNldEhlaWdodDogZnVuY3Rpb24oZWxlbWVudCxoKSB7CiAgIAkJZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICAJZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBoICsicHgiOwoJfSwKCXNldFRvcDogZnVuY3Rpb24oZWxlbWVudCx0KSB7CgkgICAJZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICAJZWxlbWVudC5zdHlsZS50b3AgPSB0ICsicHgiOwoJfSwKCXNldExlZnQ6IGZ1bmN0aW9uKGVsZW1lbnQsbCkgewoJICAgCWVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgCWVsZW1lbnQuc3R5bGUubGVmdCA9IGwgKyJweCI7Cgl9LAoJc2V0U3JjOiBmdW5jdGlvbihlbGVtZW50LHNyYykgewogICAgCWVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgCWVsZW1lbnQuc3JjID0gc3JjOyAKCX0sCglzZXRIcmVmOiBmdW5jdGlvbihlbGVtZW50LGhyZWYpIHsKICAgIAllbGVtZW50ID0gJChlbGVtZW50KTsKICAgIAllbGVtZW50LmhyZWYgPSBocmVmOyAKCX0sCglzZXRJbm5lckhUTUw6IGZ1bmN0aW9uKGVsZW1lbnQsY29udGVudCkgewoJCWVsZW1lbnQgPSAkKGVsZW1lbnQpOwoJCWVsZW1lbnQuaW5uZXJIVE1MID0gY29udGVudDsKCX0KfSk7CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy8KLy8JRXh0ZW5kaW5nIGJ1aWx0LWluIEFycmF5IG9iamVjdAovLwktIGFycmF5LnJlbW92ZUR1cGxpY2F0ZXMoKQovLwktIGFycmF5LmVtcHR5KCkKLy8KQXJyYXkucHJvdG90eXBlLnJlbW92ZUR1cGxpY2F0ZXMgPSBmdW5jdGlvbiAoKSB7CiAgICBmb3IoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKXsKICAgICAgICBmb3IoaiA9IHRoaXMubGVuZ3RoLTE7IGo+aTsgai0tKXsgICAgICAgIAogICAgICAgICAgICBpZih0aGlzW2ldWzBdID09IHRoaXNbal1bMF0pewogICAgICAgICAgICAgICAgdGhpcy5zcGxpY2UoaiwxKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkFycmF5LnByb3RvdHlwZS5lbXB0eSA9IGZ1bmN0aW9uICgpIHsKCWZvcihpID0gMDsgaSA8PSB0aGlzLmxlbmd0aDsgaSsrKXsKCQl0aGlzLnNoaWZ0KCk7Cgl9Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovLwovLwlMaWdodGJveCBDbGFzcyBEZWNsYXJhdGlvbgovLwktIGluaXRpYWxpemUoKQovLwktIHN0YXJ0KCkKLy8JLSBjaGFuZ2VJbWFnZSgpCi8vCS0gcmVzaXplSW1hZ2VDb250YWluZXIoKQovLwktIHNob3dJbWFnZSgpCi8vCS0gdXBkYXRlRGV0YWlscygpCi8vCS0gdXBkYXRlTmF2KCkKLy8JLSBlbmFibGVLZXlib2FyZE5hdigpCi8vCS0gZGlzYWJsZUtleWJvYXJkTmF2KCkKLy8JLSBrZXlib2FyZE5hdkFjdGlvbigpCi8vCS0gcHJlbG9hZE5laWdoYm9ySW1hZ2VzKCkKLy8JLSBlbmQoKQovLwovLwlTdHJ1Y3R1cmluZyBvZiBjb2RlIGluc3BpcmVkIGJ5IFNjb3R0IFVwdG9uIChodHRwOi8vd3d3LnVwdG9uaWMuY29tLykKLy8KdmFyIExpZ2h0Ym94ID0gQ2xhc3MuY3JlYXRlKCk7CgpMaWdodGJveC5wcm90b3R5cGUgPSB7CgkKCS8vIGluaXRpYWxpemUoKQoJLy8gQ29uc3RydWN0b3IgcnVucyBvbiBjb21wbGV0aW9uIG9mIHRoZSBET00gbG9hZGluZy4gQ2FsbHMgdXBkYXRlSW1hZ2VMaXN0IGFuZCB0aGVuCgkvLyB0aGUgZnVuY3Rpb24gaW5zZXJ0cyBodG1sIGF0IHRoZSBib3R0b20gb2YgdGhlIHBhZ2Ugd2hpY2ggaXMgdXNlZCB0byBkaXNwbGF5IHRoZSBzaGFkb3cgCgkvLyBvdmVybGF5IGFuZCB0aGUgaW1hZ2UgY29udGFpbmVyLgoJLy8KCWluaXRpYWxpemU6IGZ1bmN0aW9uKCkgewkKCQkKCQl0aGlzLnVwZGF0ZUltYWdlTGlzdCgpOwoKCQkvLyBDb2RlIGluc2VydHMgaHRtbCBhdCB0aGUgYm90dG9tIG9mIHRoZSBwYWdlIHRoYXQgbG9va3Mgc2ltaWxhciB0byB0aGlzOgoJCS8vCgkJLy8JPGRpdiBpZD0ib3ZlcmxheSI+PC9kaXY+CgkJLy8JPGRpdiBpZD0ibGlnaHRib3giPgoJCS8vCQk8ZGl2IGlkPSJvdXRlckltYWdlQ29udGFpbmVyIj4KCQkvLwkJCTxkaXYgaWQ9ImltYWdlQ29udGFpbmVyIj4KCQkvLwkJCQk8aW1nIGlkPSJsaWdodGJveEltYWdlIj4KCQkvLwkJCQk8ZGl2IHN0eWxlPSIiIGlkPSJob3Zlck5hdiI+CgkJLy8JCQkJCTxhIGhyZWY9IiMiIGlkPSJwcmV2TGluayI+PC9hPgoJCS8vCQkJCQk8YSBocmVmPSIjIiBpZD0ibmV4dExpbmsiPjwvYT4KCQkvLwkJCQk8L2Rpdj4KCQkvLwkJCQk8ZGl2IGlkPSJsb2FkaW5nIj4KCQkvLwkJCQkJPGEgaHJlZj0iIyIgaWQ9ImxvYWRpbmdMaW5rIj4KCQkvLwkJCQkJCTxpbWcgc3JjPSJpbWFnZXMvbG9hZGluZy5naWYiPgoJCS8vCQkJCQk8L2E+CgkJLy8JCQkJPC9kaXY+CgkJLy8JCQk8L2Rpdj4KCQkvLwkJPC9kaXY+CgkJLy8JCTxkaXYgaWQ9ImltYWdlRGF0YUNvbnRhaW5lciI+CgkJLy8JCQk8ZGl2IGlkPSJpbWFnZURhdGEiPgoJCS8vCQkJCTxkaXYgaWQ9ImltYWdlRGV0YWlscyI+CgkJLy8JCQkJCTxzcGFuIGlkPSJjYXB0aW9uIj48L3NwYW4+CgkJLy8JCQkJCTxzcGFuIGlkPSJudW1iZXJEaXNwbGF5Ij48L3NwYW4+CgkJLy8JCQkJPC9kaXY+CgkJLy8JCQkJPGRpdiBpZD0iYm90dG9tTmF2Ij4KCQkvLwkJCQkJPGEgaHJlZj0iIyIgaWQ9ImJvdHRvbU5hdkNsb3NlIj4KCQkvLwkJCQkJCTxpbWcgc3JjPSJpbWFnZXMvY2xvc2UuZ2lmIj4KCQkvLwkJCQkJPC9hPgoJCS8vCQkJCTwvZGl2PgoJCS8vCQkJPC9kaXY+CgkJLy8JCTwvZGl2PgoJCS8vCTwvZGl2PgoKCgkJdmFyIG9iakJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpLml0ZW0oMCk7CgkJCgkJdmFyIG9iak92ZXJsYXkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKCQlvYmpPdmVybGF5LnNldEF0dHJpYnV0ZSgnaWQnLCdvdmVybGF5Jyk7CgkJb2JqT3ZlcmxheS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwoJCW9iak92ZXJsYXkub25jbGljayA9IGZ1bmN0aW9uKCkgeyBteUxpZ2h0Ym94LmVuZCgpOyB9CgkJb2JqQm9keS5hcHBlbmRDaGlsZChvYmpPdmVybGF5KTsKCQkKCQl2YXIgb2JqTGlnaHRib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKCQlvYmpMaWdodGJveC5zZXRBdHRyaWJ1dGUoJ2lkJywnbGlnaHRib3gnKTsKCQlvYmpMaWdodGJveC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwoJCW9iakxpZ2h0Ym94Lm9uY2xpY2sgPSBmdW5jdGlvbihlKSB7CS8vIGNsb3NlIExpZ2h0Ym94IGlzIHVzZXIgY2xpY2tzIHNoYWRvdyBvdmVybGF5CgkJCWlmICghZSkgdmFyIGUgPSB3aW5kb3cuZXZlbnQ7CgkJCXZhciBjbGlja09iaiA9IEV2ZW50LmVsZW1lbnQoZSkuaWQ7CgkJCWlmICggY2xpY2tPYmogPT0gJ2xpZ2h0Ym94JykgewoJCQkJbXlMaWdodGJveC5lbmQoKTsKCQkJfQoJCX07CgkJb2JqQm9keS5hcHBlbmRDaGlsZChvYmpMaWdodGJveCk7CgkJCQoJCXZhciBvYmpPdXRlckltYWdlQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CgkJb2JqT3V0ZXJJbWFnZUNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2lkJywnb3V0ZXJJbWFnZUNvbnRhaW5lcicpOwoJCW9iakxpZ2h0Ym94LmFwcGVuZENoaWxkKG9iak91dGVySW1hZ2VDb250YWluZXIpOwoKCQkvLyBXaGVuIExpZ2h0Ym94IHN0YXJ0cyBpdCB3aWxsIHJlc2l6ZSBpdHNlbGYgZnJvbSAyNTAgYnkgMjUwIHRvIHRoZSBjdXJyZW50IGltYWdlIGRpbWVuc2lvbi4KCQkvLyBJZiBhbmltYXRpb25zIGFyZSB0dXJuZWQgb2ZmLCBpdCB3aWxsIGJlIGhpZGRlbiBhcyB0byBwcmV2ZW50IGEgZmxpY2tlciBvZiBhCgkJLy8gd2hpdGUgMjUwIGJ5IDI1MCBib3guCgkJaWYoYW5pbWF0ZSl7CgkJCUVsZW1lbnQuc2V0V2lkdGgoJ291dGVySW1hZ2VDb250YWluZXInLCAyNTApOwoJCQlFbGVtZW50LnNldEhlaWdodCgnb3V0ZXJJbWFnZUNvbnRhaW5lcicsIDI1MCk7CQkJCgkJfSBlbHNlIHsKCQkJRWxlbWVudC5zZXRXaWR0aCgnb3V0ZXJJbWFnZUNvbnRhaW5lcicsIDEpOwoJCQlFbGVtZW50LnNldEhlaWdodCgnb3V0ZXJJbWFnZUNvbnRhaW5lcicsIDEpOwkJCQoJCX0KCgkJdmFyIG9iakltYWdlQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CgkJb2JqSW1hZ2VDb250YWluZXIuc2V0QXR0cmlidXRlKCdpZCcsJ2ltYWdlQ29udGFpbmVyJyk7CgkJb2JqT3V0ZXJJbWFnZUNvbnRhaW5lci5hcHBlbmRDaGlsZChvYmpJbWFnZUNvbnRhaW5lcik7CgkKCQl2YXIgb2JqTGlnaHRib3hJbWFnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpOwoJCW9iakxpZ2h0Ym94SW1hZ2Uuc2V0QXR0cmlidXRlKCdpZCcsJ2xpZ2h0Ym94SW1hZ2UnKTsKCQlvYmpJbWFnZUNvbnRhaW5lci5hcHBlbmRDaGlsZChvYmpMaWdodGJveEltYWdlKTsKCQoJCXZhciBvYmpIb3Zlck5hdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwoJCW9iakhvdmVyTmF2LnNldEF0dHJpYnV0ZSgnaWQnLCdob3Zlck5hdicpOwoJCW9iakltYWdlQ29udGFpbmVyLmFwcGVuZENoaWxkKG9iakhvdmVyTmF2KTsKCQoJCXZhciBvYmpQcmV2TGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKCQlvYmpQcmV2TGluay5zZXRBdHRyaWJ1dGUoJ2lkJywncHJldkxpbmsnKTsKCQlvYmpQcmV2TGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCcjJyk7CgkJb2JqSG92ZXJOYXYuYXBwZW5kQ2hpbGQob2JqUHJldkxpbmspOwoJCQoJCXZhciBvYmpOZXh0TGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKCQlvYmpOZXh0TGluay5zZXRBdHRyaWJ1dGUoJ2lkJywnbmV4dExpbmsnKTsKCQlvYmpOZXh0TGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCcjJyk7CgkJb2JqSG92ZXJOYXYuYXBwZW5kQ2hpbGQob2JqTmV4dExpbmspOwoJCgkJdmFyIG9iakxvYWRpbmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKCQlvYmpMb2FkaW5nLnNldEF0dHJpYnV0ZSgnaWQnLCdsb2FkaW5nJyk7CgkJb2JqSW1hZ2VDb250YWluZXIuYXBwZW5kQ2hpbGQob2JqTG9hZGluZyk7CgkKCQl2YXIgb2JqTG9hZGluZ0xpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7CgkJb2JqTG9hZGluZ0xpbmsuc2V0QXR0cmlidXRlKCdpZCcsJ2xvYWRpbmdMaW5rJyk7CgkJb2JqTG9hZGluZ0xpbmsuc2V0QXR0cmlidXRlKCdocmVmJywnIycpOwoJCW9iakxvYWRpbmdMaW5rLm9uY2xpY2sgPSBmdW5jdGlvbigpIHsgbXlMaWdodGJveC5lbmQoKTsgcmV0dXJuIGZhbHNlOyB9CgkJb2JqTG9hZGluZy5hcHBlbmRDaGlsZChvYmpMb2FkaW5nTGluayk7CgkKCQl2YXIgb2JqTG9hZGluZ0ltYWdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7CgkJb2JqTG9hZGluZ0ltYWdlLnNldEF0dHJpYnV0ZSgnc3JjJywgZmlsZUxvYWRpbmdJbWFnZSk7CgkJb2JqTG9hZGluZ0xpbmsuYXBwZW5kQ2hpbGQob2JqTG9hZGluZ0ltYWdlKTsKCgkJdmFyIG9iakltYWdlRGF0YUNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwoJCW9iakltYWdlRGF0YUNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2lkJywnaW1hZ2VEYXRhQ29udGFpbmVyJyk7CgkJb2JqTGlnaHRib3guYXBwZW5kQ2hpbGQob2JqSW1hZ2VEYXRhQ29udGFpbmVyKTsKCgkJdmFyIG9iakltYWdlRGF0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwoJCW9iakltYWdlRGF0YS5zZXRBdHRyaWJ1dGUoJ2lkJywnaW1hZ2VEYXRhJyk7CgkJb2JqSW1hZ2VEYXRhQ29udGFpbmVyLmFwcGVuZENoaWxkKG9iakltYWdlRGF0YSk7CgkKCQl2YXIgb2JqSW1hZ2VEZXRhaWxzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CgkJb2JqSW1hZ2VEZXRhaWxzLnNldEF0dHJpYnV0ZSgnaWQnLCdpbWFnZURldGFpbHMnKTsKCQlvYmpJbWFnZURhdGEuYXBwZW5kQ2hpbGQob2JqSW1hZ2VEZXRhaWxzKTsKCQoJCXZhciBvYmpDYXB0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwoJCW9iakNhcHRpb24uc2V0QXR0cmlidXRlKCdpZCcsJ2NhcHRpb24nKTsKCQlvYmpJbWFnZURldGFpbHMuYXBwZW5kQ2hpbGQob2JqQ2FwdGlvbik7CgkKCQl2YXIgb2JqTnVtYmVyRGlzcGxheSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKCQlvYmpOdW1iZXJEaXNwbGF5LnNldEF0dHJpYnV0ZSgnaWQnLCdudW1iZXJEaXNwbGF5Jyk7CgkJb2JqSW1hZ2VEZXRhaWxzLmFwcGVuZENoaWxkKG9iak51bWJlckRpc3BsYXkpOwoJCQoJCXZhciBvYmpCb3R0b21OYXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKCQlvYmpCb3R0b21OYXYuc2V0QXR0cmlidXRlKCdpZCcsJ2JvdHRvbU5hdicpOwoJCW9iakltYWdlRGF0YS5hcHBlbmRDaGlsZChvYmpCb3R0b21OYXYpOwoJCgkJdmFyIG9iakJvdHRvbU5hdkNsb3NlTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKCQlvYmpCb3R0b21OYXZDbG9zZUxpbmsuc2V0QXR0cmlidXRlKCdpZCcsJ2JvdHRvbU5hdkNsb3NlJyk7CgkJb2JqQm90dG9tTmF2Q2xvc2VMaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsJyMnKTsKCQlvYmpCb3R0b21OYXZDbG9zZUxpbmsub25jbGljayA9IGZ1bmN0aW9uKCkgeyBteUxpZ2h0Ym94LmVuZCgpOyByZXR1cm4gZmFsc2U7IH0KCQlvYmpCb3R0b21OYXYuYXBwZW5kQ2hpbGQob2JqQm90dG9tTmF2Q2xvc2VMaW5rKTsKCQoJCXZhciBvYmpCb3R0b21OYXZDbG9zZUltYWdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7CgkJb2JqQm90dG9tTmF2Q2xvc2VJbWFnZS5zZXRBdHRyaWJ1dGUoJ3NyYycsIGZpbGVCb3R0b21OYXZDbG9zZUltYWdlKTsKCQlvYmpCb3R0b21OYXZDbG9zZUxpbmsuYXBwZW5kQ2hpbGQob2JqQm90dG9tTmF2Q2xvc2VJbWFnZSk7Cgl9LAoKCgkvLwoJLy8gdXBkYXRlSW1hZ2VMaXN0KCkKCS8vIExvb3BzIHRocm91Z2ggYW5jaG9yIHRhZ3MgbG9va2luZyBmb3IgJ2xpZ2h0Ym94JyByZWZlcmVuY2VzIGFuZCBhcHBsaWVzIG9uY2xpY2sKCS8vIGV2ZW50cyB0byBhcHByb3ByaWF0ZSBsaW5rcy4gWW91IGNhbiByZXJ1biBhZnRlciBkeW5hbWljYWxseSBhZGRpbmcgaW1hZ2VzIHcvYWpheC4KCS8vCgl1cGRhdGVJbWFnZUxpc3Q6IGZ1bmN0aW9uKCkgewkKCQlpZiAoIWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKXsgcmV0dXJuOyB9CgkJdmFyIGFuY2hvcnMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYScpOwoJCXZhciBhcmVhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdhcmVhJyk7CgoJCS8vIGxvb3AgdGhyb3VnaCBhbGwgYW5jaG9yIHRhZ3MKCQlmb3IgKHZhciBpPTA7IGk8YW5jaG9ycy5sZW5ndGg7IGkrKyl7CgkJCXZhciBhbmNob3IgPSBhbmNob3JzW2ldOwoJCQkKCQkJdmFyIHJlbEF0dHJpYnV0ZSA9IFN0cmluZyhhbmNob3IuZ2V0QXR0cmlidXRlKCdyZWwnKSk7CgkJCQoJCQkvLyB1c2UgdGhlIHN0cmluZy5tYXRjaCgpIG1ldGhvZCB0byBjYXRjaCAnbGlnaHRib3gnIHJlZmVyZW5jZXMgaW4gdGhlIHJlbCBhdHRyaWJ1dGUKCQkJaWYgKGFuY2hvci5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSAmJiAocmVsQXR0cmlidXRlLnRvTG93ZXJDYXNlKCkubWF0Y2goJ2xpZ2h0Ym94JykpKXsKCQkJCWFuY2hvci5vbmNsaWNrID0gZnVuY3Rpb24gKCkge215TGlnaHRib3guc3RhcnQodGhpcyk7IHJldHVybiBmYWxzZTt9CgkJCX0KCQl9CgoJCS8vIGxvb3AgdGhyb3VnaCBhbGwgYXJlYSB0YWdzCgkJLy8gdG9kbzogY29tYmluZSBhbmNob3IgJiBhcmVhIHRhZyBsb29wcwoJCWZvciAodmFyIGk9MDsgaTwgYXJlYXMubGVuZ3RoOyBpKyspewoJCQl2YXIgYXJlYSA9IGFyZWFzW2ldOwoJCQkKCQkJdmFyIHJlbEF0dHJpYnV0ZSA9IFN0cmluZyhhcmVhLmdldEF0dHJpYnV0ZSgncmVsJykpOwoJCQkKCQkJLy8gdXNlIHRoZSBzdHJpbmcubWF0Y2goKSBtZXRob2QgdG8gY2F0Y2ggJ2xpZ2h0Ym94JyByZWZlcmVuY2VzIGluIHRoZSByZWwgYXR0cmlidXRlCgkJCWlmIChhcmVhLmdldEF0dHJpYnV0ZSgnaHJlZicpICYmIChyZWxBdHRyaWJ1dGUudG9Mb3dlckNhc2UoKS5tYXRjaCgnbGlnaHRib3gnKSkpewoJCQkJYXJlYS5vbmNsaWNrID0gZnVuY3Rpb24gKCkge215TGlnaHRib3guc3RhcnQodGhpcyk7IHJldHVybiBmYWxzZTt9CgkJCX0KCQl9Cgl9LAoJCgkKCS8vCgkvLwlzdGFydCgpCgkvLwlEaXNwbGF5IG92ZXJsYXkgYW5kIGxpZ2h0Ym94LiBJZiBpbWFnZSBpcyBwYXJ0IG9mIGEgc2V0LCBhZGQgc2libGluZ3MgdG8gaW1hZ2VBcnJheS4KCS8vCglzdGFydDogZnVuY3Rpb24oaW1hZ2VMaW5rKSB7CQoKCQloaWRlU2VsZWN0Qm94ZXMoKTsKCQloaWRlRmxhc2goKTsKCgkJLy8gc3RyZXRjaCBvdmVybGF5IHRvIGZpbGwgcGFnZSBhbmQgZmFkZSBpbgoJCXZhciBhcnJheVBhZ2VTaXplID0gZ2V0UGFnZVNpemUoKTsKCQlFbGVtZW50LnNldFdpZHRoKCdvdmVybGF5JywgYXJyYXlQYWdlU2l6ZVswXSk7CgkJRWxlbWVudC5zZXRIZWlnaHQoJ292ZXJsYXknLCBhcnJheVBhZ2VTaXplWzFdKTsKCgkJbmV3IEVmZmVjdC5BcHBlYXIoJ292ZXJsYXknLCB7IGR1cmF0aW9uOiBvdmVybGF5RHVyYXRpb24sIGZyb206IDAuMCwgdG86IG92ZXJsYXlPcGFjaXR5IH0pOwoKCQlpbWFnZUFycmF5ID0gW107CgkJaW1hZ2VOdW0gPSAwOwkJCgoJCWlmICghZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUpeyByZXR1cm47IH0KCQl2YXIgYW5jaG9ycyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBpbWFnZUxpbmsudGFnTmFtZSk7CgoJCS8vIGlmIGltYWdlIGlzIE5PVCBwYXJ0IG9mIGEgc2V0Li4KCQlpZigoaW1hZ2VMaW5rLmdldEF0dHJpYnV0ZSgncmVsJykgPT0gJ2xpZ2h0Ym94JykpewoJCQkvLyBhZGQgc2luZ2xlIGltYWdlIHRvIGltYWdlQXJyYXkKCQkJaW1hZ2VBcnJheS5wdXNoKG5ldyBBcnJheShpbWFnZUxpbmsuZ2V0QXR0cmlidXRlKCdocmVmJyksIGltYWdlTGluay5nZXRBdHRyaWJ1dGUoJ3RpdGxlJykpKTsJCQkKCQl9IGVsc2UgewoJCS8vIGlmIGltYWdlIGlzIHBhcnQgb2YgYSBzZXQuLgoKCQkJLy8gbG9vcCB0aHJvdWdoIGFuY2hvcnMsIGZpbmQgb3RoZXIgaW1hZ2VzIGluIHNldCwgYW5kIGFkZCB0aGVtIHRvIGltYWdlQXJyYXkKCQkJZm9yICh2YXIgaT0wOyBpPGFuY2hvcnMubGVuZ3RoOyBpKyspewoJCQkJdmFyIGFuY2hvciA9IGFuY2hvcnNbaV07CgkJCQlpZiAoYW5jaG9yLmdldEF0dHJpYnV0ZSgnaHJlZicpICYmIChhbmNob3IuZ2V0QXR0cmlidXRlKCdyZWwnKSA9PSBpbWFnZUxpbmsuZ2V0QXR0cmlidXRlKCdyZWwnKSkpewoJCQkJCWltYWdlQXJyYXkucHVzaChuZXcgQXJyYXkoYW5jaG9yLmdldEF0dHJpYnV0ZSgnaHJlZicpLCBhbmNob3IuZ2V0QXR0cmlidXRlKCd0aXRsZScpKSk7CgkJCQl9CgkJCX0KCQkJaW1hZ2VBcnJheS5yZW1vdmVEdXBsaWNhdGVzKCk7CgkJCXdoaWxlKGltYWdlQXJyYXlbaW1hZ2VOdW1dWzBdICE9IGltYWdlTGluay5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSkgeyBpbWFnZU51bSsrO30KCQl9CgoJCS8vIGNhbGN1bGF0ZSB0b3AgYW5kIGxlZnQgb2Zmc2V0IGZvciB0aGUgbGlnaHRib3ggCgkJdmFyIGFycmF5UGFnZVNjcm9sbCA9IGdldFBhZ2VTY3JvbGwoKTsKCQl2YXIgbGlnaHRib3hUb3AgPSBhcnJheVBhZ2VTY3JvbGxbMV0gKyAoYXJyYXlQYWdlU2l6ZVszXSAvIDEwKTsKCQl2YXIgbGlnaHRib3hMZWZ0ID0gYXJyYXlQYWdlU2Nyb2xsWzBdOwoJCUVsZW1lbnQuc2V0VG9wKCdsaWdodGJveCcsIGxpZ2h0Ym94VG9wKTsKCQlFbGVtZW50LnNldExlZnQoJ2xpZ2h0Ym94JywgbGlnaHRib3hMZWZ0KTsKCQkKCQlFbGVtZW50LnNob3coJ2xpZ2h0Ym94Jyk7CgkJCgkJdGhpcy5jaGFuZ2VJbWFnZShpbWFnZU51bSk7Cgl9LAoKCS8vCgkvLwljaGFuZ2VJbWFnZSgpCgkvLwlIaWRlIG1vc3QgZWxlbWVudHMgYW5kIHByZWxvYWQgaW1hZ2UgaW4gcHJlcGFyYXRpb24gZm9yIHJlc2l6aW5nIGltYWdlIGNvbnRhaW5lci4KCS8vCgljaGFuZ2VJbWFnZTogZnVuY3Rpb24oaW1hZ2VOdW0pIHsJCgkJCgkJYWN0aXZlSW1hZ2UgPSBpbWFnZU51bTsJLy8gdXBkYXRlIGdsb2JhbCB2YXIKCgkJLy8gaGlkZSBlbGVtZW50cyBkdXJpbmcgdHJhbnNpdGlvbgoJCWlmKGFuaW1hdGUpeyBFbGVtZW50LnNob3coJ2xvYWRpbmcnKTt9CgkJRWxlbWVudC5oaWRlKCdsaWdodGJveEltYWdlJyk7CgkJRWxlbWVudC5oaWRlKCdob3Zlck5hdicpOwoJCUVsZW1lbnQuaGlkZSgncHJldkxpbmsnKTsKCQlFbGVtZW50LmhpZGUoJ25leHRMaW5rJyk7CgkJRWxlbWVudC5oaWRlKCdpbWFnZURhdGFDb250YWluZXInKTsKCQlFbGVtZW50LmhpZGUoJ251bWJlckRpc3BsYXknKTsJCQoJCQoJCWltZ1ByZWxvYWRlciA9IG5ldyBJbWFnZSgpOwoJCQoJCS8vIG9uY2UgaW1hZ2UgaXMgcHJlbG9hZGVkLCByZXNpemUgaW1hZ2UgY29udGFpbmVyCgkJaW1nUHJlbG9hZGVyLm9ubG9hZD1mdW5jdGlvbigpewoJCQlFbGVtZW50LnNldFNyYygnbGlnaHRib3hJbWFnZScsIGltYWdlQXJyYXlbYWN0aXZlSW1hZ2VdWzBdKTsKCQkJb3cgPSBpbWdQcmVsb2FkZXIud2lkdGg7CgkJCWlmKCBvdyA+IGltZ01heFdpZHRoICkgewoJCQkgIEVsZW1lbnQuc2V0V2lkdGgoJ2xpZ2h0Ym94SW1hZ2UnLGltZ01heFdpZHRoKTsKIAkJCSAgaW1nUHJlbG9hZGVyLndpZHRoID0gaW1nTWF4V2lkdGg7CiAJCQkgIGltZ1ByZWxvYWRlci5oZWlnaHQgPSBpbWdQcmVsb2FkZXIuaGVpZ2h0ICogKGltZ01heFdpZHRoIC8gaW1nUHJlbG9hZGVyLndpZHRoKTsKCQkJfQoJCQllbHNlCgkJCSAgewoJCQkgICAgRWxlbWVudC5zZXRXaWR0aCgnbGlnaHRib3hJbWFnZScsaW1nUHJlbG9hZGVyLndpZHRoKTsKCQkJICB9CgkJCW15TGlnaHRib3gucmVzaXplSW1hZ2VDb250YWluZXIoaW1nUHJlbG9hZGVyLndpZHRoLCBpbWdQcmVsb2FkZXIuaGVpZ2h0KTsKCQkJaW1nUHJlbG9hZGVyLm9ubG9hZD1mdW5jdGlvbigpe307CS8vCWNsZWFyIG9uTG9hZCwgSUUgYmVoYXZlcyBpcnJhdGljYWxseSB3aXRoIGFuaW1hdGVkIGdpZnMgb3RoZXJ3aXNlIAoJCX0KCQlpbWdQcmVsb2FkZXIuc3JjID0gaW1hZ2VBcnJheVthY3RpdmVJbWFnZV1bMF07Cgl9LAoKCS8vCgkvLwlyZXNpemVJbWFnZUNvbnRhaW5lcigpCgkvLwoJcmVzaXplSW1hZ2VDb250YWluZXI6IGZ1bmN0aW9uKCBpbWdXaWR0aCwgaW1nSGVpZ2h0KSB7CgoJCS8vIGdldCBjdXJyZW4gd2lkdGggYW5kIGhlaWdodAoJCXRoaXMud2lkdGhDdXJyZW50ID0gRWxlbWVudC5nZXRXaWR0aCgnb3V0ZXJJbWFnZUNvbnRhaW5lcicpOwoJCXRoaXMuaGVpZ2h0Q3VycmVudCA9IEVsZW1lbnQuZ2V0SGVpZ2h0KCdvdXRlckltYWdlQ29udGFpbmVyJyk7CgoJCS8vIGdldCBuZXcgd2lkdGggYW5kIGhlaWdodAoJCXZhciB3aWR0aE5ldyA9IChpbWdXaWR0aCAgKyAoYm9yZGVyU2l6ZSAqIDIpKTsKCQl2YXIgaGVpZ2h0TmV3ID0gKGltZ0hlaWdodCAgKyAoYm9yZGVyU2l6ZSAqIDIpKTsKCgkJLy8gc2NhbGFycyBiYXNlZCBvbiBjaGFuZ2UgZnJvbSBvbGQgdG8gbmV3CgkJdGhpcy54U2NhbGUgPSAoIHdpZHRoTmV3IC8gdGhpcy53aWR0aEN1cnJlbnQpICogMTAwOwoJCXRoaXMueVNjYWxlID0gKCBoZWlnaHROZXcgLyB0aGlzLmhlaWdodEN1cnJlbnQpICogMTAwOwoKCQkvLyBjYWxjdWxhdGUgc2l6ZSBkaWZmZXJlbmNlIGJldHdlZW4gbmV3IGFuZCBvbGQgaW1hZ2UsIGFuZCByZXNpemUgaWYgbmVjZXNzYXJ5CgkJd0RpZmYgPSB0aGlzLndpZHRoQ3VycmVudCAtIHdpZHRoTmV3OwoJCWhEaWZmID0gdGhpcy5oZWlnaHRDdXJyZW50IC0gaGVpZ2h0TmV3OwoKCQlpZighKCBoRGlmZiA9PSAwKSl7IG5ldyBFZmZlY3QuU2NhbGUoJ291dGVySW1hZ2VDb250YWluZXInLCB0aGlzLnlTY2FsZSwge3NjYWxlWDogZmFsc2UsIGR1cmF0aW9uOiByZXNpemVEdXJhdGlvbiwgcXVldWU6ICdmcm9udCd9KTsgfQoJCWlmKCEoIHdEaWZmID09IDApKXsgbmV3IEVmZmVjdC5TY2FsZSgnb3V0ZXJJbWFnZUNvbnRhaW5lcicsIHRoaXMueFNjYWxlLCB7c2NhbGVZOiBmYWxzZSwgZGVsYXk6IHJlc2l6ZUR1cmF0aW9uLCBkdXJhdGlvbjogcmVzaXplRHVyYXRpb259KTsgfQoKCQkvLyBpZiBuZXcgYW5kIG9sZCBpbWFnZSBhcmUgc2FtZSBzaXplIGFuZCBubyBzY2FsaW5nIHRyYW5zaXRpb24gaXMgbmVjZXNzYXJ5LCAKCQkvLyBkbyBhIHF1aWNrIHBhdXNlIHRvIHByZXZlbnQgaW1hZ2UgZmxpY2tlci4KCQlpZigoaERpZmYgPT0gMCkgJiYgKHdEaWZmID09IDApKXsKCQkJaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluZGV4T2YoIk1TSUUiKSE9LTEpeyBwYXVzZSgyNTApOyB9IGVsc2UgeyBwYXVzZSgxMDApO30gCgkJfQoKCQlFbGVtZW50LnNldEhlaWdodCgncHJldkxpbmsnLCBpbWdIZWlnaHQpOwoJCUVsZW1lbnQuc2V0SGVpZ2h0KCduZXh0TGluaycsIGltZ0hlaWdodCk7CgkJRWxlbWVudC5zZXRXaWR0aCggJ2ltYWdlRGF0YUNvbnRhaW5lcicsIHdpZHRoTmV3KTsKCgkJdGhpcy5zaG93SW1hZ2UoKTsKCX0sCgkKCS8vCgkvLwlzaG93SW1hZ2UoKQoJLy8JRGlzcGxheSBpbWFnZSBhbmQgYmVnaW4gcHJlbG9hZGluZyBuZWlnaGJvcnMuCgkvLwoJc2hvd0ltYWdlOiBmdW5jdGlvbigpewoJCUVsZW1lbnQuaGlkZSgnbG9hZGluZycpOwoJCW5ldyBFZmZlY3QuQXBwZWFyKCdsaWdodGJveEltYWdlJywgeyBkdXJhdGlvbjogcmVzaXplRHVyYXRpb24sIHF1ZXVlOiAnZW5kJywgYWZ0ZXJGaW5pc2g6IGZ1bmN0aW9uKCl7CW15TGlnaHRib3gudXBkYXRlRGV0YWlscygpOyB9IH0pOwoJCXRoaXMucHJlbG9hZE5laWdoYm9ySW1hZ2VzKCk7Cgl9LAoKCS8vCgkvLwl1cGRhdGVEZXRhaWxzKCkKCS8vCURpc3BsYXkgY2FwdGlvbiwgaW1hZ2UgbnVtYmVyLCBhbmQgYm90dG9tIG5hdi4KCS8vCgl1cGRhdGVEZXRhaWxzOiBmdW5jdGlvbigpIHsKCQoJCS8vIGlmIGNhcHRpb24gaXMgbm90IG51bGwKCQlpZihpbWFnZUFycmF5W2FjdGl2ZUltYWdlXVsxXSl7CgkJCUVsZW1lbnQuc2hvdygnY2FwdGlvbicpOwoJCQlFbGVtZW50LnNldElubmVySFRNTCggJ2NhcHRpb24nLCBpbWFnZUFycmF5W2FjdGl2ZUltYWdlXVsxXSk7CgkJfQoJCQoJCS8vIGlmIGltYWdlIGlzIHBhcnQgb2Ygc2V0IGRpc3BsYXkgJ0ltYWdlIHggb2YgeCcgCgkJaWYoKGltYWdlQXJyYXkubGVuZ3RoID4gMSkgfHwgKHNhdmVJbWFnZSA9PSB0cnVlKSl7CgkJCUVsZW1lbnQuc2hvdygnbnVtYmVyRGlzcGxheScpOwoJCQlFbGVtZW50LnNldElubmVySFRNTCggJ251bWJlckRpc3BsYXknLCAiSW1hZ2UgIiArIGV2YWwoYWN0aXZlSW1hZ2UgKyAxKSArICIgb2YgIiArIGltYWdlQXJyYXkubGVuZ3RoICsgIjxicj48YSB0YXJnZXQ9X2JsYW5rIGhyZWY9IiArIGltYWdlQXJyYXlbYWN0aXZlSW1hZ2VdWzBdICsgIj5DbGljayBoZXJlIHRvIHNhdmUgYSB2ZXJzaW9uIG9mIHRoaXMgaW1hZ2U8L2E+Iik7CgkJCS8vRWxlbWVudC5zZXRJbm5lckhUTUwoICdudW1iZXJEaXNwbGF5JywgIkltYWdlICIgKyBldmFsKGFjdGl2ZUltYWdlICsgMSkgKyAiIG9mICIgKyBpbWFnZUFycmF5Lmxlbmd0aCk7CgkJfQoKCQluZXcgRWZmZWN0LlBhcmFsbGVsKAoJCQlbIG5ldyBFZmZlY3QuU2xpZGVEb3duKCAnaW1hZ2VEYXRhQ29udGFpbmVyJywgeyBzeW5jOiB0cnVlLCBkdXJhdGlvbjogcmVzaXplRHVyYXRpb24sIGZyb206IDAuMCwgdG86IDEuMCB9KSwgCgkJCSAgbmV3IEVmZmVjdC5BcHBlYXIoJ2ltYWdlRGF0YUNvbnRhaW5lcicsIHsgc3luYzogdHJ1ZSwgZHVyYXRpb246IHJlc2l6ZUR1cmF0aW9uIH0pIF0sIAoJCQl7IGR1cmF0aW9uOiByZXNpemVEdXJhdGlvbiwgYWZ0ZXJGaW5pc2g6IGZ1bmN0aW9uKCkgewoJCQkJLy8gdXBkYXRlIG92ZXJsYXkgc2l6ZSBhbmQgdXBkYXRlIG5hdgoJCQkJdmFyIGFycmF5UGFnZVNpemUgPSBnZXRQYWdlU2l6ZSgpOwoJCQkJRWxlbWVudC5zZXRIZWlnaHQoJ292ZXJsYXknLCBhcnJheVBhZ2VTaXplWzFdKTsKCQkJCW15TGlnaHRib3gudXBkYXRlTmF2KCk7CgkJCQl9CgkJCX0gCgkJKTsKCX0sCgoJLy8KCS8vCXVwZGF0ZU5hdigpCgkvLwlEaXNwbGF5IGFwcHJvcHJpYXRlIHByZXZpb3VzIGFuZCBuZXh0IGhvdmVyIG5hdmlnYXRpb24uCgkvLwoJdXBkYXRlTmF2OiBmdW5jdGlvbigpIHsKCgkJRWxlbWVudC5zaG93KCdob3Zlck5hdicpOwkJCQkKCgkJLy8gaWYgbm90IGZpcnN0IGltYWdlIGluIHNldCwgZGlzcGxheSBwcmV2IGltYWdlIGJ1dHRvbgoJCWlmKGFjdGl2ZUltYWdlICE9IDApewoJCQlFbGVtZW50LnNob3coJ3ByZXZMaW5rJyk7CgkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcmV2TGluaycpLm9uY2xpY2sgPSBmdW5jdGlvbigpIHsKCQkJCW15TGlnaHRib3guY2hhbmdlSW1hZ2UoYWN0aXZlSW1hZ2UgLSAxKTsgcmV0dXJuIGZhbHNlOwoJCQl9CgkJfQoKCQkvLyBpZiBub3QgbGFzdCBpbWFnZSBpbiBzZXQsIGRpc3BsYXkgbmV4dCBpbWFnZSBidXR0b24KCQlpZihhY3RpdmVJbWFnZSAhPSAoaW1hZ2VBcnJheS5sZW5ndGggLSAxKSl7CgkJCUVsZW1lbnQuc2hvdygnbmV4dExpbmsnKTsKCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25leHRMaW5rJykub25jbGljayA9IGZ1bmN0aW9uKCkgewoJCQkJbXlMaWdodGJveC5jaGFuZ2VJbWFnZShhY3RpdmVJbWFnZSArIDEpOyByZXR1cm4gZmFsc2U7CgkJCX0KCQl9CgkJCgkJdGhpcy5lbmFibGVLZXlib2FyZE5hdigpOwoJfSwKCgkvLwoJLy8JZW5hYmxlS2V5Ym9hcmROYXYoKQoJLy8KCWVuYWJsZUtleWJvYXJkTmF2OiBmdW5jdGlvbigpIHsKCQlkb2N1bWVudC5vbmtleWRvd24gPSB0aGlzLmtleWJvYXJkQWN0aW9uOyAKCX0sCgoJLy8KCS8vCWRpc2FibGVLZXlib2FyZE5hdigpCgkvLwoJZGlzYWJsZUtleWJvYXJkTmF2OiBmdW5jdGlvbigpIHsKCQlkb2N1bWVudC5vbmtleWRvd24gPSAnJzsKCX0sCgoJLy8KCS8vCWtleWJvYXJkQWN0aW9uKCkKCS8vCglrZXlib2FyZEFjdGlvbjogZnVuY3Rpb24oZSkgewoJCWlmIChlID09IG51bGwpIHsgLy8gaWUKCQkJa2V5Y29kZSA9IGV2ZW50LmtleUNvZGU7CgkJCWVzY2FwZUtleSA9IDI3OwoJCX0gZWxzZSB7IC8vIG1vemlsbGEKCQkJa2V5Y29kZSA9IGUua2V5Q29kZTsKCQkJZXNjYXBlS2V5ID0gZS5ET01fVktfRVNDQVBFOwoJCX0KCgkJa2V5ID0gU3RyaW5nLmZyb21DaGFyQ29kZShrZXljb2RlKS50b0xvd2VyQ2FzZSgpOwoJCQoJCWlmKChrZXkgPT0gJ3gnKSB8fCAoa2V5ID09ICdvJykgfHwgKGtleSA9PSAnYycpIHx8IChrZXljb2RlID09IGVzY2FwZUtleSkpewkvLyBjbG9zZSBsaWdodGJveAoJCQlteUxpZ2h0Ym94LmVuZCgpOwoJCX0gZWxzZSBpZigoa2V5ID09ICdwJykgfHwgKGtleWNvZGUgPT0gMzcpKXsJLy8gZGlzcGxheSBwcmV2aW91cyBpbWFnZQoJCQlpZihhY3RpdmVJbWFnZSAhPSAwKXsKCQkJCW15TGlnaHRib3guZGlzYWJsZUtleWJvYXJkTmF2KCk7CgkJCQlteUxpZ2h0Ym94LmNoYW5nZUltYWdlKGFjdGl2ZUltYWdlIC0gMSk7CgkJCX0KCQl9IGVsc2UgaWYoKGtleSA9PSAnbicpIHx8IChrZXljb2RlID09IDM5KSl7CS8vIGRpc3BsYXkgbmV4dCBpbWFnZQoJCQlpZihhY3RpdmVJbWFnZSAhPSAoaW1hZ2VBcnJheS5sZW5ndGggLSAxKSl7CgkJCQlteUxpZ2h0Ym94LmRpc2FibGVLZXlib2FyZE5hdigpOwoJCQkJbXlMaWdodGJveC5jaGFuZ2VJbWFnZShhY3RpdmVJbWFnZSArIDEpOwoJCQl9CgkJfQoKCX0sCgoJLy8KCS8vCXByZWxvYWROZWlnaGJvckltYWdlcygpCgkvLwlQcmVsb2FkIHByZXZpb3VzIGFuZCBuZXh0IGltYWdlcy4KCS8vCglwcmVsb2FkTmVpZ2hib3JJbWFnZXM6IGZ1bmN0aW9uKCl7CgoJCWlmKChpbWFnZUFycmF5Lmxlbmd0aCAtIDEpID4gYWN0aXZlSW1hZ2UpewoJCQlwcmVsb2FkTmV4dEltYWdlID0gbmV3IEltYWdlKCk7CgkJCXByZWxvYWROZXh0SW1hZ2Uuc3JjID0gaW1hZ2VBcnJheVthY3RpdmVJbWFnZSArIDFdWzBdOwoJCX0KCQlpZihhY3RpdmVJbWFnZSA+IDApewoJCQlwcmVsb2FkUHJldkltYWdlID0gbmV3IEltYWdlKCk7CgkJCXByZWxvYWRQcmV2SW1hZ2Uuc3JjID0gaW1hZ2VBcnJheVthY3RpdmVJbWFnZSAtIDFdWzBdOwoJCX0KCQoJfSwKCgkvLwoJLy8JZW5kKCkKCS8vCgllbmQ6IGZ1bmN0aW9uKCkgewoJCXRoaXMuZGlzYWJsZUtleWJvYXJkTmF2KCk7CgkJRWxlbWVudC5oaWRlKCdsaWdodGJveCcpOwoJCW5ldyBFZmZlY3QuRmFkZSgnb3ZlcmxheScsIHsgZHVyYXRpb246IG92ZXJsYXlEdXJhdGlvbn0pOwoJCXNob3dTZWxlY3RCb3hlcygpOwoJCXNob3dGbGFzaCgpOwoJfQp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy8KLy8gZ2V0UGFnZVNjcm9sbCgpCi8vIFJldHVybnMgYXJyYXkgd2l0aCB4LHkgcGFnZSBzY3JvbGwgdmFsdWVzLgovLyBDb3JlIGNvZGUgZnJvbSAtIHF1aXJrc21vZGUuY29tCi8vCmZ1bmN0aW9uIGdldFBhZ2VTY3JvbGwoKXsKCgl2YXIgeFNjcm9sbCwgeVNjcm9sbDsKCglpZiAoc2VsZi5wYWdlWU9mZnNldCkgewoJCXlTY3JvbGwgPSBzZWxmLnBhZ2VZT2Zmc2V0OwoJCXhTY3JvbGwgPSBzZWxmLnBhZ2VYT2Zmc2V0OwoJfSBlbHNlIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCl7CSAvLyBFeHBsb3JlciA2IFN0cmljdAoJCXlTY3JvbGwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wOwoJCXhTY3JvbGwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdDsKCX0gZWxzZSBpZiAoZG9jdW1lbnQuYm9keSkgey8vIGFsbCBvdGhlciBFeHBsb3JlcnMKCQl5U2Nyb2xsID0gZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A7CgkJeFNjcm9sbCA9IGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdDsJCgl9CgoJYXJyYXlQYWdlU2Nyb2xsID0gbmV3IEFycmF5KHhTY3JvbGwseVNjcm9sbCkgCglyZXR1cm4gYXJyYXlQYWdlU2Nyb2xsOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy8KLy8gZ2V0UGFnZVNpemUoKQovLyBSZXR1cm5zIGFycmF5IHdpdGggcGFnZSB3aWR0aCwgaGVpZ2h0IGFuZCB3aW5kb3cgd2lkdGgsIGhlaWdodAovLyBDb3JlIGNvZGUgZnJvbSAtIHF1aXJrc21vZGUuY29tCi8vIEVkaXQgZm9yIEZpcmVmb3ggYnkgcEhhZXoKLy8KZnVuY3Rpb24gZ2V0UGFnZVNpemUoKXsKCQoJdmFyIHhTY3JvbGwsIHlTY3JvbGw7CgkKCWlmICh3aW5kb3cuaW5uZXJIZWlnaHQgJiYgd2luZG93LnNjcm9sbE1heFkpIHsJCgkJeFNjcm9sbCA9IHdpbmRvdy5pbm5lcldpZHRoICsgd2luZG93LnNjcm9sbE1heFg7CgkJeVNjcm9sbCA9IHdpbmRvdy5pbm5lckhlaWdodCArIHdpbmRvdy5zY3JvbGxNYXhZOwoJfSBlbHNlIGlmIChkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodCA+IGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0KXsgLy8gYWxsIGJ1dCBFeHBsb3JlciBNYWMKCQl4U2Nyb2xsID0gZG9jdW1lbnQuYm9keS5zY3JvbGxXaWR0aDsKCQl5U2Nyb2xsID0gZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQ7Cgl9IGVsc2UgeyAvLyBFeHBsb3JlciBNYWMuLi53b3VsZCBhbHNvIHdvcmsgaW4gRXhwbG9yZXIgNiBTdHJpY3QsIE1vemlsbGEgYW5kIFNhZmFyaQoJCXhTY3JvbGwgPSBkb2N1bWVudC5ib2R5Lm9mZnNldFdpZHRoOwoJCXlTY3JvbGwgPSBkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodDsKCX0KCQoJdmFyIHdpbmRvd1dpZHRoLCB3aW5kb3dIZWlnaHQ7CgkKLy8JY29uc29sZS5sb2coc2VsZi5pbm5lcldpZHRoKTsKLy8JY29uc29sZS5sb2coZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKTsKCglpZiAoc2VsZi5pbm5lckhlaWdodCkgewkvLyBhbGwgZXhjZXB0IEV4cGxvcmVyCgkJaWYoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKXsKCQkJd2luZG93V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7IAoJCX0gZWxzZSB7CgkJCXdpbmRvd1dpZHRoID0gc2VsZi5pbm5lcldpZHRoOwoJCX0KCQl3aW5kb3dIZWlnaHQgPSBzZWxmLmlubmVySGVpZ2h0OwoJfSBlbHNlIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkgeyAvLyBFeHBsb3JlciA2IFN0cmljdCBNb2RlCgkJd2luZG93V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7CgkJd2luZG93SGVpZ2h0ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDsKCX0gZWxzZSBpZiAoZG9jdW1lbnQuYm9keSkgeyAvLyBvdGhlciBFeHBsb3JlcnMKCQl3aW5kb3dXaWR0aCA9IGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGg7CgkJd2luZG93SGVpZ2h0ID0gZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQ7Cgl9CQoJCgkvLyBmb3Igc21hbGwgcGFnZXMgd2l0aCB0b3RhbCBoZWlnaHQgbGVzcyB0aGVuIGhlaWdodCBvZiB0aGUgdmlld3BvcnQKCWlmKHlTY3JvbGwgPCB3aW5kb3dIZWlnaHQpewoJCXBhZ2VIZWlnaHQgPSB3aW5kb3dIZWlnaHQ7Cgl9IGVsc2UgeyAKCQlwYWdlSGVpZ2h0ID0geVNjcm9sbDsKCX0KCi8vCWNvbnNvbGUubG9nKCJ4U2Nyb2xsICIgKyB4U2Nyb2xsKQovLwljb25zb2xlLmxvZygid2luZG93V2lkdGggIiArIHdpbmRvd1dpZHRoKQoKCS8vIGZvciBzbWFsbCBwYWdlcyB3aXRoIHRvdGFsIHdpZHRoIGxlc3MgdGhlbiB3aWR0aCBvZiB0aGUgdmlld3BvcnQKCWlmKHhTY3JvbGwgPCB3aW5kb3dXaWR0aCl7CQoJCXBhZ2VXaWR0aCA9IHhTY3JvbGw7CQkKCX0gZWxzZSB7CgkJcGFnZVdpZHRoID0gd2luZG93V2lkdGg7Cgl9Ci8vCWNvbnNvbGUubG9nKCJwYWdlV2lkdGggIiArIHBhZ2VXaWR0aCkKCglhcnJheVBhZ2VTaXplID0gbmV3IEFycmF5KHBhZ2VXaWR0aCxwYWdlSGVpZ2h0LHdpbmRvd1dpZHRoLHdpbmRvd0hlaWdodCkgCglyZXR1cm4gYXJyYXlQYWdlU2l6ZTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vCi8vIGdldEtleShrZXkpCi8vIEdldHMga2V5Y29kZS4gSWYgJ3gnIGlzIHByZXNzZWQgdGhlbiBpdCBoaWRlcyB0aGUgbGlnaHRib3guCi8vCmZ1bmN0aW9uIGdldEtleShlKXsKCWlmIChlID09IG51bGwpIHsgLy8gaWUKCQlrZXljb2RlID0gZXZlbnQua2V5Q29kZTsKCX0gZWxzZSB7IC8vIG1vemlsbGEKCQlrZXljb2RlID0gZS53aGljaDsKCX0KCWtleSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoa2V5Y29kZSkudG9Mb3dlckNhc2UoKTsKCQoJaWYoa2V5ID09ICd4Jyl7Cgl9Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovLwovLyBsaXN0ZW5LZXkoKQovLwpmdW5jdGlvbiBsaXN0ZW5LZXkgKCkgewlkb2N1bWVudC5vbmtleXByZXNzID0gZ2V0S2V5OyB9CgkKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpmdW5jdGlvbiBzaG93U2VsZWN0Qm94ZXMoKXsKCXZhciBzZWxlY3RzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNlbGVjdCIpOwoJZm9yIChpID0gMDsgaSAhPSBzZWxlY3RzLmxlbmd0aDsgaSsrKSB7CgkJc2VsZWN0c1tpXS5zdHlsZS52aXNpYmlsaXR5ID0gInZpc2libGUiOwoJfQp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmZ1bmN0aW9uIGhpZGVTZWxlY3RCb3hlcygpewoJdmFyIHNlbGVjdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2VsZWN0Iik7Cglmb3IgKGkgPSAwOyBpICE9IHNlbGVjdHMubGVuZ3RoOyBpKyspIHsKCQlzZWxlY3RzW2ldLnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKCX0KfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpmdW5jdGlvbiBzaG93Rmxhc2goKXsKCXZhciBmbGFzaE9iamVjdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgib2JqZWN0Iik7Cglmb3IgKGkgPSAwOyBpIDwgZmxhc2hPYmplY3RzLmxlbmd0aDsgaSsrKSB7CgkJZmxhc2hPYmplY3RzW2ldLnN0eWxlLnZpc2liaWxpdHkgPSAidmlzaWJsZSI7Cgl9CgoJdmFyIGZsYXNoRW1iZWRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImVtYmVkIik7Cglmb3IgKGkgPSAwOyBpIDwgZmxhc2hFbWJlZHMubGVuZ3RoOyBpKyspIHsKCQlmbGFzaEVtYmVkc1tpXS5zdHlsZS52aXNpYmlsaXR5ID0gInZpc2libGUiOwoJfQp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmZ1bmN0aW9uIGhpZGVGbGFzaCgpewoJdmFyIGZsYXNoT2JqZWN0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvYmplY3QiKTsKCWZvciAoaSA9IDA7IGkgPCBmbGFzaE9iamVjdHMubGVuZ3RoOyBpKyspIHsKCQlmbGFzaE9iamVjdHNbaV0uc3R5bGUudmlzaWJpbGl0eSA9ICJoaWRkZW4iOwoJfQoKCXZhciBmbGFzaEVtYmVkcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJlbWJlZCIpOwoJZm9yIChpID0gMDsgaSA8IGZsYXNoRW1iZWRzLmxlbmd0aDsgaSsrKSB7CgkJZmxhc2hFbWJlZHNbaV0uc3R5bGUudmlzaWJpbGl0eSA9ICJoaWRkZW4iOwoJfQoKfQoKCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy8KLy8gcGF1c2UobnVtYmVyTWlsbGlzKQovLyBQYXVzZXMgY29kZSBleGVjdXRpb24gZm9yIHNwZWNpZmllZCB0aW1lLiBVc2VzIGJ1c3kgY29kZSwgbm90IGdvb2QuCi8vIEhlbHAgZnJvbSBSYW4gQmFyLU9uIFtyYW4yMTAzQGdtYWlsLmNvbV0KLy8KCmZ1bmN0aW9uIHBhdXNlKG1zKXsKCXZhciBkYXRlID0gbmV3IERhdGUoKTsKCWN1ckRhdGUgPSBudWxsOwoJZG97dmFyIGN1ckRhdGUgPSBuZXcgRGF0ZSgpO30KCXdoaWxlKCBjdXJEYXRlIC0gZGF0ZSA8IG1zKTsKfQovKgpmdW5jdGlvbiBwYXVzZShudW1iZXJNaWxsaXMpIHsKCXZhciBjdXJlbnRseSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgc2VuZGVyOwoJd2hpbGUgKG5ldyBEYXRlKCkuZ2V0VGltZSgpOwkKfQoqLwovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgoKZnVuY3Rpb24gaW5pdExpZ2h0Ym94KCkgeyBteUxpZ2h0Ym94ID0gbmV3IExpZ2h0Ym94KCk7IH0KRXZlbnQub2JzZXJ2ZSh3aW5kb3csICdsb2FkJywgaW5pdExpZ2h0Ym94LCBmYWxzZSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/js/prototype.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyogIFByb3RvdHlwZSBKYXZhU2NyaXB0IGZyYW1ld29yaywgdmVyc2lvbiAxLjQuMAogKiAgKGMpIDIwMDUgU2FtIFN0ZXBoZW5zb24gPHNhbUBjb25pby5uZXQ+CiAqCiAqICBUSElTIEZJTEUgSVMgQVVUT01BVElDQUxMWSBHRU5FUkFURUQuIFdoZW4gc2VuZGluZyBwYXRjaGVzLCBwbGVhc2UgZGlmZgogKiAgYWdhaW5zdCB0aGUgc291cmNlIHRyZWUsIGF2YWlsYWJsZSBmcm9tIHRoZSBQcm90b3R5cGUgZGFyY3MgcmVwb3NpdG9yeS4KICoKICogIFByb3RvdHlwZSBpcyBmcmVlbHkgZGlzdHJpYnV0YWJsZSB1bmRlciB0aGUgdGVybXMgb2YgYW4gTUlULXN0eWxlIGxpY2Vuc2UuCiAqCiAqICBGb3IgZGV0YWlscywgc2VlIHRoZSBQcm90b3R5cGUgd2ViIHNpdGU6IGh0dHA6Ly9wcm90b3R5cGUuY29uaW8ubmV0LwogKgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCnZhciBQcm90b3R5cGUgPSB7CiAgVmVyc2lvbjogJzEuNC4wJywKICBTY3JpcHRGcmFnbWVudDogJyg/OjxzY3JpcHQuKj8+KSgoXG58XHJ8LikqPykoPzo8XC9zY3JpcHQ+KScsCgogIGVtcHR5RnVuY3Rpb246IGZ1bmN0aW9uKCkge30sCiAgSzogZnVuY3Rpb24oeCkge3JldHVybiB4fQp9Cgp2YXIgQ2xhc3MgPSB7CiAgY3JlYXRlOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgdGhpcy5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICB9CiAgfQp9Cgp2YXIgQWJzdHJhY3QgPSBuZXcgT2JqZWN0KCk7CgpPYmplY3QuZXh0ZW5kID0gZnVuY3Rpb24oZGVzdGluYXRpb24sIHNvdXJjZSkgewogIGZvciAocHJvcGVydHkgaW4gc291cmNlKSB7CiAgICBkZXN0aW5hdGlvbltwcm9wZXJ0eV0gPSBzb3VyY2VbcHJvcGVydHldOwogIH0KICByZXR1cm4gZGVzdGluYXRpb247Cn0KCk9iamVjdC5pbnNwZWN0ID0gZnVuY3Rpb24ob2JqZWN0KSB7CiAgdHJ5IHsKICAgIGlmIChvYmplY3QgPT0gdW5kZWZpbmVkKSByZXR1cm4gJ3VuZGVmaW5lZCc7CiAgICBpZiAob2JqZWN0ID09IG51bGwpIHJldHVybiAnbnVsbCc7CiAgICByZXR1cm4gb2JqZWN0Lmluc3BlY3QgPyBvYmplY3QuaW5zcGVjdCgpIDogb2JqZWN0LnRvU3RyaW5nKCk7CiAgfSBjYXRjaCAoZSkgewogICAgaWYgKGUgaW5zdGFuY2VvZiBSYW5nZUVycm9yKSByZXR1cm4gJy4uLic7CiAgICB0aHJvdyBlOwogIH0KfQoKRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpIHsKICB2YXIgX19tZXRob2QgPSB0aGlzLCBhcmdzID0gJEEoYXJndW1lbnRzKSwgb2JqZWN0ID0gYXJncy5zaGlmdCgpOwogIHJldHVybiBmdW5jdGlvbigpIHsKICAgIHJldHVybiBfX21ldGhvZC5hcHBseShvYmplY3QsIGFyZ3MuY29uY2F0KCRBKGFyZ3VtZW50cykpKTsKICB9Cn0KCkZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kQXNFdmVudExpc3RlbmVyID0gZnVuY3Rpb24ob2JqZWN0KSB7CiAgdmFyIF9fbWV0aG9kID0gdGhpczsKICByZXR1cm4gZnVuY3Rpb24oZXZlbnQpIHsKICAgIHJldHVybiBfX21ldGhvZC5jYWxsKG9iamVjdCwgZXZlbnQgfHwgd2luZG93LmV2ZW50KTsKICB9Cn0KCk9iamVjdC5leHRlbmQoTnVtYmVyLnByb3RvdHlwZSwgewogIHRvQ29sb3JQYXJ0OiBmdW5jdGlvbigpIHsKICAgIHZhciBkaWdpdHMgPSB0aGlzLnRvU3RyaW5nKDE2KTsKICAgIGlmICh0aGlzIDwgMTYpIHJldHVybiAnMCcgKyBkaWdpdHM7CiAgICByZXR1cm4gZGlnaXRzOwogIH0sCgogIHN1Y2M6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXMgKyAxOwogIH0sCgogIHRpbWVzOiBmdW5jdGlvbihpdGVyYXRvcikgewogICAgJFIoMCwgdGhpcywgdHJ1ZSkuZWFjaChpdGVyYXRvcik7CiAgICByZXR1cm4gdGhpczsKICB9Cn0pOwoKdmFyIFRyeSA9IHsKICB0aGVzZTogZnVuY3Rpb24oKSB7CiAgICB2YXIgcmV0dXJuVmFsdWU7CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGxhbWJkYSA9IGFyZ3VtZW50c1tpXTsKICAgICAgdHJ5IHsKICAgICAgICByZXR1cm5WYWx1ZSA9IGxhbWJkYSgpOwogICAgICAgIGJyZWFrOwogICAgICB9IGNhdGNoIChlKSB7fQogICAgfQoKICAgIHJldHVybiByZXR1cm5WYWx1ZTsKICB9Cn0KCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKdmFyIFBlcmlvZGljYWxFeGVjdXRlciA9IENsYXNzLmNyZWF0ZSgpOwpQZXJpb2RpY2FsRXhlY3V0ZXIucHJvdG90eXBlID0gewogIGluaXRpYWxpemU6IGZ1bmN0aW9uKGNhbGxiYWNrLCBmcmVxdWVuY3kpIHsKICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjazsKICAgIHRoaXMuZnJlcXVlbmN5ID0gZnJlcXVlbmN5OwogICAgdGhpcy5jdXJyZW50bHlFeGVjdXRpbmcgPSBmYWxzZTsKCiAgICB0aGlzLnJlZ2lzdGVyQ2FsbGJhY2soKTsKICB9LAoKICByZWdpc3RlckNhbGxiYWNrOiBmdW5jdGlvbigpIHsKICAgIHNldEludGVydmFsKHRoaXMub25UaW1lckV2ZW50LmJpbmQodGhpcyksIHRoaXMuZnJlcXVlbmN5ICogMTAwMCk7CiAgfSwKCiAgb25UaW1lckV2ZW50OiBmdW5jdGlvbigpIHsKICAgIGlmICghdGhpcy5jdXJyZW50bHlFeGVjdXRpbmcpIHsKICAgICAgdHJ5IHsKICAgICAgICB0aGlzLmN1cnJlbnRseUV4ZWN1dGluZyA9IHRydWU7CiAgICAgICAgdGhpcy5jYWxsYmFjaygpOwogICAgICB9IGZpbmFsbHkgewogICAgICAgIHRoaXMuY3VycmVudGx5RXhlY3V0aW5nID0gZmFsc2U7CiAgICAgIH0KICAgIH0KICB9Cn0KCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKZnVuY3Rpb24gJCgpIHsKICB2YXIgZWxlbWVudHMgPSBuZXcgQXJyYXkoKTsKCiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKICAgIHZhciBlbGVtZW50ID0gYXJndW1lbnRzW2ldOwogICAgaWYgKHR5cGVvZiBlbGVtZW50ID09ICdzdHJpbmcnKQogICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudCk7CgogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSkKICAgICAgcmV0dXJuIGVsZW1lbnQ7CgogICAgZWxlbWVudHMucHVzaChlbGVtZW50KTsKICB9CgogIHJldHVybiBlbGVtZW50czsKfQpPYmplY3QuZXh0ZW5kKFN0cmluZy5wcm90b3R5cGUsIHsKICBzdHJpcFRhZ3M6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXMucmVwbGFjZSgvPFwvP1tePl0rPi9naSwgJycpOwogIH0sCgogIHN0cmlwU2NyaXB0czogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpcy5yZXBsYWNlKG5ldyBSZWdFeHAoUHJvdG90eXBlLlNjcmlwdEZyYWdtZW50LCAnaW1nJyksICcnKTsKICB9LAoKICBleHRyYWN0U2NyaXB0czogZnVuY3Rpb24oKSB7CiAgICB2YXIgbWF0Y2hBbGwgPSBuZXcgUmVnRXhwKFByb3RvdHlwZS5TY3JpcHRGcmFnbWVudCwgJ2ltZycpOwogICAgdmFyIG1hdGNoT25lID0gbmV3IFJlZ0V4cChQcm90b3R5cGUuU2NyaXB0RnJhZ21lbnQsICdpbScpOwogICAgcmV0dXJuICh0aGlzLm1hdGNoKG1hdGNoQWxsKSB8fCBbXSkubWFwKGZ1bmN0aW9uKHNjcmlwdFRhZykgewogICAgICByZXR1cm4gKHNjcmlwdFRhZy5tYXRjaChtYXRjaE9uZSkgfHwgWycnLCAnJ10pWzFdOwogICAgfSk7CiAgfSwKCiAgZXZhbFNjcmlwdHM6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXMuZXh0cmFjdFNjcmlwdHMoKS5tYXAoZXZhbCk7CiAgfSwKCiAgZXNjYXBlSFRNTDogZnVuY3Rpb24oKSB7CiAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICB2YXIgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMpOwogICAgZGl2LmFwcGVuZENoaWxkKHRleHQpOwogICAgcmV0dXJuIGRpdi5pbm5lckhUTUw7CiAgfSwKCiAgdW5lc2NhcGVIVE1MOiBmdW5jdGlvbigpIHsKICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgIGRpdi5pbm5lckhUTUwgPSB0aGlzLnN0cmlwVGFncygpOwogICAgcmV0dXJuIGRpdi5jaGlsZE5vZGVzWzBdID8gZGl2LmNoaWxkTm9kZXNbMF0ubm9kZVZhbHVlIDogJyc7CiAgfSwKCiAgdG9RdWVyeVBhcmFtczogZnVuY3Rpb24oKSB7CiAgICB2YXIgcGFpcnMgPSB0aGlzLm1hdGNoKC9eXD8/KC4qKSQvKVsxXS5zcGxpdCgnJicpOwogICAgcmV0dXJuIHBhaXJzLmluamVjdCh7fSwgZnVuY3Rpb24ocGFyYW1zLCBwYWlyU3RyaW5nKSB7CiAgICAgIHZhciBwYWlyID0gcGFpclN0cmluZy5zcGxpdCgnPScpOwogICAgICBwYXJhbXNbcGFpclswXV0gPSBwYWlyWzFdOwogICAgICByZXR1cm4gcGFyYW1zOwogICAgfSk7CiAgfSwKCiAgdG9BcnJheTogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpcy5zcGxpdCgnJyk7CiAgfSwKCiAgY2FtZWxpemU6IGZ1bmN0aW9uKCkgewogICAgdmFyIG9TdHJpbmdMaXN0ID0gdGhpcy5zcGxpdCgnLScpOwogICAgaWYgKG9TdHJpbmdMaXN0Lmxlbmd0aCA9PSAxKSByZXR1cm4gb1N0cmluZ0xpc3RbMF07CgogICAgdmFyIGNhbWVsaXplZFN0cmluZyA9IHRoaXMuaW5kZXhPZignLScpID09IDAKICAgICAgPyBvU3RyaW5nTGlzdFswXS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG9TdHJpbmdMaXN0WzBdLnN1YnN0cmluZygxKQogICAgICA6IG9TdHJpbmdMaXN0WzBdOwoKICAgIGZvciAodmFyIGkgPSAxLCBsZW4gPSBvU3RyaW5nTGlzdC5sZW5ndGg7IGkgPCBsZW47IGkrKykgewogICAgICB2YXIgcyA9IG9TdHJpbmdMaXN0W2ldOwogICAgICBjYW1lbGl6ZWRTdHJpbmcgKz0gcy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHMuc3Vic3RyaW5nKDEpOwogICAgfQoKICAgIHJldHVybiBjYW1lbGl6ZWRTdHJpbmc7CiAgfSwKCiAgaW5zcGVjdDogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gIiciICsgdGhpcy5yZXBsYWNlKCdcXCcsICdcXFxcJykucmVwbGFjZSgiJyIsICdcXFwnJykgKyAiJyI7CiAgfQp9KTsKClN0cmluZy5wcm90b3R5cGUucGFyc2VRdWVyeSA9IFN0cmluZy5wcm90b3R5cGUudG9RdWVyeVBhcmFtczsKCnZhciAkYnJlYWsgICAgPSBuZXcgT2JqZWN0KCk7CnZhciAkY29udGludWUgPSBuZXcgT2JqZWN0KCk7Cgp2YXIgRW51bWVyYWJsZSA9IHsKICBlYWNoOiBmdW5jdGlvbihpdGVyYXRvcikgewogICAgdmFyIGluZGV4ID0gMDsKICAgIHRyeSB7CiAgICAgIHRoaXMuX2VhY2goZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICB0cnkgewogICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGluZGV4KyspOwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIGlmIChlICE9ICRjb250aW51ZSkgdGhyb3cgZTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSBjYXRjaCAoZSkgewogICAgICBpZiAoZSAhPSAkYnJlYWspIHRocm93IGU7CiAgICB9CiAgfSwKCiAgYWxsOiBmdW5jdGlvbihpdGVyYXRvcikgewogICAgdmFyIHJlc3VsdCA9IHRydWU7CiAgICB0aGlzLmVhY2goZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7CiAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAhIShpdGVyYXRvciB8fCBQcm90b3R5cGUuSykodmFsdWUsIGluZGV4KTsKICAgICAgaWYgKCFyZXN1bHQpIHRocm93ICRicmVhazsKICAgIH0pOwogICAgcmV0dXJuIHJlc3VsdDsKICB9LAoKICBhbnk6IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICB2YXIgcmVzdWx0ID0gdHJ1ZTsKICAgIHRoaXMuZWFjaChmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKICAgICAgaWYgKHJlc3VsdCA9ICEhKGl0ZXJhdG9yIHx8IFByb3RvdHlwZS5LKSh2YWx1ZSwgaW5kZXgpKQogICAgICAgIHRocm93ICRicmVhazsKICAgIH0pOwogICAgcmV0dXJuIHJlc3VsdDsKICB9LAoKICBjb2xsZWN0OiBmdW5jdGlvbihpdGVyYXRvcikgewogICAgdmFyIHJlc3VsdHMgPSBbXTsKICAgIHRoaXMuZWFjaChmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKICAgICAgcmVzdWx0cy5wdXNoKGl0ZXJhdG9yKHZhbHVlLCBpbmRleCkpOwogICAgfSk7CiAgICByZXR1cm4gcmVzdWx0czsKICB9LAoKICBkZXRlY3Q6IGZ1bmN0aW9uIChpdGVyYXRvcikgewogICAgdmFyIHJlc3VsdDsKICAgIHRoaXMuZWFjaChmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKICAgICAgaWYgKGl0ZXJhdG9yKHZhbHVlLCBpbmRleCkpIHsKICAgICAgICByZXN1bHQgPSB2YWx1ZTsKICAgICAgICB0aHJvdyAkYnJlYWs7CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIHJlc3VsdDsKICB9LAoKICBmaW5kQWxsOiBmdW5jdGlvbihpdGVyYXRvcikgewogICAgdmFyIHJlc3VsdHMgPSBbXTsKICAgIHRoaXMuZWFjaChmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKICAgICAgaWYgKGl0ZXJhdG9yKHZhbHVlLCBpbmRleCkpCiAgICAgICAgcmVzdWx0cy5wdXNoKHZhbHVlKTsKICAgIH0pOwogICAgcmV0dXJuIHJlc3VsdHM7CiAgfSwKCiAgZ3JlcDogZnVuY3Rpb24ocGF0dGVybiwgaXRlcmF0b3IpIHsKICAgIHZhciByZXN1bHRzID0gW107CiAgICB0aGlzLmVhY2goZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7CiAgICAgIHZhciBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7CiAgICAgIGlmIChzdHJpbmdWYWx1ZS5tYXRjaChwYXR0ZXJuKSkKICAgICAgICByZXN1bHRzLnB1c2goKGl0ZXJhdG9yIHx8IFByb3RvdHlwZS5LKSh2YWx1ZSwgaW5kZXgpKTsKICAgIH0pCiAgICByZXR1cm4gcmVzdWx0czsKICB9LAoKICBpbmNsdWRlOiBmdW5jdGlvbihvYmplY3QpIHsKICAgIHZhciBmb3VuZCA9IGZhbHNlOwogICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgIGlmICh2YWx1ZSA9PSBvYmplY3QpIHsKICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgdGhyb3cgJGJyZWFrOwogICAgICB9CiAgICB9KTsKICAgIHJldHVybiBmb3VuZDsKICB9LAoKICBpbmplY3Q6IGZ1bmN0aW9uKG1lbW8sIGl0ZXJhdG9yKSB7CiAgICB0aGlzLmVhY2goZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7CiAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB2YWx1ZSwgaW5kZXgpOwogICAgfSk7CiAgICByZXR1cm4gbWVtbzsKICB9LAoKICBpbnZva2U6IGZ1bmN0aW9uKG1ldGhvZCkgewogICAgdmFyIGFyZ3MgPSAkQShhcmd1bWVudHMpLnNsaWNlKDEpOwogICAgcmV0dXJuIHRoaXMuY29sbGVjdChmdW5jdGlvbih2YWx1ZSkgewogICAgICByZXR1cm4gdmFsdWVbbWV0aG9kXS5hcHBseSh2YWx1ZSwgYXJncyk7CiAgICB9KTsKICB9LAoKICBtYXg6IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICB2YXIgcmVzdWx0OwogICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgewogICAgICB2YWx1ZSA9IChpdGVyYXRvciB8fCBQcm90b3R5cGUuSykodmFsdWUsIGluZGV4KTsKICAgICAgaWYgKHZhbHVlID49IChyZXN1bHQgfHwgdmFsdWUpKQogICAgICAgIHJlc3VsdCA9IHZhbHVlOwogICAgfSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0sCgogIG1pbjogZnVuY3Rpb24oaXRlcmF0b3IpIHsKICAgIHZhciByZXN1bHQ7CiAgICB0aGlzLmVhY2goZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7CiAgICAgIHZhbHVlID0gKGl0ZXJhdG9yIHx8IFByb3RvdHlwZS5LKSh2YWx1ZSwgaW5kZXgpOwogICAgICBpZiAodmFsdWUgPD0gKHJlc3VsdCB8fCB2YWx1ZSkpCiAgICAgICAgcmVzdWx0ID0gdmFsdWU7CiAgICB9KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfSwKCiAgcGFydGl0aW9uOiBmdW5jdGlvbihpdGVyYXRvcikgewogICAgdmFyIHRydWVzID0gW10sIGZhbHNlcyA9IFtdOwogICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgewogICAgICAoKGl0ZXJhdG9yIHx8IFByb3RvdHlwZS5LKSh2YWx1ZSwgaW5kZXgpID8KICAgICAgICB0cnVlcyA6IGZhbHNlcykucHVzaCh2YWx1ZSk7CiAgICB9KTsKICAgIHJldHVybiBbdHJ1ZXMsIGZhbHNlc107CiAgfSwKCiAgcGx1Y2s6IGZ1bmN0aW9uKHByb3BlcnR5KSB7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgewogICAgICByZXN1bHRzLnB1c2godmFsdWVbcHJvcGVydHldKTsKICAgIH0pOwogICAgcmV0dXJuIHJlc3VsdHM7CiAgfSwKCiAgcmVqZWN0OiBmdW5jdGlvbihpdGVyYXRvcikgewogICAgdmFyIHJlc3VsdHMgPSBbXTsKICAgIHRoaXMuZWFjaChmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKICAgICAgaWYgKCFpdGVyYXRvcih2YWx1ZSwgaW5kZXgpKQogICAgICAgIHJlc3VsdHMucHVzaCh2YWx1ZSk7CiAgICB9KTsKICAgIHJldHVybiByZXN1bHRzOwogIH0sCgogIHNvcnRCeTogZnVuY3Rpb24oaXRlcmF0b3IpIHsKICAgIHJldHVybiB0aGlzLmNvbGxlY3QoZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7CiAgICAgIHJldHVybiB7dmFsdWU6IHZhbHVlLCBjcml0ZXJpYTogaXRlcmF0b3IodmFsdWUsIGluZGV4KX07CiAgICB9KS5zb3J0KGZ1bmN0aW9uKGxlZnQsIHJpZ2h0KSB7CiAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhOwogICAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7CiAgICB9KS5wbHVjaygndmFsdWUnKTsKICB9LAoKICB0b0FycmF5OiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzLmNvbGxlY3QoUHJvdG90eXBlLkspOwogIH0sCgogIHppcDogZnVuY3Rpb24oKSB7CiAgICB2YXIgaXRlcmF0b3IgPSBQcm90b3R5cGUuSywgYXJncyA9ICRBKGFyZ3VtZW50cyk7CiAgICBpZiAodHlwZW9mIGFyZ3MubGFzdCgpID09ICdmdW5jdGlvbicpCiAgICAgIGl0ZXJhdG9yID0gYXJncy5wb3AoKTsKCiAgICB2YXIgY29sbGVjdGlvbnMgPSBbdGhpc10uY29uY2F0KGFyZ3MpLm1hcCgkQSk7CiAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7CiAgICAgIGl0ZXJhdG9yKHZhbHVlID0gY29sbGVjdGlvbnMucGx1Y2soaW5kZXgpKTsKICAgICAgcmV0dXJuIHZhbHVlOwogICAgfSk7CiAgfSwKCiAgaW5zcGVjdDogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gJyM8RW51bWVyYWJsZTonICsgdGhpcy50b0FycmF5KCkuaW5zcGVjdCgpICsgJz4nOwogIH0KfQoKT2JqZWN0LmV4dGVuZChFbnVtZXJhYmxlLCB7CiAgbWFwOiAgICAgRW51bWVyYWJsZS5jb2xsZWN0LAogIGZpbmQ6ICAgIEVudW1lcmFibGUuZGV0ZWN0LAogIHNlbGVjdDogIEVudW1lcmFibGUuZmluZEFsbCwKICBtZW1iZXI6ICBFbnVtZXJhYmxlLmluY2x1ZGUsCiAgZW50cmllczogRW51bWVyYWJsZS50b0FycmF5Cn0pOwp2YXIgJEEgPSBBcnJheS5mcm9tID0gZnVuY3Rpb24oaXRlcmFibGUpIHsKICBpZiAoIWl0ZXJhYmxlKSByZXR1cm4gW107CiAgaWYgKGl0ZXJhYmxlLnRvQXJyYXkpIHsKICAgIHJldHVybiBpdGVyYWJsZS50b0FycmF5KCk7CiAgfSBlbHNlIHsKICAgIHZhciByZXN1bHRzID0gW107CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZXJhYmxlLmxlbmd0aDsgaSsrKQogICAgICByZXN1bHRzLnB1c2goaXRlcmFibGVbaV0pOwogICAgcmV0dXJuIHJlc3VsdHM7CiAgfQp9CgpPYmplY3QuZXh0ZW5kKEFycmF5LnByb3RvdHlwZSwgRW51bWVyYWJsZSk7CgpBcnJheS5wcm90b3R5cGUuX3JldmVyc2UgPSBBcnJheS5wcm90b3R5cGUucmV2ZXJzZTsKCk9iamVjdC5leHRlbmQoQXJyYXkucHJvdG90eXBlLCB7CiAgX2VhY2g6IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspCiAgICAgIGl0ZXJhdG9yKHRoaXNbaV0pOwogIH0sCgogIGNsZWFyOiBmdW5jdGlvbigpIHsKICAgIHRoaXMubGVuZ3RoID0gMDsKICAgIHJldHVybiB0aGlzOwogIH0sCgogIGZpcnN0OiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzWzBdOwogIH0sCgogIGxhc3Q6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXNbdGhpcy5sZW5ndGggLSAxXTsKICB9LAoKICBjb21wYWN0OiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbih2YWx1ZSkgewogICAgICByZXR1cm4gdmFsdWUgIT0gdW5kZWZpbmVkIHx8IHZhbHVlICE9IG51bGw7CiAgICB9KTsKICB9LAoKICBmbGF0dGVuOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzLmluamVjdChbXSwgZnVuY3Rpb24oYXJyYXksIHZhbHVlKSB7CiAgICAgIHJldHVybiBhcnJheS5jb25jYXQodmFsdWUuY29uc3RydWN0b3IgPT0gQXJyYXkgPwogICAgICAgIHZhbHVlLmZsYXR0ZW4oKSA6IFt2YWx1ZV0pOwogICAgfSk7CiAgfSwKCiAgd2l0aG91dDogZnVuY3Rpb24oKSB7CiAgICB2YXIgdmFsdWVzID0gJEEoYXJndW1lbnRzKTsKICAgIHJldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbih2YWx1ZSkgewogICAgICByZXR1cm4gIXZhbHVlcy5pbmNsdWRlKHZhbHVlKTsKICAgIH0pOwogIH0sCgogIGluZGV4T2Y6IGZ1bmN0aW9uKG9iamVjdCkgewogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKQogICAgICBpZiAodGhpc1tpXSA9PSBvYmplY3QpIHJldHVybiBpOwogICAgcmV0dXJuIC0xOwogIH0sCgogIHJldmVyc2U6IGZ1bmN0aW9uKGlubGluZSkgewogICAgcmV0dXJuIChpbmxpbmUgIT09IGZhbHNlID8gdGhpcyA6IHRoaXMudG9BcnJheSgpKS5fcmV2ZXJzZSgpOwogIH0sCgogIHNoaWZ0OiBmdW5jdGlvbigpIHsKICAgIHZhciByZXN1bHQgPSB0aGlzWzBdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aCAtIDE7IGkrKykKICAgICAgdGhpc1tpXSA9IHRoaXNbaSArIDFdOwogICAgdGhpcy5sZW5ndGgtLTsKICAgIHJldHVybiByZXN1bHQ7CiAgfSwKCiAgaW5zcGVjdDogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gJ1snICsgdGhpcy5tYXAoT2JqZWN0Lmluc3BlY3QpLmpvaW4oJywgJykgKyAnXSc7CiAgfQp9KTsKdmFyIEhhc2ggPSB7CiAgX2VhY2g6IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICBmb3IgKGtleSBpbiB0aGlzKSB7CiAgICAgIHZhciB2YWx1ZSA9IHRoaXNba2V5XTsKICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnZnVuY3Rpb24nKSBjb250aW51ZTsKCiAgICAgIHZhciBwYWlyID0gW2tleSwgdmFsdWVdOwogICAgICBwYWlyLmtleSA9IGtleTsKICAgICAgcGFpci52YWx1ZSA9IHZhbHVlOwogICAgICBpdGVyYXRvcihwYWlyKTsKICAgIH0KICB9LAoKICBrZXlzOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzLnBsdWNrKCdrZXknKTsKICB9LAoKICB2YWx1ZXM6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXMucGx1Y2soJ3ZhbHVlJyk7CiAgfSwKCiAgbWVyZ2U6IGZ1bmN0aW9uKGhhc2gpIHsKICAgIHJldHVybiAkSChoYXNoKS5pbmplY3QoJEgodGhpcyksIGZ1bmN0aW9uKG1lcmdlZEhhc2gsIHBhaXIpIHsKICAgICAgbWVyZ2VkSGFzaFtwYWlyLmtleV0gPSBwYWlyLnZhbHVlOwogICAgICByZXR1cm4gbWVyZ2VkSGFzaDsKICAgIH0pOwogIH0sCgogIHRvUXVlcnlTdHJpbmc6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKHBhaXIpIHsKICAgICAgcmV0dXJuIHBhaXIubWFwKGVuY29kZVVSSUNvbXBvbmVudCkuam9pbignPScpOwogICAgfSkuam9pbignJicpOwogIH0sCgogIGluc3BlY3Q6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuICcjPEhhc2g6eycgKyB0aGlzLm1hcChmdW5jdGlvbihwYWlyKSB7CiAgICAgIHJldHVybiBwYWlyLm1hcChPYmplY3QuaW5zcGVjdCkuam9pbignOiAnKTsKICAgIH0pLmpvaW4oJywgJykgKyAnfT4nOwogIH0KfQoKZnVuY3Rpb24gJEgob2JqZWN0KSB7CiAgdmFyIGhhc2ggPSBPYmplY3QuZXh0ZW5kKHt9LCBvYmplY3QgfHwge30pOwogIE9iamVjdC5leHRlbmQoaGFzaCwgRW51bWVyYWJsZSk7CiAgT2JqZWN0LmV4dGVuZChoYXNoLCBIYXNoKTsKICByZXR1cm4gaGFzaDsKfQpPYmplY3RSYW5nZSA9IENsYXNzLmNyZWF0ZSgpOwpPYmplY3QuZXh0ZW5kKE9iamVjdFJhbmdlLnByb3RvdHlwZSwgRW51bWVyYWJsZSk7Ck9iamVjdC5leHRlbmQoT2JqZWN0UmFuZ2UucHJvdG90eXBlLCB7CiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oc3RhcnQsIGVuZCwgZXhjbHVzaXZlKSB7CiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7CiAgICB0aGlzLmVuZCA9IGVuZDsKICAgIHRoaXMuZXhjbHVzaXZlID0gZXhjbHVzaXZlOwogIH0sCgogIF9lYWNoOiBmdW5jdGlvbihpdGVyYXRvcikgewogICAgdmFyIHZhbHVlID0gdGhpcy5zdGFydDsKICAgIGRvIHsKICAgICAgaXRlcmF0b3IodmFsdWUpOwogICAgICB2YWx1ZSA9IHZhbHVlLnN1Y2MoKTsKICAgIH0gd2hpbGUgKHRoaXMuaW5jbHVkZSh2YWx1ZSkpOwogIH0sCgogIGluY2x1ZGU6IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPCB0aGlzLnN0YXJ0KQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAodGhpcy5leGNsdXNpdmUpCiAgICAgIHJldHVybiB2YWx1ZSA8IHRoaXMuZW5kOwogICAgcmV0dXJuIHZhbHVlIDw9IHRoaXMuZW5kOwogIH0KfSk7Cgp2YXIgJFIgPSBmdW5jdGlvbihzdGFydCwgZW5kLCBleGNsdXNpdmUpIHsKICByZXR1cm4gbmV3IE9iamVjdFJhbmdlKHN0YXJ0LCBlbmQsIGV4Y2x1c2l2ZSk7Cn0KCnZhciBBamF4ID0gewogIGdldFRyYW5zcG9ydDogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gVHJ5LnRoZXNlKAogICAgICBmdW5jdGlvbigpIHtyZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01zeG1sMi5YTUxIVFRQJyl9LAogICAgICBmdW5jdGlvbigpIHtyZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01pY3Jvc29mdC5YTUxIVFRQJyl9LAogICAgICBmdW5jdGlvbigpIHtyZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0KCl9CiAgICApIHx8IGZhbHNlOwogIH0sCgogIGFjdGl2ZVJlcXVlc3RDb3VudDogMAp9CgpBamF4LlJlc3BvbmRlcnMgPSB7CiAgcmVzcG9uZGVyczogW10sCgogIF9lYWNoOiBmdW5jdGlvbihpdGVyYXRvcikgewogICAgdGhpcy5yZXNwb25kZXJzLl9lYWNoKGl0ZXJhdG9yKTsKICB9LAoKICByZWdpc3RlcjogZnVuY3Rpb24ocmVzcG9uZGVyVG9BZGQpIHsKICAgIGlmICghdGhpcy5pbmNsdWRlKHJlc3BvbmRlclRvQWRkKSkKICAgICAgdGhpcy5yZXNwb25kZXJzLnB1c2gocmVzcG9uZGVyVG9BZGQpOwogIH0sCgogIHVucmVnaXN0ZXI6IGZ1bmN0aW9uKHJlc3BvbmRlclRvUmVtb3ZlKSB7CiAgICB0aGlzLnJlc3BvbmRlcnMgPSB0aGlzLnJlc3BvbmRlcnMud2l0aG91dChyZXNwb25kZXJUb1JlbW92ZSk7CiAgfSwKCiAgZGlzcGF0Y2g6IGZ1bmN0aW9uKGNhbGxiYWNrLCByZXF1ZXN0LCB0cmFuc3BvcnQsIGpzb24pIHsKICAgIHRoaXMuZWFjaChmdW5jdGlvbihyZXNwb25kZXIpIHsKICAgICAgaWYgKHJlc3BvbmRlcltjYWxsYmFja10gJiYgdHlwZW9mIHJlc3BvbmRlcltjYWxsYmFja10gPT0gJ2Z1bmN0aW9uJykgewogICAgICAgIHRyeSB7CiAgICAgICAgICByZXNwb25kZXJbY2FsbGJhY2tdLmFwcGx5KHJlc3BvbmRlciwgW3JlcXVlc3QsIHRyYW5zcG9ydCwganNvbl0pOwogICAgICAgIH0gY2F0Y2ggKGUpIHt9CiAgICAgIH0KICAgIH0pOwogIH0KfTsKCk9iamVjdC5leHRlbmQoQWpheC5SZXNwb25kZXJzLCBFbnVtZXJhYmxlKTsKCkFqYXguUmVzcG9uZGVycy5yZWdpc3Rlcih7CiAgb25DcmVhdGU6IGZ1bmN0aW9uKCkgewogICAgQWpheC5hY3RpdmVSZXF1ZXN0Q291bnQrKzsKICB9LAoKICBvbkNvbXBsZXRlOiBmdW5jdGlvbigpIHsKICAgIEFqYXguYWN0aXZlUmVxdWVzdENvdW50LS07CiAgfQp9KTsKCkFqYXguQmFzZSA9IGZ1bmN0aW9uKCkge307CkFqYXguQmFzZS5wcm90b3R5cGUgPSB7CiAgc2V0T3B0aW9uczogZnVuY3Rpb24ob3B0aW9ucykgewogICAgdGhpcy5vcHRpb25zID0gewogICAgICBtZXRob2Q6ICAgICAgICdwb3N0JywKICAgICAgYXN5bmNocm9ub3VzOiB0cnVlLAogICAgICBwYXJhbWV0ZXJzOiAgICcnCiAgICB9CiAgICBPYmplY3QuZXh0ZW5kKHRoaXMub3B0aW9ucywgb3B0aW9ucyB8fCB7fSk7CiAgfSwKCiAgcmVzcG9uc2VJc1N1Y2Nlc3M6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXMudHJhbnNwb3J0LnN0YXR1cyA9PSB1bmRlZmluZWQKICAgICAgICB8fCB0aGlzLnRyYW5zcG9ydC5zdGF0dXMgPT0gMAogICAgICAgIHx8ICh0aGlzLnRyYW5zcG9ydC5zdGF0dXMgPj0gMjAwICYmIHRoaXMudHJhbnNwb3J0LnN0YXR1cyA8IDMwMCk7CiAgfSwKCiAgcmVzcG9uc2VJc0ZhaWx1cmU6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuICF0aGlzLnJlc3BvbnNlSXNTdWNjZXNzKCk7CiAgfQp9CgpBamF4LlJlcXVlc3QgPSBDbGFzcy5jcmVhdGUoKTsKQWpheC5SZXF1ZXN0LkV2ZW50cyA9CiAgWydVbmluaXRpYWxpemVkJywgJ0xvYWRpbmcnLCAnTG9hZGVkJywgJ0ludGVyYWN0aXZlJywgJ0NvbXBsZXRlJ107CgpBamF4LlJlcXVlc3QucHJvdG90eXBlID0gT2JqZWN0LmV4dGVuZChuZXcgQWpheC5CYXNlKCksIHsKICBpbml0aWFsaXplOiBmdW5jdGlvbih1cmwsIG9wdGlvbnMpIHsKICAgIHRoaXMudHJhbnNwb3J0ID0gQWpheC5nZXRUcmFuc3BvcnQoKTsKICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTsKICAgIHRoaXMucmVxdWVzdCh1cmwpOwogIH0sCgogIHJlcXVlc3Q6IGZ1bmN0aW9uKHVybCkgewogICAgdmFyIHBhcmFtZXRlcnMgPSB0aGlzLm9wdGlvbnMucGFyYW1ldGVycyB8fCAnJzsKICAgIGlmIChwYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHBhcmFtZXRlcnMgKz0gJyZfPSc7CgogICAgdHJ5IHsKICAgICAgdGhpcy51cmwgPSB1cmw7CiAgICAgIGlmICh0aGlzLm9wdGlvbnMubWV0aG9kID09ICdnZXQnICYmIHBhcmFtZXRlcnMubGVuZ3RoID4gMCkKICAgICAgICB0aGlzLnVybCArPSAodGhpcy51cmwubWF0Y2goL1w/LykgPyAnJicgOiAnPycpICsgcGFyYW1ldGVyczsKCiAgICAgIEFqYXguUmVzcG9uZGVycy5kaXNwYXRjaCgnb25DcmVhdGUnLCB0aGlzLCB0aGlzLnRyYW5zcG9ydCk7CgogICAgICB0aGlzLnRyYW5zcG9ydC5vcGVuKHRoaXMub3B0aW9ucy5tZXRob2QsIHRoaXMudXJsLAogICAgICAgIHRoaXMub3B0aW9ucy5hc3luY2hyb25vdXMpOwoKICAgICAgaWYgKHRoaXMub3B0aW9ucy5hc3luY2hyb25vdXMpIHsKICAgICAgICB0aGlzLnRyYW5zcG9ydC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSB0aGlzLm9uU3RhdGVDaGFuZ2UuYmluZCh0aGlzKTsKICAgICAgICBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHt0aGlzLnJlc3BvbmRUb1JlYWR5U3RhdGUoMSl9KS5iaW5kKHRoaXMpLCAxMCk7CiAgICAgIH0KCiAgICAgIHRoaXMuc2V0UmVxdWVzdEhlYWRlcnMoKTsKCiAgICAgIHZhciBib2R5ID0gdGhpcy5vcHRpb25zLnBvc3RCb2R5ID8gdGhpcy5vcHRpb25zLnBvc3RCb2R5IDogcGFyYW1ldGVyczsKICAgICAgdGhpcy50cmFuc3BvcnQuc2VuZCh0aGlzLm9wdGlvbnMubWV0aG9kID09ICdwb3N0JyA/IGJvZHkgOiBudWxsKTsKCiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHRoaXMuZGlzcGF0Y2hFeGNlcHRpb24oZSk7CiAgICB9CiAgfSwKCiAgc2V0UmVxdWVzdEhlYWRlcnM6IGZ1bmN0aW9uKCkgewogICAgdmFyIHJlcXVlc3RIZWFkZXJzID0KICAgICAgWydYLVJlcXVlc3RlZC1XaXRoJywgJ1hNTEh0dHBSZXF1ZXN0JywKICAgICAgICdYLVByb3RvdHlwZS1WZXJzaW9uJywgUHJvdG90eXBlLlZlcnNpb25dOwoKICAgIGlmICh0aGlzLm9wdGlvbnMubWV0aG9kID09ICdwb3N0JykgewogICAgICByZXF1ZXN0SGVhZGVycy5wdXNoKCdDb250ZW50LXR5cGUnLAogICAgICAgICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKTsKCiAgICAgIC8qIEZvcmNlICJDb25uZWN0aW9uOiBjbG9zZSIgZm9yIE1vemlsbGEgYnJvd3NlcnMgdG8gd29yayBhcm91bmQKICAgICAgICogYSBidWcgd2hlcmUgWE1MSHR0cFJlcWV1ZXN0IHNlbmRzIGFuIGluY29ycmVjdCBDb250ZW50LWxlbmd0aAogICAgICAgKiBoZWFkZXIuIFNlZSBNb3ppbGxhIEJ1Z3ppbGxhICMyNDY2NTEuCiAgICAgICAqLwogICAgICBpZiAodGhpcy50cmFuc3BvcnQub3ZlcnJpZGVNaW1lVHlwZSkKICAgICAgICByZXF1ZXN0SGVhZGVycy5wdXNoKCdDb25uZWN0aW9uJywgJ2Nsb3NlJyk7CiAgICB9CgogICAgaWYgKHRoaXMub3B0aW9ucy5yZXF1ZXN0SGVhZGVycykKICAgICAgcmVxdWVzdEhlYWRlcnMucHVzaC5hcHBseShyZXF1ZXN0SGVhZGVycywgdGhpcy5vcHRpb25zLnJlcXVlc3RIZWFkZXJzKTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcXVlc3RIZWFkZXJzLmxlbmd0aDsgaSArPSAyKQogICAgICB0aGlzLnRyYW5zcG9ydC5zZXRSZXF1ZXN0SGVhZGVyKHJlcXVlc3RIZWFkZXJzW2ldLCByZXF1ZXN0SGVhZGVyc1tpKzFdKTsKICB9LAoKICBvblN0YXRlQ2hhbmdlOiBmdW5jdGlvbigpIHsKICAgIHZhciByZWFkeVN0YXRlID0gdGhpcy50cmFuc3BvcnQucmVhZHlTdGF0ZTsKICAgIGlmIChyZWFkeVN0YXRlICE9IDEpCiAgICAgIHRoaXMucmVzcG9uZFRvUmVhZHlTdGF0ZSh0aGlzLnRyYW5zcG9ydC5yZWFkeVN0YXRlKTsKICB9LAoKICBoZWFkZXI6IGZ1bmN0aW9uKG5hbWUpIHsKICAgIHRyeSB7CiAgICAgIHJldHVybiB0aGlzLnRyYW5zcG9ydC5nZXRSZXNwb25zZUhlYWRlcihuYW1lKTsKICAgIH0gY2F0Y2ggKGUpIHt9CiAgfSwKCiAgZXZhbEpTT046IGZ1bmN0aW9uKCkgewogICAgdHJ5IHsKICAgICAgcmV0dXJuIGV2YWwodGhpcy5oZWFkZXIoJ1gtSlNPTicpKTsKICAgIH0gY2F0Y2ggKGUpIHt9CiAgfSwKCiAgZXZhbFJlc3BvbnNlOiBmdW5jdGlvbigpIHsKICAgIHRyeSB7CiAgICAgIHJldHVybiBldmFsKHRoaXMudHJhbnNwb3J0LnJlc3BvbnNlVGV4dCk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHRoaXMuZGlzcGF0Y2hFeGNlcHRpb24oZSk7CiAgICB9CiAgfSwKCiAgcmVzcG9uZFRvUmVhZHlTdGF0ZTogZnVuY3Rpb24ocmVhZHlTdGF0ZSkgewogICAgdmFyIGV2ZW50ID0gQWpheC5SZXF1ZXN0LkV2ZW50c1tyZWFkeVN0YXRlXTsKICAgIHZhciB0cmFuc3BvcnQgPSB0aGlzLnRyYW5zcG9ydCwganNvbiA9IHRoaXMuZXZhbEpTT04oKTsKCiAgICBpZiAoZXZlbnQgPT0gJ0NvbXBsZXRlJykgewogICAgICB0cnkgewogICAgICAgICh0aGlzLm9wdGlvbnNbJ29uJyArIHRoaXMudHJhbnNwb3J0LnN0YXR1c10KICAgICAgICAgfHwgdGhpcy5vcHRpb25zWydvbicgKyAodGhpcy5yZXNwb25zZUlzU3VjY2VzcygpID8gJ1N1Y2Nlc3MnIDogJ0ZhaWx1cmUnKV0KICAgICAgICAgfHwgUHJvdG90eXBlLmVtcHR5RnVuY3Rpb24pKHRyYW5zcG9ydCwganNvbik7CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICB0aGlzLmRpc3BhdGNoRXhjZXB0aW9uKGUpOwogICAgICB9CgogICAgICBpZiAoKHRoaXMuaGVhZGVyKCdDb250ZW50LXR5cGUnKSB8fCAnJykubWF0Y2goL150ZXh0XC9qYXZhc2NyaXB0L2kpKQogICAgICAgIHRoaXMuZXZhbFJlc3BvbnNlKCk7CiAgICB9CgogICAgdHJ5IHsKICAgICAgKHRoaXMub3B0aW9uc1snb24nICsgZXZlbnRdIHx8IFByb3RvdHlwZS5lbXB0eUZ1bmN0aW9uKSh0cmFuc3BvcnQsIGpzb24pOwogICAgICBBamF4LlJlc3BvbmRlcnMuZGlzcGF0Y2goJ29uJyArIGV2ZW50LCB0aGlzLCB0cmFuc3BvcnQsIGpzb24pOwogICAgfSBjYXRjaCAoZSkgewogICAgICB0aGlzLmRpc3BhdGNoRXhjZXB0aW9uKGUpOwogICAgfQoKICAgIC8qIEF2b2lkIG1lbW9yeSBsZWFrIGluIE1TSUU6IGNsZWFuIHVwIHRoZSBvbmNvbXBsZXRlIGV2ZW50IGhhbmRsZXIgKi8KICAgIGlmIChldmVudCA9PSAnQ29tcGxldGUnKQogICAgICB0aGlzLnRyYW5zcG9ydC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBQcm90b3R5cGUuZW1wdHlGdW5jdGlvbjsKICB9LAoKICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7CiAgICAodGhpcy5vcHRpb25zLm9uRXhjZXB0aW9uIHx8IFByb3RvdHlwZS5lbXB0eUZ1bmN0aW9uKSh0aGlzLCBleGNlcHRpb24pOwogICAgQWpheC5SZXNwb25kZXJzLmRpc3BhdGNoKCdvbkV4Y2VwdGlvbicsIHRoaXMsIGV4Y2VwdGlvbik7CiAgfQp9KTsKCkFqYXguVXBkYXRlciA9IENsYXNzLmNyZWF0ZSgpOwoKT2JqZWN0LmV4dGVuZChPYmplY3QuZXh0ZW5kKEFqYXguVXBkYXRlci5wcm90b3R5cGUsIEFqYXguUmVxdWVzdC5wcm90b3R5cGUpLCB7CiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oY29udGFpbmVyLCB1cmwsIG9wdGlvbnMpIHsKICAgIHRoaXMuY29udGFpbmVycyA9IHsKICAgICAgc3VjY2VzczogY29udGFpbmVyLnN1Y2Nlc3MgPyAkKGNvbnRhaW5lci5zdWNjZXNzKSA6ICQoY29udGFpbmVyKSwKICAgICAgZmFpbHVyZTogY29udGFpbmVyLmZhaWx1cmUgPyAkKGNvbnRhaW5lci5mYWlsdXJlKSA6CiAgICAgICAgKGNvbnRhaW5lci5zdWNjZXNzID8gbnVsbCA6ICQoY29udGFpbmVyKSkKICAgIH0KCiAgICB0aGlzLnRyYW5zcG9ydCA9IEFqYXguZ2V0VHJhbnNwb3J0KCk7CiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7CgogICAgdmFyIG9uQ29tcGxldGUgPSB0aGlzLm9wdGlvbnMub25Db21wbGV0ZSB8fCBQcm90b3R5cGUuZW1wdHlGdW5jdGlvbjsKICAgIHRoaXMub3B0aW9ucy5vbkNvbXBsZXRlID0gKGZ1bmN0aW9uKHRyYW5zcG9ydCwgb2JqZWN0KSB7CiAgICAgIHRoaXMudXBkYXRlQ29udGVudCgpOwogICAgICBvbkNvbXBsZXRlKHRyYW5zcG9ydCwgb2JqZWN0KTsKICAgIH0pLmJpbmQodGhpcyk7CgogICAgdGhpcy5yZXF1ZXN0KHVybCk7CiAgfSwKCiAgdXBkYXRlQ29udGVudDogZnVuY3Rpb24oKSB7CiAgICB2YXIgcmVjZWl2ZXIgPSB0aGlzLnJlc3BvbnNlSXNTdWNjZXNzKCkgPwogICAgICB0aGlzLmNvbnRhaW5lcnMuc3VjY2VzcyA6IHRoaXMuY29udGFpbmVycy5mYWlsdXJlOwogICAgdmFyIHJlc3BvbnNlID0gdGhpcy50cmFuc3BvcnQucmVzcG9uc2VUZXh0OwoKICAgIGlmICghdGhpcy5vcHRpb25zLmV2YWxTY3JpcHRzKQogICAgICByZXNwb25zZSA9IHJlc3BvbnNlLnN0cmlwU2NyaXB0cygpOwoKICAgIGlmIChyZWNlaXZlcikgewogICAgICBpZiAodGhpcy5vcHRpb25zLmluc2VydGlvbikgewogICAgICAgIG5ldyB0aGlzLm9wdGlvbnMuaW5zZXJ0aW9uKHJlY2VpdmVyLCByZXNwb25zZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgRWxlbWVudC51cGRhdGUocmVjZWl2ZXIsIHJlc3BvbnNlKTsKICAgICAgfQogICAgfQoKICAgIGlmICh0aGlzLnJlc3BvbnNlSXNTdWNjZXNzKCkpIHsKICAgICAgaWYgKHRoaXMub25Db21wbGV0ZSkKICAgICAgICBzZXRUaW1lb3V0KHRoaXMub25Db21wbGV0ZS5iaW5kKHRoaXMpLCAxMCk7CiAgICB9CiAgfQp9KTsKCkFqYXguUGVyaW9kaWNhbFVwZGF0ZXIgPSBDbGFzcy5jcmVhdGUoKTsKQWpheC5QZXJpb2RpY2FsVXBkYXRlci5wcm90b3R5cGUgPSBPYmplY3QuZXh0ZW5kKG5ldyBBamF4LkJhc2UoKSwgewogIGluaXRpYWxpemU6IGZ1bmN0aW9uKGNvbnRhaW5lciwgdXJsLCBvcHRpb25zKSB7CiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7CiAgICB0aGlzLm9uQ29tcGxldGUgPSB0aGlzLm9wdGlvbnMub25Db21wbGV0ZTsKCiAgICB0aGlzLmZyZXF1ZW5jeSA9ICh0aGlzLm9wdGlvbnMuZnJlcXVlbmN5IHx8IDIpOwogICAgdGhpcy5kZWNheSA9ICh0aGlzLm9wdGlvbnMuZGVjYXkgfHwgMSk7CgogICAgdGhpcy51cGRhdGVyID0ge307CiAgICB0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5lcjsKICAgIHRoaXMudXJsID0gdXJsOwoKICAgIHRoaXMuc3RhcnQoKTsKICB9LAoKICBzdGFydDogZnVuY3Rpb24oKSB7CiAgICB0aGlzLm9wdGlvbnMub25Db21wbGV0ZSA9IHRoaXMudXBkYXRlQ29tcGxldGUuYmluZCh0aGlzKTsKICAgIHRoaXMub25UaW1lckV2ZW50KCk7CiAgfSwKCiAgc3RvcDogZnVuY3Rpb24oKSB7CiAgICB0aGlzLnVwZGF0ZXIub25Db21wbGV0ZSA9IHVuZGVmaW5lZDsKICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTsKICAgICh0aGlzLm9uQ29tcGxldGUgfHwgUHJvdG90eXBlLmVtcHR5RnVuY3Rpb24pLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgfSwKCiAgdXBkYXRlQ29tcGxldGU6IGZ1bmN0aW9uKHJlcXVlc3QpIHsKICAgIGlmICh0aGlzLm9wdGlvbnMuZGVjYXkpIHsKICAgICAgdGhpcy5kZWNheSA9IChyZXF1ZXN0LnJlc3BvbnNlVGV4dCA9PSB0aGlzLmxhc3RUZXh0ID8KICAgICAgICB0aGlzLmRlY2F5ICogdGhpcy5vcHRpb25zLmRlY2F5IDogMSk7CgogICAgICB0aGlzLmxhc3RUZXh0ID0gcmVxdWVzdC5yZXNwb25zZVRleHQ7CiAgICB9CiAgICB0aGlzLnRpbWVyID0gc2V0VGltZW91dCh0aGlzLm9uVGltZXJFdmVudC5iaW5kKHRoaXMpLAogICAgICB0aGlzLmRlY2F5ICogdGhpcy5mcmVxdWVuY3kgKiAxMDAwKTsKICB9LAoKICBvblRpbWVyRXZlbnQ6IGZ1bmN0aW9uKCkgewogICAgdGhpcy51cGRhdGVyID0gbmV3IEFqYXguVXBkYXRlcih0aGlzLmNvbnRhaW5lciwgdGhpcy51cmwsIHRoaXMub3B0aW9ucyk7CiAgfQp9KTsKZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9IGZ1bmN0aW9uKGNsYXNzTmFtZSwgcGFyZW50RWxlbWVudCkgewogIHZhciBjaGlsZHJlbiA9ICgkKHBhcmVudEVsZW1lbnQpIHx8IGRvY3VtZW50LmJvZHkpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyk7CiAgcmV0dXJuICRBKGNoaWxkcmVuKS5pbmplY3QoW10sIGZ1bmN0aW9uKGVsZW1lbnRzLCBjaGlsZCkgewogICAgaWYgKGNoaWxkLmNsYXNzTmFtZS5tYXRjaChuZXcgUmVnRXhwKCIoXnxcXHMpIiArIGNsYXNzTmFtZSArICIoXFxzfCQpIikpKQogICAgICBlbGVtZW50cy5wdXNoKGNoaWxkKTsKICAgIHJldHVybiBlbGVtZW50czsKICB9KTsKfQoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgppZiAoIXdpbmRvdy5FbGVtZW50KSB7CiAgdmFyIEVsZW1lbnQgPSBuZXcgT2JqZWN0KCk7Cn0KCk9iamVjdC5leHRlbmQoRWxlbWVudCwgewogIHZpc2libGU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIHJldHVybiAkKGVsZW1lbnQpLnN0eWxlLmRpc3BsYXkgIT0gJ25vbmUnOwogIH0sCgogIHRvZ2dsZTogZnVuY3Rpb24oKSB7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgewogICAgICB2YXIgZWxlbWVudCA9ICQoYXJndW1lbnRzW2ldKTsKICAgICAgRWxlbWVudFtFbGVtZW50LnZpc2libGUoZWxlbWVudCkgPyAnaGlkZScgOiAnc2hvdyddKGVsZW1lbnQpOwogICAgfQogIH0sCgogIGhpZGU6IGZ1bmN0aW9uKCkgewogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGVsZW1lbnQgPSAkKGFyZ3VtZW50c1tpXSk7CiAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgIH0KICB9LAoKICBzaG93OiBmdW5jdGlvbigpIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBlbGVtZW50ID0gJChhcmd1bWVudHNbaV0pOwogICAgICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnJzsKICAgIH0KICB9LAoKICByZW1vdmU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsZW1lbnQpOwogIH0sCgogIHVwZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgaHRtbCkgewogICAgJChlbGVtZW50KS5pbm5lckhUTUwgPSBodG1sLnN0cmlwU2NyaXB0cygpOwogICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtodG1sLmV2YWxTY3JpcHRzKCl9LCAxMCk7CiAgfSwKCiAgZ2V0SGVpZ2h0OiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgIHJldHVybiBlbGVtZW50Lm9mZnNldEhlaWdodDsKICB9LAoKICBjbGFzc05hbWVzOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICByZXR1cm4gbmV3IEVsZW1lbnQuQ2xhc3NOYW1lcyhlbGVtZW50KTsKICB9LAoKICBoYXNDbGFzc05hbWU6IGZ1bmN0aW9uKGVsZW1lbnQsIGNsYXNzTmFtZSkgewogICAgaWYgKCEoZWxlbWVudCA9ICQoZWxlbWVudCkpKSByZXR1cm47CiAgICByZXR1cm4gRWxlbWVudC5jbGFzc05hbWVzKGVsZW1lbnQpLmluY2x1ZGUoY2xhc3NOYW1lKTsKICB9LAoKICBhZGRDbGFzc05hbWU6IGZ1bmN0aW9uKGVsZW1lbnQsIGNsYXNzTmFtZSkgewogICAgaWYgKCEoZWxlbWVudCA9ICQoZWxlbWVudCkpKSByZXR1cm47CiAgICByZXR1cm4gRWxlbWVudC5jbGFzc05hbWVzKGVsZW1lbnQpLmFkZChjbGFzc05hbWUpOwogIH0sCgogIHJlbW92ZUNsYXNzTmFtZTogZnVuY3Rpb24oZWxlbWVudCwgY2xhc3NOYW1lKSB7CiAgICBpZiAoIShlbGVtZW50ID0gJChlbGVtZW50KSkpIHJldHVybjsKICAgIHJldHVybiBFbGVtZW50LmNsYXNzTmFtZXMoZWxlbWVudCkucmVtb3ZlKGNsYXNzTmFtZSk7CiAgfSwKCiAgLy8gcmVtb3ZlcyB3aGl0ZXNwYWNlLW9ubHkgdGV4dCBub2RlIGNoaWxkcmVuCiAgY2xlYW5XaGl0ZXNwYWNlOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBub2RlID0gZWxlbWVudC5jaGlsZE5vZGVzW2ldOwogICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PSAzICYmICEvXFMvLnRlc3Qobm9kZS5ub2RlVmFsdWUpKQogICAgICAgIEVsZW1lbnQucmVtb3ZlKG5vZGUpOwogICAgfQogIH0sCgogIGVtcHR5OiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICByZXR1cm4gJChlbGVtZW50KS5pbm5lckhUTUwubWF0Y2goL15ccyokLyk7CiAgfSwKCiAgc2Nyb2xsVG86IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgdmFyIHggPSBlbGVtZW50LnggPyBlbGVtZW50LnggOiBlbGVtZW50Lm9mZnNldExlZnQsCiAgICAgICAgeSA9IGVsZW1lbnQueSA/IGVsZW1lbnQueSA6IGVsZW1lbnQub2Zmc2V0VG9wOwogICAgd2luZG93LnNjcm9sbFRvKHgsIHkpOwogIH0sCgogIGdldFN0eWxlOiBmdW5jdGlvbihlbGVtZW50LCBzdHlsZSkgewogICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICB2YXIgdmFsdWUgPSBlbGVtZW50LnN0eWxlW3N0eWxlLmNhbWVsaXplKCldOwogICAgaWYgKCF2YWx1ZSkgewogICAgICBpZiAoZG9jdW1lbnQuZGVmYXVsdFZpZXcgJiYgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSkgewogICAgICAgIHZhciBjc3MgPSBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsIG51bGwpOwogICAgICAgIHZhbHVlID0gY3NzID8gY3NzLmdldFByb3BlcnR5VmFsdWUoc3R5bGUpIDogbnVsbDsKICAgICAgfSBlbHNlIGlmIChlbGVtZW50LmN1cnJlbnRTdHlsZSkgewogICAgICAgIHZhbHVlID0gZWxlbWVudC5jdXJyZW50U3R5bGVbc3R5bGUuY2FtZWxpemUoKV07CiAgICAgIH0KICAgIH0KCiAgICBpZiAod2luZG93Lm9wZXJhICYmIFsnbGVmdCcsICd0b3AnLCAncmlnaHQnLCAnYm90dG9tJ10uaW5jbHVkZShzdHlsZSkpCiAgICAgIGlmIChFbGVtZW50LmdldFN0eWxlKGVsZW1lbnQsICdwb3NpdGlvbicpID09ICdzdGF0aWMnKSB2YWx1ZSA9ICdhdXRvJzsKCiAgICByZXR1cm4gdmFsdWUgPT0gJ2F1dG8nID8gbnVsbCA6IHZhbHVlOwogIH0sCgogIHNldFN0eWxlOiBmdW5jdGlvbihlbGVtZW50LCBzdHlsZSkgewogICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICBmb3IgKG5hbWUgaW4gc3R5bGUpCiAgICAgIGVsZW1lbnQuc3R5bGVbbmFtZS5jYW1lbGl6ZSgpXSA9IHN0eWxlW25hbWVdOwogIH0sCgogIGdldERpbWVuc2lvbnM6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgaWYgKEVsZW1lbnQuZ2V0U3R5bGUoZWxlbWVudCwgJ2Rpc3BsYXknKSAhPSAnbm9uZScpCiAgICAgIHJldHVybiB7d2lkdGg6IGVsZW1lbnQub2Zmc2V0V2lkdGgsIGhlaWdodDogZWxlbWVudC5vZmZzZXRIZWlnaHR9OwoKICAgIC8vIEFsbCAqV2lkdGggYW5kICpIZWlnaHQgcHJvcGVydGllcyBnaXZlIDAgb24gZWxlbWVudHMgd2l0aCBkaXNwbGF5IG5vbmUsCiAgICAvLyBzbyBlbmFibGUgdGhlIGVsZW1lbnQgdGVtcG9yYXJpbHkKICAgIHZhciBlbHMgPSBlbGVtZW50LnN0eWxlOwogICAgdmFyIG9yaWdpbmFsVmlzaWJpbGl0eSA9IGVscy52aXNpYmlsaXR5OwogICAgdmFyIG9yaWdpbmFsUG9zaXRpb24gPSBlbHMucG9zaXRpb247CiAgICBlbHMudmlzaWJpbGl0eSA9ICdoaWRkZW4nOwogICAgZWxzLnBvc2l0aW9uID0gJ2Fic29sdXRlJzsKICAgIGVscy5kaXNwbGF5ID0gJyc7CiAgICB2YXIgb3JpZ2luYWxXaWR0aCA9IGVsZW1lbnQuY2xpZW50V2lkdGg7CiAgICB2YXIgb3JpZ2luYWxIZWlnaHQgPSBlbGVtZW50LmNsaWVudEhlaWdodDsKICAgIGVscy5kaXNwbGF5ID0gJ25vbmUnOwogICAgZWxzLnBvc2l0aW9uID0gb3JpZ2luYWxQb3NpdGlvbjsKICAgIGVscy52aXNpYmlsaXR5ID0gb3JpZ2luYWxWaXNpYmlsaXR5OwogICAgcmV0dXJuIHt3aWR0aDogb3JpZ2luYWxXaWR0aCwgaGVpZ2h0OiBvcmlnaW5hbEhlaWdodH07CiAgfSwKCiAgbWFrZVBvc2l0aW9uZWQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgdmFyIHBvcyA9IEVsZW1lbnQuZ2V0U3R5bGUoZWxlbWVudCwgJ3Bvc2l0aW9uJyk7CiAgICBpZiAocG9zID09ICdzdGF0aWMnIHx8ICFwb3MpIHsKICAgICAgZWxlbWVudC5fbWFkZVBvc2l0aW9uZWQgPSB0cnVlOwogICAgICBlbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJzsKICAgICAgLy8gT3BlcmEgcmV0dXJucyB0aGUgb2Zmc2V0IHJlbGF0aXZlIHRvIHRoZSBwb3NpdGlvbmluZyBjb250ZXh0LCB3aGVuIGFuCiAgICAgIC8vIGVsZW1lbnQgaXMgcG9zaXRpb24gcmVsYXRpdmUgYnV0IHRvcCBhbmQgbGVmdCBoYXZlIG5vdCBiZWVuIGRlZmluZWQKICAgICAgaWYgKHdpbmRvdy5vcGVyYSkgewogICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gMDsKICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSAwOwogICAgICB9CiAgICB9CiAgfSwKCiAgdW5kb1Bvc2l0aW9uZWQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgaWYgKGVsZW1lbnQuX21hZGVQb3NpdGlvbmVkKSB7CiAgICAgIGVsZW1lbnQuX21hZGVQb3NpdGlvbmVkID0gdW5kZWZpbmVkOwogICAgICBlbGVtZW50LnN0eWxlLnBvc2l0aW9uID0KICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9CiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0KICAgICAgICBlbGVtZW50LnN0eWxlLmJvdHRvbSA9CiAgICAgICAgZWxlbWVudC5zdHlsZS5yaWdodCA9ICcnOwogICAgfQogIH0sCgogIG1ha2VDbGlwcGluZzogZnVuY3Rpb24oZWxlbWVudCkgewogICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICBpZiAoZWxlbWVudC5fb3ZlcmZsb3cpIHJldHVybjsKICAgIGVsZW1lbnQuX292ZXJmbG93ID0gZWxlbWVudC5zdHlsZS5vdmVyZmxvdzsKICAgIGlmICgoRWxlbWVudC5nZXRTdHlsZShlbGVtZW50LCAnb3ZlcmZsb3cnKSB8fCAndmlzaWJsZScpICE9ICdoaWRkZW4nKQogICAgICBlbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7CiAgfSwKCiAgdW5kb0NsaXBwaW5nOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgIGlmIChlbGVtZW50Ll9vdmVyZmxvdykgcmV0dXJuOwogICAgZWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9IGVsZW1lbnQuX292ZXJmbG93OwogICAgZWxlbWVudC5fb3ZlcmZsb3cgPSB1bmRlZmluZWQ7CiAgfQp9KTsKCnZhciBUb2dnbGUgPSBuZXcgT2JqZWN0KCk7ClRvZ2dsZS5kaXNwbGF5ID0gRWxlbWVudC50b2dnbGU7CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCkFic3RyYWN0Lkluc2VydGlvbiA9IGZ1bmN0aW9uKGFkamFjZW5jeSkgewogIHRoaXMuYWRqYWNlbmN5ID0gYWRqYWNlbmN5Owp9CgpBYnN0cmFjdC5JbnNlcnRpb24ucHJvdG90eXBlID0gewogIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsZW1lbnQsIGNvbnRlbnQpIHsKICAgIHRoaXMuZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICB0aGlzLmNvbnRlbnQgPSBjb250ZW50LnN0cmlwU2NyaXB0cygpOwoKICAgIGlmICh0aGlzLmFkamFjZW5jeSAmJiB0aGlzLmVsZW1lbnQuaW5zZXJ0QWRqYWNlbnRIVE1MKSB7CiAgICAgIHRyeSB7CiAgICAgICAgdGhpcy5lbGVtZW50Lmluc2VydEFkamFjZW50SFRNTCh0aGlzLmFkamFjZW5jeSwgdGhpcy5jb250ZW50KTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIGlmICh0aGlzLmVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICd0Ym9keScpIHsKICAgICAgICAgIHRoaXMuaW5zZXJ0Q29udGVudCh0aGlzLmNvbnRlbnRGcm9tQW5vbnltb3VzVGFibGUoKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93IGU7CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgewogICAgICB0aGlzLnJhbmdlID0gdGhpcy5lbGVtZW50Lm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZVJhbmdlKSB0aGlzLmluaXRpYWxpemVSYW5nZSgpOwogICAgICB0aGlzLmluc2VydENvbnRlbnQoW3RoaXMucmFuZ2UuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KHRoaXMuY29udGVudCldKTsKICAgIH0KCiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge2NvbnRlbnQuZXZhbFNjcmlwdHMoKX0sIDEwKTsKICB9LAoKICBjb250ZW50RnJvbUFub255bW91c1RhYmxlOiBmdW5jdGlvbigpIHsKICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgIGRpdi5pbm5lckhUTUwgPSAnPHRhYmxlPjx0Ym9keT4nICsgdGhpcy5jb250ZW50ICsgJzwvdGJvZHk+PC90YWJsZT4nOwogICAgcmV0dXJuICRBKGRpdi5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcyk7CiAgfQp9Cgp2YXIgSW5zZXJ0aW9uID0gbmV3IE9iamVjdCgpOwoKSW5zZXJ0aW9uLkJlZm9yZSA9IENsYXNzLmNyZWF0ZSgpOwpJbnNlcnRpb24uQmVmb3JlLnByb3RvdHlwZSA9IE9iamVjdC5leHRlbmQobmV3IEFic3RyYWN0Lkluc2VydGlvbignYmVmb3JlQmVnaW4nKSwgewogIGluaXRpYWxpemVSYW5nZTogZnVuY3Rpb24oKSB7CiAgICB0aGlzLnJhbmdlLnNldFN0YXJ0QmVmb3JlKHRoaXMuZWxlbWVudCk7CiAgfSwKCiAgaW5zZXJ0Q29udGVudDogZnVuY3Rpb24oZnJhZ21lbnRzKSB7CiAgICBmcmFnbWVudHMuZWFjaCgoZnVuY3Rpb24oZnJhZ21lbnQpIHsKICAgICAgdGhpcy5lbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGZyYWdtZW50LCB0aGlzLmVsZW1lbnQpOwogICAgfSkuYmluZCh0aGlzKSk7CiAgfQp9KTsKCkluc2VydGlvbi5Ub3AgPSBDbGFzcy5jcmVhdGUoKTsKSW5zZXJ0aW9uLlRvcC5wcm90b3R5cGUgPSBPYmplY3QuZXh0ZW5kKG5ldyBBYnN0cmFjdC5JbnNlcnRpb24oJ2FmdGVyQmVnaW4nKSwgewogIGluaXRpYWxpemVSYW5nZTogZnVuY3Rpb24oKSB7CiAgICB0aGlzLnJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyh0aGlzLmVsZW1lbnQpOwogICAgdGhpcy5yYW5nZS5jb2xsYXBzZSh0cnVlKTsKICB9LAoKICBpbnNlcnRDb250ZW50OiBmdW5jdGlvbihmcmFnbWVudHMpIHsKICAgIGZyYWdtZW50cy5yZXZlcnNlKGZhbHNlKS5lYWNoKChmdW5jdGlvbihmcmFnbWVudCkgewogICAgICB0aGlzLmVsZW1lbnQuaW5zZXJ0QmVmb3JlKGZyYWdtZW50LCB0aGlzLmVsZW1lbnQuZmlyc3RDaGlsZCk7CiAgICB9KS5iaW5kKHRoaXMpKTsKICB9Cn0pOwoKSW5zZXJ0aW9uLkJvdHRvbSA9IENsYXNzLmNyZWF0ZSgpOwpJbnNlcnRpb24uQm90dG9tLnByb3RvdHlwZSA9IE9iamVjdC5leHRlbmQobmV3IEFic3RyYWN0Lkluc2VydGlvbignYmVmb3JlRW5kJyksIHsKICBpbml0aWFsaXplUmFuZ2U6IGZ1bmN0aW9uKCkgewogICAgdGhpcy5yYW5nZS5zZWxlY3ROb2RlQ29udGVudHModGhpcy5lbGVtZW50KTsKICAgIHRoaXMucmFuZ2UuY29sbGFwc2UodGhpcy5lbGVtZW50KTsKICB9LAoKICBpbnNlcnRDb250ZW50OiBmdW5jdGlvbihmcmFnbWVudHMpIHsKICAgIGZyYWdtZW50cy5lYWNoKChmdW5jdGlvbihmcmFnbWVudCkgewogICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpOwogICAgfSkuYmluZCh0aGlzKSk7CiAgfQp9KTsKCkluc2VydGlvbi5BZnRlciA9IENsYXNzLmNyZWF0ZSgpOwpJbnNlcnRpb24uQWZ0ZXIucHJvdG90eXBlID0gT2JqZWN0LmV4dGVuZChuZXcgQWJzdHJhY3QuSW5zZXJ0aW9uKCdhZnRlckVuZCcpLCB7CiAgaW5pdGlhbGl6ZVJhbmdlOiBmdW5jdGlvbigpIHsKICAgIHRoaXMucmFuZ2Uuc2V0U3RhcnRBZnRlcih0aGlzLmVsZW1lbnQpOwogIH0sCgogIGluc2VydENvbnRlbnQ6IGZ1bmN0aW9uKGZyYWdtZW50cykgewogICAgZnJhZ21lbnRzLmVhY2goKGZ1bmN0aW9uKGZyYWdtZW50KSB7CiAgICAgIHRoaXMuZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShmcmFnbWVudCwKICAgICAgICB0aGlzLmVsZW1lbnQubmV4dFNpYmxpbmcpOwogICAgfSkuYmluZCh0aGlzKSk7CiAgfQp9KTsKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKRWxlbWVudC5DbGFzc05hbWVzID0gQ2xhc3MuY3JlYXRlKCk7CkVsZW1lbnQuQ2xhc3NOYW1lcy5wcm90b3R5cGUgPSB7CiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oZWxlbWVudCkgewogICAgdGhpcy5lbGVtZW50ID0gJChlbGVtZW50KTsKICB9LAoKICBfZWFjaDogZnVuY3Rpb24oaXRlcmF0b3IpIHsKICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUuc3BsaXQoL1xzKy8pLnNlbGVjdChmdW5jdGlvbihuYW1lKSB7CiAgICAgIHJldHVybiBuYW1lLmxlbmd0aCA+IDA7CiAgICB9KS5fZWFjaChpdGVyYXRvcik7CiAgfSwKCiAgc2V0OiBmdW5jdGlvbihjbGFzc05hbWUpIHsKICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSBjbGFzc05hbWU7CiAgfSwKCiAgYWRkOiBmdW5jdGlvbihjbGFzc05hbWVUb0FkZCkgewogICAgaWYgKHRoaXMuaW5jbHVkZShjbGFzc05hbWVUb0FkZCkpIHJldHVybjsKICAgIHRoaXMuc2V0KHRoaXMudG9BcnJheSgpLmNvbmNhdChjbGFzc05hbWVUb0FkZCkuam9pbignICcpKTsKICB9LAoKICByZW1vdmU6IGZ1bmN0aW9uKGNsYXNzTmFtZVRvUmVtb3ZlKSB7CiAgICBpZiAoIXRoaXMuaW5jbHVkZShjbGFzc05hbWVUb1JlbW92ZSkpIHJldHVybjsKICAgIHRoaXMuc2V0KHRoaXMuc2VsZWN0KGZ1bmN0aW9uKGNsYXNzTmFtZSkgewogICAgICByZXR1cm4gY2xhc3NOYW1lICE9IGNsYXNzTmFtZVRvUmVtb3ZlOwogICAgfSkuam9pbignICcpKTsKICB9LAoKICB0b1N0cmluZzogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpcy50b0FycmF5KCkuam9pbignICcpOwogIH0KfQoKT2JqZWN0LmV4dGVuZChFbGVtZW50LkNsYXNzTmFtZXMucHJvdG90eXBlLCBFbnVtZXJhYmxlKTsKdmFyIEZpZWxkID0gewogIGNsZWFyOiBmdW5jdGlvbigpIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKQogICAgICAkKGFyZ3VtZW50c1tpXSkudmFsdWUgPSAnJzsKICB9LAoKICBmb2N1czogZnVuY3Rpb24oZWxlbWVudCkgewogICAgJChlbGVtZW50KS5mb2N1cygpOwogIH0sCgogIHByZXNlbnQ6IGZ1bmN0aW9uKCkgewogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspCiAgICAgIGlmICgkKGFyZ3VtZW50c1tpXSkudmFsdWUgPT0gJycpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB0cnVlOwogIH0sCgogIHNlbGVjdDogZnVuY3Rpb24oZWxlbWVudCkgewogICAgJChlbGVtZW50KS5zZWxlY3QoKTsKICB9LAoKICBhY3RpdmF0ZTogZnVuY3Rpb24oZWxlbWVudCkgewogICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICBlbGVtZW50LmZvY3VzKCk7CiAgICBpZiAoZWxlbWVudC5zZWxlY3QpCiAgICAgIGVsZW1lbnQuc2VsZWN0KCk7CiAgfQp9CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCnZhciBGb3JtID0gewogIHNlcmlhbGl6ZTogZnVuY3Rpb24oZm9ybSkgewogICAgdmFyIGVsZW1lbnRzID0gRm9ybS5nZXRFbGVtZW50cygkKGZvcm0pKTsKICAgIHZhciBxdWVyeUNvbXBvbmVudHMgPSBuZXcgQXJyYXkoKTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBxdWVyeUNvbXBvbmVudCA9IEZvcm0uRWxlbWVudC5zZXJpYWxpemUoZWxlbWVudHNbaV0pOwogICAgICBpZiAocXVlcnlDb21wb25lbnQpCiAgICAgICAgcXVlcnlDb21wb25lbnRzLnB1c2gocXVlcnlDb21wb25lbnQpOwogICAgfQoKICAgIHJldHVybiBxdWVyeUNvbXBvbmVudHMuam9pbignJicpOwogIH0sCgogIGdldEVsZW1lbnRzOiBmdW5jdGlvbihmb3JtKSB7CiAgICBmb3JtID0gJChmb3JtKTsKICAgIHZhciBlbGVtZW50cyA9IG5ldyBBcnJheSgpOwoKICAgIGZvciAodGFnTmFtZSBpbiBGb3JtLkVsZW1lbnQuU2VyaWFsaXplcnMpIHsKICAgICAgdmFyIHRhZ0VsZW1lbnRzID0gZm9ybS5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YWdOYW1lKTsKICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0YWdFbGVtZW50cy5sZW5ndGg7IGorKykKICAgICAgICBlbGVtZW50cy5wdXNoKHRhZ0VsZW1lbnRzW2pdKTsKICAgIH0KICAgIHJldHVybiBlbGVtZW50czsKICB9LAoKICBnZXRJbnB1dHM6IGZ1bmN0aW9uKGZvcm0sIHR5cGVOYW1lLCBuYW1lKSB7CiAgICBmb3JtID0gJChmb3JtKTsKICAgIHZhciBpbnB1dHMgPSBmb3JtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpOwoKICAgIGlmICghdHlwZU5hbWUgJiYgIW5hbWUpCiAgICAgIHJldHVybiBpbnB1dHM7CgogICAgdmFyIG1hdGNoaW5nSW5wdXRzID0gbmV3IEFycmF5KCk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykgewogICAgICB2YXIgaW5wdXQgPSBpbnB1dHNbaV07CiAgICAgIGlmICgodHlwZU5hbWUgJiYgaW5wdXQudHlwZSAhPSB0eXBlTmFtZSkgfHwKICAgICAgICAgIChuYW1lICYmIGlucHV0Lm5hbWUgIT0gbmFtZSkpCiAgICAgICAgY29udGludWU7CiAgICAgIG1hdGNoaW5nSW5wdXRzLnB1c2goaW5wdXQpOwogICAgfQoKICAgIHJldHVybiBtYXRjaGluZ0lucHV0czsKICB9LAoKICBkaXNhYmxlOiBmdW5jdGlvbihmb3JtKSB7CiAgICB2YXIgZWxlbWVudHMgPSBGb3JtLmdldEVsZW1lbnRzKGZvcm0pOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewogICAgICB2YXIgZWxlbWVudCA9IGVsZW1lbnRzW2ldOwogICAgICBlbGVtZW50LmJsdXIoKTsKICAgICAgZWxlbWVudC5kaXNhYmxlZCA9ICd0cnVlJzsKICAgIH0KICB9LAoKICBlbmFibGU6IGZ1bmN0aW9uKGZvcm0pIHsKICAgIHZhciBlbGVtZW50cyA9IEZvcm0uZ2V0RWxlbWVudHMoZm9ybSk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBlbGVtZW50ID0gZWxlbWVudHNbaV07CiAgICAgIGVsZW1lbnQuZGlzYWJsZWQgPSAnJzsKICAgIH0KICB9LAoKICBmaW5kRmlyc3RFbGVtZW50OiBmdW5jdGlvbihmb3JtKSB7CiAgICByZXR1cm4gRm9ybS5nZXRFbGVtZW50cyhmb3JtKS5maW5kKGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgICAgcmV0dXJuIGVsZW1lbnQudHlwZSAhPSAnaGlkZGVuJyAmJiAhZWxlbWVudC5kaXNhYmxlZCAmJgogICAgICAgIFsnaW5wdXQnLCAnc2VsZWN0JywgJ3RleHRhcmVhJ10uaW5jbHVkZShlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSk7CiAgICB9KTsKICB9LAoKICBmb2N1c0ZpcnN0RWxlbWVudDogZnVuY3Rpb24oZm9ybSkgewogICAgRmllbGQuYWN0aXZhdGUoRm9ybS5maW5kRmlyc3RFbGVtZW50KGZvcm0pKTsKICB9LAoKICByZXNldDogZnVuY3Rpb24oZm9ybSkgewogICAgJChmb3JtKS5yZXNldCgpOwogIH0KfQoKRm9ybS5FbGVtZW50ID0gewogIHNlcmlhbGl6ZTogZnVuY3Rpb24oZWxlbWVudCkgewogICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICB2YXIgbWV0aG9kID0gZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7CiAgICB2YXIgcGFyYW1ldGVyID0gRm9ybS5FbGVtZW50LlNlcmlhbGl6ZXJzW21ldGhvZF0oZWxlbWVudCk7CgogICAgaWYgKHBhcmFtZXRlcikgewogICAgICB2YXIga2V5ID0gZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtZXRlclswXSk7CiAgICAgIGlmIChrZXkubGVuZ3RoID09IDApIHJldHVybjsKCiAgICAgIGlmIChwYXJhbWV0ZXJbMV0uY29uc3RydWN0b3IgIT0gQXJyYXkpCiAgICAgICAgcGFyYW1ldGVyWzFdID0gW3BhcmFtZXRlclsxXV07CgogICAgICByZXR1cm4gcGFyYW1ldGVyWzFdLm1hcChmdW5jdGlvbih2YWx1ZSkgewogICAgICAgIHJldHVybiBrZXkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpOwogICAgICB9KS5qb2luKCcmJyk7CiAgICB9CiAgfSwKCiAgZ2V0VmFsdWU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgdmFyIG1ldGhvZCA9IGVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpOwogICAgdmFyIHBhcmFtZXRlciA9IEZvcm0uRWxlbWVudC5TZXJpYWxpemVyc1ttZXRob2RdKGVsZW1lbnQpOwoKICAgIGlmIChwYXJhbWV0ZXIpCiAgICAgIHJldHVybiBwYXJhbWV0ZXJbMV07CiAgfQp9CgpGb3JtLkVsZW1lbnQuU2VyaWFsaXplcnMgPSB7CiAgaW5wdXQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIHN3aXRjaCAoZWxlbWVudC50eXBlLnRvTG93ZXJDYXNlKCkpIHsKICAgICAgY2FzZSAnc3VibWl0JzoKICAgICAgY2FzZSAnaGlkZGVuJzoKICAgICAgY2FzZSAncGFzc3dvcmQnOgogICAgICBjYXNlICd0ZXh0JzoKICAgICAgICByZXR1cm4gRm9ybS5FbGVtZW50LlNlcmlhbGl6ZXJzLnRleHRhcmVhKGVsZW1lbnQpOwogICAgICBjYXNlICdjaGVja2JveCc6CiAgICAgIGNhc2UgJ3JhZGlvJzoKICAgICAgICByZXR1cm4gRm9ybS5FbGVtZW50LlNlcmlhbGl6ZXJzLmlucHV0U2VsZWN0b3IoZWxlbWVudCk7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfSwKCiAgaW5wdXRTZWxlY3RvcjogZnVuY3Rpb24oZWxlbWVudCkgewogICAgaWYgKGVsZW1lbnQuY2hlY2tlZCkKICAgICAgcmV0dXJuIFtlbGVtZW50Lm5hbWUsIGVsZW1lbnQudmFsdWVdOwogIH0sCgogIHRleHRhcmVhOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICByZXR1cm4gW2VsZW1lbnQubmFtZSwgZWxlbWVudC52YWx1ZV07CiAgfSwKCiAgc2VsZWN0OiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICByZXR1cm4gRm9ybS5FbGVtZW50LlNlcmlhbGl6ZXJzW2VsZW1lbnQudHlwZSA9PSAnc2VsZWN0LW9uZScgPwogICAgICAnc2VsZWN0T25lJyA6ICdzZWxlY3RNYW55J10oZWxlbWVudCk7CiAgfSwKCiAgc2VsZWN0T25lOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICB2YXIgdmFsdWUgPSAnJywgb3B0LCBpbmRleCA9IGVsZW1lbnQuc2VsZWN0ZWRJbmRleDsKICAgIGlmIChpbmRleCA+PSAwKSB7CiAgICAgIG9wdCA9IGVsZW1lbnQub3B0aW9uc1tpbmRleF07CiAgICAgIHZhbHVlID0gb3B0LnZhbHVlOwogICAgICBpZiAoIXZhbHVlICYmICEoJ3ZhbHVlJyBpbiBvcHQpKQogICAgICAgIHZhbHVlID0gb3B0LnRleHQ7CiAgICB9CiAgICByZXR1cm4gW2VsZW1lbnQubmFtZSwgdmFsdWVdOwogIH0sCgogIHNlbGVjdE1hbnk6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIHZhciB2YWx1ZSA9IG5ldyBBcnJheSgpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50Lmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBvcHQgPSBlbGVtZW50Lm9wdGlvbnNbaV07CiAgICAgIGlmIChvcHQuc2VsZWN0ZWQpIHsKICAgICAgICB2YXIgb3B0VmFsdWUgPSBvcHQudmFsdWU7CiAgICAgICAgaWYgKCFvcHRWYWx1ZSAmJiAhKCd2YWx1ZScgaW4gb3B0KSkKICAgICAgICAgIG9wdFZhbHVlID0gb3B0LnRleHQ7CiAgICAgICAgdmFsdWUucHVzaChvcHRWYWx1ZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBbZWxlbWVudC5uYW1lLCB2YWx1ZV07CiAgfQp9CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCnZhciAkRiA9IEZvcm0uRWxlbWVudC5nZXRWYWx1ZTsKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKQWJzdHJhY3QuVGltZWRPYnNlcnZlciA9IGZ1bmN0aW9uKCkge30KQWJzdHJhY3QuVGltZWRPYnNlcnZlci5wcm90b3R5cGUgPSB7CiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oZWxlbWVudCwgZnJlcXVlbmN5LCBjYWxsYmFjaykgewogICAgdGhpcy5mcmVxdWVuY3kgPSBmcmVxdWVuY3k7CiAgICB0aGlzLmVsZW1lbnQgICA9ICQoZWxlbWVudCk7CiAgICB0aGlzLmNhbGxiYWNrICA9IGNhbGxiYWNrOwoKICAgIHRoaXMubGFzdFZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpOwogICAgdGhpcy5yZWdpc3RlckNhbGxiYWNrKCk7CiAgfSwKCiAgcmVnaXN0ZXJDYWxsYmFjazogZnVuY3Rpb24oKSB7CiAgICBzZXRJbnRlcnZhbCh0aGlzLm9uVGltZXJFdmVudC5iaW5kKHRoaXMpLCB0aGlzLmZyZXF1ZW5jeSAqIDEwMDApOwogIH0sCgogIG9uVGltZXJFdmVudDogZnVuY3Rpb24oKSB7CiAgICB2YXIgdmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7CiAgICBpZiAodGhpcy5sYXN0VmFsdWUgIT0gdmFsdWUpIHsKICAgICAgdGhpcy5jYWxsYmFjayh0aGlzLmVsZW1lbnQsIHZhbHVlKTsKICAgICAgdGhpcy5sYXN0VmFsdWUgPSB2YWx1ZTsKICAgIH0KICB9Cn0KCkZvcm0uRWxlbWVudC5PYnNlcnZlciA9IENsYXNzLmNyZWF0ZSgpOwpGb3JtLkVsZW1lbnQuT2JzZXJ2ZXIucHJvdG90eXBlID0gT2JqZWN0LmV4dGVuZChuZXcgQWJzdHJhY3QuVGltZWRPYnNlcnZlcigpLCB7CiAgZ2V0VmFsdWU6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIEZvcm0uRWxlbWVudC5nZXRWYWx1ZSh0aGlzLmVsZW1lbnQpOwogIH0KfSk7CgpGb3JtLk9ic2VydmVyID0gQ2xhc3MuY3JlYXRlKCk7CkZvcm0uT2JzZXJ2ZXIucHJvdG90eXBlID0gT2JqZWN0LmV4dGVuZChuZXcgQWJzdHJhY3QuVGltZWRPYnNlcnZlcigpLCB7CiAgZ2V0VmFsdWU6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIEZvcm0uc2VyaWFsaXplKHRoaXMuZWxlbWVudCk7CiAgfQp9KTsKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKQWJzdHJhY3QuRXZlbnRPYnNlcnZlciA9IGZ1bmN0aW9uKCkge30KQWJzdHJhY3QuRXZlbnRPYnNlcnZlci5wcm90b3R5cGUgPSB7CiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oZWxlbWVudCwgY2FsbGJhY2spIHsKICAgIHRoaXMuZWxlbWVudCAgPSAkKGVsZW1lbnQpOwogICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrOwoKICAgIHRoaXMubGFzdFZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpOwogICAgaWYgKHRoaXMuZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gJ2Zvcm0nKQogICAgICB0aGlzLnJlZ2lzdGVyRm9ybUNhbGxiYWNrcygpOwogICAgZWxzZQogICAgICB0aGlzLnJlZ2lzdGVyQ2FsbGJhY2sodGhpcy5lbGVtZW50KTsKICB9LAoKICBvbkVsZW1lbnRFdmVudDogZnVuY3Rpb24oKSB7CiAgICB2YXIgdmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7CiAgICBpZiAodGhpcy5sYXN0VmFsdWUgIT0gdmFsdWUpIHsKICAgICAgdGhpcy5jYWxsYmFjayh0aGlzLmVsZW1lbnQsIHZhbHVlKTsKICAgICAgdGhpcy5sYXN0VmFsdWUgPSB2YWx1ZTsKICAgIH0KICB9LAoKICByZWdpc3RlckZvcm1DYWxsYmFja3M6IGZ1bmN0aW9uKCkgewogICAgdmFyIGVsZW1lbnRzID0gRm9ybS5nZXRFbGVtZW50cyh0aGlzLmVsZW1lbnQpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykKICAgICAgdGhpcy5yZWdpc3RlckNhbGxiYWNrKGVsZW1lbnRzW2ldKTsKICB9LAoKICByZWdpc3RlckNhbGxiYWNrOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICBpZiAoZWxlbWVudC50eXBlKSB7CiAgICAgIHN3aXRjaCAoZWxlbWVudC50eXBlLnRvTG93ZXJDYXNlKCkpIHsKICAgICAgICBjYXNlICdjaGVja2JveCc6CiAgICAgICAgY2FzZSAncmFkaW8nOgogICAgICAgICAgRXZlbnQub2JzZXJ2ZShlbGVtZW50LCAnY2xpY2snLCB0aGlzLm9uRWxlbWVudEV2ZW50LmJpbmQodGhpcykpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAncGFzc3dvcmQnOgogICAgICAgIGNhc2UgJ3RleHQnOgogICAgICAgIGNhc2UgJ3RleHRhcmVhJzoKICAgICAgICBjYXNlICdzZWxlY3Qtb25lJzoKICAgICAgICBjYXNlICdzZWxlY3QtbXVsdGlwbGUnOgogICAgICAgICAgRXZlbnQub2JzZXJ2ZShlbGVtZW50LCAnY2hhbmdlJywgdGhpcy5vbkVsZW1lbnRFdmVudC5iaW5kKHRoaXMpKTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgfQp9CgpGb3JtLkVsZW1lbnQuRXZlbnRPYnNlcnZlciA9IENsYXNzLmNyZWF0ZSgpOwpGb3JtLkVsZW1lbnQuRXZlbnRPYnNlcnZlci5wcm90b3R5cGUgPSBPYmplY3QuZXh0ZW5kKG5ldyBBYnN0cmFjdC5FdmVudE9ic2VydmVyKCksIHsKICBnZXRWYWx1ZTogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gRm9ybS5FbGVtZW50LmdldFZhbHVlKHRoaXMuZWxlbWVudCk7CiAgfQp9KTsKCkZvcm0uRXZlbnRPYnNlcnZlciA9IENsYXNzLmNyZWF0ZSgpOwpGb3JtLkV2ZW50T2JzZXJ2ZXIucHJvdG90eXBlID0gT2JqZWN0LmV4dGVuZChuZXcgQWJzdHJhY3QuRXZlbnRPYnNlcnZlcigpLCB7CiAgZ2V0VmFsdWU6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIEZvcm0uc2VyaWFsaXplKHRoaXMuZWxlbWVudCk7CiAgfQp9KTsKaWYgKCF3aW5kb3cuRXZlbnQpIHsKICB2YXIgRXZlbnQgPSBuZXcgT2JqZWN0KCk7Cn0KCk9iamVjdC5leHRlbmQoRXZlbnQsIHsKICBLRVlfQkFDS1NQQUNFOiA4LAogIEtFWV9UQUI6ICAgICAgIDksCiAgS0VZX1JFVFVSTjogICAxMywKICBLRVlfRVNDOiAgICAgIDI3LAogIEtFWV9MRUZUOiAgICAgMzcsCiAgS0VZX1VQOiAgICAgICAzOCwKICBLRVlfUklHSFQ6ICAgIDM5LAogIEtFWV9ET1dOOiAgICAgNDAsCiAgS0VZX0RFTEVURTogICA0NiwKCiAgZWxlbWVudDogZnVuY3Rpb24oZXZlbnQpIHsKICAgIHJldHVybiBldmVudC50YXJnZXQgfHwgZXZlbnQuc3JjRWxlbWVudDsKICB9LAoKICBpc0xlZnRDbGljazogZnVuY3Rpb24oZXZlbnQpIHsKICAgIHJldHVybiAoKChldmVudC53aGljaCkgJiYgKGV2ZW50LndoaWNoID09IDEpKSB8fAogICAgICAgICAgICAoKGV2ZW50LmJ1dHRvbikgJiYgKGV2ZW50LmJ1dHRvbiA9PSAxKSkpOwogIH0sCgogIHBvaW50ZXJYOiBmdW5jdGlvbihldmVudCkgewogICAgcmV0dXJuIGV2ZW50LnBhZ2VYIHx8IChldmVudC5jbGllbnRYICsKICAgICAgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0IHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCkpOwogIH0sCgogIHBvaW50ZXJZOiBmdW5jdGlvbihldmVudCkgewogICAgcmV0dXJuIGV2ZW50LnBhZ2VZIHx8IChldmVudC5jbGllbnRZICsKICAgICAgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ApKTsKICB9LAoKICBzdG9wOiBmdW5jdGlvbihldmVudCkgewogICAgaWYgKGV2ZW50LnByZXZlbnREZWZhdWx0KSB7CiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgfSBlbHNlIHsKICAgICAgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTsKICAgICAgZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTsKICAgIH0KICB9LAoKICAvLyBmaW5kIHRoZSBmaXJzdCBub2RlIHdpdGggdGhlIGdpdmVuIHRhZ05hbWUsIHN0YXJ0aW5nIGZyb20gdGhlCiAgLy8gbm9kZSB0aGUgZXZlbnQgd2FzIHRyaWdnZXJlZCBvbjsgdHJhdmVyc2VzIHRoZSBET00gdXB3YXJkcwogIGZpbmRFbGVtZW50OiBmdW5jdGlvbihldmVudCwgdGFnTmFtZSkgewogICAgdmFyIGVsZW1lbnQgPSBFdmVudC5lbGVtZW50KGV2ZW50KTsKICAgIHdoaWxlIChlbGVtZW50LnBhcmVudE5vZGUgJiYgKCFlbGVtZW50LnRhZ05hbWUgfHwKICAgICAgICAoZWxlbWVudC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgIT0gdGFnTmFtZS50b1VwcGVyQ2FzZSgpKSkpCiAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7CiAgICByZXR1cm4gZWxlbWVudDsKICB9LAoKICBvYnNlcnZlcnM6IGZhbHNlLAoKICBfb2JzZXJ2ZUFuZENhY2hlOiBmdW5jdGlvbihlbGVtZW50LCBuYW1lLCBvYnNlcnZlciwgdXNlQ2FwdHVyZSkgewogICAgaWYgKCF0aGlzLm9ic2VydmVycykgdGhpcy5vYnNlcnZlcnMgPSBbXTsKICAgIGlmIChlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsKICAgICAgdGhpcy5vYnNlcnZlcnMucHVzaChbZWxlbWVudCwgbmFtZSwgb2JzZXJ2ZXIsIHVzZUNhcHR1cmVdKTsKICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKG5hbWUsIG9ic2VydmVyLCB1c2VDYXB0dXJlKTsKICAgIH0gZWxzZSBpZiAoZWxlbWVudC5hdHRhY2hFdmVudCkgewogICAgICB0aGlzLm9ic2VydmVycy5wdXNoKFtlbGVtZW50LCBuYW1lLCBvYnNlcnZlciwgdXNlQ2FwdHVyZV0pOwogICAgICBlbGVtZW50LmF0dGFjaEV2ZW50KCdvbicgKyBuYW1lLCBvYnNlcnZlcik7CiAgICB9CiAgfSwKCiAgdW5sb2FkQ2FjaGU6IGZ1bmN0aW9uKCkgewogICAgaWYgKCFFdmVudC5vYnNlcnZlcnMpIHJldHVybjsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgRXZlbnQub2JzZXJ2ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgIEV2ZW50LnN0b3BPYnNlcnZpbmcuYXBwbHkodGhpcywgRXZlbnQub2JzZXJ2ZXJzW2ldKTsKICAgICAgRXZlbnQub2JzZXJ2ZXJzW2ldWzBdID0gbnVsbDsKICAgIH0KICAgIEV2ZW50Lm9ic2VydmVycyA9IGZhbHNlOwogIH0sCgogIG9ic2VydmU6IGZ1bmN0aW9uKGVsZW1lbnQsIG5hbWUsIG9ic2VydmVyLCB1c2VDYXB0dXJlKSB7CiAgICB2YXIgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICB1c2VDYXB0dXJlID0gdXNlQ2FwdHVyZSB8fCBmYWxzZTsKCiAgICBpZiAobmFtZSA9PSAna2V5cHJlc3MnICYmCiAgICAgICAgKG5hdmlnYXRvci5hcHBWZXJzaW9uLm1hdGNoKC9Lb25xdWVyb3J8U2FmYXJpfEtIVE1MLykKICAgICAgICB8fCBlbGVtZW50LmF0dGFjaEV2ZW50KSkKICAgICAgbmFtZSA9ICdrZXlkb3duJzsKCiAgICB0aGlzLl9vYnNlcnZlQW5kQ2FjaGUoZWxlbWVudCwgbmFtZSwgb2JzZXJ2ZXIsIHVzZUNhcHR1cmUpOwogIH0sCgogIHN0b3BPYnNlcnZpbmc6IGZ1bmN0aW9uKGVsZW1lbnQsIG5hbWUsIG9ic2VydmVyLCB1c2VDYXB0dXJlKSB7CiAgICB2YXIgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICB1c2VDYXB0dXJlID0gdXNlQ2FwdHVyZSB8fCBmYWxzZTsKCiAgICBpZiAobmFtZSA9PSAna2V5cHJlc3MnICYmCiAgICAgICAgKG5hdmlnYXRvci5hcHBWZXJzaW9uLm1hdGNoKC9Lb25xdWVyb3J8U2FmYXJpfEtIVE1MLykKICAgICAgICB8fCBlbGVtZW50LmRldGFjaEV2ZW50KSkKICAgICAgbmFtZSA9ICdrZXlkb3duJzsKCiAgICBpZiAoZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKSB7CiAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1lLCBvYnNlcnZlciwgdXNlQ2FwdHVyZSk7CiAgICB9IGVsc2UgaWYgKGVsZW1lbnQuZGV0YWNoRXZlbnQpIHsKICAgICAgZWxlbWVudC5kZXRhY2hFdmVudCgnb24nICsgbmFtZSwgb2JzZXJ2ZXIpOwogICAgfQogIH0KfSk7CgovKiBwcmV2ZW50IG1lbW9yeSBsZWFrcyBpbiBJRSAqLwpFdmVudC5vYnNlcnZlKHdpbmRvdywgJ3VubG9hZCcsIEV2ZW50LnVubG9hZENhY2hlLCBmYWxzZSk7CnZhciBQb3NpdGlvbiA9IHsKICAvLyBzZXQgdG8gdHJ1ZSBpZiBuZWVkZWQsIHdhcm5pbmc6IGZpcmVmb3ggcGVyZm9ybWFuY2UgcHJvYmxlbXMKICAvLyBOT1QgbmVlZWRlZCBmb3IgcGFnZSBzY3JvbGxpbmcsIG9ubHkgaWYgZHJhZ2dhYmxlIGNvbnRhaW5lZCBpbgogIC8vIHNjcm9sbGFibGUgZWxlbWVudHMKICBpbmNsdWRlU2Nyb2xsT2Zmc2V0czogZmFsc2UsCgogIC8vIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIHdpdGhpbkluY2x1ZGluZ1Njcm9sbG9mZnNldCwgZXZlcnkgdGltZSB0aGUKICAvLyBwYWdlIGlzIHNjcm9sbGVkCiAgcHJlcGFyZTogZnVuY3Rpb24oKSB7CiAgICB0aGlzLmRlbHRhWCA9ICB3aW5kb3cucGFnZVhPZmZzZXQKICAgICAgICAgICAgICAgIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0CiAgICAgICAgICAgICAgICB8fCBkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQKICAgICAgICAgICAgICAgIHx8IDA7CiAgICB0aGlzLmRlbHRhWSA9ICB3aW5kb3cucGFnZVlPZmZzZXQKICAgICAgICAgICAgICAgIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AKICAgICAgICAgICAgICAgIHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wCiAgICAgICAgICAgICAgICB8fCAwOwogIH0sCgogIHJlYWxPZmZzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIHZhciB2YWx1ZVQgPSAwLCB2YWx1ZUwgPSAwOwogICAgZG8gewogICAgICB2YWx1ZVQgKz0gZWxlbWVudC5zY3JvbGxUb3AgIHx8IDA7CiAgICAgIHZhbHVlTCArPSBlbGVtZW50LnNjcm9sbExlZnQgfHwgMDsKICAgICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTsKICAgIH0gd2hpbGUgKGVsZW1lbnQpOwogICAgcmV0dXJuIFt2YWx1ZUwsIHZhbHVlVF07CiAgfSwKCiAgY3VtdWxhdGl2ZU9mZnNldDogZnVuY3Rpb24oZWxlbWVudCkgewogICAgdmFyIHZhbHVlVCA9IDAsIHZhbHVlTCA9IDA7CiAgICBkbyB7CiAgICAgIHZhbHVlVCArPSBlbGVtZW50Lm9mZnNldFRvcCAgfHwgMDsKICAgICAgdmFsdWVMICs9IGVsZW1lbnQub2Zmc2V0TGVmdCB8fCAwOwogICAgICBlbGVtZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQ7CiAgICB9IHdoaWxlIChlbGVtZW50KTsKICAgIHJldHVybiBbdmFsdWVMLCB2YWx1ZVRdOwogIH0sCgogIHBvc2l0aW9uZWRPZmZzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIHZhciB2YWx1ZVQgPSAwLCB2YWx1ZUwgPSAwOwogICAgZG8gewogICAgICB2YWx1ZVQgKz0gZWxlbWVudC5vZmZzZXRUb3AgIHx8IDA7CiAgICAgIHZhbHVlTCArPSBlbGVtZW50Lm9mZnNldExlZnQgfHwgMDsKICAgICAgZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50OwogICAgICBpZiAoZWxlbWVudCkgewogICAgICAgIHAgPSBFbGVtZW50LmdldFN0eWxlKGVsZW1lbnQsICdwb3NpdGlvbicpOwogICAgICAgIGlmIChwID09ICdyZWxhdGl2ZScgfHwgcCA9PSAnYWJzb2x1dGUnKSBicmVhazsKICAgICAgfQogICAgfSB3aGlsZSAoZWxlbWVudCk7CiAgICByZXR1cm4gW3ZhbHVlTCwgdmFsdWVUXTsKICB9LAoKICBvZmZzZXRQYXJlbnQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIGlmIChlbGVtZW50Lm9mZnNldFBhcmVudCkgcmV0dXJuIGVsZW1lbnQub2Zmc2V0UGFyZW50OwogICAgaWYgKGVsZW1lbnQgPT0gZG9jdW1lbnQuYm9keSkgcmV0dXJuIGVsZW1lbnQ7CgogICAgd2hpbGUgKChlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlKSAmJiBlbGVtZW50ICE9IGRvY3VtZW50LmJvZHkpCiAgICAgIGlmIChFbGVtZW50LmdldFN0eWxlKGVsZW1lbnQsICdwb3NpdGlvbicpICE9ICdzdGF0aWMnKQogICAgICAgIHJldHVybiBlbGVtZW50OwoKICAgIHJldHVybiBkb2N1bWVudC5ib2R5OwogIH0sCgogIC8vIGNhY2hlcyB4L3kgY29vcmRpbmF0ZSBwYWlyIHRvIHVzZSB3aXRoIG92ZXJsYXAKICB3aXRoaW46IGZ1bmN0aW9uKGVsZW1lbnQsIHgsIHkpIHsKICAgIGlmICh0aGlzLmluY2x1ZGVTY3JvbGxPZmZzZXRzKQogICAgICByZXR1cm4gdGhpcy53aXRoaW5JbmNsdWRpbmdTY3JvbGxvZmZzZXRzKGVsZW1lbnQsIHgsIHkpOwogICAgdGhpcy54Y29tcCA9IHg7CiAgICB0aGlzLnljb21wID0geTsKICAgIHRoaXMub2Zmc2V0ID0gdGhpcy5jdW11bGF0aXZlT2Zmc2V0KGVsZW1lbnQpOwoKICAgIHJldHVybiAoeSA+PSB0aGlzLm9mZnNldFsxXSAmJgogICAgICAgICAgICB5IDwgIHRoaXMub2Zmc2V0WzFdICsgZWxlbWVudC5vZmZzZXRIZWlnaHQgJiYKICAgICAgICAgICAgeCA+PSB0aGlzLm9mZnNldFswXSAmJgogICAgICAgICAgICB4IDwgIHRoaXMub2Zmc2V0WzBdICsgZWxlbWVudC5vZmZzZXRXaWR0aCk7CiAgfSwKCiAgd2l0aGluSW5jbHVkaW5nU2Nyb2xsb2Zmc2V0czogZnVuY3Rpb24oZWxlbWVudCwgeCwgeSkgewogICAgdmFyIG9mZnNldGNhY2hlID0gdGhpcy5yZWFsT2Zmc2V0KGVsZW1lbnQpOwoKICAgIHRoaXMueGNvbXAgPSB4ICsgb2Zmc2V0Y2FjaGVbMF0gLSB0aGlzLmRlbHRhWDsKICAgIHRoaXMueWNvbXAgPSB5ICsgb2Zmc2V0Y2FjaGVbMV0gLSB0aGlzLmRlbHRhWTsKICAgIHRoaXMub2Zmc2V0ID0gdGhpcy5jdW11bGF0aXZlT2Zmc2V0KGVsZW1lbnQpOwoKICAgIHJldHVybiAodGhpcy55Y29tcCA+PSB0aGlzLm9mZnNldFsxXSAmJgogICAgICAgICAgICB0aGlzLnljb21wIDwgIHRoaXMub2Zmc2V0WzFdICsgZWxlbWVudC5vZmZzZXRIZWlnaHQgJiYKICAgICAgICAgICAgdGhpcy54Y29tcCA+PSB0aGlzLm9mZnNldFswXSAmJgogICAgICAgICAgICB0aGlzLnhjb21wIDwgIHRoaXMub2Zmc2V0WzBdICsgZWxlbWVudC5vZmZzZXRXaWR0aCk7CiAgfSwKCiAgLy8gd2l0aGluIG11c3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJlZm9yZQogIG92ZXJsYXA6IGZ1bmN0aW9uKG1vZGUsIGVsZW1lbnQpIHsKICAgIGlmICghbW9kZSkgcmV0dXJuIDA7CiAgICBpZiAobW9kZSA9PSAndmVydGljYWwnKQogICAgICByZXR1cm4gKCh0aGlzLm9mZnNldFsxXSArIGVsZW1lbnQub2Zmc2V0SGVpZ2h0KSAtIHRoaXMueWNvbXApIC8KICAgICAgICBlbGVtZW50Lm9mZnNldEhlaWdodDsKICAgIGlmIChtb2RlID09ICdob3Jpem9udGFsJykKICAgICAgcmV0dXJuICgodGhpcy5vZmZzZXRbMF0gKyBlbGVtZW50Lm9mZnNldFdpZHRoKSAtIHRoaXMueGNvbXApIC8KICAgICAgICBlbGVtZW50Lm9mZnNldFdpZHRoOwogIH0sCgogIGNsb25lOiBmdW5jdGlvbihzb3VyY2UsIHRhcmdldCkgewogICAgc291cmNlID0gJChzb3VyY2UpOwogICAgdGFyZ2V0ID0gJCh0YXJnZXQpOwogICAgdGFyZ2V0LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJzsKICAgIHZhciBvZmZzZXRzID0gdGhpcy5jdW11bGF0aXZlT2Zmc2V0KHNvdXJjZSk7CiAgICB0YXJnZXQuc3R5bGUudG9wICAgID0gb2Zmc2V0c1sxXSArICdweCc7CiAgICB0YXJnZXQuc3R5bGUubGVmdCAgID0gb2Zmc2V0c1swXSArICdweCc7CiAgICB0YXJnZXQuc3R5bGUud2lkdGggID0gc291cmNlLm9mZnNldFdpZHRoICsgJ3B4JzsKICAgIHRhcmdldC5zdHlsZS5oZWlnaHQgPSBzb3VyY2Uub2Zmc2V0SGVpZ2h0ICsgJ3B4JzsKICB9LAoKICBwYWdlOiBmdW5jdGlvbihmb3JFbGVtZW50KSB7CiAgICB2YXIgdmFsdWVUID0gMCwgdmFsdWVMID0gMDsKCiAgICB2YXIgZWxlbWVudCA9IGZvckVsZW1lbnQ7CiAgICBkbyB7CiAgICAgIHZhbHVlVCArPSBlbGVtZW50Lm9mZnNldFRvcCAgfHwgMDsKICAgICAgdmFsdWVMICs9IGVsZW1lbnQub2Zmc2V0TGVmdCB8fCAwOwoKICAgICAgLy8gU2FmYXJpIGZpeAogICAgICBpZiAoZWxlbWVudC5vZmZzZXRQYXJlbnQ9PWRvY3VtZW50LmJvZHkpCiAgICAgICAgaWYgKEVsZW1lbnQuZ2V0U3R5bGUoZWxlbWVudCwncG9zaXRpb24nKT09J2Fic29sdXRlJykgYnJlYWs7CgogICAgfSB3aGlsZSAoZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50KTsKCiAgICBlbGVtZW50ID0gZm9yRWxlbWVudDsKICAgIGRvIHsKICAgICAgdmFsdWVUIC09IGVsZW1lbnQuc2Nyb2xsVG9wICB8fCAwOwogICAgICB2YWx1ZUwgLT0gZWxlbWVudC5zY3JvbGxMZWZ0IHx8IDA7CiAgICB9IHdoaWxlIChlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlKTsKCiAgICByZXR1cm4gW3ZhbHVlTCwgdmFsdWVUXTsKICB9LAoKICBjbG9uZTogZnVuY3Rpb24oc291cmNlLCB0YXJnZXQpIHsKICAgIHZhciBvcHRpb25zID0gT2JqZWN0LmV4dGVuZCh7CiAgICAgIHNldExlZnQ6ICAgIHRydWUsCiAgICAgIHNldFRvcDogICAgIHRydWUsCiAgICAgIHNldFdpZHRoOiAgIHRydWUsCiAgICAgIHNldEhlaWdodDogIHRydWUsCiAgICAgIG9mZnNldFRvcDogIDAsCiAgICAgIG9mZnNldExlZnQ6IDAKICAgIH0sIGFyZ3VtZW50c1syXSB8fCB7fSkKCiAgICAvLyBmaW5kIHBhZ2UgcG9zaXRpb24gb2Ygc291cmNlCiAgICBzb3VyY2UgPSAkKHNvdXJjZSk7CiAgICB2YXIgcCA9IFBvc2l0aW9uLnBhZ2Uoc291cmNlKTsKCiAgICAvLyBmaW5kIGNvb3JkaW5hdGUgc3lzdGVtIHRvIHVzZQogICAgdGFyZ2V0ID0gJCh0YXJnZXQpOwogICAgdmFyIGRlbHRhID0gWzAsIDBdOwogICAgdmFyIHBhcmVudCA9IG51bGw7CiAgICAvLyBkZWx0YSBbMCwwXSB3aWxsIGRvIGZpbmUgd2l0aCBwb3NpdGlvbjogZml4ZWQgZWxlbWVudHMsCiAgICAvLyBwb3NpdGlvbjphYnNvbHV0ZSBuZWVkcyBvZmZzZXRQYXJlbnQgZGVsdGFzCiAgICBpZiAoRWxlbWVudC5nZXRTdHlsZSh0YXJnZXQsJ3Bvc2l0aW9uJykgPT0gJ2Fic29sdXRlJykgewogICAgICBwYXJlbnQgPSBQb3NpdGlvbi5vZmZzZXRQYXJlbnQodGFyZ2V0KTsKICAgICAgZGVsdGEgPSBQb3NpdGlvbi5wYWdlKHBhcmVudCk7CiAgICB9CgogICAgLy8gY29ycmVjdCBieSBib2R5IG9mZnNldHMgKGZpeGVzIFNhZmFyaSkKICAgIGlmIChwYXJlbnQgPT0gZG9jdW1lbnQuYm9keSkgewogICAgICBkZWx0YVswXSAtPSBkb2N1bWVudC5ib2R5Lm9mZnNldExlZnQ7CiAgICAgIGRlbHRhWzFdIC09IGRvY3VtZW50LmJvZHkub2Zmc2V0VG9wOwogICAgfQoKICAgIC8vIHNldCBwb3NpdGlvbgogICAgaWYob3B0aW9ucy5zZXRMZWZ0KSAgIHRhcmdldC5zdHlsZS5sZWZ0ICA9IChwWzBdIC0gZGVsdGFbMF0gKyBvcHRpb25zLm9mZnNldExlZnQpICsgJ3B4JzsKICAgIGlmKG9wdGlvbnMuc2V0VG9wKSAgICB0YXJnZXQuc3R5bGUudG9wICAgPSAocFsxXSAtIGRlbHRhWzFdICsgb3B0aW9ucy5vZmZzZXRUb3ApICsgJ3B4JzsKICAgIGlmKG9wdGlvbnMuc2V0V2lkdGgpICB0YXJnZXQuc3R5bGUud2lkdGggPSBzb3VyY2Uub2Zmc2V0V2lkdGggKyAncHgnOwogICAgaWYob3B0aW9ucy5zZXRIZWlnaHQpIHRhcmdldC5zdHlsZS5oZWlnaHQgPSBzb3VyY2Uub2Zmc2V0SGVpZ2h0ICsgJ3B4JzsKICB9LAoKICBhYnNvbHV0aXplOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgIGlmIChlbGVtZW50LnN0eWxlLnBvc2l0aW9uID09ICdhYnNvbHV0ZScpIHJldHVybjsKICAgIFBvc2l0aW9uLnByZXBhcmUoKTsKCiAgICB2YXIgb2Zmc2V0cyA9IFBvc2l0aW9uLnBvc2l0aW9uZWRPZmZzZXQoZWxlbWVudCk7CiAgICB2YXIgdG9wICAgICA9IG9mZnNldHNbMV07CiAgICB2YXIgbGVmdCAgICA9IG9mZnNldHNbMF07CiAgICB2YXIgd2lkdGggICA9IGVsZW1lbnQuY2xpZW50V2lkdGg7CiAgICB2YXIgaGVpZ2h0ICA9IGVsZW1lbnQuY2xpZW50SGVpZ2h0OwoKICAgIGVsZW1lbnQuX29yaWdpbmFsTGVmdCAgID0gbGVmdCAtIHBhcnNlRmxvYXQoZWxlbWVudC5zdHlsZS5sZWZ0ICB8fCAwKTsKICAgIGVsZW1lbnQuX29yaWdpbmFsVG9wICAgID0gdG9wICAtIHBhcnNlRmxvYXQoZWxlbWVudC5zdHlsZS50b3AgfHwgMCk7CiAgICBlbGVtZW50Ll9vcmlnaW5hbFdpZHRoICA9IGVsZW1lbnQuc3R5bGUud2lkdGg7CiAgICBlbGVtZW50Ll9vcmlnaW5hbEhlaWdodCA9IGVsZW1lbnQuc3R5bGUuaGVpZ2h0OwoKICAgIGVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnOwogICAgZWxlbWVudC5zdHlsZS50b3AgICAgPSB0b3AgKyAncHgnOzsKICAgIGVsZW1lbnQuc3R5bGUubGVmdCAgID0gbGVmdCArICdweCc7OwogICAgZWxlbWVudC5zdHlsZS53aWR0aCAgPSB3aWR0aCArICdweCc7OwogICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAncHgnOzsKICB9LAoKICByZWxhdGl2aXplOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgIGlmIChlbGVtZW50LnN0eWxlLnBvc2l0aW9uID09ICdyZWxhdGl2ZScpIHJldHVybjsKICAgIFBvc2l0aW9uLnByZXBhcmUoKTsKCiAgICBlbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJzsKICAgIHZhciB0b3AgID0gcGFyc2VGbG9hdChlbGVtZW50LnN0eWxlLnRvcCAgfHwgMCkgLSAoZWxlbWVudC5fb3JpZ2luYWxUb3AgfHwgMCk7CiAgICB2YXIgbGVmdCA9IHBhcnNlRmxvYXQoZWxlbWVudC5zdHlsZS5sZWZ0IHx8IDApIC0gKGVsZW1lbnQuX29yaWdpbmFsTGVmdCB8fCAwKTsKCiAgICBlbGVtZW50LnN0eWxlLnRvcCAgICA9IHRvcCArICdweCc7CiAgICBlbGVtZW50LnN0eWxlLmxlZnQgICA9IGxlZnQgKyAncHgnOwogICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBlbGVtZW50Ll9vcmlnaW5hbEhlaWdodDsKICAgIGVsZW1lbnQuc3R5bGUud2lkdGggID0gZWxlbWVudC5fb3JpZ2luYWxXaWR0aDsKICB9Cn0KCi8vIFNhZmFyaSByZXR1cm5zIG1hcmdpbnMgb24gYm9keSB3aGljaCBpcyBpbmNvcnJlY3QgaWYgdGhlIGNoaWxkIGlzIGFic29sdXRlbHkKLy8gcG9zaXRpb25lZC4gIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCByZWRlZmluZSBQb3NpdGlvbi5jdW11bGF0aXZlT2Zmc2V0IGZvcgovLyBLSFRNTC9XZWJLaXQgb25seS4KaWYgKC9Lb25xdWVyb3J8U2FmYXJpfEtIVE1MLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKSB7CiAgUG9zaXRpb24uY3VtdWxhdGl2ZU9mZnNldCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIHZhciB2YWx1ZVQgPSAwLCB2YWx1ZUwgPSAwOwogICAgZG8gewogICAgICB2YWx1ZVQgKz0gZWxlbWVudC5vZmZzZXRUb3AgIHx8IDA7CiAgICAgIHZhbHVlTCArPSBlbGVtZW50Lm9mZnNldExlZnQgfHwgMDsKICAgICAgaWYgKGVsZW1lbnQub2Zmc2V0UGFyZW50ID09IGRvY3VtZW50LmJvZHkpCiAgICAgICAgaWYgKEVsZW1lbnQuZ2V0U3R5bGUoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT0gJ2Fic29sdXRlJykgYnJlYWs7CgogICAgICBlbGVtZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQ7CiAgICB9IHdoaWxlIChlbGVtZW50KTsKCiAgICByZXR1cm4gW3ZhbHVlTCwgdmFsdWVUXTsKICB9Cn0=]]></data>
	</file>
	<file>
	  <filename>/js/scriptaculous.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gQ29weXJpZ2h0IChjKSAyMDA1IFRob21hcyBGdWNocyAoaHR0cDovL3NjcmlwdC5hY3Vsby51cywgaHR0cDovL21pci5hY3Vsby51cykKLy8gCi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwovLyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKLy8gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwovLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwovLyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KLy8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgovLyAKLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKLy8gaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi8vCi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAovLyBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKLy8gTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQovLyBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCi8vIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgovLyBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KCnZhciBTY3JpcHRhY3Vsb3VzID0gewogIFZlcnNpb246ICcxLjUuMScsCiAgcmVxdWlyZTogZnVuY3Rpb24obGlicmFyeU5hbWUpIHsKICAgIC8vIGluc2VydGluZyB2aWEgRE9NIGZhaWxzIGluIFNhZmFyaSAyLjAsIHNvIGJydXRlIGZvcmNlIGFwcHJvYWNoCiAgICBkb2N1bWVudC53cml0ZSgnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJytsaWJyYXJ5TmFtZSsnIj48L3NjcmlwdD4nKTsKICB9LAogIGxvYWQ6IGZ1bmN0aW9uKCkgewogICAgaWYoKHR5cGVvZiBQcm90b3R5cGU9PSd1bmRlZmluZWQnKSB8fAogICAgICBwYXJzZUZsb2F0KFByb3RvdHlwZS5WZXJzaW9uLnNwbGl0KCIuIilbMF0gKyAiLiIgKwogICAgICAgICAgICAgICAgIFByb3RvdHlwZS5WZXJzaW9uLnNwbGl0KCIuIilbMV0pIDwgMS40KQogICAgICB0aHJvdygic2NyaXB0LmFjdWxvLnVzIHJlcXVpcmVzIHRoZSBQcm90b3R5cGUgSmF2YVNjcmlwdCBmcmFtZXdvcmsgPj0gMS40LjAiKTsKICAgIAogICAgJEEoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpKS5maW5kQWxsKCBmdW5jdGlvbihzKSB7CiAgICAgIHJldHVybiAocy5zcmMgJiYgcy5zcmMubWF0Y2goL3NjcmlwdGFjdWxvdXNcLmpzKFw/LiopPyQvKSkKICAgIH0pLmVhY2goIGZ1bmN0aW9uKHMpIHsKICAgICAgdmFyIHBhdGggPSBzLnNyYy5yZXBsYWNlKC9zY3JpcHRhY3Vsb3VzXC5qcyhcPy4qKT8kLywnJyk7CiAgICAgIHZhciBpbmNsdWRlcyA9IHMuc3JjLm1hdGNoKC9cPy4qbG9hZD0oW2EteixdKikvKTsKICAgICAgKGluY2x1ZGVzID8gaW5jbHVkZXNbMV0gOiAnYnVpbGRlcixlZmZlY3RzLGRyYWdkcm9wLGNvbnRyb2xzLHNsaWRlcicpLnNwbGl0KCcsJykuZWFjaCgKICAgICAgIGZ1bmN0aW9uKGluY2x1ZGUpIHsgU2NyaXB0YWN1bG91cy5yZXF1aXJlKHBhdGgraW5jbHVkZSsnLmpzJykgfSk7CiAgICB9KTsKICB9Cn0KClNjcmlwdGFjdWxvdXMubG9hZCgpOw==]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0EKCiNCCgojQwokbGFuZ1snY2hhbmdlbG9nJ10gPSA8PDxFT1QKPHVsPgo8bGk+VmVyc2lvbiAxLjAgLSAoRmVicnVhcnkgMjAwOCkgSW5pdGlhbCBSZWxlYXNlPC9saT4KPGxpPlZlcnNpb24gMS4wLjEgLSAoTWFyY2ggMjAwOCkKICAgIDxwPkZpeGVzIHBvdGVudGlhbCBuYW1pbmcgY29uZmxpY3RzIGluIHNtYXJ0eSB2YXJpYWJsZXM8L3A+CiAgICA8cD5GaXhlcyBwYXRoIGlzc3VlcyBpbiB0aGUgamF2YXNjcmlwdDwvcD4KICAgIDxwPkFkZHMgdGhlIGFiaWxpdHkgdG8gcHV0IGEgZG93bmxvYWQgbGluayBpbnRvIHRoZSBwb3B1cDwvcD4KICAgIDxwPkFkZHMgdGhlIGFiaWxpdHkgdG8gc2V0IGEgbWF4aW11bSBwb3B1cCB3aW5kb3cgc2l6ZTwvcD4KPC9saT4KPC91bD4KRU9UOwoKI0QKCiNFCgojRgokbGFuZ1snZnJpZW5kbHluYW1lJ10gPSAnRWFzeSBMaWdodGJveCBJbnRlZ3JhdGlvbic7CgojRwoKI0gKJGxhbmdbJ2hlbHAnXSA9IDw8PEVPVAo8aDM+V2hhdCBkb2VzIGl0IGRvPC9oMz4KPHA+VGhpcyBpcyBhIHNpbXBsZSB3cmFwcGVyIGFyb3VuZCB0aGUgTGlnaHRib3gyIEphdmFzY3JpcHQgdXRpbGl0aWVzIGFzIHdyaXR0ZW4gYnkgTG9rZXNoIERoYWthciAoPGEgaHJlZj0iaHR0cDovL3d3dy5odWRkbGV0b2dldGhlci5jb20vcHJvamVjdHMvbGlnaHRib3giPmh0dHA6Ly93d3cuaHVkZGxldG9nZXRoZXIuY29tL3Byb2plY3RzL2xpZ2h0Ym94PC9hPikgdG8gYWxsb3cgeW91IHRvIGNyZWF0ZSBwb3B1cCBpbWFnZXMgaW4geW91ciBDTVMgTWFkZSBzaW1wbGUgd2ViIHBhZ2UuPC9wPgoJCQkJCQkJCQkJCQkgICA8cD5UaGlzIG1vZHVsZSBzdXBwb3J0cyB1c2luZyB0aHVtYm5haWxzLCBvciBhIGRlZmF1bHQgaW1hZ2UgYXMgYW4gaWNvbi4gIFN1cHBvcnRzIHRpdGxlcywgYW5kIGFsdGVybmF0ZSB0ZXh0IGluIHRoZSBpbWFnZSB0YWcsIGFuZCBzdXBwb3J0cyBzaW1wbGUgaW1hZ2UgZ2FsbGVyaWVzLjwvcD4KPGgzPkhvdyBEbyBJIFVzZSBJdDwvaDM+CjxwPlRvIHVzZSBpdCB5b3UgbmVlZCB0aHJlZSB0YWdzIHRvIGJlIHBsYWNlZCBzb21ld2hlcmUgaW4geW91ciBvdXRwdXQ6PC9wPgo8dWw+CiAgPGxpPntMaWdodEJveCBhY3Rpb249J2Nzcyd9IC0gT3V0cHV0IHRoZSBjc3MgdGFnIHJlcXVpcmVkIGZvciBsaWdodGJveDwvbGk+CiAgPGxpPntMaWdodEJveCBhY3Rpb249J2pzJ30gLSBPdXRwdXQgdGhlIGphdmFzY3JpcHQgdGFncyByZXF1aXJlZCBmb3IgbGlnaHRib3g8L2xpPgogIDxsaT57TGlnaHRCb3ggaW1hZ2U9J2ltYWdlZmlsZS5naWYnfSAtIFJlcGVhdCBhcyBtYW55IHRpbWVzIGFzIG5lY2Vzc2FyeSB0byBjcmVhdGUgaW1hZ2UgcG9wdXBzPC9saT4KPC91bD4KRU9UOwokbGFuZ1snaGVscF90aXRsZSddID0gJ1NwZWNpZnkgYW4gb3B0aW9uYWwgdGl0bGUgZm9yIHlvdXIgcG9wdXAgaW1hZ2UnOwokbGFuZ1snaGVscF90ZXh0J10gPSAnU3BlY2lmeSBhZGRpdGlvbmFsIHRleHQgZm9yIHRoZSBpbWFnZSBsaW5rJzsKJGxhbmdbJ2hlbHBfYWRkdGV4dCddID0gJ1NwZWNpZnkgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZvciB0aGUgaW1hZ2UgdGFnIGluIHRoZSBsaW5rJzsKJGxhbmdbJ2hlbHBfbmFtZSddID0gJ1NwZWNpZnkgYSBuYW1lIGZvciB0aGUgcmVsIGxpbmsuICBUaGlzIGNhbiBiZSB1c2VkIHRvIGdyb3VwIGltYWdlcyB0b2dldGhlciBhbmQgdG8gYWxsb3cgcGFnaW5nIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gdGhlbSc7CiRsYW5nWydoZWxwX2ltYWdlJ10gPSAnU3BlY2lmeSBhbiBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gdGhlIGltYWdlIHRvIGJlIGRpc3BsYXllZCc7CgojSQoKI0oKCiNLCgojTAoKI00KJGxhbmdbJ21vZGRlc2NyaXB0aW9uJ10gPSAnQSBzaW1wbGUgd2F5IHRvIHVzZSBsaWdodGJveCBpbiB5b3VyIHRlbXBsYXRlcyc7CgojTgoKI08KCiNQCiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ0xpZ2h0Ym94IE1vZHVsZSBJbnN0YWxsZWQnOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ0xpZ2h0Ym94IE1vZHVsZSBSZW1vdmVkJzsKJGxhbmdbJ3ByZXVuaW5zdGFsbCddID0gJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byB1bmluc3RhbGwgdGhpcyBtb2R1bGU/JzsKCiNRCgojUgoKI1MKCiNUCgojVQoKI1YKCiNXCgojWAoKI1kKCiNaCgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/ext/nb_NO.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2NoYW5nZWxvZyddID0gJzx1bD4NCjxsaT5WZXJzaW9uIDEuMCAtIChGZWJydWFyeSAyMDA4KSBJbml0aWFsIFJlbGVhc2U8L2xpPg0KPGxpPlZlcnNpb24gMS4wLjEgLSAoTWFyY2ggMjAwOCkNCiAgICA8cD5GaXhlcyBwb3RlbnRpYWwgbmFtaW5nIGNvbmZsaWN0cyBpbiBzbWFydHkgdmFyaWFibGVzPC9wPg0KICAgIDxwPkZpeGVzIHBhdGggaXNzdWVzIGluIHRoZSBqYXZhc2NyaXB0PC9wPg0KICAgIDxwPkFkZHMgdGhlIGFiaWxpdHkgdG8gcHV0IGEgZG93bmxvYWQgbGluayBpbnRvIHRoZSBwb3B1cDwvcD4NCiAgICA8cD5BZGRzIHRoZSBhYmlsaXR5IHRvIHNldCBhIG1heGltdW0gcG9wdXAgd2luZG93IHNpemU8L3A+DQo8L2xpPg0KPC91bD4nOwokbGFuZ1snZnJpZW5kbHluYW1lJ10gPSAnRW5rZWwgTGlnaHRib3ggSW50ZWdyYXNqb24nOwokbGFuZ1snaGVscCddID0gJzxoMz5XaGF0IGRvZXMgaXQgZG88L2gzPg0KPHA+VGhpcyBpcyBhIHNpbXBsZSB3cmFwcGVyIGFyb3VuZCB0aGUgTGlnaHRib3gyIEphdmFzY3JpcHQgdXRpbGl0aWVzIGFzIHdyaXR0ZW4gYnkgTG9rZXNoIERoYWthciAoPGEgaHJlZj0mcXVvdDtodHRwOi8vd3d3Lmh1ZGRsZXRvZ2V0aGVyLmNvbS9wcm9qZWN0cy9saWdodGJveCZxdW90Oz5odHRwOi8vd3d3Lmh1ZGRsZXRvZ2V0aGVyLmNvbS9wcm9qZWN0cy9saWdodGJveDwvYT4pIHRvIGFsbG93IHlvdSB0byBjcmVhdGUgcG9wdXAgaW1hZ2VzIGluIHlvdXIgQ01TIE1hZGUgc2ltcGxlIHdlYiBwYWdlLjwvcD4NCgkJCQkJCQkJCQkJCSAgIDxwPlRoaXMgbW9kdWxlIHN1cHBvcnRzIHVzaW5nIHRodW1ibmFpbHMsIG9yIGEgZGVmYXVsdCBpbWFnZSBhcyBhbiBpY29uLiAgU3VwcG9ydHMgdGl0bGVzLCBhbmQgYWx0ZXJuYXRlIHRleHQgaW4gdGhlIGltYWdlIHRhZywgYW5kIHN1cHBvcnRzIHNpbXBsZSBpbWFnZSBnYWxsZXJpZXMuPC9wPg0KPGgzPkhvdyBEbyBJIFVzZSBJdDwvaDM+DQo8cD5UbyB1c2UgaXQgeW91IG5lZWQgdGhyZWUgdGFncyB0byBiZSBwbGFjZWQgc29tZXdoZXJlIGluIHlvdXIgb3V0cHV0OjwvcD4NCjx1bD4NCiAgPGxpPntMaWdodEJveCBhY3Rpb249JiMwMzk7Y3NzJiMwMzk7fSAtIE91dHB1dCB0aGUgY3NzIHRhZyByZXF1aXJlZCBmb3IgbGlnaHRib3g8L2xpPg0KICA8bGk+e0xpZ2h0Qm94IGFjdGlvbj0mIzAzOTtqcyYjMDM5O30gLSBPdXRwdXQgdGhlIGphdmFzY3JpcHQgdGFncyByZXF1aXJlZCBmb3IgbGlnaHRib3g8L2xpPg0KICA8bGk+e0xpZ2h0Qm94IGltYWdlPSYjMDM5O2ltYWdlZmlsZS5naWYmIzAzOTt9IC0gUmVwZWF0IGFzIG1hbnkgdGltZXMgYXMgbmVjZXNzYXJ5IHRvIGNyZWF0ZSBpbWFnZSBwb3B1cHM8L2xpPg0KPC91bD4nOwokbGFuZ1snaGVscF90aXRsZSddID0gJ1NwZXNpZmlzZXIgZW4gYWx0ZXJuYXRpdiB0aXR0ZWwgZm9yIGRpdHQgcG9wdXAgYmlsZGUnOwokbGFuZ1snaGVscF90ZXh0J10gPSAnU3Blc2lmaXNlciBla3N0cmEgdGVrc3QgZm9yIGJpbGRlbGVua2VuJzsKJGxhbmdbJ2hlbHBfYWRkdGV4dCddID0gJ1NwZXNpZmlzZXIgZWtzdHJhIHBhcmFtZXRlcmUgZm9yIGJpbGRldGFnZ2VuIGkgbGVua2VuJzsKJGxhbmdbJ2hlbHBfbmFtZSddID0gJ1NwZXNpZmlzZXIgZXQgbmF2biBmb3IgcmVsLmxlbmtlbi4gRGV0dGUga2FuIGJlbnl0dGVzIHRpbCAmYXJpbmc7IGdydXBwZXJlIGJpbGRlciBvZyAmYXJpbmc7IHRpbGxhdGUgJmFyaW5nOyBibGUgZnJlbSBvZyB0aWxiYWtlIG1lbGxvbSBkZW0nOwokbGFuZ1snaGVscF9pbWFnZSddID0gJ1NwZXNpZmlzZXIgYWJzb2x1dHQgZWxsZXIgcmVsYXRpdiBVUkwgdGlsIGJpbGRldCBzb2ltIHNrYWwgdmlzZXMnOwokbGFuZ1snbW9kZGVzY3JpcHRpb24nXSA9ICdFbiBlbmtlbCBtJmFyaW5nO3RlICZhcmluZzsgYmVueXR0ZSBsaWdodGJveCBpIGRpbmUgbWFsZXInOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICdMaWdodGJveCBtb2R1bGVuIGJsZSBpbnN0YWxsZXJ0JzsKJGxhbmdbJ3Bvc3R1bmluc3RhbGwnXSA9ICdMaWdodGJveCBtb2R1bGVuIGJsZSBhdmluc3RhbGxlcnQnOwokbGFuZ1sncHJldW5pbnN0YWxsJ10gPSAnRXIgZHUgdmlya2VsaWcgc2lra2VyIHAmYXJpbmc7IGF0IGR1IHZpbCBmamVybmUgZGVubmUgbW9kdWxlbj8nOwokbGFuZ1sndXRtYSddID0gJzE1Njg2MTM1My41MjU0MDY4MTIuMTE4ODA3NzQxNy4xMjA1ODg1MTE2LjEyMDU5Mzk3NjUuNDAwJzsKJGxhbmdbJ3V0bXonXSA9ICcxNTY4NjEzNTMuMTIwNTY4NjIzMy4zOTQuMjcudXRtY2NuPShyZWZlcnJhbCl8dXRtY3NyPWNtczEuaGVsbWluaWtvbi5ub3x1dG1jY3Q9L2FkbWluL2xpc3Rtb2R1bGVzLnBocHx1dG1jbWQ9cmVmZXJyYWwnOwokbGFuZ1sndXRtYyddID0gJzE1Njg2MTM1Myc7CiRsYW5nWyd1dG1iJ10gPSAnMTU2ODYxMzUzJzsKPz4=]]></data>
	</file>
	<file>
	  <filename>/lang/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/LightBox.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IExpZ2h0Qm94IC0gQSBzaW1wbGUgd3JhcHBlciBhcm91bmQgdGhlIExpZ2h0Ym94IGphdmFzY3JpcHQgY29kZQojICAgICAgICAgQ29weXJpZ2h0IChjKSBjYWxndXkxMDAwIDxjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnPgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9za2VsZXRvbi8KIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KJGNnZXh0ZW5zaW9ucyA9IGNtc19qb2luX3BhdGgoJGdDbXMtPmNvbmZpZ1sncm9vdF9wYXRoJ10sJ21vZHVsZXMnLAoJCQkgICAgICAnQ0dFeHRlbnNpb25zJywnQ0dFeHRlbnNpb25zLm1vZHVsZS5waHAnKTsKaWYoICFpc19yZWFkYWJsZSggJGNnZXh0ZW5zaW9ucyApICkKewogIGVjaG8gJzxoMT48Zm9udCBjb2xvcj0icmVkIj5FUlJPUjogVGhlIENHRXh0ZW5zaW9ucyBtb2R1bGUgY291bGQgbm90IGJlIGZvdW5kLjwvZm9udD48L2gxPic7CiAgcmV0dXJuOwp9CnJlcXVpcmVfb25jZSgkY2dleHRlbnNpb25zKTsKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCgpjbGFzcyBMaWdodEJveCBleHRlbmRzIENHRXh0ZW5zaW9ucwp7CiAgdmFyICRfYWN0aW9uaWQ7CgogIGZ1bmN0aW9uIExpZ2h0Qm94KCkKICB7CiAgICAkdGhpcy0+X2FjdGlvbmlkID0gJyc7CiAgICBwYXJlbnQ6OkNNU01vZHVsZSgpOwogIH0KCiAgZnVuY3Rpb24gc2V0X2FjdGlvbl9pZCgkaWQpCiAgewogICAgJHRoaXMtPl9hY3Rpb25pZCA9ICRpZDsKICB9CgogIGZ1bmN0aW9uIGdldF9hY3Rpb25faWQoKQogIHsKICAgIHJldHVybiAkdGhpcy0+X2FjdGlvbmlkOwogIH0KCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0TmFtZSgpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0TmFtZSgpCiAgewogICAgcmV0dXJuICdMaWdodEJveCc7CiAgfQoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRGcmllbmRseU5hbWUoKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldEZyaWVuZGx5TmFtZSgpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKTsKICB9CgoJCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0VmVyc2lvbigpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0VmVyc2lvbigpCiAgewogICAgcmV0dXJuICcxLjAuMSc7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0SGVscCgpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0SGVscCgpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdoZWxwJyk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0QXV0aG9yKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXRBdXRob3IoKQogIHsKICAgIHJldHVybiAnY2FsZ3V5MTAwMCc7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0QXV0aG9yRW1haWwoKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldEF1dGhvckVtYWlsKCkKICB7CiAgICByZXR1cm4gJ2NhbGd1eTEwMDBAaG90bWFpbC5jb20nOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldENoYW5nZUxvZygpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0Q2hhbmdlTG9nKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2NoYW5nZWxvZycpOwogIH0KICAKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBJc1BsdWdpbk1vZHVsZSgpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gSXNQbHVnaW5Nb2R1bGUoKQogIHsKICAgIHJldHVybiB0cnVlOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEhhc0FkbWluKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBIYXNBZG1pbigpCiAgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldEFkbWluU2VjdGlvbigpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0QWRtaW5TZWN0aW9uKCkKICB7CiAgICByZXR1cm4gJ2V4dGVuc2lvbnMnOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldEFkbWluRGVzY3JpcHRpb24oKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldEFkbWluRGVzY3JpcHRpb24oKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygnbW9kZGVzY3JpcHRpb24nKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBWaXNpYmxlVG9BZG1pblVzZXIoKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIFZpc2libGVUb0FkbWluVXNlcigpCiAgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldERlcGVuZGVuY2llcygpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0RGVwZW5kZW5jaWVzKCkKICB7CiAgICByZXR1cm4gYXJyYXkoJ0NHRXh0ZW5zaW9ucyc9PicxLjgnKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBNaW5pbXVtQ01TVmVyc2lvbigpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gTWluaW11bUNNU1ZlcnNpb24oKQogIHsKICAgIHJldHVybiAiMS4yLjMiOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIFNldFBhcmFtZXRlcnMoKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIFNldFBhcmFtZXRlcnMoKQogIHsKICAgICR0aGlzLT5SZWdpc3Rlck1vZHVsZVBsdWdpbigpOwogICAgJHRoaXMtPlJlc3RyaWN0VW5rbm93blBhcmFtcygpOwoKICAgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ2ltYWdlJywnJywkdGhpcy0+TGFuZygnaGVscF9pbWFnZScpLGZhbHNlKTsKICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdpbWFnZScsQ0xFQU5fU1RSSU5HKTsKICAgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ3RodW1iJywnJywkdGhpcy0+TGFuZygnaGVscF90aHVtYicpKTsKICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCd0aHVtYicsQ0xFQU5fU1RSSU5HKTsKICAgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ25hbWUnLCcnLCR0aGlzLT5MYW5nKCdoZWxwX25hbWUnKSk7CiAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnbmFtZScsQ0xFQU5fU1RSSU5HKTsKICAgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ2FkZHRleHQnLCcnLCR0aGlzLT5MYW5nKCdoZWxwX2FkZHRleHQnKSk7CiAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnYWRkdGV4dCcsQ0xFQU5fU1RSSU5HKTsKICAgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ3RleHQnLCcnLCR0aGlzLT5MYW5nKCdoZWxwX3RleHQnKSk7CiAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgndGV4dCcsQ0xFQU5fU1RSSU5HKTsKICAgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ3RpdGxlJywnJywkdGhpcy0+TGFuZygnaGVscF90aXRsZScpKTsKICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCd0aXRsZScsQ0xFQU5fU1RSSU5HKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBJbnN0YWxsUG9zdE1lc3NhZ2UoKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEluc3RhbGxQb3N0TWVzc2FnZSgpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdwb3N0aW5zdGFsbCcpOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIFVuaW5zdGFsbFBvc3RNZXNzYWdlKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBVbmluc3RhbGxQb3N0TWVzc2FnZSgpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdwb3N0dW5pbnN0YWxsJyk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgVW5pbnN0YWxsUHJlTWVzc2FnZSgpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gVW5pbnN0YWxsUHJlTWVzc2FnZSgpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdwcmV1bmluc3RhbGwnKTsKICB9CQoKCn0gLy8gY2xhc3MKCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IExpZ2h0Qm94IC0gQSBzaW1wbGUgd3JhcHBlciBhcm91bmQgdGhlIExpZ2h0Ym94IGphdmFzY3JpcHQgY29kZQojICAgICAgICAgQ29weXJpZ2h0IChjKSBjYWxndXkxMDAwIDxjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnPgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9za2VsZXRvbi8KIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgokZm4gPSBjbXNfam9pbl9wYXRoKGRpcm5hbWUoX19GSUxFX18pLCdjc3MnLCdsaWdodGJveC5jc3MnKTsKaWYoICFmaWxlX2V4aXN0cyggJGZuICkgKSByZXR1cm47CiRjb250ZW50cyA9IEBmaWxlX2dldF9jb250ZW50cygkZm4pOwoKJHN0eWxlc2hlZXRvcHMgPSYgJGdDbXMtPkdldFN0eWxlc2hlZXRPcGVyYXRpb25zKCk7Cgokc3MgPSBuZXcgU3R5bGVzaGVldCgpOwokc3MtPm5hbWUgPSAnTGlnaHRCb3ggU2FtcGxlIENTUyc7CiRzcy0+dmFsdWUgPSAkY29udGVudHM7CiRzcy0+bWVkaWFfdHlwZSA9ICdzY3JlZW4nOwokc3R5bGVzaGVldG9wcy0+SW5zZXJ0U3R5bGVzaGVldCgkc3MpOwoKIwojIEVPRgojCj8+]]></data>
	</file>
</module>
