<?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>Promotions</name>
	<version>1.3.1.1</version>
    <mincmsversion>2.2.2</mincmsversion>
	<help><![CDATA[PGgzPldoYXQgZG9lcyB0aGlzIGRvPzwvaDM+CjxwPlRoaXMgbW9kdWxlIHdvcmtzIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFByb2R1Y3RzIGFuZCBPcmRlcnMgbW9kdWxlIHRvIGFsbG93IGNyZWF0aW5nIGFuZCBtYW5hZ2luZyB0aW1lIGxpbWl0ZWQgcHJvbW90aW9ucyBmb3IgdGhlIHByb2R1Y3RzIG9uIHlvdXIgZS1jb21tZXJjZSB3ZWJzaXRlLjwvcD4KCjxoMz5GZWF0dXJlczo8L2gzPgo8dWw+CjxsaT48dT5BbGwgcHJvbW90aW9ucyBhcmUgdGltZSBsaW1pdGVkLjwvdT48YnIvPjxici8+PC9saT4KPGxpPjx1PkEgcHJvbW90aW9uIGNhbiBoYXZlIG9uZSBvciBtb3JlIGNvbmRpdGlvbnMgdG8gaW5kaWNhdGUgZWxpZ2liaWxpdHkuPC91PgogIDxwPklmIGEgcHJvbW90aW9uIGlzIGRlZmluZWQgd2l0aCB0d28gb3IgbW9yZSBjb25kaXRpb25zLCBhbGwgb2YgdGhvc2UgY29uZGl0aW9ucyBtdXN0IGJlIG1ldCBpbiBvcmRlciBmb3IgdGhlIGN1c3RvbWVyIHRvIGJlIGVsaWdpYmxlIGZvciB0aGUgcHJvbW90aW9uLjwvcD4KICA8cD5BIG51bWJlciBvZiBjb25kaXRpb24gdHlwZXMgZXhpc3QuLi4gSG93ZXZlciBzb21lIG9mIHRoZW0gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggb3RoZXJzLiAgaS5lOiAgWW91IGNhbm5vdCBoYXZlIHR3byBkaWZmZXJlbnQgdHlwZSBvZiBwcm9kdWN0IGNvbmRpdGlvbnMuPC9wPgogIDx1bD4KPGxpPjx1PlJlcXVpcmUgbWVtYmVyc2hpcCBpbiBhbiBGRVUgR3JvdXA6PC91PgogIDxwPllvdSBjYW4gZW50ZXIgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBGRVUgZ3JvdXAgbmFtZXMuICBUaGUgbG9nZ2VkIGluIHdlYnNpdGUgdmlzaXRvciBtdXN0IGJlIGEgbWVtYmVyIG9mIG9uZSBvZiB0aGVzZSBncm91cHMgdG8gYmUgZWxpZ2libGUgZm9yIHRoZSBwcm9tb3Rpb24uPC9wPjwvbGk+CiAgPGxpPjx1PlJlcXVpcmUgYSBtaW5pbXVtIHB1cmNoYXNlIGFtb3VudDo8L3U+CiAgPHA+SW4gb3JkZXIgZm9yIGEgY3VzdG9tZXIgdG8gbWVldCB0aGlzIGNvbmRpdGlvbiwgdGhlIHByZS10YXgvcHJlLXNoaXBwaW5nIHRvdGFsIGZvciB0aGVpciBvcmRlciBtdXN0IG1lZXQgdGhlIHNwZWNpZmllZCBtaW5pbXVtIHZhbHVlLjwvcD48L2xpPgogIDxsaT48dT5SZXF1aXJlIHRoZSBwdXJjaGFzZSBvZiBhIHNwZWNpZmljIHByb2R1Y3Q6PC91PgogIDxwPkluIG9yZGVyIGZvciBhIGN1c3RvbWVyIHRvIG1lZXQgdGhpcyBjb25kaXRpb24sIGhpcyBjYXJ0IG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgcHJvZHVjdCBtYXRjaGluZyB0aGUgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgcHJvZHVjdCBpZHMgZW50ZXJlZC48L3A+PC9saT4KICA8bGk+PHU+UmVxdWlyZSBwdXJjaGFzZSBvZiBhdGxlYXN0IG9uZSBwcm9kdWN0IGluIGEgY2F0ZWdvcnk6PC91PgogIDxwPkluIG9yZGVyIGZvciBhIGN1c3RvbWVyIHRvIG1lZXQgdGhpcyBjb25kaXRpb24sIGhpcyBjYXJ0IG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgcHJvZHVjdCB0aGF0IGlzIHdpdGhpbiBhdCBsZWFzdCBvbmUgb2YgdGhlIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGNhdGVnb3J5IG5hbWVzIChmcm9tIHRoZSBwcm9kdWN0cyBtb2R1bGUpIHNwZWNpZmllZC48L3A+PC9saT4KICA8bGk+PHU+UmVxdWlyZSBwdXJjaGFzZSBvZiBhdGxlYXN0IG9uZSBwcm9kdWN0IGluIGEgaGllcmFyY2h5OjwvdT4KICA8cD5JbiBvcmRlciBmb3IgYSBjdXN0b21lciB0byBtZWV0IHRoaXMgY29uZGl0aW9uLCBoaXMgY2FydCBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIHByb2R1Y3QgdGhhdCBpcyB3aXRoaW4gdGhlIHNwZWNpZmllZCBwcm9kdWN0cyBtb2R1bGUgaGllcmFyY2h5LjwvcD4KICA8cD5IaWVyYXJjaHkgbmFtZXMgY2FuIGJlIHNwZWNpZmllZCBpbiB0aGUgZm9ybSBvZiAmcXVvdDtQYXJlbnQuUGFyZW50LkNoaWxkJnF1b3Q7IGkuZTogJnF1b3Q7Q2xvdGhpbmcuVGVudHMmcXVvdDsuICBIaWVyYXJjaHkgbmFtZXMgYXJlIG5vdCBjYXNlIHNlbnNpdGl2ZS4gIFdpbGRjYXJkcyBjYW4gYmUgc3BlY2ZpZmllZCBieSB1c2luZyB0aGUgKiBjaGFyYWN0ZXIuICBpLmU6ICZxdW90O0Nsb3RoaW5nKiZxdW90Oy48L3A+PC9saT4KICA8bGk+PHU+UmVxdWlyZSBhIENvdXBvbiBDb2RlOjwvdT4KICA8cD5JbiBvcmRlciBmb3IgYSBjdXN0b21lciB0byBtZWV0IHRoaXMgY29uZGl0aW9uLCBoZSBtdXN0IGhhdmUgc3VwcGxpZWQgdGhlIGNvdXBvbiBjb2RlIHRoYXQgbWF0Y2hlcyB0aGlzIGNvbmRpdGlvbi48L3A+CiAgPHA+SW4gb3JkZXIgdG8gYWxsb3cgY3VzdG9tZXJzIHRvIGVudGVyIGNvdXBvbiBjb2RlcywgeW91IG5lZWQgdG8gYWRkIGEgdGFnIGludG8geW91ciBwYWdlIHRlbXBsYXRlIG9yIHBhZ2UgY29udGVudCBsaWtlIHtQcm9tb3Rpb25zfS4gIFRoaXMgd2lsbCBkaXNwbGF5IGEgZm9ybSB0aGF0IGFsbG93cyB5b3VyIHVzZXJzIHRvIGVudGVyIGNvdXBvbiBjb2Rlcy4gIENvdXBvbiBjb2RlcyBhcmUgcmVtZW1iZXJlZCB1bnRpbCB0aGUgdXNlciBjbG9zZXMgdGhlIGJyb3dzZXIuPC9wPjwvbGk+CiAgPGxpPjx1PlJlcXVpcmUgYSBtaW5pbXVtIG9yZGVyIHdlaWdodDo8L3U+CiAgPHA+SW4gb3JkZXIgZm9yIGEgY3VzdG9tZXIgdG8gbWVldCB0aGlzIGNvbmRpdGlvbiwgdGhlIHN1bSB0b3RhbCBvZiBhbGwgb2YgdGhlIHdlaWdodCB2YWx1ZXMgZm9yIHRoZSBpdGVtcyBpbiBoaXMgY2FydCBtdXN0IG1lZXQgb3IgZXhjZWVkIHRoZSB2YWx1ZSBzcGVjaWZpZWQuPC9wPjwvbGk+CiAgPC91bD4KPC9saT4KCjxsaT48dT5FYWNoIHByb21vdGlvbiBjYW4gaGF2ZSBhIGRpZmZlcmVudCAmcXVvdDtvZmZlciZxdW90OzwvdT4KPHA+QSBudW1iZXIgb2YgZGlmZmVyZW50IG9mZmVycyB0eXBlcyBhcmUgYXZhaWxhYmxlOjwvcD4KICA8dWw+CjxsaT48dT5QZXJjZW50YWdlIG9mZiBvcmRlciB0b3RhbDo8L3U+CjxwPlRoaXMgb2ZmZXIgdHlwZSBhbGxvd3MgeW91IHRvIHNwZWNpZnkgYSBmbG9hdGluZyBwb2ludCB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEgdG8gaW5kaWNhdGUgYSBwZXJjZW50YWdlIG9mZi4gIGkuZTogMC4xIGluZGljYXRlcyAxMCUgb2ZmLiAgIER1cmluZyB0aGUgY2hlY2tvdXQgcHJvY2VzcywgYW55IG5vbiB0YXgsIG9yIG5vbiBzaGlwcGluZyBpdGVtIGluIHRoZSBvcmRlciB3aWxsIGJlIHJlZHVjZWQgaW4gcHJpY2UgYnkgdGhlIHNwZWNpZmllZCBhbW91bnQuPC9wPjwvbGk+CjxsaT48dT5SZWR1Y2Ugb3JkZXIgdG90YWwgYnkgYSBzcGVjaWZpZWQgYW1vdW50OjwvdT4KPHA+VGhpcyBvZmZlciB0eXBlIGFsbG93cyB5b3UgdG8gcmVkdWNlIHRoZSBhbW91bnQgb2YgdGhlIG9yZGVyIGJ5IGEgY2VydGFpbiBkb2xsYXIgZmlndXJlLiAgVGhpcyBkb2xsYXIgZmlndXJlIHdpbGwgYmUgYWRkZWQgYXMgYSBkaXNjb3VudCBpdGVtIGludG8gdGhlIG9yZGVyIGxpbmUgaXRlbXMgYW5kIHdpbGwgYXBwZWFyIG9uIHRoZSBpbnZvaWNlLjwvcD48L2xpPgo8bGk+PHU+UmVjZWl2ZSBhIEZyZWUgUHJvZHVjdDo8L3U+CjxwPlRoaXMgb2ZmZXIgdHlwZSBhbGxvd3MgeW91IHRvIHNwZWNpZnkgYSBwcm9kdWN0IGlkIHRvIGF1dG9tYXRpY2FsbHkgaW5jbHVkZSBpbiB0aGUgb3JkZXIgYXQgbm8gY29zdC4gIFRoaXMgcHJvZHVjdCB3aWxsIGJlIGFkZGVkIGFzIGEgcHJvZHVjdCBpdGVtIGludG8gdGhlIG9yZGVyIGxpbmUgaXRlbXMsIGJ1dCB3aWxsIGFwcGVhciBhdCBubyBjb3N0LjwvcD48L2xpPgo8bGk+PHU+RGlzY291bnQgdGhlIGFwcGxpY2FibGUgcHJvZHVjdHMgYnkgYSBwZXJjZW50YWdlOjwvdT4KPHA+VGhpcyBvZmZlciB0eXBlIG9ubHkgd29ya3MgaWYgYXQgbGVhc3Qgb25lIHByb2R1Y3QgY29uZGl0aW9uIGlzIHNwZWNpZmllZC4gIElmIGEgcHJvZHVjdCBjb25kaXRpb24gaXMgc3BlY2lyaWVkLCBhbmQgbWF0Y2hlcywgdGhpcyBvZmZlciB0eXBlIHdpbGwgZGlzY291bnQgdGhlIG1hdGNoaW5nIHByb2R1Y3RzIGZyb20gdGhlIGN1c3RvbWVyIG9yZGVyIGJ5IHRoZSBzcGVjaWZpZWQgdmFsdWUuPC9wPi4KICA8L3VsPgo8L2xpPgo8bGk+PHU+QWxsb3dzIHdlYnNpdGUgdmlzaXRvcnMgdG8gZW50ZXIgb25lIG9yIG1vcmUgY291cG9uIGNvZGVzPC91Pjxici8+PGJyLz48L2xpPgo8bGk+PHU+RGlzY291bnRzIGFyZSBjYWxjdWxhdGVkIGFuZCBhcHBsaWVkIHRvIHRoZSBvcmRlciBkdXJpbmcgdGhlIGNoZWNrb3V0IHByb2Nlc3MuPC91Pjxici8+PGJyLz48L2xpPgo8bGk+PHU+SWYgYSB3ZWIgY3VzdG9tZXIgaXMgZWxpZ2libGUgZm9yIG11bHRpcGxlIHByb21vdGlvbnMsIHRoZSBvbmUgd2l0aCB0aGUgZ3JlYXRlc3QgdmFsdWUgaXMgYXBwbGllZC48L3U+PC9saT4KPC91bD4KPGJyLz4KCjxoMz5Ib3cgRG8gSSBVc2UgSXQ6PC9oMz4KPG9sPgogIDxsaT4xLiBJbnN0YWxsIGFuZCBjb25maWd1cmUgdGhlIG1vZHVsZTwvbGk+CiAgPGxpPjIuIENyZWF0ZSBhdCBsZWFzdCBvbmUgcHJvbW90aW9uPC9saT4KICA8bGk+My4gU3BlY2lmeSB0aGlzIG1vZHVsZSBhcyB0aGUgJnF1b3Q7UHJvbW90aW9ucyZxdW90OyBtb2R1bGUgd2l0aGluIHRoZSBPcmRlcnMgUHJlZmVyZW5jZXMuPC9saT4KICA8bGk+NC4gPGVtPihvcHRpb25hbCk8L2VtPiBBZGQge1Byb21vdGlvbnN9IHRvIGEgcGFnZSB0ZW1wbGF0ZSBvciBwYWdlIGNvbnRlbnQuPC9lbT48L2xpPgo8L29sPgoKPGgzPkV4YW1wbGU6PC9oMz4KPHA+SW4gdGhpcyBleGFtcGxlIHdlIHdpbGwgY3JlYXRlIGEgcHJvbW90aW9uIGxpa2UgJnF1b3Q7MTAlIG9mZiBhbGwgb3JkZXJzIG92ZXIgJDEwMCwgd2l0aCBjb3Vwb24gY29kZSZxdW90Ozo8L3A+Cjx1bD4KICA8bGk+MS4gPHU+Q3JlYXRlIGEgbmV3IHByb21vdGlvbjwvdT4KICA8cD5OYXZpZ2F0ZSB0byB0aGUgcHJvbW90aW9ucyBtb2R1bGUgYWRtaW4gcGFuZWwsIGFuZCBjbGljayBvbiAmcXVvdDtBZGQgYSBOZXcgUHJvbW90aW9uJnF1b3Q7LiAgWW91IHdpbGwgYmUgcHJlc2VudGVkIHdpdGggdGhlIHByb21vdGlvbnMgZm9ybS48L3A+PC9saT4KICA8bGk+Mi4gPHU+U3BlY2lmeSBhIHByb21vdGlvbiBuYW1lPC91PgogIDxwPkZvciB0aGlzIGV4YW1wbGUgd2Ugd2lsbCB1c2UgdGhlIG5hbWUgJnF1b3Q7U2ltcGxlIFNhbGUmcXVvdDs8L3A+PC9saT4KICA8bGk+My4gPHU+QWRkIGEgY291cG9uIGNvbmRpdGlvbjwvdT4KICA8cD5Gcm9tIHRoZSAmcXVvdDtUeXBlIG9mIENvbmRpdGlvbiZxdW90OyBkcm9wZG93biBzZWxlY3QgJnF1b3Q7UmVxdWlyZSBhIENvdXBvbiBDb2RlJnF1b3Q7LiAgRW50ZXIgJnF1b3Q7c2ltcGxlc2FsZSZxdW90OyBpbnRvIHRoZSBpbnB1dCBmaWVsZCBiZWxvdyBhbmQgY2xpY2sgQWRkLjwvcD48L2xpPgogIDxsaT40LiA8dT5BZGQgYW4gb3JkZXIgcHJpY2UgY29uZGl0aW9uPC91PgogIDxwPkZyb20gdGhlICZxdW90O1R5cGUgb2YgQ29uZGl0aW9uJnF1b3Q7IGRyb3Bkb3duIHNlbGVjdCAmcXVvdDtSZXF1aXJlIGEgTWluaW11bSBQdXJjaGFzZSBBbW91bnQmcXVvdDsgZnJvbSB0aGUgZHJvcGRvd24sIGFuZCBlbnRlciAxMDAgaW50byB0aGUgaW5wdXQgZmllbGQgYmVsb3cuICBDbGljayBBZGQuPC9wPjwvbGk+CiAgPGxpPjUuIDx1PlNwZWNpZnkgdGhlIG9mZmVyIHR5cGUsIGFuZCBhbW91bnQ8L3U+CiAgPHA+U2VsZWN0IHRoZSBvZmZlciB0eXBlICZxdW90O1BlcmNlbnRhZ2Ugb2ZmIG9yZGVyIHRvdGFsJnF1b3Q7IGFuZCBlbnRlciAwLjEgaW50byB0aGUgdGV4dCBmaWVsZCBiZWxvdyB0byBpbmRpY2F0ZSAxMCUmcXVvdDs8L3A+PC9saT4KICA8bGk+Ni4gPHU+Q2xpY2sgc3VibWl0PC91PjwvbGk+CjwvdWw+Cgo8aDM+U21hcnR5IFBsdWdpbnM8L2gzPgo8cD5UaGlzIG1vZHVsZSBhbHNvIHByb3ZpZGVzIGEgc21hcnR5IHBsdWdpbiB0byBhaWQgaW4gcmV0cmlldmluZyBhbmQgZGlzcGxheWluZyBkaXNjb3VudHMgZm9yIGEgc2luZ2xlIHByb2R1Y3QuPC9wPgo8dWw+CiAgPGxpPjxzdHJvbmc+e3Byb21vX2dldF9wcm9kX2Rpc2NvdW50IFtmZXVfdWlkPXZhbF0gcHJvZHVjdF9pZD12YWwgW2Fzc2lnbj12YXJdfTwvc3Ryb25nPgogIDxwPklmIHN1Y2Nlc3NmdWwsIHRoaXMgcGx1Z2luIHJldHVybnMgYSBoYXNoIGNvbnRhaW5pbmcgZGlzY291bnQgaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgcHJvZHVjdC4gIFRoZSBncmVhdGVzdCBwb3NzaWJsZSBkaXNjb3VudCBpcyBjYWxjdWxhdGVkLCBjb25zaWRlcmluZyBhbGwgYWN0aXZlIHByb21vdGlvbnMsIHVzZXIgaWQsIGVudGVyZWQgY291cG9uIGNvZGVzLCBhbmQgb3RoZXIgbWF0Y2hpbmcgY29uZGl0aW9ucy48L3A+CiAgPHA+UGFyYW1ldGVyczo8L3A+CiAgPHVsPgogIDxsaT5mZXVfdWlkIChvcHRpb25hbCkgLSBUaGUgRnJvbnRFbmRVc2VycyB1c2VyaWQgdG8gdGVzdCB3aXRoLiAgSWYgdGhpcyBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgY3VycmVudGx5IGxvZ2dlZCBpbiB1c2VyIGlkIHdpbGwgYmUgdXNlZC48L2xpPgogIDxsaT5wcm9kdWN0X2lkIChyZXF1aXJlZCkgLSBUaGUgSUQgb2YgdGhlIHByb2R1Y3QgdG8gdGVzdCB3aXRoLjwvbGk+CiAgPGxpPmFzc2lnbiAob3B0aW9uYWwpIC0gT3B0aW9uYWxseSBhc3NpZ24gdGhlIG91dHB1dCB0byB0aGUgc3BlY2lmaWVkIHNtYXJ0eSB2YXJpYWJsZS48L2xpPgogIDwvdWw+CiAgPC9saT4KPC91bD4KCjxoMz5DYXV0aW9uczo8L2gzPgo8cD4xLiBQcm9tb3Rpb25zIGFyZSBjYWxjdWxhdGVkIG9uIHRoZSBvcmRlciBpbiBzZXF1ZW5jZS4gIE11bHRpcGxlIHByb21vdGlvbnMgbWF5IG1hdGNoIHRoZSBpdGVtcyBvZiBhIHNpbmdsZSBvcmRlciwgdGhpcyBtYXkgcmVzdWx0IGluIGEgc2luZ2xlIG9yZGVyIGhhdmluZyBhIHplcm8gPGVtIHN0eWxlPSJjb2xvcjogcmVkOyI+bmVnYXRpdmUgdmFsdWU8L2VtPi4gIFRoZSBvcmRlcnMgbW9kdWxlIG1heSBkbyBzb21lIGJhc2ljIGNoZWNrcyB0byBoZWxwIHdpdGggb3JkZXIgaW50ZWdyaXR5LCBidXQgZG8gbm90IGNvdW50IG9uIGl0LiAgWW91IGFyZSBlbmNvdXJhZ2VkIHRvIFRFU1QgeW91ciBwcm9tb3Rpb25zIGFuZCB0byBhbHdheXMgbW9uaXRvciB0aGVtIGJlZm9yZSByb2xsaW5nIHRoZW0gbGl2ZS48L3A+CjxwPjIuIEluc3RhbnQgcHJvbW90aW9ucyByZWx5aW5nIG9uIGNvdXBvbiBjb2RlcyBhcmUgbm90IHJlY29tbWVuZGVkLiAgVGhpcyBpcyBiZWNhdXNlIHRoZSBjb250ZW50cyBvZiB0aGUgY2FydCAob3IgbXVsdGlwbGUgY2FydHMpIGFyZSBub3QgYW5hbHl6ZWQgYWZ0ZXIgYSB1c2VyIGVudGVycyBhIGNvdXBvbiBjb2RlLCBvbmx5IHdoZW4gYWRkaW5nIG9yIHJlbW92aW5nIGNhcnQgaXRlbXMuPC9wPgoKPGgzPlN1cHBvcnQ8L2gzPgo8cD5UaGUgbW9kdWxlIGF1dGhvciBpcyBpbiBubyB3YXkgb2JsaWdhdGVkIHRvIHByaXZpZGUgc3VwcG9ydCBmb3IgdGhpcyBjb2RlIGluIGFueSBmYXNoaW9uLiAgSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlc291cmNlcyBhdmFpbGFibGUgdG8gaGVscCB5b3Ugd2l0aCBpdDo8L3A+Cjx1bD4KPGxpPkEgYnVnIHRyYWNraW5nIGFuZCBmZWF0dXJlIHJlcXVlc3Qgc3lzdGVtIGhhcyBiZWVuIGNyZWF0ZWQgZm9yIHRoaXMgbW9kdWxlIDxhIGhyZWY9Imh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvcHJvbW90aW9ucyI+aGVyZTwvYT4uICBQbGVhc2UgYmUgdmVyYm9zZSBhbmQgZGVzY3JpcHRpdmUgd2hlbiBzdWJtaXR0aW5nIGJ1ZyByZXBvcnRzIGFuZCBmZWF0dXJlIHJlcXVlc3RzLCBhbmQgZm9yIGJ1ZyByZXBvcnRzIGVuc3VyZSB0aGF0IHlvdSBoYXZlIHByb3ZpZGVkIHN1ZmZpY2llbnQgaW5mb3JtYXRpb24gdG8gcmVsaWFibHkgcmVwcm9kdWNlIHRoZSBpc3N1ZS48L2xpPgo8bGk+QWRkaXRpb25hbCBkaXNjdXNzaW9uIG9mIHRoaXMgbW9kdWxlIG1heSBhbHNvIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0uY21zbWFkZXNpbXBsZS5vcmciPkNNUyBNYWRlIFNpbXBsZSBGb3J1bXM8L2E+LiAgV2hlbiBkZXNjcmliaW5nIGFuIGlzc3VlIHBsZWFzZSBtYWtlIGFuIGVmZm9ydCB0byBwcml2aWRlIGFsbCByZWxhdmFudCBpbmZvcm1hdGlvbiwgYSB0aG9yb3VnaCBkZXNjcmlwdGlvbiBvZiB5b3VyIGlzc3VlLCBhbmQgc3RlcHMgdG8gcmVwcm9kdWNlIGl0IG9yIHlvdXIgZGlzY3Vzc2lvbiBtYXkgYmUgaWdub3JlZC48L2xpPgo8bGk+VGhlIGF1dGhvciwgY2FsZ3V5MTAwMCwgY2FuIG9mdGVuIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSJpcmM6Ly9pcmMuZnJlZW5vZGUubmV0LyNjbXMiPkNNUyBJUkMgQ2hhbm5lbDwvYT4uPC9saT4KPGxpPkxhc3RseSwgeW91IG1heSBoYXZlIHNvbWUgc3VjY2VzcyBlbWFpbGluZyB0aGUgYXV0aG9yIGRpcmVjdGx5LiAgSG93ZXZlciwgcGxlYXNlIHVzZSB0aGlzIGFzIGEgbGFzdCByZXNvcnQsIGFuZCBlbnN1cmUgdGhhdCB5b3UgaGF2ZSBmb2xsb3dlZCBhbGwgYXBwbGljYWJsZSBpbnN0cnVjdGlvbnMgb24gdGhlIGZvcmdlLCBpbiB0aGUgZm9ydW1zLCBldGMuPC9saT4KPC91bD4KCjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPgo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMDgsIFJvYmVydCBDYW1wYmVsbCA8YSBocmVmPSJtYWlsdG86Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZyI+Jmx0O2NhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcmZ3Q7PC9hPi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPgo8cD5UaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQppdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQp0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgooYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLjwvcD4KPHA+SG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkCmFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQppbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCk1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbgpzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLjwvcD4KPHA+VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCmJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKT3IgcmVhZCBpdCA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiPm9ubGluZTwvYT48L3A+CjxoMz5EZXBlbmRlbmNpZXM8L2gzPjx1bD48bGk+Q0dFeHRlbnNpb25zID0mZ3Q7IDEuNTYuMjwvbGk+PGxpPk9yZGVycyA9Jmd0OyAxLjIyLjM8L2xpPjxsaT5KUXVlcnlUb29scyA9Jmd0OyAxLjMuOTwvbGk+PGxpPlByb2R1Y3RzID0mZ3Q7IDIuMjcuNDwvbGk+PGxpPkNHRWNvbW1lcmNlQmFzZSA9Jmd0OyAxLjguMzwvbGk+PC91bD48aDM+UGFyYW1ldGVyczwvaDM+PHVsPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGlubGluZT0iZGVmYXVsdCIgLSBTcGVjaWZ5IHRoYXQgdGhlIGNvdXBvbiBjb2RlIGZvcm0gaXMgaW5saW5lLCBhbmQgdGhlIHJlc3VsdHMgc2hvdWxkIHJlcGxhY2UgdGhlIG9yaWdpbmFsIHRhZyBhbmQgbm90IHRoZSBwYWdlIGNvbnRlbnRzPC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiB0ZW1wbGF0ZT0iIiAtIFNwZWNpZnkgdGhlIG5hbWUgb2YgYSBub24gZGVmYXVsdCBjb3Vwb24gY29kZSB0ZW1wbGF0ZSB0byBkaXNwbGF5IGZvciB0aGUgZGVmYXVsdCBhY3Rpb248L2xpPjwvdWw+]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBjYWxndXkxMDAwICZsdDtjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnJmd0OzxiciAvPjxiciAvPlZlcnNpb246IDEuMy4xLjE8YnIgLz48YnIgLz5DaGFuZ2UgSGlzdG9yeTo8YnIgLz48dWw+CiAgPGxpPlZlcnNpb24gMS4wIC0gQXVndXN0LzIwMDkKICAgIDx1bD4KICAgICAgPGxpPkluaXRpYWwgUmVsZWFzZTwvbGk+CiAgICA8L3VsPgogIDwvbGk+CgogIDxsaT5WZXJzaW9uIDEuMC4xIC0gQXVndXN0LzIwMDkKICAgIDx1bD4KICAgICAgPGxpPk1pbm9yIGJ1ZyBmaXhlcy48L2xpPgogICAgPC91bD4KICA8L2xpPgoKICA8bGk+VmVyc2lvbiAxLjAuNCAtIE9jdG9iZXIvMjAwOQogICAgPHVsPgogICAgICA8bGk+TWlub3IgYnVnIGZpeGVzPC9saT4KICAgIDwvdWw+CiAgPC9saT4KCiAgPGxpPlZlcnNpb24gMS4wLjUgLSBPY3RvYmVyLzIwMDkKICAgIDx1bD4KICAgICAgPGxpPk1pbm9yIGJ1ZyBmaXhlczwvbGk+CiAgICA8L3VsPgogIDwvbGk+CgogIDxsaT5WZXJzaW9uIDEuMC42IC0gRmVicnVhcnkvMjAwOQogICAgPHVsPgogICAgICA8bGk+QWRkcyB0aGUgYWJpbGl0eSB0byBnZXQgZGlzY291bnQgaW5mb3JtYXRpb24gZm9yIGEgc2luZ2xlIHByb2R1Y3QuPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+VmVyc2lvbiAxLjAuNiAtIEp1bmUvMjAxMAogICAgPHVsPgogICAgICA8bGk+TWlub3IgYnVnIGZpeGVzLjwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPlZlcnNpb24gMS4wLjggLSBKdWx5LzIwMTAKICAgIDx1bD4KICAgICAgPGxpPk1pbm9yIGJ1ZyBmaXhlcy48L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT5WZXJzaW9uIDEuMC4xMCAtIEZlYnJ1YXJ5LzIwMTEKICAgIDx1bD4KICAgICAgPGxpPk1pbm9yIGJ1ZyBmaXhlcy48L2xpPgogICAgICA8bGk+QWRkcyBmcm9udGVuZCBhYmlsaXR5IHRvIHJlc2V0IGNvdXBvbiBjb2RlcyB0aGF0IGhhdmUgYmVlbiBlbnRlcmVkLjwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiA8bGk+VmVyc2lvbiAxLjAuMTEtIEZlYnJ1YXJ5LzIwMTEKICAgIDx1bD4KICAgICAgPGxpPk1pbm9yIGJ1ZyBmaXhlcy48L2xpPgogICAgPC91bD4KICA8L2xpPgogPGxpPlZlcnNpb24gMS4wLjEyLSBNYXJjaC8yMDExCiAgICA8dWw+CiAgICAgIDxsaT5NaW5vciBidWcgZml4ZXMuPC9saT4KICAgIDwvdWw+CiAgPC9saT4KIDxsaT5WZXJzaW9uIDEuMC4xNCAtIEFwcmlsLzIwMTEKICAgPHVsPgogICAgIDxsaT5NaW5vciBidWcgZml4LjwvbGk+CiAgIDwvdWw+CiA8L2xpPgogPGxpPlZlcnNpb24gMS4wLjE1IC0gRGVjZW1iZXIvMjAxMQogICA8dWw+CiAgICAgPGxpPk1pbm9yIGJ1ZyBmaXguPC9saT4KICAgPC91bD4KIDwvbGk+CiA8bGk+VmVyc2lvbiAxLjEueCAtIERlY2VtYmVyLzIwMTIKICAgPHA+PHN0cm9uZz5OT1RFOiBDT01QQVRJQklMSVRZIE1BWSBCRSBCUk9LRU4uICBDSEVDSyBBTEwgT0YgWU9VUiBQUk9NT1RJT05TLjwvc3Ryb25nPjwvcD4KICAgPHA+PHN0cm9uZz5OT1RFOiBQSFAgNS4zLnggSVMgUkVRVUlSRUQuPC9zdHJvbmc+PC9wPgogICA8dWw+CiAgICAgIDxsaT5NYWpvciByZXZpc2lvbiAtIGFkZHMgaW5zdGFudCwgYW5kIGNoZWNrb3V0IHR5cGUgcHJvbW90aW9ucy48L2xpPgogICAgICA8bGk+QWRkcyBuZXcgcHJvbW90aW9uIHRlc3RlciBjbGFzc2VzLCBhbmQgZGVwcmVjYXRlcyB0aGUgb2xkIG9uZXMuPC9saT4KICAgICAgPGxpPjxzdHJvbmc+Tm90ZTogVGhpcyBtYXkgbm90IGJlIGEgc2ltcGxlIHVwZ3JhZGUuPC9zdHJvbmc+PC9saT4KICAgPC91bD4KIDwvbGk+CjwvdWw+CjxiciAvPg==]]></about>
	<description><![CDATA[Create, manage, and interact with sales and promotions for your e-commerce site]]></description>
	<requires>
	  <requiredname>CGExtensions</requiredname>
	  <requiredversion>1.56.2</requiredversion>
	</requires>
	<requires>
	  <requiredname>Orders</requiredname>
	  <requiredversion>1.22.3</requiredversion>
	</requires>
	<requires>
	  <requiredname>JQueryTools</requiredname>
	  <requiredversion>1.3.9</requiredversion>
	</requires>
	<requires>
	  <requiredname>Products</requiredname>
	  <requiredversion>2.27.4</requiredversion>
	</requires>
	<requires>
	  <requiredname>CGEcommerceBase</requiredname>
	  <requiredversion>1.8.3</requiredversion>
	</requires>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.admin_addpromo.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gYWxsb3cgY3JlYXRpbmcsIGludGVyZmFjaW5nIHdpdGgKIyAgYW5kIG1hbmFnaW5nIHByb21vdGlvbnMgb3Igc2FsZXMgaW4gdGhlIEUtY29tZW1yY2Ugc3VpdGUuCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQpuYW1lc3BhY2UgUHJvbW90aW9uczsKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiggISR0aGlzLT5DaGVja1Blcm1pc3Npb24oXFByb21vdGlvbnM6Ok1BSU5fUEVSTSkgKSBleGl0OwoKLy8KLy8gaW5pdGlhbGl6YXRpb24KLy8KJGZldV9tb2R1bGUgPSAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ0Zyb250RW5kVXNlcnMnKTsKCi8vCi8vIHNldHVwCi8vCiR0eXBlID0gcHJvbW90aW9uOjpUWVBFX0NIRUNLT1VUOwppZiggaXNzZXQoJHBhcmFtc1sndHlwZSddKSApICR0eXBlID0gdHJpbSgkcGFyYW1zWyd0eXBlJ10pOwoKJHByb21vID0gbnVsbDsKaWYoIGlzc2V0KCRwYXJhbXNbJ3Byb21vaWQnXSkgKSB7CiAgICAvLyB1cGRhdGluZwogICAgJHByb21vID0gcHJvbW9fb3BzOjpsb2FkX3Byb21vX2J5X2lkKChpbnQpJHBhcmFtc1sncHJvbW9pZCddKTsKICAgICR0eXBlID0gJHByb21vLT5nZXRfdHlwZSgpOyAvLyB1c2UgdGhlIHByb21vdGlvbiB0eXBlLgp9CmVsc2UgewogICAgLy8gbmV3IHByb21vCiAgICAkcHJvbW8gPSBuZXcgcHJvbW90aW9uKCk7CiAgICAkcHJvbW8tPnNldF9jcmVhdGVkKHRpbWUoKSk7CiAgICAkcHJvbW8tPnNldF9lbmRfZGF0ZShzdHJ0b3RpbWUoc3ByaW50ZignKyVkIG1vbnRocycsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2RmbHRfcHJvbW90aW9uX3BlcmlvZCcpKSkpOwogICAgJHByb21vLT5zZXRfb2ZmZXJfdHlwZSgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGZsdF9vZmZlcl90eXBlJykpOwogICAgJHByb21vLT5zZXRfb2ZmZXJfZGF0YSgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGZsdF9vZmZlcl9kYXRhJykpOwp9CgovLyB0aGlzIHN0dWZmIGhhcyB0byBiZSBhZnRlciBkYXRhIGxvYWRzIHNvIHRoYXQgdGhlIHR5cGUgaXMgc3BlY2lmaWVkIGNvcnJlY3RseS4Kc3dpdGNoKCAkdHlwZSApIHsKY2FzZSBwcm9tb3Rpb246OlRZUEVfSU5TVEFOVDoKICAgICR0aGlzLT5TZXRDdXJyZW50VGFiKCdpbnN0YW50X3Byb21vdGlvbnMnKTsKICAgIGJyZWFrOwpjYXNlIHByb21vdGlvbjo6VFlQRV9DSEVDS09VVDoKICAgICR0aGlzLT5TZXRDdXJyZW50VGFiKCdjaGVja291dF9wcm9tb3Rpb25zJyk7CiAgICBicmVhazsKfQoKaWYoIGlzc2V0KCRwYXJhbXNbJ2NhbmNlbCddKSApICR0aGlzLT5SZWRpcmVjdFRvVGFiKCRpZCk7CgovLwovLyBnYXRoZXIgZGF0YQovLwppZiggaXNzZXQoJHBhcmFtc1snc3VibWl0J10pICkgewogICAgLy8gdmFsaWRhdGUKICAgICRlcnJvciA9ICcnOwoKICAgICRfZ2V0X2RhdGEgPSBmdW5jdGlvbigkcGFyYW1zLCRpZHgpIHsKICAgICAgICAkb3V0ID0gYXJyYXkoKTsKICAgICAgICBpZiggaXNzZXQoJHBhcmFtc1snc2F2ZWRfY29uZGRhdGEwJ11bJGlkeF0pICYmICRwYXJhbXNbJ3NhdmVkX2NvbmRkYXRhMCddWyRpZHhdICkgJG91dFtdID0gdHJpbSgkcGFyYW1zWydzYXZlZF9jb25kZGF0YTAnXVskaWR4XSk7CiAgICAgICAgaWYoIGlzc2V0KCRwYXJhbXNbJ3NhdmVkX2NvbmRkYXRhMSddWyRpZHhdKSAmJiAkcGFyYW1zWydzYXZlZF9jb25kZGF0YTEnXVskaWR4XSApICRvdXRbXSA9IHRyaW0oJHBhcmFtc1snc2F2ZWRfY29uZGRhdGExJ11bJGlkeF0pOwogICAgICAgIHJldHVybiAkb3V0OwogICAgfTsKCiAgICAvLyBjaGVjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgbmFtZSBpcyB2YWxpZC4KICAgIGlmKCAhcHJvbW9fb3BzOjpjaGVja191bnVzZWRfbmFtZSh0cmltKCRwYXJhbXNbJ25hbWUnXSksJHByb21vLT5nZXRfaWQoKSkgKSAkZXJyb3IgPSAkdGhpcy0+TGFuZygnZXJyb3JfbmFtZV9leGlzdHMnKTsKCiAgICAvLyBidWlsZCB0aGUgcHJvbW90aW9uIG9iamVjdAogICAgJHByb21vLT5zZXRfbmFtZSh0cmltKCRwYXJhbXNbJ25hbWUnXSkpOwogICAgaWYoIGlzc2V0KCRwYXJhbXNbJ3R5cGUnXSkgKSAkcHJvbW8tPnNldF90eXBlKCRwYXJhbXNbJ3R5cGUnXSk7CiAgICBpZiggaXNzZXQoJHBhcmFtc1snZGVzY3JpcHRpb24nXSkgKSAkcHJvbW8tPnNldF9kZXNjcmlwdGlvbih0cmltKCRwYXJhbXNbJ2Rlc2NyaXB0aW9uJ10pKTsKICAgIGlmKCBpc3NldCgkcGFyYW1zWydpbWFnZSddKSApICRwcm9tby0+c2V0X2ltYWdlKHRyaW0oJHBhcmFtc1snaW1hZ2UnXSkpOwogICAgJHNkID0gbWt0aW1lKDAsMCwwLChpbnQpJHBhcmFtc1snc3RhcnRfZGF0ZV9Nb250aCddLChpbnQpJHBhcmFtc1snc3RhcnRfZGF0ZV9EYXknXSwoaW50KSRwYXJhbXNbJ3N0YXJ0X2RhdGVfWWVhciddKTsKICAgICRwcm9tby0+c2V0X3N0YXJ0X2RhdGUoJHNkKTsKICAgICRlZCA9IG1rdGltZSgwLDAsMCwoaW50KSRwYXJhbXNbJ2VuZF9kYXRlX01vbnRoJ10sKGludCkkcGFyYW1zWydlbmRfZGF0ZV9EYXknXSwoaW50KSRwYXJhbXNbJ2VuZF9kYXRlX1llYXInXSk7CiAgICAkcHJvbW8tPnNldF9lbmRfZGF0ZSgkZWQpOwogICAgJHByb21vLT5zZXRfb2ZmZXJfdHlwZSgkcGFyYW1zWydvZmZlcl90eXBlJ10pOwogICAgJHByb21vLT5zZXRfb2ZmZXJfZGF0YSh0cmltKCRwYXJhbXNbJ29mZmVyX2RhdGEnXSkpOwogICAgJHByb21vLT5kZWxfY29uZGl0aW9ucygpOwogICAgaWYoIGlzc2V0KCRwYXJhbXNbJ3NhdmVkX2NvbmR0eXBlJ10pICkgewogICAgICAgIGZvciggJGkgPSAwOyAkaSA8IGNvdW50KCRwYXJhbXNbJ3NhdmVkX2NvbmR0eXBlJ10pOyAkaSsrICkgewogICAgICAgICAgICAkY29uZCA9IG5ldyBwcm9tb3Rpb25fY29uZGl0aW9uOwogICAgICAgICAgICAkY29uZC0+c2V0X2NvbmRfdHlwZSgkcGFyYW1zWydzYXZlZF9jb25kdHlwZSddWyRpXSk7CiAgICAgICAgICAgICRjb25kLT5zZXRfZGF0YSgkX2dldF9kYXRhKCRwYXJhbXMsJGkpKTsKICAgICAgICAgICAgJHByb21vLT5hZGRfY29uZGl0aW9uKCRjb25kKTsKICAgICAgICB9CiAgICB9CgogICAgJHByb21vLT5jbGVhcl9leHRyYSgpOwogICAgZm9yZWFjaCggJHBhcmFtcyBhcyAka2V5ID0+ICR2YWx1ZSApIHsKICAgICAgICBpZiggIXN0YXJ0c3dpdGgoJGtleSwnZXh0cmFfJykgKSBjb250aW51ZTsKICAgICAgICAkbmtleSA9IHN1YnN0cigka2V5LDYpOwogICAgICAgICRwcm9tby0+c2V0X2V4dHJhKCRua2V5LCR2YWx1ZSk7CiAgICB9CgogICAgLy8gdmFsaWRhdGUgdGhlIGNvbmRpdGlvbnMuCiAgICBpZiggZW1wdHkoJGVycm9yKSAmJiBpc3NldCgkcGFyYW1zWydzYXZlZF9jb25kdHlwZSddKSApIHsKICAgICAgICBmb3IoICRpID0gMDsgJGkgPCBjb3VudCgkcGFyYW1zWydzYXZlZF9jb25kdHlwZSddKTsgJGkrKyApIHsKICAgICAgICAgICAgaWYoICFlbXB0eSgkZXJyb3IpICkgYnJlYWs7CgogICAgICAgICAgICAkZGF0YSA9ICRfZ2V0X2RhdGEoJHBhcmFtcywkaSk7CiAgICAgICAgICAgIHN3aXRjaCgkcGFyYW1zWydzYXZlZF9jb25kdHlwZSddWyRpXSkgewogICAgICAgICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9GRVU6CiAgICAgICAgICAgICAgICBpZiggISRmZXVfbW9kdWxlICkgewogICAgICAgICAgICAgICAgICAgICRlcnJvciA9ICR0aGlzLT5MYW5nKCdlcnJvcl9tb2R1bGVfbm90X2ZvdW5kJywnRnJvbnRFbmRVc2VycycpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiggY291bnQoJGRhdGEpICE9IDEgKSB7CiAgICAgICAgICAgICAgICAgICAgJGVycm9yID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2ludmFsaWRfZmV1X2dyb3VwJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiggISRmZXVfbW9kdWxlLT5Hcm91cEV4aXN0c0J5TmFtZSh0cmltKCRkYXRhWzBdKSkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRlcnJvciA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnZhbGlkX2ZldV9ncm91cCcpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1NVQlRPVEFMOgogICAgICAgICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9XRUlHSFQ6CiAgICAgICAgICAgICAgICBpZiggY291bnQoJGRhdGEpICE9IDEgfHwgKGZsb2F0KSRkYXRhWzBdIDwgMC4wMDAwMSApIHsKICAgICAgICAgICAgICAgICAgICAkZXJyb3IgPSAkdGhpcy0+TGFuZygnZXJyb3JfaW52YWxpZF9vcmRlcl9hbW91bnQnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYoICR0eXBlID09IHByb21vdGlvbjo6VFlQRV9JTlNUQU5UICkgewogICAgICAgICAgICAgICAgICAgICRlcnJvciA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnZhbGlkX2NvbmRpdGlvbl90eXBlJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkdG1wID0gZmxvYXR2YWwoJGRhdGEpOwogICAgICAgICAgICAgICAgICAgIGlmKCAkdG1wIDw9IDAuMDEgfHwgJHRtcCA+IDEwMDAwMCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGVycm9yID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2ludmFsaWRfb3JkZXJfYW1vdW50Jyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9QUk9EU0tVOgogICAgICAgICAgICAgICAgLy8gdG9kbwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9QUk9ESUQ6CiAgICAgICAgICAgICAgICBpZiggY291bnQoJHRtcCkgIT0gMSApIHsKICAgICAgICAgICAgICAgICAgICAkZXJyb3IgPSAkdGhpcy0+TGFuZygnZXJyb3JfaW52YWxpZF9wcm9kdWN0Jyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkbGlzdCA9IGV4cGxvZGUoJywnLCRkYXRhKTsKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCAkbGlzdCBhcyAkdG1wICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiggIXByb2R1Y3Rfb3BzOjppc192YWxpZF9wcm9kdWN0X2lkKHRyaW0oJHRtcCkpICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGVycm9yID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2ludmFsaWRfcHJvZHVjdCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1BST0RDQVQ6CiAgICAgICAgICAgICAgICBpZiggY291bnQoJGRhdGEpICE9IDEgKSB7CiAgICAgICAgICAgICAgICAgICAgJGVycm9yID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2ludmFsaWRfcHJvZHVjdF9jYXRlZ29yeScpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJGxpc3QgPSBleHBsb2RlKCcsJywkZGF0YSk7CiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCggJGxpc3QgYXMgJHRtcCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoICFwcm9kdWN0X29wczo6aXNfdmFsaWRfY2F0ZWdvcnkodHJpbSgkdG1wKSkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXJyb3IgPSAkdGhpcy0+TGFuZygnZXJyb3JfaW52YWxpZF9wcm9kdWN0X2NhdGVnb3J5Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfUFJPREhJRVI6CiAgICAgICAgICAgICAgICAvLyB0b2RvCiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX0NPVVBPTjoKICAgICAgICAgICAgICAgIGlmKCBjb3VudCgkZGF0YSkgIT0gMSApIHsKICAgICAgICAgICAgICAgICAgICAkZXJyb3IgPSAkdGhpcy0+TGFuZygnZXJyb3JfY291cG9uX2V4aXN0cycpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiggIXByb21vX29wczo6Y2hlY2tfdW51c2VkX2NvdXBvbigkZGF0YSwkcHJvbW8tPmdldF9pZCgpKSApIHsKICAgICAgICAgICAgICAgICAgICAkZXJyb3IgPSAkdGhpcy0+TGFuZygnZXJyb3JfY291cG9uX2V4aXN0cycpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9CVUxLUFVSQ0hBU0U6CiAgICAgICAgICAgICAgICBpZiggY291bnQoJGRhdGEpICE9IDIgfHwgJGRhdGFbMF0gPT0gJycgfHwgKGludCkkZGF0YVsxXSA8IDEgKSB7CiAgICAgICAgICAgICAgICAgICAgJGVycm9yID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2ludmFsaWRfYnVsa3B1cmNoYXNlJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvLyB0b2RvOiB2ZXJpZnkgc2t1IChtYXkgaGF2ZSB0byBhc2sgZm9yIHNvdXJjZSkKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgfSAvLyBzd2l0Y2gKICAgICAgICB9IC8vIGZvciBlYWNoIGNvbmRpdGlvbgoKICAgICAgICAvLyB2YWxpZGF0ZSB0aGUgb2ZmZXIKICAgICAgICBpZiggZW1wdHkoJGVycm9yKSApIHsKICAgICAgICAgICAgc3dpdGNoKCRwYXJhbXNbJ29mZmVyX3R5cGUnXSkgewogICAgICAgICAgICBjYXNlIFBST01PVElPTlNfT0ZGRVJfUEVSQ0VOVDoKICAgICAgICAgICAgICAgIGlmKCAkdHlwZSA9PSBwcm9tb3Rpb246OlRZUEVfSU5TVEFOVCApIHsKICAgICAgICAgICAgICAgICAgICAkZXJyb3IgPSAkdGhpcy0+TGFuZygnZXJyb3JfaW52YWxpZF9vZmZlcl90eXBlJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkdG1wID0gZmxvYXR2YWwoJHBhcmFtc1snb2ZmZXJfZGF0YSddKTsKICAgICAgICAgICAgICAgICAgICBpZiggJHRtcCA8IDAuMDAwMSB8fCAkdG1wID4gMTAwLjAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRlcnJvciA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnZhbGlkX3ZhbHVlJyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPRERJU0NPVU5UOgogICAgICAgICAgICAgICAgJHRtcCA9IGZsb2F0dmFsKCRwYXJhbXNbJ29mZmVyX2RhdGEnXSk7CiAgICAgICAgICAgICAgICBpZiggJHRtcCA8IDAuMDAwMSB8fCAkdG1wID4gMTAwLjAgKSB7CiAgICAgICAgICAgICAgICAgICAgJGVycm9yID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2ludmFsaWRfdmFsdWUnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQUk9NT1RJT05TX09GRkVSX0RJU0NPVU5UOgogICAgICAgICAgICAgICAgaWYoICR0eXBlID09IHByb21vdGlvbjo6VFlQRV9JTlNUQU5UICkgewogICAgICAgICAgICAgICAgICAgICRlcnJvciA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnZhbGlkX29mZmVyX3R5cGUnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICR0bXAgPSBmbG9hdHZhbCgkcGFyYW1zWydvZmZlcl9kYXRhJ10pOwogICAgICAgICAgICAgICAgICAgIGlmKCAkdG1wIDwgMC4wMDAxIHx8ICR0bXAgPiAxMDAwMC4wICkgewogICAgICAgICAgICAgICAgICAgICAgICAkZXJyb3IgPSAkdGhpcy0+TGFuZygnZXJyb3JfaW52YWxpZF92YWx1ZScpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQUk9NT1RJT05TX09GRkVSX1BST0RVQ1Q6CiAgICAgICAgICAgICAgICAkdG1wID0gdHJpbSgkcGFyYW1zWydvZmZlcl9kYXRhJ10pOwogICAgICAgICAgICAgICAgaWYoIXByb2R1Y3Rfb3BzOjppc192YWxpZF9wcm9kdWN0X2lkKCR0bXApKSB7CiAgICAgICAgICAgICAgICAgICAgJGVycm9yID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2ludmFsaWRfcHJvZHVjdCcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIHB1dCB0aGUgcGFyYW1zIGluIHRoZSBwcm9tbyBvYmplY3QKICAgICAgICBpZiggZW1wdHkoJGVycm9yKSApIHsKCiAgICAgICAgICAgIC8vIGNvbW1pdAogICAgICAgICAgICAkcmVzID0gJHByb21vLT5zYXZlKCk7CiAgICAgICAgICAgIGlmKCAkcmVzICkgewogICAgICAgICAgICAgICAgJHRoaXMtPlJlZGlyZWN0VG9UYWIoJGlkKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkZXJyb3IgPSAkdGhpcy0+TGFuZygnZXJyb3Jfc2F2ZV9wcm9tb3Rpb24nKTsKICAgICAgICB9CgogICAgICAgIGlmKCAkZXJyb3IgKSB7CiAgICAgICAgICAgIGVjaG8gJHRoaXMtPlNob3dFcnJvcnMoJGVycm9yKTsKICAgICAgICB9CiAgICB9Cn0KCgovLwovLyBnaXZlIGV2ZXJ5dGhpbmcgdG8gc21hcnR5Ci8vCiR0bXAgPSBwcm9tb3Rpb246OmdldF90eXBlc19hcnJheSgpOwokcHJvbW90eXBlcyA9IGFycmF5KCk7CmZvcmVhY2goICR0bXAgYXMgJG9uZSApIHsKICAgICRwcm9tb3R5cGVzWyRvbmVdID0gJHRoaXMtPkxhbmcoJG9uZSk7Cn0KJHNtYXJ0eS0+YXNzaWduKCdwcm9tb3R5cGVzJywkcHJvbW90eXBlcyk7CgokdG1wID0gcHJvbW90aW9uOjpnZXRfb2ZmZXJfYXJyYXkoJHR5cGUpOwokb2ZmZXJ0eXBlcyA9IGFycmF5KCk7CmZvcmVhY2goICR0bXAgYXMgJG9uZSApIHsKICAgICRvZmZlcnR5cGVzWyRvbmVdID0gJHRoaXMtPkxhbmcoJG9uZSk7Cn0KJHNtYXJ0eS0+YXNzaWduKCdvZmZlcnR5cGVzJywkb2ZmZXJ0eXBlcyk7CgokdG1wID0gcHJvbW90aW9uX2NvbmRpdGlvbjo6Z2V0X3R5cGVzX2FycmF5KCR0eXBlKTsKJGNvbmR0eXBlcyA9IGFycmF5KCk7CmZvcmVhY2goICR0bXAgYXMgJGNvbmQgKSB7CiAgICBpZiggISRmZXVfbW9kdWxlICYmICRjb25kID09IFBST01PVElPTlNfQ09ORF9GRVUgKSAgY29udGludWU7CgogICAgJHJlYyA9IGFycmF5KCduYW1lJz0+JGNvbmQsJ2xhYmVsJz0+JHRoaXMtPkxhbmcoJGNvbmQpKTsKICAgICRyZWNbJ2ZpZWxkcyddID0gYXJyYXkoJHRoaXMtPkxhbmcoJ3Byb21wdGRhdGFfJy4kY29uZCkpOwogICAgaWYoICRjb25kID09IFBST01PVElPTlNfQ09ORF9CVUxLUFVSQ0hBU0UgKSB7CiAgICAgICAgJHJlY1snZmllbGRzJ11bXSA9ICR0aGlzLT5MYW5nKCdwcm9tcHRkYXRhXycuJGNvbmQuJzInKTsKICAgIH0KICAgICRjb25kdHlwZXNbJGNvbmRdID0gJHJlYzsKfQoKJHNtYXJ0eS0+YXNzaWduKCdjb25kaXRpb250eXBlcycsJGNvbmR0eXBlcyk7CiRzbWFydHktPmFzc2lnbignZm9ybXN0YXJ0JywkdGhpcy0+Q0dDcmVhdGVGb3JtU3RhcnQoJGlkLCdhZG1pbl9hZGRwcm9tbycsJHJldHVybmlkLCRwYXJhbXMpKTsKJHNtYXJ0eS0+YXNzaWduKCdmb3JtZW5kJywkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKJHNtYXJ0eS0+YXNzaWduKCdwcm9tbycsJHByb21vKTsKJHNtYXJ0eS0+YXNzaWduKCdwcm9tb3R5cGUnLCR0eXBlKTsKaWYoICRwcm9tby0+Y291bnRfY29uZGl0aW9ucygpICkgJHNtYXJ0eS0+YXNzaWduKCdjb25kaXRpb25zJywkcHJvbW8tPmdldF9jb25kaXRpb25zKCkpOwokZXh0cyA9IFxjZ2VfdXRpbHM6OmdldF9pbWFnZV9leHRlbnNpb25zKCk7CiRkaXIgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnaW1hZ2VkaXInLCRjb25maWdbJ2ltYWdlX3VwbG9hZHNfcGF0aCddKTsKJGZpbGVzID0gXGNnZV9kaXI6OmdldF9maWxlX2xpc3QoJGRpciwkZXh0cyk7CiRmaWxlcyA9IFxjZ2VfYXJyYXk6Omhhc2hfcHJlcGVuZCgkZmlsZXMsJy0xJywkdGhpcy0+TGFuZygnbm9uZScpKTsKJHNtYXJ0eS0+YXNzaWduKCdmaWxlX2xpc3QnLCRmaWxlcyk7CgovLwovLyBQcm9jZXNzIHRlbXBsYXRlCi8vCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRtaW5fYWRkcHJvbW8udHBsJyk7CgojCiMgRU9GCiMK]]></data>
	</file>
	<file>
	  <filename>/action.admin_delpromo.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gYWxsb3cgY3JlYXRpbmcsIGludGVyZmFjaW5nIHdpdGgKIyAgYW5kIG1hbmFnaW5nIHByb21vdGlvbnMgb3Igc2FsZXMgaW4gdGhlIEUtY29tZW1yY2Ugc3VpdGUuCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQpuYW1lc3BhY2UgUHJvbW90aW9uczsKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiggISR0aGlzLT5DaGVja1Blcm1pc3Npb24oXFByb21vdGlvbnM6Ok1BSU5fUEVSTSkgKSBleGl0OwoKLy8KLy8gaW5pdGlhbGl6YXRpb24KLy8KJHRoaXMtPlNldEN1cnJlbnRUYWIoJ2NoZWNrb3V0X3Byb21vdGlvbnMnKTsKCmlmKCAhaXNzZXQoJHBhcmFtc1sncHJvbW9pZCddKSApIHsKICAkdGhpcy0+U2V0RXJyb3IoJHRoaXMtPkxhbmcoJ2Vycm9yX21pc3NpbmdfcGFyYW0nKSk7CiAgJHRoaXMtPlJlZGlyZWN0VG9UYWIoJGlkKTsKfQoKdHJ5IHsKICAkcHJvbW8gPSBwcm9tb3Rpb246OmxvYWRfYnlfaWQoKGludCkkcGFyYW1zWydwcm9tb2lkJ10pOwoKICBzd2l0Y2goICRwcm9tby0+Z2V0X3R5cGUoKSApIHsKICBjYXNlIHByb21vdGlvbjo6VFlQRV9JTlNUQU5UOgogICAgJHRoaXMtPlNldEN1cnJlbnRUYWIoJ2luc3RhbnRfcHJvbW90aW9ucycpOwogICAgYnJlYWs7CiAgfQoKICAkcHJvbW8tPmRlbGV0ZSgpOwoKICAkdGhpcy0+U2V0TWVzc2FnZSgkdGhpcy0+TGFuZygnbXNnX3Byb21vZGVsZXRlZCcpKTsKfQpjYXRjaCggQ21zRXhjZXB0aW9uICRlICkgewogICR0aGlzLT5TZXRFcnJvcigkZS0+R2V0TWVzc2FnZSgpKTsKfQokdGhpcy0+UmVkaXJlY3RUb1RhYigkaWQpOwoKIwojIEVPRgojCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/action.admin_movepromo.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gYWxsb3cgY3JlYXRpbmcsIGludGVyZmFjaW5nIHdpdGgKIyAgYW5kIG1hbmFnaW5nIHByb21vdGlvbnMgb3Igc2FsZXMgaW4gdGhlIEUtY29tZW1yY2Ugc3VpdGUuCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQpuYW1lc3BhY2UgUHJvbW90aW9uczsKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiggISR0aGlzLT5DaGVja1Blcm1pc3Npb24oUHJvbW90aW9uczo6TUFJTl9QRVJNKSApIGV4aXQ7CgokdGhpcy0+U2V0Q3VycmVudFRhYigncHJvbW90aW9ucycpOwppZiggIWlzc2V0KCRwYXJhbXNbJ3Byb21vJ10pIHx8ICFpc3NldCgkcGFyYW1zWydkaXInXSkgKSB7CiAgJHRoaXMtPlNldEVycm9yKCR0aGlzLT5MYW5nKCdlcnJvcl9taXNzaW5nX3BhcmFtJykpOwogICR0aGlzLT5SZWRpcmVjdFRvVGFiKCRpZCk7Cn0KCnRyeSB7CiAgJHByb21vID0gcHJvbW90aW9uOjpsb2FkX2J5X2lkKChpbnQpJHBhcmFtc1sncHJvbW8nXSk7CiAgc3dpdGNoKCAkcHJvbW8tPmdldF90eXBlKCkgKSB7CiAgY2FzZSBwcm9tb3Rpb246OlRZUEVfSU5TVEFOVDoKICAgICR0aGlzLT5TZXRDdXJyZW50VGFiKCdpbnN0YW50X3Byb21vdGlvbnMnKTsKICAgIGJyZWFrOwogIGNhc2UgcHJvbW90aW9uOjpUWVBFX0NIRUNLT1VUOgogICAgJHRoaXMtPlNldEN1cnJlbnRUYWIoJ2NoZWNrb3V0X3Byb21vdGlvbnMnKTsKICAgIGJyZWFrOwogIH0KCgogIHN3aXRjaCggc3RydG9sb3dlcigkcGFyYW1zWydkaXInXSkgKSB7CiAgY2FzZSAndXAnOgogICAgJHF1ZXJ5ID0gJ1VQREFURSAnLlBST01PVElPTlNfVEFCTEUuJyBTRVQgaXRlbV9vcmRlciA9IGl0ZW1fb3JkZXIgKyAxCiAgICAgICAgICAgICAgV0hFUkUgaXRlbV9vcmRlciA9ID8gQU5EIHR5cGUgPSA/JzsKICAgICRkYnIgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCRwcm9tby0+Z2V0X2l0ZW1fb3JkZXIoKS0xLCRwcm9tby0+Z2V0X3R5cGUoKSkpOwogICAgaWYoICEkZGJyICkgdGhyb3cgbmV3IENtc0V4Y2VwdGlvbignRXJyb3IgcmUtb3JkZXJpbmcgcHJvbW90aW9uJyk7CgogICAgJHF1ZXJ5ID0gJ1VQREFURSAnLlBST01PVElPTlNfVEFCTEUuJyBTRVQgaXRlbV9vcmRlciA9IGl0ZW1fb3JkZXIgLSAxCiAgICAgICAgICAgICAgV0hFUkUgaWQgPSA/JzsKICAgICRkYnIgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCRwcm9tby0+Z2V0X2lkKCkpKTsKICAgIGlmKCAhJGRiciApIHRocm93IG5ldyBDbXNFeGNlcHRpb24oJ0Vycm9yIHJlLW9yZGVyaW5nIHByb21vdGlvbicpOwogICAgYnJlYWs7CgogIGNhc2UgJ2Rvd24nOgogICAgJHF1ZXJ5ID0gJ1VQREFURSAnLlBST01PVElPTlNfVEFCTEUuJyBTRVQgaXRlbV9vcmRlciA9IGl0ZW1fb3JkZXIgLSAxCiAgICAgICAgICAgICAgV0hFUkUgaXRlbV9vcmRlciA9ID8gQU5EIHR5cGUgPSA/JzsKICAgICRkYnIgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCRwcm9tby0+Z2V0X2l0ZW1fb3JkZXIoKSsxLCRwcm9tby0+Z2V0X3R5cGUoKSkpOwogICAgaWYoICEkZGJyICkgdGhyb3cgbmV3IENtc0V4Y2VwdGlvbignRXJyb3IgcmUtb3JkZXJpbmcgcHJvbW90aW9uJyk7CgogICAgJHF1ZXJ5ID0gJ1VQREFURSAnLlBST01PVElPTlNfVEFCTEUuJyBTRVQgaXRlbV9vcmRlciA9IGl0ZW1fb3JkZXIgKyAxCiAgICAgICAgICAgICAgV0hFUkUgaWQgPSA/JzsKICAgICRkYnIgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCRwcm9tby0+Z2V0X2lkKCkpKTsKICAgIGlmKCAhJGRiciApIHRocm93IG5ldyBDbXNFeGNlcHRpb24oJ0Vycm9yIHJlLW9yZGVyaW5nIHByb21vdGlvbicpOwogICAgYnJlYWs7CiAgfQp9CmNhdGNoKCBDbXNFeGNlcHRpb24gJGUgKSB7CiAgJHRoaXMtPlNldEVycm9yKCRlLT5HZXRNZXNzYWdlKCkpOwp9CiR0aGlzLT5SZWRpcmVjdFRvVGFiKCRpZCk7CiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.admin_savesettings.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gYWxsb3cgY3JlYXRpbmcsIGludGVyZmFjaW5nIHdpdGgKIyAgYW5kIG1hbmFnaW5nIHByb21vdGlvbnMgb3Igc2FsZXMgaW4gdGhlIEUtY29tZW1yY2Ugc3VpdGUuCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQpuYW1lc3BhY2UgUHJvbW90aW9uczsKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiggISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJykgKSBleGl0OwoKaWYoIFxjZ2VfcGFyYW06OmV4aXN0cygkcGFyYW1zLCdzZXRhc3Byb21vJykgKSB7CiAgICB0cnkgewogICAgICAgIFxDR0Vjb21tZXJjZUJhc2Vcc2V0dXBfbWFuYWdlcjo6c2V0X3Byb21vdGlvbl9hc3Npc3RhbnQoICR0aGlzLT5HZXROYW1lKCkgKTsKICAgICAgICAkdGhpcy0+U2V0TWVzc2FnZSgkdGhpcy0+TGFuZygnbXNnX3NldGFzcHJvbW8nKSk7CiAgICAgICAgJHRoaXMtPlJlZGlyZWN0VG9UYWIoKTsKICAgIH0KICAgIGNhdGNoKCBcRXhjZXB0aW9uICRlICkgewogICAgICAgICR0aGlzLT5TZXRFcnJvcigkZS0+R2V0TWVzc2FnZSgpKTsKICAgICAgICAkdGhpcy0+UmVkaXJlY3RUb1RhYigpOwogICAgfQp9CgokdGhpcy0+U2V0Q3VycmVudFRhYignc2V0dGluZ3MnKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2RmbHRfcHJvbW90aW9uX3BlcmlvZCcsKGludCkkcGFyYW1zWydwcm9tb3Rpb25fcGVyaW9kJ10pOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnZGZsdF9vZmZlcl90eXBlJyx0cmltKCRwYXJhbXNbJ29mZmVyX3R5cGUnXSkpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnaW1hZ2VfZGlyJyx0cmltKCRwYXJhbXNbJ2ltYWdlX2RpciddKSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdlcnJvcl9pbnZhbGlkX2NvZGUnLHRyaW0oJHBhcmFtc1snZXJyb3JfaW52YWxpZCddKSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdlcnJvcl9lbXB0eV9jb2RlJyx0cmltKCRwYXJhbXNbJ2Vycm9yX2VtcHR5J10pKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ21zZ192YWxpZF9jb2RlJyx0cmltKCRwYXJhbXNbJ21zZ192YWxpZCddKSk7Cgpzd2l0Y2goJHBhcmFtc1snb2ZmZXJfdHlwZSddKSB7CmNhc2UgUFJPTU9USU9OU19PRkZFUl9QRVJDRU5UOgogICAgaWYoIGVtcHR5KCRwYXJhbXNbJ29mZmVyX3BlcmNlbnQnXSkgfHwgKCRwYXJhbXNbJ29mZmVyX3BlcmNlbnQnXSA8IDAuMDAxKSB8fAogICAgICAgICgkcGFyYW1zWydvZmZlcl9wZXJjZW50J10gPiAxMDAuMCkgKSAgICAgewogICAgICAgICR0aGlzLT5TZXRFcnJvcigkdGhpcy0+TGFuZygnZXJyb3JfaW52YWxpZF92YWx1ZScpKTsKICAgICAgICAkdGhpcy0+UmVkaXJlY3RUb1RhYigkaWQpOwogICAgfQogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2RmbHRfb2ZmZXJfZGF0YScsJHBhcmFtc1snb2ZmZXJfcGVyY2VudCddKTsKICAgIGJyZWFrOwpjYXNlIFBST01PVElPTlNfT0ZGRVJfRElTQ09VTlQ6CiAgICBpZiggZW1wdHkoJHBhcmFtc1snb2ZmZXJfcHJpY2UnXSkgfHwgKCRwYXJhbXNbJ29mZmVyX3ByaWNlJ10gPCAwLjAwMSkpIHsKICAgICAgICAkdGhpcy0+U2V0RXJyb3IoJHRoaXMtPkxhbmcoJ2Vycm9yX2ludmFsaWRfdmFsdWUnKSk7CiAgICAgICAgJHRoaXMtPlJlZGlyZWN0VG9UYWIoJGlkKTsKICAgIH0KICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdkZmx0X29mZmVyX2RhdGEnLCRwYXJhbXNbJ29mZmVyX3ByaWNlJ10pOwogICAgYnJlYWs7CmRlZmF1bHQ6CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnZGZsdF9vZmZlcl9kYXRhJywnJyk7CiAgICBicmVhazsKfQokdGhpcy0+U2V0TWVzc2FnZSgkdGhpcy0+TGFuZygnbXNnX3ByZWZzdXBkYXRlZCcpKTsKJHRoaXMtPlJlZGlyZWN0VG9UYWIoJGlkKTsKIwojIEVPRgojCg==]]></data>
	</file>
	<file>
	  <filename>/action.admin_setdflttemplates.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gYWxsb3cgY3JlYXRpbmcsIGludGVyZmFjaW5nIHdpdGgKIyAgYW5kIG1hbmFnaW5nIHByb21vdGlvbnMgb3Igc2FsZXMgaW4gdGhlIEUtY29tZW1yY2Ugc3VpdGUuCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CiR0aGlzLT5TZXRDdXJyZW50VGFiKCdkZmx0X3RlbXBsYXRlcycpOwoKaWYoICEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgVGVtcGxhdGVzJykgKSBleGl0KCk7CgppZiggaXNzZXQoICRwYXJhbXNbJ3N1Ym1pdF9jb3Vwb29uZm9ybXRlbXBsYXRlJ10gKSApCiAgewogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoUHJvbW90aW9uczo6TkVXQ09VUE9ORk9STV9URU1QTEFURSwKICAgICAgICAgICAgICAgICAgICAgICAgIHRyaW0oJHBhcmFtc1snaW5wdXRfY291cG9uZm9ybXRlbXBsYXRlJ10pKTsKICB9CmVsc2UgaWYoIGlzc2V0KCAkcGFyYW1zWydyZXNldF9jb3Vwb25mb3JtdGVtcGxhdGUnXSApICkKICB7CiAgICAkZm4gPSBkaXJuYW1lKF9fRklMRV9fKS4nL3RlbXBsYXRlcy9vcmlnX2NvdXBvbmZvcm1fdGVtcGxhdGUudHBsJzsKICAgIGlmKCBmaWxlX2V4aXN0cyggJGZuICkgKQogICAgICB7CiAgICAgICAgJHRlbXBsYXRlID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRmbik7CiAgICAgICAgJHRoaXMtPlNldFByZWZlcmVuY2UoUHJvbW90aW9uczo6TkVXQ09VUE9ORk9STV9URU1QTEFURSwkdGVtcGxhdGUpOwogICAgICB9CiAgfQoKCiR0aGlzLT5SZWRpcmVjdFRvVGFiKCRpZCk7CiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gYWxsb3cgY3JlYXRpbmcsIGludGVyZmFjaW5nIHdpdGgKIyAgYW5kIG1hbmFnaW5nIHByb21vdGlvbnMgb3Igc2FsZXMgaW4gdGhlIEUtY29tZW1yY2Ugc3VpdGUuCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQpuYW1lc3BhY2UgUHJvbW90aW9uczsKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwoKLy8KLy8gaW5pdGlhbGl6YXRpb24KLy8KJHRoZXRlbXBsYXRlID0gJHRoaXMtPkdldFByZWZlcmVuY2UoXFByb21vdGlvbnM6OkRGTFRDT1VQT05GT1JNX1RFTVBMQVRFKTsKJGNvZGUgPSAnJzsKJGVycm9yID0gJyc7CiRtZXNzYWdlID0gJyc7CiRzZXNzID0gbmV3IFxjZ2Vfc2Vzc2lvbigkdGhpcy0+R2V0TmFtZSgpKTsKCi8vCi8vIGhhbmRsZSBwYXJhbXMKLy8KJGlubGluZSA9IFxjZ2VfcGFyYW06OmdldF9ib29sKCRwYXJhbXMsJ2lubGluZScpOwokdGhldGVtcGxhdGUgPSBcY2dlX3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsJ3RlbXBsYXRlJywkdGhldGVtcGxhdGUpOwoKLy8KLy8gaGFuZGUgZm9ybSBkYXRhCi8vCmlmKCBpc3NldCgkcGFyYW1zWydwcm9tb19zdWJtaXQnXSkgKSB7CiAgICBpZiggaXNzZXQoJHBhcmFtc1sncHJvbW9fY29kZSddKSApICRjb2RlID0gdHJpbSgkcGFyYW1zWydwcm9tb19jb2RlJ10pOwoKICAgICRlcnJvciA9ICcnOwogICAgJG1zZyA9ICcnOwogICAgaWYoICRjb2RlID09ICcnICkgewogICAgICAgICRlcnJvciA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdlcnJvcl9lbXB0eV9jb2RlJyk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAvLyBjaGVjayBmb3IgY29kZSB2YWxpZGl0eQogICAgICAgIGlmKCAhcHJvbW9fb3BzOjppc192YWxpZF9jb3Vwb24oJGNvZGUpICkgewogICAgICAgICAgICAkZXJyb3IgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZXJyb3JfaW52YWxpZF9jb2RlJyk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBcUHJvbW90aW9uczo6YWRkX2NvdXBvbigkY29kZSk7CiAgICAgICAgICAgICRtc2cgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbXNnX3ZhbGlkX2NvZGUnKTsKICAgICAgICAgICAgJGNvZGUgPSAnJzsKICAgICAgICB9CiAgICB9CgogICAgaWYoICRlcnJvciApICRzZXNzLT5wdXQoJ2Vycm9yJywkZXJyb3IpOwogICAgaWYoICRtc2cgKSAkc2Vzcy0+cHV0KCdtc2cnLCRtc2cpOwoKICAgIGlmKCBpc3NldCgkcGFyYW1zWydwcm9tb19vcmlnX3VybCddKSApIHsKICAgICAgICAkdXJsID0gdHJpbSgkcGFyYW1zWydwcm9tb19vcmlnX3VybCddKTsKICAgICAgICAkdXJsID0gc3RyX3JlcGxhY2UoJ2FtcDsnLCcnLCR1cmwpOwogICAgICAgIGlmKCAkdXJsICkgcmVkaXJlY3QoJHVybCk7CiAgICB9Cn0KZWxzZSBpZiggaXNzZXQoJHBhcmFtc1sncHJvbW9fY2xlYXInXSkgKSB7CiAgICBcUHJvbW90aW9uczo6Y2xlYXJfY291cG9ucygpOwogICAgJG1zZyA9ICR0aGlzLT5MYW5nKCdjb3Vwb25zX2NsZWFyZWQnKTsKCiAgICAkc2Vzcy0+cHV0KCdtc2cnLCRtc2cpOwp9CgovLwovLyBnaXZlIGV2ZXJ5dGhpbmcgdG8gc21hcnR5Ci8vCmlmKCAkc2Vzcy0+ZXhpc3RzKCdtc2cnKSApIHsKICAgICRtc2cgPSAkc2Vzcy0+Z2V0KCdtc2cnKTsKICAgICRzZXNzLT5jbGVhcignbXNnJyk7Cn0KaWYoICRzZXNzLT5leGlzdHMoJ2Vycm9yJykgKSB7CiAgICAkZXJyb3IgPSAkc2Vzcy0+Z2V0KCdlcnJvcicpOwogICAgJHNlc3MtPmNsZWFyKCdlcnJvcicpOwp9CmlmKCAkc2Vzcy0+ZXhpc3RzKCdjb3Vwb25zJykgKSB7CiAgICAkY291cG9ucyA9ICRzZXNzLT5nZXQoJ2NvdXBvbnMnKTsKICAgIGlmKCBpc19hcnJheSgkY291cG9ucykgJiYgY291bnQoJGNvdXBvbnMpICkgewogICAgICAgICRzbWFydHktPmFzc2lnbignY291cG9ucycsJGNvdXBvbnMpOwogICAgfQp9CgppZiggaXNzZXQoJG1zZykgJiYgJG1zZyAhPSAnJyApIHsKICAgICRzbWFydHktPmFzc2lnbignbXNnJywkbXNnKTsKfQppZiggaXNzZXQoJGVycm9yKSAmJiAkZXJyb3IgIT0gJycgKSB7CiAgICAkc21hcnR5LT5hc3NpZ24oJ2Vycm9yJywkZXJyb3IpOwp9CmlmKCAhaXNzZXQoJHBhcmFtc1sncHJvbW9fb3JpZ191cmwnXSkgKSB7CiAgICAkcGFyYW1zWydwcm9tb19vcmlnX3VybCddID0gXGNnZV91cmw6OmN1cnJlbnRfdXJsKCk7Cn0KCiRzbWFydHktPmFzc2lnbignY29kZScsJGNvZGUpOwokc21hcnR5LT5hc3NpZ24oJ2Zvcm1zdGFydCcsICR0aGlzLT5DR0NyZWF0ZUZvcm1TdGFydCgkaWQsJ2RlZmF1bHQnLCRyZXR1cm5pZCwkcGFyYW1zLCRpbmxpbmUpKTsKJHNtYXJ0eS0+YXNzaWduKCdmb3JtZW5kJywkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKCi8vCi8vIG91dHB1dAovLwplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YWJhc2UoJ2NvdXBvbmZvcm1fJy4kdGhldGVtcGxhdGUpOwoKIwojIEVPRgojCg==]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gYWxsb3cgY3JlYXRpbmcsIGludGVyZmFjaW5nIHdpdGgKIyAgYW5kIG1hbmFnaW5nIHByb21vdGlvbnMgb3Igc2FsZXMgaW4gdGhlIEUtY29tZW1yY2Ugc3VpdGUuCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQpuYW1lc3BhY2UgUHJvbW90aW9uczsKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwoKZWNobyAkdGhpcy0+U3RhcnRUYWJIZWFkZXJzKCk7CmlmKCAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKFxQcm9tb3Rpb25zOjpNQUlOX1BFUk0pICkgewogICAgZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdjaGVja291dF9wcm9tb3Rpb25zJywkdGhpcy0+TGFuZygnbGJsX2NoZWNrb3V0X3Byb21vdGlvbnMnKSk7CiAgICBlY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ2luc3RhbnRfcHJvbW90aW9ucycsJHRoaXMtPkxhbmcoJ2xibF9pbnN0YW50X3Byb21vdGlvbnMnKSk7Cn0KaWYoICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBUZW1wbGF0ZXMnKSApIHsKICAgIGVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignY291cG9uZm9ybScsJHRoaXMtPkxhbmcoJ2xibF9jb3Vwb25mb3JtX3RlbXBsYXRlcycpKTsKICAgIGVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignZGZsdF90ZW1wbGF0ZXMnLCR0aGlzLT5MYW5nKCdsYmxfZGVmYXVsdF90ZW1wbGF0ZXMnKSk7Cn0KaWYoICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJykgKSB7CiAgICBlY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ3NldHRpbmdzJywkdGhpcy0+TGFuZygnbGJsX3NldHRpbmdzJykpOwp9CmVjaG8gJHRoaXMtPkVuZFRhYkhlYWRlcnMoKTsKCmVjaG8gJHRoaXMtPlN0YXJ0VGFiQ29udGVudCgpOwppZiggJHRoaXMtPkNoZWNrUGVybWlzc2lvbihcUHJvbW90aW9uczo6TUFJTl9QRVJNKSApIHsKICAgIGVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdjaGVja291dF9wcm9tb3Rpb25zJywkcGFyYW1zKTsKICAgIGluY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykuJy9mdW5jdGlvbi5hZG1pbl9jaGVja291dF9wcm9tb3Rpb25zdGFiLnBocCcpOwogICAgZWNobyAkdGhpcy0+RW5kVGFiKCk7CgogICAgZWNobyAkdGhpcy0+U3RhcnRUYWIoJ2luc3RhbnRfcHJvbW90aW9ucycsJHBhcmFtcyk7CiAgICBpbmNsdWRlKGRpcm5hbWUoX19GSUxFX18pLicvZnVuY3Rpb24uYWRtaW5faW5zdGFudF9wcm9tb3Rpb25zdGFiLnBocCcpOwogICAgZWNobyAkdGhpcy0+RW5kVGFiKCk7Cn0KaWYoICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBUZW1wbGF0ZXMnKSApIHsKICAgIGVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdjb3Vwb25mb3JtJywkcGFyYW1zKTsKICAgIGluY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykuJy9mdW5jdGlvbi5hZG1pbl9jb3Vwb25mb3JtdGFiLnBocCcpOwogICAgZWNobyAkdGhpcy0+RW5kVGFiKCk7CgogICAgZWNobyAkdGhpcy0+U3RhcnRUYWIoJ2RmbHRfdGVtcGxhdGVzJywkcGFyYW1zKTsKICAgIGluY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykuJy9mdW5jdGlvbi5hZG1pbl9kZmx0X3RlbXBsYXRlc190YWIucGhwJyk7CiAgICBlY2hvICR0aGlzLT5FbmRUYWIoKTsKfQppZiggJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKSApIHsKICAgIGVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdzZXR0aW5ncycsJHBhcmFtcyk7CiAgICBpbmNsdWRlKGRpcm5hbWUoX19GSUxFX18pLicvZnVuY3Rpb24uYWRtaW5fc2V0dGluZ3N0YWIucGhwJyk7CiAgICBlY2hvICR0aGlzLT5FbmRUYWIoKTsKfQplY2hvICR0aGlzLT5FbmRUYWJDb250ZW50KCk7CgojCiMgRU9GCiMK]]></data>
	</file>
	<file>
	  <filename>/changelog.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHVsPgogIDxsaT5WZXJzaW9uIDEuMCAtIEF1Z3VzdC8yMDA5CiAgICA8dWw+CiAgICAgIDxsaT5Jbml0aWFsIFJlbGVhc2U8L2xpPgogICAgPC91bD4KICA8L2xpPgoKICA8bGk+VmVyc2lvbiAxLjAuMSAtIEF1Z3VzdC8yMDA5CiAgICA8dWw+CiAgICAgIDxsaT5NaW5vciBidWcgZml4ZXMuPC9saT4KICAgIDwvdWw+CiAgPC9saT4KCiAgPGxpPlZlcnNpb24gMS4wLjQgLSBPY3RvYmVyLzIwMDkKICAgIDx1bD4KICAgICAgPGxpPk1pbm9yIGJ1ZyBmaXhlczwvbGk+CiAgICA8L3VsPgogIDwvbGk+CgogIDxsaT5WZXJzaW9uIDEuMC41IC0gT2N0b2Jlci8yMDA5CiAgICA8dWw+CiAgICAgIDxsaT5NaW5vciBidWcgZml4ZXM8L2xpPgogICAgPC91bD4KICA8L2xpPgoKICA8bGk+VmVyc2lvbiAxLjAuNiAtIEZlYnJ1YXJ5LzIwMDkKICAgIDx1bD4KICAgICAgPGxpPkFkZHMgdGhlIGFiaWxpdHkgdG8gZ2V0IGRpc2NvdW50IGluZm9ybWF0aW9uIGZvciBhIHNpbmdsZSBwcm9kdWN0LjwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPlZlcnNpb24gMS4wLjYgLSBKdW5lLzIwMTAKICAgIDx1bD4KICAgICAgPGxpPk1pbm9yIGJ1ZyBmaXhlcy48L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT5WZXJzaW9uIDEuMC44IC0gSnVseS8yMDEwCiAgICA8dWw+CiAgICAgIDxsaT5NaW5vciBidWcgZml4ZXMuPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+VmVyc2lvbiAxLjAuMTAgLSBGZWJydWFyeS8yMDExCiAgICA8dWw+CiAgICAgIDxsaT5NaW5vciBidWcgZml4ZXMuPC9saT4KICAgICAgPGxpPkFkZHMgZnJvbnRlbmQgYWJpbGl0eSB0byByZXNldCBjb3Vwb24gY29kZXMgdGhhdCBoYXZlIGJlZW4gZW50ZXJlZC48L2xpPgogICAgPC91bD4KICA8L2xpPgogPGxpPlZlcnNpb24gMS4wLjExLSBGZWJydWFyeS8yMDExCiAgICA8dWw+CiAgICAgIDxsaT5NaW5vciBidWcgZml4ZXMuPC9saT4KICAgIDwvdWw+CiAgPC9saT4KIDxsaT5WZXJzaW9uIDEuMC4xMi0gTWFyY2gvMjAxMQogICAgPHVsPgogICAgICA8bGk+TWlub3IgYnVnIGZpeGVzLjwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiA8bGk+VmVyc2lvbiAxLjAuMTQgLSBBcHJpbC8yMDExCiAgIDx1bD4KICAgICA8bGk+TWlub3IgYnVnIGZpeC48L2xpPgogICA8L3VsPgogPC9saT4KIDxsaT5WZXJzaW9uIDEuMC4xNSAtIERlY2VtYmVyLzIwMTEKICAgPHVsPgogICAgIDxsaT5NaW5vciBidWcgZml4LjwvbGk+CiAgIDwvdWw+CiA8L2xpPgogPGxpPlZlcnNpb24gMS4xLnggLSBEZWNlbWJlci8yMDEyCiAgIDxwPjxzdHJvbmc+Tk9URTogQ09NUEFUSUJJTElUWSBNQVkgQkUgQlJPS0VOLiAgQ0hFQ0sgQUxMIE9GIFlPVVIgUFJPTU9USU9OUy48L3N0cm9uZz48L3A+CiAgIDxwPjxzdHJvbmc+Tk9URTogUEhQIDUuMy54IElTIFJFUVVJUkVELjwvc3Ryb25nPjwvcD4KICAgPHVsPgogICAgICA8bGk+TWFqb3IgcmV2aXNpb24gLSBhZGRzIGluc3RhbnQsIGFuZCBjaGVja291dCB0eXBlIHByb21vdGlvbnMuPC9saT4KICAgICAgPGxpPkFkZHMgbmV3IHByb21vdGlvbiB0ZXN0ZXIgY2xhc3NlcywgYW5kIGRlcHJlY2F0ZXMgdGhlIG9sZCBvbmVzLjwvbGk+CiAgICAgIDxsaT48c3Ryb25nPk5vdGU6IFRoaXMgbWF5IG5vdCBiZSBhIHNpbXBsZSB1cGdyYWRlLjwvc3Ryb25nPjwvbGk+CiAgIDwvdWw+CiA8L2xpPgo8L3VsPgo=]]></data>
	</file>
	<file>
	  <filename>/doc/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/doc/COPYING</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ICAgICAgICAgICAgICAgICAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQogICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMywgMjkgSnVuZSAyMDA3CgogQ29weXJpZ2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiA8aHR0cDovL2ZzZi5vcmcvPgogRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCiBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVhbWJsZQoKICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgYSBmcmVlLCBjb3B5bGVmdCBsaWNlbnNlIGZvcgpzb2Z0d2FyZSBhbmQgb3RoZXIga2luZHMgb2Ygd29ya3MuCgogIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhbmQgb3RoZXIgcHJhY3RpY2FsIHdvcmtzIGFyZSBkZXNpZ25lZAp0byB0YWtlIGF3YXkgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgdGhlIHdvcmtzLiAgQnkgY29udHJhc3QsCnRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvCnNoYXJlIGFuZCBjaGFuZ2UgYWxsIHZlcnNpb25zIG9mIGEgcHJvZ3JhbS0tdG8gbWFrZSBzdXJlIGl0IHJlbWFpbnMgZnJlZQpzb2Z0d2FyZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFdlLCB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB1c2UgdGhlCkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3N0IG9mIG91ciBzb2Z0d2FyZTsgaXQgYXBwbGllcyBhbHNvIHRvCmFueSBvdGhlciB3b3JrIHJlbGVhc2VkIHRoaXMgd2F5IGJ5IGl0cyBhdXRob3JzLiAgWW91IGNhbiBhcHBseSBpdCB0bwp5b3VyIHByb2dyYW1zLCB0b28uCgogIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQpoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCnRoZW0gaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQgaWYgeW91CndhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3CmZyZWUgcHJvZ3JhbXMsIGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgoKICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIHByZXZlbnQgb3RoZXJzIGZyb20gZGVueWluZyB5b3UKdGhlc2UgcmlnaHRzIG9yIGFza2luZyB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuICBUaGVyZWZvcmUsIHlvdSBoYXZlCmNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZgp5b3UgbW9kaWZ5IGl0OiByZXNwb25zaWJpbGl0aWVzIHRvIHJlc3BlY3QgdGhlIGZyZWVkb20gb2Ygb3RoZXJzLgoKICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCmdyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IHBhc3Mgb24gdG8gdGhlIHJlY2lwaWVudHMgdGhlIHNhbWUKZnJlZWRvbXMgdGhhdCB5b3UgcmVjZWl2ZWQuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUKb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkKa25vdyB0aGVpciByaWdodHMuCgogIERldmVsb3BlcnMgdGhhdCB1c2UgdGhlIEdOVSBHUEwgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczoKKDEpIGFzc2VydCBjb3B5cmlnaHQgb24gdGhlIHNvZnR3YXJlLCBhbmQgKDIpIG9mZmVyIHlvdSB0aGlzIExpY2Vuc2UKZ2l2aW5nIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSBpdC4KCiAgRm9yIHRoZSBkZXZlbG9wZXJzJyBhbmQgYXV0aG9ycycgcHJvdGVjdGlvbiwgdGhlIEdQTCBjbGVhcmx5IGV4cGxhaW5zCnRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gIEZvciBib3RoIHVzZXJzJyBhbmQKYXV0aG9ycycgc2FrZSwgdGhlIEdQTCByZXF1aXJlcyB0aGF0IG1vZGlmaWVkIHZlcnNpb25zIGJlIG1hcmtlZCBhcwpjaGFuZ2VkLCBzbyB0aGF0IHRoZWlyIHByb2JsZW1zIHdpbGwgbm90IGJlIGF0dHJpYnV0ZWQgZXJyb25lb3VzbHkgdG8KYXV0aG9ycyBvZiBwcmV2aW91cyB2ZXJzaW9ucy4KCiAgU29tZSBkZXZpY2VzIGFyZSBkZXNpZ25lZCB0byBkZW55IHVzZXJzIGFjY2VzcyB0byBpbnN0YWxsIG9yIHJ1bgptb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgc29mdHdhcmUgaW5zaWRlIHRoZW0sIGFsdGhvdWdoIHRoZSBtYW51ZmFjdHVyZXIKY2FuIGRvIHNvLiAgVGhpcyBpcyBmdW5kYW1lbnRhbGx5IGluY29tcGF0aWJsZSB3aXRoIHRoZSBhaW0gb2YKcHJvdGVjdGluZyB1c2VycycgZnJlZWRvbSB0byBjaGFuZ2UgdGhlIHNvZnR3YXJlLiAgVGhlIHN5c3RlbWF0aWMKcGF0dGVybiBvZiBzdWNoIGFidXNlIG9jY3VycyBpbiB0aGUgYXJlYSBvZiBwcm9kdWN0cyBmb3IgaW5kaXZpZHVhbHMgdG8KdXNlLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hlcmUgaXQgaXMgbW9zdCB1bmFjY2VwdGFibGUuICBUaGVyZWZvcmUsIHdlCmhhdmUgZGVzaWduZWQgdGhpcyB2ZXJzaW9uIG9mIHRoZSBHUEwgdG8gcHJvaGliaXQgdGhlIHByYWN0aWNlIGZvciB0aG9zZQpwcm9kdWN0cy4gIElmIHN1Y2ggcHJvYmxlbXMgYXJpc2Ugc3Vic3RhbnRpYWxseSBpbiBvdGhlciBkb21haW5zLCB3ZQpzdGFuZCByZWFkeSB0byBleHRlbmQgdGhpcyBwcm92aXNpb24gdG8gdGhvc2UgZG9tYWlucyBpbiBmdXR1cmUgdmVyc2lvbnMKb2YgdGhlIEdQTCwgYXMgbmVlZGVkIHRvIHByb3RlY3QgdGhlIGZyZWVkb20gb2YgdXNlcnMuCgogIEZpbmFsbHksIGV2ZXJ5IHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlIHBhdGVudHMuClN0YXRlcyBzaG91bGQgbm90IGFsbG93IHBhdGVudHMgdG8gcmVzdHJpY3QgZGV2ZWxvcG1lbnQgYW5kIHVzZSBvZgpzb2Z0d2FyZSBvbiBnZW5lcmFsLXB1cnBvc2UgY29tcHV0ZXJzLCBidXQgaW4gdGhvc2UgdGhhdCBkbywgd2Ugd2lzaCB0bwphdm9pZCB0aGUgc3BlY2lhbCBkYW5nZXIgdGhhdCBwYXRlbnRzIGFwcGxpZWQgdG8gYSBmcmVlIHByb2dyYW0gY291bGQKbWFrZSBpdCBlZmZlY3RpdmVseSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgdGhlIEdQTCBhc3N1cmVzIHRoYXQKcGF0ZW50cyBjYW5ub3QgYmUgdXNlZCB0byByZW5kZXIgdGhlIHByb2dyYW0gbm9uLWZyZWUuCgogIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCm1vZGlmaWNhdGlvbiBmb2xsb3cuCgogICAgICAgICAgICAgICAgICAgICAgIFRFUk1TIEFORCBDT05ESVRJT05TCgogIDAuIERlZmluaXRpb25zLgoKICAiVGhpcyBMaWNlbnNlIiByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KCiAgIkNvcHlyaWdodCIgYWxzbyBtZWFucyBjb3B5cmlnaHQtbGlrZSBsYXdzIHRoYXQgYXBwbHkgdG8gb3RoZXIga2luZHMgb2YKd29ya3MsIHN1Y2ggYXMgc2VtaWNvbmR1Y3RvciBtYXNrcy4KCiAgIlRoZSBQcm9ncmFtIiByZWZlcnMgdG8gYW55IGNvcHlyaWdodGFibGUgd29yayBsaWNlbnNlZCB1bmRlciB0aGlzCkxpY2Vuc2UuICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4gICJMaWNlbnNlZXMiIGFuZAoicmVjaXBpZW50cyIgbWF5IGJlIGluZGl2aWR1YWxzIG9yIG9yZ2FuaXphdGlvbnMuCgogIFRvICJtb2RpZnkiIGEgd29yayBtZWFucyB0byBjb3B5IGZyb20gb3IgYWRhcHQgYWxsIG9yIHBhcnQgb2YgdGhlIHdvcmsKaW4gYSBmYXNoaW9uIHJlcXVpcmluZyBjb3B5cmlnaHQgcGVybWlzc2lvbiwgb3RoZXIgdGhhbiB0aGUgbWFraW5nIG9mIGFuCmV4YWN0IGNvcHkuICBUaGUgcmVzdWx0aW5nIHdvcmsgaXMgY2FsbGVkIGEgIm1vZGlmaWVkIHZlcnNpb24iIG9mIHRoZQplYXJsaWVyIHdvcmsgb3IgYSB3b3JrICJiYXNlZCBvbiIgdGhlIGVhcmxpZXIgd29yay4KCiAgQSAiY292ZXJlZCB3b3JrIiBtZWFucyBlaXRoZXIgdGhlIHVubW9kaWZpZWQgUHJvZ3JhbSBvciBhIHdvcmsgYmFzZWQKb24gdGhlIFByb2dyYW0uCgogIFRvICJwcm9wYWdhdGUiIGEgd29yayBtZWFucyB0byBkbyBhbnl0aGluZyB3aXRoIGl0IHRoYXQsIHdpdGhvdXQKcGVybWlzc2lvbiwgd291bGQgbWFrZSB5b3UgZGlyZWN0bHkgb3Igc2Vjb25kYXJpbHkgbGlhYmxlIGZvcgppbmZyaW5nZW1lbnQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3LCBleGNlcHQgZXhlY3V0aW5nIGl0IG9uIGEKY29tcHV0ZXIgb3IgbW9kaWZ5aW5nIGEgcHJpdmF0ZSBjb3B5LiAgUHJvcGFnYXRpb24gaW5jbHVkZXMgY29weWluZywKZGlzdHJpYnV0aW9uICh3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uKSwgbWFraW5nIGF2YWlsYWJsZSB0byB0aGUKcHVibGljLCBhbmQgaW4gc29tZSBjb3VudHJpZXMgb3RoZXIgYWN0aXZpdGllcyBhcyB3ZWxsLgoKICBUbyAiY29udmV5IiBhIHdvcmsgbWVhbnMgYW55IGtpbmQgb2YgcHJvcGFnYXRpb24gdGhhdCBlbmFibGVzIG90aGVyCnBhcnRpZXMgdG8gbWFrZSBvciByZWNlaXZlIGNvcGllcy4gIE1lcmUgaW50ZXJhY3Rpb24gd2l0aCBhIHVzZXIgdGhyb3VnaAphIGNvbXB1dGVyIG5ldHdvcmssIHdpdGggbm8gdHJhbnNmZXIgb2YgYSBjb3B5LCBpcyBub3QgY29udmV5aW5nLgoKICBBbiBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZSBkaXNwbGF5cyAiQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcyIKdG8gdGhlIGV4dGVudCB0aGF0IGl0IGluY2x1ZGVzIGEgY29udmVuaWVudCBhbmQgcHJvbWluZW50bHkgdmlzaWJsZQpmZWF0dXJlIHRoYXQgKDEpIGRpc3BsYXlzIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UsIGFuZCAoMikKdGVsbHMgdGhlIHVzZXIgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhlIHdvcmsgKGV4Y2VwdCB0byB0aGUKZXh0ZW50IHRoYXQgd2FycmFudGllcyBhcmUgcHJvdmlkZWQpLCB0aGF0IGxpY2Vuc2VlcyBtYXkgY29udmV5IHRoZQp3b3JrIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZgp0aGUgaW50ZXJmYWNlIHByZXNlbnRzIGEgbGlzdCBvZiB1c2VyIGNvbW1hbmRzIG9yIG9wdGlvbnMsIHN1Y2ggYXMgYQptZW51LCBhIHByb21pbmVudCBpdGVtIGluIHRoZSBsaXN0IG1lZXRzIHRoaXMgY3JpdGVyaW9uLgoKICAxLiBTb3VyY2UgQ29kZS4KCiAgVGhlICJzb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsKZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgIk9iamVjdCBjb2RlIiBtZWFucyBhbnkgbm9uLXNvdXJjZQpmb3JtIG9mIGEgd29yay4KCiAgQSAiU3RhbmRhcmQgSW50ZXJmYWNlIiBtZWFucyBhbiBpbnRlcmZhY2UgdGhhdCBlaXRoZXIgaXMgYW4gb2ZmaWNpYWwKc3RhbmRhcmQgZGVmaW5lZCBieSBhIHJlY29nbml6ZWQgc3RhbmRhcmRzIGJvZHksIG9yLCBpbiB0aGUgY2FzZSBvZgppbnRlcmZhY2VzIHNwZWNpZmllZCBmb3IgYSBwYXJ0aWN1bGFyIHByb2dyYW1taW5nIGxhbmd1YWdlLCBvbmUgdGhhdAppcyB3aWRlbHkgdXNlZCBhbW9uZyBkZXZlbG9wZXJzIHdvcmtpbmcgaW4gdGhhdCBsYW5ndWFnZS4KCiAgVGhlICJTeXN0ZW0gTGlicmFyaWVzIiBvZiBhbiBleGVjdXRhYmxlIHdvcmsgaW5jbHVkZSBhbnl0aGluZywgb3RoZXIKdGhhbiB0aGUgd29yayBhcyBhIHdob2xlLCB0aGF0IChhKSBpcyBpbmNsdWRlZCBpbiB0aGUgbm9ybWFsIGZvcm0gb2YKcGFja2FnaW5nIGEgTWFqb3IgQ29tcG9uZW50LCBidXQgd2hpY2ggaXMgbm90IHBhcnQgb2YgdGhhdCBNYWpvcgpDb21wb25lbnQsIGFuZCAoYikgc2VydmVzIG9ubHkgdG8gZW5hYmxlIHVzZSBvZiB0aGUgd29yayB3aXRoIHRoYXQKTWFqb3IgQ29tcG9uZW50LCBvciB0byBpbXBsZW1lbnQgYSBTdGFuZGFyZCBJbnRlcmZhY2UgZm9yIHdoaWNoIGFuCmltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluIHNvdXJjZSBjb2RlIGZvcm0uICBBCiJNYWpvciBDb21wb25lbnQiLCBpbiB0aGlzIGNvbnRleHQsIG1lYW5zIGEgbWFqb3IgZXNzZW50aWFsIGNvbXBvbmVudAooa2VybmVsLCB3aW5kb3cgc3lzdGVtLCBhbmQgc28gb24pIG9mIHRoZSBzcGVjaWZpYyBvcGVyYXRpbmcgc3lzdGVtCihpZiBhbnkpIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHdvcmsgcnVucywgb3IgYSBjb21waWxlciB1c2VkIHRvCnByb2R1Y2UgdGhlIHdvcmssIG9yIGFuIG9iamVjdCBjb2RlIGludGVycHJldGVyIHVzZWQgdG8gcnVuIGl0LgoKICBUaGUgIkNvcnJlc3BvbmRpbmcgU291cmNlIiBmb3IgYSB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gbWVhbnMgYWxsCnRoZSBzb3VyY2UgY29kZSBuZWVkZWQgdG8gZ2VuZXJhdGUsIGluc3RhbGwsIGFuZCAoZm9yIGFuIGV4ZWN1dGFibGUKd29yaykgcnVuIHRoZSBvYmplY3QgY29kZSBhbmQgdG8gbW9kaWZ5IHRoZSB3b3JrLCBpbmNsdWRpbmcgc2NyaXB0cyB0bwpjb250cm9sIHRob3NlIGFjdGl2aXRpZXMuICBIb3dldmVyLCBpdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSB3b3JrJ3MKU3lzdGVtIExpYnJhcmllcywgb3IgZ2VuZXJhbC1wdXJwb3NlIHRvb2xzIG9yIGdlbmVyYWxseSBhdmFpbGFibGUgZnJlZQpwcm9ncmFtcyB3aGljaCBhcmUgdXNlZCB1bm1vZGlmaWVkIGluIHBlcmZvcm1pbmcgdGhvc2UgYWN0aXZpdGllcyBidXQKd2hpY2ggYXJlIG5vdCBwYXJ0IG9mIHRoZSB3b3JrLiAgRm9yIGV4YW1wbGUsIENvcnJlc3BvbmRpbmcgU291cmNlCmluY2x1ZGVzIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBzb3VyY2UgZmlsZXMgZm9yCnRoZSB3b3JrLCBhbmQgdGhlIHNvdXJjZSBjb2RlIGZvciBzaGFyZWQgbGlicmFyaWVzIGFuZCBkeW5hbWljYWxseQpsaW5rZWQgc3VicHJvZ3JhbXMgdGhhdCB0aGUgd29yayBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gcmVxdWlyZSwKc3VjaCBhcyBieSBpbnRpbWF0ZSBkYXRhIGNvbW11bmljYXRpb24gb3IgY29udHJvbCBmbG93IGJldHdlZW4gdGhvc2UKc3VicHJvZ3JhbXMgYW5kIG90aGVyIHBhcnRzIG9mIHRoZSB3b3JrLgoKICBUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IHVzZXJzCmNhbiByZWdlbmVyYXRlIGF1dG9tYXRpY2FsbHkgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgQ29ycmVzcG9uZGluZwpTb3VyY2UuCgogIFRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYSB3b3JrIGluIHNvdXJjZSBjb2RlIGZvcm0gaXMgdGhhdApzYW1lIHdvcmsuCgogIDIuIEJhc2ljIFBlcm1pc3Npb25zLgoKICBBbGwgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFyZSBncmFudGVkIGZvciB0aGUgdGVybSBvZgpjb3B5cmlnaHQgb24gdGhlIFByb2dyYW0sIGFuZCBhcmUgaXJyZXZvY2FibGUgcHJvdmlkZWQgdGhlIHN0YXRlZApjb25kaXRpb25zIGFyZSBtZXQuICBUaGlzIExpY2Vuc2UgZXhwbGljaXRseSBhZmZpcm1zIHlvdXIgdW5saW1pdGVkCnBlcm1pc3Npb24gdG8gcnVuIHRoZSB1bm1vZGlmaWVkIFByb2dyYW0uICBUaGUgb3V0cHV0IGZyb20gcnVubmluZyBhCmNvdmVyZWQgd29yayBpcyBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSBvbmx5IGlmIHRoZSBvdXRwdXQsIGdpdmVuIGl0cwpjb250ZW50LCBjb25zdGl0dXRlcyBhIGNvdmVyZWQgd29yay4gIFRoaXMgTGljZW5zZSBhY2tub3dsZWRnZXMgeW91cgpyaWdodHMgb2YgZmFpciB1c2Ugb3Igb3RoZXIgZXF1aXZhbGVudCwgYXMgcHJvdmlkZWQgYnkgY29weXJpZ2h0IGxhdy4KCiAgWW91IG1heSBtYWtlLCBydW4gYW5kIHByb3BhZ2F0ZSBjb3ZlcmVkIHdvcmtzIHRoYXQgeW91IGRvIG5vdApjb252ZXksIHdpdGhvdXQgY29uZGl0aW9ucyBzbyBsb25nIGFzIHlvdXIgbGljZW5zZSBvdGhlcndpc2UgcmVtYWlucwppbiBmb3JjZS4gIFlvdSBtYXkgY29udmV5IGNvdmVyZWQgd29ya3MgdG8gb3RoZXJzIGZvciB0aGUgc29sZSBwdXJwb3NlCm9mIGhhdmluZyB0aGVtIG1ha2UgbW9kaWZpY2F0aW9ucyBleGNsdXNpdmVseSBmb3IgeW91LCBvciBwcm92aWRlIHlvdQp3aXRoIGZhY2lsaXRpZXMgZm9yIHJ1bm5pbmcgdGhvc2Ugd29ya3MsIHByb3ZpZGVkIHRoYXQgeW91IGNvbXBseSB3aXRoCnRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW4gY29udmV5aW5nIGFsbCBtYXRlcmlhbCBmb3Igd2hpY2ggeW91IGRvCm5vdCBjb250cm9sIGNvcHlyaWdodC4gIFRob3NlIHRodXMgbWFraW5nIG9yIHJ1bm5pbmcgdGhlIGNvdmVyZWQgd29ya3MKZm9yIHlvdSBtdXN0IGRvIHNvIGV4Y2x1c2l2ZWx5IG9uIHlvdXIgYmVoYWxmLCB1bmRlciB5b3VyIGRpcmVjdGlvbgphbmQgY29udHJvbCwgb24gdGVybXMgdGhhdCBwcm9oaWJpdCB0aGVtIGZyb20gbWFraW5nIGFueSBjb3BpZXMgb2YKeW91ciBjb3B5cmlnaHRlZCBtYXRlcmlhbCBvdXRzaWRlIHRoZWlyIHJlbGF0aW9uc2hpcCB3aXRoIHlvdS4KCiAgQ29udmV5aW5nIHVuZGVyIGFueSBvdGhlciBjaXJjdW1zdGFuY2VzIGlzIHBlcm1pdHRlZCBzb2xlbHkgdW5kZXIKdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGJlbG93LiAgU3VibGljZW5zaW5nIGlzIG5vdCBhbGxvd2VkOyBzZWN0aW9uIDEwCm1ha2VzIGl0IHVubmVjZXNzYXJ5LgoKICAzLiBQcm90ZWN0aW5nIFVzZXJzJyBMZWdhbCBSaWdodHMgRnJvbSBBbnRpLUNpcmN1bXZlbnRpb24gTGF3LgoKICBObyBjb3ZlcmVkIHdvcmsgc2hhbGwgYmUgZGVlbWVkIHBhcnQgb2YgYW4gZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwKbWVhc3VyZSB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcgZnVsZmlsbGluZyBvYmxpZ2F0aW9ucyB1bmRlciBhcnRpY2xlCjExIG9mIHRoZSBXSVBPIGNvcHlyaWdodCB0cmVhdHkgYWRvcHRlZCBvbiAyMCBEZWNlbWJlciAxOTk2LCBvcgpzaW1pbGFyIGxhd3MgcHJvaGliaXRpbmcgb3IgcmVzdHJpY3RpbmcgY2lyY3VtdmVudGlvbiBvZiBzdWNoCm1lYXN1cmVzLgoKICBXaGVuIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIHlvdSB3YWl2ZSBhbnkgbGVnYWwgcG93ZXIgdG8gZm9yYmlkCmNpcmN1bXZlbnRpb24gb2YgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0byB0aGUgZXh0ZW50IHN1Y2ggY2lyY3VtdmVudGlvbgppcyBlZmZlY3RlZCBieSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvCnRoZSBjb3ZlcmVkIHdvcmssIGFuZCB5b3UgZGlzY2xhaW0gYW55IGludGVudGlvbiB0byBsaW1pdCBvcGVyYXRpb24gb3IKbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGFzIGEgbWVhbnMgb2YgZW5mb3JjaW5nLCBhZ2FpbnN0IHRoZSB3b3JrJ3MKdXNlcnMsIHlvdXIgb3IgdGhpcmQgcGFydGllcycgbGVnYWwgcmlnaHRzIHRvIGZvcmJpZCBjaXJjdW12ZW50aW9uIG9mCnRlY2hub2xvZ2ljYWwgbWVhc3VyZXMuCgogIDQuIENvbnZleWluZyBWZXJiYXRpbSBDb3BpZXMuCgogIFlvdSBtYXkgY29udmV5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzIHNvdXJjZSBjb2RlIGFzIHlvdQpyZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZAphcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2U7CmtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHN0YXRpbmcgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFueQpub24tcGVybWlzc2l2ZSB0ZXJtcyBhZGRlZCBpbiBhY2NvcmQgd2l0aCBzZWN0aW9uIDcgYXBwbHkgdG8gdGhlIGNvZGU7CmtlZXAgaW50YWN0IGFsbCBub3RpY2VzIG9mIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYWxsCnJlY2lwaWVudHMgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgoKICBZb3UgbWF5IGNoYXJnZSBhbnkgcHJpY2Ugb3Igbm8gcHJpY2UgZm9yIGVhY2ggY29weSB0aGF0IHlvdSBjb252ZXksCmFuZCB5b3UgbWF5IG9mZmVyIHN1cHBvcnQgb3Igd2FycmFudHkgcHJvdGVjdGlvbiBmb3IgYSBmZWUuCgogIDUuIENvbnZleWluZyBNb2RpZmllZCBTb3VyY2UgVmVyc2lvbnMuCgogIFlvdSBtYXkgY29udmV5IGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgb3IgdGhlIG1vZGlmaWNhdGlvbnMgdG8KcHJvZHVjZSBpdCBmcm9tIHRoZSBQcm9ncmFtLCBpbiB0aGUgZm9ybSBvZiBzb3VyY2UgY29kZSB1bmRlciB0aGUKdGVybXMgb2Ygc2VjdGlvbiA0LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CgogICAgYSkgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IG1vZGlmaWVkCiAgICBpdCwgYW5kIGdpdmluZyBhIHJlbGV2YW50IGRhdGUuCgogICAgYikgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgaXQgaXMKICAgIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IGNvbmRpdGlvbnMgYWRkZWQgdW5kZXIgc2VjdGlvbgogICAgNy4gIFRoaXMgcmVxdWlyZW1lbnQgbW9kaWZpZXMgdGhlIHJlcXVpcmVtZW50IGluIHNlY3Rpb24gNCB0bwogICAgImtlZXAgaW50YWN0IGFsbCBub3RpY2VzIi4KCiAgICBjKSBZb3UgbXVzdCBsaWNlbnNlIHRoZSBlbnRpcmUgd29yaywgYXMgYSB3aG9sZSwgdW5kZXIgdGhpcwogICAgTGljZW5zZSB0byBhbnlvbmUgd2hvIGNvbWVzIGludG8gcG9zc2Vzc2lvbiBvZiBhIGNvcHkuICBUaGlzCiAgICBMaWNlbnNlIHdpbGwgdGhlcmVmb3JlIGFwcGx5LCBhbG9uZyB3aXRoIGFueSBhcHBsaWNhYmxlIHNlY3Rpb24gNwogICAgYWRkaXRpb25hbCB0ZXJtcywgdG8gdGhlIHdob2xlIG9mIHRoZSB3b3JrLCBhbmQgYWxsIGl0cyBwYXJ0cywKICAgIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZXkgYXJlIHBhY2thZ2VkLiAgVGhpcyBMaWNlbnNlIGdpdmVzIG5vCiAgICBwZXJtaXNzaW9uIHRvIGxpY2Vuc2UgdGhlIHdvcmsgaW4gYW55IG90aGVyIHdheSwgYnV0IGl0IGRvZXMgbm90CiAgICBpbnZhbGlkYXRlIHN1Y2ggcGVybWlzc2lvbiBpZiB5b3UgaGF2ZSBzZXBhcmF0ZWx5IHJlY2VpdmVkIGl0LgoKICAgIGQpIElmIHRoZSB3b3JrIGhhcyBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZXMsIGVhY2ggbXVzdCBkaXNwbGF5CiAgICBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzOyBob3dldmVyLCBpZiB0aGUgUHJvZ3JhbSBoYXMgaW50ZXJhY3RpdmUKICAgIGludGVyZmFjZXMgdGhhdCBkbyBub3QgZGlzcGxheSBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzLCB5b3VyCiAgICB3b3JrIG5lZWQgbm90IG1ha2UgdGhlbSBkbyBzby4KCiAgQSBjb21waWxhdGlvbiBvZiBhIGNvdmVyZWQgd29yayB3aXRoIG90aGVyIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudAp3b3Jrcywgd2hpY2ggYXJlIG5vdCBieSB0aGVpciBuYXR1cmUgZXh0ZW5zaW9ucyBvZiB0aGUgY292ZXJlZCB3b3JrLAphbmQgd2hpY2ggYXJlIG5vdCBjb21iaW5lZCB3aXRoIGl0IHN1Y2ggYXMgdG8gZm9ybSBhIGxhcmdlciBwcm9ncmFtLAppbiBvciBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSwgaXMgY2FsbGVkIGFuCiJhZ2dyZWdhdGUiIGlmIHRoZSBjb21waWxhdGlvbiBhbmQgaXRzIHJlc3VsdGluZyBjb3B5cmlnaHQgYXJlIG5vdAp1c2VkIHRvIGxpbWl0IHRoZSBhY2Nlc3Mgb3IgbGVnYWwgcmlnaHRzIG9mIHRoZSBjb21waWxhdGlvbidzIHVzZXJzCmJleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4gIEluY2x1c2lvbiBvZiBhIGNvdmVyZWQgd29yawppbiBhbiBhZ2dyZWdhdGUgZG9lcyBub3QgY2F1c2UgdGhpcyBMaWNlbnNlIHRvIGFwcGx5IHRvIHRoZSBvdGhlcgpwYXJ0cyBvZiB0aGUgYWdncmVnYXRlLgoKICA2LiBDb252ZXlpbmcgTm9uLVNvdXJjZSBGb3Jtcy4KCiAgWW91IG1heSBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMKb2Ygc2VjdGlvbnMgNCBhbmQgNSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBjb252ZXkgdGhlCm1hY2hpbmUtcmVhZGFibGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwKaW4gb25lIG9mIHRoZXNlIHdheXM6CgogICAgYSkgQ29udmV5IHRoZSBvYmplY3QgY29kZSBpbiwgb3IgZW1ib2RpZWQgaW4sIGEgcGh5c2ljYWwgcHJvZHVjdAogICAgKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiBtZWRpdW0pLCBhY2NvbXBhbmllZCBieSB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGZpeGVkIG9uIGEgZHVyYWJsZSBwaHlzaWNhbCBtZWRpdW0KICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgoKICAgIGIpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKICAgIChpbmNsdWRpbmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgYQogICAgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzIGFuZCB2YWxpZCBmb3IgYXMKICAgIGxvbmcgYXMgeW91IG9mZmVyIHNwYXJlIHBhcnRzIG9yIGN1c3RvbWVyIHN1cHBvcnQgZm9yIHRoYXQgcHJvZHVjdAogICAgbW9kZWwsIHRvIGdpdmUgYW55b25lIHdobyBwb3NzZXNzZXMgdGhlIG9iamVjdCBjb2RlIGVpdGhlciAoMSkgYQogICAgY29weSBvZiB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGFsbCB0aGUgc29mdHdhcmUgaW4gdGhlCiAgICBwcm9kdWN0IHRoYXQgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIG9uIGEgZHVyYWJsZSBwaHlzaWNhbAogICAgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLCBmb3IgYSBwcmljZSBubwogICAgbW9yZSB0aGFuIHlvdXIgcmVhc29uYWJsZSBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyB0aGlzCiAgICBjb252ZXlpbmcgb2Ygc291cmNlLCBvciAoMikgYWNjZXNzIHRvIGNvcHkgdGhlCiAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBmcm9tIGEgbmV0d29yayBzZXJ2ZXIgYXQgbm8gY2hhcmdlLgoKICAgIGMpIENvbnZleSBpbmRpdmlkdWFsIGNvcGllcyBvZiB0aGUgb2JqZWN0IGNvZGUgd2l0aCBhIGNvcHkgb2YgdGhlCiAgICB3cml0dGVuIG9mZmVyIHRvIHByb3ZpZGUgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhpcwogICAgYWx0ZXJuYXRpdmUgaXMgYWxsb3dlZCBvbmx5IG9jY2FzaW9uYWxseSBhbmQgbm9uY29tbWVyY2lhbGx5LCBhbmQKICAgIG9ubHkgaWYgeW91IHJlY2VpdmVkIHRoZSBvYmplY3QgY29kZSB3aXRoIHN1Y2ggYW4gb2ZmZXIsIGluIGFjY29yZAogICAgd2l0aCBzdWJzZWN0aW9uIDZiLgoKICAgIGQpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIGZyb20gYSBkZXNpZ25hdGVkCiAgICBwbGFjZSAoZ3JhdGlzIG9yIGZvciBhIGNoYXJnZSksIGFuZCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGluIHRoZSBzYW1lIHdheSB0aHJvdWdoIHRoZSBzYW1lIHBsYWNlIGF0IG5vCiAgICBmdXJ0aGVyIGNoYXJnZS4gIFlvdSBuZWVkIG5vdCByZXF1aXJlIHJlY2lwaWVudHMgdG8gY29weSB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLiAgSWYgdGhlIHBsYWNlIHRvCiAgICBjb3B5IHRoZSBvYmplY3QgY29kZSBpcyBhIG5ldHdvcmsgc2VydmVyLCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UKICAgIG1heSBiZSBvbiBhIGRpZmZlcmVudCBzZXJ2ZXIgKG9wZXJhdGVkIGJ5IHlvdSBvciBhIHRoaXJkIHBhcnR5KQogICAgdGhhdCBzdXBwb3J0cyBlcXVpdmFsZW50IGNvcHlpbmcgZmFjaWxpdGllcywgcHJvdmlkZWQgeW91IG1haW50YWluCiAgICBjbGVhciBkaXJlY3Rpb25zIG5leHQgdG8gdGhlIG9iamVjdCBjb2RlIHNheWluZyB3aGVyZSB0byBmaW5kIHRoZQogICAgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBSZWdhcmRsZXNzIG9mIHdoYXQgc2VydmVyIGhvc3RzIHRoZQogICAgQ29ycmVzcG9uZGluZyBTb3VyY2UsIHlvdSByZW1haW4gb2JsaWdhdGVkIHRvIGVuc3VyZSB0aGF0IGl0IGlzCiAgICBhdmFpbGFibGUgZm9yIGFzIGxvbmcgYXMgbmVlZGVkIHRvIHNhdGlzZnkgdGhlc2UgcmVxdWlyZW1lbnRzLgoKICAgIGUpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbiwgcHJvdmlkZWQKICAgIHlvdSBpbmZvcm0gb3RoZXIgcGVlcnMgd2hlcmUgdGhlIG9iamVjdCBjb2RlIGFuZCBDb3JyZXNwb25kaW5nCiAgICBTb3VyY2Ugb2YgdGhlIHdvcmsgYXJlIGJlaW5nIG9mZmVyZWQgdG8gdGhlIGdlbmVyYWwgcHVibGljIGF0IG5vCiAgICBjaGFyZ2UgdW5kZXIgc3Vic2VjdGlvbiA2ZC4KCiAgQSBzZXBhcmFibGUgcG9ydGlvbiBvZiB0aGUgb2JqZWN0IGNvZGUsIHdob3NlIHNvdXJjZSBjb2RlIGlzIGV4Y2x1ZGVkCmZyb20gdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGFzIGEgU3lzdGVtIExpYnJhcnksIG5lZWQgbm90IGJlCmluY2x1ZGVkIGluIGNvbnZleWluZyB0aGUgb2JqZWN0IGNvZGUgd29yay4KCiAgQSAiVXNlciBQcm9kdWN0IiBpcyBlaXRoZXIgKDEpIGEgImNvbnN1bWVyIHByb2R1Y3QiLCB3aGljaCBtZWFucyBhbnkKdGFuZ2libGUgcGVyc29uYWwgcHJvcGVydHkgd2hpY2ggaXMgbm9ybWFsbHkgdXNlZCBmb3IgcGVyc29uYWwsIGZhbWlseSwKb3IgaG91c2Vob2xkIHB1cnBvc2VzLCBvciAoMikgYW55dGhpbmcgZGVzaWduZWQgb3Igc29sZCBmb3IgaW5jb3Jwb3JhdGlvbgppbnRvIGEgZHdlbGxpbmcuICBJbiBkZXRlcm1pbmluZyB3aGV0aGVyIGEgcHJvZHVjdCBpcyBhIGNvbnN1bWVyIHByb2R1Y3QsCmRvdWJ0ZnVsIGNhc2VzIHNoYWxsIGJlIHJlc29sdmVkIGluIGZhdm9yIG9mIGNvdmVyYWdlLiAgRm9yIGEgcGFydGljdWxhcgpwcm9kdWN0IHJlY2VpdmVkIGJ5IGEgcGFydGljdWxhciB1c2VyLCAibm9ybWFsbHkgdXNlZCIgcmVmZXJzIHRvIGEKdHlwaWNhbCBvciBjb21tb24gdXNlIG9mIHRoYXQgY2xhc3Mgb2YgcHJvZHVjdCwgcmVnYXJkbGVzcyBvZiB0aGUgc3RhdHVzCm9mIHRoZSBwYXJ0aWN1bGFyIHVzZXIgb3Igb2YgdGhlIHdheSBpbiB3aGljaCB0aGUgcGFydGljdWxhciB1c2VyCmFjdHVhbGx5IHVzZXMsIG9yIGV4cGVjdHMgb3IgaXMgZXhwZWN0ZWQgdG8gdXNlLCB0aGUgcHJvZHVjdC4gIEEgcHJvZHVjdAppcyBhIGNvbnN1bWVyIHByb2R1Y3QgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBwcm9kdWN0IGhhcyBzdWJzdGFudGlhbApjb21tZXJjaWFsLCBpbmR1c3RyaWFsIG9yIG5vbi1jb25zdW1lciB1c2VzLCB1bmxlc3Mgc3VjaCB1c2VzIHJlcHJlc2VudAp0aGUgb25seSBzaWduaWZpY2FudCBtb2RlIG9mIHVzZSBvZiB0aGUgcHJvZHVjdC4KCiAgIkluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiIgZm9yIGEgVXNlciBQcm9kdWN0IG1lYW5zIGFueSBtZXRob2RzLApwcm9jZWR1cmVzLCBhdXRob3JpemF0aW9uIGtleXMsIG9yIG90aGVyIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGluc3RhbGwKYW5kIGV4ZWN1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgYSBjb3ZlcmVkIHdvcmsgaW4gdGhhdCBVc2VyIFByb2R1Y3QgZnJvbQphIG1vZGlmaWVkIHZlcnNpb24gb2YgaXRzIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhlIGluZm9ybWF0aW9uIG11c3QKc3VmZmljZSB0byBlbnN1cmUgdGhhdCB0aGUgY29udGludWVkIGZ1bmN0aW9uaW5nIG9mIHRoZSBtb2RpZmllZCBvYmplY3QKY29kZSBpcyBpbiBubyBjYXNlIHByZXZlbnRlZCBvciBpbnRlcmZlcmVkIHdpdGggc29sZWx5IGJlY2F1c2UKbW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUuCgogIElmIHlvdSBjb252ZXkgYW4gb2JqZWN0IGNvZGUgd29yayB1bmRlciB0aGlzIHNlY3Rpb24gaW4sIG9yIHdpdGgsIG9yCnNwZWNpZmljYWxseSBmb3IgdXNlIGluLCBhIFVzZXIgUHJvZHVjdCwgYW5kIHRoZSBjb252ZXlpbmcgb2NjdXJzIGFzCnBhcnQgb2YgYSB0cmFuc2FjdGlvbiBpbiB3aGljaCB0aGUgcmlnaHQgb2YgcG9zc2Vzc2lvbiBhbmQgdXNlIG9mIHRoZQpVc2VyIFByb2R1Y3QgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHJlY2lwaWVudCBpbiBwZXJwZXR1aXR5IG9yIGZvciBhCmZpeGVkIHRlcm0gKHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSB0cmFuc2FjdGlvbiBpcyBjaGFyYWN0ZXJpemVkKSwgdGhlCkNvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkIHVuZGVyIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGFjY29tcGFuaWVkCmJ5IHRoZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24uICBCdXQgdGhpcyByZXF1aXJlbWVudCBkb2VzIG5vdCBhcHBseQppZiBuZWl0aGVyIHlvdSBub3IgYW55IHRoaXJkIHBhcnR5IHJldGFpbnMgdGhlIGFiaWxpdHkgdG8gaW5zdGFsbAptb2RpZmllZCBvYmplY3QgY29kZSBvbiB0aGUgVXNlciBQcm9kdWN0IChmb3IgZXhhbXBsZSwgdGhlIHdvcmsgaGFzCmJlZW4gaW5zdGFsbGVkIGluIFJPTSkuCgogIFRoZSByZXF1aXJlbWVudCB0byBwcm92aWRlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBkb2VzIG5vdCBpbmNsdWRlIGEKcmVxdWlyZW1lbnQgdG8gY29udGludWUgdG8gcHJvdmlkZSBzdXBwb3J0IHNlcnZpY2UsIHdhcnJhbnR5LCBvciB1cGRhdGVzCmZvciBhIHdvcmsgdGhhdCBoYXMgYmVlbiBtb2RpZmllZCBvciBpbnN0YWxsZWQgYnkgdGhlIHJlY2lwaWVudCwgb3IgZm9yCnRoZSBVc2VyIFByb2R1Y3QgaW4gd2hpY2ggaXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IgaW5zdGFsbGVkLiAgQWNjZXNzIHRvIGEKbmV0d29yayBtYXkgYmUgZGVuaWVkIHdoZW4gdGhlIG1vZGlmaWNhdGlvbiBpdHNlbGYgbWF0ZXJpYWxseSBhbmQKYWR2ZXJzZWx5IGFmZmVjdHMgdGhlIG9wZXJhdGlvbiBvZiB0aGUgbmV0d29yayBvciB2aW9sYXRlcyB0aGUgcnVsZXMgYW5kCnByb3RvY29scyBmb3IgY29tbXVuaWNhdGlvbiBhY3Jvc3MgdGhlIG5ldHdvcmsuCgogIENvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkLCBhbmQgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIHByb3ZpZGVkLAppbiBhY2NvcmQgd2l0aCB0aGlzIHNlY3Rpb24gbXVzdCBiZSBpbiBhIGZvcm1hdCB0aGF0IGlzIHB1YmxpY2x5CmRvY3VtZW50ZWQgKGFuZCB3aXRoIGFuIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluCnNvdXJjZSBjb2RlIGZvcm0pLCBhbmQgbXVzdCByZXF1aXJlIG5vIHNwZWNpYWwgcGFzc3dvcmQgb3Iga2V5IGZvcgp1bnBhY2tpbmcsIHJlYWRpbmcgb3IgY29weWluZy4KCiAgNy4gQWRkaXRpb25hbCBUZXJtcy4KCiAgIkFkZGl0aW9uYWwgcGVybWlzc2lvbnMiIGFyZSB0ZXJtcyB0aGF0IHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMKTGljZW5zZSBieSBtYWtpbmcgZXhjZXB0aW9ucyBmcm9tIG9uZSBvciBtb3JlIG9mIGl0cyBjb25kaXRpb25zLgpBZGRpdGlvbmFsIHBlcm1pc3Npb25zIHRoYXQgYXJlIGFwcGxpY2FibGUgdG8gdGhlIGVudGlyZSBQcm9ncmFtIHNoYWxsCmJlIHRyZWF0ZWQgYXMgdGhvdWdoIHRoZXkgd2VyZSBpbmNsdWRlZCBpbiB0aGlzIExpY2Vuc2UsIHRvIHRoZSBleHRlbnQKdGhhdCB0aGV5IGFyZSB2YWxpZCB1bmRlciBhcHBsaWNhYmxlIGxhdy4gIElmIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMKYXBwbHkgb25seSB0byBwYXJ0IG9mIHRoZSBQcm9ncmFtLCB0aGF0IHBhcnQgbWF5IGJlIHVzZWQgc2VwYXJhdGVseQp1bmRlciB0aG9zZSBwZXJtaXNzaW9ucywgYnV0IHRoZSBlbnRpcmUgUHJvZ3JhbSByZW1haW5zIGdvdmVybmVkIGJ5CnRoaXMgTGljZW5zZSB3aXRob3V0IHJlZ2FyZCB0byB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucy4KCiAgV2hlbiB5b3UgY29udmV5IGEgY29weSBvZiBhIGNvdmVyZWQgd29yaywgeW91IG1heSBhdCB5b3VyIG9wdGlvbgpyZW1vdmUgYW55IGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgZnJvbSB0aGF0IGNvcHksIG9yIGZyb20gYW55IHBhcnQgb2YKaXQuICAoQWRkaXRpb25hbCBwZXJtaXNzaW9ucyBtYXkgYmUgd3JpdHRlbiB0byByZXF1aXJlIHRoZWlyIG93bgpyZW1vdmFsIGluIGNlcnRhaW4gY2FzZXMgd2hlbiB5b3UgbW9kaWZ5IHRoZSB3b3JrLikgIFlvdSBtYXkgcGxhY2UKYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBvbiBtYXRlcmlhbCwgYWRkZWQgYnkgeW91IHRvIGEgY292ZXJlZCB3b3JrLApmb3Igd2hpY2ggeW91IGhhdmUgb3IgY2FuIGdpdmUgYXBwcm9wcmlhdGUgY29weXJpZ2h0IHBlcm1pc3Npb24uCgogIE5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgZm9yIG1hdGVyaWFsIHlvdQphZGQgdG8gYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgKGlmIGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mCnRoYXQgbWF0ZXJpYWwpIHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRlcm1zOgoKICAgIGEpIERpc2NsYWltaW5nIHdhcnJhbnR5IG9yIGxpbWl0aW5nIGxpYWJpbGl0eSBkaWZmZXJlbnRseSBmcm9tIHRoZQogICAgdGVybXMgb2Ygc2VjdGlvbnMgMTUgYW5kIDE2IG9mIHRoaXMgTGljZW5zZTsgb3IKCiAgICBiKSBSZXF1aXJpbmcgcHJlc2VydmF0aW9uIG9mIHNwZWNpZmllZCByZWFzb25hYmxlIGxlZ2FsIG5vdGljZXMgb3IKICAgIGF1dGhvciBhdHRyaWJ1dGlvbnMgaW4gdGhhdCBtYXRlcmlhbCBvciBpbiB0aGUgQXBwcm9wcmlhdGUgTGVnYWwKICAgIE5vdGljZXMgZGlzcGxheWVkIGJ5IHdvcmtzIGNvbnRhaW5pbmcgaXQ7IG9yCgogICAgYykgUHJvaGliaXRpbmcgbWlzcmVwcmVzZW50YXRpb24gb2YgdGhlIG9yaWdpbiBvZiB0aGF0IG1hdGVyaWFsLCBvcgogICAgcmVxdWlyaW5nIHRoYXQgbW9kaWZpZWQgdmVyc2lvbnMgb2Ygc3VjaCBtYXRlcmlhbCBiZSBtYXJrZWQgaW4KICAgIHJlYXNvbmFibGUgd2F5cyBhcyBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgdmVyc2lvbjsgb3IKCiAgICBkKSBMaW1pdGluZyB0aGUgdXNlIGZvciBwdWJsaWNpdHkgcHVycG9zZXMgb2YgbmFtZXMgb2YgbGljZW5zb3JzIG9yCiAgICBhdXRob3JzIG9mIHRoZSBtYXRlcmlhbDsgb3IKCiAgICBlKSBEZWNsaW5pbmcgdG8gZ3JhbnQgcmlnaHRzIHVuZGVyIHRyYWRlbWFyayBsYXcgZm9yIHVzZSBvZiBzb21lCiAgICB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgb3Igc2VydmljZSBtYXJrczsgb3IKCiAgICBmKSBSZXF1aXJpbmcgaW5kZW1uaWZpY2F0aW9uIG9mIGxpY2Vuc29ycyBhbmQgYXV0aG9ycyBvZiB0aGF0CiAgICBtYXRlcmlhbCBieSBhbnlvbmUgd2hvIGNvbnZleXMgdGhlIG1hdGVyaWFsIChvciBtb2RpZmllZCB2ZXJzaW9ucyBvZgogICAgaXQpIHdpdGggY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgb2YgbGlhYmlsaXR5IHRvIHRoZSByZWNpcGllbnQsIGZvcgogICAgYW55IGxpYWJpbGl0eSB0aGF0IHRoZXNlIGNvbnRyYWN0dWFsIGFzc3VtcHRpb25zIGRpcmVjdGx5IGltcG9zZSBvbgogICAgdGhvc2UgbGljZW5zb3JzIGFuZCBhdXRob3JzLgoKICBBbGwgb3RoZXIgbm9uLXBlcm1pc3NpdmUgYWRkaXRpb25hbCB0ZXJtcyBhcmUgY29uc2lkZXJlZCAiZnVydGhlcgpyZXN0cmljdGlvbnMiIHdpdGhpbiB0aGUgbWVhbmluZyBvZiBzZWN0aW9uIDEwLiAgSWYgdGhlIFByb2dyYW0gYXMgeW91CnJlY2VpdmVkIGl0LCBvciBhbnkgcGFydCBvZiBpdCwgY29udGFpbnMgYSBub3RpY2Ugc3RhdGluZyB0aGF0IGl0IGlzCmdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIGEgdGVybSB0aGF0IGlzIGEgZnVydGhlcgpyZXN0cmljdGlvbiwgeW91IG1heSByZW1vdmUgdGhhdCB0ZXJtLiAgSWYgYSBsaWNlbnNlIGRvY3VtZW50IGNvbnRhaW5zCmEgZnVydGhlciByZXN0cmljdGlvbiBidXQgcGVybWl0cyByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcgdW5kZXIgdGhpcwpMaWNlbnNlLCB5b3UgbWF5IGFkZCB0byBhIGNvdmVyZWQgd29yayBtYXRlcmlhbCBnb3Zlcm5lZCBieSB0aGUgdGVybXMKb2YgdGhhdCBsaWNlbnNlIGRvY3VtZW50LCBwcm92aWRlZCB0aGF0IHRoZSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGRvZXMKbm90IHN1cnZpdmUgc3VjaCByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcuCgogIElmIHlvdSBhZGQgdGVybXMgdG8gYSBjb3ZlcmVkIHdvcmsgaW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uLCB5b3UKbXVzdCBwbGFjZSwgaW4gdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcywgYSBzdGF0ZW1lbnQgb2YgdGhlCmFkZGl0aW9uYWwgdGVybXMgdGhhdCBhcHBseSB0byB0aG9zZSBmaWxlcywgb3IgYSBub3RpY2UgaW5kaWNhdGluZwp3aGVyZSB0byBmaW5kIHRoZSBhcHBsaWNhYmxlIHRlcm1zLgoKICBBZGRpdGlvbmFsIHRlcm1zLCBwZXJtaXNzaXZlIG9yIG5vbi1wZXJtaXNzaXZlLCBtYXkgYmUgc3RhdGVkIGluIHRoZQpmb3JtIG9mIGEgc2VwYXJhdGVseSB3cml0dGVuIGxpY2Vuc2UsIG9yIHN0YXRlZCBhcyBleGNlcHRpb25zOwp0aGUgYWJvdmUgcmVxdWlyZW1lbnRzIGFwcGx5IGVpdGhlciB3YXkuCgogIDguIFRlcm1pbmF0aW9uLgoKICBZb3UgbWF5IG5vdCBwcm9wYWdhdGUgb3IgbW9kaWZ5IGEgY292ZXJlZCB3b3JrIGV4Y2VwdCBhcyBleHByZXNzbHkKcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIHByb3BhZ2F0ZSBvcgptb2RpZnkgaXQgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIKdGhpcyBMaWNlbnNlIChpbmNsdWRpbmcgYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoZSB0aGlyZApwYXJhZ3JhcGggb2Ygc2VjdGlvbiAxMSkuCgogIEhvd2V2ZXIsIGlmIHlvdSBjZWFzZSBhbGwgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgdGhlbiB5b3VyCmxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIChhKQpwcm92aXNpb25hbGx5LCB1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxpY2l0bHkgYW5kCmZpbmFsbHkgdGVybWluYXRlcyB5b3VyIGxpY2Vuc2UsIGFuZCAoYikgcGVybWFuZW50bHksIGlmIHRoZSBjb3B5cmlnaHQKaG9sZGVyIGZhaWxzIHRvIG5vdGlmeSB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMKcHJpb3IgdG8gNjAgZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLgoKICBNb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMKcmVpbnN0YXRlZCBwZXJtYW5lbnRseSBpZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3RpZmllcyB5b3Ugb2YgdGhlCnZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMsIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgeW91IGhhdmUKcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbSB0aGF0CmNvcHlyaWdodCBob2xkZXIsIGFuZCB5b3UgY3VyZSB0aGUgdmlvbGF0aW9uIHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIKeW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuCgogIFRlcm1pbmF0aW9uIG9mIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgc2VjdGlvbiBkb2VzIG5vdCB0ZXJtaW5hdGUgdGhlCmxpY2Vuc2VzIG9mIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tIHlvdSB1bmRlcgp0aGlzIExpY2Vuc2UuICBJZiB5b3VyIHJpZ2h0cyBoYXZlIGJlZW4gdGVybWluYXRlZCBhbmQgbm90IHBlcm1hbmVudGx5CnJlaW5zdGF0ZWQsIHlvdSBkbyBub3QgcXVhbGlmeSB0byByZWNlaXZlIG5ldyBsaWNlbnNlcyBmb3IgdGhlIHNhbWUKbWF0ZXJpYWwgdW5kZXIgc2VjdGlvbiAxMC4KCiAgOS4gQWNjZXB0YW5jZSBOb3QgUmVxdWlyZWQgZm9yIEhhdmluZyBDb3BpZXMuCgogIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gcmVjZWl2ZSBvcgpydW4gYSBjb3B5IG9mIHRoZSBQcm9ncmFtLiAgQW5jaWxsYXJ5IHByb3BhZ2F0aW9uIG9mIGEgY292ZXJlZCB3b3JrCm9jY3VycmluZyBzb2xlbHkgYXMgYSBjb25zZXF1ZW5jZSBvZiB1c2luZyBwZWVyLXRvLXBlZXIgdHJhbnNtaXNzaW9uCnRvIHJlY2VpdmUgYSBjb3B5IGxpa2V3aXNlIGRvZXMgbm90IHJlcXVpcmUgYWNjZXB0YW5jZS4gIEhvd2V2ZXIsCm5vdGhpbmcgb3RoZXIgdGhhbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIHByb3BhZ2F0ZSBvcgptb2RpZnkgYW55IGNvdmVyZWQgd29yay4gIFRoZXNlIGFjdGlvbnMgaW5mcmluZ2UgY29weXJpZ2h0IGlmIHlvdSBkbwpub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIHByb3BhZ2F0aW5nIGEKY292ZXJlZCB3b3JrLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzby4KCiAgMTAuIEF1dG9tYXRpYyBMaWNlbnNpbmcgb2YgRG93bnN0cmVhbSBSZWNpcGllbnRzLgoKICBFYWNoIHRpbWUgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5CnJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvcnMsIHRvIHJ1biwgbW9kaWZ5IGFuZApwcm9wYWdhdGUgdGhhdCB3b3JrLCBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlCmZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHdpdGggdGhpcyBMaWNlbnNlLgoKICBBbiAiZW50aXR5IHRyYW5zYWN0aW9uIiBpcyBhIHRyYW5zYWN0aW9uIHRyYW5zZmVycmluZyBjb250cm9sIG9mIGFuCm9yZ2FuaXphdGlvbiwgb3Igc3Vic3RhbnRpYWxseSBhbGwgYXNzZXRzIG9mIG9uZSwgb3Igc3ViZGl2aWRpbmcgYW4Kb3JnYW5pemF0aW9uLCBvciBtZXJnaW5nIG9yZ2FuaXphdGlvbnMuICBJZiBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQKd29yayByZXN1bHRzIGZyb20gYW4gZW50aXR5IHRyYW5zYWN0aW9uLCBlYWNoIHBhcnR5IHRvIHRoYXQKdHJhbnNhY3Rpb24gd2hvIHJlY2VpdmVzIGEgY29weSBvZiB0aGUgd29yayBhbHNvIHJlY2VpdmVzIHdoYXRldmVyCmxpY2Vuc2VzIHRvIHRoZSB3b3JrIHRoZSBwYXJ0eSdzIHByZWRlY2Vzc29yIGluIGludGVyZXN0IGhhZCBvciBjb3VsZApnaXZlIHVuZGVyIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGgsIHBsdXMgYSByaWdodCB0byBwb3NzZXNzaW9uIG9mIHRoZQpDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBmcm9tIHRoZSBwcmVkZWNlc3NvciBpbiBpbnRlcmVzdCwgaWYKdGhlIHByZWRlY2Vzc29yIGhhcyBpdCBvciBjYW4gZ2V0IGl0IHdpdGggcmVhc29uYWJsZSBlZmZvcnRzLgoKICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSBleGVyY2lzZSBvZiB0aGUKcmlnaHRzIGdyYW50ZWQgb3IgYWZmaXJtZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgRm9yIGV4YW1wbGUsIHlvdSBtYXkKbm90IGltcG9zZSBhIGxpY2Vuc2UgZmVlLCByb3lhbHR5LCBvciBvdGhlciBjaGFyZ2UgZm9yIGV4ZXJjaXNlIG9mCnJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHlvdSBtYXkgbm90IGluaXRpYXRlIGxpdGlnYXRpb24KKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQKYW55IHBhdGVudCBjbGFpbSBpcyBpbmZyaW5nZWQgYnkgbWFraW5nLCB1c2luZywgc2VsbGluZywgb2ZmZXJpbmcgZm9yCnNhbGUsIG9yIGltcG9ydGluZyB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbiBvZiBpdC4KCiAgMTEuIFBhdGVudHMuCgogIEEgImNvbnRyaWJ1dG9yIiBpcyBhIGNvcHlyaWdodCBob2xkZXIgd2hvIGF1dGhvcml6ZXMgdXNlIHVuZGVyIHRoaXMKTGljZW5zZSBvZiB0aGUgUHJvZ3JhbSBvciBhIHdvcmsgb24gd2hpY2ggdGhlIFByb2dyYW0gaXMgYmFzZWQuICBUaGUKd29yayB0aHVzIGxpY2Vuc2VkIGlzIGNhbGxlZCB0aGUgY29udHJpYnV0b3IncyAiY29udHJpYnV0b3IgdmVyc2lvbiIuCgogIEEgY29udHJpYnV0b3IncyAiZXNzZW50aWFsIHBhdGVudCBjbGFpbXMiIGFyZSBhbGwgcGF0ZW50IGNsYWltcwpvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBjb250cmlidXRvciwgd2hldGhlciBhbHJlYWR5IGFjcXVpcmVkIG9yCmhlcmVhZnRlciBhY3F1aXJlZCwgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgYnkgc29tZSBtYW5uZXIsIHBlcm1pdHRlZApieSB0aGlzIExpY2Vuc2UsIG9mIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24sCmJ1dCBkbyBub3QgaW5jbHVkZSBjbGFpbXMgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgb25seSBhcyBhCmNvbnNlcXVlbmNlIG9mIGZ1cnRoZXIgbW9kaWZpY2F0aW9uIG9mIHRoZSBjb250cmlidXRvciB2ZXJzaW9uLiAgRm9yCnB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIGluY2x1ZGVzIHRoZSByaWdodCB0byBncmFudApwYXRlbnQgc3VibGljZW5zZXMgaW4gYSBtYW5uZXIgY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YKdGhpcyBMaWNlbnNlLgoKICBFYWNoIGNvbnRyaWJ1dG9yIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZQpwYXRlbnQgbGljZW5zZSB1bmRlciB0aGUgY29udHJpYnV0b3IncyBlc3NlbnRpYWwgcGF0ZW50IGNsYWltcywgdG8KbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0IGFuZCBvdGhlcndpc2UgcnVuLCBtb2RpZnkgYW5kCnByb3BhZ2F0ZSB0aGUgY29udGVudHMgb2YgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24uCgogIEluIHRoZSBmb2xsb3dpbmcgdGhyZWUgcGFyYWdyYXBocywgYSAicGF0ZW50IGxpY2Vuc2UiIGlzIGFueSBleHByZXNzCmFncmVlbWVudCBvciBjb21taXRtZW50LCBob3dldmVyIGRlbm9taW5hdGVkLCBub3QgdG8gZW5mb3JjZSBhIHBhdGVudAooc3VjaCBhcyBhbiBleHByZXNzIHBlcm1pc3Npb24gdG8gcHJhY3RpY2UgYSBwYXRlbnQgb3IgY292ZW5hbnQgbm90IHRvCnN1ZSBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCkuICBUbyAiZ3JhbnQiIHN1Y2ggYSBwYXRlbnQgbGljZW5zZSB0byBhCnBhcnR5IG1lYW5zIHRvIG1ha2Ugc3VjaCBhbiBhZ3JlZW1lbnQgb3IgY29tbWl0bWVudCBub3QgdG8gZW5mb3JjZSBhCnBhdGVudCBhZ2FpbnN0IHRoZSBwYXJ0eS4KCiAgSWYgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywga25vd2luZ2x5IHJlbHlpbmcgb24gYSBwYXRlbnQgbGljZW5zZSwKYW5kIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBpcyBub3QgYXZhaWxhYmxlIGZvciBhbnlvbmUKdG8gY29weSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHRocm91Z2ggYQpwdWJsaWNseSBhdmFpbGFibGUgbmV0d29yayBzZXJ2ZXIgb3Igb3RoZXIgcmVhZGlseSBhY2Nlc3NpYmxlIG1lYW5zLAp0aGVuIHlvdSBtdXN0IGVpdGhlciAoMSkgY2F1c2UgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIHRvIGJlIHNvCmF2YWlsYWJsZSwgb3IgKDIpIGFycmFuZ2UgdG8gZGVwcml2ZSB5b3Vyc2VsZiBvZiB0aGUgYmVuZWZpdCBvZiB0aGUKcGF0ZW50IGxpY2Vuc2UgZm9yIHRoaXMgcGFydGljdWxhciB3b3JrLCBvciAoMykgYXJyYW5nZSwgaW4gYSBtYW5uZXIKY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlLCB0byBleHRlbmQgdGhlIHBhdGVudApsaWNlbnNlIHRvIGRvd25zdHJlYW0gcmVjaXBpZW50cy4gICJLbm93aW5nbHkgcmVseWluZyIgbWVhbnMgeW91IGhhdmUKYWN0dWFsIGtub3dsZWRnZSB0aGF0LCBidXQgZm9yIHRoZSBwYXRlbnQgbGljZW5zZSwgeW91ciBjb252ZXlpbmcgdGhlCmNvdmVyZWQgd29yayBpbiBhIGNvdW50cnksIG9yIHlvdXIgcmVjaXBpZW50J3MgdXNlIG9mIHRoZSBjb3ZlcmVkIHdvcmsKaW4gYSBjb3VudHJ5LCB3b3VsZCBpbmZyaW5nZSBvbmUgb3IgbW9yZSBpZGVudGlmaWFibGUgcGF0ZW50cyBpbiB0aGF0CmNvdW50cnkgdGhhdCB5b3UgaGF2ZSByZWFzb24gdG8gYmVsaWV2ZSBhcmUgdmFsaWQuCgogIElmLCBwdXJzdWFudCB0byBvciBpbiBjb25uZWN0aW9uIHdpdGggYSBzaW5nbGUgdHJhbnNhY3Rpb24gb3IKYXJyYW5nZW1lbnQsIHlvdSBjb252ZXksIG9yIHByb3BhZ2F0ZSBieSBwcm9jdXJpbmcgY29udmV5YW5jZSBvZiwgYQpjb3ZlcmVkIHdvcmssIGFuZCBncmFudCBhIHBhdGVudCBsaWNlbnNlIHRvIHNvbWUgb2YgdGhlIHBhcnRpZXMKcmVjZWl2aW5nIHRoZSBjb3ZlcmVkIHdvcmsgYXV0aG9yaXppbmcgdGhlbSB0byB1c2UsIHByb3BhZ2F0ZSwgbW9kaWZ5Cm9yIGNvbnZleSBhIHNwZWNpZmljIGNvcHkgb2YgdGhlIGNvdmVyZWQgd29yaywgdGhlbiB0aGUgcGF0ZW50IGxpY2Vuc2UKeW91IGdyYW50IGlzIGF1dG9tYXRpY2FsbHkgZXh0ZW5kZWQgdG8gYWxsIHJlY2lwaWVudHMgb2YgdGhlIGNvdmVyZWQKd29yayBhbmQgd29ya3MgYmFzZWQgb24gaXQuCgogIEEgcGF0ZW50IGxpY2Vuc2UgaXMgImRpc2NyaW1pbmF0b3J5IiBpZiBpdCBkb2VzIG5vdCBpbmNsdWRlIHdpdGhpbgp0aGUgc2NvcGUgb2YgaXRzIGNvdmVyYWdlLCBwcm9oaWJpdHMgdGhlIGV4ZXJjaXNlIG9mLCBvciBpcwpjb25kaXRpb25lZCBvbiB0aGUgbm9uLWV4ZXJjaXNlIG9mIG9uZSBvciBtb3JlIG9mIHRoZSByaWdodHMgdGhhdCBhcmUKc3BlY2lmaWNhbGx5IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgWW91IG1heSBub3QgY29udmV5IGEgY292ZXJlZAp3b3JrIGlmIHlvdSBhcmUgYSBwYXJ0eSB0byBhbiBhcnJhbmdlbWVudCB3aXRoIGEgdGhpcmQgcGFydHkgdGhhdCBpcwppbiB0aGUgYnVzaW5lc3Mgb2YgZGlzdHJpYnV0aW5nIHNvZnR3YXJlLCB1bmRlciB3aGljaCB5b3UgbWFrZSBwYXltZW50CnRvIHRoZSB0aGlyZCBwYXJ0eSBiYXNlZCBvbiB0aGUgZXh0ZW50IG9mIHlvdXIgYWN0aXZpdHkgb2YgY29udmV5aW5nCnRoZSB3b3JrLCBhbmQgdW5kZXIgd2hpY2ggdGhlIHRoaXJkIHBhcnR5IGdyYW50cywgdG8gYW55IG9mIHRoZQpwYXJ0aWVzIHdobyB3b3VsZCByZWNlaXZlIHRoZSBjb3ZlcmVkIHdvcmsgZnJvbSB5b3UsIGEgZGlzY3JpbWluYXRvcnkKcGF0ZW50IGxpY2Vuc2UgKGEpIGluIGNvbm5lY3Rpb24gd2l0aCBjb3BpZXMgb2YgdGhlIGNvdmVyZWQgd29yawpjb252ZXllZCBieSB5b3UgKG9yIGNvcGllcyBtYWRlIGZyb20gdGhvc2UgY29waWVzKSwgb3IgKGIpIHByaW1hcmlseQpmb3IgYW5kIGluIGNvbm5lY3Rpb24gd2l0aCBzcGVjaWZpYyBwcm9kdWN0cyBvciBjb21waWxhdGlvbnMgdGhhdApjb250YWluIHRoZSBjb3ZlcmVkIHdvcmssIHVubGVzcyB5b3UgZW50ZXJlZCBpbnRvIHRoYXQgYXJyYW5nZW1lbnQsCm9yIHRoYXQgcGF0ZW50IGxpY2Vuc2Ugd2FzIGdyYW50ZWQsIHByaW9yIHRvIDI4IE1hcmNoIDIwMDcuCgogIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGNvbnN0cnVlZCBhcyBleGNsdWRpbmcgb3IgbGltaXRpbmcKYW55IGltcGxpZWQgbGljZW5zZSBvciBvdGhlciBkZWZlbnNlcyB0byBpbmZyaW5nZW1lbnQgdGhhdCBtYXkKb3RoZXJ3aXNlIGJlIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYXBwbGljYWJsZSBwYXRlbnQgbGF3LgoKICAxMi4gTm8gU3VycmVuZGVyIG9mIE90aGVycycgRnJlZWRvbS4KCiAgSWYgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgpvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CmV4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90IGNvbnZleSBhCmNvdmVyZWQgd29yayBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcwpMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91IG1heQpub3QgY29udmV5IGl0IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiB5b3UgYWdyZWUgdG8gdGVybXMgdGhhdCBvYmxpZ2F0ZSB5b3UKdG8gY29sbGVjdCBhIHJveWFsdHkgZm9yIGZ1cnRoZXIgY29udmV5aW5nIGZyb20gdGhvc2UgdG8gd2hvbSB5b3UgY29udmV5CnRoZSBQcm9ncmFtLCB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCB0aG9zZSB0ZXJtcyBhbmQgdGhpcwpMaWNlbnNlIHdvdWxkIGJlIHRvIHJlZnJhaW4gZW50aXJlbHkgZnJvbSBjb252ZXlpbmcgdGhlIFByb2dyYW0uCgogIDEzLiBVc2Ugd2l0aCB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgoKICBOb3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIHlvdSBoYXZlCnBlcm1pc3Npb24gdG8gbGluayBvciBjb21iaW5lIGFueSBjb3ZlcmVkIHdvcmsgd2l0aCBhIHdvcmsgbGljZW5zZWQKdW5kZXIgdmVyc2lvbiAzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW50byBhIHNpbmdsZQpjb21iaW5lZCB3b3JrLCBhbmQgdG8gY29udmV5IHRoZSByZXN1bHRpbmcgd29yay4gIFRoZSB0ZXJtcyBvZiB0aGlzCkxpY2Vuc2Ugd2lsbCBjb250aW51ZSB0byBhcHBseSB0byB0aGUgcGFydCB3aGljaCBpcyB0aGUgY292ZXJlZCB3b3JrLApidXQgdGhlIHNwZWNpYWwgcmVxdWlyZW1lbnRzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCnNlY3Rpb24gMTMsIGNvbmNlcm5pbmcgaW50ZXJhY3Rpb24gdGhyb3VnaCBhIG5ldHdvcmsgd2lsbCBhcHBseSB0byB0aGUKY29tYmluYXRpb24gYXMgc3VjaC4KCiAgMTQuIFJldmlzZWQgVmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlLgoKICBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZgp0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCmJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bwphZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KCiAgRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUKUHJvZ3JhbSBzcGVjaWZpZXMgdGhhdCBhIGNlcnRhaW4gbnVtYmVyZWQgdmVyc2lvbiBvZiB0aGUgR05VIEdlbmVyYWwKUHVibGljIExpY2Vuc2UgIm9yIGFueSBsYXRlciB2ZXJzaW9uIiBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUKb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgbnVtYmVyZWQKdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGUKR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkCmJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCgogIElmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGljaCBmdXR1cmUKdmVyc2lvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGNhbiBiZSB1c2VkLCB0aGF0IHByb3h5J3MKcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGEgdmVyc2lvbiBwZXJtYW5lbnRseSBhdXRob3JpemVzIHlvdQp0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUgUHJvZ3JhbS4KCiAgTGF0ZXIgbGljZW5zZSB2ZXJzaW9ucyBtYXkgZ2l2ZSB5b3UgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQKcGVybWlzc2lvbnMuICBIb3dldmVyLCBubyBhZGRpdGlvbmFsIG9ibGlnYXRpb25zIGFyZSBpbXBvc2VkIG9uIGFueQphdXRob3Igb3IgY29weXJpZ2h0IGhvbGRlciBhcyBhIHJlc3VsdCBvZiB5b3VyIGNob29zaW5nIHRvIGZvbGxvdyBhCmxhdGVyIHZlcnNpb24uCgogIDE1LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LgoKICBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZCkFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQKSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWQpPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgpQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTQpJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YKQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgoKICAxNi4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuCgogIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORwpXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1PRElGSUVTIEFORC9PUiBDT05WRVlTClRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWQpHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUKVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRgpEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRApQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwKRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgpTVUNIIERBTUFHRVMuCgogIDE3LiBJbnRlcnByZXRhdGlvbiBvZiBTZWN0aW9ucyAxNSBhbmQgMTYuCgogIElmIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGFuZCBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBwcm92aWRlZAphYm92ZSBjYW5ub3QgYmUgZ2l2ZW4gbG9jYWwgbGVnYWwgZWZmZWN0IGFjY29yZGluZyB0byB0aGVpciB0ZXJtcywKcmV2aWV3aW5nIGNvdXJ0cyBzaGFsbCBhcHBseSBsb2NhbCBsYXcgdGhhdCBtb3N0IGNsb3NlbHkgYXBwcm94aW1hdGVzCmFuIGFic29sdXRlIHdhaXZlciBvZiBhbGwgY2l2aWwgbGlhYmlsaXR5IGluIGNvbm5lY3Rpb24gd2l0aCB0aGUKUHJvZ3JhbSwgdW5sZXNzIGEgd2FycmFudHkgb3IgYXNzdW1wdGlvbiBvZiBsaWFiaWxpdHkgYWNjb21wYW5pZXMgYQpjb3B5IG9mIHRoZSBQcm9ncmFtIGluIHJldHVybiBmb3IgYSBmZWUuCgogICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKCiAgICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcwoKICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0CnBvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCgogIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0CnRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKc3RhdGUgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAp0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KCiAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgogICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KCiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCgogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCgogIElmIHRoZSBwcm9ncmFtIGRvZXMgdGVybWluYWwgaW50ZXJhY3Rpb24sIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQKbm90aWNlIGxpa2UgdGhpcyB3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgoKICAgIDxwcm9ncmFtPiAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KICAgIFRoaXMgcHJvZ3JhbSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCiAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CiAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCgpUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHlvdXIgcHJvZ3JhbSdzIGNvbW1hbmRzCm1pZ2h0IGJlIGRpZmZlcmVudDsgZm9yIGEgR1VJIGludGVyZmFjZSwgeW91IHdvdWxkIHVzZSBhbiAiYWJvdXQgYm94Ii4KCiAgWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHNjaG9vbCwKaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmIG5lY2Vzc2FyeS4KRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcywgYW5kIGhvdyB0byBhcHBseSBhbmQgZm9sbG93IHRoZSBHTlUgR1BMLCBzZWUKPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtCmludG8gcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdQptYXkgY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGgKdGhlIGxpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsClB1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLiAgQnV0IGZpcnN0LCBwbGVhc2UgcmVhZAo8aHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkvd2h5LW5vdC1sZ3BsLmh0bWw+Lgo=]]></data>
	</file>
	<file>
	  <filename>/function.admin_checkout_promotionstab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gYWxsb3cgY3JlYXRpbmcsIGludGVyZmFjaW5nIHdpdGgKIyAgYW5kIG1hbmFnaW5nIHByb21vdGlvbnMgb3Igc2FsZXMgaW4gdGhlIEUtY29tZW1yY2Ugc3VpdGUuCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQpuYW1lc3BhY2UgUHJvbW90aW9uczsKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiggISR0aGlzLT5DaGVja1Blcm1pc3Npb24oXFByb21vdGlvbnM6Ok1BSU5fUEVSTSkgKSBleGl0OwoKLy8KLy8gaW5pdGlhbGl6ZQovLwoKLy8KLy8gZ2V0IHRoZSBkYXRhCi8vCiRxdWVyeSA9ICdTRUxFQ1QgKiBGUk9NICcuUFJPTU9USU9OU19UQUJMRS4nIFdIRVJFIHR5cGUgPSA/IE9SREVSIEJZIGl0ZW1fb3JkZXIgQVNDJzsKJGRhdGEgPSAkZGItPkdldEFycmF5KCRxdWVyeSxhcnJheShwcm9tb3Rpb246OlRZUEVfQ0hFQ0tPVVQpKTsKaWYoIGlzX2FycmF5KCRkYXRhKSApIHsKICAgIGZvciggJGkgPSAwOyAkaSA8IGNvdW50KCRkYXRhKTsgJGkrKyApIHsKICAgICAgICAkcmVjID0mICRkYXRhWyRpXTsKICAgICAgICAkcmVjWydlZGl0X3VybCddID0gJHRoaXMtPkNyZWF0ZVVSTCgkaWQsJ2FkbWluX2FkZHByb21vJywkcmV0dXJuaWQsYXJyYXkoJ3Byb21vaWQnPT4kcmVjWydpZCddKSk7CiAgICAgICAgJHJlY1snZWRpdF9saW5rJ10gPSAkdGhpcy0+Q3JlYXRlSW1hZ2VMaW5rKCRpZCwnYWRtaW5fYWRkcHJvbW8nLCRyZXR1cm5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPkxhbmcoJ2VkaXQnKSwnaWNvbnMvc3lzdGVtL2VkaXQuZ2lmJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkoJ3Byb21vaWQnPT4kcmVjWydpZCddKSk7CiAgICAgICAgJHJlY1snZGVsZXRlX3VybCddID0gJHRoaXMtPkNyZWF0ZVVSTCgkaWQsJ2FkbWluX2RlbHByb21vJywkcmV0dXJuaWQsYXJyYXkoJ3Byb21vaWQnPT4kcmVjWydpZCddKSk7CiAgICAgICAgJHJlY1snZGVsZXRlX2xpbmsnXSA9ICR0aGlzLT5DcmVhdGVJbWFnZUxpbmsoJGlkLCdhZG1pbl9kZWxwcm9tbycsJHJldHVybmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5MYW5nKCdkZWxldGUnKSwnaWNvbnMvc3lzdGVtL2RlbGV0ZS5naWYnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCdwcm9tb2lkJz0+JHJlY1snaWQnXSksJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPkxhbmcoJ3JlYWxseV9kZWxldGVfcHJvbW90aW9uJykpOwogICAgICAgICRyZWNbJ3N0YXJ0X2RhdGVfdXQnXSA9IFxjZ2VfdXRpbHM6OnVuaXhfdGltZSgkcmVjWydzdGFydF9kYXRlJ10pOwogICAgICAgICRyZWNbJ2VuZF9kYXRlX3V0J10gPSBcY2dlX3V0aWxzOjp1bml4X3RpbWUoJHJlY1snZW5kX2RhdGUnXSk7CiAgICB9Cn0KCi8vCi8vIGdpdmUgZXZlcnl0aGluZyB0byBzbWFydHkKLy8KJHNtYXJ0eS0+YXNzaWduKCdhZGRsaW5rJywKICAgICAgICAgICAgICAgICR0aGlzLT5DcmVhdGVJbWFnZUxpbmsoJGlkLCdhZG1pbl9hZGRwcm9tbycsJHJldHVybmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+TGFuZygncHJvbXB0X2FkZHByb21vJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpY29ucy9zeXN0ZW0vbmV3b2JqZWN0LmdpZicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCd0eXBlJz0+cHJvbW90aW9uOjpUWVBFX0NIRUNLT1VUKSwnJywnJyxmYWxzZSkpOwppZiggaXNfYXJyYXkoJGRhdGEpICkgJHNtYXJ0eS0+YXNzaWduKCdwcm9tb3Rpb25zJywkZGF0YSk7CgovLwovLyBkaXNwbGF5IHRoZSB0ZW1wYWx0ZQovLwplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2FkbWluX2NoZWNrb3V0X3Byb21vdGlvbnN0YWIudHBsJyk7CgojCiMgRU9GCiMK]]></data>
	</file>
	<file>
	  <filename>/function.admin_couponformtab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gYWxsb3cgY3JlYXRpbmcsIGludGVyZmFjaW5nIHdpdGgKIyAgYW5kIG1hbmFnaW5nIHByb21vdGlvbnMgb3Igc2FsZXMgaW4gdGhlIEUtY29tZW1yY2Ugc3VpdGUuCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQpuYW1lc3BhY2UgUHJvbW90aW9uczsKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwoKZWNobyAkdGhpcy0+U2hvd1RlbXBsYXRlTGlzdCgkaWQsJHJldHVybmlkLCdjb3Vwb25mb3JtXycsCgkJCSAgICAgXFByb21vdGlvbnM6Ok5FV0NPVVBPTkZPUk1fVEVNUExBVEUsCgkJCSAgICAgJ2NvdXBvbmZvcm0nLAoJCQkgICAgIFxQcm9tb3Rpb25zOjpERkxUQ09VUE9ORk9STV9URU1QTEFURSwKCQkJICAgICAkdGhpcy0+TGFuZygnY291cG9uZm9ybXRlbXBsYXRlX2FkZGVkaXQnKSk7CgojCiMgRU9GCiMK]]></data>
	</file>
	<file>
	  <filename>/function.admin_dflt_templates_tab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gYWxsb3cgY3JlYXRpbmcsIGludGVyZmFjaW5nIHdpdGgKIyAgYW5kIG1hbmFnaW5nIHByb21vdGlvbnMgb3Igc2FsZXMgaW4gdGhlIEUtY29tZW1yY2Ugc3VpdGUuCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CgokaW5wdXRfY291cG9uZm9ybXRlbXBsYXRlID0gJHRoaXMtPkdldFByZWZlcmVuY2UoUHJvbW90aW9uczo6TkVXQ09VUE9ORk9STV9URU1QTEFURSk7Cgokc21hcnR5LT5hc3NpZ24oJ2luZm9fZGZsdF90ZW1wbGF0ZScsJHRoaXMtPkxhbmcoJ2RlZmF1bHRfdGVtcGxhdGVfbm90aWNlJykpOwoKJHNtYXJ0eS0+YXNzaWduKCdmb3Jtc3RhcnQnLCR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCdhZG1pbl9zZXRkZmx0dGVtcGxhdGVzJywkcmV0dXJuaWQpKTsKJHNtYXJ0eS0+YXNzaWduKCdmb3JtZW5kJywkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKCiRzbWFydHktPmFzc2lnbignbGVnZW5kX2NvdXBvbmZvcm10ZW1wbGF0ZScsJHRoaXMtPkxhbmcoJ3RpdGxlX2NvdXBvbmZvcm1fZGZsdHRlbXBsYXRlJykpOwokc21hcnR5LT5hc3NpZ24oJ3Byb21wdF9jb3Vwb25mb3JtdGVtcGxhdGUnLCR0aGlzLT5MYW5nKCdwcm9tcHRfdGVtcGxhdGUnKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfY291cG9uZm9ybXRlbXBsYXRlJywJJHRoaXMtPkNyZWF0ZVRleHRBcmVhKGZhbHNlLCRpZCwkaW5wdXRfY291cG9uZm9ybXRlbXBsYXRlLCdpbnB1dF9jb3Vwb25mb3JtdGVtcGxhdGUnKSk7CiRzbWFydHktPmFzc2lnbignc3VibWl0X2NvdXBvbmZvcm10ZW1wbGF0ZScsJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnc3VibWl0X2NvdXBvbmZvcm10ZW1wbGF0ZScsICR0aGlzLT5MYW5nKCdzdWJtaXQnKSkpOwokc21hcnR5LT5hc3NpZ24oJ3Jlc2V0X2NvdXBvbmZvcm10ZW1wbGF0ZScsCSR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsJ3Jlc2V0X2NvdXBvbmZvcm10ZW1wbGF0ZScsICR0aGlzLT5MYW5nKCdyZXNldHRvZmFjdG9yeScpKSk7CmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRtaW5fZGZsdF90ZW1wbGF0ZXNfdGFiLnRwbCcpOwoKIwojIEVPRgojCg==]]></data>
	</file>
	<file>
	  <filename>/function.admin_instant_promotionstab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gYWxsb3cgY3JlYXRpbmcsIGludGVyZmFjaW5nIHdpdGgKIyAgYW5kIG1hbmFnaW5nIHByb21vdGlvbnMgb3Igc2FsZXMgaW4gdGhlIEUtY29tZW1yY2Ugc3VpdGUuCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQpuYW1lc3BhY2UgUHJvbW90aW9uczsKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiggISR0aGlzLT5DaGVja1Blcm1pc3Npb24oXFByb21vdGlvbnM6Ok1BSU5fUEVSTSkgKSBleGl0OwoKLy8KLy8gaW5pdGlhbGl6ZQovLwoKLy8KLy8gZ2V0IHRoZSBkYXRhCi8vCiRxdWVyeSA9ICdTRUxFQ1QgKiBGUk9NICcuUFJPTU9USU9OU19UQUJMRS4nIFdIRVJFIFRZUEUgPSA/IE9SREVSIEJZIGl0ZW1fb3JkZXIgQVNDJzsKJGRhdGEgPSAkZGItPkdldEFycmF5KCRxdWVyeSxhcnJheShwcm9tb3Rpb246OlRZUEVfSU5TVEFOVCkpOwppZiggaXNfYXJyYXkoJGRhdGEpICkgewogICAgZm9yKCAkaSA9IDA7ICRpIDwgY291bnQoJGRhdGEpOyAkaSsrICkgewogICAgICAgICRyZWMgPSYgJGRhdGFbJGldOwogICAgICAgICRyZWNbJ2VkaXRfdXJsJ10gPSAkdGhpcy0+Q3JlYXRlVVJMKCRpZCwnYWRtaW5fYWRkcHJvbW8nLCRyZXR1cm5pZCxhcnJheSgncHJvbW9pZCc9PiRyZWNbJ2lkJ10pKTsKICAgICAgICAkcmVjWydlZGl0X2xpbmsnXSA9ICR0aGlzLT5DcmVhdGVJbWFnZUxpbmsoJGlkLCdhZG1pbl9hZGRwcm9tbycsJHJldHVybmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+TGFuZygnZWRpdCcpLCdpY29ucy9zeXN0ZW0vZWRpdC5naWYnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSgncHJvbW9pZCc9PiRyZWNbJ2lkJ10pKTsKICAgICAgICAkcmVjWydkZWxldGVfdXJsJ10gPSAkdGhpcy0+Q3JlYXRlVVJMKCRpZCwnYWRtaW5fZGVscHJvbW8nLCRyZXR1cm5pZCxhcnJheSgncHJvbW9pZCc9PiRyZWNbJ2lkJ10pKTsKICAgICAgICAkcmVjWydkZWxldGVfbGluayddID0gJHRoaXMtPkNyZWF0ZUltYWdlTGluaygkaWQsJ2FkbWluX2RlbHByb21vJywkcmV0dXJuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPkxhbmcoJ2RlbGV0ZScpLCdpY29ucy9zeXN0ZW0vZGVsZXRlLmdpZicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkoJ3Byb21vaWQnPT4kcmVjWydpZCddKSwnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+TGFuZygncmVhbGx5X2RlbGV0ZV9wcm9tb3Rpb24nKSk7CiAgICAgICAgJHJlY1snc3RhcnRfZGF0ZV91dCddID0gXGNnZV91dGlsczo6dW5peF90aW1lKCRyZWNbJ3N0YXJ0X2RhdGUnXSk7CiAgICAgICAgJHJlY1snZW5kX2RhdGVfdXQnXSA9IFxjZ2VfdXRpbHM6OnVuaXhfdGltZSgkcmVjWydlbmRfZGF0ZSddKTsKICAgIH0KfQoKLy8KLy8gZ2l2ZSBldmVyeXRoaW5nIHRvIHNtYXJ0eQovLwokc21hcnR5LT5hc3NpZ24oJ2FkZGxpbmsnLAogICAgICAgICAgICAgICAgJHRoaXMtPkNyZWF0ZUltYWdlTGluaygkaWQsJ2FkbWluX2FkZHByb21vJywkcmV0dXJuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5MYW5nKCdwcm9tcHRfYWRkcHJvbW8nKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ljb25zL3N5c3RlbS9uZXdvYmplY3QuZ2lmJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkoJ3R5cGUnPT5wcm9tb3Rpb246OlRZUEVfSU5TVEFOVCksJycsJycsZmFsc2UpKTsKaWYoIGlzX2FycmF5KCRkYXRhKSApICRzbWFydHktPmFzc2lnbigncHJvbW90aW9ucycsJGRhdGEpOwoKLy8KLy8gZGlzcGxheSB0aGUgdGVtcGFsdGUKLy8KZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhZG1pbl9pbnN0YW50X3Byb21vdGlvbnN0YWIudHBsJyk7CgojCiMgRU9GCiMK]]></data>
	</file>
	<file>
	  <filename>/function.admin_settingstab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gYWxsb3cgY3JlYXRpbmcsIGludGVyZmFjaW5nIHdpdGgKIyAgYW5kIG1hbmFnaW5nIHByb21vdGlvbnMgb3Igc2FsZXMgaW4gdGhlIEUtY29tZW1yY2Ugc3VpdGUuCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQpuYW1lc3BhY2UgUHJvbW90aW9uczsKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiggISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJykgKSBleGl0OwoKLy8KLy8gaW5pdGlhbGl6ZQovLwpyZXF1aXJlX29uY2UoZGlybmFtZShfX0ZJTEVfXykuJy9saWIvY2xhc3MucHJvbW90aW9uLnBocCcpOwoKLy8KLy8gc2V0dXAKLy8KJHByb2R1Y3RzX21vZHVsZSA9ICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgnUHJvZHVjdHMnKTsKCi8vCi8vIGdhdGhlciBkYXRhCi8vCgovLwovLyBnaXZlIGV2ZXJ5dGhpbmcgdG8gc21hcnR5Ci8vCiRzbWFydHktPmFzc2lnbignY3VycmVuY3lfc3ltYm9sJywkcHJvZHVjdHNfbW9kdWxlLT5HZXRQcmVmZXJlbmNlKCdwcm9kdWN0X2N1cnJlbmN5c3ltYm9sJywnJCcpKTsKJHBlcmlvZHMgPSBhcnJheSgpOwpmb3IoICRpID0gMDsgJGkgPCAzNjsgJGkrKyApIHsKICAgICRwZXJpb2RzWyRpKzFdID0gJGkrMTsKICB9CiRzbWFydHktPmFzc2lnbigncHJvbW90aW9uX3BlcmlvZHMnLCRwZXJpb2RzKTsKJHByb21vdHlwZXMgPSBhcnJheSgpOwokcHJvbW90eXBlc1tQUk9NT1RJT05TX09GRkVSX1BFUkNFTlRdID0gJHRoaXMtPkxhbmcoUFJPTU9USU9OU19PRkZFUl9QRVJDRU5UKTsKJHByb21vdHlwZXNbUFJPTU9USU9OU19PRkZFUl9ESVNDT1VOVF0gPSAkdGhpcy0+TGFuZyhQUk9NT1RJT05TX09GRkVSX0RJU0NPVU5UKTsKJHByb21vdHlwZXNbUFJPTU9USU9OU19PRkZFUl9QUk9EVUNUXSA9ICR0aGlzLT5MYW5nKFBST01PVElPTlNfT0ZGRVJfUFJPRFVDVCk7CiRzbWFydHktPmFzc2lnbignb2ZmZXJfdHlwZXMnLCRwcm9tb3R5cGVzKTsKJHNtYXJ0eS0+YXNzaWduKCdkZmx0X3Byb21vdGlvbl9wZXJpb2QnLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdkZmx0X3Byb21vdGlvbl9wZXJpb2QnLDEpKTsKJHNtYXJ0eS0+YXNzaWduKCdkZmx0X29mZmVyX3R5cGUnLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdkZmx0X29mZmVyX3R5cGUnLFBST01PVElPTlNfT0ZGRVJfUEVSQ0VOVCkpOwokc21hcnR5LT5hc3NpZ24oJ2RmbHRfb2ZmZXJfZGF0YScsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2RmbHRfb2ZmZXJfZGF0YScsJy4xJykpOwokc21hcnR5LT5hc3NpZ24oJ2ltYWdlX2RpcicsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2ltYWdlX2RpcicsJycpKTsKJHNtYXJ0eS0+YXNzaWduKCdlcnJvcl9pbnZhbGlkX2NvZGUnLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdlcnJvcl9pbnZhbGlkX2NvZGUnKSk7CiRzbWFydHktPmFzc2lnbignZXJyb3JfZW1wdHlfY29kZScsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Vycm9yX2VtcHR5X2NvZGUnKSk7CiRzbWFydHktPmFzc2lnbignbXNnX3ZhbGlkX2NvZGUnLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtc2dfdmFsaWRfY29kZScpKTsKJHNtYXJ0eS0+YXNzaWduKCdmb3Jtc3RhcnQnLCR0aGlzLT5DR0NyZWF0ZUZvcm1TdGFydCgkaWQsJ2FkbWluX3NhdmVzZXR0aW5ncycpKTsKJHNtYXJ0eS0+YXNzaWduKCdmb3JtZW5kJywkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKCi8vCi8vIHByb2Nlc3MgdGVtcGxhdGUKLy8KZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhZG1pbl9zZXR0aW5nc3RhYi50cGwnKTsKCiMKIyBFT0YKIwo=]]></data>
	</file>
	<file>
	  <filename>/help.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPldoYXQgZG9lcyB0aGlzIGRvPzwvaDM+CjxwPlRoaXMgbW9kdWxlIHdvcmtzIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFByb2R1Y3RzIGFuZCBPcmRlcnMgbW9kdWxlIHRvIGFsbG93IGNyZWF0aW5nIGFuZCBtYW5hZ2luZyB0aW1lIGxpbWl0ZWQgcHJvbW90aW9ucyBmb3IgdGhlIHByb2R1Y3RzIG9uIHlvdXIgZS1jb21tZXJjZSB3ZWJzaXRlLjwvcD4KCjxoMz5GZWF0dXJlczo8L2gzPgo8dWw+CjxsaT48dT5BbGwgcHJvbW90aW9ucyBhcmUgdGltZSBsaW1pdGVkLjwvdT48YnIvPjxici8+PC9saT4KPGxpPjx1PkEgcHJvbW90aW9uIGNhbiBoYXZlIG9uZSBvciBtb3JlIGNvbmRpdGlvbnMgdG8gaW5kaWNhdGUgZWxpZ2liaWxpdHkuPC91PgogIDxwPklmIGEgcHJvbW90aW9uIGlzIGRlZmluZWQgd2l0aCB0d28gb3IgbW9yZSBjb25kaXRpb25zLCBhbGwgb2YgdGhvc2UgY29uZGl0aW9ucyBtdXN0IGJlIG1ldCBpbiBvcmRlciBmb3IgdGhlIGN1c3RvbWVyIHRvIGJlIGVsaWdpYmxlIGZvciB0aGUgcHJvbW90aW9uLjwvcD4KICA8cD5BIG51bWJlciBvZiBjb25kaXRpb24gdHlwZXMgZXhpc3QuLi4gSG93ZXZlciBzb21lIG9mIHRoZW0gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggb3RoZXJzLiAgaS5lOiAgWW91IGNhbm5vdCBoYXZlIHR3byBkaWZmZXJlbnQgdHlwZSBvZiBwcm9kdWN0IGNvbmRpdGlvbnMuPC9wPgogIDx1bD4KPGxpPjx1PlJlcXVpcmUgbWVtYmVyc2hpcCBpbiBhbiBGRVUgR3JvdXA6PC91PgogIDxwPllvdSBjYW4gZW50ZXIgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBGRVUgZ3JvdXAgbmFtZXMuICBUaGUgbG9nZ2VkIGluIHdlYnNpdGUgdmlzaXRvciBtdXN0IGJlIGEgbWVtYmVyIG9mIG9uZSBvZiB0aGVzZSBncm91cHMgdG8gYmUgZWxpZ2libGUgZm9yIHRoZSBwcm9tb3Rpb24uPC9wPjwvbGk+CiAgPGxpPjx1PlJlcXVpcmUgYSBtaW5pbXVtIHB1cmNoYXNlIGFtb3VudDo8L3U+CiAgPHA+SW4gb3JkZXIgZm9yIGEgY3VzdG9tZXIgdG8gbWVldCB0aGlzIGNvbmRpdGlvbiwgdGhlIHByZS10YXgvcHJlLXNoaXBwaW5nIHRvdGFsIGZvciB0aGVpciBvcmRlciBtdXN0IG1lZXQgdGhlIHNwZWNpZmllZCBtaW5pbXVtIHZhbHVlLjwvcD48L2xpPgogIDxsaT48dT5SZXF1aXJlIHRoZSBwdXJjaGFzZSBvZiBhIHNwZWNpZmljIHByb2R1Y3Q6PC91PgogIDxwPkluIG9yZGVyIGZvciBhIGN1c3RvbWVyIHRvIG1lZXQgdGhpcyBjb25kaXRpb24sIGhpcyBjYXJ0IG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgcHJvZHVjdCBtYXRjaGluZyB0aGUgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgcHJvZHVjdCBpZHMgZW50ZXJlZC48L3A+PC9saT4KICA8bGk+PHU+UmVxdWlyZSBwdXJjaGFzZSBvZiBhdGxlYXN0IG9uZSBwcm9kdWN0IGluIGEgY2F0ZWdvcnk6PC91PgogIDxwPkluIG9yZGVyIGZvciBhIGN1c3RvbWVyIHRvIG1lZXQgdGhpcyBjb25kaXRpb24sIGhpcyBjYXJ0IG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgcHJvZHVjdCB0aGF0IGlzIHdpdGhpbiBhdCBsZWFzdCBvbmUgb2YgdGhlIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGNhdGVnb3J5IG5hbWVzIChmcm9tIHRoZSBwcm9kdWN0cyBtb2R1bGUpIHNwZWNpZmllZC48L3A+PC9saT4KICA8bGk+PHU+UmVxdWlyZSBwdXJjaGFzZSBvZiBhdGxlYXN0IG9uZSBwcm9kdWN0IGluIGEgaGllcmFyY2h5OjwvdT4KICA8cD5JbiBvcmRlciBmb3IgYSBjdXN0b21lciB0byBtZWV0IHRoaXMgY29uZGl0aW9uLCBoaXMgY2FydCBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIHByb2R1Y3QgdGhhdCBpcyB3aXRoaW4gdGhlIHNwZWNpZmllZCBwcm9kdWN0cyBtb2R1bGUgaGllcmFyY2h5LjwvcD4KICA8cD5IaWVyYXJjaHkgbmFtZXMgY2FuIGJlIHNwZWNpZmllZCBpbiB0aGUgZm9ybSBvZiAmcXVvdDtQYXJlbnQuUGFyZW50LkNoaWxkJnF1b3Q7IGkuZTogJnF1b3Q7Q2xvdGhpbmcuVGVudHMmcXVvdDsuICBIaWVyYXJjaHkgbmFtZXMgYXJlIG5vdCBjYXNlIHNlbnNpdGl2ZS4gIFdpbGRjYXJkcyBjYW4gYmUgc3BlY2ZpZmllZCBieSB1c2luZyB0aGUgKiBjaGFyYWN0ZXIuICBpLmU6ICZxdW90O0Nsb3RoaW5nKiZxdW90Oy48L3A+PC9saT4KICA8bGk+PHU+UmVxdWlyZSBhIENvdXBvbiBDb2RlOjwvdT4KICA8cD5JbiBvcmRlciBmb3IgYSBjdXN0b21lciB0byBtZWV0IHRoaXMgY29uZGl0aW9uLCBoZSBtdXN0IGhhdmUgc3VwcGxpZWQgdGhlIGNvdXBvbiBjb2RlIHRoYXQgbWF0Y2hlcyB0aGlzIGNvbmRpdGlvbi48L3A+CiAgPHA+SW4gb3JkZXIgdG8gYWxsb3cgY3VzdG9tZXJzIHRvIGVudGVyIGNvdXBvbiBjb2RlcywgeW91IG5lZWQgdG8gYWRkIGEgdGFnIGludG8geW91ciBwYWdlIHRlbXBsYXRlIG9yIHBhZ2UgY29udGVudCBsaWtlIHtQcm9tb3Rpb25zfS4gIFRoaXMgd2lsbCBkaXNwbGF5IGEgZm9ybSB0aGF0IGFsbG93cyB5b3VyIHVzZXJzIHRvIGVudGVyIGNvdXBvbiBjb2Rlcy4gIENvdXBvbiBjb2RlcyBhcmUgcmVtZW1iZXJlZCB1bnRpbCB0aGUgdXNlciBjbG9zZXMgdGhlIGJyb3dzZXIuPC9wPjwvbGk+CiAgPGxpPjx1PlJlcXVpcmUgYSBtaW5pbXVtIG9yZGVyIHdlaWdodDo8L3U+CiAgPHA+SW4gb3JkZXIgZm9yIGEgY3VzdG9tZXIgdG8gbWVldCB0aGlzIGNvbmRpdGlvbiwgdGhlIHN1bSB0b3RhbCBvZiBhbGwgb2YgdGhlIHdlaWdodCB2YWx1ZXMgZm9yIHRoZSBpdGVtcyBpbiBoaXMgY2FydCBtdXN0IG1lZXQgb3IgZXhjZWVkIHRoZSB2YWx1ZSBzcGVjaWZpZWQuPC9wPjwvbGk+CiAgPC91bD4KPC9saT4KCjxsaT48dT5FYWNoIHByb21vdGlvbiBjYW4gaGF2ZSBhIGRpZmZlcmVudCAmcXVvdDtvZmZlciZxdW90OzwvdT4KPHA+QSBudW1iZXIgb2YgZGlmZmVyZW50IG9mZmVycyB0eXBlcyBhcmUgYXZhaWxhYmxlOjwvcD4KICA8dWw+CjxsaT48dT5QZXJjZW50YWdlIG9mZiBvcmRlciB0b3RhbDo8L3U+CjxwPlRoaXMgb2ZmZXIgdHlwZSBhbGxvd3MgeW91IHRvIHNwZWNpZnkgYSBmbG9hdGluZyBwb2ludCB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEgdG8gaW5kaWNhdGUgYSBwZXJjZW50YWdlIG9mZi4gIGkuZTogMC4xIGluZGljYXRlcyAxMCUgb2ZmLiAgIER1cmluZyB0aGUgY2hlY2tvdXQgcHJvY2VzcywgYW55IG5vbiB0YXgsIG9yIG5vbiBzaGlwcGluZyBpdGVtIGluIHRoZSBvcmRlciB3aWxsIGJlIHJlZHVjZWQgaW4gcHJpY2UgYnkgdGhlIHNwZWNpZmllZCBhbW91bnQuPC9wPjwvbGk+CjxsaT48dT5SZWR1Y2Ugb3JkZXIgdG90YWwgYnkgYSBzcGVjaWZpZWQgYW1vdW50OjwvdT4KPHA+VGhpcyBvZmZlciB0eXBlIGFsbG93cyB5b3UgdG8gcmVkdWNlIHRoZSBhbW91bnQgb2YgdGhlIG9yZGVyIGJ5IGEgY2VydGFpbiBkb2xsYXIgZmlndXJlLiAgVGhpcyBkb2xsYXIgZmlndXJlIHdpbGwgYmUgYWRkZWQgYXMgYSBkaXNjb3VudCBpdGVtIGludG8gdGhlIG9yZGVyIGxpbmUgaXRlbXMgYW5kIHdpbGwgYXBwZWFyIG9uIHRoZSBpbnZvaWNlLjwvcD48L2xpPgo8bGk+PHU+UmVjZWl2ZSBhIEZyZWUgUHJvZHVjdDo8L3U+CjxwPlRoaXMgb2ZmZXIgdHlwZSBhbGxvd3MgeW91IHRvIHNwZWNpZnkgYSBwcm9kdWN0IGlkIHRvIGF1dG9tYXRpY2FsbHkgaW5jbHVkZSBpbiB0aGUgb3JkZXIgYXQgbm8gY29zdC4gIFRoaXMgcHJvZHVjdCB3aWxsIGJlIGFkZGVkIGFzIGEgcHJvZHVjdCBpdGVtIGludG8gdGhlIG9yZGVyIGxpbmUgaXRlbXMsIGJ1dCB3aWxsIGFwcGVhciBhdCBubyBjb3N0LjwvcD48L2xpPgo8bGk+PHU+RGlzY291bnQgdGhlIGFwcGxpY2FibGUgcHJvZHVjdHMgYnkgYSBwZXJjZW50YWdlOjwvdT4KPHA+VGhpcyBvZmZlciB0eXBlIG9ubHkgd29ya3MgaWYgYXQgbGVhc3Qgb25lIHByb2R1Y3QgY29uZGl0aW9uIGlzIHNwZWNpZmllZC4gIElmIGEgcHJvZHVjdCBjb25kaXRpb24gaXMgc3BlY2lyaWVkLCBhbmQgbWF0Y2hlcywgdGhpcyBvZmZlciB0eXBlIHdpbGwgZGlzY291bnQgdGhlIG1hdGNoaW5nIHByb2R1Y3RzIGZyb20gdGhlIGN1c3RvbWVyIG9yZGVyIGJ5IHRoZSBzcGVjaWZpZWQgdmFsdWUuPC9wPi4KICA8L3VsPgo8L2xpPgo8bGk+PHU+QWxsb3dzIHdlYnNpdGUgdmlzaXRvcnMgdG8gZW50ZXIgb25lIG9yIG1vcmUgY291cG9uIGNvZGVzPC91Pjxici8+PGJyLz48L2xpPgo8bGk+PHU+RGlzY291bnRzIGFyZSBjYWxjdWxhdGVkIGFuZCBhcHBsaWVkIHRvIHRoZSBvcmRlciBkdXJpbmcgdGhlIGNoZWNrb3V0IHByb2Nlc3MuPC91Pjxici8+PGJyLz48L2xpPgo8bGk+PHU+SWYgYSB3ZWIgY3VzdG9tZXIgaXMgZWxpZ2libGUgZm9yIG11bHRpcGxlIHByb21vdGlvbnMsIHRoZSBvbmUgd2l0aCB0aGUgZ3JlYXRlc3QgdmFsdWUgaXMgYXBwbGllZC48L3U+PC9saT4KPC91bD4KPGJyLz4KCjxoMz5Ib3cgRG8gSSBVc2UgSXQ6PC9oMz4KPG9sPgogIDxsaT4xLiBJbnN0YWxsIGFuZCBjb25maWd1cmUgdGhlIG1vZHVsZTwvbGk+CiAgPGxpPjIuIENyZWF0ZSBhdCBsZWFzdCBvbmUgcHJvbW90aW9uPC9saT4KICA8bGk+My4gU3BlY2lmeSB0aGlzIG1vZHVsZSBhcyB0aGUgJnF1b3Q7UHJvbW90aW9ucyZxdW90OyBtb2R1bGUgd2l0aGluIHRoZSBPcmRlcnMgUHJlZmVyZW5jZXMuPC9saT4KICA8bGk+NC4gPGVtPihvcHRpb25hbCk8L2VtPiBBZGQge1Byb21vdGlvbnN9IHRvIGEgcGFnZSB0ZW1wbGF0ZSBvciBwYWdlIGNvbnRlbnQuPC9lbT48L2xpPgo8L29sPgoKPGgzPkV4YW1wbGU6PC9oMz4KPHA+SW4gdGhpcyBleGFtcGxlIHdlIHdpbGwgY3JlYXRlIGEgcHJvbW90aW9uIGxpa2UgJnF1b3Q7MTAlIG9mZiBhbGwgb3JkZXJzIG92ZXIgJDEwMCwgd2l0aCBjb3Vwb24gY29kZSZxdW90Ozo8L3A+Cjx1bD4KICA8bGk+MS4gPHU+Q3JlYXRlIGEgbmV3IHByb21vdGlvbjwvdT4KICA8cD5OYXZpZ2F0ZSB0byB0aGUgcHJvbW90aW9ucyBtb2R1bGUgYWRtaW4gcGFuZWwsIGFuZCBjbGljayBvbiAmcXVvdDtBZGQgYSBOZXcgUHJvbW90aW9uJnF1b3Q7LiAgWW91IHdpbGwgYmUgcHJlc2VudGVkIHdpdGggdGhlIHByb21vdGlvbnMgZm9ybS48L3A+PC9saT4KICA8bGk+Mi4gPHU+U3BlY2lmeSBhIHByb21vdGlvbiBuYW1lPC91PgogIDxwPkZvciB0aGlzIGV4YW1wbGUgd2Ugd2lsbCB1c2UgdGhlIG5hbWUgJnF1b3Q7U2ltcGxlIFNhbGUmcXVvdDs8L3A+PC9saT4KICA8bGk+My4gPHU+QWRkIGEgY291cG9uIGNvbmRpdGlvbjwvdT4KICA8cD5Gcm9tIHRoZSAmcXVvdDtUeXBlIG9mIENvbmRpdGlvbiZxdW90OyBkcm9wZG93biBzZWxlY3QgJnF1b3Q7UmVxdWlyZSBhIENvdXBvbiBDb2RlJnF1b3Q7LiAgRW50ZXIgJnF1b3Q7c2ltcGxlc2FsZSZxdW90OyBpbnRvIHRoZSBpbnB1dCBmaWVsZCBiZWxvdyBhbmQgY2xpY2sgQWRkLjwvcD48L2xpPgogIDxsaT40LiA8dT5BZGQgYW4gb3JkZXIgcHJpY2UgY29uZGl0aW9uPC91PgogIDxwPkZyb20gdGhlICZxdW90O1R5cGUgb2YgQ29uZGl0aW9uJnF1b3Q7IGRyb3Bkb3duIHNlbGVjdCAmcXVvdDtSZXF1aXJlIGEgTWluaW11bSBQdXJjaGFzZSBBbW91bnQmcXVvdDsgZnJvbSB0aGUgZHJvcGRvd24sIGFuZCBlbnRlciAxMDAgaW50byB0aGUgaW5wdXQgZmllbGQgYmVsb3cuICBDbGljayBBZGQuPC9wPjwvbGk+CiAgPGxpPjUuIDx1PlNwZWNpZnkgdGhlIG9mZmVyIHR5cGUsIGFuZCBhbW91bnQ8L3U+CiAgPHA+U2VsZWN0IHRoZSBvZmZlciB0eXBlICZxdW90O1BlcmNlbnRhZ2Ugb2ZmIG9yZGVyIHRvdGFsJnF1b3Q7IGFuZCBlbnRlciAwLjEgaW50byB0aGUgdGV4dCBmaWVsZCBiZWxvdyB0byBpbmRpY2F0ZSAxMCUmcXVvdDs8L3A+PC9saT4KICA8bGk+Ni4gPHU+Q2xpY2sgc3VibWl0PC91PjwvbGk+CjwvdWw+Cgo8aDM+U21hcnR5IFBsdWdpbnM8L2gzPgo8cD5UaGlzIG1vZHVsZSBhbHNvIHByb3ZpZGVzIGEgc21hcnR5IHBsdWdpbiB0byBhaWQgaW4gcmV0cmlldmluZyBhbmQgZGlzcGxheWluZyBkaXNjb3VudHMgZm9yIGEgc2luZ2xlIHByb2R1Y3QuPC9wPgo8dWw+CiAgPGxpPjxzdHJvbmc+e3Byb21vX2dldF9wcm9kX2Rpc2NvdW50IFtmZXVfdWlkPXZhbF0gcHJvZHVjdF9pZD12YWwgW2Fzc2lnbj12YXJdfTwvc3Ryb25nPgogIDxwPklmIHN1Y2Nlc3NmdWwsIHRoaXMgcGx1Z2luIHJldHVybnMgYSBoYXNoIGNvbnRhaW5pbmcgZGlzY291bnQgaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgcHJvZHVjdC4gIFRoZSBncmVhdGVzdCBwb3NzaWJsZSBkaXNjb3VudCBpcyBjYWxjdWxhdGVkLCBjb25zaWRlcmluZyBhbGwgYWN0aXZlIHByb21vdGlvbnMsIHVzZXIgaWQsIGVudGVyZWQgY291cG9uIGNvZGVzLCBhbmQgb3RoZXIgbWF0Y2hpbmcgY29uZGl0aW9ucy48L3A+CiAgPHA+UGFyYW1ldGVyczo8L3A+CiAgPHVsPgogIDxsaT5mZXVfdWlkIChvcHRpb25hbCkgLSBUaGUgRnJvbnRFbmRVc2VycyB1c2VyaWQgdG8gdGVzdCB3aXRoLiAgSWYgdGhpcyBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgY3VycmVudGx5IGxvZ2dlZCBpbiB1c2VyIGlkIHdpbGwgYmUgdXNlZC48L2xpPgogIDxsaT5wcm9kdWN0X2lkIChyZXF1aXJlZCkgLSBUaGUgSUQgb2YgdGhlIHByb2R1Y3QgdG8gdGVzdCB3aXRoLjwvbGk+CiAgPGxpPmFzc2lnbiAob3B0aW9uYWwpIC0gT3B0aW9uYWxseSBhc3NpZ24gdGhlIG91dHB1dCB0byB0aGUgc3BlY2lmaWVkIHNtYXJ0eSB2YXJpYWJsZS48L2xpPgogIDwvdWw+CiAgPC9saT4KPC91bD4KCjxoMz5DYXV0aW9uczo8L2gzPgo8cD4xLiBQcm9tb3Rpb25zIGFyZSBjYWxjdWxhdGVkIG9uIHRoZSBvcmRlciBpbiBzZXF1ZW5jZS4gIE11bHRpcGxlIHByb21vdGlvbnMgbWF5IG1hdGNoIHRoZSBpdGVtcyBvZiBhIHNpbmdsZSBvcmRlciwgdGhpcyBtYXkgcmVzdWx0IGluIGEgc2luZ2xlIG9yZGVyIGhhdmluZyBhIHplcm8gPGVtIHN0eWxlPSJjb2xvcjogcmVkOyI+bmVnYXRpdmUgdmFsdWU8L2VtPi4gIFRoZSBvcmRlcnMgbW9kdWxlIG1heSBkbyBzb21lIGJhc2ljIGNoZWNrcyB0byBoZWxwIHdpdGggb3JkZXIgaW50ZWdyaXR5LCBidXQgZG8gbm90IGNvdW50IG9uIGl0LiAgWW91IGFyZSBlbmNvdXJhZ2VkIHRvIFRFU1QgeW91ciBwcm9tb3Rpb25zIGFuZCB0byBhbHdheXMgbW9uaXRvciB0aGVtIGJlZm9yZSByb2xsaW5nIHRoZW0gbGl2ZS48L3A+CjxwPjIuIEluc3RhbnQgcHJvbW90aW9ucyByZWx5aW5nIG9uIGNvdXBvbiBjb2RlcyBhcmUgbm90IHJlY29tbWVuZGVkLiAgVGhpcyBpcyBiZWNhdXNlIHRoZSBjb250ZW50cyBvZiB0aGUgY2FydCAob3IgbXVsdGlwbGUgY2FydHMpIGFyZSBub3QgYW5hbHl6ZWQgYWZ0ZXIgYSB1c2VyIGVudGVycyBhIGNvdXBvbiBjb2RlLCBvbmx5IHdoZW4gYWRkaW5nIG9yIHJlbW92aW5nIGNhcnQgaXRlbXMuPC9wPgoKPGgzPlN1cHBvcnQ8L2gzPgo8cD5UaGUgbW9kdWxlIGF1dGhvciBpcyBpbiBubyB3YXkgb2JsaWdhdGVkIHRvIHByaXZpZGUgc3VwcG9ydCBmb3IgdGhpcyBjb2RlIGluIGFueSBmYXNoaW9uLiAgSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlc291cmNlcyBhdmFpbGFibGUgdG8gaGVscCB5b3Ugd2l0aCBpdDo8L3A+Cjx1bD4KPGxpPkEgYnVnIHRyYWNraW5nIGFuZCBmZWF0dXJlIHJlcXVlc3Qgc3lzdGVtIGhhcyBiZWVuIGNyZWF0ZWQgZm9yIHRoaXMgbW9kdWxlIDxhIGhyZWY9Imh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvcHJvbW90aW9ucyI+aGVyZTwvYT4uICBQbGVhc2UgYmUgdmVyYm9zZSBhbmQgZGVzY3JpcHRpdmUgd2hlbiBzdWJtaXR0aW5nIGJ1ZyByZXBvcnRzIGFuZCBmZWF0dXJlIHJlcXVlc3RzLCBhbmQgZm9yIGJ1ZyByZXBvcnRzIGVuc3VyZSB0aGF0IHlvdSBoYXZlIHByb3ZpZGVkIHN1ZmZpY2llbnQgaW5mb3JtYXRpb24gdG8gcmVsaWFibHkgcmVwcm9kdWNlIHRoZSBpc3N1ZS48L2xpPgo8bGk+QWRkaXRpb25hbCBkaXNjdXNzaW9uIG9mIHRoaXMgbW9kdWxlIG1heSBhbHNvIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0uY21zbWFkZXNpbXBsZS5vcmciPkNNUyBNYWRlIFNpbXBsZSBGb3J1bXM8L2E+LiAgV2hlbiBkZXNjcmliaW5nIGFuIGlzc3VlIHBsZWFzZSBtYWtlIGFuIGVmZm9ydCB0byBwcml2aWRlIGFsbCByZWxhdmFudCBpbmZvcm1hdGlvbiwgYSB0aG9yb3VnaCBkZXNjcmlwdGlvbiBvZiB5b3VyIGlzc3VlLCBhbmQgc3RlcHMgdG8gcmVwcm9kdWNlIGl0IG9yIHlvdXIgZGlzY3Vzc2lvbiBtYXkgYmUgaWdub3JlZC48L2xpPgo8bGk+VGhlIGF1dGhvciwgY2FsZ3V5MTAwMCwgY2FuIG9mdGVuIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSJpcmM6Ly9pcmMuZnJlZW5vZGUubmV0LyNjbXMiPkNNUyBJUkMgQ2hhbm5lbDwvYT4uPC9saT4KPGxpPkxhc3RseSwgeW91IG1heSBoYXZlIHNvbWUgc3VjY2VzcyBlbWFpbGluZyB0aGUgYXV0aG9yIGRpcmVjdGx5LiAgSG93ZXZlciwgcGxlYXNlIHVzZSB0aGlzIGFzIGEgbGFzdCByZXNvcnQsIGFuZCBlbnN1cmUgdGhhdCB5b3UgaGF2ZSBmb2xsb3dlZCBhbGwgYXBwbGljYWJsZSBpbnN0cnVjdGlvbnMgb24gdGhlIGZvcmdlLCBpbiB0aGUgZm9ydW1zLCBldGMuPC9saT4KPC91bD4KCjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPgo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMDgsIFJvYmVydCBDYW1wYmVsbCA8YSBocmVmPSJtYWlsdG86Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZyI+Jmx0O2NhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcmZ3Q7PC9hPi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPgo8cD5UaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQppdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQp0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgooYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLjwvcD4KPHA+SG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkCmFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQppbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCk1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbgpzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLjwvcD4KPHA+VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCmJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKT3IgcmVhZCBpdCA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiPm9ubGluZTwvYT48L3A+Cg==]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiNBCiRsYW5nWydhZGQnXSA9ICdBZGQnOwoKCiNCCgoKI0MKJGxhbmdbJ2NhbmNlbCddID0gJ0NhbmNlbCc7CiRsYW5nWydjbGVhcl9jb3Vwb25zJ10gPSAnQ2xlYXIgQ291cG9ucyc7CiRsYW5nWydjb3Vwb25zX2NsZWFyZWQnXSA9ICdXZSBoYXZlIHJlc2V0IGFsbCBvZiB5b3VyIGNvdXBvbnMnOwokbGFuZ1snY291cG9uZm9ybXRlbXBsYXRlX2FkZGVkaXQnXSA9ICdBZGQgb3IgRWRpdCBhIENvdXBvbiBGb3JtIFRlbXBsYXRlJzsKCgojRAokbGFuZ1snZGVsZXRlJ10gPSAnRGVsZXRlJzsKJGxhbmdbJ2RlZmF1bHRfdGVtcGxhdGVfbm90aWNlJ10gPSA8PDxFT1QKPHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBUaGUgY29udGVudHMgb2YgdGhlc2UgdGV4dCBhcmVhcyBhcmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGRlZmF1bHQgY29udGVudCBvZiB0ZW1wbGF0ZXMgd2hlbiB5b3UgY2xpY2sgJnF1b3Q7QWRkIFRlbXBsYXRlJnF1b3Q7IGluIHRoZSBhcHByb3ByaWF0ZSB0ZW1wbGF0ZSB0YWIuICBFZGl0aW5nIG9uZSBvZiB0aGVzZSB0ZXh0IGFyZWFzIHdpbGwgaGF2ZSBubyBpbW1lZGlhdGUgZWZmZWN0IG9uIHlvdXIgd2Vic2l0ZS4KRU9UOwoKCiNFCiRsYW5nWydlZGl0J10gPSAnRWRpdCc7CiRsYW5nWydlbnRlcmVkX2NvdXBvbnMnXSA9ICdDb3Vwb25zIHlvdSBoYXZlIGVudGVyZWQ6JzsKJGxhbmdbJ2Vycm9yX2FscmVhZHlfcHJvZCddID0gJ0EgcHJvZHVjdCBjb25kaXRpb24gYWxyZWFkeSBleGlzdHMgaW4gdGhlIGNvbmRpdGlvbiBsaXN0JzsKJGxhbmdbJ2Vycm9yX2NvdXBvbl9leGlzdHMnXSA9ICdBIHByb21vdGlvbiB1c2luZyB0aGF0IGNvdXBvbiBzdHJpbmcgYWxyZWFkeSBleGlzdHMnOwokbGFuZ1snZXJyb3JfZHVwbGljYXRlX2NvbmRpdGlvbiddID0gJ0EgZHVwbGljYXRlIGNvbmRpdGlvbiBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgY29uZGl0aW9uIGxpc3QnOwokbGFuZ1snZXJyb3JfZHVwbGljYXRlX3R5cGUnXSA9ICdBIGR1cGxpY2F0ZSBwcm9kdWN0IGNvbmRpdGlvbiBhbHJlYWR5IGV4aXN0cyc7CiRsYW5nWydlcnJvcl9lbXB0eV9jb2RlJ10gPSAnUGxlYXNlIGVudGVyIGEgdmFsaWQgdmFsdWUnOwokbGFuZ1snZXJyb3JfaW52YWxpZF9idWxrcHVyY2hhc2UnXSA9ICdUaGUgYnVsayBwdXJjaGFzZSBkYXRhIHNwZWNpZmllZCBpcyBpbnZhbGlkJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRfY29kZSddID0gJ1Byb21vdGlvbiBDb2RlIG5vdCByZWNvZ25pc2VkJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRfY29uZGl0aW9uX3R5cGUnXSA9ICdBIGNvbmRpdGlvbiBzcGVjaWZpZWQgaXMgaW52YWxpZCBmb3IgdGhpcyBwcm9tb3Rpb24gdHlwZSc7CiRsYW5nWydlcnJvcl9pbnZhbGlkX2ZldV9ncm91cCddID0gJ0ludmFsaWQgRkVVIEdyb3VwIE5hbWUgU3BlY2lmaWVkJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRfb3JkZXJfYW1vdW50J10gPSAnVGhlIG9yZGVyIGFtb3VudCBzcGVjaWZpZWQgaXMgaW52YWxpZCc7CiRsYW5nWydlcnJvcl9pbnZhbGlkX29mZmVyX3R5cGUnXSA9ICdUaGUgb2ZmZXIgc3BlY2lmaWVkIGlzIGludmFsaWQgZm9yIHRoaXMgdHlwZSBvZiBvcmRlcic7CiRsYW5nWydlcnJvcl9pbnZhbGlkX3Byb2R1Y3RfY2F0ZWdvcnknXSA9ICdBdCBsZWFzdCBvbmUgaW52YWxpZCBwcm9kdWN0IGNhdGVnb3J5JzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRfcHJvZHVjdCddID0gJ0ludmFsaWQgcHJvZHVjdCBpZCBzcGVjaWZpZWQnOwokbGFuZ1snZXJyb3JfaW52YWxpZF92YWx1ZSddID0gJ0ludmFsaWQgVmFsdWUgU3BlY2lmaWVkJzsKJGxhbmdbJ2Vycm9yX21pc3NpbmdfcGFyYW0nXSA9ICdBIHJlcXVpcmVkIGlucHV0IHBhcmFtZXRlciBpcyBtaXNzaW5nJzsKJGxhbmdbJ2Vycm9yX21vZHVsZV9ub3RfZm91bmQnXSA9ICdBIFJlcXVpcmVkIE1vZHVsZSAoJXMpIENvdWxkIG5vdCBiZSBmb3VuZCc7CiRsYW5nWydlcnJvcl9uYW1lX2V4aXN0cyddID0gJ0EgcHJvbW90aW9uIGJ5IHRoYXQgbmFtZSBhbHJlYWR5IGV4aXN0cyc7CiRsYW5nWydlcnJvcl9ub29mZmVyX2RhdGEnXSA9ICdUaGVyZSBpcyBubyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIG9mZmVyIHR5cGUnOwokbGFuZ1snZXJyb3JfcHJvbW90aW9uX25hbWUnXSA9ICdFYWNoIHByb21vdGlvbiBtdXN0IGhhdmUgYSBuYW1lJzsKJGxhbmdbJ2Vycm9yX3NhdmVfcHJvbW90aW9uJ10gPSAnQW4gZXJyb3Igb2NjdXJyZWQgdHJ5aW5nIHRvIHNhdmUgdGhpcyBwcm9tb3Rpb24nOwokbGFuZ1snZXJyb3Jfc3BlY2lmeV92YWx1ZSddID0gJ1BsZWFzZSBzcGVjaWZ5IGEgdmFsdWUnOwoKI0YKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ1Byb21vdGlvbiBNYW5hZ2VyJzsKCiNHCgoKI0gKCiNJCiRsYW5nWydpbmZvX2NoZWNrb3V0X3Byb21vdGlvbnMnXSA9ICdDaGVja291dCBwcm9tb3Rpb25zIGFyZSBjYWxjdWxhdGVkIHdoZW4gdGhlIG9yZGVyIGlzIGNoZWNrZWQgb3V0LiAgT25seSB0aGUgZmlyc3QgbWF0Y2hpbmcgcHJvbW90aW9uIHdpbGwgYmUgdXNlZC4gIE5vIGFscmVhZHkgZGlzY291bnRlZCBjYXJ0IGl0ZW1zIHdpbGwgYmUgbWF0Y2hlZC4nOwokbGFuZ1snaW5mb19jb25kaXRpb25zJ10gPSAnU3BlY2lmeSBvbmUgb3IgbW9yZSBzYWxlcyBjb25kaXRpb25zIGZvciB0aGlzIHByb21vdGlvbic7CiRsYW5nWydpbmZvX2NvbmRpdGlvbl9kYXRhJ10gPSAnUHJvdmlkZSB0aGUgYXBwcm9wcmlhdGUgZGF0YSBmb3IgdGhpcyBjb25kaXRpb24nOwokbGFuZ1snaW5mb19leHRyYXMnXSA9ICdUaGlzIGFyZWEgY29udGFpbnMgb3B0aW9uYWwgYWRkaXRpb25hbCBhdHRyaWJ1dGVzIGZvciBlYWNoIHByb21vdGlvbiBmb3IgdXNlIHdoZW4gZGlzcGxheWluZyBwcm9tb3Rpb24gYmFubmVycyBvciBwcm9tb3Rpb24gaW5mb3JtYXRpb24uJzsKJGxhbmdbJ2luZm9faW5zdGFudF9wcm9tb3Rpb25zJ10gPSAnSW5zdGFudCBwcm9tb3Rpb25zIGFyZSBjYWxjdWxhdGVkIHdoZW4gdGhlIGl0ZW0gaXMgYWRkZWQgdG8gdGhlIGNhcnQuICBBdHRlbXB0cyBhcmUgbWFkZSB0byBkaXNwbGF5IHBvdGVudGlhbCBkaXNjb3VudHMgYmVmb3JlIGNoZWNrb3V0LiAgVGhlIGZpcnN0IHByb21vdGlvbiB0aGF0IG1hdGNoZXMgdGhlIHNlbGVjdGVkIGNhcnQgaXRlbSB3aWxsIGJlIHVzZWQgaW4gY2FsY3VsYXRpbmcgZGlzY291bnRzLic7CiRsYW5nWydpbmZvX2ltYWdlX2RpciddID0gJ1NwZWNpZnkgYSBkaXJlY3RvcnkgbmFtZSByZWxhdGl2ZSB0byB0aGUgdXBsb2FkcyBkaXJlY3RvcnkgaW4gd2hpY2ggdG8gc2VhcmNoIGZvciBpbWFnZXMgdG8gYXR0YWNoIHRvIG9mZmVycyc7CiRsYW5nWydpbmZvX3Byb21vX25hbWUnXSA9ICdUaGlzIG5hbWUgaXMgdXNlZCBmb3IgaW52b2ljZXMgYW5kIHNhbGVzIG9yZGVycyB0byBkZXNjcmliZSB0aGUgZGlzY291bnQgYmVpbmcgYXBwbGllZCc7CiRsYW5nWydpbmZvX3Byb21vX3R5cGUnXSA9ICdTZWxlY3QgdGhlIGFwcHJvcHJpYXRlIHR5cGUgZm9yIHRoaXMgcHJvbW90aW9uLiAgTm90ZSB0aGF0IG9mZmVycyB0aGF0IGVmZmVjdCB0aGUgb3JkZXIgdG90YWwgd2lsbCBoYXZlIG5vIGVmZmVjdCBpbiAmcXVvdDtpbnN0YW50JnF1b3Q7IHR5cGUgcHJvbW90aW9ucy4nOwokbGFuZ1snaW5mb2RhdGFfUFJPTU9USU9OU19DT05EX0ZFVSddID0gJ0EgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgRkVVIGdyb3VwIG5hbWVzIGlzIHBlcm1pdHRlZCc7CiRsYW5nWydpbmZvZGF0YV9QUk9NT1RJT05TX0NPTkRfU1VCVE9UQUwnXSA9ICdFbnRlciBhIGZsb2F0aW5nIHBvaW50IHZhbHVlIHVzaW5nIGEgLiBmb3IgYSBkZWNpbWFsIHNlcGFyYXRvci4gIGkuZTogIDEwMC4wMCc7CiRsYW5nWydpbmZvZGF0YV9QUk9NT1RJT05TX0NPTkRfV0VJR0hUJ10gPSAnRW50ZXIgYSBmbG9hdGluZyBwb2ludCB2YWx1ZSB1c2luZyBhIC4gZm9yIGEgZGVjaW1hbCBzZXBhcmF0b3IuICBpLmU6ICAxMDAuMDAnOwokbGFuZ1snaW5mb2RhdGFfUFJPTU9USU9OU19DT05EX0NPVVBPTiddID0gJ0VudGVyIGEgdGV4dCBzdHJpbmcgb2Ygbm8gbW9yZSB0aGFuIDEwIGNoYXJhY3RlcnMnOwokbGFuZ1snaW5mb2RhdGFfUFJPTU9USU9OU19DT05EX1BST0RJRCddID0gJ0VudGVyIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgcHJvZHVjdCBpZHMnOwokbGFuZ1snaW5mb2RhdGFfUFJPTU9USU9OU19DT05EX1BST0RTS1UnXSA9ICdFbnRlciBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHByb2R1Y3QgU0tVXCdzJzsKJGxhbmdbJ2luZm9kYXRhX1BST01PVElPTlNfQ09ORF9QUk9EQ0FUJ10gPSAnRW50ZXIgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBwcm9kdWN0IGNhdGVnb3J5IG5hbWVzJzsKJGxhbmdbJ2luZm9kYXRhX1BST01PVElPTlNfQ09ORF9QUk9ESElFUiddID0gJ0VudGVyIGEgc2luZ2xlIHByb2R1Y3QgaGllcmFyY2h5IG5hbWUgaW4gdGhlIGZvcm1hdCAmcXVvdDtncmFuZHBhcmVudC5wYXJlbnQuY2hpbGQmcXVvdDsnOwokbGFuZ1snaW5mb2RhdGFfUFJPTU9USU9OU19DT05EX0JVTEtQVVJDSEFTRSddID0gJ0VudGVyIGEgbWludW11bSBxdWFudGl0eSBhbmQgYSBza3UnOwoKI0oKCgojSwoKCiNMCiRsYW5nWydsYmxfYWRkX3Byb21vJ10gPSAnQWRkIFByb21vdGlvbic7CiRsYW5nWydsYmxfZWRpdF9wcm9tbyddID0gJ0VkaXQgUHJvbW90aW9uJzsKJGxhbmdbJ2xibF9jaGVja291dF9wcm9tb3Rpb25zJ10gPSAnQ2hlY2tvdXQgUHJvbW90aW9ucyc7CiRsYW5nWydsYmxfaW5zdGFudF9wcm9tb3Rpb25zJ10gPSAnSW5zdGFudCBQcm9tb3Rpb25zJzsKJGxhbmdbJ2xibF9wcm9tb3Rpb25zJ10gPSAnUHJvbW90aW9ucyc7CiRsYW5nWydsYmxfc2V0dGluZ3MnXSA9ICdTZXR0aW5ncyc7CiRsYW5nWydsYmxfY291cG9uZm9ybV90ZW1wbGF0ZXMnXSA9ICdDb3Vwb24gRm9ybSBUZW1wbGF0ZXMnOwokbGFuZ1snbGJsX2RlZmF1bHRfdGVtcGxhdGVzJ10gPSAnRGVmYXVsdCBUZW1wbGF0ZXMnOwokbGFuZ1snbGJsX29ubHlvbmUnXSA9ICdBbGxvdyBvbmx5IG9uZSAmcXVvdDtmcmVlJnF1b3Q7IGl0ZW0nOwokbGFuZ1snbGJsX3Byb21vX21lc3NhZ2VzJ10gPSAnUHJvbW90aW9uIE1lc3NhZ2VzJzsKCiNNCiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ0NyZWF0ZSwgbWFuYWdlLCBhbmQgaW50ZXJhY3Qgd2l0aCBzYWxlcyBhbmQgcHJvbW90aW9ucyBmb3IgeW91ciBlLWNvbW1lcmNlIHNpdGUnOwokbGFuZ1snbXNnX3ByZWZzdXBkYXRlZCddID0gJ1ByZWZlcmVuY2VzIFVwZGF0ZWQnOwokbGFuZ1snbXNnX3Byb21vZGVsZXRlZCddID0gJ1Byb21vdGlvbiBEZWxldGVkJzsKJGxhbmdbJ21zZ19zZXRhc3Byb21vJ10gPSAnUHJvbW90aW9uIG1vZHVsZSBzZXQnOwokbGFuZ1snbXNnX3ZhbGlkX2NvZGUnXSA9ICdZb3VyIHZhbGlkIHByb21vdGlvbiBjb2RlIHdhcyByZWNvZ25pc2VkISc7CgojTgokbGFuZ1snbm9uZSddID0gJ05vbmUnOwoKI08KCgojUAokbGFuZ1sncGFyYW1faW5saW5lJ10gPSAnU3BlY2lmeSB0aGF0IHRoZSBjb3Vwb24gY29kZSBmb3JtIGlzIGlubGluZSwgYW5kIHRoZSByZXN1bHRzIHNob3VsZCByZXBsYWNlIHRoZSBvcmlnaW5hbCB0YWcgYW5kIG5vdCB0aGUgcGFnZSBjb250ZW50cyc7CiRsYW5nWydwYXJhbV90ZW1wbGF0ZSddID0gJ1NwZWNpZnkgdGhlIG5hbWUgb2YgYSBub24gZGVmYXVsdCBjb3Vwb24gY29kZSB0ZW1wbGF0ZSB0byBkaXNwbGF5IGZvciB0aGUgZGVmYXVsdCBhY3Rpb24nOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICdUaGUgUHJvbW90aW9ucyBtb2R1bGUgaGFzIGJlZW4gaW5zdGFsbGVkLCBwbGVhc2UgZW5zdXJlIHRoYXQgdGhlIGF1dGhvcml6ZWQgdXNlcnMgaGF2ZSB0aGUgJnF1b3Q7TWFuYWdlIFByb21vdGlvbnMmcXVvdDsgcGVybWlzc2lvbiwgYW5kIHRoZW4gY29uZmlndXJlIHlvdXIgcHJvbW90aW9ucyBhbmQgdGVtcGxhdGVzIGFwcHJvcHJpYXRlbHknOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ1RoZSBQcm9tb3Rpb25zIG1vZHVsZSBhbmQgYWxsIGFwcGxpY2FibGUgZGF0YSBoYXMgYmVlbiB1bmluc3RhbGxlZCBmcm9tIHRoZSBzeXN0ZW0uICBZb3UgbWF5IG5vdyByZW1vdmUgdGhlIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1vZHVsZSc7CiRsYW5nWydQUk9NT1RJT05TX0NPTkRfQ09VUE9OJ10gPSAnUmVxdWlyZSBhIENvdXBvbiBDb2RlJzsKJGxhbmdbJ1BST01PVElPTlNfQ09ORF9GRVUnXSA9ICdSZXF1aXJlIG1lbWJlcnNoaXAgaW4gYW4gRkVVIGdyb3VwJzsKJGxhbmdbJ1BST01PVElPTlNfQ09ORF9TVUJUT1RBTCddID0gJ1JlcXVpcmUgYSBtaW5pbXVtIHB1cmNoYXNlIGFtb3VudCc7CiRsYW5nWydQUk9NT1RJT05TX0NPTkRfV0VJR0hUJ10gPSAnUmVxdWlyZSBhIG1pbmltdW0gb3JkZXIgd2VpZ2h0JzsKJGxhbmdbJ1BST01PVElPTlNfQ09ORF9QUk9ESUQnXSA9ICdSZXF1aXJlIHB1cmNoYXNlIG9mIGEgc3BlY2lmaWMgcHJvZHVjdCc7CiRsYW5nWydQUk9NT1RJT05TX0NPTkRfUFJPRENBVCddID0gJ1JlcXVpcmUgcHVyY2hhc2Ugb2YgYXQgbGVhc3Qgb25lIHByb2R1Y3QgaW4gYSBjYXRlZ29yeSc7CiRsYW5nWydQUk9NT1RJT05TX0NPTkRfUFJPREhJRVInXSA9ICdSZXF1aXJlIHB1cmNoYXNlIG9mIGF0IGxlYXN0IG9uZSBwcm9kdWN0IGluIGEgaGllcmFyY2h5JzsKJGxhbmdbJ1BST01PVElPTlNfQ09ORF9QUk9EU0tVJ10gPSAnUmVxdWlyZSBwdXJjaGFzZSBvZiBhIHNwZWNpZmljIHByb2R1Y3QgKGJ5IFNLVSknOwokbGFuZ1snUFJPTU9USU9OU19DT05EX0JVTEtQVVJDSEFTRSddID0gJ1JlcXVpcmUgYSBwdXJjaGFzZSBvZiBhIG1pbnVtdW0gcXVhbnRpdHkgb2YgYSBzcGVjaWZpYyBwcm9kdWN0IChieSBTS1UpJzsKJGxhbmdbJzAxX1BST01PVElPTlNfT0ZGRVJfUFJPRFVDVCddID0gJ1JlY2VpdmUgYSBmcmVlIHByb2R1Y3QnOwokbGFuZ1snMDJfUFJPTU9USU9OU19PRkZFUl9QUk9ERElTQ09VTlQnXSA9ICdEaXNjb3VudCB0aGUgYXBwbGljYWJsZSBwcm9kdWN0cyBieSBhIHBlcmNlbnRhZ2UnOwokbGFuZ1snMDNfUFJPTU9USU9OU19PRkZFUl9QRVJDRU5UJ10gPSAnUGVyY2VudGFnZSBvZmYgb3JkZXIgdG90YWwnOwokbGFuZ1snMDRfUFJPTU9USU9OU19PRkZFUl9ESVNDT1VOVCddID0gJ1JlZHVjZSBvcmRlciB0b3RhbCBieSBhIHNwZWNpZmllZCBkb2xsYXIgZmlndXJlJzsKJGxhbmdbJzA1X1BST01PVElPTlNfT0ZGRVJfU0FNRVBST0RVQ1QnXSA9ICdHZXQgdGhlIHNhbWUgcHJvZHVjdCBmcmVlJzsKJGxhbmdbJzA2X1BST01PVElPTlNfT0ZGRVJfUFJPRFVDVFNLVSddID0gJ1JlY2VpdmUgYSBmcmVlIHByb2R1Y3QgKGJ5IFNLVSknOwokbGFuZ1snMDdfUFJPTU9USU9OU19PRkZFUl9QUk9EQU1PVU5UJ10gPSAnRGlzY291bnQgdGhlIGFwcGxpY2FibGUgcHJvZHVjdHMgYnkgYSBmaXhlZCBhbW91bnQnOwokbGFuZ1sncHJvbW9fdHlwZV9pbnN0YW50J10gPSAnUHJvbW90aW9uIG9mZmVyIGNhbGN1bGF0ZWQgaW4gdGhlIENhcnQnOwokbGFuZ1sncHJvbW9fdHlwZV9jaGVja291dCddID0gJ1Byb21vdGlvbiBvZmZlciBjYWxjdWxhdGVkIG9uIENoZWNrb3V0JzsKJGxhbmdbJ3Byb21wdF9hZGRfY29uZGl0aW9uJ10gPSAnQWRkIGEgQ29uZGl0aW9uJzsKJGxhbmdbJ3Byb21wdF9hZGRwcm9tbyddID0gJ0FkZCBhIE5ldyBQcm9tb3Rpb24nOwokbGFuZ1sncHJvbXB0X2FsbG93X2N1bXVsYXRpdmUnXSA9ICdBcHBseSB0aGlzIHByb21vdGlvbiB0byBhbHJlYWR5IGRpc2NvdW50ZWQgaXRlbXM/JzsKJGxhbmdbJ3Byb21wdF9hbGxvd19vbmNlJ10gPSAnVGhpcyBwcm9tb3Rpb24gY2FuIG9ubHkgYmUgdXNlZCBvbmNlIHBlciB0cmFuc2FjdGlvbic7CiRsYW5nWydwcm9tcHRfY29kZSddID0gJ0NvdXBvbiBDb2RlJzsKJGxhbmdbJ3Byb21wdF9jb25kaXRpb25fZGF0YSddID0gJ0NvbmRpdGlvbiBEYXRhJzsKJGxhbmdbJ3Byb21wdF9jb25kaXRpb25fdHlwZSddID0gJ1R5cGUgb2YgQ29uZGl0aW9uJzsKJGxhbmdbJ3Byb21wdF9jb25kaXRpb25zJ10gPSAnQ29uZGl0aW9ucyc7CiRsYW5nWydwcm9tcHRfY291cG9uX2NvZGUnXSA9ICdFbnRlciBhIENvdXBvbiBvciBQcm9tb3Rpb24gQ29kZSc7CiRsYW5nWydwcm9tcHRfZGZsdF9vZmZlcl90eXBlJ10gPSAnRGVmYXVsdCBvZmZlciB0eXBlJzsKJGxhbmdbJ3Byb21wdF9kZmx0X3Byb21vdGlvbl9wZXJpb2QnXSA9ICdEZWZhdWx0IFByb21vdGlvbiBQZXJpb2QgKG1vbnRocyknOwokbGFuZ1sncHJvbXB0X2VuZF9kYXRlJ10gPSAnRW5kIERhdGUnOwokbGFuZ1sncHJvbXB0X2Vycm9yX2VtcHR5J10gPSAnRW1wdHkgQ29kZSBNZXNzYWdlJzsKJGxhbmdbJ3Byb21wdF9lcnJvcl9pbnZhbGlkJ10gPSAnSW52YWxpZCBDb2RlIE1lc3NhZ2UnOwokbGFuZ1sncHJvbXB0X2V4dHJhcyddID0gJ0V4dHJhcyc7CiRsYW5nWydwcm9tcHRfZnJlZV9wcm9kdWN0J10gPSAnU3BlY2lmeSB0aGUgZnJlZSBwcm9kdWN0JzsKJGxhbmdbJ3Byb21wdF9pZCddID0gJ0lEJzsKJGxhbmdbJ3Byb21wdF9pbWFnZSddID0gJ0ltYWdlJzsKJGxhbmdbJ3Byb21wdF9pbWFnZV9kaXInXSA9ICdJbWFnZSBEaXJlY3RvcnknOwokbGFuZ1sncHJvbXB0X2Rlc2NyaXB0aW9uJ10gPSAnRGVzY3JpcHRpb24nOwokbGFuZ1sncHJvbXB0X21zZ192YWxpZF9jb2RlJ10gPSAnVmFsaWQgQ29kZSBNZXNzYWdlJzsKJGxhbmdbJ3Byb21wdF9uYW1lJ10gPSAnTmFtZSc7CiRsYW5nWydwcm9tcHRfb2ZmZXInXSA9ICdPZmZlcic7CiRsYW5nWydwcm9tcHRfb2ZmZXJfZGF0YSddID0gJ09mZmVyIERhdGEnOwokbGFuZ1sncHJvbXB0X29mZmVyX3R5cGUnXSA9ICdPZmZlciBUeXBlJzsKJGxhbmdbJ3Byb21wdF9vZmZlcnMnXSA9ICdPZmZlcnMnOwokbGFuZ1sncHJvbXB0X3BlcmNlbnRhZ2VfZGlzY291bnQnXSA9ICdQZXJjZW50IERpc2NvdW50IDxlbT4oZXhwcmVzc2VkIGFzIGEgZGVjaW1hbCBmcm9tIDAgdG8gMSk8L2VtPic7CiRsYW5nWydwcm9tcHRfcHJpY2VfZGlzY291bnQnXSA9ICdTcGVjaWZ5IHRoZSBkb2xsYXIgZmlndXJlIHRvIHJlbW92ZSBmcm9tIHRoZSBvcmRlcic7CiRsYW5nWydwcm9tcHRfc3RhcnRfZGF0ZSddID0gJ1N0YXJ0IERhdGUnOwokbGFuZ1sncHJvbXB0X3RlbXBsYXRlJ10gPSAnVGVtcGxhdGUnOwokbGFuZ1sncHJvbXB0X3R5cGUnXSA9ICdUeXBlJzsKJGxhbmdbJ3Byb21wdGRhdGFfUFJPTU9USU9OU19DT05EX0NPVVBPTiddID0gJ0NvdXBvbiBDb2RlJzsKJGxhbmdbJ3Byb21wdGRhdGFfUFJPTU9USU9OU19DT05EX0ZFVSddID0gJ0ZFVSBHcm91cCBOYW1lJzsKJGxhbmdbJ3Byb21wdGRhdGFfUFJPTU9USU9OU19DT05EX1NVQlRPVEFMJ10gPSAnTWluaW11bSBPcmRlciBBbW91bnQnOwokbGFuZ1sncHJvbXB0ZGF0YV9QUk9NT1RJT05TX0NPTkRfV0VJR0hUJ10gPSAnTWluaW11bSBPcmRlciBXZWlnaHQnOwokbGFuZ1sncHJvbXB0ZGF0YV9QUk9NT1RJT05TX0NPTkRfUFJPRElEJ10gPSAnUHJvZHVjdCBJZCc7CiRsYW5nWydwcm9tcHRkYXRhX1BST01PVElPTlNfQ09ORF9QUk9EU0tVJ10gPSAnUHJvZHVjdCBTS1UnOwokbGFuZ1sncHJvbXB0ZGF0YV9QUk9NT1RJT05TX0NPTkRfUFJPRENBVCddID0gJ1Byb2R1Y3QgQ2F0ZWdvcnknOwokbGFuZ1sncHJvbXB0ZGF0YV9QUk9NT1RJT05TX0NPTkRfUFJPREhJRVInXSA9ICdQcm9kdWN0IEhpZXJhcmNoeSc7CiRsYW5nWydwcm9tcHRkYXRhX1BST01PVElPTlNfQ09ORF9CVUxLUFVSQ0hBU0UnXSA9ICdQcm9kdWN0IFNLVSc7CiRsYW5nWydwcm9tcHRkYXRhX1BST01PVElPTlNfQ09ORF9CVUxLUFVSQ0hBU0UyJ10gPSAnTWluaW11bSBRdWFudGl0eSc7CiRsYW5nWydwcm9tcHRvZmZlcl8wM19QUk9NT1RJT05TX09GRkVSX1BFUkNFTlQnXSA9ICdEaXNjb3VudCBQZXJjZW50YWdlIDxlbT4oZXhwcmVzc2VkIGFzIGEgdmFsdWUgZnJvbSAwLjAwIHRvIDEuMDApPC9lbT4nOwokbGFuZ1sncHJvbXB0b2ZmZXJfMDRfUFJPTU9USU9OU19PRkZFUl9ESVNDT1VOVCddID0gJ0Nhc2ggRGlzY291bnQnOwokbGFuZ1sncHJvbXB0b2ZmZXJfMDFfUFJPTU9USU9OU19PRkZFUl9QUk9EVUNUJ10gPSAnUHJvZHVjdCBJRCB0byBnaXZlIGZyZWUnOwokbGFuZ1sncHJvbXB0b2ZmZXJfMDJfUFJPTU9USU9OU19PRkZFUl9QUk9ERElTQ09VTlQnXSA9ICdEaXNjb3VudCBQZXJjZW50YWdlIDxlbT4oZXhwcmVzc2VkIGFzIGEgdmFsdWUgZnJvbSAwLjAwIHRvIDEuMDApPC9lbT4nOwokbGFuZ1sncHJvbXB0b2ZmZXJfMDVfUFJPTU9USU9OU19PRkZFUl9TQU1FUFJPRFVDVCddID0gJ09mZmVyIHRoZSBzYW1lIHByb2R1Y3QgZnJlZSA8ZW0+KGFueSB2YWx1ZSBoZXJlIGlzIHZhbGlkKTwvZW0+JzsKJGxhbmdbJ3Byb21wdG9mZmVyXzA2X1BST01PVElPTlNfT0ZGRVJfUFJPRFVDVFNLVSddID0gJ1Byb2R1Y3QgU0tVKHMpIHRoYXQgYXJlIGZyZWUgd2l0aCB0aGUgb3JkZXIgKG9ubHkgdGhlIGZpcnN0IG1hdGNoaW5nIGl0ZW0gaW4gdGhlIGNhcnQgd2lsbCBiZSBkaXNjb3VudGVkKSc7CiRsYW5nWydwcm9tcHRvZmZlcl8wN19QUk9NT1RJT05TX09GRkVSX1BST0RBTU9VTlQnXSA9ICdEaXNjb3VudCBhbW91bnQgPGVtPihleHByZXNzZWQgYXMgYSB2YWx1ZSwgY2Fubm90IGV4Y2VlZCB0aGUgcHJvZHVjdHMgcHJpY2UuPC9lbT4nOwoKI1EKCgojUgokbGFuZ1sncmVhbGx5X2RlbGV0ZV9wcm9tb3Rpb24nXSA9ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcmVtb3ZlIHRoaXMgcHJvbW90aW9uPyc7CiRsYW5nWydyZWFsbHlfdW5pbnN0YWxsJ10gPSAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHVuaW5zdGFsbCB0aGlzIG1vZHVsZT8gUHJvY2VlZGluZyB3aWxsIHBlcm1hbmVudGx5IHJlbW92ZSBhbGwgb2YgeW91ciBwcm9tb3Rpb25zIGRhdGEgYW5kIG1heSBjYXVzZSBwcm9ibGVtcyB3aXRoIGEgd29ya2luZyBlLWNvbW1lcmNlIHdlYnNpdGUuJzsKJGxhbmdbJ3Jlc2V0dG9mYWN0b3J5J10gPSAnUmVzZXQgVG8gRmFjdG9yeSBEZWZhdWx0cyc7CgojUwokbGFuZ1snc2V0YXNwcm9tbyddID0gJ1NldCBwcm9tb3Rpb24gbW9kdWxlJzsKJGxhbmdbJ3N1Ym1pdCddID0gJ1N1Ym1pdCc7CgojVAokbGFuZ1sndGl0bGVfY291cG9uZm9ybV9kZmx0dGVtcGxhdGUnXSA9ICdTeXN0ZW0gRGVmYXVsdCBDb3Vwb24gRm9ybSBUZW1wbGF0ZSc7CiRsYW5nWyd0eXBlJ10gPSAnVHlwZSc7CgojVQoKCiNWCgoKI1cKJGxhbmdbJ3dhcm5faW5zdGFudF9wcm9tb3Rpb25zJ10gPSAnSW5zdGFudCBwcm9tb3Rpb25zIHdpbGwgbm90IHdvcmsgd2l0aCB3aGVuIHVzaW5nIHRoZSAmcXVvdDtDYXJ0JnF1b3Q7IG1vZHVsZS4nOwokbGFuZ1snd2FybmluZ19ub19jb25kaXRpb25zJ10gPSAnWW91IGhhdmUgbm90IHNwZWNpZmllZCBhbnkgY29uZGl0aW9ucyBmb3IgdGhpcyBvZmZlciAob3RoZXIgdGhhbiBhIHN0YXJ0IGFuZCBlbmQgZGF0ZSkuICBDbGljayBPSyB0byBjb250aW51ZSwgb3IgQ2FuY2VsIHRvIGNvcnJlY3QgdGhpcyc7CgojWAoKCiNZCgoKI1oKCgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/class.condition_tests.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gYWxsb3cgY3JlYXRpbmcsIGludGVyZmFjaW5nIHdpdGgKIyAgYW5kIG1hbmFnaW5nIHByb21vdGlvbnMgb3Igc2FsZXMgaW4gdGhlIEUtY29tZW1yY2Ugc3VpdGUuCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQpuYW1lc3BhY2UgUHJvbW90aW9uczsKCmZpbmFsIGNsYXNzIGNvbmRpdGlvbl90ZXN0cwp7CiAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgogIC8qKgogICAqIFRlc3QgdGhpcyBjb25kaXRpb24gdG8gc2VlIGlmIGl0IGlzIGFuIEZFVSBncm91cCBjb25kaXRpb24KICAgKiBhbmQgaWYgdGhlIHVzZXIgaWQgc3BlY2lmaWVkIChvciBhdXRvbWF0aWNhbGx5IGRldGVybWluZWQpCiAgICogbWF0Y2hlcwogICAqCiAgICogcmV0dXJuIFRSVUUgb24gbWF0Y2gsIEZBTFNFIG90aGVyd2lzZQogICAqLwogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdGVzdF9mZXVfdWlkKHByb21vdGlvbl9jb25kaXRpb24gJGNvbmRpdGlvbiwkZmV1X3VpZCA9IC0xKQogIHsKICAgIGlmKCAkY29uZGl0aW9uLT5nZXRfY29uZF90eXBlKCkgIT0gUFJPTU9USU9OU19DT05EX0ZFVSApIHJldHVybiBGQUxTRTsKCiAgICAkZmV1ID0gXGNtc191dGlsczo6Z2V0X21vZHVsZSgnRnJvbnRFbmRVc2VycycpOwogICAgaWYoICEkZmV1ICkgcmV0dXJuIEZBTFNFOwogICAgaWYoICRmZXVfdWlkID09IC0xICkgJGZldV91aWQgPSAkZmV1LT5Mb2dnZWRJbklkKCk7CiAgICBpZiggJGZldV91aWQgPD0gMCApIHJldHVybiBGQUxTRTsKCiAgICAvLyBidWlsZCBhIGxpc3Qgb2YgbWVtYmVyIGdyb3VwIG5hbWVzCiAgICAkYWxsZ3JvdXBzID0gJGZldS0+R2V0R3JvdXBMaXN0KCk7CiAgICAkYWxsZ3JvdXBzID0gYXJyYXlfZmxpcCgkYWxsZ3JvdXBzKTsKICAgICRtZW1iZXJfb2YgPSAkZmV1LT5HZXRNZW1iZXJHcm91cHNBcnJheSgkZmV1X3VpZCk7CiAgICBpZiggISRtZW1iZXJfb2YgKSByZXR1cm4gRkFMU0U7CiAgICAkbWVtYmVyX29mID0gXGNnZV9hcnJheTo6ZXh0cmFjdF9maWVsZCgkbWVtYmVyX29mLCdncm91cGlkJyk7CiAgICAkbWVtYmVyX2dyb3VwX25hbWVzID0gYXJyYXkoKTsKICAgIGZvcmVhY2goICRtZW1iZXJfb2YgYXMgJG1naWQgKSB7CiAgICAgICRtZW1iZXJfZ3JvdXBfbmFtZXNbXSA9ICRhbGxncm91cHNbJG1naWRdOwogICAgfQoKICAgIC8vIGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgY29uZGl0aW9uLCBhcyBhbiBhcnJheSBvZiB0cmltbWVkIGdyb3VwIG5hbWVzCiAgICAkZGF0YSA9IGV4cGxvZGUoJywnLCRjb25kaXRpb24tPmdldF9kYXRhKCkpOwogICAgZm9yKCAkaiA9IDA7ICRqIDwgY291bnQoJGRhdGEpOyAkaisrICkgewogICAgICAkZGF0YVskal0gPSB0cmltKCRkYXRhWyRqXSk7CiAgICB9CgogICAgLy8gbm93IGRvIGFuIGludGVyc2VjdGlvbiBiZXR3ZWVuIG1lbWJlciBncm91cG8gbmFtZXMKICAgIC8vIGFuZCB0aGUgZGF0YSBncm91cCBuYW1lcy4KICAgICRyZXMgPSBhcnJheV9pbnRlcnNlY3QoJG1lbWJlcl9ncm91cF9uYW1lcywkZGF0YSk7CiAgICBpZiggY291bnQoJHJlcykgKSByZXR1cm4gVFJVRTsKCiAgICByZXR1cm4gRkFMU0U7CiAgfQp9IC8vIGVuZCBvZiBjbGFzcwoKIwojIEVPRgojCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.promotion.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gYWxsb3cgY3JlYXRpbmcsIGludGVyZmFjaW5nIHdpdGgKIyAgYW5kIG1hbmFnaW5nIHByb21vdGlvbnMgb3Igc2FsZXMgaW4gdGhlIEUtY29tZW1yY2Ugc3VpdGUuCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdHMgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4KIyBzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI0VORF9MSUNFTlNFCm5hbWVzcGFjZSBQcm9tb3Rpb25zOwoKcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19GSUxFX18pLicvY2xhc3MucHJvbW9fb3BzLnBocCcpOwoKZGVmaW5lKCdQUk9NT1RJT05TX0NPTkRfRkVVJywnUFJPTU9USU9OU19DT05EX0ZFVScpOyAgICAgICAvLyBGRVUgZ3JvdXAgbWVtYmVyc2hpcApkZWZpbmUoJ1BST01PVElPTlNfQ09ORF9TVUJUT1RBTCcsJ1BST01PVElPTlNfQ09ORF9TVUJUT1RBTCcpOyAgIC8vIE9yZGVyIHRvdGFsIChwcmUgc2hpcHBpbmcgYW5kIHRheGVzKQpkZWZpbmUoJ1BST01PVElPTlNfQ09ORF9XRUlHSFQnLCdQUk9NT1RJT05TX0NPTkRfV0VJR0hUJyk7IC8vIE9yZGVyIHdlaWdodApkZWZpbmUoJ1BST01PVElPTlNfQ09ORF9QUk9ESUQnLCdQUk9NT1RJT05TX0NPTkRfUFJPRElEJyk7IC8vIE9yZGVyIGhhcyBhIGNlcnRhaW4gcHJvZHVjdCBpZApkZWZpbmUoJ1BST01PVElPTlNfQ09ORF9QUk9EQ0FUJywnUFJPTU9USU9OU19DT05EX1BST0RDQVQnKTsgLy8gT3JkZXIgaGFzIGEgcHJvZHVjdCBmcm9tIGEgY2VydGFpbiBjYXRlZ29yeQpkZWZpbmUoJ1BST01PVElPTlNfQ09ORF9QUk9ESElFUicsJ1BST01PVElPTlNfQ09ORF9QUk9ESElFUicpOyAvLyBPcmRlciBoYXMgYSBwcm9kdWN0IGZyb20gYSBjZXJ0YWluIGhpZXJhcmNoeQpkZWZpbmUoJ1BST01PVElPTlNfQ09ORF9QUk9EU0tVJywnUFJPTU9USU9OU19DT05EX1BST0RTS1UnKTsgLy8gT3JkZXIgaGFzIGEgY2VydGFpbiBwcm9kdWN0IHNrdQpkZWZpbmUoJ1BST01PVElPTlNfQ09ORF9DT1VQT04nLCdQUk9NT1RJT05TX0NPTkRfQ09VUE9OJyk7IC8vIE9yZGVyIGhhcyBhIHByb2R1Y3QgZnJvbSBhIGNlcnRhaW4gaGllcmFyY2h5CmRlZmluZSgnUFJPTU9USU9OU19DT05EX0JVTEtQVVJDSEFTRScsJ1BST01PVElPTlNfQ09ORF9CVUxLUFVSQ0hBU0UnKTsgLy8gT3JkZXIgaGFzIGEgbWludW11bSBwdXJjaGFzZSBvZiBOIHF1YW50aXR5IG9mIHNwZWNpZmljIFNLVQpkZWZpbmUoJ1BST01PVElPTlNfT0ZGRVJfUFJPRFVDVCcsJzAxX1BST01PVElPTlNfT0ZGRVJfUFJPRFVDVCcpOwpkZWZpbmUoJ1BST01PVElPTlNfT0ZGRVJfUFJPRERJU0NPVU5UJywnMDJfUFJPTU9USU9OU19PRkZFUl9QUk9ERElTQ09VTlQnKTsKZGVmaW5lKCdQUk9NT1RJT05TX09GRkVSX1BFUkNFTlQnLCcwM19QUk9NT1RJT05TX09GRkVSX1BFUkNFTlQnKTsKZGVmaW5lKCdQUk9NT1RJT05TX09GRkVSX0RJU0NPVU5UJywnMDRfUFJPTU9USU9OU19PRkZFUl9ESVNDT1VOVCcpOwpkZWZpbmUoJ1BST01PVElPTlNfT0ZGRVJfU0FNRVBST0RVQ1QnLCcwNV9QUk9NT1RJT05TX09GRkVSX1NBTUVQUk9EVUNUJyk7CmRlZmluZSgnUFJPTU9USU9OU19PRkZFUl9QUk9EVUNUU0tVJywnMDZfUFJPTU9USU9OU19PRkZFUl9QUk9EVUNUU0tVJyk7CmRlZmluZSgnUFJPTU9USU9OU19PRkZFUl9QUk9EQU1PVU5UJywnMDdfUFJPTU9USU9OU19PRkZFUl9QUk9EQU1PVU5UJyk7CgpjbGFzcyBwcm9tb3Rpb25fY29uZGl0aW9uCnsKICAgIHByaXZhdGUgJF9pZDsKICAgIHByaXZhdGUgJF9wcm9tb3Rpb25faWQ7CiAgICBwcml2YXRlICRfY29uZF90eXBlOwogICAgcHJpdmF0ZSAkX2RhdGE7CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRfdHlwZXNfYXJyYXkoJHR5cGUgPSBwcm9tb3Rpb246OlRZUEVfQ0hFQ0tPVVQpCiAgICB7CiAgICAgICAgc3dpdGNoKCAkdHlwZSApIHsKICAgICAgICBjYXNlIHByb21vdGlvbjo6VFlQRV9JTlNUQU5UOgogICAgICAgICAgICByZXR1cm4gYXJyYXkoUFJPTU9USU9OU19DT05EX0ZFVSxQUk9NT1RJT05TX0NPTkRfUFJPRElELAogICAgICAgICAgICAgICAgICAgICAgICAgUFJPTU9USU9OU19DT05EX1BST0RDQVQsUFJPTU9USU9OU19DT05EX1BST0RISUVSLAogICAgICAgICAgICAgICAgICAgICAgICAgUFJPTU9USU9OU19DT05EX0NPVVBPTixQUk9NT1RJT05TX0NPTkRfUFJPRFNLVSwKICAgICAgICAgICAgICAgICAgICAgICAgIFBST01PVElPTlNfQ09ORF9CVUxLUFVSQ0hBU0UpOwogICAgICAgIGNhc2UgcHJvbW90aW9uOjpUWVBFX0NIRUNLT1VUOgogICAgICAgICAgICByZXR1cm4gYXJyYXkoUFJPTU9USU9OU19DT05EX0ZFVSxQUk9NT1RJT05TX0NPTkRfU1VCVE9UQUwsUFJPTU9USU9OU19DT05EX1BST0RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgIFBST01PVElPTlNfQ09ORF9QUk9EQ0FULFBST01PVElPTlNfQ09ORF9QUk9ESElFUiwKICAgICAgICAgICAgICAgICAgICAgICAgIFBST01PVElPTlNfQ09ORF9DT1VQT04sUFJPTU9USU9OU19DT05EX1dFSUdIVCwKICAgICAgICAgICAgICAgICAgICAgICAgIFBST01PVElPTlNfQ09ORF9QUk9EU0tVLAogICAgICAgICAgICAgICAgICAgICAgICAgUFJPTU9USU9OU19DT05EX0JVTEtQVVJDSEFTRSk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfaWQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2lkOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfaWQoJGlkKQogICAgewogICAgICAgICR0aGlzLT5faWQgPSAkaWQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldF9wcm9tb3Rpb25faWQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X3Byb21vdGlvbl9pZDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X3Byb21vdGlvbl9pZCgkaWQpCiAgICB7CiAgICAgICAgJHRoaXMtPl9wcm9tb3Rpb25faWQgPSAkaWQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldF9jb25kX3R5cGUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2NvbmRfdHlwZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X2NvbmRfdHlwZSgkdHlwZSkKICAgIHsKICAgICAgICBpZiggJHR5cGUgPT0gUFJPTU9USU9OU19DT05EX0ZFVSB8fAkkdHlwZSA9PSBQUk9NT1RJT05TX0NPTkRfU1VCVE9UQUwgfHwgJHR5cGUgPT0gUFJPTU9USU9OU19DT05EX1dFSUdIVCB8fAogICAgICAgICAgICAkdHlwZSA9PSBQUk9NT1RJT05TX0NPTkRfQ09VUE9OIHx8ICR0eXBlID09IFBST01PVElPTlNfQ09ORF9CVUxLUFVSQ0hBU0UgfHwgJHR5cGUgPT0gUFJPTU9USU9OU19DT05EX1BST0RJRCB8fAogICAgICAgICAgICAkdHlwZSA9PSBQUk9NT1RJT05TX0NPTkRfUFJPRENBVCB8fCAkdHlwZSA9PSBQUk9NT1RJT05TX0NPTkRfUFJPRFNLVSB8fAkkdHlwZSA9PSBQUk9NT1RJT05TX0NPTkRfUFJPREhJRVIgKQogICAgICAgICAgICAkdGhpcy0+X2NvbmRfdHlwZSA9ICR0eXBlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfZGF0YSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fZGF0YTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X2RhdGEoJGRhdGEpCiAgICB7CiAgICAgICAgJHRoaXMtPl9kYXRhID0gJGRhdGE7CiAgICB9Cn0gLy8gY2xhc3MKCgpjbGFzcyBwcm9tb3Rpb24KewogICAgcHJpdmF0ZSAkX2lkOwogICAgcHJpdmF0ZSAkX25hbWU7CiAgICBwcml2YXRlICRfZGVzY3JpcHRpb247CiAgICBwcml2YXRlICRfaW1hZ2U7CiAgICBwcml2YXRlICRfY3JlYXRlZDsKICAgIHByaXZhdGUgJF9zdGFydF9kYXRlOwogICAgcHJpdmF0ZSAkX2VuZF9kYXRlOwogICAgcHJpdmF0ZSAkX29mZmVyX3R5cGU7CiAgICBwcml2YXRlICRfb2ZmZXJfZGF0YTsKICAgIHByaXZhdGUgJF9jb25kaXRpb25zOwogICAgcHJpdmF0ZSAkX2l0ZW1fb3JkZXI7CiAgICBwcml2YXRlICRfdHlwZTsKICAgIHByaXZhdGUgJF9leHRyYTsKICAgIHByaXZhdGUgJF9vd25lcjsKICAgIHByaXZhdGUgc3RhdGljICRfdHlwZV9jYWNoZTsKCiAgICBjb25zdCBUWVBFX0lOU1RBTlQgPSAncHJvbW9fdHlwZV9pbnN0YW50JzsKICAgIGNvbnN0IFRZUEVfQ0hFQ0tPVVQgPSAncHJvbW9fdHlwZV9jaGVja291dCc7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKICAgIHsKICAgICAgICAkdGhpcy0+X3R5cGUgPSBzZWxmOjpUWVBFX0NIRUNLT1VUOwogICAgfQoKICAgIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gZ2V0X3R5cGVzX2FycmF5KCkKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXkoc2VsZjo6VFlQRV9JTlNUQU5ULHNlbGY6OlRZUEVfQ0hFQ0tPVVQpOwogICAgfQoKICAgIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gZ2V0X29mZmVyX2FycmF5KCR0eXBlID0gc2VsZjo6VFlQRV9DSEVDS09VVCkKICAgIHsKICAgICAgICBzd2l0Y2goICR0eXBlICkgewogICAgICAgIGNhc2Ugc2VsZjo6VFlQRV9JTlNUQU5UOgogICAgICAgICAgICByZXR1cm4gYXJyYXkoUFJPTU9USU9OU19PRkZFUl9QUk9EVUNULFBST01PVElPTlNfT0ZGRVJfUFJPRFVDVFNLVSwKICAgICAgICAgICAgICAgICAgICAgICAgIFBST01PVElPTlNfT0ZGRVJfUFJPRERJU0NPVU5ULFBST01PVElPTlNfT0ZGRVJfUFJPREFNT1VOVCk7CgogICAgICAgIGNhc2Ugc2VsZjo6VFlQRV9DSEVDS09VVDoKICAgICAgICAgICAgcmV0dXJuIGFycmF5KFBST01PVElPTlNfT0ZGRVJfUEVSQ0VOVCxQUk9NT1RJT05TX09GRkVSX0RJU0NPVU5ULFBST01PVElPTlNfT0ZGRVJfUFJPRFVDVCxQUk9NT1RJT05TX09GRkVSX1BST0RVQ1RTS1UsCiAgICAgICAgICAgICAgICAgICAgICAgICBQUk9NT1RJT05TX09GRkVSX1BST0RESVNDT1VOVCxQUk9NT1RJT05TX09GRkVSX1BST0RBTU9VTlQpOwogICAgICAgIH0KICAgIH0KCiAgICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIGdldF9vZmZlcl9leHRyYV9tYXAoKQogICAgewogICAgICAgICRyZXMgPSBhcnJheSgpOwogICAgICAgICRyZXNbUFJPTU9USU9OU19PRkZFUl9QUk9EVUNUXSA9IGFycmF5KGFycmF5KCduYW1lJz0+J29ubHlfb25lJywndHlwZSc9PidjaGVja2JveCcsJ2xhYmVsJz0+J2xibF9vbmx5b25lJykpOwogICAgICAgICRyZXNbUFJPTU9USU9OU19PRkZFUl9QUk9EVUNUU0tVXSA9IGFycmF5KGFycmF5KCduYW1lJz0+J29ubHlfb25lJywndHlwZSc9PidjaGVja2JveCcsJ2xhYmVsJz0+J2xibF9vbmx5b25lJykpOwogICAgICAgIHJldHVybiAkcmVzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfaWQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2lkOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfaWQoJHZhbCkKICAgIHsKICAgICAgICAkdGhpcy0+X2lkID0gJHZhbDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X25hbWUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X25hbWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldF9uYW1lKCR2YWwpCiAgICB7CiAgICAgICAgJHRoaXMtPl9uYW1lID0gJHZhbDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X293bmVyKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9vd25lcjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X293bmVyKCAkb3duZXJfaWQgKQogICAgewogICAgICAgICRvd25lcl9pZCA9IChpbnQpICRvd25lcl9pZDsKICAgICAgICBpZiggJG93bmVyX2lkIDwgMSApICRvd25lcl9pZCA9IG51bGw7CiAgICAgICAgJHRoaXMtPl9vd25lciA9ICRvd25lcl9pZDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2Rlc2NyaXB0aW9uKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9kZXNjcmlwdGlvbjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X2Rlc2NyaXB0aW9uKCR2YWwpCiAgICB7CiAgICAgICAgJHRoaXMtPl9kZXNjcmlwdGlvbiA9ICR2YWw7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldF9pbWFnZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5faW1hZ2U7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldF9pbWFnZSgkdmFsKQogICAgewogICAgICAgIGlmKCBlbXB0eSgkdmFsKSB8fCAoaXNfaW50KCR2YWwpICYmICgkdmFsIDwgMSkpICkgcmV0dXJuIEZBTFNFOwogICAgICAgICR0aGlzLT5faW1hZ2UgPSAkdmFsOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfdHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fdHlwZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X3R5cGUoJHZhbCkKICAgIHsKICAgICAgICBzd2l0Y2goICR2YWwgKSB7CiAgICAgICAgY2FzZSBzZWxmOjpUWVBFX0lOU1RBTlQ6CiAgICAgICAgY2FzZSBzZWxmOjpUWVBFX0NIRUNLT1VUOgogICAgICAgICAgICAkdGhpcy0+X3R5cGUgPSAkdmFsOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldF9jcmVhdGVkKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9jcmVhdGVkOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfY3JlYXRlZCgkdmFsKQogICAgewogICAgICAgICR0aGlzLT5fY3JlYXRlZCA9ICR2YWw7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldF9pdGVtX29yZGVyKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9pdGVtX29yZGVyOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfc3RhcnRfZGF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fc3RhcnRfZGF0ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X3N0YXJ0X2RhdGUoJHZhbCkKICAgIHsKICAgICAgICAkdGhpcy0+X3N0YXJ0X2RhdGUgPSAkdmFsOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfZW5kX2RhdGUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2VuZF9kYXRlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfZW5kX2RhdGUoJHZhbCkKICAgIHsKICAgICAgICAkdGhpcy0+X2VuZF9kYXRlID0gJHZhbDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X29mZmVyX3R5cGUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X29mZmVyX3R5cGU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldF9vZmZlcl90eXBlKCR2YWwpCiAgICB7CiAgICAgICAgJHRoaXMtPl9vZmZlcl90eXBlID0gJHZhbDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X29mZmVyX2RhdGEoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X29mZmVyX2RhdGE7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldF9leHRyYSgka2V5LCR2YWx1ZSkKICAgIHsKICAgICAgICBpZiggIWlzX2FycmF5KCR0aGlzLT5fZXh0cmEpICkgJHRoaXMtPl9leHRyYSA9IGFycmF5KCk7CiAgICAgICAgJHRoaXMtPl9leHRyYVska2V5XSA9ICR2YWx1ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2V4dHJhKCRrZXkpCiAgICB7CiAgICAgICAgaWYoIGlzX2FycmF5KCR0aGlzLT5fZXh0cmEpICYmIGlzc2V0KCR0aGlzLT5fZXh0cmFbJGtleV0pICkgcmV0dXJuICR0aGlzLT5fZXh0cmFbJGtleV07OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB1bnNldF9leHRyYSgka2V5KQogICAgewogICAgICAgIGlmKCBpc19hcnJheSgkdGhpcy0+X2V4dHJhKSAmJiBpc3NldCgkdGhpcy0+X2V4dHJhWyRrZXldKSApIHVuc2V0KCR0aGlzLT5fZXh0cmFbJGtleV0pOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjbGVhcl9leHRyYSgpCiAgICB7CiAgICAgICAgaWYoIGlzX2FycmF5KCR0aGlzLT5fZXh0cmEpICkgJHRoaXMtPmV4dHJhID0gbnVsbDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X29mZmVyX2RhdGEoJGRhdGEpCiAgICB7CiAgICAgICAgJHRoaXMtPl9vZmZlcl9kYXRhID0gJGRhdGE7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uICZnZXRfY29uZGl0aW9ucygpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fY29uZGl0aW9uczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkX2NvbmRpdGlvbigmJGNvbmRpdGlvbikKICAgIHsKICAgICAgICBpZiggIWlzX2EoJGNvbmRpdGlvbiwnXFxQcm9tb3Rpb25zXFxwcm9tb3Rpb25fY29uZGl0aW9uJykgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgaWYoICFpc19hcnJheSgkdGhpcy0+X2NvbmRpdGlvbnMpICkJJHRoaXMtPl9jb25kaXRpb25zID0gYXJyYXkoKTsKICAgICAgICAkdGhpcy0+X2NvbmRpdGlvbnNbXSA9ICRjb25kaXRpb247CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGRlbF9jb25kaXRpb24oJGlkeCkKICAgIHsKICAgICAgICBpZiggaXNfYXJyYXkoJHRoaXMtPl9jb25kaXRpb25zKSAmJgljb3VudCgkdGhpcy0+X2NvbmRpdGlvbnMpID4gJGlkeCAmJiAkaWR4ID4gMCkgewogICAgICAgICAgICAkdG1wID0gYXJyYXkoKTsKICAgICAgICAgICAgZm9yKCAkaSA9IDA7ICRpIDwgY291bnQoJHRoaXMtPl9jb25kaXRpb25zKTsgJGkrKyApIHsKICAgICAgICAgICAgICAgIGlmKCAkaSA9PSAkaWR4ICkgY29udGludWU7CiAgICAgICAgICAgICAgICAkdG1wW10gPSAkdGhpcy0+X2NvbmRpdGlvbnM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRoaXMtPl9jb25kaXRpb25zID0gJHRtcDsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGRlbF9jb25kaXRpb25zKCkKICAgIHsKICAgICAgICAkdGhpcy0+X2NvbmRpdGlvbnMgPSBudWxsOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiAmZ2V0X2NvbmRpdGlvbigkaWR4KQogICAgewogICAgICAgIGlmKCAhaXNfYXJyYXkoJHRoaXMtPl9jb25kaXRpb25zKSB8fCAoY291bnQoJHRoaXMtPl9jb25kaXRpb25zKSA8ICRpZHgpIHx8ICgkaWR4IDwgMCkgKSB7CiAgICAgICAgICAgICR0bXAgPSBGQUxTRTsKICAgICAgICAgICAgcmV0dXJuICR0bXA7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPl9jb25kaXRpb25zWyRpZHhdOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjb3VudF9jb25kaXRpb25zKCkKICAgIHsKICAgICAgICByZXR1cm4gY291bnQoJHRoaXMtPl9jb25kaXRpb25zKTsKICAgIH0KCgogICAgcHVibGljIGZ1bmN0aW9uIHNhdmUoKQogICAgewogICAgICAgIGlmKCAkdGhpcy0+X2lkICkgcmV0dXJuICR0aGlzLT5fdXBkYXRlKCk7CiAgICAgICAgcmV0dXJuICR0aGlzLT5faW5zZXJ0KCk7CiAgICB9CgoKICAgIHB1YmxpYyBmdW5jdGlvbiBkZWxldGUoKQogICAgewogICAgICAgICRkYiA9IGNtc21zKCktPkdldERiKCk7CiAgICAgICAgJHF1ZXJ5ID0gJ0RFTEVURSBGUk9NICcuUFJPTU9USU9OU19DT05EX1RBQkxFLicgV0hFUkUgcHJvbW90aW9uX2lkID0gPyc7CiAgICAgICAgJHJlcyA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJHRoaXMtPl9pZCkpOwogICAgICAgIC8vIG5vIGVycm9yIGlmIHRoZXJlIGFyZSBubyBjb25kaXRpb25zLgoKICAgICAgICAkcXVlcnkgPSAnREVMRVRFIEZST00gJy5QUk9NT1RJT05TX1RBQkxFLicgV0hFUkUgaWQgPSA/JzsKICAgICAgICAkcmVzID0gJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkdGhpcy0+X2lkKSk7CiAgICAgICAgaWYoICEkcmVzICkgdGhyb3cgbmV3IENtc0V4Y2VwdGlvbignRXJyb3IgZGVsZXRpbmcgcHJvbW90aW9uJyk7CgogICAgICAgICRxdWVyeSA9ICdVUERBVEUgJy5QUk9NT1RJT05TX1RBQkxFLicgU0VUIGl0ZW1fb3JkZXIgPSBpdGVtX29yZGVyIC0gMSBXSEVSRSBpdGVtX29yZGVyID4gPyBBTkQgdHlwZSA9ID8nOwogICAgICAgICRyZXMgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCR0aGlzLT5faXRlbV9vcmRlciwkdGhpcy0+X3R5cGUpKTsKICAgICAgICBpZiggISRyZXMgKSB0aHJvdyBuZXcgQ21zRXhjZXB0aW9uKCdFcnJvciBkZWxldGluZyBwcm9tb3Rpb24gKHVwZGF0aW5nIGl0ZW0gb3JkZXIpJyk7CgogICAgICAgIHJldHVybiBUUlVFOwogICAgfQoKICAgIC8qKgogICAgICogRGVsZXRlIGNvbmRpdGlvbnMgZnJvbSB0aGUgZGF0YWJhc2UgZm9yIHRoaXMgcHJvbW90aW9uCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX2RlbF9jb25kaXRpb25zKCkKICAgIHsKICAgICAgICBpZiggISR0aGlzLT5nZXRfaWQoKSApIHJldHVybiBGQUxTRTsKCiAgICAgICAgJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKICAgICAgICAkcXVlcnkgPSAnREVMRVRFIEZST00gJy5QUk9NT1RJT05TX0NPTkRfVEFCTEUuJyBXSEVSRSBwcm9tb3Rpb25faWQgPSA/JzsKICAgICAgICAkZGJyID0gJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkdGhpcy0+Z2V0X2lkKCkpKTsKICAgICAgICBpZiggISRkYnIgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgcmV0dXJuIFRSVUU7CiAgICB9CgogICAgLyoqCiAgICAgKiBJbnNlcnQgYSBjb25kaXRpb24gaW50byB0aGUgZGF0YWJhc2UgZm9yIHRoaXMgcHJvbW90aW9uCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX2luc2VydF9jb25kaXRpb24ocHJvbW90aW9uX2NvbmRpdGlvbiAkY29uZCkKICAgIHsKICAgICAgICBpZiggISR0aGlzLT5nZXRfaWQoKSApIHJldHVybiBGQUxTRTsKICAgICAgICAkY29uZC0+c2V0X3Byb21vdGlvbl9pZCgkdGhpcy0+Z2V0X2lkKCkpOwoKICAgICAgICAkX3N0b3JlX2RhdGEgPSBmdW5jdGlvbigkdG1wKSB7CiAgICAgICAgICAgIGlmKCBpc19hcnJheSgkdG1wKSApIHsKICAgICAgICAgICAgICAgIGlmKCBjb3VudCgkdG1wKSA9PSAxICkgcmV0dXJuICR0bXBbMF07CiAgICAgICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplKCR0bXApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYoIGlzX29iamVjdCgkdG1wKSApIHsKICAgICAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemUoJHRtcCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICR0bXA7CiAgICAgICAgfTsKCiAgICAgICAgJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKICAgICAgICAkcXVlcnkgPSAnSU5TRVJUIElOVE8gJy5QUk9NT1RJT05TX0NPTkRfVEFCTEUuJyAocHJvbW90aW9uX2lkLGNvbmRfdHlwZSxkYXRhKSBWQUxVRVMgKD8sPyw/KSc7CiAgICAgICAgJGRiciA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJGNvbmQtPmdldF9wcm9tb3Rpb25faWQoKSwkY29uZC0+Z2V0X2NvbmRfdHlwZSgpLCRfc3RvcmVfZGF0YSgkY29uZC0+Z2V0X2RhdGEoKSkpKTsKICAgICAgICBpZiggISRkYnIgKSB0aHJvdyBuZXcgQ21zRXhjZXB0aW9uKCdTUUwgRXJyb3I6ICcuJGRiLT5zcWwuJyAtLSAnLiRkYi0+RXJyb3JNc2coKSk7CiAgICAgICAgcmV0dXJuIFRSVUU7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBfdXBkYXRlKCkKICAgIHsKICAgICAgICBpZiggISR0aGlzLT5nZXRfaWQoKSApIHJldHVybiBGQUxTRTsKCiAgICAgICAgJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKICAgICAgICAkcXVlcnkgPSAnVVBEQVRFICcuUFJPTU9USU9OU19UQUJMRS4nCiAgICAgICAgICAgICAgICAgIFNFVCBuYW1lID0gPywgdHlwZSA9ID8sIGRlc2NyaXB0aW9uID0gPywgaW1hZ2UgPSA/LCBzdGFydF9kYXRlID0gPywgZW5kX2RhdGUgPSA/LCBvZmZlcl90eXBlID0gPywgb2ZmZXJfZGF0YSA9ID8sIGV4dHJhID0gPywgb3duZXIgPSA/CiAgICAgICAgICAgICAgICAgIFdIRVJFIGlkID0gPyc7CiAgICAgICAgJGRiciA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSgkdGhpcy0+Z2V0X25hbWUoKSwgJHRoaXMtPmdldF90eXBlKCksICR0aGlzLT5nZXRfZGVzY3JpcHRpb24oKSwgJHRoaXMtPmdldF9pbWFnZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXGNnZV91dGlsczo6ZGJfdGltZSgkdGhpcy0+Z2V0X3N0YXJ0X2RhdGUoKSksIFxjZ2VfdXRpbHM6OmRiX3RpbWUoJHRoaXMtPmdldF9lbmRfZGF0ZSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5nZXRfb2ZmZXJfdHlwZSgpLCAkdGhpcy0+Z2V0X29mZmVyX2RhdGEoKSwgc2VyaWFsaXplKCR0aGlzLT5fZXh0cmEpLCAkdGhpcy0+X293bmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmdldF9pZCgpKSApOwogICAgICAgIGlmKCAhJGRiciApIHRocm93IG5ldyBDbXNFeGNlcHRpb24oJ1NRTCBFcnJvcjogJy4kZGItPnNxbC4nIC0tICcuJGRiLT5FcnJvck1zZygpKTsKCiAgICAgICAgLy8gaW5zZXJ0IHRoZSBjb25kaXRpb25zCiAgICAgICAgc2VsZjo6X2RlbF9jb25kaXRpb25zKCk7CiAgICAgICAgZm9yKCAkaSA9IDA7ICRpIDwgJHRoaXMtPmNvdW50X2NvbmRpdGlvbnMoKTsgJGkrKyApIHsKICAgICAgICAgICAgJGNvbmQgPSAkdGhpcy0+Z2V0X2NvbmRpdGlvbigkaSk7CiAgICAgICAgICAgIGlmKCAhJGNvbmQgKSBjb250aW51ZTsKICAgICAgICAgICAgc2VsZjo6X2luc2VydF9jb25kaXRpb24oJGNvbmQpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRfaWQoKTsKICAgIH0KCgogICAgcHJpdmF0ZSBmdW5jdGlvbiBfaW5zZXJ0KCkKICAgIHsKICAgICAgICAkZGIgPSBjbXNtcygpLT5HZXREYigpOwogICAgICAgICRxdWVyeSA9ICdTRUxFQ1QgTUFYKGl0ZW1fb3JkZXIpIEZST00gJy5QUk9NT1RJT05TX1RBQkxFLicgV0hFUkUgdHlwZSA9ID8nOwogICAgICAgICRpdGVtX29yZGVyID0gJGRiLT5HZXRPbmUoJHF1ZXJ5LGFycmF5KCR0aGlzLT5nZXRfdHlwZSgpKSk7CiAgICAgICAgaWYoICRpdGVtX29yZGVyID09ICcnICkgJGl0ZW1fb3JkZXIgPSAwOwogICAgICAgICRpdGVtX29yZGVyKys7CgogICAgICAgICRub3cgPSAkZGItPkRiVGltZVN0YW1wKHRpbWUoKSk7CiAgICAgICAgJHF1ZXJ5ID0gJ0lOU0VSVCBJTlRPICcuUFJPTU9USU9OU19UQUJMRS4iCiAgICAgICAgICAgICAgICAgIChuYW1lLHR5cGUsZGVzY3JpcHRpb24saW1hZ2UsY3JlYXRlZCxzdGFydF9kYXRlLGVuZF9kYXRlLG9mZmVyX3R5cGUsb2ZmZXJfZGF0YSxpdGVtX29yZGVyLGV4dHJhLG93bmVyKQogICAgICAgICAgICAgICAgICBWQUxVRVMgKD8sPyw/LD8sJG5vdyw/LD8sPyw/LD8sPyw/KSI7CiAgICAgICAgJGRiciA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSgkdGhpcy0+Z2V0X25hbWUoKSwgJHRoaXMtPmdldF90eXBlKCksICR0aGlzLT5nZXRfZGVzY3JpcHRpb24oKSwgJHRoaXMtPmdldF9pbWFnZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXGNnZV91dGlsczo6ZGJfdGltZSgkdGhpcy0+Z2V0X3N0YXJ0X2RhdGUoKSksIFxjZ2VfdXRpbHM6OmRiX3RpbWUoJHRoaXMtPmdldF9lbmRfZGF0ZSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5nZXRfb2ZmZXJfdHlwZSgpLCAkdGhpcy0+Z2V0X29mZmVyX2RhdGEoKSwgJGl0ZW1fb3JkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemUoJHRoaXMtPl9leHRyYSksICR0aGlzLT5fb3duZXIgKSk7CiAgICAgICAgaWYoICEkZGJyICkgdGhyb3cgbmV3IENtc0V4Y2VwdGlvbignU1FMIEVycm9yOiAnLiRkYi0+c3FsLicgLS0gJy4kZGItPkVycm9yTXNnKCkpOwogICAgICAgICR0aGlzLT5faWQgPSAkZGItPkluc2VydF9JRCgpOwoKICAgICAgICAvLyBpbnNlcnQgdGhlIGNvbmRpdGlvbnMKICAgICAgICBmb3IoICRpID0gMDsgJGkgPCAkdGhpcy0+Y291bnRfY29uZGl0aW9ucygpOyAkaSsrICkgewogICAgICAgICAgICAkY29uZCA9ICR0aGlzLT5nZXRfY29uZGl0aW9uKCRpKTsKICAgICAgICAgICAgaWYoICEkY29uZCApIGNvbnRpbnVlOwogICAgICAgICAgICBzZWxmOjpfaW5zZXJ0X2NvbmRpdGlvbigkY29uZCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkdGhpcy0+X2lkOwogICAgfQoKCiAgICBwdWJsaWMgZnVuY3Rpb24gY2hlY2tfdmFsaWQoKQogICAgewogICAgICAgICRzdCA9IFxjZ2VfdXRpbHM6OnVuaXhfdGltZSgkdGhpcy0+Z2V0X3N0YXJ0X2RhdGUoKSk7CiAgICAgICAgJGV0ID0gXGNnZV91dGlsczo6dW5peF90aW1lKCR0aGlzLT5nZXRfZW5kX2RhdGUoKSk7CiAgICAgICAgJGNyID0gXGNnZV91dGlsczo6dW5peF90aW1lKCR0aGlzLT5nZXRfY3JlYXRlZCgpKTsKCiAgICAgICAgaWYoICRzdCA8ICRjciApIHJldHVybiBGQUxTRTsKICAgICAgICBpZiggJGV0IDw9ICRzdCApIHJldHVybiBGQUxTRTsKICAgICAgICBpZiggZW1wdHkoJHRoaXMtPl9uYW1lKSApIHJldHVybiBGQUxTRTsKICAgICAgICBpZiggZW1wdHkoJHRoaXMtPl9vZmZlcl9kYXRhKSApIHJldHVybiBGQUxTRTsKICAgICAgICByZXR1cm4gVFJVRTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBfbG9hZF9mcm9tX2RhdGEoJGRhdGEpCiAgICB7CiAgICAgICAgJHJlcyA9IG51bGw7CiAgICAgICAgaWYoICFpc19hcnJheSgkZGF0YSkgfHwgY291bnQoJGRhdGEpID09IDAgKSByZXR1cm4gJHJlczsKICAgICAgICBpZiggIWlzc2V0KCRkYXRhWydyYXdfY29uZGl0aW9ucyddKSApIHJldHVybiAkcmVzOwoKICAgICAgICAkcHJvbW8gPSBuZXcgcHJvbW90aW9uKCk7CiAgICAgICAgZm9yZWFjaCggJGRhdGEgYXMgJGtleSA9PiAkdmFsdWUgKSB7CiAgICAgICAgICAgIGlmKCAka2V5ID09ICdyYXdfY29uZGl0aW9ucycgKSBjb250aW51ZTsKICAgICAgICAgICAgJG0gPSAnXycuJGtleTsKICAgICAgICAgICAgaWYoICRrZXkgPT0gJ2V4dHJhJyApICR2YWx1ZSA9IHVuc2VyaWFsaXplKCR2YWx1ZSk7CiAgICAgICAgICAgICRwcm9tby0+JG0gPSAkdmFsdWU7CiAgICAgICAgfQoKICAgICAgICBmb3JlYWNoKCAkZGF0YVsncmF3X2NvbmRpdGlvbnMnXSBhcyAkcm93ICkgewogICAgICAgICAgICAkY29uZF9vYiA9IG5ldyBwcm9tb3Rpb25fY29uZGl0aW9uKCk7CiAgICAgICAgICAgIGZvcmVhY2goICRyb3cgYXMgJGtleSA9PiAkdmFsdWUgKSB7CiAgICAgICAgICAgICAgICAkZnVuID0gJ3NldF8nLiRrZXk7CiAgICAgICAgICAgICAgICAkY29uZF9vYi0+JGZ1bigkdmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRwcm9tby0+YWRkX2NvbmRpdGlvbigkY29uZF9vYik7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcHJvbW87CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb2FkX2J5X2lkKCRpZCkKICAgIHsKICAgICAgICBpZiggKCRpZCA8PSAwKSB8fCAhaXNfbnVtZXJpYygkaWQpICkgdGhyb3cgbmV3IENtc0V4Y2VwdGlvbignQ2Fubm90IGxvYWQgaW52YWxpZCBwcm9tb3Rpb24gaWQgJy4kaWQpOwoKICAgICAgICAkZGIgPSBjbXNtcygpLT5HZXREYigpOwogICAgICAgICRxdWVyeSA9ICdTRUxFQ1QgKiBGUk9NICcuUFJPTU9USU9OU19UQUJMRS4nIFdIRVJFIGlkID0gPyc7CiAgICAgICAgJHJvdyA9ICRkYi0+R2V0Um93KCRxdWVyeSxhcnJheSgoaW50KSRpZCkpOwogICAgICAgIGlmKCAhJHJvdyApIHRocm93IG5ldyBDbXNFeGNlcHRpb24oJ1Byb2JsZW0gbG9hZGluZyBwcm9tb3Rpb24gd2l0aCBpZCAnLiRpZCk7CgogICAgICAgIC8vIGxvYWQgY29uZGl0aW9ucy4KICAgICAgICAkcXVlcnkgPSAnU0VMRUNUICogRlJPTSAnLlBST01PVElPTlNfQ09ORF9UQUJMRS4nIFdIRVJFIHByb21vdGlvbl9pZCA9ID8nOwogICAgICAgICRkYXRhID0gJGRiLT5HZXRBcnJheSgkcXVlcnksYXJyYXkoKGludCkkaWQpKTsKICAgICAgICBmb3IoICRpID0gMDsgJGkgPCBjb3VudCgkZGF0YSk7ICRpKysgKSB7CiAgICAgICAgICAgICR0bXAgPSBAdW5zZXJpYWxpemUoJGRhdGFbJGldWydkYXRhJ10pOwogICAgICAgICAgICBpZiggJHRtcCApICRkYXRhWyRpXVsnZGF0YSddID0gJHRtcDsKICAgICAgICB9CiAgICAgICAgJHJvd1sncmF3X2NvbmRpdGlvbnMnXSA9ICRkYXRhOwoKICAgICAgICByZXR1cm4gc2VsZjo6X2xvYWRfZnJvbV9kYXRhKCRyb3cpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG9hZF9ieV9vd25lciggJG93bmVyX2lkICkKICAgIHsKICAgICAgICAkb3duZXJfaWQgPSAoaW50KSAkb3duZXJfaWQ7CiAgICAgICAgaWYoICRvd25lcl9pZCA8IDEgKSB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCdJbnZhbGlkIG93bmVyIGlkIHNwZWNpZmllZCBmb3IgJy5fX01FVEhPRF9fKTsKCiAgICAgICAgJGRiID0gXENtc0FwcDo6Z2V0X2luc3RhbmNlKCktPkdldERiKCk7CiAgICAgICAgJHNxbCA9ICdTRUxFQ1QgKiBGUk9NICcuUFJPTU9USU9OU19UQUJMRS4nIFdIRVJFIG93bmVyID0gPyBPUkRFUiBCWSBpdGVtX29yZGVyIEFTQyc7OwogICAgICAgICRwcm9tb2xpc3QgPSAkZGItPkdldEFycmF5KCAkc3FsLCBbICRvd25lcl9pZCBdICk7CiAgICAgICAgaWYoICEkcHJvbW9saXN0ICkgcmV0dXJuOwoKICAgICAgICAkaWRsaXN0ID0gXGNnZV9hcnJheTo6ZXh0cmFjdF9maWVsZCggJHByb21vbGlzdCwgJ2lkJyk7CiAgICAgICAgJHNxbCA9ICdTRUxFQ1QgKiBGUk9NICcuUFJPTU9USU9OU19DT05EX1RBQkxFLicgV0hFUkUgcHJvbW90aW9uX2lkIElOICgnLmltcGxvZGUoJywnLCRpZGxpc3QpLicpIE9SREVSIEJZIHByb21vdGlvbl9pZCBBU0MnOwogICAgICAgICRjb25kbGlzdCA9ICRkYi0+R2V0QXJyYXkoJHNxbCk7CgogICAgICAgICRvdXQgPSBbXTsKICAgICAgICBmb3JlYWNoKCAkcHJvbW9saXN0IGFzICRyb3cgKSB7CiAgICAgICAgICAgIGZvcmVhY2goICRjb25kbGlzdCBhcyAkcm93MiApIHsKICAgICAgICAgICAgICAgIGlmKCAkcm93MlsncHJvbW90aW9uX2lkJ10gPCAkcm93WydpZCddICkgY29udGludWU7CiAgICAgICAgICAgICAgICBpZiggJHJvdzJbJ3Byb21vdGlvbl9pZCddID4gJHJvd1snaWQnXSApIGJyZWFrOwoKICAgICAgICAgICAgICAgICR0bXAgPSBAdW5zZXJpYWxpemUoJHJvdzJbJ2RhdGEnXSk7CiAgICAgICAgICAgICAgICBpZiggJHRtcCApICRyb3cyWydkYXRhJ10gPSAkdG1wOwoKICAgICAgICAgICAgICAgIGlmKCAhaXNzZXQoJHJvd1sncmF3X2NvbmRpdGlvbnMnXSkgKSAkcm93WydyYXdfY29uZGl0aW9ucyddID0gYXJyYXkoKTsKICAgICAgICAgICAgICAgICRyb3dbJ3Jhd19jb25kaXRpb25zJ11bXSA9ICRyb3cyOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRvYmogPSBzZWxmOjpfbG9hZF9mcm9tX2RhdGEoJHJvdyk7CiAgICAgICAgICAgIGlmKCAkb2JqICkgJG91dFtdID0gJG9iajsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb2FkX2FsbF9ieV90eXBlKCR0eXBlLCRvbmx5dmFsaWQgPSBUUlVFKQogICAgewogICAgICAgIHN3aXRjaCggJHR5cGUgKSB7CiAgICAgICAgY2FzZSBwcm9tb3Rpb246OlRZUEVfSU5TVEFOVDoKICAgICAgICBjYXNlIHByb21vdGlvbjo6VFlQRV9DSEVDS09VVDoKICAgICAgICAgICAgaWYoIGlzc2V0KHNlbGY6OiRfdHlwZV9jYWNoZVskdHlwZV0pICkgcmV0dXJuIHNlbGY6OiRfdHlwZV9jYWNoZVskdHlwZV07CgogICAgICAgICAgICAkZGIgPSBjbXNtcygpLT5HZXREYigpOwogICAgICAgICAgICAkcXVlcnkgPSAnU0VMRUNUICogRlJPTSAnLlBST01PVElPTlNfVEFCTEUuJyBXSEVSRSB0eXBlID0gPyc7CiAgICAgICAgICAgIGlmKCAkb25seXZhbGlkICkgewogICAgICAgICAgICAgICAgJGRhdGUgPSAkZGItPkRiVGltZVN0YW1wKHRpbWUoKSk7CiAgICAgICAgICAgICAgICAkcXVlcnkgLj0gIiBBTkQgKHN0YXJ0X2RhdGUgPD0gJGRhdGUpIEFORCAoZW5kX2RhdGUgPj0gJGRhdGUpIjsKICAgICAgICAgICAgfQogICAgICAgICAgICAkcXVlcnkgLj0gJyBPUkRFUiBCWSBpdGVtX29yZGVyIEFTQyc7CiAgICAgICAgICAgICRkYnIgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCR0eXBlKSk7CiAgICAgICAgICAgICRpZHMgPSBhcnJheSgpOwogICAgICAgICAgICB3aGlsZSggISRkYnItPkVPRiApIHsKICAgICAgICAgICAgICAgICRyb3cgPSAkZGJyLT5maWVsZHM7CiAgICAgICAgICAgICAgICBpZiggIWluX2FycmF5KCRyb3dbJ2lkJ10sJGlkcykgKSAkaWRzW10gPSAoaW50KSRyb3dbJ2lkJ107CiAgICAgICAgICAgICAgICAkZGJyLT5Nb3ZlTmV4dCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRkYnItPk1vdmVGaXJzdCgpOwoKICAgICAgICAgICAgJGRicjIgPSBudWxsOwogICAgICAgICAgICBpZiggaXNfYXJyYXkoJGlkcykgJiYgY291bnQoJGlkcykgKSB7CiAgICAgICAgICAgICAgICAkcXVlcnkgPSAnU0VMRUNUICogRlJPTSAnLlBST01PVElPTlNfQ09ORF9UQUJMRS4nIFdIRVJFIHByb21vdGlvbl9pZCBJTiAoJy5pbXBsb2RlKCcsJywkaWRzKS4nKSBPUkRFUiBCWSBwcm9tb3Rpb25faWQgQVNDJzsKICAgICAgICAgICAgICAgICRkYnIyID0gJGRiLT5HZXRBcnJheSgkcXVlcnkpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkb3V0ID0gYXJyYXkoKTsKICAgICAgICAgICAgd2hpbGUoICEkZGJyLT5FT0YgKSB7CiAgICAgICAgICAgICAgICAkcm93ID0gJGRici0+ZmllbGRzOwogICAgICAgICAgICAgICAgZm9yZWFjaCggJGRicjIgYXMgJHJvdzIgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoICRyb3cyWydwcm9tb3Rpb25faWQnXSA8ICRyb3dbJ2lkJ10gKSBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICBpZiggJHJvdzJbJ3Byb21vdGlvbl9pZCddID4gJHJvd1snaWQnXSApIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAkdG1wID0gQHVuc2VyaWFsaXplKCRyb3cyWydkYXRhJ10pOwogICAgICAgICAgICAgICAgICAgIGlmKCAkdG1wICkgJHJvdzJbJ2RhdGEnXSA9ICR0bXA7CgogICAgICAgICAgICAgICAgICAgIGlmKCAhaXNzZXQoJHJvd1sncmF3X2NvbmRpdGlvbnMnXSkgKSAkcm93WydyYXdfY29uZGl0aW9ucyddID0gYXJyYXkoKTsKICAgICAgICAgICAgICAgICAgICAkcm93WydyYXdfY29uZGl0aW9ucyddW10gPSAkcm93MjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRvYmogPSBzZWxmOjpfbG9hZF9mcm9tX2RhdGEoJHJvdyk7CiAgICAgICAgICAgICAgICBpZiggJG9iaiApICRvdXRbXSA9ICRvYmo7CiAgICAgICAgICAgICAgICAkZGJyLT5Nb3ZlTmV4dCgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiggIWlzX2FycmF5KHNlbGY6OiRfdHlwZV9jYWNoZSkgKSBzZWxmOjokX3R5cGVfY2FjaGUgPSBhcnJheSgpOwogICAgICAgICAgICBzZWxmOjokX3R5cGVfY2FjaGVbJHR5cGVdID0gJG91dDsKICAgICAgICAgICAgcmV0dXJuICRvdXQ7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICB0aHJvdyBuZXcgQ21zSW52YWxpZERhdGFFeGNlcHRpb24oJ0ludmFsaWQgcHJvbW90aW9uIHR5cGUgJy4kdHlwZSk7CiAgICAgICAgfQogICAgfQoKfSAvLyBjbGFzcwoKIwojIEVPRgojCg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.promotion_assistant.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFByb21vdGlvbnM7CgpjbGFzcyBwcm9tb3Rpb25fYXNzaXN0YW50IGltcGxlbWVudHMgXENHRWNvbW1lcmNlQmFzZVxwcm9tb3Rpb25fYXNzaXN0YW50CnsKICAgIHByaXZhdGUgJF9tb2Q7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCBcUHJvbW90aW9ucyAkbW9kICkKICAgIHsKICAgICAgICAkdGhpcy0+X21vZCA9ICRtb2Q7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIEdldE5hbWUoKSB7IHJldHVybiAkdGhpcy0+X21vZC0+R2V0TmFtZSgpOyB9CiAgICBwdWJsaWMgZnVuY3Rpb24gSXNDb25maWd1cmVkKCkgeyByZXR1cm4gVFJVRTsgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfdGVzdF9vYmplY3QoKQogICAgewogICAgICAgICRvYiA9IG5ldyBwcm9tb3Rpb25fdGVzdGVyKCk7CiAgICAgICAgcmV0dXJuICRvYjsKICAgIH0KCn0=]]></data>
	</file>
	<file>
	  <filename>/lib/class.promotion_discount.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gYWxsb3cgY3JlYXRpbmcsIGludGVyZmFjaW5nIHdpdGgKIyAgYW5kIG1hbmFnaW5nIHByb21vdGlvbnMgb3Igc2FsZXMgaW4gdGhlIEUtY29tZW1yY2Ugc3VpdGUuCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQpuYW1lc3BhY2UgUHJvbW90aW9uczsKCmRlZmluZSgnUFJPTU9USU9OU19ESVNDT1VOVF9QUk9EVUNUJywnUFJPTU9USU9OU19ESVNDT1VOVF9QUk9EVUNUJyk7CmRlZmluZSgnUFJPTU9USU9OU19ESVNDT1VOVF9BTU9VTlQnLCdQUk9NT1RJT05TX0RJU0NPVU5UX1BST0RVQ1QnKTsKCmNsYXNzIHByb21vdGlvbl9kaXNjb3VudAp7CiAgcHJpdmF0ZSAkX3R5cGU7CiAgcHJpdmF0ZSAkX2FtdDsKICBwcml2YXRlICRfZGVzYzsKICBwcml2YXRlICRfcHJvbW9faWQ7CgogIHB1YmxpYyBmdW5jdGlvbiBnZXRfdHlwZSgpCiAgewogICAgcmV0dXJuICR0aGlzLT5fdHlwZTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfdHlwZSgkdHlwZSkKICB7CiAgICBpZiggJHR5cGUgPT0gUFJPTU9USU9OU19ESVNDT1VOVF9QUk9EVUNUIHx8CgkkdHlwZSA9PSBQUk9NT1RJT05TX0RJU0NPVU5UX0FNT1VOVCApCiAgICAgIHsKCSR0aGlzLT5fdHlwZSA9ICR0eXBlOwogICAgICB9CiAgfQoKCiAgcHVibGljIGZ1bmN0aW9uIGdldF9hbW91bnQoKQogIHsKICAgIHJldHVybiAkdGhpcy1fYW10OwogIH0KCgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfYW1vdW50KCRhbW91bnQpCiAgewogICAgJHRoaXMtPl9hbXQgPSAkYW1vdW50OwogIH0KCgogIHB1YmxpYyBmdW5jdGlvbiBnZXRfZGVzY3JpcHRpb24oKQogIHsKICAgIHJldHVybiAkdGhpcy0+X2Rlc2M7CiAgfQoKCiAgcHVibGljIGZ1bmN0aW9uIHNldF9kZXNjcmlwdGlvbigkZGVzY3JpcHRpb24pCiAgewogICAgJHRoaXMtPl9kZXNjID0gJGRlc2NyaXB0aW9uOwogIH0KCgogIHB1YmxpYyBmdW5jdGlvbiBnZXRfcHJvbW9faWQoKQogIHsKICAgIHJldHVybiAkdGhpcy0+X3Byb21vX2lkOwogIH0KCgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfcHJvbW9faWQoJGlkKQogIHsKICAgICR0aGlzLT5fcHJvbW9faWQgPSAkaWQ7CiAgfQoKCiAgcHVibGljIGZ1bmN0aW9uIGlzX3ZhbGlkKCkKICB7CiAgICBpZiggaXNfbnVsbCgkdGhpcy0+X3R5cGUpIHx8Cglpc19udWxsKCR0aGlzLT5fZGVzYykgfHwKCWlzX251bGwoJHRoaXMtPl9hbXQpIHx8IChmbG9hdHZhbCgkdGhpcy0+X2FtdCkgPD0gMC4wKSB8fAoJaXNfbnVsbCgkdGhpcy0+X3Byb21vX2lkKSApCiAgICAgIHsKCXJldHVybiBGQUxTRTsKICAgICAgfQogICAgcmV0dXJuIFRSVUU7CiAgfQp9IC8vIGNsYXNzCgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/class.promotion_tester.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMTIgYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gYWxsb3cgY3JlYXRpbmcsIGludGVyZmFjaW5nIHdpdGgKIyAgYW5kIG1hbmFnaW5nIHByb21vdGlvbnMgb3Igc2FsZXMgaW4gdGhlIEUtY29tZW1yY2Ugc3VpdGUuCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQpuYW1lc3BhY2UgUHJvbW90aW9uczsKCi8vIHRoaXMgY2xhc3MgdGVzdHMgYWxsIHByb21vdGlvbnMgb2YgdGhlIGFwcHJvcHJpYXRlIHR5cGUgYWdhaW5zdCB0aGUgaXRlbSwgYW5kIHRoZSBjYXJ0LgpjbGFzcyBwcm9tb3Rpb25fdGVzdGVyIGV4dGVuZHMgXGNnX2Vjb21tX3Byb21vdGlvbl90ZXN0ZXIKewogIHByaXZhdGUgJF9jb3Vwb25zOwogIHByaXZhdGUgJF9mZXVfdWlkOwoKICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogIHsKICAgICRzZXNzID0gbmV3IFxjZ2Vfc2Vzc2lvbignUHJvbW90aW9ucycpOwogICAgJHRoaXMtPl9jb3Vwb25zID0gJHNlc3MtPmdldCgnY291cG9ucycsJycpOwoKICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoKTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBnZXRfZmV1X3VpZCgpCiAgewogICAgJHggPSBwYXJlbnQ6OmdldF9mZXVfdWlkKCk7CiAgICBpZiggJHggPiAwICkgcmV0dXJuICR4OwoKICAgICRmZXUgPSBcY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdGcm9udEVuZFVzZXJzJyk7CiAgICBpZiggJGZldSApIHsKICAgICAgJHggPSAkZmV1LT5Mb2dnZWRJbklkKCk7CiAgICAgIGlmKCAkeCA+IDAgKSAkdGhpcy0+c2V0X2ZldV91aWQoJHgpOwogICAgfQogICAgcmV0dXJuICR4OwogIH0KCiAgLyoqCiAgICogdGVzdHMgaWYgcHJvZHVjdCBtYXRjaGVzIGFueSBwcm9tb3Rpb25zIHRoYXQgbWF0Y2ggc2V0IGNyaXRlcmlhLgogICAqIChwcm9kdWN0IG11c3QgYmUgc2V0KS4gIFN0b3BzIGFmdGVyIHRoZSBmaXJzdCBtYXRjaAogICAqCiAgICogQHJldHVybiBjZ19lY29tbV9wcm9tb3Rpb25fbWF0Y2gKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gZmluZF9tYXRjaCgpCiAgewogICAgICAvLyBjb252ZXJ0cyBhIGNnX2Vjb21tdHlwZSB0byBhIHByb21vdGlvbiB0eXBlCiAgICAgICR0eXBlID0gcHJvbW90aW9uOjpUWVBFX0NIRUNLT1VUOwogICAgICBzd2l0Y2goICR0aGlzLT5nZXRfcHJvbW9fdHlwZSgpICkgewogICAgICBjYXNlIHNlbGY6OlRZUEVfSU5TVEFOVDoKICAgICAgICAgICR0eXBlID0gcHJvbW90aW9uOjpUWVBFX0lOU1RBTlQ7CiAgICAgICAgICBicmVhazsKICAgICAgY2FzZSBzZWxmOjpUWVBFX0NIRUNLT1VUOgogICAgICAgICAgJHR5cGUgPSBwcm9tb3Rpb246OlRZUEVfQ0hFQ0tPVVQ7CiAgICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICAgIHRocm93IG5ldyBDc21JbnZhbGlkRGF0YUV4Y2VwdGlvbignVW5rbm93biBwcm9tb3Rpb24gdHlwZSBpbiAnLl9fQ0xBU1NfXyk7CiAgICAgIH0KCiAgICAgICRtYXRjaCA9IG51bGw7CiAgICAgICRwcm9tb3MgPSBwcm9tb3Rpb246OmxvYWRfYWxsX2J5X3R5cGUoJHR5cGUpOwogICAgICBmb3JlYWNoKCAkcHJvbW9zIGFzICRwcm9tbyApIHsKICAgICAgICAgICR0ZXN0ZXIgPSBuZXcgcHJvbW9fdGVzdGVyKCRwcm9tbyk7CiAgICAgICAgICBpZiggJHRoaXMtPmdldF9za3UoKSApICR0ZXN0ZXItPnNldF9za3UoJHRoaXMtPmdldF9za3UoKSk7CiAgICAgICAgICAkdGVzdGVyLT5zZXRfaWdub3JlX2Rpc2NvdW50ZWQoJHRoaXMtPmdldF9pZ25vcmVfZGlzY291bnRlZCgpKTsKICAgICAgICAgICR0ZXN0ZXItPnNldF9wcm9kdWN0KCR0aGlzLT5nZXRfcHJvZHVjdCgpKTsKICAgICAgICAgICR0ZXN0ZXItPnNldF9xdWFudGl0eSgkdGhpcy0+Z2V0X3F1YW50aXR5KCkpOwogICAgICAgICAgJHRlc3Rlci0+c2V0X2NhcnQoJHRoaXMtPmdldF9jYXJ0KCkpOwogICAgICAgICAgJHRlc3Rlci0+c2V0X2NvdXBvbnMoJHRoaXMtPl9jb3Vwb25zKTsKICAgICAgICAgIGlmKCAkdGVzdGVyLT5maW5kX21hdGNoKCkgKSB7CiAgICAgICAgICAgICAgLy8gdGhpcyBwcm9tb3Rpb24gbWF0Y2hlcy4KICAgICAgICAgICAgICAvLyBuZWVkIHRvIHBhcnNlIHRoZSBvZmZlci4KICAgICAgICAgICAgICAkbWF0Y2ggPSBuZXcgXGNnX2Vjb21tX3Byb21vdGlvbl9tYXRjaDsKICAgICAgICAgICAgICBpZiggJHR5cGUgPT0gcHJvbW90aW9uOjpUWVBFX0lOU1RBTlQgKSB7CiAgICAgICAgICAgICAgICAgIHN3aXRjaCggJHByb21vLT5nZXRfb2ZmZXJfdHlwZSgpICkgewogICAgICAgICAgICAgICAgICBjYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPRERJU0NPVU5UOgogICAgICAgICAgICAgICAgICAgICAgJG1hdGNoLT5zZXRfdHlwZSgkbWF0Y2g6Ok9GRkVSX1BFUkNFTlQpOwogICAgICAgICAgICAgICAgICAgICAgJG1hdGNoLT5zZXRfdmFsKCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSk7CiAgICAgICAgICAgICAgICAgICAgICAkbWF0Y2gtPnNldF9wcm9tbygkcHJvbW8tPmdldF9pZCgpKTsKICAgICAgICAgICAgICAgICAgICAgICRhbXQgPSAkdGhpcy0+Z2V0X3ByaWNlKCkgKiAkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkgKiAtMTsKICAgICAgICAgICAgICAgICAgICAgICRtYXRjaC0+c2V0X2Rpc2NvdW50X2FtdChyb3VuZCgkYW10LDIpKTsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgY2FzZSBQUk9NT1RJT05TX09GRkVSX1BST0RBTU9VTlQ6CiAgICAgICAgICAgICAgICAgICAgICAkbWF0Y2gtPnNldF90eXBlKCRtYXRjaDo6T0ZGRVJfRElTQ09VTlQpOwogICAgICAgICAgICAgICAgICAgICAgJG1hdGNoLT5zZXRfZGlzY291bnRfYW10KHJvdW5kKCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSwyKSk7CiAgICAgICAgICAgICAgICAgICAgICAkbWF0Y2gtPnNldF92YWwoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpKTsKICAgICAgICAgICAgICAgICAgICAgICRtYXRjaC0+c2V0X3Byb21vKCRwcm9tby0+Z2V0X2lkKCkpOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICBjYXNlIFBST01PVElPTlNfT0ZGRVJfU0FNRVBST0RVQ1Q6CiAgICAgICAgICAgICAgICAgICAgICAkbWF0Y2gtPnNldF90eXBlKCRtYXRjaDo6T0ZGRVJfUEVSQ0VOVCk7CiAgICAgICAgICAgICAgICAgICAgICAkbWF0Y2gtPnNldF92YWwoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpKTsKICAgICAgICAgICAgICAgICAgICAgICRtYXRjaC0+c2V0X3Byb21vKCRwcm9tby0+Z2V0X2lkKCkpOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICBjYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPRFVDVDoKICAgICAgICAgICAgICAgICAgICAgIC8vIGEgZnJlZSBwcm9kdWN0CiAgICAgICAgICAgICAgICAgICAgICAkbWF0Y2gtPnNldF90eXBlKCRtYXRjaDo6T0ZGRVJfUFJPRFVDVElEKTsKICAgICAgICAgICAgICAgICAgICAgICRtYXRjaC0+c2V0X3ZhbCgkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkpOwogICAgICAgICAgICAgICAgICAgICAgJG1hdGNoLT5zZXRfcHJvbW8oJHByb21vLT5nZXRfaWQoKSk7CiAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgIGNhc2UgUFJPTU9USU9OU19PRkZFUl9QUk9EVUNUU0tVOgogICAgICAgICAgICAgICAgICAgICAgLy8gYSBmcmVlIHByb2R1Y3QKICAgICAgICAgICAgICAgICAgICAgICRtYXRjaC0+c2V0X3R5cGUoJG1hdGNoOjpPRkZFUl9QUk9EVUNUU0tVKTsKICAgICAgICAgICAgICAgICAgICAgICRtYXRjaC0+c2V0X3ZhbCgkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkpOwogICAgICAgICAgICAgICAgICAgICAgJG1hdGNoLT5zZXRfcHJvbW8oJHByb21vLT5nZXRfaWQoKSk7CiAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ21zSW52YWxpZERhdGFFeGNlcHRpb24oJ29mZmVyIG9mIHR5cGUgJy4kcHJvbW8tPmdldF9vZmZlcl90eXBlKCkuJyBpcyBpbnZhbGlkIGZvciBwcm9tb3Rpb24gb2YgdHlwZSAnLiR0eXBlKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgc3dpdGNoKCAkcHJvbW90aW9uLT5nZXRfb2ZmZXJfdHlwZSgpICkgewogICAgICAgICAgICAgICAgICBjYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPRFVDVDoKICAgICAgICAgICAgICAgICAgY2FzZSBQUk9NT1RJT05TX09GRkVSX1BST0RVQ1RESVNDT1VOVDoKICAgICAgICAgICAgICAgICAgY2FzZSBQUk9NT1RJT05TX09GRkVSX1BFUkNFTlQ6CiAgICAgICAgICAgICAgICAgIGNhc2UgUFJPTU9USU9OU19PRkZFUl9ESVNDT1VOVDoKICAgICAgICAgICAgICAgICAgY2FzZSBQUk9NT1RJT05TX09GRkVSX1NBTUVQUk9EVUNUOgogICAgICAgICAgICAgICAgICBjYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPRFVDVFNLVToKICAgICAgICAgICAgICAgICAgICAgIGRpZSgnaW5jb21wbGV0ZSAtLSAnLl9fRklMRV9fLicgLS0gJy5fX0xJTkVfXyk7CiAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ21zSW52YWxpZERhdGFFeGNlcHRpb24oJ29mZmVyIG9mIHR5cGUgJy4kcHJvbW90aW9uLT5nZXRfb2ZmZXJfdHlwZSgpLicgaXMgaW52YWxpZCBmb3IgcHJvbW90aW9uIG9mIHR5cGUgJy4kdHlwZSk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgIHJldHVybiAkbWF0Y2g7CiAgICAgICAgICB9CiAgICAgIH0KICB9IC8vIGZpbmQgbWF0Y2gKCiAgLyoqCiAgICogRmluZCB0aGUgZmlyc3QgcHJvbW90aW9uIHRoYXQgbWF0Y2hlcyB0aGUgaXRlbXMgaW4gdGhlIGNhcnQKICAgKgogICAqIEByZXR1cm4gY2dfZWNvbW1fcHJvbW90aW9uX21hdGNoCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIGZpbmRfY2FydF9tYXRjaCgpCiAgewogICAgICAvLyBjb252ZXJ0cyBhIGNnX2Vjb21tdHlwZSB0byBhIHByb21vdGlvbiB0eXBlCiAgICAgICR0eXBlID0gcHJvbW90aW9uOjpUWVBFX0NIRUNLT1VUOwogICAgICBzd2l0Y2goICR0aGlzLT5nZXRfcHJvbW9fdHlwZSgpICkgewogICAgICBjYXNlIHNlbGY6OlRZUEVfSU5TVEFOVDoKICAgICAgICAgICR0eXBlID0gcHJvbW90aW9uOjpUWVBFX0lOU1RBTlQ7CiAgICAgICAgICBicmVhazsKICAgICAgY2FzZSBzZWxmOjpUWVBFX0NIRUNLT1VUOgogICAgICAgICAgJHR5cGUgPSBwcm9tb3Rpb246OlRZUEVfQ0hFQ0tPVVQ7CiAgICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICAgIHRocm93IG5ldyBDc21JbnZhbGlkRGF0YUV4Y2VwdGlvbignVW5rbm93biBwcm9tb3Rpb24gdHlwZSBpbiAnLl9fQ0xBU1NfXyk7CiAgICAgIH0KCiAgICAgICRwcm9tb3MgPSBwcm9tb3Rpb246OmxvYWRfYWxsX2J5X3R5cGUoJHR5cGUpOwogICAgICAkbWF0Y2ggPSBudWxsOwogICAgICBmb3JlYWNoKCAkcHJvbW9zIGFzICAkcHJvbW8gKSB7CiAgICAgICAgICAvLyBjcmVhdGUgYSBwcm9tbyB0ZXN0ZXIgZm9yIGVhYWNoIHByb21vdGlvbiwgYW5kIHNlZSBpZiB3ZSBnZXQgYSBtYXRjaC4KICAgICAgICAgICR0ZXN0ZXIgPSBuZXcgcHJvbW9fdGVzdGVyKCRwcm9tbyk7CiAgICAgICAgICAkdGVzdGVyLT5zZXRfY2FydCgkdGhpcy0+Z2V0X2NhcnQoKSk7CiAgICAgICAgICAkdGVzdGVyLT5zZXRfY291cG9ucygkdGhpcy0+X2NvdXBvbnMpOwogICAgICAgICAgJHRlc3Rlci0+c2V0X2lnbm9yZV9kaXNjb3VudGVkKCR0aGlzLT5nZXRfaWdub3JlX2Rpc2NvdW50ZWQoKSk7CgogICAgICAgICAgJG1hdGNoX2lkeCA9IC0xOwogICAgICAgICAgaWYoICR0ZXN0ZXItPmZpbmRfY2FydF9tYXRjaCgkbWF0Y2hfaWR4KSApIHsKICAgICAgICAgICAgICAvLyBzbyBmYXIsIHNvIGdvb2QuLi4gaXRlbXMgaW4gdGhlIGNhcnQgbWF0Y2ggdGhpcyBwcm9tby4KICAgICAgICAgICAgICAkbWF0Y2ggPSBuZXcgXGNnX2Vjb21tX3Byb21vdGlvbl9tYXRjaDsKICAgICAgICAgICAgICBzd2l0Y2goICRwcm9tby0+Z2V0X29mZmVyX3R5cGUoKSApIHsKICAgICAgICAgICAgICBjYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPRFVDVDoKICAgICAgICAgICAgICAgICAgJG1hdGNoLT5zZXRfdHlwZSgkbWF0Y2g6Ok9GRkVSX1BST0RVQ1RJRCk7CiAgICAgICAgICAgICAgICAgICRtYXRjaC0+c2V0X3ZhbCgkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkpOwogICAgICAgICAgICAgICAgICAkbWF0Y2gtPnNldF9wcm9tbygkcHJvbW8tPmdldF9pZCgpKTsKICAgICAgICAgICAgICAgICAgJG1hdGNoLT5zZXRfbmFtZSgkcHJvbW8tPmdldF9uYW1lKCkpOwogICAgICAgICAgICAgICAgICAkbWF0Y2gtPnNldF9jYXJ0X2lkeCgkbWF0Y2hfaWR4KTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgIGNhc2UgUFJPTU9USU9OU19PRkZFUl9QUk9EVUNUU0tVOgogICAgICAgICAgICAgICAgICAkbWF0Y2gtPnNldF90eXBlKCRtYXRjaDo6T0ZGRVJfUFJPRFVDVFNLVSk7CiAgICAgICAgICAgICAgICAgICRtYXRjaC0+c2V0X3ZhbCgkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkpOwogICAgICAgICAgICAgICAgICAkbWF0Y2gtPnNldF9wcm9tbygkcHJvbW8tPmdldF9pZCgpKTsKICAgICAgICAgICAgICAgICAgJG1hdGNoLT5zZXRfbmFtZSgkcHJvbW8tPmdldF9uYW1lKCkpOwogICAgICAgICAgICAgICAgICAkbWF0Y2gtPnNldF9jYXJ0X2lkeCgkbWF0Y2hfaWR4KTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgIGNhc2UgUFJPTU9USU9OU19PRkZFUl9QRVJDRU5UOgogICAgICAgICAgICAgICAgICAkbWF0Y2gtPnNldF90eXBlKCRtYXRjaDo6T0ZGRVJfUEVSQ0VOVCk7CiAgICAgICAgICAgICAgICAgICRtYXRjaC0+c2V0X3ZhbCgkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkpOwogICAgICAgICAgICAgICAgICAkbWF0Y2gtPnNldF9wcm9tbygkcHJvbW8tPmdldF9pZCgpKTsKICAgICAgICAgICAgICAgICAgJG1hdGNoLT5zZXRfbmFtZSgkcHJvbW8tPmdldF9uYW1lKCkpOwogICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgY2FzZSBQUk9NT1RJT05TX09GRkVSX0RJU0NPVU5UOgogICAgICAgICAgICAgICAgICAkbWF0Y2gtPnNldF90eXBlKCRtYXRjaDo6T0ZGRVJfRElTQ09VTlQpOwogICAgICAgICAgICAgICAgICAkbWF0Y2gtPnNldF92YWwoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpKTsKICAgICAgICAgICAgICAgICAgJG1hdGNoLT5zZXRfcHJvbW8oJHByb21vLT5nZXRfaWQoKSk7CiAgICAgICAgICAgICAgICAgICRtYXRjaC0+c2V0X25hbWUoJHByb21vLT5nZXRfbmFtZSgpKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgIGNhc2UgUFJPTU9USU9OU19PRkZFUl9QUk9ERElTQ09VTlQ6CiAgICAgICAgICAgICAgICAgICRtYXRjaC0+c2V0X3R5cGUoJG1hdGNoOjpPRkZFUl9QRVJDRU5UKTsKICAgICAgICAgICAgICAgICAgJG1hdGNoLT5zZXRfdmFsKCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSk7CiAgICAgICAgICAgICAgICAgICRtYXRjaC0+c2V0X3Byb21vKCRwcm9tby0+Z2V0X2lkKCkpOwogICAgICAgICAgICAgICAgICAkbWF0Y2gtPnNldF9uYW1lKCRwcm9tby0+Z2V0X25hbWUoKSk7CiAgICAgICAgICAgICAgICAgICRtYXRjaC0+c2V0X2NhcnRfaWR4KCRtYXRjaF9pZHgpOwogICAgICAgICAgICAgICAgICAkYW10ID0gJHRoaXMtPmdldF9wcmljZSgpICogJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpICogLTE7CiAgICAgICAgICAgICAgICAgICRtYXRjaC0+c2V0X2Rpc2NvdW50X2FtdChyb3VuZCgkYW10LDIpKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgIGNhc2UgUFJPTU9USU9OU19PRkZFUl9QUk9EQU1PVU5UOgogICAgICAgICAgICAgICAgICAkbWF0Y2gtPnNldF90eXBlKCRtYXRjaDo6T0ZGRVJfRElTQ09VTlQpOwogICAgICAgICAgICAgICAgICAkbWF0Y2gtPnNldF92YWwoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpKTsKICAgICAgICAgICAgICAgICAgJG1hdGNoLT5zZXRfZGlzY291bnRfYW10KHJvdW5kKCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSwyKSk7CiAgICAgICAgICAgICAgICAgICRtYXRjaC0+c2V0X3Byb21vKCRwcm9tby0+Z2V0X2lkKCkpOwogICAgICAgICAgICAgICAgICAkbWF0Y2gtPnNldF9uYW1lKCRwcm9tby0+Z2V0X25hbWUoKSk7CiAgICAgICAgICAgICAgICAgICRtYXRjaC0+c2V0X2NhcnRfaWR4KCRtYXRjaF9pZHgpOwogICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgLy8gYW4gaW52YWxpZCBvZmZlciB0eXBlIGlzIGp1c3QgaWdub3JlZC4KICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICByZXR1cm4gJG1hdGNoOwogICAgICAgICAgfQogICAgICB9CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gZmluZF9hbGxfY2FydF9tYXRjaGVzKCkKICB7CiAgICAvLyBjb252ZXJ0cyBhIGNnX2Vjb21tdHlwZSB0byBhIHByb21vdGlvbiB0eXBlCiAgICAkdHlwZSA9IHByb21vdGlvbjo6VFlQRV9DSEVDS09VVDsKICAgIHN3aXRjaCggJHRoaXMtPmdldF9wcm9tb190eXBlKCkgKSB7CiAgICBjYXNlIHNlbGY6OlRZUEVfSU5TVEFOVDoKICAgICAgJHR5cGUgPSBwcm9tb3Rpb246OlRZUEVfSU5TVEFOVDsKICAgICAgYnJlYWs7CiAgICBjYXNlIHNlbGY6OlRZUEVfQ0hFQ0tPVVQ6CiAgICAgICR0eXBlID0gcHJvbW90aW9uOjpUWVBFX0NIRUNLT1VUOwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHRocm93IG5ldyBDc21JbnZhbGlkRGF0YUV4Y2VwdGlvbignVW5rbm93biBwcm9tb3Rpb24gdHlwZSBpbiAnLl9fQ0xBU1NfXyk7CiAgICB9CgogICAgJHByb21vcyA9IHByb21vdGlvbjo6bG9hZF9hbGxfYnlfdHlwZSgkdHlwZSk7CiAgICAkbWF0Y2ggPSBudWxsOwogICAgJG1hdGNoZXMgPSBhcnJheSgpOwogICAgZm9yZWFjaCggJHByb21vcyBhcyAgJHByb21vICkgewogICAgICAkdGVzdGVyID0gbmV3IHByb21vX3Rlc3RlcigkcHJvbW8pOwogICAgICAkdGVzdGVyLT5zZXRfY2FydCgkdGhpcy0+Z2V0X2NhcnQoKSk7CiAgICAgICR0ZXN0ZXItPnNldF9jb3Vwb25zKCR0aGlzLT5fY291cG9ucyk7CiAgICAgICR0ZXN0ZXItPnNldF9pZ25vcmVfZGlzY291bnRlZCgkdGhpcy0+Z2V0X2lnbm9yZV9kaXNjb3VudGVkKCkpOwoKICAgICAgJG1hdGNoX2lkeCA9IC0xOwogICAgICBpZiggJHRlc3Rlci0+ZmluZF9jYXJ0X21hdGNoKCRtYXRjaF9pZHgpICkgewoJLy8gc28gZmFyLCBzbyBnb29kLi4uIG9mZmVyIG1hdGNoZXMgdGhpcyBpdGVtLi4uIGFuZCBtYXliZSBldmVuIHRoZSBjYXJ0IG1hdGNoZXMgdGhlIGNvbmRpdGlvbnMuCgkkbWF0Y2ggPSBuZXcgXGNnX2Vjb21tX3Byb21vdGlvbl9tYXRjaDsKCXN3aXRjaCggJHByb21vLT5nZXRfb2ZmZXJfdHlwZSgpICkgewoJY2FzZSBQUk9NT1RJT05TX09GRkVSX1BST0RVQ1Q6CgkgICRtYXRjaC0+c2V0X3R5cGUoJG1hdGNoOjpPRkZFUl9QUk9EVUNUSUQpOwoJICAkbWF0Y2gtPnNldF92YWwoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpKTsKCSAgJG1hdGNoLT5zZXRfcHJvbW8oJHByb21vLT5nZXRfaWQoKSk7CgkgICRtYXRjaC0+c2V0X25hbWUoJHByb21vLT5nZXRfbmFtZSgpKTsKCSAgJG1hdGNoLT5zZXRfY2FydF9pZHgoJG1hdGNoX2lkeCk7CgkgIC8vIGNhbm5vdCBiZSBjdW11bGF0aXZlIChpdHMgYSBuZXcgbGluZSBpdGVtKQoJICBicmVhazsKCgljYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPRFVDVFNLVToKCSAgJG1hdGNoLT5zZXRfdHlwZSgkbWF0Y2g6Ok9GRkVSX1BST0RVQ1RTS1UpOwoJICAkbWF0Y2gtPnNldF92YWwoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpKTsKCSAgJG1hdGNoLT5zZXRfcHJvbW8oJHByb21vLT5nZXRfaWQoKSk7CgkgICRtYXRjaC0+c2V0X25hbWUoJHByb21vLT5nZXRfbmFtZSgpKTsKCSAgJG1hdGNoLT5zZXRfY2FydF9pZHgoJG1hdGNoX2lkeCk7CgkgIC8vIGNhbm5vdCBiZSBjdW11bGF0aXZlIChpdHMgYSBuZXcgbGluZSBpdGVtKQoJICBicmVhazsKCgljYXNlIFBST01PVElPTlNfT0ZGRVJfUEVSQ0VOVDoKCSAgJG1hdGNoLT5zZXRfdHlwZSgkbWF0Y2g6Ok9GRkVSX1BFUkNFTlQpOwoJICAkbWF0Y2gtPnNldF92YWwoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpKTsKCSAgJG1hdGNoLT5zZXRfcHJvbW8oJHByb21vLT5nZXRfaWQoKSk7CgkgICRtYXRjaC0+c2V0X25hbWUoJHByb21vLT5nZXRfbmFtZSgpKTsKCSAgJG1hdGNoLT5zZXRfY3VtdWxhdGl2ZSgkcHJvbW8tPmdldF9leHRyYSgnYWxsb3dfY3VtdWxhdGl2ZScpKTsKCSAgYnJlYWs7CgoJY2FzZSBQUk9NT1RJT05TX09GRkVSX0RJU0NPVU5UOgoJICAkbWF0Y2gtPnNldF90eXBlKCRtYXRjaDo6T0ZGRVJfRElTQ09VTlQpOwoJICAkbWF0Y2gtPnNldF92YWwoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpKTsKCSAgJG1hdGNoLT5zZXRfcHJvbW8oJHByb21vLT5nZXRfaWQoKSk7CgkgICRtYXRjaC0+c2V0X25hbWUoJHByb21vLT5nZXRfbmFtZSgpKTsKCSAgJG1hdGNoLT5zZXRfY3VtdWxhdGl2ZSgkcHJvbW8tPmdldF9leHRyYSgnYWxsb3dfY3VtdWxhdGl2ZScpKTsKCSAgYnJlYWs7CgoJY2FzZSBQUk9NT1RJT05TX09GRkVSX1BST0RESVNDT1VOVDoKCSAgJG1hdGNoLT5zZXRfdHlwZSgkbWF0Y2g6Ok9GRkVSX1BFUkNFTlQpOwoJICAkbWF0Y2gtPnNldF92YWwoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpKTsKCSAgJG1hdGNoLT5zZXRfcHJvbW8oJHByb21vLT5nZXRfaWQoKSk7CgkgICRtYXRjaC0+c2V0X25hbWUoJHByb21vLT5nZXRfbmFtZSgpKTsKCSAgJG1hdGNoLT5zZXRfY2FydF9pZHgoJG1hdGNoX2lkeCk7CgkgICRtYXRjaC0+c2V0X2N1bXVsYXRpdmUoJHByb21vLT5nZXRfZXh0cmEoJ2FsbG93X2N1bXVsYXRpdmUnKSk7CgkgIGJyZWFrOwoKCWNhc2UgUFJPTU9USU9OU19PRkZFUl9QUk9EQU1PVU5UOgoJICAkbWF0Y2gtPnNldF90eXBlKCRtYXRjaDo6T0ZGRVJfRElTQ09VTlQpOwoJICAkbWF0Y2gtPnNldF92YWwoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpKTsKCSAgJG1hdGNoLT5zZXRfcHJvbW8oJHByb21vLT5nZXRfaWQoKSk7CgkgICRtYXRjaC0+c2V0X25hbWUoJHByb21vLT5nZXRfbmFtZSgpKTsKCSAgJG1hdGNoLT5zZXRfY2FydF9pZHgoJG1hdGNoX2lkeCk7CgkgICRtYXRjaC0+c2V0X2N1bXVsYXRpdmUoJHByb21vLT5nZXRfZXh0cmEoJ2FsbG93X2N1bXVsYXRpdmUnKSk7CgkgIGJyZWFrOwoKCWRlZmF1bHQ6CgkgIHRocm93IG5ldyBDbXNFeGNlcHRpb24oJ0ludmFsaWQgb2ZmZXIgdHlwZSBhdCB0aGlzIHN0YWdlOiAnLiRwcm9tby0+Z2V0X29mZmVyX3R5cGUoKSk7CgkgIGRpZSgnaWdub3JlZCcpOwoJICAvLyBhbiBpbnZhbGlkIG9mZmVyIHR5cGUgaXMganVzdCBpZ25vcmVkLgoJICBicmVhazsKCX0KCgkkbWF0Y2hlc1tdID0gJG1hdGNoOwogICAgICB9CiAgICB9CiAgICBpZiggY291bnQoJG1hdGNoZXMpICkgcmV0dXJuICRtYXRjaGVzOwogIH0KCiAgLyoqCiAgICogdGVzdCBpZiB0aGUgcHJvZHVjdCAob3Igc2t1KSBtYXRjaGVzIHRoZSBvZmZlciBwYXJ0CiAgICogb2YgYSBwcm9tb3Rpb24sIGFuZCBpZiB0aGUgY2FydCBjb250ZW50cyBtYXRjaCB0aGUgY29uZGl0aW9ucwogICAqIG9mIHRoZSBvZmZlci4gIFN0b3BzIGFmdGVyIHRoZSBmaXJzdCBtYXRjaC4KICAgKgogICAqIEByZXR1cm4gY2dfZWNvbW1fcHJvbW90aW9uX21hdGNoCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIGZpbmRfb2ZmZXJfbWF0Y2goKQogIHsKICAgIC8vIGNvbnZlcnRzIGEgY2dfZWNvbW10eXBlIHRvIGEgcHJvbW90aW9uIHR5cGUKICAgICR0eXBlID0gcHJvbW90aW9uOjpUWVBFX0NIRUNLT1VUOwogICAgc3dpdGNoKCAkdGhpcy0+Z2V0X3Byb21vX3R5cGUoKSApIHsKICAgIGNhc2Ugc2VsZjo6VFlQRV9JTlNUQU5UOgogICAgICAkdHlwZSA9IHByb21vdGlvbjo6VFlQRV9JTlNUQU5UOwogICAgICBicmVhazsKICAgIGNhc2Ugc2VsZjo6VFlQRV9DSEVDS09VVDoKICAgICAgJHR5cGUgPSBwcm9tb3Rpb246OlRZUEVfQ0hFQ0tPVVQ7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdGhyb3cgbmV3IENzbUludmFsaWREYXRhRXhjZXB0aW9uKCdVbmtub3duIHByb21vdGlvbiB0eXBlIGluICcuX19DTEFTU19fKTsKICAgIH0KCiAgICAkcHJvbW9zID0gcHJvbW90aW9uOjpsb2FkX2FsbF9ieV90eXBlKCR0eXBlKTsKICAgICRtYXRjaCA9IG51bGw7CiAgICBmb3JlYWNoKCAkcHJvbW9zIGFzICAkcHJvbW8gKSB7CiAgICAgIC8vIHRoZSBwcm9tbyB0ZXN0ZXIgdGVzdHMgYSBzaW5nbGUgcHJvbW90aW9uIGFnYWluc3QgdGhlIGl0ZW0gYmVpbmcgdGVzdGVkLgogICAgICAkdGVzdGVyID0gbmV3IHByb21vX3Rlc3RlcigkcHJvbW8pOwogICAgICBpZiggJHRoaXMtPmdldF9za3UoKSApICR0ZXN0ZXItPnNldF9za3UoJHRoaXMtPmdldF9za3UoKSk7CiAgICAgICR0ZXN0ZXItPnNldF9pZ25vcmVfZGlzY291bnRlZCgkdGhpcy0+Z2V0X2lnbm9yZV9kaXNjb3VudGVkKCkpOwogICAgICAkdGVzdGVyLT5zZXRfcHJvZHVjdCgkdGhpcy0+Z2V0X3Byb2R1Y3QoKSk7CiAgICAgICR0ZXN0ZXItPnNldF9jYXJ0KCR0aGlzLT5nZXRfY2FydCgpKTsKICAgICAgJHRlc3Rlci0+c2V0X2NvdXBvbnMoJHRoaXMtPl9jb3Vwb25zKTsKICAgICAgJG1hdGNoX2lkeCA9IC0xOwogICAgICBpZiggJHRlc3Rlci0+ZmluZF9vZmZlcl9tYXRjaCgpICYmICgkdGhpcy0+Z2V0X3NraXBfY2FydCgpIHx8ICR0ZXN0ZXItPmZpbmRfY2FydF9tYXRjaCgkbWF0Y2hfaWR4KSkgKSB7CgkvLyBzbyBmYXIsIHNvIGdvb2QuLi4gb2ZmZXIgbWF0Y2hlcyB0aGlzIGl0ZW0uLi4gYW5kIG1heWJlIGV2ZW4gdGhlIGNhcnQgbWF0Y2hlcyB0aGUgY29uZGl0aW9ucy4KCSRtYXRjaCA9IG5ldyBcY2dfZWNvbW1fcHJvbW90aW9uX21hdGNoOwoJc3dpdGNoKCAkcHJvbW8tPmdldF9vZmZlcl90eXBlKCkgKSB7CgljYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPRFVDVDoKCSAgLy8gZnJlZSBwcm9kdWN0IGJ5IGlkCgkgICRtYXRjaC0+c2V0X3R5cGUoJG1hdGNoOjpPRkZFUl9QUk9EVUNUSUQpOwoJICAkbWF0Y2gtPnNldF92YWwoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpKTsKCSAgJG1hdGNoLT5zZXRfcHJvbW8oJHByb21vLT5nZXRfaWQoKSk7CgkgICRtYXRjaC0+c2V0X25hbWUoJHByb21vLT5nZXRfbmFtZSgpKTsKCSAgJG1hdGNoLT5zZXRfY2FydF9pZHgoJG1hdGNoX2lkeCk7CgkgIGJyZWFrOwoKCWNhc2UgUFJPTU9USU9OU19PRkZFUl9QUk9EVUNUU0tVOgoJICAvLyBmcmVlIHByb2R1Y3QgYnkgc2t1CgkgICRtYXRjaC0+c2V0X3R5cGUoJG1hdGNoOjpPRkZFUl9QUk9EVUNUU0tVKTsKCSAgJG1hdGNoLT5zZXRfdmFsKCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSk7CgkgICRtYXRjaC0+c2V0X3Byb21vKCRwcm9tby0+Z2V0X2lkKCkpOwoJICAkbWF0Y2gtPnNldF9uYW1lKCRwcm9tby0+Z2V0X25hbWUoKSk7CgkgICRtYXRjaC0+c2V0X2NhcnRfaWR4KCRtYXRjaF9pZHgpOwoJICBicmVhazsKCgljYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPREFNT1VOVDoKCSAgLy8gZGlzY291bnQgYXBwbGljYWJsZSBwcm9kdWN0IGJ5IGZpeGVkIGFtb3VudAoJICAkbWF0Y2gtPnNldF90eXBlKCRtYXRjaDo6T0ZGRVJfRElTQ09VTlQpOwoJICAkbWF0Y2gtPnNldF9kaXNjb3VudF9hbXQoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpKTsKCSAgJG1hdGNoLT5zZXRfdmFsKCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSk7CgkgICRtYXRjaC0+c2V0X3Byb21vKCRwcm9tby0+Z2V0X2lkKCkpOwoJICAkbWF0Y2gtPnNldF9uYW1lKCRwcm9tby0+Z2V0X25hbWUoKSk7CgkgICRtYXRjaC0+c2V0X2NhcnRfaWR4KCRtYXRjaF9pZHgpOwoJICBicmVhazsKCgljYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPRERJU0NPVU5UOgoJICAvLyBkaXNjb3VudCBtYXRjaGluZyBwcm9kdWN0cyBieSBhIHBlcmNlbnRhZ2UKCSAgJG1hdGNoLT5zZXRfdHlwZSgkbWF0Y2g6Ok9GRkVSX1BFUkNFTlQpOwoJICAkbWF0Y2gtPnNldF9kaXNjb3VudF9hbXQoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpKTsKCSAgJG1hdGNoLT5zZXRfdmFsKCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSk7CgkgICRtYXRjaC0+c2V0X3Byb21vKCRwcm9tby0+Z2V0X2lkKCkpOwoJICAkbWF0Y2gtPnNldF9uYW1lKCRwcm9tby0+Z2V0X25hbWUoKSk7CgkgICRtYXRjaC0+c2V0X2NhcnRfaWR4KCRtYXRjaF9pZHgpOwoJICAvLyBub3RlLCBubyBjYXJ0IGluZGV4CgkgIGJyZWFrOwoKCWNhc2UgUFJPTU9USU9OU19PRkZFUl9QRVJDRU5UOgoJICAvLyBwZXJjZW50YWdlIG9mZiBvcmRlciB0b3RhbAoJICAkbWF0Y2gtPnNldF90eXBlKCRtYXRjaDo6T0ZGRVJfUEVSQ0VOVCk7CgkgICRtYXRjaC0+c2V0X3ZhbCgkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkpOwoJICAkbWF0Y2gtPnNldF9wcm9tbygkcHJvbW8tPmdldF9pZCgpKTsKCSAgJG1hdGNoLT5zZXRfbmFtZSgkcHJvbW8tPmdldF9uYW1lKCkpOwoJICAvLyBubyBjYXJ0IGluZGV4LgoJICBicmVhazsKCgljYXNlIFBST01PVElPTlNfT0ZGRVJfRElTQ09VTlQ6CgkgIC8vIHN1YnRyYWN0IGFtb3VudCBmcm9tIG9yZGVyIHRvdGFsCgkgICRtYXRjaC0+c2V0X3R5cGUoJG1hdGNoOjpPRkZFUl9ESVNDT1VOVCk7CgkgICRtYXRjaC0+c2V0X3ZhbCgkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkpOwoJICAkbWF0Y2gtPnNldF9wcm9tbygkcHJvbW8tPmdldF9pZCgpKTsKCSAgJG1hdGNoLT5zZXRfbmFtZSgkcHJvbW8tPmdldF9uYW1lKCkpOwoJICAvLyBubyBjYXJ0IGluZGV4LgoJICBicmVhazsKCgljYXNlIFBST01PVElPTlNfT0ZGRVJfU0FNRVBST0RVQ1Q6CgkgIGRpZSgnbm90IGRvbmUnKTsKCSAgYnJlYWs7CgoJZGVmYXVsdDoKCSAgLy8gYW4gaW52YWxpZCBvZmZlciB0eXBlIGlzIGp1c3QgaWdub3JlZC4KCSAgYnJlYWs7Cgl9CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJG1hdGNoOwogIH0KfSAvLyBlbmQgb2YgY2xhc3MKCiMKIyBFT0YKIwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.promo_ops.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gYWxsb3cgY3JlYXRpbmcsIGludGVyZmFjaW5nIHdpdGgKIyAgYW5kIG1hbmFnaW5nIHByb21vdGlvbnMgb3Igc2FsZXMgaW4gdGhlIEUtY29tZW1yY2Ugc3VpdGUuCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdHMgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4KIyBzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI0VORF9MSUNFTlNFCm5hbWVzcGFjZSBQcm9tb3Rpb25zOwoKY2xhc3MgcHJvbW9fb3BzCnsKICAgIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uICZfZ2V0X2RiKCkKICAgIHsKICAgICAgICAkZ0NtcyA9IGNtc21zKCk7CiAgICAgICAgJGRiID0mICRnQ21zLT5HZXREYigpOwogICAgICAgIHJldHVybiAkZGI7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gJl9nZXRfcHJvZHVjdHNfbW9kKCkKICAgIHsKICAgICAgICByZXR1cm4gXGNtc191dGlsczo6Z2V0X21vZHVsZSgnUHJvZHVjdHMnKTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiAmX2dldF9wcm9kdWN0KCRwcm9kdWN0X2lkKQogICAgewogICAgICAgICRwcm9kID0gXGNnX2Vjb21tOjpnZXRfcHJvZHVjdF9pbmZvKCdQcm9kdWN0cycsJHByb2R1Y3RfaWQpOwogICAgICAgIHJldHVybiAkcHJvZDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGxvYWRfcHJvbW9fYnlfaWQoJGlkKQogICAgewogICAgICAgIHJldHVybiBwcm9tb3Rpb246OmxvYWRfYnlfaWQoJGlkKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzX3ZhbGlkX2NvdXBvbigkY29kZSkKICAgIHsKICAgICAgICAkZGIgPSBzZWxmOjpfZ2V0X2RiKCk7CiAgICAgICAgJHF1ZXJ5ID0gJ1NFTEVDVCBBLmlkIEZST00gJy5QUk9NT1RJT05TX1RBQkxFLicgQQogICAgICAgICAgICAgICAgTEVGVCBKT0lOICcuUFJPTU9USU9OU19DT05EX1RBQkxFLicgQgogICAgICAgICAgICAgICAgICBPTiBBLmlkID0gQi5wcm9tb3Rpb25faWQKICAgICAgICAgICAgICAgV0hFUkUgTk9XKCkgQkVUV0VFTiBBLnN0YXJ0X2RhdGUgQU5EIEEuZW5kX2RhdGUKICAgICAgICAgICAgICAgICBBTkQgQi5jb25kX3R5cGUgPSA/CiAgICAgICAgICAgICAgICAgQU5EIEIuZGF0YSA9ID8nOwogICAgICAgICR0bXAgPSAkZGItPkdldE9uZSgkcXVlcnksYXJyYXkoUFJPTU9USU9OU19DT05EX0NPVVBPTiwkY29kZSkpOwogICAgICAgIHJldHVybiAkdG1wOwogICAgfQoKCiAgICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIGNoZWNrX3VudXNlZF9jb3Vwb24oJG5hbWUsJGFsbG93X3Byb21vID0gJycpCiAgICB7CiAgICAgICAgLy8gaG1tbSwgbWF5YmUgd2Ugc2hvdWxkIGFsbG93IHJldXNlIG9mIGNvdXBvbiBjb2RlcyB0aGF0IGFyZSBleHBpcmVkLgogICAgICAgICRkYiA9IHNlbGY6Ol9nZXRfZGIoKTsKICAgICAgICAkd2hlcmUgPSBhcnJheSgpOwogICAgICAgICRwYXJtcyA9IGFycmF5KCk7CgogICAgICAgICR3aGVyZVtdID0gJ2NvbmRfdHlwZSA9ID8nOwogICAgICAgICRwYXJtc1tdID0gUFJPTU9USU9OU19DT05EX0NPVVBPTjsKICAgICAgICAkd2hlcmVbXSA9ICdkYXRhID0gPyc7CiAgICAgICAgJHBhcm1zW10gPSAkbmFtZTsKICAgICAgICBpZiggJGFsbG93X3Byb21vICkgewogICAgICAgICAgICAkd2hlcmVbXSA9ICdwcm9tb3Rpb25faWQgIT0gPyc7CiAgICAgICAgICAgICRwYXJtc1tdID0gJGFsbG93X3Byb21vOwogICAgICAgIH0KICAgICAgICAkcXVlcnkgPSAnU0VMRUNUIGlkIEZST00gJy5QUk9NT1RJT05TX0NPTkRfVEFCTEU7CiAgICAgICAgJHF1ZXJ5IC49ICcgV0hFUkUgJy5pbXBsb2RlKCcgQU5EICcsJHdoZXJlKTsKICAgICAgICAkdG1wID0gJGRiLT5HZXRPbmUoJHF1ZXJ5LCRwYXJtcyk7CiAgICAgICAgaWYoICR0bXAgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgcmV0dXJuIFRSVUU7CiAgICB9CgoKICAgIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gY2hlY2tfdW51c2VkX25hbWUoJG5hbWUsJGlkPScnKQogICAgewogICAgICAgICRnQ21zID0gY21zbXMoKTsKICAgICAgICAkZGIgPSAkZ0Ntcy0+R2V0RGIoKTsKCiAgICAgICAgaWYoIGVtcHR5KCRpZCkgKSB7CiAgICAgICAgICAgICRxdWVyeSA9ICdTRUxFQ1QgaWQgRlJPTSAnLlBST01PVElPTlNfVEFCTEUuJyBXSEVSRSBuYW1lID0gPyc7CiAgICAgICAgICAgICR0bXAgPSAkZGItPkdldE9uZSgkcXVlcnksYXJyYXkoJG5hbWUpKTsKICAgICAgICAgICAgaWYoICR0bXAgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgICAgIHJldHVybiBUUlVFOwogICAgICAgIH0KCiAgICAgICAgJHF1ZXJ5ID0gJ1NFTEVDVCBpZCBGUk9NICcuUFJPTU9USU9OU19UQUJMRS4nIFdIRVJFIG5hbWUgPSA/IEFORCBpZCAhPSA/JzsKICAgICAgICAkdG1wID0gJGRiLT5HZXRPbmUoJHF1ZXJ5LGFycmF5KCRuYW1lLCRpZCkpOwogICAgICAgIGlmKCAkdG1wICkgcmV0dXJuIEZBTFNFOwogICAgICAgIHJldHVybiBUUlVFOwogICAgfQoKCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhbGNfdG90YWxfZGlzY291bnQoJGNhcnRfaXRlbXMpCiAgICB7CiAgICAgICAgJGRpc2NvdW50ID0gMDsKICAgICAgICBmb3IoICRpID0gMDsgJGkgPCBjb3VudCgkY2FydF9pdGVtcyk7ICRpKysgKSB7CiAgICAgICAgICAgICRkaXNjb3VudCArPSAkY2FydF9pdGVtc1skaV0tPmdldF9kaXNjb3VudCgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJGRpc2NvdW50OwogICAgfQoKCiAgICAvKioKICAgICAqIEdpdmVuIGEgcHJvZHVjdCBpZCBhbmQgYW4gYXBwbGljYWJsZSAoYWxyZWFkeSB0ZXN0ZWQpIHByb21vdGlvbgogICAgICogY2FsY3VsYXRlIHRoZSBkaXNjb3VudCAoaWYgYW55KSBmb3IgdGhpcyBwcm9kdWN0CiAgICAgKgogICAgICogQHBhcmFtIHRoZSBwcm9tb3Rpb24gb2JqZWN0CiAgICAgKiBAcGFyYW0gdGhlIHByb2R1Y3QgaWQKICAgICAqIEByZXR1cm5zIEZBTFNFIG9uIGZhaWx1cmUsIG9yIGEgaGFzaCBjb250YWluaW5nIHRoZSBkaWZmZXJlbnQKICAgICAqICBkaXNjb3VudCBhdHRyaWJ1dGVzLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhbGN1bGF0ZV9wcm9kdWN0X2Rpc2NvdW50KCYkcHJvbW8sJHByb2R1Y3RfaWQpCiAgICB7CiAgICAgICAgJHByb2R1Y3QgPSBzZWxmOjpfZ2V0X3Byb2R1Y3QoJHByb2R1Y3RfaWQpOwogICAgICAgIGlmKCAhaXNfYXJyYXkoJHByb2R1Y3QpICkgcmV0dXJuIEZBTFNFOwoKICAgICAgICAkcGVyY2VudCA9ICcnOwogICAgICAgICRkaXNjb3VudCA9ICcnOwogICAgICAgICRmcmVlX3Byb2R1Y3QgPSAnJzsKICAgICAgICBzd2l0Y2goICRwcm9tby0+Z2V0X29mZmVyX3R5cGUoKSApIHsKICAgICAgICBjYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPRFVDVDoKICAgICAgICAgICAgLy8gd2UgZ2V0IGEgZnJlZSBwcm9kdWN0LgogICAgICAgICAgICAkZnJlZV9wcm9kdWN0ID0gJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBQUk9NT1RJT05TX09GRkVSX1BFUkNFTlQ6CiAgICAgICAgICAgIC8vIGNhbGN1bGF0ZSBOICUgb2ZmCiAgICAgICAgICAgICRwZXJjZW50ID0gJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpICogLTEuMDsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgUFJPTU9USU9OU19PRkZFUl9ESVNDT1VOVDoKICAgICAgICAgICAgLy8gY2FsY3VsYXRlICROIG9mZgogICAgICAgICAgICAkZGlzY291bnQgPSAkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkgKiAtMS4wOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBQUk9NT1RJT05TX09GRkVSX1BST0RESVNDT1VOVDoKICAgICAgICAgICAgJHBlcmNlbnQgPSAkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkgKiAtMS4wOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICAgIGlmKCBlbXB0eSgkcGVyY2VudCkgKSB7CiAgICAgICAgICAgICRwZXJjZW50ID0gJGRpc2NvdW50IC8gJHByb2R1Y3QtPmdldF9wcmljZSgpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmKCBlbXB0eSgkZGlzY291bnQpICkgewogICAgICAgICAgICAkZGlzY291bnQgPSAkcHJvZHVjdC0+Z2V0X3ByaWNlKCkgKiAkcGVyY2VudDsKICAgICAgICB9CgogICAgICAgICRyZXMgPSBhcnJheSgncHJvZHVjdF9pZCc9PiRmcmVlX3Byb2R1Y3QpOwogICAgICAgICRyZXNbJ3BlcmNlbnRhZ2UnXSA9ICRwZXJjZW50OwogICAgICAgICRyZXNbJ2Rpc2NvdW50J10gPSAkZGlzY291bnQ7CiAgICAgICAgcmV0dXJuICRyZXM7CiAgICB9CgoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2FsY3VsYXRlX2Rpc2NvdW50KCYkcHJvbW8sJHN1YnRvdGFsLCRjYXJ0X2l0ZW1zKQogICAgewogICAgICAgICRuZXdfaXRlbXMgPSBhcnJheSgpOwogICAgICAgIHN3aXRjaCggJHByb21vLT5nZXRfb2ZmZXJfdHlwZSgpICkgewogICAgICAgIGNhc2UgUFJPTU9USU9OU19PRkZFUl9QRVJDRU5UOgogICAgICAgICAgICAvLyBjYWxjdWxhdGUgTiAlIG9mZiBlYWNoIGl0ZW0uLi4gYW4gZmlsbCBpbiB0aGUgZGlzY291bnQgZmllbGQuCiAgICAgICAgICAgIGZvciggJGkgPSAwOyAkaSA8IGNvdW50KCRjYXJ0X2l0ZW1zKTsgJGkrKyApIHsKICAgICAgICAgICAgICAgICRpdGVtID0gJGNhcnRfaXRlbXNbJGldOwogICAgICAgICAgICAgICAgJGl0ZW0tPnNldF9kaXNjb3VudCgkaXRlbS0+Z2V0X3VuaXRfcHJpY2UoKSAqICRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSAqIC0xLjApOwogICAgICAgICAgICAgICAgJG5ld19pdGVtc1tdID0gJGl0ZW07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgUFJPTU9USU9OU19PRkZFUl9ESVNDT1VOVDoKICAgICAgICAgICAgLy8gY2FsY3VsYXRlICROIG9mZgogICAgICAgICAgICBmb3IoICRpID0gMDsgJGkgPCBjb3VudCgkY2FydF9pdGVtcyk7ICRpKysgKSB7CiAgICAgICAgICAgICAgICAkaXRlbSA9IGNsb25lKCRjYXJ0X2l0ZW1zWyRpXSk7CiAgICAgICAgICAgICAgICAkbmV3X2l0ZW1zW10gPSAkaXRlbTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkaXRlbSA9IG5ldyBsaW5lX2l0ZW0oKTsKICAgICAgICAgICAgJGl0ZW0tPnNldF9zb3VyY2UoJ1Byb2R1Y3RzJyk7CiAgICAgICAgICAgICRpdGVtLT5zZXRfZGVzY3JpcHRpb24oJHByb21vLT5nZXRfbmFtZSgpKTsKICAgICAgICAgICAgJGl0ZW0tPnNldF9pdGVtX3R5cGUobGluZV9pdGVtOjpJVEVNVFlQRV9ESVNDT1VOVCk7CiAgICAgICAgICAgICRpdGVtLT5zZXRfcXVhbnRpdHkoMSk7CiAgICAgICAgICAgICRpdGVtLT5zZXRfZGlzY291bnQoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpICogLTEuMCk7CiAgICAgICAgICAgICRuZXdfaXRlbXNbXSA9ICRpdGVtOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBQUk9NT1RJT05TX09GRkVSX1BST0RVQ1Q6CiAgICAgICAgICAgIC8vIG9mZmVyIGEgZnJlZSBwcm9kdWN0LgogICAgICAgICAgICBmb3IoICRpID0gMDsgJGkgPCBjb3VudCgkY2FydF9pdGVtcyk7ICRpKysgKSB7CiAgICAgICAgICAgICAgICAkaXRlbSA9IGNsb25lKCRjYXJ0X2l0ZW1zWyRpXSk7CiAgICAgICAgICAgICAgICAkbmV3X2l0ZW1zW10gPSAkaXRlbTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkaXRlbSA9IG5ldyBsaW5lX2l0ZW0oKTsKICAgICAgICAgICAgJGl0ZW0tPnNldF9zb3VyY2UoJ1Byb2R1Y3RzJyk7CiAgICAgICAgICAgICRpdGVtLT5zZXRfZGVzY3JpcHRpb24oJHByb21vLT5nZXRfbmFtZSgpKTsKICAgICAgICAgICAgJGl0ZW0tPnNldF9pdGVtX3R5cGUobGluZV9pdGVtOjpJVEVNVFlQRV9QUk9EVUNUKTsKICAgICAgICAgICAgJGl0ZW0tPnNldF9zdGF0dXMoSVRFTVNUQVRVU19OT1RTSElQUEVEKTsKICAgICAgICAgICAgJGl0ZW0tPnNldF9xdWFudGl0eSgxKTsKICAgICAgICAgICAgJHByb2R1Y3QgPSBzZWxmOjpfZ2V0X3Byb2R1Y3QoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpKTsKICAgICAgICAgICAgaWYoICEkcHJvZHVjdCApIHJldHVybiBGQUxTRTsKICAgICAgICAgICAgJGl0ZW0tPnNldF91bml0X3ByaWNlKCRwcm9kdWN0LT5nZXRfcHJpY2UoKSk7CiAgICAgICAgICAgICRpdGVtLT5zZXRfZGlzY291bnQoJHByb2R1Y3QtPmdldF9wcmljZSgpICogLTEuMCk7CiAgICAgICAgICAgICRpdGVtLT5zZXRfd2VpZ2h0KCRwcm9kdWN0LT5nZXRfd2VpZ2h0KCkpOwogICAgICAgICAgICAkaXRlbS0+c2V0X3NrdSgkcHJvZHVjdC0+Z2V0X3NrdSgpKTsKICAgICAgICAgICAgJG5ld19pdGVtc1tdID0gJGl0ZW07CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPRERJU0NPVU5UOgogICAgICAgICAgICAvLyBkaXNjb3VudCB0aGUgYXBwbGljYWJsZSBwcm9kdWN0cyBieSBhIHBlcmNlbnRhZ2UKICAgICAgICAgICAgJHByb2R1Y3RzID0gYXJyYXkoKTsKICAgICAgICAgICAgZm9yKCAkaSA9IDA7ICRpIDwgJHByb21vLT5jb3VudF9jb25kaXRpb25zKCk7ICRpKysgKSB7CiAgICAgICAgICAgICAgICAkY29uZGl0aW9uID0gJHByb21vLT5nZXRfY29uZGl0aW9uKCRpKTsKICAgICAgICAgICAgICAgIHN3aXRjaCggJGNvbmRpdGlvbi0+Z2V0X2NvbmRfdHlwZSgpICkgewogICAgICAgICAgICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfUFJPRElEOgogICAgICAgICAgICAgICAgICAgICRwcm9kdWN0cyA9IGV4cGxvZGUoJywnLCRjb25kaXRpb24tPmdldF9kYXRhKCkpOwogICAgICAgICAgICAgICAgICAgICRpID0gJHByb21vLT5jb3VudF9jb25kaXRpb25zKCk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfUFJPREhJRVI6CiAgICAgICAgICAgICAgICAgICAgJHByb2R1Y3RzID0gUHJvZHVjdHM6OkdldFByb2R1Y3RJZHNGcm9tSGllcmFyY2h5KCRjb25kaXRpb24tPmdldF9kYXRhKCksJy4nKTsKICAgICAgICAgICAgICAgICAgICAkaSA9ICRwcm9tby0+Y291bnRfY29uZGl0aW9ucygpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1BST0RDQVQ6CiAgICAgICAgICAgICAgICAgICAgJHByb2R1Y3RzID0gUHJvZHVjdHM6OkdldFByb2R1Y3RJZHNGcm9tQ2F0ZWdvcmllcygkY29uZGl0aW9uLT5nZXRfZGF0YSgpKTsKICAgICAgICAgICAgICAgICAgICAkaSA9ICRwcm9tby0+Y291bnRfY29uZGl0aW9ucygpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIGNoZWNrIGlmIHdlIGZvdW5kIG1hdGNoaW5nIHByb2R1Y3RzPwogICAgICAgICAgICBpZiggISRwcm9kdWN0cyApIGJyZWFrOwoKICAgICAgICAgICAgLy8gd2UgZGlkLi4uIHNvIHdlIGhhdmUgdG8gZG8gc29tZXRoaW5nIHdpdGggZWFjaCBwcm9kdWN0Li4KICAgICAgICAgICAgZm9yKCAkaSA9IDA7ICRpIDwgY291bnQoJGNhcnRfaXRlbXMpOyAkaSsrICkgewogICAgICAgICAgICAgICAgJGl0ZW0gPSBjbG9uZSgkY2FydF9pdGVtc1skaV0pOwogICAgICAgICAgICAgICAgaWYoICRpdGVtLT5nZXRfaXRlbV90eXBlKCkgPT0gbGluZV9pdGVtOjpJVEVNVFlQRV9QUk9EVUNUICYmCiAgICAgICAgICAgICAgICAgICAgaW5fYXJyYXkoJGl0ZW0tPmdldF9pdGVtX2lkKCksJHByb2R1Y3RzKSApIHsKICAgICAgICAgICAgICAgICAgICAkaXRlbS0+c2V0X2Rpc2NvdW50KCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSAqICRpdGVtLT5nZXRfdW5pdF9wcmljZSgpICogLTEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJG5ld19pdGVtc1tdID0gJGl0ZW07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJG5ld19pdGVtczsKICAgIH0KfSAvLyBjbGFzcwoKIwojIEVPRgojCg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.promo_tester.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMTIgYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gYWxsb3cgY3JlYXRpbmcsIGludGVyZmFjaW5nIHdpdGgKIyAgYW5kIG1hbmFnaW5nIHByb21vdGlvbnMgb3Igc2FsZXMgaW4gdGhlIEUtY29tZW1yY2Ugc3VpdGUuCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQpuYW1lc3BhY2UgUHJvbW90aW9uczsKCi8qKgogKiBUaGlzIGNsYXNzIGlzIGFuIGFzc2lzdGFudCB0byB0aGUgcHJvbW90aW9uX3Rlc3RlciBjbGFzcy4KICogVGhpcyBjbGFzcyBvcGVyYXRlcyBvbiBzaW5nbGUgcHJvbW90aW9ucy4KICovCmNsYXNzIHByb21vX3Rlc3Rlcgp7CiAgICBwcml2YXRlICRfcDsKICAgIHByaXZhdGUgJF9za3U7CiAgICBwcml2YXRlICRfcHJvZHVjdDsKICAgIHByaXZhdGUgJF9xdWFudGl0eTsKICAgIHByaXZhdGUgJF9jYXJ0OwogICAgcHJpdmF0ZSAkX2F1dG9fZmV1ID0gVFJVRTsKICAgIHByaXZhdGUgJF9mZXVfdWlkID0gbnVsbDsKICAgIHByaXZhdGUgJF9jb3Vwb25zID0gbnVsbDsKICAgIHByaXZhdGUgJF9pZ25vcmVfZGlzY291bnRlZDsKCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9nZXRfc2t1KCkKICAgIHsKICAgICAgICAkc2t1ID0gbnVsbDsKICAgICAgICBpZiggJHRoaXMtPl9wcm9kdWN0ICkgJHNrdSA9ICR0aGlzLT5fcHJvZHVjdC0+Z2V0X3NrdSgpOwogICAgICAgIGlmKCAkdGhpcy0+X3NrdSApICRza3UgPSAkdGhpcy0+X3NrdTsKICAgICAgICByZXR1cm4gJHNrdTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QocHJvbW90aW9uICRwcm9tbykKICAgIHsKICAgICAgICAkdGhpcy0+X3AgPSAkcHJvbW87CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldF9hdXRvX2ZldSgkZmxhZyA9IFRSVUUpCiAgICB7CiAgICAgICAgJHRoaXMtPl9hdXRvX2ZldSA9IChib29sKSRmbGFnOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfZmV1X3VpZCgkdWlkKQogICAgewogICAgICAgIGlmKCAkdWlkID4gMCApICR0aGlzLT5fZmV1X3VpZCA9ICR1aWQ7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBfZ2V0X2ZldV91aWQoKQogICAgewogICAgICAgIGlmKCAhaXNfbnVsbCgkX2ZldV91aWQpICkgcmV0dXJuICR0aGlzLT5fZmV1X3VpZDsKCiAgICAgICAgaWYoICR0aGlzLT5fYXV0b19mZXUgKSB7CiAgICAgICAgICAgICRmZXUgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0Zyb250RW5kVXNlcnMnKTsKICAgICAgICAgICAgaWYoIGlzX29iamVjdCgkZmV1KSApIHsKICAgICAgICAgICAgICAgICR0aGlzLT5fZmV1X3VpZCA9ICRmZXUtPkxvZ2dlZEluSWQoKTsKICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+X2ZldV91aWQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBfaXRlbV9kaXNjb3VudGVkKCRpZHgpCiAgICB7CiAgICAgICAgaWYoICR0aGlzLT5faWdub3JlX2Rpc2NvdW50ZWQgKSByZXR1cm4gRkFMU0U7CgogICAgICAgIGZvciggJGkgPSAwOyAkaSA8IGNvdW50KCR0aGlzLT5fY2FydCk7ICRpKysgKSB7CiAgICAgICAgICAgICRpdGVtID0gJHRoaXMtPl9jYXJ0WyRpXTsKICAgICAgICAgICAgaWYoICRpdGVtLT5nZXRfcGFyZW50KCkgIT0gJGlkeCApIGNvbnRpbnVlOwogICAgICAgICAgICBpZiggJGl0ZW0tPmdldF9wYXJlbnQoKSA+IC0xICkgcmV0dXJuIFRSVUU7CiAgICAgICAgICAgIGlmKCAkaXRlbS0+Z2V0X3VuaXRfZGlzY291bnQoKSAhPSAwICkgcmV0dXJuIFRSVUU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gRkFMU0U7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldF9za3UoJHNrdSkKICAgIHsKICAgICAgICAkdGhpcy0+X3NrdSA9ICRza3U7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldF9wcm9kdWN0KFxjZ19lY29tbV9wcm9kdWN0aW5mbyAkcHJvZHVjdCkKICAgIHsKICAgICAgICAkdGhpcy0+X3Byb2R1Y3QgPSAkcHJvZHVjdDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X3F1YW50aXR5KCRubikKICAgIHsKICAgICAgICAkdGhpcy0+X3F1YW50aXR5ID0gKGludCkkbm47CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldF9pZ25vcmVfZGlzY291bnRlZCgkdmFsKQogICAgewogICAgICAgICR0aGlzLT5faWdub3JlX2Rpc2NvdW50ZWQgPSBjbXNfdG9fYm9vbCgkdmFsKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X2NhcnQoJGl0ZW1zKQogICAgewogICAgICAgIGlmKCBpc19hcnJheSgkaXRlbXMpICYmIGNvdW50KCRpdGVtcykgKSAkdGhpcy0+X2NhcnQgPSAkaXRlbXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldF9jb3Vwb25zKCRpdGVtcykKICAgIHsKICAgICAgICBpZiggaXNfYXJyYXkoJGl0ZW1zKSAmJiBjb3VudCgkaXRlbXMpICkgJHRoaXMtPl9jb3Vwb25zID0gJGl0ZW1zOwogICAgfQoKICAgIC8qKgogICAgICogQ2FsY3VsYXRlcyB0aGUgJ3N1YnRvdGFsJyBvZiBhbGwgY2FydCBpdGVtcwogICAgICogaW5jbHVkaW5nIGRpc3Njb3VudHMgYWxyZWFkeSBhcHBsaWVkCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX2NhbGNfb3JkZXJfc3VidG90YWwoJGluY2x1ZGVfZGlzY291bnRlZCA9IEZBTFNFKQogICAgewogICAgICAgICR2ID0gMDsKICAgICAgICBpZiggaXNfYXJyYXkoJHRoaXMtPl9jYXJ0KSAmJiBjb3VudCgkdGhpcy0+X2NhcnQpICkgewogICAgICAgICAgICBmb3JlYWNoKCAkdGhpcy0+X2NhcnQgYXMgJGl0ZW0gKSB7CiAgICAgICAgICAgICAgICBpZiggIWlzX2EoJGl0ZW0sJ2NnX2Vjb21tX2NhcnRpdGVtJykgKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbiBoZXJlCiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYoICEkaW5jbHVkZV9kaXNjb3VudGVkICYmICRpdGVtLT5nZXRfdW5pdF9kaXNjb3VudCgpICE9IDAgKSBjb250aW51ZTsKICAgICAgICAgICAgICAgIGlmKCAhJGluY2x1ZGVfZGlzY291bnRlZCAmJiAkaXRlbS0+Z2V0X3BhcmVudCgpID49IDAgKSBjb250aW51ZTsKICAgICAgICAgICAgICAgICR2ICs9ICRpdGVtLT5nZXRfaXRlbV90b3RhbCgpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkdjsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9jYWxjX29yZGVyX3dlaWdodCgpCiAgICB7CiAgICAgICAgJHYgPSAwOwogICAgICAgIGlmKCBpc19hcnJheSgkdGhpcy0+X2NhcnQpICYmIGNvdW50KCR0aGlzLT5fY2FydCkgKSB7CiAgICAgICAgICAgIGZvcmVhY2goICR0aGlzLT5fY2FydCBhcyAkaXRlbSApIHsKICAgICAgICAgICAgICAgIGlmKCAhaXNfYSgkaXRlbSwnY2dfZWNvbW1fY2FydGl0ZW0nKSApIHsKICAgICAgICAgICAgICAgICAgICAvLyBzaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uIGhlcmUKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkdiArPSAkaXRlbS0+Z2V0X3VuaXRfd2VpZ2h0KCkgKiAkaXRlbS0+Z2V0X3F1YW50aXR5KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICR2OwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gX2dldF9za3VfcXVhbnRpdHkoJHNrdSkKICAgIHsKICAgICAgICAkdiA9IDA7CiAgICAgICAgaWYoICEkc2t1ICkgcmV0dXJuICR2OwoKICAgICAgICBpZiggaXNfYXJyYXkoJHRoaXMtPl9jYXJ0KSAmJiBjb3VudCgkdGhpcy0+X2NhcnQpICkgewogICAgICAgICAgICBmb3JlYWNoKCAkdGhpcy0+X2NhcnQgYXMgJGl0ZW0gKSB7CiAgICAgICAgICAgICAgICBpZiggIWlzX2EoJGl0ZW0sJ2NnX2Vjb21tX2NhcnRpdGVtJykgKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbiBoZXJlCiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYoICRza3UgIT0gJGl0ZW0tPmdldF9za3UoKSApIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgJHYgKz0gJGl0ZW0tPmdldF9xdWFudGl0eSgpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkdjsKICAgIH0KCiAgICAvLyByZXR1cm5zIGJvb2xlYW4KICAgIHB1YmxpYyBmdW5jdGlvbiBmaW5kX21hdGNoKCkKICAgIHsKICAgICAgICAkbWF0Y2hfY291bnQgPSAwOwogICAgICAgIGZvciggJGkgPSAwOyAkaSA8ICR0aGlzLT5fcC0+Y291bnRfY29uZGl0aW9ucygpOyAkaSsrICkgewogICAgICAgICAgICAkY29uZGl0aW9uID0gJHRoaXMtPl9wLT5nZXRfY29uZGl0aW9uKCRpKTsKCiAgICAgICAgICAgIHN3aXRjaCggJGNvbmRpdGlvbi0+Z2V0X2NvbmRfdHlwZSgpICkgewogICAgICAgICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9GRVU6CiAgICAgICAgICAgICAgICAvLyB0ZXN0IHVzZXIgaXMgbWVtYmVyIG9mIGZldSBncm91cC4KICAgICAgICAgICAgICAgIGlmKCBjb25kaXRpb25fdGVzdHM6OnRlc3RfZmV1X3VpZCgkY29uZGl0aW9uKSApIHsKICAgICAgICAgICAgICAgICAgICAkbWF0Y2hfY291bnQrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfU1VCVE9UQUw6CiAgICAgICAgICAgICAgICBpZiggIWlzX251bWVyaWMoJGNvbmRpdGlvbi0+Z2V0X2RhdGEoKSkgKSBicmVhazsKICAgICAgICAgICAgICAgIGlmKCAkdGhpcy0+X2NhbGNfb3JkZXJfc3VidG90YWwoKSA+PSAoZmxvYXQpJGNvbmRpdGlvbi0+Z2V0X2RhdGEoKSApIHsKICAgICAgICAgICAgICAgICAgICAkbWF0Y2hfY291bnQrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfV0VJR0hUOgogICAgICAgICAgICAgICAgaWYoICFpc19udW1lcmljKCRjb25kaXRpb24tPmdldF9kYXRhKCkpICkgYnJlYWs7CiAgICAgICAgICAgICAgICBpZiggJHRoaXMtPl9jYWxjX29yZGVyX3dlaWdodCgpID49IChmbG9hdCkkY29uZGl0aW9uLT5nZXRfZGF0YSgpICkgewogICAgICAgICAgICAgICAgICAgICRtYXRjaF9jb3VudCsrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9DT1VQT046CiAgICAgICAgICAgICAgICBpZiggaXNfYXJyYXkoJHRoaXMtPl9jb3Vwb25zKSAmJiBjb3VudCgkdGhpcy0+X2NvdXBvbnMpICkgewogICAgICAgICAgICAgICAgICAgIGZvcmVhY2goICR0aGlzLT5fY291cG9ucyBhcyAkY29kZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoIHN0cmNhc2VjbXAoJGNvZGUsICRjb25kaXRpb24tPmdldF9kYXRhKCkpID09IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbWF0Y2hfY291bnQrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9QUk9ESUQ6CiAgICAgICAgICAgICAgICBpZiggJHRoaXMtPl9wcm9kdWN0ICkgewogICAgICAgICAgICAgICAgICAgIC8vIHRlc3QgaWYgdGhpcyBwcm9kdWN0IG1hdGNoZXMgdGhlIHNwZWNpZmllZCBwcm9kdWN0IGlkCiAgICAgICAgICAgICAgICAgICAgJHRtcCA9IGV4cGxvZGUoJywnLCRjb25kaXRpb24tPmdldF9kYXRhKCkpOwogICAgICAgICAgICAgICAgICAgIGlmKCBpbl9hcnJheSgkdGhpcy0+X3Byb2R1Y3QtPmdldF9wcm9kdWN0X2lkKCksJHRtcCkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRtYXRjaF9jb3VudCsrOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX0JVTEtQVVJDSEFTRToKICAgICAgICAgICAgICAgIGlmKCAoJHNrdSA9ICR0aGlzLT5fZ2V0X3NrdSgpKSApIHsKICAgICAgICAgICAgICAgICAgICAvLyB0ZXN0IGlmIHRoaXMgc2t1IG1hdGNoZXMKICAgICAgICAgICAgICAgICAgICAkZGF0YSA9ICRjb25kaXRpb24tPmdldF9kYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgaWYoIGZubWF0Y2goJHNrdSwkZGF0YVswXSkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdyB0ZXN0IGlmIHRoZSBxdWFudGl0eSBtYXRjaGVzCiAgICAgICAgICAgICAgICAgICAgICAgICRudW0gPSAkdGhpcy0+X2dldF9za3VfcXVhbnRpdHkoJHNrdSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRudW0gKz0gKGludCkkdGhpcy0+X3F1YW50aXR5OwogICAgICAgICAgICAgICAgICAgICAgICBpZiggJG51bSA+IDAgJiYgJG51bSA+PSAkZGF0YVsxXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtYXRjaF9jb3VudCsrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1BST0RTS1U6CiAgICAgICAgICAgICAgICBpZiggKCRza3UgPSAkdGhpcy0+X2dldF9za3UoKSkgKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gdGVzdCBpZiB0aGlzIHNrdSBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgcHJvZHVjdCBza3UncwogICAgICAgICAgICAgICAgICAgICR0bXAgPSBleHBsb2RlKCcsJywkY29uZGl0aW9uLT5nZXRfZGF0YSgpKTsKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCAkdG1wIGFzICRvbmUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBmbm1hdGNoKCRvbmUsJHNrdSkgKSAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1hdGNoX2NvdW50Kys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfUFJPRENBVDoKICAgICAgICAgICAgICAgICRwcm9kdWN0cyA9IFByb2R1Y3RzOjpHZXRQcm9kdWN0SWRzRnJvbUNhdGVnb3JpZXMoJGNvbmRpdGlvbi0+Z2V0X2RhdGEoKSk7CiAgICAgICAgICAgICAgICBpZiggJHByb2R1Y3RzICkgewogICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgcHJvZHVjdCBpZHMgaW4gdGhzZSBjYXRlZ29yaWVzLgogICAgICAgICAgICAgICAgICAgIGlmKCAkdGhpcy0+X3Byb2R1Y3QgJiYgaW5fYXJyYXkoJHRoaXMtPl9wcm9kdWN0LT5nZXRfcHJvZHVjdF9pZCgpLCRwcm9kdWN0cykgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRtYXRjaF9jb3VudCsrOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1BST0RISUVSOgogICAgICAgICAgICAgICAgJHByb2R1Y3RzID0gUHJvZHVjdHM6OkdldFByb2R1Y3RJZHNGcm9tSGllcmFyY2h5KCRjb25kaXRpb24tPmdldF9kYXRhKCksJy4nKTsKICAgICAgICAgICAgICAgIGlmKCAkcHJvZHVjdHMgKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBwcm9kdWN0IGlkcyBpbiB0aHNlIGNhdGVnb3JpZXMuCiAgICAgICAgICAgICAgICAgICAgaWYoICR0aGlzLT5fcHJvZHVjdCAmJiBpbl9hcnJheSgkdGhpcy0+X3Byb2R1Y3QtPmdldF9wcm9kdWN0X2lkKCksJHByb2R1Y3RzKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJG1hdGNoX2NvdW50Kys7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9IC8vIHN3aXRjaAogICAgICAgIH0gLy8gZm9yIGVhY2ggY29uZGl0aW9uCgogICAgICAgIGlmKCAkbWF0Y2hfY291bnQgPT0gJHRoaXMtPl9wLT5jb3VudF9jb25kaXRpb25zKCkgKSB7CiAgICAgICAgICAgIGlmKCAkdGhpcy0+X3AtPmdldF9leHRyYSgnYWxsb3dfb25jZScpICkgewogICAgICAgICAgICAgICAgZm9yZWFjaCggJHRoaXMtPl9jYXJ0IGFzICRvbmVfaXRlbSApIHsKICAgICAgICAgICAgICAgICAgICBpZiggJG9uZV9pdGVtLT5nZXRfcHJvbW8oKSA9PSAkdGhpcy0+X3AtPmdldF9pZCgpICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBpdCBtYXRjaGVzLgogICAgICAgICAgICByZXR1cm4gVFJVRTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBGQUxTRTsKICAgIH0gLy8gZW5kIG9mIGZ1bmN0aW9uCgoKICAgIHB1YmxpYyBmdW5jdGlvbiBmaW5kX29mZmVyX21hdGNoKCkKICAgIHsKICAgICAgICAvLyB0ZXN0cyBpZiB0aGUgcHJvZHVjdCwgb3Igc2t1IG1hdGNoIHRoZSBvZmZlcgogICAgICAgIC8vIG5vdGUsIG9ubHkgd29ya3Mgd2l0aCBvZmZlciB0eXBlcyB0aGF0IGhhdmUgYSBwcm9kdWN0IGlkLCBvciBza3UgaW4gdGhlbS4KICAgICAgICAvLyByZXR1cm5zIGJvb2xlYW4uCgogICAgICAgIHN3aXRjaCggJHRoaXMtPl9wLT5nZXRfb2ZmZXJfdHlwZSgpICkgewogICAgICAgIGNhc2UgUFJPTU9USU9OU19PRkZFUl9QUk9EVUNUOgogICAgICAgICAgICBpZiggJHRoaXMtPl9wcm9kdWN0LT5nZXRfcHJvZHVjdF9pZCgpID09ICR0aGlzLT5fcC0+Z2V0X29mZmVyX2RhdGEoKSApIHsKICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPRFVDVFNLVToKICAgICAgICAgICAgaWYoICgkc2t1ID0gJHRoaXMtPl9nZXRfc2t1KCkpICkgewogICAgICAgICAgICAgICAgJHRtcCA9IGV4cGxvZGUoJywnLCR0aGlzLT5fcC0+Z2V0X29mZmVyX2RhdGEoKSk7CiAgICAgICAgICAgICAgICBmb3JlYWNoKCAkdG1wIGFzICRvbmUgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoIGZubWF0Y2goJG9uZSwkc2t1KSApIHJldHVybiBUUlVFOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgfSAvLyBlbmQgb2YgZnVuY3Rpb24KCiAgICAvKioKICAgICAqIFRlc3QgaWYgdGhlIGNvbnRlbnRzIG9mIHRoZSBjYXJ0IG1hdGNoIGFsbCBvZiB0aGUgY29uZGl0aW9ucyBmb3IgdGhpcyBwcm9tb3Rpb24uCiAgICAgKiBBdCBsZWFzdCBvbmUgb2YgdGhlIGNvbmRpdGlvbnMgaGFzIHRvIGJlIGEgJ3Byb2R1Y3QnIHR5cGUgbWF0Y2guCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmaW5kX2NhcnRfbWF0Y2goJiRtYXRjaGVkX2NhcnRpdGVtX2lkeCkKICAgIHsKICAgICAgICAkbWF0Y2hfY291bnQgPSAwOwogICAgICAgICRtYXRjaF9jYXJ0aXRlbSA9IC0xOwogICAgICAgIGZvciggJGkgPSAwOyAkaSA8ICR0aGlzLT5fcC0+Y291bnRfY29uZGl0aW9ucygpOyAkaSsrICkgewogICAgICAgICAgICAkY29uZGl0aW9uID0gJHRoaXMtPl9wLT5nZXRfY29uZGl0aW9uKCRpKTsKCiAgICAgICAgICAgIHN3aXRjaCggJGNvbmRpdGlvbi0+Z2V0X2NvbmRfdHlwZSgpICkgewogICAgICAgICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9GRVU6CiAgICAgICAgICAgICAgICAvLyB0ZXN0IHVzZXIgaXMgbWVtYmVyIG9mIGZldSBncm91cC4KICAgICAgICAgICAgICAgIGlmKCBjb25kaXRpb25fdGVzdHM6OnRlc3RfZmV1X3VpZCgkY29uZGl0aW9uKSApIHsKICAgICAgICAgICAgICAgICAgICAkbWF0Y2hfY291bnQrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfU1VCVE9UQUw6CiAgICAgICAgICAgICAgICAkZGF0YSA9ICRjb25kaXRpb24tPmdldF9kYXRhKCk7CiAgICAgICAgICAgICAgICBpZiggIWlzX251bWVyaWMoJGRhdGEpICkgYnJlYWs7CiAgICAgICAgICAgICAgICBpZiggJHRoaXMtPl9jYWxjX29yZGVyX3N1YnRvdGFsKCkgPj0gKGZsb2F0KSRkYXRhICkgewogICAgICAgICAgICAgICAgICAgICRtYXRjaF9jb3VudCsrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9XRUlHSFQ6CiAgICAgICAgICAgICAgICBpZiggIWlzX251bWVyaWMoJGNvbmRpdGlvbi0+Z2V0X2RhdGEoKSkgKSBicmVhazsKICAgICAgICAgICAgICAgIGlmKCAkdGhpcy0+X2NhbGNfb3JkZXJfd2VpZ2h0KCkgPj0gKGZsb2F0KSRjb25kaXRpb24tPmdldF9kYXRhKCkgKSB7CiAgICAgICAgICAgICAgICAgICAgJG1hdGNoX2NvdW50Kys7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX0NPVVBPTjoKICAgICAgICAgICAgICAgIGlmKCBpc19hcnJheSgkdGhpcy0+X2NvdXBvbnMpICYmIGNvdW50KCR0aGlzLT5fY291cG9ucykgKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCggJHRoaXMtPl9jb3Vwb25zIGFzICRjb2RlICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiggc3RyY2FzZWNtcCgkY29kZSwgJGNvbmRpdGlvbi0+Z2V0X2RhdGEoKSkgPT0gMCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtYXRjaF9jb3VudCsrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX0JVTEtQVVJDSEFTRToKICAgICAgICAgICAgICAgIGlmKCAkdGhpcy0+X2NhcnQgKSB7CiAgICAgICAgICAgICAgICAgICAgJGlkeCA9IDA7CiAgICAgICAgICAgICAgICAgICAgJGRhdGEgPSAkY29uZGl0aW9uLT5nZXRfZGF0YSgpOwogICAgICAgICAgICAgICAgICAgIGZvcmVhY2goICR0aGlzLT5fY2FydCBhcyAkaXRlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoICEkdGhpcy0+X2l0ZW1fZGlzY291bnRlZCgkaWR4KSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBmbm1hdGNoKCRkYXRhWzBdLCRpdGVtLT5nZXRfc2t1KCkpICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCAkZGF0YVsxXSA+IDAgJiYgJGl0ZW0tPmdldF9xdWFudGl0eSgpID49IChpbnQpJGRhdGFbMV0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtYXRjaF9jb3VudCsrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbWF0Y2hfY2FydGl0ZW0gPSAkaWR4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJGlkeCsrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfUFJPRElEOgogICAgICAgICAgICAgICAgLy8gdGVzdCBpZiB0aGlzIHByb2R1Y3QgZXhpc3RzIGluIHRoZSBjYXJ0IChieSBwcm9kdWN0IGlkKQogICAgICAgICAgICAgICAgaWYoICR0aGlzLT5fY2FydCApIHsKICAgICAgICAgICAgICAgICAgICAvLyBpZiBtYXRjaGVzLCB0aGVuIHRoZXJlIGlzIGEgcHJvZHVjdCBpbiB0aGUgY2FydCB0aGF0IG1hdGNoZXMgdGhpcyBjb25kaXRpb24KICAgICAgICAgICAgICAgICAgICAkaWR4ID0gMDsKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCAkdGhpcy0+X2NhcnQgYXMgJGl0ZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCAhJHRoaXMtPl9pdGVtX2Rpc2NvdW50ZWQoJGlkeCkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdG1wID0gZXhwbG9kZSgnLCcsJGNvbmRpdGlvbi0+Z2V0X2RhdGEoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggaW5fYXJyYXkoJGl0ZW0tPmdldF9wcm9kdWN0X2lkKCksJHRtcCkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1hdGNoX2NvdW50Kys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1hdGNoX2NhcnRpdGVtID0gJGlkeDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAkaWR4Kys7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9QUk9EU0tVOgogICAgICAgICAgICAgICAgLy8gdGVzdCBpZiB0aGlzIHByb2R1Y3QgZXhpc3RzIGluIHRoZSBjYXJ0IChieSBza3UpCiAgICAgICAgICAgICAgICBpZiggJHRoaXMtPl9jYXJ0ICkgewogICAgICAgICAgICAgICAgICAgIC8vIGlmIG1hdGNoZXMsIHRoZW4gdGhlcmUgaXMgYSBwcm9kdWN0IGluIHRoZSBjYXJ0IHRoYXQgbWF0Y2hlcyB0aGlzIGNvbmRpdGlvbgogICAgICAgICAgICAgICAgICAgICRpZHggPSAwOwogICAgICAgICAgICAgICAgICAgIGZvcmVhY2goICR0aGlzLT5fY2FydCBhcyAkaXRlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoICR0aGlzLT5faXRlbV9kaXNjb3VudGVkKCRpZHgpICkgY29udGludWU7CgogICAgICAgICAgICAgICAgICAgICAgICAkdG1wID0gZXhwbG9kZSgnLCcsJGNvbmRpdGlvbi0+Z2V0X2RhdGEoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRmbmQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCggJHRtcCBhcyAkb25lICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIGZubWF0Y2goJG9uZSwkaXRlbS0+Z2V0X3NrdSgpKSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1hdGNoX2NvdW50Kys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1hdGNoX2NhcnRpdGVtID0gJGlkeDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZm5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiggJGZuZCApIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAkaWR4Kys7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9QUk9EQ0FUOgogICAgICAgICAgICAgICAgJHByb2R1Y3RzID0gUHJvZHVjdHM6OkdldFByb2R1Y3RJZHNGcm9tQ2F0ZWdvcmllcygkY29uZGl0aW9uLT5nZXRfZGF0YSgpKTsKICAgICAgICAgICAgICAgIGlmKCAkcHJvZHVjdHMgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoICR0aGlzLT5fY2FydCAmJiAhJHRoaXMtPl90ZXN0X3Byb2R1Y3Rvbmx5ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkaWR4ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCggJHRoaXMtPl9jYXJ0IGFzICRpdGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoICRpdGVtLT5nZXRfcGFyZW50KCkgPiAtMSApIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoICRpdGVtLT5nZXRfdW5pdF9kaXNjb3VudCgpICE9IDAgKSBjb250aW51ZTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggaW5fYXJyYXkoJGl0ZW0tPmdldF9wcm9kdWN0X2lkKCksJHByb2R1Y3RzKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbWF0Y2hfY291bnQrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbWF0Y2hfY2FydGl0ZW0gPSAkaWR4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlkeCsrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9QUk9ESElFUjoKICAgICAgICAgICAgICAgICRwcm9kdWN0cyA9IFByb2R1Y3RzOjpHZXRQcm9kdWN0SWRzRnJvbUhpZXJhcmNoeSgkY29uZGl0aW9uLT5nZXRfZGF0YSgpLCcuJyk7CiAgICAgICAgICAgICAgICBpZiggJHByb2R1Y3RzICkgewogICAgICAgICAgICAgICAgICAgIGlmKCAkdGhpcy0+X2NhcnQgJiYgISR0aGlzLT5fdGVzdF9wcm9kdWN0b25seSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGlkeCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2goICR0aGlzLT5fY2FydCBhcyAkaXRlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBpbl9hcnJheSgkaXRlbS0+Z2V0X3Byb2R1Y3RfaWQoKSwkcHJvZHVjdHMpICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtYXRjaF9jb3VudCsrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtYXRjaF9jYXJ0aXRlbSA9ICRpZHg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaWR4Kys7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfSAvLyBzd2l0Y2gKICAgICAgICB9CgogICAgICAgIGlmKCAoJG1hdGNoX2NvdW50ID09ICR0aGlzLT5fcC0+Y291bnRfY29uZGl0aW9ucygpKSApIHsKICAgICAgICAgICAgLy8gaXQgbWF0Y2hlcy4KICAgICAgICAgICAgJG1hdGNoZWRfY2FydGl0ZW1faWR4ID0gJG1hdGNoX2NhcnRpdGVtOwogICAgICAgICAgICByZXR1cm4gVFJVRTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBGQUxTRTsKICAgIH0KfSAvLyBlbmQgb2YgY2xhc3MKCiMKIyBFT0YKIwo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.promo_tests.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKY2xhc3MgcHJvbW9fdGVzdHMKewogIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gJl9nZXRfZmV1KCkKICB7CiAgICByZXR1cm4gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdGcm9udEVuZFVzZXJzJyk7CiAgfQoKCiAgLyoqCiAgICogVGVzdCB0aGUgcHJvbW90aW9uIHRvIHNlZSBpZiB0aGUgcHJvbW90aW9uIGlzIGFwcGxpY2FibGUKICAgKiB0byBjb3Vwb24gY29kZSBzdXBwbGllZC4KICAgKgogICAqIEBwYXJhbSBzdHJpbmcgY291cG9uIGNvZGUKICAgKiBAcGFyYW0gcHJvbW90aW9uIFByb21vdGlvbiBvYmplY3QuCiAgICogQHJldHVybiBUUlVFIGlmIHRoaXMgdGVzdCBkb2VzIG5vdCByZWx5IG9uIGNvdXBvbiBjb2Rlcywgb3IgaWYgdGhlIGNvdXBvbiBjb2RlIG1hdGNoZXMuICBGQUxTRSBvdGhlcndpc2UuCiAgICovCiAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiB0ZXN0X2NvdXBvbigkY291cG9uLHByb21vdGlvbiAkcHJvbW8pCiAgewogICAgJGNvbmRpdGlvbnMgPSAkcHJvbW8tPmdldF9jb25kaXRpb25zKCk7CiAgICAkZm5kID0gRkFMU0U7CiAgICBmb3IoICRpID0gMDsgJGkgPCBjb3VudCgkY29uZGl0aW9ucyk7ICRpKysgKSB7CiAgICAgICRjb25kID0gJGNvbmRpdGlvbnNbJGldOwogICAgICBpZiggJGNvbmQtPmdldF9jb25kX3R5cGUoKSAhPSBQUk9NT1RJT05TX0NPTkRfQ09VUE9OICkgY29udGludWU7CgogICAgICAkZm5kID0gVFJVRTsKICAgICAgJGRhdGEgPSAkY29uZC0+Z2V0X2RhdGEoKTsKICAgICAgaWYoIHN0cmNhc2VjbXAoJGNvdXBvbiwkZGF0YSkgPT0gMCApIHJldHVybiBUUlVFOwogICAgfQoKICAgIGlmKCAhJGZuZCApIHJldHVybiBUUlVFOyAvLyB0aGlzIHByb21pdGlvbiBoYXMgbm8gY291cG9uIGRlcGVuZGVuY2llcy4KCiAgICAvLyB0aGlzIHByb21vdGlvbiBkb2VzIG5vdCBtYXRjaCB0aGUgc3VwcGxpZWQgY291cG9uLgogICAgcmV0dXJuIEZBTFNFOwogIH0KCgogIC8qKgogICAqIFRlc3QgdGhlIHByb21vdGlvbiB0byBzZWUgaWYgaXQgaXMgc3ViamVjdCB0byBhIHdlaWdodCBjb25kaXRpb24KICAgKiBhbmQgd2V0aGVyIHRoZSB3ZWlnaHQgc3VwcGxpZXMgbWF0Y2hlcyB0aGF0IGNvbmRpdGlvbi4KICAgKgogICAqIEBwYXJhbSBmbG9hdCB3ZWlnaHQgYW1vdW50CiAgICogQHBhcmFtIHByb21vdGlvbiBQcm9tb3Rpb24gb2JqZWN0LgogICAqIEByZXR1cnNuIFRSVUUgaWYgdGhpcyB0ZXN0IGRvZXMgbm90IHJlbHkgb24gb3JkZXIgd2VpZ2h0LCBvciBpZiB0aGUgd2VpZ2h0IHZhbHVlIGlzIG92ZXIgdGhlIGFsbG93ZWQgcmFuZ2UuICBGQUxTRSBvdGhlcndpc2UuCiAgICovCiAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiB0ZXN0X29yZGVyX3dlaWdodCgkd2VpZ2h0LHByb21vdGlvbiAkcHJvbW8pCiAgewogICAgaWYoICR3ZWlnaHQgPD0gMC4wMCApIHJldHVybiBGQUxTRTsKCiAgICAkY29uZGl0aW9ucyA9ICRwcm9tby0+Z2V0X2NvbmRpdGlvbnMoKTsKICAgIGZvciggJGkgPSAwOyAkaSA8IGNvdW50KCRjb25kaXRpb25zKTsgJGkrKyApIHsKICAgICAgJGNvbmQgPSAkY29uZGl0aW9uc1skaV07CiAgICAgIGlmKCAkY29uZC0+Z2V0X2NvbmRfdHlwZSgpICE9IFBST01PVElPTlNfQ09ORF9XRUlHSFQgKQoJY29udGludWU7CgogICAgICAkZGF0YSA9ICRjb25kLT5nZXRfZGF0YSgpOwogICAgICBpZiggJHdlaWdodCA+PSAkZGF0YSApCglyZXR1cm4gVFJVRTsKCiAgICAgIGJyZWFrOwogICAgfQoKICAgIC8vIHRoaXMgcHJvbW90aW9uIGlzIG5vdCBkZXBlbmRhbnQgdXBvbiBvcmRlciB3ZWlnaHRzLgogICAgcmV0dXJuIEZBTFNFOwogIH0KCgogIC8qKgogICAqIFRlc3QgdGhlIHByb21vdGlvbiB0byBzZWUgaWYgdGhlIHByb21vdGlvbiBpcyBhcHBsaWNhYmxlCiAgICogdG8gb3JkZXIgc3VidG90YWwgY2FsY3VsYXRpb25zLCBhbmQgaWYgc28gaWYgdGhlIHN1cHBsaWVkCiAgICogc3VidG90YWwgaXMgb3ZlciBvciBlcXVhbCB0byB0aGUgb25lIHNwZWNpZmllZCBpbiB0aGUKICAgKiBjb25kaXRpb25zLgogICAqCiAgICogQHBhcmFtIGZsb2F0IHN1YnRvdGFsIGFtb3VudAogICAqIEBwYXJhbSBwcm9tb3Rpb24gUHJvbW90aW9uIG9iamVjdC4KICAgKiBAcmV0dXJzbiBUUlVFIGlmIHRoaXMgdGVzdCBkb2VzIG5vdCByZWx5IG9uIG9yZGVyciBzdWJ0b3RhbCwgb3IgaWYgdGhlIHN1YnRvdGFsIHZhbHVlIGlzIG92ZXIgdGhlIGFsbG93ZWQgcmFuZ2UuICBGQUxTRSBvdGhlcndpc2UuCiAgICovCiAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiB0ZXN0X29yZGVyX3N1YnRvdGFsKCRzdWJ0b3RhbCwmJHByb21vKQogIHsKICAgIGlmKCAkc3VidG90YWwgPD0gMC4wMCApIHJldHVybiBGQUxTRTsKCiAgICAkY29uZGl0aW9ucyA9ICRwcm9tby0+Z2V0X2NvbmRpdGlvbnMoKTsKICAgICRmb3VuZCA9IGZhbHNlOwogICAgZm9yKCAkaSA9IDA7ICRpIDwgY291bnQoJGNvbmRpdGlvbnMpOyAkaSsrICkgewogICAgICAkY29uZCA9JiAkY29uZGl0aW9uc1skaV07CiAgICAgIGlmKCAkY29uZC0+Z2V0X2NvbmRfdHlwZSgpICE9IFBST01PVElPTlNfQ09ORF9TVUJUT1RBTCApCgljb250aW51ZTsKCiAgICAgICRkYXRhID0gJGNvbmQtPmdldF9kYXRhKCk7CiAgICAgIGlmKCAkc3VidG90YWwgPj0gJGRhdGEgKSB7CglyZXR1cm4gVFJVRTsKICAgICAgfQoKICAgICAgYnJlYWs7CiAgICB9CgogICAgLy8gdGhpcyBwcm9tb3Rpb24gaXMgbm90IGRlcGVuZGFudCB1cG9uIG9yZGVyIHN1YnRvdGFscy4KICAgIHJldHVybiBGQUxTRTsKICB9CgogIC8qKgogICAqIFRlc3QgdGhlIHByb21vdGlvbiB0byBzZWUgaWYgdGhlIHByb21vdGlvbiBpcyAKICAgKiBhcHBsaWNhYmxlIHRvIGNlcnRhaW4gRkVVIGdyb3Vwcy4uLiBhbmQgaWYgc28KICAgKiBpZiB0aGUgc3VwcGxpZWQgZmV1X2dyb3VwIHBhc3NlcyB0aGUgdGVzdC4KICAgKgogICAqIEBwYXJhbSBpbnQgZmV1X3VpZAogICAqIEBwYXJhbSBwcm9tb3Rpb24gUHJvbW90aW9uIG9iamVjdC4KICAgKiBAcmV0dXJucyBUUlVFIGlmIHRoaXMgdGVzdCBkb2VzIG5vdCByZWx5IG9uIEZFVSBncm91cCBtZW1iZXJzaGlwLCBvciBpZiB0aGUgdXNlciBpcyBtZW1iZXIgb2Ygb25lIG9mIHRoZSBzcGVjaWZpZWQgZ3JvdXAgbmFtZXMuICBGQUxTRSBvdGhlcndpc2UuCiAgICovCiAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiB0ZXN0X2ZldV91aWQoJGZldV91aWQsJiRwcm9tbykKICB7CiAgICBpZiggJGZldV91aWQgPD0gMCApIHJldHVybiBGQUxTRTsKCiAgICAkZmV1ID0gc2VsZjo6X2dldF9mZXUoKTsKICAgIGlmKCAhJGZldSApIHJldHVybiBGQUxTRTsKCiAgICAkY29uZGl0aW9ucyA9ICRwcm9tby0+Z2V0X2NvbmRpdGlvbnMoKTsKICAgIGZvciggJGkgPSAwOyAkaSA8IGNvdW50KCRjb25kaXRpb25zKTsgJGkrKyApIHsKICAgICAgJGNvbmQgPSAkY29uZGl0aW9uc1skaV07CiAgICAgIGlmKCAkY29uZC0+Z2V0X2NvbmRfdHlwZSgpID09IFBST01PVElPTlNfQ09ORF9GRVUgKSB7CgkvLyBnZXQgbWVtYmVyIGdyb3VwcyBhcyBhcnJheSBvZiBncm91cCBuYW1lcwoJJG1lbWJlcl9vZiA9ICRmZXUtPkdldE1lbWJlckdyb3Vwc0FycmF5KCRmZXVfdWlkKTsKCWlmKCAhJG1lbWJlcl9vZiApIHJldHVybiBGQUxTRTsKCSRtZW1iZXJfb2YgPSBcY2dlX2FycmF5OjpleHRyYWN0X2ZpZWxkKCRtZW1iZXJfb2YsJ2dyb3VwaWQnKTsKCgkkdG1wID0gJGZldS0+R2V0R3JvdXBMaXN0KCk7CgkkYWxsZ3JvdXBzID0gYXJyYXlfZmxpcCgkdG1wKTsKCSRtZW1iZXJfZ3JvdXBfbmFtZXMgPSBhcnJheSgpOwoJZm9yZWFjaCggJG1lbWJlcl9vZiBhcyAkb25lZ2lkICkgewoJICAkbWVtYmVyX2dyb3VwX25hbWVzW10gPSAkYWxsZ3JvdXBzWyRvbmVnaWRdOwoJfQoKCS8vIGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgY29uZGl0aW9uCgkvLyBhcyBhbiBhcnJheSBvZiB0cmltbWVkIGdyb3VwIG5hbWVzLgoJJGRhdGEgPSBleHBsb2RlKCcsJywkY29uZC0+Z2V0X2RhdGEoKSk7Cglmb3IoICRqID0gMDsgJGogPCBjb3VudCgkZGF0YSk7ICRqKysgKSB7CgkgICRkYXRhWyRqXSA9IHRyaW0oJGRhdGFbJGpdKTsKCX0KCgkvLyBub3cgZG8gYW4gaW50ZXJzZWN0aW9uIGJldHdlZW4gbWVtYmVyIGdyb3VwbyBuYW1lcwoJLy8gYW5kIHRoZSBkYXRhIGdyb3VwIG5hbWVzLgoJJHJlcyA9IGFycmF5X2ludGVyc2VjdCgkbWVtYmVyX2dyb3VwX25hbWVzLCRkYXRhKTsKCWlmKCBjb3VudCgkcmVzKSApIHJldHVybiBUUlVFOwoKCS8vIHRoZXJlIGlzIGd1YXJhbnRlZWQgdG8gYmUgbm8gbW9yZSBjb25kaXRpb25zIG9mIHRoaXMgdHlwZS4KCWJyZWFrOwogICAgICB9CiAgICB9CgogICAgLy8gdGhpcyBwcm9tb3Rpb24gaXMgbm90IGRlcGVuZGFudCB1cG9uIGZldSBncm91cCBtZW1iZXJzaGlwLgogICAgcmV0dXJuIEZBTFNFOwogIH0KCgogIC8qKiAKICAgKiBUZXN0IHRoZSBwcm9tb3Rpb24gdG8gc2VlIGlmIHRoZSBwcm9kdWN0IGlkIHNwZWNpZmllZAogICAqIGlzIGFwcGxpY2FibGUgdG8gcHJvZHVjdCBoaWVyYXJjaHkgdGVzdHMsIGFuZCBpZiBzbywgaWYgdGhlIHByb2R1Y3QgaWQgc3BlY2lmaWVkCiAgICogaXMgaW4gdGhlIGFwcHJvcHJpYXRlIHByb2R1Y3QgaGllcmFyY2h5LgogICAqCiAgICogQHBhcmFtIHByb21vdGlvbiBvYmplY3QKICAgKiBAcGFyYW0gcHJvZHVjdCBpZAogICAqIEByZXR1cm5zIFRSVUUgaWYgdGhlIHByb2R1Y3QgaXMgYXBwbGljYWJsZSB0byB0aGlzIHByb21vdGlvbiwgRkFMU0Ugb3RoZXJ3aXNlCiAgICovCiAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBzaW5nbGVfcHJvZHVjdF9mcm9tX2hpZXJhcmNoeSgmJHByb21vLCRwcm9kdWN0X2lkKQogIHsKICAgICRwcm9kdWN0cyA9IG51bGw7CiAgICBmb3IoICRpID0gMDsgJGkgPCAkcHJvbW8tPmNvdW50X2NvbmRpdGlvbnMoKTsgJGkrKyApIHsKICAgICAgJGNvbmRpdGlvbiA9ICRwcm9tby0+Z2V0X2NvbmRpdGlvbigkaSk7CiAgICAgIHN3aXRjaCggJGNvbmRpdGlvbi0+Z2V0X2NvbmRfdHlwZSgpICkgewogICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9QUk9ESElFUjoKCSRwcm9kdWN0cyA9IFByb2R1Y3RzOjpHZXRQcm9kdWN0SWRzRnJvbUhpZXJhcmNoeSgkY29uZGl0aW9uLT5nZXRfZGF0YSgpLCcuJyk7CgkkaSA9ICRwcm9tby0+Y291bnRfY29uZGl0aW9ucygpOwoJYnJlYWs7CgogICAgICBkZWZhdWx0OgoJY29udGludWU7CglicmVhazsKICAgICAgfQogICAgfQoKICAgIC8vIGNoZWNrIGlmIHRoZXJlIGFyZSBwcm9kdWN0cyBmb3VuZAogICAgaWYoICEkcHJvZHVjdHMgKSByZXR1cm4gRkFMU0U7IAoKICAgIC8vIG5vdyBjaGVjayB0byBzZWUgaWYgdGhlIGl0ZW1zIGluIHRoZSBjYXJ0IG1hdGNoLgogICAgaWYoIGluX2FycmF5KCRwcm9kdWN0X2lkLCRwcm9kdWN0cykgKSB7CiAgICAgIHJldHVybiBUUlVFOwogICAgfQoKICAgIHJldHVybiBGQUxTRTsKICB9CgoKICAvKioKICAgKiBUZXN0IHRoZSBwcm9tb3Rpb24gdG8gc2VlIGlmIGl0IGlzIGFwcGxpY2FibGUgdG8gcHJvZHVjdCBoaWVyYXJjaHkKICAgKiBjb25kaXRpb25zLCBhbmQgaWYgc28sIGlmIHRoZSBpdGVtcyBpbiB0aGUgIHVzZXJzIGNhcnQgYXJlIHByb2R1Y3RzLCAKICAgKiBhbmQgaWYgdGhleSBtYXRjaCB0aGUgY29uZGl0aW9ucyBpbiB0aGUgcHJvbW90aW9uLgogICAqCiAgICogQHBhcmFtIGFycmF5IG9mIGxpbmVfaXRlbSBvYmplY3RzCiAgICogQHBhcmFtIHByb21vdGlvbiBQcm9tb3Rpb24gb2JqZWN0LgogICAqIEByZXR1cm5zIFRSVUUgaWYgdGhpcyB0ZXN0IGRvZXMgbm90IHJlbHkgb24gRkVVIGdyb3VwIG1lbWJlcnNoaXAsIG9yIGlmIHRoZSB1c2VyIGlzIG1lbWJlciBvZiBvbmUgb2YgdGhlIHNwZWNpZmllZCBncm91cCBuYW1lcy4gIEZBTFNFIG90aGVyd2lzZS4KICAgKi8KICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIHRlc3RfcHJvZHVjdF9mcm9tX2hpZXJhcmNoeSgkaXRlbXMsJiRwcm9tbykKICB7CiAgICAkcHJvZHVjdHMgPSAnJzsKICAgIGZvciggJGkgPSAwOyAkaSA8ICRwcm9tby0+Y291bnRfY29uZGl0aW9ucygpOyAkaSsrICkgewogICAgICAkY29uZGl0aW9uID0gJHByb21vLT5nZXRfY29uZGl0aW9uKCRpKTsKICAgICAgc3dpdGNoKCAkY29uZGl0aW9uLT5nZXRfY29uZF90eXBlKCkgKSB7CiAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1BST0RISUVSOgoJJHByb2R1Y3RzID0gUHJvZHVjdHM6OkdldFByb2R1Y3RJZHNGcm9tSGllcmFyY2h5KCRjb25kaXRpb24tPmdldF9kYXRhKCksJy4nKTsKCSRpID0gJHByb21vLT5jb3VudF9jb25kaXRpb25zKCk7CglicmVhazsKCiAgICAgIGRlZmF1bHQ6Cgljb250aW51ZTsKCWJyZWFrOwogICAgICB9CiAgICB9CgogICAgLy8gY2hlY2sgaWYgdGhlcmUgYXJlIHByb2R1Y3RzIGZvdW5kCiAgICBpZiggISRwcm9kdWN0cyApIHJldHVybiBGQUxTRTsgCgogICAgLy8gbm93IGNoZWNrIHRvIHNlZSBpZiB0aGUgaXRlbXMgaW4gdGhlIGNhcnQgbWF0Y2guCiAgICBmb3IoICRpID0gMDsgJGkgPCBjb3VudCgkaXRlbXMpOyAkaSsrICkgewogICAgICAkaXRlbSA9ICRpdGVtc1skaV07CiAgICAgIGlmKCAkaXRlbS0+Z2V0X2l0ZW1fdHlwZSgpID09IGxpbmVfaXRlbTo6SVRFTVRZUEVfUFJPRFVDVCAmJiAKCSAgaW5fYXJyYXkoJGl0ZW0tPmdldF9pdGVtX2lkKCksJHByb2R1Y3RzKSApIHsKCXJldHVybiBUUlVFOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIEZBTFNFOwogIH0KCgogIC8qKgogICAqIFRlc3QgdGhlIHByb21vdGlvbiB0byBzZWUgaWYgaXQgaXMgYXBwbGljYWJsZSB0byBwcm9kdWN0IGNhdGVnb3J5IAogICAqIGNvbmRpdGlvbnMsIGFuZCBpZiBzbywgZG9lcyB0aGUgcHJvZHVjdCBpZCBzdXBwbGllZCBtYXRjaAogICAqCiAgICogQHBhcmFtIHRoZSBwcm9tb3Rpb24gb2JqZWN0CiAgICogQHBhcmFtIHRoZSBwcm9kdWN0IGlkCiAgICogQHJldHVybnMgVFJVRSBpZiBtYXRjaCBmb3VuZCwgRkFMU0Ugb3RoZXJ3aXNlLgogICAqLwogIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gc2luZ2xlX3Byb2R1Y3RfZnJvbV9jYXRlZ29yeSgmJHByb21vLCRwcm9kdWN0X2lkKQogIHsKICAgICRwcm9kdWN0cyA9ICcnOwogICAgZm9yKCAkaSA9IDA7ICRpIDwgJHByb21vLT5jb3VudF9jb25kaXRpb25zKCk7ICRpKysgKSB7CiAgICAgICRjb25kaXRpb24gPSAkcHJvbW8tPmdldF9jb25kaXRpb24oJGkpOwogICAgICBzd2l0Y2goICRjb25kaXRpb24tPmdldF9jb25kX3R5cGUoKSApIHsKICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfUFJPRENBVDoKCSRwcm9kdWN0cyA9IFByb2R1Y3RzOjpHZXRQcm9kdWN0SWRzRnJvbUNhdGVnb3JpZXMoJGNvbmRpdGlvbi0+Z2V0X2RhdGEoKSk7CgkkaSA9ICRwcm9tby0+Y291bnRfY29uZGl0aW9ucygpOwoJYnJlYWs7CgogICAgICBkZWZhdWx0OgoJY29udGludWU7CglicmVhazsKICAgICAgfQogICAgfQoKICAgIC8vIGNoZWNrIGlmIHRoZXJlIGFyZSBwcm9kdWN0cyBmb3VuZAogICAgaWYoICEkcHJvZHVjdHMgKSByZXR1cm4gRkFMU0U7IAoKICAgIC8vIG5vdyBjaGVjayB0byBzZWUgaWYgdGhlIHByb2R1Y3QgaWQgbWF0Y2hlcy4KICAgICRpdGVtID0gJGl0ZW1zWyRpXTsKICAgIGlmKCBpbl9hcnJheSgkcHJvZHVjdF9pZCwkcHJvZHVjdHMpICkgewogICAgICByZXR1cm4gVFJVRTsKICAgIH0KCiAgICByZXR1cm4gRkFMU0U7CiAgfQoKCiAgLyoqCiAgICogVGVzdCB0aGUgcHJvbW90aW9uIHRvIHNlZSBpZiBpdCBpcyBhcHBsaWNhYmxlIHRvIHByb2R1Y3QgY2F0ZWdvcnkKICAgKiBjb25kaXRpb25zLCBhbmQgaWYgc28gZG8gdGhlIHByb2R1Y3QgaXRlbXMgaW4gdGhlIGN1cnJlbnQKICAgKiB1c2VycyBjYXJ0IG1hdGNoIHRoZSBjb25kaXRpb25zIGluIHRoZSBwcm9tb3Rpb24uCiAgICoKICAgKiBAcGFyYW0gYXJyYXkgb2YgbGluZV9pdGVtIG9iamVjdHMKICAgKiBAcGFyYW0gcHJvbW90aW9uIFByb21vdGlvbiBvYmplY3QuCiAgICogQHJldHVybnMgVFJVRSBpZiB0aGlzIHRlc3QgZG9lcyBub3QgcmVseSBvbiBGRVUgZ3JvdXAgbWVtYmVyc2hpcCwgb3IgaWYgdGhlIHVzZXIgaXMgbWVtYmVyIG9mIG9uZSBvZiB0aGUgc3BlY2lmaWVkIGdyb3VwIG5hbWVzLiAgRkFMU0Ugb3RoZXJ3aXNlLgogICAqLwogIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gdGVzdF9wcm9kdWN0X2Zyb21fY2F0ZWdvcnkoJGl0ZW1zLCYkcHJvbW8pCiAgewogICAgJHByb2R1Y3RzID0gJyc7CiAgICBmb3IoICRpID0gMDsgJGkgPCAkcHJvbW8tPmNvdW50X2NvbmRpdGlvbnMoKTsgJGkrKyApIHsKICAgICAgJGNvbmRpdGlvbiA9ICRwcm9tby0+Z2V0X2NvbmRpdGlvbigkaSk7CiAgICAgIHN3aXRjaCggJGNvbmRpdGlvbi0+Z2V0X2NvbmRfdHlwZSgpICkgewogICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9QUk9EQ0FUOgoJJHByb2R1Y3RzID0gUHJvZHVjdHM6OkdldFByb2R1Y3RJZHNGcm9tQ2F0ZWdvcmllcygkY29uZGl0aW9uLT5nZXRfZGF0YSgpKTsKCSRpID0gJHByb21vLT5jb3VudF9jb25kaXRpb25zKCk7CglicmVhazsKCiAgICAgIGRlZmF1bHQ6Cgljb250aW51ZTsKCWJyZWFrOwogICAgICB9CiAgICB9CgogICAgLy8gY2hlY2sgaWYgdGhlcmUgYXJlIHByb2R1Y3RzIGZvdW5kCiAgICBpZiggISRwcm9kdWN0cyApIHJldHVybiBGQUxTRTsgCgogICAgLy8gbm93IGNoZWNrIHRvIHNlZSBpZiB0aGUgaXRlbXMgaW4gdGhlIGNhcnQgbWF0Y2guCiAgICBmb3IoICRpID0gMDsgJGkgPCBjb3VudCgkY2FydF9pdGVtcyk7ICRpKysgKSB7CiAgICAgICRpdGVtID0gJGl0ZW1zWyRpXTsKICAgICAgaWYoICRpdGVtLT5nZXRfaXRlbV90eXBlID09IGxpbmVfaXRlbTo6SVRFTVRZUEVfUFJPRFVDVCAmJiAKCSAgaW5fYXJyYXkoJGl0ZW0tPmdldF9pdGVtX2lkKCksJHByb2R1Y3RzKSApIHsKCXJldHVybiBUUlVFOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIEZBTFNFOwogIH0KCgogIC8qKgogICAqIFRlc3QgdGhlIHByb21vdGlvbiB0byBzZWUgaWYgaXQgaXMgYXBwbGljYWJsZSB0byBjb25kaXRpb25zIGJhc2VkIG9uIGEgc2luZ2xlIHByb2R1Y3QKICAgKiBhbmQgaWYgc28sIHNlZSBpZiB0aGUgcHJvZHVjdCBpZCBzcGVjaWZpZXMgbWF0Y2hlcy4KICAgKgogICAqIEBwYXJhbSB0aGUgcHJvbW90aW9uIG9iamVjdAogICAqIEBwYXJhbSB0aGUgcHJvZHVjdCBpZCB0byB0ZXN0CiAgICogQHJldHVybiBUUlVFIGlmIG1hdGNoIGZvdW5kLCBmYWxzZSBvdGhlcndpc2UKICAgKi8KICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIHNpbmdsZV9wcm9kdWN0X21hdGNoZXMoJiRwcm9tbywkcHJvZHVjdF9pZCkKICB7CiAgICAkcHJvZHVjdCA9IG51bGw7CiAgICBmb3IoICRpID0gMDsgJGkgPCAkcHJvbW8tPmNvdW50X2NvbmRpdGlvbnMoKTsgJGkrKyApIHsKICAgICAgJGNvbmRpdGlvbiA9ICRwcm9tby0+Z2V0X2NvbmRpdGlvbigkaSk7CiAgICAgIHN3aXRjaCggJGNvbmRpdGlvbi0+Z2V0X2NvbmRfdHlwZSgpICkgewogICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9QUk9ESUQ6CgkkcHJvZHVjdCA9ICRjb25kaXRpb24tPmdldF9kYXRhKCk7CgkkaSA9ICRwcm9tby0+Y291bnRfY29uZGl0aW9ucygpOwoJYnJlYWs7CgogICAgICBkZWZhdWx0OgoJY29udGludWU7CglicmVhazsKICAgICAgfQogICAgfQoKICAgIC8vIGNoZWNrIGlmIHRoZXJlIGFyZSBwcm9kdWN0cyBmb3VuZAogICAgaWYoICEkcHJvZHVjdCApIHJldHVybiBGQUxTRTsgCgogICAgJHBfYXJyYXkgPSBleHBsb2RlKCcsJywkcHJvZHVjdCk7CiAgICBmb3IoICRpID0gMDsgJGkgPCBjb3VudCgkcF9hcnJheSk7ICRpKysgKSB7CiAgICAgICRwX2FycmF5WyRpXSA9IChpbnQpdHJpbSgkcF9hcnJheVskaV0pOwogICAgfQoKICAgIC8vIG5vdyBjaGVjayB0byBzZWUgaWYgdGhlIGl0ZW1zIGluIHRoZSBjYXJ0IG1hdGNoLgogICAgaWYoIGluX2FycmF5KCRwcm9kdWN0X2lkLCRwX2FycmF5KSApIHsKICAgICAgcmV0dXJuIFRSVUU7CiAgICB9CgogICAgcmV0dXJuIEZBTFNFOwogIH0KCgogIC8qKgogICAqIFRlc3QgdGhlIHByb21vdGlvbiB0byBzZWUgaWYgaXQgaXMgYXBwbGljYWJsZSB0byBjb25kaXRpb25zIGJhc2VkIG9uIGEgc2luZ2xlIHByb2R1Y3QKICAgKiBhbmQgaWYgc28sIHNlZSBpZiBhdCBsZWFzdCBvbmUgcHJvZHVjdCBpbiB0aGUgbGluZSBpdGVtcyBzdXBwbGllZCBtYXRjaCB0aGUgY29uZGl0aW9uLgogICAqCiAgICogQHBhcmFtIGFycmF5IG9mIGxpbmVfaXRlbSBvYmplY3RzCiAgICogQHBhcmFtIHByb21vdGlvbiBQcm9tb3Rpb24gb2JqZWN0LgogICAqIEByZXR1cm5zIFRSVUUgaWYgdGhpcyB0ZXN0IGRvZXMgbm90IHJlbHkgb24gRkVVIGdyb3VwIG1lbWJlcnNoaXAsIG9yIGlmIHRoZSB1c2VyIGlzIG1lbWJlciBvZiBvbmUgb2YgdGhlIHNwZWNpZmllZCBncm91cCBuYW1lcy4gIEZBTFNFIG90aGVyd2lzZS4KICAgKi8KICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIHRlc3Rfc2luZ2xlX3Byb2R1Y3QoJGl0ZW1zLCYkcHJvbW8pCiAgewogICAgJHByb2R1Y3QgPSBudWxsOwogICAgZm9yKCAkaSA9IDA7ICRpIDwgJHByb21vLT5jb3VudF9jb25kaXRpb25zKCk7ICRpKysgKSB7CiAgICAgICRjb25kaXRpb24gPSAkcHJvbW8tPmdldF9jb25kaXRpb24oJGkpOwogICAgICBzd2l0Y2goICRjb25kaXRpb24tPmdldF9jb25kX3R5cGUoKSApIHsKICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfUFJPRElEOgoJJHByb2R1Y3QgPSAkY29uZGl0aW9uLT5nZXRfZGF0YSgpOwoJJGkgPSAkcHJvbW8tPmNvdW50X2NvbmRpdGlvbnMoKTsKCWJyZWFrOwoKICAgICAgZGVmYXVsdDoKCWNvbnRpbnVlOwoJYnJlYWs7CiAgICAgIH0KICAgIH0KCiAgICAvLyBjaGVjayBpZiB0aGVyZSBhcmUgcHJvZHVjdHMgZm91bmQKICAgIGlmKCAhJHByb2R1Y3QgKSByZXR1cm4gRkFMU0U7IAoKICAgICRwX2FycmF5ID0gZXhwbG9kZSgnLCcsJHByb2R1Y3QpOwogICAgZm9yKCAkaSA9IDA7ICRpIDwgY291bnQoJHBfYXJyYXkpOyAkaSsrICkgewogICAgICAkcF9hcnJheVskaV0gPSAoaW50KXRyaW0oJHBfYXJyYXlbJGldKTsKICAgIH0KCiAgICAvLyBub3cgY2hlY2sgdG8gc2VlIGlmIHRoZSBpdGVtcyBpbiB0aGUgY2FydCBtYXRjaC4KICAgIGZvciggJGkgPSAwOyAkaSA8IGNvdW50KCRpdGVtcyk7ICRpKysgKSB7CiAgICAgICRpdGVtID0gJGl0ZW1zWyRpXTsKICAgICAgaWYoICRpdGVtLT5nZXRfaXRlbV90eXBlKCkgPT0gbGluZV9pdGVtOjpJVEVNVFlQRV9QUk9EVUNUICYmIAoJICBpbl9hcnJheSgkaXRlbS0+Z2V0X2l0ZW1faWQoKSwkcF9hcnJheSkgKSB7CglyZXR1cm4gVFJVRTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBGQUxTRTsKICB9Cn0gLy8gZW5kIG9mIGNsYXNzCgojCiMgRU9GCiMKPz4K]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gYWxsb3cgY3JlYXRpbmcsIGludGVyZmFjaW5nIHdpdGgKIyAgYW5kIG1hbmFnaW5nIHByb21vdGlvbnMgb3Igc2FsZXMgaW4gdGhlIEUtY29tZW1yY2Ugc3VpdGUuCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQpuYW1lc3BhY2UgUHJvbW90aW9uczsKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwoKLy8gZHVtbXkgb2JqZWN0CiRkdW1teSA9IG5ldyBwcm9tb3Rpb24oKTsKCiRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKJGNvbmZpZyA9JiAkZ0Ntcy0+R2V0Q29uZmlnKCk7CgokZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7CiR0YWJvcHRhcnJheSA9IGFycmF5KCdteXNxbCcgPT4gJ1RZUEU9TXlJU0FNJyk7CgovLyBQcm9tb3Rpb25zIHRhYmxlCiRmbGRzID0gIgogICAgICAgICBpZCBJIEtFWSBBVVRPLAogICAgICAgICBuYW1lIEMoMjU1KSBLRVkgTk9UTlVMTCwKICAgICAgICAgZGVzY3JpcHRpb24gWCwKICAgICAgICAgaW1hZ2UgQygyNTUpLAogICAgICAgICBpdGVtX29yZGVyIEkgTk9UTlVMTCwKICAgICAgICAgdHlwZSBDKDIwKSBOT1ROVUxMLAogICAgICAgICBjcmVhdGVkICIgLiBDTVNfQURPREJfRFQgLiAiLAogICAgICAgICBzdGFydF9kYXRlICIgLiBDTVNfQURPREJfRFQgLiAiLAogICAgICAgICBlbmRfZGF0ZSAiIC4gQ01TX0FET0RCX0RUIC4gIiwKICAgICAgICAgb2ZmZXJfdHlwZSAgQyg1MCkgTk9UTlVMTCwKICAgICAgICAgb2ZmZXJfZGF0YSAgQygyNTUpIE5PVE5VTEwsCiAgICAgICAgIGV4dHJhIFgsCiAgICAgICAgIG93bmVyIEkKICAgICAgICAiOwokc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoUFJPTU9USU9OU19UQUJMRSwkZmxkcywkdGFib3B0YXJyYXkpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgovLyBDb25kaXRpb25zIHRhYmxlCiRmbGRzID0gIgogICAgICAgICBpZCBJIEtFWSBBVVRPLAogICAgICAgICBwcm9tb3Rpb25faWQgSSBLRVkgTk9UTlVMTCwKICAgICAgICAgY29uZF90eXBlIEMoNTApIE5PVE5VTEwsCiAgICAgICAgIGRhdGEgWCBOT1ROVUxMCiAgICAgICAgIjsKJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKFBST01PVElPTlNfQ09ORF9UQUJMRSwkZmxkcywkdGFib3B0YXJyYXkpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgovLyBwZXJtaXNzaW9ucwokdGhpcy0+Q3JlYXRlUGVybWlzc2lvbihcUHJvbW90aW9uczo6TUFJTl9QRVJNLFxQcm9tb3Rpb25zOjpNQUlOX1BFUk0pOwoKLy8gcHJlZmVyZW5jZXMKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2RmbHRfcHJvbW90aW9uX3BlcmlvZCcsMSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdkZmx0X29mZmVyX3R5cGUnLFBST01PVElPTlNfT0ZGRVJfUEVSQ0VOVCk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdkZmx0X29mZmVyX2RhdGEnLCcuMScpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnaW1hZ2VfZGlyJywnaW1hZ2VzJyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdlcnJvcl9pbnZhbGlkX2NvZGUnLCR0aGlzLT5MYW5nKCdlcnJvcl9pbnZhbGlkX2NvZGUnKSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdlcnJvcl9lbXB0eV9jb2RlJywkdGhpcy0+TGFuZygnZXJyb3JfZW1wdHlfY29kZScpKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ21zZ192YWxpZF9jb2RlJywkdGhpcy0+TGFuZygnbXNnX3ZhbGlkX2NvZGUnKSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdza3VyZXF1aXJlZCcsMSk7CgovLyB0ZW1wbGF0ZXMKIyBTZXR1cCBkZWZhdWx0IGhpZXJhcmNoeSByZXBvcnQgdGVtcGxhdGUKJGZuID0gY21zX2pvaW5fcGF0aChkaXJuYW1lKF9fRklMRV9fKSwndGVtcGxhdGVzJywnb3JpZ19jb3Vwb25mb3JtX3RlbXBsYXRlLnRwbCcpOwppZiggZmlsZV9leGlzdHMoICRmbiApICkKICB7CiAgICAkdGVtcGxhdGUgPSBmaWxlX2dldF9jb250ZW50cyggJGZuICk7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZShcUHJvbW90aW9uczo6TkVXQ09VUE9ORk9STV9URU1QTEFURSwkdGVtcGxhdGUpOwogICAgJHRoaXMtPlNldFRlbXBsYXRlKCdjb3Vwb25mb3JtX1NhbXBsZScsJHRlbXBsYXRlKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKFxQcm9tb3Rpb25zOjpERkxUQ09VUE9ORk9STV9URU1QTEFURSwnU2FtcGxlJyk7CiAgfQoKIwojIEVPRgojCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CgokZGIgPSYgJHRoaXMtPkdldERiKCk7CiRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoICRkYiApOwoKJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCggUFJPTU9USU9OU19UQUJMRSApOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7Cgokc3FsYXJyYXkgPSAkZGljdC0+RHJvcFRhYmxlU1FMKCBQUk9NT1RJT05TX0NPTkRfVEFCTEUgKTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoKJHRoaXMtPkRlbGV0ZVRlbXBsYXRlKCk7CiR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCk7CiR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKFxQcm9tb3Rpb25zOjpNQUlOX1BFUk0pOwoKIwojIEVPRgojCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMTIgYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gYWxsb3cgY3JlYXRpbmcsIGludGVyZmFjaW5nIHdpdGgKIyAgYW5kIG1hbmFnaW5nIHByb21vdGlvbnMgb3Igc2FsZXMgaW4gdGhlIEUtY29tZW1yY2Ugc3VpdGUuCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKJGN1cnJlbnRfdmVyc2lvbiA9ICRvbGR2ZXJzaW9uOwokZGIgPSBjbXNtcygpLT5HZXREYigpOwokZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7CgppZiggdmVyc2lvbl9jb21wYXJlKCRvbGR2ZXJzaW9uLCcxLjEnKSA8IDAgKSB7CiAgJHNxbGFycmF5ID0gJGRpY3QtPkFkZENvbHVtblNRTChQUk9NT1RJT05TX1RBQkxFLCAnaXRlbV9vcmRlciBJIE5PVE5VTEwsIHR5cGUgQygyNSkgTk9UTlVMTCwgZXh0cmEgWCcpOwogICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnc2t1cmVxdWlyZWQnLDEpOwoKICAkcXVlcnkgPSAnU0VMRUNUIGlkLHN0YXJ0X2RhdGUgRlJPTSAnLlBST01PVElPTlNfVEFCTEUuJyBPUkRFUiBCWSBzdGFydF9kYXRlIEFTQyc7CiAgJHRtcCA9ICRkYi0+R2V0QXJyYXkoJHF1ZXJ5KTsKICBpZiggaXNfYXJyYXkoJHRtcCkgJiYgY291bnQoJHRtcCkgKSB7CiAgICAkcXVlcnkgPSAnVVBEQVRFICcuUFJPTU9USU9OU19UQUJMRS4nIHNldCBpdGVtX29yZGVyID0gPywgdHlwZSA9ID8gV0hFUkUgaWQgPSA/JzsKICAgICRpZHggPSAxOwogICAgZm9yZWFjaCggJHRtcCBhcyAkcm93ICkgewogICAgICAkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCRyb3dbJ2lkJ10scHJvbW90aW9uOjpUWVBFX0NIRUNLT1VULCRpZHgrKykpOwogICAgfQogIH0KfQppZiggdmVyc2lvbl9jb21wYXJlKCRvbGR2ZXJzaW9uLCcxLjMnKSA8IDAgKSB7CiAgICAkc3FsYXJyYXkgPSAkZGljdC0+QWRkQ29sdW1uU1FMKFBST01PVElPTlNfVEFCTEUsICdvd25lciBJJyk7CiAgICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7Cn0KCiMKIyBFT0YKIwo=]]></data>
	</file>
	<file>
	  <filename>/moduleinfo.ini</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[W21vZHVsZV0KbmFtZSA9IFByb21vdGlvbnMKdmVyc2lvbiA9IDEuMy4xLjEKZGVzY3JpcHRpb24gPSAiIgphdXRob3IgPSBjYWxndXkxMDAwCmF1dGhvcmVtYWlsID0gY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZwptaW5jbXN2ZXJzaW9uID0gMi4yLjIKbGF6eWxvYWRhZG1pbiA9IDEKbGF6eWxvYWRmcm9udGVuZCA9IDAKW2RlcGVuZHNdCkNHRXh0ZW5zaW9ucyA9IDEuNTYuMgpPcmRlcnMgPSAxLjIyLjMKSlF1ZXJ5VG9vbHMgPSAxLjMuOQpQcm9kdWN0cyA9IDIuMjcuNApDR0Vjb21tZXJjZUJhc2UgPSAxLjguMwo=]]></data>
	</file>
	<file>
	  <filename>/Promotions.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBhbGxvdyBjcmVhdGluZywgaW50ZXJmYWNpbmcgd2l0aAojICBhbmQgbWFuYWdpbmcgcHJvbW90aW9ucyBvciBzYWxlcyBpbiB0aGUgRS1jb21lbXJjZSBzdWl0ZS4KIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0cyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlCiMgaW4gYW55IE5vbiBHUEwgdmVyc2lvbiBvZiBDTVMgTWFkZSBzaW1wbGUsIG9yIGluIGFueSB2ZXJzaW9uIG9mIENNUwojIE1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbgojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKdXNlIFxQcm9tb3Rpb25zXHByb21vdGlvbjsKdXNlIFxQcm9tb3Rpb25zXHByb21vdGlvbl90ZXN0ZXI7CgpkZWZpbmUoJ1BST01PVElPTlNfVEFCTEUnLGNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3Byb21vdGlvbnMnKTsKZGVmaW5lKCdQUk9NT1RJT05TX0NPTkRfVEFCTEUnLGNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3Byb21vdGlvbnNfY29uZCcpOwoKY2xhc3MgUHJvbW90aW9ucyBleHRlbmRzIENHRXh0ZW5zaW9ucwp7CiAgICBjb25zdCBORVdDT1VQT05GT1JNX1RFTVBMQVRFICA9ICdORVdDT1VQT05GT1JNX1RFTVBMQVRFJzsKICAgIGNvbnN0IERGTFRDT1VQT05GT1JNX1RFTVBMQVRFID0gJ0RGTFRDT1VQT05GT1JNX1RFTVBMQVRFJzsKICAgIGNvbnN0IE1BSU5fUEVSTSAgICAgICAgICAgICAgID0gJ01hbmFnZSBQcm9tb3Rpb25zJzsKICAgIHByaXZhdGUgJF9oZWxwZXI7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKICAgIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCk7CgogICAgICAgICRzbWFydHkgPSBjbXNtcygpLT5HZXRTbWFydHkoKTsKICAgICAgICBpZiggISRzbWFydHkgKSByZXR1cm47CiAgICAgICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ3Byb21vX2dldF9wcm9kX2Rpc2NvdW50JyxhcnJheSgnUHJvbW90aW9ucycsJ3NtYXJ0eV9mdW5jdGlvbl9wcm9tb19nZXRfcHJvZF9kaXNjb3VudCcpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0RnJpZW5kbHlOYW1lKCkgeyByZXR1cm4gJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpOyB9CiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0VmVyc2lvbigpIHsgcmV0dXJuICcxLjMuMS4xJzsgfQogICAgcHVibGljIGZ1bmN0aW9uIE1pbmltdW1DTVNWZXJzaW9uKCkgeyByZXR1cm4gJzIuMi4yJzsgfQogICAgcHVibGljIGZ1bmN0aW9uIEdldEF1dGhvcigpIHsgcmV0dXJuICdjYWxndXkxMDAwJzsgfQogICAgcHVibGljIGZ1bmN0aW9uIElzUGx1Z2luTW9kdWxlKCkgeyByZXR1cm4gdHJ1ZTsgfQogICAgcHVibGljIGZ1bmN0aW9uIEdldEF1dGhvckVtYWlsKCkgeyByZXR1cm4gJ2NhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcnOyB9CiAgICBwdWJsaWMgZnVuY3Rpb24gSGFzQWRtaW4oKSB7IHJldHVybiB0cnVlOyB9CiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0QWRtaW5TZWN0aW9uKCkgeyByZXR1cm4gJ2Vjb21tZXJjZSc7IH0KICAgIHB1YmxpYyBmdW5jdGlvbiBHZXRBZG1pbkRlc2NyaXB0aW9uKCkgeyByZXR1cm4gJHRoaXMtPkxhbmcoJ21vZGRlc2NyaXB0aW9uJyk7IH0KICAgIHB1YmxpYyBmdW5jdGlvbiBMYXp5TG9hZEFkbWluKCkgeyByZXR1cm4gVFJVRTsgfQogICAgcHVibGljIGZ1bmN0aW9uIExhenlMb2FkRnJvbnRlbmQoKSB7IHJldHVybiBGQUxTRTsgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBWaXNpYmxlVG9BZG1pblVzZXIoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKFByb21vdGlvbnM6Ok1BSU5fUEVSTSkgfHwKICAgICAgICAgICAgJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFRlbXBsYXRlcycpIHx8CiAgICAgICAgICAgICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIEdldERlcGVuZGVuY2llcygpCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5KCdDR0V4dGVuc2lvbnMnPT4nMS41Ni4yJywgJ09yZGVycyc9PicxLjIyLjMnLCAnSlF1ZXJ5VG9vbHMnPT4nMS4zLjknLCAnUHJvZHVjdHMnPT4nMi4yNy40JywgJ0NHRWNvbW1lcmNlQmFzZSc9PicxLjguMycpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBJbnN0YWxsUG9zdE1lc3NhZ2UoKSB7IHJldHVybiAkdGhpcy0+TGFuZygncG9zdGluc3RhbGwnKTsgfQogICAgcHVibGljIGZ1bmN0aW9uIFVuaW5zdGFsbFBvc3RNZXNzYWdlKCkgeyByZXR1cm4gJHRoaXMtPkxhbmcoJ3Bvc3R1bmluc3RhbGwnKTsgfQogICAgcHVibGljIGZ1bmN0aW9uIFVuaW5zdGFsbFByZU1lc3NhZ2UoKSB7IHJldHVybiAkdGhpcy0+TGFuZygncmVhbGx5X3VuaW5zdGFsbCcpOyB9CiAgICBwdWJsaWMgZnVuY3Rpb24gQWxsb3dBdXRvSW5zdGFsbCgpIHsgcmV0dXJuIEZBTFNFOyB9CiAgICBwdWJsaWMgZnVuY3Rpb24gQWxsb3dBdXRvVXBncmFkZSgpIHsgcmV0dXJuIEZBTFNFOyB9CgogICAgcHVibGljIGZ1bmN0aW9uIFNldFBhcmFtZXRlcnMoKQogICAgewogICAgICAgICR0aGlzLT5BZGRJbWFnZURpcignaWNvbnMnKTsKICAgICAgICAkdGhpcy0+UmVnaXN0ZXJNb2R1bGVQbHVnaW4oKTsKICAgICAgICAkdGhpcy0+UmVzdHJpY3RVbmtub3duUGFyYW1zKCk7CgogICAgICAgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ2lubGluZScsJ2RlZmF1bHQnLCR0aGlzLT5MYW5nKCdwYXJhbV9pbmxpbmUnKSk7CiAgICAgICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2lubGluZScsQ0xFQU5fSU5UKTsKCiAgICAgICAgJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcigndGVtcGxhdGUnLCcnLCR0aGlzLT5MYW5nKCdwYXJhbV90ZW1wbGF0ZScpKTsKICAgICAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgndGVtcGxhdGUnLENMRUFOX1NUUklORyk7CgogICAgICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKENMRUFOX1JFR0VYUC4nL3Byb21vXy4qLycsQ0xFQU5fU1RSSU5HKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0SGVhZGVySFRNTCgpCiAgICB7CiAgICAgICAgcmV0dXJuOwogICAgICAgICR0eHQgPSA8PDxFT1QKPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KZmllbGRzZXQuY2dmaWVsZHNldCB7CiAgbWFyZ2luLWxlZnQ6IDIwJTsKfQpsZWdlbmQuY2dsZWdlbmQgewogIGZvbnQtc2l6ZTogMWVtOwogIGZvbnQtd2VpZ2h0OiBub3JtYWw7Cn0KLm5vb2Zmc2V0IHsKICBtYXJnaW4tbGVmdDogMDsKfQo8L3N0eWxlPgpFT1Q7CiAgICAgICAgJG9iaiA9ICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgnSlF1ZXJ5VG9vbHMnKTsKICAgICAgICBpZiggaXNfb2JqZWN0KCRvYmopICkgewogICAgICAgICAgICAkdG1wbCA9IDw8PEVPVAp7SlF1ZXJ5VG9vbHMgYWN0aW9uPSdpbmNqcycgZXhjbHVkZT0nZm9ybSd9CntKUXVlcnlUb29scyBhY3Rpb249J3JlYWR5J30KRU9UOwogICAgICAgICAgICAkdHh0IC49ICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YSgkdG1wbCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkdHh0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBIYXNDYXBhYmlsaXR5KCRjYXBhYmlsaXR5LCAkcGFyYW1zPWFycmF5KCkpCiAgICB7CiAgICAgICAgaWYoICRjYXBhYmlsaXR5ID09ICdwcm9tb3Rpb25zX2NhbGN1bGF0aW9uJyApICByZXR1cm4gVFJVRTsKICAgICAgICByZXR1cm4gcGFyZW50OjpIYXNDYXBhYmlsaXR5KCRjYXBhYmlsaXR5LCRwYXJhbXMpOwogICAgfQoKICAgIC8qKgogICAgICogRmluZCBhcHBsaWNhYmxlIHByb21vdGlvbnMgZ2l2ZW4gYmFza2V0IGRldGFpbHMsIGFuZCBvdGhlciBpbmZvcm1hdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgVXNlcklEIGZyb20gRkVVIG1vZHVsZQogICAgICogQHBhcmFtIGFycmF5IEFycmF5IG9mIGl0ZW1zIGluIHRoZSBiYXNrZXQgKGFycmF5IG9mIG9iamVjdHMpCiAgICAgKiBAcGFyYW0gZmxvYXQgc3VidG90YWwgb2Ygb3JkZXIgKGJlZm9yZSB0YXhlcyBvciBzaGlwcGluZykKICAgICAqIEBwYXJhbSBmbG9hdCB3ZWlnaHQgb2Ygb3JkZXIgKHByb2R1Y3RzIGhhcyB0aGUgdW5pdHMpCiAgICAgKiBAcGFyYW0gaW50ICAgdW5peCBmb3JtYXQgZGF0ZSBmb3Igd2hpY2ggb3JkZXIgaXMgYXBwbGljYWJsZQogICAgICogQHJldHVybnMgaGFzaCBvZiBwcm9tb3Rpb24gbmFtZSwgYW5kIGFtb3VudCBvZiBwcm9tb3Rpb24uICBwcm9tb3Rpb24gd2l0aCBoaWdoZXIgZGlzY291bnQgd2lucy4KICAgICAqIEBkZXByZWNhdGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBGaW5kUHJvbW90aW9ucygkZmV1X3VpZCwkaXRlbXMsJHN1YnRvdGFsLCR3ZWlnaHQsJGRhdGUgPSAnJykKICAgIHsKICAgICAgICAvLyB0aGlzIGZ1bmN0aW9uIGNvdWxkIHVzZSBwcm9tb3Rpb24gdGVzdGVyLi4uIGJ1dAogICAgICAgIC8vIGl0IGV4cGVjdHMgdGhhdCB0aGUgaXRlbXMgYXJlIGNhcnQgaXRlbXMuCiAgICAgICAgaWYoIGVtcHR5KCRkYXRlKSApICRkYXRlID0gdGltZSgpOwogICAgICAgICRzZXNzID0gbmV3IGNnZV9zZXNzaW9uKCdQcm9tb3Rpb25zJyk7CiAgICAgICAgJGRiID0gJHRoaXMtPkdldERiKCk7CiAgICAgICAgJGRhdGUgPSAkZGItPkRiVGltZVN0YW1wKCRkYXRlKTsKCiAgICAgICAgLy8gbm93IHdlIGhhdmUgYSBsaXN0IG9mIHByb21vdGlvbiBpZCdzIGxvYWQgZWFjaCBwcm9tb3Rpb24KICAgICAgICAvLyBhbmQgdGVzdCBpdC4KICAgICAgICAvLyBjYWxjdWxhdGUgdGhlIGRpc2NvdW50cyBhcHBsaWVkIGZvciBhbGwgbGluZSBpdGVtcwogICAgICAgIC8vIGFuZCBjYWxjdWxhdGUgdGhlIHZhbHVlIG9mIHRoZW0uCiAgICAgICAgJHByb21vcyA9IHByb21vdGlvbjo6bG9hZF9hbGxfYnlfdHlwZShwcm9tb3Rpb246OlRZUEVfQ0hFQ0tPVVQpOwogICAgICAgICRkaXNjb3VudF9hbXQgPSAxMDAwMDAwMDsKICAgICAgICAkZGlzY291bnRfaXRlbXMgPSAnJzsKICAgICAgICBmb3JlYWNoKCAkcHJvbW9zIGFzICRwcm9tbyApIHsKICAgICAgICAgICAgJG1hdGNoX3R5cGUgPSAnJzsKCiAgICAgICAgICAgIC8vIGNoZWNrIGFsbCBvZiB0aGUgY29uZGl0aW9ucyBpbiB0aGUgcHJvbW90aW9uCiAgICAgICAgICAgICRtYXRjaCA9IHRydWU7CiAgICAgICAgICAgIGZvciggJGkgPSAwOyAkaSA8ICRwcm9tby0+Y291bnRfY29uZGl0aW9ucygpOyAkaSsrICkgewogICAgICAgICAgICAgICAgJGNvbmRpdGlvbiA9ICRwcm9tby0+Z2V0X2NvbmRpdGlvbigkaSk7CgogICAgICAgICAgICAgICAgc3dpdGNoKCAkY29uZGl0aW9uLT5nZXRfY29uZF90eXBlKCkgKSB7CiAgICAgICAgICAgICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9GRVU6CiAgICAgICAgICAgICAgICAgICAgaWYoICFwcm9tb190ZXN0czo6dGVzdF9mZXVfdWlkKCRmZXVfdWlkLCRwcm9tbykgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRtYXRjaCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfU1VCVE9UQUw6CiAgICAgICAgICAgICAgICAgICAgaWYoICFwcm9tb190ZXN0czo6dGVzdF9vcmRlcl9zdWJ0b3RhbCgkc3VidG90YWwsJHByb21vKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJG1hdGNoID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9DT1VQT046CiAgICAgICAgICAgICAgICAgICAgJGNvdXBvbnMgPSAkc2Vzcy0+Z2V0KCdjb3Vwb25zJywnJyk7CiAgICAgICAgICAgICAgICAgICAgaWYoICRjb3Vwb25zICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyB0ZXN0IGFsbCBvZiBvdXIgY291cG9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgJHRlc3QgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCggJGNvdXBvbnMgYXMgJGNvdXBvbiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBwcm9tb190ZXN0czo6dGVzdF9jb3Vwb24oJGNvdXBvbiwkcHJvbW8pICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0ZXN0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiggISR0ZXN0ICkgJG1hdGNoID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkbWF0Y2ggPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfV0VJR0hUOgogICAgICAgICAgICAgICAgICAgIGlmKCAhcHJvbW9fdGVzdHM6OnRlc3Rfb3JkZXJfd2VpZ2h0KCR3ZWlnaHQsJHByb21vKSApICRtYXRjaCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1BST0RJRDoKICAgICAgICAgICAgICAgICAgICBpZiggIXByb21vX3Rlc3RzOjp0ZXN0X3NpbmdsZV9wcm9kdWN0KCRpdGVtcywkcHJvbW8pICkgJG1hdGNoID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfUFJPRENBVDoKICAgICAgICAgICAgICAgICAgICBpZiggIXByb21vX3Rlc3RzOjp0ZXN0X3Byb2R1Y3RfZnJvbV9jYXRlZ29yeSgkaXRlbXMsJHByb21vKSApICRtYXRjaCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1BST0RISUVSOgogICAgICAgICAgICAgICAgICAgIGlmKCAhcHJvbW9fdGVzdHM6OnRlc3RfcHJvZHVjdF9mcm9tX2hpZXJhcmNoeSgkaXRlbXMsJHByb21vKSApICRtYXRjaCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIGlmIG9uZSBjb25kaXRpb24gZG9lcyBub3QgbWF0Y2gsIHRoZSB0ZXN0IGZhaWxzLgogICAgICAgICAgICAgICAgaWYoICEkbWF0Y2ggKSBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gY2hlY2sgdGhlIHZhbHVlIG9mIHRoZSBkaXNjb3VudAogICAgICAgICAgICBpZiggJG1hdGNoICkgewogICAgICAgICAgICAgICAgJGFkal9pdGVtcyA9IHByb21vX29wczo6Y2FsY3VsYXRlX2Rpc2NvdW50KCRwcm9tbywkc3VidG90YWwsJGl0ZW1zKTsKICAgICAgICAgICAgICAgICRhZGpfYW10ICAgPSBwcm9tb19vcHM6OmNhbGNfdG90YWxfZGlzY291bnQoJGFkal9pdGVtcyk7CiAgICAgICAgICAgICAgICBpZiggJGRpc2NvdW50X2FtdCA+ICRhZGpfYW10ICkgewogICAgICAgICAgICAgICAgICAgICRkaXNjb3VudF9hbXQgPSAkYWRqX2FtdDsKICAgICAgICAgICAgICAgICAgICAkZGlzY291bnRfaXRlbXMgPSAkYWRqX2l0ZW1zOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICB9IC8vIGZvcmVhY2gKCiAgICAgICAgcmV0dXJuICRkaXNjb3VudF9pdGVtczsKICAgIH0KCiAgICAvKioKICAgICAqIENhbGN1bGF0ZSB0aGUgYmVzdCBkaXNjb3VudCBmb3IgYSBwcm9kdWN0IGdpdmVuIGFuIEZFVSB1c2VyIGlkLCBhbmQgYSBwcm9kdWN0IGlkLgogICAgICoKICAgICAqIEByZXR1cm5zIGEgaGFzaCBvZiByZXN1bHRzIGZvciB0aGUgYmVzdCBkaXNjb3VudCBmb3VuZCBvciBGQUxTRS4KICAgICAqIEBkZXByZWNhdGVkCiAgICAgKi8KICAgIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gZ2V0X2Rpc2NvdW50X2Zvcl9wcm9kdWN0KCRmZXVfdWlkLCRwcm9kdWN0X2lkKQogICAgewogICAgICAgICRzZXNzID0gbmV3IGNnZV9zZXNzaW9uKCdQcm9tb3Rpb25zJyk7CiAgICAgICAgJGdDbXMgPSBjbXNtcygpOwogICAgICAgICRkYiA9ICRnQ21zLT5HZXREYigpOwogICAgICAgICRkYXRlID0gJGRiLT5EYlRpbWVTdGFtcCh0aW1lKCkpOwoKICAgICAgICAvLyBnZXQgYSBsaXN0IG9mIHRoZSBjdXJyZW50bHkgdmFsaWQgcHJvbW90aW9ucy4KICAgICAgICAkcXVlcnkgPSAnU0VMRUNUIGlkIEZST00gJy5QUk9NT1RJT05TX1RBQkxFLiIKICAgICAgICAgICAgICAgV0hFUkUgKHN0YXJ0X2RhdGUgPD0gJGRhdGUpIEFORCAoZW5kX2RhdGUgPj0gJGRhdGUpCiAgICAgICAgICAgICAgIE9SREVSIEJZIGl0ZW1fb3JkZXIsb2ZmZXJfdHlwZSBBU0MiOwogICAgICAgICRwcm9tb3Rpb25faWRzID0gJGRiLT5HZXRDb2woJHF1ZXJ5KTsKICAgICAgICBpZiggISRwcm9tb3Rpb25faWRzICkgcmV0dXJuIEZBTFNFOwoKICAgICAgICAvLyBub3cgd2UgaGF2ZSBhIGxpc3Qgb2YgcHJvbW90aW9ucyBhcHBsaWNhYmxlIGZvciB0aGlzIGRhdGUKICAgICAgICAvLyBsb2FkIGVhY2ggb25lIGFuZCB0ZXN0IGl0LgogICAgICAgICRiZXN0X2Rpc2NvdW50ID0gJyc7CiAgICAgICAgZm9yZWFjaCggJHByb21vdGlvbl9pZHMgYXMgJHByb21vX2lkICkgewogICAgICAgICAgICAkcHJvbW8gPSBcUHJvbW90aW9uc1xwcm9tb19vcHM6OmxvYWRfcHJvbW9fYnlfaWQoJHByb21vX2lkKTsKICAgICAgICAgICAgaWYoICEkcHJvbW8gKSBjb250aW51ZTsKCiAgICAgICAgICAgICRtYXRjaCA9IHRydWU7CiAgICAgICAgICAgIGZvciggJGkgPSAwOyAkaSA8ICRwcm9tby0+Y291bnRfY29uZGl0aW9ucygpOyAkaSsrICkgewogICAgICAgICAgICAgICAgJGNvbmRpdGlvbiA9ICRwcm9tby0+Z2V0X2NvbmRpdGlvbigkaSk7CgogICAgICAgICAgICAgICAgc3dpdGNoKCAkY29uZGl0aW9uLT5nZXRfY29uZF90eXBlKCkgKSB7CiAgICAgICAgICAgICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9GRVU6CiAgICAgICAgICAgICAgICAgICAgaWYoICFwcm9tb190ZXN0czo6dGVzdF9mZXVfdWlkKCRmZXVfdWlkLCRwcm9tbykgKSAkbWF0Y2ggPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9DT1VQT046CiAgICAgICAgICAgICAgICAgICAgJGNvdXBvbnMgPSAkc2Vzcy0+Z2V0KCdjb3Vwb25zJywnJyk7CiAgICAgICAgICAgICAgICAgICAgaWYoICRjb3Vwb25zICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyB0ZXN0IGFsbCBvZiBvdXIgY291cG9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgJHRlc3QgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCggJGNvdXBvbnMgYXMgJGNvdXBvbiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBwcm9tb190ZXN0czo6dGVzdF9jb3Vwb24oJGNvdXBvbiwkcHJvbW8pICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0ZXN0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiggISR0ZXN0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1hdGNoID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJG1hdGNoID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1BST0RJRDoKICAgICAgICAgICAgICAgICAgICBpZiggIXByb21vX3Rlc3RzOjpzaW5nbGVfcHJvZHVjdF9tYXRjaGVzKCRwcm9tbywkcHJvZHVjdF9pZCkgKSAkbWF0Y2ggPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9QUk9EQ0FUOgogICAgICAgICAgICAgICAgICAgIGlmKCAhcHJvbW9fdGVzdHM6OnNpbmdsZV9wcm9kdWN0X2Zyb21fY2F0ZWdvcnkoJHByb21vLCRwcm9kdWN0X2lkKSApICRtYXRjaCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1BST0RISUVSOgogICAgICAgICAgICAgICAgICAgIGlmKCAhcHJvbW9fdGVzdHM6OnNpbmdsZV9wcm9kdWN0X2Zyb21faGllcmFyY2h5KCRwcm9tbywkcHJvZHVjdF9pZCkgKSAkbWF0Y2ggPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYoICRtYXRjaCApIHsKICAgICAgICAgICAgICAgIC8vIHRoaXMgcHJvbW90aW9uIG1hdGNoZXMgdGhlIHByb2R1Y3QgaWQKICAgICAgICAgICAgICAgICRyZXMgPSBcUHJvbW90aW9uc1xwcm9tb19vcHM6OmNhbGN1bGF0ZV9wcm9kdWN0X2Rpc2NvdW50KCRwcm9tbywkcHJvZHVjdF9pZCk7CiAgICAgICAgICAgICAgICBpZiggaXNfYXJyYXkoJHJlcykgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoICFpc19hcnJheSgkYmVzdF9kaXNjb3VudCkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRiZXN0X2Rpc2NvdW50ID0gJHJlczsKICAgICAgICAgICAgICAgICAgICAgICAgJGJlc3RfZGlzY291bnRbJ3Byb21vX2lkJ10gPSAkcHJvbW8tPmdldF9pZCgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKCAkcmVzWydwZXJjZW50YWdlJ10gPCAkYmVzdF9kaXNjb3VudFsncGVyY2VudGFnZSddICkgewogICAgICAgICAgICAgICAgICAgICAgICAkYmVzdF9kaXNjb3VudCA9ICRyZXM7CiAgICAgICAgICAgICAgICAgICAgICAgICRiZXN0X2Rpc2NvdW50Wydwcm9tb19pZCddID0gJHByb21vLT5nZXRfaWQoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmKCBpc19hcnJheSgkYmVzdF9kaXNjb3VudCkgKSByZXR1cm4gJGJlc3RfZGlzY291bnQ7CiAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgfQoKICAgIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gY2xlYXJfY291cG9ucygpCiAgICB7CiAgICAgICAgJHNlc3MgPSBuZXcgY2dlX3Nlc3Npb24oJ1Byb21vdGlvbnMnKTsKICAgICAgICAkc2Vzcy0+Y2xlYXIoKTsKICAgIH0KCiAgICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIGFkZF9jb3Vwb24oJGNvZGUpCiAgICB7CiAgICAgICAgJHNlc3MgPSBuZXcgY2dlX3Nlc3Npb24oJ1Byb21vdGlvbnMnKTsKICAgICAgICAkdG1wID0gJHNlc3MtPmdldCgnY291cG9ucycsJycpOwogICAgICAgIGlmKCBpc19hcnJheSgkdG1wKSApIHsKICAgICAgICAgICAgaWYoICFpbl9hcnJheSgkY29kZSwkdG1wKSApICR0bXBbXSA9ICRjb2RlOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJHRtcCA9IGFycmF5KCk7CiAgICAgICAgICAgICR0bXBbXSA9ICRjb2RlOwogICAgICAgIH0KICAgICAgICAkc2Vzcy0+cHV0KCdjb3Vwb25zJywkdG1wKTsKICAgIH0KCiAgICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIGdldF9jb3Vwb25zKCkKICAgIHsKICAgICAgICAkc2VzcyA9IG5ldyBjZ2Vfc2Vzc2lvbignUHJvbW90aW9ucycpOwogICAgICAgICR0bXAgPSAkc2Vzcy0+Z2V0KCdjb3Vwb25zJywnJyk7CiAgICAgICAgaWYoIGlzX2FycmF5KCR0bXApICkgcmV0dXJuICR0bXA7CiAgICB9CgogICAgLyoqCiAgICAgKiBBIHNtYXJ0eSBwbHVnaW4gZm9yIGZpbmRpbmcgdGhlIGRpc2NvdW50IGZvciBhIHByb2R1Y3QKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzbWFydHlfZnVuY3Rpb25fcHJvbW9fZ2V0X3Byb2RfZGlzY291bnQoJHBhcmFtcywmJHNtYXJ0eSkKICAgIHsKICAgICAgICAkZmV1X3VpZCA9IC0xOwogICAgICAgICRwcm9kdWN0X2lkID0gLTE7CiAgICAgICAgaWYoIGlzc2V0KCRwYXJhbXNbJ2ZldV91aWQnXSkgKSB7CiAgICAgICAgICAgICRmZXVfdWlkID0gKGludCkkcGFyYW1zWydmZXVfdWlkJ107CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkZmV1X21vZHVsZSA9IG1vZHVsZV9oZWxwZXI6OmdldF9pbnN0YW5jZSgnRnJvbnRFbmRVc2VycycpOwogICAgICAgICAgICAkZmV1X3VpZCA9ICRmZXVfbW9kdWxlLT5Mb2dnZWRJbklkKCk7CiAgICAgICAgfQoKICAgICAgICBpZiggaXNzZXQoJHBhcmFtc1sncHJvZHVjdF9pZCddKSApICRwcm9kdWN0X2lkID0gKGludCkkcGFyYW1zWydwcm9kdWN0X2lkJ107CgogICAgICAgIGlmKCAkcHJvZHVjdF9pZCA8IDEgfHwgJGZldV91aWQgPCAxICkgcmV0dXJuOyAgLy8gaW52YWxpZC9pbnN1ZmZpY2llbnQgcGFyYW1zCgogICAgICAgICRyZXMgPSBzZWxmOjpnZXRfZGlzY291bnRfZm9yX3Byb2R1Y3QoJGZldV91aWQsJHByb2R1Y3RfaWQpOwogICAgICAgIGlmKCAkcmVzICkgewogICAgICAgICAgICAkcmVzWydkZWNpbWFsJ10gPSAkcmVzWydwZXJjZW50YWdlJ107CiAgICAgICAgICAgICRyZXNbJ3BlcmNlbnRhZ2UnXSAqPSAxMDAuMDsKICAgICAgICB9CiAgICAgICAgaWYoIGlzc2V0KCRwYXJhbXNbJ2Fzc2lnbiddKSApIHsKICAgICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCRwYXJhbXNbJ2Fzc2lnbiddLCRyZXMpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcmVzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfcHJvbW90aW9uX2Fzc2lzdGFudCgpCiAgICB7CiAgICAgICAgaWYoICEkdGhpcy0+X2hlbHBlciApICR0aGlzLT5faGVscGVyID0gbmV3IFxQcm9tb3Rpb25zXHByb21vdGlvbl9hc3Npc3RhbnQoICR0aGlzICk7CiAgICAgICAgcmV0dXJuICR0aGlzLT5faGVscGVyOwogICAgfQoKfSAvLyBjbGFzcwoKIwojIEVPRgojCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/skeleton.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/admin_addpromo.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmICRwcm9tby0+Z2V0X2lkKCkgPT0gJyd9CiAgPGgzPnskbW9kLT5MYW5nKCdsYmxfYWRkX3Byb21vJyl9PC9oMz4Ke2Vsc2V9CiAgPGgzPnskbW9kLT5MYW5nKCdsYmxfZWRpdF9wcm9tbycpfTwvaDM+CnsvaWZ9CjxoND57JG1vZC0+TGFuZygndHlwZScpfTogeyRtb2QtPkxhbmcoJHByb21vdHlwZSl9ICh7JHByb21vdHlwZX0pPC9oND4KCjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz4KLy8gPCFbQ0RBVEFbCnZhciBjb25kaXRpb25zID0ge307Cntmb3JlYWNoICRjb25kaXRpb250eXBlcyBhcyAka2V5ID0+ICRyZWN9CmNvbmRpdGlvbnMueyRrZXl9ID0gewogIG5hbWU6ICd7JHJlYy5uYW1lfScsCiAgbGFiZWw6ICd7JHJlYy5sYWJlbH0nLAogIGZpZWxkczogWyB7Zm9yICRpID0gMSB0byBjb3VudCgkcmVjLmZpZWxkcyl9eyR0bXA9JHJlYy5maWVsZHNbJGktMV19J3skdG1wfScsey9mb3J9IF0KfQp7L2ZvcmVhY2h9Cgp2YXIgb2ZmZXJfcHJvbXB0cyA9IG5ldyBBcnJheSgpOwp7Zm9yZWFjaCBmcm9tPSRvZmZlcnR5cGVzIGtleT0nbmFtZScgaXRlbT0ndmFsdWUnfQp7Y2FwdHVyZSBhc3NpZ249J3RtcCd9cHJvbXB0b2ZmZXJfeyRuYW1lfXsvY2FwdHVyZX0Kb2ZmZXJfcHJvbXB0c1sieyRuYW1lfSJdID0gInskbW9kLT5MYW5nKCR0bXApfSI7CnsvZm9yZWFjaH0KdmFyIGVycm9ycyA9IG5ldyBBcnJheSgpOwplcnJvcnNbJ25vX3ZhbHVlJ10gPSAieyRtb2QtPkxhbmcoJ2Vycm9yX3NwZWNpZnlfdmFsdWUnKX0iOwplcnJvcnNbJ2FscmVhZHlfcHJvZCddID0gInskbW9kLT5MYW5nKCdlcnJvcl9hbHJlYWR5X3Byb2R1Y3RfY29uZCcpfSI7CmVycm9yc1snZHVwbGljYXRlX3R5cGUnXSA9ICJ7JG1vZC0+TGFuZygnZXJyb3JfZHVwbGljYXRlX2NvbmRpdGlvbicpfSI7CmVycm9yc1snbm9fbmFtZSddID0gInskbW9kLT5MYW5nKCdlcnJvcl9wcm9tb3Rpb25fbmFtZScpfSI7CmVycm9yc1snbm9fb2ZmZXJfZGF0YSddID0gInskbW9kLT5MYW5nKCdlcnJvcl9ub19vZmZlcl9kYXRhJyl9IjsKZXJyb3JzWydub19jb25kaXRpb25zJ10gPSAieyRtb2QtPkxhbmcoJ3dhcm5pbmdfbm9fY29uZGl0aW9ucycpfSI7CgpmdW5jdGlvbiBpc051bWVyaWMoZm9ybV92YWx1ZSkgewogIGlmIChmb3JtX3ZhbHVlLm1hdGNoKC9eXGQrJC8pID09IG51bGwpIHJldHVybiBmYWxzZTsKICByZXR1cm4gdHJ1ZTsKfQoKZnVuY3Rpb24gaW5fYXJyYXkobmVlZGxlLGhheXN0YWNrKSB7CiAgZm9yKCBpID0gMDsgaSA8IGhheXN0YWNrLmxlbmd0aDsgaSsrICkgewogICAgaWYoIGhheXN0YWNrW2ldID09IG5lZWRsZSApIHJldHVybiB0cnVlOwogIH0KICByZXR1cm4gZmFsc2U7Cn0KCmZ1bmN0aW9uIGdldF9jb25kaXRpb25zKCkgewogIHZhciBjb25kcyA9IFtdOwogICQoJyNjb25kZGF0YSBkaXYuY29uZGl0aW9uX2RhdGEnKS5lYWNoKGZ1bmN0aW9uKCl7CiAgICB2YXIgdHlwZSA9ICQodGhpcykuZmluZCgnLnNhdmVkX2NvbmR0eXBlJykudmFsKCk7CiAgICB2YXIgZGF0YSA9IFtdOwogICAgZGF0YS5wdXNoKCQodGhpcykuZmluZCgnLnNhdmVkX2NvbmRkYXRhMCcpLnZhbCgpKTsKICAgIHZhciB2ID0gJCh0aGlzKS5maW5kKCcuc2F2ZWRfY29uZGRhdGExJykudmFsKCk7CiAgICBpZiggdHlwZW9mIHYgIT0gJ3VuZGVmaW5lZCcgJiYgdi5sZW5ndGggPiAwICkgZGF0YS5wdXNoKHYpOwogICAgY29uZHNbdHlwZV0gPSBkYXRhOwogIH0pOwogIHJldHVybiBjb25kczsKfQoKZnVuY3Rpb24gY29uZGl0aW9uX2ludmFsaWQodHlwZSkgewogIHZhciBjb25kcyA9IGdldF9jb25kaXRpb25zKCk7CiAgLy8gcGFzcyBvbmUsIGxvb2sgZm9yIGR1cGxpY2F0ZSB0eXBlcwogIGZvciggdmFyIGN0eXBlIGluIGNvbmRzICkgewogICAgaWYoIGN0eXBlID09IHR5cGUgKSByZXR1cm4gJ2R1cGxpY2F0ZV90eXBlJzsKICB9CgogIC8vIHBhc3MgdHdvLCBsb29rIGZvciBkdXBsaWNhdGUgcHJvZHVjdCB0eXBlcwogIGZvciggdmFyIGN0eXBlIGluIGNvbmRzICkgewogICAgaWYoIGN0eXBlLm1hdGNoKC9QUk9ELykgJiYgdHlwZS5tYXRjaCgvUFJPRC8pICkgcmV0dXJuICdhbHJlYWR5X3Byb2QnOwogIH0KICByZXR1cm4gZmFsc2U7Cn0KCmZ1bmN0aW9uIF9hZGRfY29uZGl0aW9uKHR5cGUsZGF0YSkKewogIHZhciBfZGF0YV9hcmVhID0gJCgnZGl2I2NvbmRpdGlvbl90ZW1wbGF0ZSBkaXYuY29uZGl0aW9uX2RhdGEnKS5jbG9uZSgpOwogIHZhciBfZGlzcF9hcmVhID0gJCgnZGl2I2NvbmRpdGlvbl90ZW1wbGF0ZSB0ci5jb25kaXRpb25fcm93JykuY2xvbmUoKTsKCiAgJCgnaW5wdXQuY29uZHR5cGUnLF9kYXRhX2FyZWEpLnZhbCh0eXBlKTsKICAkKCd0ZC5kaXNwdHlwZScsX2Rpc3BfYXJlYSkuaHRtbChjb25kaXRpb25zW3R5cGVdLmxhYmVsKTsKICBpZiggZGF0YS5sZW5ndGggPiAwICkgewogICAgJCgnaW5wdXQuY29uZGRhdGEwJyxfZGF0YV9hcmVhKS52YWwoZGF0YVswXSk7CiAgICAkKCd0ZC5kaXNwZGF0YTAnLF9kaXNwX2FyZWEpLmh0bWwoZGF0YVswXSk7CiAgfQogIGlmKCBkYXRhLmxlbmd0aCA+IDEgKSB7CiAgICAkKCdpbnB1dC5jb25kZGF0YTEnLF9kYXRhX2FyZWEpLnZhbChkYXRhWzFdKTsKICAgICQoJy5kaXNwZGF0YTEnLF9kaXNwX2FyZWEpLmh0bWwoZGF0YVsxXSk7CiAgfQogICQoJyNjb25kZGF0YScpLmFwcGVuZChfZGF0YV9hcmVhKTsKICAkKCcjY29uZHRhYmxlJykuYXBwZW5kKF9kaXNwX2FyZWEpOwp9CgpmdW5jdGlvbiBfaGFuZGxlX2luaXRpYWxfY29uZGl0aW9ucygpCnsKICAvLyBoYW5kbGUgaW5pdGlhbCBjb25kaXRpb25zCiAgdmFyIHRtcDsKICB7Zm9yICRpID0gMSB0byAkcHJvbW8tPmNvdW50X2NvbmRpdGlvbnMoKX0KICB7JGNvbmQ9JHByb21vLT5nZXRfY29uZGl0aW9uKCRpLTEpfQogIHskZGF0YT0kY29uZC0+Z2V0X2RhdGEoKX0KICB0bXAgPSBbXTsKICB7Zm9yZWFjaCAkZGF0YSBhcyAkb25lfQogIHRtcC5wdXNoKCd7JG9uZX0nKTsKICB7L2ZvcmVhY2h9CiAgX2FkZF9jb25kaXRpb24oJ3skY29uZC0+Z2V0X2NvbmRfdHlwZSgpfScsdG1wKTsKICB7L2Zvcn0KICAkKCcjY29uZGxpc3QgPiAuY29uZGl0aW9uX3JvdycpLnNob3coKTsKfQoKalF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpewogIF9oYW5kbGVfaW5pdGlhbF9jb25kaXRpb25zKCk7CgogIC8vIGhhbmRsZXIgZm9yIGV4dHJhIGFyZWEKICBqUXVlcnkoJyNleHRyYXMnKS5oaWRlKCk7CiAgalF1ZXJ5KCcjbGlua2V4dHJhcycpLmNsaWNrKGZ1bmN0aW9uKCl7CiAgICBqUXVlcnkoJyNleHRyYXMnKS50b2dnbGUoKTsKICAgIHJldHVybiBmYWxzZTsKICB9KTsKCiAgLy8gc2V0dXAgaW5pdGlhbCBjb25kaXRpb24gbGlzdCBzdHVmZi4KICAkKGRvY3VtZW50KS5vbignY2xpY2snLCdhLmRlbGNvbmQnLGZ1bmN0aW9uKCl7CiAgICB2YXIgcm93ID0gJCh0aGlzKS5jbG9zZXN0KCd0ci5jb25kaXRpb25fcm93Jyk7CiAgICB2YXIgaWR4ID0gJChyb3cpLmluZGV4KCk7CiAgICAkKCdkaXYjY29uZGRhdGEgZGl2LmNvbmRpdGlvbl9kYXRhJykuZXEoaWR4KS5yZW1vdmUoKTsKICAgICQocm93KS5yZW1vdmUoKTsKICAgIHJldHVybiBmYWxzZTsKICB9KTsKCiAgLy8gaW5pdGlhbGl6ZSB0aGUgb2ZmZXIgcHJvbXB0CiAgdHlwZSA9IGpRdWVyeSgnI29mZmVydHlwZScpLnZhbCgpOwogICQoJyNvZmZlcmRhdGEnKS5odG1sKG9mZmVyX3Byb21wdHNbdHlwZV0pOwogICQoJyMnK3R5cGUpLnNob3coKTsKICAkKCcjb2ZmZXJ0eXBlJykuY2hhbmdlKGZ1bmN0aW9uKCl7CiAgICAvLyBvZmZlciB0eXBlIGNoYW5nZWQKICAgIHZhciB0eXBlID0galF1ZXJ5KCcjb2ZmZXJ0eXBlJykudmFsKCk7CiAgICAkKCcjb2ZmZXJkYXRhJykuaHRtbChvZmZlcl9wcm9tcHRzW3R5cGVdKTsKICAgICQoJy5vZmZlcl9leHRyYScpLmhpZGUoKTsKICAgICQoJyMnK3R5cGUpLnNob3coKTsKICB9KTsKCiAgLy8gaGFuZGxlIGNvbmRpdGlvbiB0eXBlIGNoYW5nZWQKICAkKCcjY29uZHR5cGUnKS5jaGFuZ2UoZnVuY3Rpb24oKXsKICAgIC8vIGNvbmRpdGlvbiB0eXBlIGNoYW5nZWQKICAgIHZhciB0eXBlID0gJCgnI2NvbmR0eXBlJykudmFsKCk7CiAgICB2YXIgbiA9IGNvbmRpdGlvbnNbdHlwZV0uZmllbGRzLmxlbmd0aDsKICAgIHR5cGUgPSBjb25kaXRpb25zW3R5cGVdOwogICAgJCgnZGl2LmNvbmRkYXRhJykuaGlkZSgpOwogICAgJCgnZGl2LmNvbmRkYXRhIGlucHV0JykuYXR0cignZGlzYWJsZWQnLCdkaXNhYmxlZCcpOwogICAgZm9yKCB2YXIgaSA9IDA7IGkgPCBuOyBpKysgKSB7CiAgICAgICQoJ3AjZGF0YXByb21wdCcraSkuaHRtbCh0eXBlLmZpZWxkc1tpXSsnOicpOwogICAgICAkKCdkaXYjZGl2X2NvbmRkYXRhJytpKycgaW5wdXQnKS5yZW1vdmVBdHRyKCdkaXNhYmxlZCcpOwogICAgICAkKCdkaXYjZGl2X2NvbmRkYXRhJytpKS5zaG93KCk7CiAgICB9CiAgfSk7CiAgJCgnI2NvbmR0eXBlJykudHJpZ2dlcignY2hhbmdlJyk7CgogIC8vIGhhbmRsZSBhZGQgY29uZGl0aW9uIGNsaWNrZWQuCiAgJChkb2N1bWVudCkub24oJ2NsaWNrJywnI2FkZGJ0bicsZnVuY3Rpb24oKXsKICAgIHZhciB0eXBlID0gJCgnI2NvbmR0eXBlJykudmFsKCk7CiAgICB2YXIgbiA9IGNvbmRpdGlvbnNbdHlwZV0uZmllbGRzLmxlbmd0aDsKCiAgICB2YXIgY29uZHR5cGUgPSAkKCcjY29uZHR5cGUnKS52YWwoKTsKICAgIHZhciBkYXRhID0gW107CiAgICB2YXIgdCA9ICQoJyNjb25kZGF0YTAnKS52YWwoKTsKICAgIGlmKCB0eXBlb2YgdCAhPSAndW5kZWZpbmVkJyAmJiB0Lmxlbmd0aCA+IDAgKSBkYXRhLnB1c2godCk7CiAgICB0ID0gJCgnI2NvbmRkYXRhMScpLnZhbCgpOwogICAgaWYoIHR5cGVvZiB0ICE9ICd1bmRlZmluZWQnICYmIHQubGVuZ3RoID4gMCApIGRhdGEucHVzaCh0KTsKCiAgICBpZiggZGF0YS5sZW5ndGggIT0gbiApIHsKICAgICAgYWxlcnQoZXJyb3JzWydub192YWx1ZSddKTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmKCBjb25kdHlwZSA9PSAnUFJPTU9USU9OU19DT05EX1BST0RJRCcgKSB7CiAgICAgIGlmKCBwYXJzZUludChjb25kZGF0YSkgPD0gMCApIHsKICAgICAgICBhbGVydChlcnJvcnNbJ2ludmFsaWRfdmFsdWUnXSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICBlbHNlIGlmKCBjb25kdHlwZSA9PSAnUFJPTU9USU9OU19DT05EX1NVQlRPVEFMJyApIHsKICAgICAgLy8gdG9kbywgZXJyb3IgY2hlY2sgaGVyZQogICAgfQogICAgZXJyb3IgPSBjb25kaXRpb25faW52YWxpZChjb25kdHlwZSk7CiAgICBpZiggZXJyb3IgKSB7CiAgICAgIGFsZXJ0KGVycm9yc1tlcnJvcl0pOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgX2FkZF9jb25kaXRpb24oY29uZHR5cGUsZGF0YSk7CiAgICByZXR1cm4gZmFsc2U7CiAgfSk7CgogIC8vIGhhbmRsZWZvcm0gc3VibWl0CiAgalF1ZXJ5KCcjc3VibWl0JykubGl2ZSgnY2xpY2snLGZ1bmN0aW9uKCl7CiAgICB2YXIgbmFtZSA9IGpRdWVyeSgnI25hbWUnKS52YWwoKTsKICAgIHZhciBvZmZlcmRhdGEgPSBqUXVlcnkoJyNvZmZlcl9kYXRhJykudmFsKCk7CiAgICBpZiggbmFtZSA9PSAnJyApIHsKICAgICAgYWxlcnQoZXJyb3JzWydub19uYW1lJ10pOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiggb2ZmZXJkYXRhID09ICcnICkgewogICAgICBhbGVydChlcnJvcnNbJ25vX29mZmVyX2RhdGEnXSk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIC8vIHdhcm4gYWJvdXQgbm8gY29uZGl0aW9ucy4KICAgIGlmKCBqUXVlcnkoJ2RpdiNjb25kZGF0YScpLmNoaWxkcmVuKCkuc2l6ZSgpID09IDAgKSB7CiAgICAgIHJldHVybiBjb25maXJtKGVycm9yc1snbm9fY29uZGl0aW9ucyddKTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogICAgLy8gc3VjY2VzcwogIH0pOwoKfSk7Ci8vIF1dPgo8L3NjcmlwdD4KCjxkaXYgaWQ9ImNvbmRpdGlvbl90ZW1wbGF0ZSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4KICA8ZGl2IGNsYXNzPSJjb25kaXRpb25fZGF0YSI+CiAgICA8aW5wdXQgY2xhc3M9ImNvbmR0eXBlIiAgdHlwZT0iaGlkZGVuIiByZWFkb25seT0icmVhZG9ubHkiIG5hbWU9InskYWN0aW9uaWR9c2F2ZWRfY29uZHR5cGVbXSIgIHNpemU9IjUwIi8+CiAgICA8aW5wdXQgY2xhc3M9ImNvbmRkYXRhMCIgdHlwZT0iaGlkZGVuIiByZWFkb25seT0icmVhZG9ubHkiIG5hbWU9InskYWN0aW9uaWR9c2F2ZWRfY29uZGRhdGEwW10iIHNpemU9IjUwIi8+CiAgICA8aW5wdXQgY2xhc3M9ImNvbmRkYXRhMSIgdHlwZT0iaGlkZGVuIiByZWFkb25seT0icmVhZG9ubHkiIG5hbWU9InskYWN0aW9uaWR9c2F2ZWRfY29uZGRhdGExW10iIHNpemU9IjUwIi8+CiAgPC9kaXY+CgogIDx0YWJsZT4KICAgIDx0ciBjbGFzcz0iY29uZGl0aW9uX3JvdyI+CiAgICAgIDx0ZCBjbGFzcz0iZGlzcHR5cGUiPjwvdGQ+CiAgICAgIDx0ZCBjbGFzcz0iZGlzcGRhdGEwIj48L3RkPgogICAgICA8dGQgY2xhc3M9ImRpc3BkYXRhMSI+PC90ZD4KICAgICAgPHRkPjxhIGNsYXNzPSJkZWxjb25kIiBocmVmPSIjIj57Y2dpbWFnZSBpbWFnZT0naWNvbnMvc3lzdGVtL2RlbGV0ZS5naWYnIGFsdD0kbW9kLT5MYW5nKCdkZWxldGUnKX08L2E+PC90ZD4KICAgIDwvdHI+CiAgPC90YWJsZT4KPC9kaXY+Cgp7JGZvcm1zdGFydH0KCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBpZD0nc3VibWl0JyBuYW1lPSJ7JGFjdGlvbmlkfXN1Ym1pdCIgdmFsdWU9InskbW9kLT5MYW5nKCdzdWJtaXQnKX0iIC8+CiAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7JGFjdGlvbmlkfWNhbmNlbCIgdmFsdWU9InskbW9kLT5MYW5nKCdjYW5jZWwnKX0iIC8+CiAgPC9wPgo8L2Rpdj4KCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X25hbWUnKX06PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSduYW1lJyBuYW1lPSJ7JGFjdGlvbmlkfW5hbWUiIHZhbHVlPSJ7JHByb21vLT5nZXRfbmFtZSgpfSIgc2l6ZT0iODAiIG1heGxlbmd0aD0iMjU1IiAvPgogIDwvcD4KPC9kaXY+Cgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9zdGFydF9kYXRlJyl9OjwvcD4KICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgIHtjYXB0dXJlIGFzc2lnbj0ndG1wJ317JGFjdGlvbmlkfXN0YXJ0X2RhdGVfey9jYXB0dXJlfQogICAge2h0bWxfc2VsZWN0X2RhdGUgcHJlZml4PSR0bXAgdGltZT0kcHJvbW8tPmdldF9zdGFydF9kYXRlKCkgZW5kX3llYXI9Iis1In0KICA8L3A+CjwvZGl2PgoKPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfZW5kX2RhdGUnKX06PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAge2NhcHR1cmUgYXNzaWduPSd0bXAnfXskYWN0aW9uaWR9ZW5kX2RhdGVfey9jYXB0dXJlfQogICAge2h0bWxfc2VsZWN0X2RhdGUgcHJlZml4PSR0bXAgdGltZT0kcHJvbW8tPmdldF9lbmRfZGF0ZSgpIGVuZF95ZWFyPSIrNSJ9CiAgPC9wPgo8L2Rpdj4KCjxmaWVsZHNldD4KICA8bGVnZW5kPnskbW9kLT5MYW5nKCdwcm9tcHRfb2ZmZXInKX06PC9sZWdlbmQ+CiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93IG5vb2Zmc2V0Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCBub29mZnNldCI+CiAgICAgIHskbW9kLT5MYW5nKCdwcm9tcHRfb2ZmZXJfdHlwZScpfToKICAgIDwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQgbm9vZmZzZXQiPgogICAgICA8c2VsZWN0IG5hbWU9InskYWN0aW9uaWR9b2ZmZXJfdHlwZSIgaWQ9Im9mZmVydHlwZSI+CiAgICAgIHtodG1sX29wdGlvbnMgb3B0aW9ucz0kb2ZmZXJ0eXBlcyBzZWxlY3RlZD0kcHJvbW8tPmdldF9vZmZlcl90eXBlKCl9CiAgICAgIDwvc2VsZWN0PgogICAgPC9wPgogIDwvZGl2PgoKICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0IG5vb2Zmc2V0IiBpZD0ib2ZmZXJkYXRhIj4KICAgICAgeyRtb2QtPkxhbmcoJ3Byb21wdF9vZmZlcl9kYXRhJyl9OgogICAgPC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCBub29mZnNmZmV0Ij4KICAgICAgPGlucHV0IGlkPSJvZmZlcl9kYXRhIiB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfW9mZmVyX2RhdGEiIHNpemU9IjEwIiBtYXhsZW5ndGg9IjI1NSIgdmFsdWU9InskcHJvbW8tPmdldF9vZmZlcl9kYXRhKCl9Ii8+CiAgICA8L3A+CiAgPC9kaXY+CgogIHtpZiAkcHJvbW90eXBlID09ICdwcm9tb190eXBlX2luc3RhbnQnfQogICAgPGRpdiBjbGFzcz0icGFnb3ZlcmZsb3ciPgogICAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfYWxsb3dfb25jZScpfTo8L3A+CiAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgIHtjZ2VfeWVzbm9fb3B0aW9ucyBwcmVmaXg9JGFjdGlvbmlkIG5hbWU9J2V4dHJhX2FsbG93X29uY2UnIHNlbGVjdGVkPSRwcm9tby0+Z2V0X2V4dHJhKCdhbGxvd19vbmNlJyl9CiAgICAgIDwvcD4KICAgIDwvZGl2PgogIHsvaWZ9CgogIHtpZiAkcHJvbW90eXBlID09ICdwcm9tb190eXBlX2NoZWNrb3V0J30KICAgIDxkaXYgY2xhc3M9InBhZ292ZXJmbG93Ij4KICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X2FsbG93X2N1bXVsYXRpdmUnKX06PC9wPgogICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICB7Y2dlX3llc25vX29wdGlvbnMgcHJlZml4PSRhY3Rpb25pZCBuYW1lPSdleHRyYV9hbGxvd19jdW11bGF0aXZlJyBzZWxlY3RlZD0kcHJvbW8tPmdldF9leHRyYSgnYWxsb3dfY3VtdWxhdGl2ZScpfQogICAgICA8L3A+CiAgICA8L2Rpdj4KICB7L2lmfQoKICA8ZGl2IGlkLSJleHRyYV9pbmZvX2FyZWEiPgogIHthc3NpZ24gdmFyPSdtYXAnIHZhbHVlPSRwcm9tby0+Z2V0X29mZmVyX2V4dHJhX21hcCgpfQogIHtmb3JlYWNoIGZyb209JG1hcCBrZXk9J29mZmVydHlwZScgaXRlbT0nZmxkcyd9CiAgICA8ZGl2IGlkPSJ7JG9mZmVydHlwZX0iIGNsYXNzPSJvZmZlcl9leHRyYSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4KICAgICAge2ZvcmVhY2ggZnJvbT0kZmxkcyBpdGVtPSdmbGQnfQogICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+e2Fzc2lnbiB2YXI9J2EnIHZhbHVlPSRmbGQubGFiZWx9eyRtb2QtPkxhbmcoJGEpfTo8L3A+CiAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICB7aWYgJGZsZC50eXBlPT0nY2hlY2tib3gnfQogICAgICAgICAgICB7YXNzaWduIHZhcj0nYicgdmFsdWU9JGZsZC5uYW1lfQogICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InskYWN0aW9uaWR9ZXh0cmFfeyRifSIgdmFsdWU9IjEiIHtpZiAkcHJvbW8tPmdldF9leHRyYSgkYil9Y2hlY2tlZD0iY2hlY2tlZCJ7L2lmfS8+CiAgICAgICAgICB7L2lmfQogICAgICAgIDwvcD4KICAgICAgPC9kaXY+CiAgICAgIHsvZm9yZWFjaH0KICAgIDwvZGl2PgogIHsvZm9yZWFjaH0KICA8L2Rpdj4KPC9maWVsZHNldD4KCjxmaWVsZHNldCBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8bGVnZW5kPnskbW9kLT5MYW5nKCdwcm9tcHRfY29uZGl0aW9ucycpfTombmJzcDs8L2xlZ2VuZD4KICA8ZGl2IGlkPSJjb25kZGF0YSI+PC9kaXY+CiAgPHRhYmxlIGlkPSJjb25kdGFibGUiIHN0eWxlPSJwYWRkaW5nOiAxcHg7IHdpZHRoOiAxMDAlOyI+PC90YWJsZT4KPC9maWVsZHNldD4KCjxmaWVsZHNldCBjbGFzcz0icGFnZW92ZXJmbG93Ij4KIDxsZWdlbmQ+eyRtb2QtPkxhbmcoJ3Byb21wdF9hZGRfY29uZGl0aW9uJyl9OjwvbGVnZW5kPgogPHAgY2xhc3M9ImluZm9ybWF0aW9uIj57JG1vZC0+TGFuZygnaW5mb19jb25kaXRpb25zJyl9PC9wPgogPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X2NvbmRpdGlvbl90eXBlJyl9OjwvcD4KICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgPHNlbGVjdCBuYW1lPSJ7JGFjdGlvbmlkfWFkZF9jb25kdHlwZSIgaWQ9ImNvbmR0eXBlIj4KICAgICB7Zm9yZWFjaCAkY29uZGl0aW9udHlwZXMgYXMgJGtleSA9PiAkcmVjfQogICAgICAgPG9wdGlvbiB2YWx1ZT0ieyRrZXl9Ij57JHJlYy5sYWJlbH08L29wdGlvbj4KICAgICB7L2ZvcmVhY2h9CiAgICAgPC9zZWxlY3Q+CiAgIDwvcD4KIDwvZGl2PgoKIDxkaXYgaWQ9ImRpdl9jb25kZGF0YTAiIGNsYXNzPSJwYWdlb3ZlcmZsb3cgY29uZGRhdGEiPgogICA8cCBjbGFzcz0icGFnZXRleHQiIGlkPSJkYXRhcHJvbXB0MCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9jb25kaXRpb25fZGF0YScpfTo8L3A+CiAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgIDxpbnB1dCBpZD0iY29uZGRhdGEwIiB0eXBlPSJ0ZXh0IiBuYW1lPSJhZGRfY29uZGRhdGExIiBzaXplPSIzMCIvPgogICA8L3A+CiA8L2Rpdj4KCiA8ZGl2IGlkPSJkaXZfY29uZGRhdGExIiBjbGFzcz0icGFnZW92ZXJmbG93IGNvbmRkYXRhIj4KICAgPHAgY2xhc3M9InBhZ2V0ZXh0IiBpZD0iZGF0YXByb21wdDEiPnskbW9kLT5MYW5nKCdwcm9tcHRfY29uZGl0aW9uX2RhdGEyJyl9OjwvcD4KICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgPGlucHV0IGlkPSJjb25kZGF0YTEiIHR5cGU9InRleHQiIG5hbWU9ImFkZF9jb25kZGF0YTIiIHNpemU9IjMwIi8+CiAgIDwvcD4KIDwvZGl2PgoKIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgIDxwIGNsYXNzPSJwYWdldGV4dCI+PC9wPgogICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBpZD0iYWRkYnRuIiBuYW1lPSJhZGQiIHZhbHVlPSJ7JG1vZC0+TGFuZygnYWRkJyl9Ii8+CiAgIDwvcD4KIDwvZGl2Pgo8L2ZpZWxkc2V0PgoKCnskZm9ybWVuZH0=]]></data>
	</file>
	<file>
	  <filename>/templates/admin_checkout_promotionstab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogcHJvbW90aW9ucyB0YWIgdGVtcGxhdGUgKn0KPGRpdiBjbGFzcz0iaW5mb3JtYXRpb24iPnskbW9kLT5MYW5nKCdpbmZvX2NoZWNrb3V0X3Byb21vdGlvbnMnKX08L2Rpdj4Ke2lmIGlzc2V0KCRwcm9tb3Rpb25zKX0KPHRhYmxlIGNsYXNzPSJwYWdldGFibGUgY21zX3NvcnRhYmxlIHRhYmxlc29ydGVyIiBjZWxsc3BhY2luZz0iMCI+CiAgPHRoZWFkPgogICA8dHI+CiAgICAgPHRoPnskbW9kLT5MYW5nKCdwcm9tcHRfaWQnKX08L3RoPgogICAgIDx0aD57JG1vZC0+TGFuZygncHJvbXB0X25hbWUnKX08L3RoPgogICAgIDx0aD57JG1vZC0+TGFuZygncHJvbXB0X3N0YXJ0X2RhdGUnKX08L3RoPgogICAgIDx0aD57JG1vZC0+TGFuZygncHJvbXB0X2VuZF9kYXRlJyl9PC90aD4KICAgICA8dGggY2xhc3M9InBhZ2VpY29uIHtsaXRlcmFsfXtzb3J0ZXI6IGZhbHNlfXsvbGl0ZXJhbH0iPiZuYnNwOzwvdGg+CiAgICAgPHRoIGNsYXNzPSJwYWdlaWNvbiB7bGl0ZXJhbH17c29ydGVyOiBmYWxzZX17L2xpdGVyYWx9Ij4mbmJzcDs8L3RoPgogICAgIDx0aCBjbGFzcz0icGFnZWljb24ge2xpdGVyYWx9e3NvcnRlcjogZmFsc2V9ey9saXRlcmFsfSI+Jm5ic3A7PC90aD4KICAgICA8dGggY2xhc3M9InBhZ2VpY29uIHtsaXRlcmFsfXtzb3J0ZXI6IGZhbHNlfXsvbGl0ZXJhbH0iPiZuYnNwOzwvdGg+CiAgIDwvdHI+CiAgPC90aGVhZD4KICB7Zm9yZWFjaCBmcm9tPSRwcm9tb3Rpb25zIGl0ZW09J2VudHJ5JyBuYW1lPSdwcm9tb3MnfQogICAgPHRyPgogICAgICA8dGQ+eyRlbnRyeS5pZH08L3RkPgogICAgICA8dGQ+PGEgaHJlZj0ieyRlbnRyeS5lZGl0X3VybH0iIHRpdGxlPSJ7JG1vZC0+TGFuZygnZWRpdCcpfSI+eyRlbnRyeS5uYW1lfTwvYT48L3RkPgogICAgICA8dGQ+CiAgICAgICAgeyogc3RhcnQgZGF0ZSAqfQogICAgICAgIHtpZiAkZW50cnkuc3RhcnRfZGF0ZV91dCA+ICRzbWFydHkubm93fQogICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiB5ZWxsb3c7Ij57JGVudHJ5LnN0YXJ0X2RhdGV8Y21zX2RhdGVfZm9ybWF0fTwvc3Bhbj4KICAgICAgICB7ZWxzZX0KICAgICAgICAgIHskZW50cnkuc3RhcnRfZGF0ZXxjbXNfZGF0ZV9mb3JtYXR9CiAgICAgICAgey9pZn0KICAgICAgPC90ZD4KICAgICAgPHRkPgogICAgICAgIHsqIGVuZCBkYXRlICp9CiAgICAgICAge2lmICRlbnRyeS5lbmRfZGF0ZV91dCA8ICRzbWFydHkubm93fQogICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQ7Ij57JGVudHJ5LmVuZF9kYXRlfGNtc19kYXRlX2Zvcm1hdH08L3NwYW4+CiAgICAgICAge2Vsc2V9CiAgICAgICAgICB7JGVudHJ5LmVuZF9kYXRlfGNtc19kYXRlX2Zvcm1hdH0KICAgICAgICB7L2lmfQogICAgICA8L3RkPgogICAgICA8dGQ+e2lmICRlbnRyeS5pdGVtX29yZGVyID4gMX17bW9kdWxlX2FjdGlvbl9saW5rIG1vZHVsZT1Qcm9tb3Rpb25zIGFjdGlvbj0nYWRtaW5fbW92ZXByb21vJyBkaXI9J3VwJyBwcm9tbz0kZW50cnkuaWQgaW1hZ2U9J2ljb25zL3N5c3RlbS9hcnJvdy11LmdpZicgaW1hZ2Vvbmx5PTF9ey9pZn08L3RkPgogICAgICA8dGQ+e2lmICEkc21hcnR5LmZvcmVhY2gucHJvbW9zLmxhc3R9e21vZHVsZV9hY3Rpb25fbGluayBtb2R1bGU9UHJvbW90aW9ucyBhY3Rpb249J2FkbWluX21vdmVwcm9tbycgZGlyPSdkb3duJyBwcm9tbz0kZW50cnkuaWQgaW1hZ2U9J2ljb25zL3N5c3RlbS9hcnJvdy1kLmdpZicgaW1hZ2Vvbmx5PTF9ey9pZn08L3RkPgogICAgICA8dGQ+eyRlbnRyeS5lZGl0X2xpbmt9PC90ZD4KICAgICAgPHRkPnskZW50cnkuZGVsZXRlX2xpbmt9PC90ZD4KICAgIDwvdHI+CiAgey9mb3JlYWNofQogIDx0Ym9keT4KICA8L3Rib2R5Pgo8L3RhYmxlPgp7L2lmfQoKPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPjxwIGNsYXNzPSJwYWdlb3B0aW9ucyI+eyRhZGRsaW5rfTwvcD48L2Rpdj4K]]></data>
	</file>
	<file>
	  <filename>/templates/admin_dflt_templates_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRmb3Jtc3RhcnR9CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgeyRpbmZvX2RmbHRfdGVtcGxhdGV9CjwvZGl2PgoKPGZpZWxkc2V0PgogIDxsZWdlbmQ+eyRsZWdlbmRfY291cG9uZm9ybXRlbXBsYXRlfTwvbGVnZW5kPgogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X2NvdXBvbmZvcm10ZW1wbGF0ZX06PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9jb3Vwb25mb3JtdGVtcGxhdGV9PC9wPgogIDwvZGl2PgogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskc3VibWl0X2NvdXBvbmZvcm10ZW1wbGF0ZX0mbmJzcDt7JHJlc2V0X2NvdXBvbmZvcm10ZW1wbGF0ZX08L3A+CiAgPC9kaXY+CjwvZmllbGRzZXQ+Cgp7JGZvcm1lbmR9]]></data>
	</file>
	<file>
	  <filename>/templates/admin_instant_promotionstab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogcHJvbW90aW9ucyB0YWIgdGVtcGxhdGUgKn0KPGRpdiBjbGFzcz0id2FybmluZyIgc3R5bGU9IndpZHRoOiA5NSU7Ij57JG1vZC0+TGFuZygnd2Fybl9pbnN0YW50X3Byb21vdGlvbnMnKX08L2Rpdj4KPGRpdiBjbGFzcz0iaW5mb3JtYXRpb24iPnskbW9kLT5MYW5nKCdpbmZvX2luc3RhbnRfcHJvbW90aW9ucycpfTwvZGl2Pgp7aWYgaXNzZXQoJHByb21vdGlvbnMpfQo8dGFibGUgY2xhc3M9InBhZ2V0YWJsZSBjbXNfc29ydGFibGUgdGFibGVzb3J0ZXIiIGNlbGxzcGFjaW5nPSIwIj4KICA8dGhlYWQ+CiAgIDx0cj4KICAgICA8dGg+eyRtb2QtPkxhbmcoJ3Byb21wdF9pZCcpfTwvdGg+CiAgICAgPHRoPnskbW9kLT5MYW5nKCdwcm9tcHRfbmFtZScpfTwvdGg+CiAgICAgPHRoPnskbW9kLT5MYW5nKCdwcm9tcHRfc3RhcnRfZGF0ZScpfTwvdGg+CiAgICAgPHRoPnskbW9kLT5MYW5nKCdwcm9tcHRfZW5kX2RhdGUnKX08L3RoPgogICAgIDx0aCBjbGFzcz0icGFnZWljb24ge2xpdGVyYWx9e3NvcnRlcjogZmFsc2V9ey9saXRlcmFsfSI+Jm5ic3A7PC90aD4KICAgICA8dGggY2xhc3M9InBhZ2VpY29uIHtsaXRlcmFsfXtzb3J0ZXI6IGZhbHNlfXsvbGl0ZXJhbH0iPiZuYnNwOzwvdGg+CiAgICAgPHRoIGNsYXNzPSJwYWdlaWNvbiB7bGl0ZXJhbH17c29ydGVyOiBmYWxzZX17L2xpdGVyYWx9Ij4mbmJzcDs8L3RoPgogICAgIDx0aCBjbGFzcz0icGFnZWljb24ge2xpdGVyYWx9e3NvcnRlcjogZmFsc2V9ey9saXRlcmFsfSI+Jm5ic3A7PC90aD4KICAgPC90cj4KICA8L3RoZWFkPgogIHtmb3JlYWNoIGZyb209JHByb21vdGlvbnMgaXRlbT0nZW50cnknIG5hbWU9J3Byb21vcyd9CiAgICA8dHI+CiAgICAgIDx0ZD57JGVudHJ5LmlkfTwvdGQ+CiAgICAgIDx0ZD48YSBocmVmPSJ7JGVudHJ5LmVkaXRfdXJsfSIgdGl0bGU9InskbW9kLT5MYW5nKCdlZGl0Jyl9Ij57JGVudHJ5Lm5hbWV9PC9hPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICB7KiBzdGFydCBkYXRlICp9CiAgICAgICAge2lmICRlbnRyeS5zdGFydF9kYXRlX3V0ID4gJHNtYXJ0eS5ub3d9CiAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IHllbGxvdzsiPnskZW50cnkuc3RhcnRfZGF0ZXxjbXNfZGF0ZV9mb3JtYXR9PC9zcGFuPgogICAgICAgIHtlbHNlfQogICAgICAgICAgeyRlbnRyeS5zdGFydF9kYXRlfGNtc19kYXRlX2Zvcm1hdH0KICAgICAgICB7L2lmfQogICAgICA8L3RkPgogICAgICA8dGQ+CiAgICAgICAgeyogZW5kIGRhdGUgKn0KICAgICAgICB7aWYgJGVudHJ5LmVuZF9kYXRlX3V0IDwgJHNtYXJ0eS5ub3d9CiAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IHJlZDsiPnskZW50cnkuZW5kX2RhdGV8Y21zX2RhdGVfZm9ybWF0fTwvc3Bhbj4KICAgICAgICB7ZWxzZX0KICAgICAgICAgIHskZW50cnkuZW5kX2RhdGV8Y21zX2RhdGVfZm9ybWF0fQogICAgICAgIHsvaWZ9CiAgICAgIDwvdGQ+CiAgICAgIDx0ZD57aWYgJGVudHJ5Lml0ZW1fb3JkZXIgPiAxfXttb2R1bGVfYWN0aW9uX2xpbmsgbW9kdWxlPVByb21vdGlvbnMgYWN0aW9uPSdhZG1pbl9tb3ZlcHJvbW8nIGRpcj0ndXAnIHByb21vPSRlbnRyeS5pZCBpbWFnZT0naWNvbnMvc3lzdGVtL2Fycm93LXUuZ2lmJyBpbWFnZW9ubHk9MX17L2lmfTwvdGQ+CiAgICAgIDx0ZD57aWYgISRzbWFydHkuZm9yZWFjaC5wcm9tb3MubGFzdH17bW9kdWxlX2FjdGlvbl9saW5rIG1vZHVsZT1Qcm9tb3Rpb25zIGFjdGlvbj0nYWRtaW5fbW92ZXByb21vJyBkaXI9J2Rvd24nIHByb21vPSRlbnRyeS5pZCBpbWFnZT0naWNvbnMvc3lzdGVtL2Fycm93LWQuZ2lmJyBpbWFnZW9ubHk9MX17L2lmfTwvdGQ+CiAgICAgIDx0ZD57JGVudHJ5LmVkaXRfbGlua308L3RkPgogICAgICA8dGQ+eyRlbnRyeS5kZWxldGVfbGlua308L3RkPgogICAgPC90cj4KICB7L2ZvcmVhY2h9CiAgPHRib2R5PgogIDwvdGJvZHk+CjwvdGFibGU+CnsvaWZ9Cgo8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+PHAgY2xhc3M9InBhZ2VvcHRpb25zIj57JGFkZGxpbmt9PC9wPjwvZGl2Pgo=]]></data>
	</file>
	<file>
	  <filename>/templates/admin_settingstab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2xpdGVyYWx9CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KalF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKICBqUXVlcnkoJy5oaWRhYmxlJykuaGlkZSgpOwogIGpRdWVyeSgnIycrJ3svbGl0ZXJhbH17JGRmbHRfb2ZmZXJfdHlwZX17bGl0ZXJhbH0nKS5zaG93KCk7CiAgalF1ZXJ5KCcjb2ZmZXJ0eXBlJykuY2hhbmdlKGZ1bmN0aW9uKCl7CiAgICB2YXIgdmFsID0gJyMnK2pRdWVyeSh0aGlzKS52YWwoKTsKICAgIGpRdWVyeSgnLmhpZGFibGUnKS5oaWRlKCk7CiAgICBqUXVlcnkodmFsKS5zaG93KCk7CiAgfSk7Cn0pOwo8L3NjcmlwdD4Key9saXRlcmFsfQoKeyRmb3Jtc3RhcnR9CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X2RmbHRfcHJvbW90aW9uX3BlcmlvZCcpfTo8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICB7Y2FwdHVyZSBhc3NpZ249J3RtcCd9eyRhY3Rpb25pZH1wcm9tb3Rpb25fcGVyaW9key9jYXB0dXJlfQogICAge2h0bWxfb3B0aW9ucyBuYW1lPSR0bXAgb3B0aW9ucz0kcHJvbW90aW9uX3BlcmlvZHMgc2VsZWN0ZWQ9JGRmbHRfcHJvbW90aW9uX3BlcmlvZH0KICA8L3A+CjwvZGl2PgoKPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfZGZsdF9vZmZlcl90eXBlJyl9OjwvcD4KICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgIHtjYXB0dXJlIGFzc2lnbj0ndG1wJ317JGFjdGlvbmlkfW9mZmVyX3R5cGV7L2NhcHR1cmV9CiAgICA8c2VsZWN0IG5hbWU9InskdG1wfSIgaWQ9Im9mZmVydHlwZSI+CiAgICB7aHRtbF9vcHRpb25zIG9wdGlvbnM9JG9mZmVyX3R5cGVzIHNlbGVjdGVkPSRkZmx0X29mZmVyX3R5cGV9CiAgICA8L3NlbGVjdD4KICA8L3A+CjwvZGl2PgoKPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93IGhpZGFibGUiIGlkPSJQUk9NT1RJT05TX09GRkVSX1BFUkNFTlQiPgogPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X3BlcmNlbnRhZ2VfZGlzY291bnQnKX06PC9wPgogPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfW9mZmVyX3BlcmNlbnQiIHNpemU9IjUiIG1heGxlbmd0aD0iNSIgdmFsdWU9InskZGZsdF9vZmZlcl9kYXRhfSIvPgogPC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93IGhpZGFibGUiIGlkPSJQUk9NT1RJT05TX09GRkVSX0RJU0NPVU5UIj4KIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9wcmljZV9kaXNjb3VudCcpfTo8L3A+CiA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgeyRjdXJyZW5jeV9zeW1ib2x9PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9b2ZmZXJfcHJpY2UiIHNpemU9IjUiIG1heGxlbmd0aD0iNSIgdmFsdWU9InskZGZsdF9vZmZlcl9kYXRhfSIvPgogPC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93IGhpZGFibGUiIGlkPSJQUk9NT1RJT05TX09GRkVSX1BST0RVQ1QiPgp7KiA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfZnJlZV9wcm9kdWN0Jyl9OjwvcD4KIDxwIGNsYXNzPSJwYWdlaW5wdXQiPiZuYnNwOzwvcD4qfQo8L2Rpdj4KCntpZiAkZGZsdF9vZmZlcl90eXBlID09ICdQUk9NT1RJT05TX09GRkVSX1BFUkNFTlQnfQp7ZWxzZWlmICRkZmx0X29mZmVyX3R5cGUgPT0gJ1BST01PVElPTlNfT0ZGRVJfRElTQ09VTlQnfQp7ZWxzZX0Key9pZn0KCgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9pbWFnZV9kaXInKX08L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1pbWFnZV9kaXIiIHZhbHVlPSJ7JGltYWdlX2Rpcn0iIHNpemU9IjUwIiBtYXhsZW5ndGg9IjI1NSIvPgogICAgPGJyLz4KICAgIHskbW9kLT5MYW5nKCdpbmZvX2ltYWdlX2RpcicpfQogIDwvcD4KPC9kaXY+Cgp7KiBwcm9tb3Rpb25hbCBtZXNzYWdlcyAqfQo8ZmllbGRzZXQ+CjxsZWdlbmQ+eyRtb2QtPkxhbmcoJ2xibF9wcm9tb19tZXNzYWdlcycpfTombmJzcDs8L2xlZ2VuZD4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfZXJyb3JfaW52YWxpZCcpfTwvcD4KICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgIDx0ZXh0YXJlYSByb3dzPSIzIiBjb2xzPSI1MCIgbmFtZT0ieyRhY3Rpb25pZH1lcnJvcl9pbnZhbGlkIj57JGVycm9yX2ludmFsaWRfY29kZX08L3RleHRhcmVhPgogIDwvcD4KPC9kaXY+Cgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9lcnJvcl9lbXB0eScpfTwvcD4KICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgIDx0ZXh0YXJlYSByb3dzPSIzIiBjb2xzPSI1MCIgbmFtZT0ieyRhY3Rpb25pZH1lcnJvcl9lbXB0eSI+eyRlcnJvcl9lbXB0eV9jb2RlfTwvdGV4dGFyZWE+CiAgPC9wPgo8L2Rpdj4KCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X21zZ192YWxpZF9jb2RlJyl9PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgPHRleHRhcmVhIHJvd3M9IjMiIGNvbHM9IjUwIiBuYW1lPSJ7JGFjdGlvbmlkfW1zZ192YWxpZCI+eyRtc2dfdmFsaWRfY29kZX08L3RleHRhcmVhPgogIDwvcD4KPC9kaXY+Cgo8L2ZpZWxkc2V0PgoKPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InskYWN0aW9uaWR9c3VibWl0IiB2YWx1ZT0ieyRtb2QtPkxhbmcoJ3N1Ym1pdCcpfSIvPgogICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ieyRhY3Rpb25pZH1zZXRhc3Byb21vIiB2YWx1ZT0ieyRtb2QtPkxhbmcoJ3NldGFzcHJvbW8nKX0iLz4KICA8L3A+CjwvZGl2Pgp7JGZvcm1lbmR9]]></data>
	</file>
	<file>
	  <filename>/templates/inc_condition_row.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogdGVtcGxhdGUgZm9yIGNvbmRpdGlvbiByb3dzICp9Cnthc3NpZ24gdmFyPSJjb25kdHlwZSIgdmFsdWU9Il9fSU5WQUxJRF9fIn0Ke2Fzc2lnbiB2YXI9ImNvbmRkYXRhMCIgdmFsdWU9Il9fSU5WQUxJRF9fIn0Ke2Fzc2lnbiB2YXI9ImNvbmRkYXRhMSIgdmFsdWU9Il9fSU5WQUxJRF9fIn0Ke2lmIGlzc2V0KCRjb25kKX0KICB7YXNzaWduIHZhcj0iY29uZHR5cGUiIHZhbHVlPSRjb25kLT5nZXRfY29uZF90eXBlKCl9CiAgeyR0bXA9JGNvbmQtPmdldF9kYXRhKCl9CiAge2lmIGlzX2FycmF5KCR0bXApfQogICAgeyRjb25kZGF0YTA9JHRtcFswXX0KICAgIHskY29uZGRhdGExPSR0bXBbMV19CiAge2Vsc2V9CiAgICB7JGNvbmRkYXRhMD0kdG1wfQogIHsvaWZ9CnsvaWZ9Cgo8ZGl2IGlkPSJjb25kaXRpb25fcm93X3RtcGwiIGNsYXNzPSdjb25kaXRpb25fcm93JyBzdHlsZT0iZGlzcGxheTogbm9uZTsiPgogIDxpbnB1dCBjbGFzcz0ic2F2ZWRfY29uZHR5cGUiIHR5cGU9ImhpZGRlbiIgbmFtZT0ieyRhY3Rpb25pZH1zYXZlZF9jb25kdHlwZVtdIiB2YWx1ZT0ieyRjb25kdHlwZX0iLz4KICA8aW5wdXQgY2xhc3M9InNhdmVkX2NvbmRkYXRhMCIgdHlwZT0iaGlkZGVuIiBuYW1lPSJ7JGFjdGlvbmlkfXNhdmVkX2NvbmRkYXRhW10iIHZhbHVlPSJ7JGNvbmRkYXRhMH0iLz4KICA8aW5wdXQgY2xhc3M9InNhdmVkX2NvbmRkYXRhMSIgdHlwZT0iaGlkZGVuIiBuYW1lPSJ7JGFjdGlvbmlkfXNhdmVkX2NvbmRkYXRhW10iIHZhbHVlPSJ7JGNvbmRkYXRhMX0iLz4KICA8dGFibGUgc3R5bGU9InBhZGRpbmc6IDFweDsgd2lkdGg6IDEwMCU7Ij4KICAgIDx0cj4KICAgICAgPHRkPgogICAgICAgIDxzcGFuIGNsYXNzPSdkaXNwX2NvbmR0eXBlJz57JG1vZC0+TGFuZygkY29uZHR5cGUpfTwvc3Bhbj4KICAgICAgPC90ZD4KICAgICAgPHRkPgogICAgICAgIDxzcGFuIGNsYXNzPSdkaXNwX2NvbmRkYXRhMCc+eyRjb25kZGF0YTB9PC9zcGFuPiAtLSA8c3BhbiBjbGFzcz0iZGlzcF9jb25kZGF0YTEiPnskY29uZGRhdGExfTwvc3Bhbj48L3NwYW4+CiAgICAgIDwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8YSBjbGFzcz0iZGVsY29uZCIgaHJlZj0iIyIgdGl0bGU9InskbW9kLT5MYW5nKCdkZWxldGUnKX0iPntjZ2ltYWdlIGltYWdlPSdpY29ucy9zeXN0ZW0vZGVsZXRlLmdpZicgYWx0PSRtb2QtPkxhbmcoJ2RlbGV0ZScpfTwvYT4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgPC90YWJsZT4KPC9kaXY+]]></data>
	</file>
	<file>
	  <filename>/templates/orig_couponform_template.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogY291cG9uIGZvcm0gdGVtcGxhdGUgKn0KeyRmb3Jtc3RhcnR9CjxmaWVsZHNldD4KPGxlZ2VuZD57JFByb21vdGlvbnMtPkxhbmcoJ3Byb21wdF9jb3Vwb25fY29kZScpfTwvbGVnZW5kPgoKPGRpdiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyI+CiAge2lmIGlzc2V0KCRlcnJvcil9PHAgc3R5bGU9ImNvbG9yOiByZWQ7Ij57JGVycm9yfTwvcD57L2lmfQogIHtpZiBpc3NldCgkbXNnKX08cCBzdHlsZT0iY29sb3I6IGdyZWVuOyI+eyRtc2d9PC9wPnsvaWZ9CgogIDxwPnskbW9kLT5MYW5nKCdwcm9tcHRfY29kZScpfTombmJzcDs8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1wcm9tb19jb2RlIiBzaXplPSIxMiIgbWF4bGVuZ3RoPSIxMCIgdmFsdWU9InskY29kZX0iLz48L3A+CiAgPHA+CiAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7JGFjdGlvbmlkfXByb21vX3N1Ym1pdCIgdmFsdWU9InskbW9kLT5MYW5nKCdzdWJtaXQnKX0iLz4KICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InskYWN0aW9uaWR9cHJvbW9fY2xlYXIiIHZhbHVlPSJ7JG1vZC0+TGFuZygnY2xlYXJfY291cG9ucycpfSIvPgogIDwvcD4KCiAge2lmIGlzc2V0KCRjb3Vwb25zKX0KICA8cD57JG1vZC0+TGFuZygnZW50ZXJlZF9jb3Vwb25zJyl9OjwvcD4KICA8dWw+CiAge2ZvcmVhY2ggZnJvbT0kY291cG9ucyBpdGVtPSdpdGVtJyBuYW1lPSdjb3Vwb25zJ30KICAgIDxsaT57JHNtYXJ0eS5mb3JlYWNoLmNvdXBvbnMuaXRlcmF0aW9ufTogeyRpdGVtfTwvbGk+CiAgey9mb3JlYWNofQogIDwvdWw+CiAgey9pZn0gIAo8L2Rpdj4KCjwvZmllbGRzZXQ+CnskZm9ybWVuZH0=]]></data>
	</file>
</module>
