<?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>SnapshotMgr</name>
	<version>1.0.1</version>
    <mincmsversion>2.2</mincmsversion>
	<help><![CDATA[PGRpdiBpZD0icGFnZV90YWJzIj48ZGl2IGlkPSJzdXBwb3J0Ij5TdXBwb3J0PC9kaXY+CjxkaXYgaWQ9ImdlbmVyYWwiPkdlbmVyYWw8L2Rpdj4KPGRpdiBpZD0iaG93dG91c2UiPkhvdyBUbyBVc2U8L2Rpdj4KPGRpdiBpZD0iY29weXJpZ2h0Ij5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2Rpdj4KCgo8L2Rpdj48IS0tIEVuZFRhYkhlYWRlcnMgLS0+PGRpdiBjbGFzcz0iY2xlYXJiIj48L2Rpdj48ZGl2IGlkPSJwYWdlX2NvbnRlbnQiPjxkaXYgaWQ9InN1cHBvcnRfYyI+CiAgPGgzPlRoaXMgbW9kdWxlIGlzIGJyb3VnaHQgdG8geW91IGJ5OjwvaDM+CiAgPHA+PGEgaHJlZj0iaHR0cHM6Ly9jbXNjYW5iZXNpbXBsZS5vcmcvYnV5LXJvbGYtYS1jdXAtb2YtY29mZmVlIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj4KICAgIDxpbWcgc3JjPSIuLi9tb2R1bGVzL1NuYXBzaG90TWdyL2ltYWdlcy9jbXMtY2FuLWJlLXNpbXBsZS1vcmcucG5nIiBhbHQ9IiIgd2lkdGg9IjUwMCIgLz4KICA8L2E+PC9wPgogIDxiciAvPgogIDxwPjxiPlRpcHMsIHRyaWNrcyBhbmQgdHV0b3JpYWxzIHRvIG1ha2UgaXQgZXZlbiBlYXNpZXIgdG8gd29yayB3aXRoIENNUyBNYWRlIFNpbXBsZSZ0cmFkZTsuPC9iPjwvcD4KICA8YnIgLz4KICA8cD5Zb3UgY2FuIGZpbmQgbWUgYXQ6PC9wPgogIDx1bD4KICAgIDxsaT48YSBocmVmPSJodHRwczovL2Ntc2NhbmJlc2ltcGxlLm9yZyIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayI+Y21zY2FuYmVzaW1wbGUub3JnPC9hPiAmcmFxdW87PC9saT4KICAgIDxsaT48YSBocmVmPSJodHRwczovL3R3aXR0ZXIuY29tL2Ntc2NhbmJlc2ltcGxlIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj50d2l0dGVyLmNvbTwvYT4gJnJhcXVvOzwvbGk+CiAgPC91bD4KICAgIAogIDxoMz5TdXBwb3J0IG1lIGZvciBzdXBwb3J0aW5nIHlvdSE8L2gzPgogIDxwPkRvIHlvdSBsaWtlIHRoaXMgbW9kdWxlIGFuZCB0aGUgaGVscCB5b3UgZ2V0IGF0IENNUyBDYW4gQmUgU2ltcGxlPzxwPgogIDxwPllvdSBjYW4gZG9uYXRlIHNvbWUgbW9uZXkgdG8gYnV5IG1lIGEgdmlydHVhbCBjdXAgb2YgY29mZmVlIGFzIGEgc21hbGwgdG9rZW4gb2YgYXBwcmVjaWF0aW9uLjxwPgogIDxwPjxiPjxhIGhyZWY9Imh0dHBzOi8vY21zY2FuYmVzaW1wbGUub3JnL2J1eS1yb2xmLWEtY3VwLW9mLWNvZmZlZSIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayI+RE9OQVRFIE5PVzwvYT4gJnJhcXVvOzwvYj48L3A+CiAgCiAgPGgzPlN1cHBvcnQ8L2gzPgogIDxwPlRoaXMgbW9kdWxlIGRvZXMgbm90IGNvbnRhaW4gYW55IGNvbW1lcmNpYWwgc3VwcG9ydC4gSWYgeW91IGhhdmUgcHJvYmxlbXMsIGFzayBmb3IgaGVscCBpbiB0aGU6PC9wPgogIDx1bD4KICAgIDxsaT48YSBocmVmPSJodHRwczovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnLyIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayI+Q01TIE1hZGUgU2ltcGxlIGZvcnVtczwvYT47PC9saT4KICAgIDxsaT48YSBocmVmPSJodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZy9zdXBwb3J0L2RvY3VtZW50YXRpb24vY2hhdC8iIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsiPlNsYWNrIGNoYXQ8L2E+OzwvbGk+CiAgICA8bGk+b3Igd3JpdGUgYW4gZW1haWwgdG8gdGhlIGF1dGhvci48L2xpPgogIDwvdWw+CgoKPC9kaXY+IDwhLS0gRW5kVGFiIC0tPjxkaXYgaWQ9ImdlbmVyYWxfYyI+CiAgPGgzPlRoYW5rcyBmb3IgdXNpbmcgU25hcHNob3RNZ3IuPC9oMz4KCiAgPHA+VGhpcyBpcyBhIHV0aWxpdHkgbW9kdWxlIHRvIGFsbG93IGF1dGhvcml6ZWQgcGVyc29uZWxsIHRvIGdlbmVyYXRlIHNuYXBzaG90cyBvZiBhbGwgb2YgdGhlIGZpbGVzIGFuZCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgZGF0YWJhc2Ugb2YgYSBDTVNNUyBpbnN0YWxsYXRpb24gYW5kIGRvd25sb2FkIGl0IHRvIHlvdXIgbG9jYWwgY29tcHV0ZXIuICBUaGlzIGlzIHVzZWZ1bCB3aGVuIHVuZGVydGFraW5nIHNpdGUgdXBncmFkZXMsIG9yIHdoZW4gbW92aW5nIGEgc2l0ZSB0byBhIG5ldyBob3N0LjwvcD4KICA8YnIgLz4KICA8cD5UaGUgc25hcHNob3RzIGdlbmVyYXRlZCBhcmUgc3RvcmVkIGluIHN0YW5kYXJkIC56aXAgZmlsZXMgd2hpY2ggY2FuIGJlIHVzZWQgdG8gcmVzdG9yZSB0aGUgc2l0ZSBhdCBhbnkgdGltZSwgZWl0aGVyIG1hbnVhbGx5IG9yIHdpdGggYW4gaW50ZXJhY3RpdmUgQ0xJIGJhc2VkIHBocCBzY3JpcHQuPC9wPgogIDxiciAvPgogIDxwPjxiPk5vdGU6PC9iPiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLjwvcD4KCgo8L2Rpdj4gPCEtLSBFbmRUYWIgLS0+PGRpdiBpZD0iaG93dG91c2VfYyI+CiAgPGgzPkhvdyBkbyBJIHVzZSBpdDwvaDM+CiAgPHA+QWZ0ZXIgaW5zdGFsbGluZyB0aGUgbW9kdWxlLCB2aXNpdCB0aGUgU2l0ZSBBZG1pbiA+PiBTbmFwc2hvdE1nciBtZW51IGl0ZW0gYW5kIGNsaWNrICdDcmVhdGUgU25hcHNob3QgTm93Jy4gIFRoaXMgd2lsbCBnZW5lcmF0ZSB0aGUgc25hcHNob3QgZmlsZSBhbmQgc2VuZCBpdCB0byB5b3VyIGxvY2FsIGJyb3dzZXIuPC9wPgoKICA8aDM+Q2F1dGlvbjwvaDM+CiAgPHA+U25hcHNob3QgZmlsZXMgYXJlIHR5cGljYWx5IGxhcmdlLCBhbmQgY2FuIGNvbnN1bWUgYSBzaWduaWZpY2FudCBhbW91bnQgb2Ygc2VydmVyIHJlc291cmNlcyBpbiBnZW5lcmF0aW5nIHRoZW0sIGFuZCBkb3dubG9hZGluZyB0aGVtLiAgVGhpcyB1dGlsaXR5IG1heSBub3Qgd29yayB3ZWxsIGZvciBzaXRlcyB0aGF0IGNvbnN1bWUgbXVsdGktZ2lnYWJ5dGVzIG9mIGRpc2sgc3BhY2UsIG9yIG9uIGEgc2VydmVyIHdpdGggbGltaXRlZCByZXNvdXJjZXMuICAgVXNlIGF0IHlvdXIgb3duIHJpc2suPC9wPgogIDxwPlNuYXBzaG90IGZpbGVzIGFyZSBnZW5lcmF0ZWQgYW5kIHN0b3JlZCBvbiB0aGUgc2VydmVyIHVudGlsIHN1Y2ggdGltZSBhcyB0aGV5IGVpdGhlciBleHBpcmUgKGEgc2V0dGluZyBpbiBDTVNNUykgb3IgdGhlIHNlcnZlciBjYWNoZSBpcyBjbGVhcmVkLiAgVGhlc2UgY2FuIHRha2UgdXAgYSBzaWduaWZpY2FudCBhbW91bnQgb2Ygc3BhY2UsIHNvIHVzZSBjYXV0aW9uIHdoZW4gZ2VuZXJhdGluZyB0aGVtLjwvcD4KICA8cD48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IFRoZSBkYXRhYmFzZSBiYWNrdXAgd2lsbCBub3QgZXhwb3J0IGFkdmFuY2VkIGNvbnN0cnVjdHMgc3VjaCBhcyBzdG9yZWQgcHJvY2VkdXJlcywgdmlld3MsIG9yIHRyaWdnZXJzLiAgQnV0IGl0IHNob3VsZCB3b3JrIGZvciBtb3N0IENNU01TIHdlYnNpdGVzLjwvcD4KCiAgPGgzPlJlc3RvcmluZzwvaDM+CiAgPHA+VGhlIFNuYXBzaG90TWdyIG1vZHVsZSBwcm92aWRlcyBhbiBpbnRlcmFjdGl2ZSBDTEkgYmFzZWQgcGhwIHNjcmlwdCAoYWN0dWFsbHkgYSBiaW5hcnkgLnBoYXIgZmlsZSkgdG8gYWlkZSBpbiByZXN0b3JpbmcgdGhlIHNuYXBzaG90LiAgVGhpcyBmaWxlIGlzIGxvY2F0ZWQgaW4gdG1wL3Jlc3RvcmUucGhwIGluIHRoZSBpbmNsdWRlZCBzbmFwc2hvdCwgIGFuZCBjYW4gYWxzbyBiZSBkb3dubG9hZGVkIHNlcGFyYXRlbHkgZnJvbSB3aXRoaW4gdGhlIFNuYXBzaG90TWdyIGFkbWluIHBhbmVsLjwvcD4KICA8cD48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IFRoZSBpbnRlcmFjdGl2ZSByZXN0b3JlIHNjcmlwdCBjdXJyZW50bHkgb25seSBvcGVyYXRlcyBpZiB5b3UgYmFja2VkIHVwIGJvdGggdGhlIGZpbGVzIGFuZCB0aGUgZGF0YWJhc2UuPC9wPgogIDxwPlRvIGRvIGFuIGludGVyYWN0aXZlIHJlc3RvcmUgeW91IHdpbGwgbmVlZCBzaGVsbCBhY2NjZXNzIChpbiBhIGxpbnV4IGVudmlyb25tZW50KSB0byB0aGUgZGVzdGluYXRpb24gc2VydmVyLjwvcD4KICA8cD5JbnN0cnVjdGlvbnM6PC9wPgogIDxvbD4KICAgIDxsaT5VcGxvYWQgdGhlIHNuYXBzaG90IC56aXAgZmlsZSBpbiBpdHMgZW50aXJldHkgKGRvIG5vdCBleHBhbmQgaXQpIHRvIHRoZSBkZXN0aW5hdGlvbiBmb2xkZXIuICBVc2luZyBTU0ggaXMgdGhlIGJlc3QgbWV0aG9kLjwvbGk+CiAgICA8bGk+VXBsb2FkIHRoZSByZXN0b3JlIHNjcmlwdCAodXN1YWxseSBuYW1lZCAiU25hcHNob3RNZ3ItUmVzdG9yZS5waHAiKSBmaWxlIChJTiBCSU5BUlkgTU9ERSkgdG8gdGhlIGRlc3RpbmF0aW9uIGZvbGRlci48L2xpPgogICAgPGxpPlVzaW5nIFNTSCBvciBhbm90aGVyIG1lY2hhbmlzbSBjb25uZWN0IHRvIHlvdXIgc2VydmVycyBzaGVsbCBjb25zb2xlLjwvbGk+CiAgICA8bGk+TmF2aWdhdGUgdG8geW91ciBkZXN0aW5hdGlvbiBmb2xkZXIgKHRoZSBzYW1lIGZvbGRlciB5b3UgdXNlZCBpbiB0aGUgZmlyc3QgdHdvIHN0ZXBzKS48L2xpPgogICAgPGxpPkV4ZWN1dGU6ICBwaHAgU25hcHNob3RNZ3ItUmVzdG9yZS5waHAKICAgICAgIDxwPlRoaXMgd2lsbCBicmluZyB1cCBhbiBpbnRlcmFjdGl2ZSwgY29uc29sZSBkcml2ZW4gdXRpbGl0eSB0aGF0IHdpbGwgYWxsb3cgeW91IHRvIGVudGVyIHRoZSBuYW1lIG9mIHRoZSBzbmFwc2hvdCBmaWxlLCBhbmQgZW50ZXIgZGF0YWJhc2UgY3JlZGVudGlhbCBpbmZvcm1hdGlvbi48L3A+CiAgICAgICA8cD5UaGUgc2NyaXB0IHdpbGwgdGhlbiB2ZXJpZnkgdGhlIGRhdGFic2UgY3JlZGVudGlhbHMsIGFuZCB0aGF0IHRoZSBkYXRhYmFzZSBpcyBlbXB0eS48L3A+CiAgICAgICA8cD5Gb2xsb3dpbmcgdGhpcyB0aGUgZGF0YWJhc2UgZHVtcCB3aWxsIGJlIGltcG9ydGVkIHRvIHRoZSBuZXcgZGF0YWJhc2UsIGFuZCB0aGUgemlwIGZpbGUgZXhwYW5kZWQuPC9wPgogICAgICAgPHA+VGhpcyBzY3JpcHQgd2lsbCB0aGVuIGdlbmVyYXRlIGEgbmV3IGNvbmZpZy5waHAsIGdlbmVyYXRlIHRoZSBzcGVjaWFsIENNU01TIHRlbXBvcmFyeSBkaXJlY3RvcmllcywgYW5kIHBlcmZvcm0gY2xlYW51cC48L3A+CiAgICAgICA8cD5UaGUgdXRpbGl0eSB3aWxsIGF1dG9tYXRpY2FsbHkgZGVsZXRlIGl0c2VsZiwgYW5kIHJlbW92ZSB0aGUgemlwIGZpbGUgdXBvbiBzdWNjZXNzZnVsIGNvbXBsZXRlaW9uLjwvcD4KICAgIDwvbGk+CiAgPC9vbD4KCiAgPGgzPkFmdGVyIFJlc3RvcmF0aW9uPC9oMz4KICA8cD5BZnRlciByZXN0b3JhdGlvbiwgcGFydGljdWxhcmx5IGlmIHlvdSBhcmUgcmVzdG9yaW5nIHRvIGEgZGlmZmVyZW50IGhvc3QgdGhlbiB5b3UgbWF5IG5lZWQgdG8gbWFrZSBhZGp1c3RtZW50cyB0byBzb21lIGZpbGVzLiAgSW5jbHVkaW5nOjwvcD4KICA8dWw+CiAgICA8bGk+QWRqdXN0aW5nIHRoZSAuaHRhY2Nlc3MgZmlsZSBmb3IgdGhlIHJld3JpdGVfYmFzZSBhbmQgYW55IG90aGVyIHJlZGlyZWN0IHJ1bGVzLjwvbGk+CiAgICA8bGk+QWRqdXN0aW5nIHBhdGhzIGluIHRoZSBjb25maWcucGhwIGZpbGUuPC9saT4KICAgIDxsaT5BZGp1c3RpbmcgcGVybWlzc2lvbnMKICAgICAgIDxwPkRlcGVuZGluZyB1cG9uIHRoZSBkZXN0aW5hdGlvbiBzZXJ2ZXIgZW52aXJvbm1lbnQsIGFuZCB0aGUgYWNjb3VudHMgdGhhdCB5b3UgYXJlIHVzaW5nIHRvIGNvbm5lY3QgdmlhIHNoZWxsLCBhbmQgZm9yIHRoZSB3ZWIgc2VydmVyLCB5b3UgbWF5IG5lZWQgdG8gYWRqdXN0IHBlcm1pc3Npb25zIG9mIHNvbWUgZmlsZXMgb3IgZGlyZWN0b3JpZXMgZm9yIENNU01TIHRvIHdvcmsgcHJvcGVybHkuPC9wPgogICAgICAgPHA+SW5mb3JtYXRpb24gYWJvdXQgcHJvcGVyIHBlcm1pc3Npb25zIGZvciBDTVNNUyBpcyB3ZWxsIGRvY3VtZW50ZWQgb24gdGhlIENNU01TIGRvY3VtZW50YXRpb24gc2l0ZSBhdCA8YSBocmVmPSJodHRwOi8vZG9jcy5jbXNtYWRlc2ltcGxlLm9yZyI+ZG9jcy5jbXNtYWRlc2ltcGxlLm9yZzwvYT4KICAgIDwvbGk+CiAgPC91bD4KCiAgPGgzPlNwZWNpYWwgRmlsZXM8L2gzPgogIDxwPklmIHBlcmZvcm1pbmcgYSBtYW51YWwgcmVzdG9yYXRpb24sIHRoZXJlIGFyZSBzb21lIHNwZWNpYWwgZmlsZXMgaW4gdGhlIGFyY2hpdmUgdGhhdCB5b3Ugd2lsbCBuZWVkIHRvIGRlbGV0ZSBhZnRlciBtYW51YWxseSBleHBhbmRpbmcgdGhlIC56aXAgZmlsZTo8L3A+CiAgPHVsPgogICAgPGxpPnRtcC9fX215c3FsZHVtcC5zcWwgLSBUaGlzIGlzIHRoZSBkdW1wIG9mIHRoZSBkYXRhYmFzZSwgaXQgaXMgaW1wb3J0YW50IHRoYXQgdGhpcyBmaWxlIGJlIGRlbGV0ZWQgb24gbGl2ZSBzaXRlcy48L2xpPgogICAgPGxpPnRtcC8uc25hcHNob3RtZ3IgLSBUaGlzIGlzIGEgbWFnaWMgZmlsZSB1c2VkIGJ5IHRoZSBpbnRlcmFjdGl2ZSByZXN0b3JhdGlvbiBzY3JpcHQuIEl0IHNob3VsZCBiZSBkZWxldGVkIG9uIGxpdmUgc2l0ZXMuPC9saT4KICA8L3VsPgoKICA8aDM+UmVxdWlyZW1lbnRzPC9oMz4KICA8cD5UaGlzIG1vZHVsZSBoYXMgdGhlc2Ugc3BlY2lhbCByZXF1aXJlbWVudHM6PC9wPgogIDx1bD4KICAgIDxsaT5WYWxpZCwgYW5kIHdyaXRhYmxlIHN5c3RlbSB0ZW1wb3JhcnkgZGlyZWN0b3J5LgogICAgICAgPHA+VGhlIHBocCBmdW5jdGlvbiBzeXNfZ2V0X3RlbXBfZGlyKCkgbXVzdCByZXR1cm4gYSB2YWxpZCwgd3JpdGFibGUgZGlyZWN0b3J5LjwvcD4KICAgIDwvbGk+CiAgICA8bGk+U3VwcG9ydCBmb3IgdGhlIFBIUCBaaXBBcmNoaXZlIGNsYXNzLjwvbGk+CiAgICA8bGk+VGhlIGFiaWxpdHkgdG8gYWRqdXN0IHRoZSBwaHAgc2NyaXB0IHRpbWUgbGltaXQuCiAgICAgIDxwPnRoZSBzZXRfdGltZV9saW1pdCg5OTk5KSBtZXRob2QgbXVzdCB3b3JrIHByb3Blcmx5LjwvcD4KICAgIDwvbGk+CiAgPC91bD4KCgo8L2Rpdj4gPCEtLSBFbmRUYWIgLS0+PGRpdiBpZD0iY29weXJpZ2h0X2MiPgogIDxiciAvPgogIDxwPlRoaXMgbW9kdWxlIGlzIGEgZm9yayBvZiB0aGUgQ0dTbmFwc2hvdCBtb2R1bGUuPGJyIC8+CiAgICBDb3B5cmlnaHQgJmNvcHk7IDIwMTUgLSAyMDIxLCBSb2JlcnQgQ2FtcGJlbGwgW2NhbGd1eTEwMDAuY29tXS48L3A+CgogIDxoMz5TbmFwc2hvdE1ncjwvaDM+CiAgPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDIxIGFuZCBiZXlvbmQsIFJvbGYgVGphc3NlbnMgW2luZm8gYXQgY21zY2FuYmVzaW1wbGUgZG90IG9yZ10uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4KICA8YnIgLz4KICA8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUgPGI+PGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj5HTlUgUHVibGljIExpY2Vuc2UgdjM8L2E+PC9iPi48L3A+CiAgPHA+PGI+SG93ZXZlcjwvYj4sIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlJnRyYWRlOy48YnIgLz4KICBZb3UgbWF5IG9ubHkgdXNlIHRoaXMgc29mdHdhcmUgd2hlbiB0aGVyZSBpcyBhIGNsZWFyIGFuZCBvYnZpb3VzIGluZGljYXRpb24gaW4gdGhlIGFkbWluIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCA8Yj5DTVMgTWFkZSBTaW1wbGUmdHJhZGU7PC9iPi48L3A+Cgo8L2Rpdj4gPCEtLSBFbmRUYWIgLS0+PC9kaXY+IDwhLS0gRW5kVGFiQ29udGVudCAtLT4KCjxzY3JpcHQ+CiAgICAkKCJpbWciKS5lcnJvcihmdW5jdGlvbigpIHsgCiAgICAkKHRoaXMpLmF0dHIoJ3NyYycsICcuLi9hc3NldHMvbW9kdWxlcy9TbmFwc2hvdE1nci9pbWFnZXMvY21zLWNhbi1iZS1zaW1wbGUtb3JnLnBuZycpOwogIH0gKTsKPC9zY3JpcHQ+PGgzPkRlcGVuZGVuY2llczwvaDM+PHVsPjxsaT5DTVNNU0V4dCA9Jmd0OyAxLjA8L2xpPjwvdWw+]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBSb2xmIFRqYXNzZW5zICZsdDtpbmZvIFthdF0gY21zY2FuYmVzaW1wbGUgW2RvdF0gb3JnJmd0OzxiciAvPjxiciAvPlZlcnNpb246IDEuMC4xPGJyIC8+PGJyIC8+Q2hhbmdlIEhpc3Rvcnk6PGJyIC8+PHVsPgoJPGxpPjxiPlZlcnNpb24gMS4wLjE8L2I+ICgwOS0wMy0yMDIxKTxici8gPgogICAJLSBNaW5vciBpbXByb3ZlbWVudCB0byBhcmNoaXZlIGZpbGUgbmFtZS48L2xpPgogICA8bGk+PGI+VmVyc2lvbiAxLjA8L2I+ICgwMy0wMy0yMDIxKTxici8gPgogICAJLSBJbml0aWFsIFJlbGVhc2UuPC9saT4KPC91bD48YnIgLz4=]]></about>
	<description><![CDATA[A module to create snapshots of the CMSMS filesystem and database. Useful for quick backups or site moves.]]></description>
	<requires>
	  <requiredname>CMSMSExt</requiredname>
	  <requiredversion>1.0</requiredversion>
	</requires>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNuYXBzaG90TWdyCiMgQXV0aG9yOiBSb2xmIFRqYXNzZW5zIChjbXNjYW5iZXNpbXBsZS5vcmcpCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4KIyAoYykgMjAwNCAtIDIwMTEgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIChjKSAyMDExIC0gMjAxOCBieSBUaGUgQ01TIE1hZGUgU2ltcGxlIERldmVsb3BtZW50IFRlYW0KIyAoYykgMjAxOCBhbmQgYmV5b25kIGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRm91bmRhdGlvbgojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9zbmFwc2hvdG1ncgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGb3JrIGZyb20gQ0dTbmFwc2hvdCBtb2R1bGUgYnkgUm9iZXJ0IENhbXBiZWxsIChjYWxndXkxMDAwLmNvbSkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmlmICggIWZ1bmN0aW9uX2V4aXN0cygnY21zbXMnKSApIGV4aXQ7CgppZiggISR0aGlzLT5WaXNpYmxlVG9BZG1pblVzZXIoKSApIHJldHVybjsKCnRyeSB7CiAgICBpZiggaXNzZXQoJHBhcmFtc1snc25hcHNob3Rub3cnXSkgKSB7CiAgICAgICAgJGFkZHIgPSBudWxsOwogICAgICAgICRtYWlsZXIgPSBudWxsOwogICAgICAgICRkaXNwb3NlID0gXHh0X3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsJ2Rpc3Bvc2UnLCdkb3dubG9hZCcpOwogICAgICAgICR3aGF0ID0gXHh0X3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsJ3ByZWZfd2hhdCcsJ2JvdGgnKTsKICAgICAgICAkZXhjbHVkZXMgPSBceHRfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywncHJlZl9leGNsdWRlcycpOwogICAgICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdwcmVmX2Rpc3Bvc2UnLCRkaXNwb3NlKTsKICAgICAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgncHJlZl93aGF0Jywkd2hhdCk7CiAgICAgICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ3ByZWZfZXhjbHVkZXMnLCRleGNsdWRlcyk7CgogICAgICAgIC8vIHZhbGlkYXRlIGRpc3Bvc2l0aW9ucwogICAgICAgIHN3aXRjaCggJGRpc3Bvc2UgKSB7CiAgICAgICAgY2FzZSAnZW1haWwxJzoKICAgICAgICAgICAgJGFkZHIgPSBceHRfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywnZW1haWwxJyk7CiAgICAgICAgICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdwcmVmX2VtYWlsMScsJGFkZHIpOwogICAgICAgICAgICBpZiggIWlzX2VtYWlsKCRhZGRyKSApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigkdGhpcy0+TGFuZygnZXJyX2ludmFsaWRfZW1haWwnKSk7CgogICAgICAgICAgICAkbWFpbGVyID0gbmV3IFxjbXNfbWFpbGVyOwogICAgICAgICAgICBpZiggISRtYWlsZXIgKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJHRoaXMtPkxhbmcoJ2Vycl9jbXNtYWlsZXInKSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgLy8gdmFsaWRhdGVkLCBub3cgY3JlYXRlIHRoZSBzbmFwc2hvdAogICAgICAgIEBzZXRfdGltZV9saW1pdCg5OTk5KTsKCiAgICAgICAgJHRoaXMtPlNlbmRFdmVudCgnQmVmb3JlQ3JlYXRlU25hcHNob3QnLFsncHJlZl9kaXNwb3NlJz0+JGRpc3Bvc2UsJ3ByZWZfd2hhdCc9PiR3aGF0LCdleGNsdWRlcyc9PiYkZXhjbHVkZXMsJ2VtYWlsJz0+JGFkZHJdKTsKICAgICAgICAkbG9nZ2VyID0gbmV3IFxTbmFwc2hvdE1nclxmaWxlX2xvZ2dlcihcU25hcHNob3RNZ3JcZmlsZV9sb2dnZXI6OkxWTF9ERUJVRyk7CiAgICAgICAgJGNyZWF0b3IgPSBuZXcgXFNuYXBzaG90TWdyXHNuYXBzaG90X2NyZWF0b3I7CiAgICAgICAgJGNyZWF0b3ItPmV4Y2x1ZGVzID0gJGV4Y2x1ZGVzOwogICAgICAgIHN3aXRjaCggJHdoYXQgKSB7CiAgICAgICAgY2FzZSAnYm90aCc6CiAgICAgICAgICAgICRjcmVhdG9yLT5teXNxbGR1bXAgPSBUUlVFOwogICAgICAgICAgICAkY3JlYXRvci0+ZmlsZXMgPSBUUlVFOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdmaWxlcyc6CiAgICAgICAgICAgICRjcmVhdG9yLT5teXNxbGR1bXAgPSBGQUxTRTsKICAgICAgICAgICAgJGNyZWF0b3ItPmZpbGVzID0gVFJVRTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnZGInOgogICAgICAgICAgICAkY3JlYXRvci0+bXlzcWxkdW1wID0gVFJVRTsKICAgICAgICAgICAgJGNyZWF0b3ItPmZpbGVzID0gRkFMU0U7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICAkY3JlYXRvci0+c2V0X2xvZ2dlcigkbG9nZ2VyKTsKICAgICAgICAkc25hcHNob3QgPSAkY3JlYXRvci0+ZXhlY3V0ZSgpOwoKICAgICAgICAvLyBub3cgd2UgaGF2ZSB0aGUgZG93bmxvYWQsIHdoYXQgZG8gd2Ugd2FudCB0byBkbyB3aXRoIGl0CiAgICAgICAgJGNvbmZpZyA9IFxjbXNfY29uZmlnOjpnZXRfaW5zdGFuY2UoKTsKICAgICAgICBzd2l0Y2goICRkaXNwb3NlICkgewogICAgICAgIGNhc2UgJ2VtYWlsMSc6CiAgICAgICAgICAgICRjb250ZW50b3BzID0gXENvbnRlbnRPcGVyYXRpb25zOjpnZXRfaW5zdGFuY2UoKTsKICAgICAgICAgICAgJGNvZGUgPSBtZDUoX19ESVJfXy4kdGhpcy0+R2V0TmFtZSgpLmJhc2VuYW1lKCRzbmFwc2hvdCkpOwogICAgICAgICAgICAkc25hcHNob3RfdXJsID0gJHRoaXMtPmNyZWF0ZV91cmwoJGlkLCdnZXRfc25hcHNob3QnLCRjb250ZW50b3BzLT5HZXREZWZhdWx0Q29udGVudCgpLGFycmF5KCdzbmFwc2hvdCc9PiRjb2RlKSk7CgogICAgICAgICAgICAkYXV0b19jbGVhcl9jYWNoZV9hZ2UgPSAoaW50KSBcY21zX3NpdGVwcmVmczo6Z2V0KCdhdXRvX2NsZWFyX2NhY2hlX2FnZScpOwogICAgICAgICAgICAkYXV0b19jbGVhcl9jYWNoZV9hZ2UgPSBtYXgoMCwkYXV0b19jbGVhcl9jYWNoZV9hZ2UpOwogICAgICAgICAgICAkdHBsID0gJHRoaXMtPkNyZWF0ZVNtYXJ0eVRlbXBsYXRlKCdkaXNwb3NlX2VtYWlsMS50cGwnKTsKICAgICAgICAgICAgJHRwbC0+YXNzaWduKCdhdXRvX2NsZWFyX2NhY2hlX2FnZScsJGF1dG9fY2xlYXJfY2FjaGVfYWdlKTsKICAgICAgICAgICAgJHRwbC0+YXNzaWduKCdzbmFwc2hvdF91cmwnLCRzbmFwc2hvdF91cmwpOwogICAgICAgICAgICAkYm9keSA9ICR0cGwtPmZldGNoKCk7CiAgICAgICAgICAgICRzdWJqZWN0ID0gJ1NuYXBzaG90IG9mICcgLiBcY21zX3NpdGVwcmVmczo6Z2V0KCdzaXRlbmFtZScpIC4gJywgY3JlYXRlZCBvbiAnIC4gc3RyZnRpbWUoJyVZLSVkLSVtICVILiVNJyk7CgogICAgICAgICAgICAkbWFpbGVyLT5yZXNldCgpOwogICAgICAgICAgICAkbWFpbGVyLT5TZXRQcmlvcml0eSgxKTsKICAgICAgICAgICAgJG1haWxlci0+SXNIVE1MKFRSVUUpOwogICAgICAgICAgICAkbWFpbGVyLT5BZGRBZGRyZXNzKCRhZGRyKTsKICAgICAgICAgICAgJG1haWxlci0+U2V0U3ViamVjdCgkc3ViamVjdCk7CiAgICAgICAgICAgICRtYWlsZXItPlNldEJvZHkoJGJvZHkpOwogICAgICAgICAgICAkbWFpbGVyLT5TZW5kKCk7CiAgICAgICAgICAgIGF1ZGl0KCcnLCR0aGlzLT5HZXROYW1lKCksJ0NyZWF0ZWQgYSBzbmFwc2hvdCwgYW5kIGFuIGVtYWlsIGxpbmsgdG8gaXQnKTsKCiAgICAgICAgICAgIGVjaG8gJHRoaXMtPkxhbmcoJ21zZ19lbWFpbF9zZW50Jyk7CiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgY2FzZSAnZG93bmxvYWQnOgogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICRmbiA9ICRjb25maWdbJ3Jvb3RfdXJsJ107CiAgICAgICAgICAgIGlmKCBzdGFydHN3aXRoKCRmbiwnaHR0cHM6JykgKSAkZm4gPSBzdWJzdHIoJGZuLDYpOwogICAgICAgICAgICBpZiggc3RhcnRzd2l0aCgkZm4sJ2h0dHA6JykgKSAkZm4gPSBzdWJzdHIoJGZuLDUpOwogICAgICAgICAgICAkZm4gPSB0cmltKCRmbiwnLycpOwogICAgICAgICAgICAkZm4gPSBzdHJfcmVwbGFjZSgnLycsJy0nLCRmbik7CiAgICAgICAgICAgICRmbiA9IG11bmdlX3N0cmluZ190b191cmwoJGZuKTsKICAgICAgICAgICAgJHJlYWRhYmxlX25hbWUgPSAnU25hcHNob3RNZ3ItJyAuICRmbiAuICctJyAuIHN0cmZ0aW1lKCclWS0lZC0lbS0lSC4lTScpIC4gJy56aXAnOwoKICAgICAgICAgICAgLy8gYWRkIG1lbnRpb24gdG8gYWRtaW4gbG9nCiAgICAgICAgICAgIGF1ZGl0KCcnLCR0aGlzLT5HZXROYW1lKCksJ0Rvd25sb2FkZWQgJy4kcmVhZGFibGVfbmFtZSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBceHRfdXRpbHM6OnNlbmRfZmlsZV9hbmRfZXhpdCgkc25hcHNob3QsMTAwKjEwMjQsJycsJHJlYWRhYmxlX25hbWUpOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9Cn0KY2F0Y2goIFxFeGNlcHRpb24gJGUgKSB7CiAgICBlY2hvICR0aGlzLT5TaG93RXJyb3JzKCRlLT5HZXRNZXNzYWdlKCkpOwp9Cgokd2hhdGxpc3QgPSBhcnJheSgnYm90aCc9PiR0aGlzLT5MYW5nKCd3aGF0X2JvdGgnKSwnZmlsZXMnPT4kdGhpcy0+TGFuZygnd2hhdF9maWxlcycpLCdkYic9PiR0aGlzLT5MYW5nKCd3aGF0X2RiJykpOwokZGlzcG9zZSA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdwcmVmX2Rpc3Bvc2UnLCdkb3dubG9hZCcpOwoKJHRwbCA9ICR0aGlzLT5DcmVhdGVTbWFydHlUZW1wbGF0ZSgnZGVmYXVsdGFkbWluLnRwbCcpOwogICAgJHRwbC0+YXNzaWduKCdwcmVmX2Rpc3Bvc2UnLCRkaXNwb3NlKTsKICAgICR0cGwtPmFzc2lnbignd2hhdGxpc3QnLCR3aGF0bGlzdCk7CiAgICAkdHBsLT5hc3NpZ24oJ3ByZWZfd2hhdCcsJHRoaXMtPkdldFByZWZlcmVuY2UoJ3ByZWZfd2hhdCcpKTsKICAgICR0cGwtPmFzc2lnbigncHJlZl9leGNsdWRlcycsJHRoaXMtPkdldFByZWZlcmVuY2UoJ3ByZWZfZXhjbHVkZXMnKSk7CiAgICAkdHBsLT5hc3NpZ24oJ2FkbWluX2VtYWlsJywkdGhpcy0+R2V0UHJlZmVyZW5jZSgncHJlZl9lbWFpbDEnKSk7CiAgICAkdHBsLT5hc3NpZ24oJ2Rvd25sb2FkJywkdGhpcy0+R2V0UHJlZmVyZW5jZSgncHJlZl9kb3dubG9hZCcpKTsKICAgICRyZXN0b3JlX3NjcmlwdCA9ICR0aGlzLT5HZXRNb2R1bGVQYXRoKCkgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJ3BoYXInIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICdTbmFwc2hvdE1nci1SZXN0b3JlLnBocCc7CiAgICBpZiggaXNfZmlsZSgkcmVzdG9yZV9zY3JpcHQpICkgewogICAgICAgICRyZXN0b3JlX3VybCA9ICR0aGlzLT5jcmVhdGVfdXJsKCRpZCwnZ2V0X3Jlc3RvcmVfc2NyaXB0Jyk7CiAgICAgICAgJHRwbC0+YXNzaWduKCdyZXN0b3JlX3VybCcsJHJlc3RvcmVfdXJsKTsKICAgIH0KJHRwbC0+ZGlzcGxheSgpOwoKIwojIEVPRgoj]]></data>
	</file>
	<file>
	  <filename>/action.get_restore_script.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNuYXBzaG90TWdyCiMgQXV0aG9yOiBSb2xmIFRqYXNzZW5zIChjbXNjYW5iZXNpbXBsZS5vcmcpCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4KIyAoYykgMjAwNCAtIDIwMTEgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIChjKSAyMDExIC0gMjAxOCBieSBUaGUgQ01TIE1hZGUgU2ltcGxlIERldmVsb3BtZW50IFRlYW0KIyAoYykgMjAxOCBhbmQgYmV5b25kIGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRm91bmRhdGlvbgojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9zbmFwc2hvdG1ncgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGb3JrIGZyb20gQ0dTbmFwc2hvdCBtb2R1bGUgYnkgUm9iZXJ0IENhbXBiZWxsIChjYWxndXkxMDAwLmNvbSkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmlmICggIWZ1bmN0aW9uX2V4aXN0cygnY21zbXMnKSApIGV4aXQ7CgppZiggISR0aGlzLT5WaXNpYmxldG9BZG1pblVzZXIoKSApIGV4aXQ7CgokcmVzdG9yZV9zY3JpcHQgPSAkdGhpcy0+R2V0TW9kdWxlUGF0aCgpIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICdwaGFyJyAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAnU25hcHNob3RNZ3ItUmVzdG9yZS5waHAnOwppZiggIWlzX2ZpbGUoJHJlc3RvcmVfc2NyaXB0KSApIHRocm93IG5ldyBcQ21zRXJyb3I0MDRFeGNlcHRpb24oJ0NvdWxkIG5vdCBmaW5kIHJlc3RvcmUgc2NyaXB0IGluIGZpbGVzeXN0ZW0nKTsKClx4dF91dGlsczo6c2VuZF9maWxlX2FuZF9leGl0KCRyZXN0b3JlX3NjcmlwdCk7CgojCiMgRU9GCiM=]]></data>
	</file>
	<file>
	  <filename>/action.get_snapshot.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNuYXBzaG90TWdyCiMgQXV0aG9yOiBSb2xmIFRqYXNzZW5zIChjbXNjYW5iZXNpbXBsZS5vcmcpCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4KIyAoYykgMjAwNCAtIDIwMTEgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIChjKSAyMDExIC0gMjAxOCBieSBUaGUgQ01TIE1hZGUgU2ltcGxlIERldmVsb3BtZW50IFRlYW0KIyAoYykgMjAxOCBhbmQgYmV5b25kIGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRm91bmRhdGlvbgojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9zbmFwc2hvdG1ncgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGb3JrIGZyb20gQ0dTbmFwc2hvdCBtb2R1bGUgYnkgUm9iZXJ0IENhbXBiZWxsIChjYWxndXkxMDAwLmNvbSkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmlmICggIWZ1bmN0aW9uX2V4aXN0cygnY21zbXMnKSApIGV4aXQ7Cgp0cnkgewogICAgJGNvZGUgPSBceHRfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywnc25hcHNob3QnKTsKICAgIGlmKCAhJGNvZGUgKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJHRoaXMtPkxhbmcoJ2Vycl9taXNzaW5ncGFyYW0nKSk7CgogICAgLy8gZmluZCBhbGwgb2YgdGhlIHNuYXBzaG90IGZpbGVzIGluIHRoZSBUTVBfQ0FDSEUgZGlyZWN0b3J5CiAgICAvLyBidWlsZCBhIG1hcCBvZiB0aGVpciBjb2RlcwogICAgJGZpbGVzID0gZ2xvYihUTVBfQ0FDSEVfTE9DQVRJT04uJy9fc3AqLnppcCcpOwogICAgaWYoICFjb3VudCgkZmlsZXMpICkgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCR0aGlzLT5MYW5nKCdlcnJfbm9zbmFwc2hvdHMnKSk7CgogICAgJG1hcCA9IGFycmF5KCk7CiAgICBmb3JlYWNoKCAkZmlsZXMgYXMgJG9uZSApIHsKICAgICAgICAkYm4gPSBiYXNlbmFtZSgkb25lKTsKICAgICAgICAkdF9jb2RlID0gbWQ1KF9fRElSX18uJHRoaXMtPkdldE5hbWUoKS4kYm4pOwogICAgICAgICRtYXBbJHRfY29kZV0gPSAkb25lOwogICAgfQogICAgaWYoICFpc3NldCgkbWFwWyRjb2RlXSkgKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJHRoaXMtPkxhbmcoJ2Vycl9zbmFwc2hvdG5vdGZvdW5kJykpOwoKICAgICRvbmUgPSAkbWFwWyRjb2RlXTsKICAgICRjdGltZSA9IGZpbGVjdGltZSgkb25lKTsKICAgICRyZWFkYWJsZV9uYW1lID0gJ1NuYXBzaG90TWdyLScgLiBcY21zX3NpdGVwcmVmczo6Z2V0KCdzaXRlbmFtZScpIC4gJy0nIC4gc3RyZnRpbWUoJyVZLSVkLSVtLSVILiVNJywkY3RpbWUpIC4gJy56aXAnOwogICAgXHh0X3V0aWxzOjpzZW5kX2ZpbGVfYW5kX2V4aXQoJG9uZSwxMDAqMTAyNCwnJywkcmVhZGFibGVfbmFtZSk7Cn0KCmNhdGNoKCBcRXhjZXB0aW9uICRlICkgewogICAgZWNobyAkdGhpcy0+RGlzcGxheUVycm9yTWVzc2FnZSgkZS0+R2V0TWVzc2FnZSgpKTsKfQoKIwojIEVPRgoj]]></data>
	</file>
	<file>
	  <filename>/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/images/cms-can-be-simple-org.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAtEAAABHCAYAAADBaRtwAAAACXBIWXMAAAsTAAALEwEAmpwYAAA4JWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMwNjcgNzkuMTU3NzQ3LCAyMDE1LzAzLzMwLTIzOjQwOjQyICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNSAoV2luZG93cyk8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPHhtcDpDcmVhdGVEYXRlPjIwMTctMDUtMDdUMTM6NDU6NDErMDI6MDA8L3htcDpDcmVhdGVEYXRlPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNy0wNS0wN1QxNDo1NTowOCswMjowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTctMDUtMDdUMTQ6NTU6MDgrMDI6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvcG5nPC9kYzpmb3JtYXQ+CiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6NmM4NTczM2UtZTJiMS01MDQ1LTgxNjktOTZhYzZkMjY3N2YwPC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD54bXAuZGlkOjZjODU3MzNlLWUyYjEtNTA0NS04MTY5LTk2YWM2ZDI2NzdmMDwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjZjODU3MzNlLWUyYjEtNTA0NS04MTY5LTk2YWM2ZDI2NzdmMDwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SGlzdG9yeT4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmNyZWF0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDo2Yzg1NzMzZS1lMmIxLTUwNDUtODE2OS05NmFjNmQyNjc3ZjA8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTctMDUtMDdUMTM6NDU6NDErMDI6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WFJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjcyMDAwMC8xMDAwMDwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT42NTUzNTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NzIxPC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjcxPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz5H6g/qAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAABkqSURBVHja7J1BbttI04bfGNl/HGhLYGiA+1FOEPoEpk9g6QCSzRPYPoFk6QCST2DlBFZOEM5egDmAtsTwP8H8C5YUxpGtarKbbJH1AEYyE5oSm9XVb3VXV3+CQUbjqA/Aof/06AcA1vRnNp9NYgjWUHhnDoA+/e8YQNaG95W6/lGb7G03YpOC0B761M/7H1wTA0joT0EQBBafNIovD0AA4Cs5q77Cr8f08x3Aaj6bZPJqahHMDr2zS8V3ti68K2sHndT1tdlkb7sRmxSE0xHNIfX7oMTvrwF8oz91+LdA4XNN3PcQWQMBQ1Dx91Xax1H09yrE1H4m8fBzgucjEvqpG+73qxMt74V0A+fZ4t52k1US0STCBgCuNRvsGsDTfDZZlvhO9wDuSn7uxXw2WZt+06Nx9FrSANfz2eRCU8BzRwONU/F2CYBHAEuV4Cd1/XsA6G0395qFs1Gb7G03yzq9ArXTMXs+7203iSXf5bc+1dtu1g1+n3Vvu7louA1U7SwG8Lfu4C11/f9sGOl6280nA7fd9fsbzYN7TP5tVWGA5rb7J0P3fc9vn9csul4r3kOlfQIAL4afaSdgv5OdrDWKa66feaBr68a0Hyyl30oEolV8/EVvu1mflRVho3G0oE4xMRDxBQAWo3H0OhpHgxpfwnUNArrfVAQ3GkdO4b0NNAjonXOcAHilAKYRUtf3Utc3bpOp67+mrj+o6ZkcEgXHGMBeJhBU7ewWwALAv6nrP6euH0izfMhtod/r9q19ehevDYkVk6I2rPHzblpodx711zsAzwD+pT8H0iW7g5KIJhF2r1mEHTPSnZiuYyAJaXa9dc5kNI7CwnszgQPgbjSOflCgUJd4dihyrNUmSUybtsmQ+Tw2D1D93aqDUNoGXlLXf6FlRuFXgfuDxLPpfu+QWPoBc2kCdXNdsx13pb8uDI+1wimKaBKxP9DMFL4H4GU0jkzPajk1dPbanQnN5j/XMNDsB7Y6VhBIxDZqk6nrm7RJ7nM5dc2Olw0cRQBWJgDwgzbGCrmfeWlA0O6EexsEEjdI1/E5Xev/Honpl5raWLBZRNPs84sFHeF2NI5eDM8WXxoUs2HdHYrE7KIJ4WRYQFtjkzRL6Gh+vkDx2WyejXYgaR262vFFhPReQDcpTr62pC3rCAauO2yrAfJZaQl+uyqiKYf2zjKjNCkKQ9p4d/LOhFYPmhDQMfIkf1MCugs2qfp8fctzZ8PU9UNxudqEtNPR5/csENBLAMOWtOdNDe8rlD4rM9KdFNEkoHVFqhn0lQwKDacLaO/0NHtetzMpI+xiGiQeCj9ThfeWIa9ykhkU0FbapK6UikJpPquDtBJMOiz+dA/Ki44++6KkGFmTLxtSgH8B4Ir+36qjAnonck0G3wPprvs++yzN0D4+GxLQGTmm78jLsiXviMoA+bJYCP7SdQYgKlP+TlGMTG0X5kdE+z3U0gGWAB4OvavCPT2auRi8M5DZLKB/sclDJeFI4JW2SY3l78rOsg9S13+oo9xdhQH7DkDUcr+aKQRmHsqlJIWp6wemygdaykBR8GWg8pt4v5buqiByQrJPryMCujjerQ3e23ZUnr1KwBGQDS8htFtEkwArI1YSEmJHjYSE1op+IsoXvjlipAmAqxoO+OiPxlFf8+fU7UyuFd4Zq01JYEejcfSAfEYoPCCgjbwbyoEubZMcgUs1efc2SekHLJvUdcohCfkqAdcAdpfiuk1d/6nlp0LGqrWpydYuFW3chPh50F27XSMqqQcx8plmbkCZkbhZIi+Zd/dmoqCtAnrnMyLoP0AkwGlsKFRNPdz56MsSvvquYyK6qTrWtXF2QEAHKDcT9jCfTc7LzhDPZ5MVHSTyXmdeA/hS4wl52kRv4TTHWlCoRV1K+M5nk2w+m1y9GVSGBgV0aZvsbTfnZWeIe9vNisTQhzapWRAOUC137hTqsXY1FeGYrQ2RH4DBtaegQ03UB39zVkzCKCn5WVMAXwrvoc0Cuuh3rB1DLWMXcF0p9ldAcsTbLaIpxUJ1gEtI3GqJNuazyZQcYFG0TOezic40Ac59dBp63Z2G+3nRR+kbjHe1G1yG89lkZUhAl7ZJXTNqve3moE32tpsLA8eBVxXBtpe7A/JNkLfifg/aWnLA1t4dkDuUY64SMOiYVd29h4cTF9Bc/647+HaYwjw+cbtMKOBSGf++QminiEa+jOUp/H4MA7PDdL/dQDKczya6cyg5Bu9RikldwkinCP1TQQRXfVdLw/nppWxSd7oA3W9vk73tRnteL4lfj/F8dQ+IJriTTYbv2lqGPJeXFZB0pFkchf6/1vSZGU5/KfqJG5BptiVuIP/YEvscKgRuXemz3RLRNAutmnNmbBPZfDaJ57PJH4YE2j9MR1u5ZjQztSIB8LfG5+OIzrXtxqlw7PUvNmlgdngvpHvbzR8aNxC+hbP8ecVx0g2Xu+PYlgNJ6zjp/lkzX6XdSsP1VzqDb44vy9Ce/GCVZxER3UYRjXzGz1EwmKEpAV1jhH4MHceAc5zJo5jiQZRt0pSAriFg6OP4kvWSlvs5zrrJ2Wju8ndoeW3rJomlCUrxf9IEpceXEHpqGfeZQnHZsnb+xrzOEZNsp4hWGXQfatzgZ4oVji+/OKiezzyw1Jl4J/COlGzyxCs+cJ71m0oA2NRR2yT0H5iXLySto9JAm0lT/YLkm/5OAv7qUKjh87h+WyaPhHaIaDq4hOu017T576QplNg7RukdxsxjvlcNzeh7Bk9mrAzlB7Ntkjb/nSQkIo8FW0lvu1mRSF2Dt2GoydnoKfM7eshXHIRf6TMDlrgj7ZEwrwsgM32HeGJeV3ljM1OIr1G+eoog2CWioZb7+9Ci5+c4lqCC2LzU9B1U+c68bmLxu+mSTd6WsBOO3QyamuWltBpuWscdpbMIava/7lB7/KNwreTa/84SvFWLPqrl7IbMIOaphW3siZl1V0SHzOvj+WzSGsdNz5IwHYMSlEs9OHJZZqg0HDfCD+lkShth22QLTm3jzP4sj/z3IRw0WJOU3gvXvicQAOzz4weMS5861CwqfTwUIc3yIVX80Xt0bUOh6rMDst+hXSKaDlfh0kanzXmmMk6FI15MORKVAWcwGkcvNqV2KG42O2mbZKat/HZMOf035z3fNfyI3Jq9wQnUt65LQL9wAmWDVWJsFdGZwvUDAK/o1oE0xzC9wdBjtncbc6FDBVsTEd0mEQ21pZtVR6Nzj0rVqdBUKsfueG4VIR0AeB2No2eNtbGr0CWbvKlgJxz78ZqsgKG4yXDS1U2Gqet7dLT9D6aAGXawmVT7ukcBySvU6823Ee644KDcChZ3sqltwV8AtZWP7xBaw2cAf3E7YJXT7WxlPpsko3G0ZkSR19wIkmZ1jzmh2HCFkweoz8KEyFM8Mhqwvpk6ifAIbJt8O0N7YsIpYAQM2QczjivkaRDHRNcNGsyf7W0309T1rxnP6tDznLpAdBiBS5+e93/UT1UCx6HBFKY/DQZdWcWNkA8oN0vqkV1NyId/o74To3s8MceF6xJid8AMhNqiIzzkK30Dxd9bdcje/kQ9q0GNjW+fFaLzdYtfNMexDJAvTXPFKOczTQYH69E4WpWcUXDoeQcNCequ2CQnh271gTjNUtdfMZx4mLq+13DAEYGXpjBIXf/pxPPc+8xnVRahACLDaRyDEqJAZaC7qPD7CQnpScV30yfxs/dtHRI2S2bgHZAfThTshhPcnHL6nYefJzt+LTm2TtGtspQm/UmRT0094JnCtf+0+EWvGIbtKKQ6cMTRsobnGqL6bMtOUD+PxtG/o3G0KJHaYoqTtUmq4cxxLo8V/31Ho0eBkyieMi+XTWHvCNCO5UG/J0J0tcHetwH4l+wu7EAbcttPxWdw0hcTS4OV/5g/rxQcT0raSYZ2VTcTSEQHCrMArUShZvRRR0EC85jIrKU2NH3GUGPkuxt0fozG0Q+qL26CLtgkZ4CKjy1/079z2mFgQb7xA9MWd/nBwk/xfNGhmtCcyQHdwURRUL8CuEd7601zA2+uf/dgwerrCXAFORyplSKaS9LytuAc2TlgHAPOmYWuzZlQ3vU59Of/9QEsqLJHv6F3dpI2yTxcRWWw41znoOFZNqodzU2JumvqxEULuZQ62geFdGTo3h7ydI/dhsS2kYC/wZDjp7hie9lxe11Lt+22iG41lO/LEWVhxX9P6t6sN59Nsvls8gX8mUAVAuQz0wOxIjYheLNcXDvhXtd0uTtQOgJ3MJG0jrx/3QL4kbr+q5QB/IUpgC8GxYmDfOn+Be2r7MGdyLnWdM0S3TyhMIOZlRNBRLSVcMTIu8vwlDPtafgMU2L6ngadqQExvbD44Bbb4IjZJc3ccoRpwrSrRsvdFeDOIErt6DfvD8Aidf2XrpYCPECMfLPihUGhEiAvPdhvUbstmWNAcGRM44x5KqK9TawN26VwYiK634H24CyL9z84mORS02eYFNLJfDaJkKd46F5iGozG0X2Nj3NyNkki1sSg84153U3TbUC5vVI7uqKokxSP3wTLEMAfFKTFmu/vIJ+RbpuQruozuBsK1x2yxZhs8QJysErr+UzGHTCdSKuhmtExw1EOkG882UO50uGxzmVLrW3adLgEsCzUtebU8j3G3WgcrSseD99mm+TMQieqJd56280ydX1O6Sobyt0B+WrINSOgcKjNohN6x5ni4OmU6HcegOfU9b9wVyyYJDC37B7X1PZT+tn55Evo2Q+wE9LnaMcGsUfwcr4H7/Q/B3r3dpwyCfLVwCcRzrX5E2tENJe/OvLSH3E8F/P6rYgGL8/VSmdCwn4KYKpJUC9ooDHNSdkkbZTjBAdllz5XzEHtDg0faEI1riPk1RCOcZu6/rcTqh0d97abixL20Sf7uAFvtcKjvnal8bs/9bab+5b48v1EQcFHX6L8sdY74ai7zZsWfiHjmUP8njI2YH7OskX6YBcgZwD+pr/H6Ga+N8ufHNBKreJMIWryOvLSV5y2OFCR4lLTvRsX1PPZZEobEc9RbjOiV3GjYVttkruxr+ygww3SQhtSJHrbzUqhT0zQcnrbTdzbbqa97WaXapUx32UAgevbdykfVxX6WYj2pHVU2WDISQ1bwv5Z+08KP38gT9O4InG4EgHdbT5TNMWhPxpHXhuP/n4jIrPROFoyouwbcsjcVI5lHbWhdQtqAPejcTQlAXir8OuXFQYptk1akppwFBKtIePSBHlN57IfleH4LJtD9j21oGki5LOvDuNd37dolvSYoF6mrh8j39DGEThrGc6UBfUKP09ADBV/f+//W9AOCWNCIsSvJxj2IRsKBQGfoZa/E6AbO02/MUR0WHCiA+Y9TzawABCNxtE35MvvDuPXwgof2UabHDDbzUM9pehubBDRve0mSV3/kfnMN6nrL08haNLUNnHq+pyAPmyJoGuCBPms4gBqJRWDFrXBE7P/DfBzaf6G2bYS3Amt5owO48iY1193oVGYNaOLx4Afa5faa0Mbape1ymA9GkelBhqq3tA2m7yx7Pt4qeuHNnwRml3mBE4Oulc7mnWQjlTqqMxSMRDx0J7N9txJiOtCP+T4DjniWmi/iKY/uQIvaPB0urrhtMk1bcTra7jXKQUYS0vaH8hrCVttk1Tr2BNh/yEqtaNDdASFo74dCDrEpIpva8tYmDD9rUfiOWTYW9amcU8QjololVSDu460DWcGKGS2R9tK/Hyz7DNst0lbZ8sDW47WpsobXAEjtaPbK+hOwe+3EZUNhpzge4V2lAEUuhlMXzB+4r2IVjjyGgDCssv0pwRtqosZlw6O/Pu6hZsxjT8PVW5g26StFQoKZctsxaYAJGIOvF6HgnkuElToIe7oc3P9bcgM2B7FlIRTpLfdJL3tZs34yfYiWjESBfIjnrvgtJ8suUdXUbJJS2cnbyxv49CWdiOnxE3ruEUHatcrrBTEEAQ7xqpY7FHoCkURPQV/+cUD75CESozG0X3Nx0i/ZVnx9zNYkBdmIOCpS3RZZ5Op69+nrn/PvNYB/0CCprDqO/a2myX4O/rDDvjoQMHXCPX6tra1+VLTfWQWWugM+xMLqT7yrmYmy7mPxtFiPpsYKa1Eh3Xc0d8vAVzVnRZBbbKqMFivmq4NTRtBX0bj6KriUdxFLpnXVZqNoFPtlGwydf1Fb7sxYpO0QfCO/n4J4OpIubVb5q3XAL4b+MpfmSLMinJ3BSLw6iO3GgrCuGkrSYeaxin4BN19XcXXxy1r1wS8EwyPBRYrkVZC50Q0icbpaBypHPc8oOoUVzrFIs0+FwePPoAfo3EUzWeTZc1t9FTBqTSaykGByIQGnefROLqgkoZV7umAN3OZ6LCJ3nYzTV1fySZpCfxql7OkSdActMnU9SOaPX1PnHIYmqh9TO3wyrjUS10/pDz0xqH6yA/ocN4zCegX8Kq6JF2pnU2+7OWNP9AppLk2t25p+1YZ74DTOKFQELjjZ4g8bdCjoPlvAKuitjg7NKArflYA4LVQM7mKQPNG4+jlHUfmIM/Ffq4zH5s2XZZxConGmd+yAnqBn8uTDgUitxVvzT1sRacgK2WTOkqhpa7vpa7/oU2mrv/8Nq+YZq057bQ2JYDovlwbtC13e4qOHqdLm2RfFALHVUeapo98haLYLgNqKx1jwgL8UpTfWtrGq4r9TlI5hDb44AnyCagJ+ZgA+cry4q22+HxANMajcRSBv4S+ExPPo3G0BvCoerAIzWYPaCA/5gxD5KkkVzWK1CXUjrzeRfRNC+hDTCg9ZqiSHkOByzP4OZranp9mJkvZZOr6awCPqrOsFIUq2WTq+ldUqk1FlJq2kyfmOwtsOkKdUnki1JDnbonT7tN7Ull1MSFc/qyp0o3q7Hn/A7Ec0ID3CLV9FEVfsRssVcRmW+GeYPjbhEBXA1+hVb54ccQX7LTFsLfdLD8fuoLSOv6C+oajgARuRk7mOw7MyJIg69PPV6gvHznI83zPa8qTfiohopcNCehbhtgMkK8erAA8fRT0KAY4e2daNW3kgKiapq5f2iZT1//FJgtid9dxtNhk6vrnyGezOEIo+yAVRFe7LSmq5ry7O1h0fHRvu1lREBTgtOjT6gVXHDoVPkv3MegD1LPR9AE/j5DmfKcFo//dkZ9aks+OGb8T0u95ir69zWJxWVJESyWq+rmD2bS3C1RLXTL9/Q4FchcVBLSK/1ukrr/+/N6/zmeT4WgcoaRDdYrOmO6jm2FdGw1pdj4Gf4aokdrQo3G0UHxfIfK638VZhH/o3/5SEINvMfLCe9vNMHV9LTZJ99Fuk73tJkldn+s06gq0lswgMKQc78yiQWKIfAnfweng1CT8M1N9zSLuFQdhh2z9lvxZjDyPscj/yK8F0uYHSaC+wTBDQxNHgqAR1bTGm89HxGMVIW10YG1og2Ff4dpTQ9eg/6B7FlqjkDZqkzTr6yl8t7ryBx+ZInonQO5taVQKSh4hh6scEi0XlgU8Jris8Lsefh5VrTOoyzpgX6obDEVAC22gr3r92bErqITdtOMCWsVJZGgoX47eVZPObD2fTYwLMCphZ5VNFtIyuJFsXFf+MX0O1yatO6K8t93cQ3ItDwnouAPPuj9e1wKm6M4mzpVin5MNhUInOeNcNJ9NIgBXDUfgGYCLhgQ0qFwbx4E2Whu6waAnJhupS1hZY5M7Aa14uErdgw53dcSjvDDbGELY9bOuCOh9H7NAvC7R/jSOsj5DVXALgq2o2vH3M+6VtPnsHM3MdK4AnDdZMk7BqTQekTcQ9Czns8mXuoMHqrjRqE2+2aAYgpe7yw3IdLcV10HYOBu9RreXjBPkKx5fOiSgi/3likRs1sBnDzsaxHH7m2woFLoWOO77yJnK1fPZJKOZzrqES4x89vmq6ZP/CoHER98jMZkPXOK7niPfBW+q7RLkB+00NsD0tpuM0jtqtcnednPoMBdu3u6qoVxWroMIqOSabTQhoppmReL53HQllxNgWoNPK7IG8KXDwVvCCPY51wjCSUCpg1wNN+xtN8lZmQ+azyZJQUxPoX8pZ0Xi+YsFs8+Hvtt7WJUXRkHPPb2nSON7SpDnpp+r1gQ3aPxJQUwbs0maCfzNJqn4use8V1N2oiIGbDt8BRR4PLTYh8ck3B6Qz7z+QcFa18VzkQz5xlfdPu23vk4/Scfb+6nivwvCqXFxZKzMUNgH9UnXp47GUR/5cvZXqNc+TWjw+I6Gc4rbDr2nAPmud5X3tKZB/smW2fZj0GyqFpvsQBUEQThVij4tKCnM933dgHDmfqe1gfsmGp4nOBL4ZRa2jwOFkrQW2rQHtdrlJgP7zOLvd6gva9Enb/TD7t7fkdfm37fJJ1NPUjhQ5VCD71+MhTPNXRPVxXcTHHhH2amIZkanYNnkoZlmQRBOSlQ7DHG21iQyBUEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQ7OVT6vr/STMIgiAIgiAIApv1mbSBIAiCIAiCIKghIloQBEEQBEEQREQLgiAIgiAIgohoQRAEQRAEQRARLQiCIAiCIAgiogVBEARBEAShQ/z/AHrjb9oIFu5qAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/images/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIEEKJGxhbmdbJ2FkZHJlc3MnXSA9ICdBZGRyZXNzJzsKCi8vIEMKJGxhbmdbJ2NyZWF0b3JfY2xlYW51cCddID0gJ0NsZWFuaW5nIHVwJzsKJGxhbmdbJ2NyZWF0b3JfZ2V0ZmlsZWxpc3QnXSA9ICdHZXR0aW5nIGZpbGUgbGlzdCc7CiRsYW5nWydjcmVhdG9yX21ha2VkYXRhZmlsZSddID0gJ0NyZWF0aW5nIGVtYmVkZGVkIGRhdGEgZmlsZSB3aXRoIGNvbmZpZyBpbmZvIGZvciB1c2UgaW4gcmVzdG9yZSBzY3JpcHQnOwokbGFuZ1snY3JlYXRvcl9ta3JlYWRtZSddID0gJ0NyZWF0aW5nIFJFQURNRSBmaWxlIGluIHRtcCBkaXJlY3RvcnknOwokbGFuZ1snY3JlYXRvcl9ta3Jlc3RvcmUnXSA9ICdDcmVhdGluZyByZXN0b3JlIHNjcmlwdCBpbiB0bXAgZGlyZWN0b3J5JzsKJGxhbmdbJ2NyZWF0b3JfbXlzcWxkdW1wJ10gPSAnRHVtcGluZyBkYXRhYmFzZSc7CiRsYW5nWydjcmVhdG9yX21rYXJjaGl2ZSddID0gJ0NyZWF0aW5nIGFyY2hpdmUnOwoKLy8gRAokbGFuZ1snZGVzY3JpcHRpb24nXSA9ICdBIG1vZHVsZSB0byBjcmVhdGUgc25hcHNob3RzIG9mIHRoZSBDTVNNUyBmaWxlc3lzdGVtIGFuZCBkYXRhYmFzZS4gVXNlZnVsIGZvciBxdWljayBiYWNrdXBzIG9yIHNpdGUgbW92ZXMuJzsKJGxhbmdbJ2Rpc3Bvc2VfZG93bmxvYWQnXSA9ICdEb3dubG9hZCc7CiRsYW5nWydkaXNwb3NlX2VtYWlsJ10gPSAnU2VuZCBsaW5rIHZpYSBFbWFpbCc7CgovLyBFCiRsYW5nWydlcnJfY21zbWFpbGVyJ10gPSAnV2UgY291bGQgbm90IGdldCBhbiBpbnN0YW5jZSBvZiBDTVNNYWlsZXIgbW9kdWxlJzsKJGxhbmdbJ2Vycl9pbnZhbGlkX2VtYWlsJ10gPSAnVGhlIGVtYWlsIGFkZHJlc3MgeW91IHNwZWNpZmllZCBhcHBlYXJzIHRvIGJlIGludmFsaWQuJzsKJGxhbmdbJ2Vycl9taXNzaW5ncGFyYW0nXSA9ICdPbmUgb3IgbW9yZSBleHBlY3RlZCBwYXJhbWV0ZXJzIGFyZSBtaXNzaW5nIG9yIGludmFsaWQuJzsKJGxhbmdbJ2Vycl9ub3NuYXBzaG90cyddID0gJ1NvcnJ5LCBpdCBhcHBlYXJzIHRoYXQgeW91IGFyZSB0b28gbGF0ZS4gV2UgY291bGQgbm90IGZpbmQgYW55IFNuYXBzaG90TWdyIGZpbGVzIG9uIHRoZSBzZXJ2ZXIuJzsKJGxhbmdbJ2Vycl9zbmFwc2hvdG5vdGZvdW5kJ10gPSAnU29ycnksIGJ1dCB0aGUgc25hcHNob3Qgc3BlY2lmaWVkIGNvdWxkIG5vdCBiZSBsb2NhdGVkLic7CiRsYW5nWydldmVudGRlc2MtQmVmb3JlQ3JlYXRlU25hcHNob3QnXSA9ICdTZW50IGJlZm9yZSBhIHNuYXBzaG90IGlzIGNyZWF0ZWQnOwokbGFuZ1snZXZlbnRoZWxwLUJlZm9yZUNyZWF0ZVNuYXBzaG90J10gPSA8PDxFT1QKUGFyYW1ldGVyczoKPHVsPgogIDxsaT5kaXNwb3NlIChzdHJpbmcpIC0gSW5kaWNhdGVzIHRoZSBzZWxlY3RlZCBkaXNwb3NpdGlvbiB0eXBlLjwvbGk+CiAgPGxpPndoYXQgKHN0cmluZykgLSBJbmRpY2F0ZXMgd2hhdCBoYXMgYmVlbiBzZWxlY3RlZCB0byBiZSBiYWNrZWQgdXAuPC9saT4KICA8bGk+ZXhjbHVkZXMgKHN0cmluZyByZWZlcmVuY2UpIC0gQSByZWZlcmVuY2UgdG8gYSBzdHJpbmcgY29udGFpbmluZyBhIG5ld2xpbmUgc2VwYXJhdGVkIGxpc3Qgb2YgZmlsZXMgdG8gZXhjbHVkZSBmcm9tIHRoZSBiYWNrdXAuIFdpbGRjYXJkcyBhcmUgc3VwcG9ydGVkLjwvbGk+CiAgPGxpPmVtYWlsIChzdHJpbmcpIC0gSWYgdXNpbmcgZW1haWwgZGlzcG9zaXRpb24sIHRoZSBlbWFpbCBhZGRyZXNzIHRoYXQgd2lsbCByZWNlaXZlIHRoZSBtZXNzYWdlLjwvbGk+CjwvdWw+CkVPVDsKCi8vIEYKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ1NuYXBzaG90TWdyJzsKCi8vIEcKJGxhbmdbJ2dldF9yZXN0b3JlX3NjcmlwdCddID0gJ0Rvd25sb2FkIHJlc3RvcmUgc2NyaXB0JzsKCi8vIEkKJGxhbmdbJ2luZm9fY3JlYXRlX3NuYXBzaG90J10gPSAnVGhpcyBhY3Rpb24gd2lsbCBjcmVhdGUgYSBzbmFwc2hvdCBvZiB5b3VyIENNUyBNYWRlIFNpbXBsZSBpbnN0YWxsYXRpb24sIGluY2x1ZGluZyB0aGUgZGF0YWJhc2UgYW5kIGNyZWF0ZSBhIHppcCBmaWxlIHN1aXRhYmxlIGZvciB1c2UgYXMgYSBiYWNrdXAuIEl0IHdpbGwgbm90IGJhY2t1cCB0ZW1wb3JhcnkgZmlsZXMuJzsKJGxhbmdbJ2luZm9fZXhjbHVkZXMnXSA9ICdPbmUgZW50cnkgcGVyIGxpbmUsIHdpbGRjYXJkIHBhdHRlcm5zIGFuZCBzdWJkaXJlY3RvcmllcyBhcmUgcGVybWl0dGllZC4gaS5lOiB0bXAvKmd6JzsKCi8vIEwKJGxhbmdbJ2xlZ2VuZF9zbmFwc2hvdF9kaXNwb3NpdGlvbiddID0gJ1doYXQgZG8geW91IHdhbnQgdG8gZG8gd2l0aCB0aGUgc25hcHNob3Q/JzsKJGxhbmdbJ2xlZ2VuZF93aGF0J10gPSAnQXJjaGl2ZSBPcHRpb25zJzsKCi8vIE0KJGxhbmdbJ21zZ19lbWFpbF9zZW50J10gPSAnWW91ciBzbmFwc2hvdCBoYXMgYmVlbiBnZW5lcmF0ZWQgYW5kIGFuIGVtYWlsIHNlbnQgdG8gdGhlIHNwZWNpZmllZCBhZGRyZXNzLic7CgovLyBQCiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ1RoZSBTbmFwc2hvdE1nciBtb2R1bGUgaGFzIGJlZW4gaW5zdGFsbGVkISc7CiRsYW5nWydwb3N0dW5pbnN0YWxsJ10gPSAnVGhlIFNuYXBzaG90TWdyIG1vZHVsZSBoYXMgYmVlbiB1bmluc3RhbGxlZC4uLic7CiRsYW5nWydwcm9tcHRfZXhjbHVkZXMnXSA9ICdFeGNsdWRlcyc7CiRsYW5nWydwcm9tcHRfd2hhdCddID0gJ0FyY2hpdmUgQ29udGVudHMnOwoKLy8gUwokbGFuZ1snc25hcHNob3Rub3cnXSA9ICdDcmVhdGUgU25hcHNob3QgTm93JzsKCi8vIFcKJGxhbmdbJ3dhcm5fY3JlYXRlX3NuYXBzaG90J10gPSAnPGI+V2FybmluZzo8L2I+IFRoaXMgaXMgYSB2ZXJ5IGRhdGFiYXNlIGFuZCBtZW1vcnkgaW50ZW5zaXZlIG9wZXJhdGlvbi4gWW91IG1heSBuZWVkIHRvIGFkanVzdCBzZXJ2ZXIgcmVzb3VyY2VzIHRvIHV0aWxpemUgdGhpcyBhY3Rpb24uJzsKJGxhbmdbJ3doYXRfYm90aCddID0gJ0ZpbGVzIGFuZCBEYXRhYmFzZSc7CiRsYW5nWyd3aGF0X2ZpbGVzJ10gPSAnRmlsZXMgb25seSc7CiRsYW5nWyd3aGF0X2RiJ10gPSAnRGF0YWJhc2Ugb25seSc7CgojCiMgRU9GCiM=]]></data>
	</file>
	<file>
	  <filename>/lang/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/class.fancy_stderr_logger.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNuYXBzaG90TWdyCiMgQXV0aG9yOiBSb2xmIFRqYXNzZW5zIChjbXNjYW5iZXNpbXBsZS5vcmcpCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4KIyAoYykgMjAwNCAtIDIwMTEgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIChjKSAyMDExIC0gMjAxOCBieSBUaGUgQ01TIE1hZGUgU2ltcGxlIERldmVsb3BtZW50IFRlYW0KIyAoYykgMjAxOCBhbmQgYmV5b25kIGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRm91bmRhdGlvbgojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9zbmFwc2hvdG1ncgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGb3JrIGZyb20gQ0dTbmFwc2hvdCBtb2R1bGUgYnkgUm9iZXJ0IENhbXBiZWxsIChjYWxndXkxMDAwLmNvbSkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCm5hbWVzcGFjZSBTbmFwc2hvdE1ncjsKCmNsYXNzIGZhbmN5X3N0ZGVycl9sb2dnZXIgZXh0ZW5kcyBzdGRlcnJfbG9nZ2VyCnsKICAgIHByb3RlY3RlZCAkbW9kOwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KFxTbmFwc2hvdE1nciAkbW9kLCAkbHZsID0gc2VsZjo6TFZMX0lORk8pCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCggJGx2bCApOwogICAgICAgICR0aGlzLT5tb2QgPSAkbW9kOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiB0cmFuc2xhdGUoJHN0cikKICAgIHsKICAgICAgICBpZiggc3RhcnRzd2l0aCgkc3RyLCdsYW5nOicpICkgewogICAgICAgICAgICAkc3RyID0gc3Vic3RyKCRzdHIsNSk7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+bW9kLT5MYW5nKCRzdHIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHN0cjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVidWcoJHN0cikKICAgIHsKICAgICAgICBpZiggJHRoaXMtPmxldmVsKCkgPCBzZWxmOjpMVkxfREVCVUcgKSByZXR1cm47CiAgICAgICAgJHRoaXMtPndyaXRlKCdERUJVRzogJy4kdGhpcy0+dHJhbnNsYXRlKCRzdHIpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdmVyYm9zZSgkc3RyKQogICAgewogICAgICAgIGlmKCAkdGhpcy0+bGV2ZWwoKSA8IHNlbGY6OkxWTF9WRVJCT1NFICkgcmV0dXJuOwogICAgICAgICR0aGlzLT53cml0ZSgnVkVSQk9TRTogJy4kdGhpcy0+dHJhbnNsYXRlKCRzdHIpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaW5mbygkc3RyKQogICAgewogICAgICAgIGlmKCAkdGhpcy0+bGV2ZWwoKSA8IHNlbGY6OkxWTF9JTkZPICkgcmV0dXJuOwogICAgICAgICR0aGlzLT53cml0ZSgnSU5GTzogJy4kdGhpcy0+dHJhbnNsYXRlKCRzdHIpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2FybmluZygkc3RyKQogICAgewogICAgICAgIGlmKCAkdGhpcy0+bGV2ZWwoKSA8IHNlbGY6OkxWTF9XQVJOSU5HICkgcmV0dXJuOwogICAgICAgICR0aGlzLT53cml0ZSgnV0FSTklORzogJy4kdGhpcy0+dHJhbnNsYXRlKCRzdHIpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZXJyb3IoJHN0cikKICAgIHsKICAgICAgICBpZiggJHRoaXMtPmxldmVsKCkgPCBzZWxmOjpMVkxfRVJST1IgKSByZXR1cm47CiAgICAgICAgJHRoaXMtPndyaXRlKCdFUlJPUjogJy4kdGhpcy0+dHJhbnNsYXRlKCRzdHIpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZmF0YWwoJHN0cikKICAgIHsKICAgICAgICBpZiggJHRoaXMtPmxldmVsKCkgPCBzZWxmOjpMVkxfRkFUQUwgKSByZXR1cm47CiAgICAgICAgJHRoaXMtPndyaXRlKCdGQVRBTDogJy4kdGhpcy0+dHJhbnNsYXRlKCRzdHIpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZGlzcGxheV9wcm9ncmVzcygkcGVyY2VudCkKICAgIHsKICAgICAgICAvLyBkbyBub3RoaW5nLgogICAgfQp9IC8vIGNsYXNz]]></data>
	</file>
	<file>
	  <filename>/lib/class.file_logger.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNuYXBzaG90TWdyCiMgQXV0aG9yOiBSb2xmIFRqYXNzZW5zIChjbXNjYW5iZXNpbXBsZS5vcmcpCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4KIyAoYykgMjAwNCAtIDIwMTEgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIChjKSAyMDExIC0gMjAxOCBieSBUaGUgQ01TIE1hZGUgU2ltcGxlIERldmVsb3BtZW50IFRlYW0KIyAoYykgMjAxOCBhbmQgYmV5b25kIGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRm91bmRhdGlvbgojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9zbmFwc2hvdG1ncgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGb3JrIGZyb20gQ0dTbmFwc2hvdCBtb2R1bGUgYnkgUm9iZXJ0IENhbXBiZWxsIChjYWxndXkxMDAwLmNvbSkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCm5hbWVzcGFjZSBTbmFwc2hvdE1ncjsKCmNsYXNzIGZpbGVfbG9nZ2VyIGV4dGVuZHMgbG9nZ2VyCnsKICAgIHByaXZhdGUgJF9maWxlbmFtZTsKICAgIHByaXZhdGUgJF9sdmw7CgogICAgY29uc3QgTFZMX0ZBVEFMID0gMDsKICAgIGNvbnN0IExWTF9FUlJPUiA9IDE7CiAgICBjb25zdCBMVkxfV0FSTklORyA9IDI7CiAgICBjb25zdCBMVkxfSU5GTyA9IDM7CiAgICBjb25zdCBMVkxfVkVSQk9TRSA9IDQ7CiAgICBjb25zdCBMVkxfREVCVUcgPSA1OwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbHZsID0gc2VsZjo6TFZMX0lORk8sJGZpbGVuYW1lID0gbnVsbCkKICAgIHsKICAgICAgICBpZiggISRmaWxlbmFtZSApIHsKICAgICAgICAgICAgJGZpbGVuYW1lID0gVE1QX0NBQ0hFX0xPQ0FUSU9OIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuIGJhc2VuYW1lKF9fQ0xBU1NfXykuJy5sb2cnOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPl9maWxlbmFtZSA9ICRmaWxlbmFtZTsKICAgICAgICAkdGhpcy0+X2x2bCA9ICRsdmw7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHdyaXRlKCRzdHIpCiAgICB7CiAgICAgICAgJHN0ciA9IHRyaW0oJHN0cik7CiAgICAgICAgaWYoICEkc3RyICkgcmV0dXJuOwogICAgICAgIGlmKCAhZW5kc3dpdGgoICRzdHIsICJcbiIpICkgJHN0ciAuPSAiXG4iOwogICAgICAgICRmaCA9IGZvcGVuKCR0aGlzLT5fZmlsZW5hbWUsJ2EnKTsKICAgICAgICBpZiggISRmaCApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignUHJvYmxlbSBvcGVuaW5nIGZpbGUgZm9yIHdyaXRpbmc6ICcuJHRoaXMtPl9maWxlbmFtZSk7CiAgICAgICAgZndyaXRlKCRmaCwkc3RyKTsKICAgICAgICBmY2xvc2UoJGZoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVidWcoJHN0cikKICAgIHsKICAgICAgICBpZiggJHRoaXMtPl9sdmwgPCBzZWxmOjpMVkxfREVCVUcgKSByZXR1cm47CiAgICAgICAgJHRoaXMtPndyaXRlKCdERUJVRzogJy4kc3RyKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdmVyYm9zZSgkc3RyKQogICAgewogICAgICAgIGlmKCAkdGhpcy0+X2x2bCA8IHNlbGY6OkxWTF9WRVJCT1NFICkgcmV0dXJuOwogICAgICAgICR0aGlzLT53cml0ZSgnVkVSQk9TRTogJy4kc3RyKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaW5mbygkc3RyKQogICAgewogICAgICAgIGlmKCAkdGhpcy0+X2x2bCA8IHNlbGY6OkxWTF9JTkZPICkgcmV0dXJuOwogICAgICAgICR0aGlzLT53cml0ZSgnSU5GTzogJy4kc3RyKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2FybmluZygkc3RyKQogICAgewogICAgICAgIGlmKCAkdGhpcy0+X2x2bCA8IHNlbGY6OkxWTF9XQVJOSU5HICkgcmV0dXJuOwogICAgICAgICR0aGlzLT53cml0ZSgnV0FSTklORzogJy4kc3RyKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZXJyb3IoJHN0cikKICAgIHsKICAgICAgICBpZiggJHRoaXMtPl9sdmwgPCBzZWxmOjpMVkxfRVJST1IgKSByZXR1cm47CiAgICAgICAgJHRoaXMtPndyaXRlKCdFUlJPUjogJy4kc3RyKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZmF0YWwoJHN0cikKICAgIHsKICAgICAgICBpZiggJHRoaXMtPl9sdmwgPCBzZWxmOjpMVkxfRkFUQUwgKSByZXR1cm47CiAgICAgICAgJHRoaXMtPndyaXRlKCdGQVRBTDogJy4kc3RyKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZGlzcGxheV9wcm9ncmVzcygkcGVyY2VudCkKICAgIHsKICAgICAgICAvLyBkbyBub3RoaW5nCiAgICB9Cgp9IC8vIGVuZCBvZiBjbGFzcwoKIwojIEVPRgoj]]></data>
	</file>
	<file>
	  <filename>/lib/class.logger.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNuYXBzaG90TWdyCiMgQXV0aG9yOiBSb2xmIFRqYXNzZW5zIChjbXNjYW5iZXNpbXBsZS5vcmcpCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4KIyAoYykgMjAwNCAtIDIwMTEgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIChjKSAyMDExIC0gMjAxOCBieSBUaGUgQ01TIE1hZGUgU2ltcGxlIERldmVsb3BtZW50IFRlYW0KIyAoYykgMjAxOCBhbmQgYmV5b25kIGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRm91bmRhdGlvbgojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9zbmFwc2hvdG1ncgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGb3JrIGZyb20gQ0dTbmFwc2hvdCBtb2R1bGUgYnkgUm9iZXJ0IENhbXBiZWxsIChjYWxndXkxMDAwLmNvbSkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCm5hbWVzcGFjZSBTbmFwc2hvdE1ncjsKCmFic3RyYWN0IGNsYXNzIGxvZ2dlcgp7CiAgICBwcml2YXRlICRfY3VyX3N0ZXAgPSAwOwogICAgcHJpdmF0ZSAkX3RvdGFsX3N0ZXBzID0gMTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHRvdGFsX3N0ZXBzKQogICAgewogICAgICAgICR0aGlzLT50b3RhbF9zdGVwcyA9IG1heCgxLChpbnQpJHRvdGFsX3N0ZXBzKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWR2YW5jZSgpCiAgICB7CiAgICAgICAgJHRoaXMtPl9jdXJfc3RlcCA9IG1pbigkdGhpcy0+X2N1cl9zdGVwICsgMSwkdGhpcy0+X3RvdGFsX3N0ZXBzKTsKICAgICAgICAkdGhpcy0+ZGlzcGxheV9wcm9ncmVzcygkdGhpcy0+Z2V0X3BlcmNlbnRfY29tcGxldGUoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGRvbmUoKQogICAgewogICAgICAgIHJldHVybiAoJHRoaXMtPl9jdXJfc3RlcCA9PSAkdGhpcy0+X3RvdGFsX3N0ZXBzKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X3BlcmNlbnRfY29tcGxldGUoKQogICAgewogICAgICAgIHJldHVybiAoZmxvYXQpICR0aGlzLT5fY3VyX3N0ZXAgLyAoZmxvYXQpICR0aGlzLT5fdG90YWxfc3RlcHMgKiAxMDAuMDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVzZXQoKQogICAgewogICAgICAgICR0aGlzLT5fY3VyX3N0ZXAgPSAwOwogICAgICAgICR0aGlzLT5kaXNwbGF5X3Byb2dyZXNzKCR0aGlzLT5nZXRfcGVyY2VudF9jb21wbGV0ZSgpKTsKICAgIH0KCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gZGVidWcoJHN0cik7CiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gdmVyYm9zZSgkc3RyKTsKICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBpbmZvKCRzdHIpOwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIHdhcm5pbmcoJHN0cik7CiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gZXJyb3IoJHN0cik7CiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gZmF0YWwoJHN0cik7CiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gZGlzcGxheV9wcm9ncmVzcygkcGVyY2VudCk7Cgp9IC8vIGVuZCBvZiBjbGFzcwoKIwojIEVPRgoj]]></data>
	</file>
	<file>
	  <filename>/lib/class.secure_ini_file.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNuYXBzaG90TWdyCiMgQXV0aG9yOiBSb2xmIFRqYXNzZW5zIChjbXNjYW5iZXNpbXBsZS5vcmcpCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4KIyAoYykgMjAwNCAtIDIwMTEgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIChjKSAyMDExIC0gMjAxOCBieSBUaGUgQ01TIE1hZGUgU2ltcGxlIERldmVsb3BtZW50IFRlYW0KIyAoYykgMjAxOCBhbmQgYmV5b25kIGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRm91bmRhdGlvbgojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9zbmFwc2hvdG1ncgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGb3JrIGZyb20gQ0dTbmFwc2hvdCBtb2R1bGUgYnkgUm9iZXJ0IENhbXBiZWxsIChjYWxndXkxMDAwLmNvbSkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCm5hbWVzcGFjZSBTbmFwc2hvdE1ncjsKCmNsYXNzIHNlY3VyZV9pbmlfZmlsZQp7CiAgICBwcml2YXRlICRfZmlsZW5hbWU7CiAgICBwcml2YXRlICRfZmlyc3Rfc2VjdGlvbiA9IFRSVUU7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRmaWxlbmFtZSA9IG51bGwpCiAgICB7CiAgICAgICAgJHRoaXMtPnNldF9maWxlbmFtZSgkZmlsZW5hbWUpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfZmlsZW5hbWUoJGZpbGVuYW1lKQogICAgewogICAgICAgICR0aGlzLT5fZmlsZW5hbWUgPSB0cmltKCRmaWxlbmFtZSk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBfc29ydF9kYXRhKCRkYXRhKQogICAgewogICAgICAgICRvdXQgPSAkZGF0YTsKICAgICAgICBmb3JlYWNoKCAkb3V0IGFzICRrZXkgPT4gJiR2YWwgKSB7CiAgICAgICAgICAgIGlmKCBpc19hcnJheSgkdmFsKSApICR2YWwgPSAkdGhpcy0+X3NvcnRfZGF0YSgkdmFsKTsKICAgICAgICB9CiAgICAgICAga3NvcnQoJG91dCk7CiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9CgogICAgcHJvdGVjdGVkIGZpbmFsIGZ1bmN0aW9uIF9jYWxjX2NoZWNrc3VtKCRkYXRhKQogICAgewogICAgICAgICRzb3J0ZWQgPSAkdGhpcy0+X3NvcnRfZGF0YSgkZGF0YSk7CiAgICAgICAgJHNpZyA9IG1kNShfX0NMQVNTX18uX19ESVJfXy5zZXJpYWxpemUoJHNvcnRlZCkpOwogICAgICAgIHJldHVybiAkc2lnOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBfd3JpdGVfaW5pX3NlY3Rpb24oJHNlY3Rpb24pCiAgICB7CiAgICAgICAgJG91dCA9IG51bGw7CiAgICAgICAgaWYoICEkdGhpcy0+X2ZpcnN0X3NlY3Rpb24gKSB7CiAgICAgICAgICAgICR0aGlzLT5fZmlyc3Rfc2VjdGlvbiA9IEZBTFNFOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJG91dCAuPSAiXG4iOwogICAgICAgIH0KCiAgICAgICAgJG91dCAuPSAnWycudHJpbSgkc2VjdGlvbikuIl1cbiI7CiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIF93cml0ZV9pbmlfdmFsKCRrZXksJHZhbCkKICAgIHsKICAgICAgICAkb3V0ID0gbnVsbDsKICAgICAgICAvLyBAdG9kbyBjaGVjayBmb3IgaW52YWxpZCBjaGFycyBpbiB0aGUga2V5IGFuZCB0aHJvdyBhbiBleGNlcHRpb24KICAgICAgICAkbmtleSA9IHRyaW0oJGtleSk7CiAgICAgICAgJG52YWwgPSB0cmltKCR2YWwpOwogICAgICAgIGlmKCAhJG5rZXkgKSByZXR1cm47CiAgICAgICAgJHR5cGUgPSBnZXR0eXBlKCR2YWwpOwogICAgICAgIGlmKCAkdHlwZSA9PSAnb2JqZWN0JyApIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ09iamVjdHMgY2Fubm90IGJlIHN0b3JlZCcpOwoKICAgICAgICAkZm5kID0gMDsKICAgICAgICAkYmFkY2hhcnMgPSBhcnJheSgiXG4iLCJcciIsIjsiLCInIiwnIicpOwogICAgICAgIGZvcmVhY2goICRiYWRjaGFycyBhcyAkY2ggKSB7CiAgICAgICAgICAgIGlmKCBzdHJwb3MoJG52YWwsJGNoKSAhPT0gRkFMU0UgKSB7CiAgICAgICAgICAgICAgICAkZm5kID0gMTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmKCAkZm5kICkgewogICAgICAgICAgICAvLyB0aGVyZSBhcmUgYmFkIGNoYXJhY3Rycy4gZ290dGEgZXNjYXBlIHRoZSBkb3VibGUgcXVvdGVzCiAgICAgICAgICAgICRudmFsID0gc3RyX3JlcGxhY2UoJyInLCdcIicsJG52YWwpOwogICAgICAgIH0KICAgICAgICAkbnZhbCA9ICInIi4kdHlwZS4nfDp8Jy4kbnZhbC4iJyI7CiAgICAgICAgJG91dCAuPSBzcHJpbnRmKCIlcyA9ICVzXG4iLCRrZXksJG52YWwpOwogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBfd3JpdGVfZmlsZV9oZWFkZXIoJGNoZWNrc3VtKQogICAgewogICAgICAgICRvdXQgPSAnOzw/cGhwIGRpZSgpOyAvKiBTSUc9Jy4kY2hlY2tzdW0uJyAqLyA/PicuIlxuIjsKICAgICAgICByZXR1cm4gJG91dDsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX3dyaXRlX2luaV9hcnJheSgkYXJyLCRzZWN0aW9uID0gbnVsbCkKICAgIHsKICAgICAgICAkb3V0ID0gbnVsbDsKICAgICAgICAkc2VjdGlvbiA9IHRyaW0oJHNlY3Rpb24pOwogICAgICAgICRpc19hc3NvYyA9IChhcnJheV9rZXlzKCRhcnIpICE9PSByYW5nZSgwLCBjb3VudCgkYXJyKSAtIDEpKTsKCiAgICAgICAgaWYoICRpc19hc3NvYyApIHsKICAgICAgICAgICAgLy8gcGFzcyBvbmUsIG5vcm1hbCB2YWx1ZXMKICAgICAgICAgICAgZm9yZWFjaCggJGFyciBhcyAka2V5ID0+ICR2YWwgKSB7CiAgICAgICAgICAgICAgICBpZiggIWlzX2FycmF5KCR2YWwpICkgJG91dCAuPSAkdGhpcy0+X3dyaXRlX2luaV92YWwoJGtleSwkdmFsKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiggJG91dCApIHsKICAgICAgICAgICAgICAgIGlmKCAhJHNlY3Rpb24gKSAkc2VjdGlvbiA9ICdtYWluJzsKICAgICAgICAgICAgICAgICRvdXQgPSAkdGhpcy0+X3dyaXRlX2luaV9zZWN0aW9uKCRzZWN0aW9uKSAuICRvdXQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIHBhc3MgdHdvLCBuZXN0ZWQgYXJyYXlzCiAgICAgICAgICAgIGZvcmVhY2goICRhcnIgYXMgJGtleSA9PiAkdmFsICkgewogICAgICAgICAgICAgICAgaWYoICFpc19hcnJheSgkdmFsKSApIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgaWYoIGFycmF5X2tleXMoJHZhbCkgIT09IHJhbmdlKDAsIGNvdW50KCR2YWwpIC0gMSkgKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gYXNzb2NpYXRpdmUgY2hpbGQgYXJyYXkKICAgICAgICAgICAgICAgICAgICAkdG1wID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICBpZiggJHNlY3Rpb24gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0bXAgPSAkc2VjdGlvbi4iIDogJGtleSI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkdG1wID0gJGtleTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJG91dCAuPSAkdGhpcy0+X3dyaXRlX2luaV9hcnJheSgkdmFsLCR0bXApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgLy8gbm9ybWFsIGNoaWxkIGFycmF5CiAgICAgICAgICAgICAgICAgICAgJG91dCAuPSAkdGhpcy0+X3dyaXRlX2luaV9hcnJheSgkdmFsLCRrZXkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBpZiggISRzZWN0aW9uICkgJHNlY3Rpb24gPSAnbWFpbic7CiAgICAgICAgICAgIGZvciggJGkgPSAwLCAkbiA9IGNvdW50KCRhcnIpOyAkaSA8ICRuOyAkaSsrICkgewogICAgICAgICAgICAgICAgJG91dCAuPSAkdGhpcy0+X3dyaXRlX2luaV92YWwoJHNlY3Rpb24uJ1tdJywkYXJyWyRpXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdlbmVyYXRlKCRkYXRhKQogICAgewogICAgICAgICRja3N1bSA9ICR0aGlzLT5fY2FsY19jaGVja3N1bSgkZGF0YSk7CiAgICAgICAgJG91dCA9ICR0aGlzLT5fd3JpdGVfZmlsZV9oZWFkZXIoJGNrc3VtKTsKICAgICAgICAkb3V0IC49ICR0aGlzLT5fd3JpdGVfaW5pX2FycmF5KCRkYXRhKTsKICAgICAgICByZXR1cm4gJG91dDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd3JpdGUoJGRhdGEsJGZpbGVuYW1lID0gbnVsbCkKICAgIHsKICAgICAgICBpZiggISRmaWxlbmFtZSApICRmaWxlbmFtZSA9ICR0aGlzLT5fZmlsZW5hbWU7CiAgICAgICAgaWYoICEkZmlsZW5hbWUgKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ05vIGZpbGVuYW1lIHNwZWNpZmllZCB0byBpbnN0YW5jZSBvZiAnLl9fQ0xBU1NfXyk7CiAgICAgICAgJGRpciA9IGRpcm5hbWUoJHRoaXMtPl9maWxlbmFtZSk7CiAgICAgICAgaWYoIChpc19maWxlKCRmaWxlbmFtZSkgJiYgIWlzX3dyaXRhYmxlKCR0aGlzLT5fZmlsZW5hbWUpKSB8fCAhaXNfd3JpdGFibGUoJGRpcikgKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigiTm8gcGVybWlzc2lvbiB0byB3cml0ZSB0byAiLiR0aGlzLT5fZmlsZW5hbWUpOwogICAgICAgIH0KCiAgICAgICAgJGZoID0gZm9wZW4oJGZpbGVuYW1lLCd3Jyk7CiAgICAgICAgZndyaXRlKCRmaCwkdGhpcy0+Z2VuZXJhdGUoKSk7CiAgICAgICAgZmNsb3NlKCRmaCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNhdmUoJGRhdGEpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT53cml0ZSgkZGF0YSk7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIF9jb252ZXJ0X3ZhbHVlcygkZGF0YSkKICAgIHsKICAgICAgICAkb3V0ID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoKCAkZGF0YSBhcyAka2V5ID0+ICR2YWwgKSB7CiAgICAgICAgICAgIGlmKCBpc19hcnJheSgkdmFsKSApIHsKICAgICAgICAgICAgICAgICRvdXRbJGtleV0gPSAkdGhpcy0+X2NvbnZlcnRfdmFsdWVzKCR2YWwpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgbGlzdCgkdHlwZSwkdmFsKSA9IGV4cGxvZGUoJ3w6fCcsJHZhbCwyKTsKICAgICAgICAgICAgICAgIHN3aXRjaCggJHR5cGUgKSB7CiAgICAgICAgICAgICAgICBjYXNlICdib29sZWFuJzoKICAgICAgICAgICAgICAgICAgICAkb3V0WyRrZXldID0gKGJvb2wpICR2YWw7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdpbnRlZ2VyJzoKICAgICAgICAgICAgICAgICAgICAkb3V0WyRrZXldID0gKGludCkgJHZhbDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3JlYWwnOgogICAgICAgICAgICAgICAgY2FzZSAnZmxvYXQnOgogICAgICAgICAgICAgICAgY2FzZSAnZG91YmxlJzoKICAgICAgICAgICAgICAgICAgICAkb3V0WyRrZXldID0gKGZsb2F0KSAkdmFsOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzoKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgJG91dFska2V5XSA9IChzdHJpbmcpICR2YWw7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHBhcnNlKCRjb250ZW50cywkdmVyaWZ5ID0gVFJVRSkKICAgIHsKICAgICAgICAvLyBnZXQgdGhlIGZpcnN0IGxpbmUKICAgICAgICAkZmlyc3RfbGluZSA9IGV4cGxvZGUoIlxuIiwkY29udGVudHMsMilbMF07CiAgICAgICAgJGZpbGVfc2lnID0gbnVsbDsKICAgICAgICAkbWF0Y2hlcyA9IG51bGw7CiAgICAgICAgcHJlZ19tYXRjaCgnL1xzK1NJRz0oWzAtOUEtWmEtel17MzJ9KVxzKy8nLCRmaXJzdF9saW5lLCRtYXRjaGVzKTsKICAgICAgICBpZiggJG1hdGNoZXNbMV0gKSAkZmlsZV9zaWcgPSAkbWF0Y2hlc1sxXTsKICAgICAgICB1bnNldCgkbWF0Y2hlcyk7CgogICAgICAgICRyYXdfZGF0YSA9IHBhcnNlX2luaV9zdHJpbmcoJGNvbnRlbnRzLFRSVUUpOwoKICAgICAgICAvLyB3ZSBoYXZlIGEgZmxhdCBsaXN0IG9mIHNlY3Rpb25zLCBlYWNoIHNlY3Rpb24gaXMgYW4gYXJyYXkKICAgICAgICAvLyB0aGUgdG9wIHNlY3Rpb24gc2hvdWxkIG5vdCBoYXZlIGFueSBuZXN0aW5nCiAgICAgICAgJGFsbF9rZXlzID0gYXJyYXlfa2V5cygkcmF3X2RhdGEpOwogICAgICAgICRrZXkwID0gJGFsbF9rZXlzWzBdOwogICAgICAgICRwYXJ0cyA9IGV4cGxvZGUoJyA6ICcsJGtleTApOwogICAgICAgIGlmKCAkcGFydHNbMF0gIT0gJGtleTAgKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0ludmFsaWQgZmlsZSBmb3JtYXQsIGZvdW5kIG5lc3RlZCBjaGlsZCBhcyBmaXJzdCBlbGVtZW50Jyk7CgogICAgICAgICRvdXQgPSBhcnJheSgpOwogICAgICAgIGZvcmVhY2goICRyYXdfZGF0YSBhcyAka2V5ID0+ICR2YWwgKSB7CiAgICAgICAgICAgICRwYXJ0cyA9IGV4cGxvZGUoJyA6ICcsJGtleSk7CiAgICAgICAgICAgIC8vaWYoICRwYXJ0c1swXSAhPSAka2V5MCApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignSW52YWxpZCBmaWxlIGZvcm1hdCcpOwoKICAgICAgICAgICAgaWYoIGNvdW50KCRwYXJ0cykgPT0gMSApIHsKICAgICAgICAgICAgICAgICRvdXRbJGtleV0gPSAkdGhpcy0+X2NvbnZlcnRfdmFsdWVzKCR2YWwpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJHRtcCA9JiAkb3V0OwogICAgICAgICAgICAgICAgJGkgPSBudWxsOwogICAgICAgICAgICAgICAgZm9yKCAkaSA9IDEsICRuID0gY291bnQoJHBhcnRzKSAtIDE7ICRpIDwgJG47ICRpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgJHBhcnQgPSAkcGFydHNbJGldOwogICAgICAgICAgICAgICAgICAgIGlmKCAhaXNfYXJyYXkoJHRtcFskcGFydF0pICkgJHRtcFskcGFydF0gPSBhcnJheSgpOwogICAgICAgICAgICAgICAgICAgICR0bXAgPSYgJHRtcFskcGFydF07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkdG1wWyRwYXJ0c1skaV1dID0gJHRoaXMtPl9jb252ZXJ0X3ZhbHVlcygkdmFsKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYoIGNvdW50KCRvdXQpID09IDEgJiYgaXNzZXQoJG91dFska2V5MF0pICkgewogICAgICAgICAgICAkb3V0ID0gJG91dFska2V5MF07CiAgICAgICAgfQoKICAgICAgICBpZiggJHZlcmlmeSApIHsKICAgICAgICAgICAgJGNhbGNfc2lnID0gJHRoaXMtPl9jYWxjX2NoZWNrc3VtKCRvdXQpOwogICAgICAgICAgICBpZiggJGZpbGVfc2lnICE9ICRjYWxjX3NpZyApIHRocm93IG5ldyBcUmFuZ2VFeGNlcHRpb24oIklOSSBGaWxlIHNpZ25hdHVyZSBkaWQgbm90IG1hdGNoIHRoZSBzaWduYXR1cmUgb2YgdGhlIGZpbGUgY29udGVudHMiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlYWQoJGZpbGVuYW1lID0gbnVsbCwkdmVyaWZ5ID0gVFJVRSkKICAgIHsKICAgICAgICBpZiggJGZpbGVuYW1lICkgJHRoaXMtPnNldF9maWxlbmFtZSgkZmlsZW5hbWUpOwoKICAgICAgICBpZiggIWlzX2ZpbGUoJHRoaXMtPl9maWxlbmFtZSkgfHwgIWlzX3JlYWRhYmxlKCR0aGlzLT5fZmlsZW5hbWUpICkgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKHNwcmludGYoIkZpbGUgJXMgY291bGQgbm90IGJlIHJlYWQiLCR0aGlzLT5fZmlsZW5hbWUpKTsKICAgICAgICAkY29udGVudHMgPSBmaWxlX2dldF9jb250ZW50cygkdGhpcy0+X2ZpbGVuYW1lKTsKICAgICAgICByZXR1cm4gJHRoaXMtPnBhcnNlKCRjb250ZW50cywkdmVyaWZ5KTsKICAgIH0KCn0gLy8gZW5kIG9mIGNsYXNzCgojCiMgRU9GCiM=]]></data>
	</file>
	<file>
	  <filename>/lib/class.snapshot_creator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNuYXBzaG90TWdyCiMgQXV0aG9yOiBSb2xmIFRqYXNzZW5zIChjbXNjYW5iZXNpbXBsZS5vcmcpCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4KIyAoYykgMjAwNCAtIDIwMTEgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIChjKSAyMDExIC0gMjAxOCBieSBUaGUgQ01TIE1hZGUgU2ltcGxlIERldmVsb3BtZW50IFRlYW0KIyAoYykgMjAxOCBhbmQgYmV5b25kIGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRm91bmRhdGlvbgojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9zbmFwc2hvdG1ncgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGb3JrIGZyb20gQ0dTbmFwc2hvdCBtb2R1bGUgYnkgUm9iZXJ0IENhbXBiZWxsIChjYWxndXkxMDAwLmNvbSkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCm5hbWVzcGFjZSBTbmFwc2hvdE1ncjsKCmNsYXNzIHNuYXBzaG90X2NyZWF0b3IKewogICAgdXNlIGxvZ2dhYmxlOwogICAgcHJpdmF0ZSAkX29wdHMgPSBhcnJheSgnbXlzcWxkdW1wJz0+VFJVRSwncmVhZG1lJz0+J0ZBTFNFJywnZW5jcnlwdCc9PidGQUxTRScsJ2ZpbGVzJz0+VFJVRSwnZXhjbHVkZXMnPT5udWxsKTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHBhcmFtcyA9IG51bGwpCiAgICB7CiAgICAgICAgaWYoIGlzX2FycmF5KCRwYXJhbXMgJiYgY291bnQoJHBhcmFtcykgKSApIHsKICAgICAgICAgICAgZm9yZWFjaCggJHBhcmFtcyBhcyAka2V5ID0+ICR2YWwgKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+JGtleSA9ICR2YWw7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fZ2V0KCRrZXkpCiAgICB7CiAgICAgICAgaWYoICFhcnJheV9rZXlfZXhpc3RzKCRrZXksJHRoaXMtPl9vcHRzKSApIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oIiRrZXkgaXMgbm90IGEgdmFsaWQgbWVtYmVyIG9mICIuX19DTEFTU19fKTsKICAgICAgICByZXR1cm4gJHRoaXMtPl9vcHRzWyRrZXldOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3NldCgka2V5LCR2YWwpCiAgICB7CiAgICAgICAgaWYoICRrZXkgPT0gJ215c3FsJyApICRrZXkgPSAnbXlzcWxkdW1wJzsKCiAgICAgICAgc3dpdGNoKCAka2V5ICkgewogICAgICAgIGNhc2UgJ215c3FsZHVtcCc6CiAgICAgICAgY2FzZSAnZmlsZXMnOgogICAgICAgIGNhc2UgJ3JlYWRtZSc6CiAgICAgICAgY2FzZSAnZW5jcnlwdCc6CiAgICAgICAgICAgICR0aGlzLT5fb3B0c1ska2V5XSA9IChib29sKSAkdmFsOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdleGNsdWRlcyc6CiAgICAgICAgICAgICR0aGlzLT5fb3B0c1ska2V5XSA9IHRyaW0oJHZhbCk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCIka2V5IGlzIG5vdCBhIHZhbGlkIG1lbWJlciBvZiAiLl9fQ0xBU1NfXyk7CiAgICAgICAgfQogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRfZmlsZV9saXN0KCRzdGFydGRpciwkYWR2YW5jZWQgPSBmYWxzZSkKICAgIHsKICAgICAgICAvLyBnZXQgYWxsIGZpbGVzIChleGNlcHQgdG1wIGFuZCBiYWNrdXAgZmlsZXMpIGZyb20gdGhlIHJvb3QgcGF0aAogICAgICAgIGlmKCAhaXNfZGlyKCRzdGFydGRpcikgKSB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCJpbnZhbGlkIHBhdGggcGFzc2VkIHRvICIuX19NRVRIT0RfXyk7CgogICAgICAgIC8vIGlmIHdlIGhhdmUgZXhjbHVkZXMsIGNsZWFuIHRoZW0gdXAKICAgICAgICAkZXhjbHVkZXMgPSBbICcjKiMnLCAnLiMqJywgJyp+JywgJyoudG1wJywgJyouYmFrJywgJy5naXQqJywgJy5zdm4qJyBdOwogICAgICAgIGlmKCAkdGhpcy0+ZXhjbHVkZXMgKSB7CiAgICAgICAgICAgICR0bXAgPSBleHBsb2RlKCJcbiIsJHRoaXMtPmV4Y2x1ZGVzKTsKICAgICAgICAgICAgZm9yZWFjaCggJHRtcCBhcyAkb25lICkgewogICAgICAgICAgICAgICAgJG9uZSA9IHRyaW0oJG9uZSk7CiAgICAgICAgICAgICAgICBpZiggISRvbmUgKSBjb250aW51ZTsKICAgICAgICAgICAgICAgICRleGNsdWRlc1tdID0gJG9uZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJGRpcl9pdGVyYXRvciA9IG5ldyBcUmVjdXJzaXZlRGlyZWN0b3J5SXRlcmF0b3IoJHN0YXJ0ZGlyKTsKICAgICAgICAkZmlsdGVyX2l0ZXJhdG9yID0gbmV3IFxSZWN1cnNpdmVDYWxsYmFja0ZpbHRlckl0ZXJhdG9yKCRkaXJfaXRlcmF0b3IsZnVuY3Rpb24oJGN1cnJlbnQsJGtleSwkaXRlcmF0b3IpIHVzZSAoJGFkdmFuY2VkLCRleGNsdWRlcywkc3RhcnRkaXIpIHsKICAgICAgICAgICAgICAgICRmbiA9ICRjdXJyZW50LT5nZXRGaWxlbmFtZSgpOwogICAgICAgICAgICAgICAgJGRpcm5hbWUgPSBkaXJuYW1lKCRjdXJyZW50LT5nZXRQYXRobmFtZSgpKTsKICAgICAgICAgICAgICAgIGlmKCAkZm4gPT0gJy4nIHx8ICRmbiA9PSAnLi4nICkgcmV0dXJuIEZBTFNFOwogICAgICAgICAgICAgICAgZm9yZWFjaCggJGV4Y2x1ZGVzIGFzICRvbmUgKSB7CiAgICAgICAgICAgICAgICAgICAgJGJuID0gYmFzZW5hbWUoJG9uZSk7CiAgICAgICAgICAgICAgICAgICAgJGRuID0gZGlybmFtZSgkb25lKTsKICAgICAgICAgICAgICAgICAgICBpZiggISRkbiB8fCAkZG4gPT0gJy4nICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiggZm5tYXRjaCgkb25lLCAkZm4pICkgcmV0dXJuIEZBTFNFOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoICRkaXJuYW1lID09ICIkc3RhcnRkaXIvJGRuIiAmJiBmbm1hdGNoKCRibiwgJGZuKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmKCAhJGFkdmFuY2VkICYmIHN0YXJ0c3dpdGgoJGRpcm5hbWUsIFRNUF9DQUNIRV9MT0NBVElPTikgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgICAgICAgICBpZiggISRhZHZhbmNlZCAmJiBzdGFydHN3aXRoKCRkaXJuYW1lLCBUTVBfVEVNUExBVEVTX0NfTE9DQVRJT04pICkgcmV0dXJuIEZBTFNFOwogICAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7CiAgICAgICAgICAgIH0pOwogICAgICAgICRpdGVyYXRvciA9IG5ldyBcUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcigkZmlsdGVyX2l0ZXJhdG9yKTsKICAgICAgICAkb3V0ID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoKCAkaXRlcmF0b3IgYXMgJGluZm8gKSB7CiAgICAgICAgICAgIGlmKCBpc19kaXIoJGluZm8tPmdldFBhdGhOYW1lKCkpICkgY29udGludWU7CiAgICAgICAgICAgICRvdXRbXSA9IHN1YnN0cigkaW5mby0+Z2V0UGF0aG5hbWUoKSxzdHJsZW4oJHN0YXJ0ZGlyKSsxKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGV4ZWN1dGUoKQogICAgewogICAgICAgICRjb25maWcgPSBcY21zX2NvbmZpZzo6Z2V0X2luc3RhbmNlKCk7CiAgICAgICAgLy8gY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeS4KICAgICAgICAkbW9kID0gXGNtc191dGlsczo6Z2V0X21vZHVsZShNT0RfU05BUFNIT1RNR1IpOwogICAgICAgICRzaWcgPSBtZDUoX19ESVJfXy4kbW9kLT5HZXROYW1lKCkuJG1vZC0+R2V0VmVyc2lvbigpLmdldF91c2VyaWQoRkFMU0UpLnRpbWUoKSk7CgogICAgICAgICRsaXN0ID0gW107CiAgICAgICAgJHRoaXMtPnZlcmJvc2UoJ2xhbmc6Y3JlYXRvcl9nZXRmaWxlbGlzdCcpOwogICAgICAgIGlmKCAkdGhpcy0+ZmlsZXMgKSAkbGlzdCA9ICR0aGlzLT5nZXRfZmlsZV9saXN0KCRjb25maWdbJ3Jvb3RfcGF0aCddKTsKICAgICAgICAkdG1wZmlsZXMgPSBhcnJheSgpOwoKICAgICAgICAvLyBnZW5lcmF0ZSB0aGUgcmVhZG1lCiAgICAgICAgaWYoICR0aGlzLT5maWxlcyAmJiAkdGhpcy0+bXlzcWxkdW1wICYmICR0aGlzLT5yZWFkbWUgKSB7CiAgICAgICAgICAgICR0aGlzLT52ZXJib3NlKCdsYW5nOmNyZWF0b3JfbWtyZWFkbWUnKTsKICAgICAgICAgICAgJHRwbCA9ICRtb2QtPkNyZWF0ZVNtYXJ0eVRlbXBsYXRlKCdyZWFkbWUudHBsJyk7CiAgICAgICAgICAgICR0cGwtPmFzc2lnbignZmlsZXMnLCR0aGlzLT5maWxlcyk7CiAgICAgICAgICAgICR0cGwtPmFzc2lnbignbXlzcWxkdW1wJywkdGhpcy0+bXlzcWxkdW1wKTsKICAgICAgICAgICAgJHRwbC0+YXNzaWduKCdtb2R1bGVfbmFtZScsJG1vZC0+R2V0TmFtZSgpKTsKICAgICAgICAgICAgJHRwbC0+YXNzaWduKCdtb2R1bGVfdmVyc2lvbicsJG1vZC0+R2V0VmVyc2lvbigpKTsKICAgICAgICAgICAgJG91dCA9ICR0cGwtPmZldGNoKCk7CiAgICAgICAgICAgIGZpbGVfcHV0X2NvbnRlbnRzKCRjb25maWdbJ3Jvb3RfcGF0aCddIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICd0bXAnIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICdSRUFETUUtU05BUFNIT1RNR1IudHh0Jywkb3V0KTsKICAgICAgICAgICAgJGxpc3RbXSA9ICd0bXAnIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICdSRUFETUUtU05BUFNIT1RNR1IudHh0JzsKICAgICAgICAgICAgJHRtcGZpbGVzW10gID0gJ3RtcCcgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJ1JFQURNRS1TTkFQU0hPVE1HUi50eHQnOwogICAgICAgIH0KCiAgICAgICAgLy8gZG8gdGhlIG15c3FsIGR1bXAKICAgICAgICAkZHVtcGZpbGUgPSBudWxsOwogICAgICAgIGlmKCAkdGhpcy0+bXlzcWxkdW1wICkgewogICAgICAgICAgICAkdGhpcy0+dmVyYm9zZSgnbGFuZzpjcmVhdG9yX215c3FsZHVtcCcpOwogICAgICAgICAgICAkcGFybXMgPSBhcnJheSgpOwogICAgICAgICAgICAkcGFybXNbJ3NldF9uYW1lcyddID0gJGNvbmZpZ1snc2V0X25hbWVzJ107CiAgICAgICAgICAgICRwYXJtc1snaG9zdCddID0gJGNvbmZpZ1snZGJfaG9zdG5hbWUnXTsKICAgICAgICAgICAgJHBhcm1zWyd1c2VyJ10gPSAkY29uZmlnWydkYl91c2VybmFtZSddOwogICAgICAgICAgICAkcGFybXNbJ3Bhc3N3b3JkJ10gPSAkY29uZmlnWydkYl9wYXNzd29yZCddOwogICAgICAgICAgICAkcGFybXNbJ3VzZXInXSA9ICRjb25maWdbJ2RiX3VzZXJuYW1lJ107CiAgICAgICAgICAgICRwYXJtc1snZGInXSA9ICRjb25maWdbJ2RiX25hbWUnXTsKICAgICAgICAgICAgJHBhcm1zWyd0YWJsZV9zdHJ1Y3R1cmUnXSA9IDE7CiAgICAgICAgICAgICRwYXJtc1sndGFibGVfZGF0YSddID0gMTsKICAgICAgICAgICAgJHBhcm1zWyd2aWV3cyddID0gMTsKICAgICAgICAgICAgJGR1bXBlciA9IG5ldyBzcF9teXNxbGR1bXAoJHBhcm1zKTsKICAgICAgICAgICAgJGR1bXBlci0+ZHVtcGZpbGUgPSAkY29uZmlnWydyb290X3BhdGgnXSAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAndG1wJyAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAnX19teXNxbGR1bXAuc3FsJzsKICAgICAgICAgICAgJGR1bXBlci0+ZHVtcCgpOwogICAgICAgICAgICAkbGlzdFtdID0gJ3RtcCcgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJ19fbXlzcWxkdW1wLnNxbCc7CiAgICAgICAgICAgICR0bXBmaWxlc1tdICA9ICd0bXAnIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICdfX215c3FsZHVtcC5zcWwnOwogICAgICAgICAgICB1bnNldCgkZHVtcGVyKTsKICAgICAgICB9CgogICAgICAgIGlmKCAkdGhpcy0+ZmlsZXMgJiYgJHRoaXMtPm15c3FsZHVtcCApIHsKICAgICAgICAgICAgJHRoaXMtPnZlcmJvc2UoJ2xhbmc6Y3JlYXRvcl9ta3Jlc3RvcmUnKTsKICAgICAgICAgICAgJHJlc3RvcmVfc2NyaXB0ID0gJG1vZC0+R2V0TW9kdWxlUGF0aCgpIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICdwaGFyJyAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAnU25hcHNob3RNZ3ItUmVzdG9yZS5waHAnOwogICAgICAgICAgICBpZiggZmlsZV9leGlzdHMoJHJlc3RvcmVfc2NyaXB0KSApIHsKICAgICAgICAgICAgICAgICRvdXRmaWxlID0gJGNvbmZpZ1sncm9vdF9wYXRoJ10gLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJ3RtcCcgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJ3Jlc3RvcmUucGhwJzsKICAgICAgICAgICAgICAgIEBjb3B5KCRyZXN0b3JlX3NjcmlwdCwkb3V0ZmlsZSk7CiAgICAgICAgICAgICAgICAkbGlzdFtdID0gJ3RtcCcgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJ3Jlc3RvcmUucGhwJzsKICAgICAgICAgICAgICAgICR0bXBmaWxlc1tdID0gJ3RtcCcgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJ3Jlc3RvcmUucGhwJzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gZG8gdGhlIC5zbmFwc2hvdG1nciBkYXRhIGZpbGUKICAgICAgICAkdGhpcy0+dmVyYm9zZSgnbGFuZzpjcmVhdG9yX21ha2VkYXRhZmlsZScpOwogICAgICAgICRtYWluID0gYXJyYXkoKTsKICAgICAgICAkbWFpblsnY3JlYXRlZCddID0gdGltZSgpOwogICAgICAgICRtYWluWydjcmVhdGVkX2J5J10gPSBnZXRfdXNlcmlkKCk7CiAgICAgICAgJG1haW5bJ3ZlcnNpb24nXSA9ICRtb2QtPkdldFZlcnNpb24oKTsKICAgICAgICAkbWFpblsnZmlsZXNfZXhwb3J0ZWQnXSA9ICgkdGhpcy0+ZmlsZXMpID8gJ3llcycgOiAnbm8nOwogICAgICAgICRtYWluWydkYl9leHBvcnRlZCddID0gKCR0aGlzLT5teXNxbGR1bXApID8gJ3llcycgOiAnbm8nOwogICAgICAgICR3ZWJzaXRlID0gYXJyYXkoKTsKICAgICAgICAkd2Vic2l0ZVsnY21zX3ZlcnNpb24nXSA9IENNU19WRVJTSU9OOwogICAgICAgICR3ZWJzaXRlWydyb290X3VybCddID0gJGNvbmZpZ1sncm9vdF91cmwnXTsKICAgICAgICAkd2Vic2l0ZVsncm9vdF9wYXRoJ10gPSAkY29uZmlnWydyb290X3BhdGgnXTsKICAgICAgICAkd2Vic2l0ZVsndXJsX3Jld3JpdGluZyddID0gJGNvbmZpZ1sndXJsX3Jld3JpdGluZyddOwogICAgICAgICR3ZWJzaXRlWydzaXRlbmFtZSddID0gXGNtc19zaXRlcHJlZnM6OmdldCgnc2l0ZW5hbWUnKTsKICAgICAgICAkZGF0YSA9IGFycmF5KCdtYWluJz0+JG1haW4sJ3dlYnNpdGUnPT4kd2Vic2l0ZSk7CiAgICAgICAgJGluaSA9IG5ldyBzZWN1cmVfaW5pX2ZpbGUoJ3RtcCcgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJy5zbmFwc2hvdG1ncicpOwogICAgICAgICRvdXQgPSAkaW5pLT5nZW5lcmF0ZSgkZGF0YSk7CiAgICAgICAgJHNuYXBzaG90bWdyX2ZpbGUgPSAkY29uZmlnWydyb290X3BhdGgnXSAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAndG1wJyAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAnLnNuYXBzaG90bWdyJzsKICAgICAgICBmaWxlX3B1dF9jb250ZW50cygkc25hcHNob3RtZ3JfZmlsZSwkb3V0KTsKICAgICAgICAkbGlzdFtdID0gJ3RtcCcgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJy5zbmFwc2hvdG1ncic7CiAgICAgICAgJHRtcGZpbGVzW10gPSAndG1wJyAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAnLnNuYXBzaG90bWdyJzsKICAgICAgICB1bnNldCgkZGF0YSk7CgogICAgICAgIC8vIGNyZWF0ZSB0aGUgYXJjaGl2ZQogICAgICAgICR0aGlzLT52ZXJib3NlKCdsYW5nOmNyZWF0b3JfbWthcmNoaXZlJyk7CiAgICAgICAgJHppcCA9IG5ldyBcWmlwQXJjaGl2ZSgpOwogICAgICAgICRmbjEgPSB0ZW1wbmFtKFRNUF9DQUNIRV9MT0NBVElPTiwnX3NwJyk7CiAgICAgICAgJGZuID0gJGZuMS4nLnppcCc7CiAgICAgICAgdW5saW5rKCRmbjEpOwogICAgICAgICR6aXAtPm9wZW4oJGZuLFxaaXBBcmNoaXZlOjpDUkVBVEUgfCBcWmlwQXJjaGl2ZTo6T1ZFUldSSVRFKTsKICAgICAgICBmb3JlYWNoKCAkbGlzdCBhcyAkb25lICkgewogICAgICAgICAgICAkc3JjZmlsZSA9ICRjb25maWdbJ3Jvb3RfcGF0aCddIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRvbmU7CiAgICAgICAgICAgICR6aXAtPmFkZEZpbGUoICRzcmNmaWxlLCAkb25lICk7CiAgICAgICAgICAgICR0aGlzLT5kZWJ1ZygnKyAnLiRvbmUpOwogICAgICAgIH0KICAgICAgICAkemlwLT5jbG9zZSgpOwogICAgICAgIHVuc2V0KCRsaXN0KTsKCiAgICAgICAgLy8gY2xlYW51cAogICAgICAgICR0aGlzLT52ZXJib3NlKCdsYW5nOmNyZWF0b3JfY2xlYW51cCcpOwogICAgICAgIGZvcmVhY2goICR0bXBmaWxlcyBhcyAkZmlsZSApIHsKICAgICAgICAgICAgJHRmbiA9IGNtc19qb2luX3BhdGgoJGNvbmZpZ1sncm9vdF9wYXRoJ10sJGZpbGUpOwogICAgICAgICAgICBAdW5saW5rKCR0Zm4pOwogICAgICAgIH0KICAgICAgICBpZiggJHRoaXMtPm15c3FsZHVtcCAmJiAkZHVtcGZpbGUgKSBAdW5saW5rKCRkdW1wZmlsZSk7CiAgICAgICAgaWYoICRzbmFwc2hvdG1ncl9maWxlICkgQHVubGluaygkc25hcHNob3RtZ3JfZmlsZSk7CiAgICAgICAgcmV0dXJuICRmbjsKICAgIH0KICAgIAp9ICMgZW5kIG9mIGNsYXNzCgojCiMgRU9GCiM=]]></data>
	</file>
	<file>
	  <filename>/lib/class.sp_mysqldump.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNuYXBzaG90TWdyCiMgQXV0aG9yOiBSb2xmIFRqYXNzZW5zIChjbXNjYW5iZXNpbXBsZS5vcmcpCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4KIyAoYykgMjAwNCAtIDIwMTEgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIChjKSAyMDExIC0gMjAxOCBieSBUaGUgQ01TIE1hZGUgU2ltcGxlIERldmVsb3BtZW50IFRlYW0KIyAoYykgMjAxOCBhbmQgYmV5b25kIGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRm91bmRhdGlvbgojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9zbmFwc2hvdG1ncgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGb3JrIGZyb20gQ0dTbmFwc2hvdCBtb2R1bGUgYnkgUm9iZXJ0IENhbXBiZWxsIChjYWxndXkxMDAwLmNvbSkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCm5hbWVzcGFjZSBTbmFwc2hvdE1ncjsKCmNsYXNzIHNwX215c3FsZHVtcAp7CiAgICBwcml2YXRlICRfZHVtcGZoOwogICAgcHJpdmF0ZSAkX2Nvbm47CiAgICBwcml2YXRlICRfY29uZmlnOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkcGFyYW1zID0gbnVsbCkKICAgIHsKICAgICAgICAkdGhpcy0+X2NvbmZpZyA9IGFycmF5KCdza2lwX2ZvcmVpZ25fa2V5Jz0+MSwnc2V0X25hbWVzJz0+MSk7CiAgICAgICAgJGNvbmZpZyA9IG51bGw7CiAgICAgICAgaWYoICRwYXJhbXMgaW5zdGFuY2VvZiBcY21zX2NvbmZpZyApIHsKICAgICAgICAgICAgJGNvbmZpZyA9IGFycmF5KCk7CiAgICAgICAgICAgICRjb25maWdbJ2hvc3QnXSA9ICRwYXJhbXNbJ2RiX2hvc3RuYW1lJ107CiAgICAgICAgICAgICRjb25maWdbJ3VzZXInXSA9ICRwYXJhbXNbJ2RiX3VzZXJuYW1lJ107CiAgICAgICAgICAgICRjb25maWdbJ3Bhc3N3b3JkJ10gPSAkcGFyYW1zWydkYl9wYXNzd29yZCddOwogICAgICAgICAgICAkY29uZmlnWydkYiddID0gJHBhcmFtc1snZGJfbmFtZSddOwogICAgICAgICAgICAkY29uZmlnWydwcmVmaXgnXSA9IG51bGw7CiAgICAgICAgfQogICAgICAgIGVsc2VpZiggaXNfYXJyYXkoJHBhcmFtcykgKSB7CiAgICAgICAgICAgICRjb25maWcgPSAkcGFyYW1zOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+X2NvbmZpZyA9IGFycmF5X21lcmdlKCR0aGlzLT5fY29uZmlnLCRjb25maWcpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2dldCgka2V5KQogICAgewogICAgICAgIHN3aXRjaCggJGtleSApIHsKICAgICAgICBjYXNlICdkYl9ob3N0bmFtZSc6CiAgICAgICAgY2FzZSAnaG9zdCc6CiAgICAgICAgY2FzZSAnaG9zdG5hbWUnOgogICAgICAgICAgICBpZiggaXNzZXQoJHRoaXMtPl9jb25maWdbJ2hvc3QnXSkgKSByZXR1cm4gJHRoaXMtPl9jb25maWdbJ2hvc3QnXTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2RiX3VzZXJuYW1lJzoKICAgICAgICBjYXNlICd1c2VyJzoKICAgICAgICBjYXNlICd1c2VybmFtZSc6CiAgICAgICAgICAgIGlmKCBpc3NldCgkdGhpcy0+X2NvbmZpZ1sndXNlciddKSApIHJldHVybiAkdGhpcy0+X2NvbmZpZ1sndXNlciddOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnZGJfcGFzc3dvcmQnOgogICAgICAgIGNhc2UgJ3B3JzoKICAgICAgICBjYXNlICdwYXNzd29yZCc6CiAgICAgICAgICAgIGlmKCBpc3NldCgkdGhpcy0+X2NvbmZpZ1sncGFzc3dvcmQnXSkgKSByZXR1cm4gJHRoaXMtPl9jb25maWdbJ3Bhc3N3b3JkJ107CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdkYl9uYW1lJzoKICAgICAgICBjYXNlICdkYic6CiAgICAgICAgY2FzZSAnZGJuYW1lJzoKICAgICAgICAgICAgaWYoIGlzc2V0KCR0aGlzLT5fY29uZmlnWydkYiddKSApIHJldHVybiAkdGhpcy0+X2NvbmZpZ1snZGInXTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2Ryb3BfdGFibGUnOgogICAgICAgIGNhc2UgJ3RhYmxlX3N0cnVjdHVyZSc6CiAgICAgICAgY2FzZSAndmlld3MnOgogICAgICAgIGNhc2UgJ3RhYmxlX2RhdGEnOgogICAgICAgIGNhc2UgJ3NraXBfZm9yZWlnbl9rZXknOgogICAgICAgIGNhc2UgJ3NldF9uYW1lcyc6CiAgICAgICAgICAgICRvdXQgPSAoaXNzZXQoJHRoaXMtPl9jb25maWdbJGtleV0pKSA/ICR0aGlzLT5fY29uZmlnWyRrZXldIDogVFJVRTsKICAgICAgICAgICAgcmV0dXJuICRvdXQ7CgogICAgICAgIGNhc2UgJ2RiX3ByZWZpeCc6CiAgICAgICAgY2FzZSAncHJlZml4JzoKICAgICAgICAgICAgaWYoIGlzc2V0KCR0aGlzLT5fY29uZmlnWydwcmVmaXgnXSkgKSByZXR1cm4gJHRoaXMtPl9jb25maWdbJ3ByZWZpeCddOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnZHVtcGZpbGUnOgogICAgICAgICAgICBpZiggaXNzZXQoJHRoaXMtPl9jb25maWdbJ2R1bXBmaWxlJ10pICkgcmV0dXJuICR0aGlzLT5fY29uZmlnWydkdW1wZmlsZSddOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbigiJGtleSBpcyBub3QgYSB2YWxpZCBtZW1iZXIgb2YgIi5fX0NMQVNTX18pOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19zZXQoJGtleSwkdmFsKQogICAgewogICAgICAgIHN3aXRjaCggJGtleSApIHsKICAgICAgICBjYXNlICdkYl9ob3N0bmFtZSc6CiAgICAgICAgY2FzZSAnaG9zdCc6CiAgICAgICAgY2FzZSAnaG9zdG5hbWUnOgogICAgICAgICAgICAkdGhpcy0+X2NvbmZpZ1snaG9zdCddID0gdHJpbSgkdmFsKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2RiX3VzZXJuYW1lJzoKICAgICAgICBjYXNlICd1c2VyJzoKICAgICAgICBjYXNlICd1c2VybmFtZSc6CiAgICAgICAgICAgICR0aGlzLT5fY29uZmlnWyd1c2VyJ10gPSB0cmltKCR2YWwpOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnZGJfcGFzc3dvcmQnOgogICAgICAgIGNhc2UgJ3B3JzoKICAgICAgICBjYXNlICdwYXNzd29yZCc6CiAgICAgICAgICAgICR0aGlzLT5fY29uZmlnWydwYXNzd29yZCddID0gdHJpbSgkdmFsKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2RiX25hbWUnOgogICAgICAgIGNhc2UgJ2RiJzoKICAgICAgICBjYXNlICdkYm5hbWUnOgogICAgICAgICAgICAkdGhpcy0+X2NvbmZpZ1snZGInXSA9IHRyaW0oJHZhbCk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdkYl9wcmVmaXgnOgogICAgICAgIGNhc2UgJ3ByZWZpeCc6CiAgICAgICAgICAgICR0aGlzLT5fY29uZmlnWydwcmVmaXgnXSA9IHRyaW0oJHZhbCk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdkcm9wX3RhYmxlJzoKICAgICAgICBjYXNlICd0YWJsZV9zdHJ1Y3R1cmUnOgogICAgICAgIGNhc2UgJ3ZpZXdzJzoKICAgICAgICBjYXNlICd0YWJsZV9kYXRhJzoKICAgICAgICBjYXNlICdza2lwX2ZvcmVpZ25fa2V5JzoKICAgICAgICBjYXNlICdzZXRfbmFtZXMnOgogICAgICAgICAgICAkdGhpcy0+X2NvbmZpZ1ska2V5XSA9IFx4dF91dGlsczo6dG9fYm9vbCgkdmFsKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2R1bXBmaWxlJzoKICAgICAgICAgICAgJHRoaXMtPl9jb25maWdbJ2R1bXBmaWxlJ10gPSB0cmltKCR2YWwpOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbigiJGtleSBpcyBub3QgYSB2YWxpZCBtZW1iZXIgb2YgIi5fX0NMQVNTX18pOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdmFsaWRhdGUoKQogICAgewogICAgICAgIGlmKCAhJHRoaXMtPl9jb25maWdbJ2hvc3QnXSApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigiTm8gZGF0YWJhc2UgaG9zdCBzcGVjaWZpZWQgZm9yICIuX19DTEFTU19fKTsKICAgICAgICBpZiggISR0aGlzLT5fY29uZmlnWyd1c2VyJ10gKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oIk5vIGRhdGFiYXNlIHVzZXJuYW1lIHNwZWNpZmllZCBmb3IgIi5fX0NMQVNTX18pOwogICAgICAgIGlmKCAhJHRoaXMtPl9jb25maWdbJ3Bhc3N3b3JkJ10gKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oIk5vIGRhdGFiYXNlIHBhc3N3b3JkIHNwZWNpZmllZCBmb3IgIi5fX0NMQVNTX18pOwogICAgICAgIGlmKCAhJHRoaXMtPl9jb25maWdbJ2RiJ10gKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oIk5vIGRhdGFiYXNlIG5hbWUgc3BlY2lmaWVkIGZvciAiLl9fQ0xBU1NfXyk7CiAgICAgICAgaWYoICEkdGhpcy0+ZHVtcGZpbGUgKSB7CiAgICAgICAgICAgICRkaXIgPSBzeXNfZ2V0X3RlbXBfZGlyKCk7CiAgICAgICAgICAgIGlmKCAhJGRpciApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignQ291bGQgbm90IGdldCBzeXN0ZW0gdGVtcG9yYXJ5IGRpcmVjdG9yeScpOwogICAgICAgICAgICAkdGhpcy0+ZHVtcGZpbGUgPSAkZGlyLicvJy5tZDUoX19DTEFTU19fLl9fRklMRV9fLnRpbWUoKSkuJy50bXAnOwogICAgICAgIH0KICAgICAgICAkZG4gPSBkaXJuYW1lKCR0aGlzLT5kdW1wZmlsZSk7CiAgICAgICAgaWYoICFpc193cml0YWJsZSgkZG4pICkgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdXZSBkbyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIHdyaXRlIHRvIGRlc3RpbmF0aW9uIGRpcmVjdG9yeScpOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiB3cml0ZSgkdHh0KQogICAgewogICAgICAgIGlmKCAhJHRoaXMtPl9kdW1wZmggKSAkdGhpcy0+X2R1bXBmaCA9IGZvcGVuKCR0aGlzLT5kdW1wZmlsZSwndycpOwogICAgICAgIGlmKCAhJHRoaXMtPl9kdW1wZmggKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1dlIGNvdWxkIG5vdCBvcGVuIHRoZSBkdW1wIGZpbGUgZm9yIHdyaXRpbmcnKTsKCiAgICAgICAgZndyaXRlKCR0aGlzLT5fZHVtcGZoLCR0eHQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBkdW1wKCkKICAgIHsKICAgICAgICAkdGhpcy0+dmFsaWRhdGUoKTsKICAgICAgICAkdGhpcy0+X2Nvbm4gPSBteXNxbGlfY29ubmVjdCgkdGhpcy0+X2NvbmZpZ1snaG9zdCddLCR0aGlzLT5fY29uZmlnWyd1c2VyJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPl9jb25maWdbJ3Bhc3N3b3JkJ10sJHRoaXMtPl9jb25maWdbJ2RiJ10pOwogICAgICAgIGlmKCBteXNxbGlfY29ubmVjdF9lcnJubygpICkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oX19DTEFTU19fLicgY291bGQgbm90IGNvbm5lY3QgdG8gdGhlIGRhdGFiYXNlJyk7CiAgICAgICAgfQoKICAgICAgICBpZiggJHRoaXMtPnNldF9uYW1lcyApIHsKICAgICAgICAgICAgbXlzcWxpX3F1ZXJ5KCR0aGlzLT5fY29ubiwiU0VUIE5BTUVTIHV0ZjgiKTsKICAgICAgICAgICAgJHRoaXMtPndyaXRlKCJTRVQgTkFNRVMgdXRmODtcbiIpOwogICAgICAgIH0KICAgICAgICBpZiggJHRoaXMtPnNraXBfZm9yZWlnbl9rZXkgKSAkdGhpcy0+d3JpdGUoIlNFVCBGT1JFSUdOX0tFWV9DSEVDS1M9MDtcbiIpOwoKICAgICAgICAkdGFibGVzID0gW107CiAgICAgICAgJHZpZXdzID0gW107CiAgICAgICAgJHNxbCA9ICdTSE9XIFRBQkxFUzsnOwogICAgICAgICRyZXMgPSBteXNxbGlfcXVlcnkoJHRoaXMtPl9jb25uLCRzcWwpOwogICAgICAgIGlmKCAhJHJlcyApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbihfX0NMQVNTX18uJyBjb3VsZCBub3QgZ2V0IHRhYmxlIGxpc3QnKTsKICAgICAgICB3aGlsZSggJHJvdyA9IG15c3FsaV9mZXRjaF9yb3coJHJlcykgKSB7CiAgICAgICAgICAgICR0YWJsZXNbXSA9ICRyb3dbMF07CiAgICAgICAgfQoKICAgICAgICAkc3FsID0gJ1NIT1cgRlVMTCBUQUJMRVMgSU4gJy4kdGhpcy0+X2NvbmZpZ1snZGInXS4nIFdIRVJFIFRBQkxFX1RZUEUgTElLRSBcJ1ZJRVdcJyc7CiAgICAgICAgJHJlcyA9IG15c3FsaV9xdWVyeSgkdGhpcy0+X2Nvbm4sJHNxbCk7CiAgICAgICAgaWYoICRyZXMgKSB7CiAgICAgICAgICAgIHdoaWxlKCAkcm93ID0gbXlzcWxpX2ZldGNoX3JvdygkcmVzKSApIHsKICAgICAgICAgICAgICAgICR2aWV3c1tdID0gJHJvd1swXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYoICR0aGlzLT50YWJsZV9zdHJ1Y3R1cmUgJiYgY291bnQoJHRhYmxlcykgKSB7CiAgICAgICAgICAgIGZvcmVhY2goICR0YWJsZXMgYXMgJHRhYmxlICkgewogICAgICAgICAgICAgICAgaWYoICFpbl9hcnJheSgkdGFibGUsJHZpZXdzKSApIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZG9fdGFibGVfc3RydWN0dXJlKCR0YWJsZSk7CiAgICAgICAgICAgICAgICAgICAgaWYoICR0aGlzLT50YWJsZV9kYXRhICkgJHRoaXMtPmRvX3RhYmxlX2RhdGEoJHRhYmxlKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiggJHRoaXMtPnZpZXdzKSB7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmRvX3ZpZXcoJHRhYmxlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgbXlzcWxpX2Nsb3NlKCR0aGlzLT5fY29ubik7CiAgICAgICAgJHRoaXMtPl9jb25uID0gbnVsbDsKICAgICAgICBmY2xvc2UoJHRoaXMtPl9kdW1wZmgpOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBkb192aWV3KCR0YWJsZSkKICAgIHsKICAgICAgICAkdHh0ID0gIi8qIHN0cnVjdHVyZSBmb3IgdmlldyBgJHRhYmxlYCAqL1xuIjsKICAgICAgICBpZiggJHRoaXMtPmRyb3BfdGFibGUgKSB7CiAgICAgICAgICAgICR0eHQgLj0gIkRST1AgVklFVyBJRiBFWElTVFMgYCR0YWJsZWA7XG5cbiI7CiAgICAgICAgfQogICAgICAgICRzcWwgPSAiU0hPVyBDUkVBVEUgVklFVyBgJHRhYmxlYDsiOwogICAgICAgICRyZXMgPSBteXNxbGlfcXVlcnkoJHRoaXMtPl9jb25uLCRzcWwpOwogICAgICAgIGlmKCAkcmVzICkgewogICAgICAgICAgICBpZiggJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcmVzKSApIHsKICAgICAgICAgICAgICAgICR0bXAgPSAkcm93WydDcmVhdGUgVmlldyddOwogICAgICAgICAgICAgICAgLy8gZGVsZXRlIERFRklORVIgLi4uLiBERUZJTkVSCiAgICAgICAgICAgICAgICAka2V5ID0gJ0RFRklORVInOwogICAgICAgICAgICAgICAgJHNfcG9zID0gc3RycG9zKCR0bXAsJGtleSk7CiAgICAgICAgICAgICAgICAkZV9wb3MgPSBzdHJycG9zKCR0bXAsJGtleSk7CiAgICAgICAgICAgICAgICBpZiggJHNfcG9zICE9PSBGQUxTRSAmJiAkZV9wb3MgIT09IEZBTFNFICkgewogICAgICAgICAgICAgICAgICAgICR0bXAyID0gc3Vic3RyKCR0bXAsMCwkc19wb3MpOwogICAgICAgICAgICAgICAgICAgICR0bXAyIC49IHN1YnN0cigkdG1wLCRlX3BvcytzdHJsZW4oJGtleSkpOwogICAgICAgICAgICAgICAgICAgICR0bXAgPSAkdG1wMjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICR0eHQgLj0gJHRtcC4iO1xuXG4iOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG15c3FsaV9mcmVlX3Jlc3VsdCgkcmVzKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPndyaXRlKCR0eHQpOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBkb190YWJsZV9zdHJ1Y3R1cmUoJHRhYmxlKQogICAgewogICAgICAgICR0eHQgPSAiLyogVGFibGUgc3RydWN0dXJlIGZvciB0YWJsZSBgJHRhYmxlYCAqL1xuIjsKICAgICAgICBpZiggJHRoaXMtPmRyb3BfdGFibGUgKSB7CiAgICAgICAgICAgICR0eHQgLj0gIkRST1AgVEFCTEUgSUYgRVhJU1RTIGAkdGFibGVgO1xuXG4iOwogICAgICAgIH0KICAgICAgICAkc3FsID0gIlNIT1cgQ1JFQVRFIFRBQkxFIGAkdGFibGVgOyI7CiAgICAgICAgJHJlcyA9IG15c3FsaV9xdWVyeSgkdGhpcy0+X2Nvbm4sJHNxbCk7CiAgICAgICAgaWYoICRyZXMgKSB7CiAgICAgICAgICAgIGlmKCAkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRyZXMpICkgewogICAgICAgICAgICAgICAgJHR4dCAuPSAkcm93WydDcmVhdGUgVGFibGUnXS4iO1xuXG4iOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG15c3FsaV9mcmVlX3Jlc3VsdCgkcmVzKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPndyaXRlKCR0eHQpOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBkb190YWJsZV9kYXRhKCR0YWJsZSkKICAgIHsKICAgICAgICAkdHh0ID0gJyc7CiAgICAgICAgJHNxbCA9ICJTRUxFQ1QgKiBGUk9NIGAkdGFibGVgOyI7CiAgICAgICAgJHJlc3VsdCA9IG15c3FsaV9xdWVyeSgkdGhpcy0+X2Nvbm4sJHNxbCk7CiAgICAgICAgaWYoICEkcmVzdWx0ICkgcmV0dXJuOwoKICAgICAgICAkbnVtX3Jvd3MgPSBteXNxbGlfbnVtX3Jvd3MoJHJlc3VsdCk7CiAgICAgICAgJG51bV9maWVsZHMgPSBteXNxbGlfbnVtX2ZpZWxkcygkcmVzdWx0KTsKCiAgICAgICAgaWYoICRudW1fcm93cyApIHsKICAgICAgICAgICAgJHR4dCAuPSAiLyogdGFibGUgY29udGVudHMgZm9yIHRhYmxlIGAkdGFibGVgICovXG4iOwoKICAgICAgICAgICAgLy8gZ2V0IGNvbHVtdW4gdHlwZXMKICAgICAgICAgICAgJGZpZWxkX3R5cGUgPSBhcnJheSgpOwogICAgICAgICAgICBmb3IoICRpID0gMDsgJGkgPCAkbnVtX2ZpZWxkczsgJGkrKyApIHsKICAgICAgICAgICAgICAgICRtZXRhID0gbXlzcWxpX2ZldGNoX2ZpZWxkKCRyZXN1bHQpOwogICAgICAgICAgICAgICAgJGZpZWxkX3R5cGVbXSA9ICRtZXRhLT50eXBlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkdHh0IC49ICJJTlNFUlQgSU5UTyBgJHRhYmxlYCB2YWx1ZXNcbiI7CiAgICAgICAgICAgIGZvciggJHIgPSAwOyAkciA8ICRudW1fcm93czsgJHIrKyApIHsKICAgICAgICAgICAgICAgICRyb3cgPSBteXNxbGlfZmV0Y2hfcm93KCRyZXN1bHQpOwogICAgICAgICAgICAgICAgJGNvbHMgPSBhcnJheSgpOwogICAgICAgICAgICAgICAgZm9yKCAkaSA9IDA7ICRpIDwgJG51bV9maWVsZHM7ICRpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoIGlzX251bGwoJHJvd1skaV0pICkgewogICAgICAgICAgICAgICAgICAgICAgICAkY29sc1tdID0gJ251bGwnOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCggJGZpZWxkX3R5cGVbJGldICkgewogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNToKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA4OgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDk6CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjQ2OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbHNbXSA9ICRyb3dbJGldOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Jsb2InOgogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbHNbXSA9ICInIi5teXNxbGlfcmVhbF9lc2NhcGVfc3RyaW5nKCR0aGlzLT5fY29ubiwkcm93WyRpXSkuIiciOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkdHh0IC49ICcoJy5pbXBsb2RlKCcsJywkY29scykuJyknOwogICAgICAgICAgICAgICAgaWYoICRyIDwgJG51bV9yb3dzIC0gMSApIHsKICAgICAgICAgICAgICAgICAgICAkdHh0IC49ICIsIFxuIjsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJHR4dCAuPSAiOyBcbiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG15c3FsaV9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsKICAgICAgICAkdHh0IC49ICJcbiI7CiAgICAgICAgJHRoaXMtPndyaXRlKCR0eHQpOwogICAgfQogICAgCn0gLy8gZW5kIG9mIGNsYXNzCgojCiMgRU9GCiM=]]></data>
	</file>
	<file>
	  <filename>/lib/class.stderr_logger.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNuYXBzaG90TWdyCiMgQXV0aG9yOiBSb2xmIFRqYXNzZW5zIChjbXNjYW5iZXNpbXBsZS5vcmcpCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4KIyAoYykgMjAwNCAtIDIwMTEgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIChjKSAyMDExIC0gMjAxOCBieSBUaGUgQ01TIE1hZGUgU2ltcGxlIERldmVsb3BtZW50IFRlYW0KIyAoYykgMjAxOCBhbmQgYmV5b25kIGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRm91bmRhdGlvbgojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9zbmFwc2hvdG1ncgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGb3JrIGZyb20gQ0dTbmFwc2hvdCBtb2R1bGUgYnkgUm9iZXJ0IENhbXBiZWxsIChjYWxndXkxMDAwLmNvbSkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCm5hbWVzcGFjZSBTbmFwc2hvdE1ncjsKCmNsYXNzIHN0ZGVycl9sb2dnZXIgZXh0ZW5kcyBsb2dnZXIKewogICAgcHJpdmF0ZSAkX2x2bDsKCiAgICBjb25zdCBMVkxfRkFUQUwgPSAwOwogICAgY29uc3QgTFZMX0VSUk9SID0gMTsKICAgIGNvbnN0IExWTF9XQVJOSU5HID0gMjsKICAgIGNvbnN0IExWTF9JTkZPID0gMzsKICAgIGNvbnN0IExWTF9WRVJCT1NFID0gNDsKICAgIGNvbnN0IExWTF9ERUJVRyA9IDU7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRsdmwgPSBzZWxmOjpMVkxfSU5GTykKICAgIHsKICAgICAgICAkdGhpcy0+X2x2bCA9ICRsdmw7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGxldmVsKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9sdmw7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHdyaXRlKCRzdHIpCiAgICB7CiAgICAgICAgJHN0ciA9IHRyaW0oJHN0cik7CiAgICAgICAgaWYoICEkc3RyICkgcmV0dXJuOwogICAgICAgIGlmKCAhZW5kc3dpdGgoICRzdHIsICJcbiIpICkgJHN0ciAuPSAiXG4iOwogICAgICAgIGZ3cml0ZShTVERFUlIsJHN0cik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGRlYnVnKCRzdHIpCiAgICB7CiAgICAgICAgaWYoICR0aGlzLT5sZXZlbCgpIDwgc2VsZjo6TFZMX0RFQlVHICkgcmV0dXJuOwogICAgICAgICR0aGlzLT53cml0ZSgnREVCVUc6ICcuJHN0cik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHZlcmJvc2UoJHN0cikKICAgIHsKICAgICAgICBpZiggJHRoaXMtPmxldmVsKCkgPCBzZWxmOjpMVkxfVkVSQk9TRSApIHJldHVybjsKICAgICAgICAkdGhpcy0+d3JpdGUoJ1ZFUkJPU0U6ICcuJHN0cik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGluZm8oJHN0cikKICAgIHsKICAgICAgICBpZiggJHRoaXMtPmxldmVsKCkgPCBzZWxmOjpMVkxfSU5GTyApIHJldHVybjsKICAgICAgICAkdGhpcy0+d3JpdGUoJ0lORk86ICcuJHN0cik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdhcm5pbmcoJHN0cikKICAgIHsKICAgICAgICBpZiggJHRoaXMtPmxldmVsKCkgPCBzZWxmOjpMVkxfV0FSTklORyApIHJldHVybjsKICAgICAgICAkdGhpcy0+d3JpdGUoJ1dBUk5JTkc6ICcuJHN0cik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGVycm9yKCRzdHIpCiAgICB7CiAgICAgICAgaWYoICR0aGlzLT5sZXZlbCgpIDwgc2VsZjo6TFZMX0VSUk9SICkgcmV0dXJuOwogICAgICAgICR0aGlzLT53cml0ZSgnRVJST1I6ICcuJHN0cik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGZhdGFsKCRzdHIpCiAgICB7CiAgICAgICAgaWYoICR0aGlzLT5sZXZlbCgpIDwgc2VsZjo6TFZMX0ZBVEFMICkgcmV0dXJuOwogICAgICAgICR0aGlzLT53cml0ZSgnRkFUQUw6ICcuJHN0cik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGRpc3BsYXlfcHJvZ3Jlc3MoJHBlcmNlbnQpCiAgICB7CiAgICAgICAgLy8gZG8gbm90aGluZy4KICAgIH0KCn0gLy8gZW5kIG9mIGNsYXNzCgojCiMgRU9GCiM=]]></data>
	</file>
	<file>
	  <filename>/lib/Commands/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/Commands/class.Dump.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNuYXBzaG90TWdyCiMgQXV0aG9yOiBSb2xmIFRqYXNzZW5zIChjbXNjYW5iZXNpbXBsZS5vcmcpCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4KIyAoYykgMjAwNCAtIDIwMTEgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIChjKSAyMDExIC0gMjAxOCBieSBUaGUgQ01TIE1hZGUgU2ltcGxlIERldmVsb3BtZW50IFRlYW0KIyAoYykgMjAxOCBhbmQgYmV5b25kIGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRm91bmRhdGlvbgojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9zbmFwc2hvdG1ncgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGb3JrIGZyb20gQ0dTbmFwc2hvdCBtb2R1bGUgYnkgUm9iZXJ0IENhbXBiZWxsIChjYWxndXkxMDAwLmNvbSkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCm5hbWVzcGFjZSBTbmFwc2hvdE1nclxDb21tYW5kczsKCnVzZSBcQ01TTVNcQ0xJXEFwcDsKdXNlIFxDTVNNU1xDTElcR2V0T3B0RXh0XENvbW1hbmQ7CnVzZSBcQ01TTVNcQ0xJXEdldE9wdEV4dFxPcHRpb247CnVzZSBcQ01TTVNcQ0xJXEdldE9wdEV4dFxHZXRPcHQ7CnVzZSBcR2V0T3B0XE9wZXJhbmQ7CnVzZSBcU25hcHNob3RNZ3JcZmFuY3lfc3RkZXJyX2xvZ2dlcjsKdXNlIFxTbmFwc2hvdE1nclxzbmFwc2hvdF9jcmVhdG9yOwoKY2xhc3MgRHVtcCBleHRlbmRzIENvbW1hbmQKewogICAgcHJvdGVjdGVkICRtb2Q7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCBcU25hcHNob3RNZ3IgJG1vZCwgQXBwICRhcHAgKQogICAgewogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoICRhcHAsICdzbmFwc2hvdG1nci1kdW1wJyApOwogICAgICAgICR0aGlzLT5TZXREZXNjcmlwdGlvbignVXNlIFNuYXBzaG90TWdyIHRvIGdlbmVyYXRlIGEgc2l0ZSBkdW1wJyk7CiAgICAgICAgJHRoaXMtPmFkZE9wdGlvbiggT3B0aW9uOjpDcmVhdGUoJ3YnLCd2ZXJib3NlJyktPnNldERlc2NyaXB0aW9uKCdFbmFibGUgVmVyYm9zZSBtb2RlJykpOwogICAgICAgICR0aGlzLT5hZGRPcHRpb24oIE9wdGlvbjo6Q3JlYXRlKG51bGwsJ2RlYnVnJyktPnNldERlc2NyaXB0aW9uKCdFbmFibGUgRGVidWcgbW9kZScpKTsKICAgICAgICAkdGhpcy0+YWRkT3B0aW9uKCBPcHRpb246OkNyZWF0ZSgneCcsJ2V4Y2x1ZGUnLCBHZXRPcHQ6Ok1VTFRJUExFX0FSR1VNRU5UICktPnNldERlc2NyaXB0aW9uKCdFeGNsdWRlIGEgZmlsZSBvciBwYXR0ZXJuJykgKTsKICAgICAgICAkdGhpcy0+bW9kID0gJG1vZDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFuZGxlKCkKICAgIHsKICAgICAgICAkbHZsID0gZmFuY3lfc3RkZXJyX2xvZ2dlcjo6TFZMX0lORk87CiAgICAgICAgJHZlcmJvc2UgPSAkdGhpcy0+Z2V0T3B0aW9uKCd2ZXJib3NlJyktPnZhbHVlKCk7CiAgICAgICAgaWYoICR2ZXJib3NlICkgJGx2bCA9IGZhbmN5X3N0ZGVycl9sb2dnZXI6OkxWTF9WRVJCT1NFOwogICAgICAgICRkZWJ1ZyA9ICR0aGlzLT5HZXRPcHRpb24oJ2RlYnVnJyktPnZhbHVlKCk7CiAgICAgICAgaWYoICRkZWJ1ZyApICRsdmwgPSBmYW5jeV9zdGRlcnJfbG9nZ2VyOjpMVkxfREVCVUc7CiAgICAgICAgJGV4Y2x1ZGVzID0gJHRoaXMtPmdldE9wdGlvbignZXhjbHVkZScpLT52YWx1ZSgpOwogICAgICAgICRsb2dnZXIgPSBuZXcgZmFuY3lfc3RkZXJyX2xvZ2dlcigkdGhpcy0+bW9kLCAkbHZsICk7CiAgICAgICAgJGNyZWF0b3IgPSBuZXcgc25hcHNob3RfY3JlYXRvcjsKICAgICAgICAkY3JlYXRvci0+bXlzcWxkdW1wID0gVFJVRTsKICAgICAgICAkY3JlYXRvci0+ZmlsZXMgPSBUUlVFOwogICAgICAgIGlmKCAhZW1wdHkoJGV4Y2x1ZGVzKSApIHsKICAgICAgICAgICAgJGNyZWF0b3ItPmV4Y2x1ZGVzID0gaW1wbG9kZSgiXG4iLCRleGNsdWRlcyk7CiAgICAgICAgfQogICAgICAgICRjcmVhdG9yLT5zZXRfbG9nZ2VyKCRsb2dnZXIpOwogICAgICAgICRmbiA9ICRjcmVhdG9yLT5leGVjdXRlKCk7CiAgICAgICAgZWNobyAkZm4uIlxuIjsKICAgIH0KCn0gLy8gZW5kIG9mIGNsYXNzCgojCiMgRU9GCiM=]]></data>
	</file>
	<file>
	  <filename>/lib/Commands/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/lib/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/lib/trait.loggable.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNuYXBzaG90TWdyCiMgQXV0aG9yOiBSb2xmIFRqYXNzZW5zIChjbXNjYW5iZXNpbXBsZS5vcmcpCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4KIyAoYykgMjAwNCAtIDIwMTEgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIChjKSAyMDExIC0gMjAxOCBieSBUaGUgQ01TIE1hZGUgU2ltcGxlIERldmVsb3BtZW50IFRlYW0KIyAoYykgMjAxOCBhbmQgYmV5b25kIGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRm91bmRhdGlvbgojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9zbmFwc2hvdG1ncgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGb3JrIGZyb20gQ0dTbmFwc2hvdCBtb2R1bGUgYnkgUm9iZXJ0IENhbXBiZWxsIChjYWxndXkxMDAwLmNvbSkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCm5hbWVzcGFjZSBTbmFwc2hvdE1ncjsKCnRyYWl0IGxvZ2dhYmxlCnsKICAgIHByaXZhdGUgJF9sb2dnZXI7CgogICAgcHVibGljIGZ1bmN0aW9uIHNldF9sb2dnZXIobG9nZ2VyICRsb2dnZXIpCiAgICB7CiAgICAgICAgJHRoaXMtPl9sb2dnZXIgPSAkbG9nZ2VyOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhZHZhbmNlKCkKICAgIHsKICAgICAgICBpZiggJHRoaXMtPl9sb2dnZXIgKSAkdGhpcy0+X2xvZ2dlci0+YWR2YW5jZSgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBkZWJ1Zygkc3RyKQogICAgewogICAgICAgIGlmKCAkdGhpcy0+X2xvZ2dlciApICR0aGlzLT5fbG9nZ2VyLT5kZWJ1Zygkc3RyKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdmVyYm9zZSgkc3RyKQogICAgewogICAgICAgIGlmKCAkdGhpcy0+X2xvZ2dlciApICR0aGlzLT5fbG9nZ2VyLT52ZXJib3NlKCRzdHIpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpbmZvKCRzdHIpCiAgICB7CiAgICAgICAgaWYoICR0aGlzLT5fbG9nZ2VyICkgJHRoaXMtPl9sb2dnZXItPmluZm8oJHN0cik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdhcm5pbmcoJHN0cikKICAgIHsKICAgICAgICBpZiggJHRoaXMtPl9sb2dnZXIgKSAkdGhpcy0+X2xvZ2dlci0+d2FybmluZygkc3RyKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZXJyb3IoJHN0cikKICAgIHsKICAgICAgICBpZiggJHRoaXMtPl9sb2dnZXIgKSAkdGhpcy0+X2xvZ2dlci0+ZXJyb3IoJHN0cik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGZhdGFsKCRzdHIpCiAgICB7CiAgICAgICAgaWYoICR0aGlzLT5fbG9nZ2VyICkgJHRoaXMtPl9sb2dnZXItPmZhdGFsKCRzdHIpOwogICAgfQoKfSAvLyBlbmQgb2YgdHJhaXQKCiMKIyBFT0YKIw==]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNuYXBzaG90TWdyCiMgQXV0aG9yOiBSb2xmIFRqYXNzZW5zIChjbXNjYW5iZXNpbXBsZS5vcmcpCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4KIyAoYykgMjAwNCAtIDIwMTEgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIChjKSAyMDExIC0gMjAxOCBieSBUaGUgQ01TIE1hZGUgU2ltcGxlIERldmVsb3BtZW50IFRlYW0KIyAoYykgMjAxOCBhbmQgYmV5b25kIGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRm91bmRhdGlvbgojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9zbmFwc2hvdG1ncgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGb3JrIGZyb20gQ0dTbmFwc2hvdCBtb2R1bGUgYnkgUm9iZXJ0IENhbXBiZWxsIChjYWxndXkxMDAwLmNvbSkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmlmICggIWZ1bmN0aW9uX2V4aXN0cygnY21zbXMnKSApIGV4aXQ7CgovLyBkbyBzeXN0ZW1zIGNoZWNrcwp0cnkgewogICAgaWYoICFjbGFzc19leGlzdHMoJ1xaaXBBcmNoaXZlJykgKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1lvdXIgaW5zdGFsbGF0aW9uIGRvZXMgbm90IHN1cHBvcnQgdGhlIFBIUCBaaXBBcmNoaXZlIGNsYXNzJyk7CiAgICAkZGlyID0gc3lzX2dldF90ZW1wX2RpcigpOwogICAgaWYoICEkZGlyICkgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdZb3VyIGluc3RhbGxhdGlvbiBkb2VzIG5vdCByZXR1cm4gYSB2YWxpZCBzeXN0ZW0gdGVtcG9yYXJ5IGRpcmVjdG9yeScpOwogICAgaWYoICFpc193cml0YWJsZSgkZGlyKSApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignWW91ciBpbnN0YWxsYXRpb24gY2Fubm90IHdyaXRlIHRvIHRoZSBzeXN0ZW0gdGVtcG9yYXJ5IGRpcmVjdG9yeScpOwoKICAgICR0aGlzLT5DcmVhdGVQZXJtaXNzaW9uKCdTbmFwc2hvdE1ncicsJ1NuYXBzaG90TWdyJyk7CiAgICAkdGhpcy0+Q3JlYXRlRXZlbnQoJ0JlZm9yZUNyZWF0ZVNuYXBzaG90Jyk7Cn0KCmNhdGNoKCBcRXhjZXB0aW9uICRlICkgewogICAgYXVkaXQoJycsJHRoaXMtPkdldE5hbWUoKSwnSW5zdGFsbGF0aW9uIFByb2JsZW06ICcuJGUtPkdldE1lc3NhZ2UoKSk7CiAgICBkZWJ1Z190b19sb2coX19GSUxFX18pOwogICAgZGVidWdfdG9fbG9nKCRlLT5HZXRNZXNzYWdlKCkpOwogICAgcmV0dXJuICRlLT5HZXRNZXNzYWdlKCk7Cn0KCiMKIyBFT0YKIw==]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNuYXBzaG90TWdyCiMgQXV0aG9yOiBSb2xmIFRqYXNzZW5zIChjbXNjYW5iZXNpbXBsZS5vcmcpCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4KIyAoYykgMjAwNCAtIDIwMTEgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIChjKSAyMDExIC0gMjAxOCBieSBUaGUgQ01TIE1hZGUgU2ltcGxlIERldmVsb3BtZW50IFRlYW0KIyAoYykgMjAxOCBhbmQgYmV5b25kIGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRm91bmRhdGlvbgojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9zbmFwc2hvdG1ncgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGb3JrIGZyb20gQ0dTbmFwc2hvdCBtb2R1bGUgYnkgUm9iZXJ0IENhbXBiZWxsIChjYWxndXkxMDAwLmNvbSkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmlmICggIWZ1bmN0aW9uX2V4aXN0cygnY21zbXMnKSApIGV4aXQ7CgokdGhpcy0+UmVtb3ZlUGVybWlzc2lvbignU25hcHNob3RNZ3InKTsKJHRoaXMtPlJlbW92ZUV2ZW50KCdCZWZvcmVDcmVhdGVTbmFwc2hvdCcpOwoKIwojIEVPRgoj]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNuYXBzaG90TWdyCiMgQXV0aG9yOiBSb2xmIFRqYXNzZW5zIChjbXNjYW5iZXNpbXBsZS5vcmcpCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4KIyAoYykgMjAwNCAtIDIwMTEgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIChjKSAyMDExIC0gMjAxOCBieSBUaGUgQ01TIE1hZGUgU2ltcGxlIERldmVsb3BtZW50IFRlYW0KIyAoYykgMjAxOCBhbmQgYmV5b25kIGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRm91bmRhdGlvbgojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9zbmFwc2hvdG1ncgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGb3JrIGZyb20gQ0dTbmFwc2hvdCBtb2R1bGUgYnkgUm9iZXJ0IENhbXBiZWxsIChjYWxndXkxMDAwLmNvbSkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmlmICggIWZ1bmN0aW9uX2V4aXN0cygnY21zbXMnKSApIGV4aXQ7CgoKIwojIEVPRgoj]]></data>
	</file>
	<file>
	  <filename>/moduleinfo.ini</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[W21vZHVsZV0KbmFtZSA9ICJTbmFwc2hvdE1nciIKdmVyc2lvbiA9ICIxLjAuMSIKYXV0aG9yID0gIlJvbGYgVGphc3NlbnMiCmF1dGhvcmVtYWlsID0gImluZm8gW2F0XSBjbXNjYW5iZXNpbXBsZSBbZG90XSBvcmciCm1pbmNtc3ZlcnNpb24gPSAyLjIKbGF6eWxvYWRhZG1pbiA9IDEKbGF6eWxvYWRmcm9udGVuZCA9IDEKW2RlcGVuZHNdCkNNU01TRXh0ID0gMS4wCg==]]></data>
	</file>
	<file>
	  <filename>/phar/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/phar/build.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNuYXBzaG90TWdyCiMgQXV0aG9yOiBSb2xmIFRqYXNzZW5zIChjbXNjYW5iZXNpbXBsZS5vcmcpCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4KIyAoYykgMjAwNCAtIDIwMTEgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIChjKSAyMDExIC0gMjAxOCBieSBUaGUgQ01TIE1hZGUgU2ltcGxlIERldmVsb3BtZW50IFRlYW0KIyAoYykgMjAxOCBhbmQgYmV5b25kIGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRm91bmRhdGlvbgojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9zbmFwc2hvdG1ncgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGb3JrIGZyb20gQ0dTbmFwc2hvdCBtb2R1bGUgYnkgUm9iZXJ0IENhbXBiZWxsIChjYWxndXkxMDAwLmNvbSkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkB1bmxpbmsoJ1NuYXBzaG90TWdyLVJlc3RvcmUucGhwJyk7CgokcGhhcjIgPSBuZXcgUGhhcignU25hcHNob3RNZ3ItUmVzdG9yZS5waGFyJywgMCwgJ1NuYXBzaG90TWdyLVJlc3RvcmUucGhhcicpOwoKLy8gYWRkIGFsbCBmaWxlcyBpbiB0aGUgcHJvamVjdCwgb25seSBpbmNsdWRlIHBocCBmaWxlcwokcGhhcjItPmJ1aWxkRnJvbURpcmVjdG9yeShkaXJuYW1lKF9fRklMRV9fKSk7CiRwaGFyMi0+c2V0U3R1YigkcGhhcjItPmNyZWF0ZURlZmF1bHRTdHViKCdjbGkucGhwJywgJ3d3dy5waHAnKSk7CgpyZW5hbWUoJ1NuYXBzaG90TWdyLVJlc3RvcmUucGhhcicsJ1NuYXBzaG90TWdyLVJlc3RvcmUucGhwJyk7CgojCiMgRU9GCiM=]]></data>
	</file>
	<file>
	  <filename>/phar/cli.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNuYXBzaG90TWdyCiMgQXV0aG9yOiBSb2xmIFRqYXNzZW5zIChjbXNjYW5iZXNpbXBsZS5vcmcpCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4KIyAoYykgMjAwNCAtIDIwMTEgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIChjKSAyMDExIC0gMjAxOCBieSBUaGUgQ01TIE1hZGUgU2ltcGxlIERldmVsb3BtZW50IFRlYW0KIyAoYykgMjAxOCBhbmQgYmV5b25kIGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRm91bmRhdGlvbgojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9zbmFwc2hvdG1ncgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGb3JrIGZyb20gQ0dTbmFwc2hvdCBtb2R1bGUgYnkgUm9iZXJ0IENhbXBiZWxsIChjYWxndXkxMDAwLmNvbSkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmluY2x1ZGVfb25jZSgnbGliJyAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAndXRpbHMucGhwJyk7CmluY2x1ZGVfb25jZSgnbGliJyAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAnZGJfdXRpbHMucGhwJyk7CmluY2x1ZGVfb25jZSgnbGliJyAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAnY2xhc3MuY29tcGF0aWJpbGl0eV90ZXN0ZXIucGhwJyk7Cgokc2NyaXB0ID0gYmFzZW5hbWUoJGFyZ3ZbMF0pOwokZGJjb25maWcgPSBudWxsOyAvLyBkYiBjb25maWcgYXJyYXkKJGRiZmlsZSA9IG51bGw7IC8vIHBhdGggdG8gaW1wb3J0IGZpbGUKJHNuYXBzaG90ID0gbnVsbDsgLy8gcGF0aG5hbWUgdG8gc25hcHNob3QKJG9sZF9jb25maWcgPSBudWxsOyAvLyBvbGQgY29uZmlnIHZhbHVlcwokYXJjaCA9IG51bGw7ICAvLyB0aGUgYXJjaGl2ZSBvYmplY3QKJGRpciA9IGdldGN3ZCgpOwokY29uZmlnX2ZpbGUgPSBudWxsOwoKJG91dCA9IDw8PEVPVAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cj09PSBTbmFwc2hvdE1nciBSZXN0b3JlIFV0aWxpdHkgPT09ClRoaXMgcHJvZ3JhbSB3aWxsIGF0dGVtcHQgdG8gcmVzdG9yZSBhIFNuYXBzaG90TWdyIGZpbGUgaW50byBhIHdvcmtpbmcgQ01TTVMgRGlzdHJpYnV0aW9uLgpUaGVyZSBhcmUgYSBudW1iZXIgb2Ygc3RlcHMgaW4gdGhpcyBvcGVyYXRpb246CjEuICBEbyBhIGJhc2ljIGNoZWNrIGZvciBzeXN0ZW0gY29tcGF0aWJpbGl0eQoyLiAgQXNrIGZvciwgYW5kIHZhbGlkYXRlIHRoZSBTbmFwc2hvdE1nciBmaWxlCjMuICBDaGVjayBmb3IgYW4gZW1wdHkgZGlyZWN0b3J5Lgo0LiAgR2V0IGFuZCB2YWxpZGF0ZSBkYXRhYmFzZSBjcmVkZW50aWFscywgYW5kIHRoZSBkYXRhYmFzZQo1LiAgRXh0cmFjdCBTbmFwc2hvdE1nciBGaWxlcwo2LiAgUmVzdG9yZSB0aGUgZGF0YWJhc2UKNy4gIFNlY3VyZSB0aGUgaW5zdGFsbGF0aW9uCjguICBHZW5lcmF0ZSBhIG5ldyBjb25maWcucGhwCgpUaGVyZSBhcmUgc3RlcHMgeW91IG1heSBuZWVkIHRvIHRha2UgYWZ0ZXIgdGhpcyBvcGVyYXRpb24gaXMgY29tcGxldGUgdG8gZW5zdXJlIGEgd29ya2luZyBzeXN0ZW0sClBhcnRpY3VsYXJseSBpZiB5b3UgYXJlIG1vdmluZyB0byBhIG5ldyBob3N0LgpUaGVzZSBJbmNsdWRlCjEuICBBZGp1c3RpbmcgeW91ciAuaHRhY2Nlc3MgZmlsZQoyLiAgQWRqdXN0aW5nIGFueSBoYXJkIGNvZGVkIGxpbmtzCjMuICBBZGp1c3RpbmcgbW9kdWxlIHByZWZlcmVuY2VzIGFuZCBzZXR0aW5ncwo0LiAgVGVzdGluZwoKTk9URVM6CjEuICBUaGlzIHNjcmlwdCByZXF1aXJlcyB0aGUgYWJpbGl0eSB0byBleGVjdXRlIHNoZWxsIGNvbW1hbmRzLgoyLiAgVGhpcyBzY3JpcHQgcmVxdWlyZXMgdGhhdCB0aGUgbXlzcWwgcHJvZ3JhbSBiZSBpbiB0aGUgY3VycmVudCBQQVRILgozLiAgVGhpcyBzY3JpcHQgcmVxdWlyZXMgdGhlIFppcEFyY2hpdmUgcGhwIGNsYXNzICh1c3VhbGx5IGJ1aWx0IGluKQo0LiAgVGhpcyBzY3JpcHQgZG9lcyBjb21wYXRpYmlsaXR5IGNoZWNrcyB0aGF0IG1heSBiZSBsZXNzIGV4dGVuc2l2ZSB0aGFuIHRob3NlIGJ1aWx0IGludG8gQ01TTVMsIG9yIG1heSBiZSBtb3JlIGV4dGVuc2l2ZS4KRU9UOwpjbHMoKTsKb3V0cHV0KCRvdXQpOwoKJHJlcyA9IGFza19ib29sKCdBcmUgeW91IHJlYWR5IHRvIGJlZ2luPycpOwppZiggISRyZXMgKSB7CiAgICBuZXdsaW5lKCk7CiAgICBvdXRwdXQoIlRoYW5rIHlvdSwgY29tZSBhZ2FpbiIpOwogICAgZXhpdDsKfQoKLy8gMS4gIHByb21wdCBmb3IgemlwIGZpbGUKJG91dCA9IDw8PEVPVAo9PSBFbnRlciB0aGUgU25hcHNob3RNZ3IgbmFtZSA9PQpQbGVhc2UgZW50ZXIgdGhlIG5hbWUgb2YgdGhlIFNuYXBzaG90TWdyIGZpbGUgdGhhdCB5b3Ugd291bGQgbGlrZSB0byByZXN0b3JlLgoKTm90ZTogVGhlIGZpbGVuYW1lIHNob3VsZCBiZSBhbiBhYnNvbHV0ZSBwYXRoLCBvciBzaG91bGQgcmVzaWRlIGluIHlvdXIgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KRU9UOwokc25hcHNob3QgPSBudWxsOwpjbHMoKTsKd2hpbGUoICEkc25hcHNob3QgKSB7CiAgICBvdXRwdXQoJG91dCk7CiAgICAkcmVzID0gYXNrX3N0cmluZ19yZXF1aXJlZCggIlNuYXBzaG90TWdyIEZpbGUgTmFtZToiICk7CiAgICBpZiggJHJlcyApIHsKICAgICAgICAkZm4gPSAkZGlyLicvJy4kcmVzOwogICAgICAgIGlmKCAhaXNfZmlsZSgkZm4pIHx8ICFpc19yZWFkYWJsZSgkZm4pICkgewogICAgICAgICAgICBuZXdsaW5lKCk7CiAgICAgICAgICAgIGVycm9yKCJDb3VsZCBub3QgZmluZCB0aGUgZmlsZTogJHJlcyIpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmKCAhaXNfc25hcHNob3RtZ3IoJGZuKSApIHsKICAgICAgICAgICAgbmV3bGluZSgpOwogICAgICAgICAgICBlcnJvcigiJHJlcyBpcyBub3QgYSBTbmFwc2hvdE1nciBhcmNoaXZlIGZpbGUiKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRzbmFwc2hvdCA9ICRyZXM7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KfQoKLy8gMi4gIEdldCBjb25maWcgYW5kIGRhdGFiYXNlIGZpbGVzIGZyb20gdGhlIHNuYXBzaG90CiRjb25maWdfZmlsZXMgPSBhcnJheSgnY29uZmlnLnBocCcsJ2xpYicgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJ2NvbmZpZy5waHAnKTsKJG9sZF9jb25maWcgPSBudWxsOwokdG1wZmlsZSA9ICcudG1wLmNvbmZpZy5waHAnOwokYXJjaCA9IG5ldyBcWmlwQXJjaGl2ZTsKJGFyY2gtPm9wZW4oJHNuYXBzaG90KTsKJGRiZmlsZSA9IGNvcHlfYXJjaGZpbGVfdG9fdG1wKCRhcmNoLCd0bXAnIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICdfX215c3FsZHVtcC5zcWwnKTsKZm9yZWFjaCggJGNvbmZpZ19maWxlcyBhcyAkZmlsZSApIHsKICAgICRmbiA9IGNvcHlfYXJjaGZpbGVfdG9fdG1wKCRhcmNoLCRmaWxlKTsKICAgIGlmKCAkZm4gKSB7CiAgICAgICAgJGNvbmZpZ19maWxlID0gJGZpbGU7CiAgICAgICAgaW5jbHVkZSgkZm4pOwogICAgICAgICRvbGRfY29uZmlnID0gJGNvbmZpZzsKICAgICAgICB1bnNldCgkY29uZmlnKTsKICAgICAgICB1bmxpbmsoJGZuKTsKICAgICAgICBicmVhazsKICAgIH0KfQppZiggISRvbGRfY29uZmlnIHx8ICFpc3NldCgkb2xkX2NvbmZpZ1snZGJfbmFtZSddKSApIHsKICAgIGVycm9yKCJDb3VsZCBub3QgZmluZCBjb25maWcgZGF0YSBpbiBTbmFwc2hvdE1nciIpOwogICAgZXhpdCgxKTsKfQoKLy8gMy4gIERpc3BsYXkgaW5mbyBmcm9tIHRoZSBzbmFwc2hvdAokc25hcHNob3RtZ3JfZmlsZSA9ICRhcmNoLT5nZXRGcm9tTmFtZSgndG1wLy5zbmFwc2hvdG1ncicpOwokaW5pID0gbmV3IFxTbmFwc2hvdE1nclxwaGFyXHNlY3VyZV9pbmlfZmlsZTsKJHNuYXBzaG90bWdyX2RhdGEgPSAkaW5pLT5wYXJzZSgkc25hcHNob3RtZ3JfZmlsZSxGQUxTRSk7CmNscygpOwpvdXRwdXQoJz09IFNuYXBzaG90TWdyIERldGFpbHMgPT0nKTsKb3V0cHV0KCdTaXRlIE5hbWU6ICcuJHNuYXBzaG90bWdyX2RhdGFbJ3dlYnNpdGUnXVsnc2l0ZW5hbWUnXSk7Cm91dHB1dCgnU2l0ZSBVUkw6ICcuJHNuYXBzaG90bWdyX2RhdGFbJ3dlYnNpdGUnXVsncm9vdF91cmwnXSk7Cm91dHB1dCgnQ01TTVMgVmVyc2lvbjogJy4kc25hcHNob3RtZ3JfZGF0YVsnd2Vic2l0ZSddWydjbXNfdmVyc2lvbiddKTsKb3V0cHV0KCdDcmVhdGVkOiAnLnN0cmZ0aW1lKCcleCAlWCcsJHNuYXBzaG90bWdyX2RhdGFbJ21haW4nXVsnY3JlYXRlZCddKSk7CiRyZXMgPSBhc2tfYm9vbCgnRG8geW91IHdhbnQgdG8gY29udGludWU/Jyk7CmlmKCAhJHJlcyApIHsKICAgIG5ld2xpbmUoKTsKICAgIG91dHB1dCgiVGhhbmsgeW91LCBjb21lIGFnYWluIik7CiAgICBleGl0Owp9CgovLyA0LiAgQ29tcGF0aWJpbGl0eSBjaGVjawpjbHMoKTsKb3V0cHV0KCc9PSBDaGVjayBmb3IgQ29tcGF0aWJpbGl0eSA9PScpOwokcGFybXMgPSBhcnJheSgnZGlyJz0+JGRpciwnZXhjbHVkZXMnPT5hcnJheShiYXNlbmFtZSgkc25hcHNob3QpLCRzY3JpcHQpKTsKJHRlc3RlciA9IG5ldyBcU25hcHNob3RNZ3JccGhhclxjb21wYXRpYmlsaXR5X3Rlc3RlcigkcGFybXMpOwokcmVzID0gJHRlc3Rlci0+dGVzdCgpOwppZiggISRyZXMgKSB7CiAgICBuZXdsaW5lKCk7CiAgICBlcnJvcigiT25lIG9yIG1vcmUgY29tcGF0aWJpbGl0eSB0ZXN0cyBmYWlsZWQiKTsKICAgICRmYWlsZWQgPSAkdGVzdGVyLT5nZXRfZmFpbGVkKCk7CiAgICBmb3JlYWNoKCAkZmFpbGVkIGFzICRvbmUgKSB7CiAgICAgICAgZXJyb3IoIiAgICAkb25lIDogIi4kdGVzdGVyLT5nZXRfZXJyb3Jtc2coJG9uZSksRkFMU0UpOwogICAgfQogICAgZXJyb3IoIk5vdCBhbGwgdGVzdHMgcGFzc2VkLi4uIG11c3QgZXhpdC4iKTsKICAgIGV4aXQoMSk7Cn0KCiRvdXQgPSBhcnJheSgpOwokbGlzdCA9IGFycmF5KCk7CiRsaXN0WydhJ10gPSBhcnJheSgncHJvbXB0Jz0+J0RhdGFiYXNlIEhvc3QnLCdrZXknPT4nZGJfaG9zdG5hbWUnLCd2YWwnPT4nbG9jYWxob3N0Jyk7CiRsaXN0WydiJ10gPSBhcnJheSgncHJvbXB0Jz0+J0RhdGFiYXNlIE5hbWUnLCdrZXknPT4nZGJfbmFtZScsJ3ZhbCc9Pm51bGwpOwokbGlzdFsnYyddID0gYXJyYXkoJ3Byb21wdCc9PidEYXRhYmFzZSBVc2VyJywna2V5Jz0+J2RiX3VzZXJuYW1lJywndmFsJz0+bnVsbCk7CiRsaXN0WydkJ10gPSBhcnJheSgncHJvbXB0Jz0+J0RhdGFiYXNlIFBhc3N3b3JkJywna2V5Jz0+J2RiX3Bhc3N3b3JkJywndmFsJz0+bnVsbCk7CiRsaXN0WydlJ10gPSBhcnJheSgncHJvbXB0Jz0+J0RCTVMgKG15c3FsL215c3FsaSknLCdrZXknPT4nZGJtcycsJ3ZhbCc9PidteXNxbGknLCdvcHRpb25zJz0+YXJyYXkoJ215c3FsaScsJ215c3FsJykpOwokbGlzdFsneiddID0gYXJyYXkoJ3Byb21wdCc9PidEb25lL0ZpbmlzaGVkJyk7CiR2YWxpZCA9IGZhbHNlOwokYnVpbGRfcHJvbXB0ID0gZnVuY3Rpb24oJGxpc3QpIHsKICAgICRwcm9tcHQgPSAnPT0gRGF0YWJhc2UgQ29ubmVjdGlvbiBJbmZvcm1hdGlvbiA9PScuIlxuIjsKICAgIGZvcmVhY2goICRsaXN0IGFzICRrZXkgPT4gJHJlYyApIHsKICAgICAgICBpZiggaXNzZXQoJHJlY1sna2V5J10pICkgewogICAgICAgICAgICAkcHJvbXB0IC49IHNwcmludGYoIiVzOiAlMjBzID0gJXNcbiIsJGtleSwkcmVjWydwcm9tcHQnXSwkcmVjWyd2YWwnXSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHByb21wdCAuPSBzcHJpbnRmKCIlczogJTIwc1xuIiwka2V5LCRyZWNbJ3Byb21wdCddKTsKICAgICAgICB9CiAgICB9CiAgICAkcHJvbXB0IC49ICJcbk9wdGlvbiBbYSxiLGMsZCxlIHEvcXVpdC9leGl0XTogIjsKICAgIHJldHVybiAkcHJvbXB0Owp9OwoKY2xzKCk7CndoaWxlKCAhJHZhbGlkICkgewogICAgd2hpbGUoIDEgKSB7CiAgICAgICAgLy8gZGlzcGxheSB0aGUgbGlzdAogICAgICAgICRsaXN0a2V5ID0gYXNrX29wdGlvbigkYnVpbGRfcHJvbXB0KCRsaXN0KSxhcnJheV9rZXlzKCRsaXN0KSk7CiAgICAgICAgaWYoICRsaXN0a2V5ID09ICd6JyApIGJyZWFrOwogICAgICAgIGlmKCBpc3NldCgkbGlzdFskbGlzdGtleV1bJ29wdGlvbnMnXSkgKSB7CiAgICAgICAgICAgICR2YWwgPSBhc2tfb3B0aW9uKCRsaXN0WyRsaXN0a2V5XVsncHJvbXB0J10uJzonLCRsaXN0WyRsaXN0a2V5XVsnb3B0aW9ucyddKTsKICAgICAgICAgICAgJGxpc3RbJGxpc3RrZXldWyd2YWwnXSA9IHRyaW0oJHZhbCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkdmFsID0gYXNrX3N0cmluZ19yZXF1aXJlZCgkbGlzdFskbGlzdGtleV1bJ3Byb21wdCddLic6Jyk7CiAgICAgICAgICAgICRsaXN0WyRsaXN0a2V5XVsndmFsJ10gPSB0cmltKCR2YWwpOwogICAgICAgIH0KICAgIH0KCiAgICAvLyBjaGVjayBpZiB3ZSBoYXZlIGEgdmFsdWUgZm9yIGV2ZXJ5dGhpbmcKICAgICRmbmQgPSB0cnVlOwogICAgZm9yZWFjaCggJGxpc3QgYXMgJGtleSA9PiAkcmVjICkgewogICAgICAgIGlmKCAhaXNzZXQoJHJlY1sna2V5J10pICkgY29udGludWU7CiAgICAgICAgaWYoICFpc3NldCgkcmVjWyd2YWwnXSkgfHwgJHJlY1sndmFsJ10gPT0gJycgKSB7CiAgICAgICAgICAgICRmbmQgPSBmYWxzZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAgaWYoICRmbmQgKSB7CiAgICAgICAgLy8gZG8gYSB0ZXN0IGNvbm5lY3Rpb24KICAgICAgICAkZGJjb25maWcgPSBhcnJheSgpOwogICAgICAgIGZvcmVhY2goICRsaXN0IGFzICRrZXkgPT4gJHJlYyApIHsKICAgICAgICAgICAgaWYoICFpc3NldCgkcmVjWydrZXknXSkgKSBjb250aW51ZTsKICAgICAgICAgICAgaWYoICFpc3NldCgkcmVjWyd2YWwnXSkgKSBjb250aW51ZTsKICAgICAgICAgICAgJGRiY29uZmlnWyRyZWNbJ2tleSddXSA9ICRyZWNbJ3ZhbCddOwogICAgICAgIH0KICAgICAgICAkcmVzID0gXFNuYXBzaG90TWdyXHBoYXJcdGVzdF9kYl9jb25uZWN0KCRkYmNvbmZpZyk7CiAgICAgICAgaWYoICEkcmVzICkgewogICAgICAgICAgICBuZXdsaW5lKCk7CiAgICAgICAgICAgIGVycm9yKCdQcm9ibGVtIGNvbm5lY3RpbmcgdG8gdGhlIGRhdGFiYXNlLi4uIHBsZWFzZSBkb3VibGVjaGVjayB5b3VyIGluZm9ybWF0aW9uJyk7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KCiAgICAgICAgLy8gY29ubmVjdGVkIG9rYXksIHNlZSBpZiB0aGUgZGIgaXMgZW1wdHkKICAgICAgICAkcmVzID0gXFNuYXBzaG90TWdyXHBoYXJcdGVzdF9kYl9lbXB0eSgkcmVzLCRkYmNvbmZpZyk7CiAgICAgICAgaWYoICEkcmVzICkgewogICAgICAgICAgICBuZXdsaW5lKCk7CiAgICAgICAgICAgIGVycm9yKCdUaGUgZGF0YWJhc2UgeW91IHNlbGVjdGVkIGFwcGVhcnMgdG8gYWxyZWFkeSBjb250YWluIHRhYmxlcy4uLiBwbGVhc2UgcGljayBhbm90aGVyIGRhdGFiYXNlLCBvciBjbGVhciB0aGlzIG9uZS4nKTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQoKICAgICAgICAkdmFsaWQgPSB0cnVlOwogICAgfQp9CgovLyA1LiAgaW1wb3J0IGRhdGFiYXNlCmNscygpOwpvdXRwdXQoJz09IGltcG9ydGluZyBkYXRhYmFzZSA9PScpOwokcmVzID0gXFNuYXBzaG90TWdyXHBoYXJcZGJfaW1wb3J0KCRkYmNvbmZpZywkZGJmaWxlKTsKaWYoICEkcmVzICkgewogICAgbmV3bGluZSgpOwogICAgZXJyb3IoJ1Byb2JsZW0gaW1wb3J0aW5nIGRhdGEgaW50byB0aGUgZGF0YWJhc2UuLi4gcGxlYXNlIGNsZWFudXAgYW5kIHJldHJ5Jyk7CiAgICBleGl0KDEpOwp9Cm91dHB1dCgnZG9uZScpOwoKLy8gNi4gIGV4dHJhY3QgemlwIGZpbGVzCiRvcCA9IG51bGw7Cm5ld2xpbmUoKTsKb3V0cHV0KCc9PSByZXN0b3JpbmcgZmlsZXMgPT0nKTsKZm9yKCAkaSA9IDA7ICRpIDwgJGFyY2gtPm51bUZpbGVzOyAkaSsrICkgewogICAgJGVudHJ5ID0gJGFyY2gtPmdldE5hbWVJbmRleCgkaSk7CiAgICAkYXJjaC0+ZXh0cmFjdFRvKCcuJywkZW50cnkpOwogICAgJHAgPSAoaW50KSAoKGZsb2F0KSRpIC8gKGZsb2F0KSRhcmNoLT5udW1GaWxlcyAqIDEwMCk7CiAgICBpZiggJHAgPiAwICYmICRwICUgNSA9PSAwICYmICRwICE9ICRvcCApIHsKICAgICAgICAkb3AgPSAkcDsKICAgICAgICBvdXRwdXQoJHAuJyUuLi4gJyxGQUxTRSk7CiAgICB9Cn0Kb3V0cHV0KCdkb25lJyk7CgovLyA2LiAgZ2VuZXJhdGUgY29uZmlnLnBocAppZiggJGNvbmZpZ19maWxlICkgewogICAvLyBhbGwgb2YgdGhpcyBhc3N1bWVzICRkaXIgPT0gY3dkCiAgIG5ld2xpbmUoKTsKICAgb3V0cHV0KCc9PSBnZW5lcmF0aW5nIG5ldyBjb25maWcgZmlsZSA9PScpOwogICBvdXRwdXQoJ1dBUk5JTkc6ICBBbnkgYWR2YW5jZWQgcGhwIHByb2Nlc3NpbmcgaW4gdGhlIG9yaWdpbmFsIGZpbGUgd2lsbCBiZSByZW1vdmVkLCBhbmQgbWF5IHJlcXVpcmUgZml4aW5nJyk7CiAgIG91dHB1dCgnVGhlIG9yaWdpbmFsIGNvbmZpZyBmaWxlIGNhbiBiZSBmb3VuZCBpbiBiYWsuY29uZmlnLnBocCBpbiB0aGUgc2l0ZSByb290IGRpcmVjdG9yeScpOwogICAkYm4gPSBiYXNlbmFtZSgkY29uZmlnX2ZpbGUpOwogICAkZG4gPSBkaXJuYW1lKCRjb25maWdfZmlsZSk7CiAgIHJlbmFtZSgkY29uZmlnX2ZpbGUsIiRkbi9iYWsueyRibn0iKTsKCiAgIGlmKCAkb2xkX2NvbmZpZyAmJiAkZGJjb25maWcgKSB7CiAgICAgICRuZXdfY29uZmlnID0gYXJyYXlfbWVyZ2UoJG9sZF9jb25maWcsJGRiY29uZmlnKTsKICAgICAgd3JpdGVfY29uZmlnX3BocCgkY29uZmlnX2ZpbGUsJG5ld19jb25maWcpOwogICB9Cn0KCi8vIDYuICBzZWN1cml0eS4uLgpuZXdsaW5lKCk7Cm91dHB1dCgnPT0gaW1wcm92aW5nIHNlY3VyaXR5ID09PScpOwokaXRlciA9IG5ldyBcUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcigKICAgIG5ldyBcUmVjdXJzaXZlRGlyZWN0b3J5SXRlcmF0b3IoJGRpciwgXFJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yOjpTS0lQX0RPVFMpLAogICAgXFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3I6OlNFTEZfRklSU1QsCiAgICBcUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcjo6Q0FUQ0hfR0VUX0NISUxEIC8vIElnbm9yZSAiUGVybWlzc2lvbiBkZW5pZWQiCiAgICApOwokc3RyID0gJzwhLS0gRFVNTVkgSFRNTCBGSUxFIC0tPic7CmZvcmVhY2goICRpdGVyIGFzICRwYXRoID0+ICRkaXIgKSB7CiAgICBpZiggISRkaXItPmlzRGlyKCkgKSBjb250aW51ZTsKICAgIGlmKCBmaWxlX2V4aXN0cygkcGF0aCAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAnaW5kZXgucGhwJykgfHwgZmlsZV9leGlzdHMoJHBhdGggLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJ2luZGV4Lmh0bWwnKSApIGNvbnRpbnVlOwoKICAgIGZpbGVfcHV0X2NvbnRlbnRzKCRwYXRoIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICdpbmRleC5odG1sJywkc3RyKTsKfQoKLy8gOSAgIGNsZWFudXAKbmV3bGluZSgpOwpvdXRwdXQoJz09IGNsZWFuaW5nIHVwID09PScpOwpAdW5saW5rKCRzbmFwc2hvdCk7CkB1bmxpbmsoJHNjcmlwdCk7CkB1bmxpbmsoJ3RtcC9fX215c3FsZHVtcC5zcWwnKTsKQHVubGluaygndG1wLy5zbmFwc2hvdG1ncicpOwpAbWtkaXIoJ3RtcC9jYWNoZScsMDc3Nyk7CkBta2RpcigndG1wL3RlbXBsYXRlc19jJywwNzc3KTsKCi8vIDEwLiAgRE9ORQpuZXdsaW5lKCk7Cm91dHB1dCgnPT0gRmluaXNoZWQgPT09Jyk7CiRvdXQgPSA8PDxFT1QKVGhlIHJlc3RvcmUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlLiAgVGhlIGRhdGFiYXNlIGFuZCBhbGwgZmlsZXMgaGF2ZSBiZW4gcmVzdG9yZWQuCllvdSBtYXkgbmVlZCB0byByZXZpZXcgeW91ciBjb25maWcucGhwIGZpbGUsIGFuZCBhZGp1c3QgeW91ciAuaHRhY2Nlc3MgZmlsZSBmb3IgdGhlIG5ldyBzaXRlIGxvY2F0aW9uLgpBbHNvLCB5b3Ugc2hvdWxkIHVuZGVydGFrZSBleHRlbnNpdmUgdGVzdGluZy4KClRoYW5rIHlvdSBmb3IgdXNpbmcgU25hcHNob3RNZ3IuCkVPVDsKb3V0cHV0KCRvdXQpOwpleGl0OwoKIwojIEVPRgoj]]></data>
	</file>
	<file>
	  <filename>/phar/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/phar/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/phar/lib/class.compatibility_tester.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNuYXBzaG90TWdyCiMgQXV0aG9yOiBSb2xmIFRqYXNzZW5zIChjbXNjYW5iZXNpbXBsZS5vcmcpCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4KIyAoYykgMjAwNCAtIDIwMTEgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIChjKSAyMDExIC0gMjAxOCBieSBUaGUgQ01TIE1hZGUgU2ltcGxlIERldmVsb3BtZW50IFRlYW0KIyAoYykgMjAxOCBhbmQgYmV5b25kIGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRm91bmRhdGlvbgojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9zbmFwc2hvdG1ncgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGb3JrIGZyb20gQ0dTbmFwc2hvdCBtb2R1bGUgYnkgUm9iZXJ0IENhbXBiZWxsIChjYWxndXkxMDAwLmNvbSkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCm5hbWVzcGFjZSBTbmFwc2hvdE1nclxwaGFyOwoKaW5jbHVkZV9vbmNlKF9fRElSX18gLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJ2NsYXNzLnNpbXBsZV90ZXN0LnBocCcpOwoKY2xhc3MgY29tcGF0aWJpbGl0eV90ZXN0ZXIKewogICAgY29uc3QgTUlOUEhQID0gJzUuNC4xMSc7CiAgICBjb25zdCBURVNUX01JTlBIUFZFUiA9ICdtaW5waHB2ZXInOwogICAgY29uc3QgVEVTVF9ESVJXUklUQUJMRSA9ICdkaXJ3cml0YWJsZSc7CiAgICBjb25zdCBURVNUX0RJUkVNUFRZID0gJ2RpcmVtcHR5JzsKICAgIGNvbnN0IFRFU1RfVE1QRklMRSA9ICdmdW5jX3RtcGZpbGUnOwogICAgY29uc3QgVEVTVF9URU1QTkFNID0gJ2Z1bmNfdGVtcG5hbSc7CiAgICBjb25zdCBURVNUX0daT1BFTiA9ICdmdW5jX2d6b3Blbic7CiAgICBjb25zdCBURVNUX0VYVF9NVUxUSUJZVEUgPSAnZXh0X211bHRpYnl0ZSc7CiAgICBjb25zdCBURVNUX0VYVF9GSU5GTyA9ICdleHRfZmluZm8nOwogICAgY29uc3QgVEVTVF9FWFRfTVlTUUwgPSAnZXh0X215c3FsJzsKICAgIGNvbnN0IFRFU1RfTUQ1ID0gJ2Z1bmNfbWQ1JzsKICAgIGNvbnN0IFRFU1RfU0hBMSA9ICdmdW5jX3NoYTEnOwogICAgY29uc3QgVEVTVF9KU09OID0gJ2Z1bmNfanNvbic7CiAgICBjb25zdCBURVNUX09QRU5CQVNFRElSID0gJ29wZW5iYXNlZGlyJzsKICAgIGNvbnN0IFRFU1RfU0VTU0lPTkNPT0tJRVMgPSAnc2Vzc2lvbi51c2VfY29va2llcyc7CiAgICBjb25zdCBURVNUX1NFU1NJT05TQVZFID0gJ3Nlc3Npb24uc2F2ZXBhdGgnOwogICAgY29uc3QgVEVTVF9TQUZFTU9ERSA9ICdzYWZlX21vZGUnOwogICAgY29uc3QgVEVTVF9GSUxFVVBMT0FEUyA9ICdmaWxlX3VwbG9hZHMnOwogICAgY29uc3QgVEVTVF9FWFRfWE1MID0gJ2V4dF94bWwnOwogICAgY29uc3QgVEVTVF9GSUxFR0VUID0gJ2Z1bmNfZmlsZWdldGNvbnRlbnRzJzsKICAgIGNvbnN0IFRFU1RfRklMRVBVVCA9ICdmdW5jX2ZpbGVwdXRjb250ZW50cyc7CgogICAgcHJpdmF0ZSAkX3Rlc3RzID0gYXJyYXkoKTsKICAgIHByaXZhdGUgJF9yZXN1bHRzID0gYXJyYXkoKTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHBhcmFtcyA9IG51bGwpCiAgICB7CiAgICAgICAgLy8gYnVpbGQgbGlzdCBvZiB0ZXN0cyBiYXNlZCBvbiBwYXJhbXMgaW4gdGhlIGNvbnN0cnVjdG9yCiAgICAgICAgJGRpciA9IGlzc2V0KCRwYXJhbXNbJ2RpciddKSA/ICRwYXJhbXNbJ2RpciddIDogZ2V0Y3dkKCk7CiAgICAgICAgJGV4Y2x1ZGVzID0gaXNzZXQoJHBhcmFtc1snZXhjbHVkZXMnXSkgPyAkcGFyYW1zWydleGNsdWRlcyddIDogbnVsbDsKCiAgICAgICAgLy8gY2hlY2sgZm9yIHdyaXRlIGFjY2VzcwogICAgICAgICR0aGlzLT5fdGVzdHNbXSA9IG5ldyBtaW52ZXJzaW9uX3Rlc3Qoc2VsZjo6VEVTVF9NSU5QSFBWRVIsc2VsZjo6TUlOUEhQLHBocHZlcnNpb24oKSk7CiAgICAgICAgJHRoaXMtPl90ZXN0c1tdID0gbmV3IGRpcl93cml0YWJsZV90ZXN0KHNlbGY6OlRFU1RfRElSV1JJVEFCTEUsJGRpcik7CiAgICAgICAgJHRoaXMtPl90ZXN0c1tdID0gbmV3IGRpcl9lbXB0eV90ZXN0KHNlbGY6OlRFU1RfRElSRU1QVFksJGRpciwkZXhjbHVkZXMpOwogICAgICAgICR0aGlzLT5fdGVzdHNbXSA9IG5ldyBzaW1wbGVfdGVzdChzZWxmOjpURVNUX1RNUEZJTEUsZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICRmaCA9IHRtcGZpbGUoKTsKICAgICAgICAgICAgICAgIHJldHVybiAoJGZoID09PSBGQUxTRSkgPyBGQUxTRSA6IFRSVUU7CiAgICAgICAgICAgIH0pOwogICAgICAgICR0aGlzLT5fdGVzdHNbXSA9IG5ldyBmdW5jdGlvbl90ZXN0KHNlbGY6OlRFU1RfVEVNUE5BTSwndGVtcG5hbScpOwogICAgICAgICR0aGlzLT5fdGVzdHNbXSA9IG5ldyBzaW1wbGVfdGVzdChzZWxmOjpURVNUX0daT1BFTixmdW5jdGlvbigpewogICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uX2V4aXN0cygnZ3pvcGVuJykgfHwgZnVuY3Rpb25fZXhpc3RzKCdnem9wZW42NCcpOwogICAgICAgICAgICB9KTsKICAgICAgICAkdGhpcy0+X3Rlc3RbXSA9IG5ldyBleHRlbnNpb25fdGVzdChzZWxmOjpURVNUX0VYVF9NVUxUSUJZVEUsJ21ic3RyaW5nJyk7CiAgICAgICAgJHRoaXMtPl90ZXN0W10gPSBuZXcgZnVuY3Rpb25fdGVzdChzZWxmOjpURVNUX0VYVF9GSU5GTywnZmluZm9fb3BlbicpOwogICAgICAgICR0aGlzLT5fdGVzdFtdID0gbmV3IHNpbXBsZV90ZXN0KHNlbGY6OlRFU1RfRVhUX01ZU1FMLGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICB0ZXN0X2V4dGVuc2lvbl9sb2FkZWQoJ215c3FsaScpIHx8IHRlc3RfZXh0ZW5zaW9uX2xvYWRlZCgnbXlzcWwnKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgJHRoaXMtPl90ZXN0W10gPSBuZXcgZnVuY3Rpb25fdGVzdChzZWxmOjpURVNUX01ENSwnbWQ1Jyk7CiAgICAgICAgJHRoaXMtPl90ZXN0W10gPSBuZXcgZnVuY3Rpb25fdGVzdChzZWxmOjpURVNUX1NIQTEsJ3NoYTEnKTsKICAgICAgICAkdGhpcy0+X3Rlc3RbXSA9IG5ldyBmdW5jdGlvbl90ZXN0KHNlbGY6OlRFU1RfSlNPTiwnanNvbl9lbmNvZGUnKTsKICAgICAgICAkdGhpcy0+X3Rlc3RbXSA9IG5ldyBzaW1wbGVfdGVzdChzZWxmOjpURVNUX09QRU5CQVNFRElSLGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICByZXR1cm4gKGluaV9nZXQoJ29wZW5fYmFzZWRpcicpID09ICcnKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgJHRoaXMtPl90ZXN0W10gPSBuZXcgc2ltcGxlX3Rlc3Qoc2VsZjo6VEVTVF9TRVNTSU9OQ09PS0lFUyxmdW5jdGlvbigpewogICAgICAgICAgICAgICAgcmV0dXJuIChpbmlfZ2V0KCdzZXNzaW9uLnVzZV9jb29raWVzJykpOwogICAgICAgICAgICB9KTsKICAgICAgICBpZiggaW5pX2dldCgnc2Vzc2lvbi5zYXZlX2hhbmRsZXInKSA9PSAnZmlsZXMnICkgewogICAgICAgICAgICAkdGhpcy0+X3Rlc3RbXSA9IG5ldyBzaW1wbGVfdGVzdChzZWxmOjpURVNUX1NFU1NJT05TQVZFLGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgJHBhdGggPSBpbmlfZ2V0KCdzZXNzaW9uLnNhdmVfcGF0aCcpOwogICAgICAgICAgICAgICAgICAgIGlmKCAoJHBvcyA9IHN0cnBvcygkcGF0aCwnOycpKSAhPT0gRkFMU0UgKSAkcGF0aCA9IHN1YnN0cigkcGF0aCwkcG9zKzEpOwogICAgICAgICAgICAgICAgICAgIGlmKCAhaXNfZGlyKCR0bXApICkgcmV0dXJuIEZBTFNFOwogICAgICAgICAgICAgICAgICAgIGlmKCAhaXNfd3JpdGFibGUoJHRtcCkgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICB9CgogICAgICAgIC8vIHRvZG86IHRlc3QgbWVtb3J5IGxpbWl0CiAgICAgICAgJHRoaXMtPl90ZXN0W10gPSBuZXcgZmFsc2VfdGVzdChzZWxmOjpURVNUX1NBRkVNT0RFLGluaV9nZXQoJ3NhZmVfbW9kZScpKTsKICAgICAgICAkdGhpcy0+X3Rlc3RbXSA9IG5ldyB0cnVlX3Rlc3Qoc2VsZjo6VEVTVF9GSUxFVVBMT0FEUyxpbmlfZ2V0KCdmaWxlX3VwbG9hZHMnKSk7CiAgICAgICAgJHRoaXMtPl90ZXN0W10gPSBuZXcgZXh0ZW5zaW9uX3Rlc3Qoc2VsZjo6VEVTVF9FWFRfWE1MLCd4bWwnKTsKICAgICAgICAkdGhpcy0+X3Rlc3RbXSA9IG5ldyBmdW5jdGlvbl90ZXN0KHNlbGY6OlRFU1RfRklMRUdFVCwnZmlsZV9nZXRfY29udGVudHMnKTsKICAgICAgICAkdGhpcy0+X3Rlc3RbXSA9IG5ldyBmdW5jdGlvbl90ZXN0KHNlbGY6OlRFU1RfRklMRVBVVCwnZmlsZV9wdXRfY29udGVudHMnKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2Vycm9ybXNnKCRjb2RlKQogICAgewogICAgICAgIHN3aXRjaCggJGNvZGUgKSB7CiAgICAgICAgY2FzZSBzZWxmOjpURVNUX01JTlBIUFZFUjoKICAgICAgICAgICAgcmV0dXJuICdUaGUgY29uZmlndXJlZCBQSFAgdmVyc2lvbiBpcyB0b28gbG93LiAgTWluaW11bSByZXF1aXJlZCBpcyAnLnNlbGY6Ok1JTlBIUDsKICAgICAgICBjYXNlIHNlbGY6OlRFU1RfRElSV1JJVEFCTEU6CiAgICAgICAgICAgIHJldHVybiAnVGhlIFBIUCBwcm9jZXNzIGRvZXMgbm90IGhhdmUgcGVybWlzc2lvbiB0byB3cml0ZSB0byB0aGlzIGRpcmVjdG9yeS4nOwogICAgICAgIGNhc2Ugc2VsZjo6VEVTVF9ESVJFTVBUWToKICAgICAgICAgICAgcmV0dXJuICJUaGUgZGVzdGluYXRpb24gZGlyZWN0b3J5IHNwZWNpZmllZCBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgZW1wdHkgZXhjZXB0IGZvciBTbmFwc2hvdE1nciBmaWxlcyBhbmQgdGhpcyBzY3JpcHRcbgogICBIaW50OiAgQ2hlY2sgZm9yIGhpZGRlbiBmaWxlcy4iOwogICAgICAgIGNhc2Ugc2VsZjo6VEVTVF9UTVBGSUxFOgogICAgICAgICAgICByZXR1cm4gJ1RoZSB0bXBmaWxlKCkgbWV0aG9kIGRvZXMgbm90IGFwcGVhciB0byBvcGVyYXRlIHByb3Blcmx5JzsKICAgICAgICBjYXNlIHNlbGY6OlRFU1RfVEVNUE5BTToKICAgICAgICAgICAgcmV0dXJuICdUaGUgdGVtcG5hbSgpIGZ1bmN0aW9uIGRvZXMgbm90IGFwcGVhciB0byBiZSBhdmFpbGFibGUnOwogICAgICAgIGNhc2Ugc2VsZjo6VEVTVF9HWk9QRU46CiAgICAgICAgICAgIHJldHVybiAnVGhlIGd6b3Blbi9nem9wZW42NCBmdW5jdGlvbnMgZG8gbm90IGFwcGVhciB0byBiZSBhdmFpbGFibGUuJzsKICAgICAgICBjYXNlIHNlbGY6OlRFU1RfRVhUX01VTFRJQllURToKICAgICAgICAgICAgcmV0dXJuICdUaGUgbXVsdGlieXRlIGV4dGVuc2lvbnMgZG8gbm90IGFwcGVhciB0byBiZSBhdmFpbGFibGUuJzsKICAgICAgICBjYXNlIHNlbGY6OlRFU1RfRVhUX0ZJTkZPOgogICAgICAgICAgICByZXR1cm4gJ1RoZSBmaWxlaW5mbyBleHRlbnNpb25zIGRvIG5vdCBhcHBlYXIgdG8gYmUgYXZhaWxhYmxlLic7CiAgICAgICAgY2FzZSBzZWxmOjpURVNUX0VYVF9NWVNRTDoKICAgICAgICAgICAgcmV0dXJuICdXZSBjb3VsZCBub3QgZmluZCBhIHN1aXRhYmxlIGRhdGFiYXNlIGRyaXZlci4nOwogICAgICAgIGNhc2Ugc2VsZjo6VEVTVF9NRDU6CiAgICAgICAgICAgIHJldHVybiAnVGhlIG1kNSBmdW5jdGlvbiBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYXZhaWxhYmxlJzsKICAgICAgICBjYXNlIHNlbGY6OlRFU1RfU0hBMToKICAgICAgICAgICAgcmV0dXJuICdUaGUgc2hhMSBmdW5jdGlvbiBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYXZhaWxhYmxlJzsKICAgICAgICBjYXNlIHNlbGY6OlRFU1RfSlNPTjoKICAgICAgICAgICAgcmV0dXJuICdUaGUganNvbiBmdW5jdGlvbnMgZG8gbm90IGFwcGVhciB0byBiZSBhdmFpbGFibGUnOwogICAgICAgIGNhc2Ugc2VsZjo6VEVTVF9PUEVOQkFTRURJUjoKICAgICAgICAgICAgcmV0dXJuICdPcGVuIGJhc2VkaXIgaXMgZW5hYmxlZC4uLiB0aGlzIGlzIHByb2JsZW1hdGljJzsKICAgICAgICBjYXNlIHNlbGY6OlRFU1RfU0VTU0lPTkNPT0tJRVM6CiAgICAgICAgICAgIHJldHVybiAnU2Vzc2lvbiBjb29raWVzIGFyZSBub3QgZW5hYmxlZC4uLiB0aGlzIHdpbGwgY2F1c2UgcHJvYmxlbXMnOwogICAgICAgIGNhc2Ugc2VsZjo6VEVTVF9TRVNTSU9OU0FWRToKICAgICAgICAgICAgcmV0dXJuICdUaGUgc2Vzc2lvbiBzYXZlIHBhdGggZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdyaXRhYmxlLic7CiAgICAgICAgY2FzZSBzZWxmOjpURVNUX1NBRkVNT0RFOgogICAgICAgICAgICByZXR1cm4gJ1NhZmUgbW9kZSBpcyBlbmFibGVkLi4uIHdlIGNhbm5vdCBjb250aW51ZSc7CiAgICAgICAgY2FzZSBzZWxmOjpURVNUX0ZJTEVVUExPQURTOgogICAgICAgICAgICByZXR1cm4gJ0ZpbGUgdXBsb2FkcyBhcmUgbm90IGVuYWJsZWQuICBUaGlzIGlzIHByb2JsZW1hdGljJzsKICAgICAgICBjYXNlIHNlbGY6OlRFU1RfRVhUX1hNTDoKICAgICAgICAgICAgcmV0dXJuICdYTUwgRXh0ZW5zaW9ucyBhcmUgbm90IGVuYWJsZWQuJzsKICAgICAgICBjYXNlIHNlbGY6OlRFU1RfRklMRUdFVDoKICAgICAgICAgICAgcmV0dXJuICdUaGUgZmlsZV9nZXRfY29udGVudHMgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZSc7CiAgICAgICAgY2FzZSBzZWxmOjpURVNUX0ZJTEVQVVQ6CiAgICAgICAgICAgIHJldHVybiAnVGhlIGZpbGVfcHV0X2NvbnRlbnRzIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUuJzsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gJ1Vua25vd24gRXJyb3I6ICcuJGNvZGU7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfZmFpbGVkKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9yZXN1bHRzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0KCkKICAgIHsKICAgICAgICAkZmFpbGVkID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoKCAkdGhpcy0+X3Rlc3RzIGFzICR0ZXN0ICkgewogICAgICAgICAgICAkcmVzID0gJHRlc3QtPmV4ZWN1dGUoKTsKICAgICAgICAgICAgaWYoICEkcmVzICkgewogICAgICAgICAgICAgICAgJGZhaWxlZFtdID0gJHRlc3QtPmdldF9sYWJlbCgpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmKCBjb3VudCgkZmFpbGVkKSApIHsKICAgICAgICAgICAgJHRoaXMtPl9yZXN1bHRzID0gJGZhaWxlZDsKICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgIH0KICAgICAgICByZXR1cm4gVFJVRTsKICAgIH0KCn0gLy8gZW5kIG9mIGNsYXNzCgojCiMgRU9GCiM=]]></data>
	</file>
	<file>
	  <filename>/phar/lib/class.secure_ini_file.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNuYXBzaG90TWdyCiMgQXV0aG9yOiBSb2xmIFRqYXNzZW5zIChjbXNjYW5iZXNpbXBsZS5vcmcpCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4KIyAoYykgMjAwNCAtIDIwMTEgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIChjKSAyMDExIC0gMjAxOCBieSBUaGUgQ01TIE1hZGUgU2ltcGxlIERldmVsb3BtZW50IFRlYW0KIyAoYykgMjAxOCBhbmQgYmV5b25kIGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRm91bmRhdGlvbgojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9zbmFwc2hvdG1ncgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGb3JrIGZyb20gQ0dTbmFwc2hvdCBtb2R1bGUgYnkgUm9iZXJ0IENhbXBiZWxsIChjYWxndXkxMDAwLmNvbSkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCm5hbWVzcGFjZSBTbmFwc2hvdE1nclxwaGFyOwoKY2xhc3Mgc2VjdXJlX2luaV9maWxlCnsKICAgIHByaXZhdGUgJF9maWxlbmFtZTsKICAgIHByaXZhdGUgJF9maXJzdF9zZWN0aW9uID0gVFJVRTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGZpbGVuYW1lID0gbnVsbCkKICAgIHsKICAgICAgICAkdGhpcy0+c2V0X2ZpbGVuYW1lKCRmaWxlbmFtZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldF9maWxlbmFtZSgkZmlsZW5hbWUpCiAgICB7CiAgICAgICAgJHRoaXMtPl9maWxlbmFtZSA9IHRyaW0oJGZpbGVuYW1lKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9zb3J0X2RhdGEoJGRhdGEpCiAgICB7CiAgICAgICAgJG91dCA9ICRkYXRhOwogICAgICAgIGZvcmVhY2goICRvdXQgYXMgJGtleSA9PiAmJHZhbCApIHsKICAgICAgICAgICAgaWYoIGlzX2FycmF5KCR2YWwpICkgJHZhbCA9ICR0aGlzLT5fc29ydF9kYXRhKCR2YWwpOwogICAgICAgIH0KICAgICAgICBrc29ydCgkb3V0KTsKICAgICAgICByZXR1cm4gJG91dDsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZmluYWwgZnVuY3Rpb24gX2NhbGNfY2hlY2tzdW0oJGRhdGEpCiAgICB7CiAgICAgICAgJHNvcnRlZCA9ICR0aGlzLT5fc29ydF9kYXRhKCRkYXRhKTsKICAgICAgICAkc2FsdCA9ICdlcndlcmZmZ3pmYXNkcyBuZGZhc2RmYXNoZDNmYmp5ZCo5MzQ5OCBkaWZhb3VkY2koZmJyYWRmYWFkZiBzZGYwYTRhMTIzKSc7IC8vIGp1c3Qgc29tZSByYW5kb20gY2hhcmFjdGVycwogICAgICAgICRzaWcgPSBtZDUoJHNhbHQuc2VyaWFsaXplKCRzb3J0ZWQpKTsKICAgICAgICByZXR1cm4gJHNpZzsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX3dyaXRlX2luaV9zZWN0aW9uKCRzZWN0aW9uKQogICAgewogICAgICAgICRvdXQgPSBudWxsOwogICAgICAgIGlmKCAhJHRoaXMtPl9maXJzdF9zZWN0aW9uICkgewogICAgICAgICAgICAkdGhpcy0+X2ZpcnN0X3NlY3Rpb24gPSBGQUxTRTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRvdXQgLj0gIlxuIjsKICAgICAgICB9CgogICAgICAgICRvdXQgLj0gJ1snLnRyaW0oJHNlY3Rpb24pLiJdXG4iOwogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBfd3JpdGVfaW5pX3ZhbCgka2V5LCR2YWwpCiAgICB7CiAgICAgICAgJG91dCA9IG51bGw7CiAgICAgICAgLy8gQHRvZG8gY2hlY2sgZm9yIGludmFsaWQgY2hhcnMgaW4gdGhlIGtleSBhbmQgdGhyb3cgYW4gZXhjZXB0aW9uCiAgICAgICAgJG5rZXkgPSB0cmltKCRrZXkpOwogICAgICAgICRudmFsID0gdHJpbSgkdmFsKTsKICAgICAgICBpZiggISRua2V5ICkgcmV0dXJuOwogICAgICAgICR0eXBlID0gZ2V0dHlwZSgkdmFsKTsKICAgICAgICBpZiggJHR5cGUgPT0gJ29iamVjdCcgKSB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCdPYmplY3RzIGNhbm5vdCBiZSBzdG9yZWQnKTsKCiAgICAgICAgJGZuZCA9IDA7CiAgICAgICAgJGJhZGNoYXJzID0gYXJyYXkoIlxuIiwiXHIiLCI7IiwiJyIsJyInKTsKICAgICAgICBmb3JlYWNoKCAkYmFkY2hhcnMgYXMgJGNoICkgewogICAgICAgICAgICBpZiggc3RycG9zKCRudmFsLCRjaCkgIT09IEZBTFNFICkgewogICAgICAgICAgICAgICAgJGZuZCA9IDE7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiggJGZuZCApIHsKICAgICAgICAgICAgLy8gdGhlcmUgYXJlIGJhZCBjaGFyYWN0ZXJzLiBnb3R0YSBlc2NhcGUgdGhlIGRvdWJsZSBxdW90ZXMKICAgICAgICAgICAgJG52YWwgPSBzdHJfcmVwbGFjZSgnIicsJ1wiJywkbnZhbCk7CiAgICAgICAgfQogICAgICAgICRudmFsID0gIiciLiR0eXBlLid8OnwnLiRudmFsLiInIjsKICAgICAgICAkb3V0IC49IHNwcmludGYoIiVzID0gJXNcbiIsJGtleSwkbnZhbCk7CiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIF93cml0ZV9maWxlX2hlYWRlcigkY2hlY2tzdW0pCiAgICB7CiAgICAgICAgJG91dCA9ICc7PD9waHAgZGllKCk7IC8qIFNJRz0nLiRjaGVja3N1bS4nICovID8+Jy4iXG4iOwogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBfd3JpdGVfaW5pX2FycmF5KCRhcnIsJHNlY3Rpb24gPSBudWxsKQogICAgewogICAgICAgICRvdXQgPSBudWxsOwogICAgICAgICRzZWN0aW9uID0gdHJpbSgkc2VjdGlvbik7CiAgICAgICAgJGlzX2Fzc29jID0gKGFycmF5X2tleXMoJGFycikgIT09IHJhbmdlKDAsIGNvdW50KCRhcnIpIC0gMSkpOwoKICAgICAgICBpZiggJGlzX2Fzc29jICkgewogICAgICAgICAgICAvLyBwYXNzIG9uZSwgbm9ybWFsIHZhbHVlcwogICAgICAgICAgICBmb3JlYWNoKCAkYXJyIGFzICRrZXkgPT4gJHZhbCApIHsKICAgICAgICAgICAgICAgIGlmKCAhaXNfYXJyYXkoJHZhbCkgKSAkb3V0IC49ICR0aGlzLT5fd3JpdGVfaW5pX3ZhbCgka2V5LCR2YWwpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKCAkb3V0ICkgewogICAgICAgICAgICAgICAgaWYoICEkc2VjdGlvbiApICRzZWN0aW9uID0gJ21haW4nOwogICAgICAgICAgICAgICAgJG91dCA9ICR0aGlzLT5fd3JpdGVfaW5pX3NlY3Rpb24oJHNlY3Rpb24pIC4gJG91dDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gcGFzcyB0d28sIG5lc3RlZCBhcnJheXMKICAgICAgICAgICAgZm9yZWFjaCggJGFyciBhcyAka2V5ID0+ICR2YWwgKSB7CiAgICAgICAgICAgICAgICBpZiggIWlzX2FycmF5KCR2YWwpICkgY29udGludWU7CiAgICAgICAgICAgICAgICBpZiggYXJyYXlfa2V5cygkdmFsKSAhPT0gcmFuZ2UoMCwgY291bnQoJHZhbCkgLSAxKSApIHsKICAgICAgICAgICAgICAgICAgICAvLyBhc3NvY2lhdGl2ZSBjaGlsZCBhcnJheQogICAgICAgICAgICAgICAgICAgICR0bXAgPSBudWxsOwogICAgICAgICAgICAgICAgICAgIGlmKCAkc2VjdGlvbiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRtcCA9ICRzZWN0aW9uLiIgOiAka2V5IjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0bXAgPSAka2V5OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkb3V0IC49ICR0aGlzLT5fd3JpdGVfaW5pX2FycmF5KCR2YWwsJHRtcCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvLyBub3JtYWwgY2hpbGQgYXJyYXkKICAgICAgICAgICAgICAgICAgICAkb3V0IC49ICR0aGlzLT5fd3JpdGVfaW5pX2FycmF5KCR2YWwsJGtleSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmKCAhJHNlY3Rpb24gKSAkc2VjdGlvbiA9ICdtYWluJzsKICAgICAgICAgICAgZm9yKCAkaSA9IDAsICRuID0gY291bnQoJGFycik7ICRpIDwgJG47ICRpKysgKSB7CiAgICAgICAgICAgICAgICAkb3V0IC49ICR0aGlzLT5fd3JpdGVfaW5pX3ZhbCgkc2VjdGlvbi4nW10nLCRhcnJbJGldKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJG91dDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2VuZXJhdGUoJGRhdGEpCiAgICB7CiAgICAgICAgJGNrc3VtID0gJHRoaXMtPl9jYWxjX2NoZWNrc3VtKCRkYXRhKTsKICAgICAgICAkb3V0ID0gJHRoaXMtPl93cml0ZV9maWxlX2hlYWRlcigkY2tzdW0pOwogICAgICAgICRvdXQgLj0gJHRoaXMtPl93cml0ZV9pbmlfYXJyYXkoJGRhdGEpOwogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB3cml0ZSgkZGF0YSwkZmlsZW5hbWUgPSBudWxsKQogICAgewogICAgICAgIGlmKCAhJGZpbGVuYW1lICkgJGZpbGVuYW1lID0gJHRoaXMtPl9maWxlbmFtZTsKICAgICAgICBpZiggISRmaWxlbmFtZSApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignTm8gZmlsZW5hbWUgc3BlY2lmaWVkIHRvIGluc3RhbmNlIG9mICcuX19DTEFTU19fKTsKICAgICAgICAkZGlyID0gZGlybmFtZSgkdGhpcy0+X2ZpbGVuYW1lKTsKICAgICAgICBpZiggKGlzX2ZpbGUoJGZpbGVuYW1lKSAmJiAhaXNfd3JpdGFibGUoJHRoaXMtPl9maWxlbmFtZSkpIHx8ICFpc193cml0YWJsZSgkZGlyKSApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCJObyBwZXJtaXNzaW9uIHRvIHdyaXRlIHRvICIuJHRoaXMtPl9maWxlbmFtZSk7CiAgICAgICAgfQoKICAgICAgICAkZmggPSBmb3BlbigkZmlsZW5hbWUsJ3cnKTsKICAgICAgICBmd3JpdGUoJGZoLCR0aGlzLT5nZW5lcmF0ZSgpKTsKICAgICAgICBmY2xvc2UoJGZoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2F2ZSgkZGF0YSkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPndyaXRlKCRkYXRhKTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX2NvbnZlcnRfdmFsdWVzKCRkYXRhKQogICAgewogICAgICAgICRvdXQgPSBhcnJheSgpOwogICAgICAgIGZvcmVhY2goICRkYXRhIGFzICRrZXkgPT4gJHZhbCApIHsKICAgICAgICAgICAgaWYoIGlzX2FycmF5KCR2YWwpICkgewogICAgICAgICAgICAgICAgJG91dFska2V5XSA9ICR0aGlzLT5fY29udmVydF92YWx1ZXMoJHZhbCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBsaXN0KCR0eXBlLCR2YWwpID0gZXhwbG9kZSgnfDp8JywkdmFsLDIpOwogICAgICAgICAgICAgICAgc3dpdGNoKCAkdHlwZSApIHsKICAgICAgICAgICAgICAgIGNhc2UgJ2Jvb2xlYW4nOgogICAgICAgICAgICAgICAgICAgICRvdXRbJGtleV0gPSAoYm9vbCkgJHZhbDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2ludGVnZXInOgogICAgICAgICAgICAgICAgICAgICRvdXRbJGtleV0gPSAoaW50KSAkdmFsOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAncmVhbCc6CiAgICAgICAgICAgICAgICBjYXNlICdmbG9hdCc6CiAgICAgICAgICAgICAgICBjYXNlICdkb3VibGUnOgogICAgICAgICAgICAgICAgICAgICRvdXRbJGtleV0gPSAoZmxvYXQpICR2YWw7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdzdHJpbmcnOgogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAkb3V0WyRrZXldID0gKHN0cmluZykgJHZhbDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJG91dDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcGFyc2UoJGNvbnRlbnRzLCR2ZXJpZnkgPSBUUlVFKQogICAgewogICAgICAgIGlmKCAkdmVyaWZ5ICkgZGllKCdvb3BzJyk7CiAgICAgICAgLy8gZ2V0IHRoZSBmaXJzdCBsaW5lCiAgICAgICAgJGZpcnN0X2xpbmUgPSBleHBsb2RlKCJcbiIsJGNvbnRlbnRzLDIpWzBdOwogICAgICAgICRmaWxlX3NpZyA9IG51bGw7CiAgICAgICAgJG1hdGNoZXMgPSBudWxsOwogICAgICAgIHByZWdfbWF0Y2goJy9ccytTSUc9KFswLTlBLVphLXpdezMyfSlccysvJywkZmlyc3RfbGluZSwkbWF0Y2hlcyk7CiAgICAgICAgaWYoICRtYXRjaGVzWzFdICkgJGZpbGVfc2lnID0gJG1hdGNoZXNbMV07CiAgICAgICAgdW5zZXQoJG1hdGNoZXMpOwoKICAgICAgICAkcmF3X2RhdGEgPSBwYXJzZV9pbmlfc3RyaW5nKCRjb250ZW50cyxUUlVFKTsKCiAgICAgICAgLy8gd2UgaGF2ZSBhIGZsYXQgbGlzdCBvZiBzZWN0aW9ucywgZWFjaCBzZWN0aW9uIGlzIGFuIGFycmF5CiAgICAgICAgLy8gdGhlIHRvcCBzZWN0aW9uIHNob3VsZCBub3QgaGF2ZSBhbnkgbmVzdGluZwogICAgICAgICRhbGxfa2V5cyA9IGFycmF5X2tleXMoJHJhd19kYXRhKTsKICAgICAgICAka2V5MCA9ICRhbGxfa2V5c1swXTsKICAgICAgICAkcGFydHMgPSBleHBsb2RlKCcgOiAnLCRrZXkwKTsKICAgICAgICBpZiggJHBhcnRzWzBdICE9ICRrZXkwICkgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdJbnZhbGlkIGZpbGUgZm9ybWF0LCBmb3VuZCBuZXN0ZWQgY2hpbGQgYXMgZmlyc3QgZWxlbWVudCcpOwoKICAgICAgICAkb3V0ID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoKCAkcmF3X2RhdGEgYXMgJGtleSA9PiAkdmFsICkgewogICAgICAgICAgICAkcGFydHMgPSBleHBsb2RlKCcgOiAnLCRrZXkpOwoKICAgICAgICAgICAgaWYoIGNvdW50KCRwYXJ0cykgPT0gMSApIHsKICAgICAgICAgICAgICAgICRvdXRbJGtleV0gPSAkdGhpcy0+X2NvbnZlcnRfdmFsdWVzKCR2YWwpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJHRtcCA9JiAkb3V0OwogICAgICAgICAgICAgICAgJGkgPSBudWxsOwogICAgICAgICAgICAgICAgZm9yKCAkaSA9IDEsICRuID0gY291bnQoJHBhcnRzKSAtIDE7ICRpIDwgJG47ICRpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgJHBhcnQgPSAkcGFydHNbJGldOwogICAgICAgICAgICAgICAgICAgIGlmKCAhaXNfYXJyYXkoJHRtcFskcGFydF0pICkgJHRtcFskcGFydF0gPSBhcnJheSgpOwogICAgICAgICAgICAgICAgICAgICR0bXAgPSYgJHRtcFskcGFydF07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkdG1wWyRwYXJ0c1skaV1dID0gJHRoaXMtPl9jb252ZXJ0X3ZhbHVlcygkdmFsKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYoIGNvdW50KCRvdXQpID09IDEgJiYgaXNzZXQoJG91dFska2V5MF0pICkgewogICAgICAgICAgICAkb3V0ID0gJG91dFska2V5MF07CiAgICAgICAgfQoKICAgICAgICBpZiggJHZlcmlmeSApIHsKICAgICAgICAgICAgJGNhbGNfc2lnID0gJHRoaXMtPl9jYWxjX2NoZWNrc3VtKCRvdXQpOwogICAgICAgICAgICBpZiggJGZpbGVfc2lnICE9ICRjYWxjX3NpZyApIHRocm93IG5ldyBcUmFuZ2VFeGNlcHRpb24oIklOSSBGaWxlIHNpZ25hdHVyZSBkaWQgbm90IG1hdGNoIHRoZSBzaWduYXR1cmUgb2YgdGhlIGZpbGUgY29udGVudHMiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlYWQoJGZpbGVuYW1lID0gbnVsbCwkdmVyaWZ5ID0gVFJVRSkKICAgIHsKICAgICAgICBpZiggJGZpbGVuYW1lICkgJHRoaXMtPnNldF9maWxlbmFtZSgkZmlsZW5hbWUpOwoKICAgICAgICBpZiggIWlzX2ZpbGUoJHRoaXMtPl9maWxlbmFtZSkgfHwgIWlzX3JlYWRhYmxlKCR0aGlzLT5fZmlsZW5hbWUpICkgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKHNwcmludGYoIkZpbGUgJXMgY291bGQgbm90IGJlIHJlYWQiLCR0aGlzLT5fZmlsZW5hbWUpKTsKICAgICAgICAkY29udGVudHMgPSBmaWxlX2dldF9jb250ZW50cygkdGhpcy0+X2ZpbGVuYW1lKTsKICAgICAgICByZXR1cm4gJHRoaXMtPnBhcnNlKCRjb250ZW50cywkdmVyaWZ5KTsKICAgIH0KCn0gLy8gZW5kIG9mIGNsYXNzCgojCiMgRU9GCiM=]]></data>
	</file>
	<file>
	  <filename>/phar/lib/class.simple_test.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNuYXBzaG90TWdyCiMgQXV0aG9yOiBSb2xmIFRqYXNzZW5zIChjbXNjYW5iZXNpbXBsZS5vcmcpCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4KIyAoYykgMjAwNCAtIDIwMTEgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIChjKSAyMDExIC0gMjAxOCBieSBUaGUgQ01TIE1hZGUgU2ltcGxlIERldmVsb3BtZW50IFRlYW0KIyAoYykgMjAxOCBhbmQgYmV5b25kIGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRm91bmRhdGlvbgojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9zbmFwc2hvdG1ncgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGb3JrIGZyb20gQ0dTbmFwc2hvdCBtb2R1bGUgYnkgUm9iZXJ0IENhbXBiZWxsIChjYWxndXkxMDAwLmNvbSkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCm5hbWVzcGFjZSBTbmFwc2hvdE1nclxwaGFyOwoKYWJzdHJhY3QgY2xhc3MgdGVzdF9iYXNlCnsKICAgIHByb3RlY3RlZCAkX2xhYmVsOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfbGFiZWwoKSB7IHJldHVybiAkdGhpcy0+X2xhYmVsOyB9CiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gZXhlY3V0ZSgpOwp9CgpjbGFzcyBmYWxzZV90ZXN0IGV4dGVuZHMgdGVzdF9iYXNlCnsKICAgIHByaXZhdGUgJF92YWw7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRsYWJlbCwkdmFsKQogICAgewogICAgICAgICR0aGlzLT5fbGFiZWwgPSB0cmltKCRsYWJlbCk7CiAgICAgICAgJHRoaXMtPl92YWwgPSAoYm9vbCkgJHZhbDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhlY3V0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fdmFsID09IEZBTFNFOwogICAgfQp9CgpjbGFzcyB0cnVlX3Rlc3QgZXh0ZW5kcyB0ZXN0X2Jhc2UKewogICAgcHJpdmF0ZSAkX3ZhbDsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGxhYmVsLCR2YWwpCiAgICB7CiAgICAgICAgJHRoaXMtPl9sYWJlbCA9IHRyaW0oJGxhYmVsKTsKICAgICAgICAkdGhpcy0+X3ZhbCA9IChib29sKSAkdmFsOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBleGVjdXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl92YWwgPT0gVFJVRTsKICAgIH0KfQoKY2xhc3MgZXh0ZW5zaW9uX3Rlc3QgZXh0ZW5kcyB0ZXN0X2Jhc2UKewogICAgcHJpdmF0ZSAkX2V4dDsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGxhYmVsLCRleHQpCiAgICB7CiAgICAgICAgJHRoaXMtPl9sYWJlbCA9IHRyaW0oJGxhYmVsKTsKICAgICAgICAkdGhpcy0+X2V4dCA9IHRyaW0oJGV4dCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGV4ZWN1dGUoKQogICAgewogICAgICAgIHJldHVybiBleHRlbnNpb25fbG9hZGVkKCR0aGlzLT5fZXh0KTsKICAgIH0KfQoKY2xhc3MgbWludmVyc2lvbl90ZXN0IGV4dGVuZHMgdGVzdF9iYXNlCnsKICAgIHByaXZhdGUgJF9taW52YWw7CiAgICBwcml2YXRlICRfdmFsOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbGFiZWwsJG1pbnZhbCwkdmFsKQogICAgewogICAgICAgICR0aGlzLT5fbGFiZWwgPSB0cmltKCRsYWJlbCk7CiAgICAgICAgJHRoaXMtPl9taW52YWwgPSB0cmltKCRtaW52YWwpOwogICAgICAgICR0aGlzLT5fdmFsID0gdHJpbSgkdmFsKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhlY3V0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICh2ZXJzaW9uX2NvbXBhcmUoJHRoaXMtPl92YWwsJHRoaXMtPl9taW52YWwpID49IDApOwogICAgfQp9CgpjbGFzcyBmdW5jdGlvbl90ZXN0IGV4dGVuZHMgdGVzdF9iYXNlCnsKICAgIHByaXZhdGUgJF9mbjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGxhYmVsLCRmbikKICAgIHsKICAgICAgICAkdGhpcy0+X2xhYmVsID0gdHJpbSgkbGFiZWwpOwogICAgICAgICR0aGlzLT5fZm4gPSB0cmltKCRmbik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGV4ZWN1dGUoKQogICAgewogICAgICAgIHJldHVybiBmdW5jdGlvbl9leGlzdHMoJHRoaXMtPl9mbik7CiAgICB9Cn0KCmNsYXNzIHNpbXBsZV90ZXN0IGV4dGVuZHMgdGVzdF9iYXNlCnsKICAgIHByaXZhdGUgJF9mbjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGxhYmVsLGNhbGxhYmxlICRmbikKICAgIHsKICAgICAgICAkdGhpcy0+X2xhYmVsID0gdHJpbSgkbGFiZWwpOwogICAgICAgICR0aGlzLT5fZm4gPSAkZm47CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGV4ZWN1dGUoKQogICAgewogICAgICAgICR0bXAgPSAkdGhpcy0+X2ZuOwogICAgICAgIHJldHVybiAkdG1wKCk7CiAgICB9Cn0KCmNsYXNzIGRpcl93cml0YWJsZV90ZXN0IGV4dGVuZHMgdGVzdF9iYXNlCnsKICAgIHByaXZhdGUgJF9kaXI7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRsYWJlbCwkZGlyKQogICAgewogICAgICAgICR0aGlzLT5fbGFiZWwgPSB0cmltKCRsYWJlbCk7CiAgICAgICAgJHRoaXMtPl9kaXIgPSB0cmltKCRkaXIpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBleGVjdXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gKGlzX2RpcigkdGhpcy0+X2RpcikgJiYgaXNfd3JpdGFibGUoJHRoaXMtPl9kaXIpKTsKICAgIH0KfQoKY2xhc3MgZGlyX2VtcHR5X3Rlc3QgZXh0ZW5kcyB0ZXN0X2Jhc2UKewogICAgcHJpdmF0ZSAkX2RpcjsKICAgIHByaXZhdGUgJF9leGNsdWRlczsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGxhYmVsLCRkaXIsJGV4Y2x1ZGVzID0gbnVsbCkKICAgIHsKICAgICAgICAkdGhpcy0+X2xhYmVsID0gJGxhYmVsOwogICAgICAgICR0aGlzLT5fZGlyID0gJGRpcjsKICAgICAgICAkdGhpcy0+X2V4Y2x1ZGVzID0gJGV4Y2x1ZGVzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBleGVjdXRlKCkKICAgIHsKICAgICAgICAkZmlsZXMxID0gZ2xvYigkdGhpcy0+X2Rpci4nLy4/PyonKTsKICAgICAgICAkZmlsZXMyID0gZ2xvYigkdGhpcy0+X2Rpci4nLyonKTsKICAgICAgICAkZmlsZXMgPSBhcnJheV9tZXJnZSgkZmlsZXMxLCRmaWxlczIpOwogICAgICAgIGZvcmVhY2goICRmaWxlcyBhcyAkZmlsZSApIHsKICAgICAgICAgICAgJGJuID0gc3RyX3JlcGxhY2UoJHRoaXMtPl9kaXIuJy8nLCcnLCRmaWxlKTsKICAgICAgICAgICAgb3V0cHV0KCd0ZXN0OiAnLiRibik7CiAgICAgICAgICAgIGlmKCAhY291bnQoJHRoaXMtPl9leGNsdWRlcykgfHwgIWluX2FycmF5KCRibiwkdGhpcy0+X2V4Y2x1ZGVzKSApIHJldHVybiBGQUxTRTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFRSVUU7CiAgICB9Cn0KCiMKIyBFT0YKIw==]]></data>
	</file>
	<file>
	  <filename>/phar/lib/db_utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNuYXBzaG90TWdyCiMgQXV0aG9yOiBSb2xmIFRqYXNzZW5zIChjbXNjYW5iZXNpbXBsZS5vcmcpCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4KIyAoYykgMjAwNCAtIDIwMTEgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIChjKSAyMDExIC0gMjAxOCBieSBUaGUgQ01TIE1hZGUgU2ltcGxlIERldmVsb3BtZW50IFRlYW0KIyAoYykgMjAxOCBhbmQgYmV5b25kIGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRm91bmRhdGlvbgojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9zbmFwc2hvdG1ncgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGb3JrIGZyb20gQ0dTbmFwc2hvdCBtb2R1bGUgYnkgUm9iZXJ0IENhbXBiZWxsIChjYWxndXkxMDAwLmNvbSkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCm5hbWVzcGFjZSBTbmFwc2hvdE1nclxwaGFyOwoKZnVuY3Rpb24gdGVzdF9kYmNvbmZpZygkZGJjb25maWcpCnsKICAgIGlmKCAhaXNfYXJyYXkoJGRiY29uZmlnKSApIHJldHVybiBGQUxTRTsKICAgICRrZXlzID0gYXJyYXkoJ2RibXMnLCdkYl9ob3N0bmFtZScsJ2RiX3VzZXJuYW1lJywnZGJfcGFzc3dvcmQnLCdkYl9uYW1lJyk7CiAgICAka2V5czIgPSBhcnJheV9rZXlzKCRkYmNvbmZpZyk7CiAgICBmb3JlYWNoKCAka2V5cyBhcyAka2V5ICkgewogICAgICAgIGlmKCAhaW5fYXJyYXkoJGtleSwka2V5czIpICkgcmV0dXJuIEZBTFNFOwogICAgfQogICAgcmV0dXJuIFRSVUU7Cn0KCmZ1bmN0aW9uIHRlc3RfZGJfY29ubmVjdCgkZGJjb25maWcpCnsKICAgIGlmKCAhdGVzdF9kYmNvbmZpZygkZGJjb25maWcpICkgcmV0dXJuIEZBTFNFOwoKICAgICRvdXQgPSBudWxsOwogICAgc3dpdGNoKCAkZGJjb25maWdbJ2RibXMnXSApIHsKICAgIGNhc2UgJ215c3FsJzoKICAgICAgICBpZiggIWZ1bmN0aW9uX2V4aXN0cygnbXlzcWxfY29ubmVjdCcpICkgcmV0dXJuIEZBTFNFOwogICAgICAgICRvdXQgPSBteXNxbF9jb25uZWN0KCRkYmNvbmZpZ1snZGJfaG9zdG5hbWUnXSwkZGJjb25maWdbJ2RiX3VzZXJuYW1lJ10sJGRiY29uZmlnWydkYl9wYXNzd29yZCddLCRkYmNvbmZpZ1snZGJfbmFtZSddKTsKICAgICAgICBpZiggISRvdXQgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgYnJlYWs7CgogICAgY2FzZSAnbXlzcWxpJzoKICAgICAgICBpZiggIWZ1bmN0aW9uX2V4aXN0cygnbXlzcWxpX2Nvbm5lY3QnKSApIHJldHVybiBGQUxTRTsKICAgICAgICAkb3V0ID0gbXlzcWxpX2Nvbm5lY3QoJGRiY29uZmlnWydkYl9ob3N0bmFtZSddLCRkYmNvbmZpZ1snZGJfdXNlcm5hbWUnXSwkZGJjb25maWdbJ2RiX3Bhc3N3b3JkJ10sJGRiY29uZmlnWydkYl9uYW1lJ10pOwogICAgICAgIGlmKCAhJG91dCApIHJldHVybiBGQUxTRTsKICAgICAgICBicmVhazsKCiAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiBGQUxTRTsKICAgIH0KCiAgICByZXR1cm4gJG91dDsKfQoKZnVuY3Rpb24gdGVzdF9kYl9lbXB0eSgkaGFuZGxlLCRkYmNvbmZpZykKewogICAgaWYoICF0ZXN0X2RiY29uZmlnKCRkYmNvbmZpZykgKSByZXR1cm4gRkFMU0U7CgogICAgJG91dCA9IG51bGw7CiAgICAkc3FsID0gJ1NIT1cgVEFCTEVTJzsKICAgIHN3aXRjaCggJGRiY29uZmlnWydkYm1zJ10gKSB7CiAgICBjYXNlICdteXNxbCc6CiAgICAgICAgaWYoICgkcmVzdWx0ID0gbXlzcWxpX3F1ZXJ5KCRoYW5kbGUsJHNxbCkpICkgewogICAgICAgICAgICAkbnRhYmxlcyA9IG15c3FsaV9udW1fcm93cygkcmVzdWx0KTsKICAgICAgICAgICAgaWYoICRudGFibGVzID4gMCApIHJldHVybiBGQUxTRTsKICAgICAgICAgICAgcmV0dXJuIFRSVUU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBGQUxTRTsKCiAgICBjYXNlICdteXNxbGknOgogICAgICAgIGlmKCAoJHJlc3VsdCA9IG15c3FsaV9xdWVyeSgkaGFuZGxlLCRzcWwpKSApIHsKICAgICAgICAgICAgJG50YWJsZXMgPSBteXNxbGlfbnVtX3Jvd3MoJHJlc3VsdCk7CiAgICAgICAgICAgIGlmKCAkbnRhYmxlcyA+IDAgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgICAgIHJldHVybiBUUlVFOwogICAgICAgIH0KICAgICAgICByZXR1cm4gRkFMU0U7CgogICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gRkFMU0U7CiAgICB9Cn0KCmZ1bmN0aW9uIGRiX2ltcG9ydCgkZGJjb25maWcsJGRiZmlsZSkKewogICAgLy8gdGhpcyB1c2VzIHNoZWxsIGNvbW1hbmRzCiAgICAkY29tbWFuZD0ibXlzcWwgLS1ob3N0PXskZGJjb25maWdbJ2RiX2hvc3RuYW1lJ119IC0tdXNlcj17JGRiY29uZmlnWydkYl91c2VybmFtZSddfSAtLXBhc3N3b3JkPXskZGJjb25maWdbJ2RiX3Bhc3N3b3JkJ119IHskZGJjb25maWdbJ2RiX25hbWUnXX0gPCB7JGRiZmlsZX0iOwogICAgZXhlYygkY29tbWFuZCwkb3V0cHV0PWFycmF5KCksJHdvcmtlZCk7CiAgICBpZiggJHdvcmtlZCA9PSAwICkgcmV0dXJuIFRSVUU7CiAgICBwcmludF9yKCRvdXRwdXQpOwogICAgcmV0dXJuIEZBTFNFOwp9CgojCiMgRU9GCiM=]]></data>
	</file>
	<file>
	  <filename>/phar/lib/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/phar/lib/utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNuYXBzaG90TWdyCiMgQXV0aG9yOiBSb2xmIFRqYXNzZW5zIChjbXNjYW5iZXNpbXBsZS5vcmcpCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4KIyAoYykgMjAwNCAtIDIwMTEgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIChjKSAyMDExIC0gMjAxOCBieSBUaGUgQ01TIE1hZGUgU2ltcGxlIERldmVsb3BtZW50IFRlYW0KIyAoYykgMjAxOCBhbmQgYmV5b25kIGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRm91bmRhdGlvbgojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9zbmFwc2hvdG1ncgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGb3JrIGZyb20gQ0dTbmFwc2hvdCBtb2R1bGUgYnkgUm9iZXJ0IENhbXBiZWxsIChjYWxndXkxMDAwLmNvbSkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmluY2x1ZGVfb25jZShfX0RJUl9fIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICdjbGFzcy5zZWN1cmVfaW5pX2ZpbGUucGhwJyk7CgpmdW5jdGlvbiBlbmRzd2l0aCggJHN0ciwgJHN1YiApCnsKCXJldHVybiAoIHN1YnN0ciggJHN0ciwgc3RybGVuKCAkc3RyICkgLSBzdHJsZW4oICRzdWIgKSApID09ICRzdWIgKTsKfQoKZnVuY3Rpb24gc3RhcnRzd2l0aCggJHN0ciwgJHN1YiApCnsKCXJldHVybiAoIHN1YnN0ciggJHN0ciwgMCwgc3RybGVuKCAkc3ViICkgKSA9PSAkc3ViICk7Cn0KCmZ1bmN0aW9uIGNscygpCnsKICAgIHByaW50IGNocigyNykgLiAiWzJKIiAuIGNocigyNykgLiAiWztIIjsKfQoKZnVuY3Rpb24gb3V0cHV0KCRzdHIsJG5ld2xpbmUgPSBUUlVFKQp7CiAgICAkc3RyID0gdHJpbSgkc3RyKTsKICAgIGlmKCAhJHN0ciApIHJldHVybjsKICAgIGlmKCAkbmV3bGluZSApIHsKICAgICAgICBpZiggIWVuZHN3aXRoKCRzdHIsIlxuIikgKSAkc3RyIC49ICJcbiI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBpZiggIWVuZHN3aXRoKCRzdHIsJyAnKSApICRzdHIgLj0gJyAnOwogICAgfQogICAgZWNobyAkc3RyOwp9CgpmdW5jdGlvbiBlcnJvcigkbXNnLCRwcmVmaXggPSBUUlVFLCRuZXdsaW5lID0gVFJVRSkKewogICAgJG1zZyA9IChzdHJpbmcpJG1zZzsKICAgIGlmKCAhJG1zZyApIHJldHVybjsKCiAgICBpZiggJHByZWZpeCApICRtc2cgPSAiRVJST1I6ICIuJG1zZzsKICAgIGlmKCAkbmV3bGluZSAmJiAhZW5kc3dpdGgoJG1zZywiXG4iKSApICRtc2cgLj0gIlxuIjsKICAgIGZ3cml0ZShTVERFUlIsJG1zZyk7Cn0KCmZ1bmN0aW9uIG5ld2xpbmUoKQp7CiAgICBlY2hvICJcbiI7Cn0KCmZ1bmN0aW9uIGFza19ib29sKCRwcm9tcHQsJGFjY2VwdCA9IC0xLCRhdXRvcHJvbXB0ID0gVFJVRSkKewogICAgd2hpbGUoIDEgKSB7CiAgICAgICAgbmV3bGluZSgpOwogICAgICAgIGlmKCAkYXV0b3Byb21wdCApICRwcm9tcHQgLj0gJyBbWS9uXTonOwogICAgICAgIG91dHB1dCgkcHJvbXB0LEZBTFNFKTsKICAgICAgICAkaW4gPSBmZ2V0cyhTVERJTik7CiAgICAgICAgJGluID0gdHJpbSgkaW4pOwogICAgICAgIGlmKCAhJGluICkgewogICAgICAgICAgICBpZiggJGFjY2VwdCA9PSBGQUxTRSApIHJldHVybiBGQUxTRTsKICAgICAgICAgICAgaWYoICRhY2NlcHQgPT0gVFJVRSApIHJldHVybiBUUlVFOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaWYoICRpbiA9PSAnZXhpdCcgfHwgJGluID09ICdxdWl0JyApIGV4aXQ7CiAgICAgICAgICAgICRpbiA9IHN0cnRvbG93ZXIoJGluKTsKICAgICAgICAgICAgaWYoICRpbiA9PSAnMScgfHwgJGluID09ICd5JyApIHJldHVybiBUUlVFOwogICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgfQogICAgfQp9CgpmdW5jdGlvbiBhc2tfb3B0aW9uKCRwcm9tcHQsJG9wdGlvbnMpCnsKICAgIHdoaWxlKCAxICkgewogICAgICAgIG5ld2xpbmUoKTsKICAgICAgICBvdXRwdXQoJHByb21wdCxGQUxTRSk7CiAgICAgICAgJGluID0gdHJpbShmZ2V0cyhTVERJTikpOwogICAgICAgIGlmKCAkaW4gJiYgaW5fYXJyYXkoJGluLGFycmF5KCdxJywncXVpdCcsJ2V4aXQnKSkgKSBleGl0OwogICAgICAgIGlmKCAkaW4gJiYgaW5fYXJyYXkoJGluLCRvcHRpb25zKSApIHJldHVybiAkaW47CiAgICB9CiAgICBlcnJvcignUGxlYXNlIGVudGVyIGEgdmFsaWQgb3B0aW9uJyk7Cn0KCmZ1bmN0aW9uIGFza19zdHJpbmdfcmVxdWlyZWQoJHByb21wdCwkZXJyc3RyID0gbnVsbCkKewogICAgd2hpbGUoIDEgKSB7CiAgICAgICAgbmV3bGluZSgpOwogICAgICAgIG91dHB1dCgkcHJvbXB0LEZBTFNFKTsKICAgICAgICAkc3RyID0gZmdldHMoU1RESU4pOwogICAgICAgICRzdHIgPSB0cmltKCRzdHIpOwogICAgICAgIGlmKCAhJHN0ciApIHsKICAgICAgICAgICAgaWYoICEkZXJyb3JzdHIgKSAkZXJyb3JzdHIgPSAnSW52YWxpZCBSZXNwb25zZSc7CiAgICAgICAgICAgIGVycm9yKCRlcnJvcnN0cik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYoICRzdHIgPT0gJ3EnIHx8ICRzdHIgPT0gJ2V4aXQnIHx8ICRzdHIgPT0gJ3F1aXQnICkgZXhpdDsKICAgICAgICAgICAgcmV0dXJuICRzdHI7CiAgICAgICAgfQogICAgfQp9CgpmdW5jdGlvbiBpc19zbmFwc2hvdG1ncigkZmlsZW5hbWUpCnsKICAgICRmaWxlbmFtZSA9IHRyaW0oJGZpbGVuYW1lKTsKICAgIGlmKCAhJGZpbGVuYW1lICkgcmV0dXJuIEZBTFNFOwoKICAgICRsb3dlciA9IHN0cnRvbG93ZXIoJGZpbGVuYW1lKTsKICAgIGlmKCAhZW5kc3dpdGgoJGZpbGVuYW1lLCcuemlwJykgKSBSRVRVUk4gRkFMU0U7CgogICAgJGFyY2ggPSBuZXcgXFppcEFyY2hpdmU7CiAgICBpZiggKCRyZXMgPSAkYXJjaC0+b3BlbigkZmlsZW5hbWUpKSAhPT0gVFJVRSApIHsKICAgICAgICByZXR1cm4gRkFMU0U7CiAgICB9CgogICAgJGluaV90ZXh0ID0gJGFyY2gtPmdldEZyb21OYW1lKCd0bXAnIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICcuc25hcHNob3RtZ3InKTsKICAgIGlmKCAhJGluaV90ZXh0ICkgcmV0dXJuIEZBTFNFOwoKICAgICRkdW1wZmlsZSA9ICRhcmNoLT5nZXRGcm9tTmFtZSgndG1wJyAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAnX19teXNxbGR1bXAuc3FsJyk7CiAgICBpZiggISRkdW1wZmlsZSApIHJldHVybiBGQUxTRTsKCiAgICB0cnkgewogICAgICAgICRpbmkgPSBuZXcgXFNuYXBzaG90TWdyXHBoYXJcc2VjdXJlX2luaV9maWxlKCk7CiAgICAgICAgJGluaS0+cGFyc2UoJGluaV90ZXh0LGZhbHNlKTsKICAgIH0KICAgIGNhdGNoKCBcRXhjZXB0aW9uICRlICkgewogICAgICAgIGRpZSgkZS0+R2V0TWVzc2FnZSgpKTsKICAgICAgICByZXR1cm4gRkFMU0U7CiAgICB9CiAgICByZXR1cm4gVFJVRTsKfQoKZnVuY3Rpb24gY29weV9hcmNoZmlsZV90b190bXAoXFppcEFyY2hpdmUgJGFyY2gsJG5hbWUpCnsKICAgICRuYW1lID0gdHJpbSgkbmFtZSk7CiAgICBpZiggISRuYW1lICkgcmV0dXJuOwoKICAgICRkaXIgPSBzeXNfZ2V0X3RlbXBfZGlyKCk7CiAgICBpZiggISRkaXIgKSB7CiAgICAgICAgZXJyb3IoJ0NvdWxkIG5vdCBnZXQgc3lzdGVtIHRlbXBvcmFyeSBkaXJlY3RvcnkuLi4gZXhpdGluZycpOwogICAgICAgIGV4aXQoMSk7CiAgICB9CgogICAgJGZuID0gdGVtcG5hbSgkZGlyLCdjZ3MnKTsgLy8gQFRPRE8gPwogICAgJGRhdGEgPSAkYXJjaC0+Z2V0RnJvbU5hbWUoJG5hbWUpOwogICAgaWYoICRkYXRhICkgewogICAgICAgIGZpbGVfcHV0X2NvbnRlbnRzKCRmbiwkZGF0YSk7CiAgICAgICAgcmV0dXJuICRmbjsKICAgIH0KfQoKZnVuY3Rpb24gd3JpdGVfY29uZmlnX3BocCgkZmlsZW5hbWUsJGRhdGEpCnsKICAgICRub3cgPSBzdHJmdGltZSgnJXgnKTsKICAgICRvdXQgPSAiPD9waHBcbi8vIEdlbmVyYXRlZCBieSBTbmFwc2hvdE1nci1SZXN0b3JlIG9uIHskbm93fVxuIjsKICAgICRmbXQgPSAiXCRjb25maWdbJyVzJ10gPSAnJXMnO1xuIjsKICAgIGZvcmVhY2goICRkYXRhIGFzICRrZXkgPT4gJHZhbCApIHsKICAgICAgICAkb3V0IC49IHNwcmludGYoJGZtdCwka2V5LCR2YWwpOwogICAgfQogICAgJG91dCAuPSAiXG4iOwogICAgZmlsZV9wdXRfY29udGVudHMoJGZpbGVuYW1lLCRvdXQpOwp9CgojCiMgRU9GCiM=]]></data>
	</file>
	<file>
	  <filename>/phar/SnapshotMgr-Restore.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNuYXBzaG90TWdyCiMgQXV0aG9yOiBSb2xmIFRqYXNzZW5zIChjbXNjYW5iZXNpbXBsZS5vcmcpCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4KIyAoYykgMjAwNCAtIDIwMTEgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIChjKSAyMDExIC0gMjAxOCBieSBUaGUgQ01TIE1hZGUgU2ltcGxlIERldmVsb3BtZW50IFRlYW0KIyAoYykgMjAxOCBhbmQgYmV5b25kIGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRm91bmRhdGlvbgojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9zbmFwc2hvdG1ncgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGb3JrIGZyb20gQ0dTbmFwc2hvdCBtb2R1bGUgYnkgUm9iZXJ0IENhbXBiZWxsIChjYWxndXkxMDAwLmNvbSkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiR3ZWIgPSAnd3d3LnBocCc7CgppZiAoaW5fYXJyYXkoJ3BoYXInLCBzdHJlYW1fZ2V0X3dyYXBwZXJzKCkpICYmIGNsYXNzX2V4aXN0cygnUGhhcicsIDApKSB7CiAgICBQaGFyOjppbnRlcmNlcHRGaWxlRnVuY3MoKTsKICAgIHNldF9pbmNsdWRlX3BhdGgoJ3BoYXI6Ly8nIC4gX19GSUxFX18gLiBQQVRIX1NFUEFSQVRPUiAuIGdldF9pbmNsdWRlX3BhdGgoKSk7CiAgICBQaGFyOjp3ZWJQaGFyKG51bGwsICR3ZWIpOwogICAgaW5jbHVkZSAncGhhcjovLycgLiBfX0ZJTEVfXyAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiBFeHRyYWN0X1BoYXI6OlNUQVJUOwogICAgcmV0dXJuOwp9CgppZiAoQChpc3NldCgkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSkgJiYgaXNzZXQoJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10pICYmICgkX1NFUlZFUlsnUkVRVUVTVF9NRVRIT0QnXSA9PSAnR0VUJyB8fCAkX1NFUlZFUlsnUkVRVUVTVF9NRVRIT0QnXSA9PSAnUE9TVCcpKSkgewpFeHRyYWN0X1BoYXI6OmdvKHRydWUpOwokbWltZXMgPSBhcnJheSgKJ3BocHMnID0+IDIsCidjJyA9PiAndGV4dC9wbGFpbicsCidjYycgPT4gJ3RleHQvcGxhaW4nLAonY3BwJyA9PiAndGV4dC9wbGFpbicsCidjKysnID0+ICd0ZXh0L3BsYWluJywKJ2R0ZCcgPT4gJ3RleHQvcGxhaW4nLAonaCcgPT4gJ3RleHQvcGxhaW4nLAonbG9nJyA9PiAndGV4dC9wbGFpbicsCidybmcnID0+ICd0ZXh0L3BsYWluJywKJ3R4dCcgPT4gJ3RleHQvcGxhaW4nLAoneHNkJyA9PiAndGV4dC9wbGFpbicsCidwaHAnID0+IDEsCidpbmMnID0+IDEsCidhdmknID0+ICd2aWRlby9hdmknLAonYm1wJyA9PiAnaW1hZ2UvYm1wJywKJ2NzcycgPT4gJ3RleHQvY3NzJywKJ2dpZicgPT4gJ2ltYWdlL2dpZicsCidodG0nID0+ICd0ZXh0L2h0bWwnLAonaHRtbCcgPT4gJ3RleHQvaHRtbCcsCidodG1scycgPT4gJ3RleHQvaHRtbCcsCidpY28nID0+ICdpbWFnZS94LWljbycsCidqcGUnID0+ICdpbWFnZS9qcGVnJywKJ2pwZycgPT4gJ2ltYWdlL2pwZWcnLAonanBlZycgPT4gJ2ltYWdlL2pwZWcnLAonanMnID0+ICdhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQnLAonbWlkaScgPT4gJ2F1ZGlvL21pZGknLAonbWlkJyA9PiAnYXVkaW8vbWlkaScsCidtb2QnID0+ICdhdWRpby9tb2QnLAonbW92JyA9PiAnbW92aWUvcXVpY2t0aW1lJywKJ21wMycgPT4gJ2F1ZGlvL21wMycsCidtcGcnID0+ICd2aWRlby9tcGVnJywKJ21wZWcnID0+ICd2aWRlby9tcGVnJywKJ3BkZicgPT4gJ2FwcGxpY2F0aW9uL3BkZicsCidwbmcnID0+ICdpbWFnZS9wbmcnLAonc3dmJyA9PiAnYXBwbGljYXRpb24vc2hvY2t3YXZlLWZsYXNoJywKJ3RpZicgPT4gJ2ltYWdlL3RpZmYnLAondGlmZicgPT4gJ2ltYWdlL3RpZmYnLAond2F2JyA9PiAnYXVkaW8vd2F2JywKJ3hibScgPT4gJ2ltYWdlL3hibScsCid4bWwnID0+ICd0ZXh0L3htbCcsCik7CgpoZWFkZXIoIkNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUiKTsKaGVhZGVyKCJQcmFnbWE6IG5vLWNhY2hlIik7CgokYmFzZW5hbWUgPSBiYXNlbmFtZShfX0ZJTEVfXyk7CmlmICghc3RycG9zKCRfU0VSVkVSWydSRVFVRVNUX1VSSSddLCAkYmFzZW5hbWUpKSB7CmNoZGlyKEV4dHJhY3RfUGhhcjo6JHRlbXApOwppbmNsdWRlICR3ZWI7CnJldHVybjsKfQokcHQgPSBzdWJzdHIoJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10sIHN0cnBvcygkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSwgJGJhc2VuYW1lKSArIHN0cmxlbigkYmFzZW5hbWUpKTsKaWYgKCEkcHQgfHwgJHB0ID09ICcvJykgewokcHQgPSAkd2ViOwpoZWFkZXIoJ0hUVFAvMS4xIDMwMSBNb3ZlZCBQZXJtYW5lbnRseScpOwpoZWFkZXIoJ0xvY2F0aW9uOiAnIC4gJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10gLiAnLycgLiAkcHQpOwpleGl0Owp9CiRhID0gcmVhbHBhdGgoRXh0cmFjdF9QaGFyOjokdGVtcCAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkcHQpOwppZiAoISRhIHx8IHN0cmxlbihkaXJuYW1lKCRhKSkgPCBzdHJsZW4oRXh0cmFjdF9QaGFyOjokdGVtcCkpIHsKaGVhZGVyKCdIVFRQLzEuMCA0MDQgTm90IEZvdW5kJyk7CmVjaG8gIjxodG1sPlxuIDxoZWFkPlxuICA8dGl0bGU+RmlsZSBOb3QgRm91bmQ8dGl0bGU+XG4gPC9oZWFkPlxuIDxib2R5PlxuICA8aDE+NDA0IC0gRmlsZSAiLCAkcHQsICIgTm90IEZvdW5kPC9oMT5cbiA8L2JvZHk+XG48L2h0bWw+IjsKZXhpdDsKfQokYiA9IHBhdGhpbmZvKCRhKTsKaWYgKCFpc3NldCgkYlsnZXh0ZW5zaW9uJ10pKSB7CmhlYWRlcignQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluJyk7CmhlYWRlcignQ29udGVudC1MZW5ndGg6ICcgLiBmaWxlc2l6ZSgkYSkpOwpyZWFkZmlsZSgkYSk7CmV4aXQ7Cn0KaWYgKGlzc2V0KCRtaW1lc1skYlsnZXh0ZW5zaW9uJ11dKSkgewppZiAoJG1pbWVzWyRiWydleHRlbnNpb24nXV0gPT09IDEpIHsKaW5jbHVkZSAkYTsKZXhpdDsKfQppZiAoJG1pbWVzWyRiWydleHRlbnNpb24nXV0gPT09IDIpIHsKaGlnaGxpZ2h0X2ZpbGUoJGEpOwpleGl0Owp9CmhlYWRlcignQ29udGVudC1UeXBlOiAnIC4kbWltZXNbJGJbJ2V4dGVuc2lvbiddXSk7CmhlYWRlcignQ29udGVudC1MZW5ndGg6ICcgLiBmaWxlc2l6ZSgkYSkpOwpyZWFkZmlsZSgkYSk7CmV4aXQ7Cn0KfQoKY2xhc3MgRXh0cmFjdF9QaGFyCnsKc3RhdGljICR0ZW1wOwpzdGF0aWMgJG9yaWdkaXI7CmNvbnN0IEdaID0gMHgxMDAwOwpjb25zdCBCWjIgPSAweDIwMDA7CmNvbnN0IE1BU0sgPSAweDMwMDA7CmNvbnN0IFNUQVJUID0gJ2NsaS5waHAnOwpjb25zdCBMRU4gPSA2NjgxOwoKc3RhdGljIGZ1bmN0aW9uIGdvKCRyZXR1cm4gPSBmYWxzZSkKewokZnAgPSBmb3BlbihfX0ZJTEVfXywgJ3JiJyk7CmZzZWVrKCRmcCwgc2VsZjo6TEVOKTsKJEwgPSB1bnBhY2soJ1YnLCAkYSA9IChiaW5hcnkpZnJlYWQoJGZwLCA0KSk7CiRtID0gKGJpbmFyeSknJzsKCmRvIHsKJHJlYWQgPSA4MTkyOwppZiAoJExbMV0gLSBzdHJsZW4oJG0pIDwgODE5MikgewokcmVhZCA9ICRMWzFdIC0gc3RybGVuKCRtKTsKfQokbGFzdCA9IChiaW5hcnkpZnJlYWQoJGZwLCAkcmVhZCk7CiRtIC49ICRsYXN0Owp9IHdoaWxlIChzdHJsZW4oJGxhc3QpICYmIHN0cmxlbigkbSkgPCAkTFsxXSk7CgppZiAoc3RybGVuKCRtKSA8ICRMWzFdKSB7CmRpZSgnRVJST1I6IG1hbmlmZXN0IGxlbmd0aCByZWFkIHdhcyAiJyAuCnN0cmxlbigkbSkgLiciIHNob3VsZCBiZSAiJyAuCiRMWzFdIC4gJyInKTsKfQoKJGluZm8gPSBzZWxmOjpfdW5wYWNrKCRtKTsKJGYgPSAkaW5mb1snYyddOwoKaWYgKCRmICYgc2VsZjo6R1opIHsKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2d6aW5mbGF0ZScpKSB7CmRpZSgnRXJyb3I6IHpsaWIgZXh0ZW5zaW9uIGlzIG5vdCBlbmFibGVkIC0nIC4KJyBnemluZmxhdGUoKSBmdW5jdGlvbiBuZWVkZWQgZm9yIHpsaWItY29tcHJlc3NlZCAucGhhcnMnKTsKfQp9CgppZiAoJGYgJiBzZWxmOjpCWjIpIHsKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2J6ZGVjb21wcmVzcycpKSB7CmRpZSgnRXJyb3I6IGJ6aXAyIGV4dGVuc2lvbiBpcyBub3QgZW5hYmxlZCAtJyAuCicgYnpkZWNvbXByZXNzKCkgZnVuY3Rpb24gbmVlZGVkIGZvciBiejItY29tcHJlc3NlZCAucGhhcnMnKTsKfQp9CgokdGVtcCA9IHNlbGY6OnRtcGRpcigpOwoKaWYgKCEkdGVtcCB8fCAhaXNfd3JpdGFibGUoJHRlbXApKSB7CiRzZXNzaW9ucGF0aCA9IHNlc3Npb25fc2F2ZV9wYXRoKCk7CmlmIChzdHJwb3MgKCRzZXNzaW9ucGF0aCwgIjsiKSAhPT0gZmFsc2UpCiRzZXNzaW9ucGF0aCA9IHN1YnN0ciAoJHNlc3Npb25wYXRoLCBzdHJwb3MgKCRzZXNzaW9ucGF0aCwgIjsiKSsxKTsKaWYgKCFmaWxlX2V4aXN0cygkc2Vzc2lvbnBhdGgpIHx8ICFpc19kaXIoJHNlc3Npb25wYXRoKSkgewpkaWUoJ0NvdWxkIG5vdCBsb2NhdGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0byBleHRyYWN0IHBoYXInKTsKfQokdGVtcCA9ICRzZXNzaW9ucGF0aDsKfQoKJHRlbXAgLj0gJy9waGFyZXh0cmFjdC8nLmJhc2VuYW1lKF9fRklMRV9fLCAnLnBoYXInKTsKc2VsZjo6JHRlbXAgPSAkdGVtcDsKc2VsZjo6JG9yaWdkaXIgPSBnZXRjd2QoKTsKQG1rZGlyKCR0ZW1wLCAwNzc3LCB0cnVlKTsKJHRlbXAgPSByZWFscGF0aCgkdGVtcCk7CgppZiAoIWZpbGVfZXhpc3RzKCR0ZW1wIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuIG1kNV9maWxlKF9fRklMRV9fKSkpIHsKc2VsZjo6X3JlbW92ZVRtcEZpbGVzKCR0ZW1wLCBnZXRjd2QoKSk7CkBta2RpcigkdGVtcCwgMDc3NywgdHJ1ZSk7CkBmaWxlX3B1dF9jb250ZW50cygkdGVtcCAuICcvJyAuIG1kNV9maWxlKF9fRklMRV9fKSwgJycpOwoKZm9yZWFjaCAoJGluZm9bJ20nXSBhcyAkcGF0aCA9PiAkZmlsZSkgewokYSA9ICFmaWxlX2V4aXN0cyhkaXJuYW1lKCR0ZW1wIC4gJy8nIC4gJHBhdGgpKTsKQG1rZGlyKGRpcm5hbWUoJHRlbXAgLiAnLycgLiAkcGF0aCksIDA3NzcsIHRydWUpOwpjbGVhcnN0YXRjYWNoZSgpOwoKaWYgKCRwYXRoW3N0cmxlbigkcGF0aCkgLSAxXSA9PSAnLycpIHsKQG1rZGlyKCR0ZW1wIC4gJy8nIC4gJHBhdGgsIDA3NzcpOwp9IGVsc2UgewpmaWxlX3B1dF9jb250ZW50cygkdGVtcCAuICcvJyAuICRwYXRoLCBzZWxmOjpleHRyYWN0RmlsZSgkcGF0aCwgJGZpbGUsICRmcCkpOwpAY2htb2QoJHRlbXAgLiAnLycgLiAkcGF0aCwgMDY2Nik7Cn0KfQp9CgpjaGRpcigkdGVtcCk7CgppZiAoISRyZXR1cm4pIHsKaW5jbHVkZSBzZWxmOjpTVEFSVDsKfQp9CgpzdGF0aWMgZnVuY3Rpb24gdG1wZGlyKCkKewppZiAoc3RycG9zKFBIUF9PUywgJ1dJTicpICE9PSBmYWxzZSkgewppZiAoJHZhciA9IGdldGVudignVE1QJykgPyBnZXRlbnYoJ1RNUCcpIDogZ2V0ZW52KCdURU1QJykpIHsKcmV0dXJuICR2YXI7Cn0KaWYgKGlzX2RpcignL3RlbXAnKSB8fCBta2RpcignL3RlbXAnKSkgewpyZXR1cm4gcmVhbHBhdGgoJy90ZW1wJyk7Cn0KcmV0dXJuIGZhbHNlOwp9CmlmICgkdmFyID0gZ2V0ZW52KCdUTVBESVInKSkgewpyZXR1cm4gJHZhcjsKfQpyZXR1cm4gcmVhbHBhdGgoJy90bXAnKTsKfQoKc3RhdGljIGZ1bmN0aW9uIF91bnBhY2soJG0pCnsKJGluZm8gPSB1bnBhY2soJ1YnLCBzdWJzdHIoJG0sIDAsIDQpKTsKICRsID0gdW5wYWNrKCdWJywgc3Vic3RyKCRtLCAxMCwgNCkpOwokbSA9IHN1YnN0cigkbSwgMTQgKyAkbFsxXSk7CiRzID0gdW5wYWNrKCdWJywgc3Vic3RyKCRtLCAwLCA0KSk7CiRvID0gMDsKJHN0YXJ0ID0gNCArICRzWzFdOwokcmV0WydjJ10gPSAwOwoKZm9yICgkaSA9IDA7ICRpIDwgJGluZm9bMV07ICRpKyspIHsKICRsZW4gPSB1bnBhY2soJ1YnLCBzdWJzdHIoJG0sICRzdGFydCwgNCkpOwokc3RhcnQgKz0gNDsKICRzYXZlcGF0aCA9IHN1YnN0cigkbSwgJHN0YXJ0LCAkbGVuWzFdKTsKJHN0YXJ0ICs9ICRsZW5bMV07CiAgICRyZXRbJ20nXVskc2F2ZXBhdGhdID0gYXJyYXlfdmFsdWVzKHVucGFjaygnVmEvVmIvVmMvVmQvVmUvVmYnLCBzdWJzdHIoJG0sICRzdGFydCwgMjQpKSk7CiRyZXRbJ20nXVskc2F2ZXBhdGhdWzNdID0gc3ByaW50ZignJXUnLCAkcmV0WydtJ11bJHNhdmVwYXRoXVszXQomIDB4ZmZmZmZmZmYpOwokcmV0WydtJ11bJHNhdmVwYXRoXVs3XSA9ICRvOwokbyArPSAkcmV0WydtJ11bJHNhdmVwYXRoXVsyXTsKJHN0YXJ0ICs9IDI0ICsgJHJldFsnbSddWyRzYXZlcGF0aF1bNV07CiRyZXRbJ2MnXSB8PSAkcmV0WydtJ11bJHNhdmVwYXRoXVs0XSAmIHNlbGY6Ok1BU0s7Cn0KcmV0dXJuICRyZXQ7Cn0KCnN0YXRpYyBmdW5jdGlvbiBleHRyYWN0RmlsZSgkcGF0aCwgJGVudHJ5LCAkZnApCnsKJGRhdGEgPSAnJzsKJGMgPSAkZW50cnlbMl07Cgp3aGlsZSAoJGMpIHsKaWYgKCRjIDwgODE5MikgewokZGF0YSAuPSBAZnJlYWQoJGZwLCAkYyk7CiRjID0gMDsKfSBlbHNlIHsKJGMgLT0gODE5MjsKJGRhdGEgLj0gQGZyZWFkKCRmcCwgODE5Mik7Cn0KfQoKaWYgKCRlbnRyeVs0XSAmIHNlbGY6OkdaKSB7CiRkYXRhID0gZ3ppbmZsYXRlKCRkYXRhKTsKfSBlbHNlaWYgKCRlbnRyeVs0XSAmIHNlbGY6OkJaMikgewokZGF0YSA9IGJ6ZGVjb21wcmVzcygkZGF0YSk7Cn0KCmlmIChzdHJsZW4oJGRhdGEpICE9ICRlbnRyeVswXSkgewpkaWUoIkludmFsaWQgaW50ZXJuYWwgLnBoYXIgZmlsZSAoc2l6ZSBlcnJvciAiIC4gc3RybGVuKCRkYXRhKSAuICIgIT0gIiAuCiRzdGF0WzddIC4gIikiKTsKfQoKaWYgKCRlbnRyeVszXSAhPSBzcHJpbnRmKCIldSIsIGNyYzMyKChiaW5hcnkpJGRhdGEpICYgMHhmZmZmZmZmZikpIHsKZGllKCJJbnZhbGlkIGludGVybmFsIC5waGFyIGZpbGUgKGNoZWNrc3VtIGVycm9yKSIpOwp9CgpyZXR1cm4gJGRhdGE7Cn0KCnN0YXRpYyBmdW5jdGlvbiBfcmVtb3ZlVG1wRmlsZXMoJHRlbXAsICRvcmlnZGlyKQp7CmNoZGlyKCR0ZW1wKTsKCmZvcmVhY2ggKGdsb2IoJyonKSBhcyAkZikgewppZiAoZmlsZV9leGlzdHMoJGYpKSB7CmlzX2RpcigkZikgPyBAcm1kaXIoJGYpIDogQHVubGluaygkZik7CmlmIChmaWxlX2V4aXN0cygkZikgJiYgaXNfZGlyKCRmKSkgewpzZWxmOjpfcmVtb3ZlVG1wRmlsZXMoJGYsIGdldGN3ZCgpKTsKfQp9Cn0KCkBybWRpcigkdGVtcCk7CmNsZWFyc3RhdGNhY2hlKCk7CmNoZGlyKCRvcmlnZGlyKTsKfQp9CgpFeHRyYWN0X1BoYXI6OmdvKCk7Cl9fSEFMVF9DT01QSUxFUigpOyA/PgqVAQAACAAAABEAAAABABcAAABTbmFwc2hvdE1nci1SZXN0b3JlLnBoYXIAAAAABwAAAGNsaS5waHBDJAAAVwZjWEMkAAD8Th8ntgEAAAAAAAAiAAAAbGliL2NsYXNzLmNvbXBhdGliaWxpdHlfdGVzdGVyLnBocBUaAABXBmNYFRoAAPirlTG2AQAAAAAAABAAAABsaWIvZGJfdXRpbHMucGhwNggAAFcGY1g2CAAA9AK7VbYBAAAAAAAACgAAAGxpYi91dGlscy5waHAKDgAAVwZjWAoOAACmZgshtgEAAAAAAAAdAAAAbGliL2NsYXNzLnNlY3VyZV9pbmlfZmlsZS5waHAZHgAAVwZjWBkeAACxApGotgEAAAAAAAAZAAAAbGliL2NsYXNzLnNpbXBsZV90ZXN0LnBocHELAABXBmNYcQsAAHsepCy2AQAAAAAAAAcAAAB3d3cucGhw9wEAAFcGY1j3AQAA5v7PBbYBAAAAAAAACQAAAGJ1aWxkLnBocFoBAABXBmNYWgEAADt++Dm2AQAAAAAAADw/cGhwCgppbmNsdWRlX29uY2UoJ2xpYi91dGlscy5waHAnKTsKaW5jbHVkZV9vbmNlKCdsaWIvZGJfdXRpbHMucGhwJyk7CmluY2x1ZGVfb25jZSgnbGliL2NsYXNzLmNvbXBhdGliaWxpdHlfdGVzdGVyLnBocCcpOwoKJHNjcmlwdCA9IGJhc2VuYW1lKCRhcmd2WzBdKTsKJGRiY29uZmlnID0gbnVsbDsgLy8gZGIgY29uZmlnIGFycmF5CiRkYmZpbGUgPSBudWxsOyAvLyBwYXRoIHRvIGltcG9ydCBmaWxlLgokc25hcHNob3QgPSBudWxsOyAvLyBwYXRobmFtZSB0byBzbmFwc2hvdAokb2xkX2NvbmZpZyA9IG51bGw7IC8vIG9sZCBjb25maWcgdmFsdWVzCiRhcmNoID0gbnVsbDsgIC8vIHRoZSBhcmNoaXZlIG9iamVjdAokZGlyID0gZ2V0Y3dkKCk7CiRjb25maWdfZmlsZSA9IG51bGw7Cgokb3V0ID0gPDw8RU9UCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KPT09IFNuYXBzaG90TWdyIFJlc3RvcmUgVXRpbGl0eSA9PT0KVGhpcyBwcm9ncmFtIHdpbGwgYXR0ZW1wdCB0byByZXN0b3JlIGEgU25hcHNob3RNZ3IgZmlsZSBpbnRvIGEgd29ya2luZyBDTVNNUyBEaXN0cmlidXRpb24uClRoZXJlIGFyZSBhIG51bWJlciBvZiBzdGVwcyBpbiB0aGlzIG9wZXJhdGlvbjoKMS4gIERvIGEgYmFzaWMgY2hlY2sgZm9yIHN5c3RlbSBjb21wYXRpYmlsaXR5CjIuICBBc2sgZm9yLCBhbmQgdmFsaWRhdGUgdGhlIFNuYXBzaG90TWdyIGZpbGUKMy4gIENoZWNrIGZvciBhbiBlbXB0eSBkaXJlY3RvcnkuCjQuICBHZXQgYW5kIHZhbGlkYXRlIGRhdGFiYXNlIGNyZWRlbnRpYWxzLCBhbmQgdGhlIGRhdGFiYXNlCjUuICBFeHRyYWN0IFNuYXBzaG90TWdyIEZpbGVzCjYuICBSZXN0b3JlIHRoZSBkYXRhYmFzZQo3LiAgU2VjdXJlIHRoZSBpbnN0YWxsYXRpb24KOC4gIEdlbmVyYXRlIGEgbmV3IGNvbmZpZy5waHAKClRoZXJlIGFyZSBzdGVwcyB5b3UgbWF5IG5lZWQgdG8gdGFrZSBhZnRlciB0aGlzIG9wZXJhdGlvbiBpcyBjb21wbGV0ZSB0byBlbnN1cmUgYSB3b3JraW5nIHN5c3RlbSwKUGFydGljdWxhcmx5IGlmIHlvdSBhcmUgbW92aW5nIHRvIGEgbmV3IGhvc3QuClRoZXNlIEluY2x1ZGUKMS4gIEFkanVzdGluZyB5b3VyIC5odGFjY2VzcyBmaWxlCjIuICBBZGp1c3RpbmcgYW55IGhhcmQgY29kZWQgbGlua3MKMy4gIEFkanVzdGluZyBtb2R1bGUgcHJlZmVyZW5jZXMgYW5kIHNldHRpbmdzCjQuICBUZXN0aW5nCgpOT1RFUzoKMS4gIFRoaXMgc2NyaXB0IHJlcXVpcmVzIHRoZSBhYmlsaXR5IHRvIGV4ZWN1dGUgc2hlbGwgY29tbWFuZHMuCjIuICBUaGlzIHNjcmlwdCByZXF1aXJlcyB0aGF0IHRoZSBteXNxbCBwcm9ncmFtIGJlIGluIHRoZSBjdXJyZW50IFBBVEguCjMuICBUaGlzIHNjcmlwdCByZXF1aXJlcyB0aGUgWmlwQXJjaGl2ZSBwaHAgY2xhc3MgKHVzdWFsbHkgYnVpbHQgaW4pCjQuICBUaGlzIHNjcmlwdCBkb2VzIGNvbXBhdGliaWxpdHkgY2hlY2tzIHRoYXQgbWF5IGJlIGxlc3MgZXh0ZW5zaXZlIHRoYW4gdGhvc2UgYnVpbHQgaW50byBDTVNNUywgb3IgbWF5IGJlIG1vcmUgZXh0ZW5zaXZlLgpFT1Q7CmNscygpOwpvdXRwdXQoJG91dCk7CgokcmVzID0gYXNrX2Jvb2woJ0FyZSB5b3UgcmVhZHkgdG8gYmVnaW4/Jyk7CmlmKCAhJHJlcyApIHsKICAgIG5ld2xpbmUoKTsKICAgIG91dHB1dCgiVGhhbmsgeW91LCBjb21lIGFnYWluIik7CiAgICBleGl0Owp9CgovLyAxLiAgcHJvbXB0IGZvciB6aXAgZmlsZQokb3V0ID0gPDw8RU9UCj09IEVudGVyIHRoZSBTbmFwc2hvdE1nciBuYW1lID09ClBsZWFzZSBlbnRlciB0aGUgbmFtZSBvZiB0aGUgU25hcHNob3RNZ3IgZmlsZSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRvIHJlc3RvcmUuCgpOb3RlOiBUaGUgZmlsZW5hbWUgc2hvdWxkIGJlIGFuIGFic29sdXRlIHBhdGgsIG9yIHNob3VsZCByZXNpZGUgaW4geW91ciBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgpFT1Q7CiRzbmFwc2hvdCA9IG51bGw7CmNscygpOwp3aGlsZSggISRzbmFwc2hvdCApIHsKICAgIG91dHB1dCgkb3V0KTsKICAgICRyZXMgPSBhc2tfc3RyaW5nX3JlcXVpcmVkKCAiU25hcHNob3RNZ3IgRmlsZSBOYW1lOiIgKTsKICAgIGlmKCAkcmVzICkgewogICAgICAgICRmbiA9ICRkaXIuJy8nLiRyZXM7CiAgICAgICAgaWYoICFpc19maWxlKCRmbikgfHwgIWlzX3JlYWRhYmxlKCRmbikgKSB7CiAgICAgICAgICAgIG5ld2xpbmUoKTsKICAgICAgICAgICAgZXJyb3IoIkNvdWxkIG5vdCBmaW5kIHRoZSBmaWxlOiAkcmVzIik7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYoICFpc19zbmFwc2hvdG1ncigkZm4pICkgewogICAgICAgICAgICBuZXdsaW5lKCk7CiAgICAgICAgICAgIGVycm9yKCIkcmVzIGlzIG5vdCBhIFNuYXBzaG90TWdyIGFyY2hpdmUgZmlsZSIpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJHNuYXBzaG90ID0gJHJlczsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQp9CgovLyAyLiAgR2V0IGNvbmZpZyBhbmQgZGF0YWJhc2UgZmlsZXMgZnJvbSB0aGUgc25hcHNob3QKJGNvbmZpZ19maWxlcyA9IGFycmF5KCdjb25maWcucGhwJywnbGliL2NvbmZpZy5waHAnKTsKJG9sZF9jb25maWcgPSBudWxsOwokdG1wZmlsZSA9ICcudG1wLmNvbmZpZy5waHAnOwokYXJjaCA9IG5ldyBcWmlwQXJjaGl2ZTsKJGFyY2gtPm9wZW4oJHNuYXBzaG90KTsKJGRiZmlsZSA9IGNvcHlfYXJjaGZpbGVfdG9fdG1wKCRhcmNoLCd0bXAvX19teXNxbGR1bXAuc3FsJyk7CmZvcmVhY2goICRjb25maWdfZmlsZXMgYXMgJGZpbGUgKSB7CiAgICAkZm4gPSBjb3B5X2FyY2hmaWxlX3RvX3RtcCgkYXJjaCwkZmlsZSk7CiAgICBpZiggJGZuICkgewogICAgICAgICRjb25maWdfZmlsZSA9ICRmaWxlOwogICAgICAgIGluY2x1ZGUoJGZuKTsKICAgICAgICAkb2xkX2NvbmZpZyA9ICRjb25maWc7CiAgICAgICAgdW5zZXQoJGNvbmZpZyk7CiAgICAgICAgdW5saW5rKCRmbik7CiAgICAgICAgYnJlYWs7CiAgICB9Cn0KaWYoICEkb2xkX2NvbmZpZyB8fCAhaXNzZXQoJG9sZF9jb25maWdbJ2RiX25hbWUnXSkgKSB7CiAgICBlcnJvcigiQ291bGQgbm90IGZpbmQgY29uZmlnIGRhdGEgaW4gU25hcHNob3RNZ3IiKTsKICAgIGV4aXQoMSk7Cn0KCi8vIDMuICBEaXNwbGF5IGluZm8gZnJvbSB0aGUgc25hcHNob3QKJHNuYXBzaG90bWdyX2ZpbGUgPSAkYXJjaC0+Z2V0RnJvbU5hbWUoJ3RtcC8uc25hcHNob3RtZ3InKTsKJGluaSA9IG5ldyBcU25hcHNob3RNZ3JccGhhclxzZWN1cmVfaW5pX2ZpbGU7CiRzbmFwc2hvdG1ncl9kYXRhID0gJGluaS0+cGFyc2UoJHNuYXBzaG90bWdyX2ZpbGUsRkFMU0UpOwpjbHMoKTsKb3V0cHV0KCc9PSBTbmFwc2hvdE1nciBEZXRhaWxzID09Jyk7Cm91dHB1dCgnU2l0ZSBOYW1lOiAnLiRzbmFwc2hvdG1ncl9kYXRhWyd3ZWJzaXRlJ11bJ3NpdGVuYW1lJ10pOwpvdXRwdXQoJ1NpdGUgVVJMOiAnLiRzbmFwc2hvdG1ncl9kYXRhWyd3ZWJzaXRlJ11bJ3Jvb3RfdXJsJ10pOwpvdXRwdXQoJ0NNU01TIFZlcnNpb246ICcuJHNuYXBzaG90bWdyX2RhdGFbJ3dlYnNpdGUnXVsnY21zX3ZlcnNpb24nXSk7Cm91dHB1dCgnQ3JlYXRlZDogJy5zdHJmdGltZSgnJXggJVgnLCRzbmFwc2hvdG1ncl9kYXRhWydtYWluJ11bJ2NyZWF0ZWQnXSkpOwokcmVzID0gYXNrX2Jvb2woJ0RvIHlvdSB3YW50IHRvIGNvbnRpbnVlPycpOwppZiggISRyZXMgKSB7CiAgICBuZXdsaW5lKCk7CiAgICBvdXRwdXQoIlRoYW5rIHlvdSwgY29tZSBhZ2FpbiIpOwogICAgZXhpdDsKfQoKLy8gNC4gIENvbXBhdGliaWxpdHkgY2hlY2sKY2xzKCk7Cm91dHB1dCgnPT0gQ2hlY2sgZm9yIENvbXBhdGliaWxpdHkgPT0nKTsKJHBhcm1zID0gYXJyYXkoJ2Rpcic9PiRkaXIsJ2V4Y2x1ZGVzJz0+YXJyYXkoYmFzZW5hbWUoJHNuYXBzaG90KSwkc2NyaXB0KSk7CiR0ZXN0ZXIgPSBuZXcgXFNuYXBzaG90TWdyXHBoYXJcY29tcGF0aWJpbGl0eV90ZXN0ZXIoJHBhcm1zKTsKJHJlcyA9ICR0ZXN0ZXItPnRlc3QoKTsKaWYoICEkcmVzICkgewogICAgbmV3bGluZSgpOwogICAgZXJyb3IoIk9uZSBvciBtb3JlIGNvbXBhdGliaWxpdHkgdGVzdHMgZmFpbGVkIik7CiAgICAkZmFpbGVkID0gJHRlc3Rlci0+Z2V0X2ZhaWxlZCgpOwogICAgZm9yZWFjaCggJGZhaWxlZCBhcyAkb25lICkgewogICAgICAgIGVycm9yKCIgICAgJG9uZSA6ICIuJHRlc3Rlci0+Z2V0X2Vycm9ybXNnKCRvbmUpLEZBTFNFKTsKICAgIH0KICAgIGVycm9yKCJOb3QgYWxsIHRlc3RzIHBhc3NzZWQuLi4gbXVzdCBleGl0LiIpOwogICAgZXhpdCgxKTsKfQoKJG91dCA9IGFycmF5KCk7CiRsaXN0ID0gYXJyYXkoKTsKJGxpc3RbJ2EnXSA9IGFycmF5KCdwcm9tcHQnPT4nRGF0YWJhc2UgSG9zdCcsJ2tleSc9PidkYl9ob3N0bmFtZScsJ3ZhbCc9Pidsb2NhbGhvc3QnKTsKJGxpc3RbJ2InXSA9IGFycmF5KCdwcm9tcHQnPT4nRGF0YWJhc2UgTmFtZScsJ2tleSc9PidkYl9uYW1lJywndmFsJz0+bnVsbCk7CiRsaXN0WydjJ10gPSBhcnJheSgncHJvbXB0Jz0+J0RhdGFiYXNlIFVzZXInLCdrZXknPT4nZGJfdXNlcm5hbWUnLCd2YWwnPT5udWxsKTsKJGxpc3RbJ2QnXSA9IGFycmF5KCdwcm9tcHQnPT4nRGF0YWJhc2UgUGFzc3dvcmQnLCdrZXknPT4nZGJfcGFzc3dvcmQnLCd2YWwnPT5udWxsKTsKJGxpc3RbJ2UnXSA9IGFycmF5KCdwcm9tcHQnPT4nREJNUyAobXlzcWwvbXlzcWxpKScsJ2tleSc9PidkYm1zJywndmFsJz0+J215c3FsaScsJ29wdGlvbnMnPT5hcnJheSgnbXlzcWxpJywnbXlzcWwnKSk7CiRsaXN0Wyd6J10gPSBhcnJheSgncHJvbXB0Jz0+J0RvbmUvRmluaXNoZWQnKTsKJHZhbGlkID0gZmFsc2U7CiRidWlsZF9wcm9tcHQgPSBmdW5jdGlvbigkbGlzdCkgewogICAgJHByb21wdCA9ICc9PSBEYXRhYmFzZSBDb25uZWN0aW9uIEluZm9ybWF0aW9uID09Jy4iXG4iOwogICAgZm9yZWFjaCggJGxpc3QgYXMgJGtleSA9PiAkcmVjICkgewogICAgICAgIGlmKCBpc3NldCgkcmVjWydrZXknXSkgKSB7CiAgICAgICAgICAgICRwcm9tcHQgLj0gc3ByaW50ZigiJXM6ICUyMHMgPSAlc1xuIiwka2V5LCRyZWNbJ3Byb21wdCddLCRyZWNbJ3ZhbCddKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkcHJvbXB0IC49IHNwcmludGYoIiVzOiAlMjBzXG4iLCRrZXksJHJlY1sncHJvbXB0J10pOwogICAgICAgIH0KICAgIH0KICAgICRwcm9tcHQgLj0gIlxuT3B0aW9uIFthLGIsYyxkLGUgcS9xdWl0L2V4aXRdOiAiOwogICAgcmV0dXJuICRwcm9tcHQ7Cn07CgpjbHMoKTsKd2hpbGUoICEkdmFsaWQgKSB7CiAgICB3aGlsZSggMSApIHsKICAgICAgICAvLyBkaXNwbGF5IHRoZSBsaXN0CiAgICAgICAgJGxpc3RrZXkgPSBhc2tfb3B0aW9uKCRidWlsZF9wcm9tcHQoJGxpc3QpLGFycmF5X2tleXMoJGxpc3QpKTsKICAgICAgICBpZiggJGxpc3RrZXkgPT0gJ3onICkgYnJlYWs7CiAgICAgICAgaWYoIGlzc2V0KCRsaXN0WyRsaXN0a2V5XVsnb3B0aW9ucyddKSApIHsKICAgICAgICAgICAgJHZhbCA9IGFza19vcHRpb24oJGxpc3RbJGxpc3RrZXldWydwcm9tcHQnXS4nOicsJGxpc3RbJGxpc3RrZXldWydvcHRpb25zJ10pOwogICAgICAgICAgICAkbGlzdFskbGlzdGtleV1bJ3ZhbCddID0gdHJpbSgkdmFsKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICR2YWwgPSBhc2tfc3RyaW5nX3JlcXVpcmVkKCRsaXN0WyRsaXN0a2V5XVsncHJvbXB0J10uJzonKTsKICAgICAgICAgICAgJGxpc3RbJGxpc3RrZXldWyd2YWwnXSA9IHRyaW0oJHZhbCk7CiAgICAgICAgfQogICAgfQoKICAgIC8vIGNoZWNrIGlmIHdlIGhhdmUgYSB2YWx1ZSBmb3IgZXZlcnl0aGluZwogICAgJGZuZCA9IHRydWU7CiAgICBmb3JlYWNoKCAkbGlzdCBhcyAka2V5ID0+ICRyZWMgKSB7CiAgICAgICAgaWYoICFpc3NldCgkcmVjWydrZXknXSkgKSBjb250aW51ZTsKICAgICAgICBpZiggIWlzc2V0KCRyZWNbJ3ZhbCddKSB8fCAkcmVjWyd2YWwnXSA9PSAnJyApIHsKICAgICAgICAgICAgJGZuZCA9IGZhbHNlOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CiAgICBpZiggJGZuZCApIHsKICAgICAgICAvLyBkbyBhIHRlc3QgY29ubmVjdGlvbgogICAgICAgICRkYmNvbmZpZyA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCggJGxpc3QgYXMgJGtleSA9PiAkcmVjICkgewogICAgICAgICAgICBpZiggIWlzc2V0KCRyZWNbJ2tleSddKSApIGNvbnRpbnVlOwogICAgICAgICAgICBpZiggIWlzc2V0KCRyZWNbJ3ZhbCddKSApIGNvbnRpbnVlOwogICAgICAgICAgICAkZGJjb25maWdbJHJlY1sna2V5J11dID0gJHJlY1sndmFsJ107CiAgICAgICAgfQogICAgICAgICRyZXMgPSBcU25hcHNob3RNZ3JccGhhclx0ZXN0X2RiX2Nvbm5lY3QoJGRiY29uZmlnKTsKICAgICAgICBpZiggISRyZXMgKSB7CiAgICAgICAgICAgIG5ld2xpbmUoKTsKICAgICAgICAgICAgZXJyb3IoJ1Byb2JsZW0gY29ubmVjdGluZyB0byB0aGUgZGF0YWJhc2UuLi4gcGxlYXNlIGRvdWJsZWNoZWNrIHlvdXIgaW5mb3JtYXRpb24nKTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQoKICAgICAgICAvLyBjb25uZWN0ZWQgb2theSwgc2VlIGlmIHRoZSBkYiBpcyBlbXB0eQogICAgICAgICRyZXMgPSBcU25hcHNob3RNZ3JccGhhclx0ZXN0X2RiX2VtcHR5KCRyZXMsJGRiY29uZmlnKTsKICAgICAgICBpZiggISRyZXMgKSB7CiAgICAgICAgICAgIG5ld2xpbmUoKTsKICAgICAgICAgICAgZXJyb3IoJ1RoZSBkYXRhYmFzZSB5b3Ugc2VsZWN0ZWQgYXBwZWFycyB0byBhbHJlYWR5IGNvbnRhaW4gdGFibGVzLi4uIHBsZWFzZSBwaWNrIGFub3RoZXIgZGF0YWJhc2UsIG9yIGNsZWFyIHRoaXMgb25lLicpOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CgogICAgICAgICR2YWxpZCA9IHRydWU7CiAgICB9Cn0KCi8vIDUuICBpbXBvcnQgZGF0YWJhc2UKY2xzKCk7Cm91dHB1dCgnPT0gaW1wb3J0aW5nIGRhdGFiYXNlID09Jyk7CiRyZXMgPSBcU25hcHNob3RNZ3JccGhhclxkYl9pbXBvcnQoJGRiY29uZmlnLCRkYmZpbGUpOwppZiggISRyZXMgKSB7CiAgICBuZXdsaW5lKCk7CiAgICBlcnJvcignUHJvYmxlbSBpbXBvcnRpbmcgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZS4uLiBwbGVhc2UgY2xlYW51cCBhbmQgcmV0cnknKTsKICAgIGV4aXQoMSk7Cn0Kb3V0cHV0KCdkb25lJyk7CgovLyA2LiAgZXh0cmFjdCB6aXAgZmlsZXMKJG9wID0gbnVsbDsKbmV3bGluZSgpOwpvdXRwdXQoJz09IHJlc3RvcmluZyBmaWxlcyA9PScpOwpmb3IoICRpID0gMDsgJGkgPCAkYXJjaC0+bnVtRmlsZXM7ICRpKysgKSB7CiAgICAkZW50cnkgPSAkYXJjaC0+Z2V0TmFtZUluZGV4KCRpKTsKICAgICRhcmNoLT5leHRyYWN0VG8oJy4nLCRlbnRyeSk7CiAgICAkcCA9IChpbnQpICgoZmxvYXQpJGkgLyAoZmxvYXQpJGFyY2gtPm51bUZpbGVzICogMTAwKTsKICAgIGlmKCAkcCA+IDAgJiYgJHAgJSA1ID09IDAgJiYgJHAgIT0gJG9wICkgewogICAgICAgICRvcCA9ICRwOwogICAgICAgIG91dHB1dCgkcC4nJS4uLiAnLEZBTFNFKTsKICAgIH0KfQpvdXRwdXQoJ2RvbmUnKTsKCi8vIDYuICBnZW5lcmF0ZSBjb25maWcucGhwCmlmKCAkY29uZmlnX2ZpbGUgKSB7CiAgIC8vIGFsbCBvZiB0aGlzIGFzc3VtZXMgJGRpciA9PSBjd2QKICAgbmV3bGluZSgpOwogICBvdXRwdXQoJz09IGdlbmVyYXRpbmcgbmV3IGNvbmZpZyBmaWxlID09Jyk7CiAgIG91dHB1dCgnV0FSTklORzogIEFueSBhZHZhbmNlZCBwaHAgcHJvY2Vzc2luZyBpbiB0aGUgb3JpZ2luYWwgZmlsZSB3aWxsIGJlIHJlbW92ZWQsIGFuZCBtYXkgcmVxdWlyZSBmaXhpbmcnKTsKICAgb3V0cHV0KCdUaGUgb3JpZ2luYWwgY29uZmlnIGZpbGUgY2FuIGJlIGZvdW5kIGluIGJhay5jb25maWcucGhwIGluIHRoZSBzaXRlIHJvb3QgZGlyZWN0b3J5Jyk7CiAgICRibiA9IGJhc2VuYW1lKCRjb25maWdfZmlsZSk7CiAgICRkbiA9IGRpcm5hbWUoJGNvbmZpZ19maWxlKTsKICAgcmVuYW1lKCRjb25maWdfZmlsZSwiJGRuL2Jhay57JGJufSIpOwoKICAgaWYoICRvbGRfY29uZmlnICYmICRkYmNvbmZpZyApIHsKICAgICAgJG5ld19jb25maWcgPSBhcnJheV9tZXJnZSgkb2xkX2NvbmZpZywkZGJjb25maWcpOwogICAgICB3cml0ZV9jb25maWdfcGhwKCRjb25maWdfZmlsZSwkbmV3X2NvbmZpZyk7CiAgIH0KfQoKLy8gNi4gIHNlY3VyaXR5Li4uCm5ld2xpbmUoKTsKb3V0cHV0KCc9PSBpbXByb3Zpbmcgc2VjdXJpdHkgPT09Jyk7CiRpdGVyID0gbmV3IFxSZWN1cnNpdmVJdGVyYXRvckl0ZXJhdG9yKAogICAgbmV3IFxSZWN1cnNpdmVEaXJlY3RvcnlJdGVyYXRvcigkZGlyLCBcUmVjdXJzaXZlRGlyZWN0b3J5SXRlcmF0b3I6OlNLSVBfRE9UUyksCiAgICBcUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcjo6U0VMRl9GSVJTVCwKICAgIFxSZWN1cnNpdmVJdGVyYXRvckl0ZXJhdG9yOjpDQVRDSF9HRVRfQ0hJTEQgLy8gSWdub3JlICJQZXJtaXNzaW9uIGRlbmllZCIKICAgICk7CiRzdHIgPSAnPCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+JzsKZm9yZWFjaCggJGl0ZXIgYXMgJHBhdGggPT4gJGRpciApIHsKICAgIGlmKCAhJGRpci0+aXNEaXIoKSApIGNvbnRpbnVlOwogICAgaWYoIGZpbGVfZXhpc3RzKCRwYXRoLicvaW5kZXgucGhwJykgfHwgZmlsZV9leGlzdHMoJHBhdGguJy9pbmRleC5odG1sJykgKSBjb250aW51ZTsKCiAgICBmaWxlX3B1dF9jb250ZW50cygkcGF0aC4nL2luZGV4Lmh0bWwnLCRzdHIpOwp9CgovLyA5ICAgY2xlYW51cApuZXdsaW5lKCk7Cm91dHB1dCgnPT0gY2xlYW5pbmcgdXAgPT09Jyk7CkB1bmxpbmsoJHNuYXBzaG90KTsKQHVubGluaygkc2NyaXB0KTsKQHVubGluaygndG1wL19fbXlzcWxkdW1wLnNxbCcpOwpAdW5saW5rKCd0bXAvLnNuYXBzaG90bWdyJyk7CkBta2RpcigndG1wL2NhY2hlJywwNzc3KTsKQG1rZGlyKCd0bXAvdGVtcGxhdGVzX2MnLDA3NzcpOwoKLy8gMTAuICBET05FCm5ld2xpbmUoKTsKb3V0cHV0KCc9PSBGaW5pc2hlZCA9PT0nKTsKJG91dCA9IDw8PEVPVApUaGUgcmVzdG9yZSBvcGVyYXRpb24gaXMgY29tcGxldGUuICBUaGUgZGF0YWJhc2UgYW5kIGFsbCBmaWxlcyBoYXZlIGJlbiByZXN0b3JlZC4KWW91IG1heSBuZWVkIHRvIHJldmlldyB5b3VyIGNvbmZpZy5waHAgZmlsZSwgYW5kIGFkanVzdCB5b3VyIC5odGFjY2VzcyBmaWxlIGZvciB0aGUgbmV3IHNpdGUgbG9jYXRpb24uCkFsc28sIHlvdSBzaG91bGQgdW5kZXJ0YWtlIGV4dGVuc2l2ZSB0ZXN0aW5nLgoKVGhhbmsgeW91IGZvciB1c2luZyBTbmFwc2hvdE1nci4KRU9UOwpvdXRwdXQoJG91dCk7CmV4aXQ7Cjw/cGhwCgpuYW1lc3BhY2UgU25hcHNob3RNZ3JccGhhcjsKCmluY2x1ZGVfb25jZShfX0RJUl9fLicvY2xhc3Muc2ltcGxlX3Rlc3QucGhwJyk7CgpjbGFzcyBjb21wYXRpYmlsaXR5X3Rlc3Rlcgp7CiAgICBjb25zdCBNSU5QSFAgPSAnNS40LjExJzsKICAgIGNvbnN0IFRFU1RfTUlOUEhQVkVSID0gJ21pbnBocHZlcic7CiAgICBjb25zdCBURVNUX0RJUldSSVRBQkxFID0gJ2RpcndyaXRhYmxlJzsKICAgIGNvbnN0IFRFU1RfRElSRU1QVFkgPSAnZGlyZW1wdHknOwogICAgY29uc3QgVEVTVF9UTVBGSUxFID0gJ2Z1bmNfdG1wZmlsZSc7CiAgICBjb25zdCBURVNUX1RFTVBOQU0gPSAnZnVuY190ZW1wbmFtJzsKICAgIGNvbnN0IFRFU1RfR1pPUEVOID0gJ2Z1bmNfZ3pvcGVuJzsKICAgIGNvbnN0IFRFU1RfRVhUX01VTFRJQllURSA9ICdleHRfbXVsdGlieXRlJzsKICAgIGNvbnN0IFRFU1RfRVhUX0ZJTkZPID0gJ2V4dF9maW5mbyc7CiAgICBjb25zdCBURVNUX0VYVF9NWVNRTCA9ICdleHRfbXlzcWwnOwogICAgY29uc3QgVEVTVF9NRDUgPSAnZnVuY19tZDUnOwogICAgY29uc3QgVEVTVF9TSEExID0gJ2Z1bmNfc2hhMSc7CiAgICBjb25zdCBURVNUX0pTT04gPSAnZnVuY19qc29uJzsKICAgIGNvbnN0IFRFU1RfT1BFTkJBU0VESVIgPSAnb3BlbmJhc2VkaXInOwogICAgY29uc3QgVEVTVF9TRVNTSU9OQ09PS0lFUyA9ICdzZXNzaW9uLnVzZV9jb29raWVzJzsKICAgIGNvbnN0IFRFU1RfU0VTU0lPTlNBVkUgPSAnc2Vzc2lvbi5zYXZlcGF0aCc7CiAgICBjb25zdCBURVNUX1NBRkVNT0RFID0gJ3NhZmVfbW9kZSc7CiAgICBjb25zdCBURVNUX0ZJTEVVUExPQURTID0gJ2ZpbGVfdXBsb2Fkcyc7CiAgICBjb25zdCBURVNUX0VYVF9YTUwgPSAnZXh0X3htbCc7CiAgICBjb25zdCBURVNUX0ZJTEVHRVQgPSAnZnVuY19maWxlZ2V0Y29udGVudHMnOwogICAgY29uc3QgVEVTVF9GSUxFUFVUID0gJ2Z1bmNfZmlsZXB1dGNvbnRlbnRzJzsKCiAgICBwcml2YXRlICRfdGVzdHMgPSBhcnJheSgpOwogICAgcHJpdmF0ZSAkX3Jlc3VsdHMgPSBhcnJheSgpOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkcGFyYW1zID0gbnVsbCkKICAgIHsKICAgICAgICAvLyBidWlsZCBsaXN0IG9mIHRlc3RzIGJhc2VkIG9uIHBhcmFtcyBpbiB0aGUgY29uc3RydWNvdHIKICAgICAgICAkZGlyID0gaXNzZXQoJHBhcmFtc1snZGlyJ10pID8gJHBhcmFtc1snZGlyJ10gOiBnZXRjd2QoKTsKICAgICAgICAkZXhjbHVkZXMgPSBpc3NldCgkcGFyYW1zWydleGNsdWRlcyddKSA/ICRwYXJhbXNbJ2V4Y2x1ZGVzJ10gOiBudWxsOwoKICAgICAgICAvLyBjaGVjayBmb3Igd3JpdGUgYWNjZXNzCiAgICAgICAgJHRoaXMtPl90ZXN0c1tdID0gbmV3IG1pbnZlcnNpb25fdGVzdChzZWxmOjpURVNUX01JTlBIUFZFUixzZWxmOjpNSU5QSFAscGhwdmVyc2lvbigpKTsKICAgICAgICAkdGhpcy0+X3Rlc3RzW10gPSBuZXcgZGlyX3dyaXRhYmxlX3Rlc3Qoc2VsZjo6VEVTVF9ESVJXUklUQUJMRSwkZGlyKTsKICAgICAgICAkdGhpcy0+X3Rlc3RzW10gPSBuZXcgZGlyX2VtcHR5X3Rlc3Qoc2VsZjo6VEVTVF9ESVJFTVBUWSwkZGlyLCRleGNsdWRlcyk7CiAgICAgICAgJHRoaXMtPl90ZXN0c1tdID0gbmV3IHNpbXBsZV90ZXN0KHNlbGY6OlRFU1RfVE1QRklMRSxmdW5jdGlvbigpewogICAgICAgICAgICAgICAgJGZoID0gdG1wZmlsZSgpOwogICAgICAgICAgICAgICAgcmV0dXJuICgkZmggPT09IEZBTFNFKSA/IEZBTFNFIDogVFJVRTsKICAgICAgICAgICAgfSk7CiAgICAgICAgJHRoaXMtPl90ZXN0c1tdID0gbmV3IGZ1bmN0aW9uX3Rlc3Qoc2VsZjo6VEVTVF9URU1QTkFNLCd0ZW1wbmFtJyk7CiAgICAgICAgJHRoaXMtPl90ZXN0c1tdID0gbmV3IHNpbXBsZV90ZXN0KHNlbGY6OlRFU1RfR1pPUEVOLGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb25fZXhpc3RzKCdnem9wZW4nKSB8fCBmdW5jdGlvbl9leGlzdHMoJ2d6b3BlbjY0Jyk7CiAgICAgICAgICAgIH0pOwogICAgICAgICR0aGlzLT5fdGVzdFtdID0gbmV3IGV4dGVuc2lvbl90ZXN0KHNlbGY6OlRFU1RfRVhUX01VTFRJQllURSwnbWJzdHJpbmcnKTsKICAgICAgICAkdGhpcy0+X3Rlc3RbXSA9IG5ldyBmdW5jdGlvbl90ZXN0KHNlbGY6OlRFU1RfRVhUX0ZJTkZPLCdmaW5mb19vcGVuJyk7CiAgICAgICAgJHRoaXMtPl90ZXN0W10gPSBuZXcgc2ltcGxlX3Rlc3Qoc2VsZjo6VEVTVF9FWFRfTVlTUUwsZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgIHRlc3RfZXh0ZW5zaW9uX2xvYWRlZCgnbXlzcWxpJykgfHwgdGVzdF9leHRlbnNpb25fbG9hZGVkKCdteXNxbCcpOwogICAgICAgICAgICB9KTsKICAgICAgICAkdGhpcy0+X3Rlc3RbXSA9IG5ldyBmdW5jdGlvbl90ZXN0KHNlbGY6OlRFU1RfTUQ1LCdtZDUnKTsKICAgICAgICAkdGhpcy0+X3Rlc3RbXSA9IG5ldyBmdW5jdGlvbl90ZXN0KHNlbGY6OlRFU1RfU0hBMSwnc2hhMScpOwogICAgICAgICR0aGlzLT5fdGVzdFtdID0gbmV3IGZ1bmN0aW9uX3Rlc3Qoc2VsZjo6VEVTVF9KU09OLCdqc29uX2VuY29kZScpOwogICAgICAgICR0aGlzLT5fdGVzdFtdID0gbmV3IHNpbXBsZV90ZXN0KHNlbGY6OlRFU1RfT1BFTkJBU0VESVIsZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgIHJldHVybiAoaW5pX2dldCgnb3Blbl9iYXNlZGlyJykgPT0gJycpOwogICAgICAgICAgICB9KTsKICAgICAgICAkdGhpcy0+X3Rlc3RbXSA9IG5ldyBzaW1wbGVfdGVzdChzZWxmOjpURVNUX1NFU1NJT05DT09LSUVTLGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICByZXR1cm4gKGluaV9nZXQoJ3Nlc3Npb24udXNlX2Nvb2tpZXMnKSk7CiAgICAgICAgICAgIH0pOwogICAgICAgIGlmKCBpbmlfZ2V0KCdzZXNzaW9uLnNhdmVfaGFuZGxlcicpID09ICdmaWxlcycgKSB7CiAgICAgICAgICAgICR0aGlzLT5fdGVzdFtdID0gbmV3IHNpbXBsZV90ZXN0KHNlbGY6OlRFU1RfU0VTU0lPTlNBVkUsZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICAkcGF0aCA9IGluaV9nZXQoJ3Nlc3Npb24uc2F2ZV9wYXRoJyk7CiAgICAgICAgICAgICAgICAgICAgaWYoICgkcG9zID0gc3RycG9zKCRwYXRoLCc7JykpICE9PSBGQUxTRSApICRwYXRoID0gc3Vic3RyKCRwYXRoLCRwb3MrMSk7CiAgICAgICAgICAgICAgICAgICAgaWYoICFpc19kaXIoJHRtcCkgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgICAgICAgICAgICAgaWYoICFpc193cml0YWJsZSgkdG1wKSApIHJldHVybiBGQUxTRTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgLy8gdG9kbzogdGVzdCBtZW1vcnkgbGltaXQKICAgICAgICAkdGhpcy0+X3Rlc3RbXSA9IG5ldyBmYWxzZV90ZXN0KHNlbGY6OlRFU1RfU0FGRU1PREUsaW5pX2dldCgnc2FmZV9tb2RlJykpOwogICAgICAgICR0aGlzLT5fdGVzdFtdID0gbmV3IHRydWVfdGVzdChzZWxmOjpURVNUX0ZJTEVVUExPQURTLGluaV9nZXQoJ2ZpbGVfdXBsb2FkcycpKTsKICAgICAgICAkdGhpcy0+X3Rlc3RbXSA9IG5ldyBleHRlbnNpb25fdGVzdChzZWxmOjpURVNUX0VYVF9YTUwsJ3htbCcpOwogICAgICAgICR0aGlzLT5fdGVzdFtdID0gbmV3IGZ1bmN0aW9uX3Rlc3Qoc2VsZjo6VEVTVF9GSUxFR0VULCdmaWxlX2dldF9jb250ZW50cycpOwogICAgICAgICR0aGlzLT5fdGVzdFtdID0gbmV3IGZ1bmN0aW9uX3Rlc3Qoc2VsZjo6VEVTVF9GSUxFUFVULCdmaWxlX3B1dF9jb250ZW50cycpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfZXJyb3Jtc2coJGNvZGUpCiAgICB7CiAgICAgICAgc3dpdGNoKCAkY29kZSApIHsKICAgICAgICBjYXNlIHNlbGY6OlRFU1RfTUlOUEhQVkVSOgogICAgICAgICAgICByZXR1cm4gJ1RoZSBjb25maWd1cmVkIFBIUCB2ZXJzaW9uIGlzIHRvbyBsb3cuICBNaW5pbXVtIHJlcXVpcmVkIGlzICcuc2VsZjo6TUlOUEhQOwogICAgICAgIGNhc2Ugc2VsZjo6VEVTVF9ESVJXUklUQUJMRToKICAgICAgICAgICAgcmV0dXJuICdUaGUgUEhQIHByb2Nlc3MgZG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIHdyaXRlIHRvIHRoaXMgZGlyZWN0b3J5Lic7CiAgICAgICAgY2FzZSBzZWxmOjpURVNUX0RJUkVNUFRZOgogICAgICAgICAgICByZXR1cm4gIlRoZSBkZXN0aW5hdGlvbiBkaXJlY3Rvcnkgc3BlY2lmaWVkIGRvZXMgbm90IGFwcGVhciB0byBiZSBlbXB0eSBleGNlcHQgZm9yIFNuYXBzaG90TWdyIGZpbGVzIGFuZCB0aGlzIHNjcmlwdFxuCiAgIEhpbnQ6ICBDaGVjayBmb3IgaGlkZGVuIGZpbGVzLiI7CiAgICAgICAgY2FzZSBzZWxmOjpURVNUX1RNUEZJTEU6CiAgICAgICAgICAgIHJldHVybiAnVGhlIHRtcGZpbGUoKSBtZXRob2QgZG9lcyBub3QgYXBwZWFyIHRvIG9wZXJhdGUgcHJvcGVybHknOwogICAgICAgIGNhc2Ugc2VsZjo6VEVTVF9URU1QTkFNOgogICAgICAgICAgICByZXR1cm4gJ1RoZSB0ZW1wbmFtKCkgZnVuY3Rpb24gZG9lcyBub3QgYXBwZWFyIHRvIGJlIGF2YWlsYWJsZSc7CiAgICAgICAgY2FzZSBzZWxmOjpURVNUX0daT1BFTjoKICAgICAgICAgICAgcmV0dXJuICdUaGUgZ3pvcGVuL2d6b3BlbjY0IGZ1bmN0aW9ucyBkbyBub3QgYXBwZWFyIHRvIGJlIGF2YWlsYWJsZS4nOwogICAgICAgIGNhc2Ugc2VsZjo6VEVTVF9FWFRfTVVMVElCWVRFOgogICAgICAgICAgICByZXR1cm4gJ1RoZSBtdWx0aWJ5dGUgZXh0ZW5zaW9ucyBkbyBub3QgYXBwZWFyIHRvIGJlIGF2YWlsYWJsZS4nOwogICAgICAgIGNhc2Ugc2VsZjo6VEVTVF9FWFRfRklORk86CiAgICAgICAgICAgIHJldHVybiAnVGhlIGZpbGVpbmZvIGV4dGVuc2lvbnMgZG8gbm90IGFwcGVhciB0byBiZSBhdmFpbGFibGUuJzsKICAgICAgICBjYXNlIHNlbGY6OlRFU1RfRVhUX01ZU1FMOgogICAgICAgICAgICByZXR1cm4gJ1dlIGNvdWxkIG5vdCBmaW5kIGEgc3VpdGFibGUgZGF0YWJhc2UgZHJpdmVyLic7CiAgICAgICAgY2FzZSBzZWxmOjpURVNUX01ENToKICAgICAgICAgICAgcmV0dXJuICdUaGUgbWQ1IGZ1bmN0aW9uIGRvZXMgbm90IGFwcGVhciB0byBiZSBhdmFpbGFibGUnOwogICAgICAgIGNhc2Ugc2VsZjo6VEVTVF9TSEExOgogICAgICAgICAgICByZXR1cm4gJ1RoZSBzaGExIGZ1bmN0aW9uIGRvZXMgbm90IGFwcGVhciB0byBiZSBhdmFpbGFibGUnOwogICAgICAgIGNhc2Ugc2VsZjo6VEVTVF9KU09OOgogICAgICAgICAgICByZXR1cm4gJ1RoZSBqc29uIGZ1bmN0aW9ucyBkbyBub3QgYXBwZWFyIHRvIGJlIGF2YWlsYWJsZSc7CiAgICAgICAgY2FzZSBzZWxmOjpURVNUX09QRU5CQVNFRElSOgogICAgICAgICAgICByZXR1cm4gJ09wZW4gYmFzZWRpciBpcyBlbmFibGVkLi4uIHRoaXMgaXMgcHJvYmxlbWF0aWMnOwogICAgICAgIGNhc2Ugc2VsZjo6VEVTVF9TRVNTSU9OQ09PS0lFUzoKICAgICAgICAgICAgcmV0dXJuICdTZXNzaW9uIGNvb2tpZXMgYXJlIG5vdCBlbmFibGVkLi4uIHRoaXMgd2lsbCBjYXVzZSBwcm9ibGVtcyc7CiAgICAgICAgY2FzZSBzZWxmOjpURVNUX1NFU1NJT05TQVZFOgogICAgICAgICAgICByZXR1cm4gJ1RoZSBzZXNzaW9uIHNhdmUgcGF0aCBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd3JpdGFibGUuJzsKICAgICAgICBjYXNlIHNlbGY6OlRFU1RfU0FGRU1PREU6CiAgICAgICAgICAgIHJldHVybiAnU2FmZSBtb2RlIGlzIGVuYWJsZWQuLi4gd2UgY2Fubm90IGNvbnRpbnVlJzsKICAgICAgICBjYXNlIHNlbGY6OlRFU1RfRklMRVVQTE9BRFM6CiAgICAgICAgICAgIHJldHVybiAnRmlsZSB1cGxvYWRzIGFyZSBub3QgZW5hYmxlZC4gIFRoaXMgaXMgcHJvYmxlbWF0aWMnOwogICAgICAgIGNhc2Ugc2VsZjo6VEVTVF9FWFRfWE1MOgogICAgICAgICAgICByZXR1cm4gJ1hNTCBFeHRlbnNpb25zIGFyZSBub3QgZW5hYm9lZC4nOwogICAgICAgIGNhc2Ugc2VsZjo6VEVTVF9GSUxFR0VUOgogICAgICAgICAgICByZXR1cm4gJ1RoZSBmaWxlX2dldF9jb250ZW50cyBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlJzsKICAgICAgICBjYXNlIHNlbGY6OlRFU1RfRklMRVBVVDoKICAgICAgICAgICAgcmV0dXJuICdUaGUgZmlsZV9wdXRfY29udGVudHMgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZS4nOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiAnVW5rbm93biBFcnJvcjogJy4kY29kZTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldF9mYWlsZWQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X3Jlc3VsdHM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3QoKQogICAgewogICAgICAgICRmYWlsZWQgPSBhcnJheSgpOwogICAgICAgIGZvcmVhY2goICR0aGlzLT5fdGVzdHMgYXMgJHRlc3QgKSB7CiAgICAgICAgICAgICRyZXMgPSAkdGVzdC0+ZXhlY3V0ZSgpOwogICAgICAgICAgICBpZiggISRyZXMgKSB7CiAgICAgICAgICAgICAgICAkZmFpbGVkW10gPSAkdGVzdC0+Z2V0X2xhYmVsKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYoIGNvdW50KCRmYWlsZWQpICkgewogICAgICAgICAgICAkdGhpcy0+X3Jlc3VsdHMgPSAkZmFpbGVkOwogICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgfQogICAgICAgIHJldHVybiBUUlVFOwogICAgfQp9IC8vIGVuZCBvZiBjbGFzcwo8P3BocAoKbmFtZXNwYWNlIFNuYXBzaG90TWdyXHBoYXI7CgpmdW5jdGlvbiB0ZXN0X2RiY29uZmlnKCRkYmNvbmZpZykKewogICAgaWYoICFpc19hcnJheSgkZGJjb25maWcpICkgcmV0dXJuIEZBTFNFOwogICAgJGtleXMgPSBhcnJheSgnZGJtcycsJ2RiX2hvc3RuYW1lJywnZGJfdXNlcm5hbWUnLCdkYl9wYXNzd29yZCcsJ2RiX25hbWUnKTsKICAgICRrZXlzMiA9IGFycmF5X2tleXMoJGRiY29uZmlnKTsKICAgIGZvcmVhY2goICRrZXlzIGFzICRrZXkgKSB7CiAgICAgICAgaWYoICFpbl9hcnJheSgka2V5LCRrZXlzMikgKSByZXR1cm4gRkFMU0U7CiAgICB9CiAgICByZXR1cm4gVFJVRTsKfQoKZnVuY3Rpb24gdGVzdF9kYl9jb25uZWN0KCRkYmNvbmZpZykKewogICAgaWYoICF0ZXN0X2RiY29uZmlnKCRkYmNvbmZpZykgKSByZXR1cm4gRkFMU0U7CgogICAgJG91dCA9IG51bGw7CiAgICBzd2l0Y2goICRkYmNvbmZpZ1snZGJtcyddICkgewogICAgY2FzZSAnbXlzcWwnOgogICAgICAgIGlmKCAhZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9jb25uZWN0JykgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgJG91dCA9IG15c3FsX2Nvbm5lY3QoJGRiY29uZmlnWydkYl9ob3N0bmFtZSddLCRkYmNvbmZpZ1snZGJfdXNlcm5hbWUnXSwkZGJjb25maWdbJ2RiX3Bhc3N3b3JkJ10sJGRiY29uZmlnWydkYl9uYW1lJ10pOwogICAgICAgIGlmKCAhJG91dCApIHJldHVybiBGQUxTRTsKICAgICAgICBicmVhazsKCiAgICBjYXNlICdteXNxbGknOgogICAgICAgIGlmKCAhZnVuY3Rpb25fZXhpc3RzKCdteXNxbGlfY29ubmVjdCcpICkgcmV0dXJuIEZBTFNFOwogICAgICAgICRvdXQgPSBteXNxbGlfY29ubmVjdCgkZGJjb25maWdbJ2RiX2hvc3RuYW1lJ10sJGRiY29uZmlnWydkYl91c2VybmFtZSddLCRkYmNvbmZpZ1snZGJfcGFzc3dvcmQnXSwkZGJjb25maWdbJ2RiX25hbWUnXSk7CiAgICAgICAgaWYoICEkb3V0ICkgcmV0dXJuIEZBTFNFOwogICAgICAgIGJyZWFrOwoKICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgfQoKICAgIHJldHVybiAkb3V0Owp9CgpmdW5jdGlvbiB0ZXN0X2RiX2VtcHR5KCRoYW5kbGUsJGRiY29uZmlnKQp7CiAgICBpZiggIXRlc3RfZGJjb25maWcoJGRiY29uZmlnKSApIHJldHVybiBGQUxTRTsKCiAgICAkb3V0ID0gbnVsbDsKICAgICRzcWwgPSAnU0hPVyBUQUJMRVMnOwogICAgc3dpdGNoKCAkZGJjb25maWdbJ2RibXMnXSApIHsKICAgIGNhc2UgJ215c3FsJzoKICAgICAgICBpZiggKCRyZXN1bHQgPSBteXNxbGlfcXVlcnkoJGhhbmRsZSwkc3FsKSkgKSB7CiAgICAgICAgICAgICRudGFibGVzID0gbXlzcWxpX251bV9yb3dzKCRyZXN1bHQpOwogICAgICAgICAgICBpZiggJG50YWJsZXMgPiAwICkgcmV0dXJuIEZBTFNFOwogICAgICAgICAgICByZXR1cm4gVFJVRTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIEZBTFNFOwoKICAgIGNhc2UgJ215c3FsaSc6CiAgICAgICAgaWYoICgkcmVzdWx0ID0gbXlzcWxpX3F1ZXJ5KCRoYW5kbGUsJHNxbCkpICkgewogICAgICAgICAgICAkbnRhYmxlcyA9IG15c3FsaV9udW1fcm93cygkcmVzdWx0KTsKICAgICAgICAgICAgaWYoICRudGFibGVzID4gMCApIHJldHVybiBGQUxTRTsKICAgICAgICAgICAgcmV0dXJuIFRSVUU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBGQUxTRTsKCiAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiBGQUxTRTsKICAgIH0KfQoKZnVuY3Rpb24gZGJfaW1wb3J0KCRkYmNvbmZpZywkZGJmaWxlKQp7CiAgICAvLyB0aGlzIHVzZXMgc2hlbGwgY29tbWFuZHMuCiAgICAkY29tbWFuZD0ibXlzcWwgLS1ob3N0PXskZGJjb25maWdbJ2RiX2hvc3RuYW1lJ119IC0tdXNlcj17JGRiY29uZmlnWydkYl91c2VybmFtZSddfSAtLXBhc3N3b3JkPXskZGJjb25maWdbJ2RiX3Bhc3N3b3JkJ119IHskZGJjb25maWdbJ2RiX25hbWUnXX0gPCB7JGRiZmlsZX0iOwogICAgZXhlYygkY29tbWFuZCwkb3V0cHV0PWFycmF5KCksJHdvcmtlZCk7CiAgICBpZiggJHdvcmtlZCA9PSAwICkgcmV0dXJuIFRSVUU7CiAgICBwcmludF9yKCRvdXRwdXQpOyBkaWUoKTsgLy8gZGVidWcuCiAgICByZXR1cm4gRkFMU0U7Cn0KPz48P3BocAoKaW5jbHVkZV9vbmNlKF9fRElSX18uJy9jbGFzcy5zZWN1cmVfaW5pX2ZpbGUucGhwJyk7CgpmdW5jdGlvbiBlbmRzd2l0aCggJHN0ciwgJHN1YiApCnsKCXJldHVybiAoIHN1YnN0ciggJHN0ciwgc3RybGVuKCAkc3RyICkgLSBzdHJsZW4oICRzdWIgKSApID09ICRzdWIgKTsKfQoKZnVuY3Rpb24gc3RhcnRzd2l0aCggJHN0ciwgJHN1YiApCnsKCXJldHVybiAoIHN1YnN0ciggJHN0ciwgMCwgc3RybGVuKCAkc3ViICkgKSA9PSAkc3ViICk7Cn0KCmZ1bmN0aW9uIGNscygpCnsKICAgIHByaW50IGNocigyNykgLiAiWzJKIiAuIGNocigyNykgLiAiWztIIjsKfQoKZnVuY3Rpb24gb3V0cHV0KCRzdHIsJG5ld2xpbmUgPSBUUlVFKQp7CiAgICAkc3RyID0gdHJpbSgkc3RyKTsKICAgIGlmKCAhJHN0ciApIHJldHVybjsKICAgIGlmKCAkbmV3bGluZSApIHsKICAgICAgICBpZiggIWVuZHN3aXRoKCRzdHIsIlxuIikgKSAkc3RyIC49ICJcbiI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBpZiggIWVuZHN3aXRoKCRzdHIsJyAnKSApICRzdHIgLj0gJyAnOwogICAgfQogICAgZWNobyAkc3RyOwp9CgpmdW5jdGlvbiBlcnJvcigkbXNnLCRwcmVmaXggPSBUUlVFLCRuZXdsaW5lID0gVFJVRSkKewogICAgJG1zZyA9IChzdHJpbmcpJG1zZzsKICAgIGlmKCAhJG1zZyApIHJldHVybjsKCiAgICBpZiggJHByZWZpeCApICRtc2cgPSAiRVJST1I6ICIuJG1zZzsKICAgIGlmKCAkbmV3bGluZSAmJiAhZW5kc3dpdGgoJG1zZywiXG4iKSApICRtc2cgLj0gIlxuIjsKICAgIGZ3cml0ZShTVERFUlIsJG1zZyk7Cn0KCmZ1bmN0aW9uIG5ld2xpbmUoKQp7CiAgICBlY2hvICJcbiI7Cn0KCmZ1bmN0aW9uIGFza19ib29sKCRwcm9tcHQsJGFjY2VwdCA9IC0xLCRhdXRvcHJvbXB0ID0gVFJVRSkKewogICAgd2hpbGUoIDEgKSB7CiAgICAgICAgbmV3bGluZSgpOwogICAgICAgIGlmKCAkYXV0b3Byb21wdCApICRwcm9tcHQgLj0gJyBbWS9uXTonOwogICAgICAgIG91dHB1dCgkcHJvbXB0LEZBTFNFKTsKICAgICAgICAkaW4gPSBmZ2V0cyhTVERJTik7CiAgICAgICAgJGluID0gdHJpbSgkaW4pOwogICAgICAgIGlmKCAhJGluICkgewogICAgICAgICAgICBpZiggJGFjY2VwdCA9PSBGQUxTRSApIHJldHVybiBGQUxTRTsKICAgICAgICAgICAgaWYoICRhY2NlcHQgPT0gVFJVRSApIHJldHVybiBUUlVFOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaWYoICRpbiA9PSAnZXhpdCcgfHwgJGluID09ICdxdWl0JyApIGV4aXQ7CiAgICAgICAgICAgICRpbiA9IHN0cnRvbG93ZXIoJGluKTsKICAgICAgICAgICAgaWYoICRpbiA9PSAnMScgfHwgJGluID09ICd5JyApIHJldHVybiBUUlVFOwogICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgfQogICAgfQp9CgpmdW5jdGlvbiBhc2tfb3B0aW9uKCRwcm9tcHQsJG9wdGlvbnMpCnsKICAgIHdoaWxlKCAxICkgewogICAgICAgIG5ld2xpbmUoKTsKICAgICAgICBvdXRwdXQoJHByb21wdCxGQUxTRSk7CiAgICAgICAgJGluID0gdHJpbShmZ2V0cyhTVERJTikpOwogICAgICAgIGlmKCAkaW4gJiYgaW5fYXJyYXkoJGluLGFycmF5KCdxJywncXVpdCcsJ2V4aXQnKSkgKSBleGl0OwogICAgICAgIGlmKCAkaW4gJiYgaW5fYXJyYXkoJGluLCRvcHRpb25zKSApIHJldHVybiAkaW47CiAgICB9CiAgICBlcnJvcignUGxlYXNlIGVudGVyIGEgdmFsaWQgb3B0aW9uJyk7Cn0KCmZ1bmN0aW9uIGFza19zdHJpbmdfcmVxdWlyZWQoJHByb21wdCwkZXJyc3RyID0gbnVsbCkKewogICAgd2hpbGUoIDEgKSB7CiAgICAgICAgbmV3bGluZSgpOwogICAgICAgIG91dHB1dCgkcHJvbXB0LEZBTFNFKTsKICAgICAgICAkc3RyID0gZmdldHMoU1RESU4pOwogICAgICAgICRzdHIgPSB0cmltKCRzdHIpOwogICAgICAgIGlmKCAhJHN0ciApIHsKICAgICAgICAgICAgaWYoICEkZXJyb3JzdHIgKSAkZXJyb3JzdHIgPSAnSW52YWxpZCBSZXNwb25zZSc7CiAgICAgICAgICAgIGVycm9yKCRlcnJvcnN0cik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYoICRzdHIgPT0gJ3EnIHx8ICRzdHIgPT0gJ2V4aXQnIHx8ICRzdHIgPT0gJ3F1aXQnICkgZXhpdDsKICAgICAgICAgICAgcmV0dXJuICRzdHI7CiAgICAgICAgfQogICAgfQp9CgovLy8vLy8vLy8vLy8vLy8vLy8vCgpmdW5jdGlvbiBpc19zbmFwc2hvdG1ncigkZmlsZW5hbWUpCnsKICAgICRmaWxlbmFtZSA9IHRyaW0oJGZpbGVuYW1lKTsKICAgIGlmKCAhJGZpbGVuYW1lICkgcmV0dXJuIEZBTFNFOwoKICAgICRsb3dlciA9IHN0cnRvbG93ZXIoJGZpbGVuYW1lKTsKICAgIGlmKCAhZW5kc3dpdGgoJGZpbGVuYW1lLCcuemlwJykgKSBSRVRVUk4gRkFMU0U7CgogICAgJGFyY2ggPSBuZXcgXFppcEFyY2hpdmU7CiAgICBpZiggKCRyZXMgPSAkYXJjaC0+b3BlbigkZmlsZW5hbWUpKSAhPT0gVFJVRSApIHsKICAgICAgICByZXR1cm4gRkFMU0U7CiAgICB9CgogICAgJGluaV90ZXh0ID0gJGFyY2gtPmdldEZyb21OYW1lKCd0bXAvLnNuYXBzaG90bWdyJyk7CiAgICBpZiggISRpbmlfdGV4dCApIHJldHVybiBGQUxTRTsKCiAgICAkZHVtcGZpbGUgPSAkYXJjaC0+Z2V0RnJvbU5hbWUoJ3RtcC9fX215c3FsZHVtcC5zcWwnKTsKICAgIGlmKCAhJGR1bXBmaWxlICkgcmV0dXJuIEZBTFNFOwoKICAgIHRyeSB7CiAgICAgICAgJGluaSA9IG5ldyBcU25hcHNob3RNZ3JccGhhclxzZWN1cmVfaW5pX2ZpbGUoKTsKICAgICAgICAkaW5pLT5wYXJzZSgkaW5pX3RleHQsZmFsc2UpOwogICAgfQogICAgY2F0Y2goIFxFeGNlcHRpb24gJGUgKSB7CiAgICAgICAgZGllKCRlLT5HZXRNZXNzYWdlKCkpOwogICAgICAgIHJldHVybiBGQUxTRTsKICAgIH0KICAgIHJldHVybiBUUlVFOwp9CgpmdW5jdGlvbiBjb3B5X2FyY2hmaWxlX3RvX3RtcChcWmlwQXJjaGl2ZSAkYXJjaCwkbmFtZSkKewogICAgJG5hbWUgPSB0cmltKCRuYW1lKTsKICAgIGlmKCAhJG5hbWUgKSByZXR1cm47CgogICAgJGRpciA9IHN5c19nZXRfdGVtcF9kaXIoKTsKICAgIGlmKCAhJGRpciApIHsKICAgICAgICBlcnJvcignQ291bGQgbm90IGdldCBzeXN0ZW0gdGVtcG9yYXJ5IGRpcmVjdG9yeS4uLiBleGl0aW5nJyk7CiAgICAgICAgZXhpdCgxKTsKICAgIH0KCiAgICAkZm4gPSB0ZW1wbmFtKCRkaXIsJ2NncycpOwogICAgJGRhdGEgPSAkYXJjaC0+Z2V0RnJvbU5hbWUoJG5hbWUpOwogICAgaWYoICRkYXRhICkgewogICAgICAgIGZpbGVfcHV0X2NvbnRlbnRzKCRmbiwkZGF0YSk7CiAgICAgICAgcmV0dXJuICRmbjsKICAgIH0KfQoKZnVuY3Rpb24gd3JpdGVfY29uZmlnX3BocCgkZmlsZW5hbWUsJGRhdGEpCnsKICAgICRub3cgPSBzdHJmdGltZSgnJXgnKTsKICAgICRvdXQgPSAiPD9waHBcbi8vIEdlbmVyYXRlZCBieSBTbmFwc2hvdE1nci1SZXN0b3JlIG9uIHskbm93fVxuIjsKICAgICRmbXQgPSAiXCRjb25maWdbJyVzJ10gPSAnJXMnO1xuIjsKICAgIGZvcmVhY2goICRkYXRhIGFzICRrZXkgPT4gJHZhbCApIHsKICAgICAgICAkb3V0IC49IHNwcmludGYoJGZtdCwka2V5LCR2YWwpOwogICAgfQogICAgJG91dCAuPSAiXG4iOwogICAgZmlsZV9wdXRfY29udGVudHMoJGZpbGVuYW1lLCRvdXQpOwp9PD9waHAKCm5hbWVzcGFjZSBTbmFwc2hvdE1nclxwaGFyOwoKY2xhc3Mgc2VjdXJlX2luaV9maWxlCnsKICAgIHByaXZhdGUgJF9maWxlbmFtZTsKICAgIHByaXZhdGUgJF9maXJzdF9zZWN0aW9uID0gVFJVRTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGZpbGVuYW1lID0gbnVsbCkKICAgIHsKICAgICAgICAkdGhpcy0+c2V0X2ZpbGVuYW1lKCRmaWxlbmFtZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldF9maWxlbmFtZSgkZmlsZW5hbWUpCiAgICB7CiAgICAgICAgJHRoaXMtPl9maWxlbmFtZSA9IHRyaW0oJGZpbGVuYW1lKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9zb3J0X2RhdGEoJGRhdGEpCiAgICB7CiAgICAgICAgJG91dCA9ICRkYXRhOwogICAgICAgIGZvcmVhY2goICRvdXQgYXMgJGtleSA9PiAmJHZhbCApIHsKICAgICAgICAgICAgaWYoIGlzX2FycmF5KCR2YWwpICkgJHZhbCA9ICR0aGlzLT5fc29ydF9kYXRhKCR2YWwpOwogICAgICAgIH0KICAgICAgICBrc29ydCgkb3V0KTsKICAgICAgICByZXR1cm4gJG91dDsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZmluYWwgZnVuY3Rpb24gX2NhbGNfY2hlY2tzdW0oJGRhdGEpCiAgICB7CiAgICAgICAgJHNvcnRlZCA9ICR0aGlzLT5fc29ydF9kYXRhKCRkYXRhKTsKICAgICAgICAkc2FsdCA9ICdlcndlcmlkZmFzZHMgbmRmYXNkZmFzaGRmYXNkOTM0OTgqKCBkaWZhb3VkZmFzZGZhYWRmIHNkZjBhZGZhMTIzKSc7IC8vIGp1c3Qgc29tZSByYW5kb20gY2hhcmFjdGVycwogICAgICAgICRzaWcgPSBtZDUoJHNhbHQuc2VyaWFsaXplKCRzb3J0ZWQpKTsKICAgICAgICByZXR1cm4gJHNpZzsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX3dyaXRlX2luaV9zZWN0aW9uKCRzZWN0aW9uKQogICAgewogICAgICAgICRvdXQgPSBudWxsOwogICAgICAgIGlmKCAhJHRoaXMtPl9maXJzdF9zZWN0aW9uICkgewogICAgICAgICAgICAkdGhpcy0+X2ZpcnN0X3NlY3Rpb24gPSBGQUxTRTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRvdXQgLj0gIlxuIjsKICAgICAgICB9CgogICAgICAgICRvdXQgLj0gJ1snLnRyaW0oJHNlY3Rpb24pLiJdXG4iOwogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBfd3JpdGVfaW5pX3ZhbCgka2V5LCR2YWwpCiAgICB7CiAgICAgICAgJG91dCA9IG51bGw7CiAgICAgICAgLy8gQHRvZG8gY2hlY2sgZm9yIGludmFsaWQgY2hhcnMgaW4gdGhlIGtleSBhbmQgdGhyb3cgYW4gZXhjZXB0aW9uCiAgICAgICAgJG5rZXkgPSB0cmltKCRrZXkpOwogICAgICAgICRudmFsID0gdHJpbSgkdmFsKTsKICAgICAgICBpZiggISRua2V5ICkgcmV0dXJuOwogICAgICAgICR0eXBlID0gZ2V0dHlwZSgkdmFsKTsKICAgICAgICBpZiggJHR5cGUgPT0gJ29iamVjdCcgKSB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCdPYmplY3RzIGNhbm5vdCBiZSBzdG9yZWQnKTsKCiAgICAgICAgJGZuZCA9IDA7CiAgICAgICAgJGJhZGNoYXJzID0gYXJyYXkoIlxuIiwiXHIiLCI7IiwiJyIsJyInKTsKICAgICAgICBmb3JlYWNoKCAkYmFkY2hhcnMgYXMgJGNoICkgewogICAgICAgICAgICBpZiggc3RycG9zKCRudmFsLCRjaCkgIT09IEZBTFNFICkgewogICAgICAgICAgICAgICAgJGZuZCA9IDE7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiggJGZuZCApIHsKICAgICAgICAgICAgLy8gdGhlcmUgYXJlIGJhZCBjaGFyYWN0cnMuIGdvdHRhIGVzY2FwZSB0aGUgZG91YmxlIHF1b3RlcwogICAgICAgICAgICAkbnZhbCA9IHN0cl9yZXBsYWNlKCciJywnXCInLCRudmFsKTsKICAgICAgICB9CiAgICAgICAgJG52YWwgPSAiJyIuJHR5cGUuJ3w6fCcuJG52YWwuIiciOwogICAgICAgICRvdXQgLj0gc3ByaW50ZigiJXMgPSAlc1xuIiwka2V5LCRudmFsKTsKICAgICAgICByZXR1cm4gJG91dDsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX3dyaXRlX2ZpbGVfaGVhZGVyKCRjaGVja3N1bSkKICAgIHsKICAgICAgICAkb3V0ID0gJzs8P3BocCBkaWUoKTsgLyogU0lHPScuJGNoZWNrc3VtLicgKi8gPz4nLiJcbiI7CiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIF93cml0ZV9pbmlfYXJyYXkoJGFyciwkc2VjdGlvbiA9IG51bGwpCiAgICB7CiAgICAgICAgJG91dCA9IG51bGw7CiAgICAgICAgJHNlY3Rpb24gPSB0cmltKCRzZWN0aW9uKTsKICAgICAgICAkaXNfYXNzb2MgPSAoYXJyYXlfa2V5cygkYXJyKSAhPT0gcmFuZ2UoMCwgY291bnQoJGFycikgLSAxKSk7CgogICAgICAgIGlmKCAkaXNfYXNzb2MgKSB7CiAgICAgICAgICAgIC8vIHBhc3Mgb25lLCBub3JtYWwgdmFsdWVzCiAgICAgICAgICAgIGZvcmVhY2goICRhcnIgYXMgJGtleSA9PiAkdmFsICkgewogICAgICAgICAgICAgICAgaWYoICFpc19hcnJheSgkdmFsKSApICRvdXQgLj0gJHRoaXMtPl93cml0ZV9pbmlfdmFsKCRrZXksJHZhbCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYoICRvdXQgKSB7CiAgICAgICAgICAgICAgICBpZiggISRzZWN0aW9uICkgJHNlY3Rpb24gPSAnbWFpbic7CiAgICAgICAgICAgICAgICAkb3V0ID0gJHRoaXMtPl93cml0ZV9pbmlfc2VjdGlvbigkc2VjdGlvbikgLiAkb3V0OwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBwYXNzIHR3bywgbmVzdGVkIGFycmF5cwogICAgICAgICAgICBmb3JlYWNoKCAkYXJyIGFzICRrZXkgPT4gJHZhbCApIHsKICAgICAgICAgICAgICAgIGlmKCAhaXNfYXJyYXkoJHZhbCkgKSBjb250aW51ZTsKICAgICAgICAgICAgICAgIGlmKCBhcnJheV9rZXlzKCR2YWwpICE9PSByYW5nZSgwLCBjb3VudCgkdmFsKSAtIDEpICkgewogICAgICAgICAgICAgICAgICAgIC8vIGFzc29jaWF0aXZlIGNoaWxkIGFycmF5CiAgICAgICAgICAgICAgICAgICAgJHRtcCA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAgaWYoICRzZWN0aW9uICkgewogICAgICAgICAgICAgICAgICAgICAgICAkdG1wID0gJHNlY3Rpb24uIiA6ICRrZXkiOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRtcCA9ICRrZXk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRvdXQgLj0gJHRoaXMtPl93cml0ZV9pbmlfYXJyYXkoJHZhbCwkdG1wKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIC8vIG5vcm1hbCBjaGlsZCBhcnJheQogICAgICAgICAgICAgICAgICAgICRvdXQgLj0gJHRoaXMtPl93cml0ZV9pbmlfYXJyYXkoJHZhbCwka2V5KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaWYoICEkc2VjdGlvbiApICRzZWN0aW9uID0gJ21haW4nOwogICAgICAgICAgICBmb3IoICRpID0gMCwgJG4gPSBjb3VudCgkYXJyKTsgJGkgPCAkbjsgJGkrKyApIHsKICAgICAgICAgICAgICAgICRvdXQgLj0gJHRoaXMtPl93cml0ZV9pbmlfdmFsKCRzZWN0aW9uLidbXScsJGFyclskaV0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZW5lcmF0ZSgkZGF0YSkKICAgIHsKICAgICAgICAkY2tzdW0gPSAkdGhpcy0+X2NhbGNfY2hlY2tzdW0oJGRhdGEpOwogICAgICAgICRvdXQgPSAkdGhpcy0+X3dyaXRlX2ZpbGVfaGVhZGVyKCRja3N1bSk7CiAgICAgICAgJG91dCAuPSAkdGhpcy0+X3dyaXRlX2luaV9hcnJheSgkZGF0YSk7CiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdyaXRlKCRkYXRhLCRmaWxlbmFtZSA9IG51bGwpCiAgICB7CiAgICAgICAgaWYoICEkZmlsZW5hbWUgKSAkZmlsZW5hbWUgPSAkdGhpcy0+X2ZpbGVuYW1lOwogICAgICAgIGlmKCAhJGZpbGVuYW1lICkgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdObyBmaWxlbmFtZSBzcGVjaWZpZWQgdG8gaW5zdGFuY2Ugb2YgJy5fX0NMQVNTX18pOwogICAgICAgICRkaXIgPSBkaXJuYW1lKCR0aGlzLT5fZmlsZW5hbWUpOwogICAgICAgIGlmKCAoaXNfZmlsZSgkZmlsZW5hbWUpICYmICFpc193cml0YWJsZSgkdGhpcy0+X2ZpbGVuYW1lKSkgfHwgIWlzX3dyaXRhYmxlKCRkaXIpICkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oIk5vIHBlcm1pc3Npb24gdG8gd3JpdGUgdG8gIi4kdGhpcy0+X2ZpbGVuYW1lKTsKICAgICAgICB9CgogICAgICAgICRmaCA9IGZvcGVuKCRmaWxlbmFtZSwndycpOwogICAgICAgIGZ3cml0ZSgkZmgsJHRoaXMtPmdlbmVyYXRlKCkpOwogICAgICAgIGZjbG9zZSgkZmgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzYXZlKCRkYXRhKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+d3JpdGUoJGRhdGEpOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBfY29udmVydF92YWx1ZXMoJGRhdGEpCiAgICB7CiAgICAgICAgJG91dCA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCggJGRhdGEgYXMgJGtleSA9PiAkdmFsICkgewogICAgICAgICAgICBpZiggaXNfYXJyYXkoJHZhbCkgKSB7CiAgICAgICAgICAgICAgICAkb3V0WyRrZXldID0gJHRoaXMtPl9jb252ZXJ0X3ZhbHVlcygkdmFsKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGxpc3QoJHR5cGUsJHZhbCkgPSBleHBsb2RlKCd8OnwnLCR2YWwsMik7CiAgICAgICAgICAgICAgICBzd2l0Y2goICR0eXBlICkgewogICAgICAgICAgICAgICAgY2FzZSAnYm9vbGVhbic6CiAgICAgICAgICAgICAgICAgICAgJG91dFska2V5XSA9IChib29sKSAkdmFsOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnaW50ZWdlcic6CiAgICAgICAgICAgICAgICAgICAgJG91dFska2V5XSA9IChpbnQpICR2YWw7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdyZWFsJzoKICAgICAgICAgICAgICAgIGNhc2UgJ2Zsb2F0JzoKICAgICAgICAgICAgICAgIGNhc2UgJ2RvdWJsZSc6CiAgICAgICAgICAgICAgICAgICAgJG91dFska2V5XSA9IChmbG9hdCkgJHZhbDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6CiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICRvdXRbJGtleV0gPSAoc3RyaW5nKSAkdmFsOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBwYXJzZSgkY29udGVudHMsJHZlcmlmeSA9IFRSVUUpCiAgICB7CiAgICAgICAgaWYoICR2ZXJpZnkgKSBkaWUoJ29vcHMnKTsKICAgICAgICAvLyBnZXQgdGhlIGZpcnN0IGxpbmUKICAgICAgICAkZmlyc3RfbGluZSA9IGV4cGxvZGUoIlxuIiwkY29udGVudHMsMilbMF07CiAgICAgICAgJGZpbGVfc2lnID0gbnVsbDsKICAgICAgICAkbWF0Y2hlcyA9IG51bGw7CiAgICAgICAgcHJlZ19tYXRjaCgnL1xzK1NJRz0oWzAtOUEtWmEtel17MzJ9KVxzKy8nLCRmaXJzdF9saW5lLCRtYXRjaGVzKTsKICAgICAgICBpZiggJG1hdGNoZXNbMV0gKSAkZmlsZV9zaWcgPSAkbWF0Y2hlc1sxXTsKICAgICAgICB1bnNldCgkbWF0Y2hlcyk7CgogICAgICAgICRyYXdfZGF0YSA9IHBhcnNlX2luaV9zdHJpbmcoJGNvbnRlbnRzLFRSVUUpOwoKICAgICAgICAvLyB3ZSBoYXZlIGEgZmxhdCBsaXN0IG9mIHNlY3Rpb25zLCBlYWNoIHNlY3Rpb24gaXMgYW4gYXJyYXkKICAgICAgICAvLyB0aGUgdG9wIHNlY3Rpb24gc2hvdWxkIG5vdCBoYXZlIGFueSBuZXN0aW5nCiAgICAgICAgJGFsbF9rZXlzID0gYXJyYXlfa2V5cygkcmF3X2RhdGEpOwogICAgICAgICRrZXkwID0gJGFsbF9rZXlzWzBdOwogICAgICAgICRwYXJ0cyA9IGV4cGxvZGUoJyA6ICcsJGtleTApOwogICAgICAgIGlmKCAkcGFydHNbMF0gIT0gJGtleTAgKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0ludmFsaWQgZmlsZSBmb3JtYXQsIGZvdW5kIG5lc3RlZCBjaGlsZCBhcyBmaXJzdCBlbGVtZW50Jyk7CgogICAgICAgICRvdXQgPSBhcnJheSgpOwogICAgICAgIGZvcmVhY2goICRyYXdfZGF0YSBhcyAka2V5ID0+ICR2YWwgKSB7CiAgICAgICAgICAgICRwYXJ0cyA9IGV4cGxvZGUoJyA6ICcsJGtleSk7CiAgICAgICAgICAgIC8vaWYoICRwYXJ0c1swXSAhPSAka2V5MCApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignSW52YWxpZCBmaWxlIGZvcm1hdCcpOwoKICAgICAgICAgICAgaWYoIGNvdW50KCRwYXJ0cykgPT0gMSApIHsKICAgICAgICAgICAgICAgICRvdXRbJGtleV0gPSAkdGhpcy0+X2NvbnZlcnRfdmFsdWVzKCR2YWwpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJHRtcCA9JiAkb3V0OwogICAgICAgICAgICAgICAgJGkgPSBudWxsOwogICAgICAgICAgICAgICAgZm9yKCAkaSA9IDEsICRuID0gY291bnQoJHBhcnRzKSAtIDE7ICRpIDwgJG47ICRpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgJHBhcnQgPSAkcGFydHNbJGldOwogICAgICAgICAgICAgICAgICAgIGlmKCAhaXNfYXJyYXkoJHRtcFskcGFydF0pICkgJHRtcFskcGFydF0gPSBhcnJheSgpOwogICAgICAgICAgICAgICAgICAgICR0bXAgPSYgJHRtcFskcGFydF07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkdG1wWyRwYXJ0c1skaV1dID0gJHRoaXMtPl9jb252ZXJ0X3ZhbHVlcygkdmFsKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYoIGNvdW50KCRvdXQpID09IDEgJiYgaXNzZXQoJG91dFska2V5MF0pICkgewogICAgICAgICAgICAkb3V0ID0gJG91dFska2V5MF07CiAgICAgICAgfQoKICAgICAgICBpZiggJHZlcmlmeSApIHsKICAgICAgICAgICAgJGNhbGNfc2lnID0gJHRoaXMtPl9jYWxjX2NoZWNrc3VtKCRvdXQpOwogICAgICAgICAgICBpZiggJGZpbGVfc2lnICE9ICRjYWxjX3NpZyApIHRocm93IG5ldyBcUmFuZ2VFeGNlcHRpb24oIklOSSBGaWxlIHNpZ25hdHVyZSBkaWQgbm90IG1hdGNoIHRoZSBzaWduYXR1cmUgb2YgdGhlIGZpbGUgY29udGVudHMiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlYWQoJGZpbGVuYW1lID0gbnVsbCwkdmVyaWZ5ID0gVFJVRSkKICAgIHsKICAgICAgICBpZiggJGZpbGVuYW1lICkgJHRoaXMtPnNldF9maWxlbmFtZSgkZmlsZW5hbWUpOwoKICAgICAgICBpZiggIWlzX2ZpbGUoJHRoaXMtPl9maWxlbmFtZSkgfHwgIWlzX3JlYWRhYmxlKCR0aGlzLT5fZmlsZW5hbWUpICkgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKHNwcmludGYoIkZpbGUgJXMgY291bGQgbm90IGJlIHJlYWQiLCR0aGlzLT5fZmlsZW5hbWUpKTsKICAgICAgICAkY29udGVudHMgPSBmaWxlX2dldF9jb250ZW50cygkdGhpcy0+X2ZpbGVuYW1lKTsKICAgICAgICByZXR1cm4gJHRoaXMtPnBhcnNlKCRjb250ZW50cywkdmVyaWZ5KTsKICAgIH0KfQo8P3BocAoKbmFtZXNwYWNlIFNuYXBzaG90TWdyXHBoYXI7CgphYnN0cmFjdCBjbGFzcyB0ZXN0X2Jhc2UKewogICAgcHJvdGVjdGVkICRfbGFiZWw7CgogICAgcHVibGljIGZ1bmN0aW9uIGdldF9sYWJlbCgpIHsgcmV0dXJuICR0aGlzLT5fbGFiZWw7IH0KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBleGVjdXRlKCk7Cn0KCmNsYXNzIGZhbHNlX3Rlc3QgZXh0ZW5kcyB0ZXN0X2Jhc2UKewogICAgcHJpdmF0ZSAkX3ZhbDsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGxhYmVsLCR2YWwpCiAgICB7CiAgICAgICAgJHRoaXMtPl9sYWJlbCA9IHRyaW0oJGxhYmVsKTsKICAgICAgICAkdGhpcy0+X3ZhbCA9IChib29sKSAkdmFsOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBleGVjdXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl92YWwgPT0gRkFMU0U7CiAgICB9Cn0KCmNsYXNzIHRydWVfdGVzdCBleHRlbmRzIHRlc3RfYmFzZQp7CiAgICBwcml2YXRlICRfdmFsOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbGFiZWwsJHZhbCkKICAgIHsKICAgICAgICAkdGhpcy0+X2xhYmVsID0gdHJpbSgkbGFiZWwpOwogICAgICAgICR0aGlzLT5fdmFsID0gKGJvb2wpICR2YWw7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGV4ZWN1dGUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X3ZhbCA9PSBUUlVFOwogICAgfQp9CgpjbGFzcyBleHRlbnNpb25fdGVzdCBleHRlbmRzIHRlc3RfYmFzZQp7CiAgICBwcml2YXRlICRfZXh0OwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbGFiZWwsJGV4dCkKICAgIHsKICAgICAgICAkdGhpcy0+X2xhYmVsID0gdHJpbSgkbGFiZWwpOwogICAgICAgICR0aGlzLT5fZXh0ID0gdHJpbSgkZXh0KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhlY3V0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIGV4dGVuc2lvbl9sb2FkZWQoJHRoaXMtPl9leHQpOwogICAgfQp9CgpjbGFzcyBtaW52ZXJzaW9uX3Rlc3QgZXh0ZW5kcyB0ZXN0X2Jhc2UKewogICAgcHJpdmF0ZSAkX21pbnZhbDsKICAgIHByaXZhdGUgJF92YWw7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRsYWJlbCwkbWludmFsLCR2YWwpCiAgICB7CiAgICAgICAgJHRoaXMtPl9sYWJlbCA9IHRyaW0oJGxhYmVsKTsKICAgICAgICAkdGhpcy0+X21pbnZhbCA9IHRyaW0oJG1pbnZhbCk7CiAgICAgICAgJHRoaXMtPl92YWwgPSB0cmltKCR2YWwpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBleGVjdXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gKHZlcnNpb25fY29tcGFyZSgkdGhpcy0+X3ZhbCwkdGhpcy0+X21pbnZhbCkgPj0gMCk7CiAgICB9Cn0KCmNsYXNzIGZ1bmN0aW9uX3Rlc3QgZXh0ZW5kcyB0ZXN0X2Jhc2UKewogICAgcHJpdmF0ZSAkX2ZuOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbGFiZWwsJGZuKQogICAgewogICAgICAgICR0aGlzLT5fbGFiZWwgPSB0cmltKCRsYWJlbCk7CiAgICAgICAgJHRoaXMtPl9mbiA9IHRyaW0oJGZuKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhlY3V0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uX2V4aXN0cygkdGhpcy0+X2ZuKTsKICAgIH0KfQoKY2xhc3Mgc2ltcGxlX3Rlc3QgZXh0ZW5kcyB0ZXN0X2Jhc2UKewogICAgcHJpdmF0ZSAkX2ZuOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbGFiZWwsY2FsbGFibGUgJGZuKQogICAgewogICAgICAgICR0aGlzLT5fbGFiZWwgPSB0cmltKCRsYWJlbCk7CiAgICAgICAgJHRoaXMtPl9mbiA9ICRmbjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhlY3V0ZSgpCiAgICB7CiAgICAgICAgJHRtcCA9ICR0aGlzLT5fZm47CiAgICAgICAgcmV0dXJuICR0bXAoKTsKICAgIH0KfQoKY2xhc3MgZGlyX3dyaXRhYmxlX3Rlc3QgZXh0ZW5kcyB0ZXN0X2Jhc2UKewogICAgcHJpdmF0ZSAkX2RpcjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGxhYmVsLCRkaXIpCiAgICB7CiAgICAgICAgJHRoaXMtPl9sYWJlbCA9IHRyaW0oJGxhYmVsKTsKICAgICAgICAkdGhpcy0+X2RpciA9IHRyaW0oJGRpcik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGV4ZWN1dGUoKQogICAgewogICAgICAgIHJldHVybiAoaXNfZGlyKCR0aGlzLT5fZGlyKSAmJiBpc193cml0YWJsZSgkdGhpcy0+X2RpcikpOwogICAgfQp9CgpjbGFzcyBkaXJfZW1wdHlfdGVzdCBleHRlbmRzIHRlc3RfYmFzZQp7CiAgICBwcml2YXRlICRfZGlyOwogICAgcHJpdmF0ZSAkX2V4Y2x1ZGVzOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbGFiZWwsJGRpciwkZXhjbHVkZXMgPSBudWxsKQogICAgewogICAgICAgICR0aGlzLT5fbGFiZWwgPSAkbGFiZWw7CiAgICAgICAgJHRoaXMtPl9kaXIgPSAkZGlyOwogICAgICAgICR0aGlzLT5fZXhjbHVkZXMgPSAkZXhjbHVkZXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGV4ZWN1dGUoKQogICAgewogICAgICAgICRmaWxlczEgPSBnbG9iKCR0aGlzLT5fZGlyLicvLj8/KicpOwogICAgICAgICRmaWxlczIgPSBnbG9iKCR0aGlzLT5fZGlyLicvKicpOwogICAgICAgICRmaWxlcyA9IGFycmF5X21lcmdlKCRmaWxlczEsJGZpbGVzMik7CiAgICAgICAgZm9yZWFjaCggJGZpbGVzIGFzICRmaWxlICkgewogICAgICAgICAgICAkYm4gPSBzdHJfcmVwbGFjZSgkdGhpcy0+X2Rpci4nLycsJycsJGZpbGUpOwogICAgICAgICAgICBvdXRwdXQoJ3Rlc3Q6ICcuJGJuKTsKICAgICAgICAgICAgaWYoICFjb3VudCgkdGhpcy0+X2V4Y2x1ZGVzKSB8fCAhaW5fYXJyYXkoJGJuLCR0aGlzLT5fZXhjbHVkZXMpICkgcmV0dXJuIEZBTFNFOwogICAgICAgIH0KICAgICAgICByZXR1cm4gVFJVRTsKICAgIH0KfTw/cGhwCj8+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPlNuYXBzaG90TWdyIC0gV2ViIEludGVyZmFjZSBVbnN1cHBvcnRlZDwvdGl0bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPlNuYXBzaG90TWdyIC0gV2ViIEludGVyZmFjZSBVbnN1cHBvcnRlZCE8L2gxPgogICAgPGgzIHN0eWxlPSJjb2xvcjogcmVkOyI+U29ycnkhPC9oMz4KICAgIDxwIHN0eWxlPSJjb2xvcjogcmVkOyI+VGhlIFNuYXBzaG90TWdyIHJlc3RvcmUgc2NyaXB0IGRvZXMgbm90IHN1cHBvcnQgYSB3ZWIgaW50ZXJmYWNlIGF0IHRoaXMgdGltZS48L3A+CgogICAgPHA+WW91IG1heSBiZSBhYmxlIHRvIHNwb25zb3IgaXQgdGhvdWdoLi4uIHBsZWFzZSBjb250YWN0IG1lIHRvIHNlZSBhYm91dCBzcG9uc29yaW5nIGEgd2ViIGJhc2VkIHJlc3RvcmUgcGFja2FnZS48L3A+CiAgPGJvZHk+CjwvaHRtbD4KPD9waHAKQHVubGluaygnU25hcHNob3RNZ3ItUmVzdG9yZS5waHAnKTsKJHBoYXIyID0gbmV3IFBoYXIoJ1NuYXBzaG90TWdyLVJlc3RvcmUucGhhcicsIDAsICdTbmFwc2hvdE1nci1SZXN0b3JlLnBoYXInKTsKLy8gYWRkIGFsbCBmaWxlcyBpbiB0aGUgcHJvamVjdCwgb25seSBpbmNsdWRlIHBocCBmaWxlcwokcGhhcjItPmJ1aWxkRnJvbURpcmVjdG9yeShkaXJuYW1lKF9fRklMRV9fKSk7CiRwaGFyMi0+c2V0U3R1YigkcGhhcjItPmNyZWF0ZURlZmF1bHRTdHViKCdjbGkucGhwJywgJ3d3dy5waHAnKSk7CnJlbmFtZSgnU25hcHNob3RNZ3ItUmVzdG9yZS5waGFyJywnU25hcHNob3RNZ3ItUmVzdG9yZS5waHAnKTsKd6wJYvKyCwfpBd+8iSUoQDLUGAwCAAAAR0JNQg==]]></data>
	</file>
	<file>
	  <filename>/phar/www.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKPz4KPGh0bWw+CiAgPGhlYWQ+CiAgICA8dGl0bGU+U25hcHNob3RNZ3IgLSBXZWIgSW50ZXJmYWNlIFVuc3VwcG9ydGVkPC90aXRsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+U25hcHNob3RNZ3IgLSBXZWIgSW50ZXJmYWNlIFVuc3VwcG9ydGVkITwvaDE+CiAgICA8aDMgc3R5bGU9ImNvbG9yOiByZWQ7Ij5Tb3JyeSE8L2gzPgogICAgPHAgc3R5bGU9ImNvbG9yOiByZWQ7Ij5UaGUgU25hcHNob3RNZ3IgcmVzdG9yZSBzY3JpcHQgZG9lcyBub3Qgc3VwcG9ydCBhIHdlYiBpbnRlcmZhY2UgYXQgdGhpcyB0aW1lLjwvcD4KCiAgICA8cD5Zb3UgbWF5IGJlIGFibGUgdG8gc3BvbnNvciBpdCB0aG91Z2guLi4gcGxlYXNlIGNvbnRhY3QgbWUgdG8gc2VlIGFib3V0IHNwb25zb3JpbmcgYSB3ZWIgYmFzZWQgcmVzdG9yZSBwYWNrYWdlLjwvcD4KICA8Ym9keT4KPC9odG1sPg==]]></data>
	</file>
	<file>
	  <filename>/SnapshotMgr.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNuYXBzaG90TWdyCiMgQXV0aG9yOiBSb2xmIFRqYXNzZW5zIChjbXNjYW5iZXNpbXBsZS5vcmcpCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4KIyAoYykgMjAwNCAtIDIwMTEgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIChjKSAyMDExIC0gMjAxOCBieSBUaGUgQ01TIE1hZGUgU2ltcGxlIERldmVsb3BtZW50IFRlYW0KIyAoYykgMjAxOCBhbmQgYmV5b25kIGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRm91bmRhdGlvbgojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9zbmFwc2hvdG1ncgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGb3JrIGZyb20gQ0dTbmFwc2hvdCBtb2R1bGUgYnkgUm9iZXJ0IENhbXBiZWxsIChjYWxndXkxMDAwLmNvbSkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmZpbmFsIGNsYXNzIFNuYXBzaG90TWdyIGV4dGVuZHMgQ01TTVNFeHQKewogICAgcHJpdmF0ZSAkX3NuYXBzaG90ZGlyOwoKICAgIGZ1bmN0aW9uIEdldEZyaWVuZGx5TmFtZSgpIHsgcmV0dXJuICR0aGlzLT5sYW5nKCdmcmllbmRseW5hbWUnKTsgfQogICAgZnVuY3Rpb24gR2V0QWRtaW5EZXNjcmlwdGlvbigpIHsgcmV0dXJuICR0aGlzLT5MYW5nKCdkZXNjcmlwdGlvbicpOyB9CiAgICBmdW5jdGlvbiBHZXRBZG1pblNlY3Rpb24oKSB7IHJldHVybiAnc2l0ZWFkbWluJzsgfQogICAgZnVuY3Rpb24gR2V0QXV0aG9yKCkgeyByZXR1cm4gJ1JvbGYgVGphc3NlbnMnOyB9CiAgICBmdW5jdGlvbiBHZXRBdXRob3JFbWFpbCgpIHsgcmV0dXJuICdpbmZvIFthdF0gY21zY2FuYmVzaW1wbGUgW2RvdF0gb3JnJzsgfQogICAgZnVuY3Rpb24gR2V0Q2hhbmdlTG9nKCkgeyByZXR1cm4gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnY2hhbmdlbG9nLnRwbCcpOyB9CiAgICBmdW5jdGlvbiBHZXRIZWxwKCkgeyByZXR1cm4gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnaGVscC50cGwnKTsgfQogICAgZnVuY3Rpb24gR2V0VmVyc2lvbigpIHsgcmV0dXJuICcxLjAuMSc7IH0KICAgIGZ1bmN0aW9uIE1pbmltdW1DTVNWZXJzaW9uKCkgeyByZXR1cm4gJzIuMic7IH0KICAgIGZ1bmN0aW9uIEdldERlcGVuZGVuY2llcygpIHsgcmV0dXJuIFsgJ0NNU01TRXh0JyA9PiAnMS4wJyBdOyB9CiAgICBmdW5jdGlvbiBJc1BsdWdpbk1vZHVsZSgpIHsgcmV0dXJuIFRSVUU7IH0KICAgIGZ1bmN0aW9uIEhhc0FkbWluKCkgeyByZXR1cm4gVFJVRTsgfQogICAgZnVuY3Rpb24gTGF6eUxvYWRGcm9udGVuZCgpIHsgcmV0dXJuIFRSVUU7IH0KICAgIGZ1bmN0aW9uIExhenlMb2FkQWRtaW4oKSB7IHJldHVybiBUUlVFOyB9CiAgICBmdW5jdGlvbiBJc0FkbWluT25seSgpIHsgcmV0dXJuIFRSVUU7IH0KICAgIGZ1bmN0aW9uIEdldEV2ZW50RGVzY3JpcHRpb24oICRldmVudG5hbWUgKSB7IHJldHVybiAkdGhpcy0+bGFuZygnZXZlbnRkZXNjLScgLiAkZXZlbnRuYW1lKTsgfQogICAgZnVuY3Rpb24gR2V0RXZlbnRIZWxwKCAkZXZlbnRuYW1lICkgeyByZXR1cm4gJHRoaXMtPmxhbmcoJ2V2ZW50aGVscC0nIC4gJGV2ZW50bmFtZSk7IH0KCgogICAgZnVuY3Rpb24gSW5pdGlhbGl6ZUFkbWluKCkKICAgIHsKICAgICAgICAkY29uZmlnID0gXGNtc19jb25maWc6OmdldF9pbnN0YW5jZSgpOwogICAgICAgICR0aGlzLT5fc25hcHNob3RkaXIgPSAkY29uZmlnWydyb290X3BhdGgnXSAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAndXBsb2FkcycgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJy5fc25hcHNob3RtZ3InOwogICAgfQoKICAgIGZ1bmN0aW9uIFZpc2libGVUb0FkbWluVXNlcigpIHsgcmV0dXJuICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1NuYXBzaG90TWdyJyk7IH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gSW5pdGlhbGl6ZUZyb250ZW5kKCkKICAgIHsKICAgICAgICAkdGhpcy0+UmVzdHJpY3RVbmtub3duUGFyYW1zKCk7CiAgICAgICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3NuYXBzaG90JyxDTEVBTl9TVFJJTkcpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBIYXNDYXBhYmlsaXR5KCRjYXBhYmlsaXR5LCAkcGFyYW1zID0gYXJyYXkoKSkKICAgIHsKICAgICAgICBpZiggJGNhcGFiaWxpdHkgPT0gJ2NsaWNvbW1hbmRzJyApIHJldHVybiBUUlVFOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfY2xpX2NvbW1hbmRzKCAkYXBwICkKICAgIHsKICAgICAgICBpZiggISRhcHAgaW5zdGFuY2VvZiBcQ01TTVNcQ0xJXEFwcCApIHJldHVybjsKCiAgICAgICAgJG91dCA9IG51bGw7CiAgICAgICAgJG91dFtdID0gbmV3IFxTbmFwc2hvdE1nclxDb21tYW5kc1xEdW1wKCAkdGhpcywgJGFwcCApOwogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIC8vIHJldHVybiBzbmFwc2hvdCBuYW1lCiAgICBwdWJsaWMgZnVuY3Rpb24gQ3JlYXRlU25hcHNob3QoKQogICAgewogICAgICAgICRzaXRlbmFtZSA9IFxjbXNfc2l0ZXByZWZzOjpnZXQoJ3NpdGVuYW1lJywnQ01TTVMgU2l0ZScpOwogICAgICAgICRzaXRlbmFtZSA9IHN0cnRvbG93ZXIoJHNpdGVuYW1lKTsKICAgICAgICAkc2l0ZW5hbWUgPSBzdHJfcmVwbGFjZSgkc2l0ZW5hbWUsJyAnLCctJyk7CiAgICAgICAgJHNuYXBzaG90X25hbWUgPSAnU25hcHNob3RtZ3ItJyAuIHN0cmZ0aW1lKCclWS0lbS0lZC0lSC4lTScpIC4gJy0nIC4kc2l0ZW5hbWU7CgogICAgICAgIC8vIHNldCB0aW1lbGltaXQKICAgICAgICAvLyBzZXQgc2l0ZWRvd24KICAgICAgICAkc2l0ZWRvd25fZmlsZSA9IFRNUF9DQUNIRV9MT0NBVElPTiAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAnc2l0ZWRvd24uaHRtbCc7CiAgICAgICAgdG91Y2goJHNpdGVkb3duX2ZpbGUpOwoKICAgICAgICAvLyBjcmVhdGUgdGhlIHRtcCBvdXRwdXQgZGlyZWN0b3J5CiAgICAgICAgJHRtcGRpciA9IFRNUF9DQUNIRV9MT0NBVElPTiAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkdGhpcy0+R2V0TmFtZSgpOwogICAgICAgIEBta2RpcigkdG1wZGlyKTsKCiAgICAgICAgLy8gZG8gdGhlIG15c3FsIGR1bXAgaW50byB0bXAvY2FjaGUKICAgICAgICAkZHVtcGZpbGUgPSAkdG1wZGlyIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICdkdW1wLnNxbCc7CiAgICAgICAgJGNvbmZpZyA9IFxDbXNBcHA6OmdldF9pbnN0YW5jZSgpLT5HZXRDb25maWcoKTsKICAgICAgICAkZHVtcF9vYmogPSBuZXcgXFNuYXBzaG90TWdyXHNwX215c3FsZHVtcDsKICAgICAgICAkZHVtcF9vYmotPmhvc3QgPSAkY29uZmlnWydkYl9ob3N0bmFtZSddOwogICAgICAgICRkdW1wX29iai0+dXNlciA9ICRjb25maWdbJ2RiX3VzZXJuYW1lJ107CiAgICAgICAgJGR1bXBfb2JqLT5wYXNzd29yZCA9ICRjb25maWdbJ2RiX3Bhc3N3b3JkJ107CiAgICAgICAgJGR1bXBfb2JqLT5kYiA9ICRjb25maWdbJ2RiX25hbWUnXTsKICAgICAgICAkZHVtcF9vYmotPnByZWZpeCA9ICRjb25maWdbJ2RiX3ByZWZpeCddOwogICAgICAgICRkdW1wX29iai0+c2V0X25hbWVzID0gJGNvbmZpZ1snc2V0X25hbWVzJ107CiAgICAgICAgJG91dCA9ICRkdW1wX29iai0+ZHVtcCgpOwogICAgICAgIGZpbGVfcHV0X2NvbnRlbnRzKCRkdW1wZmlsZSwkb3V0KTsKCiAgICAgICAgLy8gZ2VuZXJhdGUgdGhlIGludGVybmFsIHRhcgogICAgICAgIC8vIC0gZXhjbHVkZSB0bXAgZmlsZXMgKGJ1dCBjcmVhdGUgdGhlIGRpcmVjdG9yaWVzKQogICAgICAgIC8vIC0gZXhwbGljaXRseSBhZGQgdGhlIG15c3FsIGR1bXAKICAgICAgICAkZmlsZXMgPSBhcnJheSgpOwogICAgICAgIGZvcmVhY2ggKG5ldyBSZWN1cnNpdmVJdGVyYXRvckl0ZXJhdG9yKG5ldyBSZWN1cnNpdmVEaXJlY3RvcnlJdGVyYXRvciAoJGNvbmZpZ1sncm9vdF9wYXRoJ10pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3I6OkNISUxEX0ZJUlNUKSBhcyAkaXQpIHsKICAgICAgICAgICAgJGFic29sdXRlID0gJGl0LT5nZXRQYXRoTmFtZSgpOwogICAgICAgICAgICBpZiggJGl0LT5Jc0RpcigpICkgY29udGludWU7CiAgICAgICAgICAgICRhZGQgPSB0cnVlOwogICAgICAgICAgICBpZiggc3RhcnRzd2l0aCgkYWJzb2x1dGUsVE1QX0NBQ0hFX0xPQ0FUSU9OKSB8fCBzdGFydHN3aXRoKCRhYnNvbHV0ZSxUTVBfVEVNUExBVEVTX0NfTE9DQVRJT04pICkgewogICAgICAgICAgICAgICAgJGFkZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgaWYoIHN0YXJ0c3dpdGgoICRhYnNvbHV0ZSwgJHRtcGRpcikgKSB7CiAgICAgICAgICAgICAgICAgICAgJGFkZCA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gZWxzZSBjaGVjayBpZiBmaWxlIGlzIGV4Y2x1ZGVkCiAgICAgICAgICAgIGlmKCAkYWRkICkgJGZpbGVzW10gPSAkYWJzb2x1dGU7CiAgICAgICAgfQoKICAgICAgICAvLyAtIGFkZCB0aGUgZXh0cmFjdCBzY3JpcHQgYW5kIHJlYWRtZQogICAgICAgIC8vIC0gYXJjaGl2ZSBhZ2FpbiBpbnRvIGZpbmFsIGRpcmVjdG9yeQogICAgICAgIC8vIC0gZGVsZXRlIHRoZSB0bXAgZHVtcAogICAgICAgIHJlY3Vyc2l2ZV9ybWRpcigkdG1wZGlyKTsKCiAgICAgICAgLy8gcmVtb3ZlIHNpdGVkb3duCiAgICAgICAgQHVubGluaygkc2l0ZWRvd25fZmlsZSk7CgogICAgICAgIC8vIHJldHVybiB0aGUgZmlsZW5hbWUKCiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIExpc3RTbmFwc2hvdHMoKQogICAgewoKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gRG93bmxvYWRTbmFwc2hvdCgkbmFtZSkKICAgIHsKCiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIERlbGV0ZVNuYXBzaG90KCRuYW1lKQogICAgewoKICAgIH0KCn0gLy8gZW5kIG9mIGNsYXNzCgojCiMgRU9GCiM=]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/changelog.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHVsPgoJPGxpPjxiPlZlcnNpb24gMS4wLjE8L2I+ICgwOS0wMy0yMDIxKTxici8gPgogICAJLSBNaW5vciBpbXByb3ZlbWVudCB0byBhcmNoaXZlIGZpbGUgbmFtZS48L2xpPgogICA8bGk+PGI+VmVyc2lvbiAxLjA8L2I+ICgwMy0wMy0yMDIxKTxici8gPgogICAJLSBJbml0aWFsIFJlbGVhc2UuPC9saT4KPC91bD4=]]></data>
	</file>
	<file>
	  <filename>/templates/defaultadmin.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2Zvcm1fc3RhcnR9CgogIDxkaXYgY2xhc3M9ImluZm9ybWF0aW9uIj57JG1vZC0+TGFuZygnaW5mb19jcmVhdGVfc25hcHNob3QnKX08L2Rpdj4KCiAgPGRpdiBjbGFzcz0id2FybmluZyI+eyRtb2QtPkxhbmcoJ3dhcm5fY3JlYXRlX3NuYXBzaG90Jyl9PC9kaXY+CiAgICA8ZmllbGRzZXQ+CiAgICAgIDxsZWdlbmQ+eyRtb2QtPkxhbmcoJ2xlZ2VuZF93aGF0Jyl9PC9sZWdlbmQ+CiAgICAgIDxkaXYgY2xhc3M9ImNfZnVsbCI+CiAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZF8yIHRleHQtcmlnaHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfd2hhdCcpfTo8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJncmlkXzEwIj4KICAgICAgICAgIDxzZWxlY3QgbmFtZT0ieyRhY3Rpb25pZH1wcmVmX3doYXQiPntodG1sX29wdGlvbnMgb3B0aW9ucz0kd2hhdGxpc3Qgc2VsZWN0ZWQ9JHByZWZfd2hhdH08L3NlbGVjdD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjbGVhcmIiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY19mdWxsIj4KICAgICAgICA8ZGl2IGNsYXNzPSJncmlkXzIgdGV4dC1yaWdodCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9leGNsdWRlcycpfTo8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJncmlkXzEwIj4KICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJ7JGFjdGlvbmlkfXByZWZfZXhjbHVkZXMiIGNvbHM9IjUwIiByb3dzPSI1Ij4KICAgICAgICAgICAgeyRwcmVmX2V4Y2x1ZGVzfQogICAgICAgICAgPC90ZXh0YXJlYT4KICAgICAgICAgIDxiciAvPgogICAgICAgICAgeyRtb2QtPkxhbmcoJ2luZm9fZXhjbHVkZXMnKX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2ZpZWxkc2V0PgoKICAgIDxmaWVsZHNldD4KICAgICAgPGxlZ2VuZD57JG1vZC0+TGFuZygnbGVnZW5kX3NuYXBzaG90X2Rpc3Bvc2l0aW9uJyl9OjwvbGVnZW5kPgogICAgICA8ZGl2IGNsYXNzPSJjX2Z1bGwiPgogICAgICAgIDxkaXYgY2xhc3M9ImdyaWRfMiB0ZXh0LXJpZ2h0Ij48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InskYWN0aW9uaWR9ZGlzcG9zZSIgdmFsdWU9ImRvd25sb2FkIiB7aWYgJHByZWZfZGlzcG9zZT09J2Rvd25sb2FkJ31jaGVja2Vkey9pZn0vPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImdyaWRfMTAiPnskbW9kLT5MYW5nKCdkaXNwb3NlX2Rvd25sb2FkJyl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iY2xlYXJiIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNfZnVsbCI+CiAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZF8yIHRleHQtcmlnaHQiPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0ieyRhY3Rpb25pZH1kaXNwb3NlIiB2YWx1ZT0iZW1haWwxIiB7aWYgJHByZWZfZGlzcG9zZT09J2VtYWlsMSd9Y2hlY2tlZHsvaWZ9Lz48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJncmlkXzEwIj4KICAgICAgICAgIHskbW9kLT5MYW5nKCdkaXNwb3NlX2VtYWlsJyl9CiAgICAgICAgICA8YnIgLz4KICAgICAgICAgIHskbW9kLT5MYW5nKCdhZGRyZXNzJyl9OiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1lbWFpbDEiIHZhbHVlPSJ7JGFkbWluX2VtYWlsfSIvPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImNsZWFyYiI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9maWVsZHNldD4KCiAgICA8ZGl2IGNsYXNzPSJjX2Z1bGwiPgogICAgICA8ZGl2IGNsYXNzPSJncmlkXzIgdGV4dC1yaWdodCI+Jm5ic3A7PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImdyaWRfMTAiPgogICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InskYWN0aW9uaWR9c25hcHNob3Rub3ciIHZhbHVlPSJ7JG1vZC0+TGFuZygnc25hcHNob3Rub3cnKX0iLz4KICAgICAgICB7aWYgaXNzZXQoJHJlc3RvcmVfdXJsKX0KICAgICAgICAgIDxhIGhyZWY9InskcmVzdG9yZV91cmx9Ij57JG1vZC0+TGFuZygnZ2V0X3Jlc3RvcmVfc2NyaXB0Jyl9PC9hPgogICAgICAgIHsvaWZ9CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjbGVhcmIiPjwvZGl2PgogIDwvZGl2PgogIAp7Zm9ybV9lbmR9]]></data>
	</file>
	<file>
	  <filename>/templates/dispose_email1.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[SGVsbG86PGJyLz4KPGJyLz4KWW91ciBTbmFwc2hvdCBoYXMgYmVlbiBnZW5lcmF0ZWQgYW5kIGlzIHRlbXBvcmFyaWx5IHN0b3JlZCBvbiB0aGUgQ01TTVMgc2VydmVyLiAgWW91IGNhbiBkb3dubG9hZCBpdCBieSBjbGlja2luZyA8YSBocmVmPSJ7JHNuYXBzaG90X3VybH0iPmhlcmU8L2E+Ljxici8+Cjxici8+CklmIHlvdSBjYW5ubm90IGNsaWNrIG9uIHRoZSBsaW5rIGFib3ZlLCBwbGVhc2UgbmF2aWdhdGUgaW4geW91ciBicm93c2VyIHRvOiB7JHNuYXBzaG90X3VybH0gPGJyLz4KPGJyLz4KUGxlYXNlIHJldHJpZXZlIHRoaXMgZmlsZSBzb29uLiBJdCB3aWxsIGJlIGRlbGV0ZWQgd2hlbmV2ZXIgdGhlIENNU01TIHN5c3RlbSBjYWNoZSBpcyBjbGVhcmVkLiB7aWYgJGF1dG9fY2xlYXJfY2FjaGVfYWdlfW9yIGZvciBvbmx5IHskYXV0b19jbGVhcl9jYWNoZV9hZ2V9IGRheXMsIHdoaWNoZXZlciBpcyBzb29uZXIuey9pZn0=]]></data>
	</file>
	<file>
	  <filename>/templates/help.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e3RhYl9oZWFkZXIgbmFtZT0nc3VwcG9ydCcgbGFiZWw9J1N1cHBvcnQnfQp7dGFiX2hlYWRlciBuYW1lPSdnZW5lcmFsJyBsYWJlbD0nR2VuZXJhbCd9Cnt0YWJfaGVhZGVyIG5hbWU9J2hvd3RvdXNlJyBsYWJlbD0nSG93IFRvIFVzZSd9Cnt0YWJfaGVhZGVyIG5hbWU9J2NvcHlyaWdodCcgbGFiZWw9J0NvcHlyaWdodCBhbmQgTGljZW5zZSd9CgoKe3RhYl9zdGFydCBuYW1lPSdzdXBwb3J0J30KICA8aDM+VGhpcyBtb2R1bGUgaXMgYnJvdWdodCB0byB5b3UgYnk6PC9oMz4KICA8cD48YSBocmVmPSJodHRwczovL2Ntc2NhbmJlc2ltcGxlLm9yZy9idXktcm9sZi1hLWN1cC1vZi1jb2ZmZWUiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsiPgogICAgPGltZyBzcmM9Ii4uL21vZHVsZXMvU25hcHNob3RNZ3IvaW1hZ2VzL2Ntcy1jYW4tYmUtc2ltcGxlLW9yZy5wbmciIGFsdD0iIiB3aWR0aD0iNTAwIiAvPgogIDwvYT48L3A+CiAgPGJyIC8+CiAgPHA+PGI+VGlwcywgdHJpY2tzIGFuZCB0dXRvcmlhbHMgdG8gbWFrZSBpdCBldmVuIGVhc2llciB0byB3b3JrIHdpdGggQ01TIE1hZGUgU2ltcGxlJnRyYWRlOy48L2I+PC9wPgogIDxiciAvPgogIDxwPllvdSBjYW4gZmluZCBtZSBhdDo8L3A+CiAgPHVsPgogICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vY21zY2FuYmVzaW1wbGUub3JnIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj5jbXNjYW5iZXNpbXBsZS5vcmc8L2E+ICZyYXF1bzs8L2xpPgogICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vdHdpdHRlci5jb20vY21zY2FuYmVzaW1wbGUiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsiPnR3aXR0ZXIuY29tPC9hPiAmcmFxdW87PC9saT4KICA8L3VsPgogICAgCiAgPGgzPlN1cHBvcnQgbWUgZm9yIHN1cHBvcnRpbmcgeW91ITwvaDM+CiAgPHA+RG8geW91IGxpa2UgdGhpcyBtb2R1bGUgYW5kIHRoZSBoZWxwIHlvdSBnZXQgYXQgQ01TIENhbiBCZSBTaW1wbGU/PHA+CiAgPHA+WW91IGNhbiBkb25hdGUgc29tZSBtb25leSB0byBidXkgbWUgYSB2aXJ0dWFsIGN1cCBvZiBjb2ZmZWUgYXMgYSBzbWFsbCB0b2tlbiBvZiBhcHByZWNpYXRpb24uPHA+CiAgPHA+PGI+PGEgaHJlZj0iaHR0cHM6Ly9jbXNjYW5iZXNpbXBsZS5vcmcvYnV5LXJvbGYtYS1jdXAtb2YtY29mZmVlIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj5ET05BVEUgTk9XPC9hPiAmcmFxdW87PC9iPjwvcD4KICAKICA8aDM+U3VwcG9ydDwvaDM+CiAgPHA+VGhpcyBtb2R1bGUgZG9lcyBub3QgY29udGFpbiBhbnkgY29tbWVyY2lhbCBzdXBwb3J0LiBJZiB5b3UgaGF2ZSBwcm9ibGVtcywgYXNrIGZvciBoZWxwIGluIHRoZTo8L3A+CiAgPHVsPgogICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vZm9ydW0uY21zbWFkZXNpbXBsZS5vcmcvIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj5DTVMgTWFkZSBTaW1wbGUgZm9ydW1zPC9hPjs8L2xpPgogICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnL3N1cHBvcnQvZG9jdW1lbnRhdGlvbi9jaGF0LyIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayI+U2xhY2sgY2hhdDwvYT47PC9saT4KICAgIDxsaT5vciB3cml0ZSBhbiBlbWFpbCB0byB0aGUgYXV0aG9yLjwvbGk+CiAgPC91bD4KCgp7dGFiX3N0YXJ0IG5hbWU9J2dlbmVyYWwnfQogIDxoMz5UaGFua3MgZm9yIHVzaW5nIFNuYXBzaG90TWdyLjwvaDM+CgogIDxwPlRoaXMgaXMgYSB1dGlsaXR5IG1vZHVsZSB0byBhbGxvdyBhdXRob3JpemVkIHBlcnNvbmVsbCB0byBnZW5lcmF0ZSBzbmFwc2hvdHMgb2YgYWxsIG9mIHRoZSBmaWxlcyBhbmQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGRhdGFiYXNlIG9mIGEgQ01TTVMgaW5zdGFsbGF0aW9uIGFuZCBkb3dubG9hZCBpdCB0byB5b3VyIGxvY2FsIGNvbXB1dGVyLiAgVGhpcyBpcyB1c2VmdWwgd2hlbiB1bmRlcnRha2luZyBzaXRlIHVwZ3JhZGVzLCBvciB3aGVuIG1vdmluZyBhIHNpdGUgdG8gYSBuZXcgaG9zdC48L3A+CiAgPGJyIC8+CiAgPHA+VGhlIHNuYXBzaG90cyBnZW5lcmF0ZWQgYXJlIHN0b3JlZCBpbiBzdGFuZGFyZCAuemlwIGZpbGVzIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHJlc3RvcmUgdGhlIHNpdGUgYXQgYW55IHRpbWUsIGVpdGhlciBtYW51YWxseSBvciB3aXRoIGFuIGludGVyYWN0aXZlIENMSSBiYXNlZCBwaHAgc2NyaXB0LjwvcD4KICA8YnIgLz4KICA8cD48Yj5Ob3RlOjwvYj4gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS48L3A+CgoKe3RhYl9zdGFydCBuYW1lPSdob3d0b3VzZSd9CiAgPGgzPkhvdyBkbyBJIHVzZSBpdDwvaDM+CiAgPHA+QWZ0ZXIgaW5zdGFsbGluZyB0aGUgbW9kdWxlLCB2aXNpdCB0aGUgU2l0ZSBBZG1pbiA+PiBTbmFwc2hvdE1nciBtZW51IGl0ZW0gYW5kIGNsaWNrICdDcmVhdGUgU25hcHNob3QgTm93Jy4gIFRoaXMgd2lsbCBnZW5lcmF0ZSB0aGUgc25hcHNob3QgZmlsZSBhbmQgc2VuZCBpdCB0byB5b3VyIGxvY2FsIGJyb3dzZXIuPC9wPgoKICA8aDM+Q2F1dGlvbjwvaDM+CiAgPHA+U25hcHNob3QgZmlsZXMgYXJlIHR5cGljYWx5IGxhcmdlLCBhbmQgY2FuIGNvbnN1bWUgYSBzaWduaWZpY2FudCBhbW91bnQgb2Ygc2VydmVyIHJlc291cmNlcyBpbiBnZW5lcmF0aW5nIHRoZW0sIGFuZCBkb3dubG9hZGluZyB0aGVtLiAgVGhpcyB1dGlsaXR5IG1heSBub3Qgd29yayB3ZWxsIGZvciBzaXRlcyB0aGF0IGNvbnN1bWUgbXVsdGktZ2lnYWJ5dGVzIG9mIGRpc2sgc3BhY2UsIG9yIG9uIGEgc2VydmVyIHdpdGggbGltaXRlZCByZXNvdXJjZXMuICAgVXNlIGF0IHlvdXIgb3duIHJpc2suPC9wPgogIDxwPlNuYXBzaG90IGZpbGVzIGFyZSBnZW5lcmF0ZWQgYW5kIHN0b3JlZCBvbiB0aGUgc2VydmVyIHVudGlsIHN1Y2ggdGltZSBhcyB0aGV5IGVpdGhlciBleHBpcmUgKGEgc2V0dGluZyBpbiBDTVNNUykgb3IgdGhlIHNlcnZlciBjYWNoZSBpcyBjbGVhcmVkLiAgVGhlc2UgY2FuIHRha2UgdXAgYSBzaWduaWZpY2FudCBhbW91bnQgb2Ygc3BhY2UsIHNvIHVzZSBjYXV0aW9uIHdoZW4gZ2VuZXJhdGluZyB0aGVtLjwvcD4KICA8cD48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IFRoZSBkYXRhYmFzZSBiYWNrdXAgd2lsbCBub3QgZXhwb3J0IGFkdmFuY2VkIGNvbnN0cnVjdHMgc3VjaCBhcyBzdG9yZWQgcHJvY2VkdXJlcywgdmlld3MsIG9yIHRyaWdnZXJzLiAgQnV0IGl0IHNob3VsZCB3b3JrIGZvciBtb3N0IENNU01TIHdlYnNpdGVzLjwvcD4KCiAgPGgzPlJlc3RvcmluZzwvaDM+CiAgPHA+VGhlIFNuYXBzaG90TWdyIG1vZHVsZSBwcm92aWRlcyBhbiBpbnRlcmFjdGl2ZSBDTEkgYmFzZWQgcGhwIHNjcmlwdCAoYWN0dWFsbHkgYSBiaW5hcnkgLnBoYXIgZmlsZSkgdG8gYWlkZSBpbiByZXN0b3JpbmcgdGhlIHNuYXBzaG90LiAgVGhpcyBmaWxlIGlzIGxvY2F0ZWQgaW4gdG1wL3Jlc3RvcmUucGhwIGluIHRoZSBpbmNsdWRlZCBzbmFwc2hvdCwgIGFuZCBjYW4gYWxzbyBiZSBkb3dubG9hZGVkIHNlcGFyYXRlbHkgZnJvbSB3aXRoaW4gdGhlIFNuYXBzaG90TWdyIGFkbWluIHBhbmVsLjwvcD4KICA8cD48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IFRoZSBpbnRlcmFjdGl2ZSByZXN0b3JlIHNjcmlwdCBjdXJyZW50bHkgb25seSBvcGVyYXRlcyBpZiB5b3UgYmFja2VkIHVwIGJvdGggdGhlIGZpbGVzIGFuZCB0aGUgZGF0YWJhc2UuPC9wPgogIDxwPlRvIGRvIGFuIGludGVyYWN0aXZlIHJlc3RvcmUgeW91IHdpbGwgbmVlZCBzaGVsbCBhY2NjZXNzIChpbiBhIGxpbnV4IGVudmlyb25tZW50KSB0byB0aGUgZGVzdGluYXRpb24gc2VydmVyLjwvcD4KICA8cD5JbnN0cnVjdGlvbnM6PC9wPgogIDxvbD4KICAgIDxsaT5VcGxvYWQgdGhlIHNuYXBzaG90IC56aXAgZmlsZSBpbiBpdHMgZW50aXJldHkgKGRvIG5vdCBleHBhbmQgaXQpIHRvIHRoZSBkZXN0aW5hdGlvbiBmb2xkZXIuICBVc2luZyBTU0ggaXMgdGhlIGJlc3QgbWV0aG9kLjwvbGk+CiAgICA8bGk+VXBsb2FkIHRoZSByZXN0b3JlIHNjcmlwdCAodXN1YWxseSBuYW1lZCAiU25hcHNob3RNZ3ItUmVzdG9yZS5waHAiKSBmaWxlIChJTiBCSU5BUlkgTU9ERSkgdG8gdGhlIGRlc3RpbmF0aW9uIGZvbGRlci48L2xpPgogICAgPGxpPlVzaW5nIFNTSCBvciBhbm90aGVyIG1lY2hhbmlzbSBjb25uZWN0IHRvIHlvdXIgc2VydmVycyBzaGVsbCBjb25zb2xlLjwvbGk+CiAgICA8bGk+TmF2aWdhdGUgdG8geW91ciBkZXN0aW5hdGlvbiBmb2xkZXIgKHRoZSBzYW1lIGZvbGRlciB5b3UgdXNlZCBpbiB0aGUgZmlyc3QgdHdvIHN0ZXBzKS48L2xpPgogICAgPGxpPkV4ZWN1dGU6ICBwaHAgU25hcHNob3RNZ3ItUmVzdG9yZS5waHAKICAgICAgIDxwPlRoaXMgd2lsbCBicmluZyB1cCBhbiBpbnRlcmFjdGl2ZSwgY29uc29sZSBkcml2ZW4gdXRpbGl0eSB0aGF0IHdpbGwgYWxsb3cgeW91IHRvIGVudGVyIHRoZSBuYW1lIG9mIHRoZSBzbmFwc2hvdCBmaWxlLCBhbmQgZW50ZXIgZGF0YWJhc2UgY3JlZGVudGlhbCBpbmZvcm1hdGlvbi48L3A+CiAgICAgICA8cD5UaGUgc2NyaXB0IHdpbGwgdGhlbiB2ZXJpZnkgdGhlIGRhdGFic2UgY3JlZGVudGlhbHMsIGFuZCB0aGF0IHRoZSBkYXRhYmFzZSBpcyBlbXB0eS48L3A+CiAgICAgICA8cD5Gb2xsb3dpbmcgdGhpcyB0aGUgZGF0YWJhc2UgZHVtcCB3aWxsIGJlIGltcG9ydGVkIHRvIHRoZSBuZXcgZGF0YWJhc2UsIGFuZCB0aGUgemlwIGZpbGUgZXhwYW5kZWQuPC9wPgogICAgICAgPHA+VGhpcyBzY3JpcHQgd2lsbCB0aGVuIGdlbmVyYXRlIGEgbmV3IGNvbmZpZy5waHAsIGdlbmVyYXRlIHRoZSBzcGVjaWFsIENNU01TIHRlbXBvcmFyeSBkaXJlY3RvcmllcywgYW5kIHBlcmZvcm0gY2xlYW51cC48L3A+CiAgICAgICA8cD5UaGUgdXRpbGl0eSB3aWxsIGF1dG9tYXRpY2FsbHkgZGVsZXRlIGl0c2VsZiwgYW5kIHJlbW92ZSB0aGUgemlwIGZpbGUgdXBvbiBzdWNjZXNzZnVsIGNvbXBsZXRlaW9uLjwvcD4KICAgIDwvbGk+CiAgPC9vbD4KCiAgPGgzPkFmdGVyIFJlc3RvcmF0aW9uPC9oMz4KICA8cD5BZnRlciByZXN0b3JhdGlvbiwgcGFydGljdWxhcmx5IGlmIHlvdSBhcmUgcmVzdG9yaW5nIHRvIGEgZGlmZmVyZW50IGhvc3QgdGhlbiB5b3UgbWF5IG5lZWQgdG8gbWFrZSBhZGp1c3RtZW50cyB0byBzb21lIGZpbGVzLiAgSW5jbHVkaW5nOjwvcD4KICA8dWw+CiAgICA8bGk+QWRqdXN0aW5nIHRoZSAuaHRhY2Nlc3MgZmlsZSBmb3IgdGhlIHJld3JpdGVfYmFzZSBhbmQgYW55IG90aGVyIHJlZGlyZWN0IHJ1bGVzLjwvbGk+CiAgICA8bGk+QWRqdXN0aW5nIHBhdGhzIGluIHRoZSBjb25maWcucGhwIGZpbGUuPC9saT4KICAgIDxsaT5BZGp1c3RpbmcgcGVybWlzc2lvbnMKICAgICAgIDxwPkRlcGVuZGluZyB1cG9uIHRoZSBkZXN0aW5hdGlvbiBzZXJ2ZXIgZW52aXJvbm1lbnQsIGFuZCB0aGUgYWNjb3VudHMgdGhhdCB5b3UgYXJlIHVzaW5nIHRvIGNvbm5lY3QgdmlhIHNoZWxsLCBhbmQgZm9yIHRoZSB3ZWIgc2VydmVyLCB5b3UgbWF5IG5lZWQgdG8gYWRqdXN0IHBlcm1pc3Npb25zIG9mIHNvbWUgZmlsZXMgb3IgZGlyZWN0b3JpZXMgZm9yIENNU01TIHRvIHdvcmsgcHJvcGVybHkuPC9wPgogICAgICAgPHA+SW5mb3JtYXRpb24gYWJvdXQgcHJvcGVyIHBlcm1pc3Npb25zIGZvciBDTVNNUyBpcyB3ZWxsIGRvY3VtZW50ZWQgb24gdGhlIENNU01TIGRvY3VtZW50YXRpb24gc2l0ZSBhdCA8YSBocmVmPSJodHRwOi8vZG9jcy5jbXNtYWRlc2ltcGxlLm9yZyI+ZG9jcy5jbXNtYWRlc2ltcGxlLm9yZzwvYT4KICAgIDwvbGk+CiAgPC91bD4KCiAgPGgzPlNwZWNpYWwgRmlsZXM8L2gzPgogIDxwPklmIHBlcmZvcm1pbmcgYSBtYW51YWwgcmVzdG9yYXRpb24sIHRoZXJlIGFyZSBzb21lIHNwZWNpYWwgZmlsZXMgaW4gdGhlIGFyY2hpdmUgdGhhdCB5b3Ugd2lsbCBuZWVkIHRvIGRlbGV0ZSBhZnRlciBtYW51YWxseSBleHBhbmRpbmcgdGhlIC56aXAgZmlsZTo8L3A+CiAgPHVsPgogICAgPGxpPnRtcC9fX215c3FsZHVtcC5zcWwgLSBUaGlzIGlzIHRoZSBkdW1wIG9mIHRoZSBkYXRhYmFzZSwgaXQgaXMgaW1wb3J0YW50IHRoYXQgdGhpcyBmaWxlIGJlIGRlbGV0ZWQgb24gbGl2ZSBzaXRlcy48L2xpPgogICAgPGxpPnRtcC8uc25hcHNob3RtZ3IgLSBUaGlzIGlzIGEgbWFnaWMgZmlsZSB1c2VkIGJ5IHRoZSBpbnRlcmFjdGl2ZSByZXN0b3JhdGlvbiBzY3JpcHQuIEl0IHNob3VsZCBiZSBkZWxldGVkIG9uIGxpdmUgc2l0ZXMuPC9saT4KICA8L3VsPgoKICA8aDM+UmVxdWlyZW1lbnRzPC9oMz4KICA8cD5UaGlzIG1vZHVsZSBoYXMgdGhlc2Ugc3BlY2lhbCByZXF1aXJlbWVudHM6PC9wPgogIDx1bD4KICAgIDxsaT5WYWxpZCwgYW5kIHdyaXRhYmxlIHN5c3RlbSB0ZW1wb3JhcnkgZGlyZWN0b3J5LgogICAgICAgPHA+VGhlIHBocCBmdW5jdGlvbiBzeXNfZ2V0X3RlbXBfZGlyKCkgbXVzdCByZXR1cm4gYSB2YWxpZCwgd3JpdGFibGUgZGlyZWN0b3J5LjwvcD4KICAgIDwvbGk+CiAgICA8bGk+U3VwcG9ydCBmb3IgdGhlIFBIUCBaaXBBcmNoaXZlIGNsYXNzLjwvbGk+CiAgICA8bGk+VGhlIGFiaWxpdHkgdG8gYWRqdXN0IHRoZSBwaHAgc2NyaXB0IHRpbWUgbGltaXQuCiAgICAgIDxwPnRoZSBzZXRfdGltZV9saW1pdCg5OTk5KSBtZXRob2QgbXVzdCB3b3JrIHByb3Blcmx5LjwvcD4KICAgIDwvbGk+CiAgPC91bD4KCgp7dGFiX3N0YXJ0IG5hbWU9J2NvcHlyaWdodCd9CiAgPGJyIC8+CiAgPHA+VGhpcyBtb2R1bGUgaXMgYSBmb3JrIG9mIHRoZSBDR1NuYXBzaG90IG1vZHVsZS48YnIgLz4KICAgIENvcHlyaWdodCAmY29weTsgMjAxNSAtIDIwMjEsIFJvYmVydCBDYW1wYmVsbCBbY2FsZ3V5MTAwMC5jb21dLjwvcD4KCiAgPGgzPlNuYXBzaG90TWdyPC9oMz4KICA8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMjEgYW5kIGJleW9uZCwgUm9sZiBUamFzc2VucyBbaW5mbyBhdCBjbXNjYW5iZXNpbXBsZSBkb3Qgb3JnXS4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPgogIDxiciAvPgogIDxwPlRoaXMgbW9kdWxlIGhhcyBiZWVuIHJlbGVhc2VkIHVuZGVyIHRoZSA8Yj48YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsiPkdOVSBQdWJsaWMgTGljZW5zZSB2MzwvYT48L2I+LjwvcD4KICA8cD48Yj5Ib3dldmVyPC9iPiwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUmdHJhZGU7LjxiciAvPgogIFlvdSBtYXkgb25seSB1c2UgdGhpcyBzb2Z0d2FyZSB3aGVuIHRoZXJlIGlzIGEgY2xlYXIgYW5kIG9idmlvdXMgaW5kaWNhdGlvbiBpbiB0aGUgYWRtaW4gc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIDxiPkNNUyBNYWRlIFNpbXBsZSZ0cmFkZTs8L2I+LjwvcD4KCnt0YWJfZW5kfQoKPHNjcmlwdD4KICAgICQoImltZyIpLmVycm9yKGZ1bmN0aW9uKCkgeyAKICAgICQodGhpcykuYXR0cignc3JjJywgJy4uL2Fzc2V0cy9tb2R1bGVzL1NuYXBzaG90TWdyL2ltYWdlcy9jbXMtY2FuLWJlLXNpbXBsZS1vcmcucG5nJyk7CiAgfSApOwo8L3NjcmlwdD4=]]></data>
	</file>
	<file>
	  <filename>/templates/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/templates/readme.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PT09IFNOQVBTSE9UTUdSIFJFQURNRSA9PT0KClRoaXMgemlwIGZpbGUgd2FzIGNyZWF0ZWQgdXNpbmcgeyRtb2R1bGVfbmFtZX0geyRtb2R1bGVfdmVyc2lvbn0gb24geyRzbWFydHkubm93fGRhdGVfZm9ybWF0OiclZC0lbS0lWSAlSDolTSd9ClRoZSB6aXAgZmlsZSBjb250YWlucyBhIHNuYXBzaG90IG9mIHRoZSBkYXRhYmFzZSwgYW5kIGEgc25hcHNob3Qgb2YgYWxsIHJlbGV2YW50IGZpbGVzIChleGNsdWRpbmcgdGVtcG9yYXJ5IGZpbGVzIGFuZCBkaXJlY3Rvcmllcykgb2YgeW91ciBDTVNNUyB3ZWJzaXRlLgoKVGhpcyB6aXAgZmlsZSBpcyB1c2VmdWwgZm9yIGNyZWF0aW5nIGEgc25hcHNob3Qgb2YgYSBzaXRlIGJlZm9yZSB1cGdyYWRpbmcsIG9yIHRvIG1ha2UgbW92aW5nIGEgd2Vic2l0ZSBlYXNpZXIuCgoKSW50ZXJhY3RpdmUgUmVzdG9yZSBJbnN0cnVjdGlvbnMKLS0tLS0KSWYgeW91IGhhdmUgc2hlbGwgYWNjZXNzIGludG8geW91ciB3ZWIgYWNjb3VudCAocmVjb21tZW5kZWQpIHRoZW46CjEuICBVcGxvYWQgdGhpcyB6aXAgZmlsZSBpbiBpdHMgZW50aXJldHkgdG8gdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSBvbiB5b3VyIHdlYiBzZXJ2ZXIuCjIuICBDb25uZWN0IHZpYSBzaGVsbCAoc3NoIG9yIG90aGVyKSB0byB5b3VyIHdlYiBhY2NvdW50IGFuZCBuYXZpZ2F0ZSB0byB5b3VyIGRlc3RpbmF0aW9uIGRpcmVjdG9yeS4KMy4gIEV4ZWN1dGU6IHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKICAgIHBocCB0bXAvcmVzdG9yZS5waHAKCiAgICBZb3Ugd2lsbCBiZSBpbnRlcmFjdGl2ZWx5IGd1aWRlZCB0aHJvdWdoIHRoZSByZXN0b3JlIHByb2Nlc3MuIGFuZCBwcm9tcHRlZCBmb3IgdGhlIG5hbWUgb2YgdGhlIFNuYXBzaG90TWdyIGZpbGUsIGFuZCBkYXRhYmFzZSBpbmZvcm1hdGlvbi4KICAgIE5vdGU6ICBPbmx5IHNuYXBzaG90cyBnZW5lcmF0ZWQgYnkgU25hcHNob3RNZ3IgY2FuIGJlIHVzZWQgYnkgdGhpcyBzY3JpcHQuCgoKTWFudWFsIFJlc3RvcmUgSW5zdHJ1Y3Rpb25zCi0tLS0tCjEuICBVcGxvYWQgdGhpcyB6aXAgZmlsZSBpbiBpdHMgZW50aXJldHkgdG8gdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSBvbiB5b3VyIHdlYiBzZXJ2ZXIuCjIuICBVc2luZyB5b3VyIHdlYiBhY2NvdW50cyBmaWxlIG1hbmFnZW1lbnQgc3lzdGVtIGV4cGFuZCB0aGlzIHppcCBmaWxlCjMuICBJbXBvcnQgdGhlIHRtcC9fX215c3FsZHVtcC5zcWwgZmlsZSBpbnRvIHlvdXIgZGVzdGluYXRpb24gZGF0YWJhc2UgdXNpbmcgcGhwbXlhZG1pbiBvciBhbm90aGVyIHNpbWlsYXIgdG9vbAo0LiAgQWRqdXN0IHRoZSBjb25maWcucGhwIGZpbGUgdG8gY29udGFpbiB0aGUgZGF0YWJhc2UgY3JlZGVudGlhbHMKNS4gIFRlc3QgdGhlIG5ldyB3ZWJzaXRlCjYgICBEZWxldGUgdGhlIG9yaWdpbmFsIHppcCBmaWxlIG9uY2UgY29tcGxldGUuCjcuICBEZWxldGUgdGhlIHRtcC8uc25hcHNob3RtZ3IgYW5kIHRtcC9fX215c3FsZHVtcC5zcWwgZmlsZXMKCgpFcnJvcnMgeW91IG1heSBuZWVkIHRvIGNvcnJlY3QKLS0tLS0KMS4gIFBlcm1pc3Npb25zCiAgICBEZXBlbmRpbmcgdXBvbiB5b3VyIHNlcnZlciBjb25maWd1cmF0aW9uLCB5b3UgbWF5IG5lZWQgdG8gYWRqdXN0IHBlcm1pc3Npb25zIG9uIHZhcmlvdXMgZGlyZWN0b3JpZXMgdG8gYWxsb3cgeW91IHRvIHdvcmsgd2l0aCBmaWxlIGFuZCBtb2R1bGVzIHZpYSBGVFAgb3IgdmlhIHRoZSBDTVNNUyB3ZWIgaW50ZXJmYWNlLgoKMi4gIFBhdGhzIGluIHRoZSBjb25maWcucGhwCiAgICBNb3N0IG5ldyBpbnN0YWxscyBvZiBDTVNNUyBkbyBub3QgY29udGFpbiBwYXRocyBpbiB0aGUgY29uZmlnLnBocCwgIHRoZXJlZm9yZSB0aGlzIHNjcmlwdCBkb2VzIG5vdCBhdHRlbXB0IHRvIHJlcGFpciBhbnkgcGF0aHMgaW4gdGhlIGNvbmZpZy5waHAuCiAgICBJZiB5b3UgZG8gaGF2ZSBwYXRocyBhbmQvb3IgVVJMJ3MgaW4gdmFyaW91cyB2YXJpYWJsZXMgaW4gdGhlIGNvbmZpZy5waHAgeW91IG1heSBuZWVkIHRvIGFkanVzdCB0aGVtLgoKMy4gIC5odGFjY2VzcyBmaWxlcwogICAgSWYgeW91IGFyZSB1c2luZyBtb2RfcmV3cml0ZSwgb3IgaGF2ZSBvdGhlciBVUkwgcmV3cml0aW5nIHJ1bGVzIGluIHlvdXIgLmh0YWNjZXNzIHlvdSBtYXkgbmVlZCB0byBtYWtlIGFkanVzdG1lbnRzIGluIHRoaXMgZmlsZS4KCjQuICBwYXRocyBhbmQgcHJlZmVyZW5jZXMgaW4gYWRkLW9ucwogICAgU29tZSBtb2R1bGVzIG1heSBzdG9yZSBzZXJ2ZXIgcGF0aHMgaW4gcHJlZmVyZW5jZXMgb3Igb3RoZXIgbG9jYXRpb25zLiBZb3UgbWF5IG5lZWQgdG8gcmV2aWV3IHRoZXNlIHBhdGhzIGFzIHBhcnQgb2YgeW91ciB0ZXN0aW5nIHByb2Nlc3MuCgoKU2VjdXJpdHkgY29uY2VybnMKLS0tLS0KMS4gIFBsZWFzZSBlbnN1cmUgdGhhdCB5b3UgZGVsZXRlIHRoZSBTbmFwc2hvdE1nciBmaWxlIGZyb20geW91ciBzZXJ2ZXIgb25jZSB0aGUgbmV3IHNpdGUgaXMgd29ya2luZyB3ZWxsLgoyLiAgUGxlYXNlIGVuc3VyZSB0aGF0IHlvdSBkZWxldGUgdGhlIHRtcC9fX215c3FsZHVtcC5zcWwgZmlsZSBmcm9tIHlvdXIgc2VydmVyIG9uY2UgdGhlIG5ldyBzaXRlIGlzIHdvcmtpbmcgd2VsbC4=]]></data>
	</file>
</module>
