<?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>GoogleMaps</name>
	<version>0.1.6</version>
  <mincmsversion>1.0-beta6</mincmsversion>
	<help>CjxoMz5XaGF0IERvZXMgVGhpcyBEbz88L2gzPgo8cD5UaGlzIG1vZHVsZSBpcyBpbnRlbnRlZCBmb3IgaW50ZWdyYXRpbmcgR29vZ2xlTWFwcyBhcyBhIHBhcnQgb2YgeW91ciBzaXRlLjwvcD4KPGgzPkhvdyBEbyBJIFVzZSBJdDwvaDM+CjxwPkZpcnN0IHlvdSBtdXN0IGluc2VydCB5b3VyIEdvb2dsZU1hcHMgYXBpIGtleSAocGxlYXNlIHJlZ2lzdGVyIGluIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9hcGlzL21hcHMvc2lnbnVwLmh0bWwpLjwvcD4KPHA+VGhlbiB5b3UgY2FuIGNhbGwgdGhpcyBtb2R1bGUgaW4geW91ciB0ZW1wbGF0ZSB3aXRoIHtjbXNfbW9kdWxlIG1vZHVsZT0nR29vZ2xlTWFwcycgbWFwPSd0ZXN0J30gPC9wPgo8cD5Vc2VyIGRlZmluZWQgbWFya2VycyBjYW4gYmUgbG9hZGVkIGludG8gdXBsb2Fkcy9Hb29nbGVNYXBzL21hcmtlcnMuIFRoZSBjb25uZWN0ZWQgc2hhZG93IGltYWdlcyBzaG91bGQgYmUgbG9hZGVkIGluIAoJdXBsb2Fkcy9Hb29nbGVNYXBzL21hcmtlcnNoYWRvd3MuPGJyPgoJTmFtaW5nIGNvbnZlbnRpb24gaXMgW21hcmtlcmljb25dcy5wbmcgKGllLiBtYXJrZXIgaXMgYmlnYmx1ZS5wbmcsIG1hcmtlcnNoYWRvdyBpcyBiaWdibHVlcy5wbmcpLjxicj4KCUlmIGEgc2hhZG93IGlzIG5vdCBmb3VuZCwgdGhlIGRlZmF1bHQgdmVyc2lvbiB3aWxsIGJlIHVzZWQgKHdoaWNoIG1heSBub3QgYmUgdGhlIGNvcnJlY3Qgc2hhZG93IG9mIHRoZSBtYXJrZXIgYXQgYWxsKS48YnI+CglJbiB0aGUgc2V0dGluZ3MgdXNlIHRoZSBwcmVmZXJlbmNlICdVc2UgbWFya2VyIHNoYWRvd3MnIHRvIHNob3cvaGlkZSB0aGVtLiBTaG93aW5nIHRoZSBzaGFkb3dzIHNsb3dzIGRvd24gdGhlIGJ1aWxkdXAgb2YgdGhlCgltYXAsIGR1ZSB0byBtb3JlIGludGVybmFsIGNoZWNrcy48YnI+CglPbmx5IGltYWdlcyB3aXRoIGV4dGVuc2lvbiAucG5nIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkLjwvcD4KPHA+VGhpcyBtb2R1bGUgaXMgZXZlbiBtb3JlIGZsZXhpYmxlIHRocm91Z2ggdGhlIHVzYWdlIG9mIHRoZSBwYXJhbWV0ZXJzIChzZWUgdGhlIHBhcmFtZXRlciBsaXN0KS4gRWFjaCBwYXJhbWV0ZXIgYXMgYXZhaWxhYmxlIGR1cmluZyB0aGUgcHJlcGFyYXRpb24gb2YgYSBtYXAsIGNhbiBiZSAKCW92ZXJyaWRlbiBmb3IgdGhlIGZyb250IGVuZC4gU28geW91IGFyZSBhYmxlIHRvIHByZXBhcmUgb25lIG1hcCBhbmQgZGlzcGxheSBpdCBpbiB2YXJpb3VzIHdheXMgYnkgdXNpbmcgb25lIG9yIG1vcmUgcGFyYW1ldGVycy48YnI+Cgk8aT5Ob3RlOjwvaT4gRHVlIHRvIHRoZSBnZW5lcmF0aW9uIGZvcm0gdXNlZCBmb3IgdGhlIG1hcCwgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGhhdmUgbXVsdGlwbGUgbWFwcyBvbiBvbmUgcGFnZSE8L3A+CjxoMz5TdXBwb3J0PC9oMz4KPHA+VGhpcyBtb2R1bGUgZG9lcyBub3QgaW5jbHVkZSBjb21tZXJjaWFsIHN1cHBvcnQuIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIG51bWJlciBvZiByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIGhlbHAgeW91IHdpdGggaXQ6PGJyPgo8dWw+Cgk8bGk+VGhlIENNUyBNYWRlIFNpbXBsZSBmb3J1bTs8L2xpPgo8L3VsPgo8L3A+CjxwPkFzIHBlciB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzLWlzLiBQbGVhc2UgcmVhZCB0aGUgdGV4dApvZiB0aGUgbGljZW5zZSBmb3IgdGhlIGZ1bGwgZGlzY2xhaW1lci48L3A+Cgo8aDM+U2VjdXJpdHk8L2gzPgo8cD5Vc2VyIG11c3QgaGF2ZSAiVXNlIEdvb2dsZU1hcHMiIHBlcm1pc3Npb25zIHNldCB0byBlZGl0IG1hcHM8L3A+CjxoMz5QYXJhbWV0ZXJzPC9oMz48dWw+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gbGFuZz0iZW5fVVMiIC0gUGFyYW1ldGVyIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGF0IGxhbmd1YWdlIHRvIHVzZSBmb3IgZGlzcGxheSBvbiB0aGUgZnJvbnRlbmQuIE5vdCBhbGwgbW9kdWxlcyBzdXBwb3J0IG9yIG5lZWQgdGhpcy48L2xpPjxsaT5ib3VuZHNfZnVkZ2U9IiIgLSBUaGlzIHdpbGwgYWRqdXN0IGhvdyBtdWNoIG1hcCBib3VuZGFyeSBlbmNvbXBhc3NlcyB0aGUgbWFwIG1hcmtlcnMuPC9saT48bGk+Y2VudGVybGF0PSIiIC0gVGhlIGxhdGl0dWRlIHRvIHdoaWNoIHRoZSBtYXAgc2hvdWxkIGJlIGNlbnRlcmVkLjwvbGk+PGxpPmNlbnRlcmxvbj0iIiAtIFRoZSBsb25naXR1ZGUgdG8gd2hpY2ggdGhlIG1hcCBzaG91bGQgYmUgY2VudGVyZWQuPC9saT48bGk+Y29udHJvbHM9IiIgLSBJZiBzZXQgdG8gMCAoemVybyksIHRoZXJlIHdpbGwgYmUgbm8gY29udHJvbHMgdG8gem9vbS9tb3ZlIGFyb3VuZCB0aGUgbWFwLjwvbGk+PGxpPmNvbnRyb2xzX3NpemU9IiIgLSBUaGlzIHNldHMgdGhlIG1hcCBjb250cm9sIHNpemUuIFJlbGV2YW50IG9ubHkgaWYgbWFwIGNvbnRyb2xzIGFyZQplbmFibGVkLiBsYXJnZSA9IG1hcCB6b29tL21vdmUgd2l0aCBzbGlkZXIuIHNtYWxsID0gem9vbS9tb3ZlIHdpdGhvdXQgc2xpZGVyLiBMYXJnZSBpcyBkZWZhdWx0LjwvbGk+PGxpPmRpcmVjdGlvbnM9IiIgLSBUaGlzIGVuYWJsZXMgbWFwIGRpcmVjdGlvbnMgaW4gdGhlIGJvdHRvbSBvZiB0aGUgcG9wLXVwIGluZm8gd2luZG93LiBEZWZhdWx0IGlzIGRpc2FibGVkLgonMScgV2lsbCBlbmFibGUgdGhlIGRpcmVjdGlvbnMuPC9saT48bGk+aGVpZ2h0PSIiIC0gU2V0cyB0aGUgaGVpZ2h0IG9mIHRoZSBtYXAgd2luZG93LiBUaGlzIGNhbiBiZSBlaXRoZXIgcHggb3IgJS48L2xpPjxsaT5pbmZvX3RyaWdnZXI9IiIgLSBUaGlzIHNldHMgdGhlIGluZm8gd2luZG93IHRyaWdnZXIgYmVoYXZpb3IuIGNsaWNrID0gaW5mbyB3aW5kb3cgY29tZXMgdXAKICAgICAgICB3aGVuIGNsaWNraW5nIG9uIGEgbWFya2VyLiBtb3VzZW92ZXIgPSBpbmZvIHdpbmRvdyBjb21lcyB1cCB3aGVuIG1vdXNpbmcgb3ZlciBhIG1hcmtlci48L2xpPjxsaT5pbmZvX3dpbmRvdz0iIiAtIEVuYWJsZXMgaW5mbyB3aW5kb3dzIG9uIG1hcCBtYXJrZXJzLjwvbGk+PGxpPm1hcD0idGVzdCIgLSBTZXQgd2hpY2ggbWFwIHRvIHNob3c8L2xpPjxsaT5zaWRlYmFyPSIiIC0gVXNlICcxJyB0byBlbmFibGUgdGhlIG1hcCBzaWRlYmFyLjwvbGk+PGxpPnR5cGU9IiIgLSBUaGlzIHNldHMgdGhlIGRlZmF1bHQgbWFwIHR5cGUuIFJlbGV2YW50IG9ubHkgaWYgbWFwIHR5cGUgY29udHJvbHMgYXJlIGVuYWJsZWQuIAoJbWFwID0gZGVmYXVsdCBtYXAuIHNhdGVsbGl0ZSA9IHNhdGVsbGl0ZSB2aWV3LiBoeWJyaWQgPSBoeWJyaWQgdmlldy48L2xpPjxsaT50eXBlX2NvbnRyb2xzPSIiIC0gVXNlICcxJyBlbmFibGUgdGhlIG1hcCB0eXBlIGNvbnRyb2xzIChtYXAvc2F0ZWxsaXRlL2h5YnJpZCk8L2xpPjxsaT53aWR0aD0iIiAtIFNldHMgdGhlIHdpZHRoIG9mIHRoZSBtYXAgd2luZG93LiBUaGlzIGNhbiBiZSBlaXRoZXIgcHggb3IgJS48L2xpPjxsaT56b29tPSIiIC0gVGhpcyBzZXRzIHRoZSBtYXAgem9vbSBsZXZlbC48L2xpPjxsaT56b29tX2VuY29tcGFzcz0iIiAtIFVzZSAnMScgdG8gZW5hYmxlIHRoZSB6b29tIGVuY29tcGFzcyBzbyBtYXAgem9vbSBpcyBhcyBzbWFsbCBhcyBwb3NzaWJsZQogICAgICAgIGFuZCBpbmNsdWRlIGFsbCBtYXAgbWFya2Vycy48L2xpPjwvdWw+</help>
	<about>PGJyIC8+QXV0aG9yOiB0c3cgJmx0O3RhdHUud2lrbWFuIFthdF0gZ21haWwuY29tJmd0OzxiciAvPjxiciAvPlZlcnNpb246IDAuMS42PGJyIC8+PGJyIC8+Q2hhbmdlIEhpc3Rvcnk6PGJyIC8+Cjx1bD4KCTxsaT52ZXJzaW9uIDAuMS42IDE1IEphbnVhcnkgMjAwOSBCeSBEdWtldG93bjxiciAvPgoJSW5jbHVkZWQgdGhlIHBhcmFtZXRlcnMgdGhhdCBhcmUgYWxzbyB1c2VkIGJ5IEdvb2dsZSdzIEFQSS4gUGFyYW1ldGVycyBhcmUgZGlzY3Vzc2VkIGluIGhlbHAgdGV4dC4KCTwvbGk+Cgk8bGk+dmVyc2lvbiAwLjEuNSAxMCBKYW51YXJ5IDIwMDkgQnkgRHVrZXRvd248YnIgLz4KCVVzZXIgZGVmaW5lZCBtYXJrZXJzIG5vdyB3b3JrLiBTdXBwbGllZCBtYXJrZXJzIGJ1aWxkIHZpYTogaHR0cDovL3d3dy5nbWFwbGl2ZS5jb20vbWFya2VyX21ha2VyLnBocCBvZiBEaXhvbiBJbmZvcm1hdGlvbiBTeXN0ZW1zLCBDYW5hZGE8YnIgLz4KCTwvbGk+Cgk8bGk+VmVyc2lvbiAwLjEuIDI4IEF1Z3VzdCAyMDA2LiBJbml0aWFsIFJlbGVhc2UuPC9saT4KPC91bD4KCjxoMz5UaGFua3MgZ28gdG88L2gzPgo8cD5Sb2JlcnQgQnJvd24gZm9yIFJDUlVEIENsYXNzIHVzZWQgaW4gYWRtaW4gZXh0ZW5zaXZlbHk8L3A+CjxwPmFuZDwvcD4KPHA+TW9udGUgT2hydCBmb3IgR29vZ2xlTWFwQVBJPC9wPgo8YnIgLz4=</about>
	<description>Prepare multiple Google maps, multiple coordinates with custom markers.</description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIERpc3BsYXlNb2R1bGVPdXRwdXQoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsICRtZXNzYWdlKQogICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQogICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBzaW1wbGUgbWV0aG9kIHRvIGRpc3BsYXkKICAgc29tZXRoaW5nIHdoZXJlIGEgcGFnZSBvciB0ZW1wbGF0ZSBoYXMgYSB0YWcgY2FsbGluZwogICB0aGlzIG1vZHVsZS4KICAgCiAgIE5vdGUgdGhhdCBpdCB1c2VzIGEgdGVtcGxhdGUsIGFuZCBpcyB0aHVzIHZlcnkgcG93ZXJmdWwsCiAgIGV2ZW4gaWYgaXQncyBzaW1wbGUuCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCmlmICghaXNzZXQoJGdDbXMpKSBleGl0OwoKI0F2b2lkIGZsb2F0IHByb2JsZW0gaW4gbG9jYWxlCiRjdXJyZW50TG9jYWxlID0gc2V0bG9jYWxlKExDX0FMTCwgMCk7CnNldGxvY2FsZShMQ19BTEwsICdlbl9VUycpOwoKCmlmKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdhcGlrZXknKSA9PSAnJykKewogICR0aGlzLT5zbWFydHktPmFzc2lnbignZXJyb3InLCAkdGhpcy0+TGFuZygnbm9rZXknKSk7CiAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZScsICR0aGlzLT5MYW5nKCdlcnJvcicpKTsKICBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2Vycm9yLnRwbCcpOwogIHJldHVybjsKfQoKJHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gIi4gY21zX2RiX3ByZWZpeCgpIC4ibW9kdWxlX2dvb2dsZW1hcHNfbWFwcyBXSEVSRSBuYW1lIExJS0UgJyIuICRwYXJhbXNbJ21hcCddLiAiJyBMSU1JVCAxIjsKJG1hcF9kYXRhID0gYXJyYXkoKTsKJGRicmVzdWx0ID0mICRkYi0+RXhlY3V0ZSgkcXVlcnkpOwppZigkZGJyZXN1bHQpIHsKICAkbWFwX2RhdGEgPSAkZGJyZXN1bHQtPkZldGNoUm93KCk7Cn0KCmlmKCFpc3NldCgkbWFwX2RhdGFbJ21hcF9pZCddKSkgewogICR0aGlzLT5zbWFydHktPmFzc2lnbignZXJyb3InLCAkdGhpcy0+TGFuZygnbm9tYXAnKSk7CiAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZScsICR0aGlzLT5MYW5nKCdlcnJvcicpKTsKICBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2Vycm9yLnRwbCcpOwogIHJldHVybjsKfQoKLy8gTm93IHRoYXQgYSBjaGVjayBpcyBkb25lIGlmIGFsbCBzZWVtcyBvaywgaGFuZGxlIHRoZSBvdmVycmlkZXMgdGhhdCBhcmUgcGFzc2VkCmlmIChpc3NldCgkcGFyYW1zWyd3aWR0aCddKSkgJG1hcF9kYXRhWyd3aWR0aCddID0gJHBhcmFtc1snd2lkdGgnXTsKaWYgKGlzc2V0KCRwYXJhbXNbJ2hlaWdodCddKSkgJG1hcF9kYXRhWydoZWlnaHQnXSA9ICRwYXJhbXNbJ2hlaWdodCddOwppZiAoaXNzZXQoJHBhcmFtc1snY29udHJvbHMnXSkpIHsJLy8gVHJpZWQgdG8gdXNlIGludHZhbCgkcGFyYW1zWydjb250cm9scyddKSwgYnV0IHNtYXJ0eSBzdGlsbCBmZWxsIG92ZXIgdGhhdAoJJHBhcmFtc1snY29udHJvbHMnXSA9PSAnMScgPyAkbWFwX2RhdGFbJ2NvbnRyb2xzJ10gPSAxIDogJG1hcF9kYXRhWydjb250cm9scyddID0gMDsKfQppZiAoaXNzZXQoJHBhcmFtc1sndHlwZV9jb250cm9scyddKSkgewoJJHBhcmFtc1sndHlwZV9jb250cm9scyddID09ICcxJyA/ICRtYXBfZGF0YVsndHlwZV9jb250cm9scyddID0gMSA6ICRtYXBfZGF0YVsndHlwZV9jb250cm9scyddID0gMDsKfQppZiAoaXNzZXQoJHBhcmFtc1snem9vbSddKSkgJG1hcF9kYXRhWyd6b29tJ10gPSAkcGFyYW1zWyd6b29tJ107CmlmIChpc3NldCgkcGFyYW1zWydjb250cm9sc19zaXplJ10pKSAkbWFwX2RhdGFbJ2NvbnRyb2xzX3NpemUnXSA9ICRwYXJhbXNbJ2NvbnRyb2xzX3NpemUnXTsKaWYgKGlzc2V0KCRwYXJhbXNbJ3R5cGUnXSkpICRtYXBfZGF0YVsndHlwZSddID0gJHBhcmFtc1sndHlwZSddOwppZiAoaXNzZXQoJHBhcmFtc1snc2lkZWJhciddKSkgewoJJHBhcmFtc1snc2lkZWJhciddID09ICcxJyA/ICRtYXBfZGF0YVsnc2lkZWJhciddID0gMSA6ICRtYXBfZGF0YVsnc2lkZWJhciddID0gMDsKfQppZiAoaXNzZXQoJHBhcmFtc1snZGlyZWN0aW9ucyddKSkgewoJJHBhcmFtc1snZGlyZWN0aW9ucyddID09ICcxJyA/ICRtYXBfZGF0YVsnZGlyZWN0aW9ucyddID0gMSA6ICRtYXBfZGF0YVsnZGlyZWN0aW9ucyddID0gMDsKfQppZiAoaXNzZXQoJHBhcmFtc1snem9vbV9lbmNvbXBhc3MnXSkpIHsKCSRwYXJhbXNbJ3pvb21fZW5jb21wYXNzJ10gPT0gJzEnID8gJG1hcF9kYXRhWyd6b29tX2VuY29tcGFzcyddID0gMSA6ICRtYXBfZGF0YVsnem9vbV9lbmNvbXBhc3MnXSA9IDA7Cn0KaWYgKGlzc2V0KCRwYXJhbXNbJ2JvdW5kc19mdWRnZSddKSkgJG1hcF9kYXRhWydib3VuZHNfZnVkZ2UnXSA9ICRwYXJhbXNbJ2JvdW5kc19mdWRnZSddOwppZiAoaXNzZXQoJHBhcmFtc1snaW5mb193aW5kb3cnXSkpIHsKCSRwYXJhbXNbJ2luZm9fd2luZG93J10gPT0gJzEnID8gJG1hcF9kYXRhWydpbmZvX3dpbmRvdyddID0gMSA6ICRtYXBfZGF0YVsnaW5mb193aW5kb3cnXSA9IDA7Cn0KaWYgKGlzc2V0KCRwYXJhbXNbJ2NlbnRlcmxvbiddKSkgJG1hcF9kYXRhWydjZW50ZXJfbG9uJ10gPSAkcGFyYW1zWydjZW50ZXJsb24nXTsKaWYgKGlzc2V0KCRwYXJhbXNbJ2NlbnRlcmxhdCddKSkgJG1hcF9kYXRhWydjZW50ZXJfbGF0J10gPSAkcGFyYW1zWydjZW50ZXJsYXQnXTsKaWYgKGlzc2V0KCRwYXJhbXNbJ2luZm9fdHJpZ2dlciddKSkgJG1hcF9kYXRhWydpbmZvX3RyaWdnZXInXSA9ICRwYXJhbXNbJ2luZm9fdHJpZ2dlciddOwoJCnJlcXVpcmVfb25jZSgnbGliL0dvb2dsZU1hcEFQSS0nLiR0aGlzLT5fZ29vZ2xlYXBpX3ZlcnNpb24uJy9Hb29nbGVNYXBBUEkuY2xhc3MucGhwJyk7CiRtYXAgPSBuZXcgR29vZ2xlTWFwQVBJKCRtYXBfZGF0YVsnbWFwX2lkJ10sICR0aGlzLT5HZXRQcmVmZXJlbmNlKCd5YWhvb2FwcGlkJywgJzEyMzQnKSk7CgovLyBzZXQgdmFsdWVzIGZvciBkaXNwbGF5aW5nCiRtYXAtPnNldEFQSUtleSgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnYXBpa2V5JywxKSk7CiRtYXAtPnNldExvb2t1cFNlcnZpY2UoICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdsb29rdXBzZXJ2aWNlJywgJ0dPT0dMRScpICk7CgokbWFwLT5zZXRXaWR0aCgkbWFwX2RhdGFbJ3dpZHRoJ10pOwokbWFwLT5zZXRIZWlnaHQoJG1hcF9kYXRhWydoZWlnaHQnXSk7CgppZiAoJG1hcF9kYXRhWydjb250cm9scyddID09IDApIHsKICAkbWFwLT5kaXNhYmxlTWFwQ29udHJvbHMoKTsKfQppZiAoJG1hcF9kYXRhWyd0eXBlX2NvbnRyb2xzJ10gPT0gMCkgewogICRtYXAtPmRpc2FibGVUeXBlQ29udHJvbHMoJG1hcF9kYXRhWyd0eXBlX2NvbnRyb2xzJ10pOwp9CgokbWFwLT5zZXRab29tTGV2ZWwoJG1hcF9kYXRhWyd6b29tJ10pOwokbWFwLT5zZXRDb250cm9sU2l6ZSgkbWFwX2RhdGFbJ2NvbnRyb2xzX3NpemUnXSk7CgokbWFwLT5zZXRNYXBUeXBlKCRtYXBfZGF0YVsndHlwZSddKTsKCmlmICgkbWFwX2RhdGFbJ3NpZGViYXInXSA9PSAwKSB7CiAgJG1hcC0+ZGlzYWJsZVNpZGViYXIoKTsKfQoKaWYgKCRtYXBfZGF0YVsnZGlyZWN0aW9ucyddID09IDApIHsKICAkbWFwLT5kaXNhYmxlRGlyZWN0aW9ucygpOwp9CgppZigkbWFwX2RhdGFbJ3pvb21fZW5jb21wYXNzJ10gPT0gMCkgewogICRtYXAtPmRpc2FibGVab29tRW5jb21wYXNzKCk7Cn0KCiRtYXAtPnNldEJvdW5kc0Z1ZGdlKCRtYXBfZGF0YVsnYm91bmRzX2Z1ZGdlJ10pOwoKaWYoJG1hcF9kYXRhWydpbmZvX3dpbmRvdyddID09IDApIHsKICAkbWFwLT5kaXNhYmxlSW5mb1dpbmRvdygpOwp9CgokbWFwLT5zZXRJbmZvV2luZG93VHJpZ2dlcigkbWFwX2RhdGFbJ2luZm9fdHJpZ2dlciddKTsKCi8vIGdldCBtYXJrZXJzIGZvciB0aGlzIG1hcAokcXVlcnkgPSAiU0VMRUNUICogRlJPTSAiLiBjbXNfZGJfcHJlZml4KCkgLiJtb2R1bGVfZ29vZ2xlbWFwc19tYXJrZXJzIFdIRVJFIG1hcCA9ICciLiAkbWFwX2RhdGFbJ21hcF9pZCddIC4iJyI7CiRkYnJlc3VsdCA9JiAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsKCiRlcnJvciA9ICcnOwp3aGlsZSAoJGRicmVzdWx0ICYmICRtYXBfbWFya2VyID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKSB7CiAgCiAgJGxhdCA9ICcnOwogICRsb24gPSAnJzsKICAKICBpZigkbWFwX21hcmtlclsnbGF0J10gPT0gJycgJiYgJG1hcF9tYXJrZXJbJ2xhdCddID09ICcnKSB7CiAgICAvL2ZpbmQgYWRkcmVzcwogICAgJGdlb2NvZGUgPSAnJzsKICAgIGlmKCRtYXBfbWFya2VyWydhZGRyZXNzJ10gIT0gJycpIHsKICAgICAgJGdlb2NvZGUgPSAkbWFwLT5nZXRHZW9jb2RlKCRtYXBfbWFya2VyWydhZGRyZXNzJ10pOwogICAgfQogICAgJGxhdCA9ICRnZW9jb2RlWydsYXQnXTsKICAgICRsb24gPSAkZ2VvY29kZVsnbG9uJ107CiAgfSBlbHNlIHsKICAgIC8vIHVzZSBwcm92aWRlZCBsYXQgbG9uCiAgICAkbGF0ID0gJG1hcF9tYXJrZXJbJ2xhdCddOwogICAgJGxvbiA9ICRtYXBfbWFya2VyWydsb24nXTsKICB9CiAgCiAgaWYoJGxhdCAhPSAnJyAmJiAkbG9uICE9ICcnKSB7CiAgICAkbWFwLT5hZGRNYXJrZXJCeUNvb3JkcygKCQkJICAgIHN0cl9yZXBsYWNlKCcsJywgJy4nLCAkbG9uKSwgCgkJCSAgICBzdHJfcmVwbGFjZSgnLCcsICcuJywgJGxhdCksIAoJCQkgICAgJG1hcF9tYXJrZXJbJ25hbWUnXSwgCgkJCSAgICAkbWFwX21hcmtlclsnaW5mbyddCgkJCSAgICApOwoJLy8gQWRkIHRoZSBjb3JyZWN0IGljb24KCSRjb25maWcgPSAkZ0Ntcy0+R2V0Q29uZmlnKCk7CgkkbWFya2VyZGlyID0gJHRoaXMtPmNvbmZpZ1sncm9vdF91cmwnXS5ESVJFQ1RPUllfU0VQQVJBVE9SLidtb2R1bGVzJy4KCQlESVJFQ1RPUllfU0VQQVJBVE9SLiR0aGlzLT5nZXROYW1lKCkuCgkJRElSRUNUT1JZX1NFUEFSQVRPUi4naW1hZ2VzJy5ESVJFQ1RPUllfU0VQQVJBVE9SOwoJaWYgKCRtYXBfbWFya2VyWydpY29uJ10gIT0gJycpIHsKIAkJLy8gUHJlcGFyZSB0aGUgdXJsIHRvIHRoZSBtYXJrZXIKICAJCSRpY29udG91c2UgPSAkbWFya2VyZGlyLidtYXJrZXJzJy5ESVJFQ1RPUllfU0VQQVJBVE9SLiRtYXBfbWFya2VyWydpY29uJ107Cgl9IGVsc2UgewogIAkJJGljb250b3VzZSA9ICRtYXJrZXJkaXIuJ21hcmtlcnMnLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ2RlZmF1bHQucG5nJzsKCX0KCS8vIE5vdyBjaGVjayBpZiBhIHNoYWRvdyBpcyB0byBiZSBpbmNsdWRlZAoJaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCd1c2VtYXJrZXJzaGFkb3dzJywgMCkgPT0gMCkgewoJCSRtYXAtPmFkZE1hcmtlckljb24oJGljb250b3VzZSk7Cgl9IGVsc2UgewoJCS8vIEJ1aWxkIHRoZSBuYW1lIG9mIHRoZSBzaGFkb3cgaWNvbi4gU3BsaXQgbmFtZSBpbiBmaXJzdCBwYXJ0IGFuZCBleHRlbnNpb24KCQkkZmlsZW5hbWVzcGxpdCA9IGFycmF5KCk7CgkJJGZpbGVuYW1lc3BsaXQgPSBzdHJ0b2soJG1hcF9tYXJrZXJbJ2ljb24nXSwgJy4nKTsKCQkkc2hhZG93dG91c2UgPSAkbWFya2VyZGlyLidtYXJrZXJzaGFkb3dzJy5ESVJFQ1RPUllfU0VQQVJBVE9SLiRmaWxlbmFtZXNwbGl0LidzLnBuZyc7CiAgCQkvLyBDaGVjayBpZiB0aGUgc2hhZG93IGljb24gZXhpc3RzCiAgCQlpZiAoIWZpbGVfZXhpc3RzKCRzaGFkb3d0b3VzZSkpIHsKCQkJJHNoYWRvd3RvdXNlID0gJG1hcmtlcmRpci4nbWFya2Vyc2hhZG93cycuRElSRUNUT1JZX1NFUEFSQVRPUi4nZGVmYXVsdHMucG5nJzsKCQl9CgkJJG1hcC0+YWRkTWFya2VySWNvbigkaWNvbnRvdXNlLCAkc2hhZG93dG91c2UpOwoJfQogIH0gCn0KCgoKLy8gY2VudGVyIHRoZSBtYXAgaWYgY2VudGVyIGNvb3JkaW5hdGVzIGFyZSBzZXQhCmlmICggJG1hcF9kYXRhWydjZW50ZXJfbGF0J10gJiYgJG1hcF9kYXRhWydjZW50ZXJfbG9uJ10gKSB7CiAgJG1hcC0+c2V0Q2VudGVyQ29vcmRzKAoJCQlzdHJfcmVwbGFjZSgnLCcsICcuJywgJG1hcF9kYXRhWydjZW50ZXJfbG9uJ10pLCAKCQkJc3RyX3JlcGxhY2UoJywnLCAnLicsICRtYXBfZGF0YVsnY2VudGVyX2xhdCddKQoJCQkpOwp9CgojJG1hcC0+ZGlzYWJsZU9uTG9hZCgpOwoKLy8gYXNzaWduIFNtYXJ0eSB2YXJpYWJsZXM7CiR0aGlzLT5zbWFydHktPmFzc2lnbignZ29vZ2xlX21hcF9oZWFkZXInLCRtYXAtPmdldEhlYWRlckpTKCkpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2dvb2dsZV9tYXBfanMnLCRtYXAtPmdldE1hcEpTKCkpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2dvb2dsZV9tYXBfc2lkZWJhcicsJG1hcC0+Z2V0U2lkZWJhcigpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdnb29nbGVfbWFwJywkbWFwLT5nZXRNYXAoKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignbWFwX2Rlc2NyaXB0aW9uJywgJG1hcF9kYXRhWydkZXNjcmlwdGlvbiddKTsKCi8vIERpc3BsYXkgdGhlIHBvcHVsYXRlZCB0ZW1wbGF0ZQplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ21hcC50cGwnKTsKCiNTZXQgYmFjayBsb2NhbGUgYWdhaW4Kc2V0bG9jYWxlKExDX0FMTCwgJGN1cnJlbnRMb2NhbGUpOwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgokdGhpcy0+QWRtaW5TdHlsZSgnaDMge2NvbG9yOnJlZH0nKTsKCi8vIFRhYnMKaWYgKEZBTFNFID09IGVtcHR5KCRwYXJhbXNbJ2FjdGl2ZV90YWInXSkpCnsKICAkdGFiID0gJHBhcmFtc1snYWN0aXZlX3RhYiddOwp9IGVsc2UgewogICR0YWIgPSAnJzsKfQoKaWYgKCR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1VzZSBHb29nbGVNYXBzJykpCnsKCiAgaWYgKGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdF9nZW5lcmFsJ10pKQogICAgewogICAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgiYXBpa2V5IiwgaXNzZXQoJHBhcmFtc1snYXBpa2V5J10pID8gJHBhcmFtc1snYXBpa2V5J10gOiAnJyApOwogICAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgidXNlY2FjaGUiLCBpc3NldCgkcGFyYW1zWyd1c2VjYWNoZSddKSA/ICcxJyA6ICcwJyApOwogICAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgibG9va3Vwc2VydmljZSIsIGlzc2V0KCRwYXJhbXNbJ2xvb2t1cHNlcnZpY2UnXSkgPyAkcGFyYW1zWydsb29rdXBzZXJ2aWNlJ10gOiAnWUFIT08nKTsKICAgICAgJHRoaXMtPlNldFByZWZlcmVuY2UoInlhaG9vYXBpZCIsIGlzc2V0KCRwYXJhbXNbJ3lhaG9vYXBpZCddKSA/ICRwYXJhbXNbJ3lhaG9vYXBpZCddIDogJGlkKTsKICAgICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ3VzZW1hcmtlcnNoYWRvd3MnLCBpc3NldCgkcGFyYW1zWyd1c2VtYXJrZXJzaGFkb3dzJ10pID8gJzEnIDogJzAnICk7CiAgICAgIGVjaG8gJzxkaXYgY2xhc3M9InBhZ2VtY29udGFpbmVyIj48cCBjbGFzcz0icGFnZW1lc3NhZ2UiPicuJHRoaXMtPkxhbmcoJ3NldHRpbmdzX3NhdmVkJykuJzwvcD48L2Rpdj4nOwogICAgfQoKICBpZiAoaXNzZXQoJHBhcmFtc1snc3VibWl0X2FkZHJlc3NfcXVlcnknXSkpIHsKICAgIHJlcXVpcmVfb25jZSgnbGliL0dvb2dsZU1hcEFQSS0nLiR0aGlzLT5fZ29vZ2xlYXBpX3ZlcnNpb24uJy9Hb29nbGVNYXBBUEkuY2xhc3MucGhwJyk7CiAgICAkcXVlcnlfbWFwID0gbmV3IEdvb2dsZU1hcEFQSSgwLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgneWFob29hcHBpZCcsICcxMjM0JykpOwogICAgJHF1ZXJ5X21hcC0+c2V0TG9va3VwU2VydmljZSggJHRoaXMtPkdldFByZWZlcmVuY2UoJ2xvb2t1cHNlcnZpY2UnLCAnR09PR0xFJykgKTsKICAgICRnZW9jb2RlID0gJHF1ZXJ5X21hcC0+Z2V0R2VvY29kZSgkcGFyYW1zWydhZGRyZXNzJ10pOwogICAgaWYoICRnZW9jb2RlID09PSBmYWxzZSApCiAgICAgIHsKCWVjaG8gJHRoaXMtPlNob3dFcnJvcnMoJHRoaXMtPkxhbmcoJ2VfYmFkYWRkcmVzcycpKTsKICAgICAgfQogICAgZWxzZQogICAgICB7CgllY2hvICR0aGlzLT5TaG93TWVzc2FnZSgkdGhpcy0+TGFuZygnbG9jYXRpb25fZm9yJykuJyA8Yj4nLiAkcGFyYW1zWydhZGRyZXNzJ10gLic8L2I+ICcuICR0aGlzLT5MYW5nKCdpcycpLic6PGJyLz4KICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICA8ZHQ+Jy4kdGhpcy0+TGFuZygndF9sYW4nKS4nOiZuYnNwOycuJGdlb2NvZGVbJ2xhdCddIC4nPC9kdD4KICAgICAgICAgICAgIDxkdD4nLiR0aGlzLT5MYW5nKCd0X2xvbicpLic6Jm5ic3A7Jy4kZ2VvY29kZVsnbG9uJ10gLic8L2RkPgogICAgICAgICAgIDwvZGw+Jyk7CiAgICAgIH0KICB9CgogIC8vdGFicyAgCiAgZWNobyAkdGhpcy0+U3RhcnRUYWJIZWFkZXJzKCk7CiAgZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdtYXBzJywkdGhpcy0+TGFuZygnbWFwcycpLCAoJ21hcHMnID09ICR0YWIpP3RydWU6ZmFsc2UpOwogIGVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignYWRkcmVzcycsJHRoaXMtPkxhbmcoJ3F1ZXJ5X2FkZHJlc3MnKSwgKCdhZGRyZXNzJyA9PSAkdGFiKT90cnVlOmZhbHNlKTsKICBlY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ3NldHRpbmdzJywkdGhpcy0+TGFuZygnc2V0dGluZ3MnKSwgKCdzZXR0aW5ncycgPT0gJHRhYik/dHJ1ZTpmYWxzZSk7CiAgZWNobyAkdGhpcy0+RW5kVGFiSGVhZGVycygpOwogIC8vZW5kIHRhYnMKCiAgLy9UaGUgY29udGVudCBvZiB0aGUgdGFicwogIGVjaG8gJHRoaXMtPlN0YXJ0VGFiQ29udGVudCgpOwogIAogIC8vIG1hcHMgdGFiCiAgZWNobyAkdGhpcy0+U3RhcnRUYWIoJ21hcHMnLCAkcGFyYW1zKTsKCiAgcmVxdWlyZV9vbmNlICggJ2xpYi9yY3J1ZC5pbmMucGhwJyApOwogICRjbyA9IG5ldyByY3J1ZCggJGRiICwgY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfZ29vZ2xlbWFwc19tYXBzJyApOwogIC8vc2V0dGluZ3MgZm9yIHJjcnVkCiAgJGNvLT5oZWFkZXIgPSAiWW91ciBtYXBzIjsKCiAgLy9maWVsZCBzZXR0aW5ncwogICRjby0+ZmllbGRzWydtYXBfaWQnXVsnbGFiZWwnXSA9ICR0aGlzLT5MYW5nKCdtYXBfaWQnKTsKCiAgJGNvLT5maWVsZHNbJ25hbWUnXVsnbGFiZWwnXSA9ICR0aGlzLT5MYW5nKCd0X25hbWUnKTsKCiAgJGNvLT5maWVsZHNbJ293bmVyX2lkJ11bJ3Zpc2libGVfaW5fZWRpdCddID0gZmFsc2U7CgogICRjby0+ZmllbGRzWydjZW50ZXJfbGF0J11bJ2xhYmVsJ10gPSAkdGhpcy0+TGFuZygnY2VudGVyX2xhdCcpOwogICRjby0+ZmllbGRzWydjZW50ZXJfbG9uJ11bJ2xhYmVsJ10gPSAkdGhpcy0+TGFuZygnY2VudGVyX2xvbicpOwogIAogICRjby0+ZmllbGRzWyd0eXBlJ11bJ2ZpZWxkX3R5cGUnXSA9ICJyYWRpb3xtYXB8c2F0ZWxsaXRlfGh5YnJpZCI7CiAgJGNvLT5maWVsZHNbJ3R5cGUnXVsnbGFiZWwnXSA9ICR0aGlzLT5MYW5nKCd0X3R5cGUnKTsKCiAgJGNvLT5maWVsZHNbJ3dpZHRoJ11bJ2xhYmVsJ10gPSAkdGhpcy0+TGFuZygndF93aWR0aCcpOwogICRjby0+ZmllbGRzWydoZWlnaHQnXVsnbGFiZWwnXSA9ICR0aGlzLT5MYW5nKCd0X2hlaWdodCcpOwoKICAkY28tPmZpZWxkc1snY29udHJvbHMnXVsnZmllbGRfdHlwZSddID0gImNoZWNrYm94X29uIjsKICAkY28tPmZpZWxkc1snY29udHJvbHMnXVsnbGFiZWwnXSA9ICR0aGlzLT5MYW5nKCd0X2NvbnRyb2xzJyk7CgogICRjby0+ZmllbGRzWydjb250cm9sc19zaXplJ11bJ2ZpZWxkX3R5cGUnXSA9ICJyYWRpb3xsYXJnZXxzbWFsbCI7CiAgJGNvLT5maWVsZHNbJ2NvbnRyb2xzX3NpemUnXVsnbGFiZWwnXSA9ICR0aGlzLT5MYW5nKCd0X2NvbnRyb2xzX3NpemUnKTsKICAKICAkY28tPmZpZWxkc1sndHlwZV9jb250cm9scyddWydmaWVsZF90eXBlJ10gPSAiY2hlY2tib3hfb24iOwogICRjby0+ZmllbGRzWyd0eXBlX2NvbnRyb2xzJ11bJ2xhYmVsJ10gPSAkdGhpcy0+TGFuZygndF90eXBlX2NvbnRyb2xzJyk7CgogICRjby0+ZmllbGRzWydzaWRlYmFyJ11bJ2ZpZWxkX3R5cGUnXSA9ICJjaGVja2JveF9vbiI7CiAgJGNvLT5maWVsZHNbJ3NpZGViYXInXVsnbGFiZWwnXSA9ICR0aGlzLT5MYW5nKCd0X3NpZGViYXInKTsKCiAgJGNvLT5maWVsZHNbJ2RpcmVjdGlvbnMnXVsnZmllbGRfdHlwZSddID0gImNoZWNrYm94IjsKICAkY28tPmZpZWxkc1snZGlyZWN0aW9ucyddWydsYWJlbCddID0gJHRoaXMtPkxhbmcoJ3RfZGlyZWN0aW9ucycpOwoKICAkY28tPmZpZWxkc1snem9vbSddWydmaWVsZF90eXBlJ10gPSAic2VsZWN0fHJhbmdlfDF8MjAiOwogICRjby0+ZmllbGRzWyd6b29tJ11bJ2xhYmVsJ10gPSAkdGhpcy0+TGFuZygndF96b29tJyk7CgogICRjby0+ZmllbGRzWydkZXNjcmlwdGlvbiddWydmaWVsZF90eXBlJ10gPSAndGV4dGFyZWEnOwogICRjby0+ZmllbGRzWydkZXNjcmlwdGlvbiddWydsYWJlbCddID0gJHRoaXMtPkxhbmcoJ3RfZGVzY3JpcHRpb24nKTsKCiAgJGNvLT5maWVsZHNbJ3pvb21fZW5jb21wYXNzJ11bJ2ZpZWxkX3R5cGUnXSA9ICJjaGVja2JveCI7CiAgJGNvLT5maWVsZHNbJ3pvb21fZW5jb21wYXNzJ11bJ2xhYmVsJ10gPSAkdGhpcy0+TGFuZygndF96b29tX2VuY29tcGFzcycpOwoKICAkY28tPmZpZWxkc1snYm91bmRzX2Z1ZGdlJ11bJ2xhYmVsJ10gPSAkdGhpcy0+TGFuZygndF9ib3VuZHNfZnVkZ2UnKTsKCiAgJGNvLT5maWVsZHNbJ2luZm9fd2luZG93J11bJ2ZpZWxkX3R5cGUnXSA9ICJjaGVja2JveF9vbiI7CiAgJGNvLT5maWVsZHNbJ2luZm9fd2luZG93J11bJ2xhYmVsJ10gPSAkdGhpcy0+TGFuZygndF9pbmZvX3dpbmRvdycpOwoKICAkY28tPmZpZWxkc1snaW5mb190cmlnZ2VyJ11bJ2ZpZWxkX3R5cGUnXSA9ICJyYWRpb3xjbGlja3xtb3VzZW92ZXIiOwogICRjby0+ZmllbGRzWydpbmZvX3RyaWdnZXInXVsnbGFiZWwnXSA9ICR0aGlzLT5MYW5nKCd0X2luZm9fdHJpZ2dlcicpOwoKICAvL2xpc3QgdmlzaWJpbGl0eSAKICAkY28tPmZpZWxkc1snbWFwX2lkJ11bJ3Zpc2libGVfaW5fbGlzdCddID0gZmFsc2U7CiAgJGNvLT5maWVsZHNbJ293bmVyX2lkJ11bJ3Zpc2libGVfaW5fbGlzdCddID0gZmFsc2U7CiAgJGNvLT5maWVsZHNbJ2Rlc2NyaXB0aW9uJ11bJ3Zpc2libGVfaW5fbGlzdCddID0gZmFsc2U7CiAgJGNvLT5maWVsZHNbJ3dpZHRoJ11bJ3Zpc2libGVfaW5fbGlzdCddID0gZmFsc2U7CiAgJGNvLT5maWVsZHNbJ2hlaWdodCddWyd2aXNpYmxlX2luX2xpc3QnXSA9IGZhbHNlOwogICRjby0+ZmllbGRzWyd3aWR0aCddWyd2aXNpYmxlX2luX2xpc3QnXSA9IGZhbHNlOwogICRjby0+ZmllbGRzWydjb250cm9scyddWyd2aXNpYmxlX2luX2xpc3QnXSA9IGZhbHNlOwogICRjby0+ZmllbGRzWyd0eXBlX2NvbnRyb2xzJ11bJ3Zpc2libGVfaW5fbGlzdCddID0gZmFsc2U7CiAgJGNvLT5maWVsZHNbJ2NvbnRyb2xzX3NpemUnXVsndmlzaWJsZV9pbl9saXN0J10gPSBmYWxzZTsKICAkY28tPmZpZWxkc1snc2lkZWJhciddWyd2aXNpYmxlX2luX2xpc3QnXSA9IGZhbHNlOwogICRjby0+ZmllbGRzWydkaXJlY3Rpb25zJ11bJ3Zpc2libGVfaW5fbGlzdCddID0gZmFsc2U7CiAgJGNvLT5maWVsZHNbJ3pvb20nXVsndmlzaWJsZV9pbl9saXN0J10gPSBmYWxzZTsKICAkY28tPmZpZWxkc1snem9vbV9lbmNvbXBhc3MnXVsndmlzaWJsZV9pbl9saXN0J10gPSBmYWxzZTsKICAkY28tPmZpZWxkc1snYm91bmRzX2Z1ZGdlJ11bJ3Zpc2libGVfaW5fbGlzdCddID0gZmFsc2U7CiAgJGNvLT5maWVsZHNbJ2luZm9fd2luZG93J11bJ3Zpc2libGVfaW5fbGlzdCddID0gZmFsc2U7CiAgJGNvLT5maWVsZHNbJ2luZm9fdHJpZ2dlciddWyd2aXNpYmxlX2luX2xpc3QnXSA9IGZhbHNlOwoKCiAgLy9wcmludCBpdCEKICAkY28tPmdvKCk7CgogIC8vbWFya2VycyBjcnVkCiAgJGNtID0gbmV3IHJjcnVkKCAkZGIgLCBjbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9nb29nbGVtYXBzX21hcmtlcnMnICk7CiAgJGNtLT5oZWFkZXIgPSAiWW91ciBNYXJrZXJzIjsKCiAgLy9zZXR0aW5ncwogICRjbS0+ZmllbGRzWydtYXAnXVsnZmllbGRfdHlwZSddID0gJ3NlbGVjdHx0YWJsZXwnIC4gY21zX2RiX3ByZWZpeCgpIC4gJ21vZHVsZV9nb29nbGVtYXBzX21hcHN8bWFwX2lkfG5hbWUnOwoKICAvL2xhbmcgc2V0dGluZ3MKICAkY20tPmZpZWxkc1snbmFtZSddWydsYWJlbCddID0gJHRoaXMtPkxhbmcoJ3RfbmFtZScpOwogICRjbS0+ZmllbGRzWydtYXAnXVsnbGFiZWwnXSA9ICR0aGlzLT5MYW5nKCd0X2JlbG9uZ3NfdG8nKTsKICAkY20tPmZpZWxkc1snaW5mbyddWydsYWJlbCddID0gJHRoaXMtPkxhbmcoJ3RfaW5mbycpOwogICRjbS0+ZmllbGRzWydhZGRyZXNzJ11bJ2xhYmVsJ10gPSAkdGhpcy0+TGFuZygndF9hZGRyZXNzJyk7CiAgJGNtLT5maWVsZHNbJ2xhdCddWydsYWJlbCddID0gJHRoaXMtPkxhbmcoJ3RfbGFuJyk7CiAgJGNtLT5maWVsZHNbJ2xvbiddWydsYWJlbCddID0gJHRoaXMtPkxhbmcoJ3RfbG9uJyk7CiAgJGNtLT5maWVsZHNbJ2ljb24nXVsnbGFiZWwnXSA9ICR0aGlzLT5MYW5nKCd0X2ljb24nKTsKCiAgJGNtLT5maWVsZHNbJ2luZm8nXVsnZmllbGRfdHlwZSddID0gJ3RleHRhcmVhJzsKCgogIC8vdmlzaWJpbGl0eV9zZXR0aW5ncwogIC8vbGlzdAogICRjbS0+ZmllbGRzWydtYXJrZXJfaWQnXVsndmlzaWJsZV9pbl9saXN0J10gPSBmYWxzZTsKICAkY20tPmZpZWxkc1snaW5mbyddWyd2aXNpYmxlX2luX2xpc3QnXSA9IGZhbHNlOwoKICAkY29uZmlnID0gJGdDbXMtPkdldENvbmZpZygpOwogIC8vIFJlYWQgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW4gdGhlIGltYWdlcyBvZiB0aGUgbWFya2VycwogICRwYXRoID0gJHRoaXMtPmNvbmZpZ1sndXBsb2Fkc19wYXRoJ10uJy8nLiR0aGlzLT5nZXROYW1lKCkuJy9tYXJrZXJzJzsKICAkY20tPnNldFBhdGgoJHBhdGgsICR0aGlzLT5MYW5nKCdwYXRoZXJyb3InKSwgJHRoaXMtPkxhbmcoJ21hcmtlcmVycm9yJykpOwoKICAkY20tPmdvKCk7CiAgCgogIGVjaG8gJHRoaXMtPkVuZFRhYigpOwogIC8vZW5kIG1hcHMgdGFiCgogIC8vc3RhcnQgYWRkcmVzcyB0YWIKICBlY2hvICR0aGlzLT5TdGFydFRhYignYWRkcmVzcycsICRwYXJhbXMpOwogIGVjaG8gJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICdkZWZhdWx0YWRtaW4nKTsKICBlY2hvICR0aGlzLT5DcmVhdGVGaWVsZHNldFN0YXJ0KCRpZCwgJ0FkZHJlc3MgcXVlcmllcycsICdBZGRyZXNzIHF1ZXJpZXMnICk7CiAgZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0V2l0aExhYmVsKCRpZCwgJ2FkZHJlc3MnLCAnJywgMTAwLCAxMDI0LCAgJycsICR0aGlzLT5MYW5nKCdhZGRyZXNzX2xvb2t1cCcpLic6Jm5ic3A7JyApOwogIGVjaG8gJHRoaXMtPkNyZWF0ZUZpZWxkc2V0RW5kKCk7CiAgZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCAnbW9kdWxlJywgJ2dvb2dsZW1hcHMnKTsKICBlY2hvICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXRfYWRkcmVzc19xdWVyeScsICR0aGlzLT5MYW5nKCdTdWJtaXQnKSk7CiAgZWNobyAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpOwoKICBlY2hvICR0aGlzLT5FbmRUYWIoKTsKICAvL2VuZCBhZGRyZXNzIHRhYgoKICAvL1NldHRpbmdzIHRhYgogIGVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdzZXR0aW5ncycsICRwYXJhbXMpOwoKICBlY2hvICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAnZGVmYXVsdGFkbWluJyk7CiAgZWNobyAkdGhpcy0+Q3JlYXRlRmllbGRzZXRTdGFydCgkaWQsICdnZW5lcmFsJywgJ0dlbmVyYWwgc2V0dGluZ3MnICk7CiAgZWNobyAnPHA+JzsKICBlY2hvICR0aGlzLT5DcmVhdGVJbnB1dFRleHRXaXRoTGFiZWwoJGlkLCAnYXBpa2V5JywgJHRoaXMtPkdldFByZWZlcmVuY2UoImFwaWtleSIsIDEpICwgMTAwLCAxMDI0LCAnJywgJHRoaXMtPkxhbmcoJ2FwaWtleScpICk7CiAgZWNobyAiPC9wPiI7CiAgZWNobyAiPHA+IjsKICBlY2hvICR0aGlzLT5DcmVhdGVMYWJlbEZvcklucHV0KCRpZCwgJ3VzZWNhY2hlJywgJHRoaXMtPkxhbmcoJ3VzZWNhY2hlJykpOwogIGVjaG8gJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCAndXNlY2FjaGUnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgidXNlY2FjaGUiLCAwKSAsICcxJyk7CiAgZWNobyAiPC9wPiI7CiAgZWNobyAnPHA+JzsKICBlY2hvICR0aGlzLT5DcmVhdGVMYWJlbEZvcklucHV0KCRpZCwgJ3VzZW1hcmtlcnNoYWRvd3MnLCAkdGhpcy0+TGFuZygndXNlbWFya2Vyc2hhZG93cycpKTsKICBlY2hvICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwgJ3VzZW1hcmtlcnNoYWRvd3MnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgndXNlbWFya2Vyc2hhZG93cycsIDApICwgJzEnKTsKICBlY2hvICI8L3A+IjsgCgogIGVjaG8gIjxwPiI7IAogIGVjaG8gJHRoaXMtPkNyZWF0ZUxhYmVsRm9ySW5wdXQoJGlkLCAnbG9va3Vwc2VydmljZScsICR0aGlzLT5MYW5nKCdsb29rdXBzZXJ2aWNlJykpOwogICRsb29rdXBzZXJ2aWNlcyA9IGFycmF5KCk7CiAgJGxvb2t1cHNlcnZpY2VzWyJZQUhPTyJdID0gIllBSE9PIjsKICAkbG9va3Vwc2VydmljZXNbIkdPT0dMRSJdID0gIkdPT0dMRSI7CiAgZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsICdsb29rdXBzZXJ2aWNlJywgJGxvb2t1cHNlcnZpY2VzLCAtMSwgJHRoaXMtPkdldFByZWZlcmVuY2UoImxvb2t1cHNlcnZpY2UiKSk7CiAgZWNobyAiPC9wPiI7IAoKICBlY2hvICI8cD4iOyAKICBlY2hvICR0aGlzLT5DcmVhdGVJbnB1dFRleHRXaXRoTGFiZWwoJGlkLCAneWFob29hcGlkJywgJHRoaXMtPkdldFByZWZlcmVuY2UoInlhaG9vYXBpZCIsICcnKSAsIDEwMCwgMTAyNCwgJycsICR0aGlzLT5MYW5nKCd5YWhvb2FwcGlkJykgKTsKICBlY2hvICI8L3A+IjsgCiAgZWNobyAkdGhpcy0+Q3JlYXRlRmllbGRzZXRFbmQoKTsKCiAgZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnc3VibWl0X2dlbmVyYWwnLCAkdGhpcy0+TGFuZygnU3VibWl0JykpOwogIGVjaG8gJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKTsKCiAgZWNobyAkdGhpcy0+RW5kVGFiKCk7CiAgLy9FTkQgU2V0dGluZ3MgdGFiCgogIGVjaG8gJHRoaXMtPkVuZFRhYkNvbnRlbnQoKTsgIAp9ICAKPz4K]]></data>
	</file>
	<file>
	  <filename>/GoogleMaps.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IEdvb2dsZU1hcHMgLSBNb2R1bGUgZm9yIEdvb2dsZU1hcHMKIyBWZXJzaW9uOiAwLjEsIHRzdwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9za2VsZXRvbi8KIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKY2xhc3MgR29vZ2xlTWFwcyBleHRlbmRzIENNU01vZHVsZQp7Cgl2YXIgJF9nb29nbGVhcGlfdmVyc2lvbiA9ICIyLjAiOwoKCWZ1bmN0aW9uIEdldE5hbWUoKQoJewoJCXJldHVybiAnR29vZ2xlTWFwcyc7Cgl9CglmdW5jdGlvbiBHZXRGcmllbmRseU5hbWUoKQoJewoJCXJldHVybiAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyk7Cgl9CglmdW5jdGlvbiBHZXRWZXJzaW9uKCkKCXsKCQlyZXR1cm4gJzAuMS42JzsKCX0KCWZ1bmN0aW9uIEdldEhlbHAoKQoJewoJCXJldHVybiAkdGhpcy0+TGFuZygnaGVscCcpOwoJfQoJZnVuY3Rpb24gR2V0QXV0aG9yKCkKCXsKCQlyZXR1cm4gJ3Rzdyc7Cgl9CglmdW5jdGlvbiBHZXRBdXRob3JFbWFpbCgpCgl7CgkJcmV0dXJuICd0YXR1Lndpa21hbiBbYXRdIGdtYWlsLmNvbSc7Cgl9CglmdW5jdGlvbiBHZXRDaGFuZ2VMb2coKQoJewoJCXJldHVybiAkdGhpcy0+TGFuZygnY2hhbmdlbG9nJyk7Cgl9CglmdW5jdGlvbiBJc1BsdWdpbk1vZHVsZSgpCgl7CgkJcmV0dXJuIHRydWU7Cgl9CglmdW5jdGlvbiBIYXNBZG1pbigpCgl7CgkJcmV0dXJuIHRydWU7Cgl9CiAgLyoJZnVuY3Rpb24gR2V0QWRtaW5TZWN0aW9uKCkKCXsKCQlyZXR1cm4gJ0V4dGVuc2lvbnMnOwoJfSovCglmdW5jdGlvbiBHZXRBZG1pbkRlc2NyaXB0aW9uKCkKCXsKCQlyZXR1cm4gJHRoaXMtPkxhbmcoJ21vZGRlc2NyaXB0aW9uJyk7Cgl9CgoJZnVuY3Rpb24gVmlzaWJsZVRvQWRtaW5Vc2VyKCkKCXsKCSAgcmV0dXJuICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1VzZSBHb29nbGVNYXBzJyk7Cgl9CgoJZnVuY3Rpb24gR2V0RGVwZW5kZW5jaWVzKCkKCXsKCQlyZXR1cm4gYXJyYXkoKTsKCX0KCglmdW5jdGlvbiBNaW5pbXVtQ01TVmVyc2lvbigpCgl7CgkJcmV0dXJuICIxLjAtYmV0YTYiOwoJfQoJCgkKCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkgICBTZXRQYXJhbWV0ZXJzKCkKCSAgIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyB5b3UgdG8gY3JlYXRlIG1hcHBpbmdzIGZvcgoJICAgeW91ciBtb2R1bGUgd2hlbiB1c2luZyAiUHJldHR5IFVybHMiLgoJICAgCgkgICBUeXBpY2FsbHksIG1vZHVsZXMgY3JlYXRlIGludGVybmFsIGxpbmtzIHRoYXQgaGF2ZQoJICAgYmlnIHVnbHkgc3RyaW5ncyBhbG9uZyB0aGUgbGluZXMgb2Y6CgkgICBpbmRleC5waHA/bWFjdD1Nb2ROYW1lLGNudG50MDEsYWN0aW9uTmFtZSwwJmNudG50MDFwYXJhbTE9MSZjbnRudDAxcGFyYW0yPTImY250bnQwMXJldHVybmlkPTMKCSAgIAoJICAgWW91IG1pZ2h0IHByZWZlciB0aGVzZSB0byBsb29rIGxpa2U6CgkgICAvTW9kdWxlRnVuY3Rpb24vMi8zCgkgICAKCSAgIFRvIGRvIHRoaXMsIHlvdSBoYXZlIHRvIHJlZ2lzdGVyIHJvdXRlcyBhbmQgbWFwCgkgICB5b3VyIHBhcmFtZXRlcnMgaW4gYSB3YXkgdGhhdCB0aGUgQVBJIHdpbGwgYmUgYWJsZQoJICAgdG8gdW5kZXJzdGFuZC4KCgkgICBBbHNvIG5vdGUgdGhhdCBhbnkgY2FsbHMgdG8gQ3JlYXRlTGluayB3aWxsIG5lZWQgdG8KCSAgIGJlIHVwZGF0ZWQgdG8gcGFzcyB0aGUgcHJldHR5IHVybCBwYXJhbWV0ZXIuCgkgICAKCSAgIFNpbmNlIHRoZSBTa2VsZXRvbiBkb2Vzbid0IHJlYWxseSBjcmVhdGUgYW55IGxpbmtzLAoJICAgdGhlIHNlY3Rpb24gYmVsb3cgaXMgY29tbWVudGVkIG91dCwgYnV0IHlvdSBjYW4KCSAgIHVzZSBpdCB0byBmaWd1cmUgb3V0IHByZXR0eSB1cmxzLgoJICAgCgkgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoJZnVuY3Rpb24gU2V0UGFyYW1ldGVycygpCgl7CgkgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ2JvdW5kc19mdWRnZScsICcnLCAkdGhpcy0+bGFuZygnaGVscF9wYXJhbV9ib3VuZHNfZnVkZ2UnKSwgZmFsc2UpOwoJICAkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdjZW50ZXJsYXQnLCAnJywgJHRoaXMtPmxhbmcoJ2hlbHBfcGFyYW1fY2VudGVybGF0JyksIGZhbHNlKTsKCSAgJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignY2VudGVybG9uJywgJycsICR0aGlzLT5sYW5nKCdoZWxwX3BhcmFtX2NlbnRlcmxvbicpLCBmYWxzZSk7CgkgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ2NvbnRyb2xzJywgJycsICR0aGlzLT5sYW5nKCdoZWxwX3BhcmFtX2NvbnRyb2xzJyksIGZhbHNlKTsKCSAgJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignY29udHJvbHNfc2l6ZScsICcnLCAkdGhpcy0+bGFuZygnaGVscF9wYXJhbV9jb250cm9sc19zaXplJyksIGZhbHNlKTsKCSAgJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignZGlyZWN0aW9ucycsICcnLCAkdGhpcy0+bGFuZygnaGVscF9wYXJhbV9kaXJlY3Rpb25zJyksIGZhbHNlKTsKCSAgJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignaGVpZ2h0JywgJycsICR0aGlzLT5sYW5nKCdoZWxwX3BhcmFtX2hlaWdodCcpLCBmYWxzZSk7CgkgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ2luZm9fdHJpZ2dlcicsICcnLCAkdGhpcy0+bGFuZygnaGVscF9wYXJhbV9pbmZvX3RyaWdnZXInKSwgZmFsc2UpOwoJICAkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdpbmZvX3dpbmRvdycsICcnLCAkdGhpcy0+bGFuZygnaGVscF9wYXJhbV9pbmZvX3dpbmRvdycpLCBmYWxzZSk7CgkgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ21hcCcsICd0ZXN0JywgJHRoaXMtPmxhbmcoJ2hlbHBfcGFyYW1fbWFwJyksIGZhbHNlKTsKCSAgJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignc2lkZWJhcicsICcnLCAkdGhpcy0+bGFuZygnaGVscF9wYXJhbV9zaWRlYmFyJyksIGZhbHNlKTsKCSAgJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcigndHlwZScsICcnLCAkdGhpcy0+bGFuZygnaGVscF9wYXJhbV90eXBlJyksIGZhbHNlKTsKCSAgJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcigndHlwZV9jb250cm9scycsICcnLCAkdGhpcy0+bGFuZygnaGVscF9wYXJhbV90eXBlX2NvbnRyb2xzJyksIGZhbHNlKTsKCSAgJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignd2lkdGgnLCAnJywgJHRoaXMtPmxhbmcoJ2hlbHBfcGFyYW1fd2lkdGgnKSwgZmFsc2UpOwoJICAkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCd6b29tJywgJycsICR0aGlzLT5sYW5nKCdoZWxwX3BhcmFtX3pvb20nKSwgZmFsc2UpOwoJICAkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCd6b29tX2VuY29tcGFzcycsICcnLCAkdGhpcy0+bGFuZygnaGVscF9wYXJhbV96b29tX2VuY29tcGFzcycpLCBmYWxzZSk7Cgl9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRFdmVudERlc2NyaXB0aW9uKCkKICAgSWYgeW91ciBtb2R1bGUgY2FuIGNyZWF0ZSBldmVudHMsIHlvdSB3aWxsIG5lZWQKICAgdG8gcHJvdmlkZSB0aGUgQVBJIHdpdGggZG9jdW1lbnRhdGlvbiBvZiB3aGF0CiAgIHRoYXQgZXZlbnQgZG9lcy4gVGhpcyBtZXRob2Qgd3JhcHMgdXAgYSBzaW1wbGUKICAgcmV0dXJuIG9mIHRoZSBsb2NhbGl6ZWQgZGVzY3JpcHRpb24uCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgLyogIGZ1bmN0aW9uIEdldEV2ZW50RGVzY3JpcHRpb24gKCAkZXZlbnRuYW1lICkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2V2ZW50X2luZm9fJy4kZXZlbnRuYW1lICk7CiAgfSovCgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRFdmVudEhlbHAoKQogICBJZiB5b3VyIG1vZHVsZSBjYW4gY3JlYXRlIGV2ZW50cywgeW91IHdpbGwgbmVlZAogICB0byBwcm92aWRlIHRoZSBBUEkgd2l0aCBkb2N1bWVudGF0aW9uIG9mIGhvdyB0bwogICB1c2UgdGhlIGV2ZW50LiBUaGlzIG1ldGhvZCB3cmFwcyB1cCBhIHNpbXBsZQogICByZXR1cm4gb2YgdGhlIGxvY2FsaXplZCBkZXNjcmlwdGlvbi4KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICAvKiAgZnVuY3Rpb24gR2V0RXZlbnRIZWxwICggJGV2ZW50bmFtZSApCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdldmVudF9oZWxwXycuJGV2ZW50bmFtZSApOwogIH0qLwoKCQoKCWZ1bmN0aW9uIEluc3RhbGxQb3N0TWVzc2FnZSgpCgl7CgkJcmV0dXJuICR0aGlzLT5MYW5nKCdwb3N0aW5zdGFsbCcpOwoJfQoJZnVuY3Rpb24gVW5pbnN0YWxsUG9zdE1lc3NhZ2UoKQoJewoJCXJldHVybiAkdGhpcy0+TGFuZygncG9zdHVuaW5zdGFsbCcpOwoJfQoJZnVuY3Rpb24gVW5pbnN0YWxsUHJlTWVzc2FnZSgpCgl7CgkJcmV0dXJuICR0aGlzLT5MYW5nKCdyZWFsbHlfdW5pbnN0YWxsJyk7Cgl9CgkKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJICAgRGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJG1lc3NhZ2UpCgkgICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQoKCSAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBtZXRob2QgdG8gZGlzcGxheQoJICAgZXJyb3IgaW5mb3JtYXRpb24gb24gdGhlIGFkbWluIHNpZGUuCgkgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogICAgZnVuY3Rpb24gRGlzcGxheUVycm9yUGFnZSgkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQsICRtZXNzYWdlPScnKQogICAgewoJCSR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfZXJyb3InLCAkdGhpcy0+TGFuZygnZXJyb3InKSk7CgkJaWYgKCRtZXNzYWdlICE9ICcnKQoJCQl7CgkJCSR0aGlzLT5zbWFydHktPmFzc2lnbl9ieV9yZWYoJ21lc3NhZ2UnLCAkbWVzc2FnZSk7CgkJCX0KCiAgICAgICAgLy8gRGlzcGxheSB0aGUgcG9wdWxhdGVkIHRlbXBsYXRlCiAgICAgICAgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdlcnJvci50cGwnKTsKICAgIH0KCgkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJICAgRGlzcGxheUFkbWluTmF2KCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAkbWVzc2FnZSkKCSAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCgoJICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgc2ltcGxlIG1ldGhvZCB0byBwcmVzZW50IGEKCSAgIGNvbW1vbiBhZG1pbiBtZW51LgoJICAgCSAgIAoJICAgSXQgc2ltcGx5IHNldHMgYSBjb2xsZWN0aW9uIHNtYXJ0eSB0YWcgdmFsdWVzLiAgIAoJICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogICAgZnVuY3Rpb24gRGlzcGxheUFkbWluTmF2KCRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCkKICAgICAgICB7CgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdhZG1pbl9uYXYnLAoJCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nKCd0aXRsZV9tb2RfYWRtaW4nKSwgYXJyYXkoKSkgLgoJCQknIDogJyAuCgkJCSR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2FkbWluX3ByZWZzJywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygndGl0bGVfbW9kX3ByZWZzJyksIGFycmF5KCkpKTsKICAgICAgICB9CgoKCiAgZnVuY3Rpb24gUHJpbnRNYXBXaXRoTWFya2VycygkbWFwbmFtZSwgJG1hcmtlcnMpIHsKICAgIHJlcXVpcmVfb25jZSgnbGliL0dvb2dsZU1hcEFQSS0nLiR0aGlzLT5fZ29vZ2xlYXBpX3ZlcnNpb24uJy9Hb29nbGVNYXBBUEkuY2xhc3MucGhwJyk7CiAgICAkbWFwID0gbmV3IEdvb2dsZU1hcEFQSSgkbWFwbmFtZSwgJHRoaXMtPkdldFByZWZlcmVuY2UoJ3lhaG9vYXBwaWQnLCAnMTIzNCcpKTsKICAgIHdoaWxlICggJG1hcmtlciA9IGFycmF5X3BvcCgkbWFya2VycykgKSB7CiAgICAgICRtYXAtPmFkZE1hcmtlckJ5Q29vcmRzKCRtYXJrZXJbJ2xhdCddLCRtYXJrZXJbJ2xvbiddLCAkbWFya2VyWyduYW1lJ10sICRtYXJrZXJbJ2luZm8nXSk7CiAgICB9CiAgfQogIAogIGZ1bmN0aW9uIEdldEFkZHJlc3NMb2NhdGlvbigkYWRkcmVzcykgewogICAgcmVxdWlyZV9vbmNlKCdsaWIvR29vZ2xlTWFwQVBJLScuJHRoaXMtPl9nb29nbGVhcGlfdmVyc2lvbi4nL0dvb2dsZU1hcEFQSS5jbGFzcy5waHAnKTsKICAgICRtYXAgPSBuZXcgR29vZ2xlTWFwQVBJKCRtYXBuYW1lLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgneWFob29hcHBpZCcsICcxMjM0JykpOwogICAgJGdlb2NvZGUgPSAkbWFwLT5nZXRHZW9jb2RlKCRhZGRyZXNzKTsKICAgIHJldHVybiAkZ2VvY29kZTsKICB9Cgp9Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/images/icon.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhIAAgAPcAAAAAAAQCAQcFAwYHBgcHBwgEAgoGAwoJBgoIBw4IBAsLCg0ODBAJBBIKBRAPCxgOBx4RCBQVExgYFCITCSYWCykXCysYDCwZDDohED4jESIlICotKTA1Ljk+Njw7Oj8+PUElEkgpFEwrFVEuF1UwGFcyGVw0GkE/O2Y6HWk8Hm8/H3ZDIXlFIkZFQ0dGRUZJQ09NSV9dRl5dW15oWWtoXWRjYGdmY3Jxbnp/dIhNJpBSKZNUKpVVKptYLJ1aLaFcLqVeL6phMK1iMbBkMrRnM7hpNLtqNbxrNcNvN8ZxOM92O9F3O9t9Ptx9Ptx+P6+MHbOPHbeSHrORKbaXNLeZOoSUfa6WTLqcQL2iTKm8d6m8eMCZH9GmIdGmItmsIeGyIuq5I+68JPK/JPK/JcytT8GnV+KBQOWCQeeEQumFQuuGQ+2HQ+2IRM/Mf9DGf9XMftrSfeDYe+Xdeurjee/pd/Xvdvr0dP/6c4iTgYucg42ahY+bh5CPipeTjJqYk6GZjaueia+ijqaglqSinaakn6C1laixn6i0mKm7kbCkiLaqhruvhbOnk7avk7armLqvna+qobCuqLKvqr60ormzqb+4q6fMlarNma7Mn6/PnbPQorXRpbfSpr/VrsC1hMW7gsK4p8vBgdDGgMrBsc3FtczEtsjYt9rNqdHJutXNv9Dav+Xegvfzgv/9uc/U1NXOwtTcw9nSxNrTx93Wydjdx93Z0d/b09/f0d7d1+HYweDazuLe1eTf0+Dg0OPg1+Tg1+Xh2Ojj2Ojj2fzvyO3p4fLv6fTx7PXz7vn49QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAIAAgAAAI/wCD8QoWbJcfDwQUtBgEjKDDYMSMHTNWjKAxZMaIBWs1LBisTXgEjPAxZAiPEAokPVzJMpanO3KCCZtBIcmamziLPODDkuCslalezjGlp0ITNkiTIlXyANKkQICiRlUkVeqbO28wHbCJs+tNIRJW2blDtqxZs3X2mFDKNmmGNnXmyJ1LV27ZF0DYEjnCNgcNRo8CCx7sCBBZQAuQ3GSzJgQAACgWrwHioudDl3foBBqgJOmSxwAKnEk65INlh6RCYZ20YUhSJwEeN1CTdEeN0wRHXX0DCkeKriwCGNDRlQQh3MFQfVpdiYGZrmbOdDWC4BdyzHMciYqhom1SMxMiIf8Php3RHVYOhHhnU8LGeIKG7wAKlegPBOlIFw+JcGslrE6ccLKSI3PcsQgqugQjwwpspWGBIb2sxIklFNLy0CiqueGQLQkwoVQPHAjDEoUUmnLZS3Q8dAMLSa1xQSE9kWiJhQ7xAshYD9Xi3FcaXNKTJiSa+NAjBbryEAw6IEVCHpaYQqNDqsj4ZDCgxHHHSoKIwAYaBmBCYoQE+YKLKSQK6JBuVz5UigFOBNGBlA/5komMvQyUnGosnfADClVw0gmFqrA0IYWXmIkZS32gcMEhvfTiZ6AP8XKJjJYIiNkTT0hRxinBUAICAK9ESgsvvdBiIpCUmoLhHWKIAYYXUWCM0QgGAMjy0KR0kkkpJ4zQcccYwALbhRUW1JrLKchqoUUWWVAoIKWWXJIIWa1WKwYZj1EBxRbcdhvFE1NkMSeliCwnh7XWgvEFutbCOgUilDICB1bcchEGu/hay4UU8JJ4o4GnZHFFFOvmm68XUpCIyCKZMUILhVlAYS+66n5RMLpcXEEhIm7cEccUAQEAOw==]]></data>
	</file>
	<file>
	  <filename>/images/markers/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/images/markers/default.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAcCAYAAABoMT8aAAAD8UlEQVQokYVTb0xbVRT/3XdfX0vbRAPKiMaJFUoHGZBaCWkIKsNmMTOyD0YDlWzZ0mH0A8aASAiJH8g0YowGNWqNEbcP2xKC0UysCYH9gWaDMVg7KpZCcGQIC5Xtwejzvl4/0D4o0HmSX97LPb9zzzm/cw8YY8JWjIyM2D0ez9cWi2VaFMV/JUmK2Wy2ycbGxk9DoZB1Ox+cc3DOIcuysaGh4StJFNTDxXv4d7X7ee9xO+89budfvFrID+57hEuSFGtvb/9AURQxGUc451hdXTXW1NT8NDcxXP1D3X5Ys00AAAKAY9Ouzq3gyOkbcNW81u31eo/pdDomqKoqtLW1dczfGK4+f+IZFOwxgxACQgiQ+CZR9uTD+LXBAV/vmfqurq63AYAEAoFCh710vP8th1iQyPx/NhhexpFz03fD4fDTVJKk1tzYrPONssdTsj0IuVlGDIQW9MyYNU9lWe48WmzOznt0Z/bhmSiWZAU5Dxl2+O6tMwxEVlQxHA7n7T1QAvCEXIQAnKOuexx9k3cAAB7nEzj5sjXFvzczA5GrEYvAGBPNenGzRAC3/lnXggGg+8o8Yiyu+QkhMEkUiqJIQnZ29uJc9L42Lg7ApBchCkS7wChR6Kig+TmAueg6cnJyFgSn0znUN3kHhHNg42EgM0NE04GnoKMbmdoP5oESaH7COQbDyygrK7tC+vr6XK8fPvTbREsFTBJNEWpNUSEQAoNOSDm/9tddHPp2jI2OXS8Rqqqq+m0lDv8n/TM7xmXSi8iQaMrZmqLixJkAmt5r+dBms4UI5xzBYLDwWYdj9FTdPsML+VkPfERvng3itjn/gs/ne1Gv1ysCABQVFd38uLPz3Xd6JrGmqBsLlhQssTQcwMXpZZyfuid7vd5jer1eAQBBVVVBVVXB4/F881hBqf/zwdnNcSVGRggBU+No/XkK77e2dlgslkgyjjDGNIX8fn/5S9XPXx5tciLTJG28m0QlPdcX0OGXZwOBQJHBYFhPxgiU0ngS5eXl/vLKKt/3/ltaBUi08dngLJqbmz8ymUxrW2NS5kMpjbe0tJz88tIcVmNM63/gz2UsqsZFt9t9aruomgZJVFZWXsgrKh3pmfhb6//c2G3U19d3G43Gte38lBaSqK2tPf17aGMXYiyOX4JLcLvdP+7G3RzTFoTDYYtBR9Xp9uf42aOl3Gq1/sEYE3bjiqqqCtv7ys3NnbXkF4QuRaKFlyNRuFyv+ABgN+6Og6S5XC7fUCSKoZkoKioqLqbj7aoBpTReXFw8PrW0ipsLMux2+7V0vLQVGAyG9RiLI84Bs9ksp+PtqkHSVu4z7T8dT6SUxtNdEFzYTJyO9x8AWR3pU2l8CAAAAABJRU5ErkJggiAKCg==]]></data>
	</file>
	<file>
	  <filename>/images/markers/m_28_dblue.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAcCAYAAABoMT8aAAAC+0lEQVQokZWUUWhTZxiGn/zn9KRLgzdjseDFQoY1M5BJCCWUEKTUXPdmN7UEVktW2C4KY1VKKXhRplD0pjA2403FCxVEkd2EEtBhCVK3qcmMI3YyGdTeCCHV5vj//XfRnBLTnM6+8MJ/zvd+532/8x0OUkrRypWVlVg2m/0pFAo9N03znWVZjXA4/HRycvJipVLpa9ejtUZrTb1e901MTPwohKkgqmFEw3iTX2r4XFuW1ZidnT1r27bp9Hm01mxsbPiGh4dvLy09HoKTQIDO+Ae4SiYzvJjL5U51dXVJoZQSMzMzc0tLT4bga+Ag4HHhp8AEi4u3MgsLC98CeEql0tFjx2KPpPzGdHduR5UDB27UqtXqZ4ZlWdPLy40B6N/DuZ0f02hUvIcO+f416vX6/Pp6NACffKC7g01Mc1UZtVrtgpRJE/zNggfQezQ69Q1MsyxNKaUJ3mahVbQXPICFbduWCAQC6/B6n/EBXtPb27smBgYGluFpM9Z+WKW/v/+BGB8fvwQPAXsf7i8xzbIcGxu7LAYHBwuJxBdFKPBhK7SBa5w5c/pcOByueLTWlMvlo/F4/OHm5sluOPw/7tdJpfz38vn8Ca/XawuASCTy5/z8/Hdws+nQukbdcv0cv/+vei6XO+X1em0AoZQSSimRzWZ/TiSOFOEuu1fqARRwh+np6blQKLTq9HmklMKRFovFRDI5dB++B3raov9BMFh8USqVIt3d3ZvOXWEYxpbDRCJRTKdTeSi2NWvgLlNTU+d7enretPbs/FAcFgqF4/CRhrMafmhyTAcCgVe1Ws3frt95Bw5TqdS9eDyyAo9b5v+dTCaz6PP53rTr3xvB4cjIyFWoNONLoMzo6OiVTtpdI2itqVarISG6FMxq+Er39fU9k1KKTtpdIyilRDAYfBEOH67AKvCMdDqdB+ikFbhgu2kV+JtkMvmrm840DGOrUyEajT6CX4A1YrHYb2461wTbH4sENH6/v+6aQCnl+hB4u3Ny07mOsI21nZOb7j+g2r1aU9FEigAAAABJRU5ErkJggiAKCg==]]></data>
	</file>
	<file>
	  <filename>/images/markers/m_28_green.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAcCAYAAABoMT8aAAACpElEQVQokZWUQUhUURSGv948npNO4iIGQZBhkGGycCEiMoi0kEeLNq1aJbQRadMsJEJEiMBNMRKYEdEi2kVF7SYNUZIRSsrgVWajhRXlkIL6IOd5n6dFM+M4zhO98MO53P+c89/z3n9RSmnFmJmZae7u7r4bDocXdF3fMgwjG41GP8Xj8aG5ublIKR8RQUSwbbuyp6fnjmZoLucQ7iM8y+E2whnEMIzswMDANcdx9HxeIbmzs3OMCMI0wkoOq0XxCkISoRbp6up6kC+CUkqLx+NDnEBI55L2w7v/RRKJRFxEwLKsRt2vb5Eq6bYfniLV1dVrmUzmuM8wjL5UKBXjAnDkgAhBdiJbUafqfvps276ZuZgJ0sDh1gboE7qrpdPpBuoPmQxQD4uLi2FdKaUTyEk7zKoCx3EMLRgMZlgCJHcgJcAjXoLa2trfWiwWS5EsUlA6MDziSWhtbX1NMpk0qUFYOsRnHEP0Cn3LsqxGHMfR29raprl8gJ9oFeE7Qhjp7++/XvCCZVmN/qP+vzw5QIHzSEdHx+Tm5qZR8IKIMDw8fIl6hB/7SH+OBI4FNubn5xsKZsrbsnCVKx6dlxFOIoODg1d32bl4MzU1FaMa4UsZR95DQqHQV9u2K8u+ByKCUkozTfMFfSXd/yCcQkZGRnqK+btmkMf4+PhpanLTzqt4jASDweX19fXAngKlT5RSSmtpaXnDrd2T7+3tvVGOu0eBiJBIJOKczSX/QqhCZmdnm8pxyxZIp9Nhza+5LCA8QiKRyGellFaOq7muuwehUOhbNBydYwp4CaZpjgKU42pebjVNc5QUkIL29vZXXjzd5/Ntlztoamp6z0PgIzQ3N7/14nkq8Pv9m2SBbQgEAranAtd1PYuwthN68TyvAMCHndCL9w/vEZwQMSw5eAAAAABJRU5ErkJggiAKCg==]]></data>
	</file>
	<file>
	  <filename>/images/markers/m_28_lblue.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAcCAYAAABoMT8aAAAC7ElEQVQokZVUS0gbURQ9ToZxjDG4KCFQCMMQgj9cSBEJErqQwYUbV64MuJHQjVlJERFKwVWJG7UUcdEu/aG7VEG0jRFKqBZGa2O0JVqsQQV1aM34JreLkJjExM+FA3fenHvfmfveGTDGuFxEIpGm3t7ed7Is7/E8fy0IQrKmpua73+8f2dnZcRXyQUQgImiaZvb5fG85QTDQ2UmYnCTMz6cxNkZobydBEJJDQ0OvdF3nM3XZ4ra2tiW4XIT1dcLpaRpnZzf56SkhGCTY7eT1et9nmoAxxvn9/hHU1hJisXTRXdjYINjtFAgE/EQEqKpax4viNcLh/N3uwtwcWa3W80Qi8cQkCMJAWJLc6O4GysoeBklCcmWl/Cljv02apr1J9PTY4HTiUXF5CX5lxeBisZgTDsfjigHA4cD+/r7MM8Z4WCxpaY+Jykroui5wNpstgXgcIEq/SJ/tDXLXcvN4HHa7/Q/ndrvDCAZvFBQOLHctN19dRXNz8xcEg0EF1dWEePzhx7i0RHx5+bWqqnXQdZ1vaWlZR1/f/Zfo7IxwcECQZRocHHyd9YKqqnViRcU/zM7e36Crizwez+rV1ZWQ9QIRYXR09AUcDsLhYWnpCwtkqaq6jEajzqyZMrbMfkp/f/Gdj48J9fU0PDz8Ms/OuQ+hUMgNq5Wwu3vbkRMTJEnST03TzEX/B0QExhinKMpHDAzk735yQmhooPHxcV8uP28GGSwvLz9HdXV62hkVMzNks9mOLy4uLIV8zjCMPHg8nk/PnM4I5uZuLs30NLxe7wez2fy3kH9LAREhEAj40dGRln90RKispM3NzcZi3KINYrGYzImigb09wtQUuVyuH4wxrhiXNwyDKzSaJEm/amR5ZzsUqsPaGhRFWQSAYtxbC5lQFGUR4TAQDqO1tfVzKR5nMplSxdDY2PgN0SiwvY2mpqavpXglFYiieIVkEkilYLFYtFK8ojPIxvl5Ni3F400mU6pkg62tbFqK9x/SYvkb2LkzxAAAAABJRU5ErkJggiAKCg==]]></data>
	</file>
	<file>
	  <filename>/images/markers/m_28_orange.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAcCAYAAABoMT8aAAADXElEQVQokY1Ub2gTZxx+7s31EpMg/sFb2aALt5rGBqKELoRSwixdGH6qH/al1qC1xA79UBGrK6XQD0VlHUPpGG4pY3UyplIU/xJLsP4pQdtNXVKjXKNUxCqIrF5rc77X1w/JNWnNlT7wwO/ufX78nuf3HgdKKSnkyMiINxwOn5AkaZzn+feCIGRcLtfD1tbWn1KplHOxHowxMMagKIq1paXlF4En2lYPWF8D2LnmLH/+FuybDWCCIGQ6Ozu7VFXl9T6OMYbp6WlrfX39+YkHg3V/bAOcIgAAHACGPO5OADtOAcH6UH8kEtlVUlJCiaZppKOjo/v5f4N1l3cDFZ8AHJcluHzNcYDvc+BKCxA91x/q7e3dCwBcIpGorPJuuh/bQ/kKEcvCkAzsOLNySpblL0yCILQ7MsPV230Lpy1Fx1rgeipjptbPnpsURenZ6Xkllq9b3nQdb2eB62leI7Isl5etzm1L3xhbgrnzsjVAOp2WeEopbzfnlqajsC4GDrAJgKqqAhFF8dXEG+PhMKgn3gClpaWTpLq6evjqQ4DLnXCLCIN6SAZ8Pt8d0tzc/Ntfo4CiLh29kKPPgAtJnjY1NfWR2tramGujP/5jbHlXOKMCu/8GDhw8dMTlcqU4xhiSyWTll1VVo39um7VsXr/0/r47DbywB25Eo9GvzWazSgDA7XaP/dDTs3/fQHYCYwWWWf755jhw+bFdiUQiu8xmswoARNM0omkaCYfDv35a4Y8fH8rZzd2mbp1qQPsF4Pv29m5JktJ6H0cpJbq9eDzu31JXc3v0ALDGlv8kGICBe0B33PE0kUi4LRbLrN5DTCbTnE6/3x/3B4LR3+N5B8jFODYEtLW1HbXZbDOFPfM/FJ2xWOyrVSvAnnWBvT6c5dkmMFEUX05NTdkX6+d3oDMQCNwod1eNDDzI5z/zLxAKhfqtVuvMYv2CCDobGhpOXUtl7WcocDEJNDY2niym/SgCYwyyLEuWEqKNd4Kd3gnmdDofUUpJMS2vadr8LehwOBxPpfWu1K30WOXtNBAMBqMAUEz70QsdwWAwOpwGhp8ANTU1N410vMlkmit24PF47p+8BIxNAl6v9x8jnaEDi8Uym6HAHAPsdrti6KBYLh3/v8vXRjrDCACQnMzXRroPdVP0GwrIn3kAAAAASUVORK5CYIIgCgo=]]></data>
	</file>
	<file>
	  <filename>/images/markers/m_28_red.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAcCAYAAABoMT8aAAADMklEQVQokY1UXWgTWRg988MkpoMIaiwIErM1ja3WGmMJoWTdNDv4UBDffDEoQq3gQ0WUIqXgg0Ww1pdaEeuDsi+6y7JPbswuwZ/aitQapalRp1UUqRWbYhy1He/08yGJSdMZ6YHDnHvvufd83Dv3gjHGl3J4eNjX0tJy0e12j4ui+E2SpDmv1/u0ra3tXDqd9pT7QUQgImia5mhtbb0g8byxew3o8mbQP74cz9eAdq4CSZI019nZeVLXdbEw78fkSCTyn6cCNBQATTflmGkq6ukmUMwPqrSBotHolcIivGEYfEdHx6m3Q/9HbmwDqmWA43IEV9QcBzSsAP71A/FrV6O9vb2HAYAbHR2t8dfXP074mVhdgSXhdgbYN748q6rqL4IkSSdcrwaDe9cuTPsZXQ7g1rs5G1u59q2gaVr3fvm9s2qJ6QV8YsCtj6LBq6patc4OgPJEiTZjfnzdMmBiYsItMsZEWcxvWgGl2gwcUCEA+mdd4p1O5/vXX63DYaFfzwKVlZXv+GAwOBj7AHD5Ea6MsNC3M0BDQ8MDLhaLKXuad9580pgraykYyQLNj0T2MJncwofD4YTXH7h/9uXSjvCLARwcBY61t5/2er1pjoiQSqVqtvv9D//YOGv/beXP0w+lgMkNoTvxePx3m82m8wBQW1s7dqa7++iRp7kEopKNpGL7bga48UnW+vv7D9hsNh0AULiWuq6LgUBg6Ph6UCaymFNhUK0M6urqal9wnUsbAwMDweUi6EUINB3JMZP/XtoEcrlcLzVNc5i+B0QExhivKMrNE+6F6R+aQJtkUF9fX2up/8d7UMpEIrFjhQh6s6P4Dvy1FeR0Oqey2axc7ucNw1jAUCh0p6reP/z3VPHo/pwEotHoVYfD8aXcv6gCIkJPT09b8+pc+ZNhUIUASiaTdWZe0wVUVXXbBd4Y/xV0vR7k8XieMcZ4M69oGAZf/rO4XK5X7mpvemBmrObeDKDsUuIAYOZd1FGAoijxwRlgcAZobGy8a+XjBUGYN2NdXd3j55+BMQ3w+XwjVj7LCux2++zcPDAPQJZlzcpnugcFfGRFbeUTBUGYt1ogVZJr5fsOUMpRssTzyyoAAAAASUVORK5CYIIgCgo=]]></data>
	</file>
	<file>
	  <filename>/images/markers/m_28_yellow.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAcCAYAAABoMT8aAAADkUlEQVQokY1Ub2gTZxh/3rvjkuWCFHRZcFCOW5Zkreu6LIYQSqdpFvwQGH7zi0ERYoV9qAzLLKWwD8KG2qFUxmZFNvwyFemnmmUQWhvTIm1XpamxXmupK1HxUpqemc3u8uxDcue1JtIHftzv3vs9f97ned8DRVEoIyYnJz2xWOwXQRAWGIb5j2XZDbfb/bCrq+unbDbr3KoHRAREBFmWLZ2dnT+zLKUePPgBXrnyKQ4NeXBoyIOXLjXhgQO7kGXZjb6+vu9LpRKj+enOoVDoL6eTw/FxP0pSB0pSB+bzHTqXpA6Mx71ot5swGo3+pgWhVFWlent7z6ysjIeGh78Al8sKhBAghAAA0TkhBHy+Brh92wuJxB/RgYGBbwAAyOzsbJPX23o/mfQyLhcH27HR0TwcObJQEEXxI5pl2R6eXwocPvzhpmzvAs9bYGTkmUlRdq7QsiyfO3rUanM4tpdds/V1BUZG1lRKFEVHY6MZALAKMPBaqHxvbHwPFhcXBUZRFMZqZapN08zIaxkBjqOhVHrFUjab7cXy8r+A1eCV0b6Bcc3Il5dfg91uf0YFAoF0PP4SCKmUSMhmGNeMfHQ0Dz6f7x6Jx+PhQ4cifz540AYcR2+rgdPTBYhE/lampmY+o4LBYNLt9k6cP/9kWyMsFlU4fnwWTp367ge3250liAiZTKZp717v1LVrn5j379/5zuwnTmQgl/v4TiKR+MpkMpUoAIDm5ua5s2fPfXvy5EMoFtXqBdMahvr72FgehofX5cHBwWMmk6kEAJW7oKoqFYvFft29u3Xi4sWlarlQRaV0RSlDT888nD7dc0YQhEXND4x3O5VKBXbsYPDx43aUpBBKUgjz+crz8uU9yPP8E1mWLUYfiqbpsga/3z/h9wcTV6/+o1dQmT3ChQtL0N3d/SPHcUWjj2GPFSSTyX0NDQw+fbpP/w/cvPk52my254VCwbpVr/dAQ3t7+x2Ho3Xy1q3n+v5v3MhBNBr93WKxFLfq36oAEaG/v78rEnkf8/kQ5nJB5DgaZ2ZmWmppawYQRVEwm2l1YeFLvH69FZ1O5yNFUahaWkZVVWrrYeF5fkkQXNlUarXp7t1VCIe/TgAA1NK+taBZOBxOpNOrkE6vQltb21g93aYxGtHS0nJ/fv4VzM3J4PF4puvp6lZgNptfb2yUoVwGsFqtcj1dzR5otram6LyejqFpulwvQCbzJnE93f9Yc3B0u5KYlwAAAABJRU5ErkJggiAKCg==]]></data>
	</file>
	<file>
	  <filename>/images/markershadows/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/images/markershadows/defaults.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACgAAAAcCAYAAAATFf3WAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAO5SURBVHja7JbNThpRGIY5M/yJIH/+1WDTpJo0MTFx5VZjvAS9ALd6AS69GHfehS5dNeqiaRtJKlgEVEBghGGmz5ccEtpUGRGNaXqSN2cYZuY8834/Z5Trur63PAzfGx//Af95QP9LPHRjY0P9cUp+/1aNBwcHnqpTDauKNZTSUfFrdSMkizhaHS3HC6R/SGAmCqMoipmmKfOInO8wmC107/f7LcMwGolEoh6JRJpnZ2f2wsKC+yKAPWARlEKTLD4hx47jjGlgQyllMzeZ68xVrinZtn3JSxTz+XwDQEc7rIYGqOECKIlmWfQ9qTKD0trFUM+zBaDFf+JiFV1wbKO7k5MTa3193elJA/XsKtZwsrjAzAG3yGKLHM+jaTSmAU2tgHY5ibNprpWXGsFF//j4uOJ5w8vBnrAKxHvgPrHgR47jfZ6leuYO97QCgYBdq9VcCsX3UHgHcdDQbkwD94GFZjWslxd1dbFUcLIieamreTiNGvcMHbo0cLPAZTw41ztsCuWWuQDgTbPZvN/e3u7XZlzDa2hnZmb8wWBwjOp7x6mMzsHQY+HpGVIIVV7qkq6T5wUrVLCtXXWf7aAA8tYhHpzAhWk0iUY93i9wNfSDe84pjkK1WrXIPcdDSngOsRFi4GAcSKnEmK5O1WeBNrpBWeC+4F5Wtxqnz33uU6pY6S0xyDyqnQvx23jgwd3tTArilusvmb+TGuepVOp6Z2enu3sor1XZL7y+YrFoACSOhZm7Pa4XTPLpXoeyjHKAfUNn6DNb3NdYLFZcXV1tAfdYW3EH6oPlctlst9shQjSinewCClgLNTRcBSAJ4Q05WwZMtrVr7musra21Nzc33X4592TAlZUVdXp6GmShURaK6j3WB4g4VgdYoEocl5jLXCOt5E7EPbLXtohCRzvnGcwToFRvJpMxLcsawZE4iiETENn8K8BdcdlPjgsCR57VAJQG3Jqbm7OXlpacQVx7EuDR0ZHkXRw3UsxhqripKzEPVI5zBUJ5Q5E3kslkO5vNdvb29txHHPMM9xig4lvNd3h4GKjX61FckaYc07uBNNocukBFybmpqal7D24N95N/f39fCiMiXyD6e8/AqSsBxC2p0hLhb9A62h62rIHc+yughJXwmHT7iHzfoQlpLbh1iyScuXQ6fT0/P99cXl7ueAjlwHAPAh4fHwdxLkHeTZH4cdxqoSs+kXLRaPQ6Ho9bW1tbju8VhtHdKboi0ZXsagDFkHytBIFssM2Vw+HwLflm7e7uvgqcjF8CDADrddBoSMpibQAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/markershadows/m_28_dblues.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACgAAAAcCAYAAAATFf3WAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAO5SURBVHja7JbNThpRGIY5M/yJIH/+1WDTpJo0MTFx5VZjvAS9ALd6AS69GHfehS5dNeqiaRtJKlgEVEBghGGmz5ccEtpUGRGNaXqSN2cYZuY8834/Z5Trur63PAzfGx//Af95QP9LPHRjY0P9cUp+/1aNBwcHnqpTDauKNZTSUfFrdSMkizhaHS3HC6R/SGAmCqMoipmmKfOInO8wmC107/f7LcMwGolEoh6JRJpnZ2f2wsKC+yKAPWARlEKTLD4hx47jjGlgQyllMzeZ68xVrinZtn3JSxTz+XwDQEc7rIYGqOECKIlmWfQ9qTKD0trFUM+zBaDFf+JiFV1wbKO7k5MTa3193elJA/XsKtZwsrjAzAG3yGKLHM+jaTSmAU2tgHY5ibNprpWXGsFF//j4uOJ5w8vBnrAKxHvgPrHgR47jfZ6leuYO97QCgYBdq9VcCsX3UHgHcdDQbkwD94GFZjWslxd1dbFUcLIieamreTiNGvcMHbo0cLPAZTw41ztsCuWWuQDgTbPZvN/e3u7XZlzDa2hnZmb8wWBwjOp7x6mMzsHQY+HpGVIIVV7qkq6T5wUrVLCtXXWf7aAA8tYhHpzAhWk0iUY93i9wNfSDe84pjkK1WrXIPcdDSngOsRFi4GAcSKnEmK5O1WeBNrpBWeC+4F5Wtxqnz33uU6pY6S0xyDyqnQvx23jgwd3tTArilusvmb+TGuepVOp6Z2enu3sor1XZL7y+YrFoACSOhZm7Pa4XTPLpXoeyjHKAfUNn6DNb3NdYLFZcXV1tAfdYW3EH6oPlctlst9shQjSinewCClgLNTRcBSAJ4Q05WwZMtrVr7musra21Nzc33X4592TAlZUVdXp6GmShURaK6j3WB4g4VgdYoEocl5jLXCOt5E7EPbLXtohCRzvnGcwToFRvJpMxLcsawZE4iiETENn8K8BdcdlPjgsCR57VAJQG3Jqbm7OXlpacQVx7EuDR0ZHkXRw3UsxhqripKzEPVI5zBUJ5Q5E3kslkO5vNdvb29txHHPMM9xig4lvNd3h4GKjX61FckaYc07uBNNocukBFybmpqal7D24N95N/f39fCiMiXyD6e8/AqSsBxC2p0hLhb9A62h62rIHc+yughJXwmHT7iHzfoQlpLbh1iyScuXQ6fT0/P99cXl7ueAjlwHAPAh4fHwdxLkHeTZH4cdxqoSs+kXLRaPQ6Ho9bW1tbju8VhtHdKboi0ZXsagDFkHytBIFssM2Vw+HwLflm7e7uvgqcjF8CDADrddBoSMpibQAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/markershadows/m_28_greens.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACgAAAAcCAYAAAATFf3WAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAO5SURBVHja7JbNThpRGIY5M/yJIH/+1WDTpJo0MTFx5VZjvAS9ALd6AS69GHfehS5dNeqiaRtJKlgEVEBghGGmz5ccEtpUGRGNaXqSN2cYZuY8834/Z5Trur63PAzfGx//Af95QP9LPHRjY0P9cUp+/1aNBwcHnqpTDauKNZTSUfFrdSMkizhaHS3HC6R/SGAmCqMoipmmKfOInO8wmC107/f7LcMwGolEoh6JRJpnZ2f2wsKC+yKAPWARlEKTLD4hx47jjGlgQyllMzeZ68xVrinZtn3JSxTz+XwDQEc7rIYGqOECKIlmWfQ9qTKD0trFUM+zBaDFf+JiFV1wbKO7k5MTa3193elJA/XsKtZwsrjAzAG3yGKLHM+jaTSmAU2tgHY5ibNprpWXGsFF//j4uOJ5w8vBnrAKxHvgPrHgR47jfZ6leuYO97QCgYBdq9VcCsX3UHgHcdDQbkwD94GFZjWslxd1dbFUcLIieamreTiNGvcMHbo0cLPAZTw41ztsCuWWuQDgTbPZvN/e3u7XZlzDa2hnZmb8wWBwjOp7x6mMzsHQY+HpGVIIVV7qkq6T5wUrVLCtXXWf7aAA8tYhHpzAhWk0iUY93i9wNfSDe84pjkK1WrXIPcdDSngOsRFi4GAcSKnEmK5O1WeBNrpBWeC+4F5Wtxqnz33uU6pY6S0xyDyqnQvx23jgwd3tTArilusvmb+TGuepVOp6Z2enu3sor1XZL7y+YrFoACSOhZm7Pa4XTPLpXoeyjHKAfUNn6DNb3NdYLFZcXV1tAfdYW3EH6oPlctlst9shQjSinewCClgLNTRcBSAJ4Q05WwZMtrVr7musra21Nzc33X4592TAlZUVdXp6GmShURaK6j3WB4g4VgdYoEocl5jLXCOt5E7EPbLXtohCRzvnGcwToFRvJpMxLcsawZE4iiETENn8K8BdcdlPjgsCR57VAJQG3Jqbm7OXlpacQVx7EuDR0ZHkXRw3UsxhqripKzEPVI5zBUJ5Q5E3kslkO5vNdvb29txHHPMM9xig4lvNd3h4GKjX61FckaYc07uBNNocukBFybmpqal7D24N95N/f39fCiMiXyD6e8/AqSsBxC2p0hLhb9A62h62rIHc+yughJXwmHT7iHzfoQlpLbh1iyScuXQ6fT0/P99cXl7ueAjlwHAPAh4fHwdxLkHeTZH4cdxqoSs+kXLRaPQ6Ho9bW1tbju8VhtHdKboi0ZXsagDFkHytBIFssM2Vw+HwLflm7e7uvgqcjF8CDADrddBoSMpibQAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/markershadows/m_28_lblues.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACgAAAAcCAYAAAATFf3WAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAO5SURBVHja7JbNThpRGIY5M/yJIH/+1WDTpJo0MTFx5VZjvAS9ALd6AS69GHfehS5dNeqiaRtJKlgEVEBghGGmz5ccEtpUGRGNaXqSN2cYZuY8834/Z5Trur63PAzfGx//Af95QP9LPHRjY0P9cUp+/1aNBwcHnqpTDauKNZTSUfFrdSMkizhaHS3HC6R/SGAmCqMoipmmKfOInO8wmC107/f7LcMwGolEoh6JRJpnZ2f2wsKC+yKAPWARlEKTLD4hx47jjGlgQyllMzeZ68xVrinZtn3JSxTz+XwDQEc7rIYGqOECKIlmWfQ9qTKD0trFUM+zBaDFf+JiFV1wbKO7k5MTa3193elJA/XsKtZwsrjAzAG3yGKLHM+jaTSmAU2tgHY5ibNprpWXGsFF//j4uOJ5w8vBnrAKxHvgPrHgR47jfZ6leuYO97QCgYBdq9VcCsX3UHgHcdDQbkwD94GFZjWslxd1dbFUcLIieamreTiNGvcMHbo0cLPAZTw41ztsCuWWuQDgTbPZvN/e3u7XZlzDa2hnZmb8wWBwjOp7x6mMzsHQY+HpGVIIVV7qkq6T5wUrVLCtXXWf7aAA8tYhHpzAhWk0iUY93i9wNfSDe84pjkK1WrXIPcdDSngOsRFi4GAcSKnEmK5O1WeBNrpBWeC+4F5Wtxqnz33uU6pY6S0xyDyqnQvx23jgwd3tTArilusvmb+TGuepVOp6Z2enu3sor1XZL7y+YrFoACSOhZm7Pa4XTPLpXoeyjHKAfUNn6DNb3NdYLFZcXV1tAfdYW3EH6oPlctlst9shQjSinewCClgLNTRcBSAJ4Q05WwZMtrVr7musra21Nzc33X4592TAlZUVdXp6GmShURaK6j3WB4g4VgdYoEocl5jLXCOt5E7EPbLXtohCRzvnGcwToFRvJpMxLcsawZE4iiETENn8K8BdcdlPjgsCR57VAJQG3Jqbm7OXlpacQVx7EuDR0ZHkXRw3UsxhqripKzEPVI5zBUJ5Q5E3kslkO5vNdvb29txHHPMM9xig4lvNd3h4GKjX61FckaYc07uBNNocukBFybmpqal7D24N95N/f39fCiMiXyD6e8/AqSsBxC2p0hLhb9A62h62rIHc+yughJXwmHT7iHzfoQlpLbh1iyScuXQ6fT0/P99cXl7ueAjlwHAPAh4fHwdxLkHeTZH4cdxqoSs+kXLRaPQ6Ho9bW1tbju8VhtHdKboi0ZXsagDFkHytBIFssM2Vw+HwLflm7e7uvgqcjF8CDADrddBoSMpibQAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/markershadows/m_28_oranges.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACgAAAAcCAYAAAATFf3WAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAO5SURBVHja7JbNThpRGIY5M/yJIH/+1WDTpJo0MTFx5VZjvAS9ALd6AS69GHfehS5dNeqiaRtJKlgEVEBghGGmz5ccEtpUGRGNaXqSN2cYZuY8834/Z5Trur63PAzfGx//Af95QP9LPHRjY0P9cUp+/1aNBwcHnqpTDauKNZTSUfFrdSMkizhaHS3HC6R/SGAmCqMoipmmKfOInO8wmC107/f7LcMwGolEoh6JRJpnZ2f2wsKC+yKAPWARlEKTLD4hx47jjGlgQyllMzeZ68xVrinZtn3JSxTz+XwDQEc7rIYGqOECKIlmWfQ9qTKD0trFUM+zBaDFf+JiFV1wbKO7k5MTa3193elJA/XsKtZwsrjAzAG3yGKLHM+jaTSmAU2tgHY5ibNprpWXGsFF//j4uOJ5w8vBnrAKxHvgPrHgR47jfZ6leuYO97QCgYBdq9VcCsX3UHgHcdDQbkwD94GFZjWslxd1dbFUcLIieamreTiNGvcMHbo0cLPAZTw41ztsCuWWuQDgTbPZvN/e3u7XZlzDa2hnZmb8wWBwjOp7x6mMzsHQY+HpGVIIVV7qkq6T5wUrVLCtXXWf7aAA8tYhHpzAhWk0iUY93i9wNfSDe84pjkK1WrXIPcdDSngOsRFi4GAcSKnEmK5O1WeBNrpBWeC+4F5Wtxqnz33uU6pY6S0xyDyqnQvx23jgwd3tTArilusvmb+TGuepVOp6Z2enu3sor1XZL7y+YrFoACSOhZm7Pa4XTPLpXoeyjHKAfUNn6DNb3NdYLFZcXV1tAfdYW3EH6oPlctlst9shQjSinewCClgLNTRcBSAJ4Q05WwZMtrVr7musra21Nzc33X4592TAlZUVdXp6GmShURaK6j3WB4g4VgdYoEocl5jLXCOt5E7EPbLXtohCRzvnGcwToFRvJpMxLcsawZE4iiETENn8K8BdcdlPjgsCR57VAJQG3Jqbm7OXlpacQVx7EuDR0ZHkXRw3UsxhqripKzEPVI5zBUJ5Q5E3kslkO5vNdvb29txHHPMM9xig4lvNd3h4GKjX61FckaYc07uBNNocukBFybmpqal7D24N95N/f39fCiMiXyD6e8/AqSsBxC2p0hLhb9A62h62rIHc+yughJXwmHT7iHzfoQlpLbh1iyScuXQ6fT0/P99cXl7ueAjlwHAPAh4fHwdxLkHeTZH4cdxqoSs+kXLRaPQ6Ho9bW1tbju8VhtHdKboi0ZXsagDFkHytBIFssM2Vw+HwLflm7e7uvgqcjF8CDADrddBoSMpibQAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/markershadows/m_28_reds.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACgAAAAcCAYAAAATFf3WAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAO5SURBVHja7JbNThpRGIY5M/yJIH/+1WDTpJo0MTFx5VZjvAS9ALd6AS69GHfehS5dNeqiaRtJKlgEVEBghGGmz5ccEtpUGRGNaXqSN2cYZuY8834/Z5Trur63PAzfGx//Af95QP9LPHRjY0P9cUp+/1aNBwcHnqpTDauKNZTSUfFrdSMkizhaHS3HC6R/SGAmCqMoipmmKfOInO8wmC107/f7LcMwGolEoh6JRJpnZ2f2wsKC+yKAPWARlEKTLD4hx47jjGlgQyllMzeZ68xVrinZtn3JSxTz+XwDQEc7rIYGqOECKIlmWfQ9qTKD0trFUM+zBaDFf+JiFV1wbKO7k5MTa3193elJA/XsKtZwsrjAzAG3yGKLHM+jaTSmAU2tgHY5ibNprpWXGsFF//j4uOJ5w8vBnrAKxHvgPrHgR47jfZ6leuYO97QCgYBdq9VcCsX3UHgHcdDQbkwD94GFZjWslxd1dbFUcLIieamreTiNGvcMHbo0cLPAZTw41ztsCuWWuQDgTbPZvN/e3u7XZlzDa2hnZmb8wWBwjOp7x6mMzsHQY+HpGVIIVV7qkq6T5wUrVLCtXXWf7aAA8tYhHpzAhWk0iUY93i9wNfSDe84pjkK1WrXIPcdDSngOsRFi4GAcSKnEmK5O1WeBNrpBWeC+4F5Wtxqnz33uU6pY6S0xyDyqnQvx23jgwd3tTArilusvmb+TGuepVOp6Z2enu3sor1XZL7y+YrFoACSOhZm7Pa4XTPLpXoeyjHKAfUNn6DNb3NdYLFZcXV1tAfdYW3EH6oPlctlst9shQjSinewCClgLNTRcBSAJ4Q05WwZMtrVr7musra21Nzc33X4592TAlZUVdXp6GmShURaK6j3WB4g4VgdYoEocl5jLXCOt5E7EPbLXtohCRzvnGcwToFRvJpMxLcsawZE4iiETENn8K8BdcdlPjgsCR57VAJQG3Jqbm7OXlpacQVx7EuDR0ZHkXRw3UsxhqripKzEPVI5zBUJ5Q5E3kslkO5vNdvb29txHHPMM9xig4lvNd3h4GKjX61FckaYc07uBNNocukBFybmpqal7D24N95N/f39fCiMiXyD6e8/AqSsBxC2p0hLhb9A62h62rIHc+yughJXwmHT7iHzfoQlpLbh1iyScuXQ6fT0/P99cXl7ueAjlwHAPAh4fHwdxLkHeTZH4cdxqoSs+kXLRaPQ6Ho9bW1tbju8VhtHdKboi0ZXsagDFkHytBIFssM2Vw+HwLflm7e7uvgqcjF8CDADrddBoSMpibQAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/markershadows/m_28_yellows.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACgAAAAcCAYAAAATFf3WAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAO5SURBVHja7JbNThpRGIY5M/yJIH/+1WDTpJo0MTFx5VZjvAS9ALd6AS69GHfehS5dNeqiaRtJKlgEVEBghGGmz5ccEtpUGRGNaXqSN2cYZuY8834/Z5Trur63PAzfGx//Af95QP9LPHRjY0P9cUp+/1aNBwcHnqpTDauKNZTSUfFrdSMkizhaHS3HC6R/SGAmCqMoipmmKfOInO8wmC107/f7LcMwGolEoh6JRJpnZ2f2wsKC+yKAPWARlEKTLD4hx47jjGlgQyllMzeZ68xVrinZtn3JSxTz+XwDQEc7rIYGqOECKIlmWfQ9qTKD0trFUM+zBaDFf+JiFV1wbKO7k5MTa3193elJA/XsKtZwsrjAzAG3yGKLHM+jaTSmAU2tgHY5ibNprpWXGsFF//j4uOJ5w8vBnrAKxHvgPrHgR47jfZ6leuYO97QCgYBdq9VcCsX3UHgHcdDQbkwD94GFZjWslxd1dbFUcLIieamreTiNGvcMHbo0cLPAZTw41ztsCuWWuQDgTbPZvN/e3u7XZlzDa2hnZmb8wWBwjOp7x6mMzsHQY+HpGVIIVV7qkq6T5wUrVLCtXXWf7aAA8tYhHpzAhWk0iUY93i9wNfSDe84pjkK1WrXIPcdDSngOsRFi4GAcSKnEmK5O1WeBNrpBWeC+4F5Wtxqnz33uU6pY6S0xyDyqnQvx23jgwd3tTArilusvmb+TGuepVOp6Z2enu3sor1XZL7y+YrFoACSOhZm7Pa4XTPLpXoeyjHKAfUNn6DNb3NdYLFZcXV1tAfdYW3EH6oPlctlst9shQjSinewCClgLNTRcBSAJ4Q05WwZMtrVr7musra21Nzc33X4592TAlZUVdXp6GmShURaK6j3WB4g4VgdYoEocl5jLXCOt5E7EPbLXtohCRzvnGcwToFRvJpMxLcsawZE4iiETENn8K8BdcdlPjgsCR57VAJQG3Jqbm7OXlpacQVx7EuDR0ZHkXRw3UsxhqripKzEPVI5zBUJ5Q5E3kslkO5vNdvb29txHHPMM9xig4lvNd3h4GKjX61FckaYc07uBNNocukBFybmpqal7D24N95N/f39fCiMiXyD6e8/AqSsBxC2p0hLhb9A62h62rIHc+yughJXwmHT7iHzfoQlpLbh1iyScuXQ6fT0/P99cXl7ueAjlwHAPAh4fHwdxLkHeTZH4cdxqoSs+kXLRaPQ6Ho9bW1tbju8VhtHdKboi0ZXsagDFkHytBIFssM2Vw+HwLflm7e7uvgqcjF8CDADrddBoSMpibQAAAABJRU5ErkJggg==]]></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[PD9waHAKJGxhbmdbJ2VfYmFkYWRkcmVzcyddID0gJ1RoZSBhZGRyZXNzIHNwZWNpZmllZCB3YXMgaW52YWxpZCBvciBjb3VsZCBub3QgYmUgZm91bmQnOwokbGFuZ1snZnJpZW5kbHluYW1lJ10gPSAnR29vZ2xlTWFwcyc7CiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ1ByZXBhcmUgbXVsdGlwbGUgR29vZ2xlIG1hcHMsIG11bHRpcGxlIGNvb3JkaW5hdGVzIHdpdGggY3VzdG9tIG1hcmtlcnMuJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnUGxlYXNlIHByb3ZpZGUgR29vZ2xlTWFwcyBhcGkga2V5ISBVc2luZyBHb29nbGVNYXBzIHJlcXVpcmVzICJVc2UgR29vZ2xlTWFwcyIgcmlnaHRzJzsKJGxhbmdbJ3Bvc3R1bmluc3RhbGwnXSA9ICdCeWUgYnllJzsKJGxhbmdbJ3JlYWxseV91bmluc3RhbGwnXSA9ICdSZWFsbHkgdW5pbnN0YWxsLCBhbGwgZGF0YSB3aWxsIGJlIGxvc3QnOwokbGFuZ1sndW5pbnN0YWxsZWQnXSA9ICdNb2R1bGUgVW5pbnN0YWxsZWQuJzsKJGxhbmdbJ2luc3RhbGxlZCddID0gJ01vZHVsZSB2ZXJzaW9uICVzIGluc3RhbGxlZC4nOwokbGFuZ1sncHJlZnN1cGRhdGVkJ10gPSAnTW9kdWxlIHByZWZlcmVuY2VzIHVwZGF0ZWQuJzsKJGxhbmdbJ2FjY2Vzc2RlbmllZCddID0gJ0FjY2VzcyBEZW5pZWQuIFBsZWFzZSBjaGVjayB5b3VyIHBlcm1pc3Npb25zLic7CiRsYW5nWydlcnJvciddID0gJ0Vycm9yISc7CiRsYW5nWyd1cGdyYWRlZCddID0gJ01vZHVsZSB1cGdyYWRlZCB0byB2ZXJzaW9uICVzLic7CiRsYW5nWyd0aXRsZV9tb2RfcHJlZnMnXSA9ICdNb2R1bGUgUHJlZmVyZW5jZXMnOwokbGFuZ1sndGl0bGVfbW9kX2FkbWluJ10gPSAnTW9kdWxlIEFkbWluIFBhbmVsJzsKJGxhbmdbJ3RpdGxlX2FkbWluX3BhbmVsJ10gPSAnR29vZ2xlTWFwcyBNb2R1bGUnOwokbGFuZ1snc2V0dGluZ3MnXSA9ICdTZXR0aW5ncyc7CiRsYW5nWydtYXBzJ10gPSAnTWFwcyc7CiRsYW5nWydtYXBfaWQnXSA9ICdNYXAgSUQnOwokbGFuZ1snc2V0dGluZ3Nfc2F2ZWQnXSA9ICdTZXR0aW5ncyBzYXZlZCc7CiRsYW5nWydhcGlrZXknXSA9ICdHb29nbGVNYXBzIGFwaWtleSc7CiRsYW5nWyd1c2VjYWNoZSddID0gJ1VzZSBjYWNoaW5nIGZvciBnZW9jb2RlcyAobm90IHdvcmtpbmcgeWV0KSc7CiRsYW5nWydsb29rdXBzZXJ2aWNlJ10gPSAnV2hpY2ggbG9va3VwIHNlcnZpY2UgdG8gdXNlJzsKJGxhbmdbJ3lhaG9vYXBwaWQnXSA9ICdBcHBsaWNhdGlvbiBJRCBmb3IgeWFob28nOyAKJGxhbmdbJ25va2V5J10gPSAnR29vZ2xlTWFwcyBhcGlrZXkgbWlzc2luZyBpbiBjb25maWd1cmF0aW9uJzsKJGxhbmdbJ25vbWFwJ10gPSAnTm8gbWFwIHByb3ZpZGVkJzsKJGxhbmdbJ3F1ZXJ5X2FkZHJlc3MnXSA9ICdBZGRyZXNzIGxvb2t1cCc7CiRsYW5nWydhZGRyZXNzX2xvb2t1cCddID0gJ1NlYXJjaCBsb2NhdGlvbiBmb3IgYWRkcmVzcyc7CiRsYW5nWydTdWJtaXQnXSA9ICdTdWJtaXQnOwokbGFuZ1snbG9jYXRpb25fZm9yJ10gPSAnTG9jYXRpb24gZm9yJzsKJGxhbmdbJ2lzJ10gPSAnaXMnOwokbGFuZ1sncGF0aGVycm9yJ10gPSAnUGF0aCB0byBtYXJrZXIgZGlyZWN0b3J5IFwndXBsb2Fkcy9Hb29nbGVNYXBzL21hcmtlcnNcJyBkb2VzblwndCBleGlzdCc7CiRsYW5nWydtYXJrZXJlcnJvciddID0gJ05vIG1hcmtlcnMgZm91bmQgaW4gZGlyZWN0b3J5IFwndXBsb2Fkcy9Hb29nbGVNYXBzL21hcmtlcnNcJyc7CiRsYW5nWyd1c2VtYXJrZXJzaGFkb3dzJ10gPSAnVXNlIG1hcmtlciBzaGFkb3dzPyc7CgokbGFuZ1snY2hhbmdlbG9nJ10gPSAnCjx1bD4KCTxsaT52ZXJzaW9uIDAuMS42IDE1IEphbnVhcnkgMjAwOSBCeSBEdWtldG93bjxiciAvPgoJSW5jbHVkZWQgdGhlIHBhcmFtZXRlcnMgdGhhdCBhcmUgYWxzbyB1c2VkIGJ5IEdvb2dsZVwncyBBUEkuIFBhcmFtZXRlcnMgYXJlIGRpc2N1c3NlZCBpbiBoZWxwIHRleHQuCgk8L2xpPgoJPGxpPnZlcnNpb24gMC4xLjUgMTAgSmFudWFyeSAyMDA5IEJ5IER1a2V0b3duPGJyIC8+CglVc2VyIGRlZmluZWQgbWFya2VycyBub3cgd29yay4gU3VwcGxpZWQgbWFya2VycyBidWlsZCB2aWE6IGh0dHA6Ly93d3cuZ21hcGxpdmUuY29tL21hcmtlcl9tYWtlci5waHAgb2YgRGl4b24gSW5mb3JtYXRpb24gU3lzdGVtcywgQ2FuYWRhPGJyIC8+Cgk8L2xpPgoJPGxpPlZlcnNpb24gMC4xLiAyOCBBdWd1c3QgMjAwNi4gSW5pdGlhbCBSZWxlYXNlLjwvbGk+CjwvdWw+Cgo8aDM+VGhhbmtzIGdvIHRvPC9oMz4KPHA+Um9iZXJ0IEJyb3duIGZvciBSQ1JVRCBDbGFzcyB1c2VkIGluIGFkbWluIGV4dGVuc2l2ZWx5PC9wPgo8cD5hbmQ8L3A+CjxwPk1vbnRlIE9ocnQgZm9yIEdvb2dsZU1hcEFQSTwvcD4KJzsKJGxhbmdbJ2hlbHAnXSA9ICcKPGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPlRoaXMgbW9kdWxlIGlzIGludGVudGVkIGZvciBpbnRlZ3JhdGluZyBHb29nbGVNYXBzIGFzIGEgcGFydCBvZiB5b3VyIHNpdGUuPC9wPgo8aDM+SG93IERvIEkgVXNlIEl0PC9oMz4KPHA+Rmlyc3QgeW91IG11c3QgaW5zZXJ0IHlvdXIgR29vZ2xlTWFwcyBhcGkga2V5IChwbGVhc2UgcmVnaXN0ZXIgaW4gaHR0cDovL3d3dy5nb29nbGUuY29tL2FwaXMvbWFwcy9zaWdudXAuaHRtbCkuPC9wPgo8cD5UaGVuIHlvdSBjYW4gY2FsbCB0aGlzIG1vZHVsZSBpbiB5b3VyIHRlbXBsYXRlIHdpdGgge2Ntc19tb2R1bGUgbW9kdWxlPVwnR29vZ2xlTWFwc1wnIG1hcD1cJ3Rlc3RcJ30gPC9wPgo8cD5Vc2VyIGRlZmluZWQgbWFya2VycyBjYW4gYmUgbG9hZGVkIGludG8gdXBsb2Fkcy9Hb29nbGVNYXBzL21hcmtlcnMuIFRoZSBjb25uZWN0ZWQgc2hhZG93IGltYWdlcyBzaG91bGQgYmUgbG9hZGVkIGluIAoJdXBsb2Fkcy9Hb29nbGVNYXBzL21hcmtlcnNoYWRvd3MuPGJyPgoJTmFtaW5nIGNvbnZlbnRpb24gaXMgW21hcmtlcmljb25dcy5wbmcgKGllLiBtYXJrZXIgaXMgYmlnYmx1ZS5wbmcsIG1hcmtlcnNoYWRvdyBpcyBiaWdibHVlcy5wbmcpLjxicj4KCUlmIGEgc2hhZG93IGlzIG5vdCBmb3VuZCwgdGhlIGRlZmF1bHQgdmVyc2lvbiB3aWxsIGJlIHVzZWQgKHdoaWNoIG1heSBub3QgYmUgdGhlIGNvcnJlY3Qgc2hhZG93IG9mIHRoZSBtYXJrZXIgYXQgYWxsKS48YnI+CglJbiB0aGUgc2V0dGluZ3MgdXNlIHRoZSBwcmVmZXJlbmNlIFwnVXNlIG1hcmtlciBzaGFkb3dzXCcgdG8gc2hvdy9oaWRlIHRoZW0uIFNob3dpbmcgdGhlIHNoYWRvd3Mgc2xvd3MgZG93biB0aGUgYnVpbGR1cCBvZiB0aGUKCW1hcCwgZHVlIHRvIG1vcmUgaW50ZXJuYWwgY2hlY2tzLjxicj4KCU9ubHkgaW1hZ2VzIHdpdGggZXh0ZW5zaW9uIC5wbmcgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQuPC9wPgo8cD5UaGlzIG1vZHVsZSBpcyBldmVuIG1vcmUgZmxleGlibGUgdGhyb3VnaCB0aGUgdXNhZ2Ugb2YgdGhlIHBhcmFtZXRlcnMgKHNlZSB0aGUgcGFyYW1ldGVyIGxpc3QpLiBFYWNoIHBhcmFtZXRlciBhcyBhdmFpbGFibGUgZHVyaW5nIHRoZSBwcmVwYXJhdGlvbiBvZiBhIG1hcCwgY2FuIGJlIAoJb3ZlcnJpZGVuIGZvciB0aGUgZnJvbnQgZW5kLiBTbyB5b3UgYXJlIGFibGUgdG8gcHJlcGFyZSBvbmUgbWFwIGFuZCBkaXNwbGF5IGl0IGluIHZhcmlvdXMgd2F5cyBieSB1c2luZyBvbmUgb3IgbW9yZSBwYXJhbWV0ZXJzLjxicj4KCTxpPk5vdGU6PC9pPiBEdWUgdG8gdGhlIGdlbmVyYXRpb24gZm9ybSB1c2VkIGZvciB0aGUgbWFwLCBpdCBpcyBub3QgcG9zc2libGUgdG8gaGF2ZSBtdWx0aXBsZSBtYXBzIG9uIG9uZSBwYWdlITwvcD4KPGgzPlN1cHBvcnQ8L2gzPgo8cD5UaGlzIG1vZHVsZSBkb2VzIG5vdCBpbmNsdWRlIGNvbW1lcmNpYWwgc3VwcG9ydC4gSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlc291cmNlcyBhdmFpbGFibGUgdG8gaGVscCB5b3Ugd2l0aCBpdDo8YnI+Cjx1bD4KCTxsaT5UaGUgQ01TIE1hZGUgU2ltcGxlIGZvcnVtOzwvbGk+CjwvdWw+CjwvcD4KPHA+QXMgcGVyIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYXMtaXMuIFBsZWFzZSByZWFkIHRoZSB0ZXh0Cm9mIHRoZSBsaWNlbnNlIGZvciB0aGUgZnVsbCBkaXNjbGFpbWVyLjwvcD4KCjxoMz5TZWN1cml0eTwvaDM+CjxwPlVzZXIgbXVzdCBoYXZlICJVc2UgR29vZ2xlTWFwcyIgcGVybWlzc2lvbnMgc2V0IHRvIGVkaXQgbWFwczwvcD4KJzsKCi8vIHBhcmFtIGhlbHAKJGxhbmdbJ2hlbHBfcGFyYW1fYm91bmRzX2Z1ZGdlJ10gPSAnVGhpcyB3aWxsIGFkanVzdCBob3cgbXVjaCBtYXAgYm91bmRhcnkgZW5jb21wYXNzZXMgdGhlIG1hcCBtYXJrZXJzLic7CiRsYW5nWydoZWxwX3BhcmFtX2NlbnRlcmxhdCddID0gJ1RoZSBsYXRpdHVkZSB0byB3aGljaCB0aGUgbWFwIHNob3VsZCBiZSBjZW50ZXJlZC4nOwokbGFuZ1snaGVscF9wYXJhbV9jZW50ZXJsb24nXSA9ICdUaGUgbG9uZ2l0dWRlIHRvIHdoaWNoIHRoZSBtYXAgc2hvdWxkIGJlIGNlbnRlcmVkLic7CiRsYW5nWydoZWxwX3BhcmFtX2NvbnRyb2xzJ10gPSAnSWYgc2V0IHRvIDAgKHplcm8pLCB0aGVyZSB3aWxsIGJlIG5vIGNvbnRyb2xzIHRvIHpvb20vbW92ZSBhcm91bmQgdGhlIG1hcC4nOwokbGFuZ1snaGVscF9wYXJhbV9jb250cm9sc19zaXplJ10gPSAnVGhpcyBzZXRzIHRoZSBtYXAgY29udHJvbCBzaXplLiBSZWxldmFudCBvbmx5IGlmIG1hcCBjb250cm9scyBhcmUKZW5hYmxlZC4gbGFyZ2UgPSBtYXAgem9vbS9tb3ZlIHdpdGggc2xpZGVyLiBzbWFsbCA9IHpvb20vbW92ZSB3aXRob3V0IHNsaWRlci4gTGFyZ2UgaXMgZGVmYXVsdC4nOwokbGFuZ1snaGVscF9wYXJhbV9kaXJlY3Rpb25zJ10gPSAnVGhpcyBlbmFibGVzIG1hcCBkaXJlY3Rpb25zIGluIHRoZSBib3R0b20gb2YgdGhlIHBvcC11cCBpbmZvIHdpbmRvdy4gRGVmYXVsdCBpcyBkaXNhYmxlZC4KXCcxXCcgV2lsbCBlbmFibGUgdGhlIGRpcmVjdGlvbnMuJzsKJGxhbmdbJ2hlbHBfcGFyYW1faGVpZ2h0J10gPSAnU2V0cyB0aGUgaGVpZ2h0IG9mIHRoZSBtYXAgd2luZG93LiBUaGlzIGNhbiBiZSBlaXRoZXIgcHggb3IgJS4nOwokbGFuZ1snaGVscF9wYXJhbV9pbmZvX3RyaWdnZXInXSA9ICdUaGlzIHNldHMgdGhlIGluZm8gd2luZG93IHRyaWdnZXIgYmVoYXZpb3IuIGNsaWNrID0gaW5mbyB3aW5kb3cgY29tZXMgdXAKICAgICAgICB3aGVuIGNsaWNraW5nIG9uIGEgbWFya2VyLiBtb3VzZW92ZXIgPSBpbmZvIHdpbmRvdyBjb21lcyB1cCB3aGVuIG1vdXNpbmcgb3ZlciBhIG1hcmtlci4nOwokbGFuZ1snaGVscF9wYXJhbV9pbmZvX3dpbmRvdyddID0gJ0VuYWJsZXMgaW5mbyB3aW5kb3dzIG9uIG1hcCBtYXJrZXJzLic7CiRsYW5nWydoZWxwX3BhcmFtX21hcCddID0gJ1NldCB3aGljaCBtYXAgdG8gc2hvdyc7CiRsYW5nWydoZWxwX3BhcmFtX3NpZGViYXInXSA9ICdVc2UgXCcxXCcgdG8gZW5hYmxlIHRoZSBtYXAgc2lkZWJhci4nOwokbGFuZ1snaGVscF9wYXJhbV90eXBlJ10gPSAnVGhpcyBzZXRzIHRoZSBkZWZhdWx0IG1hcCB0eXBlLiBSZWxldmFudCBvbmx5IGlmIG1hcCB0eXBlIGNvbnRyb2xzIGFyZSBlbmFibGVkLiAKCW1hcCA9IGRlZmF1bHQgbWFwLiBzYXRlbGxpdGUgPSBzYXRlbGxpdGUgdmlldy4gaHlicmlkID0gaHlicmlkIHZpZXcuJzsKJGxhbmdbJ2hlbHBfcGFyYW1fdHlwZV9jb250cm9scyddID0gJ1VzZSBcJzFcJyBlbmFibGUgdGhlIG1hcCB0eXBlIGNvbnRyb2xzIChtYXAvc2F0ZWxsaXRlL2h5YnJpZCknOwokbGFuZ1snaGVscF9wYXJhbV93aWR0aCddID0gJ1NldHMgdGhlIHdpZHRoIG9mIHRoZSBtYXAgd2luZG93LiBUaGlzIGNhbiBiZSBlaXRoZXIgcHggb3IgJS4nOwokbGFuZ1snaGVscF9wYXJhbV96b29tJ10gPSAnVGhpcyBzZXRzIHRoZSBtYXAgem9vbSBsZXZlbC4nOwokbGFuZ1snaGVscF9wYXJhbV96b29tX2VuY29tcGFzcyddID0gJ1VzZSBcJzFcJyB0byBlbmFibGUgdGhlIHpvb20gZW5jb21wYXNzIHNvIG1hcCB6b29tIGlzIGFzIHNtYWxsIGFzIHBvc3NpYmxlCiAgICAgICAgYW5kIGluY2x1ZGUgYWxsIG1hcCBtYXJrZXJzLic7CgovL3RhYmxlIGZpZWxkcwokbGFuZ1sndF9uYW1lJ10gPSAnTmFtZSc7CiRsYW5nWyd0X2JlbG9uZ3NfdG8nXSA9ICdCZWxvbmdzIHRvIG1hcCc7CiRsYW5nWyd0X2Rlc2NyaXB0aW9uJ10gPSAnRGVzY3JpcHRpb24nOwokbGFuZ1snY2VudGVyX2xhdCddID0gJ0RlZmF1bHQgY2VudGVyIGxhdGl0dWRlJzsKJGxhbmdbJ2NlbnRlcl9sb24nXSA9ICdEZWZhdWx0IGNlbnRlciBsb25naXR1ZGUnOwokbGFuZ1sndF90eXBlJ10gPSAnRGlzcGxheSB0eXBlJzsKJGxhbmdbJ3Rfd2lkdGgnXSA9ICdXaWR0aCc7CiRsYW5nWyd0X2hlaWdodCddID0gJ0hlaWdodCc7CiRsYW5nWyd0X2NvbnRyb2xzJ10gPSAnRW5hYmxlIGNvbnRyb2xzJzsKJGxhbmdbJ3RfY29udHJvbHNfc2l6ZSddID0gJ0NvbnRyb2xzIHNpemUnOwokbGFuZ1sndF9zaWRlYmFyJ10gPSAnU2lkZWJhciBmb3IgbWFya2Vycyc7CiRsYW5nWyd0X3R5cGVfY29udHJvbHMnXSA9ICdEaXNwbGF5IHR5cGUgY29udHJvbHMgZW5hYmxlZCc7CiRsYW5nWyd0X2RpcmVjdGlvbnMnXSA9ICdTaG93IGRpcmVjdGlvbnMnOwokbGFuZ1sndF96b29tJ10gPSAnWm9vbSBsZXZlbCc7CiRsYW5nWyd0X3pvb21fZW5jb21wYXNzJ10gPSAnVHJ5IHRvIGZpdCBhbGwgbWFya2Vycyc7CiRsYW5nWyd0X2JvdW5kc19mdWRnZSddID0gJ0JvdW5kc19mdWRnZSc7CiRsYW5nWyd0X2luZm9fd2luZG93J10gPSAnRW5hYmxlIG1hcmtlciBpbmZvIHdpbmRvd3MnOwokbGFuZ1sndF9pbmZvX3RyaWdnZXInXSA9ICdJbmZvIHdpbmRvdyB0cmlnZ2VyJzsKCiRsYW5nWyd0X2luZm8nXSA9ICdNYXJrZXIgaW5mbyAoaHRtbCBhbGxvd2VkKSc7CiRsYW5nWyd0X2xhbiddID0gJ0xhdGl0dWRlJzsKJGxhbmdbJ3RfbG9uJ10gPSAnTG9uZ2l0dWRlJzsKJGxhbmdbJ3RfaWNvbiddID0gJ01hcmtlciBpY29uJzsKJGxhbmdbJ3RfYWRkcmVzcyddID0gJ01hcmtlciBhZGRyZXNzJzsKPz4K]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/GoogleMapAPI-2.0/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/GoogleMapAPI-2.0/COPYING.lib</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[CQkgIEdOVSBMRVNTRVIgR0VORVJBTCBQVUJMSUMgTElDRU5TRQoJCSAgICAgICBWZXJzaW9uIDIuMSwgRmVicnVhcnkgMTk5OQoKIENvcHlyaWdodCAoQykgMTk5MSwgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICAgICA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgoKW1RoaXMgaXMgdGhlIGZpcnN0IHJlbGVhc2VkIHZlcnNpb24gb2YgdGhlIExlc3NlciBHUEwuICBJdCBhbHNvIGNvdW50cwogYXMgdGhlIHN1Y2Nlc3NvciBvZiB0aGUgR05VIExpYnJhcnkgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgaGVuY2UKIHRoZSB2ZXJzaW9uIG51bWJlciAyLjEuXQoKCQkJICAgIFByZWFtYmxlCgogIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKTGljZW5zZXMgYXJlIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZQpmcmVlIHNvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuCgogIFRoaXMgbGljZW5zZSwgdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIHNvbWUKc3BlY2lhbGx5IGRlc2lnbmF0ZWQgc29mdHdhcmUgcGFja2FnZXMtLXR5cGljYWxseSBsaWJyYXJpZXMtLW9mIHRoZQpGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIG90aGVyIGF1dGhvcnMgd2hvIGRlY2lkZSB0byB1c2UgaXQuICBZb3UKY2FuIHVzZSBpdCB0b28sIGJ1dCB3ZSBzdWdnZXN0IHlvdSBmaXJzdCB0aGluayBjYXJlZnVsbHkgYWJvdXQgd2hldGhlcgp0aGlzIGxpY2Vuc2Ugb3IgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgdGhlIGJldHRlcgpzdHJhdGVneSB0byB1c2UgaW4gYW55IHBhcnRpY3VsYXIgY2FzZSwgYmFzZWQgb24gdGhlIGV4cGxhbmF0aW9ucyBiZWxvdy4KCiAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20gb2YgdXNlLApub3QgcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0CnlvdSBoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UKZm9yIHRoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCk7IHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldAppdCBpZiB5b3Ugd2FudCBpdDsgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgYW5kIHVzZSBwaWVjZXMgb2YKaXQgaW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBhcmUgaW5mb3JtZWQgdGhhdCB5b3UgY2FuIGRvCnRoZXNlIHRoaW5ncy4KCiAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZApkaXN0cmlidXRvcnMgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZXNlCnJpZ2h0cy4gIFRoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvcgp5b3UgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBsaWJyYXJ5IG9yIGlmIHlvdSBtb2RpZnkgaXQuCgogIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnksIHdoZXRoZXIgZ3JhdGlzCm9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHdlIGdhdmUKeW91LiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlIHNvdXJjZQpjb2RlLiAgSWYgeW91IGxpbmsgb3RoZXIgY29kZSB3aXRoIHRoZSBsaWJyYXJ5LCB5b3UgbXVzdCBwcm92aWRlCmNvbXBsZXRlIG9iamVjdCBmaWxlcyB0byB0aGUgcmVjaXBpZW50cywgc28gdGhhdCB0aGV5IGNhbiByZWxpbmsgdGhlbQp3aXRoIHRoZSBsaWJyYXJ5IGFmdGVyIG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBsaWJyYXJ5IGFuZCByZWNvbXBpbGluZwppdC4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyIHJpZ2h0cy4KCiAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIGEgdHdvLXN0ZXAgbWV0aG9kOiAoMSkgd2UgY29weXJpZ2h0IHRoZQpsaWJyYXJ5LCBhbmQgKDIpIHdlIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2UsIHdoaWNoIGdpdmVzIHlvdSBsZWdhbApwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgbGlicmFyeS4KCiAgVG8gcHJvdGVjdCBlYWNoIGRpc3RyaWJ1dG9yLCB3ZSB3YW50IHRvIG1ha2UgaXQgdmVyeSBjbGVhciB0aGF0CnRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgZnJlZSBsaWJyYXJ5LiAgQWxzbywgaWYgdGhlIGxpYnJhcnkgaXMKbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHRoZSByZWNpcGllbnRzIHNob3VsZCBrbm93CnRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCB2ZXJzaW9uLCBzbyB0aGF0IHRoZSBvcmlnaW5hbAphdXRob3IncyByZXB1dGF0aW9uIHdpbGwgbm90IGJlIGFmZmVjdGVkIGJ5IHByb2JsZW1zIHRoYXQgbWlnaHQgYmUKaW50cm9kdWNlZCBieSBvdGhlcnMuCgwKICBGaW5hbGx5LCBzb2Z0d2FyZSBwYXRlbnRzIHBvc2UgYSBjb25zdGFudCB0aHJlYXQgdG8gdGhlIGV4aXN0ZW5jZSBvZgphbnkgZnJlZSBwcm9ncmFtLiAgV2Ugd2lzaCB0byBtYWtlIHN1cmUgdGhhdCBhIGNvbXBhbnkgY2Fubm90CmVmZmVjdGl2ZWx5IHJlc3RyaWN0IHRoZSB1c2VycyBvZiBhIGZyZWUgcHJvZ3JhbSBieSBvYnRhaW5pbmcgYQpyZXN0cmljdGl2ZSBsaWNlbnNlIGZyb20gYSBwYXRlbnQgaG9sZGVyLiAgVGhlcmVmb3JlLCB3ZSBpbnNpc3QgdGhhdAphbnkgcGF0ZW50IGxpY2Vuc2Ugb2J0YWluZWQgZm9yIGEgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBtdXN0IGJlCmNvbnNpc3RlbnQgd2l0aCB0aGUgZnVsbCBmcmVlZG9tIG9mIHVzZSBzcGVjaWZpZWQgaW4gdGhpcyBsaWNlbnNlLgoKICBNb3N0IEdOVSBzb2Z0d2FyZSwgaW5jbHVkaW5nIHNvbWUgbGlicmFyaWVzLCBpcyBjb3ZlcmVkIGJ5IHRoZQpvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgbGljZW5zZSwgdGhlIEdOVSBMZXNzZXIKR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXBwbGllcyB0byBjZXJ0YWluIGRlc2lnbmF0ZWQgbGlicmFyaWVzLCBhbmQKaXMgcXVpdGUgZGlmZmVyZW50IGZyb20gdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBXZSB1c2UKdGhpcyBsaWNlbnNlIGZvciBjZXJ0YWluIGxpYnJhcmllcyBpbiBvcmRlciB0byBwZXJtaXQgbGlua2luZyB0aG9zZQpsaWJyYXJpZXMgaW50byBub24tZnJlZSBwcm9ncmFtcy4KCiAgV2hlbiBhIHByb2dyYW0gaXMgbGlua2VkIHdpdGggYSBsaWJyYXJ5LCB3aGV0aGVyIHN0YXRpY2FsbHkgb3IgdXNpbmcKYSBzaGFyZWQgbGlicmFyeSwgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSB0d28gaXMgbGVnYWxseSBzcGVha2luZyBhCmNvbWJpbmVkIHdvcmssIGEgZGVyaXZhdGl2ZSBvZiB0aGUgb3JpZ2luYWwgbGlicmFyeS4gIFRoZSBvcmRpbmFyeQpHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHRoZXJlZm9yZSBwZXJtaXRzIHN1Y2ggbGlua2luZyBvbmx5IGlmIHRoZQplbnRpcmUgY29tYmluYXRpb24gZml0cyBpdHMgY3JpdGVyaWEgb2YgZnJlZWRvbS4gIFRoZSBMZXNzZXIgR2VuZXJhbApQdWJsaWMgTGljZW5zZSBwZXJtaXRzIG1vcmUgbGF4IGNyaXRlcmlhIGZvciBsaW5raW5nIG90aGVyIGNvZGUgd2l0aAp0aGUgbGlicmFyeS4KCiAgV2UgY2FsbCB0aGlzIGxpY2Vuc2UgdGhlICJMZXNzZXIiIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYmVjYXVzZSBpdApkb2VzIExlc3MgdG8gcHJvdGVjdCB0aGUgdXNlcidzIGZyZWVkb20gdGhhbiB0aGUgb3JkaW5hcnkgR2VuZXJhbApQdWJsaWMgTGljZW5zZS4gIEl0IGFsc28gcHJvdmlkZXMgb3RoZXIgZnJlZSBzb2Z0d2FyZSBkZXZlbG9wZXJzIExlc3MKb2YgYW4gYWR2YW50YWdlIG92ZXIgY29tcGV0aW5nIG5vbi1mcmVlIHByb2dyYW1zLiAgVGhlc2UgZGlzYWR2YW50YWdlcwphcmUgdGhlIHJlYXNvbiB3ZSB1c2UgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1hbnkKbGlicmFyaWVzLiAgSG93ZXZlciwgdGhlIExlc3NlciBsaWNlbnNlIHByb3ZpZGVzIGFkdmFudGFnZXMgaW4gY2VydGFpbgpzcGVjaWFsIGNpcmN1bXN0YW5jZXMuCgogIEZvciBleGFtcGxlLCBvbiByYXJlIG9jY2FzaW9ucywgdGhlcmUgbWF5IGJlIGEgc3BlY2lhbCBuZWVkIHRvCmVuY291cmFnZSB0aGUgd2lkZXN0IHBvc3NpYmxlIHVzZSBvZiBhIGNlcnRhaW4gbGlicmFyeSwgc28gdGhhdCBpdCBiZWNvbWVzCmEgZGUtZmFjdG8gc3RhbmRhcmQuICBUbyBhY2hpZXZlIHRoaXMsIG5vbi1mcmVlIHByb2dyYW1zIG11c3QgYmUKYWxsb3dlZCB0byB1c2UgdGhlIGxpYnJhcnkuICBBIG1vcmUgZnJlcXVlbnQgY2FzZSBpcyB0aGF0IGEgZnJlZQpsaWJyYXJ5IGRvZXMgdGhlIHNhbWUgam9iIGFzIHdpZGVseSB1c2VkIG5vbi1mcmVlIGxpYnJhcmllcy4gIEluIHRoaXMKY2FzZSwgdGhlcmUgaXMgbGl0dGxlIHRvIGdhaW4gYnkgbGltaXRpbmcgdGhlIGZyZWUgbGlicmFyeSB0byBmcmVlCnNvZnR3YXJlIG9ubHksIHNvIHdlIHVzZSB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCgogIEluIG90aGVyIGNhc2VzLCBwZXJtaXNzaW9uIHRvIHVzZSBhIHBhcnRpY3VsYXIgbGlicmFyeSBpbiBub24tZnJlZQpwcm9ncmFtcyBlbmFibGVzIGEgZ3JlYXRlciBudW1iZXIgb2YgcGVvcGxlIHRvIHVzZSBhIGxhcmdlIGJvZHkgb2YKZnJlZSBzb2Z0d2FyZS4gIEZvciBleGFtcGxlLCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgR05VIEMgTGlicmFyeSBpbgpub24tZnJlZSBwcm9ncmFtcyBlbmFibGVzIG1hbnkgbW9yZSBwZW9wbGUgdG8gdXNlIHRoZSB3aG9sZSBHTlUKb3BlcmF0aW5nIHN5c3RlbSwgYXMgd2VsbCBhcyBpdHMgdmFyaWFudCwgdGhlIEdOVS9MaW51eCBvcGVyYXRpbmcKc3lzdGVtLgoKICBBbHRob3VnaCB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgTGVzcyBwcm90ZWN0aXZlIG9mIHRoZQp1c2VycycgZnJlZWRvbSwgaXQgZG9lcyBlbnN1cmUgdGhhdCB0aGUgdXNlciBvZiBhIHByb2dyYW0gdGhhdCBpcwpsaW5rZWQgd2l0aCB0aGUgTGlicmFyeSBoYXMgdGhlIGZyZWVkb20gYW5kIHRoZSB3aGVyZXdpdGhhbCB0byBydW4KdGhhdCBwcm9ncmFtIHVzaW5nIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgTGlicmFyeS4KCiAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKbW9kaWZpY2F0aW9uIGZvbGxvdy4gIFBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhCiJ3b3JrIGJhc2VkIG9uIHRoZSBsaWJyYXJ5IiBhbmQgYSAid29yayB0aGF0IHVzZXMgdGhlIGxpYnJhcnkiLiAgVGhlCmZvcm1lciBjb250YWlucyBjb2RlIGRlcml2ZWQgZnJvbSB0aGUgbGlicmFyeSwgd2hlcmVhcyB0aGUgbGF0dGVyIG11c3QKYmUgY29tYmluZWQgd2l0aCB0aGUgbGlicmFyeSBpbiBvcmRlciB0byBydW4uCgwKCQkgIEdOVSBMRVNTRVIgR0VORVJBTCBQVUJMSUMgTElDRU5TRQogICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KCiAgMC4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBhcHBsaWVzIHRvIGFueSBzb2Z0d2FyZSBsaWJyYXJ5IG9yIG90aGVyCnByb2dyYW0gd2hpY2ggY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9yCm90aGVyIGF1dGhvcml6ZWQgcGFydHkgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YKdGhpcyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoYWxzbyBjYWxsZWQgInRoaXMgTGljZW5zZSIpLgpFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KCiAgQSAibGlicmFyeSIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIHNvZnR3YXJlIGZ1bmN0aW9ucyBhbmQvb3IgZGF0YQpwcmVwYXJlZCBzbyBhcyB0byBiZSBjb252ZW5pZW50bHkgbGlua2VkIHdpdGggYXBwbGljYXRpb24gcHJvZ3JhbXMKKHdoaWNoIHVzZSBzb21lIG9mIHRob3NlIGZ1bmN0aW9ucyBhbmQgZGF0YSkgdG8gZm9ybSBleGVjdXRhYmxlcy4KCiAgVGhlICJMaWJyYXJ5IiwgYmVsb3csIHJlZmVycyB0byBhbnkgc3VjaCBzb2Z0d2FyZSBsaWJyYXJ5IG9yIHdvcmsKd2hpY2ggaGFzIGJlZW4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlc2UgdGVybXMuICBBICJ3b3JrIGJhc2VkIG9uIHRoZQpMaWJyYXJ5IiBtZWFucyBlaXRoZXIgdGhlIExpYnJhcnkgb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlcgpjb3B5cmlnaHQgbGF3OiB0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIExpYnJhcnkgb3IgYQpwb3J0aW9uIG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkCnN0cmFpZ2h0Zm9yd2FyZGx5IGludG8gYW5vdGhlciBsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMKaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluIHRoZSB0ZXJtICJtb2RpZmljYXRpb24iLikKCiAgIlNvdXJjZSBjb2RlIiBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYSBsaWJyYXJ5LCBjb21wbGV0ZSBzb3VyY2UgY29kZSBtZWFucwphbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZAppbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24KYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgbGlicmFyeS4KCiAgQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgpydW5uaW5nIGEgcHJvZ3JhbSB1c2luZyB0aGUgTGlicmFyeSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIG91dHB1dCBmcm9tCnN1Y2ggYSBwcm9ncmFtIGlzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQKb24gdGhlIExpYnJhcnkgKGluZGVwZW5kZW50IG9mIHRoZSB1c2Ugb2YgdGhlIExpYnJhcnkgaW4gYSB0b29sIGZvcgp3cml0aW5nIGl0KS4gIFdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgTGlicmFyeSBkb2VzCmFuZCB3aGF0IHRoZSBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgTGlicmFyeSBkb2VzLgogIAogIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIExpYnJhcnkncwpjb21wbGV0ZSBzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdAp5b3UgY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbgphcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdAphbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueQp3YXJyYW50eTsgYW5kIGRpc3RyaWJ1dGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZQpMaWJyYXJ5LgoKICBZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LAphbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhCmZlZS4KDAogIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIExpYnJhcnkgb3IgYW55IHBvcnRpb24Kb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBjb3B5IGFuZApkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKCiAgICBhKSBUaGUgbW9kaWZpZWQgd29yayBtdXN0IGl0c2VsZiBiZSBhIHNvZnR3YXJlIGxpYnJhcnkuCgogICAgYikgWW91IG11c3QgY2F1c2UgdGhlIGZpbGVzIG1vZGlmaWVkIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCiAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgoKICAgIGMpIFlvdSBtdXN0IGNhdXNlIHRoZSB3aG9sZSBvZiB0aGUgd29yayB0byBiZSBsaWNlbnNlZCBhdCBubwogICAgY2hhcmdlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCgogICAgZCkgSWYgYSBmYWNpbGl0eSBpbiB0aGUgbW9kaWZpZWQgTGlicmFyeSByZWZlcnMgdG8gYSBmdW5jdGlvbiBvciBhCiAgICB0YWJsZSBvZiBkYXRhIHRvIGJlIHN1cHBsaWVkIGJ5IGFuIGFwcGxpY2F0aW9uIHByb2dyYW0gdGhhdCB1c2VzCiAgICB0aGUgZmFjaWxpdHksIG90aGVyIHRoYW4gYXMgYW4gYXJndW1lbnQgcGFzc2VkIHdoZW4gdGhlIGZhY2lsaXR5CiAgICBpcyBpbnZva2VkLCB0aGVuIHlvdSBtdXN0IG1ha2UgYSBnb29kIGZhaXRoIGVmZm9ydCB0byBlbnN1cmUgdGhhdCwKICAgIGluIHRoZSBldmVudCBhbiBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgc3VjaCBmdW5jdGlvbiBvcgogICAgdGFibGUsIHRoZSBmYWNpbGl0eSBzdGlsbCBvcGVyYXRlcywgYW5kIHBlcmZvcm1zIHdoYXRldmVyIHBhcnQgb2YKICAgIGl0cyBwdXJwb3NlIHJlbWFpbnMgbWVhbmluZ2Z1bC4KCiAgICAoRm9yIGV4YW1wbGUsIGEgZnVuY3Rpb24gaW4gYSBsaWJyYXJ5IHRvIGNvbXB1dGUgc3F1YXJlIHJvb3RzIGhhcwogICAgYSBwdXJwb3NlIHRoYXQgaXMgZW50aXJlbHkgd2VsbC1kZWZpbmVkIGluZGVwZW5kZW50IG9mIHRoZQogICAgYXBwbGljYXRpb24uICBUaGVyZWZvcmUsIFN1YnNlY3Rpb24gMmQgcmVxdWlyZXMgdGhhdCBhbnkKICAgIGFwcGxpY2F0aW9uLXN1cHBsaWVkIGZ1bmN0aW9uIG9yIHRhYmxlIHVzZWQgYnkgdGhpcyBmdW5jdGlvbiBtdXN0CiAgICBiZSBvcHRpb25hbDogaWYgdGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBpdCwgdGhlIHNxdWFyZQogICAgcm9vdCBmdW5jdGlvbiBtdXN0IHN0aWxsIGNvbXB1dGUgc3F1YXJlIHJvb3RzLikKClRoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKaWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgTGlicmFyeSwKYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCnRoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CmRpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZApvbiB0aGUgTGlicmFyeSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKdGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlCml0LgoKVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0CnlvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bwpleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgTGlicmFyeS4KCkluIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIExpYnJhcnkKd2l0aCB0aGUgTGlicmFyeSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkpIG9uIGEgdm9sdW1lIG9mCmEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCnRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCgogIDMuIFlvdSBtYXkgb3B0IHRvIGFwcGx5IHRoZSB0ZXJtcyBvZiB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljCkxpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UgdG8gYSBnaXZlbiBjb3B5IG9mIHRoZSBMaWJyYXJ5LiAgVG8gZG8KdGhpcywgeW91IG11c3QgYWx0ZXIgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlLCBzbwp0aGF0IHRoZXkgcmVmZXIgdG8gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsCmluc3RlYWQgb2YgdG8gdGhpcyBMaWNlbnNlLiAgKElmIGEgbmV3ZXIgdmVyc2lvbiB0aGFuIHZlcnNpb24gMiBvZiB0aGUKb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaGFzIGFwcGVhcmVkLCB0aGVuIHlvdSBjYW4gc3BlY2lmeQp0aGF0IHZlcnNpb24gaW5zdGVhZCBpZiB5b3Ugd2lzaC4pICBEbyBub3QgbWFrZSBhbnkgb3RoZXIgY2hhbmdlIGluCnRoZXNlIG5vdGljZXMuCgwKICBPbmNlIHRoaXMgY2hhbmdlIGlzIG1hZGUgaW4gYSBnaXZlbiBjb3B5LCBpdCBpcyBpcnJldmVyc2libGUgZm9yCnRoYXQgY29weSwgc28gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gYWxsCnN1YnNlcXVlbnQgY29waWVzIGFuZCBkZXJpdmF0aXZlIHdvcmtzIG1hZGUgZnJvbSB0aGF0IGNvcHkuCgogIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCB3aGVuIHlvdSB3aXNoIHRvIGNvcHkgcGFydCBvZiB0aGUgY29kZSBvZgp0aGUgTGlicmFyeSBpbnRvIGEgcHJvZ3JhbSB0aGF0IGlzIG5vdCBhIGxpYnJhcnkuCgogIDQuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSAob3IgYSBwb3J0aW9uIG9yCmRlcml2YXRpdmUgb2YgaXQsIHVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtCnVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFjY29tcGFueQppdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUsIHdoaWNoCm11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYQptZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2UuCgogIElmIGRpc3RyaWJ1dGlvbiBvZiBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5CmZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlCnNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2Ugc2F0aXNmaWVzIHRoZSByZXF1aXJlbWVudCB0bwpkaXN0cmlidXRlIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90CmNvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCgogIDUuIEEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIG5vIGRlcml2YXRpdmUgb2YgYW55IHBvcnRpb24gb2YgdGhlCkxpYnJhcnksIGJ1dCBpcyBkZXNpZ25lZCB0byB3b3JrIHdpdGggdGhlIExpYnJhcnkgYnkgYmVpbmcgY29tcGlsZWQgb3IKbGlua2VkIHdpdGggaXQsIGlzIGNhbGxlZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIuICBTdWNoIGEKd29yaywgaW4gaXNvbGF0aW9uLCBpcyBub3QgYSBkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnksIGFuZAp0aGVyZWZvcmUgZmFsbHMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgoKICBIb3dldmVyLCBsaW5raW5nIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5CmNyZWF0ZXMgYW4gZXhlY3V0YWJsZSB0aGF0IGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSAoYmVjYXVzZSBpdApjb250YWlucyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSksIHJhdGhlciB0aGFuIGEgIndvcmsgdGhhdCB1c2VzIHRoZQpsaWJyYXJ5Ii4gIFRoZSBleGVjdXRhYmxlIGlzIHRoZXJlZm9yZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KU2VjdGlvbiA2IHN0YXRlcyB0ZXJtcyBmb3IgZGlzdHJpYnV0aW9uIG9mIHN1Y2ggZXhlY3V0YWJsZXMuCgogIFdoZW4gYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHVzZXMgbWF0ZXJpYWwgZnJvbSBhIGhlYWRlciBmaWxlCnRoYXQgaXMgcGFydCBvZiB0aGUgTGlicmFyeSwgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayBtYXkgYmUgYQpkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnkgZXZlbiB0aG91Z2ggdGhlIHNvdXJjZSBjb2RlIGlzIG5vdC4KV2hldGhlciB0aGlzIGlzIHRydWUgaXMgZXNwZWNpYWxseSBzaWduaWZpY2FudCBpZiB0aGUgd29yayBjYW4gYmUKbGlua2VkIHdpdGhvdXQgdGhlIExpYnJhcnksIG9yIGlmIHRoZSB3b3JrIGlzIGl0c2VsZiBhIGxpYnJhcnkuICBUaGUKdGhyZXNob2xkIGZvciB0aGlzIHRvIGJlIHRydWUgaXMgbm90IHByZWNpc2VseSBkZWZpbmVkIGJ5IGxhdy4KCiAgSWYgc3VjaCBhbiBvYmplY3QgZmlsZSB1c2VzIG9ubHkgbnVtZXJpY2FsIHBhcmFtZXRlcnMsIGRhdGEKc3RydWN0dXJlIGxheW91dHMgYW5kIGFjY2Vzc29ycywgYW5kIHNtYWxsIG1hY3JvcyBhbmQgc21hbGwgaW5saW5lCmZ1bmN0aW9ucyAodGVuIGxpbmVzIG9yIGxlc3MgaW4gbGVuZ3RoKSwgdGhlbiB0aGUgdXNlIG9mIHRoZSBvYmplY3QKZmlsZSBpcyB1bnJlc3RyaWN0ZWQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBpcyBsZWdhbGx5IGEgZGVyaXZhdGl2ZQp3b3JrLiAgKEV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhpcyBvYmplY3QgY29kZSBwbHVzIHBvcnRpb25zIG9mIHRoZQpMaWJyYXJ5IHdpbGwgc3RpbGwgZmFsbCB1bmRlciBTZWN0aW9uIDYuKQoKICBPdGhlcndpc2UsIGlmIHRoZSB3b3JrIGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSwgeW91IG1heQpkaXN0cmlidXRlIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gNi4KQW55IGV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhhdCB3b3JrIGFsc28gZmFsbCB1bmRlciBTZWN0aW9uIDYsCndoZXRoZXIgb3Igbm90IHRoZXkgYXJlIGxpbmtlZCBkaXJlY3RseSB3aXRoIHRoZSBMaWJyYXJ5IGl0c2VsZi4KDAogIDYuIEFzIGFuIGV4Y2VwdGlvbiB0byB0aGUgU2VjdGlvbnMgYWJvdmUsIHlvdSBtYXkgYWxzbyBjb21iaW5lIG9yCmxpbmsgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkgdG8gcHJvZHVjZSBhCndvcmsgY29udGFpbmluZyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSwgYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCnVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBwcm92aWRlZCB0aGF0IHRoZSB0ZXJtcyBwZXJtaXQKbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGZvciB0aGUgY3VzdG9tZXIncyBvd24gdXNlIGFuZCByZXZlcnNlCmVuZ2luZWVyaW5nIGZvciBkZWJ1Z2dpbmcgc3VjaCBtb2RpZmljYXRpb25zLgoKICBZb3UgbXVzdCBnaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCBlYWNoIGNvcHkgb2YgdGhlIHdvcmsgdGhhdCB0aGUKTGlicmFyeSBpcyB1c2VkIGluIGl0IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZSBjb3ZlcmVkIGJ5CnRoaXMgTGljZW5zZS4gIFlvdSBtdXN0IHN1cHBseSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAgSWYgdGhlIHdvcmsKZHVyaW5nIGV4ZWN1dGlvbiBkaXNwbGF5cyBjb3B5cmlnaHQgbm90aWNlcywgeW91IG11c3QgaW5jbHVkZSB0aGUKY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIExpYnJhcnkgYW1vbmcgdGhlbSwgYXMgd2VsbCBhcyBhIHJlZmVyZW5jZQpkaXJlY3RpbmcgdGhlIHVzZXIgdG8gdGhlIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAgQWxzbywgeW91IG11c3QgZG8gb25lCm9mIHRoZXNlIHRoaW5nczoKCiAgICBhKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZwogICAgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSBmb3IgdGhlIExpYnJhcnkgaW5jbHVkaW5nIHdoYXRldmVyCiAgICBjaGFuZ2VzIHdlcmUgdXNlZCBpbiB0aGUgd29yayAod2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlcgogICAgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSk7IGFuZCwgaWYgdGhlIHdvcmsgaXMgYW4gZXhlY3V0YWJsZSBsaW5rZWQKICAgIHdpdGggdGhlIExpYnJhcnksIHdpdGggdGhlIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgIndvcmsgdGhhdAogICAgdXNlcyB0aGUgTGlicmFyeSIsIGFzIG9iamVjdCBjb2RlIGFuZC9vciBzb3VyY2UgY29kZSwgc28gdGhhdCB0aGUKICAgIHVzZXIgY2FuIG1vZGlmeSB0aGUgTGlicmFyeSBhbmQgdGhlbiByZWxpbmsgdG8gcHJvZHVjZSBhIG1vZGlmaWVkCiAgICBleGVjdXRhYmxlIGNvbnRhaW5pbmcgdGhlIG1vZGlmaWVkIExpYnJhcnkuICAoSXQgaXMgdW5kZXJzdG9vZAogICAgdGhhdCB0aGUgdXNlciB3aG8gY2hhbmdlcyB0aGUgY29udGVudHMgb2YgZGVmaW5pdGlvbnMgZmlsZXMgaW4gdGhlCiAgICBMaWJyYXJ5IHdpbGwgbm90IG5lY2Vzc2FyaWx5IGJlIGFibGUgdG8gcmVjb21waWxlIHRoZSBhcHBsaWNhdGlvbgogICAgdG8gdXNlIHRoZSBtb2RpZmllZCBkZWZpbml0aW9ucy4pCgogICAgYikgVXNlIGEgc3VpdGFibGUgc2hhcmVkIGxpYnJhcnkgbWVjaGFuaXNtIGZvciBsaW5raW5nIHdpdGggdGhlCiAgICBMaWJyYXJ5LiAgQSBzdWl0YWJsZSBtZWNoYW5pc20gaXMgb25lIHRoYXQgKDEpIHVzZXMgYXQgcnVuIHRpbWUgYQogICAgY29weSBvZiB0aGUgbGlicmFyeSBhbHJlYWR5IHByZXNlbnQgb24gdGhlIHVzZXIncyBjb21wdXRlciBzeXN0ZW0sCiAgICByYXRoZXIgdGhhbiBjb3B5aW5nIGxpYnJhcnkgZnVuY3Rpb25zIGludG8gdGhlIGV4ZWN1dGFibGUsIGFuZCAoMikKICAgIHdpbGwgb3BlcmF0ZSBwcm9wZXJseSB3aXRoIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgaWYKICAgIHRoZSB1c2VyIGluc3RhbGxzIG9uZSwgYXMgbG9uZyBhcyB0aGUgbW9kaWZpZWQgdmVyc2lvbiBpcwogICAgaW50ZXJmYWNlLWNvbXBhdGlibGUgd2l0aCB0aGUgdmVyc2lvbiB0aGF0IHRoZSB3b3JrIHdhcyBtYWRlIHdpdGguCgogICAgYykgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQKICAgIGxlYXN0IHRocmVlIHllYXJzLCB0byBnaXZlIHRoZSBzYW1lIHVzZXIgdGhlIG1hdGVyaWFscwogICAgc3BlY2lmaWVkIGluIFN1YnNlY3Rpb24gNmEsIGFib3ZlLCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZQogICAgdGhhbiB0aGUgY29zdCBvZiBwZXJmb3JtaW5nIHRoaXMgZGlzdHJpYnV0aW9uLgoKICAgIGQpIElmIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5CiAgICBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgb2ZmZXIgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUgYWJvdmUKICAgIHNwZWNpZmllZCBtYXRlcmlhbHMgZnJvbSB0aGUgc2FtZSBwbGFjZS4KCiAgICBlKSBWZXJpZnkgdGhhdCB0aGUgdXNlciBoYXMgYWxyZWFkeSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlc2UKICAgIG1hdGVyaWFscyBvciB0aGF0IHlvdSBoYXZlIGFscmVhZHkgc2VudCB0aGlzIHVzZXIgYSBjb3B5LgoKICBGb3IgYW4gZXhlY3V0YWJsZSwgdGhlIHJlcXVpcmVkIGZvcm0gb2YgdGhlICJ3b3JrIHRoYXQgdXNlcyB0aGUKTGlicmFyeSIgbXVzdCBpbmNsdWRlIGFueSBkYXRhIGFuZCB1dGlsaXR5IHByb2dyYW1zIG5lZWRlZCBmb3IKcmVwcm9kdWNpbmcgdGhlIGV4ZWN1dGFibGUgZnJvbSBpdC4gIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sCnRoZSBtYXRlcmlhbHMgdG8gYmUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IGlzCm5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeSBmb3JtKSB3aXRoIHRoZSBtYWpvcgpjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9uCndoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudCBpdHNlbGYgYWNjb21wYW5pZXMKdGhlIGV4ZWN1dGFibGUuCgogIEl0IG1heSBoYXBwZW4gdGhhdCB0aGlzIHJlcXVpcmVtZW50IGNvbnRyYWRpY3RzIHRoZSBsaWNlbnNlCnJlc3RyaWN0aW9ucyBvZiBvdGhlciBwcm9wcmlldGFyeSBsaWJyYXJpZXMgdGhhdCBkbyBub3Qgbm9ybWFsbHkKYWNjb21wYW55IHRoZSBvcGVyYXRpbmcgc3lzdGVtLiAgU3VjaCBhIGNvbnRyYWRpY3Rpb24gbWVhbnMgeW91IGNhbm5vdAp1c2UgYm90aCB0aGVtIGFuZCB0aGUgTGlicmFyeSB0b2dldGhlciBpbiBhbiBleGVjdXRhYmxlIHRoYXQgeW91CmRpc3RyaWJ1dGUuCgwKICA3LiBZb3UgbWF5IHBsYWNlIGxpYnJhcnkgZmFjaWxpdGllcyB0aGF0IGFyZSBhIHdvcmsgYmFzZWQgb24gdGhlCkxpYnJhcnkgc2lkZS1ieS1zaWRlIGluIGEgc2luZ2xlIGxpYnJhcnkgdG9nZXRoZXIgd2l0aCBvdGhlciBsaWJyYXJ5CmZhY2lsaXRpZXMgbm90IGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSBzdWNoIGEgY29tYmluZWQKbGlicmFyeSwgcHJvdmlkZWQgdGhhdCB0aGUgc2VwYXJhdGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGJhc2VkIG9uCnRoZSBMaWJyYXJ5IGFuZCBvZiB0aGUgb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzIGlzIG90aGVyd2lzZQpwZXJtaXR0ZWQsIGFuZCBwcm92aWRlZCB0aGF0IHlvdSBkbyB0aGVzZSB0d28gdGhpbmdzOgoKICAgIGEpIEFjY29tcGFueSB0aGUgY29tYmluZWQgbGlicmFyeSB3aXRoIGEgY29weSBvZiB0aGUgc2FtZSB3b3JrCiAgICBiYXNlZCBvbiB0aGUgTGlicmFyeSwgdW5jb21iaW5lZCB3aXRoIGFueSBvdGhlciBsaWJyYXJ5CiAgICBmYWNpbGl0aWVzLiAgVGhpcyBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKICAgIFNlY3Rpb25zIGFib3ZlLgoKICAgIGIpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIHRoZSBjb21iaW5lZCBsaWJyYXJ5IG9mIHRoZSBmYWN0CiAgICB0aGF0IHBhcnQgb2YgaXQgaXMgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgZXhwbGFpbmluZwogICAgd2hlcmUgdG8gZmluZCB0aGUgYWNjb21wYW55aW5nIHVuY29tYmluZWQgZm9ybSBvZiB0aGUgc2FtZSB3b3JrLgoKICA4LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IgZGlzdHJpYnV0ZQp0aGUgTGlicmFyeSBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueQphdHRlbXB0IG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IKZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyCnJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuICBIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywKb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcwp0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaCBwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCgogIDkuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdApzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgpkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQptb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKTGlicmFyeSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwp0aGUgTGlicmFyeSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KCiAgMTAuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKTGlicmFyeSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSwgbGluayB3aXRoIG9yIG1vZGlmeSB0aGUgTGlicmFyeQpzdWJqZWN0IHRvIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCnJlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgd2l0aAp0aGlzIExpY2Vuc2UuCgwKICAxMS4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAppbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLApjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCm90aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcwpMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91Cm1heSBub3QgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeSBieQphbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bwpyZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5LgoKSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFueQpwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gYXBwbHksCmFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyIGNpcmN1bXN0YW5jZXMuCgpJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CnBhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CnN1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKaW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0gd2hpY2ggaXMKaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCmdlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKdGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwp0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKaW1wb3NlIHRoYXQgY2hvaWNlLgoKVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCmJlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgoKICAxMi4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBMaWJyYXJ5IGlzIHJlc3RyaWN0ZWQgaW4KY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCm9yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgTGlicmFyeSB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGFkZAphbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nIHRob3NlIGNvdW50cmllcywKc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcgY291bnRyaWVzIG5vdCB0aHVzCmV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmCndyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgoKICAxMy4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcKdmVyc2lvbnMgb2YgdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLgpTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sCmJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KCkVhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIExpYnJhcnkKc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kCiJhbnkgbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQKY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieQp0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIExpYnJhcnkgZG9lcyBub3Qgc3BlY2lmeSBhCmxpY2Vuc2UgdmVyc2lvbiBudW1iZXIsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5CnRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCgwKICAxNC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIExpYnJhcnkgaW50byBvdGhlciBmcmVlCnByb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGVzZSwKd3JpdGUgdG8gdGhlIGF1dGhvciB0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMKY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUKU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzIG1ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91cgpkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzIG9mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzCm9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQgb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nCmFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCgoJCQkgICAgTk8gV0FSUkFOVFkKCiAgMTUuIEJFQ0FVU0UgVEhFIExJQlJBUlkgSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PCldBUlJBTlRZIEZPUiBUSEUgTElCUkFSWSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuCkVYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SCk9USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgTElCUkFSWSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCktJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQpJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFCkxJQlJBUlkgSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFIExJQlJBUlkgUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FClRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KCiAgMTYuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4KV1JJVElORyBXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkKQU5EL09SIFJFRElTVFJJQlVURSBUSEUgTElCUkFSWSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UKRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUgpDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRQpMSUJSQVJZIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HClJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBCkZBSUxVUkUgT0YgVEhFIExJQlJBUlkgVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBTT0ZUV0FSRSksIEVWRU4gSUYKU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSApEQU1BR0VTLgoKCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUwo=]]></data>
	</file>
	<file>
	  <filename>/lib/GoogleMapAPI-2.0/GoogleMapAPI.class.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBQcm9qZWN0OiAgICAgR29vZ2xlTWFwQVBJOiBhIFBIUCBsaWJyYXJ5IGludGVmYWNlIHRvIHRoZSBHb29nbGUgTWFwIEFQSQogKiBGaWxlOiAgICAgICAgR29vZ2xlTWFwQVBJLmNsYXNzLnBocAogKiAKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqCiAqIEZvciBxdWVzdGlvbnMsIGhlbHAsIGNvbW1lbnRzLCBkaXNjdXNzaW9uLCBldGMuLCBwbGVhc2Ugam9pbiB0aGUKICogU21hcnR5IG1haWxpbmcgbGlzdC4gU2VuZCBhIGJsYW5rIGUtbWFpbCB0bwogKiBzbWFydHktZ2VuZXJhbC1zdWJzY3JpYmVAbGlzdHMucGhwLm5ldAogKgogKiBAbGluayBodHRwOi8vd3d3LnBocGluc2lkZXIuY29tL3BocC9jb2RlL0dvb2dsZU1hcEFQSS8KICogQGNvcHlyaWdodCAyMDA1IE5ldyBEaWdpdGFsIEdyb3VwLCBJbmMuCiAqIEBhdXRob3IgTW9udGUgT2hydCA8bW9udGUgYXQgb2hydCBkb3QgY29tPgogKiBAcGFja2FnZSBHb29nbGVNYXBBUEkKICogQHZlcnNpb24gMi4wCiAqLwoKLyogJElkOiBHb29nbGVNYXBBUEkuY2xhc3MucGhwLHYgMS4zNyAyMDA2LzA0LzI2IDE0OjI4OjIzIGNsYXJrIEV4cCAkICovCgovKgoKRm9yIGJlc3QgcmVzdWx0cyB3aXRoIEdvb2dsZU1hcHMsIHVzZSBYSFRNTCBjb21wbGlhbnQgd2ViIHBhZ2VzIHdpdGggdGhpcyBoZWFkZXI6Cgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWxuczp2PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOnZtbCI+CgpGb3IgZGF0YWJhc2UgY2FjaGluZywgeW91IHdpbGwgd2FudCB0byB1c2UgdGhpcyBzY2hlbWE6CgpDUkVBVEUgVEFCTEUgR0VPQ09ERVMgKAogIGFkZHJlc3MgdmFyY2hhcigyNTUpIE5PVCBOVUxMIGRlZmF1bHQgJycsCiAgbG9uIGZsb2F0IGRlZmF1bHQgTlVMTCwKICBsYXQgZmxvYXQgZGVmYXVsdCBOVUxMLAogIFBSSU1BUlkgS0VZICAoYWRkcmVzcykKKTsKCiovCgpjbGFzcyBHb29nbGVNYXBBUEkgewoKICAgIC8qKgogICAgICogUEVBUjo6REIgRFNOIGZvciBnZW9jb2RlIGNhY2hpbmcuIGV4YW1wbGU6CiAgICAgKiAkZHNuID0gJ215c3FsOi8vdXNlcjpwYXNzQGxvY2FsaG9zdC9kYm5hbWUnOwogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHZhciAkZHNuID0gbnVsbDsKICAgIAogICAgLyoqCiAgICAgKiBZT1VSIEdvb2dsTWFwIEFQSSBLRVkgZm9yIHlvdXIgc2l0ZS4KICAgICAqIChodHRwOi8vbWFwcy5nb29nbGUuY29tL2FwaXMvbWFwcy9zaWdudXAuaHRtbCkKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICB2YXIgJGFwaV9rZXkgPSAnJzsKCiAgICAvKioKICAgICAqIGN1cnJlbnQgbWFwIGlkLCBzZXQgd2hlbiB5b3UgaW5zdGFudGlhdGUKICAgICAqIHRoZSBHb29nbGVNYXBBUEkgb2JqZWN0LgogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHZhciAkbWFwX2lkID0gbnVsbDsKCiAgICAvKioKICAgICAqIHNpZGViYXIgPGRpdj4gdXNlZCBhbG9uZyB3aXRoIHRoaXMgbWFwLgogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHZhciAkc2lkZWJhcl9pZCA9IG51bGw7ICAgIAogICAgCiAgICAvKioKICAgICAqIEdvb2dsZU1hcEFQSSB1c2VzIHRoZSBZYWhvbyBnZW9jb2RlIGxvb2t1cCBBUEkuCiAgICAgKiBUaGlzIGlzIHRoZSBhcHBsaWNhdGlvbiBJRCBmb3IgWU9VUiBhcHBsaWNhdGlvbi4KICAgICAqIFRoaXMgaXMgc2V0IHVwb24gaW5zdGFudGlhdGluZyB0aGUgR29vZ2xlTWFwQVBJIG9iamVjdC4KICAgICAqIChodHRwOi8vZGV2ZWxvcGVyLnlhaG9vLm5ldC9mYXEvaW5kZXguaHRtbCNhcHBpZCkKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICB2YXIgJGFwcF9pZCA9IG51bGw7CgogICAgLyoqCiAgICAgKiB1c2Ugb25Mb2FkKCkgdG8gbG9hZCB0aGUgbWFwIGphdmFzY3JpcHQuCiAgICAgKiBpZiBlbmFibGVkLCBiZSBzdXJlIHRvIGluY2x1ZGUgb24geW91ciB3ZWJwYWdlOgogICAgICogPGh0bWwgb25sb2FkPSJvbkxvYWQoKSI+CiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgdmFyICRvbmxvYWQgPSB0cnVlOwogICAgCiAgICAvKioKICAgICAqIG1hcCBjZW50ZXIgbGF0aXR1ZGUgKGhvcml6b250YWwpCiAgICAgKiBjYWxjdWxhdGVkIGF1dG9tYXRpY2FsbHkgYXMgbWFya2VycwogICAgICogYXJlIGFkZGVkIHRvIHRoZSBtYXAuCiAgICAgKgogICAgICogQHZhciBmbG9hdAogICAgICovCiAgICB2YXIgJGNlbnRlcl9sYXQgPSBudWxsOwoKICAgIC8qKgogICAgICogbWFwIGNlbnRlciBsb25naXR1ZGUgKHZlcnRpY2FsKQogICAgICogY2FsY3VsYXRlZCBhdXRvbWF0aWNhbGx5IGFzIG1hcmtlcnMKICAgICAqIGFyZSBhZGRlZCB0byB0aGUgbWFwLgogICAgICoKICAgICAqIEB2YXIgZmxvYXQKICAgICAqLwogICAgdmFyICRjZW50ZXJfbG9uID0gbnVsbDsKICAgIAogICAgLyoqCiAgICAgKiBlbmFibGVzIG1hcCBjb250cm9scyAoem9vbS9tb3ZlL2NlbnRlcikKICAgICAqCiAgICAgKiBAdmFyIGJvb2xlYW4KICAgICAqLwogICAgdmFyICRtYXBfY29udHJvbHMgPSB0cnVlOwoKICAgIC8qKgogICAgICogZGV0ZXJtaW5lcyB0aGUgbWFwIGNvbnRyb2wgdHlwZQogICAgICogc21hbGwgLT4gc2hvdyBtb3ZlL2NlbnRlciBjb250cm9scwogICAgICogbGFyZ2UgLT4gc2hvdyBtb3ZlL2NlbnRlci96b29tIGNvbnRyb2xzCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgdmFyICRjb250cm9sX3NpemUgPSAnbGFyZ2UnOwogICAgCiAgICAvKioKICAgICAqIGVuYWJsZXMgbWFwIHR5cGUgY29udHJvbHMgKG1hcC9zYXRlbGxpdGUvaHlicmlkKQogICAgICoKICAgICAqIEB2YXIgYm9vbGVhbgogICAgICovCiAgICB2YXIgJHR5cGVfY29udHJvbHMgPSB0cnVlOwoKICAgIC8qKgogICAgICogZGVmYXVsdCBtYXAgdHlwZSAoR19OT1JNQUxfTUFQL0dfU0FURUxMSVRFX01BUC9HX0hZQlJJRF9NQVApCiAgICAgKgogICAgICogQHZhciBib29sZWFuCiAgICAgKi8KICAgIHZhciAkbWFwX3R5cGUgPSAnR19OT1JNQUxfTUFQJzsKICAgICAgICAKICAgIC8qKgogICAgICogZGV0ZXJtaW5lcyB0aGUgZGVmYXVsdCB6b29tIGxldmVsCiAgICAgKgogICAgICogQHZhciBpbnRlZ2VyCiAgICAgKi8KICAgIHZhciAkem9vbSA9IDE2OwoKICAgIC8qKgogICAgICogZGV0ZXJtaW5lcyB0aGUgbWFwIHdpZHRoCiAgICAgKgogICAgICogQHZhciBpbnRlZ2VyCiAgICAgKi8KICAgIHZhciAkd2lkdGggPSAnNTAwcHgnOwogICAgCiAgICAvKioKICAgICAqIGRldGVybWluZXMgdGhlIG1hcCBoZWlnaHQKICAgICAqCiAgICAgKiBAdmFyIGludGVnZXIKICAgICAqLwogICAgdmFyICRoZWlnaHQgPSAnNTAwcHgnOwoKICAgIC8qKgogICAgICogbWVzc2FnZSB0aGF0IHBvcHMgdXAgd2hlbiB0aGUgYnJvd3NlciBpcyBpbmNvbXBhdGlibGUgd2l0aCBHb29nbGUgTWFwcy4KICAgICAqIHNldCB0byBlbXB0eSBzdHJpbmcgdG8gZGlzYWJsZS4KICAgICAqCiAgICAgKiBAdmFyIGludGVnZXIKICAgICAqLwogICAgdmFyICRicm93c2VyX2FsZXJ0ID0gJ1NvcnJ5LCB0aGUgR29vZ2xlIE1hcHMgQVBJIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhpcyBicm93c2VyLic7CiAgICAKICAgIC8qKgogICAgICogbWVzc2FnZSB0aGF0IGFwcGVhcnMgd2hlbiBqYXZhc2NyaXB0IGlzIGRpc2FibGVkLgogICAgICogc2V0IHRvIGVtcHR5IHN0cmluZyB0byBkaXNhYmxlLgogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHZhciAkanNfYWxlcnQgPSAnPGI+SmF2YXNjcmlwdCBtdXN0IGJlIGVuYWJsZWQgaW4gb3JkZXIgdG8gdXNlIEdvb2dsZSBNYXBzLjwvYj4nOwoKICAgIC8qKgogICAgICogZGV0ZXJtaW5lcyBpZiBzaWRlYmFyIGlzIGVuYWJsZWQKICAgICAqCiAgICAgKiBAdmFyIGJvb2xlYW4KICAgICAqLwogICAgdmFyICRzaWRlYmFyID0gdHJ1ZTsgICAgCgogICAgLyoqCiAgICAgKiBkZXRlcm1pbmVzIGlmIHRvL2Zyb20gZGlyZWN0aW9ucyBhcmUgaW5jbHVkZWQgaW5zaWRlIGluZm8gd2luZG93CiAgICAgKgogICAgICogQHZhciBib29sZWFuCiAgICAgKi8KICAgIHZhciAkZGlyZWN0aW9ucyA9IHRydWU7CgogICAgLyoqCiAgICAgKiBkZXRlcm1pbmVzIGlmIG1hcCBtYXJrZXJzIGJyaW5nIHVwIGFuIGluZm8gd2luZG93CiAgICAgKgogICAgICogQHZhciBib29sZWFuCiAgICAgKi8KICAgIHZhciAkaW5mb193aW5kb3cgPSB0cnVlOyAgICAKICAgIAogICAgLyoqCiAgICAgKiBkZXRlcm1pbmVzIGlmIGluZm8gd2luZG93IGFwcGVhcnMgd2l0aCBhIGNsaWNrIG9yIG1vdXNlb3ZlcgogICAgICoKICAgICAqIEB2YXIgc3RyaW5nIGNsaWNrL21vdXNlb3ZlcgogICAgICovCiAgICB2YXIgJHdpbmRvd190cmlnZ2VyID0gJ2NsaWNrJzsgICAgCgogICAgLyoqCiAgICAgKiB3aGF0IHNlcnZlciBnZW9jb2RlIGxvb2t1cHMgY29tZSBmcm9tCiAgICAgKgogICAgICogYXZhaWxhYmxlOiBZQUhPTyAgWWFob28hIEFQSS4gVVMgZ2VvY29kZSBsb29rdXBzIG9ubHkuCiAgICAgKiAgICAgICAgICAgIEdPT0dMRSBHb29nbGUgTWFwcy4gVGhpcyBjYW4gZG8gaW50ZXJuYXRpb25hbCBsb29rdXBzLAogICAgICogICAgICAgICAgICAgICAgICAgYnV0IG5vdCBhbiBvZmZpY2lhbCBBUEkgc2VydmljZSBzbyB1c2UgYXQgeW91ciBvd24gcmlzay4KICAgICAqICAgICAgICAgICAgICAgICAgIE5vIGd1YXJhbnRlZXMgb24gdGhlIHJlc3VsdHMgOikKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZyBzZXJ2aWNlIG5hbWUKICAgICAqLwogICAgdmFyICRsb29rdXBfc2VydmljZSA9ICdZQUhPTyc7CiAgICAKICAgIHZhciAkZHJpdmluZ19kaXJfdGV4dCA9IGFycmF5KAogICAgICAgICAgICAnZGlyX3RvJyA9PiAnU3RhcnQgYWRkcmVzczogKGluY2x1ZGUgYWRkciwgY2l0eSBzdC9yZWdpb24pJywKICAgICAgICAgICAgJ3RvX2J1dHRvbl92YWx1ZScgPT4gJ0dldCBEaXJlY3Rpb25zJywKICAgICAgICAgICAgJ3RvX2J1dHRvbl90eXBlJyA9PiAnc3VibWl0JywKICAgICAgICAgICAgJ2Rpcl9mcm9tJyA9PiAnRW5kIGFkZHJlc3M6IChpbmNsdWRlIGFkZHIsIGNpdHkgc3QvcmVnaW9uKScsCiAgICAgICAgICAgICdmcm9tX2J1dHRvbl92YWx1ZScgPT4gJ0dldCBEaXJlY3Rpb25zJywKICAgICAgICAgICAgJ2Zyb21fYnV0dG9uX3R5cGUnID0+ICdzdWJtaXQnLAogICAgICAgICAgICAnZGlyX3RleHQnID0+ICdEaXJlY3Rpb25zOiAnLAogICAgICAgICAgICAnZGlyX3RvaGVyZScgPT4gJ1RvIGhlcmUnLAogICAgICAgICAgICAnZGlyX2Zyb21oZXJlJyA9PiAnRnJvbSBoZXJlJwogICAgICAgICAgICApOyAgICAgICAgICAgICAKICAgICAgICAgICAgICAgCiAgICAKICAgIC8qKgogICAgICogdmVyc2lvbiBudW1iZXIKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICB2YXIgJF92ZXJzaW9uID0gJzIuMCc7CgogICAgLyoqCiAgICAgKiBsaXN0IG9mIGFkZGVkIG1hcmtlcnMKICAgICAqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHZhciAkX21hcmtlcnMgPSBhcnJheSgpOwogICAgCiAgICAvKioKICAgICAqIG1heGltdW0gbG9uZ2l0dWRlIG9mIGFsbCBtYXJrZXJzCiAgICAgKiAKICAgICAqIEB2YXIgZmxvYXQKICAgICAqLwogICAgdmFyICRfbWF4X2xvbiA9IC0xMDAwMDAwOwogICAgCiAgICAvKioKICAgICAqIG1pbmltdW0gbG9uZ2l0dWRlIG9mIGFsbCBtYXJrZXJzCiAgICAgKgogICAgICogQHZhciBmbG9hdAogICAgICovCiAgICB2YXIgJF9taW5fbG9uID0gMTAwMDAwMDsKICAgIAogICAgLyoqCiAgICAgKiBtYXggbGF0aXR1ZGUKICAgICAqCiAgICAgKiBAdmFyIGZsb2F0CiAgICAgKi8KICAgIHZhciAkX21heF9sYXQgPSAtMTAwMDAwMDsKICAgIAogICAgLyoqCiAgICAgKiBtaW4gbGF0aXR1ZGUKICAgICAqCiAgICAgKiBAdmFyIGZsb2F0CiAgICAgKi8KICAgIHZhciAkX21pbl9sYXQgPSAxMDAwMDAwOwogICAgCiAgICAvKioKICAgICAqIGRldGVybWluZXMgaWYgd2Ugc2hvdWxkIHpvb20gdG8gbWluaW11bSBsZXZlbCAoYWJvdmUgdGhpcy0+em9vbSB2YWx1ZSkgdGhhdCB3aWxsIGVuY29tcGFzcyBhbGwgbWFya2VycwogICAgICoKICAgICAqIEB2YXIgYm9vbGVhbgogICAgICovCiAgICB2YXIgJHpvb21fZW5jb21wYXNzID0gdHJ1ZTsKCiAgICAvKioKICAgICAqIGZhY3RvciBieSB3aGljaCB0byBmdWRnZSB0aGUgYm91bmRhcmllcyBzbyB0aGF0IHdoZW4gd2Ugem9vbSBlbmNvbXBhc3MsIHRoZSBtYXJrZXJzIGFyZW4ndCB0b28gY2xvc2UgdG8gdGhlIGVkZ2UKICAgICAqCiAgICAgKiBAdmFyIGZsb2F0CiAgICAgKi8KICAgIHZhciAkYm91bmRzX2Z1ZGdlID0gMC4wMTsKCiAgICAvKioKICAgICAqIGxpc3Qgb2YgYWRkZWQgcG9seWxpbmVzCiAgICAgKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICB2YXIgJF9wb2x5bGluZXMgPSBhcnJheSgpOyAgICAKICAgIAogICAgLyoqCiAgICAgKiBpY29uIGluZm8gYXJyYXkKICAgICAqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHZhciAkX2ljb25zID0gYXJyYXkoKTsKICAgIAogICAgICAgIAogICAgLyoqCiAgICAgKiBjbGFzcyBjb25zdHJ1Y3RvcgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1hcF9pZCB0aGUgaWQgZm9yIHRoaXMgbWFwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhcHBfaWQgWU9VUiBZYWhvbyBBcHAgSUQKICAgICAqLwogICAgZnVuY3Rpb24gR29vZ2xlTWFwQVBJKCRtYXBfaWQgPSAnbWFwJywgJGFwcF9pZCA9ICdNeU1hcEFwcCcpIHsKICAgICAgICAkdGhpcy0+bWFwX2lkID0gJG1hcF9pZDsKICAgICAgICAkdGhpcy0+c2lkZWJhcl9pZCA9ICdzaWRlYmFyXycgLiAkbWFwX2lkOwogICAgICAgICR0aGlzLT5hcHBfaWQgPSAkYXBwX2lkOwogICAgfQogICAKICAgIC8qKgogICAgICogc2V0cyB0aGUgUEVBUjo6REIgZHNuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZHNuCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldERTTigkZHNuKSB7CiAgICAgICAgJHRoaXMtPmRzbiA9ICRkc247ICAgCiAgICB9CiAgICAKICAgIC8qKgogICAgICogc2V0cyBZT1VSIEdvb2dsZSBNYXAgQVBJIGtleQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICovCiAgICBmdW5jdGlvbiBzZXRBUElLZXkoJGtleSkgewogICAgICAgICR0aGlzLT5hcGlfa2V5ID0gJGtleTsgICAKICAgIH0KCiAgICAvKioKICAgICAqIHNldHMgdGhlIHdpZHRoIG9mIHRoZSBtYXAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR3aWR0aAogICAgICovCiAgICBmdW5jdGlvbiBzZXRXaWR0aCgkd2lkdGgpIHsKICAgICAgICBpZighcHJlZ19tYXRjaCgnIV4oXGQrKSguKikkIScsJHdpZHRoLCRfbWF0Y2gpKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgICRfd2lkdGggPSAkX21hdGNoWzFdOwogICAgICAgICRfdHlwZSA9ICRfbWF0Y2hbMl07CiAgICAgICAgaWYoJF90eXBlID09ICclJykKICAgICAgICAgICAgJHRoaXMtPndpZHRoID0gJF93aWR0aCAuICclJzsKICAgICAgICBlbHNlCiAgICAgICAgICAgICR0aGlzLT53aWR0aCA9ICRfd2lkdGggLiAncHgnOwogICAgICAgIAogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogc2V0cyB0aGUgaGVpZ2h0IG9mIHRoZSBtYXAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRoZWlnaHQKICAgICAqLwogICAgZnVuY3Rpb24gc2V0SGVpZ2h0KCRoZWlnaHQpIHsKICAgICAgICBpZighcHJlZ19tYXRjaCgnIV4oXGQrKSguKikkIScsJGhlaWdodCwkX21hdGNoKSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICAkX2hlaWdodCA9ICRfbWF0Y2hbMV07CiAgICAgICAgJF90eXBlID0gJF9tYXRjaFsyXTsKICAgICAgICBpZigkX3R5cGUgPT0gJyUnKQogICAgICAgICAgICAkdGhpcy0+aGVpZ2h0ID0gJF9oZWlnaHQgLiAnJSc7CiAgICAgICAgZWxzZQogICAgICAgICAgICAkdGhpcy0+aGVpZ2h0ID0gJF9oZWlnaHQgLiAncHgnOwogICAgICAgIAogICAgICAgIHJldHVybiB0cnVlOwogICAgfSAgICAgICAgCgogICAgLyoqCiAgICAgKiBzZXRzIHRoZSBkZWZhdWx0IG1hcCB6b29tIGxldmVsCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbGV2ZWwKICAgICAqLwogICAgZnVuY3Rpb24gc2V0Wm9vbUxldmVsKCRsZXZlbCkgewogICAgICAgICR0aGlzLT56b29tID0gKGludCkgJGxldmVsOwogICAgfSAgICAKICAgICAgICAgICAgCiAgICAvKioKICAgICAqIGVuYWJsZXMgdGhlIG1hcCBjb250cm9scyAoem9vbS9tb3ZlKQogICAgICoKICAgICAqLwogICAgZnVuY3Rpb24gZW5hYmxlTWFwQ29udHJvbHMoKSB7CiAgICAgICAgJHRoaXMtPm1hcF9jb250cm9scyA9IHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBkaXNhYmxlcyB0aGUgbWFwIGNvbnRyb2xzICh6b29tL21vdmUpCiAgICAgKgogICAgICovCiAgICBmdW5jdGlvbiBkaXNhYmxlTWFwQ29udHJvbHMoKSB7CiAgICAgICAgJHRoaXMtPm1hcF9jb250cm9scyA9IGZhbHNlOwogICAgfSAgICAKICAgIAogICAgLyoqCiAgICAgKiBzZXRzIHRoZSBtYXAgY29udHJvbCBzaXplIChsYXJnZS9zbWFsbCkKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzaXplCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldENvbnRyb2xTaXplKCRzaXplKSB7CiAgICAgICAgaWYoaW5fYXJyYXkoJHNpemUsYXJyYXkoJ2xhcmdlJywnc21hbGwnKSkpCiAgICAgICAgICAgICR0aGlzLT5jb250cm9sX3NpemUgPSAkc2l6ZTsKICAgIH0gICAgICAgICAgICAKCiAgICAvKioKICAgICAqIGVuYWJsZXMgdGhlIHR5cGUgY29udHJvbHMgKG1hcC9zYXRlbGxpdGUvaHlicmlkKQogICAgICoKICAgICAqLwogICAgZnVuY3Rpb24gZW5hYmxlVHlwZUNvbnRyb2xzKCkgewogICAgICAgICR0aGlzLT50eXBlX2NvbnRyb2xzID0gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIGRpc2FibGVzIHRoZSB0eXBlIGNvbnRyb2xzIChtYXAvc2F0ZWxsaXRlL2h5YnJpZCkKICAgICAqCiAgICAgKi8KICAgIGZ1bmN0aW9uIGRpc2FibGVUeXBlQ29udHJvbHMoKSB7CiAgICAgICAgJHRoaXMtPnR5cGVfY29udHJvbHMgPSBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIHNldCBkZWZhdWx0IG1hcCB0eXBlIChtYXAvc2F0ZWxsaXRlL2h5YnJpZCkKICAgICAqCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldE1hcFR5cGUoJHR5cGUpIHsKICAgICAgICBzd2l0Y2goJHR5cGUpIHsKICAgICAgICAgICAgY2FzZSAnaHlicmlkJzoKICAgICAgICAgICAgICAgICR0aGlzLT5tYXBfdHlwZSA9ICdHX0hZQlJJRF9NQVAnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3NhdGVsbGl0ZSc6CiAgICAgICAgICAgICAgICAkdGhpcy0+bWFwX3R5cGUgPSAnR19TQVRFTExJVEVfTUFQJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdtYXAnOgogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgJHRoaXMtPm1hcF90eXBlID0gJ0dfTk9STUFMX01BUCc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9ICAgICAgIAogICAgfSAgICAKICAgIAogICAgLyoqCiAgICAgKiBlbmFibGVzIG9ubG9hZAogICAgICoKICAgICAqLwogICAgZnVuY3Rpb24gZW5hYmxlT25Mb2FkKCkgewogICAgICAgICR0aGlzLT5vbmxvYWQgPSB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogZGlzYWJsZXMgb25sb2FkCiAgICAgKgogICAgICovCiAgICBmdW5jdGlvbiBkaXNhYmxlT25Mb2FkKCkgewogICAgICAgICR0aGlzLT5vbmxvYWQgPSBmYWxzZTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBlbmFibGVzIHNpZGViYXIKICAgICAqCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVuYWJsZVNpZGViYXIoKSB7CiAgICAgICAgJHRoaXMtPnNpZGViYXIgPSB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogZGlzYWJsZXMgc2lkZWJhcgogICAgICoKICAgICAqLwogICAgZnVuY3Rpb24gZGlzYWJsZVNpZGViYXIoKSB7CiAgICAgICAgJHRoaXMtPnNpZGViYXIgPSBmYWxzZTsKICAgIH0gICAgCgogICAgLyoqCiAgICAgKiBlbmFibGVzIG1hcCBkaXJlY3Rpb25zIGluc2lkZSBpbmZvIHdpbmRvdwogICAgICoKICAgICAqLwogICAgZnVuY3Rpb24gZW5hYmxlRGlyZWN0aW9ucygpIHsKICAgICAgICAkdGhpcy0+ZGlyZWN0aW9ucyA9IHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBkaXNhYmxlcyBtYXAgZGlyZWN0aW9ucyBpbnNpZGUgaW5mbyB3aW5kb3cKICAgICAqCiAgICAgKi8KICAgIGZ1bmN0aW9uIGRpc2FibGVEaXJlY3Rpb25zKCkgewogICAgICAgICR0aGlzLT5kaXJlY3Rpb25zID0gZmFsc2U7CiAgICB9ICAgIAogICAgICAgIAogICAgLyoqCiAgICAgKiBzZXQgYnJvd3NlciBhbGVydCBtZXNzYWdlIGZvciBpbmNvbXBhdGlibGUgYnJvd3NlcnMKICAgICAqCiAgICAgKiBAcGFyYW1zICRtZXNzYWdlIHN0cmluZwogICAgICovCiAgICBmdW5jdGlvbiBzZXRCcm93c2VyQWxlcnQoJG1lc3NhZ2UpIHsKICAgICAgICAkdGhpcy0+YnJvd3Nlcl9hbGVydCA9ICRtZXNzYWdlOwogICAgfQoKICAgIC8qKgogICAgICogc2V0IDxub3NjcmlwdD4gbWVzc2FnZSB3aGVuIGphdmFzY3JpcHQgaXMgZGlzYWJsZWQKICAgICAqCiAgICAgKiBAcGFyYW1zICRtZXNzYWdlIHN0cmluZwogICAgICovCiAgICBmdW5jdGlvbiBzZXRKU0FsZXJ0KCRtZXNzYWdlKSB7CiAgICAgICAgJHRoaXMtPmpzX2FsZXJ0ID0gJG1lc3NhZ2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBlbmFibGUgbWFwIG1hcmtlciBpbmZvIHdpbmRvd3MKICAgICAqLwogICAgZnVuY3Rpb24gZW5hYmxlSW5mb1dpbmRvdygpIHsKICAgICAgICAkdGhpcy0+aW5mb193aW5kb3cgPSB0cnVlOwogICAgfQogICAgCiAgICAvKioKICAgICAqIGRpc2FibGUgbWFwIG1hcmtlciBpbmZvIHdpbmRvd3MKICAgICAqLwogICAgZnVuY3Rpb24gZGlzYWJsZUluZm9XaW5kb3coKSB7CiAgICAgICAgJHRoaXMtPmluZm9fd2luZG93ID0gZmFsc2U7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogc2V0IHRoZSBpbmZvIHdpbmRvdyB0cmlnZ2VyIGFjdGlvbgogICAgICoKICAgICAqIEBwYXJhbXMgJG1lc3NhZ2Ugc3RyaW5nIGNsaWNrL21vdXNlb3ZlcgogICAgICovCiAgICBmdW5jdGlvbiBzZXRJbmZvV2luZG93VHJpZ2dlcigkdHlwZSkgewogICAgICAgIHN3aXRjaCgkdHlwZSkgewogICAgICAgICAgICBjYXNlICdtb3VzZW92ZXInOgogICAgICAgICAgICAgICAgJHRoaXMtPndpbmRvd190cmlnZ2VyID0gJ21vdXNlb3Zlcic7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICR0aGlzLT53aW5kb3dfdHJpZ2dlciA9ICdjbGljayc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogZW5hYmxlIHpvb20gdG8gZW5jb21wYXNzIG1ha2VycwogICAgICovCiAgICBmdW5jdGlvbiBlbmFibGVab29tRW5jb21wYXNzKCkgewogICAgICAgICR0aGlzLT56b29tX2VuY29tcGFzcyA9IHRydWU7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogZGlzYWJsZSB6b29tIHRvIGVuY29tcGFzcyBtYWtlcnMKICAgICAqLwogICAgZnVuY3Rpb24gZGlzYWJsZVpvb21FbmNvbXBhc3MoKSB7CiAgICAgICAgJHRoaXMtPnpvb21fZW5jb21wYXNzID0gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBzZXQgdGhlIGJvdW5kYXJ5IGZ1ZGdlIGZhY3RvcgogICAgICovCiAgICBmdW5jdGlvbiBzZXRCb3VuZHNGdWRnZSgkdmFsKSB7CiAgICAgICAgJHRoaXMtPmJvdW5kc19mdWRnZSA9ICR2YWw7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogc2V0IHRoZSBsb29rdXAgc2VydmljZSB0byB1c2UgZm9yIGdlb2NvZGUgbG9va3VwcwogICAgICogZGVmYXVsdCBpcyBZQUhPTywgeW91IGNhbiBhbHNvIHVzZSBHT09HTEUuCiAgICAgKiBOT1RFOiBHT09HTEUgY2FuIHRvIGludGwgbG9va3VwcywgYnV0IGlzIG5vdCBhbgogICAgICogb2ZmaWNpYWwgQVBJLCBzbyB1c2UgYXQgeW91ciBvd24gcmlzay4KICAgICAqCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldExvb2t1cFNlcnZpY2UoJHNlcnZpY2UpIHsKICAgICAgICBzd2l0Y2goJHNlcnZpY2UpIHsKICAgICAgICAgICAgY2FzZSAnR09PR0xFJzoKICAgICAgICAgICAgICAgICR0aGlzLT5sb29rdXBfc2VydmljZSA9ICdHT09HTEUnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ1lBSE9PJzoKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICR0aGlzLT5sb29rdXBfc2VydmljZSA9ICdZQUhPTyc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9ICAgICAgIAogICAgfQogICAgCiAgICAgICAgCiAgICAvKioKICAgICAqIGFkZHMgYSBtYXAgbWFya2VyIGJ5IGFkZHJlc3MKICAgICAqIAogICAgICogQHBhcmFtIHN0cmluZyAkYWRkcmVzcyB0aGUgbWFwIGFkZHJlc3MgdG8gbWFyayAoc3RyZWV0L2NpdHkvc3RhdGUvemlwKQogICAgICogQHBhcmFtIHN0cmluZyAkdGl0bGUgdGhlIHRpdGxlIGRpc3BsYXkgaW4gdGhlIHNpZGViYXIKICAgICAqIEBwYXJhbSBzdHJpbmcgJGh0bWwgdGhlIEhUTUwgYmxvY2sgdG8gZGlzcGxheSBpbiB0aGUgaW5mbyBidWJibGUgKGlmIGVtcHR5LCB0aXRsZSBpcyB1c2VkKQogICAgICovCiAgICBmdW5jdGlvbiBhZGRNYXJrZXJCeUFkZHJlc3MoJGFkZHJlc3MsJHRpdGxlID0gJycsJGh0bWwgPSAnJykgewogICAgICAgIGlmKCgkX2dlb2NvZGUgPSAkdGhpcy0+Z2V0R2VvY29kZSgkYWRkcmVzcykpID09PSBmYWxzZSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIHJldHVybiAkdGhpcy0+YWRkTWFya2VyQnlDb29yZHMoJF9nZW9jb2RlWydsb24nXSwkX2dlb2NvZGVbJ2xhdCddLCR0aXRsZSwkaHRtbCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBhZGRzIGEgbWFwIG1hcmtlciBieSBnZW9jb2RlCiAgICAgKiAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxvbiB0aGUgbWFwIGxvbmdpdHVkZSAoaG9yaXpvbnRhbCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxhdCB0aGUgbWFwIGxhdGl0dWRlICh2ZXJ0aWNhbCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRpdGxlIHRoZSB0aXRsZSBkaXNwbGF5IGluIHRoZSBzaWRlYmFyCiAgICAgKiBAcGFyYW0gc3RyaW5nICRodG1sIHRoZSBIVE1MIGJsb2NrIHRvIGRpc3BsYXkgaW4gdGhlIGluZm8gYnViYmxlIChpZiBlbXB0eSwgdGl0bGUgaXMgdXNlZCkKICAgICAqLwogICAgZnVuY3Rpb24gYWRkTWFya2VyQnlDb29yZHMoJGxvbiwkbGF0LCR0aXRsZSA9ICcnLCRodG1sID0gJycpIHsKICAgICAgICAkX21hcmtlclsnbG9uJ10gPSAkbG9uOwogICAgICAgICRfbWFya2VyWydsYXQnXSA9ICRsYXQ7CiAgICAgICAgJF9tYXJrZXJbJ2h0bWwnXSA9IHN0cmxlbigkaHRtbCkgPiAwID8gJGh0bWwgOiAkdGl0bGU7CiAgICAgICAgJF9tYXJrZXJbJ3RpdGxlJ10gPSAkdGl0bGU7CiAgICAgICAgJHRoaXMtPl9tYXJrZXJzW10gPSAkX21hcmtlcjsKICAgICAgICAkdGhpcy0+YWRqdXN0Q2VudGVyQ29vcmRzKCRfbWFya2VyWydsb24nXSwkX21hcmtlclsnbGF0J10pOwogICAgICAgIC8vIHJldHVybiBpbmRleCBvZiBtYXJrZXIKICAgICAgICByZXR1cm4gY291bnQoJHRoaXMtPl9tYXJrZXJzKSAtIDE7CiAgICB9CgogICAgLyoqCiAgICAgKiBhZGRzIGEgbWFwIHBvbHlsaW5lIGJ5IGFkZHJlc3MKICAgICAqIGlmIGNvbG9yLCB3ZWlnaHQgYW5kIG9wYWNpdHkgYXJlIG5vdCBkZWZpbmVkLCB1c2UgdGhlIGdvb2dsZSBtYXBzIGRlZmF1bHRzCiAgICAgKiAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFkZHJlc3MxIHRoZSBtYXAgYWRkcmVzcyB0byBkcmF3IGZyb20KICAgICAqIEBwYXJhbSBzdHJpbmcgJGFkZHJlc3MyIHRoZSBtYXAgYWRkcmVzcyB0byBkcmF3IHRvCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb2xvciB0aGUgY29sb3Igb2YgdGhlIGxpbmUgKGZvcm1hdDogIzAwMDAwMCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJHdlaWdodCB0aGUgd2VpZ2h0IG9mIHRoZSBsaW5lIGluIHBpeGVscwogICAgICogQHBhcmFtIHN0cmluZyAkb3BhY2l0eSB0aGUgbGluZSBvcGFjaXR5IChwZXJjZW50YWdlKQogICAgICovCiAgICBmdW5jdGlvbiBhZGRQb2x5TGluZUJ5QWRkcmVzcygkYWRkcmVzczEsJGFkZHJlc3MyLCRjb2xvcj0nJywkd2VpZ2h0PTAsJG9wYWNpdHk9MCkgewogICAgICAgIGlmKCgkX2dlb2NvZGUxID0gJHRoaXMtPmdldEdlb2NvZGUoJGFkZHJlc3MxKSkgPT09IGZhbHNlKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYoKCRfZ2VvY29kZTIgPSAkdGhpcy0+Z2V0R2VvY29kZSgkYWRkcmVzczIpKSA9PT0gZmFsc2UpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICByZXR1cm4gJHRoaXMtPmFkZFBvbHlMaW5lQnlDb29yZHMoJF9nZW9jb2RlMVsnbG9uJ10sJF9nZW9jb2RlMVsnbGF0J10sJF9nZW9jb2RlMlsnbG9uJ10sJF9nZW9jb2RlMlsnbGF0J10sJGNvbG9yLCR3ZWlnaHQsJG9wYWNpdHkpOwogICAgfQoKICAgIC8qKgogICAgICogYWRkcyBhIG1hcCBwb2x5bGluZSBieSBtYXAgY29vcmRpbmF0ZXMKICAgICAqIGlmIGNvbG9yLCB3ZWlnaHQgYW5kIG9wYWNpdHkgYXJlIG5vdCBkZWZpbmVkLCB1c2UgdGhlIGdvb2dsZSBtYXBzIGRlZmF1bHRzCiAgICAgKiAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxvbjEgdGhlIG1hcCBsb25naXR1ZGUgdG8gZHJhdyBmcm9tCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsYXQxIHRoZSBtYXAgbGF0aXR1ZGUgdG8gZHJhdyBmcm9tCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsb24yIHRoZSBtYXAgbG9uZ2l0dWRlIHRvIGRyYXcgdG8KICAgICAqIEBwYXJhbSBzdHJpbmcgJGxhdDIgdGhlIG1hcCBsYXRpdHVkZSB0byBkcmF3IHRvCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb2xvciB0aGUgY29sb3Igb2YgdGhlIGxpbmUgKGZvcm1hdDogIzAwMDAwMCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJHdlaWdodCB0aGUgd2VpZ2h0IG9mIHRoZSBsaW5lIGluIHBpeGVscwogICAgICogQHBhcmFtIHN0cmluZyAkb3BhY2l0eSB0aGUgbGluZSBvcGFjaXR5IChwZXJjZW50YWdlKQogICAgICovCiAgICBmdW5jdGlvbiBhZGRQb2x5TGluZUJ5Q29vcmRzKCRsb24xLCRsYXQxLCRsb24yLCRsYXQyLCRjb2xvcj0nJywkd2VpZ2h0PTAsJG9wYWNpdHk9MCkgewogICAgICAgICRfcG9seWxpbmVbJ2xvbjEnXSA9ICRsb24xOwogICAgICAgICRfcG9seWxpbmVbJ2xhdDEnXSA9ICRsYXQxOwogICAgICAgICRfcG9seWxpbmVbJ2xvbjInXSA9ICRsb24yOwogICAgICAgICRfcG9seWxpbmVbJ2xhdDInXSA9ICRsYXQyOwogICAgICAgICRfcG9seWxpbmVbJ2NvbG9yJ10gPSAkY29sb3I7CiAgICAgICAgJF9wb2x5bGluZVsnd2VpZ2h0J10gPSAkd2VpZ2h0OwogICAgICAgICRfcG9seWxpbmVbJ29wYWNpdHknXSA9ICRvcGFjaXR5OwogICAgICAgICR0aGlzLT5fcG9seWxpbmVzW10gPSAkX3BvbHlsaW5lOwogICAgICAgICR0aGlzLT5hZGp1c3RDZW50ZXJDb29yZHMoJF9wb2x5bGluZVsnbG9uMSddLCRfcG9seWxpbmVbJ2xhdDEnXSk7CiAgICAgICAgJHRoaXMtPmFkanVzdENlbnRlckNvb3JkcygkX3BvbHlsaW5lWydsb24yJ10sJF9wb2x5bGluZVsnbGF0MiddKTsKICAgICAgICAvLyByZXR1cm4gaW5kZXggb2YgcG9seWxpbmUKICAgICAgICByZXR1cm4gY291bnQoJHRoaXMtPl9wb2x5bGluZXMpIC0gMTsKICAgIH0gICAgICAgIAogICAgICAgIAogICAgLyoqCiAgICAgKiBhZGp1c3QgbWFwIGNlbnRlciBjb29yZGluYXRlcyBieSB0aGUgZ2l2ZW4gbGF0L2xvbiBwb2ludAogICAgICogCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsb24gdGhlIG1hcCBsYXRpdHVkZSAoaG9yaXpvbnRhbCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxhdCB0aGUgbWFwIGxhdGl0dWRlICh2ZXJ0aWNhbCkKICAgICAqLwogICAgZnVuY3Rpb24gYWRqdXN0Q2VudGVyQ29vcmRzKCRsb24sJGxhdCkgewogICAgICAgIGlmKHN0cmxlbigoc3RyaW5nKSRsb24pID09IDAgfHwgc3RybGVuKChzdHJpbmcpJGxhdCkgPT0gMCkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICR0aGlzLT5fbWF4X2xvbiA9IG1heCgkbG9uLCAkdGhpcy0+X21heF9sb24pOwogICAgICAgICR0aGlzLT5fbWluX2xvbiA9IG1pbigkbG9uLCAkdGhpcy0+X21pbl9sb24pOwogICAgICAgICR0aGlzLT5fbWF4X2xhdCA9IG1heCgkbGF0LCAkdGhpcy0+X21heF9sYXQpOwogICAgICAgICR0aGlzLT5fbWluX2xhdCA9IG1pbigkbGF0LCAkdGhpcy0+X21pbl9sYXQpOwogICAgICAgIAogICAgICAgICR0aGlzLT5jZW50ZXJfbG9uID0gKCR0aGlzLT5fbWluX2xvbiArICR0aGlzLT5fbWF4X2xvbikgLyAyOwogICAgICAgICR0aGlzLT5jZW50ZXJfbGF0ID0gKCR0aGlzLT5fbWluX2xhdCArICR0aGlzLT5fbWF4X2xhdCkgLyAyOwogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogc2V0IG1hcCBjZW50ZXIgY29vcmRpbmF0ZXMgdG8gbGF0L2xvbiBwb2ludAogICAgICogCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsb24gdGhlIG1hcCBsYXRpdHVkZSAoaG9yaXpvbnRhbCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxhdCB0aGUgbWFwIGxhdGl0dWRlICh2ZXJ0aWNhbCkKICAgICAqLwogICAgZnVuY3Rpb24gc2V0Q2VudGVyQ29vcmRzKCRsb24sJGxhdCkgewogICAgICAgICR0aGlzLT5jZW50ZXJfbGF0ID0gKGZsb2F0KSAkbGF0OwogICAgICAgICR0aGlzLT5jZW50ZXJfbG9uID0gKGZsb2F0KSAkbG9uOwogICAgfSAgICAKCiAgICAvKioKICAgICAqIGdlbmVyYXRlIGFuIGFycmF5IG9mIHBhcmFtcyBmb3IgYSBuZXcgbWFya2VyIGljb24gaW1hZ2UKICAgICAqIGljb25TaGFkb3dJbWFnZSBpcyBvcHRpb25hbAogICAgICogSWYgYW5jaG9yIGNvb3JkcyBhcmUgbm90IHN1cHBsaWVkLCB3ZSB1c2UgdGhlIGNlbnRlciBwb2ludCBvZiB0aGUgaW1hZ2UgYnkgZGVmYXVsdC4gCiAgICAgKiBDYW4gYmUgY2FsbGVkIHN0YXRpY2FsbHkuIEZvciBwcml2YXRlIHVzZSBieSBhZGRNYXJrZXJJY29uKCkgYW5kIHNldE1hcmtlckljb24oKQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGljb25JbWFnZSBVUkwgdG8gaWNvbiBpbWFnZQogICAgICogQHBhcmFtIHN0cmluZyAkaWNvblNoYWRvd0ltYWdlIFVSTCB0byBzaGFkb3cgaW1hZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGljb25BbmNob3JYIFggY29vcmRpbmF0ZSBmb3IgaWNvbiBhbmNob3IgcG9pbnQKICAgICAqIEBwYXJhbSBzdHJpbmcgJGljb25BbmNob3JZIFkgY29vcmRpbmF0ZSBmb3IgaWNvbiBhbmNob3IgcG9pbnQKICAgICAqIEBwYXJhbSBzdHJpbmcgJGluZm9XaW5kb3dBbmNob3JYIFggY29vcmRpbmF0ZSBmb3IgaW5mbyB3aW5kb3cgYW5jaG9yIHBvaW50CiAgICAgKiBAcGFyYW0gc3RyaW5nICRpbmZvV2luZG93QW5jaG9yWSBZIGNvb3JkaW5hdGUgZm9yIGluZm8gd2luZG93IGFuY2hvciBwb2ludAogICAgICovCiAgICBmdW5jdGlvbiBjcmVhdGVNYXJrZXJJY29uKCRpY29uSW1hZ2UsJGljb25TaGFkb3dJbWFnZSA9ICcnLCRpY29uQW5jaG9yWCA9ICd4JywkaWNvbkFuY2hvclkgPSAneCcsJGluZm9XaW5kb3dBbmNob3JYID0gJ3gnLCRpbmZvV2luZG93QW5jaG9yWSA9ICd4JykgewogICAgICAgICRfaWNvbl9pbWFnZV9wYXRoID0gc3RycG9zKCRpY29uSW1hZ2UsJ2h0dHAnKSA9PT0gMCA/ICRpY29uSW1hZ2UgOiAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gJGljb25JbWFnZTsKICAgICAgICBpZighKCRfaW1hZ2VfaW5mbyA9IEBnZXRpbWFnZXNpemUoJF9pY29uX2ltYWdlX3BhdGgpKSkgewogICAgICAgICAgICBkaWUoJ0dvb2dsZU1hcEFQSTpjcmVhdGVNYXJrZXJJY29uOiBFcnJvciByZWFkaW5nIGltYWdlOiAnIC4gJGljb25JbWFnZSk7ICAgCiAgICAgICAgfQogICAgICAgIGlmKCRpY29uU2hhZG93SW1hZ2UpIHsKICAgICAgICAgICAgJF9zaGFkb3dfaW1hZ2VfcGF0aCA9IHN0cnBvcygkaWNvblNoYWRvd0ltYWdlLCdodHRwJykgPT09IDAgPyAkaWNvblNoYWRvd0ltYWdlIDogJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSAuICRpY29uU2hhZG93SW1hZ2U7CiAgICAgICAgICAgIGlmKCEoJF9zaGFkb3dfaW5mbyA9IEBnZXRpbWFnZXNpemUoJF9zaGFkb3dfaW1hZ2VfcGF0aCkpKSB7CiAgICAgICAgICAgICAgICBkaWUoJ0dvb2dsZU1hcEFQSTpjcmVhdGVNYXJrZXJJY29uOiBFcnJvciByZWFkaW5nIGltYWdlOiAnIC4gJGljb25TaGFkb3dJbWFnZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYoJGljb25BbmNob3JYID09PSAneCcpIHsKICAgICAgICAgICAgJGljb25BbmNob3JYID0gKGludCkgKCRfaW1hZ2VfaW5mb1swXSAvIDIpOwogICAgICAgIH0KICAgICAgICBpZigkaWNvbkFuY2hvclkgPT09ICd4JykgewogICAgICAgICAgICAkaWNvbkFuY2hvclkgPSAoaW50KSAoJF9pbWFnZV9pbmZvWzFdIC8gMik7CiAgICAgICAgfQogICAgICAgIGlmKCRpbmZvV2luZG93QW5jaG9yWCA9PT0gJ3gnKSB7CiAgICAgICAgICAgICRpbmZvV2luZG93QW5jaG9yWCA9IChpbnQpICgkX2ltYWdlX2luZm9bMF0gLyAyKTsKICAgICAgICB9CiAgICAgICAgaWYoJGluZm9XaW5kb3dBbmNob3JZID09PSAneCcpIHsKICAgICAgICAgICAgJGluZm9XaW5kb3dBbmNob3JZID0gKGludCkgKCRfaW1hZ2VfaW5mb1sxXSAvIDIpOwogICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgJGljb25faW5mbyA9IGFycmF5KAogICAgICAgICAgICAgICAgJ2ltYWdlJyA9PiAkaWNvbkltYWdlLAogICAgICAgICAgICAgICAgJ2ljb25XaWR0aCcgPT4gJF9pbWFnZV9pbmZvWzBdLAogICAgICAgICAgICAgICAgJ2ljb25IZWlnaHQnID0+ICRfaW1hZ2VfaW5mb1sxXSwKICAgICAgICAgICAgICAgICdpY29uQW5jaG9yWCcgPT4gJGljb25BbmNob3JYLAogICAgICAgICAgICAgICAgJ2ljb25BbmNob3JZJyA9PiAkaWNvbkFuY2hvclksCiAgICAgICAgICAgICAgICAnaW5mb1dpbmRvd0FuY2hvclgnID0+ICRpbmZvV2luZG93QW5jaG9yWCwKICAgICAgICAgICAgICAgICdpbmZvV2luZG93QW5jaG9yWScgPT4gJGluZm9XaW5kb3dBbmNob3JZCiAgICAgICAgICAgICAgICApOwogICAgICAgIGlmKCRpY29uU2hhZG93SW1hZ2UpIHsKICAgICAgICAgICAgJGljb25faW5mbyA9IGFycmF5X21lcmdlKCRpY29uX2luZm8sIGFycmF5KCdzaGFkb3cnID0+ICRpY29uU2hhZG93SW1hZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2hhZG93V2lkdGgnID0+ICRfc2hhZG93X2luZm9bMF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2hhZG93SGVpZ2h0JyA9PiAkX3NoYWRvd19pbmZvWzFdKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkaWNvbl9pbmZvOwogICAgfQogICAgCiAgICAvKioKICAgICAqIHNldCB0aGUgbWFya2VyIGljb24gZm9yIEFMTCBtYXJrZXJzIG9uIHRoZSBtYXAKICAgICAqLwogICAgZnVuY3Rpb24gc2V0TWFya2VySWNvbigkaWNvbkltYWdlLCRpY29uU2hhZG93SW1hZ2UgPSAnJywkaWNvbkFuY2hvclggPSAneCcsJGljb25BbmNob3JZID0gJ3gnLCRpbmZvV2luZG93QW5jaG9yWCA9ICd4JywkaW5mb1dpbmRvd0FuY2hvclkgPSAneCcpIHsKICAgICAgICAkdGhpcy0+X2ljb25zID0gYXJyYXkoJHRoaXMtPmNyZWF0ZU1hcmtlckljb24oJGljb25JbWFnZSwkaWNvblNoYWRvd0ltYWdlLCRpY29uQW5jaG9yWCwkaWNvbkFuY2hvclksJGluZm9XaW5kb3dBbmNob3JYLCRpbmZvV2luZG93QW5jaG9yWSkpOwogICAgfQogICAgCiAgICAvKioKICAgICAqIGFkZCBhbiBpY29uIHRvIGdvIHdpdGggdGhlIGNvcnJlc3BvbmRpbmdseSBhZGRlZCBtYXJrZXIKICAgICAqLwogICAgZnVuY3Rpb24gYWRkTWFya2VySWNvbigkaWNvbkltYWdlLCRpY29uU2hhZG93SW1hZ2UgPSAnJywkaWNvbkFuY2hvclggPSAneCcsJGljb25BbmNob3JZID0gJ3gnLCRpbmZvV2luZG93QW5jaG9yWCA9ICd4JywkaW5mb1dpbmRvd0FuY2hvclkgPSAneCcpIHsKICAgICAgICAkdGhpcy0+X2ljb25zW10gPSAkdGhpcy0+Y3JlYXRlTWFya2VySWNvbigkaWNvbkltYWdlLCRpY29uU2hhZG93SW1hZ2UsJGljb25BbmNob3JYLCRpY29uQW5jaG9yWSwkaW5mb1dpbmRvd0FuY2hvclgsJGluZm9XaW5kb3dBbmNob3JZKTsKICAgICAgICByZXR1cm4gY291bnQoJHRoaXMtPl9pY29ucykgLSAxOwogICAgfQoKICAgIC8qKgogICAgICogcHJpbnQgbWFwIGhlYWRlciBqYXZhc2NyaXB0IChnb2VzIGJldHdlZW4gPGhlYWQ+PC9oZWFkPikKICAgICAqIAogICAgICovCiAgICBmdW5jdGlvbiBwcmludEhlYWRlckpTKCkgewogICAgICAgIGVjaG8gJHRoaXMtPmdldEhlYWRlckpTKCk7ICAgCiAgICB9CiAgICAKICAgIC8qKgogICAgICogcmV0dXJuIG1hcCBoZWFkZXIgamF2YXNjcmlwdCAoZ29lcyBiZXR3ZWVuIDxoZWFkPjwvaGVhZD4pCiAgICAgKiAKICAgICAqLwogICAgZnVuY3Rpb24gZ2V0SGVhZGVySlMoKSB7CiAgICAgICRKUyA9IHNwcmludGYoJzxzY3JpcHQgc3JjPSJodHRwOi8vbWFwcy5nb29nbGUuY29tL21hcHM/ZmlsZT1hcGkmdj0yJmtleT0lcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBjaGFyc2V0PSJ1dGYtOCI+PC9zY3JpcHQ+JywgJHRoaXMtPmFwaV9rZXkpOwogICAgICByZXR1cm4gJEpTOwogICAgfSAgICAKICAgIAogICAgLyoqCiAgICAgKiBwcmludCBtYXAgamF2YXNjcmlwdCAocHV0IGp1c3QgYmVmb3JlIDwvYm9keT4sIG9yIGluIDxoZWFkZXI+IGlmIHVzaW5nIG9uTG9hZCgpKQogICAgICogCiAgICAgKi8KICAgIGZ1bmN0aW9uIHByaW50TWFwSlMoKSB7CiAgICAgICAgZWNobyAkdGhpcy0+Z2V0TWFwSlMoKTsKICAgIH0gICAgCgogICAgLyoqCiAgICAgKiByZXR1cm4gbWFwIGphdmFzY3JpcHQKICAgICAqIAogICAgICovCiAgICBmdW5jdGlvbiBnZXRNYXBKUygpIHsKICAgICAgICAkX291dHB1dCA9ICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgY2hhcnNldD0idXRmLTgiPicgLiAiXG4iOwogICAgICAgICRfb3V0cHV0IC49ICcvLzwhW0NEQVRBWycgLiAiXG4iOwogICAgICAgICRfb3V0cHV0IC49ICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIjsKICAgICAgICAkX291dHB1dCAuPSAiICogQ3JlYXRlZCB3aXRoIEdvb2dsZU1hcEFQSSAiIC4gJHRoaXMtPl92ZXJzaW9uIC4gIlxuIjsKICAgICAgICAkX291dHB1dCAuPSAiICogQXV0aG9yOiBNb250ZSBPaHJ0IDxtb250ZSBBVCBvaHJ0IERPVCBjb20+XG4iOwogICAgICAgICRfb3V0cHV0IC49ICIgKiBDb3B5cmlnaHQgMjAwNS0yMDA2IE5ldyBEaWdpdGFsIEdyb3VwXG4iOwogICAgICAgICRfb3V0cHV0IC49ICIgKiBodHRwOi8vd3d3LnBocGluc2lkZXIuY29tL3BocC9jb2RlL0dvb2dsZU1hcEFQSS9cbiI7CiAgICAgICAgJF9vdXRwdXQgLj0gIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuIjsKCiAgICAgICAgJF9vdXRwdXQgLj0gJ3ZhciBwb2ludHMgPSBbXTsnIC4gIlxuIjsKICAgICAgICAkX291dHB1dCAuPSAndmFyIG1hcmtlcnMgPSBbXTsnIC4gIlxuIjsKICAgICAgICAkX291dHB1dCAuPSAndmFyIGNvdW50ZXIgPSAwOycgLiAiXG4iOwogICAgICAgIGlmKCR0aGlzLT5zaWRlYmFyKSB7ICAgICAgICAKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJ3ZhciBzaWRlYmFyX2h0bWwgPSAiIjsnIC4gIlxuIjsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJ3ZhciBtYXJrZXJfaHRtbCA9IFtdOycgLiAiXG4iOwogICAgICAgIH0KCiAgICAgICAgaWYoJHRoaXMtPmRpcmVjdGlvbnMpIHsgICAgICAgIAogICAgICAgICAgICAkX291dHB1dCAuPSAndmFyIHRvX2h0bWxzID0gW107JyAuICJcbiI7CiAgICAgICAgICAgICRfb3V0cHV0IC49ICd2YXIgZnJvbV9odG1scyA9IFtdOycgLiAiXG4iOwogICAgICAgIH0gICAgICAgIAoKICAgICAgICBpZighZW1wdHkoJHRoaXMtPl9pY29ucykpIHsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJ3ZhciBpY29uID0gW107JyAuICJcbiI7CiAgICAgICAgICAgIGZvcigkaSA9IDA7ICR0aGlzLT5faWNvbnNbJGldOyAkaSsrKSB7CiAgICAgICAgICAgICAgICAkaW5mbyA9ICR0aGlzLT5faWNvbnNbJGldOwoKICAgICAgICAgICAgICAgIC8vIGhhc2ggdGhlIGljb24gZGF0YSB0byBzZWUgaWYgd2UndmUgYWxyZWFkeSBnb3QgdGhpcyBvbmU7IGlmIHNvLCBzYXZlIHNvbWUgamF2YXNjcmlwdAogICAgICAgICAgICAgICAgJGljb25fa2V5ID0gbWQ1KHNlcmlhbGl6ZSgkaW5mbykpOwogICAgICAgICAgICAgICAgaWYoIWlzX251bWVyaWMoJGV4aXN0X2ljblskaWNvbl9rZXldKSkgewogICAgICAgICAgICAgICAgICAgICRleGlzdF9pY25bJGljb25fa2V5XSA9ICRpOwoKICAgICAgICAgICAgICAgICAgICAkX291dHB1dCAuPSAiaWNvblskaV0gPSBuZXcgR0ljb24oKTtcbiI7ICAgCiAgICAgICAgICAgICAgICAgICAgJF9vdXRwdXQgLj0gc3ByaW50ZignaWNvblslc10uaW1hZ2UgPSAiJXMiOycsJGksJGluZm9bJ2ltYWdlJ10pIC4gIlxuIjsgICAKICAgICAgICAgICAgICAgICAgICBpZigkaW5mb1snc2hhZG93J10pIHsKICAgICAgICAgICAgICAgICAgICAgICAgJF9vdXRwdXQgLj0gc3ByaW50ZignaWNvblslc10uc2hhZG93ID0gIiVzIjsnLCRpLCRpbmZvWydzaGFkb3cnXSkgLiAiXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAkX291dHB1dCAuPSBzcHJpbnRmKCdpY29uWyVzXS5zaGFkb3dTaXplID0gbmV3IEdTaXplKCVzLCVzKTsnLCRpLCRpbmZvWydzaGFkb3dXaWR0aCddLCRpbmZvWydzaGFkb3dIZWlnaHQnXSkgLiAiXG4iOyAgIAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkX291dHB1dCAuPSBzcHJpbnRmKCdpY29uWyVzXS5pY29uU2l6ZSA9IG5ldyBHU2l6ZSglcywlcyk7JywkaSwkaW5mb1snaWNvbldpZHRoJ10sJGluZm9bJ2ljb25IZWlnaHQnXSkgLiAiXG4iOyAgIAogICAgICAgICAgICAgICAgICAgICRfb3V0cHV0IC49IHNwcmludGYoJ2ljb25bJXNdLmljb25BbmNob3IgPSBuZXcgR1BvaW50KCVzLCVzKTsnLCRpLCRpbmZvWydpY29uQW5jaG9yWCddLCRpbmZvWydpY29uQW5jaG9yWSddKSAuICJcbiI7ICAgCiAgICAgICAgICAgICAgICAgICAgJF9vdXRwdXQgLj0gc3ByaW50ZignaWNvblslc10uaW5mb1dpbmRvd0FuY2hvciA9IG5ldyBHUG9pbnQoJXMsJXMpOycsJGksJGluZm9bJ2luZm9XaW5kb3dBbmNob3JYJ10sJGluZm9bJ2luZm9XaW5kb3dBbmNob3JZJ10pIC4gIlxuIjsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJF9vdXRwdXQgLj0gImljb25bJGldID0gaWNvblskZXhpc3RfaWNuWyRpY29uX2tleV1dO1xuIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgJF9vdXRwdXQgLj0gJ3ZhciBtYXAgPSBudWxsOycgLiAiXG4iOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICBpZigkdGhpcy0+b25sb2FkKSB7CiAgICAgICAgICAgJF9vdXRwdXQgLj0gJ2Z1bmN0aW9uIG9uTG9hZCgpIHsnIC4gIlxuIjsgICAKICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICBpZighZW1wdHkoJHRoaXMtPmJyb3dzZXJfYWxlcnQpKSB7CiAgICAgICAgICAgICRfb3V0cHV0IC49ICdpZiAoR0Jyb3dzZXJJc0NvbXBhdGlibGUoKSkgeycgLiAiXG4iOwogICAgICAgIH0KCiAgICAgICAgJF9vdXRwdXQgLj0gc3ByaW50ZigndmFyIG1hcE9iaiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCIlcyIpOycsJHRoaXMtPm1hcF9pZCkgLiAiXG4iOwogICAgICAgICRfb3V0cHV0IC49ICdpZiAobWFwT2JqICE9ICJ1bmRlZmluZWQiICYmIG1hcE9iaiAhPSBudWxsKSB7JyAuICJcbiI7CiAgICAgICAgJF9vdXRwdXQgLj0gc3ByaW50ZignbWFwID0gbmV3IEdNYXAyKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCIlcyIpKTsnLCR0aGlzLT5tYXBfaWQpIC4gIlxuIjsKICAgICAgICBpZihpc3NldCgkdGhpcy0+Y2VudGVyX2xhdCkgJiYgaXNzZXQoJHRoaXMtPmNlbnRlcl9sb24pKSB7CiAgICAgICAgICAgICRfb3V0cHV0IC49IHNwcmludGYoJ21hcC5zZXRDZW50ZXIobmV3IEdMYXRMbmcoJXMsICVzKSwgJXMsICVzKTsnLCAkdGhpcy0+Y2VudGVyX2xhdCwgJHRoaXMtPmNlbnRlcl9sb24sICR0aGlzLT56b29tLCAkdGhpcy0+bWFwX3R5cGUpIC4gIlxuIjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gem9vbSBvdXQgdW50aWwgYWxsIG1hcmtlcnMgYXJlIGluIHRoZSB2aWV3cG9ydAogICAgICAgIGlmKCR0aGlzLT56b29tX2VuY29tcGFzcyAmJiBjb3VudCgkdGhpcy0+X21hcmtlcnMpID4gMCkgewogICAgICAgICAgICAvLyBpbmNyZWFzZSBib3VuZHMgYnkgZnVkZ2UgZmFjdG9yIHRvIGtlZXAKICAgICAgICAgICAgLy8gbWFya2VycyBhd2F5IGZyb20gdGhlIGVkZ2VzCiAgICAgICAgICAgICRfbGVuX2xvbiA9ICR0aGlzLT5fbWF4X2xvbiAtICR0aGlzLT5fbWluX2xvbjsKICAgICAgICAgICAgJF9sZW5fbGF0ID0gJHRoaXMtPl9tYXhfbGF0IC0gJHRoaXMtPl9taW5fbGF0OwogICAgICAgICAgICAkdGhpcy0+X21pbl9sb24gLT0gJF9sZW5fbG9uICogJHRoaXMtPmJvdW5kc19mdWRnZTsKICAgICAgICAgICAgJHRoaXMtPl9tYXhfbG9uICs9ICRfbGVuX2xvbiAqICR0aGlzLT5ib3VuZHNfZnVkZ2U7CiAgICAgICAgICAgICR0aGlzLT5fbWluX2xhdCAtPSAkX2xlbl9sYXQgKiAkdGhpcy0+Ym91bmRzX2Z1ZGdlOwogICAgICAgICAgICAkdGhpcy0+X21heF9sYXQgKz0gJF9sZW5fbGF0ICogJHRoaXMtPmJvdW5kc19mdWRnZTsKCiAgICAgICAgICAgICRfb3V0cHV0IC49ICJ2YXIgYmRzID0gbmV3IEdMYXRMbmdCb3VuZHMobmV3IEdMYXRMbmcoJHRoaXMtPl9taW5fbGF0LCAkdGhpcy0+X21pbl9sb24pLCBuZXcgR0xhdExuZygkdGhpcy0+X21heF9sYXQsICR0aGlzLT5fbWF4X2xvbikpO1xuIjsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJ21hcC5zZXRab29tKG1hcC5nZXRCb3VuZHNab29tTGV2ZWwoYmRzKSk7JyAuICJcbiI7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmKCR0aGlzLT5tYXBfY29udHJvbHMpIHsKICAgICAgICAgIGlmKCR0aGlzLT5jb250cm9sX3NpemUgPT0gJ2xhcmdlJykKICAgICAgICAgICAgICAkX291dHB1dCAuPSAnbWFwLmFkZENvbnRyb2wobmV3IEdMYXJnZU1hcENvbnRyb2woKSk7JyAuICJcbiI7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgJF9vdXRwdXQgLj0gJ21hcC5hZGRDb250cm9sKG5ldyBHU21hbGxNYXBDb250cm9sKCkpOycgLiAiXG4iOwogICAgICAgIH0KICAgICAgICBpZigkdGhpcy0+dHlwZV9jb250cm9scykgewogICAgICAgICAgICAkX291dHB1dCAuPSAnbWFwLmFkZENvbnRyb2wobmV3IEdNYXBUeXBlQ29udHJvbCgpKTsnIC4gIlxuIjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgJF9vdXRwdXQgLj0gJHRoaXMtPmdldEFkZE1hcmtlcnNKUygpOwoKICAgICAgICAkX291dHB1dCAuPSAkdGhpcy0+Z2V0UG9seWxpbmVKUygpOwoKICAgICAgICAvLyRfb3V0cHV0IC49ICdtYXAuYWRkT3ZlcmxheShuZXcgUG9seWdvbihbLTIwLCA0MCwgNjBdLCBbNTIsIDE3LCA3OF0pKScgLiAiXG4iOwoKICAgICAgICBpZigkdGhpcy0+c2lkZWJhcikgewogICAgICAgICAgICAkX291dHB1dCAuPSBzcHJpbnRmKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiJXMiKS5pbm5lckhUTUwgPSAiPHVsIGNsYXNzPVwiZ21hcFNpZGViYXJcIj4iKyBzaWRlYmFyX2h0bWwgKyI8L3VsPiI7JywgJHRoaXMtPnNpZGViYXJfaWQpIC4gIlxuIjsKICAgICAgICB9CgogICAgICAgICRfb3V0cHV0IC49ICd9JyAuICJcbiI7ICAgICAgICAKICAgICAgIAogICAgICAgIGlmKCFlbXB0eSgkdGhpcy0+YnJvd3Nlcl9hbGVydCkpIHsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJ30gZWxzZSB7JyAuICJcbiI7CiAgICAgICAgICAgICRfb3V0cHV0IC49ICdhbGVydCgiJyAuICR0aGlzLT5icm93c2VyX2FsZXJ0IC4gJyIpOycgLiAiXG4iOwogICAgICAgICAgICAkX291dHB1dCAuPSAnfScgLiAiXG4iOwogICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAKCiAgICAgICAgaWYoJHRoaXMtPm9ubG9hZCkgewogICAgICAgICAgICRfb3V0cHV0IC49ICd9JyAuICJcbiI7CiAgICAgICAgfQoKICAgICAgICAkX291dHB1dCAuPSAkdGhpcy0+Z2V0Q3JlYXRlTWFya2VySlMoKTsKCiAgICAgICAgaWYoJHRoaXMtPnNpZGViYXIpIHsgICAgICAgIAogICAgICAgICAgICAkX291dHB1dCAuPSAnZnVuY3Rpb24gY2xpY2tfc2lkZWJhcihpZHgpIHsnIC4gIlxuIjsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJ21hcmtlcnNbaWR4XS5vcGVuSW5mb1dpbmRvd0h0bWwobWFya2VyX2h0bWxbaWR4XSk7JyAuICJcbiI7CiAgICAgICAgICAgICRfb3V0cHV0IC49ICd9JyAuICJcbiI7CiAgICAgICAgfQogICAgICAgICRfb3V0cHV0IC49ICdmdW5jdGlvbiBzaG93SW5mb1dpbmRvdyhpZHgsaHRtbCkgeycgLiAiXG4iOwogICAgICAgICRfb3V0cHV0IC49ICdtYXAuY2VudGVyQXRMYXRMbmcocG9pbnRzW2lkeF0pOycgLiAiXG4iOwogICAgICAgICRfb3V0cHV0IC49ICdtYXJrZXJzW2lkeF0ub3BlbkluZm9XaW5kb3dIdG1sKGh0bWwpOycgLiAiXG4iOwogICAgICAgICRfb3V0cHV0IC49ICd9JyAuICJcbiI7CiAgICAgICAgaWYoJHRoaXMtPmRpcmVjdGlvbnMpIHsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJ2Z1bmN0aW9uIHRvaGVyZShpZHgpIHsnIC4gIlxuIjsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJ21hcmtlcnNbaWR4XS5vcGVuSW5mb1dpbmRvd0h0bWwodG9faHRtbHNbaWR4XSk7JyAuICJcbiI7CiAgICAgICAgICAgICRfb3V0cHV0IC49ICd9JyAuICJcbiI7CiAgICAgICAgICAgICRfb3V0cHV0IC49ICdmdW5jdGlvbiBmcm9taGVyZShpZHgpIHsnIC4gIlxuIjsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJ21hcmtlcnNbaWR4XS5vcGVuSW5mb1dpbmRvd0h0bWwoZnJvbV9odG1sc1tpZHhdKTsnIC4gIlxuIjsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJ30nIC4gIlxuIjsKICAgICAgICB9CgogICAgICAgICRfb3V0cHV0IC49ICcvL11dPicgLiAiXG4iOwogICAgICAgICRfb3V0cHV0IC49ICc8L3NjcmlwdD4nIC4gIlxuIjsKCgkkX291dHB1dCAuPSAnPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4nIC4gIlxuIjsKCSRfb3V0cHV0IC49ICcvLzwhW0NEQVRBWycgLiAiXG4iOwoJJF9vdXRwdXQgLj0gJ3dpbmRvdy5vbmxvYWQgPSBvbkxvYWQ7JyAuICJcbiI7CgkkX291dHB1dCAuPSAnLy9dXT4nIC4gIlxuIjsKCSRfb3V0cHV0IC49ICc8L3NjcmlwdD4nIC4gIlxuIjsKCiAgICAgICAgcmV0dXJuICRfb3V0cHV0OwogICAgfQoKICAgIC8qKgogICAgICogb3ZlcnJpZGFibGUgZnVuY3Rpb24gZm9yIGdlbmVyYXRpbmcganMgdG8gYWRkIG1hcmtlcnMKICAgICAqLwogICAgZnVuY3Rpb24gZ2V0QWRkTWFya2Vyc0pTKCkgewogICAgICAgICRpID0gMDsKICAgICAgICBmb3JlYWNoKCR0aGlzLT5fbWFya2VycyBhcyAkX21hcmtlcikgewogICAgICAgICAgICAkX291dHB1dCAuPSBzcHJpbnRmKCd2YXIgcG9pbnQgPSBuZXcgR0xhdExuZyglcywlcyk7JywkX21hcmtlclsnbGF0J10sJF9tYXJrZXJbJ2xvbiddKSAuICJcbiI7ICAgICAgICAgCiAgICAgICAgICAgICRfb3V0cHV0IC49IHNwcmludGYoJ3ZhciBtYXJrZXIgPSBjcmVhdGVNYXJrZXIocG9pbnQsIiVzIiwiJXMiLCAlcyk7JyxzdHJfcmVwbGFjZSgnIicsJ1wiJywkX21hcmtlclsndGl0bGUnXSksc3RyX3JlcGxhY2UoJyInLCdcIicsJzxkaXYgaWQ9ImdtYXBtYXJrZXIiIHN0eWxlPSJ3aGl0ZS1zcGFjZTogbm93cmFwOyI+JyAuICRfbWFya2VyWydodG1sJ10gLiAnPC9kaXY+JyksICRpKSAuICJcbiI7CiAgICAgICAgICAgICRfb3V0cHV0IC49ICdtYXAuYWRkT3ZlcmxheShtYXJrZXIpOycgLiAiXG4iOwogICAgICAgICAgICAkaSsrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJF9vdXRwdXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBvdmVycmlkYWJsZSBmdW5jdGlvbiB0byBnZW5lcmF0ZSBwb2x5bGluZSBqcwogICAgICovCiAgICBmdW5jdGlvbiBnZXRQb2x5bGluZUpTKCkgewogICAgICAgIGZvcmVhY2goJHRoaXMtPl9wb2x5bGluZXMgYXMgJF9wb2x5bGluZSkgewogICAgICAgICAgICAkX291dHB1dCAuPSBzcHJpbnRmKCd2YXIgcG9seWxpbmUgPSBuZXcgR1BvbHlsaW5lKFtuZXcgR0xhdExuZyglcywlcyksbmV3IEdMYXRMbmcoJXMsJXMpXSwiJXMiLCVzLCVzKTsnLAogICAgICAgICAgICAgICAgICAgICRfcG9seWxpbmVbJ2xhdDEnXSwkX3BvbHlsaW5lWydsb24xJ10sJF9wb2x5bGluZVsnbGF0MiddLCRfcG9seWxpbmVbJ2xvbjInXSwkX3BvbHlsaW5lWydjb2xvciddLCRfcG9seWxpbmVbJ3dlaWdodCddLCRfcG9seWxpbmVbJ29wYWNpdHknXSAvIDEwMC4wKSAuICJcbiI7CiAgICAgICAgICAgICRfb3V0cHV0IC49ICdtYXAuYWRkT3ZlcmxheShwb2x5bGluZSk7JyAuICJcbiI7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkX291dHB1dDsKICAgIH0KCiAgICAvKioKICAgICAqIG92ZXJyaWRhYmxlIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIHRoZSBqcyBmb3IgdGhlIGpzIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhIG1hcmtlci4KICAgICAqLwogICAgZnVuY3Rpb24gZ2V0Q3JlYXRlTWFya2VySlMoKSB7CiAgICAgICAgJF9vdXRwdXQgLj0gJ2Z1bmN0aW9uIGNyZWF0ZU1hcmtlcihwb2ludCwgdGl0bGUsIGh0bWwsIG4pIHsnIC4gIlxuIjsKICAgICAgICAkX291dHB1dCAuPSAnaWYobiA+PSAnLiBzaXplb2YoJHRoaXMtPl9pY29ucykgLicpIHsgbiA9ICcuIChzaXplb2YoJHRoaXMtPl9pY29ucykgLSAxKSAuIjsgfVxuIjsKICAgICAgICBpZighZW1wdHkoJHRoaXMtPl9pY29ucykpIHsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJ3ZhciBtYXJrZXIgPSBuZXcgR01hcmtlcihwb2ludCxpY29uW25dKTsnIC4gIlxuIjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkX291dHB1dCAuPSAndmFyIG1hcmtlciA9IG5ldyBHTWFya2VyKHBvaW50KTsnIC4gIlxuIjsKICAgICAgICB9CiAgICAgICAgaWYoJHRoaXMtPmRpcmVjdGlvbnMpIHsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gc3ByaW50ZiggICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICJ0b19odG1sc1tjb3VudGVyXSA9IGh0bWwgKyAnPHAgLz48Zm9ybSBjbGFzcz1cImdtYXBEaXJcIiBpZD1cImdtYXBEaXJUb1wiIHN0eWxlPVwid2hpdGUtc3BhY2U6IG5vd3JhcDtcIiBhY3Rpb249XCJodHRwOi8vbWFwcy5nb29nbGUuY29tL21hcHNcIiBtZXRob2Q9XCJnZXRcIiB0YXJnZXQ9XCJfYmxhbmtcIj4nICsKICAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwiZ21hcERpckhlYWRcIiBpZD1cImdtYXBEaXJIZWFkVG9cIj4lczxzdHJvbmc+JXM8L3N0cm9uZz4gLSA8YSBocmVmPVwiamF2YXNjcmlwdDpmcm9taGVyZSgnICsgY291bnRlciArICcpXCI+JXM8L2E+PC9zcGFuPicgKwogICAgICAgICAgICAgICAgICAgICAnPHAgY2xhc3M9XCJnbWFwRGlySXRlbVwiIGlkPVwiZ21hcERpckl0ZW1Ub1wiPjxsYWJlbCBmb3I9XCJnbWFwRGlyU2FkZHJcIiBjbGFzcz1cImdtYXBEaXJMYWJlbFwiIGlkPVwiZ21hcERpckxhYmVsVG9cIj4lczxiciAvPjwvbGFiZWw+JyArCiAgICAgICAgICAgICAgICAgICAgICc8aW5wdXQgdHlwZT1cInRleHRcIiBzaXplPVwiNDBcIiBtYXhsZW5ndGg9XCI0MFwiIG5hbWU9XCJzYWRkclwiIGNsYXNzPVwiZ21hcFRleHRCb3hcIiBpZD1cImdtYXBEaXJTYWRkclwiIHZhbHVlPVwiXCIgb25mb2N1cz1cInRoaXMuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gXCcjZTBlMGUwXCc7XCIgb25ibHVyPVwidGhpcy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBcJyNmZmZmZmZcJztcIiAvPicgKwogICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJnbWFwRGlyQnRuc1wiIGlkPVwiZ21hcERpckJ0bnNUb1wiPjxpbnB1dCB2YWx1ZT1cIiVzXCIgdHlwZT1cIiVzXCIgY2xhc3M9XCJnbWFwRGlyQnV0dG9uXCIgaWQ9XCJnbWFwRGlyQnV0dG9uVG9cIiAvPjwvc3Bhbj48L3A+JyArCiAgICAgICAgICAgICAgICAgICAgICc8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJkYWRkclwiIHZhbHVlPVwiJyArCiAgICAgICAgICAgICAgICAgICAgIHBvaW50LnkgKyAnLCcgKyBwb2ludC54ICsgXCIoXCIgKyB0aXRsZS5yZXBsYWNlKG5ldyBSZWdFeHAoL1wiL2cpLCcmcXVvdDsnKSArIFwiKVwiICsgJ1wiIC8+PC9mb3JtPic7CiAgICAgICAgICAgICAgICAgICAgICBmcm9tX2h0bWxzW2NvdW50ZXJdID0gaHRtbCArICc8cCAvPjxmb3JtIGNsYXNzPVwiZ21hcERpclwiIGlkPVwiZ21hcERpckZyb21cIiBzdHlsZT1cIndoaXRlLXNwYWNlOiBub3dyYXA7XCIgYWN0aW9uPVwiaHR0cDovL21hcHMuZ29vZ2xlLmNvbS9tYXBzXCIgbWV0aG9kPVwiZ2V0XCIgdGFyZ2V0PVwiX2JsYW5rXCI+JyArCiAgICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cImdtYXBEaXJIZWFkXCIgaWQ9XCJnbWFwRGlySGVhZEZyb21cIj4lczxhIGhyZWY9XCJqYXZhc2NyaXB0OnRvaGVyZSgnICsgY291bnRlciArICcpXCI+JXM8L2E+IC0gPHN0cm9uZz4lczwvc3Ryb25nPjwvc3Bhbj4nICsKICAgICAgICAgICAgICAgICAgICAgJzxwIGNsYXNzPVwiZ21hcERpckl0ZW1cIiBpZD1cImdtYXBEaXJJdGVtRnJvbVwiPjxsYWJlbCBmb3I9XCJnbWFwRGlyU2FkZHJcIiBjbGFzcz1cImdtYXBEaXJMYWJlbFwiIGlkPVwiZ21hcERpckxhYmVsRnJvbVwiPiVzPGJyIC8+PC9sYWJlbD4nICsKICAgICAgICAgICAgICAgICAgICAgJzxpbnB1dCB0eXBlPVwidGV4dFwiIHNpemU9XCI0MFwiIG1heGxlbmd0aD1cIjQwXCIgbmFtZT1cInNhZGRyXCIgY2xhc3M9XCJnbWFwVGV4dEJveFwiIGlkPVwiZ21hcERpclNhZGRyXCIgdmFsdWU9XCJcIiBvbmZvY3VzPVwidGhpcy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBcJyNlMGUwZTBcJztcIiBvbmJsdXI9XCJ0aGlzLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IFwnI2ZmZmZmZlwnO1wiIC8+JyArCiAgICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cImdtYXBEaXJCdG5zXCIgaWQ9XCJnbWFwRGlyQnRuc0Zyb21cIj48aW5wdXQgdmFsdWU9XCIlc1wiIHR5cGU9XCIlc1wiIGNsYXNzPVwiZ21hcERpckJ1dHRvblwiIGlkPVwiZ21hcERpckJ1dHRvbkZyb21cIiAvPjwvc3Bhbj48L3AnICsKICAgICAgICAgICAgICAgICAgICAgJzxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImRhZGRyXCIgdmFsdWU9XCInICsKICAgICAgICAgICAgICAgICAgICAgcG9pbnQueSArICcsJyArIHBvaW50LnggKyBcIihcIiArIHRpdGxlLnJlcGxhY2UobmV3IFJlZ0V4cCgvXCIvZyksJyZxdW90OycpICsgXCIpXCIgKyAnXCIgLz48L2Zvcm0+JzsKICAgICAgICAgICAgICAgICAgICAgaHRtbCA9IGh0bWwgKyAnPHAgLz48ZGl2IGlkPVwiZ21hcERpckhlYWRcIiBjbGFzcz1cImdtYXBEaXJcIiBzdHlsZT1cIndoaXRlLXNwYWNlOiBub3dyYXA7XCI+JXM8YSBocmVmPVwiamF2YXNjcmlwdDp0b2hlcmUoJyArIGNvdW50ZXIgKyAnKVwiPiVzPC9hPiAtIDxhIGhyZWY9XCJqYXZhc2NyaXB0OmZyb21oZXJlKCcgKyBjb3VudGVyICsgJylcIj4lczwvYT48L2Rpdj4nO1xuIiwKICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmRyaXZpbmdfZGlyX3RleHRbJ2Rpcl90ZXh0J10sCiAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5kcml2aW5nX2Rpcl90ZXh0WydkaXJfdG9oZXJlJ10sCiAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5kcml2aW5nX2Rpcl90ZXh0WydkaXJfZnJvbWhlcmUnXSwKICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmRyaXZpbmdfZGlyX3RleHRbJ2Rpcl90byddLAogICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZHJpdmluZ19kaXJfdGV4dFsndG9fYnV0dG9uX3ZhbHVlJ10sCiAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5kcml2aW5nX2Rpcl90ZXh0Wyd0b19idXR0b25fdHlwZSddLAogICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZHJpdmluZ19kaXJfdGV4dFsnZGlyX3RleHQnXSwKICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmRyaXZpbmdfZGlyX3RleHRbJ2Rpcl90b2hlcmUnXSwKICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmRyaXZpbmdfZGlyX3RleHRbJ2Rpcl9mcm9taGVyZSddLAogICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZHJpdmluZ19kaXJfdGV4dFsnZGlyX2Zyb20nXSwKICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmRyaXZpbmdfZGlyX3RleHRbJ2Zyb21fYnV0dG9uX3ZhbHVlJ10sCiAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5kcml2aW5nX2Rpcl90ZXh0Wydmcm9tX2J1dHRvbl90eXBlJ10sCiAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5kcml2aW5nX2Rpcl90ZXh0WydkaXJfdGV4dCddLAogICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZHJpdmluZ19kaXJfdGV4dFsnZGlyX3RvaGVyZSddLAogICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZHJpdmluZ19kaXJfdGV4dFsnZGlyX2Zyb21oZXJlJ10KICAgICAgICAgICAgICAgICAgICApOyAgICAgICAgICAgICAKICAgICAgICB9CiAgICAgICAgaWYoJHRoaXMtPmluZm9fd2luZG93KSB7CiAgICAgICAgICAgICRfb3V0cHV0IC49IHNwcmludGYoJ0dFdmVudC5hZGRMaXN0ZW5lcihtYXJrZXIsICIlcyIsIGZ1bmN0aW9uKCkgeyBtYXJrZXIub3BlbkluZm9XaW5kb3dIdG1sKGh0bWwpOyB9KTsnLCR0aGlzLT53aW5kb3dfdHJpZ2dlcikgLiAiXG4iOwogICAgICAgIH0KICAgICAgICAkX291dHB1dCAuPSAncG9pbnRzW2NvdW50ZXJdID0gcG9pbnQ7JyAuICJcbiI7CiAgICAgICAgJF9vdXRwdXQgLj0gJ21hcmtlcnNbY291bnRlcl0gPSBtYXJrZXI7JyAuICJcbiI7CiAgICAgICAgaWYoJHRoaXMtPnNpZGViYXIpIHsgICAgICAgIAogICAgICAgICAgICAkX291dHB1dCAuPSAnbWFya2VyX2h0bWxbY291bnRlcl0gPSBodG1sOycgLiAiXG4iOwogICAgICAgICAgICAkX291dHB1dCAuPSAic2lkZWJhcl9odG1sICs9ICc8bGkgY2xhc3M9XCJnbWFwU2lkZWJhckl0ZW1cIiBpZD1cImdtYXBTaWRlYmFySXRlbV8nKyBjb3VudGVyICsnXCI+PGEgaHJlZj1cImphdmFzY3JpcHQ6Y2xpY2tfc2lkZWJhcignICsgY291bnRlciArICcpXCI+JyArIHRpdGxlICsgJzwvYT48L2xpPic7IiAuICJcbiI7CiAgICAgICAgfQogICAgICAgICRfb3V0cHV0IC49ICdjb3VudGVyKys7JyAuICJcbiI7CiAgICAgICAgJF9vdXRwdXQgLj0gJ3JldHVybiBtYXJrZXI7JyAuICJcbiI7CiAgICAgICAgJF9vdXRwdXQgLj0gJ30nIC4gIlxuIjsKICAgICAgICByZXR1cm4gJF9vdXRwdXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBwcmludCBtYXAgKHB1dCBhdCBsb2NhdGlvbiBtYXAgd2lsbCBhcHBlYXIpCiAgICAgKiAKICAgICAqLwogICAgZnVuY3Rpb24gcHJpbnRNYXAoKSB7CiAgICAgICAgZWNobyAkdGhpcy0+Z2V0TWFwKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiByZXR1cm4gbWFwCiAgICAgKiAKICAgICAqLwogICAgZnVuY3Rpb24gZ2V0TWFwKCkgewogICAgICAgICRfb3V0cHV0ID0gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBjaGFyc2V0PSJ1dGYtOCI+JyAuICJcbiIgLiAnLy88IVtDREFUQVsnIC4gIlxuIjsKICAgICAgICAkX291dHB1dCAuPSAnaWYgKEdCcm93c2VySXNDb21wYXRpYmxlKCkpIHsnIC4gIlxuIjsKICAgICAgICBpZihzdHJsZW4oJHRoaXMtPndpZHRoKSA+IDAgJiYgc3RybGVuKCR0aGlzLT5oZWlnaHQpID4gMCkgewogICAgICAgICAgICAkX291dHB1dCAuPSBzcHJpbnRmKCdkb2N1bWVudC53cml0ZShcJzxkaXYgaWQ9IiVzIiBzdHlsZT0id2lkdGg6ICVzOyBoZWlnaHQ6ICVzIj48L2Rpdj5cJyk7JywkdGhpcy0+bWFwX2lkLCR0aGlzLT53aWR0aCwkdGhpcy0+aGVpZ2h0KSAuICJcbiI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gc3ByaW50ZignZG9jdW1lbnQud3JpdGUoXCc8ZGl2IGlkPSIlcyI+PC9kaXY+XCcpOycsJHRoaXMtPm1hcF9pZCkgLiAiXG4iOyAgICAgCiAgICAgICAgfQogICAgICAgICRfb3V0cHV0IC49ICd9JzsKCiAgICAgICAgaWYoIWVtcHR5KCR0aGlzLT5qc19hbGVydCkpIHsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJyBlbHNlIHsnIC4gIlxuIjsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gc3ByaW50ZignZG9jdW1lbnQud3JpdGUoXCclc1wnKTsnLCAkdGhpcy0+anNfYWxlcnQpIC4gIlxuIjsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJ30nIC4gIlxuIjsKICAgICAgICB9CgogICAgICAgICRfb3V0cHV0IC49ICcvL11dPicgLiAiXG4iIC4gJzwvc2NyaXB0PicgLiAiXG4iOwoKICAgICAgICBpZighZW1wdHkoJHRoaXMtPmpzX2FsZXJ0KSkgewogICAgICAgICAgICAkX291dHB1dCAuPSAnPG5vc2NyaXB0PicgLiAkdGhpcy0+anNfYWxlcnQgLiAnPC9ub3NjcmlwdD4nIC4gIlxuIjsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkX291dHB1dDsKICAgIH0KCiAgICAKICAgIC8qKgogICAgICogcHJpbnQgc2lkZWJhciAocHV0IGF0IGxvY2F0aW9uIHNpZGViYXIgd2lsbCBhcHBlYXIpCiAgICAgKiAKICAgICAqLwogICAgZnVuY3Rpb24gcHJpbnRTaWRlYmFyKCkgewogICAgICAgIGVjaG8gJHRoaXMtPmdldFNpZGViYXIoKTsKICAgIH0gICAgCgogICAgLyoqCiAgICAgKiByZXR1cm4gc2lkZWJhciBodG1sCiAgICAgKiAKICAgICAqLwogICAgZnVuY3Rpb24gZ2V0U2lkZWJhcigpIHsKICAgICAgICByZXR1cm4gc3ByaW50ZignPGRpdiBpZD0iJXMiPjwvZGl2PicsJHRoaXMtPnNpZGViYXJfaWQpIC4gIlxuIjsKICAgIH0gICAgCiAgICAgICAgICAgIAogICAgLyoqCiAgICAgKiBnZXQgdGhlIGdlb2NvZGUgbGF0L2xvbiBwb2ludHMgZnJvbSBnaXZlbiBhZGRyZXNzCiAgICAgKiBsb29rIGluIGNhY2hlIGZpcnN0LCBvdGhlcndpc2UgZ2V0IGZyb20gWWFob28KICAgICAqIAogICAgICogQHBhcmFtIHN0cmluZyAkYWRkcmVzcwogICAgICovCiAgICBmdW5jdGlvbiBnZXRHZW9jb2RlKCRhZGRyZXNzKSB7CiAgICAgICAgaWYoZW1wdHkoJGFkZHJlc3MpKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgICRfZ2VvY29kZSA9IGZhbHNlOwoKICAgICAgICBpZigoJF9nZW9jb2RlID0gJHRoaXMtPmdldENhY2hlKCRhZGRyZXNzKSkgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIGlmKCgkX2dlb2NvZGUgPSAkdGhpcy0+Z2VvR2V0Q29vcmRzKCRhZGRyZXNzKSkgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+cHV0Q2FjaGUoJGFkZHJlc3MsICRfZ2VvY29kZVsnbG9uJ10sICRfZ2VvY29kZVsnbGF0J10pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiAkX2dlb2NvZGU7CiAgICB9CiAgIAogICAgLyoqCiAgICAgKiBnZXQgdGhlIGdlb2NvZGUgbGF0L2xvbiBwb2ludHMgZnJvbSBjYWNoZSBmb3IgZ2l2ZW4gYWRkcmVzcwogICAgICogCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhZGRyZXNzCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldENhY2hlKCRhZGRyZXNzKSB7CiAgICAgICAgaWYoIWlzc2V0KCR0aGlzLT5kc24pKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgCiAgICAgICAgJF9yZXQgPSBhcnJheSgpOwogICAgICAgIAogICAgICAgIC8vIFBFQVIgREIKICAgICAgICByZXF1aXJlX29uY2UoJ0RCLnBocCcpOyAgICAgICAgICAKICAgICAgICAkX2RiID0mIERCOjpjb25uZWN0KCR0aGlzLT5kc24pOwogICAgICAgIGlmIChQRUFSOjppc0Vycm9yKCRfZGIpKSB7CiAgICAgICAgICAgIGRpZSgkX2RiLT5nZXRNZXNzYWdlKCkpOwogICAgICAgIH0KICAgICAgICAkX3JlcyA9JiAkX2RiLT5xdWVyeSgnU0VMRUNUIGxvbixsYXQgRlJPTSBHRU9DT0RFUyB3aGVyZSBhZGRyZXNzID0gPycsICRhZGRyZXNzKTsKICAgICAgICBpZiAoUEVBUjo6aXNFcnJvcigkX3JlcykpIHsKICAgICAgICAgICAgZGllKCRfcmVzLT5nZXRNZXNzYWdlKCkpOwogICAgICAgIH0KICAgICAgICBpZigkX3JvdyA9ICRfcmVzLT5mZXRjaFJvdygpKSB7ICAgICAgICAgICAgCiAgICAgICAgICAgICRfcmV0Wydsb24nXSA9ICRfcm93WzBdOwogICAgICAgICAgICAkX3JldFsnbGF0J10gPSAkX3Jvd1sxXTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgJF9kYi0+ZGlzY29ubmVjdCgpOwogICAgICAgIAogICAgICAgIHJldHVybiAhZW1wdHkoJF9yZXQpID8gJF9yZXQgOiBmYWxzZTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBwdXQgdGhlIGdlb2NvZGUgbGF0L2xvbiBwb2ludHMgaW50byBjYWNoZSBmb3IgZ2l2ZW4gYWRkcmVzcwogICAgICogCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhZGRyZXNzCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsb24gdGhlIG1hcCBsYXRpdHVkZSAoaG9yaXpvbnRhbCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxhdCB0aGUgbWFwIGxhdGl0dWRlICh2ZXJ0aWNhbCkKICAgICAqLwogICAgZnVuY3Rpb24gcHV0Q2FjaGUoJGFkZHJlc3MsICRsb24sICRsYXQpIHsKICAgICAgICBpZighaXNzZXQoJHRoaXMtPmRzbikgfHwgKHN0cmxlbigkYWRkcmVzcykgPT0gMCB8fCBzdHJsZW4oJGxvbikgPT0gMCB8fCBzdHJsZW4oJGxhdCkgPT0gMCkpCiAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIC8vIFBFQVIgREIKICAgICAgICByZXF1aXJlX29uY2UoJ0RCLnBocCcpOyAgICAgICAgICAKICAgICAgICAkX2RiID0mIERCOjpjb25uZWN0KCR0aGlzLT5kc24pOwogICAgICAgIGlmIChQRUFSOjppc0Vycm9yKCRfZGIpKSB7CiAgICAgICAgICAgIGRpZSgkX2RiLT5nZXRNZXNzYWdlKCkpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAkX3JlcyA9JiAkX2RiLT5xdWVyeSgnaW5zZXJ0IGludG8gR0VPQ09ERVMgdmFsdWVzICg/LCA/LCA/KScsIGFycmF5KCRhZGRyZXNzLCAkbG9uLCAkbGF0KSk7CiAgICAgICAgaWYgKFBFQVI6OmlzRXJyb3IoJF9yZXMpKSB7CiAgICAgICAgICAgIGRpZSgkX3Jlcy0+Z2V0TWVzc2FnZSgpKTsKICAgICAgICB9CiAgICAgICAgJF9kYi0+ZGlzY29ubmVjdCgpOwogICAgICAgIAogICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIAogICAgfQogICAKICAgIC8qKgogICAgICogZ2V0IGdlb2NvZGUgbGF0L2xvbiBwb2ludHMgZm9yIGdpdmVuIGFkZHJlc3MgZnJvbSBZYWhvbwogICAgICogCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhZGRyZXNzCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdlb0dldENvb3JkcygkYWRkcmVzcykgewogICAgICAgIAogICAgICAgIHN3aXRjaCgkdGhpcy0+bG9va3VwX3NlcnZpY2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIGNhc2UgJ0dPT0dMRSc6CiAgICAKICAgICAgICAgICAgICAgICRfdXJsID0gc3ByaW50ZignaHR0cDovL21hcHMuZ29vZ2xlLmNvbS9tYXBzP291dHB1dD1qcyZxPSVzJyxyYXd1cmxlbmNvZGUoJGFkZHJlc3MpKTsKCiAgICAgICAgICAgICAgICAkX3Jlc3VsdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZigkX3Jlc3VsdCA9ICR0aGlzLT5mZXRjaFVSTCgkX3VybCkpIHsKCiAgICAgICAgICAgICAgICAgICAgaWYoc3RycG9zKCRfcmVzdWx0LCdlcnJvcnRpcHMnKSA+IDEgfHwgc3RycG9zKCRfcmVzdWx0LCdEaWQgeW91IG1lYW46JykgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRpZG4ndCBnZXQgYSBnb29kIHJlc3VsdAogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIHByZWdfbWF0Y2goJyFjZW50ZXI6XHMqe2xhdDpccyooLT9cZCtcLlxkKyksbG5nOlxzKigtP1xkK1wuXGQrKX0hVScsICRfcmVzdWx0LCAkX21hdGNoKTsKCiAgICAgICAgICAgICAgICAgICAgJF9jb29yZHNbJ2xvbiddID0gJF9tYXRjaFsyXTsKICAgICAgICAgICAgICAgICAgICAkX2Nvb3Jkc1snbGF0J10gPSAkX21hdGNoWzFdOwoKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIGNhc2UgJ1lBSE9PJzoKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAkX3VybCA9ICdodHRwOi8vYXBpLmxvY2FsLnlhaG9vLmNvbS9NYXBzU2VydmljZS9WMS9nZW9jb2RlJzsKICAgICAgICAgICAgICAgICRfdXJsIC49IHNwcmludGYoJz9hcHBpZD0lcyZsb2NhdGlvbj0lcycsJHRoaXMtPmFwcF9pZCxyYXd1cmxlbmNvZGUoJGFkZHJlc3MpKTsKCiAgICAgICAgICAgICAgICAkX3Jlc3VsdCA9IGZhbHNlOwoKICAgICAgICAgICAgICAgIGlmKCRfcmVzdWx0ID0gJHRoaXMtPmZldGNoVVJMKCRfdXJsKSkgewoKICAgICAgICAgICAgICAgICAgICBwcmVnX21hdGNoKCchPExhdGl0dWRlPiguKik8L0xhdGl0dWRlPjxMb25naXR1ZGU+KC4qKTwvTG9uZ2l0dWRlPiFVJywgJF9yZXN1bHQsICRfbWF0Y2gpOwoKICAgICAgICAgICAgICAgICAgICAkX2Nvb3Jkc1snbG9uJ10gPSAkX21hdGNoWzJdOwogICAgICAgICAgICAgICAgICAgICRfY29vcmRzWydsYXQnXSA9ICRfbWF0Y2hbMV07CgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9ICAgICAgICAgCiAgICAgICAgCiAgICAgICAgcmV0dXJuICRfY29vcmRzOyAgICAgICAKICAgIH0KICAgIAogICAgCgogICAgLyoqCiAgICAgKiBmZXRjaCBhIFVSTC4gT3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gY2hhbmdlIHRoZSB3YXkgVVJMcyBhcmUgZmV0Y2hlZC4KICAgICAqIAogICAgICogQHBhcmFtIHN0cmluZyAkdXJsCiAgICAgKi8KICAgIGZ1bmN0aW9uIGZldGNoVVJMKCR1cmwpIHsKCiAgICAgICAgcmV0dXJuIGZpbGVfZ2V0X2NvbnRlbnRzKCR1cmwpOwoKICAgIH0KICAgIAogICAgCn0KCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/GoogleMapAPI-2.0/NEWS</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Mi4wCi0tLQoKKiBjb252ZXJ0ZWQgbWFwIHR5cGUgY29uc3RhbnRzIHRvIEdfTk9STUFMX01BUCwgR19TQVRFTExJVEVfTUFQLCBHX0hZQlJJRF9NQVAsCiAgZm9yIHZlcnNpb24gMiBvZiBHb29nbGUgTWFwIGFwaS4KKiBmaXhlZCB1cCBkcml2aW5nIGRpcmVjdGlvbiBIVE1MLCByZW1vdmUgPHA+LCBhZGQgPGRpdj4gKEpvaG4gU2NodWx6LCBtb250ZSkKKiBNb3ZlZCB0byB2ZXJzaW9uIDIgb2YgdGhlIEdvb2dsZSBNYXBzIEpTIEFQSS4gKGNsYXJrKQogIE5vdyB1c2UgdGhlIEdNYXAyIGNsYXNzIGluc3RlYWQgb2YgR01hcCBhbmQgR0xhdExuZyBpbnN0ZWFkIG9mCiAgR1BvaW50IChmb3IgbGF0L2xvbiBwYWlycykgYWxvbmcgd2l0aCBvdGhlciBtaW5vciBjaGFuZ2VzLiAKKiB6b29tIGVuY29tcGFzcyBsb29wIHJlcGxhY2VkIGJ5IGEgbmV3IG9mZmljaWFsIGZ1bmN0aW9uLCBtYXAuZ2V0Qm91bmRzWm9vbUxldmVsKGJkcyksCiAgd2hpY2ggcmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgem9vbSBsZXZlbCBmb3IgYSBnaXZlbiBHQm91bmRzIG9iamVjdC4gKGNsYXJrKQoqIENvbnZlcnRlZCB0aHJlZSBzZWN0aW9ucyBvZiB0aGUgZ2V0TWFwSlMoKSBmdW5jdGlvbiBpbnRvIHRoZWlyIG93biBmdW5jdGlvbnM6CiAgZ2V0QWRkTWFya2Vyc0pTKCksIGdldFBvbHlsaW5lSlMoKSwgYW5kIGdldENyZWF0ZU1hcmtlckpTKCksIHNvIHRoYXQgdGhleSBjYW4gYmUgZXh0ZW5kZWQKICBieSBzdWJjbGFzc2VzLiAoY2xhcmspCiogZml4IHpvb20gZW5jb21wYXNzIGZ1ZGdlIGZhY3RvciBidWc7IG5vdyBhcHBseSB0aGUgZnVkZ2UgZmFjdG9yIGluCiAgZ2V0TWFwSlMoKSwganVzdCBiZWZvcmUgd2Ugem9vbS4gKGNsYXJrKQoqIGFkZE1hcmtlckJ5QWRkcmVzcyBhbmQgYWRkUG9seUxpbmVCeUFkZHJlc3Mgbm93IGNhbGwgYWRkTWFya2VyQnlDb29yZHMKICBhbmQgYWRkUG9seUxpbmVCeUNvb3JkcyBpbnN0ZWFkIG9mIGR1cGxpY2F0aW5nIHRoZSBjb2RlIChjbGFyaykKKiBhZGRlZCBzZXRCb3VuZHNGdWRnZSgpIChjbGFyaykKCjEuNwotLS0KCiogZml4IGNvbXBhdGFiaWxpdHkgcHJvYmxlbSB3aXRoIG9sZGVyIFBIUAogIChjaGFuZ2UgcHJpbnRfciB0byBzZXJpYWxpemUpIChtb250ZSkKKiBmaXggYnVnIHdpdGggc2lkZWJhciBpbmRleCBjb3VudGVyIChtb250ZSkKKiBtYWtlIG1hcCBkaXJlY3Rpb24gaHRtbCBtb3JlIGNvbmZpZ3VyYWJsZSB3aXRoIGNzcyBhbmQganMgKG1vbnRlKQoqIGFkZGVkIG1vcmUgZXJyb3IgY2hlY2tpbmcgdG8gZ29vZ2xlIGdlb2Nvb3JkIGxvb2t1cHMgKG1vbnRlKQoqIGFkZCBmdWRnZSBmYWN0b3IgdG8gem9vbV9lbmNvbXBhc3Mgc28gbWFya2VycwogIGFyZSBhd2F5IGZyb20gdGhlIGVkZ2VzIChtb250ZSkKCjEuNgotLS0KCiogbW92ZSBkcml2aW5nIGRpciBvdXRwdXQgdG8gcHJvcGVydHkgdmFyIChtb250ZSkKKiBhZGQgPGRpdj4gaWRzIHRvIGRyaXZpbmcgZGlycyAobW9udGUpCiogZml4IHByb2JsZW0gd2l0aCBxdW90ZXMgaW4gdGl0bGVzIG9mIGRyaXZpbmcgZGlyIChtb250ZSkKKiBmaXggZHJpdmluZyBkaXIgd3JhcHBpbmcgKG1vbnRlKQoqIGZpeCBwcm9ibGVtIHdpdGggZW1wdHkgbGF0L2xvbiB2YWx1ZXMgKG1vbnRlKQoqIG1vdmUgc29tZSBqcyBmdW5jcyBhcm91bmQsIHRlc3QgZm9yIG1hcCA8ZGl2PiB0YWcgKG1vbnRlKQoqIGRvbid0IHN1cHBseSBzdHlsZSB0YWdzIHRvIDxkaXY+IGlmIHdpZHRoIGFuZCBoZWlnaHQgZW1wdHkgKG1vbnRlKQoqIGFkZCBqcyBmdW5jdGlvbiBzaG93X2luZm9fd2luZG93KCkgKG1vbnRlKQoqIHRyYWNrIHBvaW50cyBhbmQgbWFya2VycyBpbiBnbG9iYWwganMgYXJyYXlzIChtb250ZSkKKiBtYWtlIHRoZSBtYXAganMgdmFyIGdsb2JhbCAobW9udGUpCiogZml4IGJ1ZyB3aXRoIGljb24gYW5jaG9yIHBvc2l0aW9uaW5nIChtb250ZSkKKiBhZGQgZW5hYmxlSW5mb1dpbmRvdygpIGFuZCBkaXNhYmxlSW5mb1dpbmRvdygpIChtb250ZSkKKiByZW1vdmUgdW51c2VkIG1lc3NhZ2VfaWQgKG1vbnRlKQoKMS41Ci0tLQoKKiBhZGQgc2V0TG9va3VwU2VydmljZSgpIHRvIHN3aXRjaCBiZXR3ZWVuIGdlb2NvZGUgbG9va3VwIHNlcnZpY2VzIChtb250ZSkKKiBhZGQgYWRkTWFya2VySWNvbigpIGZvciBzZXR0aW5nIGljb25zIGZvciBpbmRpdmlkdWFsIG1hcCBtYXJrZXJzIChDbGFyayBGcmVpZmVsZCkKKiBhZGQgJHpvb21fZW5jb21wYXNzIHNvIGRlZmF1bHQgbWFwIHpvb20gY2xvc2VseSBlbmNvbXBhc3NlcyBtYXAgbWFya2VycyAoQ2xhcmsKRnJpZWZlbGQpCiogY2hhbmdlIG1hcmtkZXIgZGVmYXVsdHMgdG8gbW9yZSBjbG9zZWx5IG1hdGNoIGdvb2dsZSBtYXAgZGVmYXVsdHMgd2hlbiBub25lCmFyZSBnaXZlbiAoQ2xhcmsgRnJlaWZlbGQpCgoxLjQKLS0tCgoqIHNwbGl0IG91dCBVUkwgZmV0Y2hpbmcgdG8gaXRzIG93biBtZXRob2Qgc28gaXQgY2FuIGJlIGVhc2lseSBvdmVycmlkZGVuIChtb250ZSkKKiB3cmFwIDxkaXY+IHRhZ3MgaW5zaWRlIGphdmFzY3JpcHQgZm9yIGJyb3dzZXIgY29tcGF0YWJpbGl0eSAoSmFrZSBLcm9obiwgbW9udGUpCiogbWFrZSBIVE1MIG1hcmtlcnMgZGlzcGxheSBwcm9wZXJseSBpbiBmaXJlZm94IDEuNSAoSmFrZSBLcm9obiwgbW9udGUpCiogZml4ZWQgYnVnIHdpdGggc2lkZWJhciBkaXNhYmxlZCAobW9udGUpCgoxLjMKLS0tCgoqIHJlbW92ZSBkZWJ1ZyBwcmludF9yIHN0YXRlbWVudCBmcm9tIGdlb0dldENvb3JkcygpIGZ1bmN0aW9uIChtb250ZSkKKiBmaXhlZCBidWcgd2hlbiBzZXR0aW5nIG1hcCB0eXBlIGFuZCBkaXNhYmxpbmcgbWFwIGNvbnRyb2xzIChKb2huIEZyYW5jaXMgTGVlLCBtb250ZSkKCjEuMgotLS0KCiogYWRkZWQgVVRGLTggY2hhcnNldCBzZXR0aW5nIHRvIDxqYXZhc2NyaXB0PiB0YWdzIHRvIHdvcmsgd2l0aCBJRSBpbiBhbGwgbGFuZ3MgKEtBRE8sIG1vbnRlKQoqIGZpeCBpc3N1ZSB3aXRoIG11bHRpcGxlIGxhdC9sb24gZmluZGluZ3MgZnJvbSB5YWhvbyAoYW5kaWcsbW9udGUpCiogYWRkIHNldE1hcFR5cGUoKSBmdW5jdGlvbiAoSXNpZG9yMTI4LG1vbnRlKQoqIGFsbG93IGRvdWJsZSBxdW90ZXMgaW4gdGl0bGUvaHRtbCBvZiBtYXJrZXJzIChtb250ZSkKKiBhbGxvdyB3aWR0aC9oZWlnaHQgaW4gZWl0aGVyIHB4IG9yICUgKFRHS25JZ2h0LG1vbnRlKQoqIGFkZCBzZXRab29tTGV2ZWwoKSBmdW5jdGlvbiAobW9udGUpCgoxLjEKLS0tCgoqIHJlcGxhY2VkIEdvb2dsZU1hcEFQSS5jbGFzcy5waHAgd2l0aCBHT09EIHZlcnNpb24sIDEuMCBoYWQgaW5jb3JyZWN0IGZpbGUhCgoxLjAKLS0tCgppbml0aWFsIHJlbGVhc2UK]]></data>
	</file>
	<file>
	  <filename>/lib/GoogleMapAPI-2.0/README</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[TkFNRToKCiAgICBHb29nbGVNYXBBUEkgLSBBIGxpYnJhcnkgdXNlZCBmb3IgY3JlYXRpbmcgZ29vZ2xlIG1hcHMuCgpBVVRIT1I6CiAgICBNb250ZSBPaHJ0IDxtb250ZSBbQVRdIG9ocnQgW0RPVF0gY29tPgoKTEFURVNUIFZFUlNJT046CiAgICAyLjAgLSBBcHJpbCAyN3RoLCAyMDA2CgpTWU5PUFNJUzoKCiAgICA8P3BocAogICAgcmVxdWlyZSgnR29vZ2xlTWFwQVBJLmNsYXNzLnBocCcpOwoKICAgIC8vIHBhc3MgeWFob28gYXBwIGlkIChzb21ldGhpbmcgdW5pcXVlKSBpZiB5b3UgYXJlIHVzaW5nIHRoZQogICAgLy8gWUFIT08gbG9va3VwIHNlcnZpY2UsIHdoaWNoIGlzIGRlZmF1bHQKICAgICRtYXAgPSBuZXcgR29vZ2xlTWFwQVBJKCdtYXAnLCAnWW91cllhaG9vQXBwSWQnKTsKICAgIC8vIHNldHVwIGRhdGFiYXNlIGZvciBnZW9jb2RlIGNhY2hpbmcKICAgICRtYXAtPnNldERTTignbXlzcWw6Ly9VU0VSOlBBU1NAbG9jYWxob3N0L0dFT0NPREVTJyk7CiAgICAvLyBlbnRlciBZT1VSIEdvb2dsZSBNYXAgS2V5CiAgICAkbWFwLT5zZXRBUElLZXkoJ1lPVVJHT09HTEVNQVBLRVknKTsKICAgIAogICAgLy8gY3JlYXRlIHNvbWUgbWFwIG1hcmtlcnMKICAgICRtYXAtPmFkZE1hcmtlckJ5QWRkcmVzcygnNjIxIE4gNDh0aCBTdCAjIDYgTGluY29sbiBORSA2ODUwMicsJ1BKIFBpenphJywnPGI+UEogUGl6emE8L2I+Jyk7CiAgICAkbWFwLT5hZGRNYXJrZXJCeUFkZHJlc3MoJzgyNiBQIFN0IExpbmNvbG4gTkUgNjg1MDInLCdPbGQgQ2hpY2FnbycsJzxiPk9sZCBDaGljYWdvPC9iPicpOwogICAgJG1hcC0+YWRkTWFya2VyQnlBZGRyZXNzKCczNDU3IEhvbGRyZWdlIFN0IExpbmNvbG4gTkUgNjg1MDInLCJWYWxlbnRpbm8ncyIsIjxiPlZhbGVudGlubydzPC9iPiIpOwogICAgPz4KCiAgICA8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CiAgICA8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sbnM6dj0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiPgogICAgPGhlYWQ+CiAgICA8P3BocCAkbWFwLT5wcmludEhlYWRlckpTKCk7ID8+CiAgICA8P3BocCAkbWFwLT5wcmludE1hcEpTKCk7ID8+CiAgICA8IS0tIG5lY2Vzc2FyeSBmb3IgZ29vZ2xlIG1hcHMgcG9seWxpbmUgZHJhd2luZyBpbiBJRSAtLT4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiAgICAgIHZcOiogewogICAgICAgIGJlaGF2aW9yOnVybCgjZGVmYXVsdCNWTUwpOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPC9oZWFkPgogICAgPGJvZHkgb25sb2FkPSJvbkxvYWQoKSI+CiAgICA8dGFibGUgYm9yZGVyPTE+CiAgICA8dHI+PHRkPgogICAgPD9waHAgJG1hcC0+cHJpbnRNYXAoKTsgPz4KICAgIDwvdGQ+PHRkPgogICAgPD9waHAgJG1hcC0+cHJpbnRTaWRlYmFyKCk7ID8+CiAgICA8L3RkPjwvdHI+CiAgICA8L3RhYmxlPgogICAgPC9ib2R5PgogICAgPC9odG1sPgoKCgpPVVRQVVQ6CgogICAgVmlldyB0aGUgb3V0cHV0IG9mIHRoZSBhYm92ZSBleGFtcGxlIGhlcmU6CgogICAgaHR0cDovL3d3dy5waHBpbnNpZGVyLmNvbS9waHAvY29kZS9Hb29nbGVNYXBBUEkvZGVtby8KCiAgICAKREVTQ1JJUFRJT046CgogICAgR29vZ2xlTWFwQVBJIC0gQSBsaWJyYXJ5IHVzZWQgZm9yIGNyZWF0aW5nIGdvb2dsZSBtYXBzIHVzaW5nIHRoZQogICAgR29vZ2xlIE1hcCBwdWJsaWMgQVBJLiBGZWF0dXJlcyBpbmNsdWRlIG11bHRpcGxlIG1hcCBtYXJrZXJzLCBjdXN0b21pemFibGUKICAgIGljb25zLCBtYXAgZGlyZWN0aW9ucyBidWlsdCBpbnRvIGluZm8gd2luZG93LCBhbmQgc2lkZWJhciBnZW5lcmF0aW9uLgogICAgCiAgICBNb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBHb29nbGUgTWFwIEFQSSBjYW4gYmUgZm91bmQgaGVyZToKICAgIAogICAgaHR0cDovL3d3dy5nb29nbGUuY29tL2FwaXMvbWFwcy8KICAgIAoKQkFTRSBDTEFTUyBNRVRIT0RTOgotLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgR29vZ2xlTWFwQVBJKCRtYXBfaWQgPSAnbWFwJywgJGFwcF9pZCA9ICdNeU1hcEFwcCcpCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIAogICAgICAgIENsYXNzIENvbnN0cnVjdG9yLgogICAgICAgIFRoZSBtYXAgaWQgaXMgbmVlZGVkIG9ubHkgaWYgeW91IGhhdmUgbXVsdGlwbGUgbWFwcyBvbiB0aGUgc2FtZSBwYWdlLgogICAgICAgIFRoZSBBcHAgSUQgaXMgdXNlZCBmb3IgdGhlIFlhaG9vIEdlb0NvZGUgQVBJLCB3aGljaCBpcyB0aGUgZGVmYXVsdAogICAgICAgIGxvb2t1cCBzZXJ2aWNlLiBVc2UgYSB1bmlxdWUgQXBwIElEIHBlciBhcHBsaWNhdGlvbi4KICAgICAgICAKICAgICAgICBFeGFtcGxlOgogICAgICAgIAogICAgICAgIC8vIHVzZSBkZWZhdWx0cwogICAgICAgICRtYXAgPSBuZXcgR29vZ2xlTWFwQVBJKCk7CgogICAgICAgIC8vIHNldCBjdXN0b20gbWFwIGlkIGFuZCBhcHAgaWQKICAgICAgICAkbWFwID0gbmV3IEdvb2dsZU1hcEFQSSgnbXltYXAnLCdteWFwcCcpOwoKCiAgICBzZXREU04oJGRzbikKICAgIC0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgVXNlZCB0byBzZXQgdGhlIGRhdGFiYXNlIERTTi4gVGhlIGRhdGFiYXNlIGlzIHVzZWQgdG8gY2FjaGUKICAgICAgICBnZW9jb2RlIGxvb2t1cHMgKGhpZ2hseSByZWNvbW1lbmRlZCEpIFRoZSBQRUFSOjpEQiBtb2R1bGUKICAgICAgICBpcyByZXF1aXJlZCBmb3IgZGF0YWJhc2UgYWNjZXNzLiBZb3Ugd2lsbCBuZWVkIHRvIGNyZWF0ZQogICAgICAgIHRoZSBmb2xsb3dpbmcgZGF0YWJhc2Ugc2NoZW1hIChteXNxbCBleGFtcGxlIGdpdmVuKToKICAgICAgICAKICAgICAgICBDUkVBVEUgVEFCTEUgR0VPQ09ERVMgKAogICAgICAgICAgYWRkcmVzcyB2YXJjaGFyKDI1NSkgTk9UIE5VTEwgZGVmYXVsdCAnJywKICAgICAgICAgIGxvbiBmbG9hdCBkZWZhdWx0IE5VTEwsCiAgICAgICAgICBsYXQgZmxvYXQgZGVmYXVsdCBOVUxMLAogICAgICAgICAgUFJJTUFSWSBLRVkgIChhZGRyZXNzKQogICAgICAgICk7CiAgICAgICAgCiAgICAgICAgRXhhbXBsZToKICAgICAgICAKICAgICAgICAkbWFwLT5zZXREU04oJ215c3FsOi8vREJVU0VSOkRCUEFTU0BEQkhPU1QvREJOQU1FJyk7CiAgICAgICAgJG1hcC0+c2V0RFNOKCdteXNxbDovL2dlbzpmb29iYXJAbG9jYWxob3N0L0dFT0NPREVTJyk7CgogICAgCiAgICBzZXRBUElLZXkoJGtleSkKICAgIC0tLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgU2V0cyB0aGUgR29vZ2xlIE1hcCBBUEkgS2V5LiBUaGlzIGlzIG1hbmRhdG9yeSwgeW91IHdpbGwgbmVlZAogICAgICAgIGFuIEFQSSBLZXkgZm9yIHlvdXIgaG9zdG5hbWUhIFlvdSBjYW4gcmVnaXN0ZXIgZnJlZSBoZXJlOgogICAgICAgIAogICAgICAgIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9hcGlzL21hcHMvc2lnbnVwLmh0bWwKCiAgICAgICAgRXhhbXBsZToKICAgICAgICAKICAgICAgICAvLyBlbnRlciBZT1VSIHJlZ2lzdGVyZWQgQVBJIEtleQogICAgICAgICRtYXAtPnNldEFQSUtleSgnQUJRSUFBQUF4cDVGRi1BMFJoSE9ublRCd3JsUmJ4Jyk7CgoKICAgIHNldFdpZHRoKCR3aWR0aCkKICAgIC0tLS0tLS0tLS0tLS0tLS0KICAgIAogICAgICAgIFNldHMgdGhlIHdpZHRoIG9mIHRoZSBtYXAgd2luZG93LiBUaGlzIGNhbiBiZSBlaXRoZXIgcHggb3IgJS4KICAgICAgICBEZWZhdWx0IGlzIDUwMHB4LgogICAgCiAgICAgICAgRXhhbXBsZToKICAgICAgICAKICAgICAgICAkbWFwLT5zZXRXaWR0aCgnNTAwcHgnKTsKICAgICAgICAkbWFwLT5zZXRXaWR0aCgnMTAwJScpOwoKICAgIAogICAgc2V0SGVpZ2h0KCRoZWlnaHQpCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0KICAgIAogICAgICAgIFNldHMgdGhlIGhlaWdodCBvZiB0aGUgbWFwIHdpbmRvdy4gVGhpcyBjYW4gYmUgZWl0aGVyIHB4IG9yICUuCiAgICAgICAgRGVmYXVsdCBpcyAnNTAwcHgnLgogICAgCiAgICAgICAgRXhhbXBsZToKICAgICAgICAKICAgICAgICAkbWFwLT5zZXRIZWlnaHQoJzUwMHB4Jyk7CiAgICAgICAgJG1hcC0+c2V0SGVpZ2h0KCcxMDAlJyk7CiAgICAgICAgCiAgICAgICAgCiAgICBlbmFibGVNYXBDb250cm9scygpCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAKICAgICAgICBUaGlzIHdpbGwgZW5hYmxlIHRoZSBtYXAgY29udHJvbHMgdG8gem9vbS9tb3ZlIGFyb3VuZCB0aGUgbWFwLgogICAgICAgIEVuYWJsZWQgYnkgZGVmYXVsdC4KCgogICAgZGlzYWJsZU1hcENvbnRyb2xzKCkKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAKICAgICAgICBUaGlzIHdpbGwgZGlzYWJsZSB0aGUgbWFwIGNvbnRyb2xzIHRvIHpvb20vbW92ZSBhcm91bmQgdGhlIG1hcC4KICAgICAgICBFbmFibGVkIGJ5IGRlZmF1bHQuCgoKICAgIHNldFpvb21MZXZlbCgpCiAgICAtLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgVGhpcyBzZXRzIHRoZSBkZWZhdWx0IG1hcCB6b29tIGxldmVsLgogICAgICAgIAogICAgICAgIEV4YW1wbGU6CiAgICAgICAgCiAgICAgICAgJG1hcC0+c2V0Wm9vbUxldmVsKDQpOwoKCiAgICBzZXRDb250cm9sU2l6ZSgkc2l6ZSkKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgVGhpcyBzZXRzIHRoZSBtYXAgY29udHJvbCBzaXplLiBSZWxldmFudCBvbmx5IGlmIG1hcCBjb250cm9scyBhcmUKICAgICAgICBlbmFibGVkLiBsYXJnZSA9IG1hcCB6b29tL21vdmUgd2l0aCBzbGlkZXIuIHNtYWxsID0gem9vbS9tb3ZlIHdpdGhvdXQKICAgICAgICBzbGlkZXIuIExhcmdlIGlzIGRlZmF1bHQuCiAgICAgICAgCiAgICAgICAgRXhhbXBsZToKICAgICAgICAKICAgICAgICAkbWFwLT5zZXRDb250cm9sU2l6ZSA9ICdzbWFsbCc7CgoKICAgIGVuYWJsZVR5cGVDb250cm9scygpCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgVGhpcyB3aWxsIGVuYWJsZSB0aGUgbWFwIHR5cGUgY29udHJvbHMgKG1hcC9zYXRlbGxpdGUvaHlicmlkKS4KICAgICAgICBFbmFibGVkIGJ5IGRlZmF1bHQuCgoKICAgIGRpc2FibGVUeXBlQ29udHJvbHMoKQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAKICAgICAgICBUaGlzIHdpbGwgZGlzYWJsZSB0aGUgbWFwIHR5cGUgY29udHJvbHMgKG1hcC9zYXRlbGxpdGUvaHlicmlkKS4KICAgICAgICBFbmFibGVkIGJ5IGRlZmF1bHQuCgoKICAgIHNldE1hcFR5cGUoJHR5cGUpCiAgICAtLS0tLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgVGhpcyBzZXRzIHRoZSBkZWZhdWx0IG1hcCB0eXBlLiBSZWxldmFudCBvbmx5IGlmIG1hcCB0eXBlIGNvbnRyb2xzIGFyZQogICAgICAgIGVuYWJsZWQuIG1hcCA9IGRlZmF1bHQgbWFwLiBzYXRlbGxpdGUgPSBzYXRlbGxpdGUgdmlldy4gaHlicmlkID0gaHlicmlkCiAgICAgICAgdmlldy4KICAgICAgICAKICAgICAgICBFeGFtcGxlOgogICAgICAgIAogICAgICAgICRtYXAtPnNldE1hcFR5cGUoJ21hcCcpOyAvLyBkZWZhdWx0CiAgICAgICAgJG1hcC0+c2V0TWFwVHlwZSgnc2F0ZWxsaXRlJyk7CiAgICAgICAgJG1hcC0+c2V0TWFwVHlwZSgnaHlicmlkJyk7CiAgICAgICAgCiAgICAgICAgCiAgICBlbmFibGVTaWRlYmFyKCkKICAgIC0tLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgVGhpcyBlbmFibGVzIHRoZSBtYXAgc2lkZWJhci4gVXNlIHByaW50U2lkZUJhcigpIG9yIGdldFNpZGVCYXIoKSB0bwogICAgICAgIG91dHB1dCB0aGUgc2lkZWJhciB0ZXh0LiBFbmFibGVkIGJ5IGRlZmF1bHQuCgoKICAgIGRpc2FibGVTaWRlYmFyKCkKICAgIC0tLS0tLS0tLS0tLS0tLS0KICAgIAogICAgICAgIFRoaXMgZGlzYWJsZXMgdGhlIG1hcCBzaWRlYmFyLiBFbmFibGVkIGJ5IGRlZmF1bHQuCgogICAgCiAgICBlbmFibGVEaXJlY3Rpb25zKCkKICAgIC0tLS0tLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgVGhpcyBlbmFibGVzIG1hcCBkaXJlY3Rpb25zIGluIHRoZSBib3R0b20gb2YgdGhlIHBvcC11cCBpbmZvIHdpbmRvdy4KICAgICAgICBFbmFibGVkIGJ5IGRlZmF1bHQuICAgICAgICAKCgogICAgZGlzYWJsZURpcmVjdGlvbnMoKQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgVGhpcyBkaXNhYmxlcyBtYXAgZGlyZWN0aW9ucyBpbiB0aGUgYm90dG9tIG9mIHRoZSBwb3AtdXAgaW5mbyB3aW5kb3cuCiAgICAgICAgRW5hYmxlZCBieSBkZWZhdWx0LgoKICAgIGVuYWJsZVpvb21FbmNvbXBhc3MoKQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAKICAgICAgICBUaGlzIGVuYWJsZXMgem9vbSBlbmNvbXBhc3Mgc28gZGVmYXVsdCBtYXAgem9vbSBpcyBhcyBzbWFsbCBhcyBwb3NzaWJsZQogICAgICAgIGFuZCBpbmNsdWRlIGFsbCBtYXAgbWFya2Vycy4KICAgICAgICBFbmFibGVkIGJ5IERlZmF1bHQuCgogICAgZGlzYWJsZVpvb21FbmNvbXBhc3MoKQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgVGhpcyBkaXNhYmxlcyB6b29tIGVuY29tcGFzcy4KICAgICAgICBFbmFibGVkIGJ5IERlZmF1bHQuICAgICAgICAKCgogICAgc2V0Qm91bmRzRnVkZ2UoJHZhbCkKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAKICAgICAgICBTZXQgdGhlIG1hcCBib3VuZGFyeSBmdWRnZSBmYWN0b3IuIFRoaXMgd2lsbCBhZGp1c3QgaG93IG11Y2ggbWFwCiAgICAgICAgYm91bmRhcnkgZW5jb21wYXNzZXMgdGhlIG1hcCBtYXJrZXJzLiAoMC4wMSBpcyBkZWZhdWx0LikKICAgICAgICAKICAgICAgICBFeGFtcGxlOgogICAgICAgIAogICAgICAgICRtYXAtPnNldEJvdW5kc0Z1ZGdlKDAuMDEpOwogICAgICAgIAogICAgICAgIAogICAgc2V0QnJvd3NlckFsZXJ0KCRtZXNzYWdlKQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgVGhpcyBzZXRzIHRoZSBhbGVydCBtZXNzYWdlIHRoYXQgcG9wcyB1cCB3aGVuIGEgYnJvd3NlciBpcyBub3QKICAgICAgICBjb21wYXRpYmxlIHdpdGggdGhlIEdvb2dsZSBNYXAgQVBJLiBEZWZhdWx0IGlzOgogICAgICAgICJTb3JyeSwgdGhlIEdvb2dsZSBNYXBzIEFQSSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoaXMgYnJvd3Nlci4iCiAgICAgICAgCiAgICAgICAgCiAgICBzZXRKU0FsZXJ0KCRtZXNzYWdlKQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIAogICAgICAgIFRoaXMgc2V0cyB0aGUgYWxlcnQgbWVzc2FnZSB0aGF0IGRpc3BsYXlzIHdoZW4gamF2YXNjcmlwdCBpcyBkaXNhYmxlZC4KICAgICAgICBEZWZhdWx0OiAiPGI+SmF2YXNjcmlwdCBtdXN0IGJlIGVuYWJsZWQgaW4gb3JkZXIgdG8gdXNlIEdvb2dsZSBNYXBzLjwvYj4iCiAgICAKICAgICAgICAKICAgIGVuYWJsZU9uTG9hZCgpCiAgICAtLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgVGhpcyBlbmFibGVzIHRoZSBvbkxvYWQoKSBqYXZhc2NyaXB0IGZ1bmN0aW9uLCB3aGljaCBpcyB1c2VkIGJ5IGRlZmF1bHQuCiAgICAgICAgVGhpcyBhbGxvd3MgdGhlIG1hcCBqYXZhc2NyaXB0IHRvIGJlIHB1dCBpbnRvIHRoZSA8aGVhZD48L2hlYWQ+IHRhZywKICAgICAgICB0aGVuIGxvYWRlZCB1cG9uIHBhZ2UgZW50cnkgd2l0aCA8Ym9keSBvbmxvYWQ9Im9uTG9hZCgpIj4uIFdpdGggb25Mb2FkCiAgICAgICAgZGlzYWJsZWQsIHRoZSBtYXAgamF2YXNjcmlwdCBtdXN0IGJlIGVtYmVkZGVkIGluc2lkZSB0aGUgPGJvZHk+PC9ib2R5PgogICAgICAgIHRhZ3MuIFVzaW5nIG9uTG9hZCgpIGlzIHRoZSBiZXN0IG1ldGhvZCB0byB1c2UgZm9yIGJyb3dzZXIKICAgICAgICBjb21wYXRhYmlsaXR5LgoKCiAgICBlbmFibGVJbmZvV2luZG93KCkKICAgIC0tLS0tLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgZW5hYmxlcyBpbmZvIHdpbmRvd3Mgb24gbWFwIG1hcmtlcnMuCiAgICAgICAgRW5hYmxlZCBieSBkZWZhdWx0LgogICAgCgogICAgZGlzYWJsZUluZm9XaW5kb3coKQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICBkaXNhYmxlcyBpbmZvIHdpbmRvd3Mgb24gbWFwIG1hcmtlcnMuCiAgICAgICAgRW5hYmxlZCBieSBkZWZhdWx0LgoKICAgICAgICAKICAgIGRpc2FibGVPbkxvYWQoKQogICAgLS0tLS0tLS0tLS0tLS0tCiAgICAKICAgICAgICBUaGlzIGRpc2FibGVzIHRoZSBvbkxvYWQoKSBqYXZhc2NyaXB0IGZ1bmN0aW9uLiAoc2VlIGVuYWJsZU9uTG9hZCgpKQogICAgICAgIEVuYWJsZWQgYnkgZGVmYXVsdC4KICAgICAgICAKICAgICAgICAKICAgIHNldEluZm9XaW5kb3dUcmlnZ2VyKCR0eXBlKQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAKICAgICAgICBUaGlzIHNldHMgdGhlIGluZm8gd2luZG93IHRyaWdnZXIgYmVoYXZpb3IuIGNsaWNrID0gaW5mbyB3aW5kb3cgY29tZXMgdXAKICAgICAgICB3aGVuIGNsaWNraW5nIG9uIGEgbWFya2VyLiBtb3VzZW92ZXIgPSBpbmZvIHdpbmRvdyBjb21lcyB1cCB3aGVuIG1vdXNpbmcKICAgICAgICBvdmVyIGEgbWFya2VyLiBEZWZhdWx0IGlzIGNsaWNrLgogICAgICAgIAogICAgICAgIEV4YW1wbGU6CiAgICAgICAgCiAgICAgICAgJG1hcC0+c2V0SW5mb1dpbmRvd1RyaWdnZXIoJ21vdXNlb3ZlcicpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAKICAgIGFkZE1hcmtlckJ5QWRkcmVzcygkYWRkcmVzcywkdGl0bGUgPSAnJywkaHRtbCA9ICcnKQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAKICAgICAgICBUaGlzIGFkZHMgYSBtYXJrZXIgdG8gdGhlIG1hcC4gVGhlIGFkZHJlc3MgbXVzdCBiZSBhIGZ1bGx5IHF1YWxpZmllZAogICAgICAgIGFkZHJlc3MgdGhhdCBjYW4gYmUgdXNlZCBieSB0aGUgYXZhaWxhYmxlIGdlb2NvZGUgbG9va3VwIHNlcnZpY2VzLgogICAgICAgIAogICAgICAgIFRvIGFkZCBtYXJrZXJzIHdpdGggZ2VvY29kZXMgZGlyZWN0bHksIHNlZSBhZGRNYXJrZXJCeUNvb3JkcygpLgogICAgICAgIAogICAgICAgIFRoZSB0aXRsZSBpcyB1c2VkIGZvciB0aGUgc2lkZWJhciBuYXZpZ2F0aW9uIGxpbmsuIFRoZSBodG1sIGlzIHVzZWQKICAgICAgICBpbiB0aGUgaW5mbyB3aW5kb3cgdGhhdCBwb3BzIHVwIHdoZW4geW91IGNsaWNrIG9uIHRoZSBtYXAgbWFya2VyLiBJZgogICAgICAgIG5vIGh0bWwgaXMgcHJvdmlkZWQsIHRoZSB0aXRsZSB3aWxsIGJlIHVzZWQuCiAgICAgICAgCiAgICAgICAgTm90ZTogbWFwIGNlbnRlcmluZyBpcyBkb25lIGF1dG9tYXRpY2FsbHkgYXMgbWFya2VycyBhcmUgYWRkZWQuCiAgICAgICAgICAgICAgICAKICAgICAgICBFeGFtcGxlOgogICAgICAgIAogICAgICAgICRtYXAtPmFkZE1hcmtlckJ5QWRkcmVzcygnNjIxIE4gNDh0aCBTdCAjIDYgTGluY29sbiBORSA2ODUwMicsJ1BKIFBpenphJywnPGI+UEogUGl6emE8L2I+Jyk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIAogICAgYWRkTWFya2VyQnlDb29yZHMoJGxvbiwkbGF0LCR0aXRsZSA9ICcnLCRodG1sID0gJycpCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIAogICAgICAgIFRoaXMgYWRkcyBhIG1hcCBtYXJrZXIgYnkgZ2VvY29kZSAobG9uL2xhdCkgZGlyZWN0bHkuIFNlZQogICAgICAgIGFkZE1hcmtlckJ5QWRkcmVzcygpIGZvciBtb3JlIGRldGFpbHMuCgogICAgICAgIEV4YW1wbGU6CiAgICAgICAgCiAgICAgICAgJG1hcC0+YWRkTWFya2VyQnlBZGRyZXNzKC05Ni42NTM5LDQwLjgxOTEsJ1BKIFBpenphJywnPGI+UEogUGl6emE8L2I+Jyk7CiAgICAgICAgCiAgICAKICAgCiAgICBhZGRQb2x5TGluZUJ5QWRkcmVzcygkYWRkcmVzczEsJGFkZHJlc3MyLCRjb2xvciwkd2VpZ2h0LCRvcGFjaXR5KQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIAogICAgICAgIFRoaXMgYWRkcyBhIHBvbHlsaW5lIGJldHdlZW4gdGhlIHR3byBnaXZlbiBhZGRyZXNzZXMuIFlvdSBjYW4gb3B0aW9uYWxseQogICAgICAgIHN1cHBseSBhIGNvbG9yIChpbiAjZmZmZmZmIGhleCBub3RhdGlvbiksIHdlaWdodCAodGhpY2tuZXNzIGluIHBpeGVscyksCiAgICAgICAgYW5kIG9wYWNpdHkgKGluIHBlcmNlbnRhZ2UgMC0xMDApLgogICAgICAgIAogICAgICAgIEV4YW1wbGU6CiAgICAgICAgCiAgICAgICAgJG1hcC0+YWRkUG9seUxpbmVCeUFkZHJlc3MoCiAgICAgICAgICAgICczNDU3IEhvbGRyZWdlIFN0IExpbmNvbG4gTkUgNjg1MDInLAogICAgICAgICAgICAnODI2IFAgU3QgTGluY29sbiBORSA2ODUwMicsJyNlZWVlZWUnLDUsNTApOwogICAgICAgICAgICAgICAgCiAgICAgICAgCiAgICBhZGRQb2x5TGluZUJ5Q29vcmRzKCRsb24xLCRsYXQxLCRsb24yLCRsYXQyLCRjb2xvciwkd2VpZ2h0LCRvcGFjaXR5KQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIAogICAgICAgIFRoaXMgYWRkcyBhIHBvbHlsaW5lIGJldHdlZW4gdGhlIHR3byBnaXZlbiBnZW9jb29yZGluYXRlIHBvaW50cy4gWW91IGNhbiBvcHRpb25hbGx5CiAgICAgICAgc3VwcGx5IGEgY29sb3IgKGluICNmZmZmZmYgaGV4IG5vdGF0aW9uKSwgd2VpZ2h0IChsaW5lIHRoaWNrbmVzcyBpbiBwaXhlbHMpLAogICAgICAgIGFuZCBvcGFjaXR5IChpbiBwZXJjZW50YWdlIDAtMTAwKS4KCiAgICAgICAgRXhhbXBsZToKICAgICAgICAKICAgICAgICAkbWFwLT5hZGRQb2x5TGluZUJ5Q29vcmRzKC05Ni42Nyw0MC44Mjc5LC05Ni43MDk1LDQwLjgxNDksJyNlZWVlZWUnLDUsNTApOwoKICAgICAgICAgICAgICAgIAogICAgYWRqdXN0Q2VudGVyQ29vcmRzKCRsb24sJGxhdCkKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAKICAgICAgICBUaGlzIGFkanVzdHMgdGhlIG1hcCBjZW50ZXIgY29vcmRzIGJ5IHRoZSBnaXZlbiBsb24vbGF0LiBUaGlzIGlzIGRvbmUKICAgICAgICBhdXRvbWF0aWNhbGx5IGFzIHlvdSBhZGQgbWFya2VycyB0byB0aGUgbWFwLCBvciB5b3UgY2FuIGRvIGl0IG1hbnVhbGx5CiAgICAgICAgd2l0aCB0aGlzIGZ1bmN0aW9uLiBOb3RlOiB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgaW50ZXJuYWxseSBieSB0aGUKICAgICAgICBsaWJyYXJ5LCBpdCBpc24ndCBub3JtYWxseSBuZWNlc3NhcnkgdW5sZXNzIHlvdSBoYXZlIGEgc3BlY2lmaWMgbmVlZCBhbmQKICAgICAgICB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCgogICAgICAgIAogICAgc2V0Q2VudGVyQ29vcmRzKCRsb24sJGxhdCkKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAKICAgICAgICBUaGlzIHNldHMgdGhlIG1hcCBjZW50ZXIgY29vcmRzIHRvIHRoZSBnaXZlbiBsb24vbGF0LiBDZW50ZXIgY29vcmRzIGFyZQogICAgICAgIGNhbGN1bGF0ZWQgYXV0b21hdGljYWxseSBhcyB5b3UgYWRkIG1hcmtlcnMgdG8gdGhlIG1hcCwgb3IgeW91IHJlc2V0IGl0CiAgICAgICAgbWFudWFsbHkgd2l0aCB0aGlzIGZ1bmN0aW9uLiBOb3RlOiB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgaW50ZXJuYWxseSBieQogICAgICAgIHRoZSBsaWJyYXJ5LCBpdCBpc24ndCBub3JtYWxseSBuZWNlc3NhcnkgdW5sZXNzIHlvdSBoYXZlIGEgc3BlY2lmaWMgbmVlZAogICAgICAgIGFuZCB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCgoKICAgIHNldExvb2t1cFNlcnZpY2UoJ1lBSE9PJykKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgIAogICAgICAgIFRoaXMgc2V0cyB0aGUgZ2VvY29kZSBsb29rdXAgc2VydmljZS4gRGVmYXVsdCBpcyBZQUhPTywgd2hpY2ggdXNlcyB0aGUKICAgICAgICBZYWhvbyBHZW9jb2RlIEFQSS4gVGhpcyAoY3VycmVudGx5KSB3b3JrcyBmb3IgVVMgYWRkcmVzc2VzIG9ubHkuIEFsc28KICAgICAgICBhdmFpbGFibGUgaXMgR09PR0xFIHdoaWNoIGNhbiBkbyBpbnRsIGFkZHJlc3Nlcy4gQmUgd2FybmVkIHRoaXMgaXMgYQogICAgICAgIGhhY2ssIG5vdCBhbiBvZmZpY2lhbCBBUEkuIFVzZSBhdCB5b3VyIG93biByaXNrLCBubyBndWFyYW50ZWVzLgogICAgCiAgICAKICAgIHNldE1hcmtlckljb24oJGljb25JbWFnZSwkaWNvblNoYWRvd0ltYWdlLCRpY29uQW5jaG9yWCwkaWNvbkFuY2hvclksJGluZm9XaW5kb3dBbmNob3JYLCRpbmZvV2luZG93QW5jaG9yWSkKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIAogICAgICAgIFRoaXMgc2V0cyB0aGUgaWNvbiBpbWFnZSBmb3IgQUxMIHRoZSBtYXAgbWFya2Vycy4gQ2FsbCB0aGlzIG9uY2UuIElmIHlvdQogICAgICAgIHdhbnQgdG8gc2V0IGEgZGlmZmVyZW50IGljb24gZm9yIGVhY2ggbWFya2VyLCB1c2UgYWRkTWFya2VySWNvbigpCiAgICAgICAgaW5zdGVhZC4KICAgICAgICAKICAgICAgICBZb3UgbXVzdCBzdXBwbHkgYSBzZXBhcmF0ZSBpbWFnZSBmb3IgdGhlIGljb24gYW5kIGl0cyBzaGFkb3cuCiAgICAgICAgaWNvbkFuY2hvclgvWSBpcyB0aGUgWC9ZIGNvb3JkaW5hdGVzIG9mIHRoZSBpY29uIGZvciB0aGUgbWFwIHBvaW50LgogICAgICAgIGluZm9XaW5kb3dBbmNob3JYL1kgaXMgdGhlIFgvWSBjb29yZGluYXRlcyBvZiB0aGUgaWNvbiB3aGVyZSB0aGUgaW5mbwogICAgICAgIHdpbmRvdyBjb25uZWN0cy4KICAgICAgICAKICAgICAgICBUaGUgaWNvbkltYWdlIGFuZCBpY29uU2hhZG93SW1hZ2UgY2FuIGJlIGVpdGhlciBmdWxseSBxdWFsaWZpZWQgVVJMcywgb3IKICAgICAgICBhIHJlbGF0aXZlIHBhdGggZnJvbSB5b3VyIHdlYiBzZXJ2ZXIgRE9DVU1FTlRfUk9PVC4gVGhlc2UgaW1hZ2VzIE1VU1QKICAgICAgICBleGlzdCBhbmQgcmVhZGFibGUgc28gdGhlIGxpYnJhcnkgY2FuIGNhbGN1bGF0ZSB0aGUgZGltZW5zaW9ucy4KICAgICAgICAKICAgICAgICBFeGFtcGxlOgogICAgICAgIAogICAgICAgICRtYXAtPnNldE1hcmtlckljb24oJy9pbWFnZXMvaG91c2UucG5nJywnL2ltYWdlcy9ob3VzZV9zaGFkb3cucG5nJywwLDAsMTAsMTApOwoKCiAgICBhZGRNYXJrZXJJY29uKCRpY29uSW1hZ2UsJGljb25TaGFkb3dJbWFnZSwkaWNvbkFuY2hvclgsJGljb25BbmNob3JZLCRpbmZvV2luZG93QW5jaG9yWCwkaW5mb1dpbmRvd0FuY2hvclkpCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAKICAgICAgICBUaGlzIHNldHMgdGhlIGljb24gaW1hZ2UgZm9yIHRoZSBDVVJSRU5UIG1hcCBtYXJrZXIuIElNUE9SVEFOVDogeW91IE1VU1QKICAgICAgICBjYWxsIGFkZE1hcmtlckljb24oKSBvbmNlIGZvciBldmVyeSBtYXJrZXIuIERvIG5vdCB1c2Ugc2V0TWFya2VySWNvbigpCiAgICAgICAgaWYgeW91IHVzZSB0aGlzIGZ1bmN0aW9uLgogICAgICAgIAogICAgICAgIFlvdSBtdXN0IHN1cHBseSBhIHNlcGFyYXRlIGltYWdlIGZvciB0aGUgaWNvbiBhbmQgaXRzIHNoYWRvdy4KICAgICAgICBpY29uQW5jaG9yWC9ZIGlzIHRoZSBYL1kgY29vcmRpbmF0ZXMgb2YgdGhlIGljb24gZm9yIHRoZSBtYXAgcG9pbnQuCiAgICAgICAgaW5mb1dpbmRvd0FuY2hvclgvWSBpcyB0aGUgWC9ZIGNvb3JkaW5hdGVzIG9mIHRoZSBpY29uIHdoZXJlIHRoZSBpbmZvCiAgICAgICAgd2luZG93IGNvbm5lY3RzLgogICAgICAgIAogICAgICAgIFRoZSBpY29uSW1hZ2UgYW5kIGljb25TaGFkb3dJbWFnZSBjYW4gYmUgZWl0aGVyIGZ1bGx5IHF1YWxpZmllZCBVUkxzLCBvcgogICAgICAgIGEgcmVsYXRpdmUgcGF0aCBmcm9tIHlvdXIgd2ViIHNlcnZlciBET0NVTUVOVF9ST09ULiBUaGVzZSBpbWFnZXMgTVVTVAogICAgICAgIGV4aXN0IGFuZCByZWFkYWJsZSBzbyB0aGUgbGlicmFyeSBjYW4gY2FsY3VsYXRlIHRoZSBkaW1lbnNpb25zLgogICAgICAgIAogICAgICAgIEV4YW1wbGU6CiAgICAgICAgCiAgICAgICAgJG1hcC0+YWRkTWFya2VySWNvbignL2ltYWdlcy9ob3VzZS5wbmcnLCcvaW1hZ2VzL2hvdXNlX3NoYWRvdy5wbmcnLDAsMCwxMCwxMCk7CgoKICAgIHByaW50SGVhZGVySlMoKQogICAgLS0tLS0tLS0tLS0tLS0tCgogICAgICAgIFRoaXMgcHJpbnRzIHRoZSBoZWFkZXIgamF2YXNjcmlwdCB0aGF0IGdvZXMgaW50byB0aGUgPGhlYWQ+PC9oZWFkPiB0YWdzLgogICAgICAgIFRvIHJldHVybiB0aGUgaGVhZGVyIGphdmFzY3JpcHQgaW4gYSB2YXJpYWJsZSwgdXNlIGdldEhlYWRlckpTKCkuCiAgICAgICAgCiAgICAgICAgRXhhbXBsZToKICAgICAgICAKICAgICAgICA8aGVhZD4KICAgICAgICA8P3BocCAkbWFwLT5wcmludEhlYWRlckpTKCk7ID8+CiAgICAgICAgPC9oZWFkPgogICAgCgogICAgZ2V0SGVhZGVySlMoKQogICAgLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgVGhpcyByZXR1cm5zIHRoZSBoZWFkZXIgamF2YXNjcmlwdCB0aGF0IGdvZXMgaW50byB0aGUgPGhlYWQ+PC9oZWFkPiB0YWdzLgogICAgICAgIFRvIHByaW50IHRoZSBoZWFkZXIgamF2YXNjcmlwdCBkaXJlY3RseSwgdXNlIHByaW50SGVhZGVySlMoKS4KICAgICAgICAKICAgICAgICBFeGFtcGxlOgogICAgICAgIAogICAgICAgIDw/cGhwCiAgICAgICAgJGhlYWRlcmpzID0gZ2V0SGVhZGVySlMoKTsKICAgICAgICA/PgogICAgICAgIDxoZWFkPgogICAgICAgIDw/cGhwIGVjaG8gJGhlYWRlcmpzOyA/PgogICAgICAgIDwvaGVhZD4KICAgICAgICAKICAgICAgICAKICAgIHByaW50TWFwSlMoKQogICAgLS0tLS0tLS0tLS0tCgogICAgICAgIFRoaXMgcHJpbnRzIHRoZSBtYXAgamF2YXNjcmlwdC4gSWYgb25Mb2FkKCkgaXMgZW5hYmxlZCwgcHV0IHRoaXMgaW4gdGhlCiAgICAgICAgPGhlYWQ+PC9oZWFkPiB0YWdzLCBhbmQgc3VwcGx5IDxib2R5IG9ubG9hZD0ib25Mb2FkKCkiPiBpbiB0aGUgYm9keSB0YWcuCiAgICAgICAgT3RoZXJ3aXNlLCBwdXQgdGhpcyBqdXN0IGJlZm9yZSB0aGUgPC9ib2R5PiB0YWcuCiAgICAgICAgCiAgICAgICAgVG8gcmV0dXJuIHRoZSBtYXAgamF2YXNjcmlwdCBpbiBhIHZhcmlhYmxlLCB1c2UgZ2V0TWFwSlMoKS4KICAgICAgICAKICAgICAgICBFeGFtcGxlOgogICAgICAgIAogICAgICAgIDxoZWFkPgogICAgICAgIDw/cGhwICRtYXAtPnByaW50TWFwSlMoKTsgPz4KICAgICAgICA8L2hlYWQ+CiAgICAKICAgIAogICAgZ2V0TWFwSlMoKQogICAgLS0tLS0tLS0tLQoKICAgICAgICBUaGlzIHJldHVybnMgdGhlIG1hcCBqYXZhc2NyaXB0IHRoYXQgZ29lcyBpbnRvIHRoZSA8aGVhZD48L2hlYWQ+IHRhZ3MuCiAgICAgICAgVG8gcHJpbnQgdGhlIG1hcCBqYXZhc2NyaXB0IGRpcmVjdGx5LCB1c2UgcHJpbnRNYXBKUygpLgogICAgICAgIAogICAgICAgIEV4YW1wbGU6CiAgICAgICAgCiAgICAgICAgPD9waHAKICAgICAgICAkbWFwanMgPSAkbWFwLT5wcmludE1hcEpTKCk7CiAgICAgICAgPz4KICAgICAgICA8aGVhZD4KICAgICAgICA8P3BocCBlY2hvICRtYXBqczsgPz4KICAgICAgICA8L2hlYWQ+CiAgICAgICAgCiAgICAgICAgCiAgICBwcmludE1hcCgpCiAgICAtLS0tLS0tLS0tCgogICAgICAgIFRoaXMgcHJpbnRzIHRoZSBtYXAgaHRtbC4KICAgICAgICBUbyByZXR1cm4gdGhlIG1hcCBodG1sIGluIGEgdmFyaWFibGUsIHVzZSBnZXRNYXAoKS4KICAgICAgICAKICAgICAgICBFeGFtcGxlOgogICAgICAgIAogICAgICAgIDxib2R5IG9ubG9hZD0ib25Mb2FkKCkiPgogICAgICAgIDw/cGhwIGVjaG8gJG1hcC0+cHJpbnRNYXAoKTsgPz4KICAgICAgICA8L2JvZHk+CiAgICAKICAgIAogICAgZ2V0TWFwKCkKICAgIC0tLS0tLS0tCgogICAgICAgIFRoaXMgcmV0dXJucyB0aGUgbWFwIGh0bWwgaW4gYSB2YXJpYWJsZS4KICAgICAgICBUbyBwcmludCB0aGUgbWFwIGh0bWwgZGlyZWN0bHksIHVzZSBwcmludE1hcCgpLgogICAgICAgIAogICAgICAgIEV4YW1wbGU6CiAgICAgICAgCiAgICAgICAgPD9waHAKICAgICAgICAkbWFwID0gJG1hcC0+Z2V0TWFwKCk7CiAgICAgICAgPz4KICAgICAgICA8Ym9keSBvbmxvYWQ9Im9uTG9hZCgpIj4KICAgICAgICA8P3BocCBlY2hvICRtYXA7ID8+CiAgICAgICAgPC9ib2R5PgoKCiAgICBwcmludFNpZGViYXIoKQogICAgLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgVGhpcyBwcmludHMgdGhlIHNpZGViYXIgaHRtbC4KICAgICAgICBUbyByZXR1cm4gdGhlIHNpZGViYXIgaHRtbCBpbiBhIHZhcmlhYmxlLCB1c2UgZ2V0U2lkZWJhcigpLgogICAgICAgIAogICAgICAgIEV4YW1wbGU6CiAgICAgICAgCiAgICAgICAgPGJvZHkgb25sb2FkPSJvbkxvYWQoKSI+CiAgICAgICAgPHRhYmxlPgogICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgPD9waHAgJG1hcC0+cHJpbnRNYXAoKTsgPz4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgPD9waHAgJG1hcC0+cHJpbnRTaWRlYmFyKCk7ID8+CiAgICAgICAgICA8L3RkPgogICAgICAgICA8L3RyPgogICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9ib2R5PgogICAgCiAgICAKICAgIGdldFNpZGViYXIoKQogICAgLS0tLS0tLS0tLS0tCgogICAgICAgIFRoaXMgcmV0dXJucyB0aGUgc2lkZWJhciBodG1sIGluIGEgdmFyaWFibGUuCiAgICAgICAgVG8gcHJpbnQgdGhlIHNpZGJhciBodG1sIGRpcmVjdGx5LCB1c2UgcHJpbnRTaWRlYmFyKCkuCiAgICAgICAgCiAgICAgICAgRXhhbXBsZToKICAgICAgICAKICAgICAgICA8P3BocAogICAgICAgICRtYXAgPSAkbWFwLT5nZXRNYXAoKTsKICAgICAgICAkc2lkZWJhciA9ICRtYXAtPmdldFNpZGViYXIoKTsKICAgICAgICA/PgogICAgICAgIDxib2R5IG9ubG9hZD0ib25Mb2FkKCkiPgogICAgICAgIDx0YWJsZT4KICAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgPD9waHAgZWNobyAkbWFwOyA/PgogICAgICAgICAgPC90ZD4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICA8P3BocCBlY2hvICRzaWRlYmFyOyA/PgogICAgICAgICAgPC90ZD4KICAgICAgICAgPC90cj4KICAgICAgICA8L3RhYmxlPgogICAgICAgIDwvYm9keT4KICAgICAgICAgICAgICAgIAogICAgCiAgICBnZXRHZW9jb2RlKCRhZGRyZXNzKQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIAogICAgICAgIFRoaXMgbG9va3MgdXAgdGhlIGdlb2NvZGUgb2YgYW4gYWRkcmVzcy4gSXQgd2lsbCB1c2UgdGhlIGRhdGFiYXNlIGNhY2hlCiAgICAgICAgaWYgYXZhaWxhYmxlLiBJZiB5b3Ugd2FudCB0byBsb29rdXAgYSBnZW9jb2RlIHdpdGhvdXQgdXNpbmcgdGhlIGRhdGFiYXNlCiAgICAgICAgY2FjaGUsIHVzZSBnZW9HZXRDb29yZHMoKS4gTm90ZTogdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGludGVybmFsbHkgYnkgdGhlCiAgICAgICAgbGlicmFyeSwgaXQgaXNuJ3Qgbm9ybWFsbHkgbmVjZXNzYXJ5IHVubGVzcyB5b3UgaGF2ZSBhIHNwZWNpZmljIG5lZWQgYW5kCiAgICAgICAgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLgogICAgICAgIAogICAgICAgIEV4YW1wbGU6CiAgICAgICAgCiAgICAgICAgJGdlb2NvZGUgPSAkbWFwLT5nZXRHZW9jb2RlKCcyMzcgUyA3MHRoIHN1aXRlIDIyMCBMaW5jb2xuIE5FIDY4NTEwJyk7CiAgICAgICAgCiAgICAgICAgZWNobyAkZ2VvY29kZVsnbGF0J107CiAgICAgICAgZWNobyAkZ2VvY29kZVsnbG9uJ107CiAgICAgICAgCiAgICAgICAgCiAgICBnZXRDYWNoZSgkYWRkcmVzcykKICAgIC0tLS0tLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgVGhpcyB3aWxsIGdldCB0aGUgY2FjaGVkIGdlb2NvZGUgaW5mbyBmb3IgYW4gYWRkcmVzcyBmcm9tIHRoZSBkYXRhYmFzZQogICAgICAgIGNhY2hlLCBvciByZXR1cm4gRkFMU0UgaWYgbm90aGluZyBpcyBhdmFpbGFibGUuIE5vdGU6IHRoaXMgZnVuY3Rpb24gaXMKICAgICAgICB1c2VkIGludGVybmFsbHkgYnkgdGhlIGxpYnJhcnksIGl0IGlzbid0IG5vcm1hbGx5IG5lY2Vzc2FyeSB1bmxlc3MgeW91CiAgICAgICAgaGF2ZSBhIHNwZWNpZmljIG5lZWQgYW5kIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4KICAgICAgICAKICAgICAgICBFeGFtcGxlOgogICAgICAgIAogICAgICAgICRnZW9jb2RlID0gJG1hcC0+Z2V0Q2FjaGUoJzIzNyBTIDcwdGggc3VpdGUgMjIwIExpbmNvbG4gTkUgNjg1MTAnKTsKICAgICAgICAKICAgICAgICBlY2hvICRnZW9jb2RlWydsYXQnXTsKICAgICAgICBlY2hvICRnZW9jb2RlWydsb24nXTsKICAgICAgICAKCiAgICBwdXRDYWNoZSgkYWRkcmVzcywkbG9uLCRsYXQpCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAKICAgICAgICBUaGlzIHdpbGwgaW5zZXJ0IGdlb2NvZGUgaW5mbyBmb3IgdGhlIGdpdmVuIGFkZHJlc3MgaW50byB0aGUgZGF0YWJhc2UKICAgICAgICBjYWNoZS4gTm90ZTogdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGludGVybmFsbHkgYnkgdGhlIGxpYnJhcnksIGl0IGlzbid0CiAgICAgICAgbm9ybWFsbHkgbmVjZXNzYXJ5IHVubGVzcyB5b3UgaGF2ZSBhIHNwZWNpZmljIG5lZWQgYW5kIHlvdSBrbm93IHdoYXQgeW91CiAgICAgICAgYXJlIGRvaW5nLgogICAgICAgIAogICAgICAgIEV4YW1wbGU6CiAgICAgICAgCiAgICAgICAgJG1hcC0+cHV0Q2FjaGUoJzIzNyBTIDcwdGggc3VpdGUgMjIwIExpbmNvbG4gTkUgNjg1MTAnLC05Ni42MjUzOCw0MC44MTI0MzgpOwogICAgICAgIAoKICAgIGdlb0dldENvb3JkcygkYWRkcmVzcykKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIAogICAgICAgIFRoaXMgbG9va3MgdXAgdGhlIGdlb2NvZGUgb2YgYW4gYWRkcmVzcyBkaXJlY3RseSAobm90IGZyb20gY2FjaGUuKSBOb3RlOgogICAgICAgIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBsaWJyYXJ5LCBpdCBpc24ndCBub3JtYWxseQogICAgICAgIG5lY2Vzc2FyeSB1bmxlc3MgeW91IGhhdmUgYSBzcGVjaWZpYyBuZWVkIGFuZCB5b3Uga25vdyB3aGF0IHlvdSBhcmUKICAgICAgICBkb2luZy4KICAgICAgICAKICAgICAgICBFeGFtcGxlOgogICAgICAgIAogICAgICAgICRnZW9jb2RlID0gJG1hcC0+Z2VvR2V0Q29vcmRzKCcyMzcgUyA3MHRoIHN1aXRlIDIyMCBMaW5jb2xuIE5FIDY4NTEwJyk7CiAgICAgICAgCiAgICAgICAgZWNobyAkZ2VvY29kZVsnbG9uJ107CiAgICAgICAgZWNobyAkZ2VvY29kZVsnbGF0J107CgogICAgICAgIAogICAgICAgIApJTlRFR1JBVElORyBHT09HTEUgTUFQUyBXSVRIIFNNQVJUWSBURU1QTEFURVMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgSW50ZWdyYXRpbmcgd2l0aCBTbWFydHkgaXMgYXMgc2ltcGxlIGFzIGFzc2lnbmluZyB0aGUgbmVjZXNzYXJ5IHZhcnMgdG8gdGhlCiAgICB0ZW1wbGF0ZSBhbmQgdGhlbiBkaXNwbGF5aW5nIHRoZW0uIE5vdGU6IFRoaXMgZXhhbXBsZSBkb2VzIG5vdCBjb3ZlciBob3cgdG8KICAgIHNldHVwIFNtYXJ0eSwgcGxlYXNlIHVzZSB0aGUgU21hcnR5IGRvY3VtZW50YXRpb24uCiAgICAKICAgIEV4YW1wbGU6CiAgICAKICAgIDw/cGhwCiAgICByZXF1aXJlKCdTbWFydHkuY2xhc3MucGhwJyk7CiAgICByZXF1aXJlKCdHb29nbGVNYXBBUEkuY2xhc3MucGhwJyk7CgogICAgJHNtYXJ0eSA9IG5ldyBTbWFydHkoKTsKICAgICRtYXAgPSBuZXcgR29vZ2xlTWFwQVBJKCk7CiAgICAKICAgIC8vIHNldHVwIGRhdGFiYXNlIGZvciBnZW9jb2RlIGNhY2hpbmcKICAgICRtYXAtPnNldERTTignbXlzcWw6Ly9VU0VSOlBBU1NAbG9jYWxob3N0L0dFT0NPREVTJyk7CiAgICAvLyBlbnRlciBZT1VSIEdvb2dsZSBNYXAgS2V5CiAgICAkbWFwLT5zZXRBUElLZXkoJ1lPVVJHT09HTEVNQVBLRVknKTsKICAgIAogICAgLy8gY3JlYXRlIHNvbWUgbWFwIG1hcmtlcnMKICAgICRtYXAtPmFkZE1hcmtlckJ5QWRkcmVzcygnNjIxIE4gNDh0aCBTdCAjIDYgTGluY29sbiBORSA2ODUwMicsJ1BKIFBpenphJywnPGI+UEogUGl6emE8L2I+Jyk7CiAgICAkbWFwLT5hZGRNYXJrZXJCeUFkZHJlc3MoJzgyNiBQIFN0IExpbmNvbG4gTkUgNjg1MDInLCdPbGQgQ2hpY2FnbycsJzxiPk9sZCBDaGljYWdvPC9iPicpOwogICAgJG1hcC0+YWRkTWFya2VyQnlBZGRyZXNzKCczNDU3IEhvbGRyZWdlIFN0IExpbmNvbG4gTkUgNjg1MDInLCJWYWxlbnRpbm8ncyIsIjxiPlZhbGVudGlubydzPC9iPiIpOwogICAgCiAgICAvLyBhc3NpZ24gU21hcnR5IHZhcmlhYmxlczsKICAgIAogICAgJHNtYXJ0eS0+YXNzaWduKCdnb29nbGVfbWFwX2hlYWRlcicsJG1hcC0+Z2V0SGVhZGVySlMoKSk7CiAgICAkc21hcnR5LT5hc3NpZ24oJ2dvb2dsZV9tYXBfanMnLCRtYXAtPmdldE1hcEpTKCkpOwogICAgJHNtYXJ0eS0+YXNzaWduKCdnb29nbGVfbWFwX3NpZGViYXInLCRtYXAtPmdldFNpZGViYXIoKSk7CiAgICAkc21hcnR5LT5hc3NpZ24oJ2dvb2dsZV9tYXAnLCRtYXAtPmdldE1hcCgpKTsKICAgIAogICAgLy8gZGlzcGxheSB0aGUgdGVtcGxhdGUKICAgICRzbWFydHktPmRpc3BsYXkoJ2luZGV4LnRwbCcpOwogICAgPz4KICAgIAogICAgY29udGVudHMgb2YgaW5kZXgudHBsOgogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgCiAgICA8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CiAgICA8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sbnM6dj0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiPgogICAgPGhlYWQ+CiAgICB7JGdvb2dsZV9tYXBfaGVhZGVyfQogICAgeyRnb29nbGVfbWFwX2pzfQogICAgPCEtLSBuZWNlc3NhcnkgZm9yIGdvb2dsZSBtYXBzIHBvbHlsaW5lIGRyYXdpbmcgaW4gSUUgLS0+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogICAgICB2XDoqIHsKICAgICAgICBiZWhhdmlvcjp1cmwoI2RlZmF1bHQjVk1MKTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDwvaGVhZD4KICAgIDxib2R5IG9ubG9hZD0ib25Mb2FkKCkiPgogICAgPHRhYmxlPgogICAgICA8dHI+CiAgICAgICAgPHRkPnskZ29vZ2xlX21hcH08L3RkPgogICAgICAgIDx0ZD57JGdvb2dsZV9tYXBfc2lkZWJhcn08L3RkPgogICAgICA8L3RyPgogICAgPC90YWJsZT4KICAgIDwvYm9keT4KICAgIDwvaHRtbD4KCgpDUkVESVRTOgotLS0tLS0tLQoKRXhjZWxsZW50IEdvb2dsZSBNYXBzIHR1dG9yaWFscyBieSBNaWtlOgpodHRwOi8vd3d3LmVjb255bS5kZW1vbi5jby51ay9nb29nbGVtYXBzL2luZGV4Lmh0bQoKUGVvcGxlIHdobyBoYXZlIGhlbHBlZC9jb250cmlidXRlZDoKCkNoYXJsaWUgRGF3ZXMKSmFrZSBLcm9obgpDbGFyayBGcmVpZmVsZCA8Y2xhcmsgQVQgdXNlcnMgRE9UIHNvdXJjZWZvcmdlIERPVCBuZXQ+CgpBbnlvbmUgSSBtaXNzZWQsIGRyb3AgbWUgYSBsaW5lIQoKTW9udGUgT2hydCA8bW9udGUgW0FUXSBvaHJ0IFtET1RdIGNvbT4K]]></data>
	</file>
	<file>
	  <filename>/lib/rcrud.inc.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiAgIC8qCiAgIAogICAgICBSQ1JVRCBDbGFzcwogICAgICBieSBSb2JlcnQgQnJvd24KICAgICAgYnJvd25ybEBnbWFpbC5jb20KICAgICAgCiAgICAgIHZlcnNpb246IC4wNCAyMDA2LTA3LTIwCiAgICAgIAogICAgICBVc2VhZ2U6CiAgICAgIAogICAgICByZXF1aXJlX29uY2UoICdyY3J1ZC5pbmMucGhwJyApOwogICAgICAkY28gPSBuZXcgcmNydWQoICRhZG9kYmxpdGVfZGJfY29ubmVjdGlvbiAsICd0YWJsZV9uYW1lJyApOwogICAgICAkY28tPmdvKCk7CiAgIAogICAKICAgKi8KCgogICBjbGFzcyByY3J1ZAogICB7CgogICAgICAjdGhpcyB2YXIgaXMgdGhlIHRhYmxlIHRoYXQgdGhpcyBvYmplY3Qgd2lsbCBjcnVkIG9uICAgCiAgICAgIHZhciAkdGFibGU7CiAgICAgIAogICAgICAjdGhpcyB2YXIgd2lsbCBob2xkcyBmaWVsZHMgYW5kIGNvbmZpZyBpbmZvCiAgICAgIHZhciAkZmllbGRzID0gYXJyYXkoKTsKICAgICAgCiAgICAgICN0aGlzIHZhciBob2xkcyB0aGUgYWRvZGJsaXRlIGRiIGNvbm5lY3Rpb24KICAgICAgdmFyICRkYjsKICAgICAgCiAgICAgICN0aGlzIHZhciBob2xkcyB0aGUga2V5IGZpZWxkCiAgICAgIHZhciAka2V5OwogICAgICAKICAgICAgI3RoaXMgdmFyIGhvbGRzIHRoZSBjb2xvciBmb3IgdGhlIGVycm9ycyBpbiBhIGZvcm0sIGllLCByZWQgLCAjRkYwMDAwCiAgICAgIHZhciAkZXJyb3Jjb2xvciA9ICIjRkYwMDAwIjsKICAgICAgCiAgICAgICN0aGlzIHZhcmlhYmxlIGhvbGRzIHRoZSB0ZXh0IHRvIGJlIGRpc3BsYXllZCBhYm92ZSBnZXRzIHNldCBpbiB0aGUgY29uc3RydWN0b3IKICAgICAgdmFyICRoZWFkZXI7CiAgICAgIAogICAgICAjdGhpcyB2YXJpYWJsZSBob2xkcyB3aGljaCBmaWVsZCB0aGF0IHdlIHNob3VsZCBzb3J0IGJ5IGluIHRoZSBsaXN0aW5nCiAgICAgICNnZXRzIHNldCB0byB0aGUga2V5IGluIHRoZSBjb25zdHJ1Y3RvcgogICAgICB2YXIgJGRlZl9zb3J0OwogICAKICAgCiAgIAogICAgICBmdW5jdGlvbiByY3J1ZCggJGRiICwgJHRhYmxlbmFtZSApCiAgICAgIHsKICAgICAgICAgJHRoaXMtPmRiID0gJGRiOwogICAgICAgICAkdGhpcy0+dGFibGUgPSAkdGFibGVuYW1lOwogICAgICAgICAKICAgICAgICAgJHEgPSAiREVTQ1JJQkUgIi4kdGhpcy0+dGFibGU7CiAgICAgICAgICRxciA9ICRkYi0+RXhlY3V0ZSggJHEgKSBvciBkaWUoICJUaGUgZGF0YWJhc2UgY29ubmVjdGlvbiBvciB0YWJsZSBzdXBwbGllZCB0byByY3J1ZCBpcyBpbnZhbGlkLCBwbGVhc2UgY2hlY2sgY29kZSBhbmQgdHJ5IGFnYWluLiIgKTsKICAgICAgICAgCiAgICAgICAgIGlmKCAkcXItPlJlY29yZENvdW50KCkgPCAxICkKICAgICAgICAgewogICAgICAgICAgICBkaWUoICJUaGUgdGFibGUgbmFtZSBzdXBwbGllZCB0byByY3J1ZCBpcyBpbnZhbGlkIiApOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewogICAgICAgICAgICAkdGhpcy0+aGVhZGVyID0gJHRoaXMtPmZpZWxkMmxhYmVsKCAkdGhpcy0+dGFibGUgKTsKICAgICAgICAgICAgJGkgPSAwOwogICAgICAgICAgICB3aGlsZSAoJHJvdyA9ICRxci0+RmV0Y2hSb3coKSApIAogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICR0aGlzLT5maWVsZHNbJHJvd1snRmllbGQnXV0gPSBhcnJheSgpOwogICAgICAgICAgICAgICAgICR0aGlzLT5maWVsZHNbJHJvd1snRmllbGQnXV1bJ29yZGVyJ10gPSAkaSsrOyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAkdGhpcy0+ZmllbGRzWyRyb3dbJ0ZpZWxkJ11dWydsYWJlbCddID0gJHRoaXMtPmZpZWxkMmxhYmVsKCAkcm93WydGaWVsZCddICk7CiAgICAgICAgICAgICAgICAgJHRoaXMtPmZpZWxkc1skcm93WydGaWVsZCddXVsndmlzaWJsZV9pbl9saXN0J10gPSB0cnVlOwogICAgICAgICAgICAgICAgICR0aGlzLT5maWVsZHNbJHJvd1snRmllbGQnXV1bJ3Zpc2libGVfaW5fYWRkJ10gPSB0cnVlOwogICAgICAgICAgICAgICAgICR0aGlzLT5maWVsZHNbJHJvd1snRmllbGQnXV1bJ3Zpc2libGVfaW5fZWRpdCddID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAkdGhpcy0+ZmllbGRzWyRyb3dbJ0ZpZWxkJ11dWydmaWVsZF93aWR0aCddID0gMzA7CiAgICAgICAgICAgICAgICAgJHRoaXMtPmZpZWxkc1skcm93WydGaWVsZCddXVsnZmllbGRfaGVpZ2h0J10gPSAxMDsgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICR0aGlzLT5maWVsZHNbJHJvd1snRmllbGQnXV1bJ2ZpZWxkX3R5cGUnXSA9ICJ0ZXh0IjsKICAgICAgICAgICAgICAgICAkdGhpcy0+ZmllbGRzWyRyb3dbJ0ZpZWxkJ11dWydmaWVsZF9lcnJvciddID0gIkVycm9yOiBJbnZhbGlkIEZvcm0gRGF0YSI7CiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmKCAkcm93WydLZXknXSA9PSAiUFJJIiApCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICR0aGlzLT5maWVsZHNbJHJvd1snRmllbGQnXV1bJ2lzS2V5J10gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICR0aGlzLT5rZXkgPSAkcm93WydGaWVsZCddOwogICAgICAgICAgICAgICAgICAgICR0aGlzLT5maWVsZHNbJHJvd1snRmllbGQnXV1bJ2ZpZWxkX3R5cGUnXSA9ICJkaXNwbGF5IjsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZmllbGRzWyRyb3dbJ0ZpZWxkJ11dWyd2aXNpYmxlX2luX2FkZCddID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmRlZl9zb3J0ID0gJHJvd1snRmllbGQnXTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYoICRyb3dbJ1R5cGUnXSA9PSAidGV4dCIgKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZmllbGRzWyRyb3dbJ0ZpZWxkJ11dWydmaWVsZF90eXBlJ10gPSAidGV4dGFyZWEiOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiggJHJvd1snVHlwZSddID09ICJkYXRldGltZSIgKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZmllbGRzWyRyb3dbJ0ZpZWxkJ11dWydmaWVsZF90eXBlJ10gPSAiZGF0ZXRpbWUiOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiggJHJvd1snVHlwZSddID09ICJkYXRlIiApCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICR0aGlzLT5maWVsZHNbJHJvd1snRmllbGQnXV1bJ2ZpZWxkX3R5cGUnXSA9ICJkYXRlIjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYoIGVyZWcoICJpcHN0YW1wIiAsICRyb3dbJ0ZpZWxkJ10gICkgKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZmllbGRzWyRyb3dbJ0ZpZWxkJ11dWydmaWVsZF90eXBlJ10gPSAiaXBzdGFtcCI7CiAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAkdGhpcy0+ZmllbGRzWyRyb3dbJ0ZpZWxkJ11dWydsYWJlbCddID0gJHRoaXMtPmZpZWxkMmxhYmVsKCAkcm93WydGaWVsZCddICk7CiAgICAgICAgICAgIH0jZW5kIHdoaWxlCgogICAgICAgICAgICAKICAgICAgICAgfSNlbmQgaWYKICAgICAgfSNlbmQgY29uc3RydWN0b3IKICAgICAgCiAgICAgIAogICAgICAjdGhpcyBmdW5jdGlvbiBjb252ZXJ0cyBmaWVsZF9uYW1lIHRvIEZpZWxkIE5hbWUKICAgICAgZnVuY3Rpb24gZmllbGQybGFiZWwoICRmaWVsZCApCiAgICAgIHsKICAgICAgICAgcmV0dXJuIHVjd29yZHMoIGVyZWdfcmVwbGFjZSggIl8iICwgIiAiICwgJGZpZWxkICkgKTsKICAgICAgfQogICAgICAKCiAgICAgICN0aGlzIGlzIHRoZSBtYWluIGZ1bmN0aW9uIHRoYXQgd2lsbCBkbyBldmVyeSB0aGluZyBvciBhdGxlYXN0IGNhbGwgdGhlIG90aGVyIGZ1bmN0aW9ucyAgICAgIAogICAgICBmdW5jdGlvbiBnbygpCiAgICAgIHsKICAgICAgICAgICAgI21ha2UgdGhhdCB0aGUgcmNydWQgc3R1ZmYgaGFwcGVuaW5nIGluICRfR0VUIGlzIGZvciB0aGlzIGluc3RhbmNlIGFuZCBub3QgZm9yIGFub3RoZXIKICAgICAgICAgICAgaWYoIGlzc2V0KCAkX0dFVFsncmNydWRfdGFibGUnXSApICYmICRfR0VUWydyY3J1ZF90YWJsZSddICE9ICR0aGlzLT50YWJsZSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgCiAgICAgICAgICAgCiAgICAgICAgICAgIGlmKCAhIGlzc2V0KCAkX0dFVFsncmNydWRfYWN0aW9uJ10gKSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgJHJjcnVkX2FjdGlvbiA9ICJzaG93IjsgLy9kZWZhdWx0IGlzIHRvIHNob3cgd2hhdCBpcyBpbiB0aGUgZGIgdGFibGUuCiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICRyY3J1ZF9hY3Rpb24gPSAkX0dFVFsncmNydWRfYWN0aW9uJ107CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGVjaG8gIjxoMz4iLiR0aGlzLT5oZWFkZXIuIjwvaDM+XG4iOwogICAgICAgICAgICAKICAgICAgICAgICAgc3dpdGNoKCAkcmNydWRfYWN0aW9uICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICBjYXNlICJzaG93IjoKICAgICAgICAgICAgICAgICAgJHRoaXMtPnNob3coKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgImRlbGV0ZSI6CiAgICAgICAgICAgICAgICAgICR0aGlzLT5kZWxldGUoICRfR0VUWydyY3J1ZF9pZCddICk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBjYXNlICJhZGQiOgogICAgICAgICAgICAgICAgICAkdGhpcy0+YWRkKCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBjYXNlICJlZGl0IjoKICAgICAgICAgICAgICAgICAgJHRoaXMtPmVkaXQoKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgfSNlbmQgc3dpdGNoCiAgICAgIAogICAgICB9I2VuZCBnbyBmdW5jdGlvbgogICAgICAKCiAgICAgICN0aGlzIGZ1bmN0aW9uIGFsbG93cyBhIHJlY29yZCB0byBiZSBhZGRlZCAqKk1BSk9SKioKICAgICAgZnVuY3Rpb24gYWRkKCkKICAgICAgewoJJGVycm9ycyA9ICcnOwoJJHNxbCA9ICcnOwogICAgICAgICAjaGFzIHRoZSBmb3JtIGJlZW4gc3VibWl0dGVkCiAgICAgICAgIGlmKCBpc3NldCggJF9QT1NUWydyY3J1ZF9zdWInXSApICkKICAgICAgICAgewogCiAgICAgICAgICAgICAgICNjb21waWxlIGFueSBkYXRldGltZXMgaW50byBvbmUgZmllbGQgYWdhaW4uCiAgICAgICAgICAgICAgICR0aGlzLT5jb21waWxlX2RhdGV0aW1lcygpOwogICAgICAgICAgICAKICAgICAgICAgICAgICAgI2Zvcm0gaGFkIG5vIGVycm9ycwogICAgICAgICAgICAgICBpZiggISAkZXJyb3JzID0gJHRoaXMtPmZvcm1fZXJyb3JzKCkgKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAjZG8gYW4gaW5zZXJ0CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAjZmlyc3QgYnVpbGQgdGhlIFNFVCBwb3J0aW9uCiAgICAgICAgICAgICAgICAgIGZvcmVhY2goICR0aGlzLT5maWVsZHMgYXMgJGsgPT4gJHYgKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaWYoIGlzc2V0KCAkX1BPU1RbJGtdICkgKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzcWwgPSAkc3FsIC4gJGsgLiAiID0gIiAuICR0aGlzLT5kYi0+cXN0ciggJF9QT1NUWyRrXSApIC4gIiwgIjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgI3NlY29uZCB0YWtlIG9mZiB0aGUgbGFzdCAnLCAnCiAgICAgICAgICAgICAgICAgICRzcWwgPSBlcmVnX3JlcGxhY2UoICIsICQiICwgIiIgLCAkc3FsICk7CiAgICAgICAgICAgICAgICAgICRzcWwgPSAiSU5TRVJUIElOVE8gIi4kdGhpcy0+dGFibGUuIiBTRVQgIi4kc3FsOwogICAgICAgICAgICAgICAgICAkcXIgPSAkdGhpcy0+ZGItPkV4ZWN1dGUoICRzcWwgKSBvciBkaWUoICJSQ1JVRDogQ3JlYXRlIE5ldyBTUUwgUHJvYmxlbTogIi4kdGhpcy0+ZGItPkVycm9yTXNnKCkgKTsKICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgIGVjaG8gIjxwPllvdXIgaXRlbSBoYXMgYmVlbiBjcmVhdGVkLjwvcD4iOwogICAgICAgICAgICAgICAgICAkdGhpcy0+bWFrZV9yZXR1cm5fbGluaygpOwogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICB9CgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAkdGhpcy0+bWFrZV9mb3JtKCAidmlzaWJsZV9pbl9hZGQiICwgIkNyZWF0ZSBOZXciICwgJGVycm9ycyApOwogICAgICAgICAkdGhpcy0+bWFrZV9yZXR1cm5fbGluaygpOwogICAgICAgICAKICAgICAgCiAgICAgIH0jZW5kIGFkZCBmdW5jdGlvbiAgICAgIAogICAgICAKCiAgICAgICN0aGlzIGZ1bmN0aW9uIGFsbG93cyBhIHJlY29yZCB0byBiZSBlZGl0ZWQgKipNQUpPUioqCiAgICAgIGZ1bmN0aW9uIGVkaXQoKQogICAgICB7CgkkZXJyb3JzID0gJyc7Cgkkc3FsID0gIiI7CiAgICAgICAgICNoYXMgdGhlIGZvcm0gYmVlbiBzdWJtaXR0ZWQKICAgICAgICAgaWYoIGlzc2V0KCAkX1BPU1RbJ3JjcnVkX3N1YiddICkgKQogICAgICAgICB7CiAgICAgICAgICAgICAgICNjb21waWxlIGFueSBkYXRldGltZXMgaW50byBvbmUgZmllbGQgYWdhaW4uCiAgICAgICAgICAgICAgICR0aGlzLT5jb21waWxlX2RhdGV0aW1lcygpOwogICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgI2Zvcm0gaGFkIG5vIGVycm9ycwogICAgICAgICAgICAgICBpZiggISAkZXJyb3JzID0gJHRoaXMtPmZvcm1fZXJyb3JzKCkgKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICNkbyBhbiB1cGRhdGUKICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICNmaXJzdCBidWlsZCB0aGUgU0VUIHBvcnRpb24KICAgICAgICAgICAgICAgICAgZm9yZWFjaCggJHRoaXMtPmZpZWxkcyBhcyAkayA9PiAkdiApCiAgICAgICAgICAgICAgICAgIHsKCQkgCiAgICAgICAgICAgICAgICAgICAgIGlmKCBpc3NldCggJF9QT1NUWyRrXSApICkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkc3FsID0gJHNxbCAuICRrIC4gIiA9ICIgLiAkdGhpcy0+ZGItPnFzdHIoICRfUE9TVFska10gKSAuICIsICI7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICNzZWNvbmQgdGFrZSBvZmYgdGhlIGxhc3QgJywgJwogICAgICAgICAgICAgICAgICAkc3FsID0gZXJlZ19yZXBsYWNlKCAiLCAkIiAsICIiICwgJHNxbCApOwogICAgICAgICAgICAgICAgICAkc3FsID0gIlVQREFURSAiLiR0aGlzLT50YWJsZS4iIFNFVCAiLiRzcWwuIiBXSEVSRSAiLiR0aGlzLT5rZXkuIiA9ICIuJHRoaXMtPmRiLT5xc3RyKCAkX0dFVFsncmNydWRfaWQnXSApLiIgTElNSVQgMSI7CiAgICAgICAgICAgICAgICAgICRxciA9ICR0aGlzLT5kYi0+RXhlY3V0ZSggJHNxbCApIG9yIGRpZSggIlJDUlVEIEVkaXQgU1FMIFByb2JsZW06ICIuJHRoaXMtPmRiLT5FcnJvck1zZygpICk7CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICBlY2hvICI8cD5Zb3VyIGl0ZW0gaGFzIGJlZW4gdXBkYXRlZC48L3A+IjsKICAgICAgICAgICAgICAgICAgJHRoaXMtPm1ha2VfcmV0dXJuX2xpbmsoKTsKICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgfQoKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKICAgICAgICAgCiAgICAgICAgICAgICNmaWxsICRfUE9TVCB3aXRoIHRoZSB2YWx1ZXMgb25lIHRpbWUsIG9uIGZpcnN0IHZpc2l0LgogICAgICAgICAgICAkcSA9ICJTRUxFQ1QgKiBGUk9NICIuJHRoaXMtPnRhYmxlLiIgV0hFUkUgIi4kdGhpcy0+a2V5LiIgPSAiLiR0aGlzLT5kYi0+cXN0ciggJF9HRVRbJ3JjcnVkX2lkJ10gKTsKICAgICAgICAgICAgJHFyID0gJHRoaXMtPmRiLT5FeGVjdXRlKCAkcSApIG9yIGRpZSggIlJDUlVEIEVkaXQgVmFsdWVzIEZpbGw6ICIuJHRoaXMtPmRiLT5FcnJvck1zZygpICk7CiAgICAgICAgICAgICRyb3cgPSAkcXItPkZldGNoUm93KCk7CiAgICAgICAgICAgICRfUE9TVCA9ICRyb3c7CiAgICAgICAgIH0KICAgICAgCiAgICAgICAgICNtYWtlIHRoZSBmb3JtCiAgICAgICAgICR0aGlzLT5tYWtlX2Zvcm0oICJ2aXNpYmxlX2luX2VkaXQiLCAiU2F2ZSIgLCAkZXJyb3JzICk7CiAgICAgICAgICR0aGlzLT5tYWtlX3JldHVybl9saW5rKCk7CiAgICAgICAgIAogICAgICB9ICAgICAgCgoKCiAgICAgICN0aGlzIG1ha2VzIHRoZSBmb3JtIGZvciBhZGQgYW5kIGVkaXQKICAgICAgI3Nob3cgdGhlIG9uZXMgdGhhdCBoYXZlIHRoZSB2aXNpYmlsaXR5CiAgICAgICNwbGFjZSBzdWJsYWJlbCBvbiB0aGUgc3VibWl0IGJ1dHRvbgogICAgICAjc2hvdyB0aGVzZSBlcnJvcnMgd2hlcmUgbmVlZGVkCiAgICAgIGZ1bmN0aW9uIG1ha2VfZm9ybSggJHZpc2liaWxpdHksICRzdWJsYWJlbCwgJGVycm9ycyApCiAgICAgIHsKICAgICAgICAgICAgI3RoaXMgZm9ybSBwb3N0cyB0byBpdHNlbGYgc28gbm8gYWN0aW9uIHNwZWNpZmllZAogICAgICAgICAgICBlY2hvICI8Zm9ybSBtZXRob2Q9XCJQT1NUXCI+XG4iOwogICAgICAgICAgICBlY2hvICI8dGFibGUgY2xhc3M9XCJwYWdldGFibGVcIiB3aWR0aD1cIjEwMCVcIj5cbiI7CiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgZm9yZWFjaCggJHRoaXMtPmZpZWxkcyBhcyAkayA9PiAkdiApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgICAgIGlmKCAkdlskdmlzaWJpbGl0eV0gKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlmKCBpc3NldCggJGVycm9yc1ska10gKSApCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHRyPjx0ZCBjb2xzcGFuPVwiMlwiPiI7CiAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjxzcGFuIHN0eWxlPVwiY29sb3I6ICIuJHRoaXMtPmVycm9yY29sb3IuIjtcIj4iOwogICAgICAgICAgICAgICAgICAgICBlY2hvICR2WydmaWVsZF9lcnJvciddOwogICAgICAgICAgICAgICAgICAgICBlY2hvICI8L3NwYW4+PC90ZD48L3RyPlxuIjsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgIGVjaG8gIjx0cj5cbiI7CiAgIAogICAgICAgICAgICAgICAgICBlY2hvICIgPHRkPiIuJHZbJ2xhYmVsJ10uIjwvdGQ+XG4iOwogICAKICAgICAgICAgICAgICAgICAgZWNobyAiIDx0ZD5cbiI7CgoJCSAgaWYoIWlzc2V0KCRfUE9TVFska10pKSB7CgkJICAgICRfUE9TVFska10gPSAnJzsKCQkgIH0KCiAgICAgICAgICAgICAgICAgIHN3aXRjaCggJHZbJ2ZpZWxkX3R5cGUnXSApCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSAidGV4dCI6CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNwZWNpYWwgdHJlYXRlbWVudCBvZiB0aGUgaWNvbiBmaWVsZCwgc2luY2UgaXQgc2hvdWxkIGJlIGEgZHJvcGRvd24gbGlzdCBvZiBhdmFpbGFibGUgbWFya2VyIGltYWdlcwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRrID09ICdpY29uJyApIHsKICAgICAgICAgICAgICAgICAgICAgCS8vIE9wZW4gaW1hZ2VzIGRpcmVjdG9yeSBhbmQgbGlzdCBpdHMgY29udGVudHMKICAgICAgICAgICAgICAgICAgICAgCWlmIChmaWxlX2V4aXN0cyggJHRoaXMtPnBhdGggKSkgewoJICAgICAgICAgICAgICAgICAgICAgCSRmaWxlY291bnQgPSAwOwoJCQkJCQkkZGlyID0gb3BlbmRpcigkdGhpcy0+cGF0aCk7CgkJCQkJCS8vIEZpbHRlciBvdXQgdGhlIGRpcmVjdG9yeSBjb250cm9saW5nIGNoYXJhY3RlcnMgYW5kIGJ1aWxkIHNlbGVjdGFibGUgb3B0aW9ucyBvZiB0aGUgb3RoZXJzCgkJCQkJCXdoaWxlICgoJGZpbGUgPSByZWFkZGlyKCRkaXIpKSAhPT0gZmFsc2UpCgkJCQkJCSAgewoJCQkJCQkgIAlpZiAoJGZpbGUgIT0nLicgJiYgJGZpbGUhPScuLicpIHsKCQkJCQkJCSAgCWlmICgkZmlsZWNvdW50ID09IDApIHsKCQkJCQkJCSAgCQllY2hvICc8c2VsZWN0IG5hbWU9IicuJGsuJyI+XG4nOwoJCQkJCQkJICAJCWVjaG8gJyAgPG9wdGlvbiB2YWx1ZT0iIj4gPC9vcHRpb24+XG4nOwoJCQkJCQkJICAJfQoJCQkJCQkJICAJaWYgKCAkX1BPU1RbJGtdID09ICRmaWxlICkgewoJCQkJCQkJCSAgCWVjaG8gJyAgPG9wdGlvbiB2YWx1ZT0iJyAuICRmaWxlIC4gJyIgU0VMRUNURUQ+JyAuICRmaWxlIC4gJzwvb3B0aW9uPlxuJzsKCQkJCQkJCSAgCX0gZWxzZSB7CgkJCQkJCQkJICAJZWNobyAnICA8b3B0aW9uIHZhbHVlPSInIC4gJGZpbGUgLiAnIj4nIC4gJGZpbGUgLiAnPC9vcHRpb24+XG4nOwoJCQkJCQkJICAJfQoJCQkJCQkJICAJJGZpbGVjb3VudCsrOwoJCQkJCQkgIAl9CgkJCQkJCSAgfQoJCQkJCQljbG9zZWRpcigkZGlyKTsKCQkJCQkJLy8gU2hvdyBlcnJvciBtZXNzYWdlIHRoYXQgbm8gaW1hZ2VzIHdlcmUgZm91bmQgYXQgYWxsCgkJCQkJCWlmICgkZmlsZWNvdW50ID09IDApIHsKCQkJCQkJCWVjaG8gJHRoaXMtPm1hcmtlcmVycm9yOwoJCQkJCQl9IGVsc2UgewoJICAgICAgICAgICAgICAgICAgICAgCQllY2hvICI8L3NlbGVjdD4iOwoJICAgICAgICAgICAgICAgICAgICAJCX0KCQkJCQl9IGVsc2UgewoJCQkJCQllY2hvICR0aGlzLT5wYXRoZXJyb3I7CgkJCQkJfQkJCQkJIAogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAJCWVjaG8gIiAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwiIi4kay4iXCIgdmFsdWU9XCIiLiAkX1BPU1RbJGtdIC4gIlwiIHNpemU9XCIiLiR2WydmaWVsZF93aWR0aCddLiJcIj5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgInRleHRhcmVhIjoKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiICAgIDx0ZXh0YXJlYSBuYW1lPVwiIi4kay4iXCIgUk9XUz0iLiR2WydmaWVsZF9oZWlnaHQnXS4iIENPTFM9Ii4kdlsnZmllbGRfd2lkdGgnXS4iPiI7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJF9QT1NUWyRrXTsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC90ZXh0YXJlYT5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlICJkaXNwbGF5IjoKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAkX1BPU1RbJGtdOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSAiaXBzdGFtcCI6CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cIiIuJGsuIlwiIHZhbHVlPVwiIi4kX1NFUlZFUlsiUkVNT1RFX0FERFIiXS4iXCI+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICRfU0VSVkVSWydSRU1PVEVfQUREUiddOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSAiY2hlY2tib3giOgogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICIgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiIi4kay4iXCIgdmFsdWU9XCIwXCIgPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiIi4kay4iXCIgdmFsdWU9XCIxXCIiOwogICAgICAgICAgICAgICAgICAgICAgICBpZiggJF9QT1NUWyRrXSA9PSAiMSIgKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIiBDSEVDS0VEICI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgImNoZWNrYm94X29uIjoKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cIiIuJGsuIlwiIHZhbHVlPVwiMFwiID5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIiAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cIiIuJGsuIlwiIHZhbHVlPVwiMVwiIjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoICRfUE9TVFska10gPT0gIjEiICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICIgQ0hFQ0tFRCAiOwogICAgICAgICAgICAgICAgICAgICAgICB9CgkJCWlmKCAkX1BPU1RbJGtdID09ICcnICkgewoJCQkgIC8vc2hvdWxkIG9ubHkgYWZmZWN0IGFkZAoJCQkgIGVjaG8gIiBDSEVDS0VEICI7CgkJCX0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgImRhdGUiOgogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+bWFrZV9kYXRlKCAkayApOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSAiZGF0ZXRpbWUiOgogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+bWFrZV9kYXRldGltZSggJGsgKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgIGlmKCBlcmVnKCAiXnNlbGVjdCIgLCAkdlsnZmllbGRfdHlwZSddICkgKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICRwYXJ0cyA9IHNwbGl0KCAiXHwiICwgJHZbJ2ZpZWxkX3R5cGUnXSApOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKCAkcGFydHNbMV0gKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgInJhbmdlIjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm1ha2VfcmFuZ2Vfc2VsZWN0b3IoICRwYXJ0c1syXSAsICRwYXJ0c1szXSAsICRrICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJ0YWJsZSI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5tYWtlX3RhYmxlX3NlbGVjdG9yKCAkcGFydHNbMl0gLCAkcGFydHNbM10gLCAkcGFydHNbNF0gLCAkayApOwogICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICBpZiggZXJlZyggIl5yYWRpbyIgLCAkdlsnZmllbGRfdHlwZSddICkgKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5tYWtlX3JhZGlvcyggJGsgKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgZWNobyAiIDwvdGQ+XG4iOyAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICBlY2hvICI8L3RyPlxuIjsgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIH0jZW5kIGZvciBlYWNoCiAgICAgICAgICAgIAogICAgICAgICAgICBlY2hvICI8dHI+PHRkIGNvbHNwYW49XCIyXCI+PGlucHV0IHR5cGU9XCJzdWJtaXRcIiBuYW1lPVwicmNydWRfc3ViXCIgdmFsdWU9XCIiLiRzdWJsYWJlbC4iXCIvPjwvdGQ+PC90cj5cbiI7CiAgICAgICAgICAgIAogICAgICAgICAgICBlY2hvICI8L3RhYmxlPlxuIjsKICAgICAgICAgICAgZWNobyAiPC9mb3JtPlxuIjsKICAgICAgICAgCiAgICAgIAogICAgICAKICAgICAgCiAgICAgIH0jZW5kIGZvcm0gZnVuY3Rpb24gICAgICAgCiAgICAgIAogICAgICAKICAgICAgCiAgICAgIAogICAgICAKICAgICAgCiAgICAgIAogICAgICAKICAgICAgI3RoaXMgZnVuY3Rpb25zIGRlbGV0ZXMgYSByZWNvcmQKICAgICAgZnVuY3Rpb24gZGVsZXRlKCAkaWQgKQogICAgICB7CiAgICAgICAgICRxID0gIkRFTEVURSBGUk9NICIuJHRoaXMtPnRhYmxlLiIgV0hFUkUgIi4kdGhpcy0+a2V5LiIgPSAiLiR0aGlzLT5kYi0+cXN0ciggJGlkICkuIiBMSU1JVCAxIjsKICAgICAgICAgJHFyID0gJHRoaXMtPmRiLT5FeGVjdXRlKCAkcSApIG9yIGRpZSggIlJDUlVEIERFTEVURSBTUUw6ICIuJHRoaXMtPmRiLT5FcnJvck1zZygpICk7CiAgICAgICAgIGVjaG8gIlRoYXQgcmVjb3JkIGhhcyBiZWVuIGRlbGV0ZWQuPC9wPiI7CiAgICAgICAgICR0aGlzLT5tYWtlX3JldHVybl9saW5rKCk7CiAgICAgICAgIAogICAgICB9CiAgICAgIAogICAgICAKICAgICAgCiAgICAgICN0aGlzIGZ1bmN0aW9uIHNob3dzIHRoZSBkYXRhIGluIGEgdGFibGUgaWYgeW91IG5lZWQgc29tZXRoaW5nIGZhbmN5IGVkaXQgYWxsIHlvdSB3YW50IEkgd29udCBzdG9wIHlvdQogICAgICBmdW5jdGlvbiBzaG93KCkKICAgICAgewoJJHVwZG93biA9ICcnOwoKICAgICAgICAgaWYoIGlzc2V0KCAkX0dFVFsncmNydWRfdXBkb3duJ10gKSAmJiAoICRfR0VUWydyY3J1ZF91cGRvd24nXSA9PSAiQVNDIiB8fCAkX0dFVFsncmNydWRfdXBkb3duJ10gPT0gIkRFU0MiICkgKQogICAgICAgICB7CiAgICAgICAgICAgICAkdXBkb3duID0gJF9HRVRbJ3JjcnVkX3VwZG93biddOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewogICAgICAgICAgICAkdXBkb3duID0gIkFTQyI7CiAgICAgICAgICAgICRfR0VUWydyY3J1ZF91cGRvd24nXSA9ICJBU0MiOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiggISBpc3NldCggJF9HRVRbJ3JjcnVkX3NvcnRieSddICkgfHwgISBpc3NldCggJHRoaXMtPmZpZWxkc1skX0dFVFsncmNydWRfc29ydGJ5J11dICkgKQogICAgICAgICB7CiAgICAgICAgICAgICRzb3J0YnkgPSAkdGhpcy0+ZGVmX3NvcnQ7CiAgICAgICAgICAgICRfR0VUWydyY3J1ZF9zb3J0YnknXSA9ICRzb3J0Ynk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7CiAgICAgICAgICAgICRzb3J0YnkgPSAkX0dFVFsncmNydWRfc29ydGJ5J107CiAgICAgICAgIH0KCiAgICAgICAgIAogICAgICAgICBlY2hvICc8dGFibGUgY2VsbHNwYWNpbmc9IjIiIGNlbGxwYWRkaW5nPSIyIiBjbGFzcz0icGFnZXRhYmxlIiB3aWR0aD0iMTAwJSI+JzsKICAgICAgICAgZWNobyAiPHRoZWFkPlxuIjsKICAgICAgICAgZWNobyAnPHRyPic7CiAgICAgICAgIGVjaG8gIlxuIjsKICAgICAgICAgICAgICAgCiAgICAgICAgICNzaG93IHRoZSB0YWJsZSBoZWFkZXJzCiAgICAgICAgIGZvcmVhY2goICR0aGlzLT5maWVsZHMgYXMgJGsgPT4gJHYgKQogICAgICAgICB7CiAgICAgICAgICAgIGlmKCAkdGhpcy0+ZmllbGRzWyRrXVsndmlzaWJsZV9pbl9saXN0J10gKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGVjaG8gIiAgIDx0aD4iOwogICAgICAgICAgICAgICBlY2hvICR2WydsYWJlbCddOwoKICAgICAgICAgICAgICAgZWNobyAiJm5ic3A7IjsKICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgIGVjaG8gIjxhIGhyZWY9XCIiLiR0aGlzLT5tYWtldXJsKCAic2hvdyIgLCAtMSApLiImYW1wO3JjcnVkX3NvcnRieT0iLiRrLiImYW1wO3JjcnVkX3VwZG93bj1BU0NcIj4mYW5kOzwvYT4iOwogICAgICAgICAgICAgICBpZiggJGsgPT0gJF9HRVRbJ3JjcnVkX3NvcnRieSddICYmICRfR0VUWydyY3J1ZF91cGRvd24nXSA9PSAiQVNDIiApCiAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgZWNobyAiLiI7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGVjaG8gIiZuYnNwOyI7CiAgICAgICAgICAgICAgIH0KICAgIAogICAgICAgICAgICAgICBlY2hvICI8YSBocmVmPVwiIi4kdGhpcy0+bWFrZXVybCggInNob3ciICwgLTEgKS4iJmFtcDtyY3J1ZF9zb3J0Ynk9Ii4kay4iJmFtcDtyY3J1ZF91cGRvd249REVTQ1wiPiZvcjs8L2E+IjsKICAgICAgICAgICAgICAgaWYoICRrID09ICRfR0VUWydyY3J1ZF9zb3J0YnknXSAmJiAkX0dFVFsncmNydWRfdXBkb3duJ10gPT0gIkRFU0MiICkKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBlY2hvICIuIjsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBlY2hvICI8L3RoPlxuIjsKICAgICAgICAgICAgfQogICAgICAgICB9CgogICAgICAgICBlY2hvICI8dGggd2lkdGg9XCIxJVwiPiZuYnNwOzwvdGg+XG4iOwogICAgICAgICBlY2hvICI8dGggd2lkdGg9XCIxJVwiPiZuYnNwOzwvdGg+XG4iOwoKICAgICAgICAgZWNobyAnPC90cj4nOwogICAgICAgICBlY2hvICJcbiI7CiAgICAgICAgIGVjaG8gIjwvdGhlYWQ+XG4iOwogICAgICAgICAKICAgICAgICAgI25vdyB0aGUgZGF0YSAgIAogICAgICAgICAkcSA9ICJTRUxFQ1QgKiBGUk9NICIuJHRoaXMtPnRhYmxlLiIgT1JERVIgQlkgIi4kc29ydGJ5LiIgIi4kdXBkb3duOwogICAgICAgICAkcXIgPSAkdGhpcy0+ZGItPkV4ZWN1dGUoICRxICkgb3IgZGllKCAiUkNSVUQgU0hPVyBTUUw6ICIuJHRoaXMtPmRiLT5FcnJvck1zZygpICk7CiAgICAgICAgIAogICAgICAgICAkaSA9IDA7CiAgICAgICAgIHdoaWxlKCAkcm93ID0gJHFyLT5GZXRjaFJvdygpICkKICAgICAgICAgewogICAgICAgICAgICBlY2hvICI8dHIgY2xhc3M9XCJyb3ciLigoJGkgJSAyKSsxKS4iXCIgIjsKICAgICAgICAgICAgZWNobyAib25tb3VzZW92ZXI9XCJ0aGlzLmNsYXNzTmFtZT0ncm93Ii4oKCRpICUgMikrMSkuImhvdmVyJztcIiBvbm1vdXNlb3V0PVwidGhpcy5jbGFzc05hbWU9J3JvdyIuKCgkaSAlIDIpKzEpLiInO1wiPlxuIjsKICAgICAgICAgICAgJGkrKzsKICAgICAgICAgICAKICAgICAgICAgICAgICBmb3JlYWNoKCAkcm93IGFzICRrID0+ICR2ICkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgaWYoICR0aGlzLT5maWVsZHNbJGtdWyd2aXNpYmxlX2luX2xpc3QnXSApCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGVjaG8gIiAgIDx0ZD4iOwogICAgICAgICAgICAgICAgICAgIGlmKCBlcmVnKCAiXnNlbGVjdFx8dGFibGUiICwgJHRoaXMtPmZpZWxkc1ska11bJ2ZpZWxkX3R5cGUnXSApICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgJHBhcnRzID0gc3BsaXQoICJcfCIgLCAkdGhpcy0+ZmllbGRzWyRrXVsnZmllbGRfdHlwZSddICk7CiAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiKCIuJHYuIikgIi4kdGhpcy0+Z2V0X2ZvcmVpZ25fbGFiZWwoICRwYXJ0c1syXSAsICRwYXJ0c1szXSAsICR2ICwgJHBhcnRzWzRdICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgZWNobyAkdjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWNobyAiPC90ZD5cbiI7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgICNlZGl0IGFuZCBkZWxldGUgY29sdW1ucwogICAgICAgICAgICBlY2hvICI8dGQ+PGEgaHJlZj1cIiIuJHRoaXMtPm1ha2V1cmwoICJlZGl0IiAsICRyb3dbJHRoaXMtPmtleV0gKS4iXCI+ZWRpdDwvYT4mbmJzcDs8L3RkPiI7CiAgICAgICAgICAgIGVjaG8gIjx0ZD4mbmJzcDs8YSBocmVmPVwiIi4kdGhpcy0+bWFrZXVybCggImRlbGV0ZSIgLCAkcm93WyR0aGlzLT5rZXldICkuIlwiPmRlbGV0ZTwvYT48L3RkPiI7CgogICAgICAgICAgICBlY2hvICI8L3RyPlxuIjsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIGVjaG8gIjwvdGFibGU+XG4iOwogICAgICAgICAgICAgICAgICAKICAgICAgICAgZWNobyAiPHA+PGEgaHJlZj1cIiIuJHRoaXMtPm1ha2V1cmwoICJhZGQiICwgMCApLiJcIj5DcmVhdGUgTmV3PC9hPjwvcD5cbiI7CiAgICAgIAogICAgICB9I2VuZCBzaG93IGZ1bmN0aW9uCiAgICAgIAogICAgICAKICAgICAgI3RoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgZXhhY3QgdXJsIHRoYXQgd2Ugd2VyZSBjYWxsZWQgd2l0aCBzdHJpcHMgb3V0IHByZXZpb3VzIHJjcnVkIGFuZCBhcHBsaWVzIG5ldwogICAgICAjaG9wZWZ1bGx5IHRoaXMgYWxsb3dzIHVzIHRvIHVzZSByY3J1ZCBpbiBvdGhlciBwcm9ncmFtcyBhbmQgbGlicmFyaWVzCiAgICAgIGZ1bmN0aW9uIG1ha2V1cmwoICRhY3Rpb24gLCAkaWQgKQogICAgICB7CiAgICAgICAgIAoJJHQ9Jyc7CiAgICAgICAgIGZvcmVhY2goICRfR0VUIGFzICRrID0+ICR2ICkKICAgICAgICAgewogICAgICAgICAgICBpZiggISBlcmVnKCAiXnJjcnVkIiwgJGsgKSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgJHQgPSAkdCAuICRrIC4gIj0iIC4kdi4gIiZhbXA7IjsKICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAoJIC8vY2hlY2sgdGhhdCBtb2R1bGU9ICBpcyBjYXJyaWVkIHRocm91Z2gKCSBpZiAoIWlzc2V0KCRfR0VUWydtb2R1bGUnXSkpIAoJICAgewoJICAgICAkbSA9IGlzc2V0KCRfUE9TVFsnbWFjdCddKSA/IGV4cGxvZGUoJywnLCRfUE9TVFsnbWFjdCddKSA6ICIiOwoJICAgICAkbSA9ICJtb2R1bGU9Ii4gJG1bMF07CgkgICAgICR0ID0gJF9TRVJWRVJbIlBIUF9TRUxGIl0gLiAiPyIgLiAkdCAuICRtIC4iJmFtcDtyY3J1ZF9hY3Rpb249Ii4kYWN0aW9uLiImYW1wO3JjcnVkX2lkPSIuJGlkOwoJICAgfQoJIGVsc2UKCSAgIHsKCSAgICAgJHQgPSAkX1NFUlZFUlsiUEhQX1NFTEYiXSAuICI/IiAuICR0IC4icmNydWRfYWN0aW9uPSIuJGFjdGlvbi4iJmFtcDtyY3J1ZF9pZD0iLiRpZDsKCSAgIH0KCiAgICAgICAgIGlmKCAkYWN0aW9uID09ICJlZGl0IiB8fCAkYWN0aW9uID09ICJkZWxldGUiIHx8ICRhY3Rpb24gPT0gImFkZCIgKQogICAgICAgICB7CiAgICAgICAgICAgICR0ID0gJHQgLiAiJmFtcDtyY3J1ZF90YWJsZT0iLiR0aGlzLT50YWJsZTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgcmV0dXJuICR0OwogICAgICAgICAKICAgICAgfQogICAgICAKICAgICAgI3NldCBhbGwgdGhlIGZpZWxkcyB2aXNpYmlsdHkgdG8gJGIKICAgICAgI2V4LCBzZXQgYWxsIGZpZWxkcyB0byBmYWxzZSwgdGhlbiBlbmFibGUgdGhlIG9uZXMgeW91IG5lZWQKICAgICAgZnVuY3Rpb24gc2V0VmlzaWJsZUluTGlzdEFsbCggJGIgKQogICAgICB7CiAgICAgICAgIGZvcmVhY2goICR0aGlzLT5maWVsZHMgYXMgJGsgPT4gJHYgKQogICAgICAgICB7CiAgICAgICAgICAgICR0aGlzLT5maWVsZHNbJGtdWyd2aXNpYmxlX2luX2xpc3QnXSA9ICRiOwogICAgICAgICB9CiAgICAgIH0KCiAgICAgICNzZXQgYWxsIHRoZSBmaWVsZHMgdmlzaWJpbHR5IHRvICRiCiAgICAgICNleCwgc2V0IGFsbCBmaWVsZHMgdG8gZmFsc2UsIHRoZW4gZW5hYmxlIHRoZSBvbmVzIHlvdSBuZWVkCiAgICAgIGZ1bmN0aW9uIHNldFZpc2libGVJbkFkZEFsbCggJGIgKQogICAgICB7CiAgICAgICAgIGZvcmVhY2goICR0aGlzLT5maWVsZHMgYXMgJGsgPT4gJHYgKQogICAgICAgICB7CiAgICAgICAgICAgICR0aGlzLT5maWVsZHNbJGtdWyd2aXNpYmxlX2luX2FkZCddID0gJGI7CiAgICAgICAgIH0KICAgICAgfSAgICAgIAoKICAgICAgI3NldCBhbGwgdGhlIGZpZWxkcyB2aXNpYmlsdHkgdG8gJGIKICAgICAgI2V4LCBzZXQgYWxsIGZpZWxkcyB0byBmYWxzZSwgdGhlbiBlbmFibGUgdGhlIG9uZXMgeW91IG5lZWQKICAgICAgZnVuY3Rpb24gc2V0VmlzaWJsZUluRWRpdEFsbCggJGIgKQogICAgICB7CiAgICAgICAgIGZvcmVhY2goICR0aGlzLT5maWVsZHMgYXMgJGsgPT4gJHYgKQogICAgICAgICB7CiAgICAgICAgICAgICR0aGlzLT5maWVsZHNbJGtdWyd2aXNpYmxlX2luX2VkaXQnXSA9ICRiOwogICAgICAgICB9CiAgICAgIH0KCiAgICAgIAogICAgICAjcHJpbnQgb3Vyc2VsdmVzIG91dCBzbyB3ZSBjYW4gd2hhdCBpcyBiZWluZyBzZXQgYW5kL29yIG5vdC4uLgogICAgICBmdW5jdGlvbiBkZWJ1ZygpCiAgICAgIHsKICAgICAgICAgZWNobyAiPHByZT5cbiI7CiAgICAgICAgIHByaW50X3IoJHRoaXMpOwogICAgICAgICBlY2hvICI8L3ByZT5cbiI7CiAgICAgIH0KICAgICAKICAgICAKICAgICAgCiAgICAgICNyZXR1cm5zIHRoZSBlcnJvcnMgaWYgdGhlcmUgd2VyZSBzb21lIG90aGVyd2lzZSBubywgdGhlbiByZXR1cm4gZmFsc2UuCiAgICAgIGZ1bmN0aW9uIGZvcm1fZXJyb3JzKCkKICAgICAgewogICAgICAgICAjcHJvY2VzcyB0aGUgcmVnZXggdmFsaWRhdGlvbnMKICAgICAgICAgICAgZm9yZWFjaCggJF9QT1NUIGFzICRrID0+ICR2ICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICBpZiggaXNzZXQoICR0aGlzLT5maWVsZHNbJGtdWydmaWVsZF9yZWdleCddICkgKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlmKCAhIGVyZWcoICR0aGlzLT5maWVsZHNbJGtdWydmaWVsZF9yZWdleCddICwgJHYgKSApCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgJGVycm9yc1ska10gPSAkdGhpcy0+ZmllbGRzWyRrXVsnZmllbGRfZXJyb3InXTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGlmKCBpc3NldCggJGVycm9ycyApICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgcmV0dXJuICRlcnJvcnM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICB9I2VuZCBmb3JtIGVycm9ycwogICAKCiAgICAgICN0aGlzIGZ1bmN0aW9uIG1ha2VzIGEgcmFkaW8gYnV0dG9uIGJhc2VkIG9uIHRoZSBmaWVsZCB0eXBlCiAgICAgIGZ1bmN0aW9uIG1ha2VfcmFkaW9zKCAkZmllbGQgKQogICAgICB7CiAgICAgICAgICRwYXJ0cyA9IHNwbGl0KCAiXHwiICwgJHRoaXMtPmZpZWxkc1skZmllbGRdWydmaWVsZF90eXBlJ10gKTsKICAgICAgICAgCiAgICAgICAgICNwb3AgdGhlIGZpcnN0IGVsZW1lbnQgb2ZmIHRoZSBhcnJheSAKICAgICAgICAgJHBhcnRzID0gYXJyYXlfcmV2ZXJzZSggJHBhcnRzICk7CiAgICAgICAgIGFycmF5X3BvcCggJHBhcnRzICk7CiAgICAgICAgICRwYXJ0cyA9IGFycmF5X3JldmVyc2UoICRwYXJ0cyApOwoJIAoJICRzZWxlY3RlZCA9ICcnOwoKCSBpZiAoaXNzZXQoICRfUE9TVFskZmllbGRdICkgJiYgJF9QT1NUWyRmaWVsZF0gIT0gJycpIHsKCSAgICRzZWxlY3RlZCA9ICRfUE9TVFskZmllbGRdOwoJIH0gZWxzZSB7CgkgICAkc2VsZWN0ZWQgPSAkcGFydHNbMF07CgkgfQogICAgICAgICAKICAgICAgICAgZm9yZWFjaCggJHBhcnRzIGFzICRrID0+ICR2ICkKICAgICAgICAgewogICAgICAgICAgICBlY2hvICR2IC4gIiA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cIiIuJGZpZWxkLiJcIiB2YWx1ZT1cIiIuJHYuIlwiLyI7CiAgICAgICAgICAgIGlmKCAkc2VsZWN0ZWQgPT09ICR2ICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICBlY2hvICIgY2hlY2tlZD1cImNoZWNrZWRcIiAiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVjaG8gIj5cbiI7CiAgICAgICAgIH0KICAgICAgfQogICAKICAgCiAgICAgICN0aGlzIGZ1bmN0aW9uIG1ha2UgYSBzZWxlY3RvciB3aXRoIGFuIGludCByYW5nZQogICAgICBmdW5jdGlvbiBtYWtlX3JhbmdlX3NlbGVjdG9yKCAkbWluICwgJG1heCAsICRmb3JtX2ZpZWxkICkKICAgICAgewogICAgICAKICAgICAgICAgZWNobyAiPHNlbGVjdCBuYW1lPVwiIi4kZm9ybV9maWVsZC4iXCI+XG4iOwogICAgICAgICAkaSA9ICRtaW47CiAgICAgICAgIHdoaWxlKCAkaSAtIDEgPCAkbWF4ICkKICAgICAgICAgewogICAgICAgICAgICBlY2hvICIgIDxvcHRpb24gdmFsdWU9XCIiLiRpLiJcIiI7CiAgICAgICAgICAgIGlmKCAkX1BPU1RbJGZvcm1fZmllbGRdID09ICRpICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICBlY2hvICIgU0VMRUNURUQgIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlY2hvICI+Ii4kaS4iPC9vcHRpb24+XG4iOwogICAgICAgICAgICAkaSsrOwogICAgICAgICB9CiAgICAgICAgIGVjaG8gIjwvc2VsZWN0PlxuIjsKICAgICAgCiAgICAgIH0jZW5kIGZ1bmMKIAogCiAKIAogICAgICAjdGhpcyBmdW5jdGlvbiBtYWtlIGEgc2VsZWN0b3Igd2l0aCBhbiBpbnQgcmFuZ2UKICAgICAgZnVuY3Rpb24gbWFrZV90YWJsZV9zZWxlY3RvciggJHRhYmxlICwgJHZhbHVlICwgJGxhYmVsICwgJGZvcm1fZmllbGQgKQogICAgICB7CiAgICAgIAogICAgICAgICBlY2hvICI8c2VsZWN0IG5hbWU9XCIiLiRmb3JtX2ZpZWxkLiJcIj5cbiI7CgogICAgICAgICAkcSA9ICJTRUxFQ1QgIi4kdmFsdWUuIiwgIi4kbGFiZWwuIiBGUk9NICIuJHRhYmxlLiIgT1JERVIgQlkgIi4kbGFiZWwuIiBBU0MiOwogICAgICAgICAkcXIgPSAkdGhpcy0+ZGItPkV4ZWN1dGUoICRxICkgb3IgZGllKCAiUkNSVUQgTUFLRSBUQUJMRSBTRUxFQ1QgU1FMOiAiLiR0aGlzLT5kYi0+RXJyb3JNc2coKSApOwogICAgICAgCiAgICAgICAgIAogICAgICAgICB3aGlsZSggJHJvdyA9ICRxci0+RmV0Y2hSb3coKSApCiAgICAgICAgIHsKICAgICAgICAgICAgZWNobyAiICA8b3B0aW9uIHZhbHVlPVwiIi4kcm93WyR2YWx1ZV0uIlwiIjsKICAgICAgICAgICAgaWYoIGlzc2V0KCRfUE9TVFskZm9ybV9maWVsZF0pICYmICRfUE9TVFskZm9ybV9maWVsZF0gPT0gJHJvd1skdmFsdWVdICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICBlY2hvICIgU0VMRUNURUQgIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlY2hvICI+Ii4kcm93WyRsYWJlbF0uIjwvb3B0aW9uPlxuIjsKICAgICAgICAgICAgCiAgICAgICAgIH0KICAgICAgICAgZWNobyAiPC9zZWxlY3Q+XG4iOwogICAgICAKICAgICAgfSNlbmQgZnVuYwogICAgICAKICAgICAgCiAgICAgICN0aGlzIGZ1bmN0aW9ucyBnZXRzIHRoZSB0ZXh0IHZhbHVlIG9mIGEgZm9yZWlnbiBrZXkKICAgICAgZnVuY3Rpb24gZ2V0X2ZvcmVpZ25fbGFiZWwoICR0YWJsZSAsICR2YWx1ZV9maWVsZCAsICR2YWx1ZSAsICRsYWJlbCApICAKICAgICAgewogICAgICAKICAgICAgICAgJHEgPSAiU0VMRUNUICIuJGxhYmVsLiIgRlJPTSAiLiR0YWJsZS4iIFdIRVJFICIuJHZhbHVlX2ZpZWxkLiIgPSAiLiR0aGlzLT5kYi0+cXN0ciggJHZhbHVlICk7CiAgICAgICAgICRxciA9ICR0aGlzLT5kYi0+RXhlY3V0ZSggJHEgKTsKICAgICAgICAgJHJvdyA9ICRxci0+RmV0Y2hSb3coKTsKICAgICAgICAgaWYoICRxci0+UmVjb3JkQ291bnQoKSA9PSAwICkKICAgICAgICAgewogICAgICAgICAgICByZXR1cm4gIk1pc3NpbmcgTGFiZWwiOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewogICAgICAgICAgICByZXR1cm4gJHJvd1skbGFiZWxdOwogICAgICAgICB9CiAgICAgICAgIAogICAgICB9CiAgICAgIAogICAgICAKICAgICAgI3RoaXMgZnVuY3Rpb25zIG1ha2UgYSBkYXRldGltZSBodG1sIGZpZWxkCiAgICAgIGZ1bmN0aW9uIG1ha2VfZGF0ZXRpbWUoICRmaWVsZCApCiAgICAgIHsKICAgICAgCiAgICAgICAgIGlmKCAhIGlzc2V0KCAkX1BPU1RbJGZpZWxkXSApIHx8ICRfUE9TVFskZmllbGRdID09ICIwMDAwLTAwLTAwIDAwOjAwOjAwIiApCiAgICAgICAgIHsKICAgICAgICAgICAgJF9QT1NUWyRmaWVsZF0gPSBkYXRlKCAiWS1tLWQgSDppOnMiICk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgICRfUE9TVFskZmllbGQuJy15ZWFyJ10gPSBkYXRlKCAiWSIgLCBzdHJ0b3RpbWUoICRfUE9TVFskZmllbGRdICkgKTsKICAgICAgICAgJF9QT1NUWyRmaWVsZC4nLW1vbnRoJ10gPSBkYXRlKCAibSIgLCBzdHJ0b3RpbWUoICRfUE9TVFskZmllbGRdICkgKTsKICAgICAgICAgJF9QT1NUWyRmaWVsZC4nLWRheSddID0gZGF0ZSggImQiICwgc3RydG90aW1lKCAkX1BPU1RbJGZpZWxkXSApICk7CiAgICAgICAgICRfUE9TVFskZmllbGQuJy1ob3VyJ10gPSBkYXRlKCAiSCIgLCBzdHJ0b3RpbWUoICRfUE9TVFskZmllbGRdICkgKTsKICAgICAgICAgJF9QT1NUWyRmaWVsZC4nLW1pbnV0ZSddID0gZGF0ZSggImkiICwgc3RydG90aW1lKCAkX1BPU1RbJGZpZWxkXSApICk7CiAgICAgICAgICRfUE9TVFskZmllbGQuJy1zZWNvbmQnXSA9IGRhdGUoICJzIiAsIHN0cnRvdGltZSggJF9QT1NUWyRmaWVsZF0gKSApOwogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICBlY2hvICJZWVlZLU1NLUREICI7CiAgICAgICAgICR0aGlzLT5tYWtlX3JhbmdlX3NlbGVjdG9yKCBkYXRlKCAiWSIgKSAtIDEwMCAsIGRhdGUoICJZIiApICsgMTAgLCAkZmllbGQuIi15ZWFyIiApOwogICAgICAgICAkdGhpcy0+bWFrZV9yYW5nZV9zZWxlY3RvciggMSAsIDEyICwgJGZpZWxkLiItbW9udGgiICk7CiAgICAgICAgICR0aGlzLT5tYWtlX3JhbmdlX3NlbGVjdG9yKCAxICwgMzEgLCAkZmllbGQuIi1kYXkiICk7CiAgICAgICAgIGVjaG8gIiAmbmJzcDsgSEg6TU06U1MgIjsKICAgICAgICAgJHRoaXMtPm1ha2VfcmFuZ2Vfc2VsZWN0b3IoIDAgLCAyMyAsICRmaWVsZC4iLWhvdXIiICk7CiAgICAgICAgICR0aGlzLT5tYWtlX3JhbmdlX3NlbGVjdG9yKCAwICwgNTkgLCAkZmllbGQuIi1taW51dGUiICk7CiAgICAgICAgICR0aGlzLT5tYWtlX3JhbmdlX3NlbGVjdG9yKCAwICwgNTkgLCAkZmllbGQuIi1zZWNvbmQiICk7CiAgICAgIAogICAgICB9CiAgICAgIAogICAgICAjdGhpcyBmdW5jdGlvbiBqdXN0IG1ha2VzIHRoZSBkYXRlIG5vIGgsbSxzCiAgICAgIGZ1bmN0aW9uIG1ha2VfZGF0ZSggJGZpZWxkICkKICAgICAgewogICAgICAgICBpZiggISBpc3NldCggJF9QT1NUWyRmaWVsZF0gKSB8fCAkX1BPU1RbJGZpZWxkXSA9PSAiMDAwMC0wMC0wMCIgKQogICAgICAgICB7CiAgICAgICAgICAgICRfUE9TVFskZmllbGRdID0gZGF0ZSggIlktbS1kIiApOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAkX1BPU1RbJGZpZWxkLicteWVhciddID0gZGF0ZSggIlkiICwgc3RydG90aW1lKCAkX1BPU1RbJGZpZWxkXSApICk7CiAgICAgICAgICRfUE9TVFskZmllbGQuJy1tb250aCddID0gZGF0ZSggIm0iICwgc3RydG90aW1lKCAkX1BPU1RbJGZpZWxkXSApICk7CiAgICAgICAgICRfUE9TVFskZmllbGQuJy1kYXknXSA9IGRhdGUoICJkIiAsIHN0cnRvdGltZSggJF9QT1NUWyRmaWVsZF0gKSApOwogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIGVjaG8gIllZWVktTU0tREQgIjsKICAgICAgICAgJHRoaXMtPm1ha2VfcmFuZ2Vfc2VsZWN0b3IoIGRhdGUoICJZIiApIC0gMTAwICwgZGF0ZSggIlkiICkgKyAxMCAsICRmaWVsZC4iLXllYXIiICk7CiAgICAgICAgICR0aGlzLT5tYWtlX3JhbmdlX3NlbGVjdG9yKCAxICwgMTIgLCAkZmllbGQuIi1tb250aCIgKTsKICAgICAgICAgJHRoaXMtPm1ha2VfcmFuZ2Vfc2VsZWN0b3IoIDEgLCAzMSAsICRmaWVsZC4iLWRheSIgKTsKCiAgICAgIAogICAgICB9CiAgICAgIAogICAgICAjdGhpcyBjb21waWxlcyBiYWNrIHRoZSBkYXRldGltZSBmaWVsZCBmcm9tIGh0bWwgcG9zdAogICAgICBmdW5jdGlvbiBjb21waWxlX2RhdGV0aW1lKCAkZmllbGQgKQogICAgICB7CiAgICAgIAogICAgICAgICAkX1BPU1RbJGZpZWxkXSA9ICRfUE9TVFskZmllbGQuJy15ZWFyJ10uIi0iLiRfUE9TVFskZmllbGQuJy1tb250aCddLiItIi4kX1BPU1RbJGZpZWxkLictZGF5J10uIiAiLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkX1BPU1RbJGZpZWxkLictaG91ciddLiI6Ii4kX1BPU1RbJGZpZWxkLictbWludXRlJ10uIjoiLiRfUE9TVFskZmllbGQuJy1zZWNvbmQnXTsKICAgICAgCiAgICAgIH0KICAgICAgCiAgICAgICN0aGlzIGZ1bmN0aW9uIGNvbXBpbGVzIGp1c3QgYSBkYXRlIGludG8gb25lIGZpZWxkIGFnYWluCiAgICAgIGZ1bmN0aW9uIGNvbXBpbGVfZGF0ZSggJGZpZWxkICkKICAgICAgewogICAgICAKICAgICAgICAgJF9QT1NUWyRmaWVsZF0gPSAkX1BPU1RbJGZpZWxkLicteWVhciddLiItIi4kX1BPU1RbJGZpZWxkLictbW9udGgnXS4iLSIuJF9QT1NUWyRmaWVsZC4nLWRheSddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgfQogICAgICAKICAgICAgI3RoaXMgY292ZXJ0cyBhbGwgdGhlIGRhdGV0aW1lcyBmcm9tIHBvc3QgaW50byB0aGUgb3JpZ2luYWwgZmllbGQKICAgICAgZnVuY3Rpb24gY29tcGlsZV9kYXRldGltZXMoKQogICAgICB7CiAgICAgIAogICAgICAgICBmb3JlYWNoKCAkdGhpcy0+ZmllbGRzIGFzICRrID0+ICR2ICkKICAgICAgICAgewogICAgICAgICAgICBpZiggJHZbJ2ZpZWxkX3R5cGUnXSA9PSAiZGF0ZXRpbWUiICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAkdGhpcy0+Y29tcGlsZV9kYXRldGltZSggJGsgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYoICR2WydmaWVsZF90eXBlJ10gPT0gImRhdGUiICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAkdGhpcy0+Y29tcGlsZV9kYXRlKCAkayApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICB9CiAgICAgICAgIAogICAgICB9CiAgICAgIAogICAgICN0aGlzIGZ1bmN0aW9uIG1ha2VzIGEgcmV0dXJuIHRvIGxpc3QgbGluayBzbyB3aXRoIGFueSByY3J1ZCBzdHVmZgogICAgIGZ1bmN0aW9uIG1ha2VfcmV0dXJuX2xpbmsoKQogICAgIHsKICAgICAgICR0ID0gJyc7CiAgICAgICAgZm9yZWFjaCggJF9HRVQgYXMgJGsgPT4gJHYgKQogICAgICAgIHsKICAgICAgICAgICBpZiggISBlcmVnKCAiXnJjcnVkIiwgJGsgKSApCiAgICAgICAgICAgewogICAgICAgICAgICAgICR0ID0gJHQgLiAkayAuICI9IiAuJHYuICImIjsKICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICAKICAgICAgICAgJHQgPSBlcmVnX3JlcGxhY2UoICJcJiQiICwgIiIgLCAkdCApOwogICAgICAgICAgICAKICAgICAgICAgJHQgPSAkX1NFUlZFUlsiUEhQX1NFTEYiXSAuICI/IiAuICR0OwogICAgICAgICBlY2hvICI8cD48YSBocmVmPVwiIi4gJHQgLiAiXCI+cmV0dXJuIHRvIGxpc3Q8L2E+PC9wPlxuIjsKICAgICAgICAgCiAgICAgfQogICAKCWZ1bmN0aW9uIHNldFBhdGgoJHBhdGgsICRwYXRoZXJyb3IsICRtYXJrZXJlcnJvcikKCXsKCQkkdGhpcy0+cGF0aCA9ICRwYXRoOwoJCSR0aGlzLT5wYXRoZXJyb3IgPSAkcGF0aGVycm9yOwoJCSR0aGlzLT5tYXJrZXJlcnJvciA9ICRtYXJrZXJlcnJvcjsgCgl9CiAgIH0jZW5kY2xhc3MKCgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgokZGIgPSYgJGdDbXMtPkdldERiKCk7CgovLyBteXNxbC1zcGVjaWZpYywgYnV0IGlnbm9yZWQgYnkgb3RoZXIgZGF0YWJhc2UKJHRhYm9wdGFycmF5ID0gYXJyYXkoJ215c3FsJyA9PiAnVFlQRT1NeUlTQU0nKTsKCiRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKCi8vIHRhYmxlIHNjaGVtYSBkZXNjcmlwdGlvbgokZmxkcyA9ICIKCW1hcF9pZCBJIEFVVE8gS0VZLAogICAgICAgIG5hbWUgQyg4MCkgTk9UTlVMTCwKCWRlc2NyaXB0aW9uIFgsCiAgICAgICAgY2VudGVyX2xhdCBDKDUwKSwKICAgICAgICBjZW50ZXJfbG9uIEMoNTApLAogICAgICAgIG93bmVyX2lkIEksCiAgICAgICAgdHlwZSBDKDUwKSwKICAgICAgICB3aWR0aCBDKDUwKSwKICAgICAgICBoZWlnaHQgQyg1MCksCiAgICAgICAgY29udHJvbHMgTCwKICAgICAgICBjb250cm9sc19zaXplIEMoMTApLAogICAgICAgIHR5cGVfY29udHJvbHMgTCwKICAgICAgICBzaWRlYmFyIEwsCiAgICAgICAgZGlyZWN0aW9ucyBMLAogICAgICAgIHpvb20gQygxMCksCiAgICAgICAgem9vbV9lbmNvbXBhc3MgTCwKICAgICAgICBib3VuZHNfZnVkZ2UgRiwKICAgICAgICBpbmZvX3dpbmRvdyBMLAogICAgICAgIGluZm9fdHJpZ2dlciBDKDgwKQoJIjsKCi8vIGNyZWF0ZSBpdC4gVGhpcyBzaG91bGQgZG8gZXJyb3IgY2hlY2tpbmcsIGJ1dCBJJ20gYSBsYXp5IHNvZC4KJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dvb2dsZW1hcHNfbWFwcyIsICRmbGRzLCAkdGFib3B0YXJyYXkpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgovL2luZGV4IGZvciBtYXBzCiRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVJbmRleFNRTCgnaV9uYW1lJywgY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ29vZ2xlbWFwc19tYXBzIiwgJ25hbWUnKTsKCi8vIGNyZWF0ZSBhIHNlcXVlbmNlCiMkZGItPkNyZWF0ZVNlcXVlbmNlKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dvb2dsZW1hcHNfbWFwc19zZXEiKTsKCgovLyBNYXJrZXJzCiRmbGRzID0gIgogICAgICAgIG1hcmtlcl9pZCBJIEFVVE8gS0VZLAogICAgICAgIG1hcCBDKDEwMCksCiAgICAgICAgbmFtZSBDKDgwKSwKICAgICAgICBpbmZvIFgsCiAgICAgICAgYWRkcmVzcyBDKDI1NSksCiAgICAgICAgbGF0IEMoMTAwKSwKICAgICAgICBsb24gQygxMDApLAogICAgICAgIGljb24gQygxMDApCiAgICAgICAgIjsKCi8vIGNyZWF0ZSBpdC4gVGhpcyBzaG91bGQgZG8gZXJyb3IgY2hlY2tpbmcsIGJ1dCBJJ20gYSBsYXp5IHNvZC4KJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dvb2dsZW1hcHNfbWFya2VycyIsICRmbGRzLCAkdGFib3B0YXJyYXkpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7Ci8vIGNyZWF0ZSBhIHNlcXVlbmNlCiRkYi0+Q3JlYXRlU2VxdWVuY2UoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ29vZ2xlbWFwc19tYXJrZXJzX3NlcSIpOwoKCi8vIENhY2hlIG5vdCB1c2VkIHlldAokZmxkcyA9ICIKICAgICAgICBhZGRyZXNzIEMoMjU1KSBLRVkgREVGQVVMVCAnJywgCiAgICAgICAgbG9uIEYsCiAgICAgICAgbGF0IEYKICAgICAgICAiOwoKJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dvb2dsZW1hcHNfY2FjaGUiLCAkZmxkcywgJHRhYm9wdGFycmF5KTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwovLyBjcmVhdGUgYSBzZXF1ZW5jZQokZGItPkNyZWF0ZVNlcXVlbmNlKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dvb2dsZW1hcHNfY2FjaGVfc2VxIik7CgoKLy8gY3JlYXRlIGEgcGVybWlzc2lvbgokdGhpcy0+Q3JlYXRlUGVybWlzc2lvbignVXNlIEdvb2dsZU1hcHMnLCAnVXNlIEdvb2dsZU1hcHMnKTsKCgovLyBjcmVhdGUgYSBwcmVmZXJlbmNlCiR0aGlzLT5TZXRQcmVmZXJlbmNlKCJhcGlrZXkiLCAnJyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCJsb29rdXBzZXJ2aWNlIiwgJ0dPT0dMRScpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgidXNlY2FjaGUiLCAnMCcpOwokdGhpcy0+R2V0UHJlZmVyZW5jZSgndXNlbWFya2Vyc2hhZG93cycsIDApOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgieWFob29hcHBpZCIsICcnKTsKCiRjb25maWcgPSAkZ0Ntcy0+R2V0Q29uZmlnKCk7Ci8vIFByZXBhcmUgYSBkaXJlY3RvcnkgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIGltYWdlcyBvZiB0aGUgbWFya2VycyBhbmQgb25lIGZvciB0aGUgc2hhZG93cyBvZiB0aGUgbWFya2VycwokcGF0aCA9ICR0aGlzLT5jb25maWdbJ3VwbG9hZHNfcGF0aCddLicvJy4kdGhpcy0+Z2V0TmFtZSgpOwovLyBNYWtlIHN1cmUgdGhlIGRpcmVjdG9yeSBjYW4gYmUgZm91bmQuIENyZWF0ZSBpdCwgZXJyb3IgaGFuZGxpbmcgd2lsbCBjb3ZlciBhbnkgcHJvYmxlbXMgZm91bmQKbWtkaXIoJHBhdGgsIDA3NzcpOwokbWFya2Vyc3BhdGggPSAkcGF0aC5ESVJFQ1RPUllfU0VQQVJBVE9SLidtYXJrZXJzJzsKbWtkaXIoJG1hcmtlcnNwYXRoLCAwNzc3KTsKJG1hcmtlcnNoYWRvd3NwYXRoID0gJHBhdGguRElSRUNUT1JZX1NFUEFSQVRPUi4nbWFya2Vyc2hhZG93cyc7Cm1rZGlyKCRtYXJrZXJzaGFkb3dzcGF0aCwgMDc3Nyk7Ci8vIENvcHkgb3ZlciB0aGUgZGVmYXVsdCBzdXBwbGllZCBtYXJrZXJzCiRtYXJrZXJkaXIgPSBkaXJuYW1lKF9fRklMRV9fKS5ESVJFQ1RPUllfU0VQQVJBVE9SLidpbWFnZXMnLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ21hcmtlcnMnOwppZiAoZmlsZV9leGlzdHMoICRtYXJrZXJkaXIgKSApIHsKCSRkaXIgPSBvcGVuZGlyKCRtYXJrZXJkaXIpOwoJLy8gRmlsdGVyIG91dCB0aGUgZGlyZWN0b3J5IGNvbnRyb2xpbmcgY2hhcmFjdGVycyBhbmQgYnVpbGQgc2VsZWN0YWJsZSBvcHRpb25zIG9mIHRoZSBvdGhlcnMKCXdoaWxlICgoJGZpbGUgPSByZWFkZGlyKCRkaXIpKSAhPT0gZmFsc2UpCgkgIHsKCSAgCWlmICgkZmlsZSAhPScuJyAmJiAkZmlsZSE9Jy4uJykgewogIAkJCWNvcHkoJG1hcmtlcmRpci5ESVJFQ1RPUllfU0VQQVJBVE9SLiRmaWxlLCAkbWFya2Vyc3BhdGguRElSRUNUT1JZX1NFUEFSQVRPUi4kZmlsZSk7CgkgIAl9CgkgIH0KCWNsb3NlZGlyKCRkaXIpOwp9CgovLyBwdXQgbWVudGlvbiBpbnRvIHRoZSBhZG1pbiBsb2cKJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCdpbnN0YWxsZWQnLCR0aGlzLT5HZXRWZXJzaW9uKCkpKTsKCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgoKJGRiID0mICRnQ21zLT5HZXREYigpOwoKLy8gcmVtb3ZlIHRoZSBkYXRhYmFzZSB0YWJsZQokZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCAkZGIgKTsKCi8vIG1hcHMKJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ29vZ2xlbWFwc19tYXBzIiApOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiRkYi0+RHJvcFNlcXVlbmNlKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9nb29nbGVtYXBzX21hcHNfc2VxIiApOwoKLy9tYXJrZXJzCiRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dvb2dsZW1hcHNfbWFya2VycyIgKTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwokZGItPkRyb3BTZXF1ZW5jZSggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ29vZ2xlbWFwc19tYXJrZXJzX3NlcSIgKTsKCi8vY2FjaGUKJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ29vZ2xlbWFwc19jYWNoZSIgKTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwokZGItPkRyb3BTZXF1ZW5jZSggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ29vZ2xlbWFwc19jYWNoZV9zZXEiICk7CgoKCgovLyByZW1vdmUgdGhlIHBlcm1pc3Npb25zCiR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKCdVc2UgR29vZ2xlTWFwcycpOwoKLy8gcmVtb3ZlIHRoZSBwcmVmZXJlbmNlCiR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCJhcGlrZXkiKTsKJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoImxvb2t1cHNlcnZpY2UiKTsKJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoInVzZWNhY2hlIik7CiR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCd1c2VtYXJrZXJzaGFkb3dzJyk7CiR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCJ5YWhvb2FwcGlkIik7CgovLyBwdXQgbWVudGlvbiBpbnRvIHRoZSBhZG1pbiBsb2cKJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCd1bmluc3RhbGxlZCcpKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgokY3VycmVudF92ZXJzaW9uID0gJG9sZHZlcnNpb247CnN3aXRjaCgkY3VycmVudF92ZXJzaW9uKQp7CiBjYXNlICIwLjEuMiI6CiAgIGJyZWFrOwogY2FzZSAiMC4xLjMiOgogICAkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7CgogICAjY2hhbmdlIG1hcCBpbmZvIHRvIHRleHQKICAgJHNxbGFycmF5ID0gJGRpY3QtPkFsdGVyQ29sdW1uU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dvb2dsZW1hcHNfbWFwcyIsICJkZXNjcmlwdGlvbiBYIik7CiAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKICAgI2NoYW5nZSBtYXJrZXIgaW5mbyB0byB0ZXh0CiAgICRzcWxhcnJheSA9ICRkaWN0LT5BbHRlckNvbHVtblNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9nb29nbGVtYXBzX21hcmtlcnMiLCAiaW5mbyBYIik7CiAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKICAgYnJlYWs7CiBjYXNlICIwLjEuNCI6CiAgICRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKCiAgICNjaGFuZ2UgbWFwIGluZm8gdG8gdGV4dAogICAkc3FsYXJyYXkgPSAkZGljdC0+QWx0ZXJDb2x1bW5TUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ29vZ2xlbWFwc19jYWNoZSIsICJsYXQgRiIpOwogICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiAgIAogICAkY3VycmVudF92ZXJzaW9uID0gIjAuMS40IjsKIGNhc2UgIjAuMS40IjoKIAkkY29uZmlnID0gJGdDbXMtPkdldENvbmZpZygpOwoJLy8gUHJlcGFyZSBhIGRpcmVjdG9yeSB0aGF0IHdpbGwgY29udGFpbiB0aGUgaW1hZ2VzIG9mIHRoZSBtYXJrZXJzIGFuZCBvbmUgZm9yIHRoZSBzaGFkb3dzIG9mIHRoZSBtYXJrZXJzCgkkcGF0aCA9ICR0aGlzLT5jb25maWdbJ3VwbG9hZHNfcGF0aCddLicvJy4kdGhpcy0+Z2V0TmFtZSgpOwoJLy8gTWFrZSBzdXJlIHRoZSBkaXJlY3RvcnkgY2FuIGJlIGZvdW5kLiBDcmVhdGUgaXQsIGVycm9yIGhhbmRsaW5nIHdpbGwgY292ZXIgYW55IHByb2JsZW1zIGZvdW5kCglta2RpcigkcGF0aCwgMDc3Nyk7CgkkbWFya2Vyc3BhdGggPSAkcGF0aC5ESVJFQ1RPUllfU0VQQVJBVE9SLidtYXJrZXJzJzsKCW1rZGlyKCRtYXJrZXJzcGF0aCwgMDc3Nyk7CgkkbWFya2Vyc2hhZG93c3BhdGggPSAkcGF0aC5ESVJFQ1RPUllfU0VQQVJBVE9SLidtYXJrZXJzaGFkb3dzJzsKCW1rZGlyKCRtYXJrZXJzaGFkb3dzcGF0aCwgMDc3Nyk7CgkvLyBDb3B5IG92ZXIgdGhlIGRlZmF1bHQgc3VwcGxpZWQgbWFya2VycwoJJG1hcmtlcmRpciA9IGRpcm5hbWUoX19GSUxFX18pLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ2ltYWdlcycuRElSRUNUT1JZX1NFUEFSQVRPUi4nbWFya2Vycyc7CglpZiAoZmlsZV9leGlzdHMoICRtYXJrZXJkaXIgKSApIHsKCQkkZGlyID0gb3BlbmRpcigkbWFya2VyZGlyKTsKCQkvLyBGaWx0ZXIgb3V0IHRoZSBkaXJlY3RvcnkgY29udHJvbGluZyBjaGFyYWN0ZXJzIGFuZCBidWlsZCBzZWxlY3RhYmxlIG9wdGlvbnMgb2YgdGhlIG90aGVycwoJCXdoaWxlICgoJGZpbGUgPSByZWFkZGlyKCRkaXIpKSAhPT0gZmFsc2UpCgkJICB7CgkJICAJaWYgKCRmaWxlICE9Jy4nICYmICRmaWxlIT0nLi4nKSB7CgkgIAkJCWNvcHkoJG1hcmtlcmRpci5ESVJFQ1RPUllfU0VQQVJBVE9SLiRmaWxlLCAkbWFya2Vyc3BhdGguRElSRUNUT1JZX1NFUEFSQVRPUi4kZmlsZSk7CgkJICAJfQoJCSAgfQoJCWNsb3NlZGlyKCRkaXIpOwoJfQoKCSRjdXJyZW50X3ZlcnNpb24gPSAiMC4xLjUiOwogY2FzZSAiMC4xLjUiOgoJLy8gTm8gZGF0YWJhc2UgY2hhbmdlcy4gT25seSBpbnRlcm5hbCBjaGFuZ2VzIGZvciB0aGUgdXNlIG9mIHBhcmFtZXRlcnMgICAKCSRjdXJyZW50X3ZlcnNpb24gPSAiMC4xLjYiOwogZGVmYXVsdDoKICAgIGJyZWFrOwp9CgovLyBwdXQgbWVudGlvbiBpbnRvIHRoZSBhZG1pbiBsb2cKJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCd1cGdyYWRlZCcsJHRoaXMtPkdldFZlcnNpb24oKSkpOwoKPz4K]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/error.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskdGl0bGV9PC9oMz4Ke2lmICRlcnJvciE9Jyd9PHA+eyRlcnJvcn08L3A+ey9pZn0=]]></data>
	</file>
	<file>
	  <filename>/templates/map.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRnb29nbGVfbWFwX2hlYWRlcn0KeyRnb29nbGVfbWFwX2pzfQoKeyoKPCEtLSBuZWNlc3NhcnkgZm9yIGdvb2dsZSBtYXBzIHBvbHlsaW5lIGRyYXdpbmcgaW4gSUUgLS0+CntsaXRlcmFsfQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgp2XDoqIHsKIGJlaGF2aW9yOnVybCgjZGVmYXVsdCNWTUwpOwp9CnsvbGl0ZXJhbH0KPC9zdHlsZT4KKn0KCgo8dGFibGU+CiAgPHRyPgogICAgIDx0ZD57JGdvb2dsZV9tYXB9PC90ZD4KICAgICA8dGQ+eyRnb29nbGVfbWFwX3NpZGViYXJ9PC90ZD4KICA8L3RyPgo8L3RhYmxlPgp7JG1hcF9kZXNjcmlwdGlvbn0KCgo=]]></data>
	</file>
</module>
