<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE module [
  <!ELEMENT module (dtdversion,name,version,description*,help*,about*,requires*,file+)>
  <!ELEMENT dtdversion (#PCDATA)>
  <!ELEMENT name (#PCDATA)>
  <!ELEMENT version (#PCDATA)>
  <!ELEMENT mincmsversion (#PCDATA)>
  <!ELEMENT description (#PCDATA)>
  <!ELEMENT help (#PCDATA)>
  <!ELEMENT about (#PCDATA)>
  <!ELEMENT requires (requiredname,requiredversion)>
  <!ELEMENT requiredname (#PCDATA)>
  <!ELEMENT requiredversion (#PCDATA)>
  <!ELEMENT file (filename,isdir,data)>
  <!ELEMENT filename (#PCDATA)>
  <!ELEMENT isdir (#PCDATA)>
  <!ELEMENT data (#PCDATA)>
]>
<module>
	<dtdversion>1.3</dtdversion>
	<name>GoogleMaps</name>
	<version>0.1.8</version>
  <mincmsversion>1.0-beta6</mincmsversion>
	<help>CjxoMz5XaGF0IERvZXMgVGhpcyBEbz88L2gzPgo8cD5UaGlzIG1vZHVsZSBpcyBpbnRlbnRlZCBmb3IgaW50ZWdyYXRpbmcgR29vZ2xlTWFwcyBhcyBhIHBhcnQgb2YgeW91ciBzaXRlLjwvcD4KPGgzPkhvdyBEbyBJIFVzZSBJdDwvaDM+CjxwPkZpcnN0IHlvdSBtdXN0IGluc2VydCB5b3VyIEdvb2dsZU1hcHMgYXBpIGtleSAocGxlYXNlIHJlZ2lzdGVyIGluIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9hcGlzL21hcHMvc2lnbnVwLmh0bWwpLjwvcD4KPHA+VGhlbiB5b3UgY2FuIGNhbGwgdGhpcyBtb2R1bGUgaW4geW91ciB0ZW1wbGF0ZSB3aXRoIHtjbXNfbW9kdWxlIG1vZHVsZT0nR29vZ2xlTWFwcycgbWFwPSd0ZXN0J30gPC9wPgo8cD5Vc2VyIGRlZmluZWQgbWFya2VycyBjYW4gYmUgbG9hZGVkIGludG8gdXBsb2Fkcy9Hb29nbGVNYXBzL21hcmtlcnMuIFRoZSBjb25uZWN0ZWQgc2hhZG93IGltYWdlcyBzaG91bGQgYmUgbG9hZGVkIGluIAoJdXBsb2Fkcy9Hb29nbGVNYXBzL21hcmtlcnNoYWRvd3MuPGJyPgoJTmFtaW5nIGNvbnZlbnRpb24gaXMgW21hcmtlcmljb25dcy5wbmcgKGllLiBtYXJrZXIgaXMgYmlnYmx1ZS5wbmcsIG1hcmtlcnNoYWRvdyBpcyBiaWdibHVlcy5wbmcpLjxicj4KCUlmIGEgc2hhZG93IGlzIG5vdCBmb3VuZCwgdGhlIGRlZmF1bHQgdmVyc2lvbiB3aWxsIGJlIHVzZWQgKHdoaWNoIG1heSBub3QgYmUgdGhlIGNvcnJlY3Qgc2hhZG93IG9mIHRoZSBtYXJrZXIgYXQgYWxsKS48YnI+CglJbiB0aGUgc2V0dGluZ3MgdXNlIHRoZSBwcmVmZXJlbmNlICdVc2UgbWFya2VyIHNoYWRvd3MnIHRvIHNob3cvaGlkZSB0aGVtLiBTaG93aW5nIHRoZSBzaGFkb3dzIHNsb3dzIGRvd24gdGhlIGJ1aWxkdXAgb2YgdGhlCgltYXAsIGR1ZSB0byBtb3JlIGludGVybmFsIGNoZWNrcy48YnI+CglPbmx5IGltYWdlcyB3aXRoIGV4dGVuc2lvbiAucG5nIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkLjwvcD4KPHA+VGhpcyBtb2R1bGUgaXMgZXZlbiBtb3JlIGZsZXhpYmxlIHRocm91Z2ggdGhlIHVzYWdlIG9mIHRoZSBwYXJhbWV0ZXJzIChzZWUgdGhlIHBhcmFtZXRlciBsaXN0KS4gRWFjaCBwYXJhbWV0ZXIgYXMgYXZhaWxhYmxlIGR1cmluZyB0aGUgcHJlcGFyYXRpb24gb2YgYSBtYXAsIGNhbiBiZSAKCW92ZXJyaWRlbiBmb3IgdGhlIGZyb250IGVuZC4gU28geW91IGFyZSBhYmxlIHRvIHByZXBhcmUgb25lIG1hcCBhbmQgZGlzcGxheSBpdCBpbiB2YXJpb3VzIHdheXMgYnkgdXNpbmcgb25lIG9yIG1vcmUgcGFyYW1ldGVycy48L3A+CjxwPkluIHRoZSBzZXR0aW5ncyB0YWIgaXQgaXMgcG9zc2libGUgdG8gcHJlcGFyZSBhIG51bWJlciBvZiBkZWZhdWx0IHNldHRpbmdzIGZvciB3aGF0IGlzIGNhbGxlZCB0aGUgPHN0cm9uZz4nRWFzeSBMb2NhdG9yJzwvc3Ryb25nPi4gV2hlbiBhZGRpbmcgYSBuZXcgbWFwLAphIG1hcCBpcyBzaG93biBiYXNlZCB1cG9uIHRoZXNlIGRlZmF1bHQgc2V0dGluZ3MuPGJyIC8+CldoZW4gZWRpdGluZyBhIG1hcCBvciBhIG1hcmtlciwgdGhlIHNob3duIG1hcCBpcyBhbHdheXMgY2VudGVyZWQgYXQgdGhlIGNvb3JkaW5hdGVzIHNob3duIGp1c3QgYmVsb3cgdGhlIG1hcC48YnIgLz4KV2hlbiB5b3UgZWRpdCBhIG1hcCwgdGhlIG1hcCBzZXR0aW5ncyAoY2VudGVyIGNvb3JkaW5hdGVzIGFuZCB6b29tIGxldmVsKSBhcmUgdXNlZCB0byBwcmVwYXJlIHRoZSBFYXN5IExvY2F0b3IuPGJyIC8+ClR1cm5pbmcgb24gdGhlIHNldHRpbmcgJ1NhdmUgbGFzdCB1c2VkIHZhbHVlcycsIHdpbGwgc2F2ZSB0aGUgY29vcmRpbmF0ZXMsIHpvb20gbGV2ZWwgd2hlbiB1c2VkIG9uIGEgbWFwLiBUaGUgbmV4dCB0aW1lIHlvdSBhZGQKYSBtYXAsIHRoZSBsYXN0IHNhdmVkIGNvb3JkaW5hdGVzIGFyZSB1c2VkIHRvIHNob3cgdGhlIEVhc3kgTG9jYXRvci4gTm90ZTogVGhpcyBzYXZpbmcgaXMgb25seSBkb25lIG9uIGVkaXRpbmcgYSBtYXAgb3IgbWFya2VyCih6b29tIGxldmVsIG5vdCBzYXZlZCB3aGVuIGVkaXRpbmcgYSBtYXJrZXIpLiA8YnIgLz4KSG93IGRvIEkgY2hhbmdlIHRoZSBzaG93biBtYXBzPyBCeSBjaGFuZ2luZyB0aGUgdGVtcGxhdGUgaW4gdGhlIHNldHRpbmdzIHRhYi4gSWYgeW91IGFyZSBub3QgZmFtaWxpYXIgd2l0aCBpbnRlcm5hbCBzZXR0aW5ncyBmb3IgYSBtYXAsIApsZWF2ZSB0aGUgdGVtcGxhdGUgYXMgaXQgaXMuIEVhc3kgY2hhbmdhYmxlIGFyZToKPHVsPgogPGxpPnRoZSB0eXBlIG9mIGN1cnNvcjogY2hhbmdlIHRoZSB2YWx1ZSBvZiAnZHJhZ2dhYmxlQ3Vyc29yJyBmcm9tIGNyb3NzaGFpciBpbnRvOiBhdXRvLCBkZWZhdWx0LCBoZWxwLCBtb3ZlLCBwb2ludGVyLCB0ZXh0LCB3YWl0LAogIGhhbmQsIHByb2dyZXNzIG9yIG5vLjwvbGk+CiA8bGk+dGhlIHNpemUgb2YgdGhlIG1hcDogYXQgdGhlIGJvdHRvbSB5b3Ugd2lsbCBmaW5kIHN0eWxlPSJ3aWR0aDogNTAwcHg7IGhlaWdodDogMzAwcHgiLiBDaGFuZ2UgdGhlIHdpZHRoIGFuZCBoZWlnaHQgdG8gdGhlIG51bWJlciBvZiBwaXhlbHMgeW91IHdhbnQuPC9saT4KPC91bD4KQWxsIG90aGVyIHNldHRpbmdzIGNhbiBiZSBvYnRhaW5lZCB2aWE6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vaW50bC9lbi1VUy9hcGlzL21hcHMvZG9jdW1lbnRhdGlvbi8iIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vY29kZS5nb29nbGUuY29tL2ludGwvZW4tVVMvYXBpcy9tYXBzL2RvY3VtZW50YXRpb24vPC9hPgo8L3A+CjxoMz5TdXBwb3J0PC9oMz4KPHA+VGhpcyBtb2R1bGUgZG9lcyBub3QgaW5jbHVkZSBjb21tZXJjaWFsIHN1cHBvcnQuIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIG51bWJlciBvZiByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIGhlbHAgeW91IHdpdGggaXQ6PGJyPgo8dWw+Cgk8bGk+VGhlIENNUyBNYWRlIFNpbXBsZSBmb3J1bTs8L2xpPgo8L3VsPgo8L3A+CjxwPkFzIHBlciB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzLWlzLiBQbGVhc2UgcmVhZCB0aGUgdGV4dApvZiB0aGUgbGljZW5zZSBmb3IgdGhlIGZ1bGwgZGlzY2xhaW1lci48L3A+Cgo8aDM+U2VjdXJpdHk8L2gzPgo8cD5Vc2VyIG11c3QgaGF2ZSAiVXNlIEdvb2dsZU1hcHMiIHBlcm1pc3Npb25zIHNldCB0byBlZGl0IG1hcHM8L3A+CjxoMz5QYXJhbWV0ZXJzPC9oMz48dWw+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gbGFuZz0iZW5fVVMiIC0gUGFyYW1ldGVyIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGF0IGxhbmd1YWdlIHRvIHVzZSBmb3IgZGlzcGxheSBvbiB0aGUgZnJvbnRlbmQuIE5vdCBhbGwgbW9kdWxlcyBzdXBwb3J0IG9yIG5lZWQgdGhpcy48L2xpPjxsaT5ib3VuZHNfZnVkZ2U9IiIgLSBUaGlzIHdpbGwgYWRqdXN0IGhvdyBtdWNoIG1hcCBib3VuZGFyeSBlbmNvbXBhc3NlcyB0aGUgbWFwIG1hcmtlcnMuPC9saT48bGk+Y2VudGVybGF0PSIiIC0gVGhlIGxhdGl0dWRlIHRvIHdoaWNoIHRoZSBtYXAgc2hvdWxkIGJlIGNlbnRlcmVkLjwvbGk+PGxpPmNlbnRlcmxvbj0iIiAtIFRoZSBsb25naXR1ZGUgdG8gd2hpY2ggdGhlIG1hcCBzaG91bGQgYmUgY2VudGVyZWQuPC9saT48bGk+Y29udHJvbHM9IiIgLSBJZiBzZXQgdG8gMCAoemVybyksIHRoZXJlIHdpbGwgYmUgbm8gY29udHJvbHMgdG8gem9vbS9tb3ZlIGFyb3VuZCB0aGUgbWFwLjwvbGk+PGxpPmNvbnRyb2xzX3NpemU9IiIgLSBUaGlzIHNldHMgdGhlIG1hcCBjb250cm9sIHNpemUuIFJlbGV2YW50IG9ubHkgaWYgbWFwIGNvbnRyb2xzIGFyZQplbmFibGVkLiBsYXJnZSA9IG1hcCB6b29tL21vdmUgd2l0aCBzbGlkZXIuIHNtYWxsID0gem9vbS9tb3ZlIHdpdGhvdXQgc2xpZGVyLiBMYXJnZSBpcyBkZWZhdWx0LjwvbGk+PGxpPmRpcmVjdGlvbnM9IiIgLSBUaGlzIGVuYWJsZXMgbWFwIGRpcmVjdGlvbnMgaW4gdGhlIGJvdHRvbSBvZiB0aGUgcG9wLXVwIGluZm8gd2luZG93LiBEZWZhdWx0IGlzIGRpc2FibGVkLgonMScgV2lsbCBlbmFibGUgdGhlIGRpcmVjdGlvbnMuPC9saT48bGk+aGVpZ2h0PSIiIC0gU2V0cyB0aGUgaGVpZ2h0IG9mIHRoZSBtYXAgd2luZG93LiBUaGlzIGNhbiBiZSBlaXRoZXIgcHggb3IgJS48L2xpPjxsaT5pbmZvX3RyaWdnZXI9IiIgLSBUaGlzIHNldHMgdGhlIGluZm8gd2luZG93IHRyaWdnZXIgYmVoYXZpb3IuIGNsaWNrID0gaW5mbyB3aW5kb3cgY29tZXMgdXAKICAgICAgICB3aGVuIGNsaWNraW5nIG9uIGEgbWFya2VyLiBtb3VzZW92ZXIgPSBpbmZvIHdpbmRvdyBjb21lcyB1cCB3aGVuIG1vdXNpbmcgb3ZlciBhIG1hcmtlci48L2xpPjxsaT5pbmZvX3dpbmRvdz0iIiAtIEVuYWJsZXMgaW5mbyB3aW5kb3dzIG9uIG1hcCBtYXJrZXJzLjwvbGk+PGxpPm1hcD0idGVzdCIgLSBTZXQgd2hpY2ggbWFwIHRvIHNob3c8L2xpPjxsaT5sYW5ndWFnZT0iIiAtIFNlZTogPGEgaHJlZj0iaHR0cDovL3NwcmVhZHNoZWV0cy5nb29nbGUuY29tL3B1Yj9rZXk9cDlwZHdzYWkyaERNc0xrWHNvTTA1S1EmZ2lkPTEiIHRhcmdldD0iX2JsYW5rIj4KdGhlIGxpc3Qgb2YgbGFuZ3VhZ2VzPC9hPjwvbGk+PGxpPnNjYWxlX2NvbnRyb2w9IiIgLSBVc2UgJzEnIG9yIHRydWUgdG8gc2hvdyBzY2FsZS48L2xpPjxsaT5zaWRlYmFyPSIiIC0gVXNlICcxJyB0byBlbmFibGUgdGhlIG1hcCBzaWRlYmFyLjwvbGk+PGxpPnR5cGU9IiIgLSBUaGlzIHNldHMgdGhlIGRlZmF1bHQgbWFwIHR5cGUuIFJlbGV2YW50IG9ubHkgaWYgbWFwIHR5cGUgY29udHJvbHMgYXJlIGVuYWJsZWQuIAoJbWFwID0gZGVmYXVsdCBtYXAuIHNhdGVsbGl0ZSA9IHNhdGVsbGl0ZSB2aWV3LiBoeWJyaWQgPSBoeWJyaWQgdmlldy4gdGVycmFpbiA9IHBoeXNpY2FsIHZpZXcgd2l0aCByb2FkczwvbGk+PGxpPnR5cGVfY29udHJvbHM9IiIgLSBVc2UgJzEnIGVuYWJsZSB0aGUgbWFwIHR5cGUgY29udHJvbHMgKG1hcC9zYXRlbGxpdGUvaHlicmlkL3RlcnJhaW4pPC9saT48bGk+d2lkdGg9IiIgLSBTZXRzIHRoZSB3aWR0aCBvZiB0aGUgbWFwIHdpbmRvdy4gVGhpcyBjYW4gYmUgZWl0aGVyIHB4IG9yICUuPC9saT48bGk+em9vbT0iIiAtIFRoaXMgc2V0cyB0aGUgbWFwIHpvb20gbGV2ZWwuPC9saT48bGk+em9vbV9lbmNvbXBhc3M9IiIgLSBVc2UgJzEnIHRvIGVuYWJsZSB0aGUgem9vbSBlbmNvbXBhc3Mgc28gbWFwIHpvb20gaXMgYXMgc21hbGwgYXMgcG9zc2libGUKICAgICAgICBhbmQgaW5jbHVkZSBhbGwgbWFwIG1hcmtlcnMuPC9saT48L3VsPg==</help>
	<about>PGJyIC8+QXV0aG9yOiB0c3cgJmx0O3RhdHUud2lrbWFuIFthdF0gZ21haWwuY29tJmd0OzxiciAvPjxiciAvPlZlcnNpb246IDAuMS44PGJyIC8+PGJyIC8+Q2hhbmdlIEhpc3Rvcnk6PGJyIC8+PHVsPgoJPGxpPlZlcnNpb24gMC4xLjggMjkgRGVjZW1iZXIgMjAwOSBCeSBEdWtldG93bjxiciAvPgoJCTx1bD4KCQkJPGxpPlBlciBtYXAvbWFya2VyIEVhc3kgTG9jYXRvciBpbnRyb2R1Y2VkLCB0byBxdWlja2x5IHJldHJpZXZlIGNvb3JkaW5hdGVzIGZvciBtYXAvbWFya2VyOzwvbGk+CgkJCTxsaT5OZXcgc2V0dGluZ3MgdG8gc3VwcG9ydCBFYXN5IExvY2F0b3I7PC9saT4KCQkJPGxpPk5vIHRoaW5ncyBsZWZ0IGJlaGluZCB3aGVuIHBlcmZvcm1pbmcgYW4gdW5pc3RhbGwuPC9saT4KCQk8L3VsPgoJPC9saT4KCTxsaT5WZXJzaW9uIDAuMS43IDUgRGVjZW1iZXIgMjAwOSBCeSBEdWtldG93bjxicj4KCQk8dWw+CgkJCTxsaT5VcGdyYWRlZCBHb29nbGVNYXBzIEFQSSBmcm9tIHZlcnNpb24gMi4wIHRvIDIuNSAoRmVhdHVyZSBSZXF1ZXN0IDQyNDkpOzwvbGk+CgkJCTxsaT5QZXIgbWFwIG9wdGlvbiB0byBhbGxvdyB6b29taW5nIHVzaW5nIHRoZSBzY3JvbGwgd2hlZWw7PC9saT4KCQkJPGxpPlBlciBtYXAgb3B0aW9uIHRvIHNob3cvaGlkZSB0aGUgc2NhbGUuIEFsc28gYXZhaWxhYmxlIGFzIHBhcmFtZXRlcjs8L2xpPgoJCQk8bGk+Tm8gbG9uZ2VyIG5lZWQgdG8gcmVsb2dpbiBhZnRlciBhZGRyZXNzIGxvb2t1cCAoQnVnIzMxOTMpLiBGb3VuZCBsYXQvbG9uIHJlbWFpbnMgc2hvd24gZm9yIGVhc3kgY29weWluZzs8L2xpPgoJCQk8bGk+TGFuZ3VhZ2UgZm9yIHRoZSBjb250cm9sZXMgaXMgbm93IGF2YWlsYWJsZSBhcyBwYXJhbWV0ZXI7PC9saT4KCQkJPGxpPkNoZWNrZWQvc29sdmVkIHZhbGlkYXRpb24gWEhUTUwgdXNpbmcgVzNDIChCdWcjMjAxNCk7PC9saT4KCQkJPGxpPk5vdyBtdWx0aXBsZSBtYXBzIG9uIG9uZSBwYWdlIHBvc3NpYmxlIChCdWcjIDQyNDgpOzwvbGk+CgkJCTxsaT5CZXR0ZXIgdXNhZ2Ugb2YgZGlyZWN0b3J5IHNlcGFyYXRvciB0byBhdm9pZCBub3QgZm91bmQgZmlsZXMgKEJ1ZyMzMzQ2KTs8L2xpPgoJCQk8bGk+TmV3IG1hcCB0eXBlICdUZXJyYWluJyBpbXBsZW1lbnRlZC48L2xpPgoJCQk8bGk+RHVyaW5nIHVwZGF0ZSB0aGUgcHJldmlvdXMgdmVyc2lvbiBvZiB0aGUgQVBJIGlzIHJlbW92ZWQgKGxpYi9Hb29nbGVNYXBBUEktMi4wKS4gWW91IG1heSBmaW5kIGl0IGlzIHN0aWxsIHRoZXJlIGFmdGVyIHRoaXMgdXBncmFkZS4KCQkJVGhhdCBpcyB0aGVuIGR1ZSB0byBzZWN1cml0eSBzZXR0aW5ncy4gWW91IG1heSBkZWxldGUgZGlyZWN0b3J5IEdvb2dsZU1hcEFQSS0yLjAgd2l0aG91dCBhbnkgcHJvYmxlbS48L2xpPgoJCTwvdWw+Cgk8L2xpPgoJPGxpPlZlcnNpb24gMC4xLjYgMTUgSmFudWFyeSAyMDA5IEJ5IER1a2V0b3duPGJyIC8+CgkJPHVsPgoJCQk8bGk+SW5jbHVkZWQgdGhlIHBhcmFtZXRlcnMgdGhhdCBhcmUgYWxzbyB1c2VkIGJ5IEdvb2dsZVwncyBBUEkuIFBhcmFtZXRlcnMgYXJlIGRpc2N1c3NlZCBpbiBoZWxwIHRleHQuPC9saT4KCQk8L3VsPgoJPC9saT4KCTxsaT5WZXJzaW9uIDAuMS41IDEwIEphbnVhcnkgMjAwOSBCeSBEdWtldG93bjxiciAvPgoJCTx1bD4KCQkJPGxpPlVzZXIgZGVmaW5lZCBtYXJrZXJzIG5vdyB3b3JrLiBTdXBwbGllZCBtYXJrZXJzIGJ1aWxkIHZpYTogaHR0cDovL3d3dy5nbWFwbGl2ZS5jb20vbWFya2VyX21ha2VyLnBocCBvZiBEaXhvbiBJbmZvcm1hdGlvbiBTeXN0ZW1zLCBDYW5hZGE8YnIgLz48L2xpPgoJCTwvdWw+Cgk8L2xpPgoJPGxpPlZlcnNpb24gMC4xLiAyOCBBdWd1c3QgMjAwNi48YnI+CgkJPHVsPgoJCQk8bGk+SW5pdGlhbCBSZWxlYXNlLjwvbGk+CgkJPC91bD4KCTwvbGk+CjwvdWw+CjxoMz5UaGFua3MgZ28gdG88L2gzPgo8cD5Sb2JlcnQgQnJvd24gZm9yIFJDUlVEIENsYXNzIHVzZWQgaW4gYWRtaW4gZXh0ZW5zaXZlbHk8L3A+CjxwPmFuZDwvcD4KPHA+TW9udGUgT2hydCBmb3IgR29vZ2xlTWFwQVBJPC9wPjxiciAvPg==</about>
	<description>Prepare multiple Google maps, multiple coordinates with custom markers. Includes EasyLocator to quickly set coordinates.</description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIERpc3BsYXlNb2R1bGVPdXRwdXQoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsICRtZXNzYWdlKQogICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQogICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBzaW1wbGUgbWV0aG9kIHRvIGRpc3BsYXkKICAgc29tZXRoaW5nIHdoZXJlIGEgcGFnZSBvciB0ZW1wbGF0ZSBoYXMgYSB0YWcgY2FsbGluZwogICB0aGlzIG1vZHVsZS4KICAgCiAgIE5vdGUgdGhhdCBpdCB1c2VzIGEgdGVtcGxhdGUsIGFuZCBpcyB0aHVzIHZlcnkgcG93ZXJmdWwsCiAgIGV2ZW4gaWYgaXQncyBzaW1wbGUuCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCmlmICghaXNzZXQoJGdDbXMpKSBleGl0OwoKI0F2b2lkIGZsb2F0IHByb2JsZW0gaW4gbG9jYWxlCiRjdXJyZW50TG9jYWxlID0gc2V0bG9jYWxlKExDX0FMTCwgMCk7CnNldGxvY2FsZShMQ19BTEwsICdlbl9VUycpOwoKCmlmKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdhcGlrZXknKSA9PSAnJykKewogICR0aGlzLT5zbWFydHktPmFzc2lnbignZXJyb3InLCAkdGhpcy0+TGFuZygnbm9rZXknKSk7CiAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZScsICR0aGlzLT5MYW5nKCdlcnJvcicpKTsKICBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2Vycm9yLnRwbCcpOwogIHJldHVybjsKfQoKJHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gIi4gY21zX2RiX3ByZWZpeCgpIC4ibW9kdWxlX2dvb2dsZW1hcHNfbWFwcyBXSEVSRSBuYW1lIExJS0UgJyIuICRwYXJhbXNbJ21hcCddLiAiJyBMSU1JVCAxIjsKJG1hcF9kYXRhID0gYXJyYXkoKTsKJGRicmVzdWx0ID0mICRkYi0+RXhlY3V0ZSgkcXVlcnkpOwppZigkZGJyZXN1bHQpIHsKICAkbWFwX2RhdGEgPSAkZGJyZXN1bHQtPkZldGNoUm93KCk7Cn0KCmlmKCFpc3NldCgkbWFwX2RhdGFbJ21hcF9pZCddKSkgewogICR0aGlzLT5zbWFydHktPmFzc2lnbignZXJyb3InLCAkdGhpcy0+TGFuZygnbm9tYXAnKSk7CiAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZScsICR0aGlzLT5MYW5nKCdlcnJvcicpKTsKICBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2Vycm9yLnRwbCcpOwogIHJldHVybjsKfQoKLy8gTm93IHRoYXQgYSBjaGVjayBpcyBkb25lIGlmIGFsbCBzZWVtcyBvaywgaGFuZGxlIHRoZSBvdmVycmlkZXMgdGhhdCBhcmUgcGFzc2VkCmlmIChpc3NldCgkcGFyYW1zWyd3aWR0aCddKSkgJG1hcF9kYXRhWyd3aWR0aCddID0gJHBhcmFtc1snd2lkdGgnXTsKaWYgKGlzc2V0KCRwYXJhbXNbJ2hlaWdodCddKSkgJG1hcF9kYXRhWydoZWlnaHQnXSA9ICRwYXJhbXNbJ2hlaWdodCddOwppZiAoaXNzZXQoJHBhcmFtc1snY29udHJvbHMnXSkpIHsJLy8gVHJpZWQgdG8gdXNlIGludHZhbCgkcGFyYW1zWydjb250cm9scyddKSwgYnV0IHNtYXJ0eSBzdGlsbCBmZWxsIG92ZXIgdGhhdAoJJHBhcmFtc1snY29udHJvbHMnXSA9PSAnMScgPyAkbWFwX2RhdGFbJ2NvbnRyb2xzJ10gPSAxIDogJG1hcF9kYXRhWydjb250cm9scyddID0gMDsKfQppZiAoaXNzZXQoJHBhcmFtc1sndHlwZV9jb250cm9scyddKSkgewoJJHBhcmFtc1sndHlwZV9jb250cm9scyddID09ICcxJyA/ICRtYXBfZGF0YVsndHlwZV9jb250cm9scyddID0gMSA6ICRtYXBfZGF0YVsndHlwZV9jb250cm9scyddID0gMDsKfQppZiAoaXNzZXQoJHBhcmFtc1snem9vbSddKSkgJG1hcF9kYXRhWyd6b29tJ10gPSAkcGFyYW1zWyd6b29tJ107CmlmIChpc3NldCgkcGFyYW1zWydjb250cm9sc19zaXplJ10pKSAkbWFwX2RhdGFbJ2NvbnRyb2xzX3NpemUnXSA9ICRwYXJhbXNbJ2NvbnRyb2xzX3NpemUnXTsKaWYgKGlzc2V0KCRwYXJhbXNbJ3R5cGUnXSkpICRtYXBfZGF0YVsndHlwZSddID0gJHBhcmFtc1sndHlwZSddOwppZiAoaXNzZXQoJHBhcmFtc1snc2lkZWJhciddKSkgewoJJHBhcmFtc1snc2lkZWJhciddID09ICcxJyA/ICRtYXBfZGF0YVsnc2lkZWJhciddID0gMSA6ICRtYXBfZGF0YVsnc2lkZWJhciddID0gMDsKfQppZiAoaXNzZXQoJHBhcmFtc1snZGlyZWN0aW9ucyddKSkgewoJJHBhcmFtc1snZGlyZWN0aW9ucyddID09ICcxJyA/ICRtYXBfZGF0YVsnZGlyZWN0aW9ucyddID0gMSA6ICRtYXBfZGF0YVsnZGlyZWN0aW9ucyddID0gMDsKfQppZiAoaXNzZXQoJHBhcmFtc1snem9vbV9zY3JvbGx3aGVlbCddKSkgewoJJHBhcmFtc1snem9vbV9zY3JvbGx3aGVlbCddID09ICcxJyA/ICRtYXBfZGF0YVsnem9vbV9zY3JvbGx3aGVlbCddID0gMSA6ICRtYXBfZGF0YVsnem9vbV9zY3JvbGx3aGVlbCddID0gMDsKfQppZiAoaXNzZXQoJHBhcmFtc1snem9vbV9lbmNvbXBhc3MnXSkpIHsKCSRwYXJhbXNbJ3pvb21fZW5jb21wYXNzJ10gPT0gJzEnID8gJG1hcF9kYXRhWyd6b29tX2VuY29tcGFzcyddID0gMSA6ICRtYXBfZGF0YVsnem9vbV9lbmNvbXBhc3MnXSA9IDA7Cn0KaWYgKGlzc2V0KCRwYXJhbXNbJ3NjYWxlX2NvbnRyb2wnXSkpIHsKCSRwYXJhbXNbJ3NjYWxlX2NvbnRyb2wnXSA9PSAnMScgPyAkbWFwX2RhdGFbJ3NjYWxlX2NvbnRyb2wnXSA9IDEgOiAkbWFwX2RhdGFbJ3NjYWxlX2NvbnRyb2wnXSA9IDA7Cn0KaWYgKGlzc2V0KCRwYXJhbXNbJ2JvdW5kc19mdWRnZSddKSkgJG1hcF9kYXRhWydib3VuZHNfZnVkZ2UnXSA9ICRwYXJhbXNbJ2JvdW5kc19mdWRnZSddOwppZiAoaXNzZXQoJHBhcmFtc1snaW5mb193aW5kb3cnXSkpIHsKCSRwYXJhbXNbJ2luZm9fd2luZG93J10gPT0gJzEnID8gJG1hcF9kYXRhWydpbmZvX3dpbmRvdyddID0gMSA6ICRtYXBfZGF0YVsnaW5mb193aW5kb3cnXSA9IDA7Cn0KaWYgKGlzc2V0KCRwYXJhbXNbJ2NlbnRlcmxvbiddKSkgJG1hcF9kYXRhWydjZW50ZXJfbG9uJ10gPSAkcGFyYW1zWydjZW50ZXJsb24nXTsKaWYgKGlzc2V0KCRwYXJhbXNbJ2NlbnRlcmxhdCddKSkgJG1hcF9kYXRhWydjZW50ZXJfbGF0J10gPSAkcGFyYW1zWydjZW50ZXJsYXQnXTsKaWYgKGlzc2V0KCRwYXJhbXNbJ2luZm9fdHJpZ2dlciddKSkgJG1hcF9kYXRhWydpbmZvX3RyaWdnZXInXSA9ICRwYXJhbXNbJ2luZm9fdHJpZ2dlciddOwppZiAoaXNzZXQoJHBhcmFtc1snbGFuZ3VhZ2UnXSkpICRtYXBfZGF0YVsnbGFuZ3VhZ2UnXSA9ICRwYXJhbXNbJ2xhbmd1YWdlJ107CgkKcmVxdWlyZV9vbmNlKCdsaWIvR29vZ2xlTWFwQVBJLScuJHRoaXMtPl9nb29nbGVhcGlfdmVyc2lvbi4nL0dvb2dsZU1hcEFQSS5jbGFzcy5waHAnKTsKLy8kbWFwID0gbmV3IEdvb2dsZU1hcEFQSSgkbWFwX2RhdGFbJ21hcF9pZCddLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgneWFob29hcHBpZCcsICcxMjM0JykpOwokbWFwID0gbmV3IEdvb2dsZU1hcEFQSSgkdGhpcy0+R2V0TmFtZSgpLiRtYXBfZGF0YVsnbWFwX2lkJ10sICR0aGlzLT5HZXROYW1lKCkpOwoKLy8gc2V0IHZhbHVlcyBmb3IgZGlzcGxheWluZwokbWFwLT5zZXRBUElLZXkoJHRoaXMtPkdldFByZWZlcmVuY2UoJ2FwaWtleScsMSkpOwokbWFwLT5zZXRMb29rdXBTZXJ2aWNlKCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbG9va3Vwc2VydmljZScsICdHT09HTEUnKSApOwoKJG1hcC0+c2V0V2lkdGgoJG1hcF9kYXRhWyd3aWR0aCddKTsKJG1hcC0+c2V0SGVpZ2h0KCRtYXBfZGF0YVsnaGVpZ2h0J10pOwoKaWYgKCRtYXBfZGF0YVsnY29udHJvbHMnXSA9PSAwKSB7CiAgJG1hcC0+ZGlzYWJsZU1hcENvbnRyb2xzKCk7Cn0KaWYgKCRtYXBfZGF0YVsndHlwZV9jb250cm9scyddID09IDApIHsKICAkbWFwLT5kaXNhYmxlVHlwZUNvbnRyb2xzKCRtYXBfZGF0YVsndHlwZV9jb250cm9scyddKTsKfQoKJG1hcC0+c2V0Wm9vbUxldmVsKCRtYXBfZGF0YVsnem9vbSddKTsKJG1hcC0+c2V0Q29udHJvbFNpemUoJG1hcF9kYXRhWydjb250cm9sc19zaXplJ10pOwoKJG1hcC0+c2V0TWFwVHlwZSgkbWFwX2RhdGFbJ3R5cGUnXSk7CgokbWFwLT5zZXRMYW5ndWFnZSgkbWFwX2RhdGFbJ2xhbmd1YWdlJ10pOwoKaWYgKCRtYXBfZGF0YVsnc2lkZWJhciddID09IDApIHsKICAkbWFwLT5kaXNhYmxlU2lkZWJhcigpOwp9CgppZiAoJG1hcF9kYXRhWydkaXJlY3Rpb25zJ10gPT0gMCkgewogICRtYXAtPmRpc2FibGVEaXJlY3Rpb25zKCk7Cn0KCmlmKCRtYXBfZGF0YVsnem9vbXNjcm9sbHdoZWVsJ10gPT0gMCkgewogICRtYXAtPmRpc2FibGVab29tU2Nyb2xsV2hlZWwoKTsKfQplbHNlCnsKICAkbWFwLT5lbmFibGVab29tU2Nyb2xsV2hlZWwoKTsKfQoKaWYoJG1hcF9kYXRhWyd6b29tX2VuY29tcGFzcyddID09IDApIHsKICAkbWFwLT5kaXNhYmxlWm9vbUVuY29tcGFzcygpOwp9CgppZiAoJG1hcF9kYXRhWydzY2FsZV9jb250cm9sJ10gPT0gMCkgewogICRtYXAtPmRpc2FibGVTY2FsZUNvbnRyb2woKTsKfQoKJG1hcC0+c2V0Qm91bmRzRnVkZ2UoJG1hcF9kYXRhWydib3VuZHNfZnVkZ2UnXSk7CgppZigkbWFwX2RhdGFbJ2luZm9fd2luZG93J10gPT0gMCkgewogICRtYXAtPmRpc2FibGVJbmZvV2luZG93KCk7Cn0KCiRtYXAtPnNldEluZm9XaW5kb3dUcmlnZ2VyKCRtYXBfZGF0YVsnaW5mb190cmlnZ2VyJ10pOwoKLy8gZ2V0IG1hcmtlcnMgZm9yIHRoaXMgbWFwCiRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIuIGNtc19kYl9wcmVmaXgoKSAuIm1vZHVsZV9nb29nbGVtYXBzX21hcmtlcnMgV0hFUkUgbWFwID0gJyIuICRtYXBfZGF0YVsnbWFwX2lkJ10gLiInIjsKJGRicmVzdWx0ID0mICRkYi0+RXhlY3V0ZSgkcXVlcnkpOwoKJGVycm9yID0gJyc7CndoaWxlICgkZGJyZXN1bHQgJiYgJG1hcF9tYXJrZXIgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpIHsKICAKICAkbGF0ID0gJyc7CiAgJGxvbiA9ICcnOwogIAogIGlmKCRtYXBfbWFya2VyWydsYXQnXSA9PSAnJyAmJiAkbWFwX21hcmtlclsnbGF0J10gPT0gJycpIHsKICAgIC8vZmluZCBhZGRyZXNzCiAgICAkZ2VvY29kZSA9ICcnOwogICAgaWYoJG1hcF9tYXJrZXJbJ2FkZHJlc3MnXSAhPSAnJykgewogICAgICAkZ2VvY29kZSA9ICRtYXAtPmdldEdlb2NvZGUoJG1hcF9tYXJrZXJbJ2FkZHJlc3MnXSk7CiAgICB9CiAgICAkbGF0ID0gJGdlb2NvZGVbJ2xhdCddOwogICAgJGxvbiA9ICRnZW9jb2RlWydsb24nXTsKICB9IGVsc2UgewogICAgLy8gdXNlIHByb3ZpZGVkIGxhdCBsb24KICAgICRsYXQgPSAkbWFwX21hcmtlclsnbGF0J107CiAgICAkbG9uID0gJG1hcF9tYXJrZXJbJ2xvbiddOwogIH0KICAKICBpZigkbGF0ICE9ICcnICYmICRsb24gIT0gJycpIHsKICAgICRtYXAtPmFkZE1hcmtlckJ5Q29vcmRzKAoJCQkgICAgc3RyX3JlcGxhY2UoJywnLCAnLicsICRsb24pLCAKCQkJICAgIHN0cl9yZXBsYWNlKCcsJywgJy4nLCAkbGF0KSwgCgkJCSAgICAkbWFwX21hcmtlclsnbmFtZSddLCAKCQkJICAgICRtYXBfbWFya2VyWydpbmZvJ10KCQkJICAgICk7CgkvLyBBZGQgdGhlIGNvcnJlY3QgaWNvbgoJJGNvbmZpZyA9ICRnQ21zLT5HZXRDb25maWcoKTsKCSRtYXJrZXJkaXIgPSAkdGhpcy0+Y29uZmlnWydyb290X3VybCddLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ21vZHVsZXMnLgoJCURJUkVDVE9SWV9TRVBBUkFUT1IuJHRoaXMtPmdldE5hbWUoKS4KCQlESVJFQ1RPUllfU0VQQVJBVE9SLidpbWFnZXMnLkRJUkVDVE9SWV9TRVBBUkFUT1I7CglpZiAoJG1hcF9tYXJrZXJbJ2ljb24nXSAhPSAnJykgewogCQkvLyBQcmVwYXJlIHRoZSB1cmwgdG8gdGhlIG1hcmtlcgogIAkJJGljb250b3VzZSA9ICRtYXJrZXJkaXIuJ21hcmtlcnMnLkRJUkVDVE9SWV9TRVBBUkFUT1IuJG1hcF9tYXJrZXJbJ2ljb24nXTsKCX0gZWxzZSB7CiAgCQkkaWNvbnRvdXNlID0gJG1hcmtlcmRpci4nbWFya2VycycuRElSRUNUT1JZX1NFUEFSQVRPUi4nZGVmYXVsdC5wbmcnOwoJfQoJLy8gTm93IGNoZWNrIGlmIGEgc2hhZG93IGlzIHRvIGJlIGluY2x1ZGVkCglpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ3VzZW1hcmtlcnNoYWRvd3MnLCAwKSA9PSAwKSB7CgkJJG1hcC0+YWRkTWFya2VySWNvbigkaWNvbnRvdXNlKTsKCX0gZWxzZSB7CgkJLy8gQnVpbGQgdGhlIG5hbWUgb2YgdGhlIHNoYWRvdyBpY29uLiBTcGxpdCBuYW1lIGluIGZpcnN0IHBhcnQgYW5kIGV4dGVuc2lvbgoJCSRmaWxlbmFtZXNwbGl0ID0gYXJyYXkoKTsKCQkkZmlsZW5hbWVzcGxpdCA9IHN0cnRvaygkbWFwX21hcmtlclsnaWNvbiddLCAnLicpOwoJCSRzaGFkb3d0b3VzZSA9ICRtYXJrZXJkaXIuJ21hcmtlcnNoYWRvd3MnLkRJUkVDVE9SWV9TRVBBUkFUT1IuJGZpbGVuYW1lc3BsaXQuJ3MucG5nJzsKICAJCS8vIENoZWNrIGlmIHRoZSBzaGFkb3cgaWNvbiBleGlzdHMKICAJCWlmICghZmlsZV9leGlzdHMoJHNoYWRvd3RvdXNlKSkgewoJCQkkc2hhZG93dG91c2UgPSAkbWFya2VyZGlyLidtYXJrZXJzaGFkb3dzJy5ESVJFQ1RPUllfU0VQQVJBVE9SLidkZWZhdWx0cy5wbmcnOwoJCX0KCQkkbWFwLT5hZGRNYXJrZXJJY29uKCRpY29udG91c2UsICRzaGFkb3d0b3VzZSk7Cgl9CiAgfSAKfQoKCgovLyBjZW50ZXIgdGhlIG1hcCBpZiBjZW50ZXIgY29vcmRpbmF0ZXMgYXJlIHNldCEKaWYgKCAkbWFwX2RhdGFbJ2NlbnRlcl9sYXQnXSAmJiAkbWFwX2RhdGFbJ2NlbnRlcl9sb24nXSApIHsKICAkbWFwLT5zZXRDZW50ZXJDb29yZHMoCgkJCXN0cl9yZXBsYWNlKCcsJywgJy4nLCAkbWFwX2RhdGFbJ2NlbnRlcl9sb24nXSksIAoJCQlzdHJfcmVwbGFjZSgnLCcsICcuJywgJG1hcF9kYXRhWydjZW50ZXJfbGF0J10pCgkJCSk7Cn0KCiMkbWFwLT5kaXNhYmxlT25Mb2FkKCk7Ci8vIGFzc2lnbiBTbWFydHkgdmFyaWFibGVzOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2dvb2dsZV9tYXBfaGVhZGVyJywkbWFwLT5nZXRIZWFkZXJKUygpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdnb29nbGVfbWFwX2pzJywkbWFwLT5nZXRNYXBKUygpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdnb29nbGVfbWFwX3NpZGViYXInLCRtYXAtPmdldFNpZGViYXIoKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignZ29vZ2xlX21hcCcsJG1hcC0+Z2V0TWFwKCkpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ21hcF9kZXNjcmlwdGlvbicsICRtYXBfZGF0YVsnZGVzY3JpcHRpb24nXSk7CgovLyBEaXNwbGF5IHRoZSBwb3B1bGF0ZWQgdGVtcGxhdGUKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdtYXAudHBsJyk7CgojU2V0IGJhY2sgbG9jYWxlIGFnYWluCnNldGxvY2FsZShMQ19BTEwsICRjdXJyZW50TG9jYWxlKTsKPz4K]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgokdGhpcy0+QWRtaW5TdHlsZSgnaDMge2NvbG9yOnJlZH0nKTsKCi8vIFRhYnMKaWYgKEZBTFNFID09IGVtcHR5KCRwYXJhbXNbJ2FjdGl2ZV90YWInXSkpCnsKICAkdGFiID0gJHBhcmFtc1snYWN0aXZlX3RhYiddOwp9IGVsc2UgewogICR0YWIgPSAnJzsKfQppZiAoJHRoaXMtPkNoZWNrUGVybWlzc2lvbignVXNlIEdvb2dsZU1hcHMnKSkKewoKICBpZiAoaXNzZXQoJHBhcmFtc1snc3VibWl0X2FkZHJlc3NfcXVlcnknXSkpIHsKICAgIHJlcXVpcmVfb25jZSgnbGliJy5ESVJFQ1RPUllfU0VQQVJBVE9SLidHb29nbGVNYXBBUEktJy4kdGhpcy0+X2dvb2dsZWFwaV92ZXJzaW9uLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ0dvb2dsZU1hcEFQSS5jbGFzcy5waHAnKTsKICAgICRxdWVyeV9tYXAgPSBuZXcgR29vZ2xlTWFwQVBJKDAsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCd5YWhvb2FwcGlkJywgJzEyMzQnKSk7CiAgICAkcXVlcnlfbWFwLT5zZXRMb29rdXBTZXJ2aWNlKCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbG9va3Vwc2VydmljZScsICdHT09HTEUnKSApOwogICAgJGdlb2NvZGUgPSAkcXVlcnlfbWFwLT5nZXRHZW9jb2RlKCRwYXJhbXNbJ2FkZHJlc3MnXSk7CgogICAgaWYoICRnZW9jb2RlID09PSBmYWxzZSApCiAgICB7CgkJCWVjaG8gJHRoaXMtPlNob3dFcnJvcnMoJHRoaXMtPkxhbmcoJ2VfYmFkYWRkcmVzcycpKTsKICAgIH0KICAgIGVsc2UKICAgIHsKCQkJZWNobyAkdGhpcy0+U2hvd01lc3NhZ2UoJHRoaXMtPkxhbmcoJ2xvY2F0aW9uX2ZvcicpLicgPGI+Jy4gJHBhcmFtc1snYWRkcmVzcyddIC4nPC9iPiAnLiAkdGhpcy0+TGFuZygnaXMnKS4nOjxici8+CgkJCTxkbD4KCQkJCTxkdD4nLiR0aGlzLT5MYW5nKCd0X2xhbicpLic6Jm5ic3A7Jy4kZ2VvY29kZVsnbGF0J10gLic8L2R0PgoJCQkJPGR0PicuJHRoaXMtPkxhbmcoJ3RfbG9uJykuJzombmJzcDsnLiRnZW9jb2RlWydsb24nXSAuJzwvZGQ+CgkJCTwvZGw+Jyk7CiAgfQogIH0KCiAgLy90YWJzICAKICBlY2hvICR0aGlzLT5TdGFydFRhYkhlYWRlcnMoKTsKICBlY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ21hcHMnLCR0aGlzLT5MYW5nKCdtYXBzJyksICgnbWFwcycgPT0gJHRhYik/dHJ1ZTpmYWxzZSk7CiAgZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdhZGRyZXNzJywkdGhpcy0+TGFuZygncXVlcnlfYWRkcmVzcycpLCAoJ2FkZHJlc3MnID09ICR0YWIpP3RydWU6ZmFsc2UpOwogIGVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignc2V0dGluZ3MnLCR0aGlzLT5MYW5nKCdzZXR0aW5ncycpLCAoJ3NldHRpbmdzJyA9PSAkdGFiKT90cnVlOmZhbHNlKTsKICBlY2hvICR0aGlzLT5FbmRUYWJIZWFkZXJzKCk7CiAgLy9lbmQgdGFicwoKICAvL1RoZSBjb250ZW50IG9mIHRoZSB0YWJzCiAgZWNobyAkdGhpcy0+U3RhcnRUYWJDb250ZW50KCk7CiAgCiAgLy8gbWFwcyB0YWIKICBlY2hvICR0aGlzLT5TdGFydFRhYignbWFwcycsICRwYXJhbXMpOwoKICByZXF1aXJlX29uY2UgKCAnbGliL3JjcnVkLmluYy5waHAnICk7CiAgJGNvID0gbmV3IHJjcnVkKCAkZGIgLCBjbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9nb29nbGVtYXBzX21hcHMnICk7CiAgLy9zZXR0aW5ncyBmb3IgcmNydWQKICAkY28tPmhlYWRlciA9ICR0aGlzLT5MYW5nKCd5b3VybWFwcycpOwoKICAvL2ZpZWxkIHNldHRpbmdzCiAgJGNvLT5maWVsZHNbJ21hcF9pZCddWydsYWJlbCddID0gJHRoaXMtPkxhbmcoJ21hcF9pZCcpOwoKICAkY28tPmZpZWxkc1snbmFtZSddWydsYWJlbCddID0gJHRoaXMtPkxhbmcoJ3RfbmFtZScpOwoKICAkY28tPmZpZWxkc1snb3duZXJfaWQnXVsndmlzaWJsZV9pbl9lZGl0J10gPSBmYWxzZTsKCiAgJGNvLT5maWVsZHNbJ2NlbnRlcl9sYXQnXVsnbGFiZWwnXSA9ICR0aGlzLT5MYW5nKCdjZW50ZXJfbGF0Jyk7CiAgJGNvLT5maWVsZHNbJ2NlbnRlcl9sb24nXVsnbGFiZWwnXSA9ICR0aGlzLT5MYW5nKCdjZW50ZXJfbG9uJyk7CiAgCiAgJGNvLT5maWVsZHNbJ3R5cGUnXVsnZmllbGRfdHlwZSddID0gInJhZGlvfG1hcHxzYXRlbGxpdGV8aHlicmlkfHRlcnJhaW4iOwogICRjby0+ZmllbGRzWyd0eXBlJ11bJ2xhYmVsJ10gPSAkdGhpcy0+TGFuZygndF90eXBlJyk7CgogICRjby0+ZmllbGRzWyd3aWR0aCddWydsYWJlbCddID0gJHRoaXMtPkxhbmcoJ3Rfd2lkdGgnKTsKICAkY28tPmZpZWxkc1snaGVpZ2h0J11bJ2xhYmVsJ10gPSAkdGhpcy0+TGFuZygndF9oZWlnaHQnKTsKCiAgJGNvLT5maWVsZHNbJ2NvbnRyb2xzJ11bJ2ZpZWxkX3R5cGUnXSA9ICJjaGVja2JveF9vbiI7CiAgJGNvLT5maWVsZHNbJ2NvbnRyb2xzJ11bJ2xhYmVsJ10gPSAkdGhpcy0+TGFuZygndF9jb250cm9scycpOwoKICAkY28tPmZpZWxkc1snY29udHJvbHNfc2l6ZSddWydmaWVsZF90eXBlJ10gPSAicmFkaW98bGFyZ2V8c21hbGwiOwogICRjby0+ZmllbGRzWydjb250cm9sc19zaXplJ11bJ2xhYmVsJ10gPSAkdGhpcy0+TGFuZygndF9jb250cm9sc19zaXplJyk7CiAgCiAgJGNvLT5maWVsZHNbJ3R5cGVfY29udHJvbHMnXVsnZmllbGRfdHlwZSddID0gImNoZWNrYm94X29uIjsKICAkY28tPmZpZWxkc1sndHlwZV9jb250cm9scyddWydsYWJlbCddID0gJHRoaXMtPkxhbmcoJ3RfdHlwZV9jb250cm9scycpOwoKICAkY28tPmZpZWxkc1snc2lkZWJhciddWydmaWVsZF90eXBlJ10gPSAiY2hlY2tib3hfb24iOwogICRjby0+ZmllbGRzWydzaWRlYmFyJ11bJ2xhYmVsJ10gPSAkdGhpcy0+TGFuZygndF9zaWRlYmFyJyk7CgogICRjby0+ZmllbGRzWydkaXJlY3Rpb25zJ11bJ2ZpZWxkX3R5cGUnXSA9ICJjaGVja2JveCI7CiAgJGNvLT5maWVsZHNbJ2RpcmVjdGlvbnMnXVsnbGFiZWwnXSA9ICR0aGlzLT5MYW5nKCd0X2RpcmVjdGlvbnMnKTsKCiAgJGNvLT5maWVsZHNbJ3pvb20nXVsnZmllbGRfdHlwZSddID0gInNlbGVjdHxyYW5nZXwxfDIwIjsKICAkY28tPmZpZWxkc1snem9vbSddWydsYWJlbCddID0gJHRoaXMtPkxhbmcoJ3Rfem9vbScpOwoKICAkY28tPmZpZWxkc1snem9vbXNjcm9sbHdoZWVsJ11bJ2ZpZWxkX3R5cGUnXSA9ICdjaGVja2JveF9vbic7CiAgJGNvLT5maWVsZHNbJ3pvb21zY3JvbGx3aGVlbCddWydsYWJlbCddID0gJHRoaXMtPkxhbmcoJ3Rfem9vbXNjcm9sbHdoZWVsJyk7CgogICRjby0+ZmllbGRzWydzY2FsZV9jb250cm9sJ11bJ2ZpZWxkX3R5cGUnXSA9ICdjaGVja2JveF9vbic7CiAgJGNvLT5maWVsZHNbJ3NjYWxlX2NvbnRyb2wnXVsnbGFiZWwnXSA9ICR0aGlzLT5MYW5nKCd0X3NjYWxlX2NvbnRyb2wnKTsKCiAgJGNvLT5maWVsZHNbJ2Rlc2NyaXB0aW9uJ11bJ2ZpZWxkX3R5cGUnXSA9ICd0ZXh0YXJlYSc7CiAgJGNvLT5maWVsZHNbJ2Rlc2NyaXB0aW9uJ11bJ2xhYmVsJ10gPSAkdGhpcy0+TGFuZygndF9kZXNjcmlwdGlvbicpOwoKICAkY28tPmZpZWxkc1snem9vbV9lbmNvbXBhc3MnXVsnZmllbGRfdHlwZSddID0gImNoZWNrYm94IjsKICAkY28tPmZpZWxkc1snem9vbV9lbmNvbXBhc3MnXVsnbGFiZWwnXSA9ICR0aGlzLT5MYW5nKCd0X3pvb21fZW5jb21wYXNzJyk7CgogICRjby0+ZmllbGRzWydib3VuZHNfZnVkZ2UnXVsnbGFiZWwnXSA9ICR0aGlzLT5MYW5nKCd0X2JvdW5kc19mdWRnZScpOwoKICAkY28tPmZpZWxkc1snaW5mb193aW5kb3cnXVsnZmllbGRfdHlwZSddID0gImNoZWNrYm94X29uIjsKICAkY28tPmZpZWxkc1snaW5mb193aW5kb3cnXVsnbGFiZWwnXSA9ICR0aGlzLT5MYW5nKCd0X2luZm9fd2luZG93Jyk7CgogICRjby0+ZmllbGRzWydpbmZvX3RyaWdnZXInXVsnZmllbGRfdHlwZSddID0gInJhZGlvfGNsaWNrfG1vdXNlb3ZlciI7CiAgJGNvLT5maWVsZHNbJ2luZm9fdHJpZ2dlciddWydsYWJlbCddID0gJHRoaXMtPkxhbmcoJ3RfaW5mb190cmlnZ2VyJyk7CgogIC8vIExpc3QgdmlzaWJpbGl0eSAKICAkY28tPmZpZWxkc1snbWFwX2lkJ11bJ3Zpc2libGVfaW5fbGlzdCddID0gZmFsc2U7CiAgJGNvLT5maWVsZHNbJ293bmVyX2lkJ11bJ3Zpc2libGVfaW5fbGlzdCddID0gZmFsc2U7CiAgJGNvLT5maWVsZHNbJ2Rlc2NyaXB0aW9uJ11bJ3Zpc2libGVfaW5fbGlzdCddID0gZmFsc2U7CiAgJGNvLT5maWVsZHNbJ3dpZHRoJ11bJ3Zpc2libGVfaW5fbGlzdCddID0gZmFsc2U7CiAgJGNvLT5maWVsZHNbJ2hlaWdodCddWyd2aXNpYmxlX2luX2xpc3QnXSA9IGZhbHNlOwogICRjby0+ZmllbGRzWyd3aWR0aCddWyd2aXNpYmxlX2luX2xpc3QnXSA9IGZhbHNlOwogICRjby0+ZmllbGRzWydjb250cm9scyddWyd2aXNpYmxlX2luX2xpc3QnXSA9IGZhbHNlOwogICRjby0+ZmllbGRzWyd0eXBlX2NvbnRyb2xzJ11bJ3Zpc2libGVfaW5fbGlzdCddID0gZmFsc2U7CiAgJGNvLT5maWVsZHNbJ2NvbnRyb2xzX3NpemUnXVsndmlzaWJsZV9pbl9saXN0J10gPSBmYWxzZTsKICAkY28tPmZpZWxkc1snc2lkZWJhciddWyd2aXNpYmxlX2luX2xpc3QnXSA9IGZhbHNlOwogICRjby0+ZmllbGRzWydkaXJlY3Rpb25zJ11bJ3Zpc2libGVfaW5fbGlzdCddID0gZmFsc2U7CiAgJGNvLT5maWVsZHNbJ3pvb20nXVsndmlzaWJsZV9pbl9saXN0J10gPSBmYWxzZTsKICAkY28tPmZpZWxkc1snem9vbXNjcm9sbHdoZWVsJ11bJ3Zpc2libGVfaW5fbGlzdCddID0gZmFsc2U7CiAgJGNvLT5maWVsZHNbJ3pvb21fZW5jb21wYXNzJ11bJ3Zpc2libGVfaW5fbGlzdCddID0gZmFsc2U7CiAgJGNvLT5maWVsZHNbJ3NjYWxlX2NvbnRyb2wnXVsndmlzaWJsZV9pbl9saXN0J10gPSBmYWxzZTsKCSRjby0+ZmllbGRzWydib3VuZHNfZnVkZ2UnXVsndmlzaWJsZV9pbl9saXN0J10gPSBmYWxzZTsKICAkY28tPmZpZWxkc1snaW5mb193aW5kb3cnXVsndmlzaWJsZV9pbl9saXN0J10gPSBmYWxzZTsKICAkY28tPmZpZWxkc1snaW5mb190cmlnZ2VyJ11bJ3Zpc2libGVfaW5fbGlzdCddID0gZmFsc2U7CiAgaWYoIGlzc2V0KCAkX0dFVFsncmNydWRfYWN0aW9uJ10gKSApCiAgewogIAlpZiAoICRfR0VUWydyY3J1ZF9hY3Rpb24nXSA9PSAnZWRpdCcpIHsKCQkJLy8gSSBoYWQgaG9wZWQgdGhhdCBhbGwgd291bGQgZml0IGluIHRoZSByY3J1ZCBwcm9ncmFtLCAKCQkJLy8gaG93ZXZlciB0cm91YmxlIHdpdGggdGhlIGNsYXNzZXMgKGN1cnJlbnQgYW5kIHNtYXJ0eSkgcHJldmVudGVkIHRoaXMKCQkJJHBhcmFtc1snbWFwX2lkJ10gPSAkX0dFVFsncmNydWRfaWQnXTsKCQkJJHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9nb29nbGVtYXBzX21hcHMgV0hFUkUgbWFwX2lkID0gPyAiOwoJCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSggJHBhcmFtc1snbWFwX2lkJ10pKTsKICAgICAgJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKTsKICAgICAgaWYgKCRkYnJlc3VsdCkgewoJCQkJJHNtYXJ0eS0+YXNzaWduKCdlYXN5bG9jYXRvcmxhdCcsICRyb3dbJ2NlbnRlcl9sYXQnXSk7CgkJCQkkc21hcnR5LT5hc3NpZ24oJ2Vhc3lsb2NhdG9ybG9uJywgJHJvd1snY2VudGVyX2xvbiddKTsKCQkJCSRzbWFydHktPmFzc2lnbignZWFzeWxvY2F0b3JsZXZlbCcsICRyb3dbJ3pvb20nXSk7CgkJCX0KCQl9CgkJZWxzZQoJCXsKCQkJJHNtYXJ0eS0+YXNzaWduKCdlYXN5bG9jYXRvcmxhdCcsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxhdCcsIDQ0KSk7CgkJCSRzbWFydHktPmFzc2lnbignZWFzeWxvY2F0b3Jsb24nLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZWFzeWxvY2F0b3Jsb24nLCAtNjMpKTsKCQkJJHNtYXJ0eS0+YXNzaWduKCdlYXN5bG9jYXRvcmxldmVsJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Vhc3lsb2NhdG9ybGV2ZWwnKSwgMSk7CgkJfQogIH0KCgkkc21hcnR5LT5hc3NpZ24oJ2FwaWtleScsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdhcGlrZXknLCAxKSk7CgkvLyBFYXN5TG9jYXRvciBpcyB1c2VkIGluIHRoZSByY3J1ZCBwcm9ncmFtIHRvIHNob3cgdGhlIG1hcCAKCSRjby0+ZWFzeWxvY2F0b3IgPSAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlRnJvbURhdGFiYXNlKCdnb29nbGVtYXBzX2Vhc3lsb2NhdG9yJyk7CiAgLy9wcmludCBpdCEKICAkY28tPmdvKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogIC8vIElmIGEgdmFsdWUgd2FzIHNldCB1c2luZyBlYXN5IGxvY2F0b3IsIHVzZSBpdCBuZXh0IHRpbWUgaWYgcmVxdWVzdGVkCglpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Vhc3lsb2NhdG9yc2F2ZWxhc3QnKSAmJiBpc3NldCgkY28tPmNlbnRlcl9sYXQpKSB7CgkJJGNlbnRlcl9sYXQgPSBzdHJfcmVwbGFjZSgnXCcnICwgJycsICRjby0+Y2VudGVyX2xhdCk7CgkJJGNlbnRlcl9sb24gPSBzdHJfcmVwbGFjZSgnXCcnICwgJycsICRjby0+Y2VudGVyX2xvbik7CgkJJHpvb20gPSBzdHJfcmVwbGFjZSgnXCcnICwgJycsICRjby0+em9vbSk7CgkJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2Vhc3lsb2NhdG9ybGF0JywgJGNlbnRlcl9sYXQpOwoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxvbicsICRjZW50ZXJfbG9uKTsKCQkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnZWFzeWxvY2F0b3JsZXZlbCcsICR6b29tKTsKCX0KCQogIC8vbWFya2VycyBjcnVkCiAgJGNtID0gbmV3IHJjcnVkKCAkZGIgLCBjbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9nb29nbGVtYXBzX21hcmtlcnMnICk7CiAgJGNtLT5oZWFkZXIgPSAkdGhpcy0+TGFuZygneW91cm1hcmtlcnMnKTsKCiAgLy9zZXR0aW5ncwogICRjbS0+ZmllbGRzWydtYXAnXVsnZmllbGRfdHlwZSddID0gJ3NlbGVjdHx0YWJsZXwnIC4gY21zX2RiX3ByZWZpeCgpIC4gJ21vZHVsZV9nb29nbGVtYXBzX21hcHN8bWFwX2lkfG5hbWUnOwoKICAvL2xhbmcgc2V0dGluZ3MKICAkY20tPmZpZWxkc1snbmFtZSddWydsYWJlbCddID0gJHRoaXMtPkxhbmcoJ3RfbmFtZScpOwogICRjbS0+ZmllbGRzWydtYXAnXVsnbGFiZWwnXSA9ICR0aGlzLT5MYW5nKCd0X2JlbG9uZ3NfdG8nKTsKICAkY20tPmZpZWxkc1snaW5mbyddWydsYWJlbCddID0gJHRoaXMtPkxhbmcoJ3RfaW5mbycpOwogICRjbS0+ZmllbGRzWydhZGRyZXNzJ11bJ2xhYmVsJ10gPSAkdGhpcy0+TGFuZygndF9hZGRyZXNzJyk7CiAgJGNtLT5maWVsZHNbJ2xhdCddWydsYWJlbCddID0gJHRoaXMtPkxhbmcoJ3RfbGFuJyk7CiAgJGNtLT5maWVsZHNbJ2xvbiddWydsYWJlbCddID0gJHRoaXMtPkxhbmcoJ3RfbG9uJyk7CiAgJGNtLT5maWVsZHNbJ2ljb24nXVsnbGFiZWwnXSA9ICR0aGlzLT5MYW5nKCd0X2ljb24nKTsKCiAgJGNtLT5maWVsZHNbJ2luZm8nXVsnZmllbGRfdHlwZSddID0gJ3RleHRhcmVhJzsKCgogIC8vdmlzaWJpbGl0eV9zZXR0aW5ncwogIC8vbGlzdAogICRjbS0+ZmllbGRzWydtYXJrZXJfaWQnXVsndmlzaWJsZV9pbl9saXN0J10gPSBmYWxzZTsKICAkY20tPmZpZWxkc1snaW5mbyddWyd2aXNpYmxlX2luX2xpc3QnXSA9IGZhbHNlOwoKICAkY29uZmlnID0gJGdDbXMtPkdldENvbmZpZygpOwogIC8vIFJlYWQgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW4gdGhlIGltYWdlcyBvZiB0aGUgbWFya2VycwogICRwYXRoID0gJHRoaXMtPmNvbmZpZ1sndXBsb2Fkc19wYXRoJ10uRElSRUNUT1JZX1NFUEFSQVRPUi4kdGhpcy0+Z2V0TmFtZSgpLicvbWFya2Vycyc7CiAgJGNtLT5zZXRQYXRoKCRwYXRoLCAkdGhpcy0+TGFuZygncGF0aGVycm9yJyksICR0aGlzLT5MYW5nKCdtYXJrZXJlcnJvcicpKTsKCiAgaWYoIGlzc2V0KCAkX0dFVFsncmNydWRfYWN0aW9uJ10gKSApCiAgewogIAlpZiAoICRfR0VUWydyY3J1ZF9hY3Rpb24nXSA9PSAnZWRpdCcpIHsKCQkJLy8gSSBoYWQgaG9wZWQgdGhhdCBhbGwgd291bGQgZml0IGluIHRoZSByY3J1ZCBwcm9ncmFtLCAKCQkJLy8gaG93ZXZlciB0cm91YmxlIHdpdGggdGhlIGNsYXNzZXMgKGN1cnJlbnQgYW5kIHNtYXJ0eSkgcHJldmVudGVkIHRoaXMKCQkJJHBhcmFtc1snbWFya2VyX2lkJ10gPSAkX0dFVFsncmNydWRfaWQnXTsKCQkJJHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9nb29nbGVtYXBzX21hcmtlcnMgV0hFUkUgbWFya2VyX2lkID0gPyAiOwoJCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSggJHBhcmFtc1snbWFya2VyX2lkJ10pKTsKICAgICAgJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKTsKICAgICAgaWYgKCRkYnJlc3VsdCkgewoJCQkJJHNtYXJ0eS0+YXNzaWduKCdlYXN5bG9jYXRvcmxhdCcsICRyb3dbJ2xhdCddKTsKCQkJCSRzbWFydHktPmFzc2lnbignZWFzeWxvY2F0b3Jsb24nLCAkcm93Wydsb24nXSk7CgkJCQkkc21hcnR5LT5hc3NpZ24oJ2Vhc3lsb2NhdG9ybGV2ZWwnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZWFzeWxvY2F0b3JsZXZlbCcpKTsKCQkJfQoJCX0KCQllbHNlCgkJewoJCQkkc21hcnR5LT5hc3NpZ24oJ2Vhc3lsb2NhdG9ybGF0JywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Vhc3lsb2NhdG9ybGF0JywgNDQpKTsKCQkJJHNtYXJ0eS0+YXNzaWduKCdlYXN5bG9jYXRvcmxvbicsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxvbicsIC02MykpOwoJCQkkc21hcnR5LT5hc3NpZ24oJ2Vhc3lsb2NhdG9ybGV2ZWwnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZWFzeWxvY2F0b3JsZXZlbCcpLCAxKTsKCQl9CiAgfQoKCSRzbWFydHktPmFzc2lnbignYXBpa2V5JywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2FwaWtleScsIDEpKTsKCS8vIEVhc3lMb2NhdG9yIGlzIHVzZWQgaW4gdGhlIHJjcnVkIHByb2dyYW0gdG8gc2hvdyB0aGUgbWFwIAoJJGNtLT5lYXN5bG9jYXRvciA9ICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YWJhc2UoJ2dvb2dsZW1hcHNfZWFzeWxvY2F0b3InKTsKCiAgJGNtLT5nbygpOwoKICAvLyBJZiBhIHZhbHVlIHdhcyBzZXQgdXNpbmcgZWFzeSBsb2NhdG9yLCB1c2UgaXQgbmV4dCB0aW1lIGlmIHJlcXVlc3RlZAoJaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcnNhdmVsYXN0JykgJiYgaXNzZXQoJGNtLT5jZW50ZXJfbGF0KSkgewoJCSRjZW50ZXJfbGF0ID0gc3RyX3JlcGxhY2UoJ1wnJyAsICcnLCAkY20tPmNlbnRlcl9sYXQpOwoJCSRjZW50ZXJfbG9uID0gc3RyX3JlcGxhY2UoJ1wnJyAsICcnLCAkY20tPmNlbnRlcl9sb24pOwoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxhdCcsICRjZW50ZXJfbGF0KTsKCQkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnZWFzeWxvY2F0b3Jsb24nLCAkY2VudGVyX2xvbik7Cgl9ICAKCiAgZWNobyAkdGhpcy0+RW5kVGFiKCk7CiAgLy9lbmQgbWFwcyB0YWIKCiAgLy9zdGFydCBhZGRyZXNzIHRhYgogIGVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdhZGRyZXNzJywgJHBhcmFtcyk7CiAgZWNobyAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwnJywnJyx0cnVlKTsKICBlY2hvICR0aGlzLT5DcmVhdGVGaWVsZHNldFN0YXJ0KCRpZCwgJ0FkZHJlc3MgcXVlcmllcycsICdBZGRyZXNzIHF1ZXJpZXMnICk7CiAgZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0V2l0aExhYmVsKCRpZCwgJ2FkZHJlc3MnLCAnJywgMTAwLCAxMDI0LCAgJycsICR0aGlzLT5MYW5nKCdhZGRyZXNzX2xvb2t1cCcpLic6Jm5ic3A7JyApOwogIGVjaG8gJHRoaXMtPkNyZWF0ZUZpZWxkc2V0RW5kKCk7CiAgZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCAnbW9kdWxlJywgJ2dvb2dsZW1hcHMnKTsKICBlY2hvICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXRfYWRkcmVzc19xdWVyeScsICR0aGlzLT5MYW5nKCdTdWJtaXQnKSk7CiAgZWNobyAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpOwoKICBlY2hvICR0aGlzLT5FbmRUYWIoKTsKICAvL2VuZCBhZGRyZXNzIHRhYgoKICAvL1NldHRpbmdzIHRhYgogIGVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdzZXR0aW5ncycsICRwYXJhbXMpOwoKICBlY2hvICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAnc2F2ZXNldHRpbmdzJywgJHJldHVybmlkKTsKICBlY2hvICR0aGlzLT5DcmVhdGVGaWVsZHNldFN0YXJ0KCRpZCwgJ2dlbmVyYWwnLCAnR2VuZXJhbCBzZXR0aW5ncycgKTsKICBlY2hvICc8cD4nOwogIGVjaG8gJHRoaXMtPkNyZWF0ZUlucHV0VGV4dFdpdGhMYWJlbCgkaWQsICdhcGlrZXknLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgiYXBpa2V5IiwgMSkgLCAxMDAsIDEwMjQsICcnLCAkdGhpcy0+TGFuZygnYXBpa2V5JykgKTsKICBlY2hvICI8L3A+IjsKICBlY2hvICI8cD4iOwogIGVjaG8gJHRoaXMtPkNyZWF0ZUxhYmVsRm9ySW5wdXQoJGlkLCAndXNlY2FjaGUnLCAkdGhpcy0+TGFuZygndXNlY2FjaGUnKSk7CiAgZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsICd1c2VjYWNoZScsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCJ1c2VjYWNoZSIsIDApICwgJzEnKTsKICBlY2hvICI8L3A+IjsKICBlY2hvICc8cD4nOwogIGVjaG8gJHRoaXMtPkNyZWF0ZUxhYmVsRm9ySW5wdXQoJGlkLCAndXNlbWFya2Vyc2hhZG93cycsICR0aGlzLT5MYW5nKCd1c2VtYXJrZXJzaGFkb3dzJykpOwogIGVjaG8gJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCAndXNlbWFya2Vyc2hhZG93cycsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCd1c2VtYXJrZXJzaGFkb3dzJywgMCkgLCAnMScpOwogIGVjaG8gIjwvcD4iOyAKCiAgZWNobyAiPHA+IjsgCiAgZWNobyAkdGhpcy0+Q3JlYXRlTGFiZWxGb3JJbnB1dCgkaWQsICdsb29rdXBzZXJ2aWNlJywgJHRoaXMtPkxhbmcoJ2xvb2t1cHNlcnZpY2UnKSk7CiAgJGxvb2t1cHNlcnZpY2VzID0gYXJyYXkoKTsKICAkbG9va3Vwc2VydmljZXNbIllBSE9PIl0gPSAiWUFIT08iOwogICRsb29rdXBzZXJ2aWNlc1siR09PR0xFIl0gPSAiR09PR0xFIjsKICBlY2hvICR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwgJ2xvb2t1cHNlcnZpY2UnLCAkbG9va3Vwc2VydmljZXMsIC0xLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgibG9va3Vwc2VydmljZSIpKTsKICBlY2hvICI8L3A+IjsgCgogIGVjaG8gIjxwPiI7IAogIGVjaG8gJHRoaXMtPkNyZWF0ZUlucHV0VGV4dFdpdGhMYWJlbCgkaWQsICd5YWhvb2FwaWQnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgieWFob29hcGlkIiwgJycpICwgMTAwLCAxMDI0LCAnJywgJHRoaXMtPkxhbmcoJ3lhaG9vYXBwaWQnKSApOwogIGVjaG8gIjwvcD4iOyAKICBlY2hvICR0aGlzLT5DcmVhdGVGaWVsZHNldEVuZCgpOwoKICAvLyBQcmVwYXJlIHRoZSBzZXR0aW5ncyBmb3IgZWFzeSBsb2NhdG9yCgllY2hvICR0aGlzLT5DcmVhdGVGaWVsZHNldFN0YXJ0KCRpZCwgJ2Vhc3lsb2NhdG9yJywgJHRoaXMtPkxhbmcoJ2Vhc3lsb2NhdG9yc2V0dGluZ3MnKSApOwogIGVjaG8gJzxwPic7CiAgJGVhc3lsb2NhdG9yZHJvcGRvd24gPSBhcnJheSgpOwogIGZvciAoJGk9IDE7ICRpPD0yMDskaSsrKSB7CgkJJGVhc3lsb2NhdG9yZHJvcGRvd25bJGldID0gJGk7CQkKCX0KICBlY2hvICR0aGlzLT5DcmVhdGVMYWJlbEZvcklucHV0KCRpZCwgJ2Vhc3lsb2NhdG9ybGV2ZWwnLCAkdGhpcy0+TGFuZygnZWFzeWxvY2F0b3JsZXZlbCcpKTsKICBlY2hvICR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwgJ2Vhc3lsb2NhdG9ybGV2ZWwnLCAkZWFzeWxvY2F0b3Jkcm9wZG93biwgMiwgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Vhc3lsb2NhdG9ybGV2ZWwnKSk7CiAgZWNobyAnPC9wPic7CiAgZWNobyAnPHA+JzsKICBlY2hvICR0aGlzLT5DcmVhdGVJbnB1dFRleHRXaXRoTGFiZWwoJGlkLCAnZWFzeWxvY2F0b3JsYXQnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZWFzeWxvY2F0b3JsYXQnLCAzNykgLCAxNSwgMTUsICcnLCAkdGhpcy0+TGFuZygnZWFzeWxvY2F0b3JsYXQnKSApOwogIGVjaG8gJzwvcD4nOwogIGVjaG8gJzxwPic7CiAgZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0V2l0aExhYmVsKCRpZCwgJ2Vhc3lsb2NhdG9ybG9uJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Vhc3lsb2NhdG9ybG9uJywgLTc0KSAsIDE1LCAxNSwgJycsICR0aGlzLT5MYW5nKCdlYXN5bG9jYXRvcmxvbicpICk7CiAgZWNobyAnPC9wPic7CiAgZWNobyAnPHA+JzsKICBlY2hvICR0aGlzLT5DcmVhdGVMYWJlbEZvcklucHV0KCRpZCwgJ2Vhc3lsb2NhdG9yc2F2ZWxhc3QnLCAkdGhpcy0+TGFuZygnZWFzeWxvY2F0b3JzYXZlbGFzdCcpKTsKICBlY2hvICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwgJ2Vhc3lsb2NhdG9yc2F2ZWxhc3QnLCAnMScsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcnNhdmVsYXN0JywgMCkpOwogIGVjaG8gJzwvcD4nOwogIGVjaG8gJzxwPic7CiAgJHRlbXBsYXRlID0gJHRoaXMtPkdldFRlbXBsYXRlKCAnZ29vZ2xlbWFwc19lYXN5bG9jYXRvcicpOwogIGlmICgkdGVtcGxhdGUgPT0gJycpIHsKCQkkZm4gPSBkaXJuYW1lKF9fRklMRV9fKS5ESVJFQ1RPUllfU0VQQVJBVE9SLgoJCSAgJ3RlbXBsYXRlcycuRElSRUNUT1JZX1NFUEFSQVRPUi4nZWFzeWxvY2F0b3IudHBsJzsKCQlpZiggZmlsZV9leGlzdHMoICRmbiApICkKCQl7CgkJCSR0ZW1wbGF0ZSA9IEBmaWxlX2dldF9jb250ZW50cygkZm4pOwoJCX0KCX0KICBlY2hvICR0aGlzLT5DcmVhdGVMYWJlbEZvcklucHV0KCRpZCwgJ2Vhc3lsb2NhdG9ydGVtcGxhdGUnLCAkdGhpcy0+TGFuZygnZWFzeWxvY2F0b3J0ZW1wbGF0ZScpKTsKICBlY2hvICc8YnIgLz4nOwogIGVjaG8gJHRoaXMtPkNyZWF0ZVRleHRBcmVhKGZhbHNlLCAkaWQsICR0ZW1wbGF0ZSwgJ3RlbXBsYXRlJyk7CiAgZWNobyAnPC9wPic7CiAgZWNobyAkdGhpcy0+Q3JlYXRlRmllbGRzZXRFbmQoKTsKCgllY2hvICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXRfZ2VuZXJhbCcsICR0aGlzLT5MYW5nKCdTdWJtaXQnKSApOwogIGVjaG8gJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKTsKCiAgZWNobyAkdGhpcy0+RW5kVGFiKCk7CiAgLy9FTkQgU2V0dGluZ3MgdGFiCgogIGVjaG8gJHRoaXMtPkVuZFRhYkNvbnRlbnQoKTsgIAp9ICAKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.savesettings.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyBHb29nbGVNYXBzLiBBIG1vZHVsZSBmb3IgQ01TIC0gQ01TIE1hZGUgU2ltcGxlCiMgVGhpcyBtb2R1bGUgaGFzIHNwZWNpYWxseSB3cml0dGVuIGZvciB0aGUgZmlyc3QgRHV0Y2ggV29ya3Nob3Agb24gQ01TTVMgaGVsZCBKYW51YXJpIDI0dGggMjAwOQojIENvcHlyaWdodCAoYykgMjAwOSBieSBEdWtldG93biA8ZHVrZXRvd25AbWFudG94Lm5sPgojCiMgVGhpcyBmdW5jdGlvbiBhbGxvd3MgdGhlIGFkbWluaXN0cmF0b3IgdG8gdXBkYXRlIHRoZSBwcmVmZXJlbmNlcwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9nb29nbGVtYXBzCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgppZiggISR0aGlzLT5DaGVja1Blcm1pc3Npb24oICdVc2UgR29vZ2xlTWFwcycgKSApCnsKICByZXR1cm47Cn0KCiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdhcGlrZXknLCBpc3NldCgkcGFyYW1zWydhcGlrZXknXSkgPyAkcGFyYW1zWydhcGlrZXknXSA6ICcnICk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCd1c2VjYWNoZScsIGlzc2V0KCRwYXJhbXNbJ3VzZWNhY2hlJ10pID8gJzEnIDogJzAnICk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdsb29rdXBzZXJ2aWNlJywgaXNzZXQoJHBhcmFtc1snbG9va3Vwc2VydmljZSddKSA/ICRwYXJhbXNbJ2xvb2t1cHNlcnZpY2UnXSA6ICdZQUhPTycpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgneWFob29hcGlkJywgaXNzZXQoJHBhcmFtc1sneWFob29hcGlkJ10pID8gJHBhcmFtc1sneWFob29hcGlkJ10gOiAkaWQpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgndXNlbWFya2Vyc2hhZG93cycsIGlzc2V0KCRwYXJhbXNbJ3VzZW1hcmtlcnNoYWRvd3MnXSkgPyAnMScgOiAnMCcgKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2Vhc3lsb2NhdG9ybGV2ZWwnLCBpc3NldCgkcGFyYW1zWydlYXN5bG9jYXRvcmxldmVsJ10pID8gJHBhcmFtc1snZWFzeWxvY2F0b3JsZXZlbCddIDogMTAgKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2Vhc3lsb2NhdG9ybGF0JywgaXNzZXQoJHBhcmFtc1snZWFzeWxvY2F0b3JsYXQnXSkgPyAkcGFyYW1zWydlYXN5bG9jYXRvcmxhdCddIDogMzcgKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2Vhc3lsb2NhdG9ybG9uJywgaXNzZXQoJHBhcmFtc1snZWFzeWxvY2F0b3Jsb24nXSkgPyAkcGFyYW1zWydlYXN5bG9jYXRvcmxvbiddIDogLTc0ICk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcnNhdmVsYXN0JywgaXNzZXQoJHBhcmFtc1snZWFzeWxvY2F0b3JzYXZlbGFzdCddKSA/ICcxJyA6ICcwJyAgKTsKJHRlbXBsYXRlID0gJHBhcmFtc1sndGVtcGxhdGUnXTsKaWYgKCR0ZW1wbGF0ZSAhPSAnJykKewogICR0aGlzLT5TZXRUZW1wbGF0ZSggJ2dvb2dsZW1hcHNfZWFzeWxvY2F0b3InLCAkdGVtcGxhdGUsICR0aGlzLT5HZXROYW1lKCkpOwp9CgokcGFyYW1zID0gYXJyYXkoJ3RhYl9tZXNzYWdlJz0+ICdzZXR0aW5nc19zYXZlZCcsICdhY3RpdmVfdGFiJyA9PiAnbWFwcycpOwokdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJycsICRwYXJhbXMpOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/changelog.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHVsPgoJPGxpPlZlcnNpb24gMC4xLjggMjkgRGVjZW1iZXIgMjAwOSBCeSBEdWtldG93bjxiciAvPgoJCTx1bD4KCQkJPGxpPlBlciBtYXAvbWFya2VyIEVhc3kgTG9jYXRvciBpbnRyb2R1Y2VkLCB0byBxdWlja2x5IHJldHJpZXZlIGNvb3JkaW5hdGVzIGZvciBtYXAvbWFya2VyOzwvbGk+CgkJCTxsaT5OZXcgc2V0dGluZ3MgdG8gc3VwcG9ydCBFYXN5IExvY2F0b3I7PC9saT4KCQkJPGxpPk5vIHRoaW5ncyBsZWZ0IGJlaGluZCB3aGVuIHBlcmZvcm1pbmcgYW4gdW5pc3RhbGwuPC9saT4KCQk8L3VsPgoJPC9saT4KCTxsaT5WZXJzaW9uIDAuMS43IDUgRGVjZW1iZXIgMjAwOSBCeSBEdWtldG93bjxicj4KCQk8dWw+CgkJCTxsaT5VcGdyYWRlZCBHb29nbGVNYXBzIEFQSSBmcm9tIHZlcnNpb24gMi4wIHRvIDIuNSAoRmVhdHVyZSBSZXF1ZXN0IDQyNDkpOzwvbGk+CgkJCTxsaT5QZXIgbWFwIG9wdGlvbiB0byBhbGxvdyB6b29taW5nIHVzaW5nIHRoZSBzY3JvbGwgd2hlZWw7PC9saT4KCQkJPGxpPlBlciBtYXAgb3B0aW9uIHRvIHNob3cvaGlkZSB0aGUgc2NhbGUuIEFsc28gYXZhaWxhYmxlIGFzIHBhcmFtZXRlcjs8L2xpPgoJCQk8bGk+Tm8gbG9uZ2VyIG5lZWQgdG8gcmVsb2dpbiBhZnRlciBhZGRyZXNzIGxvb2t1cCAoQnVnIzMxOTMpLiBGb3VuZCBsYXQvbG9uIHJlbWFpbnMgc2hvd24gZm9yIGVhc3kgY29weWluZzs8L2xpPgoJCQk8bGk+TGFuZ3VhZ2UgZm9yIHRoZSBjb250cm9sZXMgaXMgbm93IGF2YWlsYWJsZSBhcyBwYXJhbWV0ZXI7PC9saT4KCQkJPGxpPkNoZWNrZWQvc29sdmVkIHZhbGlkYXRpb24gWEhUTUwgdXNpbmcgVzNDIChCdWcjMjAxNCk7PC9saT4KCQkJPGxpPk5vdyBtdWx0aXBsZSBtYXBzIG9uIG9uZSBwYWdlIHBvc3NpYmxlIChCdWcjIDQyNDgpOzwvbGk+CgkJCTxsaT5CZXR0ZXIgdXNhZ2Ugb2YgZGlyZWN0b3J5IHNlcGFyYXRvciB0byBhdm9pZCBub3QgZm91bmQgZmlsZXMgKEJ1ZyMzMzQ2KTs8L2xpPgoJCQk8bGk+TmV3IG1hcCB0eXBlICdUZXJyYWluJyBpbXBsZW1lbnRlZC48L2xpPgoJCQk8bGk+RHVyaW5nIHVwZGF0ZSB0aGUgcHJldmlvdXMgdmVyc2lvbiBvZiB0aGUgQVBJIGlzIHJlbW92ZWQgKGxpYi9Hb29nbGVNYXBBUEktMi4wKS4gWW91IG1heSBmaW5kIGl0IGlzIHN0aWxsIHRoZXJlIGFmdGVyIHRoaXMgdXBncmFkZS4KCQkJVGhhdCBpcyB0aGVuIGR1ZSB0byBzZWN1cml0eSBzZXR0aW5ncy4gWW91IG1heSBkZWxldGUgZGlyZWN0b3J5IEdvb2dsZU1hcEFQSS0yLjAgd2l0aG91dCBhbnkgcHJvYmxlbS48L2xpPgoJCTwvdWw+Cgk8L2xpPgoJPGxpPlZlcnNpb24gMC4xLjYgMTUgSmFudWFyeSAyMDA5IEJ5IER1a2V0b3duPGJyIC8+CgkJPHVsPgoJCQk8bGk+SW5jbHVkZWQgdGhlIHBhcmFtZXRlcnMgdGhhdCBhcmUgYWxzbyB1c2VkIGJ5IEdvb2dsZVwncyBBUEkuIFBhcmFtZXRlcnMgYXJlIGRpc2N1c3NlZCBpbiBoZWxwIHRleHQuPC9saT4KCQk8L3VsPgoJPC9saT4KCTxsaT5WZXJzaW9uIDAuMS41IDEwIEphbnVhcnkgMjAwOSBCeSBEdWtldG93bjxiciAvPgoJCTx1bD4KCQkJPGxpPlVzZXIgZGVmaW5lZCBtYXJrZXJzIG5vdyB3b3JrLiBTdXBwbGllZCBtYXJrZXJzIGJ1aWxkIHZpYTogaHR0cDovL3d3dy5nbWFwbGl2ZS5jb20vbWFya2VyX21ha2VyLnBocCBvZiBEaXhvbiBJbmZvcm1hdGlvbiBTeXN0ZW1zLCBDYW5hZGE8YnIgLz48L2xpPgoJCTwvdWw+Cgk8L2xpPgoJPGxpPlZlcnNpb24gMC4xLiAyOCBBdWd1c3QgMjAwNi48YnI+CgkJPHVsPgoJCQk8bGk+SW5pdGlhbCBSZWxlYXNlLjwvbGk+CgkJPC91bD4KCTwvbGk+CjwvdWw+CjxoMz5UaGFua3MgZ28gdG88L2gzPgo8cD5Sb2JlcnQgQnJvd24gZm9yIFJDUlVEIENsYXNzIHVzZWQgaW4gYWRtaW4gZXh0ZW5zaXZlbHk8L3A+CjxwPmFuZDwvcD4KPHA+TW9udGUgT2hydCBmb3IgR29vZ2xlTWFwQVBJPC9wPg==]]></data>
	</file>
	<file>
	  <filename>/GoogleMaps.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IEdvb2dsZU1hcHMgLSBNb2R1bGUgZm9yIEdvb2dsZU1hcHMKIyBWZXJzaW9uOiAwLjEsIHRzdwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9za2VsZXRvbi8KIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKY2xhc3MgR29vZ2xlTWFwcyBleHRlbmRzIENNU01vZHVsZQp7Cgl2YXIgJF9nb29nbGVhcGlfdmVyc2lvbiA9ICIyLjUiOwoKCWZ1bmN0aW9uIEdldE5hbWUoKQoJewoJCXJldHVybiAnR29vZ2xlTWFwcyc7Cgl9CglmdW5jdGlvbiBHZXRGcmllbmRseU5hbWUoKQoJewoJCXJldHVybiAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyk7Cgl9CglmdW5jdGlvbiBHZXRWZXJzaW9uKCkKCXsKCQlyZXR1cm4gJzAuMS44JzsKCX0KCWZ1bmN0aW9uIEdldEhlbHAoKQoJewoJCXJldHVybiAkdGhpcy0+TGFuZygnaGVscCcpOwoJfQoJZnVuY3Rpb24gR2V0QXV0aG9yKCkKCXsKCQlyZXR1cm4gJ3Rzdyc7Cgl9CglmdW5jdGlvbiBHZXRBdXRob3JFbWFpbCgpCgl7CgkJcmV0dXJuICd0YXR1Lndpa21hbiBbYXRdIGdtYWlsLmNvbSc7Cgl9CglmdW5jdGlvbiBHZXRDaGFuZ2VMb2coKQoJewoJCXJldHVybiBmaWxlX2dldF9jb250ZW50cyhkaXJuYW1lKF9fRklMRV9fKS4nL2NoYW5nZWxvZy5pbmMnKTsKCX0KCWZ1bmN0aW9uIElzUGx1Z2luTW9kdWxlKCkKCXsKCQlyZXR1cm4gdHJ1ZTsKCX0KCWZ1bmN0aW9uIEhhc0FkbWluKCkKCXsKCQlyZXR1cm4gdHJ1ZTsKCX0KICAvKglmdW5jdGlvbiBHZXRBZG1pblNlY3Rpb24oKQoJewoJCXJldHVybiAnRXh0ZW5zaW9ucyc7Cgl9Ki8KCWZ1bmN0aW9uIEdldEFkbWluRGVzY3JpcHRpb24oKQoJewoJCXJldHVybiAkdGhpcy0+TGFuZygnbW9kZGVzY3JpcHRpb24nKTsKCX0KCglmdW5jdGlvbiBWaXNpYmxlVG9BZG1pblVzZXIoKQoJewoJICByZXR1cm4gJHRoaXMtPkNoZWNrUGVybWlzc2lvbignVXNlIEdvb2dsZU1hcHMnKTsKCX0KCglmdW5jdGlvbiBHZXREZXBlbmRlbmNpZXMoKQoJewoJCXJldHVybiBhcnJheSgpOwoJfQoKCWZ1bmN0aW9uIE1pbmltdW1DTVNWZXJzaW9uKCkKCXsKCQlyZXR1cm4gIjEuMC1iZXRhNiI7Cgl9CgkKCQoJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCSAgIFNldFBhcmFtZXRlcnMoKQoJICAgVGhpcyBmdW5jdGlvbiBlbmFibGVzIHlvdSB0byBjcmVhdGUgbWFwcGluZ3MgZm9yCgkgICB5b3VyIG1vZHVsZSB3aGVuIHVzaW5nICJQcmV0dHkgVXJscyIuCgkgICAKCSAgIFR5cGljYWxseSwgbW9kdWxlcyBjcmVhdGUgaW50ZXJuYWwgbGlua3MgdGhhdCBoYXZlCgkgICBiaWcgdWdseSBzdHJpbmdzIGFsb25nIHRoZSBsaW5lcyBvZjoKCSAgIGluZGV4LnBocD9tYWN0PU1vZE5hbWUsY250bnQwMSxhY3Rpb25OYW1lLDAmY250bnQwMXBhcmFtMT0xJmNudG50MDFwYXJhbTI9MiZjbnRudDAxcmV0dXJuaWQ9MwoJICAgCgkgICBZb3UgbWlnaHQgcHJlZmVyIHRoZXNlIHRvIGxvb2sgbGlrZToKCSAgIC9Nb2R1bGVGdW5jdGlvbi8yLzMKCSAgIAoJICAgVG8gZG8gdGhpcywgeW91IGhhdmUgdG8gcmVnaXN0ZXIgcm91dGVzIGFuZCBtYXAKCSAgIHlvdXIgcGFyYW1ldGVycyBpbiBhIHdheSB0aGF0IHRoZSBBUEkgd2lsbCBiZSBhYmxlCgkgICB0byB1bmRlcnN0YW5kLgoKCSAgIEFsc28gbm90ZSB0aGF0IGFueSBjYWxscyB0byBDcmVhdGVMaW5rIHdpbGwgbmVlZCB0bwoJICAgYmUgdXBkYXRlZCB0byBwYXNzIHRoZSBwcmV0dHkgdXJsIHBhcmFtZXRlci4KCSAgIAoJICAgU2luY2UgdGhlIFNrZWxldG9uIGRvZXNuJ3QgcmVhbGx5IGNyZWF0ZSBhbnkgbGlua3MsCgkgICB0aGUgc2VjdGlvbiBiZWxvdyBpcyBjb21tZW50ZWQgb3V0LCBidXQgeW91IGNhbgoJICAgdXNlIGl0IHRvIGZpZ3VyZSBvdXQgcHJldHR5IHVybHMuCgkgICAKCSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCglmdW5jdGlvbiBTZXRQYXJhbWV0ZXJzKCkKCXsKCSAgJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignYm91bmRzX2Z1ZGdlJywgJycsICR0aGlzLT5sYW5nKCdoZWxwX3BhcmFtX2JvdW5kc19mdWRnZScpLCBmYWxzZSk7CgkgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ2NlbnRlcmxhdCcsICcnLCAkdGhpcy0+bGFuZygnaGVscF9wYXJhbV9jZW50ZXJsYXQnKSwgZmFsc2UpOwoJICAkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdjZW50ZXJsb24nLCAnJywgJHRoaXMtPmxhbmcoJ2hlbHBfcGFyYW1fY2VudGVybG9uJyksIGZhbHNlKTsKCSAgJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignY29udHJvbHMnLCAnJywgJHRoaXMtPmxhbmcoJ2hlbHBfcGFyYW1fY29udHJvbHMnKSwgZmFsc2UpOwoJICAkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdjb250cm9sc19zaXplJywgJycsICR0aGlzLT5sYW5nKCdoZWxwX3BhcmFtX2NvbnRyb2xzX3NpemUnKSwgZmFsc2UpOwoJICAkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdkaXJlY3Rpb25zJywgJycsICR0aGlzLT5sYW5nKCdoZWxwX3BhcmFtX2RpcmVjdGlvbnMnKSwgZmFsc2UpOwoJICAkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdoZWlnaHQnLCAnJywgJHRoaXMtPmxhbmcoJ2hlbHBfcGFyYW1faGVpZ2h0JyksIGZhbHNlKTsKCSAgJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignaW5mb190cmlnZ2VyJywgJycsICR0aGlzLT5sYW5nKCdoZWxwX3BhcmFtX2luZm9fdHJpZ2dlcicpLCBmYWxzZSk7CgkgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ2luZm9fd2luZG93JywgJycsICR0aGlzLT5sYW5nKCdoZWxwX3BhcmFtX2luZm9fd2luZG93JyksIGZhbHNlKTsKCSAgJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignbWFwJywgJ3Rlc3QnLCAkdGhpcy0+bGFuZygnaGVscF9wYXJhbV9tYXAnKSwgZmFsc2UpOwoJICAkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdsYW5ndWFnZScsICcnLCAkdGhpcy0+bGFuZygnaGVscF9wYXJhbV9sYW5ndWFnZScpLCBmYWxzZSk7CgkgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ3NjYWxlX2NvbnRyb2wnLCAnJywgJHRoaXMtPmxhbmcoJ2hlbHBfcGFyYW1fc2NhbGUnKSwgZmFsc2UpOwoJICAkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdzaWRlYmFyJywgJycsICR0aGlzLT5sYW5nKCdoZWxwX3BhcmFtX3NpZGViYXInKSwgZmFsc2UpOwoJICAkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCd0eXBlJywgJycsICR0aGlzLT5sYW5nKCdoZWxwX3BhcmFtX3R5cGUnKSwgZmFsc2UpOwoJICAkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCd0eXBlX2NvbnRyb2xzJywgJycsICR0aGlzLT5sYW5nKCdoZWxwX3BhcmFtX3R5cGVfY29udHJvbHMnKSwgZmFsc2UpOwoJICAkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCd3aWR0aCcsICcnLCAkdGhpcy0+bGFuZygnaGVscF9wYXJhbV93aWR0aCcpLCBmYWxzZSk7CgkgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ3pvb20nLCAnJywgJHRoaXMtPmxhbmcoJ2hlbHBfcGFyYW1fem9vbScpLCBmYWxzZSk7CgkgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ3pvb21fZW5jb21wYXNzJywgJycsICR0aGlzLT5sYW5nKCdoZWxwX3BhcmFtX3pvb21fZW5jb21wYXNzJyksIGZhbHNlKTsKCX0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldEV2ZW50RGVzY3JpcHRpb24oKQogICBJZiB5b3VyIG1vZHVsZSBjYW4gY3JlYXRlIGV2ZW50cywgeW91IHdpbGwgbmVlZAogICB0byBwcm92aWRlIHRoZSBBUEkgd2l0aCBkb2N1bWVudGF0aW9uIG9mIHdoYXQKICAgdGhhdCBldmVudCBkb2VzLiBUaGlzIG1ldGhvZCB3cmFwcyB1cCBhIHNpbXBsZQogICByZXR1cm4gb2YgdGhlIGxvY2FsaXplZCBkZXNjcmlwdGlvbi4KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICAvKiAgZnVuY3Rpb24gR2V0RXZlbnREZXNjcmlwdGlvbiAoICRldmVudG5hbWUgKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygnZXZlbnRfaW5mb18nLiRldmVudG5hbWUgKTsKICB9Ki8KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldEV2ZW50SGVscCgpCiAgIElmIHlvdXIgbW9kdWxlIGNhbiBjcmVhdGUgZXZlbnRzLCB5b3Ugd2lsbCBuZWVkCiAgIHRvIHByb3ZpZGUgdGhlIEFQSSB3aXRoIGRvY3VtZW50YXRpb24gb2YgaG93IHRvCiAgIHVzZSB0aGUgZXZlbnQuIFRoaXMgbWV0aG9kIHdyYXBzIHVwIGEgc2ltcGxlCiAgIHJldHVybiBvZiB0aGUgbG9jYWxpemVkIGRlc2NyaXB0aW9uLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIC8qICBmdW5jdGlvbiBHZXRFdmVudEhlbHAgKCAkZXZlbnRuYW1lICkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2V2ZW50X2hlbHBfJy4kZXZlbnRuYW1lICk7CiAgfSovCgoJCgoJZnVuY3Rpb24gSW5zdGFsbFBvc3RNZXNzYWdlKCkKCXsKCQlyZXR1cm4gJHRoaXMtPkxhbmcoJ3Bvc3RpbnN0YWxsJyk7Cgl9CglmdW5jdGlvbiBVbmluc3RhbGxQb3N0TWVzc2FnZSgpCgl7CgkJcmV0dXJuICR0aGlzLT5MYW5nKCdwb3N0dW5pbnN0YWxsJyk7Cgl9CglmdW5jdGlvbiBVbmluc3RhbGxQcmVNZXNzYWdlKCkKCXsKCQlyZXR1cm4gJHRoaXMtPkxhbmcoJ3JlYWxseV91bmluc3RhbGwnKTsKCX0KCQogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkgICBEaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAkbWVzc2FnZSkKCSAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCgoJICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgc2ltcGxlIG1ldGhvZCB0byBkaXNwbGF5CgkgICBlcnJvciBpbmZvcm1hdGlvbiBvbiB0aGUgYWRtaW4gc2lkZS4KCSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgICBmdW5jdGlvbiBEaXNwbGF5RXJyb3JQYWdlKCRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCwgJG1lc3NhZ2U9JycpCiAgICB7CgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9lcnJvcicsICR0aGlzLT5MYW5nKCdlcnJvcicpKTsKCQlpZiAoJG1lc3NhZ2UgIT0gJycpCgkJCXsKCQkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduX2J5X3JlZignbWVzc2FnZScsICRtZXNzYWdlKTsKCQkJfQoKICAgICAgICAvLyBEaXNwbGF5IHRoZSBwb3B1bGF0ZWQgdGVtcGxhdGUKICAgICAgICBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2Vycm9yLnRwbCcpOwogICAgfQoKCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkgICBEaXNwbGF5QWRtaW5OYXYoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsICRtZXNzYWdlKQoJICAgTk9UIFBBUlQgT0YgVEhFIE1PRFVMRSBBUEkKCgkgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBzaW1wbGUgbWV0aG9kIHRvIHByZXNlbnQgYQoJICAgY29tbW9uIGFkbWluIG1lbnUuCgkgICAJICAgCgkgICBJdCBzaW1wbHkgc2V0cyBhIGNvbGxlY3Rpb24gc21hcnR5IHRhZyB2YWx1ZXMuICAgCgkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgICBmdW5jdGlvbiBEaXNwbGF5QWRtaW5OYXYoJGlkLCAmJHBhcmFtcywgJHJldHVybmlkKQogICAgICAgIHsKCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2FkbWluX25hdicsCgkJCSR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcoJ3RpdGxlX21vZF9hZG1pbicpLCBhcnJheSgpKSAuCgkJCScgOiAnIC4KCQkJJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnYWRtaW5fcHJlZnMnLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nKCd0aXRsZV9tb2RfcHJlZnMnKSwgYXJyYXkoKSkpOwogICAgICAgIH0KCgoKICBmdW5jdGlvbiBQcmludE1hcFdpdGhNYXJrZXJzKCRtYXBuYW1lLCAkbWFya2VycykgewogICAgcmVxdWlyZV9vbmNlKCdsaWIvR29vZ2xlTWFwQVBJLScuJHRoaXMtPl9nb29nbGVhcGlfdmVyc2lvbi4nL0dvb2dsZU1hcEFQSS5jbGFzcy5waHAnKTsKICAgICRtYXAgPSBuZXcgR29vZ2xlTWFwQVBJKCRtYXBuYW1lLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgneWFob29hcHBpZCcsICcxMjM0JykpOwogICAgd2hpbGUgKCAkbWFya2VyID0gYXJyYXlfcG9wKCRtYXJrZXJzKSApIHsKICAgICAgJG1hcC0+YWRkTWFya2VyQnlDb29yZHMoJG1hcmtlclsnbGF0J10sJG1hcmtlclsnbG9uJ10sICRtYXJrZXJbJ25hbWUnXSwgJG1hcmtlclsnaW5mbyddKTsKICAgIH0KICB9CiAgCiAgZnVuY3Rpb24gR2V0QWRkcmVzc0xvY2F0aW9uKCRhZGRyZXNzKSB7CiAgICByZXF1aXJlX29uY2UoJ2xpYi9Hb29nbGVNYXBBUEktJy4kdGhpcy0+X2dvb2dsZWFwaV92ZXJzaW9uLicvR29vZ2xlTWFwQVBJLmNsYXNzLnBocCcpOwogICAgJG1hcCA9IG5ldyBHb29nbGVNYXBBUEkoJG1hcG5hbWUsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCd5YWhvb2FwcGlkJywgJzEyMzQnKSk7CiAgICAkZ2VvY29kZSA9ICRtYXAtPmdldEdlb2NvZGUoJGFkZHJlc3MpOwogICAgcmV0dXJuICRnZW9jb2RlOwogIH0KCn0KCj8+Cg==]]></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[PD9waHAKJGxhbmdbJ2VfYmFkYWRkcmVzcyddID0gJ1RoZSBhZGRyZXNzIHNwZWNpZmllZCB3YXMgaW52YWxpZCBvciBjb3VsZCBub3QgYmUgZm91bmQnOwokbGFuZ1snZnJpZW5kbHluYW1lJ10gPSAnR29vZ2xlTWFwcyc7CiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ1ByZXBhcmUgbXVsdGlwbGUgR29vZ2xlIG1hcHMsIG11bHRpcGxlIGNvb3JkaW5hdGVzIHdpdGggY3VzdG9tIG1hcmtlcnMuIEluY2x1ZGVzIEVhc3lMb2NhdG9yIHRvIHF1aWNrbHkgc2V0IGNvb3JkaW5hdGVzLic7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ1BsZWFzZSBwcm92aWRlIEdvb2dsZU1hcHMgQVBJIGtleSEgVXNpbmcgR29vZ2xlTWFwcyByZXF1aXJlcyAiVXNlIEdvb2dsZU1hcHMiIHJpZ2h0cyc7CiRsYW5nWydwb3N0dW5pbnN0YWxsJ10gPSAnQSBwaXR0eSB0byBub3RpY2UgeW91IHJlbW92ZWQgbW9kdWxlIEdvb2dsZU1hcHMuIEhvcGUgeW91IHdpbGwgdHJ5IGFuZCB1c2UgaXQgbGF0ZXIuPGJyIC8+CjxzdHJvbmc+RGlyZWN0b3J5IHVwbG9hZHMvR29vZ2xlTWFwcyBpcyBub3QgcmVtb3ZlZCE8L3N0cm9uZz4nOwokbGFuZ1sncmVhbGx5X3VuaW5zdGFsbCddID0gJ1JlYWxseSB1bmluc3RhbGwsIGFsbCBkYXRhIHdpbGwgYmUgbG9zdCc7CiRsYW5nWyd1bmluc3RhbGxlZCddID0gJ01vZHVsZSBVbmluc3RhbGxlZC4nOwokbGFuZ1snaW5zdGFsbGVkJ10gPSAnTW9kdWxlIHZlcnNpb24gJXMgaW5zdGFsbGVkLic7CiRsYW5nWydwcmVmc3VwZGF0ZWQnXSA9ICdNb2R1bGUgcHJlZmVyZW5jZXMgdXBkYXRlZC4nOwokbGFuZ1snYWNjZXNzZGVuaWVkJ10gPSAnQWNjZXNzIERlbmllZC4gUGxlYXNlIGNoZWNrIHlvdXIgcGVybWlzc2lvbnMuJzsKJGxhbmdbJ2Vycm9yJ10gPSAnRXJyb3IhJzsKJGxhbmdbJ3VwZ3JhZGVkJ10gPSAnTW9kdWxlIHVwZ3JhZGVkIHRvIHZlcnNpb24gJXMuJzsKCiRsYW5nWydhZGRyZXNzX2xvb2t1cCddID0gJ1NlYXJjaCBsb2NhdGlvbiBmb3IgYWRkcmVzcyc7CiRsYW5nWydhcGlrZXknXSA9ICdHb29nbGVNYXBzIGFwaWtleSc7CiRsYW5nWydlYXN5bG9jYXRvcmxhdCddID0gJ0xhdGl0dWRlIG9mIGNlbnRlciBtYXAnOwokbGFuZ1snZWFzeWxvY2F0b3JsZXZlbCddID0gJ0Vhc3kgTG9jYXRvciB6b29tIGxldmVsJzsKJGxhbmdbJ2Vhc3lsb2NhdG9ybG9uJ10gPSAnTG9uZ2l0dWRlIG9mIGNlbnRlciBtYXAnOwokbGFuZ1snZWFzeWxvY2F0b3JzYXZlbGFzdCddID0gJ1NhdmUgbGFzdCB1c2VkIHZhbHVlcyc7CiRsYW5nWydlYXN5bG9jYXRvcnNldHRpbmdzJ10gPSAnRWFzeSBMb2NhdG9yIHNldHRpbmdzLCB0byBiZSB1c2VkIHdoZW4gYWRkaW5nIG1hcC9tYXJrZXInOwokbGFuZ1snZWFzeWxvY2F0b3J0ZW1wbGF0ZSddID0gJ1RlbXBsYXRlIGZvciBtYXAgdG8gc2hvdyc7CiRsYW5nWydpcyddID0gJ2lzJzsKJGxhbmdbJ2xvY2F0aW9uX2ZvciddID0gJ0xvY2F0aW9uIGZvcic7CiRsYW5nWydsb29rdXBzZXJ2aWNlJ10gPSAnV2hpY2ggbG9va3VwIHNlcnZpY2UgdG8gdXNlJzsKJGxhbmdbJ21hcF9pZCddID0gJ01hcCBJRCc7CiRsYW5nWydtYXBzJ10gPSAnTWFwcyc7CiRsYW5nWydtYXJrZXJlcnJvciddID0gJ05vIG1hcmtlcnMgZm91bmQgaW4gZGlyZWN0b3J5IFwndXBsb2Fkcy9Hb29nbGVNYXBzL21hcmtlcnNcJyc7CiRsYW5nWydub2tleSddID0gJ0dvb2dsZU1hcHMgQVBJIGtleSBtaXNzaW5nIGluIGNvbmZpZ3VyYXRpb24nOwokbGFuZ1snbm9tYXAnXSA9ICdObyBtYXAgcHJvdmlkZWQnOwokbGFuZ1sncGF0aGVycm9yJ10gPSAnUGF0aCB0byBtYXJrZXIgZGlyZWN0b3J5IFwndXBsb2Fkcy9Hb29nbGVNYXBzL21hcmtlcnNcJyBkb2VzblwndCBleGlzdCc7CiRsYW5nWydxdWVyeV9hZGRyZXNzJ10gPSAnQWRkcmVzcyBsb29rdXAnOwokbGFuZ1snc2V0dGluZ3MnXSA9ICdTZXR0aW5ncyc7CiRsYW5nWydzZXR0aW5nc19zYXZlZCddID0gJ1NldHRpbmdzIHNhdmVkJzsKJGxhbmdbJ1N1Ym1pdCddID0gJ1N1Ym1pdCc7CiRsYW5nWyd0aXRsZV9hZG1pbl9wYW5lbCddID0gJ0dvb2dsZU1hcHMgTW9kdWxlJzsKJGxhbmdbJ3RpdGxlX21vZF9hZG1pbiddID0gJ01vZHVsZSBBZG1pbiBQYW5lbCc7CiRsYW5nWyd0aXRsZV9tb2RfcHJlZnMnXSA9ICdNb2R1bGUgUHJlZmVyZW5jZXMnOwokbGFuZ1sndXNlY2FjaGUnXSA9ICdVc2UgY2FjaGluZyBmb3IgZ2VvY29kZXMgKG5vdCB3b3JraW5nIHlldCknOwokbGFuZ1sndXNlbWFya2Vyc2hhZG93cyddID0gJ1VzZSBtYXJrZXIgc2hhZG93cz8nOwokbGFuZ1sneWFob29hcHBpZCddID0gJ0FwcGxpY2F0aW9uIElEIGZvciB5YWhvbyc7IAokbGFuZ1sneW91cm1hcHMnXSA9ICdZb3VyIE1hcHMnOwokbGFuZ1sneW91cm1hcmtlcnMnXSA9ICdZb3VyIE1hcmtlcnMnOwoKJGxhbmdbJ2hlbHAnXSA9ICcKPGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPlRoaXMgbW9kdWxlIGlzIGludGVudGVkIGZvciBpbnRlZ3JhdGluZyBHb29nbGVNYXBzIGFzIGEgcGFydCBvZiB5b3VyIHNpdGUuPC9wPgo8aDM+SG93IERvIEkgVXNlIEl0PC9oMz4KPHA+Rmlyc3QgeW91IG11c3QgaW5zZXJ0IHlvdXIgR29vZ2xlTWFwcyBhcGkga2V5IChwbGVhc2UgcmVnaXN0ZXIgaW4gaHR0cDovL3d3dy5nb29nbGUuY29tL2FwaXMvbWFwcy9zaWdudXAuaHRtbCkuPC9wPgo8cD5UaGVuIHlvdSBjYW4gY2FsbCB0aGlzIG1vZHVsZSBpbiB5b3VyIHRlbXBsYXRlIHdpdGgge2Ntc19tb2R1bGUgbW9kdWxlPVwnR29vZ2xlTWFwc1wnIG1hcD1cJ3Rlc3RcJ30gPC9wPgo8cD5Vc2VyIGRlZmluZWQgbWFya2VycyBjYW4gYmUgbG9hZGVkIGludG8gdXBsb2Fkcy9Hb29nbGVNYXBzL21hcmtlcnMuIFRoZSBjb25uZWN0ZWQgc2hhZG93IGltYWdlcyBzaG91bGQgYmUgbG9hZGVkIGluIAoJdXBsb2Fkcy9Hb29nbGVNYXBzL21hcmtlcnNoYWRvd3MuPGJyPgoJTmFtaW5nIGNvbnZlbnRpb24gaXMgW21hcmtlcmljb25dcy5wbmcgKGllLiBtYXJrZXIgaXMgYmlnYmx1ZS5wbmcsIG1hcmtlcnNoYWRvdyBpcyBiaWdibHVlcy5wbmcpLjxicj4KCUlmIGEgc2hhZG93IGlzIG5vdCBmb3VuZCwgdGhlIGRlZmF1bHQgdmVyc2lvbiB3aWxsIGJlIHVzZWQgKHdoaWNoIG1heSBub3QgYmUgdGhlIGNvcnJlY3Qgc2hhZG93IG9mIHRoZSBtYXJrZXIgYXQgYWxsKS48YnI+CglJbiB0aGUgc2V0dGluZ3MgdXNlIHRoZSBwcmVmZXJlbmNlIFwnVXNlIG1hcmtlciBzaGFkb3dzXCcgdG8gc2hvdy9oaWRlIHRoZW0uIFNob3dpbmcgdGhlIHNoYWRvd3Mgc2xvd3MgZG93biB0aGUgYnVpbGR1cCBvZiB0aGUKCW1hcCwgZHVlIHRvIG1vcmUgaW50ZXJuYWwgY2hlY2tzLjxicj4KCU9ubHkgaW1hZ2VzIHdpdGggZXh0ZW5zaW9uIC5wbmcgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQuPC9wPgo8cD5UaGlzIG1vZHVsZSBpcyBldmVuIG1vcmUgZmxleGlibGUgdGhyb3VnaCB0aGUgdXNhZ2Ugb2YgdGhlIHBhcmFtZXRlcnMgKHNlZSB0aGUgcGFyYW1ldGVyIGxpc3QpLiBFYWNoIHBhcmFtZXRlciBhcyBhdmFpbGFibGUgZHVyaW5nIHRoZSBwcmVwYXJhdGlvbiBvZiBhIG1hcCwgY2FuIGJlIAoJb3ZlcnJpZGVuIGZvciB0aGUgZnJvbnQgZW5kLiBTbyB5b3UgYXJlIGFibGUgdG8gcHJlcGFyZSBvbmUgbWFwIGFuZCBkaXNwbGF5IGl0IGluIHZhcmlvdXMgd2F5cyBieSB1c2luZyBvbmUgb3IgbW9yZSBwYXJhbWV0ZXJzLjwvcD4KPHA+SW4gdGhlIHNldHRpbmdzIHRhYiBpdCBpcyBwb3NzaWJsZSB0byBwcmVwYXJlIGEgbnVtYmVyIG9mIGRlZmF1bHQgc2V0dGluZ3MgZm9yIHdoYXQgaXMgY2FsbGVkIHRoZSA8c3Ryb25nPlwnRWFzeSBMb2NhdG9yXCc8L3N0cm9uZz4uIFdoZW4gYWRkaW5nIGEgbmV3IG1hcCwKYSBtYXAgaXMgc2hvd24gYmFzZWQgdXBvbiB0aGVzZSBkZWZhdWx0IHNldHRpbmdzLjxiciAvPgpXaGVuIGVkaXRpbmcgYSBtYXAgb3IgYSBtYXJrZXIsIHRoZSBzaG93biBtYXAgaXMgYWx3YXlzIGNlbnRlcmVkIGF0IHRoZSBjb29yZGluYXRlcyBzaG93biBqdXN0IGJlbG93IHRoZSBtYXAuPGJyIC8+CldoZW4geW91IGVkaXQgYSBtYXAsIHRoZSBtYXAgc2V0dGluZ3MgKGNlbnRlciBjb29yZGluYXRlcyBhbmQgem9vbSBsZXZlbCkgYXJlIHVzZWQgdG8gcHJlcGFyZSB0aGUgRWFzeSBMb2NhdG9yLjxiciAvPgpUdXJuaW5nIG9uIHRoZSBzZXR0aW5nIFwnU2F2ZSBsYXN0IHVzZWQgdmFsdWVzXCcsIHdpbGwgc2F2ZSB0aGUgY29vcmRpbmF0ZXMsIHpvb20gbGV2ZWwgd2hlbiB1c2VkIG9uIGEgbWFwLiBUaGUgbmV4dCB0aW1lIHlvdSBhZGQKYSBtYXAsIHRoZSBsYXN0IHNhdmVkIGNvb3JkaW5hdGVzIGFyZSB1c2VkIHRvIHNob3cgdGhlIEVhc3kgTG9jYXRvci4gTm90ZTogVGhpcyBzYXZpbmcgaXMgb25seSBkb25lIG9uIGVkaXRpbmcgYSBtYXAgb3IgbWFya2VyCih6b29tIGxldmVsIG5vdCBzYXZlZCB3aGVuIGVkaXRpbmcgYSBtYXJrZXIpLiA8YnIgLz4KSG93IGRvIEkgY2hhbmdlIHRoZSBzaG93biBtYXBzPyBCeSBjaGFuZ2luZyB0aGUgdGVtcGxhdGUgaW4gdGhlIHNldHRpbmdzIHRhYi4gSWYgeW91IGFyZSBub3QgZmFtaWxpYXIgd2l0aCBpbnRlcm5hbCBzZXR0aW5ncyBmb3IgYSBtYXAsIApsZWF2ZSB0aGUgdGVtcGxhdGUgYXMgaXQgaXMuIEVhc3kgY2hhbmdhYmxlIGFyZToKPHVsPgogPGxpPnRoZSB0eXBlIG9mIGN1cnNvcjogY2hhbmdlIHRoZSB2YWx1ZSBvZiBcJ2RyYWdnYWJsZUN1cnNvclwnIGZyb20gY3Jvc3NoYWlyIGludG86IGF1dG8sIGRlZmF1bHQsIGhlbHAsIG1vdmUsIHBvaW50ZXIsIHRleHQsIHdhaXQsCiAgaGFuZCwgcHJvZ3Jlc3Mgb3Igbm8uPC9saT4KIDxsaT50aGUgc2l6ZSBvZiB0aGUgbWFwOiBhdCB0aGUgYm90dG9tIHlvdSB3aWxsIGZpbmQgc3R5bGU9IndpZHRoOiA1MDBweDsgaGVpZ2h0OiAzMDBweCIuIENoYW5nZSB0aGUgd2lkdGggYW5kIGhlaWdodCB0byB0aGUgbnVtYmVyIG9mIHBpeGVscyB5b3Ugd2FudC48L2xpPgo8L3VsPgpBbGwgb3RoZXIgc2V0dGluZ3MgY2FuIGJlIG9idGFpbmVkIHZpYTogPGEgaHJlZj0iaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9pbnRsL2VuLVVTL2FwaXMvbWFwcy9kb2N1bWVudGF0aW9uLyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vaW50bC9lbi1VUy9hcGlzL21hcHMvZG9jdW1lbnRhdGlvbi88L2E+CjwvcD4KPGgzPlN1cHBvcnQ8L2gzPgo8cD5UaGlzIG1vZHVsZSBkb2VzIG5vdCBpbmNsdWRlIGNvbW1lcmNpYWwgc3VwcG9ydC4gSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlc291cmNlcyBhdmFpbGFibGUgdG8gaGVscCB5b3Ugd2l0aCBpdDo8YnI+Cjx1bD4KCTxsaT5UaGUgQ01TIE1hZGUgU2ltcGxlIGZvcnVtOzwvbGk+CjwvdWw+CjwvcD4KPHA+QXMgcGVyIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYXMtaXMuIFBsZWFzZSByZWFkIHRoZSB0ZXh0Cm9mIHRoZSBsaWNlbnNlIGZvciB0aGUgZnVsbCBkaXNjbGFpbWVyLjwvcD4KCjxoMz5TZWN1cml0eTwvaDM+CjxwPlVzZXIgbXVzdCBoYXZlICJVc2UgR29vZ2xlTWFwcyIgcGVybWlzc2lvbnMgc2V0IHRvIGVkaXQgbWFwczwvcD4KJzsKCi8vIHBhcmFtIGhlbHAKJGxhbmdbJ2hlbHBfcGFyYW1fYm91bmRzX2Z1ZGdlJ10gPSAnVGhpcyB3aWxsIGFkanVzdCBob3cgbXVjaCBtYXAgYm91bmRhcnkgZW5jb21wYXNzZXMgdGhlIG1hcCBtYXJrZXJzLic7CiRsYW5nWydoZWxwX3BhcmFtX2NlbnRlcmxhdCddID0gJ1RoZSBsYXRpdHVkZSB0byB3aGljaCB0aGUgbWFwIHNob3VsZCBiZSBjZW50ZXJlZC4nOwokbGFuZ1snaGVscF9wYXJhbV9jZW50ZXJsb24nXSA9ICdUaGUgbG9uZ2l0dWRlIHRvIHdoaWNoIHRoZSBtYXAgc2hvdWxkIGJlIGNlbnRlcmVkLic7CiRsYW5nWydoZWxwX3BhcmFtX2NvbnRyb2xzJ10gPSAnSWYgc2V0IHRvIDAgKHplcm8pLCB0aGVyZSB3aWxsIGJlIG5vIGNvbnRyb2xzIHRvIHpvb20vbW92ZSBhcm91bmQgdGhlIG1hcC4nOwokbGFuZ1snaGVscF9wYXJhbV9jb250cm9sc19zaXplJ10gPSAnVGhpcyBzZXRzIHRoZSBtYXAgY29udHJvbCBzaXplLiBSZWxldmFudCBvbmx5IGlmIG1hcCBjb250cm9scyBhcmUKZW5hYmxlZC4gbGFyZ2UgPSBtYXAgem9vbS9tb3ZlIHdpdGggc2xpZGVyLiBzbWFsbCA9IHpvb20vbW92ZSB3aXRob3V0IHNsaWRlci4gTGFyZ2UgaXMgZGVmYXVsdC4nOwokbGFuZ1snaGVscF9wYXJhbV9kaXJlY3Rpb25zJ10gPSAnVGhpcyBlbmFibGVzIG1hcCBkaXJlY3Rpb25zIGluIHRoZSBib3R0b20gb2YgdGhlIHBvcC11cCBpbmZvIHdpbmRvdy4gRGVmYXVsdCBpcyBkaXNhYmxlZC4KXCcxXCcgV2lsbCBlbmFibGUgdGhlIGRpcmVjdGlvbnMuJzsKJGxhbmdbJ2hlbHBfcGFyYW1faGVpZ2h0J10gPSAnU2V0cyB0aGUgaGVpZ2h0IG9mIHRoZSBtYXAgd2luZG93LiBUaGlzIGNhbiBiZSBlaXRoZXIgcHggb3IgJS4nOwokbGFuZ1snaGVscF9wYXJhbV9pbmZvX3RyaWdnZXInXSA9ICdUaGlzIHNldHMgdGhlIGluZm8gd2luZG93IHRyaWdnZXIgYmVoYXZpb3IuIGNsaWNrID0gaW5mbyB3aW5kb3cgY29tZXMgdXAKICAgICAgICB3aGVuIGNsaWNraW5nIG9uIGEgbWFya2VyLiBtb3VzZW92ZXIgPSBpbmZvIHdpbmRvdyBjb21lcyB1cCB3aGVuIG1vdXNpbmcgb3ZlciBhIG1hcmtlci4nOwokbGFuZ1snaGVscF9wYXJhbV9pbmZvX3dpbmRvdyddID0gJ0VuYWJsZXMgaW5mbyB3aW5kb3dzIG9uIG1hcCBtYXJrZXJzLic7CiRsYW5nWydoZWxwX3BhcmFtX2xhbmd1YWdlJ10gPSAnU2VlOiA8YSBocmVmPSJodHRwOi8vc3ByZWFkc2hlZXRzLmdvb2dsZS5jb20vcHViP2tleT1wOXBkd3NhaTJoRE1zTGtYc29NMDVLUSZnaWQ9MSIgdGFyZ2V0PSJfYmxhbmsiPgp0aGUgbGlzdCBvZiBsYW5ndWFnZXM8L2E+JzsKJGxhbmdbJ2hlbHBfcGFyYW1fbWFwJ10gPSAnU2V0IHdoaWNoIG1hcCB0byBzaG93JzsKJGxhbmdbJ2hlbHBfcGFyYW1fc2NhbGUnXSA9ICdVc2UgXCcxXCcgb3IgdHJ1ZSB0byBzaG93IHNjYWxlLic7CiRsYW5nWydoZWxwX3BhcmFtX3NpZGViYXInXSA9ICdVc2UgXCcxXCcgdG8gZW5hYmxlIHRoZSBtYXAgc2lkZWJhci4nOwokbGFuZ1snaGVscF9wYXJhbV90eXBlJ10gPSAnVGhpcyBzZXRzIHRoZSBkZWZhdWx0IG1hcCB0eXBlLiBSZWxldmFudCBvbmx5IGlmIG1hcCB0eXBlIGNvbnRyb2xzIGFyZSBlbmFibGVkLiAKCW1hcCA9IGRlZmF1bHQgbWFwLiBzYXRlbGxpdGUgPSBzYXRlbGxpdGUgdmlldy4gaHlicmlkID0gaHlicmlkIHZpZXcuIHRlcnJhaW4gPSBwaHlzaWNhbCB2aWV3IHdpdGggcm9hZHMnOwokbGFuZ1snaGVscF9wYXJhbV90eXBlX2NvbnRyb2xzJ10gPSAnVXNlIFwnMVwnIGVuYWJsZSB0aGUgbWFwIHR5cGUgY29udHJvbHMgKG1hcC9zYXRlbGxpdGUvaHlicmlkL3RlcnJhaW4pJzsKJGxhbmdbJ2hlbHBfcGFyYW1fd2lkdGgnXSA9ICdTZXRzIHRoZSB3aWR0aCBvZiB0aGUgbWFwIHdpbmRvdy4gVGhpcyBjYW4gYmUgZWl0aGVyIHB4IG9yICUuJzsKJGxhbmdbJ2hlbHBfcGFyYW1fem9vbSddID0gJ1RoaXMgc2V0cyB0aGUgbWFwIHpvb20gbGV2ZWwuJzsKJGxhbmdbJ2hlbHBfcGFyYW1fem9vbV9lbmNvbXBhc3MnXSA9ICdVc2UgXCcxXCcgdG8gZW5hYmxlIHRoZSB6b29tIGVuY29tcGFzcyBzbyBtYXAgem9vbSBpcyBhcyBzbWFsbCBhcyBwb3NzaWJsZQogICAgICAgIGFuZCBpbmNsdWRlIGFsbCBtYXAgbWFya2Vycy4nOwoKLy90YWJsZSBmaWVsZHMKJGxhbmdbJ3RfbmFtZSddID0gJ05hbWUnOwokbGFuZ1sndF9iZWxvbmdzX3RvJ10gPSAnQmVsb25ncyB0byBtYXAnOwokbGFuZ1sndF9kZXNjcmlwdGlvbiddID0gJ0Rlc2NyaXB0aW9uJzsKJGxhbmdbJ2NlbnRlcl9sYXQnXSA9ICdEZWZhdWx0IGNlbnRlciBsYXRpdHVkZSc7CiRsYW5nWydjZW50ZXJfbG9uJ10gPSAnRGVmYXVsdCBjZW50ZXIgbG9uZ2l0dWRlJzsKJGxhbmdbJ3RfdHlwZSddID0gJ0Rpc3BsYXkgdHlwZSc7CiRsYW5nWyd0X3dpZHRoJ10gPSAnV2lkdGgnOwokbGFuZ1sndF9oZWlnaHQnXSA9ICdIZWlnaHQnOwokbGFuZ1sndF9jb250cm9scyddID0gJ0VuYWJsZSBjb250cm9scyc7CiRsYW5nWyd0X2NvbnRyb2xzX3NpemUnXSA9ICdDb250cm9scyBzaXplJzsKJGxhbmdbJ3Rfc2lkZWJhciddID0gJ1NpZGViYXIgZm9yIG1hcmtlcnMnOwokbGFuZ1sndF90eXBlX2NvbnRyb2xzJ10gPSAnRGlzcGxheSB0eXBlIGNvbnRyb2xzIGVuYWJsZWQnOwokbGFuZ1sndF9kaXJlY3Rpb25zJ10gPSAnU2hvdyBkaXJlY3Rpb25zJzsKJGxhbmdbJ3Rfem9vbSddID0gJ1pvb20gbGV2ZWwnOwokbGFuZ1sndF96b29tX2VuY29tcGFzcyddID0gJ1RyeSB0byBmaXQgYWxsIG1hcmtlcnMnOwokbGFuZ1sndF96b29tc2Nyb2xsd2hlZWwnXSA9ICdBbGxvdyB3aGVlbCBzY3JvbGwgem9vbWluZyc7CiRsYW5nWyd0X3NjYWxlX2NvbnRyb2wnXSA9ICdTaG93IHNjYWxlJzsKJGxhbmdbJ3RfYm91bmRzX2Z1ZGdlJ10gPSAnQm91bmRzX2Z1ZGdlJzsKJGxhbmdbJ3RfaW5mb193aW5kb3cnXSA9ICdFbmFibGUgbWFya2VyIGluZm8gd2luZG93cyc7CiRsYW5nWyd0X2luZm9fdHJpZ2dlciddID0gJ0luZm8gd2luZG93IHRyaWdnZXInOwoKJGxhbmdbJ3RfaW5mbyddID0gJ01hcmtlciBpbmZvIChodG1sIGFsbG93ZWQpJzsKJGxhbmdbJ3RfbGFuJ10gPSAnTGF0aXR1ZGUnOwokbGFuZ1sndF9sb24nXSA9ICdMb25naXR1ZGUnOwokbGFuZ1sndF9pY29uJ10gPSAnTWFya2VyIGljb24nOwokbGFuZ1sndF9hZGRyZXNzJ10gPSAnTWFya2VyIGFkZHJlc3MnOwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/GoogleMapAPI-2.5/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/GoogleMapAPI-2.5/COPYING.lib</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[CQkgIEdOVSBMRVNTRVIgR0VORVJBTCBQVUJMSUMgTElDRU5TRQoJCSAgICAgICBWZXJzaW9uIDIuMSwgRmVicnVhcnkgMTk5OQoKIENvcHlyaWdodCAoQykgMTk5MSwgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICAgICA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgoKW1RoaXMgaXMgdGhlIGZpcnN0IHJlbGVhc2VkIHZlcnNpb24gb2YgdGhlIExlc3NlciBHUEwuICBJdCBhbHNvIGNvdW50cwogYXMgdGhlIHN1Y2Nlc3NvciBvZiB0aGUgR05VIExpYnJhcnkgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgaGVuY2UKIHRoZSB2ZXJzaW9uIG51bWJlciAyLjEuXQoKCQkJICAgIFByZWFtYmxlCgogIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKTGljZW5zZXMgYXJlIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZQpmcmVlIHNvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuCgogIFRoaXMgbGljZW5zZSwgdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIHNvbWUKc3BlY2lhbGx5IGRlc2lnbmF0ZWQgc29mdHdhcmUgcGFja2FnZXMtLXR5cGljYWxseSBsaWJyYXJpZXMtLW9mIHRoZQpGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIG90aGVyIGF1dGhvcnMgd2hvIGRlY2lkZSB0byB1c2UgaXQuICBZb3UKY2FuIHVzZSBpdCB0b28sIGJ1dCB3ZSBzdWdnZXN0IHlvdSBmaXJzdCB0aGluayBjYXJlZnVsbHkgYWJvdXQgd2hldGhlcgp0aGlzIGxpY2Vuc2Ugb3IgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgdGhlIGJldHRlcgpzdHJhdGVneSB0byB1c2UgaW4gYW55IHBhcnRpY3VsYXIgY2FzZSwgYmFzZWQgb24gdGhlIGV4cGxhbmF0aW9ucyBiZWxvdy4KCiAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20gb2YgdXNlLApub3QgcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0CnlvdSBoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UKZm9yIHRoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCk7IHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldAppdCBpZiB5b3Ugd2FudCBpdDsgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgYW5kIHVzZSBwaWVjZXMgb2YKaXQgaW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBhcmUgaW5mb3JtZWQgdGhhdCB5b3UgY2FuIGRvCnRoZXNlIHRoaW5ncy4KCiAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZApkaXN0cmlidXRvcnMgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZXNlCnJpZ2h0cy4gIFRoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvcgp5b3UgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBsaWJyYXJ5IG9yIGlmIHlvdSBtb2RpZnkgaXQuCgogIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnksIHdoZXRoZXIgZ3JhdGlzCm9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHdlIGdhdmUKeW91LiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlIHNvdXJjZQpjb2RlLiAgSWYgeW91IGxpbmsgb3RoZXIgY29kZSB3aXRoIHRoZSBsaWJyYXJ5LCB5b3UgbXVzdCBwcm92aWRlCmNvbXBsZXRlIG9iamVjdCBmaWxlcyB0byB0aGUgcmVjaXBpZW50cywgc28gdGhhdCB0aGV5IGNhbiByZWxpbmsgdGhlbQp3aXRoIHRoZSBsaWJyYXJ5IGFmdGVyIG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBsaWJyYXJ5IGFuZCByZWNvbXBpbGluZwppdC4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyIHJpZ2h0cy4KCiAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIGEgdHdvLXN0ZXAgbWV0aG9kOiAoMSkgd2UgY29weXJpZ2h0IHRoZQpsaWJyYXJ5LCBhbmQgKDIpIHdlIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2UsIHdoaWNoIGdpdmVzIHlvdSBsZWdhbApwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgbGlicmFyeS4KCiAgVG8gcHJvdGVjdCBlYWNoIGRpc3RyaWJ1dG9yLCB3ZSB3YW50IHRvIG1ha2UgaXQgdmVyeSBjbGVhciB0aGF0CnRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgZnJlZSBsaWJyYXJ5LiAgQWxzbywgaWYgdGhlIGxpYnJhcnkgaXMKbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHRoZSByZWNpcGllbnRzIHNob3VsZCBrbm93CnRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCB2ZXJzaW9uLCBzbyB0aGF0IHRoZSBvcmlnaW5hbAphdXRob3IncyByZXB1dGF0aW9uIHdpbGwgbm90IGJlIGFmZmVjdGVkIGJ5IHByb2JsZW1zIHRoYXQgbWlnaHQgYmUKaW50cm9kdWNlZCBieSBvdGhlcnMuCgwKICBGaW5hbGx5LCBzb2Z0d2FyZSBwYXRlbnRzIHBvc2UgYSBjb25zdGFudCB0aHJlYXQgdG8gdGhlIGV4aXN0ZW5jZSBvZgphbnkgZnJlZSBwcm9ncmFtLiAgV2Ugd2lzaCB0byBtYWtlIHN1cmUgdGhhdCBhIGNvbXBhbnkgY2Fubm90CmVmZmVjdGl2ZWx5IHJlc3RyaWN0IHRoZSB1c2VycyBvZiBhIGZyZWUgcHJvZ3JhbSBieSBvYnRhaW5pbmcgYQpyZXN0cmljdGl2ZSBsaWNlbnNlIGZyb20gYSBwYXRlbnQgaG9sZGVyLiAgVGhlcmVmb3JlLCB3ZSBpbnNpc3QgdGhhdAphbnkgcGF0ZW50IGxpY2Vuc2Ugb2J0YWluZWQgZm9yIGEgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBtdXN0IGJlCmNvbnNpc3RlbnQgd2l0aCB0aGUgZnVsbCBmcmVlZG9tIG9mIHVzZSBzcGVjaWZpZWQgaW4gdGhpcyBsaWNlbnNlLgoKICBNb3N0IEdOVSBzb2Z0d2FyZSwgaW5jbHVkaW5nIHNvbWUgbGlicmFyaWVzLCBpcyBjb3ZlcmVkIGJ5IHRoZQpvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgbGljZW5zZSwgdGhlIEdOVSBMZXNzZXIKR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXBwbGllcyB0byBjZXJ0YWluIGRlc2lnbmF0ZWQgbGlicmFyaWVzLCBhbmQKaXMgcXVpdGUgZGlmZmVyZW50IGZyb20gdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBXZSB1c2UKdGhpcyBsaWNlbnNlIGZvciBjZXJ0YWluIGxpYnJhcmllcyBpbiBvcmRlciB0byBwZXJtaXQgbGlua2luZyB0aG9zZQpsaWJyYXJpZXMgaW50byBub24tZnJlZSBwcm9ncmFtcy4KCiAgV2hlbiBhIHByb2dyYW0gaXMgbGlua2VkIHdpdGggYSBsaWJyYXJ5LCB3aGV0aGVyIHN0YXRpY2FsbHkgb3IgdXNpbmcKYSBzaGFyZWQgbGlicmFyeSwgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSB0d28gaXMgbGVnYWxseSBzcGVha2luZyBhCmNvbWJpbmVkIHdvcmssIGEgZGVyaXZhdGl2ZSBvZiB0aGUgb3JpZ2luYWwgbGlicmFyeS4gIFRoZSBvcmRpbmFyeQpHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHRoZXJlZm9yZSBwZXJtaXRzIHN1Y2ggbGlua2luZyBvbmx5IGlmIHRoZQplbnRpcmUgY29tYmluYXRpb24gZml0cyBpdHMgY3JpdGVyaWEgb2YgZnJlZWRvbS4gIFRoZSBMZXNzZXIgR2VuZXJhbApQdWJsaWMgTGljZW5zZSBwZXJtaXRzIG1vcmUgbGF4IGNyaXRlcmlhIGZvciBsaW5raW5nIG90aGVyIGNvZGUgd2l0aAp0aGUgbGlicmFyeS4KCiAgV2UgY2FsbCB0aGlzIGxpY2Vuc2UgdGhlICJMZXNzZXIiIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYmVjYXVzZSBpdApkb2VzIExlc3MgdG8gcHJvdGVjdCB0aGUgdXNlcidzIGZyZWVkb20gdGhhbiB0aGUgb3JkaW5hcnkgR2VuZXJhbApQdWJsaWMgTGljZW5zZS4gIEl0IGFsc28gcHJvdmlkZXMgb3RoZXIgZnJlZSBzb2Z0d2FyZSBkZXZlbG9wZXJzIExlc3MKb2YgYW4gYWR2YW50YWdlIG92ZXIgY29tcGV0aW5nIG5vbi1mcmVlIHByb2dyYW1zLiAgVGhlc2UgZGlzYWR2YW50YWdlcwphcmUgdGhlIHJlYXNvbiB3ZSB1c2UgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1hbnkKbGlicmFyaWVzLiAgSG93ZXZlciwgdGhlIExlc3NlciBsaWNlbnNlIHByb3ZpZGVzIGFkdmFudGFnZXMgaW4gY2VydGFpbgpzcGVjaWFsIGNpcmN1bXN0YW5jZXMuCgogIEZvciBleGFtcGxlLCBvbiByYXJlIG9jY2FzaW9ucywgdGhlcmUgbWF5IGJlIGEgc3BlY2lhbCBuZWVkIHRvCmVuY291cmFnZSB0aGUgd2lkZXN0IHBvc3NpYmxlIHVzZSBvZiBhIGNlcnRhaW4gbGlicmFyeSwgc28gdGhhdCBpdCBiZWNvbWVzCmEgZGUtZmFjdG8gc3RhbmRhcmQuICBUbyBhY2hpZXZlIHRoaXMsIG5vbi1mcmVlIHByb2dyYW1zIG11c3QgYmUKYWxsb3dlZCB0byB1c2UgdGhlIGxpYnJhcnkuICBBIG1vcmUgZnJlcXVlbnQgY2FzZSBpcyB0aGF0IGEgZnJlZQpsaWJyYXJ5IGRvZXMgdGhlIHNhbWUgam9iIGFzIHdpZGVseSB1c2VkIG5vbi1mcmVlIGxpYnJhcmllcy4gIEluIHRoaXMKY2FzZSwgdGhlcmUgaXMgbGl0dGxlIHRvIGdhaW4gYnkgbGltaXRpbmcgdGhlIGZyZWUgbGlicmFyeSB0byBmcmVlCnNvZnR3YXJlIG9ubHksIHNvIHdlIHVzZSB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCgogIEluIG90aGVyIGNhc2VzLCBwZXJtaXNzaW9uIHRvIHVzZSBhIHBhcnRpY3VsYXIgbGlicmFyeSBpbiBub24tZnJlZQpwcm9ncmFtcyBlbmFibGVzIGEgZ3JlYXRlciBudW1iZXIgb2YgcGVvcGxlIHRvIHVzZSBhIGxhcmdlIGJvZHkgb2YKZnJlZSBzb2Z0d2FyZS4gIEZvciBleGFtcGxlLCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgR05VIEMgTGlicmFyeSBpbgpub24tZnJlZSBwcm9ncmFtcyBlbmFibGVzIG1hbnkgbW9yZSBwZW9wbGUgdG8gdXNlIHRoZSB3aG9sZSBHTlUKb3BlcmF0aW5nIHN5c3RlbSwgYXMgd2VsbCBhcyBpdHMgdmFyaWFudCwgdGhlIEdOVS9MaW51eCBvcGVyYXRpbmcKc3lzdGVtLgoKICBBbHRob3VnaCB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgTGVzcyBwcm90ZWN0aXZlIG9mIHRoZQp1c2VycycgZnJlZWRvbSwgaXQgZG9lcyBlbnN1cmUgdGhhdCB0aGUgdXNlciBvZiBhIHByb2dyYW0gdGhhdCBpcwpsaW5rZWQgd2l0aCB0aGUgTGlicmFyeSBoYXMgdGhlIGZyZWVkb20gYW5kIHRoZSB3aGVyZXdpdGhhbCB0byBydW4KdGhhdCBwcm9ncmFtIHVzaW5nIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgTGlicmFyeS4KCiAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKbW9kaWZpY2F0aW9uIGZvbGxvdy4gIFBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhCiJ3b3JrIGJhc2VkIG9uIHRoZSBsaWJyYXJ5IiBhbmQgYSAid29yayB0aGF0IHVzZXMgdGhlIGxpYnJhcnkiLiAgVGhlCmZvcm1lciBjb250YWlucyBjb2RlIGRlcml2ZWQgZnJvbSB0aGUgbGlicmFyeSwgd2hlcmVhcyB0aGUgbGF0dGVyIG11c3QKYmUgY29tYmluZWQgd2l0aCB0aGUgbGlicmFyeSBpbiBvcmRlciB0byBydW4uCgwKCQkgIEdOVSBMRVNTRVIgR0VORVJBTCBQVUJMSUMgTElDRU5TRQogICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KCiAgMC4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBhcHBsaWVzIHRvIGFueSBzb2Z0d2FyZSBsaWJyYXJ5IG9yIG90aGVyCnByb2dyYW0gd2hpY2ggY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9yCm90aGVyIGF1dGhvcml6ZWQgcGFydHkgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YKdGhpcyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoYWxzbyBjYWxsZWQgInRoaXMgTGljZW5zZSIpLgpFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KCiAgQSAibGlicmFyeSIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIHNvZnR3YXJlIGZ1bmN0aW9ucyBhbmQvb3IgZGF0YQpwcmVwYXJlZCBzbyBhcyB0byBiZSBjb252ZW5pZW50bHkgbGlua2VkIHdpdGggYXBwbGljYXRpb24gcHJvZ3JhbXMKKHdoaWNoIHVzZSBzb21lIG9mIHRob3NlIGZ1bmN0aW9ucyBhbmQgZGF0YSkgdG8gZm9ybSBleGVjdXRhYmxlcy4KCiAgVGhlICJMaWJyYXJ5IiwgYmVsb3csIHJlZmVycyB0byBhbnkgc3VjaCBzb2Z0d2FyZSBsaWJyYXJ5IG9yIHdvcmsKd2hpY2ggaGFzIGJlZW4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlc2UgdGVybXMuICBBICJ3b3JrIGJhc2VkIG9uIHRoZQpMaWJyYXJ5IiBtZWFucyBlaXRoZXIgdGhlIExpYnJhcnkgb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlcgpjb3B5cmlnaHQgbGF3OiB0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIExpYnJhcnkgb3IgYQpwb3J0aW9uIG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkCnN0cmFpZ2h0Zm9yd2FyZGx5IGludG8gYW5vdGhlciBsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMKaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluIHRoZSB0ZXJtICJtb2RpZmljYXRpb24iLikKCiAgIlNvdXJjZSBjb2RlIiBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYSBsaWJyYXJ5LCBjb21wbGV0ZSBzb3VyY2UgY29kZSBtZWFucwphbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZAppbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24KYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgbGlicmFyeS4KCiAgQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgpydW5uaW5nIGEgcHJvZ3JhbSB1c2luZyB0aGUgTGlicmFyeSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIG91dHB1dCBmcm9tCnN1Y2ggYSBwcm9ncmFtIGlzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQKb24gdGhlIExpYnJhcnkgKGluZGVwZW5kZW50IG9mIHRoZSB1c2Ugb2YgdGhlIExpYnJhcnkgaW4gYSB0b29sIGZvcgp3cml0aW5nIGl0KS4gIFdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgTGlicmFyeSBkb2VzCmFuZCB3aGF0IHRoZSBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgTGlicmFyeSBkb2VzLgogIAogIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIExpYnJhcnkncwpjb21wbGV0ZSBzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdAp5b3UgY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbgphcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdAphbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueQp3YXJyYW50eTsgYW5kIGRpc3RyaWJ1dGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZQpMaWJyYXJ5LgoKICBZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LAphbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhCmZlZS4KDAogIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIExpYnJhcnkgb3IgYW55IHBvcnRpb24Kb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBjb3B5IGFuZApkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKCiAgICBhKSBUaGUgbW9kaWZpZWQgd29yayBtdXN0IGl0c2VsZiBiZSBhIHNvZnR3YXJlIGxpYnJhcnkuCgogICAgYikgWW91IG11c3QgY2F1c2UgdGhlIGZpbGVzIG1vZGlmaWVkIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCiAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgoKICAgIGMpIFlvdSBtdXN0IGNhdXNlIHRoZSB3aG9sZSBvZiB0aGUgd29yayB0byBiZSBsaWNlbnNlZCBhdCBubwogICAgY2hhcmdlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCgogICAgZCkgSWYgYSBmYWNpbGl0eSBpbiB0aGUgbW9kaWZpZWQgTGlicmFyeSByZWZlcnMgdG8gYSBmdW5jdGlvbiBvciBhCiAgICB0YWJsZSBvZiBkYXRhIHRvIGJlIHN1cHBsaWVkIGJ5IGFuIGFwcGxpY2F0aW9uIHByb2dyYW0gdGhhdCB1c2VzCiAgICB0aGUgZmFjaWxpdHksIG90aGVyIHRoYW4gYXMgYW4gYXJndW1lbnQgcGFzc2VkIHdoZW4gdGhlIGZhY2lsaXR5CiAgICBpcyBpbnZva2VkLCB0aGVuIHlvdSBtdXN0IG1ha2UgYSBnb29kIGZhaXRoIGVmZm9ydCB0byBlbnN1cmUgdGhhdCwKICAgIGluIHRoZSBldmVudCBhbiBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgc3VjaCBmdW5jdGlvbiBvcgogICAgdGFibGUsIHRoZSBmYWNpbGl0eSBzdGlsbCBvcGVyYXRlcywgYW5kIHBlcmZvcm1zIHdoYXRldmVyIHBhcnQgb2YKICAgIGl0cyBwdXJwb3NlIHJlbWFpbnMgbWVhbmluZ2Z1bC4KCiAgICAoRm9yIGV4YW1wbGUsIGEgZnVuY3Rpb24gaW4gYSBsaWJyYXJ5IHRvIGNvbXB1dGUgc3F1YXJlIHJvb3RzIGhhcwogICAgYSBwdXJwb3NlIHRoYXQgaXMgZW50aXJlbHkgd2VsbC1kZWZpbmVkIGluZGVwZW5kZW50IG9mIHRoZQogICAgYXBwbGljYXRpb24uICBUaGVyZWZvcmUsIFN1YnNlY3Rpb24gMmQgcmVxdWlyZXMgdGhhdCBhbnkKICAgIGFwcGxpY2F0aW9uLXN1cHBsaWVkIGZ1bmN0aW9uIG9yIHRhYmxlIHVzZWQgYnkgdGhpcyBmdW5jdGlvbiBtdXN0CiAgICBiZSBvcHRpb25hbDogaWYgdGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBpdCwgdGhlIHNxdWFyZQogICAgcm9vdCBmdW5jdGlvbiBtdXN0IHN0aWxsIGNvbXB1dGUgc3F1YXJlIHJvb3RzLikKClRoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKaWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgTGlicmFyeSwKYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCnRoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CmRpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZApvbiB0aGUgTGlicmFyeSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKdGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlCml0LgoKVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0CnlvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bwpleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgTGlicmFyeS4KCkluIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIExpYnJhcnkKd2l0aCB0aGUgTGlicmFyeSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkpIG9uIGEgdm9sdW1lIG9mCmEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCnRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCgogIDMuIFlvdSBtYXkgb3B0IHRvIGFwcGx5IHRoZSB0ZXJtcyBvZiB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljCkxpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UgdG8gYSBnaXZlbiBjb3B5IG9mIHRoZSBMaWJyYXJ5LiAgVG8gZG8KdGhpcywgeW91IG11c3QgYWx0ZXIgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlLCBzbwp0aGF0IHRoZXkgcmVmZXIgdG8gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsCmluc3RlYWQgb2YgdG8gdGhpcyBMaWNlbnNlLiAgKElmIGEgbmV3ZXIgdmVyc2lvbiB0aGFuIHZlcnNpb24gMiBvZiB0aGUKb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaGFzIGFwcGVhcmVkLCB0aGVuIHlvdSBjYW4gc3BlY2lmeQp0aGF0IHZlcnNpb24gaW5zdGVhZCBpZiB5b3Ugd2lzaC4pICBEbyBub3QgbWFrZSBhbnkgb3RoZXIgY2hhbmdlIGluCnRoZXNlIG5vdGljZXMuCgwKICBPbmNlIHRoaXMgY2hhbmdlIGlzIG1hZGUgaW4gYSBnaXZlbiBjb3B5LCBpdCBpcyBpcnJldmVyc2libGUgZm9yCnRoYXQgY29weSwgc28gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gYWxsCnN1YnNlcXVlbnQgY29waWVzIGFuZCBkZXJpdmF0aXZlIHdvcmtzIG1hZGUgZnJvbSB0aGF0IGNvcHkuCgogIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCB3aGVuIHlvdSB3aXNoIHRvIGNvcHkgcGFydCBvZiB0aGUgY29kZSBvZgp0aGUgTGlicmFyeSBpbnRvIGEgcHJvZ3JhbSB0aGF0IGlzIG5vdCBhIGxpYnJhcnkuCgogIDQuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSAob3IgYSBwb3J0aW9uIG9yCmRlcml2YXRpdmUgb2YgaXQsIHVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtCnVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFjY29tcGFueQppdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUsIHdoaWNoCm11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYQptZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2UuCgogIElmIGRpc3RyaWJ1dGlvbiBvZiBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5CmZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlCnNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2Ugc2F0aXNmaWVzIHRoZSByZXF1aXJlbWVudCB0bwpkaXN0cmlidXRlIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90CmNvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCgogIDUuIEEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIG5vIGRlcml2YXRpdmUgb2YgYW55IHBvcnRpb24gb2YgdGhlCkxpYnJhcnksIGJ1dCBpcyBkZXNpZ25lZCB0byB3b3JrIHdpdGggdGhlIExpYnJhcnkgYnkgYmVpbmcgY29tcGlsZWQgb3IKbGlua2VkIHdpdGggaXQsIGlzIGNhbGxlZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIuICBTdWNoIGEKd29yaywgaW4gaXNvbGF0aW9uLCBpcyBub3QgYSBkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnksIGFuZAp0aGVyZWZvcmUgZmFsbHMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgoKICBIb3dldmVyLCBsaW5raW5nIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5CmNyZWF0ZXMgYW4gZXhlY3V0YWJsZSB0aGF0IGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSAoYmVjYXVzZSBpdApjb250YWlucyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSksIHJhdGhlciB0aGFuIGEgIndvcmsgdGhhdCB1c2VzIHRoZQpsaWJyYXJ5Ii4gIFRoZSBleGVjdXRhYmxlIGlzIHRoZXJlZm9yZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KU2VjdGlvbiA2IHN0YXRlcyB0ZXJtcyBmb3IgZGlzdHJpYnV0aW9uIG9mIHN1Y2ggZXhlY3V0YWJsZXMuCgogIFdoZW4gYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHVzZXMgbWF0ZXJpYWwgZnJvbSBhIGhlYWRlciBmaWxlCnRoYXQgaXMgcGFydCBvZiB0aGUgTGlicmFyeSwgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayBtYXkgYmUgYQpkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnkgZXZlbiB0aG91Z2ggdGhlIHNvdXJjZSBjb2RlIGlzIG5vdC4KV2hldGhlciB0aGlzIGlzIHRydWUgaXMgZXNwZWNpYWxseSBzaWduaWZpY2FudCBpZiB0aGUgd29yayBjYW4gYmUKbGlua2VkIHdpdGhvdXQgdGhlIExpYnJhcnksIG9yIGlmIHRoZSB3b3JrIGlzIGl0c2VsZiBhIGxpYnJhcnkuICBUaGUKdGhyZXNob2xkIGZvciB0aGlzIHRvIGJlIHRydWUgaXMgbm90IHByZWNpc2VseSBkZWZpbmVkIGJ5IGxhdy4KCiAgSWYgc3VjaCBhbiBvYmplY3QgZmlsZSB1c2VzIG9ubHkgbnVtZXJpY2FsIHBhcmFtZXRlcnMsIGRhdGEKc3RydWN0dXJlIGxheW91dHMgYW5kIGFjY2Vzc29ycywgYW5kIHNtYWxsIG1hY3JvcyBhbmQgc21hbGwgaW5saW5lCmZ1bmN0aW9ucyAodGVuIGxpbmVzIG9yIGxlc3MgaW4gbGVuZ3RoKSwgdGhlbiB0aGUgdXNlIG9mIHRoZSBvYmplY3QKZmlsZSBpcyB1bnJlc3RyaWN0ZWQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBpcyBsZWdhbGx5IGEgZGVyaXZhdGl2ZQp3b3JrLiAgKEV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhpcyBvYmplY3QgY29kZSBwbHVzIHBvcnRpb25zIG9mIHRoZQpMaWJyYXJ5IHdpbGwgc3RpbGwgZmFsbCB1bmRlciBTZWN0aW9uIDYuKQoKICBPdGhlcndpc2UsIGlmIHRoZSB3b3JrIGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSwgeW91IG1heQpkaXN0cmlidXRlIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gNi4KQW55IGV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhhdCB3b3JrIGFsc28gZmFsbCB1bmRlciBTZWN0aW9uIDYsCndoZXRoZXIgb3Igbm90IHRoZXkgYXJlIGxpbmtlZCBkaXJlY3RseSB3aXRoIHRoZSBMaWJyYXJ5IGl0c2VsZi4KDAogIDYuIEFzIGFuIGV4Y2VwdGlvbiB0byB0aGUgU2VjdGlvbnMgYWJvdmUsIHlvdSBtYXkgYWxzbyBjb21iaW5lIG9yCmxpbmsgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkgdG8gcHJvZHVjZSBhCndvcmsgY29udGFpbmluZyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSwgYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCnVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBwcm92aWRlZCB0aGF0IHRoZSB0ZXJtcyBwZXJtaXQKbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGZvciB0aGUgY3VzdG9tZXIncyBvd24gdXNlIGFuZCByZXZlcnNlCmVuZ2luZWVyaW5nIGZvciBkZWJ1Z2dpbmcgc3VjaCBtb2RpZmljYXRpb25zLgoKICBZb3UgbXVzdCBnaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCBlYWNoIGNvcHkgb2YgdGhlIHdvcmsgdGhhdCB0aGUKTGlicmFyeSBpcyB1c2VkIGluIGl0IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZSBjb3ZlcmVkIGJ5CnRoaXMgTGljZW5zZS4gIFlvdSBtdXN0IHN1cHBseSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAgSWYgdGhlIHdvcmsKZHVyaW5nIGV4ZWN1dGlvbiBkaXNwbGF5cyBjb3B5cmlnaHQgbm90aWNlcywgeW91IG11c3QgaW5jbHVkZSB0aGUKY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIExpYnJhcnkgYW1vbmcgdGhlbSwgYXMgd2VsbCBhcyBhIHJlZmVyZW5jZQpkaXJlY3RpbmcgdGhlIHVzZXIgdG8gdGhlIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAgQWxzbywgeW91IG11c3QgZG8gb25lCm9mIHRoZXNlIHRoaW5nczoKCiAgICBhKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZwogICAgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSBmb3IgdGhlIExpYnJhcnkgaW5jbHVkaW5nIHdoYXRldmVyCiAgICBjaGFuZ2VzIHdlcmUgdXNlZCBpbiB0aGUgd29yayAod2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlcgogICAgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSk7IGFuZCwgaWYgdGhlIHdvcmsgaXMgYW4gZXhlY3V0YWJsZSBsaW5rZWQKICAgIHdpdGggdGhlIExpYnJhcnksIHdpdGggdGhlIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgIndvcmsgdGhhdAogICAgdXNlcyB0aGUgTGlicmFyeSIsIGFzIG9iamVjdCBjb2RlIGFuZC9vciBzb3VyY2UgY29kZSwgc28gdGhhdCB0aGUKICAgIHVzZXIgY2FuIG1vZGlmeSB0aGUgTGlicmFyeSBhbmQgdGhlbiByZWxpbmsgdG8gcHJvZHVjZSBhIG1vZGlmaWVkCiAgICBleGVjdXRhYmxlIGNvbnRhaW5pbmcgdGhlIG1vZGlmaWVkIExpYnJhcnkuICAoSXQgaXMgdW5kZXJzdG9vZAogICAgdGhhdCB0aGUgdXNlciB3aG8gY2hhbmdlcyB0aGUgY29udGVudHMgb2YgZGVmaW5pdGlvbnMgZmlsZXMgaW4gdGhlCiAgICBMaWJyYXJ5IHdpbGwgbm90IG5lY2Vzc2FyaWx5IGJlIGFibGUgdG8gcmVjb21waWxlIHRoZSBhcHBsaWNhdGlvbgogICAgdG8gdXNlIHRoZSBtb2RpZmllZCBkZWZpbml0aW9ucy4pCgogICAgYikgVXNlIGEgc3VpdGFibGUgc2hhcmVkIGxpYnJhcnkgbWVjaGFuaXNtIGZvciBsaW5raW5nIHdpdGggdGhlCiAgICBMaWJyYXJ5LiAgQSBzdWl0YWJsZSBtZWNoYW5pc20gaXMgb25lIHRoYXQgKDEpIHVzZXMgYXQgcnVuIHRpbWUgYQogICAgY29weSBvZiB0aGUgbGlicmFyeSBhbHJlYWR5IHByZXNlbnQgb24gdGhlIHVzZXIncyBjb21wdXRlciBzeXN0ZW0sCiAgICByYXRoZXIgdGhhbiBjb3B5aW5nIGxpYnJhcnkgZnVuY3Rpb25zIGludG8gdGhlIGV4ZWN1dGFibGUsIGFuZCAoMikKICAgIHdpbGwgb3BlcmF0ZSBwcm9wZXJseSB3aXRoIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgaWYKICAgIHRoZSB1c2VyIGluc3RhbGxzIG9uZSwgYXMgbG9uZyBhcyB0aGUgbW9kaWZpZWQgdmVyc2lvbiBpcwogICAgaW50ZXJmYWNlLWNvbXBhdGlibGUgd2l0aCB0aGUgdmVyc2lvbiB0aGF0IHRoZSB3b3JrIHdhcyBtYWRlIHdpdGguCgogICAgYykgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQKICAgIGxlYXN0IHRocmVlIHllYXJzLCB0byBnaXZlIHRoZSBzYW1lIHVzZXIgdGhlIG1hdGVyaWFscwogICAgc3BlY2lmaWVkIGluIFN1YnNlY3Rpb24gNmEsIGFib3ZlLCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZQogICAgdGhhbiB0aGUgY29zdCBvZiBwZXJmb3JtaW5nIHRoaXMgZGlzdHJpYnV0aW9uLgoKICAgIGQpIElmIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5CiAgICBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgb2ZmZXIgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUgYWJvdmUKICAgIHNwZWNpZmllZCBtYXRlcmlhbHMgZnJvbSB0aGUgc2FtZSBwbGFjZS4KCiAgICBlKSBWZXJpZnkgdGhhdCB0aGUgdXNlciBoYXMgYWxyZWFkeSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlc2UKICAgIG1hdGVyaWFscyBvciB0aGF0IHlvdSBoYXZlIGFscmVhZHkgc2VudCB0aGlzIHVzZXIgYSBjb3B5LgoKICBGb3IgYW4gZXhlY3V0YWJsZSwgdGhlIHJlcXVpcmVkIGZvcm0gb2YgdGhlICJ3b3JrIHRoYXQgdXNlcyB0aGUKTGlicmFyeSIgbXVzdCBpbmNsdWRlIGFueSBkYXRhIGFuZCB1dGlsaXR5IHByb2dyYW1zIG5lZWRlZCBmb3IKcmVwcm9kdWNpbmcgdGhlIGV4ZWN1dGFibGUgZnJvbSBpdC4gIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sCnRoZSBtYXRlcmlhbHMgdG8gYmUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IGlzCm5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeSBmb3JtKSB3aXRoIHRoZSBtYWpvcgpjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9uCndoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudCBpdHNlbGYgYWNjb21wYW5pZXMKdGhlIGV4ZWN1dGFibGUuCgogIEl0IG1heSBoYXBwZW4gdGhhdCB0aGlzIHJlcXVpcmVtZW50IGNvbnRyYWRpY3RzIHRoZSBsaWNlbnNlCnJlc3RyaWN0aW9ucyBvZiBvdGhlciBwcm9wcmlldGFyeSBsaWJyYXJpZXMgdGhhdCBkbyBub3Qgbm9ybWFsbHkKYWNjb21wYW55IHRoZSBvcGVyYXRpbmcgc3lzdGVtLiAgU3VjaCBhIGNvbnRyYWRpY3Rpb24gbWVhbnMgeW91IGNhbm5vdAp1c2UgYm90aCB0aGVtIGFuZCB0aGUgTGlicmFyeSB0b2dldGhlciBpbiBhbiBleGVjdXRhYmxlIHRoYXQgeW91CmRpc3RyaWJ1dGUuCgwKICA3LiBZb3UgbWF5IHBsYWNlIGxpYnJhcnkgZmFjaWxpdGllcyB0aGF0IGFyZSBhIHdvcmsgYmFzZWQgb24gdGhlCkxpYnJhcnkgc2lkZS1ieS1zaWRlIGluIGEgc2luZ2xlIGxpYnJhcnkgdG9nZXRoZXIgd2l0aCBvdGhlciBsaWJyYXJ5CmZhY2lsaXRpZXMgbm90IGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSBzdWNoIGEgY29tYmluZWQKbGlicmFyeSwgcHJvdmlkZWQgdGhhdCB0aGUgc2VwYXJhdGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGJhc2VkIG9uCnRoZSBMaWJyYXJ5IGFuZCBvZiB0aGUgb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzIGlzIG90aGVyd2lzZQpwZXJtaXR0ZWQsIGFuZCBwcm92aWRlZCB0aGF0IHlvdSBkbyB0aGVzZSB0d28gdGhpbmdzOgoKICAgIGEpIEFjY29tcGFueSB0aGUgY29tYmluZWQgbGlicmFyeSB3aXRoIGEgY29weSBvZiB0aGUgc2FtZSB3b3JrCiAgICBiYXNlZCBvbiB0aGUgTGlicmFyeSwgdW5jb21iaW5lZCB3aXRoIGFueSBvdGhlciBsaWJyYXJ5CiAgICBmYWNpbGl0aWVzLiAgVGhpcyBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKICAgIFNlY3Rpb25zIGFib3ZlLgoKICAgIGIpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIHRoZSBjb21iaW5lZCBsaWJyYXJ5IG9mIHRoZSBmYWN0CiAgICB0aGF0IHBhcnQgb2YgaXQgaXMgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgZXhwbGFpbmluZwogICAgd2hlcmUgdG8gZmluZCB0aGUgYWNjb21wYW55aW5nIHVuY29tYmluZWQgZm9ybSBvZiB0aGUgc2FtZSB3b3JrLgoKICA4LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IgZGlzdHJpYnV0ZQp0aGUgTGlicmFyeSBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueQphdHRlbXB0IG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IKZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyCnJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuICBIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywKb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcwp0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaCBwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCgogIDkuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdApzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgpkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQptb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKTGlicmFyeSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwp0aGUgTGlicmFyeSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KCiAgMTAuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKTGlicmFyeSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSwgbGluayB3aXRoIG9yIG1vZGlmeSB0aGUgTGlicmFyeQpzdWJqZWN0IHRvIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCnJlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgd2l0aAp0aGlzIExpY2Vuc2UuCgwKICAxMS4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAppbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLApjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCm90aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcwpMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91Cm1heSBub3QgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeSBieQphbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bwpyZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5LgoKSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFueQpwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gYXBwbHksCmFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyIGNpcmN1bXN0YW5jZXMuCgpJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CnBhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CnN1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKaW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0gd2hpY2ggaXMKaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCmdlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKdGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwp0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKaW1wb3NlIHRoYXQgY2hvaWNlLgoKVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCmJlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgoKICAxMi4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBMaWJyYXJ5IGlzIHJlc3RyaWN0ZWQgaW4KY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCm9yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgTGlicmFyeSB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGFkZAphbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nIHRob3NlIGNvdW50cmllcywKc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcgY291bnRyaWVzIG5vdCB0aHVzCmV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmCndyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgoKICAxMy4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcKdmVyc2lvbnMgb2YgdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLgpTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sCmJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KCkVhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIExpYnJhcnkKc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kCiJhbnkgbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQKY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieQp0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIExpYnJhcnkgZG9lcyBub3Qgc3BlY2lmeSBhCmxpY2Vuc2UgdmVyc2lvbiBudW1iZXIsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5CnRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCgwKICAxNC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIExpYnJhcnkgaW50byBvdGhlciBmcmVlCnByb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGVzZSwKd3JpdGUgdG8gdGhlIGF1dGhvciB0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMKY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUKU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzIG1ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91cgpkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzIG9mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzCm9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQgb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nCmFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCgoJCQkgICAgTk8gV0FSUkFOVFkKCiAgMTUuIEJFQ0FVU0UgVEhFIExJQlJBUlkgSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PCldBUlJBTlRZIEZPUiBUSEUgTElCUkFSWSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuCkVYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SCk9USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgTElCUkFSWSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCktJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQpJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFCkxJQlJBUlkgSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFIExJQlJBUlkgUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FClRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KCiAgMTYuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4KV1JJVElORyBXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkKQU5EL09SIFJFRElTVFJJQlVURSBUSEUgTElCUkFSWSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UKRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUgpDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRQpMSUJSQVJZIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HClJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBCkZBSUxVUkUgT0YgVEhFIExJQlJBUlkgVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBTT0ZUV0FSRSksIEVWRU4gSUYKU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSApEQU1BR0VTLgoKCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUwo=]]></data>
	</file>
	<file>
	  <filename>/lib/GoogleMapAPI-2.5/GoogleMapAPI.class.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBQcm9qZWN0OiAgICAgR29vZ2xlTWFwQVBJOiBhIFBIUCBsaWJyYXJ5IGludGVmYWNlIHRvIHRoZSBHb29nbGUgTWFwIEFQSQogKiBGaWxlOiAgICAgICAgR29vZ2xlTWFwQVBJLmNsYXNzLnBocAogKiAKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqCiAqIEZvciBxdWVzdGlvbnMsIGhlbHAsIGNvbW1lbnRzLCBkaXNjdXNzaW9uLCBldGMuLCBwbGVhc2Ugam9pbiB0aGUKICogU21hcnR5IG1haWxpbmcgbGlzdC4gU2VuZCBhIGJsYW5rIGUtbWFpbCB0bwogKiBzbWFydHktZ2VuZXJhbC1zdWJzY3JpYmVAbGlzdHMucGhwLm5ldAogKgogKiBAbGluayBodHRwOi8vd3d3LnBocGluc2lkZXIuY29tL3BocC9jb2RlL0dvb2dsZU1hcEFQSS8KICogQGNvcHlyaWdodCAyMDA1IE5ldyBEaWdpdGFsIEdyb3VwLCBJbmMuCiAqIEBhdXRob3IgTW9udGUgT2hydCA8bW9udGUgYXQgb2hydCBkb3QgY29tPgogKiBAcGFja2FnZSBHb29nbGVNYXBBUEkKICogQHZlcnNpb24gMi41CiAqLwoKLyogJElkOiBHb29nbGVNYXBBUEkuY2xhc3MucGhwLHYgMS42MyAyMDA3LzA4LzAzIDE2OjI5OjQwIG1vaHJ0IEV4cCAkICovCgovKgoKRm9yIGJlc3QgcmVzdWx0cyB3aXRoIEdvb2dsZU1hcHMsIHVzZSBYSFRNTCBjb21wbGlhbnQgd2ViIHBhZ2VzIHdpdGggdGhpcyBoZWFkZXI6Cgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWxuczp2PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOnZtbCI+CgpGb3IgZGF0YWJhc2UgY2FjaGluZywgeW91IHdpbGwgd2FudCB0byB1c2UgdGhpcyBzY2hlbWE6CgpDUkVBVEUgVEFCTEUgR0VPQ09ERVMgKAogIGFkZHJlc3MgdmFyY2hhcigyNTUpIE5PVCBOVUxMIGRlZmF1bHQgJycsCiAgbG9uIGZsb2F0IGRlZmF1bHQgTlVMTCwKICBsYXQgZmxvYXQgZGVmYXVsdCBOVUxMLAogIFBSSU1BUlkgS0VZICAoYWRkcmVzcykKKTsKCiovCgpjbGFzcyBHb29nbGVNYXBBUEkgewoKICAgIC8qKgogICAgICogUEVBUjo6REIgRFNOIGZvciBnZW9jb2RlIGNhY2hpbmcuIGV4YW1wbGU6CiAgICAgKiAkZHNuID0gJ215c3FsOi8vdXNlcjpwYXNzQGxvY2FsaG9zdC9kYm5hbWUnOwogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHZhciAkZHNuID0gbnVsbDsKICAgIAogICAgLyoqCiAgICAgKiBZT1VSIEdvb2dsTWFwIEFQSSBLRVkgZm9yIHlvdXIgc2l0ZS4KICAgICAqIChodHRwOi8vbWFwcy5nb29nbGUuY29tL2FwaXMvbWFwcy9zaWdudXAuaHRtbCkKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICB2YXIgJGFwaV9rZXkgPSAnJzsKCiAgICAvKioKICAgICAqIGN1cnJlbnQgbWFwIGlkLCBzZXQgd2hlbiB5b3UgaW5zdGFudGlhdGUKICAgICAqIHRoZSBHb29nbGVNYXBBUEkgb2JqZWN0LgogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHZhciAkbWFwX2lkID0gbnVsbDsKCiAgICAvKioKICAgICAqIHNpZGViYXIgPGRpdj4gdXNlZCBhbG9uZyB3aXRoIHRoaXMgbWFwLgogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHZhciAkc2lkZWJhcl9pZCA9IG51bGw7ICAgIAogICAgCiAgICAvKioKICAgICAqIEdvb2dsZU1hcEFQSSB1c2VzIHRoZSBZYWhvbyBnZW9jb2RlIGxvb2t1cCBBUEkuCiAgICAgKiBUaGlzIGlzIHRoZSBhcHBsaWNhdGlvbiBJRCBmb3IgWU9VUiBhcHBsaWNhdGlvbi4KICAgICAqIFRoaXMgaXMgc2V0IHVwb24gaW5zdGFudGlhdGluZyB0aGUgR29vZ2xlTWFwQVBJIG9iamVjdC4KICAgICAqIChodHRwOi8vZGV2ZWxvcGVyLnlhaG9vLm5ldC9mYXEvaW5kZXguaHRtbCNhcHBpZCkKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICB2YXIgJGFwcF9pZCA9IG51bGw7CgogICAgLyoqCiAgICAgKiB1c2Ugb25Mb2FkKCkgdG8gbG9hZCB0aGUgbWFwIGphdmFzY3JpcHQuCiAgICAgKiBpZiBlbmFibGVkLCBiZSBzdXJlIHRvIGluY2x1ZGUgb24geW91ciB3ZWJwYWdlOgogICAgICogPGh0bWwgb25sb2FkPSJvbkxvYWQoKSI+CiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgdmFyICRvbmxvYWQgPSBmYWxzZTsKICAgIAogICAgLyoqCiAgICAgKiBtYXAgY2VudGVyIGxhdGl0dWRlIChob3Jpem9udGFsKQogICAgICogY2FsY3VsYXRlZCBhdXRvbWF0aWNhbGx5IGFzIG1hcmtlcnMKICAgICAqIGFyZSBhZGRlZCB0byB0aGUgbWFwLgogICAgICoKICAgICAqIEB2YXIgZmxvYXQKICAgICAqLwogICAgdmFyICRjZW50ZXJfbGF0ID0gbnVsbDsKCiAgICAvKioKICAgICAqIG1hcCBjZW50ZXIgbG9uZ2l0dWRlICh2ZXJ0aWNhbCkKICAgICAqIGNhbGN1bGF0ZWQgYXV0b21hdGljYWxseSBhcyBtYXJrZXJzCiAgICAgKiBhcmUgYWRkZWQgdG8gdGhlIG1hcC4KICAgICAqCiAgICAgKiBAdmFyIGZsb2F0CiAgICAgKi8KICAgIHZhciAkY2VudGVyX2xvbiA9IG51bGw7CiAgICAKICAgIC8qKgogICAgICogZW5hYmxlcyBtYXAgY29udHJvbHMgKHpvb20vbW92ZS9jZW50ZXIpCiAgICAgKgogICAgICogQHZhciBib29sZWFuCiAgICAgKi8KICAgIHZhciAkbWFwX2NvbnRyb2xzID0gdHJ1ZTsKCiAgICAvKioKICAgICAqIGRldGVybWluZXMgdGhlIG1hcCBjb250cm9sIHR5cGUKICAgICAqIHNtYWxsIC0+IHNob3cgbW92ZS9jZW50ZXIgY29udHJvbHMKICAgICAqIGxhcmdlIC0+IHNob3cgbW92ZS9jZW50ZXIvem9vbSBjb250cm9scwogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHZhciAkY29udHJvbF9zaXplID0gJ2xhcmdlJzsKICAgIAogICAgLyoqCiAgICAgKiBlbmFibGVzIG1hcCB0eXBlIGNvbnRyb2xzIChtYXAvc2F0ZWxsaXRlL2h5YnJpZCkKICAgICAqCiAgICAgKiBAdmFyIGJvb2xlYW4KICAgICAqLwogICAgdmFyICR0eXBlX2NvbnRyb2xzID0gdHJ1ZTsKCiAgICAvKioKICAgICAqIGRlZmF1bHQgbWFwIHR5cGUgKEdfTk9STUFMX01BUC9HX1NBVEVMTElURV9NQVAvR19IWUJSSURfTUFQKQogICAgICoKICAgICAqIEB2YXIgYm9vbGVhbgogICAgICovCiAgICB2YXIgJG1hcF90eXBlID0gJ0dfTk9STUFMX01BUCc7CiAgICAKICAgIC8qKgogICAgICogZW5hYmxlcyBzY2FsZSBtYXAgY29udHJvbAogICAgICoKICAgICAqIEB2YXIgYm9vbGVhbgogICAgICovCiAgICB2YXIgJHNjYWxlX2NvbnRyb2wgPSB0cnVlOwogICAgCiAgICAvKioKICAgICAqIGVuYWJsZXMgb3ZlcnZpZXcgbWFwIGNvbnRyb2wKICAgICAqCiAgICAgKiBAdmFyIGJvb2xlYW4KICAgICAqLwogICAgdmFyICRvdmVydmlld19jb250cm9sID0gZmFsc2U7ICAgIAogICAgIAogICAgLyoqCiAgICAgKiBkZXRlcm1pbmVzIHRoZSBkZWZhdWx0IHpvb20gbGV2ZWwKICAgICAqCiAgICAgKiBAdmFyIGludGVnZXIKICAgICAqLwogICAgdmFyICR6b29tID0gMTY7CgogICAgLyoqCiAgICAgKiBkZXRlcm1pbmVzIHRoZSBtYXAgd2lkdGgKICAgICAqCiAgICAgKiBAdmFyIGludGVnZXIKICAgICAqLwogICAgdmFyICR3aWR0aCA9ICc1MDBweCc7CiAgICAKICAgIC8qKgogICAgICogZGV0ZXJtaW5lcyB0aGUgbWFwIGhlaWdodAogICAgICoKICAgICAqIEB2YXIgaW50ZWdlcgogICAgICovCiAgICB2YXIgJGhlaWdodCA9ICc1MDBweCc7CgogICAgLyoqCiAgICAgKiBtZXNzYWdlIHRoYXQgcG9wcyB1cCB3aGVuIHRoZSBicm93c2VyIGlzIGluY29tcGF0aWJsZSB3aXRoIEdvb2dsZSBNYXBzLgogICAgICogc2V0IHRvIGVtcHR5IHN0cmluZyB0byBkaXNhYmxlLgogICAgICoKICAgICAqIEB2YXIgaW50ZWdlcgogICAgICovCiAgICB2YXIgJGJyb3dzZXJfYWxlcnQgPSAnU29ycnksIHRoZSBHb29nbGUgTWFwcyBBUEkgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGlzIGJyb3dzZXIuJzsKICAgIAogICAgLyoqCiAgICAgKiBtZXNzYWdlIHRoYXQgYXBwZWFycyB3aGVuIGphdmFzY3JpcHQgaXMgZGlzYWJsZWQuCiAgICAgKiBzZXQgdG8gZW1wdHkgc3RyaW5nIHRvIGRpc2FibGUuCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgdmFyICRqc19hbGVydCA9ICc8Yj5KYXZhc2NyaXB0IG11c3QgYmUgZW5hYmxlZCBpbiBvcmRlciB0byB1c2UgR29vZ2xlIE1hcHMuPC9iPic7CgogICAgLyoqCiAgICAgKiBkZXRlcm1pbmVzIGlmIHNpZGViYXIgaXMgZW5hYmxlZAogICAgICoKICAgICAqIEB2YXIgYm9vbGVhbgogICAgICovCiAgICB2YXIgJHNpZGViYXIgPSB0cnVlOyAgICAKCiAgICAvKioKICAgICAqIGRldGVybWluZXMgaWYgdG8vZnJvbSBkaXJlY3Rpb25zIGFyZSBpbmNsdWRlZCBpbnNpZGUgaW5mbyB3aW5kb3cKICAgICAqCiAgICAgKiBAdmFyIGJvb2xlYW4KICAgICAqLwogICAgdmFyICRkaXJlY3Rpb25zID0gdHJ1ZTsKCiAgICAvKioKICAgICAqIGRldGVybWluZXMgaWYgbWFwIG1hcmtlcnMgYnJpbmcgdXAgYW4gaW5mbyB3aW5kb3cKICAgICAqCiAgICAgKiBAdmFyIGJvb2xlYW4KICAgICAqLwogICAgdmFyICRpbmZvX3dpbmRvdyA9IHRydWU7ICAgIAoKICAgIC8qKgogICAgICogZGV0ZXJtaW5lcyB0aGUgbGFuZ3VhZ2Ugb2YgdGhlIGNvbnRyb2xzCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgdmFyICRsYW5ndWFnZSA9ICdlbic7ICAgIAogICAgCiAgICAvKioKICAgICAqIGRldGVybWluZXMgaWYgaW5mbyB3aW5kb3cgYXBwZWFycyB3aXRoIGEgY2xpY2sgb3IgbW91c2VvdmVyCiAgICAgKgogICAgICogQHZhciBzdHJpbmcgY2xpY2svbW91c2VvdmVyCiAgICAgKi8KICAgIHZhciAkd2luZG93X3RyaWdnZXIgPSAnY2xpY2snOyAgICAKCiAgICAvKioKICAgICAqIHdoYXQgc2VydmVyIGdlb2NvZGUgbG9va3VwcyBjb21lIGZyb20KICAgICAqCiAgICAgKiBhdmFpbGFibGU6IFlBSE9PICBZYWhvbyEgQVBJLiBVUyBnZW9jb2RlIGxvb2t1cHMgb25seS4KICAgICAqICAgICAgICAgICAgR09PR0xFIEdvb2dsZSBNYXBzLiBUaGlzIGNhbiBkbyBpbnRlcm5hdGlvbmFsIGxvb2t1cHMsCiAgICAgKiAgICAgICAgICAgICAgICAgICBidXQgbm90IGFuIG9mZmljaWFsIEFQSSBzZXJ2aWNlIHNvIG5vIGd1YXJhbnRlZXMuCiAgICAgKiAgICAgICAgICAgIE5vdGU6IEdPT0dMRSBpcyB0aGUgZGVmYXVsdCBsb29rdXAgc2VydmljZSwgcGxlYXNlIHJlYWQKICAgICAqICAgICAgICAgICAgICAgICAgdGhlIFlhaG9vISB0ZXJtcyBvZiBzZXJ2aWNlIGJlZm9yZSB1c2luZyB0aGVpciBBUEkuCiAgICAgKgogICAgICogQHZhciBzdHJpbmcgc2VydmljZSBuYW1lCiAgICAgKi8KICAgIHZhciAkbG9va3VwX3NlcnZpY2UgPSAnR09PR0xFJzsKCXZhciAkbG9va3VwX3NlcnZlciA9IGFycmF5KCdHT09HTEUnID0+ICdtYXBzLmdvb2dsZS5jb20nLCAnWUFIT08nID0+ICdhcGkubG9jYWwueWFob28uY29tJyk7CiAgICAKICAgIHZhciAkZHJpdmluZ19kaXJfdGV4dCA9IGFycmF5KAogICAgICAgICAgICAnZGlyX3RvJyA9PiAnU3RhcnQgYWRkcmVzczogKGluY2x1ZGUgYWRkciwgY2l0eSBzdC9yZWdpb24pJywKICAgICAgICAgICAgJ3RvX2J1dHRvbl92YWx1ZScgPT4gJ0dldCBEaXJlY3Rpb25zJywKICAgICAgICAgICAgJ3RvX2J1dHRvbl90eXBlJyA9PiAnc3VibWl0JywKICAgICAgICAgICAgJ2Rpcl9mcm9tJyA9PiAnRW5kIGFkZHJlc3M6IChpbmNsdWRlIGFkZHIsIGNpdHkgc3QvcmVnaW9uKScsCiAgICAgICAgICAgICdmcm9tX2J1dHRvbl92YWx1ZScgPT4gJ0dldCBEaXJlY3Rpb25zJywKICAgICAgICAgICAgJ2Zyb21fYnV0dG9uX3R5cGUnID0+ICdzdWJtaXQnLAogICAgICAgICAgICAnZGlyX3RleHQnID0+ICdEaXJlY3Rpb25zOiAnLAogICAgICAgICAgICAnZGlyX3RvaGVyZScgPT4gJ1RvIGhlcmUnLAogICAgICAgICAgICAnZGlyX2Zyb21oZXJlJyA9PiAnRnJvbSBoZXJlJwogICAgICAgICAgICApOyAgICAgICAgICAgICAKICAgICAgICAgICAgICAgCiAgICAKICAgIC8qKgogICAgICogdmVyc2lvbiBudW1iZXIKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICB2YXIgJF92ZXJzaW9uID0gJzIuNSc7CgogICAgLyoqCiAgICAgKiBsaXN0IG9mIGFkZGVkIG1hcmtlcnMKICAgICAqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHZhciAkX21hcmtlcnMgPSBhcnJheSgpOwogICAgCiAgICAvKioKICAgICAqIG1heGltdW0gbG9uZ2l0dWRlIG9mIGFsbCBtYXJrZXJzCiAgICAgKiAKICAgICAqIEB2YXIgZmxvYXQKICAgICAqLwogICAgdmFyICRfbWF4X2xvbiA9IC0xMDAwMDAwOwogICAgCiAgICAvKioKICAgICAqIG1pbmltdW0gbG9uZ2l0dWRlIG9mIGFsbCBtYXJrZXJzCiAgICAgKgogICAgICogQHZhciBmbG9hdAogICAgICovCiAgICB2YXIgJF9taW5fbG9uID0gMTAwMDAwMDsKICAgIAogICAgLyoqCiAgICAgKiBtYXggbGF0aXR1ZGUKICAgICAqCiAgICAgKiBAdmFyIGZsb2F0CiAgICAgKi8KICAgIHZhciAkX21heF9sYXQgPSAtMTAwMDAwMDsKICAgIAogICAgLyoqCiAgICAgKiBtaW4gbGF0aXR1ZGUKICAgICAqCiAgICAgKiBAdmFyIGZsb2F0CiAgICAgKi8KICAgIHZhciAkX21pbl9sYXQgPSAxMDAwMDAwOwogICAgCiAgICAvKioKICAgICAqIGRldGVybWluZXMgaWYgd2Ugc2hvdWxkIHpvb20gdG8gbWluaW11bSBsZXZlbCAoYWJvdmUgdGhpcy0+em9vbSB2YWx1ZSkgdGhhdCB3aWxsIGVuY29tcGFzcyBhbGwgbWFya2VycwogICAgICoKICAgICAqIEB2YXIgYm9vbGVhbgogICAgICovCiAgICB2YXIgJHpvb21fZW5jb21wYXNzID0gdHJ1ZTsKCiAgICAvKioKICAgICAqIGZhY3RvciBieSB3aGljaCB0byBmdWRnZSB0aGUgYm91bmRhcmllcyBzbyB0aGF0IHdoZW4gd2Ugem9vbSBlbmNvbXBhc3MsIHRoZSBtYXJrZXJzIGFyZW4ndCB0b28gY2xvc2UgdG8gdGhlIGVkZ2UKICAgICAqCiAgICAgKiBAdmFyIGZsb2F0CiAgICAgKi8KICAgIHZhciAkYm91bmRzX2Z1ZGdlID0gMC4wMTsKCiAgICAvKioKICAgICAqIHVzZSB0aGUgZmlyc3Qgc3VnZ2VzdGlvbiBieSBhIGdvb2dsZSBsb29rdXAgaWYgZXhhY3QgbWF0Y2ggbm90IGZvdW5kCiAgICAgKgogICAgICogQHZhciBmbG9hdAogICAgICovCiAgICB2YXIgJHVzZV9zdWdnZXN0ID0gZmFsc2U7CgogICAgCiAgICAvKioKICAgICAqIGxpc3Qgb2YgYWRkZWQgcG9seWxpbmVzCiAgICAgKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICB2YXIgJF9wb2x5bGluZXMgPSBhcnJheSgpOyAgICAKICAgIAogICAgLyoqCiAgICAgKiBpY29uIGluZm8gYXJyYXkKICAgICAqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHZhciAkX2ljb25zID0gYXJyYXkoKTsKCiAgICAvKioKICAgICAqIGRhdGFiYXNlIGNhY2hlIHRhYmxlIG5hbWUKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICB2YXIgJF9kYl9jYWNoZV90YWJsZSA9ICdHRU9DT0RFUyc7CiAgICAgICAgCiAgICAgICAgCiAgICAvKioKICAgICAqIGNsYXNzIGNvbnN0cnVjdG9yCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWFwX2lkIHRoZSBpZCBmb3IgdGhpcyBtYXAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFwcF9pZCBZT1VSIFlhaG9vIEFwcCBJRAogICAgICovCiAgICBmdW5jdGlvbiBHb29nbGVNYXBBUEkoJG1hcF9pZCA9ICdtYXAnLCAkYXBwX2lkID0gJ015TWFwQXBwJykgewogICAgICAgICR0aGlzLT5tYXBfaWQgPSAkbWFwX2lkOwogICAgICAgICR0aGlzLT5zaWRlYmFyX2lkID0gJ3NpZGViYXJfJyAuICRtYXBfaWQ7CiAgICAgICAgJHRoaXMtPmFwcF9pZCA9ICRhcHBfaWQ7CiAgICB9CiAgIAogICAgLyoqCiAgICAgKiBzZXRzIHRoZSBQRUFSOjpEQiBkc24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkc24KICAgICAqLwogICAgZnVuY3Rpb24gc2V0RFNOKCRkc24pIHsKICAgICAgICAkdGhpcy0+ZHNuID0gJGRzbjsgICAKICAgIH0KICAgCiAgICAvKioKICAgICAqIHNldHMgdGhlIGxhbmd1YWdlIG9uIHRoZSBjb250cm9scwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxhbmd1YWdlCiAgICAgKiBTZWUgaHR0cDovL3NwcmVhZHNoZWV0cy5nb29nbGUuY29tL3B1Yj9rZXk9cDlwZHdzYWkyaERNc0xrWHNvTTA1S1EmZ2lkPTEKICAgICAqIGZvciBsaXN0IG9mIGxhbmd1YWdlcwkJICAgICAgCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldExhbmd1YWdlKCRsYW5ndWFnZSkgewogICAgICAgICR0aGlzLT5sYW5ndWFnZSA9ICRsYW5ndWFnZTsgICAKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBzZXRzIFlPVVIgR29vZ2xlIE1hcCBBUEkga2V5CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldEFQSUtleSgka2V5KSB7CiAgICAgICAgJHRoaXMtPmFwaV9rZXkgPSAka2V5OyAgIAogICAgfQoKICAgIC8qKgogICAgICogc2V0cyB0aGUgd2lkdGggb2YgdGhlIG1hcAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHdpZHRoCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldFdpZHRoKCR3aWR0aCkgewogICAgICAgIGlmKCFwcmVnX21hdGNoKCchXihcZCspKC4qKSQhJywkd2lkdGgsJF9tYXRjaCkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgJF93aWR0aCA9ICRfbWF0Y2hbMV07CiAgICAgICAgJF90eXBlID0gJF9tYXRjaFsyXTsKICAgICAgICBpZigkX3R5cGUgPT0gJyUnKQogICAgICAgICAgICAkdGhpcy0+d2lkdGggPSAkX3dpZHRoIC4gJyUnOwogICAgICAgIGVsc2UKICAgICAgICAgICAgJHRoaXMtPndpZHRoID0gJF93aWR0aCAuICdweCc7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBzZXRzIHRoZSBoZWlnaHQgb2YgdGhlIG1hcAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGhlaWdodAogICAgICovCiAgICBmdW5jdGlvbiBzZXRIZWlnaHQoJGhlaWdodCkgewogICAgICAgIGlmKCFwcmVnX21hdGNoKCchXihcZCspKC4qKSQhJywkaGVpZ2h0LCRfbWF0Y2gpKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgICRfaGVpZ2h0ID0gJF9tYXRjaFsxXTsKICAgICAgICAkX3R5cGUgPSAkX21hdGNoWzJdOwogICAgICAgIGlmKCRfdHlwZSA9PSAnJScpCiAgICAgICAgICAgICR0aGlzLT5oZWlnaHQgPSAkX2hlaWdodCAuICclJzsKICAgICAgICBlbHNlCiAgICAgICAgICAgICR0aGlzLT5oZWlnaHQgPSAkX2hlaWdodCAuICdweCc7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9ICAgICAgICAKCiAgICAvKioKICAgICAqIHNldHMgdGhlIGRlZmF1bHQgbWFwIHpvb20gbGV2ZWwKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsZXZlbAogICAgICovCiAgICBmdW5jdGlvbiBzZXRab29tTGV2ZWwoJGxldmVsKSB7CiAgICAgICAgJHRoaXMtPnpvb20gPSAoaW50KSAkbGV2ZWw7CiAgICB9ICAgIAogICAgICAgICAgICAKICAgIC8qKgogICAgICogZW5hYmxlcyB0aGUgbWFwIGNvbnRyb2xzICh6b29tL21vdmUpCiAgICAgKgogICAgICovCiAgICBmdW5jdGlvbiBlbmFibGVNYXBDb250cm9scygpIHsKICAgICAgICAkdGhpcy0+bWFwX2NvbnRyb2xzID0gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIGRpc2FibGVzIHRoZSBtYXAgY29udHJvbHMgKHpvb20vbW92ZSkKICAgICAqCiAgICAgKi8KICAgIGZ1bmN0aW9uIGRpc2FibGVNYXBDb250cm9scygpIHsKICAgICAgICAkdGhpcy0+bWFwX2NvbnRyb2xzID0gZmFsc2U7CiAgICB9ICAgIAogICAgCiAgICAvKioKICAgICAqIHNldHMgdGhlIG1hcCBjb250cm9sIHNpemUgKGxhcmdlL3NtYWxsKQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNpemUKICAgICAqLwogICAgZnVuY3Rpb24gc2V0Q29udHJvbFNpemUoJHNpemUpIHsKICAgICAgICBpZihpbl9hcnJheSgkc2l6ZSxhcnJheSgnbGFyZ2UnLCdzbWFsbCcpKSkKICAgICAgICAgICAgJHRoaXMtPmNvbnRyb2xfc2l6ZSA9ICRzaXplOwogICAgfSAgICAgICAgICAgIAoKICAgIC8qKgogICAgICogZW5hYmxlcyB0aGUgdHlwZSBjb250cm9scyAobWFwL3NhdGVsbGl0ZS9oeWJyaWQvdGVycmFpbikKICAgICAqCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVuYWJsZVR5cGVDb250cm9scygpIHsKICAgICAgICAkdGhpcy0+dHlwZV9jb250cm9scyA9IHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBkaXNhYmxlcyB0aGUgdHlwZSBjb250cm9scyAobWFwL3NhdGVsbGl0ZS9oeWJyaWQvdGVycmFpbikKICAgICAqCiAgICAgKi8KICAgIGZ1bmN0aW9uIGRpc2FibGVUeXBlQ29udHJvbHMoKSB7CiAgICAgICAgJHRoaXMtPnR5cGVfY29udHJvbHMgPSBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIHNldCBkZWZhdWx0IG1hcCB0eXBlIChtYXAvc2F0ZWxsaXRlL2h5YnJpZC90ZXJyYWluKQogICAgICoKICAgICAqLwogICAgZnVuY3Rpb24gc2V0TWFwVHlwZSgkdHlwZSkgewogICAgICAgIHN3aXRjaCgkdHlwZSkgewogICAgICAgICAgICBjYXNlICd0ZXJyYWluJzoKICAgICAgICAgICAgICAgICR0aGlzLT5tYXBfdHlwZSA9ICdHX1BIWVNJQ0FMX01BUCc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnaHlicmlkJzoKICAgICAgICAgICAgICAgICR0aGlzLT5tYXBfdHlwZSA9ICdHX0hZQlJJRF9NQVAnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3NhdGVsbGl0ZSc6CiAgICAgICAgICAgICAgICAkdGhpcy0+bWFwX3R5cGUgPSAnR19TQVRFTExJVEVfTUFQJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdtYXAnOgogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgJHRoaXMtPm1hcF90eXBlID0gJ0dfTk9STUFMX01BUCc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9ICAgICAgIAogICAgfSAgICAKICAgIAogICAgLyoqCiAgICAgKiBlbmFibGVzIG9ubG9hZAogICAgICoKICAgICAqLwogICAgZnVuY3Rpb24gZW5hYmxlT25Mb2FkKCkgewogICAgICAgICR0aGlzLT5vbmxvYWQgPSB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogZGlzYWJsZXMgb25sb2FkCiAgICAgKgogICAgICovCiAgICBmdW5jdGlvbiBkaXNhYmxlT25Mb2FkKCkgewogICAgICAgICR0aGlzLT5vbmxvYWQgPSBmYWxzZTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBlbmFibGVzIHNpZGViYXIKICAgICAqCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVuYWJsZVNpZGViYXIoKSB7CiAgICAgICAgJHRoaXMtPnNpZGViYXIgPSB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogZGlzYWJsZXMgc2lkZWJhcgogICAgICoKICAgICAqLwogICAgZnVuY3Rpb24gZGlzYWJsZVNpZGViYXIoKSB7CiAgICAgICAgJHRoaXMtPnNpZGViYXIgPSBmYWxzZTsKICAgIH0gICAgCgogICAgLyoqCiAgICAgKiBlbmFibGVzIG1hcCBkaXJlY3Rpb25zIGluc2lkZSBpbmZvIHdpbmRvdwogICAgICoKICAgICAqLwogICAgZnVuY3Rpb24gZW5hYmxlRGlyZWN0aW9ucygpIHsKICAgICAgICAkdGhpcy0+ZGlyZWN0aW9ucyA9IHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBkaXNhYmxlcyBtYXAgZGlyZWN0aW9ucyBpbnNpZGUgaW5mbyB3aW5kb3cKICAgICAqCiAgICAgKi8KICAgIGZ1bmN0aW9uIGRpc2FibGVEaXJlY3Rpb25zKCkgewogICAgICAgICR0aGlzLT5kaXJlY3Rpb25zID0gZmFsc2U7CiAgICB9ICAgIAogICAgICAgIAogICAgLyoqCiAgICAgKiBzZXQgYnJvd3NlciBhbGVydCBtZXNzYWdlIGZvciBpbmNvbXBhdGlibGUgYnJvd3NlcnMKICAgICAqCiAgICAgKiBAcGFyYW1zICRtZXNzYWdlIHN0cmluZwogICAgICovCiAgICBmdW5jdGlvbiBzZXRCcm93c2VyQWxlcnQoJG1lc3NhZ2UpIHsKICAgICAgICAkdGhpcy0+YnJvd3Nlcl9hbGVydCA9ICRtZXNzYWdlOwogICAgfQoKICAgIC8qKgogICAgICogc2V0IDxub3NjcmlwdD4gbWVzc2FnZSB3aGVuIGphdmFzY3JpcHQgaXMgZGlzYWJsZWQKICAgICAqCiAgICAgKiBAcGFyYW1zICRtZXNzYWdlIHN0cmluZwogICAgICovCiAgICBmdW5jdGlvbiBzZXRKU0FsZXJ0KCRtZXNzYWdlKSB7CiAgICAgICAgJHRoaXMtPmpzX2FsZXJ0ID0gJG1lc3NhZ2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBlbmFibGUgbWFwIG1hcmtlciBpbmZvIHdpbmRvd3MKICAgICAqLwogICAgZnVuY3Rpb24gZW5hYmxlSW5mb1dpbmRvdygpIHsKICAgICAgICAkdGhpcy0+aW5mb193aW5kb3cgPSB0cnVlOwogICAgfQogICAgCiAgICAvKioKICAgICAqIGRpc2FibGUgbWFwIG1hcmtlciBpbmZvIHdpbmRvd3MKICAgICAqLwogICAgZnVuY3Rpb24gZGlzYWJsZUluZm9XaW5kb3coKSB7CiAgICAgICAgJHRoaXMtPmluZm9fd2luZG93ID0gZmFsc2U7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogc2V0IHRoZSBpbmZvIHdpbmRvdyB0cmlnZ2VyIGFjdGlvbgogICAgICoKICAgICAqIEBwYXJhbXMgJG1lc3NhZ2Ugc3RyaW5nIGNsaWNrL21vdXNlb3ZlcgogICAgICovCiAgICBmdW5jdGlvbiBzZXRJbmZvV2luZG93VHJpZ2dlcigkdHlwZSkgewogICAgICAgIHN3aXRjaCgkdHlwZSkgewogICAgICAgICAgICBjYXNlICdtb3VzZW92ZXInOgogICAgICAgICAgICAgICAgJHRoaXMtPndpbmRvd190cmlnZ2VyID0gJ21vdXNlb3Zlcic7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICR0aGlzLT53aW5kb3dfdHJpZ2dlciA9ICdjbGljayc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogZW5hYmxlIHpvb20gdXNpbmcgc2Nyb2xsIHdoZWVsCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVuYWJsZVpvb21TY3JvbGxXaGVlbCgpIHsKICAgICAgICAkdGhpcy0+em9vbV9zY3JvbGx3aGVlbCA9IHRydWU7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogZGlzYWJsZSB6b29tIHVzaW5nIHNjcm9sbCB3aGVlbAogICAgICovCiAgICBmdW5jdGlvbiBkaXNhYmxlWm9vbVNjcm9sbFdoZWVsKCkgewogICAgICAgICR0aGlzLT56b29tX3Njcm9sbHdoZWVsID0gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBlbmFibGUgem9vbSB0byBlbmNvbXBhc3MgbWFrZXJzCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVuYWJsZVpvb21FbmNvbXBhc3MoKSB7CiAgICAgICAgJHRoaXMtPnpvb21fZW5jb21wYXNzID0gdHJ1ZTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBkaXNhYmxlIHpvb20gdG8gZW5jb21wYXNzIG1ha2VycwogICAgICovCiAgICBmdW5jdGlvbiBkaXNhYmxlWm9vbUVuY29tcGFzcygpIHsKICAgICAgICAkdGhpcy0+em9vbV9lbmNvbXBhc3MgPSBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIHNldCB0aGUgYm91bmRhcnkgZnVkZ2UgZmFjdG9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldEJvdW5kc0Z1ZGdlKCR2YWwpIHsKICAgICAgICAkdGhpcy0+Ym91bmRzX2Z1ZGdlID0gJHZhbDsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBlbmFibGVzIHRoZSBzY2FsZSBtYXAgY29udHJvbAogICAgICoKICAgICAqLwogICAgZnVuY3Rpb24gZW5hYmxlU2NhbGVDb250cm9sKCkgewogICAgICAgICR0aGlzLT5zY2FsZV9jb250cm9sID0gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIGRpc2FibGVzIHRoZSBzY2FsZSBtYXAgY29udHJvbAogICAgICoKICAgICAqLwogICAgZnVuY3Rpb24gZGlzYWJsZVNjYWxlQ29udHJvbCgpIHsKICAgICAgICAkdGhpcy0+c2NhbGVfY29udHJvbCA9IGZhbHNlOwogICAgfSAgICAKICAgICAgICAgICAgCiAgICAvKioKICAgICAqIGVuYWJsZXMgdGhlIG92ZXJ2aWV3IG1hcCBjb250cm9sCiAgICAgKgogICAgICovCiAgICBmdW5jdGlvbiBlbmFibGVPdmVydmlld0NvbnRyb2woKSB7CiAgICAgICAgJHRoaXMtPm92ZXJ2aWV3X2NvbnRyb2wgPSB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogZGlzYWJsZXMgdGhlIG92ZXJ2aWV3IG1hcCBjb250cm9sCiAgICAgKgogICAgICovCiAgICBmdW5jdGlvbiBkaXNhYmxlT3ZlcnZpZXdDb250cm9sKCkgewogICAgICAgICR0aGlzLT5vdmVydmlld19jb250cm9sID0gZmFsc2U7CiAgICAgfSAgICAKICAgIAogICAgCiAgICAvKioKICAgICAqIHNldCB0aGUgbG9va3VwIHNlcnZpY2UgdG8gdXNlIGZvciBnZW9jb2RlIGxvb2t1cHMKICAgICAqIGRlZmF1bHQgaXMgWUFIT08sIHlvdSBjYW4gYWxzbyB1c2UgR09PR0xFLgogICAgICogTk9URTogR09PR0xFIGNhbiB0byBpbnRsIGxvb2t1cHMsIGJ1dCBpcyBub3QgYW4KICAgICAqIG9mZmljaWFsIEFQSSwgc28gdXNlIGF0IHlvdXIgb3duIHJpc2suCiAgICAgKgogICAgICovCiAgICBmdW5jdGlvbiBzZXRMb29rdXBTZXJ2aWNlKCRzZXJ2aWNlKSB7CiAgICAgICAgc3dpdGNoKCRzZXJ2aWNlKSB7CiAgICAgICAgICAgIGNhc2UgJ0dPT0dMRSc6CiAgICAgICAgICAgICAgICAkdGhpcy0+bG9va3VwX3NlcnZpY2UgPSAnR09PR0xFJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdZQUhPTyc6CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAkdGhpcy0+bG9va3VwX3NlcnZpY2UgPSAnWUFIT08nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfSAgICAgICAKICAgIH0KICAgIAogICAgICAgIAogICAgLyoqCiAgICAgKiBhZGRzIGEgbWFwIG1hcmtlciBieSBhZGRyZXNzCiAgICAgKiAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFkZHJlc3MgdGhlIG1hcCBhZGRyZXNzIHRvIG1hcmsgKHN0cmVldC9jaXR5L3N0YXRlL3ppcCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRpdGxlIHRoZSB0aXRsZSBkaXNwbGF5IGluIHRoZSBzaWRlYmFyCiAgICAgKiBAcGFyYW0gc3RyaW5nICRodG1sIHRoZSBIVE1MIGJsb2NrIHRvIGRpc3BsYXkgaW4gdGhlIGluZm8gYnViYmxlIChpZiBlbXB0eSwgdGl0bGUgaXMgdXNlZCkKICAgICAqLwogICAgZnVuY3Rpb24gYWRkTWFya2VyQnlBZGRyZXNzKCRhZGRyZXNzLCR0aXRsZSA9ICcnLCRodG1sID0gJycsJHRvb2x0aXAgPSAnJykgewogICAgICAgIGlmKCgkX2dlb2NvZGUgPSAkdGhpcy0+Z2V0R2VvY29kZSgkYWRkcmVzcykpID09PSBmYWxzZSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIHJldHVybiAkdGhpcy0+YWRkTWFya2VyQnlDb29yZHMoJF9nZW9jb2RlWydsb24nXSwkX2dlb2NvZGVbJ2xhdCddLCR0aXRsZSwkaHRtbCwkdG9vbHRpcCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBhZGRzIGEgbWFwIG1hcmtlciBieSBnZW9jb2RlCiAgICAgKiAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxvbiB0aGUgbWFwIGxvbmdpdHVkZSAoaG9yaXpvbnRhbCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxhdCB0aGUgbWFwIGxhdGl0dWRlICh2ZXJ0aWNhbCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRpdGxlIHRoZSB0aXRsZSBkaXNwbGF5IGluIHRoZSBzaWRlYmFyCiAgICAgKiBAcGFyYW0gc3RyaW5nICRodG1sfGFycmF5ICRodG1sIAogICAgICogICAgIHN0cmluZzogdGhlIEhUTUwgYmxvY2sgdG8gZGlzcGxheSBpbiB0aGUgaW5mbyBidWJibGUgKGlmIGVtcHR5LCB0aXRsZSBpcyB1c2VkKQogICAgICogICAgIGFycmF5OiBUaGUgdGl0bGUgPT4gY29udGVudCBwYWlycyBmb3IgYSB0YWJiZWQgaW5mbyBidWJibGUgICAgIAogICAgICovCiAgICAvLyBUT0RPIG1ha2UgaXQgc28geW91IGNhbiBzcGVjaWZ5IHdoaWNoIHRhYiB5b3Ugd2FudCB0aGUgZGlyZWN0aW9ucyB0byBhcHBlYXIgaW4gKGFkZCBhbm90aGVyIGFyZykKICAgIGZ1bmN0aW9uIGFkZE1hcmtlckJ5Q29vcmRzKCRsb24sJGxhdCwkdGl0bGUgPSAnJywkaHRtbCA9ICcnLCR0b29sdGlwID0gJycpIHsKICAgICAgICAkX21hcmtlclsnbG9uJ10gPSAkbG9uOwogICAgICAgICRfbWFya2VyWydsYXQnXSA9ICRsYXQ7CiAgICAgICAgJF9tYXJrZXJbJ2h0bWwnXSA9IChpc19hcnJheSgkaHRtbCkgfHwgc3RybGVuKCRodG1sKSA+IDApID8gJGh0bWwgOiAkdGl0bGU7CiAgICAgICAgJF9tYXJrZXJbJ3RpdGxlJ10gPSAkdGl0bGU7CiAgICAgICAgJF9tYXJrZXJbJ3Rvb2x0aXAnXSA9ICR0b29sdGlwOwogICAgICAgICR0aGlzLT5fbWFya2Vyc1tdID0gJF9tYXJrZXI7CiAgICAgICAgJHRoaXMtPmFkanVzdENlbnRlckNvb3JkcygkX21hcmtlclsnbG9uJ10sJF9tYXJrZXJbJ2xhdCddKTsKICAgICAgICAvLyByZXR1cm4gaW5kZXggb2YgbWFya2VyCiAgICAgICAgcmV0dXJuIGNvdW50KCR0aGlzLT5fbWFya2VycykgLSAxOwogICAgfQoKICAgIC8qKgogICAgICogYWRkcyBhIG1hcCBwb2x5bGluZSBieSBhZGRyZXNzCiAgICAgKiBpZiBjb2xvciwgd2VpZ2h0IGFuZCBvcGFjaXR5IGFyZSBub3QgZGVmaW5lZCwgdXNlIHRoZSBnb29nbGUgbWFwcyBkZWZhdWx0cwogICAgICogCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhZGRyZXNzMSB0aGUgbWFwIGFkZHJlc3MgdG8gZHJhdyBmcm9tCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhZGRyZXNzMiB0aGUgbWFwIGFkZHJlc3MgdG8gZHJhdyB0bwogICAgICogQHBhcmFtIHN0cmluZyAkY29sb3IgdGhlIGNvbG9yIG9mIHRoZSBsaW5lIChmb3JtYXQ6ICMwMDAwMDApCiAgICAgKiBAcGFyYW0gc3RyaW5nICR3ZWlnaHQgdGhlIHdlaWdodCBvZiB0aGUgbGluZSBpbiBwaXhlbHMKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9wYWNpdHkgdGhlIGxpbmUgb3BhY2l0eSAocGVyY2VudGFnZSkKICAgICAqLwogICAgZnVuY3Rpb24gYWRkUG9seUxpbmVCeUFkZHJlc3MoJGFkZHJlc3MxLCRhZGRyZXNzMiwkY29sb3I9JycsJHdlaWdodD0wLCRvcGFjaXR5PTApIHsKICAgICAgICBpZigoJF9nZW9jb2RlMSA9ICR0aGlzLT5nZXRHZW9jb2RlKCRhZGRyZXNzMSkpID09PSBmYWxzZSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmKCgkX2dlb2NvZGUyID0gJHRoaXMtPmdldEdlb2NvZGUoJGFkZHJlc3MyKSkgPT09IGZhbHNlKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hZGRQb2x5TGluZUJ5Q29vcmRzKCRfZ2VvY29kZTFbJ2xvbiddLCRfZ2VvY29kZTFbJ2xhdCddLCRfZ2VvY29kZTJbJ2xvbiddLCRfZ2VvY29kZTJbJ2xhdCddLCRjb2xvciwkd2VpZ2h0LCRvcGFjaXR5KTsKICAgIH0KCiAgICAvKioKICAgICAqIGFkZHMgYSBtYXAgcG9seWxpbmUgYnkgbWFwIGNvb3JkaW5hdGVzCiAgICAgKiBpZiBjb2xvciwgd2VpZ2h0IGFuZCBvcGFjaXR5IGFyZSBub3QgZGVmaW5lZCwgdXNlIHRoZSBnb29nbGUgbWFwcyBkZWZhdWx0cwogICAgICogCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsb24xIHRoZSBtYXAgbG9uZ2l0dWRlIHRvIGRyYXcgZnJvbQogICAgICogQHBhcmFtIHN0cmluZyAkbGF0MSB0aGUgbWFwIGxhdGl0dWRlIHRvIGRyYXcgZnJvbQogICAgICogQHBhcmFtIHN0cmluZyAkbG9uMiB0aGUgbWFwIGxvbmdpdHVkZSB0byBkcmF3IHRvCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsYXQyIHRoZSBtYXAgbGF0aXR1ZGUgdG8gZHJhdyB0bwogICAgICogQHBhcmFtIHN0cmluZyAkY29sb3IgdGhlIGNvbG9yIG9mIHRoZSBsaW5lIChmb3JtYXQ6ICMwMDAwMDApCiAgICAgKiBAcGFyYW0gc3RyaW5nICR3ZWlnaHQgdGhlIHdlaWdodCBvZiB0aGUgbGluZSBpbiBwaXhlbHMKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9wYWNpdHkgdGhlIGxpbmUgb3BhY2l0eSAocGVyY2VudGFnZSkKICAgICAqLwogICAgZnVuY3Rpb24gYWRkUG9seUxpbmVCeUNvb3JkcygkbG9uMSwkbGF0MSwkbG9uMiwkbGF0MiwkY29sb3I9JycsJHdlaWdodD0wLCRvcGFjaXR5PTApIHsKICAgICAgICAkX3BvbHlsaW5lWydsb24xJ10gPSAkbG9uMTsKICAgICAgICAkX3BvbHlsaW5lWydsYXQxJ10gPSAkbGF0MTsKICAgICAgICAkX3BvbHlsaW5lWydsb24yJ10gPSAkbG9uMjsKICAgICAgICAkX3BvbHlsaW5lWydsYXQyJ10gPSAkbGF0MjsKICAgICAgICAkX3BvbHlsaW5lWydjb2xvciddID0gJGNvbG9yOwogICAgICAgICRfcG9seWxpbmVbJ3dlaWdodCddID0gJHdlaWdodDsKICAgICAgICAkX3BvbHlsaW5lWydvcGFjaXR5J10gPSAkb3BhY2l0eTsKICAgICAgICAkdGhpcy0+X3BvbHlsaW5lc1tdID0gJF9wb2x5bGluZTsKICAgICAgICAkdGhpcy0+YWRqdXN0Q2VudGVyQ29vcmRzKCRfcG9seWxpbmVbJ2xvbjEnXSwkX3BvbHlsaW5lWydsYXQxJ10pOwogICAgICAgICR0aGlzLT5hZGp1c3RDZW50ZXJDb29yZHMoJF9wb2x5bGluZVsnbG9uMiddLCRfcG9seWxpbmVbJ2xhdDInXSk7CiAgICAgICAgLy8gcmV0dXJuIGluZGV4IG9mIHBvbHlsaW5lCiAgICAgICAgcmV0dXJuIGNvdW50KCR0aGlzLT5fcG9seWxpbmVzKSAtIDE7CiAgICB9ICAgICAgICAKICAgICAgICAKICAgIC8qKgogICAgICogYWRqdXN0IG1hcCBjZW50ZXIgY29vcmRpbmF0ZXMgYnkgdGhlIGdpdmVuIGxhdC9sb24gcG9pbnQKICAgICAqIAogICAgICogQHBhcmFtIHN0cmluZyAkbG9uIHRoZSBtYXAgbGF0aXR1ZGUgKGhvcml6b250YWwpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsYXQgdGhlIG1hcCBsYXRpdHVkZSAodmVydGljYWwpCiAgICAgKi8KICAgIGZ1bmN0aW9uIGFkanVzdENlbnRlckNvb3JkcygkbG9uLCRsYXQpIHsKICAgICAgICBpZihzdHJsZW4oKHN0cmluZykkbG9uKSA9PSAwIHx8IHN0cmxlbigoc3RyaW5nKSRsYXQpID09IDApCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAkdGhpcy0+X21heF9sb24gPSAoZmxvYXQpIG1heCgkbG9uLCAkdGhpcy0+X21heF9sb24pOwogICAgICAgICR0aGlzLT5fbWluX2xvbiA9IChmbG9hdCkgbWluKCRsb24sICR0aGlzLT5fbWluX2xvbik7CiAgICAgICAgJHRoaXMtPl9tYXhfbGF0ID0gKGZsb2F0KSBtYXgoJGxhdCwgJHRoaXMtPl9tYXhfbGF0KTsKICAgICAgICAkdGhpcy0+X21pbl9sYXQgPSAoZmxvYXQpIG1pbigkbGF0LCAkdGhpcy0+X21pbl9sYXQpOwogICAgICAgIAogICAgICAgICR0aGlzLT5jZW50ZXJfbG9uID0gKGZsb2F0KSAoJHRoaXMtPl9taW5fbG9uICsgJHRoaXMtPl9tYXhfbG9uKSAvIDI7CiAgICAgICAgJHRoaXMtPmNlbnRlcl9sYXQgPSAoZmxvYXQpICgkdGhpcy0+X21pbl9sYXQgKyAkdGhpcy0+X21heF9sYXQpIC8gMjsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIHNldCBtYXAgY2VudGVyIGNvb3JkaW5hdGVzIHRvIGxhdC9sb24gcG9pbnQKICAgICAqIAogICAgICogQHBhcmFtIHN0cmluZyAkbG9uIHRoZSBtYXAgbGF0aXR1ZGUgKGhvcml6b250YWwpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsYXQgdGhlIG1hcCBsYXRpdHVkZSAodmVydGljYWwpCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldENlbnRlckNvb3JkcygkbG9uLCRsYXQpIHsKICAgICAgICAkdGhpcy0+Y2VudGVyX2xhdCA9IChmbG9hdCkgJGxhdDsKICAgICAgICAkdGhpcy0+Y2VudGVyX2xvbiA9IChmbG9hdCkgJGxvbjsKICAgIH0gICAgCgogICAgLyoqCiAgICAgKiBnZW5lcmF0ZSBhbiBhcnJheSBvZiBwYXJhbXMgZm9yIGEgbmV3IG1hcmtlciBpY29uIGltYWdlCiAgICAgKiBpY29uU2hhZG93SW1hZ2UgaXMgb3B0aW9uYWwKICAgICAqIElmIGFuY2hvciBjb29yZHMgYXJlIG5vdCBzdXBwbGllZCwgd2UgdXNlIHRoZSBjZW50ZXIgcG9pbnQgb2YgdGhlIGltYWdlIGJ5IGRlZmF1bHQuIAogICAgICogQ2FuIGJlIGNhbGxlZCBzdGF0aWNhbGx5LiBGb3IgcHJpdmF0ZSB1c2UgYnkgYWRkTWFya2VySWNvbigpIGFuZCBzZXRNYXJrZXJJY29uKCkKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpY29uSW1hZ2UgVVJMIHRvIGljb24gaW1hZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGljb25TaGFkb3dJbWFnZSBVUkwgdG8gc2hhZG93IGltYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpY29uQW5jaG9yWCBYIGNvb3JkaW5hdGUgZm9yIGljb24gYW5jaG9yIHBvaW50CiAgICAgKiBAcGFyYW0gc3RyaW5nICRpY29uQW5jaG9yWSBZIGNvb3JkaW5hdGUgZm9yIGljb24gYW5jaG9yIHBvaW50CiAgICAgKiBAcGFyYW0gc3RyaW5nICRpbmZvV2luZG93QW5jaG9yWCBYIGNvb3JkaW5hdGUgZm9yIGluZm8gd2luZG93IGFuY2hvciBwb2ludAogICAgICogQHBhcmFtIHN0cmluZyAkaW5mb1dpbmRvd0FuY2hvclkgWSBjb29yZGluYXRlIGZvciBpbmZvIHdpbmRvdyBhbmNob3IgcG9pbnQKICAgICAqLwogICAgZnVuY3Rpb24gY3JlYXRlTWFya2VySWNvbigkaWNvbkltYWdlLCRpY29uU2hhZG93SW1hZ2UgPSAnJywkaWNvbkFuY2hvclggPSAneCcsJGljb25BbmNob3JZID0gJ3gnLCRpbmZvV2luZG93QW5jaG9yWCA9ICd4JywkaW5mb1dpbmRvd0FuY2hvclkgPSAneCcpIHsKICAgICAgICAkX2ljb25faW1hZ2VfcGF0aCA9IHN0cnBvcygkaWNvbkltYWdlLCdodHRwJykgPT09IDAgPyAkaWNvbkltYWdlIDogJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSAuICRpY29uSW1hZ2U7CiAgICAgICAgaWYoISgkX2ltYWdlX2luZm8gPSBAZ2V0aW1hZ2VzaXplKCRfaWNvbl9pbWFnZV9wYXRoKSkpIHsKICAgICAgICAgICAgZGllKCdHb29nbGVNYXBBUEk6Y3JlYXRlTWFya2VySWNvbjogRXJyb3IgcmVhZGluZyBpbWFnZTogJyAuICRpY29uSW1hZ2UpOyAgIAogICAgICAgIH0KICAgICAgICBpZigkaWNvblNoYWRvd0ltYWdlKSB7CiAgICAgICAgICAgICRfc2hhZG93X2ltYWdlX3BhdGggPSBzdHJwb3MoJGljb25TaGFkb3dJbWFnZSwnaHR0cCcpID09PSAwID8gJGljb25TaGFkb3dJbWFnZSA6ICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAkaWNvblNoYWRvd0ltYWdlOwogICAgICAgICAgICBpZighKCRfc2hhZG93X2luZm8gPSBAZ2V0aW1hZ2VzaXplKCRfc2hhZG93X2ltYWdlX3BhdGgpKSkgewogICAgICAgICAgICAgICAgZGllKCdHb29nbGVNYXBBUEk6Y3JlYXRlTWFya2VySWNvbjogRXJyb3IgcmVhZGluZyBpbWFnZTogJyAuICRpY29uU2hhZG93SW1hZ2UpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmKCRpY29uQW5jaG9yWCA9PT0gJ3gnKSB7CiAgICAgICAgICAgICRpY29uQW5jaG9yWCA9IChpbnQpICgkX2ltYWdlX2luZm9bMF0gLyAyKTsKICAgICAgICB9CiAgICAgICAgaWYoJGljb25BbmNob3JZID09PSAneCcpIHsKICAgICAgICAgICAgJGljb25BbmNob3JZID0gKGludCkgKCRfaW1hZ2VfaW5mb1sxXSAvIDIpOwogICAgICAgIH0KICAgICAgICBpZigkaW5mb1dpbmRvd0FuY2hvclggPT09ICd4JykgewogICAgICAgICAgICAkaW5mb1dpbmRvd0FuY2hvclggPSAoaW50KSAoJF9pbWFnZV9pbmZvWzBdIC8gMik7CiAgICAgICAgfQogICAgICAgIGlmKCRpbmZvV2luZG93QW5jaG9yWSA9PT0gJ3gnKSB7CiAgICAgICAgICAgICRpbmZvV2luZG93QW5jaG9yWSA9IChpbnQpICgkX2ltYWdlX2luZm9bMV0gLyAyKTsKICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICRpY29uX2luZm8gPSBhcnJheSgKICAgICAgICAgICAgICAgICdpbWFnZScgPT4gJGljb25JbWFnZSwKICAgICAgICAgICAgICAgICdpY29uV2lkdGgnID0+ICRfaW1hZ2VfaW5mb1swXSwKICAgICAgICAgICAgICAgICdpY29uSGVpZ2h0JyA9PiAkX2ltYWdlX2luZm9bMV0sCiAgICAgICAgICAgICAgICAnaWNvbkFuY2hvclgnID0+ICRpY29uQW5jaG9yWCwKICAgICAgICAgICAgICAgICdpY29uQW5jaG9yWScgPT4gJGljb25BbmNob3JZLAogICAgICAgICAgICAgICAgJ2luZm9XaW5kb3dBbmNob3JYJyA9PiAkaW5mb1dpbmRvd0FuY2hvclgsCiAgICAgICAgICAgICAgICAnaW5mb1dpbmRvd0FuY2hvclknID0+ICRpbmZvV2luZG93QW5jaG9yWQogICAgICAgICAgICAgICAgKTsKICAgICAgICBpZigkaWNvblNoYWRvd0ltYWdlKSB7CiAgICAgICAgICAgICRpY29uX2luZm8gPSBhcnJheV9tZXJnZSgkaWNvbl9pbmZvLCBhcnJheSgnc2hhZG93JyA9PiAkaWNvblNoYWRvd0ltYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NoYWRvd1dpZHRoJyA9PiAkX3NoYWRvd19pbmZvWzBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NoYWRvd0hlaWdodCcgPT4gJF9zaGFkb3dfaW5mb1sxXSkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJGljb25faW5mbzsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBzZXQgdGhlIG1hcmtlciBpY29uIGZvciBBTEwgbWFya2VycyBvbiB0aGUgbWFwCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldE1hcmtlckljb24oJGljb25JbWFnZSwkaWNvblNoYWRvd0ltYWdlID0gJycsJGljb25BbmNob3JYID0gJ3gnLCRpY29uQW5jaG9yWSA9ICd4JywkaW5mb1dpbmRvd0FuY2hvclggPSAneCcsJGluZm9XaW5kb3dBbmNob3JZID0gJ3gnKSB7CiAgICAgICAgJHRoaXMtPl9pY29ucyA9IGFycmF5KCR0aGlzLT5jcmVhdGVNYXJrZXJJY29uKCRpY29uSW1hZ2UsJGljb25TaGFkb3dJbWFnZSwkaWNvbkFuY2hvclgsJGljb25BbmNob3JZLCRpbmZvV2luZG93QW5jaG9yWCwkaW5mb1dpbmRvd0FuY2hvclkpKTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBhZGQgYW4gaWNvbiB0byBnbyB3aXRoIHRoZSBjb3JyZXNwb25kaW5nbHkgYWRkZWQgbWFya2VyCiAgICAgKi8KICAgIGZ1bmN0aW9uIGFkZE1hcmtlckljb24oJGljb25JbWFnZSwkaWNvblNoYWRvd0ltYWdlID0gJycsJGljb25BbmNob3JYID0gJ3gnLCRpY29uQW5jaG9yWSA9ICd4JywkaW5mb1dpbmRvd0FuY2hvclggPSAneCcsJGluZm9XaW5kb3dBbmNob3JZID0gJ3gnKSB7CiAgICAgICAgJHRoaXMtPl9pY29uc1tdID0gJHRoaXMtPmNyZWF0ZU1hcmtlckljb24oJGljb25JbWFnZSwkaWNvblNoYWRvd0ltYWdlLCRpY29uQW5jaG9yWCwkaWNvbkFuY2hvclksJGluZm9XaW5kb3dBbmNob3JYLCRpbmZvV2luZG93QW5jaG9yWSk7CiAgICAgICAgcmV0dXJuIGNvdW50KCR0aGlzLT5faWNvbnMpIC0gMTsKICAgIH0KCiAgICAvKioKICAgICAqIHByaW50IG1hcCBoZWFkZXIgamF2YXNjcmlwdCAoZ29lcyBiZXR3ZWVuIDxoZWFkPjwvaGVhZD4pCiAgICAgKiAKICAgICAqLwogICAgZnVuY3Rpb24gcHJpbnRIZWFkZXJKUygpIHsKICAgICAgICBlY2hvICR0aGlzLT5nZXRIZWFkZXJKUygpOyAgIAogICAgfQogICAgCiAgICAvKioKICAgICAqIHJldHVybiBtYXAgaGVhZGVyIGphdmFzY3JpcHQgKGdvZXMgYmV0d2VlbiA8aGVhZD48L2hlYWQ+KQogICAgICogCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldEhlYWRlckpTKCkgewogICAgCQlpZiAoaXNzZXQoJHRoaXMtPmxhbmd1YWdlKSkKICAgIAkJewoJICAgICAgICByZXR1cm4gc3ByaW50ZignPHNjcmlwdCBzcmM9Imh0dHA6Ly9tYXBzLmdvb2dsZS5jb20vbWFwcz9maWxlPWFwaSZhbXA7dj0yJmFtcDtrZXk9JXMmYW1wO2hsPSVzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij48L3NjcmlwdD4nLCAkdGhpcy0+YXBpX2tleSwgJHRoaXMtPmxhbmd1YWdlKTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCSAgICAgICAgcmV0dXJuIHNwcmludGYoJzxzY3JpcHQgc3JjPSJodHRwOi8vbWFwcy5nb29nbGUuY29tL21hcHM/ZmlsZT1hcGkmYW1wO3Y9MiZhbXA7a2V5PSVzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij48L3NjcmlwdD4nLCAkdGhpcy0+YXBpX2tleSk7CgkJCQl9CiAgICB9ICAgIAogICAgCiAgIC8qKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAqIHByaW50cyBvbkxvYWQoKSB3aXRob3V0IGhhdmluZyB0byBtYW5pcHVsYXRlIGJvZHkgdGFnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgKiBjYWxsIHRoaXMgYWZ0ZXIgdGhlIHByaW50IG1hcCBsaWtlIHNvLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICogICAgICAkbWFwLT5wcmludE1hcCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAqICAgICAgJG1hcC0+cHJpbnRPbkxvYWQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgIGZ1bmN0aW9uIHByaW50T25Mb2FkKCkgewogICAgICAgIGVjaG8gJHRoaXMtPmdldE9uTG9hZCgpOwogICAgfQoKICAgIC8qKgogICAgICogcmV0dXJuIGpzIHRvIHNldCBvbmxvYWQgZnVuY3Rpb24KICAgICAqLwogICAgZnVuY3Rpb24gZ2V0T25Mb2FkKCkgewogICAgICAgIHJldHVybiAnPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBjaGFyc2V0PSJ1dGYtOCI+d2luZG93Lm9ubG9hZD1vbkxvYWQ7PC9zY3JpcHQ+JzsgICAgICAgICAgICAgICAgICAgICAgIAogICAgfQoKICAgIC8qKgogICAgICogcHJpbnQgbWFwIGphdmFzY3JpcHQgKHB1dCBqdXN0IGJlZm9yZSA8L2JvZHk+LCBvciBpbiA8aGVhZGVyPiBpZiB1c2luZyBvbkxvYWQoKSkKICAgICAqIAogICAgICovCiAgICBmdW5jdGlvbiBwcmludE1hcEpTKCkgewogICAgICAgIGVjaG8gJHRoaXMtPmdldE1hcEpTKCk7CiAgICB9ICAgIAoKICAgIC8qKgogICAgICogcmV0dXJuIG1hcCBqYXZhc2NyaXB0CiAgICAgKiAKICAgICAqLwogICAgZnVuY3Rpb24gZ2V0TWFwSlMoKSB7CiAgICAgICAgJF9vdXRwdXQgPSAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4nIC4gIlxuIjsKICAgICAgICAkX291dHB1dCAuPSAnLy88IVtDREFUQVsnIC4gIlxuIjsKICAgICAgICAkX291dHB1dCAuPSAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiI7CiAgICAgICAgJF9vdXRwdXQgLj0gIiAqIENyZWF0ZWQgd2l0aCBHb29nbGVNYXBBUEkgIiAuICR0aGlzLT5fdmVyc2lvbiAuICJcbiI7CiAgICAgICAgJF9vdXRwdXQgLj0gIiAqIEF1dGhvcjogTW9udGUgT2hydCA8bW9udGUgQVQgb2hydCBET1QgY29tPlxuIjsKICAgICAgICAkX291dHB1dCAuPSAiICogQ29weXJpZ2h0IDIwMDUtMjAwNiBOZXcgRGlnaXRhbCBHcm91cFxuIjsKICAgICAgICAkX291dHB1dCAuPSAiICogaHR0cDovL3d3dy5waHBpbnNpZGVyLmNvbS9waHAvY29kZS9Hb29nbGVNYXBBUEkvXG4iOwogICAgICAgICRfb3V0cHV0IC49ICIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiI7CgogICAgICAgICRfb3V0cHV0IC49ICd2YXIgcG9pbnRzID0gW107JyAuICJcbiI7CiAgICAgICAgJF9vdXRwdXQgLj0gJ3ZhciBtYXJrZXJzID0gW107JyAuICJcbiI7CiAgICAgICAgJF9vdXRwdXQgLj0gJ3ZhciBjb3VudGVyID0gMDsnIC4gIlxuIjsKICAgICAgICBpZigkdGhpcy0+c2lkZWJhcikgeyAgICAgICAgCiAgICAgICAgICAgICRfb3V0cHV0IC49ICd2YXIgc2lkZWJhcl9odG1sID0gIiI7JyAuICJcbiI7CiAgICAgICAgICAgICRfb3V0cHV0IC49ICd2YXIgbWFya2VyX2h0bWwgPSBbXTsnIC4gIlxuIjsKICAgICAgICB9CgogICAgICAgIGlmKCR0aGlzLT5kaXJlY3Rpb25zKSB7ICAgICAgICAKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJ3ZhciB0b19odG1scyA9IFtdOycgLiAiXG4iOwogICAgICAgICAgICAkX291dHB1dCAuPSAndmFyIGZyb21faHRtbHMgPSBbXTsnIC4gIlxuIjsKICAgICAgICB9ICAgICAgICAKCiAgICAgICAgaWYoIWVtcHR5KCR0aGlzLT5faWNvbnMpKSB7CiAgICAgICAgICAgICRfb3V0cHV0IC49ICd2YXIgaWNvbiA9IFtdOycgLiAiXG4iOwogICAgICAgICAgICBmb3IoJGkgPSAwLCAkaiA9IGNvdW50KCR0aGlzLT5faWNvbnMpOyAkaTwkajsgJGkrKykgewogICAgICAgICAgICAgICAgJGluZm8gPSAkdGhpcy0+X2ljb25zWyRpXTsKCiAgICAgICAgICAgICAgICAvLyBoYXNoIHRoZSBpY29uIGRhdGEgdG8gc2VlIGlmIHdlJ3ZlIGFscmVhZHkgZ290IHRoaXMgb25lOyBpZiBzbywgc2F2ZSBzb21lIGphdmFzY3JpcHQKICAgICAgICAgICAgICAgICRpY29uX2tleSA9IG1kNShzZXJpYWxpemUoJGluZm8pKTsKICAgICAgICAgICAgICAgIGlmKCFpc3NldCgkZXhpc3RfaWNuWyRpY29uX2tleV0pKSB7CgogICAgICAgICAgICAgICAgICAgICRfb3V0cHV0IC49ICJpY29uWyRpXSA9IG5ldyBHSWNvbigpO1xuIjsgICAKICAgICAgICAgICAgICAgICAgICAkX291dHB1dCAuPSBzcHJpbnRmKCdpY29uWyVzXS5pbWFnZSA9ICIlcyI7JywkaSwkaW5mb1snaW1hZ2UnXSkgLiAiXG4iOyAgIAogICAgICAgICAgICAgICAgICAgIGlmKCRpbmZvWydzaGFkb3cnXSkgewogICAgICAgICAgICAgICAgICAgICAgICAkX291dHB1dCAuPSBzcHJpbnRmKCdpY29uWyVzXS5zaGFkb3cgPSAiJXMiOycsJGksJGluZm9bJ3NoYWRvdyddKSAuICJcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICRfb3V0cHV0IC49IHNwcmludGYoJ2ljb25bJXNdLnNoYWRvd1NpemUgPSBuZXcgR1NpemUoJXMsJXMpOycsJGksJGluZm9bJ3NoYWRvd1dpZHRoJ10sJGluZm9bJ3NoYWRvd0hlaWdodCddKSAuICJcbiI7ICAgCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRfb3V0cHV0IC49IHNwcmludGYoJ2ljb25bJXNdLmljb25TaXplID0gbmV3IEdTaXplKCVzLCVzKTsnLCRpLCRpbmZvWydpY29uV2lkdGgnXSwkaW5mb1snaWNvbkhlaWdodCddKSAuICJcbiI7ICAgCiAgICAgICAgICAgICAgICAgICAgJF9vdXRwdXQgLj0gc3ByaW50ZignaWNvblslc10uaWNvbkFuY2hvciA9IG5ldyBHUG9pbnQoJXMsJXMpOycsJGksJGluZm9bJ2ljb25BbmNob3JYJ10sJGluZm9bJ2ljb25BbmNob3JZJ10pIC4gIlxuIjsgICAKICAgICAgICAgICAgICAgICAgICAkX291dHB1dCAuPSBzcHJpbnRmKCdpY29uWyVzXS5pbmZvV2luZG93QW5jaG9yID0gbmV3IEdQb2ludCglcywlcyk7JywkaSwkaW5mb1snaW5mb1dpbmRvd0FuY2hvclgnXSwkaW5mb1snaW5mb1dpbmRvd0FuY2hvclknXSkgLiAiXG4iOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkX291dHB1dCAuPSAiaWNvblskaV0gPSBpY29uWyRleGlzdF9pY25bJGljb25fa2V5XV07XG4iOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAkX291dHB1dCAuPSAndmFyIG1hcCA9IG51bGw7JyAuICJcbiI7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgIGlmKCR0aGlzLT5vbmxvYWQpIHsKICAgICAgICAgICAkX291dHB1dCAuPSAnZnVuY3Rpb24gb25Mb2FkKCkgeycgLiAiXG4iOyAgIAogICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgIGlmKCFlbXB0eSgkdGhpcy0+YnJvd3Nlcl9hbGVydCkpIHsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJ2lmIChHQnJvd3NlcklzQ29tcGF0aWJsZSgpKSB7JyAuICJcbiI7CiAgICAgICAgfQoKICAgICAgICAkX291dHB1dCAuPSBzcHJpbnRmKCd2YXIgbWFwT2JqID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIiVzIik7JywkdGhpcy0+bWFwX2lkKSAuICJcbiI7CiAgICAgICAgJF9vdXRwdXQgLj0gJ2lmIChtYXBPYmogIT0gInVuZGVmaW5lZCIgJiYgbWFwT2JqICE9IG51bGwpIHsnIC4gIlxuIjsKICAgICAgICAkX291dHB1dCAuPSBzcHJpbnRmKCdtYXAgPSBuZXcgR01hcDIoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIiVzIikpOycsJHRoaXMtPm1hcF9pZCkgLiAiXG4iOwoKICAgICAgICBpZihpc3NldCgkdGhpcy0+Y2VudGVyX2xhdCkgJiYgaXNzZXQoJHRoaXMtPmNlbnRlcl9sb24pKSB7CgkJCS8vIFNwZWNpYWwgY2FyZSBmb3IgZGVjaW1hbCBwb2ludCBpbiBsb24gYW5kIGxhdCwgd291bGQgZ2V0IGxvc3QgaWYgIndyb25nIiBsb2NhbGUgaXMgc2V0OyBhcHBsaWVzIHRvIChzKXByaW50ZiBvbmx5CgkJCSRfb3V0cHV0IC49IHNwcmludGYoJ21hcC5zZXRDZW50ZXIobmV3IEdMYXRMbmcoJXMsICVzKSwgJWQsICVzKTsnLCBudW1iZXJfZm9ybWF0KCR0aGlzLT5jZW50ZXJfbGF0LCA2LCAiLiIsICIiKSwgbnVtYmVyX2Zvcm1hdCgkdGhpcy0+Y2VudGVyX2xvbiwgNiwgIi4iLCAiIiksICR0aGlzLT56b29tLCAkdGhpcy0+bWFwX3R5cGUpIC4gIlxuIjsKICAgICAgICB9CiAgICAgICAgLy8kX291dHB1dCAuPSAnbWFwLnNldFVJVG9EZWZhdWx0KCk7JyAuICJcbiI7CiAgICAgICAKICAgICAgICAvLyB6b29tIHNvIHRoYXQgYWxsIG1hcmtlcnMgYXJlIGluIHRoZSB2aWV3cG9ydAogICAgICAgIGlmKCR0aGlzLT56b29tX2VuY29tcGFzcyAmJiBjb3VudCgkdGhpcy0+X21hcmtlcnMpID4gMSkgewogICAgICAgICAgICAvLyBpbmNyZWFzZSBib3VuZHMgYnkgZnVkZ2UgZmFjdG9yIHRvIGtlZXAKICAgICAgICAgICAgLy8gbWFya2VycyBhd2F5IGZyb20gdGhlIGVkZ2VzCiAgICAgICAgICAgICRfbGVuX2xvbiA9ICR0aGlzLT5fbWF4X2xvbiAtICR0aGlzLT5fbWluX2xvbjsKICAgICAgICAgICAgJF9sZW5fbGF0ID0gJHRoaXMtPl9tYXhfbGF0IC0gJHRoaXMtPl9taW5fbGF0OwogICAgICAgICAgICAkdGhpcy0+X21pbl9sb24gLT0gJF9sZW5fbG9uICogJHRoaXMtPmJvdW5kc19mdWRnZTsKICAgICAgICAgICAgJHRoaXMtPl9tYXhfbG9uICs9ICRfbGVuX2xvbiAqICR0aGlzLT5ib3VuZHNfZnVkZ2U7CiAgICAgICAgICAgICR0aGlzLT5fbWluX2xhdCAtPSAkX2xlbl9sYXQgKiAkdGhpcy0+Ym91bmRzX2Z1ZGdlOwogICAgICAgICAgICAkdGhpcy0+X21heF9sYXQgKz0gJF9sZW5fbGF0ICogJHRoaXMtPmJvdW5kc19mdWRnZTsKCiAgICAgICAgICAgICRfb3V0cHV0IC49ICJ2YXIgYmRzID0gbmV3IEdMYXRMbmdCb3VuZHMobmV3IEdMYXRMbmcoJHRoaXMtPl9taW5fbGF0LCAkdGhpcy0+X21pbl9sb24pLCBuZXcgR0xhdExuZygkdGhpcy0+X21heF9sYXQsICR0aGlzLT5fbWF4X2xvbikpO1xuIjsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJ21hcC5zZXRab29tKG1hcC5nZXRCb3VuZHNab29tTGV2ZWwoYmRzKSk7JyAuICJcbiI7CiAgICAgICAgfQogICAgICAgICRfb3V0cHV0IC49ICd2YXIgY3VzdG9tVUkgPSBtYXAuZ2V0RGVmYXVsdFVJKCk7Jy4iXG4iOwoKICAgICAgICBpZigkdGhpcy0+c2NhbGVfY29udHJvbCkgewogICAgICAgICAgICAkX291dHB1dCAuPSAnY3VzdG9tVUkuY29udHJvbHMuc2NhbGVjb250cm9sID0gdHJ1ZTsnIC4gIlxuIjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRfb3V0cHV0IC49ICdjdXN0b21VSS5jb250cm9scy5zY2FsZWNvbnRyb2wgPSBmYWxzZTsnIC4gIlxuIjsKICAgICAgICB9CgogICAgICAgIGlmKCR0aGlzLT5tYXBfY29udHJvbHMpIHsKICAgICAgICAgIGlmKCR0aGlzLT5jb250cm9sX3NpemUgPT0gJ2xhcmdlJykgewogICAgICAgICAgICAgICRfb3V0cHV0IC49ICdjdXN0b21VSS5jb250cm9scy5zbWFsbHpvb21jb250cm9sM2QgPSBmYWxzZTsnIC4gIlxuIjsKICAgICAgICAgICAgICAkX291dHB1dCAuPSAnY3VzdG9tVUkuY29udHJvbHMubGFyZ2VtYXBjb250cm9sM2QgPSB0cnVlOycgLiAiXG4iOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgJF9vdXRwdXQgLj0gJ2N1c3RvbVVJLmNvbnRyb2xzLnNtYWxsem9vbWNvbnRyb2wzZCA9IHRydWU7JyAuICJcbiI7CiAgICAgICAgICAgICAgJF9vdXRwdXQgLj0gJ2N1c3RvbVVJLmNvbnRyb2xzLmxhcmdlbWFwY29udHJvbDNkID0gZmFsc2U7JyAuICJcbiI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CgkJCQkJJF9vdXRwdXQgLj0gJ2N1c3RvbVVJLmNvbnRyb2xzLnNtYWxsem9vbWNvbnRyb2wzZCA9IGZhbHNlOycgLiAiXG4iOwoJCQkJCSRfb3V0cHV0IC49ICdjdXN0b21VSS5jb250cm9scy5sYXJnZW1hcGNvbnRyb2wzZCA9IGZhbHNlOycgLiAiXG4iOwoJCQkJfQogICAgICAgIGlmKCR0aGlzLT56b29tX3Njcm9sbHdoZWVsKSB7CiAgICAgICAgICAgICRfb3V0cHV0IC49ICdjdXN0b21VSS56b29tLnNjcm9sbHdoZWVsID0gdHJ1ZTsnIC4gIlxuIjsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJ2N1c3RvbVVJLnpvb20uc2Nyb2xsd2hlZWwgPSBmYWxzZTsnIC4gIlxuIjsKCQkJCX0KCQkJCWlmKCR0aGlzLT50eXBlX2NvbnRyb2xzKSB7CiAgICAgICAgICAgIC8vJF9vdXRwdXQgLj0gJ21hcC5hZGRDb250cm9sKG5ldyBHTWFwVHlwZUNvbnRyb2woKSk7JyAuICJcbiI7CiAgICAgICAgICAgICRfb3V0cHV0IC49ICdjdXN0b21VSS5jb250cm9scy5tYXB0eXBlY29udHJvbCA9IHRydWU7JyAuICJcbiI7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgICRfb3V0cHV0IC49ICdjdXN0b21VSS5jb250cm9scy5tYXB0eXBlY29udHJvbCA9IGZhbHNlOycgLiAiXG4iOwoJCQkJfQogICAgICAgICRfb3V0cHV0IC49ICdtYXAuc2V0VUkoY3VzdG9tVUkpOycuIlxuIjsgICAgICAgIAoKICAgICAgICBpZigkdGhpcy0+b3ZlcnZpZXdfY29udHJvbCkgewogICAgICAgICAgICAkX291dHB1dCAuPSAnbWFwLmFkZENvbnRyb2wobmV3IEdPdmVydmlld01hcENvbnRyb2woKSk7JyAuICJcbiI7CiAgICAgICAgfQogICAgICAgICRfb3V0cHV0IC49ICR0aGlzLT5nZXRBZGRNYXJrZXJzSlMoKTsKCiAgICAgICAgJF9vdXRwdXQgLj0gJHRoaXMtPmdldFBvbHlsaW5lSlMoKTsKIAogICAgICAgIGlmKCR0aGlzLT5zaWRlYmFyKSB7CiAgICAgICAgICAgICRfb3V0cHV0IC49IHNwcmludGYoJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCIlcyIpLmlubmVySFRNTCA9ICI8dWwgY2xhc3M9XCJnbWFwU2lkZWJhclwiPiIrIHNpZGViYXJfaHRtbCArIjxcL3VsPiI7JywgJHRoaXMtPnNpZGViYXJfaWQpIC4gIlxuIjsKICAgICAgICB9CgogICAgICAgICRfb3V0cHV0IC49ICd9JyAuICJcbiI7ICAgICAgICAKICAgICAgIAogICAgICAgIGlmKCFlbXB0eSgkdGhpcy0+YnJvd3Nlcl9hbGVydCkpIHsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJ30gZWxzZSB7JyAuICJcbiI7CgkJCSRfb3V0cHV0IC49ICdhbGVydCgiJyAuIHN0cl9yZXBsYWNlKCciJywnXCInLCR0aGlzLT5icm93c2VyX2FsZXJ0KSAuICciKTsnIC4gIlxuIjsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJ30nIC4gIlxuIjsKICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgCgogICAgICAgIGlmKCR0aGlzLT5vbmxvYWQpIHsKICAgICAgICAgICAkX291dHB1dCAuPSAnfScgLiAiXG4iOwogICAgICAgIH0KCiAgICAgICAgJF9vdXRwdXQgLj0gJHRoaXMtPmdldENyZWF0ZU1hcmtlckpTKCk7CgogICAgICAgIC8vIFV0aWxpdHkgZnVuY3Rpb25zIHVzZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0YWJiZWQgYW5kIG5vbi10YWJiZWQgaW5mbyB3aW5kb3dzCiAgICAgICAgJF9vdXRwdXQgLj0gJ2Z1bmN0aW9uIGlzQXJyYXkoYSkge3JldHVybiBpc09iamVjdChhKSAmJiBhLmNvbnN0cnVjdG9yID09IEFycmF5O30nIC4gIlxuIjsKICAgICAgICAkX291dHB1dCAuPSAnZnVuY3Rpb24gaXNPYmplY3QoYSkge3JldHVybiAoYSAmJiB0eXBlb2YgYSA9PSBcJ29iamVjdFwnKSB8fCBpc0Z1bmN0aW9uKGEpO30nIC4gIlxuIjsKICAgICAgICAkX291dHB1dCAuPSAnZnVuY3Rpb24gaXNGdW5jdGlvbihhKSB7cmV0dXJuIHR5cGVvZiBhID09IFwnZnVuY3Rpb25cJzt9JyAuICJcbiI7CgogICAgICAgIGlmKCR0aGlzLT5zaWRlYmFyKSB7ICAgICAgICAKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJ2Z1bmN0aW9uIGNsaWNrX3NpZGViYXIoaWR4KSB7JyAuICJcbiI7CiAgICAgICAgICAgICRfb3V0cHV0IC49ICcgIGlmKGlzQXJyYXkobWFya2VyX2h0bWxbaWR4XSkpIHsgbWFya2Vyc1tpZHhdLm9wZW5JbmZvV2luZG93VGFic0h0bWwobWFya2VyX2h0bWxbaWR4XSk7IH0nIC4gIlxuIjsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJyAgZWxzZSB7IG1hcmtlcnNbaWR4XS5vcGVuSW5mb1dpbmRvd0h0bWwobWFya2VyX2h0bWxbaWR4XSk7IH0nIC4gIlxuIjsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJ30nIC4gIlxuIjsKICAgICAgICB9CiAgICAgICAgJF9vdXRwdXQgLj0gJ2Z1bmN0aW9uIHNob3dJbmZvV2luZG93KGlkeCxodG1sKSB7JyAuICJcbiI7CiAgICAgICAgJF9vdXRwdXQgLj0gJ21hcC5jZW50ZXJBdExhdExuZyhwb2ludHNbaWR4XSk7JyAuICJcbiI7CiAgICAgICAgJF9vdXRwdXQgLj0gJ21hcmtlcnNbaWR4XS5vcGVuSW5mb1dpbmRvd0h0bWwoaHRtbCk7JyAuICJcbiI7CiAgICAgICAgJF9vdXRwdXQgLj0gJ30nIC4gIlxuIjsKICAgICAgICBpZigkdGhpcy0+ZGlyZWN0aW9ucykgewogICAgICAgICAgICAkX291dHB1dCAuPSAnZnVuY3Rpb24gdG9oZXJlKGlkeCkgeycgLiAiXG4iOwogICAgICAgICAgICAkX291dHB1dCAuPSAnbWFya2Vyc1tpZHhdLm9wZW5JbmZvV2luZG93SHRtbCh0b19odG1sc1tpZHhdKTsnIC4gIlxuIjsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJ30nIC4gIlxuIjsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJ2Z1bmN0aW9uIGZyb21oZXJlKGlkeCkgeycgLiAiXG4iOwogICAgICAgICAgICAkX291dHB1dCAuPSAnbWFya2Vyc1tpZHhdLm9wZW5JbmZvV2luZG93SHRtbChmcm9tX2h0bWxzW2lkeF0pOycgLiAiXG4iOwogICAgICAgICAgICAkX291dHB1dCAuPSAnfScgLiAiXG4iOwogICAgICAgIH0KCiAgICAgICAgJF9vdXRwdXQgLj0gJy8vXV0+JyAuICJcbiI7CiAgICAgICAgJF9vdXRwdXQgLj0gJzwvc2NyaXB0PicgLiAiXG4iOwogICAgICAgIHJldHVybiAkX291dHB1dDsKICAgIH0KCiAgICAvKioKICAgICAqIG92ZXJyaWRhYmxlIGZ1bmN0aW9uIGZvciBnZW5lcmF0aW5nIGpzIHRvIGFkZCBtYXJrZXJzCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldEFkZE1hcmtlcnNKUygpIHsKICAgICAgICAkU0lOR0xFX1RBQl9XSURUSCA9IDg4OyAgICAvLyBjb25zdGFudDogd2lkdGggaW4gcGl4ZWxzIG9mIGVhY2ggdGFiIGhlYWRpbmcgKHNldCBieSBnb29nbGUpCiAgICAgICAgJGkgPSAwOwogICAgICAgICRfb3V0cHV0ID0gJyc7CiAgICAgICAgZm9yZWFjaCgkdGhpcy0+X21hcmtlcnMgYXMgJF9tYXJrZXIpIHsKICAgICAgICAgICAgaWYoaXNfYXJyYXkoJF9tYXJrZXJbJ2h0bWwnXSkpIHsKICAgICAgICAgICAgICAgIC8vIHdhcm5pbmc6IHlvdSBjYW4ndCBoYXZlIHR3byB0YWJzIHdpdGggdGhlIHNhbWUgaGVhZGVyLiBidXQgd2h5IHdvdWxkIHlvdSB3YW50IHRvPwogICAgICAgICAgICAgICAgJHRpID0gMDsKICAgICAgICAgICAgICAgICRudW1fdGFicyA9IGNvdW50KCRfbWFya2VyWydodG1sJ10pOwogICAgICAgICAgICAgICAgJHRhYl9vYnMgPSBhcnJheSgpOwogICAgICAgICAgICAgICAgZm9yZWFjaCgkX21hcmtlclsnaHRtbCddIGFzICR0YWIgPT4gJGluZm8pIHsKICAgICAgICAgICAgICAgICAgICBpZigkdGkgPT0gMCAmJiAkbnVtX3RhYnMgPiAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR3aWR0aF9zdHlsZSA9IHNwcmludGYoJyBzdHlsZT1cIndpZHRoOiAlc3B4XCInLCAkbnVtX3RhYnMgKiAkU0lOR0xFX1RBQl9XSURUSCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHdpZHRoX3N0eWxlID0gJyc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICR0YWIgPSBzdHJfcmVwbGFjZSgnIicsJ1wiJywkdGFiKTsKICAgICAgICAgICAgICAgICAgICAkaW5mbyA9IHN0cl9yZXBsYWNlKCciJywnXCInLCRpbmZvKTsKCQkJCQkkaW5mbyA9IHN0cl9yZXBsYWNlKGFycmF5KCJcbiIsICJcciIpLCAiIiwgJGluZm8pOwogICAgICAgICAgICAgICAgICAgICR0YWJfb2JzW10gPSBzcHJpbnRmKCduZXcgR0luZm9XaW5kb3dUYWIoIiVzIiwgIiVzIiknLCAkdGFiLCAnPGRpdiBpZD1cImdtYXBtYXJrZXJcIicuJHdpZHRoX3N0eWxlLic+JyAuICRpbmZvIC4gJzwvZGl2PicpOwogICAgICAgICAgICAgICAgICAgICR0aSsrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJGl3X2h0bWwgPSAnWycgLiBqb2luKCcsJywkdGFiX29icykgLiAnXSc7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkaXdfaHRtbCA9IHNwcmludGYoJyIlcyInLHN0cl9yZXBsYWNlKCciJywnXCInLCc8ZGl2IGlkPSJnbWFwbWFya2VyIj4nIC4gc3RyX3JlcGxhY2UoYXJyYXkoIlxuIiwgIlxyIiksICIiLCAkX21hcmtlclsnaHRtbCddKSAuICc8L2Rpdj4nKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJF9vdXRwdXQgLj0gc3ByaW50ZigndmFyIHBvaW50ID0gbmV3IEdMYXRMbmcoJXMsJXMpOycsJF9tYXJrZXJbJ2xhdCddLCRfbWFya2VyWydsb24nXSkgLiAiXG4iOyAgICAgICAgIAogICAgICAgICAgICAkX291dHB1dCAuPSBzcHJpbnRmKCd2YXIgbWFya2VyID0gY3JlYXRlTWFya2VyKHBvaW50LCIlcyIsJXMsICVzLCIlcyIpOycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyX3JlcGxhY2UoJyInLCdcIicsJF9tYXJrZXJbJ3RpdGxlJ10pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cl9yZXBsYWNlKCcvJywnXC8nLCRpd19odG1sKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJfcmVwbGFjZSgnIicsJ1wiJywkX21hcmtlclsndG9vbHRpcCddKSkgLiAiXG4iOwogICAgICAgICAgICAvL1RPRE86IGluIGFib3ZlIGNyZWF0ZU1hcmtlciBjYWxsLCBwYXNzIHRoZSBpbmRleCBvZiB0aGUgdGFiIGluIHdoaWNoIHRvIHB1dCBkaXJlY3Rpb25zLCBpZiBhcHBsaWNhYmxlCiAgICAgICAgICAgICRfb3V0cHV0IC49ICdtYXAuYWRkT3ZlcmxheShtYXJrZXIpOycgLiAiXG4iOwogICAgICAgICAgICAkaSsrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJF9vdXRwdXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBvdmVycmlkYWJsZSBmdW5jdGlvbiB0byBnZW5lcmF0ZSBwb2x5bGluZSBqcwogICAgICovCiAgICBmdW5jdGlvbiBnZXRQb2x5bGluZUpTKCkgewogICAgICAgICRfb3V0cHV0ID0gJyc7CiAgICAgICAgZm9yZWFjaCgkdGhpcy0+X3BvbHlsaW5lcyBhcyAkX3BvbHlsaW5lKSB7CiAgICAgICAgICAgICRfb3V0cHV0IC49IHNwcmludGYoJ3ZhciBwb2x5bGluZSA9IG5ldyBHUG9seWxpbmUoW25ldyBHTGF0TG5nKCVzLCVzKSxuZXcgR0xhdExuZyglcywlcyldLCIlcyIsJXMsJXMpOycsCiAgICAgICAgICAgICAgICAgICAgJF9wb2x5bGluZVsnbGF0MSddLCRfcG9seWxpbmVbJ2xvbjEnXSwkX3BvbHlsaW5lWydsYXQyJ10sJF9wb2x5bGluZVsnbG9uMiddLCRfcG9seWxpbmVbJ2NvbG9yJ10sJF9wb2x5bGluZVsnd2VpZ2h0J10sJF9wb2x5bGluZVsnb3BhY2l0eSddIC8gMTAwLjApIC4gIlxuIjsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJ21hcC5hZGRPdmVybGF5KHBvbHlsaW5lKTsnIC4gIlxuIjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRfb3V0cHV0OwogICAgfQoKICAgIC8qKgogICAgICogb3ZlcnJpZGFibGUgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgdGhlIGpzIGZvciB0aGUganMgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGEgbWFya2VyLgogICAgICovCiAgICBmdW5jdGlvbiBnZXRDcmVhdGVNYXJrZXJKUygpIHsKICAgICAgICAkX291dHB1dCA9ICdmdW5jdGlvbiBjcmVhdGVNYXJrZXIocG9pbnQsIHRpdGxlLCBodG1sLCBuLCB0b29sdGlwKSB7JyAuICJcbiI7CiAgICAgICAgJF9vdXRwdXQgLj0gJ2lmKG4gPj0gJy4gc2l6ZW9mKCR0aGlzLT5faWNvbnMpIC4nKSB7IG4gPSAnLiAoc2l6ZW9mKCR0aGlzLT5faWNvbnMpIC0gMSkgLiI7IH1cbiI7CiAgICAgICAgaWYoIWVtcHR5KCR0aGlzLT5faWNvbnMpKSB7CiAgICAgICAgICAgICRfb3V0cHV0IC49ICd2YXIgbWFya2VyID0gbmV3IEdNYXJrZXIocG9pbnQse1wnaWNvblwnOiBpY29uW25dLCBcJ3RpdGxlXCc6IHRvb2x0aXB9KTsnIC4gIlxuIjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkX291dHB1dCAuPSAndmFyIG1hcmtlciA9IG5ldyBHTWFya2VyKHBvaW50LHtcJ3RpdGxlXCc6IHRvb2x0aXB9KTsnIC4gIlxuIjsKICAgICAgICB9CiAgICAgICAgLy8gVE9ETzogbWFrZSBpdCBzbyB5b3UgY2FuIHNwZWNpZnkgd2hpY2ggdGFiIHlvdSB3YW50IHRoZSBkaXJlY3Rpb25zIGluLgogICAgICAgIGlmKCR0aGlzLT5kaXJlY3Rpb25zKSB7CiAgICAgICAgICAgIC8vIFdBUk5JTkc6IElmIHlvdSBhcmUgdXNpbmcgYSB0YWJiZWQgaW5mbyB3aW5kb3cgQU5EIGRpcmVjdGlvbnM6IHRoaXMgdXNlcyBhbiBVTkRPQ1VNRU5URUQgZmllbGQKICAgICAgICAgICAgLy8gb2YgdGhlIEdJbmZvV2luZG93VGFiIG9iamVjdCwgY29udGVudEVsZW0uIEdvb2dsZSBtYXkgQ0hBTkdFIHRoaXMgbmFtZSBvciBvdGhlciBhc3BlY3RzIG9mIHRoZWlyCiAgICAgICAgICAgIC8vIEdJbmZvV2luZG93VGFiIGltcGxlbWVudGF0aW9uIHdpdGhvdXQgd2FybmluZyBhbmQgQlJFQUsgdGhpcyBjb2RlLgogICAgICAgICAgICAvLyBOT1RFOiBJZiB5b3UgYXJlIE5PVCB1c2luZyBhIHRhYmJlZCBpbmZvIHdpbmRvdywgeW91J2xsIGJlIGZpbmUuCiAgICAgICAgICAgICRfb3V0cHV0IC49ICd2YXIgdGFiRmxhZyA9IGlzQXJyYXkoaHRtbCk7JyAuICJcbiI7CiAgICAgICAgICAgICRfb3V0cHV0IC49ICdpZighdGFiRmxhZykgeyBodG1sID0gW3siY29udGVudEVsZW0iOiBodG1sfV07IH0nIC4gIlxuIjsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gc3ByaW50ZigKICAgICAgICAgICAgICAgICAgICAgInRvX2h0bWxzW2NvdW50ZXJdID0gaHRtbFswXS5jb250ZW50RWxlbSArICc8Zm9ybSBjbGFzcz1cImdtYXBEaXJcIiBpZD1cImdtYXBEaXJUb1wiIHN0eWxlPVwid2hpdGUtc3BhY2U6IG5vd3JhcDtcIiBhY3Rpb249XCJodHRwOi8vbWFwcy5nb29nbGUuY29tL21hcHNcIiBtZXRob2Q9XCJnZXRcIiB0YXJnZXQ9XCJfYmxhbmtcIj4nICsKICAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwiZ21hcERpckhlYWRcIiBpZD1cImdtYXBEaXJIZWFkVG9cIj4lczxzdHJvbmc+JXM8L3N0cm9uZz4gLSA8YSBocmVmPVwiamF2YXNjcmlwdDpmcm9taGVyZSgnICsgY291bnRlciArICcpXCI+JXM8L2E+PC9zcGFuPicgKwogICAgICAgICAgICAgICAgICAgICAnPHAgY2xhc3M9XCJnbWFwRGlySXRlbVwiIGlkPVwiZ21hcERpckl0ZW1Ub1wiPjxsYWJlbCBmb3I9XCJnbWFwRGlyU2FkZHJcIiBjbGFzcz1cImdtYXBEaXJMYWJlbFwiIGlkPVwiZ21hcERpckxhYmVsVG9cIj4lczxiciAvPjwvbGFiZWw+JyArCiAgICAgICAgICAgICAgICAgICAgICc8aW5wdXQgdHlwZT1cInRleHRcIiBzaXplPVwiNDBcIiBtYXhsZW5ndGg9XCI0MFwiIG5hbWU9XCJzYWRkclwiIGNsYXNzPVwiZ21hcFRleHRCb3hcIiBpZD1cImdtYXBEaXJTYWRkclwiIHZhbHVlPVwiXCIgb25mb2N1cz1cInRoaXMuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gXCcjZTBlMGUwXCc7XCIgb25ibHVyPVwidGhpcy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBcJyNmZmZmZmZcJztcIiAvPicgKwogICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJnbWFwRGlyQnRuc1wiIGlkPVwiZ21hcERpckJ0bnNUb1wiPjxpbnB1dCB2YWx1ZT1cIiVzXCIgdHlwZT1cIiVzXCIgY2xhc3M9XCJnbWFwRGlyQnV0dG9uXCIgaWQ9XCJnbWFwRGlyQnV0dG9uVG9cIiAvPjwvc3Bhbj48L3A+JyArCiAgICAgICAgICAgICAgICAgICAgICc8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJkYWRkclwiIHZhbHVlPVwiJyArCiAgICAgICAgICAgICAgICAgICAgIHBvaW50LnkgKyAnLCcgKyBwb2ludC54ICsgXCIoXCIgKyB0aXRsZS5yZXBsYWNlKG5ldyBSZWdFeHAoL1wiL2cpLCcmcXVvdDsnKSArIFwiKVwiICsgJ1wiIC8+PC9mb3JtPic7CiAgICAgICAgICAgICAgICAgICAgICBmcm9tX2h0bWxzW2NvdW50ZXJdID0gaHRtbFswXS5jb250ZW50RWxlbSArICc8cCAvPjxmb3JtIGNsYXNzPVwiZ21hcERpclwiIGlkPVwiZ21hcERpckZyb21cIiBzdHlsZT1cIndoaXRlLXNwYWNlOiBub3dyYXA7XCIgYWN0aW9uPVwiaHR0cDovL21hcHMuZ29vZ2xlLmNvbS9tYXBzXCIgbWV0aG9kPVwiZ2V0XCIgdGFyZ2V0PVwiX2JsYW5rXCI+JyArCiAgICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cImdtYXBEaXJIZWFkXCIgaWQ9XCJnbWFwRGlySGVhZEZyb21cIj4lczxhIGhyZWY9XCJqYXZhc2NyaXB0OnRvaGVyZSgnICsgY291bnRlciArICcpXCI+JXM8L2E+IC0gPHN0cm9uZz4lczwvc3Ryb25nPjwvc3Bhbj4nICsKICAgICAgICAgICAgICAgICAgICAgJzxwIGNsYXNzPVwiZ21hcERpckl0ZW1cIiBpZD1cImdtYXBEaXJJdGVtRnJvbVwiPjxsYWJlbCBmb3I9XCJnbWFwRGlyU2FkZHJcIiBjbGFzcz1cImdtYXBEaXJMYWJlbFwiIGlkPVwiZ21hcERpckxhYmVsRnJvbVwiPiVzPGJyIC8+PC9sYWJlbD4nICsKICAgICAgICAgICAgICAgICAgICAgJzxpbnB1dCB0eXBlPVwidGV4dFwiIHNpemU9XCI0MFwiIG1heGxlbmd0aD1cIjQwXCIgbmFtZT1cImRhZGRyXCIgY2xhc3M9XCJnbWFwVGV4dEJveFwiIGlkPVwiZ21hcERpclNhZGRyXCIgdmFsdWU9XCJcIiBvbmZvY3VzPVwidGhpcy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBcJyNlMGUwZTBcJztcIiBvbmJsdXI9XCJ0aGlzLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IFwnI2ZmZmZmZlwnO1wiIC8+JyArCiAgICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cImdtYXBEaXJCdG5zXCIgaWQ9XCJnbWFwRGlyQnRuc0Zyb21cIj48aW5wdXQgdmFsdWU9XCIlc1wiIHR5cGU9XCIlc1wiIGNsYXNzPVwiZ21hcERpckJ1dHRvblwiIGlkPVwiZ21hcERpckJ1dHRvbkZyb21cIiAvPjwvc3Bhbj48L3A+JyArCiAgICAgICAgICAgICAgICAgICAgICc8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzYWRkclwiIHZhbHVlPVwiJyArCiAgICAgICAgICAgICAgICAgICAgIHBvaW50LnkgKyAnLCcgKyBwb2ludC54ICsgZW5jb2RlVVJJQ29tcG9uZW50KFwiKFwiICsgdGl0bGUucmVwbGFjZShuZXcgUmVnRXhwKC9cIi9nKSwnJnF1b3Q7JykgKyBcIilcIikgKyAnXCIgLz48L2Zvcm0+JzsKICAgICAgICAgICAgICAgICAgICAgaHRtbFswXS5jb250ZW50RWxlbSA9IGh0bWxbMF0uY29udGVudEVsZW0gKyAnPHAgLz48ZGl2IGlkPVwiZ21hcERpckhlYWRcIiBjbGFzcz1cImdtYXBEaXJcIiBzdHlsZT1cIndoaXRlLXNwYWNlOiBub3dyYXA7XCI+JXM8YSBocmVmPVwiamF2YXNjcmlwdDp0b2hlcmUoJyArIGNvdW50ZXIgKyAnKVwiPiVzPC9hPiAtIDxhIGhyZWY9XCJqYXZhc2NyaXB0OmZyb21oZXJlKCcgKyBjb3VudGVyICsgJylcIj4lczwvYT48L2Rpdj4nO1xuIiwKICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmRyaXZpbmdfZGlyX3RleHRbJ2Rpcl90ZXh0J10sCiAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5kcml2aW5nX2Rpcl90ZXh0WydkaXJfdG9oZXJlJ10sCiAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5kcml2aW5nX2Rpcl90ZXh0WydkaXJfZnJvbWhlcmUnXSwKICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmRyaXZpbmdfZGlyX3RleHRbJ2Rpcl90byddLAogICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZHJpdmluZ19kaXJfdGV4dFsndG9fYnV0dG9uX3ZhbHVlJ10sCiAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5kcml2aW5nX2Rpcl90ZXh0Wyd0b19idXR0b25fdHlwZSddLAogICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZHJpdmluZ19kaXJfdGV4dFsnZGlyX3RleHQnXSwKICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmRyaXZpbmdfZGlyX3RleHRbJ2Rpcl90b2hlcmUnXSwKICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmRyaXZpbmdfZGlyX3RleHRbJ2Rpcl9mcm9taGVyZSddLAogICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZHJpdmluZ19kaXJfdGV4dFsnZGlyX2Zyb20nXSwKICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmRyaXZpbmdfZGlyX3RleHRbJ2Zyb21fYnV0dG9uX3ZhbHVlJ10sCiAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5kcml2aW5nX2Rpcl90ZXh0Wydmcm9tX2J1dHRvbl90eXBlJ10sCiAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5kcml2aW5nX2Rpcl90ZXh0WydkaXJfdGV4dCddLAogICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZHJpdmluZ19kaXJfdGV4dFsnZGlyX3RvaGVyZSddLAogICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZHJpdmluZ19kaXJfdGV4dFsnZGlyX2Zyb21oZXJlJ10KICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAkX291dHB1dCAuPSAnaWYoIXRhYkZsYWcpIHsgaHRtbCA9IGh0bWxbMF0uY29udGVudEVsZW07IH0nOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZigkdGhpcy0+aW5mb193aW5kb3cpIHsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gc3ByaW50ZignaWYoaXNBcnJheShodG1sKSkgeyBHRXZlbnQuYWRkTGlzdGVuZXIobWFya2VyLCAiJXMiLCBmdW5jdGlvbigpIHsgbWFya2VyLm9wZW5JbmZvV2luZG93VGFic0h0bWwoaHRtbCk7IH0pOyB9JywkdGhpcy0+d2luZG93X3RyaWdnZXIpIC4gIlxuIjsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gc3ByaW50ZignZWxzZSB7IEdFdmVudC5hZGRMaXN0ZW5lcihtYXJrZXIsICIlcyIsIGZ1bmN0aW9uKCkgeyBtYXJrZXIub3BlbkluZm9XaW5kb3dIdG1sKGh0bWwpOyB9KTsgfScsJHRoaXMtPndpbmRvd190cmlnZ2VyKSAuICJcbiI7CiAgICAgICAgfQogICAgICAgICRfb3V0cHV0IC49ICdwb2ludHNbY291bnRlcl0gPSBwb2ludDsnIC4gIlxuIjsKICAgICAgICAkX291dHB1dCAuPSAnbWFya2Vyc1tjb3VudGVyXSA9IG1hcmtlcjsnIC4gIlxuIjsKICAgICAgICBpZigkdGhpcy0+c2lkZWJhcikgeyAgICAgICAgCiAgICAgICAgICAgICRfb3V0cHV0IC49ICdtYXJrZXJfaHRtbFtjb3VudGVyXSA9IGh0bWw7JyAuICJcbiI7CiAgICAgICAgICAgICRfb3V0cHV0IC49ICJzaWRlYmFyX2h0bWwgKz0gJzxsaSBjbGFzcz1cImdtYXBTaWRlYmFySXRlbVwiIGlkPVwiZ21hcFNpZGViYXJJdGVtXycrIGNvdW50ZXIgKydcIj48YSBocmVmPVwiamF2YXNjcmlwdDpjbGlja19zaWRlYmFyKCcgKyBjb3VudGVyICsgJylcIj4nICsgdGl0bGUgKyAnPFwvYT48XC9saT4nOyIgLiAiXG4iOwogICAgICAgIH0KICAgICAgICAkX291dHB1dCAuPSAnY291bnRlcisrOycgLiAiXG4iOwogICAgICAgICRfb3V0cHV0IC49ICdyZXR1cm4gbWFya2VyOycgLiAiXG4iOwogICAgICAgICRfb3V0cHV0IC49ICd9JyAuICJcbiI7CiAgICAgICAgcmV0dXJuICRfb3V0cHV0OwogICAgfQoKICAgIC8qKgogICAgICogcHJpbnQgbWFwIChwdXQgYXQgbG9jYXRpb24gbWFwIHdpbGwgYXBwZWFyKQogICAgICogCiAgICAgKi8KICAgIGZ1bmN0aW9uIHByaW50TWFwKCkgewogICAgICAgIGVjaG8gJHRoaXMtPmdldE1hcCgpOwogICAgfQoKICAgIC8qKgogICAgICogcmV0dXJuIG1hcAogICAgICogCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldE1hcCgpIHsKICAgICAgICAkX291dHB1dCA9ICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgY2hhcnNldD0idXRmLTgiPicgLiAiXG4iIC4gJy8vPCFbQ0RBVEFbJyAuICJcbiI7CiAgICAgICAgJF9vdXRwdXQgLj0gJ2lmIChHQnJvd3NlcklzQ29tcGF0aWJsZSgpKSB7JyAuICJcbiI7CiAgICAgICAgaWYoc3RybGVuKCR0aGlzLT53aWR0aCkgPiAwICYmIHN0cmxlbigkdGhpcy0+aGVpZ2h0KSA+IDApIHsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gc3ByaW50ZignZG9jdW1lbnQud3JpdGUoXCc8ZGl2IGlkPSIlcyIgc3R5bGU9IndpZHRoOiAlczsgaGVpZ2h0OiAlcyI+PFwvZGl2PlwnKTsnLCR0aGlzLT5tYXBfaWQsJHRoaXMtPndpZHRoLCR0aGlzLT5oZWlnaHQpIC4gIlxuIjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkX291dHB1dCAuPSBzcHJpbnRmKCdkb2N1bWVudC53cml0ZShcJzxkaXYgaWQ9IiVzIj48XC9kaXY+XCcpOycsJHRoaXMtPm1hcF9pZCkgLiAiXG4iOyAgICAgCiAgICAgICAgfQogICAgICAgICRfb3V0cHV0IC49ICd9JzsKCiAgICAgICAgaWYoIWVtcHR5KCR0aGlzLT5qc19hbGVydCkpIHsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJyBlbHNlIHsnIC4gIlxuIjsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gc3ByaW50ZignZG9jdW1lbnQud3JpdGUoXCclc1wnKTsnLCBzdHJfcmVwbGFjZSgnLycsJ1wvJywkdGhpcy0+anNfYWxlcnQpKSAuICJcbiI7CiAgICAgICAgICAgICRfb3V0cHV0IC49ICd9JyAuICJcbiI7CiAgICAgICAgfQoKICAgICAgICAkX291dHB1dCAuPSAnLy9dXT4nIC4gIlxuIiAuICc8L3NjcmlwdD4nIC4gIlxuIjsKCiAgICAgICAgaWYoIWVtcHR5KCR0aGlzLT5qc19hbGVydCkpIHsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJzxub3NjcmlwdD4nIC4gJHRoaXMtPmpzX2FsZXJ0IC4gJzwvbm9zY3JpcHQ+JyAuICJcbiI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJF9vdXRwdXQ7CiAgICB9CgogICAgCiAgICAvKioKICAgICAqIHByaW50IHNpZGViYXIgKHB1dCBhdCBsb2NhdGlvbiBzaWRlYmFyIHdpbGwgYXBwZWFyKQogICAgICogCiAgICAgKi8KICAgIGZ1bmN0aW9uIHByaW50U2lkZWJhcigpIHsKICAgICAgICBlY2hvICR0aGlzLT5nZXRTaWRlYmFyKCk7CiAgICB9ICAgIAoKICAgIC8qKgogICAgICogcmV0dXJuIHNpZGViYXIgaHRtbAogICAgICogCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFNpZGViYXIoKSB7CiAgICAgICAgcmV0dXJuIHNwcmludGYoJzxkaXYgaWQ9IiVzIj48L2Rpdj4nLCR0aGlzLT5zaWRlYmFyX2lkKSAuICJcbiI7CiAgICB9ICAgIAogICAgICAgICAgICAKICAgIC8qKgogICAgICogZ2V0IHRoZSBnZW9jb2RlIGxhdC9sb24gcG9pbnRzIGZyb20gZ2l2ZW4gYWRkcmVzcwogICAgICogbG9vayBpbiBjYWNoZSBmaXJzdCwgb3RoZXJ3aXNlIGdldCBmcm9tIFlhaG9vCiAgICAgKiAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFkZHJlc3MKICAgICAqLwogICAgZnVuY3Rpb24gZ2V0R2VvY29kZSgkYWRkcmVzcykgewogICAgICAgIGlmKGVtcHR5KCRhZGRyZXNzKSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICAkX2dlb2NvZGUgPSBmYWxzZTsKCiAgICAgICAgaWYoKCRfZ2VvY29kZSA9ICR0aGlzLT5nZXRDYWNoZSgkYWRkcmVzcykpID09PSBmYWxzZSkgewogICAgICAgICAgICBpZigoJF9nZW9jb2RlID0gJHRoaXMtPmdlb0dldENvb3JkcygkYWRkcmVzcykpICE9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgJHRoaXMtPnB1dENhY2hlKCRhZGRyZXNzLCAkX2dlb2NvZGVbJ2xvbiddLCAkX2dlb2NvZGVbJ2xhdCddKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gJF9nZW9jb2RlOwogICAgfQogICAKICAgIC8qKgogICAgICogZ2V0IHRoZSBnZW9jb2RlIGxhdC9sb24gcG9pbnRzIGZyb20gY2FjaGUgZm9yIGdpdmVuIGFkZHJlc3MKICAgICAqIAogICAgICogQHBhcmFtIHN0cmluZyAkYWRkcmVzcwogICAgICovCiAgICBmdW5jdGlvbiBnZXRDYWNoZSgkYWRkcmVzcykgewogICAgICAgIGlmKCFpc3NldCgkdGhpcy0+ZHNuKSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIAogICAgICAgICRfcmV0ID0gYXJyYXkoKTsKICAgICAgICAKICAgICAgICAvLyBQRUFSIERCCiAgICAgICAgcmVxdWlyZV9vbmNlKCdEQi5waHAnKTsgICAgICAgICAgCiAgICAgICAgJF9kYiA9JiBEQjo6Y29ubmVjdCgkdGhpcy0+ZHNuKTsKICAgICAgICBpZiAoUEVBUjo6aXNFcnJvcigkX2RiKSkgewogICAgICAgICAgICBkaWUoJF9kYi0+Z2V0TWVzc2FnZSgpKTsKICAgICAgICB9CgkJJF9yZXMgPSYgJF9kYi0+cXVlcnkoIlNFTEVDVCBsb24sbGF0IEZST00geyR0aGlzLT5fZGJfY2FjaGVfdGFibGV9IHdoZXJlIGFkZHJlc3MgPSA/IiwgJGFkZHJlc3MpOwogICAgICAgIGlmIChQRUFSOjppc0Vycm9yKCRfcmVzKSkgewogICAgICAgICAgICBkaWUoJF9yZXMtPmdldE1lc3NhZ2UoKSk7CiAgICAgICAgfQogICAgICAgIGlmKCRfcm93ID0gJF9yZXMtPmZldGNoUm93KCkpIHsgICAgICAgICAgICAKICAgICAgICAgICAgJF9yZXRbJ2xvbiddID0gJF9yb3dbMF07CiAgICAgICAgICAgICRfcmV0WydsYXQnXSA9ICRfcm93WzFdOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAkX2RiLT5kaXNjb25uZWN0KCk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuICFlbXB0eSgkX3JldCkgPyAkX3JldCA6IGZhbHNlOwogICAgfQogICAgCiAgICAvKioKICAgICAqIHB1dCB0aGUgZ2VvY29kZSBsYXQvbG9uIHBvaW50cyBpbnRvIGNhY2hlIGZvciBnaXZlbiBhZGRyZXNzCiAgICAgKiAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFkZHJlc3MKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxvbiB0aGUgbWFwIGxhdGl0dWRlIChob3Jpem9udGFsKQogICAgICogQHBhcmFtIHN0cmluZyAkbGF0IHRoZSBtYXAgbGF0aXR1ZGUgKHZlcnRpY2FsKQogICAgICovCiAgICBmdW5jdGlvbiBwdXRDYWNoZSgkYWRkcmVzcywgJGxvbiwgJGxhdCkgewogICAgICAgIGlmKCFpc3NldCgkdGhpcy0+ZHNuKSB8fCAoc3RybGVuKCRhZGRyZXNzKSA9PSAwIHx8IHN0cmxlbigkbG9uKSA9PSAwIHx8IHN0cmxlbigkbGF0KSA9PSAwKSkKICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgLy8gUEVBUiBEQgogICAgICAgIHJlcXVpcmVfb25jZSgnREIucGhwJyk7ICAgICAgICAgIAogICAgICAgICRfZGIgPSYgREI6OmNvbm5lY3QoJHRoaXMtPmRzbik7CiAgICAgICAgaWYgKFBFQVI6OmlzRXJyb3IoJF9kYikpIHsKICAgICAgICAgICAgZGllKCRfZGItPmdldE1lc3NhZ2UoKSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgICRfcmVzID0mICRfZGItPnF1ZXJ5KCdpbnNlcnQgaW50byAnLiR0aGlzLT5fZGJfY2FjaGVfdGFibGUuJyB2YWx1ZXMgKD8sID8sID8pJywgYXJyYXkoJGFkZHJlc3MsICRsb24sICRsYXQpKTsKICAgICAgICBpZiAoUEVBUjo6aXNFcnJvcigkX3JlcykpIHsKICAgICAgICAgICAgZGllKCRfcmVzLT5nZXRNZXNzYWdlKCkpOwogICAgICAgIH0KICAgICAgICAkX2RiLT5kaXNjb25uZWN0KCk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgCiAgICB9CiAgIAogICAgLyoqCiAgICAgKiBnZXQgZ2VvY29kZSBsYXQvbG9uIHBvaW50cyBmb3IgZ2l2ZW4gYWRkcmVzcyBmcm9tIFlhaG9vCiAgICAgKiAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFkZHJlc3MKICAgICAqLwogICAgZnVuY3Rpb24gZ2VvR2V0Q29vcmRzKCRhZGRyZXNzLCRkZXB0aD0wKSB7CiAgICAgICAgCiAgICAgICAgc3dpdGNoKCR0aGlzLT5sb29rdXBfc2VydmljZSkgewogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgY2FzZSAnR09PR0xFJzoKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgJF91cmwgPSBzcHJpbnRmKCdodHRwOi8vJXMvbWFwcy9nZW8/JnE9JXMmb3V0cHV0PWNzdiZrZXk9JXMnLCR0aGlzLT5sb29rdXBfc2VydmVyWydHT09HTEUnXSxyYXd1cmxlbmNvZGUoJGFkZHJlc3MpLCR0aGlzLT5hcGlfa2V5KTsKCiAgICAgICAgICAgICAgICAkX3Jlc3VsdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZigkX3Jlc3VsdCA9ICR0aGlzLT5mZXRjaFVSTCgkX3VybCkpIHsKCiAgICAgICAgICAgICAgICAgICAgJF9yZXN1bHRfcGFydHMgPSBleHBsb2RlKCcsJywkX3Jlc3VsdCk7CiAgICAgICAgICAgICAgICAgICAgaWYoJF9yZXN1bHRfcGFydHNbMF0gIT0gMjAwKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgJF9jb29yZHNbJ2xhdCddID0gJF9yZXN1bHRfcGFydHNbMl07CiAgICAgICAgICAgICAgICAgICAgJF9jb29yZHNbJ2xvbiddID0gJF9yZXN1bHRfcGFydHNbM107CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAKICAgICAgICAgICAgY2FzZSAnWUFIT08nOgogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICRfdXJsID0gJ2h0dHA6Ly8lcy9NYXBzU2VydmljZS9WMS9nZW9jb2RlJzsKICAgICAgICAgICAgICAgICRfdXJsIC49IHNwcmludGYoJz9hcHBpZD0lcyZsb2NhdGlvbj0lcycsJHRoaXMtPmxvb2t1cF9zZXJ2ZXJbJ1lBSE9PJ10sJHRoaXMtPmFwcF9pZCxyYXd1cmxlbmNvZGUoJGFkZHJlc3MpKTsKCiAgICAgICAgICAgICAgICAkX3Jlc3VsdCA9IGZhbHNlOwoKICAgICAgICAgICAgICAgIGlmKCRfcmVzdWx0ID0gJHRoaXMtPmZldGNoVVJMKCRfdXJsKSkgewoKICAgICAgICAgICAgICAgICAgICBwcmVnX21hdGNoKCchPExhdGl0dWRlPiguKik8L0xhdGl0dWRlPjxMb25naXR1ZGU+KC4qKTwvTG9uZ2l0dWRlPiFVJywgJF9yZXN1bHQsICRfbWF0Y2gpOwoKICAgICAgICAgICAgICAgICAgICAkX2Nvb3Jkc1snbG9uJ10gPSAkX21hdGNoWzJdOwogICAgICAgICAgICAgICAgICAgICRfY29vcmRzWydsYXQnXSA9ICRfbWF0Y2hbMV07CgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9ICAgICAgICAgCiAgICAgICAgCiAgICAgICAgcmV0dXJuICRfY29vcmRzOyAgICAgICAKICAgIH0KICAgIAogICAgCgogICAgLyoqCiAgICAgKiBmZXRjaCBhIFVSTC4gT3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gY2hhbmdlIHRoZSB3YXkgVVJMcyBhcmUgZmV0Y2hlZC4KICAgICAqIAogICAgICogQHBhcmFtIHN0cmluZyAkdXJsCiAgICAgKi8KICAgIGZ1bmN0aW9uIGZldGNoVVJMKCR1cmwpIHsKCiAgICAgICAgcmV0dXJuIGZpbGVfZ2V0X2NvbnRlbnRzKCR1cmwpOwoKICAgIH0KCiAgICAvKioKICAgICAqIGdldCBkaXN0YW5jZSBiZXR3ZWVuIHRvIGdlb2Nvb3JkcyB1c2luZyBncmVhdCBjaXJjbGUgZGlzdGFuY2UgZm9ybXVsYQogICAgICogCiAgICAgKiBAcGFyYW0gZmxvYXQgJGxhdDEKICAgICAqIEBwYXJhbSBmbG9hdCAkbGF0MgogICAgICogQHBhcmFtIGZsb2F0ICRsb24xCiAgICAgKiBAcGFyYW0gZmxvYXQgJGxvbjIKICAgICAqIEBwYXJhbSBmbG9hdCAkdW5pdCAgIE09bWlsZXMsIEs9a2lsb21ldGVycywgTj1uYXV0aWNhbCBtaWxlcywgST1pbmNoZXMsIEY9ZmVldAogICAgICovCiAgICBmdW5jdGlvbiBnZW9HZXREaXN0YW5jZSgkbGF0MSwkbG9uMSwkbGF0MiwkbG9uMiwkdW5pdD0nTScpIHsKICAgICAgICAKICAgICAgLy8gY2FsY3VsYXRlIG1pbGVzCiAgICAgICRNID0gIDY5LjA5ICogcmFkMmRlZyhhY29zKHNpbihkZWcycmFkKCRsYXQxKSkgKiBzaW4oZGVnMnJhZCgkbGF0MikpICsgIGNvcyhkZWcycmFkKCRsYXQxKSkgKiBjb3MoZGVnMnJhZCgkbGF0MikpICogY29zKGRlZzJyYWQoJGxvbjEgLSAkbG9uMikpKSk7IAoKICAgICAgc3dpdGNoKHN0cnRvdXBwZXIoJHVuaXQpKQogICAgICB7CiAgICAgICAgY2FzZSAnSyc6CiAgICAgICAgICAvLyBraWxvbWV0ZXJzCiAgICAgICAgICByZXR1cm4gJE0gKiAxLjYwOTM0NDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ04nOgogICAgICAgICAgLy8gbmF1dGljYWwgbWlsZXMKICAgICAgICAgIHJldHVybiAkTSAqIDAuODY4OTc2MjQyOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnRic6CiAgICAgICAgICAvLyBmZWV0CiAgICAgICAgICByZXR1cm4gJE0gKiA1MjgwOwogICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCiAgICAgICAgY2FzZSAnSSc6CiAgICAgICAgICAvLyBpbmNoZXMKICAgICAgICAgIHJldHVybiAkTSAqIDYzMzYwOwogICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCiAgICAgICAgY2FzZSAnTSc6CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIC8vIG1pbGVzCiAgICAgICAgICByZXR1cm4gJE07CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgICAKICAgIH0gICAgCiAgICAKfQoKPz4K]]></data>
	</file>
	<file>
	  <filename>/lib/GoogleMapAPI-2.5/NEWS</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Mi4wCi0tLQoKKiBjb252ZXJ0ZWQgbWFwIHR5cGUgY29uc3RhbnRzIHRvIEdfTk9STUFMX01BUCwgR19TQVRFTExJVEVfTUFQLCBHX0hZQlJJRF9NQVAsCiAgZm9yIHZlcnNpb24gMiBvZiBHb29nbGUgTWFwIGFwaS4KKiBmaXhlZCB1cCBkcml2aW5nIGRpcmVjdGlvbiBIVE1MLCByZW1vdmUgPHA+LCBhZGQgPGRpdj4gKEpvaG4gU2NodWx6LCBtb250ZSkKKiBNb3ZlZCB0byB2ZXJzaW9uIDIgb2YgdGhlIEdvb2dsZSBNYXBzIEpTIEFQSS4gKGNsYXJrKQogIE5vdyB1c2UgdGhlIEdNYXAyIGNsYXNzIGluc3RlYWQgb2YgR01hcCBhbmQgR0xhdExuZyBpbnN0ZWFkIG9mCiAgR1BvaW50IChmb3IgbGF0L2xvbiBwYWlycykgYWxvbmcgd2l0aCBvdGhlciBtaW5vciBjaGFuZ2VzLiAKKiB6b29tIGVuY29tcGFzcyBsb29wIHJlcGxhY2VkIGJ5IGEgbmV3IG9mZmljaWFsIGZ1bmN0aW9uLCBtYXAuZ2V0Qm91bmRzWm9vbUxldmVsKGJkcyksCiAgd2hpY2ggcmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgem9vbSBsZXZlbCBmb3IgYSBnaXZlbiBHQm91bmRzIG9iamVjdC4gKGNsYXJrKQoqIENvbnZlcnRlZCB0aHJlZSBzZWN0aW9ucyBvZiB0aGUgZ2V0TWFwSlMoKSBmdW5jdGlvbiBpbnRvIHRoZWlyIG93biBmdW5jdGlvbnM6CiAgZ2V0QWRkTWFya2Vyc0pTKCksIGdldFBvbHlsaW5lSlMoKSwgYW5kIGdldENyZWF0ZU1hcmtlckpTKCksIHNvIHRoYXQgdGhleSBjYW4gYmUgZXh0ZW5kZWQKICBieSBzdWJjbGFzc2VzLiAoY2xhcmspCiogZml4IHpvb20gZW5jb21wYXNzIGZ1ZGdlIGZhY3RvciBidWc7IG5vdyBhcHBseSB0aGUgZnVkZ2UgZmFjdG9yIGluCiAgZ2V0TWFwSlMoKSwganVzdCBiZWZvcmUgd2Ugem9vbS4gKGNsYXJrKQoqIGFkZE1hcmtlckJ5QWRkcmVzcyBhbmQgYWRkUG9seUxpbmVCeUFkZHJlc3Mgbm93IGNhbGwgYWRkTWFya2VyQnlDb29yZHMKICBhbmQgYWRkUG9seUxpbmVCeUNvb3JkcyBpbnN0ZWFkIG9mIGR1cGxpY2F0aW5nIHRoZSBjb2RlIChjbGFyaykKKiBhZGRlZCBzZXRCb3VuZHNGdWRnZSgpIChjbGFyaykKCjEuNwotLS0KCiogZml4IGNvbXBhdGFiaWxpdHkgcHJvYmxlbSB3aXRoIG9sZGVyIFBIUAogIChjaGFuZ2UgcHJpbnRfciB0byBzZXJpYWxpemUpIChtb250ZSkKKiBmaXggYnVnIHdpdGggc2lkZWJhciBpbmRleCBjb3VudGVyIChtb250ZSkKKiBtYWtlIG1hcCBkaXJlY3Rpb24gaHRtbCBtb3JlIGNvbmZpZ3VyYWJsZSB3aXRoIGNzcyBhbmQganMgKG1vbnRlKQoqIGFkZGVkIG1vcmUgZXJyb3IgY2hlY2tpbmcgdG8gZ29vZ2xlIGdlb2Nvb3JkIGxvb2t1cHMgKG1vbnRlKQoqIGFkZCBmdWRnZSBmYWN0b3IgdG8gem9vbV9lbmNvbXBhc3Mgc28gbWFya2VycwogIGFyZSBhd2F5IGZyb20gdGhlIGVkZ2VzIChtb250ZSkKCjEuNgotLS0KCiogbW92ZSBkcml2aW5nIGRpciBvdXRwdXQgdG8gcHJvcGVydHkgdmFyIChtb250ZSkKKiBhZGQgPGRpdj4gaWRzIHRvIGRyaXZpbmcgZGlycyAobW9udGUpCiogZml4IHByb2JsZW0gd2l0aCBxdW90ZXMgaW4gdGl0bGVzIG9mIGRyaXZpbmcgZGlyIChtb250ZSkKKiBmaXggZHJpdmluZyBkaXIgd3JhcHBpbmcgKG1vbnRlKQoqIGZpeCBwcm9ibGVtIHdpdGggZW1wdHkgbGF0L2xvbiB2YWx1ZXMgKG1vbnRlKQoqIG1vdmUgc29tZSBqcyBmdW5jcyBhcm91bmQsIHRlc3QgZm9yIG1hcCA8ZGl2PiB0YWcgKG1vbnRlKQoqIGRvbid0IHN1cHBseSBzdHlsZSB0YWdzIHRvIDxkaXY+IGlmIHdpZHRoIGFuZCBoZWlnaHQgZW1wdHkgKG1vbnRlKQoqIGFkZCBqcyBmdW5jdGlvbiBzaG93X2luZm9fd2luZG93KCkgKG1vbnRlKQoqIHRyYWNrIHBvaW50cyBhbmQgbWFya2VycyBpbiBnbG9iYWwganMgYXJyYXlzIChtb250ZSkKKiBtYWtlIHRoZSBtYXAganMgdmFyIGdsb2JhbCAobW9udGUpCiogZml4IGJ1ZyB3aXRoIGljb24gYW5jaG9yIHBvc2l0aW9uaW5nIChtb250ZSkKKiBhZGQgZW5hYmxlSW5mb1dpbmRvdygpIGFuZCBkaXNhYmxlSW5mb1dpbmRvdygpIChtb250ZSkKKiByZW1vdmUgdW51c2VkIG1lc3NhZ2VfaWQgKG1vbnRlKQoKMS41Ci0tLQoKKiBhZGQgc2V0TG9va3VwU2VydmljZSgpIHRvIHN3aXRjaCBiZXR3ZWVuIGdlb2NvZGUgbG9va3VwIHNlcnZpY2VzIChtb250ZSkKKiBhZGQgYWRkTWFya2VySWNvbigpIGZvciBzZXR0aW5nIGljb25zIGZvciBpbmRpdmlkdWFsIG1hcCBtYXJrZXJzIChDbGFyayBGcmVpZmVsZCkKKiBhZGQgJHpvb21fZW5jb21wYXNzIHNvIGRlZmF1bHQgbWFwIHpvb20gY2xvc2VseSBlbmNvbXBhc3NlcyBtYXAgbWFya2VycyAoQ2xhcmsKRnJpZWZlbGQpCiogY2hhbmdlIG1hcmtkZXIgZGVmYXVsdHMgdG8gbW9yZSBjbG9zZWx5IG1hdGNoIGdvb2dsZSBtYXAgZGVmYXVsdHMgd2hlbiBub25lCmFyZSBnaXZlbiAoQ2xhcmsgRnJlaWZlbGQpCgoxLjQKLS0tCgoqIHNwbGl0IG91dCBVUkwgZmV0Y2hpbmcgdG8gaXRzIG93biBtZXRob2Qgc28gaXQgY2FuIGJlIGVhc2lseSBvdmVycmlkZGVuIChtb250ZSkKKiB3cmFwIDxkaXY+IHRhZ3MgaW5zaWRlIGphdmFzY3JpcHQgZm9yIGJyb3dzZXIgY29tcGF0YWJpbGl0eSAoSmFrZSBLcm9obiwgbW9udGUpCiogbWFrZSBIVE1MIG1hcmtlcnMgZGlzcGxheSBwcm9wZXJseSBpbiBmaXJlZm94IDEuNSAoSmFrZSBLcm9obiwgbW9udGUpCiogZml4ZWQgYnVnIHdpdGggc2lkZWJhciBkaXNhYmxlZCAobW9udGUpCgoxLjMKLS0tCgoqIHJlbW92ZSBkZWJ1ZyBwcmludF9yIHN0YXRlbWVudCBmcm9tIGdlb0dldENvb3JkcygpIGZ1bmN0aW9uIChtb250ZSkKKiBmaXhlZCBidWcgd2hlbiBzZXR0aW5nIG1hcCB0eXBlIGFuZCBkaXNhYmxpbmcgbWFwIGNvbnRyb2xzIChKb2huIEZyYW5jaXMgTGVlLCBtb250ZSkKCjEuMgotLS0KCiogYWRkZWQgVVRGLTggY2hhcnNldCBzZXR0aW5nIHRvIDxqYXZhc2NyaXB0PiB0YWdzIHRvIHdvcmsgd2l0aCBJRSBpbiBhbGwgbGFuZ3MgKEtBRE8sIG1vbnRlKQoqIGZpeCBpc3N1ZSB3aXRoIG11bHRpcGxlIGxhdC9sb24gZmluZGluZ3MgZnJvbSB5YWhvbyAoYW5kaWcsbW9udGUpCiogYWRkIHNldE1hcFR5cGUoKSBmdW5jdGlvbiAoSXNpZG9yMTI4LG1vbnRlKQoqIGFsbG93IGRvdWJsZSBxdW90ZXMgaW4gdGl0bGUvaHRtbCBvZiBtYXJrZXJzIChtb250ZSkKKiBhbGxvdyB3aWR0aC9oZWlnaHQgaW4gZWl0aGVyIHB4IG9yICUgKFRHS25JZ2h0LG1vbnRlKQoqIGFkZCBzZXRab29tTGV2ZWwoKSBmdW5jdGlvbiAobW9udGUpCgoxLjEKLS0tCgoqIHJlcGxhY2VkIEdvb2dsZU1hcEFQSS5jbGFzcy5waHAgd2l0aCBHT09EIHZlcnNpb24sIDEuMCBoYWQgaW5jb3JyZWN0IGZpbGUhCgoxLjAKLS0tCgppbml0aWFsIHJlbGVhc2UK]]></data>
	</file>
	<file>
	  <filename>/lib/GoogleMapAPI-2.5/README</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[TkFNRToKCiAgICBHb29nbGVNYXBBUEkgLSBBIGxpYnJhcnkgdXNlZCBmb3IgY3JlYXRpbmcgZ29vZ2xlIG1hcHMuCgpBVVRIT1I6CiAgICBNb250ZSBPaHJ0IDxtb250ZSBbQVRdIG9ocnQgW0RPVF0gY29tPgoKTEFURVNUIFZFUlNJT046CiAgICAyLjAgLSBBcHJpbCAyN3RoLCAyMDA2CgpTWU5PUFNJUzoKCiAgICA8P3BocAogICAgcmVxdWlyZSgnR29vZ2xlTWFwQVBJLmNsYXNzLnBocCcpOwoKICAgIC8vIHBhc3MgeWFob28gYXBwIGlkIChzb21ldGhpbmcgdW5pcXVlKSBpZiB5b3UgYXJlIHVzaW5nIHRoZQogICAgLy8gWUFIT08gbG9va3VwIHNlcnZpY2UsIHdoaWNoIGlzIGRlZmF1bHQKICAgICRtYXAgPSBuZXcgR29vZ2xlTWFwQVBJKCdtYXAnLCAnWW91cllhaG9vQXBwSWQnKTsKICAgIC8vIHNldHVwIGRhdGFiYXNlIGZvciBnZW9jb2RlIGNhY2hpbmcKICAgICRtYXAtPnNldERTTignbXlzcWw6Ly9VU0VSOlBBU1NAbG9jYWxob3N0L0dFT0NPREVTJyk7CiAgICAvLyBlbnRlciBZT1VSIEdvb2dsZSBNYXAgS2V5CiAgICAkbWFwLT5zZXRBUElLZXkoJ1lPVVJHT09HTEVNQVBLRVknKTsKICAgIAogICAgLy8gY3JlYXRlIHNvbWUgbWFwIG1hcmtlcnMKICAgICRtYXAtPmFkZE1hcmtlckJ5QWRkcmVzcygnNjIxIE4gNDh0aCBTdCAjIDYgTGluY29sbiBORSA2ODUwMicsJ1BKIFBpenphJywnPGI+UEogUGl6emE8L2I+Jyk7CiAgICAkbWFwLT5hZGRNYXJrZXJCeUFkZHJlc3MoJzgyNiBQIFN0IExpbmNvbG4gTkUgNjg1MDInLCdPbGQgQ2hpY2FnbycsJzxiPk9sZCBDaGljYWdvPC9iPicpOwogICAgJG1hcC0+YWRkTWFya2VyQnlBZGRyZXNzKCczNDU3IEhvbGRyZWdlIFN0IExpbmNvbG4gTkUgNjg1MDInLCJWYWxlbnRpbm8ncyIsIjxiPlZhbGVudGlubydzPC9iPiIpOwogICAgPz4KCiAgICA8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CiAgICA8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sbnM6dj0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiPgogICAgPGhlYWQ+CiAgICA8P3BocCAkbWFwLT5wcmludEhlYWRlckpTKCk7ID8+CiAgICA8P3BocCAkbWFwLT5wcmludE1hcEpTKCk7ID8+CiAgICA8IS0tIG5lY2Vzc2FyeSBmb3IgZ29vZ2xlIG1hcHMgcG9seWxpbmUgZHJhd2luZyBpbiBJRSAtLT4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiAgICAgIHZcOiogewogICAgICAgIGJlaGF2aW9yOnVybCgjZGVmYXVsdCNWTUwpOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPC9oZWFkPgogICAgPGJvZHkgb25sb2FkPSJvbkxvYWQoKSI+CiAgICA8dGFibGUgYm9yZGVyPTE+CiAgICA8dHI+PHRkPgogICAgPD9waHAgJG1hcC0+cHJpbnRNYXAoKTsgPz4KICAgIDwvdGQ+PHRkPgogICAgPD9waHAgJG1hcC0+cHJpbnRTaWRlYmFyKCk7ID8+CiAgICA8L3RkPjwvdHI+CiAgICA8L3RhYmxlPgogICAgPC9ib2R5PgogICAgPC9odG1sPgoKCgpPVVRQVVQ6CgogICAgVmlldyB0aGUgb3V0cHV0IG9mIHRoZSBhYm92ZSBleGFtcGxlIGhlcmU6CgogICAgaHR0cDovL3d3dy5waHBpbnNpZGVyLmNvbS9waHAvY29kZS9Hb29nbGVNYXBBUEkvZGVtby8KCiAgICAKREVTQ1JJUFRJT046CgogICAgR29vZ2xlTWFwQVBJIC0gQSBsaWJyYXJ5IHVzZWQgZm9yIGNyZWF0aW5nIGdvb2dsZSBtYXBzIHVzaW5nIHRoZQogICAgR29vZ2xlIE1hcCBwdWJsaWMgQVBJLiBGZWF0dXJlcyBpbmNsdWRlIG11bHRpcGxlIG1hcCBtYXJrZXJzLCBjdXN0b21pemFibGUKICAgIGljb25zLCBtYXAgZGlyZWN0aW9ucyBidWlsdCBpbnRvIGluZm8gd2luZG93LCBhbmQgc2lkZWJhciBnZW5lcmF0aW9uLgogICAgCiAgICBNb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBHb29nbGUgTWFwIEFQSSBjYW4gYmUgZm91bmQgaGVyZToKICAgIAogICAgaHR0cDovL3d3dy5nb29nbGUuY29tL2FwaXMvbWFwcy8KICAgIAoKQkFTRSBDTEFTUyBNRVRIT0RTOgotLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgR29vZ2xlTWFwQVBJKCRtYXBfaWQgPSAnbWFwJywgJGFwcF9pZCA9ICdNeU1hcEFwcCcpCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIAogICAgICAgIENsYXNzIENvbnN0cnVjdG9yLgogICAgICAgIFRoZSBtYXAgaWQgaXMgbmVlZGVkIG9ubHkgaWYgeW91IGhhdmUgbXVsdGlwbGUgbWFwcyBvbiB0aGUgc2FtZSBwYWdlLgogICAgICAgIFRoZSBBcHAgSUQgaXMgdXNlZCBmb3IgdGhlIFlhaG9vIEdlb0NvZGUgQVBJLCB3aGljaCBpcyB0aGUgZGVmYXVsdAogICAgICAgIGxvb2t1cCBzZXJ2aWNlLiBVc2UgYSB1bmlxdWUgQXBwIElEIHBlciBhcHBsaWNhdGlvbi4KICAgICAgICAKICAgICAgICBFeGFtcGxlOgogICAgICAgIAogICAgICAgIC8vIHVzZSBkZWZhdWx0cwogICAgICAgICRtYXAgPSBuZXcgR29vZ2xlTWFwQVBJKCk7CgogICAgICAgIC8vIHNldCBjdXN0b20gbWFwIGlkIGFuZCBhcHAgaWQKICAgICAgICAkbWFwID0gbmV3IEdvb2dsZU1hcEFQSSgnbXltYXAnLCdteWFwcCcpOwoKCiAgICBzZXREU04oJGRzbikKICAgIC0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgVXNlZCB0byBzZXQgdGhlIGRhdGFiYXNlIERTTi4gVGhlIGRhdGFiYXNlIGlzIHVzZWQgdG8gY2FjaGUKICAgICAgICBnZW9jb2RlIGxvb2t1cHMgKGhpZ2hseSByZWNvbW1lbmRlZCEpIFRoZSBQRUFSOjpEQiBtb2R1bGUKICAgICAgICBpcyByZXF1aXJlZCBmb3IgZGF0YWJhc2UgYWNjZXNzLiBZb3Ugd2lsbCBuZWVkIHRvIGNyZWF0ZQogICAgICAgIHRoZSBmb2xsb3dpbmcgZGF0YWJhc2Ugc2NoZW1hIChteXNxbCBleGFtcGxlIGdpdmVuKToKICAgICAgICAKICAgICAgICBDUkVBVEUgVEFCTEUgR0VPQ09ERVMgKAogICAgICAgICAgYWRkcmVzcyB2YXJjaGFyKDI1NSkgTk9UIE5VTEwgZGVmYXVsdCAnJywKICAgICAgICAgIGxvbiBmbG9hdCBkZWZhdWx0IE5VTEwsCiAgICAgICAgICBsYXQgZmxvYXQgZGVmYXVsdCBOVUxMLAogICAgICAgICAgUFJJTUFSWSBLRVkgIChhZGRyZXNzKQogICAgICAgICk7CiAgICAgICAgCiAgICAgICAgRXhhbXBsZToKICAgICAgICAKICAgICAgICAkbWFwLT5zZXREU04oJ215c3FsOi8vREJVU0VSOkRCUEFTU0BEQkhPU1QvREJOQU1FJyk7CiAgICAgICAgJG1hcC0+c2V0RFNOKCdteXNxbDovL2dlbzpmb29iYXJAbG9jYWxob3N0L0dFT0NPREVTJyk7CgogICAgCiAgICBzZXRBUElLZXkoJGtleSkKICAgIC0tLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgU2V0cyB0aGUgR29vZ2xlIE1hcCBBUEkgS2V5LiBUaGlzIGlzIG1hbmRhdG9yeSwgeW91IHdpbGwgbmVlZAogICAgICAgIGFuIEFQSSBLZXkgZm9yIHlvdXIgaG9zdG5hbWUhIFlvdSBjYW4gcmVnaXN0ZXIgZnJlZSBoZXJlOgogICAgICAgIAogICAgICAgIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9hcGlzL21hcHMvc2lnbnVwLmh0bWwKCiAgICAgICAgRXhhbXBsZToKICAgICAgICAKICAgICAgICAvLyBlbnRlciBZT1VSIHJlZ2lzdGVyZWQgQVBJIEtleQogICAgICAgICRtYXAtPnNldEFQSUtleSgnQUJRSUFBQUF4cDVGRi1BMFJoSE9ublRCd3JsUmJ4Jyk7CgoKICAgIHNldFdpZHRoKCR3aWR0aCkKICAgIC0tLS0tLS0tLS0tLS0tLS0KICAgIAogICAgICAgIFNldHMgdGhlIHdpZHRoIG9mIHRoZSBtYXAgd2luZG93LiBUaGlzIGNhbiBiZSBlaXRoZXIgcHggb3IgJS4KICAgICAgICBEZWZhdWx0IGlzIDUwMHB4LgogICAgCiAgICAgICAgRXhhbXBsZToKICAgICAgICAKICAgICAgICAkbWFwLT5zZXRXaWR0aCgnNTAwcHgnKTsKICAgICAgICAkbWFwLT5zZXRXaWR0aCgnMTAwJScpOwoKICAgIAogICAgc2V0SGVpZ2h0KCRoZWlnaHQpCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0KICAgIAogICAgICAgIFNldHMgdGhlIGhlaWdodCBvZiB0aGUgbWFwIHdpbmRvdy4gVGhpcyBjYW4gYmUgZWl0aGVyIHB4IG9yICUuCiAgICAgICAgRGVmYXVsdCBpcyAnNTAwcHgnLgogICAgCiAgICAgICAgRXhhbXBsZToKICAgICAgICAKICAgICAgICAkbWFwLT5zZXRIZWlnaHQoJzUwMHB4Jyk7CiAgICAgICAgJG1hcC0+c2V0SGVpZ2h0KCcxMDAlJyk7CiAgICAgICAgCiAgICAgICAgCiAgICBlbmFibGVNYXBDb250cm9scygpCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAKICAgICAgICBUaGlzIHdpbGwgZW5hYmxlIHRoZSBtYXAgY29udHJvbHMgdG8gem9vbS9tb3ZlIGFyb3VuZCB0aGUgbWFwLgogICAgICAgIEVuYWJsZWQgYnkgZGVmYXVsdC4KCgogICAgZGlzYWJsZU1hcENvbnRyb2xzKCkKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAKICAgICAgICBUaGlzIHdpbGwgZGlzYWJsZSB0aGUgbWFwIGNvbnRyb2xzIHRvIHpvb20vbW92ZSBhcm91bmQgdGhlIG1hcC4KICAgICAgICBFbmFibGVkIGJ5IGRlZmF1bHQuCgoKICAgIHNldFpvb21MZXZlbCgpCiAgICAtLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgVGhpcyBzZXRzIHRoZSBkZWZhdWx0IG1hcCB6b29tIGxldmVsLgogICAgICAgIAogICAgICAgIEV4YW1wbGU6CiAgICAgICAgCiAgICAgICAgJG1hcC0+c2V0Wm9vbUxldmVsKDQpOwoKCiAgICBzZXRDb250cm9sU2l6ZSgkc2l6ZSkKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgVGhpcyBzZXRzIHRoZSBtYXAgY29udHJvbCBzaXplLiBSZWxldmFudCBvbmx5IGlmIG1hcCBjb250cm9scyBhcmUKICAgICAgICBlbmFibGVkLiBsYXJnZSA9IG1hcCB6b29tL21vdmUgd2l0aCBzbGlkZXIuIHNtYWxsID0gem9vbS9tb3ZlIHdpdGhvdXQKICAgICAgICBzbGlkZXIuIExhcmdlIGlzIGRlZmF1bHQuCiAgICAgICAgCiAgICAgICAgRXhhbXBsZToKICAgICAgICAKICAgICAgICAkbWFwLT5zZXRDb250cm9sU2l6ZSA9ICdzbWFsbCc7CgoKICAgIGVuYWJsZVR5cGVDb250cm9scygpCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgVGhpcyB3aWxsIGVuYWJsZSB0aGUgbWFwIHR5cGUgY29udHJvbHMgKG1hcC9zYXRlbGxpdGUvaHlicmlkKS4KICAgICAgICBFbmFibGVkIGJ5IGRlZmF1bHQuCgoKICAgIGRpc2FibGVUeXBlQ29udHJvbHMoKQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAKICAgICAgICBUaGlzIHdpbGwgZGlzYWJsZSB0aGUgbWFwIHR5cGUgY29udHJvbHMgKG1hcC9zYXRlbGxpdGUvaHlicmlkKS4KICAgICAgICBFbmFibGVkIGJ5IGRlZmF1bHQuCgoKICAgIHNldE1hcFR5cGUoJHR5cGUpCiAgICAtLS0tLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgVGhpcyBzZXRzIHRoZSBkZWZhdWx0IG1hcCB0eXBlLiBSZWxldmFudCBvbmx5IGlmIG1hcCB0eXBlIGNvbnRyb2xzIGFyZQogICAgICAgIGVuYWJsZWQuIG1hcCA9IGRlZmF1bHQgbWFwLiBzYXRlbGxpdGUgPSBzYXRlbGxpdGUgdmlldy4gaHlicmlkID0gaHlicmlkCiAgICAgICAgdmlldy4KICAgICAgICAKICAgICAgICBFeGFtcGxlOgogICAgICAgIAogICAgICAgICRtYXAtPnNldE1hcFR5cGUoJ21hcCcpOyAvLyBkZWZhdWx0CiAgICAgICAgJG1hcC0+c2V0TWFwVHlwZSgnc2F0ZWxsaXRlJyk7CiAgICAgICAgJG1hcC0+c2V0TWFwVHlwZSgnaHlicmlkJyk7CiAgICAgICAgCiAgICAgICAgCiAgICBlbmFibGVTaWRlYmFyKCkKICAgIC0tLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgVGhpcyBlbmFibGVzIHRoZSBtYXAgc2lkZWJhci4gVXNlIHByaW50U2lkZUJhcigpIG9yIGdldFNpZGVCYXIoKSB0bwogICAgICAgIG91dHB1dCB0aGUgc2lkZWJhciB0ZXh0LiBFbmFibGVkIGJ5IGRlZmF1bHQuCgoKICAgIGRpc2FibGVTaWRlYmFyKCkKICAgIC0tLS0tLS0tLS0tLS0tLS0KICAgIAogICAgICAgIFRoaXMgZGlzYWJsZXMgdGhlIG1hcCBzaWRlYmFyLiBFbmFibGVkIGJ5IGRlZmF1bHQuCgogICAgCiAgICBlbmFibGVEaXJlY3Rpb25zKCkKICAgIC0tLS0tLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgVGhpcyBlbmFibGVzIG1hcCBkaXJlY3Rpb25zIGluIHRoZSBib3R0b20gb2YgdGhlIHBvcC11cCBpbmZvIHdpbmRvdy4KICAgICAgICBFbmFibGVkIGJ5IGRlZmF1bHQuICAgICAgICAKCgogICAgZGlzYWJsZURpcmVjdGlvbnMoKQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgVGhpcyBkaXNhYmxlcyBtYXAgZGlyZWN0aW9ucyBpbiB0aGUgYm90dG9tIG9mIHRoZSBwb3AtdXAgaW5mbyB3aW5kb3cuCiAgICAgICAgRW5hYmxlZCBieSBkZWZhdWx0LgoKICAgIGVuYWJsZVpvb21FbmNvbXBhc3MoKQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAKICAgICAgICBUaGlzIGVuYWJsZXMgem9vbSBlbmNvbXBhc3Mgc28gZGVmYXVsdCBtYXAgem9vbSBpcyBhcyBzbWFsbCBhcyBwb3NzaWJsZQogICAgICAgIGFuZCBpbmNsdWRlIGFsbCBtYXAgbWFya2Vycy4KICAgICAgICBFbmFibGVkIGJ5IERlZmF1bHQuCgogICAgZGlzYWJsZVpvb21FbmNvbXBhc3MoKQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgVGhpcyBkaXNhYmxlcyB6b29tIGVuY29tcGFzcy4KICAgICAgICBFbmFibGVkIGJ5IERlZmF1bHQuICAgICAgICAKCgogICAgc2V0Qm91bmRzRnVkZ2UoJHZhbCkKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAKICAgICAgICBTZXQgdGhlIG1hcCBib3VuZGFyeSBmdWRnZSBmYWN0b3IuIFRoaXMgd2lsbCBhZGp1c3QgaG93IG11Y2ggbWFwCiAgICAgICAgYm91bmRhcnkgZW5jb21wYXNzZXMgdGhlIG1hcCBtYXJrZXJzLiAoMC4wMSBpcyBkZWZhdWx0LikKICAgICAgICAKICAgICAgICBFeGFtcGxlOgogICAgICAgIAogICAgICAgICRtYXAtPnNldEJvdW5kc0Z1ZGdlKDAuMDEpOwogICAgICAgIAogICAgICAgIAogICAgc2V0QnJvd3NlckFsZXJ0KCRtZXNzYWdlKQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgVGhpcyBzZXRzIHRoZSBhbGVydCBtZXNzYWdlIHRoYXQgcG9wcyB1cCB3aGVuIGEgYnJvd3NlciBpcyBub3QKICAgICAgICBjb21wYXRpYmxlIHdpdGggdGhlIEdvb2dsZSBNYXAgQVBJLiBEZWZhdWx0IGlzOgogICAgICAgICJTb3JyeSwgdGhlIEdvb2dsZSBNYXBzIEFQSSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoaXMgYnJvd3Nlci4iCiAgICAgICAgCiAgICAgICAgCiAgICBzZXRKU0FsZXJ0KCRtZXNzYWdlKQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIAogICAgICAgIFRoaXMgc2V0cyB0aGUgYWxlcnQgbWVzc2FnZSB0aGF0IGRpc3BsYXlzIHdoZW4gamF2YXNjcmlwdCBpcyBkaXNhYmxlZC4KICAgICAgICBEZWZhdWx0OiAiPGI+SmF2YXNjcmlwdCBtdXN0IGJlIGVuYWJsZWQgaW4gb3JkZXIgdG8gdXNlIEdvb2dsZSBNYXBzLjwvYj4iCiAgICAKICAgICAgICAKICAgIGVuYWJsZU9uTG9hZCgpCiAgICAtLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgVGhpcyBlbmFibGVzIHRoZSBvbkxvYWQoKSBqYXZhc2NyaXB0IGZ1bmN0aW9uLCB3aGljaCBpcyB1c2VkIGJ5IGRlZmF1bHQuCiAgICAgICAgVGhpcyBhbGxvd3MgdGhlIG1hcCBqYXZhc2NyaXB0IHRvIGJlIHB1dCBpbnRvIHRoZSA8aGVhZD48L2hlYWQ+IHRhZywKICAgICAgICB0aGVuIGxvYWRlZCB1cG9uIHBhZ2UgZW50cnkgd2l0aCA8Ym9keSBvbmxvYWQ9Im9uTG9hZCgpIj4uIFdpdGggb25Mb2FkCiAgICAgICAgZGlzYWJsZWQsIHRoZSBtYXAgamF2YXNjcmlwdCBtdXN0IGJlIGVtYmVkZGVkIGluc2lkZSB0aGUgPGJvZHk+PC9ib2R5PgogICAgICAgIHRhZ3MuIFVzaW5nIG9uTG9hZCgpIGlzIHRoZSBiZXN0IG1ldGhvZCB0byB1c2UgZm9yIGJyb3dzZXIKICAgICAgICBjb21wYXRhYmlsaXR5LgoKCiAgICBlbmFibGVJbmZvV2luZG93KCkKICAgIC0tLS0tLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgZW5hYmxlcyBpbmZvIHdpbmRvd3Mgb24gbWFwIG1hcmtlcnMuCiAgICAgICAgRW5hYmxlZCBieSBkZWZhdWx0LgogICAgCgogICAgZGlzYWJsZUluZm9XaW5kb3coKQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICBkaXNhYmxlcyBpbmZvIHdpbmRvd3Mgb24gbWFwIG1hcmtlcnMuCiAgICAgICAgRW5hYmxlZCBieSBkZWZhdWx0LgoKICAgICAgICAKICAgIGRpc2FibGVPbkxvYWQoKQogICAgLS0tLS0tLS0tLS0tLS0tCiAgICAKICAgICAgICBUaGlzIGRpc2FibGVzIHRoZSBvbkxvYWQoKSBqYXZhc2NyaXB0IGZ1bmN0aW9uLiAoc2VlIGVuYWJsZU9uTG9hZCgpKQogICAgICAgIEVuYWJsZWQgYnkgZGVmYXVsdC4KICAgICAgICAKICAgICAgICAKICAgIHNldEluZm9XaW5kb3dUcmlnZ2VyKCR0eXBlKQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAKICAgICAgICBUaGlzIHNldHMgdGhlIGluZm8gd2luZG93IHRyaWdnZXIgYmVoYXZpb3IuIGNsaWNrID0gaW5mbyB3aW5kb3cgY29tZXMgdXAKICAgICAgICB3aGVuIGNsaWNraW5nIG9uIGEgbWFya2VyLiBtb3VzZW92ZXIgPSBpbmZvIHdpbmRvdyBjb21lcyB1cCB3aGVuIG1vdXNpbmcKICAgICAgICBvdmVyIGEgbWFya2VyLiBEZWZhdWx0IGlzIGNsaWNrLgogICAgICAgIAogICAgICAgIEV4YW1wbGU6CiAgICAgICAgCiAgICAgICAgJG1hcC0+c2V0SW5mb1dpbmRvd1RyaWdnZXIoJ21vdXNlb3ZlcicpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAKICAgIGFkZE1hcmtlckJ5QWRkcmVzcygkYWRkcmVzcywkdGl0bGUgPSAnJywkaHRtbCA9ICcnKQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAKICAgICAgICBUaGlzIGFkZHMgYSBtYXJrZXIgdG8gdGhlIG1hcC4gVGhlIGFkZHJlc3MgbXVzdCBiZSBhIGZ1bGx5IHF1YWxpZmllZAogICAgICAgIGFkZHJlc3MgdGhhdCBjYW4gYmUgdXNlZCBieSB0aGUgYXZhaWxhYmxlIGdlb2NvZGUgbG9va3VwIHNlcnZpY2VzLgogICAgICAgIAogICAgICAgIFRvIGFkZCBtYXJrZXJzIHdpdGggZ2VvY29kZXMgZGlyZWN0bHksIHNlZSBhZGRNYXJrZXJCeUNvb3JkcygpLgogICAgICAgIAogICAgICAgIFRoZSB0aXRsZSBpcyB1c2VkIGZvciB0aGUgc2lkZWJhciBuYXZpZ2F0aW9uIGxpbmsuIFRoZSBodG1sIGlzIHVzZWQKICAgICAgICBpbiB0aGUgaW5mbyB3aW5kb3cgdGhhdCBwb3BzIHVwIHdoZW4geW91IGNsaWNrIG9uIHRoZSBtYXAgbWFya2VyLiBJZgogICAgICAgIG5vIGh0bWwgaXMgcHJvdmlkZWQsIHRoZSB0aXRsZSB3aWxsIGJlIHVzZWQuCiAgICAgICAgCiAgICAgICAgTm90ZTogbWFwIGNlbnRlcmluZyBpcyBkb25lIGF1dG9tYXRpY2FsbHkgYXMgbWFya2VycyBhcmUgYWRkZWQuCiAgICAgICAgICAgICAgICAKICAgICAgICBFeGFtcGxlOgogICAgICAgIAogICAgICAgICRtYXAtPmFkZE1hcmtlckJ5QWRkcmVzcygnNjIxIE4gNDh0aCBTdCAjIDYgTGluY29sbiBORSA2ODUwMicsJ1BKIFBpenphJywnPGI+UEogUGl6emE8L2I+Jyk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIAogICAgYWRkTWFya2VyQnlDb29yZHMoJGxvbiwkbGF0LCR0aXRsZSA9ICcnLCRodG1sID0gJycpCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIAogICAgICAgIFRoaXMgYWRkcyBhIG1hcCBtYXJrZXIgYnkgZ2VvY29kZSAobG9uL2xhdCkgZGlyZWN0bHkuIFNlZQogICAgICAgIGFkZE1hcmtlckJ5QWRkcmVzcygpIGZvciBtb3JlIGRldGFpbHMuCgogICAgICAgIEV4YW1wbGU6CiAgICAgICAgCiAgICAgICAgJG1hcC0+YWRkTWFya2VyQnlBZGRyZXNzKC05Ni42NTM5LDQwLjgxOTEsJ1BKIFBpenphJywnPGI+UEogUGl6emE8L2I+Jyk7CiAgICAgICAgCiAgICAKICAgCiAgICBhZGRQb2x5TGluZUJ5QWRkcmVzcygkYWRkcmVzczEsJGFkZHJlc3MyLCRjb2xvciwkd2VpZ2h0LCRvcGFjaXR5KQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIAogICAgICAgIFRoaXMgYWRkcyBhIHBvbHlsaW5lIGJldHdlZW4gdGhlIHR3byBnaXZlbiBhZGRyZXNzZXMuIFlvdSBjYW4gb3B0aW9uYWxseQogICAgICAgIHN1cHBseSBhIGNvbG9yIChpbiAjZmZmZmZmIGhleCBub3RhdGlvbiksIHdlaWdodCAodGhpY2tuZXNzIGluIHBpeGVscyksCiAgICAgICAgYW5kIG9wYWNpdHkgKGluIHBlcmNlbnRhZ2UgMC0xMDApLgogICAgICAgIAogICAgICAgIEV4YW1wbGU6CiAgICAgICAgCiAgICAgICAgJG1hcC0+YWRkUG9seUxpbmVCeUFkZHJlc3MoCiAgICAgICAgICAgICczNDU3IEhvbGRyZWdlIFN0IExpbmNvbG4gTkUgNjg1MDInLAogICAgICAgICAgICAnODI2IFAgU3QgTGluY29sbiBORSA2ODUwMicsJyNlZWVlZWUnLDUsNTApOwogICAgICAgICAgICAgICAgCiAgICAgICAgCiAgICBhZGRQb2x5TGluZUJ5Q29vcmRzKCRsb24xLCRsYXQxLCRsb24yLCRsYXQyLCRjb2xvciwkd2VpZ2h0LCRvcGFjaXR5KQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIAogICAgICAgIFRoaXMgYWRkcyBhIHBvbHlsaW5lIGJldHdlZW4gdGhlIHR3byBnaXZlbiBnZW9jb29yZGluYXRlIHBvaW50cy4gWW91IGNhbiBvcHRpb25hbGx5CiAgICAgICAgc3VwcGx5IGEgY29sb3IgKGluICNmZmZmZmYgaGV4IG5vdGF0aW9uKSwgd2VpZ2h0IChsaW5lIHRoaWNrbmVzcyBpbiBwaXhlbHMpLAogICAgICAgIGFuZCBvcGFjaXR5IChpbiBwZXJjZW50YWdlIDAtMTAwKS4KCiAgICAgICAgRXhhbXBsZToKICAgICAgICAKICAgICAgICAkbWFwLT5hZGRQb2x5TGluZUJ5Q29vcmRzKC05Ni42Nyw0MC44Mjc5LC05Ni43MDk1LDQwLjgxNDksJyNlZWVlZWUnLDUsNTApOwoKICAgICAgICAgICAgICAgIAogICAgYWRqdXN0Q2VudGVyQ29vcmRzKCRsb24sJGxhdCkKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAKICAgICAgICBUaGlzIGFkanVzdHMgdGhlIG1hcCBjZW50ZXIgY29vcmRzIGJ5IHRoZSBnaXZlbiBsb24vbGF0LiBUaGlzIGlzIGRvbmUKICAgICAgICBhdXRvbWF0aWNhbGx5IGFzIHlvdSBhZGQgbWFya2VycyB0byB0aGUgbWFwLCBvciB5b3UgY2FuIGRvIGl0IG1hbnVhbGx5CiAgICAgICAgd2l0aCB0aGlzIGZ1bmN0aW9uLiBOb3RlOiB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgaW50ZXJuYWxseSBieSB0aGUKICAgICAgICBsaWJyYXJ5LCBpdCBpc24ndCBub3JtYWxseSBuZWNlc3NhcnkgdW5sZXNzIHlvdSBoYXZlIGEgc3BlY2lmaWMgbmVlZCBhbmQKICAgICAgICB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCgogICAgICAgIAogICAgc2V0Q2VudGVyQ29vcmRzKCRsb24sJGxhdCkKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAKICAgICAgICBUaGlzIHNldHMgdGhlIG1hcCBjZW50ZXIgY29vcmRzIHRvIHRoZSBnaXZlbiBsb24vbGF0LiBDZW50ZXIgY29vcmRzIGFyZQogICAgICAgIGNhbGN1bGF0ZWQgYXV0b21hdGljYWxseSBhcyB5b3UgYWRkIG1hcmtlcnMgdG8gdGhlIG1hcCwgb3IgeW91IHJlc2V0IGl0CiAgICAgICAgbWFudWFsbHkgd2l0aCB0aGlzIGZ1bmN0aW9uLiBOb3RlOiB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgaW50ZXJuYWxseSBieQogICAgICAgIHRoZSBsaWJyYXJ5LCBpdCBpc24ndCBub3JtYWxseSBuZWNlc3NhcnkgdW5sZXNzIHlvdSBoYXZlIGEgc3BlY2lmaWMgbmVlZAogICAgICAgIGFuZCB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCgoKICAgIHNldExvb2t1cFNlcnZpY2UoJ1lBSE9PJykKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgIAogICAgICAgIFRoaXMgc2V0cyB0aGUgZ2VvY29kZSBsb29rdXAgc2VydmljZS4gRGVmYXVsdCBpcyBZQUhPTywgd2hpY2ggdXNlcyB0aGUKICAgICAgICBZYWhvbyBHZW9jb2RlIEFQSS4gVGhpcyAoY3VycmVudGx5KSB3b3JrcyBmb3IgVVMgYWRkcmVzc2VzIG9ubHkuIEFsc28KICAgICAgICBhdmFpbGFibGUgaXMgR09PR0xFIHdoaWNoIGNhbiBkbyBpbnRsIGFkZHJlc3Nlcy4gQmUgd2FybmVkIHRoaXMgaXMgYQogICAgICAgIGhhY2ssIG5vdCBhbiBvZmZpY2lhbCBBUEkuIFVzZSBhdCB5b3VyIG93biByaXNrLCBubyBndWFyYW50ZWVzLgogICAgCiAgICAKICAgIHNldE1hcmtlckljb24oJGljb25JbWFnZSwkaWNvblNoYWRvd0ltYWdlLCRpY29uQW5jaG9yWCwkaWNvbkFuY2hvclksJGluZm9XaW5kb3dBbmNob3JYLCRpbmZvV2luZG93QW5jaG9yWSkKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIAogICAgICAgIFRoaXMgc2V0cyB0aGUgaWNvbiBpbWFnZSBmb3IgQUxMIHRoZSBtYXAgbWFya2Vycy4gQ2FsbCB0aGlzIG9uY2UuIElmIHlvdQogICAgICAgIHdhbnQgdG8gc2V0IGEgZGlmZmVyZW50IGljb24gZm9yIGVhY2ggbWFya2VyLCB1c2UgYWRkTWFya2VySWNvbigpCiAgICAgICAgaW5zdGVhZC4KICAgICAgICAKICAgICAgICBZb3UgbXVzdCBzdXBwbHkgYSBzZXBhcmF0ZSBpbWFnZSBmb3IgdGhlIGljb24gYW5kIGl0cyBzaGFkb3cuCiAgICAgICAgaWNvbkFuY2hvclgvWSBpcyB0aGUgWC9ZIGNvb3JkaW5hdGVzIG9mIHRoZSBpY29uIGZvciB0aGUgbWFwIHBvaW50LgogICAgICAgIGluZm9XaW5kb3dBbmNob3JYL1kgaXMgdGhlIFgvWSBjb29yZGluYXRlcyBvZiB0aGUgaWNvbiB3aGVyZSB0aGUgaW5mbwogICAgICAgIHdpbmRvdyBjb25uZWN0cy4KICAgICAgICAKICAgICAgICBUaGUgaWNvbkltYWdlIGFuZCBpY29uU2hhZG93SW1hZ2UgY2FuIGJlIGVpdGhlciBmdWxseSBxdWFsaWZpZWQgVVJMcywgb3IKICAgICAgICBhIHJlbGF0aXZlIHBhdGggZnJvbSB5b3VyIHdlYiBzZXJ2ZXIgRE9DVU1FTlRfUk9PVC4gVGhlc2UgaW1hZ2VzIE1VU1QKICAgICAgICBleGlzdCBhbmQgcmVhZGFibGUgc28gdGhlIGxpYnJhcnkgY2FuIGNhbGN1bGF0ZSB0aGUgZGltZW5zaW9ucy4KICAgICAgICAKICAgICAgICBFeGFtcGxlOgogICAgICAgIAogICAgICAgICRtYXAtPnNldE1hcmtlckljb24oJy9pbWFnZXMvaG91c2UucG5nJywnL2ltYWdlcy9ob3VzZV9zaGFkb3cucG5nJywwLDAsMTAsMTApOwoKCiAgICBhZGRNYXJrZXJJY29uKCRpY29uSW1hZ2UsJGljb25TaGFkb3dJbWFnZSwkaWNvbkFuY2hvclgsJGljb25BbmNob3JZLCRpbmZvV2luZG93QW5jaG9yWCwkaW5mb1dpbmRvd0FuY2hvclkpCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAKICAgICAgICBUaGlzIHNldHMgdGhlIGljb24gaW1hZ2UgZm9yIHRoZSBDVVJSRU5UIG1hcCBtYXJrZXIuIElNUE9SVEFOVDogeW91IE1VU1QKICAgICAgICBjYWxsIGFkZE1hcmtlckljb24oKSBvbmNlIGZvciBldmVyeSBtYXJrZXIuIERvIG5vdCB1c2Ugc2V0TWFya2VySWNvbigpCiAgICAgICAgaWYgeW91IHVzZSB0aGlzIGZ1bmN0aW9uLgogICAgICAgIAogICAgICAgIFlvdSBtdXN0IHN1cHBseSBhIHNlcGFyYXRlIGltYWdlIGZvciB0aGUgaWNvbiBhbmQgaXRzIHNoYWRvdy4KICAgICAgICBpY29uQW5jaG9yWC9ZIGlzIHRoZSBYL1kgY29vcmRpbmF0ZXMgb2YgdGhlIGljb24gZm9yIHRoZSBtYXAgcG9pbnQuCiAgICAgICAgaW5mb1dpbmRvd0FuY2hvclgvWSBpcyB0aGUgWC9ZIGNvb3JkaW5hdGVzIG9mIHRoZSBpY29uIHdoZXJlIHRoZSBpbmZvCiAgICAgICAgd2luZG93IGNvbm5lY3RzLgogICAgICAgIAogICAgICAgIFRoZSBpY29uSW1hZ2UgYW5kIGljb25TaGFkb3dJbWFnZSBjYW4gYmUgZWl0aGVyIGZ1bGx5IHF1YWxpZmllZCBVUkxzLCBvcgogICAgICAgIGEgcmVsYXRpdmUgcGF0aCBmcm9tIHlvdXIgd2ViIHNlcnZlciBET0NVTUVOVF9ST09ULiBUaGVzZSBpbWFnZXMgTVVTVAogICAgICAgIGV4aXN0IGFuZCByZWFkYWJsZSBzbyB0aGUgbGlicmFyeSBjYW4gY2FsY3VsYXRlIHRoZSBkaW1lbnNpb25zLgogICAgICAgIAogICAgICAgIEV4YW1wbGU6CiAgICAgICAgCiAgICAgICAgJG1hcC0+YWRkTWFya2VySWNvbignL2ltYWdlcy9ob3VzZS5wbmcnLCcvaW1hZ2VzL2hvdXNlX3NoYWRvdy5wbmcnLDAsMCwxMCwxMCk7CgoKICAgIHByaW50SGVhZGVySlMoKQogICAgLS0tLS0tLS0tLS0tLS0tCgogICAgICAgIFRoaXMgcHJpbnRzIHRoZSBoZWFkZXIgamF2YXNjcmlwdCB0aGF0IGdvZXMgaW50byB0aGUgPGhlYWQ+PC9oZWFkPiB0YWdzLgogICAgICAgIFRvIHJldHVybiB0aGUgaGVhZGVyIGphdmFzY3JpcHQgaW4gYSB2YXJpYWJsZSwgdXNlIGdldEhlYWRlckpTKCkuCiAgICAgICAgCiAgICAgICAgRXhhbXBsZToKICAgICAgICAKICAgICAgICA8aGVhZD4KICAgICAgICA8P3BocCAkbWFwLT5wcmludEhlYWRlckpTKCk7ID8+CiAgICAgICAgPC9oZWFkPgogICAgCgogICAgZ2V0SGVhZGVySlMoKQogICAgLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgVGhpcyByZXR1cm5zIHRoZSBoZWFkZXIgamF2YXNjcmlwdCB0aGF0IGdvZXMgaW50byB0aGUgPGhlYWQ+PC9oZWFkPiB0YWdzLgogICAgICAgIFRvIHByaW50IHRoZSBoZWFkZXIgamF2YXNjcmlwdCBkaXJlY3RseSwgdXNlIHByaW50SGVhZGVySlMoKS4KICAgICAgICAKICAgICAgICBFeGFtcGxlOgogICAgICAgIAogICAgICAgIDw/cGhwCiAgICAgICAgJGhlYWRlcmpzID0gZ2V0SGVhZGVySlMoKTsKICAgICAgICA/PgogICAgICAgIDxoZWFkPgogICAgICAgIDw/cGhwIGVjaG8gJGhlYWRlcmpzOyA/PgogICAgICAgIDwvaGVhZD4KICAgICAgICAKICAgICAgICAKICAgIHByaW50TWFwSlMoKQogICAgLS0tLS0tLS0tLS0tCgogICAgICAgIFRoaXMgcHJpbnRzIHRoZSBtYXAgamF2YXNjcmlwdC4gSWYgb25Mb2FkKCkgaXMgZW5hYmxlZCwgcHV0IHRoaXMgaW4gdGhlCiAgICAgICAgPGhlYWQ+PC9oZWFkPiB0YWdzLCBhbmQgc3VwcGx5IDxib2R5IG9ubG9hZD0ib25Mb2FkKCkiPiBpbiB0aGUgYm9keSB0YWcuCiAgICAgICAgT3RoZXJ3aXNlLCBwdXQgdGhpcyBqdXN0IGJlZm9yZSB0aGUgPC9ib2R5PiB0YWcuCiAgICAgICAgCiAgICAgICAgVG8gcmV0dXJuIHRoZSBtYXAgamF2YXNjcmlwdCBpbiBhIHZhcmlhYmxlLCB1c2UgZ2V0TWFwSlMoKS4KICAgICAgICAKICAgICAgICBFeGFtcGxlOgogICAgICAgIAogICAgICAgIDxoZWFkPgogICAgICAgIDw/cGhwICRtYXAtPnByaW50TWFwSlMoKTsgPz4KICAgICAgICA8L2hlYWQ+CiAgICAKICAgIAogICAgZ2V0TWFwSlMoKQogICAgLS0tLS0tLS0tLQoKICAgICAgICBUaGlzIHJldHVybnMgdGhlIG1hcCBqYXZhc2NyaXB0IHRoYXQgZ29lcyBpbnRvIHRoZSA8aGVhZD48L2hlYWQ+IHRhZ3MuCiAgICAgICAgVG8gcHJpbnQgdGhlIG1hcCBqYXZhc2NyaXB0IGRpcmVjdGx5LCB1c2UgcHJpbnRNYXBKUygpLgogICAgICAgIAogICAgICAgIEV4YW1wbGU6CiAgICAgICAgCiAgICAgICAgPD9waHAKICAgICAgICAkbWFwanMgPSAkbWFwLT5wcmludE1hcEpTKCk7CiAgICAgICAgPz4KICAgICAgICA8aGVhZD4KICAgICAgICA8P3BocCBlY2hvICRtYXBqczsgPz4KICAgICAgICA8L2hlYWQ+CiAgICAgICAgCiAgICAgICAgCiAgICBwcmludE1hcCgpCiAgICAtLS0tLS0tLS0tCgogICAgICAgIFRoaXMgcHJpbnRzIHRoZSBtYXAgaHRtbC4KICAgICAgICBUbyByZXR1cm4gdGhlIG1hcCBodG1sIGluIGEgdmFyaWFibGUsIHVzZSBnZXRNYXAoKS4KICAgICAgICAKICAgICAgICBFeGFtcGxlOgogICAgICAgIAogICAgICAgIDxib2R5IG9ubG9hZD0ib25Mb2FkKCkiPgogICAgICAgIDw/cGhwIGVjaG8gJG1hcC0+cHJpbnRNYXAoKTsgPz4KICAgICAgICA8L2JvZHk+CiAgICAKICAgIAogICAgZ2V0TWFwKCkKICAgIC0tLS0tLS0tCgogICAgICAgIFRoaXMgcmV0dXJucyB0aGUgbWFwIGh0bWwgaW4gYSB2YXJpYWJsZS4KICAgICAgICBUbyBwcmludCB0aGUgbWFwIGh0bWwgZGlyZWN0bHksIHVzZSBwcmludE1hcCgpLgogICAgICAgIAogICAgICAgIEV4YW1wbGU6CiAgICAgICAgCiAgICAgICAgPD9waHAKICAgICAgICAkbWFwID0gJG1hcC0+Z2V0TWFwKCk7CiAgICAgICAgPz4KICAgICAgICA8Ym9keSBvbmxvYWQ9Im9uTG9hZCgpIj4KICAgICAgICA8P3BocCBlY2hvICRtYXA7ID8+CiAgICAgICAgPC9ib2R5PgoKCiAgICBwcmludFNpZGViYXIoKQogICAgLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgVGhpcyBwcmludHMgdGhlIHNpZGViYXIgaHRtbC4KICAgICAgICBUbyByZXR1cm4gdGhlIHNpZGViYXIgaHRtbCBpbiBhIHZhcmlhYmxlLCB1c2UgZ2V0U2lkZWJhcigpLgogICAgICAgIAogICAgICAgIEV4YW1wbGU6CiAgICAgICAgCiAgICAgICAgPGJvZHkgb25sb2FkPSJvbkxvYWQoKSI+CiAgICAgICAgPHRhYmxlPgogICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgPD9waHAgJG1hcC0+cHJpbnRNYXAoKTsgPz4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgPD9waHAgJG1hcC0+cHJpbnRTaWRlYmFyKCk7ID8+CiAgICAgICAgICA8L3RkPgogICAgICAgICA8L3RyPgogICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9ib2R5PgogICAgCiAgICAKICAgIGdldFNpZGViYXIoKQogICAgLS0tLS0tLS0tLS0tCgogICAgICAgIFRoaXMgcmV0dXJucyB0aGUgc2lkZWJhciBodG1sIGluIGEgdmFyaWFibGUuCiAgICAgICAgVG8gcHJpbnQgdGhlIHNpZGJhciBodG1sIGRpcmVjdGx5LCB1c2UgcHJpbnRTaWRlYmFyKCkuCiAgICAgICAgCiAgICAgICAgRXhhbXBsZToKICAgICAgICAKICAgICAgICA8P3BocAogICAgICAgICRtYXAgPSAkbWFwLT5nZXRNYXAoKTsKICAgICAgICAkc2lkZWJhciA9ICRtYXAtPmdldFNpZGViYXIoKTsKICAgICAgICA/PgogICAgICAgIDxib2R5IG9ubG9hZD0ib25Mb2FkKCkiPgogICAgICAgIDx0YWJsZT4KICAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgPD9waHAgZWNobyAkbWFwOyA/PgogICAgICAgICAgPC90ZD4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICA8P3BocCBlY2hvICRzaWRlYmFyOyA/PgogICAgICAgICAgPC90ZD4KICAgICAgICAgPC90cj4KICAgICAgICA8L3RhYmxlPgogICAgICAgIDwvYm9keT4KICAgICAgICAgICAgICAgIAogICAgCiAgICBnZXRHZW9jb2RlKCRhZGRyZXNzKQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIAogICAgICAgIFRoaXMgbG9va3MgdXAgdGhlIGdlb2NvZGUgb2YgYW4gYWRkcmVzcy4gSXQgd2lsbCB1c2UgdGhlIGRhdGFiYXNlIGNhY2hlCiAgICAgICAgaWYgYXZhaWxhYmxlLiBJZiB5b3Ugd2FudCB0byBsb29rdXAgYSBnZW9jb2RlIHdpdGhvdXQgdXNpbmcgdGhlIGRhdGFiYXNlCiAgICAgICAgY2FjaGUsIHVzZSBnZW9HZXRDb29yZHMoKS4gTm90ZTogdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGludGVybmFsbHkgYnkgdGhlCiAgICAgICAgbGlicmFyeSwgaXQgaXNuJ3Qgbm9ybWFsbHkgbmVjZXNzYXJ5IHVubGVzcyB5b3UgaGF2ZSBhIHNwZWNpZmljIG5lZWQgYW5kCiAgICAgICAgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLgogICAgICAgIAogICAgICAgIEV4YW1wbGU6CiAgICAgICAgCiAgICAgICAgJGdlb2NvZGUgPSAkbWFwLT5nZXRHZW9jb2RlKCcyMzcgUyA3MHRoIHN1aXRlIDIyMCBMaW5jb2xuIE5FIDY4NTEwJyk7CiAgICAgICAgCiAgICAgICAgZWNobyAkZ2VvY29kZVsnbGF0J107CiAgICAgICAgZWNobyAkZ2VvY29kZVsnbG9uJ107CiAgICAgICAgCiAgICAgICAgCiAgICBnZXRDYWNoZSgkYWRkcmVzcykKICAgIC0tLS0tLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgVGhpcyB3aWxsIGdldCB0aGUgY2FjaGVkIGdlb2NvZGUgaW5mbyBmb3IgYW4gYWRkcmVzcyBmcm9tIHRoZSBkYXRhYmFzZQogICAgICAgIGNhY2hlLCBvciByZXR1cm4gRkFMU0UgaWYgbm90aGluZyBpcyBhdmFpbGFibGUuIE5vdGU6IHRoaXMgZnVuY3Rpb24gaXMKICAgICAgICB1c2VkIGludGVybmFsbHkgYnkgdGhlIGxpYnJhcnksIGl0IGlzbid0IG5vcm1hbGx5IG5lY2Vzc2FyeSB1bmxlc3MgeW91CiAgICAgICAgaGF2ZSBhIHNwZWNpZmljIG5lZWQgYW5kIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4KICAgICAgICAKICAgICAgICBFeGFtcGxlOgogICAgICAgIAogICAgICAgICRnZW9jb2RlID0gJG1hcC0+Z2V0Q2FjaGUoJzIzNyBTIDcwdGggc3VpdGUgMjIwIExpbmNvbG4gTkUgNjg1MTAnKTsKICAgICAgICAKICAgICAgICBlY2hvICRnZW9jb2RlWydsYXQnXTsKICAgICAgICBlY2hvICRnZW9jb2RlWydsb24nXTsKICAgICAgICAKCiAgICBwdXRDYWNoZSgkYWRkcmVzcywkbG9uLCRsYXQpCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAKICAgICAgICBUaGlzIHdpbGwgaW5zZXJ0IGdlb2NvZGUgaW5mbyBmb3IgdGhlIGdpdmVuIGFkZHJlc3MgaW50byB0aGUgZGF0YWJhc2UKICAgICAgICBjYWNoZS4gTm90ZTogdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGludGVybmFsbHkgYnkgdGhlIGxpYnJhcnksIGl0IGlzbid0CiAgICAgICAgbm9ybWFsbHkgbmVjZXNzYXJ5IHVubGVzcyB5b3UgaGF2ZSBhIHNwZWNpZmljIG5lZWQgYW5kIHlvdSBrbm93IHdoYXQgeW91CiAgICAgICAgYXJlIGRvaW5nLgogICAgICAgIAogICAgICAgIEV4YW1wbGU6CiAgICAgICAgCiAgICAgICAgJG1hcC0+cHV0Q2FjaGUoJzIzNyBTIDcwdGggc3VpdGUgMjIwIExpbmNvbG4gTkUgNjg1MTAnLC05Ni42MjUzOCw0MC44MTI0MzgpOwogICAgICAgIAoKICAgIGdlb0dldENvb3JkcygkYWRkcmVzcykKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIAogICAgICAgIFRoaXMgbG9va3MgdXAgdGhlIGdlb2NvZGUgb2YgYW4gYWRkcmVzcyBkaXJlY3RseSAobm90IGZyb20gY2FjaGUuKSBOb3RlOgogICAgICAgIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBsaWJyYXJ5LCBpdCBpc24ndCBub3JtYWxseQogICAgICAgIG5lY2Vzc2FyeSB1bmxlc3MgeW91IGhhdmUgYSBzcGVjaWZpYyBuZWVkIGFuZCB5b3Uga25vdyB3aGF0IHlvdSBhcmUKICAgICAgICBkb2luZy4KICAgICAgICAKICAgICAgICBFeGFtcGxlOgogICAgICAgIAogICAgICAgICRnZW9jb2RlID0gJG1hcC0+Z2VvR2V0Q29vcmRzKCcyMzcgUyA3MHRoIHN1aXRlIDIyMCBMaW5jb2xuIE5FIDY4NTEwJyk7CiAgICAgICAgCiAgICAgICAgZWNobyAkZ2VvY29kZVsnbG9uJ107CiAgICAgICAgZWNobyAkZ2VvY29kZVsnbGF0J107CgogICAgICAgIAogICAgICAgIApJTlRFR1JBVElORyBHT09HTEUgTUFQUyBXSVRIIFNNQVJUWSBURU1QTEFURVMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgSW50ZWdyYXRpbmcgd2l0aCBTbWFydHkgaXMgYXMgc2ltcGxlIGFzIGFzc2lnbmluZyB0aGUgbmVjZXNzYXJ5IHZhcnMgdG8gdGhlCiAgICB0ZW1wbGF0ZSBhbmQgdGhlbiBkaXNwbGF5aW5nIHRoZW0uIE5vdGU6IFRoaXMgZXhhbXBsZSBkb2VzIG5vdCBjb3ZlciBob3cgdG8KICAgIHNldHVwIFNtYXJ0eSwgcGxlYXNlIHVzZSB0aGUgU21hcnR5IGRvY3VtZW50YXRpb24uCiAgICAKICAgIEV4YW1wbGU6CiAgICAKICAgIDw/cGhwCiAgICByZXF1aXJlKCdTbWFydHkuY2xhc3MucGhwJyk7CiAgICByZXF1aXJlKCdHb29nbGVNYXBBUEkuY2xhc3MucGhwJyk7CgogICAgJHNtYXJ0eSA9IG5ldyBTbWFydHkoKTsKICAgICRtYXAgPSBuZXcgR29vZ2xlTWFwQVBJKCk7CiAgICAKICAgIC8vIHNldHVwIGRhdGFiYXNlIGZvciBnZW9jb2RlIGNhY2hpbmcKICAgICRtYXAtPnNldERTTignbXlzcWw6Ly9VU0VSOlBBU1NAbG9jYWxob3N0L0dFT0NPREVTJyk7CiAgICAvLyBlbnRlciBZT1VSIEdvb2dsZSBNYXAgS2V5CiAgICAkbWFwLT5zZXRBUElLZXkoJ1lPVVJHT09HTEVNQVBLRVknKTsKICAgIAogICAgLy8gY3JlYXRlIHNvbWUgbWFwIG1hcmtlcnMKICAgICRtYXAtPmFkZE1hcmtlckJ5QWRkcmVzcygnNjIxIE4gNDh0aCBTdCAjIDYgTGluY29sbiBORSA2ODUwMicsJ1BKIFBpenphJywnPGI+UEogUGl6emE8L2I+Jyk7CiAgICAkbWFwLT5hZGRNYXJrZXJCeUFkZHJlc3MoJzgyNiBQIFN0IExpbmNvbG4gTkUgNjg1MDInLCdPbGQgQ2hpY2FnbycsJzxiPk9sZCBDaGljYWdvPC9iPicpOwogICAgJG1hcC0+YWRkTWFya2VyQnlBZGRyZXNzKCczNDU3IEhvbGRyZWdlIFN0IExpbmNvbG4gTkUgNjg1MDInLCJWYWxlbnRpbm8ncyIsIjxiPlZhbGVudGlubydzPC9iPiIpOwogICAgCiAgICAvLyBhc3NpZ24gU21hcnR5IHZhcmlhYmxlczsKICAgIAogICAgJHNtYXJ0eS0+YXNzaWduKCdnb29nbGVfbWFwX2hlYWRlcicsJG1hcC0+Z2V0SGVhZGVySlMoKSk7CiAgICAkc21hcnR5LT5hc3NpZ24oJ2dvb2dsZV9tYXBfanMnLCRtYXAtPmdldE1hcEpTKCkpOwogICAgJHNtYXJ0eS0+YXNzaWduKCdnb29nbGVfbWFwX3NpZGViYXInLCRtYXAtPmdldFNpZGViYXIoKSk7CiAgICAkc21hcnR5LT5hc3NpZ24oJ2dvb2dsZV9tYXAnLCRtYXAtPmdldE1hcCgpKTsKICAgIAogICAgLy8gZGlzcGxheSB0aGUgdGVtcGxhdGUKICAgICRzbWFydHktPmRpc3BsYXkoJ2luZGV4LnRwbCcpOwogICAgPz4KICAgIAogICAgY29udGVudHMgb2YgaW5kZXgudHBsOgogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgCiAgICA8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CiAgICA8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sbnM6dj0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiPgogICAgPGhlYWQ+CiAgICB7JGdvb2dsZV9tYXBfaGVhZGVyfQogICAgeyRnb29nbGVfbWFwX2pzfQogICAgPCEtLSBuZWNlc3NhcnkgZm9yIGdvb2dsZSBtYXBzIHBvbHlsaW5lIGRyYXdpbmcgaW4gSUUgLS0+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogICAgICB2XDoqIHsKICAgICAgICBiZWhhdmlvcjp1cmwoI2RlZmF1bHQjVk1MKTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDwvaGVhZD4KICAgIDxib2R5IG9ubG9hZD0ib25Mb2FkKCkiPgogICAgPHRhYmxlPgogICAgICA8dHI+CiAgICAgICAgPHRkPnskZ29vZ2xlX21hcH08L3RkPgogICAgICAgIDx0ZD57JGdvb2dsZV9tYXBfc2lkZWJhcn08L3RkPgogICAgICA8L3RyPgogICAgPC90YWJsZT4KICAgIDwvYm9keT4KICAgIDwvaHRtbD4KCgpDUkVESVRTOgotLS0tLS0tLQoKRXhjZWxsZW50IEdvb2dsZSBNYXBzIHR1dG9yaWFscyBieSBNaWtlOgpodHRwOi8vd3d3LmVjb255bS5kZW1vbi5jby51ay9nb29nbGVtYXBzL2luZGV4Lmh0bQoKUGVvcGxlIHdobyBoYXZlIGhlbHBlZC9jb250cmlidXRlZDoKCkNoYXJsaWUgRGF3ZXMKSmFrZSBLcm9obgpDbGFyayBGcmVpZmVsZCA8Y2xhcmsgQVQgdXNlcnMgRE9UIHNvdXJjZWZvcmdlIERPVCBuZXQ+CgpBbnlvbmUgSSBtaXNzZWQsIGRyb3AgbWUgYSBsaW5lIQoKTW9udGUgT2hydCA8bW9udGUgW0FUXSBvaHJ0IFtET1RdIGNvbT4K]]></data>
	</file>
	<file>
	  <filename>/lib/rcrud.inc.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiAgIC8qCiAgIAogICAgICBSQ1JVRCBDbGFzcwogICAgICBieSBSb2JlcnQgQnJvd24KICAgICAgYnJvd25ybEBnbWFpbC5jb20KICAgICAgCiAgICAgIHZlcnNpb246IC4wNCAyMDA2LTA3LTIwCiAgICAgIAogICAgICBVc2VhZ2U6CiAgICAgIAogICAgICByZXF1aXJlX29uY2UoICdyY3J1ZC5pbmMucGhwJyApOwogICAgICAkY28gPSBuZXcgcmNydWQoICRhZG9kYmxpdGVfZGJfY29ubmVjdGlvbiAsICd0YWJsZV9uYW1lJyApOwogICAgICAkY28tPmdvKCk7CiAgIAogICAKICAgKi8KCgogICBjbGFzcyByY3J1ZAogICB7CgogICAgICAjdGhpcyB2YXIgaXMgdGhlIHRhYmxlIHRoYXQgdGhpcyBvYmplY3Qgd2lsbCBjcnVkIG9uICAgCiAgICAgIHZhciAkdGFibGU7CiAgICAgIAogICAgICAjdGhpcyB2YXIgd2lsbCBob2xkcyBmaWVsZHMgYW5kIGNvbmZpZyBpbmZvCiAgICAgIHZhciAkZmllbGRzID0gYXJyYXkoKTsKICAgICAgCiAgICAgICN0aGlzIHZhciBob2xkcyB0aGUgYWRvZGJsaXRlIGRiIGNvbm5lY3Rpb24KICAgICAgdmFyICRkYjsKICAgICAgCiAgICAgICN0aGlzIHZhciBob2xkcyB0aGUga2V5IGZpZWxkCiAgICAgIHZhciAka2V5OwogICAgICAKICAgICAgI3RoaXMgdmFyIGhvbGRzIHRoZSBjb2xvciBmb3IgdGhlIGVycm9ycyBpbiBhIGZvcm0sIGllLCByZWQgLCAjRkYwMDAwCiAgICAgIHZhciAkZXJyb3Jjb2xvciA9ICIjRkYwMDAwIjsKICAgICAgCiAgICAgICN0aGlzIHZhcmlhYmxlIGhvbGRzIHRoZSB0ZXh0IHRvIGJlIGRpc3BsYXllZCBhYm92ZSBnZXRzIHNldCBpbiB0aGUgY29uc3RydWN0b3IKICAgICAgdmFyICRoZWFkZXI7CiAgICAgIAogICAgICAjdGhpcyB2YXJpYWJsZSBob2xkcyB3aGljaCBmaWVsZCB0aGF0IHdlIHNob3VsZCBzb3J0IGJ5IGluIHRoZSBsaXN0aW5nCiAgICAgICNnZXRzIHNldCB0byB0aGUga2V5IGluIHRoZSBjb25zdHJ1Y3RvcgogICAgICB2YXIgJGRlZl9zb3J0OwogICAKICAgCiAgIAogICAgICBmdW5jdGlvbiByY3J1ZCggJGRiICwgJHRhYmxlbmFtZSApCiAgICAgIHsKICAgICAgICAgJHRoaXMtPmRiID0gJGRiOwogICAgICAgICAkdGhpcy0+dGFibGUgPSAkdGFibGVuYW1lOwogICAgICAgICAKICAgICAgICAgJHEgPSAiREVTQ1JJQkUgIi4kdGhpcy0+dGFibGU7CiAgICAgICAgICRxciA9ICRkYi0+RXhlY3V0ZSggJHEgKSBvciBkaWUoICJUaGUgZGF0YWJhc2UgY29ubmVjdGlvbiBvciB0YWJsZSBzdXBwbGllZCB0byByY3J1ZCBpcyBpbnZhbGlkLCBwbGVhc2UgY2hlY2sgY29kZSBhbmQgdHJ5IGFnYWluLiIgKTsKICAgICAgICAgCiAgICAgICAgIGlmKCAkcXItPlJlY29yZENvdW50KCkgPCAxICkKICAgICAgICAgewogICAgICAgICAgICBkaWUoICJUaGUgdGFibGUgbmFtZSBzdXBwbGllZCB0byByY3J1ZCBpcyBpbnZhbGlkIiApOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewogICAgICAgICAgICAkdGhpcy0+aGVhZGVyID0gJHRoaXMtPmZpZWxkMmxhYmVsKCAkdGhpcy0+dGFibGUgKTsKICAgICAgICAgICAgJGkgPSAwOwogICAgICAgICAgICB3aGlsZSAoJHJvdyA9ICRxci0+RmV0Y2hSb3coKSApIAogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICR0aGlzLT5maWVsZHNbJHJvd1snRmllbGQnXV0gPSBhcnJheSgpOwogICAgICAgICAgICAgICAgICR0aGlzLT5maWVsZHNbJHJvd1snRmllbGQnXV1bJ29yZGVyJ10gPSAkaSsrOyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAkdGhpcy0+ZmllbGRzWyRyb3dbJ0ZpZWxkJ11dWydsYWJlbCddID0gJHRoaXMtPmZpZWxkMmxhYmVsKCAkcm93WydGaWVsZCddICk7CiAgICAgICAgICAgICAgICAgJHRoaXMtPmZpZWxkc1skcm93WydGaWVsZCddXVsndmlzaWJsZV9pbl9saXN0J10gPSB0cnVlOwogICAgICAgICAgICAgICAgICR0aGlzLT5maWVsZHNbJHJvd1snRmllbGQnXV1bJ3Zpc2libGVfaW5fYWRkJ10gPSB0cnVlOwogICAgICAgICAgICAgICAgICR0aGlzLT5maWVsZHNbJHJvd1snRmllbGQnXV1bJ3Zpc2libGVfaW5fZWRpdCddID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAkdGhpcy0+ZmllbGRzWyRyb3dbJ0ZpZWxkJ11dWydmaWVsZF93aWR0aCddID0gMzA7CiAgICAgICAgICAgICAgICAgJHRoaXMtPmZpZWxkc1skcm93WydGaWVsZCddXVsnZmllbGRfaGVpZ2h0J10gPSAxMDsgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICR0aGlzLT5maWVsZHNbJHJvd1snRmllbGQnXV1bJ2ZpZWxkX3R5cGUnXSA9ICJ0ZXh0IjsKICAgICAgICAgICAgICAgICAkdGhpcy0+ZmllbGRzWyRyb3dbJ0ZpZWxkJ11dWydmaWVsZF9lcnJvciddID0gIkVycm9yOiBJbnZhbGlkIEZvcm0gRGF0YSI7CiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmKCAkcm93WydLZXknXSA9PSAiUFJJIiApCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICR0aGlzLT5maWVsZHNbJHJvd1snRmllbGQnXV1bJ2lzS2V5J10gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICR0aGlzLT5rZXkgPSAkcm93WydGaWVsZCddOwogICAgICAgICAgICAgICAgICAgICR0aGlzLT5maWVsZHNbJHJvd1snRmllbGQnXV1bJ2ZpZWxkX3R5cGUnXSA9ICJkaXNwbGF5IjsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZmllbGRzWyRyb3dbJ0ZpZWxkJ11dWyd2aXNpYmxlX2luX2FkZCddID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmRlZl9zb3J0ID0gJHJvd1snRmllbGQnXTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYoICRyb3dbJ1R5cGUnXSA9PSAidGV4dCIgKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZmllbGRzWyRyb3dbJ0ZpZWxkJ11dWydmaWVsZF90eXBlJ10gPSAidGV4dGFyZWEiOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiggJHJvd1snVHlwZSddID09ICJkYXRldGltZSIgKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZmllbGRzWyRyb3dbJ0ZpZWxkJ11dWydmaWVsZF90eXBlJ10gPSAiZGF0ZXRpbWUiOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiggJHJvd1snVHlwZSddID09ICJkYXRlIiApCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICR0aGlzLT5maWVsZHNbJHJvd1snRmllbGQnXV1bJ2ZpZWxkX3R5cGUnXSA9ICJkYXRlIjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYoIGVyZWcoICJpcHN0YW1wIiAsICRyb3dbJ0ZpZWxkJ10gICkgKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZmllbGRzWyRyb3dbJ0ZpZWxkJ11dWydmaWVsZF90eXBlJ10gPSAiaXBzdGFtcCI7CiAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAkdGhpcy0+ZmllbGRzWyRyb3dbJ0ZpZWxkJ11dWydsYWJlbCddID0gJHRoaXMtPmZpZWxkMmxhYmVsKCAkcm93WydGaWVsZCddICk7CiAgICAgICAgICAgIH0jZW5kIHdoaWxlCgogICAgICAgICAgICAKICAgICAgICAgfSNlbmQgaWYKICAgICAgfSNlbmQgY29uc3RydWN0b3IKICAgICAgCiAgICAgIAogICAgICAjdGhpcyBmdW5jdGlvbiBjb252ZXJ0cyBmaWVsZF9uYW1lIHRvIEZpZWxkIE5hbWUKICAgICAgZnVuY3Rpb24gZmllbGQybGFiZWwoICRmaWVsZCApCiAgICAgIHsKICAgICAgICAgcmV0dXJuIHVjd29yZHMoIGVyZWdfcmVwbGFjZSggIl8iICwgIiAiICwgJGZpZWxkICkgKTsKICAgICAgfQogICAgICAKCiAgICAgICN0aGlzIGlzIHRoZSBtYWluIGZ1bmN0aW9uIHRoYXQgd2lsbCBkbyBldmVyeSB0aGluZyBvciBhdGxlYXN0IGNhbGwgdGhlIG90aGVyIGZ1bmN0aW9ucyAgICAgIAogICAgICBmdW5jdGlvbiBnbygpCiAgICAgIHsKICAgICAgICAgICAgI21ha2UgdGhhdCB0aGUgcmNydWQgc3R1ZmYgaGFwcGVuaW5nIGluICRfR0VUIGlzIGZvciB0aGlzIGluc3RhbmNlIGFuZCBub3QgZm9yIGFub3RoZXIKICAgICAgICAgICAgaWYoIGlzc2V0KCAkX0dFVFsncmNydWRfdGFibGUnXSApICYmICRfR0VUWydyY3J1ZF90YWJsZSddICE9ICR0aGlzLT50YWJsZSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgCiAgICAgICAgICAgCiAgICAgICAgICAgIGlmKCAhIGlzc2V0KCAkX0dFVFsncmNydWRfYWN0aW9uJ10gKSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgJHJjcnVkX2FjdGlvbiA9ICJzaG93IjsgLy9kZWZhdWx0IGlzIHRvIHNob3cgd2hhdCBpcyBpbiB0aGUgZGIgdGFibGUuCiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICRyY3J1ZF9hY3Rpb24gPSAkX0dFVFsncmNydWRfYWN0aW9uJ107CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGVjaG8gIjxoMz4iLiR0aGlzLT5oZWFkZXIuIjwvaDM+XG4iOwogICAgICAgICAgICAKICAgICAgICAgICAgc3dpdGNoKCAkcmNydWRfYWN0aW9uICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICBjYXNlICJzaG93IjoKICAgICAgICAgICAgICAgICAgJHRoaXMtPnNob3coKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgImRlbGV0ZSI6CiAgICAgICAgICAgICAgICAgICR0aGlzLT5kZWxldGUoICRfR0VUWydyY3J1ZF9pZCddICk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBjYXNlICJhZGQiOgogICAgICAgICAgICAgICAgICAkdGhpcy0+YWRkKCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBjYXNlICJlZGl0IjoKICAgICAgICAgICAgICAgICAgJHRoaXMtPmVkaXQoKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgfSNlbmQgc3dpdGNoCiAgICAgIAogICAgICB9I2VuZCBnbyBmdW5jdGlvbgogICAgICAKCiAgICAgICN0aGlzIGZ1bmN0aW9uIGFsbG93cyBhIHJlY29yZCB0byBiZSBhZGRlZCAqKk1BSk9SKioKICAgICAgZnVuY3Rpb24gYWRkKCkKICAgICAgewoJJGVycm9ycyA9ICcnOwoJJHNxbCA9ICcnOwogICAgICAgICAjaGFzIHRoZSBmb3JtIGJlZW4gc3VibWl0dGVkCiAgICAgICAgIGlmKCBpc3NldCggJF9QT1NUWydyY3J1ZF9zdWInXSApICkKICAgICAgICAgewogCiAgICAgICAgICAgICAgICNjb21waWxlIGFueSBkYXRldGltZXMgaW50byBvbmUgZmllbGQgYWdhaW4uCiAgICAgICAgICAgICAgICR0aGlzLT5jb21waWxlX2RhdGV0aW1lcygpOwogICAgICAgICAgICAKICAgICAgICAgICAgICAgI2Zvcm0gaGFkIG5vIGVycm9ycwogICAgICAgICAgICAgICBpZiggISAkZXJyb3JzID0gJHRoaXMtPmZvcm1fZXJyb3JzKCkgKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAjZG8gYW4gaW5zZXJ0CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAjZmlyc3QgYnVpbGQgdGhlIFNFVCBwb3J0aW9uCiAgICAgICAgICAgICAgICAgIGZvcmVhY2goICR0aGlzLT5maWVsZHMgYXMgJGsgPT4gJHYgKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaWYoIGlzc2V0KCAkX1BPU1RbJGtdICkgKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzcWwgPSAkc3FsIC4gJGsgLiAiID0gIiAuICR0aGlzLT5kYi0+cXN0ciggJF9QT1NUWyRrXSApIC4gIiwgIjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgI3NlY29uZCB0YWtlIG9mZiB0aGUgbGFzdCAnLCAnCiAgICAgICAgICAgICAgICAgICRzcWwgPSBlcmVnX3JlcGxhY2UoICIsICQiICwgIiIgLCAkc3FsICk7CiAgICAgICAgICAgICAgICAgICRzcWwgPSAiSU5TRVJUIElOVE8gIi4kdGhpcy0+dGFibGUuIiBTRVQgIi4kc3FsOwogICAgICAgICAgICAgICAgICAkcXIgPSAkdGhpcy0+ZGItPkV4ZWN1dGUoICRzcWwgKSBvciBkaWUoICJSQ1JVRDogQ3JlYXRlIE5ldyBTUUwgUHJvYmxlbTogIi4kdGhpcy0+ZGItPkVycm9yTXNnKCkgKTsKICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgIGVjaG8gIjxwPllvdXIgaXRlbSBoYXMgYmVlbiBjcmVhdGVkLjwvcD4iOwogICAgICAgICAgICAgICAgICAkdGhpcy0+bWFrZV9yZXR1cm5fbGluaygpOwogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICB9CgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAkdGhpcy0+bWFrZV9mb3JtKCAidmlzaWJsZV9pbl9hZGQiICwgIkNyZWF0ZSBOZXciICwgJGVycm9ycyApOwogICAgICAgICAkdGhpcy0+bWFrZV9yZXR1cm5fbGluaygpOwogICAgICAgICAKICAgICAgCiAgICAgIH0jZW5kIGFkZCBmdW5jdGlvbiAgICAgIAogICAgICAKCiAgICAgICN0aGlzIGZ1bmN0aW9uIGFsbG93cyBhIHJlY29yZCB0byBiZSBlZGl0ZWQgKipNQUpPUioqCiAgICAgIGZ1bmN0aW9uIGVkaXQoKQogICAgICB7CgkkZXJyb3JzID0gJyc7Cgkkc3FsID0gIiI7CiAgICAgICAgICNoYXMgdGhlIGZvcm0gYmVlbiBzdWJtaXR0ZWQKICAgICAgICAgaWYoIGlzc2V0KCAkX1BPU1RbJ3JjcnVkX3N1YiddICkgKQogICAgICAgICB7CiAgICAgICAgICAgICAgICNjb21waWxlIGFueSBkYXRldGltZXMgaW50byBvbmUgZmllbGQgYWdhaW4uCiAgICAgICAgICAgICAgICR0aGlzLT5jb21waWxlX2RhdGV0aW1lcygpOwogICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgI2Zvcm0gaGFkIG5vIGVycm9ycwogICAgICAgICAgICAgICBpZiggISAkZXJyb3JzID0gJHRoaXMtPmZvcm1fZXJyb3JzKCkgKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICNkbyBhbiB1cGRhdGUKICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICNmaXJzdCBidWlsZCB0aGUgU0VUIHBvcnRpb24KICAgICAgICAgICAgICAgICAgZm9yZWFjaCggJHRoaXMtPmZpZWxkcyBhcyAkayA9PiAkdiApCiAgICAgICAgICAgICAgICAgIHsKCQkgCiAgICAgICAgICAgICAgICAgICAgIGlmKCBpc3NldCggJF9QT1NUWyRrXSApICkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkc3FsID0gJHNxbCAuICRrIC4gIiA9ICIgLiAkdGhpcy0+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+ICR2ICkKICAgICAgICB7CiAgICAgICAgICAgaWYoICEgZXJlZyggIl5yY3J1ZCIsICRrICkgKQogICAgICAgICAgIHsKICAgICAgICAgICAgICAkdCA9ICR0IC4gJGsgLiAiPSIgLiR2LiAiJiI7CiAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAgCiAgICAgICAgICR0ID0gZXJlZ19yZXBsYWNlKCAiXCYkIiAsICIiICwgJHQgKTsKICAgICAgICAgICAgCiAgICAgICAgICR0ID0gJF9TRVJWRVJbIlBIUF9TRUxGIl0gLiAiPyIgLiAkdDsKICAgICAgICAgZWNobyAiPHA+PGEgaHJlZj1cIiIuICR0IC4gIlwiPnJldHVybiB0byBsaXN0PC9hPjwvcD5cbiI7CiAgICAgICAgIAogICAgIH0KICAgCglmdW5jdGlvbiBzZXRQYXRoKCRwYXRoLCAkcGF0aGVycm9yLCAkbWFya2VyZXJyb3IpCgl7CgkJJHRoaXMtPnBhdGggPSAkcGF0aDsKCQkkdGhpcy0+cGF0aGVycm9yID0gJHBhdGhlcnJvcjsKCQkkdGhpcy0+bWFya2VyZXJyb3IgPSAkbWFya2VyZXJyb3I7IAoJfQogICB9I2VuZGNsYXNzCgoKPz4=]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgokZGIgPSYgJGdDbXMtPkdldERiKCk7CgovLyBteXNxbC1zcGVjaWZpYywgYnV0IGlnbm9yZWQgYnkgb3RoZXIgZGF0YWJhc2UKJHRhYm9wdGFycmF5ID0gYXJyYXkoJ215c3FsJyA9PiAnVFlQRT1NeUlTQU0nKTsKCiRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKCi8vIHRhYmxlIHNjaGVtYSBkZXNjcmlwdGlvbgokZmxkcyA9ICIKCQltYXBfaWQgSSBBVVRPIEtFWSwKCSAgbmFtZSBDKDgwKSBOT1ROVUxMLAoJCWRlc2NyaXB0aW9uIFgsCgkgIGNlbnRlcl9sYXQgQyg1MCksCgkgIGNlbnRlcl9sb24gQyg1MCksCgkgIG93bmVyX2lkIEksCgkgIHR5cGUgQyg1MCksCgkgIHdpZHRoIEMoNTApLAoJICBoZWlnaHQgQyg1MCksCgkgIGNvbnRyb2xzIEwsCgkgIGNvbnRyb2xzX3NpemUgQygxMCksCgkgIHR5cGVfY29udHJvbHMgTCwKCSAgc2lkZWJhciBMLAoJICBkaXJlY3Rpb25zIEwsCgkgIHpvb20gQygxMCksCgkgIHpvb21zY3JvbGx3aGVlbCBMLAoJICB6b29tX2VuY29tcGFzcyBMLAoJICBzY2FsZV9jb250cm9sIEwsCgkgIGJvdW5kc19mdWRnZSBGLAoJICBpbmZvX3dpbmRvdyBMLAoJICBpbmZvX3RyaWdnZXIgQyg4MCkKCSI7CgovLyBjcmVhdGUgaXQuIFRoaXMgc2hvdWxkIGRvIGVycm9yIGNoZWNraW5nLCBidXQgSSdtIGEgbGF6eSBzb2QuCiRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9nb29nbGVtYXBzX21hcHMiLCAkZmxkcywgJHRhYm9wdGFycmF5KTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoKLy9pbmRleCBmb3IgbWFwcwokc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlSW5kZXhTUUwoJ2lfbmFtZScsIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dvb2dsZW1hcHNfbWFwcyIsICduYW1lJyk7CgovLyBjcmVhdGUgYSBzZXF1ZW5jZQojJGRiLT5DcmVhdGVTZXF1ZW5jZShjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9nb29nbGVtYXBzX21hcHNfc2VxIik7CgoKLy8gTWFya2VycwokZmxkcyA9ICIKCSAgbWFya2VyX2lkIEkgQVVUTyBLRVksCgkgIG1hcCBDKDEwMCksCgkgIG5hbWUgQyg4MCksCgkgIGluZm8gWCwKCSAgYWRkcmVzcyBDKDI1NSksCgkgIGxhdCBDKDEwMCksCgkgIGxvbiBDKDEwMCksCgkgIGljb24gQygxMDApCiAgIjsKCi8vIGNyZWF0ZSBpdC4gVGhpcyBzaG91bGQgZG8gZXJyb3IgY2hlY2tpbmcsIGJ1dCBJJ20gYSBsYXp5IHNvZC4KJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dvb2dsZW1hcHNfbWFya2VycyIsICRmbGRzLCAkdGFib3B0YXJyYXkpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7Ci8vIGNyZWF0ZSBhIHNlcXVlbmNlCiRkYi0+Q3JlYXRlU2VxdWVuY2UoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ29vZ2xlbWFwc19tYXJrZXJzX3NlcSIpOwoKCi8vIENhY2hlIG5vdCB1c2VkIHlldAokZmxkcyA9ICIKICAgICAgICBhZGRyZXNzIEMoMjU1KSBLRVkgREVGQVVMVCAnJywgCiAgICAgICAgbG9uIEYsCiAgICAgICAgbGF0IEYKICAgICAgICAiOwoKJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dvb2dsZW1hcHNfY2FjaGUiLCAkZmxkcywgJHRhYm9wdGFycmF5KTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwovLyBjcmVhdGUgYSBzZXF1ZW5jZQokZGItPkNyZWF0ZVNlcXVlbmNlKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dvb2dsZW1hcHNfY2FjaGVfc2VxIik7CgoKLy8gY3JlYXRlIGEgcGVybWlzc2lvbgokdGhpcy0+Q3JlYXRlUGVybWlzc2lvbignVXNlIEdvb2dsZU1hcHMnLCAnVXNlIEdvb2dsZU1hcHMnKTsKCgovLyBjcmVhdGUgYSBwcmVmZXJlbmNlCiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdhcGlrZXknLCAnJyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdsb29rdXBzZXJ2aWNlJywgJ0dPT0dMRScpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgndXNlY2FjaGUnLCAnMCcpOwokdGhpcy0+R2V0UHJlZmVyZW5jZSgndXNlbWFya2Vyc2hhZG93cycsIDApOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgneWFob29hcHBpZCcsICcnKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2Vhc3lsb2NhdG9ybGV2ZWwnLCAxICk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxhdCcsIDQ0ICk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxvbicsIC02MyApOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnZWFzeWxvY2F0b3JzYXZlbGFzdCcsICcxJyApOwoKJGNvbmZpZyA9ICRnQ21zLT5HZXRDb25maWcoKTsKLy8gUHJlcGFyZSBhIGRpcmVjdG9yeSB0aGF0IHdpbGwgY29udGFpbiB0aGUgaW1hZ2VzIG9mIHRoZSBtYXJrZXJzIGFuZCBvbmUgZm9yIHRoZSBzaGFkb3dzIG9mIHRoZSBtYXJrZXJzCiRwYXRoID0gJHRoaXMtPmNvbmZpZ1sndXBsb2Fkc19wYXRoJ10uJy8nLiR0aGlzLT5nZXROYW1lKCk7Ci8vIE1ha2Ugc3VyZSB0aGUgZGlyZWN0b3J5IGNhbiBiZSBmb3VuZC4gQ3JlYXRlIGl0LCBlcnJvciBoYW5kbGluZyB3aWxsIGNvdmVyIGFueSBwcm9ibGVtcyBmb3VuZAppZiAoICFmaWxlX2V4aXN0cyggJHBhdGggKSApIG1rZGlyKCRwYXRoLCAwNzc3KTsKJG1hcmtlcnNwYXRoID0gJHBhdGguRElSRUNUT1JZX1NFUEFSQVRPUi4nbWFya2Vycyc7CmlmICggIWZpbGVfZXhpc3RzKCAkbWFya2Vyc3BhdGggKSApIG1rZGlyKCRtYXJrZXJzcGF0aCwgMDc3Nyk7CiRtYXJrZXJzaGFkb3dzcGF0aCA9ICRwYXRoLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ21hcmtlcnNoYWRvd3MnOwppZiAoICFmaWxlX2V4aXN0cyggJG1hcmtlcnNoYWRvd3NwYXRoICkgKSBta2RpcigkbWFya2Vyc2hhZG93c3BhdGgsIDA3NzcpOwovLyBDb3B5IG92ZXIgdGhlIGRlZmF1bHQgc3VwcGxpZWQgbWFya2VycwokbWFya2VyZGlyID0gZGlybmFtZShfX0ZJTEVfXykuRElSRUNUT1JZX1NFUEFSQVRPUi4naW1hZ2VzJy5ESVJFQ1RPUllfU0VQQVJBVE9SLidtYXJrZXJzJzsKaWYgKGZpbGVfZXhpc3RzKCAkbWFya2VyZGlyICkgKSB7CgkkZGlyID0gb3BlbmRpcigkbWFya2VyZGlyKTsKCS8vIEZpbHRlciBvdXQgdGhlIGRpcmVjdG9yeSBjb250cm9saW5nIGNoYXJhY3RlcnMgYW5kIGJ1aWxkIHNlbGVjdGFibGUgb3B0aW9ucyBvZiB0aGUgb3RoZXJzCgl3aGlsZSAoKCRmaWxlID0gcmVhZGRpcigkZGlyKSkgIT09IGZhbHNlKQoJICB7CgkgIAlpZiAoJGZpbGUgIT0nLicgJiYgJGZpbGUhPScuLicpIHsKICAJCQljb3B5KCRtYXJrZXJkaXIuRElSRUNUT1JZX1NFUEFSQVRPUi4kZmlsZSwgJG1hcmtlcnNwYXRoLkRJUkVDVE9SWV9TRVBBUkFUT1IuJGZpbGUpOwoJICAJfQoJICB9CgljbG9zZWRpcigkZGlyKTsKfQovLyBQcmVwYXJlIHRlbXBsYXRlIHRvIGJlIHVzZWQgaW4gdGhlIHNldHRpbmdzIGZvciB0aGUgRWFzeSBMb2NhdG9yCiRmbiA9IGRpcm5hbWUoX19GSUxFX18pLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ3RlbXBsYXRlcycuRElSRUNUT1JZX1NFUEFSQVRPUi4nZWFzeWxvY2F0b3IudHBsJzsKaWYoIGZpbGVfZXhpc3RzKCAkZm4gKSApCnsKCSR0ZW1wbGF0ZSA9IEBmaWxlX2dldF9jb250ZW50cygkZm4pOwoJJHRoaXMtPlNldFRlbXBsYXRlKCAnZ29vZ2xlbWFwc19lYXN5bG9jYXRvcicsICR0ZW1wbGF0ZSwgJHRoaXMtPkdldE5hbWUoKSk7Cn0KCgovLyBwdXQgbWVudGlvbiBpbnRvIHRoZSBhZG1pbiBsb2cKJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCdpbnN0YWxsZWQnLCR0aGlzLT5HZXRWZXJzaW9uKCkpKTsKCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgoKJGRiID0mICRnQ21zLT5HZXREYigpOwoKLy8gUmVtb3ZlIHRoZSBkYXRhYmFzZSB0YWJsZXMKJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSggJGRiICk7CgovLyBSZW1vdmUgdGhlIG1hcHMKJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ29vZ2xlbWFwc19tYXBzIiApOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiRkYi0+RHJvcFNlcXVlbmNlKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9nb29nbGVtYXBzX21hcHNfc2VxIiApOwoKLy8gUmVtb3ZlIHRoZSBtYXJrZXJzCiRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dvb2dsZW1hcHNfbWFya2VycyIgKTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwokZGItPkRyb3BTZXF1ZW5jZSggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ29vZ2xlbWFwc19tYXJrZXJzX3NlcSIgKTsKCi8vIFJlbW92ZSB0aGUgY2FjaGUKJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ29vZ2xlbWFwc19jYWNoZSIgKTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwokZGItPkRyb3BTZXF1ZW5jZSggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ29vZ2xlbWFwc19jYWNoZV9zZXEiICk7CgovLyBSZW1vdmUgdGhlIHBlcm1pc3Npb25zCiR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKCdVc2UgR29vZ2xlTWFwcycpOwoKLy8gUmVtb3ZlIHRoZSBwcmVmZXJlbmNlcwokdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgpOwoKLy8gQW5kIGFsbCBUZW1wbGF0ZXMKJHRoaXMtPkRlbGV0ZVRlbXBsYXRlKCk7CgovLyBQdXQgYXVkaXQgdHJhaWwgaW50byB0aGUgYWRtaW4gbG9nCiR0aGlzLT5BdWRpdCggMCwgJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpLCAkdGhpcy0+TGFuZygndW5pbnN0YWxsZWQnKSk7Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgokY3VycmVudF92ZXJzaW9uID0gJG9sZHZlcnNpb247CnN3aXRjaCgkY3VycmVudF92ZXJzaW9uKQp7CiBjYXNlICIwLjEuMiI6CiAgIGJyZWFrOwogY2FzZSAiMC4xLjMiOgogICAkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7CgogICAjY2hhbmdlIG1hcCBpbmZvIHRvIHRleHQKICAgJHNxbGFycmF5ID0gJGRpY3QtPkFsdGVyQ29sdW1uU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dvb2dsZW1hcHNfbWFwcyIsICJkZXNjcmlwdGlvbiBYIik7CiAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKICAgI2NoYW5nZSBtYXJrZXIgaW5mbyB0byB0ZXh0CiAgICRzcWxhcnJheSA9ICRkaWN0LT5BbHRlckNvbHVtblNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9nb29nbGVtYXBzX21hcmtlcnMiLCAiaW5mbyBYIik7CiAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKICAgYnJlYWs7CiBjYXNlICIwLjEuNCI6CiAgICRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKCiAgICNjaGFuZ2UgbWFwIGluZm8gdG8gdGV4dAogICAkc3FsYXJyYXkgPSAkZGljdC0+QWx0ZXJDb2x1bW5TUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ29vZ2xlbWFwc19jYWNoZSIsICJsYXQgRiIpOwogICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiAgIAogICAkY3VycmVudF92ZXJzaW9uID0gIjAuMS40IjsKIGNhc2UgIjAuMS40IjoKIAkkY29uZmlnID0gJGdDbXMtPkdldENvbmZpZygpOwoJLy8gUHJlcGFyZSBhIGRpcmVjdG9yeSB0aGF0IHdpbGwgY29udGFpbiB0aGUgaW1hZ2VzIG9mIHRoZSBtYXJrZXJzIGFuZCBvbmUgZm9yIHRoZSBzaGFkb3dzIG9mIHRoZSBtYXJrZXJzCgkkcGF0aCA9ICR0aGlzLT5jb25maWdbJ3VwbG9hZHNfcGF0aCddLkRJUkVDVE9SWV9TRVBBUkFUT1IuJHRoaXMtPmdldE5hbWUoKTsKCS8vIE1ha2Ugc3VyZSB0aGUgZGlyZWN0b3J5IGNhbiBiZSBmb3VuZC4gQ3JlYXRlIGl0LCBlcnJvciBoYW5kbGluZyB3aWxsIGNvdmVyIGFueSBwcm9ibGVtcyBmb3VuZAoJbWtkaXIoJHBhdGgsIDA3NzcpOwoJJG1hcmtlcnNwYXRoID0gJHBhdGguRElSRUNUT1JZX1NFUEFSQVRPUi4nbWFya2Vycyc7Cglta2RpcigkbWFya2Vyc3BhdGgsIDA3NzcpOwoJJG1hcmtlcnNoYWRvd3NwYXRoID0gJHBhdGguRElSRUNUT1JZX1NFUEFSQVRPUi4nbWFya2Vyc2hhZG93cyc7Cglta2RpcigkbWFya2Vyc2hhZG93c3BhdGgsIDA3NzcpOwoJLy8gQ29weSBvdmVyIHRoZSBkZWZhdWx0IHN1cHBsaWVkIG1hcmtlcnMKCSRtYXJrZXJkaXIgPSBkaXJuYW1lKF9fRklMRV9fKS5ESVJFQ1RPUllfU0VQQVJBVE9SLidpbWFnZXMnLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ21hcmtlcnMnOwoJaWYgKGZpbGVfZXhpc3RzKCAkbWFya2VyZGlyICkgKSB7CgkJJGRpciA9IG9wZW5kaXIoJG1hcmtlcmRpcik7CgkJLy8gRmlsdGVyIG91dCB0aGUgZGlyZWN0b3J5IGNvbnRyb2xpbmcgY2hhcmFjdGVycyBhbmQgYnVpbGQgc2VsZWN0YWJsZSBvcHRpb25zIG9mIHRoZSBvdGhlcnMKCQl3aGlsZSAoKCRmaWxlID0gcmVhZGRpcigkZGlyKSkgIT09IGZhbHNlKQoJCSAgewoJCSAgCWlmICgkZmlsZSAhPScuJyAmJiAkZmlsZSE9Jy4uJykgewoJICAJCQljb3B5KCRtYXJrZXJkaXIuRElSRUNUT1JZX1NFUEFSQVRPUi4kZmlsZSwgJG1hcmtlcnNwYXRoLkRJUkVDVE9SWV9TRVBBUkFUT1IuJGZpbGUpOwoJCSAgCX0KCQkgIH0KCQljbG9zZWRpcigkZGlyKTsKCX0KCgkkY3VycmVudF92ZXJzaW9uID0gIjAuMS41IjsKIGNhc2UgIjAuMS41IjoKCS8vIE5vIGRhdGFiYXNlIGNoYW5nZXMuIE9ubHkgaW50ZXJuYWwgY2hhbmdlcyBmb3IgdGhlIHVzZSBvZiBwYXJhbWV0ZXJzICAgCgkkY3VycmVudF92ZXJzaW9uID0gIjAuMS42IjsKIGNhc2UgIjAuMS42IjoKIAkkY29uZmlnID0gJGdDbXMtPkdldENvbmZpZygpOwoJLy8gUHJlcGFyZSBuYW1lIG9mIGRpcmVjdG9yeSB3aXRoIG9sZCAyLjAgQVBJCgkkQVBJZGlyID0gJHRoaXMtPmNvbmZpZ1sncm9vdF91cmwnXS5ESVJFQ1RPUllfU0VQQVJBVE9SLidtb2R1bGVzJy4KCQlESVJFQ1RPUllfU0VQQVJBVE9SLiR0aGlzLT5nZXROYW1lKCkuCgkJRElSRUNUT1JZX1NFUEFSQVRPUi4nbGliJy5ESVJFQ1RPUllfU0VQQVJBVE9SLidHb29nbGVNYXBBUEktMi4wJzsKCSRwYXRoID0gJEFQSWRpcjsKCS8vIENsZWFyIHRoZSBkaXJlY3RvcnkKCSRoYW5kbGUgPSBvcGVuZGlyKCRBUElkaXIpOwoJd2hpbGUgKEZBTFNFICE9PSAoJGVudHJ5ID0gcmVhZGRpcigkaGFuZGxlKSkpIHsKCQlpZiAoJGVudHJ5ICE9ICcuJyAmJiAkZW50cnkgIT0gJy4uJykKCQl7CgkJCWlmKCEoc3Vic3RyKCRwYXRoLC0xKSA9PSBESVJFQ1RPUllfU0VQQVJBVE9SKSkJJHBhdGggLj0gRElSRUNUT1JZX1NFUEFSQVRPUjsKCQkJJG9iaiA9ICRwYXRoLiRlbnRyeTsKCQkJaWYgKGlzX2ZpbGUoJG9iaikpCgkJCXsKCQkJCXVubGluaygkb2JqKTsJCQkJCQoJCQl9CgkJfQoJfQoJY2xvc2VkaXIoJGhhbmRsZSk7CgkvLyBOb3cgdGhhdCBpdHMgY2xlYXIsIHJlbW92ZSB0aGUgZGlyZWN0b3J5CglpZihpc19kaXIoJEFQSWRpcikpIHJtZGlyKCRBUElkaXIpOwoKCSRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKCSRzcWxhcnJheSA9ICRkaWN0LT5BZGRDb2x1bW5TUUwoY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfZ29vZ2xlbWFwc19tYXBzJywgJ3pvb21zY3JvbGx3aGVlbCBMJyApOwoJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoJJHNxbGFycmF5ID0gJGRpY3QtPkFkZENvbHVtblNRTChjbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9nb29nbGVtYXBzX21hcHMnLCAnc2NhbGVfY29udHJvbCBMJyApOwoJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoKCSRjdXJyZW50X3ZlcnNpb24gPSAnMC4xLjcnOwoKIGNhc2UgJzAuMS43JzoKCSRmbiA9IGRpcm5hbWUoX19GSUxFX18pLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ3RlbXBsYXRlcycuRElSRUNUT1JZX1NFUEFSQVRPUi4nZWFzeWxvY2F0b3IudHBsJzsKCWlmKCBmaWxlX2V4aXN0cyggJGZuICkgKQoJewoJCSR0ZW1wbGF0ZSA9IEBmaWxlX2dldF9jb250ZW50cygkZm4pOwoJCSR0aGlzLT5TZXRUZW1wbGF0ZSggJ2dvb2dsZW1hcHNfZWFzeWxvY2F0b3InLCAkdGVtcGxhdGUsICR0aGlzLT5HZXROYW1lKCkpOwoJfQoKCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxldmVsJywgMSApOwoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2Vhc3lsb2NhdG9ybGF0JywgNDQgKTsKCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdlYXN5bG9jYXRvcmxvbicsIC02MyApOwoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2Vhc3lsb2NhdG9yc2F2ZWxhc3QnLCAnMScgKTsKCSRjdXJyZW50X3ZlcnNpb24gPSAnMC4xLjgnOwoKIGRlZmF1bHQ6CiAgICBicmVhazsKfQoKLy8gcHV0IG1lbnRpb24gaW50byB0aGUgYWRtaW4gbG9nCiR0aGlzLT5BdWRpdCggMCwgJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpLCAkdGhpcy0+TGFuZygndXBncmFkZWQnLCR0aGlzLT5HZXRWZXJzaW9uKCkpKTsKCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/easylocator.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2xpdGVyYWx9DQo8c2NyaXB0IHNyYz0iaHR0cDovL21hcHMuZ29vZ2xlLmNvbS9tYXBzP2ZpbGU9YXBpJmFtcDt2PTImYW1wOw0Ka2V5PXsvbGl0ZXJhbH17JGFwaWtleX17bGl0ZXJhbH0iDQp0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2NyaXB0Pg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPiANCi8vPCFbQ0RBVEFbDQovLyBUaGUgJ3JlZ3VsYXInIHdpbmRvdy5vbmxvYWQgaXMgdXNlZCBmb3IgaGFuZGxpbmcgdGhlIHRhYnMgaW4gYmFja2dyb3VuZA0KLy8gU28gYSBsaXRsZSBkZXZpYXRpb24gaXMgbmVlZGVkDQpmdW5jdGlvbiBhZGRMb2FkRXZlbnQoZnVuYykgew0KICB2YXIgb2xkb25sb2FkID0gd2luZG93Lm9ubG9hZDsNCiAgaWYgKHR5cGVvZiB3aW5kb3cub25sb2FkICE9ICdmdW5jdGlvbicpIHsNCiAgICB3aW5kb3cub25sb2FkID0gZnVuYzsNCiAgfSBlbHNlIHsNCiAgICB3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKSB7DQogICAgICBpZiAob2xkb25sb2FkKSB7DQogICAgICAgIG9sZG9ubG9hZCgpOw0KICAgICAgfQ0KICAgICAgZnVuYygpOw0KICAgIH0NCiAgfQ0KfQ0KDQphZGRMb2FkRXZlbnQob25QYWdlTG9hZCk7DQoNCi8vIGFycmFuZ2UgZm9yIG91ciBvbnVubG9hZCBoYW5kbGVyIHRvICdsaXN0ZW4nIGZvciBvbnVubG9hZCBldmVudHMNCmlmICh3aW5kb3cuYXR0YWNoRXZlbnQpIHsNCiAgICAgICAgd2luZG93LmF0dGFjaEV2ZW50KCJvbnVubG9hZCIsIGZ1bmN0aW9uKCkgew0KICAgICAgICAgICAgICAgIEdVbmxvYWQoKTsgICAgICAvLyBJbnRlcm5ldCBFeHBsb3Jlcg0KICAgICAgICB9KTsNCn0gZWxzZSB7DQoNCiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInVubG9hZCIsIGZ1bmN0aW9uKCkgew0KICAgICAgICAgICAgICAgIEdVbmxvYWQoKTsgLy8gRmlyZWZveCBhbmQgc3RhbmRhcmQgYnJvd3NlcnMNCiAgICAgICAgfSwgZmFsc2UpOw0KDQp9DQp3aW5kb3cub251bmxvYWQgPSBHVW5sb2FkKCk7DQp2YXIgbWFwOw0KDQpmdW5jdGlvbiBvblBhZ2VMb2FkKCkgew0KCWlmIChHQnJvd3NlcklzQ29tcGF0aWJsZSgpKSB7DQoJCW1hcCA9IG5ldyBHTWFwMihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFwIiksIHtkcmFnZ2FibGVDdXJzb3I6ICdjcm9zc2hhaXInfSk7DQoJCW1hcC5zZXRDZW50ZXIobmV3IEdMYXRMbmcoey9saXRlcmFsfXskZWFzeWxvY2F0b3JsYXR9LHskZWFzeWxvY2F0b3Jsb259KSx7JGVhc3lsb2NhdG9ybGV2ZWx9e2xpdGVyYWx9KTsNCgkJbWFwLmFkZENvbnRyb2wobmV3IEdMYXJnZU1hcENvbnRyb2woKSk7DQoJCUdFdmVudC5hZGRMaXN0ZW5lcihtYXAsICdjbGljaycsIGZ1bmN0aW9uKG92ZXJsYXksIGxhdGxuZykgew0KCQkJdmFyIHNlbGVjdGVkV2ViU2VydmljZSA9ICdndG9wbzMwJzsNCgkJICBpZiAoZG9jdW1lbnQuZm9ybXNbMF0uY2VudGVyX2xhdCkgew0KCQkJICAvLyBDb3B5IHRoZSBmb3VuZCBjb29yZGluYXRlcyBvbiBhIG1hcA0KCQkJICBkb2N1bWVudC5mb3Jtc1swXS5jZW50ZXJfbGF0LnZhbHVlID0gbGF0bG5nLmxhdCgpLnRvRml4ZWQoNSk7DQoJCQkgIGRvY3VtZW50LmZvcm1zWzBdLmNlbnRlcl9sb24udmFsdWUgPSBsYXRsbmcubG5nKCkudG9GaXhlZCg1KTsNCgkJICB9DQoJCSAgaWYgKGRvY3VtZW50LmZvcm1zWzBdLmxhdCkgew0KCQkJICAvLyBDb3B5IHRoZSBmb3VuZCBjb29yZGluYXRlcyBmb3IgYSBtYXJrZXINCgkJCSAgZG9jdW1lbnQuZm9ybXNbMF0ubGF0LnZhbHVlID0gbGF0bG5nLmxhdCgpLnRvRml4ZWQoNSk7DQoJCQkgIGRvY3VtZW50LmZvcm1zWzBdLmxvbi52YWx1ZSA9IGxhdGxuZy5sbmcoKS50b0ZpeGVkKDUpOw0KCQkgIH0NCgkJfSk7DQoJfQ0KfQ0KICAvL11dPg0KPC9zY3JpcHQ+DQp7L2xpdGVyYWx9IA0KPGRpdiBpZD0ibWFwIiBzdHlsZT0id2lkdGg6IDUwMHB4OyBoZWlnaHQ6IDMwMHB4Ij48L2Rpdj4g]]></data>
	</file>
	<file>
	  <filename>/templates/error.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskdGl0bGV9PC9oMz4Ke2lmICRlcnJvciE9Jyd9PHA+eyRlcnJvcn08L3A+ey9pZn0=]]></data>
	</file>
	<file>
	  <filename>/templates/map.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRnb29nbGVfbWFwX2hlYWRlcn0KCnsqCjwhLS0gbmVjZXNzYXJ5IGZvciBnb29nbGUgbWFwcyBwb2x5bGluZSBkcmF3aW5nIGluIElFIC0tPgp7bGl0ZXJhbH0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4Kdlw6KiB7CiBiZWhhdmlvcjp1cmwoI2RlZmF1bHQjVk1MKTsKfQp7L2xpdGVyYWx9Cjwvc3R5bGU+Cip9Cgo8dGFibGU+CiAgPHRyPgogICAgIDx0ZD57JGdvb2dsZV9tYXB9PC90ZD4KICAgICA8dGQ+eyRnb29nbGVfbWFwX3NpZGViYXJ9PC90ZD4KICA8L3RyPgo8L3RhYmxlPgoKeyRnb29nbGVfbWFwX2pzfQp7JG1hcF9kZXNjcmlwdGlvbn0=]]></data>
	</file>
</module>
