<?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.2.1</version>
  <mincmsversion>1.10.3</mincmsversion>
	<help><![CDATA[CjxoMz5XaGF0IERvZXMgVGhpcyBEbz88L2gzPgo8cD5UaGlzIG1vZHVsZSBpcyBpbnRlbnRlZCBmb3IgaW50ZWdyYXRpbmcgR29vZ2xlTWFwcyBhcyBhIHBhcnQgb2YgeW91ciBzaXRlLjwvcD4KPGgzPkhvdyBEbyBJIFVzZSBJdDwvaDM+CjxwPkZpcnN0IHlvdSBtdXN0IHVwZGF0ZSB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgbW9kdWxlLCB0byBoYXZlIGRlZmF1bHRzIHNldCBmb3IgbmV3IG1hcHMuPC9wPgo8cD5UaGVuIHlvdSBjYW4gY2FsbCB0aGlzIG1vZHVsZSBpbiB5b3VyIHRlbXBsYXRlIHdpdGgge2Ntc19tb2R1bGUgbW9kdWxlPSdHb29nbGVNYXBzJyBtYXA9J3Rlc3QnfSA8L3A+CjxoMz5NYXJrZXJzPC9oMz4KPHA+VXNlciBkZWZpbmVkIG1hcmtlcnMgY2FuIGJlIGxvYWRlZCBpbnRvIHVwbG9hZHMvR29vZ2xlTWFwcy9tYXJrZXJzLiBUaGUgY29ubmVjdGVkIHNoYWRvdyBpbWFnZXMgc2hvdWxkIGJlIGxvYWRlZCBpbiAKCXVwbG9hZHMvR29vZ2xlTWFwcy9tYXJrZXJzaGFkb3dzLjxicj4KCU5hbWluZyBjb252ZW50aW9uIGlzIFttYXJrZXJpY29uXXMucG5nIChpZS4gbWFya2VyIGlzIGJpZ2JsdWUucG5nLCBtYXJrZXJzaGFkb3cgaXMgYmlnYmx1ZXMucG5nKS48YnI+CglJZiBhIHNoYWRvdyBpcyBub3QgZm91bmQsIHRoZSBkZWZhdWx0IHZlcnNpb24gd2lsbCBiZSB1c2VkICh3aGljaCBtYXkgbm90IGJlIHRoZSBjb3JyZWN0IHNoYWRvdyBvZiB0aGUgbWFya2VyIGF0IGFsbCkuPGJyPgoJSW4gdGhlIHNldHRpbmdzIHVzZSB0aGUgcHJlZmVyZW5jZSAnVXNlIG1hcmtlciBzaGFkb3dzJyB0byBzaG93L2hpZGUgdGhlbS4gU2hvd2luZyB0aGUgc2hhZG93cyBzbG93cyBkb3duIHRoZSBidWlsZHVwIG9mIHRoZQoJbWFwLCBkdWUgdG8gbW9yZSBpbnRlcm5hbCBjaGVja3MuPGJyPgoJT25seSBpbWFnZXMgd2l0aCBleHRlbnNpb24gLnBuZyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZC48L3A+CjxwPk1hcmtlcnMgaGF2ZSB0aGUgb3B0aW9uIHRvIGluY2x1ZGUgdGV4dC4gVGhpcyB0ZXh0IG1heSBjb250YWluIGh0bWwgY29kaW5nLiBJbiB0aGlzIHdheSB5b3UgY2FuIHNob3cKaW1hZ2VzLCBjb250cm9sIHRoZSBjb2xvciBvZiB2YXJpb3VzIHBhcnRzLjxiciAvPgpNYXJrZXIgaW5mb3JtYXRpb24gbWF5IGNvbnRhaW4gb25lIG9yIG1vcmUgZ2xvYmFsIGNvbnRlbnQgYmxvY2tzLiBFdmVuIGNvbnRlbnQgYmxvY2tzIHRoYXQgY29udGFpbiAKdGFncyAoaWUuIHRvIG1vZHVsZXMpIG1heSBiZSB1c2VkLiAKPC9wPgo8aDM+TGluZXM8L2gzPgo8cD5Qb2x5bGluZXMgYWxsb3dzIHlvdSB0byBkcmF3IGxpbmVzIGZyb20gYSBjZXJ0YWluIGNvb3JkaW5hdGUgb24gYSBtYXAgdG8gdGhlIG5leHQuIE11bHRpcGxlIGxpbmVzIGFyZSBwb3NzaWJsZSAKcGVyIG1hcC4gVGhpcyBhbGxvd3MgeW91IHRvIHByZXBhcmUgdmlzdWFsIG9uZSBsaW5lIHRoYXQgaXMgYSBjb21iaW5hdGlvbiBvZiBtdWx0aXBsZSBjb2xvcmVkIApzZXBhcmF0ZSBwb2x5bGluZSBzZXR1cHMuPC9wPgo8cD5Gcm9tIHRoZSBwb2x5bGluZXMgdGFiLCB5b3UgYXJlIGFibGUgdG8gaW1wb3J0IGdweCBmaWxlcy4gT25lIG9mIHRoZSB0ZXN0IGZpbGVzIHVzZWQgaXM6IDxhIGhyZWY9Imh0dHA6Ly93d3cudG9wb2dyYWZpeC5jb20vZmVsbHNfbG9vcC5ncHgiIHRhcmdldD0iX2JsYW5rIj5mZWxsc19sb29wLmdweCBuZWFyIEJvc3RvbiBNQTwvYT48YnIgLz4KVGVzdGluZyBoYXMgYmVlbiBwZXJmb3JtZWQgd2l0aCBhIDEuOCBNYiBmaWxlIHdpdGggbW9yZSB0aGFuIDE1LjAwMCB0cmFjayBwb2ludHMuPGJyIC8+CkltcG9ydGluZyB0aGlzIGFtb3VudCBzbG93cyBkb3duIHRoZSByZW5kZXJpbmcgb2YgdGhlIHBhZ2UgaW4gdGhlIGJhY2sgZW5kIGFuZCB0aGUgZnJvbnQgZW5kLiBEdXJpbmcgdGhlIGltcG9ydCBvZiAKYSBmaWxlIHlvdSBjb3VsZCB1c2UgdGhlICdDcnVkZW5lc3MnIGZhY3RvciB3aGljaCB3aWxsIHRha2UgZXZlcnkgbnRoIHBvaW50IHRvIGltcG9ydC4gVGh1cyAxNS4wMDAgcG9pbnRzIAppbXBvcnRlZCB3aXRoIGEgY3J1ZGVuZXNzIGZhY3RvciBvZiAxMDAgd2lsbCBnZW5lcmF0ZSAxNTAgY29vcmRpbmF0aW9ucyBmb3IgdGhlIGltcG9ydGVkIEdQWCBmaWxlLgo8L3A+CjxoMz5QYXJhbWV0ZXJzPC9oMz4KPHA+VGhpcyBtb2R1bGUgaXMgZXZlbiBtb3JlIGZsZXhpYmxlIHRocm91Z2ggdGhlIHVzYWdlIG9mIHRoZSBwYXJhbWV0ZXJzIChzZWUgdGhlIHBhcmFtZXRlciBsaXN0KS4gRWFjaCBwYXJhbWV0ZXIgYXMgYXZhaWxhYmxlIGR1cmluZyB0aGUgcHJlcGFyYXRpb24gb2YgYSBtYXAsIGNhbiBiZSAKCW92ZXJyaWRlbiBmb3IgdGhlIGZyb250IGVuZC4gU28geW91IGFyZSBhYmxlIHRvIHByZXBhcmUgb25lIG1hcCBhbmQgZGlzcGxheSBpdCBpbiB2YXJpb3VzIHdheXMgYnkgdXNpbmcgb25lIG9yIG1vcmUgcGFyYW1ldGVycy48L3A+CjxoMz5TZXR0aW5nczwvaDM+CjxwPkluIHRoZSBzZXR0aW5ncyB0YWIgaXQgaXMgcG9zc2libGUgdG8gcHJlcGFyZSBhIG51bWJlciBvZiBkZWZhdWx0IHNldHRpbmdzIGZvciB3aGF0IGlzIGNhbGxlZCB0aGUgPHN0cm9uZz4nRWFzeSBMb2NhdG9yJzwvc3Ryb25nPi4gV2hlbiBhZGRpbmcgYSBuZXcgbWFwLAphIG1hcCBpcyBzaG93biBiYXNlZCB1cG9uIHRoZXNlIGRlZmF1bHQgc2V0dGluZ3MuPGJyIC8+CldoZW4gZWRpdGluZyBhIG1hcCBvciBhIG1hcmtlciwgdGhlIHNob3duIG1hcCBpcyBhbHdheXMgY2VudGVyZWQgYXQgdGhlIGNvb3JkaW5hdGVzIHNob3duIGp1c3QgYmVsb3cgdGhlIG1hcC48YnIgLz4KV2hlbiB5b3UgZWRpdCBhIG1hcCwgdGhlIG1hcCBzZXR0aW5ncyAoY2VudGVyIGNvb3JkaW5hdGVzIGFuZCB6b29tIGxldmVsKSBhcmUgdXNlZCB0byBwcmVwYXJlIHRoZSBFYXN5IExvY2F0b3IuPGJyIC8+ClR1cm5pbmcgb24gdGhlIHNldHRpbmcgJ1NhdmUgbGFzdCB1c2VkIHZhbHVlcycsIHdpbGwgc2F2ZSB0aGUgY29vcmRpbmF0ZXMsIHpvb20gbGV2ZWwgd2hlbiB1c2VkIG9uIGEgbWFwLiBUaGUgbmV4dCB0aW1lIHlvdSBhZGQKYSBtYXAsIHRoZSBsYXN0IHNhdmVkIGNvb3JkaW5hdGVzIGFyZSB1c2VkIHRvIHNob3cgdGhlIEVhc3kgTG9jYXRvci48YnIgLz4KTm90ZTogVGhpcyBzYXZpbmcgaXMgb25seSBkb25lIG9uIGVkaXRpbmcgYSBtYXAgb3IgbWFya2VyICh6b29tIGxldmVsIG5vdCBzYXZlZCB3aGVuIGVkaXRpbmcgYSBtYXJrZXIpLiA8YnIgLz4KVGhlIEdQWCBleHBvcnQgdHlwZSBpcyB1c2VkIHdoZW4gZXhwb3J0aW5nIGEgcG9seWxpbmUgdG8gYSBncHggZmlsZS4gRGVwZW5kaW5nIG9uIHlvdXIgZGV2aWNlIAp5b3Ugd2lsbCB1c2Ugb25lIG9mIHRoZSBhdmFpbGFibGUgdHlwZXMuIFlvdSB3aWxsIGhhdmUgdG8gZXhwZXJpbWVudCB3aXRoIHRoaXMgc2V0dGluZyBpbiAKY29uanVuY3Rpb24gd2l0aCB0aGUgZXhwb3J0IG9mIGEgcG9seWxpbmUuPC9wPgo8aDM+VHJhbnNsYXRpb25zPC9oMz4KVHJhbnNsYXRpb25zIG9mIHRoaXMgbW9kdWxlIGNhbiBiZSBmb3VuZCB2aWEgdGhlIDxhIGhyZWY9Imh0dHA6Ly9zdm4uY21zbWFkZXNpbXBsZS5vcmcvc3ZuL3RyYW5zbGF0ZWNlbnRlci9tb2R1bGVzL0dvb2dsZU1hcHMvIiB0YXJnZXQ9Il9ibGFuayI+dHJhbnNsYXRpb24gY2VudGVyIGluIHRoZSBmb3JnZTwvYT4uCjxoMz5TdXBwb3J0PC9oMz4KPHA+VGhpcyBtb2R1bGUgZG9lcyBub3QgaW5jbHVkZSBjb21tZXJjaWFsIHN1cHBvcnQuIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIG51bWJlciBvZiByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIGhlbHAgeW91IHdpdGggaXQ6PGJyPgo8dWw+Cgk8bGk+VGhlIENNUyBNYWRlIFNpbXBsZSBmb3J1bTs8L2xpPgo8L3VsPgo8L3A+CjxwPkFzIHBlciB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzLWlzLiBQbGVhc2UgcmVhZCB0aGUgdGV4dApvZiB0aGUgbGljZW5zZSBmb3IgdGhlIGZ1bGwgZGlzY2xhaW1lci48L3A+Cgo8aDM+U2VjdXJpdHk8L2gzPgo8cD5Vc2VyIG11c3QgaGF2ZSAiVXNlIEdvb2dsZU1hcHMiIHBlcm1pc3Npb25zIHNldCB0byBlZGl0IG1hcHM8L3A+CjxoMz5QYXJhbWV0ZXJzPC9oMz48dWw+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gbGFuZz0iZW5fVVMiIC0gUGFyYW1ldGVyIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGF0IGxhbmd1YWdlIHRvIHVzZSBmb3IgZGlzcGxheSBvbiB0aGUgZnJvbnRlbmQuIE5vdCBhbGwgbW9kdWxlcyBzdXBwb3J0IG9yIG5lZWQgdGhpcy48L2xpPjxsaT5ib3VuZHNfZnVkZ2U9IiIgLSBUaGlzIHdpbGwgYWRqdXN0IGhvdyBtdWNoIG1hcCBib3VuZGFyeSBlbmNvbXBhc3NlcyB0aGUgbWFwIG1hcmtlcnMuPC9saT48bGk+Y2VudGVybGF0PSIiIC0gVGhlIGxhdGl0dWRlIHRvIHdoaWNoIHRoZSBtYXAgc2hvdWxkIGJlIGNlbnRlcmVkLjwvbGk+PGxpPmNlbnRlcmxvbj0iIiAtIFRoZSBsb25naXR1ZGUgdG8gd2hpY2ggdGhlIG1hcCBzaG91bGQgYmUgY2VudGVyZWQuPC9saT48bGk+Y29udHJvbHM9IiIgLSBJZiBzZXQgdG8gMCAoemVybyksIHRoZXJlIHdpbGwgYmUgbm8gY29udHJvbHMgdG8gem9vbS9tb3ZlIGFyb3VuZCB0aGUgbWFwLjwvbGk+PGxpPmNvbnRyb2xzX3NpemU9IiIgLSBUaGlzIHNldHMgdGhlIG1hcCBjb250cm9sIHNpemUuIFJlbGV2YW50IG9ubHkgaWYgbWFwIGNvbnRyb2xzIGFyZQplbmFibGVkLiBsYXJnZSA9IG1hcCB6b29tL21vdmUgd2l0aCBzbGlkZXIuIHNtYWxsID0gem9vbS9tb3ZlIHdpdGhvdXQgc2xpZGVyLiBMYXJnZSBpcyBkZWZhdWx0LjwvbGk+PGxpPmRpcmVjdGlvbnM9IiIgLSBUaGlzIGVuYWJsZXMgbWFwIGRpcmVjdGlvbnMgaW4gdGhlIGJvdHRvbSBvZiB0aGUgcG9wLXVwIGluZm8gd2luZG93LiBEZWZhdWx0IGlzIGRpc2FibGVkLgonMScgV2lsbCBlbmFibGUgdGhlIGRpcmVjdGlvbnMuPC9saT48bGk+aGVpZ2h0PSIiIC0gU2V0cyB0aGUgaGVpZ2h0IG9mIHRoZSBtYXAgd2luZG93LiBUaGlzIGNhbiBiZSBlaXRoZXIgcHggb3IgJS48L2xpPjxsaT5pbmZvX3RyaWdnZXI9IiIgLSBUaGlzIHNldHMgdGhlIGluZm8gd2luZG93IHRyaWdnZXIgYmVoYXZpb3IuIGNsaWNrID0gaW5mbyB3aW5kb3cgY29tZXMgdXAKICAgICAgICB3aGVuIGNsaWNraW5nIG9uIGEgbWFya2VyLiBtb3VzZW92ZXIgPSBpbmZvIHdpbmRvdyBjb21lcyB1cCB3aGVuIG1vdXNpbmcgb3ZlciBhIG1hcmtlci48L2xpPjxsaT5pbmZvX3dpbmRvdz0iIiAtIEVuYWJsZXMgaW5mbyB3aW5kb3dzIG9uIG1hcCBtYXJrZXJzLjwvbGk+PGxpPm1hcD0idGVzdCIgLSBTZXQgd2hpY2ggbWFwIHRvIHNob3c8L2xpPjxsaT5wYW5fY29udHJvbD0iIiAtIFVzZSAnMScgb3IgdHJ1ZSB0byBzaG93IHBhbm5pbmcgY29udHJvbCBvbiBtYXAgKGRlZmF1bHQgb2ZmKTwvbGk+PGxpPmxhbmd1YWdlPSIiIC0gU2VlOiA8YSBocmVmPSJodHRwOi8vc3ByZWFkc2hlZXRzLmdvb2dsZS5jb20vcHViP2tleT1wOXBkd3NhaTJoRE1zTGtYc29NMDVLUSZnaWQ9MSIgdGFyZ2V0PSJfYmxhbmsiPgp0aGUgbGlzdCBvZiBsYW5ndWFnZXM8L2E+PC9saT48bGk+c2NhbGVfY29udHJvbD0iIiAtIFVzZSAnMScgb3IgdHJ1ZSB0byBzaG93IHNjYWxlLjwvbGk+PGxpPnNpZGViYXI9IiIgLSBVc2UgJzEnIHRvIGVuYWJsZSB0aGUgbWFwIHNpZGViYXIuPC9saT48bGk+c3RyZWV0dmlldz0iIiAtIFVzZSAnMScgb3IgdHJ1ZSB0byBzaG93IHRoZSBzdHJlZXR2aWV3IHBlZ21hbiAoZGVmYXVsdCBvZmYpPC9saT48bGk+dHlwZT0iIiAtIFRoaXMgc2V0cyB0aGUgZGVmYXVsdCBtYXAgdHlwZS4gUmVsZXZhbnQgb25seSBpZiBtYXAgdHlwZSBjb250cm9scyBhcmUgZW5hYmxlZC4gCgltYXAgPSBkZWZhdWx0IG1hcC4gc2F0ZWxsaXRlID0gc2F0ZWxsaXRlIHZpZXcuIGh5YnJpZCA9IGh5YnJpZCB2aWV3LiB0ZXJyYWluID0gcGh5c2ljYWwgdmlldyB3aXRoIHJvYWRzPC9saT48bGk+dHlwZV9jb250cm9scz0iIiAtIFVzZSAnMScgZW5hYmxlIHRoZSBtYXAgdHlwZSBjb250cm9scyAobWFwL3NhdGVsbGl0ZS9oeWJyaWQvdGVycmFpbik8L2xpPjxsaT53aWR0aD0iIiAtIFNldHMgdGhlIHdpZHRoIG9mIHRoZSBtYXAgd2luZG93LiBUaGlzIGNhbiBiZSBlaXRoZXIgcHggb3IgJS48L2xpPjxsaT56b29tPSIiIC0gVGhpcyBzZXRzIHRoZSBtYXAgem9vbSBsZXZlbC48L2xpPjxsaT56b29tX2VuY29tcGFzcz0iIiAtIFVzZSAnMScgdG8gZW5hYmxlIHRoZSB6b29tIGVuY29tcGFzcyBzbyBtYXAgem9vbSBpcyBhcyBzbWFsbCBhcyBwb3NzaWJsZQogICAgICAgIGFuZCBpbmNsdWRlIGFsbCBtYXAgbWFya2Vycy48L2xpPjwvdWw+]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiB0c3cvRHVrZXRvd24gJmx0O3RhdHUud2lrbWFuIFthdF0gZ21haWwuY29tJmd0OzxiciAvPjxiciAvPlZlcnNpb246IDAuMi4xPGJyIC8+PGJyIC8+Q2hhbmdlIEhpc3Rvcnk6PGJyIC8+PHVsPgoJPGxpPlZlcnNpb24gMC4yLjEgNiBBdWd1c3QgMjAxMiBCeSBEdWtldG93bjxiciAvPgoJCTx1bD4KCQkJPGxpPlNob3cgYWRkcmVzcyBzZWFyY2ggcmVzdWx0IG9uIHBhZ2UsIG5vdCBpbiBtZXNzYWdlLCBmb3IgY29weWluZyBhbmQgY3JlYXRpbmcgbWFya2VyOzwvbGk+CgkJCTxsaT5XaGVuIGFkZHJlc3MgbG9va3VwIGRvbmUsIG9uZSBpcyBhYmxlIHRvIGRpcmVjdGx5IGFkZCByZXN1bHQgYXMgbWFya2VyOzwvbGk+CgkJCTxsaT5DaGFuZ2VkIG1hcCwgbWFya2VyIGFuZCBwb2x5bGluZSB0ZW1wbGF0ZSB0byB3b3JrIHdpdGggdGhlbWUgT25lRWxldmVuOzwvbGk+CgkJCTxsaT5DaGVja2VkIGFuZCB2ZXJpZmllZCBhZ2FpbnN0IENNU01TIHZzIDEuMTEuPC9saT4KCQk8L3VsPgoJPC9saT4KCTxsaT5WZXJzaW9uIDAuMi4wIDQgTm92ZW1iZXIgMjAxMSBCeSBEdWtldG93bjxiciAvPgoJCTx1bD4KCQkJPGxpPlRlbXBsYXRlIGZvciBlYXN5bG9jYXRvciByZW1vdmVkIGluIHNldHRpbmdzIGFuZCBoYXMgYmVjb21lIHNldHRpbmcgZm9yIGN1cnNvcjs8L2xpPgoJCQk8bGk+QWxsb3cgZ2xvYmFsIGNvbnRlbnQgYmxvY2tzIGluIG1hcmtlcnMgKGZlYXR1cmUgcmVxdWVzdCA0NjE2KTwvbGk+CgkJCTxsaT5FcnJvciBpbiBHb29nbGVNYXBBUEkuY2xhc3MucGhwIHByZXZlbnRlZCBtYXJrZXIgc2hhZG93cyB0byBiZSBzaG93bjs8L2xpPgoJCQk8bGk+SW1wb3J0IG9mIEdQWCBmaWxlcyBtYWRlIGF2YWlsYWJsZSBmcm9tIHBvbHlsaW5lcyB0YWI7PC9saT4KCQkJPGxpPkV4cG9ydCBvZiBhIHBvbHlsaW5lIHRvIGEgR1BYIGZpbGUgaXMgc3VwcG9ydGVkLiBQbGVhc2UgY2hlY2sgdGhlIHNldHRpbmdzIHRhYjs8L2xpPgoJCQk8bGk+TmV3IHBhcmFtZXRlciBwYW5fY29udHJvbCB0byBzaG93L2hpZGUgcGFuIGNvbnRyb2wgYnV0dG9uIGlzIG9uIHRoZSBtYXAgKGRlZmF1bHQgaGlkZGVuKTs8L2xpPgoJCQk8bGk+TmV3IHBhcmFtZXRlciBzdHJlZXR2aWV3IHRvIHNob3cvaGlkZSB0aGUgcGVnbWFuIG9uIHRoZSBtYXAgKGRlZmF1bHQgaGlkZGVuKTs8L2xpPiAKCQkJPGxpPlNjYWxlIGlzIHNob3duIGNvcnJlY3RseSBub3cgaWYgcmVxdWVzdGVkIGZvciB0aGUgbWFwOzwvbGk+CgkJCTxsaT5OZXcgb3B0aW9uIHRvIHNldCBkZWZhdWx0IHVuaXQgb2YgbWVhc3VyZW1lbnQgZm9yIGRpc3RhbmNlIG9mIHBvbHlsaW5lOzwvbGk+CgkJCTxsaT5GYWN0b3IgdG8gaW5mbHVlbmNlIG51bWJlciBvZiBwb2ludHMgKGNydWRlbmVzcykgaW5jbHVkZWQgd2hpY2ggaXMgdXNlZCBkdXJpbmcgaW1wb3J0aW5nIEdQWCBmaWxlOzwvbGk+CgkJCTxsaT5FZGl0IGh5cGVybGluayBmcm9tIHBvbHlsaW5lcyB0YWIgdG8gbWFwIGRpZG4ndCB3b3JrLjwvbGk+CgkJPC91bD4KCTwvbGk+Cgk8bGk+VmVyc2lvbiAwLjEuOSAyOSBPY3RvYmVyIDIwMTEgQnkgRHVrZXRvd248YnIgLz4KCQk8dWw+CgkJCTxsaT5UdXJuZWQgbWFpbnRlbmFuY2Ugb2YgbWFya2VycyBpbnRvIHN0YW5kYXJkIHVwZGF0ZSBmb3IgYmV0dGVyIG1haW50ZW5hbmNlOzwvbGk+CgkJCTxsaT5EdXJpbmcgaW5zdGFsbGF0aW9uIHRoZSBtYXJrZXIgc2hhZG93cyB3ZXJlIG5vdCBjb3BpZWQ7PC9saT4KCQkJPGxpPk5ldyB0YWIgZm9yIHBvbHlsaW5lIG1haW50ZW5hbmNlIChGZWF0dXJlIFJlcXVlc3QgNDE2MCk7PC9saT4KCQkJPGxpPlR3byBuZXcgb3B0aW9ucyB0byBzZXQgaW5jcmVtZW50IHN0ZXAgYW5kIHByZWNpc2lvbiBvZiBtYXJrZXIvcG9seWxpbmUgbG9jYXRpb247PC9saT4KCQkJPGxpPkVhc3lsb2NhdG9yIHNob3dzIG1hcCB0eXBlL3pvb20gbGV2ZWwgb2YgY29ubmVjdGVkIG1hcCBvbiBtYXJrZXIgbWFpbnRlbmFuY2U7PC9saT4KCQkJPGxpPk51bWJlciBvZiBtYXJrZXJzL3BvbHlsaW5lcyBpbiBiYWNrZW5kIGZvbGxvd3MgdGhlIE51bWJlciBvZiByb3dzIHBlciBwYWdlIHdoZW4gdmlld2luZyBHbG9iYWwgQ29udGVudCBCbG9ja3MgZnJvbSB0aGUgdXNlciBwcmVmZXJlbmNlczs8L2xpPgoJCQk8bGk+TGlzdCBvZiBtYXBzIGFuZCBtYXJrZXJzIGFyZSBzb3J0YWJsZSBpZiBtb2R1bGUgalF1ZXJ5VG9vbHMgaXMgaW5zdGFsbGVkOzwvbGk+CgkJCTxsaT5VcGdyYWRlZCBHb29nbGVNYXBzIEFQSSBmcm9tIHZlcnNpb24gMi41IHRvIDMuMDs8L2xpPgoJCQk8bGk+Wm9vbSBzY3JvbGwgd2hlZWwgY2FuIG5vdCBiZSBtYWludGFpbmVkIGFueW1vcmUsIHNpbmNlIGl0IGlzIG5vdCBzdXBwb3J0ZWQgaW4gdmVyc2lvbiAzLjA7PC9saT4KCQkJPGxpPlNvbHZlZCBpc3N1ZSAoR29vZ2xlTWFwQVBJLmNsYXNzLnBocCkgaW4gdGhhdCBhZGRyZXNzIGxvb2t1cCBjYW1lIGJhY2sgd2l0aCB3YXJuaW5nLCBkdWUgdG8gZmV0Y2hVUkwgZnVuY3Rpb247PC9saT4KCQkJPGxpPlNvbHZlZCBpc3N1ZSAoR29vZ2xlTWFwQVBJLmNsYXNzLnBocCkgY2F1c2luZyBtYXAgbm90IHRvIGJlIHNob3duIHdoZW4gd2luZG93IG9ubG9hZCBpcyB1c2VkIAoJCQkod2hpY2ggaXMgaW4gbW9zdCBjYXNlcyB0aGUgc2l0dWF0aW9uIHdpdGhpbiBDTVNNUyk7PC9saT4KCQkJPGxpPkR1cmluZyB1cGRhdGUgdGhlIHByZXZpb3VzIHZlcnNpb24gb2YgdGhlIEFQSSBpcyByZW1vdmVkIChsaWIvR29vZ2xlTWFwQVBJLTIuNSkuIFlvdSBtYXkgZmluZCBpdCBpcyBzdGlsbCB0aGVyZSBhZnRlciB0aGlzIHVwZ3JhZGUuCgkJCVRoYXQgaXMgdGhlbiBkdWUgdG8gc2VjdXJpdHkgc2V0dGluZ3MuIFlvdSBtYXkgZGVsZXRlIGRpcmVjdG9yeSBHb29nbGVNYXBBUEktMi41IHdpdGhvdXQgYW55IHByb2JsZW0uPC9saT4KCQkJPGxpPk1ha2Ugc3VyZSB0aGF0IGRhdGFiYXNlIGNhbGxzIGFyZSBDTVNNUyB2ZXJzaW9uIDEuOCB0aHJ1IDEuMTAuOSBwcm9vZi48L2xpPgoJCTwvdWw+Cgk8L2xpPgoJPGxpPlZlcnNpb24gMC4xLjggMjkgRGVjZW1iZXIgMjAwOSBCeSBEdWtldG93bjxiciAvPgoJCTx1bD4KCQkJPGxpPlBlciBtYXAvbWFya2VyIEVhc3kgTG9jYXRvciBpbnRyb2R1Y2VkLCB0byBxdWlja2x5IHJldHJpZXZlIGNvb3JkaW5hdGVzIGZvciBtYXAvbWFya2VyOzwvbGk+CgkJCTxsaT5OZXcgc2V0dGluZ3MgdG8gc3VwcG9ydCBFYXN5IExvY2F0b3I7PC9saT4KCQkJPGxpPk5vIHRoaW5ncyBsZWZ0IGJlaGluZCB3aGVuIHBlcmZvcm1pbmcgYW4gdW5pc3RhbGwuPC9saT4KCQk8L3VsPgoJPC9saT4KCTxsaT5WZXJzaW9uIDAuMS43IDUgRGVjZW1iZXIgMjAwOSBCeSBEdWtldG93bjxicj4KCQk8dWw+CgkJCTxsaT5VcGdyYWRlZCBHb29nbGVNYXBzIEFQSSBmcm9tIHZlcnNpb24gMi4wIHRvIDIuNSAoRmVhdHVyZSBSZXF1ZXN0IDQyNDkpOzwvbGk+CgkJCTxsaT5QZXIgbWFwIG9wdGlvbiB0byBhbGxvdyB6b29taW5nIHVzaW5nIHRoZSBzY3JvbGwgd2hlZWw7PC9saT4KCQkJPGxpPlBlciBtYXAgb3B0aW9uIHRvIHNob3cvaGlkZSB0aGUgc2NhbGUuIEFsc28gYXZhaWxhYmxlIGFzIHBhcmFtZXRlcjs8L2xpPgoJCQk8bGk+Tm8gbG9uZ2VyIG5lZWQgdG8gcmVsb2dpbiBhZnRlciBhZGRyZXNzIGxvb2t1cCAoQnVnIzMxOTMpLiBGb3VuZCBsYXQvbG9uIHJlbWFpbnMgc2hvd24gZm9yIGVhc3kgY29weWluZzs8L2xpPgoJCQk8bGk+TGFuZ3VhZ2UgZm9yIHRoZSBjb250cm9sZXMgaXMgbm93IGF2YWlsYWJsZSBhcyBwYXJhbWV0ZXI7PC9saT4KCQkJPGxpPkNoZWNrZWQvc29sdmVkIHZhbGlkYXRpb24gWEhUTUwgdXNpbmcgVzNDIChCdWcjMjAxNCk7PC9saT4KCQkJPGxpPk5vdyBtdWx0aXBsZSBtYXBzIG9uIG9uZSBwYWdlIHBvc3NpYmxlIChCdWcjIDQyNDgpOzwvbGk+CgkJCTxsaT5CZXR0ZXIgdXNhZ2Ugb2YgZGlyZWN0b3J5IHNlcGFyYXRvciB0byBhdm9pZCBub3QgZm91bmQgZmlsZXMgKEJ1ZyMzMzQ2KTs8L2xpPgoJCQk8bGk+TmV3IG1hcCB0eXBlICdUZXJyYWluJyBpbXBsZW1lbnRlZC48L2xpPgoJCQk8bGk+RHVyaW5nIHVwZGF0ZSB0aGUgcHJldmlvdXMgdmVyc2lvbiBvZiB0aGUgQVBJIGlzIHJlbW92ZWQgKGxpYi9Hb29nbGVNYXBBUEktMi4wKS4gWW91IG1heSBmaW5kIGl0IGlzIHN0aWxsIHRoZXJlIGFmdGVyIHRoaXMgdXBncmFkZS4KCQkJVGhhdCBpcyB0aGVuIGR1ZSB0byBzZWN1cml0eSBzZXR0aW5ncy4gWW91IG1heSBkZWxldGUgZGlyZWN0b3J5IEdvb2dsZU1hcEFQSS0yLjAgd2l0aG91dCBhbnkgcHJvYmxlbS48L2xpPgoJCTwvdWw+Cgk8L2xpPgoJPGxpPlZlcnNpb24gMC4xLjYgMTUgSmFudWFyeSAyMDA5IEJ5IER1a2V0b3duPGJyIC8+CgkJPHVsPgoJCQk8bGk+SW5jbHVkZWQgdGhlIHBhcmFtZXRlcnMgdGhhdCBhcmUgYWxzbyB1c2VkIGJ5IEdvb2dsZSdzIEFQSS4gUGFyYW1ldGVycyBhcmUgZGlzY3Vzc2VkIGluIGhlbHAgdGV4dC48L2xpPgoJCTwvdWw+Cgk8L2xpPgoJPGxpPlZlcnNpb24gMC4xLjUgMTAgSmFudWFyeSAyMDA5IEJ5IER1a2V0b3duPGJyIC8+CgkJPHVsPgoJCQk8bGk+VXNlciBkZWZpbmVkIG1hcmtlcnMgbm93IHdvcmsuIFNlYXJjaCA8YSBocmVmPSJodHRwOi8vd3d3Lmdvb2dsZS5ubC9zZWFyY2g/cmxzPWVuJnE9Z29vZ2xlK21hcHMraWNvbittYWtlciIgdGFyZ2V0PSJfYmxhbmsiPkdvb2dsZTwvYT4gZm9yIG1hcCBpY29uIG1ha2VyczxiciAvPjwvbGk+CgkJPC91bD4KCTwvbGk+Cgk8bGk+VmVyc2lvbiAwLjEuIDI4IEF1Z3VzdCAyMDA2Ljxicj4KCQk8dWw+CgkJCTxsaT5Jbml0aWFsIFJlbGVhc2UuPC9saT4KCQk8L3VsPgoJPC9saT4KPC91bD4KPGgzPlRoYW5rcyBnbyB0bzwvaDM+CjxwPlJvYmVydCBCcm93biBmb3IgUkNSVUQgQ2xhc3MgdXNlZCBpbiBhZG1pbiBleHRlbnNpdmVseTwvcD4KPHA+YW5kPC9wPgo8cD5Nb250ZSBPaHJ0IGZvciBHb29nbGVNYXBBUEk8L3A+PGJyIC8+]]></about>
	<description><![CDATA[Prepare multiple Google maps, multiple coordinates with custom markers. 
Includes EasyLocator to quickly set coordinates. Paths (aka polylines) are also possible.]]></description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.addmap.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyBHb29nbGVNYXBzIChpZiB5b3UgZG9uJ3Qga25vdyB0aGlzIG9uZSA6LSkgR29vZ2xlIGl0ISkuIEEgbW9kdWxlIGZvciBDTVMgLSBDTVMgTWFkZSBTaW1wbGUKIyBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgRHVrZXRvd24gCiMKIyBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIGFkZGluZyBhIG1hcAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9nb29nbGVtYXBzCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKJGdDbXMgPSBjbXNtcygpOyBpZiggIWlzX29iamVjdCgkZ0NtcykgKSBleGl0OwokZGIgPSBjbXNtcygpLT5HZXREYigpOwoKJHVzZXJfaWQgPSAwOwppZiAoZ2V0X3VzZXJpZCgpICkgewoJJHVzZXJfaWQgPSBnZXRfdXNlcmlkKCk7Cn0KJG93bmVyX2lkID0gJHVzZXJfaWQ7CgppZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1VzZSBHb29nbGVNYXBzJykpCnsKCWVjaG8gJHRoaXMtPlNob3dFcnJvcnMoJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcsIGFycmF5KCdVc2UgR29vZ2xlTWFwcycpKSk7CglyZXR1cm47Cn0KCmlmIChpc3NldCgkcGFyYW1zWydjYW5jZWwnXSkpCnsKCSRwYXJhbXMgPSBhcnJheSgnYWN0aXZlX3RhYicgPT4gJ21hcHMnKTsKCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICRwYXJhbXMpOwp9CgokZGVzY3JpcHRpb24gPSAnJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ2Rlc2NyaXB0aW9uJ10pKSB7CgkkZGVzY3JpcHRpb24gPSAkcGFyYW1zWydkZXNjcmlwdGlvbiddOwp9CgokY2VudGVyX2xhdCA9ICcnOwppZiAoaXNzZXQoJHBhcmFtc1snY2VudGVyX2xhdCddKSkgewoJJGNlbnRlcl9sYXQgPSAkcGFyYW1zWydjZW50ZXJfbGF0J107Cn0KCiRjZW50ZXJfbG9uID0gJyc7CmlmIChpc3NldCgkcGFyYW1zWydjZW50ZXJfbG9uJ10pKSB7CgkkY2VudGVyX2xvbiA9ICRwYXJhbXNbJ2NlbnRlcl9sb24nXTsKfQoKJHR5cGUgPSAnbWFwJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ3R5cGUnXSkpIHsKCSR0eXBlID0gJHBhcmFtc1sndHlwZSddOwp9Cgokd2lkdGggPSAnJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ3dpZHRoJ10pKSB7Cgkkd2lkdGggPSAkcGFyYW1zWyd3aWR0aCddOwp9CgokaGVpZ2h0ID0gJyc7CmlmIChpc3NldCgkcGFyYW1zWydoZWlnaHQnXSkpIHsKCSRoZWlnaHQgPSAkcGFyYW1zWydoZWlnaHQnXTsKfQoKJGNvbnRyb2xzID0gMDsKaWYgKGlzc2V0KCRwYXJhbXNbJ2NvbnRyb2xzJ10pKSB7CgkkY29udHJvbHMgPSAkcGFyYW1zWydjb250cm9scyddOwp9CgokY29udHJvbHNfc2l6ZSA9ICcnOwppZiAoaXNzZXQoJHBhcmFtc1snY29udHJvbHNfc2l6ZSddKSkgewoJJGNvbnRyb2xzX3NpemUgPSAkcGFyYW1zWydjb250cm9sc19zaXplJ107Cn0KCiR0eXBlX2NvbnRyb2xzID0gMDsKaWYgKGlzc2V0KCRwYXJhbXNbJ3R5cGVfY29udHJvbHMnXSkpIHsKCSR0eXBlX2NvbnRyb2xzID0gJHBhcmFtc1sndHlwZV9jb250cm9scyddOwp9Cgokc2lkZWJhciA9IDA7CmlmIChpc3NldCgkcGFyYW1zWydzaWRlYmFyJ10pKSB7Cgkkc2lkZWJhciA9ICRwYXJhbXNbJ3NpZGViYXInXTsKfQoKJGRpcmVjdGlvbnMgPSAwOwppZiAoaXNzZXQoJHBhcmFtc1snZGlyZWN0aW9ucyddKSkgewoJJGRpcmVjdGlvbnMgPSAkcGFyYW1zWydkaXJlY3Rpb25zJ107Cn0KCiR1c2Vkem9vbSA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxldmVsJywgMTApOwppZiAoaXNzZXQoJHBhcmFtc1snem9vbSddKSkgewoJJHVzZWR6b29tID0gJHBhcmFtc1snem9vbSddOwp9Cgokem9vbXNjcm9sbHdoZWVsID0gMDsKCiR6b29tX2VuY29tcGFzcyA9IDA7CmlmIChpc3NldCgkcGFyYW1zWyd6b29tX2VuY29tcGFzcyddKSkgewoJJHpvb21fZW5jb21wYXNzID0gJHBhcmFtc1snem9vbV9lbmNvbXBhc3MnXTsKfQoKJHNjYWxlX2NvbnRyb2wgPSAwOwppZiAoaXNzZXQoJHBhcmFtc1snc2NhbGVfY29udHJvbCddKSkgewoJJHNjYWxlX2NvbnRyb2wgPSAkcGFyYW1zWydzY2FsZV9jb250cm9sJ107Cn0KCiRib3VuZHNfZnVkZ2UgPSAnJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ2JvdW5kc19mdWRnZSddKSkgewoJJGJvdW5kc19mdWRnZSA9ICRwYXJhbXNbJ2JvdW5kc19mdWRnZSddOwp9CgokaW5mb193aW5kb3cgPSAwOwppZiAoaXNzZXQoJHBhcmFtc1snaW5mb193aW5kb3cnXSkpIHsKCSRpbmZvX3dpbmRvdyA9ICRwYXJhbXNbJ2luZm9fd2luZG93J107Cn0KCiRpbmZvX3RyaWdnZXIgPSAnJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ2luZm9fdHJpZ2dlciddKSkgewoJJGluZm9fdHJpZ2dlciA9ICRwYXJhbXNbJ2luZm9fdHJpZ2dlciddOwp9CgokbmFtZSA9ICcnOwppZiAoaXNzZXQoJHBhcmFtc1snbmFtZSddKSkKewoJJG5hbWUgPSAkcGFyYW1zWyduYW1lJ107CglpZiAoJG5hbWUgIT0gJycpIHsKCQkkbWFwX2lkID0gJGRiLT5HZW5JRChjbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9nb29nbGVtYXBzX21hcHNfc2VxJyk7CgkJJHF1ZXJ5ID0gJ0lOU0VSVCBJTlRPICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfZ29vZ2xlbWFwc19tYXBzIAoJCQkobWFwX2lkLCBuYW1lLCBkZXNjcmlwdGlvbiwgY2VudGVyX2xhdCwgY2VudGVyX2xvbiwgb3duZXJfaWQsIAoJCQl0eXBlLCB3aWR0aCwgaGVpZ2h0LCBjb250cm9scywgY29udHJvbHNfc2l6ZSwgdHlwZV9jb250cm9scywgCgkJCXNpZGViYXIsIGRpcmVjdGlvbnMsIHpvb20sIHpvb21zY3JvbGx3aGVlbCwgem9vbV9lbmNvbXBhc3MsCgkJCXNjYWxlX2NvbnRyb2wsIGJvdW5kc19mdWRnZSwgaW5mb193aW5kb3csIGluZm9fdHJpZ2dlcikgCgkJCVZBTFVFUyAoPyw/LD8sPyw/LD8sCgkJCQk/LD8sPyw/LD8sPywKCQkJCT8sPyw/LD8sPywKCQkJCT8sPyw/LD8pJzsKCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkbWFwX2lkLCAkbmFtZSwgJGRlc2NyaXB0aW9uLCAkY2VudGVyX2xhdCwgCgkJCSRjZW50ZXJfbG9uLCAkb3duZXJfaWQsICR0eXBlLCAkd2lkdGgsICRoZWlnaHQsICRjb250cm9scywgJGNvbnRyb2xzX3NpemUsIAoJCQkkdHlwZV9jb250cm9scywgJHNpZGViYXIsICRkaXJlY3Rpb25zLCAkdXNlZHpvb20sICR6b29tc2Nyb2xsd2hlZWwsCQoJCQkkem9vbV9lbmNvbXBhc3MsICRzY2FsZV9jb250cm9sLCAkYm91bmRzX2Z1ZGdlLCAkaW5mb193aW5kb3csCgkJCSRpbmZvX3RyaWdnZXIpKTsKCQkkdGhpcy0+U2F2ZUVhc3lMb2NhdG9yKCRjZW50ZXJfbGF0LCAkY2VudGVyX2xvbiwgJHVzZWR6b29tKTsKCgkJJHBhcmFtcyA9IGFycmF5KCd0YWJfbWVzc2FnZSc9PiAnbWFwYWRkZWQnLCAnYWN0aXZlX3RhYicgPT4gJ21hcHMnKTsKCQkkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCAkcGFyYW1zKTsKCX0KCWVsc2UgewoJCQllY2hvICR0aGlzLT5TaG93RXJyb3JzKCR0aGlzLT5MYW5nKCdub25hbWVnaXZlbicpKTsKCX0KfQoKLy8gQ2hlY2sgd2hhdCB1c2VyIHNldHRpbmcgaXMgZm9yIEdsb2JhbCBDb250ZW50IEJsb2NrIHd5c2l3eWcKJGFsbG93X3d5c2l3eWcgPSBnZXRfcHJlZmVyZW5jZSggJHVzZXJfaWQsICdnY2Jfd3lzaXd5ZycgKTsKCi8vIFByZXBhcmUgYSBsaXN0IG9mIG1hcCB0eXBlcwokdHlwZWxpc3QgPSBhcnJheSgpOwokdHlwZWxpc3QgPSAkdGhpcy0+R2V0TWFwVHlwZXMoKTsKc3dpdGNoICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGVmYXVsdG1hcHR5cGUnKSkgewoJY2FzZSAnaHlicmlkJzoKCQkkc21hcnR5LT5hc3NpZ24oJ21hcHR5cGUnLCAnSFlCUklEJyk7CgkJYnJlYWs7CgljYXNlICdzYXRlbGxpdGUnOgoJCSRzbWFydHktPmFzc2lnbignbWFwdHlwZScsICdTQVRFTExJVEUnKTsKCQlicmVhazsKCWNhc2UgJ3RlcnJhaW4nOgoJCSRzbWFydHktPmFzc2lnbignbWFwdHlwZScsICdURVJSQUlOJyk7CgkJYnJlYWs7CglkZWZhdWx0OgoJCSRzbWFydHktPmFzc2lnbignbWFwdHlwZScsICdST0FETUFQJyk7CgkJYnJlYWs7Cn0KLy8gUHJlcGFyZSBhIGxpc3Qgb2YgY29udHJvbCBzaXplcwokY29udHJvbHNfc2l6ZWxpc3QgPSBhcnJheSgpOwokY29udHJvbHNfc2l6ZWxpc3RbJHRoaXMtPkxhbmcoJ2NvbnRyb2xzaXplbGFyZ2UnKV0gPSAnbGFyZ2UnOwokY29udHJvbHNfc2l6ZWxpc3RbJHRoaXMtPkxhbmcoJ2NvbnRyb2xzaXplc21hbGwnKV0gPSAnc21hbGwnOwoKLy8gUHJlcGFyZSBhIGxpc3Qgb2Ygem9vbSBsZXZlbHMKJHpvb21saXN0ID0gYXJyYXkoKTsKZm9yICgkaSA9IDE7ICRpIDwgMjA7ICRpKyspIHsKCSR6b29tbGlzdFskaSAtIDFdID0gJGk7Cn0KCi8vIFByZXBhcmUgYSBsaXN0IG9mIHdpbmRvdyB0cmlnZ2VycwokaW5mb190cmlnZ2VybGlzdCA9IGFycmF5KCk7CiRpbmZvX3RyaWdnZXJsaXN0WyR0aGlzLT5MYW5nKCdpbmZvX3RyaWdnZXJjbGljaycpXSA9ICdjbGljayc7CiRpbmZvX3RyaWdnZXJsaXN0WyR0aGlzLT5MYW5nKCdpbmZvX3RyaWdnZXJtb3VzZW92ZXInKV0gPSAnbW91c2VvdmVyJzsKCiNEaXNwbGF5IHRlbXBsYXRlCiRzbWFydHktPmFzc2lnbignc3RhcnRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICdhZGRtYXAnLCAkcmV0dXJuaWQpKTsKJHNtYXJ0eS0+YXNzaWduKCdlbmRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfbmFtZScsICR0aGlzLT5MYW5nKCd0aXRsZV9uYW1lJykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X25hbWUnLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ25hbWUnLCAkbmFtZSwgNDAsIDgwLCAnY2xhc3M9ImRlZmF1bHRmb2N1cyInKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfZGVzY3JpcHRpb24nLCAkdGhpcy0+TGFuZygndGl0bGVfZGVzY3JpcHRpb24nKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfZGVzY3JpcHRpb24nLCAkdGhpcy0+Q3JlYXRlVGV4dEFyZWEoJGFsbG93X3d5c2l3eWcsICRpZCwgJGRlc2NyaXB0aW9uLCAnZGVzY3JpcHRpb24nLCAnJywgJycsICcnLCAnJywgJzgwJywgJzMnKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfY2VudGVyX2xhdCcsICR0aGlzLT5MYW5nKCd0aXRsZV9jZW50ZXJfbGF0JykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X2NlbnRlcl9sYXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ2NlbnRlcl9sYXQnLCAkY2VudGVyX2xhdCwgNDAsIDEwMCkpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2NlbnRlcl9sb24nLCAkdGhpcy0+TGFuZygndGl0bGVfY2VudGVyX2xvbicpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9jZW50ZXJfbG9uJywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdjZW50ZXJfbG9uJywgJGNlbnRlcl9sb24sIDQwLCAxMDApKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV90eXBlJywgJHRoaXMtPkxhbmcoJ3RpdGxlX3R5cGUnKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfdHlwZScsICR0aGlzLT5DcmVhdGVJbnB1dFJhZGlvR3JvdXAgKCRpZCwgJ3R5cGUnLCAkdHlwZWxpc3QsICR0eXBlLCAnJywgJyZuYnNwOycpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV93aWR0aCcsICR0aGlzLT5MYW5nKCd0aXRsZV93aWR0aCcpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF93aWR0aCcsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnd2lkdGgnLCAkd2lkdGgsIDQwLCA1MCkpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2hlaWdodCcsICR0aGlzLT5MYW5nKCd0aXRsZV9oZWlnaHQnKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfaGVpZ2h0JywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdoZWlnaHQnLCAkaGVpZ2h0LCA0MCwgNTApKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9jb250cm9scycsJHRoaXMtPkxhbmcoJ3RpdGxlX2NvbnRyb2xzJykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X2NvbnRyb2xzJywgJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCAnY29udHJvbHMnLCB0cnVlLCAkY29udHJvbHMpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9jb250cm9sc19zaXplJywgJHRoaXMtPkxhbmcoJ3RpdGxlX2NvbnRyb2xzX3NpemUnKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfY29udHJvbHNfc2l6ZScsICR0aGlzLT5DcmVhdGVJbnB1dFJhZGlvR3JvdXAgKCRpZCwgJ2NvbnRyb2xzX3NpemUnLCAkY29udHJvbHNfc2l6ZWxpc3QsICRjb250cm9sc19zaXplLCAnJywgJyZuYnNwOycpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV90eXBlX2NvbnRyb2xzJywkdGhpcy0+TGFuZygndGl0bGVfdHlwZV9jb250cm9scycpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF90eXBlX2NvbnRyb2xzJywgJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCAndHlwZV9jb250cm9scycsIHRydWUsICR0eXBlX2NvbnRyb2xzKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfc2lkZWJhcicsJHRoaXMtPkxhbmcoJ3RpdGxlX3NpZGViYXInKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfc2lkZWJhcicsICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwgJ3NpZGViYXInLCB0cnVlLCAkc2lkZWJhcikpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2RpcmVjdGlvbnMnLCR0aGlzLT5MYW5nKCd0aXRsZV9kaXJlY3Rpb25zJykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X2RpcmVjdGlvbnMnLCAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsICdkaXJlY3Rpb25zJywgdHJ1ZSwgJGRpcmVjdGlvbnMpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV96b29tJywkdGhpcy0+TGFuZygndGl0bGVfem9vbScpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF96b29tJywgJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCAnem9vbScsICR6b29tbGlzdCwgLTEsICR1c2Vkem9vbSkpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX3pvb21fZW5jb21wYXNzJywkdGhpcy0+TGFuZygndGl0bGVfem9vbV9lbmNvbXBhc3MnKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfem9vbV9lbmNvbXBhc3MnLCAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsICd6b29tX2VuY29tcGFzcycsIHRydWUsICR6b29tX2VuY29tcGFzcykpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX3NjYWxlX2NvbnRyb2wnLCR0aGlzLT5MYW5nKCd0aXRsZV9zY2FsZV9jb250cm9sJykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X3NjYWxlX2NvbnRyb2wnLCAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsICdzY2FsZV9jb250cm9sJywgdHJ1ZSwgJHNjYWxlX2NvbnRyb2wpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9ib3VuZHNfZnVkZ2UnLCAkdGhpcy0+TGFuZygndGl0bGVfYm91bmRzX2Z1ZGdlJykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X2JvdW5kc19mdWRnZScsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnYm91bmRzX2Z1ZGdlJywgJGJvdW5kc19mdWRnZSwgNDAsIDUwKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfaW5mb193aW5kb3cnLCR0aGlzLT5MYW5nKCd0aXRsZV9pbmZvX3dpbmRvdycpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9pbmZvX3dpbmRvdycsICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwgJ2luZm9fd2luZG93JywgdHJ1ZSwgJGluZm9fd2luZG93KSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfaW5mb190cmlnZ2VyJywgJHRoaXMtPkxhbmcoJ3RpdGxlX2luZm9fdHJpZ2dlcicpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9pbmZvX3RyaWdnZXInLCAkdGhpcy0+Q3JlYXRlSW5wdXRSYWRpb0dyb3VwICgkaWQsICdpbmZvX3RyaWdnZXInLCAkaW5mb190cmlnZ2VybGlzdCwgJGluZm9fdHJpZ2dlciwgJycsICcmbmJzcDsnKSk7CgovLyBQYXNzIHRoZSBpZCwgc28gaXQgY2FuIGJlIHVzZWQgaW4gdGhlIGphdmEgc2NyaXB0IG9mIHRoZSBlYXN5bG9jYXRvciAKJHNtYXJ0eS0+YXNzaWduKCdpZCcsJGlkKTsKCi8vIFByZXBhcmUgdGhlIHNldHRpbmdzIGZvciB0aGUgZWFzeWxvY2F0b3IKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9lYXN5bG9jYXRvcicsICR0aGlzLT5MYW5nKCd0aXRsZV9lYXN5bG9jYXRvcicpKTsKJHNtYXJ0eS0+YXNzaWduKCdlYXN5bG9jYXRvcmxhdCcsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxhdCcsIDQ0KSk7CiRzbWFydHktPmFzc2lnbignZWFzeWxvY2F0b3Jsb24nLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZWFzeWxvY2F0b3Jsb24nLCAtNjMpKTsKJHNtYXJ0eS0+YXNzaWduKCdlYXN5bG9jYXRvcmxldmVsJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Vhc3lsb2NhdG9ybGV2ZWwnKSwgMSk7CiRzbWFydHktPmFzc2lnbignZWFzeWxvY2F0b3JjdXJzb3InLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZWFzeWxvY2F0b3JjdXJzb3InLCAnY3Jvc3NoYWlyJykpOwoKJHNtYXJ0eS0+YXNzaWduKCdoaWRkZW4nLCAkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCAnbWFwX2lkJywgJG1hcF9pZCkpOwokc21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXQnLCBsYW5nKCdzdWJtaXQnKSkpOwokc21hcnR5LT5hc3NpZ24oJ2NhbmNlbCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdjYW5jZWwnLCBsYW5nKCdjYW5jZWwnKSkpOwplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2VkaXRtYXAudHBsJyk7Cj8+]]></data>
	</file>
	<file>
	  <filename>/action.addmarker.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyBHb29nbGVNYXBzIChpZiB5b3UgZG9uJ3Qga25vdyB0aGlzIG9uZSA6LSkgR29vZ2xlIGl0ISkuIEEgbW9kdWxlIGZvciBDTVMgLSBDTVMgTWFkZSBTaW1wbGUKIyBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgRHVrZXRvd24gCiMKIyBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIGFkZGluZyBhIG1hcmtlcgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9nb29nbGVtYXBzCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKJGdDbXMgPSBjbXNtcygpOyBpZiggIWlzX29iamVjdCgkZ0NtcykgKSBleGl0OwokZGIgPSBjbXNtcygpLT5HZXREYigpOwoKaWYgKGlzc2V0KCRwYXJhbXNbJ2NhbmNlbCddKSkKewoJJHBhcmFtcyA9IGFycmF5KCdhY3RpdmVfdGFiJyA9PiAnbWFya2VycycpOwoJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgJHBhcmFtcyk7Cn0KCiR1c2VyX2lkID0gJyc7CmlmIChnZXRfdXNlcmlkKCkgKSB7CgkkdXNlcl9pZCA9IGdldF91c2VyaWQoKTsKfQoKaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdVc2UgR29vZ2xlTWFwcycpKQp7CgllY2hvICR0aGlzLT5TaG93RXJyb3JzKCR0aGlzLT5MYW5nKCdhY2Nlc3NkZW5pZWQnLCBhcnJheSgnVXNlIEdvb2dsZU1hcHMnKSkpOwoJcmV0dXJuOwp9CgokdXNlZG1hcCA9ICcnOwppZiAoaXNzZXQoJHBhcmFtc1snbWFwJ10pKSB7CgkkdXNlZG1hcCA9ICRwYXJhbXNbJ21hcCddOwp9CgokaW5mbyA9ICcnOwppZiAoaXNzZXQoJHBhcmFtc1snaW5mbyddKSkgewoJJGluZm8gPSAkcGFyYW1zWydpbmZvJ107Cn0KCiRhZGRyZXNzID0gJyc7CmlmIChpc3NldCgkcGFyYW1zWydhZGRyZXNzJ10pKSB7CgkkYWRkcmVzcyA9ICRwYXJhbXNbJ2FkZHJlc3MnXTsKfQoKJGxhdCA9ICcnOwppZiAoaXNzZXQoJHBhcmFtc1snbGF0J10pKSB7CgkkbGF0ID0gJHBhcmFtc1snbGF0J107Cn0KZWxzZSB7CgkkZWFzeWxvY2F0b3JsYXQgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZWFzeWxvY2F0b3JsYXQnLCA0NCk7Cn0KCiRsb24gPSAnJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ2xvbiddKSkgewoJJGxvbiA9ICRwYXJhbXNbJ2xvbiddOwp9CmVsc2UgewoJJGVhc3lsb2NhdG9ybG9uID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Vhc3lsb2NhdG9ybG9uJywgLTYzKTsKfQoKJGljb24gPSAnJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ2ljb24nXSkpIHsKCSRpY29uID0gJHBhcmFtc1snaWNvbiddOwp9CgokbmFtZSA9ICcnOwppZiAoaXNzZXQoJHBhcmFtc1snbmFtZSddKSkgewoJJG5hbWUgPSAkcGFyYW1zWyduYW1lJ107Cn0KCiRtZXNzYWdlID0gJyc7IAokZXJyb3JmbmQgPSBmYWxzZTsKaWYgKCRuYW1lID09ICcnKSB7CgkkbWVzc2FnZSAuPSAkdGhpcy0+TGFuZygnbm9uYW1lZ2l2ZW4nKTsKCSRlcnJvcmZuZCA9IHRydWU7ICAgICAgICAgICAgICAgICAgIAp9CmlmICgkaWNvbiA9PSAnJykgewoJaWYgKCRtZXNzYWdlICE9ICcnKSAkbWVzc2FnZSAuPSAnPGJyIC8+JzsKCSRtZXNzYWdlIC49ICR0aGlzLT5MYW5nKCdub2ljb25zZWxlY3RlZCcpOwoJJGVycm9yZm5kID0gdHJ1ZTsgICAgICAgICAgICAgICAgICAgCn0KCmlmIChpc3NldCgkcGFyYW1zWydzdWJtaXQnXSkpCnsKCWlmICghJGVycm9yZm5kKSB7CgkJJG1hcmtlcl9pZCA9ICRkYi0+R2VuSUQoY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfZ29vZ2xlbWFwc19tYXJrZXJzX3NlcScpOwoJCSRxdWVyeSA9ICdJTlNFUlQgSU5UTyAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX2dvb2dsZW1hcHNfbWFya2VycwoJCQkobWFya2VyX2lkLCBtYXAsIG5hbWUsIGluZm8sIGFkZHJlc3MsIGxhdCwgbG9uLCBpY29uKQoJCQlWQUxVRVMgKD8sPyw/LD8sPyw/LD8sPyknOwoJCSRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRtYXJrZXJfaWQsICR1c2VkbWFwLCAkbmFtZSwgJGluZm8sICRhZGRyZXNzLCAkbGF0LCAkbG9uLCAkaWNvbikpOwoJCSR0aGlzLT5TYXZlRWFzeUxvY2F0b3IoJGNlbnRlcl9sYXQsICRjZW50ZXJfbG9uKTsKCQoJCSRwYXJhbXMgPSBhcnJheSgndGFiX21lc3NhZ2UnPT4gJ21hcmtlcmFkZGVkJywgJ2FjdGl2ZV90YWInID0+ICdtYXJrZXJzJyk7CgkJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgJHBhcmFtcyk7Cgl9Cn0KaWYgKCRlcnJvcmZuZCkgewoJZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkbWVzc2FnZSk7Cn0KCi8vIFByZXBhcmUgZGVmYXVsdCBzZXR0aW5ncwpzd2l0Y2ggKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdkZWZhdWx0bWFwdHlwZScpKSB7CgljYXNlICdoeWJyaWQnOgoJCSRzbWFydHktPmFzc2lnbignbWFwdHlwZScsICdIWUJSSUQnKTsKCQlicmVhazsKCWNhc2UgJ3NhdGVsbGl0ZSc6CgkJJHNtYXJ0eS0+YXNzaWduKCdtYXB0eXBlJywgJ1NBVEVMTElURScpOwoJCWJyZWFrOwoJY2FzZSAndGVycmFpbic6CgkJJHNtYXJ0eS0+YXNzaWduKCdtYXB0eXBlJywgJ1RFUlJBSU4nKTsKCQlicmVhazsKCWRlZmF1bHQ6CgkJJHNtYXJ0eS0+YXNzaWduKCdtYXB0eXBlJywgJ1JPQURNQVAnKTsKCQlicmVhazsKfQokc21hcnR5LT5hc3NpZ24oJ3VzZWRfbGF0JywgMCk7CiRzbWFydHktPmFzc2lnbigndXNlZF9sb24nLCAwKTsKJHNtYXJ0eS0+YXNzaWduKCd1c2VkX2ljb24nLCAwKTsKCi8vIFByZXBhcmUgYSBsaXN0IG9mIG1hcHMKJG1hcGxpc3QgPSBhcnJheSgpOwokbWFwbGlzdCA9IGdvb2dsZW1hcHNfdXRpbHM6OmdldF9saXN0X21hcHMoKTsKCi8vIENoZWNrIHdoYXQgdXNlciBzZXR0aW5nIGlzIGZvciBHbG9iYWwgQ29udGVudCBCbG9jayB3eXNpd3lnCiRhbGxvd193eXNpd3lnID0gZ2V0X3ByZWZlcmVuY2UoICR1c2VyX2lkLCAnZ2NiX3d5c2l3eWcnICk7CgovLyBQcmVwYXJlIGEgbGlzdCBvZiBpY29ucwovLyBSZWFkIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWluIHRoZSBpbWFnZXMgb2YgdGhlIG1hcmtlcnMKJHBhdGggPSAnLi4nLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ3VwbG9hZHMnLkRJUkVDVE9SWV9TRVBBUkFUT1IuJHRoaXMtPmdldE5hbWUoKS5ESVJFQ1RPUllfU0VQQVJBVE9SLidtYXJrZXJzJzsKLy8gT3BlbiB0aGlzIGRpcmVjdG9yeSAKJG1hcmtlcmRpcmVjdG9yeSA9IG9wZW5kaXIoJHBhdGgpOwokaWNvbmxpc3QgPSBhcnJheSgpOwoKLy8gR2V0IGVhY2ggZW50cnkKd2hpbGUoJGZpbGUgPSByZWFkZGlyKCRtYXJrZXJkaXJlY3RvcnkpKSB7CgkkcGF0dGVybj0iKGpwZ3xwbmd8anBlZ3xnaWYpIjsKCWlmIChwcmVnX21hdGNoKCRwYXR0ZXJuLCAkZmlsZSkpIHsKCS8vaWYgKCRmaWxlICE9ICcuJyAmJiAkZmlsZSAhPSAnLi4nKSB7CgkJJGljb25saXN0Wyc8aW1nIHNyYz0iJy4kcGF0aC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRmaWxlLiciIGFsdD0iJy4kZmlsZS4nIj4nXSA9ICRmaWxlOwoJfQp9CgovLyBDbG9zZSB0aGUgZGlyZWN0b3J5CmNsb3NlZGlyKCRtYXJrZXJkaXJlY3RvcnkpOwoKI0Rpc3BsYXkgdGVtcGxhdGUKJHNtYXJ0eS0+YXNzaWduKCdzdGFydGZvcm0nLCAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwgJ2FkZG1hcmtlcicsICRyZXR1cm5pZCkpOwokc21hcnR5LT5hc3NpZ24oJ2VuZGZvcm0nLCAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9uYW1lJywgJHRoaXMtPkxhbmcoJ3RpdGxlX25hbWUnKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfbmFtZScsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnbmFtZScsICRuYW1lLCA0MCwgODAsICdjbGFzcz0iZGVmYXVsdGZvY3VzIicpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9iZWxvbmdzdG9tYXAnLCAkdGhpcy0+TGFuZygnYmVsb25nc3RvbWFwJykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X2JlbG9uZ3N0b21hcCcsICR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwgJ21hcCcsICRtYXBsaXN0LCAtMSwgJHVzZWRtYXApKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9pbmZvJywgJHRoaXMtPkxhbmcoJ3RpdGxlX2luZm8nKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfaW5mbycsICR0aGlzLT5DcmVhdGVUZXh0QXJlYSgkYWxsb3dfd3lzaXd5ZywgJGlkLCAkaW5mbywgJ2luZm8nLCAnJywgJycsICcnLCAnJywgJzgwJywgJzMnKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfYWRkcmVzcycsICR0aGlzLT5MYW5nKCdhZGRyZXNzJykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X2FkZHJlc3MnLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ2FkZHJlc3MnLCAkYWRkcmVzcywgNDAsIDI1NSkpOwovLyBQYXNzIHRoZSBpZCwgc28gaXQgY2FuIGJlIHVzZWQgaW4gdGhlIGphdmEgc2NyaXB0IG9mIHRoZSBlYXN5bG9jYXRvciAKJHNtYXJ0eS0+YXNzaWduKCdpZCcsJGlkKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9sYXQnLCAkdGhpcy0+TGFuZygnbGF0aXR1ZGUnKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfbGF0JywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdsYXQnLCAkbGF0LCA0MCwgMTAwKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfbG9uJywgJHRoaXMtPkxhbmcoJ2xvbmdpdHVkZScpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9sb24nLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ2xvbicsICRsb24sIDQwLCAxMDApKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9pY29uJywgJHRoaXMtPkxhbmcoJ21hcmtlcmljb24nKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfaWNvbicsICR0aGlzLT5DcmVhdGVJbnB1dFJhZGlvR3JvdXAgKCRpZCwgJ2ljb24nLCAkaWNvbmxpc3QsIC0xLCAnJywgJyZuYnNwOycpKTsKJHNtYXJ0eS0+YXNzaWduKCdsb2NhdGlvbnByZWNpc2lvbicsICAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbG9jYXRpb25wcmVjaXNpb24nLCA3KSk7CgovLyBQcmVwYXJlIHRoZSBzZXR0aW5ncyBmb3IgdGhlIGVhc3lsb2NhdG9yCiRzbWFydHktPmFzc2lnbigndGl0bGVfZWFzeWxvY2F0b3InLCAkdGhpcy0+TGFuZygndGl0bGVfZWFzeWxvY2F0b3InKSk7CiRzbWFydHktPmFzc2lnbignZWFzeWxvY2F0b3JsYXQnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZWFzeWxvY2F0b3JsYXQnLCA0NCkpOwokc21hcnR5LT5hc3NpZ24oJ2Vhc3lsb2NhdG9ybG9uJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Vhc3lsb2NhdG9ybG9uJywgLTYzKSk7CiRzbWFydHktPmFzc2lnbignZWFzeWxvY2F0b3JsZXZlbCcsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxldmVsJyksIDEpOwokc21hcnR5LT5hc3NpZ24oJ2Vhc3lsb2NhdG9yY3Vyc29yJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Vhc3lsb2NhdG9yY3Vyc29yJywgJ2Nyb3NzaGFpcicpKTsKCiRzbWFydHktPmFzc2lnbignaGlkZGVuJywgJycpOwokc21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXQnLCBsYW5nKCdzdWJtaXQnKSkpOwokc21hcnR5LT5hc3NpZ24oJ2NhbmNlbCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdjYW5jZWwnLCBsYW5nKCdjYW5jZWwnKSkpOwplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2VkaXRtYXJrZXIudHBsJyk7Cj8+]]></data>
	</file>
	<file>
	  <filename>/action.addpolyline.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyBHb29nbGVNYXBzIChpZiB5b3UgZG9uJ3Qga25vdyB0aGlzIG9uZSA6LSkgR29vZ2xlIGl0ISkuIEEgbW9kdWxlIGZvciBDTVMgLSBDTVMgTWFkZSBTaW1wbGUKIyBDb3B5cmlnaHQgKGMpIDIwMTEgYnkgRHVrZXRvd24gCiMKIyBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIGFkZGluZyBhIHBvbHlsaW5lCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMgVGhlIG1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL2dvb2dsZW1hcHMKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgokZ0NtcyA9IGNtc21zKCk7IGlmKCAhaXNfb2JqZWN0KCRnQ21zKSApIGV4aXQ7CiRkYiA9IGNtc21zKCktPkdldERiKCk7CgokdXNlcl9pZCA9ICcnOwppZiAoZ2V0X3VzZXJpZCgpICkgewoJJHVzZXJfaWQgPSBnZXRfdXNlcmlkKCk7Cn0KCmlmICghJHRoaXMtPkNoZWNrUGVybWlzc2lvbignVXNlIEdvb2dsZU1hcHMnKSkKewoJZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJywgYXJyYXkoJ1VzZSBHb29nbGVNYXBzJykpKTsKCXJldHVybjsKfQoKaWYgKGlzc2V0KCRwYXJhbXNbJ2NhbmNlbCddKSkKewoJJHBhcmFtcyA9IGFycmF5KCdhY3RpdmVfdGFiJyA9PiAncG9seWxpbmVzJyk7CgkkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCAkcGFyYW1zKTsKfQoKJG5hbWUgPSAnJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ25hbWUnXSkpCnsKCSRuYW1lID0gJHBhcmFtc1snbmFtZSddOwp9CiR1c2VkbWFwID0gJyc7CmlmIChpc3NldCgkcGFyYW1zWydtYXAnXSkpIHsKCSR1c2VkbWFwID0gJHBhcmFtc1snbWFwJ107Cn0KCiRzdHJva2Vjb2xvciA9ICcnOwppZiAoaXNzZXQoJHBhcmFtc1snc3Ryb2tlY29sb3InXSkpIHsKCSRzdHJva2Vjb2xvciA9ICRwYXJhbXNbJ3N0cm9rZWNvbG9yJ107Cn0KCiRzdHJva2VvcGFjaXR5ID0gJzEuMCc7CmlmIChpc3NldCgkcGFyYW1zWydzdHJva2VvcGFjaXR5J10pKSB7Cgkkc3Ryb2tlb3BhY2l0eSA9ICRwYXJhbXNbJ3N0cm9rZW9wYWNpdHknXTsKfQokc3Ryb2tld2VpZ2h0ID0gJzInOwppZiAoaXNzZXQoJHBhcmFtc1snc3Ryb2tld2VpZ2h0J10pKSB7Cgkkc3Ryb2tld2VpZ2h0ID0gJHBhcmFtc1snc3Ryb2tld2VpZ2h0J107Cn0KCiRsYXQgPSAnJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ2xhdCddKSkgewoJJGxhdCA9ICRwYXJhbXNbJ2xhdCddOwp9CmVsc2UgewoJJGVhc3lsb2NhdG9ybGF0ID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Vhc3lsb2NhdG9ybGF0JywgNDQpOwp9CgokbG9uID0gJyc7CmlmIChpc3NldCgkcGFyYW1zWydsb24nXSkpIHsKCSRsb24gPSAkcGFyYW1zWydsb24nXTsKfQplbHNlIHsKCSRlYXN5bG9jYXRvcmxvbiA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxvbicsIC02Myk7Cn0KCiRpY29uID0gJyc7CmlmIChpc3NldCgkcGFyYW1zWydpY29uJ10pKSB7CgkkaWNvbiA9ICRwYXJhbXNbJ2ljb24nXTsKfQokdXNlZGRpc3RhbmNldW9tID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Rpc3RhbmNldW9tJywgJ0snKTsKaWYgKGlzc2V0KCRwYXJhbXNbJ3VzZWRkaXN0YW5jZXVvbSddKSkgewoJJHVzZWRkaXN0YW5jZXVvbSA9ICRwYXJhbXNbJ3VzZWRkaXN0YW5jZXVvbSddOwp9CgovLyBFcnJvciBjaGVja2luZwokZXJyZm5kID0gZmFsc2U7CiRlcnJvcmZvdW5kID0gJyc7CmlmIChpc3NldCgkcGFyYW1zWydzdWJtaXQnXSkpIHsKCWlmICgkbmFtZSA9PSAnJykgewoJCSRlcnJmbmQgPSB0cnVlOwoJCSRlcnJvcmZvdW5kIC49ICR0aGlzLT5MYW5nKCdub25hbWVnaXZlbicpOwoJfQoJaWYgKCRzdHJva2VvcGFjaXR5IDwgMCB8fCAkc3Ryb2tlb3BhY2l0eSA+IDEpIHsKCQkkZXJyZm5kID0gdHJ1ZTsKCQlpZiAoJGVycm9yZm91bmQgIT0gJycpIHskZXJyb3Jmb3VuZCAuPSAnPGJyIC8+Jzt9CgkJJGVycm9yZm91bmQgLj0gJHRoaXMtPkxhbmcoJ2ludmFsaWRvcGFjaXR5Jyk7Cgl9Cn0KaWYgKGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdCddKSAmJiAkZXJyZm5kID09IGZhbHNlKSB7CgkkcGxhZGRlZCA9IGdvb2dsZW1hcHNfdXRpbHM6Omluc2VydF9wb2x5bGluZSgkdXNlZG1hcCwgJG5hbWUsICRzdHJva2Vjb2xvciwgCgkJJHN0cm9rZW9wYWNpdHksICRzdHJva2V3ZWlnaHQsIDAsICR1c2VkZGlzdGFuY2V1b20pOwoKCSRwYXJhbXMgPSBhcnJheSgndGFiX21lc3NhZ2UnPT4gJ3BvbHlsaW5lYWRkZWQnLCAnYWN0aXZlX3RhYicgPT4gJ3BvbHlsaW5lcycpOwoJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgJHBhcmFtcyk7Cn0KZWxzZSB7CglpZiAoJGVycmZuZCkgewoJCWVjaG8gJHRoaXMtPlNob3dFcnJvcnMoJGVycm9yZm91bmQpOwoJfQp9CgovLyBQcmVwYXJlIGRlZmF1bHQgc2V0dGluZ3MKc3dpdGNoICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGVmYXVsdG1hcHR5cGUnKSkgewoJY2FzZSAnaHlicmlkJzoKCQkkc21hcnR5LT5hc3NpZ24oJ21hcHR5cGUnLCAnSFlCUklEJyk7CgkJYnJlYWs7CgljYXNlICdzYXRlbGxpdGUnOgoJCSRzbWFydHktPmFzc2lnbignbWFwdHlwZScsICdTQVRFTExJVEUnKTsKCQlicmVhazsKCWNhc2UgJ3RlcnJhaW4nOgoJCSRzbWFydHktPmFzc2lnbignbWFwdHlwZScsICdURVJSQUlOJyk7CgkJYnJlYWs7CglkZWZhdWx0OgoJCSRzbWFydHktPmFzc2lnbignbWFwdHlwZScsICdST0FETUFQJyk7CgkJYnJlYWs7Cn0KJHNtYXJ0eS0+YXNzaWduKCd1c2VkX2xhdCcsIDApOwokc21hcnR5LT5hc3NpZ24oJ3VzZWRfbG9uJywgMCk7CiRzbWFydHktPmFzc2lnbigndXNlZF9pY29uJywgMCk7CgovLyBCdWlsZCBwYXRoIHRvIGNvbG9yIHNlbGVjdG9yCiRjb2xvcnNlbGVjdG9ycGF0aCA9IGNtc19qb2luX3BhdGgoJy4uJywnbW9kdWxlcycsJHRoaXMtPmdldE5hbWUoKSwndGVtcGxhdGVzJywnMjAxYS5qcycpOwokc21hcnR5LT5hc3NpZ24oJ2NvbG9yc2VsZWN0b3JwYXRoJywgJGNvbG9yc2VsZWN0b3JwYXRoKTsKCi8vIFByZXBhcmUgYSBsaXN0IG9mIG1hcHMKJG1hcGxpc3QgPSBhcnJheSgpOwokbWFwbGlzdCA9IGdvb2dsZW1hcHNfdXRpbHM6OmdldF9saXN0X21hcHMoKTsKCi8vIFByZXBhcmUgYSBsaXN0IG9mIGRpc3RhbmNlIHVvbQokZGlzdGFuY2V1b21saXN0ID0gYXJyYXkoKTsKJGRpc3RhbmNldW9tbGlzdCA9IGdvb2dsZW1hcHNfdXRpbHM6OmdldF9kaXN0YW5jZV91b20oKTsKCiNEaXNwbGF5IHRlbXBsYXRlCiRzbWFydHktPmFzc2lnbignc3RhcnRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICdhZGRwb2x5bGluZScsICRyZXR1cm5pZCkpOwokc21hcnR5LT5hc3NpZ24oJ2VuZGZvcm0nLCAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9uYW1lJywgJHRoaXMtPkxhbmcoJ3RpdGxlX25hbWUnKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfbmFtZScsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnbmFtZScsICRuYW1lLCA0MCwgODApKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9iZWxvbmdzdG9tYXAnLCAkdGhpcy0+TGFuZygnYmVsb25nc3RvbWFwJykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X2JlbG9uZ3N0b21hcCcsICR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwgJ21hcCcsICRtYXBsaXN0LCAtMSwgJHVzZWRtYXApKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9jb2xvcicsICR0aGlzLT5MYW5nKCd0aXRsZV9jb2xvcicpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9jb2xvcicsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnc3Ryb2tlY29sb3InLCAkc3Ryb2tlY29sb3IsIDcsIDcpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9zYW1wbGVjb2xvcicsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnc2FtcGxlY29sb3InLCAnJywgMSwgMSwgJ3N0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAnLiR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzdHJva2Vjb2xvcicsICcjRkZGRkZGJykuJyInKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfb3BhY2l0eScsICR0aGlzLT5MYW5nKCd0aXRsZV9vcGFjaXR5JykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X29wYWNpdHknLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ3N0cm9rZW9wYWNpdHknLCAkc3Ryb2tlb3BhY2l0eSwgMywgMykpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX3dlaWdodCcsICR0aGlzLT5MYW5nKCd0aXRsZV93ZWlnaHQnKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfd2VpZ2h0JywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdzdHJva2V3ZWlnaHQnLCAkc3Ryb2tld2VpZ2h0LCAyLCAyKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfZGlzdGFuY2V1b20nLCAkdGhpcy0+TGFuZygndGl0bGVfZGlzdGFuY2V1b20nKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfZGlzdGFuY2V1b20nLCAkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsICdkaXN0YW5jZXVvbScsICRkaXN0YW5jZXVvbWxpc3QsIC0xLCAkdXNlZGRpc3RhbmNldW9tKSk7CgovLyBQYXNzIHRoZSBpZCwgc28gaXQgY2FuIGJlIHVzZWQgaW4gdGhlIGphdmEgc2NyaXB0IG9mIHRoZSBlYXN5bG9jYXRvciAKJHNtYXJ0eS0+YXNzaWduKCdpZCcsJGlkKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9sYXQnLCAkdGhpcy0+TGFuZygnbGF0aXR1ZGUnKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfbGF0JywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdsYXQnLCAkbGF0LCA0MCwgMTAwKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfbG9uJywgJHRoaXMtPkxhbmcoJ2xvbmdpdHVkZScpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9sb24nLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ2xvbicsICRsb24sIDQwLCAxMDApKTsKCi8vIFByZXBhcmUgdGhlIHNldHRpbmdzIGZvciB0aGUgZWFzeWxvY2F0b3IKJHNtYXJ0eS0+YXNzaWduKCdlZGl0cG9seWxpbmUnLCAnMCcpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2xvY2F0aW9ucycsICR0aGlzLT5MYW5nKCd0aXRsZV9sb2NhdGlvbnMnKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfZWFzeWxvY2F0b3InLCAkdGhpcy0+TGFuZygndGl0bGVfZWFzeWxvY2F0b3InKSk7CiRzbWFydHktPmFzc2lnbignZWFzeWxvY2F0b3JsYXQnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZWFzeWxvY2F0b3JsYXQnLCA0NCkpOwokc21hcnR5LT5hc3NpZ24oJ2Vhc3lsb2NhdG9ybG9uJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Vhc3lsb2NhdG9ybG9uJywgLTYzKSk7CiRzbWFydHktPmFzc2lnbignZWFzeWxvY2F0b3JsZXZlbCcsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxldmVsJyksIDEpOwokc21hcnR5LT5hc3NpZ24oJ2Vhc3lsb2NhdG9yY3Vyc29yJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Vhc3lsb2NhdG9yY3Vyc29yJywgJ2Nyb3NzaGFpcicpKTsKCiRzbWFydHktPmFzc2lnbignaGlkZGVuJywgJycpOwokc21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXQnLCBsYW5nKCdzdWJtaXQnKSkpOwokc21hcnR5LT5hc3NpZ24oJ3N1Ym1pdGxvY2F0aW9ucycsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXRsb2NhdGlvbnMnLCBsYW5nKCdzdWJtaXQnKSkpOwokc21hcnR5LT5hc3NpZ24oJ2NhbmNlbCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdjYW5jZWwnLCBsYW5nKCdjYW5jZWwnKSkpOwplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2VkaXRwb2x5bGluZS50cGwnKTsKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.addresslookup.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyBHb29nbGVNYXBzIChpZiB5b3UgZG9uJ3Qga25vdyB0aGlzIG9uZSA6LSkgR29vZ2xlIGl0ISkuIEEgbW9kdWxlIGZvciBDTVMgLSBDTVMgTWFkZSBTaW1wbGUKIyBDb3B5cmlnaHQgKGMpIDIwMTIgYnkgRHVrZXRvd24gCiMKIyBQZXJmb3JtIGFkZHJlc3MgbG9va3VwIGFuZCByZXR1cm4KIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIyBUaGUgbW9kdWxlJ3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvZ29vZ2xlbWFwcwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiRnQ21zID0gY21zbXMoKTsgaWYoICFpc19vYmplY3QoJGdDbXMpICkgZXhpdDsKCmlmICghJHRoaXMtPkNoZWNrUGVybWlzc2lvbignVXNlIEdvb2dsZU1hcHMnKSkKewoJcmV0dXJuOwp9CgokYWRkcmVzcyA9ICcnOwppZiAoaXNzZXQoJHBhcmFtc1snYWRkcmVzcyddKSkgewoJJGFkZHJlc3MgPSAkcGFyYW1zWydhZGRyZXNzJ107CglyZXF1aXJlX29uY2UoJ2xpYicuRElSRUNUT1JZX1NFUEFSQVRPUi4nR29vZ2xlTWFwQVBJLScuJHRoaXMtPl9nb29nbGVhcGlfdmVyc2lvbi5ESVJFQ1RPUllfU0VQQVJBVE9SLidHb29nbGVNYXBBUEkuY2xhc3MucGhwJyk7CiAgICAkcXVlcnlfbWFwID0gbmV3IEdvb2dsZU1hcEFQSSgwLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgneWFob29hcHBpZCcsICcxMjM0JykpOwogICAgJHF1ZXJ5X21hcC0+c2V0TG9va3VwU2VydmljZSggJHRoaXMtPkdldFByZWZlcmVuY2UoJ2xvb2t1cHNlcnZpY2UnLCAnR09PR0xFJykgKTsKICAgICRnZW9jb2RlID0gJHF1ZXJ5X21hcC0+Z2V0R2VvY29kZSgkYWRkcmVzcyk7CgogICAgaWYoICRnZW9jb2RlID09PSBmYWxzZSApCiAgICB7CgkJJHBhcmFtc1snbGF0J10gPSAnJzsKCQkkcGFyYW1zWydsb24nXSA9ICcnOwoJCSRwYXJhbXNbJ2dlb2Vycm9yJ10gPSB0cnVlOwogICAgfQogICAgZWxzZSB7CiAgICAJJHBhcmFtc1snbGF0J10gPSAkZ2VvY29kZVsnbGF0J107CiAgICAJJHBhcmFtc1snbG9uJ10gPSAkZ2VvY29kZVsnbG9uJ107CgkJJHBhcmFtc1snZ2VvZXJyb3InXSA9IGZhbHNlOwoJfQp9CgojIFJldHVybiB0byBhZGRyZXNzIHRhYgokcGFyYW1zWydhY3RpdmVfdGFiJ10gPSAnYWRkcmVzcyc7CiR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAnJywgJHBhcmFtcyk7Cj8+]]></data>
	</file>
	<file>
	  <filename>/action.admin_import_local.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyBHb29nbGVNYXBzIChpZiB5b3UgZG9uJ3Qga25vdyB0aGlzIG9uZSA6LSkgR29vZ2xlIGl0ISkuIEEgbW9kdWxlIGZvciBDTVMgLSBDTVMgTWFkZSBTaW1wbGUKIyBDb3B5cmlnaHQgKGMpIDIwMTEgYnkgRHVrZXRvd24gCiMKIyBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIGltcG9ydGluZyBhIGZpbGUgd2l0aCBwb2ludHMgdGhhdCBmb3JtIGEgbGluZQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9nb29nbGVtYXBzCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKJGdDbXMgPSBjbXNtcygpOyBpZiggIWlzX29iamVjdCgkZ0NtcykgKSBleGl0OwoKaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdVc2UgR29vZ2xlTWFwcycpKSB7CgllY2hvICR0aGlzLT5TaG93RXJyb3JzKCR0aGlzLT5MYW5nKCdhY2Nlc3NkZW5pZWQnLCBhcnJheSgnVXNlIEdvb2dsZU1hcHMnKSkpOwoJcmV0dXJuOwp9CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX2ltcG9ydGhlbHAnLCAkdGhpcy0+TGFuZygndGl0bGVfaW1wb3J0aGVscCcpKTsKCi8vIFByZXBhcmUgYSBsaXN0IG9mIG1hcHMKJG1hcGxpc3QgPSBhcnJheSgpOwokbWFwbGlzdCA9IGdvb2dsZW1hcHNfdXRpbHM6OmdldF9saXN0X21hcHMoKTsKCi8vIFNldCBkZWZhdWx0IGNydWRlbmVzcyBmYWN0b3IKJGNydWRlbmVzcyA9IDE7Cgokc21hcnR5LT5hc3NpZ24oJ3N0YXJ0Zm9ybScsICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAnYWRtaW5faW1wb3J0X2xvY2FsZmlsZScsIAoJJHJldHVybmlkLCAncG9zdCcsICdtdWx0aXBhcnQvZm9ybS1kYXRhJykpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2ltcG9ydGZpbGUnLCAkdGhpcy0+TGFuZygndGl0bGVfaW1wb3J0ZmlsZScpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9wb2x5bGluZWZpbGUnLCAkdGhpcy0+Q3JlYXRlSW5wdXRGaWxlKCRpZCwgJ3BvbHlsaW5lZmlsZScpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9iZWxvbmdzdG9tYXAnLCAkdGhpcy0+TGFuZygnYmVsb25nc3RvbWFwJykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X2JlbG9uZ3N0b21hcCcsICR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwgJ21hcCcsICRtYXBsaXN0LCAtMSwgJHVzZWRtYXApKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9jcnVkZW5lc3MnLCAkdGhpcy0+TGFuZygndGl0bGVfY3J1ZGVuZXNzJykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X2NydWRlbmVzcycsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnY3J1ZGVuZXNzJywgJGNydWRlbmVzcywgNSwgNSkpOwoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnc3VibWl0JywgbGFuZygnc3VibWl0JykpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjYW5jZWwnLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnY2FuY2VsJywgbGFuZygnY2FuY2VsJykpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlbmRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CgplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2FkbWluX2ltcG9ydF9sb2NhbC50cGwnKTsKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.admin_import_localfile.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyBHb29nbGVNYXBzIChpZiB5b3UgZG9uJ3Qga25vdyB0aGlzIG9uZSA6LSkgR29vZ2xlIGl0ISkuIEEgbW9kdWxlIGZvciBDTVMgLSBDTVMgTWFkZSBTaW1wbGUKIyBDb3B5cmlnaHQgKGMpIDIwMTEgYnkgRHVrZXRvd24gCiMKIyBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIGltcG9ydGluZyBhIGZpbGUgd2l0aCBwb2ludHMgdGhhdCBmb3JtIGEgbGluZQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9nb29nbGVtYXBzCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKJGdDbXMgPSBjbXNtcygpOyBpZiggIWlzX29iamVjdCgkZ0NtcykgKSBleGl0OwoKaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdVc2UgR29vZ2xlTWFwcycpKSB7CgllY2hvICR0aGlzLT5TaG93RXJyb3JzKCR0aGlzLT5MYW5nKCdhY2Nlc3NkZW5pZWQnLCBhcnJheSgnVXNlIEdvb2dsZU1hcHMnKSkpOwoJcmV0dXJuOwp9CgppZiAoaXNzZXQoJHBhcmFtc1snY2FuY2VsJ10pKSB7CiAJICRwYXJhbXMgPSBhcnJheSgnYWN0aXZlX3RhYicgPT4gJ3BvbHlsaW5lcycpOwoJICR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICRwYXJhbXMpOwp9CgovLyBQcmVwYXJlIHNldHRpbmdzIGZvciB0aGUgcG9seWxpbmUKaWYgKGlzc2V0KCRwYXJhbXNbJ21hcCddKSkgeyAkbWFwX2lkID0gJHBhcmFtc1snbWFwJ107IH0KJHN0cm9rZWNvbG9yID0gJyMwMDAwMDAnOwppZiAoaXNzZXQoJHBhcmFtc1snc3Ryb2tlY29sb3InXSkpIHsKCSRzdHJva2Vjb2xvciA9ICRwYXJhbXNbJ3N0cm9rZWNvbG9yJ107Cn0KJHN0cm9rZW9wYWNpdHkgPSAnMS4wJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ3N0cm9rZW9wYWNpdHknXSkpIHsKCSRzdHJva2VvcGFjaXR5ID0gJHBhcmFtc1snc3Ryb2tlb3BhY2l0eSddOwp9CiRzdHJva2V3ZWlnaHQgPSAnMic7CmlmIChpc3NldCgkcGFyYW1zWydzdHJva2V3ZWlnaHQnXSkpIHsKCSRzdHJva2V3ZWlnaHQgPSAkcGFyYW1zWydzdHJva2V3ZWlnaHQnXTsKfQokbmFtZSA9ICR0aGlzLT5MYW5nKCdpbXBvcnRuZXduYW1lJyk7CmlmIChpc3NldCgkcGFyYW1zWyduYW1lJ10pKSB7CgkkbmFtZSA9ICRwYXJhbXNbJ25hbWUnXTsKfQovLyBUbyBvYnRhaW4gYSBtb3JlIGNydWRlIGxpbmUsIGl0IGhlbHBzIHRvIHNraXAgZ2VuZXJhdGluZyBhIHBhcnQKLy8gZXZlcnkgbm93IGFuZCB0aGVuLiBUaGlzIGlzIGRvbmUgYnkgdGhlIGZpbHRlci4gVGhlIGxvd2VyIHRoZSAKLy8gbnVtYmVyIHRoZSBmaW5lciB0aGUgbGluZSBwcmVwYXJlZAokY3J1ZGVuZXNzID0gMTsKaWYgKGlzc2V0KCRwYXJhbXNbJ2NydWRlbmVzcyddKSkgJGNydWRlbmVzcyA9ICRwYXJhbXNbJ2NydWRlbmVzcyddOwppZiAoaW50dmFsKCRjcnVkZW5lc3MpIDw9IDApICRjcnVkZW5lc3MgPSAxOwoKJGVycmRlc2MgPSAnJzsKLy8gRG9lcyB0aGUgZmlsZSBleGlzdAppZiAoIWlzc2V0KCRfRklMRVNbJGlkLidwb2x5bGluZWZpbGUnXSkpIHsKCSRlcnJkZXNjID0gJHRoaXMtPkxhbmcoJ2ltcG9ydGZpbGVub3Rmb3VuZCcsICRfRklMRVNbJGlkLidwb2x5bGluZWZpbGUnXSk7CgkkcGFyYW1zID0gYXJyYXkoJ3RhYl9lcnJvcic9PiAkZXJyZGVzYywgJ2FjdGl2ZV90YWInID0+ICdwb2x5bGluZXMnKTsKfQplbHNlIHsKCSRmaWxlbmFtZSA9ICRfRklMRVNbJGlkLidwb2x5bGluZWZpbGUnXVsndG1wX25hbWUnXTsKCSRoYW5kbGUgPSBmb3BlbigkZmlsZW5hbWUsICJyIik7CglpZiAoJGhhbmRsZSA9PT0gZmFsc2UpCgl7CgkJZWNobyAnPHA+Jy4kdGhpcy0+TGFuZygnZXJyb3JfY2FudG9wZW5maWxlJykuJzwvcD4nOwoJfQoJJHBsYXJyYXkgPSBhcnJheSgpOwoJJHBsYXJyYXkgPSAgZ29vZ2xlbWFwc191dGlsczo6eG1sMmFycmF5KGZyZWFkKCRoYW5kbGUsIGZpbGVzaXplKCRmaWxlbmFtZSkpLCAxLCAnYXR0cmlidXRlJyk7CglmY2xvc2UoJGhhbmRsZSk7CgkJCgkvLyBJbmZvcm1hdGlvbiBpcyBub3cgYXZhaWxhYmxlIGluIGFycmF5LiBMZXQncyBwcm9jZXNzIGl0IGRlcGVuZGluZyBvbiB0eXBlIHVzZWQuCgoJLy8gUmVhZCB0aHJ1IHRoZSBwb2ludHMgb2YgdGhlIGxpbmUgYW5kIGNyZWF0ZSBwb2x5bGluZSBwYXJ0cyBvZiB0aGVtCglpZiAoY291bnQoJHBsYXJyYXlbJ2dweCddWyd3cHQnXSkgPiAwKSB7CgkJaWYgKCRwbGFycmF5WydncHgnXVsnbmFtZSddWyd2YWx1ZSddICE9ICcnKSB7CgkJCSRuYW1lID0gJHBsYXJyYXlbJ2dweCddWyduYW1lJ11bJ3ZhbHVlJ107CgkJfQoJCSRwb2x5bGluZV9pZCA9IGdvb2dsZW1hcHNfdXRpbHM6Omluc2VydF9wb2x5bGluZSgkbWFwX2lkLCAkbmFtZSk7IAoJCSRjYyA9IDE7CgkJLy8gQSBsaXN0IG9mIHdheXBvaW50cyBhcmUgdXNlZAoJCSRjb3VudHBhcnRzID0gY291bnQoJHBsYXJyYXlbJ2dweCddWyd3cHQnXSk7CgkJJHNlcWluY3JlbWVudCA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzZXFpbmNyZW1lbnQnLCAxMCk7CgkJJHNlcSA9ICRzZXFpbmNyZW1lbnQ7CgkJZm9yICgkaSA9IDA7ICRpIDwgJGNvdW50cGFydHM7ICRpKyspIHsKCQkJaWYgKCgkY2MgJSAkY3J1ZGVuZXNzKSA9PSAwKSB7CgkJCQkkbGF0ID0gJHBsYXJyYXlbJ2dweCddWyd3cHQnXVskaV1bJ2F0dHInXVsnbGF0J107CgkJCQkkbG9uID0gJHBsYXJyYXlbJ2dweCddWyd3cHQnXVskaV1bJ2F0dHInXVsnbG9uJ107CgkJCQkkZGVzY3JpcHRpb24gPSAkcGxhcnJheVsnZ3B4J11bJ3dwdCddWyRpXVsnZGVzYyddWyd2YWx1ZSddOwoJCQkJLy8gQWRkIHRoZSBwb2x5cGFydAoJCQkJJHBwYWRkZWQgPSBnb29nbGVtYXBzX3V0aWxzOjppbnNlcnRfcG9seWxpbmVfcGFydCgkcG9seWxpbmVfaWQsICRzZXEsIAoJCQkJCSRkZXNjcmlwdGlvbiwgJGxhdCwgJGxvbik7CgkJCQlpZiAoJHBwYWRkZWQpIHsKCQkJCQkkc2VxICs9ICRzZXFpbmNyZW1lbnQ7CgkJCQl9CgkJCX0KCQkJJGNjKys7CgkJfQoJfQoJCglpZiAoY291bnQoJHBsYXJyYXlbJ2dweCddWyd0cmsnXSkgPiAwKSB7CgkJJHBvbHlsaW5lX2lkID0gZ29vZ2xlbWFwc191dGlsczo6aW5zZXJ0X3BvbHlsaW5lKCRtYXBfaWQsICRuYW1lKTsgCgkJLy8gQSBsaXN0IG9mIHRyYWNrcyBpcyBzdXBwbGllZAoJCSRjb3VudHBhcnRzID0gY291bnQoJHBsYXJyYXlbJ2dweCddWyd0cmsnXVsndHJrc2VnJ11bJ3Rya3B0J10pOwoJCS8vIElmIG11bHRpcGxlIHRyYWNraW5nIHNlZ21lbnRzLCB0aGUgcHJldmlvdXMgY291bnQgaXMgemVybwoJCWlmICgkY291bnRwYXJ0cyA9PSAwKSB7CgkJCSRjb3VudHNlZyA9IGNvdW50KCRwbGFycmF5WydncHgnXVsndHJrJ11bJ3Rya3NlZyddKTsKCQl9CgkJaWYgKCRwbGFycmF5WydncHgnXVsndHJrJ11bJ25hbWUnXVsndmFsdWUnXSAhPSAnJykgewoJCQkkcXVlcnkgPSAnVVBEQVRFICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfZ29vZ2xlbWFwc19wb2x5bGluZXMgU0VUCgkJCQluYW1lID0gPwoJCQkJV0hFUkUgcG9seWxpbmVfaWQgPSA/JzsKCQkJJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHBsYXJyYXlbJ2dweCddWyd0cmsnXVsnbmFtZSddWyd2YWx1ZSddLCAkcG9seWxpbmVfaWQpKTsKCQl9CgkJJHNlcWluY3JlbWVudCA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzZXFpbmNyZW1lbnQnLCAxMCk7CgkJJHNlcSA9ICRzZXFpbmNyZW1lbnQ7CgkJJGRlc2NyaXB0aW9uID0gJyc7CgkJJGNjID0gMTsKCQlpZiAoJGNvdW50cGFydHMgPiAwKSB7CgkJCWZvciAoJGkgPSAwOyAkaSA8ICRjb3VudHBhcnRzOyAkaSsrKSB7CgkJCQlpZiAoKCRjYyAlICRjcnVkZW5lc3MpID09IDApIHsKCQkJCQkkbGF0ID0gJHBsYXJyYXlbJ2dweCddWyd0cmsnXVsndHJrc2VnJ11bJ3Rya3B0J11bJGldWydhdHRyJ11bJ2xhdCddOwoJCQkJCSRsb24gPSAkcGxhcnJheVsnZ3B4J11bJ3RyayddWyd0cmtzZWcnXVsndHJrcHQnXVskaV1bJ2F0dHInXVsnbG9uJ107CgkJCQkJLy8gQWRkIHRoZSBwb2x5cGFydAoJCQkJCSRwcGFkZGVkID0gZ29vZ2xlbWFwc191dGlsczo6aW5zZXJ0X3BvbHlsaW5lX3BhcnQoJHBvbHlsaW5lX2lkLCAkc2VxLCAKCQkJCQkJJGRlc2NyaXB0aW9uLCAkbGF0LCAkbG9uKTsKCQkJCQlpZiAoJHBwYWRkZWQpIHsKCQkJCQkJJHNlcSArPSAkc2VxaW5jcmVtZW50OwoJCQkJCX0KCQkJCX0KCQkJCSRjYysrOwoJCQl9CgkJfQoJCWVsc2UgewoJCQkvLyBNdWx0aXBsZSBzZWdtZW50cywgc28gYnVpbGQgcGFydHMgcGVyIHNlZ21lbnQKCQkJZm9yICgkcyA9IDA7ICRzIDwgJGNvdW50c2VnOyAkcysrKSB7CgkJCQkkY291bnRwYXJ0cyA9IGNvdW50KCRwbGFycmF5WydncHgnXVsndHJrJ11bJ3Rya3NlZyddWyRzXVsndHJrcHQnXSk7CgkJCQlmb3IgKCRpID0gMDsgJGkgPCAkY291bnRwYXJ0czsgJGkrKykgewoJCQkJCWlmICgoJGNjICUgJGNydWRlbmVzcykgPT0gMCkgewoJCQkJCQkkbGF0ID0gJHBsYXJyYXlbJ2dweCddWyd0cmsnXVsndHJrc2VnJ11bJHNdWyd0cmtwdCddWyRpXVsnYXR0ciddWydsYXQnXTsKCQkJCQkJJGxvbiA9ICRwbGFycmF5WydncHgnXVsndHJrJ11bJ3Rya3NlZyddWyRzXVsndHJrcHQnXVskaV1bJ2F0dHInXVsnbG9uJ107CgkJCQkJCS8vIEFkZCB0aGUgcG9seXBhcnQKCQkJCQkJJHBwYWRkZWQgPSBnb29nbGVtYXBzX3V0aWxzOjppbnNlcnRfcG9seWxpbmVfcGFydCgkcG9seWxpbmVfaWQsICRzZXEsIAoJCQkJCQkJJGRlc2NyaXB0aW9uLCAkbGF0LCAkbG9uKTsKCQkJCQkJaWYgKCRwcGFkZGVkKSB7CgkJCQkJCQkkc2VxICs9ICRzZXFpbmNyZW1lbnQ7CgkJCQkJCX0KCQkJCQl9CgkJCQkJJGNjKys7CgkJCQl9CgkJCX0KCQl9Cgl9CglpZiAoY291bnQoJHBsYXJyYXlbJ2dweCddWydydGUnXSkgPiAwKSB7CgkJJHBvbHlsaW5lX2lkID0gZ29vZ2xlbWFwc191dGlsczo6aW5zZXJ0X3BvbHlsaW5lKCRtYXBfaWQsICRuYW1lKTsgCgkJJGNjID0gMTsKCQkvLyBBIGxpc3Qgb2Ygcm91dGVzIGlzIHN1cHBsaWVkCgkJaWYgKCRwbGFycmF5WydncHgnXVsncnRlJ11bJ2Rlc2MnXVsndmFsdWUnXSAhPSAnJykgewoJCQkkcXVlcnkgPSAnVVBEQVRFICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfZ29vZ2xlbWFwc19wb2x5bGluZXMgU0VUCgkJCQluYW1lID0gPwoJCQkJV0hFUkUgcG9seWxpbmVfaWQgPSA/JzsKCQkJJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHBsYXJyYXlbJ2dweCddWydydGUnXVsnZGVzYyddWyd2YWx1ZSddLCAkcG9seWxpbmVfaWQpKTsKCQl9CgoJCSRjb3VudHBhcnRzID0gY291bnQoJHBsYXJyYXlbJ2dweCddWydydGUnXVsncnRlcHQnXSk7CgkJJHNlcWluY3JlbWVudCA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzZXFpbmNyZW1lbnQnLCAxMCk7CgkJJHNlcSA9ICRzZXFpbmNyZW1lbnQ7CgkJZm9yICgkaSA9IDA7ICRpIDwgJGNvdW50cGFydHM7ICRpKyspIHsKCQkJaWYgKCgkY2MgJSAkY3J1ZGVuZXNzKSA9PSAwKSB7CgkJCQkkbGF0ID0gJHBsYXJyYXlbJ2dweCddWydydGUnXVsncnRlcHQnXVskaV1bJ2F0dHInXVsnbGF0J107CgkJCQkkbG9uID0gJHBsYXJyYXlbJ2dweCddWydydGUnXVsncnRlcHQnXVskaV1bJ2F0dHInXVsnbG9uJ107CgkJCQkkZGVzY3JpcHRpb24gPSAkcGxhcnJheVsnZ3B4J11bJ3J0ZSddWydydGVwdCddWyRpXVsnZGVzYyddWyd2YWx1ZSddOwoJCQkJLy8gQWRkIHRoZSBwb2x5cGFydAoJCQkJJHBwYWRkZWQgPSBnb29nbGVtYXBzX3V0aWxzOjppbnNlcnRfcG9seWxpbmVfcGFydCgkcG9seWxpbmVfaWQsICRzZXEsIAoJCQkJCSRkZXNjcmlwdGlvbiwgJGxhdCwgJGxvbik7CgkJCQlpZiAoJHBwYWRkZWQpIHsKCQkJCQkkc2VxICs9ICRzZXFpbmNyZW1lbnQ7CgkJCQl9CgkJCX0KCQkJJGNjKys7CgkJfQoJfQoJaWYgKCRlcnJkZXNjID09ICcnKSB7CgkJJHBhcmFtcyA9IGFycmF5KCd0YWJfbWVzc2FnZSc9PiAnaW1wb3J0cG9seWxpbmVzdWNjZWVkZWQnLCAnYWN0aXZlX3RhYicgPT4gJ3BvbHlsaW5lcycpOwoJfQoJZWxzZSB7CgkJJHBhcmFtcyA9IGFycmF5KCd0YWJfZXJyb3InPT4gJGVycmRlc2MsICdhY3RpdmVfdGFiJyA9PiAncG9seWxpbmVzJyk7Cgl9Cgp9CiR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAnJywgJHBhcmFtcyk7Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIERpc3BsYXlNb2R1bGVPdXRwdXQoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsICRtZXNzYWdlKQogICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQogICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBzaW1wbGUgbWV0aG9kIHRvIGRpc3BsYXkKICAgc29tZXRoaW5nIHdoZXJlIGEgcGFnZSBvciB0ZW1wbGF0ZSBoYXMgYSB0YWcgY2FsbGluZwogICB0aGlzIG1vZHVsZS4KICAgCiAgIE5vdGUgdGhhdCBpdCB1c2VzIGEgdGVtcGxhdGUsIGFuZCBpcyB0aHVzIHZlcnkgcG93ZXJmdWwsCiAgIGV2ZW4gaWYgaXQncyBzaW1wbGUuCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCiRnQ21zID0gY21zbXMoKTsgaWYoICFpc19vYmplY3QoJGdDbXMpICkgZXhpdDsKCiNBdm9pZCBmbG9hdCBwcm9ibGVtIGluIGxvY2FsZQokY3VycmVudExvY2FsZSA9IHNldGxvY2FsZShMQ19BTEwsIDApOwpzZXRsb2NhbGUoTENfQUxMLCAnZW5fVVMnKTsKCiRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIuIGNtc19kYl9wcmVmaXgoKSAuIm1vZHVsZV9nb29nbGVtYXBzX21hcHMgCglXSEVSRSBuYW1lIExJS0UgJyIuICRwYXJhbXNbJ21hcCddLiAiJyBMSU1JVCAxIjsKJG1hcF9kYXRhID0gYXJyYXkoKTsKJG1hcF9kYXRhID0mICRkYi0+R2V0Um93KCRxdWVyeSk7CgppZighaXNzZXQoJG1hcF9kYXRhWydtYXBfaWQnXSkpIHsKICAkc21hcnR5LT5hc3NpZ24oJ2Vycm9yJywgJHRoaXMtPkxhbmcoJ25vbWFwJykpOwogICRzbWFydHktPmFzc2lnbigndGl0bGUnLCAkdGhpcy0+TGFuZygnZXJyb3InKSk7CiAgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdlcnJvci50cGwnKTsKICByZXR1cm47Cn0KJG1hcF9pZCA9ICRtYXBfZGF0YVsnbWFwX2lkJ107CgovLyBOb3cgdGhhdCBhIGNoZWNrIGlzIGRvbmUgaWYgYWxsIHNlZW1zIG9rLCBoYW5kbGUgdGhlIG92ZXJyaWRlcyB0aGF0IGFyZSBwYXNzZWQKaWYgKGlzc2V0KCRwYXJhbXNbJ3dpZHRoJ10pKSAkbWFwX2RhdGFbJ3dpZHRoJ10gPSAkcGFyYW1zWyd3aWR0aCddOwppZiAoaXNzZXQoJHBhcmFtc1snaGVpZ2h0J10pKSAkbWFwX2RhdGFbJ2hlaWdodCddID0gJHBhcmFtc1snaGVpZ2h0J107CmlmIChpc3NldCgkcGFyYW1zWydjb250cm9scyddKSkgewkvLyBUcmllZCB0byB1c2UgaW50dmFsKCRwYXJhbXNbJ2NvbnRyb2xzJ10pLCBidXQgc21hcnR5IHN0aWxsIGZlbGwgb3ZlciB0aGF0CgkkcGFyYW1zWydjb250cm9scyddID09ICcxJyA/ICRtYXBfZGF0YVsnY29udHJvbHMnXSA9IDEgOiAkbWFwX2RhdGFbJ2NvbnRyb2xzJ10gPSAwOwp9CmlmIChpc3NldCgkcGFyYW1zWyd0eXBlX2NvbnRyb2xzJ10pKSB7CgkkcGFyYW1zWyd0eXBlX2NvbnRyb2xzJ10gPT0gJzEnID8gJG1hcF9kYXRhWyd0eXBlX2NvbnRyb2xzJ10gPSAxIDogJG1hcF9kYXRhWyd0eXBlX2NvbnRyb2xzJ10gPSAwOwp9CmlmIChpc3NldCgkcGFyYW1zWyd6b29tJ10pKSAkbWFwX2RhdGFbJ3pvb20nXSA9ICRwYXJhbXNbJ3pvb20nXTsKaWYgKGlzc2V0KCRwYXJhbXNbJ2NvbnRyb2xzX3NpemUnXSkpICRtYXBfZGF0YVsnY29udHJvbHNfc2l6ZSddID0gJHBhcmFtc1snY29udHJvbHNfc2l6ZSddOwppZiAoaXNzZXQoJHBhcmFtc1sndHlwZSddKSkgJG1hcF9kYXRhWyd0eXBlJ10gPSAkcGFyYW1zWyd0eXBlJ107CmlmIChpc3NldCgkcGFyYW1zWydzaWRlYmFyJ10pKSB7CgkkcGFyYW1zWydzaWRlYmFyJ10gPT0gJzEnID8gJG1hcF9kYXRhWydzaWRlYmFyJ10gPSAxIDogJG1hcF9kYXRhWydzaWRlYmFyJ10gPSAwOwp9CmlmIChpc3NldCgkcGFyYW1zWydkaXJlY3Rpb25zJ10pKSB7CgkkcGFyYW1zWydkaXJlY3Rpb25zJ10gPT0gJzEnID8gJG1hcF9kYXRhWydkaXJlY3Rpb25zJ10gPSAxIDogJG1hcF9kYXRhWydkaXJlY3Rpb25zJ10gPSAwOwp9CmlmIChpc3NldCgkcGFyYW1zWyd6b29tX3Njcm9sbHdoZWVsJ10pKSB7CgkkcGFyYW1zWyd6b29tX3Njcm9sbHdoZWVsJ10gPT0gJzEnID8gJG1hcF9kYXRhWyd6b29tX3Njcm9sbHdoZWVsJ10gPSAxIDogJG1hcF9kYXRhWyd6b29tX3Njcm9sbHdoZWVsJ10gPSAwOwp9CmlmIChpc3NldCgkcGFyYW1zWydwYW5fY29udHJvbCddKSkgewoJJHBhcmFtc1sncGFuX2NvbnRyb2wnXSA9PSAnMScgPyAkbWFwX2RhdGFbJ3Bhbl9jb250cm9sJ10gPSAxIDogJG1hcF9kYXRhWydwYW5fY29udHJvbCddID0gMDsKfQppZiAoaXNzZXQoJHBhcmFtc1snem9vbV9lbmNvbXBhc3MnXSkpIHsKCSRwYXJhbXNbJ3pvb21fZW5jb21wYXNzJ10gPT0gJzEnID8gJG1hcF9kYXRhWyd6b29tX2VuY29tcGFzcyddID0gMSA6ICRtYXBfZGF0YVsnem9vbV9lbmNvbXBhc3MnXSA9IDA7Cn0KaWYgKGlzc2V0KCRwYXJhbXNbJ3NjYWxlX2NvbnRyb2wnXSkpIHsKCSRwYXJhbXNbJ3NjYWxlX2NvbnRyb2wnXSA9PSAnMScgPyAkbWFwX2RhdGFbJ3NjYWxlX2NvbnRyb2wnXSA9IDEgOiAkbWFwX2RhdGFbJ3NjYWxlX2NvbnRyb2wnXSA9IDA7Cn0KaWYgKGlzc2V0KCRwYXJhbXNbJ3N0cmVldHZpZXcnXSkpIHsKCSRwYXJhbXNbJ3N0cmVldHZpZXcnXSA9PSAnMScgPyAkbWFwX2RhdGFbJ3N0cmVldFZpZXdDb250cm9sJ10gPSAxIDogJG1hcF9kYXRhWydzdHJlZXRWaWV3Q29udHJvbCddID0gMDsKfQppZiAoaXNzZXQoJHBhcmFtc1snYm91bmRzX2Z1ZGdlJ10pKSAkbWFwX2RhdGFbJ2JvdW5kc19mdWRnZSddID0gJHBhcmFtc1snYm91bmRzX2Z1ZGdlJ107CmlmIChpc3NldCgkcGFyYW1zWydpbmZvX3dpbmRvdyddKSkgewoJJHBhcmFtc1snaW5mb193aW5kb3cnXSA9PSAnMScgPyAkbWFwX2RhdGFbJ2luZm9fd2luZG93J10gPSAxIDogJG1hcF9kYXRhWydpbmZvX3dpbmRvdyddID0gMDsKfQppZiAoaXNzZXQoJHBhcmFtc1snY2VudGVybG9uJ10pKSAkbWFwX2RhdGFbJ2NlbnRlcl9sb24nXSA9ICRwYXJhbXNbJ2NlbnRlcmxvbiddOwppZiAoaXNzZXQoJHBhcmFtc1snY2VudGVybGF0J10pKSAkbWFwX2RhdGFbJ2NlbnRlcl9sYXQnXSA9ICRwYXJhbXNbJ2NlbnRlcmxhdCddOwppZiAoaXNzZXQoJHBhcmFtc1snaW5mb190cmlnZ2VyJ10pKSAkbWFwX2RhdGFbJ2luZm9fdHJpZ2dlciddID0gJHBhcmFtc1snaW5mb190cmlnZ2VyJ107CmlmIChpc3NldCgkcGFyYW1zWydsYW5ndWFnZSddKSkgJG1hcF9kYXRhWydsYW5ndWFnZSddID0gJHBhcmFtc1snbGFuZ3VhZ2UnXTsKCQpyZXF1aXJlX29uY2UoJ2xpYi9Hb29nbGVNYXBBUEktJy4kdGhpcy0+X2dvb2dsZWFwaV92ZXJzaW9uLicvR29vZ2xlTWFwQVBJLmNsYXNzLnBocCcpOwokbWFwID0gbmV3IEdvb2dsZU1hcEFQSSgkdGhpcy0+R2V0TmFtZSgpLiRtYXBfZGF0YVsnbWFwX2lkJ10sICR0aGlzLT5HZXROYW1lKCkpOwoKLy8gc2V0IHZhbHVlcyBmb3IgZGlzcGxheWluZwokbWFwLT5zZXRMb29rdXBTZXJ2aWNlKCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbG9va3Vwc2VydmljZScsICdHT09HTEUnKSApOwoKJG1hcC0+c2V0V2lkdGgoJG1hcF9kYXRhWyd3aWR0aCddKTsKJG1hcC0+c2V0SGVpZ2h0KCRtYXBfZGF0YVsnaGVpZ2h0J10pOwoKaWYgKCRtYXBfZGF0YVsnY29udHJvbHMnXSA9PSAwKSB7CiAgJG1hcC0+ZGlzYWJsZU1hcENvbnRyb2xzKCk7Cn0KaWYgKCRtYXBfZGF0YVsndHlwZV9jb250cm9scyddID09IDApIHsKICAkbWFwLT5kaXNhYmxlVHlwZUNvbnRyb2xzKCRtYXBfZGF0YVsndHlwZV9jb250cm9scyddKTsKfQppZiAoJG1hcF9kYXRhWydwYW5fY29udHJvbCddID09IDEpIHsKICAkbWFwLT5lbmFibGVQYW5Db250cm9sKCRtYXBfZGF0YVsncGFuX2NvbnRyb2wnXSk7Cn0KaWYgKCRtYXBfZGF0YVsnc3RyZWV0Vmlld0NvbnRyb2wnXSA9PSAxKSB7CiAgJG1hcC0+ZW5hYmxlU3RyZWV0Vmlld0NvbnRyb2woJG1hcF9kYXRhWydzdHJlZXRWaWV3Q29udHJvbCddKTsKfQoKJG1hcC0+c2V0Wm9vbUxldmVsKCRtYXBfZGF0YVsnem9vbSddKTsKJG1hcC0+c2V0Q29udHJvbFNpemUoJG1hcF9kYXRhWydjb250cm9sc19zaXplJ10pOwoKJG1hcC0+c2V0TWFwVHlwZSgkbWFwX2RhdGFbJ3R5cGUnXSk7CgovLyBub3QgaW4gdnMgMy4wICRtYXAtPnNldExhbmd1YWdlKCRtYXBfZGF0YVsnbGFuZ3VhZ2UnXSk7CgppZiAoJG1hcF9kYXRhWydzaWRlYmFyJ10gPT0gMCkgewogICRtYXAtPmRpc2FibGVTaWRlYmFyKCk7Cn0KCmlmICgkbWFwX2RhdGFbJ2RpcmVjdGlvbnMnXSA9PSAwKSB7CiAgJG1hcC0+ZGlzYWJsZURpcmVjdGlvbnMoKTsKfQoKLyogbm90IGluIHZzIDMuMAppZigkbWFwX2RhdGFbJ3pvb21zY3JvbGx3aGVlbCddID09IDApIHsKICAkbWFwLT5kaXNhYmxlWm9vbVNjcm9sbFdoZWVsKCk7Cn0KZWxzZQp7CiAgJG1hcC0+ZW5hYmxlWm9vbVNjcm9sbFdoZWVsKCk7Cn0KKi8KCmlmKCRtYXBfZGF0YVsnem9vbV9lbmNvbXBhc3MnXSA9PSAwKSB7CiAgJG1hcC0+ZGlzYWJsZVpvb21FbmNvbXBhc3MoKTsKfQoKaWYgKCRtYXBfZGF0YVsnc2NhbGVfY29udHJvbCddID09IDApIHsKICAkbWFwLT5kaXNhYmxlU2NhbGVDb250cm9sKCk7Cn0KCiRtYXAtPnNldEJvdW5kc0Z1ZGdlKCRtYXBfZGF0YVsnYm91bmRzX2Z1ZGdlJ10pOwoKaWYoJG1hcF9kYXRhWydpbmZvX3dpbmRvdyddID09IDApIHsKICAkbWFwLT5kaXNhYmxlSW5mb1dpbmRvdygpOwp9CgokbWFwLT5zZXRJbmZvV2luZG93VHJpZ2dlcigkbWFwX2RhdGFbJ2luZm9fdHJpZ2dlciddKTsKCi8vIGdldCBtYXJrZXJzIGZvciB0aGlzIG1hcAokcXVlcnkgPSAiU0VMRUNUICogRlJPTSAiLiBjbXNfZGJfcHJlZml4KCkgLiJtb2R1bGVfZ29vZ2xlbWFwc19tYXJrZXJzIAoJV0hFUkUgbWFwID0gJyIuICRtYXBfZGF0YVsnbWFwX2lkJ10gLiInIjsKJGRicmVzdWx0ID0mICRkYi0+RXhlY3V0ZSgkcXVlcnkpOwoKJGVycm9yID0gJyc7CndoaWxlICgkZGJyZXN1bHQgJiYgJG1hcF9tYXJrZXIgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpIHsKICAKICAkbGF0ID0gJyc7CiAgJGxvbiA9ICcnOwogIAogIGlmKCRtYXBfbWFya2VyWydsYXQnXSA9PSAnJyAmJiAkbWFwX21hcmtlclsnbGF0J10gPT0gJycpIHsKICAgIC8vZmluZCBhZGRyZXNzCiAgICAkZ2VvY29kZSA9ICcnOwogICAgaWYoJG1hcF9tYXJrZXJbJ2FkZHJlc3MnXSAhPSAnJykgewogICAgICAkZ2VvY29kZSA9ICRtYXAtPmdldEdlb2NvZGUoJG1hcF9tYXJrZXJbJ2FkZHJlc3MnXSk7CiAgICB9CiAgICAkbGF0ID0gJGdlb2NvZGVbJ2xhdCddOwogICAgJGxvbiA9ICRnZW9jb2RlWydsb24nXTsKICB9IGVsc2UgewogICAgLy8gdXNlIHByb3ZpZGVkIGxhdCBsb24KICAgICRsYXQgPSAkbWFwX21hcmtlclsnbGF0J107CiAgICAkbG9uID0gJG1hcF9tYXJrZXJbJ2xvbiddOwogIH0KICAKICBpZigkbGF0ICE9ICcnICYmICRsb24gIT0gJycpIHsKCS8vIEFkZCB0aGUgY29ycmVjdCBpY29uCgkkY29uZmlnID0gJGdDbXMtPkdldENvbmZpZygpOwogICAgLy8gdXNlIHJlbGF0aXZlIHBhdGhzIGZvciBtYXJrZXJzCiAgICAvLyB0aGlzIHdpbGwgaGVscCB3aXRoIGhvc3RzIHRoYXQgZG9udCBhbGxvdyBnZXRpbWFnZXNpemUgdG8gdXNlIGFic29sdXRlIHVybHMKICAgIC8vIDIwMTAwMTIzIC0gdHN3CglpZiAoJG1hcF9tYXJrZXJbJ2ljb24nXSAhPSAnJykgewogCQkvLyBQcmVwYXJlIHRoZSB1cmwgdG8gdGhlIG1hcmtlcgogIAkJJGljb250b3VzZSA9IGNtc19qb2luX3BhdGgoJ3VwbG9hZHMnLCR0aGlzLT5nZXROYW1lKCksJ21hcmtlcnMnLCRtYXBfbWFya2VyWydpY29uJ10pOwogIAkJCgl9IGVsc2UgewogIAkJJGljb250b3VzZSA9IGNtc19qb2luX3BhdGgoJ3VwbG9hZHMnLCR0aGlzLT5nZXROYW1lKCksJ21hcmtlcnMnLCdkZWZhdWx0LnBuZycpOwoJfQoJLy8gTm93IGNoZWNrIGlmIGEgc2hhZG93IGlzIHRvIGJlIGluY2x1ZGVkCglpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ3VzZW1hcmtlcnNoYWRvd3MnLCAwKSA9PSAwKSB7CgkJJG1hcC0+YWRkSWNvbigkaWNvbnRvdXNlKTsKCQkkc2hhZG93dG91c2UgPSAnJzsKCX0KCWVsc2UgewoJCS8vIEJ1aWxkIHRoZSBuYW1lIG9mIHRoZSBzaGFkb3cgaWNvbi4gU3BsaXQgbmFtZSBpbiBmaXJzdCBwYXJ0IGFuZCBleHRlbnNpb24KCQkkZmlsZW5hbWVzcGxpdCA9IGFycmF5KCk7CgkJJGZpbGVuYW1lc3BsaXQgPSBzdHJ0b2soJG1hcF9tYXJrZXJbJ2ljb24nXSwgJy4nKTsKCQkkc2hhZG93dG91c2UgPSBjbXNfam9pbl9wYXRoKCd1cGxvYWRzJywkdGhpcy0+Z2V0TmFtZSgpLCdtYXJrZXJzaGFkb3dzJywkZmlsZW5hbWVzcGxpdC4ncy5wbmcnKTsKICAJCS8vIENoZWNrIGlmIHRoZSBzaGFkb3cgaWNvbiBleGlzdHMKICAJCWlmICghZmlsZV9leGlzdHMoJHNoYWRvd3RvdXNlKSkgewoJCQkkc2hhZG93dG91c2UgPSBjbXNfam9pbl9wYXRoKCd1cGxvYWRzJywkdGhpcy0+Z2V0TmFtZSgpLCdtYXJrZXJzaGFkb3dzJywnZGVmYXVsdHMucG5nJyk7CgkJfQoJCSRtYXAtPmFkZEljb24oJGljb250b3VzZSwgJHNoYWRvd3RvdXNlKTsKCX0KCS8vIENoZWNrIGlmIGEgZ2xvYmFsIGNvbnRlbnQgYmxvY2sgKEdDQikgaXMgaW4gdXNlIChmZWF0dXJlIHJlcXVlc3QgNDYxNikKCSRtYXRjaGVzID0gYXJyYXkoKTsKCSRtYXRjaGZuZCA9IHByZWdfbWF0Y2hfYWxsKCcve2dsb2JhbF9jb250ZW50XHNuYW1lPVsiXCddKFx3KylbIlwnXVx9LycsICRtYXBfbWFya2VyWydpbmZvJ10sICRtYXRjaGVzKTsKCWlmICgkbWF0Y2hmbmQpCgl7CgkJJHF1ZXJ5ID0gJ1NFTEVDVCBodG1sYmxvYl9pZCwgaHRtbCBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidodG1sYmxvYnMgCgkJCVdIRVJFIGh0bWxibG9iX25hbWUgPSA/JzsKCQkkaWR4ID0gMDsKCQlmb3JlYWNoICgkbWF0Y2hlc1sxXSBhcyAkbmFtZSkKCQl7CgkJCSRyb3cgPSAkZGItPkdldFJvdygkcXVlcnksIGFycmF5KCRuYW1lKSk7CgkJCSRtYXBfbWFya2VyWydpbmZvJ10gPSBzdHJfcmVwbGFjZSgkbWF0Y2hlc1swXVskaWR4XSwgJHJvd1snaHRtbCddLCAkbWFwX21hcmtlclsnaW5mbyddKTsKCQkJJGlkeCsrOwoJCX0KCX0KCSRtYXBfbWFya2VyWydpbmZvJ10gPSAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlRnJvbURhdGEoJG1hcF9tYXJrZXJbJ2luZm8nXSk7CgkkbWFwLT5hZGRNYXJrZXJCeUNvb3JkcygKCQkJc3RyX3JlcGxhY2UoJywnLCAnLicsICRsb24pLCAKCQkJc3RyX3JlcGxhY2UoJywnLCAnLicsICRsYXQpLCAKCQkJJG1hcF9tYXJrZXJbJ25hbWUnXSwgCgkJCSRtYXBfbWFya2VyWydpbmZvJ10sCgkJCScnLCAgIC8vIE5vIHRvb2x0aXAgKHlldCkKCQkJJGljb250b3VzZSwKCQkJJHNoYWRvd3RvdXNlCgkJCSk7CgogIH0gCn0KCi8vIEdldCBwb2x5bGluZXMgZm9yIHRoaXMgbWFwCiRxdWVyeSA9ICdTRUxFQ1QgKiBGUk9NICcuIGNtc19kYl9wcmVmaXgoKSAuJ21vZHVsZV9nb29nbGVtYXBzX3BvbHlsaW5lcyAKCVdIRVJFIG1hcF9pZCA9ID8nOwokZGJyZXN1bHQgPSYgJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJG1hcF9kYXRhWydtYXBfaWQnXSkpOwoKd2hpbGUgKCRkYnJlc3VsdCAmJiAkcGwgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpCnsKCSRwb2x5bGluZV9hcnJheSA9IGFycmF5KCk7CgkvLyBPbmUgb3IgbW9yZSBwb2x5bGluZXMgYXJlIGF2YWlsYWJsZQoJJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9nb29nbGVtYXBzX3BvbHlsaW5lcGFydHMgCgkJV0hFUkUgcG9seWxpbmVfaWQgPSA/CgkJT1JERVIgQlkgc2VxJzsKCSRkYnJlc3VsdDIgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkcGxbJ3BvbHlsaW5lX2lkJ10pKTsKCSRlbnRyeWFycmF5ID0gYXJyYXkoKTsKCXdoaWxlICgkZGJyZXN1bHQyICYmICRwbHBhcnQgPSAkZGJyZXN1bHQyLT5GZXRjaFJvdygpKQoJewoJCSRwb2x5bGluZV9hcnJheVtdID0gYXJyYXkoJ2xhdCc9PiRwbHBhcnRbJ2xhdCddLCAnbG9uZyc9PiRwbHBhcnRbJ2xvbiddKTsKCX0KCSRtYXAtPmFkZFBvbHlsaW5lQnlDb29yZHNBcnJheSgKCQkJJHBvbHlsaW5lX2FycmF5LCAKCQkJZmFsc2UsCgkJCSRwbFsnc3Ryb2tlY29sb3InXSwKCQkJJHBsWydzdHJva2V3ZWlnaHQnXSwKCQkJJHBsWydzdHJva2VvcGFjaXR5J10KCQkpOwp9CgovLyBDZW50ZXIgdGhlIG1hcCBpZiBjZW50ZXIgY29vcmRpbmF0ZXMgYXJlIHNldCEKaWYgKCAkbWFwX2RhdGFbJ2NlbnRlcl9sYXQnXSAmJiAkbWFwX2RhdGFbJ2NlbnRlcl9sb24nXSApIHsKICAkbWFwLT5zZXRDZW50ZXJDb29yZHMoCgkJCXN0cl9yZXBsYWNlKCcsJywgJy4nLCAkbWFwX2RhdGFbJ2NlbnRlcl9sb24nXSksIAoJCQlzdHJfcmVwbGFjZSgnLCcsICcuJywgJG1hcF9kYXRhWydjZW50ZXJfbGF0J10pCgkJCSk7Cn0KCi8vIGFzc2lnbiBTbWFydHkgdmFyaWFibGVzOwokc21hcnR5LT5hc3NpZ24oJ2dvb2dsZV9tYXBfaGVhZGVyJywkbWFwLT5nZXRIZWFkZXJKUygpKTsKJHNtYXJ0eS0+YXNzaWduKCdnb29nbGVfbWFwX2pzJywkbWFwLT5nZXRNYXBKUygpKTsKJHNtYXJ0eS0+YXNzaWduKCdnb29nbGVfbWFwX3NpZGViYXInLCRtYXAtPmdldFNpZGViYXIoKSk7CiRzbWFydHktPmFzc2lnbignZ29vZ2xlX21hcCcsJG1hcC0+Z2V0TWFwKCkpOwokc21hcnR5LT5hc3NpZ24oJ21hcF9kZXNjcmlwdGlvbicsICRtYXBfZGF0YVsnZGVzY3JpcHRpb24nXSk7CgovLyBEaXNwbGF5IHRoZSBwb3B1bGF0ZWQgdGVtcGxhdGUKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdtYXAudHBsJyk7CgojU2V0IGJhY2sgbG9jYWxlIGFnYWluCnNldGxvY2FsZShMQ19BTEwsICRjdXJyZW50TG9jYWxlKTsKPz4K]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiRnQ21zID0gY21zbXMoKTsgaWYoICFpc19vYmplY3QoJGdDbXMpICkgZXhpdDsKCiR0aGlzLT5BZG1pblN0eWxlKCdoMyB7Y29sb3I6cmVkfScpOwoKLy8gVGFicwppZiAoRkFMU0UgPT0gZW1wdHkoJHBhcmFtc1snYWN0aXZlX3RhYiddKSkKewogICR0YWIgPSAkcGFyYW1zWydhY3RpdmVfdGFiJ107Cn0gZWxzZSB7CiAgJHRhYiA9ICcnOwp9CmlmICgkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdVc2UgR29vZ2xlTWFwcycpKQp7Ci8qCiAgaWYgKGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdF9hZGRyZXNzX3F1ZXJ5J10pKSB7CiAgICByZXF1aXJlX29uY2UoJ2xpYicuRElSRUNUT1JZX1NFUEFSQVRPUi4nR29vZ2xlTWFwQVBJLScuJHRoaXMtPl9nb29nbGVhcGlfdmVyc2lvbi5ESVJFQ1RPUllfU0VQQVJBVE9SLidHb29nbGVNYXBBUEkuY2xhc3MucGhwJyk7CiAgICAkcXVlcnlfbWFwID0gbmV3IEdvb2dsZU1hcEFQSSgwLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgneWFob29hcHBpZCcsICcxMjM0JykpOwogICAgJHF1ZXJ5X21hcC0+c2V0TG9va3VwU2VydmljZSggJHRoaXMtPkdldFByZWZlcmVuY2UoJ2xvb2t1cHNlcnZpY2UnLCAnR09PR0xFJykgKTsKICAgICRnZW9jb2RlID0gJHF1ZXJ5X21hcC0+Z2V0R2VvY29kZSgkcGFyYW1zWydhZGRyZXNzJ10pOwoKICAgIGlmKCAkZ2VvY29kZSA9PT0gZmFsc2UgKQogICAgewoJCWVjaG8gJHRoaXMtPlNob3dFcnJvcnMoJHRoaXMtPkxhbmcoJ2VfYmFkYWRkcmVzcycpKTsKICAgIH0KICAgIGVsc2UKICAgIHsKCQllY2hvICR0aGlzLT5TaG93TWVzc2FnZSgkdGhpcy0+TGFuZygnbG9jYXRpb25fZm9yJykuJyA8Yj4nLiAkcGFyYW1zWydhZGRyZXNzJ10gLic8L2I+ICcuICR0aGlzLT5MYW5nKCdpcycpLic6PGJyLz4KCQk8ZGw+CgkJCTxkdD4nLiR0aGlzLT5MYW5nKCd0X2xhbicpLic6Jm5ic3A7Jy4kZ2VvY29kZVsnbGF0J10gLic8L2R0PgoJCQk8ZHQ+Jy4kdGhpcy0+TGFuZygndF9sb24nKS4nOiZuYnNwOycuJGdlb2NvZGVbJ2xvbiddIC4nPC9kZD4KCQk8L2RsPicpOwoJfQogIH0KKi8KICAvL3RhYnMgIAogIGVjaG8gJHRoaXMtPlN0YXJ0VGFiSGVhZGVycygpOwoJICBlY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ21hcHMnLCR0aGlzLT5MYW5nKCdtYXBzJyksICgnbWFwcycgPT0gJHRhYik/dHJ1ZTpmYWxzZSk7CgkgIGVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignbWFya2VycycsJHRoaXMtPkxhbmcoJ21hcmtlcnMnKSwgKCdtYXJrZXJzJyA9PSAkdGFiKT90cnVlOmZhbHNlKTsKCSAgZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdwb2x5bGluZXMnLCR0aGlzLT5MYW5nKCdwb2x5bGluZXMnKSwgKCdwb2x5bGluZXMnID09ICR0YWIpP3RydWU6ZmFsc2UpOwoJICBlY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ2FkZHJlc3MnLCR0aGlzLT5MYW5nKCdxdWVyeV9hZGRyZXNzJyksICgnYWRkcmVzcycgPT0gJHRhYik/dHJ1ZTpmYWxzZSk7CgkgIGVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignc2V0dGluZ3MnLCR0aGlzLT5MYW5nKCdzZXR0aW5ncycpLCAoJ3NldHRpbmdzJyA9PSAkdGFiKT90cnVlOmZhbHNlKTsKICBlY2hvICR0aGlzLT5FbmRUYWJIZWFkZXJzKCk7CiAgLy9lbmQgdGFicwoKICAvL1RoZSBjb250ZW50IG9mIHRoZSB0YWJzCiAgZWNobyAkdGhpcy0+U3RhcnRUYWJDb250ZW50KCk7CiAgCiAgLy8gbWFwcyB0YWIKICBlY2hvICR0aGlzLT5TdGFydFRhYignbWFwcycsICRwYXJhbXMpOwoJaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKS4nL2Z1bmN0aW9uLmFkbWluX21hcHN0YWIucGhwJyk7CiAgZWNobyAkdGhpcy0+RW5kVGFiKCk7CiAgLy9lbmQgbWFwcyB0YWIKCiAgLy8gU3RhcnQgbWFya2VycyB0YWIKCWVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdtYXJrZXJzJywgJHBhcmFtcyk7CglpbmNsdWRlKGRpcm5hbWUoX19GSUxFX18pLicvZnVuY3Rpb24uYWRtaW5fbWFya2Vyc3RhYi5waHAnKTsKCWVjaG8gJHRoaXMtPkVuZFRhYigpOwogIC8vIGVuZCBtYXJrZXJzIHRhYgoKICAvLyBTdGFydCBwb2x5bGluZXMgdGFiCgllY2hvICR0aGlzLT5TdGFydFRhYigncG9seWxpbmVzJywgJHBhcmFtcyk7CglpbmNsdWRlKGRpcm5hbWUoX19GSUxFX18pLicvZnVuY3Rpb24uYWRtaW5fcG9seWxpbmVzdGFiLnBocCcpOwoJZWNobyAkdGhpcy0+RW5kVGFiKCk7CiAgLy8gZW5kIHBvbHlsaW5lcyB0YWIKCiAgLy8gU3RhcnQgYWRkcmVzcyB0YWIKICBlY2hvICR0aGlzLT5TdGFydFRhYignYWRkcmVzcycsICRwYXJhbXMpOwoJaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKS4nL2Z1bmN0aW9uLmFkbWluX2FkZHJlc3N0YWIucGhwJyk7CiAgZWNobyAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpOwoKICBlY2hvICR0aGlzLT5FbmRUYWIoKTsKICAvL2VuZCBhZGRyZXNzIHRhYgoKICAvL1NldHRpbmdzIHRhYgogIGVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdzZXR0aW5ncycsICRwYXJhbXMpOwoKICBlY2hvICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAnc2F2ZXNldHRpbmdzJywgJHJldHVybmlkKTsKICBlY2hvICR0aGlzLT5DcmVhdGVGaWVsZHNldFN0YXJ0KCRpZCwgJ2dlbmVyYWwnLCAnR2VuZXJhbCBzZXR0aW5ncycgKTsKICBlY2hvICI8cD4iOwogIGVjaG8gJHRoaXMtPkNyZWF0ZUxhYmVsRm9ySW5wdXQoJGlkLCAndXNlY2FjaGUnLCAkdGhpcy0+TGFuZygndXNlY2FjaGUnKSk7CiAgZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsICd1c2VjYWNoZScsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCJ1c2VjYWNoZSIsIDApICwgJzEnKTsKICBlY2hvICI8L3A+IjsKICBlY2hvICc8cD4nOwogIGVjaG8gJHRoaXMtPkNyZWF0ZUxhYmVsRm9ySW5wdXQoJGlkLCAndXNlbWFya2Vyc2hhZG93cycsICR0aGlzLT5MYW5nKCd1c2VtYXJrZXJzaGFkb3dzJykpOwogIGVjaG8gJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCAndXNlbWFya2Vyc2hhZG93cycsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCd1c2VtYXJrZXJzaGFkb3dzJywgMCkgLCAnMScpOwogIGVjaG8gIjwvcD4iOyAKCiAgZWNobyAiPHA+IjsgCiAgZWNobyAkdGhpcy0+Q3JlYXRlTGFiZWxGb3JJbnB1dCgkaWQsICdsb29rdXBzZXJ2aWNlJywgJHRoaXMtPkxhbmcoJ2xvb2t1cHNlcnZpY2UnKSk7CiAgJGxvb2t1cHNlcnZpY2VzID0gYXJyYXkoKTsKICAkbG9va3Vwc2VydmljZXNbIllBSE9PIl0gPSAiWUFIT08iOwogICRsb29rdXBzZXJ2aWNlc1siR09PR0xFIl0gPSAiR09PR0xFIjsKICBlY2hvICR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwgJ2xvb2t1cHNlcnZpY2UnLCAkbG9va3Vwc2VydmljZXMsIC0xLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgibG9va3Vwc2VydmljZSIpKTsKICBlY2hvICI8L3A+IjsgCgogIGVjaG8gIjxwPiI7IAogIGVjaG8gJHRoaXMtPkNyZWF0ZUlucHV0VGV4dFdpdGhMYWJlbCgkaWQsICd5YWhvb2FwaWQnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgieWFob29hcGlkIiwgJycpICwgMTAwLCAxMDI0LCAnJywgJHRoaXMtPkxhbmcoJ3lhaG9vYXBwaWQnKSApOwogIGVjaG8gIjwvcD4iOyAKICBlY2hvICR0aGlzLT5DcmVhdGVGaWVsZHNldEVuZCgpOwoKICAvLyBQcmVwYXJlIHRoZSBzZXR0aW5ncyBmb3IgZWFzeSBsb2NhdG9yCiAgZWNobyAkdGhpcy0+Q3JlYXRlRmllbGRzZXRTdGFydCgkaWQsICdlYXN5bG9jYXRvcicsICR0aGlzLT5MYW5nKCdlYXN5bG9jYXRvcnNldHRpbmdzJykgKTsKICBlY2hvICc8cD4nOwogICRlYXN5bG9jYXRvcmRyb3Bkb3duID0gYXJyYXkoKTsKICBmb3IgKCRpPSAxOyAkaTw9MjA7JGkrKykgewoJCSRlYXN5bG9jYXRvcmRyb3Bkb3duWyRpXSA9ICRpOwkJCgl9CiAgZWNobyAkdGhpcy0+Q3JlYXRlTGFiZWxGb3JJbnB1dCgkaWQsICdlYXN5bG9jYXRvcmxldmVsJywgJHRoaXMtPkxhbmcoJ2Vhc3lsb2NhdG9ybGV2ZWwnKSk7CiAgZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsICdlYXN5bG9jYXRvcmxldmVsJywgJGVhc3lsb2NhdG9yZHJvcGRvd24sIDIsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxldmVsJykpOwogIGVjaG8gJzwvcD4nOwogIGVjaG8gJzxwPic7CgkvLyBQcmVwYXJlIGEgbGlzdCBvZiBtYXAgdHlwZXMKCSR0eXBlbGlzdCA9IGFycmF5KCk7CgkkdHlwZWxpc3QgPSAkdGhpcy0+R2V0TWFwVHlwZXMoKTsKICBlY2hvICR0aGlzLT5DcmVhdGVMYWJlbEZvcklucHV0KCRpZCwgJ2RlZmF1bHRtYXB0eXBlJywgJHRoaXMtPkxhbmcoJ2RlZmF1bHRtYXB0eXBlJykpOwogIGVjaG8gJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCAnZGVmYXVsdG1hcHR5cGUnLCAkdHlwZWxpc3QsIDAsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdkZWZhdWx0bWFwdHlwZScpKTsKICBlY2hvICc8L3A+JzsKICBlY2hvICc8cD4nOwogIGVjaG8gJHRoaXMtPkNyZWF0ZUlucHV0VGV4dFdpdGhMYWJlbCgkaWQsICdlYXN5bG9jYXRvcmxhdCcsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxhdCcsIDM3KSAsIDE1LCAxNSwgJycsICR0aGlzLT5MYW5nKCdlYXN5bG9jYXRvcmxhdCcpICk7CiAgZWNobyAnPC9wPic7CiAgZWNobyAnPHA+JzsKICBlY2hvICR0aGlzLT5DcmVhdGVJbnB1dFRleHRXaXRoTGFiZWwoJGlkLCAnZWFzeWxvY2F0b3Jsb24nLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZWFzeWxvY2F0b3Jsb24nLCAtNzQpICwgMTUsIDE1LCAnJywgJHRoaXMtPkxhbmcoJ2Vhc3lsb2NhdG9ybG9uJykgKTsKICBlY2hvICc8L3A+JzsKICBlY2hvICc8cD4nOwogIGVjaG8gJHRoaXMtPkNyZWF0ZUxhYmVsRm9ySW5wdXQoJGlkLCAnZWFzeWxvY2F0b3JzYXZlbGFzdCcsICR0aGlzLT5MYW5nKCdlYXN5bG9jYXRvcnNhdmVsYXN0JykpOwogIGVjaG8gJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCAnZWFzeWxvY2F0b3JzYXZlbGFzdCcsICcxJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Vhc3lsb2NhdG9yc2F2ZWxhc3QnLCAwKSk7CiAgZWNobyAnPC9wPic7CgkvLyBQcmVwYXJlIGEgbGlzdCBvZiBjdXJzb3IgdHlwZXMKCSRlYXN5bG9jYXRvcmN1cnNvcmxpc3QgPSBhcnJheSgpOwoJJGVhc3lsb2NhdG9yY3Vyc29ybGlzdCA9IGdvb2dsZW1hcHNfdXRpbHM6OmdldF9lYXN5bG9jYXRvcmN1cnNvcmxpc3QoKTsKICBlY2hvICc8cD4nOwogIGVjaG8gJHRoaXMtPkNyZWF0ZUxhYmVsRm9ySW5wdXQoJGlkLCAndGl0bGVfZWFzeWxvY2F0b3JjdXJzb3InLCAkdGhpcy0+TGFuZygndGl0bGVfZWFzeWxvY2F0b3JjdXJzb3InKSk7CiAgZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsICdlYXN5bG9jYXRvcmN1cnNvcicsICRlYXN5bG9jYXRvcmN1cnNvcmxpc3QsIDAsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmN1cnNvcicsICdjcm9zc2hhaXInKSk7CiAgZWNobyAnPC9wPic7CiAgZWNobyAkdGhpcy0+Q3JlYXRlRmllbGRzZXRFbmQoKTsKICBlY2hvICc8cD4nOwogIGVjaG8gJHRoaXMtPkNyZWF0ZUlucHV0VGV4dFdpdGhMYWJlbCgkaWQsICdzZXFpbmNyZW1lbnQnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnc2VxaW5jcmVtZW50JywgMTApICwgNSwgNSwgJycsICR0aGlzLT5MYW5nKCd0aXRsZV9zZXFpbmNyZW1lbnQnKSApOwogIGVjaG8gJzwvcD4nOwogIGVjaG8gJzxwPic7CiAgZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0V2l0aExhYmVsKCRpZCwgJ2xvY2F0aW9ucHJlY2lzaW9uJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2xvY2F0aW9ucHJlY2lzaW9uJywgNykgLCAyLCAyLCAnJywgJHRoaXMtPkxhbmcoJ3RpdGxlX2xvY2F0aW9ucHJlY2lzaW9uJykgKTsKICBlY2hvICc8L3A+JzsKCS8vIFByZXBhcmUgYSBsaXN0IG9mIGRpc3RhbmNlIHVvbQoJJGRpc3RhbmNldW9tbGlzdCA9IGFycmF5KCk7CgkkZGlzdGFuY2V1b21saXN0ID0gZ29vZ2xlbWFwc191dGlsczo6Z2V0X2Rpc3RhbmNlX3VvbSgpOwogIGVjaG8gJzxwPic7CiAgZWNobyAkdGhpcy0+Q3JlYXRlTGFiZWxGb3JJbnB1dCgkaWQsICd0aXRsZV9kaXN0YW5jZXVvbWRlZmF1bHQnLCAkdGhpcy0+TGFuZygndGl0bGVfZGlzdGFuY2V1b21kZWZhdWx0JykpOwogIGVjaG8gJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCAnZGlzdGFuY2V1b20nLCAkZGlzdGFuY2V1b21saXN0LCAwLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGlzdGFuY2V1b20nLCAnSycpKTsKICBlY2hvICc8L3A+JzsKCS8vIFByZXBhcmUgYSBsaXN0IG9mIHJvdXRlIHR5cGVzCgkkZ3B4ZXhwb3J0dHlwZWxpc3QgPSBhcnJheSgpOwoJJGdweGV4cG9ydHR5cGVsaXN0ID0gZ29vZ2xlbWFwc191dGlsczo6Z2V0X2dweGV4cG9ydHR5cGVsaXN0KCk7CiAgZWNobyAnPHA+JzsKICBlY2hvICR0aGlzLT5DcmVhdGVMYWJlbEZvcklucHV0KCRpZCwgJ3RpdGxlX2dweGV4cG9ydHR5cGUnLCAkdGhpcy0+TGFuZygndGl0bGVfZ3B4ZXhwb3J0dHlwZScpKTsKICBlY2hvICR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwgJ2dweGV4cG9ydHR5cGUnLCAkZ3B4ZXhwb3J0dHlwZWxpc3QsIDAsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdncHhleHBvcnR0eXBlJywgJ3RyaycpKTsKICBlY2hvICc8L3A+JzsKICAKCgllY2hvICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXRfZ2VuZXJhbCcsICR0aGlzLT5MYW5nKCdTdWJtaXQnKSApOwogIGVjaG8gJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKTsKCiAgZWNobyAkdGhpcy0+RW5kVGFiKCk7CiAgLy9FTkQgU2V0dGluZ3MgdGFiCgogIGVjaG8gJHRoaXMtPkVuZFRhYkNvbnRlbnQoKTsgIAp9ICAKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.deleterow.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyBHb29nbGVNYXBzIChpZiB5b3UgZG9uJ3Qga25vdyB0aGlzIG9uZSA6LSkgR29vZ2xlIGl0ISkuIEEgbW9kdWxlIGZvciBDTVMgLSBDTVMgTWFkZSBTaW1wbGUKIyBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgRHVrZXRvd24gCiMKIyBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIGRlbGV0aW5nIGEgcm93IGZyb20gdGhlIHZhcmlvdXMgdGFibGVzCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMgVGhlIG1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3NlcnZpY2VkZXNrCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKJGdDbXMgPSBjbXNtcygpOyBpZiggIWlzX29iamVjdCgkZ0NtcykgKSBleGl0OwoKc3dpdGNoICgkcGFyYW1zWyd0YWJsZSddKQp7CgljYXNlICdNYXBzJzoKCQkvLyBSZW1vdmUgdGhlIHBvbHlsaW5lIHBhcnRzCgkJJHF1ZXJ5ID0gJ0RFTEVURSBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfZ29vZ2xlbWFwc19wb2x5bGluZXBhcnRzIAoJCQlXSEVSRSBwb2x5bGluZV9pZCBpbiAoCgkJCQlTRUxFQ1QgcG9seWxpbmVfaWQgRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX2dvb2dsZW1hcHNfcG9seWxpbmVzIAoJCQkJV0hFUkUgbWFwX2lkPSA/KSc7CgkJJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHBhcmFtc1snbWFwX2lkJ10pICk7CgkJLy8gUmVtb3ZlIHRoZSBwb2x5bGluZQoJCSRxdWVyeSA9ICdERUxFVEUgRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX2dvb2dsZW1hcHNfcG9seWxpbmVzIAoJCQlXSEVSRSBtYXBfaWQgPSA/JzsKCQkkcm93ID0gJGRiLT5HZXRSb3coICRxdWVyeSwgYXJyYXkoJHBhcmFtc1snbWFwX2lkJ10pICk7CgkJLy8gUmVtb3ZlIHRoZSBtYXJrZXJzIGNvbm5lY3RlZCB0byB0aGUgbWFwIChubyByZWZlcmVuY2lhbCBjaGVjayEpCgkJJHF1ZXJ5ID0gJ0RFTEVURSBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfZ29vZ2xlbWFwc19tYXJrZXJzIFdIRVJFIG1hcF9pZCA9ID8nOwoJCSRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRwYXJhbXNbJ21hcF9pZCddKSApOwoJCS8vIFJlbW92ZSB0aGUgbWFwIChubyByZWZlcmVuY2lhbCBjaGVjayEpCgkJJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9nb29nbGVtYXBzX21hcHMgV0hFUkUgbWFwX2lkID0gPyc7CgkJJHJvdyA9ICRkYi0+R2V0Um93KCAkcXVlcnksIGFycmF5KCRwYXJhbXNbJ21hcF9pZCddKSApOwoJCWlmICgkcm93KSB7CgkJCSRxdWVyeSA9ICdERUxFVEUgRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX2dvb2dsZW1hcHNfbWFwcyBXSEVSRSBtYXBfaWQgPSA/JzsKCQkJJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHBhcmFtc1snbWFwX2lkJ10pICk7CgkJCSRwYXJhbXMgPSBhcnJheSgndGFiX21lc3NhZ2UnPT4gJ21hcGRlbGV0ZWQnLCAnYWN0aXZlX3RhYicgPT4gJ21hcHMnKTsKCQl9CgkJYnJlYWs7CgljYXNlICdNYXJrZXJzJzoKCQkvLyBSZW1vdmUgdGhlIG1hcmtlciAobm8gcmVmZXJlbmNpYWwgY2hlY2shKQoJCSRxdWVyeSA9ICdTRUxFQ1QgKiBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfZ29vZ2xlbWFwc19tYXJrZXJzIFdIRVJFIG1hcmtlcl9pZCA9ID8nOwoJCSRyb3cgPSAkZGItPkdldFJvdyggJHF1ZXJ5LCBhcnJheSgkcGFyYW1zWydtYXJrZXJfaWQnXSkgKTsKCQlpZiAoJHJvdykgewoJCQkkcXVlcnkgPSAnREVMRVRFIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9nb29nbGVtYXBzX21hcmtlcnMgV0hFUkUgbWFya2VyX2lkID0gPyc7CgkJCSRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRwYXJhbXNbJ21hcmtlcl9pZCddKSApOwoJCQkkcGFyYW1zID0gYXJyYXkoJ3RhYl9tZXNzYWdlJz0+ICdtYXJrZXJkZWxldGVkJywgJ2FjdGl2ZV90YWInID0+ICdtYXJrZXJzJyk7CgkJfQoJCWJyZWFrOwoJY2FzZSAnUG9seWxpbmVzJzoKCQkvLyBSZW1vdmUgdGhlIHBvbHlsaW5lIHBhcnRzCgkJJHF1ZXJ5ID0gJ0RFTEVURSBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfZ29vZ2xlbWFwc19wb2x5bGluZXBhcnRzIFdIRVJFIHBvbHlsaW5lX2lkID0gPyc7CgkJJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHBhcmFtc1sncG9seWxpbmVfaWQnXSkgKTsKCQkvLyBSZW1vdmUgdGhlIHBvbHlsaW5lCgkJJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9nb29nbGVtYXBzX3BvbHlsaW5lcyBXSEVSRSBwb2x5bGluZV9pZCA9ID8nOwoJCSRyb3cgPSAkZGItPkdldFJvdyggJHF1ZXJ5LCBhcnJheSgkcGFyYW1zWydwb2x5bGluZV9pZCddKSApOwoJCWlmICgkcm93KSB7CgkJCSRxdWVyeSA9ICdERUxFVEUgRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX2dvb2dsZW1hcHNfcG9seWxpbmVzIFdIRVJFIHBvbHlsaW5lX2lkID0gPyc7CgkJCSRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRwYXJhbXNbJ3BvbHlsaW5lX2lkJ10pICk7CgkJCSRwYXJhbXMgPSBhcnJheSgndGFiX21lc3NhZ2UnPT4gJ3BvbHlsaW5lZGVsZXRlZCcsICdhY3RpdmVfdGFiJyA9PiAncG9seWxpbmVzJyk7CgkJfQoJCWJyZWFrOwoJY2FzZSAnUG9seWxpbmVwYXJ0cyc6CgkJLy8gUmVtb3ZlIHRoZSBwb2x5bGluZSBwYXJ0CgkJJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9nb29nbGVtYXBzX3BvbHlsaW5lcGFydHMgV0hFUkUgcG9seWxpbmVwYXJ0X2lkID0gPyc7CgkJJHJvdyA9ICRkYi0+R2V0Um93KCAkcXVlcnksIGFycmF5KCRwYXJhbXNbJ3BvbHlsaW5lcGFydF9pZCddKSApOwoJCSRwYXJhbXNbJ3BvbHlsaW5lX2lkJ10gPSAkcm93Wydwb2x5bGluZV9pZCddOwoJCWlmICgkcm93KSB7CgkJCSRxdWVyeSA9ICdERUxFVEUgRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX2dvb2dsZW1hcHNfcG9seWxpbmVwYXJ0cyBXSEVSRSBwb2x5bGluZXBhcnRfaWQgPSA/JzsKCQkJJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHBhcmFtc1sncG9seWxpbmVwYXJ0X2lkJ10pICk7CgkJfQoJCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdlZGl0cG9seWxpbmUnLCAkcmV0dXJuaWQsICRwYXJhbXMpOwoJCWJyZWFrOwoKCWRlZmF1bHQ6CgkJYnJlYWs7Cn0KCi8vIHJlZGlyZWN0IHRoZSB1c2VyIHRvIHRoZSBkZWZhdWx0IGFkbWluIHNjcmVlbgokdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCAkcGFyYW1zKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/action.editmap.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyBHb29nbGVNYXBzIChpZiB5b3UgZG9uJ3Qga25vdyB0aGlzIG9uZSA6LSkgR29vZ2xlIGl0ISkuIEEgbW9kdWxlIGZvciBDTVMgLSBDTVMgTWFkZSBTaW1wbGUKIyBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgRHVrZXRvd24gCiMKIyBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIGNoYW5naW5nIGEgbWFwCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMgVGhlIG1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL2dvb2dsZW1hcHMKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgokZ0NtcyA9IGNtc21zKCk7IGlmKCAhaXNfb2JqZWN0KCRnQ21zKSApIGV4aXQ7CiRkYiA9IGNtc21zKCktPkdldERiKCk7CgokdXNlcl9pZCA9ICcnOwppZiAoZ2V0X3VzZXJpZCgpICkgewoJJHVzZXJfaWQgPSBnZXRfdXNlcmlkKCk7Cn0KJG93bmVyX2lkID0gJHVzZXJfaWQ7CgppZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1VzZSBHb29nbGVNYXBzJykpCnsKCWVjaG8gJHRoaXMtPlNob3dFcnJvcnMoJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcsIGFycmF5KCdVc2UgR29vZ2xlTWFwcycpKSk7CglyZXR1cm47Cn0KCmlmIChpc3NldCgkcGFyYW1zWydjYW5jZWwnXSkpCnsKCSRwYXJhbXMgPSBhcnJheSgnYWN0aXZlX3RhYicgPT4gJ21hcHMnKTsKCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICRwYXJhbXMpOwp9CgokbWFwX2lkID0gJyc7CmlmIChpc3NldCgkcGFyYW1zWydtYXBfaWQnXSkpIHsKCSRtYXBfaWQgPSAkcGFyYW1zWydtYXBfaWQnXTsKfQoKJGRlc2NyaXB0aW9uID0gJyc7CmlmIChpc3NldCgkcGFyYW1zWydkZXNjcmlwdGlvbiddKSkgewoJJGRlc2NyaXB0aW9uID0gJHBhcmFtc1snZGVzY3JpcHRpb24nXTsKfQoKJGNlbnRlcl9sYXQgPSAnJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ2NlbnRlcl9sYXQnXSkpIHsKCSRjZW50ZXJfbGF0ID0gJHBhcmFtc1snY2VudGVyX2xhdCddOwp9CgokY2VudGVyX2xvbiA9ICcnOwppZiAoaXNzZXQoJHBhcmFtc1snY2VudGVyX2xvbiddKSkgewoJJGNlbnRlcl9sb24gPSAkcGFyYW1zWydjZW50ZXJfbG9uJ107Cn0KCiR0eXBlID0gJyc7CmlmIChpc3NldCgkcGFyYW1zWyd0eXBlJ10pKSB7CgkkdHlwZSA9ICRwYXJhbXNbJ3R5cGUnXTsKfQoKJHdpZHRoID0gJyc7CmlmIChpc3NldCgkcGFyYW1zWyd3aWR0aCddKSkgewoJJHdpZHRoID0gJHBhcmFtc1snd2lkdGgnXTsKfQoKJGhlaWdodCA9ICcnOwppZiAoaXNzZXQoJHBhcmFtc1snaGVpZ2h0J10pKSB7CgkkaGVpZ2h0ID0gJHBhcmFtc1snaGVpZ2h0J107Cn0KCiRjb250cm9scyA9IDA7CmlmIChpc3NldCgkcGFyYW1zWydjb250cm9scyddKSkgewoJJGNvbnRyb2xzID0gJHBhcmFtc1snY29udHJvbHMnXTsKfQoKJGNvbnRyb2xzX3NpemUgPSAnJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ2NvbnRyb2xzX3NpemUnXSkpIHsKCSRjb250cm9sc19zaXplID0gJHBhcmFtc1snY29udHJvbHNfc2l6ZSddOwp9CgokdHlwZV9jb250cm9scyA9IDA7CmlmIChpc3NldCgkcGFyYW1zWyd0eXBlX2NvbnRyb2xzJ10pKSB7CgkkdHlwZV9jb250cm9scyA9ICRwYXJhbXNbJ3R5cGVfY29udHJvbHMnXTsKfQoKJHNpZGViYXIgPSAwOwppZiAoaXNzZXQoJHBhcmFtc1snc2lkZWJhciddKSkgewoJJHNpZGViYXIgPSAkcGFyYW1zWydzaWRlYmFyJ107Cn0KCiRkaXJlY3Rpb25zID0gMDsKaWYgKGlzc2V0KCRwYXJhbXNbJ2RpcmVjdGlvbnMnXSkpIHsKCSRkaXJlY3Rpb25zID0gJHBhcmFtc1snZGlyZWN0aW9ucyddOwp9CgokdXNlZHpvb20gPSAnJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ3pvb20nXSkpIHsKCSR1c2Vkem9vbSA9ICRwYXJhbXNbJ3pvb20nXTsKfQoKJHpvb21fZW5jb21wYXNzID0gMDsKaWYgKGlzc2V0KCRwYXJhbXNbJ3pvb21fZW5jb21wYXNzJ10pKSB7Cgkkem9vbV9lbmNvbXBhc3MgPSAkcGFyYW1zWyd6b29tX2VuY29tcGFzcyddOwp9Cgokc2NhbGVfY29udHJvbCA9IDA7CmlmIChpc3NldCgkcGFyYW1zWydzY2FsZV9jb250cm9sJ10pKSB7Cgkkc2NhbGVfY29udHJvbCA9ICRwYXJhbXNbJ3NjYWxlX2NvbnRyb2wnXTsKfQoKJGJvdW5kc19mdWRnZSA9ICcnOwppZiAoaXNzZXQoJHBhcmFtc1snYm91bmRzX2Z1ZGdlJ10pKSB7CgkkYm91bmRzX2Z1ZGdlID0gJHBhcmFtc1snYm91bmRzX2Z1ZGdlJ107Cn0KCiRpbmZvX3dpbmRvdyA9IDA7CmlmIChpc3NldCgkcGFyYW1zWydpbmZvX3dpbmRvdyddKSkgewoJJGluZm9fd2luZG93ID0gJHBhcmFtc1snaW5mb193aW5kb3cnXTsKfQoKJGluZm9fdHJpZ2dlciA9ICcnOwppZiAoaXNzZXQoJHBhcmFtc1snaW5mb190cmlnZ2VyJ10pKSB7CgkkaW5mb190cmlnZ2VyID0gJHBhcmFtc1snaW5mb190cmlnZ2VyJ107Cn0KCiRuYW1lID0gJyc7CmlmIChpc3NldCgkcGFyYW1zWyduYW1lJ10pKQp7CgkkbmFtZSA9ICRwYXJhbXNbJ25hbWUnXTsKCWlmICgkbmFtZSAhPSAnJykgewoJCSRxdWVyeSA9ICdVUERBVEUgJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9nb29nbGVtYXBzX21hcHMgU0VUCgkJCW5hbWUgPSA/LCBkZXNjcmlwdGlvbiA9ID8sIGNlbnRlcl9sYXQgPSA/LCBjZW50ZXJfbG9uID0gPywgb3duZXJfaWQgPSA/LCAKCQkJdHlwZSA9ID8sIHdpZHRoID0gPywgaGVpZ2h0ID0gPywgY29udHJvbHMgPSA/LCBjb250cm9sc19zaXplID0gPywgCgkJCXR5cGVfY29udHJvbHMgPSA/LCBzaWRlYmFyID0gPywgem9vbXNjcm9sbHdoZWVsID0gPywgZGlyZWN0aW9ucyA9ID8sIAoJCQl6b29tID0gPywgem9vbV9lbmNvbXBhc3MgPSA/LCBzY2FsZV9jb250cm9sID0gPywgYm91bmRzX2Z1ZGdlID0gPywgCgkJCWluZm9fd2luZG93ID0gPywgaW5mb190cmlnZ2VyID0gPyAKCQkJV0hFUkUgbWFwX2lkID0gPyc7CgkJJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJG5hbWUsICRkZXNjcmlwdGlvbiwgJGNlbnRlcl9sYXQsICRjZW50ZXJfbG9uLCAKCQkJJG93bmVyX2lkLCAkdHlwZSwgJHdpZHRoLCAkaGVpZ2h0LCAkY29udHJvbHMsICRjb250cm9sc19zaXplLCAKCQkJJHR5cGVfY29udHJvbHMsICRzaWRlYmFyLCAkem9vbXNjcm9sbHdoZWVsLAkkZGlyZWN0aW9ucywgJHVzZWR6b29tLCAKCQkJJHpvb21fZW5jb21wYXNzLCAkc2NhbGVfY29udHJvbCwgJGJvdW5kc19mdWRnZSwgJGluZm9fd2luZG93LAoJCQkkaW5mb190cmlnZ2VyLAoJCQkkbWFwX2lkKSk7CgkJJHRoaXMtPlNhdmVFYXN5TG9jYXRvcigkY2VudGVyX2xhdCwgJGNlbnRlcl9sb24sICR1c2Vkem9vbSk7CgkJCQoJCSRwYXJhbXMgPSBhcnJheSgndGFiX21lc3NhZ2UnPT4gJ21hcHVwZGF0ZWQnLCAnYWN0aXZlX3RhYicgPT4gJ21hcHMnKTsKCQkkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCAkcGFyYW1zKTsKCX0KfQplbHNlIHsKCSRxdWVyeSA9ICdTRUxFQ1QgKiBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfZ29vZ2xlbWFwc19tYXBzIFdIRVJFIG1hcF9pZCA9ID8nOwoJJHJvdyA9ICRkYi0+R2V0Um93KCRxdWVyeSwgYXJyYXkoJG1hcF9pZCkpOwoJaWYgKCRyb3cpCgl7CgkJJG5hbWUgPSAkcm93WyduYW1lJ107CgkJJGRlc2NyaXB0aW9uID0gJHJvd1snZGVzY3JpcHRpb24nXTsKCQkkY2VudGVyX2xhdCA9ICRyb3dbJ2NlbnRlcl9sYXQnXTsKCQkkY2VudGVyX2xvbiA9ICRyb3dbJ2NlbnRlcl9sb24nXTsKCQkkdHlwZSA9ICRyb3dbJ3R5cGUnXTsKCQlzd2l0Y2ggKCR0eXBlKSB7CgkJCWNhc2UgJ2h5YnJpZCc6CgkJCQkkc21hcnR5LT5hc3NpZ24oJ21hcHR5cGUnLCAnSFlCUklEJyk7CgkJCQlicmVhazsKCQkJY2FzZSAnc2F0ZWxsaXRlJzoKCQkJCSRzbWFydHktPmFzc2lnbignbWFwdHlwZScsICdTQVRFTExJVEUnKTsKCQkJCWJyZWFrOwoJCQljYXNlICd0ZXJyYWluJzoKCQkJCSRzbWFydHktPmFzc2lnbignbWFwdHlwZScsICdURVJSQUlOJyk7CgkJCQlicmVhazsKCQkJZGVmYXVsdDoKCQkJCSRzbWFydHktPmFzc2lnbignbWFwdHlwZScsICdST0FETUFQJyk7CgkJCQlicmVhazsKCQl9CgkJJHdpZHRoID0gJHJvd1snd2lkdGgnXTsKCQkkaGVpZ2h0ID0gJHJvd1snaGVpZ2h0J107CgkJJGNvbnRyb2xzID0gJHJvd1snY29udHJvbHMnXTsKCQkkY29udHJvbHNfc2l6ZSA9ICRyb3dbJ2NvbnRyb2xzX3NpemUnXTsKCQkkdHlwZV9jb250cm9scyA9ICRyb3dbJ3R5cGVfY29udHJvbHMnXTsKCQkkc2lkZWJhciA9ICRyb3dbJ3NpZGViYXInXTsKCQkkZGlyZWN0aW9ucyA9ICRyb3dbJ2RpcmVjdGlvbnMnXTsKCQkkdXNlZHpvb20gPSAkcm93Wyd6b29tJ107CgkJJHpvb21zY3JvbGx3aGVlbCA9ICRyb3dbJ3pvb21zY3JvbGx3aGVlbCddOwoJCSR6b29tX2VuY29tcGFzcyA9ICRyb3dbJ3pvb21fZW5jb21wYXNzJ107CgkJJHNjYWxlX2NvbnRyb2wgPSAkcm93WydzY2FsZV9jb250cm9sJ107CgkJJGJvdW5kc19mdWRnZSA9ICRyb3dbJ2JvdW5kc19mdWRnZSddOwoJCSRpbmZvX3dpbmRvdyA9ICRyb3dbJ2luZm9fd2luZG93J107CgkJJGluZm9fdHJpZ2dlciA9ICRyb3dbJ2luZm9fdHJpZ2dlciddOwoJfQp9CgovLyBQcmVwYXJlIGEgbGlzdCBvZiBtYXBzCiRtYXBsaXN0ID0gYXJyYXkoKTsKJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9nb29nbGVtYXBzX21hcHMgT1JERVIgQlkgbmFtZSc7CiRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkpOwp3aGlsZSAoJGRicmVzdWx0ICYmICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpCnsKCSRtYXBsaXN0WyRyb3dbJ25hbWUnXV0gPSAkcm93WydtYXBfaWQnXTsKfQoKLy8gQ2hlY2sgd2hhdCB1c2VyIHNldHRpbmcgaXMgZm9yIEdsb2JhbCBDb250ZW50IEJsb2NrIHd5c2l3eWcKJGFsbG93X3d5c2l3eWcgPSBnZXRfcHJlZmVyZW5jZSggJHVzZXJfaWQsICdnY2Jfd3lzaXd5ZycgKTsKCi8vIFByZXBhcmUgYSBsaXN0IG9mIG1hcCB0eXBlcwokdHlwZWxpc3QgPSBhcnJheSgpOwokdHlwZWxpc3QgPSAkdGhpcy0+R2V0TWFwVHlwZXMoKTsKCi8vIFByZXBhcmUgYSBsaXN0IG9mIGNvbnRyb2wgc2l6ZXMKJGNvbnRyb2xzX3NpemVsaXN0ID0gYXJyYXkoKTsKJGNvbnRyb2xzX3NpemVsaXN0WyR0aGlzLT5MYW5nKCdjb250cm9sc2l6ZWxhcmdlJyldID0gJ2xhcmdlJzsKJGNvbnRyb2xzX3NpemVsaXN0WyR0aGlzLT5MYW5nKCdjb250cm9sc2l6ZXNtYWxsJyldID0gJ3NtYWxsJzsKCi8vIFByZXBhcmUgYSBsaXN0IG9mIHpvb20gbGV2ZWxzCiR6b29tbGlzdCA9IGFycmF5KCk7CmZvciAoJGkgPSAxOyAkaSA8IDIwOyAkaSsrKSB7Cgkkem9vbWxpc3RbJGkgLSAxXSA9ICRpOwp9CgovLyBQcmVwYXJlIGEgbGlzdCBvZiB3aW5kb3cgdHJpZ2dlcnMKJGluZm9fdHJpZ2dlcmxpc3QgPSBhcnJheSgpOwokaW5mb190cmlnZ2VybGlzdFskdGhpcy0+TGFuZygnaW5mb190cmlnZ2VyY2xpY2snKV0gPSAnY2xpY2snOwokaW5mb190cmlnZ2VybGlzdFskdGhpcy0+TGFuZygnaW5mb190cmlnZ2VybW91c2VvdmVyJyldID0gJ21vdXNlb3Zlcic7CgojRGlzcGxheSB0ZW1wbGF0ZQokc21hcnR5LT5hc3NpZ24oJ3N0YXJ0Zm9ybScsICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAnZWRpdG1hcCcsICRyZXR1cm5pZCkpOwokc21hcnR5LT5hc3NpZ24oJ2VuZGZvcm0nLCAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9uYW1lJywgJHRoaXMtPkxhbmcoJ3RpdGxlX25hbWUnKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfbmFtZScsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnbmFtZScsICRuYW1lLCA0MCwgODAsICdjbGFzcz0iZGVmYXVsdGZvY3VzIicpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9kZXNjcmlwdGlvbicsICR0aGlzLT5MYW5nKCd0aXRsZV9kZXNjcmlwdGlvbicpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9kZXNjcmlwdGlvbicsICR0aGlzLT5DcmVhdGVUZXh0QXJlYSgkYWxsb3dfd3lzaXd5ZywgJGlkLCAkZGVzY3JpcHRpb24sICdkZXNjcmlwdGlvbicsICcnLCAnJywgJycsICcnLCAnODAnLCAnMycpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9jZW50ZXJfbGF0JywgJHRoaXMtPkxhbmcoJ3RpdGxlX2NlbnRlcl9sYXQnKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfY2VudGVyX2xhdCcsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnY2VudGVyX2xhdCcsICRjZW50ZXJfbGF0LCA0MCwgMTAwKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfY2VudGVyX2xvbicsICR0aGlzLT5MYW5nKCd0aXRsZV9jZW50ZXJfbG9uJykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X2NlbnRlcl9sb24nLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ2NlbnRlcl9sb24nLCAkY2VudGVyX2xvbiwgNDAsIDEwMCkpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX3R5cGUnLCAkdGhpcy0+TGFuZygndGl0bGVfdHlwZScpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF90eXBlJywgJHRoaXMtPkNyZWF0ZUlucHV0UmFkaW9Hcm91cCAoJGlkLCAndHlwZScsICR0eXBlbGlzdCwgJHR5cGUsICcnLCAnJm5ic3A7JykpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX3dpZHRoJywgJHRoaXMtPkxhbmcoJ3RpdGxlX3dpZHRoJykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X3dpZHRoJywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICd3aWR0aCcsICR3aWR0aCwgNDAsIDUwKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfaGVpZ2h0JywgJHRoaXMtPkxhbmcoJ3RpdGxlX2hlaWdodCcpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9oZWlnaHQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ2hlaWdodCcsICRoZWlnaHQsIDQwLCA1MCkpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2NvbnRyb2xzJywkdGhpcy0+TGFuZygndGl0bGVfY29udHJvbHMnKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfY29udHJvbHMnLCAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsICdjb250cm9scycsIHRydWUsICRjb250cm9scykpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2NvbnRyb2xzX3NpemUnLCAkdGhpcy0+TGFuZygndGl0bGVfY29udHJvbHNfc2l6ZScpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9jb250cm9sc19zaXplJywgJHRoaXMtPkNyZWF0ZUlucHV0UmFkaW9Hcm91cCAoJGlkLCAnY29udHJvbHNfc2l6ZScsICRjb250cm9sc19zaXplbGlzdCwgJGNvbnRyb2xzX3NpemUsICcnLCAnJm5ic3A7JykpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX3R5cGVfY29udHJvbHMnLCR0aGlzLT5MYW5nKCd0aXRsZV90eXBlX2NvbnRyb2xzJykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X3R5cGVfY29udHJvbHMnLCAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsICd0eXBlX2NvbnRyb2xzJywgdHJ1ZSwgJHR5cGVfY29udHJvbHMpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9zaWRlYmFyJywkdGhpcy0+TGFuZygndGl0bGVfc2lkZWJhcicpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9zaWRlYmFyJywgJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCAnc2lkZWJhcicsIHRydWUsICRzaWRlYmFyKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfZGlyZWN0aW9ucycsJHRoaXMtPkxhbmcoJ3RpdGxlX2RpcmVjdGlvbnMnKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfZGlyZWN0aW9ucycsICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwgJ2RpcmVjdGlvbnMnLCB0cnVlLCAkZGlyZWN0aW9ucykpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX3pvb20nLCR0aGlzLT5MYW5nKCd0aXRsZV96b29tJykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X3pvb20nLCAkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsICd6b29tJywgJHpvb21saXN0LCAtMSwgJHVzZWR6b29tKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfem9vbV9lbmNvbXBhc3MnLCR0aGlzLT5MYW5nKCd0aXRsZV96b29tX2VuY29tcGFzcycpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF96b29tX2VuY29tcGFzcycsICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwgJ3pvb21fZW5jb21wYXNzJywgdHJ1ZSwgJHpvb21fZW5jb21wYXNzKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfc2NhbGVfY29udHJvbCcsJHRoaXMtPkxhbmcoJ3RpdGxlX3NjYWxlX2NvbnRyb2wnKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfc2NhbGVfY29udHJvbCcsICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwgJ3NjYWxlX2NvbnRyb2wnLCB0cnVlLCAkc2NhbGVfY29udHJvbCkpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2JvdW5kc19mdWRnZScsICR0aGlzLT5MYW5nKCd0aXRsZV9ib3VuZHNfZnVkZ2UnKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfYm91bmRzX2Z1ZGdlJywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdib3VuZHNfZnVkZ2UnLCAkYm91bmRzX2Z1ZGdlLCA0MCwgNTApKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9pbmZvX3dpbmRvdycsJHRoaXMtPkxhbmcoJ3RpdGxlX2luZm9fd2luZG93JykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X2luZm9fd2luZG93JywgJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCAnaW5mb193aW5kb3cnLCB0cnVlLCAkaW5mb193aW5kb3cpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9pbmZvX3RyaWdnZXInLCAkdGhpcy0+TGFuZygndGl0bGVfaW5mb190cmlnZ2VyJykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X2luZm9fdHJpZ2dlcicsICR0aGlzLT5DcmVhdGVJbnB1dFJhZGlvR3JvdXAgKCRpZCwgJ2luZm9fdHJpZ2dlcicsICRpbmZvX3RyaWdnZXJsaXN0LCAkaW5mb190cmlnZ2VyLCAnJywgJyZuYnNwOycpKTsKCi8vIFBhc3MgdGhlIGlkLCBzbyBpdCBjYW4gYmUgdXNlZCBpbiB0aGUgamF2YSBzY3JpcHQgb2YgdGhlIGVhc3lsb2NhdG9yIAokc21hcnR5LT5hc3NpZ24oJ2lkJywkaWQpOwoKLy8gUHJlcGFyZSB0aGUgc2V0dGluZ3MgZm9yIHRoZSBlYXN5bG9jYXRvcgokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2Vhc3lsb2NhdG9yJywgJHRoaXMtPkxhbmcoJ3RpdGxlX2Vhc3lsb2NhdG9yJykpOwokc21hcnR5LT5hc3NpZ24oJ2Vhc3lsb2NhdG9ybGF0JywgJGNlbnRlcl9sYXQpOwokc21hcnR5LT5hc3NpZ24oJ2Vhc3lsb2NhdG9ybG9uJywgJGNlbnRlcl9sb24pOwokc21hcnR5LT5hc3NpZ24oJ2Vhc3lsb2NhdG9ybGV2ZWwnLCAkdXNlZHpvb20pOwokc21hcnR5LT5hc3NpZ24oJ2Vhc3lsb2NhdG9yY3Vyc29yJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Vhc3lsb2NhdG9yY3Vyc29yJywgJ2Nyb3NzaGFpcicpKTsKCiRzbWFydHktPmFzc2lnbignaGlkZGVuJywgJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwgJ21hcF9pZCcsICRtYXBfaWQpKTsKJHNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnc3VibWl0JywgbGFuZygnc3VibWl0JykpKTsKJHNtYXJ0eS0+YXNzaWduKCdjYW5jZWwnLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnY2FuY2VsJywgbGFuZygnY2FuY2VsJykpKTsKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdlZGl0bWFwLnRwbCcpOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.editmarker.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyBHb29nbGVNYXBzIChpZiB5b3UgZG9uJ3Qga25vdyB0aGlzIG9uZSA6LSkgR29vZ2xlIGl0ISkuIEEgbW9kdWxlIGZvciBDTVMgLSBDTVMgTWFkZSBTaW1wbGUKIyBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgRHVrZXRvd24gCiMKIyBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIGNoYW5naW5nIGEgbWFya2VyCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMgVGhlIG1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL2dvb2dsZW1hcHMKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgokZ0NtcyA9IGNtc21zKCk7IGlmKCAhaXNfb2JqZWN0KCRnQ21zKSApIGV4aXQ7CiRkYiA9IGNtc21zKCktPkdldERiKCk7CgokdXNlcl9pZCA9ICcnOwppZiAoZ2V0X3VzZXJpZCgpICkgewoJJHVzZXJfaWQgPSBnZXRfdXNlcmlkKCk7Cn0KCmlmICghJHRoaXMtPkNoZWNrUGVybWlzc2lvbignVXNlIEdvb2dsZU1hcHMnKSkKewoJZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJywgYXJyYXkoJ1VzZSBHb29nbGVNYXBzJykpKTsKCXJldHVybjsKfQoKaWYgKGlzc2V0KCRwYXJhbXNbJ2NhbmNlbCddKSkKewoJJHBhcmFtcyA9IGFycmF5KCdhY3RpdmVfdGFiJyA9PiAnbWFya2VycycpOwoJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgJHBhcmFtcyk7Cn0KCiRtYXJrZXJfaWQgPSAnJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ21hcmtlcl9pZCddKSkgewoJJG1hcmtlcl9pZCA9ICRwYXJhbXNbJ21hcmtlcl9pZCddOwp9CgokdXNlZG1hcCA9ICcnOwppZiAoaXNzZXQoJHBhcmFtc1snbWFwJ10pKSB7CgkkdXNlZG1hcCA9ICRwYXJhbXNbJ21hcCddOwp9CgokaW5mbyA9ICcnOwppZiAoaXNzZXQoJHBhcmFtc1snaW5mbyddKSkgewoJJGluZm8gPSAkcGFyYW1zWydpbmZvJ107Cn0KCiRhZGRyZXNzID0gJyc7CmlmIChpc3NldCgkcGFyYW1zWydhZGRyZXNzJ10pKSB7CgkkYWRkcmVzcyA9ICRwYXJhbXNbJ2FkZHJlc3MnXTsKfQoKJGxhdCA9ICcnOwppZiAoaXNzZXQoJHBhcmFtc1snbGF0J10pKSB7CgkkbGF0ID0gJHBhcmFtc1snbGF0J107Cn0KCiRsb24gPSAnJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ2xvbiddKSkgewoJJGxvbiA9ICRwYXJhbXNbJ2xvbiddOwp9CgokaWNvbiA9ICcnOwppZiAoaXNzZXQoJHBhcmFtc1snaWNvbiddKSkgewoJJGljb24gPSAkcGFyYW1zWydpY29uJ107Cn0KCiRuYW1lID0gJyc7CmlmIChpc3NldCgkcGFyYW1zWyduYW1lJ10pKQp7CgkkbmFtZSA9ICRwYXJhbXNbJ25hbWUnXTsKCWlmICgkbmFtZSAhPSAnJykgewoJCSRxdWVyeSA9ICdVUERBVEUgJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9nb29nbGVtYXBzX21hcmtlcnMgU0VUCgkJCW1hcCA9ID8sIG5hbWUgPSA/LCBpbmZvID0gPywgYWRkcmVzcyA9ID8sIGxhdCA9ID8sIGxvbiA9ID8sIGljb24gPSA/CgkJCVdIRVJFIG1hcmtlcl9pZCA9ID8nOwoJCSRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCR1c2VkbWFwLCAkbmFtZSwgJGluZm8sICRhZGRyZXNzLCAkbGF0LCAkbG9uLCAkaWNvbiwgJG1hcmtlcl9pZCkpOwoJCSR0aGlzLT5TYXZlRWFzeUxvY2F0b3IoJGxhdCwgJGxvbik7CgkJCgkJJHBhcmFtcyA9IGFycmF5KCd0YWJfbWVzc2FnZSc9PiAnbWFya2VydXBkYXRlZCcsICdhY3RpdmVfdGFiJyA9PiAnbWFya2VycycpOwoJCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICRwYXJhbXMpOwoJfQp9CmVsc2UgewoJJHNtYXJ0eS0+YXNzaWduKCdlYXN5bG9jYXRvcmxhdCcsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxhdCcsIDQ0KSk7Cgkkc21hcnR5LT5hc3NpZ24oJ2Vhc3lsb2NhdG9ybG9uJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Vhc3lsb2NhdG9ybG9uJywgLTYzKSk7Cgkkc21hcnR5LT5hc3NpZ24oJ2Vhc3lsb2NhdG9ybGV2ZWwnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZWFzeWxvY2F0b3JsZXZlbCcpLCAxKTsKCSRwYXRoID0gY21zX2pvaW5fcGF0aCgkdGhpcy0+Y29uZmlnWydyb290X3VybCddLCd1cGxvYWRzJywkdGhpcy0+Z2V0TmFtZSgpLCdtYXJrZXJzJyk7CgkkcXVlcnkgPSAnU0VMRUNUICogRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX2dvb2dsZW1hcHNfbWFya2VycyBXSEVSRSBtYXJrZXJfaWQgPSA/JzsKCSRyb3cgPSAkZGItPkdldFJvdygkcXVlcnksIGFycmF5KCRtYXJrZXJfaWQpKTsKCWlmICgkcm93KQoJewoJCSRuYW1lID0gJHJvd1snbmFtZSddOwoJCSR1c2VkbWFwID0gJHJvd1snbWFwJ107CgkJLy8gUmV0cmlldmUgbWFwIHR5cGUgdXNlZCBvZiBjb25uZWN0ZWQgbWFwCgkJJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9nb29nbGVtYXBzX21hcHMgCgkJCVdIRVJFIG1hcF9pZCA9ID8nOwoJCSRyb3dtYXAgPSAkZGItPkdldFJvdygkcXVlcnksIGFycmF5KCR1c2VkbWFwKSk7CgkJaWYgKCRyb3dtYXApIHsKCQkJJHNtYXJ0eS0+YXNzaWduKCdlYXN5bG9jYXRvcmxhdCcsICRyb3dtYXBbJ2NlbnRlcl9sYXQnXSk7CgkJCSRzbWFydHktPmFzc2lnbignZWFzeWxvY2F0b3Jsb24nLCAkcm93bWFwWydjZW50ZXJfbG9uJ10pOwoJCQkkc21hcnR5LT5hc3NpZ24oJ2Vhc3lsb2NhdG9ybGV2ZWwnLCAkcm93bWFwWyd6b29tJ10pOwoJCQlzd2l0Y2ggKCRyb3dtYXBbJ3R5cGUnXSkgewoJCQkJY2FzZSAnaHlicmlkJzoKCQkJCQkkc21hcnR5LT5hc3NpZ24oJ21hcHR5cGUnLCAnSFlCUklEJyk7CgkJCQkJYnJlYWs7CgkJCQljYXNlICdzYXRlbGxpdGUnOgoJCQkJCSRzbWFydHktPmFzc2lnbignbWFwdHlwZScsICdTQVRFTExJVEUnKTsKCQkJCQlicmVhazsKCQkJCWNhc2UgJ3RlcnJhaW4nOgoJCQkJCSRzbWFydHktPmFzc2lnbignbWFwdHlwZScsICdURVJSQUlOJyk7CgkJCQkJYnJlYWs7CgkJCQlkZWZhdWx0OgoJCQkJCSRzbWFydHktPmFzc2lnbignbWFwdHlwZScsICdST0FETUFQJyk7CgkJCQkJYnJlYWs7CgkJCX0KCQl9CgoJCSRpbmZvID0gJHJvd1snaW5mbyddOwoJCSRhZGRyZXNzID0gJHJvd1snYWRkcmVzcyddOwoJCSRsYXQgPSAkcm93WydsYXQnXTsKCQkkbG9uID0gJHJvd1snbG9uJ107CgkJJGljb24gPSAkcm93WydpY29uJ107CgkJJHNtYXJ0eS0+YXNzaWduKCd1c2VkX2xhdCcsICRsYXQpOwoJCSRzbWFydHktPmFzc2lnbigndXNlZF9sb24nLCAkbG9uKTsKCQkkc21hcnR5LT5hc3NpZ24oJ3VzZWRfaWNvbicsICRwYXRoLkRJUkVDVE9SWV9TRVBBUkFUT1IuJGljb24pOwoJfQp9CgovLyBQcmVwYXJlIGEgbGlzdCBvZiBtYXBzCiRtYXBsaXN0ID0gYXJyYXkoKTsKJG1hcGxpc3QgPSBnb29nbGVtYXBzX3V0aWxzOjpnZXRfbGlzdF9tYXBzKCk7CgovLyBDaGVjayB3aGF0IHVzZXIgc2V0dGluZyBpcyBmb3IgR2xvYmFsIENvbnRlbnQgQmxvY2sgd3lzaXd5ZwokYWxsb3dfd3lzaXd5ZyA9IGdldF9wcmVmZXJlbmNlKCAkdXNlcl9pZCwgJ2djYl93eXNpd3lnJyApOwoKLy8gUHJlcGFyZSBhIGxpc3Qgb2YgaWNvbnMKLy8gUmVhZCB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbiB0aGUgaW1hZ2VzIG9mIHRoZSBtYXJrZXJzCiRwYXRoID0gJy4uJy5ESVJFQ1RPUllfU0VQQVJBVE9SLid1cGxvYWRzJy5ESVJFQ1RPUllfU0VQQVJBVE9SLiR0aGlzLT5nZXROYW1lKCkuRElSRUNUT1JZX1NFUEFSQVRPUi4nbWFya2Vycyc7Ci8vIE9wZW4gdGhpcyBkaXJlY3RvcnkgCiRtYXJrZXJkaXJlY3RvcnkgPSBvcGVuZGlyKCRwYXRoKTsKJGljb25saXN0ID0gYXJyYXkoKTsKCi8vIEdldCBlYWNoIGVudHJ5CndoaWxlKCRmaWxlID0gcmVhZGRpcigkbWFya2VyZGlyZWN0b3J5KSkgewoJJHBhdHRlcm49IihqcGd8cG5nfGpwZWd8Z2lmKSI7CglpZiAocHJlZ19tYXRjaCgkcGF0dGVybiwgJGZpbGUpKSB7CgkvL2lmICgkZmlsZSAhPSAnLicgJiYgJGZpbGUgIT0gJy4uJykgewoJCSRpY29ubGlzdFsnPGltZyBzcmM9IicuJHBhdGguRElSRUNUT1JZX1NFUEFSQVRPUi4kZmlsZS4nIiBhbHQ9IicuJGZpbGUuJyI+J10gPSAkZmlsZTsKCX0KfQoKLy8gQ2xvc2UgdGhlIGRpcmVjdG9yeQpjbG9zZWRpcigkbWFya2VyZGlyZWN0b3J5KTsKCiNEaXNwbGF5IHRlbXBsYXRlCiRzbWFydHktPmFzc2lnbignc3RhcnRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICdlZGl0bWFya2VyJywgJHJldHVybmlkKSk7CiRzbWFydHktPmFzc2lnbignZW5kZm9ybScsICR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX25hbWUnLCAkdGhpcy0+TGFuZygndGl0bGVfbmFtZScpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9uYW1lJywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICduYW1lJywgJG5hbWUsIDQwLCA4MCwgJ2NsYXNzPSJkZWZhdWx0Zm9jdXMiJykpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2JlbG9uZ3N0b21hcCcsICR0aGlzLT5MYW5nKCdiZWxvbmdzdG9tYXAnKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfYmVsb25nc3RvbWFwJywgJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCAnbWFwJywgJG1hcGxpc3QsIC0xLCAkdXNlZG1hcCkpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2luZm8nLCAkdGhpcy0+TGFuZygndGl0bGVfaW5mbycpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9pbmZvJywgJHRoaXMtPkNyZWF0ZVRleHRBcmVhKCRhbGxvd193eXNpd3lnLCAkaWQsICRpbmZvLCAnaW5mbycsICcnLCAnJywgJycsICcnLCAnODAnLCAnMycpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9hZGRyZXNzJywgJHRoaXMtPkxhbmcoJ2FkZHJlc3MnKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfYWRkcmVzcycsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnYWRkcmVzcycsICRhZGRyZXNzLCA0MCwgMjU1KSk7Ci8vIFBhc3MgdGhlIGlkLCBzbyBpdCBjYW4gYmUgdXNlZCBpbiB0aGUgamF2YSBzY3JpcHQgb2YgdGhlIGVhc3lsb2NhdG9yIAokc21hcnR5LT5hc3NpZ24oJ2lkJywkaWQpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2xhdCcsICR0aGlzLT5MYW5nKCdsYXRpdHVkZScpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9sYXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ2xhdCcsICRsYXQsIDQwLCAxMDApKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9sb24nLCAkdGhpcy0+TGFuZygnbG9uZ2l0dWRlJykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X2xvbicsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnbG9uJywgJGxvbiwgNDAsIDEwMCkpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2ljb24nLCAkdGhpcy0+TGFuZygnbWFya2VyaWNvbicpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9pY29uJywgJHRoaXMtPkNyZWF0ZUlucHV0UmFkaW9Hcm91cCAoJGlkLCAnaWNvbicsICRpY29ubGlzdCwgJGljb24sICcnLCAnJm5ic3A7JykpOwokc21hcnR5LT5hc3NpZ24oJ2xvY2F0aW9ucHJlY2lzaW9uJywgICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdsb2NhdGlvbnByZWNpc2lvbicsIDcpKTsKCi8vIFByZXBhcmUgdGhlIHNldHRpbmdzIGZvciB0aGUgZWFzeWxvY2F0b3IKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9lYXN5bG9jYXRvcicsICR0aGlzLT5MYW5nKCd0aXRsZV9lYXN5bG9jYXRvcicpKTsKJHNtYXJ0eS0+YXNzaWduKCdlYXN5bG9jYXRvcmN1cnNvcicsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmN1cnNvcicsICdjcm9zc2hhaXInKSk7Cgokc21hcnR5LT5hc3NpZ24oJ2hpZGRlbicsICR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsICdtYXJrZXJfaWQnLCAkbWFya2VyX2lkKSk7CiRzbWFydHktPmFzc2lnbignc3VibWl0JywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ3N1Ym1pdCcsIGxhbmcoJ3N1Ym1pdCcpKSk7CiRzbWFydHktPmFzc2lnbignY2FuY2VsJywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ2NhbmNlbCcsIGxhbmcoJ2NhbmNlbCcpKSk7CmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnZWRpdG1hcmtlci50cGwnKTsKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.editpolyline.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyBHb29nbGVNYXBzIChpZiB5b3UgZG9uJ3Qga25vdyB0aGlzIG9uZSA6LSkgR29vZ2xlIGl0ISkuIEEgbW9kdWxlIGZvciBDTVMgLSBDTVMgTWFkZSBTaW1wbGUKIyBDb3B5cmlnaHQgKGMpIDIwMTEgYnkgRHVrZXRvd24gCiMKIyBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIGNoYW5naW5nIGEgcG9seWxpbmUKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIyBUaGUgbW9kdWxlJ3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvZ29vZ2xlbWFwcwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiRnQ21zID0gY21zbXMoKTsgaWYoICFpc19vYmplY3QoJGdDbXMpICkgZXhpdDsKJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKCiR1c2VyX2lkID0gJyc7CmlmIChnZXRfdXNlcmlkKCkgKSB7CgkkdXNlcl9pZCA9IGdldF91c2VyaWQoKTsKfQoKaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdVc2UgR29vZ2xlTWFwcycpKQp7CgllY2hvICR0aGlzLT5TaG93RXJyb3JzKCR0aGlzLT5MYW5nKCdhY2Nlc3NkZW5pZWQnLCBhcnJheSgnVXNlIEdvb2dsZU1hcHMnKSkpOwoJcmV0dXJuOwp9CgppZiAoaXNzZXQoJHBhcmFtc1snY2FuY2VsJ10pKQp7CgkkcGFyYW1zID0gYXJyYXkoJ2FjdGl2ZV90YWInID0+ICdwb2x5bGluZXMnKTsKCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICRwYXJhbXMpOwp9CgokcG9seWxpbmVfaWQgPSAnJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ3BvbHlsaW5lX2lkJ10pKSB7CgkkcG9seWxpbmVfaWQgPSAkcGFyYW1zWydwb2x5bGluZV9pZCddOwp9CiRuYW1lID0gJyc7CmlmIChpc3NldCgkcGFyYW1zWyduYW1lJ10pKQp7CgkkbmFtZSA9ICRwYXJhbXNbJ25hbWUnXTsKfQokdXNlZG1hcCA9ICcnOwppZiAoaXNzZXQoJHBhcmFtc1snbWFwJ10pKSB7CgkkdXNlZG1hcCA9ICRwYXJhbXNbJ21hcCddOwp9CnJlcXVpcmVfb25jZSgnbGliL0dvb2dsZU1hcEFQSS0nLiR0aGlzLT5fZ29vZ2xlYXBpX3ZlcnNpb24uJy9Hb29nbGVNYXBBUEkuY2xhc3MucGhwJyk7CiRtYXAgPSBuZXcgR29vZ2xlTWFwQVBJKCR0aGlzLT5HZXROYW1lKCkuJHVzZWRtYXAsICR0aGlzLT5HZXROYW1lKCkpOwoKJHN0cm9rZWNvbG9yID0gJyc7CmlmIChpc3NldCgkcGFyYW1zWydzdHJva2Vjb2xvciddKSkgewoJJHN0cm9rZWNvbG9yID0gJHBhcmFtc1snc3Ryb2tlY29sb3InXTsKfQoKJHN0cm9rZW9wYWNpdHkgPSAnMS4wJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ3N0cm9rZW9wYWNpdHknXSkpIHsKCSRzdHJva2VvcGFjaXR5ID0gJHBhcmFtc1snc3Ryb2tlb3BhY2l0eSddOwp9CiRzdHJva2V3ZWlnaHQgPSAnMic7CmlmIChpc3NldCgkcGFyYW1zWydzdHJva2V3ZWlnaHQnXSkpIHsKCSRzdHJva2V3ZWlnaHQgPSAkcGFyYW1zWydzdHJva2V3ZWlnaHQnXTsKfQokdXNlZGRpc3RhbmNldW9tID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Rpc3RhbmNldW9tJywgJ0snKTs7CmlmIChpc3NldCgkcGFyYW1zWydkaXN0YW5jZXVvbSddKSkgewoJJHVzZWRkaXN0YW5jZXVvbSA9ICRwYXJhbXNbJ2Rpc3RhbmNldW9tJ107Cn0KCiRzZXEgPSAnJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ3NlcSddKSkgeyRzZXEgPSAkcGFyYW1zWydzZXEnXTt9CiRsYXQgPSAnJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ2xhdCddKSkgewoJJGxhdCA9ICRwYXJhbXNbJ2xhdCddOwp9CmVsc2UgewoJJGVhc3lsb2NhdG9ybGF0ID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Vhc3lsb2NhdG9ybGF0JywgNDQpOwp9CgokbG9uID0gJyc7CmlmIChpc3NldCgkcGFyYW1zWydsb24nXSkpIHsKCSRsb24gPSAkcGFyYW1zWydsb24nXTsKfQplbHNlIHsKCSRlYXN5bG9jYXRvcmxvbiA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxvbicsIC02Myk7Cn0KCiRkZXNjcmlwdGlvbiA9ICcnOwppZiAoaXNzZXQoJHBhcmFtc1snZGVzY3JpcHRpb24nXSkpIHsKCSRkZXNjcmlwdGlvbiA9ICRwYXJhbXNbJ2Rlc2NyaXB0aW9uJ107Cn0KCi8vIEVycm9yIGNoZWNraW5nCiRlcnJmbmQgPSBmYWxzZTsKJGVycm9yZm91bmQgPSAnJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdCddKSkgewoJaWYgKCRuYW1lID09ICcnKSB7CgkJJGVycmZuZCA9IHRydWU7CgkJJGVycm9yZm91bmQgLj0gJHRoaXMtPkxhbmcoJ25vbmFtZWdpdmVuJyk7Cgl9CglpZiAoJHN0cm9rZW9wYWNpdHkgPCAwIHx8ICRzdHJva2VvcGFjaXR5ID4gMSkgewoJCSRlcnJmbmQgPSB0cnVlOwoJCWlmICgkZXJyb3Jmb3VuZCAhPSAnJykgeyRlcnJvcmZvdW5kIC49ICc8YnIgLz4nO30KCQkkZXJyb3Jmb3VuZCAuPSAkdGhpcy0+TGFuZygnaW52YWxpZG9wYWNpdHknKTsKCX0KfQppZiAoaXNzZXQoJHBhcmFtc1snc3VibWl0J10pICYmICRlcnJmbmQgPT0gZmFsc2UpIHsKCSRxdWVyeSA9ICdVUERBVEUgJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9nb29nbGVtYXBzX3BvbHlsaW5lcyBTRVQKCQltYXBfaWQgPSA/LCBuYW1lID0gPywgc3Ryb2tlY29sb3IgPSA/LCBzdHJva2VvcGFjaXR5ID0gPywgc3Ryb2tld2VpZ2h0ID0gPywKCQlkaXN0YW5jZXVvbSA9ID8KCQlXSEVSRSBwb2x5bGluZV9pZCA9ID8nOwoJJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHVzZWRtYXAsICRuYW1lLCBzdHJ0b3VwcGVyKCRzdHJva2Vjb2xvciksICRzdHJva2VvcGFjaXR5LCAKCQkkc3Ryb2tld2VpZ2h0LCAkdXNlZGRpc3RhbmNldW9tLCAkcG9seWxpbmVfaWQpKTsKCgkkcGFyYW1zID0gYXJyYXkoJ3RhYl9tZXNzYWdlJz0+ICdwb2x5bGluZXVwZGF0ZWQnLCAnYWN0aXZlX3RhYicgPT4gJ3BvbHlsaW5lcycpOwoJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgJHBhcmFtcyk7Cn0KZWxzZSB7CglpZiAoJGVycmZuZCkgewoJCWVjaG8gJHRoaXMtPlNob3dFcnJvcnMoJGVycm9yZm91bmQpOwoJfQoJZWxzZSB7CgkJJHNtYXJ0eS0+YXNzaWduKCdlYXN5bG9jYXRvcmxhdCcsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxhdCcsIDQ0KSk7CgkJJHNtYXJ0eS0+YXNzaWduKCdlYXN5bG9jYXRvcmxvbicsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxvbicsIC02MykpOwoJCSRzbWFydHktPmFzc2lnbignZWFzeWxvY2F0b3JsZXZlbCcsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxldmVsJyksIDEpOwoJCSRxdWVyeSA9ICdTRUxFQ1QgKiBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfZ29vZ2xlbWFwc19wb2x5bGluZXMgV0hFUkUgcG9seWxpbmVfaWQgPSA/JzsKCQkkcm93ID0gJGRiLT5HZXRSb3coJHF1ZXJ5LCBhcnJheSgkcG9seWxpbmVfaWQpKTsKCQlpZiAoJHJvdykKCQl7CgkJCSRuYW1lID0gJHJvd1snbmFtZSddOwoJCQkkdXNlZG1hcCA9ICRyb3dbJ21hcF9pZCddOwoJCQkvLyBSZXRyaWV2ZSBtYXAgdHlwZSB1c2VkIG9mIGNvbm5lY3RlZCBtYXAKCQkJJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9nb29nbGVtYXBzX21hcHMgCgkJCQlXSEVSRSBtYXBfaWQgPSA/JzsKCQkJJHJvd21hcCA9ICRkYi0+R2V0Um93KCRxdWVyeSwgYXJyYXkoJHVzZWRtYXApKTsKCQkJaWYgKCRyb3dtYXApIHsKCQkJCSRzbWFydHktPmFzc2lnbignZWFzeWxvY2F0b3JsYXQnLCAkcm93bWFwWydjZW50ZXJfbGF0J10pOwoJCQkJJHNtYXJ0eS0+YXNzaWduKCdlYXN5bG9jYXRvcmxvbicsICRyb3dtYXBbJ2NlbnRlcl9sb24nXSk7CgkJCQkkc21hcnR5LT5hc3NpZ24oJ2Vhc3lsb2NhdG9ybGV2ZWwnLCAkcm93bWFwWyd6b29tJ10pOwoJCQkJc3dpdGNoICgkcm93bWFwWyd0eXBlJ10pIHsKCQkJCQljYXNlICdoeWJyaWQnOgoJCQkJCQkkc21hcnR5LT5hc3NpZ24oJ21hcHR5cGUnLCAnSFlCUklEJyk7CgkJCQkJCWJyZWFrOwoJCQkJCWNhc2UgJ3NhdGVsbGl0ZSc6CgkJCQkJCSRzbWFydHktPmFzc2lnbignbWFwdHlwZScsICdTQVRFTExJVEUnKTsKCQkJCQkJYnJlYWs7CgkJCQkJY2FzZSAndGVycmFpbic6CgkJCQkJCSRzbWFydHktPmFzc2lnbignbWFwdHlwZScsICdURVJSQUlOJyk7CgkJCQkJCWJyZWFrOwoJCQkJCWRlZmF1bHQ6CgkJCQkJCSRzbWFydHktPmFzc2lnbignbWFwdHlwZScsICdST0FETUFQJyk7CgkJCQkJCWJyZWFrOwoJCQkJfQoJCQl9CgkKCQkJJHN0cm9rZWNvbG9yID0gJHJvd1snc3Ryb2tlY29sb3InXTsKCQkJJHN0cm9rZW9wYWNpdHkgPSAkcm93WydzdHJva2VvcGFjaXR5J107CgkJCSRzdHJva2V3ZWlnaHQgPSAkcm93WydzdHJva2V3ZWlnaHQnXTsKCQkJJHVzZWRkaXN0YW5jZXVvbSA9ICRyb3dbJ2Rpc3RhbmNldW9tJ107CgkJCSRodW1hbmRpc3RhbmNldW9tID0gZ29vZ2xlbWFwc191dGlsczo6Z2V0X2h1bWFuZGlzdGFuY2VfdW9tKCR1c2VkZGlzdGFuY2V1b20pOwoJCQlzd2l0Y2ggKCR1c2VkZGlzdGFuY2V1b20pIHsKCQkJCWNhc2UgJ0MnOgoJCQkJY2FzZSAnSSc6CgkJCQkJJHNtYXJ0eS0+YXNzaWduKCdzdHJmJywgJyUuMGYnKTsKCQkJCQlicmVhazsKCQkJCWNhc2UgJ1QnOgoJCQkJY2FzZSAnRic6CgkJCQkJJHNtYXJ0eS0+YXNzaWduKCdzdHJmJywgJyUuMWYnKTsKCQkJCQlicmVhazsKCQkJCWRlZmF1bHQ6CgkJCQkJJHNtYXJ0eS0+YXNzaWduKCdzdHJmJywgJyUuM2YnKTsKCQkJCQlicmVhazsKCQkJfQoJCX0KCX0KfQovLyBBZGQgdGhlIGxvY2F0aW9uIHRvIHRoZSBwYXRoCmlmIChpc3NldCgkcGFyYW1zWydhZGRsb2NhdGlvbiddKSAmJiAkbGF0ICE9ICcnICYmICRsb24gIT0gJycgKSB7CglpZiAoJHNlcSAhPSAnJyAmJiAkc2VxID4gMCAmJiAkc2VxIDwgOTk5OTk5KSB7CgkJLy8gU2VxdWVuY2UgaGFzIGJlZW4gcHJvdmlkZWQgYnkgdXNlcgoJfQoJZWxzZSB7CgkJJHNlcWluY3JlbWVudCA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzZXFpbmNyZW1lbnQnLCAxMCk7CgkJJHF1ZXJ5ID0gJ1NFTEVDVCBNQVgoc2VxKSBBUyBtYXhzZXEgRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX2dvb2dsZW1hcHNfcG9seWxpbmVwYXJ0cyAKCQkJV0hFUkUgcG9seWxpbmVfaWQgPSA/JzsKCQkkcm93ID0gJGRiLT5HZXRSb3coJHF1ZXJ5LCBhcnJheSgkcG9seWxpbmVfaWQpKTsKCQlpZiAoJHJvdykKCQl7CgkJCSRzZXEgPSAkcm93WydtYXhzZXEnXSArICRzZXFpbmNyZW1lbnQ7CgkJfQoJCWVsc2UgewoJCQkkc2VxID0gJHNlcWluY3JlbWVudDsKCQl9Cgl9CgkkcHBhZGRlZCA9IGdvb2dsZW1hcHNfdXRpbHM6Omluc2VydF9wb2x5bGluZV9wYXJ0KCRwb2x5bGluZV9pZCwgJHNlcSwgCgkJJGRlc2NyaXB0aW9uLCAkbGF0LCAkbG9uKTsKfQoKLy8gUmVidWlsZCB0aGUgbGlzdCBvZiBsb2NhdGlvbnMgYXZhaWxhYmxlIGZvciB0aGlzIHBvbHlsaW5lCiRwYXRob25tYXAgPSAnJzsKJG1hcHNwb3RzID0gMDsKJGRpc3RhbmNlID0gMDsKJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9nb29nbGVtYXBzX3BvbHlsaW5lcGFydHMgCglXSEVSRSBwb2x5bGluZV9pZCA9ID8KCU9SREVSIEJZIHNlcSc7CiRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRwb2x5bGluZV9pZCkpOwokZW50cnlhcnJheSA9IGFycmF5KCk7CndoaWxlICgkZGJyZXN1bHQgJiYgJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkKewoJJG9uZXJvdyA9IG5ldyBzdGRDbGFzcygpOwoKCSRvbmVyb3ctPnBvbHlsaW5lX2lkID0gJHJvd1sncG9seWxpbmVfaWQnXTsKCSRvbmVyb3ctPnBvbHlsaW5lcGFydF9pZCA9ICRyb3dbJ3BvbHlsaW5lcGFydF9pZCddOwoJJG9uZXJvdy0+c2VxID0gJHJvd1snc2VxJ107Cgkkb25lcm93LT5kZXNjcmlwdGlvbiA9ICRyb3dbJ2Rlc2NyaXB0aW9uJ107Cgkkb25lcm93LT5sYXQgPSAkcm93WydsYXQnXTsKCSRvbmVyb3ctPmxvbiA9ICRyb3dbJ2xvbiddOwoJJG9uZXJvdy0+ZGVsZXRlbGluayA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2RlbGV0ZXJvdycsICRyZXR1cm5pZCwgJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9kZWxldGUuZ2lmJywgJHRoaXMtPkxhbmcoJ2RlbGV0ZScpLCcnLCcnLCdzeXN0ZW1pY29uJyksIGFycmF5KCd0YWJsZSc9PidQb2x5bGluZXBhcnRzJywncG9seWxpbmVwYXJ0X2lkJz0+JHJvd1sncG9seWxpbmVwYXJ0X2lkJ10pKTsKCgkkZW50cnlhcnJheVtdID0gJG9uZXJvdzsKCS8vIFVwZGF0ZSB0aGUgbGlzdCBvZiBsb2NhdGlvbnMgZm9yIHRoZSBtYXAKCWlmICgkbWFwc3BvdHMgPT0gMCkgewoJCSRtYXBzcG90cysrOwoJCSRwcmV2bGF0ID0gJHJvd1snbGF0J107CgkJJHByZXZsb24gPSAkcm93Wydsb24nXTsKCX0KCWVsc2UgewoJCSRwYXRob25tYXAgLj0gJywgJzsKCQkvLyBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGJldHdlZW4gY3VycmVudCBhbmQgcHJldmlvdXMgbG9jYXRpb24KCQkkZGlzdGFuY2UgKz0gJG1hcC0+Z2VvR2V0RGlzdGFuY2UoJHByZXZsYXQsICRwcmV2bG9uLCAkcm93WydsYXQnXSwgCgkJCSRyb3dbJ2xvbiddLCAkdXNlZGRpc3RhbmNldW9tKTsKCQkkcHJldmxhdCA9ICRyb3dbJ2xhdCddOwoJCSRwcmV2bG9uID0gJHJvd1snbG9uJ107Cgl9CgkkcGF0aG9ubWFwIC49ICduZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKCcuJHJvd1snbGF0J10gLiAnLCAnIC4gJHJvd1snbG9uJ10gLiAnKSc7Cgp9Cgokc21hcnR5LT5hc3NpZ25fYnlfcmVmKCdsb2NhdGlvbnMnLCAkZW50cnlhcnJheSk7CiRzbWFydHktPmFzc2lnbignbG9jYXRpb25jb3VudCcsIGNvdW50KCRlbnRyeWFycmF5KSk7CiRzbWFydHktPmFzc2lnbigncGF0aCcsICRwYXRob25tYXApOwokc21hcnR5LT5hc3NpZ24oJ2Rpc3RhbmNlJywgJGRpc3RhbmNlKTsKCiRzbWFydHktPmFzc2lnbigndXNlZF9sYXQnLCAwKTsKJHNtYXJ0eS0+YXNzaWduKCd1c2VkX2xvbicsIDApOwokc21hcnR5LT5hc3NpZ24oJ3VzZWRfaWNvbicsIDApOwoKLy8gQnVpbGQgcGF0aCB0byBjb2xvciBzZWxlY3RvcgokY29sb3JzZWxlY3RvcnBhdGggPSBjbXNfam9pbl9wYXRoKCcuLicsJ21vZHVsZXMnLCR0aGlzLT5nZXROYW1lKCksJ3RlbXBsYXRlcycsJzIwMWEuanMnKTsKJHNtYXJ0eS0+YXNzaWduKCdjb2xvcnNlbGVjdG9ycGF0aCcsICRjb2xvcnNlbGVjdG9ycGF0aCk7CgovLyBQcmVwYXJlIGEgbGlzdCBvZiBtYXBzCiRtYXBsaXN0ID0gYXJyYXkoKTsKJG1hcGxpc3QgPSBnb29nbGVtYXBzX3V0aWxzOjpnZXRfbGlzdF9tYXBzKCk7CgovLyBQcmVwYXJlIGEgbGlzdCBvZiBkaXN0YW5jZSB1b20KJGRpc3RhbmNldW9tbGlzdCA9IGFycmF5KCk7CiRkaXN0YW5jZXVvbWxpc3QgPSBnb29nbGVtYXBzX3V0aWxzOjpnZXRfZGlzdGFuY2VfdW9tKCk7CgojRGlzcGxheSB0ZW1wbGF0ZQokc21hcnR5LT5hc3NpZ24oJ3N0YXJ0Zm9ybScsICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAnZWRpdHBvbHlsaW5lJywgJHJldHVybmlkKSk7CiRzbWFydHktPmFzc2lnbignZW5kZm9ybScsICR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX25hbWUnLCAkdGhpcy0+TGFuZygndGl0bGVfbmFtZScpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9uYW1lJywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICduYW1lJywgJG5hbWUsIDQwLCA4MCwgJ2NsYXNzPSJkZWZhdWx0Zm9jdXMiJykpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2JlbG9uZ3N0b21hcCcsICR0aGlzLT5MYW5nKCdiZWxvbmdzdG9tYXAnKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfYmVsb25nc3RvbWFwJywgJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCAnbWFwJywgJG1hcGxpc3QsIC0xLCAkdXNlZG1hcCkpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2NvbG9yJywgJHRoaXMtPkxhbmcoJ3RpdGxlX2NvbG9yJykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X2NvbG9yJywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdzdHJva2Vjb2xvcicsICRzdHJva2Vjb2xvciwgNywgNykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X3NhbXBsZWNvbG9yJywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdzYW1wbGVjb2xvcicsICcnLCAxLCAxLCAnc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICcuJHN0cm9rZWNvbG9yLiciJykpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX29wYWNpdHknLCAkdGhpcy0+TGFuZygndGl0bGVfb3BhY2l0eScpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9vcGFjaXR5JywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdzdHJva2VvcGFjaXR5JywgJHN0cm9rZW9wYWNpdHksIDMsIDMpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV93ZWlnaHQnLCAkdGhpcy0+TGFuZygndGl0bGVfd2VpZ2h0JykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X3dlaWdodCcsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnc3Ryb2tld2VpZ2h0JywgJHN0cm9rZXdlaWdodCwgMiwgMikpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2Rpc3RhbmNldW9tJywgJHRoaXMtPkxhbmcoJ3RpdGxlX2Rpc3RhbmNldW9tJykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X2Rpc3RhbmNldW9tJywgJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCAnZGlzdGFuY2V1b20nLCAkZGlzdGFuY2V1b21saXN0LCAtMSwgJHVzZWRkaXN0YW5jZXVvbSkpOwoKLy8gUGFzcyB0aGUgaWQsIHNvIGl0IGNhbiBiZSB1c2VkIGluIHRoZSBqYXZhIHNjcmlwdCBvZiB0aGUgZWFzeWxvY2F0b3IgCiRzbWFydHktPmFzc2lnbignaWQnLCRpZCk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfc2VxJywgJHRoaXMtPkxhbmcoJ3RpdGxlX3NlcScpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9kZWwnLCAkdGhpcy0+TGFuZygndGl0bGVfZGVsJykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X3NlcScsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnc2VxJywgJycsIDQsIDYpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9sYXQnLCAkdGhpcy0+TGFuZygnbGF0aXR1ZGUnKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfbGF0JywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdsYXQnLCAkbGF0LCAxNSwgMTAwKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfbG9uJywgJHRoaXMtPkxhbmcoJ2xvbmdpdHVkZScpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9sb24nLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ2xvbicsICRsb24sIDE1LCAxMDApKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9kZXNjcmlwdGlvbicsICR0aGlzLT5MYW5nKCd0aXRsZV9kZXNjcmlwdGlvbicpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9kZXNjcmlwdGlvbicsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnZGVzY3JpcHRpb24nLCAkZGVzY3JpcHRpb24sIDUwLCAyNTUpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9kaXN0YW5jZScsICR0aGlzLT5MYW5nKCd0aXRsZV9kaXN0YW5jZScpKTsKJHNtYXJ0eS0+YXNzaWduKCdkaXN0YW5jZXVvbScsICRodW1hbmRpc3RhbmNldW9tKTsKJHNtYXJ0eS0+YXNzaWduKCdsb2NhdGlvbnByZWNpc2lvbicsICAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbG9jYXRpb25wcmVjaXNpb24nLCA3KSk7CgovLyBQcmVwYXJlIHRoZSBzZXR0aW5ncyBmb3IgdGhlIGVhc3lsb2NhdG9yCiRzbWFydHktPmFzc2lnbignZWRpdHBvbHlsaW5lJywgJzEnKTsKJHNtYXJ0eS0+YXNzaWduKCdwYXRoX2NvbG9yJywgJyInLiRzdHJva2Vjb2xvci4nIicpOwokc21hcnR5LT5hc3NpZ24oJ3BhdGhfb3BhY2l0eScsICRzdHJva2VvcGFjaXR5KTsKJHNtYXJ0eS0+YXNzaWduKCdwYXRoX3dlaWdodCcsICRzdHJva2V3ZWlnaHQpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2xvY2F0aW9ucycsICR0aGlzLT5MYW5nKCd0aXRsZV9sb2NhdGlvbnMnKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfZWFzeWxvY2F0b3InLCAkdGhpcy0+TGFuZygndGl0bGVfZWFzeWxvY2F0b3InKSk7CiRzbWFydHktPmFzc2lnbignZWFzeWxvY2F0b3JjdXJzb3InLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZWFzeWxvY2F0b3JjdXJzb3InLCAnY3Jvc3NoYWlyJykpOwokc21hcnR5LT5hc3NpZ24oJ2FkZGxvY2F0aW9uJywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ2FkZGxvY2F0aW9uJywgJHRoaXMtPkxhbmcoJ2FkZGxvY2F0aW9uJykpKTsKCiRzbWFydHktPmFzc2lnbignaGlkZGVuJywgJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwgJ3BvbHlsaW5lX2lkJywgJHBvbHlsaW5lX2lkKSk7CiRzbWFydHktPmFzc2lnbignc3VibWl0JywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ3N1Ym1pdCcsIGxhbmcoJ3N1Ym1pdCcpKSk7CiRzbWFydHktPmFzc2lnbignc3VibWl0bG9jYXRpb25zJywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ3N1Ym1pdGxvY2F0aW9ucycsIGxhbmcoJ3N1Ym1pdCcpKSk7CiRzbWFydHktPmFzc2lnbignY2FuY2VsJywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ2NhbmNlbCcsIGxhbmcoJ2NhbmNlbCcpKSk7CmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnZWRpdHBvbHlsaW5lLnRwbCcpOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.exportpolyline_gpx.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyBHb29nbGVNYXBzIChpZiB5b3UgZG9uJ3Qga25vdyB0aGlzIG9uZSA6LSkgR29vZ2xlIGl0ISkuIEEgbW9kdWxlIGZvciBDTVMgLSBDTVMgTWFkZSBTaW1wbGUKIyBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgRHVrZXRvd24gCiMKIyBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIGFkZGluZyBhIG1hcmtlcgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9nb29nbGVtYXBzCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKJGdDbXMgPSBjbXNtcygpOyBpZiggIWlzX29iamVjdCgkZ0NtcykgKSBleGl0OwoKaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdVc2UgR29vZ2xlTWFwcycpKSB7CgllY2hvICR0aGlzLT5TaG93RXJyb3JzKCR0aGlzLT5MYW5nKCdhY2Nlc3NkZW5pZWQnLCBhcnJheSgnVXNlIEdvb2dsZU1hcHMnKSkpOwoJcmV0dXJuOwp9CmlmKCAhaXNzZXQoJHBhcmFtc1sncG9seWxpbmVfaWQnXSkgKSByZXR1cm47CgokcG9seWxpbmVfaWQgPSAkcGFyYW1zWydwb2x5bGluZV9pZCddOwokbmFtZSA9ICRwYXJhbXNbJ25hbWUnXTsKCiRmaWxlbmFtZSA9ICRuYW1lLicuZ3B4JzsKJHNtYXJ0eS0+YXNzaWduKCdwb2x5bGluZV9uYW1lJywgJG5hbWUpOwokc21hcnR5LT5hc3NpZ24oJ2NyZWF0ZWQnLCBkYXRlKCJZLW0tZCIpKTsKJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9nb29nbGVtYXBzX3BvbHlsaW5lcGFydHMgCglXSEVSRSBwb2x5bGluZV9pZCA9ID8KCU9SREVSIEJZIHNlcSc7CiRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRwb2x5bGluZV9pZCkpOwoKJHdheXBvaW50cyA9IGFycmF5KCk7CndoaWxlICgkZGJyZXN1bHQgJiYgJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkgewoJJG9uZXJvdyA9IG5ldyBzdGRDbGFzcygpOwoKCSRvbmVyb3ctPmxhdCA9ICciJy4kcm93WydsYXQnXS4nIic7Cgkkb25lcm93LT5sb24gPSAnIicuJHJvd1snbG9uJ10uJyInOwoJaWYgKCRyb3dbJ2Rlc2NyaXB0aW9uJ10gIT0gJycpIHsKCQkkb25lcm93LT5kZXNjcmlwdGlvbiA9ICc8IVtDREFUQVsnLiRyb3dbJ2Rlc2NyaXB0aW9uJ107Cgl9CgllbHNlIHsKCQkkb25lcm93LT5kZXNjcmlwdGlvbiA9ICcnOwoJfQoJCgkkd2F5cG9pbnRzW10gPSAkb25lcm93Owp9CiRzbWFydHktPmFzc2lnbl9ieV9yZWYoJ3dheXBvaW50cycsJHdheXBvaW50cyk7Ci8vIEluaXRpYWxpemUgdGhlIHdheSB0aGUgb3V0cHV0IGlzIHNldCBhcyB3YXlwb2ludCwgcm91dGUgb3IgdHJhY2sKJHNtYXJ0eS0+YXNzaWduKCdncHhleHBvcnR0eXBlJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2dweGV4cG9ydHR5cGUnLCAndHJrJykpOyAKCmlmKGluaV9nZXQoJ3psaWIub3V0cHV0X2NvbXByZXNzaW9uJykpCiAgewogICAgaW5pX3NldCgnemxpYi5vdXRwdXRfY29tcHJlc3Npb24nLCAnT2ZmJyk7CiAgfQoKaWYoIWluaV9nZXRfYm9vbGVhbignc2FmZV9tb2RlJykpCiAgewogICAgc2V0X3RpbWVfbGltaXQoMCk7CiAgfQoKLy8gZ2V0IHRoZSBkYXRhCiRoYW5kbGVycyA9IG9iX2xpc3RfaGFuZGxlcnMoKTsgCmZvciAoJGNudCA9IDA7ICRjbnQgPCBzaXplb2YoJGhhbmRsZXJzKTsgJGNudCsrKSB7IG9iX2VuZF9jbGVhbigpOyB9CiRkYXRhID0gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgncG9seWxpbmVfZ3B4LnRwbCcpOwoKaGVhZGVyKCdQcmFnbWE6IHB1YmxpYycpOwpoZWFkZXIoJ0V4cGlyZXM6IDAnKTsKaGVhZGVyKCdDYWNoZS1Db250cm9sOiBtdXN0LXJldmFsaWRhdGUsIHBvc3QtY2hlY2s9MCwgcHJlLWNoZWNrPTAnKTsKaGVhZGVyKCdDYWNoZS1Db250cm9sOiBwcml2YXRlJyxmYWxzZSk7CmhlYWRlcignQ29udGVudC1EZXNjcmlwdGlvbjogRmlsZSBUcmFuc2ZlcicpOwpoZWFkZXIoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyk7CmhlYWRlcigiQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9XCIkZmlsZW5hbWVcIiIgKTsKaGVhZGVyKCdDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiaW5hcnknKTsKaGVhZGVyKCdDb250ZW50LUxlbmd0aDogJyAuIHN0cmxlbigkZGF0YSkpOwplY2hvICRkYXRhOwoKQGZsdXNoKCk7IEBvYl9mbHVzaCgpOyBAb2JfZmx1c2goKTsKLy8gRU9GCj8+]]></data>
	</file>
	<file>
	  <filename>/action.savesettings.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyBHb29nbGVNYXBzLiBBIG1vZHVsZSBmb3IgQ01TIC0gQ01TIE1hZGUgU2ltcGxlCiMgVGhpcyBtb2R1bGUgaGFzIHNwZWNpYWxseSB3cml0dGVuIGZvciB0aGUgZmlyc3QgRHV0Y2ggV29ya3Nob3Agb24gQ01TTVMgaGVsZCBKYW51YXJpIDI0dGggMjAwOQojIENvcHlyaWdodCAoYykgMjAwOSBieSBEdWtldG93biA8ZHVrZXRvd25AbWFudG94Lm5sPgojCiMgVGhpcyBmdW5jdGlvbiBhbGxvd3MgdGhlIGFkbWluaXN0cmF0b3IgdG8gdXBkYXRlIHRoZSBwcmVmZXJlbmNlcwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9nb29nbGVtYXBzCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKJGdDbXMgPSBjbXNtcygpOyBpZiggIWlzX29iamVjdCgkZ0NtcykgKSBleGl0OwoKaWYoICEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCAnVXNlIEdvb2dsZU1hcHMnICkgKQp7CiAgcmV0dXJuOwp9CgokdGhpcy0+U2V0UHJlZmVyZW5jZSgndXNlY2FjaGUnLCBpc3NldCgkcGFyYW1zWyd1c2VjYWNoZSddKSA/ICcxJyA6ICcwJyApOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnbG9va3Vwc2VydmljZScsIGlzc2V0KCRwYXJhbXNbJ2xvb2t1cHNlcnZpY2UnXSkgPyAkcGFyYW1zWydsb29rdXBzZXJ2aWNlJ10gOiAnWUFIT08nKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ3lhaG9vYXBpZCcsIGlzc2V0KCRwYXJhbXNbJ3lhaG9vYXBpZCddKSA/ICRwYXJhbXNbJ3lhaG9vYXBpZCddIDogJGlkKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ3VzZW1hcmtlcnNoYWRvd3MnLCBpc3NldCgkcGFyYW1zWyd1c2VtYXJrZXJzaGFkb3dzJ10pID8gJzEnIDogJzAnICk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxldmVsJywgaXNzZXQoJHBhcmFtc1snZWFzeWxvY2F0b3JsZXZlbCddKSA/ICRwYXJhbXNbJ2Vhc3lsb2NhdG9ybGV2ZWwnXSA6IDEwICk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdkZWZhdWx0bWFwdHlwZScsIGlzc2V0KCRwYXJhbXNbJ2RlZmF1bHRtYXB0eXBlJ10pID8gJHBhcmFtc1snZGVmYXVsdG1hcHR5cGUnXSA6ICdtYXAnICk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxhdCcsIGlzc2V0KCRwYXJhbXNbJ2Vhc3lsb2NhdG9ybGF0J10pID8gJHBhcmFtc1snZWFzeWxvY2F0b3JsYXQnXSA6IDM3ICk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxvbicsIGlzc2V0KCRwYXJhbXNbJ2Vhc3lsb2NhdG9ybG9uJ10pID8gJHBhcmFtc1snZWFzeWxvY2F0b3Jsb24nXSA6IC03NCApOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnZWFzeWxvY2F0b3JzYXZlbGFzdCcsIGlzc2V0KCRwYXJhbXNbJ2Vhc3lsb2NhdG9yc2F2ZWxhc3QnXSkgPyAnMScgOiAnMCcgICk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmN1cnNvcicsIGlzc2V0KCRwYXJhbXNbJ2Vhc3lsb2NhdG9yY3Vyc29yJ10pID8gJHBhcmFtc1snZWFzeWxvY2F0b3JjdXJzb3InXSA6ICdjcm9zc2hhaXInICk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdzZXFpbmNyZW1lbnQnLCBpc3NldCgkcGFyYW1zWydzZXFpbmNyZW1lbnQnXSkgPyAkcGFyYW1zWydzZXFpbmNyZW1lbnQnXSA6IDEwICk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdsb2NhdGlvbnByZWNpc2lvbicsIGlzc2V0KCRwYXJhbXNbJ2xvY2F0aW9ucHJlY2lzaW9uJ10pID8gJHBhcmFtc1snbG9jYXRpb25wcmVjaXNpb24nXSA6IDcgKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2Rpc3RhbmNldW9tJywgaXNzZXQoJHBhcmFtc1snZGlzdGFuY2V1b20nXSkgPyAkcGFyYW1zWydkaXN0YW5jZXVvbSddIDogJ0snICk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdncHhleHBvcnR0eXBlJywgaXNzZXQoJHBhcmFtc1snZ3B4ZXhwb3J0dHlwZSddKSA/ICRwYXJhbXNbJ2dweGV4cG9ydHR5cGUnXSA6ICd0cmsnICk7CgokcGFyYW1zID0gYXJyYXkoJ3RhYl9tZXNzYWdlJz0+ICdzZXR0aW5nc19zYXZlZCcsICdhY3RpdmVfdGFiJyA9PiAnbWFwcycpOwokdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJycsICRwYXJhbXMpOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/changelog.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHVsPgoJPGxpPlZlcnNpb24gMC4yLjEgNiBBdWd1c3QgMjAxMiBCeSBEdWtldG93bjxiciAvPgoJCTx1bD4KCQkJPGxpPlNob3cgYWRkcmVzcyBzZWFyY2ggcmVzdWx0IG9uIHBhZ2UsIG5vdCBpbiBtZXNzYWdlLCBmb3IgY29weWluZyBhbmQgY3JlYXRpbmcgbWFya2VyOzwvbGk+CgkJCTxsaT5XaGVuIGFkZHJlc3MgbG9va3VwIGRvbmUsIG9uZSBpcyBhYmxlIHRvIGRpcmVjdGx5IGFkZCByZXN1bHQgYXMgbWFya2VyOzwvbGk+CgkJCTxsaT5DaGFuZ2VkIG1hcCwgbWFya2VyIGFuZCBwb2x5bGluZSB0ZW1wbGF0ZSB0byB3b3JrIHdpdGggdGhlbWUgT25lRWxldmVuOzwvbGk+CgkJCTxsaT5DaGVja2VkIGFuZCB2ZXJpZmllZCBhZ2FpbnN0IENNU01TIHZzIDEuMTEuPC9saT4KCQk8L3VsPgoJPC9saT4KCTxsaT5WZXJzaW9uIDAuMi4wIDQgTm92ZW1iZXIgMjAxMSBCeSBEdWtldG93bjxiciAvPgoJCTx1bD4KCQkJPGxpPlRlbXBsYXRlIGZvciBlYXN5bG9jYXRvciByZW1vdmVkIGluIHNldHRpbmdzIGFuZCBoYXMgYmVjb21lIHNldHRpbmcgZm9yIGN1cnNvcjs8L2xpPgoJCQk8bGk+QWxsb3cgZ2xvYmFsIGNvbnRlbnQgYmxvY2tzIGluIG1hcmtlcnMgKGZlYXR1cmUgcmVxdWVzdCA0NjE2KTwvbGk+CgkJCTxsaT5FcnJvciBpbiBHb29nbGVNYXBBUEkuY2xhc3MucGhwIHByZXZlbnRlZCBtYXJrZXIgc2hhZG93cyB0byBiZSBzaG93bjs8L2xpPgoJCQk8bGk+SW1wb3J0IG9mIEdQWCBmaWxlcyBtYWRlIGF2YWlsYWJsZSBmcm9tIHBvbHlsaW5lcyB0YWI7PC9saT4KCQkJPGxpPkV4cG9ydCBvZiBhIHBvbHlsaW5lIHRvIGEgR1BYIGZpbGUgaXMgc3VwcG9ydGVkLiBQbGVhc2UgY2hlY2sgdGhlIHNldHRpbmdzIHRhYjs8L2xpPgoJCQk8bGk+TmV3IHBhcmFtZXRlciBwYW5fY29udHJvbCB0byBzaG93L2hpZGUgcGFuIGNvbnRyb2wgYnV0dG9uIGlzIG9uIHRoZSBtYXAgKGRlZmF1bHQgaGlkZGVuKTs8L2xpPgoJCQk8bGk+TmV3IHBhcmFtZXRlciBzdHJlZXR2aWV3IHRvIHNob3cvaGlkZSB0aGUgcGVnbWFuIG9uIHRoZSBtYXAgKGRlZmF1bHQgaGlkZGVuKTs8L2xpPiAKCQkJPGxpPlNjYWxlIGlzIHNob3duIGNvcnJlY3RseSBub3cgaWYgcmVxdWVzdGVkIGZvciB0aGUgbWFwOzwvbGk+CgkJCTxsaT5OZXcgb3B0aW9uIHRvIHNldCBkZWZhdWx0IHVuaXQgb2YgbWVhc3VyZW1lbnQgZm9yIGRpc3RhbmNlIG9mIHBvbHlsaW5lOzwvbGk+CgkJCTxsaT5GYWN0b3IgdG8gaW5mbHVlbmNlIG51bWJlciBvZiBwb2ludHMgKGNydWRlbmVzcykgaW5jbHVkZWQgd2hpY2ggaXMgdXNlZCBkdXJpbmcgaW1wb3J0aW5nIEdQWCBmaWxlOzwvbGk+CgkJCTxsaT5FZGl0IGh5cGVybGluayBmcm9tIHBvbHlsaW5lcyB0YWIgdG8gbWFwIGRpZG4ndCB3b3JrLjwvbGk+CgkJPC91bD4KCTwvbGk+Cgk8bGk+VmVyc2lvbiAwLjEuOSAyOSBPY3RvYmVyIDIwMTEgQnkgRHVrZXRvd248YnIgLz4KCQk8dWw+CgkJCTxsaT5UdXJuZWQgbWFpbnRlbmFuY2Ugb2YgbWFya2VycyBpbnRvIHN0YW5kYXJkIHVwZGF0ZSBmb3IgYmV0dGVyIG1haW50ZW5hbmNlOzwvbGk+CgkJCTxsaT5EdXJpbmcgaW5zdGFsbGF0aW9uIHRoZSBtYXJrZXIgc2hhZG93cyB3ZXJlIG5vdCBjb3BpZWQ7PC9saT4KCQkJPGxpPk5ldyB0YWIgZm9yIHBvbHlsaW5lIG1haW50ZW5hbmNlIChGZWF0dXJlIFJlcXVlc3QgNDE2MCk7PC9saT4KCQkJPGxpPlR3byBuZXcgb3B0aW9ucyB0byBzZXQgaW5jcmVtZW50IHN0ZXAgYW5kIHByZWNpc2lvbiBvZiBtYXJrZXIvcG9seWxpbmUgbG9jYXRpb247PC9saT4KCQkJPGxpPkVhc3lsb2NhdG9yIHNob3dzIG1hcCB0eXBlL3pvb20gbGV2ZWwgb2YgY29ubmVjdGVkIG1hcCBvbiBtYXJrZXIgbWFpbnRlbmFuY2U7PC9saT4KCQkJPGxpPk51bWJlciBvZiBtYXJrZXJzL3BvbHlsaW5lcyBpbiBiYWNrZW5kIGZvbGxvd3MgdGhlIE51bWJlciBvZiByb3dzIHBlciBwYWdlIHdoZW4gdmlld2luZyBHbG9iYWwgQ29udGVudCBCbG9ja3MgZnJvbSB0aGUgdXNlciBwcmVmZXJlbmNlczs8L2xpPgoJCQk8bGk+TGlzdCBvZiBtYXBzIGFuZCBtYXJrZXJzIGFyZSBzb3J0YWJsZSBpZiBtb2R1bGUgalF1ZXJ5VG9vbHMgaXMgaW5zdGFsbGVkOzwvbGk+CgkJCTxsaT5VcGdyYWRlZCBHb29nbGVNYXBzIEFQSSBmcm9tIHZlcnNpb24gMi41IHRvIDMuMDs8L2xpPgoJCQk8bGk+Wm9vbSBzY3JvbGwgd2hlZWwgY2FuIG5vdCBiZSBtYWludGFpbmVkIGFueW1vcmUsIHNpbmNlIGl0IGlzIG5vdCBzdXBwb3J0ZWQgaW4gdmVyc2lvbiAzLjA7PC9saT4KCQkJPGxpPlNvbHZlZCBpc3N1ZSAoR29vZ2xlTWFwQVBJLmNsYXNzLnBocCkgaW4gdGhhdCBhZGRyZXNzIGxvb2t1cCBjYW1lIGJhY2sgd2l0aCB3YXJuaW5nLCBkdWUgdG8gZmV0Y2hVUkwgZnVuY3Rpb247PC9saT4KCQkJPGxpPlNvbHZlZCBpc3N1ZSAoR29vZ2xlTWFwQVBJLmNsYXNzLnBocCkgY2F1c2luZyBtYXAgbm90IHRvIGJlIHNob3duIHdoZW4gd2luZG93IG9ubG9hZCBpcyB1c2VkIAoJCQkod2hpY2ggaXMgaW4gbW9zdCBjYXNlcyB0aGUgc2l0dWF0aW9uIHdpdGhpbiBDTVNNUyk7PC9saT4KCQkJPGxpPkR1cmluZyB1cGRhdGUgdGhlIHByZXZpb3VzIHZlcnNpb24gb2YgdGhlIEFQSSBpcyByZW1vdmVkIChsaWIvR29vZ2xlTWFwQVBJLTIuNSkuIFlvdSBtYXkgZmluZCBpdCBpcyBzdGlsbCB0aGVyZSBhZnRlciB0aGlzIHVwZ3JhZGUuCgkJCVRoYXQgaXMgdGhlbiBkdWUgdG8gc2VjdXJpdHkgc2V0dGluZ3MuIFlvdSBtYXkgZGVsZXRlIGRpcmVjdG9yeSBHb29nbGVNYXBBUEktMi41IHdpdGhvdXQgYW55IHByb2JsZW0uPC9saT4KCQkJPGxpPk1ha2Ugc3VyZSB0aGF0IGRhdGFiYXNlIGNhbGxzIGFyZSBDTVNNUyB2ZXJzaW9uIDEuOCB0aHJ1IDEuMTAuOSBwcm9vZi48L2xpPgoJCTwvdWw+Cgk8L2xpPgoJPGxpPlZlcnNpb24gMC4xLjggMjkgRGVjZW1iZXIgMjAwOSBCeSBEdWtldG93bjxiciAvPgoJCTx1bD4KCQkJPGxpPlBlciBtYXAvbWFya2VyIEVhc3kgTG9jYXRvciBpbnRyb2R1Y2VkLCB0byBxdWlja2x5IHJldHJpZXZlIGNvb3JkaW5hdGVzIGZvciBtYXAvbWFya2VyOzwvbGk+CgkJCTxsaT5OZXcgc2V0dGluZ3MgdG8gc3VwcG9ydCBFYXN5IExvY2F0b3I7PC9saT4KCQkJPGxpPk5vIHRoaW5ncyBsZWZ0IGJlaGluZCB3aGVuIHBlcmZvcm1pbmcgYW4gdW5pc3RhbGwuPC9saT4KCQk8L3VsPgoJPC9saT4KCTxsaT5WZXJzaW9uIDAuMS43IDUgRGVjZW1iZXIgMjAwOSBCeSBEdWtldG93bjxicj4KCQk8dWw+CgkJCTxsaT5VcGdyYWRlZCBHb29nbGVNYXBzIEFQSSBmcm9tIHZlcnNpb24gMi4wIHRvIDIuNSAoRmVhdHVyZSBSZXF1ZXN0IDQyNDkpOzwvbGk+CgkJCTxsaT5QZXIgbWFwIG9wdGlvbiB0byBhbGxvdyB6b29taW5nIHVzaW5nIHRoZSBzY3JvbGwgd2hlZWw7PC9saT4KCQkJPGxpPlBlciBtYXAgb3B0aW9uIHRvIHNob3cvaGlkZSB0aGUgc2NhbGUuIEFsc28gYXZhaWxhYmxlIGFzIHBhcmFtZXRlcjs8L2xpPgoJCQk8bGk+Tm8gbG9uZ2VyIG5lZWQgdG8gcmVsb2dpbiBhZnRlciBhZGRyZXNzIGxvb2t1cCAoQnVnIzMxOTMpLiBGb3VuZCBsYXQvbG9uIHJlbWFpbnMgc2hvd24gZm9yIGVhc3kgY29weWluZzs8L2xpPgoJCQk8bGk+TGFuZ3VhZ2UgZm9yIHRoZSBjb250cm9sZXMgaXMgbm93IGF2YWlsYWJsZSBhcyBwYXJhbWV0ZXI7PC9saT4KCQkJPGxpPkNoZWNrZWQvc29sdmVkIHZhbGlkYXRpb24gWEhUTUwgdXNpbmcgVzNDIChCdWcjMjAxNCk7PC9saT4KCQkJPGxpPk5vdyBtdWx0aXBsZSBtYXBzIG9uIG9uZSBwYWdlIHBvc3NpYmxlIChCdWcjIDQyNDgpOzwvbGk+CgkJCTxsaT5CZXR0ZXIgdXNhZ2Ugb2YgZGlyZWN0b3J5IHNlcGFyYXRvciB0byBhdm9pZCBub3QgZm91bmQgZmlsZXMgKEJ1ZyMzMzQ2KTs8L2xpPgoJCQk8bGk+TmV3IG1hcCB0eXBlICdUZXJyYWluJyBpbXBsZW1lbnRlZC48L2xpPgoJCQk8bGk+RHVyaW5nIHVwZGF0ZSB0aGUgcHJldmlvdXMgdmVyc2lvbiBvZiB0aGUgQVBJIGlzIHJlbW92ZWQgKGxpYi9Hb29nbGVNYXBBUEktMi4wKS4gWW91IG1heSBmaW5kIGl0IGlzIHN0aWxsIHRoZXJlIGFmdGVyIHRoaXMgdXBncmFkZS4KCQkJVGhhdCBpcyB0aGVuIGR1ZSB0byBzZWN1cml0eSBzZXR0aW5ncy4gWW91IG1heSBkZWxldGUgZGlyZWN0b3J5IEdvb2dsZU1hcEFQSS0yLjAgd2l0aG91dCBhbnkgcHJvYmxlbS48L2xpPgoJCTwvdWw+Cgk8L2xpPgoJPGxpPlZlcnNpb24gMC4xLjYgMTUgSmFudWFyeSAyMDA5IEJ5IER1a2V0b3duPGJyIC8+CgkJPHVsPgoJCQk8bGk+SW5jbHVkZWQgdGhlIHBhcmFtZXRlcnMgdGhhdCBhcmUgYWxzbyB1c2VkIGJ5IEdvb2dsZSdzIEFQSS4gUGFyYW1ldGVycyBhcmUgZGlzY3Vzc2VkIGluIGhlbHAgdGV4dC48L2xpPgoJCTwvdWw+Cgk8L2xpPgoJPGxpPlZlcnNpb24gMC4xLjUgMTAgSmFudWFyeSAyMDA5IEJ5IER1a2V0b3duPGJyIC8+CgkJPHVsPgoJCQk8bGk+VXNlciBkZWZpbmVkIG1hcmtlcnMgbm93IHdvcmsuIFNlYXJjaCA8YSBocmVmPSJodHRwOi8vd3d3Lmdvb2dsZS5ubC9zZWFyY2g/cmxzPWVuJnE9Z29vZ2xlK21hcHMraWNvbittYWtlciIgdGFyZ2V0PSJfYmxhbmsiPkdvb2dsZTwvYT4gZm9yIG1hcCBpY29uIG1ha2VyczxiciAvPjwvbGk+CgkJPC91bD4KCTwvbGk+Cgk8bGk+VmVyc2lvbiAwLjEuIDI4IEF1Z3VzdCAyMDA2Ljxicj4KCQk8dWw+CgkJCTxsaT5Jbml0aWFsIFJlbGVhc2UuPC9saT4KCQk8L3VsPgoJPC9saT4KPC91bD4KPGgzPlRoYW5rcyBnbyB0bzwvaDM+CjxwPlJvYmVydCBCcm93biBmb3IgUkNSVUQgQ2xhc3MgdXNlZCBpbiBhZG1pbiBleHRlbnNpdmVseTwvcD4KPHA+YW5kPC9wPgo8cD5Nb250ZSBPaHJ0IGZvciBHb29nbGVNYXBBUEk8L3A+]]></data>
	</file>
	<file>
	  <filename>/function.admin_addresstab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyBHb29nbGVNYXBzIChpZiB5b3UgZG9uJ3Qga25vdyB0aGlzIG9uZSA6LSkgR29vZ2xlIGl0ISkuIEEgbW9kdWxlIGZvciBDTVMgLSBDTVMgTWFkZSBTaW1wbGUKIyBDb3B5cmlnaHQgKGMpIDIwMTIgYnkgRHVrZXRvd24gCiMKIyBBbGxvdyB1c2VyIHRvIGZpbmQgY29vcmRpbmF0ZXMgdXNpbmcgYWRkcmVzcyBsb29rdXAKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIyBUaGUgbW9kdWxlJ3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvZ29vZ2xlbWFwcwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiRnQ21zID0gY21zbXMoKTsgaWYoICFpc19vYmplY3QoJGdDbXMpICkgZXhpdDsKCmlmICghJHRoaXMtPkNoZWNrUGVybWlzc2lvbignVXNlIEdvb2dsZU1hcHMnKSkKewoJZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJywgYXJyYXkoJ1VzZSBHb29nbGVNYXBzJykpKTsKCXJldHVybjsKfQoKJGFkZHJlc3MgPSAnJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ2FkZHJlc3MnXSkpIHsKCSRhZGRyZXNzID0gJHBhcmFtc1snYWRkcmVzcyddOwp9CgokcmVxdWVzdGZvdW5kID0gZmFsc2U7CiRhZGRtYXJrZXIgPSAnJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ2xhdCddKSAmJiBpc3NldCgkcGFyYW1zWydsb24nXSkpIHsKCSRyZXF1ZXN0Zm91bmQgPSB0cnVlOwoJCgkkbGF0ID0gJHBhcmFtc1snbGF0J107CgkkbG9uID0gJHBhcmFtc1snbG9uJ107CgkkYWRkbWFya2VyID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnYWRkbWFya2VyJywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygnYWRkbWFya2VyJyksIAoJCWFycmF5KCdhZGRyZXNzJz0+JGFkZHJlc3MsJ2xhdCc9PiRsYXQsJ2xvbic9PiRsb24sJ25hbWUnPT4kYWRkcmVzcykpOwp9CgojRGlzcGxheSB0ZW1wbGF0ZQokc21hcnR5LT5hc3NpZ24oJ3N0YXJ0Zm9ybScsICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAnYWRkcmVzc2xvb2t1cCcsICRyZXR1cm5pZCkpOwokc21hcnR5LT5hc3NpZ24oJ2VuZGZvcm0nLCAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9hZGRyZXNzcXVlcnknLCAkdGhpcy0+TGFuZygndGl0bGVfYWRkcmVzc3F1ZXJ5JykpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2FkZHJlc3MnLCAkdGhpcy0+TGFuZygndGl0bGVfYWRkcmVzcycpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9hZGRyZXNzJywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdhZGRyZXNzJywgJGFkZHJlc3MsIDEwMCwgMTAyNCkpOwokc21hcnR5LT5hc3NpZ24oJ3JlcXVlc3Rmb3VuZCcsICRyZXF1ZXN0Zm91bmQpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX3NlYXJjaHJlcXVlc3QnLCAkdGhpcy0+TGFuZygndGl0bGVfc2VhcmNocmVxdWVzdCcpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9sYXRpdHVkZScsICR0aGlzLT5MYW5nKCdsYXRpdHVkZScpKTsKJHNtYXJ0eS0+YXNzaWduKCdsYXRpdHVkZScsICRsYXQpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2xvbmdpdHVkZScsICR0aGlzLT5MYW5nKCdsb25naXR1ZGUnKSk7CiRzbWFydHktPmFzc2lnbignbG9uZ2l0dWRlJywgJGxvbik7CiRzbWFydHktPmFzc2lnbignZ2VvZXJyb3InLCAkcGFyYW1zWydnZW9lcnJvciddKTsKJHNtYXJ0eS0+YXNzaWduKCdiYWRhZGRyZXNzJywgJHRoaXMtPkxhbmcoJ2VfYmFkYWRkcmVzcycpKTsKJHNtYXJ0eS0+YXNzaWduKCdhZGRtYXJrZXInLCAkYWRkbWFya2VyKTsKCiRzbWFydHktPmFzc2lnbignaGlkZGVuJywgJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwgJ21vZHVsZScsICdnb29nbGVtYXBzJykpOwokc21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXQnLCAkdGhpcy0+TGFuZygnU3VibWl0JykpKTsKCiNEaXNwbGF5IHRlbXBsYXRlCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRkcmVzc2xvb2t1cC50cGwnKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/function.admin_mapstab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCQojIFByZXBhcmUgbGlzdCBvZiBtYXBzLi4uCiRlbnRyeWFycmF5ID0gYXJyYXkoKTsKCiR1c2VyX2lkID0gJyc7CmlmIChnZXRfdXNlcmlkKCkgKSB7CgkkdXNlcl9pZCA9IGdldF91c2VyaWQoKTsKfQoKJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9nb29nbGVtYXBzX21hcHMgT1JERVIgQlkgbmFtZSc7CiRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkpOwoKJHJvd2NsYXNzID0gJ3JvdzEnOwoKd2hpbGUgKCRkYnJlc3VsdCAmJiAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKQp7Cgkkb25lcm93ID0gbmV3IHN0ZENsYXNzKCk7CgoJJG9uZXJvdy0+aWQgPSAkcm93WydtYXBfaWQnXTsKCSRvbmVyb3ctPm5hbWUgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdlZGl0bWFwJywgJHJldHVybmlkLCAkcm93WyduYW1lJ10sIGFycmF5KCdtYXBfaWQnPT4kcm93WydtYXBfaWQnXSkpOwoJJG9uZXJvdy0+Y2VudGVyX2xhdCA9ICRyb3dbJ2NlbnRlcl9sYXQnXTsgCgkkb25lcm93LT5jZW50ZXJfbG9uID0gJHJvd1snY2VudGVyX2xvbiddOwoJJG9uZXJvdy0+dHlwZSA9ICR0aGlzLT5MYW5nKCdtYXB0eXBlJy4kcm93Wyd0eXBlJ10pOwoKCSRvbmVyb3ctPmVkaXRsaW5rID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZWRpdG1hcCcsICRyZXR1cm5pZCwgJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9lZGl0LmdpZicsICR0aGlzLT5MYW5nKCdlZGl0JyksJycsJycsJ3N5c3RlbWljb24nKSwgYXJyYXkoJ21hcF9pZCc9PiRyb3dbJ21hcF9pZCddKSk7Cgkkb25lcm93LT5kZWxldGVsaW5rID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZGVsZXRlcm93JywgJHJldHVybmlkLCAkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2RlbGV0ZS5naWYnLCAkdGhpcy0+TGFuZygnZGVsZXRlJyksJycsJycsJ3N5c3RlbWljb24nKSwgYXJyYXkoJ3RhYmxlJz0+J01hcHMnLCdtYXBfaWQnPT4kcm93WydtYXBfaWQnXSksICR0aGlzLT5MYW5nKCdhcmV5b3VzdXJlJykpOwoKCSRvbmVyb3ctPnJvd2NsYXNzID0gJHJvd2NsYXNzOwoKCSRlbnRyeWFycmF5W10gPSAkb25lcm93OwoKCSgkcm93Y2xhc3M9PSJyb3cxIj8kcm93Y2xhc3M9InJvdzIiOiRyb3djbGFzcz0icm93MSIpOwp9CgokdGhpcy0+c21hcnR5LT5hc3NpZ25fYnlfcmVmKCdpdGVtcycsICRlbnRyeWFycmF5KTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpdGVtY291bnQnLCBjb3VudCgkZW50cnlhcnJheSkpOwovLyBSZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIEdsb2JhbCBDb250ZW50IEJsb2NrcyBmcm9tIHVzZXIgcHJlZmVyZW5jZXMgKHNvcnJ5IHRoaXMgaXMgYSBiaXQgdHJpY2t5KQokbGlzdGdjYnNfcGFnZWxpbWl0ID0gZ2V0X3ByZWZlcmVuY2UoICR1c2VyX2lkLCAnbGlzdGdjYnNfcGFnZWxpbWl0JyApOwppZiAoJGxpc3RnY2JzX3BhZ2VsaW1pdCA9PSAwIHx8ICRsaXN0Z2Nic19wYWdlbGltaXQgPT0gTlVMTCkgJGxpc3RnY2JzX3BhZ2VsaW1pdCA9IDIwOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3BhZ2VsaW1pdCcsICRsaXN0Z2Nic19wYWdlbGltaXQpOwojU2V0dXAgbGlua3MKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdhZGRsaW5rJywgJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnYWRkbWFwJywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygnYWRkbWFwJyksIGFycmF5KCksICcnLCBmYWxzZSwgZmFsc2UsICdjbGFzcz0icGFnZW9wdGlvbnMiJykpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2FkZGxpbmsnLCAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhZGRtYXAnLCAkcmV0dXJuaWQsICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vbmV3Zm9sZGVyLmdpZicsICR0aGlzLT5MYW5nKCdhZGRtYXAnKSwnJywnJywnc3lzdGVtaWNvbicpLCBhcnJheSgpLCAnJywgZmFsc2UsIGZhbHNlLCAnJykgLicgJy4gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnYWRkbWFwJywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygnYWRkbWFwJyksIGFycmF5KCksICcnLCBmYWxzZSwgZmFsc2UsICdjbGFzcz0icGFnZW9wdGlvbnMiJykpOwoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9uYW1lJywgJHRoaXMtPkxhbmcoJ3RpdGxlX25hbWUnKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfY2VudGVybGF0aXR1ZGUnLCAkdGhpcy0+TGFuZygndGl0bGVfY2VudGVyX2xhdCcpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9jZW50ZXJsb25naXR1ZGUnLCAkdGhpcy0+TGFuZygndGl0bGVfY2VudGVyX2xvbicpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9tYXB0eXBlJywgJHRoaXMtPkxhbmcoJ3RpdGxlX21hcHR5cGUnKSk7CgojRGlzcGxheSB0ZW1wbGF0ZQplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2xpc3RtYXBzLnRwbCcpOwoKPz4=]]></data>
	</file>
	<file>
	  <filename>/function.admin_markerstab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCQojIFByZXBhcmUgbGlzdCBvZiBtYXJrZXJzLi4uCiRlbnRyeWFycmF5ID0gYXJyYXkoKTsKCiR1c2VyX2lkID0gJyc7CmlmIChnZXRfdXNlcmlkKCkgKSB7CgkkdXNlcl9pZCA9IGdldF91c2VyaWQoKTsKfQokY29uZmlnID0gJGdDbXMtPkdldENvbmZpZygpOwovLyBSZWFkIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWluIHRoZSBpbWFnZXMgb2YgdGhlIG1hcmtlcnMKJHBhdGggPSAnLi4nLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ3VwbG9hZHMnLkRJUkVDVE9SWV9TRVBBUkFUT1IuJHRoaXMtPmdldE5hbWUoKS5ESVJFQ1RPUllfU0VQQVJBVE9SLidtYXJrZXJzJzsKCiRxdWVyeSA9ICdTRUxFQ1QgKiBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfZ29vZ2xlbWFwc19tYXJrZXJzIE9SREVSIEJZIG5hbWUnOwokZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsKCiRyb3djbGFzcyA9ICdyb3cxJzsKCndoaWxlICgkZGJyZXN1bHQgJiYgJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkKewoJJG9uZXJvdyA9IG5ldyBzdGRDbGFzcygpOwoKCSRvbmVyb3ctPmlkID0gJHJvd1snbWFya2VyX2lkJ107CgkkbWFwaW5mbyA9IGFycmF5KCk7CgkkbWFwaW5mbyA9ICR0aGlzLT5HZXRNYXBJbmZvcm1hdGlvbigkcm93WydtYXAnXSk7Cgkkb25lcm93LT5tYXAgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdlZGl0bWFwJywgJHJldHVybmlkLCAkbWFwaW5mb1snbmFtZSddLCBhcnJheSgnbWFwX2lkJz0+JHJvd1snbWFwJ10pKTsKCS8vJG9uZXJvdy0+bWFwID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZWRpdG1hcCcsICRyZXR1cm5pZCwgJG1hcGluZm9bJ25hbWUnXSwgYXJyYXkoJ21hcF9pZCc9PiRyb3dbJ21hcF9pZCddKSk7Cgkkb25lcm93LT5hZGRyZXNzID0gJHJvd1snYWRkcmVzcyddOwoJJG9uZXJvdy0+bGF0ID0gJHJvd1snbGF0J107IAoJJG9uZXJvdy0+bG9uID0gJHJvd1snbG9uJ107CglpZiAoJHJvd1snaWNvbiddICE9ICcnKSB7CgkJJG9uZXJvdy0+aWNvbiA9ICc8aW1nIHNyYz0iJy4kcGF0aC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRyb3dbJ2ljb24nXS4nIiBhbHQ9IicuJHJvd1snaWNvbiddLiciIGhlaWdodD0iMTgiPiAoJy4kcm93WydpY29uJ10uJyknOwoJfQoJJG9uZXJvdy0+bmFtZSA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2VkaXRtYXJrZXInLCAkcmV0dXJuaWQsICRyb3dbJ25hbWUnXSwgYXJyYXkoJ21hcmtlcl9pZCc9PiRyb3dbJ21hcmtlcl9pZCddKSk7CgoJJG9uZXJvdy0+ZWRpdGxpbmsgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdlZGl0bWFya2VyJywgJHJldHVybmlkLCAkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2VkaXQuZ2lmJywgJHRoaXMtPkxhbmcoJ2VkaXQnKSwnJywnJywnc3lzdGVtaWNvbicpLCBhcnJheSgnbWFya2VyX2lkJz0+JHJvd1snbWFya2VyX2lkJ10pKTsKCSRvbmVyb3ctPmRlbGV0ZWxpbmsgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdkZWxldGVyb3cnLCAkcmV0dXJuaWQsICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZGVsZXRlLmdpZicsICR0aGlzLT5MYW5nKCdkZWxldGUnKSwnJywnJywnc3lzdGVtaWNvbicpLCBhcnJheSgndGFibGUnPT4nTWFya2VycycsJ21hcmtlcl9pZCc9PiRyb3dbJ21hcmtlcl9pZCddKSwgJHRoaXMtPkxhbmcoJ2FyZXlvdXN1cmUnKSk7CgoJJG9uZXJvdy0+cm93Y2xhc3MgPSAkcm93Y2xhc3M7CgoJJGVudHJ5YXJyYXlbXSA9ICRvbmVyb3c7CgoJKCRyb3djbGFzcz09InJvdzEiPyRyb3djbGFzcz0icm93MiI6JHJvd2NsYXNzPSJyb3cxIik7Cn0KCiR0aGlzLT5zbWFydHktPmFzc2lnbl9ieV9yZWYoJ2l0ZW1zJywgJGVudHJ5YXJyYXkpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2l0ZW1jb3VudCcsIGNvdW50KCRlbnRyeWFycmF5KSk7Ci8vIFJldHJpZXZlIHRoZSBudW1iZXIgb2YgR2xvYmFsIENvbnRlbnQgQmxvY2tzIGZyb20gdXNlciBwcmVmZXJlbmNlcyAoc29ycnkgdGhpcyBpcyBhIGJpdCB0cmlja3kpCiRsaXN0Z2Nic19wYWdlbGltaXQgPSBnZXRfcHJlZmVyZW5jZSggJHVzZXJfaWQsICdsaXN0Z2Nic19wYWdlbGltaXQnICk7CmlmICgkbGlzdGdjYnNfcGFnZWxpbWl0ID09IDAgfHwgJGxpc3RnY2JzX3BhZ2VsaW1pdCA9PSBOVUxMKSAkbGlzdGdjYnNfcGFnZWxpbWl0ID0gMjA7CiR0aGlzLT5zbWFydHktPmFzc2lnbigncGFnZWxpbWl0JywgJGxpc3RnY2JzX3BhZ2VsaW1pdCk7CiNTZXR1cCBsaW5rcwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2FkZGxpbmsnLCAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhZGRtYXJrZXInLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nKCdhZGRtYXJrZXInKSwgYXJyYXkoKSwgJycsIGZhbHNlLCBmYWxzZSwgJ2NsYXNzPSJwYWdlb3B0aW9ucyInKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignYWRkbGluaycsICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2FkZG1hcmtlcicsICRyZXR1cm5pZCwgJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9uZXdmb2xkZXIuZ2lmJywgJHRoaXMtPkxhbmcoJ2FkZG1hcmtlcicpLCcnLCcnLCdzeXN0ZW1pY29uJyksIGFycmF5KCksICcnLCBmYWxzZSwgZmFsc2UsICcnKSAuJyAnLiAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhZGRtYXJrZXInLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nKCdhZGRtYXJrZXInKSwgYXJyYXkoKSwgJycsIGZhbHNlLCBmYWxzZSwgJ2NsYXNzPSJwYWdlb3B0aW9ucyInKSk7CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX25hbWUnLCAkdGhpcy0+TGFuZygndGl0bGVfbmFtZScpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9iZWxvbmdzdG9tYXAnLCAkdGhpcy0+TGFuZygnYmVsb25nc3RvbWFwJykpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX2FkZHJlc3MnLCAkdGhpcy0+TGFuZygnYWRkcmVzcycpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9sYXRpdHVkZScsICR0aGlzLT5MYW5nKCdsYXRpdHVkZScpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9sb25naXR1ZGUnLCAkdGhpcy0+TGFuZygnbG9uZ2l0dWRlJykpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX2ljb24nLCAkdGhpcy0+TGFuZygnbWFya2VyaWNvbicpKTsKCiNEaXNwbGF5IHRlbXBsYXRlCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnbGlzdG1hcmtlcnMudHBsJyk7Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/function.admin_polylinestab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiRxdWVyeSA9ICdTRUxFQ1QgKiBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfZ29vZ2xlbWFwc19wb2x5bGluZXMgT1JERVIgQlkgbmFtZSc7CiRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkpOwoKJGVudHJ5YXJyYXkgPSBhcnJheSgpOwokcm93Y2xhc3MgPSAncm93MSc7Cgp3aGlsZSAoJGRicmVzdWx0ICYmICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpCnsKCSRvbmVyb3cgPSBuZXcgc3RkQ2xhc3MoKTsKCgkkb25lcm93LT5pZCA9ICRyb3dbJ3BvbHlsaW5lX2lkJ107Cgkkb25lcm93LT5uYW1lID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZWRpdHBvbHlsaW5lJywgJHJldHVybmlkLCAkcm93WyduYW1lJ10sIGFycmF5KCdwb2x5bGluZV9pZCc9PiRyb3dbJ3BvbHlsaW5lX2lkJ10pKTsKCSRtYXBpbmZvID0gYXJyYXkoKTsKCSRtYXBpbmZvID0gJHRoaXMtPkdldE1hcEluZm9ybWF0aW9uKCRyb3dbJ21hcF9pZCddKTsKCSRvbmVyb3ctPm1hcCA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2VkaXRtYXAnLCAkcmV0dXJuaWQsICRtYXBpbmZvWyduYW1lJ10sIGFycmF5KCdtYXBfaWQnPT4kcm93WydtYXBfaWQnXSkpOwoJaWYgKHN0cnN0cigkcm93WydzdHJva2Vjb2xvciddLCAnIycpICkgewoJCSRvbmVyb3ctPnN0cm9rZWNvbG9yID0gJHJvd1snc3Ryb2tlY29sb3InXTsKCX0KCWVsc2UgewoJCSRvbmVyb3ctPnN0cm9rZWNvbG9yID0gJyMnLiRyb3dbJ3N0cm9rZWNvbG9yJ107Cgl9Cgkkb25lcm93LT5zdHJva2VvcGFjaXR5ID0gJHJvd1snc3Ryb2tlb3BhY2l0eSddOyAKCSRvbmVyb3ctPnN0cm9rZXdlaWdodCA9ICRyb3dbJ3N0cm9rZXdlaWdodCddOwoJJG9uZXJvdy0+ZXhhbXBsZSA9ICc8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGOyB3aWR0aDogMTEwcHg7IGhlaWdodCI+Jm5ic3A7CgkJPGRpdiBzdHlsZT0id2lkdGg6IDEwMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAnLiRyb3dbJ3N0cm9rZWNvbG9yJ10uJzsKCQloZWlnaHQ6Jy4kcm93WydzdHJva2V3ZWlnaHQnXS4ncHg7IHZlcnRpY2FsLWFsaWduOiAtNXB4OyAKCQlwYWRkaW5nOiAwIDAgMCAzcHgiPiZuYnNwOwoJCTwvZGl2PgoJCTwvZGl2Pic7CgoJJG9uZXJvdy0+ZWRpdGxpbmsgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdlZGl0cG9seWxpbmUnLCAkcmV0dXJuaWQsICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZWRpdC5naWYnLCAkdGhpcy0+TGFuZygnZWRpdCcpLCcnLCcnLCdzeXN0ZW1pY29uJyksIGFycmF5KCdwb2x5bGluZV9pZCc9PiRyb3dbJ3BvbHlsaW5lX2lkJ10pKTsKCSRvbmVyb3ctPmRlbGV0ZWxpbmsgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdkZWxldGVyb3cnLCAkcmV0dXJuaWQsICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZGVsZXRlLmdpZicsICR0aGlzLT5MYW5nKCdkZWxldGUnKSwnJywnJywnc3lzdGVtaWNvbicpLCBhcnJheSgndGFibGUnPT4nUG9seWxpbmVzJywncG9seWxpbmVfaWQnPT4kcm93Wydwb2x5bGluZV9pZCddKSwgJHRoaXMtPkxhbmcoJ2FyZXlvdXN1cmUnKSk7Cgkkb25lcm93LT5leHBvcnRsaW5rID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZXhwb3J0cG9seWxpbmVfZ3B4JywgJHJldHVybmlkLCAkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2V4cG9ydC5naWYnLCAkdGhpcy0+TGFuZygnZXhwb3J0dG9ncHgnKSwnJywnJywnc3lzdGVtaWNvbicpLCBhcnJheSgncG9seWxpbmVfaWQnPT4kcm93Wydwb2x5bGluZV9pZCddLCduYW1lJz0+JHJvd1snbmFtZSddKSk7CgoJJG9uZXJvdy0+cm93Y2xhc3MgPSAkcm93Y2xhc3M7CgoJJGVudHJ5YXJyYXlbXSA9ICRvbmVyb3c7CgoJKCRyb3djbGFzcz09InJvdzEiPyRyb3djbGFzcz0icm93MiI6JHJvd2NsYXNzPSJyb3cxIik7Cn0KCiRzbWFydHktPmFzc2lnbl9ieV9yZWYoJ2l0ZW1zJywgJGVudHJ5YXJyYXkpOwokc21hcnR5LT5hc3NpZ24oJ2l0ZW1jb3VudCcsIGNvdW50KCRlbnRyeWFycmF5KSk7Ci8vIFJldHJpZXZlIHRoZSBudW1iZXIgb2YgR2xvYmFsIENvbnRlbnQgQmxvY2tzIGZyb20gdXNlciBwcmVmZXJlbmNlcyAoc29ycnkgdGhpcyBpcyBhIGJpdCB0cmlja3kpCiRsaXN0Z2Nic19wYWdlbGltaXQgPSBnZXRfcHJlZmVyZW5jZSggJHVzZXJfaWQsICdsaXN0Z2Nic19wYWdlbGltaXQnICk7CmlmICgkbGlzdGdjYnNfcGFnZWxpbWl0ID09IDAgfHwgJGxpc3RnY2JzX3BhZ2VsaW1pdCA9PSBOVUxMKSAkbGlzdGdjYnNfcGFnZWxpbWl0ID0gMjA7CiRzbWFydHktPmFzc2lnbigncGFnZWxpbWl0JywgJGxpc3RnY2JzX3BhZ2VsaW1pdCk7CiNTZXR1cCBsaW5rcwokc21hcnR5LT5hc3NpZ24oJ2FkZGxpbmsnLCAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhZGRwb2x5bGluZScsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcoJ2FkZHBvbHlsaW5lJyksIGFycmF5KCksICcnLCBmYWxzZSwgZmFsc2UsICdjbGFzcz0icGFnZW9wdGlvbnMiJykpOwokc21hcnR5LT5hc3NpZ24oJ2FkZGxpbmsnLCAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhZGRwb2x5bGluZScsICRyZXR1cm5pZCwgJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9uZXdmb2xkZXIuZ2lmJywgJHRoaXMtPkxhbmcoJ2FkZHBvbHlsaW5lJyksJycsJycsJ3N5c3RlbWljb24nKSwgYXJyYXkoKSwgJycsIGZhbHNlLCBmYWxzZSwgJycpIC4nICcuICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2FkZHBvbHlsaW5lJywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygnYWRkcG9seWxpbmUnKSwgYXJyYXkoKSwgJycsIGZhbHNlLCBmYWxzZSwgJ2NsYXNzPSJwYWdlb3B0aW9ucyInKSk7CiRzbWFydHktPmFzc2lnbignaW1wb3J0X2xvY2FsX2xpbmsnLCR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2FkbWluX2ltcG9ydF9sb2NhbCcsICRyZXR1cm5pZCwgCgkkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2ltcG9ydC5naWYnLCAKCSR0aGlzLT5MYW5nKCdpbXBvcnRsb2NhbHBvbHlsaW5lJyksJycsJycsJ3N5c3RlbWljb24nKSwgYXJyYXkoKSwgJycsIGZhbHNlLCBmYWxzZSwgJycpIC4KCScgJy4gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnYWRtaW5faW1wb3J0X2xvY2FsJywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygnaW1wb3J0bG9jYWxwb2x5bGluZScpLCBhcnJheSgpLCAnJywKCWZhbHNlLCBmYWxzZSwgJ2NsYXNzPSJwYWdlb3B0aW9ucyInKSk7Cgokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX25hbWUnLCAkdGhpcy0+TGFuZygndGl0bGVfbmFtZScpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9iZWxvbmdzdG9tYXAnLCAkdGhpcy0+TGFuZygnYmVsb25nc3RvbWFwJykpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2V4YW1wbGUnLCAkdGhpcy0+TGFuZygndGl0bGVfZXhhbXBsZScpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9jb2xvcicsICR0aGlzLT5MYW5nKCd0aXRsZV9jb2xvcicpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9vcGFjaXR5JywgJHRoaXMtPkxhbmcoJ3RpdGxlX29wYWNpdHknKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfd2VpZ2h0JywgJHRoaXMtPkxhbmcoJ3RpdGxlX3dlaWdodCcpKTsKCiNEaXNwbGF5IHRlbXBsYXRlCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnbGlzdHBvbHlsaW5lcy50cGwnKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/GoogleMaps.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IEdvb2dsZU1hcHMgLSBNb2R1bGUgZm9yIEdvb2dsZU1hcHMKIyBWZXJzaW9uOiAwLjEsIHRzdwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9za2VsZXRvbi8KIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKY2xhc3MgR29vZ2xlTWFwcyBleHRlbmRzIENNU01vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgICAgIAp7Cgl2YXIgJF9nb29nbGVhcGlfdmVyc2lvbiA9ICczLjAnOwoKCWZ1bmN0aW9uIEdldE5hbWUoKQoJewoJCXJldHVybiAnR29vZ2xlTWFwcyc7Cgl9CglmdW5jdGlvbiBHZXRGcmllbmRseU5hbWUoKQoJewoJCXJldHVybiAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyk7Cgl9CglmdW5jdGlvbiBHZXRWZXJzaW9uKCkKCXsKCQlyZXR1cm4gJzAuMi4xJzsKCX0KCWZ1bmN0aW9uIEdldEhlbHAoKQoJewoJCXJldHVybiAkdGhpcy0+TGFuZygnaGVscCcpOwoJfQoJZnVuY3Rpb24gR2V0QXV0aG9yKCkKCXsKCQlyZXR1cm4gJ3Rzdy9EdWtldG93bic7Cgl9CglmdW5jdGlvbiBHZXRBdXRob3JFbWFpbCgpCgl7CgkJcmV0dXJuICd0YXR1Lndpa21hbiBbYXRdIGdtYWlsLmNvbSc7Cgl9CglmdW5jdGlvbiBHZXRDaGFuZ2VMb2coKQoJewoJCXJldHVybiBmaWxlX2dldF9jb250ZW50cyhkaXJuYW1lKF9fRklMRV9fKS4nL2NoYW5nZWxvZy5pbmMnKTsKCX0KCWZ1bmN0aW9uIElzUGx1Z2luTW9kdWxlKCkKCXsKCQlyZXR1cm4gdHJ1ZTsKCX0KCWZ1bmN0aW9uIEhhc0FkbWluKCkKCXsKCQlyZXR1cm4gdHJ1ZTsKCX0KCWZ1bmN0aW9uIEdldEFkbWluU2VjdGlvbigpCgl7CgkJcmV0dXJuICdleHRlbnNpb25zJzsKCX0KCWZ1bmN0aW9uIEdldEFkbWluRGVzY3JpcHRpb24oKQoJewoJCXJldHVybiAkdGhpcy0+TGFuZygnbW9kZGVzY3JpcHRpb24nKTsKCX0KCglmdW5jdGlvbiBWaXNpYmxlVG9BZG1pblVzZXIoKQoJewoJICByZXR1cm4gJHRoaXMtPkNoZWNrUGVybWlzc2lvbignVXNlIEdvb2dsZU1hcHMnKTsKCX0KCglmdW5jdGlvbiBHZXREZXBlbmRlbmNpZXMoKQoJewoJCXJldHVybiBhcnJheSgpOwoJfQoKCWZ1bmN0aW9uIE1pbmltdW1DTVNWZXJzaW9uKCkKCXsKCQlyZXR1cm4gJzEuMTAuMyc7Cgl9CgoJZnVuY3Rpb24gTWF4aW11bUNNU1ZlcnNpb24oKQoJewoJCXJldHVybiAnMS4xMS45JzsKCX0JCgkKCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkgICBTZXRQYXJhbWV0ZXJzKCkKCSAgIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyB5b3UgdG8gY3JlYXRlIG1hcHBpbmdzIGZvcgoJICAgeW91ciBtb2R1bGUgd2hlbiB1c2luZyAiUHJldHR5IFVybHMiLgoJICAgCgkgICBUeXBpY2FsbHksIG1vZHVsZXMgY3JlYXRlIGludGVybmFsIGxpbmtzIHRoYXQgaGF2ZQoJICAgYmlnIHVnbHkgc3RyaW5ncyBhbG9uZyB0aGUgbGluZXMgb2Y6CgkgICBpbmRleC5waHA/bWFjdD1Nb2ROYW1lLGNudG50MDEsYWN0aW9uTmFtZSwwJmNudG50MDFwYXJhbTE9MSZjbnRudDAxcGFyYW0yPTImY250bnQwMXJldHVybmlkPTMKCSAgIAoJICAgWW91IG1pZ2h0IHByZWZlciB0aGVzZSB0byBsb29rIGxpa2U6CgkgICAvTW9kdWxlRnVuY3Rpb24vMi8zCgkgICAKCSAgIFRvIGRvIHRoaXMsIHlvdSBoYXZlIHRvIHJlZ2lzdGVyIHJvdXRlcyBhbmQgbWFwCgkgICB5b3VyIHBhcmFtZXRlcnMgaW4gYSB3YXkgdGhhdCB0aGUgQVBJIHdpbGwgYmUgYWJsZQoJICAgdG8gdW5kZXJzdGFuZC4KCgkgICBBbHNvIG5vdGUgdGhhdCBhbnkgY2FsbHMgdG8gQ3JlYXRlTGluayB3aWxsIG5lZWQgdG8KCSAgIGJlIHVwZGF0ZWQgdG8gcGFzcyB0aGUgcHJldHR5IHVybCBwYXJhbWV0ZXIuCgkgICAKCSAgIFNpbmNlIHRoZSBTa2VsZXRvbiBkb2Vzbid0IHJlYWxseSBjcmVhdGUgYW55IGxpbmtzLAoJICAgdGhlIHNlY3Rpb24gYmVsb3cgaXMgY29tbWVudGVkIG91dCwgYnV0IHlvdSBjYW4KCSAgIHVzZSBpdCB0byBmaWd1cmUgb3V0IHByZXR0eSB1cmxzLgoJICAgCgkgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoJZnVuY3Rpb24gU2V0UGFyYW1ldGVycygpCgl7CgkJJHRoaXMtPlJlc3RyaWN0VW5rbm93blBhcmFtcygpOwoKCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdib3VuZHNfZnVkZ2UnLCAnJywgJHRoaXMtPmxhbmcoJ2hlbHBfcGFyYW1fYm91bmRzX2Z1ZGdlJyksIGZhbHNlKTsKCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdjZW50ZXJsYXQnLCAnJywgJHRoaXMtPmxhbmcoJ2hlbHBfcGFyYW1fY2VudGVybGF0JyksIGZhbHNlKTsKCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdjZW50ZXJsb24nLCAnJywgJHRoaXMtPmxhbmcoJ2hlbHBfcGFyYW1fY2VudGVybG9uJyksIGZhbHNlKTsKCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdjb250cm9scycsICcnLCAkdGhpcy0+bGFuZygnaGVscF9wYXJhbV9jb250cm9scycpLCBmYWxzZSk7CgkJJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignY29udHJvbHNfc2l6ZScsICcnLCAkdGhpcy0+bGFuZygnaGVscF9wYXJhbV9jb250cm9sc19zaXplJyksIGZhbHNlKTsKCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdkaXJlY3Rpb25zJywgJycsICR0aGlzLT5sYW5nKCdoZWxwX3BhcmFtX2RpcmVjdGlvbnMnKSwgZmFsc2UpOwoJCSR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ2hlaWdodCcsICcnLCAkdGhpcy0+bGFuZygnaGVscF9wYXJhbV9oZWlnaHQnKSwgZmFsc2UpOwoJCSR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ2luZm9fdHJpZ2dlcicsICcnLCAkdGhpcy0+bGFuZygnaGVscF9wYXJhbV9pbmZvX3RyaWdnZXInKSwgZmFsc2UpOwoJCSR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ2luZm9fd2luZG93JywgJycsICR0aGlzLT5sYW5nKCdoZWxwX3BhcmFtX2luZm9fd2luZG93JyksIGZhbHNlKTsKCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdtYXAnLCAndGVzdCcsICR0aGlzLT5sYW5nKCdoZWxwX3BhcmFtX21hcCcpLCBmYWxzZSk7CgkJJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcigncGFuX2NvbnRyb2wnLCAnJywgJHRoaXMtPmxhbmcoJ2hlbHBfcGFyYW1fcGFuJyksIGZhbHNlKTsKCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdsYW5ndWFnZScsICcnLCAkdGhpcy0+bGFuZygnaGVscF9wYXJhbV9sYW5ndWFnZScpLCBmYWxzZSk7CgkJJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignc2NhbGVfY29udHJvbCcsICcnLCAkdGhpcy0+bGFuZygnaGVscF9wYXJhbV9zY2FsZScpLCBmYWxzZSk7CgkJJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignc2lkZWJhcicsICcnLCAkdGhpcy0+bGFuZygnaGVscF9wYXJhbV9zaWRlYmFyJyksIGZhbHNlKTsKCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdzdHJlZXR2aWV3JywgJycsICR0aGlzLT5sYW5nKCdoZWxwX3BhcmFtX3N0cmVldHZpZXcnKSwgZmFsc2UpOwoJCSR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ3R5cGUnLCAnJywgJHRoaXMtPmxhbmcoJ2hlbHBfcGFyYW1fdHlwZScpLCBmYWxzZSk7CgkJJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcigndHlwZV9jb250cm9scycsICcnLCAkdGhpcy0+bGFuZygnaGVscF9wYXJhbV90eXBlX2NvbnRyb2xzJyksIGZhbHNlKTsKCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCd3aWR0aCcsICcnLCAkdGhpcy0+bGFuZygnaGVscF9wYXJhbV93aWR0aCcpLCBmYWxzZSk7CgkJJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignem9vbScsICcnLCAkdGhpcy0+bGFuZygnaGVscF9wYXJhbV96b29tJyksIGZhbHNlKTsKCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCd6b29tX2VuY29tcGFzcycsICcnLCAkdGhpcy0+bGFuZygnaGVscF9wYXJhbV96b29tX2VuY29tcGFzcycpLCBmYWxzZSk7CgkJCgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2FkZHJlc3MnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2JvdW5kc19mdWRnZScsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnY2VudGVybGF0JyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdjZW50ZXJsb24nLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2NvbnRyb2xzJyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdjb250cm9sc19zaXplJyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdkaXJlY3Rpb25zJyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdoZWlnaHQnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2luZm9fdHJpZ2dlcicsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnaW5mb193aW5kb3cnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2xhbmd1YWdlJyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdtYXAnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3Bhbl9jb250cm9sJyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdzY2FsZV9jb250cm9sJyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdzaWRlYmFyJyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdzdHJlZXR2aWV3JyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCd0eXBlJyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCd0eXBlX2NvbnRyb2xzJyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCd3aWR0aCcsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnem9vbScsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnem9vbV9lbmNvbXBhc3MnLENMRUFOX1NUUklORyk7Cgl9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRFdmVudERlc2NyaXB0aW9uKCkKICAgSWYgeW91ciBtb2R1bGUgY2FuIGNyZWF0ZSBldmVudHMsIHlvdSB3aWxsIG5lZWQKICAgdG8gcHJvdmlkZSB0aGUgQVBJIHdpdGggZG9jdW1lbnRhdGlvbiBvZiB3aGF0CiAgIHRoYXQgZXZlbnQgZG9lcy4gVGhpcyBtZXRob2Qgd3JhcHMgdXAgYSBzaW1wbGUKICAgcmV0dXJuIG9mIHRoZSBsb2NhbGl6ZWQgZGVzY3JpcHRpb24uCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgLyogIGZ1bmN0aW9uIEdldEV2ZW50RGVzY3JpcHRpb24gKCAkZXZlbnRuYW1lICkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2V2ZW50X2luZm9fJy4kZXZlbnRuYW1lICk7CiAgfSovCgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRFdmVudEhlbHAoKQogICBJZiB5b3VyIG1vZHVsZSBjYW4gY3JlYXRlIGV2ZW50cywgeW91IHdpbGwgbmVlZAogICB0byBwcm92aWRlIHRoZSBBUEkgd2l0aCBkb2N1bWVudGF0aW9uIG9mIGhvdyB0bwogICB1c2UgdGhlIGV2ZW50LiBUaGlzIG1ldGhvZCB3cmFwcyB1cCBhIHNpbXBsZQogICByZXR1cm4gb2YgdGhlIGxvY2FsaXplZCBkZXNjcmlwdGlvbi4KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICAvKiAgZnVuY3Rpb24gR2V0RXZlbnRIZWxwICggJGV2ZW50bmFtZSApCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdldmVudF9oZWxwXycuJGV2ZW50bmFtZSApOwogIH0qLwoKCQoKCWZ1bmN0aW9uIEluc3RhbGxQb3N0TWVzc2FnZSgpCgl7CgkJcmV0dXJuICR0aGlzLT5MYW5nKCdwb3N0aW5zdGFsbCcpOwoJfQoJZnVuY3Rpb24gVW5pbnN0YWxsUG9zdE1lc3NhZ2UoKQoJewoJCXJldHVybiAkdGhpcy0+TGFuZygncG9zdHVuaW5zdGFsbCcpOwoJfQoJZnVuY3Rpb24gVW5pbnN0YWxsUHJlTWVzc2FnZSgpCgl7CgkJcmV0dXJuICR0aGlzLT5MYW5nKCdyZWFsbHlfdW5pbnN0YWxsJyk7Cgl9CgkKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJICAgRGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJG1lc3NhZ2UpCgkgICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQoKCSAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBtZXRob2QgdG8gZGlzcGxheQoJICAgZXJyb3IgaW5mb3JtYXRpb24gb24gdGhlIGFkbWluIHNpZGUuCgkgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogICAgZnVuY3Rpb24gRGlzcGxheUVycm9yUGFnZSgkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQsICRtZXNzYWdlPScnKQogICAgewoJCSR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfZXJyb3InLCAkdGhpcy0+TGFuZygnZXJyb3InKSk7CgkJaWYgKCRtZXNzYWdlICE9ICcnKQoJCQl7CgkJCSR0aGlzLT5zbWFydHktPmFzc2lnbl9ieV9yZWYoJ21lc3NhZ2UnLCAkbWVzc2FnZSk7CgkJCX0KCiAgICAgICAgLy8gRGlzcGxheSB0aGUgcG9wdWxhdGVkIHRlbXBsYXRlCiAgICAgICAgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdlcnJvci50cGwnKTsKICAgIH0KCgkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJICAgRGlzcGxheUFkbWluTmF2KCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAkbWVzc2FnZSkKCSAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCgoJICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgc2ltcGxlIG1ldGhvZCB0byBwcmVzZW50IGEKCSAgIGNvbW1vbiBhZG1pbiBtZW51LgoJICAgCSAgIAoJICAgSXQgc2ltcGx5IHNldHMgYSBjb2xsZWN0aW9uIHNtYXJ0eSB0YWcgdmFsdWVzLiAgIAoJICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogICAgZnVuY3Rpb24gRGlzcGxheUFkbWluTmF2KCRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCkKICAgICAgICB7CgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdhZG1pbl9uYXYnLAoJCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nKCd0aXRsZV9tb2RfYWRtaW4nKSwgYXJyYXkoKSkgLgoJCQknIDogJyAuCgkJCSR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2FkbWluX3ByZWZzJywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygndGl0bGVfbW9kX3ByZWZzJyksIGFycmF5KCkpKTsKICAgICAgICB9CgoKCiAgZnVuY3Rpb24gUHJpbnRNYXBXaXRoTWFya2VycygkbWFwbmFtZSwgJG1hcmtlcnMpIHsKICAgIHJlcXVpcmVfb25jZSgnbGliL0dvb2dsZU1hcEFQSS0nLiR0aGlzLT5fZ29vZ2xlYXBpX3ZlcnNpb24uJy9Hb29nbGVNYXBBUEkuY2xhc3MucGhwJyk7CiAgICAkbWFwID0gbmV3IEdvb2dsZU1hcEFQSSgkbWFwbmFtZSwgJHRoaXMtPkdldFByZWZlcmVuY2UoJ3lhaG9vYXBwaWQnLCAnMTIzNCcpKTsKICAgIHdoaWxlICggJG1hcmtlciA9IGFycmF5X3BvcCgkbWFya2VycykgKSB7CiAgICAgICRtYXAtPmFkZE1hcmtlckJ5Q29vcmRzKCRtYXJrZXJbJ2xhdCddLCRtYXJrZXJbJ2xvbiddLCAkbWFya2VyWyduYW1lJ10sICRtYXJrZXJbJ2luZm8nXSk7CiAgICB9CiAgfQogIAogIGZ1bmN0aW9uIEdldEFkZHJlc3NMb2NhdGlvbigkYWRkcmVzcykgewogICAgcmVxdWlyZV9vbmNlKCdsaWIvR29vZ2xlTWFwQVBJLScuJHRoaXMtPl9nb29nbGVhcGlfdmVyc2lvbi4nL0dvb2dsZU1hcEFQSS5jbGFzcy5waHAnKTsKICAgICRtYXAgPSBuZXcgR29vZ2xlTWFwQVBJKCRtYXBuYW1lLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgneWFob29hcHBpZCcsICcxMjM0JykpOwogICAgJGdlb2NvZGUgPSAkbWFwLT5nZXRHZW9jb2RlKCRhZGRyZXNzKTsKICAgIHJldHVybiAkZ2VvY29kZTsKICB9CgoJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCSAgIEdldEhlYWRlckhUTUwoKQoJICAgVGhpcyBmdW5jdGlvbiBpbnNlcnRzIGphdmFzY3JpcHQgKGFuZCBsaW5rcykgaW50byBoZWFkZXIgb2YgSFRNTAoJICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoJZnVuY3Rpb24gR2V0SGVhZGVySFRNTCgpCgl7CgkJJGphdmFzY3JpcHQgPSAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vbW9kdWxlcy9KUXVlcnlUb29scy9saWIvanF1ZXJ5LnRhYmxlc29ydGVyLmpzIj48L3NjcmlwdD4nLiJcbiI7CgkJJGphdmFzY3JpcHQgLj0gJzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uL21vZHVsZXMvSlF1ZXJ5VG9vbHMvbGliL2Nzcy9KUXVlcnlUb29scy5jc3MiIG1lZGlhPSJzY3JlZW4iIC8+Jy4iXG4iOwoJCSRqYXZhc2NyaXB0IC49ICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9ImpzIj5qUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgCgkJeyAKCQkJalF1ZXJ5KCIuY21zX3NvcnRhYmxlIikKCQkJCS50YWJsZXNvcnRlciggCgkJCQkpOyAKCQl9IAoJCSk7IAoJCTwvc2NyaXB0Pic7CgkJJGphdmFzY3JpcHQgLj0gJzxiciAvPjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQkJZnVuY3Rpb24gc2hvd1ZhbHVlKG51bSl7CgkJCQl2YXIgcmVzdWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdCIpOyAgICAgCgkJCQlyZXN1bHQuaW5uZXJIVE1MID0gbnVtOwoJCQl9CgkJPC9zY3JpcHQ+JzsKCQlyZXR1cm4gJGphdmFzY3JpcHQ7Cgl9CgoJZnVuY3Rpb24gR2V0TWFwSW5mb3JtYXRpb24oJG1hcF9pZCkgewoJCSRkYiA9IGNtc21zKCktPkdldERiKCk7CgkJCgkJJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy4gY21zX2RiX3ByZWZpeCgpIC4gJ21vZHVsZV9nb29nbGVtYXBzX21hcHMgV0hFUkUgbWFwX2lkID0gPyc7CgkJJHFyID0gJGRiLT5FeGVjdXRlKCAkcXVlcnksIGFycmF5KCRtYXBfaWQpICk7CgkJJHJvdyA9ICRxci0+RmV0Y2hSb3coKTsKCQlpZiggJHFyLT5SZWNvcmRDb3VudCgpID09IDAgKSB7CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJZWxzZSB7CgkJCXJldHVybiAkcm93OwoJCX0JCQoJfQoJCglmdW5jdGlvbiBTYXZlRWFzeUxvY2F0b3IoJGxhdCA9IDAsICRsb24gPSAwLCAkem9vbSA9IDApIHsKCQkvLyBJZiBhIHZhbHVlIHdhcyBzZXQgdXNpbmcgZWFzeSBsb2NhdG9yLCB1c2UgaXQgbmV4dCB0aW1lIGlmIHJlcXVlc3RlZAoJCWlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZWFzeWxvY2F0b3JzYXZlbGFzdCcpKSB7CgkJCWlmICgkbGF0ICE9IDApICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxhdCcsICRsYXQpOwoJCQlpZiAoJGxvbiAhPSAwKSAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnZWFzeWxvY2F0b3Jsb24nLCAkbG9uKTsKCQkJaWYgKCR6b29tICE9IDApICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxldmVsJywgJHpvb20pOwoJCX0KCX0KCglmdW5jdGlvbiBHZXRNYXBUeXBlcygpIHsKCQkvLyBQcmVwYXJlIGEgbGlzdCBvZiBtYXAgdHlwZXMKCQkkdHlwZWxpc3QgPSBhcnJheSgpOwoJCSR0eXBlbGlzdFskdGhpcy0+TGFuZygnbWFwdHlwZW1hcCcpXSA9ICdtYXAnOwoJCSR0eXBlbGlzdFskdGhpcy0+TGFuZygnbWFwdHlwZXNhdGVsbGl0ZScpXSA9ICdzYXRlbGxpdGUnOwoJCSR0eXBlbGlzdFskdGhpcy0+TGFuZygnbWFwdHlwZWh5YnJpZCcpXSA9ICdoeWJyaWQnOwoJCSR0eXBlbGlzdFskdGhpcy0+TGFuZygnbWFwdHlwZXRlcnJhaW4nKV0gPSAndGVycmFpbic7CgkJCgkJcmV0dXJuICR0eXBlbGlzdDsKCX0KfQoKPz4=]]></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[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0dvb2dsZU1hcHMnOwokbGFuZ1snbW9kZGVzY3JpcHRpb24nXSA9ICdQcmVwYXJlIG11bHRpcGxlIEdvb2dsZSBtYXBzLCBtdWx0aXBsZSBjb29yZGluYXRlcyB3aXRoIGN1c3RvbSBtYXJrZXJzLiAKSW5jbHVkZXMgRWFzeUxvY2F0b3IgdG8gcXVpY2tseSBzZXQgY29vcmRpbmF0ZXMuIFBhdGhzIChha2EgcG9seWxpbmVzKSBhcmUgYWxzbyBwb3NzaWJsZS4nOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICdVc2luZyBHb29nbGVNYXBzIHJlcXVpcmVzICJVc2UgR29vZ2xlTWFwcyIgcmlnaHRzJzsKJGxhbmdbJ3Bvc3R1bmluc3RhbGwnXSA9ICdBIHBpdHR5IHRvIG5vdGljZSB5b3UgcmVtb3ZlZCBtb2R1bGUgR29vZ2xlTWFwcy4gSG9wZSB5b3Ugd2lsbCB0cnkgYW5kIHVzZSBpdCBsYXRlci48YnIgLz4KPHN0cm9uZz5EaXJlY3RvcnkgdXBsb2Fkcy9Hb29nbGVNYXBzIGlzIG5vdCByZW1vdmVkITwvc3Ryb25nPic7CiRsYW5nWydyZWFsbHlfdW5pbnN0YWxsJ10gPSAnUmVhbGx5IHVuaW5zdGFsbCwgYWxsIGRhdGEgd2lsbCBiZSBsb3N0JzsKJGxhbmdbJ3VuaW5zdGFsbGVkJ10gPSAnTW9kdWxlIFVuaW5zdGFsbGVkLic7CiRsYW5nWydpbnN0YWxsZWQnXSA9ICdNb2R1bGUgdmVyc2lvbiAlcyBpbnN0YWxsZWQuJzsKJGxhbmdbJ3ByZWZzdXBkYXRlZCddID0gJ01vZHVsZSBwcmVmZXJlbmNlcyB1cGRhdGVkLic7CiRsYW5nWydhY2Nlc3NkZW5pZWQnXSA9ICdBY2Nlc3MgRGVuaWVkLiBQbGVhc2UgY2hlY2sgeW91ciBwZXJtaXNzaW9ucy4nOwokbGFuZ1snZXJyb3InXSA9ICdFcnJvciEnOwokbGFuZ1sndXBncmFkZWQnXSA9ICdNb2R1bGUgdXBncmFkZWQgdG8gdmVyc2lvbiAlcy4nOwokbGFuZ1snZWRpdCddID0gJ0VkaXQnOwokbGFuZ1snZGVsZXRlJ10gPSAnRGVsZXRlJzsKJGxhbmdbJ2FyZXlvdXN1cmUnXSA9ICdBcmUgeW91IHN1cmU/JzsKCiRsYW5nWydhZGRsb2NhdGlvbiddID0gJ0FkZCBsb2NhdGlvbic7CiRsYW5nWydhZGRtYXAnXSA9ICdBZGQgbWFwJzsKJGxhbmdbJ2FkZG1hcmtlciddID0gJ0FkZCBtYXJrZXInOwokbGFuZ1snYWRkcG9seWxpbmUnXSA9ICdBZGQgcG9seWxpbmUnOwokbGFuZ1snYWRkcmVzcyddID0gJ0FkZHJlc3MnOwokbGFuZ1snYmVsb25nc3RvbWFwJ10gPSAnQmVsb25ncyB0byBtYXAnOwokbGFuZ1snY29udHJvbHNpemVsYXJnZSddID0gJ0xhcmdlJzsKJGxhbmdbJ2NvbnRyb2xzaXplc21hbGwnXSA9ICdTbWFsbCc7CiRsYW5nWydkZWZhdWx0bWFwdHlwZSddID0gJ0RlZmF1bHQgbWFwIHR5cGUnOwokbGFuZ1snZV9iYWRhZGRyZXNzJ10gPSAnVGhlIGFkZHJlc3Mgc3BlY2lmaWVkIHdhcyBpbnZhbGlkIG9yIGNvdWxkIG5vdCBiZSBmb3VuZCc7CiRsYW5nWydlYXN5bG9jYXRvcl9hdXRvJ10gPSAnQXV0byc7CiRsYW5nWydlYXN5bG9jYXRvcl9jcm9zc2hhaXInXSA9ICdDcm9zc2hhaXInOwokbGFuZ1snZWFzeWxvY2F0b3JfZGVmYXVsdCddID0gJ0RlZmF1bHQnOwokbGFuZ1snZWFzeWxvY2F0b3JfaGFuZCddID0gJ0hhbmQnOwokbGFuZ1snZWFzeWxvY2F0b3JfaGVscCddID0gJ0hlbHAnOwokbGFuZ1snZWFzeWxvY2F0b3JfbW92ZSddID0gJ01vdmUnOwokbGFuZ1snZWFzeWxvY2F0b3Jfbm8nXSA9ICdOb25lJzsKJGxhbmdbJ2Vhc3lsb2NhdG9yX3BvaW50ZXInXSA9ICdQb2ludGVyJzsKJGxhbmdbJ2Vhc3lsb2NhdG9yX3Byb2dyZXNzJ10gPSAnUHJvZ3Jlc3MnOwokbGFuZ1snZWFzeWxvY2F0b3JfdGV4dCddID0gJ1RleHQnOwokbGFuZ1snZWFzeWxvY2F0b3Jfd2FpdCddID0gJ1dhaXQnOwokbGFuZ1snZWFzeWxvY2F0b3JsYXQnXSA9ICdMYXRpdHVkZSBvZiBjZW50ZXIgbWFwJzsKJGxhbmdbJ2Vhc3lsb2NhdG9ybGV2ZWwnXSA9ICdFYXN5IExvY2F0b3Igem9vbSBsZXZlbCc7CiRsYW5nWydlYXN5bG9jYXRvcmxvbiddID0gJ0xvbmdpdHVkZSBvZiBjZW50ZXIgbWFwJzsKJGxhbmdbJ2Vhc3lsb2NhdG9yc2F2ZWxhc3QnXSA9ICdTYXZlIGxhc3QgdXNlZCB2YWx1ZXMnOwokbGFuZ1snZWFzeWxvY2F0b3JzZXR0aW5ncyddID0gJ0Vhc3kgTG9jYXRvciBzZXR0aW5ncywgdG8gYmUgdXNlZCB3aGVuIGFkZGluZyBtYXAvbWFya2VyJzsKJGxhbmdbJ2Vhc3lsb2NhdG9ydGVtcGxhdGUnXSA9ICdUZW1wbGF0ZSBmb3IgbWFwIHRvIHNob3cnOwokbGFuZ1snZXhwb3J0dG9ncHgnXSA9ICdFeHBvcnQgdG8gR1BYIHdheXBvaW50cyc7CiRsYW5nWydncHhleHBvcnR0eXBlX3J0ZSddID0gJ1JvdXRlcyc7CiRsYW5nWydncHhleHBvcnR0eXBlX3RyayddID0gJ1RyYWNrcyc7CiRsYW5nWydncHhleHBvcnR0eXBlX3dwdCddID0gJ1dheXBvaW50cyc7CiRsYW5nWydpbXBvcnRmaWxlbm90Zm91bmQnXSA9ICdGaWxlICVzIHRvIGltcG9ydCBjb3VsZCBub3QgYmUgZm91bmQnOwokbGFuZ1snaW1wb3J0bmV3bmFtZSddID0gJyBKdXN0IGltcG9ydGVkJzsKJGxhbmdbJ2ltcG9ydGxvY2FscG9seWxpbmUnXSA9ICdJbXBvcnQgcG9seWxpbmUnOwokbGFuZ1snaW1wb3J0cG9seWxpbmVzdWNjZWVkZWQnXSA9ICdUaGUgaW1wb3J0IG9mIHRoZSBwb2x5bGluZSBlbmRlZCBzdWNjZXNmdWxseSc7CiRsYW5nWydpbmZvX3RyaWdnZXJjbGljayddID0gJ09uIGNsaWNrJzsKJGxhbmdbJ2luZm9fdHJpZ2dlcm1vdXNlb3ZlciddID0gJ09uIG1vdXNlIG92ZXInOwokbGFuZ1snaW52YWxpZG9wYWNpdHknXSA9ICdJbnZhbGlkIG9wYWNpdHkgKG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxKSc7CiRsYW5nWydpcyddID0gJ2lzJzsKJGxhbmdbJ2xhdGl0dWRlJ10gPSAnTGF0aXR1ZGUnOwokbGFuZ1snbG9uZ2l0dWRlJ10gPSAnTG9uZ2l0dWRlJzsKJGxhbmdbJ2xvb2t1cHNlcnZpY2UnXSA9ICdXaGljaCBsb29rdXAgc2VydmljZSB0byB1c2UnOwokbGFuZ1snbWFwX2lkJ10gPSAnTWFwIElEJzsKJGxhbmdbJ21hcGFkZGVkJ10gPSAnTWFwIGhhcyBiZWVuIGFkZGVkJzsKJGxhbmdbJ21hcGRlbGV0ZWQnXSA9ICdNYXAgKGFuZCBhbGwgaXRzIG1hcmtlcnMpIGhhcyBiZWVuIGRlbGV0ZWQnOwokbGFuZ1snbWFwcyddID0gJ01hcHMnOwokbGFuZ1snbWFwdHlwZWh5YnJpZCddID0gJ0h5YnJpZCc7CiRsYW5nWydtYXB0eXBlbWFwJ10gPSAnUm9hZG1hcCc7CiRsYW5nWydtYXB0eXBlc2F0ZWxsaXRlJ10gPSAnU2F0ZWxsaXRlJzsKJGxhbmdbJ21hcHR5cGV0ZXJyYWluJ10gPSAnVGVycmFpbic7CiRsYW5nWydtYXB1cGRhdGVkJ10gPSAnTWFwIGhhcyBiZWVuIHVwZGF0ZWQnOwokbGFuZ1snbWFya2VyJ10gPSAnTWFya2VyJzsKJGxhbmdbJ21hcmtlcmFkZGVkJ10gPSAnTWFya2VyIGhhcyBiZWVuIHNhdmVkJzsKJGxhbmdbJ21hcmtlcmRlbGV0ZWQnXSA9ICdNYXJrZXIgaGFzIGJlZW4gZGVsZXRlZCc7CiRsYW5nWydtYXJrZXJlcnJvciddID0gJ05vIG1hcmtlcnMgZm91bmQgaW4gZGlyZWN0b3J5IFwndXBsb2Fkcy9Hb29nbGVNYXBzL21hcmtlcnNcJyc7CiRsYW5nWydtYXJrZXJpY29uJ10gPSAnTWFya2VyIGljb24nOwokbGFuZ1snbWFya2VycyddID0gJ01hcmtlcnMnOwokbGFuZ1snbWFya2VydXBkYXRlZCddID0gJ01hcmtlciBoYXMgYmVlbiB1cGRhdGVkJzsKJGxhbmdbJ25vaWNvbnNlbGVjdGVkJ10gPSAnTm8gaWNvbiBzZWxlY3RlZCBhcyBtYXJrZXInOwokbGFuZ1snbm9rZXknXSA9ICdHb29nbGVNYXBzIEFQSSBrZXkgbWlzc2luZyBpbiBjb25maWd1cmF0aW9uJzsKJGxhbmdbJ25vbWFwJ10gPSAnTm8gbWFwIHByb3ZpZGVkJzsKJGxhbmdbJ25vbmFtZWdpdmVuJ10gPSAnTm8gbmFtZSBnaXZlbiwgd2hpbGUgdGhpcyBpcyBtYW5kYXRvcnknOwokbGFuZ1sncGF0aGVycm9yJ10gPSAnUGF0aCB0byBtYXJrZXIgZGlyZWN0b3J5IFwndXBsb2Fkcy9Hb29nbGVNYXBzL21hcmtlcnNcJyBkb2VzblwndCBleGlzdCc7CiRsYW5nWydwb2x5bGluZWFkZGVkJ10gPSAnUG9seWxpbmUgaGFzIGJlZW4gYWRkZWQnOwokbGFuZ1sncG9seWxpbmVkZWxldGVkJ10gPSAnUG9seWxpbmUgaGFzIGJlZW4gZGVsZXRlZCc7CiRsYW5nWydwb2x5bGluZXBhcnRkZWxldGVkJ10gPSAnUG9seWxpbmUgcGFydCBoYXMgYmVlbiBkZWxldGVkJzsKJGxhbmdbJ3BvbHlsaW5lcyddID0gJ1BvbHlsaW5lcyc7CiRsYW5nWydwb2x5bGluZXVwZGF0ZWQnXSA9ICdQb2x5bGluZSBoYXMgYmVlbiB1cGRhdGVkJzsKJGxhbmdbJ3F1ZXJ5X2FkZHJlc3MnXSA9ICdBZGRyZXNzIGxvb2t1cCc7CiRsYW5nWydyZXR1cm50b2xpc3QnXSA9ICdSZXR1cm4gdG8gbGlzdCc7CiRsYW5nWydzZXR0aW5ncyddID0gJ1NldHRpbmdzJzsKJGxhbmdbJ3NldHRpbmdzX3NhdmVkJ10gPSAnU2V0dGluZ3Mgc2F2ZWQnOwokbGFuZ1snU3VibWl0J10gPSAnU3VibWl0JzsKJGxhbmdbJ3RpdGxlX2FkZHJlc3MnXSA9ICdTZWFyY2ggbG9jYXRpb24gZm9yIGFkZHJlc3MnOwokbGFuZ1sndGl0bGVfYWRkcmVzc3F1ZXJ5J10gPSAnQWRkcmVzcyBxdWVyaWVzJzsKJGxhbmdbJ3RpdGxlX2FkbWluX3BhbmVsJ10gPSAnR29vZ2xlTWFwcyBNb2R1bGUnOwokbGFuZ1sndGl0bGVfYm91bmRzX2Z1ZGdlJ10gPSAnRnVkZ2UgZmFjdG9yIG9uIGVkZ2VzJzsKJGxhbmdbJ3RpdGxlX2NlbnRlcl9sYXQnXSA9ICdEZWZhdWx0IGNlbnRlciBsYXRpdHVkZSc7CiRsYW5nWyd0aXRsZV9jZW50ZXJfbG9uJ10gPSAnRGVmYXVsdCBjZW50ZXIgbG9uZ2l0dWRlJzsKJGxhbmdbJ3RpdGxlX2NvbG9yJ10gPSAnQ29sb3InOwokbGFuZ1sndGl0bGVfY29udHJvbHMnXSA9ICdFbmFibGUgY29udHJvbHMnOwokbGFuZ1sndGl0bGVfY29udHJvbHNfc2l6ZSddID0gJ0NvbnRyb2xzIHNpemUnOwokbGFuZ1sndGl0bGVfY3J1ZGVuZXNzJ10gPSAnQ3J1ZGVuZXNzJzsKJGxhbmdbJ3RpdGxlX2RlbCddID0gJ0RlbCc7CiRsYW5nWyd0aXRsZV9kaXJlY3Rpb25zJ10gPSAnU2hvdyBkaXJlY3Rpb25zJzsKJGxhbmdbJ3RpdGxlX2Rpc3RhbmNlJ10gPSAnRGlzdGFuY2UnOwokbGFuZ1sndGl0bGVfZGlzdGFuY2V1b20nXSA9ICdEaXN0YW5jZSB1bml0IG9mIG1lYXN1cmUnOwokbGFuZ1sndGl0bGVfZGlzdGFuY2V1b21kZWZhdWx0J10gPSAnRGVmYXVsdCBkaXN0YW5jZSB1bml0IG9mIG1lYXN1cmUnOwokbGFuZ1sndGl0bGVfZGVzY3JpcHRpb24nXSA9ICdEZXNjcmlwdGlvbic7CiRsYW5nWyd0aXRsZV9lYXN5bG9jYXRvciddID0gJ0Vhc3kgbG9jYXRvcic7CiRsYW5nWyd0aXRsZV9lYXN5bG9jYXRvcmN1cnNvciddID0gJ0N1cnNvciBvbiBiYWNrIGVuZCBtYXBzJzsKJGxhbmdbJ3RpdGxlX2V4YW1wbGUnXSA9ICdFeGFtcGxlJzsKJGxhbmdbJ3RpdGxlX2dweGV4cG9ydHR5cGUnXSA9ICdHUFggZXhwb3J0IHR5cGUnOwokbGFuZ1sndGl0bGVfaGVpZ2h0J10gPSAnSGVpZ2h0IG9mIG1hcCc7CiRsYW5nWyd0aXRsZV9pbXBvcnRmaWxlJ10gPSAnRmlsZSB0byBpbXBvcnQnOwokbGFuZ1sndGl0bGVfaW1wb3J0aGVscCddID0gJ1NlbGVjdCBtYXAgdGhhdCB0aGUgcG9seWxpbmUgd2lsbCBiZWxvbmcgdG8uIDxiciAvPgpUaGUgY3J1ZGVuZXNzIGZhY3RvciB0aGF0IGlzIGVudGVyZWQgd2lsbCBnZW5lcmF0ZSBldmVyeSBuLXRoIHdheSBwb2ludC90cmFjayBwb2ludC9yb3V0ZSBwb2ludCBhIHNlcXVlbmNlLiBUaHVzIGVudGVyaW5nIGEgCjEwIGhlcmUgbWVhbnMgb25seSB0aGUgMTB0aCwgMjB0aCwgMzB0aCBldGMgcmVhZCBwb2ludCB3aWxsIHJlc3VsdCBpbiBhIHBvaW50IG9uIHRoZSBwb2x5bGluZS4gRGVmYXVsdHMgdG8gMS48YnIgLz4KU2VsZWN0IGEgbG9jYWwgc3RvcmVkIGZpbGUuPGJyIC8+ClByZXNzIHN1Ym1pdCB0byBjcmVhdGUgdGhlIHBvbHlsaW5lLjxiciAvPgo8c3Ryb25nPk5vdGVzOjwvc3Ryb25nPjxiciAvPgogIC0gT25seSBsYXRpdHVkZS9sb25naXR1ZGUgYW5kIGRlc2NyaXB0aW9uIGFyZSBpbXBvcnRlZDs8YnIgLz4KICAtIEZpbGUgdG8gaW1wb3J0IHNob3VsZCBmb2xsb3cgR1BYIHN0YW5kYXJkOzxiciAvPgogIC0gV2F5IHBvaW50cywgdHJhY2sgcG9pbnRzIGFuZCByb3V0ZSBwb2ludHMgYXJlIHVzZWQgdG8gcHJlcGFyZSBhIHBvbHlsaW5lOzxiciAvPgogIC0gSWYgYW4gaW1wb3J0ZWQgZmlsZSBjb250YWlucyBtb3JlIHRoYW4gb25lIHR5cGUgKGllLiB3YXkgcG9pbnRzIGFuZCByb3V0ZSBpbmZvcm1hdGlvbiksIG11bHRpcGxlIApwb2x5bGluZXMgYXJlIHByZXBhcmVkLjxiciAvPgo8YnIgLz4nOwokbGFuZ1sndGl0bGVfaW5mbyddID0gJ01hcmtlciBpbmZvIChodG1sIGFsbG93ZWQpJzsKJGxhbmdbJ3RpdGxlX2luZm9fdHJpZ2dlciddID0gJ0luZm8gd2luZG93IHRyaWdnZXInOwokbGFuZ1sndGl0bGVfaW5mb193aW5kb3cnXSA9ICdFbmFibGUgbWFya2VyIGluZm8gd2luZG93cyc7CiRsYW5nWyd0aXRsZV9sb2NhdGlvbnByZWNpc2lvbiddID0gJ0xvY2F0aW9uIHByZWNpc2lvbiAobnVtYmVyIG9mIGRlY2ltYWxzKTonOwokbGFuZ1sndGl0bGVfbG9jYXRpb25zJ10gPSAnTG9jYXRpb25zJzsKJGxhbmdbJ3RpdGxlX21hcHR5cGUnXSA9ICdNYXAgdHlwZSc7CiRsYW5nWyd0aXRsZV9tb2RfYWRtaW4nXSA9ICdNb2R1bGUgQWRtaW4gUGFuZWwnOwokbGFuZ1sndGl0bGVfbW9kX3ByZWZzJ10gPSAnTW9kdWxlIFByZWZlcmVuY2VzJzsKJGxhbmdbJ3RpdGxlX25hbWUnXSA9ICdOYW1lJzsKJGxhbmdbJ3RpdGxlX29wYWNpdHknXSA9ICdPcGFjaXR5JzsKJGxhbmdbJ3RpdGxlX3NjYWxlX2NvbnRyb2wnXSA9ICdTaG93IHNjYWxlJzsKJGxhbmdbJ3RpdGxlX3NlYXJjaHJlcXVlc3QnXSA9ICdMb2NhdGlvbiBmb3InOwokbGFuZ1sndGl0bGVfc2VxJ10gPSAnU2VxJzsKJGxhbmdbJ3RpdGxlX3NlcWluY3JlbWVudCddID0gJ1NlcXVlbmNlIGZvciBwb2x5bGluZSBpbmNyZW1lbnRzIHdpdGg6JzsKJGxhbmdbJ3RpdGxlX3NpZGViYXInXSA9ICdTaWRlYmFyIGZvciBtYXJrZXJzJzsKJGxhbmdbJ3RpdGxlX3R5cGUnXSA9ICdUeXBlJzsKJGxhbmdbJ3RpdGxlX3R5cGVfY29udHJvbHMnXSA9ICdEaXNwbGF5IHR5cGUgY29udHJvbHMgZW5hYmxlZCc7CiRsYW5nWyd0aXRsZV93ZWlnaHQnXSA9ICdMaW5lIHdlaWdodCAoaW4gcGl4ZWxzKSc7CiRsYW5nWyd0aXRsZV93aWR0aCddID0gJ1dpZHRoIG9mIG1hcCBvbiBmcm9udCBlbmQnOwokbGFuZ1sndGl0bGVfem9vbSddID0gJ1pvb20gbGV2ZWwnOwokbGFuZ1sndGl0bGVfem9vbV9lbmNvbXBhc3MnXSA9ICdUcnkgdG8gZml0IGFsbCBtYXJrZXJzJzsKJGxhbmdbJ3RpdGxlX3pvb21zY3JvbGx3aGVlbCddID0gJ0FsbG93IHdoZWVsIHNjcm9sbCB6b29taW5nJzsKJGxhbmdbJ3VvbV9jZW50aW1ldGVyJ10gPSAnY20nOwokbGFuZ1sndW9tX2ZlZXQnXSA9ICdGZWV0JzsKJGxhbmdbJ3VvbV9pbmNoJ10gPSAnSW5jaCc7CiRsYW5nWyd1b21fa2lsb21ldGVyJ10gPSAnS20nOwokbGFuZ1sndW9tX21ldGVyJ10gPSAnTXRyJzsKJGxhbmdbJ3VvbV9taWxlJ10gPSAnTWlsZSc7CiRsYW5nWyd1b21fbmF1dGljYWxtaWxlJ10gPSAnTk1pJzsKJGxhbmdbJ3VzZWNhY2hlJ10gPSAnVXNlIGNhY2hpbmcgZm9yIGdlb2NvZGVzIChub3Qgd29ya2luZyB5ZXQpJzsKJGxhbmdbJ3VzZW1hcmtlcnNoYWRvd3MnXSA9ICdVc2UgbWFya2VyIHNoYWRvd3M/JzsKJGxhbmdbJ3lhaG9vYXBwaWQnXSA9ICdBcHBsaWNhdGlvbiBJRCBmb3IgeWFob28nOyAKJGxhbmdbJ3lvdXJtYXBzJ10gPSAnWW91ciBNYXBzJzsKJGxhbmdbJ3lvdXJtYXJrZXJzJ10gPSAnWW91ciBNYXJrZXJzJzsKCiRsYW5nWydoZWxwJ10gPSAnCjxoMz5XaGF0IERvZXMgVGhpcyBEbz88L2gzPgo8cD5UaGlzIG1vZHVsZSBpcyBpbnRlbnRlZCBmb3IgaW50ZWdyYXRpbmcgR29vZ2xlTWFwcyBhcyBhIHBhcnQgb2YgeW91ciBzaXRlLjwvcD4KPGgzPkhvdyBEbyBJIFVzZSBJdDwvaDM+CjxwPkZpcnN0IHlvdSBtdXN0IHVwZGF0ZSB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgbW9kdWxlLCB0byBoYXZlIGRlZmF1bHRzIHNldCBmb3IgbmV3IG1hcHMuPC9wPgo8cD5UaGVuIHlvdSBjYW4gY2FsbCB0aGlzIG1vZHVsZSBpbiB5b3VyIHRlbXBsYXRlIHdpdGgge2Ntc19tb2R1bGUgbW9kdWxlPVwnR29vZ2xlTWFwc1wnIG1hcD1cJ3Rlc3RcJ30gPC9wPgo8aDM+TWFya2VyczwvaDM+CjxwPlVzZXIgZGVmaW5lZCBtYXJrZXJzIGNhbiBiZSBsb2FkZWQgaW50byB1cGxvYWRzL0dvb2dsZU1hcHMvbWFya2Vycy4gVGhlIGNvbm5lY3RlZCBzaGFkb3cgaW1hZ2VzIHNob3VsZCBiZSBsb2FkZWQgaW4gCgl1cGxvYWRzL0dvb2dsZU1hcHMvbWFya2Vyc2hhZG93cy48YnI+CglOYW1pbmcgY29udmVudGlvbiBpcyBbbWFya2VyaWNvbl1zLnBuZyAoaWUuIG1hcmtlciBpcyBiaWdibHVlLnBuZywgbWFya2Vyc2hhZG93IGlzIGJpZ2JsdWVzLnBuZykuPGJyPgoJSWYgYSBzaGFkb3cgaXMgbm90IGZvdW5kLCB0aGUgZGVmYXVsdCB2ZXJzaW9uIHdpbGwgYmUgdXNlZCAod2hpY2ggbWF5IG5vdCBiZSB0aGUgY29ycmVjdCBzaGFkb3cgb2YgdGhlIG1hcmtlciBhdCBhbGwpLjxicj4KCUluIHRoZSBzZXR0aW5ncyB1c2UgdGhlIHByZWZlcmVuY2UgXCdVc2UgbWFya2VyIHNoYWRvd3NcJyB0byBzaG93L2hpZGUgdGhlbS4gU2hvd2luZyB0aGUgc2hhZG93cyBzbG93cyBkb3duIHRoZSBidWlsZHVwIG9mIHRoZQoJbWFwLCBkdWUgdG8gbW9yZSBpbnRlcm5hbCBjaGVja3MuPGJyPgoJT25seSBpbWFnZXMgd2l0aCBleHRlbnNpb24gLnBuZyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZC48L3A+CjxwPk1hcmtlcnMgaGF2ZSB0aGUgb3B0aW9uIHRvIGluY2x1ZGUgdGV4dC4gVGhpcyB0ZXh0IG1heSBjb250YWluIGh0bWwgY29kaW5nLiBJbiB0aGlzIHdheSB5b3UgY2FuIHNob3cKaW1hZ2VzLCBjb250cm9sIHRoZSBjb2xvciBvZiB2YXJpb3VzIHBhcnRzLjxiciAvPgpNYXJrZXIgaW5mb3JtYXRpb24gbWF5IGNvbnRhaW4gb25lIG9yIG1vcmUgZ2xvYmFsIGNvbnRlbnQgYmxvY2tzLiBFdmVuIGNvbnRlbnQgYmxvY2tzIHRoYXQgY29udGFpbiAKdGFncyAoaWUuIHRvIG1vZHVsZXMpIG1heSBiZSB1c2VkLiAKPC9wPgo8aDM+TGluZXM8L2gzPgo8cD5Qb2x5bGluZXMgYWxsb3dzIHlvdSB0byBkcmF3IGxpbmVzIGZyb20gYSBjZXJ0YWluIGNvb3JkaW5hdGUgb24gYSBtYXAgdG8gdGhlIG5leHQuIE11bHRpcGxlIGxpbmVzIGFyZSBwb3NzaWJsZSAKcGVyIG1hcC4gVGhpcyBhbGxvd3MgeW91IHRvIHByZXBhcmUgdmlzdWFsIG9uZSBsaW5lIHRoYXQgaXMgYSBjb21iaW5hdGlvbiBvZiBtdWx0aXBsZSBjb2xvcmVkIApzZXBhcmF0ZSBwb2x5bGluZSBzZXR1cHMuPC9wPgo8cD5Gcm9tIHRoZSBwb2x5bGluZXMgdGFiLCB5b3UgYXJlIGFibGUgdG8gaW1wb3J0IGdweCBmaWxlcy4gT25lIG9mIHRoZSB0ZXN0IGZpbGVzIHVzZWQgaXM6IDxhIGhyZWY9Imh0dHA6Ly93d3cudG9wb2dyYWZpeC5jb20vZmVsbHNfbG9vcC5ncHgiIHRhcmdldD0iX2JsYW5rIj5mZWxsc19sb29wLmdweCBuZWFyIEJvc3RvbiBNQTwvYT48YnIgLz4KVGVzdGluZyBoYXMgYmVlbiBwZXJmb3JtZWQgd2l0aCBhIDEuOCBNYiBmaWxlIHdpdGggbW9yZSB0aGFuIDE1LjAwMCB0cmFjayBwb2ludHMuPGJyIC8+CkltcG9ydGluZyB0aGlzIGFtb3VudCBzbG93cyBkb3duIHRoZSByZW5kZXJpbmcgb2YgdGhlIHBhZ2UgaW4gdGhlIGJhY2sgZW5kIGFuZCB0aGUgZnJvbnQgZW5kLiBEdXJpbmcgdGhlIGltcG9ydCBvZiAKYSBmaWxlIHlvdSBjb3VsZCB1c2UgdGhlIFwnQ3J1ZGVuZXNzXCcgZmFjdG9yIHdoaWNoIHdpbGwgdGFrZSBldmVyeSBudGggcG9pbnQgdG8gaW1wb3J0LiBUaHVzIDE1LjAwMCBwb2ludHMgCmltcG9ydGVkIHdpdGggYSBjcnVkZW5lc3MgZmFjdG9yIG9mIDEwMCB3aWxsIGdlbmVyYXRlIDE1MCBjb29yZGluYXRpb25zIGZvciB0aGUgaW1wb3J0ZWQgR1BYIGZpbGUuCjwvcD4KPGgzPlBhcmFtZXRlcnM8L2gzPgo8cD5UaGlzIG1vZHVsZSBpcyBldmVuIG1vcmUgZmxleGlibGUgdGhyb3VnaCB0aGUgdXNhZ2Ugb2YgdGhlIHBhcmFtZXRlcnMgKHNlZSB0aGUgcGFyYW1ldGVyIGxpc3QpLiBFYWNoIHBhcmFtZXRlciBhcyBhdmFpbGFibGUgZHVyaW5nIHRoZSBwcmVwYXJhdGlvbiBvZiBhIG1hcCwgY2FuIGJlIAoJb3ZlcnJpZGVuIGZvciB0aGUgZnJvbnQgZW5kLiBTbyB5b3UgYXJlIGFibGUgdG8gcHJlcGFyZSBvbmUgbWFwIGFuZCBkaXNwbGF5IGl0IGluIHZhcmlvdXMgd2F5cyBieSB1c2luZyBvbmUgb3IgbW9yZSBwYXJhbWV0ZXJzLjwvcD4KPGgzPlNldHRpbmdzPC9oMz4KPHA+SW4gdGhlIHNldHRpbmdzIHRhYiBpdCBpcyBwb3NzaWJsZSB0byBwcmVwYXJlIGEgbnVtYmVyIG9mIGRlZmF1bHQgc2V0dGluZ3MgZm9yIHdoYXQgaXMgY2FsbGVkIHRoZSA8c3Ryb25nPlwnRWFzeSBMb2NhdG9yXCc8L3N0cm9uZz4uIFdoZW4gYWRkaW5nIGEgbmV3IG1hcCwKYSBtYXAgaXMgc2hvd24gYmFzZWQgdXBvbiB0aGVzZSBkZWZhdWx0IHNldHRpbmdzLjxiciAvPgpXaGVuIGVkaXRpbmcgYSBtYXAgb3IgYSBtYXJrZXIsIHRoZSBzaG93biBtYXAgaXMgYWx3YXlzIGNlbnRlcmVkIGF0IHRoZSBjb29yZGluYXRlcyBzaG93biBqdXN0IGJlbG93IHRoZSBtYXAuPGJyIC8+CldoZW4geW91IGVkaXQgYSBtYXAsIHRoZSBtYXAgc2V0dGluZ3MgKGNlbnRlciBjb29yZGluYXRlcyBhbmQgem9vbSBsZXZlbCkgYXJlIHVzZWQgdG8gcHJlcGFyZSB0aGUgRWFzeSBMb2NhdG9yLjxiciAvPgpUdXJuaW5nIG9uIHRoZSBzZXR0aW5nIFwnU2F2ZSBsYXN0IHVzZWQgdmFsdWVzXCcsIHdpbGwgc2F2ZSB0aGUgY29vcmRpbmF0ZXMsIHpvb20gbGV2ZWwgd2hlbiB1c2VkIG9uIGEgbWFwLiBUaGUgbmV4dCB0aW1lIHlvdSBhZGQKYSBtYXAsIHRoZSBsYXN0IHNhdmVkIGNvb3JkaW5hdGVzIGFyZSB1c2VkIHRvIHNob3cgdGhlIEVhc3kgTG9jYXRvci48YnIgLz4KTm90ZTogVGhpcyBzYXZpbmcgaXMgb25seSBkb25lIG9uIGVkaXRpbmcgYSBtYXAgb3IgbWFya2VyICh6b29tIGxldmVsIG5vdCBzYXZlZCB3aGVuIGVkaXRpbmcgYSBtYXJrZXIpLiA8YnIgLz4KVGhlIEdQWCBleHBvcnQgdHlwZSBpcyB1c2VkIHdoZW4gZXhwb3J0aW5nIGEgcG9seWxpbmUgdG8gYSBncHggZmlsZS4gRGVwZW5kaW5nIG9uIHlvdXIgZGV2aWNlIAp5b3Ugd2lsbCB1c2Ugb25lIG9mIHRoZSBhdmFpbGFibGUgdHlwZXMuIFlvdSB3aWxsIGhhdmUgdG8gZXhwZXJpbWVudCB3aXRoIHRoaXMgc2V0dGluZyBpbiAKY29uanVuY3Rpb24gd2l0aCB0aGUgZXhwb3J0IG9mIGEgcG9seWxpbmUuPC9wPgo8aDM+VHJhbnNsYXRpb25zPC9oMz4KVHJhbnNsYXRpb25zIG9mIHRoaXMgbW9kdWxlIGNhbiBiZSBmb3VuZCB2aWEgdGhlIDxhIGhyZWY9Imh0dHA6Ly9zdm4uY21zbWFkZXNpbXBsZS5vcmcvc3ZuL3RyYW5zbGF0ZWNlbnRlci9tb2R1bGVzL0dvb2dsZU1hcHMvIiB0YXJnZXQ9Il9ibGFuayI+dHJhbnNsYXRpb24gY2VudGVyIGluIHRoZSBmb3JnZTwvYT4uCjxoMz5TdXBwb3J0PC9oMz4KPHA+VGhpcyBtb2R1bGUgZG9lcyBub3QgaW5jbHVkZSBjb21tZXJjaWFsIHN1cHBvcnQuIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIG51bWJlciBvZiByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIGhlbHAgeW91IHdpdGggaXQ6PGJyPgo8dWw+Cgk8bGk+VGhlIENNUyBNYWRlIFNpbXBsZSBmb3J1bTs8L2xpPgo8L3VsPgo8L3A+CjxwPkFzIHBlciB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzLWlzLiBQbGVhc2UgcmVhZCB0aGUgdGV4dApvZiB0aGUgbGljZW5zZSBmb3IgdGhlIGZ1bGwgZGlzY2xhaW1lci48L3A+Cgo8aDM+U2VjdXJpdHk8L2gzPgo8cD5Vc2VyIG11c3QgaGF2ZSAiVXNlIEdvb2dsZU1hcHMiIHBlcm1pc3Npb25zIHNldCB0byBlZGl0IG1hcHM8L3A+Cic7CgovLyBwYXJhbSBoZWxwCiRsYW5nWydoZWxwX3BhcmFtX2JvdW5kc19mdWRnZSddID0gJ1RoaXMgd2lsbCBhZGp1c3QgaG93IG11Y2ggbWFwIGJvdW5kYXJ5IGVuY29tcGFzc2VzIHRoZSBtYXAgbWFya2Vycy4nOwokbGFuZ1snaGVscF9wYXJhbV9jZW50ZXJsYXQnXSA9ICdUaGUgbGF0aXR1ZGUgdG8gd2hpY2ggdGhlIG1hcCBzaG91bGQgYmUgY2VudGVyZWQuJzsKJGxhbmdbJ2hlbHBfcGFyYW1fY2VudGVybG9uJ10gPSAnVGhlIGxvbmdpdHVkZSB0byB3aGljaCB0aGUgbWFwIHNob3VsZCBiZSBjZW50ZXJlZC4nOwokbGFuZ1snaGVscF9wYXJhbV9jb250cm9scyddID0gJ0lmIHNldCB0byAwICh6ZXJvKSwgdGhlcmUgd2lsbCBiZSBubyBjb250cm9scyB0byB6b29tL21vdmUgYXJvdW5kIHRoZSBtYXAuJzsKJGxhbmdbJ2hlbHBfcGFyYW1fY29udHJvbHNfc2l6ZSddID0gJ1RoaXMgc2V0cyB0aGUgbWFwIGNvbnRyb2wgc2l6ZS4gUmVsZXZhbnQgb25seSBpZiBtYXAgY29udHJvbHMgYXJlCmVuYWJsZWQuIGxhcmdlID0gbWFwIHpvb20vbW92ZSB3aXRoIHNsaWRlci4gc21hbGwgPSB6b29tL21vdmUgd2l0aG91dCBzbGlkZXIuIExhcmdlIGlzIGRlZmF1bHQuJzsKJGxhbmdbJ2hlbHBfcGFyYW1fZGlyZWN0aW9ucyddID0gJ1RoaXMgZW5hYmxlcyBtYXAgZGlyZWN0aW9ucyBpbiB0aGUgYm90dG9tIG9mIHRoZSBwb3AtdXAgaW5mbyB3aW5kb3cuIERlZmF1bHQgaXMgZGlzYWJsZWQuClwnMVwnIFdpbGwgZW5hYmxlIHRoZSBkaXJlY3Rpb25zLic7CiRsYW5nWydoZWxwX3BhcmFtX2hlaWdodCddID0gJ1NldHMgdGhlIGhlaWdodCBvZiB0aGUgbWFwIHdpbmRvdy4gVGhpcyBjYW4gYmUgZWl0aGVyIHB4IG9yICUuJzsKJGxhbmdbJ2hlbHBfcGFyYW1faW5mb190cmlnZ2VyJ10gPSAnVGhpcyBzZXRzIHRoZSBpbmZvIHdpbmRvdyB0cmlnZ2VyIGJlaGF2aW9yLiBjbGljayA9IGluZm8gd2luZG93IGNvbWVzIHVwCiAgICAgICAgd2hlbiBjbGlja2luZyBvbiBhIG1hcmtlci4gbW91c2VvdmVyID0gaW5mbyB3aW5kb3cgY29tZXMgdXAgd2hlbiBtb3VzaW5nIG92ZXIgYSBtYXJrZXIuJzsKJGxhbmdbJ2hlbHBfcGFyYW1faW5mb193aW5kb3cnXSA9ICdFbmFibGVzIGluZm8gd2luZG93cyBvbiBtYXAgbWFya2Vycy4nOwokbGFuZ1snaGVscF9wYXJhbV9sYW5ndWFnZSddID0gJ1NlZTogPGEgaHJlZj0iaHR0cDovL3NwcmVhZHNoZWV0cy5nb29nbGUuY29tL3B1Yj9rZXk9cDlwZHdzYWkyaERNc0xrWHNvTTA1S1EmZ2lkPTEiIHRhcmdldD0iX2JsYW5rIj4KdGhlIGxpc3Qgb2YgbGFuZ3VhZ2VzPC9hPic7CiRsYW5nWydoZWxwX3BhcmFtX21hcCddID0gJ1NldCB3aGljaCBtYXAgdG8gc2hvdyc7CiRsYW5nWydoZWxwX3BhcmFtX3BhbiddID0gJ1VzZSBcJzFcJyBvciB0cnVlIHRvIHNob3cgcGFubmluZyBjb250cm9sIG9uIG1hcCAoZGVmYXVsdCBvZmYpJzsKJGxhbmdbJ2hlbHBfcGFyYW1fc2NhbGUnXSA9ICdVc2UgXCcxXCcgb3IgdHJ1ZSB0byBzaG93IHNjYWxlLic7CiRsYW5nWydoZWxwX3BhcmFtX3NpZGViYXInXSA9ICdVc2UgXCcxXCcgdG8gZW5hYmxlIHRoZSBtYXAgc2lkZWJhci4nOwokbGFuZ1snaGVscF9wYXJhbV9zdHJlZXR2aWV3J10gPSAnVXNlIFwnMVwnIG9yIHRydWUgdG8gc2hvdyB0aGUgc3RyZWV0dmlldyBwZWdtYW4gKGRlZmF1bHQgb2ZmKSc7CiRsYW5nWydoZWxwX3BhcmFtX3R5cGUnXSA9ICdUaGlzIHNldHMgdGhlIGRlZmF1bHQgbWFwIHR5cGUuIFJlbGV2YW50IG9ubHkgaWYgbWFwIHR5cGUgY29udHJvbHMgYXJlIGVuYWJsZWQuIAoJbWFwID0gZGVmYXVsdCBtYXAuIHNhdGVsbGl0ZSA9IHNhdGVsbGl0ZSB2aWV3LiBoeWJyaWQgPSBoeWJyaWQgdmlldy4gdGVycmFpbiA9IHBoeXNpY2FsIHZpZXcgd2l0aCByb2Fkcyc7CiRsYW5nWydoZWxwX3BhcmFtX3R5cGVfY29udHJvbHMnXSA9ICdVc2UgXCcxXCcgZW5hYmxlIHRoZSBtYXAgdHlwZSBjb250cm9scyAobWFwL3NhdGVsbGl0ZS9oeWJyaWQvdGVycmFpbiknOwokbGFuZ1snaGVscF9wYXJhbV93aWR0aCddID0gJ1NldHMgdGhlIHdpZHRoIG9mIHRoZSBtYXAgd2luZG93LiBUaGlzIGNhbiBiZSBlaXRoZXIgcHggb3IgJS4nOwokbGFuZ1snaGVscF9wYXJhbV96b29tJ10gPSAnVGhpcyBzZXRzIHRoZSBtYXAgem9vbSBsZXZlbC4nOwokbGFuZ1snaGVscF9wYXJhbV96b29tX2VuY29tcGFzcyddID0gJ1VzZSBcJzFcJyB0byBlbmFibGUgdGhlIHpvb20gZW5jb21wYXNzIHNvIG1hcCB6b29tIGlzIGFzIHNtYWxsIGFzIHBvc3NpYmxlCiAgICAgICAgYW5kIGluY2x1ZGUgYWxsIG1hcCBtYXJrZXJzLic7CgovL3RhYmxlIGZpZWxkcwokbGFuZ1sndF9uYW1lJ10gPSAnTmFtZSc7CiRsYW5nWyd0X2JlbG9uZ3NfdG8nXSA9ICdCZWxvbmdzIHRvIG1hcCc7CiRsYW5nWyd0X2Rlc2NyaXB0aW9uJ10gPSAnRGVzY3JpcHRpb24nOwokbGFuZ1snY2VudGVyX2xhdCddID0gJ0RlZmF1bHQgY2VudGVyIGxhdGl0dWRlJzsKJGxhbmdbJ2NlbnRlcl9sb24nXSA9ICdEZWZhdWx0IGNlbnRlciBsb25naXR1ZGUnOwokbGFuZ1sndF90eXBlJ10gPSAnRGlzcGxheSB0eXBlJzsKJGxhbmdbJ3Rfd2lkdGgnXSA9ICdXaWR0aCc7CiRsYW5nWyd0X2hlaWdodCddID0gJ0hlaWdodCc7CiRsYW5nWyd0X2NvbnRyb2xzJ10gPSAnRW5hYmxlIGNvbnRyb2xzJzsKJGxhbmdbJ3RfY29udHJvbHNfc2l6ZSddID0gJ0NvbnRyb2xzIHNpemUnOwokbGFuZ1sndF9zaWRlYmFyJ10gPSAnU2lkZWJhciBmb3IgbWFya2Vycyc7CiRsYW5nWyd0X3R5cGVfY29udHJvbHMnXSA9ICdEaXNwbGF5IHR5cGUgY29udHJvbHMgZW5hYmxlZCc7CiRsYW5nWyd0X2RpcmVjdGlvbnMnXSA9ICdTaG93IGRpcmVjdGlvbnMnOwokbGFuZ1sndF96b29tJ10gPSAnWm9vbSBsZXZlbCc7CiRsYW5nWyd0X3pvb21fZW5jb21wYXNzJ10gPSAnVHJ5IHRvIGZpdCBhbGwgbWFya2Vycyc7CiRsYW5nWyd0X3pvb21zY3JvbGx3aGVlbCddID0gJ0FsbG93IHdoZWVsIHNjcm9sbCB6b29taW5nJzsKJGxhbmdbJ3Rfc2NhbGVfY29udHJvbCddID0gJ1Nob3cgc2NhbGUnOwokbGFuZ1sndF9ib3VuZHNfZnVkZ2UnXSA9ICdCb3VuZHNfZnVkZ2UnOwokbGFuZ1sndF9pbmZvX3dpbmRvdyddID0gJ0VuYWJsZSBtYXJrZXIgaW5mbyB3aW5kb3dzJzsKJGxhbmdbJ3RfaW5mb190cmlnZ2VyJ10gPSAnSW5mbyB3aW5kb3cgdHJpZ2dlcic7CgokbGFuZ1sndF9pbmZvJ10gPSAnTWFya2VyIGluZm8gKGh0bWwgYWxsb3dlZCknOwokbGFuZ1sndF9sYW4nXSA9ICdMYXRpdHVkZSc7CiRsYW5nWyd0X2xvbiddID0gJ0xvbmdpdHVkZSc7CiRsYW5nWyd0X2ljb24nXSA9ICdNYXJrZXIgaWNvbic7CiRsYW5nWyd0X2FkZHJlc3MnXSA9ICdNYXJrZXIgYWRkcmVzcyc7Cj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/class.googlemaps_utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyBHb29nbGVNYXBzIChpZiB5b3UgZG9uJ3Qga25vdyB0aGlzIG9uZSA6LSkgR29vZ2xlIGl0ISkuIEEgbW9kdWxlIGZvciBDTVMgLSBDTVMgTWFkZSBTaW1wbGUKIyBDb3B5cmlnaHQgKGMpIDIwMTEgYnkgRHVrZXRvd24gCiMKIyBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIGFkZGluZyBhIHBvbHlsaW5lCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMgVGhlIG1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL2dvb2dsZW1hcHMKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpjbGFzcyBnb29nbGVtYXBzX3V0aWxzCnsKCWZ1bmN0aW9uIGdldF9saXN0X21hcHMoKSB7CgkJaWYgKCRpdGVtbnVtYmVyID09IC0xKSByZXR1cm4gZmFsc2U7CgkJCgkJJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKCQkkbWFwbGlzdCA9IGFycmF5KCk7CgkJJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9nb29nbGVtYXBzX21hcHMgCgkJCU9SREVSIEJZIG5hbWUnOwoJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkpOwoJCXdoaWxlICgkZGJyZXN1bHQgJiYgJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkKCQl7CgkJCSRtYXBsaXN0WyRyb3dbJ25hbWUnXV0gPSAkcm93WydtYXBfaWQnXTsKCQl9CgkJcmV0dXJuICRtYXBsaXN0OwkKCgl9CgoJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQlnZXRfZGlzdGFuY2VfdW9tKCkKCQlBIGZ1bmN0aW9uIHRvIHJldHVybiBmaWxsZWQgYXJyYXkgd2l0aCBwb3NzaWJsZSBkaXN0YW5jZSB1bml0IG9mIG1lYXN1cmVzCgkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwkKCWZ1bmN0aW9uIGdldF9kaXN0YW5jZV91b20oKQoJewoJCSRkaXN0YW5jZXVvbWxpc3QgPSBhcnJheSgpOwoJCSRkaXN0YW5jZXVvbWxpc3RbJHRoaXMtPkxhbmcoJ3VvbV9raWxvbWV0ZXInKV0gPSAnSyc7CgkJJGRpc3RhbmNldW9tbGlzdFskdGhpcy0+TGFuZygndW9tX21pbGUnKV0gPSAnTSc7CgkJJGRpc3RhbmNldW9tbGlzdFskdGhpcy0+TGFuZygndW9tX21ldGVyJyldID0gJ1QnOwoJCSRkaXN0YW5jZXVvbWxpc3RbJHRoaXMtPkxhbmcoJ3VvbV9mZWV0JyldID0gJ0YnOwoJCSRkaXN0YW5jZXVvbWxpc3RbJHRoaXMtPkxhbmcoJ3VvbV9jZW50aW1ldGVyJyldID0gJ0MnOwoJCSRkaXN0YW5jZXVvbWxpc3RbJHRoaXMtPkxhbmcoJ3VvbV9pbmNoJyldID0gJ0knOwoJCSRkaXN0YW5jZXVvbWxpc3RbJHRoaXMtPkxhbmcoJ3VvbV9uYXV0aWNhbG1pbGUnKV0gPSAnTic7CgkJCgkJcmV0dXJuICRkaXN0YW5jZXVvbWxpc3Q7Cgl9CgoJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQlnZXRfZWFzeWxvY2F0b3JjdXJzb3JsaXN0KCkKCQlBIGZ1bmN0aW9uIHRvIHJldHVybiBmaWxsZWQgYXJyYXkgd2l0aCBwb3NzaWJsZSBjdXJzb3JzCgkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwkKCWZ1bmN0aW9uIGdldF9lYXN5bG9jYXRvcmN1cnNvcmxpc3QoKQoJewoJCSRlYXN5bG9jYXRvcmN1cnNvcmxpc3QgPSBhcnJheSgpOwoJCSRlYXN5bG9jYXRvcmN1cnNvcmxpc3RbJHRoaXMtPkxhbmcoJ2Vhc3lsb2NhdG9yX2Nyb3NzaGFpcicpXSA9ICdjcm9zc2hhaXInOwoJCSRlYXN5bG9jYXRvcmN1cnNvcmxpc3RbJHRoaXMtPkxhbmcoJ2Vhc3lsb2NhdG9yX2F1dG8nKV0gPSAnYXV0byc7CgkJJGVhc3lsb2NhdG9yY3Vyc29ybGlzdFskdGhpcy0+TGFuZygnZWFzeWxvY2F0b3JfZGVmYXVsdCcpXSA9ICdkZWZhdWx0JzsKCQkkZWFzeWxvY2F0b3JjdXJzb3JsaXN0WyR0aGlzLT5MYW5nKCdlYXN5bG9jYXRvcl9oZWxwJyldID0gJ2hlbHAnOwoJCSRlYXN5bG9jYXRvcmN1cnNvcmxpc3RbJHRoaXMtPkxhbmcoJ2Vhc3lsb2NhdG9yX21vdmUnKV0gPSAnbW92ZSc7CgkJJGVhc3lsb2NhdG9yY3Vyc29ybGlzdFskdGhpcy0+TGFuZygnZWFzeWxvY2F0b3JfcG9pbnRlcicpXSA9ICdwb2ludGVyJzsKCQkkZWFzeWxvY2F0b3JjdXJzb3JsaXN0WyR0aGlzLT5MYW5nKCdlYXN5bG9jYXRvcl90ZXh0JyldID0gJ3RleHQnOwoJCSRlYXN5bG9jYXRvcmN1cnNvcmxpc3RbJHRoaXMtPkxhbmcoJ2Vhc3lsb2NhdG9yX3dhaXQnKV0gPSAnd2FpdCc7CgkJJGVhc3lsb2NhdG9yY3Vyc29ybGlzdFskdGhpcy0+TGFuZygnZWFzeWxvY2F0b3JfaGFuZCcpXSA9ICdoYW5kJzsKCQkkZWFzeWxvY2F0b3JjdXJzb3JsaXN0WyR0aGlzLT5MYW5nKCdlYXN5bG9jYXRvcl9wcm9ncmVzcycpXSA9ICdwcm9ncmVzcyc7CgkJJGVhc3lsb2NhdG9yY3Vyc29ybGlzdFskdGhpcy0+TGFuZygnZWFzeWxvY2F0b3Jfbm8nKV0gPSAnbm8nOwoKCQlyZXR1cm4gJGVhc3lsb2NhdG9yY3Vyc29ybGlzdDsKCX0KCgkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJCWdldF9ncHhleHBvcnR0eXBlbGlzdCgpCgkJQSBmdW5jdGlvbiB0byByZXR1cm4gZmlsbGVkIGFycmF5IHdpdGggcG9zc2libGUgZ3B4IHJvdXRlIHR5cGVzCgkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwkKCWZ1bmN0aW9uIGdldF9ncHhleHBvcnR0eXBlbGlzdCgpCgl7CgkJJGdweGV4cG9ydHR5cGVsaXN0ID0gYXJyYXkoKTsKCQkkZ3B4ZXhwb3J0dHlwZWxpc3RbJHRoaXMtPkxhbmcoJ2dweGV4cG9ydHR5cGVfcnRlJyldID0gJ3J0ZSc7CgkJJGdweGV4cG9ydHR5cGVsaXN0WyR0aGlzLT5MYW5nKCdncHhleHBvcnR0eXBlX3RyaycpXSA9ICd0cmsnOwoJCSRncHhleHBvcnR0eXBlbGlzdFskdGhpcy0+TGFuZygnZ3B4ZXhwb3J0dHlwZV93cHQnKV0gPSAnd3B0JzsKCQkKCQlyZXR1cm4gJGdweGV4cG9ydHR5cGVsaXN0OwoJfQoKCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkJZ2V0X2h1bWFuZGlzdGFuY2VfdW9tKCkKCQlBIGZ1bmN0aW9uIHRvIHJldHVybiB1c2VyIGZyaWVuZGx5IHVuaXQgb2YgbWVhc3VyZSBkZXNjcmlwdGlvbiBvZiBkaXN0YW5jZQoJCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8JCglmdW5jdGlvbiBnZXRfaHVtYW5kaXN0YW5jZV91b20oJGh1bWFuZGlzdGFuY2V1b20gPSAnSycpCgl7CgkJc3dpdGNoICgkaHVtYW5kaXN0YW5jZXVvbSkgewoJCWNhc2UgJ0MnOgoJCQlyZXR1cm4gJHRoaXMtPkxhbmcoJ3VvbV9jZW50aW1ldGVyJyk7CgkJY2FzZSAnRic6CgkJCXJldHVybiAkdGhpcy0+TGFuZygndW9tX2ZlZXQnKTsKCQljYXNlICdJJzoKCQkJcmV0dXJuICR0aGlzLT5MYW5nKCd1b21faW5jaCcpOwoJCWNhc2UgJ0snOgoJCQlyZXR1cm4gJHRoaXMtPkxhbmcoJ3VvbV9raWxvbWV0ZXInKTsKCQljYXNlICdNJzoKCQkJcmV0dXJuICR0aGlzLT5MYW5nKCd1b21fbWlsZScpOwoJCWNhc2UgJ04nOgoJCQlyZXR1cm4gJHRoaXMtPkxhbmcoJ3VvbV9uYXV0aWNhbG1pbGUnKTsKCQljYXNlICdUJzoKCQkJcmV0dXJuICR0aGlzLT5MYW5nKCd1b21fbWV0ZXInKTsKCQl9Cgl9CgoJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCSAgR2VuZXJhbCBwb2ludCB0byBpbnNlcnQgbmV3IHBvbHlsaW5lCgkgIEFyZ3VtZW50czoKCSAgJG1hcF9pZCAtIFRoZSBtYXAgdGhhdCB0aGlzIHBvbHlsaW5lIHdpbGwgYmUgc2hvd24gb24KCSAgJG5hbWUgLSBUaGUgbmFtZS9kZXNjcmlwdGlvbiBvZiB0aGUgcG9seWxpbmUKCSAgJHN0cm9rZWNvbG9yIC0gVGhlIGNvbG9yIG9mIHRoZSBsaW5lIGluIGhleCB3aXRoICMKCSAgJHN0cm9rZW9wYWNpdHkgLSBUaGUgb3BhY2l0eSBvZiB0aGUgbGluZSBvbiB0aGUgbWFwCgkgICRzdHJva2V3ZWlnaHQgLSBUaGUgdGhpa25lc3Mgb2YgdGhlIHBvbHlsaW5lIG9uIHRoZSBtYXAKCSAgJGRpc3RhbmNlIC0gVGhlIHRvdGFsIGRpc3RhbmNlIG9mIHRoZSBwb2x5bGluZQoJICAkZGlzdGFuY2V1b20gLSBEaXN0YW5jZSB1bml0IG9mIG1lYXN1cmUKCSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCWZ1bmN0aW9uIGluc2VydF9wb2x5bGluZSgkbWFwX2lkLCAkbmFtZSwgJHN0cm9rZWNvbG9yID0gJyMwMDAwMDAnLAoJCQkkc3Ryb2tlb3BhY2l0eSA9IDEsICRzdHJva2V3ZWlnaHQgPSAyLCAkZGlzdGFuY2UgPSAwLCAKCQkJJGRpc3RhbmNldW9tID0gLTEpIHsKCQlpZiAoJG1hcF9pZCA9PSAwIHx8ICRtYXBfaWQgPT0gTlVMTCkgcmV0dXJuIGZhbHNlOwoJCWlmICgkbmFtZSA9PSAnJyB8fCAkbmFtZSA9PSBOVUxMKSByZXR1cm4gZmFsc2U7CgkJJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKCQlpZiAoJGRpc3RhbmNldW9tID09IC0xKSB7CgkJCSRkaXN0YW5jZXVvbSA9ICR0aGlzLT5nZXRQcmVmZXJlbmNlKCdkaXN0YW5jZXVvbScsICdLJyk7CgkJfQoJCQoJCSRwb2x5bGluZV9pZCA9ICRkYi0+R2VuSUQoY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfZ29vZ2xlbWFwc19wb2x5bGluZXNfc2VxJyk7CgkJJHF1ZXJ5ID0gJ0lOU0VSVCBJTlRPICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfZ29vZ2xlbWFwc19wb2x5bGluZXMKCQkJKHBvbHlsaW5lX2lkLCBtYXBfaWQsIG5hbWUsIHN0cm9rZWNvbG9yLCBzdHJva2VvcGFjaXR5LCBzdHJva2V3ZWlnaHQsIAoJCQlkaXN0YW5jZSwgZGlzdGFuY2V1b20pCgkJCVZBTFVFUyAoPyw/LD8sPyw/LD8sPyw/KSc7CgkJJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHBvbHlsaW5lX2lkLCAkbWFwX2lkLCAkbmFtZSwgc3RydG91cHBlcigkc3Ryb2tlY29sb3IpLCAKCQkJJHN0cm9rZW9wYWNpdHksICRzdHJva2V3ZWlnaHQsICRkaXN0YW5jZSwgCgkJCSRkaXN0YW5jZXVvbSkpOwoJCQoJCXJldHVybiAkcG9seWxpbmVfaWQ7Cgl9CgoJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCSAgR2VuZXJhbCBwb2ludCB0byBpbnNlcnQgbmV3IHBhcnRzIG9mIGEgcG9seWxpbmUKCSAgQXJndW1lbnRzOgoJICAkcG9seWxpbmVfaWQgLSBUaGUgbGluZSB0aGF0IHRoaXMgcGFydCB3aWxsIGJlIGFkZGVkIHRvCgkgICRzZXEgLSBUaGUgc2VxdWVuY2UgbnVtYmVyIChzbyB3ZXJlIGluIHRoZSBsaW5lIGRvZXMgdGhpcyBwb2ludCBmaXQKCSAgJGRlc2NyaXB0aW9uIC0gRGVzY3JpcHRpb24gb2YgdGhlIHBhcnQKCSAgJGxhdCAtIGxhdGl0dWRlIG9mIHRoZSBwb2ludCBvbiB0aGUgbWFwCgkgICRsb24gLSBsb25naXR1ZGUgb2YgdGhlIHBvaW50IG9uIHRoZSBtYXAKCSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCWZ1bmN0aW9uIGluc2VydF9wb2x5bGluZV9wYXJ0KCRwb2x5bGluZV9pZCwgJHNlcSwgJGRlc2NyaXB0aW9uID0gJycsCgkJCSRsYXQsICRsb24pIHsKCQlpZiAoJHBvbHlsaW5lX2lkID09IDAgfHwgJHBvbHlsaW5lX2lkID09IE5VTEwpIHJldHVybiBmYWxzZTsKCQlpZiAoZmxvYXR2YWwoJGxhdCkgPT0gJycgfHwgZmxvYXR2YWwoJGxhdCkgPT0gMCkgcmV0dXJuIGZhbHNlOwoJCWlmIChmbG9hdHZhbCgkbG9uKSA9PSAnJyB8fCBmbG9hdHZhbCgkbG9uKSA9PSAwKSByZXR1cm4gZmFsc2U7CgkJJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKCQkKCQkkcG9seWxpbmVwYXJ0X2lkID0gJGRiLT5HZW5JRChjbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9nb29nbGVtYXBzX3BvbHlsaW5lcGFydHNfc2VxJyk7CgkJJHF1ZXJ5ID0gJ0lOU0VSVCBJTlRPICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfZ29vZ2xlbWFwc19wb2x5bGluZXBhcnRzCgkJCShwb2x5bGluZXBhcnRfaWQsIHBvbHlsaW5lX2lkLCBzZXEsIGRlc2NyaXB0aW9uLCBsYXQsIGxvbikKCQkJVkFMVUVTICg/LD8sPyw/LD8sPyknOwoJCSRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRwb2x5bGluZXBhcnRfaWQsICRwb2x5bGluZV9pZCwgJHNlcSwgJGRlc2NyaXB0aW9uLCAKCQkJZmxvYXR2YWwoJGxhdCksIGZsb2F0dmFsKCRsb24pKSk7CgkJCgkJcmV0dXJuIHRydWU7Cgl9CgoJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCSAqIHhtbDJhcnJheSgpIHdpbGwgY29udmVydCB0aGUgZ2l2ZW4gWE1MIHRleHQgdG8gYW4gYXJyYXkgaW4gdGhlIFhNTCBzdHJ1Y3R1cmUuIAoJICogTGluazogaHR0cDovL3d3dy5iaW4tY28uY29tL3BocC9zY3JpcHRzL3htbDJhcnJheS8gCgkgKiBBcmd1bWVudHMgOiAKCSAqIAkkY29udGVudHMgLSBUaGUgWE1MIHRleHQgCgkgKiAgJGdldF9hdHRyaWJ1dGVzIC0gMSBvciAwLiBJZiB0aGlzIGlzIDEgdGhlIGZ1bmN0aW9uIHdpbGwgZ2V0IHRoZSBhdHRyaWJ1dGVzIGFzIHdlbGwgYXMgdGhlIHRhZyB2YWx1ZXMgLSB0aGlzIHJlc3VsdHMgaW4gYSBkaWZmZXJlbnQgYXJyYXkgc3RydWN0dXJlIGluIHRoZSByZXR1cm4gdmFsdWUuCgkgKiAgJHByaW9yaXR5IC0gQ2FuIGJlICd0YWcnIG9yICdhdHRyaWJ1dGUnLiBUaGlzIHdpbGwgY2hhbmdlIHRoZSB3YXkgdGhlIHJlc3VsdGluZyBhcnJheSBzdHVyY3R1cmUuIEZvciAndGFnJywgdGhlIHRhZ3MgYXJlIGdpdmVuIG1vcmUgaW1wb3J0YW5jZS4KCSAqIFJldHVybjogVGhlIHBhcnNlZCBYTUwgaW4gYW4gYXJyYXkgZm9ybS4gVXNlIHByaW50X3IoKSB0byBzZWUgdGhlIHJlc3VsdGluZyBhcnJheSBzdHJ1Y3R1cmUuCgkgKiBFeGFtcGxlczogCgkgKgkkYXJyYXkgPSAgeG1sMmFycmF5KGZpbGVfZ2V0X2NvbnRlbnRzKCdmZWVkLnhtbCcpKTsgCgkgKiAgJGFycmF5ID0gIHhtbDJhcnJheShmaWxlX2dldF9jb250ZW50cygnZmVlZC54bWwnLCAxLCAnYXR0cmlidXRlJykpOyAKCSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCWZ1bmN0aW9uIHhtbDJhcnJheSgkY29udGVudHMsICRnZXRfYXR0cmlidXRlcz0xLCAkcHJpb3JpdHkgPSAndGFnJykgeyAKCQlpZighJGNvbnRlbnRzKSByZXR1cm4gYXJyYXkoKTsgCgkKCQlpZighZnVuY3Rpb25fZXhpc3RzKCd4bWxfcGFyc2VyX2NyZWF0ZScpKSB7IAoJCQkvL3ByaW50ICIneG1sX3BhcnNlcl9jcmVhdGUoKScgZnVuY3Rpb24gbm90IGZvdW5kISI7IAoJCQlyZXR1cm4gYXJyYXkoKTsgCgkJfSAKCQoJCS8vIEdldCB0aGUgWE1MIHBhcnNlciBvZiBQSFAgLSBQSFAgbXVzdCBoYXZlIHRoaXMgbW9kdWxlIGZvciB0aGUgcGFyc2VyIHRvIHdvcmsgCgkJJHBhcnNlciA9IHhtbF9wYXJzZXJfY3JlYXRlKCcnKTsgCgkJeG1sX3BhcnNlcl9zZXRfb3B0aW9uKCRwYXJzZXIsIFhNTF9PUFRJT05fVEFSR0VUX0VOQ09ESU5HLCAiVVRGLTgiKTsgIyBodHRwOi8vbWludXRpbGxvLmNvbS9zdGV2ZS93ZWJsb2cvMjAwNC82LzE3L3BocC14bWwtYW5kLWNoYXJhY3Rlci1lbmNvZGluZ3MtYS10YWxlLW9mLXNhZG5lc3MtcmFnZS1hbmQtZGF0YS1sb3NzIAoJCXhtbF9wYXJzZXJfc2V0X29wdGlvbigkcGFyc2VyLCBYTUxfT1BUSU9OX0NBU0VfRk9MRElORywgMCk7IAoJCXhtbF9wYXJzZXJfc2V0X29wdGlvbigkcGFyc2VyLCBYTUxfT1BUSU9OX1NLSVBfV0hJVEUsIDEpOyAKCQl4bWxfcGFyc2VfaW50b19zdHJ1Y3QoJHBhcnNlciwgdHJpbSgkY29udGVudHMpLCAkeG1sX3ZhbHVlcyk7IAoJCXhtbF9wYXJzZXJfZnJlZSgkcGFyc2VyKTsgCgkKCQlpZighJHhtbF92YWx1ZXMpIHJldHVybjsvL0htbS4uLiAKCQoJCS8vIEluaXRpYWxpemF0aW9ucyAKCQkkeG1sX2FycmF5ID0gYXJyYXkoKTsgCgkJJHBhcmVudHMgPSBhcnJheSgpOyAKCQkkb3BlbmVkX3RhZ3MgPSBhcnJheSgpOyAKCQkkYXJyID0gYXJyYXkoKTsgCgkKCQkkY3VycmVudCA9ICYkeG1sX2FycmF5OyAvL1JlZmVyZW5jZSAKCQoJCS8vIEdvIHRocm91Z2ggdGhlIHRhZ3MuIAoJCSRyZXBlYXRlZF90YWdfaW5kZXggPSBhcnJheSgpOyAvL011bHRpcGxlIHRhZ3Mgd2l0aCBzYW1lIG5hbWUgd2lsbCBiZSB0dXJuZWQgaW50byBhbiBhcnJheQoJCWZvcmVhY2goJHhtbF92YWx1ZXMgYXMgJGRhdGEpIHsgCgkJCXVuc2V0KCRhdHRyaWJ1dGVzLCR2YWx1ZSk7IC8vUmVtb3ZlIGV4aXN0aW5nIHZhbHVlcywgb3IgdGhlcmUgd2lsbCBiZSB0cm91YmxlIAoJCgkJCS8vIFRoaXMgY29tbWFuZCB3aWxsIGV4dHJhY3QgdGhlc2UgdmFyaWFibGVzIGludG8gdGhlIGZvcmVhY2ggc2NvcGUgCgkJCS8vIHRhZyhzdHJpbmcpLCB0eXBlKHN0cmluZyksIGxldmVsKGludCksIGF0dHJpYnV0ZXMoYXJyYXkpLiAKCQkJZXh0cmFjdCgkZGF0YSk7IC8vV2UgY291bGQgdXNlIHRoZSBhcnJheSBieSBpdHNlbGYsIGJ1dCB0aGlzIGNvb2xlci4gCgkKCQkJJHJlc3VsdCA9IGFycmF5KCk7IAoJCQkkYXR0cmlidXRlc19kYXRhID0gYXJyYXkoKTsgCgkJCSAKCQkJaWYoaXNzZXQoJHZhbHVlKSkgeyAKCQkJCWlmKCRwcmlvcml0eSA9PSAndGFnJykgJHJlc3VsdCA9ICR2YWx1ZTsgCgkJCQllbHNlICRyZXN1bHRbJ3ZhbHVlJ10gPSAkdmFsdWU7IC8vUHV0IHRoZSB2YWx1ZSBpbiBhIGFzc29jIGFycmF5IGlmIHdlIGFyZSBpbiB0aGUgJ0F0dHJpYnV0ZScgbW9kZQoJCQl9IAoJCgkJCS8vIFNldCB0aGUgYXR0cmlidXRlcyB0b28uIAoJCQlpZihpc3NldCgkYXR0cmlidXRlcykgYW5kICRnZXRfYXR0cmlidXRlcykgeyAKCQkJCWZvcmVhY2goJGF0dHJpYnV0ZXMgYXMgJGF0dHIgPT4gJHZhbCkgeyAKCQkJCQlpZigkcHJpb3JpdHkgPT0gJ3RhZycpICRhdHRyaWJ1dGVzX2RhdGFbJGF0dHJdID0gJHZhbDsgCgkJCQkJZWxzZSAkcmVzdWx0WydhdHRyJ11bJGF0dHJdID0gJHZhbDsgLy9TZXQgYWxsIHRoZSBhdHRyaWJ1dGVzIGluIGEgYXJyYXkgY2FsbGVkICdhdHRyJyAKCQkJCX0gCgkJCX0gCgkKCQkJLy8gU2VlIHRhZyBzdGF0dXMgYW5kIGRvIHRoZSBuZWVkZWQuIAoJCQlpZigkdHlwZSA9PSAib3BlbiIpIHsgLy9UaGUgc3RhcnRpbmcgb2YgdGhlIHRhZyAnPHRhZz4nIAoJCQkJJHBhcmVudFskbGV2ZWwtMV0gPSAmJGN1cnJlbnQ7IAoJCQkJaWYoIWlzX2FycmF5KCRjdXJyZW50KSBvciAoIWluX2FycmF5KCR0YWcsIGFycmF5X2tleXMoJGN1cnJlbnQpKSkpIHsgLy9JbnNlcnQgTmV3IHRhZwoJCQkJCSRjdXJyZW50WyR0YWddID0gJHJlc3VsdDsgCgkJCQkJaWYoJGF0dHJpYnV0ZXNfZGF0YSkgJGN1cnJlbnRbJHRhZy4gJ19hdHRyJ10gPSAkYXR0cmlidXRlc19kYXRhOyAKCQkJCQkkcmVwZWF0ZWRfdGFnX2luZGV4WyR0YWcuJ18nLiRsZXZlbF0gPSAxOyAKCQoJCQkJCSRjdXJyZW50ID0gJiRjdXJyZW50WyR0YWddOyAKCQoJCQkJfSBlbHNlIHsgLy9UaGVyZSB3YXMgYW5vdGhlciBlbGVtZW50IHdpdGggdGhlIHNhbWUgdGFnIG5hbWUgCgkKCQkJCQlpZihpc3NldCgkY3VycmVudFskdGFnXVswXSkpIHsgLy9JZiB0aGVyZSBpcyBhIDB0aCBlbGVtZW50IGl0IGlzIGFscmVhZHkgYW4gYXJyYXkgCgkJCQkJCSRjdXJyZW50WyR0YWddWyRyZXBlYXRlZF90YWdfaW5kZXhbJHRhZy4nXycuJGxldmVsXV0gPSAkcmVzdWx0OyAKCQkJCQkJJHJlcGVhdGVkX3RhZ19pbmRleFskdGFnLidfJy4kbGV2ZWxdKys7IAoJCQkJCX0gZWxzZSB7IC8vVGhpcyBzZWN0aW9uIHdpbGwgbWFrZSB0aGUgdmFsdWUgYW4gYXJyYXkgaWYgbXVsdGlwbGUgdGFncyB3aXRoIHRoZSBzYW1lIG5hbWUgYXBwZWFyIHRvZ2V0aGVyCgkJCQkJCSRjdXJyZW50WyR0YWddID0gYXJyYXkoJGN1cnJlbnRbJHRhZ10sJHJlc3VsdCk7Ly9UaGlzIHdpbGwgY29tYmluZSB0aGUgZXhpc3RpbmcgaXRlbSBhbmQgdGhlIG5ldyBpdGVtIHRvZ2V0aGVyIHRvIG1ha2UgYW4gYXJyYXkKCQkJCQkJJHJlcGVhdGVkX3RhZ19pbmRleFskdGFnLidfJy4kbGV2ZWxdID0gMjsgCgkJCQkJCSAKCQkJCQkJaWYoaXNzZXQoJGN1cnJlbnRbJHRhZy4nX2F0dHInXSkpIHsgLy9UaGUgYXR0cmlidXRlIG9mIHRoZSBsYXN0KDB0aCkgdGFnIG11c3QgYmUgbW92ZWQgYXMgd2VsbAoJCQkJCQkJJGN1cnJlbnRbJHRhZ11bJzBfYXR0ciddID0gJGN1cnJlbnRbJHRhZy4nX2F0dHInXTsgCgkJCQkJCQl1bnNldCgkY3VycmVudFskdGFnLidfYXR0ciddKTsgCgkJCQkJCX0gCgkKCQkJCQl9IAoJCQkJCSRsYXN0X2l0ZW1faW5kZXggPSAkcmVwZWF0ZWRfdGFnX2luZGV4WyR0YWcuJ18nLiRsZXZlbF0tMTsgCgkJCQkJJGN1cnJlbnQgPSAmJGN1cnJlbnRbJHRhZ11bJGxhc3RfaXRlbV9pbmRleF07IAoJCQkJfSAKCQoJCQl9IGVsc2VpZigkdHlwZSA9PSAiY29tcGxldGUiKSB7IC8vVGFncyB0aGF0IGVuZHMgaW4gMSBsaW5lICc8dGFnIC8+JyAKCQkJCS8vIFNlZSBpZiB0aGUga2V5IGlzIGFscmVhZHkgdGFrZW4uIAoJCQkJaWYoIWlzc2V0KCRjdXJyZW50WyR0YWddKSkgeyAvL05ldyBLZXkgCgkJCQkJJGN1cnJlbnRbJHRhZ10gPSAkcmVzdWx0OyAKCQkJCQkkcmVwZWF0ZWRfdGFnX2luZGV4WyR0YWcuJ18nLiRsZXZlbF0gPSAxOyAKCQkJCQlpZigkcHJpb3JpdHkgPT0gJ3RhZycgYW5kICRhdHRyaWJ1dGVzX2RhdGEpICRjdXJyZW50WyR0YWcuICdfYXR0ciddID0gJGF0dHJpYnV0ZXNfZGF0YTsKCQoJCQkJfSBlbHNlIHsgLy9JZiB0YWtlbiwgcHV0IGFsbCB0aGluZ3MgaW5zaWRlIGEgbGlzdChhcnJheSkgCgkJCQkJaWYoaXNzZXQoJGN1cnJlbnRbJHRhZ11bMF0pIGFuZCBpc19hcnJheSgkY3VycmVudFskdGFnXSkpIHsvL0lmIGl0IGlzIGFscmVhZHkgYW4gYXJyYXkuLi4gCgkKCQkJCQkJLy8gLi4ucHVzaCB0aGUgbmV3IGVsZW1lbnQgaW50byB0aGF0IGFycmF5LiAKCQkJCQkJJGN1cnJlbnRbJHRhZ11bJHJlcGVhdGVkX3RhZ19pbmRleFskdGFnLidfJy4kbGV2ZWxdXSA9ICRyZXN1bHQ7IAoJCQkJCQkgCgkJCQkJCWlmKCRwcmlvcml0eSA9PSAndGFnJyBhbmQgJGdldF9hdHRyaWJ1dGVzIGFuZCAkYXR0cmlidXRlc19kYXRhKSB7IAoJCQkJCQkJJGN1cnJlbnRbJHRhZ11bJHJlcGVhdGVkX3RhZ19pbmRleFskdGFnLidfJy4kbGV2ZWxdIC4gJ19hdHRyJ10gPSAkYXR0cmlidXRlc19kYXRhOyAKCQkJCQkJfSAKCQkJCQkJJHJlcGVhdGVkX3RhZ19pbmRleFskdGFnLidfJy4kbGV2ZWxdKys7IAoJCgkJCQkJfSBlbHNlIHsgLy9JZiBpdCBpcyBub3QgYW4gYXJyYXkuLi4gCgkJCQkJCSRjdXJyZW50WyR0YWddID0gYXJyYXkoJGN1cnJlbnRbJHRhZ10sJHJlc3VsdCk7IC8vLi4uTWFrZSBpdCBhbiBhcnJheSB1c2luZyB1c2luZyB0aGUgZXhpc3RpbmcgdmFsdWUgYW5kIHRoZSBuZXcgdmFsdWUKCQkJCQkJJHJlcGVhdGVkX3RhZ19pbmRleFskdGFnLidfJy4kbGV2ZWxdID0gMTsgCgkJCQkJCWlmKCRwcmlvcml0eSA9PSAndGFnJyBhbmQgJGdldF9hdHRyaWJ1dGVzKSB7IAoJCQkJCQkJaWYoaXNzZXQoJGN1cnJlbnRbJHRhZy4nX2F0dHInXSkpIHsgLy9UaGUgYXR0cmlidXRlIG9mIHRoZSBsYXN0KDB0aCkgdGFnIG11c3QgYmUgbW92ZWQgYXMgd2VsbAoJCQkJCQkJCSAKCQkJCQkJCQkkY3VycmVudFskdGFnXVsnMF9hdHRyJ10gPSAkY3VycmVudFskdGFnLidfYXR0ciddOyAKCQkJCQkJCQl1bnNldCgkY3VycmVudFskdGFnLidfYXR0ciddKTsgCgkJCQkJCQl9IAoJCQkJCQkJIAoJCQkJCQkJaWYoJGF0dHJpYnV0ZXNfZGF0YSkgeyAKCQkJCQkJCQkkY3VycmVudFskdGFnXVskcmVwZWF0ZWRfdGFnX2luZGV4WyR0YWcuJ18nLiRsZXZlbF0gLiAnX2F0dHInXSA9ICRhdHRyaWJ1dGVzX2RhdGE7IAoJCQkJCQkJfSAKCQkJCQkJfSAKCQkJCQkJJHJlcGVhdGVkX3RhZ19pbmRleFskdGFnLidfJy4kbGV2ZWxdKys7IC8vMCBhbmQgMSBpbmRleCBpcyBhbHJlYWR5IHRha2VuCgkJCQkJfSAKCQkJCX0gCgkKCQkJfSBlbHNlaWYoJHR5cGUgPT0gJ2Nsb3NlJykgeyAvL0VuZCBvZiB0YWcgJzwvdGFnPicgCgkJCQkkY3VycmVudCA9ICYkcGFyZW50WyRsZXZlbC0xXTsgCgkJCX0gCgkJfSAKCQkgCgkJcmV0dXJuKCR4bWxfYXJyYXkpOyAKCX0KfQoKPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/GoogleMapAPI-3.0/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/GoogleMapAPI-3.0/Changelog.txt</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VXBkYXRlZCBNYXkgMTksIDIwMTAgYnkgYi4uLkBteWNubC5jb20KTGFiZWxzOglGZWF0dXJlZCwgUGhhc2UtSW1wbGVtZW50YXRpb24KCiAgQ2hhbmdlTG9nMyAgCgpDaGFuZ2VzIGZyb20gMi41ClVwZGF0ZWQgdG8gdXNlIEdvb2dsZSBNYXBzIEFQSSB2MwpBZGRlZCBLTUwgT3ZlcmxheSBzdXBwb3J0IC0gYWRkIEtNTC9HZW9SU1MgZmlsZXMgdXRpbGl6aW5nIHRoZSBjbGllbnQgc2lkZSBKUyBjYWxscy4KU2ltcGx5IHBhc3MgaW4gYSBmaWxlbmFtZSB0byBhbnkgS01MIG9yIEdlb1JTUyBmaWxlIGFuZCB5b3UgYXJlIG9uIHlvdXIgd2F5IQpBZGRlZCBhYmlsaXR5IHRvIGNyZWF0ZSBtYXBzIGZvciBtb2JpbGUgZGV2aWNlcwpTZXQgJHRoaXMtPm1vYmlsZT10cnVlIHRvIGhhdmUgbWV0YSB0YWcgcmVuZGVyZWQgaW4gdGhlIGdldCBoZWFkZXIganMgY2FsbC4KRnV0dXJlIHVwZGF0ZXMgd2lsbCBpbmNsdWRlIGFiaWxpdHkgdG8gZ2V0IHVzZXIncyBsb2NhdGlvbiBmcm9tIEdQUy4KTm90ZTogVGhlIG5ldyB2MyBHb29nbGUgTWFwcyBKUyBBUEkgaXMgYWxyZWFkeSBjYXRlcmVkIHRvd2FyZHMgbW9iaWxlIGRldmljZXMuIEp1c3QgYnkgc2V0dGluZyB3aWR0aCBhbmQgaGVpZ2h0ID0gMTAwJSwgYW55IG9mIHRoZSBkZW1vcyBmcm9tIHRoZSBtYWluIHBhZ2UgY2FuIGJlIGRpc3BsYXllZCBvbiB0aGUgbW9zdCBwb3B1bGFyIG5ld2VyIGRldmljZXMgd2l0aCBKUyBzdXBwb3J0LgpVcGRhdGUgUG9seWxpbmUgaGFuZGxpbmcgd2l0aCBuZXcgQVBJIHYzIG1ldGhvZHMuCkEgbmV3IHBhcmFtdGVyICgkaWQpIHdhcyBhZGRlZCBpbiBib3RoIG9mIHRoZSBwb2x5bGluZSAiYWRkIiBtZXRob2RzLgpQbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSB5b3VyIGFwcHMgdGhhdCBhcmUgdXNpbmcgdGhlIGFkZCBtZXRob2RzIChtb3JlIHNwZWNpZmljYWxseSB0aGUgdmFyaWFibGUgb3JkZXIpLgpUaGlzIGNoYW5nZSB3YXMgbmVjZXNzYXJ5IHRvIG1ha2UgcG9seWxpbmUgaGFuZGxpbmcgYSBiaXQgbW9yZSBhZHZhbmNlZC4KQWRkZWQgYWRkUG9seWxpbmVCeUNvb3Jkc0FycmF5IGFuZCBhZGRQb2x5bGluZUJ5QWRkcmVzc0FycmF5IG1ldGhvZHMKQWRkZWQgRWxldmF0aW9uIENoYXJ0IGRpc3BsYXkgc3VwcG9ydC4KRGlzcGxheSBtdWx0aXBsZSBlbGV2YXRpb24gY2hhcnRzIGZvciBhIG1hcCAoYW5kIGV2ZW4gbXVsdGlwbGUgbWFwcy9jaGFydHMgcGVyIHBhZ2UpCkNob29zZSB3aGV0aGVyIG9yIG5vdCB0byBkaXNwbGF5IGEgY29ycmVzcG9uZGluZ2x5IGxvY2F0ZWQgbWFya2VyIG9uIHRoZSBsaW5lIChkaXJlY3Rpb25zIG9yIHBvbHlsaW5lKSB3aGVuIGhvdmVyaW5nIG92ZXIgYSBsb2NhdGlvbiBvbiB0aGUgZWxldmF0aW9uIGNoYXJ0LgpSZW1vdmVkIHJlZmVyZW5jZXMgYW5kIGV2ZXJ5dGhpbmcgZGVhbGluZyB3aXRoIEdvb2dsZSBNYXBzIEFQSSBrZXkgc2luY2Uga2V5cyBhcmUgbm8gbG9uZ2VyIG5lY2Vzc2FyeSBpbiBWMyBvZiB0aGUgQVBJIQpSZW1vdmVkIHRhYnMgc3VwcG9ydCBmb3Igbm93IChub3QgcGFydCBvZiBvZmZpY2lhbCBWMyBHb29nbGUgTWFwcyBKUyBBUEkgYW55bW9yZSA6KCApClBvdGVudGlhbCB0byByZWluY29ycG9yYXRlIHdpdGggalF1ZXJ5IFVJIHRhYnM/ClVwZGF0ZWQgbWFwIHR5cGUgbmFtZXMgdG8gYmUgY29tcGF0aWJsZSB3aXRoIFYzIGFwaS4KVXBkYXRlZCBpY29uL21hcmtlciBjcmVhdGlvbiB0byB1c2UgbmV3IG1ldGhvZHMvd29ya2Zsb3dzLgpBZGRlZCBhZGRNYXJrZXJPcGVuZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGN1c3RvbSBtYXJrZXIgb3BlbmVycwpUaGUgZnVuY3Rpb24gdGFrZXMgYSBtYXJrZXIgaWQgKHJldHVybmVkIGZyb20gYWRkIG1hcmtlcikgYW5kIGRvbSBvYmplY3QgaWQgYW5kIHRoZW4gYXR0YWNoZXMgYW4gb25jbGljayAob3Igb25tb3VzZW92ZXIgaWYgeW91J3ZlIHN3aXRjaGVkIHRoZSBkZWZhdWx0IGFjdGlvbikgdG8gdGhlIGdpdmVuIG9iamVjdCBhbmQgb3BlbnMgdGhlIG1hcmtlcidzIGluZm8gd2luZG93LgpVcGRhdGUgZ2VvY2FjaGluZyB0byB1c2UgbmV3IEdvb2dsZSBNYXBzIFYzIGdlb2NvZGVyLgpVcGRhdGVkIHRvIHVzZSBKU09OIGVuY29kaW5nIHZzLiBjc3YKTmV3IEFQSSBubyBsb25nZXIgcmVxdWlyZXMgQVBJIGtleSAtIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vYXBpcy9tYXBzL2RvY3VtZW50YXRpb24vZ2VvY29kaW5nLwpBZGRlZCBnZW9HZXRDb29yZHNGdWxsIG1ldGhvZCB0byByZXR1cm4gZW50aXJlIGdlb2NvZGUgcmVzcG9uc2UuCk5PVEUgVGhpcyBuZXcgbWV0aG9kIGRvZXMgbm90IHVzZSBjYWNoaW5nLiBUaGlzIGNhbiBjaGFuZ2UgaWYgbmVlZCBiZSwgYnV0IGZvciBub3cgaXQgYWx3YXlzIHF1ZXJpZXMgdGhlIEFQSS4KVXBkYXRlZCBhdXRvbWF0aWMgem9vbSBmaXR0aW5nIHRvIHVzZSBuZXcgbWFwLmZpdEJvdW5kcygpIEFQSSBtZXRob2QuClVwZGF0ZWQgb3JkZXIvcmVuZGVyaW5nIG9mIGphdmFzY3JpcHQgdG8gY29pbmNpZGUgd2l0aCB0aGUgbGF0ZXN0IG1ldGhvZHMgdXNpbmcgb3B0aW9ucyBpbnN0ZWFkIG9mIG11bHRpcGxlIGNhbGxzLgoKTW9kaWZpZWQgZGlyZWN0aW9ucyBzdXBwb3J0CihjaGFuZ2VkIHRvIGRpcmVjdGlvbnMgIm9iamVjdCIgdG8gYWxsb3cgaW5zdGFudGlhdGlvbiBvZiBhIG1hcCB3aXRoIGRpcmVjdGlvbnMgcGFyYW1ldGVycyBwYXNzZWQpLgokdGhpcy0+ZGlyZWN0aW9ucyBwYXJhbSBpcyBkZXByZWNhdGVkLiBZb3Ugc2hvdWxkIG5vdyBqdXN0IHVzZSAkdGhpcy0+YWRkRGlyZWN0aW9ucygpCkFkZGluZyAiZ2V0IGRpcmVjdGlvbnMgdG8vZnJvbSBoZXJlIiB0byBhbiBpbmZvd2luZG93IHNob3VsZCBiZSBmYWlybHkgc2ltcGxlIHVzaW5nIHRoZSBzdXBwbGllZCBtZXRob2RzLiBTZWUgZGVtbwpJIGNhbiBhZGQgdGhpcyBzdXBwb3J0IGJhY2sgaW4gaWYgbmVlZCBiZS9lbm91Z2ggcGVvcGxlIHJlcXVlc3QgaXQuCgpNb2RpZmllZCBjdXN0b20gaWNvbiBzdXBwb3J0CnJlcGxhY2VkICJhZGRNYXJrZXJJY29uIiB3aXRoIGFkZEljb24gYW5kIHVwZGF0ZU1hcmtlckljb25LZXkKSWNvbnMgd2lsbCBub3cgYmUgZXhwbGljaXRseSBkZWZpbmVkIHdoZW4gY3JlYXRpbmcgYSBtYXJrZXIgdXNpbmcgdGhlIGljb24gKGFuZCBzaGFkb3cpIGZpbGUgbG9jYXRpb25zCllvdSBjYW4gYWxzbyBzZXQgYSBkZWZhdWx0IGljb24gZmlsZSB0byB1c2UgYnkgc2V0dGluZyAkdGhpcy0+ZGVmYXVsdF9pY29uIChhbmQgZGVmYXVsdF9pY29uX3NoYWRvdykKVE9ETzpBZGQgbW9yZSBzdXBwb3J0IGZvciBjcmVhdGluZyBjdXN0b20gbWFya2VycyAod2lsbCB3YWl0IGFuZCBzZWUgd2hhdCBwZW9wbGUgdGhpbmspCkluIG9yZGVyIHRvIHBhc3MgYWxsIHZhbHVlcyBmb3IgYW4gaWNvbiBpbnN0ZWFkIG9mIGp1c3QgdGhlIGZpbGVuYW1lLHlvdSB3b3VsZCBoYXZlIHRvbyBjYWxsIGFkZEljb24gbWFudWFsbHkgYW5kIHBhc3MgdGhlIHggcGFyYW1ldGVycy4gVGhlbiB3aGVuIHlvdSBjcmVhdGUgdGhlIG1hcmtlcnMsIHlvdSBjYW4gc2ltcGx5IHBhc3MgdGhlIGZpbGVuYW1lIGFuZCB0aGUgaWNvbiB3aWxsIGFscmVhZHkgaGF2ZSBiZWVuIGluaXRpYWxpemVkIHdpdGggdGhlIGN1c3RvbSB2cy4gY2FsY3VsYXRlZCB2YWx1ZXMuCgpBZGRlZCB3YWxraW5nIGFuZCBiaWtpbmcgZGlyZWN0aW9ucyBzdXBwb3J0CgpBZGRlZCBUcmFmZmljIE92ZXJsYXkgYW5kIEJpa2UgTWFwIE92ZXJsYXkgc3VwcG9ydC4KCkFkZGVkIEN1c3RvbSBPdmVybGF5IHN1cHBvcnQgd2l0aCBvcGFjaXR5IG9wdGlvbgoKQWRkZWQgSlNNaW4gbWluaWZpY2F0aW9uIHN1cHBvcnQuIE5vdGUtIHRoaXMgbWVhbnMgdGhhdCBpbiBvcmRlciB0byBsZWF2ZSAkX21pbmlmeV9qcyBzZXQgdG8gdHJ1ZSAoZGVmYXVsdCksIHlvdSBtdXN0IGluY2x1ZGUgSlNNaW4ucGhwIGFzIHdlbGwuIEkgaGF2ZSBpbmNsdWRlZCBhIGNvcHkgb2YgdGhpcyBsaWJyYXJ5IGluIHRoZSByZXBvc2l0b3J5LgoKQWRkZWQgbXVsdGlwbGUgbWFwcyBzdXBwb3J0IQoKQWRkZWQgJF9kaXNwbGF5X2pzX2Z1bmN0aW9ucyBjbGFzcyB2YXJpYWJsZSBzbyB0aGF0IHlvdSBjYW4gY29udHJvbCB3aGVuIHRoZSAiaGVscGVyIiBKUyBmdW5jdGlvbiBkZWZpbml0aW9ucyBhcmUgZGlzcGxheWVkIGFuZCB3aGVuIHRoZXkgc2hvdWxkbid0IGJlLiBJZiB5b3UgaGF2ZSBOIG1hcHMsIHRoZSBldmVyeSBtYXAgb2JqZWN0IGV4Y2VwdCB0aGUgTnRoIG1hcCBzaG91bGQgc2V0IHRoaXMgdmFyaWFibGUgdG8gZmFsc2UuClVwZGF0ZWQgSlMgZnVuY3Rpb24gcmVuZGVyaW5nIHRvIGluY2x1ZGUgdGhlIG1hcCBpZCBpbiB2YXJpYWJsZSBuYW1lIGRlZmluaXRpb25zIHRvIGF2b2lkIG5hbWVzcGFjaW5nIGNvbmZsaWN0cyB3aXRoIG11bHRpcGxlIG1hcHMuCk5PVEUgQmUgc3VyZSBlYWNoIG1hcCBpbnN0YW5jZSBoYXMgYSB1bmlxdWUgbWFwX2lkLCB3aGljaCBpcyBhc3NpZ25lZCBkdXJpbmcgb2JqZWN0IGluc3RhbnRpYXRpb24uCkJlIEF3YXJlCkZvciBzaW5nbGUgbWFwcywgeW91IHdpbGwgd2FudCB0byBiZSBzdXJlIHRvIGFsd2F5cyB1c2UgdGhlIGdldE9uTG9hZCgpIGZ1bmN0aW9uIGlmIHlvdSBhcmVuJ3QgYWxyZWFkeSAoaS5lLiA8Pz0kb2JqLT5nZXRPbkxvYWQoKTs/PiB2cyA8Ym9keSBvbkxvYWQ9Im9ubG9hZCgpOyI+IC0gSSBrbm93IEknbSBndWlsdHkgb2YgZG9pbmcgdGhpcywgYnV0IGluIG9yZGVyIHRvIHN1cHBvcnQgbXVsdGlwbGUgbWFwcywgdGhpcyBoYWQgdG8gYmUgZG9uZS4KRm9yIG11bHRpcGxlIG1hcHMsIHlvdSdsbCB3YW50IHRvIGRlZmluZSB5b3VyIG93biBvbmxvYWQgZnVuY3Rpb24gdXNpbmcgdGhlIG5ldyBnZXRPbkxvYWRGdW5jdGlvbiBjYWxsLCB3aGljaCByZXR1cm5zIHRoZSBKUyBmdW5jdGlvbiBuYW1lcyBvZiB0aGUgb25sb2FkIGZ1bmN0aW9ucyBmb3IgZWFjaCBtYXAuCgpBZGRlZCBNYXJrZXJDbHVzdGVyZXIgc3VwcG9ydC4KSSBoYXZlIGFsc28gYWRkZWQgdGhlIEpTIGNvZGUgZm9yIE1hcmtlckNsdXN0ZXJlciB0byB0aGUgU1ZOIHJlcG8gYXMgYW4gc3ZuOmV4dGVybmFscyBwcm9wZXJ0eSBsaW5raW5nIHRvIHRoZWlyIFNWTiByZXBvLiBUaGlzIGluIHRoZSAiZXh0ZXJuYWwiIGZvbGRlciAoaXQgZG9lc24ndCBzaG93IHVwIGluIHRoZSBzb3VyY2UgdGFiLCBidXQgaWYgeW91IGNoZWNrb3V0IGh0dHA6Ly9waHAtZ29vZ2xlLW1hcC1hcGkuZ29vZ2xlY29kZS5jb20vc3ZuL3RydW5rL2V4dGVybmFsLyAsIHlvdSB3aWxsIGdldCB0aGUgZmlsZXMpClNlZSB0aGUgZXhhbXBsZSBmb3IgaW1wbGVtZW50YXRpb24gZGV0YWlscy4KCkFkZCBhYmlsaXR5IHRvIGNob29zZSBiZXR3ZWVuIGJ1dHRvbnMgb3IgZHJvcGRvd24gZm9yIG1hcCB0eXBlIG5hdmlnYXRpb24uCgpBZGRlZCBzdHJlZXQgdmlldyBjb250cm9scyBzdXBwb3J0ISBDaGVjayBvdXQgdGhlIGRlbW8gdG8gc2VlIGhvdyBlYXN5IGl0IGlzIQ==]]></data>
	</file>
	<file>
	  <filename>/lib/GoogleMapAPI-3.0/COPYING.lib</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[CQkgIEdOVSBMRVNTRVIgR0VORVJBTCBQVUJMSUMgTElDRU5TRQoJCSAgICAgICBWZXJzaW9uIDIuMSwgRmVicnVhcnkgMTk5OQoKIENvcHlyaWdodCAoQykgMTk5MSwgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICAgICA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgoKW1RoaXMgaXMgdGhlIGZpcnN0IHJlbGVhc2VkIHZlcnNpb24gb2YgdGhlIExlc3NlciBHUEwuICBJdCBhbHNvIGNvdW50cwogYXMgdGhlIHN1Y2Nlc3NvciBvZiB0aGUgR05VIExpYnJhcnkgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgaGVuY2UKIHRoZSB2ZXJzaW9uIG51bWJlciAyLjEuXQoKCQkJICAgIFByZWFtYmxlCgogIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKTGljZW5zZXMgYXJlIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZQpmcmVlIHNvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuCgogIFRoaXMgbGljZW5zZSwgdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIHNvbWUKc3BlY2lhbGx5IGRlc2lnbmF0ZWQgc29mdHdhcmUgcGFja2FnZXMtLXR5cGljYWxseSBsaWJyYXJpZXMtLW9mIHRoZQpGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIG90aGVyIGF1dGhvcnMgd2hvIGRlY2lkZSB0byB1c2UgaXQuICBZb3UKY2FuIHVzZSBpdCB0b28sIGJ1dCB3ZSBzdWdnZXN0IHlvdSBmaXJzdCB0aGluayBjYXJlZnVsbHkgYWJvdXQgd2hldGhlcgp0aGlzIGxpY2Vuc2Ugb3IgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgdGhlIGJldHRlcgpzdHJhdGVneSB0byB1c2UgaW4gYW55IHBhcnRpY3VsYXIgY2FzZSwgYmFzZWQgb24gdGhlIGV4cGxhbmF0aW9ucyBiZWxvdy4KCiAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20gb2YgdXNlLApub3QgcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0CnlvdSBoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UKZm9yIHRoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCk7IHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldAppdCBpZiB5b3Ugd2FudCBpdDsgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgYW5kIHVzZSBwaWVjZXMgb2YKaXQgaW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBhcmUgaW5mb3JtZWQgdGhhdCB5b3UgY2FuIGRvCnRoZXNlIHRoaW5ncy4KCiAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZApkaXN0cmlidXRvcnMgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZXNlCnJpZ2h0cy4gIFRoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvcgp5b3UgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBsaWJyYXJ5IG9yIGlmIHlvdSBtb2RpZnkgaXQuCgogIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnksIHdoZXRoZXIgZ3JhdGlzCm9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHdlIGdhdmUKeW91LiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlIHNvdXJjZQpjb2RlLiAgSWYgeW91IGxpbmsgb3RoZXIgY29kZSB3aXRoIHRoZSBsaWJyYXJ5LCB5b3UgbXVzdCBwcm92aWRlCmNvbXBsZXRlIG9iamVjdCBmaWxlcyB0byB0aGUgcmVjaXBpZW50cywgc28gdGhhdCB0aGV5IGNhbiByZWxpbmsgdGhlbQp3aXRoIHRoZSBsaWJyYXJ5IGFmdGVyIG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBsaWJyYXJ5IGFuZCByZWNvbXBpbGluZwppdC4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyIHJpZ2h0cy4KCiAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIGEgdHdvLXN0ZXAgbWV0aG9kOiAoMSkgd2UgY29weXJpZ2h0IHRoZQpsaWJyYXJ5LCBhbmQgKDIpIHdlIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2UsIHdoaWNoIGdpdmVzIHlvdSBsZWdhbApwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgbGlicmFyeS4KCiAgVG8gcHJvdGVjdCBlYWNoIGRpc3RyaWJ1dG9yLCB3ZSB3YW50IHRvIG1ha2UgaXQgdmVyeSBjbGVhciB0aGF0CnRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgZnJlZSBsaWJyYXJ5LiAgQWxzbywgaWYgdGhlIGxpYnJhcnkgaXMKbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHRoZSByZWNpcGllbnRzIHNob3VsZCBrbm93CnRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCB2ZXJzaW9uLCBzbyB0aGF0IHRoZSBvcmlnaW5hbAphdXRob3IncyByZXB1dGF0aW9uIHdpbGwgbm90IGJlIGFmZmVjdGVkIGJ5IHByb2JsZW1zIHRoYXQgbWlnaHQgYmUKaW50cm9kdWNlZCBieSBvdGhlcnMuCgwKICBGaW5hbGx5LCBzb2Z0d2FyZSBwYXRlbnRzIHBvc2UgYSBjb25zdGFudCB0aHJlYXQgdG8gdGhlIGV4aXN0ZW5jZSBvZgphbnkgZnJlZSBwcm9ncmFtLiAgV2Ugd2lzaCB0byBtYWtlIHN1cmUgdGhhdCBhIGNvbXBhbnkgY2Fubm90CmVmZmVjdGl2ZWx5IHJlc3RyaWN0IHRoZSB1c2VycyBvZiBhIGZyZWUgcHJvZ3JhbSBieSBvYnRhaW5pbmcgYQpyZXN0cmljdGl2ZSBsaWNlbnNlIGZyb20gYSBwYXRlbnQgaG9sZGVyLiAgVGhlcmVmb3JlLCB3ZSBpbnNpc3QgdGhhdAphbnkgcGF0ZW50IGxpY2Vuc2Ugb2J0YWluZWQgZm9yIGEgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBtdXN0IGJlCmNvbnNpc3RlbnQgd2l0aCB0aGUgZnVsbCBmcmVlZG9tIG9mIHVzZSBzcGVjaWZpZWQgaW4gdGhpcyBsaWNlbnNlLgoKICBNb3N0IEdOVSBzb2Z0d2FyZSwgaW5jbHVkaW5nIHNvbWUgbGlicmFyaWVzLCBpcyBjb3ZlcmVkIGJ5IHRoZQpvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgbGljZW5zZSwgdGhlIEdOVSBMZXNzZXIKR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXBwbGllcyB0byBjZXJ0YWluIGRlc2lnbmF0ZWQgbGlicmFyaWVzLCBhbmQKaXMgcXVpdGUgZGlmZmVyZW50IGZyb20gdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBXZSB1c2UKdGhpcyBsaWNlbnNlIGZvciBjZXJ0YWluIGxpYnJhcmllcyBpbiBvcmRlciB0byBwZXJtaXQgbGlua2luZyB0aG9zZQpsaWJyYXJpZXMgaW50byBub24tZnJlZSBwcm9ncmFtcy4KCiAgV2hlbiBhIHByb2dyYW0gaXMgbGlua2VkIHdpdGggYSBsaWJyYXJ5LCB3aGV0aGVyIHN0YXRpY2FsbHkgb3IgdXNpbmcKYSBzaGFyZWQgbGlicmFyeSwgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSB0d28gaXMgbGVnYWxseSBzcGVha2luZyBhCmNvbWJpbmVkIHdvcmssIGEgZGVyaXZhdGl2ZSBvZiB0aGUgb3JpZ2luYWwgbGlicmFyeS4gIFRoZSBvcmRpbmFyeQpHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHRoZXJlZm9yZSBwZXJtaXRzIHN1Y2ggbGlua2luZyBvbmx5IGlmIHRoZQplbnRpcmUgY29tYmluYXRpb24gZml0cyBpdHMgY3JpdGVyaWEgb2YgZnJlZWRvbS4gIFRoZSBMZXNzZXIgR2VuZXJhbApQdWJsaWMgTGljZW5zZSBwZXJtaXRzIG1vcmUgbGF4IGNyaXRlcmlhIGZvciBsaW5raW5nIG90aGVyIGNvZGUgd2l0aAp0aGUgbGlicmFyeS4KCiAgV2UgY2FsbCB0aGlzIGxpY2Vuc2UgdGhlICJMZXNzZXIiIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYmVjYXVzZSBpdApkb2VzIExlc3MgdG8gcHJvdGVjdCB0aGUgdXNlcidzIGZyZWVkb20gdGhhbiB0aGUgb3JkaW5hcnkgR2VuZXJhbApQdWJsaWMgTGljZW5zZS4gIEl0IGFsc28gcHJvdmlkZXMgb3RoZXIgZnJlZSBzb2Z0d2FyZSBkZXZlbG9wZXJzIExlc3MKb2YgYW4gYWR2YW50YWdlIG92ZXIgY29tcGV0aW5nIG5vbi1mcmVlIHByb2dyYW1zLiAgVGhlc2UgZGlzYWR2YW50YWdlcwphcmUgdGhlIHJlYXNvbiB3ZSB1c2UgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1hbnkKbGlicmFyaWVzLiAgSG93ZXZlciwgdGhlIExlc3NlciBsaWNlbnNlIHByb3ZpZGVzIGFkdmFudGFnZXMgaW4gY2VydGFpbgpzcGVjaWFsIGNpcmN1bXN0YW5jZXMuCgogIEZvciBleGFtcGxlLCBvbiByYXJlIG9jY2FzaW9ucywgdGhlcmUgbWF5IGJlIGEgc3BlY2lhbCBuZWVkIHRvCmVuY291cmFnZSB0aGUgd2lkZXN0IHBvc3NpYmxlIHVzZSBvZiBhIGNlcnRhaW4gbGlicmFyeSwgc28gdGhhdCBpdCBiZWNvbWVzCmEgZGUtZmFjdG8gc3RhbmRhcmQuICBUbyBhY2hpZXZlIHRoaXMsIG5vbi1mcmVlIHByb2dyYW1zIG11c3QgYmUKYWxsb3dlZCB0byB1c2UgdGhlIGxpYnJhcnkuICBBIG1vcmUgZnJlcXVlbnQgY2FzZSBpcyB0aGF0IGEgZnJlZQpsaWJyYXJ5IGRvZXMgdGhlIHNhbWUgam9iIGFzIHdpZGVseSB1c2VkIG5vbi1mcmVlIGxpYnJhcmllcy4gIEluIHRoaXMKY2FzZSwgdGhlcmUgaXMgbGl0dGxlIHRvIGdhaW4gYnkgbGltaXRpbmcgdGhlIGZyZWUgbGlicmFyeSB0byBmcmVlCnNvZnR3YXJlIG9ubHksIHNvIHdlIHVzZSB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCgogIEluIG90aGVyIGNhc2VzLCBwZXJtaXNzaW9uIHRvIHVzZSBhIHBhcnRpY3VsYXIgbGlicmFyeSBpbiBub24tZnJlZQpwcm9ncmFtcyBlbmFibGVzIGEgZ3JlYXRlciBudW1iZXIgb2YgcGVvcGxlIHRvIHVzZSBhIGxhcmdlIGJvZHkgb2YKZnJlZSBzb2Z0d2FyZS4gIEZvciBleGFtcGxlLCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgR05VIEMgTGlicmFyeSBpbgpub24tZnJlZSBwcm9ncmFtcyBlbmFibGVzIG1hbnkgbW9yZSBwZW9wbGUgdG8gdXNlIHRoZSB3aG9sZSBHTlUKb3BlcmF0aW5nIHN5c3RlbSwgYXMgd2VsbCBhcyBpdHMgdmFyaWFudCwgdGhlIEdOVS9MaW51eCBvcGVyYXRpbmcKc3lzdGVtLgoKICBBbHRob3VnaCB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgTGVzcyBwcm90ZWN0aXZlIG9mIHRoZQp1c2VycycgZnJlZWRvbSwgaXQgZG9lcyBlbnN1cmUgdGhhdCB0aGUgdXNlciBvZiBhIHByb2dyYW0gdGhhdCBpcwpsaW5rZWQgd2l0aCB0aGUgTGlicmFyeSBoYXMgdGhlIGZyZWVkb20gYW5kIHRoZSB3aGVyZXdpdGhhbCB0byBydW4KdGhhdCBwcm9ncmFtIHVzaW5nIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgTGlicmFyeS4KCiAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKbW9kaWZpY2F0aW9uIGZvbGxvdy4gIFBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhCiJ3b3JrIGJhc2VkIG9uIHRoZSBsaWJyYXJ5IiBhbmQgYSAid29yayB0aGF0IHVzZXMgdGhlIGxpYnJhcnkiLiAgVGhlCmZvcm1lciBjb250YWlucyBjb2RlIGRlcml2ZWQgZnJvbSB0aGUgbGlicmFyeSwgd2hlcmVhcyB0aGUgbGF0dGVyIG11c3QKYmUgY29tYmluZWQgd2l0aCB0aGUgbGlicmFyeSBpbiBvcmRlciB0byBydW4uCgwKCQkgIEdOVSBMRVNTRVIgR0VORVJBTCBQVUJMSUMgTElDRU5TRQogICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KCiAgMC4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBhcHBsaWVzIHRvIGFueSBzb2Z0d2FyZSBsaWJyYXJ5IG9yIG90aGVyCnByb2dyYW0gd2hpY2ggY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9yCm90aGVyIGF1dGhvcml6ZWQgcGFydHkgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YKdGhpcyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoYWxzbyBjYWxsZWQgInRoaXMgTGljZW5zZSIpLgpFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KCiAgQSAibGlicmFyeSIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIHNvZnR3YXJlIGZ1bmN0aW9ucyBhbmQvb3IgZGF0YQpwcmVwYXJlZCBzbyBhcyB0byBiZSBjb252ZW5pZW50bHkgbGlua2VkIHdpdGggYXBwbGljYXRpb24gcHJvZ3JhbXMKKHdoaWNoIHVzZSBzb21lIG9mIHRob3NlIGZ1bmN0aW9ucyBhbmQgZGF0YSkgdG8gZm9ybSBleGVjdXRhYmxlcy4KCiAgVGhlICJMaWJyYXJ5IiwgYmVsb3csIHJlZmVycyB0byBhbnkgc3VjaCBzb2Z0d2FyZSBsaWJyYXJ5IG9yIHdvcmsKd2hpY2ggaGFzIGJlZW4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlc2UgdGVybXMuICBBICJ3b3JrIGJhc2VkIG9uIHRoZQpMaWJyYXJ5IiBtZWFucyBlaXRoZXIgdGhlIExpYnJhcnkgb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlcgpjb3B5cmlnaHQgbGF3OiB0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIExpYnJhcnkgb3IgYQpwb3J0aW9uIG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkCnN0cmFpZ2h0Zm9yd2FyZGx5IGludG8gYW5vdGhlciBsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMKaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluIHRoZSB0ZXJtICJtb2RpZmljYXRpb24iLikKCiAgIlNvdXJjZSBjb2RlIiBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYSBsaWJyYXJ5LCBjb21wbGV0ZSBzb3VyY2UgY29kZSBtZWFucwphbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZAppbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24KYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgbGlicmFyeS4KCiAgQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgpydW5uaW5nIGEgcHJvZ3JhbSB1c2luZyB0aGUgTGlicmFyeSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIG91dHB1dCBmcm9tCnN1Y2ggYSBwcm9ncmFtIGlzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQKb24gdGhlIExpYnJhcnkgKGluZGVwZW5kZW50IG9mIHRoZSB1c2Ugb2YgdGhlIExpYnJhcnkgaW4gYSB0b29sIGZvcgp3cml0aW5nIGl0KS4gIFdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgTGlicmFyeSBkb2VzCmFuZCB3aGF0IHRoZSBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgTGlicmFyeSBkb2VzLgogIAogIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIExpYnJhcnkncwpjb21wbGV0ZSBzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdAp5b3UgY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbgphcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdAphbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueQp3YXJyYW50eTsgYW5kIGRpc3RyaWJ1dGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZQpMaWJyYXJ5LgoKICBZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LAphbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhCmZlZS4KDAogIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIExpYnJhcnkgb3IgYW55IHBvcnRpb24Kb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBjb3B5IGFuZApkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKCiAgICBhKSBUaGUgbW9kaWZpZWQgd29yayBtdXN0IGl0c2VsZiBiZSBhIHNvZnR3YXJlIGxpYnJhcnkuCgogICAgYikgWW91IG11c3QgY2F1c2UgdGhlIGZpbGVzIG1vZGlmaWVkIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCiAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgoKICAgIGMpIFlvdSBtdXN0IGNhdXNlIHRoZSB3aG9sZSBvZiB0aGUgd29yayB0byBiZSBsaWNlbnNlZCBhdCBubwogICAgY2hhcmdlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCgogICAgZCkgSWYgYSBmYWNpbGl0eSBpbiB0aGUgbW9kaWZpZWQgTGlicmFyeSByZWZlcnMgdG8gYSBmdW5jdGlvbiBvciBhCiAgICB0YWJsZSBvZiBkYXRhIHRvIGJlIHN1cHBsaWVkIGJ5IGFuIGFwcGxpY2F0aW9uIHByb2dyYW0gdGhhdCB1c2VzCiAgICB0aGUgZmFjaWxpdHksIG90aGVyIHRoYW4gYXMgYW4gYXJndW1lbnQgcGFzc2VkIHdoZW4gdGhlIGZhY2lsaXR5CiAgICBpcyBpbnZva2VkLCB0aGVuIHlvdSBtdXN0IG1ha2UgYSBnb29kIGZhaXRoIGVmZm9ydCB0byBlbnN1cmUgdGhhdCwKICAgIGluIHRoZSBldmVudCBhbiBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgc3VjaCBmdW5jdGlvbiBvcgogICAgdGFibGUsIHRoZSBmYWNpbGl0eSBzdGlsbCBvcGVyYXRlcywgYW5kIHBlcmZvcm1zIHdoYXRldmVyIHBhcnQgb2YKICAgIGl0cyBwdXJwb3NlIHJlbWFpbnMgbWVhbmluZ2Z1bC4KCiAgICAoRm9yIGV4YW1wbGUsIGEgZnVuY3Rpb24gaW4gYSBsaWJyYXJ5IHRvIGNvbXB1dGUgc3F1YXJlIHJvb3RzIGhhcwogICAgYSBwdXJwb3NlIHRoYXQgaXMgZW50aXJlbHkgd2VsbC1kZWZpbmVkIGluZGVwZW5kZW50IG9mIHRoZQogICAgYXBwbGljYXRpb24uICBUaGVyZWZvcmUsIFN1YnNlY3Rpb24gMmQgcmVxdWlyZXMgdGhhdCBhbnkKICAgIGFwcGxpY2F0aW9uLXN1cHBsaWVkIGZ1bmN0aW9uIG9yIHRhYmxlIHVzZWQgYnkgdGhpcyBmdW5jdGlvbiBtdXN0CiAgICBiZSBvcHRpb25hbDogaWYgdGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBpdCwgdGhlIHNxdWFyZQogICAgcm9vdCBmdW5jdGlvbiBtdXN0IHN0aWxsIGNvbXB1dGUgc3F1YXJlIHJvb3RzLikKClRoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKaWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgTGlicmFyeSwKYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCnRoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CmRpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZApvbiB0aGUgTGlicmFyeSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKdGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlCml0LgoKVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0CnlvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bwpleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgTGlicmFyeS4KCkluIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIExpYnJhcnkKd2l0aCB0aGUgTGlicmFyeSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkpIG9uIGEgdm9sdW1lIG9mCmEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCnRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCgogIDMuIFlvdSBtYXkgb3B0IHRvIGFwcGx5IHRoZSB0ZXJtcyBvZiB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljCkxpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UgdG8gYSBnaXZlbiBjb3B5IG9mIHRoZSBMaWJyYXJ5LiAgVG8gZG8KdGhpcywgeW91IG11c3QgYWx0ZXIgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlLCBzbwp0aGF0IHRoZXkgcmVmZXIgdG8gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsCmluc3RlYWQgb2YgdG8gdGhpcyBMaWNlbnNlLiAgKElmIGEgbmV3ZXIgdmVyc2lvbiB0aGFuIHZlcnNpb24gMiBvZiB0aGUKb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaGFzIGFwcGVhcmVkLCB0aGVuIHlvdSBjYW4gc3BlY2lmeQp0aGF0IHZlcnNpb24gaW5zdGVhZCBpZiB5b3Ugd2lzaC4pICBEbyBub3QgbWFrZSBhbnkgb3RoZXIgY2hhbmdlIGluCnRoZXNlIG5vdGljZXMuCgwKICBPbmNlIHRoaXMgY2hhbmdlIGlzIG1hZGUgaW4gYSBnaXZlbiBjb3B5LCBpdCBpcyBpcnJldmVyc2libGUgZm9yCnRoYXQgY29weSwgc28gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gYWxsCnN1YnNlcXVlbnQgY29waWVzIGFuZCBkZXJpdmF0aXZlIHdvcmtzIG1hZGUgZnJvbSB0aGF0IGNvcHkuCgogIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCB3aGVuIHlvdSB3aXNoIHRvIGNvcHkgcGFydCBvZiB0aGUgY29kZSBvZgp0aGUgTGlicmFyeSBpbnRvIGEgcHJvZ3JhbSB0aGF0IGlzIG5vdCBhIGxpYnJhcnkuCgogIDQuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSAob3IgYSBwb3J0aW9uIG9yCmRlcml2YXRpdmUgb2YgaXQsIHVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtCnVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFjY29tcGFueQppdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUsIHdoaWNoCm11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYQptZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2UuCgogIElmIGRpc3RyaWJ1dGlvbiBvZiBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5CmZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlCnNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2Ugc2F0aXNmaWVzIHRoZSByZXF1aXJlbWVudCB0bwpkaXN0cmlidXRlIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90CmNvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCgogIDUuIEEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIG5vIGRlcml2YXRpdmUgb2YgYW55IHBvcnRpb24gb2YgdGhlCkxpYnJhcnksIGJ1dCBpcyBkZXNpZ25lZCB0byB3b3JrIHdpdGggdGhlIExpYnJhcnkgYnkgYmVpbmcgY29tcGlsZWQgb3IKbGlua2VkIHdpdGggaXQsIGlzIGNhbGxlZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIuICBTdWNoIGEKd29yaywgaW4gaXNvbGF0aW9uLCBpcyBub3QgYSBkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnksIGFuZAp0aGVyZWZvcmUgZmFsbHMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgoKICBIb3dldmVyLCBsaW5raW5nIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5CmNyZWF0ZXMgYW4gZXhlY3V0YWJsZSB0aGF0IGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSAoYmVjYXVzZSBpdApjb250YWlucyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSksIHJhdGhlciB0aGFuIGEgIndvcmsgdGhhdCB1c2VzIHRoZQpsaWJyYXJ5Ii4gIFRoZSBleGVjdXRhYmxlIGlzIHRoZXJlZm9yZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KU2VjdGlvbiA2IHN0YXRlcyB0ZXJtcyBmb3IgZGlzdHJpYnV0aW9uIG9mIHN1Y2ggZXhlY3V0YWJsZXMuCgogIFdoZW4gYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHVzZXMgbWF0ZXJpYWwgZnJvbSBhIGhlYWRlciBmaWxlCnRoYXQgaXMgcGFydCBvZiB0aGUgTGlicmFyeSwgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayBtYXkgYmUgYQpkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnkgZXZlbiB0aG91Z2ggdGhlIHNvdXJjZSBjb2RlIGlzIG5vdC4KV2hldGhlciB0aGlzIGlzIHRydWUgaXMgZXNwZWNpYWxseSBzaWduaWZpY2FudCBpZiB0aGUgd29yayBjYW4gYmUKbGlua2VkIHdpdGhvdXQgdGhlIExpYnJhcnksIG9yIGlmIHRoZSB3b3JrIGlzIGl0c2VsZiBhIGxpYnJhcnkuICBUaGUKdGhyZXNob2xkIGZvciB0aGlzIHRvIGJlIHRydWUgaXMgbm90IHByZWNpc2VseSBkZWZpbmVkIGJ5IGxhdy4KCiAgSWYgc3VjaCBhbiBvYmplY3QgZmlsZSB1c2VzIG9ubHkgbnVtZXJpY2FsIHBhcmFtZXRlcnMsIGRhdGEKc3RydWN0dXJlIGxheW91dHMgYW5kIGFjY2Vzc29ycywgYW5kIHNtYWxsIG1hY3JvcyBhbmQgc21hbGwgaW5saW5lCmZ1bmN0aW9ucyAodGVuIGxpbmVzIG9yIGxlc3MgaW4gbGVuZ3RoKSwgdGhlbiB0aGUgdXNlIG9mIHRoZSBvYmplY3QKZmlsZSBpcyB1bnJlc3RyaWN0ZWQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBpcyBsZWdhbGx5IGEgZGVyaXZhdGl2ZQp3b3JrLiAgKEV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhpcyBvYmplY3QgY29kZSBwbHVzIHBvcnRpb25zIG9mIHRoZQpMaWJyYXJ5IHdpbGwgc3RpbGwgZmFsbCB1bmRlciBTZWN0aW9uIDYuKQoKICBPdGhlcndpc2UsIGlmIHRoZSB3b3JrIGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSwgeW91IG1heQpkaXN0cmlidXRlIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gNi4KQW55IGV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhhdCB3b3JrIGFsc28gZmFsbCB1bmRlciBTZWN0aW9uIDYsCndoZXRoZXIgb3Igbm90IHRoZXkgYXJlIGxpbmtlZCBkaXJlY3RseSB3aXRoIHRoZSBMaWJyYXJ5IGl0c2VsZi4KDAogIDYuIEFzIGFuIGV4Y2VwdGlvbiB0byB0aGUgU2VjdGlvbnMgYWJvdmUsIHlvdSBtYXkgYWxzbyBjb21iaW5lIG9yCmxpbmsgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkgdG8gcHJvZHVjZSBhCndvcmsgY29udGFpbmluZyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSwgYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCnVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBwcm92aWRlZCB0aGF0IHRoZSB0ZXJtcyBwZXJtaXQKbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGZvciB0aGUgY3VzdG9tZXIncyBvd24gdXNlIGFuZCByZXZlcnNlCmVuZ2luZWVyaW5nIGZvciBkZWJ1Z2dpbmcgc3VjaCBtb2RpZmljYXRpb25zLgoKICBZb3UgbXVzdCBnaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCBlYWNoIGNvcHkgb2YgdGhlIHdvcmsgdGhhdCB0aGUKTGlicmFyeSBpcyB1c2VkIGluIGl0IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZSBjb3ZlcmVkIGJ5CnRoaXMgTGljZW5zZS4gIFlvdSBtdXN0IHN1cHBseSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAgSWYgdGhlIHdvcmsKZHVyaW5nIGV4ZWN1dGlvbiBkaXNwbGF5cyBjb3B5cmlnaHQgbm90aWNlcywgeW91IG11c3QgaW5jbHVkZSB0aGUKY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIExpYnJhcnkgYW1vbmcgdGhlbSwgYXMgd2VsbCBhcyBhIHJlZmVyZW5jZQpkaXJlY3RpbmcgdGhlIHVzZXIgdG8gdGhlIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAgQWxzbywgeW91IG11c3QgZG8gb25lCm9mIHRoZXNlIHRoaW5nczoKCiAgICBhKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZwogICAgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSBmb3IgdGhlIExpYnJhcnkgaW5jbHVkaW5nIHdoYXRldmVyCiAgICBjaGFuZ2VzIHdlcmUgdXNlZCBpbiB0aGUgd29yayAod2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlcgogICAgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSk7IGFuZCwgaWYgdGhlIHdvcmsgaXMgYW4gZXhlY3V0YWJsZSBsaW5rZWQKICAgIHdpdGggdGhlIExpYnJhcnksIHdpdGggdGhlIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgIndvcmsgdGhhdAogICAgdXNlcyB0aGUgTGlicmFyeSIsIGFzIG9iamVjdCBjb2RlIGFuZC9vciBzb3VyY2UgY29kZSwgc28gdGhhdCB0aGUKICAgIHVzZXIgY2FuIG1vZGlmeSB0aGUgTGlicmFyeSBhbmQgdGhlbiByZWxpbmsgdG8gcHJvZHVjZSBhIG1vZGlmaWVkCiAgICBleGVjdXRhYmxlIGNvbnRhaW5pbmcgdGhlIG1vZGlmaWVkIExpYnJhcnkuICAoSXQgaXMgdW5kZXJzdG9vZAogICAgdGhhdCB0aGUgdXNlciB3aG8gY2hhbmdlcyB0aGUgY29udGVudHMgb2YgZGVmaW5pdGlvbnMgZmlsZXMgaW4gdGhlCiAgICBMaWJyYXJ5IHdpbGwgbm90IG5lY2Vzc2FyaWx5IGJlIGFibGUgdG8gcmVjb21waWxlIHRoZSBhcHBsaWNhdGlvbgogICAgdG8gdXNlIHRoZSBtb2RpZmllZCBkZWZpbml0aW9ucy4pCgogICAgYikgVXNlIGEgc3VpdGFibGUgc2hhcmVkIGxpYnJhcnkgbWVjaGFuaXNtIGZvciBsaW5raW5nIHdpdGggdGhlCiAgICBMaWJyYXJ5LiAgQSBzdWl0YWJsZSBtZWNoYW5pc20gaXMgb25lIHRoYXQgKDEpIHVzZXMgYXQgcnVuIHRpbWUgYQogICAgY29weSBvZiB0aGUgbGlicmFyeSBhbHJlYWR5IHByZXNlbnQgb24gdGhlIHVzZXIncyBjb21wdXRlciBzeXN0ZW0sCiAgICByYXRoZXIgdGhhbiBjb3B5aW5nIGxpYnJhcnkgZnVuY3Rpb25zIGludG8gdGhlIGV4ZWN1dGFibGUsIGFuZCAoMikKICAgIHdpbGwgb3BlcmF0ZSBwcm9wZXJseSB3aXRoIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgaWYKICAgIHRoZSB1c2VyIGluc3RhbGxzIG9uZSwgYXMgbG9uZyBhcyB0aGUgbW9kaWZpZWQgdmVyc2lvbiBpcwogICAgaW50ZXJmYWNlLWNvbXBhdGlibGUgd2l0aCB0aGUgdmVyc2lvbiB0aGF0IHRoZSB3b3JrIHdhcyBtYWRlIHdpdGguCgogICAgYykgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQKICAgIGxlYXN0IHRocmVlIHllYXJzLCB0byBnaXZlIHRoZSBzYW1lIHVzZXIgdGhlIG1hdGVyaWFscwogICAgc3BlY2lmaWVkIGluIFN1YnNlY3Rpb24gNmEsIGFib3ZlLCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZQogICAgdGhhbiB0aGUgY29zdCBvZiBwZXJmb3JtaW5nIHRoaXMgZGlzdHJpYnV0aW9uLgoKICAgIGQpIElmIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5CiAgICBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgb2ZmZXIgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUgYWJvdmUKICAgIHNwZWNpZmllZCBtYXRlcmlhbHMgZnJvbSB0aGUgc2FtZSBwbGFjZS4KCiAgICBlKSBWZXJpZnkgdGhhdCB0aGUgdXNlciBoYXMgYWxyZWFkeSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlc2UKICAgIG1hdGVyaWFscyBvciB0aGF0IHlvdSBoYXZlIGFscmVhZHkgc2VudCB0aGlzIHVzZXIgYSBjb3B5LgoKICBGb3IgYW4gZXhlY3V0YWJsZSwgdGhlIHJlcXVpcmVkIGZvcm0gb2YgdGhlICJ3b3JrIHRoYXQgdXNlcyB0aGUKTGlicmFyeSIgbXVzdCBpbmNsdWRlIGFueSBkYXRhIGFuZCB1dGlsaXR5IHByb2dyYW1zIG5lZWRlZCBmb3IKcmVwcm9kdWNpbmcgdGhlIGV4ZWN1dGFibGUgZnJvbSBpdC4gIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sCnRoZSBtYXRlcmlhbHMgdG8gYmUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IGlzCm5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeSBmb3JtKSB3aXRoIHRoZSBtYWpvcgpjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9uCndoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudCBpdHNlbGYgYWNjb21wYW5pZXMKdGhlIGV4ZWN1dGFibGUuCgogIEl0IG1heSBoYXBwZW4gdGhhdCB0aGlzIHJlcXVpcmVtZW50IGNvbnRyYWRpY3RzIHRoZSBsaWNlbnNlCnJlc3RyaWN0aW9ucyBvZiBvdGhlciBwcm9wcmlldGFyeSBsaWJyYXJpZXMgdGhhdCBkbyBub3Qgbm9ybWFsbHkKYWNjb21wYW55IHRoZSBvcGVyYXRpbmcgc3lzdGVtLiAgU3VjaCBhIGNvbnRyYWRpY3Rpb24gbWVhbnMgeW91IGNhbm5vdAp1c2UgYm90aCB0aGVtIGFuZCB0aGUgTGlicmFyeSB0b2dldGhlciBpbiBhbiBleGVjdXRhYmxlIHRoYXQgeW91CmRpc3RyaWJ1dGUuCgwKICA3LiBZb3UgbWF5IHBsYWNlIGxpYnJhcnkgZmFjaWxpdGllcyB0aGF0IGFyZSBhIHdvcmsgYmFzZWQgb24gdGhlCkxpYnJhcnkgc2lkZS1ieS1zaWRlIGluIGEgc2luZ2xlIGxpYnJhcnkgdG9nZXRoZXIgd2l0aCBvdGhlciBsaWJyYXJ5CmZhY2lsaXRpZXMgbm90IGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSBzdWNoIGEgY29tYmluZWQKbGlicmFyeSwgcHJvdmlkZWQgdGhhdCB0aGUgc2VwYXJhdGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGJhc2VkIG9uCnRoZSBMaWJyYXJ5IGFuZCBvZiB0aGUgb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzIGlzIG90aGVyd2lzZQpwZXJtaXR0ZWQsIGFuZCBwcm92aWRlZCB0aGF0IHlvdSBkbyB0aGVzZSB0d28gdGhpbmdzOgoKICAgIGEpIEFjY29tcGFueSB0aGUgY29tYmluZWQgbGlicmFyeSB3aXRoIGEgY29weSBvZiB0aGUgc2FtZSB3b3JrCiAgICBiYXNlZCBvbiB0aGUgTGlicmFyeSwgdW5jb21iaW5lZCB3aXRoIGFueSBvdGhlciBsaWJyYXJ5CiAgICBmYWNpbGl0aWVzLiAgVGhpcyBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKICAgIFNlY3Rpb25zIGFib3ZlLgoKICAgIGIpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIHRoZSBjb21iaW5lZCBsaWJyYXJ5IG9mIHRoZSBmYWN0CiAgICB0aGF0IHBhcnQgb2YgaXQgaXMgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgZXhwbGFpbmluZwogICAgd2hlcmUgdG8gZmluZCB0aGUgYWNjb21wYW55aW5nIHVuY29tYmluZWQgZm9ybSBvZiB0aGUgc2FtZSB3b3JrLgoKICA4LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IgZGlzdHJpYnV0ZQp0aGUgTGlicmFyeSBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueQphdHRlbXB0IG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IKZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyCnJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuICBIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywKb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcwp0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaCBwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCgogIDkuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdApzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgpkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQptb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKTGlicmFyeSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwp0aGUgTGlicmFyeSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KCiAgMTAuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKTGlicmFyeSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSwgbGluayB3aXRoIG9yIG1vZGlmeSB0aGUgTGlicmFyeQpzdWJqZWN0IHRvIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCnJlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgd2l0aAp0aGlzIExpY2Vuc2UuCgwKICAxMS4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAppbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLApjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCm90aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcwpMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91Cm1heSBub3QgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeSBieQphbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bwpyZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5LgoKSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFueQpwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gYXBwbHksCmFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyIGNpcmN1bXN0YW5jZXMuCgpJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CnBhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CnN1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKaW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0gd2hpY2ggaXMKaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCmdlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKdGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwp0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKaW1wb3NlIHRoYXQgY2hvaWNlLgoKVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCmJlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgoKICAxMi4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBMaWJyYXJ5IGlzIHJlc3RyaWN0ZWQgaW4KY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCm9yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgTGlicmFyeSB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGFkZAphbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nIHRob3NlIGNvdW50cmllcywKc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcgY291bnRyaWVzIG5vdCB0aHVzCmV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmCndyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgoKICAxMy4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcKdmVyc2lvbnMgb2YgdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLgpTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sCmJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KCkVhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIExpYnJhcnkKc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kCiJhbnkgbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQKY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieQp0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIExpYnJhcnkgZG9lcyBub3Qgc3BlY2lmeSBhCmxpY2Vuc2UgdmVyc2lvbiBudW1iZXIsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5CnRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCgwKICAxNC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIExpYnJhcnkgaW50byBvdGhlciBmcmVlCnByb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGVzZSwKd3JpdGUgdG8gdGhlIGF1dGhvciB0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMKY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUKU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzIG1ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91cgpkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzIG9mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzCm9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQgb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nCmFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCgoJCQkgICAgTk8gV0FSUkFOVFkKCiAgMTUuIEJFQ0FVU0UgVEhFIExJQlJBUlkgSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PCldBUlJBTlRZIEZPUiBUSEUgTElCUkFSWSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuCkVYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SCk9USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgTElCUkFSWSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCktJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQpJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFCkxJQlJBUlkgSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFIExJQlJBUlkgUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FClRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KCiAgMTYuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4KV1JJVElORyBXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkKQU5EL09SIFJFRElTVFJJQlVURSBUSEUgTElCUkFSWSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UKRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUgpDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRQpMSUJSQVJZIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HClJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBCkZBSUxVUkUgT0YgVEhFIExJQlJBUlkgVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBTT0ZUV0FSRSksIEVWRU4gSUYKU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSApEQU1BR0VTLgoKCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUwo=]]></data>
	</file>
	<file>
	  <filename>/lib/GoogleMapAPI-3.0/GoogleMapAPI.class.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogUHJvamVjdDogICAgIEdvb2dsZU1hcEFQSSBWMzogYSBQSFAgbGlicmFyeSBpbnRlZmFjZSB0byB0aGUgR29vZ2xlIE1hcCBBUEkgdjMKICogRmlsZTogICAgICAgIEdvb2dsZU1hcFYzLnBocAogKiAKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqCiAqIE9SSUdJTkFMIElORk8KICogbGluayBodHRwOi8vd3d3LnBocGluc2lkZXIuY29tL3BocC9jb2RlL0dvb2dsZU1hcEFQSS8KICogY29weXJpZ2h0IDIwMDUgTmV3IERpZ2l0YWwgR3JvdXAsIEluYy4KICogYXV0aG9yIE1vbnRlIE9ocnQgPG1vbnRlIGF0IG9ocnQgZG90IGNvbT4KICogcGFja2FnZSBHb29nbGVNYXBBUEkKICogdmVyc2lvbiAyLjUKICogCiAqIFJFVklTSU9OIE5PVElGSUNBVElPTgogKiBOT1RFOiBUaGlzIGlzIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgb3JpZ2luYWwgbGlzdGVkIGFib3ZlLiAgVGhpcyB2ZXJzaW9uCiAqIG1haW50YWlucyBhbGwgb3JpZ2luYWwgR05VIHNvZnR3YXJlIGxpY2Vuc2VzLgogKi8KLyoqCiAqIEBsaW5rIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9waHBnb29nbGVtYXBhcGl2My8KICogQGNvcHlyaWdodCAyMDEwIEJyYWQgd2VkZWxsCiAqIEBhdXRob3IgQnJhZCBXZWRlbGwKICogQHBhY2thZ2UgR29vZ2xlTWFwQVBJICh2ZXJzaW9uIDMpCiAqIEB2ZXJzaW9uIDMuMGJldGEKKi8KLyoKICogVG8gdmlldyB0aGUgZnVsbCBDSEFOR0VMT0csIHZpc2l0IAogKiBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvcGhwLWdvb2dsZS1tYXAtYXBpL3dpa2kvQ2hhbmdlTG9nMwovKgpGb3IgZGF0YWJhc2UgY2FjaGluZywgeW91IHdpbGwgd2FudCB0byB1c2UgdGhpcyBzY2hlbWE6CgpDUkVBVEUgVEFCTEUgR0VPQ09ERVMgKAogIGFkZHJlc3MgdmFyY2hhcigyNTUpIE5PVCBOVUxMIGRlZmF1bHQgJycsCiAgbG9uIGZsb2F0IGRlZmF1bHQgTlVMTCwKICBsYXQgZmxvYXQgZGVmYXVsdCBOVUxMLAogIFBSSU1BUlkgS0VZICAoYWRkcmVzcykKKTsKCiovCgovKioKICogUEhQIEdvb2dsZSBNYXBzIEFQSSBjbGFzcwogKiBAcGFja2FnZSBHb29nbGVNYXBBUEkKICogQHZlcnNpb24gMy4wYmV0YQogKi8KY2xhc3MgR29vZ2xlTWFwQVBJIHsKCiAgICAvKioKICAgICAqIFBFQVI6OkRCIERTTiBmb3IgZ2VvY29kZSBjYWNoaW5nLiBleGFtcGxlOgogICAgICogJGRzbiA9ICdteXNxbDovL3VzZXI6cGFzc0Bsb2NhbGhvc3QvZGJuYW1lJzsKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICB2YXIgJGRzbiA9IG51bGw7CiAgICAKICAgIC8qKgogICAgICogY3VycmVudCBtYXAgaWQsIHNldCB3aGVuIHlvdSBpbnN0YW50aWF0ZQogICAgICogdGhlIEdvb2dsZU1hcEFQSSBvYmplY3QuCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgdmFyICRtYXBfaWQgPSBudWxsOwoJCgkvKioKCSAqIGRldGVybWluZXMgd2hldGhlciBvciBub3QgdG8gZGlzcGxheSB0aGUgbWFwIGFuZCBhc3NvY2lhdGVkIEpTIG9uIHRoZSBwYWdlCgkgKiB0aGlzIGlzIHVzZWQgaWYgeW91IGp1c3Qgd2FudCB0byBkaXNwbGF5IGEgc3RyZWV0dmlldyB3aXRoIG5vIG1hcAoJICovCgl2YXIgJGRpc3BsYXlfbWFwID0gdHJ1ZTsKCiAgICAvKioKICAgICAqIHNpZGViYXIgPGRpdj4gdXNlZCBhbG9uZyB3aXRoIHRoaXMgbWFwLgogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHZhciAkc2lkZWJhcl9pZCA9IG51bGw7ICAgIAogICAgCiAgICAvKioKICAgICAqIFdoZXRoZXIgdG8gdXNlIG5ldyBWMyBtb2JpbGUgZnVuY3Rpb25hbGl0eQogICAgICoKICAgICAqIEB2YXIgYm9vbAogICAgICovCiAgICB2YXIgJG1vYmlsZT1mYWxzZTsKICAgIAogICAgLyoqCiAgICAgKiBERVBSRUNBVEVEOiBHb29nbGUgbm93IGhhcyBnZW9jb2Rpbmcgc2VydmljZS4gIAogICAgICogTk9URTogTm90ZSBldmVuIHN1cmUgaWYgdGhpcyBzdGlsbCB3b3JrcwogICAgICogR29vZ2xlTWFwQVBJIHVzZWQgdG8gdXNlIHRoZSBZYWhvbyBnZW9jb2RlIGxvb2t1cCBBUEkuCiAgICAgKiBUaGlzIGlzIHRoZSBhcHBsaWNhdGlvbiBJRCBmb3IgWU9VUiBhcHBsaWNhdGlvbi4KICAgICAqIFRoaXMgaXMgc2V0IHVwb24gaW5zdGFudGlhdGluZyB0aGUgR29vZ2xlTWFwQVBJIG9iamVjdC4KICAgICAqIChodHRwOi8vZGV2ZWxvcGVyLnlhaG9vLm5ldC9mYXEvaW5kZXguaHRtbCNhcHBpZCkKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICB2YXIgJGFwcF9pZCA9IG51bGw7CgogICAgLyoqCiAgICAgKiB1c2Ugb25Mb2FkKCkgdG8gbG9hZCB0aGUgbWFwIGphdmFzY3JpcHQuCiAgICAgKiBpZiBlbmFibGVkLCBiZSBzdXJlIHRvIGluY2x1ZGUgb24geW91ciB3ZWJwYWdlOgogICAgICogPD89JG1hcG9iai0+cHJpbnRPbkxvYWQ/PiBvciBtYW51YWxseSBjcmVhdGUgYW4gb25sb2FkIGZ1bmN0aW9uIAogICAgICogdGhhdCBjYWxscyB0aGUgbWFwJ3Mgb25sb2FkIGZ1bmN0aW9uIHVzaW5nICR0aGlzLT5wcmludE9uTG9hZEZ1bmN0aW9uCiAgICAgKgogICAgICogQHZhciBib29sCiAgICAgKiBAZGVmYXVsdCB0cnVlCiAgICAgKi8KICAgIHZhciAkb25sb2FkID0gdHJ1ZTsKICAgIAogICAgLyoqCiAgICAgKiBtYXAgY2VudGVyIGxhdGl0dWRlIChob3Jpem9udGFsKQogICAgICogY2FsY3VsYXRlZCBhdXRvbWF0aWNhbGx5IGFzIG1hcmtlcnMKICAgICAqIGFyZSBhZGRlZCB0byB0aGUgbWFwLgogICAgICoKICAgICAqIEB2YXIgZmxvYXQKICAgICAqLwogICAgdmFyICRjZW50ZXJfbGF0ID0gbnVsbDsKCiAgICAvKioKICAgICAqIG1hcCBjZW50ZXIgbG9uZ2l0dWRlICh2ZXJ0aWNhbCkKICAgICAqIGNhbGN1bGF0ZWQgYXV0b21hdGljYWxseSBhcyBtYXJrZXJzCiAgICAgKiBhcmUgYWRkZWQgdG8gdGhlIG1hcC4KICAgICAqCiAgICAgKiBAdmFyIGZsb2F0CiAgICAgKi8KICAgIHZhciAkY2VudGVyX2xvbiA9IG51bGw7CiAgICAKICAgIC8qKgogICAgICogZW5hYmxlcyBtYXAgY29udHJvbHMgKHpvb20vbW92ZS9jZW50ZXIpCiAgICAgKgogICAgICogQHZhciBib29sCiAgICAgKi8KICAgIHZhciAkbWFwX2NvbnRyb2xzID0gdHJ1ZTsKCiAgICAvKiogLy8gRHVrZXRvd24gY2hhbmdlcwogICAgICogZW5hYmxlcyBwYW4gY29udHJvbCBpY29uIHRvIGJlIHNob3duIG9yIGhpZGRlbgogICAgICoKICAgICAqIEB2YXIgYm9vbAogICAgICovCiAgICB2YXIgJHBhbl9jb250cm9sID0gZmFsc2U7CiAgICAvKioKICAgICAqIEVuYWJsZXMgcGVnbWFuIHRvIGJlIHVzZWQgZm9yIHN0cmVldHZpZXcKICAgICAqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgdmFyICRzdHJlZXRWaWV3Q29udHJvbCA9IGZhbHNlOwogICAgLy8gRHVrZXRvd24gY2hhbmdlcyBlbmQKCiAgICAvKioKICAgICAqIGRldGVybWluZXMgdGhlIG1hcCBjb250cm9sIHR5cGUKICAgICAqIHNtYWxsIC0+IHNob3cgbW92ZS9jZW50ZXIgY29udHJvbHMKICAgICAqIGxhcmdlIC0+IHNob3cgbW92ZS9jZW50ZXIvem9vbSBjb250cm9scwogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHZhciAkY29udHJvbF9zaXplID0gJ2xhcmdlJzsKICAgIAogICAgLyoqCiAgICAgKiBlbmFibGVzIG1hcCB0eXBlIGNvbnRyb2xzIChtYXAvc2F0ZWxsaXRlL2h5YnJpZC90ZXJyYWluKQogICAgICoKICAgICAqIEB2YXIgYm9vbAogICAgICovCiAgICB2YXIgJHR5cGVfY29udHJvbHMgPSB0cnVlOwoJCgkvKioKCSAqIHNldHMgZGVmYXVsdCBvcHRpb24gZm9yIHR5cGUgY29udHJvbHMoREVGQVVMVCwgSE9SSVpPTlRBTF9CQVIsIERST1BET1dOX01FTlUpCgkgKgoJICogQHZhciBzdHJpbmcKCSAqLwoJIHZhciAkdHlwZV9jb250cm9sc19zdHlsZSA9ICJERUZBVUxUIjsKCiAgICAvKioKICAgICAqIGRlZmF1bHQgbWFwIHR5cGUgZ29vZ2xlLm1hcHMuTWFwVHlwZUlkLihST0FETUFQLCBTQVRFTExJVEUsIEhZQlJJRCwgVEVSUkFJTikKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICB2YXIgJG1hcF90eXBlID0gJ0hZQlJJRCc7CiAgICAKICAgIC8qKgogICAgICogZW5hYmxlcyBzY2FsZSBtYXAgY29udHJvbAogICAgICoKICAgICAqIEB2YXIgYm9vbAogICAgICovCiAgICB2YXIgJHNjYWxlX2NvbnRyb2wgPSB0cnVlOwogICAgCiAgICAvKioKICAgICAqIGVuYWJsZXMgb3ZlcnZpZXcgbWFwIGNvbnRyb2wKICAgICAqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgdmFyICRvdmVydmlld19jb250cm9sID0gZmFsc2U7CiAgICAKICAgIC8qKgogICAgICogZW5hYmxlcyBHb29nbGUgQWRzZW5zZSBBZHNtYW5hZ2VyIG9uIHBhZ2UsIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGluIGJldGEKICAgICAqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgdmFyICRhZHNfbWFuYWdlciA9IGZhbHNlOwogICAgCiAgICAvKioKICAgICAqIEdvb2dsZSBBZHNlbnNlIFB1Ymxpc2hlciBJRAogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHZhciAkYWRzX3B1Yl9pZCA9ICIiOyAgCiAgICAKICAgIC8qKgogICAgICogR29vZ2xlIEFkc2Vuc2UgQ2hhbm5lbCBJRAogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHZhciAkYWRzX2NoYW5uZWwgPSAiIjsKICAgIAogICAgLyoqCiAgICAgKiBUaGUgTWF4IG51bWJlciBvZiBBZHNtYW5hZ2VyIGFkcyB0byBzaG93IG9uIGEgbWFwCiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgdmFyICRhZHNfbWF4ID0gMTA7CiAgICAKICAgIC8qKgogICAgICogZW5hYmxlcy9kaXNhYmxlcyBsb2NhbCBzZWFyY2ggb24gcGFnZQogICAgICoKICAgICAqIEB2YXIgYm9vbAogICAgICovCiAgICB2YXIgJGxvY2FsX3NlYXJjaCA9IGZhbHNlOwogICAgCiAgICAvKioKICAgICAqIGVuYWJsZXMgbG9jYWwgc2VhcmNoIGFkcyBvbiBwYWdlIE5PVEU6IHdpbGwgb25seSBkaXNwbGF5IGFkcyBpZiBsb2NhbF9zZWFyY2ggPT0gdHJ1ZSwgb3RoZXJ3aXNlIGp1c3QgdXNlIGFkX21hbmFnZXIgYW5kIHNldHRpbmdzLgogICAgICoKICAgICAqIEB2YXIgYm9vbAogICAgICovCiAgICB2YXIgJGxvY2FsX3NlYXJjaF9hZHMgPSBmYWxzZTsKICAgIAogICAgLyoqCiAgICAgKiBlbmFibGVzL2Rpc2FibGVzIHdhbGtpbmcgZGlyZWN0aW9ucyBvcHRpb24KICAgICAqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgdmFyICR3YWxraW5nX2RpcmVjdGlvbnMgPSBmYWxzZTsKICAgIAogICAgLyoqCiAgICAgKiBlbmFibGVzL2Rpc2FibGVzIGJpa2luZyBkaXJlY3Rpb25zIG9uIGRpcmVjdGlvbnMKICAgICAqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgdmFyICRiaWtpbmdfZGlyZWN0aW9ucyA9IGZhbHNlOwogICAgCiAgICAvKioKICAgICAqIGVuYWJsZXMvZGlzYWJsZXMgYXZvaWQgaGlnaHdheXMgb24gZGlyZWN0aW9ucwogICAgICoKICAgICAqIEB2YXIgYm9vbAogICAgICovCiAgICB2YXIgJGF2b2lkX2hpZ2h3YXlzID0gZmFsc2U7CiAgICAKICAgIC8qKgogICAgICogZGV0ZXJtaW5lcyBpZiBhdm9pZCB0b2xsd2F5cyBpcyB1c2VkIGluIGRpcmVjdGlvbnMKICAgICAqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgdmFyICRhdm9pZF90b2xsd2F5cyA9IGZhbHNlOyAgICAKICAgICAKICAgIC8qKgogICAgICogZGV0ZXJtaW5lcyB0aGUgZGVmYXVsdCB6b29tIGxldmVsCiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgdmFyICR6b29tID0gMTY7CgogICAgLyoqCiAgICAgKiBkZXRlcm1pbmVzIHRoZSBtYXAgd2lkdGgKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICB2YXIgJHdpZHRoID0gJzUwMHB4JzsKICAgIAogICAgLyoqCiAgICAgKiBkZXRlcm1pbmVzIHRoZSBtYXAgaGVpZ2h0CiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgdmFyICRoZWlnaHQgPSAnNTAwcHgnOwoKICAgIC8qKgogICAgICogbWVzc2FnZSB0aGF0IHBvcHMgdXAgd2hlbiB0aGUgYnJvd3NlciBpcyBpbmNvbXBhdGlibGUgd2l0aCBHb29nbGUgTWFwcy4KICAgICAqIHNldCB0byBlbXB0eSBzdHJpbmcgdG8gZGlzYWJsZS4KICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICB2YXIgJGJyb3dzZXJfYWxlcnQgPSAnU29ycnksIHRoZSBHb29nbGUgTWFwcyBBUEkgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGlzIGJyb3dzZXIuJzsKICAgIAogICAgLyoqCiAgICAgKiBtZXNzYWdlIHRoYXQgYXBwZWFycyB3aGVuIGphdmFzY3JpcHQgaXMgZGlzYWJsZWQuCiAgICAgKiBzZXQgdG8gZW1wdHkgc3RyaW5nIHRvIGRpc2FibGUuCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgdmFyICRqc19hbGVydCA9ICc8Yj5KYXZhc2NyaXB0IG11c3QgYmUgZW5hYmxlZCBpbiBvcmRlciB0byB1c2UgR29vZ2xlIE1hcHMuPC9iPic7CgogICAgLyoqCiAgICAgKiBkZXRlcm1pbmVzIGlmIHNpZGViYXIgaXMgZW5hYmxlZAogICAgICoKICAgICAqIEB2YXIgYm9vbAogICAgICovCiAgICB2YXIgJHNpZGViYXIgPSB0cnVlOyAgICAKCiAgICAvKioKICAgICAqIGRldGVybWluZXMgaWYgdG8vZnJvbSBkaXJlY3Rpb25zIGFyZSBpbmNsdWRlZCBpbnNpZGUgaW5mbyB3aW5kb3cKICAgICAqIAogICAgICogQHZhciBib29sCiAgICAgKiBAZGVwcmVjYXRlZAogICAgICovCiAgICB2YXIgJGRpcmVjdGlvbnMgPSB0cnVlOwoKICAgIC8qKgogICAgICogZGV0ZXJtaW5lcyBpZiBtYXAgbWFya2VycyBicmluZyB1cCBhbiBpbmZvIHdpbmRvdwogICAgICoKICAgICAqIEB2YXIgYm9vbAogICAgICovCiAgICB2YXIgJGluZm9fd2luZG93ID0gdHJ1ZTsgICAgCiAgICAKICAgIC8qKgogICAgICogZGV0ZXJtaW5lcyBpZiBpbmZvIHdpbmRvdyBhcHBlYXJzIHdpdGggYSBjbGljayBvciBtb3VzZW92ZXIKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZyBjbGljay9tb3VzZW92ZXIKICAgICAqLwogICAgdmFyICR3aW5kb3dfdHJpZ2dlciA9ICdjbGljayc7ICAgIAoJCgkvKioKCSAqIGRldGVybWluZXMgd2hldGhlciBvciBub3QgdG8gdXNlIHRoZSBNYXJrZXJDbHVzdGVyZXIgcGx1Z2luCgkgKi8KCSB2YXIgJG1hcmtlcl9jbHVzdGVyZXIgPSBmYWxzZTsKCSAKCSAvKioKCSAqIHNldCBkZWZhdWx0IG1hcmtlciBjbHVzdGVyZXIgKndlYnNlcnZlciogZmlsZSBsb2NhdGlvbgoJICovCgkgdmFyICRtYXJrZXJfY2x1c3RlcmVyX2xvY2F0aW9uID0gIi9NYXJrZXJDbHVzdGVyZXItMS4wL21hcmtlcmNsdXN0ZXJlcl9jb21waWxlZC5qcyI7CgkgCgkgLyoqCgkgKiBzZXQgZGVmYXVsdCBtYXJrZXIgY2x1c3RlcmVyIG9wdGlvbnMKCSAqLwoJIHZhciAkbWFya2VyX2NsdXN0ZXJlcl9vcHRpb25zID0gYXJyYXkoCgkgCSJtYXhab29tIj0+Im51bGwiLAoJCSJncmlkU2l6ZSI9PiJudWxsIiwKCQkic3R5bGVzIj0+Im51bGwiCgkgKTsKICAgIAogICAgLyoqCiAgICAgKiBkZXRlcm1pbmVzIGlmIHRyYWZmaWMgb3ZlcmxheSBpcyBkaXNwbGF5ZWQgb24gbWFwCiAgICAgKgogICAgICogQHZhciBib29sCiAgICAgKi8KICAgIHZhciAkdHJhZmZpY19vdmVybGF5ID0gZmFsc2U7CgkKCS8qKgogICAgICogZGV0ZXJtaW5lcyBpZiBiaWtpbmcgb3ZlcmxheSBpcyBkaXNwbGF5ZWQgb24gbWFwCiAgICAgKgogICAgICogQHZhciBib29sCiAgICAgKi8KICAgIHZhciAkYmlraW5nX292ZXJsYXkgPSBmYWxzZTsgICAKCQoJLyoqCgkgKiBkZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRvIGRpc3BsYXkgc3RyZWV0IHZpZXcgY29udHJvbHMKCSAqLwoJdmFyICRzdHJlZXRfdmlld19jb250cm9scyA9IGZhbHNlOwoJCgkvKioKCSAqIElEIG9mIHRoZSBjb250YWluZXIgdGhhdCB3aWxsIGhvbGQgYSBzdHJlZXQgdmlldyBpZiBzdHJlZXR2aWV3IGNvbnRyb2xzID0gdHJ1ZS4KCSAqLwoJdmFyICRzdHJlZXRfdmlld19kb21faWQgPSAiIjsKICAgIAogICAgLyoqCiAgICAgKiB3aGF0IHNlcnZlciBnZW9jb2RlIGxvb2t1cHMgY29tZSBmcm9tCiAgICAgKgogICAgICogYXZhaWxhYmxlOiBZQUhPTyAgWWFob28hIEFQSS4gVVMgZ2VvY29kZSBsb29rdXBzIG9ubHkuCiAgICAgKiAgICAgICAgICAgIEdPT0dMRSBHb29nbGUgTWFwcy4gVGhpcyBjYW4gZG8gaW50ZXJuYXRpb25hbCBsb29rdXBzLAogICAgICogICAgICAgICAgICAgICAgICAgYnV0IG5vdCBhbiBvZmZpY2lhbCBBUEkgc2VydmljZSBzbyBubyBndWFyYW50ZWVzLgogICAgICogICAgICAgICAgICBOb3RlOiBHT09HTEUgaXMgdGhlIGRlZmF1bHQgbG9va3VwIHNlcnZpY2UsIHBsZWFzZSByZWFkCiAgICAgKiAgICAgICAgICAgICAgICAgIHRoZSBZYWhvbyEgdGVybXMgb2Ygc2VydmljZSBiZWZvcmUgdXNpbmcgdGhlaXIgQVBJLgogICAgICoKICAgICAqIEB2YXIgc3RyaW5nIHNlcnZpY2UgbmFtZQogICAgICovCiAgICB2YXIgJGxvb2t1cF9zZXJ2aWNlID0gJ0dPT0dMRSc7CiAgICB2YXIgJGxvb2t1cF9zZXJ2ZXIgPSBhcnJheSgnR09PR0xFJyA9PiAnbWFwcy5nb29nbGUuY29tJywgJ1lBSE9PJyA9PiAnYXBpLmxvY2FsLnlhaG9vLmNvbScpOwogICAgCiAgICAvKioKICAgICAqIAogICAgICogQHZhciBhcnJheQogICAgICogQGRlcHJlY2F0ZWQKICAgICAqLwogICAgdmFyICRkcml2aW5nX2Rpcl90ZXh0ID0gYXJyYXkoCiAgICAgICAgICAgICdkaXJfdG8nID0+ICdTdGFydCBhZGRyZXNzOiAoaW5jbHVkZSBhZGRyLCBjaXR5IHN0L3JlZ2lvbiknLAogICAgICAgICAgICAndG9fYnV0dG9uX3ZhbHVlJyA9PiAnR2V0IERpcmVjdGlvbnMnLAogICAgICAgICAgICAndG9fYnV0dG9uX3R5cGUnID0+ICdzdWJtaXQnLAogICAgICAgICAgICAnZGlyX2Zyb20nID0+ICdFbmQgYWRkcmVzczogKGluY2x1ZGUgYWRkciwgY2l0eSBzdC9yZWdpb24pJywKICAgICAgICAgICAgJ2Zyb21fYnV0dG9uX3ZhbHVlJyA9PiAnR2V0IERpcmVjdGlvbnMnLAogICAgICAgICAgICAnZnJvbV9idXR0b25fdHlwZScgPT4gJ3N1Ym1pdCcsCiAgICAgICAgICAgICdkaXJfdGV4dCcgPT4gJ0RpcmVjdGlvbnM6ICcsCiAgICAgICAgICAgICdkaXJfdG9oZXJlJyA9PiAnVG8gaGVyZScsCiAgICAgICAgICAgICdkaXJfZnJvbWhlcmUnID0+ICdGcm9tIGhlcmUnCiAgICAgICAgICAgICk7ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAKICAgIAogICAgLyoqCiAgICAgKiB2ZXJzaW9uIG51bWJlcgogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHZhciAkX3ZlcnNpb24gPSAnMy4wYmV0YSc7CgogICAgLyoqCiAgICAgKiBsaXN0IG9mIGFkZGVkIG1hcmtlcnMKICAgICAqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHZhciAkX21hcmtlcnMgPSBhcnJheSgpOwogICAgCiAgICAvKioKICAgICAqIG1heGltdW0gbG9uZ2l0dWRlIG9mIGFsbCBtYXJrZXJzCiAgICAgKiAKICAgICAqIEB2YXIgZmxvYXQKICAgICAqLwogICAgdmFyICRfbWF4X2xvbiA9IC0xMDAwMDAwOwogICAgCiAgICAvKioKICAgICAqIG1pbmltdW0gbG9uZ2l0dWRlIG9mIGFsbCBtYXJrZXJzCiAgICAgKgogICAgICogQHZhciBmbG9hdAogICAgICovCiAgICB2YXIgJF9taW5fbG9uID0gMTAwMDAwMDsKICAgIAogICAgLyoqCiAgICAgKiBtYXggbGF0aXR1ZGUKICAgICAqCiAgICAgKiBAdmFyIGZsb2F0CiAgICAgKi8KICAgIHZhciAkX21heF9sYXQgPSAtMTAwMDAwMDsKICAgIAogICAgLyoqCiAgICAgKiBtaW4gbGF0aXR1ZGUKICAgICAqCiAgICAgKiBAdmFyIGZsb2F0CiAgICAgKi8KICAgIHZhciAkX21pbl9sYXQgPSAxMDAwMDAwOwogICAgCiAgICAvKioKICAgICAqIGRldGVybWluZXMgaWYgd2Ugc2hvdWxkIHpvb20gdG8gbWluaW11bSBsZXZlbCAoYWJvdmUgdGhpcy0+em9vbSB2YWx1ZSkgdGhhdCB3aWxsIGVuY29tcGFzcyBhbGwgbWFya2VycwogICAgICoKICAgICAqIEB2YXIgYm9vbAogICAgICovCiAgICB2YXIgJHpvb21fZW5jb21wYXNzID0gdHJ1ZTsKCiAgICAvKioKICAgICAqIGZhY3RvciBieSB3aGljaCB0byBmdWRnZSB0aGUgYm91bmRhcmllcyBzbyB0aGF0IHdoZW4gd2Ugem9vbSBlbmNvbXBhc3MsIHRoZSBtYXJrZXJzIGFyZW4ndCB0b28gY2xvc2UgdG8gdGhlIGVkZ2UKICAgICAqCiAgICAgKiBAdmFyIGZsb2F0CiAgICAgKi8KICAgIHZhciAkYm91bmRzX2Z1ZGdlID0gMC4wMTsKCiAgICAvKioKICAgICAqIHVzZSB0aGUgZmlyc3Qgc3VnZ2VzdGlvbiBieSBhIGdvb2dsZSBsb29rdXAgaWYgZXhhY3QgbWF0Y2ggbm90IGZvdW5kCiAgICAgKgogICAgICogQHZhciBmbG9hdAogICAgICovCiAgICB2YXIgJHVzZV9zdWdnZXN0ID0gZmFsc2U7CgogICAgCiAgICAvKioKICAgICAqIGxpc3Qgb2YgYWRkZWQgcG9seWxpbmVzCiAgICAgKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICB2YXIgJF9wb2x5bGluZXMgPSBhcnJheSgpOwoJCgkvKioKCSAqIGxpc3Qgb2YgcG9seWxpbmVzIHRoYXQgc2hvdWxkIGhhdmUgYW4gZWxldmF0aW9uIHByb2ZpbGUgcmVuZGVyZWQuCgkgKi8KCXZhciAkX2VsZXZhdGlvbl9wb2x5bGluZXMgPSBhcnJheSgpOwoJCgkvKioKCSAqIGRldGVybWluZXMgd2hldGhlciBvciBub3QgdG8gZGlzcGxheSBhIG1hcmtlciBvbiB0aGUgImxpbmUiIHdoZW4gCgkgKiBtb3VzaW5nIG92ZXIgdGhlIGVsZXZhdGlvbiBjaGFydAoJICovCgl2YXIgJGVsZXZhdGlvbl9tYXJrZXJzID0gdHJ1ZTsKCQoJLyoqCgkgKiBkZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRvIGRpc3BsYXkgYW4gZWxldmF0aW9uIGNoYXJ0IAoJICogZm9yIGRpcmVjdGlvbnMgdGhhdCBhcmUgYWRkZWQgdG8gdGhlIG1hcC4gIAoJICovCgl2YXIgJGVsZXZhdGlvbl9kaXJlY3Rpb25zID0gZmFsc2U7CiAgICAgICAgCiAgICAvKioKICAgICAqIGljb24gaW5mbyBhcnJheQogICAgICoKICAgICAqIEB2YXIgYXJyYXkKICAgICAqIEBkZXByZWNhdGVkCiAgICAgKiBAdmVyc2lvbiAyLjUgIAogICAgICovCiAgICB2YXIgJF9pY29ucyA9IGFycmF5KCk7ICAKICAgICAgIAogICAgLyoqCiAgICAgKiBtYXJrZXIgaWNvbiBpbmZvIGFycmF5CiAgICAgKgogICAgICogQHZhciBhcnJheQogICAgICogQHZlcnNpb24gMy4wCiAgICAgKi8KICAgIHZhciAkX21hcmtlcl9pY29ucyA9IGFycmF5KCk7CiAgICAKICAgIC8qKgogICAgICogRGVmYXVsdCBpY29uIGltYWdlIGxvY2F0aW9uLgogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHZhciAkZGVmYXVsdF9pY29uID0gIiI7CiAgICAKICAgIC8qKgogICAgICogRGVmYXVsdCBpY29uIHNoYWRvdyBpbWFnZSBsb2NhdGlvbi4KICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICB2YXIgJGRlZmF1bHRfaWNvbl9zaGFkb3cgPSAiIjsKCQoJLyoqCiAgICAgKiBsaXN0IG9mIGFkZGVkIG92ZXJsYXlzCiAgICAgKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICB2YXIgJF9vdmVybGF5cyA9IGFycmF5KCk7CiAgICAKICAgIC8qKgogICAgICogbGlzdCBvZiBhZGRlZCBrbWwgb3ZlcmxheXMKICAgICAqLwogICAgdmFyICRfa21sX292ZXJsYXlzID0gYXJyYXkoKTsKICAgICAgICAKCiAgICAvKioKICAgICAqIGRhdGFiYXNlIGNhY2hlIHRhYmxlIG5hbWUKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICB2YXIgJF9kYl9jYWNoZV90YWJsZSA9ICdHRU9DT0RFUyc7CiAgICAKICAgIC8qKgogICAgICogQ2xhc3MgdmFyaWFibGUgdGhhdCB3aWxsIHN0b3JlIGdlbmVyYXRlZCBoZWFkZXIgY29kZSBmb3IgSlMgdG8gZGlzcGxheSBkaXJlY3Rpb25zCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgdmFyICRfZGlyZWN0aW9uc19oZWFkZXIgPSAnJzsKCQoJLyoqCgkgKiBDbGFzcyB2YXJpYWJsZSB0aGF0IHdpbGwgc3RvcmUgaW5mb3JtYXRpb24gdG8gcmVuZGVyIGRpcmVjdGlvbnMKCSAqLwoJdmFyICRfZGlyZWN0aW9ucyA9IGFycmF5KCk7CiAgICAKICAgIC8qKgogICAgICogQ2xhc3MgdmFyaWFibGUgdG8gc3RvcmUgd2hldGhlciBvciBub3QgdG8gZGlzcGxheSBKUyBmdW5jdGlvbnMgaW4gdGhlIGhlYWRlcgogICAgICovCiAgICB2YXIgJF9kaXNwbGF5X2pzX2Z1bmN0aW9ucyA9IHRydWU7CiAgICAKICAgIC8qKgogICAgICogQ2xhc3MgdmFyaWFibGUgdGhhdCB3aWxsIHN0b3JlIGZsYWcgdG8gbWluaWZ5IGpzIC0gdGhpcyBjYW4gYmUgb3ZlcndyaXR0ZW4gYWZ0ZXIgb2JqZWN0IGlzIGluc3RhbnRpYXRlZC4gIEluY2x1ZGUgSlNNaW4ucGhwIGlmIAoJICogeW91IHdhbnQgdG8gdXNlIEpTIE1pbmlmaWNhdGlvbi4KICAgICAqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwoJIHZhciAkX21pbmlmeV9qcyA9IHRydWU7CiAgICAgICAgCiAgICAvKioKICAgICAqIGNsYXNzIGNvbnN0cnVjdG9yCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWFwX2lkIHRoZSBET00gZWxlbWVudCBJRCBmb3IgdGhlIG1hcAogICAgICogQHBhcmFtIHN0cmluZyAkYXBwX2lkIFlPVVIgWWFob28gQXBwIElECiAgICAgKi8KICAgIGZ1bmN0aW9uIEdvb2dsZU1hcEFQSSgkbWFwX2lkID0gJ21hcCcsICRhcHBfaWQgPSAnTXlNYXBBcHAnKSB7CiAgICAgICAgJHRoaXMtPm1hcF9pZCA9ICRtYXBfaWQ7CiAgICAgICAgJHRoaXMtPnNpZGViYXJfaWQgPSAnc2lkZWJhcl8nIC4gJG1hcF9pZDsKICAgICAgICAkdGhpcy0+YXBwX2lkID0gJGFwcF9pZDsKICAgIH0KCQoJLyoqCgkgKiBmdW5jdGlvbiB0byBlbmFibGUgbWFwIGRpc3BsYXkKCSAqLwoJZnVuY3Rpb24gZW5hYmxlTWFwRGlzcGxheSgpewoJCSR0aGlzLT5kaXNwbGF5X21hcCA9IHRydWU7Cgl9CgkKCS8qKgoJICogZnVuY3Rpb24gdG8gZGlzYWJsZSBtYXAgZGlzcGxheSAodXNlZCB0byBkaXNwbGF5IHN0cmVldCB2aWV3IG9ubHkpCgkgKi8KCWZ1bmN0aW9uIGRpc2FibGVNYXBEaXNwbGF5KCl7CgkJJHRoaXMtPmRpc3BsYXlfbWFwID0gdHJ1ZTsKCX0KICAgIAogICAgLyoqCiAgICAgKiBzZXRzIHRoZSBQRUFSOjpEQiBkc24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkc24gVGFrZXMgdGhlIGZvcm0gb2YgIm15c3FsOi8vdXNlcjpwYXNzQGxvY2FsaG9zdC9kYl9uYW1lIgogICAgICovCiAgICBmdW5jdGlvbiBzZXREU04oJGRzbikgewogICAgICAgICR0aGlzLT5kc24gPSAkZHNuOyAgIAogICAgfQogICAgCiAgICAvKioKICAgICAqIHNldHMgdGhlIHdpZHRoIG9mIHRoZSBtYXAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR3aWR0aAogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UgV2lkdGggb3IgZmFsc2UgaWYgbm90IGEgdmFsaWQgdmFsdWUKICAgICAqLwogICAgZnVuY3Rpb24gc2V0V2lkdGgoJHdpZHRoKSB7CiAgICAgICAgaWYoIXByZWdfbWF0Y2goJyFeKFxkKykoLiopJCEnLCR3aWR0aCwkX21hdGNoKSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICAkX3dpZHRoID0gJF9tYXRjaFsxXTsKICAgICAgICAkX3R5cGUgPSAkX21hdGNoWzJdOwogICAgICAgIGlmKCRfdHlwZSA9PSAnJScpCiAgICAgICAgICAgICR0aGlzLT53aWR0aCA9ICRfd2lkdGggLiAnJSc7CiAgICAgICAgZWxzZQogICAgICAgICAgICAkdGhpcy0+d2lkdGggPSAkX3dpZHRoIC4gJ3B4JzsKICAgICAgICAKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIHNldHMgdGhlIGhlaWdodCBvZiB0aGUgbWFwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaGVpZ2h0CiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBIZWlnaHQgb3IgZmFsc2UgaWYgbm90IGEgdmFsaWQgdmFsdWUKICAgICAqLwogICAgZnVuY3Rpb24gc2V0SGVpZ2h0KCRoZWlnaHQpIHsKICAgICAgICBpZighcHJlZ19tYXRjaCgnIV4oXGQrKSguKikkIScsJGhlaWdodCwkX21hdGNoKSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICAkX2hlaWdodCA9ICRfbWF0Y2hbMV07CiAgICAgICAgJF90eXBlID0gJF9tYXRjaFsyXTsKICAgICAgICBpZigkX3R5cGUgPT0gJyUnKQogICAgICAgICAgICAkdGhpcy0+aGVpZ2h0ID0gJF9oZWlnaHQgLiAnJSc7CiAgICAgICAgZWxzZQogICAgICAgICAgICAkdGhpcy0+aGVpZ2h0ID0gJF9oZWlnaHQgLiAncHgnOwogICAgICAgIAogICAgICAgIHJldHVybiB0cnVlOwogICAgfSAgCiAgICAgICAgICAKCiAgICAvKioKICAgICAqIHNldHMgdGhlIGRlZmF1bHQgbWFwIHpvb20gbGV2ZWwKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsZXZlbCBJbml0aWFsIHpvb20gbGV2ZWwgdmFsdWUKICAgICAqLwogICAgZnVuY3Rpb24gc2V0Wm9vbUxldmVsKCRsZXZlbCkgewogICAgICAgICR0aGlzLT56b29tID0gKGludCkgJGxldmVsOwogICAgfSAgICAKICAgICAgICAgICAgCiAgICAvKioKICAgICAqIGVuYWJsZXMgdGhlIG1hcCBjb250cm9scyAoem9vbS9tb3ZlKQogICAgICoKICAgICAqLwogICAgZnVuY3Rpb24gZW5hYmxlTWFwQ29udHJvbHMoKSB7CiAgICAgICAgJHRoaXMtPm1hcF9jb250cm9scyA9IHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBkaXNhYmxlcyB0aGUgbWFwIGNvbnRyb2xzICh6b29tL21vdmUpCiAgICAgKgogICAgICovCiAgICBmdW5jdGlvbiBkaXNhYmxlTWFwQ29udHJvbHMoKSB7CiAgICAgICAgJHRoaXMtPm1hcF9jb250cm9scyA9IGZhbHNlOwogICAgfSAKICAgIAogICAgLyoqCiAgICAgKiBzZXRzIHRoZSBtYXAgY29udHJvbCBzaXplIChsYXJnZS9zbWFsbCkKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzaXplIExhcmdlL1NtYWxsCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldENvbnRyb2xTaXplKCRzaXplKSB7CiAgICAgICAgaWYoaW5fYXJyYXkoJHNpemUsYXJyYXkoJ2xhcmdlJywnc21hbGwnKSkpCiAgICAgICAgICAgICR0aGlzLT5jb250cm9sX3NpemUgPSAkc2l6ZTsKICAgIH0gICAgICAgICAgICAKCiAgICAgLyoqCiAgICAgKiBlbmFibGVzIHRoZSB0eXBlIGNvbnRyb2xzIChtYXAvc2F0ZWxsaXRlL2h5YnJpZCkKICAgICAqCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVuYWJsZUxvY2FsU2VhcmNoKCkgewogICAgICAgICR0aGlzLT5sb2NhbF9zZWFyY2ggPSB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogZGlzYWJsZXMgdGhlIHR5cGUgY29udHJvbHMgKG1hcC9zYXRlbGxpdGUvaHlicmlkKQogICAgICoKICAgICAqLwogICAgZnVuY3Rpb24gZGlzYWJsZUxvY2FsU2VhcmNoKCkgewogICAgICAgICR0aGlzLT5sb2NhbF9zZWFyY2ggPSBmYWxzZTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBlbmFibGVzIHRoZSB0eXBlIGNvbnRyb2xzIChtYXAvc2F0ZWxsaXRlL2h5YnJpZCkKICAgICAqCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVuYWJsZUxvY2FsU2VhcmNoQWRzKCkgewogICAgICAgICR0aGlzLT5sb2NhbF9zZWFyY2hfYWRzID0gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIGRpc2FibGVzIHRoZSB0eXBlIGNvbnRyb2xzIChtYXAvc2F0ZWxsaXRlL2h5YnJpZCkKICAgICAqCiAgICAgKi8KICAgIGZ1bmN0aW9uIGRpc2FibGVMb2NhbFNlYXJjaEFkcygpIHsKICAgICAgICAkdGhpcy0+bG9jYWxfc2VhcmNoX2FkcyA9IGZhbHNlOwogICAgfQogICAgCiAgICAvKioKICAgICAqIGVuYWJsZXMgd2Fsa2luZyBkaXJlY3Rpb25zCiAgICAgKiAKICAgICAqLwogICAgZnVuY3Rpb24gZW5hYmxlV2Fsa2luZ0RpcmVjdGlvbnMoKSB7CiAgICAgICAgJHRoaXMtPndhbGtpbmdfZGlyZWN0aW9ucyA9IHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBkaXNhYmxlcyB3YWxraW5nIGRpcmVjdGlvbnMKICAgICAqIAogICAgICovCiAgICBmdW5jdGlvbiBkaXNhYmxlV2Fsa2luZ0RpcmVjdGlvbnMoKSB7CiAgICAgICAgJHRoaXMtPndhbGtpbmdfZGlyZWN0aW9ucyA9IGZhbHNlOwogICAgfQogICAgCiAgICAvKioKICAgICAqIGVuYWJsZXMgYmlraW5nIGRpcmVjdGlvbnMKICAgICAqIAogICAgICovCiAgICBmdW5jdGlvbiBlbmFibGVCaWtpbmdEaXJlY3Rpb25zKCkgewogICAgICAgICR0aGlzLT5iaWtpbmdfZGlyZWN0aW9ucyA9IHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBkaXNhYmxlcyBiaWtpbmcgZGlyZWN0aW9ucwogICAgICogCiAgICAgKi8KICAgIGZ1bmN0aW9uIGRpc2FibGVCaWtpbmdEaXJlY3Rpb25zKCkgewogICAgICAgICR0aGlzLT5iaWtpbmdfZGlyZWN0aW9ucyA9IGZhbHNlOwogICAgfQogICAgCiAgICAvKioKICAgICAqIGVuYWJsZXMgYXZvaWQgaGlnaHdheXMgaW4gZGlyZWN0aW9ucwogICAgICogCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVuYWJsZUF2b2lkSGlnaHdheXMoKSB7CiAgICAgICAgJHRoaXMtPmF2b2lkX2hpZ2h3YXlzID0gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIGRpc2FibGVzIGF2b2lkIGhpZ2h3YXlzIGluIGRpcmVjdGlvbnMKICAgICAqIAogICAgICovCiAgICBmdW5jdGlvbiBkaXNhYmxlQXZvaWRIaWdod2F5cygpIHsKICAgICAgICAkdGhpcy0+YXZvaWRfaGlnaHdheXMgPSBmYWxzZTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBlbmFibGVzIGF2b2lkIHRvbGxzIGluIGRpcmVjdGlvbnMKICAgICAqIAogICAgICovCiAgICBmdW5jdGlvbiBlbmFibGVBdm9pZFRvbGxzKCkgewogICAgICAgICR0aGlzLT5hdm9pZF90b2xscyA9IHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBkaXNhYmxlcyBhdm9pZCB0b2xscyBpbiBkaXJlY3Rpb25zCiAgICAgKiAKICAgICAqLwogICAgZnVuY3Rpb24gZGlzYWJsZUF2b2lkVG9sbHMoKSB7CiAgICAgICAgJHRoaXMtPmF2b2lkX3RvbGxzID0gZmFsc2U7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogQWRkIGRpcmVjdGlvbnMgcm91dGUgdG8gdGhlIG1hcCBhbmQgYWRkcyB0ZXh0IGRpcmVjdGlvbnMgY29udGFpbmVyIHdpdGggaWQ9JGRvbV9pZAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0YXJ0X2FkZHJlc3MKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRlc3RfYWRkcmVzcwogICAgICogQHBhcmFtIHN0cmluZyAkZG9tX2lkIERPTSBFbGVtZW50IElEIGZvciBkaXJlY3Rpb25zIGNvbnRhaW5lci4KICAgICAqIEBwYXJhbSBib29sICRhZGRfbWFya2VycyBBZGQgYSBtYXJrZXIgYXQgc3RhcnQgYW5kIGRlc3QgbG9jYXRpb25zLgogICAgICovCiAgICBmdW5jdGlvbiBhZGREaXJlY3Rpb25zKCRzdGFydF9hZGRyZXNzPScnLCRkZXN0X2FkZHJlc3M9JycsJGRvbV9pZD0nJywgJGFkZF9tYXJrZXJzPXRydWUsICRlbGV2YXRpb25fc2FtcGxlcz0yNTYsICRlbGV2YXRpb25fd2lkdGg9IiIsICRlbGV2YXRpb25faGVpZ2h0PSIiLCAkZWxldmF0aW9uX2RvbV9pZD0nJyl7CgkJaWYoJGVsZXZhdGlvbl9kb21faWQ9PSIiKQoJCQkkZWxldmF0aW9uX2RvbV9pZCA9ICJlbGV2YXRpb24iLiRkb21faWQ7CgkJCiAgICAgICAgaWYoJHN0YXJ0X2FkZHJlc3MgIT0gJycgJiYgJGRlc3RfYWRkcmVzcyAhPSAnJyAmJiAkZG9tX2lkICE9ICcnKXsKCQkJJHRoaXMtPl9kaXJlY3Rpb25zWyRkb21faWRdID0gYXJyYXkoCgkJCQkiZG9tX2lkIj0+JGRvbV9pZCwKCQkJCSJzdGFydCI9PiRzdGFydF9hZGRyZXNzLAoJCQkJImRlc3QiPT4kZGVzdF9hZGRyZXNzLAoJCQkJIm1hcmtlcnMiPT50cnVlLAoJCQkJImVsZXZhdGlvbl9zYW1wbGVzIj0+JGVsZXZhdGlvbl9zYW1wbGVzLAoJCQkJIndpZHRoIj0+KCRlbGV2YXRpb25fd2lkdGghPSIiPyRlbGV2YXRpb25fd2lkdGg6c3RyX3JlcGxhY2UoInB4IiwiIiwkdGhpcy0+d2lkdGgpKSwKCQkJCSJoZWlnaHQiPT4oJGVsZXZhdGlvbl9oZWlnaHQhPSIiPyRlbGV2YXRpb25faGVpZ2h0OnN0cl9yZXBsYWNlKCJweCIsIiIsJHRoaXMtPmhlaWdodCkvMiksCgkJCQkiZWxldmF0aW9uX2RvbV9pZCI9PiRlbGV2YXRpb25fZG9tX2lkCgkJCSk7CQkJCgkJCWlmKCRhZGRfbWFya2Vycz09dHJ1ZSl7CgkJCQkkdGhpcy0+YWRkTWFya2VyQnlBZGRyZXNzKCRzdGFydF9hZGRyZXNzLCRzdGFydF9hZGRyZXNzLCAkc3RhcnRfYWRkcmVzcyk7CgkJCQkkdGhpcy0+YWRkTWFya2VyQnlBZGRyZXNzKCRkZXN0X2FkZHJlc3MsJGRlc3RfYWRkcmVzcywgJGRlc3RfYWRkcmVzcyk7CgkJCX0gCiAgICAgICAgfQogICAgfQogICAgICAgIAogICAgLyoqCiAgICAgKiBlbmFibGVzIHRoZSB0eXBlIGNvbnRyb2xzIChtYXAvc2F0ZWxsaXRlL2h5YnJpZCkKICAgICAqCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVuYWJsZVR5cGVDb250cm9scygpIHsKICAgICAgICAkdGhpcy0+dHlwZV9jb250cm9scyA9IHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBkaXNhYmxlcyB0aGUgdHlwZSBjb250cm9scyAobWFwL3NhdGVsbGl0ZS9oeWJyaWQpCiAgICAgKgogICAgICovCiAgICBmdW5jdGlvbiBkaXNhYmxlVHlwZUNvbnRyb2xzKCkgewogICAgICAgICR0aGlzLT50eXBlX2NvbnRyb2xzID0gZmFsc2U7CiAgICB9CgogICAgLy8gRHVrZXRvd24gY2hhbmdlcwogICAgLyoqCiAgICAgKiBlbmFibGVzIHRoZSBwYW4gY29udHJvbCBpY29uCiAgICAgKgogICAgICovCiAgICBmdW5jdGlvbiBlbmFibGVQYW5Db250cm9sKCkgewogICAgICAgICR0aGlzLT5wYW5fY29udHJvbCA9IHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBkaXNhYmxlcyB0aGUgcGFuIGNvbnRyb2wgaWNvbgogICAgICoKICAgICAqLwogICAgZnVuY3Rpb24gZGlzYWJsZVBhbkNvbnRyb2woKSB7CiAgICAgICAgJHRoaXMtPnBhbl9jb250cm9sID0gZmFsc2U7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogZW5hYmxlcyBzdHJlZXR2aWV3IHRvIGJlIHVzZWQKICAgICAqCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVuYWJsZVN0cmVldFZpZXdDb250cm9sKCkgewogICAgCSR0aGlzLT5zdHJlZXRWaWV3Q29udHJvbCA9IHRydWU7CiAgICB9CiAgICAvKioKICAgICAqIGVuYWJsZXMgc3RyZWV0dmlldyB0byBiZSB1c2VkCiAgICAgKgogICAgICovCiAgICBmdW5jdGlvbiBkaXNhYmxlU3RyZWV0Vmlld0NvbnRyb2woKSB7CiAgICAJJHRoaXMtPnN0cmVldFZpZXdDb250cm9sID0gZmFsc2U7CiAgICB9CiAgICAvLyBEdWtldG93biBjaGFuZ2VzIGVuZAoKCS8qKgoJICogc2V0cyBtYXAgY29udHJvbCBzdHlsZQoJICovCglmdW5jdGlvbiBzZXRUeXBlQ29udHJvbHNTdHlsZSgkdHlwZSl7CgkJc3dpdGNoKCR0eXBlKXsKCQkJY2FzZSAiZHJvcGRvd24iOgoJCQkJJHRoaXMtPnR5cGVfY29udHJvbHNfc3R5bGUgPSAiRFJPUERPV05fTUVOVSI7CgkJCQlicmVhazsKCQkJY2FzZSAiaG9yaXpvbnRhbCI6CgkJCQkkdGhpcy0+dHlwZV9jb250cm9sc19zdHlsZSA9ICJIT1JJWk9OVEFMX0JBUiI7CgkJCQlicmVhazsKCQkJZGVmYXVsdDoKCQkJCSR0aGlzLT50eXBlX2NvbnRyb2xzX3N0eWxlID0gIkRFRkFVTFQiOwoJCQkJYnJlYWs7CgkJfQoJfQoJCiAgICAvKioKICAgICAqIHNldCBkZWZhdWx0IG1hcCB0eXBlIChtYXAvc2F0ZWxsaXRlL2h5YnJpZCkKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0eXBlIE5ldyBWMyBNYXAgVHlwZXMsIG9ubHkgaW5jbHVkZSBlbmRpbmcgd29yZCAoSFlCUklELFNBVEVMTElURSxURVJSQUlOLFJPQURNQVApCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldE1hcFR5cGUoJHR5cGUpIHsKICAgICAgICBzd2l0Y2goJHR5cGUpIHsKICAgICAgICAgICAgY2FzZSAnaHlicmlkJzoKICAgICAgICAgICAgICAgICR0aGlzLT5tYXBfdHlwZSA9ICdIWUJSSUQnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3NhdGVsbGl0ZSc6CiAgICAgICAgICAgICAgICAkdGhpcy0+bWFwX3R5cGUgPSAnU0FURUxMSVRFJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICd0ZXJyYWluJzoKICAgICAgICAgICAgICAgICR0aGlzLT5tYXBfdHlwZSA9ICdURVJSQUlOJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdtYXAnOgogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgJHRoaXMtPm1hcF90eXBlID0gJ1JPQURNQVAnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfSAgICAgICAKICAgIH0JICAgCgkgICAgCiAgICAvKioKICAgICAqIGVuYWJsZXMgb25sb2FkCiAgICAgKgogICAgICovCiAgICBmdW5jdGlvbiBlbmFibGVPbkxvYWQoKSB7CiAgICAgICAgJHRoaXMtPm9ubG9hZCA9IHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBkaXNhYmxlcyBvbmxvYWQKICAgICAqCiAgICAgKi8KICAgIGZ1bmN0aW9uIGRpc2FibGVPbkxvYWQoKSB7CiAgICAgICAgJHRoaXMtPm9ubG9hZCA9IGZhbHNlOwogICAgfQogICAgCiAgICAvKioKICAgICAqIGVuYWJsZXMgc2lkZWJhcgogICAgICoKICAgICAqLwogICAgZnVuY3Rpb24gZW5hYmxlU2lkZWJhcigpIHsKICAgICAgICAkdGhpcy0+c2lkZWJhciA9IHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBkaXNhYmxlcyBzaWRlYmFyCiAgICAgKgogICAgICovCiAgICBmdW5jdGlvbiBkaXNhYmxlU2lkZWJhcigpIHsKICAgICAgICAkdGhpcy0+c2lkZWJhciA9IGZhbHNlOwogICAgfSAgICAKCiAgICAvKioKICAgICAqIGVuYWJsZXMgbWFwIGRpcmVjdGlvbnMgaW5zaWRlIGluZm8gd2luZG93CiAgICAgKgogICAgICovCiAgICBmdW5jdGlvbiBlbmFibGVEaXJlY3Rpb25zKCkgewogICAgICAgICR0aGlzLT5kaXJlY3Rpb25zID0gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIGRpc2FibGVzIG1hcCBkaXJlY3Rpb25zIGluc2lkZSBpbmZvIHdpbmRvdwogICAgICoKICAgICAqLwogICAgZnVuY3Rpb24gZGlzYWJsZURpcmVjdGlvbnMoKSB7CiAgICAgICAgJHRoaXMtPmRpcmVjdGlvbnMgPSBmYWxzZTsKICAgIH0gICAgCiAgICAgICAgCiAgICAvKioKICAgICAqIHNldCBicm93c2VyIGFsZXJ0IG1lc3NhZ2UgZm9yIGluY29tcGF0aWJsZSBicm93c2VycwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqLwogICAgZnVuY3Rpb24gc2V0QnJvd3NlckFsZXJ0KCRtZXNzYWdlKSB7CiAgICAgICAgJHRoaXMtPmJyb3dzZXJfYWxlcnQgPSAkbWVzc2FnZTsKICAgIH0KCiAgICAvKioKICAgICAqIHNldCA8bm9zY3JpcHQ+IG1lc3NhZ2Ugd2hlbiBqYXZhc2NyaXB0IGlzIGRpc2FibGVkCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICovCiAgICBmdW5jdGlvbiBzZXRKU0FsZXJ0KCRtZXNzYWdlKSB7CiAgICAgICAgJHRoaXMtPmpzX2FsZXJ0ID0gJG1lc3NhZ2U7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogZW5hYmxlIHRyYWZmaWMgb3ZlcmxheSAKICAgICAqLwogICAgZnVuY3Rpb24gZW5hYmxlVHJhZmZpY092ZXJsYXkoKSB7CiAgICAgICAgJHRoaXMtPnRyYWZmaWNfb3ZlcmxheT0gdHJ1ZTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBkaXNhYmxlIHRyYWZmaWMgb3ZlcmxheSAoZGVmYXVsdCkKICAgICAqLwogICAgZnVuY3Rpb24gZGlzYWJsZVRyYWZmaWNPdmVybGF5KCkgewogICAgICAgICR0aGlzLT50cmFmZmljX292ZXJsYXk9IGZhbHNlOwogICAgfQoJCgkvKioKICAgICAqIGVuYWJsZSBiaWtpbmcgb3ZlcmxheSAKICAgICAqLwogICAgZnVuY3Rpb24gZW5hYmxlQmlraW5nT3ZlcmxheSgpIHsKICAgICAgICAkdGhpcy0+YmlraW5nX292ZXJsYXk9IHRydWU7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogZGlzYWJsZSBiaWtpbmcgb3ZlcmxheSAoZGVmYXVsdCkKICAgICAqLwogICAgZnVuY3Rpb24gZGlzYWJsZUJpa2luZ092ZXJsYXkoKSB7CiAgICAgICAgJHRoaXMtPmJpa2luZ19vdmVybGF5PSBmYWxzZTsKICAgIH0KCQoJLyoqCiAgICAgKiBlbmFibGUgYmlraW5nIG92ZXJsYXkgCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVuYWJsZVN0cmVldFZpZXdDb250cm9scygpIHsKICAgICAgICAkdGhpcy0+c3RyZWV0X3ZpZXdfY29udHJvbHM9IHRydWU7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogZGlzYWJsZSBiaWtpbmcgb3ZlcmxheSAoZGVmYXVsdCkKICAgICAqLwogICAgZnVuY3Rpb24gZGlzYWJsZVN0cmVldFZpZXdDb250cm9scygpIHsKICAgICAgICAkdGhpcy0+c3RyZWV0X3ZpZXdfY29udHJvbHM9IGZhbHNlOwogICAgfQoJCgkvKioKCSAqIGF0dGFjaCBhIGRvbSBpZCBvYmplY3QgYXMgYSBzdHJlZXR2aWV3IGNvbnRhaW5lciB0byB0aGUgbWFwCgkgKiBOT1RFOiBPbmx5IG9uZSBjb250YWluZXIgY2FuIGJlIGF0dGFjaGVkIHRvIGEgbWFwLgoJICoqLwoJZnVuY3Rpb24gYXR0YWNoU3RyZWV0Vmlld0NvbnRhaW5lcigkZG9tX2lkKXsKCQkkdGhpcy0+c3RyZWV0X3ZpZXdfZG9tX2lkID0gJGRvbV9pZDsKCX0KICAgIAogICAgLyoqCiAgICAgKiBlbmFibGUgR29vZ2xlIEFkc2Vuc2UgYWRtYW5hZ2VyIG9uIE1hcCAobm90IHN1cHBvcnRlZCBpbiBWMyBBUEkpCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVuYWJsZUFkcygpewogICAgICAgICR0aGlzLT5hZHNfbWFuYWdlciA9IHRydWU7IAogICAgfQogICAgCiAgICAvKioKICAgICAqIGRpc2FibGUgR29vZ2xlIEFkc2Vuc2UgYWRtYW5hZ2VyIG9uIE1hcCAobm90IHN1cHBvcnRlZCBpbiBWMyBBUEkpCiAgICAgKi8KICAgIGZ1bmN0aW9uIGRpc2FibGVBZHMoKXsKICAgICAgICAkdGhpcy0+YWRzX21hbmFnZXIgPSBmYWxzZTsgCiAgICB9CiAgICAKCiAgICAvKioKICAgICAqIGVuYWJsZSBtYXAgbWFya2VyIGluZm8gd2luZG93cwogICAgICovCiAgICBmdW5jdGlvbiBlbmFibGVJbmZvV2luZG93KCkgewogICAgICAgICR0aGlzLT5pbmZvX3dpbmRvdyA9IHRydWU7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogZGlzYWJsZSBtYXAgbWFya2VyIGluZm8gd2luZG93cwogICAgICovCiAgICBmdW5jdGlvbiBkaXNhYmxlSW5mb1dpbmRvdygpIHsKICAgICAgICAkdGhpcy0+aW5mb193aW5kb3cgPSBmYWxzZTsKICAgIH0KCQoJLyoqCgkgKiBlbmFibGUgZWxldmF0aW9uIG1hcmtlciB0byBiZSBkaXNwbGF5ZWQKCSAqLwoJIGZ1bmN0aW9uIGVuYWJsZUVsZXZhdGlvbk1hcmtlcigpewoJCSAkdGhpcy0+ZWxldmF0aW9uX21hcmtlcnMgPSB0cnVlOwoJIH0KCSAKCSAvKioKCSAqIGRpc2FibGUgZWxldmF0aW9uIG1hcmtlcgoJICovCgkgZnVuY3Rpb24gZGlzYWJsZUVsZXZhdGlvbk1hcmtlcigpewoJCSAkdGhpcy0+ZWxldmF0aW9uX21hcmtlcnMgPSBmYWxzZTsKCSB9CgkgCgkgLyoqCgkgKiBlbmFibGUgZWxldmF0aW9uIHRvIGJlIGRpc3BsYXllZCBmb3IgZGlyZWN0aW9ucwoJICovCgkgZnVuY3Rpb24gZW5hYmxlRWxldmF0aW9uRGlyZWN0aW9ucygpewoJCSAkdGhpcy0+ZWxldmF0aW9uX2RpcmVjdGlvbnMgPSB0cnVlOwoJIH0KCSAKCSAvKioKCSAqIGRpc2FibGUgZWxldmF0aW9uIHRvIGJlIGRpc3BsYXllZCBmb3IgZGlyZWN0aW9ucwoJICovCgkgZnVuY3Rpb24gZGlzYWJsZUVsZXZhdGlvbkRpcmVjdGlvbnMoKXsKCQkgJHRoaXMtPmVsZXZhdGlvbl9kaXJlY3Rpb25zID0gZmFsc2U7CgkgfQogICAgCiAgICAvKioKICAgICAqIGVuYWJsZSBtYXAgbWFya2VyIGNsdXN0ZXJpbmcKICAgICAqLwogICAgZnVuY3Rpb24gZW5hYmxlQ2x1c3RlcmluZygpIHsKICAgICAgICAkdGhpcy0+bWFya2VyX2NsdXN0ZXJlciA9IHRydWU7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogZGlzYWJsZSBtYXAgbWFya2VyIGNsdXN0ZXJpbmcKICAgICAqLwogICAgZnVuY3Rpb24gZGlzYWJsZUNsdXN0ZXJpbmcoKSB7CiAgICAgICAgJHRoaXMtPm1hcmtlcl9jbHVzdGVyZXIgPSBmYWxzZTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBzZXQgY2x1c3RlcmluZyBvcHRpb25zCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldENsdXN0ZXJPcHRpb25zKCR6b29tPSJudWxsIiwgJGdyaWRzaXplPSJudWxsIiwgJHN0eWxlcz0ibnVsbCIpewogICAgCSR0aGlzLT5tYXJrZXJfY2x1c3RlcmVyX29wdGlvbnNbIm1heFpvb20iXT0kem9vbTsKICAgIAkkdGhpcy0+bWFya2VyX2NsdXN0ZXJlcl9vcHRpb25zWyJncmlkU2l6ZSJdPSRncmlkc2l6ZTsKICAgIAkkdGhpcy0+bWFya2VyX2NsdXN0ZXJlcl9vcHRpb25zWyJzdHlsZXMiXT0kc3R5bGVzOwogICAgfSAgIAoKICAgIC8qKgogICAgICogU2V0IGNsdXN0ZXJpbmcgbGlicmFyeSBmaWxlIGxvY2F0aW9uCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldENsdXN0ZXJMb2NhdGlvbigkZmlsZSl7CiAgICAJJHRoaXMtPm1hcmtlcl9jbHVzdGVyZXJfbG9jYXRpb249JGZpbGU7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogc2V0IHRoZSBpbmZvIHdpbmRvdyB0cmlnZ2VyIGFjdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UgY2xpY2svbW91c2VvdmVyCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldEluZm9XaW5kb3dUcmlnZ2VyKCR0eXBlKSB7CiAgICAgICAgc3dpdGNoKCR0eXBlKSB7CiAgICAgICAgICAgIGNhc2UgJ21vdXNlb3Zlcic6CiAgICAgICAgICAgICAgICAkdGhpcy0+d2luZG93X3RyaWdnZXIgPSAnbW91c2VvdmVyJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgJHRoaXMtPndpbmRvd190cmlnZ2VyID0gJ2NsaWNrJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBlbmFibGUgem9vbSB0byBlbmNvbXBhc3MgbWFrZXJzCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVuYWJsZVpvb21FbmNvbXBhc3MoKSB7CiAgICAgICAgJHRoaXMtPnpvb21fZW5jb21wYXNzID0gdHJ1ZTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBkaXNhYmxlIHpvb20gdG8gZW5jb21wYXNzIG1ha2VycwogICAgICovCiAgICBmdW5jdGlvbiBkaXNhYmxlWm9vbUVuY29tcGFzcygpIHsKICAgICAgICAkdGhpcy0+em9vbV9lbmNvbXBhc3MgPSBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIHNldCB0aGUgYm91bmRhcnkgZnVkZ2UgZmFjdG9yCiAgICAgKiBAcGFyYW0gZmxvYXQKICAgICAqLwogICAgZnVuY3Rpb24gc2V0Qm91bmRzRnVkZ2UoJHZhbCkgewogICAgICAgICR0aGlzLT5ib3VuZHNfZnVkZ2UgPSAkdmFsOwogICAgfQogICAgCiAgICAvKioKICAgICAqIGVuYWJsZXMgdGhlIHNjYWxlIG1hcCBjb250cm9sCiAgICAgKgogICAgICovCiAgICBmdW5jdGlvbiBlbmFibGVTY2FsZUNvbnRyb2woKSB7CiAgICAgICAgJHRoaXMtPnNjYWxlX2NvbnRyb2wgPSB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogZGlzYWJsZXMgdGhlIHNjYWxlIG1hcCBjb250cm9sCiAgICAgKgogICAgICovCiAgICBmdW5jdGlvbiBkaXNhYmxlU2NhbGVDb250cm9sKCkgewogICAgICAgICR0aGlzLT5zY2FsZV9jb250cm9sID0gZmFsc2U7CiAgICB9ICAgIAogICAgICAgICAgICAKICAgIC8qKgogICAgICogZW5hYmxlcyB0aGUgb3ZlcnZpZXcgbWFwIGNvbnRyb2wKICAgICAqCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVuYWJsZU92ZXJ2aWV3Q29udHJvbCgpIHsKICAgICAgICAkdGhpcy0+b3ZlcnZpZXdfY29udHJvbCA9IHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBkaXNhYmxlcyB0aGUgb3ZlcnZpZXcgbWFwIGNvbnRyb2wKICAgICAqCiAgICAgKi8KICAgIGZ1bmN0aW9uIGRpc2FibGVPdmVydmlld0NvbnRyb2woKSB7CiAgICAgICAgJHRoaXMtPm92ZXJ2aWV3X2NvbnRyb2wgPSBmYWxzZTsKICAgICB9ICAgIAogICAgCiAgICAKICAgIC8qKgogICAgICogc2V0IHRoZSBsb29rdXAgc2VydmljZSB0byB1c2UgZm9yIGdlb2NvZGUgbG9va3VwcwogICAgICogZGVmYXVsdCBpcyBZQUhPTywgeW91IGNhbiBhbHNvIHVzZSBHT09HTEUuCiAgICAgKiBOT1RFOiBHT09HTEUgY2FuIHRvIGludGwgbG9va3VwcywgYnV0IGlzIG5vdCBhbgogICAgICogb2ZmaWNpYWwgQVBJLCBzbyB1c2UgYXQgeW91ciBvd24gcmlzay4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzZXJ2aWNlCiAgICAgKiBAZGVwcmVjYXRlZAogICAgICovCiAgICBmdW5jdGlvbiBzZXRMb29rdXBTZXJ2aWNlKCRzZXJ2aWNlKSB7CiAgICAgICAgc3dpdGNoKCRzZXJ2aWNlKSB7CiAgICAgICAgICAgIGNhc2UgJ0dPT0dMRSc6CiAgICAgICAgICAgICAgICAkdGhpcy0+bG9va3VwX3NlcnZpY2UgPSAnR09PR0xFJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdZQUhPTyc6CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAkdGhpcy0+bG9va3VwX3NlcnZpY2UgPSAnWUFIT08nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfSAgICAgICAKICAgIH0KICAgIAogICAgICAgIAogICAgLyoqCiAgICAgKiBhZGRzIGEgbWFwIG1hcmtlciBieSBhZGRyZXNzIC0gREVQUkVDQVRJT04gV0FSTklORzogVGFicyBhcmUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBpbiBWMywgaWYgdGhpcyBjaGFuZ2VzIHRoaXMgY2FuIGJlIGVhc2lseSB1cGRhdGVkLgogICAgICogCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhZGRyZXNzIHRoZSBtYXAgYWRkcmVzcyB0byBtYXJrIChzdHJlZXQvY2l0eS9zdGF0ZS96aXApCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0aXRsZSB0aGUgdGl0bGUgZGlzcGxheSBpbiB0aGUgc2lkZWJhcgogICAgICogQHBhcmFtIHN0cmluZyAkaHRtbCB0aGUgSFRNTCBibG9jayB0byBkaXNwbGF5IGluIHRoZSBpbmZvIGJ1YmJsZSAoaWYgZW1wdHksIHRpdGxlIGlzIHVzZWQpCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0b29sdGlwIFRvb2x0aXAgdG8gZGlzcGxheSAoZGVwcmVjYXRlZD8pCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpY29uX2ZpbGVuYW1lIFdlYiBmaWxlIGxvY2F0aW9uIChlZyBodHRwOi8vc29tZXNpdGUvc29tZWljb24uZ2lmKSB0byB1c2UgZm9yIGljb24KICAgICAqIEBwYXJhbSBzdHJpbmcgJGljb25fc2hhZG93X2ZpbGVuYW1lIFdlYiBmaWxlIGxvY2F0aW9uIChlZyBodHRwOi8vc29tZXNpdGUvc29tZWljb24uZ2lmKSB0byB1c2UgZm9yIGljb24gc2hhZG93CiAgICAgKiBAcmV0dXJuIGludHxib29sCiAgICAgKi8KICAgIGZ1bmN0aW9uIGFkZE1hcmtlckJ5QWRkcmVzcygkYWRkcmVzcywkdGl0bGUgPSAnJywkaHRtbCA9ICcnLCR0b29sdGlwID0gJycsICRpY29uX2ZpbGVuYW1lID0gJycsICRpY29uX3NoYWRvd19maWxlbmFtZT0nJykgewogICAgICAgIGlmKCgkX2dlb2NvZGUgPSAkdGhpcy0+Z2V0R2VvY29kZSgkYWRkcmVzcykpID09PSBmYWxzZSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIHJldHVybiAkdGhpcy0+YWRkTWFya2VyQnlDb29yZHMoJF9nZW9jb2RlWydsb24nXSwkX2dlb2NvZGVbJ2xhdCddLCR0aXRsZSwkaHRtbCwkdG9vbHRpcCwgJGljb25fZmlsZW5hbWUsICRpY29uX3NoYWRvd19maWxlbmFtZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBhZGRzIGEgbWFwIG1hcmtlciBieSBsYXQvbG5nIGNvb3JkaW5hdGVzIC0gREVQUkVDQVRJT04gV0FSTklORzogVGFicyBhcmUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBpbiBWMywgaWYgdGhpcyBjaGFuZ2VzIHRoaXMgY2FuIGJlIGVhc2lseSB1cGRhdGVkLgogICAgICogCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsb24gdGhlIG1hcCBsb25naXR1ZGUgKGhvcml6b250YWwpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsYXQgdGhlIG1hcCBsYXRpdHVkZSAodmVydGljYWwpCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0aXRsZSB0aGUgdGl0bGUgZGlzcGxheSBpbiB0aGUgc2lkZWJhcgogICAgICogQHBhcmFtIHN0cmluZyAkaHRtbCB0aGUgSFRNTCBibG9jayB0byBkaXNwbGF5IGluIHRoZSBpbmZvIGJ1YmJsZSAoaWYgZW1wdHksIHRpdGxlIGlzIHVzZWQpCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0b29sdGlwIFRvb2x0aXAgdG8gZGlzcGxheSAoZGVwcmVjYXRlZD8pCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpY29uX2ZpbGVuYW1lIFdlYiBmaWxlIGxvY2F0aW9uIChlZyBodHRwOi8vc29tZXNpdGUvc29tZWljb24uZ2lmKSB0byB1c2UgZm9yIGljb24KICAgICAqIEBwYXJhbSBzdHJpbmcgJGljb25fc2hhZG93X2ZpbGVuYW1lIFdlYiBmaWxlIGxvY2F0aW9uIChlZyBodHRwOi8vc29tZXNpdGUvc29tZWljb24uZ2lmKSB0byB1c2UgZm9yIGljb24gc2hhZG93CiAgICAgKiBAcmV0dXJuIGludHxib29sICAgIAogICAgICovCiAgICBmdW5jdGlvbiBhZGRNYXJrZXJCeUNvb3JkcygkbG9uLCRsYXQsJHRpdGxlID0gJycsJGh0bWwgPSAnJywkdG9vbHRpcCA9ICcnLCAkaWNvbl9maWxlbmFtZSA9ICcnLCAkaWNvbl9zaGFkb3dfZmlsZW5hbWU9JycpIHsKICAgICAgICAkX21hcmtlclsnbG9uJ10gPSAkbG9uOwogICAgICAgICRfbWFya2VyWydsYXQnXSA9ICRsYXQ7CiAgICAgICAgJF9tYXJrZXJbJ2h0bWwnXSA9IChpc19hcnJheSgkaHRtbCkgfHwgc3RybGVuKCRodG1sKSA+IDApID8gJGh0bWwgOiAkdGl0bGU7CiAgICAgICAgJF9tYXJrZXJbJ3RpdGxlJ10gPSAkdGl0bGU7CiAgICAgICAgJF9tYXJrZXJbJ3Rvb2x0aXAnXSA9ICR0b29sdGlwOwogICAgICAgIAogICAgICAgIGlmKCRpY29uX2ZpbGVuYW1lIT0iIil7CiAgICAgICAgICAgICRfbWFya2VyWydpY29uX2tleSddID0gJHRoaXMtPnNldE1hcmtlckljb25LZXkoJGljb25fZmlsZW5hbWUsICRpY29uX3NoYWRvd19maWxlbmFtZSk7CiAgICAgICAgICAgIGlmKCRpY29uX3NoYWRvd19maWxlbmFtZSE9IiIpewogICAgICAgICAgICAgICAkX21hcmtlclsnc2hhZG93X2ljb24nXT0xOwogICAgICAgICAgICB9ICAgCiAgICAgICAgfWVsc2UgaWYoICR0aGlzLT5kZWZhdWx0X2ljb24gIT0gJycpewogICAgICAgIAkkX21hcmtlclsnaWNvbl9rZXknXSA9ICR0aGlzLT5zZXRNYXJrZXJJY29uS2V5KCR0aGlzLT5kZWZhdWx0X2ljb24sICR0aGlzLT5kZWZhdWx0X2ljb25fc2hhZG93KTsKICAgICAgICAJaWYoJHRoaXMtPmRlZmF1bHRfaWNvbl9zaGFkb3chPSIiKXsKICAgICAgICAJICAgJF9tYXJrZXJbJ3NoYWRvd19pY29uJ109MTsKICAgICAgICAJfQogICAgICAgIH0gICAgICAgIAogICAgICAgICR0aGlzLT5fbWFya2Vyc1tdID0gJF9tYXJrZXI7CiAgICAgICAgJHRoaXMtPmFkanVzdENlbnRlckNvb3JkcygkX21hcmtlclsnbG9uJ10sJF9tYXJrZXJbJ2xhdCddKTsKICAgICAgICAvLyByZXR1cm4gaW5kZXggb2YgbWFya2VyCiAgICAgICAgcmV0dXJuIGNvdW50KCR0aGlzLT5fbWFya2VycykgLSAxOwogICAgfQogICAgCiAgICAvKioKICAgICAqIGFkZHMgYSBET00gb2JqZWN0IElEIHRvIHNwZWNpZmllZCBtYXJrZXIgdG8gb3BlbiB0aGUgbWFya2VyJ3MgaW5mbyB3aW5kb3cuCiAgICAgKiAgIERvZXMgbm90aGluZyBpZiB0aGUgaW5mbyB3aW5kb3dzIGlzIGRpc2FibGVkLgogICAgICogQHBhcmFtIHN0cmluZyAkbWFya2VyX2lkIElEIG9mIHRoZSBtYXJrZXIgdG8gYXNzb2NpYXRlIHRvCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkb21faWQgSUQgb2YgdGhlIERPTSBvYmplY3QgdG8gdXNlIHRvIG9wZW4gbWFya2VyIGluZm8gd2luZG93CiAgICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZS9mYWxzZSBzdGF0dXMKICAgICAqLwogICAgZnVuY3Rpb24gYWRkTWFya2VyT3BlbmVyKCRtYXJrZXJfaWQsICRkb21faWQpewogICAgCWlmKCR0aGlzLT5pbmZvX3dpbmRvdyA9PT0gZmFsc2UgfHwgIWlzc2V0KCR0aGlzLT5fbWFya2Vyc1skbWFya2VyX2lkXSkpCiAgICAJICAgcmV0dXJuIGZhbHNlOwogICAgCWlmKCFpc3NldCgkdGhpcy0+X21hcmtlcnNbJG1hcmtlcl9pZF1bIm9wZW5lcnMiXSkpCiAgICAJICAgJHRoaXMtPl9tYXJrZXJzWyRtYXJrZXJfaWRdWyJvcGVuZXJzIl0gPSBhcnJheSgpOwogICAgICAgICR0aGlzLT5fbWFya2Vyc1skbWFya2VyX2lkXVsib3BlbmVycyJdW10gPSAkZG9tX2lkOyAgICAJICAgCiAgICB9CiAgICAKICAgIC8qKgogICAgICogYWRkcyBwb2x5bGluZSBieSBwYXNzZWQgYXJyYXkKICAgICAqIGlmIGNvbG9yLCB3ZWlnaHQgYW5kIG9wYWNpdHkgYXJlIG5vdCBkZWZpbmVkLCB1c2UgdGhlIGdvb2dsZSBtYXBzIGRlZmF1bHRzCiAgICAgKiBAcGFyYW0gYXJyYXkgJHBvbHlsaW5lX2FycmF5IGFycmF5IG9mIGxhdC9sb25nIGNvb3JkcwogICAgICogQHBhcmFtIHN0cmluZyAkaWQgQW4gYXJyYXkgaWQgdG8gdXNlIHRvIGFwcGVuZCBjb29yZGluYXRlcyB0byBhIGxpbmUKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvbG9yIHRoZSBjb2xvciBvZiB0aGUgbGluZSAoZm9ybWF0OiAjMDAwMDAwKQogICAgICogQHBhcmFtIHN0cmluZyAkd2VpZ2h0IHRoZSB3ZWlnaHQgb2YgdGhlIGxpbmUgaW4gcGl4ZWxzCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvcGFjaXR5IHRoZSBsaW5lIG9wYWNpdHkgKHBlcmNlbnRhZ2UpCiAgICAgKiBAcmV0dXJuIGJvb2x8aW50IEFycmF5IGlkIG9mIG5ld2x5IGFkZGVkIHBvaW50IG9yIGZhbHNlCiAgICAgKi8KICAgIGZ1bmN0aW9uIGFkZFBvbHlsaW5lQnlDb29yZHNBcnJheSgkcG9seWxpbmVfYXJyYXksJGlkPWZhbHNlLCRjb2xvcj0nJywkd2VpZ2h0PTAsJG9wYWNpdHk9MCl7CiAgICAJaWYoIWlzX2FycmF5KCRwb2x5bGluZV9hcnJheSkgfHwgc2l6ZW9mKCRwb2x5bGluZV9hcnJheSkgPCAyKQogICAgCSAgIHJldHVybiBmYWxzZTsKICAgIAkkX3ByZXZfY29vcmRzID0gIiI7CiAgICAJJF9uZXh0X2Nvb3JkcyA9ICIiOwogICAgCQogICAgCWZvcmVhY2goJHBvbHlsaW5lX2FycmF5IGFzICRfY29vcmRzKXsKICAgIAkJJF9wcmV2X2Nvb3JkcyA9ICRfbmV4dF9jb29yZHM7CiAgICAJCSRfbmV4dF9jb29yZHMgPSAkX2Nvb3JkczsKICAgIAkJCiAgICAJCWlmKCRfcHJldl9jb29yZHMgIT09ICIiKXsKICAgIAkJICAkX2x0MT0kX3ByZXZfY29vcmRzWyJsYXQiXTsKICAgIAkJICAkX2xuMT0kX3ByZXZfY29vcmRzWyJsb25nIl07CiAgICAJCSAgJF9sdDI9JF9uZXh0X2Nvb3Jkc1sibGF0Il07CiAgICAgICAgICAgICAgJF9sbjI9JF9uZXh0X2Nvb3Jkc1sibG9uZyJdOwogICAgCQkgICRpZCA9ICR0aGlzLT5hZGRQb2x5TGluZUJ5Q29vcmRzKCRfbG4xLCAkX2x0MSwgJF9sbjIsICRfbHQyLCAkaWQsICRjb2xvciwgJHdlaWdodCwgJG9wYWNpdHkpOwogICAgCQl9CiAgICAJfQogICAgICAgIHJldHVybiAkaWQ7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogYWRkcyBwb2x5bGluZSBieSBwYXNzZWQgYXJyYXkKICAgICAqIGlmIGNvbG9yLCB3ZWlnaHQgYW5kIG9wYWNpdHkgYXJlIG5vdCBkZWZpbmVkLCB1c2UgdGhlIGdvb2dsZSBtYXBzIGRlZmF1bHRzCiAgICAgKiBAcGFyYW0gYXJyYXkgJHBvbHlsaW5lX2FycmF5IGFycmF5IG9mIGFkZHJlc3NlcwogICAgICogQHBhcmFtIHN0cmluZyAkaWQgQW4gYXJyYXkgaWQgdG8gdXNlIHRvIGFwcGVuZCBjb29yZGluYXRlcyB0byBhIGxpbmUKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvbG9yIHRoZSBjb2xvciBvZiB0aGUgbGluZSAoZm9ybWF0OiAjMDAwMDAwKQogICAgICogQHBhcmFtIHN0cmluZyAkd2VpZ2h0IHRoZSB3ZWlnaHQgb2YgdGhlIGxpbmUgaW4gcGl4ZWxzCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvcGFjaXR5IHRoZSBsaW5lIG9wYWNpdHkgKHBlcmNlbnRhZ2UpCiAgICAgKiBAcmV0dXJuIGJvb2x8aW50IEFycmF5IGlkIG9mIG5ld2x5IGFkZGVkIHBvaW50IG9yIGZhbHNlCiAgICAgKi8KICAgIGZ1bmN0aW9uIGFkZFBvbHlsaW5lQnlBZGRyZXNzQXJyYXkoJHBvbHlsaW5lX2FycmF5LCRpZD1mYWxzZSwkY29sb3I9JycsJHdlaWdodD0wLCRvcGFjaXR5PTApewogICAgICAgIGlmKCFpc19hcnJheSgkcG9seWxpbmVfYXJyYXkpIHx8IHNpemVvZigkcG9seWxpbmVfYXJyYXkpIDwgMikKICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgJF9wcmV2X2FkZHJlc3MgPSAiIjsKICAgICAgICAkX25leHRfYWRkcmVzcyA9ICIiOwogICAgICAgIAogICAgICAgIGZvcmVhY2goJHBvbHlsaW5lX2FycmF5IGFzICRfYWRkcmVzcyl7CiAgICAgICAgICAgICRfcHJldl9hZGRyZXNzID0gJF9uZXh0X2FkZHJlc3M7CiAgICAgICAgICAgICRfbmV4dF9hZGRyZXNzID0gJF9hZGRyZXNzOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYoJF9wcmV2X2FkZHJlc3MgIT09ICIiKXsKICAgICAgICAgICAgICAkaWQgPSAkdGhpcy0+YWRkUG9seUxpbmVCeUFkZHJlc3MoJF9wcmV2X2FkZHJlc3MsICRfbmV4dF9hZGRyZXNzLCAkaWQsICRjb2xvciwgJHdlaWdodCwgJG9wYWNpdHkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkaWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBhZGRzIGEgbWFwIHBvbHlsaW5lIGJ5IGFkZHJlc3MKICAgICAqIGlmIGNvbG9yLCB3ZWlnaHQgYW5kIG9wYWNpdHkgYXJlIG5vdCBkZWZpbmVkLCB1c2UgdGhlIGdvb2dsZSBtYXBzIGRlZmF1bHRzCiAgICAgKiAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFkZHJlc3MxIHRoZSBtYXAgYWRkcmVzcyB0byBkcmF3IGZyb20KICAgICAqIEBwYXJhbSBzdHJpbmcgJGFkZHJlc3MyIHRoZSBtYXAgYWRkcmVzcyB0byBkcmF3IHRvCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZCBBbiBhcnJheSBpZCB0byB1c2UgdG8gYXBwZW5kIGNvb3JkaW5hdGVzIHRvIGEgbGluZQogICAgICogQHBhcmFtIHN0cmluZyAkY29sb3IgdGhlIGNvbG9yIG9mIHRoZSBsaW5lIChmb3JtYXQ6ICMwMDAwMDApCiAgICAgKiBAcGFyYW0gc3RyaW5nICR3ZWlnaHQgdGhlIHdlaWdodCBvZiB0aGUgbGluZSBpbiBwaXhlbHMKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9wYWNpdHkgdGhlIGxpbmUgb3BhY2l0eSAocGVyY2VudGFnZSkKICAgICAqIEByZXR1cm4gYm9vbHxpbnQgQXJyYXkgaWQgb2YgbmV3bHkgYWRkZWQgcG9pbnQgb3IgZmFsc2UKICAgICAqLwogICAgZnVuY3Rpb24gYWRkUG9seUxpbmVCeUFkZHJlc3MoJGFkZHJlc3MxLCRhZGRyZXNzMiwkaWQ9ZmFsc2UsJGNvbG9yPScnLCR3ZWlnaHQ9MCwkb3BhY2l0eT0wKSB7CiAgICAgICAgaWYoKCRfZ2VvY29kZTEgPSAkdGhpcy0+Z2V0R2VvY29kZSgkYWRkcmVzczEpKSA9PT0gZmFsc2UpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBpZigoJF9nZW9jb2RlMiA9ICR0aGlzLT5nZXRHZW9jb2RlKCRhZGRyZXNzMikpID09PSBmYWxzZSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIHJldHVybiAkdGhpcy0+YWRkUG9seUxpbmVCeUNvb3JkcygkX2dlb2NvZGUxWydsb24nXSwkX2dlb2NvZGUxWydsYXQnXSwkX2dlb2NvZGUyWydsb24nXSwkX2dlb2NvZGUyWydsYXQnXSwkaWQsJGNvbG9yLCR3ZWlnaHQsJG9wYWNpdHkpOwogICAgfQoKICAgIC8qKgogICAgICogYWRkcyBhIG1hcCBwb2x5bGluZSBieSBtYXAgY29vcmRpbmF0ZXMKICAgICAqIGlmIGNvbG9yLCB3ZWlnaHQgYW5kIG9wYWNpdHkgYXJlIG5vdCBkZWZpbmVkLCB1c2UgdGhlIGdvb2dsZSBtYXBzIGRlZmF1bHRzCiAgICAgKiAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxvbjEgdGhlIG1hcCBsb25naXR1ZGUgdG8gZHJhdyBmcm9tCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsYXQxIHRoZSBtYXAgbGF0aXR1ZGUgdG8gZHJhdyBmcm9tCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsb24yIHRoZSBtYXAgbG9uZ2l0dWRlIHRvIGRyYXcgdG8KICAgICAqIEBwYXJhbSBzdHJpbmcgJGxhdDIgdGhlIG1hcCBsYXRpdHVkZSB0byBkcmF3IHRvCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZCBBbiBhcnJheSBpZCB0byB1c2UgdG8gYXBwZW5kIGNvb3JkaW5hdGVzIHRvIGEgbGluZQogICAgICogQHBhcmFtIHN0cmluZyAkY29sb3IgdGhlIGNvbG9yIG9mIHRoZSBsaW5lIChmb3JtYXQ6ICMwMDAwMDApCiAgICAgKiBAcGFyYW0gc3RyaW5nICR3ZWlnaHQgdGhlIHdlaWdodCBvZiB0aGUgbGluZSBpbiBwaXhlbHMKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9wYWNpdHkgdGhlIGxpbmUgb3BhY2l0eSAocGVyY2VudGFnZSkKCSAqIEByZXR1cm4gc3RyaW5nICRpZCBpZCBvZiB0aGUgY3JlYXRlZC91cGRhdGVkIHBvbHlsaW5lIGFycmF5CiAgICAgKi8KICAgIGZ1bmN0aW9uIGFkZFBvbHlMaW5lQnlDb29yZHMoJGxvbjEsJGxhdDEsJGxvbjIsJGxhdDIsJGlkPWZhbHNlLCRjb2xvcj0nJywkd2VpZ2h0PTAsJG9wYWNpdHk9MCkgewoJCWlmKCRpZCAhPT0gZmFsc2UgJiYgaXNzZXQoJHRoaXMtPl9wb2x5bGluZXNbJGlkXSkgJiYgaXNfYXJyYXkoJHRoaXMtPl9wb2x5bGluZXNbJGlkXSkpewoJCQkkX3BvbHlsaW5lID0gJHRoaXMtPl9wb2x5bGluZXNbJGlkXTsKCQl9ZWxzZXsKCQkJLy9vbmx5IHNldCBjb2xvcix3ZWlnaHQsYW5kIG9wYWNpdHkgaWYgbmV3IHBvbHlsaW5lCgkJCSRfcG9seWxpbmUgPSBhcnJheSgKCQkJCSJjb2xvciI9PiRjb2xvciwKCQkJCSJ3ZWlnaHQiPT4kd2VpZ2h0LAoJCQkJIm9wYWNpdHkiPT4kb3BhY2l0eQoJCQkpOwoJCX0KCQlpZighaXNzZXQoJF9wb2x5bGluZVsnY29vcmRzJ10pIHx8ICFpc19hcnJheSgkX3BvbHlsaW5lWydjb29yZHMnXSkpewoJCQkkX3BvbHlsaW5lWydjb29yZHMnXSA9IGFycmF5KAoJCQkJIjAiPT4gYXJyYXkoImxhdCI9PiRsYXQxLCAibG9uZyI9PiRsb24xKSwKCQkJCSIxIj0+IGFycmF5KCJsYXQiPT4kbGF0MiwgImxvbmciPT4kbG9uMikKCQkJKTsKCQl9ZWxzZXsKCQkJJGxhc3RfaW5kZXggPSBzaXplb2YoJF9wb2x5bGluZVsnY29vcmRzJ10pLTE7CgkJCS8vY2hlY2sgaWYgbGF0MS9sb24xIHBvaW50IGlzIGFscmVhZHkgb24gcG9seWxpbmUKCQkJaWYoJF9wb2x5bGluZVsnY29vcmRzJ11bJGxhc3RfaW5kZXhdWyJsYXQiXSAhPSAkbGF0MSB8fCAkX3BvbHlsaW5lWydjb29yZHMnXVskbGFzdF9pbmRleF1bImxvbmciXSAgIT0gJGxvbjEpewoJCQkJJF9wb2x5bGluZVsnY29vcmRzJ11bXSA9IGFycmF5KCJsYXQiPT4kbGF0MSwgImxvbmciPT4kbG9uMSk7CgkJCX0KCQkJJF9wb2x5bGluZVsnY29vcmRzJ11bXSA9IGFycmF5KCJsYXQiPT4kbGF0MiwgImxvbmciPT4kbG9uMik7CgkJfQogICAgICAgIGlmKCRpZCA9PT0gZmFsc2UpewogICAgICAgICAgICAkdGhpcy0+X3BvbHlsaW5lc1tdID0gJF9wb2x5bGluZTsKICAgICAgICAgICAgJGlkID0gY291bnQoJHRoaXMtPl9wb2x5bGluZXMpIC0gMTsKICAgICAgICB9ZWxzZXsKCQkJJHRoaXMtPl9wb2x5bGluZXNbJGlkXSA9ICRfcG9seWxpbmU7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5hZGp1c3RDZW50ZXJDb29yZHMoJGxvbjEsJGxhdDEpOwogICAgICAgICR0aGlzLT5hZGp1c3RDZW50ZXJDb29yZHMoJGxvbjIsJGxhdDIpOwogICAgICAgIC8vIHJldHVybiBpbmRleCBvZiBwb2x5bGluZQogICAgICAgIHJldHVybiAkaWQ7CiAgICB9CgkKCS8qKgoJICogZnVuY3Rpb24gdG8gYWRkIGFuIGVsZXZhdGlvbiBwcm9maWxlIGZvciBhIHBvbHlsaW5lIHRvIHRoZSBwYWdlCgkgKi8KCSBmdW5jdGlvbiBhZGRQb2x5bGluZUVsZXZhdGlvbigkcG9seWxpbmVfaWQsICRlbGV2YXRpb25fZG9tX2lkLCAkc2FtcGxlcz0yNTYsICR3aWR0aD0iIiwgJGhlaWdodD0iIiwgJGZvY3VzX2NvbG9yPSIjMDBmZjAwIil7CgkJaWYoaXNzZXQoJHRoaXMtPl9wb2x5bGluZXNbJHBvbHlsaW5lX2lkXSkpewoJCQkkdGhpcy0+X2VsZXZhdGlvbl9wb2x5bGluZXNbJHBvbHlsaW5lX2lkXSA9IGFycmF5KAoJCQkJImRvbV9pZCI9PiRlbGV2YXRpb25fZG9tX2lkLAoJCQkJInNhbXBsZXMiPT4kc2FtcGxlcywKCQkJCSJ3aWR0aCI9Pigkd2lkdGghPSIiPyR3aWR0aDpzdHJfcmVwbGFjZSgicHgiLCIiLCR0aGlzLT53aWR0aCkpLAoJCQkJImhlaWdodCI9PigkaGVpZ2h0IT0iIj8kaGVpZ2h0OnN0cl9yZXBsYWNlKCJweCIsIiIsJHRoaXMtPmhlaWdodCkvMiksCgkJCQkiZm9jdXNfY29sb3IiPT4kZm9jdXNfY29sb3IKCQkJKTsKCQl9CgkgfQoJCgkvKioKCSAqIGZ1bmN0aW9uIHRvIGFkZCBhbiBvdmVybGF5IHRvIHRoZSBtYXAuCgkgKi8KCSBmdW5jdGlvbiBhZGRPdmVybGF5KCRiZHNfbGF0MSwgJGJkc19sb24xLCAkYmRzX2xhdDIsICRiZHNfbG9uMiwgJGltZ19zcmMsICRvcGFjaXR5ID0gMTAwKXsKCQkgJF9vdmVybGF5ID0gYXJyYXkoCgkJCSJib3VuZHMiID0+IGFycmF5KAoJCQkJIm5lIj0+YXJyYXkoCgkJCQkJImxhdCI9PiRiZHNfbGF0MSwKCQkJCQkibG9uZyI9PiRiZHNfbG9uMQoJCQkJKSwKCQkJCSJzdyI9PmFycmF5KAoJCQkJCSJsYXQiPT4kYmRzX2xhdDIsCgkJCQkJImxvbmciPT4kYmRzX2xvbjIKCQkJCSkKCQkJKSwKCQkJImltZyIgPT4gJGltZ19zcmMsCgkJCSJvcGFjaXR5IiA9PiAkb3BhY2l0eS8xMAoJCSApOwoJCSAkdGhpcy0+YWRqdXN0Q2VudGVyQ29vcmRzKCRiZHNfbG9uMSwkYmRzX2xhdDEpOwogICAgICAgICAkdGhpcy0+YWRqdXN0Q2VudGVyQ29vcmRzKCRiZHNfbG9uMiwkYmRzX2xhdDIpOwoJCSAkdGhpcy0+X292ZXJsYXlzW10gPSAkX292ZXJsYXk7CgkJIHJldHVybiBjb3VudCgkdGhpcy0+X292ZXJsYXlzKS0xOwoJIH0KCSAKCSAvKioKCSAgKiBmdW5jdGlvbiB0byBhZGQgYSBLTUwgb3ZlcmxheSB0byB0aGUgbWFwLgoJICAqICAqTm90ZSB0aGF0IHRoaXMgZXhwZWN0cyBhIGZpbGVuYW1lIGFuZCBmaWxlIHBhcnNpbmcvcHJvY2Vzc2luZyBpcyBkb25lCgkgICogIG9uIHRoZSBjbGllbnQgc2lkZQoJICAqLwoJIGZ1bmN0aW9uIGFkZEtNTE92ZXJsYXkoJGZpbGUpewoJICAgJHRoaXMtPl9rbWxfb3ZlcmxheXNbXSA9ICRmaWxlOwoJICAgcmV0dXJuIGNvdW50KCR0aGlzLT5fa21sX292ZXJsYXlzKS0xOwoJIH0KICAgICAgICAKICAgIC8qKgogICAgICogYWRqdXN0IG1hcCBjZW50ZXIgY29vcmRpbmF0ZXMgYnkgdGhlIGdpdmVuIGxhdC9sb24gcG9pbnQKICAgICAqIAogICAgICogQHBhcmFtIHN0cmluZyAkbG9uIHRoZSBtYXAgbGF0aXR1ZGUgKGhvcml6b250YWwpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsYXQgdGhlIG1hcCBsYXRpdHVkZSAodmVydGljYWwpCiAgICAgKi8KICAgIGZ1bmN0aW9uIGFkanVzdENlbnRlckNvb3JkcygkbG9uLCRsYXQpIHsKICAgICAgICBpZihzdHJsZW4oKHN0cmluZykkbG9uKSA9PSAwIHx8IHN0cmxlbigoc3RyaW5nKSRsYXQpID09IDApCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCQkkdGhpcy0+X21heF9sb24gPSAoZmxvYXQpIG1heCgkbG9uLCAkdGhpcy0+X21heF9sb24pOwogICAgICAgICR0aGlzLT5fbWluX2xvbiA9IChmbG9hdCkgbWluKCRsb24sICR0aGlzLT5fbWluX2xvbik7CiAgICAgICAgJHRoaXMtPl9tYXhfbGF0ID0gKGZsb2F0KSBtYXgoJGxhdCwgJHRoaXMtPl9tYXhfbGF0KTsKICAgICAgICAkdGhpcy0+X21pbl9sYXQgPSAoZmxvYXQpIG1pbigkbGF0LCAkdGhpcy0+X21pbl9sYXQpOwoJCSR0aGlzLT5jZW50ZXJfbG9uID0gKGZsb2F0KSAoJHRoaXMtPl9taW5fbG9uICsgJHRoaXMtPl9tYXhfbG9uKSAvIDI7CiAgICAgICAgJHRoaXMtPmNlbnRlcl9sYXQgPSAoZmxvYXQpICgkdGhpcy0+X21pbl9sYXQgKyAkdGhpcy0+X21heF9sYXQpIC8gMjsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIHNldCBtYXAgY2VudGVyIGNvb3JkaW5hdGVzIHRvIGxhdC9sb24gcG9pbnQKICAgICAqIAogICAgICogQHBhcmFtIHN0cmluZyAkbG9uIHRoZSBtYXAgbGF0aXR1ZGUgKGhvcml6b250YWwpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsYXQgdGhlIG1hcCBsYXRpdHVkZSAodmVydGljYWwpCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldENlbnRlckNvb3JkcygkbG9uLCRsYXQpIHsKICAgICAgICAkdGhpcy0+Y2VudGVyX2xhdCA9IChmbG9hdCkgJGxhdDsKICAgICAgICAkdGhpcy0+Y2VudGVyX2xvbiA9IChmbG9hdCkgJGxvbjsKICAgIH0gICAgCgogICAgLyoqCiAgICAgKiBnZW5lcmF0ZSBhbiBhcnJheSBvZiBwYXJhbXMgZm9yIGEgbmV3IG1hcmtlciBpY29uIGltYWdlCiAgICAgKiBpY29uU2hhZG93SW1hZ2UgaXMgb3B0aW9uYWwKICAgICAqIElmIGFuY2hvciBjb29yZHMgYXJlIG5vdCBzdXBwbGllZCwgd2UgdXNlIHRoZSBjZW50ZXIgcG9pbnQgb2YgdGhlIGltYWdlIGJ5IGRlZmF1bHQuIAogICAgICogQ2FuIGJlIGNhbGxlZCBzdGF0aWNhbGx5LiBGb3IgcHJpdmF0ZSB1c2UgYnkgYWRkTWFya2VySWNvbigpIGFuZCBzZXRNYXJrZXJJY29uKCkgYW5kIGFkZEljb24oKQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGljb25JbWFnZSBVUkwgdG8gaWNvbiBpbWFnZQogICAgICogQHBhcmFtIHN0cmluZyAkaWNvblNoYWRvd0ltYWdlIFVSTCB0byBzaGFkb3cgaW1hZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGljb25BbmNob3JYIFggY29vcmRpbmF0ZSBmb3IgaWNvbiBhbmNob3IgcG9pbnQKICAgICAqIEBwYXJhbSBzdHJpbmcgJGljb25BbmNob3JZIFkgY29vcmRpbmF0ZSBmb3IgaWNvbiBhbmNob3IgcG9pbnQKICAgICAqIEBwYXJhbSBzdHJpbmcgJGluZm9XaW5kb3dBbmNob3JYIFggY29vcmRpbmF0ZSBmb3IgaW5mbyB3aW5kb3cgYW5jaG9yIHBvaW50CiAgICAgKiBAcGFyYW0gc3RyaW5nICRpbmZvV2luZG93QW5jaG9yWSBZIGNvb3JkaW5hdGUgZm9yIGluZm8gd2luZG93IGFuY2hvciBwb2ludAogICAgICogQHJldHVybiBhcnJheSBBcnJheSB3aXRoIGluZm9ybWF0aW9uIGFib3V0IG5ld2x5IC9wcmV2aW91c2x5IGNyZWF0ZWQgaWNvbi4KICAgICAqLwogICAgZnVuY3Rpb24gY3JlYXRlTWFya2VySWNvbigkaWNvbkltYWdlLCRpY29uU2hhZG93SW1hZ2UgPSAnJywkaWNvbkFuY2hvclggPSAneCcsJGljb25BbmNob3JZID0gJ3gnLCRpbmZvV2luZG93QW5jaG9yWCA9ICd4JywkaW5mb1dpbmRvd0FuY2hvclkgPSAneCcpIHsKICAgICAgICAvLyRfaWNvbl9pbWFnZV9wYXRoID0gc3RycG9zKCRpY29uSW1hZ2UsJ2h0dHAnKSA9PT0gMCA/ICRpY29uSW1hZ2UgOiAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gJGljb25JbWFnZTsKICAgICAgICAkX2ljb25faW1hZ2VfcGF0aCA9ICRpY29uSW1hZ2U7CiAgICAgICAgaWYoISgkX2ltYWdlX2luZm8gPSBnZXRpbWFnZXNpemUoJF9pY29uX2ltYWdlX3BhdGgpKSkgewogICAgICAgICAgICBkaWUoJ0dvb2dsZU1hcEFQSTpjcmVhdGVNYXJrZXJJY29uOiBFcnJvciByZWFkaW5nIGltYWdlOiAnIC4gJGljb25JbWFnZSk7ICAgCiAgICAgICAgfQogICAgICAgIGlmKCRpY29uU2hhZG93SW1hZ2UpIHsKICAgICAgICAgICAgLy8kX3NoYWRvd19pbWFnZV9wYXRoID0gc3RycG9zKCRpY29uU2hhZG93SW1hZ2UsJ2h0dHAnKSA9PT0gMCA/ICRpY29uU2hhZG93SW1hZ2UgOiAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gJGljb25TaGFkb3dJbWFnZTsKICAgICAgICAgICAgJF9zaGFkb3dfaW1hZ2VfcGF0aCA9ICRpY29uU2hhZG93SW1hZ2U7CiAgICAgICAgICAgIGlmKCEoJF9zaGFkb3dfaW5mbyA9IEBnZXRpbWFnZXNpemUoJF9zaGFkb3dfaW1hZ2VfcGF0aCkpKSB7CiAgICAgICAgICAgICAgICBkaWUoJ0dvb2dsZU1hcEFQSTpjcmVhdGVNYXJrZXJJY29uOiBFcnJvciByZWFkaW5nIHNoYWRvdyBpbWFnZTogJyAuICRpY29uU2hhZG93SW1hZ2UpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmKCRpY29uQW5jaG9yWCA9PT0gJ3gnKSB7CiAgICAgICAgICAgICRpY29uQW5jaG9yWCA9IChpbnQpICgkX2ltYWdlX2luZm9bMF0gLyAyKTsKICAgICAgICB9CiAgICAgICAgaWYoJGljb25BbmNob3JZID09PSAneCcpIHsKICAgICAgICAgICAgJGljb25BbmNob3JZID0gKGludCkgKCRfaW1hZ2VfaW5mb1sxXSAvIDIpOwogICAgICAgIH0KICAgICAgICBpZigkaW5mb1dpbmRvd0FuY2hvclggPT09ICd4JykgewogICAgICAgICAgICAkaW5mb1dpbmRvd0FuY2hvclggPSAoaW50KSAoJF9pbWFnZV9pbmZvWzBdIC8gMik7CiAgICAgICAgfQogICAgICAgIGlmKCRpbmZvV2luZG93QW5jaG9yWSA9PT0gJ3gnKSB7CiAgICAgICAgICAgICRpbmZvV2luZG93QW5jaG9yWSA9IChpbnQpICgkX2ltYWdlX2luZm9bMV0gLyAyKTsKICAgICAgICB9CiAgICAgICAgJGdDbXMgPSBjbXNtcygpOwogICAgICAgICRjb25maWcgPSAkZ0Ntcy0+R2V0Q29uZmlnKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICRpY29uX2luZm8gPSBhcnJheSgKICAgICAgICAgICAgICAgICdpbWFnZScgPT4gJGNvbmZpZ1sncm9vdF91cmwnXS5ESVJFQ1RPUllfU0VQQVJBVE9SLiRpY29uSW1hZ2UsCiAgICAgICAgICAgICAgICAnaWNvbldpZHRoJyA9PiAkX2ltYWdlX2luZm9bMF0sCiAgICAgICAgICAgICAgICAnaWNvbkhlaWdodCcgPT4gJF9pbWFnZV9pbmZvWzFdLAogICAgICAgICAgICAgICAgJ2ljb25BbmNob3JYJyA9PiAkaWNvbkFuY2hvclgsCiAgICAgICAgICAgICAgICAnaWNvbkFuY2hvclknID0+ICRpY29uQW5jaG9yWSwKICAgICAgICAgICAgICAgICdpbmZvV2luZG93QW5jaG9yWCcgPT4gJGluZm9XaW5kb3dBbmNob3JYLAogICAgICAgICAgICAgICAgJ2luZm9XaW5kb3dBbmNob3JZJyA9PiAkaW5mb1dpbmRvd0FuY2hvclkKICAgICAgICAgICAgICAgICk7CiAgICAgICAgaWYoJGljb25TaGFkb3dJbWFnZSkgewogICAgICAgICAgICAkaWNvbl9pbmZvID0gYXJyYXlfbWVyZ2UoJGljb25faW5mbywgCiAgICAgICAgICAgIAlhcnJheSgnc2hhZG93JyA9PiAkY29uZmlnWydyb290X3VybCddLkRJUkVDVE9SWV9TRVBBUkFUT1IuJGljb25TaGFkb3dJbWFnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaGFkb3dXaWR0aCcgPT4gJF9zaGFkb3dfaW5mb1swXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaGFkb3dIZWlnaHQnID0+ICRfc2hhZG93X2luZm9bMV0pKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRpY29uX2luZm87CiAgICB9CiAgICAKICAgIC8qKgogICAgICogc2V0IHRoZSBkZWZhdWx0IG1hcmtlciBpY29uIGZvciBBTEwgbWFya2VycyBvbiB0aGUgbWFwCiAgICAgKiBOT1RFOiBUaGlzIE1VU1QgYmUgc2V0IHByaW9yIHRvIGFkZGluZyBtYXJrZXJzIGluIG9yZGVyIGZvciB0aGUgZGVmYXVsdHMKICAgICAqIHRvIGJlIHNldCBjb3JyZWN0bHkuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpY29uSW1hZ2UgVVJMIHRvIGljb24gaW1hZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGljb25TaGFkb3dJbWFnZSBVUkwgdG8gc2hhZG93IGltYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpY29uQW5jaG9yWCBYIGNvb3JkaW5hdGUgZm9yIGljb24gYW5jaG9yIHBvaW50CiAgICAgKiBAcGFyYW0gc3RyaW5nICRpY29uQW5jaG9yWSBZIGNvb3JkaW5hdGUgZm9yIGljb24gYW5jaG9yIHBvaW50CiAgICAgKiBAcGFyYW0gc3RyaW5nICRpbmZvV2luZG93QW5jaG9yWCBYIGNvb3JkaW5hdGUgZm9yIGluZm8gd2luZG93IGFuY2hvciBwb2ludAogICAgICogQHBhcmFtIHN0cmluZyAkaW5mb1dpbmRvd0FuY2hvclkgWSBjb29yZGluYXRlIGZvciBpbmZvIHdpbmRvdyBhbmNob3IgcG9pbnQKICAgICAqIEByZXR1cm4gc3RyaW5nIEEgbWFya2VyIGljb24ga2V5LgogICAgICovCiAgICBmdW5jdGlvbiBzZXRNYXJrZXJJY29uKCRpY29uSW1hZ2UsJGljb25TaGFkb3dJbWFnZSA9ICcnLCRpY29uQW5jaG9yWCA9ICd4JywkaWNvbkFuY2hvclkgPSAneCcsJGluZm9XaW5kb3dBbmNob3JYID0gJ3gnLCRpbmZvV2luZG93QW5jaG9yWSA9ICd4JykgewogICAgICAgICR0aGlzLT5kZWZhdWx0X2ljb24gPSAkaWNvbkltYWdlOwogICAgICAgICR0aGlzLT5kZWZhdWx0X2ljb25fc2hhZG93ID0gJGljb25TaGFkb3dJbWFnZTsKICAgICAgICByZXR1cm4gJHRoaXMtPnNldE1hcmtlckljb25LZXkoJGljb25JbWFnZSwkaWNvblNoYWRvd0ltYWdlLCRpY29uQW5jaG9yWCwkaWNvbkFuY2hvclksJGluZm9XaW5kb3dBbmNob3JYLCRpbmZvV2luZG93QW5jaG9yWSk7ICAgICAgIAogICAgfQogICAgCiAgICAvKioKICAgICAqIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGljb24gaXMgaW4gIGNsYXNzICJtYXJrZXJfaWNvbnNldCIsIGlmIGl0IGlzLCAKICAgICAqIHJldHVybnMgdGhlIGtleSwgaWYgbm90LCBjcmVhdGVzIGEgbmV3IGFycmF5IGluZGljZSBhbmQgcmV0dXJucyB0aGUga2V5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRpY29uSW1hZ2UgVVJMIHRvIGljb24gaW1hZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGljb25TaGFkb3dJbWFnZSBVUkwgdG8gc2hhZG93IGltYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpY29uQW5jaG9yWCBYIGNvb3JkaW5hdGUgZm9yIGljb24gYW5jaG9yIHBvaW50CiAgICAgKiBAcGFyYW0gc3RyaW5nICRpY29uQW5jaG9yWSBZIGNvb3JkaW5hdGUgZm9yIGljb24gYW5jaG9yIHBvaW50CiAgICAgKiBAcGFyYW0gc3RyaW5nICRpbmZvV2luZG93QW5jaG9yWCBYIGNvb3JkaW5hdGUgZm9yIGluZm8gd2luZG93IGFuY2hvciBwb2ludAogICAgICogQHBhcmFtIHN0cmluZyAkaW5mb1dpbmRvd0FuY2hvclkgWSBjb29yZGluYXRlIGZvciBpbmZvIHdpbmRvdyBhbmNob3IgcG9pbnQKICAgICAqIEByZXR1cm4gc3RyaW5nIEEgbWFya2VyIGljb24ga2V5LgogICAgICovCiAgICBmdW5jdGlvbiBzZXRNYXJrZXJJY29uS2V5KCRpY29uSW1hZ2UsJGljb25TaGFkb3c9JycsJGljb25BbmNob3JYID0gJ3gnLCRpY29uQW5jaG9yWSA9ICd4JywkaW5mb1dpbmRvd0FuY2hvclggPSAneCcsJGluZm9XaW5kb3dBbmNob3JZID0gJ3gnKXsKICAgIAkkX2ljb25LZXkgPSAkdGhpcy0+Z2V0SWNvbktleSgkaWNvbkltYWdlLCRpY29uU2hhZG93KTsKICAgIAlpZihpc3NldCgkdGhpcy0+X21hcmtlcl9pY29uc1skX2ljb25LZXldKSl7CiAgICAJCXJldHVybiAkX2ljb25LZXk7CiAgICAJfWVsc2V7CiAgICAJCXJldHVybiAkdGhpcy0+YWRkSWNvbigkaWNvbkltYWdlLCRpY29uU2hhZG93LCRpY29uQW5jaG9yWCwkaWNvbkFuY2hvclksJGluZm9XaW5kb3dBbmNob3JYLCRpbmZvV2luZG93QW5jaG9yWSk7CiAgICAJfQogICAgfQogICAgCiAgICAvKioKICAgICAqIGZ1bmN0aW9uIHRvIGdldCBpY29uIGtleQogICAgICogQHBhcmFtIHN0cmluZyAkaWNvbkltYWdlIFVSTCB0byBtYXJrZXIgaWNvbiBpbWFnZQogICAgICogQHBhcmFtIHN0cmluZyAkaWNvblNoYWRvdyBVUkwgdG8gbWFya2VyIGljb24gc2hhZG93IGltYWdlCiAgICAgKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIGZvcm1hdHRlZCBpY29uIGtleSBmcm9tIGljb24gb3IgaWNvbitzaGFkb3cgaW1hZ2UgbmFtZSBwYWlycwogICAgICovCiAgICBmdW5jdGlvbiBnZXRJY29uS2V5KCRpY29uSW1hZ2UsJGljb25TaGFkb3c9IiIpewogICAgICAgIHJldHVybiBzdHJfcmVwbGFjZShhcnJheSgiLyIsIjoiLCIuIiksIiIsJGljb25JbWFnZS4kaWNvblNoYWRvdyk7CiAgICB9CiAKICAgIC8qKgogICAgICogYWRkIGFuIGljb24gdG8gImljb25zZXQiCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpY29uSW1hZ2UgVVJMIHRvIG1hcmtlciBpY29uIGltYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpY29uU2hhZG93IFVSTCB0byBtYXJrZXIgaWNvbiBzaGFkb3cgaW1hZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGljb25BbmNob3JYIFggY29vcmRpbmF0ZSBmb3IgaWNvbiBhbmNob3IgcG9pbnQKICAgICAqIEBwYXJhbSBzdHJpbmcgJGljb25BbmNob3JZIFkgY29vcmRpbmF0ZSBmb3IgaWNvbiBhbmNob3IgcG9pbnQKICAgICAqIEBwYXJhbSBzdHJpbmcgJGluZm9XaW5kb3dBbmNob3JYIFggY29vcmRpbmF0ZSBmb3IgaW5mbyB3aW5kb3cgYW5jaG9yIHBvaW50CiAgICAgKiBAcGFyYW0gc3RyaW5nICRpbmZvV2luZG93QW5jaG9yWSBZIGNvb3JkaW5hdGUgZm9yIGluZm8gd2luZG93IGFuY2hvciBwb2ludAogICAgICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgaWNvbidzIGtleS4gIAogICAgICovCiAgICBmdW5jdGlvbiBhZGRJY29uKCRpY29uSW1hZ2UsJGljb25TaGFkb3dJbWFnZSA9ICcnLCRpY29uQW5jaG9yWCA9ICd4JywkaWNvbkFuY2hvclkgPSAneCcsJGluZm9XaW5kb3dBbmNob3JYID0gJ3gnLCRpbmZvV2luZG93QW5jaG9yWSA9ICd4JykgewogICAgCSRfaWNvbktleSA9ICR0aGlzLT5nZXRJY29uS2V5KCRpY29uSW1hZ2UsICRpY29uU2hhZG93SW1hZ2UpOwogICAgICAgICR0aGlzLT5fbWFya2VyX2ljb25zWyRfaWNvbktleV0gPSAkdGhpcy0+Y3JlYXRlTWFya2VySWNvbigkaWNvbkltYWdlLCRpY29uU2hhZG93SW1hZ2UsJGljb25BbmNob3JYLCRpY29uQW5jaG9yWSwkaW5mb1dpbmRvd0FuY2hvclgsJGluZm9XaW5kb3dBbmNob3JZKTsKICAgICAgICByZXR1cm4gJF9pY29uS2V5OwogICAgfQogICAgCiAgICAvKioKICAgICAqIHVwZGF0ZXMgYSBtYXJrZXIncyBpY29uIGtleS4KICAgICAqIE5PVEU6IFRvIGJlIHVzZWQgaW4gbGlldSBvZiBhZGRNYXJrZXJJY29uLCBub3cgdXNlIGFkZEljb24gKyB1cGRhdGVNYXJrZXJJY29uS2V5IGZvciBleHBsaWNpdCBpY29uIGFzc29jaWF0aW9uCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtYXJrZXJLZXkgTWFya2VyIGtleSB0byBkZWZpbmUgd2hpY2ggbWFya2VyJ3MgaWNvbiB0byB1cGRhdGUKICAgICAqIEBwYXJhbSBzdHJpbmcgJGljb25LZXkgSWNvbiBrZXkgdG8gZGVmaW5lIHdoaWNoIGljb24gdG8gdXNlLgogICAgICovCiAgICBmdW5jdGlvbiB1cGRhdGVNYXJrZXJJY29uS2V5KCRtYXJrZXJLZXksICRpY29uS2V5KXsKICAgIAlpZihpc3NldCgkdGhpcy0+X21hcmtlcnNbJG1hcmtlcktleV0pKXsKICAgIAkJJHRoaXMtPl9tYXJrZXJzWyRtYXJrZXJLZXldWydpY29uX2tleSddID0gJGljb25LZXk7CiAgICAJfQogICAgfSAgICAKCiAgICAvKioKICAgICAqIHByaW50IG1hcCBoZWFkZXIgamF2YXNjcmlwdCAoZ29lcyBiZXR3ZWVuIDxoZWFkPjwvaGVhZD4pCiAgICAgKiAKICAgICAqLwogICAgZnVuY3Rpb24gcHJpbnRIZWFkZXJKUygpIHsKICAgICAgICBlY2hvICR0aGlzLT5nZXRIZWFkZXJKUygpOwogICAgfQogICAgCiAgICAvKioKICAgICAqIHJldHVybiBtYXAgaGVhZGVyIGphdmFzY3JpcHQgKGdvZXMgYmV0d2VlbiA8aGVhZD48L2hlYWQ+KQogICAgICogCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldEhlYWRlckpTKCkgewoJCSRfaGVhZGVySlMgPSAiIjsKICAgICAgICBpZiggJHRoaXMtPm1vYmlsZSA9PSB0cnVlKXsKICAgICAgICAJJF9oZWFkZXJKUyAuPSAiCiAgICAgICAgCSAgIDxtZXRhIG5hbWU9J3ZpZXdwb3J0JyBjb250ZW50PSdpbml0aWFsLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubycgLz4KICAgICAgICAJIjsKICAgICAgICB9CgkJaWYoIWVtcHR5KCR0aGlzLT5fZWxldmF0aW9uX3BvbHlsaW5lcyl8fCghZW1wdHkoJHRoaXMtPl9kaXJlY3Rpb25zKSYmJHRoaXMtPmVsZXZhdGlvbl9kaXJlY3Rpb25zKSl7CgkJCSRfaGVhZGVySlMgLj0gIjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0JyBzcmM9J2h0dHA6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSc+PC9zY3JpcHQ+IjsKCQkJJF9oZWFkZXJKUyAuPSAiCgkJCTxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz4KCQkJCS8vIExvYWQgdGhlIFZpc3VhbGl6YXRpb24gQVBJIGFuZCB0aGUgcGllY2hhcnQgcGFja2FnZS4KCQkJCWdvb2dsZS5sb2FkKCd2aXN1YWxpemF0aW9uJywgJzEnLCB7cGFja2FnZXM6IFsnY29sdW1uY2hhcnQnXX0pOwoJCQk8L3NjcmlwdD4iOwoJCX0KICAgICAgICAkX2hlYWRlckpTIC49ICI8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCcgc3JjPSdodHRwOi8vbWFwcy5nb29nbGUuY29tL21hcHMvYXBpL2pzP3NlbnNvcj0iLigoJHRoaXMtPm1vYmlsZT09dHJ1ZSk/InRydWUiOiJmYWxzZSIpLiInPjwvc2NyaXB0PiI7CgkJaWYoJHRoaXMtPm1hcmtlcl9jbHVzdGVyZXIpewoJCQkkX2hlYWRlckpTIC49ICI8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCcgc3JjPSciLiR0aGlzLT5tYXJrZXJfY2x1c3RlcmVyX2xvY2F0aW9uLiInID48L3NjcmlwdD4iOwoJCX0gICAgICAgIAogICAgICAgIGlmKCR0aGlzLT5sb2NhbF9zZWFyY2gpey8qVE9ETzogTG9hZCBMb2NhbCBTZWFyY2ggQVBJIFYzIHdoZW4gYXZhaWxhYmxlKi99ICAgCiAgICAgICAgcmV0dXJuICRfaGVhZGVySlM7CiAgICB9ICAgIAogICAgCiAgIC8qKgogICAgKiBwcmludHMgb25Mb2FkKCkgd2l0aG91dCBoYXZpbmcgdG8gbWFuaXB1bGF0ZSBib2R5IHRhZy4KCSogY2FsbCB0aGlzIGFmdGVyIHRoZSBwcmludCBtYXAgbGlrZSBzby4uLiAgICAKCSogICAgICAkbWFwLT5wcmludE1hcCgpOyAgICAKCSogICAgICAkbWFwLT5wcmludE9uTG9hZCgpOyAgICAKCSovCiAgICBmdW5jdGlvbiBwcmludE9uTG9hZCgpIHsKICAgICAgICBlY2hvICR0aGlzLT5nZXRPbkxvYWQoKTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBwcmludCBvbkxvYWQgZnVuY3Rpb24gbmFtZQogICAgICovCiAgICBmdW5jdGlvbiBwcmludE9uTG9hZEZ1bmN0aW9uKCl7CiAgICAgICAgZWNobyAkdGhpcy0+Z2V0T25Mb2FkRnVuY3Rpb24oKTsKICAgIH0KCiAgICAvKioKICAgICAqIHJldHVybiBqcyB0byBzZXQgb25sb2FkIGZ1bmN0aW9uCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldE9uTG9hZCgpIHsKICAgICAgICByZXR1cm4gJzxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgY2hhcnNldD0idXRmLTgiPndpbmRvdy5vbmxvYWQ9b25Mb2FkJy4kdGhpcy0+bWFwX2lkLic7PC9zY3JpcHQ+JzsgICAgICAgICAgICAgICAgICAgICAgIAogICAgfQogICAgCiAgICAvKioKICAgICAqIHJldHVybiBqcyB0byBzZXQgb25sb2FkIGZ1bmN0aW9uCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldE9uTG9hZEZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiAnb25Mb2FkJy4kdGhpcy0+bWFwX2lkOyAgICAgICAgICAgICAgICAgICAgICAgCiAgICB9ICAgCgogICAgLyoqCiAgICAgKiBwcmludCBtYXAgamF2YXNjcmlwdCAocHV0IGp1c3QgYmVmb3JlIDwvYm9keT4sIG9yIGluIDxoZWFkZXI+IGlmIHVzaW5nIG9uTG9hZCgpKQogICAgICogCiAgICAgKi8KICAgIGZ1bmN0aW9uIHByaW50TWFwSlMoKSB7CiAgICAgICAgZWNobyAkdGhpcy0+Z2V0TWFwSlMoKTsKICAgIH0gICAgCgogICAgLyoqCiAgICAgKiByZXR1cm4gbWFwIGphdmFzY3JpcHQKICAgICAqIAogICAgICovCiAgICBmdW5jdGlvbiBnZXRNYXBKUygpIHsKCQkkX3NjcmlwdCA9ICIiOwoJCSRfa2V5ID0gJHRoaXMtPm1hcF9pZDsKCQkkX291dHB1dCA9ICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgY2hhcnNldD0idXRmLTgiPicgLiAiXG4iOwogICAgICAgICRfb3V0cHV0IC49ICcvLzwhW0NEQVRBWycgLiAiXG4iOwogICAgICAgICRfb3V0cHV0IC49ICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIjsKICAgICAgICAkX291dHB1dCAuPSAiICogQ3JlYXRlZCB3aXRoIEdvb2dsZU1hcEFQSSIgLiAkdGhpcy0+X3ZlcnNpb24gLiAiXG4iOwogICAgICAgICRfb3V0cHV0IC49ICIgKiBBdXRob3I6IEJyYWQgV2VkZWxsIDxicmFkIEFUIG15Y25sIERPVCBjb20+XG4iOwogICAgICAgICRfb3V0cHV0IC49ICIgKiBMaW5rIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9waHBnb29nbGVtYXBhcGl2My9cbiI7CiAgICAgICAgJF9vdXRwdXQgLj0gIiAqIENvcHlyaWdodCAyMDEwIEJyYWQgV2VkZWxsXG4iOwogICAgICAgICRfb3V0cHV0IC49ICIgKiBPcmlnaW5hbCBBdXRob3I6IE1vbnRlIE9ocnQgPG1vbnRlIEFUIG9ocnQgRE9UIGNvbT5cbiI7CiAgICAgICAgJF9vdXRwdXQgLj0gIiAqIE9yaWdpbmFsIENvcHlyaWdodCAyMDA1LTIwMDYgTmV3IERpZ2l0YWwgR3JvdXBcbiI7CiAgICAgICAgJF9vdXRwdXQgLj0gIiAqIE9yaWdpbmlhbCBMaW5rIGh0dHA6Ly93d3cucGhwaW5zaWRlci5jb20vcGhwL2NvZGUvR29vZ2xlTWFwQVBJL1xuIjsKICAgICAgICAkX291dHB1dCAuPSAiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4iOwoJCWlmKCR0aGlzLT5zdHJlZXRfdmlld19kb21faWQhPSIiKXsKCQkJJF9zY3JpcHQgLj0gIgoJCQkJdmFyIHBhbm9yYW1hIi4kdGhpcy0+c3RyZWV0X3ZpZXdfZG9tX2lkLiIkX2tleSA9ICcnOwoJCQkiOwoJCQlpZighZW1wdHkoJHRoaXMtPl9tYXJrZXJzKSl7CgkJCQkkX3NjcmlwdCAuPSAiCgkJCQkJdmFyIHBhbm9yYW1hIi4kdGhpcy0+c3RyZWV0X3ZpZXdfZG9tX2lkLiJtYXJrZXJzJF9rZXkgPSBbXTsKCQkJCSI7CgkJCX0KCQl9CgkJCgkJaWYoIWVtcHR5KCR0aGlzLT5fbWFya2VycykpewoJCQkkX3NjcmlwdCAuPSAiCgkJCQl2YXIgbWFya2VycyRfa2V5ICA9IFtdOwoJCQkiOwoJCQlpZigkdGhpcy0+c2lkZWJhcikgeyAgICAgICAgCgkJCQkkX3NjcmlwdCAuPSAiCgkJCQkJdmFyIHNpZGViYXJfaHRtbCRfa2V5ICA9ICcnOwoJCQkJCXZhciBtYXJrZXJfaHRtbCRfa2V5ICA9IFtdOwoJCQkJIjsKCQkJfQoJCX0KCQlpZigkdGhpcy0+bWFya2VyX2NsdXN0ZXJlcil7CgkJCSRfc2NyaXB0IC49ICIKCQkJICB2YXIgbWFya2VyQ2x1c3RlcmVyJF9rZXkgPSBudWxsOwoJCQkiOwoJCX0gICAgICAgIAogICAgICAgIGlmKCR0aGlzLT5kaXJlY3Rpb25zKSB7ICAgICAgICAKICAgICAgICAgICAgJF9zY3JpcHQgLj0gIgogICAgICAgICAgICAgICAgdmFyIHRvX2h0bWxzJF9rZXkgID0gW107CiAgICAgICAgICAgICAgICB2YXIgZnJvbV9odG1scyRfa2V5ICA9IFtdOwogICAgICAgICAgICAiOwogICAgICAgIH0KCQlpZighZW1wdHkoJHRoaXMtPl9kaXJlY3Rpb25zKSl7CgkJCSRfc2NyaXB0IC49ICIKCQkJICAgIHZhciBkaXJlY3Rpb25zJF9rZXkgPSBbXTsKCQkJIjsKCQl9CgkJLy9Qb2x5bGluZXMKCQlpZighZW1wdHkoJHRoaXMtPl9wb2x5bGluZXMpKXsKCQkJJF9zY3JpcHQgLj0gIgoJCQkJdmFyIHBvbHlsaW5lcyRfa2V5ID0gW107CgkJCQl2YXIgcG9seWxpbmVDb29yZHMkX2tleSA9IFtdOwoJCQkiOwoJCQlpZighZW1wdHkoJHRoaXMtPl9lbGV2YXRpb25fcG9seWxpbmVzKSl7CgkJCQkkX3NjcmlwdCAuPSAiCgkJCQkJdmFyIGVsZXZhdGlvblBvbHlsaW5lcyRfa2V5ID0gW107CgkJCQkiOwoJCQl9CgkJfQoJCS8vRWxldmF0aW9uIHN0dWZmCgkJaWYoIWVtcHR5KCR0aGlzLT5fZWxldmF0aW9uX3BvbHlsaW5lcyl8fCghZW1wdHkoJHRoaXMtPl9kaXJlY3Rpb25zKSYmJHRoaXMtPmVsZXZhdGlvbl9kaXJlY3Rpb25zKSl7CgkJCSRfc2NyaXB0IC49ICIKCQkJCXZhciBlbGV2YXRpb25DaGFydHMkX2tleSA9IFtdOwkJCQkKCQkJIjsKCQl9CgkJLy9PdmVybGF5cwoJCWlmKCFlbXB0eSgkdGhpcy0+X292ZXJsYXlzKSl7CgkJCSRfc2NyaXB0IC49ICIKCQkJCXZhciBvdmVybGF5cyRfa2V5ID0gW107CgkJCSI7CgkJfQogICAgICAgIC8vS01MIE92ZXJsYXlzCiAgICAgICAgaWYoIWVtcHR5KCR0aGlzLT5fa21sX292ZXJsYXlzKSl7CiAgICAgICAgICAgICRfc2NyaXB0IC49ICIKICAgICAgICAgICAgICAgIHZhciBrbWxfb3ZlcmxheXMkX2tleSA9IFtdOwogICAgICAgICAgICAiOwogICAgICAgIH0KICAgICAgICAvL05ldyBJY29ucwogICAgICAgIGlmKCFlbXB0eSgkdGhpcy0+X21hcmtlcl9pY29ucykpewogICAgICAgIAkkX3NjcmlwdCAuPSAidmFyIGljb24kX2tleSAgPSBbXTsgXG4iOwogICAgICAgIAlmb3JlYWNoKCR0aGlzLT5fbWFya2VyX2ljb25zIGFzICRpY29uX2tleT0+JGljb25faW5mbyl7CiAgICAgICAgCQkvL25vIG5lZWQgdG8gY2hlY2sgaWNvbiBrZXkgaGVyZSBzaW5jZSB0aGF0J3MgYWxyZWFkeSBkb25lIHdpdGggc2V0dGVycwogICAgICAgIAkJJF9zY3JpcHQgLj0gIgogICAgICAgIAkJICBpY29uIi4kX2tleS4iWyckaWNvbl9rZXknXSA9IHt9OwogICAgICAgIAkJICBpY29uIi4kX2tleS4iWyckaWNvbl9rZXknXS5pbWFnZSA9ICBuZXcgZ29vZ2xlLm1hcHMuTWFya2VySW1hZ2UoJyIuJGljb25faW5mb1siaW1hZ2UiXS4iJywKCQkJCSAgICAgIC8vIFRoZSBzaXplCgkJCQkgICAgICBuZXcgZ29vZ2xlLm1hcHMuU2l6ZSgiLiRpY29uX2luZm9bJ2ljb25XaWR0aCddLiIsICIuJGljb25faW5mb1snaWNvbkhlaWdodCddLiIpLAoJCQkJICAgICAgLy8gVGhlIG9yaWdpbihzcHJpdGUpCgkJCQkgICAgICBuZXcgZ29vZ2xlLm1hcHMuUG9pbnQoMCwwKSwKCQkJCSAgICAgIC8vIFRoZSBhbmNob3IKCQkJCSAgICAgIG5ldyBnb29nbGUubWFwcy5Qb2ludCgiLiRpY29uX2luZm9bJ2ljb25BbmNob3JYJ10uIiwgIi4kaWNvbl9pbmZvWydpY29uQW5jaG9yWSddLiIpCiAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgCQkiOwogICAgICAgIAkJaWYoaXNzZXQoJGljb25faW5mb1snc2hhZG93J10pICYmICRpY29uX2luZm9bJ3NoYWRvdyddIT0iIil7CiAgICAgICAgCQkgICRfc2NyaXB0IC49ICIKICAgICAgICAgICAgICAgICAgICBpY29uIi4kX2tleS4iWyckaWNvbl9rZXknXS5zaGFkb3cgPSBuZXcgZ29vZ2xlLm1hcHMuTWFya2VySW1hZ2UoJyIuJGljb25faW5mb1sic2hhZG93Il0uIicsCiAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgc2l6ZQogICAgICAgICAgICAgICAgICAgICAgbmV3IGdvb2dsZS5tYXBzLlNpemUoIi4kaWNvbl9pbmZvWydzaGFkb3dXaWR0aCddLiIsICIuJGljb25faW5mb1snc2hhZG93SGVpZ2h0J10uIiksCiAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgb3JpZ2luKHNwcml0ZSkKICAgICAgICAgICAgICAgICAgICAgIG5ldyBnb29nbGUubWFwcy5Qb2ludCgwLDApLAogICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGFuY2hvcgogICAgICAgICAgICAgICAgICAgICAgbmV3IGdvb2dsZS5tYXBzLlBvaW50KCIuJGljb25faW5mb1snaWNvbkFuY2hvclgnXS4iLCAiLiRpY29uX2luZm9bJ2ljb25BbmNob3JZJ10uIikKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAiOwogICAgICAgIAkJfQogICAgICAgIAl9CiAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAkX3NjcmlwdCAuPSAidmFyIG1hcCRfa2V5ID0gbnVsbDtcbiI7CgkJCgkJLy9zdGFydCBzZXR0aW5nIHNjcmlwdCB2YXIKICAgICAgICBpZigkdGhpcy0+b25sb2FkKSB7CiAgICAgICAgCS8vIER1a2V0b3duOiBOZXh0IGxpbmUgc2V0IHRvIGNvbW1lbnQsIHNpbmNlIGl0IGNhdXNlZCBtYXAgbm90IHRvIGJlIHNob3duCiAgICAgICAgCS8vJF9zY3JpcHQgLj0gJ2Z1bmN0aW9uIG9uTG9hZCcuJHRoaXMtPm1hcF9pZC4nKCkgeycgLiAiXG4iOyAgIAogICAgICAgIAkkX3NjcmlwdCAuPSAneycgLiAiXG4iOyAgIAogICAgICAgIH0gCiAgICAgICAgICAgICAgICAKICAgICAgICBpZighZW1wdHkoJHRoaXMtPmJyb3dzZXJfYWxlcnQpKSB7CiAgICAgICAgCS8vVE9ETzpVcGRhdGUgd2l0aCBuZXcgYnJvd3NlciBjYXRjaCAtIEdCcm93c2VySXNDb21wYXRpYmxlIGlzIGRlcHJlY2F0ZWQKICAgICAgICAgICAgLy8kX291dHB1dCAuPSAnaWYgKEdCcm93c2VySXNDb21wYXRpYmxlKCkpIHsnIC4gIlxuIjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLyoKICAgICAgICAgKlRPRE86VXBkYXRlIHdpdGggbG9jYWwgc2VhcmNoIGJhciBvbmNlIGltcGxlbWVudGVkIGluIFYzIGFwaSAKCQkkc3RyTWFwT3B0aW9ucyA9ICIiOwoJCWlmKCR0aGlzLT5sb2NhbF9zZWFyY2gpewoJCQkkX291dHB1dCAuPSAiCgkJCQltYXBPcHRpb25zLmdvb2dsZUJhck9wdGlvbnM9IHsKCQkJCQlzdHlsZSA6ICduZXcnCgkJCQkJIi4oKCR0aGlzLT5sb2NhbF9zZWFyY2hfYWRzKT8iLAoJCQkJCWFkc09wdGlvbnM6IHsKCQkJCQkgICAgY2xpZW50OiAnIi4kdGhpcy0+YWRzX3B1Yl9pZC4iJywKCQkJCQkgICAgY2hhbm5lbDogJyIuJHRoaXMtPmFkc19jaGFubmVsLiInLAoJCQkJCSAgICBsYW5ndWFnZTogJ2VuJwoJCQkJCSI6IiIpLiIKCQkJCX07CgkJCSI7ICAgICAgICAgICAgCgkJCSRzdHJNYXBPcHRpb25zIC49ICIsIG1hcE9wdGlvbnMiOwoJCX0KICAgICAgICAqLwoJCQoJCWlmKCR0aGlzLT5kaXNwbGF5X21hcCl7CgkJCSRfc2NyaXB0IC49IHNwcmludGYoJ3ZhciBtYXBPYmolcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCIlcyIpOycsICRfa2V5LCAkdGhpcy0+bWFwX2lkKSAuICJcbiI7CgkJCSRfc2NyaXB0IC49ICJpZiAobWFwT2JqJF9rZXkgIT0gJ3VuZGVmaW5lZCcgJiYgbWFwT2JqJF9rZXkgIT0gbnVsbCkge1xuIjsKCQkJCgkJCSRfc2NyaXB0IC49ICIKCQkJCXZhciBtYXBPcHRpb25zJF9rZXkgPSB7CgkJCQkJem9vbTogIi4kdGhpcy0+em9vbS4iLCI7CgkJCS8vIER1a2V0b3duIGNoYW5nZXMKCQkJJF9zY3JpcHQgLj0gIgoJCQkJCXBhbkNvbnRyb2w6ICIuKCR0aGlzLT5wYW5fY29udHJvbD8idHJ1ZSI6ImZhbHNlIikuIiwKCQkJCQl6b29tQ29udHJvbDogIi4oJHRoaXMtPm1hcF9jb250cm9scz8idHJ1ZSI6ImZhbHNlIikuIiwKCQkJCQlzY2FsZUNvbnRyb2w6ICIuKCR0aGlzLT5zY2FsZV9jb250cm9sPyJ0cnVlIjoiZmFsc2UiKS4iLAoJCQkJCXN0cmVldFZpZXdDb250cm9sOiAiLigkdGhpcy0+c3RyZWV0Vmlld0NvbnRyb2w/InRydWUiOiJmYWxzZSIpLiIsIjsKCQkJLy8gRHVrZXRvd24gY2hhbmdlcyBlbmQKCQkJJF9zY3JpcHQgLj0gIgoJCQkJCW1hcFR5cGVJZDogZ29vZ2xlLm1hcHMuTWFwVHlwZUlkLiIuJHRoaXMtPm1hcF90eXBlLiIsCgkJCQkJbWFwVHlwZUNvbnRyb2w6ICIuKCR0aGlzLT50eXBlX2NvbnRyb2xzPyJ0cnVlIjoiZmFsc2UiKS4iLAoJCQkJCW1hcFR5cGVDb250cm9sT3B0aW9uczoge3N0eWxlOiBnb29nbGUubWFwcy5NYXBUeXBlQ29udHJvbFN0eWxlLiIuJHRoaXMtPnR5cGVfY29udHJvbHNfc3R5bGUuIn0KCQkJCX07CgkJCSI7CgkJCWlmKGlzc2V0KCR0aGlzLT5jZW50ZXJfbGF0KSAmJiBpc3NldCgkdGhpcy0+Y2VudGVyX2xvbikpIHsKCQkJCS8vIFNwZWNpYWwgY2FyZSBmb3IgZGVjaW1hbCBwb2ludCBpbiBsb24gYW5kIGxhdCwgd291bGQgZ2V0IGxvc3QgaWYgIndyb25nIiBsb2NhbGUgaXMgc2V0OyBhcHBsaWVzIHRvIChzKXByaW50ZiBvbmx5CgkJCQkkX3NjcmlwdCAuPSAiCgkJCQkJbWFwT3B0aW9ucyIuJF9rZXkuIi5jZW50ZXIgPSBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKAoJCQkJCQkiLm51bWJlcl9mb3JtYXQoJHRoaXMtPmNlbnRlcl9sYXQsIDYsICIuIiwgIiIpLiIsCgkJCQkJCSIubnVtYmVyX2Zvcm1hdCgkdGhpcy0+Y2VudGVyX2xvbiwgNiwgIi4iLCAiIikuIgoJCQkJCSk7CgkJCQkiOwoJCQl9ICAgCgkJCQoJCQlpZigkdGhpcy0+c3RyZWV0X3ZpZXdfY29udHJvbHMpewoJCQkJJF9zY3JpcHQgLj0gIgoJCQkJCW1hcE9wdGlvbnMiLiRfa2V5LiIuc3RyZWV0Vmlld0NvbnRyb2w9IHRydWU7CgkKCQkJCSI7CgkJCX0KCQkJCgkJCSRfc2NyaXB0IC49ICIKCQkJCW1hcCRfa2V5ID0gbmV3IGdvb2dsZS5tYXBzLk1hcChtYXBPYmokX2tleSxtYXBPcHRpb25zJF9rZXkpOwoJCQkiOwoJCQkJCgkJCWlmKCR0aGlzLT5zdHJlZXRfdmlld19kb21faWQhPSIiKXsKCQkJCSRfc2NyaXB0IC49ICIKCQkJCQlwYW5vcmFtYSIuJHRoaXMtPnN0cmVldF92aWV3X2RvbV9pZC4iJF9rZXkgPSBuZXcgIGdvb2dsZS5tYXBzLlN0cmVldFZpZXdQYW5vcmFtYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnIi4kdGhpcy0+c3RyZWV0X3ZpZXdfZG9tX2lkLiInKSk7CgkJCQkJbWFwJF9rZXkuc2V0U3RyZWV0VmlldyhwYW5vcmFtYSIuJHRoaXMtPnN0cmVldF92aWV3X2RvbV9pZC4iJF9rZXkpOwoJCQkJIjsKCQkJCQoJCQkJaWYoIWVtcHR5KCR0aGlzLT5fbWFya2VycykpewoJCQkJCQoJCQkJCS8vQWRkIG1hcmtlcnMgdG8gdGhlIHN0cmVldCB2aWV3CgkJCQkJaWYoJHRoaXMtPnN0cmVldF92aWV3X2RvbV9pZCE9IiIpewoJCQkJCQkkX3NjcmlwdCAuPSAkdGhpcy0+Z2V0QWRkTWFya2Vyc0pTKCR0aGlzLT5tYXBfaWQsICRwYW5vPXRydWUpOwoJCQkJCX0KCQkJCQkvL3NldCBjZW50ZXIgdG8gbGFzdCBtYXJrZXIKCQkJCQkkbGFzdF9pZCA9IGNvdW50KCR0aGlzLT5fbWFya2VycyktMTsKCQkJCQkKCQkJCQkkX3NjcmlwdCAuPSAiCgkJCQkJCXBhbm9yYW1hIi4kdGhpcy0+c3RyZWV0X3ZpZXdfZG9tX2lkLiIkX2tleS5zZXRQb3NpdGlvbihuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKAoJCQkJCQkJIi4kdGhpcy0+X21hcmtlcnNbJGxhc3RfaWRdWyJsYXQiXS4iLAoJCQkJCQkJIi4kdGhpcy0+X21hcmtlcnNbJGxhc3RfaWRdWyJsb24iXS4iCgkJCQkJCSkpOwoJCQkJCQlwYW5vcmFtYSIuJHRoaXMtPnN0cmVldF92aWV3X2RvbV9pZC4iJF9rZXkuc2V0VmlzaWJsZSh0cnVlKTsKCQkJCQkiOwoJCQkJfQoJCQl9CgkJCQoJCQlpZighZW1wdHkoJHRoaXMtPl9kaXJlY3Rpb25zKSl7CgkJCQkkX3NjcmlwdCAuPSAkdGhpcy0+Z2V0QWRkRGlyZWN0aW9uc0pTKCk7CgkJCX0KCQkJCgkJCS8vVE9ETzphZGQgc3VwcG9ydCBmb3IgR29vZ2xlIEVhcnRoIE92ZXJsYXkgb25jZSBpbnRlZ3JhdGVkIHdpdGggVjMKCQkJLy8kX291dHB1dCAuPSAibWFwLmFkZE1hcFR5cGUoR19TQVRFTExJVEVfM0RfTUFQKTtcbiI7CgkJCQoJCQkvLyB6b29tIHNvIHRoYXQgYWxsIG1hcmtlcnMgYXJlIGluIHRoZSB2aWV3cG9ydAoJCQlpZigkdGhpcy0+em9vbV9lbmNvbXBhc3MgJiYgKGNvdW50KCR0aGlzLT5fbWFya2VycykgPiAxIHx8IGNvdW50KCR0aGlzLT5fcG9seWxpbmVzKSA+PSAxIHx8IGNvdW50KCR0aGlzLT5fb3ZlcmxheXMpID49IDEpKSB7CgkJCQkvLyBpbmNyZWFzZSBib3VuZHMgYnkgZnVkZ2UgZmFjdG9yIHRvIGtlZXAKCQkJCS8vIG1hcmtlcnMgYXdheSBmcm9tIHRoZSBlZGdlcwoJCQkJJF9sZW5fbG9uID0gJHRoaXMtPl9tYXhfbG9uIC0gJHRoaXMtPl9taW5fbG9uOwoJCQkJJF9sZW5fbGF0ID0gJHRoaXMtPl9tYXhfbGF0IC0gJHRoaXMtPl9taW5fbGF0OwoJCQkJJHRoaXMtPl9taW5fbG9uIC09ICRfbGVuX2xvbiAqICR0aGlzLT5ib3VuZHNfZnVkZ2U7CgkJCQkkdGhpcy0+X21heF9sb24gKz0gJF9sZW5fbG9uICogJHRoaXMtPmJvdW5kc19mdWRnZTsKCQkJCSR0aGlzLT5fbWluX2xhdCAtPSAkX2xlbl9sYXQgKiAkdGhpcy0+Ym91bmRzX2Z1ZGdlOwoJCQkJJHRoaXMtPl9tYXhfbGF0ICs9ICRfbGVuX2xhdCAqICR0aGlzLT5ib3VuZHNfZnVkZ2U7CgkKCQkJCSRfc2NyaXB0IC49ICJ2YXIgYmRzJF9rZXkgPSBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nQm91bmRzKG5ldyBnb29nbGUubWFwcy5MYXRMbmcoJHRoaXMtPl9taW5fbGF0LCAkdGhpcy0+X21pbl9sb24pLCBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKCR0aGlzLT5fbWF4X2xhdCwgJHRoaXMtPl9tYXhfbG9uKSk7XG4iOwoJCQkJJF9zY3JpcHQgLj0gJ21hcCcuJF9rZXkuJy5maXRCb3VuZHMoYmRzJy4kX2tleS4nKTsnIC4gIlxuIjsKCQkJfQoJCQkKCQkJLyoKCQkJICogVE9ETzogVXBkYXRlIGNvbnRyb2xzIHRvIHVzZSBuZXcgQVBJIHYzIG1ldGhvZHMuKE5vdCBhIHByaW9yaXR5LCBzZWUgYmVsb3cpCgkJCSAqIGRlZmF1bHQgVjMgZnVuY3Rpb25hbGl0eSBjYXRlcnMgY29udHJvbCBkaXNwbGF5IGFjY29yZGluZyB0byB0aGUgCgkJCSAqIGRldmljZSB0aGF0J3MgYWNjZXNzaW5nIHRoZSBwYWdlLCBhcyB3ZWxsIGFzIHRoZSBzcGVjaWZpZWQgd2lkdGgKCQkJICogYW5kIGhlaWdodCBvZiB0aGUgbWFwIGl0c2VsZi4KCQkJaWYoJHRoaXMtPm1hcF9jb250cm9scykgewoJCQkgIGlmKCR0aGlzLT5jb250cm9sX3NpemUgPT0gJ2xhcmdlJykKCQkJCSAgJF9vdXRwdXQgLj0gJ21hcC5hZGRDb250cm9sKG5ldyBHTGFyZ2VNYXBDb250cm9sKCksIG5ldyBHQ29udHJvbFBvc2l0aW9uKEdfQU5DSE9SX1RPUF9MRUZULCBuZXcgR1NpemUoMTAsMTApKSk7JyAuICJcbiI7CgkJCSAgZWxzZQoJCQkJICAkX291dHB1dCAuPSAnbWFwLmFkZENvbnRyb2wobmV3IEdTbWFsbE1hcENvbnRyb2woKSwgbmV3IEdDb250cm9sUG9zaXRpb24oR19BTkNIT1JfVE9QX1JJR0hULCBuZXcgR1NpemUoMTAsNjApKSk7JyAuICJcbiI7CgkJCX0KCQkJaWYoJHRoaXMtPnR5cGVfY29udHJvbHMpIHsKCQkJCSRfb3V0cHV0IC49ICdtYXAuYWRkQ29udHJvbChuZXcgR01hcFR5cGVDb250cm9sKCksIG5ldyBHQ29udHJvbFBvc2l0aW9uKEdfQU5DSE9SX1RPUF9SSUdIVCwgbmV3IEdTaXplKDEwLDEwKSkpOycgLiAiXG4iOwoJCQl9CgkJCQoJCQlpZigkdGhpcy0+c2NhbGVfY29udHJvbCkgewoJCQkJaWYoJHRoaXMtPmNvbnRyb2xfc2l6ZSA9PSAnbGFyZ2UnKXsKCQkJCQkkX291dHB1dCAuPSAnbWFwLmFkZENvbnRyb2wobmV3IEdTY2FsZUNvbnRyb2woKSwgbmV3IEdDb250cm9sUG9zaXRpb24oR19BTkNIT1JfVE9QX1JJR0hULCBuZXcgR1NpemUoMzUsMTkwKSkpOycgLiAiXG4iOwoJCQkJfWVsc2UgewoJCQkJCSRfb3V0cHV0IC49ICdtYXAuYWRkQ29udHJvbChuZXcgR1NjYWxlQ29udHJvbCgpLCBuZXcgR0NvbnRyb2xQb3NpdGlvbihHX0FOQ0hPUl9CT1RUT01fUklHSFQsIG5ldyBHU2l6ZSgxOTAsMTApKSk7JyAuICJcbiI7CgkJCQl9CgkJCX0KCQkJaWYoJHRoaXMtPm92ZXJ2aWV3X2NvbnRyb2wpIHsKCQkJCSRfb3V0cHV0IC49ICdtYXAuYWRkQ29udHJvbChuZXcgR092ZXJ2aWV3TWFwQ29udHJvbCgpKTsnIC4gIlxuIjsKCQkJfQoJCQkKCQkJICogVE9ETzogVXBkYXRlIHdpdGggYWRzX21hbmFnZXIgc3R1ZmYgb25jZSBpbnRlZ3JhdGVkIGludG8gVjMKCQkJaWYoJHRoaXMtPmFkc19tYW5hZ2VyKXsKCQkJCSRfb3V0cHV0IC49ICd2YXIgYWRzTWFuYWdlciA9IG5ldyBHQWRzTWFuYWdlcihtYXAsICInLiR0aGlzLT5hZHNfcHViX2lkLiciLHtjaGFubmVsOiInLiR0aGlzLT5hZHNfY2hhbm5lbC4nIixtYXhBZHNPbk1hcDoiJy4kdGhpcy0+YWRzX21heC4nIn0pOwoJCSAgIGFkc01hbmFnZXIuZW5hYmxlKCk7Jy4iXG4iOwoJCQkKCQkJfQoJCQkgKiBUT0RPOiBVcGRhdGUgd2l0aCBsb2NhbCBzZWFyY2ggb25jZSBpbnRlZ3JhdGVkIGludG8gVjMKCQkJaWYoJHRoaXMtPmxvY2FsX3NlYXJjaCl7CgkJCQkkX291dHB1dCAuPSAiXG4KCQkJCQltYXAuZW5hYmxlR29vZ2xlQmFyKCk7CgkJCQkiOwoJCQl9CgkJCSovCgkJCQoJCQlpZigkdGhpcy0+dHJhZmZpY19vdmVybGF5KXsKCQkJCSRfc2NyaXB0IC49ICIKCQkJCQl2YXIgdHJhZmZpY0xheWVyID0gbmV3IGdvb2dsZS5tYXBzLlRyYWZmaWNMYXllcigpOwoJCQkJCXRyYWZmaWNMYXllci5zZXRNYXAobWFwJF9rZXkpOwoJCQkJIjsgICAgICAgICAgICAKCQkJfQoJCQkKCQkJaWYoJHRoaXMtPmJpa2luZ19vdmVybGF5KXsKCQkJCSRfc2NyaXB0IC49ICIKCQkJCQl2YXIgYmlraW5nTGF5ZXIgPSBuZXcgZ29vZ2xlLm1hcHMuQmljeWNsaW5nTGF5ZXIoKTsKCQkJCQliaWtpbmdMYXllci5zZXRNYXAobWFwJF9rZXkpOwoJCQkJIjsgICAgICAgICAgICAKCQkJfQoJCQkKCQkJJF9zY3JpcHQgLj0gJHRoaXMtPmdldEFkZE1hcmtlcnNKUygpOwoJCQkKCQkJJF9zY3JpcHQgLj0gJHRoaXMtPmdldFBvbHlsaW5lSlMoKTsKCQkJJF9zY3JpcHQgLj0gJHRoaXMtPmdldEFkZE92ZXJsYXlKUygpOwoJCQkKCQkJaWYoJHRoaXMtPl9rbWxfb3ZlcmxheXMhPT0iIil7CgkJCSAgZm9yZWFjaCgkdGhpcy0+X2ttbF9vdmVybGF5cyBhcyAkX2ttbF9rZXk9PiRfa21sX2ZpbGUpewoJCQkJICAkX3NjcmlwdCAuPSAiCgkJCQkJICBrbWxfb3ZlcmxheXMkX2tleVskX2ttbF9rZXldPSBuZXcgZ29vZ2xlLm1hcHMuS21sTGF5ZXIoJyRfa21sX2ZpbGUnKTsKCQkJCQkgIGttbF9vdmVybGF5cyRfa2V5WyRfa21sX2tleV0uc2V0TWFwKG1hcCRfa2V5KTsKCQkJCSAgIjsKCQkJICB9CgkJCSAgJF9zY3JpcHQgLj0gIgoJCQkJICAKCQkJICAiOwoJCQl9CgoJCQkgLy9lbmQgSlMgaWYgbWFwT2JqICE9ICJ1bmRlZmluZWQiIGJsb2NrCgkJCSRfc2NyaXB0IC49ICd9JyAuICJcbiI7CgkJCgkJfS8vZW5kIGlmICR0aGlzLT5kaXNwbGF5X21hcD09dHJ1ZQogICAgICAgCiAgICAgICAgaWYoIWVtcHR5KCR0aGlzLT5icm93c2VyX2FsZXJ0KSkgewogICAgICAgICAgICAvL1RPRE86VXBkYXRlIHdpdGggbmV3IGJyb3dzZXIgY2F0Y2ggU0VFIEFCT1ZFCiAgICAgICAgICAgLy8gJF9vdXRwdXQgLj0gJ30gZWxzZSB7JyAuICJcbiI7CiAgICAgICAgICAgLy8gJF9vdXRwdXQgLj0gJ2FsZXJ0KCInIC4gc3RyX3JlcGxhY2UoJyInLCdcIicsJHRoaXMtPmJyb3dzZXJfYWxlcnQpIC4gJyIpOycgLiAiXG4iOwogICAgICAgICAgIC8vICRfb3V0cHV0IC49ICd9JyAuICJcbiI7CiAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgIAoKICAgICAgICBpZigkdGhpcy0+b25sb2FkKSB7CiAgICAgICAgICAgJF9zY3JpcHQgLj0gJ30nIC4gIlxuIjsKICAgICAgICB9CiAgICAgICAgCgkJJF9zY3JpcHQgLj0gJHRoaXMtPmdldE1hcEZ1bmN0aW9ucygpOwogICAgICAgIAoJCWlmKCR0aGlzLT5fbWluaWZ5X2pzICYmIGNsYXNzX2V4aXN0cygiSlNNaW4iKSl7CgkJCSRfc2NyaXB0ID0gSlNNaW46Om1pbmlmeSgkX3NjcmlwdCk7CgkJfQoJCQoJCS8vQXBwZW5kIHNjcmlwdCB0byBvdXRwdXQKCQkkX291dHB1dCAuPSAkX3NjcmlwdDsKCQkkX291dHB1dCAuPSAnLy9dXT4nIC4gIlxuIjsKICAgICAgICAkX291dHB1dCAuPSAnPC9zY3JpcHQ+JyAuICJcbiI7CiAgICAgICAgcmV0dXJuICRfb3V0cHV0OwogICAgfQoJCgkvKioKCSAqIGZ1bmN0aW9uIHRvIHJlbmRlciB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgdXNlIG9uIHRoZSBwYWdlCgkgKi8KCSBmdW5jdGlvbiBnZXRNYXBGdW5jdGlvbnMoKXsKCQkkX3NjcmlwdCA9ICIiOwoJCWlmKCR0aGlzLT5fZGlzcGxheV9qc19mdW5jdGlvbnM9PT10cnVlKXsKCSAgICAJJF9zY3JpcHQgPSAkdGhpcy0+Z2V0VXRpbGl0eUZ1bmN0aW9ucygpOyAgICAgICAgICAgCiAgICAgICAgfQoJCXJldHVybiAkX3NjcmlwdDsKCSB9CgkgCgkgZnVuY3Rpb24gZ2V0VXRpbGl0eUZ1bmN0aW9ucygpewoJCSAkX3NjcmlwdCA9ICIiOwoJCSBpZighZW1wdHkoJHRoaXMtPl9tYXJrZXJzKSkKCQkgCSRfc2NyaXB0IC49ICR0aGlzLT5nZXRDcmVhdGVNYXJrZXJKUygpOwoJCSBpZighZW1wdHkoJHRoaXMtPl9vdmVybGF5cykpCgkJIAkkX3NjcmlwdCAuPSAkdGhpcy0+Z2V0Q3JlYXRlT3ZlcmxheUpTKCk7CgkJIGlmKCFlbXB0eSgkdGhpcy0+X2VsZXZhdGlvbl9wb2x5bGluZXMpfHwoIWVtcHR5KCR0aGlzLT5fZGlyZWN0aW9ucykmJiR0aGlzLT5lbGV2YXRpb25fZGlyZWN0aW9ucykpCgkJIAkkX3NjcmlwdCAuPSAkdGhpcy0+Z2V0UGxvdEVsZXZhdGlvbkpTKCk7CgkJIC8vIFV0aWxpdHkgZnVuY3Rpb25zIHVzZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0YWJiZWQgYW5kIG5vbi10YWJiZWQgaW5mbyB3aW5kb3dzCgkJICRfc2NyaXB0IC49ICdmdW5jdGlvbiBpc0FycmF5KGEpIHtyZXR1cm4gaXNPYmplY3QoYSkgJiYgYS5jb25zdHJ1Y3RvciA9PSBBcnJheTt9JyAuICJcbiI7CgkJICRfc2NyaXB0IC49ICdmdW5jdGlvbiBpc09iamVjdChhKSB7cmV0dXJuIChhICYmIHR5cGVvZiBhID09IFwnb2JqZWN0XCcpIHx8IGlzRnVuY3Rpb24oYSk7fScgLiAiXG4iOwoJCSAkX3NjcmlwdCAuPSAnZnVuY3Rpb24gaXNGdW5jdGlvbihhKSB7cmV0dXJuIHR5cGVvZiBhID09IFwnZnVuY3Rpb25cJzt9JyAuICJcbiI7CgkJICRfc2NyaXB0IC49ICdmdW5jdGlvbiBpc0VtcHR5KG9iaikgeyBmb3IodmFyIGkgaW4gb2JqKSB7IHJldHVybiBmYWxzZTsgfSByZXR1cm4gdHJ1ZTsgfScuIlxuIjsJIAoJCSByZXR1cm4gJF9zY3JpcHQ7CgkgfQoKICAgIC8qKgogICAgICogb3ZlcnJpZGFibGUgZnVuY3Rpb24gZm9yIGdlbmVyYXRpbmcganMgdG8gYWRkIG1hcmtlcnMKICAgICAqLwogICAgZnVuY3Rpb24gZ2V0QWRkTWFya2Vyc0pTKCRtYXBfaWQgPSAiIiwgJHBhbm89IGZhbHNlKSB7CgkJLy9kZWZhdWx0cwoJCWlmKCRtYXBfaWQgPT0gIiIpewoJCQkkbWFwX2lkID0gJHRoaXMtPm1hcF9pZDsKCQl9CgkJCgkJaWYoJHBhbm89PWZhbHNlKXsKCQkJJF9wcmVmaXggPSAibWFwIjsKCQl9ZWxzZXsKCQkJJF9wcmVmaXggPSAicGFub3JhbWEiLiR0aGlzLT5zdHJlZXRfdmlld19kb21faWQ7CgkJfQogICAgICAgICRfb3V0cHV0ID0gJyc7CiAgICAgICAgCiAgICAgICAgZm9yZWFjaCgkdGhpcy0+X21hcmtlcnMgYXMgJF9tYXJrZXIpIHsKICAgICAgICAgICAgJGl3X2h0bWwgPSBzdHJfcmVwbGFjZSgnIicsJ1wiJyxzdHJfcmVwbGFjZShhcnJheSgiXG4iLCAiXHIiKSwgIiIsICRfbWFya2VyWydodG1sJ10pKTsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gInZhciBwb2ludCA9IG5ldyBnb29nbGUubWFwcy5MYXRMbmcoIi4kX21hcmtlclsnbGF0J10uIiwiLiRfbWFya2VyWydsb24nXS4iKTtcbiI7CiAgICAgICAgICAgICRfb3V0cHV0IC49IHNwcmludGYoJyVzLnB1c2goY3JlYXRlTWFya2VyKCVzJXMsIHBvaW50LCIlcyIsIiVzIiwgJXMsICVzLCAiJXMiLCAlcyApKTsnLAoJCQkJKCgkcGFubz09dHJ1ZSk/JF9wcmVmaXg6IiIpLiJtYXJrZXJzIi4kbWFwX2lkLAoJCQkJJF9wcmVmaXgsICAgICAgICAgICAgICAgIAoJCQkJJG1hcF9pZCwKCQkJCXN0cl9yZXBsYWNlKCciJywnXCInLCRfbWFya2VyWyd0aXRsZSddKSwKCQkJCXN0cl9yZXBsYWNlKCcvJywnXC8nLCRpd19odG1sKSwKCQkJCShpc3NldCgkX21hcmtlclsiaWNvbl9rZXkiXSkpPyJpY29uIi4kbWFwX2lkLiJbJyIuJF9tYXJrZXJbImljb25fa2V5Il0uIiddLmltYWdlIjoiJyciLAoJCQkJKGlzc2V0KCRfbWFya2VyWyJpY29uX2tleSJdKSYmaXNzZXQoJF9tYXJrZXJbInNoYWRvd19pY29uIl0pKT8iaWNvbiIuJG1hcF9pZC4iWyciLiRfbWFya2VyWyJpY29uX2tleSJdLiInXS5zaGFkb3ciOiInJyIsCgkJCQkoKCR0aGlzLT5zaWRlYmFyKT8kdGhpcy0+c2lkZWJhcl9pZDoiIiksCgkJCQkoKGlzc2V0KCRfbWFya2VyWyJvcGVuZXJzIl0pJiZjb3VudCgkX21hcmtlclsib3BlbmVycyJdKT4wKT9qc29uX2VuY29kZSgkX21hcmtlclsib3BlbmVycyJdKToiJyciKQogICAgICAgICAgICApIC4gIlxuIjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYoJHRoaXMtPm1hcmtlcl9jbHVzdGVyZXIgJiYgJHBhbm89PWZhbHNlKXsvL29ubHkgZG8gbWFya2VyIGNsdXN0ZXJlciBmb3IgbWFwLCBub3Qgc3RyZWV0dmlldwogICAgICAgIAkkX291dHB1dCAuPSAiCiAgICAgICAgCSAgIG1hcmtlckNsdXN0ZXJlciIuJG1hcF9pZC4iID0gbmV3IE1hcmtlckNsdXN0ZXJlcigiLiRfcHJlZml4LiRtYXBfaWQuIiwgbWFya2VycyIuJG1hcF9pZC4iLCB7CgkJICAgICAgICAgIG1heFpvb206ICIuJHRoaXMtPm1hcmtlcl9jbHVzdGVyZXJfb3B0aW9uc1sibWF4Wm9vbSJdLiIsCgkJICAgICAgICAgIGdyaWRTaXplOiAiLiR0aGlzLT5tYXJrZXJfY2x1c3RlcmVyX29wdGlvbnNbImdyaWRTaXplIl0uIiwKCQkgICAgICAgICAgc3R5bGVzOiAiLiR0aGlzLT5tYXJrZXJfY2x1c3RlcmVyX29wdGlvbnNbInN0eWxlcyJdLiIKCQkgICAgICAgIH0pOwoJCSAgICAgICAgCQogICAgICAgIAkiOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJF9vdXRwdXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBvdmVycmlkYWJsZSBmdW5jdGlvbiB0byBnZW5lcmF0ZSBwb2x5bGluZSBqcyAtIGZvciBub3cgY2FuIG9ubHkgYmUgdXNlZCBvbiBhIG1hcCwgbm90IGEgc3RyZWV0dmlldwogICAgICovCiAgICBmdW5jdGlvbiBnZXRQb2x5bGluZUpTKCkgewogICAgICAgICRfb3V0cHV0ID0gJyc7CiAgICAgICAgZm9yZWFjaCgkdGhpcy0+X3BvbHlsaW5lcyBhcyAkcG9seWxpbmVfaWQgPT4kX3BvbHlsaW5lKSB7CiAgICAgICAgCSRfY29vcmRzX291dHB1dCA9ICIiOwogICAgICAgIAlmb3JlYWNoKCRfcG9seWxpbmVbImNvb3JkcyJdIGFzICRfY29vcmRzKXsKCQkJCWlmKCRfY29vcmRzX291dHB1dCAhPSAiIil7JF9jb29yZHNfb3V0cHV0Lj0iLCI7fQogICAgICAgIAkJJF9jb29yZHNfb3V0cHV0IC49ICIKICAgICAgICAJCSAgICBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKCIuJF9jb29yZHNbImxhdCJdLiIsICIuJF9jb29yZHNbImxvbmciXS4iKQogICAgICAgIAkJIjsKICAgICAgICAJfQogICAgICAgIAkkX291dHB1dCAuPSAiCiAgICAgICAgCSAgIHBvbHlsaW5lQ29vcmRzIi4kdGhpcy0+bWFwX2lkLiJbJHBvbHlsaW5lX2lkXSA9IFsiLiRfY29vcmRzX291dHB1dC4iXTsgICAgCQoJCQkgICBwb2x5bGluZXMiLiR0aGlzLT5tYXBfaWQuIlskcG9seWxpbmVfaWRdID0gbmV3IGdvb2dsZS5tYXBzLlBvbHlsaW5lKHsKCQkJCSAgcGF0aDogcG9seWxpbmVDb29yZHMiLiR0aGlzLT5tYXBfaWQuIlskcG9seWxpbmVfaWRdCgkJCQkgICIuKCgkX3BvbHlsaW5lWydjb2xvciddIT0iIik/Iiwgc3Ryb2tlQ29sb3I6ICciLiRfcG9seWxpbmVbJ2NvbG9yJ10uIiciOiIiKS4iCgkJCQkgICIuKCgkX3BvbHlsaW5lWydvcGFjaXR5J10hPTApPyIsIHN0cm9rZU9wYWNpdHk6ICIuJF9wb2x5bGluZVsnb3BhY2l0eSddLiIiOiIiKS4iCgkJCQkgICIuKCgkX3BvbHlsaW5lWyd3ZWlnaHQnXSE9MCk/Iiwgc3Ryb2tlV2VpZ2h0OiAiLiRfcG9seWxpbmVbJ3dlaWdodCddLiIiOiIiKS4iCgkJCSAgfSk7CQkJCgkJCSAgcG9seWxpbmVzIi4kdGhpcy0+bWFwX2lkLiJbJHBvbHlsaW5lX2lkXS5zZXRNYXAobWFwIi4kdGhpcy0+bWFwX2lkLiIpOwogICAgICAgIAkiOwoJCQkKCQkJLy9FbGV2YXRpb24gcHJvZmlsZXMKCQkJaWYoIWVtcHR5KCR0aGlzLT5fZWxldmF0aW9uX3BvbHlsaW5lcykgJiYgaXNzZXQoJHRoaXMtPl9lbGV2YXRpb25fcG9seWxpbmVzWyRwb2x5bGluZV9pZF0pKXsKCQkJCSRlbGV2YXRpb25fZG9tX2lkPSR0aGlzLT5fZWxldmF0aW9uX3BvbHlsaW5lc1skcG9seWxpbmVfaWRdWyJkb21faWQiXTsKCQkJCSR3aWR0aCA9ICR0aGlzLT5fZWxldmF0aW9uX3BvbHlsaW5lc1skcG9seWxpbmVfaWRdWyJ3aWR0aCJdOwoJCQkJJGhlaWdodCA9ICR0aGlzLT5fZWxldmF0aW9uX3BvbHlsaW5lc1skcG9seWxpbmVfaWRdWyJoZWlnaHQiXTsKCQkJCSRzYW1wbGVzID0gJHRoaXMtPl9lbGV2YXRpb25fcG9seWxpbmVzWyRwb2x5bGluZV9pZF1bInNhbXBsZXMiXTsKCQkJCSRmb2N1c19jb2xvciA9ICR0aGlzLT5fZWxldmF0aW9uX3BvbHlsaW5lc1skcG9seWxpbmVfaWRdWyJmb2N1c19jb2xvciJdOwoJCQkJJF9vdXRwdXQgLj0gIgoJCQkJCWVsZXZhdGlvblBvbHlsaW5lcyIuJHRoaXMtPm1hcF9pZC4iWyRwb2x5bGluZV9pZF0gPSB7CgkJCQkJCSdzZWxlY3Rvcic6JyRlbGV2YXRpb25fZG9tX2lkJywKCQkJCQkJJ2NoYXJ0JzogbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCckZWxldmF0aW9uX2RvbV9pZCcpKSwKCQkJCQkJJ3NlcnZpY2UnOiBuZXcgZ29vZ2xlLm1hcHMuRWxldmF0aW9uU2VydmljZSgpLAoJCQkJCQknd2lkdGgnOiR3aWR0aCwKCQkJCQkJJ2hlaWdodCc6JGhlaWdodCwKCQkJCQkJJ2ZvY3VzQ29sb3InOickZm9jdXNfY29sb3InLAoJCQkJCQknbWFya2VyJzpudWxsCgkJCQkJfTsKCQkJCQllbGV2YXRpb25Qb2x5bGluZXMiLiR0aGlzLT5tYXBfaWQuIlskcG9seWxpbmVfaWRdWydzZXJ2aWNlJ10uZ2V0RWxldmF0aW9uQWxvbmdQYXRoKHsKCQkJCQkJcGF0aDogcG9seWxpbmVDb29yZHMiLiR0aGlzLT5tYXBfaWQuIlskcG9seWxpbmVfaWRdLAoJCQkJCQlzYW1wbGVzOiAkc2FtcGxlcwoJCQkJCX0sIGZ1bmN0aW9uKHJlc3VsdHMsc3RhdHVzKXtwbG90RWxldmF0aW9uKHJlc3VsdHMsc3RhdHVzLCBlbGV2YXRpb25Qb2x5bGluZXMiLiR0aGlzLT5tYXBfaWQuIlskcG9seWxpbmVfaWRdLCBtYXAiLiR0aGlzLT5tYXBfaWQuIiwgZWxldmF0aW9uQ2hhcnRzIi4kdGhpcy0+bWFwX2lkLiIpO30pOwoJCQkJIjsKCQkJfQoJCX0KICAgICAgICByZXR1cm4gJF9vdXRwdXQ7CiAgICB9CgkKCS8qKgoJICogZnVuY3Rpb24gdG8gcmVuZGVyIHByb3BlciBjYWxscyBmb3IgZGlyZWN0aW9ucyAtIGZvciBub3cgY2FuIG9ubHkgYmUgdXNlZCBvbiBhIG1hcCwgbm90IGEgc3RyZWV0dmlldwoJICovCgkgZnVuY3Rpb24gZ2V0QWRkRGlyZWN0aW9uc0pTKCl7CgkJJF9vdXRwdXQgPSAiIjsgCgkJIAoJCWZvcmVhY2goJHRoaXMtPl9kaXJlY3Rpb25zIGFzICRkaXJlY3Rpb25zKXsKCQkJJGRvbV9pZCA9ICRkaXJlY3Rpb25zWyJkb21faWQiXTsJCQkKCQkJJHRyYXZlbE1vZGVQYXJhbXMgPSBhcnJheSgpOwoJCQkkZGlyZWN0aW9uc1BhcmFtcyA9ICIiOyAgICAgICAgIAoJCQlpZigkdGhpcy0+d2Fsa2luZ19kaXJlY3Rpb25zPT1UUlVFKQoJCQkJJGRpcmVjdGlvbnNQYXJhbXMgLj0gIiwgXG4gdHJhdmVsTW9kZTpnb29nbGUubWFwcy5EaXJlY3Rpb25zVHJhdmVsTW9kZS5XQUxLSU5HIjsKCQkJZWxzZSBpZigkdGhpcy0+YmlraW5nX2RpcmVjdGlvbnM9PVRSVUUpCgkJCQkkZGlyZWN0aW9uc1BhcmFtcyAuPSAiLCBcbiB0cmF2ZWxNb2RlOmdvb2dsZS5tYXBzLkRpcmVjdGlvbnNUcmF2ZWxNb2RlLkJJQ1lDTElORyI7CgkJCWVsc2UKCQkJCSRkaXJlY3Rpb25zUGFyYW1zIC49ICIsIFxuIHRyYXZlbE1vZGU6Z29vZ2xlLm1hcHMuRGlyZWN0aW9uc1RyYXZlbE1vZGUuRFJJVklORyI7CgkJICAgCgkJCWlmKCR0aGlzLT5hdm9pZF9oaWdod2F5cz09VFJVRSkKCQkJICAgJGRpcmVjdGlvbnNQYXJhbXMgLj0gIiwgXG4gYXZvaWRIaWdod2F5czogdHJ1ZSI7CgkJCWlmKCR0aGlzLT5hdm9pZF90b2xsd2F5cz09VFJVRSkKCQkJICAgJGRpcmVjdGlvbnNQYXJhbXMgLj0gIiwgXG4gYXZvaWRUb2xsczogdHJ1ZSI7CQkJCgkJCQoJCQkkX291dHB1dCAuPSAiCgkJCSAgICBkaXJlY3Rpb25zIi4kdGhpcy0+bWFwX2lkLiJbJyRkb21faWQnXSA9IHsKCQkJCQlkaXNwbGF5UmVuZGVyZXI6bmV3IGdvb2dsZS5tYXBzLkRpcmVjdGlvbnNSZW5kZXJlcigpLAoJCQkJCWRpcmVjdGlvblNlcnZpY2U6bmV3IGdvb2dsZS5tYXBzLkRpcmVjdGlvbnNTZXJ2aWNlKCksCgkJCQkJcmVxdWVzdDp7CgkJCQkJCW9yaWdpbjogJyIuJGRpcmVjdGlvbnNbInN0YXJ0Il0uIicsCgkJCQkJCWRlc3RpbmF0aW9uOiAnIi4kZGlyZWN0aW9uc1siZGVzdCJdLiInCgkJCQkJCSRkaXJlY3Rpb25zUGFyYW1zCgkJCQkJfQoJCQkJCSIuKCgkdGhpcy0+ZWxldmF0aW9uX2RpcmVjdGlvbnMpPyIsCQkKCQkJCQkgICBzZWxlY3RvcjogJyIuJGRpcmVjdGlvbnNbImVsZXZhdGlvbl9kb21faWQiXS4iJywKCQkJCQkgICBjaGFydDogbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCciLiRkaXJlY3Rpb25zWyJlbGV2YXRpb25fZG9tX2lkIl0uIicpKSwKCQkJCQkgICBzZXJ2aWNlOiBuZXcgZ29vZ2xlLm1hcHMuRWxldmF0aW9uU2VydmljZSgpLAoJCQkJCSAgIHdpZHRoOiIuJGRpcmVjdGlvbnNbIndpZHRoIl0uIiwKCQkJCQkgICBoZWlnaHQ6Ii4kZGlyZWN0aW9uc1siaGVpZ2h0Il0uIiwKCQkJCQkgICBmb2N1c0NvbG9yOicjMDBGRjAwJywKCQkJCQkgICBtYXJrZXI6bnVsbAoJCQkJICAgIjoiIikuIgoJCQkJfTsKCQkJCWRpcmVjdGlvbnMiLiR0aGlzLT5tYXBfaWQuIlsnJGRvbV9pZCddLmRpc3BsYXlSZW5kZXJlci5zZXRNYXAobWFwIi4kdGhpcy0+bWFwX2lkLiIpOwoJCQkJZGlyZWN0aW9ucyIuJHRoaXMtPm1hcF9pZC4iWyckZG9tX2lkJ10uZGlzcGxheVJlbmRlcmVyLnNldFBhbmVsKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCckZG9tX2lkJykpOwoJCQkJZGlyZWN0aW9ucyIuJHRoaXMtPm1hcF9pZC4iWyckZG9tX2lkJ10uZGlyZWN0aW9uU2VydmljZS5yb3V0ZShkaXJlY3Rpb25zIi4kdGhpcy0+bWFwX2lkLiJbJyRkb21faWQnXS5yZXF1ZXN0LCBmdW5jdGlvbihyZXNwb25zZSwgc3RhdHVzKSB7CgkJCQkJaWYgKHN0YXR1cyA9PSBnb29nbGUubWFwcy5EaXJlY3Rpb25zU3RhdHVzLk9LKSB7CgkJCQkJICAgZGlyZWN0aW9ucyIuJHRoaXMtPm1hcF9pZC4iWyckZG9tX2lkJ10uZGlzcGxheVJlbmRlcmVyLnNldERpcmVjdGlvbnMocmVzcG9uc2UpOwoJCQkJCSAgICIuKCgkdGhpcy0+ZWxldmF0aW9uX2RpcmVjdGlvbnMpPyIKCQkJCQkJICAgZGlyZWN0aW9ucyIuJHRoaXMtPm1hcF9pZC4iWyckZG9tX2lkJ10uc2VydmljZS5nZXRFbGV2YXRpb25BbG9uZ1BhdGgoewoJCQkJCQkJICAgcGF0aDogcmVzcG9uc2Uucm91dGVzWzBdLm92ZXJ2aWV3X3BhdGgsCgkJCQkJCQkgICBzYW1wbGVzOiAiLiRkaXJlY3Rpb25zWyJlbGV2YXRpb25fc2FtcGxlcyJdLiIKCQkJCQkJICAgfSwgZnVuY3Rpb24ocmVzdWx0cyxzdGF0dXMpe3Bsb3RFbGV2YXRpb24ocmVzdWx0cyxzdGF0dXMsIGRpcmVjdGlvbnMiLiR0aGlzLT5tYXBfaWQuIlsnJGRvbV9pZCddLCBtYXAiLiR0aGlzLT5tYXBfaWQuIiwgZWxldmF0aW9uQ2hhcnRzIi4kdGhpcy0+bWFwX2lkLiIpO30pOwoJCQkJCSAgICI6IiIpLiIKCQkJCQl9CgkJCQl9KTsKCQkJICI7CgkJIH0KCQkgCgkJIHJldHVybiAkX291dHB1dDsKCSB9CgkKCS8qKgoJICogZnVuY3Rpb24gdG8gZ2V0IG92ZXJsYXkgY3JlYXRpb24gSlMuCgkgKi8KCSBmdW5jdGlvbiBnZXRBZGRPdmVybGF5SlMoKXsKCQkgJF9vdXRwdXQgPSAiIjsKCQkgZm9yZWFjaCgkdGhpcy0+X292ZXJsYXlzIGFzICRfa2V5PT4kX292ZXJsYXkpewoJCQkgJF9vdXRwdXQgLj0gIgoJCQkgCSB2YXIgYm91bmRzID0gbmV3IGdvb2dsZS5tYXBzLkxhdExuZ0JvdW5kcyhuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKCIuJF9vdmVybGF5WyJib3VuZHMiXVsibmUiXVsibGF0Il0uIiwgIi4kX292ZXJsYXlbImJvdW5kcyJdWyJuZSJdWyJsb25nIl0uIiksIG5ldyBnb29nbGUubWFwcy5MYXRMbmcoIi4kX292ZXJsYXlbImJvdW5kcyJdWyJzdyJdWyJsYXQiXS4iLCAiLiRfb3ZlcmxheVsiYm91bmRzIl1bInN3Il1bImxvbmciXS4iKSk7CgkJCQkgdmFyIGltYWdlID0gJyIuJF9vdmVybGF5WyJpbWciXS4iJzsKCQkJICAgICBvdmVybGF5cyIuJHRoaXMtPm1hcF9pZC4iWyRfa2V5XSA9IG5ldyBDdXN0b21PdmVybGF5KGJvdW5kcywgaW1hZ2UsIG1hcCIuJHRoaXMtPm1hcF9pZC4iLCAiLiRfb3ZlcmxheVsib3BhY2l0eSJdLiIpOwoJCQkgIjsKCQkgfQoJCSByZXR1cm4gJF9vdXRwdXQ7CgkgfQoKICAgIC8qKgogICAgICogb3ZlcnJpZGFibGUgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgdGhlIGpzIGZvciB0aGUganMgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGEgbWFya2VyLgogICAgICovCiAgICBmdW5jdGlvbiBnZXRDcmVhdGVNYXJrZXJKUygpIHsKICAgIAkvLyBEdWtldG93biBjaGFuZ2UKICAgIAkvLyB7bWFya2VyX29wdGlvbnMuc2hhZG93ID0gaWNvbl9zaGFkb3c7fSBhcyBzaG93biBiZWxvdyB1c2VkIHRvIGJlOgogICAgCS8vIHttYXJrZXJfb3B0aW9ucy5pY29uX3NoYWRvdyA9IGljb25fc2hhZG93O30KICAgIAkvLyBEdWtldG93biBjaGFuZ2UgZW5kCiAgICAJJF9vdXRwdXQgPSAiCiAgICAJICAgZnVuY3Rpb24gY3JlYXRlTWFya2VyKG1hcCwgcG9pbnQsIHRpdGxlLCBodG1sLCBpY29uLCBpY29uX3NoYWRvdywgc2lkZWJhcl9pZCwgb3BlbmVycyl7CgkJCSAgICB2YXIgbWFya2VyX29wdGlvbnMgPSB7CgkJCSAgICAgICAgcG9zaXRpb246IHBvaW50LAoJCQkgICAgICAgIG1hcDogbWFwLAoJCQkgICAgICAgIHRpdGxlOiB0aXRsZX07ICAKCQkJICAgIGlmKGljb24hPScnKXttYXJrZXJfb3B0aW9ucy5pY29uID0gaWNvbjt9CgkJCSAgICBpZihpY29uX3NoYWRvdyE9Jycpe21hcmtlcl9vcHRpb25zLnNoYWRvdyA9IGljb25fc2hhZG93O30KCQkJICAgIC8vY3JlYXRlIG1hcmtlcgoJCQkgICAgdmFyIG5ld19tYXJrZXIgPSBuZXcgZ29vZ2xlLm1hcHMuTWFya2VyKG1hcmtlcl9vcHRpb25zKTsKCQkJICAgIGlmKGh0bWwhPScnKXsKCQkJCQkiLigoJHRoaXMtPmluZm9fd2luZG93KT8iCgkJCSAgICAgICAgdmFyIGluZm93aW5kb3cgPSBuZXcgZ29vZ2xlLm1hcHMuSW5mb1dpbmRvdyh7Y29udGVudDogaHRtbH0pOwoJCQkgICAgICAgIGdvb2dsZS5tYXBzLmV2ZW50LmFkZExpc3RlbmVyKG5ld19tYXJrZXIsICciLiR0aGlzLT53aW5kb3dfdHJpZ2dlci4iJywgZnVuY3Rpb24oKSB7CgkJCSAgICAgICAgICBpbmZvd2luZG93Lm9wZW4obWFwLG5ld19tYXJrZXIpOwoJCQkgICAgICAgIH0pOwoJCQkJCWlmKG9wZW5lcnMgIT0gJycmJiFpc0VtcHR5KG9wZW5lcnMpKXsKCQkJICAgICAgICAgICBmb3IodmFyIGkgaW4gb3BlbmVycyl7CgkJCSAgICAgICAgICAgICB2YXIgb3BlbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3BlbmVyc1tpXSk7CgkJCSAgICAgICAgICAgICBvcGVuZXIub24iLiR0aGlzLT53aW5kb3dfdHJpZ2dlci4iID0gZnVuY3Rpb24oKXtpbmZvd2luZG93Lm9wZW4obWFwLG5ld19tYXJrZXIpOyByZXR1cm4gZmFsc2V9OwoJCQkgICAgICAgICAgIH0KCQkJICAgICAgICB9CgkJCQkJIjoiIikuIgoJCQkgICAgICAgIGlmKHNpZGViYXJfaWQgIT0gJycpewoJCQkgICAgICAgICAgICB2YXIgc2lkZWJhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNpZGViYXJfaWQpOwoJCQkJCQlpZihzaWRlYmFyIT1udWxsICYmIHNpZGViYXIhPXVuZGVmaW5lZCAmJiB0aXRsZSE9bnVsbCAmJiB0aXRsZSE9JycpewoJCQkJCQkJdmFyIG5ld2xpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7CgkJCQkJCQkiLigoJHRoaXMtPmluZm9fd2luZG93KT8iCgkJCSAgICAgICAgCQluZXdsaW5rLm9uY2xpY2s9ZnVuY3Rpb24oKXtpbmZvd2luZG93Lm9wZW4obWFwLG5ld19tYXJrZXIpOyByZXR1cm4gZmFsc2V9OwoJCQkJCQkJIjoiCgkJCQkJCQluZXdsaW5rLm9uY2xpY2s9ZnVuY3Rpb24oKXttYXAuc2V0Q2VudGVyKHBvaW50KTsgcmV0dXJuIGZhbHNlfTsKCQkJCQkJCSIpLiIKCQkJCQkJCW5ld2xpbmsuaW5uZXJIVE1MID0gdGl0bGUgKyAnICc7CgkJCQkJCQlzaWRlYmFyLmFwcGVuZENoaWxkKG5ld2xpbmspOwoJCQkJCQl9CgkJCSAgICAgICAgfQogICAgICAgICAgICAgICAgfQoJCQkgICAgcmV0dXJuIG5ld19tYXJrZXI7ICAKCQkJfQogICAgCSI7CiAgICAJcmV0dXJuICRfb3V0cHV0OwogICAgfQoJCgkvKioKCSAqIEdldCBjcmVhdGUgb3ZlcmxheSBqcwoJICovCgkgZnVuY3Rpb24gZ2V0Q3JlYXRlT3ZlcmxheUpTKCl7CgkJICRfb3V0cHV0ID0gIgoJCSAJQ3VzdG9tT3ZlcmxheS5wcm90b3R5cGUgPSBuZXcgZ29vZ2xlLm1hcHMuT3ZlcmxheVZpZXcoKTsJCgkJCWZ1bmN0aW9uIEN1c3RvbU92ZXJsYXkoYm91bmRzLCBpbWFnZSwgbWFwLCBvcGFjaXR5KXsKCQkJCXRoaXMuYm91bmRzXyA9IGJvdW5kczsKCQkJCXRoaXMuaW1hZ2VfID0gaW1hZ2U7CgkJCQl0aGlzLm1hcF8gPSBtYXA7CgkJCQl0aGlzLmRpdl8gPSBudWxsOwoJCQkJdGhpcy5vcGFjaXR5ID0gKG9wYWNpdHkhPScnKT9vcGFjaXR5OjEwOwoJCQkJdGhpcy5zZXRNYXAobWFwKTsKCQkJfQoJCQlDdXN0b21PdmVybGF5LnByb3RvdHlwZS5vbkFkZCA9IGZ1bmN0aW9uKCkgewoJCQkJdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpOwoJCQkJZGl2LnN0eWxlLmJvcmRlclN0eWxlID0gJ25vbmUnOwoJCQkJZGl2LnN0eWxlLmJvcmRlcldpZHRoID0gJzBweCc7CgkJCQlkaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnOwoJCQkJdmFyIGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpOwoJCQkJaW1nLnNyYyA9IHRoaXMuaW1hZ2VfOwoJCQkJaW1nLnN0eWxlLndpZHRoID0gJzEwMCUnOwoJCQkJaW1nLnN0eWxlLmhlaWdodCA9ICcxMDAlJzsKCQkJCWltZy5zdHlsZS5vcGFjaXR5ID0gdGhpcy5vcGFjaXR5LzEwOwoJCQkJaW1nLnN0eWxlLmZpbHRlciA9ICdhbHBoYShvcGFjaXR5PScrdGhpcy5vcGFjaXR5KjEwKycpJzsJCgkJCQlkaXYuYXBwZW5kQ2hpbGQoaW1nKTsKCQkJCXRoaXMuZGl2XyA9IGRpdjsJCgkJCQl2YXIgcGFuZXMgPSB0aGlzLmdldFBhbmVzKCk7CgkJCQlwYW5lcy5vdmVybGF5SW1hZ2UuYXBwZW5kQ2hpbGQoZGl2KTsKCQkJfQoJCQlDdXN0b21PdmVybGF5LnByb3RvdHlwZS5kcmF3ID0gZnVuY3Rpb24oKSB7CgkJCQl2YXIgb3ZlcmxheVByb2plY3Rpb24gPSB0aGlzLmdldFByb2plY3Rpb24oKTsKCQkJCXZhciBzdyA9IG92ZXJsYXlQcm9qZWN0aW9uLmZyb21MYXRMbmdUb0RpdlBpeGVsKHRoaXMuYm91bmRzXy5nZXRTb3V0aFdlc3QoKSk7CgkJCQl2YXIgbmUgPSBvdmVybGF5UHJvamVjdGlvbi5mcm9tTGF0TG5nVG9EaXZQaXhlbCh0aGlzLmJvdW5kc18uZ2V0Tm9ydGhFYXN0KCkpOwoJCQkJdmFyIGRpdiA9IHRoaXMuZGl2XzsKCQkJCWRpdi5zdHlsZS5sZWZ0ID0gc3cueCArICdweCc7CgkJCQlkaXYuc3R5bGUudG9wID0gbmUueSArICdweCc7CgkJCQlkaXYuc3R5bGUud2lkdGggPSAobmUueCAtIHN3LngpICsgJ3B4JzsKCQkJCWRpdi5zdHlsZS5oZWlnaHQgPSAoc3cueSAtIG5lLnkpICsgJ3B4JzsKCQkJfQoJCQlDdXN0b21PdmVybGF5LnByb3RvdHlwZS5vblJlbW92ZSA9IGZ1bmN0aW9uKCkgewoJCQkJdGhpcy5kaXZfLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5kaXZfKTsKCQkJCXRoaXMuZGl2XyA9IG51bGw7CgkJCX0KCQkgIjsJCSAKCQkgcmV0dXJuICRfb3V0cHV0OwoJIH0KCSAKCSAvKioKCSAgKiBwcmludCBoZWxwZXIgZnVuY3Rpb24gdG8gZHJhdyBlbGV2YXRpb24gcmVzdWx0cyBhcyBhIGNoYXJ0CgkgICovCglmdW5jdGlvbiBnZXRQbG90RWxldmF0aW9uSlMoKXsKCQkkX291dHB1dCA9ICIKCQkJZnVuY3Rpb24gcGxvdEVsZXZhdGlvbihyZXN1bHRzLCBzdGF0dXMsIGVsZXZhdGlvbl9kYXRhLCBtYXAsIGNoYXJ0c19hcnJheSkgewoJCQkJY2hhcnRzX2FycmF5W2VsZXZhdGlvbl9kYXRhLnNlbGVjdG9yXSA9IHsKCQkJCQlyZXN1bHRzOnJlc3VsdHMsCgkJCQkJZGF0YTpuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCkKCQkJCX07CgkJCQljaGFydHNfYXJyYXlbZWxldmF0aW9uX2RhdGEuc2VsZWN0b3JdLmRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU2FtcGxlJyk7CgkJCQljaGFydHNfYXJyYXlbZWxldmF0aW9uX2RhdGEuc2VsZWN0b3JdLmRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRWxldmF0aW9uJyk7CgkJCQlmb3IgKHZhciBpID0gMDsgaSA8IGNoYXJ0c19hcnJheVtlbGV2YXRpb25fZGF0YS5zZWxlY3Rvcl0ucmVzdWx0cy5sZW5ndGg7IGkrKykgewoJCQkJICBjaGFydHNfYXJyYXlbZWxldmF0aW9uX2RhdGEuc2VsZWN0b3JdLmRhdGEuYWRkUm93KFsnJywgY2hhcnRzX2FycmF5W2VsZXZhdGlvbl9kYXRhLnNlbGVjdG9yXS5yZXN1bHRzW2ldLmVsZXZhdGlvbl0pOwoJCQkJfQoJCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxldmF0aW9uX2RhdGEuc2VsZWN0b3IpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwoJCQkJZWxldmF0aW9uX2RhdGEuY2hhcnQuZHJhdyhjaGFydHNfYXJyYXlbZWxldmF0aW9uX2RhdGEuc2VsZWN0b3JdLmRhdGEsIHsKCQkJCSAgd2lkdGg6IGVsZXZhdGlvbl9kYXRhLndpZHRoLAoJCQkJICBoZWlnaHQ6IGVsZXZhdGlvbl9kYXRhLmhlaWdodCwKCQkJCSAgbGVnZW5kOiAnbm9uZScsCgkJCQkgIHRpdGxlWTogJ0VsZXZhdGlvbiAobSknLAoJCQkJICBmb2N1c0JvcmRlckNvbG9yOiBlbGV2YXRpb25fZGF0YS5mb2N1c0NvbG9yCgkJCQl9KTsKCQkiOwoJCWlmKCR0aGlzLT5lbGV2YXRpb25fbWFya2Vycyl7CgkJCSRfb3V0cHV0IC49ICR0aGlzLT5nZXRFbGV2YXRpb25NYXJrZXJKUygpOwkJCQoJCX0KCQkkX291dHB1dCAuPSAifSI7CgkJcmV0dXJuICRfb3V0cHV0OwoJfQkgIAoJCgkvKioKCSAqIGNyZWF0ZSBKUyB0aGF0IGlzIGluc2lkZSBvZiBKUyBwbG90IGVsZXZhdGlvbiBmdW5jdGlvbgoJICovCgkgZnVuY3Rpb24gZ2V0RWxldmF0aW9uTWFya2VySlMoKXsKCQkgJF9vdXRwdXQgPSAiCgkJCWdvb2dsZS52aXN1YWxpemF0aW9uLmV2ZW50cy5hZGRMaXN0ZW5lcihlbGV2YXRpb25fZGF0YS5jaGFydCwgJ29ubW91c2VvdmVyJywgZnVuY3Rpb24oZSkgewoJCQkJaWYoZWxldmF0aW9uX2RhdGEubWFya2VyPT1udWxsKXsKCQkJCQllbGV2YXRpb25fZGF0YS5tYXJrZXIgPSBuZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHsKCQkJCQkgIHBvc2l0aW9uOiBjaGFydHNfYXJyYXlbZWxldmF0aW9uX2RhdGEuc2VsZWN0b3JdLnJlc3VsdHNbZS5yb3ddLmxvY2F0aW9uLAoJCQkJCSAgbWFwOiBtYXAsCgkJCQkJICBpY29uOiAnaHR0cDovL21hcHMuZ29vZ2xlLmNvbS9tYXBmaWxlcy9tcy9pY29ucy9ncmVlbi1kb3QucG5nJwoJCQkJCX0pOwoJCQkJfWVsc2V7CgkJCQkJZWxldmF0aW9uX2RhdGEubWFya2VyLnNldFBvc2l0aW9uKGNoYXJ0c19hcnJheVtlbGV2YXRpb25fZGF0YS5zZWxlY3Rvcl0ucmVzdWx0c1tlLnJvd10ubG9jYXRpb24pOwoJCQkJfQoJCQkJbWFwLnNldENlbnRlcihjaGFydHNfYXJyYXlbZWxldmF0aW9uX2RhdGEuc2VsZWN0b3JdLnJlc3VsdHNbZS5yb3ddLmxvY2F0aW9uKTsKCQkJfSk7CgkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZXZhdGlvbl9kYXRhLnNlbGVjdG9yKS5vbm1vdXNlb3V0ID0gZnVuY3Rpb24oKXsKCQkJCWVsZXZhdGlvbl9kYXRhLm1hcmtlciA9IGNsZWFyRWxldmF0aW9uTWFya2VyKGVsZXZhdGlvbl9kYXRhLm1hcmtlcik7CgkJCX07CgkJCWZ1bmN0aW9uIGNsZWFyRWxldmF0aW9uTWFya2VyKG1hcmtlcil7CgkJCSAgaWYobWFya2VyIT1udWxsKXsKCQkJCSAgbWFya2VyLnNldE1hcChudWxsKTsKCQkJCSAgcmV0dXJuIG51bGw7CgkJCSAgfQoJCQl9CgkJIjsKCQlyZXR1cm4gJF9vdXRwdXQ7CgkgfQoJIAoKICAgIC8qKgogICAgICogcHJpbnQgbWFwIChwdXQgYXQgbG9jYXRpb24gbWFwIHdpbGwgYXBwZWFyKQogICAgICogCiAgICAgKi8KICAgIGZ1bmN0aW9uIHByaW50TWFwKCkgewogICAgICAgIGVjaG8gJHRoaXMtPmdldE1hcCgpOwogICAgfQoKICAgIC8qKgogICAgICogcmV0dXJuIG1hcAogICAgICogCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldE1hcCgpIHsKICAgICAgICAkX291dHB1dCA9ICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgY2hhcnNldD0idXRmLTgiPicgLiAiXG4iIC4gJy8vPCFbQ0RBVEFbJyAuICJcbiI7CiAgICAgICAgLy8kX291dHB1dCAuPSAnaWYgKEdCcm93c2VySXNDb21wYXRpYmxlKCkpIHsnIC4gIlxuIjsKICAgICAgICBpZihzdHJsZW4oJHRoaXMtPndpZHRoKSA+IDAgJiYgc3RybGVuKCR0aGlzLT5oZWlnaHQpID4gMCkgewogICAgICAgICAgICAkX291dHB1dCAuPSBzcHJpbnRmKCdkb2N1bWVudC53cml0ZShcJzxkaXYgaWQ9IiVzIiBzdHlsZT0id2lkdGg6ICVzOyBoZWlnaHQ6ICVzOyBwb3NpdGlvbjpyZWxhdGl2ZTsiPjxcL2Rpdj5cJyk7JywkdGhpcy0+bWFwX2lkLCR0aGlzLT53aWR0aCwkdGhpcy0+aGVpZ2h0KSAuICJcbiI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gc3ByaW50ZignZG9jdW1lbnQud3JpdGUoXCc8ZGl2IGlkPSIlcyIgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlOyI+PFwvZGl2PlwnKTsnLCR0aGlzLT5tYXBfaWQpIC4gIlxuIjsgICAgIAogICAgICAgIH0KICAgICAgICAvLyRfb3V0cHV0IC49ICd9JzsKCiAgICAgICAgLy9pZighZW1wdHkoJHRoaXMtPmpzX2FsZXJ0KSkgewogICAgICAgIC8vICAgICRfb3V0cHV0IC49ICcgZWxzZSB7JyAuICJcbiI7CiAgICAgICAgLy8gICAgJF9vdXRwdXQgLj0gc3ByaW50ZignZG9jdW1lbnQud3JpdGUoXCclc1wnKTsnLCBzdHJfcmVwbGFjZSgnLycsJ1wvJywkdGhpcy0+anNfYWxlcnQpKSAuICJcbiI7CiAgICAgICAgLy8gICAgJF9vdXRwdXQgLj0gJ30nIC4gIlxuIjsKICAgICAgICAvL30KCiAgICAgICAgJF9vdXRwdXQgLj0gJy8vXV0+JyAuICJcbiIgLiAnPC9zY3JpcHQ+JyAuICJcbiI7CgogICAgICAgIGlmKCFlbXB0eSgkdGhpcy0+anNfYWxlcnQpKSB7CiAgICAgICAgICAgICRfb3V0cHV0IC49ICc8bm9zY3JpcHQ+JyAuICR0aGlzLT5qc19hbGVydCAuICc8L25vc2NyaXB0PicgLiAiXG4iOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRfb3V0cHV0OwogICAgfQoKICAgIAogICAgLyoqCiAgICAgKiBwcmludCBzaWRlYmFyIChwdXQgYXQgbG9jYXRpb24gc2lkZWJhciB3aWxsIGFwcGVhcikKICAgICAqIAogICAgICovCiAgICBmdW5jdGlvbiBwcmludFNpZGViYXIoKSB7CiAgICAgICAgZWNobyAkdGhpcy0+Z2V0U2lkZWJhcigpOwogICAgfSAgICAKCiAgICAvKioKICAgICAqIHJldHVybiBzaWRlYmFyIGh0bWwKICAgICAqIAogICAgICovCiAgICBmdW5jdGlvbiBnZXRTaWRlYmFyKCkgewogICAgICAgIHJldHVybiBzcHJpbnRmKCc8ZGl2IGlkPSIlcyIgY2xhc3M9IicuJHRoaXMtPnNpZGViYXJfaWQuJyI+PC9kaXY+JywkdGhpcy0+c2lkZWJhcl9pZCkgLiAiXG4iOwogICAgfSAgICAKICAgICAgICAgICAgCiAgICAvKioKICAgICAqIGdldCB0aGUgZ2VvY29kZSBsYXQvbG9uIHBvaW50cyBmcm9tIGdpdmVuIGFkZHJlc3MKICAgICAqIGxvb2sgaW4gY2FjaGUgZmlyc3QsIG90aGVyd2lzZSBnZXQgZnJvbSBZYWhvbwogICAgICogCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhZGRyZXNzCiAgICAgKiBAcmV0dXJuIGFycmF5IEdlb0NvZGUgaW5mb3JtYXRpb24KICAgICAqLwogICAgZnVuY3Rpb24gZ2V0R2VvY29kZSgkYWRkcmVzcykgewogICAgICAgIGlmKGVtcHR5KCRhZGRyZXNzKSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICRfZ2VvY29kZSA9IGZhbHNlOyAgCiAgICAgICAgaWYoKCRfZ2VvY29kZSA9ICR0aGlzLT5nZXRDYWNoZSgkYWRkcmVzcykpID09PSBmYWxzZSkgewogICAgICAgIAlpZigoJF9nZW9jb2RlID0gJHRoaXMtPmdlb0dldENvb3JkcygkYWRkcmVzcykpICE9PSBmYWxzZSkgewogICAgICAgICAgICAJJHRoaXMtPnB1dENhY2hlKCRhZGRyZXNzLCAkX2dlb2NvZGVbJ2xvbiddLCAkX2dlb2NvZGVbJ2xhdCddKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJF9nZW9jb2RlOwogICAgfQogICAKICAgIC8qKgogICAgICogZ2V0IHRoZSBnZW9jb2RlIGxhdC9sb24gcG9pbnRzIGZyb20gY2FjaGUgZm9yIGdpdmVuIGFkZHJlc3MKICAgICAqIAogICAgICogQHBhcmFtIHN0cmluZyAkYWRkcmVzcwogICAgICogQHJldHVybiBib29sfGFycmF5IEZhbHNlIGlmIG5vIGNhY2hlLCBhcnJheSBvZiBkYXRhIGlmIGhhcyBjYWNoZQogICAgICovCiAgICBmdW5jdGlvbiBnZXRDYWNoZSgkYWRkcmVzcykgewogICAgICAgIGlmKCFpc3NldCgkdGhpcy0+ZHNuKSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIAogICAgICAgICRfcmV0ID0gYXJyYXkoKTsKICAgICAgICAKICAgICAgICAvLyBQRUFSIERCCiAgICAgICAgcmVxdWlyZV9vbmNlKCdEQi5waHAnKTsgICAgICAgICAgCiAgICAgICAgJF9kYiA9JiBEQjo6Y29ubmVjdCgkdGhpcy0+ZHNuKTsKICAgICAgICBpZiAoUEVBUjo6aXNFcnJvcigkX2RiKSkgewogICAgICAgICAgICBkaWUoJF9kYi0+Z2V0TWVzc2FnZSgpKTsKICAgICAgICB9CiAgICAgICAgJF9yZXMgPSYgJF9kYi0+cXVlcnkoIlNFTEVDVCBsb24sbGF0IEZST00geyR0aGlzLT5fZGJfY2FjaGVfdGFibGV9IHdoZXJlIGFkZHJlc3MgPSA/IiwgJGFkZHJlc3MpOwogICAgICAgIGlmIChQRUFSOjppc0Vycm9yKCRfcmVzKSkgewogICAgICAgICAgICBkaWUoJF9yZXMtPmdldE1lc3NhZ2UoKSk7CiAgICAgICAgfQogICAgICAgIGlmKCRfcm93ID0gJF9yZXMtPmZldGNoUm93KCkpIHsgICAgICAgICAgICAKICAgICAgICAgICAgJF9yZXRbJ2xvbiddID0gJF9yb3dbMF07CiAgICAgICAgICAgICRfcmV0WydsYXQnXSA9ICRfcm93WzFdOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAkX2RiLT5kaXNjb25uZWN0KCk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuICFlbXB0eSgkX3JldCkgPyAkX3JldCA6IGZhbHNlOwogICAgfQogICAgCiAgICAvKioKICAgICAqIHB1dCB0aGUgZ2VvY29kZSBsYXQvbG9uIHBvaW50cyBpbnRvIGNhY2hlIGZvciBnaXZlbiBhZGRyZXNzCiAgICAgKiAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFkZHJlc3MKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxvbiB0aGUgbWFwIGxhdGl0dWRlIChob3Jpem9udGFsKQogICAgICogQHBhcmFtIHN0cmluZyAkbGF0IHRoZSBtYXAgbGF0aXR1ZGUgKHZlcnRpY2FsKQogICAgICogQHJldHVybiBib29sIFN0YXR1cyBvZiBwdXQgY2FjaGUgcmVxdWVzdAogICAgICovCiAgICBmdW5jdGlvbiBwdXRDYWNoZSgkYWRkcmVzcywgJGxvbiwgJGxhdCkgewogICAgICAgIGlmKCFpc3NldCgkdGhpcy0+ZHNuKSB8fCAoc3RybGVuKCRhZGRyZXNzKSA9PSAwIHx8IHN0cmxlbigkbG9uKSA9PSAwIHx8IHN0cmxlbigkbGF0KSA9PSAwKSkKICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgLy8gUEVBUiBEQgogICAgICAgIHJlcXVpcmVfb25jZSgnREIucGhwJyk7ICAgICAgICAgCiAgICAgICAgJF9kYiA9JiBEQjo6Y29ubmVjdCgkdGhpcy0+ZHNuKTsKICAgICAgICBpZiAoUEVBUjo6aXNFcnJvcigkX2RiKSkgewogICAgICAgIAlkaWUoJF9kYi0+Z2V0TWVzc2FnZSgpKTsKICAgICAgICB9CiAgICAgICAgJF9yZXMgPSYgJF9kYi0+cXVlcnkoJ2luc2VydCBpbnRvICcuJHRoaXMtPl9kYl9jYWNoZV90YWJsZS4nIHZhbHVlcyAoPywgPywgPyknLCBhcnJheSgkYWRkcmVzcywgJGxvbiwgJGxhdCkpOwogICAgICAgIGlmIChQRUFSOjppc0Vycm9yKCRfcmVzKSkgewogICAgICAgICAgICBkaWUoJF9yZXMtPmdldE1lc3NhZ2UoKSk7CiAgICAgICAgfQogICAgICAgICRfZGItPmRpc2Nvbm5lY3QoKTsKICAgICAgICByZXR1cm4gdHJ1ZTsgICAgICAgIAogICAgfQogICAKICAgIC8qKgogICAgICogZ2V0IGdlb2NvZGUgbGF0L2xvbiBwb2ludHMgZm9yIGdpdmVuIGFkZHJlc3MgZnJvbSBZYWhvbwogICAgICogCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhZGRyZXNzCiAgICAgKiBAcmV0dXJuIGJvb2x8YXJyYXkgZmFsc2UgaWYgY2FuJ3QgYmUgZ2VvY29kZWQsIGFycmF5IG9yIGdlb2Nkb2VzIGlmIHN1Y2Nlc3NmdWwKICAgICAqLwogICAgZnVuY3Rpb24gZ2VvR2V0Q29vcmRzKCRhZGRyZXNzLCRkZXB0aD0wKSB7CiAgICAgICAgc3dpdGNoKCR0aGlzLT5sb29rdXBfc2VydmljZSkgewogICAgICAgICAgICBjYXNlICdHT09HTEUnOgogICAgICAgICAgICAgICAgJF91cmwgPSBzcHJpbnRmKCdodHRwOi8vJXMvbWFwcy9hcGkvZ2VvY29kZS9qc29uP3NlbnNvcj0lcyZhZGRyZXNzPSVzJywkdGhpcy0+bG9va3VwX3NlcnZlclsnR09PR0xFJ10sICR0aGlzLT5tb2JpbGU9PXRydWU/InRydWUiOiJmYWxzZSIsIHJhd3VybGVuY29kZSgkYWRkcmVzcykpOwogICAgICAgICAgICAgICAgJF9yZXN1bHQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGlmKCRfcmVzdWx0ID0gJHRoaXMtPmZldGNoVVJMKCRfdXJsKSkgewogICAgICAgICAgICAgICAgICAgICRfcmVzdWx0X3BhcnRzID0ganNvbl9kZWNvZGUoJF9yZXN1bHQpOwogICAgICAgICAgICAgICAgICAgIGlmKCRfcmVzdWx0X3BhcnRzLT5zdGF0dXMhPSJPSyIpewogICAgICAgICAgICAgICAgICAgIAlyZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRfY29vcmRzWydsYXQnXSA9ICRfcmVzdWx0X3BhcnRzLT5yZXN1bHRzWzBdLT5nZW9tZXRyeS0+bG9jYXRpb24tPmxhdDsKICAgICAgICAgICAgICAgICAgICAkX2Nvb3Jkc1snbG9uJ10gPSAkX3Jlc3VsdF9wYXJ0cy0+cmVzdWx0c1swXS0+Z2VvbWV0cnktPmxvY2F0aW9uLT5sbmc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnWUFIT08nOgogICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgCiAgICAgICAgICAgICAgICAkX3VybCA9ICdodHRwOi8vJXMvTWFwc1NlcnZpY2UvVjEvZ2VvY29kZSc7CiAgICAgICAgICAgICAgICAkX3VybCAuPSBzcHJpbnRmKCc/YXBwaWQ9JXMmbG9jYXRpb249JXMnLCR0aGlzLT5sb29rdXBfc2VydmVyWydZQUhPTyddLCR0aGlzLT5hcHBfaWQscmF3dXJsZW5jb2RlKCRhZGRyZXNzKSk7CiAgICAgICAgICAgICAgICAkX3Jlc3VsdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgaWYoJF9yZXN1bHQgPSAkdGhpcy0+ZmV0Y2hVUkwoJF91cmwpKSB7CiAgICAgICAgICAgICAgICAgICAgcHJlZ19tYXRjaCgnITxMYXRpdHVkZT4oLiopPC9MYXRpdHVkZT48TG9uZ2l0dWRlPiguKik8L0xvbmdpdHVkZT4hVScsICRfcmVzdWx0LCAkX21hdGNoKTsKICAgICAgICAgICAgICAgICAgICAkX2Nvb3Jkc1snbG9uJ10gPSAkX21hdGNoWzJdOwogICAgICAgICAgICAgICAgICAgICRfY29vcmRzWydsYXQnXSA9ICRfbWF0Y2hbMV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9ICAgICAgICAgCiAgICAgICAgcmV0dXJuICRfY29vcmRzOyAgICAgICAKICAgIH0KICAgIAoJLyoqCiAgICAgKiBnZXQgZnVsbCBnZW9jb2RlIGluZm9ybWF0aW9uIGZvciBnaXZlbiBhZGRyZXNzIGZyb20gR29vZ2xlCgkgKiBOT1RFOiBUaGlzIGRvZXMgbm90IHVzZSB0aGUgZ2V0Q2FjaGUgZnVuY3Rpb24gYXMgdGhlcmUgaXMgCgkgKiBhIGxvdCBvZiBkYXRhIGluIGEgZnVsbCBnZW9jb2RlIHJlc3BvbnNlIHRvIGNhY2hlLgogICAgICogCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhZGRyZXNzCiAgICAgKiBAcmV0dXJuIGJvb2x8YXJyYXkgZmFsc2UgaWYgY2FuJ3QgYmUgZ2VvY29kZWQsIGFycmF5IG9yIGdlb2Nkb2VzIGlmIHN1Y2Nlc3NmdWwKICAgICAqLwogICAgZnVuY3Rpb24gZ2VvR2V0Q29vcmRzRnVsbCgkYWRkcmVzcywkZGVwdGg9MCkgewogICAgICAgIHN3aXRjaCgkdGhpcy0+bG9va3VwX3NlcnZpY2UpIHsKICAgICAgICAgICAgY2FzZSAnR09PR0xFJzoKICAgICAgICAgICAgICAgICRfdXJsID0gc3ByaW50ZignaHR0cDovLyVzL21hcHMvYXBpL2dlb2NvZGUvanNvbj9zZW5zb3I9JXMmYWRkcmVzcz0lcycsJHRoaXMtPmxvb2t1cF9zZXJ2ZXJbJ0dPT0dMRSddLCAkdGhpcy0+bW9iaWxlPT10cnVlPyJ0cnVlIjoiZmFsc2UiLCByYXd1cmxlbmNvZGUoJGFkZHJlc3MpKTsKICAgICAgICAgICAgICAgICRfcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICBpZigkX3Jlc3VsdCA9ICR0aGlzLT5mZXRjaFVSTCgkX3VybCkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNvbl9kZWNvZGUoJF9yZXN1bHQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ1lBSE9PJzoKICAgICAgICAgICAgZGVmYXVsdDogICAgICAgIAogICAgICAgICAgICAgICAgJF91cmwgPSAnaHR0cDovLyVzL01hcHNTZXJ2aWNlL1YxL2dlb2NvZGUnOwogICAgICAgICAgICAgICAgJF91cmwgLj0gc3ByaW50ZignP2FwcGlkPSVzJmxvY2F0aW9uPSVzJywkdGhpcy0+bG9va3VwX3NlcnZlclsnWUFIT08nXSwkdGhpcy0+YXBwX2lkLHJhd3VybGVuY29kZSgkYWRkcmVzcykpOwogICAgICAgICAgICAgICAgJF9yZXN1bHQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGlmKCRfcmVzdWx0ID0gJHRoaXMtPmZldGNoVVJMKCRfdXJsKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkX21hdGNoOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfSAgICAgICAgIAogICAgfSAgICAKCiAgICAvKioKICAgICAqIGZldGNoIGEgVVJMLiBPdmVycmlkZSB0aGlzIG1ldGhvZCB0byBjaGFuZ2UgdGhlIHdheSBVUkxzIGFyZSBmZXRjaGVkLgogICAgICogCiAgICAgKiBAcGFyYW0gc3RyaW5nICR1cmwKICAgICAqLwogICAgZnVuY3Rpb24gZmV0Y2hVUkwoJHVybCkgewogICAgCS8vIER1a2V0b3duOiBOZXh0IGxpbmUgY29tbWVudGVkIGFuZCBpbmNsdWRlZCBtYXRlcmlhbCBmcm9tIHRoZSBmb2xsb3dpbmcgc2l0ZToKICAgIAkvLyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvcGhwLWdvb2dsZS1tYXAtYXBpL2lzc3Vlcy9kZXRhaWw/aWQ9MTEKICAgIAkvLyByZXR1cm4gZmlsZV9nZXRfY29udGVudHMoJHVybCk7CgkgICAgaWYgKGluaV9nZXQoJ2FsbG93X3VybF9mb3BlbicpKSB7CgkgICAgICAgIHJldHVybiBmaWxlX2dldF9jb250ZW50cygkdXJsKTsKCSAgICB9IGVsc2VpZiAoZnVuY3Rpb25fZXhpc3RzKCdjdXJsX2luaXQnKSkgewoJICAgICAgICAkY3VybE9iaiA9IGN1cmxfaW5pdCgkdXJsKTsKCSAgICAgICAgY3VybF9zZXRvcHQoJGN1cmxPYmosIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIDEpOwoJICAgICAgICBjdXJsX3NldG9wdCgkY3VybE9iaiwgQ1VSTE9QVF9IRUFERVIsIDApOwoJICAgICAgICAkY29udGVudCA9IGN1cmxfZXhlYygkY3VybE9iaik7CgkgICAgICAgIGN1cmxfY2xvc2UoJGN1cmxPYmopOwoJICAgICAgICByZXR1cm4gJGNvbnRlbnQ7CgkgICAgfSBlbHNlIHsKCSAgICAgICAgZGllKCdFcnJvcicpOwoJICAgIH0gCiAgICB9CgogICAgLyoqCiAgICAgKiBnZXQgZGlzdGFuY2UgYmV0d2VlbiB0byBnZW9jb29yZHMgdXNpbmcgZ3JlYXQgY2lyY2xlIGRpc3RhbmNlIGZvcm11bGEKICAgICAqIAogICAgICogQHBhcmFtIGZsb2F0ICRsYXQxCiAgICAgKiBAcGFyYW0gZmxvYXQgJGxhdDIKICAgICAqIEBwYXJhbSBmbG9hdCAkbG9uMQogICAgICogQHBhcmFtIGZsb2F0ICRsb24yCiAgICAgKiBAcGFyYW0gZmxvYXQgJHVuaXQgICBNPW1pbGVzLCBLPWtpbG9tZXRlcnMsIE49bmF1dGljYWwgbWlsZXMsIEk9aW5jaGVzLCBGPWZlZXQKICAgICAqIEByZXR1cm4gZmxvYXQKICAgICAqLwogICAgZnVuY3Rpb24gZ2VvR2V0RGlzdGFuY2UoJGxhdDEsJGxvbjEsJGxhdDIsJGxvbjIsJHVuaXQ9J00nKSB7CiAgICAgICAgCiAgICAgIC8vIGNhbGN1bGF0ZSBtaWxlcwogICAgICAkTSA9ICA2OS4wOSAqIHJhZDJkZWcoYWNvcyhzaW4oZGVnMnJhZCgkbGF0MSkpICogc2luKGRlZzJyYWQoJGxhdDIpKSArICBjb3MoZGVnMnJhZCgkbGF0MSkpICogY29zKGRlZzJyYWQoJGxhdDIpKSAqIGNvcyhkZWcycmFkKCRsb24xIC0gJGxvbjIpKSkpOyAKCiAgICAgIHN3aXRjaChzdHJ0b3VwcGVyKCR1bml0KSkKICAgICAgewogICAgICAgIGNhc2UgJ0snOgogICAgICAgICAgLy8ga2lsb21ldGVycwogICAgICAgICAgcmV0dXJuICRNICogMS42MDkzNDQ7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdOJzoKICAgICAgICAgIC8vIG5hdXRpY2FsIG1pbGVzCiAgICAgICAgICByZXR1cm4gJE0gKiAwLjg2ODk3NjI0MjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ0YnOgogICAgICAgICAgLy8gZmVldAogICAgICAgICAgcmV0dXJuICRNICogNTI4MDsKICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAogICAgICAgIGNhc2UgJ0knOgogICAgICAgICAgLy8gaW5jaGVzCiAgICAgICAgICByZXR1cm4gJE0gKiA2MzM2MDsKICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAogICAgICAgIGNhc2UgJ1QnOgogICAgICAgICAgLy8gbWV0ZXJzCiAgICAgICAgICByZXR1cm4gJE0gKiAxNjA5LjM0NDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ0MnOgogICAgICAgICAgLy8gQ2VudGltZXRlcnMKICAgICAgICAgIHJldHVybiAkTSAqIDE2MDkzNDQ7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdNJzoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgLy8gbWlsZXMKICAgICAgICAgIHJldHVybiAkTTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIAogICAgfSAgICAKICAgIAp9Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/GoogleMapAPI-3.0/JSMin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIGpzbWluLnBocCAtIFBIUCBpbXBsZW1lbnRhdGlvbiBvZiBEb3VnbGFzIENyb2NrZm9yZCdzIEpTTWluLgogKgogKiBUaGlzIGlzIGEgZGlyZWN0IHBvcnQgb2YganNtaW4uYyB0byBQSFAgd2l0aCBhIGZldyBQSFAgcGVyZm9ybWFuY2UgdHdlYWtzIGFuZAogKiBtb2RpZmljYXRpb25zIHRvIHByZXNlcnZlIHNvbWUgY29tbWVudHMgKHNlZSBiZWxvdykuIEFsc28sIHJhdGhlciB0aGFuIHVzaW5nCiAqIHN0ZGluL3N0ZG91dCwgSlNNaW46Om1pbmlmeSgpIGFjY2VwdHMgYSBzdHJpbmcgYXMgaW5wdXQgYW5kIHJldHVybnMgYW5vdGhlcgogKiBzdHJpbmcgYXMgb3V0cHV0LgogKiAKICogQ29tbWVudHMgY29udGFpbmluZyBJRSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhcmUgcHJlc2VydmVkLCBhcyBhcmUgbXVsdGktbGluZQogKiBjb21tZW50cyB0aGF0IGJlZ2luIHdpdGggIi8qISIgKGZvciBkb2N1bWVudGF0aW9uIHB1cnBvc2VzKS4gSW4gdGhlIGxhdHRlciBjYXNlCiAqIG5ld2xpbmVzIGFyZSBpbnNlcnRlZCBhcm91bmQgdGhlIGNvbW1lbnQgdG8gZW5oYW5jZSByZWFkYWJpbGl0eS4KICoKICogUEhQIDUgb3IgaGlnaGVyIGlzIHJlcXVpcmVkLgogKgogKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIHVzZSB0aGlzIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgdW5kZXIgdGhlCiAqIHNhbWUgdGVybXMgYXMganNtaW4uYywgd2hpY2ggaGFzIHRoZSBmb2xsb3dpbmcgbGljZW5zZToKICoKICogLS0KICogQ29weXJpZ2h0IChjKSAyMDAyIERvdWdsYXMgQ3JvY2tmb3JkICAod3d3LmNyb2NrZm9yZC5jb20pCiAqCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YKICogdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4KICogdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwogKiB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcwogKiBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8KICogc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogKgogKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KICoKICogVGhlIFNvZnR3YXJlIHNoYWxsIGJlIHVzZWQgZm9yIEdvb2QsIG5vdCBFdmlsLgogKgogKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgogKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKICogU09GVFdBUkUuCiAqIC0tCiAqCiAqIEBwYWNrYWdlIEpTTWluCiAqIEBhdXRob3IgUnlhbiBHcm92ZSA8cnlhbkB3b25rby5jb20+IChQSFAgcG9ydCkKICogQGF1dGhvciBTdGV2ZSBDbGF5IDxzdGV2ZUBtcmNsYXkub3JnPiAobW9kaWZpY2F0aW9ucyArIGNsZWFudXApCiAqIEBhdXRob3IgQW5kcmVhIEdpYW1tYXJjaGkgPGh0dHA6Ly93d3cuM3NpdGUuZXU+IChzcGFjZUJlZm9yZVJlZ0V4cCkKICogQGNvcHlyaWdodCAyMDAyIERvdWdsYXMgQ3JvY2tmb3JkIDxkb3VnbGFzQGNyb2NrZm9yZC5jb20+IChqc21pbi5jKQogKiBAY29weXJpZ2h0IDIwMDggUnlhbiBHcm92ZSA8cnlhbkB3b25rby5jb20+IChQSFAgcG9ydCkKICogQGxpY2Vuc2UgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocCBNSVQgTGljZW5zZQogKiBAbGluayBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvanNtaW4tcGhwLwogKi8KCmNsYXNzIEpTTWluIHsKICAgIGNvbnN0IE9SRF9MRiAgICAgICAgICAgID0gMTA7CiAgICBjb25zdCBPUkRfU1BBQ0UgICAgICAgICA9IDMyOwogICAgY29uc3QgQUNUSU9OX0tFRVBfQSAgICAgPSAxOwogICAgY29uc3QgQUNUSU9OX0RFTEVURV9BICAgPSAyOwogICAgY29uc3QgQUNUSU9OX0RFTEVURV9BX0IgPSAzOwogICAgCiAgICBwcm90ZWN0ZWQgJGEgICAgICAgICAgID0gIlxuIjsKICAgIHByb3RlY3RlZCAkYiAgICAgICAgICAgPSAnJzsKICAgIHByb3RlY3RlZCAkaW5wdXQgICAgICAgPSAnJzsKICAgIHByb3RlY3RlZCAkaW5wdXRJbmRleCAgPSAwOwogICAgcHJvdGVjdGVkICRpbnB1dExlbmd0aCA9IDA7CiAgICBwcm90ZWN0ZWQgJGxvb2tBaGVhZCAgID0gbnVsbDsKICAgIHByb3RlY3RlZCAkb3V0cHV0ICAgICAgPSAnJzsKICAgIAogICAgLyoqCiAgICAgKiBNaW5pZnkgSmF2YXNjcmlwdAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGpzIEphdmFzY3JpcHQgdG8gYmUgbWluaWZpZWQKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWluaWZ5KCRqcykKICAgIHsKICAgICAgICAkanNtaW4gPSBuZXcgSlNNaW4oJGpzKTsKICAgICAgICByZXR1cm4gJGpzbWluLT5taW4oKTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBTZXR1cCBwcm9jZXNzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkaW5wdXQpCiAgICB7CiAgICAgICAgJHRoaXMtPmlucHV0ICAgICAgID0gc3RyX3JlcGxhY2UoIlxyXG4iLCAiXG4iLCAkaW5wdXQpOwogICAgICAgICR0aGlzLT5pbnB1dExlbmd0aCA9IHN0cmxlbigkdGhpcy0+aW5wdXQpOwogICAgfQogICAgCiAgICAvKioKICAgICAqIFBlcmZvcm0gbWluaWZpY2F0aW9uLCByZXR1cm4gcmVzdWx0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtaW4oKQogICAgewogICAgICAgIGlmICgkdGhpcy0+b3V0cHV0ICE9PSAnJykgeyAvLyBtaW4gYWxyZWFkeSBydW4KICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5vdXRwdXQ7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5hY3Rpb24oc2VsZjo6QUNUSU9OX0RFTEVURV9BX0IpOwogICAgICAgIAogICAgICAgIHdoaWxlICgkdGhpcy0+YSAhPT0gbnVsbCkgewogICAgICAgICAgICAvLyBkZXRlcm1pbmUgbmV4dCBjb21tYW5kCiAgICAgICAgICAgICRjb21tYW5kID0gc2VsZjo6QUNUSU9OX0tFRVBfQTsgLy8gZGVmYXVsdAogICAgICAgICAgICBpZiAoJHRoaXMtPmEgPT09ICcgJykgewogICAgICAgICAgICAgICAgaWYgKCEgJHRoaXMtPmlzQWxwaGFOdW0oJHRoaXMtPmIpKSB7CiAgICAgICAgICAgICAgICAgICAgJGNvbW1hbmQgPSBzZWxmOjpBQ1RJT05fREVMRVRFX0E7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZWlmICgkdGhpcy0+YSA9PT0gIlxuIikgewogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5iID09PSAnICcpIHsKICAgICAgICAgICAgICAgICAgICAkY29tbWFuZCA9IHNlbGY6OkFDVElPTl9ERUxFVEVfQV9COwogICAgICAgICAgICAgICAgfSBlbHNlaWYgKGZhbHNlID09PSBzdHJwb3MoJ3tbKCstJywgJHRoaXMtPmIpIAogICAgICAgICAgICAgICAgICAgICAgICAgICYmICEgJHRoaXMtPmlzQWxwaGFOdW0oJHRoaXMtPmIpKSB7CiAgICAgICAgICAgICAgICAgICAgJGNvbW1hbmQgPSBzZWxmOjpBQ1RJT05fREVMRVRFX0E7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZWlmICghICR0aGlzLT5pc0FscGhhTnVtKCR0aGlzLT5hKSkgewogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5iID09PSAnICcKICAgICAgICAgICAgICAgICAgICB8fCAoJHRoaXMtPmIgPT09ICJcbiIgCiAgICAgICAgICAgICAgICAgICAgICAgICYmIChmYWxzZSA9PT0gc3RycG9zKCd9XSkrLSJcJycsICR0aGlzLT5hKSkpKSB7CiAgICAgICAgICAgICAgICAgICAgJGNvbW1hbmQgPSBzZWxmOjpBQ1RJT05fREVMRVRFX0FfQjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAkdGhpcy0+YWN0aW9uKCRjb21tYW5kKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPm91dHB1dCA9IHRyaW0oJHRoaXMtPm91dHB1dCk7CiAgICAgICAgcmV0dXJuICR0aGlzLT5vdXRwdXQ7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogQUNUSU9OX0tFRVBfQSA9IE91dHB1dCBBLiBDb3B5IEIgdG8gQS4gR2V0IHRoZSBuZXh0IEIuCiAgICAgKiBBQ1RJT05fREVMRVRFX0EgPSBDb3B5IEIgdG8gQS4gR2V0IHRoZSBuZXh0IEIuCiAgICAgKiBBQ1RJT05fREVMRVRFX0FfQiA9IEdldCB0aGUgbmV4dCBCLgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYWN0aW9uKCRjb21tYW5kKQogICAgewogICAgICAgIHN3aXRjaCAoJGNvbW1hbmQpIHsKICAgICAgICAgICAgY2FzZSBzZWxmOjpBQ1RJT05fS0VFUF9BOgogICAgICAgICAgICAgICAgJHRoaXMtPm91dHB1dCAuPSAkdGhpcy0+YTsKICAgICAgICAgICAgICAgIC8vIGZhbGx0aHJvdWdoCiAgICAgICAgICAgIGNhc2Ugc2VsZjo6QUNUSU9OX0RFTEVURV9BOgogICAgICAgICAgICAgICAgJHRoaXMtPmEgPSAkdGhpcy0+YjsKICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+YSA9PT0gIiciIHx8ICR0aGlzLT5hID09PSAnIicpIHsgLy8gc3RyaW5nIGxpdGVyYWwKICAgICAgICAgICAgICAgICAgICAkc3RyID0gJHRoaXMtPmE7IC8vIGluIGNhc2UgbmVlZGVkIGZvciBleGNlcHRpb24KICAgICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+b3V0cHV0IC49ICR0aGlzLT5hOwogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+YSAgICAgICA9ICR0aGlzLT5nZXQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5hID09PSAkdGhpcy0+YikgeyAvLyBlbmQgcXVvdGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcmQoJHRoaXMtPmEpIDw9IHNlbGY6Ok9SRF9MRikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpTTWluX1VudGVybWluYXRlZFN0cmluZ0V4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVW50ZXJtaW5hdGVkIFN0cmluZzogJyAuIHZhcl9leHBvcnQoJHN0ciwgdHJ1ZSkpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICRzdHIgLj0gJHRoaXMtPmE7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+YSA9PT0gJ1xcJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm91dHB1dCAuPSAkdGhpcy0+YTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5hICAgICAgID0gJHRoaXMtPmdldCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0ciAuPSAkdGhpcy0+YTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIGZhbGx0aHJvdWdoCiAgICAgICAgICAgIGNhc2Ugc2VsZjo6QUNUSU9OX0RFTEVURV9BX0I6CiAgICAgICAgICAgICAgICAkdGhpcy0+YiA9ICR0aGlzLT5uZXh0KCk7CiAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmIgPT09ICcvJyAmJiAkdGhpcy0+aXNSZWdleHBMaXRlcmFsKCkpIHsgLy8gUmVnRXhwIGxpdGVyYWwKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+b3V0cHV0IC49ICR0aGlzLT5hIC4gJHRoaXMtPmI7CiAgICAgICAgICAgICAgICAgICAgJHBhdHRlcm4gPSAnLyc7IC8vIGluIGNhc2UgbmVlZGVkIGZvciBleGNlcHRpb24KICAgICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+YSA9ICR0aGlzLT5nZXQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgJHBhdHRlcm4gLj0gJHRoaXMtPmE7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+YSA9PT0gJy8nKSB7IC8vIGVuZCBwYXR0ZXJuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gd2hpbGUgKHRydWUpCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkdGhpcy0+YSA9PT0gJ1xcJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm91dHB1dCAuPSAkdGhpcy0+YTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5hICAgICAgID0gJHRoaXMtPmdldCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBhdHRlcm4gICAgICAuPSAkdGhpcy0+YTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKG9yZCgkdGhpcy0+YSkgPD0gc2VsZjo6T1JEX0xGKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSlNNaW5fVW50ZXJtaW5hdGVkUmVnRXhwRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdVbnRlcm1pbmF0ZWQgUmVnRXhwOiAnLiB2YXJfZXhwb3J0KCRwYXR0ZXJuLCB0cnVlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm91dHB1dCAuPSAkdGhpcy0+YTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmIgPSAkdGhpcy0+bmV4dCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBlbmQgY2FzZSBBQ1RJT05fREVMRVRFX0FfQgogICAgICAgIH0KICAgIH0KICAgIAogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGlzUmVnZXhwTGl0ZXJhbCgpCiAgICB7CiAgICAgICAgaWYgKGZhbHNlICE9PSBzdHJwb3MoIlxuezsoLD06WyEmfD8iLCAkdGhpcy0+YSkpIHsgLy8gd2UgYXJlbid0IGRpdmlkaW5nCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoJyAnID09PSAkdGhpcy0+YSkgewogICAgICAgICAgICAkbGVuZ3RoID0gc3RybGVuKCR0aGlzLT5vdXRwdXQpOwogICAgICAgICAgICBpZiAoJGxlbmd0aCA8IDIpIHsgLy8gd2VpcmQgZWRnZSBjYXNlCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyB5b3UgY2FuJ3QgZGl2aWRlIGEga2V5d29yZAogICAgICAgICAgICBpZiAocHJlZ19tYXRjaCgnLyg/OmNhc2V8ZWxzZXxpbnxyZXR1cm58dHlwZW9mKSQvJywgJHRoaXMtPm91dHB1dCwgJG0pKSB7CiAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPm91dHB1dCA9PT0gJG1bMF0pIHsgLy8gb2RkIGJ1dCBjb3VsZCBoYXBwZW4KICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBpdCdzIGEga2V5d29yZCwgbm90IGVuZCBvZiBhbiBpZGVudGlmaWVyCiAgICAgICAgICAgICAgICAkY2hhckJlZm9yZUtleXdvcmQgPSBzdWJzdHIoJHRoaXMtPm91dHB1dCwgJGxlbmd0aCAtIHN0cmxlbigkbVswXSkgLSAxLCAxKTsKICAgICAgICAgICAgICAgIGlmICghICR0aGlzLT5pc0FscGhhTnVtKCRjaGFyQmVmb3JlS2V5d29yZCkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogR2V0IG5leHQgY2hhci4gQ29udmVydCBjdHJsIGNoYXIgdG8gc3BhY2UuCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXQoKQogICAgewogICAgICAgICRjID0gJHRoaXMtPmxvb2tBaGVhZDsKICAgICAgICAkdGhpcy0+bG9va0FoZWFkID0gbnVsbDsKICAgICAgICBpZiAoJGMgPT09IG51bGwpIHsKICAgICAgICAgICAgaWYgKCR0aGlzLT5pbnB1dEluZGV4IDwgJHRoaXMtPmlucHV0TGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAkYyA9ICR0aGlzLT5pbnB1dFskdGhpcy0+aW5wdXRJbmRleF07CiAgICAgICAgICAgICAgICAkdGhpcy0+aW5wdXRJbmRleCArPSAxOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCRjID09PSAiXHIiIHx8ICRjID09PSAiXG4iKSB7CiAgICAgICAgICAgIHJldHVybiAiXG4iOwogICAgICAgIH0KICAgICAgICBpZiAob3JkKCRjKSA8IHNlbGY6Ok9SRF9TUEFDRSkgeyAvLyBjb250cm9sIGNoYXIKICAgICAgICAgICAgcmV0dXJuICcgJzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRjOwogICAgfQogICAgCiAgICAvKioKICAgICAqIEdldCBuZXh0IGNoYXIuIElmIGlzIGN0cmwgY2hhcmFjdGVyLCB0cmFuc2xhdGUgdG8gYSBzcGFjZSBvciBuZXdsaW5lLgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gcGVlaygpCiAgICB7CiAgICAgICAgJHRoaXMtPmxvb2tBaGVhZCA9ICR0aGlzLT5nZXQoKTsKICAgICAgICByZXR1cm4gJHRoaXMtPmxvb2tBaGVhZDsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBJcyAkYyBhIGxldHRlciwgZGlnaXQsIHVuZGVyc2NvcmUsIGRvbGxhciBzaWduLCBlc2NhcGUsIG9yIG5vbi1BU0NJST8KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGlzQWxwaGFOdW0oJGMpCiAgICB7CiAgICAgICAgcmV0dXJuIChwcmVnX21hdGNoKCcvXlswLTlhLXpBLVpfXFwkXFxcXF0kLycsICRjKSB8fCBvcmQoJGMpID4gMTI2KTsKICAgIH0KICAgIAogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHNpbmdsZUxpbmVDb21tZW50KCkKICAgIHsKICAgICAgICAkY29tbWVudCA9ICcnOwogICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICRnZXQgPSAkdGhpcy0+Z2V0KCk7CiAgICAgICAgICAgICRjb21tZW50IC49ICRnZXQ7CiAgICAgICAgICAgIGlmIChvcmQoJGdldCkgPD0gc2VsZjo6T1JEX0xGKSB7IC8vIEVPTCByZWFjaGVkCiAgICAgICAgICAgICAgICAvLyBpZiBJRSBjb25kaXRpb25hbCBjb21tZW50CiAgICAgICAgICAgICAgICBpZiAocHJlZ19tYXRjaCgnL15cXC9AKD86Y2Nfb258aWZ8ZWxpZnxlbHNlfGVuZClcXGIvJywgJGNvbW1lbnQpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICIveyRjb21tZW50fSI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gJGdldDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIAogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIG11bHRpcGxlTGluZUNvbW1lbnQoKQogICAgewogICAgICAgICR0aGlzLT5nZXQoKTsKICAgICAgICAkY29tbWVudCA9ICcnOwogICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICRnZXQgPSAkdGhpcy0+Z2V0KCk7CiAgICAgICAgICAgIGlmICgkZ2V0ID09PSAnKicpIHsKICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+cGVlaygpID09PSAnLycpIHsgLy8gZW5kIG9mIGNvbW1lbnQgcmVhY2hlZAogICAgICAgICAgICAgICAgICAgICR0aGlzLT5nZXQoKTsKICAgICAgICAgICAgICAgICAgICAvLyBpZiBjb21tZW50IHByZXNlcnZlZCBieSBZVUkgQ29tcHJlc3NvcgogICAgICAgICAgICAgICAgICAgIGlmICgwID09PSBzdHJwb3MoJGNvbW1lbnQsICchJykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJcbi8qIiAuIHN1YnN0cigkY29tbWVudCwgMSkgLiAiKi9cbiI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIC8vIGlmIElFIGNvbmRpdGlvbmFsIGNvbW1lbnQKICAgICAgICAgICAgICAgICAgICBpZiAocHJlZ19tYXRjaCgnL15AKD86Y2Nfb258aWZ8ZWxpZnxlbHNlfGVuZClcXGIvJywgJGNvbW1lbnQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiLyp7JGNvbW1lbnR9Ki8iOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyAnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2VpZiAoJGdldCA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpTTWluX1VudGVybWluYXRlZENvbW1lbnRFeGNlcHRpb24oJ1VudGVybWluYXRlZCBDb21tZW50OiAnIC4gdmFyX2V4cG9ydCgnLyonIC4gJGNvbW1lbnQsIHRydWUpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkY29tbWVudCAuPSAkZ2V0OwogICAgICAgIH0KICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBHZXQgdGhlIG5leHQgY2hhcmFjdGVyLCBza2lwcGluZyBvdmVyIGNvbW1lbnRzLgogICAgICogU29tZSBjb21tZW50cyBtYXkgYmUgcHJlc2VydmVkLgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gbmV4dCgpCiAgICB7CiAgICAgICAgJGdldCA9ICR0aGlzLT5nZXQoKTsKICAgICAgICBpZiAoJGdldCAhPT0gJy8nKSB7CiAgICAgICAgICAgIHJldHVybiAkZ2V0OwogICAgICAgIH0KICAgICAgICBzd2l0Y2ggKCR0aGlzLT5wZWVrKCkpIHsKICAgICAgICAgICAgY2FzZSAnLyc6IHJldHVybiAkdGhpcy0+c2luZ2xlTGluZUNvbW1lbnQoKTsKICAgICAgICAgICAgY2FzZSAnKic6IHJldHVybiAkdGhpcy0+bXVsdGlwbGVMaW5lQ29tbWVudCgpOwogICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gJGdldDsKICAgICAgICB9CiAgICB9Cn0KCmNsYXNzIEpTTWluX1VudGVybWluYXRlZFN0cmluZ0V4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbiB7fQpjbGFzcyBKU01pbl9VbnRlcm1pbmF0ZWRDb21tZW50RXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHt9CmNsYXNzIEpTTWluX1VudGVybWluYXRlZFJlZ0V4cEV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbiB7fQo=]]></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+ZGItPnFzdHIoICRfUE9TVFska10gKSAuICIsICI7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhdmUgdmFsdWVzIGZvciB1c2FnZSBpbiBkZWZhdWx0YWRtaW4ucGhwCgkJICAgICAgICAgICAgICAgICAgCXN3aXRjaCAoJGspIHsKCQkJCQkJCQkJCQkJCWNhc2UgJ2NlbnRlcl9sYXQnOgoJCQkJCQkJCQkJCQkJY2FzZSAnbGF0JzoKCQkJCQkJCQkJCQkJCQkkdGhpcy0+Y2VudGVyX2xhdCA9ICR0aGlzLT5kYi0+cXN0ciggJF9QT1NUWyRrXSApOyAKCQkJCQkJCQkJCQkJCQlicmVhazsKCQkJCQkJCQkJCQkJCWNhc2UgJ2NlbnRlcl9sb24nOgoJCQkJCQkJCQkJCQkJY2FzZSAnbG9uJzoKCQkJCQkJCQkJCQkJCQkkdGhpcy0+Y2VudGVyX2xvbiA9ICR0aGlzLT5kYi0+cXN0ciggJF9QT1NUWyRrXSApOyAKCQkJCQkJCQkJCQkJCQlicmVhazsKCQkJCQkJCQkJCQkJCWNhc2UgJ3pvb20nOgoJCQkJCQkJCQkJCQkJCSR0aGlzLT56b29tID0gJHRoaXMtPmRiLT5xc3RyKCAkX1BPU1RbJGtdICk7IAoJCQkJCQkJCQkJCQkJCWJyZWFrOwoJCQkJCQkJCQkJCQkJZGVmYXVsdDoKCQkJCQkJCQkJCQkJfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICNzZWNvbmQgdGFrZSBvZmYgdGhlIGxhc3QgJywgJwogICAgICAgICAgICAgICAgICAkc3FsID0gZXJlZ19yZXBsYWNlKCAiLCAkIiAsICIiICwgJHNxbCApOwogICAgICAgICAgICAgICAgICAkc3FsID0gIlVQREFURSAiLiR0aGlzLT50YWJsZS4iIFNFVCAiLiRzcWwuIiBXSEVSRSAiLiR0aGlzLT5rZXkuIiA9ICIuJHRoaXMtPmRiLT5xc3RyKCAkX0dFVFsncmNydWRfaWQnXSApLiIgTElNSVQgMSI7CiAgICAgICAgICAgICAgICAgICRxciA9ICR0aGlzLT5kYi0+RXhlY3V0ZSggJHNxbCApIG9yIGRpZSggIlJDUlVEIEVkaXQgU1FMIFByb2JsZW06ICIuJHRoaXMtPmRiLT5FcnJvck1zZygpICk7CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICBlY2hvICI8cD5Zb3VyIGl0ZW0gaGFzIGJlZW4gdXBkYXRlZC48L3A+IjsKICAgICAgICAgICAgICAgICAgJHRoaXMtPm1ha2VfcmV0dXJuX2xpbmsoKTsKICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgfQoKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKICAgICAgICAgCiAgICAgICAgICAgICNmaWxsICRfUE9TVCB3aXRoIHRoZSB2YWx1ZXMgb25lIHRpbWUsIG9uIGZpcnN0IHZpc2l0LgogICAgICAgICAgICAkcSA9ICJTRUxFQ1QgKiBGUk9NICIuJHRoaXMtPnRhYmxlLiIgV0hFUkUgIi4kdGhpcy0+a2V5LiIgPSAiLiR0aGlzLT5kYi0+cXN0ciggJF9HRVRbJ3JjcnVkX2lkJ10gKTsKICAgICAgICAgICAgJHFyID0gJHRoaXMtPmRiLT5FeGVjdXRlKCAkcSApIG9yIGRpZSggIlJDUlVEIEVkaXQgVmFsdWVzIEZpbGw6ICIuJHRoaXMtPmRiLT5FcnJvck1zZygpICk7CiAgICAgICAgICAgICRyb3cgPSAkcXItPkZldGNoUm93KCk7CiAgICAgICAgICAgICRfUE9TVCA9ICRyb3c7CiAgICAgICAgIH0KICAgICAgCiAgICAgICAgICNtYWtlIHRoZSBmb3JtCiAgICAgICAgICR0aGlzLT5tYWtlX2Zvcm0oICJ2aXNpYmxlX2luX2VkaXQiLCAiU2F2ZSIgLCAkZXJyb3JzICk7CiAgICAgICAgICR0aGlzLT5tYWtlX3JldHVybl9saW5rKCk7CiAgICAgICAgIAogICAgICB9ICAgICAgCgoKCiAgICAgICN0aGlzIG1ha2VzIHRoZSBmb3JtIGZvciBhZGQgYW5kIGVkaXQKICAgICAgI3Nob3cgdGhlIG9uZXMgdGhhdCBoYXZlIHRoZSB2aXNpYmlsaXR5CiAgICAgICNwbGFjZSBzdWJsYWJlbCBvbiB0aGUgc3VibWl0IGJ1dHRvbgogICAgICAjc2hvdyB0aGVzZSBlcnJvcnMgd2hlcmUgbmVlZGVkCiAgICAgIGZ1bmN0aW9uIG1ha2VfZm9ybSggJHZpc2liaWxpdHksICRzdWJsYWJlbCwgJGVycm9ycyApCiAgICAgIHsKICAgICAgICAgICAgI3RoaXMgZm9ybSBwb3N0cyB0byBpdHNlbGYgc28gbm8gYWN0aW9uIHNwZWNpZmllZAogICAgICAgICAgICBlY2hvICI8Zm9ybSBtZXRob2Q9XCJQT1NUXCI+XG4iOwogICAgICAgICAgICBlY2hvICI8dGFibGUgY2xhc3M9XCJwYWdldGFibGVcIiB3aWR0aD1cIjEwMCVcIj5cbiI7CiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgZm9yZWFjaCggJHRoaXMtPmZpZWxkcyBhcyAkayA9PiAkdiApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgICAgIGlmKCAkdlskdmlzaWJpbGl0eV0gKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlmKCBpc3NldCggJGVycm9yc1ska10gKSApCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHRyPjx0ZCBjb2xzcGFuPVwiMlwiPiI7CiAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjxzcGFuIHN0eWxlPVwiY29sb3I6ICIuJHRoaXMtPmVycm9yY29sb3IuIjtcIj4iOwogICAgICAgICAgICAgICAgICAgICBlY2hvICR2WydmaWVsZF9lcnJvciddOwogICAgICAgICAgICAgICAgICAgICBlY2hvICI8L3NwYW4+PC90ZD48L3RyPlxuIjsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgIGVjaG8gIjx0cj5cbiI7CiAgIAogICAgICAgICAgICAgICAgICBlY2hvICIgPHRkIHZhbGlnbj1cIlRPUFwiPiIuJHZbJ2xhYmVsJ10uIjwvdGQ+XG4iOwogICAKICAgICAgICAgICAgICAgICAgZWNobyAiIDx0ZD5cbiI7CgoJCQkJCQkJCSAgaWYoIWlzc2V0KCRfUE9TVFska10pKSB7CgkJCQkJCQkJICAgICRfUE9TVFska10gPSAnJzsKCQkJCQkJCQkgIH0KCiAgICAgICAgICAgICAgICAgIHN3aXRjaCggJHZbJ2ZpZWxkX3R5cGUnXSApCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSAidGV4dCI6CiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoJGspIAoJCQkJCQkJCQkJCQl7CgkgICAgICAgICAgICAgICAgICAgICAgICAvLyBTcGVjaWFsIHRyZWF0ZW1lbnQgb2YgdGhlIGljb24gZmllbGQsIHNpbmNlIGl0IHNob3VsZCBiZSBhIGRyb3Bkb3duIGxpc3Qgb2YgYXZhaWxhYmxlIG1hcmtlciBpbWFnZXMKCSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ljb24nOgoJCQkJCQkJCQkJCQkJCS8vIE9wZW4gaW1hZ2VzIGRpcmVjdG9yeSBhbmQgbGlzdCBpdHMgY29udGVudHMKCQkJCQkJCQkJCQkJCQlpZiAoZmlsZV9leGlzdHMoICR0aGlzLT5wYXRoICkpIHsKCQkJCQkJCQkJCQkJCQkJJGZpbGVjb3VudCA9IDA7CgkJCQkJCQkJCQkJCQkJCSRkaXIgPSBvcGVuZGlyKCR0aGlzLT5wYXRoKTsKCQkJCQkJCQkJCQkJCQkJLy8gRmlsdGVyIG91dCB0aGUgZGlyZWN0b3J5IGNvbnRyb2xpbmcgY2hhcmFjdGVycyBhbmQgYnVpbGQgc2VsZWN0YWJsZSBvcHRpb25zIG9mIHRoZSBvdGhlcnMKCQkJCQkJCQkJCQkJCQkJd2hpbGUgKCgkZmlsZSA9IHJlYWRkaXIoJGRpcikpICE9PSBmYWxzZSkKCQkJCQkJCQkJCQkJCQkJewoJCQkJCQkJCQkJCQkJCQkJaWYgKCRmaWxlICE9Jy4nICYmICRmaWxlIT0nLi4nKSB7CgkJCQkJCQkJCQkJCQkJCQkJaWYgKCRmaWxlY291bnQgPT0gMCkgewoJCQkJCQkJCQkJCQkJCQkJCQllY2hvICc8c2VsZWN0IG5hbWU9IicuJGsuJyI+XG4nOwoJCQkJCQkJCQkJCQkJCQkJCQllY2hvICcgIDxvcHRpb24gdmFsdWU9IiI+IDwvb3B0aW9uPlxuJzsKCQkJCQkJCQkJCQkJCQkJCQl9CgkJCQkJCQkJCQkJCQkJCQkJaWYgKCAkX1BPU1RbJGtdID09ICRmaWxlICkgewoJCQkJCQkJCQkJCQkJCQkJCQllY2hvICcgIDxvcHRpb24gdmFsdWU9IicgLiAkZmlsZSAuICciIFNFTEVDVEVEPicgLiAkZmlsZSAuICc8L29wdGlvbj5cbic7CgkJCQkJCQkJCQkJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkJCQkJCQkJCQkJZWNobyAnICA8b3B0aW9uIHZhbHVlPSInIC4gJGZpbGUgLiAnIj4nIC4gJGZpbGUgLiAnPC9vcHRpb24+XG4nOwoJCQkJCQkJCQkJCQkJCQkJCX0KCQkJCQkJCQkJCQkJCQkJCQkkZmlsZWNvdW50Kys7CgkJCQkJCQkJCQkJCQkJCQl9CgkJCQkJCQkJCQkJCQkJCX0KCQkJCQkJCQkJCQkJCQkJY2xvc2VkaXIoJGRpcik7CgkJCQkJCQkJCQkJCQkJCS8vIFNob3cgZXJyb3IgbWVzc2FnZSB0aGF0IG5vIGltYWdlcyB3ZXJlIGZvdW5kIGF0IGFsbAoJCQkJCQkJCQkJCQkJCQlpZiAoJGZpbGVjb3VudCA9PSAwKSB7CgkJCQkJCQkJCQkJCQkJCWVjaG8gJHRoaXMtPm1hcmtlcmVycm9yOwoJCQkJCQkJCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQkJCQkJCQllY2hvICI8L3NlbGVjdD4iOwoJCQkJCQkJCQkJCQkJCQl9CgkJCQkJCQkJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkJCQkJCQllY2hvICR0aGlzLT5wYXRoZXJyb3I7CgkJCQkJCQkJCQkJCQkJfQoJCQkJCQkJCQkJCQkJCWJyZWFrOwkJCQkJIAoJCQkJCQkJCQkJCQkJZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgCQllY2hvICIgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cIiIuJGsuIlwiIHZhbHVlPVwiIi4gJF9QT1NUWyRrXSAuICJcIiBzaXplPVwiIi4kdlsnZmllbGRfd2lkdGgnXS4iXCI+XG4iOwoJCQkJCQkJCQkJCQkJCgkJCQkJCQkJCQkJCX0gCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlICJ0ZXh0YXJlYSI6CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIiAgICA8dGV4dGFyZWEgbmFtZT1cIiIuJGsuIlwiIFJPV1M9Ii4kdlsnZmllbGRfaGVpZ2h0J10uIiBDT0xTPSIuJHZbJ2ZpZWxkX3dpZHRoJ10uIj4iOwogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICRfUE9TVFska107CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkayA9PSAnZGVzY3JpcHRpb24nIHx8ICRrID09ICdpbmZvJykKICAgICAgICAgICAgICAgICAgICAgICAgewoJICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC90ZXh0YXJlYT5cbiI7CgkJCQkJCQkJCQkJCQllY2hvICI8L3RkPjwvdHI+PHRkIHZhbGlnbj1cIlRPUFwiPkVhc3kgTG9jYXRvcjwvdGQ+PHRkPiI7CgkgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXRyaWV2ZSB0ZW1wbGF0ZSB3aXRoIG1hcCBpbmZvcm1hdGlvbgoJCQkJCQkJCQkJCQkJZWNobyAkdGhpcy0+ZWFzeWxvY2F0b3I7CgkJCQkJCQkJCQkJCQllY2hvICJcbiI7CgkJCQkJCQkJCQkJCX0KCQkJCQkJCQkJCQkJZWxzZQoJCQkJCQkJCQkJCQl7CgkgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8L3RleHRhcmVhPlxuIjsKCQkJCQkJCQkJCQkJfQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSAiZGlzcGxheSI6CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJF9QT1NUWyRrXTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgImlwc3RhbXAiOgogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCIiLiRrLiJcIiB2YWx1ZT1cIiIuJF9TRVJWRVJbIlJFTU9URV9BRERSIl0uIlwiPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAkX1NFUlZFUlsnUkVNT1RFX0FERFInXTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgImNoZWNrYm94IjoKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cIiIuJGsuIlwiIHZhbHVlPVwiMFwiID5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIiAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cIiIuJGsuIlwiIHZhbHVlPVwiMVwiIjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoICRfUE9TVFska10gPT0gIjEiICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICIgQ0hFQ0tFRCAiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIj5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlICJjaGVja2JveF9vbiI6CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIiAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCIiLiRrLiJcIiB2YWx1ZT1cIjBcIiA+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICIgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCIiLiRrLiJcIiB2YWx1ZT1cIjFcIiI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCAkX1BPU1RbJGtdID09ICIxIiApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiIENIRUNLRUQgIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQoJCQlpZiggJF9QT1NUWyRrXSA9PSAnJyApIHsKCQkJICAvL3Nob3VsZCBvbmx5IGFmZmVjdCBhZGQKCQkJICBlY2hvICIgQ0hFQ0tFRCAiOwoJCQl9CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIj5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlICJkYXRlIjoKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm1ha2VfZGF0ZSggJGsgKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgImRhdGV0aW1lIjoKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm1ha2VfZGF0ZXRpbWUoICRrICk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICBpZiggZXJlZyggIl5zZWxlY3QiICwgJHZbJ2ZpZWxkX3R5cGUnXSApICkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAkcGFydHMgPSBzcGxpdCggIlx8IiAsICR2WydmaWVsZF90eXBlJ10gKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCggJHBhcnRzWzFdICkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJyYW5nZSI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5tYWtlX3JhbmdlX3NlbGVjdG9yKCAkcGFydHNbMl0gLCAkcGFydHNbM10gLCAkayApOwogICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAidGFibGUiOgogICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+bWFrZV90YWJsZV9zZWxlY3RvciggJHBhcnRzWzJdICwgJHBhcnRzWzNdICwgJHBhcnRzWzRdICwgJGsgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgaWYoIGVyZWcoICJecmFkaW8iICwgJHZbJ2ZpZWxkX3R5cGUnXSApICkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAkdGhpcy0+bWFrZV9yYWRpb3MoICRrICk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgIGVjaG8gIiA8L3RkPlxuIjsgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgZWNobyAiPC90cj5cbiI7ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB9I2VuZCBmb3IgZWFjaAogICAgICAgICAgICAKICAgICAgICAgICAgZWNobyAiPHRyPjx0ZCBjb2xzcGFuPVwiMlwiPjxpbnB1dCB0eXBlPVwic3VibWl0XCIgbmFtZT1cInJjcnVkX3N1YlwiIHZhbHVlPVwiIi4kc3VibGFiZWwuIlwiLz48L3RkPjwvdHI+XG4iOwogICAgICAgICAgICAKICAgICAgICAgICAgZWNobyAiPC90YWJsZT5cbiI7CiAgICAgICAgICAgIGVjaG8gIjwvZm9ybT5cbiI7CiAgICAgICAgIAogICAgICAKICAgICAgCiAgICAgIAogICAgICB9I2VuZCBmb3JtIGZ1bmN0aW9uICAgICAgIAogICAgICAKICAgICAgCiAgICAgIAogICAgICAKICAgICAgCiAgICAgIAogICAgICAKICAgICAgCiAgICAgICN0aGlzIGZ1bmN0aW9ucyBkZWxldGVzIGEgcmVjb3JkCiAgICAgIGZ1bmN0aW9uIGRlbGV0ZSggJGlkICkKICAgICAgewogICAgICAgICAkcSA9ICJERUxFVEUgRlJPTSAiLiR0aGlzLT50YWJsZS4iIFdIRVJFICIuJHRoaXMtPmtleS4iID0gIi4kdGhpcy0+ZGItPnFzdHIoICRpZCApLiIgTElNSVQgMSI7CiAgICAgICAgICRxciA9ICR0aGlzLT5kYi0+RXhlY3V0ZSggJHEgKSBvciBkaWUoICJSQ1JVRCBERUxFVEUgU1FMOiAiLiR0aGlzLT5kYi0+RXJyb3JNc2coKSApOwogICAgICAgICBlY2hvICJUaGF0IHJlY29yZCBoYXMgYmVlbiBkZWxldGVkLjwvcD4iOwogICAgICAgICAkdGhpcy0+bWFrZV9yZXR1cm5fbGluaygpOwogICAgICAgICAKICAgICAgfQogICAgICAKICAgICAgCiAgICAgIAogICAgICAjdGhpcyBmdW5jdGlvbiBzaG93cyB0aGUgZGF0YSBpbiBhIHRhYmxlIGlmIHlvdSBuZWVkIHNvbWV0aGluZyBmYW5jeSBlZGl0IGFsbCB5b3Ugd2FudCBJIHdvbnQgc3RvcCB5b3UKICAgICAgZnVuY3Rpb24gc2hvdygpCiAgICAgIHsKCSR1cGRvd24gPSAnJzsKCiAgICAgICAgIGlmKCBpc3NldCggJF9HRVRbJ3JjcnVkX3VwZG93biddICkgJiYgKCAkX0dFVFsncmNydWRfdXBkb3duJ10gPT0gIkFTQyIgfHwgJF9HRVRbJ3JjcnVkX3VwZG93biddID09ICJERVNDIiApICkKICAgICAgICAgewogICAgICAgICAgICAgJHVwZG93biA9ICRfR0VUWydyY3J1ZF91cGRvd24nXTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKICAgICAgICAgICAgJHVwZG93biA9ICJBU0MiOwogICAgICAgICAgICAkX0dFVFsncmNydWRfdXBkb3duJ10gPSAiQVNDIjsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYoICEgaXNzZXQoICRfR0VUWydyY3J1ZF9zb3J0YnknXSApIHx8ICEgaXNzZXQoICR0aGlzLT5maWVsZHNbJF9HRVRbJ3JjcnVkX3NvcnRieSddXSApICkKICAgICAgICAgewogICAgICAgICAgICAkc29ydGJ5ID0gJHRoaXMtPmRlZl9zb3J0OwogICAgICAgICAgICAkX0dFVFsncmNydWRfc29ydGJ5J10gPSAkc29ydGJ5OwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewogICAgICAgICAgICAkc29ydGJ5ID0gJF9HRVRbJ3JjcnVkX3NvcnRieSddOwogICAgICAgICB9CgogICAgICAgICAKICAgICAgICAgZWNobyAnPHRhYmxlIGNlbGxzcGFjaW5nPSIyIiBjZWxscGFkZGluZz0iMiIgY2xhc3M9InBhZ2V0YWJsZSIgd2lkdGg9IjEwMCUiPic7CiAgICAgICAgIGVjaG8gIjx0aGVhZD5cbiI7CiAgICAgICAgIGVjaG8gJzx0cj4nOwogICAgICAgICBlY2hvICJcbiI7CiAgICAgICAgICAgICAgIAogICAgICAgICAjc2hvdyB0aGUgdGFibGUgaGVhZGVycwogICAgICAgICBmb3JlYWNoKCAkdGhpcy0+ZmllbGRzIGFzICRrID0+ICR2ICkKICAgICAgICAgewogICAgICAgICAgICBpZiggJHRoaXMtPmZpZWxkc1ska11bJ3Zpc2libGVfaW5fbGlzdCddICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICBlY2hvICIgICA8dGg+IjsKICAgICAgICAgICAgICAgZWNobyAkdlsnbGFiZWwnXTsKCiAgICAgICAgICAgICAgIGVjaG8gIiZuYnNwOyI7CiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICBlY2hvICI8YSBocmVmPVwiIi4kdGhpcy0+bWFrZXVybCggInNob3ciICwgLTEgKS4iJmFtcDtyY3J1ZF9zb3J0Ynk9Ii4kay4iJmFtcDtyY3J1ZF91cGRvd249QVNDXCI+JmFuZDs8L2E+IjsKICAgICAgICAgICAgICAgaWYoICRrID09ICRfR0VUWydyY3J1ZF9zb3J0YnknXSAmJiAkX0dFVFsncmNydWRfdXBkb3duJ10gPT0gIkFTQyIgKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGVjaG8gIi4iOwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBlY2hvICImbmJzcDsiOwogICAgICAgICAgICAgICB9CiAgICAKICAgICAgICAgICAgICAgZWNobyAiPGEgaHJlZj1cIiIuJHRoaXMtPm1ha2V1cmwoICJzaG93IiAsIC0xICkuIiZhbXA7cmNydWRfc29ydGJ5PSIuJGsuIiZhbXA7cmNydWRfdXBkb3duPURFU0NcIj4mb3I7PC9hPiI7CiAgICAgICAgICAgICAgIGlmKCAkayA9PSAkX0dFVFsncmNydWRfc29ydGJ5J10gJiYgJF9HRVRbJ3JjcnVkX3VwZG93biddID09ICJERVNDIiApCiAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgZWNobyAiLiI7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgZWNobyAiPC90aD5cbiI7CiAgICAgICAgICAgIH0KICAgICAgICAgfQoKICAgICAgICAgZWNobyAiPHRoIHdpZHRoPVwiMSVcIj4mbmJzcDs8L3RoPlxuIjsKICAgICAgICAgZWNobyAiPHRoIHdpZHRoPVwiMSVcIj4mbmJzcDs8L3RoPlxuIjsKCiAgICAgICAgIGVjaG8gJzwvdHI+JzsKICAgICAgICAgZWNobyAiXG4iOwogICAgICAgICBlY2hvICI8L3RoZWFkPlxuIjsKICAgICAgICAgCiAgICAgICAgICNub3cgdGhlIGRhdGEgICAKICAgICAgICAgJHEgPSAiU0VMRUNUICogRlJPTSAiLiR0aGlzLT50YWJsZS4iIE9SREVSIEJZICIuJHNvcnRieS4iICIuJHVwZG93bjsKICAgICAgICAgJHFyID0gJHRoaXMtPmRiLT5FeGVjdXRlKCAkcSApIG9yIGRpZSggIlJDUlVEIFNIT1cgU1FMOiAiLiR0aGlzLT5kYi0+RXJyb3JNc2coKSApOwogICAgICAgICAKICAgICAgICAgJGkgPSAwOwogICAgICAgICB3aGlsZSggJHJvdyA9ICRxci0+RmV0Y2hSb3coKSApCiAgICAgICAgIHsKICAgICAgICAgICAgZWNobyAiPHRyIGNsYXNzPVwicm93Ii4oKCRpICUgMikrMSkuIlwiICI7CiAgICAgICAgICAgIGVjaG8gIm9ubW91c2VvdmVyPVwidGhpcy5jbGFzc05hbWU9J3JvdyIuKCgkaSAlIDIpKzEpLiJob3Zlcic7XCIgb25tb3VzZW91dD1cInRoaXMuY2xhc3NOYW1lPSdyb3ciLigoJGkgJSAyKSsxKS4iJztcIj5cbiI7CiAgICAgICAgICAgICRpKys7CiAgICAgICAgICAgCiAgICAgICAgICAgICAgZm9yZWFjaCggJHJvdyBhcyAkayA9PiAkdiApCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGlmKCAkdGhpcy0+ZmllbGRzWyRrXVsndmlzaWJsZV9pbl9saXN0J10gKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBlY2hvICIgICA8dGQ+IjsKICAgICAgICAgICAgICAgICAgICBpZiggZXJlZyggIl5zZWxlY3RcfHRhYmxlIiAsICR0aGlzLT5maWVsZHNbJGtdWydmaWVsZF90eXBlJ10gKSApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICRwYXJ0cyA9IHNwbGl0KCAiXHwiICwgJHRoaXMtPmZpZWxkc1ska11bJ2ZpZWxkX3R5cGUnXSApOwogICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIigiLiR2LiIpICIuJHRoaXMtPmdldF9mb3JlaWduX2xhYmVsKCAkcGFydHNbMl0gLCAkcGFydHNbM10gLCAkdiAsICRwYXJ0c1s0XSApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJHY7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvdGQ+XG4iOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAjZWRpdCBhbmQgZGVsZXRlIGNvbHVtbnMKICAgICAgICAgICAgZWNobyAiPHRkPjxhIGhyZWY9XCIiLiR0aGlzLT5tYWtldXJsKCAiZWRpdCIgLCAkcm93WyR0aGlzLT5rZXldICkuIlwiPmVkaXQ8L2E+Jm5ic3A7PC90ZD4iOwogICAgICAgICAgICBlY2hvICI8dGQ+Jm5ic3A7PGEgaHJlZj1cIiIuJHRoaXMtPm1ha2V1cmwoICJkZWxldGUiICwgJHJvd1skdGhpcy0+a2V5XSApLiJcIj5kZWxldGU8L2E+PC90ZD4iOwoKICAgICAgICAgICAgZWNobyAiPC90cj5cbiI7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIAogICAgICAgICBlY2hvICI8L3RhYmxlPlxuIjsKICAgICAgICAgICAgICAgICAgCiAgICAgICAgIGVjaG8gIjxwPjxhIGhyZWY9XCIiLiR0aGlzLT5tYWtldXJsKCAiYWRkIiAsIDAgKS4iXCI+Q3JlYXRlIE5ldzwvYT48L3A+XG4iOwogICAgICAKICAgICAgfSNlbmQgc2hvdyBmdW5jdGlvbgogICAgICAKICAgICAgCiAgICAgICN0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGV4YWN0IHVybCB0aGF0IHdlIHdlcmUgY2FsbGVkIHdpdGggc3RyaXBzIG91dCBwcmV2aW91cyByY3J1ZCBhbmQgYXBwbGllcyBuZXcKICAgICAgI2hvcGVmdWxseSB0aGlzIGFsbG93cyB1cyB0byB1c2UgcmNydWQgaW4gb3RoZXIgcHJvZ3JhbXMgYW5kIGxpYnJhcmllcwogICAgICBmdW5jdGlvbiBtYWtldXJsKCAkYWN0aW9uICwgJGlkICkKICAgICAgewogICAgICAgICAKCSR0PScnOwogICAgICAgICBmb3JlYWNoKCAkX0dFVCBhcyAkayA9PiAkdiApCiAgICAgICAgIHsKICAgICAgICAgICAgaWYoICEgZXJlZyggIl5yY3J1ZCIsICRrICkgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICR0ID0gJHQgLiAkayAuICI9IiAuJHYuICImYW1wOyI7CiAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKCSAvL2NoZWNrIHRoYXQgbW9kdWxlPSAgaXMgY2FycmllZCB0aHJvdWdoCgkgaWYgKCFpc3NldCgkX0dFVFsnbW9kdWxlJ10pKSAKCSAgIHsKCSAgICAgJG0gPSBpc3NldCgkX1BPU1RbJ21hY3QnXSkgPyBleHBsb2RlKCcsJywkX1BPU1RbJ21hY3QnXSkgOiAiIjsKCSAgICAgJG0gPSAibW9kdWxlPSIuICRtWzBdOwoJICAgICAkdCA9ICRfU0VSVkVSWyJQSFBfU0VMRiJdIC4gIj8iIC4gJHQgLiAkbSAuIiZhbXA7cmNydWRfYWN0aW9uPSIuJGFjdGlvbi4iJmFtcDtyY3J1ZF9pZD0iLiRpZDsKCSAgIH0KCSBlbHNlCgkgICB7CgkgICAgICR0ID0gJF9TRVJWRVJbIlBIUF9TRUxGIl0gLiAiPyIgLiAkdCAuInJjcnVkX2FjdGlvbj0iLiRhY3Rpb24uIiZhbXA7cmNydWRfaWQ9Ii4kaWQ7CgkgICB9CgogICAgICAgICBpZiggJGFjdGlvbiA9PSAiZWRpdCIgfHwgJGFjdGlvbiA9PSAiZGVsZXRlIiB8fCAkYWN0aW9uID09ICJhZGQiICkKICAgICAgICAgewogICAgICAgICAgICAkdCA9ICR0IC4gIiZhbXA7cmNydWRfdGFibGU9Ii4kdGhpcy0+dGFibGU7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHJldHVybiAkdDsKICAgICAgICAgCiAgICAgIH0KICAgICAgCiAgICAgICNzZXQgYWxsIHRoZSBmaWVsZHMgdmlzaWJpbHR5IHRvICRiCiAgICAgICNleCwgc2V0IGFsbCBmaWVsZHMgdG8gZmFsc2UsIHRoZW4gZW5hYmxlIHRoZSBvbmVzIHlvdSBuZWVkCiAgICAgIGZ1bmN0aW9uIHNldFZpc2libGVJbkxpc3RBbGwoICRiICkKICAgICAgewogICAgICAgICBmb3JlYWNoKCAkdGhpcy0+ZmllbGRzIGFzICRrID0+ICR2ICkKICAgICAgICAgewogICAgICAgICAgICAkdGhpcy0+ZmllbGRzWyRrXVsndmlzaWJsZV9pbl9saXN0J10gPSAkYjsKICAgICAgICAgfQogICAgICB9CgogICAgICAjc2V0IGFsbCB0aGUgZmllbGRzIHZpc2liaWx0eSB0byAkYgogICAgICAjZXgsIHNldCBhbGwgZmllbGRzIHRvIGZhbHNlLCB0aGVuIGVuYWJsZSB0aGUgb25lcyB5b3UgbmVlZAogICAgICBmdW5jdGlvbiBzZXRWaXNpYmxlSW5BZGRBbGwoICRiICkKICAgICAgewogICAgICAgICBmb3JlYWNoKCAkdGhpcy0+ZmllbGRzIGFzICRrID0+ICR2ICkKICAgICAgICAgewogICAgICAgICAgICAkdGhpcy0+ZmllbGRzWyRrXVsndmlzaWJsZV9pbl9hZGQnXSA9ICRiOwogICAgICAgICB9CiAgICAgIH0gICAgICAKCiAgICAgICNzZXQgYWxsIHRoZSBmaWVsZHMgdmlzaWJpbHR5IHRvICRiCiAgICAgICNleCwgc2V0IGFsbCBmaWVsZHMgdG8gZmFsc2UsIHRoZW4gZW5hYmxlIHRoZSBvbmVzIHlvdSBuZWVkCiAgICAgIGZ1bmN0aW9uIHNldFZpc2libGVJbkVkaXRBbGwoICRiICkKICAgICAgewogICAgICAgICBmb3JlYWNoKCAkdGhpcy0+ZmllbGRzIGFzICRrID0+ICR2ICkKICAgICAgICAgewogICAgICAgICAgICAkdGhpcy0+ZmllbGRzWyRrXVsndmlzaWJsZV9pbl9lZGl0J10gPSAkYjsKICAgICAgICAgfQogICAgICB9CgogICAgICAKICAgICAgI3ByaW50IG91cnNlbHZlcyBvdXQgc28gd2UgY2FuIHdoYXQgaXMgYmVpbmcgc2V0IGFuZC9vciBub3QuLi4KICAgICAgZnVuY3Rpb24gZGVidWcoKQogICAgICB7CiAgICAgICAgIGVjaG8gIjxwcmU+XG4iOwogICAgICAgICBwcmludF9yKCR0aGlzKTsKICAgICAgICAgZWNobyAiPC9wcmU+XG4iOwogICAgICB9CiAgICAgCiAgICAgCiAgICAgIAogICAgICAjcmV0dXJucyB0aGUgZXJyb3JzIGlmIHRoZXJlIHdlcmUgc29tZSBvdGhlcndpc2Ugbm8sIHRoZW4gcmV0dXJuIGZhbHNlLgogICAgICBmdW5jdGlvbiBmb3JtX2Vycm9ycygpCiAgICAgIHsKICAgICAgICAgI3Byb2Nlc3MgdGhlIHJlZ2V4IHZhbGlkYXRpb25zCiAgICAgICAgICAgIGZvcmVhY2goICRfUE9TVCBhcyAkayA9PiAkdiApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgaWYoIGlzc2V0KCAkdGhpcy0+ZmllbGRzWyRrXVsnZmllbGRfcmVnZXgnXSApICkKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBpZiggISBlcmVnKCAkdGhpcy0+ZmllbGRzWyRrXVsnZmllbGRfcmVnZXgnXSAsICR2ICkgKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICRlcnJvcnNbJGtdID0gJHRoaXMtPmZpZWxkc1ska11bJ2ZpZWxkX2Vycm9yJ107CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiggaXNzZXQoICRlcnJvcnMgKSAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHJldHVybiAkZXJyb3JzOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgfSNlbmQgZm9ybSBlcnJvcnMKICAgCgogICAgICAjdGhpcyBmdW5jdGlvbiBtYWtlcyBhIHJhZGlvIGJ1dHRvbiBiYXNlZCBvbiB0aGUgZmllbGQgdHlwZQogICAgICBmdW5jdGlvbiBtYWtlX3JhZGlvcyggJGZpZWxkICkKICAgICAgewogICAgICAgICAkcGFydHMgPSBzcGxpdCggIlx8IiAsICR0aGlzLT5maWVsZHNbJGZpZWxkXVsnZmllbGRfdHlwZSddICk7CiAgICAgICAgIAogICAgICAgICAjcG9wIHRoZSBmaXJzdCBlbGVtZW50IG9mZiB0aGUgYXJyYXkgCiAgICAgICAgICRwYXJ0cyA9IGFycmF5X3JldmVyc2UoICRwYXJ0cyApOwogICAgICAgICBhcnJheV9wb3AoICRwYXJ0cyApOwogICAgICAgICAkcGFydHMgPSBhcnJheV9yZXZlcnNlKCAkcGFydHMgKTsKCSAKCSAkc2VsZWN0ZWQgPSAnJzsKCgkgaWYgKGlzc2V0KCAkX1BPU1RbJGZpZWxkXSApICYmICRfUE9TVFskZmllbGRdICE9ICcnKSB7CgkgICAkc2VsZWN0ZWQgPSAkX1BPU1RbJGZpZWxkXTsKCSB9IGVsc2UgewoJICAgJHNlbGVjdGVkID0gJHBhcnRzWzBdOwoJIH0KICAgICAgICAgCiAgICAgICAgIGZvcmVhY2goICRwYXJ0cyBhcyAkayA9PiAkdiApCiAgICAgICAgIHsKICAgICAgICAgICAgZWNobyAkdiAuICIgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCIiLiRmaWVsZC4iXCIgdmFsdWU9XCIiLiR2LiJcIi8iOwogICAgICAgICAgICBpZiggJHNlbGVjdGVkID09PSAkdiApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgZWNobyAiIGNoZWNrZWQ9XCJjaGVja2VkXCIgIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlY2hvICI+XG4iOwogICAgICAgICB9CiAgICAgIH0KICAgCiAgIAogICAgICAjdGhpcyBmdW5jdGlvbiBtYWtlIGEgc2VsZWN0b3Igd2l0aCBhbiBpbnQgcmFuZ2UKICAgICAgZnVuY3Rpb24gbWFrZV9yYW5nZV9zZWxlY3RvciggJG1pbiAsICRtYXggLCAkZm9ybV9maWVsZCApCiAgICAgIHsKICAgICAgCiAgICAgICAgIGVjaG8gIjxzZWxlY3QgbmFtZT1cIiIuJGZvcm1fZmllbGQuIlwiPlxuIjsKICAgICAgICAgJGkgPSAkbWluOwogICAgICAgICB3aGlsZSggJGkgLSAxIDwgJG1heCApCiAgICAgICAgIHsKICAgICAgICAgICAgZWNobyAiICA8b3B0aW9uIHZhbHVlPVwiIi4kaS4iXCIiOwogICAgICAgICAgICBpZiggJF9QT1NUWyRmb3JtX2ZpZWxkXSA9PSAkaSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgZWNobyAiIFNFTEVDVEVEICI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWNobyAiPiIuJGkuIjwvb3B0aW9uPlxuIjsKICAgICAgICAgICAgJGkrKzsKICAgICAgICAgfQogICAgICAgICBlY2hvICI8L3NlbGVjdD5cbiI7CiAgICAgIAogICAgICB9I2VuZCBmdW5jCiAKIAogCiAKICAgICAgI3RoaXMgZnVuY3Rpb24gbWFrZSBhIHNlbGVjdG9yIHdpdGggYW4gaW50IHJhbmdlCiAgICAgIGZ1bmN0aW9uIG1ha2VfdGFibGVfc2VsZWN0b3IoICR0YWJsZSAsICR2YWx1ZSAsICRsYWJlbCAsICRmb3JtX2ZpZWxkICkKICAgICAgewogICAgICAKICAgICAgICAgZWNobyAiPHNlbGVjdCBuYW1lPVwiIi4kZm9ybV9maWVsZC4iXCI+XG4iOwoKICAgICAgICAgJHEgPSAiU0VMRUNUICIuJHZhbHVlLiIsICIuJGxhYmVsLiIgRlJPTSAiLiR0YWJsZS4iIE9SREVSIEJZICIuJGxhYmVsLiIgQVNDIjsKICAgICAgICAgJHFyID0gJHRoaXMtPmRiLT5FeGVjdXRlKCAkcSApIG9yIGRpZSggIlJDUlVEIE1BS0UgVEFCTEUgU0VMRUNUIFNRTDogIi4kdGhpcy0+ZGItPkVycm9yTXNnKCkgKTsKICAgICAgIAogICAgICAgICAKICAgICAgICAgd2hpbGUoICRyb3cgPSAkcXItPkZldGNoUm93KCkgKQogICAgICAgICB7CiAgICAgICAgICAgIGVjaG8gIiAgPG9wdGlvbiB2YWx1ZT1cIiIuJHJvd1skdmFsdWVdLiJcIiI7CiAgICAgICAgICAgIGlmKCBpc3NldCgkX1BPU1RbJGZvcm1fZmllbGRdKSAmJiAkX1BPU1RbJGZvcm1fZmllbGRdID09ICRyb3dbJHZhbHVlXSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgZWNobyAiIFNFTEVDVEVEICI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWNobyAiPiIuJHJvd1skbGFiZWxdLiI8L29wdGlvbj5cbiI7CiAgICAgICAgICAgIAogICAgICAgICB9CiAgICAgICAgIGVjaG8gIjwvc2VsZWN0PlxuIjsKICAgICAgCiAgICAgIH0jZW5kIGZ1bmMKICAgICAgCiAgICAgIAogICAgICAjdGhpcyBmdW5jdGlvbnMgZ2V0cyB0aGUgdGV4dCB2YWx1ZSBvZiBhIGZvcmVpZ24ga2V5CiAgICAgIGZ1bmN0aW9uIGdldF9mb3JlaWduX2xhYmVsKCAkdGFibGUgLCAkdmFsdWVfZmllbGQgLCAkdmFsdWUgLCAkbGFiZWwgKSAgCiAgICAgIHsKICAgICAgCiAgICAgICAgICRxID0gIlNFTEVDVCAiLiRsYWJlbC4iIEZST00gIi4kdGFibGUuIiBXSEVSRSAiLiR2YWx1ZV9maWVsZC4iID0gIi4kdGhpcy0+ZGItPnFzdHIoICR2YWx1ZSApOwogICAgICAgICAkcXIgPSAkdGhpcy0+ZGItPkV4ZWN1dGUoICRxICk7CiAgICAgICAgICRyb3cgPSAkcXItPkZldGNoUm93KCk7CiAgICAgICAgIGlmKCAkcXItPlJlY29yZENvdW50KCkgPT0gMCApCiAgICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICJNaXNzaW5nIExhYmVsIjsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICRyb3dbJGxhYmVsXTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgfQogICAgICAKICAgICAgCiAgICAgICN0aGlzIGZ1bmN0aW9ucyBtYWtlIGEgZGF0ZXRpbWUgaHRtbCBmaWVsZAogICAgICBmdW5jdGlvbiBtYWtlX2RhdGV0aW1lKCAkZmllbGQgKQogICAgICB7CiAgICAgIAogICAgICAgICBpZiggISBpc3NldCggJF9QT1NUWyRmaWVsZF0gKSB8fCAkX1BPU1RbJGZpZWxkXSA9PSAiMDAwMC0wMC0wMCAwMDowMDowMCIgKQogICAgICAgICB7CiAgICAgICAgICAgICRfUE9TVFskZmllbGRdID0gZGF0ZSggIlktbS1kIEg6aTpzIiApOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAkX1BPU1RbJGZpZWxkLicteWVhciddID0gZGF0ZSggIlkiICwgc3RydG90aW1lKCAkX1BPU1RbJGZpZWxkXSApICk7CiAgICAgICAgICRfUE9TVFskZmllbGQuJy1tb250aCddID0gZGF0ZSggIm0iICwgc3RydG90aW1lKCAkX1BPU1RbJGZpZWxkXSApICk7CiAgICAgICAgICRfUE9TVFskZmllbGQuJy1kYXknXSA9IGRhdGUoICJkIiAsIHN0cnRvdGltZSggJF9QT1NUWyRmaWVsZF0gKSApOwogICAgICAgICAkX1BPU1RbJGZpZWxkLictaG91ciddID0gZGF0ZSggIkgiICwgc3RydG90aW1lKCAkX1BPU1RbJGZpZWxkXSApICk7CiAgICAgICAgICRfUE9TVFskZmllbGQuJy1taW51dGUnXSA9IGRhdGUoICJpIiAsIHN0cnRvdGltZSggJF9QT1NUWyRmaWVsZF0gKSApOwogICAgICAgICAkX1BPU1RbJGZpZWxkLictc2Vjb25kJ10gPSBkYXRlKCAicyIgLCBzdHJ0b3RpbWUoICRfUE9TVFskZmllbGRdICkgKTsKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgZWNobyAiWVlZWS1NTS1ERCAiOwogICAgICAgICAkdGhpcy0+bWFrZV9yYW5nZV9zZWxlY3RvciggZGF0ZSggIlkiICkgLSAxMDAgLCBkYXRlKCAiWSIgKSArIDEwICwgJGZpZWxkLiIteWVhciIgKTsKICAgICAgICAgJHRoaXMtPm1ha2VfcmFuZ2Vfc2VsZWN0b3IoIDEgLCAxMiAsICRmaWVsZC4iLW1vbnRoIiApOwogICAgICAgICAkdGhpcy0+bWFrZV9yYW5nZV9zZWxlY3RvciggMSAsIDMxICwgJGZpZWxkLiItZGF5IiApOwogICAgICAgICBlY2hvICIgJm5ic3A7IEhIOk1NOlNTICI7CiAgICAgICAgICR0aGlzLT5tYWtlX3JhbmdlX3NlbGVjdG9yKCAwICwgMjMgLCAkZmllbGQuIi1ob3VyIiApOwogICAgICAgICAkdGhpcy0+bWFrZV9yYW5nZV9zZWxlY3RvciggMCAsIDU5ICwgJGZpZWxkLiItbWludXRlIiApOwogICAgICAgICAkdGhpcy0+bWFrZV9yYW5nZV9zZWxlY3RvciggMCAsIDU5ICwgJGZpZWxkLiItc2Vjb25kIiApOwogICAgICAKICAgICAgfQogICAgICAKICAgICAgI3RoaXMgZnVuY3Rpb24ganVzdCBtYWtlcyB0aGUgZGF0ZSBubyBoLG0scwogICAgICBmdW5jdGlvbiBtYWtlX2RhdGUoICRmaWVsZCApCiAgICAgIHsKICAgICAgICAgaWYoICEgaXNzZXQoICRfUE9TVFskZmllbGRdICkgfHwgJF9QT1NUWyRmaWVsZF0gPT0gIjAwMDAtMDAtMDAiICkKICAgICAgICAgewogICAgICAgICAgICAkX1BPU1RbJGZpZWxkXSA9IGRhdGUoICJZLW0tZCIgKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgJF9QT1NUWyRmaWVsZC4nLXllYXInXSA9IGRhdGUoICJZIiAsIHN0cnRvdGltZSggJF9QT1NUWyRmaWVsZF0gKSApOwogICAgICAgICAkX1BPU1RbJGZpZWxkLictbW9udGgnXSA9IGRhdGUoICJtIiAsIHN0cnRvdGltZSggJF9QT1NUWyRmaWVsZF0gKSApOwogICAgICAgICAkX1BPU1RbJGZpZWxkLictZGF5J10gPSBkYXRlKCAiZCIgLCBzdHJ0b3RpbWUoICRfUE9TVFskZmllbGRdICkgKTsKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICBlY2hvICJZWVlZLU1NLUREICI7CiAgICAgICAgICR0aGlzLT5tYWtlX3JhbmdlX3NlbGVjdG9yKCBkYXRlKCAiWSIgKSAtIDEwMCAsIGRhdGUoICJZIiApICsgMTAgLCAkZmllbGQuIi15ZWFyIiApOwogICAgICAgICAkdGhpcy0+bWFrZV9yYW5nZV9zZWxlY3RvciggMSAsIDEyICwgJGZpZWxkLiItbW9udGgiICk7CiAgICAgICAgICR0aGlzLT5tYWtlX3JhbmdlX3NlbGVjdG9yKCAxICwgMzEgLCAkZmllbGQuIi1kYXkiICk7CgogICAgICAKICAgICAgfQogICAgICAKICAgICAgI3RoaXMgY29tcGlsZXMgYmFjayB0aGUgZGF0ZXRpbWUgZmllbGQgZnJvbSBodG1sIHBvc3QKICAgICAgZnVuY3Rpb24gY29tcGlsZV9kYXRldGltZSggJGZpZWxkICkKICAgICAgewogICAgICAKICAgICAgICAgJF9QT1NUWyRmaWVsZF0gPSAkX1BPU1RbJGZpZWxkLicteWVhciddLiItIi4kX1BPU1RbJGZpZWxkLictbW9udGgnXS4iLSIuJF9QT1NUWyRmaWVsZC4nLWRheSddLiIgIi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJF9QT1NUWyRmaWVsZC4nLWhvdXInXS4iOiIuJF9QT1NUWyRmaWVsZC4nLW1pbnV0ZSddLiI6Ii4kX1BPU1RbJGZpZWxkLictc2Vjb25kJ107CiAgICAgIAogICAgICB9CiAgICAgIAogICAgICAjdGhpcyBmdW5jdGlvbiBjb21waWxlcyBqdXN0IGEgZGF0ZSBpbnRvIG9uZSBmaWVsZCBhZ2FpbgogICAgICBmdW5jdGlvbiBjb21waWxlX2RhdGUoICRmaWVsZCApCiAgICAgIHsKICAgICAgCiAgICAgICAgICRfUE9TVFskZmllbGRdID0gJF9QT1NUWyRmaWVsZC4nLXllYXInXS4iLSIuJF9QT1NUWyRmaWVsZC4nLW1vbnRoJ10uIi0iLiRfUE9TVFskZmllbGQuJy1kYXknXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgIH0KICAgICAgCiAgICAgICN0aGlzIGNvdmVydHMgYWxsIHRoZSBkYXRldGltZXMgZnJvbSBwb3N0IGludG8gdGhlIG9yaWdpbmFsIGZpZWxkCiAgICAgIGZ1bmN0aW9uIGNvbXBpbGVfZGF0ZXRpbWVzKCkKICAgICAgewogICAgICAKICAgICAgICAgZm9yZWFjaCggJHRoaXMtPmZpZWxkcyBhcyAkayA9PiAkdiApCiAgICAgICAgIHsKICAgICAgICAgICAgaWYoICR2WydmaWVsZF90eXBlJ10gPT0gImRhdGV0aW1lIiApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgJHRoaXMtPmNvbXBpbGVfZGF0ZXRpbWUoICRrICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGlmKCAkdlsnZmllbGRfdHlwZSddID09ICJkYXRlIiApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgJHRoaXMtPmNvbXBpbGVfZGF0ZSggJGsgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgfQogICAgICAgICAKICAgICAgfQogICAgICAKICAgICAjdGhpcyBmdW5jdGlvbiBtYWtlcyBhIHJldHVybiB0byBsaXN0IGxpbmsgc28gd2l0aCBhbnkgcmNydWQgc3R1ZmYKICAgICBmdW5jdGlvbiBtYWtlX3JldHVybl9saW5rKCkKICAgICB7CiAgICAgICAkdCA9ICcnOwogICAgICAgIGZvcmVhY2goICRfR0VUIGFzICRrID0+ICR2ICkKICAgICAgICB7CiAgICAgICAgICAgaWYoICEgZXJlZyggIl5yY3J1ZCIsICRrICkgKQogICAgICAgICAgIHsKICAgICAgICAgICAgICAkdCA9ICR0IC4gJGsgLiAiPSIgLiR2LiAiJiI7CiAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAgCiAgICAgICAgICR0ID0gZXJlZ19yZXBsYWNlKCAiXCYkIiAsICIiICwgJHQgKTsKICAgICAgICAgICAgCiAgICAgICAgICR0ID0gJF9TRVJWRVJbIlBIUF9TRUxGIl0gLiAiPyIgLiAkdDsKICAgICAgICAgLy9lY2hvICI8cD48YSBocmVmPVwiIi4gJHQgLiAiXCI+Ii4kdGhpcy0+bGFuZ3VhZ2UoJ3JldHVybnRvbGlzdCcpLiI8L2E+PC9wPlxuIjsKICAgICAgICAgZWNobyAiPHA+PGEgaHJlZj1cIiIuICR0IC4gIlwiPnJldHVybiB0byBsaXN0PC9hPjwvcD5cbiI7CiAgICAgICAgIAogICAgIH0KICAgCglmdW5jdGlvbiBzZXRQYXRoKCRwYXRoLCAkcGF0aGVycm9yLCAkbWFya2VyZXJyb3IpCgl7CgkJJHRoaXMtPnBhdGggPSAkcGF0aDsKCQkkdGhpcy0+cGF0aGVycm9yID0gJHBhdGhlcnJvcjsKCQkkdGhpcy0+bWFya2VyZXJyb3IgPSAkbWFya2VyZXJyb3I7IAoJfQogICB9I2VuZGNsYXNzCgoKPz4=]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiRnQ21zID0gY21zbXMoKTsgaWYoICFpc19vYmplY3QoJGdDbXMpICkgZXhpdDsKJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKCi8vIG15c3FsLXNwZWNpZmljLCBidXQgaWdub3JlZCBieSBvdGhlciBkYXRhYmFzZQokdGFib3B0YXJyYXkgPSBhcnJheSgnbXlzcWwnID0+ICdUWVBFPU15SVNBTScpOwoKJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSgkZGIpOwoKLy8gdGFibGUgc2NoZW1hIGRlc2NyaXB0aW9uCiRmbGRzID0gIgoJCW1hcF9pZCBJIEFVVE8gS0VZLAoJICBuYW1lIEMoODApIE5PVE5VTEwsCgkJZGVzY3JpcHRpb24gWCwKCSAgY2VudGVyX2xhdCBDKDUwKSwKCSAgY2VudGVyX2xvbiBDKDUwKSwKCSAgb3duZXJfaWQgSSwKCSAgdHlwZSBDKDUwKSwKCSAgd2lkdGggQyg1MCksCgkgIGhlaWdodCBDKDUwKSwKCSAgY29udHJvbHMgTCwKCSAgY29udHJvbHNfc2l6ZSBDKDEwKSwKCSAgdHlwZV9jb250cm9scyBMLAoJICBzaWRlYmFyIEwsCgkgIGRpcmVjdGlvbnMgTCwKCSAgem9vbSBDKDEwKSwKCSAgem9vbXNjcm9sbHdoZWVsIEwsCgkgIHpvb21fZW5jb21wYXNzIEwsCgkgIHNjYWxlX2NvbnRyb2wgTCwKCSAgYm91bmRzX2Z1ZGdlIEYsCgkgIGluZm9fd2luZG93IEwsCgkgIGluZm9fdHJpZ2dlciBDKDgwKQoJIjsKCi8vIENyZWF0ZSB0aGUgdGFibGUKJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dvb2dsZW1hcHNfbWFwcyIsICRmbGRzLCAkdGFib3B0YXJyYXkpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgovL2luZGV4IGZvciBtYXBzCiRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVJbmRleFNRTCgnaV9uYW1lJywgY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ29vZ2xlbWFwc19tYXBzIiwgJ25hbWUnKTsKCi8vIGNyZWF0ZSBhIHNlcXVlbmNlCiMkZGItPkNyZWF0ZVNlcXVlbmNlKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dvb2dsZW1hcHNfbWFwc19zZXEiKTsKCgovLyBNYXJrZXJzCiRmbGRzID0gIgoJICBtYXJrZXJfaWQgSSBBVVRPIEtFWSwKCSAgbWFwIEMoMTAwKSwKCSAgbmFtZSBDKDgwKSwKCSAgaW5mbyBYLAoJICBhZGRyZXNzIEMoMjU1KSwKCSAgbGF0IEMoMTAwKSwKCSAgbG9uIEMoMTAwKSwKCSAgaWNvbiBDKDEwMCkKICAiOwoKLy8gQ3JlYXRlIHRoZSB0YWJsZQokc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ29vZ2xlbWFwc19tYXJrZXJzIiwgJGZsZHMsICR0YWJvcHRhcnJheSk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKLy8gY3JlYXRlIGEgc2VxdWVuY2UKJGRiLT5DcmVhdGVTZXF1ZW5jZShjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9nb29nbGVtYXBzX21hcmtlcnNfc2VxIik7CgovLyBQb2x5bGluZXMKJGZsZHMgPSAiCglwb2x5bGluZV9pZCBJIEtFWSwKCW1hcF9pZCBJLAoJbmFtZSBDKDgwKSwKCXN0cm9rZWNvbG9yIEMoNyksCglzdHJva2VvcGFjaXR5IEYsCglzdHJva2V3ZWlnaHQgSSwKCWRpc3RhbmNlIEYsCglkaXN0YW5jZXVvbSBDKDEpCiI7CgovLyBDcmVhdGUgdGhlIHRhYmxlCiRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9nb29nbGVtYXBzX3BvbHlsaW5lcyIsICRmbGRzLCAkdGFib3B0YXJyYXkpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7Ci8vIENyZWF0ZSBhIHNlcXVlbmNlCiRkYi0+Q3JlYXRlU2VxdWVuY2UoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ29vZ2xlbWFwc19wb2x5bGluZXNfc2VxIik7CgovLyBQb2x5bGluZSBwYXJ0cwokZmxkcyA9ICIKCXBvbHlsaW5lcGFydF9pZCBJIEtFWSwKCXBvbHlsaW5lX2lkIEkgS0VZLAoJc2VxIEksCglkZXNjcmlwdGlvbiBDKDI1NSksCglsYXQgQygxMDApLAoJbG9uIEMoMTAwKQoiOwoKLy8gQ3JlYXRlIHRoZSB0YWJsZQokc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ29vZ2xlbWFwc19wb2x5bGluZXBhcnRzIiwgJGZsZHMsICR0YWJvcHRhcnJheSk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKLy8gQ3JlYXRlIGEgc2VxdWVuY2UKJGRiLT5DcmVhdGVTZXF1ZW5jZShjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9nb29nbGVtYXBzX3BvbHlsaW5lcGFydHNfc2VxIik7CgovLyBDYWNoZSBub3QgdXNlZCB5ZXQKJGZsZHMgPSAiCiAgICAgICAgYWRkcmVzcyBDKDI1NSkgS0VZIERFRkFVTFQgJycsIAogICAgICAgIGxvbiBGLAogICAgICAgIGxhdCBGCiAgICAgICAgIjsKCiRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9nb29nbGVtYXBzX2NhY2hlIiwgJGZsZHMsICR0YWJvcHRhcnJheSk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKLy8gY3JlYXRlIGEgc2VxdWVuY2UKJGRiLT5DcmVhdGVTZXF1ZW5jZShjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9nb29nbGVtYXBzX2NhY2hlX3NlcSIpOwoKCi8vIGNyZWF0ZSBhIHBlcm1pc3Npb24KJHRoaXMtPkNyZWF0ZVBlcm1pc3Npb24oJ1VzZSBHb29nbGVNYXBzJywgJ1VzZSBHb29nbGVNYXBzJyk7CgoKLy8gY3JlYXRlIGEgcHJlZmVyZW5jZQokdGhpcy0+U2V0UHJlZmVyZW5jZSgnbG9va3Vwc2VydmljZScsICdHT09HTEUnKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ3VzZWNhY2hlJywgJzAnKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ3VzZW1hcmtlcnNoYWRvd3MnLCAwKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ3lhaG9vYXBwaWQnLCAnJyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxldmVsJywgMSApOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnZWFzeWxvY2F0b3JsYXQnLCAwICk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxvbicsIDAgKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2Vhc3lsb2NhdG9yc2F2ZWxhc3QnLCAnMScgKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2Vhc3lsb2NhdG9yY3Vyc29yJywgJ2Nyb3NzaGFpcicpOwoKJGNvbmZpZyA9ICRnQ21zLT5HZXRDb25maWcoKTsKLy8gUHJlcGFyZSBhIGRpcmVjdG9yeSB0aGF0IHdpbGwgY29udGFpbiB0aGUgaW1hZ2VzIG9mIHRoZSBtYXJrZXJzIGFuZCBvbmUgZm9yIHRoZSBzaGFkb3dzIG9mIHRoZSBtYXJrZXJzCiRwYXRoID0gJHRoaXMtPmNvbmZpZ1sndXBsb2Fkc19wYXRoJ10uJy8nLiR0aGlzLT5nZXROYW1lKCk7Ci8vIE1ha2Ugc3VyZSB0aGUgZGlyZWN0b3J5IGNhbiBiZSBmb3VuZC4gQ3JlYXRlIGl0LCBlcnJvciBoYW5kbGluZyB3aWxsIGNvdmVyIGFueSBwcm9ibGVtcyBmb3VuZAppZiAoICFmaWxlX2V4aXN0cyggJHBhdGggKSApIG1rZGlyKCRwYXRoLCAwNzc3KTsKJG1hcmtlcnNwYXRoID0gJHBhdGguRElSRUNUT1JZX1NFUEFSQVRPUi4nbWFya2Vycyc7CmlmICggIWZpbGVfZXhpc3RzKCAkbWFya2Vyc3BhdGggKSApIG1rZGlyKCRtYXJrZXJzcGF0aCwgMDc3Nyk7CiRtYXJrZXJzaGFkb3dzcGF0aCA9ICRwYXRoLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ21hcmtlcnNoYWRvd3MnOwppZiAoICFmaWxlX2V4aXN0cyggJG1hcmtlcnNoYWRvd3NwYXRoICkgKSBta2RpcigkbWFya2Vyc2hhZG93c3BhdGgsIDA3NzcpOwovLyBDb3B5IG92ZXIgdGhlIGRlZmF1bHQgc3VwcGxpZWQgbWFya2VycwokbWFya2VyZGlyID0gZGlybmFtZShfX0ZJTEVfXykuRElSRUNUT1JZX1NFUEFSQVRPUi4naW1hZ2VzJy5ESVJFQ1RPUllfU0VQQVJBVE9SLidtYXJrZXJzJzsKaWYgKGZpbGVfZXhpc3RzKCAkbWFya2VyZGlyICkgKSB7CgkkZGlyID0gb3BlbmRpcigkbWFya2VyZGlyKTsKCS8vIEZpbHRlciBvdXQgdGhlIGRpcmVjdG9yeSBjb250cm9saW5nIGNoYXJhY3RlcnMgYW5kIGJ1aWxkIHNlbGVjdGFibGUgb3B0aW9ucyBvZiB0aGUgb3RoZXJzCgl3aGlsZSAoKCRmaWxlID0gcmVhZGRpcigkZGlyKSkgIT09IGZhbHNlKQoJICB7CgkgIAlpZiAoJGZpbGUgIT0nLicgJiYgJGZpbGUhPScuLicpIHsKICAJCQljb3B5KCRtYXJrZXJkaXIuRElSRUNUT1JZX1NFUEFSQVRPUi4kZmlsZSwgJG1hcmtlcnNwYXRoLkRJUkVDVE9SWV9TRVBBUkFUT1IuJGZpbGUpOwoJICAJfQoJICB9CgljbG9zZWRpcigkZGlyKTsKfQovLyBDb3B5IG92ZXIgdGhlIGRlZmF1bHQgc3VwcGxpZWQgbWFya2Vyc2hhZG93cwokbWFya2VyZGlyID0gZGlybmFtZShfX0ZJTEVfXykuRElSRUNUT1JZX1NFUEFSQVRPUi4naW1hZ2VzJy5ESVJFQ1RPUllfU0VQQVJBVE9SLidtYXJrZXJzaGFkb3dzJzsKaWYgKGZpbGVfZXhpc3RzKCAkbWFya2VyZGlyICkgKSB7CgkkZGlyID0gb3BlbmRpcigkbWFya2VyZGlyKTsKCS8vIEZpbHRlciBvdXQgdGhlIGRpcmVjdG9yeSBjb250cm9saW5nIGNoYXJhY3RlcnMgYW5kIGJ1aWxkIHNlbGVjdGFibGUgb3B0aW9ucyBvZiB0aGUgb3RoZXJzCgl3aGlsZSAoKCRmaWxlID0gcmVhZGRpcigkZGlyKSkgIT09IGZhbHNlKQoJICB7CgkgIAlpZiAoJGZpbGUgIT0nLicgJiYgJGZpbGUhPScuLicpIHsKICAJCQljb3B5KCRtYXJrZXJkaXIuRElSRUNUT1JZX1NFUEFSQVRPUi4kZmlsZSwgJG1hcmtlcnNoYWRvd3NwYXRoLkRJUkVDVE9SWV9TRVBBUkFUT1IuJGZpbGUpOwoJICAJfQoJICB9CgljbG9zZWRpcigkZGlyKTsKfQoKLy8gTWVudGlvbiB0aGUgaW5zdGFsbGF0aW9uIGluIHRoZSBhZG1pbiBsb2cKJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCdpbnN0YWxsZWQnLCR0aGlzLT5HZXRWZXJzaW9uKCkpKTsKCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiRnQ21zID0gY21zbXMoKTsgaWYoICFpc19vYmplY3QoJGdDbXMpICkgZXhpdDsKJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKCi8vIFJlbW92ZSB0aGUgZGF0YWJhc2UgdGFibGVzCiRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoICRkYiApOwoKLy8gUmVtb3ZlIHRoZSBtYXBzCiRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dvb2dsZW1hcHNfbWFwcyIgKTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoKLy8gUmVtb3ZlIHRoZSBtYXJrZXJzCiRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dvb2dsZW1hcHNfbWFya2VycyIgKTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwokZGItPkRyb3BTZXF1ZW5jZSggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ29vZ2xlbWFwc19tYXJrZXJzX3NlcSIgKTsKCi8vIFJlbW92ZSB0aGUgcG95bGluZXMKJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ29vZ2xlbWFwc19wb2x5bGluZXMiICk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKJGRiLT5Ecm9wU2VxdWVuY2UoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dvb2dsZW1hcHNfcG9seWxpbmVzX3NlcSIgKTsKJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ29vZ2xlbWFwc19wb2x5bGluZXBhcnRzIiApOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiRkYi0+RHJvcFNlcXVlbmNlKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9nb29nbGVtYXBzX3BvbHlsaW5lcGFydHNfc2VxIiApOwoKLy8gUmVtb3ZlIHRoZSBjYWNoZQokc3FsYXJyYXkgPSAkZGljdC0+RHJvcFRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9nb29nbGVtYXBzX2NhY2hlIiApOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiRkYi0+RHJvcFNlcXVlbmNlKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9nb29nbGVtYXBzX2NhY2hlX3NlcSIgKTsKCi8vIFJlbW92ZSB0aGUgcGVybWlzc2lvbnMKJHRoaXMtPlJlbW92ZVBlcm1pc3Npb24oJ1VzZSBHb29nbGVNYXBzJyk7CgovLyBSZW1vdmUgdGhlIHByZWZlcmVuY2VzCiR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCk7CgovLyBBbmQgYWxsIFRlbXBsYXRlcwokdGhpcy0+RGVsZXRlVGVtcGxhdGUoKTsKCi8vIFB1dCBhdWRpdCB0cmFpbCBpbnRvIHRoZSBhZG1pbiBsb2cKJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCd1bmluc3RhbGxlZCcpKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGdDbXMgPSBjbXNtcygpOyBpZiggIWlzX29iamVjdCgkZ0NtcykgKSBleGl0OwoKJGN1cnJlbnRfdmVyc2lvbiA9ICRvbGR2ZXJzaW9uOwpzd2l0Y2goJGN1cnJlbnRfdmVyc2lvbikKewogY2FzZSAiMC4xLjIiOgogICBicmVhazsKIGNhc2UgIjAuMS4zIjoKICAgJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSgkZGIpOwoKICAgI2NoYW5nZSBtYXAgaW5mbyB0byB0ZXh0CiAgICRzcWxhcnJheSA9ICRkaWN0LT5BbHRlckNvbHVtblNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9nb29nbGVtYXBzX21hcHMiLCAiZGVzY3JpcHRpb24gWCIpOwogICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiAgICNjaGFuZ2UgbWFya2VyIGluZm8gdG8gdGV4dAogICAkc3FsYXJyYXkgPSAkZGljdC0+QWx0ZXJDb2x1bW5TUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ29vZ2xlbWFwc19tYXJrZXJzIiwgImluZm8gWCIpOwogICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiAgIGJyZWFrOwogY2FzZSAiMC4xLjQiOgogICAkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7CgogICAjY2hhbmdlIG1hcCBpbmZvIHRvIHRleHQKICAgJHNxbGFycmF5ID0gJGRpY3QtPkFsdGVyQ29sdW1uU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dvb2dsZW1hcHNfY2FjaGUiLCAibGF0IEYiKTsKICAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwogICAKICAgJGN1cnJlbnRfdmVyc2lvbiA9ICIwLjEuNCI7CiBjYXNlICIwLjEuNCI6CiAJJGNvbmZpZyA9ICRnQ21zLT5HZXRDb25maWcoKTsKCS8vIFByZXBhcmUgYSBkaXJlY3RvcnkgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIGltYWdlcyBvZiB0aGUgbWFya2VycyBhbmQgb25lIGZvciB0aGUgc2hhZG93cyBvZiB0aGUgbWFya2VycwoJJHBhdGggPSAkdGhpcy0+Y29uZmlnWyd1cGxvYWRzX3BhdGgnXS5ESVJFQ1RPUllfU0VQQVJBVE9SLiR0aGlzLT5nZXROYW1lKCk7CgkvLyBNYWtlIHN1cmUgdGhlIGRpcmVjdG9yeSBjYW4gYmUgZm91bmQuIENyZWF0ZSBpdCwgZXJyb3IgaGFuZGxpbmcgd2lsbCBjb3ZlciBhbnkgcHJvYmxlbXMgZm91bmQKCW1rZGlyKCRwYXRoLCAwNzc3KTsKCSRtYXJrZXJzcGF0aCA9ICRwYXRoLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ21hcmtlcnMnOwoJbWtkaXIoJG1hcmtlcnNwYXRoLCAwNzc3KTsKCSRtYXJrZXJzaGFkb3dzcGF0aCA9ICRwYXRoLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ21hcmtlcnNoYWRvd3MnOwoJbWtkaXIoJG1hcmtlcnNoYWRvd3NwYXRoLCAwNzc3KTsKCS8vIENvcHkgb3ZlciB0aGUgZGVmYXVsdCBzdXBwbGllZCBtYXJrZXJzCgkkbWFya2VyZGlyID0gZGlybmFtZShfX0ZJTEVfXykuRElSRUNUT1JZX1NFUEFSQVRPUi4naW1hZ2VzJy5ESVJFQ1RPUllfU0VQQVJBVE9SLidtYXJrZXJzJzsKCWlmIChmaWxlX2V4aXN0cyggJG1hcmtlcmRpciApICkgewoJCSRkaXIgPSBvcGVuZGlyKCRtYXJrZXJkaXIpOwoJCS8vIEZpbHRlciBvdXQgdGhlIGRpcmVjdG9yeSBjb250cm9saW5nIGNoYXJhY3RlcnMgYW5kIGJ1aWxkIHNlbGVjdGFibGUgb3B0aW9ucyBvZiB0aGUgb3RoZXJzCgkJd2hpbGUgKCgkZmlsZSA9IHJlYWRkaXIoJGRpcikpICE9PSBmYWxzZSkKCQkgIHsKCQkgIAlpZiAoJGZpbGUgIT0nLicgJiYgJGZpbGUhPScuLicpIHsKCSAgCQkJY29weSgkbWFya2VyZGlyLkRJUkVDVE9SWV9TRVBBUkFUT1IuJGZpbGUsICRtYXJrZXJzcGF0aC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRmaWxlKTsKCQkgIAl9CgkJICB9CgkJY2xvc2VkaXIoJGRpcik7Cgl9CgoJJGN1cnJlbnRfdmVyc2lvbiA9ICIwLjEuNSI7CiBjYXNlICIwLjEuNSI6CgkvLyBObyBkYXRhYmFzZSBjaGFuZ2VzLiBPbmx5IGludGVybmFsIGNoYW5nZXMgZm9yIHRoZSB1c2Ugb2YgcGFyYW1ldGVycyAgIAoJJGN1cnJlbnRfdmVyc2lvbiA9ICIwLjEuNiI7CiBjYXNlICIwLjEuNiI6CiAJJGNvbmZpZyA9ICRnQ21zLT5HZXRDb25maWcoKTsKCS8vIFByZXBhcmUgbmFtZSBvZiBkaXJlY3Rvcnkgd2l0aCBvbGQgMi4wIEFQSQoJJEFQSWRpciA9ICR0aGlzLT5jb25maWdbJ3Jvb3RfdXJsJ10uRElSRUNUT1JZX1NFUEFSQVRPUi4nbW9kdWxlcycuCgkJRElSRUNUT1JZX1NFUEFSQVRPUi4kdGhpcy0+Z2V0TmFtZSgpLgoJCURJUkVDVE9SWV9TRVBBUkFUT1IuJ2xpYicuRElSRUNUT1JZX1NFUEFSQVRPUi4nR29vZ2xlTWFwQVBJLTIuMCc7CgkkcGF0aCA9ICRBUElkaXI7CgkvLyBDbGVhciB0aGUgZGlyZWN0b3J5CgkkaGFuZGxlID0gb3BlbmRpcigkQVBJZGlyKTsKCXdoaWxlIChGQUxTRSAhPT0gKCRlbnRyeSA9IHJlYWRkaXIoJGhhbmRsZSkpKSB7CgkJaWYgKCRlbnRyeSAhPSAnLicgJiYgJGVudHJ5ICE9ICcuLicpCgkJewoJCQlpZighKHN1YnN0cigkcGF0aCwtMSkgPT0gRElSRUNUT1JZX1NFUEFSQVRPUikpCSRwYXRoIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7CgkJCSRvYmogPSAkcGF0aC4kZW50cnk7CgkJCWlmIChpc19maWxlKCRvYmopKQoJCQl7CgkJCQl1bmxpbmsoJG9iaik7CQkJCQkKCQkJfQoJCX0KCX0KCWNsb3NlZGlyKCRoYW5kbGUpOwoJLy8gTm93IHRoYXQgaXRzIGNsZWFyLCByZW1vdmUgdGhlIGRpcmVjdG9yeQoJaWYoaXNfZGlyKCRBUElkaXIpKSBybWRpcigkQVBJZGlyKTsKCgkkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7Cgkkc3FsYXJyYXkgPSAkZGljdC0+QWRkQ29sdW1uU1FMKGNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX2dvb2dsZW1hcHNfbWFwcycsICd6b29tc2Nyb2xsd2hlZWwgTCcgKTsKCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCSRzcWxhcnJheSA9ICRkaWN0LT5BZGRDb2x1bW5TUUwoY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfZ29vZ2xlbWFwc19tYXBzJywgJ3NjYWxlX2NvbnRyb2wgTCcgKTsKCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCgkkY3VycmVudF92ZXJzaW9uID0gJzAuMS43JzsKCiBjYXNlICcwLjEuNyc6CgkkZm4gPSBkaXJuYW1lKF9fRklMRV9fKS5ESVJFQ1RPUllfU0VQQVJBVE9SLid0ZW1wbGF0ZXMnLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ2Vhc3lsb2NhdG9yLnRwbCc7CglpZiggZmlsZV9leGlzdHMoICRmbiApICkKCXsKCQkkdGVtcGxhdGUgPSBAZmlsZV9nZXRfY29udGVudHMoJGZuKTsKCQkkdGhpcy0+U2V0VGVtcGxhdGUoICdnb29nbGVtYXBzX2Vhc3lsb2NhdG9yJywgJHRlbXBsYXRlLCAkdGhpcy0+R2V0TmFtZSgpKTsKCX0KCgkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnZWFzeWxvY2F0b3JsZXZlbCcsIDEgKTsKCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxhdCcsIDQ0ICk7CgkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnZWFzeWxvY2F0b3Jsb24nLCAtNjMgKTsKCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcnNhdmVsYXN0JywgJzEnICk7CgkkY3VycmVudF92ZXJzaW9uID0gJzAuMS44JzsKCQogIGNhc2UgJzAuMS44JzoKICAJJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSgkZGIpOwoJLy8gUHJlcGFyZSBuYW1lIG9mIGRpcmVjdG9yeSB3aXRoIG9sZCAyLjUgQVBJCgkkQVBJZGlyID0gY21zX2pvaW5fcGF0aCgkdGhpcy0+Y29uZmlnWydyb290X3VybCddLCdtb2R1bGVzJywkdGhpcy0+Z2V0TmFtZSgpLAoJCSdsaWInLCdHb29nbGVNYXBBUEktMi41Jyk7CgkkcGF0aCA9ICRBUElkaXI7CgkvLyBDbGVhciB0aGUgZGlyZWN0b3J5CgkkaGFuZGxlID0gb3BlbmRpcigkQVBJZGlyKTsKCWlmICgkaGFuZGxlKSB7CgkJd2hpbGUgKEZBTFNFICE9PSAoJGVudHJ5ID0gcmVhZGRpcigkaGFuZGxlKSkpIHsKCQkJaWYgKCRlbnRyeSAhPSAnLicgJiYgJGVudHJ5ICE9ICcuLicpCgkJCXsKCQkJCWlmKCEoc3Vic3RyKCRwYXRoLC0xKSA9PSBESVJFQ1RPUllfU0VQQVJBVE9SKSkJJHBhdGggLj0gRElSRUNUT1JZX1NFUEFSQVRPUjsKCQkJCSRvYmogPSAkcGF0aC4kZW50cnk7CgkJCQlpZiAoaXNfZmlsZSgkb2JqKSkKCQkJCXsKCQkJCQl1bmxpbmsoJG9iaik7CQkJCQkKCQkJCX0KCQkJfQoJCX0KCQljbG9zZWRpcigkaGFuZGxlKTsKCQkvLyBOb3cgdGhhdCBpdHMgY2xlYXIsIHJlbW92ZSB0aGUgZGlyZWN0b3J5CgkJaWYoaXNfZGlyKCRBUElkaXIpKSBybWRpcigkQVBJZGlyKTsKCX0KCgkvLyBQb2x5bGluZXMKCSRmbGRzID0gIgoJCXBvbHlsaW5lX2lkIEkgS0VZLAoJCW1hcF9pZCBJLAoJCW5hbWUgQyg4MCksCgkJc3Ryb2tlY29sb3IgQyg3KSwKCQlzdHJva2VvcGFjaXR5IEYsCgkJc3Ryb2tld2VpZ2h0IEkKCSI7CgoJLy8gQ3JlYXRlIHRoZSB0YWJsZQoJJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dvb2dsZW1hcHNfcG9seWxpbmVzIiwgJGZsZHMsICR0YWJvcHRhcnJheSk7CgkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgkvLyBDcmVhdGUgYSBzZXF1ZW5jZQoJJGRiLT5DcmVhdGVTZXF1ZW5jZShjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9nb29nbGVtYXBzX3BvbHlsaW5lc19zZXEiKTsKCQoJLy8gUG9seWxpbmUgcGFydHMKCSRmbGRzID0gIgoJCXBvbHlsaW5lcGFydF9pZCBJIEtFWSwKCQlwb2x5bGluZV9pZCBJIEtFWSwKCQlzZXEgSSwKCQlkZXNjcmlwdGlvbiBDKDI1NSksCgkJbGF0IEMoMTAwKSwKCQlsb24gQygxMDApCgkiOwoJCgkvLyBDcmVhdGUgdGhlIHRhYmxlCgkkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ29vZ2xlbWFwc19wb2x5bGluZXBhcnRzIiwgJGZsZHMsICR0YWJvcHRhcnJheSk7CgkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgkvLyBDcmVhdGUgYSBzZXF1ZW5jZQoJJGRiLT5DcmVhdGVTZXF1ZW5jZShjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9nb29nbGVtYXBzX3BvbHlsaW5lcGFydHNfc2VxIik7CgkkY3VycmVudF92ZXJzaW9uID0gJzAuMS45JzsKCQogIGNhc2UgJzAuMS45JzoKCSRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKCSRzcWxhcnJheSA9ICRkaWN0LT5BZGRDb2x1bW5TUUwoY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfZ29vZ2xlbWFwc19wb2x5bGluZXMnLCAnZGlzdGFuY2UgRicgKTsKCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCSRzcWxhcnJheSA9ICRkaWN0LT5BZGRDb2x1bW5TUUwoY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfZ29vZ2xlbWFwc19wb2x5bGluZXMnLCAnZGlzdGFuY2V1b20gQygxKScgKTsKCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCgkvLyBSZW1vdmUgdGhlIEVhc3lsb2NhdG9yIHRlbXBsYXRlICh3YXMgbm90IGluIHVzZSBhdCBhbGwpCgkkdGhpcy0+RGVsZXRlVGVtcGxhdGUoJ2dvb2dsZW1hcHNfZWFzeWxvY2F0b3InKTsKCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmN1cnNvcicsICdjcm9zc2hhaXInKTsKCS8vIFByZXBhcmUgbmFtZSBvZiBkaXJlY3Rvcnkgd2l0aCBlYXN5bG9jYXRvciB0ZW1wbGF0ZQoJJG9iaiA9IGNtc19qb2luX3BhdGgoJHRoaXMtPmNvbmZpZ1sncm9vdF91cmwnXSwnbW9kdWxlcycsJHRoaXMtPmdldE5hbWUoKSwKCQkndGVtcGxhdGVzJywnZWFzeWxvY2F0b3IudHBsJyk7CglpZiAoaXNfZmlsZSgkb2JqKSkgewoJCUB1bmxpbmsoJG9iaik7CQkJCQkKCX0KCSRjdXJyZW50X3ZlcnNpb24gPSAnMC4yLjAnOwogIGNhc2UgJzAuMi4wJzoKCSRjdXJyZW50X3ZlcnNpb24gPSAnMC4yLjEnOwoKIGRlZmF1bHQ6CiAgICBicmVhazsKfQoKLy8gcHV0IG1lbnRpb24gaW50byB0aGUgYWRtaW4gbG9nCiR0aGlzLT5BdWRpdCggMCwgJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpLCAkdGhpcy0+TGFuZygndXBncmFkZWQnLCR0aGlzLT5HZXRWZXJzaW9uKCkpKTsKCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/201a.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi8vVGl0bGU6ICAgICAgRkNQIENvbWJvLUNocm9tYXRpYyBDb2xvciBQaWNrZXIKLy9VUkw6ICAgICAgICBodHRwOi8vd3d3LmZyZWUtY29sb3ItcGlja2VyLmNvbQovL1Byb2R1Y3QgTm8uIEZDUDIwMWEKLy9WZXJzaW9uOiAgICAxLjIKLy9EYXRlOiAgICAgICAxMC8wMS8yMDA2Ci8vTk9URTogICAgICAgUGVybWlzc2lvbiBnaXZlbiB0byB1c2UgdGhpcyBzY3JpcHQgaW4gQU5ZIGtpbmQgb2YgYXBwbGljYXRpb25zIElGCi8vICAgICAgICAgICAgc2NyaXB0IGNvZGUgcmVtYWlucyBVTkNIQU5HRUQgYW5kIHRoZSBhbmNob3IgdGFnICJwb3dlcmVkIGJ5IEZDUCIKLy8gICAgICAgICAgICByZW1haW5zIHZhbGlkIGFuZCB2aXNpYmxlIHRvIHRoZSB1c2VyLgovLwovLyAgQ2FsbDogICAgIHNob3dDb2xvckdyaWQyKCJpbnB1dF9maWVsZF9pZCIsInNwYW5faWQiKQovLyAgQWRkOiAgICAgIDxESVYgSUQ9IkNPTE9SUElDS0VSMjAxIiBDTEFTUz0iQ09MT1JQSUNLRVIyMDEiPjwvRElWPiBhbnl3aGVyZSBpbiBib2R5Ci8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpmdW5jdGlvbiBnZXRTY3JvbGxZKCl7dmFyIHNjck9mWCA9IDAsc2NyT2ZZPTA7aWYodHlwZW9mKHdpbmRvdy5wYWdlWU9mZnNldCk9PSdudW1iZXInKXtzY3JPZlk9d2luZG93LnBhZ2VZT2Zmc2V0O3Njck9mWD13aW5kb3cucGFnZVhPZmZzZXQ7fWVsc2UgaWYoZG9jdW1lbnQuYm9keSYmKGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdHx8ZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ApKXtzY3JPZlk9ZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A7c2NyT2ZYPWRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdDt9ZWxzZSBpZihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCkpe3Njck9mWT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wO3Njck9mWD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdDt9cmV0dXJuIHNjck9mWTt9ZG9jdW1lbnQud3JpdGUoIjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+LmNvbG9ycGlja2VyMjAxe3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOiNGRkY7Ym9yZGVyOnNvbGlkIDFweCAjQ0NDO3BhZGRpbmc6NHB4O3otaW5kZXg6OTk5O2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuU2hhZG93KGNvbG9yPSNEMEQwRDAsZGlyZWN0aW9uPTEzNSk7fS5vNTU4MmJyZHtwYWRkaW5nOjA7d2lkdGg6MTJweDtoZWlnaHQ6MTRweDtib3JkZXItYm90dG9tOnNvbGlkIDFweCAjREZERkRGO2JvcmRlci1yaWdodDpzb2xpZCAxcHggI0RGREZERjt9YS5vNTU4Mm42NiwubzU1ODJuNjYsLm81NTgybjY2YXtmb250LWZhbWlseTphcmlhbCx0YWhvbWEsc2Fucy1zZXJpZjt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2ZvbnQtc2l6ZTo5cHg7Y29sb3I6IzY2Njtib3JkZXI6bm9uZTt9Lm81NTgybjY2LC5vNTU4Mm42NmF7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7fWE6aG92ZXIubzU1ODJuNjZ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6I0ZGQTUwMDtjdXJzb3I6cG9pbnRlcjt9LmEwMXAze3BhZGRpbmc6MXB4IDRweCAxcHggMnB4O2JhY2tncm91bmQ6d2hpdGVzbW9rZTtib3JkZXI6c29saWQgMXB4ICNERkRGREY7fTwvc3R5bGU+Iik7ZnVuY3Rpb24gZ2V0VG9wMigpe2NzQnJIdD0wO2lmKHR5cGVvZih3aW5kb3cuaW5uZXJXaWR0aCk9PSdudW1iZXInKXtjc0JySHQ9d2luZG93LmlubmVySGVpZ2h0O31lbHNlIGlmKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkpe2NzQnJIdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O31lbHNlIGlmKGRvY3VtZW50LmJvZHkmJihkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRofHxkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCkpe2NzQnJIdD1kb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodDt9Y3RvcD0oKGNzQnJIdC8yKS0xMTUpK2dldFNjcm9sbFkoKTtyZXR1cm4gY3RvcDt9dmFyIG5vY29sMT0iJiM3ODsmIzc5OyYjMzI7JiM2NzsmIzc5OyYjNzY7JiM3OTsmIzgyOyIsY2xvczE9IiYjNjc7JiM3NjsmIzc5OyYjODM7JiM2OTsiLHR0Mj0iJiM3MDsmIzgyOyYjNjk7JiM2OTsmIzQ1OyYjNjc7JiM3OTsmIzc2OyYjNzk7JiM4MjsmIzQ1OyYjODA7JiM3MzsmIzY3OyYjNzU7JiM2OTsmIzgyOyYjNDY7JiM2NzsmIzc5OyYjNzc7IixobTI9IiYjMTA0OyYjMTE2OyYjMTE2OyYjMTEyOyYjNTg7JiM0NzsmIzQ3OyYjMTE5OyYjMTE5OyYjMTE5OyYjNDY7IjtobTIrPXR0Mjt0dDI9IiYjODA7JiM3OTsmIzg3OyYjNjk7JiM4MjsmIzY5OyYjNjg7JiMzMjsmIzk4OyYjMTIxOyYjMzI7JiM3MDsmIzY3OyYjODA7IjtmdW5jdGlvbiBnZXRMZWZ0Migpe3ZhciBjc0JyV3Q9MDtpZih0eXBlb2Yod2luZG93LmlubmVyV2lkdGgpPT0nbnVtYmVyJyl7Y3NCcld0PXdpbmRvdy5pbm5lcldpZHRoO31lbHNlIGlmKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkpe2NzQnJXdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7fWVsc2UgaWYoZG9jdW1lbnQuYm9keSYmKGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGh8fGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0KSl7Y3NCcld0PWRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGg7fWNsZWZ0PShjc0JyV3QvMiktMTI1O3JldHVybiBjbGVmdDt9ZnVuY3Rpb24gc2V0Q0NibGRJRDIob2JqSUQsdmFsKXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZChvYmpJRCkudmFsdWU9dmFsO31mdW5jdGlvbiBzZXRDQ2JsZFN0eTIob2JqSUQscHJvcCx2YWwpe3N3aXRjaChwcm9wKXtjYXNlICJiYyI6aWYob2JqSUQhPSdub25lJyl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob2JqSUQpLnN0eWxlLmJhY2tncm91bmRDb2xvcj12YWw7fTticmVhaztjYXNlICJ2cyI6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob2JqSUQpLnN0eWxlLnZpc2liaWxpdHk9dmFsO2JyZWFrO2Nhc2UgImRzIjpkb2N1bWVudC5nZXRFbGVtZW50QnlJZChvYmpJRCkuc3R5bGUuZGlzcGxheT12YWw7YnJlYWs7Y2FzZSAidHAiOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG9iaklEKS5zdHlsZS50b3A9dmFsO2JyZWFrO2Nhc2UgImxmIjpkb2N1bWVudC5nZXRFbGVtZW50QnlJZChvYmpJRCkuc3R5bGUubGVmdD12YWw7YnJlYWs7fX1mdW5jdGlvbiBwdXRPQkp4Q29sb3IyKE9CakVsZW0sU2FtcCxwaWdNZW50KXtpZihwaWdNZW50IT0neCcpe3NldENDYmxkSUQyKE9CakVsZW0scGlnTWVudCk7c2V0Q0NibGRTdHkyKFNhbXAsJ2JjJyxwaWdNZW50KTt9c2V0Q0NibGRTdHkyKCdjb2xvcnBpY2tlcjIwMScsJ3ZzJywnaGlkZGVuJyk7c2V0Q0NibGRTdHkyKCdjb2xvcnBpY2tlcjIwMScsJ2RzJywnbm9uZScpO31mdW5jdGlvbiBzaG93Q29sb3JHcmlkMihPQmpFbGVtLFNhbSl7dmFyIG9ialg9bmV3IEFycmF5KCcwMCcsJzMzJywnNjYnLCc5OScsJ0NDJywnRkYnKTt2YXIgYz0wO3ZhciB6PSciJytPQmpFbGVtKyciLCInK1NhbSsnIiwiIic7dmFyIHhsPSciJytPQmpFbGVtKyciLCInK1NhbSsnIiwieCInO3ZhciBtaWQ9Jyc7bWlkKz0nPHRhYmxlIGJnY29sb3I9IiNGRkZGRkYiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBzdHlsZT0iYm9yZGVyOnNvbGlkIDBweCAjRjBGMEYwO3BhZGRpbmc6MnB4OyI+PHRyPic7bWlkKz0iPHRkIGNvbHNwYW49JzE4JyBhbGlnbj0nbGVmdCcgc3R5bGU9J2ZvbnQtc2l6ZToxMHB4O2JhY2tncm91bmQ6IzY2NjZDQztjb2xvcjojRkZGO2ZvbnQtZmFtaWx5OmFyaWFsOyc+Jm5ic3A7Q2hyb21hdGljIFNlbGVjdGlvbiBQYWxldHRlPC90ZD48L3RyPjx0cj48dGQgY29sc3Bhbj0nMTgnIGFsaWduPSdjZW50ZXInIHN0eWxlPSdtYXJnaW46MDtwYWRkaW5nOjJweDtoZWlnaHQ6MTJweDsnID48aW5wdXQgY2xhc3M9J281NTgybjY2JyB0eXBlPSd0ZXh0JyBzaXplPScxMicgaWQ9J281NTgybjY2JyB2YWx1ZT0nI0ZGRkZGRic+PGlucHV0IGNsYXNzPSdvNTU4Mm42NmEnIHR5cGU9J3RleHQnIHNpemU9JzInIHN0eWxlPSd3aWR0aDoxNHB4OycgaWQ9J281NTgybjY2YScgb25jbGljaz0namF2YXNjcmlwdDphbGVydChcImNsaWNrIG9uIHNlbGVjdGVkIHN3YXRjaCBiZWxvdy4uLlwiKTsnIHZhbHVlPScnIHN0eWxlPSdib3JkZXI6c29saWQgMXB4ICM2NjY7Jz4mbmJzcDt8Jm5ic3A7PGEgY2xhc3M9J281NTgybjY2JyBocmVmPSdqYXZhc2NyaXB0Om9uY2xpY2s9cHV0T0JKeENvbG9yMigiK3orIiknPjxzcGFuIGNsYXNzPSdhMDFwMyc+Iitub2NvbDErIjwvc3Bhbj48L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PGEgY2xhc3M9J281NTgybjY2JyBocmVmPSdqYXZhc2NyaXB0Om9uY2xpY2s9cHV0T0JKeENvbG9yMigiK3hsKyIpJz48c3BhbiBjbGFzcz0nYTAxcDMnPiIrY2xvczErIjwvc3Bhbj48L2E+PC90ZD48L3RyPjx0cj4iO3ZhciBicj0xO2ZvcihvPTA7bzw2O28rKyl7bWlkKz0nPC90cj48dHI+Jztmb3IoeT0wO3k8Njt5Kyspe2lmKHk9PTMpe21pZCs9JzwvdHI+PHRyPic7fWZvcih4PTA7eDw2O3grKyl7dmFyIGdyaWQ9Jyc7Z3JpZD1vYmpYW29dK29ialhbeV0rb2JqWFt4XTt2YXIgYj0iJyIrT0JqRWxlbSsiJywgJyIrU2FtKyInLCcjIitncmlkKyInIjttaWQrPSc8dGQgY2xhc3M9Im81NTgyYnJkIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojJytncmlkKyciPjxhIGNsYXNzPSJvNTU4Mm42NiIgIGhyZWY9ImphdmFzY3JpcHQ6b25jbGljaz1wdXRPQkp4Q29sb3IyKCcrYisnKTsiIG9ubW91c2VvdmVyPWphdmFzY3JpcHQ6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm81NTgybjY2IikudmFsdWU9IiMnK2dyaWQrJyI7amF2YXNjcmlwdDpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibzU1ODJuNjZhIikuc3R5bGUuYmFja2dyb3VuZENvbG9yPSIjJytncmlkKyciOyAgdGl0bGU9IiMnK2dyaWQrJyI+PGRpdiBzdHlsZT0id2lkdGg6MTJweDtoZWlnaHQ6MTRweDsiPjwvZGl2PjwvYT48L3RkPic7YysrO319fW1pZCs9IjwvdHI+PHRyPjx0ZCBjb2xzcGFuPScxOCcgYWxpZ249J3JpZ2h0JyBzdHlsZT0ncGFkZGluZzoycHg7Ym9yZGVyOnNvbGlkIDFweCAjRkZGO2JhY2tncm91bmQ6I0ZGRjsnPjxhIGhyZWY9JyIraG0yKyInIHN0eWxlPSdjb2xvcjojNjY2O2ZvbnQtc2l6ZTo4cHg7Zm9udC1mYW1pbHk6YXJpYWw7dGV4dC1kZWNvcmF0aW9uOm5vbmU7bGV0dGVyLXNwYWNpbmc6MXB4Oyc+Iit0dDIrIjwvYT48L3RkPjwvdHI+PC90YWJsZT4iO3ZhciB0dG9wPWdldFRvcDIoKTtzZXRDQ2JsZFN0eTIoJ2NvbG9ycGlja2VyMjAxJywndHAnLHR0b3ApO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb2xvcnBpY2tlcjIwMScpLnN0eWxlLmxlZnQ9Z2V0TGVmdDIoKTtzZXRDQ2JsZFN0eTIoJ2NvbG9ycGlja2VyMjAxJywndnMnLCd2aXNpYmxlJyk7c2V0Q0NibGRTdHkyKCdjb2xvcnBpY2tlcjIwMScsJ2RzJywnYmxvY2snKTtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29sb3JwaWNrZXIyMDEnKS5pbm5lckhUTUw9bWlkO30K]]></data>
	</file>
	<file>
	  <filename>/templates/addresslookup.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRzdGFydGZvcm19Cgk8ZmllbGRzZXQ+CgkJPGxlZ2VuZD4mbmJzcDt7JHRpdGxlX2FkZHJlc3NxdWVyeX0mbmJzcDs8L2xlZ2VuZD4KCQk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCQkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX2FkZHJlc3N9OjwvcD4KCQkJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfYWRkcmVzc308L3A+CgkJPC9kaXY+Cgk8L2ZpZWxkc2V0PgoJe2lmICRyZXF1ZXN0Zm91bmR9Cgk8ZmllbGRzZXQ+CgkJPGxlZ2VuZD4mbmJzcDt7JHRpdGxlX3NlYXJjaHJlcXVlc3R9Jm5ic3A7PC9sZWdlbmQ+CgkJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQkJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV9sYXRpdHVkZX06PC9wPgoJCQkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRsYXRpdHVkZX08YnIgLz48L3A+CgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQkJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV9sb25naXR1ZGV9OjwvcD4KCQkJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskbG9uZ2l0dWRlfTxiciAvPjwvcD4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCQk8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KCQkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRhZGRtYXJrZXJ9PC9wPgoJCTwvZGl2PgoJPC9maWVsZHNldD4KCXsvaWZ9Cgl7aWYgJGdlb2Vycm9yfQoJCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJCTxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPgoJCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGJhZGFkZHJlc3N9PC9wPgoJCTwvZGl2PgoJey9pZn0KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRzdWJtaXR9eyRoaWRkZW59PC9wPgoJPC9kaXY+CnskZW5kZm9ybX0=]]></data>
	</file>
	<file>
	  <filename>/templates/admin_import_local.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmICRtZXNzYWdlICE9ICcnfTxwPnskbWVzc2FnZX08L3A+ey9pZn0KeyRzdGFydGZvcm19Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskdGl0bGVfaW1wb3J0aGVscH08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX2JlbG9uZ3N0b21hcH06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfYmVsb25nc3RvbWFwfTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfY3J1ZGVuZXNzfTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9jcnVkZW5lc3N9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV9pbXBvcnRmaWxlfTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9wb2x5bGluZWZpbGV9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaGlkZGVufXskc3VibWl0fXskY2FuY2VsfTwvcD4KCTwvZGl2Pgp7JGVuZGZvcm19Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/editmap.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2xpdGVyYWx9CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly9tYXBzLmdvb2dsZS5jb20vbWFwcy9hcGkvanM/c2Vuc29yPWZhbHNlIj48L3NjcmlwdD4gIAo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CigKCWZ1bmN0aW9uKCkgewoJCQl3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKXsKCQkJCXZhciBsYXRsbmcgPSBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKHsvbGl0ZXJhbH17JGVhc3lsb2NhdG9ybGF0fSwgeyRlYXN5bG9jYXRvcmxvbn17bGl0ZXJhbH0pOwoJCQkJdmFyIG9wdGlvbnMgPSB7CgkJCQkgIHpvb206IHsvbGl0ZXJhbH17JGVhc3lsb2NhdG9ybGV2ZWx9e2xpdGVyYWx9LAoJCQkJICBjZW50ZXI6IGxhdGxuZywKCQkJCSAgbWFwVHlwZUlkOiBnb29nbGUubWFwcy5NYXBUeXBlSWQuey9saXRlcmFsfXskbWFwdHlwZX17bGl0ZXJhbH0sCgkJCQkgIGRyYWdnYWJsZUN1cnNvcjogey9saXRlcmFsfSd7JGVhc3lsb2NhdG9yY3Vyc29yfSd7bGl0ZXJhbH0KCQkJCX07IAoJCQl2YXIgbWFwID0gbmV3IGdvb2dsZS5tYXBzLk1hcChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFwJyksIG9wdGlvbnMpOwoJCQkvLyBBdHRhY2hpbmcgYSBjbGljayBldmVudCB0byB0aGUgbWFwIAoJCQlnb29nbGUubWFwcy5ldmVudC5hZGRMaXN0ZW5lcihtYXAsICdjbGljaycsIGZ1bmN0aW9uKGUpIHsKCQkJLy8gR2V0dGluZyB0aGUgYWRkcmVzcyBmb3IgdGhlIHBvc2l0aW9uIGJlaW5nIGNsaWNrZWQgCgkJCXNldExhdGl0dWRlTG9uZ2l0dWRlKGUubGF0TG5nKTsKCQkJc2V0Wm9vbUxldmVsKG1hcCk7CgkJfSk7Cgl9CglmdW5jdGlvbiBzZXRMYXRpdHVkZUxvbmdpdHVkZShsYXRMbmcpIHsKCQlpZiAobGF0TG5nLmxhdCgpLnRvRml4ZWQoMCkgIT0gMCkgewoJCQkvLyBDb3B5IHRoZSBmb3VuZCBjb29yZGluYXRlcyBvbiBhIG1hcAoJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbTFfY2VudGVyX2xhdCcpLnZhbHVlID0gbGF0TG5nLmxhdCgpLnRvRml4ZWQoNSk7CgkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtMV9jZW50ZXJfbG9uJykudmFsdWUgPSBsYXRMbmcubG5nKCkudG9GaXhlZCg1KTsKCQl9Cgl9CglmdW5jdGlvbiBzZXRab29tTGV2ZWwobWFwKSB7CgkJdmFyIFpvb20gPSAgbWFwLmdldFpvb20oKTsKCQlpZiAoWm9vbSA8IDEpIHsgWm9vbSA9IDA7IH0KCQlpZiAoWm9vbSA+IDE4KSB7IFpvb20gPSAxODsgfQoJCWRvY3VtZW50LmZvcm1zWzBdLnsvbGl0ZXJhbH17JGlkfXtsaXRlcmFsfXpvb20udmFsdWUgPSBab29tOwoJfQp9KSgpOwoKPC9zY3JpcHQ+CnsvbGl0ZXJhbH0gCnskc3RhcnRmb3JtfQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPip7JHRpdGxlX25hbWV9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X25hbWV9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV9kZXNjcmlwdGlvbn06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfZGVzY3JpcHRpb259PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV9lYXN5bG9jYXRvcn06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPgoJCQk8ZGl2IGlkPSJtYXAiIHN0eWxlPSJ3aWR0aDogNTAwcHg7IGhlaWdodDogMzAwcHg7IG1hcmdpbi1sZWZ0OjE1MHB4Ij48L2Rpdj4KCQk8L3A+Cgk8L2Rpdj4gCgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV9jZW50ZXJfbGF0fTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9jZW50ZXJfbGF0fTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfY2VudGVyX2xvbn06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfY2VudGVyX2xvbn08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX3R5cGV9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X3R5cGV9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV93aWR0aH06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfd2lkdGh9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV9oZWlnaHR9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2hlaWdodH08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX2NvbnRyb2xzfTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9jb250cm9sc308L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX2NvbnRyb2xzX3NpemV9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2NvbnRyb2xzX3NpemV9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV90eXBlX2NvbnRyb2xzfTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF90eXBlX2NvbnRyb2xzfTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfc2lkZWJhcn06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfc2lkZWJhcn08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX2RpcmVjdGlvbnN9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2RpcmVjdGlvbnN9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV96b29tfTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF96b29tfTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfem9vbV9lbmNvbXBhc3N9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X3pvb21fZW5jb21wYXNzfTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfc2NhbGVfY29udHJvbH06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfc2NhbGVfY29udHJvbH08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX2JvdW5kc19mdWRnZX06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfYm91bmRzX2Z1ZGdlfTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfaW5mb193aW5kb3d9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2luZm9fd2luZG93fTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfaW5mb190cmlnZ2VyfTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9pbmZvX3RyaWdnZXJ9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaGlkZGVufXskc3VibWl0fXskY2FuY2VsfTwvcD4KCTwvZGl2Pgp7JGVuZGZvcm19Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/editmarker.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2xpdGVyYWx9CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly9tYXBzLmdvb2dsZS5jb20vbWFwcy9hcGkvanM/c2Vuc29yPWZhbHNlIj48L3NjcmlwdD4gIAo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CigKCWZ1bmN0aW9uKCkgewoJCQl3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKXsKCQkJCXZhciBsYXRsbmcgPSBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKHsvbGl0ZXJhbH17JGVhc3lsb2NhdG9ybGF0fSwgeyRlYXN5bG9jYXRvcmxvbn17bGl0ZXJhbH0pOwoJCQkJdmFyIG9wdGlvbnMgPSB7CgkJCQkgIHpvb206IHsvbGl0ZXJhbH17JGVhc3lsb2NhdG9ybGV2ZWx9e2xpdGVyYWx9LAoJCQkJICBjZW50ZXI6IGxhdGxuZywKCQkJCSAgbWFwVHlwZUlkOiBnb29nbGUubWFwcy5NYXBUeXBlSWQuey9saXRlcmFsfXskbWFwdHlwZX17bGl0ZXJhbH0sCgkJCQkgIGRyYWdnYWJsZUN1cnNvcjogey9saXRlcmFsfSd7JGVhc3lsb2NhdG9yY3Vyc29yfSd7bGl0ZXJhbH0KCQkJCX07IAoJCQl2YXIgbWFwID0gbmV3IGdvb2dsZS5tYXBzLk1hcChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFwJyksIG9wdGlvbnMpOwoJCQlpZiAoey9saXRlcmFsfXskdXNlZF9sYXR9e2xpdGVyYWx9ICE9IDApIHsKCQkJCS8vIENyZWF0aW5nIGEgbWFya2VyIGFuZCBwb3NpdGlvbmluZyBpdCBvbiB0aGUgbWFwICAKCQkJCXZhciBtYXJrZXIgPSBuZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHsgIAoJCQkJICBwb3NpdGlvbjogbmV3IGdvb2dsZS5tYXBzLkxhdExuZyh7L2xpdGVyYWx9eyR1c2VkX2xhdH0sIHskdXNlZF9sb259e2xpdGVyYWx9KSwgIAoJCQkJICBtYXA6IG1hcCwKCQkJCSAgaWNvbjogJ3svbGl0ZXJhbH17JHVzZWRfaWNvbn17bGl0ZXJhbH0nCgoJCQkJfSk7IAoJCQl9CgkJCS8vIEF0dGFjaGluZyBhIGNsaWNrIGV2ZW50IHRvIHRoZSBtYXAgCgkJCWdvb2dsZS5tYXBzLmV2ZW50LmFkZExpc3RlbmVyKG1hcCwgJ2NsaWNrJywgZnVuY3Rpb24oZSkgewoJCQkvLyBHZXR0aW5nIHRoZSBhZGRyZXNzIGZvciB0aGUgcG9zaXRpb24gYmVpbmcgY2xpY2tlZCAKCQkJc2V0TGF0aXR1ZGVMb25naXR1ZGUoZS5sYXRMbmcpOwoJCX0pOwoJfQoJZnVuY3Rpb24gc2V0TGF0aXR1ZGVMb25naXR1ZGUobGF0TG5nKSB7CgkJaWYgKGxhdExuZy5sYXQoKS50b0ZpeGVkKDApICE9IDApIHsKCQkJLy8gQ29weSB0aGUgZm91bmQgY29vcmRpbmF0ZXMgZm9yIGEgbWFya2VyCgkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtMV9sYXQnKS52YWx1ZSA9IGxhdExuZy5sYXQoKS50b0ZpeGVkKHsvbGl0ZXJhbH17JGxvY2F0aW9ucHJlY2lzaW9ufXtsaXRlcmFsfSk7CgkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtMV9sb24nKS52YWx1ZSA9IGxhdExuZy5sbmcoKS50b0ZpeGVkKHsvbGl0ZXJhbH17JGxvY2F0aW9ucHJlY2lzaW9ufXtsaXRlcmFsfSk7CgkJfQoJfQp9KSgpOwoKPC9zY3JpcHQ+CnsvbGl0ZXJhbH0gCnskc3RhcnRmb3JtfQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPip7JHRpdGxlX25hbWV9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X25hbWV9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV9iZWxvbmdzdG9tYXB9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2JlbG9uZ3N0b21hcH08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX2luZm99OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2luZm99PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV9lYXN5bG9jYXRvcn06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPgoJCQk8ZGl2IGlkPSJtYXAiIHN0eWxlPSJ3aWR0aDogNTAwcHg7IGhlaWdodDogMzAwcHg7IG1hcmdpbi1sZWZ0OjE1MHB4Ij48L2Rpdj4KCQk8L3A+Cgk8L2Rpdj4gCgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV9hZGRyZXNzfTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9hZGRyZXNzfTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfbGF0fTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9sYXR9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV9sb259OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2xvbn08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX2ljb259OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2ljb259PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaGlkZGVufXskc3VibWl0fXskY2FuY2VsfTwvcD4KCTwvZGl2Pgp7JGVuZGZvcm19Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/editpolyline.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2xpdGVyYWx9CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly9tYXBzLmdvb2dsZS5jb20vbWFwcy9hcGkvanM/c2Vuc29yPWZhbHNlIj48L3NjcmlwdD4gIAo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CigKCWZ1bmN0aW9uKCkgewoJCQl3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKXsKCQkJCXZhciBsYXRsbmcgPSBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKHsvbGl0ZXJhbH17JGVhc3lsb2NhdG9ybGF0fSwgeyRlYXN5bG9jYXRvcmxvbn17bGl0ZXJhbH0pOwoJCQkJdmFyIG9wdGlvbnMgPSB7CgkJCQkgIHpvb206IHsvbGl0ZXJhbH17JGVhc3lsb2NhdG9ybGV2ZWx9e2xpdGVyYWx9LAoJCQkJICBjZW50ZXI6IGxhdGxuZywKCQkJCSAgbWFwVHlwZUlkOiBnb29nbGUubWFwcy5NYXBUeXBlSWQuey9saXRlcmFsfXskbWFwdHlwZX17bGl0ZXJhbH0sCgkJCQkgIGRyYWdnYWJsZUN1cnNvcjogey9saXRlcmFsfSd7JGVhc3lsb2NhdG9yY3Vyc29yfSd7bGl0ZXJhbH0KCQkJCX07IAoKCQkJdmFyIG1hcCA9IG5ldyBnb29nbGUubWFwcy5NYXAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hcCcpLCBvcHRpb25zKTsKCQkJaWYgKHsvbGl0ZXJhbH17JHVzZWRfbGF0fXtsaXRlcmFsfSAhPSAwKSB7CgkJCQkvLyBDcmVhdGluZyBhIG1hcmtlciBhbmQgcG9zaXRpb25pbmcgaXQgb24gdGhlIG1hcCAgCgkJCQl2YXIgbWFya2VyID0gbmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7ICAKCQkJCSAgcG9zaXRpb246IG5ldyBnb29nbGUubWFwcy5MYXRMbmcoey9saXRlcmFsfXskdXNlZF9sYXR9LCB7JHVzZWRfbG9ufXtsaXRlcmFsfSksICAKCQkJCSAgbWFwOiBtYXAsCgkJCQkgIGljb246ICd7L2xpdGVyYWx9eyR1c2VkX2ljb259e2xpdGVyYWx9JwoKCQkJCX0pOyAKCQkJfQoJCQl2YXIgcGF0aCA9IFsKCQkJCXsvbGl0ZXJhbH17JHBhdGh9e2xpdGVyYWx9CgkJCV07CgkJCXBvbHlsaW5lID0gbmV3IGdvb2dsZS5tYXBzLlBvbHlsaW5lKHsKCQkJCXBhdGg6IHBhdGgsIAoJCQkJc3Ryb2tlQ29sb3I6IHsvbGl0ZXJhbH17JHBhdGhfY29sb3J9e2xpdGVyYWx9LCAKCQkJCXN0cm9rZU9wYWNpdHk6IHsvbGl0ZXJhbH17JHBhdGhfb3BhY2l0eX17bGl0ZXJhbH0sIAoJCQkJc3Ryb2tlV2VpZ2h0OiB7L2xpdGVyYWx9eyRwYXRoX3dlaWdodH17bGl0ZXJhbH0KCQkJCX0pOwoJCQlwb2x5bGluZS5zZXRNYXAobWFwKTsKCQkJCgkJCS8vIEF0dGFjaGluZyBhIGNsaWNrIGV2ZW50IHRvIHRoZSBtYXAgCgkJCWdvb2dsZS5tYXBzLmV2ZW50LmFkZExpc3RlbmVyKG1hcCwgJ2NsaWNrJywgZnVuY3Rpb24oZSkgewoJCQkvLyBHZXR0aW5nIHRoZSBhZGRyZXNzIGZvciB0aGUgcG9zaXRpb24gYmVpbmcgY2xpY2tlZCAKCQkJc2V0TGF0aXR1ZGVMb25naXR1ZGUoZS5sYXRMbmcpOwoJCX0pOwoJfQoJZnVuY3Rpb24gc2V0TGF0aXR1ZGVMb25naXR1ZGUobGF0TG5nKSB7CgkJaWYgKGxhdExuZy5sYXQoKS50b0ZpeGVkKDApICE9IDApIHsKCQkJLy8gQ29weSB0aGUgZm91bmQgY29vcmRpbmF0ZXMgZm9yIGEgbWFya2VyCgkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtMV9sYXQnKS52YWx1ZSA9IGxhdExuZy5sYXQoKS50b0ZpeGVkKHsvbGl0ZXJhbH17JGxvY2F0aW9ucHJlY2lzaW9ufXtsaXRlcmFsfSk7CgkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtMV9sb24nKS52YWx1ZSA9IGxhdExuZy5sbmcoKS50b0ZpeGVkKHsvbGl0ZXJhbH17JGxvY2F0aW9ucHJlY2lzaW9ufXtsaXRlcmFsfSk7CgkJfQoJfQp9KSgpOwoKPC9zY3JpcHQ+CnsvbGl0ZXJhbH0gCnskc3RhcnRmb3JtfQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPip7JHRpdGxlX25hbWV9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X25hbWV9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV9iZWxvbmdzdG9tYXB9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2JlbG9uZ3N0b21hcH08L3A+Cgk8L2Rpdj4KCXtsaXRlcmFsfTxzY3JpcHQgc3JjPSJ7L2xpdGVyYWx9eyRjb2xvcnNlbGVjdG9ycGF0aH17bGl0ZXJhbH0iIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+ey9saXRlcmFsfQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfY29sb3J9PC9wPgoJCTxkaXYgaWQ9ImNvbG9ycGlja2VyMjAxIiBjbGFzcz0iY29sb3JwaWNrZXIyMDEiPjwvZGl2PgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfY29sb3J9Jm5ic3A7CgkJPGlucHV0IHR5cGU9ImJ1dHRvbiIgb25jbGljaz0ic2hvd0NvbG9yR3JpZDIoJ20xX3N0cm9rZWNvbG9yJywnbTFfc2FtcGxlY29sb3InKTsiIHZhbHVlPSJTZWxlY3QiPgoJCSZuYnNwO3skaW5wdXRfc2FtcGxlY29sb3J9CgkJPC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV9vcGFjaXR5fTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCIgaWQ9InJlc3VsdCI+eyRpbnB1dF9vcGFjaXR5fSZuYnNwOzwvcD4KCTwvZGl2PgoJPCEtLSBTbGlkZXIgbWlnaHQgYmUgaW5jbHVkZWQgbGF0ZXIKCWRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfb3BhY2l0eX06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPgoJCQk8aW5wdXQgdHlwZT0icmFuZ2UiIG5hbWU9InN0cm9rZW9wYWNpdHkiIG1pbj0iMCIgbWF4PSIxLjAiIHN0ZXA9IjAuMSIgdmFsdWU9IjAuNyIgCgkJCW9uQ2hhbmdlPSJzaG93VmFsdWUodGhpcy52YWx1ZSk7Ii8+Jm5ic3A7CgkJCTxkaXYgaWQ9InJlc3VsdCIgc3R5bGU9ImhlaWdodDo0MHB4O3dpZHRoOjQwcHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5Ij48L2Rpdj4KCQk8L3A+Cgk8L2RpdiAtLT4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX3dlaWdodH06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfd2VpZ2h0fTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfZGlzdGFuY2V1b219OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2Rpc3RhbmNldW9tfTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGhpZGRlbn17JHN1Ym1pdH17JGNhbmNlbH08L3A+Cgk8L2Rpdj4KCXtpZiAkZWRpdHBvbHlsaW5lID09ICcxJ30KCTxmaWVsZHNldD4KCTxsZWdlbmQ+eyR0aXRsZV9lYXN5bG9jYXRvcn06Jm5ic3A7eyR0aXRsZV9sb2NhdGlvbnN9PC9sZWdlbmQ+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJIDx0YWJsZSBib3JkZXI9IjAiPgoJIAk8dHIgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7Ij4KCSAJPHRkPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPgoJCQk8ZGl2IGlkPSJtYXAiIHN0eWxlPSJ3aWR0aDogNTAwcHg7IGhlaWdodDogMzAwcHg7Ij48L2Rpdj4KCQk8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCIgc3R5bGU9IndpZHRoOiA2MDBweDsiPgoJCTx0YWJsZSBib3JkZXI9IjAiPgoJCQk8dHI+CgkJCQk8dGQ+eyR0aXRsZV9zZXF9OjwvdGQ+CgkJCQk8dGQ+eyRpbnB1dF9zZXF9PC90ZD4KCQkJCTx0ZD57JHRpdGxlX2xhdH06PC90ZD4KCQkJCTx0ZD57JGlucHV0X2xhdH08L3RkPgoJCQkJPHRkPnskdGl0bGVfbG9ufTo8L3RkPgoJCQkJPHRkPnskaW5wdXRfbG9ufTwvdGQ+CgkJCTwvdHI+CgkJCTx0cj4KCQkJCTx0ZD57JHRpdGxlX2Rlc2NyaXB0aW9ufTwvdGQ+CgkJCQk8dGQgY29sc3Bhbj0iNCI+eyRpbnB1dF9kZXNjcmlwdGlvbn08L3RkPgoJCQkJPHRkPnskYWRkbG9jYXRpb259PC90ZD4KCQkJPC90cj4KCQkJPHRyPgoJCQkJPHRkPnskdGl0bGVfZGlzdGFuY2V9OjwvdGQ+CgkJCQk8dGQgY29sc3Bhbj0iNSI+PHN0cm9uZz57JGRpc3RhbmNlfHN0cmluZ19mb3JtYXQ6JHN0cmZ9PC9zdHJvbmc+Jm5ic3A7eyRkaXN0YW5jZXVvbX08L3RkPgoJCQk8dHI+CgkJPC90YWJsZT4KCQl7KiAkdGl0bGVfc2VxfTombmJzcDt7JGlucHV0X3NlcX0KCQl7JHRpdGxlX2xhdH06Jm5ic3A7eyRpbnB1dF9sYXR8cmVwbGFjZTokaWQ6J2R0Xyd9PGJyIC8+CgkJeyR0aXRsZV9sb259OiZuYnNwO3skaW5wdXRfbG9ufHJlcGxhY2U6JGlkOidkdF8nfSZuYnNwO3skYWRkbG9jYXRpb259PGJyIC8+CgkJeyR0aXRsZV9kZXNjcmlwdGlvbn06Jm5ic3A7eyRpbnB1dF9kZXNjcmlwdGlvbn0KCQk8YnIgLz4KCQl7JHRpdGxlX2Rpc3RhbmNlfTombmJzcDt7JGRpc3RhbmNlfHN0cmluZ19mb3JtYXQ6JHN0cmZ9Jm5ic3A7eyRkaXN0YW5jZXVvbSAqfQoJPC9kaXY+CgoJCTwvdGQ+CgkJPHRkPgoJCQk8c3BhbiBpZD0ibG9jYXRpb25zIj4KCQkJPHRhYmxlIGJvcmRlcj0iMCI+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+eyR0aXRsZV9zZXF9PC90aD4KCQkJCQk8dGg+eyR0aXRsZV9kZWx9PC90aD4KCQkJCQk8dGg+eyR0aXRsZV9sYXR9PC90aD4KCQkJCQk8dGg+eyR0aXRsZV9sb259PC90aD4KCQkJCQk8dGg+eyR0aXRsZV9kZXNjcmlwdGlvbn08L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5PgoJCQl7Zm9yZWFjaCBmcm9tPSRsb2NhdGlvbnMgaXRlbT1sb2NhdGlvbn0KCQkJCTx0cj4KCQkJCSAgPHRkPnskbG9jYXRpb24tPnNlcX08L3RkPgoJCQkJICA8dGQ+eyRsb2NhdGlvbi0+ZGVsZXRlbGlua308L3RkPgoJCQkJICA8dGQ+eyRsb2NhdGlvbi0+bGF0fTwvdGQ+CgkJCQkgIDx0ZD57JGxvY2F0aW9uLT5sb259PC90ZD4KCQkJCSAgPHRkPnskbG9jYXRpb24tPmRlc2NyaXB0aW9ufTwvdGQ+CgkJCQkgPC90cj4KCQkJey9mb3JlYWNofQoJCQk8L3Rib2R5PgoJCQk8L3RhYmxlPgoJCQk8L3NwYW4+CgkJPC9wPgoJCTwvdGQ+CgkJPC90cj4KCQk8L3RhYmxlPgoJPC9kaXY+IAoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGNhbmNlbH08L3A+Cgk8L2Rpdj4KCTwvZmllbGRzZXQ+Cgl7L2lmfQp7JGVuZGZvcm19Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/error.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskdGl0bGV9PC9oMz4Ke2lmICRlcnJvciE9Jyd9PHA+eyRlcnJvcn08L3A+ey9pZn0=]]></data>
	</file>
	<file>
	  <filename>/templates/listmaps.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmICRpdGVtY291bnQ+JHBhZ2VsaW1pdH0KPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPgoJPHAgY2xhc3M9InBhZ2VvcHRpb25zIj57JGFkZGxpbmt9PC9wPgo8L2Rpdj4Key9pZn0KPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0iY21zX3NvcnRhYmxlIHBhZ2V0YWJsZSB0YWJsZXNvcnRlciI+Cgk8dGhlYWQ+CgkJPHRyPgoJCQk8dGg+eyR0aXRsZV9uYW1lfTwvdGg+CgkJCTx0aD57JHRpdGxlX2NlbnRlcmxhdGl0dWRlfTwvdGg+CgkJCTx0aD57JHRpdGxlX2NlbnRlcmxvbmdpdHVkZX08L3RoPgoJCQk8dGg+eyR0aXRsZV9tYXB0eXBlfTwvdGg+CgkJCTx0aCBjbGFzcz0icGFnZWljb24iPiZuYnNwOzwvdGg+CgkJCTx0aCBjbGFzcz0icGFnZWljb24iPiZuYnNwOzwvdGg+CgkJPC90cj4KCTwvdGhlYWQ+Cgk8dGJvZHk+Cgl7Zm9yZWFjaCBmcm9tPSRpdGVtcyBpdGVtPWVudHJ5fQoJCTx0ciBjbGFzcz0ieyRlbnRyeS0+cm93Y2xhc3N9IiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9J3skZW50cnktPnJvd2NsYXNzfWhvdmVyJzsiIG9ubW91c2VvdXQ9InRoaXMuY2xhc3NOYW1lPSd7JGVudHJ5LT5yb3djbGFzc30nOyI+CgkJCTx0ZD57JGVudHJ5LT5uYW1lfTwvdGQ+CgkJCTx0ZD57JGVudHJ5LT5jZW50ZXJfbGF0fTwvdGQ+CgkJCTx0ZD57JGVudHJ5LT5jZW50ZXJfbG9ufTwvdGQ+CgkJCTx0ZD57JGVudHJ5LT50eXBlfTwvdGQ+CgkJCTx0ZD57JGVudHJ5LT5lZGl0bGlua308L3RkPgoJCQk8dGQ+eyRlbnRyeS0+ZGVsZXRlbGlua308L3RkPgoJCTwvdHI+Cgl7L2ZvcmVhY2h9Cgk8L3Rib2R5Pgo8L3RhYmxlPgoKPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPgoJPHAgY2xhc3M9InBhZ2VvcHRpb25zIj57JGFkZGxpbmt9PC9wPgo8L2Rpdj4=]]></data>
	</file>
	<file>
	  <filename>/templates/listmarkers.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmICRpdGVtY291bnQ+JHBhZ2VsaW1pdH0KPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPgoJPHAgY2xhc3M9InBhZ2VvcHRpb25zIj57JGFkZGxpbmt9PC9wPgo8L2Rpdj4Key9pZn0KPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0iY21zX3NvcnRhYmxlIHBhZ2V0YWJsZSB0YWJsZXNvcnRlciI+Cgk8dGhlYWQ+CgkJPHRyPgoJCQk8dGg+eyR0aXRsZV9uYW1lfTwvdGg+CgkJCTx0aD57JHRpdGxlX2JlbG9uZ3N0b21hcH08L3RoPgoJCQk8dGg+eyR0aXRsZV9hZGRyZXNzfTwvdGg+CgkJCTx0aD57JHRpdGxlX2xhdGl0dWRlfTwvdGg+CgkJCTx0aD57JHRpdGxlX2xvbmdpdHVkZX08L3RoPgoJCQk8dGg+eyR0aXRsZV9pY29ufTwvdGg+CgkJCTx0aCBjbGFzcz0icGFnZWljb24iPiZuYnNwOzwvdGg+CgkJCTx0aCBjbGFzcz0icGFnZWljb24iPiZuYnNwOzwvdGg+CgkJPC90cj4KCTwvdGhlYWQ+Cgk8dGJvZHk+Cgl7Zm9yZWFjaCBmcm9tPSRpdGVtcyBpdGVtPWVudHJ5fQoJCTx0ciBjbGFzcz0ieyRlbnRyeS0+cm93Y2xhc3N9IiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9J3skZW50cnktPnJvd2NsYXNzfWhvdmVyJzsiIG9ubW91c2VvdXQ9InRoaXMuY2xhc3NOYW1lPSd7JGVudHJ5LT5yb3djbGFzc30nOyI+CgkJCTx0ZD57JGVudHJ5LT5uYW1lfTwvdGQ+CgkJCTx0ZD57JGVudHJ5LT5tYXB9PC90ZD4KCQkJPHRkPnskZW50cnktPmFkZHJlc3N9PC90ZD4KCQkJPHRkPnskZW50cnktPmxhdH08L3RkPgoJCQk8dGQ+eyRlbnRyeS0+bG9ufTwvdGQ+CgkJCTx0ZD57JGVudHJ5LT5pY29ufTwvdGQ+CgkJCTx0ZD57JGVudHJ5LT5lZGl0bGlua308L3RkPgoJCQk8dGQ+eyRlbnRyeS0+ZGVsZXRlbGlua308L3RkPgoJCTwvdHI+Cgl7L2ZvcmVhY2h9Cgk8L3Rib2R5Pgo8L3RhYmxlPgoKPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPgoJPHAgY2xhc3M9InBhZ2VvcHRpb25zIj57JGFkZGxpbmt9PC9wPgo8L2Rpdj4=]]></data>
	</file>
	<file>
	  <filename>/templates/listpolylines.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmICRpdGVtY291bnQ+JHBhZ2VsaW1pdH0KPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPgoJPHAgY2xhc3M9InBhZ2VvcHRpb25zIj57JGFkZGxpbmt9Jm5ic3A7eyRpbXBvcnRfbG9jYWxfbGlua308L3A+CjwvZGl2Pgp7L2lmfQo8dGFibGUgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJjbXNfc29ydGFibGUgcGFnZXRhYmxlIHRhYmxlc29ydGVyIj4KCTx0aGVhZD4KCQk8dHI+CgkJCTx0aD57JHRpdGxlX25hbWV9PC90aD4KCQkJPHRoPnskdGl0bGVfYmVsb25nc3RvbWFwfTwvdGg+CgkJCTx0aD57JHRpdGxlX2V4YW1wbGV9PC90aD4KCQkJPHRoPnskdGl0bGVfY29sb3J9PC90aD4KCQkJPHRoPnskdGl0bGVfb3BhY2l0eX08L3RoPgoJCQk8dGg+eyR0aXRsZV93ZWlnaHR9PC90aD4KCQkJPHRoIGNsYXNzPSJwYWdlaWNvbiI+Jm5ic3A7PC90aD4KCQkJPHRoIGNsYXNzPSJwYWdlaWNvbiI+Jm5ic3A7PC90aD4KCQkJPHRoIGNsYXNzPSJwYWdlaWNvbiI+Jm5ic3A7PC90aD4KCQk8L3RyPgoJPC90aGVhZD4KCTx0Ym9keT4KCXtmb3JlYWNoIGZyb209JGl0ZW1zIGl0ZW09ZW50cnl9CgkJPHRyIGNsYXNzPSJ7JGVudHJ5LT5yb3djbGFzc30iIG9ubW91c2VvdmVyPSJ0aGlzLmNsYXNzTmFtZT0neyRlbnRyeS0+cm93Y2xhc3N9aG92ZXInOyIgb25tb3VzZW91dD0idGhpcy5jbGFzc05hbWU9J3skZW50cnktPnJvd2NsYXNzfSc7Ij4KCQkJPHRkPnskZW50cnktPm5hbWV9PC90ZD4KCQkJPHRkPnskZW50cnktPm1hcH08L3RkPgoJCQk8dGQ+eyRlbnRyeS0+ZXhhbXBsZX08L3RkPgoJCQk8dGQ+eyRlbnRyeS0+c3Ryb2tlY29sb3J9PC90ZD4KCQkJPHRkPnskZW50cnktPnN0cm9rZW9wYWNpdHl9PC90ZD4KCQkJPHRkPnskZW50cnktPnN0cm9rZXdlaWdodH08L3RkPgoJCQk8dGQ+eyRlbnRyeS0+ZWRpdGxpbmt9PC90ZD4KCQkJPHRkPnskZW50cnktPmRlbGV0ZWxpbmt9PC90ZD4KCQkJPHRkPnskZW50cnktPmV4cG9ydGxpbmt9PC90ZD4KCQk8L3RyPgoJey9mb3JlYWNofQoJPC90Ym9keT4KPC90YWJsZT4KCjxkaXYgY2xhc3M9InBhZ2VvcHRpb25zIj4KCTxwIGNsYXNzPSJwYWdlb3B0aW9ucyI+eyRhZGRsaW5rfSZuYnNwO3skaW1wb3J0X2xvY2FsX2xpbmt9PC9wPgo8L2Rpdj4=]]></data>
	</file>
	<file>
	  <filename>/templates/map.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRnb29nbGVfbWFwX2hlYWRlcn0KCnsqCjwhLS0gbmVjZXNzYXJ5IGZvciBnb29nbGUgbWFwcyBwb2x5bGluZSBkcmF3aW5nIGluIElFIC0tPgp7bGl0ZXJhbH0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4Kdlw6KiB7CiBiZWhhdmlvcjp1cmwoI2RlZmF1bHQjVk1MKTsKfQp7L2xpdGVyYWx9Cjwvc3R5bGU+Cip9Cgo8dGFibGU+CiAgPHRyPgogICAgIDx0ZD57JGdvb2dsZV9tYXB9PC90ZD4KICAgICA8dGQ+eyRnb29nbGVfbWFwX3NpZGViYXJ9PC90ZD4KICA8L3RyPgo8L3RhYmxlPgoKeyRnb29nbGVfbWFwX2pzfQp7JG1hcF9kZXNjcmlwdGlvbn0=]]></data>
	</file>
	<file>
	  <filename>/templates/polyline_gpx.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIj8+CjxncHgKIHZlcnNpb249IjAuMi4wIgogY3JlYXRvcj0iQ01TTVMgR29vZ2xlTWFwcyBodHRwOi8vd3d3LmR1a2V0b3duLmV1IgogeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKIHhtbG5zPSJodHRwOi8vd3d3LnRvcG9ncmFmaXguY29tL0dQWC8xLzAiCiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cudG9wb2dyYWZpeC5jb20vR1BYLzEvMCBodHRwOi8vd3d3LnRvcG9ncmFmaXguY29tL0dQWC8xLzAvZ3B4LnhzZCI+CiB7aWYgJGdweGV4cG9ydHR5cGUgPT0gJ3dwdCd9CgkgPG5hbWU+eyRwb2x5bGluZV9uYW1lfTwvbmFtZT4KCSA8dGltZT57JGNyZWF0ZWR9PC90aW1lPgoJIHtmb3JlYWNoIGZyb209JHdheXBvaW50cyBpdGVtPWVudHJ5fQoJICA8d3B0IGxhdD17JGVudHJ5LT5sYXR9IGxvbj17JGVudHJ5LT5sb259PgoJICB7aWYgJGVudHJ5LT5kZXNjcmlwdGlvbiAhPSAnJ308ZGVzYz57JGVudHJ5LT5kZXNjcmlwdGlvbn1dXT48L2Rlc2M+ey9pZn0KCSAgPC93cHQ+Cgkgey9mb3JlYWNofQogey9pZn0KIHtpZiAkZ3B4ZXhwb3J0dHlwZSA9PSAndHJrJ30KIAk8dHJrPgoJIDxuYW1lPnskcG9seWxpbmVfbmFtZX08L25hbWU+CgkgPHRya3NlZz4KCSB7Zm9yZWFjaCBmcm9tPSR3YXlwb2ludHMgaXRlbT1lbnRyeX0KCSAgPHRya3B0IGxhdD17JGVudHJ5LT5sYXR9IGxvbj17JGVudHJ5LT5sb259PgoJICAge2lmICRlbnRyeS0+ZGVzY3JpcHRpb24gIT0gJyd9CgkgICAgPGRlc2M+eyRlbnRyeS0+ZGVzY3JpcHRpb259XV0+PC9kZXNjPgoJICAgIDxuYW1lPnskZW50cnktPmRlc2NyaXB0aW9ufV1dPjwvbmFtZT4KCSAgIHsvaWZ9CgkgIDwvdHJrcHQ+Cgkgey9mb3JlYWNofQoJIDwvdHJrc2VnPgoJPC90cms+CiB7L2lmfQoge2lmICRncHhleHBvcnR0eXBlID09ICdydGUnfQogCTxydGU+CgkgPG5hbWU+eyRwb2x5bGluZV9uYW1lfTwvbmFtZT4KCSA8bnVtYmVyPjE8L251bWJlcj4KCSB7Zm9yZWFjaCBmcm9tPSR3YXlwb2ludHMgaXRlbT1lbnRyeX0KCSAgPHJ0ZXB0IGxhdD17JGVudHJ5LT5sYXR9IGxvbj17JGVudHJ5LT5sb259PgoJICAge2lmICRlbnRyeS0+ZGVzY3JpcHRpb24gIT0gJyd9CgkgICAgPGRlc2M+eyRlbnRyeS0+ZGVzY3JpcHRpb259XV0+PC9kZXNjPgoJICAgIDxuYW1lPnskZW50cnktPmRlc2NyaXB0aW9ufV1dPjwvbmFtZT4KCSAgIHsvaWZ9CgkgIDwvcnRlcHQ+Cgkgey9mb3JlYWNofQoJPC9ydGU+CiB7L2lmfQo8L2dweD4g]]></data>
	</file>
</module>
